Name: series-workflowxt7hg Phase: Succeeded StartedAt: 2026-07-25 12:47:49 +0000 UTC FinishedAt: 2026-07-25 17:47:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxt7hg[0] Phase: Succeeded StartedAt: 2026-07-25 12:47:49 +0000 UTC FinishedAt: 2026-07-25 13:21:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxt7hg[0].run-triage Phase: Succeeded StartedAt: 2026-07-25 12:47:49 +0000 UTC FinishedAt: 2026-07-25 13:21:37 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "04026c998c24ac47eb76886b9790c5710b603eb4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TTY" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "04026c998c24ac47eb76886b9790c5710b603eb4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TTY" ], "series_id": "538f5feb-1fdc-4792-be28-37bb8d2e4927" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "tty_set_ldisc", "tty_ldisc_ref_wait", "tty_hangup", "tty_vhangup" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDEzOjIwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RUWSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3R0eV9zZXRfbGRpc2MmIzM0OywKICAgICYjMzQ7dHR5X2xkaXNjX3JlZl93YWl0JiMzNDssCiAgICAmIzM0O3R0eV9oYW5ndXAmIzM0OywKICAgICYjMzQ7dHR5X3ZoYW5ndXAmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBUVFkgbGluZSBkaXNjaXBsaW5lIHJlZmVyZW5jZSBjb3VudGluZyBhbmQgdHJhbnNpdGlvbiBsb2dpYyAodHR5X2xkaXNjX3JlZl93YWl0LCB0dHlfc2V0X2xkaXNjLCBfX3R0eV9oYW5ndXApLiBUaGVzZSBmdW5jdGlvbnMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgVFRZIGlvY3RscyAoZS5nLiwgVElPQ1NFVEQsIFRJT0NWSEFOR1VQKSwgcmVhZCwgd3JpdGUsIGFuZCBwb2xsIG9wZXJhdGlvbnMuIFRoZSBjaGFuZ2VzIGludm9sdmUgbG9jayBkcm9wcGluZyBhbmQgd2FpdCBxdWV1ZSB3YWtldXBzLCB3aGljaCBhcmUgcHJvbmUgdG8gcmFjZSBjb25kaXRpb25zIGFuZCBkZWFkbG9ja3MsIG1ha2luZyB0aGVtIGhpZ2hseSBzdWl0YWJsZSBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxMzoyMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGFjNTgwZjQyMGJiNjIxYTE1NGU0YWM4MzNkNWI3ZjM2MGFiMzFmNzBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEp1bCAyNSAxMzoyMDowNyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS90dHlfaW8uYyBiL2RyaXZlcnMvdHR5L3R0eV9pby5jXG5pbmRleCA2YjI4M2ZkMDNmZjgyNC4uZTJmODJlODBmMzk3ZTQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3R0eS90dHlfaW8uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy90dHkvdHR5X2lvLmNcbkBAIC02NDksNiAmIzQzOzY0OSwxMyBAQCBzdGF0aWMgdm9pZCBfX3R0eV9oYW5ndXAoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgaW50IGV4aXRfc2Vzc2lvbilcbiBcdCAqL1xuIFx0c2V0X2JpdChUVFlfSFVQUEVELCBcdTAwMjZ0dHktXHUwMDNlZmxhZ3MpO1xuIFx0Y2xlYXJfYml0KFRUWV9IVVBQSU5HLCBcdTAwMjZ0dHktXHUwMDNlZmxhZ3MpO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFdha2UgdXAgcmVhZGVycyBibG9ja2VkIGluIHR0eV9sZGlzY19yZWZfd2FpdCgpIHRoYXQgbWF5IGhhdmVcbiYjNDM7XHQgKiBzZWVuIGxkaXNjID09IE5VTEwgYnV0IG5vdCB5ZXQgVFRZX0hVUFBFRC5cbiYjNDM7XHQgKi9cbiYjNDM7XHR3YWtlX3VwKFx1MDAyNnR0eS1cdTAwM2VyZWFkX3dhaXQpO1xuJiM0MztcbiBcdHR0eV91bmxvY2sodHR5KTtcbiBcbiBcdGlmIChmKVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L3R0eV9sZGlzYy5jIGIvZHJpdmVycy90dHkvdHR5X2xkaXNjLmNcbmluZGV4IDI3ZmU4MjM2ZjY2MjMwLi42ZWM5M2U2Yjg0OTg4ZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdHR5L3R0eV9sZGlzYy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3R0eS90dHlfbGRpc2MuY1xuQEAgLTI0Miw2ICYjNDM7MjQyLDE2IEBAIHN0cnVjdCB0dHlfbGRpc2MgKnR0eV9sZGlzY19yZWZfd2FpdChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KVxuIFxuIFx0bGRzZW1fZG93bl9yZWFkKFx1MDAyNnR0eS1cdTAwM2VsZGlzY19zZW0sIE1BWF9TQ0hFRFVMRV9USU1FT1VUKTtcbiBcdGxkID0gdHR5LVx1MDAzZWxkaXNjO1xuJiM0MztcdHdoaWxlICghbGQgXHUwMDI2XHUwMDI2ICF0ZXN0X2JpdChUVFlfSFVQUEVELCBcdTAwMjZ0dHktXHUwMDNlZmxhZ3MpKSB7XG4mIzQzO1x0XHRsZHNlbV91cF9yZWFkKFx1MDAyNnR0eS1cdTAwM2VsZGlzY19zZW0pO1xuJiM0MztcbiYjNDM7XHRcdC8qIGxkaXNjIG1heSBiZSBOVUxMIGR1cmluZyBhIGRpc2NpcGxpbmUgc3dpdGNoOyB3YWl0IGFuZCByZXRyeSAqL1xuJiM0MztcdFx0d2FpdF9ldmVudCh0dHktXHUwMDNlcmVhZF93YWl0LFxuJiM0MztcdFx0XHQgICBSRUFEX09OQ0UodHR5LVx1MDAzZWxkaXNjKSAhPSBOVUxMIHx8XG4mIzQzO1x0XHRcdCAgIHRlc3RfYml0KFRUWV9IVVBQRUQsIFx1MDAyNnR0eS1cdTAwM2VmbGFncykpO1xuJiM0MztcdFx0bGRzZW1fZG93bl9yZWFkKFx1MDAyNnR0eS1cdTAwM2VsZGlzY19zZW0sIE1BWF9TQ0hFRFVMRV9USU1FT1VUKTtcbiYjNDM7XHRcdGxkID0gdHR5LVx1MDAzZWxkaXNjO1xuJiM0MztcdH1cbiBcdGlmICghbGQpXG4gXHRcdGxkc2VtX3VwX3JlYWQoXHUwMDI2dHR5LVx1MDAzZWxkaXNjX3NlbSk7XG4gXHRyZXR1cm4gbGQ7XG5AQCAtNTU2LDE1ICYjNDM7NTY2LDI4IEBAIGludCB0dHlfc2V0X2xkaXNjKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGludCBkaXNjKVxuIFx0LyogU2h1dGRvd24gdGhlIG9sZCBkaXNjaXBsaW5lLiAqL1xuIFx0dHR5X2xkaXNjX2Nsb3NlKHR0eSwgb2xkX2xkaXNjKTtcbiBcbi1cdC8qIE5vdyBzZXQgdXAgdGhlIG5ldyBsaW5lIGRpc2NpcGxpbmUuICovXG4tXHR0dHktXHUwMDNlbGRpc2MgPSBuZXdfbGRpc2M7XG4mIzQzO1x0LyogQ2xlYXIgdHR5LVx1MDAzZWxkaXNjIHNvIGNvbmN1cnJlbnQgcmVhZGVycyBiYWNrIG9mZiBkdXJpbmcgdHJhbnNpdGlvbiAqL1xuJiM0MztcdHR0eS1cdTAwM2VsZGlzYyA9IE5VTEw7XG4gXHR0dHlfc2V0X3Rlcm1pb3NfbGRpc2ModHR5LCBkaXNjKTtcbiYjNDM7XHR0dHlfbGRpc2NfdW5sb2NrKHR0eSk7XG4gXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBPcGVuIHRoZSBuZXcgZGlzY2lwbGluZSBvdXRzaWRlIGxkaXNjX3NlbS4gVGhlIGxkaXNjIC5vcGVuKClcbiYjNDM7XHQgKiBtYXkgYWNxdWlyZSBsb2NrcyAoZS5nLiwgcnRubF9tdXRleCkgdGhhdCB3b3VsZCBjcmVhdGUgY2lyY3VsYXJcbiYjNDM7XHQgKiBkZXBlbmRlbmNpZXMgaWYgdGFrZW4gdW5kZXIgbGRpc2Nfc2VtLiB0dHlfbG9jayBpcyBzdGlsbCBoZWxkLFxuJiM0MztcdCAqIHByZXZlbnRpbmcgY29uY3VycmVudCBsZGlzYyBjaGFuZ2VzIGFuZCBoYW5ndXAuXG4mIzQzO1x0ICovXG4gXHRyZXR2YWwgPSB0dHlfbGRpc2Nfb3Blbih0dHksIG5ld19sZGlzYyk7XG4mIzQzO1xuJiM0MztcdHR0eV9sZGlzY19sb2NrKHR0eSwgTUFYX1NDSEVEVUxFX1RJTUVPVVQpO1xuJiM0MztcbiBcdGlmIChyZXR2YWwgXHUwMDNjIDApIHtcbiBcdFx0LyogQmFjayB0byB0aGUgb2xkIG9uZSBvciBOX1RUWSBpZiB3ZSBjYW4mIzM5O3QgKi9cbiBcdFx0dHR5X2xkaXNjX3B1dChuZXdfbGRpc2MpO1xuIFx0XHR0dHlfbGRpc2NfcmVzdG9yZSh0dHksIG9sZF9sZGlzYyk7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdC8qIFN1Y2Nlc3MgLSBpbnN0YWxsIG5ldyBsZGlzYyAqL1xuJiM0MztcdFx0dHR5LVx1MDAzZWxkaXNjID0gbmV3X2xkaXNjO1xuIFx0fVxuIFxuIFx0aWYgKHR0eS1cdTAwM2VsZGlzYy1cdTAwM2VvcHMtXHUwMDNlbnVtICE9IG9sZF9sZGlzYy1cdTAwM2VvcHMtXHUwMDNlbnVtIFx1MDAyNlx1MDAyNiB0dHktXHUwMDNlb3BzLVx1MDAzZXNldF9sZGlzYykge1xuQEAgLTU4NCw2ICYjNDM7NjA3LDkgQEAgaW50IHR0eV9zZXRfbGRpc2Moc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgaW50IGRpc2MpXG4gb3V0OlxuIFx0dHR5X2xkaXNjX3VubG9jayh0dHkpO1xuIFxuJiM0MztcdC8qIFdha2UgdXAgcmVhZGVycyB3YWl0aW5nIGZvciB0aGUgbGRpc2MgdHJhbnNpdGlvbiB0byBjb21wbGV0ZSAqL1xuJiM0MztcdHdha2VfdXAoXHUwMDI2dHR5LVx1MDAzZXJlYWRfd2FpdCk7XG4mIzQzO1xuIFx0LypcbiBcdCAqIFJlc3RhcnQgdGhlIHdvcmsgcXVldWUgaW4gY2FzZSBubyBjaGFyYWN0ZXJzIGtpY2sgaXQgb2ZmLiBTYWZlIGlmXG4gXHQgKiBhbHJlYWR5IHJ1bm5pbmdcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxMzoyMDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VFRZJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dHR5X3NldF9sZGlzYyYjMzQ7LAogICAgJiMzNDt0dHlfbGRpc2NfcmVmX3dhaXQmIzM0OywKICAgICYjMzQ7dHR5X2hhbmd1cCYjMzQ7LAogICAgJiMzNDt0dHlfdmhhbmd1cCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIFRUWSBsaW5lIGRpc2NpcGxpbmUgcmVmZXJlbmNlIGNvdW50aW5nIGFuZCB0cmFuc2l0aW9uIGxvZ2ljICh0dHlfbGRpc2NfcmVmX3dhaXQsIHR0eV9zZXRfbGRpc2MsIF9fdHR5X2hhbmd1cCkuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBUVFkgaW9jdGxzIChlLmcuLCBUSU9DU0VURCwgVElPQ1ZIQU5HVVApLCByZWFkLCB3cml0ZSwgYW5kIHBvbGwgb3BlcmF0aW9ucy4gVGhlIGNoYW5nZXMgaW52b2x2ZSBsb2NrIGRyb3BwaW5nIGFuZCB3YWl0IHF1ZXVlIHdha2V1cHMsIHdoaWNoIGFyZSBwcm9uZSB0byByYWNlIGNvbmRpdGlvbnMgYW5kIGRlYWRsb2NrcywgbWFraW5nIHRoZW0gaGlnaGx5IHN1aXRhYmxlIGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYWM1ODBmNDIwYmI2MjFhMTU0ZTRhYzgzM2Q1YjdmMzYwYWIzMWY3MApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgSnVsIDI1IDEzOjIwOjA3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvdHR5X2lvLmMgYi9kcml2ZXJzL3R0eS90dHlfaW8uYwppbmRleCA2YjI4M2ZkMDNmZjgyNC4uZTJmODJlODBmMzk3ZTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L3R0eV9pby5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdHR5L3R0eV9pby5jCkBAIC02NDksNiAmIzQzOzY0OSwxMyBAQCBzdGF0aWMgdm9pZCBfX3R0eV9oYW5ndXAoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgaW50IGV4aXRfc2Vzc2lvbikKIAkgKi8KIAlzZXRfYml0KFRUWV9IVVBQRUQsICZhbXA7dHR5LSZndDtmbGFncyk7CiAJY2xlYXJfYml0KFRUWV9IVVBQSU5HLCAmYW1wO3R0eS0mZ3Q7ZmxhZ3MpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBXYWtlIHVwIHJlYWRlcnMgYmxvY2tlZCBpbiB0dHlfbGRpc2NfcmVmX3dhaXQoKSB0aGF0IG1heSBoYXZlCiYjNDM7CSAqIHNlZW4gbGRpc2MgPT0gTlVMTCBidXQgbm90IHlldCBUVFlfSFVQUEVELgomIzQzOwkgKi8KJiM0MzsJd2FrZV91cCgmYW1wO3R0eS0mZ3Q7cmVhZF93YWl0KTsKJiM0MzsKIAl0dHlfdW5sb2NrKHR0eSk7CiAKIAlpZiAoZikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L3R0eV9sZGlzYy5jIGIvZHJpdmVycy90dHkvdHR5X2xkaXNjLmMKaW5kZXggMjdmZTgyMzZmNjYyMzAuLjZlYzkzZTZiODQ5ODhkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3R0eS90dHlfbGRpc2MuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3R0eS90dHlfbGRpc2MuYwpAQCAtMjQyLDYgJiM0MzsyNDIsMTYgQEAgc3RydWN0IHR0eV9sZGlzYyAqdHR5X2xkaXNjX3JlZl93YWl0KHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCiAKIAlsZHNlbV9kb3duX3JlYWQoJmFtcDt0dHktJmd0O2xkaXNjX3NlbSwgTUFYX1NDSEVEVUxFX1RJTUVPVVQpOwogCWxkID0gdHR5LSZndDtsZGlzYzsKJiM0MzsJd2hpbGUgKCFsZCAmYW1wOyZhbXA7ICF0ZXN0X2JpdChUVFlfSFVQUEVELCAmYW1wO3R0eS0mZ3Q7ZmxhZ3MpKSB7CiYjNDM7CQlsZHNlbV91cF9yZWFkKCZhbXA7dHR5LSZndDtsZGlzY19zZW0pOwomIzQzOwomIzQzOwkJLyogbGRpc2MgbWF5IGJlIE5VTEwgZHVyaW5nIGEgZGlzY2lwbGluZSBzd2l0Y2g7IHdhaXQgYW5kIHJldHJ5ICovCiYjNDM7CQl3YWl0X2V2ZW50KHR0eS0mZ3Q7cmVhZF93YWl0LAomIzQzOwkJCSAgIFJFQURfT05DRSh0dHktJmd0O2xkaXNjKSAhPSBOVUxMIHx8CiYjNDM7CQkJICAgdGVzdF9iaXQoVFRZX0hVUFBFRCwgJmFtcDt0dHktJmd0O2ZsYWdzKSk7CiYjNDM7CQlsZHNlbV9kb3duX3JlYWQoJmFtcDt0dHktJmd0O2xkaXNjX3NlbSwgTUFYX1NDSEVEVUxFX1RJTUVPVVQpOwomIzQzOwkJbGQgPSB0dHktJmd0O2xkaXNjOwomIzQzOwl9CiAJaWYgKCFsZCkKIAkJbGRzZW1fdXBfcmVhZCgmYW1wO3R0eS0mZ3Q7bGRpc2Nfc2VtKTsKIAlyZXR1cm4gbGQ7CkBAIC01NTYsMTUgJiM0Mzs1NjYsMjggQEAgaW50IHR0eV9zZXRfbGRpc2Moc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgaW50IGRpc2MpCiAJLyogU2h1dGRvd24gdGhlIG9sZCBkaXNjaXBsaW5lLiAqLwogCXR0eV9sZGlzY19jbG9zZSh0dHksIG9sZF9sZGlzYyk7CiAKLQkvKiBOb3cgc2V0IHVwIHRoZSBuZXcgbGluZSBkaXNjaXBsaW5lLiAqLwotCXR0eS0mZ3Q7bGRpc2MgPSBuZXdfbGRpc2M7CiYjNDM7CS8qIENsZWFyIHR0eS0mZ3Q7bGRpc2Mgc28gY29uY3VycmVudCByZWFkZXJzIGJhY2sgb2ZmIGR1cmluZyB0cmFuc2l0aW9uICovCiYjNDM7CXR0eS0mZ3Q7bGRpc2MgPSBOVUxMOwogCXR0eV9zZXRfdGVybWlvc19sZGlzYyh0dHksIGRpc2MpOwomIzQzOwl0dHlfbGRpc2NfdW5sb2NrKHR0eSk7CiAKJiM0MzsJLyoKJiM0MzsJICogT3BlbiB0aGUgbmV3IGRpc2NpcGxpbmUgb3V0c2lkZSBsZGlzY19zZW0uIFRoZSBsZGlzYyAub3BlbigpCiYjNDM7CSAqIG1heSBhY3F1aXJlIGxvY2tzIChlLmcuLCBydG5sX211dGV4KSB0aGF0IHdvdWxkIGNyZWF0ZSBjaXJjdWxhcgomIzQzOwkgKiBkZXBlbmRlbmNpZXMgaWYgdGFrZW4gdW5kZXIgbGRpc2Nfc2VtLiB0dHlfbG9jayBpcyBzdGlsbCBoZWxkLAomIzQzOwkgKiBwcmV2ZW50aW5nIGNvbmN1cnJlbnQgbGRpc2MgY2hhbmdlcyBhbmQgaGFuZ3VwLgomIzQzOwkgKi8KIAlyZXR2YWwgPSB0dHlfbGRpc2Nfb3Blbih0dHksIG5ld19sZGlzYyk7CiYjNDM7CiYjNDM7CXR0eV9sZGlzY19sb2NrKHR0eSwgTUFYX1NDSEVEVUxFX1RJTUVPVVQpOwomIzQzOwogCWlmIChyZXR2YWwgJmx0OyAwKSB7CiAJCS8qIEJhY2sgdG8gdGhlIG9sZCBvbmUgb3IgTl9UVFkgaWYgd2UgY2FuJiMzOTt0ICovCiAJCXR0eV9sZGlzY19wdXQobmV3X2xkaXNjKTsKIAkJdHR5X2xkaXNjX3Jlc3RvcmUodHR5LCBvbGRfbGRpc2MpOwomIzQzOwl9IGVsc2UgewomIzQzOwkJLyogU3VjY2VzcyAtIGluc3RhbGwgbmV3IGxkaXNjICovCiYjNDM7CQl0dHktJmd0O2xkaXNjID0gbmV3X2xkaXNjOwogCX0KIAogCWlmICh0dHktJmd0O2xkaXNjLSZndDtvcHMtJmd0O251bSAhPSBvbGRfbGRpc2MtJmd0O29wcy0mZ3Q7bnVtICZhbXA7JmFtcDsgdHR5LSZndDtvcHMtJmd0O3NldF9sZGlzYykgewpAQCAtNTg0LDYgJiM0Mzs2MDcsOSBAQCBpbnQgdHR5X3NldF9sZGlzYyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBpbnQgZGlzYykKIG91dDoKIAl0dHlfbGRpc2NfdW5sb2NrKHR0eSk7CiAKJiM0MzsJLyogV2FrZSB1cCByZWFkZXJzIHdhaXRpbmcgZm9yIHRoZSBsZGlzYyB0cmFuc2l0aW9uIHRvIGNvbXBsZXRlICovCiYjNDM7CXdha2VfdXAoJmFtcDt0dHktJmd0O3JlYWRfd2FpdCk7CiYjNDM7CiAJLyoKIAkgKiBSZXN0YXJ0IHRoZSB3b3JrIHF1ZXVlIGluIGNhc2Ugbm8gY2hhcmFjdGVycyBraWNrIGl0IG9mZi4gU2FmZSBpZgogCSAqIGFscmVhZHkgcnVubmluZwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxMzoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTU1CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMzUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVFRZIExpbmUgRGlzY2lwbGluZSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQmIzM5O3MgaGl0dGluZyBgdHR5X2lvLmNgIGFuZCBgdHR5X2xkaXNjLmNgIGluIHRoZSBUVFkgc3Vic3lzdGVtLiBTZWVtcyBsaWtlIHdlJiMzOTtyZSBkaXZpbmcgZGVlcCBpbnRvIGxpbmUgZGlzY2lwbGluZSBtYW5hZ2VtZW50LiBUaGUga2V5IGZ1bmN0aW9ucyBiZWluZyBtb2RpZmllZCBhcmUgYF9fdHR5X2hhbmd1cGAsIGB0dHlfbGRpc2NfcmVmX3dhaXRgLCBhbmQgYHR0eV9zZXRfbGRpc2NgLiBJbnRlcmVzdGluZy4KCkZpcnN0LCBJIHNlZSBhIGB3YWtlX3VwKCZhbXA7dHR5LSZndDtyZWFkX3dhaXQpYCBiZWluZyBhZGRlZCB3aXRoaW4gYF9fdHR5X2hhbmd1cGAuIFRoYXQmIzM5O3MgYSBkaXJlY3Qgc2lnbmFsIHRvIHdha2UgdXAgd2FpdGluZyByZWFkZXJzIG9uIHRoZSBUVFksIGxpa2VseSBpbmRpY2F0aW5nIGEgaGFuZ3VwIGV2ZW50LiBUaGVuLCBgdHR5X2xkaXNjX3JlZl93YWl0YCBpcyBiZWluZyB1cGRhdGVkIHRvIHdhaXQgZWl0aGVyIGZvciBgdHR5LSZndDtsZGlzY2AgdG8gYmVjb21lIG5vbi1OVUxMIG9yIHRoZSBgVFRZX0hVUFBFRGAgZmxhZyB0byBiZSBzZXQuIFRoYXQmIzM5O3MgYSBjbGFzc2ljIHN5bmNocm9uaXphdGlvbiBjb25zdHJ1Y3Q7IG1ha2luZyBzdXJlIHRoZSBsaW5lIGRpc2NpcGxpbmUgaXMgcmVhZHkgb3IgdGhhdCBhIGhhbmd1cCBoYXMgaGFwcGVuZWQgYmVmb3JlIHByb2NlZWRpbmcuCgpgdHR5X3NldF9sZGlzY2AgaXMgZ2V0dGluZyBzb21lIHJld29yayB0b28uIEkgbm90aWNlIHRoYXQgYHR0eS0mZ3Q7bGRpc2NgIGlzIHNldCB0byBOVUxMIGR1cmluZyB0aGUgdHJhbnNpdGlvbiwgdGhlIGBsZGlzY19zZW1gIGlzIHVubG9ja2VkLCBgdHR5X2xkaXNjX29wZW5gIGlzIGNhbGxlZCAod2hpY2ggd2lsbCBsaWtlbHkgaW5pdGlhbGl6ZSB0aGUgbmV3IGxpbmUgZGlzY2lwbGluZSksIGFuZCB0aGVuIGBsZGlzY19zZW1gIGlzIGxvY2tlZCBhZ2Fpbi4gVGhpcyBpcyBhIGNvbW1vbiBwYXR0ZXJuIGZvciBzYWZlbHkgc3dhcHBpbmcgb3V0IHRoZSBsaW5lIGRpc2NpcGxpbmUgaW4gYSB0aHJlYWRlZCBlbnZpcm9ubWVudC4gRW5zdXJpbmcgdGhhdCBsb2NraW5nIGFuZCB1bmxvY2tpbmcgaXMgaGFuZGxlZCBjb3JyZWN0bHkgaXMgY3J1Y2lhbCBoZXJlLgoKRnJvbSBhIGZ1bmN0aW9uYWwgc3RhbmRwb2ludCwgdGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBsaWVzIGluIHRoZXNlIHRocmVlIGZ1bmN0aW9uczogYHR0eV9sZGlzY19yZWZfd2FpdGAsIGB0dHlfc2V0X2xkaXNjYCwgYW5kIHRoZSBoYW5ndXAgZnVuY3Rpb24sIHRob3VnaCBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhhdCBgX190dHlfaGFuZ3VwYCBpcyBzdGF0aWM7IGl0IG1pZ2h0IGJlIGB0dHlfaGFuZ3VwYCBvciBgdHR5X3ZoYW5ndXBgIGluc3RlYWQuIFRoZSBpbXBvcnRhbnQgb25lcyBhcmUgdGhlIGV4cG9ydGVkIGB0dHlfbGRpc2NfcmVmX3dhaXRgIGFuZCBgdHR5X3NldF9sZGlzY2AuCgpOb3csIEkgbmVlZCB0byBjb25zaWRlciBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gVGhpcyBzZWVtcyBsaWtlIGEgY29yZSBUVFkgc3Vic3lzdGVtIGNoYW5nZSwgc28gY2hhbmNlcyBhcmUgYENPTkZJR19UVFlgIGlzICphbHdheXMqIGVuYWJsZWQuIEkgc2hvdWxkIHZlcmlmeSB0aGF0LCBqdXN0IHRvIGJlIHN1cmUuIEkmIzM5O20gZ29pbmcgdG8gcnVuIGBncmVwcGVyYCBhbmQgbG9vayBmb3IgaW5zdGFuY2VzIG9mIGB0dHlfbGRpc2NfcmVmX3dhaXRgIGFuZCBgdHR5X3NldF9sZGlzY2AgdG8gY29uZmlybSB1c2FnZSBhbmQgcGlucG9pbnQgcG90ZW50aWFsIHNpZGUgZWZmZWN0cy4gQWx3YXlzIGEgZ29vZCBwcmFjdGljZSB0byBmb2xsb3cgdGhlIGNhbGwgY2hhaW4gYW5kIGRvdWJsZSBjaGVjayB0aGUgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxMzoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0dHlfbGRpc2NfcmVmX3dhaXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL3R0eS90dHlfbGRpc2MucnN0PTY2PWJ1dCBub3QgeWV0IGVuZm9yY2VkLlxuLS1cbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS90dHkvdHR5X2xkaXNjLnJzdC02OC0uLiBrZXJuZWwtZG9jOjogZHJpdmVycy90dHkvdHR5X2xkaXNjLmNcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS90dHkvdHR5X2xkaXNjLnJzdDo2OTogICA6aWRlbnRpZmllcnM6IHR0eV9sZGlzY19yZWZfd2FpdCB0dHlfbGRpc2NfcmVmIHR0eV9sZGlzY19kZXJlZlxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL3R0eS90dHlfbGRpc2MucnN0LTcwLVxuLS1cbmRyaXZlcnMvdHR5L3R0eV9pby5jPTU2OD1zdGF0aWMgdm9pZCBfX3R0eV9oYW5ndXAoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgaW50IGV4aXRfc2Vzc2lvbilcbi0tXG5kcml2ZXJzL3R0eS90dHlfaW8uYy02NTMtXHQvKlxuZHJpdmVycy90dHkvdHR5X2lvLmM6NjU0Olx0ICogV2FrZSB1cCByZWFkZXJzIGJsb2NrZWQgaW4gdHR5X2xkaXNjX3JlZl93YWl0KCkgdGhhdCBtYXkgaGF2ZVxuZHJpdmVycy90dHkvdHR5X2lvLmMtNjU1LVx0ICogc2VlbiBsZGlzYyA9PSBOVUxMIGJ1dCBub3QgeWV0IFRUWV9IVVBQRUQuXG4tLVxuZHJpdmVycy90dHkvdHR5X2lvLmM9OTA4PXN0YXRpYyBzc2l6ZV90IHR0eV9yZWFkKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICp0bylcbi0tXG5kcml2ZXJzL3R0eS90dHlfaW8uYy05MjMtXHQgKi9cbmRyaXZlcnMvdHR5L3R0eV9pby5jOjkyNDpcdGxkID0gdHR5X2xkaXNjX3JlZl93YWl0KHR0eSk7XG5kcml2ZXJzL3R0eS90dHlfaW8uYy05MjUtXHRpZiAoIWxkKVxuLS1cbmRyaXZlcnMvdHR5L3R0eV9pby5jPTEwNjk9c3RhdGljIHNzaXplX3QgZmlsZV90dHlfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKVxuLS1cbmRyaXZlcnMvdHR5L3R0eV9pby5jLTEwODEtXHRcdHR0eV9lcnIodHR5LCBcJiMzNDttaXNzaW5nIHdyaXRlX3Jvb20gbWV0aG9kXFxuXCYjMzQ7KTtcbmRyaXZlcnMvdHR5L3R0eV9pby5jOjEwODI6XHRsZCA9IHR0eV9sZGlzY19yZWZfd2FpdCh0dHkpO1xuZHJpdmVycy90dHkvdHR5X2lvLmMtMTA4My1cdGlmICghbGQpXG4tLVxuZHJpdmVycy90dHkvdHR5X2lvLmM9MTMzMz1zdGF0aWMgaW50IHR0eV9yZW9wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSlcbi0tXG5kcml2ZXJzL3R0eS90dHlfaW8uYy0xMzQ4LVxuZHJpdmVycy90dHkvdHR5X2lvLmM6MTM0OTpcdGxkID0gdHR5X2xkaXNjX3JlZl93YWl0KHR0eSk7XG5kcml2ZXJzL3R0eS90dHlfaW8uYy0xMzUwLVx0aWYgKGxkKSB7XG4tLVxuZHJpdmVycy90dHkvdHR5X2lvLmM9MjE5Mz1zdGF0aWMgX19wb2xsX3QgdHR5X3BvbGwoc3RydWN0IGZpbGUgKmZpbHAsIHBvbGxfdGFibGUgKndhaXQpXG4tLVxuZHJpdmVycy90dHkvdHR5X2lvLmMtMjIwMS1cbmRyaXZlcnMvdHR5L3R0eV9pby5jOjIyMDI6XHRsZCA9IHR0eV9sZGlzY19yZWZfd2FpdCh0dHkpO1xuZHJpdmVycy90dHkvdHR5X2lvLmMtMjIwMy1cdGlmICghbGQpXG4tLVxuZHJpdmVycy90dHkvdHR5X2lvLmM9MjI3OT1zdGF0aWMgaW50IHRpb2NzdGkoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgdTggX191c2VyICpwKVxuLS1cbmRyaXZlcnMvdHR5L3R0eV9pby5jLTIyOTEtXHR0dHlfYXVkaXRfdGlvY3N0aSh0dHksIGNoKTtcbmRyaXZlcnMvdHR5L3R0eV9pby5jOjIyOTI6XHRsZCA9IHR0eV9sZGlzY19yZWZfd2FpdCh0dHkpO1xuZHJpdmVycy90dHkvdHR5X2lvLmMtMjI5My1cdGlmICghbGQpXG4tLVxuZHJpdmVycy90dHkvdHR5X2lvLmM9MjQ1MT1zdGF0aWMgaW50IHRpb2NnZXRkKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGludCBfX3VzZXIgKnApXG4tLVxuZHJpdmVycy90dHkvdHR5X2lvLmMtMjQ1NS1cbmRyaXZlcnMvdHR5L3R0eV9pby5jOjI0NTY6XHRsZCA9IHR0eV9sZGlzY19yZWZfd2FpdCh0dHkpO1xuZHJpdmVycy90dHkvdHR5X2lvLmMtMjQ1Ny1cdGlmICghbGQpXG4tLVxuZHJpdmVycy90dHkvdHR5X2lvLmM9MjY3NT1sb25nIHR0eV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXG4tLVxuZHJpdmVycy90dHkvdHR5X2lvLmMtMjgwMi1cdH1cbmRyaXZlcnMvdHR5L3R0eV9pby5jOjI4MDM6XHRsZCA9IHR0eV9sZGlzY19yZWZfd2FpdCh0dHkpO1xuZHJpdmVycy90dHkvdHR5X2lvLmMtMjgwNC1cdGlmICghbGQpXG4tLVxuZHJpdmVycy90dHkvdHR5X2lvLmM9Mjg4Mj1zdGF0aWMgbG9uZyB0dHlfY29tcGF0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLFxuLS1cbmRyaXZlcnMvdHR5L3R0eV9pby5jLTI5ODItXG5kcml2ZXJzL3R0eS90dHlfaW8uYzoyOTgzOlx0bGQgPSB0dHlfbGRpc2NfcmVmX3dhaXQodHR5KTtcbmRyaXZlcnMvdHR5L3R0eV9pby5jLTI5ODQtXHRpZiAoIWxkKVxuLS1cbmRyaXZlcnMvdHR5L3R0eV9pb2N0bC5jPTkyMT1pbnQgdHR5X3BlcmZvcm1fZmx1c2goc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgdW5zaWduZWQgbG9uZyBhcmcpXG4tLVxuZHJpdmVycy90dHkvdHR5X2lvY3RsLmMtOTI3LVxuZHJpdmVycy90dHkvdHR5X2lvY3RsLmM6OTI4Olx0bGQgPSB0dHlfbGRpc2NfcmVmX3dhaXQodHR5KTtcbmRyaXZlcnMvdHR5L3R0eV9pb2N0bC5jLTkyOS1cdHJldHZhbCA9IF9fdHR5X3BlcmZvcm1fZmx1c2godHR5LCBhcmcpO1xuLS1cbmRyaXZlcnMvdHR5L3R0eV9sZGlzYy5jPTIxNT1jb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgdHR5X2xkaXNjc19zZXFfb3BzID0ge1xuLS1cbmRyaXZlcnMvdHR5L3R0eV9sZGlzYy5jLTIyMi0vKipcbmRyaXZlcnMvdHR5L3R0eV9sZGlzYy5jOjIyMzogKiB0dHlfbGRpc2NfcmVmX3dhaXRcdC1cdHdhaXQgZm9yIHRoZSB0dHkgbGRpc2NcbmRyaXZlcnMvdHR5L3R0eV9sZGlzYy5jLTIyNC0gKiBAdHR5OiB0dHkgZGV2aWNlXG4tLVxuZHJpdmVycy90dHkvdHR5X2xkaXNjLmMtMjM4LSAqL1xuZHJpdmVycy90dHkvdHR5X2xkaXNjLmM6MjM5OnN0cnVjdCB0dHlfbGRpc2MgKnR0eV9sZGlzY19yZWZfd2FpdChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KVxuZHJpdmVycy90dHkvdHR5X2xkaXNjLmMtMjQwLXtcbi0tXG5kcml2ZXJzL3R0eS90dHlfbGRpc2MuYy0yNTgtfVxuZHJpdmVycy90dHkvdHR5X2xkaXNjLmM6MjU5OkVYUE9SVF9TWU1CT0xfR1BMKHR0eV9sZGlzY19yZWZfd2FpdCk7XG5kcml2ZXJzL3R0eS90dHlfbGRpc2MuYy0yNjAtXG4tLVxuZHJpdmVycy90dHkvdHR5X2xkaXNjLmM9MjgwPUVYUE9SVF9TWU1CT0xfR1BMKHR0eV9sZGlzY19yZWYpO1xuLS1cbmRyaXZlcnMvdHR5L3R0eV9sZGlzYy5jLTI4NS0gKlxuZHJpdmVycy90dHkvdHR5X2xkaXNjLmM6Mjg2OiAqIFVuZG9lcyB0aGUgZWZmZWN0IG9mIHR0eV9sZGlzY19yZWYoKSBvciB0dHlfbGRpc2NfcmVmX3dhaXQoKS4gTWF5IGJlIGNhbGxlZFxuZHJpdmVycy90dHkvdHR5X2xkaXNjLmMtMjg3LSAqIGluIElSUSBjb250ZXh0LlxuLS1cbmRyaXZlcnMvdHR5L3Z0L3NlbGVjdGlvbi5jPTM5MT1pbnQgcGFzdGVfc2VsZWN0aW9uKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpXG4tLVxuZHJpdmVycy90dHkvdnQvc2VsZWN0aW9uLmMtNDA4LVxuZHJpdmVycy90dHkvdnQvc2VsZWN0aW9uLmM6NDA5Olx0bGQgPSB0dHlfbGRpc2NfcmVmX3dhaXQodHR5KTtcbmRyaXZlcnMvdHR5L3Z0L3NlbGVjdGlvbi5jLTQxMC1cdGlmICghbGQpXG4tLVxuaW5jbHVkZS9saW51eC90dHlfbGRpc2MuaD0yNzk9dm9pZCB0dHlfbGRpc2NfZGVyZWYoc3RydWN0IHR0eV9sZGlzYyAqKTtcbmluY2x1ZGUvbGludXgvdHR5X2xkaXNjLmg6MjgwOnN0cnVjdCB0dHlfbGRpc2MgKnR0eV9sZGlzY19yZWZfd2FpdChzdHJ1Y3QgdHR5X3N0cnVjdCAqKTtcbmluY2x1ZGUvbGludXgvdHR5X2xkaXNjLmgtMjgxLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDEzOjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU2ODYKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAxNzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyB0aGUgVFRZIExpbmUgRGlzY2lwbGluZSBDaGFuZ2VzKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYHR0eV9sZGlzY19yZWZfd2FpdGAgYW5kIGB0dHlfc2V0X2xkaXNjYC4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZywgYW5kIHJpZ2h0IGF3YXkgSSYjMzk7bSB0aGlua2luZywgJiMzNDtmdXp6aW5nIHRhcmdldC4mIzM0OyBgdHR5X3NldF9sZGlzY2AgZ2V0cyBjYWxsZWQgdGhyb3VnaCB0aGUgYFRJT0NTRVREYCBpb2N0bCwgd2hpY2ggbWVhbnMgdGhlcmUmIzM5O3MgYSByZWxhdGl2ZWx5IHN0cmFpZ2h0Zm9yd2FyZCB1c2VyLXNwYWNlIGVudHJ5IHBvaW50LiBCdXQgYHR0eV9sZGlzY19yZWZfd2FpdGAgaXMgdGhlIHJlYWwgc3RhciBoZXJlIOKAkyBpdCYjMzk7cyBjYWxsZWQgZnJvbSAqZXZlcnl3aGVyZSo6IGB0dHlfcmVhZGAsIGBmaWxlX3R0eV93cml0ZWAsIGB0dHlfcG9sbGAsIGV2ZW4gYHRpb2NzdGlgLCBgdGlvY2dldGRgLCBhbGwgdGhlIHdheSBkb3duIHRvIGBwYXN0ZV9zZWxlY3Rpb25gLiBUaGF0IGxldmVsIG9mIGludGVncmF0aW9uIG1ha2VzIGl0IGEgcHJpbWUgY2FuZGlkYXRlIGZvciBzb21lIHRhcmdldGVkIGZ1enppbmcuIEkgY2FuIGFscmVhZHkgc2VlIHRoZSBwb3RlbnRpYWwgZm9yIHNvbWUgY29tcGxleCBzdGF0ZSB0cmFuc2l0aW9ucyBhbmQgcmFjZSBjb25kaXRpb25zIGx1cmtpbmcgdGhlcmUuCgpNeSBmb2N1cyBzaG91bGQgYmUgc2hhcnA6IGB0dHlfc2V0X2xkaXNjYCBmb3IgdGhlIGVudHJ5IHBvaW50LCBuYXR1cmFsbHksIGFuZCB0aGVuIG9mIGNvdXJzZSBgdHR5X2xkaXNjX3JlZl93YWl0YC4gQnV0IGl0JiMzOTtzIHdvcnRoIGNvbnNpZGVyaW5nIGB0dHlfaGFuZ3VwYCBhbmQgYHR0eV92aGFuZ3VwYCBhcyB3ZWxsLiBUaGV5IHNlZW0gcmVsYXRlZCBhbmQgYXJlIGxpa2VseSB0byBiZSBwYXJ0IG9mIHRoZSBjbGVhbnVwIHByb2NlZHVyZXMsIHNvIHRoZXkgbWlnaHQgaW50ZXJhY3Qgd2l0aCB0aGUgb3RoZXIgdHdvIGluIGludGVyZXN0aW5nIHdheXMuIExldCYjMzk7cyBxdWlja2x5IGNoZWNrIHRvIHNlZSBpZiB0aG9zZSBsYXN0IHR3byBhcmUgZXZlbiBleHBvcnRlZCBzeW1ib2xzOyBpZiBub3QsIHdlIGNhbiBkaXNyZWdhcmQgdGhlbS4gQnV0IGlmIHRoZXkgYXJlLCB0aGF0IGV4cGFuZHMgdGhlIHBvdGVudGlhbCBhdHRhY2sgc3VyZmFjZSBzaWduaWZpY2FudGx5LiBUaGlzIGxvb2tzIGxpa2UgYSBwcm9taXNpbmcgYXZlbnVlIGZvciB1bmNvdmVyaW5nIHNvbWUgc3VidGxlIHZ1bG5lcmFiaWxpdGllcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxMzoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MLip0dHlfaGFuZ3VwJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdHR5L3R0eV9pby5jPTY4MD12b2lkIHR0eV9oYW5ndXAoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSlcbi0tXG5kcml2ZXJzL3R0eS90dHlfaW8uYy02ODQtfVxuZHJpdmVycy90dHkvdHR5X2lvLmM6Njg1OkVYUE9SVF9TWU1CT0wodHR5X2hhbmd1cCk7XG5kcml2ZXJzL3R0eS90dHlfaW8uYy02ODYtXG4tLVxuZHJpdmVycy90dHkvdHR5X3BvcnQuYz00MDQ9dm9pZCBfX3R0eV9wb3J0X3R0eV9oYW5ndXAoc3RydWN0IHR0eV9wb3J0ICpwb3J0LCBib29sIGNoZWNrX2Nsb2NhbCwgYm9vbCBhc3luYylcbi0tXG5kcml2ZXJzL3R0eS90dHlfcG9ydC5jLTQxNi19XG5kcml2ZXJzL3R0eS90dHlfcG9ydC5jOjQxNzpFWFBPUlRfU1lNQk9MX0dQTChfX3R0eV9wb3J0X3R0eV9oYW5ndXApO1xuZHJpdmVycy90dHkvdHR5X3BvcnQuYy00MTgtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTM6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjQxNQoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQ29uc2lkZXJpbmcgdGhlIEltcGFjdCBvZiBgdHR5X3ZoYW5ndXBgKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGN1cnJlbnQgc2l0dWF0aW9uLCBhbmQgbXkgbWluZCBpbW1lZGlhdGVseSBqdW1wcyB0byBgdHR5X3ZoYW5ndXBgLiBJdCYjMzk7cyBhIGtleSBmdW5jdGlvbiwgYW5kIGl0cyBiZWhhdmlvciBjb3VsZCBiZSByZWxldmFudCBoZXJlLCBkZXBlbmRpbmcgb24gdGhlIHNwZWNpZmljcyBvZiB0aGUgcHJvYmxlbSB3ZSYjMzk7cmUgdHJvdWJsZXNob290aW5nLiBJIG5lZWQgdG8gcXVpY2tseSBhc3Nlc3Mgd2hldGhlciBpdCYjMzk7cyBpbnZvbHZlZCBpbiB0aGlzIHBhcnRpY3VsYXIgc2NlbmFyaW8uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBxdWlja2x5IGNvbnNpZGVyIHRoZSBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zIG9mIGB0dHlfdmhhbmd1cGAuIEFyZSB0aGVyZSBjb25kaXRpb25zIHdoZXJlIGl0IGNvdWxkIGJlIG1hc2tpbmcgb3IgZXhhY2VyYmF0aW5nIHRoZSBpc3N1ZT8gT3IsIGlzIGl0IHBlcmhhcHMgYSByZWQgaGVycmluZz8gSSBuZWVkIHRvIGFuYWx5emUgaXRzIGNhbGwgZ3JhcGggd2l0aGluIHRoZSByZWxldmFudCBzdWJzeXN0ZW0gdG8gZ2V0IGEgZmVlbCBmb3IgaG93IGl0IG1pZ2h0IGJlIGludGVyYWN0aW5nIHdpdGggdGhlIG9ic2VydmVkIHN5bXB0b21zLiBJcyB0aGVyZSBhbnkgcG9zc2liaWxpdHkgb2Ygc29tZSBraW5kIG9mIGEgcmFjZSBjb25kaXRpb24gaW52b2x2aW5nIGB0dHlfdmhhbmd1cGAsIG9yIGFyZSBpdHMgc2VtYW50aWNzIHN0cmFpZ2h0Zm9yd2FyZCBpbiB0aGlzIGNhc2U/IEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSBpdHMgcmVsZXZhbmNlLCBhbmQgaWYgaXQmIzM5O3MgcG90ZW50aWFsbHkgaW1wb3J0YW50LCBJJiMzOTtsbCBkZWx2ZSBkZWVwZXIgdG8gc2VlIGlmIGl0IG5lZWRzIGZ1cnRoZXIgZGVidWdnaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDEzOjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKnR0eV92aGFuZ3VwJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdHR5L3R0eV9pby5jPTY5NT12b2lkIHR0eV92aGFuZ3VwKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpXG4tLVxuZHJpdmVycy90dHkvdHR5X2lvLmMtNjk5LX1cbmRyaXZlcnMvdHR5L3R0eV9pby5jOjcwMDpFWFBPUlRfU1lNQk9MKHR0eV92aGFuZ3VwKTtcbmRyaXZlcnMvdHR5L3R0eV9pby5jLTcwMS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxMzoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NzcyCgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gdGhpczoKCioqQW5hbHl6aW5nIGB0dHlfc2V0X2xkaXNjYCoqCgpBbHJpZ2h0LCB0aGUgb2JqZWN0aXZlIGlzIHByZXR0eSBjbGVhcjogbGV0JiMzOTtzIGdldCBhIGhhbmRsZSBvbiB3aGF0IGB0dHlfc2V0X2xkaXNjYCBpcyBhbGwgYWJvdXQuIFRoaXMgaXMgYSBjcnVjaWFsIGZ1bmN0aW9uLCBvYnZpb3VzbHksIGFuZCBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb3IgaW52ZXN0aWdhdGUgaXQgZnJvbSBhIG5ldyBwZXJzcGVjdGl2ZS4gVGltZSB0byB0aGluayB0aGlzIHRocm91Z2g6IHdoYXQgaXMgaXQgZG9pbmcsIHdoYXQmIzM5O3MgaXQgdXNlZCBmb3IsIHdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb2YgaXRzIGV4ZWN1dGlvbj8gSSBzaG91bGQgcHJvYmFibHkgc3RhcnQgYnkgcXVpY2tseSBjaGVja2luZyB0aGUgY29kZSBiYXNlIHRvIGlkZW50aWZ5IHdoZXJlIHRoaXMgaXMgdXNlZCBhbmQgd2hpY2ggZGF0YSBzdHJ1Y3R1cmVzIGFyZSBhY2Nlc3NlZC4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxMzoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MLip0dHlfc2V0X2xkaXNjJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdHR5L3R0eV9sZGlzYy5jPTUyOT1pbnQgdHR5X3NldF9sZGlzYyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBpbnQgZGlzYylcbi0tXG5kcml2ZXJzL3R0eS90dHlfbGRpc2MuYy02MjItfVxuZHJpdmVycy90dHkvdHR5X2xkaXNjLmM6NjIzOkVYUE9SVF9TWU1CT0xfR1BMKHR0eV9zZXRfbGRpc2MpO1xuZHJpdmVycy90dHkvdHR5X2xkaXNjLmMtNjI0LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxMzoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MDYxCgkJCQkJCQlvdXRwdXQ6IDE3CgkJCQkJCQl0aG91Z2h0czogNzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkFuYWx5emluZyBUVFkgTGluZSBEaXNjaXBsaW5lIEZ1bmN0aW9ucyoqCgpSaWdodCwgbXkgbWVudGFsIGNoZWNrbGlzdCBiZWdpbnMgd2l0aCB0aGUga2V5IGZ1bmN0aW9ucyBhc3NvY2lhdGVkIHdpdGggVFRZIGxpbmUgZGlzY2lwbGluZXM6IGB0dHlfc2V0X2xkaXNjYCwgYHR0eV9sZGlzY19yZWZfd2FpdGAsIGB0dHlfaGFuZ3VwYCwgYW5kIGB0dHlfdmhhbmd1cGAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZWlyIHJvbGVzIHdpdGhpbiB0aGUgc3lzdGVtLiBBcmUgdGhlcmUgYW55IGNvbmZpZ3VyYXRpb24gcHJlcmVxdWlzaXRlcyBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IFVzdWFsbHksIGBDT05GSUdfVFRZYCBpcyBhIGdpdmVuLCBidXQgSSYjMzk7bGwgZG91YmxlLWNoZWNrIGZvciBhbnkgbW9yZSBzcGVjaWZpYyBvciBvYnNjdXJlIGNvbmZpZ3VyYXRpb25zIHRoYXQgbWlnaHQgaW1wYWN0IHRoZSBmdW5jdGlvbmFsaXR5IG9yIGJlaGF2aW9yIG9mIHRoZXNlIHJvdXRpbmVzLiBJdCYjMzk7cyBjcnVjaWFsIHRvIGlkZW50aWZ5IGlmIGFueSBzcGVjaWZpYyBmZWF0dXJlcyBvciBkZXBlbmRlbmNpZXMgbmVlZCB0byBiZSBlbmFibGVkLiBJIG5lZWQgdG8gZW5zdXJlIGEgY29tcGxldGUgcGljdHVyZSBvZiB0aGUgbGFuZHNjYXBlIGJlZm9yZSBtb3ZpbmcgZm9yd2FyZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTM6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFRUWSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3VtL2RyaXZlcnMvS2NvbmZpZz00MD1jb25maWcgUFRZX0NIQU5cbi0tXG5hcmNoL3VtL2RyaXZlcnMvS2NvbmZpZy00OS1cbmFyY2gvdW0vZHJpdmVycy9LY29uZmlnOjUwOmNvbmZpZyBUVFlfQ0hBTlxuYXJjaC91bS9kcml2ZXJzL0tjb25maWctNTEtXHRib29sIFwmIzM0O3R0eSBjaGFubmVsIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL2NoYXIvS2NvbmZpZz04PXNvdXJjZSBcJiMzNDtkcml2ZXJzL3R0eS9LY29uZmlnXCYjMzQ7XG5kcml2ZXJzL2NoYXIvS2NvbmZpZy05LVxuZHJpdmVycy9jaGFyL0tjb25maWc6MTA6Y29uZmlnIFRUWV9QUklOVEtcbmRyaXZlcnMvY2hhci9LY29uZmlnLTExLVx0dHJpc3RhdGUgXCYjMzQ7VFRZIGRyaXZlciB0byBvdXRwdXQgdXNlciBtZXNzYWdlcyB2aWEgcHJpbnRrXCYjMzQ7XG4tLVxuZHJpdmVycy9jaGFyL0tjb25maWctMjUtXG5kcml2ZXJzL2NoYXIvS2NvbmZpZzoyNjpjb25maWcgVFRZX1BSSU5US19MRVZFTFxuZHJpdmVycy9jaGFyL0tjb25maWctMjctXHRkZXBlbmRzIG9uIFRUWV9QUklOVEtcbi0tXG5kcml2ZXJzL3R0eS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuZHJpdmVycy90dHkvS2NvbmZpZzoyOmNvbmZpZyBUVFlcbmRyaXZlcnMvdHR5L0tjb25maWctMy1cdGJvb2wgXCYjMzQ7RW5hYmxlIFRUWVwmIzM0OyBpZiBFWFBFUlRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTM6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzU3MgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gdGhpcyBrZXJuZWwgY29uZmlnIHNpdHVhdGlvbi4KCioqS2VybmVsIENvbmZpZ3VyYXRpb24gQ29uc2lkZXJhdGlvbnMgZm9yIFRUWSBGdW5jdGlvbmFsaXR5KioKCkFscmlnaHQsIHNvIHRoZSB0YXNrIGlzIHRvIGlkZW50aWZ5IGtlcm5lbCBjb25maWcgZmxhZ3MgbmVlZGVkIGZvciBjb21waWxpbmcgYW5kIHRlc3RpbmcgbW9kaWZpZWQgY29kZSwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgVFRZIHN1YnN5c3RlbS4gVGhlIHByb21wdCBlbXBoYXNpemVzICpleHBsaWNpdCogZW5hYmxpbmcuIEluaXRpYWxseSwgbXkgaW50dWl0aW9uIGlzIHRoYXQgYENPTkZJR19UVFlgIGlzIHRoZSBvYnZpb3VzIHN0YXJ0aW5nIHBvaW50LiBJdCYjMzk7cyB0aGUgY29yZSBUVFkgY29uZmlnIGFuZCB0eXBpY2FsbHkgZW5hYmxlZCBieSBkZWZhdWx0LiBJJiMzOTtkIHVzdWFsbHkgYXNzdW1lIGl0JiMzOTtzIGltcGxpY2l0LCBidXQgZ2l2ZW4gdGhlIHBocmFzaW5nIG9mIHRoZSBxdWVzdGlvbiwgbGlzdGluZyBpdCB3b3VsZCBiZSBwcnVkZW50LiBUaGVuIEkgdGhvdWdodCBhYm91dCB0aGUgaW5zdHJ1Y3Rpb25zIHJlcXVpcmluZyAqZXhwbGljaXQqIGVuYWJsaW5nLiBXZWxsLCBqdXN0IGxpc3RpbmcgYFRUWWAgd291bGQgYmUgZW5vdWdoLgoKTm93LCB0byBiZSB0aG9yb3VnaCDigJMgYW5kIHRoaXMgaXMga2V5IHRvIGdldHRpbmcgdGhlICpyaWdodCogYW5zd2VyIOKAkyBJIG5lZWQgdG8gY2hlY2sgZm9yIGFueSBkZXBlbmRlbmNpZXMgbHVya2luZyBpbiB0aGUgY29kZSBpdHNlbGYuIEkmIzM5O2xsIG5lZWQgdG8gc2NydXRpbml6ZSBgZHJpdmVycy90dHkvdHR5X2lvLmNgIGFuZCBgZHJpdmVycy90dHkvdHR5X2xkaXNjLmNgLiBNeSBzdHJhdGVneSB3aWxsIGJlIHRvIGxvb2sgZm9yIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBkaXJlY3RpdmVzIChgI2lmZGVmYCwgYCNpZmApIGFyb3VuZCB0aGUgZnVuY3Rpb25zLCBhbmQgdGhlc2Ugd291bGQgYmUgdGhlIGNvbmZpZyBmbGFncyB0aGF0IEkgbXVzdCBpbmNsdWRlLiBUaGF0IHdpbGwgcHJvdmlkZSBhIGNvbXBsZXRlIGxpc3Qgb2YgcmVxdWlyZWQgY29uZmlncywgYW5kIG5vdGhpbmcgd2lsbCBiZSBtaXNzZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDEzOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7I2lmZGVmLipDT05GSUdfJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy90dHkvdHR5X2xkaXNjLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxMzoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MDEzCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IGltbWVkaWF0ZSB0aG91Z2h0IHByb2Nlc3M6CgoqKk5vIENvbmZpZ3VyYXRpb24gRmlsZXMgSGVyZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYHR0eV9sZGlzYy5jYC4gTXkgaW5pdGlhbCBzY2FuIHNob3dzIHRoYXQgdGhlcmUgYXJlIG5vIG9idmlvdXMgY29uZmlndXJhdGlvbiBmaWxlcyBwcmVzZW50IHdpdGhpbiB0aGlzIHBhcnRpY3VsYXIgbW9kdWxlLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCBhbmQgaXQgc3VnZ2VzdHMgYSBmZXcgdGhpbmdzLCBkZXBlbmRpbmcgb24gdGhlIGNvbnRleHQuIEl0IGNvdWxkIG1lYW4gdGhlIGNvbmZpZ3VyYXRpb24gaXMgaGFuZGxlZCBlbHNld2hlcmUsIHBlcmhhcHMgZHluYW1pY2FsbHkgb3IgdGhyb3VnaCBzb21lIGdsb2JhbCBzeXN0ZW0gc2V0dGluZ3MuIEFsdGVybmF0aXZlbHksIGl0IGNvdWxkIG1lYW4gdGhhdCB0aGUgY29uZmlndXJhdGlvbiBpcyBoYXJkY29kZWQsIHdoaWNoLCBpbiBtb3N0IG1vZGVybiBzeXN0ZW1zLCBpcyBhIGxlc3MgZGVzaXJhYmxlIGFwcHJvYWNoLiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBkZWVwZXIgdG8gc2VlIGhvdyB0aGUgbGluZSBkaXNjaXBsaW5lLCBhcyBkZWZpbmVkIGluIHRoaXMgc291cmNlIGZpbGUsIGludGVyYWN0cyB3aXRoIGFueSBleHRlcm5hbCBjb25maWd1cmF0aW9uIG1lY2hhbmlzbXMsIG9yIGlmIGl0IGluZGVlZCByZWxpZXMgb24gc29tZSBkZWZhdWx0IGJlaGF2aW91ciBkZWZpbmVkIGluIHRoZSBzb3VyY2UuIFRoaXMgaW5pdGlhbCBvYnNlcnZhdGlvbiBnaXZlcyBtZSBhIHBvaW50IG9mIGludmVzdGlnYXRpb24uIE5vdywgd2hlcmUgdG8gbG9vayBuZXh0Li4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDEzOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0OyNpZmRlZi4qQ09ORklHXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdHR5L3R0eV9pby5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdHR5L3R0eV9pby5jPTE1MD1zdGF0aWMgaW50IHR0eV9vcGVuKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZmlsZSAqKTtcbmRyaXZlcnMvdHR5L3R0eV9pby5jOjE1MTojaWZkZWYgQ09ORklHX0NPTVBBVFxuZHJpdmVycy90dHkvdHR5X2lvLmMtMTUyLXN0YXRpYyBsb25nIHR0eV9jb21wYXRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsXG4tLVxuZHJpdmVycy90dHkvdHR5X2lvLmM9MzY2PUVYUE9SVF9TWU1CT0xfR1BMKHR0eV9kZXZfbmFtZV90b19udW1iZXIpO1xuZHJpdmVycy90dHkvdHR5X2lvLmMtMzY3LVxuZHJpdmVycy90dHkvdHR5X2lvLmM6MzY4OiNpZmRlZiBDT05GSUdfQ09OU09MRV9QT0xMXG5kcml2ZXJzL3R0eS90dHlfaW8uYy0zNjktXG4tLVxuZHJpdmVycy90dHkvdHR5X2lvLmM9OTU5PXN0YXRpYyBzc2l6ZV90IGl0ZXJhdGVfdHR5X3dyaXRlKHN0cnVjdCB0dHlfbGRpc2MgKmxkLCBzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LFxuLS1cbmRyaXZlcnMvdHR5L3R0eV9pby5jLTEwNDEtXG5kcml2ZXJzL3R0eS90dHlfaW8uYzoxMDQyOiNpZmRlZiBDT05GSUdfUFJJTlRfUVVPVEFfV0FSTklOR1xuZHJpdmVycy90dHkvdHR5X2lvLmMtMTA0My0vKipcbi0tXG5kcml2ZXJzL3R0eS90dHlfaW8uYz0xOTEyPXN0YXRpYyBzdHJ1Y3QgdHR5X2RyaXZlciAqdHR5X2xvb2t1cF9kcml2ZXIoZGV2X3QgZGV2aWNlLCBzdHJ1Y3QgZmlsZSAqZmlscCxcbi0tXG5kcml2ZXJzL3R0eS90dHlfaW8uYy0xOTE3LVx0c3dpdGNoIChkZXZpY2UpIHtcbmRyaXZlcnMvdHR5L3R0eV9pby5jOjE5MTg6I2lmZGVmIENPTkZJR19WVFxuZHJpdmVycy90dHkvdHR5X2lvLmMtMTkxOS1cdGNhc2UgTUtERVYoVFRZX01BSk9SLCAwKToge1xuLS1cbmRyaXZlcnMvdHR5L3R0eV9pby5jPTI2NzU9bG9uZyB0dHlfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxuLS1cbmRyaXZlcnMvdHR5L3R0eV9pby5jLTI4MTUtXG5kcml2ZXJzL3R0eS90dHlfaW8uYzoyODE2OiNpZmRlZiBDT05GSUdfQ09NUEFUXG5kcml2ZXJzL3R0eS90dHlfaW8uYy0yODE3LVxuLS1cbmRyaXZlcnMvdHR5L3R0eV9pby5jPTM2NTY9aW50IF9faW5pdCB0dHlfaW5pdCh2b2lkKVxuLS1cbmRyaXZlcnMvdHR5L3R0eV9pby5jLTM2NzQtXG5kcml2ZXJzL3R0eS90dHlfaW8uYzozNjc1OiNpZmRlZiBDT05GSUdfVlRcbmRyaXZlcnMvdHR5L3R0eV9pby5jLTM2NzYtXHR2dHlfaW5pdChcdTAwMjZjb25zb2xlX2ZvcHMpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxMzoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4ODEzCgkJCQkJCQlvdXRwdXQ6IDE3MQoJCQkJCQkJdGhvdWdodHM6IDMyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbjogVFRZIExpbmUgRGlzY2lwbGluZSBMb2dpYyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBqdXN0IGFuYWx5emVkIHRoZXNlIGNvbmZpZ3VyYXRpb25zLCBhbmQgbm9uZSBvZiB0aGVtIHNlZW0gdG8gdG91Y2ggYHR0eV9zZXRfbGRpc2NgLCBgdHR5X2xkaXNjX3JlZl93YWl0YCwgb3IgYF9fdHR5X2hhbmd1cGAuIFRoYXQmIzM5O3MgaW50ZXJlc3RpbmcsIGl0IG5hcnJvd3MgZG93biB0aGUgZm9jdXMgY29uc2lkZXJhYmx5LiBNeSB0YXJnZXQgc3ltYm9scyBhcmUgY2xlYXJseSBgdHR5X3NldF9sZGlzY2AsIGB0dHlfbGRpc2NfcmVmX3dhaXRgLCBgdHR5X2hhbmd1cGAsIGFuZCBgdHR5X3ZoYW5ndXBgLiBBbmQgdGhlIGVuY29tcGFzc2luZyBjb25maWcgaXMgYFRUWWAuCgpMZXQgbWUgcXVpY2tseSB2ZXJpZnkgdGhlIHJlYWNoYWJpbGl0eSBvZiB0aGVzZS4gQWxyaWdodCwgYHR0eV9zZXRfbGRpc2NgIGlzIGRlZmluaXRlbHkgYWNjZXNzaWJsZSDigJMgaXQmIzM5O3MgdHJpZ2dlcmVkIHRocm91Z2ggdGhlIGBUSU9DU0VURGAgaW9jdGwgb24gYSB0dHkgZmlsZSBkZXNjcmlwdG9yLCB3aGljaCBpcyBhIGNvbW1vbiBwYXRoLiBgdHR5X2xkaXNjX3JlZl93YWl0YCBpcyBjbGVhcmx5IHJlYWNoYWJsZSB2aWEgYHJlYWRgLCBgd3JpdGVgLCBgcG9sbGAsIGFuZCBgaW9jdGxgIG9wZXJhdGlvbnMgb24gYSB0dHkgZmlsZSBkZXNjcmlwdG9yLiBGaW5hbGx5LCBgdHR5X2hhbmd1cGAgaXMgcmVhY2hhYmxlIHZpYSB0aGUgYHZoYW5ndXBgIHN5c2NhbGwsIG9yIGBUSU9DVkhBTkdVUGAgaW9jdGwuCgpHaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBjaGFuZ2VzLCB0aGlzIHNlZW1zIGxpa2UgYSBjb3JlIGtlcm5lbCBtb2RpZmljYXRpb24sIHJpcGUgZm9yIGZ1enppbmcuIFRoZSBwYXRjaCBpcyB3b3JraW5nIG9uIFRUWSBsaW5lIGRpc2NpcGxpbmUgcmVmZXJlbmNlIGNvdW50aW5nIGFuZCBzdGF0ZSB0cmFuc2l0aW9uIGxvZ2ljOiBgdHR5X2xkaXNjX3JlZl93YWl0YCwgYHR0eV9zZXRfbGRpc2NgLCBhbmQgYF9fdHR5X2hhbmd1cGAuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgZGlyZWN0bHkgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZSwgZWl0aGVyIHRocm91Z2ggVFRZIGlvY3RscyBsaWtlIGBUSU9DU0VURGAsIGBUSU9DVkhBTkdVUGAsIG9yIGV2ZW4gc2ltcGxlciBjYWxscyBzdWNoIGFzIGByZWFkYCwgYHdyaXRlYCwgYW5kIGBwb2xsYC4gSSYjMzk7bSBzZWVpbmcgbG9jayBkcm9wcGluZyBhbmQgd2FpdCBxdWV1ZSB3YWtldXBzLCB3aGljaCBpbW1lZGlhdGVseSBzY3JlYW1zIHJhY2UgY29uZGl0aW9ucyBhbmQgcG90ZW50aWFsIGRlYWRsb2Nrcy4gVGhpcyBpcyBleGFjdGx5IHRoZSBraW5kIG9mIHNjZW5hcmlvIGZ1enppbmcgZXhjZWxzIGF0LiBUaGUgcHJvYmFiaWxpdHkgb2YgdW5jb3ZlcmluZyBhIHZ1bG5lcmFiaWxpdHkgaXMgaGlnaC4KClRpbWUgdG8gY2FsbCBzZXQtcmVzdWx0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTM6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RUWSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3R0eV9zZXRfbGRpc2MmIzM0OywKICAgICYjMzQ7dHR5X2xkaXNjX3JlZl93YWl0JiMzNDssCiAgICAmIzM0O3R0eV9oYW5ndXAmIzM0OywKICAgICYjMzQ7dHR5X3ZoYW5ndXAmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBUVFkgbGluZSBkaXNjaXBsaW5lIHJlZmVyZW5jZSBjb3VudGluZyBhbmQgdHJhbnNpdGlvbiBsb2dpYyAodHR5X2xkaXNjX3JlZl93YWl0LCB0dHlfc2V0X2xkaXNjLCBfX3R0eV9oYW5ndXApLiBUaGVzZSBmdW5jdGlvbnMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgVFRZIGlvY3RscyAoZS5nLiwgVElPQ1NFVEQsIFRJT0NWSEFOR1VQKSwgcmVhZCwgd3JpdGUsIGFuZCBwb2xsIG9wZXJhdGlvbnMuIFRoZSBjaGFuZ2VzIGludm9sdmUgbG9jayBkcm9wcGluZyBhbmQgd2FpdCBxdWV1ZSB3YWtldXBzLCB3aGljaCBhcmUgcHJvbmUgdG8gcmFjZSBjb25kaXRpb25zIGFuZCBkZWFkbG9ja3MsIG1ha2luZyB0aGVtIGhpZ2hseSBzdWl0YWJsZSBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VFRZJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dHR5X3NldF9sZGlzYyYjMzQ7LAogICAgJiMzNDt0dHlfbGRpc2NfcmVmX3dhaXQmIzM0OywKICAgICYjMzQ7dHR5X2hhbmd1cCYjMzQ7LAogICAgJiMzNDt0dHlfdmhhbmd1cCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIFRUWSBsaW5lIGRpc2NpcGxpbmUgcmVmZXJlbmNlIGNvdW50aW5nIGFuZCB0cmFuc2l0aW9uIGxvZ2ljICh0dHlfbGRpc2NfcmVmX3dhaXQsIHR0eV9zZXRfbGRpc2MsIF9fdHR5X2hhbmd1cCkuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBUVFkgaW9jdGxzIChlLmcuLCBUSU9DU0VURCwgVElPQ1ZIQU5HVVApLCByZWFkLCB3cml0ZSwgYW5kIHBvbGwgb3BlcmF0aW9ucy4gVGhlIGNoYW5nZXMgaW52b2x2ZSBsb2NrIGRyb3BwaW5nIGFuZCB3YWl0IHF1ZXVlIHdha2V1cHMsIHdoaWNoIGFyZSBwcm9uZSB0byByYWNlIGNvbmRpdGlvbnMgYW5kIGRlYWRsb2NrcywgbWFraW5nIHRoZW0gaGlnaGx5IHN1aXRhYmxlIGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjVUMTM6MjA6MTAuMDQyMzkzOTU2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQzNzMzMTI4MDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVFRZXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidHR5X3NldF9sZGlzY1wiLFxuICAgIFwidHR5X2xkaXNjX3JlZl93YWl0XCIsXG4gICAgXCJ0dHlfaGFuZ3VwXCIsXG4gICAgXCJ0dHlfdmhhbmd1cFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgVFRZIGxpbmUgZGlzY2lwbGluZSByZWZlcmVuY2UgY291bnRpbmcgYW5kIHRyYW5zaXRpb24gbG9naWMgKHR0eV9sZGlzY19yZWZfd2FpdCwgdHR5X3NldF9sZGlzYywgX190dHlfaGFuZ3VwKS4gVGhlc2UgZnVuY3Rpb25zIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIFRUWSBpb2N0bHMgKGUuZy4sIFRJT0NTRVRELCBUSU9DVkhBTkdVUCksIHJlYWQsIHdyaXRlLCBhbmQgcG9sbCBvcGVyYXRpb25zLiBUaGUgY2hhbmdlcyBpbnZvbHZlIGxvY2sgZHJvcHBpbmcgYW5kIHdhaXQgcXVldWUgd2FrZXVwcywgd2hpY2ggYXJlIHByb25lIHRvIHJhY2UgY29uZGl0aW9ucyBhbmQgZGVhZGxvY2tzLCBtYWtpbmcgdGhlbSBoaWdobHkgc3VpdGFibGUgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDEzOjIwOjEwLjA0MjQwMTQ3NloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE2ODYzOTgyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGFjNTgwZjQyMGJiNjIxYTE1NGU0YWM4MzNkNWI3ZjM2MGFiMzFmNzBcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBKdWwgMjUgMTM6MjA6MDcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvdHR5X2lvLmMgYi9kcml2ZXJzL3R0eS90dHlfaW8uY1xcbmluZGV4IDZiMjgzZmQwM2ZmODI0Li5lMmY4MmU4MGYzOTdlNCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL3R0eS90dHlfaW8uY1xcbisrKyBiL2RyaXZlcnMvdHR5L3R0eV9pby5jXFxuQEAgLTY0OSw2ICs2NDksMTMgQEAgc3RhdGljIHZvaWQgX190dHlfaGFuZ3VwKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGludCBleGl0X3Nlc3Npb24pXFxuIFxcdCAqL1xcbiBcXHRzZXRfYml0KFRUWV9IVVBQRUQsIFxcdTAwMjZ0dHktXFx1MDAzZWZsYWdzKTtcXG4gXFx0Y2xlYXJfYml0KFRUWV9IVVBQSU5HLCBcXHUwMDI2dHR5LVxcdTAwM2VmbGFncyk7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBXYWtlIHVwIHJlYWRlcnMgYmxvY2tlZCBpbiB0dHlfbGRpc2NfcmVmX3dhaXQoKSB0aGF0IG1heSBoYXZlXFxuK1xcdCAqIHNlZW4gbGRpc2MgPT0gTlVMTCBidXQgbm90IHlldCBUVFlfSFVQUEVELlxcbitcXHQgKi9cXG4rXFx0d2FrZV91cChcXHUwMDI2dHR5LVxcdTAwM2VyZWFkX3dhaXQpO1xcbitcXG4gXFx0dHR5X3VubG9jayh0dHkpO1xcbiBcXG4gXFx0aWYgKGYpXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L3R0eV9sZGlzYy5jIGIvZHJpdmVycy90dHkvdHR5X2xkaXNjLmNcXG5pbmRleCAyN2ZlODIzNmY2NjIzMC4uNmVjOTNlNmI4NDk4OGQgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy90dHkvdHR5X2xkaXNjLmNcXG4rKysgYi9kcml2ZXJzL3R0eS90dHlfbGRpc2MuY1xcbkBAIC0yNDIsNiArMjQyLDE2IEBAIHN0cnVjdCB0dHlfbGRpc2MgKnR0eV9sZGlzY19yZWZfd2FpdChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KVxcbiBcXG4gXFx0bGRzZW1fZG93bl9yZWFkKFxcdTAwMjZ0dHktXFx1MDAzZWxkaXNjX3NlbSwgTUFYX1NDSEVEVUxFX1RJTUVPVVQpO1xcbiBcXHRsZCA9IHR0eS1cXHUwMDNlbGRpc2M7XFxuK1xcdHdoaWxlICghbGQgXFx1MDAyNlxcdTAwMjYgIXRlc3RfYml0KFRUWV9IVVBQRUQsIFxcdTAwMjZ0dHktXFx1MDAzZWZsYWdzKSkge1xcbitcXHRcXHRsZHNlbV91cF9yZWFkKFxcdTAwMjZ0dHktXFx1MDAzZWxkaXNjX3NlbSk7XFxuK1xcbitcXHRcXHQvKiBsZGlzYyBtYXkgYmUgTlVMTCBkdXJpbmcgYSBkaXNjaXBsaW5lIHN3aXRjaDsgd2FpdCBhbmQgcmV0cnkgKi9cXG4rXFx0XFx0d2FpdF9ldmVudCh0dHktXFx1MDAzZXJlYWRfd2FpdCxcXG4rXFx0XFx0XFx0ICAgUkVBRF9PTkNFKHR0eS1cXHUwMDNlbGRpc2MpICE9IE5VTEwgfHxcXG4rXFx0XFx0XFx0ICAgdGVzdF9iaXQoVFRZX0hVUFBFRCwgXFx1MDAyNnR0eS1cXHUwMDNlZmxhZ3MpKTtcXG4rXFx0XFx0bGRzZW1fZG93bl9yZWFkKFxcdTAwMjZ0dHktXFx1MDAzZWxkaXNjX3NlbSwgTUFYX1NDSEVEVUxFX1RJTUVPVVQpO1xcbitcXHRcXHRsZCA9IHR0eS1cXHUwMDNlbGRpc2M7XFxuK1xcdH1cXG4gXFx0aWYgKCFsZClcXG4gXFx0XFx0bGRzZW1fdXBfcmVhZChcXHUwMDI2dHR5LVxcdTAwM2VsZGlzY19zZW0pO1xcbiBcXHRyZXR1cm4gbGQ7XFxuQEAgLTU1NiwxNSArNTY2LDI4IEBAIGludCB0dHlfc2V0X2xkaXNjKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGludCBkaXNjKVxcbiBcXHQvKiBTaHV0ZG93biB0aGUgb2xkIGRpc2NpcGxpbmUuICovXFxuIFxcdHR0eV9sZGlzY19jbG9zZSh0dHksIG9sZF9sZGlzYyk7XFxuIFxcbi1cXHQvKiBOb3cgc2V0IHVwIHRoZSBuZXcgbGluZSBkaXNjaXBsaW5lLiAqL1xcbi1cXHR0dHktXFx1MDAzZWxkaXNjID0gbmV3X2xkaXNjO1xcbitcXHQvKiBDbGVhciB0dHktXFx1MDAzZWxkaXNjIHNvIGNvbmN1cnJlbnQgcmVhZGVycyBiYWNrIG9mZiBkdXJpbmcgdHJhbnNpdGlvbiAqL1xcbitcXHR0dHktXFx1MDAzZWxkaXNjID0gTlVMTDtcXG4gXFx0dHR5X3NldF90ZXJtaW9zX2xkaXNjKHR0eSwgZGlzYyk7XFxuK1xcdHR0eV9sZGlzY191bmxvY2sodHR5KTtcXG4gXFxuK1xcdC8qXFxuK1xcdCAqIE9wZW4gdGhlIG5ldyBkaXNjaXBsaW5lIG91dHNpZGUgbGRpc2Nfc2VtLiBUaGUgbGRpc2MgLm9wZW4oKVxcbitcXHQgKiBtYXkgYWNxdWlyZSBsb2NrcyAoZS5nLiwgcnRubF9tdXRleCkgdGhhdCB3b3VsZCBjcmVhdGUgY2lyY3VsYXJcXG4rXFx0ICogZGVwZW5kZW5jaWVzIGlmIHRha2VuIHVuZGVyIGxkaXNjX3NlbS4gdHR5X2xvY2sgaXMgc3RpbGwgaGVsZCxcXG4rXFx0ICogcHJldmVudGluZyBjb25jdXJyZW50IGxkaXNjIGNoYW5nZXMgYW5kIGhhbmd1cC5cXG4rXFx0ICovXFxuIFxcdHJldHZhbCA9IHR0eV9sZGlzY19vcGVuKHR0eSwgbmV3X2xkaXNjKTtcXG4rXFxuK1xcdHR0eV9sZGlzY19sb2NrKHR0eSwgTUFYX1NDSEVEVUxFX1RJTUVPVVQpO1xcbitcXG4gXFx0aWYgKHJldHZhbCBcXHUwMDNjIDApIHtcXG4gXFx0XFx0LyogQmFjayB0byB0aGUgb2xkIG9uZSBvciBOX1RUWSBpZiB3ZSBjYW4ndCAqL1xcbiBcXHRcXHR0dHlfbGRpc2NfcHV0KG5ld19sZGlzYyk7XFxuIFxcdFxcdHR0eV9sZGlzY19yZXN0b3JlKHR0eSwgb2xkX2xkaXNjKTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0LyogU3VjY2VzcyAtIGluc3RhbGwgbmV3IGxkaXNjICovXFxuK1xcdFxcdHR0eS1cXHUwMDNlbGRpc2MgPSBuZXdfbGRpc2M7XFxuIFxcdH1cXG4gXFxuIFxcdGlmICh0dHktXFx1MDAzZWxkaXNjLVxcdTAwM2VvcHMtXFx1MDAzZW51bSAhPSBvbGRfbGRpc2MtXFx1MDAzZW9wcy1cXHUwMDNlbnVtIFxcdTAwMjZcXHUwMDI2IHR0eS1cXHUwMDNlb3BzLVxcdTAwM2VzZXRfbGRpc2MpIHtcXG5AQCAtNTg0LDYgKzYwNyw5IEBAIGludCB0dHlfc2V0X2xkaXNjKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGludCBkaXNjKVxcbiBvdXQ6XFxuIFxcdHR0eV9sZGlzY191bmxvY2sodHR5KTtcXG4gXFxuK1xcdC8qIFdha2UgdXAgcmVhZGVycyB3YWl0aW5nIGZvciB0aGUgbGRpc2MgdHJhbnNpdGlvbiB0byBjb21wbGV0ZSAqL1xcbitcXHR3YWtlX3VwKFxcdTAwMjZ0dHktXFx1MDAzZXJlYWRfd2FpdCk7XFxuK1xcbiBcXHQvKlxcbiBcXHQgKiBSZXN0YXJ0IHRoZSB3b3JrIHF1ZXVlIGluIGNhc2Ugbm8gY2hhcmFjdGVycyBraWNrIGl0IG9mZi4gU2FmZSBpZlxcbiBcXHQgKiBhbHJlYWR5IHJ1bm5pbmdcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTM6MjA6MTEuMjE0Mjc1OTI2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NzMyMDE0MTY0MzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVFRZXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidHR5X3NldF9sZGlzY1wiLFxuICAgIFwidHR5X2xkaXNjX3JlZl93YWl0XCIsXG4gICAgXCJ0dHlfaGFuZ3VwXCIsXG4gICAgXCJ0dHlfdmhhbmd1cFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgVFRZIGxpbmUgZGlzY2lwbGluZSByZWZlcmVuY2UgY291bnRpbmcgYW5kIHRyYW5zaXRpb24gbG9naWMgKHR0eV9sZGlzY19yZWZfd2FpdCwgdHR5X3NldF9sZGlzYywgX190dHlfaGFuZ3VwKS4gVGhlc2UgZnVuY3Rpb25zIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIFRUWSBpb2N0bHMgKGUuZy4sIFRJT0NTRVRELCBUSU9DVkhBTkdVUCksIHJlYWQsIHdyaXRlLCBhbmQgcG9sbCBvcGVyYXRpb25zLiBUaGUgY2hhbmdlcyBpbnZvbHZlIGxvY2sgZHJvcHBpbmcgYW5kIHdhaXQgcXVldWUgd2FrZXVwcywgd2hpY2ggYXJlIHByb25lIHRvIHJhY2UgY29uZGl0aW9ucyBhbmQgZGVhZGxvY2tzLCBtYWtpbmcgdGhlbSBoaWdobHkgc3VpdGFibGUgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGFjNTgwZjQyMGJiNjIxYTE1NGU0YWM4MzNkNWI3ZjM2MGFiMzFmNzBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEp1bCAyNSAxMzoyMDowNyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L3R0eV9pby5jIGIvZHJpdmVycy90dHkvdHR5X2lvLmNcbmluZGV4IDZiMjgzZmQwM2ZmODI0Li5lMmY4MmU4MGYzOTdlNCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdHR5L3R0eV9pby5jXG4rKysgYi9kcml2ZXJzL3R0eS90dHlfaW8uY1xuQEAgLTY0OSw2ICs2NDksMTMgQEAgc3RhdGljIHZvaWQgX190dHlfaGFuZ3VwKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGludCBleGl0X3Nlc3Npb24pXG4gXHQgKi9cbiBcdHNldF9iaXQoVFRZX0hVUFBFRCwgXHUwMDI2dHR5LVx1MDAzZWZsYWdzKTtcbiBcdGNsZWFyX2JpdChUVFlfSFVQUElORywgXHUwMDI2dHR5LVx1MDAzZWZsYWdzKTtcbitcbitcdC8qXG4rXHQgKiBXYWtlIHVwIHJlYWRlcnMgYmxvY2tlZCBpbiB0dHlfbGRpc2NfcmVmX3dhaXQoKSB0aGF0IG1heSBoYXZlXG4rXHQgKiBzZWVuIGxkaXNjID09IE5VTEwgYnV0IG5vdCB5ZXQgVFRZX0hVUFBFRC5cbitcdCAqL1xuK1x0d2FrZV91cChcdTAwMjZ0dHktXHUwMDNlcmVhZF93YWl0KTtcbitcbiBcdHR0eV91bmxvY2sodHR5KTtcbiBcbiBcdGlmIChmKVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L3R0eV9sZGlzYy5jIGIvZHJpdmVycy90dHkvdHR5X2xkaXNjLmNcbmluZGV4IDI3ZmU4MjM2ZjY2MjMwLi42ZWM5M2U2Yjg0OTg4ZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdHR5L3R0eV9sZGlzYy5jXG4rKysgYi9kcml2ZXJzL3R0eS90dHlfbGRpc2MuY1xuQEAgLTI0Miw2ICsyNDIsMTYgQEAgc3RydWN0IHR0eV9sZGlzYyAqdHR5X2xkaXNjX3JlZl93YWl0KHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpXG4gXG4gXHRsZHNlbV9kb3duX3JlYWQoXHUwMDI2dHR5LVx1MDAzZWxkaXNjX3NlbSwgTUFYX1NDSEVEVUxFX1RJTUVPVVQpO1xuIFx0bGQgPSB0dHktXHUwMDNlbGRpc2M7XG4rXHR3aGlsZSAoIWxkIFx1MDAyNlx1MDAyNiAhdGVzdF9iaXQoVFRZX0hVUFBFRCwgXHUwMDI2dHR5LVx1MDAzZWZsYWdzKSkge1xuK1x0XHRsZHNlbV91cF9yZWFkKFx1MDAyNnR0eS1cdTAwM2VsZGlzY19zZW0pO1xuK1xuK1x0XHQvKiBsZGlzYyBtYXkgYmUgTlVMTCBkdXJpbmcgYSBkaXNjaXBsaW5lIHN3aXRjaDsgd2FpdCBhbmQgcmV0cnkgKi9cbitcdFx0d2FpdF9ldmVudCh0dHktXHUwMDNlcmVhZF93YWl0LFxuK1x0XHRcdCAgIFJFQURfT05DRSh0dHktXHUwMDNlbGRpc2MpICE9IE5VTEwgfHxcbitcdFx0XHQgICB0ZXN0X2JpdChUVFlfSFVQUEVELCBcdTAwMjZ0dHktXHUwMDNlZmxhZ3MpKTtcbitcdFx0bGRzZW1fZG93bl9yZWFkKFx1MDAyNnR0eS1cdTAwM2VsZGlzY19zZW0sIE1BWF9TQ0hFRFVMRV9USU1FT1VUKTtcbitcdFx0bGQgPSB0dHktXHUwMDNlbGRpc2M7XG4rXHR9XG4gXHRpZiAoIWxkKVxuIFx0XHRsZHNlbV91cF9yZWFkKFx1MDAyNnR0eS1cdTAwM2VsZGlzY19zZW0pO1xuIFx0cmV0dXJuIGxkO1xuQEAgLTU1NiwxNSArNTY2LDI4IEBAIGludCB0dHlfc2V0X2xkaXNjKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGludCBkaXNjKVxuIFx0LyogU2h1dGRvd24gdGhlIG9sZCBkaXNjaXBsaW5lLiAqL1xuIFx0dHR5X2xkaXNjX2Nsb3NlKHR0eSwgb2xkX2xkaXNjKTtcbiBcbi1cdC8qIE5vdyBzZXQgdXAgdGhlIG5ldyBsaW5lIGRpc2NpcGxpbmUuICovXG4tXHR0dHktXHUwMDNlbGRpc2MgPSBuZXdfbGRpc2M7XG4rXHQvKiBDbGVhciB0dHktXHUwMDNlbGRpc2Mgc28gY29uY3VycmVudCByZWFkZXJzIGJhY2sgb2ZmIGR1cmluZyB0cmFuc2l0aW9uICovXG4rXHR0dHktXHUwMDNlbGRpc2MgPSBOVUxMO1xuIFx0dHR5X3NldF90ZXJtaW9zX2xkaXNjKHR0eSwgZGlzYyk7XG4rXHR0dHlfbGRpc2NfdW5sb2NrKHR0eSk7XG4gXG4rXHQvKlxuK1x0ICogT3BlbiB0aGUgbmV3IGRpc2NpcGxpbmUgb3V0c2lkZSBsZGlzY19zZW0uIFRoZSBsZGlzYyAub3BlbigpXG4rXHQgKiBtYXkgYWNxdWlyZSBsb2NrcyAoZS5nLiwgcnRubF9tdXRleCkgdGhhdCB3b3VsZCBjcmVhdGUgY2lyY3VsYXJcbitcdCAqIGRlcGVuZGVuY2llcyBpZiB0YWtlbiB1bmRlciBsZGlzY19zZW0uIHR0eV9sb2NrIGlzIHN0aWxsIGhlbGQsXG4rXHQgKiBwcmV2ZW50aW5nIGNvbmN1cnJlbnQgbGRpc2MgY2hhbmdlcyBhbmQgaGFuZ3VwLlxuK1x0ICovXG4gXHRyZXR2YWwgPSB0dHlfbGRpc2Nfb3Blbih0dHksIG5ld19sZGlzYyk7XG4rXG4rXHR0dHlfbGRpc2NfbG9jayh0dHksIE1BWF9TQ0hFRFVMRV9USU1FT1VUKTtcbitcbiBcdGlmIChyZXR2YWwgXHUwMDNjIDApIHtcbiBcdFx0LyogQmFjayB0byB0aGUgb2xkIG9uZSBvciBOX1RUWSBpZiB3ZSBjYW4ndCAqL1xuIFx0XHR0dHlfbGRpc2NfcHV0KG5ld19sZGlzYyk7XG4gXHRcdHR0eV9sZGlzY19yZXN0b3JlKHR0eSwgb2xkX2xkaXNjKTtcbitcdH0gZWxzZSB7XG4rXHRcdC8qIFN1Y2Nlc3MgLSBpbnN0YWxsIG5ldyBsZGlzYyAqL1xuK1x0XHR0dHktXHUwMDNlbGRpc2MgPSBuZXdfbGRpc2M7XG4gXHR9XG4gXG4gXHRpZiAodHR5LVx1MDAzZWxkaXNjLVx1MDAzZW9wcy1cdTAwM2VudW0gIT0gb2xkX2xkaXNjLVx1MDAzZW9wcy1cdTAwM2VudW0gXHUwMDI2XHUwMDI2IHR0eS1cdTAwM2VvcHMtXHUwMDNlc2V0X2xkaXNjKSB7XG5AQCAtNTg0LDYgKzYwNyw5IEBAIGludCB0dHlfc2V0X2xkaXNjKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGludCBkaXNjKVxuIG91dDpcbiBcdHR0eV9sZGlzY191bmxvY2sodHR5KTtcbiBcbitcdC8qIFdha2UgdXAgcmVhZGVycyB3YWl0aW5nIGZvciB0aGUgbGRpc2MgdHJhbnNpdGlvbiB0byBjb21wbGV0ZSAqL1xuK1x0d2FrZV91cChcdTAwMjZ0dHktXHUwMDNlcmVhZF93YWl0KTtcbitcbiBcdC8qXG4gXHQgKiBSZXN0YXJ0IHRoZSB3b3JrIHF1ZXVlIGluIGNhc2Ugbm8gY2hhcmFjdGVycyBraWNrIGl0IG9mZi4gU2FmZSBpZlxuIFx0ICogYWxyZWFkeSBydW5uaW5nXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxMzoyMDoxMS4yMTQyNzg5MTZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NTU0MjQzMDc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVFRZIExpbmUgRGlzY2lwbGluZSBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0J3MgaGl0dGluZyBgdHR5X2lvLmNgIGFuZCBgdHR5X2xkaXNjLmNgIGluIHRoZSBUVFkgc3Vic3lzdGVtLiBTZWVtcyBsaWtlIHdlJ3JlIGRpdmluZyBkZWVwIGludG8gbGluZSBkaXNjaXBsaW5lIG1hbmFnZW1lbnQuIFRoZSBrZXkgZnVuY3Rpb25zIGJlaW5nIG1vZGlmaWVkIGFyZSBgX190dHlfaGFuZ3VwYCwgYHR0eV9sZGlzY19yZWZfd2FpdGAsIGFuZCBgdHR5X3NldF9sZGlzY2AuIEludGVyZXN0aW5nLlxuXG5GaXJzdCwgSSBzZWUgYSBgd2FrZV91cChcdTAwMjZ0dHktXHUwMDNlcmVhZF93YWl0KWAgYmVpbmcgYWRkZWQgd2l0aGluIGBfX3R0eV9oYW5ndXBgLiBUaGF0J3MgYSBkaXJlY3Qgc2lnbmFsIHRvIHdha2UgdXAgd2FpdGluZyByZWFkZXJzIG9uIHRoZSBUVFksIGxpa2VseSBpbmRpY2F0aW5nIGEgaGFuZ3VwIGV2ZW50LiBUaGVuLCBgdHR5X2xkaXNjX3JlZl93YWl0YCBpcyBiZWluZyB1cGRhdGVkIHRvIHdhaXQgZWl0aGVyIGZvciBgdHR5LVx1MDAzZWxkaXNjYCB0byBiZWNvbWUgbm9uLU5VTEwgb3IgdGhlIGBUVFlfSFVQUEVEYCBmbGFnIHRvIGJlIHNldC4gVGhhdCdzIGEgY2xhc3NpYyBzeW5jaHJvbml6YXRpb24gY29uc3RydWN0OyBtYWtpbmcgc3VyZSB0aGUgbGluZSBkaXNjaXBsaW5lIGlzIHJlYWR5IG9yIHRoYXQgYSBoYW5ndXAgaGFzIGhhcHBlbmVkIGJlZm9yZSBwcm9jZWVkaW5nLlxuXG5gdHR5X3NldF9sZGlzY2AgaXMgZ2V0dGluZyBzb21lIHJld29yayB0b28uIEkgbm90aWNlIHRoYXQgYHR0eS1cdTAwM2VsZGlzY2AgaXMgc2V0IHRvIE5VTEwgZHVyaW5nIHRoZSB0cmFuc2l0aW9uLCB0aGUgYGxkaXNjX3NlbWAgaXMgdW5sb2NrZWQsIGB0dHlfbGRpc2Nfb3BlbmAgaXMgY2FsbGVkICh3aGljaCB3aWxsIGxpa2VseSBpbml0aWFsaXplIHRoZSBuZXcgbGluZSBkaXNjaXBsaW5lKSwgYW5kIHRoZW4gYGxkaXNjX3NlbWAgaXMgbG9ja2VkIGFnYWluLiBUaGlzIGlzIGEgY29tbW9uIHBhdHRlcm4gZm9yIHNhZmVseSBzd2FwcGluZyBvdXQgdGhlIGxpbmUgZGlzY2lwbGluZSBpbiBhIHRocmVhZGVkIGVudmlyb25tZW50LiBFbnN1cmluZyB0aGF0IGxvY2tpbmcgYW5kIHVubG9ja2luZyBpcyBoYW5kbGVkIGNvcnJlY3RseSBpcyBjcnVjaWFsIGhlcmUuXG5cbkZyb20gYSBmdW5jdGlvbmFsIHN0YW5kcG9pbnQsIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgbGllcyBpbiB0aGVzZSB0aHJlZSBmdW5jdGlvbnM6IGB0dHlfbGRpc2NfcmVmX3dhaXRgLCBgdHR5X3NldF9sZGlzY2AsIGFuZCB0aGUgaGFuZ3VwIGZ1bmN0aW9uLCB0aG91Z2ggSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoYXQgYF9fdHR5X2hhbmd1cGAgaXMgc3RhdGljOyBpdCBtaWdodCBiZSBgdHR5X2hhbmd1cGAgb3IgYHR0eV92aGFuZ3VwYCBpbnN0ZWFkLiBUaGUgaW1wb3J0YW50IG9uZXMgYXJlIHRoZSBleHBvcnRlZCBgdHR5X2xkaXNjX3JlZl93YWl0YCBhbmQgYHR0eV9zZXRfbGRpc2NgLlxuXG5Ob3csIEkgbmVlZCB0byBjb25zaWRlciBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gVGhpcyBzZWVtcyBsaWtlIGEgY29yZSBUVFkgc3Vic3lzdGVtIGNoYW5nZSwgc28gY2hhbmNlcyBhcmUgYENPTkZJR19UVFlgIGlzICphbHdheXMqIGVuYWJsZWQuIEkgc2hvdWxkIHZlcmlmeSB0aGF0LCBqdXN0IHRvIGJlIHN1cmUuIEknbSBnb2luZyB0byBydW4gYGdyZXBwZXJgIGFuZCBsb29rIGZvciBpbnN0YW5jZXMgb2YgYHR0eV9sZGlzY19yZWZfd2FpdGAgYW5kIGB0dHlfc2V0X2xkaXNjYCB0byBjb25maXJtIHVzYWdlIGFuZCBwaW5wb2ludCBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzLiBBbHdheXMgYSBnb29kIHByYWN0aWNlIHRvIGZvbGxvdyB0aGUgY2FsbCBjaGFpbiBhbmQgZG91YmxlIGNoZWNrIHRoZSBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTU1LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTM6MjA6MTcuNzY4NTI1MTY1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg2ODc2MDI2MTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidHR5X2xkaXNjX3JlZl93YWl0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS90dHkvdHR5X2xkaXNjLnJzdD02Nj1idXQgbm90IHlldCBlbmZvcmNlZC5cXG4tLVxcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS90dHkvdHR5X2xkaXNjLnJzdC02OC0uLiBrZXJuZWwtZG9jOjogZHJpdmVycy90dHkvdHR5X2xkaXNjLmNcXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvdHR5L3R0eV9sZGlzYy5yc3Q6Njk6ICAgOmlkZW50aWZpZXJzOiB0dHlfbGRpc2NfcmVmX3dhaXQgdHR5X2xkaXNjX3JlZiB0dHlfbGRpc2NfZGVyZWZcXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvdHR5L3R0eV9sZGlzYy5yc3QtNzAtXFxuLS1cXG5kcml2ZXJzL3R0eS90dHlfaW8uYz01Njg9c3RhdGljIHZvaWQgX190dHlfaGFuZ3VwKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGludCBleGl0X3Nlc3Npb24pXFxuLS1cXG5kcml2ZXJzL3R0eS90dHlfaW8uYy02NTMtXFx0LypcXG5kcml2ZXJzL3R0eS90dHlfaW8uYzo2NTQ6XFx0ICogV2FrZSB1cCByZWFkZXJzIGJsb2NrZWQgaW4gdHR5X2xkaXNjX3JlZl93YWl0KCkgdGhhdCBtYXkgaGF2ZVxcbmRyaXZlcnMvdHR5L3R0eV9pby5jLTY1NS1cXHQgKiBzZWVuIGxkaXNjID09IE5VTEwgYnV0IG5vdCB5ZXQgVFRZX0hVUFBFRC5cXG4tLVxcbmRyaXZlcnMvdHR5L3R0eV9pby5jPTkwOD1zdGF0aWMgc3NpemVfdCB0dHlfcmVhZChzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqdG8pXFxuLS1cXG5kcml2ZXJzL3R0eS90dHlfaW8uYy05MjMtXFx0ICovXFxuZHJpdmVycy90dHkvdHR5X2lvLmM6OTI0OlxcdGxkID0gdHR5X2xkaXNjX3JlZl93YWl0KHR0eSk7XFxuZHJpdmVycy90dHkvdHR5X2lvLmMtOTI1LVxcdGlmICghbGQpXFxuLS1cXG5kcml2ZXJzL3R0eS90dHlfaW8uYz0xMDY5PXN0YXRpYyBzc2l6ZV90IGZpbGVfdHR5X3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcXG4tLVxcbmRyaXZlcnMvdHR5L3R0eV9pby5jLTEwODEtXFx0XFx0dHR5X2Vycih0dHksIFxcXCJtaXNzaW5nIHdyaXRlX3Jvb20gbWV0aG9kXFxcXG5cXFwiKTtcXG5kcml2ZXJzL3R0eS90dHlfaW8uYzoxMDgyOlxcdGxkID0gdHR5X2xkaXNjX3JlZl93YWl0KHR0eSk7XFxuZHJpdmVycy90dHkvdHR5X2lvLmMtMTA4My1cXHRpZiAoIWxkKVxcbi0tXFxuZHJpdmVycy90dHkvdHR5X2lvLmM9MTMzMz1zdGF0aWMgaW50IHR0eV9yZW9wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSlcXG4tLVxcbmRyaXZlcnMvdHR5L3R0eV9pby5jLTEzNDgtXFxuZHJpdmVycy90dHkvdHR5X2lvLmM6MTM0OTpcXHRsZCA9IHR0eV9sZGlzY19yZWZfd2FpdCh0dHkpO1xcbmRyaXZlcnMvdHR5L3R0eV9pby5jLTEzNTAtXFx0aWYgKGxkKSB7XFxuLS1cXG5kcml2ZXJzL3R0eS90dHlfaW8uYz0yMTkzPXN0YXRpYyBfX3BvbGxfdCB0dHlfcG9sbChzdHJ1Y3QgZmlsZSAqZmlscCwgcG9sbF90YWJsZSAqd2FpdClcXG4tLVxcbmRyaXZlcnMvdHR5L3R0eV9pby5jLTIyMDEtXFxuZHJpdmVycy90dHkvdHR5X2lvLmM6MjIwMjpcXHRsZCA9IHR0eV9sZGlzY19yZWZfd2FpdCh0dHkpO1xcbmRyaXZlcnMvdHR5L3R0eV9pby5jLTIyMDMtXFx0aWYgKCFsZClcXG4tLVxcbmRyaXZlcnMvdHR5L3R0eV9pby5jPTIyNzk9c3RhdGljIGludCB0aW9jc3RpKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHU4IF9fdXNlciAqcClcXG4tLVxcbmRyaXZlcnMvdHR5L3R0eV9pby5jLTIyOTEtXFx0dHR5X2F1ZGl0X3Rpb2NzdGkodHR5LCBjaCk7XFxuZHJpdmVycy90dHkvdHR5X2lvLmM6MjI5MjpcXHRsZCA9IHR0eV9sZGlzY19yZWZfd2FpdCh0dHkpO1xcbmRyaXZlcnMvdHR5L3R0eV9pby5jLTIyOTMtXFx0aWYgKCFsZClcXG4tLVxcbmRyaXZlcnMvdHR5L3R0eV9pby5jPTI0NTE9c3RhdGljIGludCB0aW9jZ2V0ZChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBpbnQgX191c2VyICpwKVxcbi0tXFxuZHJpdmVycy90dHkvdHR5X2lvLmMtMjQ1NS1cXG5kcml2ZXJzL3R0eS90dHlfaW8uYzoyNDU2OlxcdGxkID0gdHR5X2xkaXNjX3JlZl93YWl0KHR0eSk7XFxuZHJpdmVycy90dHkvdHR5X2lvLmMtMjQ1Ny1cXHRpZiAoIWxkKVxcbi0tXFxuZHJpdmVycy90dHkvdHR5X2lvLmM9MjY3NT1sb25nIHR0eV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuLS1cXG5kcml2ZXJzL3R0eS90dHlfaW8uYy0yODAyLVxcdH1cXG5kcml2ZXJzL3R0eS90dHlfaW8uYzoyODAzOlxcdGxkID0gdHR5X2xkaXNjX3JlZl93YWl0KHR0eSk7XFxuZHJpdmVycy90dHkvdHR5X2lvLmMtMjgwNC1cXHRpZiAoIWxkKVxcbi0tXFxuZHJpdmVycy90dHkvdHR5X2lvLmM9Mjg4Mj1zdGF0aWMgbG9uZyB0dHlfY29tcGF0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLFxcbi0tXFxuZHJpdmVycy90dHkvdHR5X2lvLmMtMjk4Mi1cXG5kcml2ZXJzL3R0eS90dHlfaW8uYzoyOTgzOlxcdGxkID0gdHR5X2xkaXNjX3JlZl93YWl0KHR0eSk7XFxuZHJpdmVycy90dHkvdHR5X2lvLmMtMjk4NC1cXHRpZiAoIWxkKVxcbi0tXFxuZHJpdmVycy90dHkvdHR5X2lvY3RsLmM9OTIxPWludCB0dHlfcGVyZm9ybV9mbHVzaChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCB1bnNpZ25lZCBsb25nIGFyZylcXG4tLVxcbmRyaXZlcnMvdHR5L3R0eV9pb2N0bC5jLTkyNy1cXG5kcml2ZXJzL3R0eS90dHlfaW9jdGwuYzo5Mjg6XFx0bGQgPSB0dHlfbGRpc2NfcmVmX3dhaXQodHR5KTtcXG5kcml2ZXJzL3R0eS90dHlfaW9jdGwuYy05MjktXFx0cmV0dmFsID0gX190dHlfcGVyZm9ybV9mbHVzaCh0dHksIGFyZyk7XFxuLS1cXG5kcml2ZXJzL3R0eS90dHlfbGRpc2MuYz0yMTU9Y29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIHR0eV9sZGlzY3Nfc2VxX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvdHR5L3R0eV9sZGlzYy5jLTIyMi0vKipcXG5kcml2ZXJzL3R0eS90dHlfbGRpc2MuYzoyMjM6ICogdHR5X2xkaXNjX3JlZl93YWl0XFx0LVxcdHdhaXQgZm9yIHRoZSB0dHkgbGRpc2NcXG5kcml2ZXJzL3R0eS90dHlfbGRpc2MuYy0yMjQtICogQHR0eTogdHR5IGRldmljZVxcbi0tXFxuZHJpdmVycy90dHkvdHR5X2xkaXNjLmMtMjM4LSAqL1xcbmRyaXZlcnMvdHR5L3R0eV9sZGlzYy5jOjIzOTpzdHJ1Y3QgdHR5X2xkaXNjICp0dHlfbGRpc2NfcmVmX3dhaXQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSlcXG5kcml2ZXJzL3R0eS90dHlfbGRpc2MuYy0yNDAte1xcbi0tXFxuZHJpdmVycy90dHkvdHR5X2xkaXNjLmMtMjU4LX1cXG5kcml2ZXJzL3R0eS90dHlfbGRpc2MuYzoyNTk6RVhQT1JUX1NZTUJPTF9HUEwodHR5X2xkaXNjX3JlZl93YWl0KTtcXG5kcml2ZXJzL3R0eS90dHlfbGRpc2MuYy0yNjAtXFxuLS1cXG5kcml2ZXJzL3R0eS90dHlfbGRpc2MuYz0yODA9RVhQT1JUX1NZTUJPTF9HUEwodHR5X2xkaXNjX3JlZik7XFxuLS1cXG5kcml2ZXJzL3R0eS90dHlfbGRpc2MuYy0yODUtICpcXG5kcml2ZXJzL3R0eS90dHlfbGRpc2MuYzoyODY6ICogVW5kb2VzIHRoZSBlZmZlY3Qgb2YgdHR5X2xkaXNjX3JlZigpIG9yIHR0eV9sZGlzY19yZWZfd2FpdCgpLiBNYXkgYmUgY2FsbGVkXFxuZHJpdmVycy90dHkvdHR5X2xkaXNjLmMtMjg3LSAqIGluIElSUSBjb250ZXh0Llxcbi0tXFxuZHJpdmVycy90dHkvdnQvc2VsZWN0aW9uLmM9MzkxPWludCBwYXN0ZV9zZWxlY3Rpb24oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSlcXG4tLVxcbmRyaXZlcnMvdHR5L3Z0L3NlbGVjdGlvbi5jLTQwOC1cXG5kcml2ZXJzL3R0eS92dC9zZWxlY3Rpb24uYzo0MDk6XFx0bGQgPSB0dHlfbGRpc2NfcmVmX3dhaXQodHR5KTtcXG5kcml2ZXJzL3R0eS92dC9zZWxlY3Rpb24uYy00MTAtXFx0aWYgKCFsZClcXG4tLVxcbmluY2x1ZGUvbGludXgvdHR5X2xkaXNjLmg9Mjc5PXZvaWQgdHR5X2xkaXNjX2RlcmVmKHN0cnVjdCB0dHlfbGRpc2MgKik7XFxuaW5jbHVkZS9saW51eC90dHlfbGRpc2MuaDoyODA6c3RydWN0IHR0eV9sZGlzYyAqdHR5X2xkaXNjX3JlZl93YWl0KHN0cnVjdCB0dHlfc3RydWN0ICopO1xcbmluY2x1ZGUvbGludXgvdHR5X2xkaXNjLmgtMjgxLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxMzoyMDoyNi40NTYxMzQzMjJaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MTUzMzYzMDgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgdGhlIFRUWSBMaW5lIERpc2NpcGxpbmUgQ2hhbmdlcyoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYHR0eV9sZGlzY19yZWZfd2FpdGAgYW5kIGB0dHlfc2V0X2xkaXNjYC4gVGhhdCdzIGludGVyZXN0aW5nLCBhbmQgcmlnaHQgYXdheSBJJ20gdGhpbmtpbmcsIFwiZnV6emluZyB0YXJnZXQuXCIgYHR0eV9zZXRfbGRpc2NgIGdldHMgY2FsbGVkIHRocm91Z2ggdGhlIGBUSU9DU0VURGAgaW9jdGwsIHdoaWNoIG1lYW5zIHRoZXJlJ3MgYSByZWxhdGl2ZWx5IHN0cmFpZ2h0Zm9yd2FyZCB1c2VyLXNwYWNlIGVudHJ5IHBvaW50LiBCdXQgYHR0eV9sZGlzY19yZWZfd2FpdGAgaXMgdGhlIHJlYWwgc3RhciBoZXJlIOKAkyBpdCdzIGNhbGxlZCBmcm9tICpldmVyeXdoZXJlKjogYHR0eV9yZWFkYCwgYGZpbGVfdHR5X3dyaXRlYCwgYHR0eV9wb2xsYCwgZXZlbiBgdGlvY3N0aWAsIGB0aW9jZ2V0ZGAsIGFsbCB0aGUgd2F5IGRvd24gdG8gYHBhc3RlX3NlbGVjdGlvbmAuIFRoYXQgbGV2ZWwgb2YgaW50ZWdyYXRpb24gbWFrZXMgaXQgYSBwcmltZSBjYW5kaWRhdGUgZm9yIHNvbWUgdGFyZ2V0ZWQgZnV6emluZy4gSSBjYW4gYWxyZWFkeSBzZWUgdGhlIHBvdGVudGlhbCBmb3Igc29tZSBjb21wbGV4IHN0YXRlIHRyYW5zaXRpb25zIGFuZCByYWNlIGNvbmRpdGlvbnMgbHVya2luZyB0aGVyZS5cblxuTXkgZm9jdXMgc2hvdWxkIGJlIHNoYXJwOiBgdHR5X3NldF9sZGlzY2AgZm9yIHRoZSBlbnRyeSBwb2ludCwgbmF0dXJhbGx5LCBhbmQgdGhlbiBvZiBjb3Vyc2UgYHR0eV9sZGlzY19yZWZfd2FpdGAuIEJ1dCBpdCdzIHdvcnRoIGNvbnNpZGVyaW5nIGB0dHlfaGFuZ3VwYCBhbmQgYHR0eV92aGFuZ3VwYCBhcyB3ZWxsLiBUaGV5IHNlZW0gcmVsYXRlZCBhbmQgYXJlIGxpa2VseSB0byBiZSBwYXJ0IG9mIHRoZSBjbGVhbnVwIHByb2NlZHVyZXMsIHNvIHRoZXkgbWlnaHQgaW50ZXJhY3Qgd2l0aCB0aGUgb3RoZXIgdHdvIGluIGludGVyZXN0aW5nIHdheXMuIExldCdzIHF1aWNrbHkgY2hlY2sgdG8gc2VlIGlmIHRob3NlIGxhc3QgdHdvIGFyZSBldmVuIGV4cG9ydGVkIHN5bWJvbHM7IGlmIG5vdCwgd2UgY2FuIGRpc3JlZ2FyZCB0aGVtLiBCdXQgaWYgdGhleSBhcmUsIHRoYXQgZXhwYW5kcyB0aGUgcG90ZW50aWFsIGF0dGFjayBzdXJmYWNlIHNpZ25pZmljYW50bHkuIFRoaXMgbG9va3MgbGlrZSBhIHByb21pc2luZyBhdmVudWUgZm9yIHVuY292ZXJpbmcgc29tZSBzdWJ0bGUgdnVsbmVyYWJpbGl0aWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1Njg2LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDEzOjIwOjMyLjYwOTUwMDM0NVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NTgxMzQ4NzIyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKnR0eV9oYW5ndXBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy90dHkvdHR5X2lvLmM9NjgwPXZvaWQgdHR5X2hhbmd1cChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KVxcbi0tXFxuZHJpdmVycy90dHkvdHR5X2lvLmMtNjg0LX1cXG5kcml2ZXJzL3R0eS90dHlfaW8uYzo2ODU6RVhQT1JUX1NZTUJPTCh0dHlfaGFuZ3VwKTtcXG5kcml2ZXJzL3R0eS90dHlfaW8uYy02ODYtXFxuLS1cXG5kcml2ZXJzL3R0eS90dHlfcG9ydC5jPTQwND12b2lkIF9fdHR5X3BvcnRfdHR5X2hhbmd1cChzdHJ1Y3QgdHR5X3BvcnQgKnBvcnQsIGJvb2wgY2hlY2tfY2xvY2FsLCBib29sIGFzeW5jKVxcbi0tXFxuZHJpdmVycy90dHkvdHR5X3BvcnQuYy00MTYtfVxcbmRyaXZlcnMvdHR5L3R0eV9wb3J0LmM6NDE3OkVYUE9SVF9TWU1CT0xfR1BMKF9fdHR5X3BvcnRfdHR5X2hhbmd1cCk7XFxuZHJpdmVycy90dHkvdHR5X3BvcnQuYy00MTgtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDEzOjIwOjQwLjE5MTc0MDQ1N1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNTEyOTQ2MTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQ29uc2lkZXJpbmcgdGhlIEltcGFjdCBvZiBgdHR5X3ZoYW5ndXBgKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IHRoZSBjdXJyZW50IHNpdHVhdGlvbiwgYW5kIG15IG1pbmQgaW1tZWRpYXRlbHkganVtcHMgdG8gYHR0eV92aGFuZ3VwYC4gSXQncyBhIGtleSBmdW5jdGlvbiwgYW5kIGl0cyBiZWhhdmlvciBjb3VsZCBiZSByZWxldmFudCBoZXJlLCBkZXBlbmRpbmcgb24gdGhlIHNwZWNpZmljcyBvZiB0aGUgcHJvYmxlbSB3ZSdyZSB0cm91Ymxlc2hvb3RpbmcuIEkgbmVlZCB0byBxdWlja2x5IGFzc2VzcyB3aGV0aGVyIGl0J3MgaW52b2x2ZWQgaW4gdGhpcyBwYXJ0aWN1bGFyIHNjZW5hcmlvLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcXVpY2tseSBjb25zaWRlciB0aGUgcG90ZW50aWFsIGludGVyYWN0aW9ucyBvZiBgdHR5X3ZoYW5ndXBgLiBBcmUgdGhlcmUgY29uZGl0aW9ucyB3aGVyZSBpdCBjb3VsZCBiZSBtYXNraW5nIG9yIGV4YWNlcmJhdGluZyB0aGUgaXNzdWU/IE9yLCBpcyBpdCBwZXJoYXBzIGEgcmVkIGhlcnJpbmc/IEkgbmVlZCB0byBhbmFseXplIGl0cyBjYWxsIGdyYXBoIHdpdGhpbiB0aGUgcmVsZXZhbnQgc3Vic3lzdGVtIHRvIGdldCBhIGZlZWwgZm9yIGhvdyBpdCBtaWdodCBiZSBpbnRlcmFjdGluZyB3aXRoIHRoZSBvYnNlcnZlZCBzeW1wdG9tcy4gSXMgdGhlcmUgYW55IHBvc3NpYmlsaXR5IG9mIHNvbWUga2luZCBvZiBhIHJhY2UgY29uZGl0aW9uIGludm9sdmluZyBgdHR5X3ZoYW5ndXBgLCBvciBhcmUgaXRzIHNlbWFudGljcyBzdHJhaWdodGZvcndhcmQgaW4gdGhpcyBjYXNlPyBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgaXRzIHJlbGV2YW5jZSwgYW5kIGlmIGl0J3MgcG90ZW50aWFsbHkgaW1wb3J0YW50LCBJJ2xsIGRlbHZlIGRlZXBlciB0byBzZWUgaWYgaXQgbmVlZHMgZnVydGhlciBkZWJ1Z2dpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY0MTUsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxMzoyMDo0My4zNDMwMzg2NTdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQ2NzY2NDcyMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MLip0dHlfdmhhbmd1cFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3R0eS90dHlfaW8uYz02OTU9dm9pZCB0dHlfdmhhbmd1cChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KVxcbi0tXFxuZHJpdmVycy90dHkvdHR5X2lvLmMtNjk5LX1cXG5kcml2ZXJzL3R0eS90dHlfaW8uYzo3MDA6RVhQT1JUX1NZTUJPTCh0dHlfdmhhbmd1cCk7XFxuZHJpdmVycy90dHkvdHR5X2lvLmMtNzAxLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxMzoyMDo1MC44MTA3MTA4NThaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNzEyOTg3NzA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGlzOlxuXG4qKkFuYWx5emluZyBgdHR5X3NldF9sZGlzY2AqKlxuXG5BbHJpZ2h0LCB0aGUgb2JqZWN0aXZlIGlzIHByZXR0eSBjbGVhcjogbGV0J3MgZ2V0IGEgaGFuZGxlIG9uIHdoYXQgYHR0eV9zZXRfbGRpc2NgIGlzIGFsbCBhYm91dC4gVGhpcyBpcyBhIGNydWNpYWwgZnVuY3Rpb24sIG9idmlvdXNseSwgYW5kIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvciBpbnZlc3RpZ2F0ZSBpdCBmcm9tIGEgbmV3IHBlcnNwZWN0aXZlLiBUaW1lIHRvIHRoaW5rIHRoaXMgdGhyb3VnaDogd2hhdCBpcyBpdCBkb2luZywgd2hhdCdzIGl0IHVzZWQgZm9yLCB3aGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIG9mIGl0cyBleGVjdXRpb24/IEkgc2hvdWxkIHByb2JhYmx5IHN0YXJ0IGJ5IHF1aWNrbHkgY2hlY2tpbmcgdGhlIGNvZGUgYmFzZSB0byBpZGVudGlmeSB3aGVyZSB0aGlzIGlzIHVzZWQgYW5kIHdoaWNoIGRhdGEgc3RydWN0dXJlcyBhcmUgYWNjZXNzZWQuIExldCdzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NzcyLCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTM6MjA6NTMuNTIzNzAyMjg2WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2Mjg4OTgyMTEyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKnR0eV9zZXRfbGRpc2NcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy90dHkvdHR5X2xkaXNjLmM9NTI5PWludCB0dHlfc2V0X2xkaXNjKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGludCBkaXNjKVxcbi0tXFxuZHJpdmVycy90dHkvdHR5X2xkaXNjLmMtNjIyLX1cXG5kcml2ZXJzL3R0eS90dHlfbGRpc2MuYzo2MjM6RVhQT1JUX1NZTUJPTF9HUEwodHR5X3NldF9sZGlzYyk7XFxuZHJpdmVycy90dHkvdHR5X2xkaXNjLmMtNjI0LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxMzoyMDo1OS44MTI2OTgwMThaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI1Njg0NDA1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkFuYWx5emluZyBUVFkgTGluZSBEaXNjaXBsaW5lIEZ1bmN0aW9ucyoqXG5cblJpZ2h0LCBteSBtZW50YWwgY2hlY2tsaXN0IGJlZ2lucyB3aXRoIHRoZSBrZXkgZnVuY3Rpb25zIGFzc29jaWF0ZWQgd2l0aCBUVFkgbGluZSBkaXNjaXBsaW5lczogYHR0eV9zZXRfbGRpc2NgLCBgdHR5X2xkaXNjX3JlZl93YWl0YCwgYHR0eV9oYW5ndXBgLCBhbmQgYHR0eV92aGFuZ3VwYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlaXIgcm9sZXMgd2l0aGluIHRoZSBzeXN0ZW0uIEFyZSB0aGVyZSBhbnkgY29uZmlndXJhdGlvbiBwcmVyZXF1aXNpdGVzIEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gVXN1YWxseSwgYENPTkZJR19UVFlgIGlzIGEgZ2l2ZW4sIGJ1dCBJJ2xsIGRvdWJsZS1jaGVjayBmb3IgYW55IG1vcmUgc3BlY2lmaWMgb3Igb2JzY3VyZSBjb25maWd1cmF0aW9ucyB0aGF0IG1pZ2h0IGltcGFjdCB0aGUgZnVuY3Rpb25hbGl0eSBvciBiZWhhdmlvciBvZiB0aGVzZSByb3V0aW5lcy4gSXQncyBjcnVjaWFsIHRvIGlkZW50aWZ5IGlmIGFueSBzcGVjaWZpYyBmZWF0dXJlcyBvciBkZXBlbmRlbmNpZXMgbmVlZCB0byBiZSBlbmFibGVkLiBJIG5lZWQgdG8gZW5zdXJlIGEgY29tcGxldGUgcGljdHVyZSBvZiB0aGUgbGFuZHNjYXBlIGJlZm9yZSBtb3ZpbmcgZm9yd2FyZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzA2MSwiT3V0cHV0VG9rZW5zIjoxNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDEzOjIxOjAzLjA2OTU0ODMzWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODcxNDY3NTk3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBUVFlcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC91bS9kcml2ZXJzL0tjb25maWc9NDA9Y29uZmlnIFBUWV9DSEFOXFxuLS1cXG5hcmNoL3VtL2RyaXZlcnMvS2NvbmZpZy00OS1cXG5hcmNoL3VtL2RyaXZlcnMvS2NvbmZpZzo1MDpjb25maWcgVFRZX0NIQU5cXG5hcmNoL3VtL2RyaXZlcnMvS2NvbmZpZy01MS1cXHRib29sIFxcXCJ0dHkgY2hhbm5lbCBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9jaGFyL0tjb25maWc9OD1zb3VyY2UgXFxcImRyaXZlcnMvdHR5L0tjb25maWdcXFwiXFxuZHJpdmVycy9jaGFyL0tjb25maWctOS1cXG5kcml2ZXJzL2NoYXIvS2NvbmZpZzoxMDpjb25maWcgVFRZX1BSSU5US1xcbmRyaXZlcnMvY2hhci9LY29uZmlnLTExLVxcdHRyaXN0YXRlIFxcXCJUVFkgZHJpdmVyIHRvIG91dHB1dCB1c2VyIG1lc3NhZ2VzIHZpYSBwcmludGtcXFwiXFxuLS1cXG5kcml2ZXJzL2NoYXIvS2NvbmZpZy0yNS1cXG5kcml2ZXJzL2NoYXIvS2NvbmZpZzoyNjpjb25maWcgVFRZX1BSSU5US19MRVZFTFxcbmRyaXZlcnMvY2hhci9LY29uZmlnLTI3LVxcdGRlcGVuZHMgb24gVFRZX1BSSU5US1xcbi0tXFxuZHJpdmVycy90dHkvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG5kcml2ZXJzL3R0eS9LY29uZmlnOjI6Y29uZmlnIFRUWVxcbmRyaXZlcnMvdHR5L0tjb25maWctMy1cXHRib29sIFxcXCJFbmFibGUgVFRZXFxcIiBpZiBFWFBFUlRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTM6MjE6MDguOTQxMDUxNjk3WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2MTc3MzA1OTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gdGhpcyBrZXJuZWwgY29uZmlnIHNpdHVhdGlvbi5cblxuKipLZXJuZWwgQ29uZmlndXJhdGlvbiBDb25zaWRlcmF0aW9ucyBmb3IgVFRZIEZ1bmN0aW9uYWxpdHkqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgdGFzayBpcyB0byBpZGVudGlmeSBrZXJuZWwgY29uZmlnIGZsYWdzIG5lZWRlZCBmb3IgY29tcGlsaW5nIGFuZCB0ZXN0aW5nIG1vZGlmaWVkIGNvZGUsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIFRUWSBzdWJzeXN0ZW0uIFRoZSBwcm9tcHQgZW1waGFzaXplcyAqZXhwbGljaXQqIGVuYWJsaW5nLiBJbml0aWFsbHksIG15IGludHVpdGlvbiBpcyB0aGF0IGBDT05GSUdfVFRZYCBpcyB0aGUgb2J2aW91cyBzdGFydGluZyBwb2ludC4gSXQncyB0aGUgY29yZSBUVFkgY29uZmlnIGFuZCB0eXBpY2FsbHkgZW5hYmxlZCBieSBkZWZhdWx0LiBJJ2QgdXN1YWxseSBhc3N1bWUgaXQncyBpbXBsaWNpdCwgYnV0IGdpdmVuIHRoZSBwaHJhc2luZyBvZiB0aGUgcXVlc3Rpb24sIGxpc3RpbmcgaXQgd291bGQgYmUgcHJ1ZGVudC4gVGhlbiBJIHRob3VnaHQgYWJvdXQgdGhlIGluc3RydWN0aW9ucyByZXF1aXJpbmcgKmV4cGxpY2l0KiBlbmFibGluZy4gV2VsbCwganVzdCBsaXN0aW5nIGBUVFlgIHdvdWxkIGJlIGVub3VnaC5cblxuTm93LCB0byBiZSB0aG9yb3VnaCDigJMgYW5kIHRoaXMgaXMga2V5IHRvIGdldHRpbmcgdGhlICpyaWdodCogYW5zd2VyIOKAkyBJIG5lZWQgdG8gY2hlY2sgZm9yIGFueSBkZXBlbmRlbmNpZXMgbHVya2luZyBpbiB0aGUgY29kZSBpdHNlbGYuIEknbGwgbmVlZCB0byBzY3J1dGluaXplIGBkcml2ZXJzL3R0eS90dHlfaW8uY2AgYW5kIGBkcml2ZXJzL3R0eS90dHlfbGRpc2MuY2AuIE15IHN0cmF0ZWd5IHdpbGwgYmUgdG8gbG9vayBmb3IgYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGRpcmVjdGl2ZXMgKGAjaWZkZWZgLCBgI2lmYCkgYXJvdW5kIHRoZSBmdW5jdGlvbnMsIGFuZCB0aGVzZSB3b3VsZCBiZSB0aGUgY29uZmlnIGZsYWdzIHRoYXQgSSBtdXN0IGluY2x1ZGUuIFRoYXQgd2lsbCBwcm92aWRlIGEgY29tcGxldGUgbGlzdCBvZiByZXF1aXJlZCBjb25maWdzLCBhbmQgbm90aGluZyB3aWxsIGJlIG1pc3NlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzU3MiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxMzoyMToxMy41NTg3ODUwNzJaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MDIxNzM3NCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiI2lmZGVmLipDT05GSUdfXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdHR5L3R0eV9sZGlzYy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxMzoyMToxMy43NDkwMTExODZaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk5NzA1ODA4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSBpbW1lZGlhdGUgdGhvdWdodCBwcm9jZXNzOlxuXG4qKk5vIENvbmZpZ3VyYXRpb24gRmlsZXMgSGVyZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGB0dHlfbGRpc2MuY2AuIE15IGluaXRpYWwgc2NhbiBzaG93cyB0aGF0IHRoZXJlIGFyZSBubyBvYnZpb3VzIGNvbmZpZ3VyYXRpb24gZmlsZXMgcHJlc2VudCB3aXRoaW4gdGhpcyBwYXJ0aWN1bGFyIG1vZHVsZS4gVGhhdCdzIGludGVyZXN0aW5nLCBhbmQgaXQgc3VnZ2VzdHMgYSBmZXcgdGhpbmdzLCBkZXBlbmRpbmcgb24gdGhlIGNvbnRleHQuIEl0IGNvdWxkIG1lYW4gdGhlIGNvbmZpZ3VyYXRpb24gaXMgaGFuZGxlZCBlbHNld2hlcmUsIHBlcmhhcHMgZHluYW1pY2FsbHkgb3IgdGhyb3VnaCBzb21lIGdsb2JhbCBzeXN0ZW0gc2V0dGluZ3MuIEFsdGVybmF0aXZlbHksIGl0IGNvdWxkIG1lYW4gdGhhdCB0aGUgY29uZmlndXJhdGlvbiBpcyBoYXJkY29kZWQsIHdoaWNoLCBpbiBtb3N0IG1vZGVybiBzeXN0ZW1zLCBpcyBhIGxlc3MgZGVzaXJhYmxlIGFwcHJvYWNoLiBJJ2xsIG5lZWQgdG8gZGlnIGRlZXBlciB0byBzZWUgaG93IHRoZSBsaW5lIGRpc2NpcGxpbmUsIGFzIGRlZmluZWQgaW4gdGhpcyBzb3VyY2UgZmlsZSwgaW50ZXJhY3RzIHdpdGggYW55IGV4dGVybmFsIGNvbmZpZ3VyYXRpb24gbWVjaGFuaXNtcywgb3IgaWYgaXQgaW5kZWVkIHJlbGllcyBvbiBzb21lIGRlZmF1bHQgYmVoYXZpb3VyIGRlZmluZWQgaW4gdGhlIHNvdXJjZS4gVGhpcyBpbml0aWFsIG9ic2VydmF0aW9uIGdpdmVzIG1lIGEgcG9pbnQgb2YgaW52ZXN0aWdhdGlvbi4gTm93LCB3aGVyZSB0byBsb29rIG5leHQuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODAxMywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDEzOjIxOjE2Ljc0NjA3Mjg4OVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg0Njc4NDg0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIiNpZmRlZi4qQ09ORklHX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3R0eS90dHlfaW8uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3R0eS90dHlfaW8uYz0xNTA9c3RhdGljIGludCB0dHlfb3BlbihzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGZpbGUgKik7XFxuZHJpdmVycy90dHkvdHR5X2lvLmM6MTUxOiNpZmRlZiBDT05GSUdfQ09NUEFUXFxuZHJpdmVycy90dHkvdHR5X2lvLmMtMTUyLXN0YXRpYyBsb25nIHR0eV9jb21wYXRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsXFxuLS1cXG5kcml2ZXJzL3R0eS90dHlfaW8uYz0zNjY9RVhQT1JUX1NZTUJPTF9HUEwodHR5X2Rldl9uYW1lX3RvX251bWJlcik7XFxuZHJpdmVycy90dHkvdHR5X2lvLmMtMzY3LVxcbmRyaXZlcnMvdHR5L3R0eV9pby5jOjM2ODojaWZkZWYgQ09ORklHX0NPTlNPTEVfUE9MTFxcbmRyaXZlcnMvdHR5L3R0eV9pby5jLTM2OS1cXG4tLVxcbmRyaXZlcnMvdHR5L3R0eV9pby5jPTk1OT1zdGF0aWMgc3NpemVfdCBpdGVyYXRlX3R0eV93cml0ZShzdHJ1Y3QgdHR5X2xkaXNjICpsZCwgc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSxcXG4tLVxcbmRyaXZlcnMvdHR5L3R0eV9pby5jLTEwNDEtXFxuZHJpdmVycy90dHkvdHR5X2lvLmM6MTA0MjojaWZkZWYgQ09ORklHX1BSSU5UX1FVT1RBX1dBUk5JTkdcXG5kcml2ZXJzL3R0eS90dHlfaW8uYy0xMDQzLS8qKlxcbi0tXFxuZHJpdmVycy90dHkvdHR5X2lvLmM9MTkxMj1zdGF0aWMgc3RydWN0IHR0eV9kcml2ZXIgKnR0eV9sb29rdXBfZHJpdmVyKGRldl90IGRldmljZSwgc3RydWN0IGZpbGUgKmZpbHAsXFxuLS1cXG5kcml2ZXJzL3R0eS90dHlfaW8uYy0xOTE3LVxcdHN3aXRjaCAoZGV2aWNlKSB7XFxuZHJpdmVycy90dHkvdHR5X2lvLmM6MTkxODojaWZkZWYgQ09ORklHX1ZUXFxuZHJpdmVycy90dHkvdHR5X2lvLmMtMTkxOS1cXHRjYXNlIE1LREVWKFRUWV9NQUpPUiwgMCk6IHtcXG4tLVxcbmRyaXZlcnMvdHR5L3R0eV9pby5jPTI2NzU9bG9uZyB0dHlfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbi0tXFxuZHJpdmVycy90dHkvdHR5X2lvLmMtMjgxNS1cXG5kcml2ZXJzL3R0eS90dHlfaW8uYzoyODE2OiNpZmRlZiBDT05GSUdfQ09NUEFUXFxuZHJpdmVycy90dHkvdHR5X2lvLmMtMjgxNy1cXG4tLVxcbmRyaXZlcnMvdHR5L3R0eV9pby5jPTM2NTY9aW50IF9faW5pdCB0dHlfaW5pdCh2b2lkKVxcbi0tXFxuZHJpdmVycy90dHkvdHR5X2lvLmMtMzY3NC1cXG5kcml2ZXJzL3R0eS90dHlfaW8uYzozNjc1OiNpZmRlZiBDT05GSUdfVlRcXG5kcml2ZXJzL3R0eS90dHlfaW8uYy0zNjc2LVxcdHZ0eV9pbml0KFxcdTAwMjZjb25zb2xlX2ZvcHMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxMzoyMToxNi45MzA3NTg1MDRaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzIxODM1MDE4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbjogVFRZIExpbmUgRGlzY2lwbGluZSBMb2dpYyoqXG5cbk9rYXksIHNvIEkndmUganVzdCBhbmFseXplZCB0aGVzZSBjb25maWd1cmF0aW9ucywgYW5kIG5vbmUgb2YgdGhlbSBzZWVtIHRvIHRvdWNoIGB0dHlfc2V0X2xkaXNjYCwgYHR0eV9sZGlzY19yZWZfd2FpdGAsIG9yIGBfX3R0eV9oYW5ndXBgLiBUaGF0J3MgaW50ZXJlc3RpbmcsIGl0IG5hcnJvd3MgZG93biB0aGUgZm9jdXMgY29uc2lkZXJhYmx5LiBNeSB0YXJnZXQgc3ltYm9scyBhcmUgY2xlYXJseSBgdHR5X3NldF9sZGlzY2AsIGB0dHlfbGRpc2NfcmVmX3dhaXRgLCBgdHR5X2hhbmd1cGAsIGFuZCBgdHR5X3ZoYW5ndXBgLiBBbmQgdGhlIGVuY29tcGFzc2luZyBjb25maWcgaXMgYFRUWWAuXG5cbkxldCBtZSBxdWlja2x5IHZlcmlmeSB0aGUgcmVhY2hhYmlsaXR5IG9mIHRoZXNlLiBBbHJpZ2h0LCBgdHR5X3NldF9sZGlzY2AgaXMgZGVmaW5pdGVseSBhY2Nlc3NpYmxlIOKAkyBpdCdzIHRyaWdnZXJlZCB0aHJvdWdoIHRoZSBgVElPQ1NFVERgIGlvY3RsIG9uIGEgdHR5IGZpbGUgZGVzY3JpcHRvciwgd2hpY2ggaXMgYSBjb21tb24gcGF0aC4gYHR0eV9sZGlzY19yZWZfd2FpdGAgaXMgY2xlYXJseSByZWFjaGFibGUgdmlhIGByZWFkYCwgYHdyaXRlYCwgYHBvbGxgLCBhbmQgYGlvY3RsYCBvcGVyYXRpb25zIG9uIGEgdHR5IGZpbGUgZGVzY3JpcHRvci4gRmluYWxseSwgYHR0eV9oYW5ndXBgIGlzIHJlYWNoYWJsZSB2aWEgdGhlIGB2aGFuZ3VwYCBzeXNjYWxsLCBvciBgVElPQ1ZIQU5HVVBgIGlvY3RsLlxuXG5HaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBjaGFuZ2VzLCB0aGlzIHNlZW1zIGxpa2UgYSBjb3JlIGtlcm5lbCBtb2RpZmljYXRpb24sIHJpcGUgZm9yIGZ1enppbmcuIFRoZSBwYXRjaCBpcyB3b3JraW5nIG9uIFRUWSBsaW5lIGRpc2NpcGxpbmUgcmVmZXJlbmNlIGNvdW50aW5nIGFuZCBzdGF0ZSB0cmFuc2l0aW9uIGxvZ2ljOiBgdHR5X2xkaXNjX3JlZl93YWl0YCwgYHR0eV9zZXRfbGRpc2NgLCBhbmQgYF9fdHR5X2hhbmd1cGAuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgZGlyZWN0bHkgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZSwgZWl0aGVyIHRocm91Z2ggVFRZIGlvY3RscyBsaWtlIGBUSU9DU0VURGAsIGBUSU9DVkhBTkdVUGAsIG9yIGV2ZW4gc2ltcGxlciBjYWxscyBzdWNoIGFzIGByZWFkYCwgYHdyaXRlYCwgYW5kIGBwb2xsYC4gSSdtIHNlZWluZyBsb2NrIGRyb3BwaW5nIGFuZCB3YWl0IHF1ZXVlIHdha2V1cHMsIHdoaWNoIGltbWVkaWF0ZWx5IHNjcmVhbXMgcmFjZSBjb25kaXRpb25zIGFuZCBwb3RlbnRpYWwgZGVhZGxvY2tzLiBUaGlzIGlzIGV4YWN0bHkgdGhlIGtpbmQgb2Ygc2NlbmFyaW8gZnV6emluZyBleGNlbHMgYXQuIFRoZSBwcm9iYWJpbGl0eSBvZiB1bmNvdmVyaW5nIGEgdnVsbmVyYWJpbGl0eSBpcyBoaWdoLlxuXG5UaW1lIHRvIGNhbGwgc2V0LXJlc3VsdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg4MTMsIk91dHB1dFRva2VucyI6MTcxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDEzOjIxOjI0LjE0OTExMjQ1NloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2NjU3Mzg1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVFRZXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidHR5X3NldF9sZGlzY1wiLFxuICAgIFwidHR5X2xkaXNjX3JlZl93YWl0XCIsXG4gICAgXCJ0dHlfaGFuZ3VwXCIsXG4gICAgXCJ0dHlfdmhhbmd1cFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgVFRZIGxpbmUgZGlzY2lwbGluZSByZWZlcmVuY2UgY291bnRpbmcgYW5kIHRyYW5zaXRpb24gbG9naWMgKHR0eV9sZGlzY19yZWZfd2FpdCwgdHR5X3NldF9sZGlzYywgX190dHlfaGFuZ3VwKS4gVGhlc2UgZnVuY3Rpb25zIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIFRUWSBpb2N0bHMgKGUuZy4sIFRJT0NTRVRELCBUSU9DVkhBTkdVUCksIHJlYWQsIHdyaXRlLCBhbmQgcG9sbCBvcGVyYXRpb25zLiBUaGUgY2hhbmdlcyBpbnZvbHZlIGxvY2sgZHJvcHBpbmcgYW5kIHdhaXQgcXVldWUgd2FrZXVwcywgd2hpY2ggYXJlIHByb25lIHRvIHJhY2UgY29uZGl0aW9ucyBhbmQgZGVhZGxvY2tzLCBtYWtpbmcgdGhlbSBoaWdobHkgc3VpdGFibGUgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVFRZXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidHR5X3NldF9sZGlzY1wiLFxuICAgIFwidHR5X2xkaXNjX3JlZl93YWl0XCIsXG4gICAgXCJ0dHlfaGFuZ3VwXCIsXG4gICAgXCJ0dHlfdmhhbmd1cFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgVFRZIGxpbmUgZGlzY2lwbGluZSByZWZlcmVuY2UgY291bnRpbmcgYW5kIHRyYW5zaXRpb24gbG9naWMgKHR0eV9sZGlzY19yZWZfd2FpdCwgdHR5X3NldF9sZGlzYywgX190dHlfaGFuZ3VwKS4gVGhlc2UgZnVuY3Rpb25zIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIFRUWSBpb2N0bHMgKGUuZy4sIFRJT0NTRVRELCBUSU9DVkhBTkdVUCksIHJlYWQsIHdyaXRlLCBhbmQgcG9sbCBvcGVyYXRpb25zLiBUaGUgY2hhbmdlcyBpbnZvbHZlIGxvY2sgZHJvcHBpbmcgYW5kIHdhaXQgcXVldWUgd2FrZXVwcywgd2hpY2ggYXJlIHByb25lIHRvIHJhY2UgY29uZGl0aW9ucyBhbmQgZGVhZGxvY2tzLCBtYWtpbmcgdGhlbSBoaWdobHkgc3VpdGFibGUgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowxt7hg[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-25 12:47:49 +0000 UTC FinishedAt: 2026-07-25 13:21:26 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "04026c998c24ac47eb76886b9790c5710b603eb4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TTY" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "04026c998c24ac47eb76886b9790c5710b603eb4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TTY" ], "series_id": "538f5feb-1fdc-4792-be28-37bb8d2e4927" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "tty_set_ldisc", "tty_ldisc_ref_wait", "tty_hangup", "tty_vhangup" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDEzOjIwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RUWSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3R0eV9zZXRfbGRpc2MmIzM0OywKICAgICYjMzQ7dHR5X2xkaXNjX3JlZl93YWl0JiMzNDssCiAgICAmIzM0O3R0eV9oYW5ndXAmIzM0OywKICAgICYjMzQ7dHR5X3ZoYW5ndXAmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBUVFkgbGluZSBkaXNjaXBsaW5lIHJlZmVyZW5jZSBjb3VudGluZyBhbmQgdHJhbnNpdGlvbiBsb2dpYyAodHR5X2xkaXNjX3JlZl93YWl0LCB0dHlfc2V0X2xkaXNjLCBfX3R0eV9oYW5ndXApLiBUaGVzZSBmdW5jdGlvbnMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgVFRZIGlvY3RscyAoZS5nLiwgVElPQ1NFVEQsIFRJT0NWSEFOR1VQKSwgcmVhZCwgd3JpdGUsIGFuZCBwb2xsIG9wZXJhdGlvbnMuIFRoZSBjaGFuZ2VzIGludm9sdmUgbG9jayBkcm9wcGluZyBhbmQgd2FpdCBxdWV1ZSB3YWtldXBzLCB3aGljaCBhcmUgcHJvbmUgdG8gcmFjZSBjb25kaXRpb25zIGFuZCBkZWFkbG9ja3MsIG1ha2luZyB0aGVtIGhpZ2hseSBzdWl0YWJsZSBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxMzoyMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGFjNTgwZjQyMGJiNjIxYTE1NGU0YWM4MzNkNWI3ZjM2MGFiMzFmNzBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEp1bCAyNSAxMzoyMDowNyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS90dHlfaW8uYyBiL2RyaXZlcnMvdHR5L3R0eV9pby5jXG5pbmRleCA2YjI4M2ZkMDNmZjgyNC4uZTJmODJlODBmMzk3ZTQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3R0eS90dHlfaW8uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy90dHkvdHR5X2lvLmNcbkBAIC02NDksNiAmIzQzOzY0OSwxMyBAQCBzdGF0aWMgdm9pZCBfX3R0eV9oYW5ndXAoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgaW50IGV4aXRfc2Vzc2lvbilcbiBcdCAqL1xuIFx0c2V0X2JpdChUVFlfSFVQUEVELCBcdTAwMjZ0dHktXHUwMDNlZmxhZ3MpO1xuIFx0Y2xlYXJfYml0KFRUWV9IVVBQSU5HLCBcdTAwMjZ0dHktXHUwMDNlZmxhZ3MpO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFdha2UgdXAgcmVhZGVycyBibG9ja2VkIGluIHR0eV9sZGlzY19yZWZfd2FpdCgpIHRoYXQgbWF5IGhhdmVcbiYjNDM7XHQgKiBzZWVuIGxkaXNjID09IE5VTEwgYnV0IG5vdCB5ZXQgVFRZX0hVUFBFRC5cbiYjNDM7XHQgKi9cbiYjNDM7XHR3YWtlX3VwKFx1MDAyNnR0eS1cdTAwM2VyZWFkX3dhaXQpO1xuJiM0MztcbiBcdHR0eV91bmxvY2sodHR5KTtcbiBcbiBcdGlmIChmKVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L3R0eV9sZGlzYy5jIGIvZHJpdmVycy90dHkvdHR5X2xkaXNjLmNcbmluZGV4IDI3ZmU4MjM2ZjY2MjMwLi42ZWM5M2U2Yjg0OTg4ZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdHR5L3R0eV9sZGlzYy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3R0eS90dHlfbGRpc2MuY1xuQEAgLTI0Miw2ICYjNDM7MjQyLDE2IEBAIHN0cnVjdCB0dHlfbGRpc2MgKnR0eV9sZGlzY19yZWZfd2FpdChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KVxuIFxuIFx0bGRzZW1fZG93bl9yZWFkKFx1MDAyNnR0eS1cdTAwM2VsZGlzY19zZW0sIE1BWF9TQ0hFRFVMRV9USU1FT1VUKTtcbiBcdGxkID0gdHR5LVx1MDAzZWxkaXNjO1xuJiM0MztcdHdoaWxlICghbGQgXHUwMDI2XHUwMDI2ICF0ZXN0X2JpdChUVFlfSFVQUEVELCBcdTAwMjZ0dHktXHUwMDNlZmxhZ3MpKSB7XG4mIzQzO1x0XHRsZHNlbV91cF9yZWFkKFx1MDAyNnR0eS1cdTAwM2VsZGlzY19zZW0pO1xuJiM0MztcbiYjNDM7XHRcdC8qIGxkaXNjIG1heSBiZSBOVUxMIGR1cmluZyBhIGRpc2NpcGxpbmUgc3dpdGNoOyB3YWl0IGFuZCByZXRyeSAqL1xuJiM0MztcdFx0d2FpdF9ldmVudCh0dHktXHUwMDNlcmVhZF93YWl0LFxuJiM0MztcdFx0XHQgICBSRUFEX09OQ0UodHR5LVx1MDAzZWxkaXNjKSAhPSBOVUxMIHx8XG4mIzQzO1x0XHRcdCAgIHRlc3RfYml0KFRUWV9IVVBQRUQsIFx1MDAyNnR0eS1cdTAwM2VmbGFncykpO1xuJiM0MztcdFx0bGRzZW1fZG93bl9yZWFkKFx1MDAyNnR0eS1cdTAwM2VsZGlzY19zZW0sIE1BWF9TQ0hFRFVMRV9USU1FT1VUKTtcbiYjNDM7XHRcdGxkID0gdHR5LVx1MDAzZWxkaXNjO1xuJiM0MztcdH1cbiBcdGlmICghbGQpXG4gXHRcdGxkc2VtX3VwX3JlYWQoXHUwMDI2dHR5LVx1MDAzZWxkaXNjX3NlbSk7XG4gXHRyZXR1cm4gbGQ7XG5AQCAtNTU2LDE1ICYjNDM7NTY2LDI4IEBAIGludCB0dHlfc2V0X2xkaXNjKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGludCBkaXNjKVxuIFx0LyogU2h1dGRvd24gdGhlIG9sZCBkaXNjaXBsaW5lLiAqL1xuIFx0dHR5X2xkaXNjX2Nsb3NlKHR0eSwgb2xkX2xkaXNjKTtcbiBcbi1cdC8qIE5vdyBzZXQgdXAgdGhlIG5ldyBsaW5lIGRpc2NpcGxpbmUuICovXG4tXHR0dHktXHUwMDNlbGRpc2MgPSBuZXdfbGRpc2M7XG4mIzQzO1x0LyogQ2xlYXIgdHR5LVx1MDAzZWxkaXNjIHNvIGNvbmN1cnJlbnQgcmVhZGVycyBiYWNrIG9mZiBkdXJpbmcgdHJhbnNpdGlvbiAqL1xuJiM0MztcdHR0eS1cdTAwM2VsZGlzYyA9IE5VTEw7XG4gXHR0dHlfc2V0X3Rlcm1pb3NfbGRpc2ModHR5LCBkaXNjKTtcbiYjNDM7XHR0dHlfbGRpc2NfdW5sb2NrKHR0eSk7XG4gXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBPcGVuIHRoZSBuZXcgZGlzY2lwbGluZSBvdXRzaWRlIGxkaXNjX3NlbS4gVGhlIGxkaXNjIC5vcGVuKClcbiYjNDM7XHQgKiBtYXkgYWNxdWlyZSBsb2NrcyAoZS5nLiwgcnRubF9tdXRleCkgdGhhdCB3b3VsZCBjcmVhdGUgY2lyY3VsYXJcbiYjNDM7XHQgKiBkZXBlbmRlbmNpZXMgaWYgdGFrZW4gdW5kZXIgbGRpc2Nfc2VtLiB0dHlfbG9jayBpcyBzdGlsbCBoZWxkLFxuJiM0MztcdCAqIHByZXZlbnRpbmcgY29uY3VycmVudCBsZGlzYyBjaGFuZ2VzIGFuZCBoYW5ndXAuXG4mIzQzO1x0ICovXG4gXHRyZXR2YWwgPSB0dHlfbGRpc2Nfb3Blbih0dHksIG5ld19sZGlzYyk7XG4mIzQzO1xuJiM0MztcdHR0eV9sZGlzY19sb2NrKHR0eSwgTUFYX1NDSEVEVUxFX1RJTUVPVVQpO1xuJiM0MztcbiBcdGlmIChyZXR2YWwgXHUwMDNjIDApIHtcbiBcdFx0LyogQmFjayB0byB0aGUgb2xkIG9uZSBvciBOX1RUWSBpZiB3ZSBjYW4mIzM5O3QgKi9cbiBcdFx0dHR5X2xkaXNjX3B1dChuZXdfbGRpc2MpO1xuIFx0XHR0dHlfbGRpc2NfcmVzdG9yZSh0dHksIG9sZF9sZGlzYyk7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdC8qIFN1Y2Nlc3MgLSBpbnN0YWxsIG5ldyBsZGlzYyAqL1xuJiM0MztcdFx0dHR5LVx1MDAzZWxkaXNjID0gbmV3X2xkaXNjO1xuIFx0fVxuIFxuIFx0aWYgKHR0eS1cdTAwM2VsZGlzYy1cdTAwM2VvcHMtXHUwMDNlbnVtICE9IG9sZF9sZGlzYy1cdTAwM2VvcHMtXHUwMDNlbnVtIFx1MDAyNlx1MDAyNiB0dHktXHUwMDNlb3BzLVx1MDAzZXNldF9sZGlzYykge1xuQEAgLTU4NCw2ICYjNDM7NjA3LDkgQEAgaW50IHR0eV9zZXRfbGRpc2Moc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgaW50IGRpc2MpXG4gb3V0OlxuIFx0dHR5X2xkaXNjX3VubG9jayh0dHkpO1xuIFxuJiM0MztcdC8qIFdha2UgdXAgcmVhZGVycyB3YWl0aW5nIGZvciB0aGUgbGRpc2MgdHJhbnNpdGlvbiB0byBjb21wbGV0ZSAqL1xuJiM0MztcdHdha2VfdXAoXHUwMDI2dHR5LVx1MDAzZXJlYWRfd2FpdCk7XG4mIzQzO1xuIFx0LypcbiBcdCAqIFJlc3RhcnQgdGhlIHdvcmsgcXVldWUgaW4gY2FzZSBubyBjaGFyYWN0ZXJzIGtpY2sgaXQgb2ZmLiBTYWZlIGlmXG4gXHQgKiBhbHJlYWR5IHJ1bm5pbmdcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxMzoyMDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VFRZJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dHR5X3NldF9sZGlzYyYjMzQ7LAogICAgJiMzNDt0dHlfbGRpc2NfcmVmX3dhaXQmIzM0OywKICAgICYjMzQ7dHR5X2hhbmd1cCYjMzQ7LAogICAgJiMzNDt0dHlfdmhhbmd1cCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIFRUWSBsaW5lIGRpc2NpcGxpbmUgcmVmZXJlbmNlIGNvdW50aW5nIGFuZCB0cmFuc2l0aW9uIGxvZ2ljICh0dHlfbGRpc2NfcmVmX3dhaXQsIHR0eV9zZXRfbGRpc2MsIF9fdHR5X2hhbmd1cCkuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBUVFkgaW9jdGxzIChlLmcuLCBUSU9DU0VURCwgVElPQ1ZIQU5HVVApLCByZWFkLCB3cml0ZSwgYW5kIHBvbGwgb3BlcmF0aW9ucy4gVGhlIGNoYW5nZXMgaW52b2x2ZSBsb2NrIGRyb3BwaW5nIGFuZCB3YWl0IHF1ZXVlIHdha2V1cHMsIHdoaWNoIGFyZSBwcm9uZSB0byByYWNlIGNvbmRpdGlvbnMgYW5kIGRlYWRsb2NrcywgbWFraW5nIHRoZW0gaGlnaGx5IHN1aXRhYmxlIGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYWM1ODBmNDIwYmI2MjFhMTU0ZTRhYzgzM2Q1YjdmMzYwYWIzMWY3MApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgSnVsIDI1IDEzOjIwOjA3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvdHR5X2lvLmMgYi9kcml2ZXJzL3R0eS90dHlfaW8uYwppbmRleCA2YjI4M2ZkMDNmZjgyNC4uZTJmODJlODBmMzk3ZTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L3R0eV9pby5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdHR5L3R0eV9pby5jCkBAIC02NDksNiAmIzQzOzY0OSwxMyBAQCBzdGF0aWMgdm9pZCBfX3R0eV9oYW5ndXAoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgaW50IGV4aXRfc2Vzc2lvbikKIAkgKi8KIAlzZXRfYml0KFRUWV9IVVBQRUQsICZhbXA7dHR5LSZndDtmbGFncyk7CiAJY2xlYXJfYml0KFRUWV9IVVBQSU5HLCAmYW1wO3R0eS0mZ3Q7ZmxhZ3MpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBXYWtlIHVwIHJlYWRlcnMgYmxvY2tlZCBpbiB0dHlfbGRpc2NfcmVmX3dhaXQoKSB0aGF0IG1heSBoYXZlCiYjNDM7CSAqIHNlZW4gbGRpc2MgPT0gTlVMTCBidXQgbm90IHlldCBUVFlfSFVQUEVELgomIzQzOwkgKi8KJiM0MzsJd2FrZV91cCgmYW1wO3R0eS0mZ3Q7cmVhZF93YWl0KTsKJiM0MzsKIAl0dHlfdW5sb2NrKHR0eSk7CiAKIAlpZiAoZikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L3R0eV9sZGlzYy5jIGIvZHJpdmVycy90dHkvdHR5X2xkaXNjLmMKaW5kZXggMjdmZTgyMzZmNjYyMzAuLjZlYzkzZTZiODQ5ODhkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3R0eS90dHlfbGRpc2MuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3R0eS90dHlfbGRpc2MuYwpAQCAtMjQyLDYgJiM0MzsyNDIsMTYgQEAgc3RydWN0IHR0eV9sZGlzYyAqdHR5X2xkaXNjX3JlZl93YWl0KHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCiAKIAlsZHNlbV9kb3duX3JlYWQoJmFtcDt0dHktJmd0O2xkaXNjX3NlbSwgTUFYX1NDSEVEVUxFX1RJTUVPVVQpOwogCWxkID0gdHR5LSZndDtsZGlzYzsKJiM0MzsJd2hpbGUgKCFsZCAmYW1wOyZhbXA7ICF0ZXN0X2JpdChUVFlfSFVQUEVELCAmYW1wO3R0eS0mZ3Q7ZmxhZ3MpKSB7CiYjNDM7CQlsZHNlbV91cF9yZWFkKCZhbXA7dHR5LSZndDtsZGlzY19zZW0pOwomIzQzOwomIzQzOwkJLyogbGRpc2MgbWF5IGJlIE5VTEwgZHVyaW5nIGEgZGlzY2lwbGluZSBzd2l0Y2g7IHdhaXQgYW5kIHJldHJ5ICovCiYjNDM7CQl3YWl0X2V2ZW50KHR0eS0mZ3Q7cmVhZF93YWl0LAomIzQzOwkJCSAgIFJFQURfT05DRSh0dHktJmd0O2xkaXNjKSAhPSBOVUxMIHx8CiYjNDM7CQkJICAgdGVzdF9iaXQoVFRZX0hVUFBFRCwgJmFtcDt0dHktJmd0O2ZsYWdzKSk7CiYjNDM7CQlsZHNlbV9kb3duX3JlYWQoJmFtcDt0dHktJmd0O2xkaXNjX3NlbSwgTUFYX1NDSEVEVUxFX1RJTUVPVVQpOwomIzQzOwkJbGQgPSB0dHktJmd0O2xkaXNjOwomIzQzOwl9CiAJaWYgKCFsZCkKIAkJbGRzZW1fdXBfcmVhZCgmYW1wO3R0eS0mZ3Q7bGRpc2Nfc2VtKTsKIAlyZXR1cm4gbGQ7CkBAIC01NTYsMTUgJiM0Mzs1NjYsMjggQEAgaW50IHR0eV9zZXRfbGRpc2Moc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgaW50IGRpc2MpCiAJLyogU2h1dGRvd24gdGhlIG9sZCBkaXNjaXBsaW5lLiAqLwogCXR0eV9sZGlzY19jbG9zZSh0dHksIG9sZF9sZGlzYyk7CiAKLQkvKiBOb3cgc2V0IHVwIHRoZSBuZXcgbGluZSBkaXNjaXBsaW5lLiAqLwotCXR0eS0mZ3Q7bGRpc2MgPSBuZXdfbGRpc2M7CiYjNDM7CS8qIENsZWFyIHR0eS0mZ3Q7bGRpc2Mgc28gY29uY3VycmVudCByZWFkZXJzIGJhY2sgb2ZmIGR1cmluZyB0cmFuc2l0aW9uICovCiYjNDM7CXR0eS0mZ3Q7bGRpc2MgPSBOVUxMOwogCXR0eV9zZXRfdGVybWlvc19sZGlzYyh0dHksIGRpc2MpOwomIzQzOwl0dHlfbGRpc2NfdW5sb2NrKHR0eSk7CiAKJiM0MzsJLyoKJiM0MzsJICogT3BlbiB0aGUgbmV3IGRpc2NpcGxpbmUgb3V0c2lkZSBsZGlzY19zZW0uIFRoZSBsZGlzYyAub3BlbigpCiYjNDM7CSAqIG1heSBhY3F1aXJlIGxvY2tzIChlLmcuLCBydG5sX211dGV4KSB0aGF0IHdvdWxkIGNyZWF0ZSBjaXJjdWxhcgomIzQzOwkgKiBkZXBlbmRlbmNpZXMgaWYgdGFrZW4gdW5kZXIgbGRpc2Nfc2VtLiB0dHlfbG9jayBpcyBzdGlsbCBoZWxkLAomIzQzOwkgKiBwcmV2ZW50aW5nIGNvbmN1cnJlbnQgbGRpc2MgY2hhbmdlcyBhbmQgaGFuZ3VwLgomIzQzOwkgKi8KIAlyZXR2YWwgPSB0dHlfbGRpc2Nfb3Blbih0dHksIG5ld19sZGlzYyk7CiYjNDM7CiYjNDM7CXR0eV9sZGlzY19sb2NrKHR0eSwgTUFYX1NDSEVEVUxFX1RJTUVPVVQpOwomIzQzOwogCWlmIChyZXR2YWwgJmx0OyAwKSB7CiAJCS8qIEJhY2sgdG8gdGhlIG9sZCBvbmUgb3IgTl9UVFkgaWYgd2UgY2FuJiMzOTt0ICovCiAJCXR0eV9sZGlzY19wdXQobmV3X2xkaXNjKTsKIAkJdHR5X2xkaXNjX3Jlc3RvcmUodHR5LCBvbGRfbGRpc2MpOwomIzQzOwl9IGVsc2UgewomIzQzOwkJLyogU3VjY2VzcyAtIGluc3RhbGwgbmV3IGxkaXNjICovCiYjNDM7CQl0dHktJmd0O2xkaXNjID0gbmV3X2xkaXNjOwogCX0KIAogCWlmICh0dHktJmd0O2xkaXNjLSZndDtvcHMtJmd0O251bSAhPSBvbGRfbGRpc2MtJmd0O29wcy0mZ3Q7bnVtICZhbXA7JmFtcDsgdHR5LSZndDtvcHMtJmd0O3NldF9sZGlzYykgewpAQCAtNTg0LDYgJiM0Mzs2MDcsOSBAQCBpbnQgdHR5X3NldF9sZGlzYyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBpbnQgZGlzYykKIG91dDoKIAl0dHlfbGRpc2NfdW5sb2NrKHR0eSk7CiAKJiM0MzsJLyogV2FrZSB1cCByZWFkZXJzIHdhaXRpbmcgZm9yIHRoZSBsZGlzYyB0cmFuc2l0aW9uIHRvIGNvbXBsZXRlICovCiYjNDM7CXdha2VfdXAoJmFtcDt0dHktJmd0O3JlYWRfd2FpdCk7CiYjNDM7CiAJLyoKIAkgKiBSZXN0YXJ0IHRoZSB3b3JrIHF1ZXVlIGluIGNhc2Ugbm8gY2hhcmFjdGVycyBraWNrIGl0IG9mZi4gU2FmZSBpZgogCSAqIGFscmVhZHkgcnVubmluZwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxMzoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTU1CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMzUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVFRZIExpbmUgRGlzY2lwbGluZSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQmIzM5O3MgaGl0dGluZyBgdHR5X2lvLmNgIGFuZCBgdHR5X2xkaXNjLmNgIGluIHRoZSBUVFkgc3Vic3lzdGVtLiBTZWVtcyBsaWtlIHdlJiMzOTtyZSBkaXZpbmcgZGVlcCBpbnRvIGxpbmUgZGlzY2lwbGluZSBtYW5hZ2VtZW50LiBUaGUga2V5IGZ1bmN0aW9ucyBiZWluZyBtb2RpZmllZCBhcmUgYF9fdHR5X2hhbmd1cGAsIGB0dHlfbGRpc2NfcmVmX3dhaXRgLCBhbmQgYHR0eV9zZXRfbGRpc2NgLiBJbnRlcmVzdGluZy4KCkZpcnN0LCBJIHNlZSBhIGB3YWtlX3VwKCZhbXA7dHR5LSZndDtyZWFkX3dhaXQpYCBiZWluZyBhZGRlZCB3aXRoaW4gYF9fdHR5X2hhbmd1cGAuIFRoYXQmIzM5O3MgYSBkaXJlY3Qgc2lnbmFsIHRvIHdha2UgdXAgd2FpdGluZyByZWFkZXJzIG9uIHRoZSBUVFksIGxpa2VseSBpbmRpY2F0aW5nIGEgaGFuZ3VwIGV2ZW50LiBUaGVuLCBgdHR5X2xkaXNjX3JlZl93YWl0YCBpcyBiZWluZyB1cGRhdGVkIHRvIHdhaXQgZWl0aGVyIGZvciBgdHR5LSZndDtsZGlzY2AgdG8gYmVjb21lIG5vbi1OVUxMIG9yIHRoZSBgVFRZX0hVUFBFRGAgZmxhZyB0byBiZSBzZXQuIFRoYXQmIzM5O3MgYSBjbGFzc2ljIHN5bmNocm9uaXphdGlvbiBjb25zdHJ1Y3Q7IG1ha2luZyBzdXJlIHRoZSBsaW5lIGRpc2NpcGxpbmUgaXMgcmVhZHkgb3IgdGhhdCBhIGhhbmd1cCBoYXMgaGFwcGVuZWQgYmVmb3JlIHByb2NlZWRpbmcuCgpgdHR5X3NldF9sZGlzY2AgaXMgZ2V0dGluZyBzb21lIHJld29yayB0b28uIEkgbm90aWNlIHRoYXQgYHR0eS0mZ3Q7bGRpc2NgIGlzIHNldCB0byBOVUxMIGR1cmluZyB0aGUgdHJhbnNpdGlvbiwgdGhlIGBsZGlzY19zZW1gIGlzIHVubG9ja2VkLCBgdHR5X2xkaXNjX29wZW5gIGlzIGNhbGxlZCAod2hpY2ggd2lsbCBsaWtlbHkgaW5pdGlhbGl6ZSB0aGUgbmV3IGxpbmUgZGlzY2lwbGluZSksIGFuZCB0aGVuIGBsZGlzY19zZW1gIGlzIGxvY2tlZCBhZ2Fpbi4gVGhpcyBpcyBhIGNvbW1vbiBwYXR0ZXJuIGZvciBzYWZlbHkgc3dhcHBpbmcgb3V0IHRoZSBsaW5lIGRpc2NpcGxpbmUgaW4gYSB0aHJlYWRlZCBlbnZpcm9ubWVudC4gRW5zdXJpbmcgdGhhdCBsb2NraW5nIGFuZCB1bmxvY2tpbmcgaXMgaGFuZGxlZCBjb3JyZWN0bHkgaXMgY3J1Y2lhbCBoZXJlLgoKRnJvbSBhIGZ1bmN0aW9uYWwgc3RhbmRwb2ludCwgdGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBsaWVzIGluIHRoZXNlIHRocmVlIGZ1bmN0aW9uczogYHR0eV9sZGlzY19yZWZfd2FpdGAsIGB0dHlfc2V0X2xkaXNjYCwgYW5kIHRoZSBoYW5ndXAgZnVuY3Rpb24sIHRob3VnaCBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhhdCBgX190dHlfaGFuZ3VwYCBpcyBzdGF0aWM7IGl0IG1pZ2h0IGJlIGB0dHlfaGFuZ3VwYCBvciBgdHR5X3ZoYW5ndXBgIGluc3RlYWQuIFRoZSBpbXBvcnRhbnQgb25lcyBhcmUgdGhlIGV4cG9ydGVkIGB0dHlfbGRpc2NfcmVmX3dhaXRgIGFuZCBgdHR5X3NldF9sZGlzY2AuCgpOb3csIEkgbmVlZCB0byBjb25zaWRlciBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gVGhpcyBzZWVtcyBsaWtlIGEgY29yZSBUVFkgc3Vic3lzdGVtIGNoYW5nZSwgc28gY2hhbmNlcyBhcmUgYENPTkZJR19UVFlgIGlzICphbHdheXMqIGVuYWJsZWQuIEkgc2hvdWxkIHZlcmlmeSB0aGF0LCBqdXN0IHRvIGJlIHN1cmUuIEkmIzM5O20gZ29pbmcgdG8gcnVuIGBncmVwcGVyYCBhbmQgbG9vayBmb3IgaW5zdGFuY2VzIG9mIGB0dHlfbGRpc2NfcmVmX3dhaXRgIGFuZCBgdHR5X3NldF9sZGlzY2AgdG8gY29uZmlybSB1c2FnZSBhbmQgcGlucG9pbnQgcG90ZW50aWFsIHNpZGUgZWZmZWN0cy4gQWx3YXlzIGEgZ29vZCBwcmFjdGljZSB0byBmb2xsb3cgdGhlIGNhbGwgY2hhaW4gYW5kIGRvdWJsZSBjaGVjayB0aGUgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxMzoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0dHlfbGRpc2NfcmVmX3dhaXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL3R0eS90dHlfbGRpc2MucnN0PTY2PWJ1dCBub3QgeWV0IGVuZm9yY2VkLlxuLS1cbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS90dHkvdHR5X2xkaXNjLnJzdC02OC0uLiBrZXJuZWwtZG9jOjogZHJpdmVycy90dHkvdHR5X2xkaXNjLmNcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS90dHkvdHR5X2xkaXNjLnJzdDo2OTogICA6aWRlbnRpZmllcnM6IHR0eV9sZGlzY19yZWZfd2FpdCB0dHlfbGRpc2NfcmVmIHR0eV9sZGlzY19kZXJlZlxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL3R0eS90dHlfbGRpc2MucnN0LTcwLVxuLS1cbmRyaXZlcnMvdHR5L3R0eV9pby5jPTU2OD1zdGF0aWMgdm9pZCBfX3R0eV9oYW5ndXAoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgaW50IGV4aXRfc2Vzc2lvbilcbi0tXG5kcml2ZXJzL3R0eS90dHlfaW8uYy02NTMtXHQvKlxuZHJpdmVycy90dHkvdHR5X2lvLmM6NjU0Olx0ICogV2FrZSB1cCByZWFkZXJzIGJsb2NrZWQgaW4gdHR5X2xkaXNjX3JlZl93YWl0KCkgdGhhdCBtYXkgaGF2ZVxuZHJpdmVycy90dHkvdHR5X2lvLmMtNjU1LVx0ICogc2VlbiBsZGlzYyA9PSBOVUxMIGJ1dCBub3QgeWV0IFRUWV9IVVBQRUQuXG4tLVxuZHJpdmVycy90dHkvdHR5X2lvLmM9OTA4PXN0YXRpYyBzc2l6ZV90IHR0eV9yZWFkKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICp0bylcbi0tXG5kcml2ZXJzL3R0eS90dHlfaW8uYy05MjMtXHQgKi9cbmRyaXZlcnMvdHR5L3R0eV9pby5jOjkyNDpcdGxkID0gdHR5X2xkaXNjX3JlZl93YWl0KHR0eSk7XG5kcml2ZXJzL3R0eS90dHlfaW8uYy05MjUtXHRpZiAoIWxkKVxuLS1cbmRyaXZlcnMvdHR5L3R0eV9pby5jPTEwNjk9c3RhdGljIHNzaXplX3QgZmlsZV90dHlfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKVxuLS1cbmRyaXZlcnMvdHR5L3R0eV9pby5jLTEwODEtXHRcdHR0eV9lcnIodHR5LCBcJiMzNDttaXNzaW5nIHdyaXRlX3Jvb20gbWV0aG9kXFxuXCYjMzQ7KTtcbmRyaXZlcnMvdHR5L3R0eV9pby5jOjEwODI6XHRsZCA9IHR0eV9sZGlzY19yZWZfd2FpdCh0dHkpO1xuZHJpdmVycy90dHkvdHR5X2lvLmMtMTA4My1cdGlmICghbGQpXG4tLVxuZHJpdmVycy90dHkvdHR5X2lvLmM9MTMzMz1zdGF0aWMgaW50IHR0eV9yZW9wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSlcbi0tXG5kcml2ZXJzL3R0eS90dHlfaW8uYy0xMzQ4LVxuZHJpdmVycy90dHkvdHR5X2lvLmM6MTM0OTpcdGxkID0gdHR5X2xkaXNjX3JlZl93YWl0KHR0eSk7XG5kcml2ZXJzL3R0eS90dHlfaW8uYy0xMzUwLVx0aWYgKGxkKSB7XG4tLVxuZHJpdmVycy90dHkvdHR5X2lvLmM9MjE5Mz1zdGF0aWMgX19wb2xsX3QgdHR5X3BvbGwoc3RydWN0IGZpbGUgKmZpbHAsIHBvbGxfdGFibGUgKndhaXQpXG4tLVxuZHJpdmVycy90dHkvdHR5X2lvLmMtMjIwMS1cbmRyaXZlcnMvdHR5L3R0eV9pby5jOjIyMDI6XHRsZCA9IHR0eV9sZGlzY19yZWZfd2FpdCh0dHkpO1xuZHJpdmVycy90dHkvdHR5X2lvLmMtMjIwMy1cdGlmICghbGQpXG4tLVxuZHJpdmVycy90dHkvdHR5X2lvLmM9MjI3OT1zdGF0aWMgaW50IHRpb2NzdGkoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgdTggX191c2VyICpwKVxuLS1cbmRyaXZlcnMvdHR5L3R0eV9pby5jLTIyOTEtXHR0dHlfYXVkaXRfdGlvY3N0aSh0dHksIGNoKTtcbmRyaXZlcnMvdHR5L3R0eV9pby5jOjIyOTI6XHRsZCA9IHR0eV9sZGlzY19yZWZfd2FpdCh0dHkpO1xuZHJpdmVycy90dHkvdHR5X2lvLmMtMjI5My1cdGlmICghbGQpXG4tLVxuZHJpdmVycy90dHkvdHR5X2lvLmM9MjQ1MT1zdGF0aWMgaW50IHRpb2NnZXRkKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGludCBfX3VzZXIgKnApXG4tLVxuZHJpdmVycy90dHkvdHR5X2lvLmMtMjQ1NS1cbmRyaXZlcnMvdHR5L3R0eV9pby5jOjI0NTY6XHRsZCA9IHR0eV9sZGlzY19yZWZfd2FpdCh0dHkpO1xuZHJpdmVycy90dHkvdHR5X2lvLmMtMjQ1Ny1cdGlmICghbGQpXG4tLVxuZHJpdmVycy90dHkvdHR5X2lvLmM9MjY3NT1sb25nIHR0eV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXG4tLVxuZHJpdmVycy90dHkvdHR5X2lvLmMtMjgwMi1cdH1cbmRyaXZlcnMvdHR5L3R0eV9pby5jOjI4MDM6XHRsZCA9IHR0eV9sZGlzY19yZWZfd2FpdCh0dHkpO1xuZHJpdmVycy90dHkvdHR5X2lvLmMtMjgwNC1cdGlmICghbGQpXG4tLVxuZHJpdmVycy90dHkvdHR5X2lvLmM9Mjg4Mj1zdGF0aWMgbG9uZyB0dHlfY29tcGF0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLFxuLS1cbmRyaXZlcnMvdHR5L3R0eV9pby5jLTI5ODItXG5kcml2ZXJzL3R0eS90dHlfaW8uYzoyOTgzOlx0bGQgPSB0dHlfbGRpc2NfcmVmX3dhaXQodHR5KTtcbmRyaXZlcnMvdHR5L3R0eV9pby5jLTI5ODQtXHRpZiAoIWxkKVxuLS1cbmRyaXZlcnMvdHR5L3R0eV9pb2N0bC5jPTkyMT1pbnQgdHR5X3BlcmZvcm1fZmx1c2goc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgdW5zaWduZWQgbG9uZyBhcmcpXG4tLVxuZHJpdmVycy90dHkvdHR5X2lvY3RsLmMtOTI3LVxuZHJpdmVycy90dHkvdHR5X2lvY3RsLmM6OTI4Olx0bGQgPSB0dHlfbGRpc2NfcmVmX3dhaXQodHR5KTtcbmRyaXZlcnMvdHR5L3R0eV9pb2N0bC5jLTkyOS1cdHJldHZhbCA9IF9fdHR5X3BlcmZvcm1fZmx1c2godHR5LCBhcmcpO1xuLS1cbmRyaXZlcnMvdHR5L3R0eV9sZGlzYy5jPTIxNT1jb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgdHR5X2xkaXNjc19zZXFfb3BzID0ge1xuLS1cbmRyaXZlcnMvdHR5L3R0eV9sZGlzYy5jLTIyMi0vKipcbmRyaXZlcnMvdHR5L3R0eV9sZGlzYy5jOjIyMzogKiB0dHlfbGRpc2NfcmVmX3dhaXRcdC1cdHdhaXQgZm9yIHRoZSB0dHkgbGRpc2NcbmRyaXZlcnMvdHR5L3R0eV9sZGlzYy5jLTIyNC0gKiBAdHR5OiB0dHkgZGV2aWNlXG4tLVxuZHJpdmVycy90dHkvdHR5X2xkaXNjLmMtMjM4LSAqL1xuZHJpdmVycy90dHkvdHR5X2xkaXNjLmM6MjM5OnN0cnVjdCB0dHlfbGRpc2MgKnR0eV9sZGlzY19yZWZfd2FpdChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KVxuZHJpdmVycy90dHkvdHR5X2xkaXNjLmMtMjQwLXtcbi0tXG5kcml2ZXJzL3R0eS90dHlfbGRpc2MuYy0yNTgtfVxuZHJpdmVycy90dHkvdHR5X2xkaXNjLmM6MjU5OkVYUE9SVF9TWU1CT0xfR1BMKHR0eV9sZGlzY19yZWZfd2FpdCk7XG5kcml2ZXJzL3R0eS90dHlfbGRpc2MuYy0yNjAtXG4tLVxuZHJpdmVycy90dHkvdHR5X2xkaXNjLmM9MjgwPUVYUE9SVF9TWU1CT0xfR1BMKHR0eV9sZGlzY19yZWYpO1xuLS1cbmRyaXZlcnMvdHR5L3R0eV9sZGlzYy5jLTI4NS0gKlxuZHJpdmVycy90dHkvdHR5X2xkaXNjLmM6Mjg2OiAqIFVuZG9lcyB0aGUgZWZmZWN0IG9mIHR0eV9sZGlzY19yZWYoKSBvciB0dHlfbGRpc2NfcmVmX3dhaXQoKS4gTWF5IGJlIGNhbGxlZFxuZHJpdmVycy90dHkvdHR5X2xkaXNjLmMtMjg3LSAqIGluIElSUSBjb250ZXh0LlxuLS1cbmRyaXZlcnMvdHR5L3Z0L3NlbGVjdGlvbi5jPTM5MT1pbnQgcGFzdGVfc2VsZWN0aW9uKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpXG4tLVxuZHJpdmVycy90dHkvdnQvc2VsZWN0aW9uLmMtNDA4LVxuZHJpdmVycy90dHkvdnQvc2VsZWN0aW9uLmM6NDA5Olx0bGQgPSB0dHlfbGRpc2NfcmVmX3dhaXQodHR5KTtcbmRyaXZlcnMvdHR5L3Z0L3NlbGVjdGlvbi5jLTQxMC1cdGlmICghbGQpXG4tLVxuaW5jbHVkZS9saW51eC90dHlfbGRpc2MuaD0yNzk9dm9pZCB0dHlfbGRpc2NfZGVyZWYoc3RydWN0IHR0eV9sZGlzYyAqKTtcbmluY2x1ZGUvbGludXgvdHR5X2xkaXNjLmg6MjgwOnN0cnVjdCB0dHlfbGRpc2MgKnR0eV9sZGlzY19yZWZfd2FpdChzdHJ1Y3QgdHR5X3N0cnVjdCAqKTtcbmluY2x1ZGUvbGludXgvdHR5X2xkaXNjLmgtMjgxLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDEzOjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU2ODYKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAxNzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyB0aGUgVFRZIExpbmUgRGlzY2lwbGluZSBDaGFuZ2VzKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYHR0eV9sZGlzY19yZWZfd2FpdGAgYW5kIGB0dHlfc2V0X2xkaXNjYC4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZywgYW5kIHJpZ2h0IGF3YXkgSSYjMzk7bSB0aGlua2luZywgJiMzNDtmdXp6aW5nIHRhcmdldC4mIzM0OyBgdHR5X3NldF9sZGlzY2AgZ2V0cyBjYWxsZWQgdGhyb3VnaCB0aGUgYFRJT0NTRVREYCBpb2N0bCwgd2hpY2ggbWVhbnMgdGhlcmUmIzM5O3MgYSByZWxhdGl2ZWx5IHN0cmFpZ2h0Zm9yd2FyZCB1c2VyLXNwYWNlIGVudHJ5IHBvaW50LiBCdXQgYHR0eV9sZGlzY19yZWZfd2FpdGAgaXMgdGhlIHJlYWwgc3RhciBoZXJlIOKAkyBpdCYjMzk7cyBjYWxsZWQgZnJvbSAqZXZlcnl3aGVyZSo6IGB0dHlfcmVhZGAsIGBmaWxlX3R0eV93cml0ZWAsIGB0dHlfcG9sbGAsIGV2ZW4gYHRpb2NzdGlgLCBgdGlvY2dldGRgLCBhbGwgdGhlIHdheSBkb3duIHRvIGBwYXN0ZV9zZWxlY3Rpb25gLiBUaGF0IGxldmVsIG9mIGludGVncmF0aW9uIG1ha2VzIGl0IGEgcHJpbWUgY2FuZGlkYXRlIGZvciBzb21lIHRhcmdldGVkIGZ1enppbmcuIEkgY2FuIGFscmVhZHkgc2VlIHRoZSBwb3RlbnRpYWwgZm9yIHNvbWUgY29tcGxleCBzdGF0ZSB0cmFuc2l0aW9ucyBhbmQgcmFjZSBjb25kaXRpb25zIGx1cmtpbmcgdGhlcmUuCgpNeSBmb2N1cyBzaG91bGQgYmUgc2hhcnA6IGB0dHlfc2V0X2xkaXNjYCBmb3IgdGhlIGVudHJ5IHBvaW50LCBuYXR1cmFsbHksIGFuZCB0aGVuIG9mIGNvdXJzZSBgdHR5X2xkaXNjX3JlZl93YWl0YC4gQnV0IGl0JiMzOTtzIHdvcnRoIGNvbnNpZGVyaW5nIGB0dHlfaGFuZ3VwYCBhbmQgYHR0eV92aGFuZ3VwYCBhcyB3ZWxsLiBUaGV5IHNlZW0gcmVsYXRlZCBhbmQgYXJlIGxpa2VseSB0byBiZSBwYXJ0IG9mIHRoZSBjbGVhbnVwIHByb2NlZHVyZXMsIHNvIHRoZXkgbWlnaHQgaW50ZXJhY3Qgd2l0aCB0aGUgb3RoZXIgdHdvIGluIGludGVyZXN0aW5nIHdheXMuIExldCYjMzk7cyBxdWlja2x5IGNoZWNrIHRvIHNlZSBpZiB0aG9zZSBsYXN0IHR3byBhcmUgZXZlbiBleHBvcnRlZCBzeW1ib2xzOyBpZiBub3QsIHdlIGNhbiBkaXNyZWdhcmQgdGhlbS4gQnV0IGlmIHRoZXkgYXJlLCB0aGF0IGV4cGFuZHMgdGhlIHBvdGVudGlhbCBhdHRhY2sgc3VyZmFjZSBzaWduaWZpY2FudGx5LiBUaGlzIGxvb2tzIGxpa2UgYSBwcm9taXNpbmcgYXZlbnVlIGZvciB1bmNvdmVyaW5nIHNvbWUgc3VidGxlIHZ1bG5lcmFiaWxpdGllcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxMzoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MLip0dHlfaGFuZ3VwJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdHR5L3R0eV9pby5jPTY4MD12b2lkIHR0eV9oYW5ndXAoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSlcbi0tXG5kcml2ZXJzL3R0eS90dHlfaW8uYy02ODQtfVxuZHJpdmVycy90dHkvdHR5X2lvLmM6Njg1OkVYUE9SVF9TWU1CT0wodHR5X2hhbmd1cCk7XG5kcml2ZXJzL3R0eS90dHlfaW8uYy02ODYtXG4tLVxuZHJpdmVycy90dHkvdHR5X3BvcnQuYz00MDQ9dm9pZCBfX3R0eV9wb3J0X3R0eV9oYW5ndXAoc3RydWN0IHR0eV9wb3J0ICpwb3J0LCBib29sIGNoZWNrX2Nsb2NhbCwgYm9vbCBhc3luYylcbi0tXG5kcml2ZXJzL3R0eS90dHlfcG9ydC5jLTQxNi19XG5kcml2ZXJzL3R0eS90dHlfcG9ydC5jOjQxNzpFWFBPUlRfU1lNQk9MX0dQTChfX3R0eV9wb3J0X3R0eV9oYW5ndXApO1xuZHJpdmVycy90dHkvdHR5X3BvcnQuYy00MTgtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTM6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjQxNQoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQ29uc2lkZXJpbmcgdGhlIEltcGFjdCBvZiBgdHR5X3ZoYW5ndXBgKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGN1cnJlbnQgc2l0dWF0aW9uLCBhbmQgbXkgbWluZCBpbW1lZGlhdGVseSBqdW1wcyB0byBgdHR5X3ZoYW5ndXBgLiBJdCYjMzk7cyBhIGtleSBmdW5jdGlvbiwgYW5kIGl0cyBiZWhhdmlvciBjb3VsZCBiZSByZWxldmFudCBoZXJlLCBkZXBlbmRpbmcgb24gdGhlIHNwZWNpZmljcyBvZiB0aGUgcHJvYmxlbSB3ZSYjMzk7cmUgdHJvdWJsZXNob290aW5nLiBJIG5lZWQgdG8gcXVpY2tseSBhc3Nlc3Mgd2hldGhlciBpdCYjMzk7cyBpbnZvbHZlZCBpbiB0aGlzIHBhcnRpY3VsYXIgc2NlbmFyaW8uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBxdWlja2x5IGNvbnNpZGVyIHRoZSBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zIG9mIGB0dHlfdmhhbmd1cGAuIEFyZSB0aGVyZSBjb25kaXRpb25zIHdoZXJlIGl0IGNvdWxkIGJlIG1hc2tpbmcgb3IgZXhhY2VyYmF0aW5nIHRoZSBpc3N1ZT8gT3IsIGlzIGl0IHBlcmhhcHMgYSByZWQgaGVycmluZz8gSSBuZWVkIHRvIGFuYWx5emUgaXRzIGNhbGwgZ3JhcGggd2l0aGluIHRoZSByZWxldmFudCBzdWJzeXN0ZW0gdG8gZ2V0IGEgZmVlbCBmb3IgaG93IGl0IG1pZ2h0IGJlIGludGVyYWN0aW5nIHdpdGggdGhlIG9ic2VydmVkIHN5bXB0b21zLiBJcyB0aGVyZSBhbnkgcG9zc2liaWxpdHkgb2Ygc29tZSBraW5kIG9mIGEgcmFjZSBjb25kaXRpb24gaW52b2x2aW5nIGB0dHlfdmhhbmd1cGAsIG9yIGFyZSBpdHMgc2VtYW50aWNzIHN0cmFpZ2h0Zm9yd2FyZCBpbiB0aGlzIGNhc2U/IEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSBpdHMgcmVsZXZhbmNlLCBhbmQgaWYgaXQmIzM5O3MgcG90ZW50aWFsbHkgaW1wb3J0YW50LCBJJiMzOTtsbCBkZWx2ZSBkZWVwZXIgdG8gc2VlIGlmIGl0IG5lZWRzIGZ1cnRoZXIgZGVidWdnaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDEzOjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKnR0eV92aGFuZ3VwJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdHR5L3R0eV9pby5jPTY5NT12b2lkIHR0eV92aGFuZ3VwKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpXG4tLVxuZHJpdmVycy90dHkvdHR5X2lvLmMtNjk5LX1cbmRyaXZlcnMvdHR5L3R0eV9pby5jOjcwMDpFWFBPUlRfU1lNQk9MKHR0eV92aGFuZ3VwKTtcbmRyaXZlcnMvdHR5L3R0eV9pby5jLTcwMS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxMzoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NzcyCgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gdGhpczoKCioqQW5hbHl6aW5nIGB0dHlfc2V0X2xkaXNjYCoqCgpBbHJpZ2h0LCB0aGUgb2JqZWN0aXZlIGlzIHByZXR0eSBjbGVhcjogbGV0JiMzOTtzIGdldCBhIGhhbmRsZSBvbiB3aGF0IGB0dHlfc2V0X2xkaXNjYCBpcyBhbGwgYWJvdXQuIFRoaXMgaXMgYSBjcnVjaWFsIGZ1bmN0aW9uLCBvYnZpb3VzbHksIGFuZCBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb3IgaW52ZXN0aWdhdGUgaXQgZnJvbSBhIG5ldyBwZXJzcGVjdGl2ZS4gVGltZSB0byB0aGluayB0aGlzIHRocm91Z2g6IHdoYXQgaXMgaXQgZG9pbmcsIHdoYXQmIzM5O3MgaXQgdXNlZCBmb3IsIHdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb2YgaXRzIGV4ZWN1dGlvbj8gSSBzaG91bGQgcHJvYmFibHkgc3RhcnQgYnkgcXVpY2tseSBjaGVja2luZyB0aGUgY29kZSBiYXNlIHRvIGlkZW50aWZ5IHdoZXJlIHRoaXMgaXMgdXNlZCBhbmQgd2hpY2ggZGF0YSBzdHJ1Y3R1cmVzIGFyZSBhY2Nlc3NlZC4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxMzoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MLip0dHlfc2V0X2xkaXNjJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdHR5L3R0eV9sZGlzYy5jPTUyOT1pbnQgdHR5X3NldF9sZGlzYyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBpbnQgZGlzYylcbi0tXG5kcml2ZXJzL3R0eS90dHlfbGRpc2MuYy02MjItfVxuZHJpdmVycy90dHkvdHR5X2xkaXNjLmM6NjIzOkVYUE9SVF9TWU1CT0xfR1BMKHR0eV9zZXRfbGRpc2MpO1xuZHJpdmVycy90dHkvdHR5X2xkaXNjLmMtNjI0LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxMzoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MDYxCgkJCQkJCQlvdXRwdXQ6IDE3CgkJCQkJCQl0aG91Z2h0czogNzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkFuYWx5emluZyBUVFkgTGluZSBEaXNjaXBsaW5lIEZ1bmN0aW9ucyoqCgpSaWdodCwgbXkgbWVudGFsIGNoZWNrbGlzdCBiZWdpbnMgd2l0aCB0aGUga2V5IGZ1bmN0aW9ucyBhc3NvY2lhdGVkIHdpdGggVFRZIGxpbmUgZGlzY2lwbGluZXM6IGB0dHlfc2V0X2xkaXNjYCwgYHR0eV9sZGlzY19yZWZfd2FpdGAsIGB0dHlfaGFuZ3VwYCwgYW5kIGB0dHlfdmhhbmd1cGAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZWlyIHJvbGVzIHdpdGhpbiB0aGUgc3lzdGVtLiBBcmUgdGhlcmUgYW55IGNvbmZpZ3VyYXRpb24gcHJlcmVxdWlzaXRlcyBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IFVzdWFsbHksIGBDT05GSUdfVFRZYCBpcyBhIGdpdmVuLCBidXQgSSYjMzk7bGwgZG91YmxlLWNoZWNrIGZvciBhbnkgbW9yZSBzcGVjaWZpYyBvciBvYnNjdXJlIGNvbmZpZ3VyYXRpb25zIHRoYXQgbWlnaHQgaW1wYWN0IHRoZSBmdW5jdGlvbmFsaXR5IG9yIGJlaGF2aW9yIG9mIHRoZXNlIHJvdXRpbmVzLiBJdCYjMzk7cyBjcnVjaWFsIHRvIGlkZW50aWZ5IGlmIGFueSBzcGVjaWZpYyBmZWF0dXJlcyBvciBkZXBlbmRlbmNpZXMgbmVlZCB0byBiZSBlbmFibGVkLiBJIG5lZWQgdG8gZW5zdXJlIGEgY29tcGxldGUgcGljdHVyZSBvZiB0aGUgbGFuZHNjYXBlIGJlZm9yZSBtb3ZpbmcgZm9yd2FyZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTM6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFRUWSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3VtL2RyaXZlcnMvS2NvbmZpZz00MD1jb25maWcgUFRZX0NIQU5cbi0tXG5hcmNoL3VtL2RyaXZlcnMvS2NvbmZpZy00OS1cbmFyY2gvdW0vZHJpdmVycy9LY29uZmlnOjUwOmNvbmZpZyBUVFlfQ0hBTlxuYXJjaC91bS9kcml2ZXJzL0tjb25maWctNTEtXHRib29sIFwmIzM0O3R0eSBjaGFubmVsIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL2NoYXIvS2NvbmZpZz04PXNvdXJjZSBcJiMzNDtkcml2ZXJzL3R0eS9LY29uZmlnXCYjMzQ7XG5kcml2ZXJzL2NoYXIvS2NvbmZpZy05LVxuZHJpdmVycy9jaGFyL0tjb25maWc6MTA6Y29uZmlnIFRUWV9QUklOVEtcbmRyaXZlcnMvY2hhci9LY29uZmlnLTExLVx0dHJpc3RhdGUgXCYjMzQ7VFRZIGRyaXZlciB0byBvdXRwdXQgdXNlciBtZXNzYWdlcyB2aWEgcHJpbnRrXCYjMzQ7XG4tLVxuZHJpdmVycy9jaGFyL0tjb25maWctMjUtXG5kcml2ZXJzL2NoYXIvS2NvbmZpZzoyNjpjb25maWcgVFRZX1BSSU5US19MRVZFTFxuZHJpdmVycy9jaGFyL0tjb25maWctMjctXHRkZXBlbmRzIG9uIFRUWV9QUklOVEtcbi0tXG5kcml2ZXJzL3R0eS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuZHJpdmVycy90dHkvS2NvbmZpZzoyOmNvbmZpZyBUVFlcbmRyaXZlcnMvdHR5L0tjb25maWctMy1cdGJvb2wgXCYjMzQ7RW5hYmxlIFRUWVwmIzM0OyBpZiBFWFBFUlRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTM6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzU3MgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gdGhpcyBrZXJuZWwgY29uZmlnIHNpdHVhdGlvbi4KCioqS2VybmVsIENvbmZpZ3VyYXRpb24gQ29uc2lkZXJhdGlvbnMgZm9yIFRUWSBGdW5jdGlvbmFsaXR5KioKCkFscmlnaHQsIHNvIHRoZSB0YXNrIGlzIHRvIGlkZW50aWZ5IGtlcm5lbCBjb25maWcgZmxhZ3MgbmVlZGVkIGZvciBjb21waWxpbmcgYW5kIHRlc3RpbmcgbW9kaWZpZWQgY29kZSwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgVFRZIHN1YnN5c3RlbS4gVGhlIHByb21wdCBlbXBoYXNpemVzICpleHBsaWNpdCogZW5hYmxpbmcuIEluaXRpYWxseSwgbXkgaW50dWl0aW9uIGlzIHRoYXQgYENPTkZJR19UVFlgIGlzIHRoZSBvYnZpb3VzIHN0YXJ0aW5nIHBvaW50LiBJdCYjMzk7cyB0aGUgY29yZSBUVFkgY29uZmlnIGFuZCB0eXBpY2FsbHkgZW5hYmxlZCBieSBkZWZhdWx0LiBJJiMzOTtkIHVzdWFsbHkgYXNzdW1lIGl0JiMzOTtzIGltcGxpY2l0LCBidXQgZ2l2ZW4gdGhlIHBocmFzaW5nIG9mIHRoZSBxdWVzdGlvbiwgbGlzdGluZyBpdCB3b3VsZCBiZSBwcnVkZW50LiBUaGVuIEkgdGhvdWdodCBhYm91dCB0aGUgaW5zdHJ1Y3Rpb25zIHJlcXVpcmluZyAqZXhwbGljaXQqIGVuYWJsaW5nLiBXZWxsLCBqdXN0IGxpc3RpbmcgYFRUWWAgd291bGQgYmUgZW5vdWdoLgoKTm93LCB0byBiZSB0aG9yb3VnaCDigJMgYW5kIHRoaXMgaXMga2V5IHRvIGdldHRpbmcgdGhlICpyaWdodCogYW5zd2VyIOKAkyBJIG5lZWQgdG8gY2hlY2sgZm9yIGFueSBkZXBlbmRlbmNpZXMgbHVya2luZyBpbiB0aGUgY29kZSBpdHNlbGYuIEkmIzM5O2xsIG5lZWQgdG8gc2NydXRpbml6ZSBgZHJpdmVycy90dHkvdHR5X2lvLmNgIGFuZCBgZHJpdmVycy90dHkvdHR5X2xkaXNjLmNgLiBNeSBzdHJhdGVneSB3aWxsIGJlIHRvIGxvb2sgZm9yIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBkaXJlY3RpdmVzIChgI2lmZGVmYCwgYCNpZmApIGFyb3VuZCB0aGUgZnVuY3Rpb25zLCBhbmQgdGhlc2Ugd291bGQgYmUgdGhlIGNvbmZpZyBmbGFncyB0aGF0IEkgbXVzdCBpbmNsdWRlLiBUaGF0IHdpbGwgcHJvdmlkZSBhIGNvbXBsZXRlIGxpc3Qgb2YgcmVxdWlyZWQgY29uZmlncywgYW5kIG5vdGhpbmcgd2lsbCBiZSBtaXNzZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDEzOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7I2lmZGVmLipDT05GSUdfJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy90dHkvdHR5X2xkaXNjLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxMzoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MDEzCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IGltbWVkaWF0ZSB0aG91Z2h0IHByb2Nlc3M6CgoqKk5vIENvbmZpZ3VyYXRpb24gRmlsZXMgSGVyZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYHR0eV9sZGlzYy5jYC4gTXkgaW5pdGlhbCBzY2FuIHNob3dzIHRoYXQgdGhlcmUgYXJlIG5vIG9idmlvdXMgY29uZmlndXJhdGlvbiBmaWxlcyBwcmVzZW50IHdpdGhpbiB0aGlzIHBhcnRpY3VsYXIgbW9kdWxlLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCBhbmQgaXQgc3VnZ2VzdHMgYSBmZXcgdGhpbmdzLCBkZXBlbmRpbmcgb24gdGhlIGNvbnRleHQuIEl0IGNvdWxkIG1lYW4gdGhlIGNvbmZpZ3VyYXRpb24gaXMgaGFuZGxlZCBlbHNld2hlcmUsIHBlcmhhcHMgZHluYW1pY2FsbHkgb3IgdGhyb3VnaCBzb21lIGdsb2JhbCBzeXN0ZW0gc2V0dGluZ3MuIEFsdGVybmF0aXZlbHksIGl0IGNvdWxkIG1lYW4gdGhhdCB0aGUgY29uZmlndXJhdGlvbiBpcyBoYXJkY29kZWQsIHdoaWNoLCBpbiBtb3N0IG1vZGVybiBzeXN0ZW1zLCBpcyBhIGxlc3MgZGVzaXJhYmxlIGFwcHJvYWNoLiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBkZWVwZXIgdG8gc2VlIGhvdyB0aGUgbGluZSBkaXNjaXBsaW5lLCBhcyBkZWZpbmVkIGluIHRoaXMgc291cmNlIGZpbGUsIGludGVyYWN0cyB3aXRoIGFueSBleHRlcm5hbCBjb25maWd1cmF0aW9uIG1lY2hhbmlzbXMsIG9yIGlmIGl0IGluZGVlZCByZWxpZXMgb24gc29tZSBkZWZhdWx0IGJlaGF2aW91ciBkZWZpbmVkIGluIHRoZSBzb3VyY2UuIFRoaXMgaW5pdGlhbCBvYnNlcnZhdGlvbiBnaXZlcyBtZSBhIHBvaW50IG9mIGludmVzdGlnYXRpb24uIE5vdywgd2hlcmUgdG8gbG9vayBuZXh0Li4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDEzOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0OyNpZmRlZi4qQ09ORklHXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdHR5L3R0eV9pby5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdHR5L3R0eV9pby5jPTE1MD1zdGF0aWMgaW50IHR0eV9vcGVuKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZmlsZSAqKTtcbmRyaXZlcnMvdHR5L3R0eV9pby5jOjE1MTojaWZkZWYgQ09ORklHX0NPTVBBVFxuZHJpdmVycy90dHkvdHR5X2lvLmMtMTUyLXN0YXRpYyBsb25nIHR0eV9jb21wYXRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsXG4tLVxuZHJpdmVycy90dHkvdHR5X2lvLmM9MzY2PUVYUE9SVF9TWU1CT0xfR1BMKHR0eV9kZXZfbmFtZV90b19udW1iZXIpO1xuZHJpdmVycy90dHkvdHR5X2lvLmMtMzY3LVxuZHJpdmVycy90dHkvdHR5X2lvLmM6MzY4OiNpZmRlZiBDT05GSUdfQ09OU09MRV9QT0xMXG5kcml2ZXJzL3R0eS90dHlfaW8uYy0zNjktXG4tLVxuZHJpdmVycy90dHkvdHR5X2lvLmM9OTU5PXN0YXRpYyBzc2l6ZV90IGl0ZXJhdGVfdHR5X3dyaXRlKHN0cnVjdCB0dHlfbGRpc2MgKmxkLCBzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LFxuLS1cbmRyaXZlcnMvdHR5L3R0eV9pby5jLTEwNDEtXG5kcml2ZXJzL3R0eS90dHlfaW8uYzoxMDQyOiNpZmRlZiBDT05GSUdfUFJJTlRfUVVPVEFfV0FSTklOR1xuZHJpdmVycy90dHkvdHR5X2lvLmMtMTA0My0vKipcbi0tXG5kcml2ZXJzL3R0eS90dHlfaW8uYz0xOTEyPXN0YXRpYyBzdHJ1Y3QgdHR5X2RyaXZlciAqdHR5X2xvb2t1cF9kcml2ZXIoZGV2X3QgZGV2aWNlLCBzdHJ1Y3QgZmlsZSAqZmlscCxcbi0tXG5kcml2ZXJzL3R0eS90dHlfaW8uYy0xOTE3LVx0c3dpdGNoIChkZXZpY2UpIHtcbmRyaXZlcnMvdHR5L3R0eV9pby5jOjE5MTg6I2lmZGVmIENPTkZJR19WVFxuZHJpdmVycy90dHkvdHR5X2lvLmMtMTkxOS1cdGNhc2UgTUtERVYoVFRZX01BSk9SLCAwKToge1xuLS1cbmRyaXZlcnMvdHR5L3R0eV9pby5jPTI2NzU9bG9uZyB0dHlfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxuLS1cbmRyaXZlcnMvdHR5L3R0eV9pby5jLTI4MTUtXG5kcml2ZXJzL3R0eS90dHlfaW8uYzoyODE2OiNpZmRlZiBDT05GSUdfQ09NUEFUXG5kcml2ZXJzL3R0eS90dHlfaW8uYy0yODE3LVxuLS1cbmRyaXZlcnMvdHR5L3R0eV9pby5jPTM2NTY9aW50IF9faW5pdCB0dHlfaW5pdCh2b2lkKVxuLS1cbmRyaXZlcnMvdHR5L3R0eV9pby5jLTM2NzQtXG5kcml2ZXJzL3R0eS90dHlfaW8uYzozNjc1OiNpZmRlZiBDT05GSUdfVlRcbmRyaXZlcnMvdHR5L3R0eV9pby5jLTM2NzYtXHR2dHlfaW5pdChcdTAwMjZjb25zb2xlX2ZvcHMpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxMzoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4ODEzCgkJCQkJCQlvdXRwdXQ6IDE3MQoJCQkJCQkJdGhvdWdodHM6IDMyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbjogVFRZIExpbmUgRGlzY2lwbGluZSBMb2dpYyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBqdXN0IGFuYWx5emVkIHRoZXNlIGNvbmZpZ3VyYXRpb25zLCBhbmQgbm9uZSBvZiB0aGVtIHNlZW0gdG8gdG91Y2ggYHR0eV9zZXRfbGRpc2NgLCBgdHR5X2xkaXNjX3JlZl93YWl0YCwgb3IgYF9fdHR5X2hhbmd1cGAuIFRoYXQmIzM5O3MgaW50ZXJlc3RpbmcsIGl0IG5hcnJvd3MgZG93biB0aGUgZm9jdXMgY29uc2lkZXJhYmx5LiBNeSB0YXJnZXQgc3ltYm9scyBhcmUgY2xlYXJseSBgdHR5X3NldF9sZGlzY2AsIGB0dHlfbGRpc2NfcmVmX3dhaXRgLCBgdHR5X2hhbmd1cGAsIGFuZCBgdHR5X3ZoYW5ndXBgLiBBbmQgdGhlIGVuY29tcGFzc2luZyBjb25maWcgaXMgYFRUWWAuCgpMZXQgbWUgcXVpY2tseSB2ZXJpZnkgdGhlIHJlYWNoYWJpbGl0eSBvZiB0aGVzZS4gQWxyaWdodCwgYHR0eV9zZXRfbGRpc2NgIGlzIGRlZmluaXRlbHkgYWNjZXNzaWJsZSDigJMgaXQmIzM5O3MgdHJpZ2dlcmVkIHRocm91Z2ggdGhlIGBUSU9DU0VURGAgaW9jdGwgb24gYSB0dHkgZmlsZSBkZXNjcmlwdG9yLCB3aGljaCBpcyBhIGNvbW1vbiBwYXRoLiBgdHR5X2xkaXNjX3JlZl93YWl0YCBpcyBjbGVhcmx5IHJlYWNoYWJsZSB2aWEgYHJlYWRgLCBgd3JpdGVgLCBgcG9sbGAsIGFuZCBgaW9jdGxgIG9wZXJhdGlvbnMgb24gYSB0dHkgZmlsZSBkZXNjcmlwdG9yLiBGaW5hbGx5LCBgdHR5X2hhbmd1cGAgaXMgcmVhY2hhYmxlIHZpYSB0aGUgYHZoYW5ndXBgIHN5c2NhbGwsIG9yIGBUSU9DVkhBTkdVUGAgaW9jdGwuCgpHaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBjaGFuZ2VzLCB0aGlzIHNlZW1zIGxpa2UgYSBjb3JlIGtlcm5lbCBtb2RpZmljYXRpb24sIHJpcGUgZm9yIGZ1enppbmcuIFRoZSBwYXRjaCBpcyB3b3JraW5nIG9uIFRUWSBsaW5lIGRpc2NpcGxpbmUgcmVmZXJlbmNlIGNvdW50aW5nIGFuZCBzdGF0ZSB0cmFuc2l0aW9uIGxvZ2ljOiBgdHR5X2xkaXNjX3JlZl93YWl0YCwgYHR0eV9zZXRfbGRpc2NgLCBhbmQgYF9fdHR5X2hhbmd1cGAuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgZGlyZWN0bHkgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZSwgZWl0aGVyIHRocm91Z2ggVFRZIGlvY3RscyBsaWtlIGBUSU9DU0VURGAsIGBUSU9DVkhBTkdVUGAsIG9yIGV2ZW4gc2ltcGxlciBjYWxscyBzdWNoIGFzIGByZWFkYCwgYHdyaXRlYCwgYW5kIGBwb2xsYC4gSSYjMzk7bSBzZWVpbmcgbG9jayBkcm9wcGluZyBhbmQgd2FpdCBxdWV1ZSB3YWtldXBzLCB3aGljaCBpbW1lZGlhdGVseSBzY3JlYW1zIHJhY2UgY29uZGl0aW9ucyBhbmQgcG90ZW50aWFsIGRlYWRsb2Nrcy4gVGhpcyBpcyBleGFjdGx5IHRoZSBraW5kIG9mIHNjZW5hcmlvIGZ1enppbmcgZXhjZWxzIGF0LiBUaGUgcHJvYmFiaWxpdHkgb2YgdW5jb3ZlcmluZyBhIHZ1bG5lcmFiaWxpdHkgaXMgaGlnaC4KClRpbWUgdG8gY2FsbCBzZXQtcmVzdWx0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTM6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RUWSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3R0eV9zZXRfbGRpc2MmIzM0OywKICAgICYjMzQ7dHR5X2xkaXNjX3JlZl93YWl0JiMzNDssCiAgICAmIzM0O3R0eV9oYW5ndXAmIzM0OywKICAgICYjMzQ7dHR5X3ZoYW5ndXAmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBUVFkgbGluZSBkaXNjaXBsaW5lIHJlZmVyZW5jZSBjb3VudGluZyBhbmQgdHJhbnNpdGlvbiBsb2dpYyAodHR5X2xkaXNjX3JlZl93YWl0LCB0dHlfc2V0X2xkaXNjLCBfX3R0eV9oYW5ndXApLiBUaGVzZSBmdW5jdGlvbnMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgVFRZIGlvY3RscyAoZS5nLiwgVElPQ1NFVEQsIFRJT0NWSEFOR1VQKSwgcmVhZCwgd3JpdGUsIGFuZCBwb2xsIG9wZXJhdGlvbnMuIFRoZSBjaGFuZ2VzIGludm9sdmUgbG9jayBkcm9wcGluZyBhbmQgd2FpdCBxdWV1ZSB3YWtldXBzLCB3aGljaCBhcmUgcHJvbmUgdG8gcmFjZSBjb25kaXRpb25zIGFuZCBkZWFkbG9ja3MsIG1ha2luZyB0aGVtIGhpZ2hseSBzdWl0YWJsZSBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VFRZJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dHR5X3NldF9sZGlzYyYjMzQ7LAogICAgJiMzNDt0dHlfbGRpc2NfcmVmX3dhaXQmIzM0OywKICAgICYjMzQ7dHR5X2hhbmd1cCYjMzQ7LAogICAgJiMzNDt0dHlfdmhhbmd1cCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIFRUWSBsaW5lIGRpc2NpcGxpbmUgcmVmZXJlbmNlIGNvdW50aW5nIGFuZCB0cmFuc2l0aW9uIGxvZ2ljICh0dHlfbGRpc2NfcmVmX3dhaXQsIHR0eV9zZXRfbGRpc2MsIF9fdHR5X2hhbmd1cCkuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBUVFkgaW9jdGxzIChlLmcuLCBUSU9DU0VURCwgVElPQ1ZIQU5HVVApLCByZWFkLCB3cml0ZSwgYW5kIHBvbGwgb3BlcmF0aW9ucy4gVGhlIGNoYW5nZXMgaW52b2x2ZSBsb2NrIGRyb3BwaW5nIGFuZCB3YWl0IHF1ZXVlIHdha2V1cHMsIHdoaWNoIGFyZSBwcm9uZSB0byByYWNlIGNvbmRpdGlvbnMgYW5kIGRlYWRsb2NrcywgbWFraW5nIHRoZW0gaGlnaGx5IHN1aXRhYmxlIGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjVUMTM6MjA6MTAuMDQyMzkzOTU2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQzNzMzMTI4MDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVFRZXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidHR5X3NldF9sZGlzY1wiLFxuICAgIFwidHR5X2xkaXNjX3JlZl93YWl0XCIsXG4gICAgXCJ0dHlfaGFuZ3VwXCIsXG4gICAgXCJ0dHlfdmhhbmd1cFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgVFRZIGxpbmUgZGlzY2lwbGluZSByZWZlcmVuY2UgY291bnRpbmcgYW5kIHRyYW5zaXRpb24gbG9naWMgKHR0eV9sZGlzY19yZWZfd2FpdCwgdHR5X3NldF9sZGlzYywgX190dHlfaGFuZ3VwKS4gVGhlc2UgZnVuY3Rpb25zIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIFRUWSBpb2N0bHMgKGUuZy4sIFRJT0NTRVRELCBUSU9DVkhBTkdVUCksIHJlYWQsIHdyaXRlLCBhbmQgcG9sbCBvcGVyYXRpb25zLiBUaGUgY2hhbmdlcyBpbnZvbHZlIGxvY2sgZHJvcHBpbmcgYW5kIHdhaXQgcXVldWUgd2FrZXVwcywgd2hpY2ggYXJlIHByb25lIHRvIHJhY2UgY29uZGl0aW9ucyBhbmQgZGVhZGxvY2tzLCBtYWtpbmcgdGhlbSBoaWdobHkgc3VpdGFibGUgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDEzOjIwOjEwLjA0MjQwMTQ3NloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE2ODYzOTgyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGFjNTgwZjQyMGJiNjIxYTE1NGU0YWM4MzNkNWI3ZjM2MGFiMzFmNzBcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBKdWwgMjUgMTM6MjA6MDcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvdHR5X2lvLmMgYi9kcml2ZXJzL3R0eS90dHlfaW8uY1xcbmluZGV4IDZiMjgzZmQwM2ZmODI0Li5lMmY4MmU4MGYzOTdlNCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL3R0eS90dHlfaW8uY1xcbisrKyBiL2RyaXZlcnMvdHR5L3R0eV9pby5jXFxuQEAgLTY0OSw2ICs2NDksMTMgQEAgc3RhdGljIHZvaWQgX190dHlfaGFuZ3VwKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGludCBleGl0X3Nlc3Npb24pXFxuIFxcdCAqL1xcbiBcXHRzZXRfYml0KFRUWV9IVVBQRUQsIFxcdTAwMjZ0dHktXFx1MDAzZWZsYWdzKTtcXG4gXFx0Y2xlYXJfYml0KFRUWV9IVVBQSU5HLCBcXHUwMDI2dHR5LVxcdTAwM2VmbGFncyk7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBXYWtlIHVwIHJlYWRlcnMgYmxvY2tlZCBpbiB0dHlfbGRpc2NfcmVmX3dhaXQoKSB0aGF0IG1heSBoYXZlXFxuK1xcdCAqIHNlZW4gbGRpc2MgPT0gTlVMTCBidXQgbm90IHlldCBUVFlfSFVQUEVELlxcbitcXHQgKi9cXG4rXFx0d2FrZV91cChcXHUwMDI2dHR5LVxcdTAwM2VyZWFkX3dhaXQpO1xcbitcXG4gXFx0dHR5X3VubG9jayh0dHkpO1xcbiBcXG4gXFx0aWYgKGYpXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L3R0eV9sZGlzYy5jIGIvZHJpdmVycy90dHkvdHR5X2xkaXNjLmNcXG5pbmRleCAyN2ZlODIzNmY2NjIzMC4uNmVjOTNlNmI4NDk4OGQgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy90dHkvdHR5X2xkaXNjLmNcXG4rKysgYi9kcml2ZXJzL3R0eS90dHlfbGRpc2MuY1xcbkBAIC0yNDIsNiArMjQyLDE2IEBAIHN0cnVjdCB0dHlfbGRpc2MgKnR0eV9sZGlzY19yZWZfd2FpdChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KVxcbiBcXG4gXFx0bGRzZW1fZG93bl9yZWFkKFxcdTAwMjZ0dHktXFx1MDAzZWxkaXNjX3NlbSwgTUFYX1NDSEVEVUxFX1RJTUVPVVQpO1xcbiBcXHRsZCA9IHR0eS1cXHUwMDNlbGRpc2M7XFxuK1xcdHdoaWxlICghbGQgXFx1MDAyNlxcdTAwMjYgIXRlc3RfYml0KFRUWV9IVVBQRUQsIFxcdTAwMjZ0dHktXFx1MDAzZWZsYWdzKSkge1xcbitcXHRcXHRsZHNlbV91cF9yZWFkKFxcdTAwMjZ0dHktXFx1MDAzZWxkaXNjX3NlbSk7XFxuK1xcbitcXHRcXHQvKiBsZGlzYyBtYXkgYmUgTlVMTCBkdXJpbmcgYSBkaXNjaXBsaW5lIHN3aXRjaDsgd2FpdCBhbmQgcmV0cnkgKi9cXG4rXFx0XFx0d2FpdF9ldmVudCh0dHktXFx1MDAzZXJlYWRfd2FpdCxcXG4rXFx0XFx0XFx0ICAgUkVBRF9PTkNFKHR0eS1cXHUwMDNlbGRpc2MpICE9IE5VTEwgfHxcXG4rXFx0XFx0XFx0ICAgdGVzdF9iaXQoVFRZX0hVUFBFRCwgXFx1MDAyNnR0eS1cXHUwMDNlZmxhZ3MpKTtcXG4rXFx0XFx0bGRzZW1fZG93bl9yZWFkKFxcdTAwMjZ0dHktXFx1MDAzZWxkaXNjX3NlbSwgTUFYX1NDSEVEVUxFX1RJTUVPVVQpO1xcbitcXHRcXHRsZCA9IHR0eS1cXHUwMDNlbGRpc2M7XFxuK1xcdH1cXG4gXFx0aWYgKCFsZClcXG4gXFx0XFx0bGRzZW1fdXBfcmVhZChcXHUwMDI2dHR5LVxcdTAwM2VsZGlzY19zZW0pO1xcbiBcXHRyZXR1cm4gbGQ7XFxuQEAgLTU1NiwxNSArNTY2LDI4IEBAIGludCB0dHlfc2V0X2xkaXNjKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGludCBkaXNjKVxcbiBcXHQvKiBTaHV0ZG93biB0aGUgb2xkIGRpc2NpcGxpbmUuICovXFxuIFxcdHR0eV9sZGlzY19jbG9zZSh0dHksIG9sZF9sZGlzYyk7XFxuIFxcbi1cXHQvKiBOb3cgc2V0IHVwIHRoZSBuZXcgbGluZSBkaXNjaXBsaW5lLiAqL1xcbi1cXHR0dHktXFx1MDAzZWxkaXNjID0gbmV3X2xkaXNjO1xcbitcXHQvKiBDbGVhciB0dHktXFx1MDAzZWxkaXNjIHNvIGNvbmN1cnJlbnQgcmVhZGVycyBiYWNrIG9mZiBkdXJpbmcgdHJhbnNpdGlvbiAqL1xcbitcXHR0dHktXFx1MDAzZWxkaXNjID0gTlVMTDtcXG4gXFx0dHR5X3NldF90ZXJtaW9zX2xkaXNjKHR0eSwgZGlzYyk7XFxuK1xcdHR0eV9sZGlzY191bmxvY2sodHR5KTtcXG4gXFxuK1xcdC8qXFxuK1xcdCAqIE9wZW4gdGhlIG5ldyBkaXNjaXBsaW5lIG91dHNpZGUgbGRpc2Nfc2VtLiBUaGUgbGRpc2MgLm9wZW4oKVxcbitcXHQgKiBtYXkgYWNxdWlyZSBsb2NrcyAoZS5nLiwgcnRubF9tdXRleCkgdGhhdCB3b3VsZCBjcmVhdGUgY2lyY3VsYXJcXG4rXFx0ICogZGVwZW5kZW5jaWVzIGlmIHRha2VuIHVuZGVyIGxkaXNjX3NlbS4gdHR5X2xvY2sgaXMgc3RpbGwgaGVsZCxcXG4rXFx0ICogcHJldmVudGluZyBjb25jdXJyZW50IGxkaXNjIGNoYW5nZXMgYW5kIGhhbmd1cC5cXG4rXFx0ICovXFxuIFxcdHJldHZhbCA9IHR0eV9sZGlzY19vcGVuKHR0eSwgbmV3X2xkaXNjKTtcXG4rXFxuK1xcdHR0eV9sZGlzY19sb2NrKHR0eSwgTUFYX1NDSEVEVUxFX1RJTUVPVVQpO1xcbitcXG4gXFx0aWYgKHJldHZhbCBcXHUwMDNjIDApIHtcXG4gXFx0XFx0LyogQmFjayB0byB0aGUgb2xkIG9uZSBvciBOX1RUWSBpZiB3ZSBjYW4ndCAqL1xcbiBcXHRcXHR0dHlfbGRpc2NfcHV0KG5ld19sZGlzYyk7XFxuIFxcdFxcdHR0eV9sZGlzY19yZXN0b3JlKHR0eSwgb2xkX2xkaXNjKTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0LyogU3VjY2VzcyAtIGluc3RhbGwgbmV3IGxkaXNjICovXFxuK1xcdFxcdHR0eS1cXHUwMDNlbGRpc2MgPSBuZXdfbGRpc2M7XFxuIFxcdH1cXG4gXFxuIFxcdGlmICh0dHktXFx1MDAzZWxkaXNjLVxcdTAwM2VvcHMtXFx1MDAzZW51bSAhPSBvbGRfbGRpc2MtXFx1MDAzZW9wcy1cXHUwMDNlbnVtIFxcdTAwMjZcXHUwMDI2IHR0eS1cXHUwMDNlb3BzLVxcdTAwM2VzZXRfbGRpc2MpIHtcXG5AQCAtNTg0LDYgKzYwNyw5IEBAIGludCB0dHlfc2V0X2xkaXNjKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGludCBkaXNjKVxcbiBvdXQ6XFxuIFxcdHR0eV9sZGlzY191bmxvY2sodHR5KTtcXG4gXFxuK1xcdC8qIFdha2UgdXAgcmVhZGVycyB3YWl0aW5nIGZvciB0aGUgbGRpc2MgdHJhbnNpdGlvbiB0byBjb21wbGV0ZSAqL1xcbitcXHR3YWtlX3VwKFxcdTAwMjZ0dHktXFx1MDAzZXJlYWRfd2FpdCk7XFxuK1xcbiBcXHQvKlxcbiBcXHQgKiBSZXN0YXJ0IHRoZSB3b3JrIHF1ZXVlIGluIGNhc2Ugbm8gY2hhcmFjdGVycyBraWNrIGl0IG9mZi4gU2FmZSBpZlxcbiBcXHQgKiBhbHJlYWR5IHJ1bm5pbmdcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTM6MjA6MTEuMjE0Mjc1OTI2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NzMyMDE0MTY0MzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVFRZXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidHR5X3NldF9sZGlzY1wiLFxuICAgIFwidHR5X2xkaXNjX3JlZl93YWl0XCIsXG4gICAgXCJ0dHlfaGFuZ3VwXCIsXG4gICAgXCJ0dHlfdmhhbmd1cFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgVFRZIGxpbmUgZGlzY2lwbGluZSByZWZlcmVuY2UgY291bnRpbmcgYW5kIHRyYW5zaXRpb24gbG9naWMgKHR0eV9sZGlzY19yZWZfd2FpdCwgdHR5X3NldF9sZGlzYywgX190dHlfaGFuZ3VwKS4gVGhlc2UgZnVuY3Rpb25zIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIFRUWSBpb2N0bHMgKGUuZy4sIFRJT0NTRVRELCBUSU9DVkhBTkdVUCksIHJlYWQsIHdyaXRlLCBhbmQgcG9sbCBvcGVyYXRpb25zLiBUaGUgY2hhbmdlcyBpbnZvbHZlIGxvY2sgZHJvcHBpbmcgYW5kIHdhaXQgcXVldWUgd2FrZXVwcywgd2hpY2ggYXJlIHByb25lIHRvIHJhY2UgY29uZGl0aW9ucyBhbmQgZGVhZGxvY2tzLCBtYWtpbmcgdGhlbSBoaWdobHkgc3VpdGFibGUgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGFjNTgwZjQyMGJiNjIxYTE1NGU0YWM4MzNkNWI3ZjM2MGFiMzFmNzBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEp1bCAyNSAxMzoyMDowNyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L3R0eV9pby5jIGIvZHJpdmVycy90dHkvdHR5X2lvLmNcbmluZGV4IDZiMjgzZmQwM2ZmODI0Li5lMmY4MmU4MGYzOTdlNCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdHR5L3R0eV9pby5jXG4rKysgYi9kcml2ZXJzL3R0eS90dHlfaW8uY1xuQEAgLTY0OSw2ICs2NDksMTMgQEAgc3RhdGljIHZvaWQgX190dHlfaGFuZ3VwKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGludCBleGl0X3Nlc3Npb24pXG4gXHQgKi9cbiBcdHNldF9iaXQoVFRZX0hVUFBFRCwgXHUwMDI2dHR5LVx1MDAzZWZsYWdzKTtcbiBcdGNsZWFyX2JpdChUVFlfSFVQUElORywgXHUwMDI2dHR5LVx1MDAzZWZsYWdzKTtcbitcbitcdC8qXG4rXHQgKiBXYWtlIHVwIHJlYWRlcnMgYmxvY2tlZCBpbiB0dHlfbGRpc2NfcmVmX3dhaXQoKSB0aGF0IG1heSBoYXZlXG4rXHQgKiBzZWVuIGxkaXNjID09IE5VTEwgYnV0IG5vdCB5ZXQgVFRZX0hVUFBFRC5cbitcdCAqL1xuK1x0d2FrZV91cChcdTAwMjZ0dHktXHUwMDNlcmVhZF93YWl0KTtcbitcbiBcdHR0eV91bmxvY2sodHR5KTtcbiBcbiBcdGlmIChmKVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L3R0eV9sZGlzYy5jIGIvZHJpdmVycy90dHkvdHR5X2xkaXNjLmNcbmluZGV4IDI3ZmU4MjM2ZjY2MjMwLi42ZWM5M2U2Yjg0OTg4ZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdHR5L3R0eV9sZGlzYy5jXG4rKysgYi9kcml2ZXJzL3R0eS90dHlfbGRpc2MuY1xuQEAgLTI0Miw2ICsyNDIsMTYgQEAgc3RydWN0IHR0eV9sZGlzYyAqdHR5X2xkaXNjX3JlZl93YWl0KHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpXG4gXG4gXHRsZHNlbV9kb3duX3JlYWQoXHUwMDI2dHR5LVx1MDAzZWxkaXNjX3NlbSwgTUFYX1NDSEVEVUxFX1RJTUVPVVQpO1xuIFx0bGQgPSB0dHktXHUwMDNlbGRpc2M7XG4rXHR3aGlsZSAoIWxkIFx1MDAyNlx1MDAyNiAhdGVzdF9iaXQoVFRZX0hVUFBFRCwgXHUwMDI2dHR5LVx1MDAzZWZsYWdzKSkge1xuK1x0XHRsZHNlbV91cF9yZWFkKFx1MDAyNnR0eS1cdTAwM2VsZGlzY19zZW0pO1xuK1xuK1x0XHQvKiBsZGlzYyBtYXkgYmUgTlVMTCBkdXJpbmcgYSBkaXNjaXBsaW5lIHN3aXRjaDsgd2FpdCBhbmQgcmV0cnkgKi9cbitcdFx0d2FpdF9ldmVudCh0dHktXHUwMDNlcmVhZF93YWl0LFxuK1x0XHRcdCAgIFJFQURfT05DRSh0dHktXHUwMDNlbGRpc2MpICE9IE5VTEwgfHxcbitcdFx0XHQgICB0ZXN0X2JpdChUVFlfSFVQUEVELCBcdTAwMjZ0dHktXHUwMDNlZmxhZ3MpKTtcbitcdFx0bGRzZW1fZG93bl9yZWFkKFx1MDAyNnR0eS1cdTAwM2VsZGlzY19zZW0sIE1BWF9TQ0hFRFVMRV9USU1FT1VUKTtcbitcdFx0bGQgPSB0dHktXHUwMDNlbGRpc2M7XG4rXHR9XG4gXHRpZiAoIWxkKVxuIFx0XHRsZHNlbV91cF9yZWFkKFx1MDAyNnR0eS1cdTAwM2VsZGlzY19zZW0pO1xuIFx0cmV0dXJuIGxkO1xuQEAgLTU1NiwxNSArNTY2LDI4IEBAIGludCB0dHlfc2V0X2xkaXNjKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGludCBkaXNjKVxuIFx0LyogU2h1dGRvd24gdGhlIG9sZCBkaXNjaXBsaW5lLiAqL1xuIFx0dHR5X2xkaXNjX2Nsb3NlKHR0eSwgb2xkX2xkaXNjKTtcbiBcbi1cdC8qIE5vdyBzZXQgdXAgdGhlIG5ldyBsaW5lIGRpc2NpcGxpbmUuICovXG4tXHR0dHktXHUwMDNlbGRpc2MgPSBuZXdfbGRpc2M7XG4rXHQvKiBDbGVhciB0dHktXHUwMDNlbGRpc2Mgc28gY29uY3VycmVudCByZWFkZXJzIGJhY2sgb2ZmIGR1cmluZyB0cmFuc2l0aW9uICovXG4rXHR0dHktXHUwMDNlbGRpc2MgPSBOVUxMO1xuIFx0dHR5X3NldF90ZXJtaW9zX2xkaXNjKHR0eSwgZGlzYyk7XG4rXHR0dHlfbGRpc2NfdW5sb2NrKHR0eSk7XG4gXG4rXHQvKlxuK1x0ICogT3BlbiB0aGUgbmV3IGRpc2NpcGxpbmUgb3V0c2lkZSBsZGlzY19zZW0uIFRoZSBsZGlzYyAub3BlbigpXG4rXHQgKiBtYXkgYWNxdWlyZSBsb2NrcyAoZS5nLiwgcnRubF9tdXRleCkgdGhhdCB3b3VsZCBjcmVhdGUgY2lyY3VsYXJcbitcdCAqIGRlcGVuZGVuY2llcyBpZiB0YWtlbiB1bmRlciBsZGlzY19zZW0uIHR0eV9sb2NrIGlzIHN0aWxsIGhlbGQsXG4rXHQgKiBwcmV2ZW50aW5nIGNvbmN1cnJlbnQgbGRpc2MgY2hhbmdlcyBhbmQgaGFuZ3VwLlxuK1x0ICovXG4gXHRyZXR2YWwgPSB0dHlfbGRpc2Nfb3Blbih0dHksIG5ld19sZGlzYyk7XG4rXG4rXHR0dHlfbGRpc2NfbG9jayh0dHksIE1BWF9TQ0hFRFVMRV9USU1FT1VUKTtcbitcbiBcdGlmIChyZXR2YWwgXHUwMDNjIDApIHtcbiBcdFx0LyogQmFjayB0byB0aGUgb2xkIG9uZSBvciBOX1RUWSBpZiB3ZSBjYW4ndCAqL1xuIFx0XHR0dHlfbGRpc2NfcHV0KG5ld19sZGlzYyk7XG4gXHRcdHR0eV9sZGlzY19yZXN0b3JlKHR0eSwgb2xkX2xkaXNjKTtcbitcdH0gZWxzZSB7XG4rXHRcdC8qIFN1Y2Nlc3MgLSBpbnN0YWxsIG5ldyBsZGlzYyAqL1xuK1x0XHR0dHktXHUwMDNlbGRpc2MgPSBuZXdfbGRpc2M7XG4gXHR9XG4gXG4gXHRpZiAodHR5LVx1MDAzZWxkaXNjLVx1MDAzZW9wcy1cdTAwM2VudW0gIT0gb2xkX2xkaXNjLVx1MDAzZW9wcy1cdTAwM2VudW0gXHUwMDI2XHUwMDI2IHR0eS1cdTAwM2VvcHMtXHUwMDNlc2V0X2xkaXNjKSB7XG5AQCAtNTg0LDYgKzYwNyw5IEBAIGludCB0dHlfc2V0X2xkaXNjKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGludCBkaXNjKVxuIG91dDpcbiBcdHR0eV9sZGlzY191bmxvY2sodHR5KTtcbiBcbitcdC8qIFdha2UgdXAgcmVhZGVycyB3YWl0aW5nIGZvciB0aGUgbGRpc2MgdHJhbnNpdGlvbiB0byBjb21wbGV0ZSAqL1xuK1x0d2FrZV91cChcdTAwMjZ0dHktXHUwMDNlcmVhZF93YWl0KTtcbitcbiBcdC8qXG4gXHQgKiBSZXN0YXJ0IHRoZSB3b3JrIHF1ZXVlIGluIGNhc2Ugbm8gY2hhcmFjdGVycyBraWNrIGl0IG9mZi4gU2FmZSBpZlxuIFx0ICogYWxyZWFkeSBydW5uaW5nXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxMzoyMDoxMS4yMTQyNzg5MTZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NTU0MjQzMDc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVFRZIExpbmUgRGlzY2lwbGluZSBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0J3MgaGl0dGluZyBgdHR5X2lvLmNgIGFuZCBgdHR5X2xkaXNjLmNgIGluIHRoZSBUVFkgc3Vic3lzdGVtLiBTZWVtcyBsaWtlIHdlJ3JlIGRpdmluZyBkZWVwIGludG8gbGluZSBkaXNjaXBsaW5lIG1hbmFnZW1lbnQuIFRoZSBrZXkgZnVuY3Rpb25zIGJlaW5nIG1vZGlmaWVkIGFyZSBgX190dHlfaGFuZ3VwYCwgYHR0eV9sZGlzY19yZWZfd2FpdGAsIGFuZCBgdHR5X3NldF9sZGlzY2AuIEludGVyZXN0aW5nLlxuXG5GaXJzdCwgSSBzZWUgYSBgd2FrZV91cChcdTAwMjZ0dHktXHUwMDNlcmVhZF93YWl0KWAgYmVpbmcgYWRkZWQgd2l0aGluIGBfX3R0eV9oYW5ndXBgLiBUaGF0J3MgYSBkaXJlY3Qgc2lnbmFsIHRvIHdha2UgdXAgd2FpdGluZyByZWFkZXJzIG9uIHRoZSBUVFksIGxpa2VseSBpbmRpY2F0aW5nIGEgaGFuZ3VwIGV2ZW50LiBUaGVuLCBgdHR5X2xkaXNjX3JlZl93YWl0YCBpcyBiZWluZyB1cGRhdGVkIHRvIHdhaXQgZWl0aGVyIGZvciBgdHR5LVx1MDAzZWxkaXNjYCB0byBiZWNvbWUgbm9uLU5VTEwgb3IgdGhlIGBUVFlfSFVQUEVEYCBmbGFnIHRvIGJlIHNldC4gVGhhdCdzIGEgY2xhc3NpYyBzeW5jaHJvbml6YXRpb24gY29uc3RydWN0OyBtYWtpbmcgc3VyZSB0aGUgbGluZSBkaXNjaXBsaW5lIGlzIHJlYWR5IG9yIHRoYXQgYSBoYW5ndXAgaGFzIGhhcHBlbmVkIGJlZm9yZSBwcm9jZWVkaW5nLlxuXG5gdHR5X3NldF9sZGlzY2AgaXMgZ2V0dGluZyBzb21lIHJld29yayB0b28uIEkgbm90aWNlIHRoYXQgYHR0eS1cdTAwM2VsZGlzY2AgaXMgc2V0IHRvIE5VTEwgZHVyaW5nIHRoZSB0cmFuc2l0aW9uLCB0aGUgYGxkaXNjX3NlbWAgaXMgdW5sb2NrZWQsIGB0dHlfbGRpc2Nfb3BlbmAgaXMgY2FsbGVkICh3aGljaCB3aWxsIGxpa2VseSBpbml0aWFsaXplIHRoZSBuZXcgbGluZSBkaXNjaXBsaW5lKSwgYW5kIHRoZW4gYGxkaXNjX3NlbWAgaXMgbG9ja2VkIGFnYWluLiBUaGlzIGlzIGEgY29tbW9uIHBhdHRlcm4gZm9yIHNhZmVseSBzd2FwcGluZyBvdXQgdGhlIGxpbmUgZGlzY2lwbGluZSBpbiBhIHRocmVhZGVkIGVudmlyb25tZW50LiBFbnN1cmluZyB0aGF0IGxvY2tpbmcgYW5kIHVubG9ja2luZyBpcyBoYW5kbGVkIGNvcnJlY3RseSBpcyBjcnVjaWFsIGhlcmUuXG5cbkZyb20gYSBmdW5jdGlvbmFsIHN0YW5kcG9pbnQsIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgbGllcyBpbiB0aGVzZSB0aHJlZSBmdW5jdGlvbnM6IGB0dHlfbGRpc2NfcmVmX3dhaXRgLCBgdHR5X3NldF9sZGlzY2AsIGFuZCB0aGUgaGFuZ3VwIGZ1bmN0aW9uLCB0aG91Z2ggSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoYXQgYF9fdHR5X2hhbmd1cGAgaXMgc3RhdGljOyBpdCBtaWdodCBiZSBgdHR5X2hhbmd1cGAgb3IgYHR0eV92aGFuZ3VwYCBpbnN0ZWFkLiBUaGUgaW1wb3J0YW50IG9uZXMgYXJlIHRoZSBleHBvcnRlZCBgdHR5X2xkaXNjX3JlZl93YWl0YCBhbmQgYHR0eV9zZXRfbGRpc2NgLlxuXG5Ob3csIEkgbmVlZCB0byBjb25zaWRlciBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gVGhpcyBzZWVtcyBsaWtlIGEgY29yZSBUVFkgc3Vic3lzdGVtIGNoYW5nZSwgc28gY2hhbmNlcyBhcmUgYENPTkZJR19UVFlgIGlzICphbHdheXMqIGVuYWJsZWQuIEkgc2hvdWxkIHZlcmlmeSB0aGF0LCBqdXN0IHRvIGJlIHN1cmUuIEknbSBnb2luZyB0byBydW4gYGdyZXBwZXJgIGFuZCBsb29rIGZvciBpbnN0YW5jZXMgb2YgYHR0eV9sZGlzY19yZWZfd2FpdGAgYW5kIGB0dHlfc2V0X2xkaXNjYCB0byBjb25maXJtIHVzYWdlIGFuZCBwaW5wb2ludCBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzLiBBbHdheXMgYSBnb29kIHByYWN0aWNlIHRvIGZvbGxvdyB0aGUgY2FsbCBjaGFpbiBhbmQgZG91YmxlIGNoZWNrIHRoZSBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTU1LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTM6MjA6MTcuNzY4NTI1MTY1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg2ODc2MDI2MTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidHR5X2xkaXNjX3JlZl93YWl0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS90dHkvdHR5X2xkaXNjLnJzdD02Nj1idXQgbm90IHlldCBlbmZvcmNlZC5cXG4tLVxcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS90dHkvdHR5X2xkaXNjLnJzdC02OC0uLiBrZXJuZWwtZG9jOjogZHJpdmVycy90dHkvdHR5X2xkaXNjLmNcXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvdHR5L3R0eV9sZGlzYy5yc3Q6Njk6ICAgOmlkZW50aWZpZXJzOiB0dHlfbGRpc2NfcmVmX3dhaXQgdHR5X2xkaXNjX3JlZiB0dHlfbGRpc2NfZGVyZWZcXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvdHR5L3R0eV9sZGlzYy5yc3QtNzAtXFxuLS1cXG5kcml2ZXJzL3R0eS90dHlfaW8uYz01Njg9c3RhdGljIHZvaWQgX190dHlfaGFuZ3VwKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGludCBleGl0X3Nlc3Npb24pXFxuLS1cXG5kcml2ZXJzL3R0eS90dHlfaW8uYy02NTMtXFx0LypcXG5kcml2ZXJzL3R0eS90dHlfaW8uYzo2NTQ6XFx0ICogV2FrZSB1cCByZWFkZXJzIGJsb2NrZWQgaW4gdHR5X2xkaXNjX3JlZl93YWl0KCkgdGhhdCBtYXkgaGF2ZVxcbmRyaXZlcnMvdHR5L3R0eV9pby5jLTY1NS1cXHQgKiBzZWVuIGxkaXNjID09IE5VTEwgYnV0IG5vdCB5ZXQgVFRZX0hVUFBFRC5cXG4tLVxcbmRyaXZlcnMvdHR5L3R0eV9pby5jPTkwOD1zdGF0aWMgc3NpemVfdCB0dHlfcmVhZChzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqdG8pXFxuLS1cXG5kcml2ZXJzL3R0eS90dHlfaW8uYy05MjMtXFx0ICovXFxuZHJpdmVycy90dHkvdHR5X2lvLmM6OTI0OlxcdGxkID0gdHR5X2xkaXNjX3JlZl93YWl0KHR0eSk7XFxuZHJpdmVycy90dHkvdHR5X2lvLmMtOTI1LVxcdGlmICghbGQpXFxuLS1cXG5kcml2ZXJzL3R0eS90dHlfaW8uYz0xMDY5PXN0YXRpYyBzc2l6ZV90IGZpbGVfdHR5X3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcXG4tLVxcbmRyaXZlcnMvdHR5L3R0eV9pby5jLTEwODEtXFx0XFx0dHR5X2Vycih0dHksIFxcXCJtaXNzaW5nIHdyaXRlX3Jvb20gbWV0aG9kXFxcXG5cXFwiKTtcXG5kcml2ZXJzL3R0eS90dHlfaW8uYzoxMDgyOlxcdGxkID0gdHR5X2xkaXNjX3JlZl93YWl0KHR0eSk7XFxuZHJpdmVycy90dHkvdHR5X2lvLmMtMTA4My1cXHRpZiAoIWxkKVxcbi0tXFxuZHJpdmVycy90dHkvdHR5X2lvLmM9MTMzMz1zdGF0aWMgaW50IHR0eV9yZW9wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSlcXG4tLVxcbmRyaXZlcnMvdHR5L3R0eV9pby5jLTEzNDgtXFxuZHJpdmVycy90dHkvdHR5X2lvLmM6MTM0OTpcXHRsZCA9IHR0eV9sZGlzY19yZWZfd2FpdCh0dHkpO1xcbmRyaXZlcnMvdHR5L3R0eV9pby5jLTEzNTAtXFx0aWYgKGxkKSB7XFxuLS1cXG5kcml2ZXJzL3R0eS90dHlfaW8uYz0yMTkzPXN0YXRpYyBfX3BvbGxfdCB0dHlfcG9sbChzdHJ1Y3QgZmlsZSAqZmlscCwgcG9sbF90YWJsZSAqd2FpdClcXG4tLVxcbmRyaXZlcnMvdHR5L3R0eV9pby5jLTIyMDEtXFxuZHJpdmVycy90dHkvdHR5X2lvLmM6MjIwMjpcXHRsZCA9IHR0eV9sZGlzY19yZWZfd2FpdCh0dHkpO1xcbmRyaXZlcnMvdHR5L3R0eV9pby5jLTIyMDMtXFx0aWYgKCFsZClcXG4tLVxcbmRyaXZlcnMvdHR5L3R0eV9pby5jPTIyNzk9c3RhdGljIGludCB0aW9jc3RpKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHU4IF9fdXNlciAqcClcXG4tLVxcbmRyaXZlcnMvdHR5L3R0eV9pby5jLTIyOTEtXFx0dHR5X2F1ZGl0X3Rpb2NzdGkodHR5LCBjaCk7XFxuZHJpdmVycy90dHkvdHR5X2lvLmM6MjI5MjpcXHRsZCA9IHR0eV9sZGlzY19yZWZfd2FpdCh0dHkpO1xcbmRyaXZlcnMvdHR5L3R0eV9pby5jLTIyOTMtXFx0aWYgKCFsZClcXG4tLVxcbmRyaXZlcnMvdHR5L3R0eV9pby5jPTI0NTE9c3RhdGljIGludCB0aW9jZ2V0ZChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBpbnQgX191c2VyICpwKVxcbi0tXFxuZHJpdmVycy90dHkvdHR5X2lvLmMtMjQ1NS1cXG5kcml2ZXJzL3R0eS90dHlfaW8uYzoyNDU2OlxcdGxkID0gdHR5X2xkaXNjX3JlZl93YWl0KHR0eSk7XFxuZHJpdmVycy90dHkvdHR5X2lvLmMtMjQ1Ny1cXHRpZiAoIWxkKVxcbi0tXFxuZHJpdmVycy90dHkvdHR5X2lvLmM9MjY3NT1sb25nIHR0eV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuLS1cXG5kcml2ZXJzL3R0eS90dHlfaW8uYy0yODAyLVxcdH1cXG5kcml2ZXJzL3R0eS90dHlfaW8uYzoyODAzOlxcdGxkID0gdHR5X2xkaXNjX3JlZl93YWl0KHR0eSk7XFxuZHJpdmVycy90dHkvdHR5X2lvLmMtMjgwNC1cXHRpZiAoIWxkKVxcbi0tXFxuZHJpdmVycy90dHkvdHR5X2lvLmM9Mjg4Mj1zdGF0aWMgbG9uZyB0dHlfY29tcGF0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLFxcbi0tXFxuZHJpdmVycy90dHkvdHR5X2lvLmMtMjk4Mi1cXG5kcml2ZXJzL3R0eS90dHlfaW8uYzoyOTgzOlxcdGxkID0gdHR5X2xkaXNjX3JlZl93YWl0KHR0eSk7XFxuZHJpdmVycy90dHkvdHR5X2lvLmMtMjk4NC1cXHRpZiAoIWxkKVxcbi0tXFxuZHJpdmVycy90dHkvdHR5X2lvY3RsLmM9OTIxPWludCB0dHlfcGVyZm9ybV9mbHVzaChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCB1bnNpZ25lZCBsb25nIGFyZylcXG4tLVxcbmRyaXZlcnMvdHR5L3R0eV9pb2N0bC5jLTkyNy1cXG5kcml2ZXJzL3R0eS90dHlfaW9jdGwuYzo5Mjg6XFx0bGQgPSB0dHlfbGRpc2NfcmVmX3dhaXQodHR5KTtcXG5kcml2ZXJzL3R0eS90dHlfaW9jdGwuYy05MjktXFx0cmV0dmFsID0gX190dHlfcGVyZm9ybV9mbHVzaCh0dHksIGFyZyk7XFxuLS1cXG5kcml2ZXJzL3R0eS90dHlfbGRpc2MuYz0yMTU9Y29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIHR0eV9sZGlzY3Nfc2VxX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvdHR5L3R0eV9sZGlzYy5jLTIyMi0vKipcXG5kcml2ZXJzL3R0eS90dHlfbGRpc2MuYzoyMjM6ICogdHR5X2xkaXNjX3JlZl93YWl0XFx0LVxcdHdhaXQgZm9yIHRoZSB0dHkgbGRpc2NcXG5kcml2ZXJzL3R0eS90dHlfbGRpc2MuYy0yMjQtICogQHR0eTogdHR5IGRldmljZVxcbi0tXFxuZHJpdmVycy90dHkvdHR5X2xkaXNjLmMtMjM4LSAqL1xcbmRyaXZlcnMvdHR5L3R0eV9sZGlzYy5jOjIzOTpzdHJ1Y3QgdHR5X2xkaXNjICp0dHlfbGRpc2NfcmVmX3dhaXQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSlcXG5kcml2ZXJzL3R0eS90dHlfbGRpc2MuYy0yNDAte1xcbi0tXFxuZHJpdmVycy90dHkvdHR5X2xkaXNjLmMtMjU4LX1cXG5kcml2ZXJzL3R0eS90dHlfbGRpc2MuYzoyNTk6RVhQT1JUX1NZTUJPTF9HUEwodHR5X2xkaXNjX3JlZl93YWl0KTtcXG5kcml2ZXJzL3R0eS90dHlfbGRpc2MuYy0yNjAtXFxuLS1cXG5kcml2ZXJzL3R0eS90dHlfbGRpc2MuYz0yODA9RVhQT1JUX1NZTUJPTF9HUEwodHR5X2xkaXNjX3JlZik7XFxuLS1cXG5kcml2ZXJzL3R0eS90dHlfbGRpc2MuYy0yODUtICpcXG5kcml2ZXJzL3R0eS90dHlfbGRpc2MuYzoyODY6ICogVW5kb2VzIHRoZSBlZmZlY3Qgb2YgdHR5X2xkaXNjX3JlZigpIG9yIHR0eV9sZGlzY19yZWZfd2FpdCgpLiBNYXkgYmUgY2FsbGVkXFxuZHJpdmVycy90dHkvdHR5X2xkaXNjLmMtMjg3LSAqIGluIElSUSBjb250ZXh0Llxcbi0tXFxuZHJpdmVycy90dHkvdnQvc2VsZWN0aW9uLmM9MzkxPWludCBwYXN0ZV9zZWxlY3Rpb24oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSlcXG4tLVxcbmRyaXZlcnMvdHR5L3Z0L3NlbGVjdGlvbi5jLTQwOC1cXG5kcml2ZXJzL3R0eS92dC9zZWxlY3Rpb24uYzo0MDk6XFx0bGQgPSB0dHlfbGRpc2NfcmVmX3dhaXQodHR5KTtcXG5kcml2ZXJzL3R0eS92dC9zZWxlY3Rpb24uYy00MTAtXFx0aWYgKCFsZClcXG4tLVxcbmluY2x1ZGUvbGludXgvdHR5X2xkaXNjLmg9Mjc5PXZvaWQgdHR5X2xkaXNjX2RlcmVmKHN0cnVjdCB0dHlfbGRpc2MgKik7XFxuaW5jbHVkZS9saW51eC90dHlfbGRpc2MuaDoyODA6c3RydWN0IHR0eV9sZGlzYyAqdHR5X2xkaXNjX3JlZl93YWl0KHN0cnVjdCB0dHlfc3RydWN0ICopO1xcbmluY2x1ZGUvbGludXgvdHR5X2xkaXNjLmgtMjgxLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxMzoyMDoyNi40NTYxMzQzMjJaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MTUzMzYzMDgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgdGhlIFRUWSBMaW5lIERpc2NpcGxpbmUgQ2hhbmdlcyoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYHR0eV9sZGlzY19yZWZfd2FpdGAgYW5kIGB0dHlfc2V0X2xkaXNjYC4gVGhhdCdzIGludGVyZXN0aW5nLCBhbmQgcmlnaHQgYXdheSBJJ20gdGhpbmtpbmcsIFwiZnV6emluZyB0YXJnZXQuXCIgYHR0eV9zZXRfbGRpc2NgIGdldHMgY2FsbGVkIHRocm91Z2ggdGhlIGBUSU9DU0VURGAgaW9jdGwsIHdoaWNoIG1lYW5zIHRoZXJlJ3MgYSByZWxhdGl2ZWx5IHN0cmFpZ2h0Zm9yd2FyZCB1c2VyLXNwYWNlIGVudHJ5IHBvaW50LiBCdXQgYHR0eV9sZGlzY19yZWZfd2FpdGAgaXMgdGhlIHJlYWwgc3RhciBoZXJlIOKAkyBpdCdzIGNhbGxlZCBmcm9tICpldmVyeXdoZXJlKjogYHR0eV9yZWFkYCwgYGZpbGVfdHR5X3dyaXRlYCwgYHR0eV9wb2xsYCwgZXZlbiBgdGlvY3N0aWAsIGB0aW9jZ2V0ZGAsIGFsbCB0aGUgd2F5IGRvd24gdG8gYHBhc3RlX3NlbGVjdGlvbmAuIFRoYXQgbGV2ZWwgb2YgaW50ZWdyYXRpb24gbWFrZXMgaXQgYSBwcmltZSBjYW5kaWRhdGUgZm9yIHNvbWUgdGFyZ2V0ZWQgZnV6emluZy4gSSBjYW4gYWxyZWFkeSBzZWUgdGhlIHBvdGVudGlhbCBmb3Igc29tZSBjb21wbGV4IHN0YXRlIHRyYW5zaXRpb25zIGFuZCByYWNlIGNvbmRpdGlvbnMgbHVya2luZyB0aGVyZS5cblxuTXkgZm9jdXMgc2hvdWxkIGJlIHNoYXJwOiBgdHR5X3NldF9sZGlzY2AgZm9yIHRoZSBlbnRyeSBwb2ludCwgbmF0dXJhbGx5LCBhbmQgdGhlbiBvZiBjb3Vyc2UgYHR0eV9sZGlzY19yZWZfd2FpdGAuIEJ1dCBpdCdzIHdvcnRoIGNvbnNpZGVyaW5nIGB0dHlfaGFuZ3VwYCBhbmQgYHR0eV92aGFuZ3VwYCBhcyB3ZWxsLiBUaGV5IHNlZW0gcmVsYXRlZCBhbmQgYXJlIGxpa2VseSB0byBiZSBwYXJ0IG9mIHRoZSBjbGVhbnVwIHByb2NlZHVyZXMsIHNvIHRoZXkgbWlnaHQgaW50ZXJhY3Qgd2l0aCB0aGUgb3RoZXIgdHdvIGluIGludGVyZXN0aW5nIHdheXMuIExldCdzIHF1aWNrbHkgY2hlY2sgdG8gc2VlIGlmIHRob3NlIGxhc3QgdHdvIGFyZSBldmVuIGV4cG9ydGVkIHN5bWJvbHM7IGlmIG5vdCwgd2UgY2FuIGRpc3JlZ2FyZCB0aGVtLiBCdXQgaWYgdGhleSBhcmUsIHRoYXQgZXhwYW5kcyB0aGUgcG90ZW50aWFsIGF0dGFjayBzdXJmYWNlIHNpZ25pZmljYW50bHkuIFRoaXMgbG9va3MgbGlrZSBhIHByb21pc2luZyBhdmVudWUgZm9yIHVuY292ZXJpbmcgc29tZSBzdWJ0bGUgdnVsbmVyYWJpbGl0aWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1Njg2LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDEzOjIwOjMyLjYwOTUwMDM0NVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NTgxMzQ4NzIyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKnR0eV9oYW5ndXBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy90dHkvdHR5X2lvLmM9NjgwPXZvaWQgdHR5X2hhbmd1cChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KVxcbi0tXFxuZHJpdmVycy90dHkvdHR5X2lvLmMtNjg0LX1cXG5kcml2ZXJzL3R0eS90dHlfaW8uYzo2ODU6RVhQT1JUX1NZTUJPTCh0dHlfaGFuZ3VwKTtcXG5kcml2ZXJzL3R0eS90dHlfaW8uYy02ODYtXFxuLS1cXG5kcml2ZXJzL3R0eS90dHlfcG9ydC5jPTQwND12b2lkIF9fdHR5X3BvcnRfdHR5X2hhbmd1cChzdHJ1Y3QgdHR5X3BvcnQgKnBvcnQsIGJvb2wgY2hlY2tfY2xvY2FsLCBib29sIGFzeW5jKVxcbi0tXFxuZHJpdmVycy90dHkvdHR5X3BvcnQuYy00MTYtfVxcbmRyaXZlcnMvdHR5L3R0eV9wb3J0LmM6NDE3OkVYUE9SVF9TWU1CT0xfR1BMKF9fdHR5X3BvcnRfdHR5X2hhbmd1cCk7XFxuZHJpdmVycy90dHkvdHR5X3BvcnQuYy00MTgtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDEzOjIwOjQwLjE5MTc0MDQ1N1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNTEyOTQ2MTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQ29uc2lkZXJpbmcgdGhlIEltcGFjdCBvZiBgdHR5X3ZoYW5ndXBgKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IHRoZSBjdXJyZW50IHNpdHVhdGlvbiwgYW5kIG15IG1pbmQgaW1tZWRpYXRlbHkganVtcHMgdG8gYHR0eV92aGFuZ3VwYC4gSXQncyBhIGtleSBmdW5jdGlvbiwgYW5kIGl0cyBiZWhhdmlvciBjb3VsZCBiZSByZWxldmFudCBoZXJlLCBkZXBlbmRpbmcgb24gdGhlIHNwZWNpZmljcyBvZiB0aGUgcHJvYmxlbSB3ZSdyZSB0cm91Ymxlc2hvb3RpbmcuIEkgbmVlZCB0byBxdWlja2x5IGFzc2VzcyB3aGV0aGVyIGl0J3MgaW52b2x2ZWQgaW4gdGhpcyBwYXJ0aWN1bGFyIHNjZW5hcmlvLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcXVpY2tseSBjb25zaWRlciB0aGUgcG90ZW50aWFsIGludGVyYWN0aW9ucyBvZiBgdHR5X3ZoYW5ndXBgLiBBcmUgdGhlcmUgY29uZGl0aW9ucyB3aGVyZSBpdCBjb3VsZCBiZSBtYXNraW5nIG9yIGV4YWNlcmJhdGluZyB0aGUgaXNzdWU/IE9yLCBpcyBpdCBwZXJoYXBzIGEgcmVkIGhlcnJpbmc/IEkgbmVlZCB0byBhbmFseXplIGl0cyBjYWxsIGdyYXBoIHdpdGhpbiB0aGUgcmVsZXZhbnQgc3Vic3lzdGVtIHRvIGdldCBhIGZlZWwgZm9yIGhvdyBpdCBtaWdodCBiZSBpbnRlcmFjdGluZyB3aXRoIHRoZSBvYnNlcnZlZCBzeW1wdG9tcy4gSXMgdGhlcmUgYW55IHBvc3NpYmlsaXR5IG9mIHNvbWUga2luZCBvZiBhIHJhY2UgY29uZGl0aW9uIGludm9sdmluZyBgdHR5X3ZoYW5ndXBgLCBvciBhcmUgaXRzIHNlbWFudGljcyBzdHJhaWdodGZvcndhcmQgaW4gdGhpcyBjYXNlPyBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgaXRzIHJlbGV2YW5jZSwgYW5kIGlmIGl0J3MgcG90ZW50aWFsbHkgaW1wb3J0YW50LCBJJ2xsIGRlbHZlIGRlZXBlciB0byBzZWUgaWYgaXQgbmVlZHMgZnVydGhlciBkZWJ1Z2dpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY0MTUsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxMzoyMDo0My4zNDMwMzg2NTdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQ2NzY2NDcyMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MLip0dHlfdmhhbmd1cFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3R0eS90dHlfaW8uYz02OTU9dm9pZCB0dHlfdmhhbmd1cChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KVxcbi0tXFxuZHJpdmVycy90dHkvdHR5X2lvLmMtNjk5LX1cXG5kcml2ZXJzL3R0eS90dHlfaW8uYzo3MDA6RVhQT1JUX1NZTUJPTCh0dHlfdmhhbmd1cCk7XFxuZHJpdmVycy90dHkvdHR5X2lvLmMtNzAxLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxMzoyMDo1MC44MTA3MTA4NThaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNzEyOTg3NzA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGlzOlxuXG4qKkFuYWx5emluZyBgdHR5X3NldF9sZGlzY2AqKlxuXG5BbHJpZ2h0LCB0aGUgb2JqZWN0aXZlIGlzIHByZXR0eSBjbGVhcjogbGV0J3MgZ2V0IGEgaGFuZGxlIG9uIHdoYXQgYHR0eV9zZXRfbGRpc2NgIGlzIGFsbCBhYm91dC4gVGhpcyBpcyBhIGNydWNpYWwgZnVuY3Rpb24sIG9idmlvdXNseSwgYW5kIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvciBpbnZlc3RpZ2F0ZSBpdCBmcm9tIGEgbmV3IHBlcnNwZWN0aXZlLiBUaW1lIHRvIHRoaW5rIHRoaXMgdGhyb3VnaDogd2hhdCBpcyBpdCBkb2luZywgd2hhdCdzIGl0IHVzZWQgZm9yLCB3aGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIG9mIGl0cyBleGVjdXRpb24/IEkgc2hvdWxkIHByb2JhYmx5IHN0YXJ0IGJ5IHF1aWNrbHkgY2hlY2tpbmcgdGhlIGNvZGUgYmFzZSB0byBpZGVudGlmeSB3aGVyZSB0aGlzIGlzIHVzZWQgYW5kIHdoaWNoIGRhdGEgc3RydWN0dXJlcyBhcmUgYWNjZXNzZWQuIExldCdzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NzcyLCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTM6MjA6NTMuNTIzNzAyMjg2WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2Mjg4OTgyMTEyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKnR0eV9zZXRfbGRpc2NcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy90dHkvdHR5X2xkaXNjLmM9NTI5PWludCB0dHlfc2V0X2xkaXNjKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGludCBkaXNjKVxcbi0tXFxuZHJpdmVycy90dHkvdHR5X2xkaXNjLmMtNjIyLX1cXG5kcml2ZXJzL3R0eS90dHlfbGRpc2MuYzo2MjM6RVhQT1JUX1NZTUJPTF9HUEwodHR5X3NldF9sZGlzYyk7XFxuZHJpdmVycy90dHkvdHR5X2xkaXNjLmMtNjI0LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxMzoyMDo1OS44MTI2OTgwMThaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI1Njg0NDA1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkFuYWx5emluZyBUVFkgTGluZSBEaXNjaXBsaW5lIEZ1bmN0aW9ucyoqXG5cblJpZ2h0LCBteSBtZW50YWwgY2hlY2tsaXN0IGJlZ2lucyB3aXRoIHRoZSBrZXkgZnVuY3Rpb25zIGFzc29jaWF0ZWQgd2l0aCBUVFkgbGluZSBkaXNjaXBsaW5lczogYHR0eV9zZXRfbGRpc2NgLCBgdHR5X2xkaXNjX3JlZl93YWl0YCwgYHR0eV9oYW5ndXBgLCBhbmQgYHR0eV92aGFuZ3VwYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlaXIgcm9sZXMgd2l0aGluIHRoZSBzeXN0ZW0uIEFyZSB0aGVyZSBhbnkgY29uZmlndXJhdGlvbiBwcmVyZXF1aXNpdGVzIEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gVXN1YWxseSwgYENPTkZJR19UVFlgIGlzIGEgZ2l2ZW4sIGJ1dCBJJ2xsIGRvdWJsZS1jaGVjayBmb3IgYW55IG1vcmUgc3BlY2lmaWMgb3Igb2JzY3VyZSBjb25maWd1cmF0aW9ucyB0aGF0IG1pZ2h0IGltcGFjdCB0aGUgZnVuY3Rpb25hbGl0eSBvciBiZWhhdmlvciBvZiB0aGVzZSByb3V0aW5lcy4gSXQncyBjcnVjaWFsIHRvIGlkZW50aWZ5IGlmIGFueSBzcGVjaWZpYyBmZWF0dXJlcyBvciBkZXBlbmRlbmNpZXMgbmVlZCB0byBiZSBlbmFibGVkLiBJIG5lZWQgdG8gZW5zdXJlIGEgY29tcGxldGUgcGljdHVyZSBvZiB0aGUgbGFuZHNjYXBlIGJlZm9yZSBtb3ZpbmcgZm9yd2FyZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzA2MSwiT3V0cHV0VG9rZW5zIjoxNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDEzOjIxOjAzLjA2OTU0ODMzWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODcxNDY3NTk3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBUVFlcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC91bS9kcml2ZXJzL0tjb25maWc9NDA9Y29uZmlnIFBUWV9DSEFOXFxuLS1cXG5hcmNoL3VtL2RyaXZlcnMvS2NvbmZpZy00OS1cXG5hcmNoL3VtL2RyaXZlcnMvS2NvbmZpZzo1MDpjb25maWcgVFRZX0NIQU5cXG5hcmNoL3VtL2RyaXZlcnMvS2NvbmZpZy01MS1cXHRib29sIFxcXCJ0dHkgY2hhbm5lbCBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9jaGFyL0tjb25maWc9OD1zb3VyY2UgXFxcImRyaXZlcnMvdHR5L0tjb25maWdcXFwiXFxuZHJpdmVycy9jaGFyL0tjb25maWctOS1cXG5kcml2ZXJzL2NoYXIvS2NvbmZpZzoxMDpjb25maWcgVFRZX1BSSU5US1xcbmRyaXZlcnMvY2hhci9LY29uZmlnLTExLVxcdHRyaXN0YXRlIFxcXCJUVFkgZHJpdmVyIHRvIG91dHB1dCB1c2VyIG1lc3NhZ2VzIHZpYSBwcmludGtcXFwiXFxuLS1cXG5kcml2ZXJzL2NoYXIvS2NvbmZpZy0yNS1cXG5kcml2ZXJzL2NoYXIvS2NvbmZpZzoyNjpjb25maWcgVFRZX1BSSU5US19MRVZFTFxcbmRyaXZlcnMvY2hhci9LY29uZmlnLTI3LVxcdGRlcGVuZHMgb24gVFRZX1BSSU5US1xcbi0tXFxuZHJpdmVycy90dHkvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG5kcml2ZXJzL3R0eS9LY29uZmlnOjI6Y29uZmlnIFRUWVxcbmRyaXZlcnMvdHR5L0tjb25maWctMy1cXHRib29sIFxcXCJFbmFibGUgVFRZXFxcIiBpZiBFWFBFUlRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTM6MjE6MDguOTQxMDUxNjk3WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2MTc3MzA1OTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gdGhpcyBrZXJuZWwgY29uZmlnIHNpdHVhdGlvbi5cblxuKipLZXJuZWwgQ29uZmlndXJhdGlvbiBDb25zaWRlcmF0aW9ucyBmb3IgVFRZIEZ1bmN0aW9uYWxpdHkqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgdGFzayBpcyB0byBpZGVudGlmeSBrZXJuZWwgY29uZmlnIGZsYWdzIG5lZWRlZCBmb3IgY29tcGlsaW5nIGFuZCB0ZXN0aW5nIG1vZGlmaWVkIGNvZGUsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIFRUWSBzdWJzeXN0ZW0uIFRoZSBwcm9tcHQgZW1waGFzaXplcyAqZXhwbGljaXQqIGVuYWJsaW5nLiBJbml0aWFsbHksIG15IGludHVpdGlvbiBpcyB0aGF0IGBDT05GSUdfVFRZYCBpcyB0aGUgb2J2aW91cyBzdGFydGluZyBwb2ludC4gSXQncyB0aGUgY29yZSBUVFkgY29uZmlnIGFuZCB0eXBpY2FsbHkgZW5hYmxlZCBieSBkZWZhdWx0LiBJJ2QgdXN1YWxseSBhc3N1bWUgaXQncyBpbXBsaWNpdCwgYnV0IGdpdmVuIHRoZSBwaHJhc2luZyBvZiB0aGUgcXVlc3Rpb24sIGxpc3RpbmcgaXQgd291bGQgYmUgcHJ1ZGVudC4gVGhlbiBJIHRob3VnaHQgYWJvdXQgdGhlIGluc3RydWN0aW9ucyByZXF1aXJpbmcgKmV4cGxpY2l0KiBlbmFibGluZy4gV2VsbCwganVzdCBsaXN0aW5nIGBUVFlgIHdvdWxkIGJlIGVub3VnaC5cblxuTm93LCB0byBiZSB0aG9yb3VnaCDigJMgYW5kIHRoaXMgaXMga2V5IHRvIGdldHRpbmcgdGhlICpyaWdodCogYW5zd2VyIOKAkyBJIG5lZWQgdG8gY2hlY2sgZm9yIGFueSBkZXBlbmRlbmNpZXMgbHVya2luZyBpbiB0aGUgY29kZSBpdHNlbGYuIEknbGwgbmVlZCB0byBzY3J1dGluaXplIGBkcml2ZXJzL3R0eS90dHlfaW8uY2AgYW5kIGBkcml2ZXJzL3R0eS90dHlfbGRpc2MuY2AuIE15IHN0cmF0ZWd5IHdpbGwgYmUgdG8gbG9vayBmb3IgYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGRpcmVjdGl2ZXMgKGAjaWZkZWZgLCBgI2lmYCkgYXJvdW5kIHRoZSBmdW5jdGlvbnMsIGFuZCB0aGVzZSB3b3VsZCBiZSB0aGUgY29uZmlnIGZsYWdzIHRoYXQgSSBtdXN0IGluY2x1ZGUuIFRoYXQgd2lsbCBwcm92aWRlIGEgY29tcGxldGUgbGlzdCBvZiByZXF1aXJlZCBjb25maWdzLCBhbmQgbm90aGluZyB3aWxsIGJlIG1pc3NlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzU3MiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxMzoyMToxMy41NTg3ODUwNzJaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MDIxNzM3NCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiI2lmZGVmLipDT05GSUdfXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdHR5L3R0eV9sZGlzYy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxMzoyMToxMy43NDkwMTExODZaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk5NzA1ODA4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSBpbW1lZGlhdGUgdGhvdWdodCBwcm9jZXNzOlxuXG4qKk5vIENvbmZpZ3VyYXRpb24gRmlsZXMgSGVyZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGB0dHlfbGRpc2MuY2AuIE15IGluaXRpYWwgc2NhbiBzaG93cyB0aGF0IHRoZXJlIGFyZSBubyBvYnZpb3VzIGNvbmZpZ3VyYXRpb24gZmlsZXMgcHJlc2VudCB3aXRoaW4gdGhpcyBwYXJ0aWN1bGFyIG1vZHVsZS4gVGhhdCdzIGludGVyZXN0aW5nLCBhbmQgaXQgc3VnZ2VzdHMgYSBmZXcgdGhpbmdzLCBkZXBlbmRpbmcgb24gdGhlIGNvbnRleHQuIEl0IGNvdWxkIG1lYW4gdGhlIGNvbmZpZ3VyYXRpb24gaXMgaGFuZGxlZCBlbHNld2hlcmUsIHBlcmhhcHMgZHluYW1pY2FsbHkgb3IgdGhyb3VnaCBzb21lIGdsb2JhbCBzeXN0ZW0gc2V0dGluZ3MuIEFsdGVybmF0aXZlbHksIGl0IGNvdWxkIG1lYW4gdGhhdCB0aGUgY29uZmlndXJhdGlvbiBpcyBoYXJkY29kZWQsIHdoaWNoLCBpbiBtb3N0IG1vZGVybiBzeXN0ZW1zLCBpcyBhIGxlc3MgZGVzaXJhYmxlIGFwcHJvYWNoLiBJJ2xsIG5lZWQgdG8gZGlnIGRlZXBlciB0byBzZWUgaG93IHRoZSBsaW5lIGRpc2NpcGxpbmUsIGFzIGRlZmluZWQgaW4gdGhpcyBzb3VyY2UgZmlsZSwgaW50ZXJhY3RzIHdpdGggYW55IGV4dGVybmFsIGNvbmZpZ3VyYXRpb24gbWVjaGFuaXNtcywgb3IgaWYgaXQgaW5kZWVkIHJlbGllcyBvbiBzb21lIGRlZmF1bHQgYmVoYXZpb3VyIGRlZmluZWQgaW4gdGhlIHNvdXJjZS4gVGhpcyBpbml0aWFsIG9ic2VydmF0aW9uIGdpdmVzIG1lIGEgcG9pbnQgb2YgaW52ZXN0aWdhdGlvbi4gTm93LCB3aGVyZSB0byBsb29rIG5leHQuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODAxMywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDEzOjIxOjE2Ljc0NjA3Mjg4OVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg0Njc4NDg0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIiNpZmRlZi4qQ09ORklHX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3R0eS90dHlfaW8uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3R0eS90dHlfaW8uYz0xNTA9c3RhdGljIGludCB0dHlfb3BlbihzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGZpbGUgKik7XFxuZHJpdmVycy90dHkvdHR5X2lvLmM6MTUxOiNpZmRlZiBDT05GSUdfQ09NUEFUXFxuZHJpdmVycy90dHkvdHR5X2lvLmMtMTUyLXN0YXRpYyBsb25nIHR0eV9jb21wYXRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsXFxuLS1cXG5kcml2ZXJzL3R0eS90dHlfaW8uYz0zNjY9RVhQT1JUX1NZTUJPTF9HUEwodHR5X2Rldl9uYW1lX3RvX251bWJlcik7XFxuZHJpdmVycy90dHkvdHR5X2lvLmMtMzY3LVxcbmRyaXZlcnMvdHR5L3R0eV9pby5jOjM2ODojaWZkZWYgQ09ORklHX0NPTlNPTEVfUE9MTFxcbmRyaXZlcnMvdHR5L3R0eV9pby5jLTM2OS1cXG4tLVxcbmRyaXZlcnMvdHR5L3R0eV9pby5jPTk1OT1zdGF0aWMgc3NpemVfdCBpdGVyYXRlX3R0eV93cml0ZShzdHJ1Y3QgdHR5X2xkaXNjICpsZCwgc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSxcXG4tLVxcbmRyaXZlcnMvdHR5L3R0eV9pby5jLTEwNDEtXFxuZHJpdmVycy90dHkvdHR5X2lvLmM6MTA0MjojaWZkZWYgQ09ORklHX1BSSU5UX1FVT1RBX1dBUk5JTkdcXG5kcml2ZXJzL3R0eS90dHlfaW8uYy0xMDQzLS8qKlxcbi0tXFxuZHJpdmVycy90dHkvdHR5X2lvLmM9MTkxMj1zdGF0aWMgc3RydWN0IHR0eV9kcml2ZXIgKnR0eV9sb29rdXBfZHJpdmVyKGRldl90IGRldmljZSwgc3RydWN0IGZpbGUgKmZpbHAsXFxuLS1cXG5kcml2ZXJzL3R0eS90dHlfaW8uYy0xOTE3LVxcdHN3aXRjaCAoZGV2aWNlKSB7XFxuZHJpdmVycy90dHkvdHR5X2lvLmM6MTkxODojaWZkZWYgQ09ORklHX1ZUXFxuZHJpdmVycy90dHkvdHR5X2lvLmMtMTkxOS1cXHRjYXNlIE1LREVWKFRUWV9NQUpPUiwgMCk6IHtcXG4tLVxcbmRyaXZlcnMvdHR5L3R0eV9pby5jPTI2NzU9bG9uZyB0dHlfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbi0tXFxuZHJpdmVycy90dHkvdHR5X2lvLmMtMjgxNS1cXG5kcml2ZXJzL3R0eS90dHlfaW8uYzoyODE2OiNpZmRlZiBDT05GSUdfQ09NUEFUXFxuZHJpdmVycy90dHkvdHR5X2lvLmMtMjgxNy1cXG4tLVxcbmRyaXZlcnMvdHR5L3R0eV9pby5jPTM2NTY9aW50IF9faW5pdCB0dHlfaW5pdCh2b2lkKVxcbi0tXFxuZHJpdmVycy90dHkvdHR5X2lvLmMtMzY3NC1cXG5kcml2ZXJzL3R0eS90dHlfaW8uYzozNjc1OiNpZmRlZiBDT05GSUdfVlRcXG5kcml2ZXJzL3R0eS90dHlfaW8uYy0zNjc2LVxcdHZ0eV9pbml0KFxcdTAwMjZjb25zb2xlX2ZvcHMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxMzoyMToxNi45MzA3NTg1MDRaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzIxODM1MDE4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbjogVFRZIExpbmUgRGlzY2lwbGluZSBMb2dpYyoqXG5cbk9rYXksIHNvIEkndmUganVzdCBhbmFseXplZCB0aGVzZSBjb25maWd1cmF0aW9ucywgYW5kIG5vbmUgb2YgdGhlbSBzZWVtIHRvIHRvdWNoIGB0dHlfc2V0X2xkaXNjYCwgYHR0eV9sZGlzY19yZWZfd2FpdGAsIG9yIGBfX3R0eV9oYW5ndXBgLiBUaGF0J3MgaW50ZXJlc3RpbmcsIGl0IG5hcnJvd3MgZG93biB0aGUgZm9jdXMgY29uc2lkZXJhYmx5LiBNeSB0YXJnZXQgc3ltYm9scyBhcmUgY2xlYXJseSBgdHR5X3NldF9sZGlzY2AsIGB0dHlfbGRpc2NfcmVmX3dhaXRgLCBgdHR5X2hhbmd1cGAsIGFuZCBgdHR5X3ZoYW5ndXBgLiBBbmQgdGhlIGVuY29tcGFzc2luZyBjb25maWcgaXMgYFRUWWAuXG5cbkxldCBtZSBxdWlja2x5IHZlcmlmeSB0aGUgcmVhY2hhYmlsaXR5IG9mIHRoZXNlLiBBbHJpZ2h0LCBgdHR5X3NldF9sZGlzY2AgaXMgZGVmaW5pdGVseSBhY2Nlc3NpYmxlIOKAkyBpdCdzIHRyaWdnZXJlZCB0aHJvdWdoIHRoZSBgVElPQ1NFVERgIGlvY3RsIG9uIGEgdHR5IGZpbGUgZGVzY3JpcHRvciwgd2hpY2ggaXMgYSBjb21tb24gcGF0aC4gYHR0eV9sZGlzY19yZWZfd2FpdGAgaXMgY2xlYXJseSByZWFjaGFibGUgdmlhIGByZWFkYCwgYHdyaXRlYCwgYHBvbGxgLCBhbmQgYGlvY3RsYCBvcGVyYXRpb25zIG9uIGEgdHR5IGZpbGUgZGVzY3JpcHRvci4gRmluYWxseSwgYHR0eV9oYW5ndXBgIGlzIHJlYWNoYWJsZSB2aWEgdGhlIGB2aGFuZ3VwYCBzeXNjYWxsLCBvciBgVElPQ1ZIQU5HVVBgIGlvY3RsLlxuXG5HaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBjaGFuZ2VzLCB0aGlzIHNlZW1zIGxpa2UgYSBjb3JlIGtlcm5lbCBtb2RpZmljYXRpb24sIHJpcGUgZm9yIGZ1enppbmcuIFRoZSBwYXRjaCBpcyB3b3JraW5nIG9uIFRUWSBsaW5lIGRpc2NpcGxpbmUgcmVmZXJlbmNlIGNvdW50aW5nIGFuZCBzdGF0ZSB0cmFuc2l0aW9uIGxvZ2ljOiBgdHR5X2xkaXNjX3JlZl93YWl0YCwgYHR0eV9zZXRfbGRpc2NgLCBhbmQgYF9fdHR5X2hhbmd1cGAuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgZGlyZWN0bHkgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZSwgZWl0aGVyIHRocm91Z2ggVFRZIGlvY3RscyBsaWtlIGBUSU9DU0VURGAsIGBUSU9DVkhBTkdVUGAsIG9yIGV2ZW4gc2ltcGxlciBjYWxscyBzdWNoIGFzIGByZWFkYCwgYHdyaXRlYCwgYW5kIGBwb2xsYC4gSSdtIHNlZWluZyBsb2NrIGRyb3BwaW5nIGFuZCB3YWl0IHF1ZXVlIHdha2V1cHMsIHdoaWNoIGltbWVkaWF0ZWx5IHNjcmVhbXMgcmFjZSBjb25kaXRpb25zIGFuZCBwb3RlbnRpYWwgZGVhZGxvY2tzLiBUaGlzIGlzIGV4YWN0bHkgdGhlIGtpbmQgb2Ygc2NlbmFyaW8gZnV6emluZyBleGNlbHMgYXQuIFRoZSBwcm9iYWJpbGl0eSBvZiB1bmNvdmVyaW5nIGEgdnVsbmVyYWJpbGl0eSBpcyBoaWdoLlxuXG5UaW1lIHRvIGNhbGwgc2V0LXJlc3VsdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg4MTMsIk91dHB1dFRva2VucyI6MTcxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDEzOjIxOjI0LjE0OTExMjQ1NloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2NjU3Mzg1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVFRZXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidHR5X3NldF9sZGlzY1wiLFxuICAgIFwidHR5X2xkaXNjX3JlZl93YWl0XCIsXG4gICAgXCJ0dHlfaGFuZ3VwXCIsXG4gICAgXCJ0dHlfdmhhbmd1cFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgVFRZIGxpbmUgZGlzY2lwbGluZSByZWZlcmVuY2UgY291bnRpbmcgYW5kIHRyYW5zaXRpb24gbG9naWMgKHR0eV9sZGlzY19yZWZfd2FpdCwgdHR5X3NldF9sZGlzYywgX190dHlfaGFuZ3VwKS4gVGhlc2UgZnVuY3Rpb25zIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIFRUWSBpb2N0bHMgKGUuZy4sIFRJT0NTRVRELCBUSU9DVkhBTkdVUCksIHJlYWQsIHdyaXRlLCBhbmQgcG9sbCBvcGVyYXRpb25zLiBUaGUgY2hhbmdlcyBpbnZvbHZlIGxvY2sgZHJvcHBpbmcgYW5kIHdhaXQgcXVldWUgd2FrZXVwcywgd2hpY2ggYXJlIHByb25lIHRvIHJhY2UgY29uZGl0aW9ucyBhbmQgZGVhZGxvY2tzLCBtYWtpbmcgdGhlbSBoaWdobHkgc3VpdGFibGUgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVFRZXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidHR5X3NldF9sZGlzY1wiLFxuICAgIFwidHR5X2xkaXNjX3JlZl93YWl0XCIsXG4gICAgXCJ0dHlfaGFuZ3VwXCIsXG4gICAgXCJ0dHlfdmhhbmd1cFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgVFRZIGxpbmUgZGlzY2lwbGluZSByZWZlcmVuY2UgY291bnRpbmcgYW5kIHRyYW5zaXRpb24gbG9naWMgKHR0eV9sZGlzY19yZWZfd2FpdCwgdHR5X3NldF9sZGlzYywgX190dHlfaGFuZ3VwKS4gVGhlc2UgZnVuY3Rpb25zIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIFRUWSBpb2N0bHMgKGUuZy4sIFRJT0NTRVRELCBUSU9DVkhBTkdVUCksIHJlYWQsIHdyaXRlLCBhbmQgcG9sbCBvcGVyYXRpb25zLiBUaGUgY2hhbmdlcyBpbnZvbHZlIGxvY2sgZHJvcHBpbmcgYW5kIHdhaXQgcXVldWUgd2FrZXVwcywgd2hpY2ggYXJlIHByb25lIHRvIHJhY2UgY29uZGl0aW9ucyBhbmQgZGVhZGxvY2tzLCBtYWtpbmcgdGhlbSBoaWdobHkgc3VpdGFibGUgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowxt7hg[1] Phase: Succeeded StartedAt: 2026-07-25 13:21:37 +0000 UTC FinishedAt: 2026-07-25 13:21:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxt7hg[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-25 13:21:37 +0000 UTC FinishedAt: 2026-07-25 13:21:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxt7hg[2] Phase: Succeeded StartedAt: 2026-07-25 13:21:37 +0000 UTC FinishedAt: 2026-07-25 17:47:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxt7hg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["TTY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tty_set_ldisc","tty_ldisc_ref_wait","tty_hangup","tty_vhangup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["TTY"],"series_id":"538f5feb-1fdc-4792-be28-37bb8d2e4927","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-25 13:21:37 +0000 UTC FinishedAt: 2026-07-25 17:47:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["TTY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tty_set_ldisc","tty_ldisc_ref_wait","tty_hangup","tty_vhangup"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["TTY"],"series_id":"538f5feb-1fdc-4792-be28-37bb8d2e4927","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowxt7hg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["TTY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tty_set_ldisc","tty_ldisc_ref_wait","tty_hangup","tty_vhangup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["TTY"],"series_id":"538f5feb-1fdc-4792-be28-37bb8d2e4927","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-25 13:21:37 +0000 UTC FinishedAt: 2026-07-25 13:21:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxt7hg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["TTY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tty_set_ldisc","tty_ldisc_ref_wait","tty_hangup","tty_vhangup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["TTY"],"series_id":"538f5feb-1fdc-4792-be28-37bb8d2e4927","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-25 13:21:37 +0000 UTC FinishedAt: 2026-07-25 13:21:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["TTY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowxt7hg/series-workflowxt7hg-convert-artifact-3961009536/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxt7hg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["TTY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tty_set_ldisc","tty_ldisc_ref_wait","tty_hangup","tty_vhangup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["TTY"],"series_id":"538f5feb-1fdc-4792-be28-37bb8d2e4927","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-25 13:21:49 +0000 UTC FinishedAt: 2026-07-25 14:04:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxt7hg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["TTY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tty_set_ldisc","tty_ldisc_ref_wait","tty_hangup","tty_vhangup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["TTY"],"series_id":"538f5feb-1fdc-4792-be28-37bb8d2e4927","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-25 13:21:49 +0000 UTC FinishedAt: 2026-07-25 14:04:15 +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:*a9d85be7-24a8-4747-95b4-afe4da5bdd7c,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-workflowxt7hg/series-workflowxt7hg-convert-artifact-3961009536/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": "793d96a6-be65-4b9b-91f0-d2a72705e375", "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-workflowxt7hg/series-workflowxt7hg-build-action-3391455302/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxt7hg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["TTY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tty_set_ldisc","tty_ldisc_ref_wait","tty_hangup","tty_vhangup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["TTY"],"series_id":"538f5feb-1fdc-4792-be28-37bb8d2e4927","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-25 13:21:49 +0000 UTC FinishedAt: 2026-07-25 14:03:50 +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:*a9d85be7-24a8-4747-95b4-afe4da5bdd7c,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-workflowxt7hg/series-workflowxt7hg-convert-artifact-3961009536/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": "793d96a6-be65-4b9b-91f0-d2a72705e375", "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-workflowxt7hg/series-workflowxt7hg-build-action-3391455302/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxt7hg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["TTY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tty_set_ldisc","tty_ldisc_ref_wait","tty_hangup","tty_vhangup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["TTY"],"series_id":"538f5feb-1fdc-4792-be28-37bb8d2e4927","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-25 14:04:15 +0000 UTC FinishedAt: 2026-07-25 14:04:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxt7hg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["TTY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tty_set_ldisc","tty_ldisc_ref_wait","tty_hangup","tty_vhangup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["TTY"],"series_id":"538f5feb-1fdc-4792-be28-37bb8d2e4927","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-25 14:04:15 +0000 UTC FinishedAt: 2026-07-25 14:04:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxt7hg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["TTY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tty_set_ldisc","tty_ldisc_ref_wait","tty_hangup","tty_vhangup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["TTY"],"series_id":"538f5feb-1fdc-4792-be28-37bb8d2e4927","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-25 14:04:15 +0000 UTC FinishedAt: 2026-07-25 14:04:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxt7hg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["TTY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tty_set_ldisc","tty_ldisc_ref_wait","tty_hangup","tty_vhangup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["TTY"],"series_id":"538f5feb-1fdc-4792-be28-37bb8d2e4927","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-25 14:04:15 +0000 UTC FinishedAt: 2026-07-25 14:04:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["TTY"],"series_id":"538f5feb-1fdc-4792-be28-37bb8d2e4927","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowxt7hg/series-workflowxt7hg-convert-artifact-3818791975/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxt7hg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["TTY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tty_set_ldisc","tty_ldisc_ref_wait","tty_hangup","tty_vhangup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["TTY"],"series_id":"538f5feb-1fdc-4792-be28-37bb8d2e4927","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-25 14:04:36 +0000 UTC FinishedAt: 2026-07-25 14:06:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxt7hg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["TTY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tty_set_ldisc","tty_ldisc_ref_wait","tty_hangup","tty_vhangup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["TTY"],"series_id":"538f5feb-1fdc-4792-be28-37bb8d2e4927","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-25 14:04:36 +0000 UTC FinishedAt: 2026-07-25 14:06:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*793d96a6-be65-4b9b-91f0-d2a72705e375,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-workflowxt7hg/series-workflowxt7hg-build-action-3391455302/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-workflowxt7hg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["TTY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tty_set_ldisc","tty_ldisc_ref_wait","tty_hangup","tty_vhangup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["TTY"],"series_id":"538f5feb-1fdc-4792-be28-37bb8d2e4927","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-25 14:06:27 +0000 UTC FinishedAt: 2026-07-25 14:06:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxt7hg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["TTY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tty_set_ldisc","tty_ldisc_ref_wait","tty_hangup","tty_vhangup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["TTY"],"series_id":"538f5feb-1fdc-4792-be28-37bb8d2e4927","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-25 14:06:27 +0000 UTC FinishedAt: 2026-07-25 14:06:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxt7hg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["TTY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tty_set_ldisc","tty_ldisc_ref_wait","tty_hangup","tty_vhangup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["TTY"],"series_id":"538f5feb-1fdc-4792-be28-37bb8d2e4927","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-25 14:06:27 +0000 UTC FinishedAt: 2026-07-25 14:41:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxt7hg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["TTY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tty_set_ldisc","tty_ldisc_ref_wait","tty_hangup","tty_vhangup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["TTY"],"series_id":"538f5feb-1fdc-4792-be28-37bb8d2e4927","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-25 14:06:27 +0000 UTC FinishedAt: 2026-07-25 14:41:23 +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:*a9d85be7-24a8-4747-95b4-afe4da5bdd7c,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-workflowxt7hg/series-workflowxt7hg-convert-artifact-3818791975/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": "cc60a5f2-2c0f-4d4c-929e-fb5b2895ab35", "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-workflowxt7hg/series-workflowxt7hg-build-action-871273899/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxt7hg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["TTY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tty_set_ldisc","tty_ldisc_ref_wait","tty_hangup","tty_vhangup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["TTY"],"series_id":"538f5feb-1fdc-4792-be28-37bb8d2e4927","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-25 14:06:27 +0000 UTC FinishedAt: 2026-07-25 14:41:09 +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:*a9d85be7-24a8-4747-95b4-afe4da5bdd7c,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-workflowxt7hg/series-workflowxt7hg-convert-artifact-3818791975/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": "cc60a5f2-2c0f-4d4c-929e-fb5b2895ab35", "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-workflowxt7hg/series-workflowxt7hg-build-action-871273899/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxt7hg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["TTY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tty_set_ldisc","tty_ldisc_ref_wait","tty_hangup","tty_vhangup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["TTY"],"series_id":"538f5feb-1fdc-4792-be28-37bb8d2e4927","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-25 14:41:23 +0000 UTC FinishedAt: 2026-07-25 14:41:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxt7hg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["TTY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tty_set_ldisc","tty_ldisc_ref_wait","tty_hangup","tty_vhangup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["TTY"],"series_id":"538f5feb-1fdc-4792-be28-37bb8d2e4927","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-25 14:41:23 +0000 UTC FinishedAt: 2026-07-25 14:41:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxt7hg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["TTY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tty_set_ldisc","tty_ldisc_ref_wait","tty_hangup","tty_vhangup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["TTY"],"series_id":"538f5feb-1fdc-4792-be28-37bb8d2e4927","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-25 14:41:23 +0000 UTC FinishedAt: 2026-07-25 14:43:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxt7hg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["TTY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tty_set_ldisc","tty_ldisc_ref_wait","tty_hangup","tty_vhangup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["TTY"],"series_id":"538f5feb-1fdc-4792-be28-37bb8d2e4927","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-25 14:41:23 +0000 UTC FinishedAt: 2026-07-25 14:43:16 +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:*cc60a5f2-2c0f-4d4c-929e-fb5b2895ab35,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-workflowxt7hg/series-workflowxt7hg-build-action-871273899/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-workflowxt7hg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["TTY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tty_set_ldisc","tty_ldisc_ref_wait","tty_hangup","tty_vhangup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["TTY"],"series_id":"538f5feb-1fdc-4792-be28-37bb8d2e4927","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-25 14:43:27 +0000 UTC FinishedAt: 2026-07-25 17:47:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxt7hg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["TTY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tty_set_ldisc","tty_ldisc_ref_wait","tty_hangup","tty_vhangup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["TTY"],"series_id":"538f5feb-1fdc-4792-be28-37bb8d2e4927","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-25 14:43:27 +0000 UTC FinishedAt: 2026-07-25 17:47:43 +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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tty_set_ldisc","tty_ldisc_ref_wait","tty_hangup","tty_vhangup"],"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:*793d96a6-be65-4b9b-91f0-d2a72705e375,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*cc60a5f2-2c0f-4d4c-929e-fb5b2895ab35,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-workflowxt7hg/series-workflowxt7hg-build-action-3391455302/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-workflowxt7hg/series-workflowxt7hg-build-action-871273899/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowxt7hg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["TTY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tty_set_ldisc","tty_ldisc_ref_wait","tty_hangup","tty_vhangup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["TTY"],"series_id":"538f5feb-1fdc-4792-be28-37bb8d2e4927","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-25 14:43:27 +0000 UTC FinishedAt: 2026-07-25 14:44:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxt7hg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["TTY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tty_set_ldisc","tty_ldisc_ref_wait","tty_hangup","tty_vhangup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["TTY"],"series_id":"538f5feb-1fdc-4792-be28-37bb8d2e4927","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-25 14:43:27 +0000 UTC FinishedAt: 2026-07-25 14:43:51 +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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tty_set_ldisc","tty_ldisc_ref_wait","tty_hangup","tty_vhangup"],"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-workflowxt7hg/series-workflowxt7hg-convert-artifact-405716096/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxt7hg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["TTY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tty_set_ldisc","tty_ldisc_ref_wait","tty_hangup","tty_vhangup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["TTY"],"series_id":"538f5feb-1fdc-4792-be28-37bb8d2e4927","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-25 14:43:27 +0000 UTC FinishedAt: 2026-07-25 14:43:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxt7hg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["TTY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tty_set_ldisc","tty_ldisc_ref_wait","tty_hangup","tty_vhangup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["TTY"],"series_id":"538f5feb-1fdc-4792-be28-37bb8d2e4927","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-25 14:43:27 +0000 UTC FinishedAt: 2026-07-25 14:43:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxt7hg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["TTY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tty_set_ldisc","tty_ldisc_ref_wait","tty_hangup","tty_vhangup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["TTY"],"series_id":"538f5feb-1fdc-4792-be28-37bb8d2e4927","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-25 14:43:27 +0000 UTC FinishedAt: 2026-07-25 14:43:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxt7hg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["TTY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tty_set_ldisc","tty_ldisc_ref_wait","tty_hangup","tty_vhangup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["TTY"],"series_id":"538f5feb-1fdc-4792-be28-37bb8d2e4927","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-25 14:44:00 +0000 UTC FinishedAt: 2026-07-25 17:47:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxt7hg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["TTY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tty_set_ldisc","tty_ldisc_ref_wait","tty_hangup","tty_vhangup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"04026c998c24ac47eb76886b9790c5710b603eb4","config_name":"upstream-apparmor-kasan.config","enable_configs":["TTY"],"series_id":"538f5feb-1fdc-4792-be28-37bb8d2e4927","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-25 14:44:00 +0000 UTC FinishedAt: 2026-07-25 17:47:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*793d96a6-be65-4b9b-91f0-d2a72705e375,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*cc60a5f2-2c0f-4d4c-929e-fb5b2895ab35,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-workflowxt7hg/series-workflowxt7hg-build-action-3391455302/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-workflowxt7hg/series-workflowxt7hg-build-action-871273899/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-workflowxt7hg/series-workflowxt7hg-convert-artifact-405716096/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,}