Name: series-workflowfv8jw Phase: Succeeded StartedAt: 2026-08-03 20:20:48 +0000 UTC FinishedAt: 2026-08-03 22:06:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfv8jw[0] Phase: Succeeded StartedAt: 2026-08-03 20:20:48 +0000 UTC FinishedAt: 2026-08-03 20:23:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfv8jw[0].run-triage Phase: Succeeded StartedAt: 2026-08-03 20:20:48 +0000 UTC FinishedAt: 2026-08-03 20:23:30 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "e5fd3f514e27db1f05fbd72ba615d74941e23c51", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "FS_VERITY", "BPF_SYSCALL", "BPF_LSM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "e5fd3f514e27db1f05fbd72ba615d74941e23c51", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "FS_VERITY", "BPF_SYSCALL", "BPF_LSM" ], "series_id": "5ce54779-e8d8-4437-8b8e-0928a69752e9" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "bpf_get_fsverity_digest" ], "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+CgkJCTx0ZD4yMDI2LzA4LzAzIDIwOjIyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0ZTX1ZFUklUWSYjMzQ7LAogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtCUEZfTFNNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2dldF9mc3Zlcml0eV9kaWdlc3QmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gaW50ZWdlciBvdmVyZmxvdyBhbmQgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2VzcyBpbiB0aGUgYGJwZl9nZXRfZnN2ZXJpdHlfZGlnZXN0YCBCUEYga2Z1bmMgYnkgY2hhbmdpbmcgc2l6ZSB2YXJpYWJsZXMgdG8gYHU2NGAgYW5kIGFkZGluZyBhIHByb3BlciBib3VuZHMgY2hlY2suIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBhIHJlYWNoYWJsZSBCUEYgQVBJLCBtYWtpbmcgaXQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAyMDoyMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDAwNzBmOWY0OGIzZmQ4MmIxNWI1YWZlODUzMjg3OGNjMjc4OWU4ZjFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzIDIwOjIyOjIyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL3Zlcml0eS9tZWFzdXJlLmMgYi9mcy92ZXJpdHkvbWVhc3VyZS5jXG5pbmRleCBjZmUyZDVlNTM1Zjk2Li42OGRmY2NiNjk3NzIwIDEwMDY0NFxuLS0tIGEvZnMvdmVyaXR5L21lYXN1cmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvdmVyaXR5L21lYXN1cmUuY1xuQEAgLTEyMiwxMSAmIzQzOzEyMiwxMSBAQCBfX2JwZl9rZnVuYyBpbnQgYnBmX2dldF9mc3Zlcml0eV9kaWdlc3Qoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IHN0cnVjdCBicGZfZHlucFxuIHtcbiBcdGNvbnN0IHN0cnVjdCBicGZfZHlucHRyX2tlcm4gKmRpZ2VzdF9wdHIgPSAoc3RydWN0IGJwZl9keW5wdHJfa2VybiAqKWRpZ2VzdF9wO1xuIFx0Y29uc3Qgc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoZmlsZSk7XG4tXHR1MzIgZHlucHRyX3N6ID0gX19icGZfZHlucHRyX3NpemUoZGlnZXN0X3B0cik7XG4mIzQzO1x0dTY0IGR5bnB0cl9zeiA9IF9fYnBmX2R5bnB0cl9zaXplKGRpZ2VzdF9wdHIpO1xuIFx0c3RydWN0IGZzdmVyaXR5X2RpZ2VzdCAqYXJnO1xuIFx0Y29uc3Qgc3RydWN0IGZzdmVyaXR5X2luZm8gKnZpO1xuIFx0Y29uc3Qgc3RydWN0IGZzdmVyaXR5X2hhc2hfYWxnICpoYXNoX2FsZztcbi1cdGludCBvdXRfZGlnZXN0X3N6O1xuJiM0MztcdHU2NCBvdXRfZGlnZXN0X3N6O1xuIFxuIFx0aWYgKGR5bnB0cl9zeiBcdTAwM2Mgc2l6ZW9mKHN0cnVjdCBmc3Zlcml0eV9kaWdlc3QpKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbkBAIC0xNDQsMTcgJiM0MzsxNDQsMjAgQEAgX19icGZfa2Z1bmMgaW50IGJwZl9nZXRfZnN2ZXJpdHlfZGlnZXN0KHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBzdHJ1Y3QgYnBmX2R5bnBcbiBcbiBcdGhhc2hfYWxnID0gdmktXHUwMDNldHJlZV9wYXJhbXMuaGFzaF9hbGc7XG4gXG4mIzQzO1x0b3V0X2RpZ2VzdF9zeiA9IGR5bnB0cl9zeiAtIHNpemVvZihzdHJ1Y3QgZnN2ZXJpdHlfZGlnZXN0KTtcbiYjNDM7XHRpZiAob3V0X2RpZ2VzdF9zeiBcdTAwM2MgaGFzaF9hbGctXHUwMDNlZGlnZXN0X3NpemUpXG4mIzQzO1x0XHRyZXR1cm4gLUVPVkVSRkxPVztcbiYjNDM7XG4gXHRhcmctXHUwMDNlZGlnZXN0X2FsZ29yaXRobSA9IGhhc2hfYWxnIC0gZnN2ZXJpdHlfaGFzaF9hbGdzO1xuIFx0YXJnLVx1MDAzZWRpZ2VzdF9zaXplID0gaGFzaF9hbGctXHUwMDNlZGlnZXN0X3NpemU7XG4gXG4tXHRvdXRfZGlnZXN0X3N6ID0gZHlucHRyX3N6IC0gc2l6ZW9mKHN0cnVjdCBmc3Zlcml0eV9kaWdlc3QpO1xuLVxuIFx0LyogY29weSBkaWdlc3QgKi9cbi1cdG1lbWNweShhcmctXHUwMDNlZGlnZXN0LCB2aS1cdTAwM2VmaWxlX2RpZ2VzdCwgIG1pbl90KGludCwgaGFzaF9hbGctXHUwMDNlZGlnZXN0X3NpemUsIG91dF9kaWdlc3Rfc3opKTtcbiYjNDM7XHRtZW1jcHkoYXJnLVx1MDAzZWRpZ2VzdCwgdmktXHUwMDNlZmlsZV9kaWdlc3QsIGhhc2hfYWxnLVx1MDAzZWRpZ2VzdF9zaXplKTtcbiBcbiBcdC8qIGZpbGwgdGhlIGV4dHJhIGJ1ZmZlciB3aXRoIHplcm9zICovXG4gXHRpZiAob3V0X2RpZ2VzdF9zeiBcdTAwM2UgaGFzaF9hbGctXHUwMDNlZGlnZXN0X3NpemUpXG4tXHRcdG1lbXNldChhcmctXHUwMDNlZGlnZXN0ICYjNDM7IGFyZy1cdTAwM2VkaWdlc3Rfc2l6ZSwgMCwgb3V0X2RpZ2VzdF9zeiAtIGhhc2hfYWxnLVx1MDAzZWRpZ2VzdF9zaXplKTtcbiYjNDM7XHRcdG1lbXNldChhcmctXHUwMDNlZGlnZXN0ICYjNDM7IGhhc2hfYWxnLVx1MDAzZWRpZ2VzdF9zaXplLCAwLFxuJiM0MztcdFx0ICAgICAgIG91dF9kaWdlc3Rfc3ogLSBoYXNoX2FsZy1cdTAwM2VkaWdlc3Rfc2l6ZSk7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMjA6MjI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0ZTX1ZFUklUWSYjMzQ7LAogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtCUEZfTFNNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2dldF9mc3Zlcml0eV9kaWdlc3QmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gaW50ZWdlciBvdmVyZmxvdyBhbmQgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2VzcyBpbiB0aGUgYGJwZl9nZXRfZnN2ZXJpdHlfZGlnZXN0YCBCUEYga2Z1bmMgYnkgY2hhbmdpbmcgc2l6ZSB2YXJpYWJsZXMgdG8gYHU2NGAgYW5kIGFkZGluZyBhIHByb3BlciBib3VuZHMgY2hlY2suIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBhIHJlYWNoYWJsZSBCUEYgQVBJLCBtYWtpbmcgaXQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDAwNzBmOWY0OGIzZmQ4MmIxNWI1YWZlODUzMjg3OGNjMjc4OWU4ZjEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAzIDIwOjIyOjIyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvdmVyaXR5L21lYXN1cmUuYyBiL2ZzL3Zlcml0eS9tZWFzdXJlLmMKaW5kZXggY2ZlMmQ1ZTUzNWY5Ni4uNjhkZmNjYjY5NzcyMCAxMDA2NDQKLS0tIGEvZnMvdmVyaXR5L21lYXN1cmUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy92ZXJpdHkvbWVhc3VyZS5jCkBAIC0xMjIsMTEgJiM0MzsxMjIsMTEgQEAgX19icGZfa2Z1bmMgaW50IGJwZl9nZXRfZnN2ZXJpdHlfZGlnZXN0KHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBzdHJ1Y3QgYnBmX2R5bnAKIHsKIAljb25zdCBzdHJ1Y3QgYnBmX2R5bnB0cl9rZXJuICpkaWdlc3RfcHRyID0gKHN0cnVjdCBicGZfZHlucHRyX2tlcm4gKilkaWdlc3RfcDsKIAljb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShmaWxlKTsKLQl1MzIgZHlucHRyX3N6ID0gX19icGZfZHlucHRyX3NpemUoZGlnZXN0X3B0cik7CiYjNDM7CXU2NCBkeW5wdHJfc3ogPSBfX2JwZl9keW5wdHJfc2l6ZShkaWdlc3RfcHRyKTsKIAlzdHJ1Y3QgZnN2ZXJpdHlfZGlnZXN0ICphcmc7CiAJY29uc3Qgc3RydWN0IGZzdmVyaXR5X2luZm8gKnZpOwogCWNvbnN0IHN0cnVjdCBmc3Zlcml0eV9oYXNoX2FsZyAqaGFzaF9hbGc7Ci0JaW50IG91dF9kaWdlc3Rfc3o7CiYjNDM7CXU2NCBvdXRfZGlnZXN0X3N6OwogCiAJaWYgKGR5bnB0cl9zeiAmbHQ7IHNpemVvZihzdHJ1Y3QgZnN2ZXJpdHlfZGlnZXN0KSkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xNDQsMTcgJiM0MzsxNDQsMjAgQEAgX19icGZfa2Z1bmMgaW50IGJwZl9nZXRfZnN2ZXJpdHlfZGlnZXN0KHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBzdHJ1Y3QgYnBmX2R5bnAKIAogCWhhc2hfYWxnID0gdmktJmd0O3RyZWVfcGFyYW1zLmhhc2hfYWxnOwogCiYjNDM7CW91dF9kaWdlc3Rfc3ogPSBkeW5wdHJfc3ogLSBzaXplb2Yoc3RydWN0IGZzdmVyaXR5X2RpZ2VzdCk7CiYjNDM7CWlmIChvdXRfZGlnZXN0X3N6ICZsdDsgaGFzaF9hbGctJmd0O2RpZ2VzdF9zaXplKQomIzQzOwkJcmV0dXJuIC1FT1ZFUkZMT1c7CiYjNDM7CiAJYXJnLSZndDtkaWdlc3RfYWxnb3JpdGhtID0gaGFzaF9hbGcgLSBmc3Zlcml0eV9oYXNoX2FsZ3M7CiAJYXJnLSZndDtkaWdlc3Rfc2l6ZSA9IGhhc2hfYWxnLSZndDtkaWdlc3Rfc2l6ZTsKIAotCW91dF9kaWdlc3Rfc3ogPSBkeW5wdHJfc3ogLSBzaXplb2Yoc3RydWN0IGZzdmVyaXR5X2RpZ2VzdCk7Ci0KIAkvKiBjb3B5IGRpZ2VzdCAqLwotCW1lbWNweShhcmctJmd0O2RpZ2VzdCwgdmktJmd0O2ZpbGVfZGlnZXN0LCAgbWluX3QoaW50LCBoYXNoX2FsZy0mZ3Q7ZGlnZXN0X3NpemUsIG91dF9kaWdlc3Rfc3opKTsKJiM0MzsJbWVtY3B5KGFyZy0mZ3Q7ZGlnZXN0LCB2aS0mZ3Q7ZmlsZV9kaWdlc3QsIGhhc2hfYWxnLSZndDtkaWdlc3Rfc2l6ZSk7CiAKIAkvKiBmaWxsIHRoZSBleHRyYSBidWZmZXIgd2l0aCB6ZXJvcyAqLwogCWlmIChvdXRfZGlnZXN0X3N6ICZndDsgaGFzaF9hbGctJmd0O2RpZ2VzdF9zaXplKQotCQltZW1zZXQoYXJnLSZndDtkaWdlc3QgJiM0MzsgYXJnLSZndDtkaWdlc3Rfc2l6ZSwgMCwgb3V0X2RpZ2VzdF9zeiAtIGhhc2hfYWxnLSZndDtkaWdlc3Rfc2l6ZSk7CiYjNDM7CQltZW1zZXQoYXJnLSZndDtkaWdlc3QgJiM0MzsgaGFzaF9hbGctJmd0O2RpZ2VzdF9zaXplLCAwLAomIzQzOwkJICAgICAgIG91dF9kaWdlc3Rfc3ogLSBoYXNoX2FsZy0mZ3Q7ZGlnZXN0X3NpemUpOwogCiAJcmV0dXJuIDA7CiB9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDIwOjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1MjgKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAyMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgZnMvdmVyaXR5L21lYXN1cmUuY2AgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBmcy92ZXJpdHkvbWVhc3VyZS5jYCBhbmQgaW1tZWRpYXRlbHkgSSBzZWUgdGhhdCB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGBicGZfZ2V0X2ZzdmVyaXR5X2RpZ2VzdGAuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgYnVtcGluZyB0aGUgZGF0YSB0eXBlcyBvZiBgZHlucHRyX3N6YCBhbmQgYG91dF9kaWdlc3Rfc3pgIGZyb20gYHUzMmAgYW5kIGBpbnRgIHRvIGB1NjRgLiBUaGlzIHByb2JhYmx5IG1lYW5zIHdlJiMzOTtyZSBhbnRpY2lwYXRpbmcgc2lnbmlmaWNhbnRseSBsYXJnZXIgZGlnZXN0IHNpemVzIG9yIHBvdGVudGlhbGx5IHdvcmtpbmcgd2l0aCBtdWNoIGxhcmdlciBmaWxlIHNpemVzLCByZXF1aXJpbmcgbW9yZSBiaXRzIGZvciBhY2N1cmF0ZSByZXByZXNlbnRhdGlvbi4KClRoZSBwYXRjaCBhbHNvIHR3ZWFrcyB0aGUgc2l6ZSBjaGVjay4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBub3cgZXhwbGljaXRseSBjaGVja2luZyBpZiBgb3V0X2RpZ2VzdF9zemAgaXMgKmxlc3MgdGhhbiogYGhhc2hfYWxnLSZndDtkaWdlc3Rfc2l6ZWAgYW5kIHJldHVybmluZyBgLUVPVkVSRkxPV2AgaW4gdGhhdCBjYXNlLCB3aGljaCBpcyBhIGdvb2QgZGVmZW5zaXZlIHByb2dyYW1taW5nIG1lYXN1cmUuIFByZXZpb3VzbHkgdGhlcmUgd2FzIGFuIGltcGxpY2l0IGNoZWNrLiBUaGlzIGxpa2VseSBwcmV2ZW50cyB1bmRlcmZsb3cgaXNzdWVzIGR1cmluZyBkaWdlc3QgY29tcGFyaXNvbi4KCkZ1cnRoZXJtb3JlLCB0aGUgYG1lbWNweWAgYW5kIGBtZW1zZXRgIG9wZXJhdGlvbnMgYXJlIGJlaW5nIHVwZGF0ZWQgdG8gZGlyZWN0bHkgdXNlIGBoYXNoX2FsZy0mZ3Q7ZGlnZXN0X3NpemVgIGluc3RlYWQgb2YgdGhlIGBtaW5fdGAgZnVuY3Rpb24uIFRoaXMgc2ltcGxpZmljYXRpb24gaXMgZ29vZCwgYXMgaXQgc3VnZ2VzdHMgdGhlIHBhdGNoIGNvcnJlY3RseSBjYWxjdWxhdGVzIHRoZSBjb3JyZWN0IGJ1ZmZlciBzaXplIHRvIGF2b2lkIGFueSBwb3RlbnRpYWwgYnVmZmVyIG92ZXJmbG93cy4gTm8gbW9yZSBtaW4gY2FsbHMhIFRoaXMgaXMgYW4gb3B0aW1pemF0aW9uIGFuZCBhbiBpbXByb3ZlbWVudCBpbiB0aGUgbG9naWMgYXMgd2VsbC4KCk5vdywgYmVmb3JlIEkgZGlnIGRlZXBlciBpbnRvIHRoZSBjb2RlIGl0c2VsZiwgSSBzaG91bGQgbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIExldCYjMzk7cyBzZWUuLi4gYGZzL3Zlcml0eS9tZWFzdXJlLmNgIGlzIGRlZmluaXRlbHkgcGFydCBvZiBgRlNfVkVSSVRZYCwgd2hpY2ggaXMgb2J2aW91cy4gSSBuZWVkIHRvIGdyZXAgZm9yIGBicGZfZ2V0X2ZzdmVyaXR5X2RpZ2VzdGAgdG8gZmluZCBhbnkgb3RoZXIgdXNhZ2VzIG9yIHJlZmVyZW5jZXMuIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoaXMgZnVuY3Rpb24gaXMgdXNlZCBhbmQgd2hhdCBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtIGFyZSBhZmZlY3RlZCBieSB0aGVzZSBjaGFuZ2VzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYmlnIHBpY3R1cmUhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMjA6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2dldF9mc3Zlcml0eV9kaWdlc3QmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9icGYvZnNfa2Z1bmNzLnJzdD0xMD1CUEYga2Z1bmNzIGNhbiBiZSB1c2VkIHRvIGdldCB0aGVzZSBkYXRhLlxuLS1cbkRvY3VtZW50YXRpb24vYnBmL2ZzX2tmdW5jcy5yc3QtMTMtXG5Eb2N1bWVudGF0aW9uL2JwZi9mc19rZnVuY3MucnN0OjE0OiAqIGBgYnBmX2dldF9mc3Zlcml0eV9kaWdlc3QoKWBgXG5Eb2N1bWVudGF0aW9uL2JwZi9mc19rZnVuY3MucnN0LTE1LVxuLS1cbmZzL3Zlcml0eS9tZWFzdXJlLmM9MTEwPV9fYnBmX2tmdW5jX3N0YXJ0X2RlZnMoKTtcbi0tXG5mcy92ZXJpdHkvbWVhc3VyZS5jLTExMi0vKipcbmZzL3Zlcml0eS9tZWFzdXJlLmM6MTEzOiAqIGJwZl9nZXRfZnN2ZXJpdHlfZGlnZXN0OiByZWFkIGZzdmVyaXR5IGRpZ2VzdCBvZiBmaWxlXG5mcy92ZXJpdHkvbWVhc3VyZS5jLTExNC0gKiBAZmlsZTogZmlsZSB0byBnZXQgZGlnZXN0IGZyb21cbi0tXG5mcy92ZXJpdHkvbWVhc3VyZS5jLTEyMC0gKi9cbmZzL3Zlcml0eS9tZWFzdXJlLmM6MTIxOl9fYnBmX2tmdW5jIGludCBicGZfZ2V0X2ZzdmVyaXR5X2RpZ2VzdChzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3Qgc3RydWN0IGJwZl9keW5wdHIgKmRpZ2VzdF9wKVxuZnMvdmVyaXR5L21lYXN1cmUuYy0xMjIte1xuLS1cbmZzL3Zlcml0eS9tZWFzdXJlLmM9MTY3PUJURl9LRlVOQ1NfU1RBUlQoZnN2ZXJpdHlfc2V0X2lkcylcbmZzL3Zlcml0eS9tZWFzdXJlLmM6MTY4OkJURl9JRF9GTEFHUyhmdW5jLCBicGZfZ2V0X2ZzdmVyaXR5X2RpZ2VzdClcbmZzL3Zlcml0eS9tZWFzdXJlLmMtMTY5LUJURl9LRlVOQ1NfRU5EKGZzdmVyaXR5X3NldF9pZHMpXG5mcy92ZXJpdHkvbWVhc3VyZS5jLTE3MC1cbmZzL3Zlcml0eS9tZWFzdXJlLmM6MTcxOnN0YXRpYyBpbnQgYnBmX2dldF9mc3Zlcml0eV9kaWdlc3RfZmlsdGVyKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyIGtmdW5jX2lkKVxuZnMvdmVyaXR5L21lYXN1cmUuYy0xNzIte1xuLS1cbmZzL3Zlcml0eS9tZWFzdXJlLmM9MTgwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnRmX2tmdW5jX2lkX3NldCBicGZfZnN2ZXJpdHlfc2V0ID0ge1xuLS1cbmZzL3Zlcml0eS9tZWFzdXJlLmMtMTgyLVx0LnNldCA9IFx1MDAyNmZzdmVyaXR5X3NldF9pZHMsXG5mcy92ZXJpdHkvbWVhc3VyZS5jOjE4MzpcdC5maWx0ZXIgPSBicGZfZ2V0X2ZzdmVyaXR5X2RpZ2VzdF9maWx0ZXIsXG5mcy92ZXJpdHkvbWVhc3VyZS5jLTE4NC19O1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9icGZfa2Z1bmNzLmg9NzE9ZXh0ZXJuIGludCBicGZfZ2V0X2ZpbGVfeGF0dHIoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgKm5hbWUsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmX2tmdW5jcy5oLTcyLVx0XHRcdCAgICAgIHN0cnVjdCBicGZfZHlucHRyICp2YWx1ZV9wdHIpIF9fa3N5bTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9icGZfa2Z1bmNzLmg6NzM6ZXh0ZXJuIGludCBicGZfZ2V0X2ZzdmVyaXR5X2RpZ2VzdChzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3Qgc3RydWN0IGJwZl9keW5wdHIgKmRpZ2VzdF9wdHIpIF9fa3N5bTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9icGZfa2Z1bmNzLmgtNzQtXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfZnN2ZXJpdHkuYz0yND1pbnQgQlBGX1BST0codGVzdF9maWxlX29wZW4sIHN0cnVjdCBmaWxlICpmKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X2ZzdmVyaXR5LmMtMzUtXHRicGZfZHlucHRyX2Zyb21fbWVtKGRpZ2VzdCwgc2l6ZW9mKGRpZ2VzdCksIDAsIFx1MDAyNmRpZ2VzdF9wdHIpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfZnN2ZXJpdHkuYzozNjpcdHJldCA9IGJwZl9nZXRfZnN2ZXJpdHlfZGlnZXN0KGYsIFx1MDAyNmRpZ2VzdF9wdHIpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfZnN2ZXJpdHkuYy0zNy1cdGlmIChyZXQgXHUwMDNjIDApXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2lnX2luX3hhdHRyLmM9MTE9Y2hhciBfbGljZW5zZVtdIFNFQyhcJiMzNDtsaWNlbnNlXCYjMzQ7KSA9IFwmIzM0O0dQTFwmIzM0Oztcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9zaWdfaW5feGF0dHIuYy0yOC0gKiBwbHVzIFNIQTI1Nl9ESUdFU1RfU0laRS4gVGhlIG1hZ2ljIHBhcnQgb2YgaXQgaXMgZmlsbGVkIGJ5IHVzZXIgc3BhY2UsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9zaWdfaW5feGF0dHIuYzoyOTogKiBhbmQgdGhlIHJlc3Qgb2YgaXQgaXMgZmlsbGVkIGJ5IGJwZl9nZXRfZnN2ZXJpdHlfZGlnZXN0LlxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2lnX2luX3hhdHRyLmMtMzAtICpcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9zaWdfaW5feGF0dHIuYz00Nj1pbnQgQlBGX1BST0codGVzdF9maWxlX29wZW4sIHN0cnVjdCBmaWxlICpmKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NpZ19pbl94YXR0ci5jLTU5LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2lnX2luX3hhdHRyLmM6NjA6XHRyZXQgPSBicGZfZ2V0X2ZzdmVyaXR5X2RpZ2VzdChmLCBcdTAwMjZkaWdlc3RfcHRyKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NpZ19pbl94YXR0ci5jLTYxLVx0LyogTm8gdmVyaXR5LCBhbGxvdyBhY2Nlc3MgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAyMDoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDE4CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgYnBmX2dldF9mc3Zlcml0eV9kaWdlc3RgIGtmdW5jKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBicGZfZ2V0X2ZzdmVyaXR5X2RpZ2VzdGAgZnVuY3Rpb24uIEl0JiMzOTtzIGZsYWdnZWQgYXMgYSBCUEYga2Z1bmMsIHdoaWNoIG1lYW5zIGl0JiMzOTtzIGEga2VybmVsIGZ1bmN0aW9uIGF2YWlsYWJsZSBmb3IgdXNlIHdpdGhpbiBCUEYgcHJvZ3JhbXMuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O1doZXJlJiMzOTtzIHRoaXMgZGVmaW5lZD8gSSBuZWVkIHRvIGtub3cgdGhlIGNvbnRleHQuJiMzNDsgQWgsIGBmcy92ZXJpdHkvbWVhc3VyZS5jYCDigJMgZ290IGl0LiBOb3csIGdpdmVuIG15IGV4cGVyaWVuY2UsIEkgd2FudCB0byBxdWlja2x5IGFzY2VydGFpbiB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiBmb3IgdGhhdCBmaWxlLiBTcGVjaWZpY2FsbHksIEkmIzM5O2QgbGlrZSB0byBjaGVjayBpZiBhbnkgcGFydGljdWxhciBrZXJuZWwgY29uZmlnIGVuYWJsZXMgdGhlIGNvbXBpbGF0aW9uIG9mIGBtZWFzdXJlLmNgLCB0byBjaGVjayBmb3IgYW55IGRlcGVuZGVuY2llcy4gSSYjMzk7bGwgdGFrZSBhIGxvb2sgYXQgdGhlIGBmcy92ZXJpdHkvTWFrZWZpbGVgIHRvIHNlZSB1bmRlciB3aGljaCBjb25maWd1cmF0aW9uIGl0IGlzIGNvbXBpbGVkLiBUaGF0IHdpbGwgZ2l2ZSBtZSBhIHNlbnNlIG9mIHdoYXQmIzM5O3MgdGllZCB0byB0aGlzIGZ1bmN0aW9uYWxpdHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMjA6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVhc3VyZS5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvdmVyaXR5L01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3Zlcml0eS9NYWtlZmlsZT0zPW9iai0kKENPTkZJR19GU19WRVJJVFkpICYjNDM7PSBlbmFibGUubyBcXFxuLS1cbmZzL3Zlcml0eS9NYWtlZmlsZS01LVx0XHRcdCAgIGluaXQubyBcXFxuZnMvdmVyaXR5L01ha2VmaWxlOjY6XHRcdFx0ICAgbWVhc3VyZS5vIFxcXG5mcy92ZXJpdHkvTWFrZWZpbGUtNy1cdFx0XHQgICBvcGVuLm8gXFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAyMDoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0Nzg3CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUuLi4KCioqVmVyaXR5IEtlcm5lbCBNb2R1bGUgQ29uZmlndXJhdGlvbioqCgpSaWdodCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBgQ09ORklHX0ZTX1ZFUklUWWAgaXMgZW5hYmxlZC4gU2VlbXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaC4gTm93LCBhIGxpdHRsZSBuYWdnaW5nIHRob3VnaHQuLi4gaXMgYGJwZl9nZXRfZnN2ZXJpdHlfZGlnZXN0YCBjb21waWxlZCB1bmNvbmRpdGlvbmFsbHkgaWYgYENPTkZJR19GU19WRVJJVFlgIGlzIGRlZmluZWQ/IEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gYmVjYXVzZSB0aGF0IGNvdWxkIGludHJvZHVjZSBzb21lIHN1YnRsZSBkZXBlbmRlbmN5IHByb2JsZW1zIGlmIG5vdCBoYW5kbGVkIGNvcnJlY3RseS4gQmV0dGVyIHRvIGNvbmZpcm0gaXQmIzM5O3MgY29uZGl0aW9uYWwuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBzb3VyY2UuIEkmIzM5O2xsIGNoZWNrIGBmcy92ZXJpdHkvbWVhc3VyZS5jYCBhbmQgbG9vayBzcGVjaWZpY2FsbHkgZm9yIGFueSBgI2lmZGVmYCBkaXJlY3RpdmVzIHN1cnJvdW5kaW5nIHRoZSBgYnBmX2dldF9mc3Zlcml0eV9kaWdlc3RgIGZ1bmN0aW9uIGRlZmluaXRpb24uIFRoYXQgd2lsbCB0ZWxsIG1lIGltbWVkaWF0ZWx5IHdoZXRoZXIgb3Igbm90IGl0JiMzOTtzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQuIEkgZG9uJiMzOTt0IHdhbnQgdG8gY2hhc2UgZG93biB1bm5lY2Vzc2FyeSBpc3N1ZXMgbGF0ZXIuIEl0JiMzOTtzIGJlc3QgdG8gYmUgcHJlY2lzZSwgb3IgZWxzZSB0aGUgY29tcGlsZXIgbWF5IHRocm93IGEgdGFudHJ1bS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAyMDoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfZ2V0X2ZzdmVyaXR5X2RpZ2VzdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL3Zlcml0eS9tZWFzdXJlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvdmVyaXR5L21lYXN1cmUuYz0xMTA9X19icGZfa2Z1bmNfc3RhcnRfZGVmcygpO1xuLS1cbmZzL3Zlcml0eS9tZWFzdXJlLmMtMTEyLS8qKlxuZnMvdmVyaXR5L21lYXN1cmUuYzoxMTM6ICogYnBmX2dldF9mc3Zlcml0eV9kaWdlc3Q6IHJlYWQgZnN2ZXJpdHkgZGlnZXN0IG9mIGZpbGVcbmZzL3Zlcml0eS9tZWFzdXJlLmMtMTE0LSAqIEBmaWxlOiBmaWxlIHRvIGdldCBkaWdlc3QgZnJvbVxuLS1cbmZzL3Zlcml0eS9tZWFzdXJlLmMtMTIwLSAqL1xuZnMvdmVyaXR5L21lYXN1cmUuYzoxMjE6X19icGZfa2Z1bmMgaW50IGJwZl9nZXRfZnN2ZXJpdHlfZGlnZXN0KHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0ciAqZGlnZXN0X3ApXG5mcy92ZXJpdHkvbWVhc3VyZS5jLTEyMi17XG4tLVxuZnMvdmVyaXR5L21lYXN1cmUuYz0xNjc9QlRGX0tGVU5DU19TVEFSVChmc3Zlcml0eV9zZXRfaWRzKVxuZnMvdmVyaXR5L21lYXN1cmUuYzoxNjg6QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9nZXRfZnN2ZXJpdHlfZGlnZXN0KVxuZnMvdmVyaXR5L21lYXN1cmUuYy0xNjktQlRGX0tGVU5DU19FTkQoZnN2ZXJpdHlfc2V0X2lkcylcbmZzL3Zlcml0eS9tZWFzdXJlLmMtMTcwLVxuZnMvdmVyaXR5L21lYXN1cmUuYzoxNzE6c3RhdGljIGludCBicGZfZ2V0X2ZzdmVyaXR5X2RpZ2VzdF9maWx0ZXIoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIga2Z1bmNfaWQpXG5mcy92ZXJpdHkvbWVhc3VyZS5jLTE3Mi17XG4tLVxuZnMvdmVyaXR5L21lYXN1cmUuYz0xODA9c3RhdGljIGNvbnN0IHN0cnVjdCBidGZfa2Z1bmNfaWRfc2V0IGJwZl9mc3Zlcml0eV9zZXQgPSB7XG4tLVxuZnMvdmVyaXR5L21lYXN1cmUuYy0xODItXHQuc2V0ID0gXHUwMDI2ZnN2ZXJpdHlfc2V0X2lkcyxcbmZzL3Zlcml0eS9tZWFzdXJlLmM6MTgzOlx0LmZpbHRlciA9IGJwZl9nZXRfZnN2ZXJpdHlfZGlnZXN0X2ZpbHRlcixcbmZzL3Zlcml0eS9tZWFzdXJlLmMtMTg0LX07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMjA6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTU2NQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGRlZXAgaW4gdGhlIHdlZWRzIG9mIGtlcm5lbCBkZXZlbG9wbWVudDoKCioqRGl2aW5nIGludG8gVmVyaXR5JiMzOTtzIE1lYXN1cmVtZW50IENvZGUqKgoKQWxyaWdodCwgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgYGZzL3Zlcml0eS9tZWFzdXJlLmNgIGhhbmRsZXMgQlBGIHN5c2NhbGxzLCBpZiBhdCBhbGwuIEl0JiMzOTtzIGxpa2VseSB0aGF0IGZ1bmN0aW9uYWxpdHkgaXMgY29uZGl0aW9uYWxseSBjb21waWxlZCwgc28gSSYjMzk7bSBnb2luZyB0byBzY2FuIHRocm91Z2ggdGhhdCBmaWxlIGltbWVkaWF0ZWx5LiBNeSBwcmltYXJ5IGZvY3VzIGlzIHRvIGlkZW50aWZ5IGFueSBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcywgc3BlY2lmaWNhbGx5IGAjaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMYCDigJMgdGhhdCYjMzk7cyB0aGUgdGVsbHRhbGUgc2lnbiBJJiMzOTttIGxvb2tpbmcgZm9yLiBUaGlzIHNob3VsZCBwcm92aWRlIGluc2lnaHRzIGludG8gd2hldGhlciBCUEYgaW50ZXJhY3Rpb24gaGFzIGJlZW4gaW50ZWdyYXRlZCBkaXJlY3RseSBpbnRvIHZlcml0eSBtZWFzdXJlbWVudC4gVGhlIGdvYWwgaXMgdG8gZWl0aGVyIGNvbmZpcm0gaXRzIGluY2x1c2lvbiwgaXRzIGFic2VuY2UsIG9yIHVuZGVyc3RhbmQgaG93IGl0IGhhcyBiZWVuIGluY29ycG9yYXRlZCBpbnRvIGl0cyBjb3JlIG1lYXN1cmVtZW50IHByb2Nlc3Nlcy4gUXVpY2tseSBza2ltbWluZyB0aGUgY29kZSBpcyBnb2luZyB0byBiZSBteSBmaXJzdCBwcmlvcml0eS4gSSYjMzk7bSBob3BpbmcgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgcG9pbnRzIG9mIGludGVyc2VjdGlvbiBiZXR3ZWVuIHRoZXNlIHN1YnN5c3RlbXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDIwOjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvdmVyaXR5L21lYXN1cmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDEwMDpcdFx0XHQqYWxnID0gaGFzaF9hbGcgLSBmc3Zlcml0eV9oYXNoX2FsZ3M7XG4gMTAxOlx0XHRpZiAoaGFsZylcbiAxMDI6XHRcdFx0KmhhbGcgPSBoYXNoX2FsZy1cdTAwM2VhbGdvX2lkO1xuIDEwMzpcdFx0cmV0dXJuIGhhc2hfYWxnLVx1MDAzZWRpZ2VzdF9zaXplO1xuIDEwNDpcdH1cbiAxMDU6XHRFWFBPUlRfU1lNQk9MX0dQTChmc3Zlcml0eV9nZXRfZGlnZXN0KTtcbiAxMDY6XHRcbiAxMDc6XHQjaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXG4gMTA4Olx0XG4gMTA5Olx0LyogYnBmIGtmdW5jcyAqL1xuIDExMDpcdF9fYnBmX2tmdW5jX3N0YXJ0X2RlZnMoKTtcbiAxMTE6XHRcbiAxMTI6XHQvKipcbiAxMTM6XHQgKiBicGZfZ2V0X2ZzdmVyaXR5X2RpZ2VzdDogcmVhZCBmc3Zlcml0eSBkaWdlc3Qgb2YgZmlsZVxuIDExNDpcdCAqIEBmaWxlOiBmaWxlIHRvIGdldCBkaWdlc3QgZnJvbVxuIDExNTpcdCAqIEBkaWdlc3RfcDogKG91dCkgZHlucHRyIGZvciBzdHJ1Y3QgZnN2ZXJpdHlfZGlnZXN0XG4gMTE2Olx0ICpcbiAxMTc6XHQgKiBSZWFkIGZzdmVyaXR5X2RpZ2VzdCBvZiAqZmlsZSogaW50byAqZGlnZXN0X3B0ciouXG4gMTE4Olx0ICpcbiAxMTk6XHQgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgYSBuZWdhdGl2ZSB2YWx1ZSBvbiBlcnJvci5cbiAxMjA6XHQgKi9cbiAxMjE6XHRfX2JwZl9rZnVuYyBpbnQgYnBmX2dldF9mc3Zlcml0eV9kaWdlc3Qoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IHN0cnVjdCBicGZfZHlucHRyICpkaWdlc3RfcClcbiAxMjI6XHR7XG4gMTIzOlx0XHRjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0cl9rZXJuICpkaWdlc3RfcHRyID0gKHN0cnVjdCBicGZfZHlucHRyX2tlcm4gKilkaWdlc3RfcDtcbiAxMjQ6XHRcdGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlX2lub2RlKGZpbGUpO1xuIDEyNTpcdFx0dTY0IGR5bnB0cl9zeiA9IF9fYnBmX2R5bnB0cl9zaXplKGRpZ2VzdF9wdHIpO1xuIDEyNjpcdFx0c3RydWN0IGZzdmVyaXR5X2RpZ2VzdCAqYXJnO1xuIDEyNzpcdFx0Y29uc3Qgc3RydWN0IGZzdmVyaXR5X2luZm8gKnZpO1xuIDEyODpcdFx0Y29uc3Qgc3RydWN0IGZzdmVyaXR5X2hhc2hfYWxnICpoYXNoX2FsZztcbiAxMjk6XHRcdHU2NCBvdXRfZGlnZXN0X3N6O1xuIDEzMDpcdFxuIDEzMTpcdFx0aWYgKGR5bnB0cl9zeiBcdTAwM2Mgc2l6ZW9mKHN0cnVjdCBmc3Zlcml0eV9kaWdlc3QpKVxuIDEzMjpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiAxMzM6XHRcbiAxMzQ6XHRcdGFyZyA9IF9fYnBmX2R5bnB0cl9kYXRhX3J3KGRpZ2VzdF9wdHIsIGR5bnB0cl9zeik7XG4gMTM1Olx0XHRpZiAoIWFyZylcbiAxMzY6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gMTM3Olx0XG4gMTM4Olx0XHRpZiAoIUlTX0FMSUdORUQoKHVpbnRwdHJfdClhcmcsIF9fYWxpZ25vZl9fKCphcmcpKSlcbiAxMzk6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gMTQwOlx0XG4gMTQxOlx0XHR2aSA9IGZzdmVyaXR5X2dldF9pbmZvKGlub2RlKTtcbiAxNDI6XHRcdGlmICghdmkpXG4gMTQzOlx0XHRcdHJldHVybiAtRU5PREFUQTsgLyogbm90IGEgdmVyaXR5IGZpbGUgKi9cbiAxNDQ6XHRcbiAxNDU6XHRcdGhhc2hfYWxnID0gdmktXHUwMDNldHJlZV9wYXJhbXMuaGFzaF9hbGc7XG4gMTQ2Olx0XG4gMTQ3Olx0XHRvdXRfZGlnZXN0X3N6ID0gZHlucHRyX3N6IC0gc2l6ZW9mKHN0cnVjdCBmc3Zlcml0eV9kaWdlc3QpO1xuIDE0ODpcdFx0aWYgKG91dF9kaWdlc3Rfc3ogXHUwMDNjIGhhc2hfYWxnLVx1MDAzZWRpZ2VzdF9zaXplKVxuIDE0OTpcdFx0XHRyZXR1cm4gLUVPVkVSRkxPVztcbiAxNTA6XHRcbiAxNTE6XHRcdGFyZy1cdTAwM2VkaWdlc3RfYWxnb3JpdGhtID0gaGFzaF9hbGcgLSBmc3Zlcml0eV9oYXNoX2FsZ3M7XG4gMTUyOlx0XHRhcmctXHUwMDNlZGlnZXN0X3NpemUgPSBoYXNoX2FsZy1cdTAwM2VkaWdlc3Rfc2l6ZTtcbiAxNTM6XHRcbiAxNTQ6XHRcdC8qIGNvcHkgZGlnZXN0ICovXG4gMTU1Olx0XHRtZW1jcHkoYXJnLVx1MDAzZWRpZ2VzdCwgdmktXHUwMDNlZmlsZV9kaWdlc3QsIGhhc2hfYWxnLVx1MDAzZWRpZ2VzdF9zaXplKTtcbiAxNTY6XHRcbiAxNTc6XHRcdC8qIGZpbGwgdGhlIGV4dHJhIGJ1ZmZlciB3aXRoIHplcm9zICovXG4gMTU4Olx0XHRpZiAob3V0X2RpZ2VzdF9zeiBcdTAwM2UgaGFzaF9hbGctXHUwMDNlZGlnZXN0X3NpemUpXG4gMTU5Olx0XHRcdG1lbXNldChhcmctXHUwMDNlZGlnZXN0ICYjNDM7IGhhc2hfYWxnLVx1MDAzZWRpZ2VzdF9zaXplLCAwLFxuIDE2MDpcdFx0XHQgICAgICAgb3V0X2RpZ2VzdF9zeiAtIGhhc2hfYWxnLVx1MDAzZWRpZ2VzdF9zaXplKTtcbiAxNjE6XHRcbiAxNjI6XHRcdHJldHVybiAwO1xuIDE2MzpcdH1cbiAxNjQ6XHRcbiAxNjU6XHRfX2JwZl9rZnVuY19lbmRfZGVmcygpO1xuIDE2NjpcdFxuIDE2NzpcdEJURl9LRlVOQ1NfU1RBUlQoZnN2ZXJpdHlfc2V0X2lkcylcbiAxNjg6XHRCVEZfSURfRkxBR1MoZnVuYywgYnBmX2dldF9mc3Zlcml0eV9kaWdlc3QpXG4gMTY5Olx0QlRGX0tGVU5DU19FTkQoZnN2ZXJpdHlfc2V0X2lkcylcbiAxNzA6XHRcbiAxNzE6XHRzdGF0aWMgaW50IGJwZl9nZXRfZnN2ZXJpdHlfZGlnZXN0X2ZpbHRlcihjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiBrZnVuY19pZClcbiAxNzI6XHR7XG4gMTczOlx0XHRpZiAoIWJ0Zl9pZF9zZXQ4X2NvbnRhaW5zKFx1MDAyNmZzdmVyaXR5X3NldF9pZHMsIGtmdW5jX2lkKSlcbiAxNzQ6XHRcdFx0cmV0dXJuIDA7XG4gMTc1Olx0XG4gMTc2Olx0XHQvKiBPbmx5IGFsbG93IHRvIGF0dGFjaCBmcm9tIExTTSBob29rcywgdG8gYXZvaWQgcmVjdXJzaW9uICovXG4gMTc3Olx0XHRyZXR1cm4gcHJvZy1cdTAwM2V0eXBlICE9IEJQRl9QUk9HX1RZUEVfTFNNID8gLUVBQ0NFUyA6IDA7XG4gMTc4Olx0fVxuIDE3OTpcdFxuIDE4MDpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnRmX2tmdW5jX2lkX3NldCBicGZfZnN2ZXJpdHlfc2V0ID0ge1xuIDE4MTpcdFx0Lm93bmVyID0gVEhJU19NT0RVTEUsXG4gMTgyOlx0XHQuc2V0ID0gXHUwMDI2ZnN2ZXJpdHlfc2V0X2lkcyxcbiAxODM6XHRcdC5maWx0ZXIgPSBicGZfZ2V0X2ZzdmVyaXR5X2RpZ2VzdF9maWx0ZXIsXG4gMTg0Olx0fTtcbiAxODU6XHRcbiAxODY6XHR2b2lkIF9faW5pdCBmc3Zlcml0eV9pbml0X2JwZih2b2lkKVxuIDE4NzpcdHtcbiAxODg6XHRcdHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9MU00sIFx1MDAyNmJwZl9mc3Zlcml0eV9zZXQpO1xuIDE4OTpcdH1cbiAxOTA6XHRcbiAxOTE6XHQjZW5kaWYgLyogQ09ORklHX0JQRl9TWVNDQUxMICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDIwOjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDczNjAKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA0MTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIGBicGZfZ2V0X2ZzdmVyaXR5X2RpZ2VzdGAgVnVsbmVyYWJpbGl0eSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIEkgc2VlIGEgZmV3IGtleSB0aGluZ3MgSSBuZWVkIHRvIGNvbnNpZGVyIGZvciBlbmFibGluZyB0aGUgY29kZS4gRmlyc3QsIHRoZSBjb2RlIHBhdGggcmVsaWVzIG9uIGBDT05GSUdfQlBGX1NZU0NBTExgIGFuZCBgQ09ORklHX0ZTX1ZFUklUWWAsIHNvIHRob3NlIGFyZSBwcmVyZXF1aXNpdGVzLgoKTm93LCBmb2N1c2luZyBvbiB0aGUgZnVuY3Rpb24gaXRzZWxmLCBgYnBmX2dldF9mc3Zlcml0eV9kaWdlc3RgLCBpdCYjMzk7cyBhIEJQRiBrZnVuYywgd2hpY2ggbWVhbnMgaXQmIzM5O3MgYWNjZXNzaWJsZSB3aXRoaW4gQlBGIHByb2dyYW1zLCBhbmQgdGhhdOKAmXMgYSBqdWljeSB0YXJnZXQgZm9yIGV4cGxvaXRhdGlvbi4gVGhlIHBhdGNoIGFkZHJlc3NlcyBhIGNyaXRpY2FsIGJ1Zywgc3BlY2lmaWNhbGx5IHRoZSBwb3RlbnRpYWwgZm9yIGludGVnZXIgb3ZlcmZsb3csIHdoaWNoIG9mIGNvdXJzZSBJIGhhZCB0byB0cmFjZSB0aHJvdWdoIHRvIHVuZGVyc3RhbmQgZnVsbHkuCgpJbml0aWFsbHksIEkgaGFkIHRob3VnaHQgdGhlIGlzc3VlIHN0ZW1tZWQgZnJvbSBhIG5lZ2F0aXZlIHZhbHVlIHJlc3VsdGluZyBmcm9tIHN1YnRyYWN0aW5nIGBzaXplb2Yoc3RydWN0IGZzdmVyaXR5X2RpZ2VzdClgIGZyb20gYGR5bnB0cl9zemAsIGJ1dCB0aGF0IGlzbiYjMzk7dCBhY2N1cmF0ZSBzaW5jZSB0aGUgc2l6ZSBpcyBzbWFsbGVyLiBJdCByZXR1cm5zIGAtRUlOVkFMYC4gVGhlbiwgSSByZWFsaXplZCB0aGUgcHJvYmxlbSBsaWVzIGluIHRoZSBvcmlnaW5hbCBjb2RlJiMzOTtzIHVzZSBvZiBhbiBgaW50YCBmb3IgYG91dF9kaWdlc3Rfc3pgLiBUaGUgcm9vdCBjYXVzZSBpcyBgZHlucHRyX3N6YCB3aGljaCBpcyBvcmlnaW5hbGx5IGEgYHUzMmAsIGFuZCBpZiBpdHMgdmFsdWUgaXMgbGFyZ2UsIHN1Y2ggYXMgYDB4ODAwMDAwMDBgLCB0aGUgY2FsY3VsYXRpb24gYGR5bnB0cl9zeiAtIHNpemVvZihzdHJ1Y3QgZnN2ZXJpdHlfZGlnZXN0KWAgcmVzdWx0cyBpbiBgb3V0X2RpZ2VzdF9zemAgYmVpbmcgYSBuZWdhdGl2ZSBgaW50YC4gVGhhdCBuZWdhdGl2ZSB2YWx1ZSB0aGVuIGdldHMgdXNlZCBpbiBhIGBtaW5fdGAgY29tcGFyaXNvbiB3aXRoIGBoYXNoX2FsZy0mZ3Q7ZGlnZXN0X3NpemVgIGFuZCBwYXNzZWQgdG8gYG1lbWNweWAgYXMgYSBgc2l6ZV90YC4gVGhpcyBpcyBhIGNsYXNzaWMgaW50ZWdlciBvdmVyZmxvdyBsZWFkaW5nIHRvIGEgbGFyZ2UgbWVtb3J5IGNvcHksIGFuZCBtZW1vcnkgY29ycnVwdGlvbiwgd2hpY2ggaXMgc29tZXRoaW5nIEkgZGVhbCB3aXRoIG9mdGVuLgoKVGhlIHBhdGNoIGl0c2VsZiBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCBmaXguIEl0IHByb21vdGVzIGJvdGggYGR5bnB0cl9zemAgYW5kIGBvdXRfZGlnZXN0X3N6YCB0byBgdTY0YCB0byBwcmV2ZW50IHRoZSBvdmVyZmxvdywgYW5kIGl0IGFkZHMgYW4gZXhwbGljaXQgY2hlY2sgdGhhdCByZXR1cm5zIGAtRU9WRVJGTE9XYCBpZiB0aGUgY2FsY3VsYXRlZCBkaWdlc3Qgc2l6ZSBleGNlZWRzIHRoZSBzdXBwb3J0ZWQgc2l6ZS4gU21hcnQuCgpUaGlzIGlzIGEgdGV4dGJvb2sgY2FzZSByaXBlIGZvciBmdXp6aW5nLiBUaGUga2V5IHN5bWJvbCB0byBmb2N1cyBvbiBpcywgd2l0aG91dCBhIGRvdWJ0LCBgYnBmX2dldF9mc3Zlcml0eV9kaWdlc3RgLiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpZ3VyZSBteSBmdXp6ZXIgdG8gdGFyZ2V0IHRoYXQgZnVuY3Rpb24sIGtlZXBpbmcgYEZTX1ZFUklUWWAgYW5kIGBCUEZfU1lTQ0FMTGAgZW5hYmxlZC4gSSYjMzk7bGwgbmVlZCB0byBhbHNvIGNoZWNrIGlmIGBGU19WRVJJVFlgIGhhcyBhbnkgb3RoZXIgZGVwZW5kZW5jaWVzIHRoYXQgbWlnaHQgbmVlZCB0byBiZSBhY2NvdW50ZWQgZm9yLCBidXQgdGhpcyBsb29rcyBsaWtlIGEgc29saWQgYXR0YWNrIHZlY3Rvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMjA6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEZTX1ZFUklUWSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL3Zlcml0eS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3Zlcml0eS9LY29uZmlnLTItXG5mcy92ZXJpdHkvS2NvbmZpZzozOmNvbmZpZyBGU19WRVJJVFlcbmZzL3Zlcml0eS9LY29uZmlnLTQtXHRib29sIFwmIzM0O0ZTIFZlcml0eSAocmVhZC1vbmx5IGZpbGUtYmFzZWQgYXV0aGVudGljaXR5IHByb3RlY3Rpb24pXCYjMzQ7XG4tLVxuZnMvdmVyaXR5L0tjb25maWctMzMtXG5mcy92ZXJpdHkvS2NvbmZpZzozNDpjb25maWcgRlNfVkVSSVRZX0JVSUxUSU5fU0lHTkFUVVJFU1xuZnMvdmVyaXR5L0tjb25maWctMzUtXHRib29sIFwmIzM0O0ZTIFZlcml0eSBidWlsdGluIHNpZ25hdHVyZSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDIwOjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg0NjkKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBWZXJpdHkgRGVwZW5kZW5jaWVzKioKCkFscmlnaHQsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgZm9yIGBGU19WRVJJVFlgIHdpdGhpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIE15IGluc3RpbmN0IHNheXMgdG8gc3RhcnQgd2l0aCBgZnMvdmVyaXR5L0tjb25maWdgLiBUaGF0JiMzOTtzIHRoZSBnby10byBsb2NhdGlvbiBmb3IgbW9kdWxlLXNwZWNpZmljIEtjb25maWcgZW50cmllcywgZGVmaW5pbmcgZGVwZW5kZW5jaWVzIGFuZCBkZWZhdWx0cy4gSXQgc2hvdWxkIGdpdmUgbWUgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQgb3RoZXIga2VybmVsIGZlYXR1cmVzIG9yIG1vZHVsZXMgbmVlZCB0byBiZSBlbmFibGVkIGJlZm9yZSBgRlNfVkVSSVRZYCBiZWNvbWVzIGF2YWlsYWJsZS4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBkZXBlbmRlbmNpZXMgb24gdGhpbmdzIGxpa2UgYmxvY2sgbGF5ZXIgZmVhdHVyZXMsIGhhc2hpbmcgYWxnb3JpdGhtcywgbWF5YmUgZXZlbiBzZWN1cml0eSBtb2R1bGVzIGlmIHZlcml0eSBob29rcyBpbnRvIHRob3NlIGFyZWFzLiBJJiMzOTttIGFsc28gYW50aWNpcGF0aW5nIHRoYXQgSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIGlmIGBGU19WRVJJVFlgIGludHJvZHVjZXMgYW55IGNvbmZsaWN0cyBvciBzcGVjaWFsIHJlcXVpcmVtZW50cyBmb3Igc3BlY2lmaWMgZmlsZXN5c3RlbXMuIFRoZSBgS2NvbmZpZ2AgZmlsZSBzaG91bGQgaWxsdW1pbmF0ZSBhbGwgb2YgdGhpcy4gSXTigJlzIHRoZSB1c3VhbCBwcm9jZXNzIHdoZW4gSSYjMzk7bSBhc3Nlc3NpbmcgdGhlIGJ1aWxkIHJlcXVpcmVtZW50cyBmb3IgYSBuZXcgZmlsZXN5c3RlbSBmZWF0dXJlLiBMZXQmIzM5O3MgZ2V0IHRvIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAyMDoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL3Zlcml0eS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdFxuICAgMzpcdGNvbmZpZyBGU19WRVJJVFlcbiAgIDQ6XHRcdGJvb2wgXCYjMzQ7RlMgVmVyaXR5IChyZWFkLW9ubHkgZmlsZS1iYXNlZCBhdXRoZW50aWNpdHkgcHJvdGVjdGlvbilcJiMzNDtcbiAgIDU6XHRcdCMgRmlsZXN5c3RlbXMgY2FjaGUgdGhlIE1lcmtsZSB0cmVlIGF0IGEgNjRLIGFsaWduZWQgb2Zmc2V0IGluIHRoZVxuICAgNjpcdFx0IyBwYWdlY2FjaGUuICBUaGF0IGFwcHJvYWNoIGFzc3VtZXMgdGhlIHBhZ2Ugc2l6ZSBpcyBhdCBtb3N0IDY0Sy5cbiAgIDc6XHRcdGRlcGVuZHMgb24gUEFHRV9TSElGVCBcdTAwM2M9IDE2XG4gICA4Olx0XHRzZWxlY3QgQ1JZUFRPX0hBU0hfSU5GT1xuICAgOTpcdFx0c2VsZWN0IENSWVBUT19MSUJfU0hBMjU2XG4gIDEwOlx0XHRzZWxlY3QgQ1JZUFRPX0xJQl9TSEE1MTJcbiAgMTE6XHRcdGhlbHBcbiAgMTI6XHRcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyBmcy12ZXJpdHkuICBmcy12ZXJpdHkgaXMgdGhlIGRtLXZlcml0eVxuICAxMzpcdFx0ICBtZWNoYW5pc20gaW1wbGVtZW50ZWQgYXQgdGhlIGZpbGUgbGV2ZWwuICBPbiBzdXBwb3J0ZWRcbiAgMTQ6XHRcdCAgZmlsZXN5c3RlbXMgKGN1cnJlbnRseSBleHQ0LCBmMmZzLCBhbmQgYnRyZnMpLCB1c2Vyc3BhY2UgY2FuXG4gIDE1Olx0XHQgIHVzZSBhbiBpb2N0bCB0byBlbmFibGUgdmVyaXR5IGZvciBhIGZpbGUsIHdoaWNoIGNhdXNlcyB0aGVcbiAgMTY6XHRcdCAgZmlsZXN5c3RlbSB0byBidWlsZCBhIE1lcmtsZSB0cmVlIGZvciB0aGUgZmlsZS4gIFRoZSBmaWxlc3lzdGVtXG4gIDE3Olx0XHQgIHdpbGwgdGhlbiB0cmFuc3BhcmVudGx5IHZlcmlmeSBhbnkgZGF0YSByZWFkIGZyb20gdGhlIGZpbGVcbiAgMTg6XHRcdCAgYWdhaW5zdCB0aGUgTWVya2xlIHRyZWUuICBUaGUgZmlsZSBpcyBhbHNvIG1hZGUgcmVhZC1vbmx5LlxuICAxOTpcdFxuICAyMDpcdFx0ICBUaGlzIHNlcnZlcyBhcyBhbiBpbnRlZ3JpdHkgY2hlY2ssIGJ1dCB0aGUgYXZhaWxhYmlsaXR5IG9mIHRoZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAyMDoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MDg5CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMTM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIHRoZSBzZWxlY3Rpb24gb2YgY3J5cHRvZ3JhcGhpYyBjb21wb25lbnRzIGhpbmdlcyBvbiB3aGV0aGVyIGBQQUdFX1NISUZUYCBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMTYsIHdoaWNoLCBpbiBwcmFjdGljZSwgaXMgYWxtb3N0IGFsd2F5cyB0aGUgY2FzZS4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoZSBwcmltYXJ5IGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIG9mIGludGVyZXN0IGhlcmUgYXJlIGBGU19WRVJJVFlgIGFuZCBgQlBGX1NZU0NBTExgLgoKQnV0LCBob2xkIG9uIGEgc2Vjb25k4oCmIGBicGZfZ2V0X2ZzdmVyaXR5X2RpZ2VzdGAgaXMgY2FsbGVkICpmcm9tKiBCUEYgcHJvZ3JhbXM/IFRoaXMgaW1tZWRpYXRlbHkgcmFpc2VzIGEgcmVkIGZsYWcuIFdoYXQgYXJlIHRoZSBkZXBlbmRlbmNpZXM/IEkgbmVlZCB0byBrbm93IGlmIHRoZXJlIGFyZSBhZGRpdGlvbmFsIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzIHRvIGVuYWJsZSB0aGUgYXR0YWNobWVudCBvZiBCUEYgcHJvZ3JhbXMgdG8gTFNNIGhvb2tzLiBJJiMzOTttIHNlZWluZyB0aGF0IHRoZSBjb25kaXRpb24gYHByb2ctJmd0O3R5cGUgIT0gQlBGX1BST0dfVFlQRV9MU01gIHJlc3VsdHMgaW4gYW4gYC1FQUNDRVNgIGVycm9yLCB3aGljaCB0ZWxscyBtZSB0aGUga2VybmVsIGlzIGJsb2NraW5nIHRoZSBwcm9ncmFtIGZyb20gYmVpbmcgcnVuLiBJdCYjMzk7cyBiZWNvbWluZyBjbGVhciB0aGF0IHdlIHByb2JhYmx5IGFsc28gbmVlZCB0byBlbmFibGUgYEJQRl9MU01gIHRvIGdldCBMU00gcHJvZ3JhbXMgcnVubmluZy4gUmlnaHQsIGxldCYjMzk7cyBjb25maXJtIHRoZSBgQlBGX0xTTWAgY29uZmlndXJhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMjA6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9MU00mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9LY29uZmlnPTkwPXNvdXJjZSBcJiMzNDtrZXJuZWwvYnBmL3ByZWxvYWQvS2NvbmZpZ1wmIzM0O1xua2VybmVsL2JwZi9LY29uZmlnLTkxLVxua2VybmVsL2JwZi9LY29uZmlnOjkyOmNvbmZpZyBCUEZfTFNNXG5rZXJuZWwvYnBmL0tjb25maWctOTMtXHRib29sIFwmIzM0O0VuYWJsZSBCUEYgTFNNIEluc3RydW1lbnRhdGlvblwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAyMDoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NTY4CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUga2VybmVsJiMzOTtzIEJQRiBMU00gY29uZmlndXJhdGlvbiwgdmlld2VkIHRocm91Z2ggdGhlIGxlbnMgb2YgbXkgZXhwZXJ0aXNlOgoKKipEaXZpbmcgaW50byB0aGUgQlBGIExTTSBDb25maWd1cmF0aW9uKioKCk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIGBrZXJuZWwvYnBmL0tjb25maWdgIGZpbGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgQlBGIExTTSAoTGludXggU2VjdXJpdHkgTW9kdWxlcykgc3VwcG9ydCBpcyBjb25maWd1cmVkIHdpdGhpbiB0aGUga2VybmVsLiBUaGlzIGlzIGNydWNpYWwgZm9yIG1lOyBpdCYjMzk7cyB0aGUgZ2F0ZWtlZXBlciB0byB1bmRlcnN0YW5kaW5nIGhvdyBCUEYgcHJvZ3JhbXMgY2FuIGhvb2sgaW50byB0aGUgc2VjdXJpdHkgaW5mcmFzdHJ1Y3R1cmUsIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgKmhvdyogSSBtaWdodCBsZXZlcmFnZSB0aGF0IGZvciBteSBzcGVjaWZpYyBzZWN1cml0eSByZXNlYXJjaC9wcm9qZWN0LgoKSSYjMzk7bSBzY2FubmluZyB0aGUgZmlsZSBub3csIGxvb2tpbmcgZm9yIHRoZSByZWxldmFudCBkZWZpbml0aW9ucy4gSSYjMzk7bSBpbW1lZGlhdGVseSBmb2N1c2luZyBvbiB0aGUgZGVwZW5kZW5jaWVzIGFuZCB0aGUgZGVmYXVsdCBzZXR0aW5ncy4gV2hhdCBhcmUgdGhlIHByZXJlcXVpc2l0ZXM/IEFyZSB0aGVyZSBvdGhlciBrZXJuZWwgZmVhdHVyZXMgdGhhdCBuZWVkIHRvIGJlIGVuYWJsZWQgYmVmb3JlIEJQRiBMU00gYmVjb21lcyBhdmFpbGFibGU/IEkgbmVlZCB0byBrbm93IHRoZSBlbnRpcmUgYnVpbGQgZ3JhcGggZm9yIGVuYWJsaW5nIHRoZSBmZWF0dXJlLCBvZiBjb3Vyc2UuIEFyZSB0aGVyZSBhbnkgZGVmYXVsdCBvcHRpb25zIGVuYWJsZWQgb3IgZGlzYWJsZWQsIGFuZCB3aHk/IFRoaXMgd2lsbCBnaXZlIG1lIGFuIGluaXRpYWwgc2Vuc2Ugb2YgaG93IHdpZGVseSBhdmFpbGFibGUgYW5kIGVuYWJsZWQgdGhpcyBmZWF0dXJlIGlzIG91dC1vZi10aGUtYm94LCBvciB3aGV0aGVyIHRoZXJlIGFyZSBhbnkgcHJhY3RpY2FsIHJvYWRibG9ja3MgdG8gZGVwbG95aW5nIGl0IHdpdGhpbiBhIGNvbW1vbiBlbnZpcm9ubWVudCwgYXNzdW1pbmcgSSB3YW50IHRvLgoKTmV4dCwgSSYjMzk7bGwgYmUgc2NydXRpbml6aW5nIGFueSBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGxvb2tpbmcgZm9yIHRob3NlIHRoYXQgYWZmZWN0IGhvdyBCUEYgcHJvZ3JhbXMgaW50ZXJhY3Qgd2l0aCB0aGUgTFNNIGZyYW1ld29yay4gQXJlIHRoZXJlIGtub2JzIGZvciBjb250cm9sbGluZyB0aGUgbWF4aW11bSBudW1iZXIgb2YgaG9va3M/IEFueSBzcGVjaWZpYyBzZWN1cml0eSBwb2xpY2llcyB0aWVkIHRvIEJQRiBwcm9ncmFtcz8gQXJlIHRoZXJlIGZpbmUtZ3JhaW5lZCBjb250cm9scyByZWxhdGVkIHRvIG1lbW9yeSBhbGxvY2F0aW9uLCBvciB2ZXJpZmljYXRpb24gc3RlcHMgZm9yIHRoZSBwcm9ncmFtLCBmb3IgZXhhbXBsZT8gVGhpcyBpcyB3aGVyZSB0aGUgZGV2aWwgaXMgaW4gdGhlIGRldGFpbHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdHJhZGUtb2ZmcyB0aGUga2VybmVsIGRldmVsb3BlcnMgaGF2ZSBtYWRlLiBJIHdpbGwgc3RhcnQgYnkgY29tcGFyaW5nIHRoZXNlIG9wdGlvbnMgd2l0aCBhbnkgc2ltaWxhciBmdW5jdGlvbmFsaXR5IGF2YWlsYWJsZSBpbiBvbGRlciBMU00gYXJjaGl0ZWN0dXJlcyB0byBzZWUgdGhlIGV2b2x1dGlvbiBvZiB0aGUgY29uY2VwdC4KCkkmIzM5O20gc3BlY2lmaWNhbGx5IGxvb2tpbmcgZm9yIGFueXRoaW5nIHRoYXQgbWlnaHQgaW5mbHVlbmNlIHBlcmZvcm1hbmNlLCBzZWN1cml0eSwgb3Igc3RhYmlsaXR5LiBGb3IgZXhhbXBsZSwgaG93IGRvZXMgdGhlIHN5c3RlbSBoYW5kbGUgcG90ZW50aWFsbHkgbWFsaWNpb3VzIG9yIGVycm9uZW91cyBCUEYgcHJvZ3JhbXMgdGhhdCBtaWdodCBiZSBpbmplY3RlZCBpbnRvIHRoZSBzeXN0ZW0/IEFyZSB0aGVyZSBzYW5pdHkgY2hlY2tzIG9yIHJlc291cmNlIGxpbWl0cyB0aGF0IEkgY2FuIHR3ZWFrLCBvciBhcmUgdGhlIGRlZmF1bHRzIHNvbGlkPyBUaGlzIHdpbGwgc2hhcGUgaG93IGNvbWZvcnRhYmxlIEkgZmVlbCByZWx5aW5nIG9uIHRoaXMgZmVhdHVyZSBpbiBteSBvd24gd29yay4KCkZpbmFsbHksIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGFueSBoaW50cyBhYm91dCBmdXR1cmUgcGxhbnMgb3IgZGVwcmVjYXRpb24gd2FybmluZ3MuIEFueSBjb21tZW50cyBpbiB0aGUgZmlsZSBvciByZWxhdGVkIGRvY3VtZW50YXRpb24gdGhhdCBwcm92aWRlIGluc2lnaHRzIGludG8gb25nb2luZyBkZXZlbG9wbWVudCwgYW5kIHBvdGVudGlhbCBjaGFuZ2VzIGluIGhvdyBCUEYgTFNNIGZ1bmN0aW9ucywgYXJlIGltcG9ydGFudC4gVW5kZXJzdGFuZGluZyB0aGUga2VybmVsIGNvbW11bml0eSYjMzk7cyBkaXJlY3Rpb24gaXMgdml0YWwgZm9yIGxvbmctdGVybSBwcm9qZWN0IHBsYW5uaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAyMDoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDkyLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgOTI6XHRjb25maWcgQlBGX0xTTVxuICA5MzpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgQlBGIExTTSBJbnN0cnVtZW50YXRpb25cJiMzNDtcbiAgOTQ6XHRcdGRlcGVuZHMgb24gQlBGX0VWRU5UU1xuICA5NTpcdFx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTFxuICA5NjpcdFx0ZGVwZW5kcyBvbiBTRUNVUklUWVxuICA5NzpcdFx0ZGVwZW5kcyBvbiBCUEZfSklUXG4gIDk4Olx0XHRoZWxwXG4gIDk5Olx0XHQgIEVuYWJsZXMgaW5zdHJ1bWVudGF0aW9uIG9mIHRoZSBzZWN1cml0eSBob29rcyB3aXRoIEJQRiBwcm9ncmFtcyBmb3JcbiAxMDA6XHRcdCAgaW1wbGVtZW50aW5nIGR5bmFtaWMgTUFDIGFuZCBBdWRpdCBQb2xpY2llcy5cbiAxMDE6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMjA6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAyNTcKCQkJCQkJCW91dHB1dDogMTM0CgkJCQkJCQl0aG91Z2h0czogNzg4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRlMtVkVSSVRZIEJQRiBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCB3ZSYjMzk7cmUgZGVmaW5pdGVseSBkZWFsaW5nIHdpdGggc29tZXRoaW5nIHRoYXQgaW52b2x2ZXMgYEJQRl9MU01gLCBhbmQgb2YgY291cnNlIGBTRUNVUklUWWAuIFRoZSBwYXRjaCBzZWVtcyB0byBiZSB0b3VjaGluZyBCUEYtcmVsYXRlZCBjb2RlLCBzbyBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYEJQRl9MU01gIGlzIHRoZSByaWdodCBjb25maWd1cmF0aW9uLiBBaCwgeWVzLCBgQlBGX0xTTWAgZGVwZW5kcyBvbiBgQlBGX0VWRU5UU2AsIGBCUEZfU1lTQ0FMTGAsIGBTRUNVUklUWWAsIGFuZCBgQlBGX0pJVGAuIFNvLCB5ZWFoLCB0aGF0IG1ha2VzIHNlbnNlOyBlbmFibGluZyBgQlBGX0xTTWAgaXMgZGVmaW5pdGVseSB0aGUgY29ycmVjdCBjb25maWcuIEl0IGFsc28gbG9va3MgbGlrZSBgRlNfVkVSSVRZYCBpdHNlbGYgaXMgZ29pbmcgdG8gYmUgaW1wb3J0YW50LgoKTm93LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBwYXRjaCBpdHNlbGYuIEkmIzM5O20gc2VlaW5nIGNoYW5nZXMgZm9jdXNpbmcgb24gdHlwZSB1cGdyYWRlcyB0byBgdTY0YC4gTG9va2luZyBjbG9zZWx5LCBpdCBsb29rcyBsaWtlIHRoZXJlJiMzOTtzIGJlZW4gYSBjaGFuZ2UgaW4gaG93IGBkeW5wdHJfc3pgIGlzIGhhbmRsZWQuIEl0IHNlZW1zIHRoZSBvcmlnaW5hbCBjb2RlIGhhZCBhIHBvdGVudGlhbCBmb3IgYW4gaW50ZWdlciBvdmVyZmxvdyBvciBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3MuIFRoZSBuZXcgY29kZSBkb2VzIHNpemUgY2hlY2tzLCB3aGljaCBpcyBnb29kLiBUaGUgcGF0Y2ggaXMgZGVmaW5pdGVseSBwcmV2ZW50aW5nIGEgdnVsbmVyYWJpbGl0eSByZWxhdGVkIHRvIHRoZSBgYnBmX2dldF9mc3Zlcml0eV9kaWdlc3RgIGZ1bmN0aW9uLgoKQWxyaWdodCwgY2hlY2tpbmcgdGhyb3VnaCB0aGUgcGF0Y2gsIGFuZCBpdCBsb29rcyBsaWtlIHRoaXMgaXMgdGhlIG9ubHkgZnVuY3Rpb24gbW9kaWZpZWQuIElzIGl0IHJlYWNoYWJsZT8gWWVzLCBiZWNhdXNlIGl0JiMzOTtzIGEga2Z1bmMgdGhhdCBnZXRzIGNhbGxlZCB0aHJvdWdoIHRoZSBCUEYgc3lzY2FsbCB3aGVuIGFuIExTTSBCUEYgcHJvZ3JhbSBvZiBhIHNwZWNpZmljIHR5cGUgaXMgY2FsbGVkLgoKU28sIHRvIHJlY2FwLCBJIG5lZWQgYEZTX1ZFUklUWWAsIGBCUEZfU1lTQ0FMTGAsIGFuZCBgQlBGX0xTTWAgdG8gbWFrZSBzdXJlIEkgYW0gaW4gYSBnb29kIHRlc3RpbmcgY29uZmlnLgoKTm93IEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBzY29wZSwgc28gSSYjMzk7bGwgY2hlY2sgaWYgYGJwZl9nZXRfZnN2ZXJpdHlfZGlnZXN0YCBpcyBhIHN0YXRpYyBvciBpbmxpbmUuIE5vcGUsIGl0JiMzOTtzIG5vdCwgaXQmIzM5O3MgYSBrZnVuYywgd2hpY2ggbWVhbnMgaXQmIzM5O3MgZXhwb3J0ZWQgdG8gQlBGLgoKQmFzaWNhbGx5LCB0aGlzIHBhdGNoIGlzIGZpeGluZyBhIHNlY3VyaXR5IGlzc3VlIGluIGBicGZfZ2V0X2ZzdmVyaXR5X2RpZ2VzdGAgYnkgaGFuZGxpbmcgYGR5bnB0cl9zemAgcHJvcGVybHkuIEl0JiMzOTtzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGl0JiMzOTtzIHJlYWNoYWJsZSB0aHJvdWdoIEJQRiwgc28sIGFic29sdXRlbHksIHRoaXMgaXMgc29tZXRoaW5nIHRoYXQgbmVlZHMgZnV6emluZy4KCk5vdywgYSBxdWljayBjaGVjayBvbiBgRlNfVkVSSVRZYCBhbmQgc3VwcG9ydGVkIGZpbGVzeXN0ZW1zLCBsZXQmIzM5O3Mgc2VlLCBpdCB3b3JrcyBvbiBgZXh0NGAsIGBmMmZzYCwgYGJ0cmZzYC4gQW5kIFN5emthbGxlciBhbHJlYWR5IHRlc3RzIHRob3NlLCBzbyBJIHNob3VsZCBiZSBnb29kIHRvIGdvIGJ5IGp1c3QgZW5hYmxpbmcgYEZTX1ZFUklUWWAuIEkmIzM5O20gZ29pbmcgdG8gc2V0IHRoZSByZXN1bHRzIGFuZCBtb3ZlIG9uIHRvIHRoZSBuZXh0IG9uZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMjA6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0ZTX1ZFUklUWSYjMzQ7LAogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtCUEZfTFNNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2dldF9mc3Zlcml0eV9kaWdlc3QmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gaW50ZWdlciBvdmVyZmxvdyBhbmQgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2VzcyBpbiB0aGUgYGJwZl9nZXRfZnN2ZXJpdHlfZGlnZXN0YCBCUEYga2Z1bmMgYnkgY2hhbmdpbmcgc2l6ZSB2YXJpYWJsZXMgdG8gYHU2NGAgYW5kIGFkZGluZyBhIHByb3BlciBib3VuZHMgY2hlY2suIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBhIHJlYWNoYWJsZSBCUEYgQVBJLCBtYWtpbmcgaXQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RlNfVkVSSVRZJiMzNDssCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9MU00mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfZ2V0X2ZzdmVyaXR5X2RpZ2VzdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiBpbnRlZ2VyIG92ZXJmbG93IGFuZCBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzIGluIHRoZSBgYnBmX2dldF9mc3Zlcml0eV9kaWdlc3RgIEJQRiBrZnVuYyBieSBjaGFuZ2luZyBzaXplIHZhcmlhYmxlcyB0byBgdTY0YCBhbmQgYWRkaW5nIGEgcHJvcGVyIGJvdW5kcyBjaGVjay4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGEgcmVhY2hhYmxlIEJQRiBBUEksIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDNUMjA6MjI6MjMuNDQ3NjczMjhaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTE4NDgzNjM4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJGU19WRVJJVFlcIixcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJCUEZfTFNNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2dldF9mc3Zlcml0eV9kaWdlc3RcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBpbnRlZ2VyIG92ZXJmbG93IGFuZCBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzIGluIHRoZSBgYnBmX2dldF9mc3Zlcml0eV9kaWdlc3RgIEJQRiBrZnVuYyBieSBjaGFuZ2luZyBzaXplIHZhcmlhYmxlcyB0byBgdTY0YCBhbmQgYWRkaW5nIGEgcHJvcGVyIGJvdW5kcyBjaGVjay4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGEgcmVhY2hhYmxlIEJQRiBBUEksIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QyMDoyMjoyMy40NDc2ODM0M1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg5MDkzNTE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMDA3MGY5ZjQ4YjNmZDgyYjE1YjVhZmU4NTMyODc4Y2MyNzg5ZThmMVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEF1ZyAzIDIwOjIyOjIyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2ZzL3Zlcml0eS9tZWFzdXJlLmMgYi9mcy92ZXJpdHkvbWVhc3VyZS5jXFxuaW5kZXggY2ZlMmQ1ZTUzNWY5Ni4uNjhkZmNjYjY5NzcyMCAxMDA2NDRcXG4tLS0gYS9mcy92ZXJpdHkvbWVhc3VyZS5jXFxuKysrIGIvZnMvdmVyaXR5L21lYXN1cmUuY1xcbkBAIC0xMjIsMTEgKzEyMiwxMSBAQCBfX2JwZl9rZnVuYyBpbnQgYnBmX2dldF9mc3Zlcml0eV9kaWdlc3Qoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IHN0cnVjdCBicGZfZHlucFxcbiB7XFxuIFxcdGNvbnN0IHN0cnVjdCBicGZfZHlucHRyX2tlcm4gKmRpZ2VzdF9wdHIgPSAoc3RydWN0IGJwZl9keW5wdHJfa2VybiAqKWRpZ2VzdF9wO1xcbiBcXHRjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShmaWxlKTtcXG4tXFx0dTMyIGR5bnB0cl9zeiA9IF9fYnBmX2R5bnB0cl9zaXplKGRpZ2VzdF9wdHIpO1xcbitcXHR1NjQgZHlucHRyX3N6ID0gX19icGZfZHlucHRyX3NpemUoZGlnZXN0X3B0cik7XFxuIFxcdHN0cnVjdCBmc3Zlcml0eV9kaWdlc3QgKmFyZztcXG4gXFx0Y29uc3Qgc3RydWN0IGZzdmVyaXR5X2luZm8gKnZpO1xcbiBcXHRjb25zdCBzdHJ1Y3QgZnN2ZXJpdHlfaGFzaF9hbGcgKmhhc2hfYWxnO1xcbi1cXHRpbnQgb3V0X2RpZ2VzdF9zejtcXG4rXFx0dTY0IG91dF9kaWdlc3Rfc3o7XFxuIFxcbiBcXHRpZiAoZHlucHRyX3N6IFxcdTAwM2Mgc2l6ZW9mKHN0cnVjdCBmc3Zlcml0eV9kaWdlc3QpKVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5AQCAtMTQ0LDE3ICsxNDQsMjAgQEAgX19icGZfa2Z1bmMgaW50IGJwZl9nZXRfZnN2ZXJpdHlfZGlnZXN0KHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBzdHJ1Y3QgYnBmX2R5bnBcXG4gXFxuIFxcdGhhc2hfYWxnID0gdmktXFx1MDAzZXRyZWVfcGFyYW1zLmhhc2hfYWxnO1xcbiBcXG4rXFx0b3V0X2RpZ2VzdF9zeiA9IGR5bnB0cl9zeiAtIHNpemVvZihzdHJ1Y3QgZnN2ZXJpdHlfZGlnZXN0KTtcXG4rXFx0aWYgKG91dF9kaWdlc3Rfc3ogXFx1MDAzYyBoYXNoX2FsZy1cXHUwMDNlZGlnZXN0X3NpemUpXFxuK1xcdFxcdHJldHVybiAtRU9WRVJGTE9XO1xcbitcXG4gXFx0YXJnLVxcdTAwM2VkaWdlc3RfYWxnb3JpdGhtID0gaGFzaF9hbGcgLSBmc3Zlcml0eV9oYXNoX2FsZ3M7XFxuIFxcdGFyZy1cXHUwMDNlZGlnZXN0X3NpemUgPSBoYXNoX2FsZy1cXHUwMDNlZGlnZXN0X3NpemU7XFxuIFxcbi1cXHRvdXRfZGlnZXN0X3N6ID0gZHlucHRyX3N6IC0gc2l6ZW9mKHN0cnVjdCBmc3Zlcml0eV9kaWdlc3QpO1xcbi1cXG4gXFx0LyogY29weSBkaWdlc3QgKi9cXG4tXFx0bWVtY3B5KGFyZy1cXHUwMDNlZGlnZXN0LCB2aS1cXHUwMDNlZmlsZV9kaWdlc3QsICBtaW5fdChpbnQsIGhhc2hfYWxnLVxcdTAwM2VkaWdlc3Rfc2l6ZSwgb3V0X2RpZ2VzdF9zeikpO1xcbitcXHRtZW1jcHkoYXJnLVxcdTAwM2VkaWdlc3QsIHZpLVxcdTAwM2VmaWxlX2RpZ2VzdCwgaGFzaF9hbGctXFx1MDAzZWRpZ2VzdF9zaXplKTtcXG4gXFxuIFxcdC8qIGZpbGwgdGhlIGV4dHJhIGJ1ZmZlciB3aXRoIHplcm9zICovXFxuIFxcdGlmIChvdXRfZGlnZXN0X3N6IFxcdTAwM2UgaGFzaF9hbGctXFx1MDAzZWRpZ2VzdF9zaXplKVxcbi1cXHRcXHRtZW1zZXQoYXJnLVxcdTAwM2VkaWdlc3QgKyBhcmctXFx1MDAzZWRpZ2VzdF9zaXplLCAwLCBvdXRfZGlnZXN0X3N6IC0gaGFzaF9hbGctXFx1MDAzZWRpZ2VzdF9zaXplKTtcXG4rXFx0XFx0bWVtc2V0KGFyZy1cXHUwMDNlZGlnZXN0ICsgaGFzaF9hbGctXFx1MDAzZWRpZ2VzdF9zaXplLCAwLFxcbitcXHRcXHQgICAgICAgb3V0X2RpZ2VzdF9zeiAtIGhhc2hfYWxnLVxcdTAwM2VkaWdlc3Rfc2l6ZSk7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QyMDoyMjoyMy45Mzc4MTQyMTlaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo1NDY5NDY4MjEwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJGU19WRVJJVFlcIixcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJCUEZfTFNNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2dldF9mc3Zlcml0eV9kaWdlc3RcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBpbnRlZ2VyIG92ZXJmbG93IGFuZCBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzIGluIHRoZSBgYnBmX2dldF9mc3Zlcml0eV9kaWdlc3RgIEJQRiBrZnVuYyBieSBjaGFuZ2luZyBzaXplIHZhcmlhYmxlcyB0byBgdTY0YCBhbmQgYWRkaW5nIGEgcHJvcGVyIGJvdW5kcyBjaGVjay4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGEgcmVhY2hhYmxlIEJQRiBBUEksIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAwMDcwZjlmNDhiM2ZkODJiMTViNWFmZTg1MzI4NzhjYzI3ODllOGYxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMyAyMDoyMjoyMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL3Zlcml0eS9tZWFzdXJlLmMgYi9mcy92ZXJpdHkvbWVhc3VyZS5jXG5pbmRleCBjZmUyZDVlNTM1Zjk2Li42OGRmY2NiNjk3NzIwIDEwMDY0NFxuLS0tIGEvZnMvdmVyaXR5L21lYXN1cmUuY1xuKysrIGIvZnMvdmVyaXR5L21lYXN1cmUuY1xuQEAgLTEyMiwxMSArMTIyLDExIEBAIF9fYnBmX2tmdW5jIGludCBicGZfZ2V0X2ZzdmVyaXR5X2RpZ2VzdChzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3Qgc3RydWN0IGJwZl9keW5wXG4ge1xuIFx0Y29uc3Qgc3RydWN0IGJwZl9keW5wdHJfa2VybiAqZGlnZXN0X3B0ciA9IChzdHJ1Y3QgYnBmX2R5bnB0cl9rZXJuICopZGlnZXN0X3A7XG4gXHRjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShmaWxlKTtcbi1cdHUzMiBkeW5wdHJfc3ogPSBfX2JwZl9keW5wdHJfc2l6ZShkaWdlc3RfcHRyKTtcbitcdHU2NCBkeW5wdHJfc3ogPSBfX2JwZl9keW5wdHJfc2l6ZShkaWdlc3RfcHRyKTtcbiBcdHN0cnVjdCBmc3Zlcml0eV9kaWdlc3QgKmFyZztcbiBcdGNvbnN0IHN0cnVjdCBmc3Zlcml0eV9pbmZvICp2aTtcbiBcdGNvbnN0IHN0cnVjdCBmc3Zlcml0eV9oYXNoX2FsZyAqaGFzaF9hbGc7XG4tXHRpbnQgb3V0X2RpZ2VzdF9zejtcbitcdHU2NCBvdXRfZGlnZXN0X3N6O1xuIFxuIFx0aWYgKGR5bnB0cl9zeiBcdTAwM2Mgc2l6ZW9mKHN0cnVjdCBmc3Zlcml0eV9kaWdlc3QpKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbkBAIC0xNDQsMTcgKzE0NCwyMCBAQCBfX2JwZl9rZnVuYyBpbnQgYnBmX2dldF9mc3Zlcml0eV9kaWdlc3Qoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IHN0cnVjdCBicGZfZHlucFxuIFxuIFx0aGFzaF9hbGcgPSB2aS1cdTAwM2V0cmVlX3BhcmFtcy5oYXNoX2FsZztcbiBcbitcdG91dF9kaWdlc3Rfc3ogPSBkeW5wdHJfc3ogLSBzaXplb2Yoc3RydWN0IGZzdmVyaXR5X2RpZ2VzdCk7XG4rXHRpZiAob3V0X2RpZ2VzdF9zeiBcdTAwM2MgaGFzaF9hbGctXHUwMDNlZGlnZXN0X3NpemUpXG4rXHRcdHJldHVybiAtRU9WRVJGTE9XO1xuK1xuIFx0YXJnLVx1MDAzZWRpZ2VzdF9hbGdvcml0aG0gPSBoYXNoX2FsZyAtIGZzdmVyaXR5X2hhc2hfYWxncztcbiBcdGFyZy1cdTAwM2VkaWdlc3Rfc2l6ZSA9IGhhc2hfYWxnLVx1MDAzZWRpZ2VzdF9zaXplO1xuIFxuLVx0b3V0X2RpZ2VzdF9zeiA9IGR5bnB0cl9zeiAtIHNpemVvZihzdHJ1Y3QgZnN2ZXJpdHlfZGlnZXN0KTtcbi1cbiBcdC8qIGNvcHkgZGlnZXN0ICovXG4tXHRtZW1jcHkoYXJnLVx1MDAzZWRpZ2VzdCwgdmktXHUwMDNlZmlsZV9kaWdlc3QsICBtaW5fdChpbnQsIGhhc2hfYWxnLVx1MDAzZWRpZ2VzdF9zaXplLCBvdXRfZGlnZXN0X3N6KSk7XG4rXHRtZW1jcHkoYXJnLVx1MDAzZWRpZ2VzdCwgdmktXHUwMDNlZmlsZV9kaWdlc3QsIGhhc2hfYWxnLVx1MDAzZWRpZ2VzdF9zaXplKTtcbiBcbiBcdC8qIGZpbGwgdGhlIGV4dHJhIGJ1ZmZlciB3aXRoIHplcm9zICovXG4gXHRpZiAob3V0X2RpZ2VzdF9zeiBcdTAwM2UgaGFzaF9hbGctXHUwMDNlZGlnZXN0X3NpemUpXG4tXHRcdG1lbXNldChhcmctXHUwMDNlZGlnZXN0ICsgYXJnLVx1MDAzZWRpZ2VzdF9zaXplLCAwLCBvdXRfZGlnZXN0X3N6IC0gaGFzaF9hbGctXHUwMDNlZGlnZXN0X3NpemUpO1xuK1x0XHRtZW1zZXQoYXJnLVx1MDAzZWRpZ2VzdCArIGhhc2hfYWxnLVx1MDAzZWRpZ2VzdF9zaXplLCAwLFxuK1x0XHQgICAgICAgb3V0X2RpZ2VzdF9zeiAtIGhhc2hfYWxnLVx1MDAzZWRpZ2VzdF9zaXplKTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDIwOjIyOjIzLjkzNzgxNjM3OVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU1MDk0OTU3NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgZnMvdmVyaXR5L21lYXN1cmUuY2AgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgZnMvdmVyaXR5L21lYXN1cmUuY2AgYW5kIGltbWVkaWF0ZWx5IEkgc2VlIHRoYXQgd2UncmUgZGVhbGluZyB3aXRoIGBicGZfZ2V0X2ZzdmVyaXR5X2RpZ2VzdGAuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgYnVtcGluZyB0aGUgZGF0YSB0eXBlcyBvZiBgZHlucHRyX3N6YCBhbmQgYG91dF9kaWdlc3Rfc3pgIGZyb20gYHUzMmAgYW5kIGBpbnRgIHRvIGB1NjRgLiBUaGlzIHByb2JhYmx5IG1lYW5zIHdlJ3JlIGFudGljaXBhdGluZyBzaWduaWZpY2FudGx5IGxhcmdlciBkaWdlc3Qgc2l6ZXMgb3IgcG90ZW50aWFsbHkgd29ya2luZyB3aXRoIG11Y2ggbGFyZ2VyIGZpbGUgc2l6ZXMsIHJlcXVpcmluZyBtb3JlIGJpdHMgZm9yIGFjY3VyYXRlIHJlcHJlc2VudGF0aW9uLlxuXG5UaGUgcGF0Y2ggYWxzbyB0d2Vha3MgdGhlIHNpemUgY2hlY2suIEl0IGxvb2tzIGxpa2UgaXQncyBub3cgZXhwbGljaXRseSBjaGVja2luZyBpZiBgb3V0X2RpZ2VzdF9zemAgaXMgKmxlc3MgdGhhbiogYGhhc2hfYWxnLVx1MDAzZWRpZ2VzdF9zaXplYCBhbmQgcmV0dXJuaW5nIGAtRU9WRVJGTE9XYCBpbiB0aGF0IGNhc2UsIHdoaWNoIGlzIGEgZ29vZCBkZWZlbnNpdmUgcHJvZ3JhbW1pbmcgbWVhc3VyZS4gUHJldmlvdXNseSB0aGVyZSB3YXMgYW4gaW1wbGljaXQgY2hlY2suIFRoaXMgbGlrZWx5IHByZXZlbnRzIHVuZGVyZmxvdyBpc3N1ZXMgZHVyaW5nIGRpZ2VzdCBjb21wYXJpc29uLlxuXG5GdXJ0aGVybW9yZSwgdGhlIGBtZW1jcHlgIGFuZCBgbWVtc2V0YCBvcGVyYXRpb25zIGFyZSBiZWluZyB1cGRhdGVkIHRvIGRpcmVjdGx5IHVzZSBgaGFzaF9hbGctXHUwMDNlZGlnZXN0X3NpemVgIGluc3RlYWQgb2YgdGhlIGBtaW5fdGAgZnVuY3Rpb24uIFRoaXMgc2ltcGxpZmljYXRpb24gaXMgZ29vZCwgYXMgaXQgc3VnZ2VzdHMgdGhlIHBhdGNoIGNvcnJlY3RseSBjYWxjdWxhdGVzIHRoZSBjb3JyZWN0IGJ1ZmZlciBzaXplIHRvIGF2b2lkIGFueSBwb3RlbnRpYWwgYnVmZmVyIG92ZXJmbG93cy4gTm8gbW9yZSBtaW4gY2FsbHMhIFRoaXMgaXMgYW4gb3B0aW1pemF0aW9uIGFuZCBhbiBpbXByb3ZlbWVudCBpbiB0aGUgbG9naWMgYXMgd2VsbC5cblxuTm93LCBiZWZvcmUgSSBkaWcgZGVlcGVyIGludG8gdGhlIGNvZGUgaXRzZWxmLCBJIHNob3VsZCBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucy4gTGV0J3Mgc2VlLi4uIGBmcy92ZXJpdHkvbWVhc3VyZS5jYCBpcyBkZWZpbml0ZWx5IHBhcnQgb2YgYEZTX1ZFUklUWWAsIHdoaWNoIGlzIG9idmlvdXMuIEkgbmVlZCB0byBncmVwIGZvciBgYnBmX2dldF9mc3Zlcml0eV9kaWdlc3RgIHRvIGZpbmQgYW55IG90aGVyIHVzYWdlcyBvciByZWZlcmVuY2VzLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGlzIGZ1bmN0aW9uIGlzIHVzZWQgYW5kIHdoYXQgb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbSBhcmUgYWZmZWN0ZWQgYnkgdGhlc2UgY2hhbmdlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGJpZyBwaWN0dXJlIVxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTI4LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjExLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMjA6MjI6MjkuNDQ3MzE2MDI1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3NjE1MDc4MjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX2dldF9mc3Zlcml0eV9kaWdlc3RcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9icGYvZnNfa2Z1bmNzLnJzdD0xMD1CUEYga2Z1bmNzIGNhbiBiZSB1c2VkIHRvIGdldCB0aGVzZSBkYXRhLlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9icGYvZnNfa2Z1bmNzLnJzdC0xMy1cXG5Eb2N1bWVudGF0aW9uL2JwZi9mc19rZnVuY3MucnN0OjE0OiAqIGBgYnBmX2dldF9mc3Zlcml0eV9kaWdlc3QoKWBgXFxuRG9jdW1lbnRhdGlvbi9icGYvZnNfa2Z1bmNzLnJzdC0xNS1cXG4tLVxcbmZzL3Zlcml0eS9tZWFzdXJlLmM9MTEwPV9fYnBmX2tmdW5jX3N0YXJ0X2RlZnMoKTtcXG4tLVxcbmZzL3Zlcml0eS9tZWFzdXJlLmMtMTEyLS8qKlxcbmZzL3Zlcml0eS9tZWFzdXJlLmM6MTEzOiAqIGJwZl9nZXRfZnN2ZXJpdHlfZGlnZXN0OiByZWFkIGZzdmVyaXR5IGRpZ2VzdCBvZiBmaWxlXFxuZnMvdmVyaXR5L21lYXN1cmUuYy0xMTQtICogQGZpbGU6IGZpbGUgdG8gZ2V0IGRpZ2VzdCBmcm9tXFxuLS1cXG5mcy92ZXJpdHkvbWVhc3VyZS5jLTEyMC0gKi9cXG5mcy92ZXJpdHkvbWVhc3VyZS5jOjEyMTpfX2JwZl9rZnVuYyBpbnQgYnBmX2dldF9mc3Zlcml0eV9kaWdlc3Qoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IHN0cnVjdCBicGZfZHlucHRyICpkaWdlc3RfcClcXG5mcy92ZXJpdHkvbWVhc3VyZS5jLTEyMi17XFxuLS1cXG5mcy92ZXJpdHkvbWVhc3VyZS5jPTE2Nz1CVEZfS0ZVTkNTX1NUQVJUKGZzdmVyaXR5X3NldF9pZHMpXFxuZnMvdmVyaXR5L21lYXN1cmUuYzoxNjg6QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9nZXRfZnN2ZXJpdHlfZGlnZXN0KVxcbmZzL3Zlcml0eS9tZWFzdXJlLmMtMTY5LUJURl9LRlVOQ1NfRU5EKGZzdmVyaXR5X3NldF9pZHMpXFxuZnMvdmVyaXR5L21lYXN1cmUuYy0xNzAtXFxuZnMvdmVyaXR5L21lYXN1cmUuYzoxNzE6c3RhdGljIGludCBicGZfZ2V0X2ZzdmVyaXR5X2RpZ2VzdF9maWx0ZXIoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIga2Z1bmNfaWQpXFxuZnMvdmVyaXR5L21lYXN1cmUuYy0xNzIte1xcbi0tXFxuZnMvdmVyaXR5L21lYXN1cmUuYz0xODA9c3RhdGljIGNvbnN0IHN0cnVjdCBidGZfa2Z1bmNfaWRfc2V0IGJwZl9mc3Zlcml0eV9zZXQgPSB7XFxuLS1cXG5mcy92ZXJpdHkvbWVhc3VyZS5jLTE4Mi1cXHQuc2V0ID0gXFx1MDAyNmZzdmVyaXR5X3NldF9pZHMsXFxuZnMvdmVyaXR5L21lYXN1cmUuYzoxODM6XFx0LmZpbHRlciA9IGJwZl9nZXRfZnN2ZXJpdHlfZGlnZXN0X2ZpbHRlcixcXG5mcy92ZXJpdHkvbWVhc3VyZS5jLTE4NC19O1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JwZl9rZnVuY3MuaD03MT1leHRlcm4gaW50IGJwZl9nZXRfZmlsZV94YXR0cihzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciAqbmFtZSxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmX2tmdW5jcy5oLTcyLVxcdFxcdFxcdCAgICAgIHN0cnVjdCBicGZfZHlucHRyICp2YWx1ZV9wdHIpIF9fa3N5bTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmX2tmdW5jcy5oOjczOmV4dGVybiBpbnQgYnBmX2dldF9mc3Zlcml0eV9kaWdlc3Qoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IHN0cnVjdCBicGZfZHlucHRyICpkaWdlc3RfcHRyKSBfX2tzeW07XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JwZl9rZnVuY3MuaC03NC1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X2ZzdmVyaXR5LmM9MjQ9aW50IEJQRl9QUk9HKHRlc3RfZmlsZV9vcGVuLCBzdHJ1Y3QgZmlsZSAqZilcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X2ZzdmVyaXR5LmMtMzUtXFx0YnBmX2R5bnB0cl9mcm9tX21lbShkaWdlc3QsIHNpemVvZihkaWdlc3QpLCAwLCBcXHUwMDI2ZGlnZXN0X3B0cik7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfZnN2ZXJpdHkuYzozNjpcXHRyZXQgPSBicGZfZ2V0X2ZzdmVyaXR5X2RpZ2VzdChmLCBcXHUwMDI2ZGlnZXN0X3B0cik7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfZnN2ZXJpdHkuYy0zNy1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NpZ19pbl94YXR0ci5jPTExPWNoYXIgX2xpY2Vuc2VbXSBTRUMoXFxcImxpY2Vuc2VcXFwiKSA9IFxcXCJHUExcXFwiO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2lnX2luX3hhdHRyLmMtMjgtICogcGx1cyBTSEEyNTZfRElHRVNUX1NJWkUuIFRoZSBtYWdpYyBwYXJ0IG9mIGl0IGlzIGZpbGxlZCBieSB1c2VyIHNwYWNlLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NpZ19pbl94YXR0ci5jOjI5OiAqIGFuZCB0aGUgcmVzdCBvZiBpdCBpcyBmaWxsZWQgYnkgYnBmX2dldF9mc3Zlcml0eV9kaWdlc3QuXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2lnX2luX3hhdHRyLmMtMzAtICpcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NpZ19pbl94YXR0ci5jPTQ2PWludCBCUEZfUFJPRyh0ZXN0X2ZpbGVfb3Blbiwgc3RydWN0IGZpbGUgKmYpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9zaWdfaW5feGF0dHIuYy01OS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9zaWdfaW5feGF0dHIuYzo2MDpcXHRyZXQgPSBicGZfZ2V0X2ZzdmVyaXR5X2RpZ2VzdChmLCBcXHUwMDI2ZGlnZXN0X3B0cik7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2lnX2luX3hhdHRyLmMtNjEtXFx0LyogTm8gdmVyaXR5LCBhbGxvdyBhY2Nlc3MgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMjA6MjI6MzIuMjA4ODMwMTUzWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTEwNTQ1MTQyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBicGZfZ2V0X2ZzdmVyaXR5X2RpZ2VzdGAga2Z1bmMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBicGZfZ2V0X2ZzdmVyaXR5X2RpZ2VzdGAgZnVuY3Rpb24uIEl0J3MgZmxhZ2dlZCBhcyBhIEJQRiBrZnVuYywgd2hpY2ggbWVhbnMgaXQncyBhIGtlcm5lbCBmdW5jdGlvbiBhdmFpbGFibGUgZm9yIHVzZSB3aXRoaW4gQlBGIHByb2dyYW1zLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJXaGVyZSdzIHRoaXMgZGVmaW5lZD8gSSBuZWVkIHRvIGtub3cgdGhlIGNvbnRleHQuXCIgQWgsIGBmcy92ZXJpdHkvbWVhc3VyZS5jYCDigJMgZ290IGl0LiBOb3csIGdpdmVuIG15IGV4cGVyaWVuY2UsIEkgd2FudCB0byBxdWlja2x5IGFzY2VydGFpbiB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiBmb3IgdGhhdCBmaWxlLiBTcGVjaWZpY2FsbHksIEknZCBsaWtlIHRvIGNoZWNrIGlmIGFueSBwYXJ0aWN1bGFyIGtlcm5lbCBjb25maWcgZW5hYmxlcyB0aGUgY29tcGlsYXRpb24gb2YgYG1lYXN1cmUuY2AsIHRvIGNoZWNrIGZvciBhbnkgZGVwZW5kZW5jaWVzLiBJJ2xsIHRha2UgYSBsb29rIGF0IHRoZSBgZnMvdmVyaXR5L01ha2VmaWxlYCB0byBzZWUgdW5kZXIgd2hpY2ggY29uZmlndXJhdGlvbiBpdCBpcyBjb21waWxlZC4gVGhhdCB3aWxsIGdpdmUgbWUgYSBzZW5zZSBvZiB3aGF0J3MgdGllZCB0byB0aGlzIGZ1bmN0aW9uYWxpdHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0MTgsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QyMDoyMjozNy4zMTQyODQyMjRaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODg0MjMyNjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVhc3VyZS5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL3Zlcml0eS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy92ZXJpdHkvTWFrZWZpbGU9Mz1vYmotJChDT05GSUdfRlNfVkVSSVRZKSArPSBlbmFibGUubyBcXFxcXFxuLS1cXG5mcy92ZXJpdHkvTWFrZWZpbGUtNS1cXHRcXHRcXHQgICBpbml0Lm8gXFxcXFxcbmZzL3Zlcml0eS9NYWtlZmlsZTo2OlxcdFxcdFxcdCAgIG1lYXN1cmUubyBcXFxcXFxuZnMvdmVyaXR5L01ha2VmaWxlLTctXFx0XFx0XFx0ICAgb3Blbi5vIFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMjA6MjI6MzcuNDAyNzE0MTM4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDczMTIxOTY0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLi4uXG5cbioqVmVyaXR5IEtlcm5lbCBNb2R1bGUgQ29uZmlndXJhdGlvbioqXG5cblJpZ2h0LCBJIG5lZWQgdG8gbWFrZSBzdXJlIGBDT05GSUdfRlNfVkVSSVRZYCBpcyBlbmFibGVkLiBTZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLiBOb3csIGEgbGl0dGxlIG5hZ2dpbmcgdGhvdWdodC4uLiBpcyBgYnBmX2dldF9mc3Zlcml0eV9kaWdlc3RgIGNvbXBpbGVkIHVuY29uZGl0aW9uYWxseSBpZiBgQ09ORklHX0ZTX1ZFUklUWWAgaXMgZGVmaW5lZD8gSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiBiZWNhdXNlIHRoYXQgY291bGQgaW50cm9kdWNlIHNvbWUgc3VidGxlIGRlcGVuZGVuY3kgcHJvYmxlbXMgaWYgbm90IGhhbmRsZWQgY29ycmVjdGx5LiBCZXR0ZXIgdG8gY29uZmlybSBpdCdzIGNvbmRpdGlvbmFsLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgc291cmNlLiBJJ2xsIGNoZWNrIGBmcy92ZXJpdHkvbWVhc3VyZS5jYCBhbmQgbG9vayBzcGVjaWZpY2FsbHkgZm9yIGFueSBgI2lmZGVmYCBkaXJlY3RpdmVzIHN1cnJvdW5kaW5nIHRoZSBgYnBmX2dldF9mc3Zlcml0eV9kaWdlc3RgIGZ1bmN0aW9uIGRlZmluaXRpb24uIFRoYXQgd2lsbCB0ZWxsIG1lIGltbWVkaWF0ZWx5IHdoZXRoZXIgb3Igbm90IGl0J3MgY29uZGl0aW9uYWxseSBjb21waWxlZC4gSSBkb24ndCB3YW50IHRvIGNoYXNlIGRvd24gdW5uZWNlc3NhcnkgaXNzdWVzIGxhdGVyLiBJdCdzIGJlc3QgdG8gYmUgcHJlY2lzZSwgb3IgZWxzZSB0aGUgY29tcGlsZXIgbWF5IHRocm93IGEgdGFudHJ1bS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDc4NywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDIwOjIyOjQyLjEzMzkzNzcwMloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MzIzNTc4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfZ2V0X2ZzdmVyaXR5X2RpZ2VzdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy92ZXJpdHkvbWVhc3VyZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3Zlcml0eS9tZWFzdXJlLmM9MTEwPV9fYnBmX2tmdW5jX3N0YXJ0X2RlZnMoKTtcXG4tLVxcbmZzL3Zlcml0eS9tZWFzdXJlLmMtMTEyLS8qKlxcbmZzL3Zlcml0eS9tZWFzdXJlLmM6MTEzOiAqIGJwZl9nZXRfZnN2ZXJpdHlfZGlnZXN0OiByZWFkIGZzdmVyaXR5IGRpZ2VzdCBvZiBmaWxlXFxuZnMvdmVyaXR5L21lYXN1cmUuYy0xMTQtICogQGZpbGU6IGZpbGUgdG8gZ2V0IGRpZ2VzdCBmcm9tXFxuLS1cXG5mcy92ZXJpdHkvbWVhc3VyZS5jLTEyMC0gKi9cXG5mcy92ZXJpdHkvbWVhc3VyZS5jOjEyMTpfX2JwZl9rZnVuYyBpbnQgYnBmX2dldF9mc3Zlcml0eV9kaWdlc3Qoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IHN0cnVjdCBicGZfZHlucHRyICpkaWdlc3RfcClcXG5mcy92ZXJpdHkvbWVhc3VyZS5jLTEyMi17XFxuLS1cXG5mcy92ZXJpdHkvbWVhc3VyZS5jPTE2Nz1CVEZfS0ZVTkNTX1NUQVJUKGZzdmVyaXR5X3NldF9pZHMpXFxuZnMvdmVyaXR5L21lYXN1cmUuYzoxNjg6QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9nZXRfZnN2ZXJpdHlfZGlnZXN0KVxcbmZzL3Zlcml0eS9tZWFzdXJlLmMtMTY5LUJURl9LRlVOQ1NfRU5EKGZzdmVyaXR5X3NldF9pZHMpXFxuZnMvdmVyaXR5L21lYXN1cmUuYy0xNzAtXFxuZnMvdmVyaXR5L21lYXN1cmUuYzoxNzE6c3RhdGljIGludCBicGZfZ2V0X2ZzdmVyaXR5X2RpZ2VzdF9maWx0ZXIoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIga2Z1bmNfaWQpXFxuZnMvdmVyaXR5L21lYXN1cmUuYy0xNzIte1xcbi0tXFxuZnMvdmVyaXR5L21lYXN1cmUuYz0xODA9c3RhdGljIGNvbnN0IHN0cnVjdCBidGZfa2Z1bmNfaWRfc2V0IGJwZl9mc3Zlcml0eV9zZXQgPSB7XFxuLS1cXG5mcy92ZXJpdHkvbWVhc3VyZS5jLTE4Mi1cXHQuc2V0ID0gXFx1MDAyNmZzdmVyaXR5X3NldF9pZHMsXFxuZnMvdmVyaXR5L21lYXN1cmUuYzoxODM6XFx0LmZpbHRlciA9IGJwZl9nZXRfZnN2ZXJpdHlfZGlnZXN0X2ZpbHRlcixcXG5mcy92ZXJpdHkvbWVhc3VyZS5jLTE4NC19O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QyMDoyMjo0Mi4xOTcxNzg3MzlaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDgzNzQxNzEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBkZWVwIGluIHRoZSB3ZWVkcyBvZiBrZXJuZWwgZGV2ZWxvcG1lbnQ6XG5cbioqRGl2aW5nIGludG8gVmVyaXR5J3MgTWVhc3VyZW1lbnQgQ29kZSoqXG5cbkFscmlnaHQsIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IGBmcy92ZXJpdHkvbWVhc3VyZS5jYCBoYW5kbGVzIEJQRiBzeXNjYWxscywgaWYgYXQgYWxsLiBJdCdzIGxpa2VseSB0aGF0IGZ1bmN0aW9uYWxpdHkgaXMgY29uZGl0aW9uYWxseSBjb21waWxlZCwgc28gSSdtIGdvaW5nIHRvIHNjYW4gdGhyb3VnaCB0aGF0IGZpbGUgaW1tZWRpYXRlbHkuIE15IHByaW1hcnkgZm9jdXMgaXMgdG8gaWRlbnRpZnkgYW55IHByZXByb2Nlc3NvciBkaXJlY3RpdmVzLCBzcGVjaWZpY2FsbHkgYCNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExgIOKAkyB0aGF0J3MgdGhlIHRlbGx0YWxlIHNpZ24gSSdtIGxvb2tpbmcgZm9yLiBUaGlzIHNob3VsZCBwcm92aWRlIGluc2lnaHRzIGludG8gd2hldGhlciBCUEYgaW50ZXJhY3Rpb24gaGFzIGJlZW4gaW50ZWdyYXRlZCBkaXJlY3RseSBpbnRvIHZlcml0eSBtZWFzdXJlbWVudC4gVGhlIGdvYWwgaXMgdG8gZWl0aGVyIGNvbmZpcm0gaXRzIGluY2x1c2lvbiwgaXRzIGFic2VuY2UsIG9yIHVuZGVyc3RhbmQgaG93IGl0IGhhcyBiZWVuIGluY29ycG9yYXRlZCBpbnRvIGl0cyBjb3JlIG1lYXN1cmVtZW50IHByb2Nlc3Nlcy4gUXVpY2tseSBza2ltbWluZyB0aGUgY29kZSBpcyBnb2luZyB0byBiZSBteSBmaXJzdCBwcmlvcml0eS4gSSdtIGhvcGluZyB0byBxdWlja2x5IGlkZW50aWZ5IHRoZSBwb2ludHMgb2YgaW50ZXJzZWN0aW9uIGJldHdlZW4gdGhlc2Ugc3Vic3lzdGVtcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTU2NSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDIwOjIyOjQ1LjY4MDkyMjY2MVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTA4OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvdmVyaXR5L21lYXN1cmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTAwOlxcdFxcdFxcdCphbGcgPSBoYXNoX2FsZyAtIGZzdmVyaXR5X2hhc2hfYWxncztcXG4gMTAxOlxcdFxcdGlmIChoYWxnKVxcbiAxMDI6XFx0XFx0XFx0KmhhbGcgPSBoYXNoX2FsZy1cXHUwMDNlYWxnb19pZDtcXG4gMTAzOlxcdFxcdHJldHVybiBoYXNoX2FsZy1cXHUwMDNlZGlnZXN0X3NpemU7XFxuIDEwNDpcXHR9XFxuIDEwNTpcXHRFWFBPUlRfU1lNQk9MX0dQTChmc3Zlcml0eV9nZXRfZGlnZXN0KTtcXG4gMTA2OlxcdFxcbiAxMDc6XFx0I2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxcbiAxMDg6XFx0XFxuIDEwOTpcXHQvKiBicGYga2Z1bmNzICovXFxuIDExMDpcXHRfX2JwZl9rZnVuY19zdGFydF9kZWZzKCk7XFxuIDExMTpcXHRcXG4gMTEyOlxcdC8qKlxcbiAxMTM6XFx0ICogYnBmX2dldF9mc3Zlcml0eV9kaWdlc3Q6IHJlYWQgZnN2ZXJpdHkgZGlnZXN0IG9mIGZpbGVcXG4gMTE0OlxcdCAqIEBmaWxlOiBmaWxlIHRvIGdldCBkaWdlc3QgZnJvbVxcbiAxMTU6XFx0ICogQGRpZ2VzdF9wOiAob3V0KSBkeW5wdHIgZm9yIHN0cnVjdCBmc3Zlcml0eV9kaWdlc3RcXG4gMTE2OlxcdCAqXFxuIDExNzpcXHQgKiBSZWFkIGZzdmVyaXR5X2RpZ2VzdCBvZiAqZmlsZSogaW50byAqZGlnZXN0X3B0ciouXFxuIDExODpcXHQgKlxcbiAxMTk6XFx0ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIGEgbmVnYXRpdmUgdmFsdWUgb24gZXJyb3IuXFxuIDEyMDpcXHQgKi9cXG4gMTIxOlxcdF9fYnBmX2tmdW5jIGludCBicGZfZ2V0X2ZzdmVyaXR5X2RpZ2VzdChzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3Qgc3RydWN0IGJwZl9keW5wdHIgKmRpZ2VzdF9wKVxcbiAxMjI6XFx0e1xcbiAxMjM6XFx0XFx0Y29uc3Qgc3RydWN0IGJwZl9keW5wdHJfa2VybiAqZGlnZXN0X3B0ciA9IChzdHJ1Y3QgYnBmX2R5bnB0cl9rZXJuICopZGlnZXN0X3A7XFxuIDEyNDpcXHRcXHRjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShmaWxlKTtcXG4gMTI1OlxcdFxcdHU2NCBkeW5wdHJfc3ogPSBfX2JwZl9keW5wdHJfc2l6ZShkaWdlc3RfcHRyKTtcXG4gMTI2OlxcdFxcdHN0cnVjdCBmc3Zlcml0eV9kaWdlc3QgKmFyZztcXG4gMTI3OlxcdFxcdGNvbnN0IHN0cnVjdCBmc3Zlcml0eV9pbmZvICp2aTtcXG4gMTI4OlxcdFxcdGNvbnN0IHN0cnVjdCBmc3Zlcml0eV9oYXNoX2FsZyAqaGFzaF9hbGc7XFxuIDEyOTpcXHRcXHR1NjQgb3V0X2RpZ2VzdF9zejtcXG4gMTMwOlxcdFxcbiAxMzE6XFx0XFx0aWYgKGR5bnB0cl9zeiBcXHUwMDNjIHNpemVvZihzdHJ1Y3QgZnN2ZXJpdHlfZGlnZXN0KSlcXG4gMTMyOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiAxMzM6XFx0XFxuIDEzNDpcXHRcXHRhcmcgPSBfX2JwZl9keW5wdHJfZGF0YV9ydyhkaWdlc3RfcHRyLCBkeW5wdHJfc3opO1xcbiAxMzU6XFx0XFx0aWYgKCFhcmcpXFxuIDEzNjpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gMTM3OlxcdFxcbiAxMzg6XFx0XFx0aWYgKCFJU19BTElHTkVEKCh1aW50cHRyX3QpYXJnLCBfX2FsaWdub2ZfXygqYXJnKSkpXFxuIDEzOTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gMTQwOlxcdFxcbiAxNDE6XFx0XFx0dmkgPSBmc3Zlcml0eV9nZXRfaW5mbyhpbm9kZSk7XFxuIDE0MjpcXHRcXHRpZiAoIXZpKVxcbiAxNDM6XFx0XFx0XFx0cmV0dXJuIC1FTk9EQVRBOyAvKiBub3QgYSB2ZXJpdHkgZmlsZSAqL1xcbiAxNDQ6XFx0XFxuIDE0NTpcXHRcXHRoYXNoX2FsZyA9IHZpLVxcdTAwM2V0cmVlX3BhcmFtcy5oYXNoX2FsZztcXG4gMTQ2OlxcdFxcbiAxNDc6XFx0XFx0b3V0X2RpZ2VzdF9zeiA9IGR5bnB0cl9zeiAtIHNpemVvZihzdHJ1Y3QgZnN2ZXJpdHlfZGlnZXN0KTtcXG4gMTQ4OlxcdFxcdGlmIChvdXRfZGlnZXN0X3N6IFxcdTAwM2MgaGFzaF9hbGctXFx1MDAzZWRpZ2VzdF9zaXplKVxcbiAxNDk6XFx0XFx0XFx0cmV0dXJuIC1FT1ZFUkZMT1c7XFxuIDE1MDpcXHRcXG4gMTUxOlxcdFxcdGFyZy1cXHUwMDNlZGlnZXN0X2FsZ29yaXRobSA9IGhhc2hfYWxnIC0gZnN2ZXJpdHlfaGFzaF9hbGdzO1xcbiAxNTI6XFx0XFx0YXJnLVxcdTAwM2VkaWdlc3Rfc2l6ZSA9IGhhc2hfYWxnLVxcdTAwM2VkaWdlc3Rfc2l6ZTtcXG4gMTUzOlxcdFxcbiAxNTQ6XFx0XFx0LyogY29weSBkaWdlc3QgKi9cXG4gMTU1OlxcdFxcdG1lbWNweShhcmctXFx1MDAzZWRpZ2VzdCwgdmktXFx1MDAzZWZpbGVfZGlnZXN0LCBoYXNoX2FsZy1cXHUwMDNlZGlnZXN0X3NpemUpO1xcbiAxNTY6XFx0XFxuIDE1NzpcXHRcXHQvKiBmaWxsIHRoZSBleHRyYSBidWZmZXIgd2l0aCB6ZXJvcyAqL1xcbiAxNTg6XFx0XFx0aWYgKG91dF9kaWdlc3Rfc3ogXFx1MDAzZSBoYXNoX2FsZy1cXHUwMDNlZGlnZXN0X3NpemUpXFxuIDE1OTpcXHRcXHRcXHRtZW1zZXQoYXJnLVxcdTAwM2VkaWdlc3QgKyBoYXNoX2FsZy1cXHUwMDNlZGlnZXN0X3NpemUsIDAsXFxuIDE2MDpcXHRcXHRcXHQgICAgICAgb3V0X2RpZ2VzdF9zeiAtIGhhc2hfYWxnLVxcdTAwM2VkaWdlc3Rfc2l6ZSk7XFxuIDE2MTpcXHRcXG4gMTYyOlxcdFxcdHJldHVybiAwO1xcbiAxNjM6XFx0fVxcbiAxNjQ6XFx0XFxuIDE2NTpcXHRfX2JwZl9rZnVuY19lbmRfZGVmcygpO1xcbiAxNjY6XFx0XFxuIDE2NzpcXHRCVEZfS0ZVTkNTX1NUQVJUKGZzdmVyaXR5X3NldF9pZHMpXFxuIDE2ODpcXHRCVEZfSURfRkxBR1MoZnVuYywgYnBmX2dldF9mc3Zlcml0eV9kaWdlc3QpXFxuIDE2OTpcXHRCVEZfS0ZVTkNTX0VORChmc3Zlcml0eV9zZXRfaWRzKVxcbiAxNzA6XFx0XFxuIDE3MTpcXHRzdGF0aWMgaW50IGJwZl9nZXRfZnN2ZXJpdHlfZGlnZXN0X2ZpbHRlcihjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiBrZnVuY19pZClcXG4gMTcyOlxcdHtcXG4gMTczOlxcdFxcdGlmICghYnRmX2lkX3NldDhfY29udGFpbnMoXFx1MDAyNmZzdmVyaXR5X3NldF9pZHMsIGtmdW5jX2lkKSlcXG4gMTc0OlxcdFxcdFxcdHJldHVybiAwO1xcbiAxNzU6XFx0XFxuIDE3NjpcXHRcXHQvKiBPbmx5IGFsbG93IHRvIGF0dGFjaCBmcm9tIExTTSBob29rcywgdG8gYXZvaWQgcmVjdXJzaW9uICovXFxuIDE3NzpcXHRcXHRyZXR1cm4gcHJvZy1cXHUwMDNldHlwZSAhPSBCUEZfUFJPR19UWVBFX0xTTSA/IC1FQUNDRVMgOiAwO1xcbiAxNzg6XFx0fVxcbiAxNzk6XFx0XFxuIDE4MDpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IGJ0Zl9rZnVuY19pZF9zZXQgYnBmX2ZzdmVyaXR5X3NldCA9IHtcXG4gMTgxOlxcdFxcdC5vd25lciA9IFRISVNfTU9EVUxFLFxcbiAxODI6XFx0XFx0LnNldCA9IFxcdTAwMjZmc3Zlcml0eV9zZXRfaWRzLFxcbiAxODM6XFx0XFx0LmZpbHRlciA9IGJwZl9nZXRfZnN2ZXJpdHlfZGlnZXN0X2ZpbHRlcixcXG4gMTg0OlxcdH07XFxuIDE4NTpcXHRcXG4gMTg2OlxcdHZvaWQgX19pbml0IGZzdmVyaXR5X2luaXRfYnBmKHZvaWQpXFxuIDE4NzpcXHR7XFxuIDE4ODpcXHRcXHRyZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfTFNNLCBcXHUwMDI2YnBmX2ZzdmVyaXR5X3NldCk7XFxuIDE4OTpcXHR9XFxuIDE5MDpcXHRcXG4gMTkxOlxcdCNlbmRpZiAvKiBDT05GSUdfQlBGX1NZU0NBTEwgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMjA6MjI6NDUuNjgxMDM1NjExWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc3NDQyMjE1NjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIGBicGZfZ2V0X2ZzdmVyaXR5X2RpZ2VzdGAgVnVsbmVyYWJpbGl0eSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBJIHNlZSBhIGZldyBrZXkgdGhpbmdzIEkgbmVlZCB0byBjb25zaWRlciBmb3IgZW5hYmxpbmcgdGhlIGNvZGUuIEZpcnN0LCB0aGUgY29kZSBwYXRoIHJlbGllcyBvbiBgQ09ORklHX0JQRl9TWVNDQUxMYCBhbmQgYENPTkZJR19GU19WRVJJVFlgLCBzbyB0aG9zZSBhcmUgcHJlcmVxdWlzaXRlcy5cblxuTm93LCBmb2N1c2luZyBvbiB0aGUgZnVuY3Rpb24gaXRzZWxmLCBgYnBmX2dldF9mc3Zlcml0eV9kaWdlc3RgLCBpdCdzIGEgQlBGIGtmdW5jLCB3aGljaCBtZWFucyBpdCdzIGFjY2Vzc2libGUgd2l0aGluIEJQRiBwcm9ncmFtcywgYW5kIHRoYXTigJlzIGEganVpY3kgdGFyZ2V0IGZvciBleHBsb2l0YXRpb24uIFRoZSBwYXRjaCBhZGRyZXNzZXMgYSBjcml0aWNhbCBidWcsIHNwZWNpZmljYWxseSB0aGUgcG90ZW50aWFsIGZvciBpbnRlZ2VyIG92ZXJmbG93LCB3aGljaCBvZiBjb3Vyc2UgSSBoYWQgdG8gdHJhY2UgdGhyb3VnaCB0byB1bmRlcnN0YW5kIGZ1bGx5LlxuXG5Jbml0aWFsbHksIEkgaGFkIHRob3VnaHQgdGhlIGlzc3VlIHN0ZW1tZWQgZnJvbSBhIG5lZ2F0aXZlIHZhbHVlIHJlc3VsdGluZyBmcm9tIHN1YnRyYWN0aW5nIGBzaXplb2Yoc3RydWN0IGZzdmVyaXR5X2RpZ2VzdClgIGZyb20gYGR5bnB0cl9zemAsIGJ1dCB0aGF0IGlzbid0IGFjY3VyYXRlIHNpbmNlIHRoZSBzaXplIGlzIHNtYWxsZXIuIEl0IHJldHVybnMgYC1FSU5WQUxgLiBUaGVuLCBJIHJlYWxpemVkIHRoZSBwcm9ibGVtIGxpZXMgaW4gdGhlIG9yaWdpbmFsIGNvZGUncyB1c2Ugb2YgYW4gYGludGAgZm9yIGBvdXRfZGlnZXN0X3N6YC4gVGhlIHJvb3QgY2F1c2UgaXMgYGR5bnB0cl9zemAgd2hpY2ggaXMgb3JpZ2luYWxseSBhIGB1MzJgLCBhbmQgaWYgaXRzIHZhbHVlIGlzIGxhcmdlLCBzdWNoIGFzIGAweDgwMDAwMDAwYCwgdGhlIGNhbGN1bGF0aW9uIGBkeW5wdHJfc3ogLSBzaXplb2Yoc3RydWN0IGZzdmVyaXR5X2RpZ2VzdClgIHJlc3VsdHMgaW4gYG91dF9kaWdlc3Rfc3pgIGJlaW5nIGEgbmVnYXRpdmUgYGludGAuIFRoYXQgbmVnYXRpdmUgdmFsdWUgdGhlbiBnZXRzIHVzZWQgaW4gYSBgbWluX3RgIGNvbXBhcmlzb24gd2l0aCBgaGFzaF9hbGctXHUwMDNlZGlnZXN0X3NpemVgIGFuZCBwYXNzZWQgdG8gYG1lbWNweWAgYXMgYSBgc2l6ZV90YC4gVGhpcyBpcyBhIGNsYXNzaWMgaW50ZWdlciBvdmVyZmxvdyBsZWFkaW5nIHRvIGEgbGFyZ2UgbWVtb3J5IGNvcHksIGFuZCBtZW1vcnkgY29ycnVwdGlvbiwgd2hpY2ggaXMgc29tZXRoaW5nIEkgZGVhbCB3aXRoIG9mdGVuLlxuXG5UaGUgcGF0Y2ggaXRzZWxmIGlzIGEgc3RyYWlnaHRmb3J3YXJkIGZpeC4gSXQgcHJvbW90ZXMgYm90aCBgZHlucHRyX3N6YCBhbmQgYG91dF9kaWdlc3Rfc3pgIHRvIGB1NjRgIHRvIHByZXZlbnQgdGhlIG92ZXJmbG93LCBhbmQgaXQgYWRkcyBhbiBleHBsaWNpdCBjaGVjayB0aGF0IHJldHVybnMgYC1FT1ZFUkZMT1dgIGlmIHRoZSBjYWxjdWxhdGVkIGRpZ2VzdCBzaXplIGV4Y2VlZHMgdGhlIHN1cHBvcnRlZCBzaXplLiBTbWFydC5cblxuVGhpcyBpcyBhIHRleHRib29rIGNhc2UgcmlwZSBmb3IgZnV6emluZy4gVGhlIGtleSBzeW1ib2wgdG8gZm9jdXMgb24gaXMsIHdpdGhvdXQgYSBkb3VidCwgYGJwZl9nZXRfZnN2ZXJpdHlfZGlnZXN0YC4gSSdsbCBuZWVkIHRvIGNvbmZpZ3VyZSBteSBmdXp6ZXIgdG8gdGFyZ2V0IHRoYXQgZnVuY3Rpb24sIGtlZXBpbmcgYEZTX1ZFUklUWWAgYW5kIGBCUEZfU1lTQ0FMTGAgZW5hYmxlZC4gSSdsbCBuZWVkIHRvIGFsc28gY2hlY2sgaWYgYEZTX1ZFUklUWWAgaGFzIGFueSBvdGhlciBkZXBlbmRlbmNpZXMgdGhhdCBtaWdodCBuZWVkIHRvIGJlIGFjY291bnRlZCBmb3IsIGJ1dCB0aGlzIGxvb2tzIGxpa2UgYSBzb2xpZCBhdHRhY2sgdmVjdG9yLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MzYwLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDE1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMjA6MjI6NTMuNDI1MjYxNTA3WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NTgzOTU2NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRlNfVkVSSVRZXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL3Zlcml0eS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3Zlcml0eS9LY29uZmlnLTItXFxuZnMvdmVyaXR5L0tjb25maWc6Mzpjb25maWcgRlNfVkVSSVRZXFxuZnMvdmVyaXR5L0tjb25maWctNC1cXHRib29sIFxcXCJGUyBWZXJpdHkgKHJlYWQtb25seSBmaWxlLWJhc2VkIGF1dGhlbnRpY2l0eSBwcm90ZWN0aW9uKVxcXCJcXG4tLVxcbmZzL3Zlcml0eS9LY29uZmlnLTMzLVxcbmZzL3Zlcml0eS9LY29uZmlnOjM0OmNvbmZpZyBGU19WRVJJVFlfQlVJTFRJTl9TSUdOQVRVUkVTXFxuZnMvdmVyaXR5L0tjb25maWctMzUtXFx0Ym9vbCBcXFwiRlMgVmVyaXR5IGJ1aWx0aW4gc2lnbmF0dXJlIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDIwOjIyOjUzLjQ5MTEwNjY0M1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTU5MzYyNDQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBWZXJpdHkgRGVwZW5kZW5jaWVzKipcblxuQWxyaWdodCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBmb3IgYEZTX1ZFUklUWWAgd2l0aGluIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gTXkgaW5zdGluY3Qgc2F5cyB0byBzdGFydCB3aXRoIGBmcy92ZXJpdHkvS2NvbmZpZ2AuIFRoYXQncyB0aGUgZ28tdG8gbG9jYXRpb24gZm9yIG1vZHVsZS1zcGVjaWZpYyBLY29uZmlnIGVudHJpZXMsIGRlZmluaW5nIGRlcGVuZGVuY2llcyBhbmQgZGVmYXVsdHMuIEl0IHNob3VsZCBnaXZlIG1lIGEgY2xlYXIgcGljdHVyZSBvZiB3aGF0IG90aGVyIGtlcm5lbCBmZWF0dXJlcyBvciBtb2R1bGVzIG5lZWQgdG8gYmUgZW5hYmxlZCBiZWZvcmUgYEZTX1ZFUklUWWAgYmVjb21lcyBhdmFpbGFibGUuIEknbSBleHBlY3RpbmcgdG8gZmluZCBkZXBlbmRlbmNpZXMgb24gdGhpbmdzIGxpa2UgYmxvY2sgbGF5ZXIgZmVhdHVyZXMsIGhhc2hpbmcgYWxnb3JpdGhtcywgbWF5YmUgZXZlbiBzZWN1cml0eSBtb2R1bGVzIGlmIHZlcml0eSBob29rcyBpbnRvIHRob3NlIGFyZWFzLiBJJ20gYWxzbyBhbnRpY2lwYXRpbmcgdGhhdCBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiBgRlNfVkVSSVRZYCBpbnRyb2R1Y2VzIGFueSBjb25mbGljdHMgb3Igc3BlY2lhbCByZXF1aXJlbWVudHMgZm9yIHNwZWNpZmljIGZpbGVzeXN0ZW1zLiBUaGUgYEtjb25maWdgIGZpbGUgc2hvdWxkIGlsbHVtaW5hdGUgYWxsIG9mIHRoaXMuIEl04oCZcyB0aGUgdXN1YWwgcHJvY2VzcyB3aGVuIEknbSBhc3Nlc3NpbmcgdGhlIGJ1aWxkIHJlcXVpcmVtZW50cyBmb3IgYSBuZXcgZmlsZXN5c3RlbSBmZWF0dXJlLiBMZXQncyBnZXQgdG8gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg0NjksIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QyMDoyMjo1Ny4wNTA0NzIwMDFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAxMjUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL3Zlcml0eS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0XFxuICAgMzpcXHRjb25maWcgRlNfVkVSSVRZXFxuICAgNDpcXHRcXHRib29sIFxcXCJGUyBWZXJpdHkgKHJlYWQtb25seSBmaWxlLWJhc2VkIGF1dGhlbnRpY2l0eSBwcm90ZWN0aW9uKVxcXCJcXG4gICA1OlxcdFxcdCMgRmlsZXN5c3RlbXMgY2FjaGUgdGhlIE1lcmtsZSB0cmVlIGF0IGEgNjRLIGFsaWduZWQgb2Zmc2V0IGluIHRoZVxcbiAgIDY6XFx0XFx0IyBwYWdlY2FjaGUuICBUaGF0IGFwcHJvYWNoIGFzc3VtZXMgdGhlIHBhZ2Ugc2l6ZSBpcyBhdCBtb3N0IDY0Sy5cXG4gICA3OlxcdFxcdGRlcGVuZHMgb24gUEFHRV9TSElGVCBcXHUwMDNjPSAxNlxcbiAgIDg6XFx0XFx0c2VsZWN0IENSWVBUT19IQVNIX0lORk9cXG4gICA5OlxcdFxcdHNlbGVjdCBDUllQVE9fTElCX1NIQTI1NlxcbiAgMTA6XFx0XFx0c2VsZWN0IENSWVBUT19MSUJfU0hBNTEyXFxuICAxMTpcXHRcXHRoZWxwXFxuICAxMjpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgZnMtdmVyaXR5LiAgZnMtdmVyaXR5IGlzIHRoZSBkbS12ZXJpdHlcXG4gIDEzOlxcdFxcdCAgbWVjaGFuaXNtIGltcGxlbWVudGVkIGF0IHRoZSBmaWxlIGxldmVsLiAgT24gc3VwcG9ydGVkXFxuICAxNDpcXHRcXHQgIGZpbGVzeXN0ZW1zIChjdXJyZW50bHkgZXh0NCwgZjJmcywgYW5kIGJ0cmZzKSwgdXNlcnNwYWNlIGNhblxcbiAgMTU6XFx0XFx0ICB1c2UgYW4gaW9jdGwgdG8gZW5hYmxlIHZlcml0eSBmb3IgYSBmaWxlLCB3aGljaCBjYXVzZXMgdGhlXFxuICAxNjpcXHRcXHQgIGZpbGVzeXN0ZW0gdG8gYnVpbGQgYSBNZXJrbGUgdHJlZSBmb3IgdGhlIGZpbGUuICBUaGUgZmlsZXN5c3RlbVxcbiAgMTc6XFx0XFx0ICB3aWxsIHRoZW4gdHJhbnNwYXJlbnRseSB2ZXJpZnkgYW55IGRhdGEgcmVhZCBmcm9tIHRoZSBmaWxlXFxuICAxODpcXHRcXHQgIGFnYWluc3QgdGhlIE1lcmtsZSB0cmVlLiAgVGhlIGZpbGUgaXMgYWxzbyBtYWRlIHJlYWQtb25seS5cXG4gIDE5OlxcdFxcbiAgMjA6XFx0XFx0ICBUaGlzIHNlcnZlcyBhcyBhbiBpbnRlZ3JpdHkgY2hlY2ssIGJ1dCB0aGUgYXZhaWxhYmlsaXR5IG9mIHRoZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QyMDoyMjo1Ny4wNTA1NzU3M1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Mzc5NDk3ODg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gdGhlIHNlbGVjdGlvbiBvZiBjcnlwdG9ncmFwaGljIGNvbXBvbmVudHMgaGluZ2VzIG9uIHdoZXRoZXIgYFBBR0VfU0hJRlRgIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byAxNiwgd2hpY2gsIGluIHByYWN0aWNlLCBpcyBhbG1vc3QgYWx3YXlzIHRoZSBjYXNlLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCB0aGUgcHJpbWFyeSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBvZiBpbnRlcmVzdCBoZXJlIGFyZSBgRlNfVkVSSVRZYCBhbmQgYEJQRl9TWVNDQUxMYC5cblxuQnV0LCBob2xkIG9uIGEgc2Vjb25k4oCmIGBicGZfZ2V0X2ZzdmVyaXR5X2RpZ2VzdGAgaXMgY2FsbGVkICpmcm9tKiBCUEYgcHJvZ3JhbXM/IFRoaXMgaW1tZWRpYXRlbHkgcmFpc2VzIGEgcmVkIGZsYWcuIFdoYXQgYXJlIHRoZSBkZXBlbmRlbmNpZXM/IEkgbmVlZCB0byBrbm93IGlmIHRoZXJlIGFyZSBhZGRpdGlvbmFsIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzIHRvIGVuYWJsZSB0aGUgYXR0YWNobWVudCBvZiBCUEYgcHJvZ3JhbXMgdG8gTFNNIGhvb2tzLiBJJ20gc2VlaW5nIHRoYXQgdGhlIGNvbmRpdGlvbiBgcHJvZy1cdTAwM2V0eXBlICE9IEJQRl9QUk9HX1RZUEVfTFNNYCByZXN1bHRzIGluIGFuIGAtRUFDQ0VTYCBlcnJvciwgd2hpY2ggdGVsbHMgbWUgdGhlIGtlcm5lbCBpcyBibG9ja2luZyB0aGUgcHJvZ3JhbSBmcm9tIGJlaW5nIHJ1bi4gSXQncyBiZWNvbWluZyBjbGVhciB0aGF0IHdlIHByb2JhYmx5IGFsc28gbmVlZCB0byBlbmFibGUgYEJQRl9MU01gIHRvIGdldCBMU00gcHJvZ3JhbXMgcnVubmluZy4gUmlnaHQsIGxldCdzIGNvbmZpcm0gdGhlIGBCUEZfTFNNYCBjb25maWd1cmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MDg5LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMjA6MjM6MDEuNDMwMDc3MjY3WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTE1NjgyMzgyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCUEZfTFNNXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvS2NvbmZpZz05MD1zb3VyY2UgXFxcImtlcm5lbC9icGYvcHJlbG9hZC9LY29uZmlnXFxcIlxcbmtlcm5lbC9icGYvS2NvbmZpZy05MS1cXG5rZXJuZWwvYnBmL0tjb25maWc6OTI6Y29uZmlnIEJQRl9MU01cXG5rZXJuZWwvYnBmL0tjb25maWctOTMtXFx0Ym9vbCBcXFwiRW5hYmxlIEJQRiBMU00gSW5zdHJ1bWVudGF0aW9uXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QyMDoyMzowMy45NDU3NjQ3OTlaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTA2MDQ3NTI1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIGtlcm5lbCdzIEJQRiBMU00gY29uZmlndXJhdGlvbiwgdmlld2VkIHRocm91Z2ggdGhlIGxlbnMgb2YgbXkgZXhwZXJ0aXNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBCUEYgTFNNIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBga2VybmVsL2JwZi9LY29uZmlnYCBmaWxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIEJQRiBMU00gKExpbnV4IFNlY3VyaXR5IE1vZHVsZXMpIHN1cHBvcnQgaXMgY29uZmlndXJlZCB3aXRoaW4gdGhlIGtlcm5lbC4gVGhpcyBpcyBjcnVjaWFsIGZvciBtZTsgaXQncyB0aGUgZ2F0ZWtlZXBlciB0byB1bmRlcnN0YW5kaW5nIGhvdyBCUEYgcHJvZ3JhbXMgY2FuIGhvb2sgaW50byB0aGUgc2VjdXJpdHkgaW5mcmFzdHJ1Y3R1cmUsIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgKmhvdyogSSBtaWdodCBsZXZlcmFnZSB0aGF0IGZvciBteSBzcGVjaWZpYyBzZWN1cml0eSByZXNlYXJjaC9wcm9qZWN0LlxuXG5JJ20gc2Nhbm5pbmcgdGhlIGZpbGUgbm93LCBsb29raW5nIGZvciB0aGUgcmVsZXZhbnQgZGVmaW5pdGlvbnMuIEknbSBpbW1lZGlhdGVseSBmb2N1c2luZyBvbiB0aGUgZGVwZW5kZW5jaWVzIGFuZCB0aGUgZGVmYXVsdCBzZXR0aW5ncy4gV2hhdCBhcmUgdGhlIHByZXJlcXVpc2l0ZXM/IEFyZSB0aGVyZSBvdGhlciBrZXJuZWwgZmVhdHVyZXMgdGhhdCBuZWVkIHRvIGJlIGVuYWJsZWQgYmVmb3JlIEJQRiBMU00gYmVjb21lcyBhdmFpbGFibGU/IEkgbmVlZCB0byBrbm93IHRoZSBlbnRpcmUgYnVpbGQgZ3JhcGggZm9yIGVuYWJsaW5nIHRoZSBmZWF0dXJlLCBvZiBjb3Vyc2UuIEFyZSB0aGVyZSBhbnkgZGVmYXVsdCBvcHRpb25zIGVuYWJsZWQgb3IgZGlzYWJsZWQsIGFuZCB3aHk/IFRoaXMgd2lsbCBnaXZlIG1lIGFuIGluaXRpYWwgc2Vuc2Ugb2YgaG93IHdpZGVseSBhdmFpbGFibGUgYW5kIGVuYWJsZWQgdGhpcyBmZWF0dXJlIGlzIG91dC1vZi10aGUtYm94LCBvciB3aGV0aGVyIHRoZXJlIGFyZSBhbnkgcHJhY3RpY2FsIHJvYWRibG9ja3MgdG8gZGVwbG95aW5nIGl0IHdpdGhpbiBhIGNvbW1vbiBlbnZpcm9ubWVudCwgYXNzdW1pbmcgSSB3YW50IHRvLlxuXG5OZXh0LCBJJ2xsIGJlIHNjcnV0aW5pemluZyBhbnkgY29uZmlndXJhdGlvbiBvcHRpb25zLCBsb29raW5nIGZvciB0aG9zZSB0aGF0IGFmZmVjdCBob3cgQlBGIHByb2dyYW1zIGludGVyYWN0IHdpdGggdGhlIExTTSBmcmFtZXdvcmsuIEFyZSB0aGVyZSBrbm9icyBmb3IgY29udHJvbGxpbmcgdGhlIG1heGltdW0gbnVtYmVyIG9mIGhvb2tzPyBBbnkgc3BlY2lmaWMgc2VjdXJpdHkgcG9saWNpZXMgdGllZCB0byBCUEYgcHJvZ3JhbXM/IEFyZSB0aGVyZSBmaW5lLWdyYWluZWQgY29udHJvbHMgcmVsYXRlZCB0byBtZW1vcnkgYWxsb2NhdGlvbiwgb3IgdmVyaWZpY2F0aW9uIHN0ZXBzIGZvciB0aGUgcHJvZ3JhbSwgZm9yIGV4YW1wbGU/IFRoaXMgaXMgd2hlcmUgdGhlIGRldmlsIGlzIGluIHRoZSBkZXRhaWxzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRyYWRlLW9mZnMgdGhlIGtlcm5lbCBkZXZlbG9wZXJzIGhhdmUgbWFkZS4gSSB3aWxsIHN0YXJ0IGJ5IGNvbXBhcmluZyB0aGVzZSBvcHRpb25zIHdpdGggYW55IHNpbWlsYXIgZnVuY3Rpb25hbGl0eSBhdmFpbGFibGUgaW4gb2xkZXIgTFNNIGFyY2hpdGVjdHVyZXMgdG8gc2VlIHRoZSBldm9sdXRpb24gb2YgdGhlIGNvbmNlcHQuXG5cbkknbSBzcGVjaWZpY2FsbHkgbG9va2luZyBmb3IgYW55dGhpbmcgdGhhdCBtaWdodCBpbmZsdWVuY2UgcGVyZm9ybWFuY2UsIHNlY3VyaXR5LCBvciBzdGFiaWxpdHkuIEZvciBleGFtcGxlLCBob3cgZG9lcyB0aGUgc3lzdGVtIGhhbmRsZSBwb3RlbnRpYWxseSBtYWxpY2lvdXMgb3IgZXJyb25lb3VzIEJQRiBwcm9ncmFtcyB0aGF0IG1pZ2h0IGJlIGluamVjdGVkIGludG8gdGhlIHN5c3RlbT8gQXJlIHRoZXJlIHNhbml0eSBjaGVja3Mgb3IgcmVzb3VyY2UgbGltaXRzIHRoYXQgSSBjYW4gdHdlYWssIG9yIGFyZSB0aGUgZGVmYXVsdHMgc29saWQ/IFRoaXMgd2lsbCBzaGFwZSBob3cgY29tZm9ydGFibGUgSSBmZWVsIHJlbHlpbmcgb24gdGhpcyBmZWF0dXJlIGluIG15IG93biB3b3JrLlxuXG5GaW5hbGx5LCBJJ2xsIGJlIGxvb2tpbmcgZm9yIGFueSBoaW50cyBhYm91dCBmdXR1cmUgcGxhbnMgb3IgZGVwcmVjYXRpb24gd2FybmluZ3MuIEFueSBjb21tZW50cyBpbiB0aGUgZmlsZSBvciByZWxhdGVkIGRvY3VtZW50YXRpb24gdGhhdCBwcm92aWRlIGluc2lnaHRzIGludG8gb25nb2luZyBkZXZlbG9wbWVudCwgYW5kIHBvdGVudGlhbCBjaGFuZ2VzIGluIGhvdyBCUEYgTFNNIGZ1bmN0aW9ucywgYXJlIGltcG9ydGFudC4gVW5kZXJzdGFuZGluZyB0aGUga2VybmVsIGNvbW11bml0eSdzIGRpcmVjdGlvbiBpcyB2aXRhbCBmb3IgbG9uZy10ZXJtIHByb2plY3QgcGxhbm5pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk1NjgsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QyMDoyMzowOS4wMDYyNDM4ODNaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzI4MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDkyLFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDkyOlxcdGNvbmZpZyBCUEZfTFNNXFxuICA5MzpcXHRcXHRib29sIFxcXCJFbmFibGUgQlBGIExTTSBJbnN0cnVtZW50YXRpb25cXFwiXFxuICA5NDpcXHRcXHRkZXBlbmRzIG9uIEJQRl9FVkVOVFNcXG4gIDk1OlxcdFxcdGRlcGVuZHMgb24gQlBGX1NZU0NBTExcXG4gIDk2OlxcdFxcdGRlcGVuZHMgb24gU0VDVVJJVFlcXG4gIDk3OlxcdFxcdGRlcGVuZHMgb24gQlBGX0pJVFxcbiAgOTg6XFx0XFx0aGVscFxcbiAgOTk6XFx0XFx0ICBFbmFibGVzIGluc3RydW1lbnRhdGlvbiBvZiB0aGUgc2VjdXJpdHkgaG9va3Mgd2l0aCBCUEYgcHJvZ3JhbXMgZm9yXFxuIDEwMDpcXHRcXHQgIGltcGxlbWVudGluZyBkeW5hbWljIE1BQyBhbmQgQXVkaXQgUG9saWNpZXMuXFxuIDEwMTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMjA6MjM6MDkuMDA2MzIwMDk0WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk0OTIwMTg2MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBGUy1WRVJJVFkgQlBGIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCB3ZSdyZSBkZWZpbml0ZWx5IGRlYWxpbmcgd2l0aCBzb21ldGhpbmcgdGhhdCBpbnZvbHZlcyBgQlBGX0xTTWAsIGFuZCBvZiBjb3Vyc2UgYFNFQ1VSSVRZYC4gVGhlIHBhdGNoIHNlZW1zIHRvIGJlIHRvdWNoaW5nIEJQRi1yZWxhdGVkIGNvZGUsIHNvIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBgQlBGX0xTTWAgaXMgdGhlIHJpZ2h0IGNvbmZpZ3VyYXRpb24uIEFoLCB5ZXMsIGBCUEZfTFNNYCBkZXBlbmRzIG9uIGBCUEZfRVZFTlRTYCwgYEJQRl9TWVNDQUxMYCwgYFNFQ1VSSVRZYCwgYW5kIGBCUEZfSklUYC4gU28sIHllYWgsIHRoYXQgbWFrZXMgc2Vuc2U7IGVuYWJsaW5nIGBCUEZfTFNNYCBpcyBkZWZpbml0ZWx5IHRoZSBjb3JyZWN0IGNvbmZpZy4gSXQgYWxzbyBsb29rcyBsaWtlIGBGU19WRVJJVFlgIGl0c2VsZiBpcyBnb2luZyB0byBiZSBpbXBvcnRhbnQuXG5cbk5vdywgbGV0J3MgZGl2ZSBpbnRvIHRoZSBwYXRjaCBpdHNlbGYuIEknbSBzZWVpbmcgY2hhbmdlcyBmb2N1c2luZyBvbiB0eXBlIHVwZ3JhZGVzIHRvIGB1NjRgLiBMb29raW5nIGNsb3NlbHksIGl0IGxvb2tzIGxpa2UgdGhlcmUncyBiZWVuIGEgY2hhbmdlIGluIGhvdyBgZHlucHRyX3N6YCBpcyBoYW5kbGVkLiBJdCBzZWVtcyB0aGUgb3JpZ2luYWwgY29kZSBoYWQgYSBwb3RlbnRpYWwgZm9yIGFuIGludGVnZXIgb3ZlcmZsb3cgb3Igb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzLiBUaGUgbmV3IGNvZGUgZG9lcyBzaXplIGNoZWNrcywgd2hpY2ggaXMgZ29vZC4gVGhlIHBhdGNoIGlzIGRlZmluaXRlbHkgcHJldmVudGluZyBhIHZ1bG5lcmFiaWxpdHkgcmVsYXRlZCB0byB0aGUgYGJwZl9nZXRfZnN2ZXJpdHlfZGlnZXN0YCBmdW5jdGlvbi5cblxuQWxyaWdodCwgY2hlY2tpbmcgdGhyb3VnaCB0aGUgcGF0Y2gsIGFuZCBpdCBsb29rcyBsaWtlIHRoaXMgaXMgdGhlIG9ubHkgZnVuY3Rpb24gbW9kaWZpZWQuIElzIGl0IHJlYWNoYWJsZT8gWWVzLCBiZWNhdXNlIGl0J3MgYSBrZnVuYyB0aGF0IGdldHMgY2FsbGVkIHRocm91Z2ggdGhlIEJQRiBzeXNjYWxsIHdoZW4gYW4gTFNNIEJQRiBwcm9ncmFtIG9mIGEgc3BlY2lmaWMgdHlwZSBpcyBjYWxsZWQuXG5cblNvLCB0byByZWNhcCwgSSBuZWVkIGBGU19WRVJJVFlgLCBgQlBGX1NZU0NBTExgLCBhbmQgYEJQRl9MU01gIHRvIG1ha2Ugc3VyZSBJIGFtIGluIGEgZ29vZCB0ZXN0aW5nIGNvbmZpZy5cblxuTm93IEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBzY29wZSwgc28gSSdsbCBjaGVjayBpZiBgYnBmX2dldF9mc3Zlcml0eV9kaWdlc3RgIGlzIGEgc3RhdGljIG9yIGlubGluZS4gTm9wZSwgaXQncyBub3QsIGl0J3MgYSBrZnVuYywgd2hpY2ggbWVhbnMgaXQncyBleHBvcnRlZCB0byBCUEYuXG5cbkJhc2ljYWxseSwgdGhpcyBwYXRjaCBpcyBmaXhpbmcgYSBzZWN1cml0eSBpc3N1ZSBpbiBgYnBmX2dldF9mc3Zlcml0eV9kaWdlc3RgIGJ5IGhhbmRsaW5nIGBkeW5wdHJfc3pgIHByb3Blcmx5LiBJdCdzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGl0J3MgcmVhY2hhYmxlIHRocm91Z2ggQlBGLCBzbywgYWJzb2x1dGVseSwgdGhpcyBpcyBzb21ldGhpbmcgdGhhdCBuZWVkcyBmdXp6aW5nLlxuXG5Ob3csIGEgcXVpY2sgY2hlY2sgb24gYEZTX1ZFUklUWWAgYW5kIHN1cHBvcnRlZCBmaWxlc3lzdGVtcywgbGV0J3Mgc2VlLCBpdCB3b3JrcyBvbiBgZXh0NGAsIGBmMmZzYCwgYGJ0cmZzYC4gQW5kIFN5emthbGxlciBhbHJlYWR5IHRlc3RzIHRob3NlLCBzbyBJIHNob3VsZCBiZSBnb29kIHRvIGdvIGJ5IGp1c3QgZW5hYmxpbmcgYEZTX1ZFUklUWWAuIEknbSBnb2luZyB0byBzZXQgdGhlIHJlc3VsdHMgYW5kIG1vdmUgb24gdG8gdGhlIG5leHQgb25lLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDI1NywiT3V0cHV0VG9rZW5zIjoxMzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3ODgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QyMDoyMzoxOC40OTgzNDA3MDFaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzQxNTE2NzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkZTX1ZFUklUWVwiLFxuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkJQRl9MU01cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfZ2V0X2ZzdmVyaXR5X2RpZ2VzdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIGludGVnZXIgb3ZlcmZsb3cgYW5kIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3MgaW4gdGhlIGBicGZfZ2V0X2ZzdmVyaXR5X2RpZ2VzdGAgQlBGIGtmdW5jIGJ5IGNoYW5naW5nIHNpemUgdmFyaWFibGVzIHRvIGB1NjRgIGFuZCBhZGRpbmcgYSBwcm9wZXIgYm91bmRzIGNoZWNrLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSByZWFjaGFibGUgQlBGIEFQSSwgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRlNfVkVSSVRZXCIsXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiQlBGX0xTTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9nZXRfZnN2ZXJpdHlfZGlnZXN0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gaW50ZWdlciBvdmVyZmxvdyBhbmQgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2VzcyBpbiB0aGUgYGJwZl9nZXRfZnN2ZXJpdHlfZGlnZXN0YCBCUEYga2Z1bmMgYnkgY2hhbmdpbmcgc2l6ZSB2YXJpYWJsZXMgdG8gYHU2NGAgYW5kIGFkZGluZyBhIHByb3BlciBib3VuZHMgY2hlY2suIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBhIHJlYWNoYWJsZSBCUEYgQVBJLCBtYWtpbmcgaXQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowfv8jw[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-03 20:20:48 +0000 UTC FinishedAt: 2026-08-03 20:23:20 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "e5fd3f514e27db1f05fbd72ba615d74941e23c51", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "FS_VERITY", "BPF_SYSCALL", "BPF_LSM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "e5fd3f514e27db1f05fbd72ba615d74941e23c51", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "FS_VERITY", "BPF_SYSCALL", "BPF_LSM" ], "series_id": "5ce54779-e8d8-4437-8b8e-0928a69752e9" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "bpf_get_fsverity_digest" ], "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+CgkJCTx0ZD4yMDI2LzA4LzAzIDIwOjIyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0ZTX1ZFUklUWSYjMzQ7LAogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtCUEZfTFNNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2dldF9mc3Zlcml0eV9kaWdlc3QmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gaW50ZWdlciBvdmVyZmxvdyBhbmQgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2VzcyBpbiB0aGUgYGJwZl9nZXRfZnN2ZXJpdHlfZGlnZXN0YCBCUEYga2Z1bmMgYnkgY2hhbmdpbmcgc2l6ZSB2YXJpYWJsZXMgdG8gYHU2NGAgYW5kIGFkZGluZyBhIHByb3BlciBib3VuZHMgY2hlY2suIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBhIHJlYWNoYWJsZSBCUEYgQVBJLCBtYWtpbmcgaXQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAyMDoyMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDAwNzBmOWY0OGIzZmQ4MmIxNWI1YWZlODUzMjg3OGNjMjc4OWU4ZjFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzIDIwOjIyOjIyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL3Zlcml0eS9tZWFzdXJlLmMgYi9mcy92ZXJpdHkvbWVhc3VyZS5jXG5pbmRleCBjZmUyZDVlNTM1Zjk2Li42OGRmY2NiNjk3NzIwIDEwMDY0NFxuLS0tIGEvZnMvdmVyaXR5L21lYXN1cmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvdmVyaXR5L21lYXN1cmUuY1xuQEAgLTEyMiwxMSAmIzQzOzEyMiwxMSBAQCBfX2JwZl9rZnVuYyBpbnQgYnBmX2dldF9mc3Zlcml0eV9kaWdlc3Qoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IHN0cnVjdCBicGZfZHlucFxuIHtcbiBcdGNvbnN0IHN0cnVjdCBicGZfZHlucHRyX2tlcm4gKmRpZ2VzdF9wdHIgPSAoc3RydWN0IGJwZl9keW5wdHJfa2VybiAqKWRpZ2VzdF9wO1xuIFx0Y29uc3Qgc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoZmlsZSk7XG4tXHR1MzIgZHlucHRyX3N6ID0gX19icGZfZHlucHRyX3NpemUoZGlnZXN0X3B0cik7XG4mIzQzO1x0dTY0IGR5bnB0cl9zeiA9IF9fYnBmX2R5bnB0cl9zaXplKGRpZ2VzdF9wdHIpO1xuIFx0c3RydWN0IGZzdmVyaXR5X2RpZ2VzdCAqYXJnO1xuIFx0Y29uc3Qgc3RydWN0IGZzdmVyaXR5X2luZm8gKnZpO1xuIFx0Y29uc3Qgc3RydWN0IGZzdmVyaXR5X2hhc2hfYWxnICpoYXNoX2FsZztcbi1cdGludCBvdXRfZGlnZXN0X3N6O1xuJiM0MztcdHU2NCBvdXRfZGlnZXN0X3N6O1xuIFxuIFx0aWYgKGR5bnB0cl9zeiBcdTAwM2Mgc2l6ZW9mKHN0cnVjdCBmc3Zlcml0eV9kaWdlc3QpKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbkBAIC0xNDQsMTcgJiM0MzsxNDQsMjAgQEAgX19icGZfa2Z1bmMgaW50IGJwZl9nZXRfZnN2ZXJpdHlfZGlnZXN0KHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBzdHJ1Y3QgYnBmX2R5bnBcbiBcbiBcdGhhc2hfYWxnID0gdmktXHUwMDNldHJlZV9wYXJhbXMuaGFzaF9hbGc7XG4gXG4mIzQzO1x0b3V0X2RpZ2VzdF9zeiA9IGR5bnB0cl9zeiAtIHNpemVvZihzdHJ1Y3QgZnN2ZXJpdHlfZGlnZXN0KTtcbiYjNDM7XHRpZiAob3V0X2RpZ2VzdF9zeiBcdTAwM2MgaGFzaF9hbGctXHUwMDNlZGlnZXN0X3NpemUpXG4mIzQzO1x0XHRyZXR1cm4gLUVPVkVSRkxPVztcbiYjNDM7XG4gXHRhcmctXHUwMDNlZGlnZXN0X2FsZ29yaXRobSA9IGhhc2hfYWxnIC0gZnN2ZXJpdHlfaGFzaF9hbGdzO1xuIFx0YXJnLVx1MDAzZWRpZ2VzdF9zaXplID0gaGFzaF9hbGctXHUwMDNlZGlnZXN0X3NpemU7XG4gXG4tXHRvdXRfZGlnZXN0X3N6ID0gZHlucHRyX3N6IC0gc2l6ZW9mKHN0cnVjdCBmc3Zlcml0eV9kaWdlc3QpO1xuLVxuIFx0LyogY29weSBkaWdlc3QgKi9cbi1cdG1lbWNweShhcmctXHUwMDNlZGlnZXN0LCB2aS1cdTAwM2VmaWxlX2RpZ2VzdCwgIG1pbl90KGludCwgaGFzaF9hbGctXHUwMDNlZGlnZXN0X3NpemUsIG91dF9kaWdlc3Rfc3opKTtcbiYjNDM7XHRtZW1jcHkoYXJnLVx1MDAzZWRpZ2VzdCwgdmktXHUwMDNlZmlsZV9kaWdlc3QsIGhhc2hfYWxnLVx1MDAzZWRpZ2VzdF9zaXplKTtcbiBcbiBcdC8qIGZpbGwgdGhlIGV4dHJhIGJ1ZmZlciB3aXRoIHplcm9zICovXG4gXHRpZiAob3V0X2RpZ2VzdF9zeiBcdTAwM2UgaGFzaF9hbGctXHUwMDNlZGlnZXN0X3NpemUpXG4tXHRcdG1lbXNldChhcmctXHUwMDNlZGlnZXN0ICYjNDM7IGFyZy1cdTAwM2VkaWdlc3Rfc2l6ZSwgMCwgb3V0X2RpZ2VzdF9zeiAtIGhhc2hfYWxnLVx1MDAzZWRpZ2VzdF9zaXplKTtcbiYjNDM7XHRcdG1lbXNldChhcmctXHUwMDNlZGlnZXN0ICYjNDM7IGhhc2hfYWxnLVx1MDAzZWRpZ2VzdF9zaXplLCAwLFxuJiM0MztcdFx0ICAgICAgIG91dF9kaWdlc3Rfc3ogLSBoYXNoX2FsZy1cdTAwM2VkaWdlc3Rfc2l6ZSk7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMjA6MjI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0ZTX1ZFUklUWSYjMzQ7LAogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtCUEZfTFNNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2dldF9mc3Zlcml0eV9kaWdlc3QmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gaW50ZWdlciBvdmVyZmxvdyBhbmQgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2VzcyBpbiB0aGUgYGJwZl9nZXRfZnN2ZXJpdHlfZGlnZXN0YCBCUEYga2Z1bmMgYnkgY2hhbmdpbmcgc2l6ZSB2YXJpYWJsZXMgdG8gYHU2NGAgYW5kIGFkZGluZyBhIHByb3BlciBib3VuZHMgY2hlY2suIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBhIHJlYWNoYWJsZSBCUEYgQVBJLCBtYWtpbmcgaXQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDAwNzBmOWY0OGIzZmQ4MmIxNWI1YWZlODUzMjg3OGNjMjc4OWU4ZjEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAzIDIwOjIyOjIyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvdmVyaXR5L21lYXN1cmUuYyBiL2ZzL3Zlcml0eS9tZWFzdXJlLmMKaW5kZXggY2ZlMmQ1ZTUzNWY5Ni4uNjhkZmNjYjY5NzcyMCAxMDA2NDQKLS0tIGEvZnMvdmVyaXR5L21lYXN1cmUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy92ZXJpdHkvbWVhc3VyZS5jCkBAIC0xMjIsMTEgJiM0MzsxMjIsMTEgQEAgX19icGZfa2Z1bmMgaW50IGJwZl9nZXRfZnN2ZXJpdHlfZGlnZXN0KHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBzdHJ1Y3QgYnBmX2R5bnAKIHsKIAljb25zdCBzdHJ1Y3QgYnBmX2R5bnB0cl9rZXJuICpkaWdlc3RfcHRyID0gKHN0cnVjdCBicGZfZHlucHRyX2tlcm4gKilkaWdlc3RfcDsKIAljb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShmaWxlKTsKLQl1MzIgZHlucHRyX3N6ID0gX19icGZfZHlucHRyX3NpemUoZGlnZXN0X3B0cik7CiYjNDM7CXU2NCBkeW5wdHJfc3ogPSBfX2JwZl9keW5wdHJfc2l6ZShkaWdlc3RfcHRyKTsKIAlzdHJ1Y3QgZnN2ZXJpdHlfZGlnZXN0ICphcmc7CiAJY29uc3Qgc3RydWN0IGZzdmVyaXR5X2luZm8gKnZpOwogCWNvbnN0IHN0cnVjdCBmc3Zlcml0eV9oYXNoX2FsZyAqaGFzaF9hbGc7Ci0JaW50IG91dF9kaWdlc3Rfc3o7CiYjNDM7CXU2NCBvdXRfZGlnZXN0X3N6OwogCiAJaWYgKGR5bnB0cl9zeiAmbHQ7IHNpemVvZihzdHJ1Y3QgZnN2ZXJpdHlfZGlnZXN0KSkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xNDQsMTcgJiM0MzsxNDQsMjAgQEAgX19icGZfa2Z1bmMgaW50IGJwZl9nZXRfZnN2ZXJpdHlfZGlnZXN0KHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBzdHJ1Y3QgYnBmX2R5bnAKIAogCWhhc2hfYWxnID0gdmktJmd0O3RyZWVfcGFyYW1zLmhhc2hfYWxnOwogCiYjNDM7CW91dF9kaWdlc3Rfc3ogPSBkeW5wdHJfc3ogLSBzaXplb2Yoc3RydWN0IGZzdmVyaXR5X2RpZ2VzdCk7CiYjNDM7CWlmIChvdXRfZGlnZXN0X3N6ICZsdDsgaGFzaF9hbGctJmd0O2RpZ2VzdF9zaXplKQomIzQzOwkJcmV0dXJuIC1FT1ZFUkZMT1c7CiYjNDM7CiAJYXJnLSZndDtkaWdlc3RfYWxnb3JpdGhtID0gaGFzaF9hbGcgLSBmc3Zlcml0eV9oYXNoX2FsZ3M7CiAJYXJnLSZndDtkaWdlc3Rfc2l6ZSA9IGhhc2hfYWxnLSZndDtkaWdlc3Rfc2l6ZTsKIAotCW91dF9kaWdlc3Rfc3ogPSBkeW5wdHJfc3ogLSBzaXplb2Yoc3RydWN0IGZzdmVyaXR5X2RpZ2VzdCk7Ci0KIAkvKiBjb3B5IGRpZ2VzdCAqLwotCW1lbWNweShhcmctJmd0O2RpZ2VzdCwgdmktJmd0O2ZpbGVfZGlnZXN0LCAgbWluX3QoaW50LCBoYXNoX2FsZy0mZ3Q7ZGlnZXN0X3NpemUsIG91dF9kaWdlc3Rfc3opKTsKJiM0MzsJbWVtY3B5KGFyZy0mZ3Q7ZGlnZXN0LCB2aS0mZ3Q7ZmlsZV9kaWdlc3QsIGhhc2hfYWxnLSZndDtkaWdlc3Rfc2l6ZSk7CiAKIAkvKiBmaWxsIHRoZSBleHRyYSBidWZmZXIgd2l0aCB6ZXJvcyAqLwogCWlmIChvdXRfZGlnZXN0X3N6ICZndDsgaGFzaF9hbGctJmd0O2RpZ2VzdF9zaXplKQotCQltZW1zZXQoYXJnLSZndDtkaWdlc3QgJiM0MzsgYXJnLSZndDtkaWdlc3Rfc2l6ZSwgMCwgb3V0X2RpZ2VzdF9zeiAtIGhhc2hfYWxnLSZndDtkaWdlc3Rfc2l6ZSk7CiYjNDM7CQltZW1zZXQoYXJnLSZndDtkaWdlc3QgJiM0MzsgaGFzaF9hbGctJmd0O2RpZ2VzdF9zaXplLCAwLAomIzQzOwkJICAgICAgIG91dF9kaWdlc3Rfc3ogLSBoYXNoX2FsZy0mZ3Q7ZGlnZXN0X3NpemUpOwogCiAJcmV0dXJuIDA7CiB9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDIwOjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1MjgKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAyMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgZnMvdmVyaXR5L21lYXN1cmUuY2AgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBmcy92ZXJpdHkvbWVhc3VyZS5jYCBhbmQgaW1tZWRpYXRlbHkgSSBzZWUgdGhhdCB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGBicGZfZ2V0X2ZzdmVyaXR5X2RpZ2VzdGAuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgYnVtcGluZyB0aGUgZGF0YSB0eXBlcyBvZiBgZHlucHRyX3N6YCBhbmQgYG91dF9kaWdlc3Rfc3pgIGZyb20gYHUzMmAgYW5kIGBpbnRgIHRvIGB1NjRgLiBUaGlzIHByb2JhYmx5IG1lYW5zIHdlJiMzOTtyZSBhbnRpY2lwYXRpbmcgc2lnbmlmaWNhbnRseSBsYXJnZXIgZGlnZXN0IHNpemVzIG9yIHBvdGVudGlhbGx5IHdvcmtpbmcgd2l0aCBtdWNoIGxhcmdlciBmaWxlIHNpemVzLCByZXF1aXJpbmcgbW9yZSBiaXRzIGZvciBhY2N1cmF0ZSByZXByZXNlbnRhdGlvbi4KClRoZSBwYXRjaCBhbHNvIHR3ZWFrcyB0aGUgc2l6ZSBjaGVjay4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBub3cgZXhwbGljaXRseSBjaGVja2luZyBpZiBgb3V0X2RpZ2VzdF9zemAgaXMgKmxlc3MgdGhhbiogYGhhc2hfYWxnLSZndDtkaWdlc3Rfc2l6ZWAgYW5kIHJldHVybmluZyBgLUVPVkVSRkxPV2AgaW4gdGhhdCBjYXNlLCB3aGljaCBpcyBhIGdvb2QgZGVmZW5zaXZlIHByb2dyYW1taW5nIG1lYXN1cmUuIFByZXZpb3VzbHkgdGhlcmUgd2FzIGFuIGltcGxpY2l0IGNoZWNrLiBUaGlzIGxpa2VseSBwcmV2ZW50cyB1bmRlcmZsb3cgaXNzdWVzIGR1cmluZyBkaWdlc3QgY29tcGFyaXNvbi4KCkZ1cnRoZXJtb3JlLCB0aGUgYG1lbWNweWAgYW5kIGBtZW1zZXRgIG9wZXJhdGlvbnMgYXJlIGJlaW5nIHVwZGF0ZWQgdG8gZGlyZWN0bHkgdXNlIGBoYXNoX2FsZy0mZ3Q7ZGlnZXN0X3NpemVgIGluc3RlYWQgb2YgdGhlIGBtaW5fdGAgZnVuY3Rpb24uIFRoaXMgc2ltcGxpZmljYXRpb24gaXMgZ29vZCwgYXMgaXQgc3VnZ2VzdHMgdGhlIHBhdGNoIGNvcnJlY3RseSBjYWxjdWxhdGVzIHRoZSBjb3JyZWN0IGJ1ZmZlciBzaXplIHRvIGF2b2lkIGFueSBwb3RlbnRpYWwgYnVmZmVyIG92ZXJmbG93cy4gTm8gbW9yZSBtaW4gY2FsbHMhIFRoaXMgaXMgYW4gb3B0aW1pemF0aW9uIGFuZCBhbiBpbXByb3ZlbWVudCBpbiB0aGUgbG9naWMgYXMgd2VsbC4KCk5vdywgYmVmb3JlIEkgZGlnIGRlZXBlciBpbnRvIHRoZSBjb2RlIGl0c2VsZiwgSSBzaG91bGQgbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIExldCYjMzk7cyBzZWUuLi4gYGZzL3Zlcml0eS9tZWFzdXJlLmNgIGlzIGRlZmluaXRlbHkgcGFydCBvZiBgRlNfVkVSSVRZYCwgd2hpY2ggaXMgb2J2aW91cy4gSSBuZWVkIHRvIGdyZXAgZm9yIGBicGZfZ2V0X2ZzdmVyaXR5X2RpZ2VzdGAgdG8gZmluZCBhbnkgb3RoZXIgdXNhZ2VzIG9yIHJlZmVyZW5jZXMuIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoaXMgZnVuY3Rpb24gaXMgdXNlZCBhbmQgd2hhdCBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtIGFyZSBhZmZlY3RlZCBieSB0aGVzZSBjaGFuZ2VzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYmlnIHBpY3R1cmUhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMjA6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2dldF9mc3Zlcml0eV9kaWdlc3QmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9icGYvZnNfa2Z1bmNzLnJzdD0xMD1CUEYga2Z1bmNzIGNhbiBiZSB1c2VkIHRvIGdldCB0aGVzZSBkYXRhLlxuLS1cbkRvY3VtZW50YXRpb24vYnBmL2ZzX2tmdW5jcy5yc3QtMTMtXG5Eb2N1bWVudGF0aW9uL2JwZi9mc19rZnVuY3MucnN0OjE0OiAqIGBgYnBmX2dldF9mc3Zlcml0eV9kaWdlc3QoKWBgXG5Eb2N1bWVudGF0aW9uL2JwZi9mc19rZnVuY3MucnN0LTE1LVxuLS1cbmZzL3Zlcml0eS9tZWFzdXJlLmM9MTEwPV9fYnBmX2tmdW5jX3N0YXJ0X2RlZnMoKTtcbi0tXG5mcy92ZXJpdHkvbWVhc3VyZS5jLTExMi0vKipcbmZzL3Zlcml0eS9tZWFzdXJlLmM6MTEzOiAqIGJwZl9nZXRfZnN2ZXJpdHlfZGlnZXN0OiByZWFkIGZzdmVyaXR5IGRpZ2VzdCBvZiBmaWxlXG5mcy92ZXJpdHkvbWVhc3VyZS5jLTExNC0gKiBAZmlsZTogZmlsZSB0byBnZXQgZGlnZXN0IGZyb21cbi0tXG5mcy92ZXJpdHkvbWVhc3VyZS5jLTEyMC0gKi9cbmZzL3Zlcml0eS9tZWFzdXJlLmM6MTIxOl9fYnBmX2tmdW5jIGludCBicGZfZ2V0X2ZzdmVyaXR5X2RpZ2VzdChzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3Qgc3RydWN0IGJwZl9keW5wdHIgKmRpZ2VzdF9wKVxuZnMvdmVyaXR5L21lYXN1cmUuYy0xMjIte1xuLS1cbmZzL3Zlcml0eS9tZWFzdXJlLmM9MTY3PUJURl9LRlVOQ1NfU1RBUlQoZnN2ZXJpdHlfc2V0X2lkcylcbmZzL3Zlcml0eS9tZWFzdXJlLmM6MTY4OkJURl9JRF9GTEFHUyhmdW5jLCBicGZfZ2V0X2ZzdmVyaXR5X2RpZ2VzdClcbmZzL3Zlcml0eS9tZWFzdXJlLmMtMTY5LUJURl9LRlVOQ1NfRU5EKGZzdmVyaXR5X3NldF9pZHMpXG5mcy92ZXJpdHkvbWVhc3VyZS5jLTE3MC1cbmZzL3Zlcml0eS9tZWFzdXJlLmM6MTcxOnN0YXRpYyBpbnQgYnBmX2dldF9mc3Zlcml0eV9kaWdlc3RfZmlsdGVyKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyIGtmdW5jX2lkKVxuZnMvdmVyaXR5L21lYXN1cmUuYy0xNzIte1xuLS1cbmZzL3Zlcml0eS9tZWFzdXJlLmM9MTgwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnRmX2tmdW5jX2lkX3NldCBicGZfZnN2ZXJpdHlfc2V0ID0ge1xuLS1cbmZzL3Zlcml0eS9tZWFzdXJlLmMtMTgyLVx0LnNldCA9IFx1MDAyNmZzdmVyaXR5X3NldF9pZHMsXG5mcy92ZXJpdHkvbWVhc3VyZS5jOjE4MzpcdC5maWx0ZXIgPSBicGZfZ2V0X2ZzdmVyaXR5X2RpZ2VzdF9maWx0ZXIsXG5mcy92ZXJpdHkvbWVhc3VyZS5jLTE4NC19O1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9icGZfa2Z1bmNzLmg9NzE9ZXh0ZXJuIGludCBicGZfZ2V0X2ZpbGVfeGF0dHIoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgKm5hbWUsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmX2tmdW5jcy5oLTcyLVx0XHRcdCAgICAgIHN0cnVjdCBicGZfZHlucHRyICp2YWx1ZV9wdHIpIF9fa3N5bTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9icGZfa2Z1bmNzLmg6NzM6ZXh0ZXJuIGludCBicGZfZ2V0X2ZzdmVyaXR5X2RpZ2VzdChzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3Qgc3RydWN0IGJwZl9keW5wdHIgKmRpZ2VzdF9wdHIpIF9fa3N5bTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9icGZfa2Z1bmNzLmgtNzQtXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfZnN2ZXJpdHkuYz0yND1pbnQgQlBGX1BST0codGVzdF9maWxlX29wZW4sIHN0cnVjdCBmaWxlICpmKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X2ZzdmVyaXR5LmMtMzUtXHRicGZfZHlucHRyX2Zyb21fbWVtKGRpZ2VzdCwgc2l6ZW9mKGRpZ2VzdCksIDAsIFx1MDAyNmRpZ2VzdF9wdHIpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfZnN2ZXJpdHkuYzozNjpcdHJldCA9IGJwZl9nZXRfZnN2ZXJpdHlfZGlnZXN0KGYsIFx1MDAyNmRpZ2VzdF9wdHIpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfZnN2ZXJpdHkuYy0zNy1cdGlmIChyZXQgXHUwMDNjIDApXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2lnX2luX3hhdHRyLmM9MTE9Y2hhciBfbGljZW5zZVtdIFNFQyhcJiMzNDtsaWNlbnNlXCYjMzQ7KSA9IFwmIzM0O0dQTFwmIzM0Oztcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9zaWdfaW5feGF0dHIuYy0yOC0gKiBwbHVzIFNIQTI1Nl9ESUdFU1RfU0laRS4gVGhlIG1hZ2ljIHBhcnQgb2YgaXQgaXMgZmlsbGVkIGJ5IHVzZXIgc3BhY2UsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9zaWdfaW5feGF0dHIuYzoyOTogKiBhbmQgdGhlIHJlc3Qgb2YgaXQgaXMgZmlsbGVkIGJ5IGJwZl9nZXRfZnN2ZXJpdHlfZGlnZXN0LlxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2lnX2luX3hhdHRyLmMtMzAtICpcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9zaWdfaW5feGF0dHIuYz00Nj1pbnQgQlBGX1BST0codGVzdF9maWxlX29wZW4sIHN0cnVjdCBmaWxlICpmKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NpZ19pbl94YXR0ci5jLTU5LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2lnX2luX3hhdHRyLmM6NjA6XHRyZXQgPSBicGZfZ2V0X2ZzdmVyaXR5X2RpZ2VzdChmLCBcdTAwMjZkaWdlc3RfcHRyKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NpZ19pbl94YXR0ci5jLTYxLVx0LyogTm8gdmVyaXR5LCBhbGxvdyBhY2Nlc3MgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAyMDoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDE4CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgYnBmX2dldF9mc3Zlcml0eV9kaWdlc3RgIGtmdW5jKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBicGZfZ2V0X2ZzdmVyaXR5X2RpZ2VzdGAgZnVuY3Rpb24uIEl0JiMzOTtzIGZsYWdnZWQgYXMgYSBCUEYga2Z1bmMsIHdoaWNoIG1lYW5zIGl0JiMzOTtzIGEga2VybmVsIGZ1bmN0aW9uIGF2YWlsYWJsZSBmb3IgdXNlIHdpdGhpbiBCUEYgcHJvZ3JhbXMuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O1doZXJlJiMzOTtzIHRoaXMgZGVmaW5lZD8gSSBuZWVkIHRvIGtub3cgdGhlIGNvbnRleHQuJiMzNDsgQWgsIGBmcy92ZXJpdHkvbWVhc3VyZS5jYCDigJMgZ290IGl0LiBOb3csIGdpdmVuIG15IGV4cGVyaWVuY2UsIEkgd2FudCB0byBxdWlja2x5IGFzY2VydGFpbiB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiBmb3IgdGhhdCBmaWxlLiBTcGVjaWZpY2FsbHksIEkmIzM5O2QgbGlrZSB0byBjaGVjayBpZiBhbnkgcGFydGljdWxhciBrZXJuZWwgY29uZmlnIGVuYWJsZXMgdGhlIGNvbXBpbGF0aW9uIG9mIGBtZWFzdXJlLmNgLCB0byBjaGVjayBmb3IgYW55IGRlcGVuZGVuY2llcy4gSSYjMzk7bGwgdGFrZSBhIGxvb2sgYXQgdGhlIGBmcy92ZXJpdHkvTWFrZWZpbGVgIHRvIHNlZSB1bmRlciB3aGljaCBjb25maWd1cmF0aW9uIGl0IGlzIGNvbXBpbGVkLiBUaGF0IHdpbGwgZ2l2ZSBtZSBhIHNlbnNlIG9mIHdoYXQmIzM5O3MgdGllZCB0byB0aGlzIGZ1bmN0aW9uYWxpdHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMjA6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVhc3VyZS5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvdmVyaXR5L01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3Zlcml0eS9NYWtlZmlsZT0zPW9iai0kKENPTkZJR19GU19WRVJJVFkpICYjNDM7PSBlbmFibGUubyBcXFxuLS1cbmZzL3Zlcml0eS9NYWtlZmlsZS01LVx0XHRcdCAgIGluaXQubyBcXFxuZnMvdmVyaXR5L01ha2VmaWxlOjY6XHRcdFx0ICAgbWVhc3VyZS5vIFxcXG5mcy92ZXJpdHkvTWFrZWZpbGUtNy1cdFx0XHQgICBvcGVuLm8gXFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAyMDoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0Nzg3CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUuLi4KCioqVmVyaXR5IEtlcm5lbCBNb2R1bGUgQ29uZmlndXJhdGlvbioqCgpSaWdodCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBgQ09ORklHX0ZTX1ZFUklUWWAgaXMgZW5hYmxlZC4gU2VlbXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaC4gTm93LCBhIGxpdHRsZSBuYWdnaW5nIHRob3VnaHQuLi4gaXMgYGJwZl9nZXRfZnN2ZXJpdHlfZGlnZXN0YCBjb21waWxlZCB1bmNvbmRpdGlvbmFsbHkgaWYgYENPTkZJR19GU19WRVJJVFlgIGlzIGRlZmluZWQ/IEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gYmVjYXVzZSB0aGF0IGNvdWxkIGludHJvZHVjZSBzb21lIHN1YnRsZSBkZXBlbmRlbmN5IHByb2JsZW1zIGlmIG5vdCBoYW5kbGVkIGNvcnJlY3RseS4gQmV0dGVyIHRvIGNvbmZpcm0gaXQmIzM5O3MgY29uZGl0aW9uYWwuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBzb3VyY2UuIEkmIzM5O2xsIGNoZWNrIGBmcy92ZXJpdHkvbWVhc3VyZS5jYCBhbmQgbG9vayBzcGVjaWZpY2FsbHkgZm9yIGFueSBgI2lmZGVmYCBkaXJlY3RpdmVzIHN1cnJvdW5kaW5nIHRoZSBgYnBmX2dldF9mc3Zlcml0eV9kaWdlc3RgIGZ1bmN0aW9uIGRlZmluaXRpb24uIFRoYXQgd2lsbCB0ZWxsIG1lIGltbWVkaWF0ZWx5IHdoZXRoZXIgb3Igbm90IGl0JiMzOTtzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQuIEkgZG9uJiMzOTt0IHdhbnQgdG8gY2hhc2UgZG93biB1bm5lY2Vzc2FyeSBpc3N1ZXMgbGF0ZXIuIEl0JiMzOTtzIGJlc3QgdG8gYmUgcHJlY2lzZSwgb3IgZWxzZSB0aGUgY29tcGlsZXIgbWF5IHRocm93IGEgdGFudHJ1bS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAyMDoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfZ2V0X2ZzdmVyaXR5X2RpZ2VzdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL3Zlcml0eS9tZWFzdXJlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvdmVyaXR5L21lYXN1cmUuYz0xMTA9X19icGZfa2Z1bmNfc3RhcnRfZGVmcygpO1xuLS1cbmZzL3Zlcml0eS9tZWFzdXJlLmMtMTEyLS8qKlxuZnMvdmVyaXR5L21lYXN1cmUuYzoxMTM6ICogYnBmX2dldF9mc3Zlcml0eV9kaWdlc3Q6IHJlYWQgZnN2ZXJpdHkgZGlnZXN0IG9mIGZpbGVcbmZzL3Zlcml0eS9tZWFzdXJlLmMtMTE0LSAqIEBmaWxlOiBmaWxlIHRvIGdldCBkaWdlc3QgZnJvbVxuLS1cbmZzL3Zlcml0eS9tZWFzdXJlLmMtMTIwLSAqL1xuZnMvdmVyaXR5L21lYXN1cmUuYzoxMjE6X19icGZfa2Z1bmMgaW50IGJwZl9nZXRfZnN2ZXJpdHlfZGlnZXN0KHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0ciAqZGlnZXN0X3ApXG5mcy92ZXJpdHkvbWVhc3VyZS5jLTEyMi17XG4tLVxuZnMvdmVyaXR5L21lYXN1cmUuYz0xNjc9QlRGX0tGVU5DU19TVEFSVChmc3Zlcml0eV9zZXRfaWRzKVxuZnMvdmVyaXR5L21lYXN1cmUuYzoxNjg6QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9nZXRfZnN2ZXJpdHlfZGlnZXN0KVxuZnMvdmVyaXR5L21lYXN1cmUuYy0xNjktQlRGX0tGVU5DU19FTkQoZnN2ZXJpdHlfc2V0X2lkcylcbmZzL3Zlcml0eS9tZWFzdXJlLmMtMTcwLVxuZnMvdmVyaXR5L21lYXN1cmUuYzoxNzE6c3RhdGljIGludCBicGZfZ2V0X2ZzdmVyaXR5X2RpZ2VzdF9maWx0ZXIoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIga2Z1bmNfaWQpXG5mcy92ZXJpdHkvbWVhc3VyZS5jLTE3Mi17XG4tLVxuZnMvdmVyaXR5L21lYXN1cmUuYz0xODA9c3RhdGljIGNvbnN0IHN0cnVjdCBidGZfa2Z1bmNfaWRfc2V0IGJwZl9mc3Zlcml0eV9zZXQgPSB7XG4tLVxuZnMvdmVyaXR5L21lYXN1cmUuYy0xODItXHQuc2V0ID0gXHUwMDI2ZnN2ZXJpdHlfc2V0X2lkcyxcbmZzL3Zlcml0eS9tZWFzdXJlLmM6MTgzOlx0LmZpbHRlciA9IGJwZl9nZXRfZnN2ZXJpdHlfZGlnZXN0X2ZpbHRlcixcbmZzL3Zlcml0eS9tZWFzdXJlLmMtMTg0LX07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMjA6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTU2NQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGRlZXAgaW4gdGhlIHdlZWRzIG9mIGtlcm5lbCBkZXZlbG9wbWVudDoKCioqRGl2aW5nIGludG8gVmVyaXR5JiMzOTtzIE1lYXN1cmVtZW50IENvZGUqKgoKQWxyaWdodCwgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgYGZzL3Zlcml0eS9tZWFzdXJlLmNgIGhhbmRsZXMgQlBGIHN5c2NhbGxzLCBpZiBhdCBhbGwuIEl0JiMzOTtzIGxpa2VseSB0aGF0IGZ1bmN0aW9uYWxpdHkgaXMgY29uZGl0aW9uYWxseSBjb21waWxlZCwgc28gSSYjMzk7bSBnb2luZyB0byBzY2FuIHRocm91Z2ggdGhhdCBmaWxlIGltbWVkaWF0ZWx5LiBNeSBwcmltYXJ5IGZvY3VzIGlzIHRvIGlkZW50aWZ5IGFueSBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcywgc3BlY2lmaWNhbGx5IGAjaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMYCDigJMgdGhhdCYjMzk7cyB0aGUgdGVsbHRhbGUgc2lnbiBJJiMzOTttIGxvb2tpbmcgZm9yLiBUaGlzIHNob3VsZCBwcm92aWRlIGluc2lnaHRzIGludG8gd2hldGhlciBCUEYgaW50ZXJhY3Rpb24gaGFzIGJlZW4gaW50ZWdyYXRlZCBkaXJlY3RseSBpbnRvIHZlcml0eSBtZWFzdXJlbWVudC4gVGhlIGdvYWwgaXMgdG8gZWl0aGVyIGNvbmZpcm0gaXRzIGluY2x1c2lvbiwgaXRzIGFic2VuY2UsIG9yIHVuZGVyc3RhbmQgaG93IGl0IGhhcyBiZWVuIGluY29ycG9yYXRlZCBpbnRvIGl0cyBjb3JlIG1lYXN1cmVtZW50IHByb2Nlc3Nlcy4gUXVpY2tseSBza2ltbWluZyB0aGUgY29kZSBpcyBnb2luZyB0byBiZSBteSBmaXJzdCBwcmlvcml0eS4gSSYjMzk7bSBob3BpbmcgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgcG9pbnRzIG9mIGludGVyc2VjdGlvbiBiZXR3ZWVuIHRoZXNlIHN1YnN5c3RlbXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDIwOjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvdmVyaXR5L21lYXN1cmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDEwMDpcdFx0XHQqYWxnID0gaGFzaF9hbGcgLSBmc3Zlcml0eV9oYXNoX2FsZ3M7XG4gMTAxOlx0XHRpZiAoaGFsZylcbiAxMDI6XHRcdFx0KmhhbGcgPSBoYXNoX2FsZy1cdTAwM2VhbGdvX2lkO1xuIDEwMzpcdFx0cmV0dXJuIGhhc2hfYWxnLVx1MDAzZWRpZ2VzdF9zaXplO1xuIDEwNDpcdH1cbiAxMDU6XHRFWFBPUlRfU1lNQk9MX0dQTChmc3Zlcml0eV9nZXRfZGlnZXN0KTtcbiAxMDY6XHRcbiAxMDc6XHQjaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXG4gMTA4Olx0XG4gMTA5Olx0LyogYnBmIGtmdW5jcyAqL1xuIDExMDpcdF9fYnBmX2tmdW5jX3N0YXJ0X2RlZnMoKTtcbiAxMTE6XHRcbiAxMTI6XHQvKipcbiAxMTM6XHQgKiBicGZfZ2V0X2ZzdmVyaXR5X2RpZ2VzdDogcmVhZCBmc3Zlcml0eSBkaWdlc3Qgb2YgZmlsZVxuIDExNDpcdCAqIEBmaWxlOiBmaWxlIHRvIGdldCBkaWdlc3QgZnJvbVxuIDExNTpcdCAqIEBkaWdlc3RfcDogKG91dCkgZHlucHRyIGZvciBzdHJ1Y3QgZnN2ZXJpdHlfZGlnZXN0XG4gMTE2Olx0ICpcbiAxMTc6XHQgKiBSZWFkIGZzdmVyaXR5X2RpZ2VzdCBvZiAqZmlsZSogaW50byAqZGlnZXN0X3B0ciouXG4gMTE4Olx0ICpcbiAxMTk6XHQgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgYSBuZWdhdGl2ZSB2YWx1ZSBvbiBlcnJvci5cbiAxMjA6XHQgKi9cbiAxMjE6XHRfX2JwZl9rZnVuYyBpbnQgYnBmX2dldF9mc3Zlcml0eV9kaWdlc3Qoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IHN0cnVjdCBicGZfZHlucHRyICpkaWdlc3RfcClcbiAxMjI6XHR7XG4gMTIzOlx0XHRjb25zdCBzdHJ1Y3QgYnBmX2R5bnB0cl9rZXJuICpkaWdlc3RfcHRyID0gKHN0cnVjdCBicGZfZHlucHRyX2tlcm4gKilkaWdlc3RfcDtcbiAxMjQ6XHRcdGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlX2lub2RlKGZpbGUpO1xuIDEyNTpcdFx0dTY0IGR5bnB0cl9zeiA9IF9fYnBmX2R5bnB0cl9zaXplKGRpZ2VzdF9wdHIpO1xuIDEyNjpcdFx0c3RydWN0IGZzdmVyaXR5X2RpZ2VzdCAqYXJnO1xuIDEyNzpcdFx0Y29uc3Qgc3RydWN0IGZzdmVyaXR5X2luZm8gKnZpO1xuIDEyODpcdFx0Y29uc3Qgc3RydWN0IGZzdmVyaXR5X2hhc2hfYWxnICpoYXNoX2FsZztcbiAxMjk6XHRcdHU2NCBvdXRfZGlnZXN0X3N6O1xuIDEzMDpcdFxuIDEzMTpcdFx0aWYgKGR5bnB0cl9zeiBcdTAwM2Mgc2l6ZW9mKHN0cnVjdCBmc3Zlcml0eV9kaWdlc3QpKVxuIDEzMjpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiAxMzM6XHRcbiAxMzQ6XHRcdGFyZyA9IF9fYnBmX2R5bnB0cl9kYXRhX3J3KGRpZ2VzdF9wdHIsIGR5bnB0cl9zeik7XG4gMTM1Olx0XHRpZiAoIWFyZylcbiAxMzY6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gMTM3Olx0XG4gMTM4Olx0XHRpZiAoIUlTX0FMSUdORUQoKHVpbnRwdHJfdClhcmcsIF9fYWxpZ25vZl9fKCphcmcpKSlcbiAxMzk6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gMTQwOlx0XG4gMTQxOlx0XHR2aSA9IGZzdmVyaXR5X2dldF9pbmZvKGlub2RlKTtcbiAxNDI6XHRcdGlmICghdmkpXG4gMTQzOlx0XHRcdHJldHVybiAtRU5PREFUQTsgLyogbm90IGEgdmVyaXR5IGZpbGUgKi9cbiAxNDQ6XHRcbiAxNDU6XHRcdGhhc2hfYWxnID0gdmktXHUwMDNldHJlZV9wYXJhbXMuaGFzaF9hbGc7XG4gMTQ2Olx0XG4gMTQ3Olx0XHRvdXRfZGlnZXN0X3N6ID0gZHlucHRyX3N6IC0gc2l6ZW9mKHN0cnVjdCBmc3Zlcml0eV9kaWdlc3QpO1xuIDE0ODpcdFx0aWYgKG91dF9kaWdlc3Rfc3ogXHUwMDNjIGhhc2hfYWxnLVx1MDAzZWRpZ2VzdF9zaXplKVxuIDE0OTpcdFx0XHRyZXR1cm4gLUVPVkVSRkxPVztcbiAxNTA6XHRcbiAxNTE6XHRcdGFyZy1cdTAwM2VkaWdlc3RfYWxnb3JpdGhtID0gaGFzaF9hbGcgLSBmc3Zlcml0eV9oYXNoX2FsZ3M7XG4gMTUyOlx0XHRhcmctXHUwMDNlZGlnZXN0X3NpemUgPSBoYXNoX2FsZy1cdTAwM2VkaWdlc3Rfc2l6ZTtcbiAxNTM6XHRcbiAxNTQ6XHRcdC8qIGNvcHkgZGlnZXN0ICovXG4gMTU1Olx0XHRtZW1jcHkoYXJnLVx1MDAzZWRpZ2VzdCwgdmktXHUwMDNlZmlsZV9kaWdlc3QsIGhhc2hfYWxnLVx1MDAzZWRpZ2VzdF9zaXplKTtcbiAxNTY6XHRcbiAxNTc6XHRcdC8qIGZpbGwgdGhlIGV4dHJhIGJ1ZmZlciB3aXRoIHplcm9zICovXG4gMTU4Olx0XHRpZiAob3V0X2RpZ2VzdF9zeiBcdTAwM2UgaGFzaF9hbGctXHUwMDNlZGlnZXN0X3NpemUpXG4gMTU5Olx0XHRcdG1lbXNldChhcmctXHUwMDNlZGlnZXN0ICYjNDM7IGhhc2hfYWxnLVx1MDAzZWRpZ2VzdF9zaXplLCAwLFxuIDE2MDpcdFx0XHQgICAgICAgb3V0X2RpZ2VzdF9zeiAtIGhhc2hfYWxnLVx1MDAzZWRpZ2VzdF9zaXplKTtcbiAxNjE6XHRcbiAxNjI6XHRcdHJldHVybiAwO1xuIDE2MzpcdH1cbiAxNjQ6XHRcbiAxNjU6XHRfX2JwZl9rZnVuY19lbmRfZGVmcygpO1xuIDE2NjpcdFxuIDE2NzpcdEJURl9LRlVOQ1NfU1RBUlQoZnN2ZXJpdHlfc2V0X2lkcylcbiAxNjg6XHRCVEZfSURfRkxBR1MoZnVuYywgYnBmX2dldF9mc3Zlcml0eV9kaWdlc3QpXG4gMTY5Olx0QlRGX0tGVU5DU19FTkQoZnN2ZXJpdHlfc2V0X2lkcylcbiAxNzA6XHRcbiAxNzE6XHRzdGF0aWMgaW50IGJwZl9nZXRfZnN2ZXJpdHlfZGlnZXN0X2ZpbHRlcihjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiBrZnVuY19pZClcbiAxNzI6XHR7XG4gMTczOlx0XHRpZiAoIWJ0Zl9pZF9zZXQ4X2NvbnRhaW5zKFx1MDAyNmZzdmVyaXR5X3NldF9pZHMsIGtmdW5jX2lkKSlcbiAxNzQ6XHRcdFx0cmV0dXJuIDA7XG4gMTc1Olx0XG4gMTc2Olx0XHQvKiBPbmx5IGFsbG93IHRvIGF0dGFjaCBmcm9tIExTTSBob29rcywgdG8gYXZvaWQgcmVjdXJzaW9uICovXG4gMTc3Olx0XHRyZXR1cm4gcHJvZy1cdTAwM2V0eXBlICE9IEJQRl9QUk9HX1RZUEVfTFNNID8gLUVBQ0NFUyA6IDA7XG4gMTc4Olx0fVxuIDE3OTpcdFxuIDE4MDpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnRmX2tmdW5jX2lkX3NldCBicGZfZnN2ZXJpdHlfc2V0ID0ge1xuIDE4MTpcdFx0Lm93bmVyID0gVEhJU19NT0RVTEUsXG4gMTgyOlx0XHQuc2V0ID0gXHUwMDI2ZnN2ZXJpdHlfc2V0X2lkcyxcbiAxODM6XHRcdC5maWx0ZXIgPSBicGZfZ2V0X2ZzdmVyaXR5X2RpZ2VzdF9maWx0ZXIsXG4gMTg0Olx0fTtcbiAxODU6XHRcbiAxODY6XHR2b2lkIF9faW5pdCBmc3Zlcml0eV9pbml0X2JwZih2b2lkKVxuIDE4NzpcdHtcbiAxODg6XHRcdHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9MU00sIFx1MDAyNmJwZl9mc3Zlcml0eV9zZXQpO1xuIDE4OTpcdH1cbiAxOTA6XHRcbiAxOTE6XHQjZW5kaWYgLyogQ09ORklHX0JQRl9TWVNDQUxMICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDIwOjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDczNjAKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA0MTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIGBicGZfZ2V0X2ZzdmVyaXR5X2RpZ2VzdGAgVnVsbmVyYWJpbGl0eSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIEkgc2VlIGEgZmV3IGtleSB0aGluZ3MgSSBuZWVkIHRvIGNvbnNpZGVyIGZvciBlbmFibGluZyB0aGUgY29kZS4gRmlyc3QsIHRoZSBjb2RlIHBhdGggcmVsaWVzIG9uIGBDT05GSUdfQlBGX1NZU0NBTExgIGFuZCBgQ09ORklHX0ZTX1ZFUklUWWAsIHNvIHRob3NlIGFyZSBwcmVyZXF1aXNpdGVzLgoKTm93LCBmb2N1c2luZyBvbiB0aGUgZnVuY3Rpb24gaXRzZWxmLCBgYnBmX2dldF9mc3Zlcml0eV9kaWdlc3RgLCBpdCYjMzk7cyBhIEJQRiBrZnVuYywgd2hpY2ggbWVhbnMgaXQmIzM5O3MgYWNjZXNzaWJsZSB3aXRoaW4gQlBGIHByb2dyYW1zLCBhbmQgdGhhdOKAmXMgYSBqdWljeSB0YXJnZXQgZm9yIGV4cGxvaXRhdGlvbi4gVGhlIHBhdGNoIGFkZHJlc3NlcyBhIGNyaXRpY2FsIGJ1Zywgc3BlY2lmaWNhbGx5IHRoZSBwb3RlbnRpYWwgZm9yIGludGVnZXIgb3ZlcmZsb3csIHdoaWNoIG9mIGNvdXJzZSBJIGhhZCB0byB0cmFjZSB0aHJvdWdoIHRvIHVuZGVyc3RhbmQgZnVsbHkuCgpJbml0aWFsbHksIEkgaGFkIHRob3VnaHQgdGhlIGlzc3VlIHN0ZW1tZWQgZnJvbSBhIG5lZ2F0aXZlIHZhbHVlIHJlc3VsdGluZyBmcm9tIHN1YnRyYWN0aW5nIGBzaXplb2Yoc3RydWN0IGZzdmVyaXR5X2RpZ2VzdClgIGZyb20gYGR5bnB0cl9zemAsIGJ1dCB0aGF0IGlzbiYjMzk7dCBhY2N1cmF0ZSBzaW5jZSB0aGUgc2l6ZSBpcyBzbWFsbGVyLiBJdCByZXR1cm5zIGAtRUlOVkFMYC4gVGhlbiwgSSByZWFsaXplZCB0aGUgcHJvYmxlbSBsaWVzIGluIHRoZSBvcmlnaW5hbCBjb2RlJiMzOTtzIHVzZSBvZiBhbiBgaW50YCBmb3IgYG91dF9kaWdlc3Rfc3pgLiBUaGUgcm9vdCBjYXVzZSBpcyBgZHlucHRyX3N6YCB3aGljaCBpcyBvcmlnaW5hbGx5IGEgYHUzMmAsIGFuZCBpZiBpdHMgdmFsdWUgaXMgbGFyZ2UsIHN1Y2ggYXMgYDB4ODAwMDAwMDBgLCB0aGUgY2FsY3VsYXRpb24gYGR5bnB0cl9zeiAtIHNpemVvZihzdHJ1Y3QgZnN2ZXJpdHlfZGlnZXN0KWAgcmVzdWx0cyBpbiBgb3V0X2RpZ2VzdF9zemAgYmVpbmcgYSBuZWdhdGl2ZSBgaW50YC4gVGhhdCBuZWdhdGl2ZSB2YWx1ZSB0aGVuIGdldHMgdXNlZCBpbiBhIGBtaW5fdGAgY29tcGFyaXNvbiB3aXRoIGBoYXNoX2FsZy0mZ3Q7ZGlnZXN0X3NpemVgIGFuZCBwYXNzZWQgdG8gYG1lbWNweWAgYXMgYSBgc2l6ZV90YC4gVGhpcyBpcyBhIGNsYXNzaWMgaW50ZWdlciBvdmVyZmxvdyBsZWFkaW5nIHRvIGEgbGFyZ2UgbWVtb3J5IGNvcHksIGFuZCBtZW1vcnkgY29ycnVwdGlvbiwgd2hpY2ggaXMgc29tZXRoaW5nIEkgZGVhbCB3aXRoIG9mdGVuLgoKVGhlIHBhdGNoIGl0c2VsZiBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCBmaXguIEl0IHByb21vdGVzIGJvdGggYGR5bnB0cl9zemAgYW5kIGBvdXRfZGlnZXN0X3N6YCB0byBgdTY0YCB0byBwcmV2ZW50IHRoZSBvdmVyZmxvdywgYW5kIGl0IGFkZHMgYW4gZXhwbGljaXQgY2hlY2sgdGhhdCByZXR1cm5zIGAtRU9WRVJGTE9XYCBpZiB0aGUgY2FsY3VsYXRlZCBkaWdlc3Qgc2l6ZSBleGNlZWRzIHRoZSBzdXBwb3J0ZWQgc2l6ZS4gU21hcnQuCgpUaGlzIGlzIGEgdGV4dGJvb2sgY2FzZSByaXBlIGZvciBmdXp6aW5nLiBUaGUga2V5IHN5bWJvbCB0byBmb2N1cyBvbiBpcywgd2l0aG91dCBhIGRvdWJ0LCBgYnBmX2dldF9mc3Zlcml0eV9kaWdlc3RgLiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpZ3VyZSBteSBmdXp6ZXIgdG8gdGFyZ2V0IHRoYXQgZnVuY3Rpb24sIGtlZXBpbmcgYEZTX1ZFUklUWWAgYW5kIGBCUEZfU1lTQ0FMTGAgZW5hYmxlZC4gSSYjMzk7bGwgbmVlZCB0byBhbHNvIGNoZWNrIGlmIGBGU19WRVJJVFlgIGhhcyBhbnkgb3RoZXIgZGVwZW5kZW5jaWVzIHRoYXQgbWlnaHQgbmVlZCB0byBiZSBhY2NvdW50ZWQgZm9yLCBidXQgdGhpcyBsb29rcyBsaWtlIGEgc29saWQgYXR0YWNrIHZlY3Rvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMjA6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEZTX1ZFUklUWSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL3Zlcml0eS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3Zlcml0eS9LY29uZmlnLTItXG5mcy92ZXJpdHkvS2NvbmZpZzozOmNvbmZpZyBGU19WRVJJVFlcbmZzL3Zlcml0eS9LY29uZmlnLTQtXHRib29sIFwmIzM0O0ZTIFZlcml0eSAocmVhZC1vbmx5IGZpbGUtYmFzZWQgYXV0aGVudGljaXR5IHByb3RlY3Rpb24pXCYjMzQ7XG4tLVxuZnMvdmVyaXR5L0tjb25maWctMzMtXG5mcy92ZXJpdHkvS2NvbmZpZzozNDpjb25maWcgRlNfVkVSSVRZX0JVSUxUSU5fU0lHTkFUVVJFU1xuZnMvdmVyaXR5L0tjb25maWctMzUtXHRib29sIFwmIzM0O0ZTIFZlcml0eSBidWlsdGluIHNpZ25hdHVyZSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDIwOjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg0NjkKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBWZXJpdHkgRGVwZW5kZW5jaWVzKioKCkFscmlnaHQsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgZm9yIGBGU19WRVJJVFlgIHdpdGhpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIE15IGluc3RpbmN0IHNheXMgdG8gc3RhcnQgd2l0aCBgZnMvdmVyaXR5L0tjb25maWdgLiBUaGF0JiMzOTtzIHRoZSBnby10byBsb2NhdGlvbiBmb3IgbW9kdWxlLXNwZWNpZmljIEtjb25maWcgZW50cmllcywgZGVmaW5pbmcgZGVwZW5kZW5jaWVzIGFuZCBkZWZhdWx0cy4gSXQgc2hvdWxkIGdpdmUgbWUgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQgb3RoZXIga2VybmVsIGZlYXR1cmVzIG9yIG1vZHVsZXMgbmVlZCB0byBiZSBlbmFibGVkIGJlZm9yZSBgRlNfVkVSSVRZYCBiZWNvbWVzIGF2YWlsYWJsZS4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBkZXBlbmRlbmNpZXMgb24gdGhpbmdzIGxpa2UgYmxvY2sgbGF5ZXIgZmVhdHVyZXMsIGhhc2hpbmcgYWxnb3JpdGhtcywgbWF5YmUgZXZlbiBzZWN1cml0eSBtb2R1bGVzIGlmIHZlcml0eSBob29rcyBpbnRvIHRob3NlIGFyZWFzLiBJJiMzOTttIGFsc28gYW50aWNpcGF0aW5nIHRoYXQgSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIGlmIGBGU19WRVJJVFlgIGludHJvZHVjZXMgYW55IGNvbmZsaWN0cyBvciBzcGVjaWFsIHJlcXVpcmVtZW50cyBmb3Igc3BlY2lmaWMgZmlsZXN5c3RlbXMuIFRoZSBgS2NvbmZpZ2AgZmlsZSBzaG91bGQgaWxsdW1pbmF0ZSBhbGwgb2YgdGhpcy4gSXTigJlzIHRoZSB1c3VhbCBwcm9jZXNzIHdoZW4gSSYjMzk7bSBhc3Nlc3NpbmcgdGhlIGJ1aWxkIHJlcXVpcmVtZW50cyBmb3IgYSBuZXcgZmlsZXN5c3RlbSBmZWF0dXJlLiBMZXQmIzM5O3MgZ2V0IHRvIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAyMDoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL3Zlcml0eS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdFxuICAgMzpcdGNvbmZpZyBGU19WRVJJVFlcbiAgIDQ6XHRcdGJvb2wgXCYjMzQ7RlMgVmVyaXR5IChyZWFkLW9ubHkgZmlsZS1iYXNlZCBhdXRoZW50aWNpdHkgcHJvdGVjdGlvbilcJiMzNDtcbiAgIDU6XHRcdCMgRmlsZXN5c3RlbXMgY2FjaGUgdGhlIE1lcmtsZSB0cmVlIGF0IGEgNjRLIGFsaWduZWQgb2Zmc2V0IGluIHRoZVxuICAgNjpcdFx0IyBwYWdlY2FjaGUuICBUaGF0IGFwcHJvYWNoIGFzc3VtZXMgdGhlIHBhZ2Ugc2l6ZSBpcyBhdCBtb3N0IDY0Sy5cbiAgIDc6XHRcdGRlcGVuZHMgb24gUEFHRV9TSElGVCBcdTAwM2M9IDE2XG4gICA4Olx0XHRzZWxlY3QgQ1JZUFRPX0hBU0hfSU5GT1xuICAgOTpcdFx0c2VsZWN0IENSWVBUT19MSUJfU0hBMjU2XG4gIDEwOlx0XHRzZWxlY3QgQ1JZUFRPX0xJQl9TSEE1MTJcbiAgMTE6XHRcdGhlbHBcbiAgMTI6XHRcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyBmcy12ZXJpdHkuICBmcy12ZXJpdHkgaXMgdGhlIGRtLXZlcml0eVxuICAxMzpcdFx0ICBtZWNoYW5pc20gaW1wbGVtZW50ZWQgYXQgdGhlIGZpbGUgbGV2ZWwuICBPbiBzdXBwb3J0ZWRcbiAgMTQ6XHRcdCAgZmlsZXN5c3RlbXMgKGN1cnJlbnRseSBleHQ0LCBmMmZzLCBhbmQgYnRyZnMpLCB1c2Vyc3BhY2UgY2FuXG4gIDE1Olx0XHQgIHVzZSBhbiBpb2N0bCB0byBlbmFibGUgdmVyaXR5IGZvciBhIGZpbGUsIHdoaWNoIGNhdXNlcyB0aGVcbiAgMTY6XHRcdCAgZmlsZXN5c3RlbSB0byBidWlsZCBhIE1lcmtsZSB0cmVlIGZvciB0aGUgZmlsZS4gIFRoZSBmaWxlc3lzdGVtXG4gIDE3Olx0XHQgIHdpbGwgdGhlbiB0cmFuc3BhcmVudGx5IHZlcmlmeSBhbnkgZGF0YSByZWFkIGZyb20gdGhlIGZpbGVcbiAgMTg6XHRcdCAgYWdhaW5zdCB0aGUgTWVya2xlIHRyZWUuICBUaGUgZmlsZSBpcyBhbHNvIG1hZGUgcmVhZC1vbmx5LlxuICAxOTpcdFxuICAyMDpcdFx0ICBUaGlzIHNlcnZlcyBhcyBhbiBpbnRlZ3JpdHkgY2hlY2ssIGJ1dCB0aGUgYXZhaWxhYmlsaXR5IG9mIHRoZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAyMDoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MDg5CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMTM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIHRoZSBzZWxlY3Rpb24gb2YgY3J5cHRvZ3JhcGhpYyBjb21wb25lbnRzIGhpbmdlcyBvbiB3aGV0aGVyIGBQQUdFX1NISUZUYCBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMTYsIHdoaWNoLCBpbiBwcmFjdGljZSwgaXMgYWxtb3N0IGFsd2F5cyB0aGUgY2FzZS4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoZSBwcmltYXJ5IGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIG9mIGludGVyZXN0IGhlcmUgYXJlIGBGU19WRVJJVFlgIGFuZCBgQlBGX1NZU0NBTExgLgoKQnV0LCBob2xkIG9uIGEgc2Vjb25k4oCmIGBicGZfZ2V0X2ZzdmVyaXR5X2RpZ2VzdGAgaXMgY2FsbGVkICpmcm9tKiBCUEYgcHJvZ3JhbXM/IFRoaXMgaW1tZWRpYXRlbHkgcmFpc2VzIGEgcmVkIGZsYWcuIFdoYXQgYXJlIHRoZSBkZXBlbmRlbmNpZXM/IEkgbmVlZCB0byBrbm93IGlmIHRoZXJlIGFyZSBhZGRpdGlvbmFsIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzIHRvIGVuYWJsZSB0aGUgYXR0YWNobWVudCBvZiBCUEYgcHJvZ3JhbXMgdG8gTFNNIGhvb2tzLiBJJiMzOTttIHNlZWluZyB0aGF0IHRoZSBjb25kaXRpb24gYHByb2ctJmd0O3R5cGUgIT0gQlBGX1BST0dfVFlQRV9MU01gIHJlc3VsdHMgaW4gYW4gYC1FQUNDRVNgIGVycm9yLCB3aGljaCB0ZWxscyBtZSB0aGUga2VybmVsIGlzIGJsb2NraW5nIHRoZSBwcm9ncmFtIGZyb20gYmVpbmcgcnVuLiBJdCYjMzk7cyBiZWNvbWluZyBjbGVhciB0aGF0IHdlIHByb2JhYmx5IGFsc28gbmVlZCB0byBlbmFibGUgYEJQRl9MU01gIHRvIGdldCBMU00gcHJvZ3JhbXMgcnVubmluZy4gUmlnaHQsIGxldCYjMzk7cyBjb25maXJtIHRoZSBgQlBGX0xTTWAgY29uZmlndXJhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMjA6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9MU00mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9LY29uZmlnPTkwPXNvdXJjZSBcJiMzNDtrZXJuZWwvYnBmL3ByZWxvYWQvS2NvbmZpZ1wmIzM0O1xua2VybmVsL2JwZi9LY29uZmlnLTkxLVxua2VybmVsL2JwZi9LY29uZmlnOjkyOmNvbmZpZyBCUEZfTFNNXG5rZXJuZWwvYnBmL0tjb25maWctOTMtXHRib29sIFwmIzM0O0VuYWJsZSBCUEYgTFNNIEluc3RydW1lbnRhdGlvblwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAyMDoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NTY4CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUga2VybmVsJiMzOTtzIEJQRiBMU00gY29uZmlndXJhdGlvbiwgdmlld2VkIHRocm91Z2ggdGhlIGxlbnMgb2YgbXkgZXhwZXJ0aXNlOgoKKipEaXZpbmcgaW50byB0aGUgQlBGIExTTSBDb25maWd1cmF0aW9uKioKCk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIGBrZXJuZWwvYnBmL0tjb25maWdgIGZpbGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgQlBGIExTTSAoTGludXggU2VjdXJpdHkgTW9kdWxlcykgc3VwcG9ydCBpcyBjb25maWd1cmVkIHdpdGhpbiB0aGUga2VybmVsLiBUaGlzIGlzIGNydWNpYWwgZm9yIG1lOyBpdCYjMzk7cyB0aGUgZ2F0ZWtlZXBlciB0byB1bmRlcnN0YW5kaW5nIGhvdyBCUEYgcHJvZ3JhbXMgY2FuIGhvb2sgaW50byB0aGUgc2VjdXJpdHkgaW5mcmFzdHJ1Y3R1cmUsIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgKmhvdyogSSBtaWdodCBsZXZlcmFnZSB0aGF0IGZvciBteSBzcGVjaWZpYyBzZWN1cml0eSByZXNlYXJjaC9wcm9qZWN0LgoKSSYjMzk7bSBzY2FubmluZyB0aGUgZmlsZSBub3csIGxvb2tpbmcgZm9yIHRoZSByZWxldmFudCBkZWZpbml0aW9ucy4gSSYjMzk7bSBpbW1lZGlhdGVseSBmb2N1c2luZyBvbiB0aGUgZGVwZW5kZW5jaWVzIGFuZCB0aGUgZGVmYXVsdCBzZXR0aW5ncy4gV2hhdCBhcmUgdGhlIHByZXJlcXVpc2l0ZXM/IEFyZSB0aGVyZSBvdGhlciBrZXJuZWwgZmVhdHVyZXMgdGhhdCBuZWVkIHRvIGJlIGVuYWJsZWQgYmVmb3JlIEJQRiBMU00gYmVjb21lcyBhdmFpbGFibGU/IEkgbmVlZCB0byBrbm93IHRoZSBlbnRpcmUgYnVpbGQgZ3JhcGggZm9yIGVuYWJsaW5nIHRoZSBmZWF0dXJlLCBvZiBjb3Vyc2UuIEFyZSB0aGVyZSBhbnkgZGVmYXVsdCBvcHRpb25zIGVuYWJsZWQgb3IgZGlzYWJsZWQsIGFuZCB3aHk/IFRoaXMgd2lsbCBnaXZlIG1lIGFuIGluaXRpYWwgc2Vuc2Ugb2YgaG93IHdpZGVseSBhdmFpbGFibGUgYW5kIGVuYWJsZWQgdGhpcyBmZWF0dXJlIGlzIG91dC1vZi10aGUtYm94LCBvciB3aGV0aGVyIHRoZXJlIGFyZSBhbnkgcHJhY3RpY2FsIHJvYWRibG9ja3MgdG8gZGVwbG95aW5nIGl0IHdpdGhpbiBhIGNvbW1vbiBlbnZpcm9ubWVudCwgYXNzdW1pbmcgSSB3YW50IHRvLgoKTmV4dCwgSSYjMzk7bGwgYmUgc2NydXRpbml6aW5nIGFueSBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGxvb2tpbmcgZm9yIHRob3NlIHRoYXQgYWZmZWN0IGhvdyBCUEYgcHJvZ3JhbXMgaW50ZXJhY3Qgd2l0aCB0aGUgTFNNIGZyYW1ld29yay4gQXJlIHRoZXJlIGtub2JzIGZvciBjb250cm9sbGluZyB0aGUgbWF4aW11bSBudW1iZXIgb2YgaG9va3M/IEFueSBzcGVjaWZpYyBzZWN1cml0eSBwb2xpY2llcyB0aWVkIHRvIEJQRiBwcm9ncmFtcz8gQXJlIHRoZXJlIGZpbmUtZ3JhaW5lZCBjb250cm9scyByZWxhdGVkIHRvIG1lbW9yeSBhbGxvY2F0aW9uLCBvciB2ZXJpZmljYXRpb24gc3RlcHMgZm9yIHRoZSBwcm9ncmFtLCBmb3IgZXhhbXBsZT8gVGhpcyBpcyB3aGVyZSB0aGUgZGV2aWwgaXMgaW4gdGhlIGRldGFpbHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdHJhZGUtb2ZmcyB0aGUga2VybmVsIGRldmVsb3BlcnMgaGF2ZSBtYWRlLiBJIHdpbGwgc3RhcnQgYnkgY29tcGFyaW5nIHRoZXNlIG9wdGlvbnMgd2l0aCBhbnkgc2ltaWxhciBmdW5jdGlvbmFsaXR5IGF2YWlsYWJsZSBpbiBvbGRlciBMU00gYXJjaGl0ZWN0dXJlcyB0byBzZWUgdGhlIGV2b2x1dGlvbiBvZiB0aGUgY29uY2VwdC4KCkkmIzM5O20gc3BlY2lmaWNhbGx5IGxvb2tpbmcgZm9yIGFueXRoaW5nIHRoYXQgbWlnaHQgaW5mbHVlbmNlIHBlcmZvcm1hbmNlLCBzZWN1cml0eSwgb3Igc3RhYmlsaXR5LiBGb3IgZXhhbXBsZSwgaG93IGRvZXMgdGhlIHN5c3RlbSBoYW5kbGUgcG90ZW50aWFsbHkgbWFsaWNpb3VzIG9yIGVycm9uZW91cyBCUEYgcHJvZ3JhbXMgdGhhdCBtaWdodCBiZSBpbmplY3RlZCBpbnRvIHRoZSBzeXN0ZW0/IEFyZSB0aGVyZSBzYW5pdHkgY2hlY2tzIG9yIHJlc291cmNlIGxpbWl0cyB0aGF0IEkgY2FuIHR3ZWFrLCBvciBhcmUgdGhlIGRlZmF1bHRzIHNvbGlkPyBUaGlzIHdpbGwgc2hhcGUgaG93IGNvbWZvcnRhYmxlIEkgZmVlbCByZWx5aW5nIG9uIHRoaXMgZmVhdHVyZSBpbiBteSBvd24gd29yay4KCkZpbmFsbHksIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGFueSBoaW50cyBhYm91dCBmdXR1cmUgcGxhbnMgb3IgZGVwcmVjYXRpb24gd2FybmluZ3MuIEFueSBjb21tZW50cyBpbiB0aGUgZmlsZSBvciByZWxhdGVkIGRvY3VtZW50YXRpb24gdGhhdCBwcm92aWRlIGluc2lnaHRzIGludG8gb25nb2luZyBkZXZlbG9wbWVudCwgYW5kIHBvdGVudGlhbCBjaGFuZ2VzIGluIGhvdyBCUEYgTFNNIGZ1bmN0aW9ucywgYXJlIGltcG9ydGFudC4gVW5kZXJzdGFuZGluZyB0aGUga2VybmVsIGNvbW11bml0eSYjMzk7cyBkaXJlY3Rpb24gaXMgdml0YWwgZm9yIGxvbmctdGVybSBwcm9qZWN0IHBsYW5uaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAyMDoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDkyLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgOTI6XHRjb25maWcgQlBGX0xTTVxuICA5MzpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgQlBGIExTTSBJbnN0cnVtZW50YXRpb25cJiMzNDtcbiAgOTQ6XHRcdGRlcGVuZHMgb24gQlBGX0VWRU5UU1xuICA5NTpcdFx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTFxuICA5NjpcdFx0ZGVwZW5kcyBvbiBTRUNVUklUWVxuICA5NzpcdFx0ZGVwZW5kcyBvbiBCUEZfSklUXG4gIDk4Olx0XHRoZWxwXG4gIDk5Olx0XHQgIEVuYWJsZXMgaW5zdHJ1bWVudGF0aW9uIG9mIHRoZSBzZWN1cml0eSBob29rcyB3aXRoIEJQRiBwcm9ncmFtcyBmb3JcbiAxMDA6XHRcdCAgaW1wbGVtZW50aW5nIGR5bmFtaWMgTUFDIGFuZCBBdWRpdCBQb2xpY2llcy5cbiAxMDE6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMjA6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAyNTcKCQkJCQkJCW91dHB1dDogMTM0CgkJCQkJCQl0aG91Z2h0czogNzg4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRlMtVkVSSVRZIEJQRiBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCB3ZSYjMzk7cmUgZGVmaW5pdGVseSBkZWFsaW5nIHdpdGggc29tZXRoaW5nIHRoYXQgaW52b2x2ZXMgYEJQRl9MU01gLCBhbmQgb2YgY291cnNlIGBTRUNVUklUWWAuIFRoZSBwYXRjaCBzZWVtcyB0byBiZSB0b3VjaGluZyBCUEYtcmVsYXRlZCBjb2RlLCBzbyBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYEJQRl9MU01gIGlzIHRoZSByaWdodCBjb25maWd1cmF0aW9uLiBBaCwgeWVzLCBgQlBGX0xTTWAgZGVwZW5kcyBvbiBgQlBGX0VWRU5UU2AsIGBCUEZfU1lTQ0FMTGAsIGBTRUNVUklUWWAsIGFuZCBgQlBGX0pJVGAuIFNvLCB5ZWFoLCB0aGF0IG1ha2VzIHNlbnNlOyBlbmFibGluZyBgQlBGX0xTTWAgaXMgZGVmaW5pdGVseSB0aGUgY29ycmVjdCBjb25maWcuIEl0IGFsc28gbG9va3MgbGlrZSBgRlNfVkVSSVRZYCBpdHNlbGYgaXMgZ29pbmcgdG8gYmUgaW1wb3J0YW50LgoKTm93LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBwYXRjaCBpdHNlbGYuIEkmIzM5O20gc2VlaW5nIGNoYW5nZXMgZm9jdXNpbmcgb24gdHlwZSB1cGdyYWRlcyB0byBgdTY0YC4gTG9va2luZyBjbG9zZWx5LCBpdCBsb29rcyBsaWtlIHRoZXJlJiMzOTtzIGJlZW4gYSBjaGFuZ2UgaW4gaG93IGBkeW5wdHJfc3pgIGlzIGhhbmRsZWQuIEl0IHNlZW1zIHRoZSBvcmlnaW5hbCBjb2RlIGhhZCBhIHBvdGVudGlhbCBmb3IgYW4gaW50ZWdlciBvdmVyZmxvdyBvciBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3MuIFRoZSBuZXcgY29kZSBkb2VzIHNpemUgY2hlY2tzLCB3aGljaCBpcyBnb29kLiBUaGUgcGF0Y2ggaXMgZGVmaW5pdGVseSBwcmV2ZW50aW5nIGEgdnVsbmVyYWJpbGl0eSByZWxhdGVkIHRvIHRoZSBgYnBmX2dldF9mc3Zlcml0eV9kaWdlc3RgIGZ1bmN0aW9uLgoKQWxyaWdodCwgY2hlY2tpbmcgdGhyb3VnaCB0aGUgcGF0Y2gsIGFuZCBpdCBsb29rcyBsaWtlIHRoaXMgaXMgdGhlIG9ubHkgZnVuY3Rpb24gbW9kaWZpZWQuIElzIGl0IHJlYWNoYWJsZT8gWWVzLCBiZWNhdXNlIGl0JiMzOTtzIGEga2Z1bmMgdGhhdCBnZXRzIGNhbGxlZCB0aHJvdWdoIHRoZSBCUEYgc3lzY2FsbCB3aGVuIGFuIExTTSBCUEYgcHJvZ3JhbSBvZiBhIHNwZWNpZmljIHR5cGUgaXMgY2FsbGVkLgoKU28sIHRvIHJlY2FwLCBJIG5lZWQgYEZTX1ZFUklUWWAsIGBCUEZfU1lTQ0FMTGAsIGFuZCBgQlBGX0xTTWAgdG8gbWFrZSBzdXJlIEkgYW0gaW4gYSBnb29kIHRlc3RpbmcgY29uZmlnLgoKTm93IEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBzY29wZSwgc28gSSYjMzk7bGwgY2hlY2sgaWYgYGJwZl9nZXRfZnN2ZXJpdHlfZGlnZXN0YCBpcyBhIHN0YXRpYyBvciBpbmxpbmUuIE5vcGUsIGl0JiMzOTtzIG5vdCwgaXQmIzM5O3MgYSBrZnVuYywgd2hpY2ggbWVhbnMgaXQmIzM5O3MgZXhwb3J0ZWQgdG8gQlBGLgoKQmFzaWNhbGx5LCB0aGlzIHBhdGNoIGlzIGZpeGluZyBhIHNlY3VyaXR5IGlzc3VlIGluIGBicGZfZ2V0X2ZzdmVyaXR5X2RpZ2VzdGAgYnkgaGFuZGxpbmcgYGR5bnB0cl9zemAgcHJvcGVybHkuIEl0JiMzOTtzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGl0JiMzOTtzIHJlYWNoYWJsZSB0aHJvdWdoIEJQRiwgc28sIGFic29sdXRlbHksIHRoaXMgaXMgc29tZXRoaW5nIHRoYXQgbmVlZHMgZnV6emluZy4KCk5vdywgYSBxdWljayBjaGVjayBvbiBgRlNfVkVSSVRZYCBhbmQgc3VwcG9ydGVkIGZpbGVzeXN0ZW1zLCBsZXQmIzM5O3Mgc2VlLCBpdCB3b3JrcyBvbiBgZXh0NGAsIGBmMmZzYCwgYGJ0cmZzYC4gQW5kIFN5emthbGxlciBhbHJlYWR5IHRlc3RzIHRob3NlLCBzbyBJIHNob3VsZCBiZSBnb29kIHRvIGdvIGJ5IGp1c3QgZW5hYmxpbmcgYEZTX1ZFUklUWWAuIEkmIzM5O20gZ29pbmcgdG8gc2V0IHRoZSByZXN1bHRzIGFuZCBtb3ZlIG9uIHRvIHRoZSBuZXh0IG9uZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMjA6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0ZTX1ZFUklUWSYjMzQ7LAogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtCUEZfTFNNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2dldF9mc3Zlcml0eV9kaWdlc3QmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gaW50ZWdlciBvdmVyZmxvdyBhbmQgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2VzcyBpbiB0aGUgYGJwZl9nZXRfZnN2ZXJpdHlfZGlnZXN0YCBCUEYga2Z1bmMgYnkgY2hhbmdpbmcgc2l6ZSB2YXJpYWJsZXMgdG8gYHU2NGAgYW5kIGFkZGluZyBhIHByb3BlciBib3VuZHMgY2hlY2suIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBhIHJlYWNoYWJsZSBCUEYgQVBJLCBtYWtpbmcgaXQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RlNfVkVSSVRZJiMzNDssCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9MU00mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfZ2V0X2ZzdmVyaXR5X2RpZ2VzdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiBpbnRlZ2VyIG92ZXJmbG93IGFuZCBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzIGluIHRoZSBgYnBmX2dldF9mc3Zlcml0eV9kaWdlc3RgIEJQRiBrZnVuYyBieSBjaGFuZ2luZyBzaXplIHZhcmlhYmxlcyB0byBgdTY0YCBhbmQgYWRkaW5nIGEgcHJvcGVyIGJvdW5kcyBjaGVjay4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGEgcmVhY2hhYmxlIEJQRiBBUEksIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDNUMjA6MjI6MjMuNDQ3NjczMjhaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTE4NDgzNjM4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJGU19WRVJJVFlcIixcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJCUEZfTFNNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2dldF9mc3Zlcml0eV9kaWdlc3RcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBpbnRlZ2VyIG92ZXJmbG93IGFuZCBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzIGluIHRoZSBgYnBmX2dldF9mc3Zlcml0eV9kaWdlc3RgIEJQRiBrZnVuYyBieSBjaGFuZ2luZyBzaXplIHZhcmlhYmxlcyB0byBgdTY0YCBhbmQgYWRkaW5nIGEgcHJvcGVyIGJvdW5kcyBjaGVjay4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGEgcmVhY2hhYmxlIEJQRiBBUEksIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QyMDoyMjoyMy40NDc2ODM0M1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg5MDkzNTE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMDA3MGY5ZjQ4YjNmZDgyYjE1YjVhZmU4NTMyODc4Y2MyNzg5ZThmMVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEF1ZyAzIDIwOjIyOjIyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2ZzL3Zlcml0eS9tZWFzdXJlLmMgYi9mcy92ZXJpdHkvbWVhc3VyZS5jXFxuaW5kZXggY2ZlMmQ1ZTUzNWY5Ni4uNjhkZmNjYjY5NzcyMCAxMDA2NDRcXG4tLS0gYS9mcy92ZXJpdHkvbWVhc3VyZS5jXFxuKysrIGIvZnMvdmVyaXR5L21lYXN1cmUuY1xcbkBAIC0xMjIsMTEgKzEyMiwxMSBAQCBfX2JwZl9rZnVuYyBpbnQgYnBmX2dldF9mc3Zlcml0eV9kaWdlc3Qoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IHN0cnVjdCBicGZfZHlucFxcbiB7XFxuIFxcdGNvbnN0IHN0cnVjdCBicGZfZHlucHRyX2tlcm4gKmRpZ2VzdF9wdHIgPSAoc3RydWN0IGJwZl9keW5wdHJfa2VybiAqKWRpZ2VzdF9wO1xcbiBcXHRjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShmaWxlKTtcXG4tXFx0dTMyIGR5bnB0cl9zeiA9IF9fYnBmX2R5bnB0cl9zaXplKGRpZ2VzdF9wdHIpO1xcbitcXHR1NjQgZHlucHRyX3N6ID0gX19icGZfZHlucHRyX3NpemUoZGlnZXN0X3B0cik7XFxuIFxcdHN0cnVjdCBmc3Zlcml0eV9kaWdlc3QgKmFyZztcXG4gXFx0Y29uc3Qgc3RydWN0IGZzdmVyaXR5X2luZm8gKnZpO1xcbiBcXHRjb25zdCBzdHJ1Y3QgZnN2ZXJpdHlfaGFzaF9hbGcgKmhhc2hfYWxnO1xcbi1cXHRpbnQgb3V0X2RpZ2VzdF9zejtcXG4rXFx0dTY0IG91dF9kaWdlc3Rfc3o7XFxuIFxcbiBcXHRpZiAoZHlucHRyX3N6IFxcdTAwM2Mgc2l6ZW9mKHN0cnVjdCBmc3Zlcml0eV9kaWdlc3QpKVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5AQCAtMTQ0LDE3ICsxNDQsMjAgQEAgX19icGZfa2Z1bmMgaW50IGJwZl9nZXRfZnN2ZXJpdHlfZGlnZXN0KHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBzdHJ1Y3QgYnBmX2R5bnBcXG4gXFxuIFxcdGhhc2hfYWxnID0gdmktXFx1MDAzZXRyZWVfcGFyYW1zLmhhc2hfYWxnO1xcbiBcXG4rXFx0b3V0X2RpZ2VzdF9zeiA9IGR5bnB0cl9zeiAtIHNpemVvZihzdHJ1Y3QgZnN2ZXJpdHlfZGlnZXN0KTtcXG4rXFx0aWYgKG91dF9kaWdlc3Rfc3ogXFx1MDAzYyBoYXNoX2FsZy1cXHUwMDNlZGlnZXN0X3NpemUpXFxuK1xcdFxcdHJldHVybiAtRU9WRVJGTE9XO1xcbitcXG4gXFx0YXJnLVxcdTAwM2VkaWdlc3RfYWxnb3JpdGhtID0gaGFzaF9hbGcgLSBmc3Zlcml0eV9oYXNoX2FsZ3M7XFxuIFxcdGFyZy1cXHUwMDNlZGlnZXN0X3NpemUgPSBoYXNoX2FsZy1cXHUwMDNlZGlnZXN0X3NpemU7XFxuIFxcbi1cXHRvdXRfZGlnZXN0X3N6ID0gZHlucHRyX3N6IC0gc2l6ZW9mKHN0cnVjdCBmc3Zlcml0eV9kaWdlc3QpO1xcbi1cXG4gXFx0LyogY29weSBkaWdlc3QgKi9cXG4tXFx0bWVtY3B5KGFyZy1cXHUwMDNlZGlnZXN0LCB2aS1cXHUwMDNlZmlsZV9kaWdlc3QsICBtaW5fdChpbnQsIGhhc2hfYWxnLVxcdTAwM2VkaWdlc3Rfc2l6ZSwgb3V0X2RpZ2VzdF9zeikpO1xcbitcXHRtZW1jcHkoYXJnLVxcdTAwM2VkaWdlc3QsIHZpLVxcdTAwM2VmaWxlX2RpZ2VzdCwgaGFzaF9hbGctXFx1MDAzZWRpZ2VzdF9zaXplKTtcXG4gXFxuIFxcdC8qIGZpbGwgdGhlIGV4dHJhIGJ1ZmZlciB3aXRoIHplcm9zICovXFxuIFxcdGlmIChvdXRfZGlnZXN0X3N6IFxcdTAwM2UgaGFzaF9hbGctXFx1MDAzZWRpZ2VzdF9zaXplKVxcbi1cXHRcXHRtZW1zZXQoYXJnLVxcdTAwM2VkaWdlc3QgKyBhcmctXFx1MDAzZWRpZ2VzdF9zaXplLCAwLCBvdXRfZGlnZXN0X3N6IC0gaGFzaF9hbGctXFx1MDAzZWRpZ2VzdF9zaXplKTtcXG4rXFx0XFx0bWVtc2V0KGFyZy1cXHUwMDNlZGlnZXN0ICsgaGFzaF9hbGctXFx1MDAzZWRpZ2VzdF9zaXplLCAwLFxcbitcXHRcXHQgICAgICAgb3V0X2RpZ2VzdF9zeiAtIGhhc2hfYWxnLVxcdTAwM2VkaWdlc3Rfc2l6ZSk7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QyMDoyMjoyMy45Mzc4MTQyMTlaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo1NDY5NDY4MjEwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJGU19WRVJJVFlcIixcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJCUEZfTFNNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2dldF9mc3Zlcml0eV9kaWdlc3RcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBpbnRlZ2VyIG92ZXJmbG93IGFuZCBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzIGluIHRoZSBgYnBmX2dldF9mc3Zlcml0eV9kaWdlc3RgIEJQRiBrZnVuYyBieSBjaGFuZ2luZyBzaXplIHZhcmlhYmxlcyB0byBgdTY0YCBhbmQgYWRkaW5nIGEgcHJvcGVyIGJvdW5kcyBjaGVjay4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGEgcmVhY2hhYmxlIEJQRiBBUEksIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAwMDcwZjlmNDhiM2ZkODJiMTViNWFmZTg1MzI4NzhjYzI3ODllOGYxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMyAyMDoyMjoyMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL3Zlcml0eS9tZWFzdXJlLmMgYi9mcy92ZXJpdHkvbWVhc3VyZS5jXG5pbmRleCBjZmUyZDVlNTM1Zjk2Li42OGRmY2NiNjk3NzIwIDEwMDY0NFxuLS0tIGEvZnMvdmVyaXR5L21lYXN1cmUuY1xuKysrIGIvZnMvdmVyaXR5L21lYXN1cmUuY1xuQEAgLTEyMiwxMSArMTIyLDExIEBAIF9fYnBmX2tmdW5jIGludCBicGZfZ2V0X2ZzdmVyaXR5X2RpZ2VzdChzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3Qgc3RydWN0IGJwZl9keW5wXG4ge1xuIFx0Y29uc3Qgc3RydWN0IGJwZl9keW5wdHJfa2VybiAqZGlnZXN0X3B0ciA9IChzdHJ1Y3QgYnBmX2R5bnB0cl9rZXJuICopZGlnZXN0X3A7XG4gXHRjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShmaWxlKTtcbi1cdHUzMiBkeW5wdHJfc3ogPSBfX2JwZl9keW5wdHJfc2l6ZShkaWdlc3RfcHRyKTtcbitcdHU2NCBkeW5wdHJfc3ogPSBfX2JwZl9keW5wdHJfc2l6ZShkaWdlc3RfcHRyKTtcbiBcdHN0cnVjdCBmc3Zlcml0eV9kaWdlc3QgKmFyZztcbiBcdGNvbnN0IHN0cnVjdCBmc3Zlcml0eV9pbmZvICp2aTtcbiBcdGNvbnN0IHN0cnVjdCBmc3Zlcml0eV9oYXNoX2FsZyAqaGFzaF9hbGc7XG4tXHRpbnQgb3V0X2RpZ2VzdF9zejtcbitcdHU2NCBvdXRfZGlnZXN0X3N6O1xuIFxuIFx0aWYgKGR5bnB0cl9zeiBcdTAwM2Mgc2l6ZW9mKHN0cnVjdCBmc3Zlcml0eV9kaWdlc3QpKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbkBAIC0xNDQsMTcgKzE0NCwyMCBAQCBfX2JwZl9rZnVuYyBpbnQgYnBmX2dldF9mc3Zlcml0eV9kaWdlc3Qoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IHN0cnVjdCBicGZfZHlucFxuIFxuIFx0aGFzaF9hbGcgPSB2aS1cdTAwM2V0cmVlX3BhcmFtcy5oYXNoX2FsZztcbiBcbitcdG91dF9kaWdlc3Rfc3ogPSBkeW5wdHJfc3ogLSBzaXplb2Yoc3RydWN0IGZzdmVyaXR5X2RpZ2VzdCk7XG4rXHRpZiAob3V0X2RpZ2VzdF9zeiBcdTAwM2MgaGFzaF9hbGctXHUwMDNlZGlnZXN0X3NpemUpXG4rXHRcdHJldHVybiAtRU9WRVJGTE9XO1xuK1xuIFx0YXJnLVx1MDAzZWRpZ2VzdF9hbGdvcml0aG0gPSBoYXNoX2FsZyAtIGZzdmVyaXR5X2hhc2hfYWxncztcbiBcdGFyZy1cdTAwM2VkaWdlc3Rfc2l6ZSA9IGhhc2hfYWxnLVx1MDAzZWRpZ2VzdF9zaXplO1xuIFxuLVx0b3V0X2RpZ2VzdF9zeiA9IGR5bnB0cl9zeiAtIHNpemVvZihzdHJ1Y3QgZnN2ZXJpdHlfZGlnZXN0KTtcbi1cbiBcdC8qIGNvcHkgZGlnZXN0ICovXG4tXHRtZW1jcHkoYXJnLVx1MDAzZWRpZ2VzdCwgdmktXHUwMDNlZmlsZV9kaWdlc3QsICBtaW5fdChpbnQsIGhhc2hfYWxnLVx1MDAzZWRpZ2VzdF9zaXplLCBvdXRfZGlnZXN0X3N6KSk7XG4rXHRtZW1jcHkoYXJnLVx1MDAzZWRpZ2VzdCwgdmktXHUwMDNlZmlsZV9kaWdlc3QsIGhhc2hfYWxnLVx1MDAzZWRpZ2VzdF9zaXplKTtcbiBcbiBcdC8qIGZpbGwgdGhlIGV4dHJhIGJ1ZmZlciB3aXRoIHplcm9zICovXG4gXHRpZiAob3V0X2RpZ2VzdF9zeiBcdTAwM2UgaGFzaF9hbGctXHUwMDNlZGlnZXN0X3NpemUpXG4tXHRcdG1lbXNldChhcmctXHUwMDNlZGlnZXN0ICsgYXJnLVx1MDAzZWRpZ2VzdF9zaXplLCAwLCBvdXRfZGlnZXN0X3N6IC0gaGFzaF9hbGctXHUwMDNlZGlnZXN0X3NpemUpO1xuK1x0XHRtZW1zZXQoYXJnLVx1MDAzZWRpZ2VzdCArIGhhc2hfYWxnLVx1MDAzZWRpZ2VzdF9zaXplLCAwLFxuK1x0XHQgICAgICAgb3V0X2RpZ2VzdF9zeiAtIGhhc2hfYWxnLVx1MDAzZWRpZ2VzdF9zaXplKTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDIwOjIyOjIzLjkzNzgxNjM3OVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU1MDk0OTU3NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgZnMvdmVyaXR5L21lYXN1cmUuY2AgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgZnMvdmVyaXR5L21lYXN1cmUuY2AgYW5kIGltbWVkaWF0ZWx5IEkgc2VlIHRoYXQgd2UncmUgZGVhbGluZyB3aXRoIGBicGZfZ2V0X2ZzdmVyaXR5X2RpZ2VzdGAuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgYnVtcGluZyB0aGUgZGF0YSB0eXBlcyBvZiBgZHlucHRyX3N6YCBhbmQgYG91dF9kaWdlc3Rfc3pgIGZyb20gYHUzMmAgYW5kIGBpbnRgIHRvIGB1NjRgLiBUaGlzIHByb2JhYmx5IG1lYW5zIHdlJ3JlIGFudGljaXBhdGluZyBzaWduaWZpY2FudGx5IGxhcmdlciBkaWdlc3Qgc2l6ZXMgb3IgcG90ZW50aWFsbHkgd29ya2luZyB3aXRoIG11Y2ggbGFyZ2VyIGZpbGUgc2l6ZXMsIHJlcXVpcmluZyBtb3JlIGJpdHMgZm9yIGFjY3VyYXRlIHJlcHJlc2VudGF0aW9uLlxuXG5UaGUgcGF0Y2ggYWxzbyB0d2Vha3MgdGhlIHNpemUgY2hlY2suIEl0IGxvb2tzIGxpa2UgaXQncyBub3cgZXhwbGljaXRseSBjaGVja2luZyBpZiBgb3V0X2RpZ2VzdF9zemAgaXMgKmxlc3MgdGhhbiogYGhhc2hfYWxnLVx1MDAzZWRpZ2VzdF9zaXplYCBhbmQgcmV0dXJuaW5nIGAtRU9WRVJGTE9XYCBpbiB0aGF0IGNhc2UsIHdoaWNoIGlzIGEgZ29vZCBkZWZlbnNpdmUgcHJvZ3JhbW1pbmcgbWVhc3VyZS4gUHJldmlvdXNseSB0aGVyZSB3YXMgYW4gaW1wbGljaXQgY2hlY2suIFRoaXMgbGlrZWx5IHByZXZlbnRzIHVuZGVyZmxvdyBpc3N1ZXMgZHVyaW5nIGRpZ2VzdCBjb21wYXJpc29uLlxuXG5GdXJ0aGVybW9yZSwgdGhlIGBtZW1jcHlgIGFuZCBgbWVtc2V0YCBvcGVyYXRpb25zIGFyZSBiZWluZyB1cGRhdGVkIHRvIGRpcmVjdGx5IHVzZSBgaGFzaF9hbGctXHUwMDNlZGlnZXN0X3NpemVgIGluc3RlYWQgb2YgdGhlIGBtaW5fdGAgZnVuY3Rpb24uIFRoaXMgc2ltcGxpZmljYXRpb24gaXMgZ29vZCwgYXMgaXQgc3VnZ2VzdHMgdGhlIHBhdGNoIGNvcnJlY3RseSBjYWxjdWxhdGVzIHRoZSBjb3JyZWN0IGJ1ZmZlciBzaXplIHRvIGF2b2lkIGFueSBwb3RlbnRpYWwgYnVmZmVyIG92ZXJmbG93cy4gTm8gbW9yZSBtaW4gY2FsbHMhIFRoaXMgaXMgYW4gb3B0aW1pemF0aW9uIGFuZCBhbiBpbXByb3ZlbWVudCBpbiB0aGUgbG9naWMgYXMgd2VsbC5cblxuTm93LCBiZWZvcmUgSSBkaWcgZGVlcGVyIGludG8gdGhlIGNvZGUgaXRzZWxmLCBJIHNob3VsZCBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucy4gTGV0J3Mgc2VlLi4uIGBmcy92ZXJpdHkvbWVhc3VyZS5jYCBpcyBkZWZpbml0ZWx5IHBhcnQgb2YgYEZTX1ZFUklUWWAsIHdoaWNoIGlzIG9idmlvdXMuIEkgbmVlZCB0byBncmVwIGZvciBgYnBmX2dldF9mc3Zlcml0eV9kaWdlc3RgIHRvIGZpbmQgYW55IG90aGVyIHVzYWdlcyBvciByZWZlcmVuY2VzLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGlzIGZ1bmN0aW9uIGlzIHVzZWQgYW5kIHdoYXQgb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbSBhcmUgYWZmZWN0ZWQgYnkgdGhlc2UgY2hhbmdlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGJpZyBwaWN0dXJlIVxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTI4LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjExLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMjA6MjI6MjkuNDQ3MzE2MDI1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3NjE1MDc4MjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX2dldF9mc3Zlcml0eV9kaWdlc3RcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9icGYvZnNfa2Z1bmNzLnJzdD0xMD1CUEYga2Z1bmNzIGNhbiBiZSB1c2VkIHRvIGdldCB0aGVzZSBkYXRhLlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9icGYvZnNfa2Z1bmNzLnJzdC0xMy1cXG5Eb2N1bWVudGF0aW9uL2JwZi9mc19rZnVuY3MucnN0OjE0OiAqIGBgYnBmX2dldF9mc3Zlcml0eV9kaWdlc3QoKWBgXFxuRG9jdW1lbnRhdGlvbi9icGYvZnNfa2Z1bmNzLnJzdC0xNS1cXG4tLVxcbmZzL3Zlcml0eS9tZWFzdXJlLmM9MTEwPV9fYnBmX2tmdW5jX3N0YXJ0X2RlZnMoKTtcXG4tLVxcbmZzL3Zlcml0eS9tZWFzdXJlLmMtMTEyLS8qKlxcbmZzL3Zlcml0eS9tZWFzdXJlLmM6MTEzOiAqIGJwZl9nZXRfZnN2ZXJpdHlfZGlnZXN0OiByZWFkIGZzdmVyaXR5IGRpZ2VzdCBvZiBmaWxlXFxuZnMvdmVyaXR5L21lYXN1cmUuYy0xMTQtICogQGZpbGU6IGZpbGUgdG8gZ2V0IGRpZ2VzdCBmcm9tXFxuLS1cXG5mcy92ZXJpdHkvbWVhc3VyZS5jLTEyMC0gKi9cXG5mcy92ZXJpdHkvbWVhc3VyZS5jOjEyMTpfX2JwZl9rZnVuYyBpbnQgYnBmX2dldF9mc3Zlcml0eV9kaWdlc3Qoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IHN0cnVjdCBicGZfZHlucHRyICpkaWdlc3RfcClcXG5mcy92ZXJpdHkvbWVhc3VyZS5jLTEyMi17XFxuLS1cXG5mcy92ZXJpdHkvbWVhc3VyZS5jPTE2Nz1CVEZfS0ZVTkNTX1NUQVJUKGZzdmVyaXR5X3NldF9pZHMpXFxuZnMvdmVyaXR5L21lYXN1cmUuYzoxNjg6QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9nZXRfZnN2ZXJpdHlfZGlnZXN0KVxcbmZzL3Zlcml0eS9tZWFzdXJlLmMtMTY5LUJURl9LRlVOQ1NfRU5EKGZzdmVyaXR5X3NldF9pZHMpXFxuZnMvdmVyaXR5L21lYXN1cmUuYy0xNzAtXFxuZnMvdmVyaXR5L21lYXN1cmUuYzoxNzE6c3RhdGljIGludCBicGZfZ2V0X2ZzdmVyaXR5X2RpZ2VzdF9maWx0ZXIoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIga2Z1bmNfaWQpXFxuZnMvdmVyaXR5L21lYXN1cmUuYy0xNzIte1xcbi0tXFxuZnMvdmVyaXR5L21lYXN1cmUuYz0xODA9c3RhdGljIGNvbnN0IHN0cnVjdCBidGZfa2Z1bmNfaWRfc2V0IGJwZl9mc3Zlcml0eV9zZXQgPSB7XFxuLS1cXG5mcy92ZXJpdHkvbWVhc3VyZS5jLTE4Mi1cXHQuc2V0ID0gXFx1MDAyNmZzdmVyaXR5X3NldF9pZHMsXFxuZnMvdmVyaXR5L21lYXN1cmUuYzoxODM6XFx0LmZpbHRlciA9IGJwZl9nZXRfZnN2ZXJpdHlfZGlnZXN0X2ZpbHRlcixcXG5mcy92ZXJpdHkvbWVhc3VyZS5jLTE4NC19O1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JwZl9rZnVuY3MuaD03MT1leHRlcm4gaW50IGJwZl9nZXRfZmlsZV94YXR0cihzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciAqbmFtZSxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmX2tmdW5jcy5oLTcyLVxcdFxcdFxcdCAgICAgIHN0cnVjdCBicGZfZHlucHRyICp2YWx1ZV9wdHIpIF9fa3N5bTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmX2tmdW5jcy5oOjczOmV4dGVybiBpbnQgYnBmX2dldF9mc3Zlcml0eV9kaWdlc3Qoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IHN0cnVjdCBicGZfZHlucHRyICpkaWdlc3RfcHRyKSBfX2tzeW07XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JwZl9rZnVuY3MuaC03NC1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X2ZzdmVyaXR5LmM9MjQ9aW50IEJQRl9QUk9HKHRlc3RfZmlsZV9vcGVuLCBzdHJ1Y3QgZmlsZSAqZilcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X2ZzdmVyaXR5LmMtMzUtXFx0YnBmX2R5bnB0cl9mcm9tX21lbShkaWdlc3QsIHNpemVvZihkaWdlc3QpLCAwLCBcXHUwMDI2ZGlnZXN0X3B0cik7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfZnN2ZXJpdHkuYzozNjpcXHRyZXQgPSBicGZfZ2V0X2ZzdmVyaXR5X2RpZ2VzdChmLCBcXHUwMDI2ZGlnZXN0X3B0cik7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfZnN2ZXJpdHkuYy0zNy1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NpZ19pbl94YXR0ci5jPTExPWNoYXIgX2xpY2Vuc2VbXSBTRUMoXFxcImxpY2Vuc2VcXFwiKSA9IFxcXCJHUExcXFwiO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2lnX2luX3hhdHRyLmMtMjgtICogcGx1cyBTSEEyNTZfRElHRVNUX1NJWkUuIFRoZSBtYWdpYyBwYXJ0IG9mIGl0IGlzIGZpbGxlZCBieSB1c2VyIHNwYWNlLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NpZ19pbl94YXR0ci5jOjI5OiAqIGFuZCB0aGUgcmVzdCBvZiBpdCBpcyBmaWxsZWQgYnkgYnBmX2dldF9mc3Zlcml0eV9kaWdlc3QuXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2lnX2luX3hhdHRyLmMtMzAtICpcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NpZ19pbl94YXR0ci5jPTQ2PWludCBCUEZfUFJPRyh0ZXN0X2ZpbGVfb3Blbiwgc3RydWN0IGZpbGUgKmYpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9zaWdfaW5feGF0dHIuYy01OS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9zaWdfaW5feGF0dHIuYzo2MDpcXHRyZXQgPSBicGZfZ2V0X2ZzdmVyaXR5X2RpZ2VzdChmLCBcXHUwMDI2ZGlnZXN0X3B0cik7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2lnX2luX3hhdHRyLmMtNjEtXFx0LyogTm8gdmVyaXR5LCBhbGxvdyBhY2Nlc3MgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMjA6MjI6MzIuMjA4ODMwMTUzWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTEwNTQ1MTQyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBicGZfZ2V0X2ZzdmVyaXR5X2RpZ2VzdGAga2Z1bmMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBicGZfZ2V0X2ZzdmVyaXR5X2RpZ2VzdGAgZnVuY3Rpb24uIEl0J3MgZmxhZ2dlZCBhcyBhIEJQRiBrZnVuYywgd2hpY2ggbWVhbnMgaXQncyBhIGtlcm5lbCBmdW5jdGlvbiBhdmFpbGFibGUgZm9yIHVzZSB3aXRoaW4gQlBGIHByb2dyYW1zLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJXaGVyZSdzIHRoaXMgZGVmaW5lZD8gSSBuZWVkIHRvIGtub3cgdGhlIGNvbnRleHQuXCIgQWgsIGBmcy92ZXJpdHkvbWVhc3VyZS5jYCDigJMgZ290IGl0LiBOb3csIGdpdmVuIG15IGV4cGVyaWVuY2UsIEkgd2FudCB0byBxdWlja2x5IGFzY2VydGFpbiB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiBmb3IgdGhhdCBmaWxlLiBTcGVjaWZpY2FsbHksIEknZCBsaWtlIHRvIGNoZWNrIGlmIGFueSBwYXJ0aWN1bGFyIGtlcm5lbCBjb25maWcgZW5hYmxlcyB0aGUgY29tcGlsYXRpb24gb2YgYG1lYXN1cmUuY2AsIHRvIGNoZWNrIGZvciBhbnkgZGVwZW5kZW5jaWVzLiBJJ2xsIHRha2UgYSBsb29rIGF0IHRoZSBgZnMvdmVyaXR5L01ha2VmaWxlYCB0byBzZWUgdW5kZXIgd2hpY2ggY29uZmlndXJhdGlvbiBpdCBpcyBjb21waWxlZC4gVGhhdCB3aWxsIGdpdmUgbWUgYSBzZW5zZSBvZiB3aGF0J3MgdGllZCB0byB0aGlzIGZ1bmN0aW9uYWxpdHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0MTgsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QyMDoyMjozNy4zMTQyODQyMjRaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODg0MjMyNjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVhc3VyZS5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL3Zlcml0eS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy92ZXJpdHkvTWFrZWZpbGU9Mz1vYmotJChDT05GSUdfRlNfVkVSSVRZKSArPSBlbmFibGUubyBcXFxcXFxuLS1cXG5mcy92ZXJpdHkvTWFrZWZpbGUtNS1cXHRcXHRcXHQgICBpbml0Lm8gXFxcXFxcbmZzL3Zlcml0eS9NYWtlZmlsZTo2OlxcdFxcdFxcdCAgIG1lYXN1cmUubyBcXFxcXFxuZnMvdmVyaXR5L01ha2VmaWxlLTctXFx0XFx0XFx0ICAgb3Blbi5vIFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMjA6MjI6MzcuNDAyNzE0MTM4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDczMTIxOTY0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLi4uXG5cbioqVmVyaXR5IEtlcm5lbCBNb2R1bGUgQ29uZmlndXJhdGlvbioqXG5cblJpZ2h0LCBJIG5lZWQgdG8gbWFrZSBzdXJlIGBDT05GSUdfRlNfVkVSSVRZYCBpcyBlbmFibGVkLiBTZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLiBOb3csIGEgbGl0dGxlIG5hZ2dpbmcgdGhvdWdodC4uLiBpcyBgYnBmX2dldF9mc3Zlcml0eV9kaWdlc3RgIGNvbXBpbGVkIHVuY29uZGl0aW9uYWxseSBpZiBgQ09ORklHX0ZTX1ZFUklUWWAgaXMgZGVmaW5lZD8gSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiBiZWNhdXNlIHRoYXQgY291bGQgaW50cm9kdWNlIHNvbWUgc3VidGxlIGRlcGVuZGVuY3kgcHJvYmxlbXMgaWYgbm90IGhhbmRsZWQgY29ycmVjdGx5LiBCZXR0ZXIgdG8gY29uZmlybSBpdCdzIGNvbmRpdGlvbmFsLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgc291cmNlLiBJJ2xsIGNoZWNrIGBmcy92ZXJpdHkvbWVhc3VyZS5jYCBhbmQgbG9vayBzcGVjaWZpY2FsbHkgZm9yIGFueSBgI2lmZGVmYCBkaXJlY3RpdmVzIHN1cnJvdW5kaW5nIHRoZSBgYnBmX2dldF9mc3Zlcml0eV9kaWdlc3RgIGZ1bmN0aW9uIGRlZmluaXRpb24uIFRoYXQgd2lsbCB0ZWxsIG1lIGltbWVkaWF0ZWx5IHdoZXRoZXIgb3Igbm90IGl0J3MgY29uZGl0aW9uYWxseSBjb21waWxlZC4gSSBkb24ndCB3YW50IHRvIGNoYXNlIGRvd24gdW5uZWNlc3NhcnkgaXNzdWVzIGxhdGVyLiBJdCdzIGJlc3QgdG8gYmUgcHJlY2lzZSwgb3IgZWxzZSB0aGUgY29tcGlsZXIgbWF5IHRocm93IGEgdGFudHJ1bS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDc4NywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDIwOjIyOjQyLjEzMzkzNzcwMloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MzIzNTc4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfZ2V0X2ZzdmVyaXR5X2RpZ2VzdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy92ZXJpdHkvbWVhc3VyZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3Zlcml0eS9tZWFzdXJlLmM9MTEwPV9fYnBmX2tmdW5jX3N0YXJ0X2RlZnMoKTtcXG4tLVxcbmZzL3Zlcml0eS9tZWFzdXJlLmMtMTEyLS8qKlxcbmZzL3Zlcml0eS9tZWFzdXJlLmM6MTEzOiAqIGJwZl9nZXRfZnN2ZXJpdHlfZGlnZXN0OiByZWFkIGZzdmVyaXR5IGRpZ2VzdCBvZiBmaWxlXFxuZnMvdmVyaXR5L21lYXN1cmUuYy0xMTQtICogQGZpbGU6IGZpbGUgdG8gZ2V0IGRpZ2VzdCBmcm9tXFxuLS1cXG5mcy92ZXJpdHkvbWVhc3VyZS5jLTEyMC0gKi9cXG5mcy92ZXJpdHkvbWVhc3VyZS5jOjEyMTpfX2JwZl9rZnVuYyBpbnQgYnBmX2dldF9mc3Zlcml0eV9kaWdlc3Qoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IHN0cnVjdCBicGZfZHlucHRyICpkaWdlc3RfcClcXG5mcy92ZXJpdHkvbWVhc3VyZS5jLTEyMi17XFxuLS1cXG5mcy92ZXJpdHkvbWVhc3VyZS5jPTE2Nz1CVEZfS0ZVTkNTX1NUQVJUKGZzdmVyaXR5X3NldF9pZHMpXFxuZnMvdmVyaXR5L21lYXN1cmUuYzoxNjg6QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9nZXRfZnN2ZXJpdHlfZGlnZXN0KVxcbmZzL3Zlcml0eS9tZWFzdXJlLmMtMTY5LUJURl9LRlVOQ1NfRU5EKGZzdmVyaXR5X3NldF9pZHMpXFxuZnMvdmVyaXR5L21lYXN1cmUuYy0xNzAtXFxuZnMvdmVyaXR5L21lYXN1cmUuYzoxNzE6c3RhdGljIGludCBicGZfZ2V0X2ZzdmVyaXR5X2RpZ2VzdF9maWx0ZXIoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIga2Z1bmNfaWQpXFxuZnMvdmVyaXR5L21lYXN1cmUuYy0xNzIte1xcbi0tXFxuZnMvdmVyaXR5L21lYXN1cmUuYz0xODA9c3RhdGljIGNvbnN0IHN0cnVjdCBidGZfa2Z1bmNfaWRfc2V0IGJwZl9mc3Zlcml0eV9zZXQgPSB7XFxuLS1cXG5mcy92ZXJpdHkvbWVhc3VyZS5jLTE4Mi1cXHQuc2V0ID0gXFx1MDAyNmZzdmVyaXR5X3NldF9pZHMsXFxuZnMvdmVyaXR5L21lYXN1cmUuYzoxODM6XFx0LmZpbHRlciA9IGJwZl9nZXRfZnN2ZXJpdHlfZGlnZXN0X2ZpbHRlcixcXG5mcy92ZXJpdHkvbWVhc3VyZS5jLTE4NC19O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QyMDoyMjo0Mi4xOTcxNzg3MzlaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDgzNzQxNzEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBkZWVwIGluIHRoZSB3ZWVkcyBvZiBrZXJuZWwgZGV2ZWxvcG1lbnQ6XG5cbioqRGl2aW5nIGludG8gVmVyaXR5J3MgTWVhc3VyZW1lbnQgQ29kZSoqXG5cbkFscmlnaHQsIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IGBmcy92ZXJpdHkvbWVhc3VyZS5jYCBoYW5kbGVzIEJQRiBzeXNjYWxscywgaWYgYXQgYWxsLiBJdCdzIGxpa2VseSB0aGF0IGZ1bmN0aW9uYWxpdHkgaXMgY29uZGl0aW9uYWxseSBjb21waWxlZCwgc28gSSdtIGdvaW5nIHRvIHNjYW4gdGhyb3VnaCB0aGF0IGZpbGUgaW1tZWRpYXRlbHkuIE15IHByaW1hcnkgZm9jdXMgaXMgdG8gaWRlbnRpZnkgYW55IHByZXByb2Nlc3NvciBkaXJlY3RpdmVzLCBzcGVjaWZpY2FsbHkgYCNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExgIOKAkyB0aGF0J3MgdGhlIHRlbGx0YWxlIHNpZ24gSSdtIGxvb2tpbmcgZm9yLiBUaGlzIHNob3VsZCBwcm92aWRlIGluc2lnaHRzIGludG8gd2hldGhlciBCUEYgaW50ZXJhY3Rpb24gaGFzIGJlZW4gaW50ZWdyYXRlZCBkaXJlY3RseSBpbnRvIHZlcml0eSBtZWFzdXJlbWVudC4gVGhlIGdvYWwgaXMgdG8gZWl0aGVyIGNvbmZpcm0gaXRzIGluY2x1c2lvbiwgaXRzIGFic2VuY2UsIG9yIHVuZGVyc3RhbmQgaG93IGl0IGhhcyBiZWVuIGluY29ycG9yYXRlZCBpbnRvIGl0cyBjb3JlIG1lYXN1cmVtZW50IHByb2Nlc3Nlcy4gUXVpY2tseSBza2ltbWluZyB0aGUgY29kZSBpcyBnb2luZyB0byBiZSBteSBmaXJzdCBwcmlvcml0eS4gSSdtIGhvcGluZyB0byBxdWlja2x5IGlkZW50aWZ5IHRoZSBwb2ludHMgb2YgaW50ZXJzZWN0aW9uIGJldHdlZW4gdGhlc2Ugc3Vic3lzdGVtcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTU2NSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDIwOjIyOjQ1LjY4MDkyMjY2MVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTA4OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvdmVyaXR5L21lYXN1cmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTAwOlxcdFxcdFxcdCphbGcgPSBoYXNoX2FsZyAtIGZzdmVyaXR5X2hhc2hfYWxncztcXG4gMTAxOlxcdFxcdGlmIChoYWxnKVxcbiAxMDI6XFx0XFx0XFx0KmhhbGcgPSBoYXNoX2FsZy1cXHUwMDNlYWxnb19pZDtcXG4gMTAzOlxcdFxcdHJldHVybiBoYXNoX2FsZy1cXHUwMDNlZGlnZXN0X3NpemU7XFxuIDEwNDpcXHR9XFxuIDEwNTpcXHRFWFBPUlRfU1lNQk9MX0dQTChmc3Zlcml0eV9nZXRfZGlnZXN0KTtcXG4gMTA2OlxcdFxcbiAxMDc6XFx0I2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxcbiAxMDg6XFx0XFxuIDEwOTpcXHQvKiBicGYga2Z1bmNzICovXFxuIDExMDpcXHRfX2JwZl9rZnVuY19zdGFydF9kZWZzKCk7XFxuIDExMTpcXHRcXG4gMTEyOlxcdC8qKlxcbiAxMTM6XFx0ICogYnBmX2dldF9mc3Zlcml0eV9kaWdlc3Q6IHJlYWQgZnN2ZXJpdHkgZGlnZXN0IG9mIGZpbGVcXG4gMTE0OlxcdCAqIEBmaWxlOiBmaWxlIHRvIGdldCBkaWdlc3QgZnJvbVxcbiAxMTU6XFx0ICogQGRpZ2VzdF9wOiAob3V0KSBkeW5wdHIgZm9yIHN0cnVjdCBmc3Zlcml0eV9kaWdlc3RcXG4gMTE2OlxcdCAqXFxuIDExNzpcXHQgKiBSZWFkIGZzdmVyaXR5X2RpZ2VzdCBvZiAqZmlsZSogaW50byAqZGlnZXN0X3B0ciouXFxuIDExODpcXHQgKlxcbiAxMTk6XFx0ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIGEgbmVnYXRpdmUgdmFsdWUgb24gZXJyb3IuXFxuIDEyMDpcXHQgKi9cXG4gMTIxOlxcdF9fYnBmX2tmdW5jIGludCBicGZfZ2V0X2ZzdmVyaXR5X2RpZ2VzdChzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3Qgc3RydWN0IGJwZl9keW5wdHIgKmRpZ2VzdF9wKVxcbiAxMjI6XFx0e1xcbiAxMjM6XFx0XFx0Y29uc3Qgc3RydWN0IGJwZl9keW5wdHJfa2VybiAqZGlnZXN0X3B0ciA9IChzdHJ1Y3QgYnBmX2R5bnB0cl9rZXJuICopZGlnZXN0X3A7XFxuIDEyNDpcXHRcXHRjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShmaWxlKTtcXG4gMTI1OlxcdFxcdHU2NCBkeW5wdHJfc3ogPSBfX2JwZl9keW5wdHJfc2l6ZShkaWdlc3RfcHRyKTtcXG4gMTI2OlxcdFxcdHN0cnVjdCBmc3Zlcml0eV9kaWdlc3QgKmFyZztcXG4gMTI3OlxcdFxcdGNvbnN0IHN0cnVjdCBmc3Zlcml0eV9pbmZvICp2aTtcXG4gMTI4OlxcdFxcdGNvbnN0IHN0cnVjdCBmc3Zlcml0eV9oYXNoX2FsZyAqaGFzaF9hbGc7XFxuIDEyOTpcXHRcXHR1NjQgb3V0X2RpZ2VzdF9zejtcXG4gMTMwOlxcdFxcbiAxMzE6XFx0XFx0aWYgKGR5bnB0cl9zeiBcXHUwMDNjIHNpemVvZihzdHJ1Y3QgZnN2ZXJpdHlfZGlnZXN0KSlcXG4gMTMyOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiAxMzM6XFx0XFxuIDEzNDpcXHRcXHRhcmcgPSBfX2JwZl9keW5wdHJfZGF0YV9ydyhkaWdlc3RfcHRyLCBkeW5wdHJfc3opO1xcbiAxMzU6XFx0XFx0aWYgKCFhcmcpXFxuIDEzNjpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gMTM3OlxcdFxcbiAxMzg6XFx0XFx0aWYgKCFJU19BTElHTkVEKCh1aW50cHRyX3QpYXJnLCBfX2FsaWdub2ZfXygqYXJnKSkpXFxuIDEzOTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gMTQwOlxcdFxcbiAxNDE6XFx0XFx0dmkgPSBmc3Zlcml0eV9nZXRfaW5mbyhpbm9kZSk7XFxuIDE0MjpcXHRcXHRpZiAoIXZpKVxcbiAxNDM6XFx0XFx0XFx0cmV0dXJuIC1FTk9EQVRBOyAvKiBub3QgYSB2ZXJpdHkgZmlsZSAqL1xcbiAxNDQ6XFx0XFxuIDE0NTpcXHRcXHRoYXNoX2FsZyA9IHZpLVxcdTAwM2V0cmVlX3BhcmFtcy5oYXNoX2FsZztcXG4gMTQ2OlxcdFxcbiAxNDc6XFx0XFx0b3V0X2RpZ2VzdF9zeiA9IGR5bnB0cl9zeiAtIHNpemVvZihzdHJ1Y3QgZnN2ZXJpdHlfZGlnZXN0KTtcXG4gMTQ4OlxcdFxcdGlmIChvdXRfZGlnZXN0X3N6IFxcdTAwM2MgaGFzaF9hbGctXFx1MDAzZWRpZ2VzdF9zaXplKVxcbiAxNDk6XFx0XFx0XFx0cmV0dXJuIC1FT1ZFUkZMT1c7XFxuIDE1MDpcXHRcXG4gMTUxOlxcdFxcdGFyZy1cXHUwMDNlZGlnZXN0X2FsZ29yaXRobSA9IGhhc2hfYWxnIC0gZnN2ZXJpdHlfaGFzaF9hbGdzO1xcbiAxNTI6XFx0XFx0YXJnLVxcdTAwM2VkaWdlc3Rfc2l6ZSA9IGhhc2hfYWxnLVxcdTAwM2VkaWdlc3Rfc2l6ZTtcXG4gMTUzOlxcdFxcbiAxNTQ6XFx0XFx0LyogY29weSBkaWdlc3QgKi9cXG4gMTU1OlxcdFxcdG1lbWNweShhcmctXFx1MDAzZWRpZ2VzdCwgdmktXFx1MDAzZWZpbGVfZGlnZXN0LCBoYXNoX2FsZy1cXHUwMDNlZGlnZXN0X3NpemUpO1xcbiAxNTY6XFx0XFxuIDE1NzpcXHRcXHQvKiBmaWxsIHRoZSBleHRyYSBidWZmZXIgd2l0aCB6ZXJvcyAqL1xcbiAxNTg6XFx0XFx0aWYgKG91dF9kaWdlc3Rfc3ogXFx1MDAzZSBoYXNoX2FsZy1cXHUwMDNlZGlnZXN0X3NpemUpXFxuIDE1OTpcXHRcXHRcXHRtZW1zZXQoYXJnLVxcdTAwM2VkaWdlc3QgKyBoYXNoX2FsZy1cXHUwMDNlZGlnZXN0X3NpemUsIDAsXFxuIDE2MDpcXHRcXHRcXHQgICAgICAgb3V0X2RpZ2VzdF9zeiAtIGhhc2hfYWxnLVxcdTAwM2VkaWdlc3Rfc2l6ZSk7XFxuIDE2MTpcXHRcXG4gMTYyOlxcdFxcdHJldHVybiAwO1xcbiAxNjM6XFx0fVxcbiAxNjQ6XFx0XFxuIDE2NTpcXHRfX2JwZl9rZnVuY19lbmRfZGVmcygpO1xcbiAxNjY6XFx0XFxuIDE2NzpcXHRCVEZfS0ZVTkNTX1NUQVJUKGZzdmVyaXR5X3NldF9pZHMpXFxuIDE2ODpcXHRCVEZfSURfRkxBR1MoZnVuYywgYnBmX2dldF9mc3Zlcml0eV9kaWdlc3QpXFxuIDE2OTpcXHRCVEZfS0ZVTkNTX0VORChmc3Zlcml0eV9zZXRfaWRzKVxcbiAxNzA6XFx0XFxuIDE3MTpcXHRzdGF0aWMgaW50IGJwZl9nZXRfZnN2ZXJpdHlfZGlnZXN0X2ZpbHRlcihjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiBrZnVuY19pZClcXG4gMTcyOlxcdHtcXG4gMTczOlxcdFxcdGlmICghYnRmX2lkX3NldDhfY29udGFpbnMoXFx1MDAyNmZzdmVyaXR5X3NldF9pZHMsIGtmdW5jX2lkKSlcXG4gMTc0OlxcdFxcdFxcdHJldHVybiAwO1xcbiAxNzU6XFx0XFxuIDE3NjpcXHRcXHQvKiBPbmx5IGFsbG93IHRvIGF0dGFjaCBmcm9tIExTTSBob29rcywgdG8gYXZvaWQgcmVjdXJzaW9uICovXFxuIDE3NzpcXHRcXHRyZXR1cm4gcHJvZy1cXHUwMDNldHlwZSAhPSBCUEZfUFJPR19UWVBFX0xTTSA/IC1FQUNDRVMgOiAwO1xcbiAxNzg6XFx0fVxcbiAxNzk6XFx0XFxuIDE4MDpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IGJ0Zl9rZnVuY19pZF9zZXQgYnBmX2ZzdmVyaXR5X3NldCA9IHtcXG4gMTgxOlxcdFxcdC5vd25lciA9IFRISVNfTU9EVUxFLFxcbiAxODI6XFx0XFx0LnNldCA9IFxcdTAwMjZmc3Zlcml0eV9zZXRfaWRzLFxcbiAxODM6XFx0XFx0LmZpbHRlciA9IGJwZl9nZXRfZnN2ZXJpdHlfZGlnZXN0X2ZpbHRlcixcXG4gMTg0OlxcdH07XFxuIDE4NTpcXHRcXG4gMTg2OlxcdHZvaWQgX19pbml0IGZzdmVyaXR5X2luaXRfYnBmKHZvaWQpXFxuIDE4NzpcXHR7XFxuIDE4ODpcXHRcXHRyZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfTFNNLCBcXHUwMDI2YnBmX2ZzdmVyaXR5X3NldCk7XFxuIDE4OTpcXHR9XFxuIDE5MDpcXHRcXG4gMTkxOlxcdCNlbmRpZiAvKiBDT05GSUdfQlBGX1NZU0NBTEwgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMjA6MjI6NDUuNjgxMDM1NjExWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc3NDQyMjE1NjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIGBicGZfZ2V0X2ZzdmVyaXR5X2RpZ2VzdGAgVnVsbmVyYWJpbGl0eSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBJIHNlZSBhIGZldyBrZXkgdGhpbmdzIEkgbmVlZCB0byBjb25zaWRlciBmb3IgZW5hYmxpbmcgdGhlIGNvZGUuIEZpcnN0LCB0aGUgY29kZSBwYXRoIHJlbGllcyBvbiBgQ09ORklHX0JQRl9TWVNDQUxMYCBhbmQgYENPTkZJR19GU19WRVJJVFlgLCBzbyB0aG9zZSBhcmUgcHJlcmVxdWlzaXRlcy5cblxuTm93LCBmb2N1c2luZyBvbiB0aGUgZnVuY3Rpb24gaXRzZWxmLCBgYnBmX2dldF9mc3Zlcml0eV9kaWdlc3RgLCBpdCdzIGEgQlBGIGtmdW5jLCB3aGljaCBtZWFucyBpdCdzIGFjY2Vzc2libGUgd2l0aGluIEJQRiBwcm9ncmFtcywgYW5kIHRoYXTigJlzIGEganVpY3kgdGFyZ2V0IGZvciBleHBsb2l0YXRpb24uIFRoZSBwYXRjaCBhZGRyZXNzZXMgYSBjcml0aWNhbCBidWcsIHNwZWNpZmljYWxseSB0aGUgcG90ZW50aWFsIGZvciBpbnRlZ2VyIG92ZXJmbG93LCB3aGljaCBvZiBjb3Vyc2UgSSBoYWQgdG8gdHJhY2UgdGhyb3VnaCB0byB1bmRlcnN0YW5kIGZ1bGx5LlxuXG5Jbml0aWFsbHksIEkgaGFkIHRob3VnaHQgdGhlIGlzc3VlIHN0ZW1tZWQgZnJvbSBhIG5lZ2F0aXZlIHZhbHVlIHJlc3VsdGluZyBmcm9tIHN1YnRyYWN0aW5nIGBzaXplb2Yoc3RydWN0IGZzdmVyaXR5X2RpZ2VzdClgIGZyb20gYGR5bnB0cl9zemAsIGJ1dCB0aGF0IGlzbid0IGFjY3VyYXRlIHNpbmNlIHRoZSBzaXplIGlzIHNtYWxsZXIuIEl0IHJldHVybnMgYC1FSU5WQUxgLiBUaGVuLCBJIHJlYWxpemVkIHRoZSBwcm9ibGVtIGxpZXMgaW4gdGhlIG9yaWdpbmFsIGNvZGUncyB1c2Ugb2YgYW4gYGludGAgZm9yIGBvdXRfZGlnZXN0X3N6YC4gVGhlIHJvb3QgY2F1c2UgaXMgYGR5bnB0cl9zemAgd2hpY2ggaXMgb3JpZ2luYWxseSBhIGB1MzJgLCBhbmQgaWYgaXRzIHZhbHVlIGlzIGxhcmdlLCBzdWNoIGFzIGAweDgwMDAwMDAwYCwgdGhlIGNhbGN1bGF0aW9uIGBkeW5wdHJfc3ogLSBzaXplb2Yoc3RydWN0IGZzdmVyaXR5X2RpZ2VzdClgIHJlc3VsdHMgaW4gYG91dF9kaWdlc3Rfc3pgIGJlaW5nIGEgbmVnYXRpdmUgYGludGAuIFRoYXQgbmVnYXRpdmUgdmFsdWUgdGhlbiBnZXRzIHVzZWQgaW4gYSBgbWluX3RgIGNvbXBhcmlzb24gd2l0aCBgaGFzaF9hbGctXHUwMDNlZGlnZXN0X3NpemVgIGFuZCBwYXNzZWQgdG8gYG1lbWNweWAgYXMgYSBgc2l6ZV90YC4gVGhpcyBpcyBhIGNsYXNzaWMgaW50ZWdlciBvdmVyZmxvdyBsZWFkaW5nIHRvIGEgbGFyZ2UgbWVtb3J5IGNvcHksIGFuZCBtZW1vcnkgY29ycnVwdGlvbiwgd2hpY2ggaXMgc29tZXRoaW5nIEkgZGVhbCB3aXRoIG9mdGVuLlxuXG5UaGUgcGF0Y2ggaXRzZWxmIGlzIGEgc3RyYWlnaHRmb3J3YXJkIGZpeC4gSXQgcHJvbW90ZXMgYm90aCBgZHlucHRyX3N6YCBhbmQgYG91dF9kaWdlc3Rfc3pgIHRvIGB1NjRgIHRvIHByZXZlbnQgdGhlIG92ZXJmbG93LCBhbmQgaXQgYWRkcyBhbiBleHBsaWNpdCBjaGVjayB0aGF0IHJldHVybnMgYC1FT1ZFUkZMT1dgIGlmIHRoZSBjYWxjdWxhdGVkIGRpZ2VzdCBzaXplIGV4Y2VlZHMgdGhlIHN1cHBvcnRlZCBzaXplLiBTbWFydC5cblxuVGhpcyBpcyBhIHRleHRib29rIGNhc2UgcmlwZSBmb3IgZnV6emluZy4gVGhlIGtleSBzeW1ib2wgdG8gZm9jdXMgb24gaXMsIHdpdGhvdXQgYSBkb3VidCwgYGJwZl9nZXRfZnN2ZXJpdHlfZGlnZXN0YC4gSSdsbCBuZWVkIHRvIGNvbmZpZ3VyZSBteSBmdXp6ZXIgdG8gdGFyZ2V0IHRoYXQgZnVuY3Rpb24sIGtlZXBpbmcgYEZTX1ZFUklUWWAgYW5kIGBCUEZfU1lTQ0FMTGAgZW5hYmxlZC4gSSdsbCBuZWVkIHRvIGFsc28gY2hlY2sgaWYgYEZTX1ZFUklUWWAgaGFzIGFueSBvdGhlciBkZXBlbmRlbmNpZXMgdGhhdCBtaWdodCBuZWVkIHRvIGJlIGFjY291bnRlZCBmb3IsIGJ1dCB0aGlzIGxvb2tzIGxpa2UgYSBzb2xpZCBhdHRhY2sgdmVjdG9yLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MzYwLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDE1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMjA6MjI6NTMuNDI1MjYxNTA3WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NTgzOTU2NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRlNfVkVSSVRZXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL3Zlcml0eS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3Zlcml0eS9LY29uZmlnLTItXFxuZnMvdmVyaXR5L0tjb25maWc6Mzpjb25maWcgRlNfVkVSSVRZXFxuZnMvdmVyaXR5L0tjb25maWctNC1cXHRib29sIFxcXCJGUyBWZXJpdHkgKHJlYWQtb25seSBmaWxlLWJhc2VkIGF1dGhlbnRpY2l0eSBwcm90ZWN0aW9uKVxcXCJcXG4tLVxcbmZzL3Zlcml0eS9LY29uZmlnLTMzLVxcbmZzL3Zlcml0eS9LY29uZmlnOjM0OmNvbmZpZyBGU19WRVJJVFlfQlVJTFRJTl9TSUdOQVRVUkVTXFxuZnMvdmVyaXR5L0tjb25maWctMzUtXFx0Ym9vbCBcXFwiRlMgVmVyaXR5IGJ1aWx0aW4gc2lnbmF0dXJlIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDIwOjIyOjUzLjQ5MTEwNjY0M1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTU5MzYyNDQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBWZXJpdHkgRGVwZW5kZW5jaWVzKipcblxuQWxyaWdodCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBmb3IgYEZTX1ZFUklUWWAgd2l0aGluIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gTXkgaW5zdGluY3Qgc2F5cyB0byBzdGFydCB3aXRoIGBmcy92ZXJpdHkvS2NvbmZpZ2AuIFRoYXQncyB0aGUgZ28tdG8gbG9jYXRpb24gZm9yIG1vZHVsZS1zcGVjaWZpYyBLY29uZmlnIGVudHJpZXMsIGRlZmluaW5nIGRlcGVuZGVuY2llcyBhbmQgZGVmYXVsdHMuIEl0IHNob3VsZCBnaXZlIG1lIGEgY2xlYXIgcGljdHVyZSBvZiB3aGF0IG90aGVyIGtlcm5lbCBmZWF0dXJlcyBvciBtb2R1bGVzIG5lZWQgdG8gYmUgZW5hYmxlZCBiZWZvcmUgYEZTX1ZFUklUWWAgYmVjb21lcyBhdmFpbGFibGUuIEknbSBleHBlY3RpbmcgdG8gZmluZCBkZXBlbmRlbmNpZXMgb24gdGhpbmdzIGxpa2UgYmxvY2sgbGF5ZXIgZmVhdHVyZXMsIGhhc2hpbmcgYWxnb3JpdGhtcywgbWF5YmUgZXZlbiBzZWN1cml0eSBtb2R1bGVzIGlmIHZlcml0eSBob29rcyBpbnRvIHRob3NlIGFyZWFzLiBJJ20gYWxzbyBhbnRpY2lwYXRpbmcgdGhhdCBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiBgRlNfVkVSSVRZYCBpbnRyb2R1Y2VzIGFueSBjb25mbGljdHMgb3Igc3BlY2lhbCByZXF1aXJlbWVudHMgZm9yIHNwZWNpZmljIGZpbGVzeXN0ZW1zLiBUaGUgYEtjb25maWdgIGZpbGUgc2hvdWxkIGlsbHVtaW5hdGUgYWxsIG9mIHRoaXMuIEl04oCZcyB0aGUgdXN1YWwgcHJvY2VzcyB3aGVuIEknbSBhc3Nlc3NpbmcgdGhlIGJ1aWxkIHJlcXVpcmVtZW50cyBmb3IgYSBuZXcgZmlsZXN5c3RlbSBmZWF0dXJlLiBMZXQncyBnZXQgdG8gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg0NjksIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QyMDoyMjo1Ny4wNTA0NzIwMDFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAxMjUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL3Zlcml0eS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0XFxuICAgMzpcXHRjb25maWcgRlNfVkVSSVRZXFxuICAgNDpcXHRcXHRib29sIFxcXCJGUyBWZXJpdHkgKHJlYWQtb25seSBmaWxlLWJhc2VkIGF1dGhlbnRpY2l0eSBwcm90ZWN0aW9uKVxcXCJcXG4gICA1OlxcdFxcdCMgRmlsZXN5c3RlbXMgY2FjaGUgdGhlIE1lcmtsZSB0cmVlIGF0IGEgNjRLIGFsaWduZWQgb2Zmc2V0IGluIHRoZVxcbiAgIDY6XFx0XFx0IyBwYWdlY2FjaGUuICBUaGF0IGFwcHJvYWNoIGFzc3VtZXMgdGhlIHBhZ2Ugc2l6ZSBpcyBhdCBtb3N0IDY0Sy5cXG4gICA3OlxcdFxcdGRlcGVuZHMgb24gUEFHRV9TSElGVCBcXHUwMDNjPSAxNlxcbiAgIDg6XFx0XFx0c2VsZWN0IENSWVBUT19IQVNIX0lORk9cXG4gICA5OlxcdFxcdHNlbGVjdCBDUllQVE9fTElCX1NIQTI1NlxcbiAgMTA6XFx0XFx0c2VsZWN0IENSWVBUT19MSUJfU0hBNTEyXFxuICAxMTpcXHRcXHRoZWxwXFxuICAxMjpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgZnMtdmVyaXR5LiAgZnMtdmVyaXR5IGlzIHRoZSBkbS12ZXJpdHlcXG4gIDEzOlxcdFxcdCAgbWVjaGFuaXNtIGltcGxlbWVudGVkIGF0IHRoZSBmaWxlIGxldmVsLiAgT24gc3VwcG9ydGVkXFxuICAxNDpcXHRcXHQgIGZpbGVzeXN0ZW1zIChjdXJyZW50bHkgZXh0NCwgZjJmcywgYW5kIGJ0cmZzKSwgdXNlcnNwYWNlIGNhblxcbiAgMTU6XFx0XFx0ICB1c2UgYW4gaW9jdGwgdG8gZW5hYmxlIHZlcml0eSBmb3IgYSBmaWxlLCB3aGljaCBjYXVzZXMgdGhlXFxuICAxNjpcXHRcXHQgIGZpbGVzeXN0ZW0gdG8gYnVpbGQgYSBNZXJrbGUgdHJlZSBmb3IgdGhlIGZpbGUuICBUaGUgZmlsZXN5c3RlbVxcbiAgMTc6XFx0XFx0ICB3aWxsIHRoZW4gdHJhbnNwYXJlbnRseSB2ZXJpZnkgYW55IGRhdGEgcmVhZCBmcm9tIHRoZSBmaWxlXFxuICAxODpcXHRcXHQgIGFnYWluc3QgdGhlIE1lcmtsZSB0cmVlLiAgVGhlIGZpbGUgaXMgYWxzbyBtYWRlIHJlYWQtb25seS5cXG4gIDE5OlxcdFxcbiAgMjA6XFx0XFx0ICBUaGlzIHNlcnZlcyBhcyBhbiBpbnRlZ3JpdHkgY2hlY2ssIGJ1dCB0aGUgYXZhaWxhYmlsaXR5IG9mIHRoZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QyMDoyMjo1Ny4wNTA1NzU3M1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Mzc5NDk3ODg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gdGhlIHNlbGVjdGlvbiBvZiBjcnlwdG9ncmFwaGljIGNvbXBvbmVudHMgaGluZ2VzIG9uIHdoZXRoZXIgYFBBR0VfU0hJRlRgIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byAxNiwgd2hpY2gsIGluIHByYWN0aWNlLCBpcyBhbG1vc3QgYWx3YXlzIHRoZSBjYXNlLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCB0aGUgcHJpbWFyeSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBvZiBpbnRlcmVzdCBoZXJlIGFyZSBgRlNfVkVSSVRZYCBhbmQgYEJQRl9TWVNDQUxMYC5cblxuQnV0LCBob2xkIG9uIGEgc2Vjb25k4oCmIGBicGZfZ2V0X2ZzdmVyaXR5X2RpZ2VzdGAgaXMgY2FsbGVkICpmcm9tKiBCUEYgcHJvZ3JhbXM/IFRoaXMgaW1tZWRpYXRlbHkgcmFpc2VzIGEgcmVkIGZsYWcuIFdoYXQgYXJlIHRoZSBkZXBlbmRlbmNpZXM/IEkgbmVlZCB0byBrbm93IGlmIHRoZXJlIGFyZSBhZGRpdGlvbmFsIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzIHRvIGVuYWJsZSB0aGUgYXR0YWNobWVudCBvZiBCUEYgcHJvZ3JhbXMgdG8gTFNNIGhvb2tzLiBJJ20gc2VlaW5nIHRoYXQgdGhlIGNvbmRpdGlvbiBgcHJvZy1cdTAwM2V0eXBlICE9IEJQRl9QUk9HX1RZUEVfTFNNYCByZXN1bHRzIGluIGFuIGAtRUFDQ0VTYCBlcnJvciwgd2hpY2ggdGVsbHMgbWUgdGhlIGtlcm5lbCBpcyBibG9ja2luZyB0aGUgcHJvZ3JhbSBmcm9tIGJlaW5nIHJ1bi4gSXQncyBiZWNvbWluZyBjbGVhciB0aGF0IHdlIHByb2JhYmx5IGFsc28gbmVlZCB0byBlbmFibGUgYEJQRl9MU01gIHRvIGdldCBMU00gcHJvZ3JhbXMgcnVubmluZy4gUmlnaHQsIGxldCdzIGNvbmZpcm0gdGhlIGBCUEZfTFNNYCBjb25maWd1cmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MDg5LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMjA6MjM6MDEuNDMwMDc3MjY3WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTE1NjgyMzgyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCUEZfTFNNXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvS2NvbmZpZz05MD1zb3VyY2UgXFxcImtlcm5lbC9icGYvcHJlbG9hZC9LY29uZmlnXFxcIlxcbmtlcm5lbC9icGYvS2NvbmZpZy05MS1cXG5rZXJuZWwvYnBmL0tjb25maWc6OTI6Y29uZmlnIEJQRl9MU01cXG5rZXJuZWwvYnBmL0tjb25maWctOTMtXFx0Ym9vbCBcXFwiRW5hYmxlIEJQRiBMU00gSW5zdHJ1bWVudGF0aW9uXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QyMDoyMzowMy45NDU3NjQ3OTlaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTA2MDQ3NTI1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIGtlcm5lbCdzIEJQRiBMU00gY29uZmlndXJhdGlvbiwgdmlld2VkIHRocm91Z2ggdGhlIGxlbnMgb2YgbXkgZXhwZXJ0aXNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBCUEYgTFNNIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBga2VybmVsL2JwZi9LY29uZmlnYCBmaWxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIEJQRiBMU00gKExpbnV4IFNlY3VyaXR5IE1vZHVsZXMpIHN1cHBvcnQgaXMgY29uZmlndXJlZCB3aXRoaW4gdGhlIGtlcm5lbC4gVGhpcyBpcyBjcnVjaWFsIGZvciBtZTsgaXQncyB0aGUgZ2F0ZWtlZXBlciB0byB1bmRlcnN0YW5kaW5nIGhvdyBCUEYgcHJvZ3JhbXMgY2FuIGhvb2sgaW50byB0aGUgc2VjdXJpdHkgaW5mcmFzdHJ1Y3R1cmUsIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgKmhvdyogSSBtaWdodCBsZXZlcmFnZSB0aGF0IGZvciBteSBzcGVjaWZpYyBzZWN1cml0eSByZXNlYXJjaC9wcm9qZWN0LlxuXG5JJ20gc2Nhbm5pbmcgdGhlIGZpbGUgbm93LCBsb29raW5nIGZvciB0aGUgcmVsZXZhbnQgZGVmaW5pdGlvbnMuIEknbSBpbW1lZGlhdGVseSBmb2N1c2luZyBvbiB0aGUgZGVwZW5kZW5jaWVzIGFuZCB0aGUgZGVmYXVsdCBzZXR0aW5ncy4gV2hhdCBhcmUgdGhlIHByZXJlcXVpc2l0ZXM/IEFyZSB0aGVyZSBvdGhlciBrZXJuZWwgZmVhdHVyZXMgdGhhdCBuZWVkIHRvIGJlIGVuYWJsZWQgYmVmb3JlIEJQRiBMU00gYmVjb21lcyBhdmFpbGFibGU/IEkgbmVlZCB0byBrbm93IHRoZSBlbnRpcmUgYnVpbGQgZ3JhcGggZm9yIGVuYWJsaW5nIHRoZSBmZWF0dXJlLCBvZiBjb3Vyc2UuIEFyZSB0aGVyZSBhbnkgZGVmYXVsdCBvcHRpb25zIGVuYWJsZWQgb3IgZGlzYWJsZWQsIGFuZCB3aHk/IFRoaXMgd2lsbCBnaXZlIG1lIGFuIGluaXRpYWwgc2Vuc2Ugb2YgaG93IHdpZGVseSBhdmFpbGFibGUgYW5kIGVuYWJsZWQgdGhpcyBmZWF0dXJlIGlzIG91dC1vZi10aGUtYm94LCBvciB3aGV0aGVyIHRoZXJlIGFyZSBhbnkgcHJhY3RpY2FsIHJvYWRibG9ja3MgdG8gZGVwbG95aW5nIGl0IHdpdGhpbiBhIGNvbW1vbiBlbnZpcm9ubWVudCwgYXNzdW1pbmcgSSB3YW50IHRvLlxuXG5OZXh0LCBJJ2xsIGJlIHNjcnV0aW5pemluZyBhbnkgY29uZmlndXJhdGlvbiBvcHRpb25zLCBsb29raW5nIGZvciB0aG9zZSB0aGF0IGFmZmVjdCBob3cgQlBGIHByb2dyYW1zIGludGVyYWN0IHdpdGggdGhlIExTTSBmcmFtZXdvcmsuIEFyZSB0aGVyZSBrbm9icyBmb3IgY29udHJvbGxpbmcgdGhlIG1heGltdW0gbnVtYmVyIG9mIGhvb2tzPyBBbnkgc3BlY2lmaWMgc2VjdXJpdHkgcG9saWNpZXMgdGllZCB0byBCUEYgcHJvZ3JhbXM/IEFyZSB0aGVyZSBmaW5lLWdyYWluZWQgY29udHJvbHMgcmVsYXRlZCB0byBtZW1vcnkgYWxsb2NhdGlvbiwgb3IgdmVyaWZpY2F0aW9uIHN0ZXBzIGZvciB0aGUgcHJvZ3JhbSwgZm9yIGV4YW1wbGU/IFRoaXMgaXMgd2hlcmUgdGhlIGRldmlsIGlzIGluIHRoZSBkZXRhaWxzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRyYWRlLW9mZnMgdGhlIGtlcm5lbCBkZXZlbG9wZXJzIGhhdmUgbWFkZS4gSSB3aWxsIHN0YXJ0IGJ5IGNvbXBhcmluZyB0aGVzZSBvcHRpb25zIHdpdGggYW55IHNpbWlsYXIgZnVuY3Rpb25hbGl0eSBhdmFpbGFibGUgaW4gb2xkZXIgTFNNIGFyY2hpdGVjdHVyZXMgdG8gc2VlIHRoZSBldm9sdXRpb24gb2YgdGhlIGNvbmNlcHQuXG5cbkknbSBzcGVjaWZpY2FsbHkgbG9va2luZyBmb3IgYW55dGhpbmcgdGhhdCBtaWdodCBpbmZsdWVuY2UgcGVyZm9ybWFuY2UsIHNlY3VyaXR5LCBvciBzdGFiaWxpdHkuIEZvciBleGFtcGxlLCBob3cgZG9lcyB0aGUgc3lzdGVtIGhhbmRsZSBwb3RlbnRpYWxseSBtYWxpY2lvdXMgb3IgZXJyb25lb3VzIEJQRiBwcm9ncmFtcyB0aGF0IG1pZ2h0IGJlIGluamVjdGVkIGludG8gdGhlIHN5c3RlbT8gQXJlIHRoZXJlIHNhbml0eSBjaGVja3Mgb3IgcmVzb3VyY2UgbGltaXRzIHRoYXQgSSBjYW4gdHdlYWssIG9yIGFyZSB0aGUgZGVmYXVsdHMgc29saWQ/IFRoaXMgd2lsbCBzaGFwZSBob3cgY29tZm9ydGFibGUgSSBmZWVsIHJlbHlpbmcgb24gdGhpcyBmZWF0dXJlIGluIG15IG93biB3b3JrLlxuXG5GaW5hbGx5LCBJJ2xsIGJlIGxvb2tpbmcgZm9yIGFueSBoaW50cyBhYm91dCBmdXR1cmUgcGxhbnMgb3IgZGVwcmVjYXRpb24gd2FybmluZ3MuIEFueSBjb21tZW50cyBpbiB0aGUgZmlsZSBvciByZWxhdGVkIGRvY3VtZW50YXRpb24gdGhhdCBwcm92aWRlIGluc2lnaHRzIGludG8gb25nb2luZyBkZXZlbG9wbWVudCwgYW5kIHBvdGVudGlhbCBjaGFuZ2VzIGluIGhvdyBCUEYgTFNNIGZ1bmN0aW9ucywgYXJlIGltcG9ydGFudC4gVW5kZXJzdGFuZGluZyB0aGUga2VybmVsIGNvbW11bml0eSdzIGRpcmVjdGlvbiBpcyB2aXRhbCBmb3IgbG9uZy10ZXJtIHByb2plY3QgcGxhbm5pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk1NjgsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QyMDoyMzowOS4wMDYyNDM4ODNaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzI4MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDkyLFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDkyOlxcdGNvbmZpZyBCUEZfTFNNXFxuICA5MzpcXHRcXHRib29sIFxcXCJFbmFibGUgQlBGIExTTSBJbnN0cnVtZW50YXRpb25cXFwiXFxuICA5NDpcXHRcXHRkZXBlbmRzIG9uIEJQRl9FVkVOVFNcXG4gIDk1OlxcdFxcdGRlcGVuZHMgb24gQlBGX1NZU0NBTExcXG4gIDk2OlxcdFxcdGRlcGVuZHMgb24gU0VDVVJJVFlcXG4gIDk3OlxcdFxcdGRlcGVuZHMgb24gQlBGX0pJVFxcbiAgOTg6XFx0XFx0aGVscFxcbiAgOTk6XFx0XFx0ICBFbmFibGVzIGluc3RydW1lbnRhdGlvbiBvZiB0aGUgc2VjdXJpdHkgaG9va3Mgd2l0aCBCUEYgcHJvZ3JhbXMgZm9yXFxuIDEwMDpcXHRcXHQgIGltcGxlbWVudGluZyBkeW5hbWljIE1BQyBhbmQgQXVkaXQgUG9saWNpZXMuXFxuIDEwMTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMjA6MjM6MDkuMDA2MzIwMDk0WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk0OTIwMTg2MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBGUy1WRVJJVFkgQlBGIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCB3ZSdyZSBkZWZpbml0ZWx5IGRlYWxpbmcgd2l0aCBzb21ldGhpbmcgdGhhdCBpbnZvbHZlcyBgQlBGX0xTTWAsIGFuZCBvZiBjb3Vyc2UgYFNFQ1VSSVRZYC4gVGhlIHBhdGNoIHNlZW1zIHRvIGJlIHRvdWNoaW5nIEJQRi1yZWxhdGVkIGNvZGUsIHNvIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBgQlBGX0xTTWAgaXMgdGhlIHJpZ2h0IGNvbmZpZ3VyYXRpb24uIEFoLCB5ZXMsIGBCUEZfTFNNYCBkZXBlbmRzIG9uIGBCUEZfRVZFTlRTYCwgYEJQRl9TWVNDQUxMYCwgYFNFQ1VSSVRZYCwgYW5kIGBCUEZfSklUYC4gU28sIHllYWgsIHRoYXQgbWFrZXMgc2Vuc2U7IGVuYWJsaW5nIGBCUEZfTFNNYCBpcyBkZWZpbml0ZWx5IHRoZSBjb3JyZWN0IGNvbmZpZy4gSXQgYWxzbyBsb29rcyBsaWtlIGBGU19WRVJJVFlgIGl0c2VsZiBpcyBnb2luZyB0byBiZSBpbXBvcnRhbnQuXG5cbk5vdywgbGV0J3MgZGl2ZSBpbnRvIHRoZSBwYXRjaCBpdHNlbGYuIEknbSBzZWVpbmcgY2hhbmdlcyBmb2N1c2luZyBvbiB0eXBlIHVwZ3JhZGVzIHRvIGB1NjRgLiBMb29raW5nIGNsb3NlbHksIGl0IGxvb2tzIGxpa2UgdGhlcmUncyBiZWVuIGEgY2hhbmdlIGluIGhvdyBgZHlucHRyX3N6YCBpcyBoYW5kbGVkLiBJdCBzZWVtcyB0aGUgb3JpZ2luYWwgY29kZSBoYWQgYSBwb3RlbnRpYWwgZm9yIGFuIGludGVnZXIgb3ZlcmZsb3cgb3Igb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzLiBUaGUgbmV3IGNvZGUgZG9lcyBzaXplIGNoZWNrcywgd2hpY2ggaXMgZ29vZC4gVGhlIHBhdGNoIGlzIGRlZmluaXRlbHkgcHJldmVudGluZyBhIHZ1bG5lcmFiaWxpdHkgcmVsYXRlZCB0byB0aGUgYGJwZl9nZXRfZnN2ZXJpdHlfZGlnZXN0YCBmdW5jdGlvbi5cblxuQWxyaWdodCwgY2hlY2tpbmcgdGhyb3VnaCB0aGUgcGF0Y2gsIGFuZCBpdCBsb29rcyBsaWtlIHRoaXMgaXMgdGhlIG9ubHkgZnVuY3Rpb24gbW9kaWZpZWQuIElzIGl0IHJlYWNoYWJsZT8gWWVzLCBiZWNhdXNlIGl0J3MgYSBrZnVuYyB0aGF0IGdldHMgY2FsbGVkIHRocm91Z2ggdGhlIEJQRiBzeXNjYWxsIHdoZW4gYW4gTFNNIEJQRiBwcm9ncmFtIG9mIGEgc3BlY2lmaWMgdHlwZSBpcyBjYWxsZWQuXG5cblNvLCB0byByZWNhcCwgSSBuZWVkIGBGU19WRVJJVFlgLCBgQlBGX1NZU0NBTExgLCBhbmQgYEJQRl9MU01gIHRvIG1ha2Ugc3VyZSBJIGFtIGluIGEgZ29vZCB0ZXN0aW5nIGNvbmZpZy5cblxuTm93IEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBzY29wZSwgc28gSSdsbCBjaGVjayBpZiBgYnBmX2dldF9mc3Zlcml0eV9kaWdlc3RgIGlzIGEgc3RhdGljIG9yIGlubGluZS4gTm9wZSwgaXQncyBub3QsIGl0J3MgYSBrZnVuYywgd2hpY2ggbWVhbnMgaXQncyBleHBvcnRlZCB0byBCUEYuXG5cbkJhc2ljYWxseSwgdGhpcyBwYXRjaCBpcyBmaXhpbmcgYSBzZWN1cml0eSBpc3N1ZSBpbiBgYnBmX2dldF9mc3Zlcml0eV9kaWdlc3RgIGJ5IGhhbmRsaW5nIGBkeW5wdHJfc3pgIHByb3Blcmx5LiBJdCdzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGl0J3MgcmVhY2hhYmxlIHRocm91Z2ggQlBGLCBzbywgYWJzb2x1dGVseSwgdGhpcyBpcyBzb21ldGhpbmcgdGhhdCBuZWVkcyBmdXp6aW5nLlxuXG5Ob3csIGEgcXVpY2sgY2hlY2sgb24gYEZTX1ZFUklUWWAgYW5kIHN1cHBvcnRlZCBmaWxlc3lzdGVtcywgbGV0J3Mgc2VlLCBpdCB3b3JrcyBvbiBgZXh0NGAsIGBmMmZzYCwgYGJ0cmZzYC4gQW5kIFN5emthbGxlciBhbHJlYWR5IHRlc3RzIHRob3NlLCBzbyBJIHNob3VsZCBiZSBnb29kIHRvIGdvIGJ5IGp1c3QgZW5hYmxpbmcgYEZTX1ZFUklUWWAuIEknbSBnb2luZyB0byBzZXQgdGhlIHJlc3VsdHMgYW5kIG1vdmUgb24gdG8gdGhlIG5leHQgb25lLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDI1NywiT3V0cHV0VG9rZW5zIjoxMzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3ODgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QyMDoyMzoxOC40OTgzNDA3MDFaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzQxNTE2NzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkZTX1ZFUklUWVwiLFxuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkJQRl9MU01cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfZ2V0X2ZzdmVyaXR5X2RpZ2VzdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIGludGVnZXIgb3ZlcmZsb3cgYW5kIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3MgaW4gdGhlIGBicGZfZ2V0X2ZzdmVyaXR5X2RpZ2VzdGAgQlBGIGtmdW5jIGJ5IGNoYW5naW5nIHNpemUgdmFyaWFibGVzIHRvIGB1NjRgIGFuZCBhZGRpbmcgYSBwcm9wZXIgYm91bmRzIGNoZWNrLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSByZWFjaGFibGUgQlBGIEFQSSwgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRlNfVkVSSVRZXCIsXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiQlBGX0xTTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9nZXRfZnN2ZXJpdHlfZGlnZXN0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gaW50ZWdlciBvdmVyZmxvdyBhbmQgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2VzcyBpbiB0aGUgYGJwZl9nZXRfZnN2ZXJpdHlfZGlnZXN0YCBCUEYga2Z1bmMgYnkgY2hhbmdpbmcgc2l6ZSB2YXJpYWJsZXMgdG8gYHU2NGAgYW5kIGFkZGluZyBhIHByb3BlciBib3VuZHMgY2hlY2suIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBhIHJlYWNoYWJsZSBCUEYgQVBJLCBtYWtpbmcgaXQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowfv8jw[1] Phase: Succeeded StartedAt: 2026-08-03 20:23:30 +0000 UTC FinishedAt: 2026-08-03 20:23:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfv8jw[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-03 20:23:30 +0000 UTC FinishedAt: 2026-08-03 20:23:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfv8jw[2] Phase: Succeeded StartedAt: 2026-08-03 20:23:30 +0000 UTC FinishedAt: 2026-08-03 22:06:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfv8jw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","BPF_SYSCALL","BPF_LSM"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_get_fsverity_digest"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","BPF_SYSCALL","BPF_LSM"],"series_id":"5ce54779-e8d8-4437-8b8e-0928a69752e9","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-03 20:23:30 +0000 UTC FinishedAt: 2026-08-03 22:06:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","BPF_SYSCALL","BPF_LSM"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_get_fsverity_digest"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","BPF_SYSCALL","BPF_LSM"],"series_id":"5ce54779-e8d8-4437-8b8e-0928a69752e9","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowfv8jw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","BPF_SYSCALL","BPF_LSM"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_get_fsverity_digest"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","BPF_SYSCALL","BPF_LSM"],"series_id":"5ce54779-e8d8-4437-8b8e-0928a69752e9","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-03 20:23:30 +0000 UTC FinishedAt: 2026-08-03 20:23:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfv8jw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","BPF_SYSCALL","BPF_LSM"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_get_fsverity_digest"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","BPF_SYSCALL","BPF_LSM"],"series_id":"5ce54779-e8d8-4437-8b8e-0928a69752e9","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-03 20:23:30 +0000 UTC FinishedAt: 2026-08-03 20:23:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","BPF_SYSCALL","BPF_LSM"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowfv8jw/series-workflowfv8jw-convert-artifact-3041330447/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfv8jw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","BPF_SYSCALL","BPF_LSM"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_get_fsverity_digest"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","BPF_SYSCALL","BPF_LSM"],"series_id":"5ce54779-e8d8-4437-8b8e-0928a69752e9","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-03 20:23:42 +0000 UTC FinishedAt: 2026-08-03 20:44:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfv8jw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","BPF_SYSCALL","BPF_LSM"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_get_fsverity_digest"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","BPF_SYSCALL","BPF_LSM"],"series_id":"5ce54779-e8d8-4437-8b8e-0928a69752e9","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-03 20:23:42 +0000 UTC FinishedAt: 2026-08-03 20:44:20 +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:*9ba75eaf-707a-475e-bb5e-dc52d31f7d10,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-workflowfv8jw/series-workflowfv8jw-convert-artifact-3041330447/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": "c42c48c6-e4d1-44e7-b42a-87c44ed464cb", "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-workflowfv8jw/series-workflowfv8jw-build-action-1685385813/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfv8jw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","BPF_SYSCALL","BPF_LSM"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_get_fsverity_digest"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","BPF_SYSCALL","BPF_LSM"],"series_id":"5ce54779-e8d8-4437-8b8e-0928a69752e9","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-03 20:23:42 +0000 UTC FinishedAt: 2026-08-03 20:44:09 +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:*9ba75eaf-707a-475e-bb5e-dc52d31f7d10,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-workflowfv8jw/series-workflowfv8jw-convert-artifact-3041330447/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": "c42c48c6-e4d1-44e7-b42a-87c44ed464cb", "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-workflowfv8jw/series-workflowfv8jw-build-action-1685385813/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfv8jw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","BPF_SYSCALL","BPF_LSM"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_get_fsverity_digest"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","BPF_SYSCALL","BPF_LSM"],"series_id":"5ce54779-e8d8-4437-8b8e-0928a69752e9","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-03 20:44:20 +0000 UTC FinishedAt: 2026-08-03 20:44:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfv8jw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","BPF_SYSCALL","BPF_LSM"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_get_fsverity_digest"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","BPF_SYSCALL","BPF_LSM"],"series_id":"5ce54779-e8d8-4437-8b8e-0928a69752e9","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-03 20:44:20 +0000 UTC FinishedAt: 2026-08-03 20:44:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfv8jw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","BPF_SYSCALL","BPF_LSM"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_get_fsverity_digest"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","BPF_SYSCALL","BPF_LSM"],"series_id":"5ce54779-e8d8-4437-8b8e-0928a69752e9","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-03 20:44:20 +0000 UTC FinishedAt: 2026-08-03 20:44:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfv8jw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","BPF_SYSCALL","BPF_LSM"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_get_fsverity_digest"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","BPF_SYSCALL","BPF_LSM"],"series_id":"5ce54779-e8d8-4437-8b8e-0928a69752e9","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-03 20:44:20 +0000 UTC FinishedAt: 2026-08-03 20:44:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","BPF_SYSCALL","BPF_LSM"],"series_id":"5ce54779-e8d8-4437-8b8e-0928a69752e9","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowfv8jw/series-workflowfv8jw-convert-artifact-346235742/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfv8jw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","BPF_SYSCALL","BPF_LSM"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_get_fsverity_digest"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","BPF_SYSCALL","BPF_LSM"],"series_id":"5ce54779-e8d8-4437-8b8e-0928a69752e9","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-03 20:44:43 +0000 UTC FinishedAt: 2026-08-03 20:46:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfv8jw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","BPF_SYSCALL","BPF_LSM"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_get_fsverity_digest"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","BPF_SYSCALL","BPF_LSM"],"series_id":"5ce54779-e8d8-4437-8b8e-0928a69752e9","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-03 20:44:43 +0000 UTC FinishedAt: 2026-08-03 20:46:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*c42c48c6-e4d1-44e7-b42a-87c44ed464cb,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-workflowfv8jw/series-workflowfv8jw-build-action-1685385813/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-workflowfv8jw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","BPF_SYSCALL","BPF_LSM"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_get_fsverity_digest"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","BPF_SYSCALL","BPF_LSM"],"series_id":"5ce54779-e8d8-4437-8b8e-0928a69752e9","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-03 20:46:51 +0000 UTC FinishedAt: 2026-08-03 20:46:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfv8jw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","BPF_SYSCALL","BPF_LSM"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_get_fsverity_digest"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","BPF_SYSCALL","BPF_LSM"],"series_id":"5ce54779-e8d8-4437-8b8e-0928a69752e9","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-03 20:46:51 +0000 UTC FinishedAt: 2026-08-03 20:46:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfv8jw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","BPF_SYSCALL","BPF_LSM"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_get_fsverity_digest"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","BPF_SYSCALL","BPF_LSM"],"series_id":"5ce54779-e8d8-4437-8b8e-0928a69752e9","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-03 20:46:51 +0000 UTC FinishedAt: 2026-08-03 21:09:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfv8jw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","BPF_SYSCALL","BPF_LSM"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_get_fsverity_digest"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","BPF_SYSCALL","BPF_LSM"],"series_id":"5ce54779-e8d8-4437-8b8e-0928a69752e9","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-03 20:46:51 +0000 UTC FinishedAt: 2026-08-03 21:09: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:*9ba75eaf-707a-475e-bb5e-dc52d31f7d10,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-workflowfv8jw/series-workflowfv8jw-convert-artifact-346235742/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": "eaffe225-881f-4e29-b183-e77c2ae6736e", "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-workflowfv8jw/series-workflowfv8jw-build-action-4152650802/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfv8jw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","BPF_SYSCALL","BPF_LSM"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_get_fsverity_digest"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","BPF_SYSCALL","BPF_LSM"],"series_id":"5ce54779-e8d8-4437-8b8e-0928a69752e9","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-03 20:46:51 +0000 UTC FinishedAt: 2026-08-03 21:08: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:*9ba75eaf-707a-475e-bb5e-dc52d31f7d10,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-workflowfv8jw/series-workflowfv8jw-convert-artifact-346235742/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": "eaffe225-881f-4e29-b183-e77c2ae6736e", "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-workflowfv8jw/series-workflowfv8jw-build-action-4152650802/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfv8jw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","BPF_SYSCALL","BPF_LSM"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_get_fsverity_digest"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","BPF_SYSCALL","BPF_LSM"],"series_id":"5ce54779-e8d8-4437-8b8e-0928a69752e9","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-03 21:09:00 +0000 UTC FinishedAt: 2026-08-03 21:09:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfv8jw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","BPF_SYSCALL","BPF_LSM"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_get_fsverity_digest"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","BPF_SYSCALL","BPF_LSM"],"series_id":"5ce54779-e8d8-4437-8b8e-0928a69752e9","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-03 21:09:00 +0000 UTC FinishedAt: 2026-08-03 21:09:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfv8jw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","BPF_SYSCALL","BPF_LSM"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_get_fsverity_digest"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","BPF_SYSCALL","BPF_LSM"],"series_id":"5ce54779-e8d8-4437-8b8e-0928a69752e9","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-03 21:09:00 +0000 UTC FinishedAt: 2026-08-03 21:11:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfv8jw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","BPF_SYSCALL","BPF_LSM"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_get_fsverity_digest"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","BPF_SYSCALL","BPF_LSM"],"series_id":"5ce54779-e8d8-4437-8b8e-0928a69752e9","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-03 21:09:00 +0000 UTC FinishedAt: 2026-08-03 21:10:54 +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:*eaffe225-881f-4e29-b183-e77c2ae6736e,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-workflowfv8jw/series-workflowfv8jw-build-action-4152650802/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-workflowfv8jw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","BPF_SYSCALL","BPF_LSM"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_get_fsverity_digest"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","BPF_SYSCALL","BPF_LSM"],"series_id":"5ce54779-e8d8-4437-8b8e-0928a69752e9","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-03 21:11:04 +0000 UTC FinishedAt: 2026-08-03 22:06:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfv8jw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","BPF_SYSCALL","BPF_LSM"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_get_fsverity_digest"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","BPF_SYSCALL","BPF_LSM"],"series_id":"5ce54779-e8d8-4437-8b8e-0928a69752e9","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-03 21:11:04 +0000 UTC FinishedAt: 2026-08-03 22:06:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_get_fsverity_digest"],"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:*c42c48c6-e4d1-44e7-b42a-87c44ed464cb,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*eaffe225-881f-4e29-b183-e77c2ae6736e,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-workflowfv8jw/series-workflowfv8jw-build-action-1685385813/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-workflowfv8jw/series-workflowfv8jw-build-action-4152650802/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowfv8jw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","BPF_SYSCALL","BPF_LSM"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_get_fsverity_digest"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","BPF_SYSCALL","BPF_LSM"],"series_id":"5ce54779-e8d8-4437-8b8e-0928a69752e9","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-03 21:11:04 +0000 UTC FinishedAt: 2026-08-03 21:11:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfv8jw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","BPF_SYSCALL","BPF_LSM"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_get_fsverity_digest"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","BPF_SYSCALL","BPF_LSM"],"series_id":"5ce54779-e8d8-4437-8b8e-0928a69752e9","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-03 21:11:04 +0000 UTC FinishedAt: 2026-08-03 21:11:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_get_fsverity_digest"],"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-workflowfv8jw/series-workflowfv8jw-convert-artifact-1566386019/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfv8jw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","BPF_SYSCALL","BPF_LSM"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_get_fsverity_digest"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","BPF_SYSCALL","BPF_LSM"],"series_id":"5ce54779-e8d8-4437-8b8e-0928a69752e9","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-03 21:11:04 +0000 UTC FinishedAt: 2026-08-03 21:11:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfv8jw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","BPF_SYSCALL","BPF_LSM"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_get_fsverity_digest"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","BPF_SYSCALL","BPF_LSM"],"series_id":"5ce54779-e8d8-4437-8b8e-0928a69752e9","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-03 21:11:04 +0000 UTC FinishedAt: 2026-08-03 21:11:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfv8jw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","BPF_SYSCALL","BPF_LSM"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_get_fsverity_digest"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","BPF_SYSCALL","BPF_LSM"],"series_id":"5ce54779-e8d8-4437-8b8e-0928a69752e9","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-03 21:11:04 +0000 UTC FinishedAt: 2026-08-03 21:11:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfv8jw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","BPF_SYSCALL","BPF_LSM"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_get_fsverity_digest"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","BPF_SYSCALL","BPF_LSM"],"series_id":"5ce54779-e8d8-4437-8b8e-0928a69752e9","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-03 21:11:14 +0000 UTC FinishedAt: 2026-08-03 22:06:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfv8jw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","BPF_SYSCALL","BPF_LSM"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_get_fsverity_digest"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e5fd3f514e27db1f05fbd72ba615d74941e23c51","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","BPF_SYSCALL","BPF_LSM"],"series_id":"5ce54779-e8d8-4437-8b8e-0928a69752e9","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-03 21:11:14 +0000 UTC FinishedAt: 2026-08-03 22:06:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*c42c48c6-e4d1-44e7-b42a-87c44ed464cb,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*eaffe225-881f-4e29-b183-e77c2ae6736e,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-workflowfv8jw/series-workflowfv8jw-build-action-1685385813/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-workflowfv8jw/series-workflowfv8jw-build-action-4152650802/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-workflowfv8jw/series-workflowfv8jw-convert-artifact-1566386019/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,}