Name: series-workflowzwvqq Phase: Succeeded StartedAt: 2026-07-08 10:39:28 +0000 UTC FinishedAt: 2026-07-08 15:25:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzwvqq[0] Phase: Succeeded StartedAt: 2026-07-08 10:39:28 +0000 UTC FinishedAt: 2026-07-08 11:00:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzwvqq[0].run-triage Phase: Succeeded StartedAt: 2026-07-08 10:39:28 +0000 UTC FinishedAt: 2026-07-08 11:00:36 +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": "602701718649936eb287bf6c7ecf870ec54c6f71", "config_name": "upstream-apparmor-kasan.config", "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": "602701718649936eb287bf6c7ecf870ec54c6f71", "config_name": "upstream-apparmor-kasan.config", "series_id": "33a3a3b2-c552-4d19-b1a0-29989d856e3c" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "check_stack_write_fixed_off", "check_stack_read_fixed_off", "__is_pointer_value", "is_pointer_regtype" ], "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+CgkJCTx0ZD4yMDI2LzA3LzA4IDEwOjU5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y2hlY2tfc3RhY2tfd3JpdGVfZml4ZWRfb2ZmJiMzNDssCiAgICAmIzM0O2NoZWNrX3N0YWNrX3JlYWRfZml4ZWRfb2ZmJiMzNDssCiAgICAmIzM0O19faXNfcG9pbnRlcl92YWx1ZSYjMzQ7LAogICAgJiMzNDtpc19wb2ludGVyX3JlZ3R5cGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciB0byBhbGxvdyBzcGlsbGluZyBhbmQgZmlsbGluZyBvZiBhbGwgcG9pbnRlciB0eXBlcyB0by9mcm9tIHRoZSBzdGFjaywgcmVtb3ZpbmcgYSBoYXJkY29kZWQgbGlzdCBvZiBhbGxvd2VkIHBvaW50ZXIgdHlwZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBCUEYgdmVyaWZpZXIgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTA6NTk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBkZjNjZDkzZGVjYTFkODVjNGU1YmIwZDM1YWNhZTg1M2QyMjM5N2E2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgOCAxMDo1OTo0NSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbmluZGV4IDMxOTNiNDczNzYyYmE0Li41MWY3OTY1ZDQyZTMyNCAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5AQCAtMzMwNCwzNCAmIzQzOzMzMDQsNiBAQCBzdGF0aWMgaW50IG1hcmtfY2hhaW5fcHJlY2lzaW9uX2JhdGNoKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRyZXR1cm4gYnBmX21hcmtfY2hhaW5fcHJlY2lzaW9uKGVudiwgc3RhcnRpbmdfc3RhdGUsIC0xLCBOVUxMKTtcbiB9XG4gXG4tc3RhdGljIGJvb2wgaXNfc3BpbGxhYmxlX3JlZ3R5cGUoZW51bSBicGZfcmVnX3R5cGUgdHlwZSlcbi17XG4tXHRzd2l0Y2ggKGJhc2VfdHlwZSh0eXBlKSkge1xuLVx0Y2FzZSBQVFJfVE9fTUFQX1ZBTFVFOlxuLVx0Y2FzZSBQVFJfVE9fU1RBQ0s6XG4tXHRjYXNlIFBUUl9UT19DVFg6XG4tXHRjYXNlIFBUUl9UT19QQUNLRVQ6XG4tXHRjYXNlIFBUUl9UT19QQUNLRVRfTUVUQTpcbi1cdGNhc2UgUFRSX1RPX1BBQ0tFVF9FTkQ6XG4tXHRjYXNlIFBUUl9UT19GTE9XX0tFWVM6XG4tXHRjYXNlIENPTlNUX1BUUl9UT19NQVA6XG4tXHRjYXNlIFBUUl9UT19TT0NLRVQ6XG4tXHRjYXNlIFBUUl9UT19TT0NLX0NPTU1PTjpcbi1cdGNhc2UgUFRSX1RPX1RDUF9TT0NLOlxuLVx0Y2FzZSBQVFJfVE9fWERQX1NPQ0s6XG4tXHRjYXNlIFBUUl9UT19CVEZfSUQ6XG4tXHRjYXNlIFBUUl9UT19CVUY6XG4tXHRjYXNlIFBUUl9UT19NRU06XG4tXHRjYXNlIFBUUl9UT19GVU5DOlxuLVx0Y2FzZSBQVFJfVE9fTUFQX0tFWTpcbi1cdGNhc2UgUFRSX1RPX0FSRU5BOlxuLVx0XHRyZXR1cm4gdHJ1ZTtcbi1cdGRlZmF1bHQ6XG4tXHRcdHJldHVybiBmYWxzZTtcbi1cdH1cbi19XG4tXG4tXG4gLyogY2hlY2sgaWYgcmVnaXN0ZXIgaXMgYSBjb25zdGFudCBzY2FsYXIgdmFsdWUgKi9cbiBzdGF0aWMgYm9vbCBpc19yZWdfY29uc3Qoc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZywgYm9vbCBzdWJyZWczMilcbiB7XG5AQCAtMzM0NSwxMyAmIzQzOzMzMTcsMTggQEAgc3RhdGljIHU2NCByZWdfY29uc3RfdmFsdWUoc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZywgYm9vbCBzdWJyZWczMilcbiBcdHJldHVybiBzdWJyZWczMiA/IHRudW1fc3VicmVnKHJlZy1cdTAwM2V2YXJfb2ZmKS52YWx1ZSA6IHJlZy1cdTAwM2V2YXJfb2ZmLnZhbHVlO1xuIH1cbiBcbiYjNDM7c3RhdGljIGJvb2wgaXNfcG9pbnRlcl9yZWd0eXBlKGVudW0gYnBmX3JlZ190eXBlIHR5cGUpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gdHlwZSAhPSBTQ0FMQVJfVkFMVUUgXHUwMDI2XHUwMDI2IHR5cGUgIT0gTk9UX0lOSVQ7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGJvb2wgX19pc19wb2ludGVyX3ZhbHVlKGJvb2wgYWxsb3dfcHRyX2xlYWtzLFxuIFx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxuIHtcbiBcdGlmIChhbGxvd19wdHJfbGVha3MpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbi1cdHJldHVybiByZWctXHUwMDNldHlwZSAhPSBTQ0FMQVJfVkFMVUU7XG4mIzQzO1x0cmV0dXJuIGlzX3BvaW50ZXJfcmVndHlwZShyZWctXHUwMDNldHlwZSk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGNsZWFyX3NjYWxhcl9pZChzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxuQEAgLTM0NzYsNyAmIzQzOzM0NTMsNyBAQCBzdGF0aWMgaW50IGNoZWNrX3N0YWNrX3dyaXRlX2ZpeGVkX29mZihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0aWYgKHZhbHVlX3JlZ25vIFx1MDAzZT0gMClcbiBcdFx0cmVnID0gXHUwMDI2Y3VyLVx1MDAzZXJlZ3NbdmFsdWVfcmVnbm9dO1xuIFx0aWYgKCFlbnYtXHUwMDNlYnlwYXNzX3NwZWNfdjQpIHtcbi1cdFx0Ym9vbCBzYW5pdGl6ZSA9IHJlZyBcdTAwMjZcdTAwMjYgaXNfc3BpbGxhYmxlX3JlZ3R5cGUocmVnLVx1MDAzZXR5cGUpO1xuJiM0MztcdFx0Ym9vbCBzYW5pdGl6ZSA9IHJlZyBcdTAwMjZcdTAwMjYgaXNfcG9pbnRlcl9yZWd0eXBlKHJlZy1cdTAwM2V0eXBlKTtcbiBcbiBcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgc2l6ZTsgaSYjNDM7JiM0MzspIHtcbiBcdFx0XHR1OCB0eXBlID0gc3RhdGUtXHUwMDNlc3RhY2tbc3BpXS5zbG90X3R5cGVbKHNsb3QgLSBpKSAlXG5AQCAtMzUxNyw3ICYjNDM7MzQ5NCw3IEBAIHN0YXRpYyBpbnQgY2hlY2tfc3RhY2tfd3JpdGVfZml4ZWRfb2ZmKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRcdF9fbWFya19yZWdfa25vd24odG1wX3JlZywgaW5zbi1cdTAwM2VpbW0pO1xuIFx0XHR0bXBfcmVnLVx1MDAzZXR5cGUgPSBTQ0FMQVJfVkFMVUU7XG4gXHRcdHNhdmVfcmVnaXN0ZXJfc3RhdGUoZW52LCBzdGF0ZSwgc3BpLCB0bXBfcmVnLCBzaXplKTtcbi1cdH0gZWxzZSBpZiAocmVnIFx1MDAyNlx1MDAyNiBpc19zcGlsbGFibGVfcmVndHlwZShyZWctXHUwMDNldHlwZSkpIHtcbiYjNDM7XHR9IGVsc2UgaWYgKHJlZyBcdTAwMjZcdTAwMjYgaXNfcG9pbnRlcl9yZWd0eXBlKHJlZy1cdTAwM2V0eXBlKSkge1xuIFx0XHQvKiByZWdpc3RlciBjb250YWluaW5nIHBvaW50ZXIgaXMgYmVpbmcgc3BpbGxlZCBpbnRvIHN0YWNrICovXG4gXHRcdGlmIChzaXplICE9IEJQRl9SRUdfU0laRSkge1xuIFx0XHRcdHZlcmJvc2VfbGluZm8oZW52LCBpbnNuX2lkeCwgXCYjMzQ7OyBcJiMzNDspO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9nb3RveC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2dvdG94LmNcbmluZGV4IGY4OGFhNGNkYjI3OTJjLi41YjE4YzlhMjc3MTdiYyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9nb3RveC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfZ290b3guY1xuQEAgLTM4NCw2ICYjNDM7Mzg0LDMxIEBAIGp0MF8lPTpcdFx0XHRcdFx0XHRcdFx0XFxcbiBcdDogX19jbG9iYmVyX2FsbCk7XG4gfVxuIFxuJiM0MzsvKiBjaGVjayB2YWxpZCBzcGlsbC9maWxsLCBwdHIgdG8gaW5zbiAqL1xuJiM0MztTRUMoXCYjMzQ7c29ja2V0XCYjMzQ7KVxuJiM0MztfX3N1Y2Nlc3NcbiYjNDM7X19uYWtlZCB2b2lkIHNwaWxsX2ZpbGxfcHRyX3RvX2luc24odm9pZClcbiYjNDM7e1xuJiM0MztcdGFzbSB2b2xhdGlsZSAoXG4mIzQzO1x0XCYjMzQ7LnB1c2hzZWN0aW9uIC5qdW1wdGFibGVzLFxcXCYjMzQ7XFxcJiMzNDssQHByb2diaXRzO1wmIzM0O1xuJiM0MztcdFwmIzM0O2p0MF8lPTpcJiMzNDtcbiYjNDM7XHRcJiMzNDsucXVhZCByZXQwXyU9IC0gc29ja2V0O1wmIzM0O1xuJiM0MztcdFwmIzM0Oy5zaXplIGp0MF8lPSwgODtcJiMzNDtcbiYjNDM7XHRcJiMzNDsuZ2xvYmFsIGp0MF8lPTtcJiMzNDtcbiYjNDM7XHRcJiMzNDsucG9wc2VjdGlvbjtcJiMzNDtcbiYjNDM7XHRcJiMzNDtyMCA9IGp0MF8lPSBsbDtcJiMzNDtcbiYjNDM7XHRcJiMzNDtyMCA9ICoodTY0ICopKHIwICYjNDM7IDApO1wmIzM0O1xuJiM0MztcdFwmIzM0OyoodTY0ICopKHIxMCAtIDgpID0gcjA7XCYjMzQ7XG4mIzQzO1x0XCYjMzQ7cjAgPSAqKHU2NCAqKShyMTAgLSA4KTtcJiMzNDtcbiYjNDM7XHRcJiMzNDsuOGJ5dGUgJVtnb3RveF9yMF07XCYjMzQ7XG4mIzQzO1x0XCYjMzQ7cmV0MF8lPTpcJiMzNDtcbiYjNDM7XHRcJiMzNDtyMCA9IDA7XCYjMzQ7XG4mIzQzO1x0XCYjMzQ7ZXhpdDtcJiMzNDtcbiYjNDM7XHQ6XG4mIzQzO1x0OiBfX2ltbV9pbnNuKGdvdG94X3IwLCBCUEZfUkFXX0lOU04oQlBGX0pNUCB8IEJQRl9KQSB8IEJQRl9YLCBCUEZfUkVHXzAsIDAsIDAsIDApKVxuJiM0MztcdDogX19jbG9iYmVyX2FsbCk7XG4mIzQzO31cbiYjNDM7XG4gI2VuZGlmIC8qIF9fVEFSR0VUX0FSQ0hfeDg2IHx8IF9fVEFSR0VUX0FSQ0hfYXJtNjQgfHwgX19UQVJHRVRfQVJDSF9wb3dlcnBjKi9cbiBcbiBjaGFyIF9saWNlbnNlW10gU0VDKFwmIzM0O2xpY2Vuc2VcJiMzNDspID0gXCYjMzQ7R1BMXCYjMzQ7O1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9zcGlsbF9maWxsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfc3BpbGxfZmlsbC5jXG5pbmRleCA3MmM2OTEzMzM3MDM3Ny4uOGIxNjZjNDJjNGUwZTggMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfc3BpbGxfZmlsbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfc3BpbGxfZmlsbC5jXG5AQCAtMTQwMyw0ICYjNDM7MTQwMyw0NiBAQCBfX25ha2VkIHZvaWQgcGFydGlhbF9maWxsX2Zyb21fY2xlYW5lZF9wb2ludGVyX3NwaWxsKHZvaWQpXG4gXHRcdCAgICAgIDo6OiBfX2Nsb2JiZXJfYWxsKTtcbiB9XG4gXG4mIzQzOy8qIGNoZWNrIHZhbGlkIHNwaWxsL2ZpbGwsIHB0ciB0byB0cCBidWZmZXIgKi9cbiYjNDM7U0VDKFwmIzM0O3Jhd190cmFjZXBvaW50LndcJiMzNDspXG4mIzQzO19fc3VjY2Vzc1xuJiM0MztfX25ha2VkIHZvaWQgc3BpbGxfZmlsbF9wdHJfdG9fdHBfYnVmZmVyKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRhc20gdm9sYXRpbGUgKFxuJiM0MztcdFwmIzM0O3I2ID0gKih1NjQqKShyMSAmIzQzOyAwKTtcJiMzNDtcdC8qIHI2IGlzIHRoZSB3cml0YWJsZSB0cmFjZXBvaW50IGJ1ZmZlciAqL1xuJiM0MztcdFwmIzM0OyoodTY0KikocjEwIC0gOCkgPSByNjtcJiMzNDtcbiYjNDM7XHRcJiMzNDtyNyA9ICoodTY0KikocjEwIC0gOCk7XCYjMzQ7XG4mIzQzO1x0XCYjMzQ7cjAgPSAwO1wmIzM0O1xuJiM0MztcdFwmIzM0OyoodTY0KikocjcgJiM0MzsgMCkgPSByMDtcJiMzNDtcdC8qIHNob3VsZCBiZSBhYmxlIHRvIHdyaXRlIHRocm91Z2ggdGhlIGJ1ZmZlciAqL1xuJiM0MztcdFwmIzM0O3IwID0gMDtcJiMzNDtcbiYjNDM7XHRcJiMzNDtleGl0O1wmIzM0O1xuJiM0MztcdDo6OiBfX2Nsb2JiZXJfYWxsKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7X19ub2lubGluZSBpbnQgc3BpbGxfZmlsbF9keW5wdHJfc3VicHJvZyhzdHJ1Y3QgYnBmX2R5bnB0ciAqZHB0cilcbiYjNDM7e1xuJiM0MztcdGxvbmcgKnA7XG4mIzQzO1xuJiM0MztcdGFzbSB2b2xhdGlsZSAoXCYjMzQ7Kih1NjQgKikocjEwIC0gOCkgPSAlW2RwdHJdO1wmIzM0OyAvKiBzcGlsbCB0aGUgQ09OU1RfUFRSX1RPX0RZTlBUUiBhcmd1bWVudCAqL1xuJiM0MztcdFx0ICAgICAgXCYjMzQ7JVtkcHRyXSA9ICoodTY0ICopKHIxMCAtIDgpO1wmIzM0O1xuJiM0MztcdFx0ICAgICAgOiBbZHB0cl0gXCYjMzQ7JiM0MztyXCYjMzQ7KGRwdHIpIDo6IFwmIzM0O21lbW9yeVwmIzM0Oyk7XG4mIzQzO1x0cCA9IGJwZl9keW5wdHJfZGF0YShkcHRyLCAwLCBzaXplb2YoKnApKTtcbiYjNDM7XHRpZiAoIXApXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGNoYXIgZHB0cl9tZW1fYnVmWzE2XTtcbiYjNDM7XG4mIzQzOy8qIGNoZWNrIHZhbGlkIHNwaWxsL2ZpbGwsIGNvbnN0IHB0ciB0byBkeW5wdHIgKi9cbiYjNDM7U0VDKFwmIzM0O3NvY2tldFwmIzM0OylcbiYjNDM7X19zdWNjZXNzXG4mIzQzO2ludCBzcGlsbF9maWxsX2NvbnN0X3B0cl90b19keW5wdHIodm9pZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBicGZfZHlucHRyIHB0cjtcbiYjNDM7XG4mIzQzO1x0YnBmX2R5bnB0cl9mcm9tX21lbShkcHRyX21lbV9idWYsIHNpemVvZihkcHRyX21lbV9idWYpLCAwLCBcdTAwMjZwdHIpO1xuJiM0MztcdHJldHVybiBzcGlsbF9maWxsX2R5bnB0cl9zdWJwcm9nKFx1MDAyNnB0cik7XG4mIzQzO31cbiYjNDM7XG4gY2hhciBfbGljZW5zZVtdIFNFQyhcJiMzNDtsaWNlbnNlXCYjMzQ7KSA9IFwmIzM0O0dQTFwmIzM0OztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxMDo1OTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2NoZWNrX3N0YWNrX3dyaXRlX2ZpeGVkX29mZiYjMzQ7LAogICAgJiMzNDtjaGVja19zdGFja19yZWFkX2ZpeGVkX29mZiYjMzQ7LAogICAgJiMzNDtfX2lzX3BvaW50ZXJfdmFsdWUmIzM0OywKICAgICYjMzQ7aXNfcG9pbnRlcl9yZWd0eXBlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIgdG8gYWxsb3cgc3BpbGxpbmcgYW5kIGZpbGxpbmcgb2YgYWxsIHBvaW50ZXIgdHlwZXMgdG8vZnJvbSB0aGUgc3RhY2ssIHJlbW92aW5nIGEgaGFyZGNvZGVkIGxpc3Qgb2YgYWxsb3dlZCBwb2ludGVyIHR5cGVzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgQlBGIHZlcmlmaWVyIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBkZjNjZDkzZGVjYTFkODVjNGU1YmIwZDM1YWNhZTg1M2QyMjM5N2E2CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBKdWwgOCAxMDo1OTo0NSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuYwppbmRleCAzMTkzYjQ3Mzc2MmJhNC4uNTFmNzk2NWQ0MmUzMjQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMKQEAgLTMzMDQsMzQgJiM0MzszMzA0LDYgQEAgc3RhdGljIGludCBtYXJrX2NoYWluX3ByZWNpc2lvbl9iYXRjaChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LAogCXJldHVybiBicGZfbWFya19jaGFpbl9wcmVjaXNpb24oZW52LCBzdGFydGluZ19zdGF0ZSwgLTEsIE5VTEwpOwogfQogCi1zdGF0aWMgYm9vbCBpc19zcGlsbGFibGVfcmVndHlwZShlbnVtIGJwZl9yZWdfdHlwZSB0eXBlKQotewotCXN3aXRjaCAoYmFzZV90eXBlKHR5cGUpKSB7Ci0JY2FzZSBQVFJfVE9fTUFQX1ZBTFVFOgotCWNhc2UgUFRSX1RPX1NUQUNLOgotCWNhc2UgUFRSX1RPX0NUWDoKLQljYXNlIFBUUl9UT19QQUNLRVQ6Ci0JY2FzZSBQVFJfVE9fUEFDS0VUX01FVEE6Ci0JY2FzZSBQVFJfVE9fUEFDS0VUX0VORDoKLQljYXNlIFBUUl9UT19GTE9XX0tFWVM6Ci0JY2FzZSBDT05TVF9QVFJfVE9fTUFQOgotCWNhc2UgUFRSX1RPX1NPQ0tFVDoKLQljYXNlIFBUUl9UT19TT0NLX0NPTU1PTjoKLQljYXNlIFBUUl9UT19UQ1BfU09DSzoKLQljYXNlIFBUUl9UT19YRFBfU09DSzoKLQljYXNlIFBUUl9UT19CVEZfSUQ6Ci0JY2FzZSBQVFJfVE9fQlVGOgotCWNhc2UgUFRSX1RPX01FTToKLQljYXNlIFBUUl9UT19GVU5DOgotCWNhc2UgUFRSX1RPX01BUF9LRVk6Ci0JY2FzZSBQVFJfVE9fQVJFTkE6Ci0JCXJldHVybiB0cnVlOwotCWRlZmF1bHQ6Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci19Ci0KLQogLyogY2hlY2sgaWYgcmVnaXN0ZXIgaXMgYSBjb25zdGFudCBzY2FsYXIgdmFsdWUgKi8KIHN0YXRpYyBib29sIGlzX3JlZ19jb25zdChzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCBib29sIHN1YnJlZzMyKQogewpAQCAtMzM0NSwxMyAmIzQzOzMzMTcsMTggQEAgc3RhdGljIHU2NCByZWdfY29uc3RfdmFsdWUoc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZywgYm9vbCBzdWJyZWczMikKIAlyZXR1cm4gc3VicmVnMzIgPyB0bnVtX3N1YnJlZyhyZWctJmd0O3Zhcl9vZmYpLnZhbHVlIDogcmVnLSZndDt2YXJfb2ZmLnZhbHVlOwogfQogCiYjNDM7c3RhdGljIGJvb2wgaXNfcG9pbnRlcl9yZWd0eXBlKGVudW0gYnBmX3JlZ190eXBlIHR5cGUpCiYjNDM7ewomIzQzOwlyZXR1cm4gdHlwZSAhPSBTQ0FMQVJfVkFMVUUgJmFtcDsmYW1wOyB0eXBlICE9IE5PVF9JTklUOwomIzQzO30KJiM0MzsKIHN0YXRpYyBib29sIF9faXNfcG9pbnRlcl92YWx1ZShib29sIGFsbG93X3B0cl9sZWFrcywKIAkJCSAgICAgICBjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKQogewogCWlmIChhbGxvd19wdHJfbGVha3MpCiAJCXJldHVybiBmYWxzZTsKIAotCXJldHVybiByZWctJmd0O3R5cGUgIT0gU0NBTEFSX1ZBTFVFOwomIzQzOwlyZXR1cm4gaXNfcG9pbnRlcl9yZWd0eXBlKHJlZy0mZ3Q7dHlwZSk7CiB9CiAKIHN0YXRpYyB2b2lkIGNsZWFyX3NjYWxhcl9pZChzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKQpAQCAtMzQ3Niw3ICYjNDM7MzQ1Myw3IEBAIHN0YXRpYyBpbnQgY2hlY2tfc3RhY2tfd3JpdGVfZml4ZWRfb2ZmKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsCiAJaWYgKHZhbHVlX3JlZ25vICZndDs9IDApCiAJCXJlZyA9ICZhbXA7Y3VyLSZndDtyZWdzW3ZhbHVlX3JlZ25vXTsKIAlpZiAoIWVudi0mZ3Q7YnlwYXNzX3NwZWNfdjQpIHsKLQkJYm9vbCBzYW5pdGl6ZSA9IHJlZyAmYW1wOyZhbXA7IGlzX3NwaWxsYWJsZV9yZWd0eXBlKHJlZy0mZ3Q7dHlwZSk7CiYjNDM7CQlib29sIHNhbml0aXplID0gcmVnICZhbXA7JmFtcDsgaXNfcG9pbnRlcl9yZWd0eXBlKHJlZy0mZ3Q7dHlwZSk7CiAKIAkJZm9yIChpID0gMDsgaSAmbHQ7IHNpemU7IGkmIzQzOyYjNDM7KSB7CiAJCQl1OCB0eXBlID0gc3RhdGUtJmd0O3N0YWNrW3NwaV0uc2xvdF90eXBlWyhzbG90IC0gaSkgJQpAQCAtMzUxNyw3ICYjNDM7MzQ5NCw3IEBAIHN0YXRpYyBpbnQgY2hlY2tfc3RhY2tfd3JpdGVfZml4ZWRfb2ZmKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsCiAJCV9fbWFya19yZWdfa25vd24odG1wX3JlZywgaW5zbi0mZ3Q7aW1tKTsKIAkJdG1wX3JlZy0mZ3Q7dHlwZSA9IFNDQUxBUl9WQUxVRTsKIAkJc2F2ZV9yZWdpc3Rlcl9zdGF0ZShlbnYsIHN0YXRlLCBzcGksIHRtcF9yZWcsIHNpemUpOwotCX0gZWxzZSBpZiAocmVnICZhbXA7JmFtcDsgaXNfc3BpbGxhYmxlX3JlZ3R5cGUocmVnLSZndDt0eXBlKSkgewomIzQzOwl9IGVsc2UgaWYgKHJlZyAmYW1wOyZhbXA7IGlzX3BvaW50ZXJfcmVndHlwZShyZWctJmd0O3R5cGUpKSB7CiAJCS8qIHJlZ2lzdGVyIGNvbnRhaW5pbmcgcG9pbnRlciBpcyBiZWluZyBzcGlsbGVkIGludG8gc3RhY2sgKi8KIAkJaWYgKHNpemUgIT0gQlBGX1JFR19TSVpFKSB7CiAJCQl2ZXJib3NlX2xpbmZvKGVudiwgaW5zbl9pZHgsICYjMzQ7OyAmIzM0Oyk7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfZ290b3guYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9nb3RveC5jCmluZGV4IGY4OGFhNGNkYjI3OTJjLi41YjE4YzlhMjc3MTdiYyAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2dvdG94LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2dvdG94LmMKQEAgLTM4NCw2ICYjNDM7Mzg0LDMxIEBAIGp0MF8lPToJCQkJCQkJCVwKIAk6IF9fY2xvYmJlcl9hbGwpOwogfQogCiYjNDM7LyogY2hlY2sgdmFsaWQgc3BpbGwvZmlsbCwgcHRyIHRvIGluc24gKi8KJiM0MztTRUMoJiMzNDtzb2NrZXQmIzM0OykKJiM0MztfX3N1Y2Nlc3MKJiM0MztfX25ha2VkIHZvaWQgc3BpbGxfZmlsbF9wdHJfdG9faW5zbih2b2lkKQomIzQzO3sKJiM0MzsJYXNtIHZvbGF0aWxlICgKJiM0MzsJJiMzNDsucHVzaHNlY3Rpb24gLmp1bXB0YWJsZXMsXCYjMzQ7XCYjMzQ7LEBwcm9nYml0czsmIzM0OwomIzQzOwkmIzM0O2p0MF8lPTomIzM0OwomIzQzOwkmIzM0Oy5xdWFkIHJldDBfJT0gLSBzb2NrZXQ7JiMzNDsKJiM0MzsJJiMzNDsuc2l6ZSBqdDBfJT0sIDg7JiMzNDsKJiM0MzsJJiMzNDsuZ2xvYmFsIGp0MF8lPTsmIzM0OwomIzQzOwkmIzM0Oy5wb3BzZWN0aW9uOyYjMzQ7CiYjNDM7CSYjMzQ7cjAgPSBqdDBfJT0gbGw7JiMzNDsKJiM0MzsJJiMzNDtyMCA9ICoodTY0ICopKHIwICYjNDM7IDApOyYjMzQ7CiYjNDM7CSYjMzQ7Kih1NjQgKikocjEwIC0gOCkgPSByMDsmIzM0OwomIzQzOwkmIzM0O3IwID0gKih1NjQgKikocjEwIC0gOCk7JiMzNDsKJiM0MzsJJiMzNDsuOGJ5dGUgJVtnb3RveF9yMF07JiMzNDsKJiM0MzsJJiMzNDtyZXQwXyU9OiYjMzQ7CiYjNDM7CSYjMzQ7cjAgPSAwOyYjMzQ7CiYjNDM7CSYjMzQ7ZXhpdDsmIzM0OwomIzQzOwk6CiYjNDM7CTogX19pbW1faW5zbihnb3RveF9yMCwgQlBGX1JBV19JTlNOKEJQRl9KTVAgfCBCUEZfSkEgfCBCUEZfWCwgQlBGX1JFR18wLCAwLCAwLCAwKSkKJiM0MzsJOiBfX2Nsb2JiZXJfYWxsKTsKJiM0Mzt9CiYjNDM7CiAjZW5kaWYgLyogX19UQVJHRVRfQVJDSF94ODYgfHwgX19UQVJHRVRfQVJDSF9hcm02NCB8fCBfX1RBUkdFVF9BUkNIX3Bvd2VycGMqLwogCiBjaGFyIF9saWNlbnNlW10gU0VDKCYjMzQ7bGljZW5zZSYjMzQ7KSA9ICYjMzQ7R1BMJiMzNDs7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfc3BpbGxfZmlsbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3NwaWxsX2ZpbGwuYwppbmRleCA3MmM2OTEzMzM3MDM3Ny4uOGIxNjZjNDJjNGUwZTggMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9zcGlsbF9maWxsLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3NwaWxsX2ZpbGwuYwpAQCAtMTQwMyw0ICYjNDM7MTQwMyw0NiBAQCBfX25ha2VkIHZvaWQgcGFydGlhbF9maWxsX2Zyb21fY2xlYW5lZF9wb2ludGVyX3NwaWxsKHZvaWQpCiAJCSAgICAgIDo6OiBfX2Nsb2JiZXJfYWxsKTsKIH0KIAomIzQzOy8qIGNoZWNrIHZhbGlkIHNwaWxsL2ZpbGwsIHB0ciB0byB0cCBidWZmZXIgKi8KJiM0MztTRUMoJiMzNDtyYXdfdHJhY2Vwb2ludC53JiMzNDspCiYjNDM7X19zdWNjZXNzCiYjNDM7X19uYWtlZCB2b2lkIHNwaWxsX2ZpbGxfcHRyX3RvX3RwX2J1ZmZlcih2b2lkKQomIzQzO3sKJiM0MzsJYXNtIHZvbGF0aWxlICgKJiM0MzsJJiMzNDtyNiA9ICoodTY0KikocjEgJiM0MzsgMCk7JiMzNDsJLyogcjYgaXMgdGhlIHdyaXRhYmxlIHRyYWNlcG9pbnQgYnVmZmVyICovCiYjNDM7CSYjMzQ7Kih1NjQqKShyMTAgLSA4KSA9IHI2OyYjMzQ7CiYjNDM7CSYjMzQ7cjcgPSAqKHU2NCopKHIxMCAtIDgpOyYjMzQ7CiYjNDM7CSYjMzQ7cjAgPSAwOyYjMzQ7CiYjNDM7CSYjMzQ7Kih1NjQqKShyNyAmIzQzOyAwKSA9IHIwOyYjMzQ7CS8qIHNob3VsZCBiZSBhYmxlIHRvIHdyaXRlIHRocm91Z2ggdGhlIGJ1ZmZlciAqLwomIzQzOwkmIzM0O3IwID0gMDsmIzM0OwomIzQzOwkmIzM0O2V4aXQ7JiMzNDsKJiM0MzsJOjo6IF9fY2xvYmJlcl9hbGwpOwomIzQzO30KJiM0MzsKJiM0MztfX25vaW5saW5lIGludCBzcGlsbF9maWxsX2R5bnB0cl9zdWJwcm9nKHN0cnVjdCBicGZfZHlucHRyICpkcHRyKQomIzQzO3sKJiM0MzsJbG9uZyAqcDsKJiM0MzsKJiM0MzsJYXNtIHZvbGF0aWxlICgmIzM0OyoodTY0ICopKHIxMCAtIDgpID0gJVtkcHRyXTsmIzM0OyAvKiBzcGlsbCB0aGUgQ09OU1RfUFRSX1RPX0RZTlBUUiBhcmd1bWVudCAqLwomIzQzOwkJICAgICAgJiMzNDslW2RwdHJdID0gKih1NjQgKikocjEwIC0gOCk7JiMzNDsKJiM0MzsJCSAgICAgIDogW2RwdHJdICYjMzQ7JiM0MztyJiMzNDsoZHB0cikgOjogJiMzNDttZW1vcnkmIzM0Oyk7CiYjNDM7CXAgPSBicGZfZHlucHRyX2RhdGEoZHB0ciwgMCwgc2l6ZW9mKCpwKSk7CiYjNDM7CWlmICghcCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGNoYXIgZHB0cl9tZW1fYnVmWzE2XTsKJiM0MzsKJiM0MzsvKiBjaGVjayB2YWxpZCBzcGlsbC9maWxsLCBjb25zdCBwdHIgdG8gZHlucHRyICovCiYjNDM7U0VDKCYjMzQ7c29ja2V0JiMzNDspCiYjNDM7X19zdWNjZXNzCiYjNDM7aW50IHNwaWxsX2ZpbGxfY29uc3RfcHRyX3RvX2R5bnB0cih2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IGJwZl9keW5wdHIgcHRyOwomIzQzOwomIzQzOwlicGZfZHlucHRyX2Zyb21fbWVtKGRwdHJfbWVtX2J1Ziwgc2l6ZW9mKGRwdHJfbWVtX2J1ZiksIDAsICZhbXA7cHRyKTsKJiM0MzsJcmV0dXJuIHNwaWxsX2ZpbGxfZHlucHRyX3N1YnByb2coJmFtcDtwdHIpOwomIzQzO30KJiM0MzsKIGNoYXIgX2xpY2Vuc2VbXSBTRUMoJiMzNDtsaWNlbnNlJiMzNDspID0gJiMzNDtHUEwmIzM0OzsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTA6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzg2NgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDMzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipQYXRjaCBFdmFsdWF0aW9uICZhbXA7IEZ1enppbmcgU3RyYXRlZ3kqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBwYXRjaCwgd2hpY2ggdG91Y2hlcyBga2VybmVsL2JwZi92ZXJpZmllci5jYCBhbmQgYWRkcyBzZWxmLXRlc3RzIGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYCwgaXMgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4gVGhlIGNvcmUgY2hhbmdlLCB0aGUgcmVwbGFjZW1lbnQgb2YgYGlzX3NwaWxsYWJsZV9yZWd0eXBlYCB3aXRoIGBpc19wb2ludGVyX3JlZ3R5cGVgLCBpcyBzaWduaWZpY2FudC4gRWZmZWN0aXZlbHksIHdlJiMzOTtyZSBicm9hZGVuaW5nIHRoZSB0eXBlcyB0aGF0IGNhbiBiZSBzcGlsbGVkIGFuZCBmaWxsZWQgdG8vZnJvbSB0aGUgc3RhY2sgaW4gdGhlIEJQRiB2ZXJpZmllci4gVGhlIG9sZCBtZXRob2QgaGFkIGEgaGFyZGNvZGVkIGxpc3Qgb2YgcG9pbnRlciB0eXBlcywgd2hpbGUgdGhlIG5ldyBjaGVjayBpcyBicm9hZGVyLCBleHBsaWNpdGx5IGFsbG93aW5nIHR5cGVzIHN1Y2ggYXMgYFBUUl9UT19JTlNOYCwgYFBUUl9UT19UUF9CVUZGRVJgLCBhbmQgYENPTlNUX1BUUl9UT19EWU5QVFJgLCB3aGljaCBpcyBjbGVhcmx5IGRlbW9uc3RyYXRlZCBpbiB0aGUgYWRkZWQgc2VsZnRlc3RzLgoKVGhpcyBoYXMgaW1tZWRpYXRlIGltcGxpY2F0aW9uczogd2UmIzM5O3JlIG1vZGlmeWluZyBmdW5kYW1lbnRhbCBCUEYgdmVyaWZpZXIgbG9naWMuIEFueXRpbWUgeW91IHRvdWNoIHRoZSB2ZXJpZmllciwgeW91IGFyZSB0b3VjaGluZyB0aGUgY29yZSBvZiB0aGUga2VybmVsIGFuZCBtYWtpbmcgaXQgcmVhY2hhYmxlLiBUaGUgZnVuY3Rpb25hbCBjaGFuZ2Ugb3BlbnMgdGhlIGRvb3IgdG8gcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy4gSXQmIzM5O3MgYWxtb3N0IGd1YXJhbnRlZWQgdG8gYmUgd29ydGggdGhlIHRpbWUgaW52ZXN0bWVudC4KCk5vdywgbGV0JiMzOTtzIGlkZW50aWZ5IHRoZSBmb2N1cyBzeW1ib2xzLiBUaGUgcGF0Y2ggc3BlY2lmaWNhbGx5IG1vZGlmaWVkIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zOgotICAgYGlzX3BvaW50ZXJfcmVndHlwZWAgKHRoaXMgaXMgdGhlIG5ldyBvbmUsIHRoZSByZXBsYWNlbWVudCkKLSAgIGBfX2lzX3BvaW50ZXJfdmFsdWVgICh0aGlzIG11c3QgaGF2ZSBiZWVuIGFkanVzdGVkIHRvIHdvcmsgd2l0aCB0aGUgY2hhbmdlcykKLSAgIGBjaGVja19zdGFja193cml0ZV9maXhlZF9vZmZgIChpdCYjMzk7cyBpbiB0aGUgc2FtZSBmaWxlLCBzbyBpdCBuZWVkcyBjaGVja2luZykKCkdpdmVuIHRoZSBwb3RlbnRpYWwgaW1wb3J0YW5jZSwgSSB3YW50IHRvIHNwZWNpZmljYWxseSBsb29rIGF0IGBjaGVja19zdGFja193cml0ZV9maXhlZF9vZmZgLiBJJiMzOTtsbCByZW1pbmQgbXlzZWxmIHRoYXQgaXQmIzM5O3MgYSBzdGF0aWMgZnVuY3Rpb24gd2l0aGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLCB3aGljaCBsaWtlbHkgbWFrZXMgaXQgYW4gaW50ZXJuYWxseSByZWxldmFudCBjb21wb25lbnQgb2YgdGhlIHZlcmlmaWVyLiBOb3csIGxldCYjMzk7cyBzZWUgaG93IGl0JiMzOTtzIGNhbGxlZCBhbmQgd2hlcmUgaXQmIzM5O3MgdXNlZDsgdGhhdCB3aWxsIGhlbHAgdG8gZGV0ZXJtaW5lIG91ciBwb2ludHMgb2YgZW50cnkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTA6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y2hlY2tfc3RhY2tfd3JpdGVfZml4ZWRfb2ZmJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdmVyaWZpZXIuYz0zNDEzPXN0YXRpYyB2b2lkIHNjcnViX3NwZWNpYWxfc2xvdChzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKnN0YXRlLCBpbnQgc3BpKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zNDI3LSAqL1xua2VybmVsL2JwZi92ZXJpZmllci5jOjM0Mjg6c3RhdGljIGludCBjaGVja19zdGFja193cml0ZV9maXhlZF9vZmYoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zNDI5LVx0XHRcdFx0ICAgICAgIC8qIHN0YWNrIGZyYW1lIHdlJiMzOTtyZSB3cml0aW5nIHRvICovXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTM5NjA9c3RhdGljIGludCBjaGVja19zdGFja19yZWFkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTQwMDUtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NDAwNjovKiBjaGVja19zdGFja193cml0ZSBkaXNwYXRjaGVzIHRvIGNoZWNrX3N0YWNrX3dyaXRlX2ZpeGVkX29mZiBvclxua2VybmVsL2JwZi92ZXJpZmllci5jLTQwMDctICogY2hlY2tfc3RhY2tfd3JpdGVfdmFyX29mZi5cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NDAxNT1zdGF0aWMgaW50IGNoZWNrX3N0YWNrX3dyaXRlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTQwMjMtXHRcdG9mZiAmIzQzOz0gcmVnLVx1MDAzZXZhcl9vZmYudmFsdWU7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NDAyNDpcdFx0ZXJyID0gY2hlY2tfc3RhY2tfd3JpdGVfZml4ZWRfb2ZmKGVudiwgc3RhdGUsIG9mZiwgc2l6ZSxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy00MDI1LVx0XHRcdFx0XHRcdCAgdmFsdWVfcmVnbm8sIGluc25faWR4KTtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NDk3Nz1zdGF0aWMgaW50IGNoZWNrX3B0cl9hbGlnbm1lbnQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTAwNi1cdFx0cG9pbnRlcl9kZXNjID0gXCYjMzQ7c3RhY2sgXCYjMzQ7O1xua2VybmVsL2JwZi92ZXJpZmllci5jOjUwMDc6XHRcdC8qIFRoZSBzdGFjayBzcGlsbCB0cmFja2luZyBsb2dpYyBpbiBjaGVja19zdGFja193cml0ZV9maXhlZF9vZmYoKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTUwMDgtXHRcdCAqIGFuZCBjaGVja19zdGFja19yZWFkX2ZpeGVkX29mZigpIHJlbGllcyBvbiBzdGFjayBhY2Nlc3NlcyBiZWluZ1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDEwOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxNTYKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aGUgZXhwZXJ0OgoKKipUcmFjaW5nIERvd24gdGhlIE1lbW9yeSBBY2Nlc3MgQ2hlY2sqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBtZW1vcnkgYWNjZXNzIGNoZWNraW5nIGxvZ2ljLiBUaGUgY2FsbCBzdGFjayByZXZlYWxzIGEgY2xlYXIgcGF0aC4gRmlyc3QsIEkgc2VlIHRoYXQgYGNoZWNrX3N0YWNrX3dyaXRlX2ZpeGVkX29mZmAgaXMgdHJpZ2dlcmVkIGJ5IGBjaGVja19zdGFja193cml0ZWAuIEFuZCwgYGNoZWNrX3N0YWNrX3dyaXRlYCBpdHNlbGYgaXMgaW52b2tlZCBieSBgY2hlY2tfbWVtX2FjY2Vzc2AuIFRoaXMgdGVsbHMgbWUgdGhhdCBgY2hlY2tfbWVtX2FjY2Vzc2AgaXMgdGhlIGhpZ2gtbGV2ZWwgZnVuY3Rpb24gcmVzcG9uc2libGUgZm9yIGluaXRpYXRpbmcgbWVtb3J5IGFjY2VzcyB2YWxpZGF0aW9uLCBhbmQgdGhhdCBzdGFjayB3cml0ZXMsIHNwZWNpZmljYWxseSB0aG9zZSB3aXRoIGEgZml4ZWQgb2Zmc2V0LCBhcmUgYSBjcml0aWNhbCBjb21wb25lbnQgb2YgdGhhdCBwcm9jZXNzLiBOb3csIEkgd2FudCB0byBpbnZlc3RpZ2F0ZSBob3cgdGhlIHN5c3RlbSBkZXRlcm1pbmVzIHdoZXRoZXIgYSB2YWx1ZSByZXByZXNlbnRzIGEgdmFsaWQgcG9pbnRlciwgc28gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBgX19pc19wb2ludGVyX3ZhbHVlYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxMDo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX2lzX3BvaW50ZXJfdmFsdWUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jPTMzMjA9c3RhdGljIGJvb2wgaXNfcG9pbnRlcl9yZWd0eXBlKGVudW0gYnBmX3JlZ190eXBlIHR5cGUpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTMzMjQtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MzMyNTpzdGF0aWMgYm9vbCBfX2lzX3BvaW50ZXJfdmFsdWUoYm9vbCBhbGxvd19wdHJfbGVha3MsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzMyNi1cdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9Mzc0ND1zdGF0aWMgaW50IGNoZWNrX3N0YWNrX3JlYWRfZml4ZWRfb2ZmKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTM4NTUtXHRcdFx0ICovXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6Mzg1NjpcdFx0fSBlbHNlIGlmIChfX2lzX3BvaW50ZXJfdmFsdWUoZW52LVx1MDAzZWFsbG93X3B0cl9sZWFrcywgcmVnKSkge1xua2VybmVsL2JwZi92ZXJpZmllci5jLTM4NTctXHRcdFx0LyogSWYgZHN0X3JlZ25vPT0tMSwgdGhlIGNhbGxlciBpcyBhc2tpbmcgdXMgd2hldGhlclxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz00ODE0PXN0YXRpYyBib29sIGlzX3BvaW50ZXJfdmFsdWUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHJlZ25vKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTQ4MTUte1xua2VybmVsL2JwZi92ZXJpZmllci5jOjQ4MTY6XHRyZXR1cm4gX19pc19wb2ludGVyX3ZhbHVlKGVudi1cdTAwM2VhbGxvd19wdHJfbGVha3MsIHJlZ19zdGF0ZShlbnYsIHJlZ25vKSk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNDgxNy19XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE1NDQ3PXN0YXRpYyBpbnQgaXNfYnJhbmNoX3Rha2VuKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcxLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNTQ1Mi1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNTQ1MzpcdGlmIChfX2lzX3BvaW50ZXJfdmFsdWUoZmFsc2UsIHJlZzEpIHx8IF9faXNfcG9pbnRlcl92YWx1ZShmYWxzZSwgcmVnMikpIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNTQ1NC1cdFx0dTY0IHZhbDtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTU5NDM9c3RhdGljIGludCBjaGVja19jb25kX2ptcF9vcChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjAzMS1cdFx0ICovXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTYwMzI6XHRcdGlmICghX19pc19wb2ludGVyX3ZhbHVlKGZhbHNlLCBkc3RfcmVnKSlcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjAzMy1cdFx0XHRlcnIgPSBtYXJrX2NoYWluX3ByZWNpc2lvbihlbnYsIGluc24tXHUwMDNlZHN0X3JlZyk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTYwMzQtXHRcdGlmIChCUEZfU1JDKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX1ggXHUwMDI2XHUwMDI2ICFlcnIgXHUwMDI2XHUwMDI2XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTYwMzU6XHRcdCAgICAhX19pc19wb2ludGVyX3ZhbHVlKGZhbHNlLCBzcmNfcmVnKSlcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjAzNi1cdFx0XHRlcnIgPSBtYXJrX2NoYWluX3ByZWNpc2lvbihlbnYsIGluc24tXHUwMDNlc3JjX3JlZyk7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE2MTI3LVx0aWYgKCFpc19qbXAzMiBcdTAwMjZcdTAwMjYgQlBGX1NSQyhpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9YIFx1MDAyNlx1MDAyNlxua2VybmVsL2JwZi92ZXJpZmllci5jOjE2MTI4Olx0ICAgIF9faXNfcG9pbnRlcl92YWx1ZShmYWxzZSwgc3JjX3JlZykgXHUwMDI2XHUwMDI2IF9faXNfcG9pbnRlcl92YWx1ZShmYWxzZSwgZHN0X3JlZykgXHUwMDI2XHUwMDI2XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTYxMjktXHQgICAgdHlwZV9tYXlfYmVfbnVsbChzcmNfcmVnLVx1MDAzZXR5cGUpICE9IHR5cGVfbWF5X2JlX251bGwoZHN0X3JlZy1cdTAwM2V0eXBlKSBcdTAwMjZcdTAwMjZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxMDo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MjcxCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZvY3VzaW5nIG9uIFBvaW50ZXIgVmFsdWUgQ2hlY2tzKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaG93IHRoZSBjb2RlIHZhbGlkYXRlcyBwb2ludGVyIHZhbHVlcy4gYGlzX3BvaW50ZXJfdmFsdWVgIHBvcHMgdXAgaW4gcXVpdGUgYSBmZXcgcGxhY2VzIOKAkyBsaWtlIGBjaGVja19hbHVfb3BgIGFuZCBgY2hlY2tfbWVtX2FjY2Vzc2AsIHdoaWNoIG1ha2VzIGl0IGEgY3J1Y2lhbCBmdW5jdGlvbiB0byB1bmRlcnN0YW5kLiBJdCYjMzk7cyB1c2VkIGluIGxvdHMgb2YgY29tbW9uIHNjZW5hcmlvcywgc28gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIGNyeXN0YWwgY2xlYXIgb24gaXRzIGJlaGF2aW91ci4KCkkgbmVlZCB0byBkaWcgaW50byB0aGUga2V5IHN5bWJvbHMgaGVyZS4gSSB0aGluayBgY2hlY2tfc3RhY2tfd3JpdGVfZml4ZWRfb2ZmYCwgYW5kIGBjaGVja19zdGFja19yZWFkX2ZpeGVkX29mZmAgd2lsbCBiZSBnb29kIGZvY3VzIHBvaW50cy4gVGhleSYjMzk7cmUgcmVsYXRlZCwgc28gSSYjMzk7bGwgY2hlY2sgdGhvc2Ugb3V0IHRvZ2V0aGVyIHdpdGggYGNoZWNrX3N0YWNrX3dyaXRlYCwgdG9vLiBQbHVzLCBJIHNob3VsZCBwcm9iYWJseSBhbHNvIGxvb2sgYXQgYGlzX3BvaW50ZXJfcmVndHlwZWAgYW5kIGBfX2lzX3BvaW50ZXJfdmFsdWVgIHRvIGdldCBhIG1vcmUgY29tcGxldGUgcGljdHVyZS4gSSB0aGluayB0aGlzIHdpbGwgc2hvdyB0aGUgY29yZSBsb2dpYyBhbmQgaW50ZXJhY3Rpb24gd2l0aCB0aGUgc3RhY2suIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBncmFzcCBvbiBob3cgcG9pbnRlciB2YWxpZGl0eSBpcyBkZXRlcm1pbmVkIHdpdGhpbiB0aGlzIHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxMTowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjaGVja19zdGFja193cml0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdmVyaWZpZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MzQxMz1zdGF0aWMgdm9pZCBzY3J1Yl9zcGVjaWFsX3Nsb3Qoc3RydWN0IGJwZl9mdW5jX3N0YXRlICpzdGF0ZSwgaW50IHNwaSlcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzQyNy0gKi9cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzozNDI4OnN0YXRpYyBpbnQgY2hlY2tfc3RhY2tfd3JpdGVfZml4ZWRfb2ZmKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzQyOS1cdFx0XHRcdCAgICAgICAvKiBzdGFjayBmcmFtZSB3ZSYjMzk7cmUgd3JpdGluZyB0byAqL1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zNTU4LSAqL1xua2VybmVsL2JwZi92ZXJpZmllci5jOjM1NTk6c3RhdGljIGludCBjaGVja19zdGFja193cml0ZV92YXJfb2ZmKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzU2MC1cdFx0XHRcdCAgICAgLyogZnVuYyB3aGVyZSByZWdpc3RlciBwb2ludHMgdG8gKi9cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9Mzk2MD1zdGF0aWMgaW50IGNoZWNrX3N0YWNrX3JlYWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNDAwNS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo0MDA2Oi8qIGNoZWNrX3N0YWNrX3dyaXRlIGRpc3BhdGNoZXMgdG8gY2hlY2tfc3RhY2tfd3JpdGVfZml4ZWRfb2ZmIG9yXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NDAwNzogKiBjaGVja19zdGFja193cml0ZV92YXJfb2ZmLlxua2VybmVsL2JwZi92ZXJpZmllci5jLTQwMDgtICpcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNDAxNC0gKi9cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo0MDE1OnN0YXRpYyBpbnQgY2hlY2tfc3RhY2tfd3JpdGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy00MDE2LVx0XHRcdCAgICAgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZywgaW50IG9mZiwgaW50IHNpemUsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTQwMjMtXHRcdG9mZiAmIzQzOz0gcmVnLVx1MDAzZXZhcl9vZmYudmFsdWU7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NDAyNDpcdFx0ZXJyID0gY2hlY2tfc3RhY2tfd3JpdGVfZml4ZWRfb2ZmKGVudiwgc3RhdGUsIG9mZiwgc2l6ZSxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy00MDI1LVx0XHRcdFx0XHRcdCAgdmFsdWVfcmVnbm8sIGluc25faWR4KTtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNDAyOS1cdFx0ICovXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NDAzMDpcdFx0ZXJyID0gY2hlY2tfc3RhY2tfd3JpdGVfdmFyX29mZihlbnYsIHN0YXRlLFxua2VybmVsL2JwZi92ZXJpZmllci5jLTQwMzEtXHRcdFx0XHRcdFx0cmVnLCBvZmYsIHNpemUsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTQ5Nzc9c3RhdGljIGludCBjaGVja19wdHJfYWxpZ25tZW50KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTUwMDYtXHRcdHBvaW50ZXJfZGVzYyA9IFwmIzM0O3N0YWNrIFwmIzM0Oztcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo1MDA3Olx0XHQvKiBUaGUgc3RhY2sgc3BpbGwgdHJhY2tpbmcgbG9naWMgaW4gY2hlY2tfc3RhY2tfd3JpdGVfZml4ZWRfb2ZmKClcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy01MDA4LVx0XHQgKiBhbmQgY2hlY2tfc3RhY2tfcmVhZF9maXhlZF9vZmYoKSByZWxpZXMgb24gc3RhY2sgYWNjZXNzZXMgYmVpbmdcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NjA3OT1zdGF0aWMgaW50IGNoZWNrX21lbV9hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGluc25faWR4LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCBhcmdub190IGFyZ25vLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02MjUwLVx0XHRlbHNlXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjI1MTpcdFx0XHRlcnIgPSBjaGVja19zdGFja193cml0ZShlbnYsIHJlZywgb2ZmLCBzaXplLFxua2VybmVsL2JwZi92ZXJpZmllci5jLTYyNTItXHRcdFx0XHRcdFx0dmFsdWVfcmVnbm8sIGluc25faWR4KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxMTowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NDk2CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBDb2RlIE1vZGlmaWNhdGlvbioqCgpPa2F5LCBzbyB0aGUgcGF0Y2ggaXMgdHdlYWtpbmcgYGNoZWNrX3N0YWNrX3dyaXRlX2ZpeGVkX29mZmAgYW5kIGBfX2lzX3BvaW50ZXJfdmFsdWVgLiBSaWdodCwgc2VlbXMgbG9naWNhbC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVwZGF0ZSBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjb2RlJiMzOTtzIGRhdGEgc3RydWN0dXJlcyBhY2NvcmRpbmdseS4gSSYjMzk7bGwgbmVlZCB0byBpbmNvcnBvcmF0ZSB0aG9zZSBmdW5jdGlvbnMsIGFsb25nIHdpdGggYGlzX3BvaW50ZXJfcmVndHlwZWAgYW5kIGFsc28gYGNoZWNrX3N0YWNrX3JlYWRfZml4ZWRfb2ZmYCAoc2luY2UgaXQgcmVhZHMgc3BpbGxlZCBwb2ludGVycywgd2hpY2ggaXMga2V5KSwgaW50byBteSBgRm9jdXNTeW1ib2xzYCBrbm93bGVkZ2UgYmFzZS4gVGhhdCB3aWxsIGFsbG93IG1lIHRvIGFjY3VyYXRlbHkgdHJhY2sgdGhpcyBjb2RlIHBhdGguIEkgd2lsbCBuZWVkIHRvIGJlIHZlcnkgdGhvcm91Z2guCgpOb3csIGxldCYjMzk7cyBjb25zaWRlciB0aGUgYnVpbGQgZW52aXJvbm1lbnQuIGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIHN0YW5kYXJkLCBubyBzdXJwcmlzZXMgdGhlcmUuIEhvd2V2ZXIsIEkgd2FudCB0byBjb25maXJtIHdoZXRoZXIgdGhlcmUgYXJlICphbnkqIG5ldywgc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgYXNzb2NpYXRlZCB3aXRoIHRoZXNlIGNoYW5nZXMuIFRoZSBjb2RlIGlzIGxvY2F0ZWQgd2l0aGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLCBzbyBJIHNob3VsZCBpbnNwZWN0IHRoYXQgYXJlYSBjbG9zZWx5IGZvciBjb25kaXRpb25hbCBjb21waWxhdGlvbiBkaXJlY3RpdmVzIHRoYXQgcmVsYXRlIHRvIHRoaXMgcGF0Y2guIEkgbmVlZCB0byBrbm93IHdoaWNoIGNvbmZpZ3VyYXRpb25zIHdvdWxkIGJlIG5lY2Vzc2FyeSB0byBpbmNsdWRlIHRoaXMsIG9yIGFsdGVyIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxMTowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfQlBGJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdmVyaWZpZXIuYz00Mzk2PUJURl9JRChzdHJ1Y3QsIGNncm91cClcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy00Mzk3LSNlbmRpZlxua2VybmVsL2JwZi92ZXJpZmllci5jOjQzOTg6I2lmZGVmIENPTkZJR19CUEZfSklUXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNDM5OS1CVEZfSUQoc3RydWN0LCBicGZfY3B1bWFzaylcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTExMjg9QlRGX0lEX1VOVVNFRFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMTI5LSNlbmRpZlxua2VybmVsL2JwZi92ZXJpZmllci5jOjExMTMwOiNpZmRlZiBDT05GSUdfQlBGX0VWRU5UU1xua2VybmVsL2JwZi92ZXJpZmllci5jLTExMTMxLUJURl9JRChmdW5jLCBicGZfc2Vzc2lvbl9jb29raWUpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTExMTQwPUJURl9JRChmdW5jLCBicGZfaXRlcl9udW1fZGVzdHJveSlcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTE0MTojaWZkZWYgQ09ORklHX0JQRl9MU01cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTE0Mi1CVEZfSUQoZnVuYywgYnBmX3NldF9kZW50cnlfeGF0dHIpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTExMTU5PUJURl9JRChmdW5jLCBicGZfYXJlbmFfcmVzZXJ2ZV9wYWdlcylcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTE2MDojaWZkZWYgQ09ORklHX0JQRl9FVkVOVFNcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTE2MS1CVEZfSUQoZnVuYywgYnBmX3Nlc3Npb25faXNfcmV0dXJuKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxMTowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MjcxCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogODEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBnb2luZyBvbiBoZXJlLgoKKipBbmFseXppbmcgUG90ZW50aWFsIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzIGluIEJQRiBWZXJpZmllciBUZXN0cyoqCgpSaWdodCwgc28gbm8gaW1tZWRpYXRlIHJlZCBmbGFncywgbm8gdW51c3VhbCBjb25maWd1cmF0aW9ucyBzcHJpbmcgdG8gbWluZC4gYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgYSBnaXZlbiwgd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgQlBGIGhlcmUuIEJ1dCwgYmVmb3JlIEkgYXNzdW1lIGV2ZXJ5dGhpbmcgaXMgaHVua3ktZG9yeSwgSSBzaG91bGQgdmVyaWZ5LiBJJiMzOTttIGdvaW5nIHRvIHRha2UgYSBsb29rIGF0IGEgY291cGxlIG9mIHRoZSB0ZXN0IHByb2dyYW1zIHRvIGJlIHN1cmUuIFNwZWNpZmljYWxseSwgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9nb3RveC5jYCBhbmQgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9zcGlsbF9maWxsLmNgLiBUaGVzZSB0ZXN0cyBhcmUga25vd24gdG8gaGl0IHNvbWUgaW50ZXJlc3RpbmcgYXJlYXMgb2YgdGhlIHZlcmlmaWVyLCBzbyB0aGV5JiMzOTtyZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgc3VidGxlIGRlcGVuZGVuY2llcyB0aGF0IGFyZW4mIzM5O3QgaW1tZWRpYXRlbHkgb2J2aW91cyBmcm9tIHRoZSBjb25maWcgbGlzdC4gSSBuZWVkIHRvIHNjYW4gdGhvc2Ugc291cmNlIGZpbGVzLCBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzIG9yIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIHRoYXQgd291bGQgcmVxdWlyZSBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiBmbGFncyB0byBiZSBlbmFibGVkIGZvciB0aGVtIHRvIGJ1aWxkIGFuZCBydW4gY29ycmVjdGx5LiBOb3RoaW5nIHdvcnNlIHRoYW4gYSBzaWxlbnQgZmFpbHVyZSBkdWUgdG8gYSBtaXNzaW5nIGNvbmZpZyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTE6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7dG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2dvdG94LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxMTowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NjQ5CgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiAmIzM0O05vIGNvbmZpZ3MsJiMzNDsgc3VtbWFyaXplZCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhc3N1bWluZyBhIGxldmVsIG9mIGV4cGVydGlzZToKCioqVGhlIEFic2VuY2Ugb2YgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCBzbyB0aGUgY29yZSBvZiB0aGlzIHNpdHVhdGlvbiBpcyBjbGVhciDigJMgb3IgcmF0aGVyLCB0aGUgbGFjayBvZiBjbGFyaXR5ICppcyogdGhlIGNvcmUuICYjMzQ7Tm8gY29uZmlncy4mIzM0OyBUaGF0JiMzOTtzIHRoZSBzdGFydGluZyBwb2ludC4gTm8gcHJlLXNldCBwYXJhbWV0ZXJzLCBubyBkZWZpbmVkIGluaXRpYWwgc3RhdGVzLCBubyBlc3RhYmxpc2hlZCBjb25maWd1cmF0aW9ucyBvZiBhbnkga2luZC4gVGhpcyBtZWFucyBJJiMzOTttIGRlYWxpbmcgd2l0aCBhIHN5c3RlbSB0aGF0JiMzOTtzIGVpdGhlciBmdW5kYW1lbnRhbGx5IGJsYW5rLCBjb21wbGV0ZWx5IHVuaW5pdGlhbGl6ZWQsIG9yIHBlcmhhcHMgZGVzaWduZWQgdG8gYmUgZHluYW1pY2FsbHkgY29uZmlndXJlZCBvbiB0aGUgZmx5LiBUaGlzIGxhY2sgb2YgcHJlLWV4aXN0aW5nIHNldHRpbmdzIGlzIHNpZ25pZmljYW50LiBJdCBpbXBsaWVzIGEgZGVncmVlIG9mIGZsZXhpYmlsaXR5LCBwZXJoYXBzLCBidXQgYWxzbyBhIHBvdGVudGlhbCBmb3Igc2lnbmlmaWNhbnQgYW1iaWd1aXR5LiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IEkmIzM5O20gd29ya2luZyAqd2l0aCogcmF0aGVyIHRoYW4gKmFnYWluc3QuKgoKTXkgZXhwZXJ0aXNlIHRlbGxzIG1lIHRoYXQgdGhpcyBjb3VsZCBtZWFuIGEgbXVsdGl0dWRlIG9mIHRoaW5ncy4gSXMgdGhpcyBhIGRlbGliZXJhdGVseSBtaW5pbWFsaXN0IGRlc2lnbiwgYSBzYW5kYm94IGVudmlyb25tZW50LCBvciBhIGZsYXdlZCBkZXBsb3ltZW50PyBBcmUgd2UgdGFsa2luZyBhYm91dCBhIGNvbXBsZXRlIGxhY2sgb2YgYSBjb25maWd1cmF0aW9uIGZpbGUsIG9yIGlzIHRoZSBjb25maWd1cmF0aW9uIGhhbmRsZWQgaW50ZXJuYWxseSwgcGVyaGFwcyB0aHJvdWdoIGFuIEFQSSBvciBhIGR5bmFtaWMgcHJvY2Vzcz8gVGhlIGltcGxpY2F0aW9ucyBoZXJlIGFyZSB2YXN0IGFuZCBjYW4gY2hhbmdlIHRoZSBkaXJlY3Rpb24gb2YgYW5hbHlzaXMgYW5kIHByb2JsZW0tc29sdmluZy4gVGhpcyBjb3VsZCBtYWtlIGl0IGEgdmVyeSBpbnRlcmVzdGluZyBwcm9ibGVtIHRvIHRhY2tsZS4KClRoaXMgaXMgYWxsIGFib3V0IGNvbnRleHQ7ICYjMzQ7Tm8gY29uZmlncyYjMzQ7IGRvZXNuJiMzOTt0IG1lYW4gYW55dGhpbmcgaW4gaXNvbGF0aW9uLiBJIG5lZWQgbW9yZSBpbmZvcm1hdGlvbiB0byBiZWdpbiB0byBpbnRlcnByZXQgd2hhdCB0aGlzIG1lYW5zIGluIHByYWN0aWNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxMTowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR18mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDt0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfc3BpbGxfZmlsbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTE6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODk5MQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE5NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBCUEYgVmVyaWZpZXIgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBzcGVjaWZpY2FsbHkgZXhwYW5kaW5nIHRoZSBCUEYgdmVyaWZpZXImIzM5O3MgY2FwYWJpbGl0eSB0byBoYW5kbGUgbW9yZSBwb2ludGVyIHR5cGVzIGR1cmluZyBzcGlsbGluZyBhbmQgZmlsbGluZyBvcGVyYXRpb25zLiBHb29kLiBJdCYjMzk7cyBiZWVuIGZsYWdnZWQgYXMgV29ydGhGdXp6aW5nLCB3aGljaCBpcyBhIGdvb2QgaW5kaWNhdG9yIHRoYXQgd2Ugc2hvdWxkIGdpdmUgaXQgYSB0aG9yb3VnaCBnb2luZy1vdmVyLgoKVGhlIGtleSBmdW5jdGlvbnMgdG8gY29uY2VudHJhdGUgb24gZHVyaW5nIGZ1enppbmcgYXJlIGBjaGVja19zdGFja193cml0ZV9maXhlZF9vZmZgLCBgY2hlY2tfc3RhY2tfcmVhZF9maXhlZF9vZmZgLCBgX19pc19wb2ludGVyX3ZhbHVlYCwgYW5kIGBpc19wb2ludGVyX3JlZ3R5cGVgLiBUaGVzZSBhcmUgY2xlYXJseSB0aGUgYXJlYXMgd2hlcmUgdGhlIG5ldyBwb2ludGVyIGhhbmRsaW5nIGxvZ2ljIGlzIGltcGxlbWVudGVkIG9yIG1vc3QgaW1wYWN0ZnVsLiBHaXZlbiBJJiMzOTttIGFuIGV4cGVydCBpbiB0aGlzIGZpZWxkLCBJJiMzOTtsbCBuZWVkIHRvIGZvY3VzIG15IGF0dGVudGlvbiBvbiBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gYW5kIHdoZXRoZXIgdGhlcmUgYXJlIGFueSB1bmV4cGVjdGVkIHNpZGUgZWZmZWN0cy4KClJlZ2FyZGluZyBjb25maWd1cmF0aW9uLCBJIHdvbiYjMzk7dCBsaXN0IGBCUEZfU1lTQ0FMTGAgYmVjYXVzZSBpdCYjMzk7cyBzdGFuZGFyZCBhbmQgbm90IHNwZWNpZmljIHRvIHRoaXMgY2hhbmdlLiBJJiMzOTtsbCBuZWVkIHRvIHJlLWV2YWx1YXRlIHRoZSB0d28gZnVuY3Rpb25zIHByZXZpb3VzbHkgbWVudGlvbmVkLCBgaXNfcG9pbnRlcl9yZWd0eXBlYCBhbmQgYF9faXNfcG9pbnRlcl92YWx1ZWAsIHRvIHNlZSB3aGF0IGtpbmQgb2YgY29uZmlndXJhdGlvbiBjaGFuZ2VzIHdpbGwgYmUgbmVjZXNzYXJ5IHRvIGVuc3VyZSB0aGUgdGVzdHMgaGF2ZSBhZGVxdWF0ZSBjb3ZlcmFnZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTE6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXNfcG9pbnRlcl9yZWd0eXBlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdmVyaWZpZXIuYz0zMzE1PXN0YXRpYyB1NjQgcmVnX2NvbnN0X3ZhbHVlKHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsIGJvb2wgc3VicmVnMzIpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTMzMTktXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MzMyMDpzdGF0aWMgYm9vbCBpc19wb2ludGVyX3JlZ3R5cGUoZW51bSBicGZfcmVnX3R5cGUgdHlwZSlcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zMzIxLXtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MzMyNT1zdGF0aWMgYm9vbCBfX2lzX3BvaW50ZXJfdmFsdWUoYm9vbCBhbGxvd19wdHJfbGVha3MsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTMzMzAtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MzMzMTpcdHJldHVybiBpc19wb2ludGVyX3JlZ3R5cGUocmVnLVx1MDAzZXR5cGUpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTMzMzItfVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0zNDI4PXN0YXRpYyBpbnQgY2hlY2tfc3RhY2tfd3JpdGVfZml4ZWRfb2ZmKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTM0NTUtXHRpZiAoIWVudi1cdTAwM2VieXBhc3Nfc3BlY192NCkge1xua2VybmVsL2JwZi92ZXJpZmllci5jOjM0NTY6XHRcdGJvb2wgc2FuaXRpemUgPSByZWcgXHUwMDI2XHUwMDI2IGlzX3BvaW50ZXJfcmVndHlwZShyZWctXHUwMDNldHlwZSk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzQ1Ny1cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzQ5Ni1cdFx0c2F2ZV9yZWdpc3Rlcl9zdGF0ZShlbnYsIHN0YXRlLCBzcGksIHRtcF9yZWcsIHNpemUpO1xua2VybmVsL2JwZi92ZXJpZmllci5jOjM0OTc6XHR9IGVsc2UgaWYgKHJlZyBcdTAwMjZcdTAwMjYgaXNfcG9pbnRlcl9yZWd0eXBlKHJlZy1cdTAwM2V0eXBlKSkge1xua2VybmVsL2JwZi92ZXJpZmllci5jLTM0OTgtXHRcdC8qIHJlZ2lzdGVyIGNvbnRhaW5pbmcgcG9pbnRlciBpcyBiZWluZyBzcGlsbGVkIGludG8gc3RhY2sgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTE6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTg5NwoJCQkJCQkJb3V0cHV0OiAxMjgKCQkJCQkJCXRob3VnaHRzOiA3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGNoYW5nZXM6CgoqKkFuYWx5emluZyB0aGUgUmVnaXN0ZXIgVHlwZSBNb2RpZmljYXRpb24qKgoKQWxyaWdodCwgc28gdGhlIGNvcmUgb2YgdGhpcyBjaGFuZ2UgaXMgcHJldHR5IGNsZWFuIGFuZCBkaXJlY3QuIFdlJiMzOTtyZSBnZXR0aW5nIHJpZCBvZiB0aGUgYGlzX3NwaWxsYWJsZV9yZWd0eXBlYCBjaGVjaywgd2hpY2ggc2VlbXMgdG8gaGF2ZSBiZWVuIGEgYml0IG92ZXJseSByZXN0cmljdGl2ZS4gVGhlIHJlcGxhY2VtZW50LCBgaXNfcG9pbnRlcl9yZWd0eXBlYCwgYm9pbHMgZG93biB0byBhIHNpbXBsZXIgY2hlY2s6IGVuc3VyaW5nIHRoZSByZWdpc3RlciB0eXBlIGlzbiYjMzk7dCBhIGBTQ0FMQVJfVkFMVUVgIG9yIGBOT1RfSU5JVGAuIFRoYXQmIzM5O3MgYSBnb29kIHNpbXBsaWZpY2F0aW9uLCBmdW5jdGlvbmFsbHkgZXF1aXZhbGVudCBidXQgbW9yZSBlbGVnYW50LgoKVGhlIHJlYWwgaW1wbGljYXRpb24gaGVyZSBpcyB0aGUgcmVsYXhhdGlvbiBvZiBjb25zdHJhaW50cyBvbiBzcGlsbGluZyBwb2ludGVyIHR5cGVzLiBCZWZvcmUsIHRoZXJlIHdhcyBwcm9iYWJseSBhIGhhcmRjb2RlZCBsaXN0IG9yIGNvbXBsZXggbG9naWMgZGV0ZXJtaW5pbmcgd2hhdCBwb2ludGVycyB3ZXJlIHNwaWxsYWJsZS4gTm93LCBhbnkgcG9pbnRlciB0eXBlIHRoYXQgKmlzbiYjMzk7dCogYSBwcmltaXRpdmUgc2NhbGFyIG9yIHVuaW5pdGlhbGl6ZWQgY2FuIGJlIHNwaWxsZWQgdG8gdGhlIHN0YWNrLiBUaGF0JiMzOTtzIGEgZGVmaW5pdGUgaW1wcm92ZW1lbnQgaW4gZmxleGliaWxpdHkgYW5kIHNob3VsZCBlbGltaW5hdGUgc29tZSBwb3RlbnRpYWwgaGVhZGFjaGVzIGFuZCBpbmVmZmljaWVuY2llcy4gVGhpcyBjaGFuZ2UgaGFzIHRoZSBwb3RlbnRpYWwgdG8gZWxpbWluYXRlIHNvbWUgb2YgdGhlIHByZXZpb3VzIHJlZ2lzdGVyIGFsbG9jYXRpb24gaXNzdWVzLgoKSeKAmW0gb24gYm9hcmQgd2l0aCB0aGlzIGFwcHJvYWNoLiBJdCBtYWtlcyBzZW5zZSwgYW5kIEkgY2FuIGFwcHJlY2lhdGUgdGhlIGRpcmVjdG5lc3Mgb2YgdGhlIHVwZGF0ZWQgbG9naWMuIEl0JiMzOTtzIHRpbWUgdG8gdGVzdCB0aGlzIGFuZCB2ZXJpZnkgdGhlIHJlc3VsdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDExOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjaGVja19zdGFja193cml0ZV9maXhlZF9vZmYmIzM0OywKICAgICYjMzQ7Y2hlY2tfc3RhY2tfcmVhZF9maXhlZF9vZmYmIzM0OywKICAgICYjMzQ7X19pc19wb2ludGVyX3ZhbHVlJiMzNDssCiAgICAmIzM0O2lzX3BvaW50ZXJfcmVndHlwZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyIHRvIGFsbG93IHNwaWxsaW5nIGFuZCBmaWxsaW5nIG9mIGFsbCBwb2ludGVyIHR5cGVzIHRvL2Zyb20gdGhlIHN0YWNrLCByZW1vdmluZyBhIGhhcmRjb2RlZCBsaXN0IG9mIGFsbG93ZWQgcG9pbnRlciB0eXBlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIEJQRiB2ZXJpZmllciBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjaGVja19zdGFja193cml0ZV9maXhlZF9vZmYmIzM0OywKICAgICYjMzQ7Y2hlY2tfc3RhY2tfcmVhZF9maXhlZF9vZmYmIzM0OywKICAgICYjMzQ7X19pc19wb2ludGVyX3ZhbHVlJiMzNDssCiAgICAmIzM0O2lzX3BvaW50ZXJfcmVndHlwZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyIHRvIGFsbG93IHNwaWxsaW5nIGFuZCBmaWxsaW5nIG9mIGFsbCBwb2ludGVyIHR5cGVzIHRvL2Zyb20gdGhlIHN0YWNrLCByZW1vdmluZyBhIGhhcmRjb2RlZCBsaXN0IG9mIGFsbG93ZWQgcG9pbnRlciB0eXBlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIEJQRiB2ZXJpZmllciBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDEwOjU5OjQ4LjQ5ODAzMjMxNFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM1NzYxNTEwNzUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImNoZWNrX3N0YWNrX3dyaXRlX2ZpeGVkX29mZlwiLFxuICAgIFwiY2hlY2tfc3RhY2tfcmVhZF9maXhlZF9vZmZcIixcbiAgICBcIl9faXNfcG9pbnRlcl92YWx1ZVwiLFxuICAgIFwiaXNfcG9pbnRlcl9yZWd0eXBlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciB0byBhbGxvdyBzcGlsbGluZyBhbmQgZmlsbGluZyBvZiBhbGwgcG9pbnRlciB0eXBlcyB0by9mcm9tIHRoZSBzdGFjaywgcmVtb3ZpbmcgYSBoYXJkY29kZWQgbGlzdCBvZiBhbGxvd2VkIHBvaW50ZXIgdHlwZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBCUEYgdmVyaWZpZXIgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDEwOjU5OjQ4LjQ5ODA0MDAzNFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjM0MzM1MDk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZGYzY2Q5M2RlY2ExZDg1YzRlNWJiMGQzNWFjYWU4NTNkMjIzOTdhNlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIEp1bCA4IDEwOjU5OjQ1IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xcbmluZGV4IDMxOTNiNDczNzYyYmE0Li41MWY3OTY1ZDQyZTMyNCAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcXG4rKysgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcXG5AQCAtMzMwNCwzNCArMzMwNCw2IEBAIHN0YXRpYyBpbnQgbWFya19jaGFpbl9wcmVjaXNpb25fYmF0Y2goc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4gXFx0cmV0dXJuIGJwZl9tYXJrX2NoYWluX3ByZWNpc2lvbihlbnYsIHN0YXJ0aW5nX3N0YXRlLCAtMSwgTlVMTCk7XFxuIH1cXG4gXFxuLXN0YXRpYyBib29sIGlzX3NwaWxsYWJsZV9yZWd0eXBlKGVudW0gYnBmX3JlZ190eXBlIHR5cGUpXFxuLXtcXG4tXFx0c3dpdGNoIChiYXNlX3R5cGUodHlwZSkpIHtcXG4tXFx0Y2FzZSBQVFJfVE9fTUFQX1ZBTFVFOlxcbi1cXHRjYXNlIFBUUl9UT19TVEFDSzpcXG4tXFx0Y2FzZSBQVFJfVE9fQ1RYOlxcbi1cXHRjYXNlIFBUUl9UT19QQUNLRVQ6XFxuLVxcdGNhc2UgUFRSX1RPX1BBQ0tFVF9NRVRBOlxcbi1cXHRjYXNlIFBUUl9UT19QQUNLRVRfRU5EOlxcbi1cXHRjYXNlIFBUUl9UT19GTE9XX0tFWVM6XFxuLVxcdGNhc2UgQ09OU1RfUFRSX1RPX01BUDpcXG4tXFx0Y2FzZSBQVFJfVE9fU09DS0VUOlxcbi1cXHRjYXNlIFBUUl9UT19TT0NLX0NPTU1PTjpcXG4tXFx0Y2FzZSBQVFJfVE9fVENQX1NPQ0s6XFxuLVxcdGNhc2UgUFRSX1RPX1hEUF9TT0NLOlxcbi1cXHRjYXNlIFBUUl9UT19CVEZfSUQ6XFxuLVxcdGNhc2UgUFRSX1RPX0JVRjpcXG4tXFx0Y2FzZSBQVFJfVE9fTUVNOlxcbi1cXHRjYXNlIFBUUl9UT19GVU5DOlxcbi1cXHRjYXNlIFBUUl9UT19NQVBfS0VZOlxcbi1cXHRjYXNlIFBUUl9UT19BUkVOQTpcXG4tXFx0XFx0cmV0dXJuIHRydWU7XFxuLVxcdGRlZmF1bHQ6XFxuLVxcdFxcdHJldHVybiBmYWxzZTtcXG4tXFx0fVxcbi19XFxuLVxcbi1cXG4gLyogY2hlY2sgaWYgcmVnaXN0ZXIgaXMgYSBjb25zdGFudCBzY2FsYXIgdmFsdWUgKi9cXG4gc3RhdGljIGJvb2wgaXNfcmVnX2NvbnN0KHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsIGJvb2wgc3VicmVnMzIpXFxuIHtcXG5AQCAtMzM0NSwxMyArMzMxNywxOCBAQCBzdGF0aWMgdTY0IHJlZ19jb25zdF92YWx1ZShzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCBib29sIHN1YnJlZzMyKVxcbiBcXHRyZXR1cm4gc3VicmVnMzIgPyB0bnVtX3N1YnJlZyhyZWctXFx1MDAzZXZhcl9vZmYpLnZhbHVlIDogcmVnLVxcdTAwM2V2YXJfb2ZmLnZhbHVlO1xcbiB9XFxuIFxcbitzdGF0aWMgYm9vbCBpc19wb2ludGVyX3JlZ3R5cGUoZW51bSBicGZfcmVnX3R5cGUgdHlwZSlcXG4re1xcbitcXHRyZXR1cm4gdHlwZSAhPSBTQ0FMQVJfVkFMVUUgXFx1MDAyNlxcdTAwMjYgdHlwZSAhPSBOT1RfSU5JVDtcXG4rfVxcbitcXG4gc3RhdGljIGJvb2wgX19pc19wb2ludGVyX3ZhbHVlKGJvb2wgYWxsb3dfcHRyX2xlYWtzLFxcbiBcXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcXG4ge1xcbiBcXHRpZiAoYWxsb3dfcHRyX2xlYWtzKVxcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcbi1cXHRyZXR1cm4gcmVnLVxcdTAwM2V0eXBlICE9IFNDQUxBUl9WQUxVRTtcXG4rXFx0cmV0dXJuIGlzX3BvaW50ZXJfcmVndHlwZShyZWctXFx1MDAzZXR5cGUpO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBjbGVhcl9zY2FsYXJfaWQoc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcXG5AQCAtMzQ3Niw3ICszNDUzLDcgQEAgc3RhdGljIGludCBjaGVja19zdGFja193cml0ZV9maXhlZF9vZmYoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4gXFx0aWYgKHZhbHVlX3JlZ25vIFxcdTAwM2U9IDApXFxuIFxcdFxcdHJlZyA9IFxcdTAwMjZjdXItXFx1MDAzZXJlZ3NbdmFsdWVfcmVnbm9dO1xcbiBcXHRpZiAoIWVudi1cXHUwMDNlYnlwYXNzX3NwZWNfdjQpIHtcXG4tXFx0XFx0Ym9vbCBzYW5pdGl6ZSA9IHJlZyBcXHUwMDI2XFx1MDAyNiBpc19zcGlsbGFibGVfcmVndHlwZShyZWctXFx1MDAzZXR5cGUpO1xcbitcXHRcXHRib29sIHNhbml0aXplID0gcmVnIFxcdTAwMjZcXHUwMDI2IGlzX3BvaW50ZXJfcmVndHlwZShyZWctXFx1MDAzZXR5cGUpO1xcbiBcXG4gXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHNpemU7IGkrKykge1xcbiBcXHRcXHRcXHR1OCB0eXBlID0gc3RhdGUtXFx1MDAzZXN0YWNrW3NwaV0uc2xvdF90eXBlWyhzbG90IC0gaSkgJVxcbkBAIC0zNTE3LDcgKzM0OTQsNyBAQCBzdGF0aWMgaW50IGNoZWNrX3N0YWNrX3dyaXRlX2ZpeGVkX29mZihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbiBcXHRcXHRfX21hcmtfcmVnX2tub3duKHRtcF9yZWcsIGluc24tXFx1MDAzZWltbSk7XFxuIFxcdFxcdHRtcF9yZWctXFx1MDAzZXR5cGUgPSBTQ0FMQVJfVkFMVUU7XFxuIFxcdFxcdHNhdmVfcmVnaXN0ZXJfc3RhdGUoZW52LCBzdGF0ZSwgc3BpLCB0bXBfcmVnLCBzaXplKTtcXG4tXFx0fSBlbHNlIGlmIChyZWcgXFx1MDAyNlxcdTAwMjYgaXNfc3BpbGxhYmxlX3JlZ3R5cGUocmVnLVxcdTAwM2V0eXBlKSkge1xcbitcXHR9IGVsc2UgaWYgKHJlZyBcXHUwMDI2XFx1MDAyNiBpc19wb2ludGVyX3JlZ3R5cGUocmVnLVxcdTAwM2V0eXBlKSkge1xcbiBcXHRcXHQvKiByZWdpc3RlciBjb250YWluaW5nIHBvaW50ZXIgaXMgYmVpbmcgc3BpbGxlZCBpbnRvIHN0YWNrICovXFxuIFxcdFxcdGlmIChzaXplICE9IEJQRl9SRUdfU0laRSkge1xcbiBcXHRcXHRcXHR2ZXJib3NlX2xpbmZvKGVudiwgaW5zbl9pZHgsIFxcXCI7IFxcXCIpO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfZ290b3guYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9nb3RveC5jXFxuaW5kZXggZjg4YWE0Y2RiMjc5MmMuLjViMThjOWEyNzcxN2JjIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9nb3RveC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2dvdG94LmNcXG5AQCAtMzg0LDYgKzM4NCwzMSBAQCBqdDBfJT06XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiBcXHQ6IF9fY2xvYmJlcl9hbGwpO1xcbiB9XFxuIFxcbisvKiBjaGVjayB2YWxpZCBzcGlsbC9maWxsLCBwdHIgdG8gaW5zbiAqL1xcbitTRUMoXFxcInNvY2tldFxcXCIpXFxuK19fc3VjY2Vzc1xcbitfX25ha2VkIHZvaWQgc3BpbGxfZmlsbF9wdHJfdG9faW5zbih2b2lkKVxcbit7XFxuK1xcdGFzbSB2b2xhdGlsZSAoXFxuK1xcdFxcXCIucHVzaHNlY3Rpb24gLmp1bXB0YWJsZXMsXFxcXFxcXCJcXFxcXFxcIixAcHJvZ2JpdHM7XFxcIlxcbitcXHRcXFwianQwXyU9OlxcXCJcXG4rXFx0XFxcIi5xdWFkIHJldDBfJT0gLSBzb2NrZXQ7XFxcIlxcbitcXHRcXFwiLnNpemUganQwXyU9LCA4O1xcXCJcXG4rXFx0XFxcIi5nbG9iYWwganQwXyU9O1xcXCJcXG4rXFx0XFxcIi5wb3BzZWN0aW9uO1xcXCJcXG4rXFx0XFxcInIwID0ganQwXyU9IGxsO1xcXCJcXG4rXFx0XFxcInIwID0gKih1NjQgKikocjAgKyAwKTtcXFwiXFxuK1xcdFxcXCIqKHU2NCAqKShyMTAgLSA4KSA9IHIwO1xcXCJcXG4rXFx0XFxcInIwID0gKih1NjQgKikocjEwIC0gOCk7XFxcIlxcbitcXHRcXFwiLjhieXRlICVbZ290b3hfcjBdO1xcXCJcXG4rXFx0XFxcInJldDBfJT06XFxcIlxcbitcXHRcXFwicjAgPSAwO1xcXCJcXG4rXFx0XFxcImV4aXQ7XFxcIlxcbitcXHQ6XFxuK1xcdDogX19pbW1faW5zbihnb3RveF9yMCwgQlBGX1JBV19JTlNOKEJQRl9KTVAgfCBCUEZfSkEgfCBCUEZfWCwgQlBGX1JFR18wLCAwLCAwLCAwKSlcXG4rXFx0OiBfX2Nsb2JiZXJfYWxsKTtcXG4rfVxcbitcXG4gI2VuZGlmIC8qIF9fVEFSR0VUX0FSQ0hfeDg2IHx8IF9fVEFSR0VUX0FSQ0hfYXJtNjQgfHwgX19UQVJHRVRfQVJDSF9wb3dlcnBjKi9cXG4gXFxuIGNoYXIgX2xpY2Vuc2VbXSBTRUMoXFxcImxpY2Vuc2VcXFwiKSA9IFxcXCJHUExcXFwiO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfc3BpbGxfZmlsbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3NwaWxsX2ZpbGwuY1xcbmluZGV4IDcyYzY5MTMzMzcwMzc3Li44YjE2NmM0MmM0ZTBlOCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfc3BpbGxfZmlsbC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3NwaWxsX2ZpbGwuY1xcbkBAIC0xNDAzLDQgKzE0MDMsNDYgQEAgX19uYWtlZCB2b2lkIHBhcnRpYWxfZmlsbF9mcm9tX2NsZWFuZWRfcG9pbnRlcl9zcGlsbCh2b2lkKVxcbiBcXHRcXHQgICAgICA6OjogX19jbG9iYmVyX2FsbCk7XFxuIH1cXG4gXFxuKy8qIGNoZWNrIHZhbGlkIHNwaWxsL2ZpbGwsIHB0ciB0byB0cCBidWZmZXIgKi9cXG4rU0VDKFxcXCJyYXdfdHJhY2Vwb2ludC53XFxcIilcXG4rX19zdWNjZXNzXFxuK19fbmFrZWQgdm9pZCBzcGlsbF9maWxsX3B0cl90b190cF9idWZmZXIodm9pZClcXG4re1xcbitcXHRhc20gdm9sYXRpbGUgKFxcbitcXHRcXFwicjYgPSAqKHU2NCopKHIxICsgMCk7XFxcIlxcdC8qIHI2IGlzIHRoZSB3cml0YWJsZSB0cmFjZXBvaW50IGJ1ZmZlciAqL1xcbitcXHRcXFwiKih1NjQqKShyMTAgLSA4KSA9IHI2O1xcXCJcXG4rXFx0XFxcInI3ID0gKih1NjQqKShyMTAgLSA4KTtcXFwiXFxuK1xcdFxcXCJyMCA9IDA7XFxcIlxcbitcXHRcXFwiKih1NjQqKShyNyArIDApID0gcjA7XFxcIlxcdC8qIHNob3VsZCBiZSBhYmxlIHRvIHdyaXRlIHRocm91Z2ggdGhlIGJ1ZmZlciAqL1xcbitcXHRcXFwicjAgPSAwO1xcXCJcXG4rXFx0XFxcImV4aXQ7XFxcIlxcbitcXHQ6OjogX19jbG9iYmVyX2FsbCk7XFxuK31cXG4rXFxuK19fbm9pbmxpbmUgaW50IHNwaWxsX2ZpbGxfZHlucHRyX3N1YnByb2coc3RydWN0IGJwZl9keW5wdHIgKmRwdHIpXFxuK3tcXG4rXFx0bG9uZyAqcDtcXG4rXFxuK1xcdGFzbSB2b2xhdGlsZSAoXFxcIioodTY0ICopKHIxMCAtIDgpID0gJVtkcHRyXTtcXFwiIC8qIHNwaWxsIHRoZSBDT05TVF9QVFJfVE9fRFlOUFRSIGFyZ3VtZW50ICovXFxuK1xcdFxcdCAgICAgIFxcXCIlW2RwdHJdID0gKih1NjQgKikocjEwIC0gOCk7XFxcIlxcbitcXHRcXHQgICAgICA6IFtkcHRyXSBcXFwiK3JcXFwiKGRwdHIpIDo6IFxcXCJtZW1vcnlcXFwiKTtcXG4rXFx0cCA9IGJwZl9keW5wdHJfZGF0YShkcHRyLCAwLCBzaXplb2YoKnApKTtcXG4rXFx0aWYgKCFwKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBjaGFyIGRwdHJfbWVtX2J1ZlsxNl07XFxuK1xcbisvKiBjaGVjayB2YWxpZCBzcGlsbC9maWxsLCBjb25zdCBwdHIgdG8gZHlucHRyICovXFxuK1NFQyhcXFwic29ja2V0XFxcIilcXG4rX19zdWNjZXNzXFxuK2ludCBzcGlsbF9maWxsX2NvbnN0X3B0cl90b19keW5wdHIodm9pZClcXG4re1xcbitcXHRzdHJ1Y3QgYnBmX2R5bnB0ciBwdHI7XFxuK1xcbitcXHRicGZfZHlucHRyX2Zyb21fbWVtKGRwdHJfbWVtX2J1Ziwgc2l6ZW9mKGRwdHJfbWVtX2J1ZiksIDAsIFxcdTAwMjZwdHIpO1xcbitcXHRyZXR1cm4gc3BpbGxfZmlsbF9keW5wdHJfc3VicHJvZyhcXHUwMDI2cHRyKTtcXG4rfVxcbitcXG4gY2hhciBfbGljZW5zZVtdIFNFQyhcXFwibGljZW5zZVxcXCIpID0gXFxcIkdQTFxcXCI7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDEwOjU5OjQ5LjEzMzkxMjI1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTEyMzU1MDAzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjaGVja19zdGFja193cml0ZV9maXhlZF9vZmZcIixcbiAgICBcImNoZWNrX3N0YWNrX3JlYWRfZml4ZWRfb2ZmXCIsXG4gICAgXCJfX2lzX3BvaW50ZXJfdmFsdWVcIixcbiAgICBcImlzX3BvaW50ZXJfcmVndHlwZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIgdG8gYWxsb3cgc3BpbGxpbmcgYW5kIGZpbGxpbmcgb2YgYWxsIHBvaW50ZXIgdHlwZXMgdG8vZnJvbSB0aGUgc3RhY2ssIHJlbW92aW5nIGEgaGFyZGNvZGVkIGxpc3Qgb2YgYWxsb3dlZCBwb2ludGVyIHR5cGVzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgQlBGIHZlcmlmaWVyIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGRmM2NkOTNkZWNhMWQ4NWM0ZTViYjBkMzVhY2FlODUzZDIyMzk3YTZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEp1bCA4IDEwOjU5OjQ1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5pbmRleCAzMTkzYjQ3Mzc2MmJhNC4uNTFmNzk2NWQ0MmUzMjQgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbisrKyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuQEAgLTMzMDQsMzQgKzMzMDQsNiBAQCBzdGF0aWMgaW50IG1hcmtfY2hhaW5fcHJlY2lzaW9uX2JhdGNoKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRyZXR1cm4gYnBmX21hcmtfY2hhaW5fcHJlY2lzaW9uKGVudiwgc3RhcnRpbmdfc3RhdGUsIC0xLCBOVUxMKTtcbiB9XG4gXG4tc3RhdGljIGJvb2wgaXNfc3BpbGxhYmxlX3JlZ3R5cGUoZW51bSBicGZfcmVnX3R5cGUgdHlwZSlcbi17XG4tXHRzd2l0Y2ggKGJhc2VfdHlwZSh0eXBlKSkge1xuLVx0Y2FzZSBQVFJfVE9fTUFQX1ZBTFVFOlxuLVx0Y2FzZSBQVFJfVE9fU1RBQ0s6XG4tXHRjYXNlIFBUUl9UT19DVFg6XG4tXHRjYXNlIFBUUl9UT19QQUNLRVQ6XG4tXHRjYXNlIFBUUl9UT19QQUNLRVRfTUVUQTpcbi1cdGNhc2UgUFRSX1RPX1BBQ0tFVF9FTkQ6XG4tXHRjYXNlIFBUUl9UT19GTE9XX0tFWVM6XG4tXHRjYXNlIENPTlNUX1BUUl9UT19NQVA6XG4tXHRjYXNlIFBUUl9UT19TT0NLRVQ6XG4tXHRjYXNlIFBUUl9UT19TT0NLX0NPTU1PTjpcbi1cdGNhc2UgUFRSX1RPX1RDUF9TT0NLOlxuLVx0Y2FzZSBQVFJfVE9fWERQX1NPQ0s6XG4tXHRjYXNlIFBUUl9UT19CVEZfSUQ6XG4tXHRjYXNlIFBUUl9UT19CVUY6XG4tXHRjYXNlIFBUUl9UT19NRU06XG4tXHRjYXNlIFBUUl9UT19GVU5DOlxuLVx0Y2FzZSBQVFJfVE9fTUFQX0tFWTpcbi1cdGNhc2UgUFRSX1RPX0FSRU5BOlxuLVx0XHRyZXR1cm4gdHJ1ZTtcbi1cdGRlZmF1bHQ6XG4tXHRcdHJldHVybiBmYWxzZTtcbi1cdH1cbi19XG4tXG4tXG4gLyogY2hlY2sgaWYgcmVnaXN0ZXIgaXMgYSBjb25zdGFudCBzY2FsYXIgdmFsdWUgKi9cbiBzdGF0aWMgYm9vbCBpc19yZWdfY29uc3Qoc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZywgYm9vbCBzdWJyZWczMilcbiB7XG5AQCAtMzM0NSwxMyArMzMxNywxOCBAQCBzdGF0aWMgdTY0IHJlZ19jb25zdF92YWx1ZShzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCBib29sIHN1YnJlZzMyKVxuIFx0cmV0dXJuIHN1YnJlZzMyID8gdG51bV9zdWJyZWcocmVnLVx1MDAzZXZhcl9vZmYpLnZhbHVlIDogcmVnLVx1MDAzZXZhcl9vZmYudmFsdWU7XG4gfVxuIFxuK3N0YXRpYyBib29sIGlzX3BvaW50ZXJfcmVndHlwZShlbnVtIGJwZl9yZWdfdHlwZSB0eXBlKVxuK3tcbitcdHJldHVybiB0eXBlICE9IFNDQUxBUl9WQUxVRSBcdTAwMjZcdTAwMjYgdHlwZSAhPSBOT1RfSU5JVDtcbit9XG4rXG4gc3RhdGljIGJvb2wgX19pc19wb2ludGVyX3ZhbHVlKGJvb2wgYWxsb3dfcHRyX2xlYWtzLFxuIFx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxuIHtcbiBcdGlmIChhbGxvd19wdHJfbGVha3MpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbi1cdHJldHVybiByZWctXHUwMDNldHlwZSAhPSBTQ0FMQVJfVkFMVUU7XG4rXHRyZXR1cm4gaXNfcG9pbnRlcl9yZWd0eXBlKHJlZy1cdTAwM2V0eXBlKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgY2xlYXJfc2NhbGFyX2lkKHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXG5AQCAtMzQ3Niw3ICszNDUzLDcgQEAgc3RhdGljIGludCBjaGVja19zdGFja193cml0ZV9maXhlZF9vZmYoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcdGlmICh2YWx1ZV9yZWdubyBcdTAwM2U9IDApXG4gXHRcdHJlZyA9IFx1MDAyNmN1ci1cdTAwM2VyZWdzW3ZhbHVlX3JlZ25vXTtcbiBcdGlmICghZW52LVx1MDAzZWJ5cGFzc19zcGVjX3Y0KSB7XG4tXHRcdGJvb2wgc2FuaXRpemUgPSByZWcgXHUwMDI2XHUwMDI2IGlzX3NwaWxsYWJsZV9yZWd0eXBlKHJlZy1cdTAwM2V0eXBlKTtcbitcdFx0Ym9vbCBzYW5pdGl6ZSA9IHJlZyBcdTAwMjZcdTAwMjYgaXNfcG9pbnRlcl9yZWd0eXBlKHJlZy1cdTAwM2V0eXBlKTtcbiBcbiBcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgc2l6ZTsgaSsrKSB7XG4gXHRcdFx0dTggdHlwZSA9IHN0YXRlLVx1MDAzZXN0YWNrW3NwaV0uc2xvdF90eXBlWyhzbG90IC0gaSkgJVxuQEAgLTM1MTcsNyArMzQ5NCw3IEBAIHN0YXRpYyBpbnQgY2hlY2tfc3RhY2tfd3JpdGVfZml4ZWRfb2ZmKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRcdF9fbWFya19yZWdfa25vd24odG1wX3JlZywgaW5zbi1cdTAwM2VpbW0pO1xuIFx0XHR0bXBfcmVnLVx1MDAzZXR5cGUgPSBTQ0FMQVJfVkFMVUU7XG4gXHRcdHNhdmVfcmVnaXN0ZXJfc3RhdGUoZW52LCBzdGF0ZSwgc3BpLCB0bXBfcmVnLCBzaXplKTtcbi1cdH0gZWxzZSBpZiAocmVnIFx1MDAyNlx1MDAyNiBpc19zcGlsbGFibGVfcmVndHlwZShyZWctXHUwMDNldHlwZSkpIHtcbitcdH0gZWxzZSBpZiAocmVnIFx1MDAyNlx1MDAyNiBpc19wb2ludGVyX3JlZ3R5cGUocmVnLVx1MDAzZXR5cGUpKSB7XG4gXHRcdC8qIHJlZ2lzdGVyIGNvbnRhaW5pbmcgcG9pbnRlciBpcyBiZWluZyBzcGlsbGVkIGludG8gc3RhY2sgKi9cbiBcdFx0aWYgKHNpemUgIT0gQlBGX1JFR19TSVpFKSB7XG4gXHRcdFx0dmVyYm9zZV9saW5mbyhlbnYsIGluc25faWR4LCBcIjsgXCIpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9nb3RveC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2dvdG94LmNcbmluZGV4IGY4OGFhNGNkYjI3OTJjLi41YjE4YzlhMjc3MTdiYyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9nb3RveC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfZ290b3guY1xuQEAgLTM4NCw2ICszODQsMzEgQEAganQwXyU9Olx0XHRcdFx0XHRcdFx0XHRcXFxuIFx0OiBfX2Nsb2JiZXJfYWxsKTtcbiB9XG4gXG4rLyogY2hlY2sgdmFsaWQgc3BpbGwvZmlsbCwgcHRyIHRvIGluc24gKi9cbitTRUMoXCJzb2NrZXRcIilcbitfX3N1Y2Nlc3NcbitfX25ha2VkIHZvaWQgc3BpbGxfZmlsbF9wdHJfdG9faW5zbih2b2lkKVxuK3tcbitcdGFzbSB2b2xhdGlsZSAoXG4rXHRcIi5wdXNoc2VjdGlvbiAuanVtcHRhYmxlcyxcXFwiXFxcIixAcHJvZ2JpdHM7XCJcbitcdFwianQwXyU9OlwiXG4rXHRcIi5xdWFkIHJldDBfJT0gLSBzb2NrZXQ7XCJcbitcdFwiLnNpemUganQwXyU9LCA4O1wiXG4rXHRcIi5nbG9iYWwganQwXyU9O1wiXG4rXHRcIi5wb3BzZWN0aW9uO1wiXG4rXHRcInIwID0ganQwXyU9IGxsO1wiXG4rXHRcInIwID0gKih1NjQgKikocjAgKyAwKTtcIlxuK1x0XCIqKHU2NCAqKShyMTAgLSA4KSA9IHIwO1wiXG4rXHRcInIwID0gKih1NjQgKikocjEwIC0gOCk7XCJcbitcdFwiLjhieXRlICVbZ290b3hfcjBdO1wiXG4rXHRcInJldDBfJT06XCJcbitcdFwicjAgPSAwO1wiXG4rXHRcImV4aXQ7XCJcbitcdDpcbitcdDogX19pbW1faW5zbihnb3RveF9yMCwgQlBGX1JBV19JTlNOKEJQRl9KTVAgfCBCUEZfSkEgfCBCUEZfWCwgQlBGX1JFR18wLCAwLCAwLCAwKSlcbitcdDogX19jbG9iYmVyX2FsbCk7XG4rfVxuK1xuICNlbmRpZiAvKiBfX1RBUkdFVF9BUkNIX3g4NiB8fCBfX1RBUkdFVF9BUkNIX2FybTY0IHx8IF9fVEFSR0VUX0FSQ0hfcG93ZXJwYyovXG4gXG4gY2hhciBfbGljZW5zZVtdIFNFQyhcImxpY2Vuc2VcIikgPSBcIkdQTFwiO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9zcGlsbF9maWxsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfc3BpbGxfZmlsbC5jXG5pbmRleCA3MmM2OTEzMzM3MDM3Ny4uOGIxNjZjNDJjNGUwZTggMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfc3BpbGxfZmlsbC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfc3BpbGxfZmlsbC5jXG5AQCAtMTQwMyw0ICsxNDAzLDQ2IEBAIF9fbmFrZWQgdm9pZCBwYXJ0aWFsX2ZpbGxfZnJvbV9jbGVhbmVkX3BvaW50ZXJfc3BpbGwodm9pZClcbiBcdFx0ICAgICAgOjo6IF9fY2xvYmJlcl9hbGwpO1xuIH1cbiBcbisvKiBjaGVjayB2YWxpZCBzcGlsbC9maWxsLCBwdHIgdG8gdHAgYnVmZmVyICovXG4rU0VDKFwicmF3X3RyYWNlcG9pbnQud1wiKVxuK19fc3VjY2Vzc1xuK19fbmFrZWQgdm9pZCBzcGlsbF9maWxsX3B0cl90b190cF9idWZmZXIodm9pZClcbit7XG4rXHRhc20gdm9sYXRpbGUgKFxuK1x0XCJyNiA9ICoodTY0KikocjEgKyAwKTtcIlx0LyogcjYgaXMgdGhlIHdyaXRhYmxlIHRyYWNlcG9pbnQgYnVmZmVyICovXG4rXHRcIioodTY0KikocjEwIC0gOCkgPSByNjtcIlxuK1x0XCJyNyA9ICoodTY0KikocjEwIC0gOCk7XCJcbitcdFwicjAgPSAwO1wiXG4rXHRcIioodTY0KikocjcgKyAwKSA9IHIwO1wiXHQvKiBzaG91bGQgYmUgYWJsZSB0byB3cml0ZSB0aHJvdWdoIHRoZSBidWZmZXIgKi9cbitcdFwicjAgPSAwO1wiXG4rXHRcImV4aXQ7XCJcbitcdDo6OiBfX2Nsb2JiZXJfYWxsKTtcbit9XG4rXG4rX19ub2lubGluZSBpbnQgc3BpbGxfZmlsbF9keW5wdHJfc3VicHJvZyhzdHJ1Y3QgYnBmX2R5bnB0ciAqZHB0cilcbit7XG4rXHRsb25nICpwO1xuK1xuK1x0YXNtIHZvbGF0aWxlIChcIioodTY0ICopKHIxMCAtIDgpID0gJVtkcHRyXTtcIiAvKiBzcGlsbCB0aGUgQ09OU1RfUFRSX1RPX0RZTlBUUiBhcmd1bWVudCAqL1xuK1x0XHQgICAgICBcIiVbZHB0cl0gPSAqKHU2NCAqKShyMTAgLSA4KTtcIlxuK1x0XHQgICAgICA6IFtkcHRyXSBcIityXCIoZHB0cikgOjogXCJtZW1vcnlcIik7XG4rXHRwID0gYnBmX2R5bnB0cl9kYXRhKGRwdHIsIDAsIHNpemVvZigqcCkpO1xuK1x0aWYgKCFwKVxuK1x0XHRyZXR1cm4gMDtcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgY2hhciBkcHRyX21lbV9idWZbMTZdO1xuK1xuKy8qIGNoZWNrIHZhbGlkIHNwaWxsL2ZpbGwsIGNvbnN0IHB0ciB0byBkeW5wdHIgKi9cbitTRUMoXCJzb2NrZXRcIilcbitfX3N1Y2Nlc3NcbitpbnQgc3BpbGxfZmlsbF9jb25zdF9wdHJfdG9fZHlucHRyKHZvaWQpXG4re1xuK1x0c3RydWN0IGJwZl9keW5wdHIgcHRyO1xuK1xuK1x0YnBmX2R5bnB0cl9mcm9tX21lbShkcHRyX21lbV9idWYsIHNpemVvZihkcHRyX21lbV9idWYpLCAwLCBcdTAwMjZwdHIpO1xuK1x0cmV0dXJuIHNwaWxsX2ZpbGxfZHlucHRyX3N1YnByb2coXHUwMDI2cHRyKTtcbit9XG4rXG4gY2hhciBfbGljZW5zZVtdIFNFQyhcImxpY2Vuc2VcIikgPSBcIkdQTFwiO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTA6NTk6NDkuMTMzOTE0NloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYzODY4NTcyMTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUGF0Y2ggRXZhbHVhdGlvbiBcdTAwMjYgRnV6emluZyBTdHJhdGVneSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBwYXRjaCwgd2hpY2ggdG91Y2hlcyBga2VybmVsL2JwZi92ZXJpZmllci5jYCBhbmQgYWRkcyBzZWxmLXRlc3RzIGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYCwgaXMgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4gVGhlIGNvcmUgY2hhbmdlLCB0aGUgcmVwbGFjZW1lbnQgb2YgYGlzX3NwaWxsYWJsZV9yZWd0eXBlYCB3aXRoIGBpc19wb2ludGVyX3JlZ3R5cGVgLCBpcyBzaWduaWZpY2FudC4gRWZmZWN0aXZlbHksIHdlJ3JlIGJyb2FkZW5pbmcgdGhlIHR5cGVzIHRoYXQgY2FuIGJlIHNwaWxsZWQgYW5kIGZpbGxlZCB0by9mcm9tIHRoZSBzdGFjayBpbiB0aGUgQlBGIHZlcmlmaWVyLiBUaGUgb2xkIG1ldGhvZCBoYWQgYSBoYXJkY29kZWQgbGlzdCBvZiBwb2ludGVyIHR5cGVzLCB3aGlsZSB0aGUgbmV3IGNoZWNrIGlzIGJyb2FkZXIsIGV4cGxpY2l0bHkgYWxsb3dpbmcgdHlwZXMgc3VjaCBhcyBgUFRSX1RPX0lOU05gLCBgUFRSX1RPX1RQX0JVRkZFUmAsIGFuZCBgQ09OU1RfUFRSX1RPX0RZTlBUUmAsIHdoaWNoIGlzIGNsZWFybHkgZGVtb25zdHJhdGVkIGluIHRoZSBhZGRlZCBzZWxmdGVzdHMuXG5cblRoaXMgaGFzIGltbWVkaWF0ZSBpbXBsaWNhdGlvbnM6IHdlJ3JlIG1vZGlmeWluZyBmdW5kYW1lbnRhbCBCUEYgdmVyaWZpZXIgbG9naWMuIEFueXRpbWUgeW91IHRvdWNoIHRoZSB2ZXJpZmllciwgeW91IGFyZSB0b3VjaGluZyB0aGUgY29yZSBvZiB0aGUga2VybmVsIGFuZCBtYWtpbmcgaXQgcmVhY2hhYmxlLiBUaGUgZnVuY3Rpb25hbCBjaGFuZ2Ugb3BlbnMgdGhlIGRvb3IgdG8gcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy4gSXQncyBhbG1vc3QgZ3VhcmFudGVlZCB0byBiZSB3b3J0aCB0aGUgdGltZSBpbnZlc3RtZW50LlxuXG5Ob3csIGxldCdzIGlkZW50aWZ5IHRoZSBmb2N1cyBzeW1ib2xzLiBUaGUgcGF0Y2ggc3BlY2lmaWNhbGx5IG1vZGlmaWVkIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zOlxuLSAgIGBpc19wb2ludGVyX3JlZ3R5cGVgICh0aGlzIGlzIHRoZSBuZXcgb25lLCB0aGUgcmVwbGFjZW1lbnQpXG4tICAgYF9faXNfcG9pbnRlcl92YWx1ZWAgKHRoaXMgbXVzdCBoYXZlIGJlZW4gYWRqdXN0ZWQgdG8gd29yayB3aXRoIHRoZSBjaGFuZ2VzKVxuLSAgIGBjaGVja19zdGFja193cml0ZV9maXhlZF9vZmZgIChpdCdzIGluIHRoZSBzYW1lIGZpbGUsIHNvIGl0IG5lZWRzIGNoZWNraW5nKVxuXG5HaXZlbiB0aGUgcG90ZW50aWFsIGltcG9ydGFuY2UsIEkgd2FudCB0byBzcGVjaWZpY2FsbHkgbG9vayBhdCBgY2hlY2tfc3RhY2tfd3JpdGVfZml4ZWRfb2ZmYC4gSSdsbCByZW1pbmQgbXlzZWxmIHRoYXQgaXQncyBhIHN0YXRpYyBmdW5jdGlvbiB3aXRoaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AsIHdoaWNoIGxpa2VseSBtYWtlcyBpdCBhbiBpbnRlcm5hbGx5IHJlbGV2YW50IGNvbXBvbmVudCBvZiB0aGUgdmVyaWZpZXIuIE5vdywgbGV0J3Mgc2VlIGhvdyBpdCdzIGNhbGxlZCBhbmQgd2hlcmUgaXQncyB1c2VkOyB0aGF0IHdpbGwgaGVscCB0byBkZXRlcm1pbmUgb3VyIHBvaW50cyBvZiBlbnRyeS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzg2NiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzNCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDEwOjU5OjU1LjUyMDc3NDM4NloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjk5MzQ0MzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY2hlY2tfc3RhY2tfd3JpdGVfZml4ZWRfb2ZmXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MzQxMz1zdGF0aWMgdm9pZCBzY3J1Yl9zcGVjaWFsX3Nsb3Qoc3RydWN0IGJwZl9mdW5jX3N0YXRlICpzdGF0ZSwgaW50IHNwaSlcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zNDI3LSAqL1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzozNDI4OnN0YXRpYyBpbnQgY2hlY2tfc3RhY2tfd3JpdGVfZml4ZWRfb2ZmKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTM0MjktXFx0XFx0XFx0XFx0ICAgICAgIC8qIHN0YWNrIGZyYW1lIHdlJ3JlIHdyaXRpbmcgdG8gKi9cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0zOTYwPXN0YXRpYyBpbnQgY2hlY2tfc3RhY2tfcmVhZChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTQwMDUtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjQwMDY6LyogY2hlY2tfc3RhY2tfd3JpdGUgZGlzcGF0Y2hlcyB0byBjaGVja19zdGFja193cml0ZV9maXhlZF9vZmYgb3JcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNDAwNy0gKiBjaGVja19zdGFja193cml0ZV92YXJfb2ZmLlxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTQwMTU9c3RhdGljIGludCBjaGVja19zdGFja193cml0ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTQwMjMtXFx0XFx0b2ZmICs9IHJlZy1cXHUwMDNldmFyX29mZi52YWx1ZTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NDAyNDpcXHRcXHRlcnIgPSBjaGVja19zdGFja193cml0ZV9maXhlZF9vZmYoZW52LCBzdGF0ZSwgb2ZmLCBzaXplLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy00MDI1LVxcdFxcdFxcdFxcdFxcdFxcdCAgdmFsdWVfcmVnbm8sIGluc25faWR4KTtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz00OTc3PXN0YXRpYyBpbnQgY2hlY2tfcHRyX2FsaWdubWVudChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTUwMDYtXFx0XFx0cG9pbnRlcl9kZXNjID0gXFxcInN0YWNrIFxcXCI7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjUwMDc6XFx0XFx0LyogVGhlIHN0YWNrIHNwaWxsIHRyYWNraW5nIGxvZ2ljIGluIGNoZWNrX3N0YWNrX3dyaXRlX2ZpeGVkX29mZigpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTUwMDgtXFx0XFx0ICogYW5kIGNoZWNrX3N0YWNrX3JlYWRfZml4ZWRfb2ZmKCkgcmVsaWVzIG9uIHN0YWNrIGFjY2Vzc2VzIGJlaW5nXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDEwOjU5OjU1Ljc5MDcxNTA0MloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5ODI2MDEyNDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aGUgZXhwZXJ0OlxuXG4qKlRyYWNpbmcgRG93biB0aGUgTWVtb3J5IEFjY2VzcyBDaGVjayoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBtZW1vcnkgYWNjZXNzIGNoZWNraW5nIGxvZ2ljLiBUaGUgY2FsbCBzdGFjayByZXZlYWxzIGEgY2xlYXIgcGF0aC4gRmlyc3QsIEkgc2VlIHRoYXQgYGNoZWNrX3N0YWNrX3dyaXRlX2ZpeGVkX29mZmAgaXMgdHJpZ2dlcmVkIGJ5IGBjaGVja19zdGFja193cml0ZWAuIEFuZCwgYGNoZWNrX3N0YWNrX3dyaXRlYCBpdHNlbGYgaXMgaW52b2tlZCBieSBgY2hlY2tfbWVtX2FjY2Vzc2AuIFRoaXMgdGVsbHMgbWUgdGhhdCBgY2hlY2tfbWVtX2FjY2Vzc2AgaXMgdGhlIGhpZ2gtbGV2ZWwgZnVuY3Rpb24gcmVzcG9uc2libGUgZm9yIGluaXRpYXRpbmcgbWVtb3J5IGFjY2VzcyB2YWxpZGF0aW9uLCBhbmQgdGhhdCBzdGFjayB3cml0ZXMsIHNwZWNpZmljYWxseSB0aG9zZSB3aXRoIGEgZml4ZWQgb2Zmc2V0LCBhcmUgYSBjcml0aWNhbCBjb21wb25lbnQgb2YgdGhhdCBwcm9jZXNzLiBOb3csIEkgd2FudCB0byBpbnZlc3RpZ2F0ZSBob3cgdGhlIHN5c3RlbSBkZXRlcm1pbmVzIHdoZXRoZXIgYSB2YWx1ZSByZXByZXNlbnRzIGEgdmFsaWQgcG9pbnRlciwgc28gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIGBfX2lzX3BvaW50ZXJfdmFsdWVgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MTU2LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTA6NTk6NTguNzczMzE4NTk5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExOTQ5OTg2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX2lzX3BvaW50ZXJfdmFsdWVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuYz0zMzIwPXN0YXRpYyBib29sIGlzX3BvaW50ZXJfcmVndHlwZShlbnVtIGJwZl9yZWdfdHlwZSB0eXBlKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTMzMjQtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjMzMjU6c3RhdGljIGJvb2wgX19pc19wb2ludGVyX3ZhbHVlKGJvb2wgYWxsb3dfcHRyX2xlYWtzLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zMzI2LVxcdFxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTM3NDQ9c3RhdGljIGludCBjaGVja19zdGFja19yZWFkX2ZpeGVkX29mZihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTM4NTUtXFx0XFx0XFx0ICovXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjM4NTY6XFx0XFx0fSBlbHNlIGlmIChfX2lzX3BvaW50ZXJfdmFsdWUoZW52LVxcdTAwM2VhbGxvd19wdHJfbGVha3MsIHJlZykpIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzg1Ny1cXHRcXHRcXHQvKiBJZiBkc3RfcmVnbm89PS0xLCB0aGUgY2FsbGVyIGlzIGFza2luZyB1cyB3aGV0aGVyXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NDgxND1zdGF0aWMgYm9vbCBpc19wb2ludGVyX3ZhbHVlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCByZWdubylcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNDgxNS17XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjQ4MTY6XFx0cmV0dXJuIF9faXNfcG9pbnRlcl92YWx1ZShlbnYtXFx1MDAzZWFsbG93X3B0cl9sZWFrcywgcmVnX3N0YXRlKGVudiwgcmVnbm8pKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNDgxNy19XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTU0NDc9c3RhdGljIGludCBpc19icmFuY2hfdGFrZW4oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZzEsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTU0NTItXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE1NDUzOlxcdGlmIChfX2lzX3BvaW50ZXJfdmFsdWUoZmFsc2UsIHJlZzEpIHx8IF9faXNfcG9pbnRlcl92YWx1ZShmYWxzZSwgcmVnMikpIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTU0NTQtXFx0XFx0dTY0IHZhbDtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xNTk0Mz1zdGF0aWMgaW50IGNoZWNrX2NvbmRfam1wX29wKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTYwMzEtXFx0XFx0ICovXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE2MDMyOlxcdFxcdGlmICghX19pc19wb2ludGVyX3ZhbHVlKGZhbHNlLCBkc3RfcmVnKSlcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTYwMzMtXFx0XFx0XFx0ZXJyID0gbWFya19jaGFpbl9wcmVjaXNpb24oZW52LCBpbnNuLVxcdTAwM2Vkc3RfcmVnKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTYwMzQtXFx0XFx0aWYgKEJQRl9TUkMoaW5zbi1cXHUwMDNlY29kZSkgPT0gQlBGX1ggXFx1MDAyNlxcdTAwMjYgIWVyciBcXHUwMDI2XFx1MDAyNlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNjAzNTpcXHRcXHQgICAgIV9faXNfcG9pbnRlcl92YWx1ZShmYWxzZSwgc3JjX3JlZykpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE2MDM2LVxcdFxcdFxcdGVyciA9IG1hcmtfY2hhaW5fcHJlY2lzaW9uKGVudiwgaW5zbi1cXHUwMDNlc3JjX3JlZyk7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTYxMjctXFx0aWYgKCFpc19qbXAzMiBcXHUwMDI2XFx1MDAyNiBCUEZfU1JDKGluc24tXFx1MDAzZWNvZGUpID09IEJQRl9YIFxcdTAwMjZcXHUwMDI2XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE2MTI4OlxcdCAgICBfX2lzX3BvaW50ZXJfdmFsdWUoZmFsc2UsIHNyY19yZWcpIFxcdTAwMjZcXHUwMDI2IF9faXNfcG9pbnRlcl92YWx1ZShmYWxzZSwgZHN0X3JlZykgXFx1MDAyNlxcdTAwMjZcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTYxMjktXFx0ICAgIHR5cGVfbWF5X2JlX251bGwoc3JjX3JlZy1cXHUwMDNldHlwZSkgIT0gdHlwZV9tYXlfYmVfbnVsbChkc3RfcmVnLVxcdTAwM2V0eXBlKSBcXHUwMDI2XFx1MDAyNlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxMDo1OTo1OC44OTI4MjU2NDhaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODg2ODY3OTI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZvY3VzaW5nIG9uIFBvaW50ZXIgVmFsdWUgQ2hlY2tzKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IGhvdyB0aGUgY29kZSB2YWxpZGF0ZXMgcG9pbnRlciB2YWx1ZXMuIGBpc19wb2ludGVyX3ZhbHVlYCBwb3BzIHVwIGluIHF1aXRlIGEgZmV3IHBsYWNlcyDigJMgbGlrZSBgY2hlY2tfYWx1X29wYCBhbmQgYGNoZWNrX21lbV9hY2Nlc3NgLCB3aGljaCBtYWtlcyBpdCBhIGNydWNpYWwgZnVuY3Rpb24gdG8gdW5kZXJzdGFuZC4gSXQncyB1c2VkIGluIGxvdHMgb2YgY29tbW9uIHNjZW5hcmlvcywgc28gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gY3J5c3RhbCBjbGVhciBvbiBpdHMgYmVoYXZpb3VyLlxuXG5JIG5lZWQgdG8gZGlnIGludG8gdGhlIGtleSBzeW1ib2xzIGhlcmUuIEkgdGhpbmsgYGNoZWNrX3N0YWNrX3dyaXRlX2ZpeGVkX29mZmAsIGFuZCBgY2hlY2tfc3RhY2tfcmVhZF9maXhlZF9vZmZgIHdpbGwgYmUgZ29vZCBmb2N1cyBwb2ludHMuIFRoZXkncmUgcmVsYXRlZCwgc28gSSdsbCBjaGVjayB0aG9zZSBvdXQgdG9nZXRoZXIgd2l0aCBgY2hlY2tfc3RhY2tfd3JpdGVgLCB0b28uIFBsdXMsIEkgc2hvdWxkIHByb2JhYmx5IGFsc28gbG9vayBhdCBgaXNfcG9pbnRlcl9yZWd0eXBlYCBhbmQgYF9faXNfcG9pbnRlcl92YWx1ZWAgdG8gZ2V0IGEgbW9yZSBjb21wbGV0ZSBwaWN0dXJlLiBJIHRoaW5rIHRoaXMgd2lsbCBzaG93IHRoZSBjb3JlIGxvZ2ljIGFuZCBpbnRlcmFjdGlvbiB3aXRoIHRoZSBzdGFjay4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGdyYXNwIG9uIGhvdyBwb2ludGVyIHZhbGlkaXR5IGlzIGRldGVybWluZWQgd2l0aGluIHRoaXMgc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MjcxLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDExOjAwOjAyLjc3OTY5NjYxN1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTg2NDczNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY2hlY2tfc3RhY2tfd3JpdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuYz0zNDEzPXN0YXRpYyB2b2lkIHNjcnViX3NwZWNpYWxfc2xvdChzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKnN0YXRlLCBpbnQgc3BpKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTM0MjctICovXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjM0Mjg6c3RhdGljIGludCBjaGVja19zdGFja193cml0ZV9maXhlZF9vZmYoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzQyOS1cXHRcXHRcXHRcXHQgICAgICAgLyogc3RhY2sgZnJhbWUgd2UncmUgd3JpdGluZyB0byAqL1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTM1NTgtICovXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjM1NTk6c3RhdGljIGludCBjaGVja19zdGFja193cml0ZV92YXJfb2ZmKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTM1NjAtXFx0XFx0XFx0XFx0ICAgICAvKiBmdW5jIHdoZXJlIHJlZ2lzdGVyIHBvaW50cyB0byAqL1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTM5NjA9c3RhdGljIGludCBjaGVja19zdGFja19yZWFkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNDAwNS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NDAwNjovKiBjaGVja19zdGFja193cml0ZSBkaXNwYXRjaGVzIHRvIGNoZWNrX3N0YWNrX3dyaXRlX2ZpeGVkX29mZiBvclxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo0MDA3OiAqIGNoZWNrX3N0YWNrX3dyaXRlX3Zhcl9vZmYuXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTQwMDgtICpcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy00MDE0LSAqL1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo0MDE1OnN0YXRpYyBpbnQgY2hlY2tfc3RhY2tfd3JpdGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNDAxNi1cXHRcXHRcXHQgICAgIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsIGludCBvZmYsIGludCBzaXplLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTQwMjMtXFx0XFx0b2ZmICs9IHJlZy1cXHUwMDNldmFyX29mZi52YWx1ZTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NDAyNDpcXHRcXHRlcnIgPSBjaGVja19zdGFja193cml0ZV9maXhlZF9vZmYoZW52LCBzdGF0ZSwgb2ZmLCBzaXplLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy00MDI1LVxcdFxcdFxcdFxcdFxcdFxcdCAgdmFsdWVfcmVnbm8sIGluc25faWR4KTtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy00MDI5LVxcdFxcdCAqL1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo0MDMwOlxcdFxcdGVyciA9IGNoZWNrX3N0YWNrX3dyaXRlX3Zhcl9vZmYoZW52LCBzdGF0ZSxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNDAzMS1cXHRcXHRcXHRcXHRcXHRcXHRyZWcsIG9mZiwgc2l6ZSxcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz00OTc3PXN0YXRpYyBpbnQgY2hlY2tfcHRyX2FsaWdubWVudChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTUwMDYtXFx0XFx0cG9pbnRlcl9kZXNjID0gXFxcInN0YWNrIFxcXCI7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjUwMDc6XFx0XFx0LyogVGhlIHN0YWNrIHNwaWxsIHRyYWNraW5nIGxvZ2ljIGluIGNoZWNrX3N0YWNrX3dyaXRlX2ZpeGVkX29mZigpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTUwMDgtXFx0XFx0ICogYW5kIGNoZWNrX3N0YWNrX3JlYWRfZml4ZWRfb2ZmKCkgcmVsaWVzIG9uIHN0YWNrIGFjY2Vzc2VzIGJlaW5nXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NjA3OT1zdGF0aWMgaW50IGNoZWNrX21lbV9hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGluc25faWR4LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCBhcmdub190IGFyZ25vLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTYyNTAtXFx0XFx0ZWxzZVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2MjUxOlxcdFxcdFxcdGVyciA9IGNoZWNrX3N0YWNrX3dyaXRlKGVudiwgcmVnLCBvZmYsIHNpemUsXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTYyNTItXFx0XFx0XFx0XFx0XFx0XFx0dmFsdWVfcmVnbm8sIGluc25faWR4KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTE6MDA6MDIuODk4MzQ4OTQ3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk4Mzg1NDk3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgQ29kZSBNb2RpZmljYXRpb24qKlxuXG5Pa2F5LCBzbyB0aGUgcGF0Y2ggaXMgdHdlYWtpbmcgYGNoZWNrX3N0YWNrX3dyaXRlX2ZpeGVkX29mZmAgYW5kIGBfX2lzX3BvaW50ZXJfdmFsdWVgLiBSaWdodCwgc2VlbXMgbG9naWNhbC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVwZGF0ZSBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjb2RlJ3MgZGF0YSBzdHJ1Y3R1cmVzIGFjY29yZGluZ2x5LiBJJ2xsIG5lZWQgdG8gaW5jb3Jwb3JhdGUgdGhvc2UgZnVuY3Rpb25zLCBhbG9uZyB3aXRoIGBpc19wb2ludGVyX3JlZ3R5cGVgIGFuZCBhbHNvIGBjaGVja19zdGFja19yZWFkX2ZpeGVkX29mZmAgKHNpbmNlIGl0IHJlYWRzIHNwaWxsZWQgcG9pbnRlcnMsIHdoaWNoIGlzIGtleSksIGludG8gbXkgYEZvY3VzU3ltYm9sc2Aga25vd2xlZGdlIGJhc2UuIFRoYXQgd2lsbCBhbGxvdyBtZSB0byBhY2N1cmF0ZWx5IHRyYWNrIHRoaXMgY29kZSBwYXRoLiBJIHdpbGwgbmVlZCB0byBiZSB2ZXJ5IHRob3JvdWdoLlxuXG5Ob3csIGxldCdzIGNvbnNpZGVyIHRoZSBidWlsZCBlbnZpcm9ubWVudC4gYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgc3RhbmRhcmQsIG5vIHN1cnByaXNlcyB0aGVyZS4gSG93ZXZlciwgSSB3YW50IHRvIGNvbmZpcm0gd2hldGhlciB0aGVyZSBhcmUgKmFueSogbmV3LCBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyBhc3NvY2lhdGVkIHdpdGggdGhlc2UgY2hhbmdlcy4gVGhlIGNvZGUgaXMgbG9jYXRlZCB3aXRoaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AsIHNvIEkgc2hvdWxkIGluc3BlY3QgdGhhdCBhcmVhIGNsb3NlbHkgZm9yIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGRpcmVjdGl2ZXMgdGhhdCByZWxhdGUgdG8gdGhpcyBwYXRjaC4gSSBuZWVkIHRvIGtub3cgd2hpY2ggY29uZmlndXJhdGlvbnMgd291bGQgYmUgbmVjZXNzYXJ5IHRvIGluY2x1ZGUgdGhpcywgb3IgYWx0ZXIgaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc0OTYsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTE6MDA6MDYuODgyMjA2NDA4WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTE3MjQwMzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX0JQRlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL3ZlcmlmaWVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jPTQzOTY9QlRGX0lEKHN0cnVjdCwgY2dyb3VwKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy00Mzk3LSNlbmRpZlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo0Mzk4OiNpZmRlZiBDT05GSUdfQlBGX0pJVFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy00Mzk5LUJURl9JRChzdHJ1Y3QsIGJwZl9jcHVtYXNrKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTExMTI4PUJURl9JRF9VTlVTRURcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTExMjktI2VuZGlmXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjExMTMwOiNpZmRlZiBDT05GSUdfQlBGX0VWRU5UU1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTEzMS1CVEZfSUQoZnVuYywgYnBmX3Nlc3Npb25fY29va2llKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTExMTQwPUJURl9JRChmdW5jLCBicGZfaXRlcl9udW1fZGVzdHJveSlcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTExNDE6I2lmZGVmIENPTkZJR19CUEZfTFNNXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMTQyLUJURl9JRChmdW5jLCBicGZfc2V0X2RlbnRyeV94YXR0cilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTE1OT1CVEZfSUQoZnVuYywgYnBmX2FyZW5hX3Jlc2VydmVfcGFnZXMpXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjExMTYwOiNpZmRlZiBDT05GSUdfQlBGX0VWRU5UU1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTE2MS1CVEZfSUQoZnVuYywgYnBmX3Nlc3Npb25faXNfcmV0dXJuKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxMTowMDowNy4wNzM5MzczNzFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ0NzEzMjk4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlIHdoYXQncyBnb2luZyBvbiBoZXJlLlxuXG4qKkFuYWx5emluZyBQb3RlbnRpYWwgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMgaW4gQlBGIFZlcmlmaWVyIFRlc3RzKipcblxuUmlnaHQsIHNvIG5vIGltbWVkaWF0ZSByZWQgZmxhZ3MsIG5vIHVudXN1YWwgY29uZmlndXJhdGlvbnMgc3ByaW5nIHRvIG1pbmQuIGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIGEgZ2l2ZW4sIHdlJ3JlIHRhbGtpbmcgYWJvdXQgQlBGIGhlcmUuIEJ1dCwgYmVmb3JlIEkgYXNzdW1lIGV2ZXJ5dGhpbmcgaXMgaHVua3ktZG9yeSwgSSBzaG91bGQgdmVyaWZ5LiBJJ20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgYSBjb3VwbGUgb2YgdGhlIHRlc3QgcHJvZ3JhbXMgdG8gYmUgc3VyZS4gU3BlY2lmaWNhbGx5LCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2dvdG94LmNgIGFuZCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3NwaWxsX2ZpbGwuY2AuIFRoZXNlIHRlc3RzIGFyZSBrbm93biB0byBoaXQgc29tZSBpbnRlcmVzdGluZyBhcmVhcyBvZiB0aGUgdmVyaWZpZXIsIHNvIHRoZXkncmUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IHN1YnRsZSBkZXBlbmRlbmNpZXMgdGhhdCBhcmVuJ3QgaW1tZWRpYXRlbHkgb2J2aW91cyBmcm9tIHRoZSBjb25maWcgbGlzdC4gSSBuZWVkIHRvIHNjYW4gdGhvc2Ugc291cmNlIGZpbGVzLCBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzIG9yIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIHRoYXQgd291bGQgcmVxdWlyZSBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiBmbGFncyB0byBiZSBlbmFibGVkIGZvciB0aGVtIHRvIGJ1aWxkIGFuZCBydW4gY29ycmVjdGx5LiBOb3RoaW5nIHdvcnNlIHRoYW4gYSBzaWxlbnQgZmFpbHVyZSBkdWUgdG8gYSBtaXNzaW5nIGNvbmZpZyFcblxuXG4iLCJJbnB1dFRva2VucyI6ODI3MSwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDExOjAwOjEwLjUyMTA3Mjg5OFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk2MzEyMTI0LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcInRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9nb3RveC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxMTowMDoxMC43MTczOTUyNzFaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY4NDkzOTExNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIFwiTm8gY29uZmlncyxcIiBzdW1tYXJpemVkIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzc3VtaW5nIGEgbGV2ZWwgb2YgZXhwZXJ0aXNlOlxuXG4qKlRoZSBBYnNlbmNlIG9mIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCBzbyB0aGUgY29yZSBvZiB0aGlzIHNpdHVhdGlvbiBpcyBjbGVhciDigJMgb3IgcmF0aGVyLCB0aGUgbGFjayBvZiBjbGFyaXR5ICppcyogdGhlIGNvcmUuIFwiTm8gY29uZmlncy5cIiBUaGF0J3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBObyBwcmUtc2V0IHBhcmFtZXRlcnMsIG5vIGRlZmluZWQgaW5pdGlhbCBzdGF0ZXMsIG5vIGVzdGFibGlzaGVkIGNvbmZpZ3VyYXRpb25zIG9mIGFueSBraW5kLiBUaGlzIG1lYW5zIEknbSBkZWFsaW5nIHdpdGggYSBzeXN0ZW0gdGhhdCdzIGVpdGhlciBmdW5kYW1lbnRhbGx5IGJsYW5rLCBjb21wbGV0ZWx5IHVuaW5pdGlhbGl6ZWQsIG9yIHBlcmhhcHMgZGVzaWduZWQgdG8gYmUgZHluYW1pY2FsbHkgY29uZmlndXJlZCBvbiB0aGUgZmx5LiBUaGlzIGxhY2sgb2YgcHJlLWV4aXN0aW5nIHNldHRpbmdzIGlzIHNpZ25pZmljYW50LiBJdCBpbXBsaWVzIGEgZGVncmVlIG9mIGZsZXhpYmlsaXR5LCBwZXJoYXBzLCBidXQgYWxzbyBhIHBvdGVudGlhbCBmb3Igc2lnbmlmaWNhbnQgYW1iaWd1aXR5LiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IEknbSB3b3JraW5nICp3aXRoKiByYXRoZXIgdGhhbiAqYWdhaW5zdC4qXG5cbk15IGV4cGVydGlzZSB0ZWxscyBtZSB0aGF0IHRoaXMgY291bGQgbWVhbiBhIG11bHRpdHVkZSBvZiB0aGluZ3MuIElzIHRoaXMgYSBkZWxpYmVyYXRlbHkgbWluaW1hbGlzdCBkZXNpZ24sIGEgc2FuZGJveCBlbnZpcm9ubWVudCwgb3IgYSBmbGF3ZWQgZGVwbG95bWVudD8gQXJlIHdlIHRhbGtpbmcgYWJvdXQgYSBjb21wbGV0ZSBsYWNrIG9mIGEgY29uZmlndXJhdGlvbiBmaWxlLCBvciBpcyB0aGUgY29uZmlndXJhdGlvbiBoYW5kbGVkIGludGVybmFsbHksIHBlcmhhcHMgdGhyb3VnaCBhbiBBUEkgb3IgYSBkeW5hbWljIHByb2Nlc3M/IFRoZSBpbXBsaWNhdGlvbnMgaGVyZSBhcmUgdmFzdCBhbmQgY2FuIGNoYW5nZSB0aGUgZGlyZWN0aW9uIG9mIGFuYWx5c2lzIGFuZCBwcm9ibGVtLXNvbHZpbmcuIFRoaXMgY291bGQgbWFrZSBpdCBhIHZlcnkgaW50ZXJlc3RpbmcgcHJvYmxlbSB0byB0YWNrbGUuXG5cblRoaXMgaXMgYWxsIGFib3V0IGNvbnRleHQ7IFwiTm8gY29uZmlnc1wiIGRvZXNuJ3QgbWVhbiBhbnl0aGluZyBpbiBpc29sYXRpb24uIEkgbmVlZCBtb3JlIGluZm9ybWF0aW9uIHRvIGJlZ2luIHRvIGludGVycHJldCB3aGF0IHRoaXMgbWVhbnMgaW4gcHJhY3RpY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg2NDksIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDExOjAwOjE0LjQwMjMzNjUwN1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcyNDUzNzA1LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcInRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9zcGlsbF9maWxsLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDExOjAwOjE0LjU3NDc5NzU2MloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODQwMDA0Njg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEJQRiBWZXJpZmllciBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgc3BlY2lmaWNhbGx5IGV4cGFuZGluZyB0aGUgQlBGIHZlcmlmaWVyJ3MgY2FwYWJpbGl0eSB0byBoYW5kbGUgbW9yZSBwb2ludGVyIHR5cGVzIGR1cmluZyBzcGlsbGluZyBhbmQgZmlsbGluZyBvcGVyYXRpb25zLiBHb29kLiBJdCdzIGJlZW4gZmxhZ2dlZCBhcyBXb3J0aEZ1enppbmcsIHdoaWNoIGlzIGEgZ29vZCBpbmRpY2F0b3IgdGhhdCB3ZSBzaG91bGQgZ2l2ZSBpdCBhIHRob3JvdWdoIGdvaW5nLW92ZXIuXG5cblRoZSBrZXkgZnVuY3Rpb25zIHRvIGNvbmNlbnRyYXRlIG9uIGR1cmluZyBmdXp6aW5nIGFyZSBgY2hlY2tfc3RhY2tfd3JpdGVfZml4ZWRfb2ZmYCwgYGNoZWNrX3N0YWNrX3JlYWRfZml4ZWRfb2ZmYCwgYF9faXNfcG9pbnRlcl92YWx1ZWAsIGFuZCBgaXNfcG9pbnRlcl9yZWd0eXBlYC4gVGhlc2UgYXJlIGNsZWFybHkgdGhlIGFyZWFzIHdoZXJlIHRoZSBuZXcgcG9pbnRlciBoYW5kbGluZyBsb2dpYyBpcyBpbXBsZW1lbnRlZCBvciBtb3N0IGltcGFjdGZ1bC4gR2l2ZW4gSSdtIGFuIGV4cGVydCBpbiB0aGlzIGZpZWxkLCBJJ2xsIG5lZWQgdG8gZm9jdXMgbXkgYXR0ZW50aW9uIG9uIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBhbmQgd2hldGhlciB0aGVyZSBhcmUgYW55IHVuZXhwZWN0ZWQgc2lkZSBlZmZlY3RzLlxuXG5SZWdhcmRpbmcgY29uZmlndXJhdGlvbiwgSSB3b24ndCBsaXN0IGBCUEZfU1lTQ0FMTGAgYmVjYXVzZSBpdCdzIHN0YW5kYXJkIGFuZCBub3Qgc3BlY2lmaWMgdG8gdGhpcyBjaGFuZ2UuIEknbGwgbmVlZCB0byByZS1ldmFsdWF0ZSB0aGUgdHdvIGZ1bmN0aW9ucyBwcmV2aW91c2x5IG1lbnRpb25lZCwgYGlzX3BvaW50ZXJfcmVndHlwZWAgYW5kIGBfX2lzX3BvaW50ZXJfdmFsdWVgLCB0byBzZWUgd2hhdCBraW5kIG9mIGNvbmZpZ3VyYXRpb24gY2hhbmdlcyB3aWxsIGJlIG5lY2Vzc2FyeSB0byBlbnN1cmUgdGhlIHRlc3RzIGhhdmUgYWRlcXVhdGUgY292ZXJhZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg5OTEsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTE6MDA6MTkuNDE0ODA1MzNaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMjUzOTQxMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpc19wb2ludGVyX3JlZ3R5cGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuYz0zMzE1PXN0YXRpYyB1NjQgcmVnX2NvbnN0X3ZhbHVlKHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsIGJvb2wgc3VicmVnMzIpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzMxOS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MzMyMDpzdGF0aWMgYm9vbCBpc19wb2ludGVyX3JlZ3R5cGUoZW51bSBicGZfcmVnX3R5cGUgdHlwZSlcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzMyMS17XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MzMyNT1zdGF0aWMgYm9vbCBfX2lzX3BvaW50ZXJfdmFsdWUoYm9vbCBhbGxvd19wdHJfbGVha3MsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzMzMC1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MzMzMTpcXHRyZXR1cm4gaXNfcG9pbnRlcl9yZWd0eXBlKHJlZy1cXHUwMDNldHlwZSk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTMzMzItfVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTM0Mjg9c3RhdGljIGludCBjaGVja19zdGFja193cml0ZV9maXhlZF9vZmYoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zNDU1LVxcdGlmICghZW52LVxcdTAwM2VieXBhc3Nfc3BlY192NCkge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzozNDU2OlxcdFxcdGJvb2wgc2FuaXRpemUgPSByZWcgXFx1MDAyNlxcdTAwMjYgaXNfcG9pbnRlcl9yZWd0eXBlKHJlZy1cXHUwMDNldHlwZSk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTM0NTctXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzQ5Ni1cXHRcXHRzYXZlX3JlZ2lzdGVyX3N0YXRlKGVudiwgc3RhdGUsIHNwaSwgdG1wX3JlZywgc2l6ZSk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjM0OTc6XFx0fSBlbHNlIGlmIChyZWcgXFx1MDAyNlxcdTAwMjYgaXNfcG9pbnRlcl9yZWd0eXBlKHJlZy1cXHUwMDNldHlwZSkpIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzQ5OC1cXHRcXHQvKiByZWdpc3RlciBjb250YWluaW5nIHBvaW50ZXIgaXMgYmVpbmcgc3BpbGxlZCBpbnRvIHN0YWNrICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDExOjAwOjE5LjYxNzM1MDcwM1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjQwMDY5NjI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBjaGFuZ2VzOlxuXG4qKkFuYWx5emluZyB0aGUgUmVnaXN0ZXIgVHlwZSBNb2RpZmljYXRpb24qKlxuXG5BbHJpZ2h0LCBzbyB0aGUgY29yZSBvZiB0aGlzIGNoYW5nZSBpcyBwcmV0dHkgY2xlYW4gYW5kIGRpcmVjdC4gV2UncmUgZ2V0dGluZyByaWQgb2YgdGhlIGBpc19zcGlsbGFibGVfcmVndHlwZWAgY2hlY2ssIHdoaWNoIHNlZW1zIHRvIGhhdmUgYmVlbiBhIGJpdCBvdmVybHkgcmVzdHJpY3RpdmUuIFRoZSByZXBsYWNlbWVudCwgYGlzX3BvaW50ZXJfcmVndHlwZWAsIGJvaWxzIGRvd24gdG8gYSBzaW1wbGVyIGNoZWNrOiBlbnN1cmluZyB0aGUgcmVnaXN0ZXIgdHlwZSBpc24ndCBhIGBTQ0FMQVJfVkFMVUVgIG9yIGBOT1RfSU5JVGAuIFRoYXQncyBhIGdvb2Qgc2ltcGxpZmljYXRpb24sIGZ1bmN0aW9uYWxseSBlcXVpdmFsZW50IGJ1dCBtb3JlIGVsZWdhbnQuXG5cblRoZSByZWFsIGltcGxpY2F0aW9uIGhlcmUgaXMgdGhlIHJlbGF4YXRpb24gb2YgY29uc3RyYWludHMgb24gc3BpbGxpbmcgcG9pbnRlciB0eXBlcy4gQmVmb3JlLCB0aGVyZSB3YXMgcHJvYmFibHkgYSBoYXJkY29kZWQgbGlzdCBvciBjb21wbGV4IGxvZ2ljIGRldGVybWluaW5nIHdoYXQgcG9pbnRlcnMgd2VyZSBzcGlsbGFibGUuIE5vdywgYW55IHBvaW50ZXIgdHlwZSB0aGF0ICppc24ndCogYSBwcmltaXRpdmUgc2NhbGFyIG9yIHVuaW5pdGlhbGl6ZWQgY2FuIGJlIHNwaWxsZWQgdG8gdGhlIHN0YWNrLiBUaGF0J3MgYSBkZWZpbml0ZSBpbXByb3ZlbWVudCBpbiBmbGV4aWJpbGl0eSBhbmQgc2hvdWxkIGVsaW1pbmF0ZSBzb21lIHBvdGVudGlhbCBoZWFkYWNoZXMgYW5kIGluZWZmaWNpZW5jaWVzLiBUaGlzIGNoYW5nZSBoYXMgdGhlIHBvdGVudGlhbCB0byBlbGltaW5hdGUgc29tZSBvZiB0aGUgcHJldmlvdXMgcmVnaXN0ZXIgYWxsb2NhdGlvbiBpc3N1ZXMuXG5cbknigJltIG9uIGJvYXJkIHdpdGggdGhpcyBhcHByb2FjaC4gSXQgbWFrZXMgc2Vuc2UsIGFuZCBJIGNhbiBhcHByZWNpYXRlIHRoZSBkaXJlY3RuZXNzIG9mIHRoZSB1cGRhdGVkIGxvZ2ljLiBJdCdzIHRpbWUgdG8gdGVzdCB0aGlzIGFuZCB2ZXJpZnkgdGhlIHJlc3VsdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk4OTcsIk91dHB1dFRva2VucyI6MTI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTE6MDA6MjQuMjU3NDIzMDY3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzY2MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjaGVja19zdGFja193cml0ZV9maXhlZF9vZmZcIixcbiAgICBcImNoZWNrX3N0YWNrX3JlYWRfZml4ZWRfb2ZmXCIsXG4gICAgXCJfX2lzX3BvaW50ZXJfdmFsdWVcIixcbiAgICBcImlzX3BvaW50ZXJfcmVndHlwZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIgdG8gYWxsb3cgc3BpbGxpbmcgYW5kIGZpbGxpbmcgb2YgYWxsIHBvaW50ZXIgdHlwZXMgdG8vZnJvbSB0aGUgc3RhY2ssIHJlbW92aW5nIGEgaGFyZGNvZGVkIGxpc3Qgb2YgYWxsb3dlZCBwb2ludGVyIHR5cGVzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgQlBGIHZlcmlmaWVyIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImNoZWNrX3N0YWNrX3dyaXRlX2ZpeGVkX29mZlwiLFxuICAgIFwiY2hlY2tfc3RhY2tfcmVhZF9maXhlZF9vZmZcIixcbiAgICBcIl9faXNfcG9pbnRlcl92YWx1ZVwiLFxuICAgIFwiaXNfcG9pbnRlcl9yZWd0eXBlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciB0byBhbGxvdyBzcGlsbGluZyBhbmQgZmlsbGluZyBvZiBhbGwgcG9pbnRlciB0eXBlcyB0by9mcm9tIHRoZSBzdGFjaywgcmVtb3ZpbmcgYSBoYXJkY29kZWQgbGlzdCBvZiBhbGxvd2VkIHBvaW50ZXIgdHlwZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBCUEYgdmVyaWZpZXIgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowzwvqq[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-08 10:39:28 +0000 UTC FinishedAt: 2026-07-08 11:00:25 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "602701718649936eb287bf6c7ecf870ec54c6f71", "config_name": "upstream-apparmor-kasan.config", "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": "602701718649936eb287bf6c7ecf870ec54c6f71", "config_name": "upstream-apparmor-kasan.config", "series_id": "33a3a3b2-c552-4d19-b1a0-29989d856e3c" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "check_stack_write_fixed_off", "check_stack_read_fixed_off", "__is_pointer_value", "is_pointer_regtype" ], "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+CgkJCTx0ZD4yMDI2LzA3LzA4IDEwOjU5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y2hlY2tfc3RhY2tfd3JpdGVfZml4ZWRfb2ZmJiMzNDssCiAgICAmIzM0O2NoZWNrX3N0YWNrX3JlYWRfZml4ZWRfb2ZmJiMzNDssCiAgICAmIzM0O19faXNfcG9pbnRlcl92YWx1ZSYjMzQ7LAogICAgJiMzNDtpc19wb2ludGVyX3JlZ3R5cGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciB0byBhbGxvdyBzcGlsbGluZyBhbmQgZmlsbGluZyBvZiBhbGwgcG9pbnRlciB0eXBlcyB0by9mcm9tIHRoZSBzdGFjaywgcmVtb3ZpbmcgYSBoYXJkY29kZWQgbGlzdCBvZiBhbGxvd2VkIHBvaW50ZXIgdHlwZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBCUEYgdmVyaWZpZXIgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTA6NTk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBkZjNjZDkzZGVjYTFkODVjNGU1YmIwZDM1YWNhZTg1M2QyMjM5N2E2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgOCAxMDo1OTo0NSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbmluZGV4IDMxOTNiNDczNzYyYmE0Li41MWY3OTY1ZDQyZTMyNCAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5AQCAtMzMwNCwzNCAmIzQzOzMzMDQsNiBAQCBzdGF0aWMgaW50IG1hcmtfY2hhaW5fcHJlY2lzaW9uX2JhdGNoKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRyZXR1cm4gYnBmX21hcmtfY2hhaW5fcHJlY2lzaW9uKGVudiwgc3RhcnRpbmdfc3RhdGUsIC0xLCBOVUxMKTtcbiB9XG4gXG4tc3RhdGljIGJvb2wgaXNfc3BpbGxhYmxlX3JlZ3R5cGUoZW51bSBicGZfcmVnX3R5cGUgdHlwZSlcbi17XG4tXHRzd2l0Y2ggKGJhc2VfdHlwZSh0eXBlKSkge1xuLVx0Y2FzZSBQVFJfVE9fTUFQX1ZBTFVFOlxuLVx0Y2FzZSBQVFJfVE9fU1RBQ0s6XG4tXHRjYXNlIFBUUl9UT19DVFg6XG4tXHRjYXNlIFBUUl9UT19QQUNLRVQ6XG4tXHRjYXNlIFBUUl9UT19QQUNLRVRfTUVUQTpcbi1cdGNhc2UgUFRSX1RPX1BBQ0tFVF9FTkQ6XG4tXHRjYXNlIFBUUl9UT19GTE9XX0tFWVM6XG4tXHRjYXNlIENPTlNUX1BUUl9UT19NQVA6XG4tXHRjYXNlIFBUUl9UT19TT0NLRVQ6XG4tXHRjYXNlIFBUUl9UT19TT0NLX0NPTU1PTjpcbi1cdGNhc2UgUFRSX1RPX1RDUF9TT0NLOlxuLVx0Y2FzZSBQVFJfVE9fWERQX1NPQ0s6XG4tXHRjYXNlIFBUUl9UT19CVEZfSUQ6XG4tXHRjYXNlIFBUUl9UT19CVUY6XG4tXHRjYXNlIFBUUl9UT19NRU06XG4tXHRjYXNlIFBUUl9UT19GVU5DOlxuLVx0Y2FzZSBQVFJfVE9fTUFQX0tFWTpcbi1cdGNhc2UgUFRSX1RPX0FSRU5BOlxuLVx0XHRyZXR1cm4gdHJ1ZTtcbi1cdGRlZmF1bHQ6XG4tXHRcdHJldHVybiBmYWxzZTtcbi1cdH1cbi19XG4tXG4tXG4gLyogY2hlY2sgaWYgcmVnaXN0ZXIgaXMgYSBjb25zdGFudCBzY2FsYXIgdmFsdWUgKi9cbiBzdGF0aWMgYm9vbCBpc19yZWdfY29uc3Qoc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZywgYm9vbCBzdWJyZWczMilcbiB7XG5AQCAtMzM0NSwxMyAmIzQzOzMzMTcsMTggQEAgc3RhdGljIHU2NCByZWdfY29uc3RfdmFsdWUoc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZywgYm9vbCBzdWJyZWczMilcbiBcdHJldHVybiBzdWJyZWczMiA/IHRudW1fc3VicmVnKHJlZy1cdTAwM2V2YXJfb2ZmKS52YWx1ZSA6IHJlZy1cdTAwM2V2YXJfb2ZmLnZhbHVlO1xuIH1cbiBcbiYjNDM7c3RhdGljIGJvb2wgaXNfcG9pbnRlcl9yZWd0eXBlKGVudW0gYnBmX3JlZ190eXBlIHR5cGUpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gdHlwZSAhPSBTQ0FMQVJfVkFMVUUgXHUwMDI2XHUwMDI2IHR5cGUgIT0gTk9UX0lOSVQ7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGJvb2wgX19pc19wb2ludGVyX3ZhbHVlKGJvb2wgYWxsb3dfcHRyX2xlYWtzLFxuIFx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxuIHtcbiBcdGlmIChhbGxvd19wdHJfbGVha3MpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbi1cdHJldHVybiByZWctXHUwMDNldHlwZSAhPSBTQ0FMQVJfVkFMVUU7XG4mIzQzO1x0cmV0dXJuIGlzX3BvaW50ZXJfcmVndHlwZShyZWctXHUwMDNldHlwZSk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGNsZWFyX3NjYWxhcl9pZChzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxuQEAgLTM0NzYsNyAmIzQzOzM0NTMsNyBAQCBzdGF0aWMgaW50IGNoZWNrX3N0YWNrX3dyaXRlX2ZpeGVkX29mZihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0aWYgKHZhbHVlX3JlZ25vIFx1MDAzZT0gMClcbiBcdFx0cmVnID0gXHUwMDI2Y3VyLVx1MDAzZXJlZ3NbdmFsdWVfcmVnbm9dO1xuIFx0aWYgKCFlbnYtXHUwMDNlYnlwYXNzX3NwZWNfdjQpIHtcbi1cdFx0Ym9vbCBzYW5pdGl6ZSA9IHJlZyBcdTAwMjZcdTAwMjYgaXNfc3BpbGxhYmxlX3JlZ3R5cGUocmVnLVx1MDAzZXR5cGUpO1xuJiM0MztcdFx0Ym9vbCBzYW5pdGl6ZSA9IHJlZyBcdTAwMjZcdTAwMjYgaXNfcG9pbnRlcl9yZWd0eXBlKHJlZy1cdTAwM2V0eXBlKTtcbiBcbiBcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgc2l6ZTsgaSYjNDM7JiM0MzspIHtcbiBcdFx0XHR1OCB0eXBlID0gc3RhdGUtXHUwMDNlc3RhY2tbc3BpXS5zbG90X3R5cGVbKHNsb3QgLSBpKSAlXG5AQCAtMzUxNyw3ICYjNDM7MzQ5NCw3IEBAIHN0YXRpYyBpbnQgY2hlY2tfc3RhY2tfd3JpdGVfZml4ZWRfb2ZmKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRcdF9fbWFya19yZWdfa25vd24odG1wX3JlZywgaW5zbi1cdTAwM2VpbW0pO1xuIFx0XHR0bXBfcmVnLVx1MDAzZXR5cGUgPSBTQ0FMQVJfVkFMVUU7XG4gXHRcdHNhdmVfcmVnaXN0ZXJfc3RhdGUoZW52LCBzdGF0ZSwgc3BpLCB0bXBfcmVnLCBzaXplKTtcbi1cdH0gZWxzZSBpZiAocmVnIFx1MDAyNlx1MDAyNiBpc19zcGlsbGFibGVfcmVndHlwZShyZWctXHUwMDNldHlwZSkpIHtcbiYjNDM7XHR9IGVsc2UgaWYgKHJlZyBcdTAwMjZcdTAwMjYgaXNfcG9pbnRlcl9yZWd0eXBlKHJlZy1cdTAwM2V0eXBlKSkge1xuIFx0XHQvKiByZWdpc3RlciBjb250YWluaW5nIHBvaW50ZXIgaXMgYmVpbmcgc3BpbGxlZCBpbnRvIHN0YWNrICovXG4gXHRcdGlmIChzaXplICE9IEJQRl9SRUdfU0laRSkge1xuIFx0XHRcdHZlcmJvc2VfbGluZm8oZW52LCBpbnNuX2lkeCwgXCYjMzQ7OyBcJiMzNDspO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9nb3RveC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2dvdG94LmNcbmluZGV4IGY4OGFhNGNkYjI3OTJjLi41YjE4YzlhMjc3MTdiYyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9nb3RveC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfZ290b3guY1xuQEAgLTM4NCw2ICYjNDM7Mzg0LDMxIEBAIGp0MF8lPTpcdFx0XHRcdFx0XHRcdFx0XFxcbiBcdDogX19jbG9iYmVyX2FsbCk7XG4gfVxuIFxuJiM0MzsvKiBjaGVjayB2YWxpZCBzcGlsbC9maWxsLCBwdHIgdG8gaW5zbiAqL1xuJiM0MztTRUMoXCYjMzQ7c29ja2V0XCYjMzQ7KVxuJiM0MztfX3N1Y2Nlc3NcbiYjNDM7X19uYWtlZCB2b2lkIHNwaWxsX2ZpbGxfcHRyX3RvX2luc24odm9pZClcbiYjNDM7e1xuJiM0MztcdGFzbSB2b2xhdGlsZSAoXG4mIzQzO1x0XCYjMzQ7LnB1c2hzZWN0aW9uIC5qdW1wdGFibGVzLFxcXCYjMzQ7XFxcJiMzNDssQHByb2diaXRzO1wmIzM0O1xuJiM0MztcdFwmIzM0O2p0MF8lPTpcJiMzNDtcbiYjNDM7XHRcJiMzNDsucXVhZCByZXQwXyU9IC0gc29ja2V0O1wmIzM0O1xuJiM0MztcdFwmIzM0Oy5zaXplIGp0MF8lPSwgODtcJiMzNDtcbiYjNDM7XHRcJiMzNDsuZ2xvYmFsIGp0MF8lPTtcJiMzNDtcbiYjNDM7XHRcJiMzNDsucG9wc2VjdGlvbjtcJiMzNDtcbiYjNDM7XHRcJiMzNDtyMCA9IGp0MF8lPSBsbDtcJiMzNDtcbiYjNDM7XHRcJiMzNDtyMCA9ICoodTY0ICopKHIwICYjNDM7IDApO1wmIzM0O1xuJiM0MztcdFwmIzM0OyoodTY0ICopKHIxMCAtIDgpID0gcjA7XCYjMzQ7XG4mIzQzO1x0XCYjMzQ7cjAgPSAqKHU2NCAqKShyMTAgLSA4KTtcJiMzNDtcbiYjNDM7XHRcJiMzNDsuOGJ5dGUgJVtnb3RveF9yMF07XCYjMzQ7XG4mIzQzO1x0XCYjMzQ7cmV0MF8lPTpcJiMzNDtcbiYjNDM7XHRcJiMzNDtyMCA9IDA7XCYjMzQ7XG4mIzQzO1x0XCYjMzQ7ZXhpdDtcJiMzNDtcbiYjNDM7XHQ6XG4mIzQzO1x0OiBfX2ltbV9pbnNuKGdvdG94X3IwLCBCUEZfUkFXX0lOU04oQlBGX0pNUCB8IEJQRl9KQSB8IEJQRl9YLCBCUEZfUkVHXzAsIDAsIDAsIDApKVxuJiM0MztcdDogX19jbG9iYmVyX2FsbCk7XG4mIzQzO31cbiYjNDM7XG4gI2VuZGlmIC8qIF9fVEFSR0VUX0FSQ0hfeDg2IHx8IF9fVEFSR0VUX0FSQ0hfYXJtNjQgfHwgX19UQVJHRVRfQVJDSF9wb3dlcnBjKi9cbiBcbiBjaGFyIF9saWNlbnNlW10gU0VDKFwmIzM0O2xpY2Vuc2VcJiMzNDspID0gXCYjMzQ7R1BMXCYjMzQ7O1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9zcGlsbF9maWxsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfc3BpbGxfZmlsbC5jXG5pbmRleCA3MmM2OTEzMzM3MDM3Ny4uOGIxNjZjNDJjNGUwZTggMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfc3BpbGxfZmlsbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfc3BpbGxfZmlsbC5jXG5AQCAtMTQwMyw0ICYjNDM7MTQwMyw0NiBAQCBfX25ha2VkIHZvaWQgcGFydGlhbF9maWxsX2Zyb21fY2xlYW5lZF9wb2ludGVyX3NwaWxsKHZvaWQpXG4gXHRcdCAgICAgIDo6OiBfX2Nsb2JiZXJfYWxsKTtcbiB9XG4gXG4mIzQzOy8qIGNoZWNrIHZhbGlkIHNwaWxsL2ZpbGwsIHB0ciB0byB0cCBidWZmZXIgKi9cbiYjNDM7U0VDKFwmIzM0O3Jhd190cmFjZXBvaW50LndcJiMzNDspXG4mIzQzO19fc3VjY2Vzc1xuJiM0MztfX25ha2VkIHZvaWQgc3BpbGxfZmlsbF9wdHJfdG9fdHBfYnVmZmVyKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRhc20gdm9sYXRpbGUgKFxuJiM0MztcdFwmIzM0O3I2ID0gKih1NjQqKShyMSAmIzQzOyAwKTtcJiMzNDtcdC8qIHI2IGlzIHRoZSB3cml0YWJsZSB0cmFjZXBvaW50IGJ1ZmZlciAqL1xuJiM0MztcdFwmIzM0OyoodTY0KikocjEwIC0gOCkgPSByNjtcJiMzNDtcbiYjNDM7XHRcJiMzNDtyNyA9ICoodTY0KikocjEwIC0gOCk7XCYjMzQ7XG4mIzQzO1x0XCYjMzQ7cjAgPSAwO1wmIzM0O1xuJiM0MztcdFwmIzM0OyoodTY0KikocjcgJiM0MzsgMCkgPSByMDtcJiMzNDtcdC8qIHNob3VsZCBiZSBhYmxlIHRvIHdyaXRlIHRocm91Z2ggdGhlIGJ1ZmZlciAqL1xuJiM0MztcdFwmIzM0O3IwID0gMDtcJiMzNDtcbiYjNDM7XHRcJiMzNDtleGl0O1wmIzM0O1xuJiM0MztcdDo6OiBfX2Nsb2JiZXJfYWxsKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7X19ub2lubGluZSBpbnQgc3BpbGxfZmlsbF9keW5wdHJfc3VicHJvZyhzdHJ1Y3QgYnBmX2R5bnB0ciAqZHB0cilcbiYjNDM7e1xuJiM0MztcdGxvbmcgKnA7XG4mIzQzO1xuJiM0MztcdGFzbSB2b2xhdGlsZSAoXCYjMzQ7Kih1NjQgKikocjEwIC0gOCkgPSAlW2RwdHJdO1wmIzM0OyAvKiBzcGlsbCB0aGUgQ09OU1RfUFRSX1RPX0RZTlBUUiBhcmd1bWVudCAqL1xuJiM0MztcdFx0ICAgICAgXCYjMzQ7JVtkcHRyXSA9ICoodTY0ICopKHIxMCAtIDgpO1wmIzM0O1xuJiM0MztcdFx0ICAgICAgOiBbZHB0cl0gXCYjMzQ7JiM0MztyXCYjMzQ7KGRwdHIpIDo6IFwmIzM0O21lbW9yeVwmIzM0Oyk7XG4mIzQzO1x0cCA9IGJwZl9keW5wdHJfZGF0YShkcHRyLCAwLCBzaXplb2YoKnApKTtcbiYjNDM7XHRpZiAoIXApXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGNoYXIgZHB0cl9tZW1fYnVmWzE2XTtcbiYjNDM7XG4mIzQzOy8qIGNoZWNrIHZhbGlkIHNwaWxsL2ZpbGwsIGNvbnN0IHB0ciB0byBkeW5wdHIgKi9cbiYjNDM7U0VDKFwmIzM0O3NvY2tldFwmIzM0OylcbiYjNDM7X19zdWNjZXNzXG4mIzQzO2ludCBzcGlsbF9maWxsX2NvbnN0X3B0cl90b19keW5wdHIodm9pZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBicGZfZHlucHRyIHB0cjtcbiYjNDM7XG4mIzQzO1x0YnBmX2R5bnB0cl9mcm9tX21lbShkcHRyX21lbV9idWYsIHNpemVvZihkcHRyX21lbV9idWYpLCAwLCBcdTAwMjZwdHIpO1xuJiM0MztcdHJldHVybiBzcGlsbF9maWxsX2R5bnB0cl9zdWJwcm9nKFx1MDAyNnB0cik7XG4mIzQzO31cbiYjNDM7XG4gY2hhciBfbGljZW5zZVtdIFNFQyhcJiMzNDtsaWNlbnNlXCYjMzQ7KSA9IFwmIzM0O0dQTFwmIzM0OztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxMDo1OTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2NoZWNrX3N0YWNrX3dyaXRlX2ZpeGVkX29mZiYjMzQ7LAogICAgJiMzNDtjaGVja19zdGFja19yZWFkX2ZpeGVkX29mZiYjMzQ7LAogICAgJiMzNDtfX2lzX3BvaW50ZXJfdmFsdWUmIzM0OywKICAgICYjMzQ7aXNfcG9pbnRlcl9yZWd0eXBlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIgdG8gYWxsb3cgc3BpbGxpbmcgYW5kIGZpbGxpbmcgb2YgYWxsIHBvaW50ZXIgdHlwZXMgdG8vZnJvbSB0aGUgc3RhY2ssIHJlbW92aW5nIGEgaGFyZGNvZGVkIGxpc3Qgb2YgYWxsb3dlZCBwb2ludGVyIHR5cGVzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgQlBGIHZlcmlmaWVyIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBkZjNjZDkzZGVjYTFkODVjNGU1YmIwZDM1YWNhZTg1M2QyMjM5N2E2CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBKdWwgOCAxMDo1OTo0NSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuYwppbmRleCAzMTkzYjQ3Mzc2MmJhNC4uNTFmNzk2NWQ0MmUzMjQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMKQEAgLTMzMDQsMzQgJiM0MzszMzA0LDYgQEAgc3RhdGljIGludCBtYXJrX2NoYWluX3ByZWNpc2lvbl9iYXRjaChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LAogCXJldHVybiBicGZfbWFya19jaGFpbl9wcmVjaXNpb24oZW52LCBzdGFydGluZ19zdGF0ZSwgLTEsIE5VTEwpOwogfQogCi1zdGF0aWMgYm9vbCBpc19zcGlsbGFibGVfcmVndHlwZShlbnVtIGJwZl9yZWdfdHlwZSB0eXBlKQotewotCXN3aXRjaCAoYmFzZV90eXBlKHR5cGUpKSB7Ci0JY2FzZSBQVFJfVE9fTUFQX1ZBTFVFOgotCWNhc2UgUFRSX1RPX1NUQUNLOgotCWNhc2UgUFRSX1RPX0NUWDoKLQljYXNlIFBUUl9UT19QQUNLRVQ6Ci0JY2FzZSBQVFJfVE9fUEFDS0VUX01FVEE6Ci0JY2FzZSBQVFJfVE9fUEFDS0VUX0VORDoKLQljYXNlIFBUUl9UT19GTE9XX0tFWVM6Ci0JY2FzZSBDT05TVF9QVFJfVE9fTUFQOgotCWNhc2UgUFRSX1RPX1NPQ0tFVDoKLQljYXNlIFBUUl9UT19TT0NLX0NPTU1PTjoKLQljYXNlIFBUUl9UT19UQ1BfU09DSzoKLQljYXNlIFBUUl9UT19YRFBfU09DSzoKLQljYXNlIFBUUl9UT19CVEZfSUQ6Ci0JY2FzZSBQVFJfVE9fQlVGOgotCWNhc2UgUFRSX1RPX01FTToKLQljYXNlIFBUUl9UT19GVU5DOgotCWNhc2UgUFRSX1RPX01BUF9LRVk6Ci0JY2FzZSBQVFJfVE9fQVJFTkE6Ci0JCXJldHVybiB0cnVlOwotCWRlZmF1bHQ6Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci19Ci0KLQogLyogY2hlY2sgaWYgcmVnaXN0ZXIgaXMgYSBjb25zdGFudCBzY2FsYXIgdmFsdWUgKi8KIHN0YXRpYyBib29sIGlzX3JlZ19jb25zdChzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCBib29sIHN1YnJlZzMyKQogewpAQCAtMzM0NSwxMyAmIzQzOzMzMTcsMTggQEAgc3RhdGljIHU2NCByZWdfY29uc3RfdmFsdWUoc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZywgYm9vbCBzdWJyZWczMikKIAlyZXR1cm4gc3VicmVnMzIgPyB0bnVtX3N1YnJlZyhyZWctJmd0O3Zhcl9vZmYpLnZhbHVlIDogcmVnLSZndDt2YXJfb2ZmLnZhbHVlOwogfQogCiYjNDM7c3RhdGljIGJvb2wgaXNfcG9pbnRlcl9yZWd0eXBlKGVudW0gYnBmX3JlZ190eXBlIHR5cGUpCiYjNDM7ewomIzQzOwlyZXR1cm4gdHlwZSAhPSBTQ0FMQVJfVkFMVUUgJmFtcDsmYW1wOyB0eXBlICE9IE5PVF9JTklUOwomIzQzO30KJiM0MzsKIHN0YXRpYyBib29sIF9faXNfcG9pbnRlcl92YWx1ZShib29sIGFsbG93X3B0cl9sZWFrcywKIAkJCSAgICAgICBjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKQogewogCWlmIChhbGxvd19wdHJfbGVha3MpCiAJCXJldHVybiBmYWxzZTsKIAotCXJldHVybiByZWctJmd0O3R5cGUgIT0gU0NBTEFSX1ZBTFVFOwomIzQzOwlyZXR1cm4gaXNfcG9pbnRlcl9yZWd0eXBlKHJlZy0mZ3Q7dHlwZSk7CiB9CiAKIHN0YXRpYyB2b2lkIGNsZWFyX3NjYWxhcl9pZChzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKQpAQCAtMzQ3Niw3ICYjNDM7MzQ1Myw3IEBAIHN0YXRpYyBpbnQgY2hlY2tfc3RhY2tfd3JpdGVfZml4ZWRfb2ZmKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsCiAJaWYgKHZhbHVlX3JlZ25vICZndDs9IDApCiAJCXJlZyA9ICZhbXA7Y3VyLSZndDtyZWdzW3ZhbHVlX3JlZ25vXTsKIAlpZiAoIWVudi0mZ3Q7YnlwYXNzX3NwZWNfdjQpIHsKLQkJYm9vbCBzYW5pdGl6ZSA9IHJlZyAmYW1wOyZhbXA7IGlzX3NwaWxsYWJsZV9yZWd0eXBlKHJlZy0mZ3Q7dHlwZSk7CiYjNDM7CQlib29sIHNhbml0aXplID0gcmVnICZhbXA7JmFtcDsgaXNfcG9pbnRlcl9yZWd0eXBlKHJlZy0mZ3Q7dHlwZSk7CiAKIAkJZm9yIChpID0gMDsgaSAmbHQ7IHNpemU7IGkmIzQzOyYjNDM7KSB7CiAJCQl1OCB0eXBlID0gc3RhdGUtJmd0O3N0YWNrW3NwaV0uc2xvdF90eXBlWyhzbG90IC0gaSkgJQpAQCAtMzUxNyw3ICYjNDM7MzQ5NCw3IEBAIHN0YXRpYyBpbnQgY2hlY2tfc3RhY2tfd3JpdGVfZml4ZWRfb2ZmKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsCiAJCV9fbWFya19yZWdfa25vd24odG1wX3JlZywgaW5zbi0mZ3Q7aW1tKTsKIAkJdG1wX3JlZy0mZ3Q7dHlwZSA9IFNDQUxBUl9WQUxVRTsKIAkJc2F2ZV9yZWdpc3Rlcl9zdGF0ZShlbnYsIHN0YXRlLCBzcGksIHRtcF9yZWcsIHNpemUpOwotCX0gZWxzZSBpZiAocmVnICZhbXA7JmFtcDsgaXNfc3BpbGxhYmxlX3JlZ3R5cGUocmVnLSZndDt0eXBlKSkgewomIzQzOwl9IGVsc2UgaWYgKHJlZyAmYW1wOyZhbXA7IGlzX3BvaW50ZXJfcmVndHlwZShyZWctJmd0O3R5cGUpKSB7CiAJCS8qIHJlZ2lzdGVyIGNvbnRhaW5pbmcgcG9pbnRlciBpcyBiZWluZyBzcGlsbGVkIGludG8gc3RhY2sgKi8KIAkJaWYgKHNpemUgIT0gQlBGX1JFR19TSVpFKSB7CiAJCQl2ZXJib3NlX2xpbmZvKGVudiwgaW5zbl9pZHgsICYjMzQ7OyAmIzM0Oyk7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfZ290b3guYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9nb3RveC5jCmluZGV4IGY4OGFhNGNkYjI3OTJjLi41YjE4YzlhMjc3MTdiYyAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2dvdG94LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2dvdG94LmMKQEAgLTM4NCw2ICYjNDM7Mzg0LDMxIEBAIGp0MF8lPToJCQkJCQkJCVwKIAk6IF9fY2xvYmJlcl9hbGwpOwogfQogCiYjNDM7LyogY2hlY2sgdmFsaWQgc3BpbGwvZmlsbCwgcHRyIHRvIGluc24gKi8KJiM0MztTRUMoJiMzNDtzb2NrZXQmIzM0OykKJiM0MztfX3N1Y2Nlc3MKJiM0MztfX25ha2VkIHZvaWQgc3BpbGxfZmlsbF9wdHJfdG9faW5zbih2b2lkKQomIzQzO3sKJiM0MzsJYXNtIHZvbGF0aWxlICgKJiM0MzsJJiMzNDsucHVzaHNlY3Rpb24gLmp1bXB0YWJsZXMsXCYjMzQ7XCYjMzQ7LEBwcm9nYml0czsmIzM0OwomIzQzOwkmIzM0O2p0MF8lPTomIzM0OwomIzQzOwkmIzM0Oy5xdWFkIHJldDBfJT0gLSBzb2NrZXQ7JiMzNDsKJiM0MzsJJiMzNDsuc2l6ZSBqdDBfJT0sIDg7JiMzNDsKJiM0MzsJJiMzNDsuZ2xvYmFsIGp0MF8lPTsmIzM0OwomIzQzOwkmIzM0Oy5wb3BzZWN0aW9uOyYjMzQ7CiYjNDM7CSYjMzQ7cjAgPSBqdDBfJT0gbGw7JiMzNDsKJiM0MzsJJiMzNDtyMCA9ICoodTY0ICopKHIwICYjNDM7IDApOyYjMzQ7CiYjNDM7CSYjMzQ7Kih1NjQgKikocjEwIC0gOCkgPSByMDsmIzM0OwomIzQzOwkmIzM0O3IwID0gKih1NjQgKikocjEwIC0gOCk7JiMzNDsKJiM0MzsJJiMzNDsuOGJ5dGUgJVtnb3RveF9yMF07JiMzNDsKJiM0MzsJJiMzNDtyZXQwXyU9OiYjMzQ7CiYjNDM7CSYjMzQ7cjAgPSAwOyYjMzQ7CiYjNDM7CSYjMzQ7ZXhpdDsmIzM0OwomIzQzOwk6CiYjNDM7CTogX19pbW1faW5zbihnb3RveF9yMCwgQlBGX1JBV19JTlNOKEJQRl9KTVAgfCBCUEZfSkEgfCBCUEZfWCwgQlBGX1JFR18wLCAwLCAwLCAwKSkKJiM0MzsJOiBfX2Nsb2JiZXJfYWxsKTsKJiM0Mzt9CiYjNDM7CiAjZW5kaWYgLyogX19UQVJHRVRfQVJDSF94ODYgfHwgX19UQVJHRVRfQVJDSF9hcm02NCB8fCBfX1RBUkdFVF9BUkNIX3Bvd2VycGMqLwogCiBjaGFyIF9saWNlbnNlW10gU0VDKCYjMzQ7bGljZW5zZSYjMzQ7KSA9ICYjMzQ7R1BMJiMzNDs7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfc3BpbGxfZmlsbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3NwaWxsX2ZpbGwuYwppbmRleCA3MmM2OTEzMzM3MDM3Ny4uOGIxNjZjNDJjNGUwZTggMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9zcGlsbF9maWxsLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3NwaWxsX2ZpbGwuYwpAQCAtMTQwMyw0ICYjNDM7MTQwMyw0NiBAQCBfX25ha2VkIHZvaWQgcGFydGlhbF9maWxsX2Zyb21fY2xlYW5lZF9wb2ludGVyX3NwaWxsKHZvaWQpCiAJCSAgICAgIDo6OiBfX2Nsb2JiZXJfYWxsKTsKIH0KIAomIzQzOy8qIGNoZWNrIHZhbGlkIHNwaWxsL2ZpbGwsIHB0ciB0byB0cCBidWZmZXIgKi8KJiM0MztTRUMoJiMzNDtyYXdfdHJhY2Vwb2ludC53JiMzNDspCiYjNDM7X19zdWNjZXNzCiYjNDM7X19uYWtlZCB2b2lkIHNwaWxsX2ZpbGxfcHRyX3RvX3RwX2J1ZmZlcih2b2lkKQomIzQzO3sKJiM0MzsJYXNtIHZvbGF0aWxlICgKJiM0MzsJJiMzNDtyNiA9ICoodTY0KikocjEgJiM0MzsgMCk7JiMzNDsJLyogcjYgaXMgdGhlIHdyaXRhYmxlIHRyYWNlcG9pbnQgYnVmZmVyICovCiYjNDM7CSYjMzQ7Kih1NjQqKShyMTAgLSA4KSA9IHI2OyYjMzQ7CiYjNDM7CSYjMzQ7cjcgPSAqKHU2NCopKHIxMCAtIDgpOyYjMzQ7CiYjNDM7CSYjMzQ7cjAgPSAwOyYjMzQ7CiYjNDM7CSYjMzQ7Kih1NjQqKShyNyAmIzQzOyAwKSA9IHIwOyYjMzQ7CS8qIHNob3VsZCBiZSBhYmxlIHRvIHdyaXRlIHRocm91Z2ggdGhlIGJ1ZmZlciAqLwomIzQzOwkmIzM0O3IwID0gMDsmIzM0OwomIzQzOwkmIzM0O2V4aXQ7JiMzNDsKJiM0MzsJOjo6IF9fY2xvYmJlcl9hbGwpOwomIzQzO30KJiM0MzsKJiM0MztfX25vaW5saW5lIGludCBzcGlsbF9maWxsX2R5bnB0cl9zdWJwcm9nKHN0cnVjdCBicGZfZHlucHRyICpkcHRyKQomIzQzO3sKJiM0MzsJbG9uZyAqcDsKJiM0MzsKJiM0MzsJYXNtIHZvbGF0aWxlICgmIzM0OyoodTY0ICopKHIxMCAtIDgpID0gJVtkcHRyXTsmIzM0OyAvKiBzcGlsbCB0aGUgQ09OU1RfUFRSX1RPX0RZTlBUUiBhcmd1bWVudCAqLwomIzQzOwkJICAgICAgJiMzNDslW2RwdHJdID0gKih1NjQgKikocjEwIC0gOCk7JiMzNDsKJiM0MzsJCSAgICAgIDogW2RwdHJdICYjMzQ7JiM0MztyJiMzNDsoZHB0cikgOjogJiMzNDttZW1vcnkmIzM0Oyk7CiYjNDM7CXAgPSBicGZfZHlucHRyX2RhdGEoZHB0ciwgMCwgc2l6ZW9mKCpwKSk7CiYjNDM7CWlmICghcCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGNoYXIgZHB0cl9tZW1fYnVmWzE2XTsKJiM0MzsKJiM0MzsvKiBjaGVjayB2YWxpZCBzcGlsbC9maWxsLCBjb25zdCBwdHIgdG8gZHlucHRyICovCiYjNDM7U0VDKCYjMzQ7c29ja2V0JiMzNDspCiYjNDM7X19zdWNjZXNzCiYjNDM7aW50IHNwaWxsX2ZpbGxfY29uc3RfcHRyX3RvX2R5bnB0cih2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IGJwZl9keW5wdHIgcHRyOwomIzQzOwomIzQzOwlicGZfZHlucHRyX2Zyb21fbWVtKGRwdHJfbWVtX2J1Ziwgc2l6ZW9mKGRwdHJfbWVtX2J1ZiksIDAsICZhbXA7cHRyKTsKJiM0MzsJcmV0dXJuIHNwaWxsX2ZpbGxfZHlucHRyX3N1YnByb2coJmFtcDtwdHIpOwomIzQzO30KJiM0MzsKIGNoYXIgX2xpY2Vuc2VbXSBTRUMoJiMzNDtsaWNlbnNlJiMzNDspID0gJiMzNDtHUEwmIzM0OzsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTA6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzg2NgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDMzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipQYXRjaCBFdmFsdWF0aW9uICZhbXA7IEZ1enppbmcgU3RyYXRlZ3kqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBwYXRjaCwgd2hpY2ggdG91Y2hlcyBga2VybmVsL2JwZi92ZXJpZmllci5jYCBhbmQgYWRkcyBzZWxmLXRlc3RzIGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYCwgaXMgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4gVGhlIGNvcmUgY2hhbmdlLCB0aGUgcmVwbGFjZW1lbnQgb2YgYGlzX3NwaWxsYWJsZV9yZWd0eXBlYCB3aXRoIGBpc19wb2ludGVyX3JlZ3R5cGVgLCBpcyBzaWduaWZpY2FudC4gRWZmZWN0aXZlbHksIHdlJiMzOTtyZSBicm9hZGVuaW5nIHRoZSB0eXBlcyB0aGF0IGNhbiBiZSBzcGlsbGVkIGFuZCBmaWxsZWQgdG8vZnJvbSB0aGUgc3RhY2sgaW4gdGhlIEJQRiB2ZXJpZmllci4gVGhlIG9sZCBtZXRob2QgaGFkIGEgaGFyZGNvZGVkIGxpc3Qgb2YgcG9pbnRlciB0eXBlcywgd2hpbGUgdGhlIG5ldyBjaGVjayBpcyBicm9hZGVyLCBleHBsaWNpdGx5IGFsbG93aW5nIHR5cGVzIHN1Y2ggYXMgYFBUUl9UT19JTlNOYCwgYFBUUl9UT19UUF9CVUZGRVJgLCBhbmQgYENPTlNUX1BUUl9UT19EWU5QVFJgLCB3aGljaCBpcyBjbGVhcmx5IGRlbW9uc3RyYXRlZCBpbiB0aGUgYWRkZWQgc2VsZnRlc3RzLgoKVGhpcyBoYXMgaW1tZWRpYXRlIGltcGxpY2F0aW9uczogd2UmIzM5O3JlIG1vZGlmeWluZyBmdW5kYW1lbnRhbCBCUEYgdmVyaWZpZXIgbG9naWMuIEFueXRpbWUgeW91IHRvdWNoIHRoZSB2ZXJpZmllciwgeW91IGFyZSB0b3VjaGluZyB0aGUgY29yZSBvZiB0aGUga2VybmVsIGFuZCBtYWtpbmcgaXQgcmVhY2hhYmxlLiBUaGUgZnVuY3Rpb25hbCBjaGFuZ2Ugb3BlbnMgdGhlIGRvb3IgdG8gcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy4gSXQmIzM5O3MgYWxtb3N0IGd1YXJhbnRlZWQgdG8gYmUgd29ydGggdGhlIHRpbWUgaW52ZXN0bWVudC4KCk5vdywgbGV0JiMzOTtzIGlkZW50aWZ5IHRoZSBmb2N1cyBzeW1ib2xzLiBUaGUgcGF0Y2ggc3BlY2lmaWNhbGx5IG1vZGlmaWVkIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zOgotICAgYGlzX3BvaW50ZXJfcmVndHlwZWAgKHRoaXMgaXMgdGhlIG5ldyBvbmUsIHRoZSByZXBsYWNlbWVudCkKLSAgIGBfX2lzX3BvaW50ZXJfdmFsdWVgICh0aGlzIG11c3QgaGF2ZSBiZWVuIGFkanVzdGVkIHRvIHdvcmsgd2l0aCB0aGUgY2hhbmdlcykKLSAgIGBjaGVja19zdGFja193cml0ZV9maXhlZF9vZmZgIChpdCYjMzk7cyBpbiB0aGUgc2FtZSBmaWxlLCBzbyBpdCBuZWVkcyBjaGVja2luZykKCkdpdmVuIHRoZSBwb3RlbnRpYWwgaW1wb3J0YW5jZSwgSSB3YW50IHRvIHNwZWNpZmljYWxseSBsb29rIGF0IGBjaGVja19zdGFja193cml0ZV9maXhlZF9vZmZgLiBJJiMzOTtsbCByZW1pbmQgbXlzZWxmIHRoYXQgaXQmIzM5O3MgYSBzdGF0aWMgZnVuY3Rpb24gd2l0aGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLCB3aGljaCBsaWtlbHkgbWFrZXMgaXQgYW4gaW50ZXJuYWxseSByZWxldmFudCBjb21wb25lbnQgb2YgdGhlIHZlcmlmaWVyLiBOb3csIGxldCYjMzk7cyBzZWUgaG93IGl0JiMzOTtzIGNhbGxlZCBhbmQgd2hlcmUgaXQmIzM5O3MgdXNlZDsgdGhhdCB3aWxsIGhlbHAgdG8gZGV0ZXJtaW5lIG91ciBwb2ludHMgb2YgZW50cnkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTA6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y2hlY2tfc3RhY2tfd3JpdGVfZml4ZWRfb2ZmJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdmVyaWZpZXIuYz0zNDEzPXN0YXRpYyB2b2lkIHNjcnViX3NwZWNpYWxfc2xvdChzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKnN0YXRlLCBpbnQgc3BpKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zNDI3LSAqL1xua2VybmVsL2JwZi92ZXJpZmllci5jOjM0Mjg6c3RhdGljIGludCBjaGVja19zdGFja193cml0ZV9maXhlZF9vZmYoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zNDI5LVx0XHRcdFx0ICAgICAgIC8qIHN0YWNrIGZyYW1lIHdlJiMzOTtyZSB3cml0aW5nIHRvICovXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTM5NjA9c3RhdGljIGludCBjaGVja19zdGFja19yZWFkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTQwMDUtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NDAwNjovKiBjaGVja19zdGFja193cml0ZSBkaXNwYXRjaGVzIHRvIGNoZWNrX3N0YWNrX3dyaXRlX2ZpeGVkX29mZiBvclxua2VybmVsL2JwZi92ZXJpZmllci5jLTQwMDctICogY2hlY2tfc3RhY2tfd3JpdGVfdmFyX29mZi5cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NDAxNT1zdGF0aWMgaW50IGNoZWNrX3N0YWNrX3dyaXRlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTQwMjMtXHRcdG9mZiAmIzQzOz0gcmVnLVx1MDAzZXZhcl9vZmYudmFsdWU7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NDAyNDpcdFx0ZXJyID0gY2hlY2tfc3RhY2tfd3JpdGVfZml4ZWRfb2ZmKGVudiwgc3RhdGUsIG9mZiwgc2l6ZSxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy00MDI1LVx0XHRcdFx0XHRcdCAgdmFsdWVfcmVnbm8sIGluc25faWR4KTtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NDk3Nz1zdGF0aWMgaW50IGNoZWNrX3B0cl9hbGlnbm1lbnQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTAwNi1cdFx0cG9pbnRlcl9kZXNjID0gXCYjMzQ7c3RhY2sgXCYjMzQ7O1xua2VybmVsL2JwZi92ZXJpZmllci5jOjUwMDc6XHRcdC8qIFRoZSBzdGFjayBzcGlsbCB0cmFja2luZyBsb2dpYyBpbiBjaGVja19zdGFja193cml0ZV9maXhlZF9vZmYoKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTUwMDgtXHRcdCAqIGFuZCBjaGVja19zdGFja19yZWFkX2ZpeGVkX29mZigpIHJlbGllcyBvbiBzdGFjayBhY2Nlc3NlcyBiZWluZ1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDEwOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxNTYKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aGUgZXhwZXJ0OgoKKipUcmFjaW5nIERvd24gdGhlIE1lbW9yeSBBY2Nlc3MgQ2hlY2sqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBtZW1vcnkgYWNjZXNzIGNoZWNraW5nIGxvZ2ljLiBUaGUgY2FsbCBzdGFjayByZXZlYWxzIGEgY2xlYXIgcGF0aC4gRmlyc3QsIEkgc2VlIHRoYXQgYGNoZWNrX3N0YWNrX3dyaXRlX2ZpeGVkX29mZmAgaXMgdHJpZ2dlcmVkIGJ5IGBjaGVja19zdGFja193cml0ZWAuIEFuZCwgYGNoZWNrX3N0YWNrX3dyaXRlYCBpdHNlbGYgaXMgaW52b2tlZCBieSBgY2hlY2tfbWVtX2FjY2Vzc2AuIFRoaXMgdGVsbHMgbWUgdGhhdCBgY2hlY2tfbWVtX2FjY2Vzc2AgaXMgdGhlIGhpZ2gtbGV2ZWwgZnVuY3Rpb24gcmVzcG9uc2libGUgZm9yIGluaXRpYXRpbmcgbWVtb3J5IGFjY2VzcyB2YWxpZGF0aW9uLCBhbmQgdGhhdCBzdGFjayB3cml0ZXMsIHNwZWNpZmljYWxseSB0aG9zZSB3aXRoIGEgZml4ZWQgb2Zmc2V0LCBhcmUgYSBjcml0aWNhbCBjb21wb25lbnQgb2YgdGhhdCBwcm9jZXNzLiBOb3csIEkgd2FudCB0byBpbnZlc3RpZ2F0ZSBob3cgdGhlIHN5c3RlbSBkZXRlcm1pbmVzIHdoZXRoZXIgYSB2YWx1ZSByZXByZXNlbnRzIGEgdmFsaWQgcG9pbnRlciwgc28gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBgX19pc19wb2ludGVyX3ZhbHVlYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxMDo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX2lzX3BvaW50ZXJfdmFsdWUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jPTMzMjA9c3RhdGljIGJvb2wgaXNfcG9pbnRlcl9yZWd0eXBlKGVudW0gYnBmX3JlZ190eXBlIHR5cGUpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTMzMjQtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MzMyNTpzdGF0aWMgYm9vbCBfX2lzX3BvaW50ZXJfdmFsdWUoYm9vbCBhbGxvd19wdHJfbGVha3MsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzMyNi1cdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9Mzc0ND1zdGF0aWMgaW50IGNoZWNrX3N0YWNrX3JlYWRfZml4ZWRfb2ZmKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTM4NTUtXHRcdFx0ICovXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6Mzg1NjpcdFx0fSBlbHNlIGlmIChfX2lzX3BvaW50ZXJfdmFsdWUoZW52LVx1MDAzZWFsbG93X3B0cl9sZWFrcywgcmVnKSkge1xua2VybmVsL2JwZi92ZXJpZmllci5jLTM4NTctXHRcdFx0LyogSWYgZHN0X3JlZ25vPT0tMSwgdGhlIGNhbGxlciBpcyBhc2tpbmcgdXMgd2hldGhlclxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz00ODE0PXN0YXRpYyBib29sIGlzX3BvaW50ZXJfdmFsdWUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHJlZ25vKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTQ4MTUte1xua2VybmVsL2JwZi92ZXJpZmllci5jOjQ4MTY6XHRyZXR1cm4gX19pc19wb2ludGVyX3ZhbHVlKGVudi1cdTAwM2VhbGxvd19wdHJfbGVha3MsIHJlZ19zdGF0ZShlbnYsIHJlZ25vKSk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNDgxNy19XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE1NDQ3PXN0YXRpYyBpbnQgaXNfYnJhbmNoX3Rha2VuKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcxLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNTQ1Mi1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNTQ1MzpcdGlmIChfX2lzX3BvaW50ZXJfdmFsdWUoZmFsc2UsIHJlZzEpIHx8IF9faXNfcG9pbnRlcl92YWx1ZShmYWxzZSwgcmVnMikpIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNTQ1NC1cdFx0dTY0IHZhbDtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTU5NDM9c3RhdGljIGludCBjaGVja19jb25kX2ptcF9vcChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjAzMS1cdFx0ICovXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTYwMzI6XHRcdGlmICghX19pc19wb2ludGVyX3ZhbHVlKGZhbHNlLCBkc3RfcmVnKSlcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjAzMy1cdFx0XHRlcnIgPSBtYXJrX2NoYWluX3ByZWNpc2lvbihlbnYsIGluc24tXHUwMDNlZHN0X3JlZyk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTYwMzQtXHRcdGlmIChCUEZfU1JDKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX1ggXHUwMDI2XHUwMDI2ICFlcnIgXHUwMDI2XHUwMDI2XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTYwMzU6XHRcdCAgICAhX19pc19wb2ludGVyX3ZhbHVlKGZhbHNlLCBzcmNfcmVnKSlcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjAzNi1cdFx0XHRlcnIgPSBtYXJrX2NoYWluX3ByZWNpc2lvbihlbnYsIGluc24tXHUwMDNlc3JjX3JlZyk7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE2MTI3LVx0aWYgKCFpc19qbXAzMiBcdTAwMjZcdTAwMjYgQlBGX1NSQyhpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9YIFx1MDAyNlx1MDAyNlxua2VybmVsL2JwZi92ZXJpZmllci5jOjE2MTI4Olx0ICAgIF9faXNfcG9pbnRlcl92YWx1ZShmYWxzZSwgc3JjX3JlZykgXHUwMDI2XHUwMDI2IF9faXNfcG9pbnRlcl92YWx1ZShmYWxzZSwgZHN0X3JlZykgXHUwMDI2XHUwMDI2XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTYxMjktXHQgICAgdHlwZV9tYXlfYmVfbnVsbChzcmNfcmVnLVx1MDAzZXR5cGUpICE9IHR5cGVfbWF5X2JlX251bGwoZHN0X3JlZy1cdTAwM2V0eXBlKSBcdTAwMjZcdTAwMjZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxMDo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MjcxCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZvY3VzaW5nIG9uIFBvaW50ZXIgVmFsdWUgQ2hlY2tzKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaG93IHRoZSBjb2RlIHZhbGlkYXRlcyBwb2ludGVyIHZhbHVlcy4gYGlzX3BvaW50ZXJfdmFsdWVgIHBvcHMgdXAgaW4gcXVpdGUgYSBmZXcgcGxhY2VzIOKAkyBsaWtlIGBjaGVja19hbHVfb3BgIGFuZCBgY2hlY2tfbWVtX2FjY2Vzc2AsIHdoaWNoIG1ha2VzIGl0IGEgY3J1Y2lhbCBmdW5jdGlvbiB0byB1bmRlcnN0YW5kLiBJdCYjMzk7cyB1c2VkIGluIGxvdHMgb2YgY29tbW9uIHNjZW5hcmlvcywgc28gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIGNyeXN0YWwgY2xlYXIgb24gaXRzIGJlaGF2aW91ci4KCkkgbmVlZCB0byBkaWcgaW50byB0aGUga2V5IHN5bWJvbHMgaGVyZS4gSSB0aGluayBgY2hlY2tfc3RhY2tfd3JpdGVfZml4ZWRfb2ZmYCwgYW5kIGBjaGVja19zdGFja19yZWFkX2ZpeGVkX29mZmAgd2lsbCBiZSBnb29kIGZvY3VzIHBvaW50cy4gVGhleSYjMzk7cmUgcmVsYXRlZCwgc28gSSYjMzk7bGwgY2hlY2sgdGhvc2Ugb3V0IHRvZ2V0aGVyIHdpdGggYGNoZWNrX3N0YWNrX3dyaXRlYCwgdG9vLiBQbHVzLCBJIHNob3VsZCBwcm9iYWJseSBhbHNvIGxvb2sgYXQgYGlzX3BvaW50ZXJfcmVndHlwZWAgYW5kIGBfX2lzX3BvaW50ZXJfdmFsdWVgIHRvIGdldCBhIG1vcmUgY29tcGxldGUgcGljdHVyZS4gSSB0aGluayB0aGlzIHdpbGwgc2hvdyB0aGUgY29yZSBsb2dpYyBhbmQgaW50ZXJhY3Rpb24gd2l0aCB0aGUgc3RhY2suIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBncmFzcCBvbiBob3cgcG9pbnRlciB2YWxpZGl0eSBpcyBkZXRlcm1pbmVkIHdpdGhpbiB0aGlzIHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxMTowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjaGVja19zdGFja193cml0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdmVyaWZpZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MzQxMz1zdGF0aWMgdm9pZCBzY3J1Yl9zcGVjaWFsX3Nsb3Qoc3RydWN0IGJwZl9mdW5jX3N0YXRlICpzdGF0ZSwgaW50IHNwaSlcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzQyNy0gKi9cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzozNDI4OnN0YXRpYyBpbnQgY2hlY2tfc3RhY2tfd3JpdGVfZml4ZWRfb2ZmKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzQyOS1cdFx0XHRcdCAgICAgICAvKiBzdGFjayBmcmFtZSB3ZSYjMzk7cmUgd3JpdGluZyB0byAqL1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zNTU4LSAqL1xua2VybmVsL2JwZi92ZXJpZmllci5jOjM1NTk6c3RhdGljIGludCBjaGVja19zdGFja193cml0ZV92YXJfb2ZmKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzU2MC1cdFx0XHRcdCAgICAgLyogZnVuYyB3aGVyZSByZWdpc3RlciBwb2ludHMgdG8gKi9cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9Mzk2MD1zdGF0aWMgaW50IGNoZWNrX3N0YWNrX3JlYWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNDAwNS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo0MDA2Oi8qIGNoZWNrX3N0YWNrX3dyaXRlIGRpc3BhdGNoZXMgdG8gY2hlY2tfc3RhY2tfd3JpdGVfZml4ZWRfb2ZmIG9yXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NDAwNzogKiBjaGVja19zdGFja193cml0ZV92YXJfb2ZmLlxua2VybmVsL2JwZi92ZXJpZmllci5jLTQwMDgtICpcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNDAxNC0gKi9cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo0MDE1OnN0YXRpYyBpbnQgY2hlY2tfc3RhY2tfd3JpdGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy00MDE2LVx0XHRcdCAgICAgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZywgaW50IG9mZiwgaW50IHNpemUsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTQwMjMtXHRcdG9mZiAmIzQzOz0gcmVnLVx1MDAzZXZhcl9vZmYudmFsdWU7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NDAyNDpcdFx0ZXJyID0gY2hlY2tfc3RhY2tfd3JpdGVfZml4ZWRfb2ZmKGVudiwgc3RhdGUsIG9mZiwgc2l6ZSxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy00MDI1LVx0XHRcdFx0XHRcdCAgdmFsdWVfcmVnbm8sIGluc25faWR4KTtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNDAyOS1cdFx0ICovXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NDAzMDpcdFx0ZXJyID0gY2hlY2tfc3RhY2tfd3JpdGVfdmFyX29mZihlbnYsIHN0YXRlLFxua2VybmVsL2JwZi92ZXJpZmllci5jLTQwMzEtXHRcdFx0XHRcdFx0cmVnLCBvZmYsIHNpemUsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTQ5Nzc9c3RhdGljIGludCBjaGVja19wdHJfYWxpZ25tZW50KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTUwMDYtXHRcdHBvaW50ZXJfZGVzYyA9IFwmIzM0O3N0YWNrIFwmIzM0Oztcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo1MDA3Olx0XHQvKiBUaGUgc3RhY2sgc3BpbGwgdHJhY2tpbmcgbG9naWMgaW4gY2hlY2tfc3RhY2tfd3JpdGVfZml4ZWRfb2ZmKClcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy01MDA4LVx0XHQgKiBhbmQgY2hlY2tfc3RhY2tfcmVhZF9maXhlZF9vZmYoKSByZWxpZXMgb24gc3RhY2sgYWNjZXNzZXMgYmVpbmdcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NjA3OT1zdGF0aWMgaW50IGNoZWNrX21lbV9hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGluc25faWR4LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCBhcmdub190IGFyZ25vLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02MjUwLVx0XHRlbHNlXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjI1MTpcdFx0XHRlcnIgPSBjaGVja19zdGFja193cml0ZShlbnYsIHJlZywgb2ZmLCBzaXplLFxua2VybmVsL2JwZi92ZXJpZmllci5jLTYyNTItXHRcdFx0XHRcdFx0dmFsdWVfcmVnbm8sIGluc25faWR4KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxMTowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NDk2CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBDb2RlIE1vZGlmaWNhdGlvbioqCgpPa2F5LCBzbyB0aGUgcGF0Y2ggaXMgdHdlYWtpbmcgYGNoZWNrX3N0YWNrX3dyaXRlX2ZpeGVkX29mZmAgYW5kIGBfX2lzX3BvaW50ZXJfdmFsdWVgLiBSaWdodCwgc2VlbXMgbG9naWNhbC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVwZGF0ZSBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjb2RlJiMzOTtzIGRhdGEgc3RydWN0dXJlcyBhY2NvcmRpbmdseS4gSSYjMzk7bGwgbmVlZCB0byBpbmNvcnBvcmF0ZSB0aG9zZSBmdW5jdGlvbnMsIGFsb25nIHdpdGggYGlzX3BvaW50ZXJfcmVndHlwZWAgYW5kIGFsc28gYGNoZWNrX3N0YWNrX3JlYWRfZml4ZWRfb2ZmYCAoc2luY2UgaXQgcmVhZHMgc3BpbGxlZCBwb2ludGVycywgd2hpY2ggaXMga2V5KSwgaW50byBteSBgRm9jdXNTeW1ib2xzYCBrbm93bGVkZ2UgYmFzZS4gVGhhdCB3aWxsIGFsbG93IG1lIHRvIGFjY3VyYXRlbHkgdHJhY2sgdGhpcyBjb2RlIHBhdGguIEkgd2lsbCBuZWVkIHRvIGJlIHZlcnkgdGhvcm91Z2guCgpOb3csIGxldCYjMzk7cyBjb25zaWRlciB0aGUgYnVpbGQgZW52aXJvbm1lbnQuIGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIHN0YW5kYXJkLCBubyBzdXJwcmlzZXMgdGhlcmUuIEhvd2V2ZXIsIEkgd2FudCB0byBjb25maXJtIHdoZXRoZXIgdGhlcmUgYXJlICphbnkqIG5ldywgc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgYXNzb2NpYXRlZCB3aXRoIHRoZXNlIGNoYW5nZXMuIFRoZSBjb2RlIGlzIGxvY2F0ZWQgd2l0aGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLCBzbyBJIHNob3VsZCBpbnNwZWN0IHRoYXQgYXJlYSBjbG9zZWx5IGZvciBjb25kaXRpb25hbCBjb21waWxhdGlvbiBkaXJlY3RpdmVzIHRoYXQgcmVsYXRlIHRvIHRoaXMgcGF0Y2guIEkgbmVlZCB0byBrbm93IHdoaWNoIGNvbmZpZ3VyYXRpb25zIHdvdWxkIGJlIG5lY2Vzc2FyeSB0byBpbmNsdWRlIHRoaXMsIG9yIGFsdGVyIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxMTowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfQlBGJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdmVyaWZpZXIuYz00Mzk2PUJURl9JRChzdHJ1Y3QsIGNncm91cClcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy00Mzk3LSNlbmRpZlxua2VybmVsL2JwZi92ZXJpZmllci5jOjQzOTg6I2lmZGVmIENPTkZJR19CUEZfSklUXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNDM5OS1CVEZfSUQoc3RydWN0LCBicGZfY3B1bWFzaylcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTExMjg9QlRGX0lEX1VOVVNFRFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMTI5LSNlbmRpZlxua2VybmVsL2JwZi92ZXJpZmllci5jOjExMTMwOiNpZmRlZiBDT05GSUdfQlBGX0VWRU5UU1xua2VybmVsL2JwZi92ZXJpZmllci5jLTExMTMxLUJURl9JRChmdW5jLCBicGZfc2Vzc2lvbl9jb29raWUpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTExMTQwPUJURl9JRChmdW5jLCBicGZfaXRlcl9udW1fZGVzdHJveSlcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTE0MTojaWZkZWYgQ09ORklHX0JQRl9MU01cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTE0Mi1CVEZfSUQoZnVuYywgYnBmX3NldF9kZW50cnlfeGF0dHIpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTExMTU5PUJURl9JRChmdW5jLCBicGZfYXJlbmFfcmVzZXJ2ZV9wYWdlcylcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTE2MDojaWZkZWYgQ09ORklHX0JQRl9FVkVOVFNcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTE2MS1CVEZfSUQoZnVuYywgYnBmX3Nlc3Npb25faXNfcmV0dXJuKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxMTowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MjcxCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogODEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBnb2luZyBvbiBoZXJlLgoKKipBbmFseXppbmcgUG90ZW50aWFsIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzIGluIEJQRiBWZXJpZmllciBUZXN0cyoqCgpSaWdodCwgc28gbm8gaW1tZWRpYXRlIHJlZCBmbGFncywgbm8gdW51c3VhbCBjb25maWd1cmF0aW9ucyBzcHJpbmcgdG8gbWluZC4gYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgYSBnaXZlbiwgd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgQlBGIGhlcmUuIEJ1dCwgYmVmb3JlIEkgYXNzdW1lIGV2ZXJ5dGhpbmcgaXMgaHVua3ktZG9yeSwgSSBzaG91bGQgdmVyaWZ5LiBJJiMzOTttIGdvaW5nIHRvIHRha2UgYSBsb29rIGF0IGEgY291cGxlIG9mIHRoZSB0ZXN0IHByb2dyYW1zIHRvIGJlIHN1cmUuIFNwZWNpZmljYWxseSwgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9nb3RveC5jYCBhbmQgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9zcGlsbF9maWxsLmNgLiBUaGVzZSB0ZXN0cyBhcmUga25vd24gdG8gaGl0IHNvbWUgaW50ZXJlc3RpbmcgYXJlYXMgb2YgdGhlIHZlcmlmaWVyLCBzbyB0aGV5JiMzOTtyZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgc3VidGxlIGRlcGVuZGVuY2llcyB0aGF0IGFyZW4mIzM5O3QgaW1tZWRpYXRlbHkgb2J2aW91cyBmcm9tIHRoZSBjb25maWcgbGlzdC4gSSBuZWVkIHRvIHNjYW4gdGhvc2Ugc291cmNlIGZpbGVzLCBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzIG9yIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIHRoYXQgd291bGQgcmVxdWlyZSBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiBmbGFncyB0byBiZSBlbmFibGVkIGZvciB0aGVtIHRvIGJ1aWxkIGFuZCBydW4gY29ycmVjdGx5LiBOb3RoaW5nIHdvcnNlIHRoYW4gYSBzaWxlbnQgZmFpbHVyZSBkdWUgdG8gYSBtaXNzaW5nIGNvbmZpZyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTE6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7dG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2dvdG94LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxMTowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NjQ5CgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiAmIzM0O05vIGNvbmZpZ3MsJiMzNDsgc3VtbWFyaXplZCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhc3N1bWluZyBhIGxldmVsIG9mIGV4cGVydGlzZToKCioqVGhlIEFic2VuY2Ugb2YgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCBzbyB0aGUgY29yZSBvZiB0aGlzIHNpdHVhdGlvbiBpcyBjbGVhciDigJMgb3IgcmF0aGVyLCB0aGUgbGFjayBvZiBjbGFyaXR5ICppcyogdGhlIGNvcmUuICYjMzQ7Tm8gY29uZmlncy4mIzM0OyBUaGF0JiMzOTtzIHRoZSBzdGFydGluZyBwb2ludC4gTm8gcHJlLXNldCBwYXJhbWV0ZXJzLCBubyBkZWZpbmVkIGluaXRpYWwgc3RhdGVzLCBubyBlc3RhYmxpc2hlZCBjb25maWd1cmF0aW9ucyBvZiBhbnkga2luZC4gVGhpcyBtZWFucyBJJiMzOTttIGRlYWxpbmcgd2l0aCBhIHN5c3RlbSB0aGF0JiMzOTtzIGVpdGhlciBmdW5kYW1lbnRhbGx5IGJsYW5rLCBjb21wbGV0ZWx5IHVuaW5pdGlhbGl6ZWQsIG9yIHBlcmhhcHMgZGVzaWduZWQgdG8gYmUgZHluYW1pY2FsbHkgY29uZmlndXJlZCBvbiB0aGUgZmx5LiBUaGlzIGxhY2sgb2YgcHJlLWV4aXN0aW5nIHNldHRpbmdzIGlzIHNpZ25pZmljYW50LiBJdCBpbXBsaWVzIGEgZGVncmVlIG9mIGZsZXhpYmlsaXR5LCBwZXJoYXBzLCBidXQgYWxzbyBhIHBvdGVudGlhbCBmb3Igc2lnbmlmaWNhbnQgYW1iaWd1aXR5LiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IEkmIzM5O20gd29ya2luZyAqd2l0aCogcmF0aGVyIHRoYW4gKmFnYWluc3QuKgoKTXkgZXhwZXJ0aXNlIHRlbGxzIG1lIHRoYXQgdGhpcyBjb3VsZCBtZWFuIGEgbXVsdGl0dWRlIG9mIHRoaW5ncy4gSXMgdGhpcyBhIGRlbGliZXJhdGVseSBtaW5pbWFsaXN0IGRlc2lnbiwgYSBzYW5kYm94IGVudmlyb25tZW50LCBvciBhIGZsYXdlZCBkZXBsb3ltZW50PyBBcmUgd2UgdGFsa2luZyBhYm91dCBhIGNvbXBsZXRlIGxhY2sgb2YgYSBjb25maWd1cmF0aW9uIGZpbGUsIG9yIGlzIHRoZSBjb25maWd1cmF0aW9uIGhhbmRsZWQgaW50ZXJuYWxseSwgcGVyaGFwcyB0aHJvdWdoIGFuIEFQSSBvciBhIGR5bmFtaWMgcHJvY2Vzcz8gVGhlIGltcGxpY2F0aW9ucyBoZXJlIGFyZSB2YXN0IGFuZCBjYW4gY2hhbmdlIHRoZSBkaXJlY3Rpb24gb2YgYW5hbHlzaXMgYW5kIHByb2JsZW0tc29sdmluZy4gVGhpcyBjb3VsZCBtYWtlIGl0IGEgdmVyeSBpbnRlcmVzdGluZyBwcm9ibGVtIHRvIHRhY2tsZS4KClRoaXMgaXMgYWxsIGFib3V0IGNvbnRleHQ7ICYjMzQ7Tm8gY29uZmlncyYjMzQ7IGRvZXNuJiMzOTt0IG1lYW4gYW55dGhpbmcgaW4gaXNvbGF0aW9uLiBJIG5lZWQgbW9yZSBpbmZvcm1hdGlvbiB0byBiZWdpbiB0byBpbnRlcnByZXQgd2hhdCB0aGlzIG1lYW5zIGluIHByYWN0aWNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAxMTowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR18mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDt0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfc3BpbGxfZmlsbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTE6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODk5MQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE5NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBCUEYgVmVyaWZpZXIgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBzcGVjaWZpY2FsbHkgZXhwYW5kaW5nIHRoZSBCUEYgdmVyaWZpZXImIzM5O3MgY2FwYWJpbGl0eSB0byBoYW5kbGUgbW9yZSBwb2ludGVyIHR5cGVzIGR1cmluZyBzcGlsbGluZyBhbmQgZmlsbGluZyBvcGVyYXRpb25zLiBHb29kLiBJdCYjMzk7cyBiZWVuIGZsYWdnZWQgYXMgV29ydGhGdXp6aW5nLCB3aGljaCBpcyBhIGdvb2QgaW5kaWNhdG9yIHRoYXQgd2Ugc2hvdWxkIGdpdmUgaXQgYSB0aG9yb3VnaCBnb2luZy1vdmVyLgoKVGhlIGtleSBmdW5jdGlvbnMgdG8gY29uY2VudHJhdGUgb24gZHVyaW5nIGZ1enppbmcgYXJlIGBjaGVja19zdGFja193cml0ZV9maXhlZF9vZmZgLCBgY2hlY2tfc3RhY2tfcmVhZF9maXhlZF9vZmZgLCBgX19pc19wb2ludGVyX3ZhbHVlYCwgYW5kIGBpc19wb2ludGVyX3JlZ3R5cGVgLiBUaGVzZSBhcmUgY2xlYXJseSB0aGUgYXJlYXMgd2hlcmUgdGhlIG5ldyBwb2ludGVyIGhhbmRsaW5nIGxvZ2ljIGlzIGltcGxlbWVudGVkIG9yIG1vc3QgaW1wYWN0ZnVsLiBHaXZlbiBJJiMzOTttIGFuIGV4cGVydCBpbiB0aGlzIGZpZWxkLCBJJiMzOTtsbCBuZWVkIHRvIGZvY3VzIG15IGF0dGVudGlvbiBvbiBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gYW5kIHdoZXRoZXIgdGhlcmUgYXJlIGFueSB1bmV4cGVjdGVkIHNpZGUgZWZmZWN0cy4KClJlZ2FyZGluZyBjb25maWd1cmF0aW9uLCBJIHdvbiYjMzk7dCBsaXN0IGBCUEZfU1lTQ0FMTGAgYmVjYXVzZSBpdCYjMzk7cyBzdGFuZGFyZCBhbmQgbm90IHNwZWNpZmljIHRvIHRoaXMgY2hhbmdlLiBJJiMzOTtsbCBuZWVkIHRvIHJlLWV2YWx1YXRlIHRoZSB0d28gZnVuY3Rpb25zIHByZXZpb3VzbHkgbWVudGlvbmVkLCBgaXNfcG9pbnRlcl9yZWd0eXBlYCBhbmQgYF9faXNfcG9pbnRlcl92YWx1ZWAsIHRvIHNlZSB3aGF0IGtpbmQgb2YgY29uZmlndXJhdGlvbiBjaGFuZ2VzIHdpbGwgYmUgbmVjZXNzYXJ5IHRvIGVuc3VyZSB0aGUgdGVzdHMgaGF2ZSBhZGVxdWF0ZSBjb3ZlcmFnZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTE6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXNfcG9pbnRlcl9yZWd0eXBlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdmVyaWZpZXIuYz0zMzE1PXN0YXRpYyB1NjQgcmVnX2NvbnN0X3ZhbHVlKHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsIGJvb2wgc3VicmVnMzIpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTMzMTktXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MzMyMDpzdGF0aWMgYm9vbCBpc19wb2ludGVyX3JlZ3R5cGUoZW51bSBicGZfcmVnX3R5cGUgdHlwZSlcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zMzIxLXtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MzMyNT1zdGF0aWMgYm9vbCBfX2lzX3BvaW50ZXJfdmFsdWUoYm9vbCBhbGxvd19wdHJfbGVha3MsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTMzMzAtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MzMzMTpcdHJldHVybiBpc19wb2ludGVyX3JlZ3R5cGUocmVnLVx1MDAzZXR5cGUpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTMzMzItfVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0zNDI4PXN0YXRpYyBpbnQgY2hlY2tfc3RhY2tfd3JpdGVfZml4ZWRfb2ZmKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTM0NTUtXHRpZiAoIWVudi1cdTAwM2VieXBhc3Nfc3BlY192NCkge1xua2VybmVsL2JwZi92ZXJpZmllci5jOjM0NTY6XHRcdGJvb2wgc2FuaXRpemUgPSByZWcgXHUwMDI2XHUwMDI2IGlzX3BvaW50ZXJfcmVndHlwZShyZWctXHUwMDNldHlwZSk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzQ1Ny1cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzQ5Ni1cdFx0c2F2ZV9yZWdpc3Rlcl9zdGF0ZShlbnYsIHN0YXRlLCBzcGksIHRtcF9yZWcsIHNpemUpO1xua2VybmVsL2JwZi92ZXJpZmllci5jOjM0OTc6XHR9IGVsc2UgaWYgKHJlZyBcdTAwMjZcdTAwMjYgaXNfcG9pbnRlcl9yZWd0eXBlKHJlZy1cdTAwM2V0eXBlKSkge1xua2VybmVsL2JwZi92ZXJpZmllci5jLTM0OTgtXHRcdC8qIHJlZ2lzdGVyIGNvbnRhaW5pbmcgcG9pbnRlciBpcyBiZWluZyBzcGlsbGVkIGludG8gc3RhY2sgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMTE6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTg5NwoJCQkJCQkJb3V0cHV0OiAxMjgKCQkJCQkJCXRob3VnaHRzOiA3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGNoYW5nZXM6CgoqKkFuYWx5emluZyB0aGUgUmVnaXN0ZXIgVHlwZSBNb2RpZmljYXRpb24qKgoKQWxyaWdodCwgc28gdGhlIGNvcmUgb2YgdGhpcyBjaGFuZ2UgaXMgcHJldHR5IGNsZWFuIGFuZCBkaXJlY3QuIFdlJiMzOTtyZSBnZXR0aW5nIHJpZCBvZiB0aGUgYGlzX3NwaWxsYWJsZV9yZWd0eXBlYCBjaGVjaywgd2hpY2ggc2VlbXMgdG8gaGF2ZSBiZWVuIGEgYml0IG92ZXJseSByZXN0cmljdGl2ZS4gVGhlIHJlcGxhY2VtZW50LCBgaXNfcG9pbnRlcl9yZWd0eXBlYCwgYm9pbHMgZG93biB0byBhIHNpbXBsZXIgY2hlY2s6IGVuc3VyaW5nIHRoZSByZWdpc3RlciB0eXBlIGlzbiYjMzk7dCBhIGBTQ0FMQVJfVkFMVUVgIG9yIGBOT1RfSU5JVGAuIFRoYXQmIzM5O3MgYSBnb29kIHNpbXBsaWZpY2F0aW9uLCBmdW5jdGlvbmFsbHkgZXF1aXZhbGVudCBidXQgbW9yZSBlbGVnYW50LgoKVGhlIHJlYWwgaW1wbGljYXRpb24gaGVyZSBpcyB0aGUgcmVsYXhhdGlvbiBvZiBjb25zdHJhaW50cyBvbiBzcGlsbGluZyBwb2ludGVyIHR5cGVzLiBCZWZvcmUsIHRoZXJlIHdhcyBwcm9iYWJseSBhIGhhcmRjb2RlZCBsaXN0IG9yIGNvbXBsZXggbG9naWMgZGV0ZXJtaW5pbmcgd2hhdCBwb2ludGVycyB3ZXJlIHNwaWxsYWJsZS4gTm93LCBhbnkgcG9pbnRlciB0eXBlIHRoYXQgKmlzbiYjMzk7dCogYSBwcmltaXRpdmUgc2NhbGFyIG9yIHVuaW5pdGlhbGl6ZWQgY2FuIGJlIHNwaWxsZWQgdG8gdGhlIHN0YWNrLiBUaGF0JiMzOTtzIGEgZGVmaW5pdGUgaW1wcm92ZW1lbnQgaW4gZmxleGliaWxpdHkgYW5kIHNob3VsZCBlbGltaW5hdGUgc29tZSBwb3RlbnRpYWwgaGVhZGFjaGVzIGFuZCBpbmVmZmljaWVuY2llcy4gVGhpcyBjaGFuZ2UgaGFzIHRoZSBwb3RlbnRpYWwgdG8gZWxpbWluYXRlIHNvbWUgb2YgdGhlIHByZXZpb3VzIHJlZ2lzdGVyIGFsbG9jYXRpb24gaXNzdWVzLgoKSeKAmW0gb24gYm9hcmQgd2l0aCB0aGlzIGFwcHJvYWNoLiBJdCBtYWtlcyBzZW5zZSwgYW5kIEkgY2FuIGFwcHJlY2lhdGUgdGhlIGRpcmVjdG5lc3Mgb2YgdGhlIHVwZGF0ZWQgbG9naWMuIEl0JiMzOTtzIHRpbWUgdG8gdGVzdCB0aGlzIGFuZCB2ZXJpZnkgdGhlIHJlc3VsdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDExOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjaGVja19zdGFja193cml0ZV9maXhlZF9vZmYmIzM0OywKICAgICYjMzQ7Y2hlY2tfc3RhY2tfcmVhZF9maXhlZF9vZmYmIzM0OywKICAgICYjMzQ7X19pc19wb2ludGVyX3ZhbHVlJiMzNDssCiAgICAmIzM0O2lzX3BvaW50ZXJfcmVndHlwZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyIHRvIGFsbG93IHNwaWxsaW5nIGFuZCBmaWxsaW5nIG9mIGFsbCBwb2ludGVyIHR5cGVzIHRvL2Zyb20gdGhlIHN0YWNrLCByZW1vdmluZyBhIGhhcmRjb2RlZCBsaXN0IG9mIGFsbG93ZWQgcG9pbnRlciB0eXBlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIEJQRiB2ZXJpZmllciBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjaGVja19zdGFja193cml0ZV9maXhlZF9vZmYmIzM0OywKICAgICYjMzQ7Y2hlY2tfc3RhY2tfcmVhZF9maXhlZF9vZmYmIzM0OywKICAgICYjMzQ7X19pc19wb2ludGVyX3ZhbHVlJiMzNDssCiAgICAmIzM0O2lzX3BvaW50ZXJfcmVndHlwZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyIHRvIGFsbG93IHNwaWxsaW5nIGFuZCBmaWxsaW5nIG9mIGFsbCBwb2ludGVyIHR5cGVzIHRvL2Zyb20gdGhlIHN0YWNrLCByZW1vdmluZyBhIGhhcmRjb2RlZCBsaXN0IG9mIGFsbG93ZWQgcG9pbnRlciB0eXBlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIEJQRiB2ZXJpZmllciBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDEwOjU5OjQ4LjQ5ODAzMjMxNFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM1NzYxNTEwNzUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImNoZWNrX3N0YWNrX3dyaXRlX2ZpeGVkX29mZlwiLFxuICAgIFwiY2hlY2tfc3RhY2tfcmVhZF9maXhlZF9vZmZcIixcbiAgICBcIl9faXNfcG9pbnRlcl92YWx1ZVwiLFxuICAgIFwiaXNfcG9pbnRlcl9yZWd0eXBlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciB0byBhbGxvdyBzcGlsbGluZyBhbmQgZmlsbGluZyBvZiBhbGwgcG9pbnRlciB0eXBlcyB0by9mcm9tIHRoZSBzdGFjaywgcmVtb3ZpbmcgYSBoYXJkY29kZWQgbGlzdCBvZiBhbGxvd2VkIHBvaW50ZXIgdHlwZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBCUEYgdmVyaWZpZXIgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDEwOjU5OjQ4LjQ5ODA0MDAzNFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjM0MzM1MDk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZGYzY2Q5M2RlY2ExZDg1YzRlNWJiMGQzNWFjYWU4NTNkMjIzOTdhNlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIEp1bCA4IDEwOjU5OjQ1IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xcbmluZGV4IDMxOTNiNDczNzYyYmE0Li41MWY3OTY1ZDQyZTMyNCAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcXG4rKysgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcXG5AQCAtMzMwNCwzNCArMzMwNCw2IEBAIHN0YXRpYyBpbnQgbWFya19jaGFpbl9wcmVjaXNpb25fYmF0Y2goc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4gXFx0cmV0dXJuIGJwZl9tYXJrX2NoYWluX3ByZWNpc2lvbihlbnYsIHN0YXJ0aW5nX3N0YXRlLCAtMSwgTlVMTCk7XFxuIH1cXG4gXFxuLXN0YXRpYyBib29sIGlzX3NwaWxsYWJsZV9yZWd0eXBlKGVudW0gYnBmX3JlZ190eXBlIHR5cGUpXFxuLXtcXG4tXFx0c3dpdGNoIChiYXNlX3R5cGUodHlwZSkpIHtcXG4tXFx0Y2FzZSBQVFJfVE9fTUFQX1ZBTFVFOlxcbi1cXHRjYXNlIFBUUl9UT19TVEFDSzpcXG4tXFx0Y2FzZSBQVFJfVE9fQ1RYOlxcbi1cXHRjYXNlIFBUUl9UT19QQUNLRVQ6XFxuLVxcdGNhc2UgUFRSX1RPX1BBQ0tFVF9NRVRBOlxcbi1cXHRjYXNlIFBUUl9UT19QQUNLRVRfRU5EOlxcbi1cXHRjYXNlIFBUUl9UT19GTE9XX0tFWVM6XFxuLVxcdGNhc2UgQ09OU1RfUFRSX1RPX01BUDpcXG4tXFx0Y2FzZSBQVFJfVE9fU09DS0VUOlxcbi1cXHRjYXNlIFBUUl9UT19TT0NLX0NPTU1PTjpcXG4tXFx0Y2FzZSBQVFJfVE9fVENQX1NPQ0s6XFxuLVxcdGNhc2UgUFRSX1RPX1hEUF9TT0NLOlxcbi1cXHRjYXNlIFBUUl9UT19CVEZfSUQ6XFxuLVxcdGNhc2UgUFRSX1RPX0JVRjpcXG4tXFx0Y2FzZSBQVFJfVE9fTUVNOlxcbi1cXHRjYXNlIFBUUl9UT19GVU5DOlxcbi1cXHRjYXNlIFBUUl9UT19NQVBfS0VZOlxcbi1cXHRjYXNlIFBUUl9UT19BUkVOQTpcXG4tXFx0XFx0cmV0dXJuIHRydWU7XFxuLVxcdGRlZmF1bHQ6XFxuLVxcdFxcdHJldHVybiBmYWxzZTtcXG4tXFx0fVxcbi19XFxuLVxcbi1cXG4gLyogY2hlY2sgaWYgcmVnaXN0ZXIgaXMgYSBjb25zdGFudCBzY2FsYXIgdmFsdWUgKi9cXG4gc3RhdGljIGJvb2wgaXNfcmVnX2NvbnN0KHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsIGJvb2wgc3VicmVnMzIpXFxuIHtcXG5AQCAtMzM0NSwxMyArMzMxNywxOCBAQCBzdGF0aWMgdTY0IHJlZ19jb25zdF92YWx1ZShzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCBib29sIHN1YnJlZzMyKVxcbiBcXHRyZXR1cm4gc3VicmVnMzIgPyB0bnVtX3N1YnJlZyhyZWctXFx1MDAzZXZhcl9vZmYpLnZhbHVlIDogcmVnLVxcdTAwM2V2YXJfb2ZmLnZhbHVlO1xcbiB9XFxuIFxcbitzdGF0aWMgYm9vbCBpc19wb2ludGVyX3JlZ3R5cGUoZW51bSBicGZfcmVnX3R5cGUgdHlwZSlcXG4re1xcbitcXHRyZXR1cm4gdHlwZSAhPSBTQ0FMQVJfVkFMVUUgXFx1MDAyNlxcdTAwMjYgdHlwZSAhPSBOT1RfSU5JVDtcXG4rfVxcbitcXG4gc3RhdGljIGJvb2wgX19pc19wb2ludGVyX3ZhbHVlKGJvb2wgYWxsb3dfcHRyX2xlYWtzLFxcbiBcXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcXG4ge1xcbiBcXHRpZiAoYWxsb3dfcHRyX2xlYWtzKVxcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcbi1cXHRyZXR1cm4gcmVnLVxcdTAwM2V0eXBlICE9IFNDQUxBUl9WQUxVRTtcXG4rXFx0cmV0dXJuIGlzX3BvaW50ZXJfcmVndHlwZShyZWctXFx1MDAzZXR5cGUpO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBjbGVhcl9zY2FsYXJfaWQoc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZylcXG5AQCAtMzQ3Niw3ICszNDUzLDcgQEAgc3RhdGljIGludCBjaGVja19zdGFja193cml0ZV9maXhlZF9vZmYoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4gXFx0aWYgKHZhbHVlX3JlZ25vIFxcdTAwM2U9IDApXFxuIFxcdFxcdHJlZyA9IFxcdTAwMjZjdXItXFx1MDAzZXJlZ3NbdmFsdWVfcmVnbm9dO1xcbiBcXHRpZiAoIWVudi1cXHUwMDNlYnlwYXNzX3NwZWNfdjQpIHtcXG4tXFx0XFx0Ym9vbCBzYW5pdGl6ZSA9IHJlZyBcXHUwMDI2XFx1MDAyNiBpc19zcGlsbGFibGVfcmVndHlwZShyZWctXFx1MDAzZXR5cGUpO1xcbitcXHRcXHRib29sIHNhbml0aXplID0gcmVnIFxcdTAwMjZcXHUwMDI2IGlzX3BvaW50ZXJfcmVndHlwZShyZWctXFx1MDAzZXR5cGUpO1xcbiBcXG4gXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHNpemU7IGkrKykge1xcbiBcXHRcXHRcXHR1OCB0eXBlID0gc3RhdGUtXFx1MDAzZXN0YWNrW3NwaV0uc2xvdF90eXBlWyhzbG90IC0gaSkgJVxcbkBAIC0zNTE3LDcgKzM0OTQsNyBAQCBzdGF0aWMgaW50IGNoZWNrX3N0YWNrX3dyaXRlX2ZpeGVkX29mZihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbiBcXHRcXHRfX21hcmtfcmVnX2tub3duKHRtcF9yZWcsIGluc24tXFx1MDAzZWltbSk7XFxuIFxcdFxcdHRtcF9yZWctXFx1MDAzZXR5cGUgPSBTQ0FMQVJfVkFMVUU7XFxuIFxcdFxcdHNhdmVfcmVnaXN0ZXJfc3RhdGUoZW52LCBzdGF0ZSwgc3BpLCB0bXBfcmVnLCBzaXplKTtcXG4tXFx0fSBlbHNlIGlmIChyZWcgXFx1MDAyNlxcdTAwMjYgaXNfc3BpbGxhYmxlX3JlZ3R5cGUocmVnLVxcdTAwM2V0eXBlKSkge1xcbitcXHR9IGVsc2UgaWYgKHJlZyBcXHUwMDI2XFx1MDAyNiBpc19wb2ludGVyX3JlZ3R5cGUocmVnLVxcdTAwM2V0eXBlKSkge1xcbiBcXHRcXHQvKiByZWdpc3RlciBjb250YWluaW5nIHBvaW50ZXIgaXMgYmVpbmcgc3BpbGxlZCBpbnRvIHN0YWNrICovXFxuIFxcdFxcdGlmIChzaXplICE9IEJQRl9SRUdfU0laRSkge1xcbiBcXHRcXHRcXHR2ZXJib3NlX2xpbmZvKGVudiwgaW5zbl9pZHgsIFxcXCI7IFxcXCIpO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfZ290b3guYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9nb3RveC5jXFxuaW5kZXggZjg4YWE0Y2RiMjc5MmMuLjViMThjOWEyNzcxN2JjIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9nb3RveC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2dvdG94LmNcXG5AQCAtMzg0LDYgKzM4NCwzMSBAQCBqdDBfJT06XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiBcXHQ6IF9fY2xvYmJlcl9hbGwpO1xcbiB9XFxuIFxcbisvKiBjaGVjayB2YWxpZCBzcGlsbC9maWxsLCBwdHIgdG8gaW5zbiAqL1xcbitTRUMoXFxcInNvY2tldFxcXCIpXFxuK19fc3VjY2Vzc1xcbitfX25ha2VkIHZvaWQgc3BpbGxfZmlsbF9wdHJfdG9faW5zbih2b2lkKVxcbit7XFxuK1xcdGFzbSB2b2xhdGlsZSAoXFxuK1xcdFxcXCIucHVzaHNlY3Rpb24gLmp1bXB0YWJsZXMsXFxcXFxcXCJcXFxcXFxcIixAcHJvZ2JpdHM7XFxcIlxcbitcXHRcXFwianQwXyU9OlxcXCJcXG4rXFx0XFxcIi5xdWFkIHJldDBfJT0gLSBzb2NrZXQ7XFxcIlxcbitcXHRcXFwiLnNpemUganQwXyU9LCA4O1xcXCJcXG4rXFx0XFxcIi5nbG9iYWwganQwXyU9O1xcXCJcXG4rXFx0XFxcIi5wb3BzZWN0aW9uO1xcXCJcXG4rXFx0XFxcInIwID0ganQwXyU9IGxsO1xcXCJcXG4rXFx0XFxcInIwID0gKih1NjQgKikocjAgKyAwKTtcXFwiXFxuK1xcdFxcXCIqKHU2NCAqKShyMTAgLSA4KSA9IHIwO1xcXCJcXG4rXFx0XFxcInIwID0gKih1NjQgKikocjEwIC0gOCk7XFxcIlxcbitcXHRcXFwiLjhieXRlICVbZ290b3hfcjBdO1xcXCJcXG4rXFx0XFxcInJldDBfJT06XFxcIlxcbitcXHRcXFwicjAgPSAwO1xcXCJcXG4rXFx0XFxcImV4aXQ7XFxcIlxcbitcXHQ6XFxuK1xcdDogX19pbW1faW5zbihnb3RveF9yMCwgQlBGX1JBV19JTlNOKEJQRl9KTVAgfCBCUEZfSkEgfCBCUEZfWCwgQlBGX1JFR18wLCAwLCAwLCAwKSlcXG4rXFx0OiBfX2Nsb2JiZXJfYWxsKTtcXG4rfVxcbitcXG4gI2VuZGlmIC8qIF9fVEFSR0VUX0FSQ0hfeDg2IHx8IF9fVEFSR0VUX0FSQ0hfYXJtNjQgfHwgX19UQVJHRVRfQVJDSF9wb3dlcnBjKi9cXG4gXFxuIGNoYXIgX2xpY2Vuc2VbXSBTRUMoXFxcImxpY2Vuc2VcXFwiKSA9IFxcXCJHUExcXFwiO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfc3BpbGxfZmlsbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3NwaWxsX2ZpbGwuY1xcbmluZGV4IDcyYzY5MTMzMzcwMzc3Li44YjE2NmM0MmM0ZTBlOCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfc3BpbGxfZmlsbC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3NwaWxsX2ZpbGwuY1xcbkBAIC0xNDAzLDQgKzE0MDMsNDYgQEAgX19uYWtlZCB2b2lkIHBhcnRpYWxfZmlsbF9mcm9tX2NsZWFuZWRfcG9pbnRlcl9zcGlsbCh2b2lkKVxcbiBcXHRcXHQgICAgICA6OjogX19jbG9iYmVyX2FsbCk7XFxuIH1cXG4gXFxuKy8qIGNoZWNrIHZhbGlkIHNwaWxsL2ZpbGwsIHB0ciB0byB0cCBidWZmZXIgKi9cXG4rU0VDKFxcXCJyYXdfdHJhY2Vwb2ludC53XFxcIilcXG4rX19zdWNjZXNzXFxuK19fbmFrZWQgdm9pZCBzcGlsbF9maWxsX3B0cl90b190cF9idWZmZXIodm9pZClcXG4re1xcbitcXHRhc20gdm9sYXRpbGUgKFxcbitcXHRcXFwicjYgPSAqKHU2NCopKHIxICsgMCk7XFxcIlxcdC8qIHI2IGlzIHRoZSB3cml0YWJsZSB0cmFjZXBvaW50IGJ1ZmZlciAqL1xcbitcXHRcXFwiKih1NjQqKShyMTAgLSA4KSA9IHI2O1xcXCJcXG4rXFx0XFxcInI3ID0gKih1NjQqKShyMTAgLSA4KTtcXFwiXFxuK1xcdFxcXCJyMCA9IDA7XFxcIlxcbitcXHRcXFwiKih1NjQqKShyNyArIDApID0gcjA7XFxcIlxcdC8qIHNob3VsZCBiZSBhYmxlIHRvIHdyaXRlIHRocm91Z2ggdGhlIGJ1ZmZlciAqL1xcbitcXHRcXFwicjAgPSAwO1xcXCJcXG4rXFx0XFxcImV4aXQ7XFxcIlxcbitcXHQ6OjogX19jbG9iYmVyX2FsbCk7XFxuK31cXG4rXFxuK19fbm9pbmxpbmUgaW50IHNwaWxsX2ZpbGxfZHlucHRyX3N1YnByb2coc3RydWN0IGJwZl9keW5wdHIgKmRwdHIpXFxuK3tcXG4rXFx0bG9uZyAqcDtcXG4rXFxuK1xcdGFzbSB2b2xhdGlsZSAoXFxcIioodTY0ICopKHIxMCAtIDgpID0gJVtkcHRyXTtcXFwiIC8qIHNwaWxsIHRoZSBDT05TVF9QVFJfVE9fRFlOUFRSIGFyZ3VtZW50ICovXFxuK1xcdFxcdCAgICAgIFxcXCIlW2RwdHJdID0gKih1NjQgKikocjEwIC0gOCk7XFxcIlxcbitcXHRcXHQgICAgICA6IFtkcHRyXSBcXFwiK3JcXFwiKGRwdHIpIDo6IFxcXCJtZW1vcnlcXFwiKTtcXG4rXFx0cCA9IGJwZl9keW5wdHJfZGF0YShkcHRyLCAwLCBzaXplb2YoKnApKTtcXG4rXFx0aWYgKCFwKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBjaGFyIGRwdHJfbWVtX2J1ZlsxNl07XFxuK1xcbisvKiBjaGVjayB2YWxpZCBzcGlsbC9maWxsLCBjb25zdCBwdHIgdG8gZHlucHRyICovXFxuK1NFQyhcXFwic29ja2V0XFxcIilcXG4rX19zdWNjZXNzXFxuK2ludCBzcGlsbF9maWxsX2NvbnN0X3B0cl90b19keW5wdHIodm9pZClcXG4re1xcbitcXHRzdHJ1Y3QgYnBmX2R5bnB0ciBwdHI7XFxuK1xcbitcXHRicGZfZHlucHRyX2Zyb21fbWVtKGRwdHJfbWVtX2J1Ziwgc2l6ZW9mKGRwdHJfbWVtX2J1ZiksIDAsIFxcdTAwMjZwdHIpO1xcbitcXHRyZXR1cm4gc3BpbGxfZmlsbF9keW5wdHJfc3VicHJvZyhcXHUwMDI2cHRyKTtcXG4rfVxcbitcXG4gY2hhciBfbGljZW5zZVtdIFNFQyhcXFwibGljZW5zZVxcXCIpID0gXFxcIkdQTFxcXCI7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDEwOjU5OjQ5LjEzMzkxMjI1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTEyMzU1MDAzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjaGVja19zdGFja193cml0ZV9maXhlZF9vZmZcIixcbiAgICBcImNoZWNrX3N0YWNrX3JlYWRfZml4ZWRfb2ZmXCIsXG4gICAgXCJfX2lzX3BvaW50ZXJfdmFsdWVcIixcbiAgICBcImlzX3BvaW50ZXJfcmVndHlwZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIgdG8gYWxsb3cgc3BpbGxpbmcgYW5kIGZpbGxpbmcgb2YgYWxsIHBvaW50ZXIgdHlwZXMgdG8vZnJvbSB0aGUgc3RhY2ssIHJlbW92aW5nIGEgaGFyZGNvZGVkIGxpc3Qgb2YgYWxsb3dlZCBwb2ludGVyIHR5cGVzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgQlBGIHZlcmlmaWVyIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGRmM2NkOTNkZWNhMWQ4NWM0ZTViYjBkMzVhY2FlODUzZDIyMzk3YTZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEp1bCA4IDEwOjU5OjQ1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5pbmRleCAzMTkzYjQ3Mzc2MmJhNC4uNTFmNzk2NWQ0MmUzMjQgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbisrKyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuQEAgLTMzMDQsMzQgKzMzMDQsNiBAQCBzdGF0aWMgaW50IG1hcmtfY2hhaW5fcHJlY2lzaW9uX2JhdGNoKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRyZXR1cm4gYnBmX21hcmtfY2hhaW5fcHJlY2lzaW9uKGVudiwgc3RhcnRpbmdfc3RhdGUsIC0xLCBOVUxMKTtcbiB9XG4gXG4tc3RhdGljIGJvb2wgaXNfc3BpbGxhYmxlX3JlZ3R5cGUoZW51bSBicGZfcmVnX3R5cGUgdHlwZSlcbi17XG4tXHRzd2l0Y2ggKGJhc2VfdHlwZSh0eXBlKSkge1xuLVx0Y2FzZSBQVFJfVE9fTUFQX1ZBTFVFOlxuLVx0Y2FzZSBQVFJfVE9fU1RBQ0s6XG4tXHRjYXNlIFBUUl9UT19DVFg6XG4tXHRjYXNlIFBUUl9UT19QQUNLRVQ6XG4tXHRjYXNlIFBUUl9UT19QQUNLRVRfTUVUQTpcbi1cdGNhc2UgUFRSX1RPX1BBQ0tFVF9FTkQ6XG4tXHRjYXNlIFBUUl9UT19GTE9XX0tFWVM6XG4tXHRjYXNlIENPTlNUX1BUUl9UT19NQVA6XG4tXHRjYXNlIFBUUl9UT19TT0NLRVQ6XG4tXHRjYXNlIFBUUl9UT19TT0NLX0NPTU1PTjpcbi1cdGNhc2UgUFRSX1RPX1RDUF9TT0NLOlxuLVx0Y2FzZSBQVFJfVE9fWERQX1NPQ0s6XG4tXHRjYXNlIFBUUl9UT19CVEZfSUQ6XG4tXHRjYXNlIFBUUl9UT19CVUY6XG4tXHRjYXNlIFBUUl9UT19NRU06XG4tXHRjYXNlIFBUUl9UT19GVU5DOlxuLVx0Y2FzZSBQVFJfVE9fTUFQX0tFWTpcbi1cdGNhc2UgUFRSX1RPX0FSRU5BOlxuLVx0XHRyZXR1cm4gdHJ1ZTtcbi1cdGRlZmF1bHQ6XG4tXHRcdHJldHVybiBmYWxzZTtcbi1cdH1cbi19XG4tXG4tXG4gLyogY2hlY2sgaWYgcmVnaXN0ZXIgaXMgYSBjb25zdGFudCBzY2FsYXIgdmFsdWUgKi9cbiBzdGF0aWMgYm9vbCBpc19yZWdfY29uc3Qoc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZywgYm9vbCBzdWJyZWczMilcbiB7XG5AQCAtMzM0NSwxMyArMzMxNywxOCBAQCBzdGF0aWMgdTY0IHJlZ19jb25zdF92YWx1ZShzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCBib29sIHN1YnJlZzMyKVxuIFx0cmV0dXJuIHN1YnJlZzMyID8gdG51bV9zdWJyZWcocmVnLVx1MDAzZXZhcl9vZmYpLnZhbHVlIDogcmVnLVx1MDAzZXZhcl9vZmYudmFsdWU7XG4gfVxuIFxuK3N0YXRpYyBib29sIGlzX3BvaW50ZXJfcmVndHlwZShlbnVtIGJwZl9yZWdfdHlwZSB0eXBlKVxuK3tcbitcdHJldHVybiB0eXBlICE9IFNDQUxBUl9WQUxVRSBcdTAwMjZcdTAwMjYgdHlwZSAhPSBOT1RfSU5JVDtcbit9XG4rXG4gc3RhdGljIGJvb2wgX19pc19wb2ludGVyX3ZhbHVlKGJvb2wgYWxsb3dfcHRyX2xlYWtzLFxuIFx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxuIHtcbiBcdGlmIChhbGxvd19wdHJfbGVha3MpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbi1cdHJldHVybiByZWctXHUwMDNldHlwZSAhPSBTQ0FMQVJfVkFMVUU7XG4rXHRyZXR1cm4gaXNfcG9pbnRlcl9yZWd0eXBlKHJlZy1cdTAwM2V0eXBlKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgY2xlYXJfc2NhbGFyX2lkKHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcpXG5AQCAtMzQ3Niw3ICszNDUzLDcgQEAgc3RhdGljIGludCBjaGVja19zdGFja193cml0ZV9maXhlZF9vZmYoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcdGlmICh2YWx1ZV9yZWdubyBcdTAwM2U9IDApXG4gXHRcdHJlZyA9IFx1MDAyNmN1ci1cdTAwM2VyZWdzW3ZhbHVlX3JlZ25vXTtcbiBcdGlmICghZW52LVx1MDAzZWJ5cGFzc19zcGVjX3Y0KSB7XG4tXHRcdGJvb2wgc2FuaXRpemUgPSByZWcgXHUwMDI2XHUwMDI2IGlzX3NwaWxsYWJsZV9yZWd0eXBlKHJlZy1cdTAwM2V0eXBlKTtcbitcdFx0Ym9vbCBzYW5pdGl6ZSA9IHJlZyBcdTAwMjZcdTAwMjYgaXNfcG9pbnRlcl9yZWd0eXBlKHJlZy1cdTAwM2V0eXBlKTtcbiBcbiBcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgc2l6ZTsgaSsrKSB7XG4gXHRcdFx0dTggdHlwZSA9IHN0YXRlLVx1MDAzZXN0YWNrW3NwaV0uc2xvdF90eXBlWyhzbG90IC0gaSkgJVxuQEAgLTM1MTcsNyArMzQ5NCw3IEBAIHN0YXRpYyBpbnQgY2hlY2tfc3RhY2tfd3JpdGVfZml4ZWRfb2ZmKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRcdF9fbWFya19yZWdfa25vd24odG1wX3JlZywgaW5zbi1cdTAwM2VpbW0pO1xuIFx0XHR0bXBfcmVnLVx1MDAzZXR5cGUgPSBTQ0FMQVJfVkFMVUU7XG4gXHRcdHNhdmVfcmVnaXN0ZXJfc3RhdGUoZW52LCBzdGF0ZSwgc3BpLCB0bXBfcmVnLCBzaXplKTtcbi1cdH0gZWxzZSBpZiAocmVnIFx1MDAyNlx1MDAyNiBpc19zcGlsbGFibGVfcmVndHlwZShyZWctXHUwMDNldHlwZSkpIHtcbitcdH0gZWxzZSBpZiAocmVnIFx1MDAyNlx1MDAyNiBpc19wb2ludGVyX3JlZ3R5cGUocmVnLVx1MDAzZXR5cGUpKSB7XG4gXHRcdC8qIHJlZ2lzdGVyIGNvbnRhaW5pbmcgcG9pbnRlciBpcyBiZWluZyBzcGlsbGVkIGludG8gc3RhY2sgKi9cbiBcdFx0aWYgKHNpemUgIT0gQlBGX1JFR19TSVpFKSB7XG4gXHRcdFx0dmVyYm9zZV9saW5mbyhlbnYsIGluc25faWR4LCBcIjsgXCIpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9nb3RveC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2dvdG94LmNcbmluZGV4IGY4OGFhNGNkYjI3OTJjLi41YjE4YzlhMjc3MTdiYyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9nb3RveC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfZ290b3guY1xuQEAgLTM4NCw2ICszODQsMzEgQEAganQwXyU9Olx0XHRcdFx0XHRcdFx0XHRcXFxuIFx0OiBfX2Nsb2JiZXJfYWxsKTtcbiB9XG4gXG4rLyogY2hlY2sgdmFsaWQgc3BpbGwvZmlsbCwgcHRyIHRvIGluc24gKi9cbitTRUMoXCJzb2NrZXRcIilcbitfX3N1Y2Nlc3NcbitfX25ha2VkIHZvaWQgc3BpbGxfZmlsbF9wdHJfdG9faW5zbih2b2lkKVxuK3tcbitcdGFzbSB2b2xhdGlsZSAoXG4rXHRcIi5wdXNoc2VjdGlvbiAuanVtcHRhYmxlcyxcXFwiXFxcIixAcHJvZ2JpdHM7XCJcbitcdFwianQwXyU9OlwiXG4rXHRcIi5xdWFkIHJldDBfJT0gLSBzb2NrZXQ7XCJcbitcdFwiLnNpemUganQwXyU9LCA4O1wiXG4rXHRcIi5nbG9iYWwganQwXyU9O1wiXG4rXHRcIi5wb3BzZWN0aW9uO1wiXG4rXHRcInIwID0ganQwXyU9IGxsO1wiXG4rXHRcInIwID0gKih1NjQgKikocjAgKyAwKTtcIlxuK1x0XCIqKHU2NCAqKShyMTAgLSA4KSA9IHIwO1wiXG4rXHRcInIwID0gKih1NjQgKikocjEwIC0gOCk7XCJcbitcdFwiLjhieXRlICVbZ290b3hfcjBdO1wiXG4rXHRcInJldDBfJT06XCJcbitcdFwicjAgPSAwO1wiXG4rXHRcImV4aXQ7XCJcbitcdDpcbitcdDogX19pbW1faW5zbihnb3RveF9yMCwgQlBGX1JBV19JTlNOKEJQRl9KTVAgfCBCUEZfSkEgfCBCUEZfWCwgQlBGX1JFR18wLCAwLCAwLCAwKSlcbitcdDogX19jbG9iYmVyX2FsbCk7XG4rfVxuK1xuICNlbmRpZiAvKiBfX1RBUkdFVF9BUkNIX3g4NiB8fCBfX1RBUkdFVF9BUkNIX2FybTY0IHx8IF9fVEFSR0VUX0FSQ0hfcG93ZXJwYyovXG4gXG4gY2hhciBfbGljZW5zZVtdIFNFQyhcImxpY2Vuc2VcIikgPSBcIkdQTFwiO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9zcGlsbF9maWxsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfc3BpbGxfZmlsbC5jXG5pbmRleCA3MmM2OTEzMzM3MDM3Ny4uOGIxNjZjNDJjNGUwZTggMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfc3BpbGxfZmlsbC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfc3BpbGxfZmlsbC5jXG5AQCAtMTQwMyw0ICsxNDAzLDQ2IEBAIF9fbmFrZWQgdm9pZCBwYXJ0aWFsX2ZpbGxfZnJvbV9jbGVhbmVkX3BvaW50ZXJfc3BpbGwodm9pZClcbiBcdFx0ICAgICAgOjo6IF9fY2xvYmJlcl9hbGwpO1xuIH1cbiBcbisvKiBjaGVjayB2YWxpZCBzcGlsbC9maWxsLCBwdHIgdG8gdHAgYnVmZmVyICovXG4rU0VDKFwicmF3X3RyYWNlcG9pbnQud1wiKVxuK19fc3VjY2Vzc1xuK19fbmFrZWQgdm9pZCBzcGlsbF9maWxsX3B0cl90b190cF9idWZmZXIodm9pZClcbit7XG4rXHRhc20gdm9sYXRpbGUgKFxuK1x0XCJyNiA9ICoodTY0KikocjEgKyAwKTtcIlx0LyogcjYgaXMgdGhlIHdyaXRhYmxlIHRyYWNlcG9pbnQgYnVmZmVyICovXG4rXHRcIioodTY0KikocjEwIC0gOCkgPSByNjtcIlxuK1x0XCJyNyA9ICoodTY0KikocjEwIC0gOCk7XCJcbitcdFwicjAgPSAwO1wiXG4rXHRcIioodTY0KikocjcgKyAwKSA9IHIwO1wiXHQvKiBzaG91bGQgYmUgYWJsZSB0byB3cml0ZSB0aHJvdWdoIHRoZSBidWZmZXIgKi9cbitcdFwicjAgPSAwO1wiXG4rXHRcImV4aXQ7XCJcbitcdDo6OiBfX2Nsb2JiZXJfYWxsKTtcbit9XG4rXG4rX19ub2lubGluZSBpbnQgc3BpbGxfZmlsbF9keW5wdHJfc3VicHJvZyhzdHJ1Y3QgYnBmX2R5bnB0ciAqZHB0cilcbit7XG4rXHRsb25nICpwO1xuK1xuK1x0YXNtIHZvbGF0aWxlIChcIioodTY0ICopKHIxMCAtIDgpID0gJVtkcHRyXTtcIiAvKiBzcGlsbCB0aGUgQ09OU1RfUFRSX1RPX0RZTlBUUiBhcmd1bWVudCAqL1xuK1x0XHQgICAgICBcIiVbZHB0cl0gPSAqKHU2NCAqKShyMTAgLSA4KTtcIlxuK1x0XHQgICAgICA6IFtkcHRyXSBcIityXCIoZHB0cikgOjogXCJtZW1vcnlcIik7XG4rXHRwID0gYnBmX2R5bnB0cl9kYXRhKGRwdHIsIDAsIHNpemVvZigqcCkpO1xuK1x0aWYgKCFwKVxuK1x0XHRyZXR1cm4gMDtcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgY2hhciBkcHRyX21lbV9idWZbMTZdO1xuK1xuKy8qIGNoZWNrIHZhbGlkIHNwaWxsL2ZpbGwsIGNvbnN0IHB0ciB0byBkeW5wdHIgKi9cbitTRUMoXCJzb2NrZXRcIilcbitfX3N1Y2Nlc3NcbitpbnQgc3BpbGxfZmlsbF9jb25zdF9wdHJfdG9fZHlucHRyKHZvaWQpXG4re1xuK1x0c3RydWN0IGJwZl9keW5wdHIgcHRyO1xuK1xuK1x0YnBmX2R5bnB0cl9mcm9tX21lbShkcHRyX21lbV9idWYsIHNpemVvZihkcHRyX21lbV9idWYpLCAwLCBcdTAwMjZwdHIpO1xuK1x0cmV0dXJuIHNwaWxsX2ZpbGxfZHlucHRyX3N1YnByb2coXHUwMDI2cHRyKTtcbit9XG4rXG4gY2hhciBfbGljZW5zZVtdIFNFQyhcImxpY2Vuc2VcIikgPSBcIkdQTFwiO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTA6NTk6NDkuMTMzOTE0NloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYzODY4NTcyMTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUGF0Y2ggRXZhbHVhdGlvbiBcdTAwMjYgRnV6emluZyBTdHJhdGVneSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBwYXRjaCwgd2hpY2ggdG91Y2hlcyBga2VybmVsL2JwZi92ZXJpZmllci5jYCBhbmQgYWRkcyBzZWxmLXRlc3RzIGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYCwgaXMgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4gVGhlIGNvcmUgY2hhbmdlLCB0aGUgcmVwbGFjZW1lbnQgb2YgYGlzX3NwaWxsYWJsZV9yZWd0eXBlYCB3aXRoIGBpc19wb2ludGVyX3JlZ3R5cGVgLCBpcyBzaWduaWZpY2FudC4gRWZmZWN0aXZlbHksIHdlJ3JlIGJyb2FkZW5pbmcgdGhlIHR5cGVzIHRoYXQgY2FuIGJlIHNwaWxsZWQgYW5kIGZpbGxlZCB0by9mcm9tIHRoZSBzdGFjayBpbiB0aGUgQlBGIHZlcmlmaWVyLiBUaGUgb2xkIG1ldGhvZCBoYWQgYSBoYXJkY29kZWQgbGlzdCBvZiBwb2ludGVyIHR5cGVzLCB3aGlsZSB0aGUgbmV3IGNoZWNrIGlzIGJyb2FkZXIsIGV4cGxpY2l0bHkgYWxsb3dpbmcgdHlwZXMgc3VjaCBhcyBgUFRSX1RPX0lOU05gLCBgUFRSX1RPX1RQX0JVRkZFUmAsIGFuZCBgQ09OU1RfUFRSX1RPX0RZTlBUUmAsIHdoaWNoIGlzIGNsZWFybHkgZGVtb25zdHJhdGVkIGluIHRoZSBhZGRlZCBzZWxmdGVzdHMuXG5cblRoaXMgaGFzIGltbWVkaWF0ZSBpbXBsaWNhdGlvbnM6IHdlJ3JlIG1vZGlmeWluZyBmdW5kYW1lbnRhbCBCUEYgdmVyaWZpZXIgbG9naWMuIEFueXRpbWUgeW91IHRvdWNoIHRoZSB2ZXJpZmllciwgeW91IGFyZSB0b3VjaGluZyB0aGUgY29yZSBvZiB0aGUga2VybmVsIGFuZCBtYWtpbmcgaXQgcmVhY2hhYmxlLiBUaGUgZnVuY3Rpb25hbCBjaGFuZ2Ugb3BlbnMgdGhlIGRvb3IgdG8gcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy4gSXQncyBhbG1vc3QgZ3VhcmFudGVlZCB0byBiZSB3b3J0aCB0aGUgdGltZSBpbnZlc3RtZW50LlxuXG5Ob3csIGxldCdzIGlkZW50aWZ5IHRoZSBmb2N1cyBzeW1ib2xzLiBUaGUgcGF0Y2ggc3BlY2lmaWNhbGx5IG1vZGlmaWVkIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zOlxuLSAgIGBpc19wb2ludGVyX3JlZ3R5cGVgICh0aGlzIGlzIHRoZSBuZXcgb25lLCB0aGUgcmVwbGFjZW1lbnQpXG4tICAgYF9faXNfcG9pbnRlcl92YWx1ZWAgKHRoaXMgbXVzdCBoYXZlIGJlZW4gYWRqdXN0ZWQgdG8gd29yayB3aXRoIHRoZSBjaGFuZ2VzKVxuLSAgIGBjaGVja19zdGFja193cml0ZV9maXhlZF9vZmZgIChpdCdzIGluIHRoZSBzYW1lIGZpbGUsIHNvIGl0IG5lZWRzIGNoZWNraW5nKVxuXG5HaXZlbiB0aGUgcG90ZW50aWFsIGltcG9ydGFuY2UsIEkgd2FudCB0byBzcGVjaWZpY2FsbHkgbG9vayBhdCBgY2hlY2tfc3RhY2tfd3JpdGVfZml4ZWRfb2ZmYC4gSSdsbCByZW1pbmQgbXlzZWxmIHRoYXQgaXQncyBhIHN0YXRpYyBmdW5jdGlvbiB3aXRoaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AsIHdoaWNoIGxpa2VseSBtYWtlcyBpdCBhbiBpbnRlcm5hbGx5IHJlbGV2YW50IGNvbXBvbmVudCBvZiB0aGUgdmVyaWZpZXIuIE5vdywgbGV0J3Mgc2VlIGhvdyBpdCdzIGNhbGxlZCBhbmQgd2hlcmUgaXQncyB1c2VkOyB0aGF0IHdpbGwgaGVscCB0byBkZXRlcm1pbmUgb3VyIHBvaW50cyBvZiBlbnRyeS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzg2NiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzNCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDEwOjU5OjU1LjUyMDc3NDM4NloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjk5MzQ0MzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY2hlY2tfc3RhY2tfd3JpdGVfZml4ZWRfb2ZmXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MzQxMz1zdGF0aWMgdm9pZCBzY3J1Yl9zcGVjaWFsX3Nsb3Qoc3RydWN0IGJwZl9mdW5jX3N0YXRlICpzdGF0ZSwgaW50IHNwaSlcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zNDI3LSAqL1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzozNDI4OnN0YXRpYyBpbnQgY2hlY2tfc3RhY2tfd3JpdGVfZml4ZWRfb2ZmKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTM0MjktXFx0XFx0XFx0XFx0ICAgICAgIC8qIHN0YWNrIGZyYW1lIHdlJ3JlIHdyaXRpbmcgdG8gKi9cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0zOTYwPXN0YXRpYyBpbnQgY2hlY2tfc3RhY2tfcmVhZChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTQwMDUtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjQwMDY6LyogY2hlY2tfc3RhY2tfd3JpdGUgZGlzcGF0Y2hlcyB0byBjaGVja19zdGFja193cml0ZV9maXhlZF9vZmYgb3JcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNDAwNy0gKiBjaGVja19zdGFja193cml0ZV92YXJfb2ZmLlxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTQwMTU9c3RhdGljIGludCBjaGVja19zdGFja193cml0ZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTQwMjMtXFx0XFx0b2ZmICs9IHJlZy1cXHUwMDNldmFyX29mZi52YWx1ZTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NDAyNDpcXHRcXHRlcnIgPSBjaGVja19zdGFja193cml0ZV9maXhlZF9vZmYoZW52LCBzdGF0ZSwgb2ZmLCBzaXplLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy00MDI1LVxcdFxcdFxcdFxcdFxcdFxcdCAgdmFsdWVfcmVnbm8sIGluc25faWR4KTtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz00OTc3PXN0YXRpYyBpbnQgY2hlY2tfcHRyX2FsaWdubWVudChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTUwMDYtXFx0XFx0cG9pbnRlcl9kZXNjID0gXFxcInN0YWNrIFxcXCI7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjUwMDc6XFx0XFx0LyogVGhlIHN0YWNrIHNwaWxsIHRyYWNraW5nIGxvZ2ljIGluIGNoZWNrX3N0YWNrX3dyaXRlX2ZpeGVkX29mZigpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTUwMDgtXFx0XFx0ICogYW5kIGNoZWNrX3N0YWNrX3JlYWRfZml4ZWRfb2ZmKCkgcmVsaWVzIG9uIHN0YWNrIGFjY2Vzc2VzIGJlaW5nXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDEwOjU5OjU1Ljc5MDcxNTA0MloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5ODI2MDEyNDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aGUgZXhwZXJ0OlxuXG4qKlRyYWNpbmcgRG93biB0aGUgTWVtb3J5IEFjY2VzcyBDaGVjayoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBtZW1vcnkgYWNjZXNzIGNoZWNraW5nIGxvZ2ljLiBUaGUgY2FsbCBzdGFjayByZXZlYWxzIGEgY2xlYXIgcGF0aC4gRmlyc3QsIEkgc2VlIHRoYXQgYGNoZWNrX3N0YWNrX3dyaXRlX2ZpeGVkX29mZmAgaXMgdHJpZ2dlcmVkIGJ5IGBjaGVja19zdGFja193cml0ZWAuIEFuZCwgYGNoZWNrX3N0YWNrX3dyaXRlYCBpdHNlbGYgaXMgaW52b2tlZCBieSBgY2hlY2tfbWVtX2FjY2Vzc2AuIFRoaXMgdGVsbHMgbWUgdGhhdCBgY2hlY2tfbWVtX2FjY2Vzc2AgaXMgdGhlIGhpZ2gtbGV2ZWwgZnVuY3Rpb24gcmVzcG9uc2libGUgZm9yIGluaXRpYXRpbmcgbWVtb3J5IGFjY2VzcyB2YWxpZGF0aW9uLCBhbmQgdGhhdCBzdGFjayB3cml0ZXMsIHNwZWNpZmljYWxseSB0aG9zZSB3aXRoIGEgZml4ZWQgb2Zmc2V0LCBhcmUgYSBjcml0aWNhbCBjb21wb25lbnQgb2YgdGhhdCBwcm9jZXNzLiBOb3csIEkgd2FudCB0byBpbnZlc3RpZ2F0ZSBob3cgdGhlIHN5c3RlbSBkZXRlcm1pbmVzIHdoZXRoZXIgYSB2YWx1ZSByZXByZXNlbnRzIGEgdmFsaWQgcG9pbnRlciwgc28gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIGBfX2lzX3BvaW50ZXJfdmFsdWVgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MTU2LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTA6NTk6NTguNzczMzE4NTk5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExOTQ5OTg2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX2lzX3BvaW50ZXJfdmFsdWVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuYz0zMzIwPXN0YXRpYyBib29sIGlzX3BvaW50ZXJfcmVndHlwZShlbnVtIGJwZl9yZWdfdHlwZSB0eXBlKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTMzMjQtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjMzMjU6c3RhdGljIGJvb2wgX19pc19wb2ludGVyX3ZhbHVlKGJvb2wgYWxsb3dfcHRyX2xlYWtzLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zMzI2LVxcdFxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTM3NDQ9c3RhdGljIGludCBjaGVja19zdGFja19yZWFkX2ZpeGVkX29mZihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTM4NTUtXFx0XFx0XFx0ICovXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjM4NTY6XFx0XFx0fSBlbHNlIGlmIChfX2lzX3BvaW50ZXJfdmFsdWUoZW52LVxcdTAwM2VhbGxvd19wdHJfbGVha3MsIHJlZykpIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzg1Ny1cXHRcXHRcXHQvKiBJZiBkc3RfcmVnbm89PS0xLCB0aGUgY2FsbGVyIGlzIGFza2luZyB1cyB3aGV0aGVyXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NDgxND1zdGF0aWMgYm9vbCBpc19wb2ludGVyX3ZhbHVlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCByZWdubylcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNDgxNS17XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjQ4MTY6XFx0cmV0dXJuIF9faXNfcG9pbnRlcl92YWx1ZShlbnYtXFx1MDAzZWFsbG93X3B0cl9sZWFrcywgcmVnX3N0YXRlKGVudiwgcmVnbm8pKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNDgxNy19XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTU0NDc9c3RhdGljIGludCBpc19icmFuY2hfdGFrZW4oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZzEsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTU0NTItXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE1NDUzOlxcdGlmIChfX2lzX3BvaW50ZXJfdmFsdWUoZmFsc2UsIHJlZzEpIHx8IF9faXNfcG9pbnRlcl92YWx1ZShmYWxzZSwgcmVnMikpIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTU0NTQtXFx0XFx0dTY0IHZhbDtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xNTk0Mz1zdGF0aWMgaW50IGNoZWNrX2NvbmRfam1wX29wKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTYwMzEtXFx0XFx0ICovXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE2MDMyOlxcdFxcdGlmICghX19pc19wb2ludGVyX3ZhbHVlKGZhbHNlLCBkc3RfcmVnKSlcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTYwMzMtXFx0XFx0XFx0ZXJyID0gbWFya19jaGFpbl9wcmVjaXNpb24oZW52LCBpbnNuLVxcdTAwM2Vkc3RfcmVnKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTYwMzQtXFx0XFx0aWYgKEJQRl9TUkMoaW5zbi1cXHUwMDNlY29kZSkgPT0gQlBGX1ggXFx1MDAyNlxcdTAwMjYgIWVyciBcXHUwMDI2XFx1MDAyNlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNjAzNTpcXHRcXHQgICAgIV9faXNfcG9pbnRlcl92YWx1ZShmYWxzZSwgc3JjX3JlZykpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE2MDM2LVxcdFxcdFxcdGVyciA9IG1hcmtfY2hhaW5fcHJlY2lzaW9uKGVudiwgaW5zbi1cXHUwMDNlc3JjX3JlZyk7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTYxMjctXFx0aWYgKCFpc19qbXAzMiBcXHUwMDI2XFx1MDAyNiBCUEZfU1JDKGluc24tXFx1MDAzZWNvZGUpID09IEJQRl9YIFxcdTAwMjZcXHUwMDI2XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE2MTI4OlxcdCAgICBfX2lzX3BvaW50ZXJfdmFsdWUoZmFsc2UsIHNyY19yZWcpIFxcdTAwMjZcXHUwMDI2IF9faXNfcG9pbnRlcl92YWx1ZShmYWxzZSwgZHN0X3JlZykgXFx1MDAyNlxcdTAwMjZcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTYxMjktXFx0ICAgIHR5cGVfbWF5X2JlX251bGwoc3JjX3JlZy1cXHUwMDNldHlwZSkgIT0gdHlwZV9tYXlfYmVfbnVsbChkc3RfcmVnLVxcdTAwM2V0eXBlKSBcXHUwMDI2XFx1MDAyNlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxMDo1OTo1OC44OTI4MjU2NDhaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODg2ODY3OTI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZvY3VzaW5nIG9uIFBvaW50ZXIgVmFsdWUgQ2hlY2tzKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IGhvdyB0aGUgY29kZSB2YWxpZGF0ZXMgcG9pbnRlciB2YWx1ZXMuIGBpc19wb2ludGVyX3ZhbHVlYCBwb3BzIHVwIGluIHF1aXRlIGEgZmV3IHBsYWNlcyDigJMgbGlrZSBgY2hlY2tfYWx1X29wYCBhbmQgYGNoZWNrX21lbV9hY2Nlc3NgLCB3aGljaCBtYWtlcyBpdCBhIGNydWNpYWwgZnVuY3Rpb24gdG8gdW5kZXJzdGFuZC4gSXQncyB1c2VkIGluIGxvdHMgb2YgY29tbW9uIHNjZW5hcmlvcywgc28gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gY3J5c3RhbCBjbGVhciBvbiBpdHMgYmVoYXZpb3VyLlxuXG5JIG5lZWQgdG8gZGlnIGludG8gdGhlIGtleSBzeW1ib2xzIGhlcmUuIEkgdGhpbmsgYGNoZWNrX3N0YWNrX3dyaXRlX2ZpeGVkX29mZmAsIGFuZCBgY2hlY2tfc3RhY2tfcmVhZF9maXhlZF9vZmZgIHdpbGwgYmUgZ29vZCBmb2N1cyBwb2ludHMuIFRoZXkncmUgcmVsYXRlZCwgc28gSSdsbCBjaGVjayB0aG9zZSBvdXQgdG9nZXRoZXIgd2l0aCBgY2hlY2tfc3RhY2tfd3JpdGVgLCB0b28uIFBsdXMsIEkgc2hvdWxkIHByb2JhYmx5IGFsc28gbG9vayBhdCBgaXNfcG9pbnRlcl9yZWd0eXBlYCBhbmQgYF9faXNfcG9pbnRlcl92YWx1ZWAgdG8gZ2V0IGEgbW9yZSBjb21wbGV0ZSBwaWN0dXJlLiBJIHRoaW5rIHRoaXMgd2lsbCBzaG93IHRoZSBjb3JlIGxvZ2ljIGFuZCBpbnRlcmFjdGlvbiB3aXRoIHRoZSBzdGFjay4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGdyYXNwIG9uIGhvdyBwb2ludGVyIHZhbGlkaXR5IGlzIGRldGVybWluZWQgd2l0aGluIHRoaXMgc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MjcxLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDExOjAwOjAyLjc3OTY5NjYxN1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTg2NDczNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY2hlY2tfc3RhY2tfd3JpdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuYz0zNDEzPXN0YXRpYyB2b2lkIHNjcnViX3NwZWNpYWxfc2xvdChzdHJ1Y3QgYnBmX2Z1bmNfc3RhdGUgKnN0YXRlLCBpbnQgc3BpKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTM0MjctICovXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjM0Mjg6c3RhdGljIGludCBjaGVja19zdGFja193cml0ZV9maXhlZF9vZmYoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzQyOS1cXHRcXHRcXHRcXHQgICAgICAgLyogc3RhY2sgZnJhbWUgd2UncmUgd3JpdGluZyB0byAqL1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTM1NTgtICovXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjM1NTk6c3RhdGljIGludCBjaGVja19zdGFja193cml0ZV92YXJfb2ZmKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTM1NjAtXFx0XFx0XFx0XFx0ICAgICAvKiBmdW5jIHdoZXJlIHJlZ2lzdGVyIHBvaW50cyB0byAqL1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTM5NjA9c3RhdGljIGludCBjaGVja19zdGFja19yZWFkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNDAwNS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NDAwNjovKiBjaGVja19zdGFja193cml0ZSBkaXNwYXRjaGVzIHRvIGNoZWNrX3N0YWNrX3dyaXRlX2ZpeGVkX29mZiBvclxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo0MDA3OiAqIGNoZWNrX3N0YWNrX3dyaXRlX3Zhcl9vZmYuXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTQwMDgtICpcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy00MDE0LSAqL1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo0MDE1OnN0YXRpYyBpbnQgY2hlY2tfc3RhY2tfd3JpdGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNDAxNi1cXHRcXHRcXHQgICAgIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsIGludCBvZmYsIGludCBzaXplLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTQwMjMtXFx0XFx0b2ZmICs9IHJlZy1cXHUwMDNldmFyX29mZi52YWx1ZTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NDAyNDpcXHRcXHRlcnIgPSBjaGVja19zdGFja193cml0ZV9maXhlZF9vZmYoZW52LCBzdGF0ZSwgb2ZmLCBzaXplLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy00MDI1LVxcdFxcdFxcdFxcdFxcdFxcdCAgdmFsdWVfcmVnbm8sIGluc25faWR4KTtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy00MDI5LVxcdFxcdCAqL1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo0MDMwOlxcdFxcdGVyciA9IGNoZWNrX3N0YWNrX3dyaXRlX3Zhcl9vZmYoZW52LCBzdGF0ZSxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNDAzMS1cXHRcXHRcXHRcXHRcXHRcXHRyZWcsIG9mZiwgc2l6ZSxcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz00OTc3PXN0YXRpYyBpbnQgY2hlY2tfcHRyX2FsaWdubWVudChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTUwMDYtXFx0XFx0cG9pbnRlcl9kZXNjID0gXFxcInN0YWNrIFxcXCI7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjUwMDc6XFx0XFx0LyogVGhlIHN0YWNrIHNwaWxsIHRyYWNraW5nIGxvZ2ljIGluIGNoZWNrX3N0YWNrX3dyaXRlX2ZpeGVkX29mZigpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTUwMDgtXFx0XFx0ICogYW5kIGNoZWNrX3N0YWNrX3JlYWRfZml4ZWRfb2ZmKCkgcmVsaWVzIG9uIHN0YWNrIGFjY2Vzc2VzIGJlaW5nXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NjA3OT1zdGF0aWMgaW50IGNoZWNrX21lbV9hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGluc25faWR4LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCBhcmdub190IGFyZ25vLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTYyNTAtXFx0XFx0ZWxzZVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2MjUxOlxcdFxcdFxcdGVyciA9IGNoZWNrX3N0YWNrX3dyaXRlKGVudiwgcmVnLCBvZmYsIHNpemUsXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTYyNTItXFx0XFx0XFx0XFx0XFx0XFx0dmFsdWVfcmVnbm8sIGluc25faWR4KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTE6MDA6MDIuODk4MzQ4OTQ3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk4Mzg1NDk3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgQ29kZSBNb2RpZmljYXRpb24qKlxuXG5Pa2F5LCBzbyB0aGUgcGF0Y2ggaXMgdHdlYWtpbmcgYGNoZWNrX3N0YWNrX3dyaXRlX2ZpeGVkX29mZmAgYW5kIGBfX2lzX3BvaW50ZXJfdmFsdWVgLiBSaWdodCwgc2VlbXMgbG9naWNhbC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVwZGF0ZSBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjb2RlJ3MgZGF0YSBzdHJ1Y3R1cmVzIGFjY29yZGluZ2x5LiBJJ2xsIG5lZWQgdG8gaW5jb3Jwb3JhdGUgdGhvc2UgZnVuY3Rpb25zLCBhbG9uZyB3aXRoIGBpc19wb2ludGVyX3JlZ3R5cGVgIGFuZCBhbHNvIGBjaGVja19zdGFja19yZWFkX2ZpeGVkX29mZmAgKHNpbmNlIGl0IHJlYWRzIHNwaWxsZWQgcG9pbnRlcnMsIHdoaWNoIGlzIGtleSksIGludG8gbXkgYEZvY3VzU3ltYm9sc2Aga25vd2xlZGdlIGJhc2UuIFRoYXQgd2lsbCBhbGxvdyBtZSB0byBhY2N1cmF0ZWx5IHRyYWNrIHRoaXMgY29kZSBwYXRoLiBJIHdpbGwgbmVlZCB0byBiZSB2ZXJ5IHRob3JvdWdoLlxuXG5Ob3csIGxldCdzIGNvbnNpZGVyIHRoZSBidWlsZCBlbnZpcm9ubWVudC4gYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgc3RhbmRhcmQsIG5vIHN1cnByaXNlcyB0aGVyZS4gSG93ZXZlciwgSSB3YW50IHRvIGNvbmZpcm0gd2hldGhlciB0aGVyZSBhcmUgKmFueSogbmV3LCBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyBhc3NvY2lhdGVkIHdpdGggdGhlc2UgY2hhbmdlcy4gVGhlIGNvZGUgaXMgbG9jYXRlZCB3aXRoaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AsIHNvIEkgc2hvdWxkIGluc3BlY3QgdGhhdCBhcmVhIGNsb3NlbHkgZm9yIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGRpcmVjdGl2ZXMgdGhhdCByZWxhdGUgdG8gdGhpcyBwYXRjaC4gSSBuZWVkIHRvIGtub3cgd2hpY2ggY29uZmlndXJhdGlvbnMgd291bGQgYmUgbmVjZXNzYXJ5IHRvIGluY2x1ZGUgdGhpcywgb3IgYWx0ZXIgaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc0OTYsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTE6MDA6MDYuODgyMjA2NDA4WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTE3MjQwMzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX0JQRlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL3ZlcmlmaWVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jPTQzOTY9QlRGX0lEKHN0cnVjdCwgY2dyb3VwKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy00Mzk3LSNlbmRpZlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo0Mzk4OiNpZmRlZiBDT05GSUdfQlBGX0pJVFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy00Mzk5LUJURl9JRChzdHJ1Y3QsIGJwZl9jcHVtYXNrKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTExMTI4PUJURl9JRF9VTlVTRURcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTExMjktI2VuZGlmXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjExMTMwOiNpZmRlZiBDT05GSUdfQlBGX0VWRU5UU1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTEzMS1CVEZfSUQoZnVuYywgYnBmX3Nlc3Npb25fY29va2llKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTExMTQwPUJURl9JRChmdW5jLCBicGZfaXRlcl9udW1fZGVzdHJveSlcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTExNDE6I2lmZGVmIENPTkZJR19CUEZfTFNNXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMTQyLUJURl9JRChmdW5jLCBicGZfc2V0X2RlbnRyeV94YXR0cilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTE1OT1CVEZfSUQoZnVuYywgYnBmX2FyZW5hX3Jlc2VydmVfcGFnZXMpXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjExMTYwOiNpZmRlZiBDT05GSUdfQlBGX0VWRU5UU1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTE2MS1CVEZfSUQoZnVuYywgYnBmX3Nlc3Npb25faXNfcmV0dXJuKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxMTowMDowNy4wNzM5MzczNzFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ0NzEzMjk4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlIHdoYXQncyBnb2luZyBvbiBoZXJlLlxuXG4qKkFuYWx5emluZyBQb3RlbnRpYWwgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMgaW4gQlBGIFZlcmlmaWVyIFRlc3RzKipcblxuUmlnaHQsIHNvIG5vIGltbWVkaWF0ZSByZWQgZmxhZ3MsIG5vIHVudXN1YWwgY29uZmlndXJhdGlvbnMgc3ByaW5nIHRvIG1pbmQuIGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIGEgZ2l2ZW4sIHdlJ3JlIHRhbGtpbmcgYWJvdXQgQlBGIGhlcmUuIEJ1dCwgYmVmb3JlIEkgYXNzdW1lIGV2ZXJ5dGhpbmcgaXMgaHVua3ktZG9yeSwgSSBzaG91bGQgdmVyaWZ5LiBJJ20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgYSBjb3VwbGUgb2YgdGhlIHRlc3QgcHJvZ3JhbXMgdG8gYmUgc3VyZS4gU3BlY2lmaWNhbGx5LCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2dvdG94LmNgIGFuZCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3NwaWxsX2ZpbGwuY2AuIFRoZXNlIHRlc3RzIGFyZSBrbm93biB0byBoaXQgc29tZSBpbnRlcmVzdGluZyBhcmVhcyBvZiB0aGUgdmVyaWZpZXIsIHNvIHRoZXkncmUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IHN1YnRsZSBkZXBlbmRlbmNpZXMgdGhhdCBhcmVuJ3QgaW1tZWRpYXRlbHkgb2J2aW91cyBmcm9tIHRoZSBjb25maWcgbGlzdC4gSSBuZWVkIHRvIHNjYW4gdGhvc2Ugc291cmNlIGZpbGVzLCBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzIG9yIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIHRoYXQgd291bGQgcmVxdWlyZSBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiBmbGFncyB0byBiZSBlbmFibGVkIGZvciB0aGVtIHRvIGJ1aWxkIGFuZCBydW4gY29ycmVjdGx5LiBOb3RoaW5nIHdvcnNlIHRoYW4gYSBzaWxlbnQgZmFpbHVyZSBkdWUgdG8gYSBtaXNzaW5nIGNvbmZpZyFcblxuXG4iLCJJbnB1dFRva2VucyI6ODI3MSwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDExOjAwOjEwLjUyMTA3Mjg5OFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk2MzEyMTI0LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcInRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9nb3RveC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQxMTowMDoxMC43MTczOTUyNzFaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY4NDkzOTExNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIFwiTm8gY29uZmlncyxcIiBzdW1tYXJpemVkIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzc3VtaW5nIGEgbGV2ZWwgb2YgZXhwZXJ0aXNlOlxuXG4qKlRoZSBBYnNlbmNlIG9mIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCBzbyB0aGUgY29yZSBvZiB0aGlzIHNpdHVhdGlvbiBpcyBjbGVhciDigJMgb3IgcmF0aGVyLCB0aGUgbGFjayBvZiBjbGFyaXR5ICppcyogdGhlIGNvcmUuIFwiTm8gY29uZmlncy5cIiBUaGF0J3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBObyBwcmUtc2V0IHBhcmFtZXRlcnMsIG5vIGRlZmluZWQgaW5pdGlhbCBzdGF0ZXMsIG5vIGVzdGFibGlzaGVkIGNvbmZpZ3VyYXRpb25zIG9mIGFueSBraW5kLiBUaGlzIG1lYW5zIEknbSBkZWFsaW5nIHdpdGggYSBzeXN0ZW0gdGhhdCdzIGVpdGhlciBmdW5kYW1lbnRhbGx5IGJsYW5rLCBjb21wbGV0ZWx5IHVuaW5pdGlhbGl6ZWQsIG9yIHBlcmhhcHMgZGVzaWduZWQgdG8gYmUgZHluYW1pY2FsbHkgY29uZmlndXJlZCBvbiB0aGUgZmx5LiBUaGlzIGxhY2sgb2YgcHJlLWV4aXN0aW5nIHNldHRpbmdzIGlzIHNpZ25pZmljYW50LiBJdCBpbXBsaWVzIGEgZGVncmVlIG9mIGZsZXhpYmlsaXR5LCBwZXJoYXBzLCBidXQgYWxzbyBhIHBvdGVudGlhbCBmb3Igc2lnbmlmaWNhbnQgYW1iaWd1aXR5LiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IEknbSB3b3JraW5nICp3aXRoKiByYXRoZXIgdGhhbiAqYWdhaW5zdC4qXG5cbk15IGV4cGVydGlzZSB0ZWxscyBtZSB0aGF0IHRoaXMgY291bGQgbWVhbiBhIG11bHRpdHVkZSBvZiB0aGluZ3MuIElzIHRoaXMgYSBkZWxpYmVyYXRlbHkgbWluaW1hbGlzdCBkZXNpZ24sIGEgc2FuZGJveCBlbnZpcm9ubWVudCwgb3IgYSBmbGF3ZWQgZGVwbG95bWVudD8gQXJlIHdlIHRhbGtpbmcgYWJvdXQgYSBjb21wbGV0ZSBsYWNrIG9mIGEgY29uZmlndXJhdGlvbiBmaWxlLCBvciBpcyB0aGUgY29uZmlndXJhdGlvbiBoYW5kbGVkIGludGVybmFsbHksIHBlcmhhcHMgdGhyb3VnaCBhbiBBUEkgb3IgYSBkeW5hbWljIHByb2Nlc3M/IFRoZSBpbXBsaWNhdGlvbnMgaGVyZSBhcmUgdmFzdCBhbmQgY2FuIGNoYW5nZSB0aGUgZGlyZWN0aW9uIG9mIGFuYWx5c2lzIGFuZCBwcm9ibGVtLXNvbHZpbmcuIFRoaXMgY291bGQgbWFrZSBpdCBhIHZlcnkgaW50ZXJlc3RpbmcgcHJvYmxlbSB0byB0YWNrbGUuXG5cblRoaXMgaXMgYWxsIGFib3V0IGNvbnRleHQ7IFwiTm8gY29uZmlnc1wiIGRvZXNuJ3QgbWVhbiBhbnl0aGluZyBpbiBpc29sYXRpb24uIEkgbmVlZCBtb3JlIGluZm9ybWF0aW9uIHRvIGJlZ2luIHRvIGludGVycHJldCB3aGF0IHRoaXMgbWVhbnMgaW4gcHJhY3RpY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg2NDksIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDExOjAwOjE0LjQwMjMzNjUwN1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcyNDUzNzA1LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcInRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9zcGlsbF9maWxsLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDExOjAwOjE0LjU3NDc5NzU2MloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODQwMDA0Njg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEJQRiBWZXJpZmllciBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgc3BlY2lmaWNhbGx5IGV4cGFuZGluZyB0aGUgQlBGIHZlcmlmaWVyJ3MgY2FwYWJpbGl0eSB0byBoYW5kbGUgbW9yZSBwb2ludGVyIHR5cGVzIGR1cmluZyBzcGlsbGluZyBhbmQgZmlsbGluZyBvcGVyYXRpb25zLiBHb29kLiBJdCdzIGJlZW4gZmxhZ2dlZCBhcyBXb3J0aEZ1enppbmcsIHdoaWNoIGlzIGEgZ29vZCBpbmRpY2F0b3IgdGhhdCB3ZSBzaG91bGQgZ2l2ZSBpdCBhIHRob3JvdWdoIGdvaW5nLW92ZXIuXG5cblRoZSBrZXkgZnVuY3Rpb25zIHRvIGNvbmNlbnRyYXRlIG9uIGR1cmluZyBmdXp6aW5nIGFyZSBgY2hlY2tfc3RhY2tfd3JpdGVfZml4ZWRfb2ZmYCwgYGNoZWNrX3N0YWNrX3JlYWRfZml4ZWRfb2ZmYCwgYF9faXNfcG9pbnRlcl92YWx1ZWAsIGFuZCBgaXNfcG9pbnRlcl9yZWd0eXBlYC4gVGhlc2UgYXJlIGNsZWFybHkgdGhlIGFyZWFzIHdoZXJlIHRoZSBuZXcgcG9pbnRlciBoYW5kbGluZyBsb2dpYyBpcyBpbXBsZW1lbnRlZCBvciBtb3N0IGltcGFjdGZ1bC4gR2l2ZW4gSSdtIGFuIGV4cGVydCBpbiB0aGlzIGZpZWxkLCBJJ2xsIG5lZWQgdG8gZm9jdXMgbXkgYXR0ZW50aW9uIG9uIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBhbmQgd2hldGhlciB0aGVyZSBhcmUgYW55IHVuZXhwZWN0ZWQgc2lkZSBlZmZlY3RzLlxuXG5SZWdhcmRpbmcgY29uZmlndXJhdGlvbiwgSSB3b24ndCBsaXN0IGBCUEZfU1lTQ0FMTGAgYmVjYXVzZSBpdCdzIHN0YW5kYXJkIGFuZCBub3Qgc3BlY2lmaWMgdG8gdGhpcyBjaGFuZ2UuIEknbGwgbmVlZCB0byByZS1ldmFsdWF0ZSB0aGUgdHdvIGZ1bmN0aW9ucyBwcmV2aW91c2x5IG1lbnRpb25lZCwgYGlzX3BvaW50ZXJfcmVndHlwZWAgYW5kIGBfX2lzX3BvaW50ZXJfdmFsdWVgLCB0byBzZWUgd2hhdCBraW5kIG9mIGNvbmZpZ3VyYXRpb24gY2hhbmdlcyB3aWxsIGJlIG5lY2Vzc2FyeSB0byBlbnN1cmUgdGhlIHRlc3RzIGhhdmUgYWRlcXVhdGUgY292ZXJhZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg5OTEsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTE6MDA6MTkuNDE0ODA1MzNaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMjUzOTQxMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpc19wb2ludGVyX3JlZ3R5cGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuYz0zMzE1PXN0YXRpYyB1NjQgcmVnX2NvbnN0X3ZhbHVlKHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsIGJvb2wgc3VicmVnMzIpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzMxOS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MzMyMDpzdGF0aWMgYm9vbCBpc19wb2ludGVyX3JlZ3R5cGUoZW51bSBicGZfcmVnX3R5cGUgdHlwZSlcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzMyMS17XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MzMyNT1zdGF0aWMgYm9vbCBfX2lzX3BvaW50ZXJfdmFsdWUoYm9vbCBhbGxvd19wdHJfbGVha3MsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzMzMC1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MzMzMTpcXHRyZXR1cm4gaXNfcG9pbnRlcl9yZWd0eXBlKHJlZy1cXHUwMDNldHlwZSk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTMzMzItfVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTM0Mjg9c3RhdGljIGludCBjaGVja19zdGFja193cml0ZV9maXhlZF9vZmYoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0zNDU1LVxcdGlmICghZW52LVxcdTAwM2VieXBhc3Nfc3BlY192NCkge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzozNDU2OlxcdFxcdGJvb2wgc2FuaXRpemUgPSByZWcgXFx1MDAyNlxcdTAwMjYgaXNfcG9pbnRlcl9yZWd0eXBlKHJlZy1cXHUwMDNldHlwZSk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTM0NTctXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzQ5Ni1cXHRcXHRzYXZlX3JlZ2lzdGVyX3N0YXRlKGVudiwgc3RhdGUsIHNwaSwgdG1wX3JlZywgc2l6ZSk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjM0OTc6XFx0fSBlbHNlIGlmIChyZWcgXFx1MDAyNlxcdTAwMjYgaXNfcG9pbnRlcl9yZWd0eXBlKHJlZy1cXHUwMDNldHlwZSkpIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzQ5OC1cXHRcXHQvKiByZWdpc3RlciBjb250YWluaW5nIHBvaW50ZXIgaXMgYmVpbmcgc3BpbGxlZCBpbnRvIHN0YWNrICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDExOjAwOjE5LjYxNzM1MDcwM1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjQwMDY5NjI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBjaGFuZ2VzOlxuXG4qKkFuYWx5emluZyB0aGUgUmVnaXN0ZXIgVHlwZSBNb2RpZmljYXRpb24qKlxuXG5BbHJpZ2h0LCBzbyB0aGUgY29yZSBvZiB0aGlzIGNoYW5nZSBpcyBwcmV0dHkgY2xlYW4gYW5kIGRpcmVjdC4gV2UncmUgZ2V0dGluZyByaWQgb2YgdGhlIGBpc19zcGlsbGFibGVfcmVndHlwZWAgY2hlY2ssIHdoaWNoIHNlZW1zIHRvIGhhdmUgYmVlbiBhIGJpdCBvdmVybHkgcmVzdHJpY3RpdmUuIFRoZSByZXBsYWNlbWVudCwgYGlzX3BvaW50ZXJfcmVndHlwZWAsIGJvaWxzIGRvd24gdG8gYSBzaW1wbGVyIGNoZWNrOiBlbnN1cmluZyB0aGUgcmVnaXN0ZXIgdHlwZSBpc24ndCBhIGBTQ0FMQVJfVkFMVUVgIG9yIGBOT1RfSU5JVGAuIFRoYXQncyBhIGdvb2Qgc2ltcGxpZmljYXRpb24sIGZ1bmN0aW9uYWxseSBlcXVpdmFsZW50IGJ1dCBtb3JlIGVsZWdhbnQuXG5cblRoZSByZWFsIGltcGxpY2F0aW9uIGhlcmUgaXMgdGhlIHJlbGF4YXRpb24gb2YgY29uc3RyYWludHMgb24gc3BpbGxpbmcgcG9pbnRlciB0eXBlcy4gQmVmb3JlLCB0aGVyZSB3YXMgcHJvYmFibHkgYSBoYXJkY29kZWQgbGlzdCBvciBjb21wbGV4IGxvZ2ljIGRldGVybWluaW5nIHdoYXQgcG9pbnRlcnMgd2VyZSBzcGlsbGFibGUuIE5vdywgYW55IHBvaW50ZXIgdHlwZSB0aGF0ICppc24ndCogYSBwcmltaXRpdmUgc2NhbGFyIG9yIHVuaW5pdGlhbGl6ZWQgY2FuIGJlIHNwaWxsZWQgdG8gdGhlIHN0YWNrLiBUaGF0J3MgYSBkZWZpbml0ZSBpbXByb3ZlbWVudCBpbiBmbGV4aWJpbGl0eSBhbmQgc2hvdWxkIGVsaW1pbmF0ZSBzb21lIHBvdGVudGlhbCBoZWFkYWNoZXMgYW5kIGluZWZmaWNpZW5jaWVzLiBUaGlzIGNoYW5nZSBoYXMgdGhlIHBvdGVudGlhbCB0byBlbGltaW5hdGUgc29tZSBvZiB0aGUgcHJldmlvdXMgcmVnaXN0ZXIgYWxsb2NhdGlvbiBpc3N1ZXMuXG5cbknigJltIG9uIGJvYXJkIHdpdGggdGhpcyBhcHByb2FjaC4gSXQgbWFrZXMgc2Vuc2UsIGFuZCBJIGNhbiBhcHByZWNpYXRlIHRoZSBkaXJlY3RuZXNzIG9mIHRoZSB1cGRhdGVkIGxvZ2ljLiBJdCdzIHRpbWUgdG8gdGVzdCB0aGlzIGFuZCB2ZXJpZnkgdGhlIHJlc3VsdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk4OTcsIk91dHB1dFRva2VucyI6MTI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMTE6MDA6MjQuMjU3NDIzMDY3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzY2MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjaGVja19zdGFja193cml0ZV9maXhlZF9vZmZcIixcbiAgICBcImNoZWNrX3N0YWNrX3JlYWRfZml4ZWRfb2ZmXCIsXG4gICAgXCJfX2lzX3BvaW50ZXJfdmFsdWVcIixcbiAgICBcImlzX3BvaW50ZXJfcmVndHlwZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIgdG8gYWxsb3cgc3BpbGxpbmcgYW5kIGZpbGxpbmcgb2YgYWxsIHBvaW50ZXIgdHlwZXMgdG8vZnJvbSB0aGUgc3RhY2ssIHJlbW92aW5nIGEgaGFyZGNvZGVkIGxpc3Qgb2YgYWxsb3dlZCBwb2ludGVyIHR5cGVzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgQlBGIHZlcmlmaWVyIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImNoZWNrX3N0YWNrX3dyaXRlX2ZpeGVkX29mZlwiLFxuICAgIFwiY2hlY2tfc3RhY2tfcmVhZF9maXhlZF9vZmZcIixcbiAgICBcIl9faXNfcG9pbnRlcl92YWx1ZVwiLFxuICAgIFwiaXNfcG9pbnRlcl9yZWd0eXBlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciB0byBhbGxvdyBzcGlsbGluZyBhbmQgZmlsbGluZyBvZiBhbGwgcG9pbnRlciB0eXBlcyB0by9mcm9tIHRoZSBzdGFjaywgcmVtb3ZpbmcgYSBoYXJkY29kZWQgbGlzdCBvZiBhbGxvd2VkIHBvaW50ZXIgdHlwZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBCUEYgdmVyaWZpZXIgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowzwvqq[1] Phase: Succeeded StartedAt: 2026-07-08 11:00:36 +0000 UTC FinishedAt: 2026-07-08 11:00:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzwvqq[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-08 11:00:36 +0000 UTC FinishedAt: 2026-07-08 11:00:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzwvqq[2] Phase: Succeeded StartedAt: 2026-07-08 11:00:36 +0000 UTC FinishedAt: 2026-07-08 15:25:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzwvqq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"602701718649936eb287bf6c7ecf870ec54c6f71","config_name":"upstream-apparmor-kasan.config","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":["check_stack_write_fixed_off","check_stack_read_fixed_off","__is_pointer_value","is_pointer_regtype"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"602701718649936eb287bf6c7ecf870ec54c6f71","config_name":"upstream-apparmor-kasan.config","series_id":"33a3a3b2-c552-4d19-b1a0-29989d856e3c","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-08 11:00:36 +0000 UTC FinishedAt: 2026-07-08 15:25:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"602701718649936eb287bf6c7ecf870ec54c6f71","config_name":"upstream-apparmor-kasan.config","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":["check_stack_write_fixed_off","check_stack_read_fixed_off","__is_pointer_value","is_pointer_regtype"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"602701718649936eb287bf6c7ecf870ec54c6f71","config_name":"upstream-apparmor-kasan.config","series_id":"33a3a3b2-c552-4d19-b1a0-29989d856e3c","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-workflowzwvqq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"602701718649936eb287bf6c7ecf870ec54c6f71","config_name":"upstream-apparmor-kasan.config","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":["check_stack_write_fixed_off","check_stack_read_fixed_off","__is_pointer_value","is_pointer_regtype"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"602701718649936eb287bf6c7ecf870ec54c6f71","config_name":"upstream-apparmor-kasan.config","series_id":"33a3a3b2-c552-4d19-b1a0-29989d856e3c","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-08 11:00:36 +0000 UTC FinishedAt: 2026-07-08 11:01:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzwvqq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"602701718649936eb287bf6c7ecf870ec54c6f71","config_name":"upstream-apparmor-kasan.config","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":["check_stack_write_fixed_off","check_stack_read_fixed_off","__is_pointer_value","is_pointer_regtype"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"602701718649936eb287bf6c7ecf870ec54c6f71","config_name":"upstream-apparmor-kasan.config","series_id":"33a3a3b2-c552-4d19-b1a0-29989d856e3c","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-08 11:00:36 +0000 UTC FinishedAt: 2026-07-08 11:00:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"602701718649936eb287bf6c7ecf870ec54c6f71","config_name":"upstream-apparmor-kasan.config","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-workflowzwvqq/series-workflowzwvqq-convert-artifact-2898660564/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzwvqq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"602701718649936eb287bf6c7ecf870ec54c6f71","config_name":"upstream-apparmor-kasan.config","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":["check_stack_write_fixed_off","check_stack_read_fixed_off","__is_pointer_value","is_pointer_regtype"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"602701718649936eb287bf6c7ecf870ec54c6f71","config_name":"upstream-apparmor-kasan.config","series_id":"33a3a3b2-c552-4d19-b1a0-29989d856e3c","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-08 11:01:09 +0000 UTC FinishedAt: 2026-07-08 11:35:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzwvqq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"602701718649936eb287bf6c7ecf870ec54c6f71","config_name":"upstream-apparmor-kasan.config","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":["check_stack_write_fixed_off","check_stack_read_fixed_off","__is_pointer_value","is_pointer_regtype"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"602701718649936eb287bf6c7ecf870ec54c6f71","config_name":"upstream-apparmor-kasan.config","series_id":"33a3a3b2-c552-4d19-b1a0-29989d856e3c","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-08 11:01:09 +0000 UTC FinishedAt: 2026-07-08 11:35:25 +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:*283b2a0e-d3de-4f29-8ae1-ea94248a130c,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-workflowzwvqq/series-workflowzwvqq-convert-artifact-2898660564/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": "54e42cb5-b1ae-4c2d-b11d-8e0967c8016d", "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-workflowzwvqq/series-workflowzwvqq-build-action-755910738/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzwvqq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"602701718649936eb287bf6c7ecf870ec54c6f71","config_name":"upstream-apparmor-kasan.config","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":["check_stack_write_fixed_off","check_stack_read_fixed_off","__is_pointer_value","is_pointer_regtype"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"602701718649936eb287bf6c7ecf870ec54c6f71","config_name":"upstream-apparmor-kasan.config","series_id":"33a3a3b2-c552-4d19-b1a0-29989d856e3c","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-08 11:01:09 +0000 UTC FinishedAt: 2026-07-08 11:35:10 +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:*283b2a0e-d3de-4f29-8ae1-ea94248a130c,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-workflowzwvqq/series-workflowzwvqq-convert-artifact-2898660564/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": "54e42cb5-b1ae-4c2d-b11d-8e0967c8016d", "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-workflowzwvqq/series-workflowzwvqq-build-action-755910738/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzwvqq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"602701718649936eb287bf6c7ecf870ec54c6f71","config_name":"upstream-apparmor-kasan.config","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":["check_stack_write_fixed_off","check_stack_read_fixed_off","__is_pointer_value","is_pointer_regtype"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"602701718649936eb287bf6c7ecf870ec54c6f71","config_name":"upstream-apparmor-kasan.config","series_id":"33a3a3b2-c552-4d19-b1a0-29989d856e3c","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-08 11:35:25 +0000 UTC FinishedAt: 2026-07-08 11:35:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzwvqq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"602701718649936eb287bf6c7ecf870ec54c6f71","config_name":"upstream-apparmor-kasan.config","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":["check_stack_write_fixed_off","check_stack_read_fixed_off","__is_pointer_value","is_pointer_regtype"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"602701718649936eb287bf6c7ecf870ec54c6f71","config_name":"upstream-apparmor-kasan.config","series_id":"33a3a3b2-c552-4d19-b1a0-29989d856e3c","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-08 11:35:25 +0000 UTC FinishedAt: 2026-07-08 11:35:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzwvqq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"602701718649936eb287bf6c7ecf870ec54c6f71","config_name":"upstream-apparmor-kasan.config","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":["check_stack_write_fixed_off","check_stack_read_fixed_off","__is_pointer_value","is_pointer_regtype"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"602701718649936eb287bf6c7ecf870ec54c6f71","config_name":"upstream-apparmor-kasan.config","series_id":"33a3a3b2-c552-4d19-b1a0-29989d856e3c","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-08 11:35:25 +0000 UTC FinishedAt: 2026-07-08 11:37:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzwvqq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"602701718649936eb287bf6c7ecf870ec54c6f71","config_name":"upstream-apparmor-kasan.config","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":["check_stack_write_fixed_off","check_stack_read_fixed_off","__is_pointer_value","is_pointer_regtype"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"602701718649936eb287bf6c7ecf870ec54c6f71","config_name":"upstream-apparmor-kasan.config","series_id":"33a3a3b2-c552-4d19-b1a0-29989d856e3c","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-08 11:35:25 +0000 UTC FinishedAt: 2026-07-08 11:35:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"602701718649936eb287bf6c7ecf870ec54c6f71","config_name":"upstream-apparmor-kasan.config","series_id":"33a3a3b2-c552-4d19-b1a0-29989d856e3c","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-workflowzwvqq/series-workflowzwvqq-convert-artifact-1601148051/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzwvqq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"602701718649936eb287bf6c7ecf870ec54c6f71","config_name":"upstream-apparmor-kasan.config","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":["check_stack_write_fixed_off","check_stack_read_fixed_off","__is_pointer_value","is_pointer_regtype"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"602701718649936eb287bf6c7ecf870ec54c6f71","config_name":"upstream-apparmor-kasan.config","series_id":"33a3a3b2-c552-4d19-b1a0-29989d856e3c","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-08 11:37:25 +0000 UTC FinishedAt: 2026-07-08 11:39:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzwvqq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"602701718649936eb287bf6c7ecf870ec54c6f71","config_name":"upstream-apparmor-kasan.config","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":["check_stack_write_fixed_off","check_stack_read_fixed_off","__is_pointer_value","is_pointer_regtype"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"602701718649936eb287bf6c7ecf870ec54c6f71","config_name":"upstream-apparmor-kasan.config","series_id":"33a3a3b2-c552-4d19-b1a0-29989d856e3c","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-08 11:37:25 +0000 UTC FinishedAt: 2026-07-08 11:39:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*54e42cb5-b1ae-4c2d-b11d-8e0967c8016d,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-workflowzwvqq/series-workflowzwvqq-build-action-755910738/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-workflowzwvqq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"602701718649936eb287bf6c7ecf870ec54c6f71","config_name":"upstream-apparmor-kasan.config","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":["check_stack_write_fixed_off","check_stack_read_fixed_off","__is_pointer_value","is_pointer_regtype"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"602701718649936eb287bf6c7ecf870ec54c6f71","config_name":"upstream-apparmor-kasan.config","series_id":"33a3a3b2-c552-4d19-b1a0-29989d856e3c","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-08 11:39:40 +0000 UTC FinishedAt: 2026-07-08 11:39:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzwvqq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"602701718649936eb287bf6c7ecf870ec54c6f71","config_name":"upstream-apparmor-kasan.config","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":["check_stack_write_fixed_off","check_stack_read_fixed_off","__is_pointer_value","is_pointer_regtype"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"602701718649936eb287bf6c7ecf870ec54c6f71","config_name":"upstream-apparmor-kasan.config","series_id":"33a3a3b2-c552-4d19-b1a0-29989d856e3c","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-08 11:39:40 +0000 UTC FinishedAt: 2026-07-08 11:39:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzwvqq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"602701718649936eb287bf6c7ecf870ec54c6f71","config_name":"upstream-apparmor-kasan.config","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":["check_stack_write_fixed_off","check_stack_read_fixed_off","__is_pointer_value","is_pointer_regtype"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"602701718649936eb287bf6c7ecf870ec54c6f71","config_name":"upstream-apparmor-kasan.config","series_id":"33a3a3b2-c552-4d19-b1a0-29989d856e3c","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-08 11:39:40 +0000 UTC FinishedAt: 2026-07-08 12:21:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzwvqq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"602701718649936eb287bf6c7ecf870ec54c6f71","config_name":"upstream-apparmor-kasan.config","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":["check_stack_write_fixed_off","check_stack_read_fixed_off","__is_pointer_value","is_pointer_regtype"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"602701718649936eb287bf6c7ecf870ec54c6f71","config_name":"upstream-apparmor-kasan.config","series_id":"33a3a3b2-c552-4d19-b1a0-29989d856e3c","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-08 11:39:40 +0000 UTC FinishedAt: 2026-07-08 12:21:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*283b2a0e-d3de-4f29-8ae1-ea94248a130c,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-workflowzwvqq/series-workflowzwvqq-convert-artifact-1601148051/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": "fe23d0bd-4993-47c9-84b3-f74dd997075c", "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-workflowzwvqq/series-workflowzwvqq-build-action-961440455/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzwvqq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"602701718649936eb287bf6c7ecf870ec54c6f71","config_name":"upstream-apparmor-kasan.config","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":["check_stack_write_fixed_off","check_stack_read_fixed_off","__is_pointer_value","is_pointer_regtype"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"602701718649936eb287bf6c7ecf870ec54c6f71","config_name":"upstream-apparmor-kasan.config","series_id":"33a3a3b2-c552-4d19-b1a0-29989d856e3c","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-08 11:39:40 +0000 UTC FinishedAt: 2026-07-08 12:20:50 +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:*283b2a0e-d3de-4f29-8ae1-ea94248a130c,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-workflowzwvqq/series-workflowzwvqq-convert-artifact-1601148051/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": "fe23d0bd-4993-47c9-84b3-f74dd997075c", "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-workflowzwvqq/series-workflowzwvqq-build-action-961440455/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzwvqq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"602701718649936eb287bf6c7ecf870ec54c6f71","config_name":"upstream-apparmor-kasan.config","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":["check_stack_write_fixed_off","check_stack_read_fixed_off","__is_pointer_value","is_pointer_regtype"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"602701718649936eb287bf6c7ecf870ec54c6f71","config_name":"upstream-apparmor-kasan.config","series_id":"33a3a3b2-c552-4d19-b1a0-29989d856e3c","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-08 12:21:00 +0000 UTC FinishedAt: 2026-07-08 12:21:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzwvqq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"602701718649936eb287bf6c7ecf870ec54c6f71","config_name":"upstream-apparmor-kasan.config","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":["check_stack_write_fixed_off","check_stack_read_fixed_off","__is_pointer_value","is_pointer_regtype"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"602701718649936eb287bf6c7ecf870ec54c6f71","config_name":"upstream-apparmor-kasan.config","series_id":"33a3a3b2-c552-4d19-b1a0-29989d856e3c","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-08 12:21:00 +0000 UTC FinishedAt: 2026-07-08 12:21:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzwvqq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"602701718649936eb287bf6c7ecf870ec54c6f71","config_name":"upstream-apparmor-kasan.config","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":["check_stack_write_fixed_off","check_stack_read_fixed_off","__is_pointer_value","is_pointer_regtype"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"602701718649936eb287bf6c7ecf870ec54c6f71","config_name":"upstream-apparmor-kasan.config","series_id":"33a3a3b2-c552-4d19-b1a0-29989d856e3c","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-08 12:21:00 +0000 UTC FinishedAt: 2026-07-08 12:23:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzwvqq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"602701718649936eb287bf6c7ecf870ec54c6f71","config_name":"upstream-apparmor-kasan.config","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":["check_stack_write_fixed_off","check_stack_read_fixed_off","__is_pointer_value","is_pointer_regtype"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"602701718649936eb287bf6c7ecf870ec54c6f71","config_name":"upstream-apparmor-kasan.config","series_id":"33a3a3b2-c552-4d19-b1a0-29989d856e3c","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-08 12:21:00 +0000 UTC FinishedAt: 2026-07-08 12:23:07 +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:*fe23d0bd-4993-47c9-84b3-f74dd997075c,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-workflowzwvqq/series-workflowzwvqq-build-action-961440455/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-workflowzwvqq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"602701718649936eb287bf6c7ecf870ec54c6f71","config_name":"upstream-apparmor-kasan.config","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":["check_stack_write_fixed_off","check_stack_read_fixed_off","__is_pointer_value","is_pointer_regtype"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"602701718649936eb287bf6c7ecf870ec54c6f71","config_name":"upstream-apparmor-kasan.config","series_id":"33a3a3b2-c552-4d19-b1a0-29989d856e3c","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-08 12:23:17 +0000 UTC FinishedAt: 2026-07-08 15:25:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzwvqq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"602701718649936eb287bf6c7ecf870ec54c6f71","config_name":"upstream-apparmor-kasan.config","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":["check_stack_write_fixed_off","check_stack_read_fixed_off","__is_pointer_value","is_pointer_regtype"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"602701718649936eb287bf6c7ecf870ec54c6f71","config_name":"upstream-apparmor-kasan.config","series_id":"33a3a3b2-c552-4d19-b1a0-29989d856e3c","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-08 12:23:17 +0000 UTC FinishedAt: 2026-07-08 15:25:15 +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":["check_stack_write_fixed_off","check_stack_read_fixed_off","__is_pointer_value","is_pointer_regtype"],"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:*54e42cb5-b1ae-4c2d-b11d-8e0967c8016d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*fe23d0bd-4993-47c9-84b3-f74dd997075c,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-workflowzwvqq/series-workflowzwvqq-build-action-755910738/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-workflowzwvqq/series-workflowzwvqq-build-action-961440455/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowzwvqq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"602701718649936eb287bf6c7ecf870ec54c6f71","config_name":"upstream-apparmor-kasan.config","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":["check_stack_write_fixed_off","check_stack_read_fixed_off","__is_pointer_value","is_pointer_regtype"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"602701718649936eb287bf6c7ecf870ec54c6f71","config_name":"upstream-apparmor-kasan.config","series_id":"33a3a3b2-c552-4d19-b1a0-29989d856e3c","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-08 12:23:17 +0000 UTC FinishedAt: 2026-07-08 12:23:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzwvqq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"602701718649936eb287bf6c7ecf870ec54c6f71","config_name":"upstream-apparmor-kasan.config","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":["check_stack_write_fixed_off","check_stack_read_fixed_off","__is_pointer_value","is_pointer_regtype"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"602701718649936eb287bf6c7ecf870ec54c6f71","config_name":"upstream-apparmor-kasan.config","series_id":"33a3a3b2-c552-4d19-b1a0-29989d856e3c","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-08 12:23:17 +0000 UTC FinishedAt: 2026-07-08 12:23:21 +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":["check_stack_write_fixed_off","check_stack_read_fixed_off","__is_pointer_value","is_pointer_regtype"],"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-workflowzwvqq/series-workflowzwvqq-convert-artifact-2651969804/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzwvqq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"602701718649936eb287bf6c7ecf870ec54c6f71","config_name":"upstream-apparmor-kasan.config","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":["check_stack_write_fixed_off","check_stack_read_fixed_off","__is_pointer_value","is_pointer_regtype"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"602701718649936eb287bf6c7ecf870ec54c6f71","config_name":"upstream-apparmor-kasan.config","series_id":"33a3a3b2-c552-4d19-b1a0-29989d856e3c","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-08 12:23:17 +0000 UTC FinishedAt: 2026-07-08 12:23:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzwvqq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"602701718649936eb287bf6c7ecf870ec54c6f71","config_name":"upstream-apparmor-kasan.config","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":["check_stack_write_fixed_off","check_stack_read_fixed_off","__is_pointer_value","is_pointer_regtype"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"602701718649936eb287bf6c7ecf870ec54c6f71","config_name":"upstream-apparmor-kasan.config","series_id":"33a3a3b2-c552-4d19-b1a0-29989d856e3c","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-08 12:23:17 +0000 UTC FinishedAt: 2026-07-08 12:23:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzwvqq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"602701718649936eb287bf6c7ecf870ec54c6f71","config_name":"upstream-apparmor-kasan.config","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":["check_stack_write_fixed_off","check_stack_read_fixed_off","__is_pointer_value","is_pointer_regtype"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"602701718649936eb287bf6c7ecf870ec54c6f71","config_name":"upstream-apparmor-kasan.config","series_id":"33a3a3b2-c552-4d19-b1a0-29989d856e3c","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-08 12:23:17 +0000 UTC FinishedAt: 2026-07-08 12:23:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzwvqq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"602701718649936eb287bf6c7ecf870ec54c6f71","config_name":"upstream-apparmor-kasan.config","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":["check_stack_write_fixed_off","check_stack_read_fixed_off","__is_pointer_value","is_pointer_regtype"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"602701718649936eb287bf6c7ecf870ec54c6f71","config_name":"upstream-apparmor-kasan.config","series_id":"33a3a3b2-c552-4d19-b1a0-29989d856e3c","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-08 12:23:27 +0000 UTC FinishedAt: 2026-07-08 15:25:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzwvqq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"602701718649936eb287bf6c7ecf870ec54c6f71","config_name":"upstream-apparmor-kasan.config","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":["check_stack_write_fixed_off","check_stack_read_fixed_off","__is_pointer_value","is_pointer_regtype"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"602701718649936eb287bf6c7ecf870ec54c6f71","config_name":"upstream-apparmor-kasan.config","series_id":"33a3a3b2-c552-4d19-b1a0-29989d856e3c","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-08 12:23:27 +0000 UTC FinishedAt: 2026-07-08 15:25:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*54e42cb5-b1ae-4c2d-b11d-8e0967c8016d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*fe23d0bd-4993-47c9-84b3-f74dd997075c,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-workflowzwvqq/series-workflowzwvqq-build-action-755910738/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-workflowzwvqq/series-workflowzwvqq-build-action-961440455/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-workflowzwvqq/series-workflowzwvqq-convert-artifact-2651969804/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,}