Name: series-workflowmq6bg Phase: Succeeded StartedAt: 2026-07-27 10:14:43 +0000 UTC FinishedAt: 2026-07-27 15:23:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmq6bg[0] Phase: Succeeded StartedAt: 2026-07-27 10:14:43 +0000 UTC FinishedAt: 2026-07-27 10:47:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmq6bg[0].run-triage Phase: Succeeded StartedAt: 2026-07-27 10:14:43 +0000 UTC FinishedAt: 2026-07-27 10:47:06 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "53658c6f3682967a5e76ed4bc7462c4bdcddaec3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "RDS", "RDS_RDMA", "INFINIBAND", "INFINIBAND_ADDR_TRANS", "RDMA_RXE", "RDMA_SIW" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "53658c6f3682967a5e76ed4bc7462c4bdcddaec3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "RDS", "RDS_RDMA", "INFINIBAND", "INFINIBAND_ADDR_TRANS", "RDMA_RXE", "RDMA_SIW" ], "series_id": "32576597-7320-4052-a3c9-e4d8e17e58bb" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "rds_message_put", "rds_send_xmit", "rds_cmsg_rdma_args", "rds_rdma_free_op", "rds_atomic_free_op", "__rds_put_mr_final" ], "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+CgkJCTx0ZD4yMDI2LzA3LzI3IDEwOjQ1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1JEUyYjMzQ7LAogICAgJiMzNDtSRFNfUkRNQSYjMzQ7LAogICAgJiMzNDtJTkZJTklCQU5EJiMzNDssCiAgICAmIzM0O0lORklOSUJBTkRfQUREUl9UUkFOUyYjMzQ7LAogICAgJiMzNDtSRE1BX1JYRSYjMzQ7LAogICAgJiMzNDtSRE1BX1NJVyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Jkc19tZXNzYWdlX3B1dCYjMzQ7LAogICAgJiMzNDtyZHNfc2VuZF94bWl0JiMzNDssCiAgICAmIzM0O3Jkc19jbXNnX3JkbWFfYXJncyYjMzQ7LAogICAgJiMzNDtyZHNfcmRtYV9mcmVlX29wJiMzNDssCiAgICAmIzM0O3Jkc19hdG9taWNfZnJlZV9vcCYjMzQ7LAogICAgJiMzNDtfX3Jkc19wdXRfbXJfZmluYWwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBzbGVlcC1pbi1hdG9taWMgYnVnIGluIFJEUyBtZXNzYWdlIHB1cmdpbmcgYnkgZGVmZXJyaW5nIHRoZSBwdXJnZSBvZiBtZXNzYWdlcyB0aGF0IGRpcnR5IHBhZ2VzIHRvIGEgd29ya3F1ZXVlLiBJdCBhbHNvIGZpeGVzIHNvY2tldCByZWZlcmVuY2UgY291bnRpbmcgaXNzdWVzIGluIFJEUyBSRE1BIG9wZXJhdGlvbnMgYW5kIGEgcmVmZXJlbmNlIGxlYWsgaW4gYHJkc19zZW5kX3htaXRgLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHRoZSBjb3JlIFJEUyBhbmQgUkRTIFJETUEgY29kZSBwYXRocyB0aGF0IGNhbiBiZSByZWFjaGVkIHZpYSBzdGFuZGFyZCBzb2NrZXQgb3BlcmF0aW9ucyBhbmQgUkRNQSBtZXNzYWdlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxMDo0NTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDNmZjA1MTZkYjViM2Y5YzBiZmZjY2MxNGZmZjg3YzI0Zjk5YzY2ODVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1bCAyNyAxMDo0NToyNSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvcmRzL2liLmMgYi9uZXQvcmRzL2liLmNcbmluZGV4IDhmOWNmNDkxOTg0ZjEyLi5hZDJmMDM4YmQxYWM0MiAxMDA2NDRcbi0tLSBhL25ldC9yZHMvaWIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3Jkcy9pYi5jXG5AQCAtNTQxLDYgJiM0Mzs1NDEsMTggQEAgdm9pZCByZHNfaWJfZXhpdCh2b2lkKVxuICNlbmRpZlxuIFx0cmRzX2liX3VucmVnaXN0ZXJfY2xpZW50KCk7XG4gXHRyZHNfaWJfZGVzdHJveV9ub2Rldl9jb25ucygpO1xuJiM0MztcbiYjNDM7XHQvKiBUaGUgY29tcGxldGlvbiB0YXNrbGV0cyBtYXkgaGF2ZSBkZWZlcnJlZCBtZXNzYWdlIGZyZWVzIHRvXG4mIzQzO1x0ICogcmRzX3dxLCBhbmQgdGhvc2UgY2FuIGNhbGwgYmFjayBpbnRvIHRoaXMgbW9kdWxlIHRocm91Z2ggdGhlXG4mIzQzO1x0ICogb3AmIzM5O3MgTVIuICBEcmFpbiB0aGVtIGJlZm9yZSB0aGUgbW9kdWxlIGdvZXMgYXdheS4gIEEgZGVmZXJyZWRcbiYjNDM7XHQgKiBwdXJnZSBjYW4gZHJvcCB0aGUgZmluYWwgcmVmZXJlbmNlIG9uIHRoZSBvcCYjMzk7cyBkZXZpY2UsIHdoaWNoXG4mIzQzO1x0ICogcXVldWVzIHJkc19pYl9kZXZfZnJlZSgpIGJhY2sgb250byByZHNfd3EsIGFuZFxuJiM0MztcdCAqIGZsdXNoX3dvcmtxdWV1ZSgpIGRvZXMgbm90IHdhaXQgZm9yIHdvcmsgcXVldWVkIGJ5IHRoZSBpdGVtc1xuJiM0MztcdCAqIGl0IGlzIGZsdXNoaW5nLiAgRmx1c2ggYSBzZWNvbmQgdGltZSBmb3IgdGhvc2UuXG4mIzQzO1x0ICovXG4mIzQzO1x0Zmx1c2hfd29ya3F1ZXVlKHJkc193cSk7XG4mIzQzO1x0Zmx1c2hfd29ya3F1ZXVlKHJkc193cSk7XG4mIzQzO1xuIFx0cmRzX2liX3N5c2N0bF9leGl0KCk7XG4gXHRyZHNfaWJfcmVjdl9leGl0KCk7XG4gXHRyZHNfdHJhbnNfdW5yZWdpc3RlcihcdTAwMjZyZHNfaWJfdHJhbnNwb3J0KTtcbmRpZmYgLS1naXQgYS9uZXQvcmRzL21lc3NhZ2UuYyBiL25ldC9yZHMvbWVzc2FnZS5jXG5pbmRleCA3ZmViMGViNjUzN2RiOC4uMmY2NTRhY2FkMjliOTQgMTAwNjQ0XG4tLS0gYS9uZXQvcmRzL21lc3NhZ2UuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3Jkcy9tZXNzYWdlLmNcbkBAIC0xODIsNiAmIzQzOzE4MiwyOSBAQCBzdGF0aWMgdm9pZCByZHNfbWVzc2FnZV9wdXJnZShzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtKVxuIFx0XHRrcmVmX3B1dChcdTAwMjZybS1cdTAwM2VhdG9taWMub3BfcmRtYV9tci1cdTAwM2VyX2tyZWYsIF9fcmRzX3B1dF9tcl9maW5hbCk7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCByZHNfbWVzc2FnZV9wdXJnZV93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJkc19tZXNzYWdlICpybSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcmRzX21lc3NhZ2UsXG4mIzQzO1x0XHRcdFx0XHQgICAgICBtX3B1cmdlX3dvcmspO1xuJiM0MztcbiYjNDM7XHRyZHNfbWVzc2FnZV9wdXJnZShybSk7XG4mIzQzO1xuJiM0MztcdGtmcmVlKHJtKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogUHVyZ2luZyBhIG1lc3NhZ2Ugd2l0aCBhbiBSRE1BIG9yIGF0b21pYyBvcCB3aG9zZSBwYWdlcyB3ZXJlIHBvc3NpYmx5XG4mIzQzOyAqIHdyaXR0ZW4gYnkgdGhlIHJlbW90ZSBzaWRlIG11c3QgZGlydHkgdGhvc2UgcGFnZXMsIHdoaWNoIGNhbiBzbGVlcFxuJiM0MzsgKiAoYW5kIHRoZSBwYWdlcyBtYXkgYmUgZmlsZS1iYWNrZWQsIHNvIGRpcnR5aW5nIHRoZW0gdW5kZXIgYSBub24taXJxLXNhZmVcbiYjNDM7ICogZmlsZXN5c3RlbSBsb2NrIG11c3Qgbm90IGhhcHBlbiBmcm9tIGF0b21pYyBjb250ZXh0IGF0IGFsbCkuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgYm9vbCByZHNfbWVzc2FnZV9kaXJ0aWVzX3BhZ2VzKHN0cnVjdCByZHNfbWVzc2FnZSAqcm0pXG4mIzQzO3tcbiYjNDM7XHRpZiAocm0tXHUwMDNlcmRtYS5vcF9hY3RpdmUgXHUwMDI2XHUwMDI2IHJtLVx1MDAzZXJkbWEub3BfbmVudHMgXHUwMDI2XHUwMDI2ICFybS1cdTAwM2VyZG1hLm9wX3dyaXRlIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAhcm0tXHUwMDNlcmRtYS5vcF9vZHBfbXIpXG4mIzQzO1x0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHRyZXR1cm4gcm0tXHUwMDNlYXRvbWljLm9wX2FjdGl2ZTtcbiYjNDM7fVxuJiM0MztcbiB2b2lkIHJkc19tZXNzYWdlX3B1dChzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtKVxuIHtcbiBcdHJkc2RlYnVnKFwmIzM0O3B1dCBybSAlcCByZWYgJWRcXG5cJiMzNDssIHJtLCByZWZjb3VudF9yZWFkKFx1MDAyNnJtLVx1MDAzZW1fcmVmY291bnQpKTtcbkBAIC0xODksNiAmIzQzOzIxMiwxNyBAQCB2b2lkIHJkc19tZXNzYWdlX3B1dChzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtKVxuIFx0aWYgKHJlZmNvdW50X2RlY19hbmRfdGVzdChcdTAwMjZybS1cdTAwM2VtX3JlZmNvdW50KSkge1xuIFx0XHRCVUdfT04oIWxpc3RfZW1wdHkoXHUwMDI2cm0tXHUwMDNlbV9zb2NrX2l0ZW0pKTtcbiBcdFx0QlVHX09OKCFsaXN0X2VtcHR5KFx1MDAyNnJtLVx1MDAzZW1fY29ubl9pdGVtKSk7XG4mIzQzO1xuJiM0MztcdFx0LyogVGhlIGZpbmFsIHB1dCBtYXkgY29tZSBmcm9tIHRoZSBJQiBzZW5kIGNvbXBsZXRpb25cbiYjNDM7XHRcdCAqIHRhc2tsZXQ7IHBhZ2UgZGlydHlpbmcgbXVzdCBiZSBkZWZlcnJlZCB0byBwcm9jZXNzXG4mIzQzO1x0XHQgKiBjb250ZXh0IHRoZW4uXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGlmICghaW5fdGFzaygpIFx1MDAyNlx1MDAyNiByZHNfbWVzc2FnZV9kaXJ0aWVzX3BhZ2VzKHJtKSkge1xuJiM0MztcdFx0XHRJTklUX1dPUksoXHUwMDI2cm0tXHUwMDNlbV9wdXJnZV93b3JrLCByZHNfbWVzc2FnZV9wdXJnZV93b3JrZXIpO1xuJiM0MztcdFx0XHRxdWV1ZV93b3JrKHJkc193cSwgXHUwMDI2cm0tXHUwMDNlbV9wdXJnZV93b3JrKTtcbiYjNDM7XHRcdFx0cmV0dXJuO1xuJiM0MztcdFx0fVxuJiM0MztcbiBcdFx0cmRzX21lc3NhZ2VfcHVyZ2Uocm0pO1xuIFxuIFx0XHRrZnJlZShybSk7XG5kaWZmIC0tZ2l0IGEvbmV0L3Jkcy9yZG1hLmMgYi9uZXQvcmRzL3JkbWEuY1xuaW5kZXggNjFmYjZlNDUyODFiZjEuLjVmNTc1M2FmZGNkY2JkIDEwMDY0NFxuLS0tIGEvbmV0L3Jkcy9yZG1hLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9yZHMvcmRtYS5jXG5AQCAtMTE3LDYgJiM0MzsxMTcsNyBAQCB2b2lkIF9fcmRzX3B1dF9tcl9maW5hbChzdHJ1Y3Qga3JlZiAqa3JlZilcbiBcdHN0cnVjdCByZHNfbXIgKm1yID0gY29udGFpbmVyX29mKGtyZWYsIHN0cnVjdCByZHNfbXIsIHJfa3JlZik7XG4gXG4gXHRyZHNfZGVzdHJveV9tcihtcik7XG4mIzQzO1x0c29ja19wdXQocmRzX3JzX3RvX3NrKG1yLVx1MDAzZXJfc29jaykpO1xuIFx0a2ZyZWUobXIpO1xuIH1cbiBcbkBAIC0yNDMsNyAmIzQzOzI0NCwxMSBAQCBzdGF0aWMgaW50IF9fcmRzX3JkbWFfbWFwKHN0cnVjdCByZHNfc29jayAqcnMsIHN0cnVjdCByZHNfZ2V0X21yX2FyZ3MgKmFyZ3MsXG4gXHRrcmVmX2luaXQoXHUwMDI2bXItXHUwMDNlcl9rcmVmKTtcbiBcdFJCX0NMRUFSX05PREUoXHUwMDI2bXItXHUwMDNlcl9yYl9ub2RlKTtcbiBcdG1yLVx1MDAzZXJfdHJhbnMgPSBycy1cdTAwM2Vyc190cmFuc3BvcnQ7XG4mIzQzO1x0LyogVGhlIE1SIGNhbiBvdXRsaXZlIGl0cyBzb2NrZXQ6IGEgc29ja2V0IHJlZmVyZW5jZSBpcyBoZWxkXG4mIzQzO1x0ICogdW50aWwgdGhlIGZpbmFsIGtyZWYgaXMgZHJvcHBlZCBpbiBfX3Jkc19wdXRfbXJfZmluYWwoKS5cbiYjNDM7XHQgKi9cbiBcdG1yLVx1MDAzZXJfc29jayA9IHJzO1xuJiM0MztcdHNvY2tfaG9sZChyZHNfcnNfdG9fc2socnMpKTtcbiBcbiBcdGlmIChhcmdzLVx1MDAzZWZsYWdzIFx1MDAyNiBSRFNfUkRNQV9VU0VfT05DRSlcbiBcdFx0bXItXHUwMDNlcl91c2Vfb25jZSA9IDE7XG5AQCAtNDk1LDcgJiM0Mzs1MDAsOSBAQCB2b2lkIHJkc19yZG1hX2ZyZWVfb3Aoc3RydWN0IHJtX3JkbWFfb3AgKnJvKVxuIFxuIFx0XHRcdC8qIE1hcmsgcGFnZSBkaXJ0eSBpZiBpdCB3YXMgcG9zc2libHkgbW9kaWZpZWQsIHdoaWNoXG4gXHRcdFx0ICogaXMgdGhlIGNhc2UgZm9yIGEgUkRNQV9SRUFEIHdoaWNoIGNvcGllcyBmcm9tIHJlbW90ZVxuLVx0XHRcdCAqIHRvIGxvY2FsIG1lbW9yeVxuJiM0MztcdFx0XHQgKiB0byBsb2NhbCBtZW1vcnkuICBEaXJ0eWluZyB0aGUgcGFnZSBjYW4gc2xlZXAsIHNvXG4mIzQzO1x0XHRcdCAqIHJkc19tZXNzYWdlX3B1dCgpIGRlZmVycyB0aGUgcHVyZ2Ugb2Ygc3VjaCBvcHMgdG9cbiYjNDM7XHRcdFx0ICogcHJvY2VzcyBjb250ZXh0LlxuIFx0XHRcdCAqL1xuIFx0XHRcdHVucGluX3VzZXJfcGFnZXNfZGlydHlfbG9jayhcdTAwMjZwYWdlLCAxLCAhcm8tXHUwMDNlb3Bfd3JpdGUpO1xuIFx0XHR9XG5AQCAtNTEzLDcgJiM0Mzs1MjAsMTAgQEAgdm9pZCByZHNfYXRvbWljX2ZyZWVfb3Aoc3RydWN0IHJtX2F0b21pY19vcCAqYW8pXG4gXG4gXHQvKiBNYXJrIHBhZ2UgZGlydHkgaWYgaXQgd2FzIHBvc3NpYmx5IG1vZGlmaWVkLCB3aGljaFxuIFx0ICogaXMgdGhlIGNhc2UgZm9yIGEgUkRNQV9SRUFEIHdoaWNoIGNvcGllcyBmcm9tIHJlbW90ZVxuLVx0ICogdG8gbG9jYWwgbWVtb3J5ICovXG4mIzQzO1x0ICogdG8gbG9jYWwgbWVtb3J5LiAgRGlydHlpbmcgdGhlIHBhZ2UgY2FuIHNsZWVwLCBzb1xuJiM0MztcdCAqIHJkc19tZXNzYWdlX3B1dCgpIGRlZmVycyB0aGUgcHVyZ2Ugb2Ygc3VjaCBvcHMgdG9cbiYjNDM7XHQgKiBwcm9jZXNzIGNvbnRleHQuXG4mIzQzO1x0ICovXG4gXHR1bnBpbl91c2VyX3BhZ2VzX2RpcnR5X2xvY2soXHUwMDI2cGFnZSwgMSwgdHJ1ZSk7XG4gXG4gXHRrZnJlZShhby1cdTAwM2VvcF9ub3RpZmllcik7XG5AQCAtNzQ3LDYgJiM0Mzs3NTcsMTAgQEAgaW50IHJkc19jbXNnX3JkbWFfYXJncyhzdHJ1Y3QgcmRzX3NvY2sgKnJzLCBzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtLFxuIFx0XHRcdH1cbiBcdFx0XHRyZHNkZWJ1ZyhcJiMzNDtOZWVkIG9kcDsgbG9jYWxfb2RwX21yICVwIHRyYW5zX3ByaXZhdGUgJXBcXG5cJiMzNDssXG4gXHRcdFx0XHQgbG9jYWxfb2RwX21yLCBsb2NhbF9vZHBfbXItXHUwMDNlcl90cmFuc19wcml2YXRlKTtcbiYjNDM7XHRcdFx0LyogRnJvbSBoZXJlIG9uIHRoZSBNUiBpcyB0b3JuIGRvd24gdGhyb3VnaFxuJiM0MztcdFx0XHQgKiBfX3Jkc19wdXRfbXJfZmluYWwoKSwgd2hpY2ggZHJvcHMgdGhpcyByZWZlcmVuY2UuXG4mIzQzO1x0XHRcdCAqL1xuJiM0MztcdFx0XHRzb2NrX2hvbGQocmRzX3JzX3RvX3NrKHJzKSk7XG4gXHRcdFx0b3AtXHUwMDNlb3Bfb2RwX21yID0gbG9jYWxfb2RwX21yO1xuIFx0XHRcdG9wLVx1MDAzZW9wX29kcF9hZGRyID0gaW92LVx1MDAzZWFkZHI7XG4gXHRcdH1cbmRpZmYgLS1naXQgYS9uZXQvcmRzL3Jkcy5oIGIvbmV0L3Jkcy9yZHMuaFxuaW5kZXggNmUwNzkwZTRiNTcwM2IuLjk4MmYzZTQwNjc3M2ZhIDEwMDY0NFxuLS0tIGEvbmV0L3Jkcy9yZHMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3Jkcy9yZHMuaFxuQEAgLTQ0NSw2ICYjNDM7NDQ1LDEyIEBAIHN0cnVjdCByZHNfbWVzc2FnZSB7XG4gXG4gXHR2b2lkXHRcdFx0Km1fZmluYWxfb3A7XG4gXG4mIzQzO1x0LyogRnJlZXMgdGhlIG1lc3NhZ2UgZnJvbSBwcm9jZXNzIGNvbnRleHQgd2hlbiB0aGUgZmluYWwgcHV0XG4mIzQzO1x0ICogaGFwcGVucyBpbiBhdG9taWMgY29udGV4dCBidXQgcHVyZ2luZyBuZWVkcyB0byBkaXJ0eSB1c2VyXG4mIzQzO1x0ICogcGFnZXMsIHdoaWNoIGNhbiBzbGVlcC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRzdHJ1Y3Qgd29ya19zdHJ1Y3RcdG1fcHVyZ2Vfd29yaztcbiYjNDM7XG4gXHRzdHJ1Y3Qge1xuIFx0XHRzdHJ1Y3Qgcm1fYXRvbWljX29wIHtcbiBcdFx0XHRpbnRcdFx0XHRvcF90eXBlO1xuZGlmZiAtLWdpdCBhL25ldC9yZHMvc2VuZC5jIGIvbmV0L3Jkcy9zZW5kLmNcbmluZGV4IDY4YmUxYmYwZTBhZGY5Li43ZTQ4ZjY0ZGZhYTY3OSAxMDA2NDRcbi0tLSBhL25ldC9yZHMvc2VuZC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvcmRzL3NlbmQuY1xuQEAgLTMzOSw5ICYjNDM7MzM5LDIxIEBAIGludCByZHNfc2VuZF94bWl0KHN0cnVjdCByZHNfY29ubl9wYXRoICpjcClcbiBcdFx0XHQgICAgKHJtLVx1MDAzZXJkbWEub3BfYWN0aXZlIFx1MDAyNlx1MDAyNlxuIFx0XHRcdCAgICB0ZXN0X2JpdChSRFNfTVNHX1JFVFJBTlNNSVRURUQsIFx1MDAyNnJtLVx1MDAzZW1fZmxhZ3MpKSkge1xuIFx0XHRcdFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2Y3AtXHUwMDNlY3BfbG9jaywgZmxhZ3MpO1xuLVx0XHRcdFx0aWYgKHRlc3RfYW5kX2NsZWFyX2JpdChSRFNfTVNHX09OX0NPTk4sIFx1MDAyNnJtLVx1MDAzZW1fZmxhZ3MpKVxuLVx0XHRcdFx0XHRsaXN0X21vdmUoXHUwMDI2cm0tXHUwMDNlbV9jb25uX2l0ZW0sIFx1MDAyNnRvX2JlX2Ryb3BwZWQpO1xuLVx0XHRcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZjcC1cdTAwM2VjcF9sb2NrLCBmbGFncyk7XG4mIzQzO1x0XHRcdFx0aWYgKHRlc3RfYW5kX2NsZWFyX2JpdChSRFNfTVNHX09OX0NPTk4sXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgICBcdTAwMjZybS1cdTAwM2VtX2ZsYWdzKSkge1xuJiM0MztcdFx0XHRcdFx0Lyogb3VyIHJlZiBpcyBwdXQgYWZ0ZXIgdGhlIGJhdGNoICovXG4mIzQzO1x0XHRcdFx0XHRsaXN0X21vdmUoXHUwMDI2cm0tXHUwMDNlbV9jb25uX2l0ZW0sXG4mIzQzO1x0XHRcdFx0XHRcdCAgXHUwMDI2dG9fYmVfZHJvcHBlZCk7XG4mIzQzO1x0XHRcdFx0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmNwLVx1MDAzZWNwX2xvY2ssXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgICAgIGZsYWdzKTtcbiYjNDM7XHRcdFx0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRcdFx0LyogYWxyZWFkeSBvZmYgdGhlIGNvbm4gbGlzdDsgZHJvcFxuJiM0MztcdFx0XHRcdFx0ICogdGhlIHJlZiB0YWtlbiBhYm92ZSBvdXJzZWx2ZXNcbiYjNDM7XHRcdFx0XHRcdCAqL1xuJiM0MztcdFx0XHRcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZjcC1cdTAwM2VjcF9sb2NrLFxuJiM0MztcdFx0XHRcdFx0XHRcdCAgICAgICBmbGFncyk7XG4mIzQzO1x0XHRcdFx0XHRyZHNfbWVzc2FnZV9wdXQocm0pO1xuJiM0MztcdFx0XHRcdH1cbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRcdH1cbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxMDo0NTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UkRTJiMzNDssCiAgICAmIzM0O1JEU19SRE1BJiMzNDssCiAgICAmIzM0O0lORklOSUJBTkQmIzM0OywKICAgICYjMzQ7SU5GSU5JQkFORF9BRERSX1RSQU5TJiMzNDssCiAgICAmIzM0O1JETUFfUlhFJiMzNDssCiAgICAmIzM0O1JETUFfU0lXJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cmRzX21lc3NhZ2VfcHV0JiMzNDssCiAgICAmIzM0O3Jkc19zZW5kX3htaXQmIzM0OywKICAgICYjMzQ7cmRzX2Ntc2dfcmRtYV9hcmdzJiMzNDssCiAgICAmIzM0O3Jkc19yZG1hX2ZyZWVfb3AmIzM0OywKICAgICYjMzQ7cmRzX2F0b21pY19mcmVlX29wJiMzNDssCiAgICAmIzM0O19fcmRzX3B1dF9tcl9maW5hbCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHNsZWVwLWluLWF0b21pYyBidWcgaW4gUkRTIG1lc3NhZ2UgcHVyZ2luZyBieSBkZWZlcnJpbmcgdGhlIHB1cmdlIG9mIG1lc3NhZ2VzIHRoYXQgZGlydHkgcGFnZXMgdG8gYSB3b3JrcXVldWUuIEl0IGFsc28gZml4ZXMgc29ja2V0IHJlZmVyZW5jZSBjb3VudGluZyBpc3N1ZXMgaW4gUkRTIFJETUEgb3BlcmF0aW9ucyBhbmQgYSByZWZlcmVuY2UgbGVhayBpbiBgcmRzX3NlbmRfeG1pdGAuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gdGhlIGNvcmUgUkRTIGFuZCBSRFMgUkRNQSBjb2RlIHBhdGhzIHRoYXQgY2FuIGJlIHJlYWNoZWQgdmlhIHN0YW5kYXJkIHNvY2tldCBvcGVyYXRpb25zIGFuZCBSRE1BIG1lc3NhZ2VzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgM2ZmMDUxNmRiNWIzZjljMGJmZmNjYzE0ZmZmODdjMjRmOTljNjY4NQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gSnVsIDI3IDEwOjQ1OjI1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9pYi5jIGIvbmV0L3Jkcy9pYi5jCmluZGV4IDhmOWNmNDkxOTg0ZjEyLi5hZDJmMDM4YmQxYWM0MiAxMDA2NDQKLS0tIGEvbmV0L3Jkcy9pYi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9yZHMvaWIuYwpAQCAtNTQxLDYgJiM0Mzs1NDEsMTggQEAgdm9pZCByZHNfaWJfZXhpdCh2b2lkKQogI2VuZGlmCiAJcmRzX2liX3VucmVnaXN0ZXJfY2xpZW50KCk7CiAJcmRzX2liX2Rlc3Ryb3lfbm9kZXZfY29ubnMoKTsKJiM0MzsKJiM0MzsJLyogVGhlIGNvbXBsZXRpb24gdGFza2xldHMgbWF5IGhhdmUgZGVmZXJyZWQgbWVzc2FnZSBmcmVlcyB0bwomIzQzOwkgKiByZHNfd3EsIGFuZCB0aG9zZSBjYW4gY2FsbCBiYWNrIGludG8gdGhpcyBtb2R1bGUgdGhyb3VnaCB0aGUKJiM0MzsJICogb3AmIzM5O3MgTVIuICBEcmFpbiB0aGVtIGJlZm9yZSB0aGUgbW9kdWxlIGdvZXMgYXdheS4gIEEgZGVmZXJyZWQKJiM0MzsJICogcHVyZ2UgY2FuIGRyb3AgdGhlIGZpbmFsIHJlZmVyZW5jZSBvbiB0aGUgb3AmIzM5O3MgZGV2aWNlLCB3aGljaAomIzQzOwkgKiBxdWV1ZXMgcmRzX2liX2Rldl9mcmVlKCkgYmFjayBvbnRvIHJkc193cSwgYW5kCiYjNDM7CSAqIGZsdXNoX3dvcmtxdWV1ZSgpIGRvZXMgbm90IHdhaXQgZm9yIHdvcmsgcXVldWVkIGJ5IHRoZSBpdGVtcwomIzQzOwkgKiBpdCBpcyBmbHVzaGluZy4gIEZsdXNoIGEgc2Vjb25kIHRpbWUgZm9yIHRob3NlLgomIzQzOwkgKi8KJiM0MzsJZmx1c2hfd29ya3F1ZXVlKHJkc193cSk7CiYjNDM7CWZsdXNoX3dvcmtxdWV1ZShyZHNfd3EpOwomIzQzOwogCXJkc19pYl9zeXNjdGxfZXhpdCgpOwogCXJkc19pYl9yZWN2X2V4aXQoKTsKIAlyZHNfdHJhbnNfdW5yZWdpc3RlcigmYW1wO3Jkc19pYl90cmFuc3BvcnQpOwpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9tZXNzYWdlLmMgYi9uZXQvcmRzL21lc3NhZ2UuYwppbmRleCA3ZmViMGViNjUzN2RiOC4uMmY2NTRhY2FkMjliOTQgMTAwNjQ0Ci0tLSBhL25ldC9yZHMvbWVzc2FnZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9yZHMvbWVzc2FnZS5jCkBAIC0xODIsNiAmIzQzOzE4MiwyOSBAQCBzdGF0aWMgdm9pZCByZHNfbWVzc2FnZV9wdXJnZShzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtKQogCQlrcmVmX3B1dCgmYW1wO3JtLSZndDthdG9taWMub3BfcmRtYV9tci0mZ3Q7cl9rcmVmLCBfX3Jkc19wdXRfbXJfZmluYWwpOwogfQogCiYjNDM7c3RhdGljIHZvaWQgcmRzX21lc3NhZ2VfcHVyZ2Vfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKJiM0Mzt7CiYjNDM7CXN0cnVjdCByZHNfbWVzc2FnZSAqcm0gPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHJkc19tZXNzYWdlLAomIzQzOwkJCQkJICAgICAgbV9wdXJnZV93b3JrKTsKJiM0MzsKJiM0MzsJcmRzX21lc3NhZ2VfcHVyZ2Uocm0pOwomIzQzOwomIzQzOwlrZnJlZShybSk7CiYjNDM7fQomIzQzOwomIzQzOy8qIFB1cmdpbmcgYSBtZXNzYWdlIHdpdGggYW4gUkRNQSBvciBhdG9taWMgb3Agd2hvc2UgcGFnZXMgd2VyZSBwb3NzaWJseQomIzQzOyAqIHdyaXR0ZW4gYnkgdGhlIHJlbW90ZSBzaWRlIG11c3QgZGlydHkgdGhvc2UgcGFnZXMsIHdoaWNoIGNhbiBzbGVlcAomIzQzOyAqIChhbmQgdGhlIHBhZ2VzIG1heSBiZSBmaWxlLWJhY2tlZCwgc28gZGlydHlpbmcgdGhlbSB1bmRlciBhIG5vbi1pcnEtc2FmZQomIzQzOyAqIGZpbGVzeXN0ZW0gbG9jayBtdXN0IG5vdCBoYXBwZW4gZnJvbSBhdG9taWMgY29udGV4dCBhdCBhbGwpLgomIzQzOyAqLwomIzQzO3N0YXRpYyBib29sIHJkc19tZXNzYWdlX2RpcnRpZXNfcGFnZXMoc3RydWN0IHJkc19tZXNzYWdlICpybSkKJiM0Mzt7CiYjNDM7CWlmIChybS0mZ3Q7cmRtYS5vcF9hY3RpdmUgJmFtcDsmYW1wOyBybS0mZ3Q7cmRtYS5vcF9uZW50cyAmYW1wOyZhbXA7ICFybS0mZ3Q7cmRtYS5vcF93cml0ZSAmYW1wOyZhbXA7CiYjNDM7CSAgICAhcm0tJmd0O3JkbWEub3Bfb2RwX21yKQomIzQzOwkJcmV0dXJuIHRydWU7CiYjNDM7CXJldHVybiBybS0mZ3Q7YXRvbWljLm9wX2FjdGl2ZTsKJiM0Mzt9CiYjNDM7CiB2b2lkIHJkc19tZXNzYWdlX3B1dChzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtKQogewogCXJkc2RlYnVnKCYjMzQ7cHV0IHJtICVwIHJlZiAlZFxuJiMzNDssIHJtLCByZWZjb3VudF9yZWFkKCZhbXA7cm0tJmd0O21fcmVmY291bnQpKTsKQEAgLTE4OSw2ICYjNDM7MjEyLDE3IEBAIHZvaWQgcmRzX21lc3NhZ2VfcHV0KHN0cnVjdCByZHNfbWVzc2FnZSAqcm0pCiAJaWYgKHJlZmNvdW50X2RlY19hbmRfdGVzdCgmYW1wO3JtLSZndDttX3JlZmNvdW50KSkgewogCQlCVUdfT04oIWxpc3RfZW1wdHkoJmFtcDtybS0mZ3Q7bV9zb2NrX2l0ZW0pKTsKIAkJQlVHX09OKCFsaXN0X2VtcHR5KCZhbXA7cm0tJmd0O21fY29ubl9pdGVtKSk7CiYjNDM7CiYjNDM7CQkvKiBUaGUgZmluYWwgcHV0IG1heSBjb21lIGZyb20gdGhlIElCIHNlbmQgY29tcGxldGlvbgomIzQzOwkJICogdGFza2xldDsgcGFnZSBkaXJ0eWluZyBtdXN0IGJlIGRlZmVycmVkIHRvIHByb2Nlc3MKJiM0MzsJCSAqIGNvbnRleHQgdGhlbi4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKCFpbl90YXNrKCkgJmFtcDsmYW1wOyByZHNfbWVzc2FnZV9kaXJ0aWVzX3BhZ2VzKHJtKSkgewomIzQzOwkJCUlOSVRfV09SSygmYW1wO3JtLSZndDttX3B1cmdlX3dvcmssIHJkc19tZXNzYWdlX3B1cmdlX3dvcmtlcik7CiYjNDM7CQkJcXVldWVfd29yayhyZHNfd3EsICZhbXA7cm0tJmd0O21fcHVyZ2Vfd29yayk7CiYjNDM7CQkJcmV0dXJuOwomIzQzOwkJfQomIzQzOwogCQlyZHNfbWVzc2FnZV9wdXJnZShybSk7CiAKIAkJa2ZyZWUocm0pOwpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9yZG1hLmMgYi9uZXQvcmRzL3JkbWEuYwppbmRleCA2MWZiNmU0NTI4MWJmMS4uNWY1NzUzYWZkY2RjYmQgMTAwNjQ0Ci0tLSBhL25ldC9yZHMvcmRtYS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9yZHMvcmRtYS5jCkBAIC0xMTcsNiAmIzQzOzExNyw3IEBAIHZvaWQgX19yZHNfcHV0X21yX2ZpbmFsKHN0cnVjdCBrcmVmICprcmVmKQogCXN0cnVjdCByZHNfbXIgKm1yID0gY29udGFpbmVyX29mKGtyZWYsIHN0cnVjdCByZHNfbXIsIHJfa3JlZik7CiAKIAlyZHNfZGVzdHJveV9tcihtcik7CiYjNDM7CXNvY2tfcHV0KHJkc19yc190b19zayhtci0mZ3Q7cl9zb2NrKSk7CiAJa2ZyZWUobXIpOwogfQogCkBAIC0yNDMsNyAmIzQzOzI0NCwxMSBAQCBzdGF0aWMgaW50IF9fcmRzX3JkbWFfbWFwKHN0cnVjdCByZHNfc29jayAqcnMsIHN0cnVjdCByZHNfZ2V0X21yX2FyZ3MgKmFyZ3MsCiAJa3JlZl9pbml0KCZhbXA7bXItJmd0O3Jfa3JlZik7CiAJUkJfQ0xFQVJfTk9ERSgmYW1wO21yLSZndDtyX3JiX25vZGUpOwogCW1yLSZndDtyX3RyYW5zID0gcnMtJmd0O3JzX3RyYW5zcG9ydDsKJiM0MzsJLyogVGhlIE1SIGNhbiBvdXRsaXZlIGl0cyBzb2NrZXQ6IGEgc29ja2V0IHJlZmVyZW5jZSBpcyBoZWxkCiYjNDM7CSAqIHVudGlsIHRoZSBmaW5hbCBrcmVmIGlzIGRyb3BwZWQgaW4gX19yZHNfcHV0X21yX2ZpbmFsKCkuCiYjNDM7CSAqLwogCW1yLSZndDtyX3NvY2sgPSByczsKJiM0MzsJc29ja19ob2xkKHJkc19yc190b19zayhycykpOwogCiAJaWYgKGFyZ3MtJmd0O2ZsYWdzICZhbXA7IFJEU19SRE1BX1VTRV9PTkNFKQogCQltci0mZ3Q7cl91c2Vfb25jZSA9IDE7CkBAIC00OTUsNyAmIzQzOzUwMCw5IEBAIHZvaWQgcmRzX3JkbWFfZnJlZV9vcChzdHJ1Y3Qgcm1fcmRtYV9vcCAqcm8pCiAKIAkJCS8qIE1hcmsgcGFnZSBkaXJ0eSBpZiBpdCB3YXMgcG9zc2libHkgbW9kaWZpZWQsIHdoaWNoCiAJCQkgKiBpcyB0aGUgY2FzZSBmb3IgYSBSRE1BX1JFQUQgd2hpY2ggY29waWVzIGZyb20gcmVtb3RlCi0JCQkgKiB0byBsb2NhbCBtZW1vcnkKJiM0MzsJCQkgKiB0byBsb2NhbCBtZW1vcnkuICBEaXJ0eWluZyB0aGUgcGFnZSBjYW4gc2xlZXAsIHNvCiYjNDM7CQkJICogcmRzX21lc3NhZ2VfcHV0KCkgZGVmZXJzIHRoZSBwdXJnZSBvZiBzdWNoIG9wcyB0bwomIzQzOwkJCSAqIHByb2Nlc3MgY29udGV4dC4KIAkJCSAqLwogCQkJdW5waW5fdXNlcl9wYWdlc19kaXJ0eV9sb2NrKCZhbXA7cGFnZSwgMSwgIXJvLSZndDtvcF93cml0ZSk7CiAJCX0KQEAgLTUxMyw3ICYjNDM7NTIwLDEwIEBAIHZvaWQgcmRzX2F0b21pY19mcmVlX29wKHN0cnVjdCBybV9hdG9taWNfb3AgKmFvKQogCiAJLyogTWFyayBwYWdlIGRpcnR5IGlmIGl0IHdhcyBwb3NzaWJseSBtb2RpZmllZCwgd2hpY2gKIAkgKiBpcyB0aGUgY2FzZSBmb3IgYSBSRE1BX1JFQUQgd2hpY2ggY29waWVzIGZyb20gcmVtb3RlCi0JICogdG8gbG9jYWwgbWVtb3J5ICovCiYjNDM7CSAqIHRvIGxvY2FsIG1lbW9yeS4gIERpcnR5aW5nIHRoZSBwYWdlIGNhbiBzbGVlcCwgc28KJiM0MzsJICogcmRzX21lc3NhZ2VfcHV0KCkgZGVmZXJzIHRoZSBwdXJnZSBvZiBzdWNoIG9wcyB0bwomIzQzOwkgKiBwcm9jZXNzIGNvbnRleHQuCiYjNDM7CSAqLwogCXVucGluX3VzZXJfcGFnZXNfZGlydHlfbG9jaygmYW1wO3BhZ2UsIDEsIHRydWUpOwogCiAJa2ZyZWUoYW8tJmd0O29wX25vdGlmaWVyKTsKQEAgLTc0Nyw2ICYjNDM7NzU3LDEwIEBAIGludCByZHNfY21zZ19yZG1hX2FyZ3Moc3RydWN0IHJkc19zb2NrICpycywgc3RydWN0IHJkc19tZXNzYWdlICpybSwKIAkJCX0KIAkJCXJkc2RlYnVnKCYjMzQ7TmVlZCBvZHA7IGxvY2FsX29kcF9tciAlcCB0cmFuc19wcml2YXRlICVwXG4mIzM0OywKIAkJCQkgbG9jYWxfb2RwX21yLCBsb2NhbF9vZHBfbXItJmd0O3JfdHJhbnNfcHJpdmF0ZSk7CiYjNDM7CQkJLyogRnJvbSBoZXJlIG9uIHRoZSBNUiBpcyB0b3JuIGRvd24gdGhyb3VnaAomIzQzOwkJCSAqIF9fcmRzX3B1dF9tcl9maW5hbCgpLCB3aGljaCBkcm9wcyB0aGlzIHJlZmVyZW5jZS4KJiM0MzsJCQkgKi8KJiM0MzsJCQlzb2NrX2hvbGQocmRzX3JzX3RvX3NrKHJzKSk7CiAJCQlvcC0mZ3Q7b3Bfb2RwX21yID0gbG9jYWxfb2RwX21yOwogCQkJb3AtJmd0O29wX29kcF9hZGRyID0gaW92LSZndDthZGRyOwogCQl9CmRpZmYgLS1naXQgYS9uZXQvcmRzL3Jkcy5oIGIvbmV0L3Jkcy9yZHMuaAppbmRleCA2ZTA3OTBlNGI1NzAzYi4uOTgyZjNlNDA2NzczZmEgMTAwNjQ0Ci0tLSBhL25ldC9yZHMvcmRzLmgKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3Jkcy9yZHMuaApAQCAtNDQ1LDYgJiM0Mzs0NDUsMTIgQEAgc3RydWN0IHJkc19tZXNzYWdlIHsKIAogCXZvaWQJCQkqbV9maW5hbF9vcDsKIAomIzQzOwkvKiBGcmVlcyB0aGUgbWVzc2FnZSBmcm9tIHByb2Nlc3MgY29udGV4dCB3aGVuIHRoZSBmaW5hbCBwdXQKJiM0MzsJICogaGFwcGVucyBpbiBhdG9taWMgY29udGV4dCBidXQgcHVyZ2luZyBuZWVkcyB0byBkaXJ0eSB1c2VyCiYjNDM7CSAqIHBhZ2VzLCB3aGljaCBjYW4gc2xlZXAuCiYjNDM7CSAqLwomIzQzOwlzdHJ1Y3Qgd29ya19zdHJ1Y3QJbV9wdXJnZV93b3JrOwomIzQzOwogCXN0cnVjdCB7CiAJCXN0cnVjdCBybV9hdG9taWNfb3AgewogCQkJaW50CQkJb3BfdHlwZTsKZGlmZiAtLWdpdCBhL25ldC9yZHMvc2VuZC5jIGIvbmV0L3Jkcy9zZW5kLmMKaW5kZXggNjhiZTFiZjBlMGFkZjkuLjdlNDhmNjRkZmFhNjc5IDEwMDY0NAotLS0gYS9uZXQvcmRzL3NlbmQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvcmRzL3NlbmQuYwpAQCAtMzM5LDkgJiM0MzszMzksMjEgQEAgaW50IHJkc19zZW5kX3htaXQoc3RydWN0IHJkc19jb25uX3BhdGggKmNwKQogCQkJICAgIChybS0mZ3Q7cmRtYS5vcF9hY3RpdmUgJmFtcDsmYW1wOwogCQkJICAgIHRlc3RfYml0KFJEU19NU0dfUkVUUkFOU01JVFRFRCwgJmFtcDtybS0mZ3Q7bV9mbGFncykpKSB7CiAJCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtjcC0mZ3Q7Y3BfbG9jaywgZmxhZ3MpOwotCQkJCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoUkRTX01TR19PTl9DT05OLCAmYW1wO3JtLSZndDttX2ZsYWdzKSkKLQkJCQkJbGlzdF9tb3ZlKCZhbXA7cm0tJmd0O21fY29ubl9pdGVtLCAmYW1wO3RvX2JlX2Ryb3BwZWQpOwotCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtjcC0mZ3Q7Y3BfbG9jaywgZmxhZ3MpOwomIzQzOwkJCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KFJEU19NU0dfT05fQ09OTiwKJiM0MzsJCQkJCQkgICAgICAgJmFtcDtybS0mZ3Q7bV9mbGFncykpIHsKJiM0MzsJCQkJCS8qIG91ciByZWYgaXMgcHV0IGFmdGVyIHRoZSBiYXRjaCAqLwomIzQzOwkJCQkJbGlzdF9tb3ZlKCZhbXA7cm0tJmd0O21fY29ubl9pdGVtLAomIzQzOwkJCQkJCSAgJmFtcDt0b19iZV9kcm9wcGVkKTsKJiM0MzsJCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtjcC0mZ3Q7Y3BfbG9jaywKJiM0MzsJCQkJCQkJICAgICAgIGZsYWdzKTsKJiM0MzsJCQkJfSBlbHNlIHsKJiM0MzsJCQkJCS8qIGFscmVhZHkgb2ZmIHRoZSBjb25uIGxpc3Q7IGRyb3AKJiM0MzsJCQkJCSAqIHRoZSByZWYgdGFrZW4gYWJvdmUgb3Vyc2VsdmVzCiYjNDM7CQkJCQkgKi8KJiM0MzsJCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtjcC0mZ3Q7Y3BfbG9jaywKJiM0MzsJCQkJCQkJICAgICAgIGZsYWdzKTsKJiM0MzsJCQkJCXJkc19tZXNzYWdlX3B1dChybSk7CiYjNDM7CQkJCX0KIAkJCQljb250aW51ZTsKIAkJCX0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxMDo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MzUxCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMzA3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFJEUyBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBoZXJlIHRoYXTigJlzIHRvdWNoaW5nIHRoZSBSRFMgc3Vic3lzdGVtIGluIHRoZSBMaW51eCBrZXJuZWwuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgbWFraW5nIGNoYW5nZXMgdG8gc2V2ZXJhbCBrZXkgZmlsZXM6IGBpYi5jYCwgYG1lc3NhZ2UuY2AsIGByZG1hLmNgLCBgcmRzLmhgLCBhbmQgYHNlbmQuY2AuIE15IGluaXRpYWwgcmVhZCBzdWdnZXN0cyB0aGV54oCZcmUgaW50cm9kdWNpbmcgYSBkZWZlcnJlZCBwdXJnZSBtZWNoYW5pc20gZm9yIFJEUyBtZXNzYWdlcyB0aGF0IGRpcnR5IHBhZ2VzLiBJdCBtYWtlcyBzZW5zZSwgYXMgYXRvbWljIGNvbnRleHRzIGFyZSB1c3VhbGx5IHByb2JsZW1hdGljIHdoZW4gc2xlZXBpbmcgaXMgaW52b2x2ZWQuIFRoYXTigJlzIHByb2JhYmx5IHRoZSBtYWluIHBlcmZvcm1hbmNlIHR3ZWFrLgoKVGhlIHBhdGNoIGFsc28gc2VlbXMgdG8gYmUgYWRkcmVzc2luZyBzb21lIHJlZmVyZW5jZSBjb3VudGluZyBpc3N1ZXMgcmVsYXRlZCB0byBNUnMgYW5kIHNvY2tldHMuIEdvb2QsIHRob3NlIGFyZSBhbHdheXMgdHJpY2t5IGFuZCBjYW4gbGVhZCB0byBzZXJpb3VzIHByb2JsZW1zIGlmIG5vdCBoYW5kbGVkIGNvcnJlY3RseS4gVGhleSYjMzk7cmUgdG91Y2hpbmcgYHNvY2tfaG9sZGAgYW5kIGBzb2NrX3B1dGAsIHNvIEkmIzM5O2xsIHdhbnQgdG8gcGF5IGV4dHJhIGF0dGVudGlvbiB0byB0aG9zZSBjb2RlIHNlZ21lbnRzLiBBbHNvLCBhIGZpeCBpbiBgcmRzX3NlbmRfeG1pdGAsIHdoZXJlIG1lc3NhZ2VzIHdlcmUgcG90ZW50aWFsbHkgYmVpbmcgZHJvcHBlZCBmcm9tIHRoZSBjb25uZWN0aW9uIGxpc3QgaW1wcm9wZXJseS4gQWdhaW4sIHRoaXMgaXMgdGhlIHNvcnQgb2YgdGhpbmcgdGhhdCBjYW4gYml0ZSB5b3UgbGF0ZXIuCgpOb3csIG15IHByaW1hcnkgY29uY2VybiBpcyByZWFjaGFiaWxpdHkgYW5kIGZ1bmN0aW9uYWxpdHkuIFNpbmNlIFJEUyBpcyBhIG5ldHdvcmsgcHJvdG9jb2wsIEkmIzM5O20gYXNzdW1pbmcgaXQmIzM5O3MgYWxyZWFkeSBmdW5jdGlvbmFsIGluIGl0cyBleGlzdGluZyBzdGF0ZSwgYnV0IEkgZGVmaW5pdGVseSBuZWVkIHRvIHZlcmlmeSB0aGF0IHRoaXMgcGF0Y2ggZG9lc24mIzM5O3QgYnJlYWsgYW55dGhpbmcgb3IgY3JlYXRlIG5ldyB2dWxuZXJhYmlsaXRpZXMuIFRoZSBtb3N0IGVmZmVjdGl2ZSBhcHByb2FjaCB3b3VsZCBiZSB0byBmdXp6IGl0LgoKSSYjMzk7bGwgbmVlZCB0byBwaW5wb2ludCB0aGUgY3JpdGljYWwgZnVuY3Rpb25zIHRoaXMgcGF0Y2ggaW50ZXJhY3RzIHdpdGggZGlyZWN0bHkuIExldCYjMzk7cyBzZWUuLi4gSSYjMzk7dmUgZ290OgoKKiAgIGByZHNfbWVzc2FnZV9wdXRgCiogICBgcmRzX3NlbmRfeG1pdGAKKiAgIGByZHNfY21zZ19yZG1hX2FyZ3NgCiogICBgcmRzX3JkbWFfZnJlZV9vcGAKKiAgIGByZHNfYXRvbWljX2ZyZWVfb3BgCiogICBgX19yZHNfcmRtYV9tYXBgCiogICBgX19yZHNfcHV0X21yX2ZpbmFsYAoKVGhlc2UgYXJlIGRlZmluaXRlbHkgdGhlIGtleSBhcmVhcyB0byBwcm9iZSB3aXRoIGZ1enppbmcuCgpOZXh0LCBJJiMzOTtsbCByZXZpZXcgdGhlIFJEUyBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEkmIzM5O2xsIHNlYXJjaCBmb3IgJiMzNDtSRFMmIzM0OyBpbiBzb21ldGhpbmcgbGlrZSBgbmV0L3Jkcy9LY29uZmlnYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBzZXR0aW5ncyB0aGF0IGluZmx1ZW5jZSB0aGUgYmVoYXZpb3Igb2YgdGhlc2UgZnVuY3Rpb25zLiBLbm93aW5nIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgd2lsbCBiZSBjcml0aWNhbCBmb3IgZWZmZWN0aXZlIGZ1enppbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTA6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFJEUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9yZHMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvcmRzL0tjb25maWctMi1cbm5ldC9yZHMvS2NvbmZpZzozOmNvbmZpZyBSRFNcbm5ldC9yZHMvS2NvbmZpZy00LVx0dHJpc3RhdGUgXCYjMzQ7VGhlIFJlbGlhYmxlIERhdGFncmFtIFNvY2tldHMgUHJvdG9jb2xcJiMzNDtcbi0tXG5uZXQvcmRzL0tjb25maWctOS1cbm5ldC9yZHMvS2NvbmZpZzoxMDpjb25maWcgUkRTX1JETUFcbm5ldC9yZHMvS2NvbmZpZy0xMS1cdHRyaXN0YXRlIFwmIzM0O1JEUyBvdmVyIEluZmluaWJhbmRcJiMzNDtcbi0tXG5uZXQvcmRzL0tjb25maWctMTYtXG5uZXQvcmRzL0tjb25maWc6MTc6Y29uZmlnIFJEU19UQ1Bcbm5ldC9yZHMvS2NvbmZpZy0xOC1cdHRyaXN0YXRlIFwmIzM0O1JEUyBvdmVyIFRDUFwmIzM0O1xuLS1cbm5ldC9yZHMvS2NvbmZpZy0yNC1cbm5ldC9yZHMvS2NvbmZpZzoyNTpjb25maWcgUkRTX0RFQlVHXG5uZXQvcmRzL0tjb25maWctMjYtXHRib29sIFwmIzM0O1JEUyBkZWJ1Z2dpbmcgbWVzc2FnZXNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxMDo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MzUwCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBSRFMgQ29uZmlndXJhdGlvbiBhbmQgUG90ZW50aWFsIEltcGFjdCBvZiBhIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBjb25maWd1cmF0aW9uIG9wdGlvbnM6IGBSRFNgLCBgUkRTX1JETUFgLCBhbmQgYFJEU19UQ1BgLiBSaWdodCBhd2F5LCBteSBleHBlcnQgaW50dWl0aW9uIHRlbGxzIG1lIHRoYXQgdGhpcyBpcyByZWxhdGVkIHRvIHRoZSBSZWxpYWJsZSBEYXRhZ3JhbSBTb2NrZXRzIChSRFMpIHByb3RvY29sLCBwb3NzaWJseSBmb3IgZGlmZmVyZW50IHRyYW5zcG9ydHMuIEdpdmVuIHRoYXQgdGhlIHBhdGNoIG1vZGlmaWVzIGBuZXQvcmRzL2liLmNgLCBteSBicmFpbiBpbW1lZGlhdGVseSBqdW1wcyB0byBgUkRTX1JETUFgLiBUaGUgYGliLmNgIGZpbGUgbmFtZSBpcyBhIGRlYWQgZ2l2ZWF3YXksIGdpdmVuICYjMzQ7aWImIzM0OyBpbXBsaWVzIEluZmluaUJhbmQsIGEgY29tbW9uIFJETUEgdHJhbnNwb3J0LiBJdCYjMzk7cyBsaWtlbHkgdGhlIHBhdGNoIGRlYWxzIHdpdGggdGhlIFJETUEgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gd2l0aGluIFJEUy4gVG8gY29uZmlybSB0aGlzIGFzc29jaWF0aW9uLCBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgdGhlIGBuZXQvcmRzL01ha2VmaWxlYC4gVGhhdCYjMzk7bGwgaGVscCBtZSB1bmRlcnN0YW5kIGhvdyBgaWIuY2AgaXMgY29tcGlsZWQgaW50byB0aGUgUkRTIG1vZHVsZSwgZ2l2aW5nIG1lIHRoZSBmaW5hbCBwaWVjZSBvZiBjb25maXJtYXRpb24gSSBuZWVkIGFib3V0IGl0cyBkaXJlY3QgYXNzb2NpYXRpb24gd2l0aCBgUkRTX1JETUFgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDEwOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2liXFwubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9yZHMvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3Jkcy9NYWtlZmlsZT04PXJkc19yZG1hLXkgOj1cdHJkbWFfdHJhbnNwb3J0Lm8gXFxcbm5ldC9yZHMvTWFrZWZpbGU6OTpcdFx0XHRpYi5vIGliX2NtLm8gaWJfcmVjdi5vIGliX3JpbmcubyBpYl9zZW5kLm8gaWJfc3RhdHMubyBcXFxubmV0L3Jkcy9NYWtlZmlsZS0xMC1cdFx0XHRpYl9zeXNjdGwubyBpYl9yZG1hLm8gaWJfZnJtci5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTA6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTc0MwoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6CgoqKkRlbHZpbmcgaW50byB0aGUgUkRTX1JETUEgQnVpbGQgUHJvY2VzcyoqCgpSaWdodCwgc28gYGliLm9gIGlzIGRlZmluaXRlbHkgcGFydCBvZiB0aGUgYHJkc19yZG1hLXlgIG1vZHVsZSwgYW5kIHRoYXQgbW9kdWxlIGlzICpzcGVjaWZpY2FsbHkqIGNvbXBpbGVkIHdoZW4gYENPTkZJR19SRFNfUkRNQWAgaXMgZW5hYmxlZC4gTWFrZXMgc2Vuc2UuIFRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY3kgY2hhaW4sIGFuZCB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCBpdCYjMzk7cyBidWlsdCwgSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBgbmV0L3Jkcy9LY29uZmlnYCBmaWxlLiBUaGF0JiMzOTtzIHdoZXJlIGFsbCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGF0IHBhcnQgb2YgdGhlIG5ldHdvcmtpbmcgc3RhY2sgYXJlIGRlZmluZWQsIGluY2x1ZGluZyB0aGUgZGVwZW5kZW5jaWVzIG9mIGBSRFNfUkRNQWAuIEkgbmVlZCB0byBmaWd1cmUgb3V0ICpleGFjdGx5KiB3aGF0IHRyaWdnZXJzIHRoYXQgZmxhZywgYW5kIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgdW5kZXJseWluZyByZXF1aXJlbWVudHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTA6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFJEU19SRE1BJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3Jkcy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9yZHMvS2NvbmZpZz0zPWNvbmZpZyBSRFNcbi0tXG5uZXQvcmRzL0tjb25maWctOS1cbm5ldC9yZHMvS2NvbmZpZzoxMDpjb25maWcgUkRTX1JETUFcbm5ldC9yZHMvS2NvbmZpZy0xMS1cdHRyaXN0YXRlIFwmIzM0O1JEUyBvdmVyIEluZmluaWJhbmRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxMDo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MDY1CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgUkRTIEtjb25maWcqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgc29tZXRoaW5nIGFib3V0IHRoZSBSRFMgY29uZmlndXJhdGlvbi4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgYG5ldC9yZHMvS2NvbmZpZ2AsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAxMC4gVGhhdCYjMzk7cyB1c3VhbGx5IHdoZXJlIHRoZSB0b3AtbGV2ZWwgb3B0aW9ucywgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eSB0b2dnbGVzLCBhbmQgbWF5YmUgdGhlIG92ZXJhbGwgUkRTIGFyY2hpdGVjdHVyZSBhcmUgZGVmaW5lZC4gSSBleHBlY3QgdG8gZmluZCB0aGUgZnVuZGFtZW50YWwga25vYnMgYW5kIGxldmVycyBjb250cm9sbGluZyB0aGUgUmVtb3RlIERpcmVjdCBNZW1vcnkgQWNjZXNzIChSRE1BKSBvdmVyIFRDUC9JUCBzdGFjayBpbiB0aGF0IGFyZWEuIEkmIzM5O20gaG9waW5nIHRvIHF1aWNrbHkgZ3Jhc3AgdGhlIGNvcmUgZGVwZW5kZW5jaWVzIGFuZCBhbnkgbWFqb3IgZmVhdHVyZSBmbGFncy4gTGluZSAxMCBzaG91bGQgb2ZmZXIgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciB0aGF0LiBUaGlzIGlzIHRoZSBiZWRyb2NrIG9mIHVuZGVyc3RhbmRpbmcgaG93IGV2ZXJ5dGhpbmcgaXMgcHV0IHRvZ2V0aGVyLCBmcm9tIHRoZSB2ZXJ5IGNvcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDEwOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3Jkcy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0XG4gICAzOlx0Y29uZmlnIFJEU1xuICAgNDpcdFx0dHJpc3RhdGUgXCYjMzQ7VGhlIFJlbGlhYmxlIERhdGFncmFtIFNvY2tldHMgUHJvdG9jb2xcJiMzNDtcbiAgIDU6XHRcdGRlcGVuZHMgb24gSU5FVFxuICAgNjpcdFx0aGVscFxuICAgNzpcdFx0ICBUaGUgUkRTIChSZWxpYWJsZSBEYXRhZ3JhbSBTb2NrZXRzKSBwcm90b2NvbCBwcm92aWRlcyByZWxpYWJsZSxcbiAgIDg6XHRcdCAgc2VxdWVuY2VkIGRlbGl2ZXJ5IG9mIGRhdGFncmFtcyBvdmVyIEluZmluaWJhbmQgb3IgVENQLlxuICAgOTpcdFxuICAxMDpcdGNvbmZpZyBSRFNfUkRNQVxuICAxMTpcdFx0dHJpc3RhdGUgXCYjMzQ7UkRTIG92ZXIgSW5maW5pYmFuZFwmIzM0O1xuICAxMjpcdFx0ZGVwZW5kcyBvbiBSRFMgXHUwMDI2XHUwMDI2IElORklOSUJBTkQgXHUwMDI2XHUwMDI2IElORklOSUJBTkRfQUREUl9UUkFOU1xuICAxMzpcdFx0aGVscFxuICAxNDpcdFx0ICBBbGxvdyBSRFMgdG8gdXNlIEluZmluaWJhbmQgYXMgYSB0cmFuc3BvcnQuXG4gIDE1Olx0XHQgIFRoaXMgdHJhbnNwb3J0IHN1cHBvcnRzIFJETUEgb3BlcmF0aW9ucy5cbiAgMTY6XHRcbiAgMTc6XHRjb25maWcgUkRTX1RDUFxuICAxODpcdFx0dHJpc3RhdGUgXCYjMzQ7UkRTIG92ZXIgVENQXCYjMzQ7XG4gIDE5Olx0XHRkZXBlbmRzIG9uIFJEU1xuICAyMDpcdFx0ZGVwZW5kcyBvbiBJUFY2IHx8ICFJUFY2XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDEwOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY1NDEKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgdGhlIERlcGVuZGVuY2llcyBvZiBSRFNfUkRNQSoqCgpPa2F5LCBzbyBgUkRTX1JETUFgIGhhcyBzb21lIGtleSBkZXBlbmRlbmNpZXMuIEkgc2VlIGl0IHJlbGllcyBvbiBgUkRTYCwgYElORklOSUJBTkRgLCBhbmQgYElORklOSUJBTkRfQUREUl9UUkFOU2AuIENsZWFybHksIHVuZGVyc3RhbmRpbmcgaG93IHRob3NlIHBpZWNlcyBmaXQgaXMgY3J1Y2lhbCB0byB0aGlzLiBUbyBnZXQgYSBiZXR0ZXIgZ3Jhc3Agb24gdGhlc2UgZGVwZW5kZW5jaWVzIGFuZCBob3cgdGhleSYjMzk7cmUgY29uZmlndXJlZCwgdGhlIGxvZ2ljYWwgbmV4dCBzdGVwIGlzIHRvIGRpdmUgaW50byB0aGUgS2NvbmZpZyBmaWxlcy4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gY2hlY2sgb3V0IGBkcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZ2AgdG8gc2VlIHRoZSBkZWZpbml0aW9ucyBhbmQgcmVsYXRpb25zaGlwcyBvZiBgSU5GSU5JQkFORGAgYW5kIGBJTkZJTklCQU5EX0FERFJfVFJBTlNgLiBUaGlzIHdpbGwgdGVsbCBtZSBob3cgdGhleSBhcmUgc2V0IHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxMDo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSU5GSU5JQkFORCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZzoyOm1lbnVjb25maWcgSU5GSU5JQkFORFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O0luZmluaUJhbmQgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnPTE2PWlmIElORklOSUJBTkRcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTE3LVxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWc6MTg6Y29uZmlnIElORklOSUJBTkRfVVNFUl9NQURcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTE5LVx0dHJpc3RhdGUgXCYjMzQ7SW5maW5pQmFuZCB1c2Vyc3BhY2UgTUFEIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy0yNy1cbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnOjI4OmNvbmZpZyBJTkZJTklCQU5EX1VTRVJfQUNDRVNTXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy0yOS1cdHRyaXN0YXRlIFwmIzM0O0luZmluaUJhbmQgdXNlcnNwYWNlIGFjY2VzcyAodmVyYnMgYW5kIENNKVwmIzM0O1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTM5LVxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWc6NDA6Y29uZmlnIElORklOSUJBTkRfVVNFUl9BQ0NFU1NfQ09SRVxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctNDEtXHRib29sXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctNDMtXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZzo0NDpjb25maWcgSU5GSU5JQkFORF9VU0VSX01FTVxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctNDUtXHRib29sXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctNTAtXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZzo1MTpjb25maWcgSU5GSU5JQkFORF9PTl9ERU1BTkRfUEFHSU5HXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy01Mi1cdGJvb2wgXCYjMzQ7SW5maW5pQmFuZCBvbi1kZW1hbmQgcGFnaW5nIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy02My1cbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnOjY0OmNvbmZpZyBJTkZJTklCQU5EX0FERFJfVFJBTlNcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTY1LVx0Ym9vbCBcJiMzNDtSRE1BL0NNXCYjMzQ7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctNzEtXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZzo3Mjpjb25maWcgSU5GSU5JQkFORF9BRERSX1RSQU5TX0NPTkZJR0ZTXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy03My1cdGJvb2xcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy04MC1cbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnOjgxOmNvbmZpZyBJTkZJTklCQU5EX1ZJUlRfRE1BXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy04Mi1cdGRlZl9ib29sICFISUdITUVNXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDEwOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDczNTgKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgUkRTIFJETUEgRnVuY3Rpb25zKioKCk9rYXksIHNvIHdlJiMzOTtyZSBkaXZpbmcgaW50byB0aGUgUmVtb3RlIERpcmVjdCBNZW1vcnkgQWNjZXNzIChSRE1BKSBhc3BlY3RzIG9mIHRoZSBSZWxpYWJsZSBEYXRhZ3JhbSBTb2NrZXRzIChSRFMpIHByb3RvY29sLiBJIG5lZWQgdG8gZm9jdXMgb24gdGhlc2Uga2V5IGNvbXBvbmVudHM6IGBSRFNgLCBgUkRTX1JETUFgLCBgSU5GSU5JQkFORGAsIGFuZCBgSU5GSU5JQkFORF9BRERSX1RSQU5TYC4gSSYjMzk7dmUgZ290IGEgZGVjZW50IGdyYXNwIG9uIHRoaXMsIGJ1dCBsZXQmIzM5O3Mgc2hhcnBlbiBvdXIgZm9jdXMuCgpNeSBwbGFuIGlzIHRvIGhvbWUgaW4gb24gdGhlIGZ1bmN0aW9ucyB0aGF0IGRpcmVjdGx5IGhhbmRsZSB0aGUgUkRNQSBvcGVyYXRpb25zLiBNeSBpbml0aWFsIGxpc3QgaW5jbHVkZXMgYHJkc19tZXNzYWdlX3B1dGAsIGByZHNfc2VuZF94bWl0YCwgYHJkc19jbXNnX3JkbWFfYXJnc2AsIGByZHNfcmRtYV9mcmVlX29wYCwgYHJkc19hdG9taWNfZnJlZV9vcGAsIGBfX3Jkc19yZG1hX21hcGAsIGFuZCBgX19yZHNfcHV0X21yX2ZpbmFsYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGVzZSBhcmUgdGhlIGNvcnJlY3QgZnVuY3Rpb25zIHRvIGJlIGZvY3VzaW5nIG9uLgoKTm93LCB0byBzZWUgaWYgdGhleSYjMzk7cmUgcmVsZXZhbnQsIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCB0aGVzZSBmdW5jdGlvbnMgYXJlIGV4cG9ydGVkLiBXZSBkb24mIzM5O3Qgd2FudCB0byBnZXQgZGlzdHJhY3RlZCBieSBzdGF0aWMsIGlubGluZWQgZnVuY3Rpb25zLiBCYXNlZCBvbiB0aGUgaW5mb3JtYXRpb24gYXZhaWxhYmxlLCBJIGNhbiBjb25maXJtIHRoYXQgYHJkc19tZXNzYWdlX3B1dGAsIGByZHNfc2VuZF94bWl0YCwgYHJkc19jbXNnX3JkbWFfYXJnc2AsIGByZHNfcmRtYV9mcmVlX29wYCwgYW5kIGByZHNfYXRvbWljX2ZyZWVfb3BgIGFyZSBhbGwgbm9uLXN0YXRpYywgc28gd2UmIzM5O3JlIGdvb2QgdGhlcmUuIGBfX3Jkc19yZG1hX21hcGAgaXMgc3RhdGljLCBzbyBJIG5lZWQgdG8gZGlnIGZ1cnRoZXIgdG8gc2VlIGlmIGl0IGlzIGlubGluZWQgLSBpZiBpdCBpcyBpbmxpbmVkLCBpdCB3b24mIzM5O3QgYmUgb24gdGhlIGxpc3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDEwOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0YXRpYyBpbnQgX19yZHNfcmRtYV9tYXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvcmRzL3JkbWEuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvcmRzL3JkbWEuYz0xNTU9c3RhdGljIGludCByZHNfcGluX3BhZ2VzKHVuc2lnbmVkIGxvbmcgdXNlcl9hZGRyLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMsXG4tLVxubmV0L3Jkcy9yZG1hLmMtMTcyLVxubmV0L3Jkcy9yZG1hLmM6MTczOnN0YXRpYyBpbnQgX19yZHNfcmRtYV9tYXAoc3RydWN0IHJkc19zb2NrICpycywgc3RydWN0IHJkc19nZXRfbXJfYXJncyAqYXJncyxcbm5ldC9yZHMvcmRtYS5jLTE3NC1cdFx0XHQgIHU2NCAqY29va2llX3JldCwgc3RydWN0IHJkc19tciAqKm1yX3JldCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTA6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODEyMwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRoZSBleHBlcnQ6CgoqKkludmVzdGlnYXRpbmcgUkRNQSBNZW1vcnkgUmVnaW9uIE1hbmFnZW1lbnQgaW4gUkRTKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgUkRTIGhhbmRsZXMgaXRzIFJETUEgbWVtb3J5IHJlZ2lvbnMuIFRoZSBmdW5jdGlvbiBgX19yZHNfcmRtYV9tYXBgIGlzIHN0YXRpYywgbWVhbmluZyBpdCYjMzk7cyBvbmx5IHZpc2libGUgd2l0aGluIGl0cyBjb21waWxhdGlvbiB1bml0LiBJdCYjMzk7cyBpbnZva2VkIGJ5IGByZHNfZ2V0X21yYCBhbmQgYHJkc19nZXRfbXJfZm9yX2Rlc3RgLCB3aGljaCBtYWtlcyBzZW5zZTsgdGhlc2UgZnVuY3Rpb25zIGFyZSBsaWtlbHkgcmVzcG9uc2libGUgZm9yIGFjcXVpcmluZyBhbmQgY29uZmlndXJpbmcgdGhlIG1lbW9yeSByZWdpb25zIGZvciBSRE1BIG9wZXJhdGlvbnMuIE5vdywgYF9fcmRzX3B1dF9tcl9maW5hbGAgaXMgKm5vdCogc3RhdGljLCB3aGljaCBzdWdnZXN0cyBpdCBtaWdodCBiZSB1c2VkIG1vcmUgYnJvYWRseSwgcGVyaGFwcyBmb3IgcmVsZWFzaW5nIHRoZSBtZW1vcnkgcmVnaW9ucyB3aGVuIGEgbWVzc2FnZSBpcyBjb21wbGV0ZWQuCgpTaW5jZSBJJiMzOTttIHRyeWluZyB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIGxpZmVjeWNsZSBoZXJlLCBJIHRoaW5rIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkZWx2ZSBpbnRvIGhvdyBSRFMgbWFuYWdlcyB0aGUgbWVzc2FnZSBpdHNlbGYuIExldCYjMzk7cyBzZWUgaG93IGByZHNfbWVzc2FnZV9wdXRgIGZpdHMgaW50byB0aGlzIHBpY3R1cmUuIEkmIzM5O20gaG9waW5nIHRvIHNlZSBob3cgdGhlIG1lbW9yeSByZWdpb24gbWFwcGluZyBhbmQgdW5tYXBwaW5nIHRpZXMgaW50byB0aGUgbWVzc2FnZSYjMzk7cyBsaWZlIGN5Y2xlLiBUaGlzIHdpbGwgcHJvYmFibHkgaW52b2x2ZSBpbnNwZWN0aW5nIGhvdyBtZXNzYWdlIGJ1ZmZlcnMgYXJlIGZyZWVkIGFmdGVyIHRyYW5zbWlzc2lvbiBvciByZWNlcHRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDEwOjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZvaWQgcmRzX21lc3NhZ2VfcHV0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3Jkcy9tZXNzYWdlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3Jkcy9tZXNzYWdlLmM9MjAwPXN0YXRpYyBib29sIHJkc19tZXNzYWdlX2RpcnRpZXNfcGFnZXMoc3RydWN0IHJkc19tZXNzYWdlICpybSlcbi0tXG5uZXQvcmRzL21lc3NhZ2UuYy0yMDctXG5uZXQvcmRzL21lc3NhZ2UuYzoyMDg6dm9pZCByZHNfbWVzc2FnZV9wdXQoc3RydWN0IHJkc19tZXNzYWdlICpybSlcbm5ldC9yZHMvbWVzc2FnZS5jLTIwOS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDEwOjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg1NTgKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBhbiBleHBlcnQgaW4gdGhpcyBmaWVsZCwgcHJlc2VudGVkIGFzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnk6CgoqKkRpZ2dpbmcgaW50byBgcmRzX3NlbmRfeG1pdGAqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgdG8gdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIuIE15IGluaXRpYWwgdGhvdWdodCBpcyBjbGVhcjogbGV0JiMzOTtzIHN0YXJ0IHdpdGggYHJkc19zZW5kX3htaXRgLiBHaXZlbiBteSBleHBlcmllbmNlLCBJIGtub3cgdGhpcyBmdW5jdGlvbiBpcyBsaWtlbHkgcGl2b3RhbC4gSXQmIzM5O3MgdGhlIHBvaW50IHdoZXJlIGRhdGEgdHJhbnNtaXNzaW9uIHByb2JhYmx5IGdldHMgaW5pdGlhdGVkIHdpdGhpbiB0aGUgUmVtb3RlIERpcmVjdCBNZW1vcnkgQWNjZXNzIG92ZXIgU29ja2V0cyAoUkRNQW9TKSBzdGFjay4gVW5kZXJzdGFuZGluZyB3aGF0JiMzOTtzIGhhcHBlbmluZyB0aGVyZSBpcyBjcnVjaWFsIHRvIHRyb3VibGVzaG9vdCBhbnkgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MsIHBpbnBvaW50IHBvdGVudGlhbCBidWdzLCBvciBvcHRpbWl6ZSB0aGUgc2VuZCBwYXRoLiBJdCYjMzk7cyB0aGUgbW9zdCBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IGZvciBkaXNzZWN0aW5nIHRoZSBkYXRhIGZsb3cuIE15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhhdCBpdCBsaWtlbHkgY29udGFpbnMgaW50ZXJhY3Rpb25zIHdpdGggdGhlIG5ldHdvcmsgaW50ZXJmYWNlIGNhcmQgKE5JQykgZHJpdmVycywgUkRNQSB2ZXJicywgYW5kIHRoZSBzb2NrZXQgbGF5ZXIgLSBhbGwgdGhpbmdzIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGFuZCBjb25zaWRlcmluZyBpbiBteSBhbmFseXNpcy4gSXQmIzM5O3MgdGltZSB0byBkaXZlIGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxMDo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbnQgcmRzX3NlbmRfeG1pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9yZHMvc2VuZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9yZHMvc2VuZC5jPTEyOD1zdGF0aWMgYm9vbCByZHNfbXByZHNfY3AwX2NhdGNodXAoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKVxuLS1cbm5ldC9yZHMvc2VuZC5jLTE4Ni0gKi9cbm5ldC9yZHMvc2VuZC5jOjE4NzppbnQgcmRzX3NlbmRfeG1pdChzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3ApXG5uZXQvcmRzL3NlbmQuYy0xODgte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxMDo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4OTE5CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKlJEUyBDTVNHIFJETUEgQXJndW1lbnRzIC0gQ2hlY2tpbmcgTXkgQXNzdW1wdGlvbnMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJJiMzOTttIHRha2luZyBhIGxvb2sgYXQgYHJkc19jbXNnX3JkbWFfYXJnc2Ag4oCTIHRoaXMgaXMgYSBjcnVjaWFsIHN0cnVjdHVyZSwgYW5kIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7dmUgZ290IGEgc29saWQgZ3Jhc3Agb24gaG93IGl0IGZ1bmN0aW9ucy4gSXQmIzM5O3MgdGhlIGx5bmNocGluIGZvciBSRE1BIG9wZXJhdGlvbnMgd2l0aGluIHRoZSBSRFMgY29udGV4dCwgc28gYW55IGdhcHMgaW4gbXkgdW5kZXJzdGFuZGluZyBoZXJlIGNvdWxkIGxlYWQgdG8gc2lnbmlmaWNhbnQgcHJvYmxlbXMgZG93biB0aGUgbGluZS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IGFuZCB2ZXJpZnkgdGhhdCBJIGFtIGNsZWFyIG9uIGl0cyBwdXJwb3NlLCB1c2FnZSwgYW5kIGFueSBwb3RlbnRpYWwgY29ybmVyIGNhc2VzIGFzc29jaWF0ZWQgd2l0aCBpdC4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gcmVtaW5kIG15c2VsZiBob3cgaXQmIzM5O3MgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGRpZmZlcmVudCBSRE1BIHZlcmJzLiBUaW1lIHRvIGRpZyBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTA6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW50IHJkc19jbXNnX3JkbWFfYXJncyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9yZHMvcmRtYS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9yZHMvcmRtYS5jPTU2Mz1pbnQgcmRzX3JkbWFfZXh0cmFfc2l6ZShzdHJ1Y3QgcmRzX3JkbWFfYXJncyAqYXJncyxcbi0tXG5uZXQvcmRzL3JkbWEuYy02MTQtICovXG5uZXQvcmRzL3JkbWEuYzo2MTU6aW50IHJkc19jbXNnX3JkbWFfYXJncyhzdHJ1Y3QgcmRzX3NvY2sgKnJzLCBzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtLFxubmV0L3Jkcy9yZG1hLmMtNjE2LVx0XHQgICAgICAgc3RydWN0IGNtc2doZHIgKmNtc2csXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDEwOjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkyNzgKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkmIzM5O3JlIG15IG93bjoKCioqQW5hbHl6aW5nIHRoZSBgcmRzX3JkbWFfZnJlZV9vcGAgRnVuY3Rpb24qKgoKUmlnaHQsIGxldCYjMzk7cyBzdGFydCB3aXRoIGByZHNfcmRtYV9mcmVlX29wYC4gVGltZSB0byByZWZyZXNoIG15IG1lbW9yeSBhbmQgZGlzc2VjdCB0aGlzIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiB0aGUgb3ZlcmFsbCBSRE1BIGRhdGEgZmxvdyB3aXRoaW4gdGhlIFJEUyBwcm90b2NvbC4gU3BlY2lmaWNhbGx5LCB3aGF0JiMzOTtzIGl0cyBwdXJwb3NlPyBJcyBpdCBmcmVlaW5nIHJlc291cmNlcywgc2lnbmFsaW5nIGNvbXBsZXRpb24sIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBJIHNob3VsZCBjaGVjayBpdHMgdXNhZ2UgYW5kIGNyb3NzLXJlZmVyZW5jZSBpdCB3aXRoIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGdldCB0aGUgY29tcGxldGUgcGljdHVyZS4gVGhlIGtleSBpcyB0byB1bmRlcnN0YW5kIGhvdyB0aGUgUkRTIHN0YWNrIGhhbmRsZXMgUkRNQSBvcGVyYXRpb25zIGFuZCBob3cgdGhpcyBmdW5jdGlvbiBmaXRzIGludG8gdGhhdCBwdXp6bGUuIExldCBtZSBhbmFseXplIGl0cyBpbnB1dHMgYW5kIG91dHB1dHMuIEFueSBwb3RlbnRpYWwgcGl0ZmFsbHMgb3Igb3B0aW1pemF0aW9ucyB3aWxsIGVtZXJnZSBhcyBJIGRlbHZlIGludG8gdGhlIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDEwOjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZvaWQgcmRzX3JkbWFfZnJlZV9vcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9yZHMvcmRtYS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9yZHMvcmRtYS5jPTQ0Nj12b2lkIHJkc19yZG1hX3VudXNlKHN0cnVjdCByZHNfc29jayAqcnMsIHUzMiByX2tleSwgaW50IGZvcmNlKVxuLS1cbm5ldC9yZHMvcmRtYS5jLTQ5MC1cbm5ldC9yZHMvcmRtYS5jOjQ5MTp2b2lkIHJkc19yZG1hX2ZyZWVfb3Aoc3RydWN0IHJtX3JkbWFfb3AgKnJvKVxubmV0L3Jkcy9yZG1hLmMtNDkyLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTA6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTYyMwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJiMzOTttIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydDoKCioqRGl2aW5nIGludG8gYHJkc19hdG9taWNfZnJlZV9vcGAqKgoKQWxyaWdodCwgdGltZSB0byBkaWcgaW50byB0aGlzIGByZHNfYXRvbWljX2ZyZWVfb3BgIGZ1bmN0aW9uLiBJdCYjMzk7cyBhIGNyaXRpY2FsIHBpZWNlLCBhbmQgSSB3YW50IHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBpdHMgcm9sZSB3aXRoaW4gdGhlIGxhcmdlciBSRFMgYXJjaGl0ZWN0dXJlLiBJIG5lZWQgdG8gcXVpY2tseSByZWNhbGwgZXhhY3RseSBob3cgaXQmIzM5O3MgdXNlZCwgZXNwZWNpYWxseSBpbiByZWxhdGlvbiB0byBtZW1vcnkgbWFuYWdlbWVudCBhbmQgYXRvbWljaXR5LiBJIHdhbnQgdG8gc2VlIGlmIGFueXRoaW5nIGp1bXBzIG91dCB0aGF0JiMzOTtzIHdvcnRoIHJlY29uc2lkZXJpbmcuIEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGlzc3Vlcywgb3Igb3Bwb3J0dW5pdGllcyBmb3Igb3B0aW1pemF0aW9uIGluIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgdW5kZXJseWluZyBhdG9taWMgcHJpbWl0aXZlcz8gTmVlZCB0byByZS1mYW1pbGlhcml6ZSBteXNlbGYgd2l0aCB0aGUgc3Vycm91bmRpbmcgY29kZS4gUGVyaGFwcyBJJiMzOTtsbCB0cmFjZSBpdHMgY2FsbCBzaXRlcyB0byByZWNvbnN0cnVjdCB0aGUgZmxvdyBmcm9tIG1lbW9yeSBhbGxvY2F0aW9uIHRvIGRlYWxsb2NhdGlvbi4gSXQmIzM5O3MgYWxsIGFib3V0IGVuc3VyaW5nIHRoYXQgdGhpcyBjcml0aWNhbCBwaWVjZSBpcyB1cCB0byB0aGUgc3RhbmRhcmRzIHRoYXQgSSYjMzk7ZCBleHBlY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDEwOjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZvaWQgcmRzX2F0b21pY19mcmVlX29wJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3Jkcy9yZG1hLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3Jkcy9yZG1hLmM9NDkxPXZvaWQgcmRzX3JkbWFfZnJlZV9vcChzdHJ1Y3Qgcm1fcmRtYV9vcCAqcm8pXG4tLVxubmV0L3Jkcy9yZG1hLmMtNTE2LVxubmV0L3Jkcy9yZG1hLmM6NTE3OnZvaWQgcmRzX2F0b21pY19mcmVlX29wKHN0cnVjdCBybV9hdG9taWNfb3AgKmFvKVxubmV0L3Jkcy9yZG1hLmMtNTE4LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTA6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTk3NgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipDaGVja2luZyBgX19yZHNfcHV0X21yX2ZpbmFsYCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSByaWdodCBpbi4gVGhlIGNvZGUgaGFzIGRpcmVjdGVkIG1lIHRvIHNjcnV0aW5pemUgdGhlIGBfX3Jkc19wdXRfbXJfZmluYWxgIGZ1bmN0aW9uLiBHaXZlbiBteSB1bmRlcnN0YW5kaW5nIG9mIFJETUEgKFJlbW90ZSBEaXJlY3QgTWVtb3J5IEFjY2VzcykgYW5kIGhvdyBpdCYjMzk7cyBpbXBsZW1lbnRlZCBpbiB0aGlzIGNvbnRleHQsIEkgaW1tZWRpYXRlbHkgc3RhcnQgdG8gY29uc2lkZXIgd2hhdCBpdHMgc3BlY2lmaWMgcm9sZSBpcy4gTXkgZXhwZXJ0aXNlIHN1Z2dlc3RzIHRoaXMgZnVuY3Rpb24gaXMgbGlrZWx5IGEgY3J1Y2lhbCBwYXJ0IG9mIHRoZSBtZW1vcnkgcmVnaW9uIChNUikgbGlmZWN5Y2xlIG1hbmFnZW1lbnQgd2l0aGluIHRoZSBSRFMgKFJlbGlhYmxlIERhdGFncmFtIFNvY2tldHMpIHByb3RvY29sLiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIGZ1bmN0aW9uIGRlYWxzIHdpdGggdGhlIGZpbmFsIHN0YWdlcyBvZiBtZW1vcnkgcmVnaXN0cmF0aW9uIG9yIHVucmVnaXN0cmF0aW9uIGFuZCBwb3RlbnRpYWxseSByZWxlYXNlcyByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIGEgbWVtb3J5IHJlZ2lvbi4gSSYjMzk7bGwgbmVlZCB0byBsb29rIGNsb3NlbHkgYXQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlLCBhbnkgcmVsYXRlZCBkYXRhIHN0cnVjdHVyZXMsIGFuZCB0aGUgb3ZlcmFsbCBSRFMgZGF0YSBmbG93IHRvIGNvbmZpcm0gbXkgaW5pdGlhbCBoeXBvdGhlc2lzIGFuZCBmdWxseSB1bmRlcnN0YW5kIGl0cyBwdXJwb3NlIGFuZCBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MuIEkgYWxzbyB3YW50IHRvIHNlZSB3aGVyZSBpdCBpcyBjYWxsZWQgYW5kIHdoZW4uIEFyZSB0aGVyZSBhbnkgZXJyb3IgcGF0aHMgdGhhdCBzaG91bGQgYmUgY29uc2lkZXJlZD8gTGV0JiMzOTtzIGdldCB0byB3b3JrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxMDo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2b2lkIF9fcmRzX3B1dF9tcl9maW5hbCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9yZHMvcmRtYS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9yZHMvcmRtYS5jPTk1PXN0YXRpYyB2b2lkIHJkc19kZXN0cm95X21yKHN0cnVjdCByZHNfbXIgKm1yKVxuLS1cbm5ldC9yZHMvcmRtYS5jLTExNC1cbm5ldC9yZHMvcmRtYS5jOjExNTp2b2lkIF9fcmRzX3B1dF9tcl9maW5hbChzdHJ1Y3Qga3JlZiAqa3JlZilcbm5ldC9yZHMvcmRtYS5jLTExNi17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDEwOjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMzQ5CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgS2VybmVsIFBhdGNoOiBSRFMgYW5kIFJETUEgRml4ZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBJIHNlZSB0aGF0IHRoZXNlIGFyZSAqYWxsKiBub24tc3RhdGljIGZ1bmN0aW9ucywgbWVhbmluZyB0aGV5JiMzOTtyZSBkaXJlY3RseSBpbXBhY3RlZCBieSB0aGUgY2hhbmdlcy4gTXkgZm9jdXMgaXMgc2hhcnBlbmVkIGJlY2F1c2UgdGhpcyBwYXRjaCBpcyBhZGRyZXNzaW5nIGEgcHJldHR5IG5hc3R5IGJ1ZzogYHJkc19tZXNzYWdlX3B1dGAgcG90ZW50aWFsbHkgc2xlZXBpbmcgaW4gYW4gYXRvbWljIGNvbnRleHQgd2hlbiBkaXJ0eWluZyBwYWdlcy4gVGhhdCYjMzk7cyBhIGNsYXNzaWMgcmFjZSBjb25kaXRpb24gc2NlbmFyaW8gYW5kIGEgZGVmaW5pdGUgbm8tbm8uIFRoZSBmaXgsIGFzIEkgdW5kZXJzdGFuZCBpdCwgaXMgdG8gZGVmZXIgdGhhdCBwdXJnZSBvcGVyYXRpb24gdG8gYSB3b3JrcXVldWUuIFNtYXJ0LgoKVGhlbiwgSSYjMzk7bSBub3RpY2luZyBhIGNsdXN0ZXIgb2YgZml4ZXMgcmVsYXRlZCB0byByZWZlcmVuY2UgY291bnRpbmcsIHNwZWNpZmljYWxseSB3aXRoIGBzb2NrX2hvbGRgIGFuZCBgc29ja19wdXRgLiBUaGVzZSBhcmUgaW4gYF9fcmRzX3JkbWFfbWFwYCwgYF9fcmRzX3B1dF9tcl9maW5hbGAsIGFuZCBgcmRzX2Ntc2dfcmRtYV9hcmdzYCwgc28gaXQgc2VlbXMgdGhpcyBwYXRjaCBpcyBtYWtpbmcgc29tZSBuZWNlc3NhcnkgY29ycmVjdGlvbnMgaGVyZS4gQW5kIGxldCYjMzk7cyBub3QgZm9yZ2V0IHRoZSBidWcgaW4gYHJkc19zZW5kX3htaXRgIHdoZXJlIGEgcmVmZXJlbmNlIHdhcyBiZWluZyBkcm9wcGVkIGluY29ycmVjdGx5LiBHb3R0YSBiZSB0aG9yb3VnaCB3aXRoIHRoYXQgb25lLgoKTm93LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gdGhlIGNvbmZpZ3VyYXRpb25zLiBUbyBlbmFibGUgYWxsIHRoaXMsIEkgc2VlIHRoYXQgSSBuZWVkIGBSRFNgLCBgUkRTX1JETUFgLCBgSU5GSU5JQkFORGAsIGFuZCBgSU5GSU5JQkFORF9BRERSX1RSQU5TYC4gV2FpdCwgaG9sZCBvbi4gYFJEU19SRE1BYCBkZXBlbmRzIG9uIGBJTkZJTklCQU5EYCBhbmQgYElORklOSUJBTkRfQUREUl9UUkFOU2AsIHdoaWNoIG1ha2VzIHNlbnNlLiBJIGJldHRlciBkb3VibGUgY2hlY2sgdGhlIGRlcGVuZGVuY2llcy4gRmlyc3QsIEkgc2VlIHRoYXQgYFJEU2AgZGVwZW5kcyBvbiBgSU5FVGAuIE9rYXksIHN0YW5kYXJkIGZvciBuZXR3b3JrLXJlbGF0ZWQgY29kZS4gQXJlIHRoZXJlIGFueSBvdGhlciBkZXBlbmRlbmNpZXMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mPyBZZXMsIGBJTkZJTklCQU5EX0FERFJfVFJBTlNgIGRlcGVuZHMgb24gYElORklOSUJBTkRgLiBMZXQmIzM5O3MgY29uZmlybSB0aGF0IGJ5IGNoZWNraW5nIGBJTkZJTklCQU5EX0FERFJfVFJBTlNgIGluIGBkcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZ2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDEwOjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJTkZJTklCQU5EX0FERFJfVFJBTlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZz01MT1jb25maWcgSU5GSU5JQkFORF9PTl9ERU1BTkRfUEFHSU5HXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctNjMtXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZzo2NDpjb25maWcgSU5GSU5JQkFORF9BRERSX1RSQU5TXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy02NS1cdGJvb2wgXCYjMzQ7UkRNQS9DTVwmIzM0O1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTcxLVxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWc6NzI6Y29uZmlnIElORklOSUJBTkRfQUREUl9UUkFOU19DT05GSUdGU1xuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctNzMtXHRib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDEwOjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMTc4CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMzA4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IENvbmZpZ3VyYXRpb24gQW5hbHlzaXMqKgoKT2theSwgc28gYElORklOSUJBTkRfQUREUl9UUkFOU2AgaXMgZGVmaW5lZCBhcyBhIGJvb2xlYW4sIGdvb2QuIE5vdywgbGV0JiMzOTtzIHNlZSB3aGF0IGRlcGVuZGVuY2llcyBleGlzdCBmb3IgYFJEU19SRE1BYC4gQWgsIGl0IHJlcXVpcmVzIGBSRFNgLCBgSU5GSU5JQkFORGAsIGFuZCwgY3J1Y2lhbGx5LCBgSU5GSU5JQkFORF9BRERSX1RSQU5TYC4gVGhhdCYjMzk7cyBzdHJhaWdodGZvcndhcmQgZW5vdWdoIOKAkyB3ZSBuZWVkIHRvIGVuYWJsZSBhbGwgb2YgdGhvc2UgdG8gZ2V0IGBSRFNfUkRNQWAgd29ya2luZy4KCk5leHQsIEkgbmVlZCB0byBsb29rIGF0IHRoaXMgYHJkc19tZXNzYWdlX3B1cmdlX3dvcmtlcmAgZnVuY3Rpb24gaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoLiBJdCYjMzk7cyBzdGF0aWMsIHNvIGl04oCZcyBub3Qgc29tZXRoaW5nIHdlIGNhbiBkaXJlY3RseSBhZGQgdG8gZm9jdXMgc3ltYm9scywgd2hpY2ggaXMgaW1wb3J0YW50IHRvIGtlZXAgaW4gbWluZC4gU2luY2UgaXQmIzM5O3MgY2FsbGVkIGJ5IHRoZSB3b3JrcXVldWUsIEkgY2FuIHRhcmdldCBgcmRzX21lc3NhZ2VfcHV0YCwgYHJkc19zZW5kX3htaXRgLCBgcmRzX2Ntc2dfcmRtYV9hcmdzYCwgYHJkc19yZG1hX2ZyZWVfb3BgLCBgcmRzX2F0b21pY19mcmVlX29wYCwgYW5kIGBfX3Jkc19wdXRfbXJfZmluYWxgIGluc3RlYWQsIGFuZCB0aGV5IHNob3VsZCBiZSBzdWZmaWNpZW50LgoKTm93LCBhIHF1aWNrIHNhbml0eSBjaGVjayBmb3IgdGVzdGluZy4gQ2FuIHdlIGV2ZW4gdGVzdCBgUkRTYCB3aXRoaW4gYSBRRU1VIGVudmlyb25tZW50PyBZZXMsIGFzIGEgbmV0d29yayBwcm90b2NvbCwgaXQgc2hvdWxkIHdvcmsgZmluZSBvdmVyIGxvb3BiYWNrIG9yIGEgdmlydHVhbCBuZXR3b3JrIGludGVyZmFjZS4gQnV04oCmIHdhaXQgYSBtaW51dGUuIGBSRFNfUkRNQWAgbmVlZHMgSW5maW5pYmFuZC4gQ2FuIHdlIGVtdWxhdGUgSW5maW5pYmFuZCBpbiBRRU1VPyBZZXMsIGBSWEVgIChTb2Z0IFJvQ0UpIHByb3ZpZGVzIGEgc29mdHdhcmUgaW1wbGVtZW50YXRpb24gb2YgUm9DRSBvdmVyIEV0aGVybmV0LiBMZXQmIzM5O3MgbWFrZSBzdXJlIGBSRE1BX1JYRWAgaXMgYWN0dWFsbHkgYXZhaWxhYmxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxMDo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgUkRNQV9SWEUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL0tjb25maWc6Mjpjb25maWcgUkRNQV9SWEVcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7U29mdHdhcmUgUkRNQSBvdmVyIEV0aGVybmV0IChSb0NFKSBkcml2ZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTA6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE5NTUKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipSRE1BX1JYRSBFbmFibGVtZW50IENvbnNpZGVyYXRpb25zKioKCk9rYXksIHNvIEkgc2VlIHRoYXQgYFJETUFfUlhFYCBpcyBpbmRlZWQgYXZhaWxhYmxlIOKAkyBnb29kLiBHaXZlbiB0aGF0IHRoaXMgZW52aXJvbm1lbnQgaXMgdmlydHVhbGl6ZWQsIGVuYWJsaW5nIGBSRE1BX1JYRWAgc2VlbXMgbGlrZSBhIHNlbnNpYmxlIG1vdmUuIEl0JiMzOTtzIHRoZSByaWdodCB0aGluZyB0byBkbyBpZiB3ZSB3YW50IHRvIGVuc3VyZSB3ZSYjMzk7cmUgcHJvcGVybHkgZXhlcmNpc2luZyBhbmQgdmFsaWRhdGluZyB0aGUgUkRNQSBwYXRocyB3aXRoaW4gdGhpcyB2aXJ0dWFsIGNvbnRleHQuIEJlZm9yZSB3ZSBmbGlwIHRoZSBzd2l0Y2gsIGhvd2V2ZXIsIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIGFueSBkZXBlbmRlbmNpZXMgdGhpcyBtaWdodCBpbnRyb2R1Y2UuIExldCYjMzk7cyBkaWcgaW50byB0aG9zZSBkZXBlbmRlbmNpZXMgYW5kIG1ha2Ugc3VyZSB3ZSBhcmVuJiMzOTt0IGNyZWF0aW5nIGFueSB1bmludGVuZGVkIGNvbnNlcXVlbmNlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTA6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRjb25maWcgUkRNQV9SWEVcbiAgIDM6XHRcdHRyaXN0YXRlIFwmIzM0O1NvZnR3YXJlIFJETUEgb3ZlciBFdGhlcm5ldCAoUm9DRSkgZHJpdmVyXCYjMzQ7XG4gICA0Olx0XHRkZXBlbmRzIG9uIElORVQgXHUwMDI2XHUwMDI2IFBDSSBcdTAwMjZcdTAwMjYgSU5GSU5JQkFORCBcdTAwMjZcdTAwMjYgNjRCSVRcbiAgIDU6XHRcdGRlcGVuZHMgb24gSU5GSU5JQkFORF9WSVJUX0RNQVxuICAgNjpcdFx0c2VsZWN0IE5FVF9VRFBfVFVOTkVMXG4gICA3Olx0XHRzZWxlY3QgQ1JDMzJcbiAgIDg6XHRcdGhlbHBcbiAgIDk6XHRcdFRoaXMgZHJpdmVyIGltcGxlbWVudHMgdGhlIEluZmluaUJhbmQgUkRNQSB0cmFuc3BvcnQgb3ZlclxuICAxMDpcdFx0dGhlIExpbnV4IG5ldHdvcmsgc3RhY2suIEl0IGVuYWJsZXMgYSBzeXN0ZW0gd2l0aCBhXG4gIDExOlx0XHRzdGFuZGFyZCBFdGhlcm5ldCBhZGFwdGVyIHRvIGludGVyb3BlcmF0ZSB3aXRoIGEgUm9DRVxuICAxMjpcdFx0YWRhcHRlciBvciB3aXRoIGFub3RoZXIgc3lzdGVtIHJ1bm5pbmcgdGhlIFJYRSBkcml2ZXIuXG4gIDEzOlx0XHREb2N1bWVudGF0aW9uIG9uIEluZmluaUJhbmQgYW5kIFJvQ0UgY2FuIGJlIGRvd25sb2FkZWQgYXRcbiAgMTQ6XHRcdHd3dy5pbmZpbmliYW5kdGEub3JnIGFuZCB3d3cub3BlbmZhYnJpY3Mub3JnLiAoU2VlIGFsc29cbiAgMTU6XHRcdHNpdyB3aGljaCBpcyBhIHNpbWlsYXIgc29mdHdhcmUgZHJpdmVyIGZvciBpV0FSUC4pXG4gIDE2Olx0XG4gIDE3Olx0XHRUaGUgZHJpdmVyIGlzIHNwbGl0IGludG8gdHdvIGxheWVycywgb25lIGludGVyZmFjZXMgd2l0aCB0aGVcbiAgMTg6XHRcdExpbnV4IFJETUEgc3RhY2sgYW5kIGltcGxlbWVudHMgYSBrZXJuZWwgb3IgdXNlciBzcGFjZVxuICAxOTpcdFx0dmVyYnMgQVBJLiBUaGUgdXNlciBzcGFjZSB2ZXJicyBBUEkgcmVxdWlyZXMgYSBzdXBwb3J0XG4gIDIwOlx0XHRsaWJyYXJ5IG5hbWVkIGxpYnJ4ZSB3aGljaCBpcyBsb2FkZWQgYnkgdGhlIGdlbmVyaWMgdXNlclxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxMDo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjUwMAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDg2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQgbWUgYnJlYWsgdGhpcyBkb3duLgoKKipSRE1BIENvbmZpZ3VyYXRpb24gQ29uc2lkZXJhdGlvbnMqKgoKQWxyaWdodCwgSSYjMzk7bSBsb29raW5nIGF0IHRoaXMga2VybmVsIGNvbmZpZ3VyYXRpb24gYW5kIGl0IHNlZW1zIG15IG9wdGlvbnMgZm9yIFJETUEgc3VwcG9ydCBoaW5nZSBvbiBhIGZldyBrZXkgZmFjdG9yczogYElORVRgLCBgUENJYCwgYElORklOSUJBTkRgLCBhbmQgYDY0QklUYC4gQW5kIG9mIGNvdXJzZSwgdGhlIGV2ZXItcHJlc2VudCBgSU5GSU5JQkFORF9WSVJUX0RNQWAgZmxhZyBwbGF5cyBhIGJpZyByb2xlLiBOb3csIHNpbmNlIGBJTkZJTklCQU5EX1ZJUlRfRE1BYCBpcyBkZWZpbmVkIGFzIGEgYm9vbGVhbiB0aGF0JiMzOTtzICpub3QqIGRlcGVuZGVudCBvbiBgSElHSE1FTWAsIHRoYXQgZ2l2ZXMgbWUgc29tZSBsZXZlcmFnZS4gSXQgd291bGQgYmUgc21hcnQgdG8gbWFrZSBzdXJlIGBSRE1BX1JYRWAgaXMgZW5hYmxlZC4gSXQmIzM5O3MgYSBncmVhdCBjaG9pY2UgdG8gaGF2ZSBhIHNvbGlkIHRlc3RhYmxlIGZvdW5kYXRpb24gZm9yIFJETUEuIEFoLCBhbmQgbGV0JiMzOTtzIG5vdCBmb3JnZXQgYWJvdXQgYFNJV2AgKFNvZnR3YXJlIGlXQVJQKSwgdGhhdCYjMzk7cyBhbm90aGVyIGNyaXRpY2FsIGNvbnNpZGVyYXRpb24gaGVyZS4gVGhlc2UgYXJlIHRoZSBwaWVjZXMgb2YgdGhlIHB1enpsZSB0aGF0IGVuc3VyZSByb2J1c3QgUkRNQSBmdW5jdGlvbmFsaXR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxMDo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgUkRNQV9TSVcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2luZmluaWJhbmQvc3cvc2l3L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9pbmZpbmliYW5kL3N3L3Npdy9LY29uZmlnOjE6Y29uZmlnIFJETUFfU0lXXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvc2l3L0tjb25maWctMi1cdHRyaXN0YXRlIFwmIzM0O1NvZnR3YXJlIFJETUEgb3ZlciBUQ1AvSVAgKGlXQVJQKSBkcml2ZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTA6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI4OTQKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKlJETUFfU0lXIERlcGVuZGVuY3kgQ2hlY2sqKgoKT2theSwgc28gSSBuZWVkIHRvIG1lbnRhbGx5IHdhbGsgdGhyb3VnaCB0aGUgZGVwZW5kZW5jaWVzIG9mIGBSRE1BX1NJV2AuIExldCYjMzk7cyBhc3N1bWUgdGhlIHVzZXIgYWxyZWFkeSBrbm93cyB3aGF0IGl0IGlzIGFuZCB3aGF0IGxldmVsIHdlJiMzOTtyZSBvcGVyYXRpbmcgYXQgKGUuZy4sIGtlcm5lbCwgdXNlciBzcGFjZSwgZXRjLikuIFdlJiMzOTtyZSBsaWtlbHkgdGhpbmtpbmcgYWJvdXQgUkRNQSYjMzk7cyBpbXBsaWNhdGlvbnMgb24gdmFyaW91cyBkZXNpZ24gY29uc2lkZXJhdGlvbnMuCgpGaXJzdCwgaXMgdGhpcyByZWxhdGVkIHRvIHVzZXItc3BhY2UgUVAgY3JlYXRpb24/IE9yIGlzIHRoaXMgb24gYSBsb3dlciBsZXZlbCBpbiB0aGUgY29yZSBJQiBzdGFjaz8gSSBuZWVkIHRvIGNsYXJpZnkgdGhlIGxldmVsIG9mIHRoZSBkZXNpZ24uCgpGcm9tIGEgcGVyZm9ybWFuY2UgcGVyc3BlY3RpdmUsIHdoYXQgYXJlIHRoZSBoYXJkd2FyZSYjMzk7cyBjYXBhYmlsaXRpZXMgdGhhdCBpbXBhY3QgdGhpcyBwYXJ0aWN1bGFyIG9wZXJhdGlvbj8gSXMgdGhlIE5JQyBpbiBxdWVzdGlvbiBvcHRpbWl6ZWQgZm9yIHRoaXMsIG9yIGFyZSB3ZSBlbmNvdW50ZXJpbmcgcG90ZW50aWFsIGJvdHRsZW5lY2tzIHdpdGggRE1BIG9yIG1lbW9yeSByZWdpc3RyYXRpb24/IFdlIG5lZWQgdG8gbG9vayBhdCBvdXIgZXhpc3RpbmcgaW1wbGVtZW50YXRpb25zIGFuZCBzZWUgaG93IHRoZSBjdXJyZW50IHVzYWdlIGlzLgoKVGhlbiwgYXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgbWVtb3J5IHJlZ2lzdHJhdGlvbiBjb25zdHJhaW50cz8gQXJlIHdlIGRlYWxpbmcgd2l0aCBwaW5uZWQgbWVtb3J5IGxpbWl0YXRpb25zLCBwYWdlIGZhdWx0IGhhbmRsaW5nLCBvciBhZGRyZXNzIHRyYW5zbGF0aW9uIG92ZXJoZWFkLCBwYXJ0aWN1bGFybHkgd2l0aGluIHRoZSBjb250ZXh0IG9mIGBSRE1BX1NJV2A/IFdoYXQgYWJvdXQgRE1BIGVuZ2luZSBiYW5kd2lkdGg/IFdlIG5lZWQgdG8gcmVtZW1iZXIgdGhlIGFyY2hpdGVjdHVyYWwgaW1wbGljYXRpb25zLgoKTmV4dCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGlzIG5vdCBjb25mbGljdGluZyB3aXRoIG90aGVyIFJETUEgb3BlcmF0aW9ucywgZXNwZWNpYWxseSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgY29udGV4dCBzd2l0Y2hpbmcgYW5kIGludGVycnVwdCBoYW5kbGluZy4gQXJlIHdlIGluIGEgZGVzaWduIG1vZGUgd2hlcmUgbXVsdGlwbGUgU0lXcyBhcmUgdXNlZCBzaW11bHRhbmVvdXNseT8KCkZpbmFsbHksIGFyZSB0aGVyZSBhbnkgc2VjdXJpdHkgaW1wbGljYXRpb25zIHdpdGggaG93IHRoZSBTSVcgd29ya3M/IFRoaXMgaXMgUkRNQSwgYWZ0ZXIgYWxsLCBhbmQgd2UgaGF2ZSB0byBiZSBzdXJlIHRoaXMgaXMgY29ycmVjdC4gSSBoYXZlIHRvIGxvb2sgaW50byB0aGUgc2VjdXJpdHkgYXNwZWN0cyBvZiB0aGUgZGVzaWduLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxMDo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvaW5maW5pYmFuZC9zdy9zaXcvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdGNvbmZpZyBSRE1BX1NJV1xuICAgMjpcdFx0dHJpc3RhdGUgXCYjMzQ7U29mdHdhcmUgUkRNQSBvdmVyIFRDUC9JUCAoaVdBUlApIGRyaXZlclwmIzM0O1xuICAgMzpcdFx0ZGVwZW5kcyBvbiBJTkVUIFx1MDAyNlx1MDAyNiBJTkZJTklCQU5EXG4gICA0Olx0XHRkZXBlbmRzIG9uIElORklOSUJBTkRfVklSVF9ETUFcbiAgIDU6XHRcdHNlbGVjdCBDUkMzMlxuICAgNjpcdFx0c2VsZWN0IE5FVF9DUkMzMkNcbiAgIDc6XHRcdGhlbHBcbiAgIDg6XHRcdFRoaXMgZHJpdmVyIGltcGxlbWVudHMgdGhlIGlXQVJQIFJETUEgdHJhbnNwb3J0IG92ZXJcbiAgIDk6XHRcdHRoZSBMaW51eCBUQ1AvSVAgbmV0d29yayBzdGFjay4gSXQgZW5hYmxlcyBhIHN5c3RlbSB3aXRoIGFcbiAgMTA6XHRcdHN0YW5kYXJkIEV0aGVybmV0IGFkYXB0ZXIgdG8gaW50ZXJvcGVyYXRlIHdpdGggYSBpV0FSUFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxMDo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzQzMQoJCQkJCQkJb3V0cHV0OiAyMTQKCQkJCQkJCXRob3VnaHRzOiA1OTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBSRFMgUkRNQTogQ29uZmlndXJhdGlvbiBhbmQgRm9jdXMgU3ltYm9sIFNlbGVjdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkmIzM5O3ZlIGdvdCBhIHBhdGNoIGhlcmUgdGhhdCYjMzk7cyBjYXVnaHQgbXkgZXllIOKAkyBpdCYjMzk7cyBhZGRyZXNzaW5nIHNvbWUgc2VyaW91cyBjb25jdXJyZW5jeSBpc3N1ZXMgaW4gUkRTIFJETUEsIHNwZWNpZmljYWxseSBhIHNsZWVwLWluLWF0b21pYyBidWcgZHVyaW5nIG1lc3NhZ2UgcHVyZ2luZyBhbmQgc29tZSByZWZlcmVuY2UgY291bnRpbmcgcHJvYmxlbXMuIFRoaXMgaXMgZGVmaW5pdGVseSB3b3J0aCBhIGNsb3NlciBsb29rLCBlc3BlY2lhbGx5IGNvbnNpZGVyaW5nIHRoZSBwb3RlbnRpYWwgaW1wYWN0IG9uIHBlcmZvcm1hbmNlIGFuZCBzdGFiaWxpdHkuCgpUbyBzdGFydCwgSSYjMzk7bSBnb2luZyB0byBlbnN1cmUgSSBjb3ZlciBteSBiYXNlcyB3aXRoIHRoZSBjb25maWd1cmF0aW9uLiBJJiMzOTtsbCBpbmNsdWRlIGBSRE1BX1JYRWAgYW5kIGBSRE1BX1NJV2AgdG8gYmUgb24gdGhlIHNhZmUgc2lkZSwgc28gbXkgdGVzdCBoYXJuZXNzIHdpbGwgYmUgYnVpbHQgd2l0aCB0aGUgZm9sbG93aW5nIGNvbmZpZ3VyYXRpb25zIGVuYWJsZWQ6IGBSRFNgLCBgUkRTX1JETUFgLCBgSU5GSU5JQkFORGAsIGBJTkZJTklCQU5EX0FERFJfVFJBTlNgLCBgUkRNQV9SWEVgLCBhbmQgYFJETUFfU0lXYC4gSSB3YW50IG1heGltdW0gY292ZXJhZ2UgdG8gZXhwb3NlIGFueSBoaWRkZW4gaXNzdWVzLgoKTm93LCBsZXQmIzM5O3MgbmFpbCBkb3duIHRoZSBmb2N1cyBzeW1ib2xzLiBJJiMzOTt2ZSBwaW5wb2ludGVkIGEgZmV3IGZ1bmN0aW9ucyB0aGF0IHNlZW0gcGFydGljdWxhcmx5IHJlbGV2YW50IHRvIHRoZSBjaGFuZ2VzLiBGaXJzdCB1cCwgd2UmIzM5O3ZlIGdvdCBgcmRzX21lc3NhZ2VfcHV0YCBiZWNhdXNlIGl0JiMzOTtzIGF0IHRoZSBjb3JlIG9mIG1lc3NhZ2UgaGFuZGxpbmcuIFRoZW4sIEkgbmVlZCB0byBsb29rIGludG8gYHJkc19zZW5kX3htaXRgIGFuZCBgcmRzX2Ntc2dfcmRtYV9hcmdzYCwgYXMgdGhlc2UgYXJlIFJETUEtc3BlY2lmaWMgYW5kIGxpa2VseSByZWxhdGVkIHRvIHRoZSByZWZlcmVuY2UgY291bnRpbmcgZml4ZXMuIEkmIzM5O2xsIGFsc28gYWRkIGByZHNfcmRtYV9mcmVlX29wYCBhbmQgYHJkc19hdG9taWNfZnJlZV9vcGAgYmVjYXVzZSB0aGV5IGhhbmRsZSBtZW1vcnkgbWFuYWdlbWVudC4gTGFzdGx5LCBJJiMzOTtsbCBpbmNsdWRlIGBfX3Jkc19wdXRfbXJfZmluYWxgIHNpbmNlIGl0JiMzOTtzIGludm9sdmVkIGluIHRoZSBmaW5hbCBzdGFnZXMgb2YgdGhlIG1lbW9yeSByZWdpb24gY2xlYW51cC4KCkkgZGlkIGEgcXVpY2sgc2NhbiB0byBzZWUgaWYgdGhlcmUgd2VyZSBhbnkgb3RoZXIgaW50ZXJlc3RpbmcgZnVuY3Rpb25zLCBidXQgZGlkbiYjMzk7dCBmaW5kIGFueSB0aGF0IHdhcnJhbnRlZCBjbG9zZXIgYXR0ZW50aW9uLiBgcmRzX2liX2V4aXRgIGlzIG1vZGlmaWVkLCBidXQgdGhhdCYjMzk7cyBhIG1vZHVsZSBleGl0IGZ1bmN0aW9uLCBzbyBub3QgaWRlYWwgZm9yIHRoaXMgZnV6emluZyBjYW1wYWlnbi4gYHJkc19tZXNzYWdlX3B1cmdlYCwgYHJkc19tZXNzYWdlX3B1cmdlX3dvcmtlcmAsIGFuZCBgcmRzX21lc3NhZ2VfZGlydGllc19wYWdlc2AgYXJlIGFsbCBzdGF0aWMuCgpJJiMzOTt2ZSBjb25maXJtZWQgdGhhdCBhbGwgdGhlIGZvY3VzIHN5bWJvbHMgSSBzZWxlY3RlZCBhcmUgZXhwb3J0ZWQgb3Igbm9uLXN0YXRpYywgd2hpY2ggaXMgd2hhdCBJIHdhbnQgZm9yIGEgZ29vZCBmdXp6aW5nIHRhcmdldC4KCkluIHNob3J0LCB0aGlzIHBhdGNoIGZpeGVzIHNsZWVwLWluLWF0b21pYyBpc3N1ZXMgZHVyaW5nIG1lc3NhZ2UgcHVyZ2luZyAoYnkgZGVmZXJyaW5nIGRpcnR5aW5nIHBhZ2VzKSwgc29ja2V0IHJlZmVyZW5jZSBjb3VudGluZyBwcm9ibGVtcywgYW5kIHJlZmVyZW5jZSBsZWFrcy4gVGhpcyB3aWxsIGFmZmVjdCBzdGFuZGFyZCBzb2NrZXQgb3BlcmF0aW9ucyBhbmQgUkRNQSBtZXNzYWdlcy4KCkkmIzM5O20gY29uZmlkZW50IGluIHRoZXNlIGZvY3VzIHN5bWJvbHMsIHNvIGl0JiMzOTtzIHRpbWUgdG8gc2V0LXJlc3VsdHMgYW5kIGdldCB0aGUgZnV6emluZyBzdGFydGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxMDo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UkRTJiMzNDssCiAgICAmIzM0O1JEU19SRE1BJiMzNDssCiAgICAmIzM0O0lORklOSUJBTkQmIzM0OywKICAgICYjMzQ7SU5GSU5JQkFORF9BRERSX1RSQU5TJiMzNDssCiAgICAmIzM0O1JETUFfUlhFJiMzNDssCiAgICAmIzM0O1JETUFfU0lXJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cmRzX21lc3NhZ2VfcHV0JiMzNDssCiAgICAmIzM0O3Jkc19zZW5kX3htaXQmIzM0OywKICAgICYjMzQ7cmRzX2Ntc2dfcmRtYV9hcmdzJiMzNDssCiAgICAmIzM0O3Jkc19yZG1hX2ZyZWVfb3AmIzM0OywKICAgICYjMzQ7cmRzX2F0b21pY19mcmVlX29wJiMzNDssCiAgICAmIzM0O19fcmRzX3B1dF9tcl9maW5hbCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHNsZWVwLWluLWF0b21pYyBidWcgaW4gUkRTIG1lc3NhZ2UgcHVyZ2luZyBieSBkZWZlcnJpbmcgdGhlIHB1cmdlIG9mIG1lc3NhZ2VzIHRoYXQgZGlydHkgcGFnZXMgdG8gYSB3b3JrcXVldWUuIEl0IGFsc28gZml4ZXMgc29ja2V0IHJlZmVyZW5jZSBjb3VudGluZyBpc3N1ZXMgaW4gUkRTIFJETUEgb3BlcmF0aW9ucyBhbmQgYSByZWZlcmVuY2UgbGVhayBpbiBgcmRzX3NlbmRfeG1pdGAuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gdGhlIGNvcmUgUkRTIGFuZCBSRFMgUkRNQSBjb2RlIHBhdGhzIHRoYXQgY2FuIGJlIHJlYWNoZWQgdmlhIHN0YW5kYXJkIHNvY2tldCBvcGVyYXRpb25zIGFuZCBSRE1BIG1lc3NhZ2VzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtSRFMmIzM0OywKICAgICYjMzQ7UkRTX1JETUEmIzM0OywKICAgICYjMzQ7SU5GSU5JQkFORCYjMzQ7LAogICAgJiMzNDtJTkZJTklCQU5EX0FERFJfVFJBTlMmIzM0OywKICAgICYjMzQ7UkRNQV9SWEUmIzM0OywKICAgICYjMzQ7UkRNQV9TSVcmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyZHNfbWVzc2FnZV9wdXQmIzM0OywKICAgICYjMzQ7cmRzX3NlbmRfeG1pdCYjMzQ7LAogICAgJiMzNDtyZHNfY21zZ19yZG1hX2FyZ3MmIzM0OywKICAgICYjMzQ7cmRzX3JkbWFfZnJlZV9vcCYjMzQ7LAogICAgJiMzNDtyZHNfYXRvbWljX2ZyZWVfb3AmIzM0OywKICAgICYjMzQ7X19yZHNfcHV0X21yX2ZpbmFsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgc2xlZXAtaW4tYXRvbWljIGJ1ZyBpbiBSRFMgbWVzc2FnZSBwdXJnaW5nIGJ5IGRlZmVycmluZyB0aGUgcHVyZ2Ugb2YgbWVzc2FnZXMgdGhhdCBkaXJ0eSBwYWdlcyB0byBhIHdvcmtxdWV1ZS4gSXQgYWxzbyBmaXhlcyBzb2NrZXQgcmVmZXJlbmNlIGNvdW50aW5nIGlzc3VlcyBpbiBSRFMgUkRNQSBvcGVyYXRpb25zIGFuZCBhIHJlZmVyZW5jZSBsZWFrIGluIGByZHNfc2VuZF94bWl0YC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiB0aGUgY29yZSBSRFMgYW5kIFJEUyBSRE1BIGNvZGUgcGF0aHMgdGhhdCBjYW4gYmUgcmVhY2hlZCB2aWEgc3RhbmRhcmQgc29ja2V0IG9wZXJhdGlvbnMgYW5kIFJETUEgbWVzc2FnZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxMDo0NToyNy41MTY2NTEwNDhaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4Nzc5NzQxNzAxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJSRFNcIixcbiAgICBcIlJEU19SRE1BXCIsXG4gICAgXCJJTkZJTklCQU5EXCIsXG4gICAgXCJJTkZJTklCQU5EX0FERFJfVFJBTlNcIixcbiAgICBcIlJETUFfUlhFXCIsXG4gICAgXCJSRE1BX1NJV1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJkc19tZXNzYWdlX3B1dFwiLFxuICAgIFwicmRzX3NlbmRfeG1pdFwiLFxuICAgIFwicmRzX2Ntc2dfcmRtYV9hcmdzXCIsXG4gICAgXCJyZHNfcmRtYV9mcmVlX29wXCIsXG4gICAgXCJyZHNfYXRvbWljX2ZyZWVfb3BcIixcbiAgICBcIl9fcmRzX3B1dF9tcl9maW5hbFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgc2xlZXAtaW4tYXRvbWljIGJ1ZyBpbiBSRFMgbWVzc2FnZSBwdXJnaW5nIGJ5IGRlZmVycmluZyB0aGUgcHVyZ2Ugb2YgbWVzc2FnZXMgdGhhdCBkaXJ0eSBwYWdlcyB0byBhIHdvcmtxdWV1ZS4gSXQgYWxzbyBmaXhlcyBzb2NrZXQgcmVmZXJlbmNlIGNvdW50aW5nIGlzc3VlcyBpbiBSRFMgUkRNQSBvcGVyYXRpb25zIGFuZCBhIHJlZmVyZW5jZSBsZWFrIGluIGByZHNfc2VuZF94bWl0YC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiB0aGUgY29yZSBSRFMgYW5kIFJEUyBSRE1BIGNvZGUgcGF0aHMgdGhhdCBjYW4gYmUgcmVhY2hlZCB2aWEgc3RhbmRhcmQgc29ja2V0IG9wZXJhdGlvbnMgYW5kIFJETUEgbWVzc2FnZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDEwOjQ1OjI3LjUxNjY1OTk1OFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTU3ODQyMTcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgM2ZmMDUxNmRiNWIzZjljMGJmZmNjYzE0ZmZmODdjMjRmOTljNjY4NVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEp1bCAyNyAxMDo0NToyNSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvcmRzL2liLmMgYi9uZXQvcmRzL2liLmNcXG5pbmRleCA4ZjljZjQ5MTk4NGYxMi4uYWQyZjAzOGJkMWFjNDIgMTAwNjQ0XFxuLS0tIGEvbmV0L3Jkcy9pYi5jXFxuKysrIGIvbmV0L3Jkcy9pYi5jXFxuQEAgLTU0MSw2ICs1NDEsMTggQEAgdm9pZCByZHNfaWJfZXhpdCh2b2lkKVxcbiAjZW5kaWZcXG4gXFx0cmRzX2liX3VucmVnaXN0ZXJfY2xpZW50KCk7XFxuIFxcdHJkc19pYl9kZXN0cm95X25vZGV2X2Nvbm5zKCk7XFxuK1xcbitcXHQvKiBUaGUgY29tcGxldGlvbiB0YXNrbGV0cyBtYXkgaGF2ZSBkZWZlcnJlZCBtZXNzYWdlIGZyZWVzIHRvXFxuK1xcdCAqIHJkc193cSwgYW5kIHRob3NlIGNhbiBjYWxsIGJhY2sgaW50byB0aGlzIG1vZHVsZSB0aHJvdWdoIHRoZVxcbitcXHQgKiBvcCdzIE1SLiAgRHJhaW4gdGhlbSBiZWZvcmUgdGhlIG1vZHVsZSBnb2VzIGF3YXkuICBBIGRlZmVycmVkXFxuK1xcdCAqIHB1cmdlIGNhbiBkcm9wIHRoZSBmaW5hbCByZWZlcmVuY2Ugb24gdGhlIG9wJ3MgZGV2aWNlLCB3aGljaFxcbitcXHQgKiBxdWV1ZXMgcmRzX2liX2Rldl9mcmVlKCkgYmFjayBvbnRvIHJkc193cSwgYW5kXFxuK1xcdCAqIGZsdXNoX3dvcmtxdWV1ZSgpIGRvZXMgbm90IHdhaXQgZm9yIHdvcmsgcXVldWVkIGJ5IHRoZSBpdGVtc1xcbitcXHQgKiBpdCBpcyBmbHVzaGluZy4gIEZsdXNoIGEgc2Vjb25kIHRpbWUgZm9yIHRob3NlLlxcbitcXHQgKi9cXG4rXFx0Zmx1c2hfd29ya3F1ZXVlKHJkc193cSk7XFxuK1xcdGZsdXNoX3dvcmtxdWV1ZShyZHNfd3EpO1xcbitcXG4gXFx0cmRzX2liX3N5c2N0bF9leGl0KCk7XFxuIFxcdHJkc19pYl9yZWN2X2V4aXQoKTtcXG4gXFx0cmRzX3RyYW5zX3VucmVnaXN0ZXIoXFx1MDAyNnJkc19pYl90cmFuc3BvcnQpO1xcbmRpZmYgLS1naXQgYS9uZXQvcmRzL21lc3NhZ2UuYyBiL25ldC9yZHMvbWVzc2FnZS5jXFxuaW5kZXggN2ZlYjBlYjY1MzdkYjguLjJmNjU0YWNhZDI5Yjk0IDEwMDY0NFxcbi0tLSBhL25ldC9yZHMvbWVzc2FnZS5jXFxuKysrIGIvbmV0L3Jkcy9tZXNzYWdlLmNcXG5AQCAtMTgyLDYgKzE4MiwyOSBAQCBzdGF0aWMgdm9pZCByZHNfbWVzc2FnZV9wdXJnZShzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtKVxcbiBcXHRcXHRrcmVmX3B1dChcXHUwMDI2cm0tXFx1MDAzZWF0b21pYy5vcF9yZG1hX21yLVxcdTAwM2VyX2tyZWYsIF9fcmRzX3B1dF9tcl9maW5hbCk7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIHJkc19tZXNzYWdlX3B1cmdlX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuK3tcXG4rXFx0c3RydWN0IHJkc19tZXNzYWdlICpybSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcmRzX21lc3NhZ2UsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIG1fcHVyZ2Vfd29yayk7XFxuK1xcbitcXHRyZHNfbWVzc2FnZV9wdXJnZShybSk7XFxuK1xcbitcXHRrZnJlZShybSk7XFxuK31cXG4rXFxuKy8qIFB1cmdpbmcgYSBtZXNzYWdlIHdpdGggYW4gUkRNQSBvciBhdG9taWMgb3Agd2hvc2UgcGFnZXMgd2VyZSBwb3NzaWJseVxcbisgKiB3cml0dGVuIGJ5IHRoZSByZW1vdGUgc2lkZSBtdXN0IGRpcnR5IHRob3NlIHBhZ2VzLCB3aGljaCBjYW4gc2xlZXBcXG4rICogKGFuZCB0aGUgcGFnZXMgbWF5IGJlIGZpbGUtYmFja2VkLCBzbyBkaXJ0eWluZyB0aGVtIHVuZGVyIGEgbm9uLWlycS1zYWZlXFxuKyAqIGZpbGVzeXN0ZW0gbG9jayBtdXN0IG5vdCBoYXBwZW4gZnJvbSBhdG9taWMgY29udGV4dCBhdCBhbGwpLlxcbisgKi9cXG4rc3RhdGljIGJvb2wgcmRzX21lc3NhZ2VfZGlydGllc19wYWdlcyhzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtKVxcbit7XFxuK1xcdGlmIChybS1cXHUwMDNlcmRtYS5vcF9hY3RpdmUgXFx1MDAyNlxcdTAwMjYgcm0tXFx1MDAzZXJkbWEub3BfbmVudHMgXFx1MDAyNlxcdTAwMjYgIXJtLVxcdTAwM2VyZG1hLm9wX3dyaXRlIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAhcm0tXFx1MDAzZXJkbWEub3Bfb2RwX21yKVxcbitcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFx0cmV0dXJuIHJtLVxcdTAwM2VhdG9taWMub3BfYWN0aXZlO1xcbit9XFxuK1xcbiB2b2lkIHJkc19tZXNzYWdlX3B1dChzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtKVxcbiB7XFxuIFxcdHJkc2RlYnVnKFxcXCJwdXQgcm0gJXAgcmVmICVkXFxcXG5cXFwiLCBybSwgcmVmY291bnRfcmVhZChcXHUwMDI2cm0tXFx1MDAzZW1fcmVmY291bnQpKTtcXG5AQCAtMTg5LDYgKzIxMiwxNyBAQCB2b2lkIHJkc19tZXNzYWdlX3B1dChzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtKVxcbiBcXHRpZiAocmVmY291bnRfZGVjX2FuZF90ZXN0KFxcdTAwMjZybS1cXHUwMDNlbV9yZWZjb3VudCkpIHtcXG4gXFx0XFx0QlVHX09OKCFsaXN0X2VtcHR5KFxcdTAwMjZybS1cXHUwMDNlbV9zb2NrX2l0ZW0pKTtcXG4gXFx0XFx0QlVHX09OKCFsaXN0X2VtcHR5KFxcdTAwMjZybS1cXHUwMDNlbV9jb25uX2l0ZW0pKTtcXG4rXFxuK1xcdFxcdC8qIFRoZSBmaW5hbCBwdXQgbWF5IGNvbWUgZnJvbSB0aGUgSUIgc2VuZCBjb21wbGV0aW9uXFxuK1xcdFxcdCAqIHRhc2tsZXQ7IHBhZ2UgZGlydHlpbmcgbXVzdCBiZSBkZWZlcnJlZCB0byBwcm9jZXNzXFxuK1xcdFxcdCAqIGNvbnRleHQgdGhlbi5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGlmICghaW5fdGFzaygpIFxcdTAwMjZcXHUwMDI2IHJkc19tZXNzYWdlX2RpcnRpZXNfcGFnZXMocm0pKSB7XFxuK1xcdFxcdFxcdElOSVRfV09SSyhcXHUwMDI2cm0tXFx1MDAzZW1fcHVyZ2Vfd29yaywgcmRzX21lc3NhZ2VfcHVyZ2Vfd29ya2VyKTtcXG4rXFx0XFx0XFx0cXVldWVfd29yayhyZHNfd3EsIFxcdTAwMjZybS1cXHUwMDNlbV9wdXJnZV93b3JrKTtcXG4rXFx0XFx0XFx0cmV0dXJuO1xcbitcXHRcXHR9XFxuK1xcbiBcXHRcXHRyZHNfbWVzc2FnZV9wdXJnZShybSk7XFxuIFxcbiBcXHRcXHRrZnJlZShybSk7XFxuZGlmZiAtLWdpdCBhL25ldC9yZHMvcmRtYS5jIGIvbmV0L3Jkcy9yZG1hLmNcXG5pbmRleCA2MWZiNmU0NTI4MWJmMS4uNWY1NzUzYWZkY2RjYmQgMTAwNjQ0XFxuLS0tIGEvbmV0L3Jkcy9yZG1hLmNcXG4rKysgYi9uZXQvcmRzL3JkbWEuY1xcbkBAIC0xMTcsNiArMTE3LDcgQEAgdm9pZCBfX3Jkc19wdXRfbXJfZmluYWwoc3RydWN0IGtyZWYgKmtyZWYpXFxuIFxcdHN0cnVjdCByZHNfbXIgKm1yID0gY29udGFpbmVyX29mKGtyZWYsIHN0cnVjdCByZHNfbXIsIHJfa3JlZik7XFxuIFxcbiBcXHRyZHNfZGVzdHJveV9tcihtcik7XFxuK1xcdHNvY2tfcHV0KHJkc19yc190b19zayhtci1cXHUwMDNlcl9zb2NrKSk7XFxuIFxcdGtmcmVlKG1yKTtcXG4gfVxcbiBcXG5AQCAtMjQzLDcgKzI0NCwxMSBAQCBzdGF0aWMgaW50IF9fcmRzX3JkbWFfbWFwKHN0cnVjdCByZHNfc29jayAqcnMsIHN0cnVjdCByZHNfZ2V0X21yX2FyZ3MgKmFyZ3MsXFxuIFxcdGtyZWZfaW5pdChcXHUwMDI2bXItXFx1MDAzZXJfa3JlZik7XFxuIFxcdFJCX0NMRUFSX05PREUoXFx1MDAyNm1yLVxcdTAwM2VyX3JiX25vZGUpO1xcbiBcXHRtci1cXHUwMDNlcl90cmFucyA9IHJzLVxcdTAwM2Vyc190cmFuc3BvcnQ7XFxuK1xcdC8qIFRoZSBNUiBjYW4gb3V0bGl2ZSBpdHMgc29ja2V0OiBhIHNvY2tldCByZWZlcmVuY2UgaXMgaGVsZFxcbitcXHQgKiB1bnRpbCB0aGUgZmluYWwga3JlZiBpcyBkcm9wcGVkIGluIF9fcmRzX3B1dF9tcl9maW5hbCgpLlxcbitcXHQgKi9cXG4gXFx0bXItXFx1MDAzZXJfc29jayA9IHJzO1xcbitcXHRzb2NrX2hvbGQocmRzX3JzX3RvX3NrKHJzKSk7XFxuIFxcbiBcXHRpZiAoYXJncy1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBSRFNfUkRNQV9VU0VfT05DRSlcXG4gXFx0XFx0bXItXFx1MDAzZXJfdXNlX29uY2UgPSAxO1xcbkBAIC00OTUsNyArNTAwLDkgQEAgdm9pZCByZHNfcmRtYV9mcmVlX29wKHN0cnVjdCBybV9yZG1hX29wICpybylcXG4gXFxuIFxcdFxcdFxcdC8qIE1hcmsgcGFnZSBkaXJ0eSBpZiBpdCB3YXMgcG9zc2libHkgbW9kaWZpZWQsIHdoaWNoXFxuIFxcdFxcdFxcdCAqIGlzIHRoZSBjYXNlIGZvciBhIFJETUFfUkVBRCB3aGljaCBjb3BpZXMgZnJvbSByZW1vdGVcXG4tXFx0XFx0XFx0ICogdG8gbG9jYWwgbWVtb3J5XFxuK1xcdFxcdFxcdCAqIHRvIGxvY2FsIG1lbW9yeS4gIERpcnR5aW5nIHRoZSBwYWdlIGNhbiBzbGVlcCwgc29cXG4rXFx0XFx0XFx0ICogcmRzX21lc3NhZ2VfcHV0KCkgZGVmZXJzIHRoZSBwdXJnZSBvZiBzdWNoIG9wcyB0b1xcbitcXHRcXHRcXHQgKiBwcm9jZXNzIGNvbnRleHQuXFxuIFxcdFxcdFxcdCAqL1xcbiBcXHRcXHRcXHR1bnBpbl91c2VyX3BhZ2VzX2RpcnR5X2xvY2soXFx1MDAyNnBhZ2UsIDEsICFyby1cXHUwMDNlb3Bfd3JpdGUpO1xcbiBcXHRcXHR9XFxuQEAgLTUxMyw3ICs1MjAsMTAgQEAgdm9pZCByZHNfYXRvbWljX2ZyZWVfb3Aoc3RydWN0IHJtX2F0b21pY19vcCAqYW8pXFxuIFxcbiBcXHQvKiBNYXJrIHBhZ2UgZGlydHkgaWYgaXQgd2FzIHBvc3NpYmx5IG1vZGlmaWVkLCB3aGljaFxcbiBcXHQgKiBpcyB0aGUgY2FzZSBmb3IgYSBSRE1BX1JFQUQgd2hpY2ggY29waWVzIGZyb20gcmVtb3RlXFxuLVxcdCAqIHRvIGxvY2FsIG1lbW9yeSAqL1xcbitcXHQgKiB0byBsb2NhbCBtZW1vcnkuICBEaXJ0eWluZyB0aGUgcGFnZSBjYW4gc2xlZXAsIHNvXFxuK1xcdCAqIHJkc19tZXNzYWdlX3B1dCgpIGRlZmVycyB0aGUgcHVyZ2Ugb2Ygc3VjaCBvcHMgdG9cXG4rXFx0ICogcHJvY2VzcyBjb250ZXh0LlxcbitcXHQgKi9cXG4gXFx0dW5waW5fdXNlcl9wYWdlc19kaXJ0eV9sb2NrKFxcdTAwMjZwYWdlLCAxLCB0cnVlKTtcXG4gXFxuIFxcdGtmcmVlKGFvLVxcdTAwM2VvcF9ub3RpZmllcik7XFxuQEAgLTc0Nyw2ICs3NTcsMTAgQEAgaW50IHJkc19jbXNnX3JkbWFfYXJncyhzdHJ1Y3QgcmRzX3NvY2sgKnJzLCBzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtLFxcbiBcXHRcXHRcXHR9XFxuIFxcdFxcdFxcdHJkc2RlYnVnKFxcXCJOZWVkIG9kcDsgbG9jYWxfb2RwX21yICVwIHRyYW5zX3ByaXZhdGUgJXBcXFxcblxcXCIsXFxuIFxcdFxcdFxcdFxcdCBsb2NhbF9vZHBfbXIsIGxvY2FsX29kcF9tci1cXHUwMDNlcl90cmFuc19wcml2YXRlKTtcXG4rXFx0XFx0XFx0LyogRnJvbSBoZXJlIG9uIHRoZSBNUiBpcyB0b3JuIGRvd24gdGhyb3VnaFxcbitcXHRcXHRcXHQgKiBfX3Jkc19wdXRfbXJfZmluYWwoKSwgd2hpY2ggZHJvcHMgdGhpcyByZWZlcmVuY2UuXFxuK1xcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHRzb2NrX2hvbGQocmRzX3JzX3RvX3NrKHJzKSk7XFxuIFxcdFxcdFxcdG9wLVxcdTAwM2VvcF9vZHBfbXIgPSBsb2NhbF9vZHBfbXI7XFxuIFxcdFxcdFxcdG9wLVxcdTAwM2VvcF9vZHBfYWRkciA9IGlvdi1cXHUwMDNlYWRkcjtcXG4gXFx0XFx0fVxcbmRpZmYgLS1naXQgYS9uZXQvcmRzL3Jkcy5oIGIvbmV0L3Jkcy9yZHMuaFxcbmluZGV4IDZlMDc5MGU0YjU3MDNiLi45ODJmM2U0MDY3NzNmYSAxMDA2NDRcXG4tLS0gYS9uZXQvcmRzL3Jkcy5oXFxuKysrIGIvbmV0L3Jkcy9yZHMuaFxcbkBAIC00NDUsNiArNDQ1LDEyIEBAIHN0cnVjdCByZHNfbWVzc2FnZSB7XFxuIFxcbiBcXHR2b2lkXFx0XFx0XFx0Km1fZmluYWxfb3A7XFxuIFxcbitcXHQvKiBGcmVlcyB0aGUgbWVzc2FnZSBmcm9tIHByb2Nlc3MgY29udGV4dCB3aGVuIHRoZSBmaW5hbCBwdXRcXG4rXFx0ICogaGFwcGVucyBpbiBhdG9taWMgY29udGV4dCBidXQgcHVyZ2luZyBuZWVkcyB0byBkaXJ0eSB1c2VyXFxuK1xcdCAqIHBhZ2VzLCB3aGljaCBjYW4gc2xlZXAuXFxuK1xcdCAqL1xcbitcXHRzdHJ1Y3Qgd29ya19zdHJ1Y3RcXHRtX3B1cmdlX3dvcms7XFxuK1xcbiBcXHRzdHJ1Y3Qge1xcbiBcXHRcXHRzdHJ1Y3Qgcm1fYXRvbWljX29wIHtcXG4gXFx0XFx0XFx0aW50XFx0XFx0XFx0b3BfdHlwZTtcXG5kaWZmIC0tZ2l0IGEvbmV0L3Jkcy9zZW5kLmMgYi9uZXQvcmRzL3NlbmQuY1xcbmluZGV4IDY4YmUxYmYwZTBhZGY5Li43ZTQ4ZjY0ZGZhYTY3OSAxMDA2NDRcXG4tLS0gYS9uZXQvcmRzL3NlbmQuY1xcbisrKyBiL25ldC9yZHMvc2VuZC5jXFxuQEAgLTMzOSw5ICszMzksMjEgQEAgaW50IHJkc19zZW5kX3htaXQoc3RydWN0IHJkc19jb25uX3BhdGggKmNwKVxcbiBcXHRcXHRcXHQgICAgKHJtLVxcdTAwM2VyZG1hLm9wX2FjdGl2ZSBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHRcXHQgICAgdGVzdF9iaXQoUkRTX01TR19SRVRSQU5TTUlUVEVELCBcXHUwMDI2cm0tXFx1MDAzZW1fZmxhZ3MpKSkge1xcbiBcXHRcXHRcXHRcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2Y3AtXFx1MDAzZWNwX2xvY2ssIGZsYWdzKTtcXG4tXFx0XFx0XFx0XFx0aWYgKHRlc3RfYW5kX2NsZWFyX2JpdChSRFNfTVNHX09OX0NPTk4sIFxcdTAwMjZybS1cXHUwMDNlbV9mbGFncykpXFxuLVxcdFxcdFxcdFxcdFxcdGxpc3RfbW92ZShcXHUwMDI2cm0tXFx1MDAzZW1fY29ubl9pdGVtLCBcXHUwMDI2dG9fYmVfZHJvcHBlZCk7XFxuLVxcdFxcdFxcdFxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNmNwLVxcdTAwM2VjcF9sb2NrLCBmbGFncyk7XFxuK1xcdFxcdFxcdFxcdGlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoUkRTX01TR19PTl9DT05OLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgXFx1MDAyNnJtLVxcdTAwM2VtX2ZsYWdzKSkge1xcbitcXHRcXHRcXHRcXHRcXHQvKiBvdXIgcmVmIGlzIHB1dCBhZnRlciB0aGUgYmF0Y2ggKi9cXG4rXFx0XFx0XFx0XFx0XFx0bGlzdF9tb3ZlKFxcdTAwMjZybS1cXHUwMDNlbV9jb25uX2l0ZW0sXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgXFx1MDAyNnRvX2JlX2Ryb3BwZWQpO1xcbitcXHRcXHRcXHRcXHRcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZjcC1cXHUwMDNlY3BfbG9jayxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIGZsYWdzKTtcXG4rXFx0XFx0XFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0XFx0XFx0LyogYWxyZWFkeSBvZmYgdGhlIGNvbm4gbGlzdDsgZHJvcFxcbitcXHRcXHRcXHRcXHRcXHQgKiB0aGUgcmVmIHRha2VuIGFib3ZlIG91cnNlbHZlc1xcbitcXHRcXHRcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0XFx0XFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2Y3AtXFx1MDAzZWNwX2xvY2ssXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBmbGFncyk7XFxuK1xcdFxcdFxcdFxcdFxcdHJkc19tZXNzYWdlX3B1dChybSk7XFxuK1xcdFxcdFxcdFxcdH1cXG4gXFx0XFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdFxcdH1cXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDEwOjQ1OjI4LjA3NTMwNDczOVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjg3MjM4NzUzNjU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlJEU1wiLFxuICAgIFwiUkRTX1JETUFcIixcbiAgICBcIklORklOSUJBTkRcIixcbiAgICBcIklORklOSUJBTkRfQUREUl9UUkFOU1wiLFxuICAgIFwiUkRNQV9SWEVcIixcbiAgICBcIlJETUFfU0lXXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicmRzX21lc3NhZ2VfcHV0XCIsXG4gICAgXCJyZHNfc2VuZF94bWl0XCIsXG4gICAgXCJyZHNfY21zZ19yZG1hX2FyZ3NcIixcbiAgICBcInJkc19yZG1hX2ZyZWVfb3BcIixcbiAgICBcInJkc19hdG9taWNfZnJlZV9vcFwiLFxuICAgIFwiX19yZHNfcHV0X21yX2ZpbmFsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBzbGVlcC1pbi1hdG9taWMgYnVnIGluIFJEUyBtZXNzYWdlIHB1cmdpbmcgYnkgZGVmZXJyaW5nIHRoZSBwdXJnZSBvZiBtZXNzYWdlcyB0aGF0IGRpcnR5IHBhZ2VzIHRvIGEgd29ya3F1ZXVlLiBJdCBhbHNvIGZpeGVzIHNvY2tldCByZWZlcmVuY2UgY291bnRpbmcgaXNzdWVzIGluIFJEUyBSRE1BIG9wZXJhdGlvbnMgYW5kIGEgcmVmZXJlbmNlIGxlYWsgaW4gYHJkc19zZW5kX3htaXRgLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHRoZSBjb3JlIFJEUyBhbmQgUkRTIFJETUEgY29kZSBwYXRocyB0aGF0IGNhbiBiZSByZWFjaGVkIHZpYSBzdGFuZGFyZCBzb2NrZXQgb3BlcmF0aW9ucyBhbmQgUkRNQSBtZXNzYWdlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgM2ZmMDUxNmRiNWIzZjljMGJmZmNjYzE0ZmZmODdjMjRmOTljNjY4NVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVsIDI3IDEwOjQ1OjI1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3Jkcy9pYi5jIGIvbmV0L3Jkcy9pYi5jXG5pbmRleCA4ZjljZjQ5MTk4NGYxMi4uYWQyZjAzOGJkMWFjNDIgMTAwNjQ0XG4tLS0gYS9uZXQvcmRzL2liLmNcbisrKyBiL25ldC9yZHMvaWIuY1xuQEAgLTU0MSw2ICs1NDEsMTggQEAgdm9pZCByZHNfaWJfZXhpdCh2b2lkKVxuICNlbmRpZlxuIFx0cmRzX2liX3VucmVnaXN0ZXJfY2xpZW50KCk7XG4gXHRyZHNfaWJfZGVzdHJveV9ub2Rldl9jb25ucygpO1xuK1xuK1x0LyogVGhlIGNvbXBsZXRpb24gdGFza2xldHMgbWF5IGhhdmUgZGVmZXJyZWQgbWVzc2FnZSBmcmVlcyB0b1xuK1x0ICogcmRzX3dxLCBhbmQgdGhvc2UgY2FuIGNhbGwgYmFjayBpbnRvIHRoaXMgbW9kdWxlIHRocm91Z2ggdGhlXG4rXHQgKiBvcCdzIE1SLiAgRHJhaW4gdGhlbSBiZWZvcmUgdGhlIG1vZHVsZSBnb2VzIGF3YXkuICBBIGRlZmVycmVkXG4rXHQgKiBwdXJnZSBjYW4gZHJvcCB0aGUgZmluYWwgcmVmZXJlbmNlIG9uIHRoZSBvcCdzIGRldmljZSwgd2hpY2hcbitcdCAqIHF1ZXVlcyByZHNfaWJfZGV2X2ZyZWUoKSBiYWNrIG9udG8gcmRzX3dxLCBhbmRcbitcdCAqIGZsdXNoX3dvcmtxdWV1ZSgpIGRvZXMgbm90IHdhaXQgZm9yIHdvcmsgcXVldWVkIGJ5IHRoZSBpdGVtc1xuK1x0ICogaXQgaXMgZmx1c2hpbmcuICBGbHVzaCBhIHNlY29uZCB0aW1lIGZvciB0aG9zZS5cbitcdCAqL1xuK1x0Zmx1c2hfd29ya3F1ZXVlKHJkc193cSk7XG4rXHRmbHVzaF93b3JrcXVldWUocmRzX3dxKTtcbitcbiBcdHJkc19pYl9zeXNjdGxfZXhpdCgpO1xuIFx0cmRzX2liX3JlY3ZfZXhpdCgpO1xuIFx0cmRzX3RyYW5zX3VucmVnaXN0ZXIoXHUwMDI2cmRzX2liX3RyYW5zcG9ydCk7XG5kaWZmIC0tZ2l0IGEvbmV0L3Jkcy9tZXNzYWdlLmMgYi9uZXQvcmRzL21lc3NhZ2UuY1xuaW5kZXggN2ZlYjBlYjY1MzdkYjguLjJmNjU0YWNhZDI5Yjk0IDEwMDY0NFxuLS0tIGEvbmV0L3Jkcy9tZXNzYWdlLmNcbisrKyBiL25ldC9yZHMvbWVzc2FnZS5jXG5AQCAtMTgyLDYgKzE4MiwyOSBAQCBzdGF0aWMgdm9pZCByZHNfbWVzc2FnZV9wdXJnZShzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtKVxuIFx0XHRrcmVmX3B1dChcdTAwMjZybS1cdTAwM2VhdG9taWMub3BfcmRtYV9tci1cdTAwM2VyX2tyZWYsIF9fcmRzX3B1dF9tcl9maW5hbCk7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIHJkc19tZXNzYWdlX3B1cmdlX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4re1xuK1x0c3RydWN0IHJkc19tZXNzYWdlICpybSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcmRzX21lc3NhZ2UsXG4rXHRcdFx0XHRcdCAgICAgIG1fcHVyZ2Vfd29yayk7XG4rXG4rXHRyZHNfbWVzc2FnZV9wdXJnZShybSk7XG4rXG4rXHRrZnJlZShybSk7XG4rfVxuK1xuKy8qIFB1cmdpbmcgYSBtZXNzYWdlIHdpdGggYW4gUkRNQSBvciBhdG9taWMgb3Agd2hvc2UgcGFnZXMgd2VyZSBwb3NzaWJseVxuKyAqIHdyaXR0ZW4gYnkgdGhlIHJlbW90ZSBzaWRlIG11c3QgZGlydHkgdGhvc2UgcGFnZXMsIHdoaWNoIGNhbiBzbGVlcFxuKyAqIChhbmQgdGhlIHBhZ2VzIG1heSBiZSBmaWxlLWJhY2tlZCwgc28gZGlydHlpbmcgdGhlbSB1bmRlciBhIG5vbi1pcnEtc2FmZVxuKyAqIGZpbGVzeXN0ZW0gbG9jayBtdXN0IG5vdCBoYXBwZW4gZnJvbSBhdG9taWMgY29udGV4dCBhdCBhbGwpLlxuKyAqL1xuK3N0YXRpYyBib29sIHJkc19tZXNzYWdlX2RpcnRpZXNfcGFnZXMoc3RydWN0IHJkc19tZXNzYWdlICpybSlcbit7XG4rXHRpZiAocm0tXHUwMDNlcmRtYS5vcF9hY3RpdmUgXHUwMDI2XHUwMDI2IHJtLVx1MDAzZXJkbWEub3BfbmVudHMgXHUwMDI2XHUwMDI2ICFybS1cdTAwM2VyZG1hLm9wX3dyaXRlIFx1MDAyNlx1MDAyNlxuK1x0ICAgICFybS1cdTAwM2VyZG1hLm9wX29kcF9tcilcbitcdFx0cmV0dXJuIHRydWU7XG4rXHRyZXR1cm4gcm0tXHUwMDNlYXRvbWljLm9wX2FjdGl2ZTtcbit9XG4rXG4gdm9pZCByZHNfbWVzc2FnZV9wdXQoc3RydWN0IHJkc19tZXNzYWdlICpybSlcbiB7XG4gXHRyZHNkZWJ1ZyhcInB1dCBybSAlcCByZWYgJWRcXG5cIiwgcm0sIHJlZmNvdW50X3JlYWQoXHUwMDI2cm0tXHUwMDNlbV9yZWZjb3VudCkpO1xuQEAgLTE4OSw2ICsyMTIsMTcgQEAgdm9pZCByZHNfbWVzc2FnZV9wdXQoc3RydWN0IHJkc19tZXNzYWdlICpybSlcbiBcdGlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoXHUwMDI2cm0tXHUwMDNlbV9yZWZjb3VudCkpIHtcbiBcdFx0QlVHX09OKCFsaXN0X2VtcHR5KFx1MDAyNnJtLVx1MDAzZW1fc29ja19pdGVtKSk7XG4gXHRcdEJVR19PTighbGlzdF9lbXB0eShcdTAwMjZybS1cdTAwM2VtX2Nvbm5faXRlbSkpO1xuK1xuK1x0XHQvKiBUaGUgZmluYWwgcHV0IG1heSBjb21lIGZyb20gdGhlIElCIHNlbmQgY29tcGxldGlvblxuK1x0XHQgKiB0YXNrbGV0OyBwYWdlIGRpcnR5aW5nIG11c3QgYmUgZGVmZXJyZWQgdG8gcHJvY2Vzc1xuK1x0XHQgKiBjb250ZXh0IHRoZW4uXG4rXHRcdCAqL1xuK1x0XHRpZiAoIWluX3Rhc2soKSBcdTAwMjZcdTAwMjYgcmRzX21lc3NhZ2VfZGlydGllc19wYWdlcyhybSkpIHtcbitcdFx0XHRJTklUX1dPUksoXHUwMDI2cm0tXHUwMDNlbV9wdXJnZV93b3JrLCByZHNfbWVzc2FnZV9wdXJnZV93b3JrZXIpO1xuK1x0XHRcdHF1ZXVlX3dvcmsocmRzX3dxLCBcdTAwMjZybS1cdTAwM2VtX3B1cmdlX3dvcmspO1xuK1x0XHRcdHJldHVybjtcbitcdFx0fVxuK1xuIFx0XHRyZHNfbWVzc2FnZV9wdXJnZShybSk7XG4gXG4gXHRcdGtmcmVlKHJtKTtcbmRpZmYgLS1naXQgYS9uZXQvcmRzL3JkbWEuYyBiL25ldC9yZHMvcmRtYS5jXG5pbmRleCA2MWZiNmU0NTI4MWJmMS4uNWY1NzUzYWZkY2RjYmQgMTAwNjQ0XG4tLS0gYS9uZXQvcmRzL3JkbWEuY1xuKysrIGIvbmV0L3Jkcy9yZG1hLmNcbkBAIC0xMTcsNiArMTE3LDcgQEAgdm9pZCBfX3Jkc19wdXRfbXJfZmluYWwoc3RydWN0IGtyZWYgKmtyZWYpXG4gXHRzdHJ1Y3QgcmRzX21yICptciA9IGNvbnRhaW5lcl9vZihrcmVmLCBzdHJ1Y3QgcmRzX21yLCByX2tyZWYpO1xuIFxuIFx0cmRzX2Rlc3Ryb3lfbXIobXIpO1xuK1x0c29ja19wdXQocmRzX3JzX3RvX3NrKG1yLVx1MDAzZXJfc29jaykpO1xuIFx0a2ZyZWUobXIpO1xuIH1cbiBcbkBAIC0yNDMsNyArMjQ0LDExIEBAIHN0YXRpYyBpbnQgX19yZHNfcmRtYV9tYXAoc3RydWN0IHJkc19zb2NrICpycywgc3RydWN0IHJkc19nZXRfbXJfYXJncyAqYXJncyxcbiBcdGtyZWZfaW5pdChcdTAwMjZtci1cdTAwM2VyX2tyZWYpO1xuIFx0UkJfQ0xFQVJfTk9ERShcdTAwMjZtci1cdTAwM2VyX3JiX25vZGUpO1xuIFx0bXItXHUwMDNlcl90cmFucyA9IHJzLVx1MDAzZXJzX3RyYW5zcG9ydDtcbitcdC8qIFRoZSBNUiBjYW4gb3V0bGl2ZSBpdHMgc29ja2V0OiBhIHNvY2tldCByZWZlcmVuY2UgaXMgaGVsZFxuK1x0ICogdW50aWwgdGhlIGZpbmFsIGtyZWYgaXMgZHJvcHBlZCBpbiBfX3Jkc19wdXRfbXJfZmluYWwoKS5cbitcdCAqL1xuIFx0bXItXHUwMDNlcl9zb2NrID0gcnM7XG4rXHRzb2NrX2hvbGQocmRzX3JzX3RvX3NrKHJzKSk7XG4gXG4gXHRpZiAoYXJncy1cdTAwM2VmbGFncyBcdTAwMjYgUkRTX1JETUFfVVNFX09OQ0UpXG4gXHRcdG1yLVx1MDAzZXJfdXNlX29uY2UgPSAxO1xuQEAgLTQ5NSw3ICs1MDAsOSBAQCB2b2lkIHJkc19yZG1hX2ZyZWVfb3Aoc3RydWN0IHJtX3JkbWFfb3AgKnJvKVxuIFxuIFx0XHRcdC8qIE1hcmsgcGFnZSBkaXJ0eSBpZiBpdCB3YXMgcG9zc2libHkgbW9kaWZpZWQsIHdoaWNoXG4gXHRcdFx0ICogaXMgdGhlIGNhc2UgZm9yIGEgUkRNQV9SRUFEIHdoaWNoIGNvcGllcyBmcm9tIHJlbW90ZVxuLVx0XHRcdCAqIHRvIGxvY2FsIG1lbW9yeVxuK1x0XHRcdCAqIHRvIGxvY2FsIG1lbW9yeS4gIERpcnR5aW5nIHRoZSBwYWdlIGNhbiBzbGVlcCwgc29cbitcdFx0XHQgKiByZHNfbWVzc2FnZV9wdXQoKSBkZWZlcnMgdGhlIHB1cmdlIG9mIHN1Y2ggb3BzIHRvXG4rXHRcdFx0ICogcHJvY2VzcyBjb250ZXh0LlxuIFx0XHRcdCAqL1xuIFx0XHRcdHVucGluX3VzZXJfcGFnZXNfZGlydHlfbG9jayhcdTAwMjZwYWdlLCAxLCAhcm8tXHUwMDNlb3Bfd3JpdGUpO1xuIFx0XHR9XG5AQCAtNTEzLDcgKzUyMCwxMCBAQCB2b2lkIHJkc19hdG9taWNfZnJlZV9vcChzdHJ1Y3Qgcm1fYXRvbWljX29wICphbylcbiBcbiBcdC8qIE1hcmsgcGFnZSBkaXJ0eSBpZiBpdCB3YXMgcG9zc2libHkgbW9kaWZpZWQsIHdoaWNoXG4gXHQgKiBpcyB0aGUgY2FzZSBmb3IgYSBSRE1BX1JFQUQgd2hpY2ggY29waWVzIGZyb20gcmVtb3RlXG4tXHQgKiB0byBsb2NhbCBtZW1vcnkgKi9cbitcdCAqIHRvIGxvY2FsIG1lbW9yeS4gIERpcnR5aW5nIHRoZSBwYWdlIGNhbiBzbGVlcCwgc29cbitcdCAqIHJkc19tZXNzYWdlX3B1dCgpIGRlZmVycyB0aGUgcHVyZ2Ugb2Ygc3VjaCBvcHMgdG9cbitcdCAqIHByb2Nlc3MgY29udGV4dC5cbitcdCAqL1xuIFx0dW5waW5fdXNlcl9wYWdlc19kaXJ0eV9sb2NrKFx1MDAyNnBhZ2UsIDEsIHRydWUpO1xuIFxuIFx0a2ZyZWUoYW8tXHUwMDNlb3Bfbm90aWZpZXIpO1xuQEAgLTc0Nyw2ICs3NTcsMTAgQEAgaW50IHJkc19jbXNnX3JkbWFfYXJncyhzdHJ1Y3QgcmRzX3NvY2sgKnJzLCBzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtLFxuIFx0XHRcdH1cbiBcdFx0XHRyZHNkZWJ1ZyhcIk5lZWQgb2RwOyBsb2NhbF9vZHBfbXIgJXAgdHJhbnNfcHJpdmF0ZSAlcFxcblwiLFxuIFx0XHRcdFx0IGxvY2FsX29kcF9tciwgbG9jYWxfb2RwX21yLVx1MDAzZXJfdHJhbnNfcHJpdmF0ZSk7XG4rXHRcdFx0LyogRnJvbSBoZXJlIG9uIHRoZSBNUiBpcyB0b3JuIGRvd24gdGhyb3VnaFxuK1x0XHRcdCAqIF9fcmRzX3B1dF9tcl9maW5hbCgpLCB3aGljaCBkcm9wcyB0aGlzIHJlZmVyZW5jZS5cbitcdFx0XHQgKi9cbitcdFx0XHRzb2NrX2hvbGQocmRzX3JzX3RvX3NrKHJzKSk7XG4gXHRcdFx0b3AtXHUwMDNlb3Bfb2RwX21yID0gbG9jYWxfb2RwX21yO1xuIFx0XHRcdG9wLVx1MDAzZW9wX29kcF9hZGRyID0gaW92LVx1MDAzZWFkZHI7XG4gXHRcdH1cbmRpZmYgLS1naXQgYS9uZXQvcmRzL3Jkcy5oIGIvbmV0L3Jkcy9yZHMuaFxuaW5kZXggNmUwNzkwZTRiNTcwM2IuLjk4MmYzZTQwNjc3M2ZhIDEwMDY0NFxuLS0tIGEvbmV0L3Jkcy9yZHMuaFxuKysrIGIvbmV0L3Jkcy9yZHMuaFxuQEAgLTQ0NSw2ICs0NDUsMTIgQEAgc3RydWN0IHJkc19tZXNzYWdlIHtcbiBcbiBcdHZvaWRcdFx0XHQqbV9maW5hbF9vcDtcbiBcbitcdC8qIEZyZWVzIHRoZSBtZXNzYWdlIGZyb20gcHJvY2VzcyBjb250ZXh0IHdoZW4gdGhlIGZpbmFsIHB1dFxuK1x0ICogaGFwcGVucyBpbiBhdG9taWMgY29udGV4dCBidXQgcHVyZ2luZyBuZWVkcyB0byBkaXJ0eSB1c2VyXG4rXHQgKiBwYWdlcywgd2hpY2ggY2FuIHNsZWVwLlxuK1x0ICovXG4rXHRzdHJ1Y3Qgd29ya19zdHJ1Y3RcdG1fcHVyZ2Vfd29yaztcbitcbiBcdHN0cnVjdCB7XG4gXHRcdHN0cnVjdCBybV9hdG9taWNfb3Age1xuIFx0XHRcdGludFx0XHRcdG9wX3R5cGU7XG5kaWZmIC0tZ2l0IGEvbmV0L3Jkcy9zZW5kLmMgYi9uZXQvcmRzL3NlbmQuY1xuaW5kZXggNjhiZTFiZjBlMGFkZjkuLjdlNDhmNjRkZmFhNjc5IDEwMDY0NFxuLS0tIGEvbmV0L3Jkcy9zZW5kLmNcbisrKyBiL25ldC9yZHMvc2VuZC5jXG5AQCAtMzM5LDkgKzMzOSwyMSBAQCBpbnQgcmRzX3NlbmRfeG1pdChzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3ApXG4gXHRcdFx0ICAgIChybS1cdTAwM2VyZG1hLm9wX2FjdGl2ZSBcdTAwMjZcdTAwMjZcbiBcdFx0XHQgICAgdGVzdF9iaXQoUkRTX01TR19SRVRSQU5TTUlUVEVELCBcdTAwMjZybS1cdTAwM2VtX2ZsYWdzKSkpIHtcbiBcdFx0XHRcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmNwLVx1MDAzZWNwX2xvY2ssIGZsYWdzKTtcbi1cdFx0XHRcdGlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoUkRTX01TR19PTl9DT05OLCBcdTAwMjZybS1cdTAwM2VtX2ZsYWdzKSlcbi1cdFx0XHRcdFx0bGlzdF9tb3ZlKFx1MDAyNnJtLVx1MDAzZW1fY29ubl9pdGVtLCBcdTAwMjZ0b19iZV9kcm9wcGVkKTtcbi1cdFx0XHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2Y3AtXHUwMDNlY3BfbG9jaywgZmxhZ3MpO1xuK1x0XHRcdFx0aWYgKHRlc3RfYW5kX2NsZWFyX2JpdChSRFNfTVNHX09OX0NPTk4sXG4rXHRcdFx0XHRcdFx0ICAgICAgIFx1MDAyNnJtLVx1MDAzZW1fZmxhZ3MpKSB7XG4rXHRcdFx0XHRcdC8qIG91ciByZWYgaXMgcHV0IGFmdGVyIHRoZSBiYXRjaCAqL1xuK1x0XHRcdFx0XHRsaXN0X21vdmUoXHUwMDI2cm0tXHUwMDNlbV9jb25uX2l0ZW0sXG4rXHRcdFx0XHRcdFx0ICBcdTAwMjZ0b19iZV9kcm9wcGVkKTtcbitcdFx0XHRcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZjcC1cdTAwM2VjcF9sb2NrLFxuK1x0XHRcdFx0XHRcdFx0ICAgICAgIGZsYWdzKTtcbitcdFx0XHRcdH0gZWxzZSB7XG4rXHRcdFx0XHRcdC8qIGFscmVhZHkgb2ZmIHRoZSBjb25uIGxpc3Q7IGRyb3BcbitcdFx0XHRcdFx0ICogdGhlIHJlZiB0YWtlbiBhYm92ZSBvdXJzZWx2ZXNcbitcdFx0XHRcdFx0ICovXG4rXHRcdFx0XHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2Y3AtXHUwMDNlY3BfbG9jayxcbitcdFx0XHRcdFx0XHRcdCAgICAgICBmbGFncyk7XG4rXHRcdFx0XHRcdHJkc19tZXNzYWdlX3B1dChybSk7XG4rXHRcdFx0XHR9XG4gXHRcdFx0XHRjb250aW51ZTtcbiBcdFx0XHR9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxMDo0NToyOC4wNzUzMDYwNzlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2ODcxOTk4OTI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFJEUyBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggaGVyZSB0aGF04oCZcyB0b3VjaGluZyB0aGUgUkRTIHN1YnN5c3RlbSBpbiB0aGUgTGludXgga2VybmVsLiBJdCBsb29rcyBsaWtlIGl0J3MgbWFraW5nIGNoYW5nZXMgdG8gc2V2ZXJhbCBrZXkgZmlsZXM6IGBpYi5jYCwgYG1lc3NhZ2UuY2AsIGByZG1hLmNgLCBgcmRzLmhgLCBhbmQgYHNlbmQuY2AuIE15IGluaXRpYWwgcmVhZCBzdWdnZXN0cyB0aGV54oCZcmUgaW50cm9kdWNpbmcgYSBkZWZlcnJlZCBwdXJnZSBtZWNoYW5pc20gZm9yIFJEUyBtZXNzYWdlcyB0aGF0IGRpcnR5IHBhZ2VzLiBJdCBtYWtlcyBzZW5zZSwgYXMgYXRvbWljIGNvbnRleHRzIGFyZSB1c3VhbGx5IHByb2JsZW1hdGljIHdoZW4gc2xlZXBpbmcgaXMgaW52b2x2ZWQuIFRoYXTigJlzIHByb2JhYmx5IHRoZSBtYWluIHBlcmZvcm1hbmNlIHR3ZWFrLlxuXG5UaGUgcGF0Y2ggYWxzbyBzZWVtcyB0byBiZSBhZGRyZXNzaW5nIHNvbWUgcmVmZXJlbmNlIGNvdW50aW5nIGlzc3VlcyByZWxhdGVkIHRvIE1ScyBhbmQgc29ja2V0cy4gR29vZCwgdGhvc2UgYXJlIGFsd2F5cyB0cmlja3kgYW5kIGNhbiBsZWFkIHRvIHNlcmlvdXMgcHJvYmxlbXMgaWYgbm90IGhhbmRsZWQgY29ycmVjdGx5LiBUaGV5J3JlIHRvdWNoaW5nIGBzb2NrX2hvbGRgIGFuZCBgc29ja19wdXRgLCBzbyBJJ2xsIHdhbnQgdG8gcGF5IGV4dHJhIGF0dGVudGlvbiB0byB0aG9zZSBjb2RlIHNlZ21lbnRzLiBBbHNvLCBhIGZpeCBpbiBgcmRzX3NlbmRfeG1pdGAsIHdoZXJlIG1lc3NhZ2VzIHdlcmUgcG90ZW50aWFsbHkgYmVpbmcgZHJvcHBlZCBmcm9tIHRoZSBjb25uZWN0aW9uIGxpc3QgaW1wcm9wZXJseS4gQWdhaW4sIHRoaXMgaXMgdGhlIHNvcnQgb2YgdGhpbmcgdGhhdCBjYW4gYml0ZSB5b3UgbGF0ZXIuXG5cbk5vdywgbXkgcHJpbWFyeSBjb25jZXJuIGlzIHJlYWNoYWJpbGl0eSBhbmQgZnVuY3Rpb25hbGl0eS4gU2luY2UgUkRTIGlzIGEgbmV0d29yayBwcm90b2NvbCwgSSdtIGFzc3VtaW5nIGl0J3MgYWxyZWFkeSBmdW5jdGlvbmFsIGluIGl0cyBleGlzdGluZyBzdGF0ZSwgYnV0IEkgZGVmaW5pdGVseSBuZWVkIHRvIHZlcmlmeSB0aGF0IHRoaXMgcGF0Y2ggZG9lc24ndCBicmVhayBhbnl0aGluZyBvciBjcmVhdGUgbmV3IHZ1bG5lcmFiaWxpdGllcy4gVGhlIG1vc3QgZWZmZWN0aXZlIGFwcHJvYWNoIHdvdWxkIGJlIHRvIGZ1enogaXQuXG5cbkknbGwgbmVlZCB0byBwaW5wb2ludCB0aGUgY3JpdGljYWwgZnVuY3Rpb25zIHRoaXMgcGF0Y2ggaW50ZXJhY3RzIHdpdGggZGlyZWN0bHkuIExldCdzIHNlZS4uLiBJJ3ZlIGdvdDpcblxuKiAgIGByZHNfbWVzc2FnZV9wdXRgXG4qICAgYHJkc19zZW5kX3htaXRgXG4qICAgYHJkc19jbXNnX3JkbWFfYXJnc2BcbiogICBgcmRzX3JkbWFfZnJlZV9vcGBcbiogICBgcmRzX2F0b21pY19mcmVlX29wYFxuKiAgIGBfX3Jkc19yZG1hX21hcGBcbiogICBgX19yZHNfcHV0X21yX2ZpbmFsYFxuXG5UaGVzZSBhcmUgZGVmaW5pdGVseSB0aGUga2V5IGFyZWFzIHRvIHByb2JlIHdpdGggZnV6emluZy5cblxuTmV4dCwgSSdsbCByZXZpZXcgdGhlIFJEUyBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEknbGwgc2VhcmNoIGZvciBcIlJEU1wiIGluIHNvbWV0aGluZyBsaWtlIGBuZXQvcmRzL0tjb25maWdgIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IHNldHRpbmdzIHRoYXQgaW5mbHVlbmNlIHRoZSBiZWhhdmlvciBvZiB0aGVzZSBmdW5jdGlvbnMuIEtub3dpbmcgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB3aWxsIGJlIGNyaXRpY2FsIGZvciBlZmZlY3RpdmUgZnV6emluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDM1MSwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwNywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDEwOjQ1OjM0Ljk0NzMwNzY4M1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2Mjk3NTYwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgUkRTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9yZHMvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvcmRzL0tjb25maWctMi1cXG5uZXQvcmRzL0tjb25maWc6Mzpjb25maWcgUkRTXFxubmV0L3Jkcy9LY29uZmlnLTQtXFx0dHJpc3RhdGUgXFxcIlRoZSBSZWxpYWJsZSBEYXRhZ3JhbSBTb2NrZXRzIFByb3RvY29sXFxcIlxcbi0tXFxubmV0L3Jkcy9LY29uZmlnLTktXFxubmV0L3Jkcy9LY29uZmlnOjEwOmNvbmZpZyBSRFNfUkRNQVxcbm5ldC9yZHMvS2NvbmZpZy0xMS1cXHR0cmlzdGF0ZSBcXFwiUkRTIG92ZXIgSW5maW5pYmFuZFxcXCJcXG4tLVxcbm5ldC9yZHMvS2NvbmZpZy0xNi1cXG5uZXQvcmRzL0tjb25maWc6MTc6Y29uZmlnIFJEU19UQ1BcXG5uZXQvcmRzL0tjb25maWctMTgtXFx0dHJpc3RhdGUgXFxcIlJEUyBvdmVyIFRDUFxcXCJcXG4tLVxcbm5ldC9yZHMvS2NvbmZpZy0yNC1cXG5uZXQvcmRzL0tjb25maWc6MjU6Y29uZmlnIFJEU19ERUJVR1xcbm5ldC9yZHMvS2NvbmZpZy0yNi1cXHRib29sIFxcXCJSRFMgZGVidWdnaW5nIG1lc3NhZ2VzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxMDo0NTozNS4wMTAyOTE2MzJaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NzAwMjQzMTcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUkRTIENvbmZpZ3VyYXRpb24gYW5kIFBvdGVudGlhbCBJbXBhY3Qgb2YgYSBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIGNvbmZpZ3VyYXRpb24gb3B0aW9uczogYFJEU2AsIGBSRFNfUkRNQWAsIGFuZCBgUkRTX1RDUGAuIFJpZ2h0IGF3YXksIG15IGV4cGVydCBpbnR1aXRpb24gdGVsbHMgbWUgdGhhdCB0aGlzIGlzIHJlbGF0ZWQgdG8gdGhlIFJlbGlhYmxlIERhdGFncmFtIFNvY2tldHMgKFJEUykgcHJvdG9jb2wsIHBvc3NpYmx5IGZvciBkaWZmZXJlbnQgdHJhbnNwb3J0cy4gR2l2ZW4gdGhhdCB0aGUgcGF0Y2ggbW9kaWZpZXMgYG5ldC9yZHMvaWIuY2AsIG15IGJyYWluIGltbWVkaWF0ZWx5IGp1bXBzIHRvIGBSRFNfUkRNQWAuIFRoZSBgaWIuY2AgZmlsZSBuYW1lIGlzIGEgZGVhZCBnaXZlYXdheSwgZ2l2ZW4gXCJpYlwiIGltcGxpZXMgSW5maW5pQmFuZCwgYSBjb21tb24gUkRNQSB0cmFuc3BvcnQuIEl0J3MgbGlrZWx5IHRoZSBwYXRjaCBkZWFscyB3aXRoIHRoZSBSRE1BIHNwZWNpZmljIGltcGxlbWVudGF0aW9uIHdpdGhpbiBSRFMuIFRvIGNvbmZpcm0gdGhpcyBhc3NvY2lhdGlvbiwgSSdtIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgdGhlIGBuZXQvcmRzL01ha2VmaWxlYC4gVGhhdCdsbCBoZWxwIG1lIHVuZGVyc3RhbmQgaG93IGBpYi5jYCBpcyBjb21waWxlZCBpbnRvIHRoZSBSRFMgbW9kdWxlLCBnaXZpbmcgbWUgdGhlIGZpbmFsIHBpZWNlIG9mIGNvbmZpcm1hdGlvbiBJIG5lZWQgYWJvdXQgaXRzIGRpcmVjdCBhc3NvY2lhdGlvbiB3aXRoIGBSRFNfUkRNQWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUzNTAsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxMDo0NTo0MC43MTA1MzY4NDRaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjEzNzY5MDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaWJcXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3Jkcy9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvcmRzL01ha2VmaWxlPTg9cmRzX3JkbWEteSA6PVxcdHJkbWFfdHJhbnNwb3J0Lm8gXFxcXFxcbm5ldC9yZHMvTWFrZWZpbGU6OTpcXHRcXHRcXHRpYi5vIGliX2NtLm8gaWJfcmVjdi5vIGliX3JpbmcubyBpYl9zZW5kLm8gaWJfc3RhdHMubyBcXFxcXFxubmV0L3Jkcy9NYWtlZmlsZS0xMC1cXHRcXHRcXHRpYl9zeXNjdGwubyBpYl9yZG1hLm8gaWJfZnJtci5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDEwOjQ1OjQwLjc3MTkxNzgyM1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3MDM1OTczMjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzaW5nOlxuXG4qKkRlbHZpbmcgaW50byB0aGUgUkRTX1JETUEgQnVpbGQgUHJvY2VzcyoqXG5cblJpZ2h0LCBzbyBgaWIub2AgaXMgZGVmaW5pdGVseSBwYXJ0IG9mIHRoZSBgcmRzX3JkbWEteWAgbW9kdWxlLCBhbmQgdGhhdCBtb2R1bGUgaXMgKnNwZWNpZmljYWxseSogY29tcGlsZWQgd2hlbiBgQ09ORklHX1JEU19SRE1BYCBpcyBlbmFibGVkLiBNYWtlcyBzZW5zZS4gVG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jeSBjaGFpbiwgYW5kIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIGl0J3MgYnVpbHQsIEkgbmVlZCB0byBkaWcgaW50byB0aGUgYG5ldC9yZHMvS2NvbmZpZ2AgZmlsZS4gVGhhdCdzIHdoZXJlIGFsbCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGF0IHBhcnQgb2YgdGhlIG5ldHdvcmtpbmcgc3RhY2sgYXJlIGRlZmluZWQsIGluY2x1ZGluZyB0aGUgZGVwZW5kZW5jaWVzIG9mIGBSRFNfUkRNQWAuIEkgbmVlZCB0byBmaWd1cmUgb3V0ICpleGFjdGx5KiB3aGF0IHRyaWdnZXJzIHRoYXQgZmxhZywgYW5kIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgdW5kZXJseWluZyByZXF1aXJlbWVudHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU3NDMsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxMDo0NTo0NC40NzU1MTc3NzVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjI0NTIwOTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFJEU19SRE1BXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9yZHMvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvcmRzL0tjb25maWc9Mz1jb25maWcgUkRTXFxuLS1cXG5uZXQvcmRzL0tjb25maWctOS1cXG5uZXQvcmRzL0tjb25maWc6MTA6Y29uZmlnIFJEU19SRE1BXFxubmV0L3Jkcy9LY29uZmlnLTExLVxcdHRyaXN0YXRlIFxcXCJSRFMgb3ZlciBJbmZpbmliYW5kXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxMDo0NTo0NC41Mzc5NzQ3ODVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDk2MjA1OTU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBSRFMgS2NvbmZpZyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHNvbWV0aGluZyBhYm91dCB0aGUgUkRTIGNvbmZpZ3VyYXRpb24uIExldCdzIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgYG5ldC9yZHMvS2NvbmZpZ2AsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAxMC4gVGhhdCdzIHVzdWFsbHkgd2hlcmUgdGhlIHRvcC1sZXZlbCBvcHRpb25zLCB0aGUgY29yZSBmdW5jdGlvbmFsaXR5IHRvZ2dsZXMsIGFuZCBtYXliZSB0aGUgb3ZlcmFsbCBSRFMgYXJjaGl0ZWN0dXJlIGFyZSBkZWZpbmVkLiBJIGV4cGVjdCB0byBmaW5kIHRoZSBmdW5kYW1lbnRhbCBrbm9icyBhbmQgbGV2ZXJzIGNvbnRyb2xsaW5nIHRoZSBSZW1vdGUgRGlyZWN0IE1lbW9yeSBBY2Nlc3MgKFJETUEpIG92ZXIgVENQL0lQIHN0YWNrIGluIHRoYXQgYXJlYS4gSSdtIGhvcGluZyB0byBxdWlja2x5IGdyYXNwIHRoZSBjb3JlIGRlcGVuZGVuY2llcyBhbmQgYW55IG1ham9yIGZlYXR1cmUgZmxhZ3MuIExpbmUgMTAgc2hvdWxkIG9mZmVyIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgdGhhdC4gVGhpcyBpcyB0aGUgYmVkcm9jayBvZiB1bmRlcnN0YW5kaW5nIGhvdyBldmVyeXRoaW5nIGlzIHB1dCB0b2dldGhlciwgZnJvbSB0aGUgdmVyeSBjb3JlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MDY1LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTA6NDU6NDguMDM0MTgzNDFaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTcyNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3Jkcy9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRcXG4gICAzOlxcdGNvbmZpZyBSRFNcXG4gICA0OlxcdFxcdHRyaXN0YXRlIFxcXCJUaGUgUmVsaWFibGUgRGF0YWdyYW0gU29ja2V0cyBQcm90b2NvbFxcXCJcXG4gICA1OlxcdFxcdGRlcGVuZHMgb24gSU5FVFxcbiAgIDY6XFx0XFx0aGVscFxcbiAgIDc6XFx0XFx0ICBUaGUgUkRTIChSZWxpYWJsZSBEYXRhZ3JhbSBTb2NrZXRzKSBwcm90b2NvbCBwcm92aWRlcyByZWxpYWJsZSxcXG4gICA4OlxcdFxcdCAgc2VxdWVuY2VkIGRlbGl2ZXJ5IG9mIGRhdGFncmFtcyBvdmVyIEluZmluaWJhbmQgb3IgVENQLlxcbiAgIDk6XFx0XFxuICAxMDpcXHRjb25maWcgUkRTX1JETUFcXG4gIDExOlxcdFxcdHRyaXN0YXRlIFxcXCJSRFMgb3ZlciBJbmZpbmliYW5kXFxcIlxcbiAgMTI6XFx0XFx0ZGVwZW5kcyBvbiBSRFMgXFx1MDAyNlxcdTAwMjYgSU5GSU5JQkFORCBcXHUwMDI2XFx1MDAyNiBJTkZJTklCQU5EX0FERFJfVFJBTlNcXG4gIDEzOlxcdFxcdGhlbHBcXG4gIDE0OlxcdFxcdCAgQWxsb3cgUkRTIHRvIHVzZSBJbmZpbmliYW5kIGFzIGEgdHJhbnNwb3J0LlxcbiAgMTU6XFx0XFx0ICBUaGlzIHRyYW5zcG9ydCBzdXBwb3J0cyBSRE1BIG9wZXJhdGlvbnMuXFxuICAxNjpcXHRcXG4gIDE3OlxcdGNvbmZpZyBSRFNfVENQXFxuICAxODpcXHRcXHR0cmlzdGF0ZSBcXFwiUkRTIG92ZXIgVENQXFxcIlxcbiAgMTk6XFx0XFx0ZGVwZW5kcyBvbiBSRFNcXG4gIDIwOlxcdFxcdGRlcGVuZHMgb24gSVBWNiB8fCAhSVBWNlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxMDo0NTo0OC4wMzQyNDQzNFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzgwOTY0NDQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyB0aGUgRGVwZW5kZW5jaWVzIG9mIFJEU19SRE1BKipcblxuT2theSwgc28gYFJEU19SRE1BYCBoYXMgc29tZSBrZXkgZGVwZW5kZW5jaWVzLiBJIHNlZSBpdCByZWxpZXMgb24gYFJEU2AsIGBJTkZJTklCQU5EYCwgYW5kIGBJTkZJTklCQU5EX0FERFJfVFJBTlNgLiBDbGVhcmx5LCB1bmRlcnN0YW5kaW5nIGhvdyB0aG9zZSBwaWVjZXMgZml0IGlzIGNydWNpYWwgdG8gdGhpcy4gVG8gZ2V0IGEgYmV0dGVyIGdyYXNwIG9uIHRoZXNlIGRlcGVuZGVuY2llcyBhbmQgaG93IHRoZXkncmUgY29uZmlndXJlZCwgdGhlIGxvZ2ljYWwgbmV4dCBzdGVwIGlzIHRvIGRpdmUgaW50byB0aGUgS2NvbmZpZyBmaWxlcy4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gY2hlY2sgb3V0IGBkcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZ2AgdG8gc2VlIHRoZSBkZWZpbml0aW9ucyBhbmQgcmVsYXRpb25zaGlwcyBvZiBgSU5GSU5JQkFORGAgYW5kIGBJTkZJTklCQU5EX0FERFJfVFJBTlNgLiBUaGlzIHdpbGwgdGVsbCBtZSBob3cgdGhleSBhcmUgc2V0IHVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NTQxLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxMDo0NTo1MS40MTUyMTExMzlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY3MDc0MTg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJTkZJTklCQU5EXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWc6MjptZW51Y29uZmlnIElORklOSUJBTkRcXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJJbmZpbmlCYW5kIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZz0xNj1pZiBJTkZJTklCQU5EXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctMTctXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWc6MTg6Y29uZmlnIElORklOSUJBTkRfVVNFUl9NQURcXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy0xOS1cXHR0cmlzdGF0ZSBcXFwiSW5maW5pQmFuZCB1c2Vyc3BhY2UgTUFEIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy0yNy1cXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZzoyODpjb25maWcgSU5GSU5JQkFORF9VU0VSX0FDQ0VTU1xcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTI5LVxcdHRyaXN0YXRlIFxcXCJJbmZpbmlCYW5kIHVzZXJzcGFjZSBhY2Nlc3MgKHZlcmJzIGFuZCBDTSlcXFwiXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy0zOS1cXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZzo0MDpjb25maWcgSU5GSU5JQkFORF9VU0VSX0FDQ0VTU19DT1JFXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctNDEtXFx0Ym9vbFxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctNDMtXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWc6NDQ6Y29uZmlnIElORklOSUJBTkRfVVNFUl9NRU1cXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy00NS1cXHRib29sXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy01MC1cXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZzo1MTpjb25maWcgSU5GSU5JQkFORF9PTl9ERU1BTkRfUEFHSU5HXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctNTItXFx0Ym9vbCBcXFwiSW5maW5pQmFuZCBvbi1kZW1hbmQgcGFnaW5nIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy02My1cXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZzo2NDpjb25maWcgSU5GSU5JQkFORF9BRERSX1RSQU5TXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctNjUtXFx0Ym9vbCBcXFwiUkRNQS9DTVxcXCJcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTcxLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnOjcyOmNvbmZpZyBJTkZJTklCQU5EX0FERFJfVFJBTlNfQ09ORklHRlNcXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy03My1cXHRib29sXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy04MC1cXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZzo4MTpjb25maWcgSU5GSU5JQkFORF9WSVJUX0RNQVxcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTgyLVxcdGRlZl9ib29sICFISUdITUVNXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDEwOjQ1OjUxLjQ4MjI5MDUwN1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MzMwNzE4NjY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIFJEUyBSRE1BIEZ1bmN0aW9ucyoqXG5cbk9rYXksIHNvIHdlJ3JlIGRpdmluZyBpbnRvIHRoZSBSZW1vdGUgRGlyZWN0IE1lbW9yeSBBY2Nlc3MgKFJETUEpIGFzcGVjdHMgb2YgdGhlIFJlbGlhYmxlIERhdGFncmFtIFNvY2tldHMgKFJEUykgcHJvdG9jb2wuIEkgbmVlZCB0byBmb2N1cyBvbiB0aGVzZSBrZXkgY29tcG9uZW50czogYFJEU2AsIGBSRFNfUkRNQWAsIGBJTkZJTklCQU5EYCwgYW5kIGBJTkZJTklCQU5EX0FERFJfVFJBTlNgLiBJJ3ZlIGdvdCBhIGRlY2VudCBncmFzcCBvbiB0aGlzLCBidXQgbGV0J3Mgc2hhcnBlbiBvdXIgZm9jdXMuXG5cbk15IHBsYW4gaXMgdG8gaG9tZSBpbiBvbiB0aGUgZnVuY3Rpb25zIHRoYXQgZGlyZWN0bHkgaGFuZGxlIHRoZSBSRE1BIG9wZXJhdGlvbnMuIE15IGluaXRpYWwgbGlzdCBpbmNsdWRlcyBgcmRzX21lc3NhZ2VfcHV0YCwgYHJkc19zZW5kX3htaXRgLCBgcmRzX2Ntc2dfcmRtYV9hcmdzYCwgYHJkc19yZG1hX2ZyZWVfb3BgLCBgcmRzX2F0b21pY19mcmVlX29wYCwgYF9fcmRzX3JkbWFfbWFwYCwgYW5kIGBfX3Jkc19wdXRfbXJfZmluYWxgLiBJIG5lZWQgdG8gZW5zdXJlIHRoZXNlIGFyZSB0aGUgY29ycmVjdCBmdW5jdGlvbnMgdG8gYmUgZm9jdXNpbmcgb24uXG5cbk5vdywgdG8gc2VlIGlmIHRoZXkncmUgcmVsZXZhbnQsIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCB0aGVzZSBmdW5jdGlvbnMgYXJlIGV4cG9ydGVkLiBXZSBkb24ndCB3YW50IHRvIGdldCBkaXN0cmFjdGVkIGJ5IHN0YXRpYywgaW5saW5lZCBmdW5jdGlvbnMuIEJhc2VkIG9uIHRoZSBpbmZvcm1hdGlvbiBhdmFpbGFibGUsIEkgY2FuIGNvbmZpcm0gdGhhdCBgcmRzX21lc3NhZ2VfcHV0YCwgYHJkc19zZW5kX3htaXRgLCBgcmRzX2Ntc2dfcmRtYV9hcmdzYCwgYHJkc19yZG1hX2ZyZWVfb3BgLCBhbmQgYHJkc19hdG9taWNfZnJlZV9vcGAgYXJlIGFsbCBub24tc3RhdGljLCBzbyB3ZSdyZSBnb29kIHRoZXJlLiBgX19yZHNfcmRtYV9tYXBgIGlzIHN0YXRpYywgc28gSSBuZWVkIHRvIGRpZyBmdXJ0aGVyIHRvIHNlZSBpZiBpdCBpcyBpbmxpbmVkIC0gaWYgaXQgaXMgaW5saW5lZCwgaXQgd29uJ3QgYmUgb24gdGhlIGxpc3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjczNTgsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTA6NDU6NTYuODEzMDEyMzc1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NDM2Mzg0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdGF0aWMgaW50IF9fcmRzX3JkbWFfbWFwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9yZHMvcmRtYS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9yZHMvcmRtYS5jPTE1NT1zdGF0aWMgaW50IHJkc19waW5fcGFnZXModW5zaWduZWQgbG9uZyB1c2VyX2FkZHIsIHVuc2lnbmVkIGludCBucl9wYWdlcyxcXG4tLVxcbm5ldC9yZHMvcmRtYS5jLTE3Mi1cXG5uZXQvcmRzL3JkbWEuYzoxNzM6c3RhdGljIGludCBfX3Jkc19yZG1hX21hcChzdHJ1Y3QgcmRzX3NvY2sgKnJzLCBzdHJ1Y3QgcmRzX2dldF9tcl9hcmdzICphcmdzLFxcbm5ldC9yZHMvcmRtYS5jLTE3NC1cXHRcXHRcXHQgIHU2NCAqY29va2llX3JldCwgc3RydWN0IHJkc19tciAqKm1yX3JldCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTA6NDU6NTYuODc3MzgxMDc0WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1MzA3Mzk2NTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aGUgZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgUkRNQSBNZW1vcnkgUmVnaW9uIE1hbmFnZW1lbnQgaW4gUkRTKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IFJEUyBoYW5kbGVzIGl0cyBSRE1BIG1lbW9yeSByZWdpb25zLiBUaGUgZnVuY3Rpb24gYF9fcmRzX3JkbWFfbWFwYCBpcyBzdGF0aWMsIG1lYW5pbmcgaXQncyBvbmx5IHZpc2libGUgd2l0aGluIGl0cyBjb21waWxhdGlvbiB1bml0LiBJdCdzIGludm9rZWQgYnkgYHJkc19nZXRfbXJgIGFuZCBgcmRzX2dldF9tcl9mb3JfZGVzdGAsIHdoaWNoIG1ha2VzIHNlbnNlOyB0aGVzZSBmdW5jdGlvbnMgYXJlIGxpa2VseSByZXNwb25zaWJsZSBmb3IgYWNxdWlyaW5nIGFuZCBjb25maWd1cmluZyB0aGUgbWVtb3J5IHJlZ2lvbnMgZm9yIFJETUEgb3BlcmF0aW9ucy4gTm93LCBgX19yZHNfcHV0X21yX2ZpbmFsYCBpcyAqbm90KiBzdGF0aWMsIHdoaWNoIHN1Z2dlc3RzIGl0IG1pZ2h0IGJlIHVzZWQgbW9yZSBicm9hZGx5LCBwZXJoYXBzIGZvciByZWxlYXNpbmcgdGhlIG1lbW9yeSByZWdpb25zIHdoZW4gYSBtZXNzYWdlIGlzIGNvbXBsZXRlZC5cblxuU2luY2UgSSdtIHRyeWluZyB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIGxpZmVjeWNsZSBoZXJlLCBJIHRoaW5rIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkZWx2ZSBpbnRvIGhvdyBSRFMgbWFuYWdlcyB0aGUgbWVzc2FnZSBpdHNlbGYuIExldCdzIHNlZSBob3cgYHJkc19tZXNzYWdlX3B1dGAgZml0cyBpbnRvIHRoaXMgcGljdHVyZS4gSSdtIGhvcGluZyB0byBzZWUgaG93IHRoZSBtZW1vcnkgcmVnaW9uIG1hcHBpbmcgYW5kIHVubWFwcGluZyB0aWVzIGludG8gdGhlIG1lc3NhZ2UncyBsaWZlIGN5Y2xlLiBUaGlzIHdpbGwgcHJvYmFibHkgaW52b2x2ZSBpbnNwZWN0aW5nIGhvdyBtZXNzYWdlIGJ1ZmZlcnMgYXJlIGZyZWVkIGFmdGVyIHRyYW5zbWlzc2lvbiBvciByZWNlcHRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgxMjMsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxMDo0NjowMS40MDgxMjM1MjVaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyNTgwMTc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZvaWQgcmRzX21lc3NhZ2VfcHV0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9yZHMvbWVzc2FnZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9yZHMvbWVzc2FnZS5jPTIwMD1zdGF0aWMgYm9vbCByZHNfbWVzc2FnZV9kaXJ0aWVzX3BhZ2VzKHN0cnVjdCByZHNfbWVzc2FnZSAqcm0pXFxuLS1cXG5uZXQvcmRzL21lc3NhZ2UuYy0yMDctXFxubmV0L3Jkcy9tZXNzYWdlLmM6MjA4OnZvaWQgcmRzX21lc3NhZ2VfcHV0KHN0cnVjdCByZHNfbWVzc2FnZSAqcm0pXFxubmV0L3Jkcy9tZXNzYWdlLmMtMjA5LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTA6NDY6MDEuNDcwNzA4NzMzWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNDEyNTk4NzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGFuIGV4cGVydCBpbiB0aGlzIGZpZWxkLCBwcmVzZW50ZWQgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeTpcblxuKipEaWdnaW5nIGludG8gYHJkc19zZW5kX3htaXRgKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgdG8gdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIuIE15IGluaXRpYWwgdGhvdWdodCBpcyBjbGVhcjogbGV0J3Mgc3RhcnQgd2l0aCBgcmRzX3NlbmRfeG1pdGAuIEdpdmVuIG15IGV4cGVyaWVuY2UsIEkga25vdyB0aGlzIGZ1bmN0aW9uIGlzIGxpa2VseSBwaXZvdGFsLiBJdCdzIHRoZSBwb2ludCB3aGVyZSBkYXRhIHRyYW5zbWlzc2lvbiBwcm9iYWJseSBnZXRzIGluaXRpYXRlZCB3aXRoaW4gdGhlIFJlbW90ZSBEaXJlY3QgTWVtb3J5IEFjY2VzcyBvdmVyIFNvY2tldHMgKFJETUFvUykgc3RhY2suIFVuZGVyc3RhbmRpbmcgd2hhdCdzIGhhcHBlbmluZyB0aGVyZSBpcyBjcnVjaWFsIHRvIHRyb3VibGVzaG9vdCBhbnkgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MsIHBpbnBvaW50IHBvdGVudGlhbCBidWdzLCBvciBvcHRpbWl6ZSB0aGUgc2VuZCBwYXRoLiBJdCdzIHRoZSBtb3N0IGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgZm9yIGRpc3NlY3RpbmcgdGhlIGRhdGEgZmxvdy4gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGF0IGl0IGxpa2VseSBjb250YWlucyBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgbmV0d29yayBpbnRlcmZhY2UgY2FyZCAoTklDKSBkcml2ZXJzLCBSRE1BIHZlcmJzLCBhbmQgdGhlIHNvY2tldCBsYXllciAtIGFsbCB0aGluZ3MgSSdsbCBiZSBsb29raW5nIGZvciBhbmQgY29uc2lkZXJpbmcgaW4gbXkgYW5hbHlzaXMuIEl0J3MgdGltZSB0byBkaXZlIGluLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NTU4LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTA6NDY6MDQuODExOTcxNjMyWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTg5Mjk4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbnQgcmRzX3NlbmRfeG1pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvcmRzL3NlbmQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvcmRzL3NlbmQuYz0xMjg9c3RhdGljIGJvb2wgcmRzX21wcmRzX2NwMF9jYXRjaHVwKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubilcXG4tLVxcbm5ldC9yZHMvc2VuZC5jLTE4Ni0gKi9cXG5uZXQvcmRzL3NlbmQuYzoxODc6aW50IHJkc19zZW5kX3htaXQoc3RydWN0IHJkc19jb25uX3BhdGggKmNwKVxcbm5ldC9yZHMvc2VuZC5jLTE4OC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDEwOjQ2OjA0Ljg3Mzg3MDg3MVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTUyODAyMzI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqUkRTIENNU0cgUkRNQSBBcmd1bWVudHMgLSBDaGVja2luZyBNeSBBc3N1bXB0aW9ucyoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzLiBJJ20gdGFraW5nIGEgbG9vayBhdCBgcmRzX2Ntc2dfcmRtYV9hcmdzYCDigJMgdGhpcyBpcyBhIGNydWNpYWwgc3RydWN0dXJlLCBhbmQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ3ZlIGdvdCBhIHNvbGlkIGdyYXNwIG9uIGhvdyBpdCBmdW5jdGlvbnMuIEl0J3MgdGhlIGx5bmNocGluIGZvciBSRE1BIG9wZXJhdGlvbnMgd2l0aGluIHRoZSBSRFMgY29udGV4dCwgc28gYW55IGdhcHMgaW4gbXkgdW5kZXJzdGFuZGluZyBoZXJlIGNvdWxkIGxlYWQgdG8gc2lnbmlmaWNhbnQgcHJvYmxlbXMgZG93biB0aGUgbGluZS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IGFuZCB2ZXJpZnkgdGhhdCBJIGFtIGNsZWFyIG9uIGl0cyBwdXJwb3NlLCB1c2FnZSwgYW5kIGFueSBwb3RlbnRpYWwgY29ybmVyIGNhc2VzIGFzc29jaWF0ZWQgd2l0aCBpdC4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gcmVtaW5kIG15c2VsZiBob3cgaXQncyB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggZGlmZmVyZW50IFJETUEgdmVyYnMuIFRpbWUgdG8gZGlnIGluLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4OTE5LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTA6NDY6MDguNDI2Njc1MzQ2WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjM4NzgyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbnQgcmRzX2Ntc2dfcmRtYV9hcmdzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9yZHMvcmRtYS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9yZHMvcmRtYS5jPTU2Mz1pbnQgcmRzX3JkbWFfZXh0cmFfc2l6ZShzdHJ1Y3QgcmRzX3JkbWFfYXJncyAqYXJncyxcXG4tLVxcbm5ldC9yZHMvcmRtYS5jLTYxNC0gKi9cXG5uZXQvcmRzL3JkbWEuYzo2MTU6aW50IHJkc19jbXNnX3JkbWFfYXJncyhzdHJ1Y3QgcmRzX3NvY2sgKnJzLCBzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtLFxcbm5ldC9yZHMvcmRtYS5jLTYxNi1cXHRcXHQgICAgICAgc3RydWN0IGNtc2doZHIgKmNtc2csXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDEwOjQ2OjA4LjQ4OTA3MzU1NVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDIwMjg5OTY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkncmUgbXkgb3duOlxuXG4qKkFuYWx5emluZyB0aGUgYHJkc19yZG1hX2ZyZWVfb3BgIEZ1bmN0aW9uKipcblxuUmlnaHQsIGxldCdzIHN0YXJ0IHdpdGggYHJkc19yZG1hX2ZyZWVfb3BgLiBUaW1lIHRvIHJlZnJlc2ggbXkgbWVtb3J5IGFuZCBkaXNzZWN0IHRoaXMgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGluIHRoZSBvdmVyYWxsIFJETUEgZGF0YSBmbG93IHdpdGhpbiB0aGUgUkRTIHByb3RvY29sLiBTcGVjaWZpY2FsbHksIHdoYXQncyBpdHMgcHVycG9zZT8gSXMgaXQgZnJlZWluZyByZXNvdXJjZXMsIHNpZ25hbGluZyBjb21wbGV0aW9uLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gSSBzaG91bGQgY2hlY2sgaXRzIHVzYWdlIGFuZCBjcm9zcy1yZWZlcmVuY2UgaXQgd2l0aCB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBnZXQgdGhlIGNvbXBsZXRlIHBpY3R1cmUuIFRoZSBrZXkgaXMgdG8gdW5kZXJzdGFuZCBob3cgdGhlIFJEUyBzdGFjayBoYW5kbGVzIFJETUEgb3BlcmF0aW9ucyBhbmQgaG93IHRoaXMgZnVuY3Rpb24gZml0cyBpbnRvIHRoYXQgcHV6emxlLiBMZXQgbWUgYW5hbHl6ZSBpdHMgaW5wdXRzIGFuZCBvdXRwdXRzLiBBbnkgcG90ZW50aWFsIHBpdGZhbGxzIG9yIG9wdGltaXphdGlvbnMgd2lsbCBlbWVyZ2UgYXMgSSBkZWx2ZSBpbnRvIHRoZSBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5Mjc4LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTA6NDY6MTIuNTA5MzY1NjkzWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNjUwMjc3MTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidm9pZCByZHNfcmRtYV9mcmVlX29wXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9yZHMvcmRtYS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9yZHMvcmRtYS5jPTQ0Nj12b2lkIHJkc19yZG1hX3VudXNlKHN0cnVjdCByZHNfc29jayAqcnMsIHUzMiByX2tleSwgaW50IGZvcmNlKVxcbi0tXFxubmV0L3Jkcy9yZG1hLmMtNDkwLVxcbm5ldC9yZHMvcmRtYS5jOjQ5MTp2b2lkIHJkc19yZG1hX2ZyZWVfb3Aoc3RydWN0IHJtX3JkbWFfb3AgKnJvKVxcbm5ldC9yZHMvcmRtYS5jLTQ5Mi17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDEwOjQ2OjEyLjg3NDQwOTE4N1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTYzMjYxMTY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEknbSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6XG5cbioqRGl2aW5nIGludG8gYHJkc19hdG9taWNfZnJlZV9vcGAqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMgYHJkc19hdG9taWNfZnJlZV9vcGAgZnVuY3Rpb24uIEl0J3MgYSBjcml0aWNhbCBwaWVjZSwgYW5kIEkgd2FudCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaXRzIHJvbGUgd2l0aGluIHRoZSBsYXJnZXIgUkRTIGFyY2hpdGVjdHVyZS4gSSBuZWVkIHRvIHF1aWNrbHkgcmVjYWxsIGV4YWN0bHkgaG93IGl0J3MgdXNlZCwgZXNwZWNpYWxseSBpbiByZWxhdGlvbiB0byBtZW1vcnkgbWFuYWdlbWVudCBhbmQgYXRvbWljaXR5LiBJIHdhbnQgdG8gc2VlIGlmIGFueXRoaW5nIGp1bXBzIG91dCB0aGF0J3Mgd29ydGggcmVjb25zaWRlcmluZy4gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgY29uY3VycmVuY3kgaXNzdWVzLCBvciBvcHBvcnR1bml0aWVzIGZvciBvcHRpbWl6YXRpb24gaW4gaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSB1bmRlcmx5aW5nIGF0b21pYyBwcmltaXRpdmVzPyBOZWVkIHRvIHJlLWZhbWlsaWFyaXplIG15c2VsZiB3aXRoIHRoZSBzdXJyb3VuZGluZyBjb2RlLiBQZXJoYXBzIEknbGwgdHJhY2UgaXRzIGNhbGwgc2l0ZXMgdG8gcmVjb25zdHJ1Y3QgdGhlIGZsb3cgZnJvbSBtZW1vcnkgYWxsb2NhdGlvbiB0byBkZWFsbG9jYXRpb24uIEl0J3MgYWxsIGFib3V0IGVuc3VyaW5nIHRoYXQgdGhpcyBjcml0aWNhbCBwaWVjZSBpcyB1cCB0byB0aGUgc3RhbmRhcmRzIHRoYXQgSSdkIGV4cGVjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTYyMywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDEwOjQ2OjE2LjQzNzY3MzAzNVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjAxNzU2NDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidm9pZCByZHNfYXRvbWljX2ZyZWVfb3BcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3Jkcy9yZG1hLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3Jkcy9yZG1hLmM9NDkxPXZvaWQgcmRzX3JkbWFfZnJlZV9vcChzdHJ1Y3Qgcm1fcmRtYV9vcCAqcm8pXFxuLS1cXG5uZXQvcmRzL3JkbWEuYy01MTYtXFxubmV0L3Jkcy9yZG1hLmM6NTE3OnZvaWQgcmRzX2F0b21pY19mcmVlX29wKHN0cnVjdCBybV9hdG9taWNfb3AgKmFvKVxcbm5ldC9yZHMvcmRtYS5jLTUxOC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDEwOjQ2OjE2LjQ5Nzg1MzQ5NFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDY0NTYzMjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqQ2hlY2tpbmcgYF9fcmRzX3B1dF9tcl9maW5hbGAqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIHJpZ2h0IGluLiBUaGUgY29kZSBoYXMgZGlyZWN0ZWQgbWUgdG8gc2NydXRpbml6ZSB0aGUgYF9fcmRzX3B1dF9tcl9maW5hbGAgZnVuY3Rpb24uIEdpdmVuIG15IHVuZGVyc3RhbmRpbmcgb2YgUkRNQSAoUmVtb3RlIERpcmVjdCBNZW1vcnkgQWNjZXNzKSBhbmQgaG93IGl0J3MgaW1wbGVtZW50ZWQgaW4gdGhpcyBjb250ZXh0LCBJIGltbWVkaWF0ZWx5IHN0YXJ0IHRvIGNvbnNpZGVyIHdoYXQgaXRzIHNwZWNpZmljIHJvbGUgaXMuIE15IGV4cGVydGlzZSBzdWdnZXN0cyB0aGlzIGZ1bmN0aW9uIGlzIGxpa2VseSBhIGNydWNpYWwgcGFydCBvZiB0aGUgbWVtb3J5IHJlZ2lvbiAoTVIpIGxpZmVjeWNsZSBtYW5hZ2VtZW50IHdpdGhpbiB0aGUgUkRTIChSZWxpYWJsZSBEYXRhZ3JhbSBTb2NrZXRzKSBwcm90b2NvbC4gSSdtIGV4cGVjdGluZyB0aGlzIGZ1bmN0aW9uIGRlYWxzIHdpdGggdGhlIGZpbmFsIHN0YWdlcyBvZiBtZW1vcnkgcmVnaXN0cmF0aW9uIG9yIHVucmVnaXN0cmF0aW9uIGFuZCBwb3RlbnRpYWxseSByZWxlYXNlcyByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIGEgbWVtb3J5IHJlZ2lvbi4gSSdsbCBuZWVkIHRvIGxvb2sgY2xvc2VseSBhdCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUsIGFueSByZWxhdGVkIGRhdGEgc3RydWN0dXJlcywgYW5kIHRoZSBvdmVyYWxsIFJEUyBkYXRhIGZsb3cgdG8gY29uZmlybSBteSBpbml0aWFsIGh5cG90aGVzaXMgYW5kIGZ1bGx5IHVuZGVyc3RhbmQgaXRzIHB1cnBvc2UgYW5kIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcy4gSSBhbHNvIHdhbnQgdG8gc2VlIHdoZXJlIGl0IGlzIGNhbGxlZCBhbmQgd2hlbi4gQXJlIHRoZXJlIGFueSBlcnJvciBwYXRocyB0aGF0IHNob3VsZCBiZSBjb25zaWRlcmVkPyBMZXQncyBnZXQgdG8gd29yay5cblxuXG4iLCJJbnB1dFRva2VucyI6OTk3NiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDEwOjQ2OjE5Ljk2MjQxOTEzNFoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjU2MDM1MTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidm9pZCBfX3Jkc19wdXRfbXJfZmluYWxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3Jkcy9yZG1hLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3Jkcy9yZG1hLmM9OTU9c3RhdGljIHZvaWQgcmRzX2Rlc3Ryb3lfbXIoc3RydWN0IHJkc19tciAqbXIpXFxuLS1cXG5uZXQvcmRzL3JkbWEuYy0xMTQtXFxubmV0L3Jkcy9yZG1hLmM6MTE1OnZvaWQgX19yZHNfcHV0X21yX2ZpbmFsKHN0cnVjdCBrcmVmICprcmVmKVxcbm5ldC9yZHMvcmRtYS5jLTExNi17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDEwOjQ2OjIwLjAyODAyOTI4M1oiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1OTI4NDM0NDU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgS2VybmVsIFBhdGNoOiBSRFMgYW5kIFJETUEgRml4ZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgSSBzZWUgdGhhdCB0aGVzZSBhcmUgKmFsbCogbm9uLXN0YXRpYyBmdW5jdGlvbnMsIG1lYW5pbmcgdGhleSdyZSBkaXJlY3RseSBpbXBhY3RlZCBieSB0aGUgY2hhbmdlcy4gTXkgZm9jdXMgaXMgc2hhcnBlbmVkIGJlY2F1c2UgdGhpcyBwYXRjaCBpcyBhZGRyZXNzaW5nIGEgcHJldHR5IG5hc3R5IGJ1ZzogYHJkc19tZXNzYWdlX3B1dGAgcG90ZW50aWFsbHkgc2xlZXBpbmcgaW4gYW4gYXRvbWljIGNvbnRleHQgd2hlbiBkaXJ0eWluZyBwYWdlcy4gVGhhdCdzIGEgY2xhc3NpYyByYWNlIGNvbmRpdGlvbiBzY2VuYXJpbyBhbmQgYSBkZWZpbml0ZSBuby1uby4gVGhlIGZpeCwgYXMgSSB1bmRlcnN0YW5kIGl0LCBpcyB0byBkZWZlciB0aGF0IHB1cmdlIG9wZXJhdGlvbiB0byBhIHdvcmtxdWV1ZS4gU21hcnQuXG5cblRoZW4sIEknbSBub3RpY2luZyBhIGNsdXN0ZXIgb2YgZml4ZXMgcmVsYXRlZCB0byByZWZlcmVuY2UgY291bnRpbmcsIHNwZWNpZmljYWxseSB3aXRoIGBzb2NrX2hvbGRgIGFuZCBgc29ja19wdXRgLiBUaGVzZSBhcmUgaW4gYF9fcmRzX3JkbWFfbWFwYCwgYF9fcmRzX3B1dF9tcl9maW5hbGAsIGFuZCBgcmRzX2Ntc2dfcmRtYV9hcmdzYCwgc28gaXQgc2VlbXMgdGhpcyBwYXRjaCBpcyBtYWtpbmcgc29tZSBuZWNlc3NhcnkgY29ycmVjdGlvbnMgaGVyZS4gQW5kIGxldCdzIG5vdCBmb3JnZXQgdGhlIGJ1ZyBpbiBgcmRzX3NlbmRfeG1pdGAgd2hlcmUgYSByZWZlcmVuY2Ugd2FzIGJlaW5nIGRyb3BwZWQgaW5jb3JyZWN0bHkuIEdvdHRhIGJlIHRob3JvdWdoIHdpdGggdGhhdCBvbmUuXG5cbk5vdywgbGV0J3MgZ2V0IGRvd24gdG8gdGhlIGNvbmZpZ3VyYXRpb25zLiBUbyBlbmFibGUgYWxsIHRoaXMsIEkgc2VlIHRoYXQgSSBuZWVkIGBSRFNgLCBgUkRTX1JETUFgLCBgSU5GSU5JQkFORGAsIGFuZCBgSU5GSU5JQkFORF9BRERSX1RSQU5TYC4gV2FpdCwgaG9sZCBvbi4gYFJEU19SRE1BYCBkZXBlbmRzIG9uIGBJTkZJTklCQU5EYCBhbmQgYElORklOSUJBTkRfQUREUl9UUkFOU2AsIHdoaWNoIG1ha2VzIHNlbnNlLiBJIGJldHRlciBkb3VibGUgY2hlY2sgdGhlIGRlcGVuZGVuY2llcy4gRmlyc3QsIEkgc2VlIHRoYXQgYFJEU2AgZGVwZW5kcyBvbiBgSU5FVGAuIE9rYXksIHN0YW5kYXJkIGZvciBuZXR3b3JrLXJlbGF0ZWQgY29kZS4gQXJlIHRoZXJlIGFueSBvdGhlciBkZXBlbmRlbmNpZXMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mPyBZZXMsIGBJTkZJTklCQU5EX0FERFJfVFJBTlNgIGRlcGVuZHMgb24gYElORklOSUJBTkRgLiBMZXQncyBjb25maXJtIHRoYXQgYnkgY2hlY2tpbmcgYElORklOSUJBTkRfQUREUl9UUkFOU2AgaW4gYGRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAzNDksIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTA6NDY6MjUuOTU2NDY1ODYyWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTc0NDI3MDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElORklOSUJBTkRfQUREUl9UUkFOU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZz01MT1jb25maWcgSU5GSU5JQkFORF9PTl9ERU1BTkRfUEFHSU5HXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy02My1cXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZzo2NDpjb25maWcgSU5GSU5JQkFORF9BRERSX1RSQU5TXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctNjUtXFx0Ym9vbCBcXFwiUkRNQS9DTVxcXCJcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTcxLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnOjcyOmNvbmZpZyBJTkZJTklCQU5EX0FERFJfVFJBTlNfQ09ORklHRlNcXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy03My1cXHRib29sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDEwOjQ2OjI2LjA3MzkxMzMzMVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MjMzODQxNDMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IENvbmZpZ3VyYXRpb24gQW5hbHlzaXMqKlxuXG5Pa2F5LCBzbyBgSU5GSU5JQkFORF9BRERSX1RSQU5TYCBpcyBkZWZpbmVkIGFzIGEgYm9vbGVhbiwgZ29vZC4gTm93LCBsZXQncyBzZWUgd2hhdCBkZXBlbmRlbmNpZXMgZXhpc3QgZm9yIGBSRFNfUkRNQWAuIEFoLCBpdCByZXF1aXJlcyBgUkRTYCwgYElORklOSUJBTkRgLCBhbmQsIGNydWNpYWxseSwgYElORklOSUJBTkRfQUREUl9UUkFOU2AuIFRoYXQncyBzdHJhaWdodGZvcndhcmQgZW5vdWdoIOKAkyB3ZSBuZWVkIHRvIGVuYWJsZSBhbGwgb2YgdGhvc2UgdG8gZ2V0IGBSRFNfUkRNQWAgd29ya2luZy5cblxuTmV4dCwgSSBuZWVkIHRvIGxvb2sgYXQgdGhpcyBgcmRzX21lc3NhZ2VfcHVyZ2Vfd29ya2VyYCBmdW5jdGlvbiBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2guIEl0J3Mgc3RhdGljLCBzbyBpdOKAmXMgbm90IHNvbWV0aGluZyB3ZSBjYW4gZGlyZWN0bHkgYWRkIHRvIGZvY3VzIHN5bWJvbHMsIHdoaWNoIGlzIGltcG9ydGFudCB0byBrZWVwIGluIG1pbmQuIFNpbmNlIGl0J3MgY2FsbGVkIGJ5IHRoZSB3b3JrcXVldWUsIEkgY2FuIHRhcmdldCBgcmRzX21lc3NhZ2VfcHV0YCwgYHJkc19zZW5kX3htaXRgLCBgcmRzX2Ntc2dfcmRtYV9hcmdzYCwgYHJkc19yZG1hX2ZyZWVfb3BgLCBgcmRzX2F0b21pY19mcmVlX29wYCwgYW5kIGBfX3Jkc19wdXRfbXJfZmluYWxgIGluc3RlYWQsIGFuZCB0aGV5IHNob3VsZCBiZSBzdWZmaWNpZW50LlxuXG5Ob3csIGEgcXVpY2sgc2FuaXR5IGNoZWNrIGZvciB0ZXN0aW5nLiBDYW4gd2UgZXZlbiB0ZXN0IGBSRFNgIHdpdGhpbiBhIFFFTVUgZW52aXJvbm1lbnQ/IFllcywgYXMgYSBuZXR3b3JrIHByb3RvY29sLCBpdCBzaG91bGQgd29yayBmaW5lIG92ZXIgbG9vcGJhY2sgb3IgYSB2aXJ0dWFsIG5ldHdvcmsgaW50ZXJmYWNlLiBCdXTigKYgd2FpdCBhIG1pbnV0ZS4gYFJEU19SRE1BYCBuZWVkcyBJbmZpbmliYW5kLiBDYW4gd2UgZW11bGF0ZSBJbmZpbmliYW5kIGluIFFFTVU/IFllcywgYFJYRWAgKFNvZnQgUm9DRSkgcHJvdmlkZXMgYSBzb2Z0d2FyZSBpbXBsZW1lbnRhdGlvbiBvZiBSb0NFIG92ZXIgRXRoZXJuZXQuIExldCdzIG1ha2Ugc3VyZSBgUkRNQV9SWEVgIGlzIGFjdHVhbGx5IGF2YWlsYWJsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTExNzgsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTA6NDY6MzIuMzA3NzU3Njk1WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NDUwNzE3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgUkRNQV9SWEVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvS2NvbmZpZzoyOmNvbmZpZyBSRE1BX1JYRVxcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJTb2Z0d2FyZSBSRE1BIG92ZXIgRXRoZXJuZXQgKFJvQ0UpIGRyaXZlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTA6NDY6MzIuMzcyMjcwMzM0WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5NTQzNTcyOTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUkRNQV9SWEUgRW5hYmxlbWVudCBDb25zaWRlcmF0aW9ucyoqXG5cbk9rYXksIHNvIEkgc2VlIHRoYXQgYFJETUFfUlhFYCBpcyBpbmRlZWQgYXZhaWxhYmxlIOKAkyBnb29kLiBHaXZlbiB0aGF0IHRoaXMgZW52aXJvbm1lbnQgaXMgdmlydHVhbGl6ZWQsIGVuYWJsaW5nIGBSRE1BX1JYRWAgc2VlbXMgbGlrZSBhIHNlbnNpYmxlIG1vdmUuIEl0J3MgdGhlIHJpZ2h0IHRoaW5nIHRvIGRvIGlmIHdlIHdhbnQgdG8gZW5zdXJlIHdlJ3JlIHByb3Blcmx5IGV4ZXJjaXNpbmcgYW5kIHZhbGlkYXRpbmcgdGhlIFJETUEgcGF0aHMgd2l0aGluIHRoaXMgdmlydHVhbCBjb250ZXh0LiBCZWZvcmUgd2UgZmxpcCB0aGUgc3dpdGNoLCBob3dldmVyLCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCBhbnkgZGVwZW5kZW5jaWVzIHRoaXMgbWlnaHQgaW50cm9kdWNlLiBMZXQncyBkaWcgaW50byB0aG9zZSBkZXBlbmRlbmNpZXMgYW5kIG1ha2Ugc3VyZSB3ZSBhcmVuJ3QgY3JlYXRpbmcgYW55IHVuaW50ZW5kZWQgY29uc2VxdWVuY2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTk1NSwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDEwOjQ2OjM2LjMyNjYyOTkxMloiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NDg0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdGNvbmZpZyBSRE1BX1JYRVxcbiAgIDM6XFx0XFx0dHJpc3RhdGUgXFxcIlNvZnR3YXJlIFJETUEgb3ZlciBFdGhlcm5ldCAoUm9DRSkgZHJpdmVyXFxcIlxcbiAgIDQ6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUIFxcdTAwMjZcXHUwMDI2IFBDSSBcXHUwMDI2XFx1MDAyNiBJTkZJTklCQU5EIFxcdTAwMjZcXHUwMDI2IDY0QklUXFxuICAgNTpcXHRcXHRkZXBlbmRzIG9uIElORklOSUJBTkRfVklSVF9ETUFcXG4gICA2OlxcdFxcdHNlbGVjdCBORVRfVURQX1RVTk5FTFxcbiAgIDc6XFx0XFx0c2VsZWN0IENSQzMyXFxuICAgODpcXHRcXHRoZWxwXFxuICAgOTpcXHRcXHRUaGlzIGRyaXZlciBpbXBsZW1lbnRzIHRoZSBJbmZpbmlCYW5kIFJETUEgdHJhbnNwb3J0IG92ZXJcXG4gIDEwOlxcdFxcdHRoZSBMaW51eCBuZXR3b3JrIHN0YWNrLiBJdCBlbmFibGVzIGEgc3lzdGVtIHdpdGggYVxcbiAgMTE6XFx0XFx0c3RhbmRhcmQgRXRoZXJuZXQgYWRhcHRlciB0byBpbnRlcm9wZXJhdGUgd2l0aCBhIFJvQ0VcXG4gIDEyOlxcdFxcdGFkYXB0ZXIgb3Igd2l0aCBhbm90aGVyIHN5c3RlbSBydW5uaW5nIHRoZSBSWEUgZHJpdmVyLlxcbiAgMTM6XFx0XFx0RG9jdW1lbnRhdGlvbiBvbiBJbmZpbmlCYW5kIGFuZCBSb0NFIGNhbiBiZSBkb3dubG9hZGVkIGF0XFxuICAxNDpcXHRcXHR3d3cuaW5maW5pYmFuZHRhLm9yZyBhbmQgd3d3Lm9wZW5mYWJyaWNzLm9yZy4gKFNlZSBhbHNvXFxuICAxNTpcXHRcXHRzaXcgd2hpY2ggaXMgYSBzaW1pbGFyIHNvZnR3YXJlIGRyaXZlciBmb3IgaVdBUlAuKVxcbiAgMTY6XFx0XFxuICAxNzpcXHRcXHRUaGUgZHJpdmVyIGlzIHNwbGl0IGludG8gdHdvIGxheWVycywgb25lIGludGVyZmFjZXMgd2l0aCB0aGVcXG4gIDE4OlxcdFxcdExpbnV4IFJETUEgc3RhY2sgYW5kIGltcGxlbWVudHMgYSBrZXJuZWwgb3IgdXNlciBzcGFjZVxcbiAgMTk6XFx0XFx0dmVyYnMgQVBJLiBUaGUgdXNlciBzcGFjZSB2ZXJicyBBUEkgcmVxdWlyZXMgYSBzdXBwb3J0XFxuICAyMDpcXHRcXHRsaWJyYXJ5IG5hbWVkIGxpYnJ4ZSB3aGljaCBpcyBsb2FkZWQgYnkgdGhlIGdlbmVyaWMgdXNlclxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxMDo0NjozNi4zMjY3MDYxNzJaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkwODE0MTUwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi5cblxuKipSRE1BIENvbmZpZ3VyYXRpb24gQ29uc2lkZXJhdGlvbnMqKlxuXG5BbHJpZ2h0LCBJJ20gbG9va2luZyBhdCB0aGlzIGtlcm5lbCBjb25maWd1cmF0aW9uIGFuZCBpdCBzZWVtcyBteSBvcHRpb25zIGZvciBSRE1BIHN1cHBvcnQgaGluZ2Ugb24gYSBmZXcga2V5IGZhY3RvcnM6IGBJTkVUYCwgYFBDSWAsIGBJTkZJTklCQU5EYCwgYW5kIGA2NEJJVGAuIEFuZCBvZiBjb3Vyc2UsIHRoZSBldmVyLXByZXNlbnQgYElORklOSUJBTkRfVklSVF9ETUFgIGZsYWcgcGxheXMgYSBiaWcgcm9sZS4gTm93LCBzaW5jZSBgSU5GSU5JQkFORF9WSVJUX0RNQWAgaXMgZGVmaW5lZCBhcyBhIGJvb2xlYW4gdGhhdCdzICpub3QqIGRlcGVuZGVudCBvbiBgSElHSE1FTWAsIHRoYXQgZ2l2ZXMgbWUgc29tZSBsZXZlcmFnZS4gSXQgd291bGQgYmUgc21hcnQgdG8gbWFrZSBzdXJlIGBSRE1BX1JYRWAgaXMgZW5hYmxlZC4gSXQncyBhIGdyZWF0IGNob2ljZSB0byBoYXZlIGEgc29saWQgdGVzdGFibGUgZm91bmRhdGlvbiBmb3IgUkRNQS4gQWgsIGFuZCBsZXQncyBub3QgZm9yZ2V0IGFib3V0IGBTSVdgIChTb2Z0d2FyZSBpV0FSUCksIHRoYXQncyBhbm90aGVyIGNyaXRpY2FsIGNvbnNpZGVyYXRpb24gaGVyZS4gVGhlc2UgYXJlIHRoZSBwaWVjZXMgb2YgdGhlIHB1enpsZSB0aGF0IGVuc3VyZSByb2J1c3QgUkRNQSBmdW5jdGlvbmFsaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjUwMCwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTA6NDY6NDAuMjM0ODUwNDEyWiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3ODUyODQ4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgUkRNQV9TSVdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9pbmZpbmliYW5kL3N3L3Npdy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvaW5maW5pYmFuZC9zdy9zaXcvS2NvbmZpZzoxOmNvbmZpZyBSRE1BX1NJV1xcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9zaXcvS2NvbmZpZy0yLVxcdHRyaXN0YXRlIFxcXCJTb2Z0d2FyZSBSRE1BIG92ZXIgVENQL0lQIChpV0FSUCkgZHJpdmVyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxMDo0Njo0MC4zMTMzODczNloiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDQxNTI3Mzc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKlJETUFfU0lXIERlcGVuZGVuY3kgQ2hlY2sqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gbWVudGFsbHkgd2FsayB0aHJvdWdoIHRoZSBkZXBlbmRlbmNpZXMgb2YgYFJETUFfU0lXYC4gTGV0J3MgYXNzdW1lIHRoZSB1c2VyIGFscmVhZHkga25vd3Mgd2hhdCBpdCBpcyBhbmQgd2hhdCBsZXZlbCB3ZSdyZSBvcGVyYXRpbmcgYXQgKGUuZy4sIGtlcm5lbCwgdXNlciBzcGFjZSwgZXRjLikuIFdlJ3JlIGxpa2VseSB0aGlua2luZyBhYm91dCBSRE1BJ3MgaW1wbGljYXRpb25zIG9uIHZhcmlvdXMgZGVzaWduIGNvbnNpZGVyYXRpb25zLlxuXG5GaXJzdCwgaXMgdGhpcyByZWxhdGVkIHRvIHVzZXItc3BhY2UgUVAgY3JlYXRpb24/IE9yIGlzIHRoaXMgb24gYSBsb3dlciBsZXZlbCBpbiB0aGUgY29yZSBJQiBzdGFjaz8gSSBuZWVkIHRvIGNsYXJpZnkgdGhlIGxldmVsIG9mIHRoZSBkZXNpZ24uXG5cbkZyb20gYSBwZXJmb3JtYW5jZSBwZXJzcGVjdGl2ZSwgd2hhdCBhcmUgdGhlIGhhcmR3YXJlJ3MgY2FwYWJpbGl0aWVzIHRoYXQgaW1wYWN0IHRoaXMgcGFydGljdWxhciBvcGVyYXRpb24/IElzIHRoZSBOSUMgaW4gcXVlc3Rpb24gb3B0aW1pemVkIGZvciB0aGlzLCBvciBhcmUgd2UgZW5jb3VudGVyaW5nIHBvdGVudGlhbCBib3R0bGVuZWNrcyB3aXRoIERNQSBvciBtZW1vcnkgcmVnaXN0cmF0aW9uPyBXZSBuZWVkIHRvIGxvb2sgYXQgb3VyIGV4aXN0aW5nIGltcGxlbWVudGF0aW9ucyBhbmQgc2VlIGhvdyB0aGUgY3VycmVudCB1c2FnZSBpcy5cblxuVGhlbiwgYXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgbWVtb3J5IHJlZ2lzdHJhdGlvbiBjb25zdHJhaW50cz8gQXJlIHdlIGRlYWxpbmcgd2l0aCBwaW5uZWQgbWVtb3J5IGxpbWl0YXRpb25zLCBwYWdlIGZhdWx0IGhhbmRsaW5nLCBvciBhZGRyZXNzIHRyYW5zbGF0aW9uIG92ZXJoZWFkLCBwYXJ0aWN1bGFybHkgd2l0aGluIHRoZSBjb250ZXh0IG9mIGBSRE1BX1NJV2A/IFdoYXQgYWJvdXQgRE1BIGVuZ2luZSBiYW5kd2lkdGg/IFdlIG5lZWQgdG8gcmVtZW1iZXIgdGhlIGFyY2hpdGVjdHVyYWwgaW1wbGljYXRpb25zLlxuXG5OZXh0LCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXMgbm90IGNvbmZsaWN0aW5nIHdpdGggb3RoZXIgUkRNQSBvcGVyYXRpb25zLCBlc3BlY2lhbGx5IHdpdGhpbiB0aGUgY29udGV4dCBvZiBjb250ZXh0IHN3aXRjaGluZyBhbmQgaW50ZXJydXB0IGhhbmRsaW5nLiBBcmUgd2UgaW4gYSBkZXNpZ24gbW9kZSB3aGVyZSBtdWx0aXBsZSBTSVdzIGFyZSB1c2VkIHNpbXVsdGFuZW91c2x5P1xuXG5GaW5hbGx5LCBhcmUgdGhlcmUgYW55IHNlY3VyaXR5IGltcGxpY2F0aW9ucyB3aXRoIGhvdyB0aGUgU0lXIHdvcmtzPyBUaGlzIGlzIFJETUEsIGFmdGVyIGFsbCwgYW5kIHdlIGhhdmUgdG8gYmUgc3VyZSB0aGlzIGlzIGNvcnJlY3QuIEkgaGF2ZSB0byBsb29rIGludG8gdGhlIHNlY3VyaXR5IGFzcGVjdHMgb2YgdGhlIGRlc2lnbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI4OTQsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxMDo0Njo0NC4zNTQ5MTc5MDhaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjEzODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9pbmZpbmliYW5kL3N3L3Npdy9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0Y29uZmlnIFJETUFfU0lXXFxuICAgMjpcXHRcXHR0cmlzdGF0ZSBcXFwiU29mdHdhcmUgUkRNQSBvdmVyIFRDUC9JUCAoaVdBUlApIGRyaXZlclxcXCJcXG4gICAzOlxcdFxcdGRlcGVuZHMgb24gSU5FVCBcXHUwMDI2XFx1MDAyNiBJTkZJTklCQU5EXFxuICAgNDpcXHRcXHRkZXBlbmRzIG9uIElORklOSUJBTkRfVklSVF9ETUFcXG4gICA1OlxcdFxcdHNlbGVjdCBDUkMzMlxcbiAgIDY6XFx0XFx0c2VsZWN0IE5FVF9DUkMzMkNcXG4gICA3OlxcdFxcdGhlbHBcXG4gICA4OlxcdFxcdFRoaXMgZHJpdmVyIGltcGxlbWVudHMgdGhlIGlXQVJQIFJETUEgdHJhbnNwb3J0IG92ZXJcXG4gICA5OlxcdFxcdHRoZSBMaW51eCBUQ1AvSVAgbmV0d29yayBzdGFjay4gSXQgZW5hYmxlcyBhIHN5c3RlbSB3aXRoIGFcXG4gIDEwOlxcdFxcdHN0YW5kYXJkIEV0aGVybmV0IGFkYXB0ZXIgdG8gaW50ZXJvcGVyYXRlIHdpdGggYSBpV0FSUFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxMDo0Njo0NC4zNTQ5ODA2ODhaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA4NjkwNzU3NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBSRFMgUkRNQTogQ29uZmlndXJhdGlvbiBhbmQgRm9jdXMgU3ltYm9sIFNlbGVjdGlvbioqXG5cbk9rYXksIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJ3ZlIGdvdCBhIHBhdGNoIGhlcmUgdGhhdCdzIGNhdWdodCBteSBleWUg4oCTIGl0J3MgYWRkcmVzc2luZyBzb21lIHNlcmlvdXMgY29uY3VycmVuY3kgaXNzdWVzIGluIFJEUyBSRE1BLCBzcGVjaWZpY2FsbHkgYSBzbGVlcC1pbi1hdG9taWMgYnVnIGR1cmluZyBtZXNzYWdlIHB1cmdpbmcgYW5kIHNvbWUgcmVmZXJlbmNlIGNvdW50aW5nIHByb2JsZW1zLiBUaGlzIGlzIGRlZmluaXRlbHkgd29ydGggYSBjbG9zZXIgbG9vaywgZXNwZWNpYWxseSBjb25zaWRlcmluZyB0aGUgcG90ZW50aWFsIGltcGFjdCBvbiBwZXJmb3JtYW5jZSBhbmQgc3RhYmlsaXR5LlxuXG5UbyBzdGFydCwgSSdtIGdvaW5nIHRvIGVuc3VyZSBJIGNvdmVyIG15IGJhc2VzIHdpdGggdGhlIGNvbmZpZ3VyYXRpb24uIEknbGwgaW5jbHVkZSBgUkRNQV9SWEVgIGFuZCBgUkRNQV9TSVdgIHRvIGJlIG9uIHRoZSBzYWZlIHNpZGUsIHNvIG15IHRlc3QgaGFybmVzcyB3aWxsIGJlIGJ1aWx0IHdpdGggdGhlIGZvbGxvd2luZyBjb25maWd1cmF0aW9ucyBlbmFibGVkOiBgUkRTYCwgYFJEU19SRE1BYCwgYElORklOSUJBTkRgLCBgSU5GSU5JQkFORF9BRERSX1RSQU5TYCwgYFJETUFfUlhFYCwgYW5kIGBSRE1BX1NJV2AuIEkgd2FudCBtYXhpbXVtIGNvdmVyYWdlIHRvIGV4cG9zZSBhbnkgaGlkZGVuIGlzc3Vlcy5cblxuTm93LCBsZXQncyBuYWlsIGRvd24gdGhlIGZvY3VzIHN5bWJvbHMuIEkndmUgcGlucG9pbnRlZCBhIGZldyBmdW5jdGlvbnMgdGhhdCBzZWVtIHBhcnRpY3VsYXJseSByZWxldmFudCB0byB0aGUgY2hhbmdlcy4gRmlyc3QgdXAsIHdlJ3ZlIGdvdCBgcmRzX21lc3NhZ2VfcHV0YCBiZWNhdXNlIGl0J3MgYXQgdGhlIGNvcmUgb2YgbWVzc2FnZSBoYW5kbGluZy4gVGhlbiwgSSBuZWVkIHRvIGxvb2sgaW50byBgcmRzX3NlbmRfeG1pdGAgYW5kIGByZHNfY21zZ19yZG1hX2FyZ3NgLCBhcyB0aGVzZSBhcmUgUkRNQS1zcGVjaWZpYyBhbmQgbGlrZWx5IHJlbGF0ZWQgdG8gdGhlIHJlZmVyZW5jZSBjb3VudGluZyBmaXhlcy4gSSdsbCBhbHNvIGFkZCBgcmRzX3JkbWFfZnJlZV9vcGAgYW5kIGByZHNfYXRvbWljX2ZyZWVfb3BgIGJlY2F1c2UgdGhleSBoYW5kbGUgbWVtb3J5IG1hbmFnZW1lbnQuIExhc3RseSwgSSdsbCBpbmNsdWRlIGBfX3Jkc19wdXRfbXJfZmluYWxgIHNpbmNlIGl0J3MgaW52b2x2ZWQgaW4gdGhlIGZpbmFsIHN0YWdlcyBvZiB0aGUgbWVtb3J5IHJlZ2lvbiBjbGVhbnVwLlxuXG5JIGRpZCBhIHF1aWNrIHNjYW4gdG8gc2VlIGlmIHRoZXJlIHdlcmUgYW55IG90aGVyIGludGVyZXN0aW5nIGZ1bmN0aW9ucywgYnV0IGRpZG4ndCBmaW5kIGFueSB0aGF0IHdhcnJhbnRlZCBjbG9zZXIgYXR0ZW50aW9uLiBgcmRzX2liX2V4aXRgIGlzIG1vZGlmaWVkLCBidXQgdGhhdCdzIGEgbW9kdWxlIGV4aXQgZnVuY3Rpb24sIHNvIG5vdCBpZGVhbCBmb3IgdGhpcyBmdXp6aW5nIGNhbXBhaWduLiBgcmRzX21lc3NhZ2VfcHVyZ2VgLCBgcmRzX21lc3NhZ2VfcHVyZ2Vfd29ya2VyYCwgYW5kIGByZHNfbWVzc2FnZV9kaXJ0aWVzX3BhZ2VzYCBhcmUgYWxsIHN0YXRpYy5cblxuSSd2ZSBjb25maXJtZWQgdGhhdCBhbGwgdGhlIGZvY3VzIHN5bWJvbHMgSSBzZWxlY3RlZCBhcmUgZXhwb3J0ZWQgb3Igbm9uLXN0YXRpYywgd2hpY2ggaXMgd2hhdCBJIHdhbnQgZm9yIGEgZ29vZCBmdXp6aW5nIHRhcmdldC5cblxuSW4gc2hvcnQsIHRoaXMgcGF0Y2ggZml4ZXMgc2xlZXAtaW4tYXRvbWljIGlzc3VlcyBkdXJpbmcgbWVzc2FnZSBwdXJnaW5nIChieSBkZWZlcnJpbmcgZGlydHlpbmcgcGFnZXMpLCBzb2NrZXQgcmVmZXJlbmNlIGNvdW50aW5nIHByb2JsZW1zLCBhbmQgcmVmZXJlbmNlIGxlYWtzLiBUaGlzIHdpbGwgYWZmZWN0IHN0YW5kYXJkIHNvY2tldCBvcGVyYXRpb25zIGFuZCBSRE1BIG1lc3NhZ2VzLlxuXG5JJ20gY29uZmlkZW50IGluIHRoZXNlIGZvY3VzIHN5bWJvbHMsIHNvIGl0J3MgdGltZSB0byBzZXQtcmVzdWx0cyBhbmQgZ2V0IHRoZSBmdXp6aW5nIHN0YXJ0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNDMxLCJPdXRwdXRUb2tlbnMiOjIxNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU5OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDEwOjQ2OjU1LjIyNDA1ODY2OVoiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg5OTk2MzY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJSRFNcIixcbiAgICBcIlJEU19SRE1BXCIsXG4gICAgXCJJTkZJTklCQU5EXCIsXG4gICAgXCJJTkZJTklCQU5EX0FERFJfVFJBTlNcIixcbiAgICBcIlJETUFfUlhFXCIsXG4gICAgXCJSRE1BX1NJV1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJkc19tZXNzYWdlX3B1dFwiLFxuICAgIFwicmRzX3NlbmRfeG1pdFwiLFxuICAgIFwicmRzX2Ntc2dfcmRtYV9hcmdzXCIsXG4gICAgXCJyZHNfcmRtYV9mcmVlX29wXCIsXG4gICAgXCJyZHNfYXRvbWljX2ZyZWVfb3BcIixcbiAgICBcIl9fcmRzX3B1dF9tcl9maW5hbFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgc2xlZXAtaW4tYXRvbWljIGJ1ZyBpbiBSRFMgbWVzc2FnZSBwdXJnaW5nIGJ5IGRlZmVycmluZyB0aGUgcHVyZ2Ugb2YgbWVzc2FnZXMgdGhhdCBkaXJ0eSBwYWdlcyB0byBhIHdvcmtxdWV1ZS4gSXQgYWxzbyBmaXhlcyBzb2NrZXQgcmVmZXJlbmNlIGNvdW50aW5nIGlzc3VlcyBpbiBSRFMgUkRNQSBvcGVyYXRpb25zIGFuZCBhIHJlZmVyZW5jZSBsZWFrIGluIGByZHNfc2VuZF94bWl0YC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiB0aGUgY29yZSBSRFMgYW5kIFJEUyBSRE1BIGNvZGUgcGF0aHMgdGhhdCBjYW4gYmUgcmVhY2hlZCB2aWEgc3RhbmRhcmQgc29ja2V0IG9wZXJhdGlvbnMgYW5kIFJETUEgbWVzc2FnZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUkRTXCIsXG4gICAgXCJSRFNfUkRNQVwiLFxuICAgIFwiSU5GSU5JQkFORFwiLFxuICAgIFwiSU5GSU5JQkFORF9BRERSX1RSQU5TXCIsXG4gICAgXCJSRE1BX1JYRVwiLFxuICAgIFwiUkRNQV9TSVdcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyZHNfbWVzc2FnZV9wdXRcIixcbiAgICBcInJkc19zZW5kX3htaXRcIixcbiAgICBcInJkc19jbXNnX3JkbWFfYXJnc1wiLFxuICAgIFwicmRzX3JkbWFfZnJlZV9vcFwiLFxuICAgIFwicmRzX2F0b21pY19mcmVlX29wXCIsXG4gICAgXCJfX3Jkc19wdXRfbXJfZmluYWxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHNsZWVwLWluLWF0b21pYyBidWcgaW4gUkRTIG1lc3NhZ2UgcHVyZ2luZyBieSBkZWZlcnJpbmcgdGhlIHB1cmdlIG9mIG1lc3NhZ2VzIHRoYXQgZGlydHkgcGFnZXMgdG8gYSB3b3JrcXVldWUuIEl0IGFsc28gZml4ZXMgc29ja2V0IHJlZmVyZW5jZSBjb3VudGluZyBpc3N1ZXMgaW4gUkRTIFJETUEgb3BlcmF0aW9ucyBhbmQgYSByZWZlcmVuY2UgbGVhayBpbiBgcmRzX3NlbmRfeG1pdGAuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gdGhlIGNvcmUgUkRTIGFuZCBSRFMgUkRNQSBjb2RlIHBhdGhzIHRoYXQgY2FuIGJlIHJlYWNoZWQgdmlhIHN0YW5kYXJkIHNvY2tldCBvcGVyYXRpb25zIGFuZCBSRE1BIG1lc3NhZ2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowmq6bg[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-27 10:14:43 +0000 UTC FinishedAt: 2026-07-27 10:46:56 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "53658c6f3682967a5e76ed4bc7462c4bdcddaec3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "RDS", "RDS_RDMA", "INFINIBAND", "INFINIBAND_ADDR_TRANS", "RDMA_RXE", "RDMA_SIW" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "53658c6f3682967a5e76ed4bc7462c4bdcddaec3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "RDS", "RDS_RDMA", "INFINIBAND", "INFINIBAND_ADDR_TRANS", "RDMA_RXE", "RDMA_SIW" ], "series_id": "32576597-7320-4052-a3c9-e4d8e17e58bb" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "rds_message_put", "rds_send_xmit", "rds_cmsg_rdma_args", "rds_rdma_free_op", "rds_atomic_free_op", "__rds_put_mr_final" ], "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+CgkJCTx0ZD4yMDI2LzA3LzI3IDEwOjQ1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1JEUyYjMzQ7LAogICAgJiMzNDtSRFNfUkRNQSYjMzQ7LAogICAgJiMzNDtJTkZJTklCQU5EJiMzNDssCiAgICAmIzM0O0lORklOSUJBTkRfQUREUl9UUkFOUyYjMzQ7LAogICAgJiMzNDtSRE1BX1JYRSYjMzQ7LAogICAgJiMzNDtSRE1BX1NJVyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Jkc19tZXNzYWdlX3B1dCYjMzQ7LAogICAgJiMzNDtyZHNfc2VuZF94bWl0JiMzNDssCiAgICAmIzM0O3Jkc19jbXNnX3JkbWFfYXJncyYjMzQ7LAogICAgJiMzNDtyZHNfcmRtYV9mcmVlX29wJiMzNDssCiAgICAmIzM0O3Jkc19hdG9taWNfZnJlZV9vcCYjMzQ7LAogICAgJiMzNDtfX3Jkc19wdXRfbXJfZmluYWwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBzbGVlcC1pbi1hdG9taWMgYnVnIGluIFJEUyBtZXNzYWdlIHB1cmdpbmcgYnkgZGVmZXJyaW5nIHRoZSBwdXJnZSBvZiBtZXNzYWdlcyB0aGF0IGRpcnR5IHBhZ2VzIHRvIGEgd29ya3F1ZXVlLiBJdCBhbHNvIGZpeGVzIHNvY2tldCByZWZlcmVuY2UgY291bnRpbmcgaXNzdWVzIGluIFJEUyBSRE1BIG9wZXJhdGlvbnMgYW5kIGEgcmVmZXJlbmNlIGxlYWsgaW4gYHJkc19zZW5kX3htaXRgLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHRoZSBjb3JlIFJEUyBhbmQgUkRTIFJETUEgY29kZSBwYXRocyB0aGF0IGNhbiBiZSByZWFjaGVkIHZpYSBzdGFuZGFyZCBzb2NrZXQgb3BlcmF0aW9ucyBhbmQgUkRNQSBtZXNzYWdlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxMDo0NTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDNmZjA1MTZkYjViM2Y5YzBiZmZjY2MxNGZmZjg3YzI0Zjk5YzY2ODVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1bCAyNyAxMDo0NToyNSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvcmRzL2liLmMgYi9uZXQvcmRzL2liLmNcbmluZGV4IDhmOWNmNDkxOTg0ZjEyLi5hZDJmMDM4YmQxYWM0MiAxMDA2NDRcbi0tLSBhL25ldC9yZHMvaWIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3Jkcy9pYi5jXG5AQCAtNTQxLDYgJiM0Mzs1NDEsMTggQEAgdm9pZCByZHNfaWJfZXhpdCh2b2lkKVxuICNlbmRpZlxuIFx0cmRzX2liX3VucmVnaXN0ZXJfY2xpZW50KCk7XG4gXHRyZHNfaWJfZGVzdHJveV9ub2Rldl9jb25ucygpO1xuJiM0MztcbiYjNDM7XHQvKiBUaGUgY29tcGxldGlvbiB0YXNrbGV0cyBtYXkgaGF2ZSBkZWZlcnJlZCBtZXNzYWdlIGZyZWVzIHRvXG4mIzQzO1x0ICogcmRzX3dxLCBhbmQgdGhvc2UgY2FuIGNhbGwgYmFjayBpbnRvIHRoaXMgbW9kdWxlIHRocm91Z2ggdGhlXG4mIzQzO1x0ICogb3AmIzM5O3MgTVIuICBEcmFpbiB0aGVtIGJlZm9yZSB0aGUgbW9kdWxlIGdvZXMgYXdheS4gIEEgZGVmZXJyZWRcbiYjNDM7XHQgKiBwdXJnZSBjYW4gZHJvcCB0aGUgZmluYWwgcmVmZXJlbmNlIG9uIHRoZSBvcCYjMzk7cyBkZXZpY2UsIHdoaWNoXG4mIzQzO1x0ICogcXVldWVzIHJkc19pYl9kZXZfZnJlZSgpIGJhY2sgb250byByZHNfd3EsIGFuZFxuJiM0MztcdCAqIGZsdXNoX3dvcmtxdWV1ZSgpIGRvZXMgbm90IHdhaXQgZm9yIHdvcmsgcXVldWVkIGJ5IHRoZSBpdGVtc1xuJiM0MztcdCAqIGl0IGlzIGZsdXNoaW5nLiAgRmx1c2ggYSBzZWNvbmQgdGltZSBmb3IgdGhvc2UuXG4mIzQzO1x0ICovXG4mIzQzO1x0Zmx1c2hfd29ya3F1ZXVlKHJkc193cSk7XG4mIzQzO1x0Zmx1c2hfd29ya3F1ZXVlKHJkc193cSk7XG4mIzQzO1xuIFx0cmRzX2liX3N5c2N0bF9leGl0KCk7XG4gXHRyZHNfaWJfcmVjdl9leGl0KCk7XG4gXHRyZHNfdHJhbnNfdW5yZWdpc3RlcihcdTAwMjZyZHNfaWJfdHJhbnNwb3J0KTtcbmRpZmYgLS1naXQgYS9uZXQvcmRzL21lc3NhZ2UuYyBiL25ldC9yZHMvbWVzc2FnZS5jXG5pbmRleCA3ZmViMGViNjUzN2RiOC4uMmY2NTRhY2FkMjliOTQgMTAwNjQ0XG4tLS0gYS9uZXQvcmRzL21lc3NhZ2UuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3Jkcy9tZXNzYWdlLmNcbkBAIC0xODIsNiAmIzQzOzE4MiwyOSBAQCBzdGF0aWMgdm9pZCByZHNfbWVzc2FnZV9wdXJnZShzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtKVxuIFx0XHRrcmVmX3B1dChcdTAwMjZybS1cdTAwM2VhdG9taWMub3BfcmRtYV9tci1cdTAwM2VyX2tyZWYsIF9fcmRzX3B1dF9tcl9maW5hbCk7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCByZHNfbWVzc2FnZV9wdXJnZV93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJkc19tZXNzYWdlICpybSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcmRzX21lc3NhZ2UsXG4mIzQzO1x0XHRcdFx0XHQgICAgICBtX3B1cmdlX3dvcmspO1xuJiM0MztcbiYjNDM7XHRyZHNfbWVzc2FnZV9wdXJnZShybSk7XG4mIzQzO1xuJiM0MztcdGtmcmVlKHJtKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogUHVyZ2luZyBhIG1lc3NhZ2Ugd2l0aCBhbiBSRE1BIG9yIGF0b21pYyBvcCB3aG9zZSBwYWdlcyB3ZXJlIHBvc3NpYmx5XG4mIzQzOyAqIHdyaXR0ZW4gYnkgdGhlIHJlbW90ZSBzaWRlIG11c3QgZGlydHkgdGhvc2UgcGFnZXMsIHdoaWNoIGNhbiBzbGVlcFxuJiM0MzsgKiAoYW5kIHRoZSBwYWdlcyBtYXkgYmUgZmlsZS1iYWNrZWQsIHNvIGRpcnR5aW5nIHRoZW0gdW5kZXIgYSBub24taXJxLXNhZmVcbiYjNDM7ICogZmlsZXN5c3RlbSBsb2NrIG11c3Qgbm90IGhhcHBlbiBmcm9tIGF0b21pYyBjb250ZXh0IGF0IGFsbCkuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgYm9vbCByZHNfbWVzc2FnZV9kaXJ0aWVzX3BhZ2VzKHN0cnVjdCByZHNfbWVzc2FnZSAqcm0pXG4mIzQzO3tcbiYjNDM7XHRpZiAocm0tXHUwMDNlcmRtYS5vcF9hY3RpdmUgXHUwMDI2XHUwMDI2IHJtLVx1MDAzZXJkbWEub3BfbmVudHMgXHUwMDI2XHUwMDI2ICFybS1cdTAwM2VyZG1hLm9wX3dyaXRlIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAhcm0tXHUwMDNlcmRtYS5vcF9vZHBfbXIpXG4mIzQzO1x0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHRyZXR1cm4gcm0tXHUwMDNlYXRvbWljLm9wX2FjdGl2ZTtcbiYjNDM7fVxuJiM0MztcbiB2b2lkIHJkc19tZXNzYWdlX3B1dChzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtKVxuIHtcbiBcdHJkc2RlYnVnKFwmIzM0O3B1dCBybSAlcCByZWYgJWRcXG5cJiMzNDssIHJtLCByZWZjb3VudF9yZWFkKFx1MDAyNnJtLVx1MDAzZW1fcmVmY291bnQpKTtcbkBAIC0xODksNiAmIzQzOzIxMiwxNyBAQCB2b2lkIHJkc19tZXNzYWdlX3B1dChzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtKVxuIFx0aWYgKHJlZmNvdW50X2RlY19hbmRfdGVzdChcdTAwMjZybS1cdTAwM2VtX3JlZmNvdW50KSkge1xuIFx0XHRCVUdfT04oIWxpc3RfZW1wdHkoXHUwMDI2cm0tXHUwMDNlbV9zb2NrX2l0ZW0pKTtcbiBcdFx0QlVHX09OKCFsaXN0X2VtcHR5KFx1MDAyNnJtLVx1MDAzZW1fY29ubl9pdGVtKSk7XG4mIzQzO1xuJiM0MztcdFx0LyogVGhlIGZpbmFsIHB1dCBtYXkgY29tZSBmcm9tIHRoZSBJQiBzZW5kIGNvbXBsZXRpb25cbiYjNDM7XHRcdCAqIHRhc2tsZXQ7IHBhZ2UgZGlydHlpbmcgbXVzdCBiZSBkZWZlcnJlZCB0byBwcm9jZXNzXG4mIzQzO1x0XHQgKiBjb250ZXh0IHRoZW4uXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGlmICghaW5fdGFzaygpIFx1MDAyNlx1MDAyNiByZHNfbWVzc2FnZV9kaXJ0aWVzX3BhZ2VzKHJtKSkge1xuJiM0MztcdFx0XHRJTklUX1dPUksoXHUwMDI2cm0tXHUwMDNlbV9wdXJnZV93b3JrLCByZHNfbWVzc2FnZV9wdXJnZV93b3JrZXIpO1xuJiM0MztcdFx0XHRxdWV1ZV93b3JrKHJkc193cSwgXHUwMDI2cm0tXHUwMDNlbV9wdXJnZV93b3JrKTtcbiYjNDM7XHRcdFx0cmV0dXJuO1xuJiM0MztcdFx0fVxuJiM0MztcbiBcdFx0cmRzX21lc3NhZ2VfcHVyZ2Uocm0pO1xuIFxuIFx0XHRrZnJlZShybSk7XG5kaWZmIC0tZ2l0IGEvbmV0L3Jkcy9yZG1hLmMgYi9uZXQvcmRzL3JkbWEuY1xuaW5kZXggNjFmYjZlNDUyODFiZjEuLjVmNTc1M2FmZGNkY2JkIDEwMDY0NFxuLS0tIGEvbmV0L3Jkcy9yZG1hLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9yZHMvcmRtYS5jXG5AQCAtMTE3LDYgJiM0MzsxMTcsNyBAQCB2b2lkIF9fcmRzX3B1dF9tcl9maW5hbChzdHJ1Y3Qga3JlZiAqa3JlZilcbiBcdHN0cnVjdCByZHNfbXIgKm1yID0gY29udGFpbmVyX29mKGtyZWYsIHN0cnVjdCByZHNfbXIsIHJfa3JlZik7XG4gXG4gXHRyZHNfZGVzdHJveV9tcihtcik7XG4mIzQzO1x0c29ja19wdXQocmRzX3JzX3RvX3NrKG1yLVx1MDAzZXJfc29jaykpO1xuIFx0a2ZyZWUobXIpO1xuIH1cbiBcbkBAIC0yNDMsNyAmIzQzOzI0NCwxMSBAQCBzdGF0aWMgaW50IF9fcmRzX3JkbWFfbWFwKHN0cnVjdCByZHNfc29jayAqcnMsIHN0cnVjdCByZHNfZ2V0X21yX2FyZ3MgKmFyZ3MsXG4gXHRrcmVmX2luaXQoXHUwMDI2bXItXHUwMDNlcl9rcmVmKTtcbiBcdFJCX0NMRUFSX05PREUoXHUwMDI2bXItXHUwMDNlcl9yYl9ub2RlKTtcbiBcdG1yLVx1MDAzZXJfdHJhbnMgPSBycy1cdTAwM2Vyc190cmFuc3BvcnQ7XG4mIzQzO1x0LyogVGhlIE1SIGNhbiBvdXRsaXZlIGl0cyBzb2NrZXQ6IGEgc29ja2V0IHJlZmVyZW5jZSBpcyBoZWxkXG4mIzQzO1x0ICogdW50aWwgdGhlIGZpbmFsIGtyZWYgaXMgZHJvcHBlZCBpbiBfX3Jkc19wdXRfbXJfZmluYWwoKS5cbiYjNDM7XHQgKi9cbiBcdG1yLVx1MDAzZXJfc29jayA9IHJzO1xuJiM0MztcdHNvY2tfaG9sZChyZHNfcnNfdG9fc2socnMpKTtcbiBcbiBcdGlmIChhcmdzLVx1MDAzZWZsYWdzIFx1MDAyNiBSRFNfUkRNQV9VU0VfT05DRSlcbiBcdFx0bXItXHUwMDNlcl91c2Vfb25jZSA9IDE7XG5AQCAtNDk1LDcgJiM0Mzs1MDAsOSBAQCB2b2lkIHJkc19yZG1hX2ZyZWVfb3Aoc3RydWN0IHJtX3JkbWFfb3AgKnJvKVxuIFxuIFx0XHRcdC8qIE1hcmsgcGFnZSBkaXJ0eSBpZiBpdCB3YXMgcG9zc2libHkgbW9kaWZpZWQsIHdoaWNoXG4gXHRcdFx0ICogaXMgdGhlIGNhc2UgZm9yIGEgUkRNQV9SRUFEIHdoaWNoIGNvcGllcyBmcm9tIHJlbW90ZVxuLVx0XHRcdCAqIHRvIGxvY2FsIG1lbW9yeVxuJiM0MztcdFx0XHQgKiB0byBsb2NhbCBtZW1vcnkuICBEaXJ0eWluZyB0aGUgcGFnZSBjYW4gc2xlZXAsIHNvXG4mIzQzO1x0XHRcdCAqIHJkc19tZXNzYWdlX3B1dCgpIGRlZmVycyB0aGUgcHVyZ2Ugb2Ygc3VjaCBvcHMgdG9cbiYjNDM7XHRcdFx0ICogcHJvY2VzcyBjb250ZXh0LlxuIFx0XHRcdCAqL1xuIFx0XHRcdHVucGluX3VzZXJfcGFnZXNfZGlydHlfbG9jayhcdTAwMjZwYWdlLCAxLCAhcm8tXHUwMDNlb3Bfd3JpdGUpO1xuIFx0XHR9XG5AQCAtNTEzLDcgJiM0Mzs1MjAsMTAgQEAgdm9pZCByZHNfYXRvbWljX2ZyZWVfb3Aoc3RydWN0IHJtX2F0b21pY19vcCAqYW8pXG4gXG4gXHQvKiBNYXJrIHBhZ2UgZGlydHkgaWYgaXQgd2FzIHBvc3NpYmx5IG1vZGlmaWVkLCB3aGljaFxuIFx0ICogaXMgdGhlIGNhc2UgZm9yIGEgUkRNQV9SRUFEIHdoaWNoIGNvcGllcyBmcm9tIHJlbW90ZVxuLVx0ICogdG8gbG9jYWwgbWVtb3J5ICovXG4mIzQzO1x0ICogdG8gbG9jYWwgbWVtb3J5LiAgRGlydHlpbmcgdGhlIHBhZ2UgY2FuIHNsZWVwLCBzb1xuJiM0MztcdCAqIHJkc19tZXNzYWdlX3B1dCgpIGRlZmVycyB0aGUgcHVyZ2Ugb2Ygc3VjaCBvcHMgdG9cbiYjNDM7XHQgKiBwcm9jZXNzIGNvbnRleHQuXG4mIzQzO1x0ICovXG4gXHR1bnBpbl91c2VyX3BhZ2VzX2RpcnR5X2xvY2soXHUwMDI2cGFnZSwgMSwgdHJ1ZSk7XG4gXG4gXHRrZnJlZShhby1cdTAwM2VvcF9ub3RpZmllcik7XG5AQCAtNzQ3LDYgJiM0Mzs3NTcsMTAgQEAgaW50IHJkc19jbXNnX3JkbWFfYXJncyhzdHJ1Y3QgcmRzX3NvY2sgKnJzLCBzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtLFxuIFx0XHRcdH1cbiBcdFx0XHRyZHNkZWJ1ZyhcJiMzNDtOZWVkIG9kcDsgbG9jYWxfb2RwX21yICVwIHRyYW5zX3ByaXZhdGUgJXBcXG5cJiMzNDssXG4gXHRcdFx0XHQgbG9jYWxfb2RwX21yLCBsb2NhbF9vZHBfbXItXHUwMDNlcl90cmFuc19wcml2YXRlKTtcbiYjNDM7XHRcdFx0LyogRnJvbSBoZXJlIG9uIHRoZSBNUiBpcyB0b3JuIGRvd24gdGhyb3VnaFxuJiM0MztcdFx0XHQgKiBfX3Jkc19wdXRfbXJfZmluYWwoKSwgd2hpY2ggZHJvcHMgdGhpcyByZWZlcmVuY2UuXG4mIzQzO1x0XHRcdCAqL1xuJiM0MztcdFx0XHRzb2NrX2hvbGQocmRzX3JzX3RvX3NrKHJzKSk7XG4gXHRcdFx0b3AtXHUwMDNlb3Bfb2RwX21yID0gbG9jYWxfb2RwX21yO1xuIFx0XHRcdG9wLVx1MDAzZW9wX29kcF9hZGRyID0gaW92LVx1MDAzZWFkZHI7XG4gXHRcdH1cbmRpZmYgLS1naXQgYS9uZXQvcmRzL3Jkcy5oIGIvbmV0L3Jkcy9yZHMuaFxuaW5kZXggNmUwNzkwZTRiNTcwM2IuLjk4MmYzZTQwNjc3M2ZhIDEwMDY0NFxuLS0tIGEvbmV0L3Jkcy9yZHMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3Jkcy9yZHMuaFxuQEAgLTQ0NSw2ICYjNDM7NDQ1LDEyIEBAIHN0cnVjdCByZHNfbWVzc2FnZSB7XG4gXG4gXHR2b2lkXHRcdFx0Km1fZmluYWxfb3A7XG4gXG4mIzQzO1x0LyogRnJlZXMgdGhlIG1lc3NhZ2UgZnJvbSBwcm9jZXNzIGNvbnRleHQgd2hlbiB0aGUgZmluYWwgcHV0XG4mIzQzO1x0ICogaGFwcGVucyBpbiBhdG9taWMgY29udGV4dCBidXQgcHVyZ2luZyBuZWVkcyB0byBkaXJ0eSB1c2VyXG4mIzQzO1x0ICogcGFnZXMsIHdoaWNoIGNhbiBzbGVlcC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRzdHJ1Y3Qgd29ya19zdHJ1Y3RcdG1fcHVyZ2Vfd29yaztcbiYjNDM7XG4gXHRzdHJ1Y3Qge1xuIFx0XHRzdHJ1Y3Qgcm1fYXRvbWljX29wIHtcbiBcdFx0XHRpbnRcdFx0XHRvcF90eXBlO1xuZGlmZiAtLWdpdCBhL25ldC9yZHMvc2VuZC5jIGIvbmV0L3Jkcy9zZW5kLmNcbmluZGV4IDY4YmUxYmYwZTBhZGY5Li43ZTQ4ZjY0ZGZhYTY3OSAxMDA2NDRcbi0tLSBhL25ldC9yZHMvc2VuZC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvcmRzL3NlbmQuY1xuQEAgLTMzOSw5ICYjNDM7MzM5LDIxIEBAIGludCByZHNfc2VuZF94bWl0KHN0cnVjdCByZHNfY29ubl9wYXRoICpjcClcbiBcdFx0XHQgICAgKHJtLVx1MDAzZXJkbWEub3BfYWN0aXZlIFx1MDAyNlx1MDAyNlxuIFx0XHRcdCAgICB0ZXN0X2JpdChSRFNfTVNHX1JFVFJBTlNNSVRURUQsIFx1MDAyNnJtLVx1MDAzZW1fZmxhZ3MpKSkge1xuIFx0XHRcdFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2Y3AtXHUwMDNlY3BfbG9jaywgZmxhZ3MpO1xuLVx0XHRcdFx0aWYgKHRlc3RfYW5kX2NsZWFyX2JpdChSRFNfTVNHX09OX0NPTk4sIFx1MDAyNnJtLVx1MDAzZW1fZmxhZ3MpKVxuLVx0XHRcdFx0XHRsaXN0X21vdmUoXHUwMDI2cm0tXHUwMDNlbV9jb25uX2l0ZW0sIFx1MDAyNnRvX2JlX2Ryb3BwZWQpO1xuLVx0XHRcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZjcC1cdTAwM2VjcF9sb2NrLCBmbGFncyk7XG4mIzQzO1x0XHRcdFx0aWYgKHRlc3RfYW5kX2NsZWFyX2JpdChSRFNfTVNHX09OX0NPTk4sXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgICBcdTAwMjZybS1cdTAwM2VtX2ZsYWdzKSkge1xuJiM0MztcdFx0XHRcdFx0Lyogb3VyIHJlZiBpcyBwdXQgYWZ0ZXIgdGhlIGJhdGNoICovXG4mIzQzO1x0XHRcdFx0XHRsaXN0X21vdmUoXHUwMDI2cm0tXHUwMDNlbV9jb25uX2l0ZW0sXG4mIzQzO1x0XHRcdFx0XHRcdCAgXHUwMDI2dG9fYmVfZHJvcHBlZCk7XG4mIzQzO1x0XHRcdFx0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmNwLVx1MDAzZWNwX2xvY2ssXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgICAgIGZsYWdzKTtcbiYjNDM7XHRcdFx0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRcdFx0LyogYWxyZWFkeSBvZmYgdGhlIGNvbm4gbGlzdDsgZHJvcFxuJiM0MztcdFx0XHRcdFx0ICogdGhlIHJlZiB0YWtlbiBhYm92ZSBvdXJzZWx2ZXNcbiYjNDM7XHRcdFx0XHRcdCAqL1xuJiM0MztcdFx0XHRcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZjcC1cdTAwM2VjcF9sb2NrLFxuJiM0MztcdFx0XHRcdFx0XHRcdCAgICAgICBmbGFncyk7XG4mIzQzO1x0XHRcdFx0XHRyZHNfbWVzc2FnZV9wdXQocm0pO1xuJiM0MztcdFx0XHRcdH1cbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRcdH1cbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxMDo0NTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UkRTJiMzNDssCiAgICAmIzM0O1JEU19SRE1BJiMzNDssCiAgICAmIzM0O0lORklOSUJBTkQmIzM0OywKICAgICYjMzQ7SU5GSU5JQkFORF9BRERSX1RSQU5TJiMzNDssCiAgICAmIzM0O1JETUFfUlhFJiMzNDssCiAgICAmIzM0O1JETUFfU0lXJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cmRzX21lc3NhZ2VfcHV0JiMzNDssCiAgICAmIzM0O3Jkc19zZW5kX3htaXQmIzM0OywKICAgICYjMzQ7cmRzX2Ntc2dfcmRtYV9hcmdzJiMzNDssCiAgICAmIzM0O3Jkc19yZG1hX2ZyZWVfb3AmIzM0OywKICAgICYjMzQ7cmRzX2F0b21pY19mcmVlX29wJiMzNDssCiAgICAmIzM0O19fcmRzX3B1dF9tcl9maW5hbCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHNsZWVwLWluLWF0b21pYyBidWcgaW4gUkRTIG1lc3NhZ2UgcHVyZ2luZyBieSBkZWZlcnJpbmcgdGhlIHB1cmdlIG9mIG1lc3NhZ2VzIHRoYXQgZGlydHkgcGFnZXMgdG8gYSB3b3JrcXVldWUuIEl0IGFsc28gZml4ZXMgc29ja2V0IHJlZmVyZW5jZSBjb3VudGluZyBpc3N1ZXMgaW4gUkRTIFJETUEgb3BlcmF0aW9ucyBhbmQgYSByZWZlcmVuY2UgbGVhayBpbiBgcmRzX3NlbmRfeG1pdGAuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gdGhlIGNvcmUgUkRTIGFuZCBSRFMgUkRNQSBjb2RlIHBhdGhzIHRoYXQgY2FuIGJlIHJlYWNoZWQgdmlhIHN0YW5kYXJkIHNvY2tldCBvcGVyYXRpb25zIGFuZCBSRE1BIG1lc3NhZ2VzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgM2ZmMDUxNmRiNWIzZjljMGJmZmNjYzE0ZmZmODdjMjRmOTljNjY4NQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gSnVsIDI3IDEwOjQ1OjI1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9pYi5jIGIvbmV0L3Jkcy9pYi5jCmluZGV4IDhmOWNmNDkxOTg0ZjEyLi5hZDJmMDM4YmQxYWM0MiAxMDA2NDQKLS0tIGEvbmV0L3Jkcy9pYi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9yZHMvaWIuYwpAQCAtNTQxLDYgJiM0Mzs1NDEsMTggQEAgdm9pZCByZHNfaWJfZXhpdCh2b2lkKQogI2VuZGlmCiAJcmRzX2liX3VucmVnaXN0ZXJfY2xpZW50KCk7CiAJcmRzX2liX2Rlc3Ryb3lfbm9kZXZfY29ubnMoKTsKJiM0MzsKJiM0MzsJLyogVGhlIGNvbXBsZXRpb24gdGFza2xldHMgbWF5IGhhdmUgZGVmZXJyZWQgbWVzc2FnZSBmcmVlcyB0bwomIzQzOwkgKiByZHNfd3EsIGFuZCB0aG9zZSBjYW4gY2FsbCBiYWNrIGludG8gdGhpcyBtb2R1bGUgdGhyb3VnaCB0aGUKJiM0MzsJICogb3AmIzM5O3MgTVIuICBEcmFpbiB0aGVtIGJlZm9yZSB0aGUgbW9kdWxlIGdvZXMgYXdheS4gIEEgZGVmZXJyZWQKJiM0MzsJICogcHVyZ2UgY2FuIGRyb3AgdGhlIGZpbmFsIHJlZmVyZW5jZSBvbiB0aGUgb3AmIzM5O3MgZGV2aWNlLCB3aGljaAomIzQzOwkgKiBxdWV1ZXMgcmRzX2liX2Rldl9mcmVlKCkgYmFjayBvbnRvIHJkc193cSwgYW5kCiYjNDM7CSAqIGZsdXNoX3dvcmtxdWV1ZSgpIGRvZXMgbm90IHdhaXQgZm9yIHdvcmsgcXVldWVkIGJ5IHRoZSBpdGVtcwomIzQzOwkgKiBpdCBpcyBmbHVzaGluZy4gIEZsdXNoIGEgc2Vjb25kIHRpbWUgZm9yIHRob3NlLgomIzQzOwkgKi8KJiM0MzsJZmx1c2hfd29ya3F1ZXVlKHJkc193cSk7CiYjNDM7CWZsdXNoX3dvcmtxdWV1ZShyZHNfd3EpOwomIzQzOwogCXJkc19pYl9zeXNjdGxfZXhpdCgpOwogCXJkc19pYl9yZWN2X2V4aXQoKTsKIAlyZHNfdHJhbnNfdW5yZWdpc3RlcigmYW1wO3Jkc19pYl90cmFuc3BvcnQpOwpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9tZXNzYWdlLmMgYi9uZXQvcmRzL21lc3NhZ2UuYwppbmRleCA3ZmViMGViNjUzN2RiOC4uMmY2NTRhY2FkMjliOTQgMTAwNjQ0Ci0tLSBhL25ldC9yZHMvbWVzc2FnZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9yZHMvbWVzc2FnZS5jCkBAIC0xODIsNiAmIzQzOzE4MiwyOSBAQCBzdGF0aWMgdm9pZCByZHNfbWVzc2FnZV9wdXJnZShzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtKQogCQlrcmVmX3B1dCgmYW1wO3JtLSZndDthdG9taWMub3BfcmRtYV9tci0mZ3Q7cl9rcmVmLCBfX3Jkc19wdXRfbXJfZmluYWwpOwogfQogCiYjNDM7c3RhdGljIHZvaWQgcmRzX21lc3NhZ2VfcHVyZ2Vfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKJiM0Mzt7CiYjNDM7CXN0cnVjdCByZHNfbWVzc2FnZSAqcm0gPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHJkc19tZXNzYWdlLAomIzQzOwkJCQkJICAgICAgbV9wdXJnZV93b3JrKTsKJiM0MzsKJiM0MzsJcmRzX21lc3NhZ2VfcHVyZ2Uocm0pOwomIzQzOwomIzQzOwlrZnJlZShybSk7CiYjNDM7fQomIzQzOwomIzQzOy8qIFB1cmdpbmcgYSBtZXNzYWdlIHdpdGggYW4gUkRNQSBvciBhdG9taWMgb3Agd2hvc2UgcGFnZXMgd2VyZSBwb3NzaWJseQomIzQzOyAqIHdyaXR0ZW4gYnkgdGhlIHJlbW90ZSBzaWRlIG11c3QgZGlydHkgdGhvc2UgcGFnZXMsIHdoaWNoIGNhbiBzbGVlcAomIzQzOyAqIChhbmQgdGhlIHBhZ2VzIG1heSBiZSBmaWxlLWJhY2tlZCwgc28gZGlydHlpbmcgdGhlbSB1bmRlciBhIG5vbi1pcnEtc2FmZQomIzQzOyAqIGZpbGVzeXN0ZW0gbG9jayBtdXN0IG5vdCBoYXBwZW4gZnJvbSBhdG9taWMgY29udGV4dCBhdCBhbGwpLgomIzQzOyAqLwomIzQzO3N0YXRpYyBib29sIHJkc19tZXNzYWdlX2RpcnRpZXNfcGFnZXMoc3RydWN0IHJkc19tZXNzYWdlICpybSkKJiM0Mzt7CiYjNDM7CWlmIChybS0mZ3Q7cmRtYS5vcF9hY3RpdmUgJmFtcDsmYW1wOyBybS0mZ3Q7cmRtYS5vcF9uZW50cyAmYW1wOyZhbXA7ICFybS0mZ3Q7cmRtYS5vcF93cml0ZSAmYW1wOyZhbXA7CiYjNDM7CSAgICAhcm0tJmd0O3JkbWEub3Bfb2RwX21yKQomIzQzOwkJcmV0dXJuIHRydWU7CiYjNDM7CXJldHVybiBybS0mZ3Q7YXRvbWljLm9wX2FjdGl2ZTsKJiM0Mzt9CiYjNDM7CiB2b2lkIHJkc19tZXNzYWdlX3B1dChzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtKQogewogCXJkc2RlYnVnKCYjMzQ7cHV0IHJtICVwIHJlZiAlZFxuJiMzNDssIHJtLCByZWZjb3VudF9yZWFkKCZhbXA7cm0tJmd0O21fcmVmY291bnQpKTsKQEAgLTE4OSw2ICYjNDM7MjEyLDE3IEBAIHZvaWQgcmRzX21lc3NhZ2VfcHV0KHN0cnVjdCByZHNfbWVzc2FnZSAqcm0pCiAJaWYgKHJlZmNvdW50X2RlY19hbmRfdGVzdCgmYW1wO3JtLSZndDttX3JlZmNvdW50KSkgewogCQlCVUdfT04oIWxpc3RfZW1wdHkoJmFtcDtybS0mZ3Q7bV9zb2NrX2l0ZW0pKTsKIAkJQlVHX09OKCFsaXN0X2VtcHR5KCZhbXA7cm0tJmd0O21fY29ubl9pdGVtKSk7CiYjNDM7CiYjNDM7CQkvKiBUaGUgZmluYWwgcHV0IG1heSBjb21lIGZyb20gdGhlIElCIHNlbmQgY29tcGxldGlvbgomIzQzOwkJICogdGFza2xldDsgcGFnZSBkaXJ0eWluZyBtdXN0IGJlIGRlZmVycmVkIHRvIHByb2Nlc3MKJiM0MzsJCSAqIGNvbnRleHQgdGhlbi4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKCFpbl90YXNrKCkgJmFtcDsmYW1wOyByZHNfbWVzc2FnZV9kaXJ0aWVzX3BhZ2VzKHJtKSkgewomIzQzOwkJCUlOSVRfV09SSygmYW1wO3JtLSZndDttX3B1cmdlX3dvcmssIHJkc19tZXNzYWdlX3B1cmdlX3dvcmtlcik7CiYjNDM7CQkJcXVldWVfd29yayhyZHNfd3EsICZhbXA7cm0tJmd0O21fcHVyZ2Vfd29yayk7CiYjNDM7CQkJcmV0dXJuOwomIzQzOwkJfQomIzQzOwogCQlyZHNfbWVzc2FnZV9wdXJnZShybSk7CiAKIAkJa2ZyZWUocm0pOwpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9yZG1hLmMgYi9uZXQvcmRzL3JkbWEuYwppbmRleCA2MWZiNmU0NTI4MWJmMS4uNWY1NzUzYWZkY2RjYmQgMTAwNjQ0Ci0tLSBhL25ldC9yZHMvcmRtYS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9yZHMvcmRtYS5jCkBAIC0xMTcsNiAmIzQzOzExNyw3IEBAIHZvaWQgX19yZHNfcHV0X21yX2ZpbmFsKHN0cnVjdCBrcmVmICprcmVmKQogCXN0cnVjdCByZHNfbXIgKm1yID0gY29udGFpbmVyX29mKGtyZWYsIHN0cnVjdCByZHNfbXIsIHJfa3JlZik7CiAKIAlyZHNfZGVzdHJveV9tcihtcik7CiYjNDM7CXNvY2tfcHV0KHJkc19yc190b19zayhtci0mZ3Q7cl9zb2NrKSk7CiAJa2ZyZWUobXIpOwogfQogCkBAIC0yNDMsNyAmIzQzOzI0NCwxMSBAQCBzdGF0aWMgaW50IF9fcmRzX3JkbWFfbWFwKHN0cnVjdCByZHNfc29jayAqcnMsIHN0cnVjdCByZHNfZ2V0X21yX2FyZ3MgKmFyZ3MsCiAJa3JlZl9pbml0KCZhbXA7bXItJmd0O3Jfa3JlZik7CiAJUkJfQ0xFQVJfTk9ERSgmYW1wO21yLSZndDtyX3JiX25vZGUpOwogCW1yLSZndDtyX3RyYW5zID0gcnMtJmd0O3JzX3RyYW5zcG9ydDsKJiM0MzsJLyogVGhlIE1SIGNhbiBvdXRsaXZlIGl0cyBzb2NrZXQ6IGEgc29ja2V0IHJlZmVyZW5jZSBpcyBoZWxkCiYjNDM7CSAqIHVudGlsIHRoZSBmaW5hbCBrcmVmIGlzIGRyb3BwZWQgaW4gX19yZHNfcHV0X21yX2ZpbmFsKCkuCiYjNDM7CSAqLwogCW1yLSZndDtyX3NvY2sgPSByczsKJiM0MzsJc29ja19ob2xkKHJkc19yc190b19zayhycykpOwogCiAJaWYgKGFyZ3MtJmd0O2ZsYWdzICZhbXA7IFJEU19SRE1BX1VTRV9PTkNFKQogCQltci0mZ3Q7cl91c2Vfb25jZSA9IDE7CkBAIC00OTUsNyAmIzQzOzUwMCw5IEBAIHZvaWQgcmRzX3JkbWFfZnJlZV9vcChzdHJ1Y3Qgcm1fcmRtYV9vcCAqcm8pCiAKIAkJCS8qIE1hcmsgcGFnZSBkaXJ0eSBpZiBpdCB3YXMgcG9zc2libHkgbW9kaWZpZWQsIHdoaWNoCiAJCQkgKiBpcyB0aGUgY2FzZSBmb3IgYSBSRE1BX1JFQUQgd2hpY2ggY29waWVzIGZyb20gcmVtb3RlCi0JCQkgKiB0byBsb2NhbCBtZW1vcnkKJiM0MzsJCQkgKiB0byBsb2NhbCBtZW1vcnkuICBEaXJ0eWluZyB0aGUgcGFnZSBjYW4gc2xlZXAsIHNvCiYjNDM7CQkJICogcmRzX21lc3NhZ2VfcHV0KCkgZGVmZXJzIHRoZSBwdXJnZSBvZiBzdWNoIG9wcyB0bwomIzQzOwkJCSAqIHByb2Nlc3MgY29udGV4dC4KIAkJCSAqLwogCQkJdW5waW5fdXNlcl9wYWdlc19kaXJ0eV9sb2NrKCZhbXA7cGFnZSwgMSwgIXJvLSZndDtvcF93cml0ZSk7CiAJCX0KQEAgLTUxMyw3ICYjNDM7NTIwLDEwIEBAIHZvaWQgcmRzX2F0b21pY19mcmVlX29wKHN0cnVjdCBybV9hdG9taWNfb3AgKmFvKQogCiAJLyogTWFyayBwYWdlIGRpcnR5IGlmIGl0IHdhcyBwb3NzaWJseSBtb2RpZmllZCwgd2hpY2gKIAkgKiBpcyB0aGUgY2FzZSBmb3IgYSBSRE1BX1JFQUQgd2hpY2ggY29waWVzIGZyb20gcmVtb3RlCi0JICogdG8gbG9jYWwgbWVtb3J5ICovCiYjNDM7CSAqIHRvIGxvY2FsIG1lbW9yeS4gIERpcnR5aW5nIHRoZSBwYWdlIGNhbiBzbGVlcCwgc28KJiM0MzsJICogcmRzX21lc3NhZ2VfcHV0KCkgZGVmZXJzIHRoZSBwdXJnZSBvZiBzdWNoIG9wcyB0bwomIzQzOwkgKiBwcm9jZXNzIGNvbnRleHQuCiYjNDM7CSAqLwogCXVucGluX3VzZXJfcGFnZXNfZGlydHlfbG9jaygmYW1wO3BhZ2UsIDEsIHRydWUpOwogCiAJa2ZyZWUoYW8tJmd0O29wX25vdGlmaWVyKTsKQEAgLTc0Nyw2ICYjNDM7NzU3LDEwIEBAIGludCByZHNfY21zZ19yZG1hX2FyZ3Moc3RydWN0IHJkc19zb2NrICpycywgc3RydWN0IHJkc19tZXNzYWdlICpybSwKIAkJCX0KIAkJCXJkc2RlYnVnKCYjMzQ7TmVlZCBvZHA7IGxvY2FsX29kcF9tciAlcCB0cmFuc19wcml2YXRlICVwXG4mIzM0OywKIAkJCQkgbG9jYWxfb2RwX21yLCBsb2NhbF9vZHBfbXItJmd0O3JfdHJhbnNfcHJpdmF0ZSk7CiYjNDM7CQkJLyogRnJvbSBoZXJlIG9uIHRoZSBNUiBpcyB0b3JuIGRvd24gdGhyb3VnaAomIzQzOwkJCSAqIF9fcmRzX3B1dF9tcl9maW5hbCgpLCB3aGljaCBkcm9wcyB0aGlzIHJlZmVyZW5jZS4KJiM0MzsJCQkgKi8KJiM0MzsJCQlzb2NrX2hvbGQocmRzX3JzX3RvX3NrKHJzKSk7CiAJCQlvcC0mZ3Q7b3Bfb2RwX21yID0gbG9jYWxfb2RwX21yOwogCQkJb3AtJmd0O29wX29kcF9hZGRyID0gaW92LSZndDthZGRyOwogCQl9CmRpZmYgLS1naXQgYS9uZXQvcmRzL3Jkcy5oIGIvbmV0L3Jkcy9yZHMuaAppbmRleCA2ZTA3OTBlNGI1NzAzYi4uOTgyZjNlNDA2NzczZmEgMTAwNjQ0Ci0tLSBhL25ldC9yZHMvcmRzLmgKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3Jkcy9yZHMuaApAQCAtNDQ1LDYgJiM0Mzs0NDUsMTIgQEAgc3RydWN0IHJkc19tZXNzYWdlIHsKIAogCXZvaWQJCQkqbV9maW5hbF9vcDsKIAomIzQzOwkvKiBGcmVlcyB0aGUgbWVzc2FnZSBmcm9tIHByb2Nlc3MgY29udGV4dCB3aGVuIHRoZSBmaW5hbCBwdXQKJiM0MzsJICogaGFwcGVucyBpbiBhdG9taWMgY29udGV4dCBidXQgcHVyZ2luZyBuZWVkcyB0byBkaXJ0eSB1c2VyCiYjNDM7CSAqIHBhZ2VzLCB3aGljaCBjYW4gc2xlZXAuCiYjNDM7CSAqLwomIzQzOwlzdHJ1Y3Qgd29ya19zdHJ1Y3QJbV9wdXJnZV93b3JrOwomIzQzOwogCXN0cnVjdCB7CiAJCXN0cnVjdCBybV9hdG9taWNfb3AgewogCQkJaW50CQkJb3BfdHlwZTsKZGlmZiAtLWdpdCBhL25ldC9yZHMvc2VuZC5jIGIvbmV0L3Jkcy9zZW5kLmMKaW5kZXggNjhiZTFiZjBlMGFkZjkuLjdlNDhmNjRkZmFhNjc5IDEwMDY0NAotLS0gYS9uZXQvcmRzL3NlbmQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvcmRzL3NlbmQuYwpAQCAtMzM5LDkgJiM0MzszMzksMjEgQEAgaW50IHJkc19zZW5kX3htaXQoc3RydWN0IHJkc19jb25uX3BhdGggKmNwKQogCQkJICAgIChybS0mZ3Q7cmRtYS5vcF9hY3RpdmUgJmFtcDsmYW1wOwogCQkJICAgIHRlc3RfYml0KFJEU19NU0dfUkVUUkFOU01JVFRFRCwgJmFtcDtybS0mZ3Q7bV9mbGFncykpKSB7CiAJCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtjcC0mZ3Q7Y3BfbG9jaywgZmxhZ3MpOwotCQkJCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoUkRTX01TR19PTl9DT05OLCAmYW1wO3JtLSZndDttX2ZsYWdzKSkKLQkJCQkJbGlzdF9tb3ZlKCZhbXA7cm0tJmd0O21fY29ubl9pdGVtLCAmYW1wO3RvX2JlX2Ryb3BwZWQpOwotCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtjcC0mZ3Q7Y3BfbG9jaywgZmxhZ3MpOwomIzQzOwkJCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KFJEU19NU0dfT05fQ09OTiwKJiM0MzsJCQkJCQkgICAgICAgJmFtcDtybS0mZ3Q7bV9mbGFncykpIHsKJiM0MzsJCQkJCS8qIG91ciByZWYgaXMgcHV0IGFmdGVyIHRoZSBiYXRjaCAqLwomIzQzOwkJCQkJbGlzdF9tb3ZlKCZhbXA7cm0tJmd0O21fY29ubl9pdGVtLAomIzQzOwkJCQkJCSAgJmFtcDt0b19iZV9kcm9wcGVkKTsKJiM0MzsJCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtjcC0mZ3Q7Y3BfbG9jaywKJiM0MzsJCQkJCQkJICAgICAgIGZsYWdzKTsKJiM0MzsJCQkJfSBlbHNlIHsKJiM0MzsJCQkJCS8qIGFscmVhZHkgb2ZmIHRoZSBjb25uIGxpc3Q7IGRyb3AKJiM0MzsJCQkJCSAqIHRoZSByZWYgdGFrZW4gYWJvdmUgb3Vyc2VsdmVzCiYjNDM7CQkJCQkgKi8KJiM0MzsJCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtjcC0mZ3Q7Y3BfbG9jaywKJiM0MzsJCQkJCQkJICAgICAgIGZsYWdzKTsKJiM0MzsJCQkJCXJkc19tZXNzYWdlX3B1dChybSk7CiYjNDM7CQkJCX0KIAkJCQljb250aW51ZTsKIAkJCX0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxMDo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MzUxCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMzA3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFJEUyBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBoZXJlIHRoYXTigJlzIHRvdWNoaW5nIHRoZSBSRFMgc3Vic3lzdGVtIGluIHRoZSBMaW51eCBrZXJuZWwuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgbWFraW5nIGNoYW5nZXMgdG8gc2V2ZXJhbCBrZXkgZmlsZXM6IGBpYi5jYCwgYG1lc3NhZ2UuY2AsIGByZG1hLmNgLCBgcmRzLmhgLCBhbmQgYHNlbmQuY2AuIE15IGluaXRpYWwgcmVhZCBzdWdnZXN0cyB0aGV54oCZcmUgaW50cm9kdWNpbmcgYSBkZWZlcnJlZCBwdXJnZSBtZWNoYW5pc20gZm9yIFJEUyBtZXNzYWdlcyB0aGF0IGRpcnR5IHBhZ2VzLiBJdCBtYWtlcyBzZW5zZSwgYXMgYXRvbWljIGNvbnRleHRzIGFyZSB1c3VhbGx5IHByb2JsZW1hdGljIHdoZW4gc2xlZXBpbmcgaXMgaW52b2x2ZWQuIFRoYXTigJlzIHByb2JhYmx5IHRoZSBtYWluIHBlcmZvcm1hbmNlIHR3ZWFrLgoKVGhlIHBhdGNoIGFsc28gc2VlbXMgdG8gYmUgYWRkcmVzc2luZyBzb21lIHJlZmVyZW5jZSBjb3VudGluZyBpc3N1ZXMgcmVsYXRlZCB0byBNUnMgYW5kIHNvY2tldHMuIEdvb2QsIHRob3NlIGFyZSBhbHdheXMgdHJpY2t5IGFuZCBjYW4gbGVhZCB0byBzZXJpb3VzIHByb2JsZW1zIGlmIG5vdCBoYW5kbGVkIGNvcnJlY3RseS4gVGhleSYjMzk7cmUgdG91Y2hpbmcgYHNvY2tfaG9sZGAgYW5kIGBzb2NrX3B1dGAsIHNvIEkmIzM5O2xsIHdhbnQgdG8gcGF5IGV4dHJhIGF0dGVudGlvbiB0byB0aG9zZSBjb2RlIHNlZ21lbnRzLiBBbHNvLCBhIGZpeCBpbiBgcmRzX3NlbmRfeG1pdGAsIHdoZXJlIG1lc3NhZ2VzIHdlcmUgcG90ZW50aWFsbHkgYmVpbmcgZHJvcHBlZCBmcm9tIHRoZSBjb25uZWN0aW9uIGxpc3QgaW1wcm9wZXJseS4gQWdhaW4sIHRoaXMgaXMgdGhlIHNvcnQgb2YgdGhpbmcgdGhhdCBjYW4gYml0ZSB5b3UgbGF0ZXIuCgpOb3csIG15IHByaW1hcnkgY29uY2VybiBpcyByZWFjaGFiaWxpdHkgYW5kIGZ1bmN0aW9uYWxpdHkuIFNpbmNlIFJEUyBpcyBhIG5ldHdvcmsgcHJvdG9jb2wsIEkmIzM5O20gYXNzdW1pbmcgaXQmIzM5O3MgYWxyZWFkeSBmdW5jdGlvbmFsIGluIGl0cyBleGlzdGluZyBzdGF0ZSwgYnV0IEkgZGVmaW5pdGVseSBuZWVkIHRvIHZlcmlmeSB0aGF0IHRoaXMgcGF0Y2ggZG9lc24mIzM5O3QgYnJlYWsgYW55dGhpbmcgb3IgY3JlYXRlIG5ldyB2dWxuZXJhYmlsaXRpZXMuIFRoZSBtb3N0IGVmZmVjdGl2ZSBhcHByb2FjaCB3b3VsZCBiZSB0byBmdXp6IGl0LgoKSSYjMzk7bGwgbmVlZCB0byBwaW5wb2ludCB0aGUgY3JpdGljYWwgZnVuY3Rpb25zIHRoaXMgcGF0Y2ggaW50ZXJhY3RzIHdpdGggZGlyZWN0bHkuIExldCYjMzk7cyBzZWUuLi4gSSYjMzk7dmUgZ290OgoKKiAgIGByZHNfbWVzc2FnZV9wdXRgCiogICBgcmRzX3NlbmRfeG1pdGAKKiAgIGByZHNfY21zZ19yZG1hX2FyZ3NgCiogICBgcmRzX3JkbWFfZnJlZV9vcGAKKiAgIGByZHNfYXRvbWljX2ZyZWVfb3BgCiogICBgX19yZHNfcmRtYV9tYXBgCiogICBgX19yZHNfcHV0X21yX2ZpbmFsYAoKVGhlc2UgYXJlIGRlZmluaXRlbHkgdGhlIGtleSBhcmVhcyB0byBwcm9iZSB3aXRoIGZ1enppbmcuCgpOZXh0LCBJJiMzOTtsbCByZXZpZXcgdGhlIFJEUyBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEkmIzM5O2xsIHNlYXJjaCBmb3IgJiMzNDtSRFMmIzM0OyBpbiBzb21ldGhpbmcgbGlrZSBgbmV0L3Jkcy9LY29uZmlnYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBzZXR0aW5ncyB0aGF0IGluZmx1ZW5jZSB0aGUgYmVoYXZpb3Igb2YgdGhlc2UgZnVuY3Rpb25zLiBLbm93aW5nIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgd2lsbCBiZSBjcml0aWNhbCBmb3IgZWZmZWN0aXZlIGZ1enppbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTA6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFJEUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9yZHMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvcmRzL0tjb25maWctMi1cbm5ldC9yZHMvS2NvbmZpZzozOmNvbmZpZyBSRFNcbm5ldC9yZHMvS2NvbmZpZy00LVx0dHJpc3RhdGUgXCYjMzQ7VGhlIFJlbGlhYmxlIERhdGFncmFtIFNvY2tldHMgUHJvdG9jb2xcJiMzNDtcbi0tXG5uZXQvcmRzL0tjb25maWctOS1cbm5ldC9yZHMvS2NvbmZpZzoxMDpjb25maWcgUkRTX1JETUFcbm5ldC9yZHMvS2NvbmZpZy0xMS1cdHRyaXN0YXRlIFwmIzM0O1JEUyBvdmVyIEluZmluaWJhbmRcJiMzNDtcbi0tXG5uZXQvcmRzL0tjb25maWctMTYtXG5uZXQvcmRzL0tjb25maWc6MTc6Y29uZmlnIFJEU19UQ1Bcbm5ldC9yZHMvS2NvbmZpZy0xOC1cdHRyaXN0YXRlIFwmIzM0O1JEUyBvdmVyIFRDUFwmIzM0O1xuLS1cbm5ldC9yZHMvS2NvbmZpZy0yNC1cbm5ldC9yZHMvS2NvbmZpZzoyNTpjb25maWcgUkRTX0RFQlVHXG5uZXQvcmRzL0tjb25maWctMjYtXHRib29sIFwmIzM0O1JEUyBkZWJ1Z2dpbmcgbWVzc2FnZXNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxMDo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MzUwCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBSRFMgQ29uZmlndXJhdGlvbiBhbmQgUG90ZW50aWFsIEltcGFjdCBvZiBhIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBjb25maWd1cmF0aW9uIG9wdGlvbnM6IGBSRFNgLCBgUkRTX1JETUFgLCBhbmQgYFJEU19UQ1BgLiBSaWdodCBhd2F5LCBteSBleHBlcnQgaW50dWl0aW9uIHRlbGxzIG1lIHRoYXQgdGhpcyBpcyByZWxhdGVkIHRvIHRoZSBSZWxpYWJsZSBEYXRhZ3JhbSBTb2NrZXRzIChSRFMpIHByb3RvY29sLCBwb3NzaWJseSBmb3IgZGlmZmVyZW50IHRyYW5zcG9ydHMuIEdpdmVuIHRoYXQgdGhlIHBhdGNoIG1vZGlmaWVzIGBuZXQvcmRzL2liLmNgLCBteSBicmFpbiBpbW1lZGlhdGVseSBqdW1wcyB0byBgUkRTX1JETUFgLiBUaGUgYGliLmNgIGZpbGUgbmFtZSBpcyBhIGRlYWQgZ2l2ZWF3YXksIGdpdmVuICYjMzQ7aWImIzM0OyBpbXBsaWVzIEluZmluaUJhbmQsIGEgY29tbW9uIFJETUEgdHJhbnNwb3J0LiBJdCYjMzk7cyBsaWtlbHkgdGhlIHBhdGNoIGRlYWxzIHdpdGggdGhlIFJETUEgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gd2l0aGluIFJEUy4gVG8gY29uZmlybSB0aGlzIGFzc29jaWF0aW9uLCBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgdGhlIGBuZXQvcmRzL01ha2VmaWxlYC4gVGhhdCYjMzk7bGwgaGVscCBtZSB1bmRlcnN0YW5kIGhvdyBgaWIuY2AgaXMgY29tcGlsZWQgaW50byB0aGUgUkRTIG1vZHVsZSwgZ2l2aW5nIG1lIHRoZSBmaW5hbCBwaWVjZSBvZiBjb25maXJtYXRpb24gSSBuZWVkIGFib3V0IGl0cyBkaXJlY3QgYXNzb2NpYXRpb24gd2l0aCBgUkRTX1JETUFgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDEwOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2liXFwubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9yZHMvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3Jkcy9NYWtlZmlsZT04PXJkc19yZG1hLXkgOj1cdHJkbWFfdHJhbnNwb3J0Lm8gXFxcbm5ldC9yZHMvTWFrZWZpbGU6OTpcdFx0XHRpYi5vIGliX2NtLm8gaWJfcmVjdi5vIGliX3JpbmcubyBpYl9zZW5kLm8gaWJfc3RhdHMubyBcXFxubmV0L3Jkcy9NYWtlZmlsZS0xMC1cdFx0XHRpYl9zeXNjdGwubyBpYl9yZG1hLm8gaWJfZnJtci5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTA6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTc0MwoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6CgoqKkRlbHZpbmcgaW50byB0aGUgUkRTX1JETUEgQnVpbGQgUHJvY2VzcyoqCgpSaWdodCwgc28gYGliLm9gIGlzIGRlZmluaXRlbHkgcGFydCBvZiB0aGUgYHJkc19yZG1hLXlgIG1vZHVsZSwgYW5kIHRoYXQgbW9kdWxlIGlzICpzcGVjaWZpY2FsbHkqIGNvbXBpbGVkIHdoZW4gYENPTkZJR19SRFNfUkRNQWAgaXMgZW5hYmxlZC4gTWFrZXMgc2Vuc2UuIFRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY3kgY2hhaW4sIGFuZCB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCBpdCYjMzk7cyBidWlsdCwgSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBgbmV0L3Jkcy9LY29uZmlnYCBmaWxlLiBUaGF0JiMzOTtzIHdoZXJlIGFsbCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGF0IHBhcnQgb2YgdGhlIG5ldHdvcmtpbmcgc3RhY2sgYXJlIGRlZmluZWQsIGluY2x1ZGluZyB0aGUgZGVwZW5kZW5jaWVzIG9mIGBSRFNfUkRNQWAuIEkgbmVlZCB0byBmaWd1cmUgb3V0ICpleGFjdGx5KiB3aGF0IHRyaWdnZXJzIHRoYXQgZmxhZywgYW5kIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgdW5kZXJseWluZyByZXF1aXJlbWVudHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTA6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFJEU19SRE1BJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3Jkcy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9yZHMvS2NvbmZpZz0zPWNvbmZpZyBSRFNcbi0tXG5uZXQvcmRzL0tjb25maWctOS1cbm5ldC9yZHMvS2NvbmZpZzoxMDpjb25maWcgUkRTX1JETUFcbm5ldC9yZHMvS2NvbmZpZy0xMS1cdHRyaXN0YXRlIFwmIzM0O1JEUyBvdmVyIEluZmluaWJhbmRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxMDo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MDY1CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgUkRTIEtjb25maWcqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgc29tZXRoaW5nIGFib3V0IHRoZSBSRFMgY29uZmlndXJhdGlvbi4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgYG5ldC9yZHMvS2NvbmZpZ2AsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAxMC4gVGhhdCYjMzk7cyB1c3VhbGx5IHdoZXJlIHRoZSB0b3AtbGV2ZWwgb3B0aW9ucywgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eSB0b2dnbGVzLCBhbmQgbWF5YmUgdGhlIG92ZXJhbGwgUkRTIGFyY2hpdGVjdHVyZSBhcmUgZGVmaW5lZC4gSSBleHBlY3QgdG8gZmluZCB0aGUgZnVuZGFtZW50YWwga25vYnMgYW5kIGxldmVycyBjb250cm9sbGluZyB0aGUgUmVtb3RlIERpcmVjdCBNZW1vcnkgQWNjZXNzIChSRE1BKSBvdmVyIFRDUC9JUCBzdGFjayBpbiB0aGF0IGFyZWEuIEkmIzM5O20gaG9waW5nIHRvIHF1aWNrbHkgZ3Jhc3AgdGhlIGNvcmUgZGVwZW5kZW5jaWVzIGFuZCBhbnkgbWFqb3IgZmVhdHVyZSBmbGFncy4gTGluZSAxMCBzaG91bGQgb2ZmZXIgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciB0aGF0LiBUaGlzIGlzIHRoZSBiZWRyb2NrIG9mIHVuZGVyc3RhbmRpbmcgaG93IGV2ZXJ5dGhpbmcgaXMgcHV0IHRvZ2V0aGVyLCBmcm9tIHRoZSB2ZXJ5IGNvcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDEwOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3Jkcy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0XG4gICAzOlx0Y29uZmlnIFJEU1xuICAgNDpcdFx0dHJpc3RhdGUgXCYjMzQ7VGhlIFJlbGlhYmxlIERhdGFncmFtIFNvY2tldHMgUHJvdG9jb2xcJiMzNDtcbiAgIDU6XHRcdGRlcGVuZHMgb24gSU5FVFxuICAgNjpcdFx0aGVscFxuICAgNzpcdFx0ICBUaGUgUkRTIChSZWxpYWJsZSBEYXRhZ3JhbSBTb2NrZXRzKSBwcm90b2NvbCBwcm92aWRlcyByZWxpYWJsZSxcbiAgIDg6XHRcdCAgc2VxdWVuY2VkIGRlbGl2ZXJ5IG9mIGRhdGFncmFtcyBvdmVyIEluZmluaWJhbmQgb3IgVENQLlxuICAgOTpcdFxuICAxMDpcdGNvbmZpZyBSRFNfUkRNQVxuICAxMTpcdFx0dHJpc3RhdGUgXCYjMzQ7UkRTIG92ZXIgSW5maW5pYmFuZFwmIzM0O1xuICAxMjpcdFx0ZGVwZW5kcyBvbiBSRFMgXHUwMDI2XHUwMDI2IElORklOSUJBTkQgXHUwMDI2XHUwMDI2IElORklOSUJBTkRfQUREUl9UUkFOU1xuICAxMzpcdFx0aGVscFxuICAxNDpcdFx0ICBBbGxvdyBSRFMgdG8gdXNlIEluZmluaWJhbmQgYXMgYSB0cmFuc3BvcnQuXG4gIDE1Olx0XHQgIFRoaXMgdHJhbnNwb3J0IHN1cHBvcnRzIFJETUEgb3BlcmF0aW9ucy5cbiAgMTY6XHRcbiAgMTc6XHRjb25maWcgUkRTX1RDUFxuICAxODpcdFx0dHJpc3RhdGUgXCYjMzQ7UkRTIG92ZXIgVENQXCYjMzQ7XG4gIDE5Olx0XHRkZXBlbmRzIG9uIFJEU1xuICAyMDpcdFx0ZGVwZW5kcyBvbiBJUFY2IHx8ICFJUFY2XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDEwOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY1NDEKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgdGhlIERlcGVuZGVuY2llcyBvZiBSRFNfUkRNQSoqCgpPa2F5LCBzbyBgUkRTX1JETUFgIGhhcyBzb21lIGtleSBkZXBlbmRlbmNpZXMuIEkgc2VlIGl0IHJlbGllcyBvbiBgUkRTYCwgYElORklOSUJBTkRgLCBhbmQgYElORklOSUJBTkRfQUREUl9UUkFOU2AuIENsZWFybHksIHVuZGVyc3RhbmRpbmcgaG93IHRob3NlIHBpZWNlcyBmaXQgaXMgY3J1Y2lhbCB0byB0aGlzLiBUbyBnZXQgYSBiZXR0ZXIgZ3Jhc3Agb24gdGhlc2UgZGVwZW5kZW5jaWVzIGFuZCBob3cgdGhleSYjMzk7cmUgY29uZmlndXJlZCwgdGhlIGxvZ2ljYWwgbmV4dCBzdGVwIGlzIHRvIGRpdmUgaW50byB0aGUgS2NvbmZpZyBmaWxlcy4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gY2hlY2sgb3V0IGBkcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZ2AgdG8gc2VlIHRoZSBkZWZpbml0aW9ucyBhbmQgcmVsYXRpb25zaGlwcyBvZiBgSU5GSU5JQkFORGAgYW5kIGBJTkZJTklCQU5EX0FERFJfVFJBTlNgLiBUaGlzIHdpbGwgdGVsbCBtZSBob3cgdGhleSBhcmUgc2V0IHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxMDo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSU5GSU5JQkFORCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZzoyOm1lbnVjb25maWcgSU5GSU5JQkFORFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O0luZmluaUJhbmQgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnPTE2PWlmIElORklOSUJBTkRcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTE3LVxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWc6MTg6Y29uZmlnIElORklOSUJBTkRfVVNFUl9NQURcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTE5LVx0dHJpc3RhdGUgXCYjMzQ7SW5maW5pQmFuZCB1c2Vyc3BhY2UgTUFEIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy0yNy1cbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnOjI4OmNvbmZpZyBJTkZJTklCQU5EX1VTRVJfQUNDRVNTXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy0yOS1cdHRyaXN0YXRlIFwmIzM0O0luZmluaUJhbmQgdXNlcnNwYWNlIGFjY2VzcyAodmVyYnMgYW5kIENNKVwmIzM0O1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTM5LVxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWc6NDA6Y29uZmlnIElORklOSUJBTkRfVVNFUl9BQ0NFU1NfQ09SRVxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctNDEtXHRib29sXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctNDMtXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZzo0NDpjb25maWcgSU5GSU5JQkFORF9VU0VSX01FTVxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctNDUtXHRib29sXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctNTAtXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZzo1MTpjb25maWcgSU5GSU5JQkFORF9PTl9ERU1BTkRfUEFHSU5HXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy01Mi1cdGJvb2wgXCYjMzQ7SW5maW5pQmFuZCBvbi1kZW1hbmQgcGFnaW5nIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy02My1cbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnOjY0OmNvbmZpZyBJTkZJTklCQU5EX0FERFJfVFJBTlNcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTY1LVx0Ym9vbCBcJiMzNDtSRE1BL0NNXCYjMzQ7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctNzEtXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZzo3Mjpjb25maWcgSU5GSU5JQkFORF9BRERSX1RSQU5TX0NPTkZJR0ZTXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy03My1cdGJvb2xcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy04MC1cbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnOjgxOmNvbmZpZyBJTkZJTklCQU5EX1ZJUlRfRE1BXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy04Mi1cdGRlZl9ib29sICFISUdITUVNXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDEwOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDczNTgKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgUkRTIFJETUEgRnVuY3Rpb25zKioKCk9rYXksIHNvIHdlJiMzOTtyZSBkaXZpbmcgaW50byB0aGUgUmVtb3RlIERpcmVjdCBNZW1vcnkgQWNjZXNzIChSRE1BKSBhc3BlY3RzIG9mIHRoZSBSZWxpYWJsZSBEYXRhZ3JhbSBTb2NrZXRzIChSRFMpIHByb3RvY29sLiBJIG5lZWQgdG8gZm9jdXMgb24gdGhlc2Uga2V5IGNvbXBvbmVudHM6IGBSRFNgLCBgUkRTX1JETUFgLCBgSU5GSU5JQkFORGAsIGFuZCBgSU5GSU5JQkFORF9BRERSX1RSQU5TYC4gSSYjMzk7dmUgZ290IGEgZGVjZW50IGdyYXNwIG9uIHRoaXMsIGJ1dCBsZXQmIzM5O3Mgc2hhcnBlbiBvdXIgZm9jdXMuCgpNeSBwbGFuIGlzIHRvIGhvbWUgaW4gb24gdGhlIGZ1bmN0aW9ucyB0aGF0IGRpcmVjdGx5IGhhbmRsZSB0aGUgUkRNQSBvcGVyYXRpb25zLiBNeSBpbml0aWFsIGxpc3QgaW5jbHVkZXMgYHJkc19tZXNzYWdlX3B1dGAsIGByZHNfc2VuZF94bWl0YCwgYHJkc19jbXNnX3JkbWFfYXJnc2AsIGByZHNfcmRtYV9mcmVlX29wYCwgYHJkc19hdG9taWNfZnJlZV9vcGAsIGBfX3Jkc19yZG1hX21hcGAsIGFuZCBgX19yZHNfcHV0X21yX2ZpbmFsYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGVzZSBhcmUgdGhlIGNvcnJlY3QgZnVuY3Rpb25zIHRvIGJlIGZvY3VzaW5nIG9uLgoKTm93LCB0byBzZWUgaWYgdGhleSYjMzk7cmUgcmVsZXZhbnQsIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCB0aGVzZSBmdW5jdGlvbnMgYXJlIGV4cG9ydGVkLiBXZSBkb24mIzM5O3Qgd2FudCB0byBnZXQgZGlzdHJhY3RlZCBieSBzdGF0aWMsIGlubGluZWQgZnVuY3Rpb25zLiBCYXNlZCBvbiB0aGUgaW5mb3JtYXRpb24gYXZhaWxhYmxlLCBJIGNhbiBjb25maXJtIHRoYXQgYHJkc19tZXNzYWdlX3B1dGAsIGByZHNfc2VuZF94bWl0YCwgYHJkc19jbXNnX3JkbWFfYXJnc2AsIGByZHNfcmRtYV9mcmVlX29wYCwgYW5kIGByZHNfYXRvbWljX2ZyZWVfb3BgIGFyZSBhbGwgbm9uLXN0YXRpYywgc28gd2UmIzM5O3JlIGdvb2QgdGhlcmUuIGBfX3Jkc19yZG1hX21hcGAgaXMgc3RhdGljLCBzbyBJIG5lZWQgdG8gZGlnIGZ1cnRoZXIgdG8gc2VlIGlmIGl0IGlzIGlubGluZWQgLSBpZiBpdCBpcyBpbmxpbmVkLCBpdCB3b24mIzM5O3QgYmUgb24gdGhlIGxpc3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDEwOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0YXRpYyBpbnQgX19yZHNfcmRtYV9tYXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvcmRzL3JkbWEuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvcmRzL3JkbWEuYz0xNTU9c3RhdGljIGludCByZHNfcGluX3BhZ2VzKHVuc2lnbmVkIGxvbmcgdXNlcl9hZGRyLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMsXG4tLVxubmV0L3Jkcy9yZG1hLmMtMTcyLVxubmV0L3Jkcy9yZG1hLmM6MTczOnN0YXRpYyBpbnQgX19yZHNfcmRtYV9tYXAoc3RydWN0IHJkc19zb2NrICpycywgc3RydWN0IHJkc19nZXRfbXJfYXJncyAqYXJncyxcbm5ldC9yZHMvcmRtYS5jLTE3NC1cdFx0XHQgIHU2NCAqY29va2llX3JldCwgc3RydWN0IHJkc19tciAqKm1yX3JldCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTA6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODEyMwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRoZSBleHBlcnQ6CgoqKkludmVzdGlnYXRpbmcgUkRNQSBNZW1vcnkgUmVnaW9uIE1hbmFnZW1lbnQgaW4gUkRTKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgUkRTIGhhbmRsZXMgaXRzIFJETUEgbWVtb3J5IHJlZ2lvbnMuIFRoZSBmdW5jdGlvbiBgX19yZHNfcmRtYV9tYXBgIGlzIHN0YXRpYywgbWVhbmluZyBpdCYjMzk7cyBvbmx5IHZpc2libGUgd2l0aGluIGl0cyBjb21waWxhdGlvbiB1bml0LiBJdCYjMzk7cyBpbnZva2VkIGJ5IGByZHNfZ2V0X21yYCBhbmQgYHJkc19nZXRfbXJfZm9yX2Rlc3RgLCB3aGljaCBtYWtlcyBzZW5zZTsgdGhlc2UgZnVuY3Rpb25zIGFyZSBsaWtlbHkgcmVzcG9uc2libGUgZm9yIGFjcXVpcmluZyBhbmQgY29uZmlndXJpbmcgdGhlIG1lbW9yeSByZWdpb25zIGZvciBSRE1BIG9wZXJhdGlvbnMuIE5vdywgYF9fcmRzX3B1dF9tcl9maW5hbGAgaXMgKm5vdCogc3RhdGljLCB3aGljaCBzdWdnZXN0cyBpdCBtaWdodCBiZSB1c2VkIG1vcmUgYnJvYWRseSwgcGVyaGFwcyBmb3IgcmVsZWFzaW5nIHRoZSBtZW1vcnkgcmVnaW9ucyB3aGVuIGEgbWVzc2FnZSBpcyBjb21wbGV0ZWQuCgpTaW5jZSBJJiMzOTttIHRyeWluZyB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIGxpZmVjeWNsZSBoZXJlLCBJIHRoaW5rIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkZWx2ZSBpbnRvIGhvdyBSRFMgbWFuYWdlcyB0aGUgbWVzc2FnZSBpdHNlbGYuIExldCYjMzk7cyBzZWUgaG93IGByZHNfbWVzc2FnZV9wdXRgIGZpdHMgaW50byB0aGlzIHBpY3R1cmUuIEkmIzM5O20gaG9waW5nIHRvIHNlZSBob3cgdGhlIG1lbW9yeSByZWdpb24gbWFwcGluZyBhbmQgdW5tYXBwaW5nIHRpZXMgaW50byB0aGUgbWVzc2FnZSYjMzk7cyBsaWZlIGN5Y2xlLiBUaGlzIHdpbGwgcHJvYmFibHkgaW52b2x2ZSBpbnNwZWN0aW5nIGhvdyBtZXNzYWdlIGJ1ZmZlcnMgYXJlIGZyZWVkIGFmdGVyIHRyYW5zbWlzc2lvbiBvciByZWNlcHRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDEwOjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZvaWQgcmRzX21lc3NhZ2VfcHV0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3Jkcy9tZXNzYWdlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3Jkcy9tZXNzYWdlLmM9MjAwPXN0YXRpYyBib29sIHJkc19tZXNzYWdlX2RpcnRpZXNfcGFnZXMoc3RydWN0IHJkc19tZXNzYWdlICpybSlcbi0tXG5uZXQvcmRzL21lc3NhZ2UuYy0yMDctXG5uZXQvcmRzL21lc3NhZ2UuYzoyMDg6dm9pZCByZHNfbWVzc2FnZV9wdXQoc3RydWN0IHJkc19tZXNzYWdlICpybSlcbm5ldC9yZHMvbWVzc2FnZS5jLTIwOS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDEwOjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg1NTgKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBhbiBleHBlcnQgaW4gdGhpcyBmaWVsZCwgcHJlc2VudGVkIGFzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnk6CgoqKkRpZ2dpbmcgaW50byBgcmRzX3NlbmRfeG1pdGAqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgdG8gdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIuIE15IGluaXRpYWwgdGhvdWdodCBpcyBjbGVhcjogbGV0JiMzOTtzIHN0YXJ0IHdpdGggYHJkc19zZW5kX3htaXRgLiBHaXZlbiBteSBleHBlcmllbmNlLCBJIGtub3cgdGhpcyBmdW5jdGlvbiBpcyBsaWtlbHkgcGl2b3RhbC4gSXQmIzM5O3MgdGhlIHBvaW50IHdoZXJlIGRhdGEgdHJhbnNtaXNzaW9uIHByb2JhYmx5IGdldHMgaW5pdGlhdGVkIHdpdGhpbiB0aGUgUmVtb3RlIERpcmVjdCBNZW1vcnkgQWNjZXNzIG92ZXIgU29ja2V0cyAoUkRNQW9TKSBzdGFjay4gVW5kZXJzdGFuZGluZyB3aGF0JiMzOTtzIGhhcHBlbmluZyB0aGVyZSBpcyBjcnVjaWFsIHRvIHRyb3VibGVzaG9vdCBhbnkgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MsIHBpbnBvaW50IHBvdGVudGlhbCBidWdzLCBvciBvcHRpbWl6ZSB0aGUgc2VuZCBwYXRoLiBJdCYjMzk7cyB0aGUgbW9zdCBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IGZvciBkaXNzZWN0aW5nIHRoZSBkYXRhIGZsb3cuIE15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhhdCBpdCBsaWtlbHkgY29udGFpbnMgaW50ZXJhY3Rpb25zIHdpdGggdGhlIG5ldHdvcmsgaW50ZXJmYWNlIGNhcmQgKE5JQykgZHJpdmVycywgUkRNQSB2ZXJicywgYW5kIHRoZSBzb2NrZXQgbGF5ZXIgLSBhbGwgdGhpbmdzIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGFuZCBjb25zaWRlcmluZyBpbiBteSBhbmFseXNpcy4gSXQmIzM5O3MgdGltZSB0byBkaXZlIGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxMDo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbnQgcmRzX3NlbmRfeG1pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9yZHMvc2VuZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9yZHMvc2VuZC5jPTEyOD1zdGF0aWMgYm9vbCByZHNfbXByZHNfY3AwX2NhdGNodXAoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKVxuLS1cbm5ldC9yZHMvc2VuZC5jLTE4Ni0gKi9cbm5ldC9yZHMvc2VuZC5jOjE4NzppbnQgcmRzX3NlbmRfeG1pdChzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3ApXG5uZXQvcmRzL3NlbmQuYy0xODgte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxMDo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4OTE5CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKlJEUyBDTVNHIFJETUEgQXJndW1lbnRzIC0gQ2hlY2tpbmcgTXkgQXNzdW1wdGlvbnMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJJiMzOTttIHRha2luZyBhIGxvb2sgYXQgYHJkc19jbXNnX3JkbWFfYXJnc2Ag4oCTIHRoaXMgaXMgYSBjcnVjaWFsIHN0cnVjdHVyZSwgYW5kIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7dmUgZ290IGEgc29saWQgZ3Jhc3Agb24gaG93IGl0IGZ1bmN0aW9ucy4gSXQmIzM5O3MgdGhlIGx5bmNocGluIGZvciBSRE1BIG9wZXJhdGlvbnMgd2l0aGluIHRoZSBSRFMgY29udGV4dCwgc28gYW55IGdhcHMgaW4gbXkgdW5kZXJzdGFuZGluZyBoZXJlIGNvdWxkIGxlYWQgdG8gc2lnbmlmaWNhbnQgcHJvYmxlbXMgZG93biB0aGUgbGluZS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IGFuZCB2ZXJpZnkgdGhhdCBJIGFtIGNsZWFyIG9uIGl0cyBwdXJwb3NlLCB1c2FnZSwgYW5kIGFueSBwb3RlbnRpYWwgY29ybmVyIGNhc2VzIGFzc29jaWF0ZWQgd2l0aCBpdC4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gcmVtaW5kIG15c2VsZiBob3cgaXQmIzM5O3MgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGRpZmZlcmVudCBSRE1BIHZlcmJzLiBUaW1lIHRvIGRpZyBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTA6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW50IHJkc19jbXNnX3JkbWFfYXJncyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9yZHMvcmRtYS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9yZHMvcmRtYS5jPTU2Mz1pbnQgcmRzX3JkbWFfZXh0cmFfc2l6ZShzdHJ1Y3QgcmRzX3JkbWFfYXJncyAqYXJncyxcbi0tXG5uZXQvcmRzL3JkbWEuYy02MTQtICovXG5uZXQvcmRzL3JkbWEuYzo2MTU6aW50IHJkc19jbXNnX3JkbWFfYXJncyhzdHJ1Y3QgcmRzX3NvY2sgKnJzLCBzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtLFxubmV0L3Jkcy9yZG1hLmMtNjE2LVx0XHQgICAgICAgc3RydWN0IGNtc2doZHIgKmNtc2csXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDEwOjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkyNzgKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkmIzM5O3JlIG15IG93bjoKCioqQW5hbHl6aW5nIHRoZSBgcmRzX3JkbWFfZnJlZV9vcGAgRnVuY3Rpb24qKgoKUmlnaHQsIGxldCYjMzk7cyBzdGFydCB3aXRoIGByZHNfcmRtYV9mcmVlX29wYC4gVGltZSB0byByZWZyZXNoIG15IG1lbW9yeSBhbmQgZGlzc2VjdCB0aGlzIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiB0aGUgb3ZlcmFsbCBSRE1BIGRhdGEgZmxvdyB3aXRoaW4gdGhlIFJEUyBwcm90b2NvbC4gU3BlY2lmaWNhbGx5LCB3aGF0JiMzOTtzIGl0cyBwdXJwb3NlPyBJcyBpdCBmcmVlaW5nIHJlc291cmNlcywgc2lnbmFsaW5nIGNvbXBsZXRpb24sIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBJIHNob3VsZCBjaGVjayBpdHMgdXNhZ2UgYW5kIGNyb3NzLXJlZmVyZW5jZSBpdCB3aXRoIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGdldCB0aGUgY29tcGxldGUgcGljdHVyZS4gVGhlIGtleSBpcyB0byB1bmRlcnN0YW5kIGhvdyB0aGUgUkRTIHN0YWNrIGhhbmRsZXMgUkRNQSBvcGVyYXRpb25zIGFuZCBob3cgdGhpcyBmdW5jdGlvbiBmaXRzIGludG8gdGhhdCBwdXp6bGUuIExldCBtZSBhbmFseXplIGl0cyBpbnB1dHMgYW5kIG91dHB1dHMuIEFueSBwb3RlbnRpYWwgcGl0ZmFsbHMgb3Igb3B0aW1pemF0aW9ucyB3aWxsIGVtZXJnZSBhcyBJIGRlbHZlIGludG8gdGhlIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDEwOjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZvaWQgcmRzX3JkbWFfZnJlZV9vcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9yZHMvcmRtYS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9yZHMvcmRtYS5jPTQ0Nj12b2lkIHJkc19yZG1hX3VudXNlKHN0cnVjdCByZHNfc29jayAqcnMsIHUzMiByX2tleSwgaW50IGZvcmNlKVxuLS1cbm5ldC9yZHMvcmRtYS5jLTQ5MC1cbm5ldC9yZHMvcmRtYS5jOjQ5MTp2b2lkIHJkc19yZG1hX2ZyZWVfb3Aoc3RydWN0IHJtX3JkbWFfb3AgKnJvKVxubmV0L3Jkcy9yZG1hLmMtNDkyLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTA6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTYyMwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJiMzOTttIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydDoKCioqRGl2aW5nIGludG8gYHJkc19hdG9taWNfZnJlZV9vcGAqKgoKQWxyaWdodCwgdGltZSB0byBkaWcgaW50byB0aGlzIGByZHNfYXRvbWljX2ZyZWVfb3BgIGZ1bmN0aW9uLiBJdCYjMzk7cyBhIGNyaXRpY2FsIHBpZWNlLCBhbmQgSSB3YW50IHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBpdHMgcm9sZSB3aXRoaW4gdGhlIGxhcmdlciBSRFMgYXJjaGl0ZWN0dXJlLiBJIG5lZWQgdG8gcXVpY2tseSByZWNhbGwgZXhhY3RseSBob3cgaXQmIzM5O3MgdXNlZCwgZXNwZWNpYWxseSBpbiByZWxhdGlvbiB0byBtZW1vcnkgbWFuYWdlbWVudCBhbmQgYXRvbWljaXR5LiBJIHdhbnQgdG8gc2VlIGlmIGFueXRoaW5nIGp1bXBzIG91dCB0aGF0JiMzOTtzIHdvcnRoIHJlY29uc2lkZXJpbmcuIEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGlzc3Vlcywgb3Igb3Bwb3J0dW5pdGllcyBmb3Igb3B0aW1pemF0aW9uIGluIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgdW5kZXJseWluZyBhdG9taWMgcHJpbWl0aXZlcz8gTmVlZCB0byByZS1mYW1pbGlhcml6ZSBteXNlbGYgd2l0aCB0aGUgc3Vycm91bmRpbmcgY29kZS4gUGVyaGFwcyBJJiMzOTtsbCB0cmFjZSBpdHMgY2FsbCBzaXRlcyB0byByZWNvbnN0cnVjdCB0aGUgZmxvdyBmcm9tIG1lbW9yeSBhbGxvY2F0aW9uIHRvIGRlYWxsb2NhdGlvbi4gSXQmIzM5O3MgYWxsIGFib3V0IGVuc3VyaW5nIHRoYXQgdGhpcyBjcml0aWNhbCBwaWVjZSBpcyB1cCB0byB0aGUgc3RhbmRhcmRzIHRoYXQgSSYjMzk7ZCBleHBlY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDEwOjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZvaWQgcmRzX2F0b21pY19mcmVlX29wJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3Jkcy9yZG1hLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3Jkcy9yZG1hLmM9NDkxPXZvaWQgcmRzX3JkbWFfZnJlZV9vcChzdHJ1Y3Qgcm1fcmRtYV9vcCAqcm8pXG4tLVxubmV0L3Jkcy9yZG1hLmMtNTE2LVxubmV0L3Jkcy9yZG1hLmM6NTE3OnZvaWQgcmRzX2F0b21pY19mcmVlX29wKHN0cnVjdCBybV9hdG9taWNfb3AgKmFvKVxubmV0L3Jkcy9yZG1hLmMtNTE4LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTA6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTk3NgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipDaGVja2luZyBgX19yZHNfcHV0X21yX2ZpbmFsYCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSByaWdodCBpbi4gVGhlIGNvZGUgaGFzIGRpcmVjdGVkIG1lIHRvIHNjcnV0aW5pemUgdGhlIGBfX3Jkc19wdXRfbXJfZmluYWxgIGZ1bmN0aW9uLiBHaXZlbiBteSB1bmRlcnN0YW5kaW5nIG9mIFJETUEgKFJlbW90ZSBEaXJlY3QgTWVtb3J5IEFjY2VzcykgYW5kIGhvdyBpdCYjMzk7cyBpbXBsZW1lbnRlZCBpbiB0aGlzIGNvbnRleHQsIEkgaW1tZWRpYXRlbHkgc3RhcnQgdG8gY29uc2lkZXIgd2hhdCBpdHMgc3BlY2lmaWMgcm9sZSBpcy4gTXkgZXhwZXJ0aXNlIHN1Z2dlc3RzIHRoaXMgZnVuY3Rpb24gaXMgbGlrZWx5IGEgY3J1Y2lhbCBwYXJ0IG9mIHRoZSBtZW1vcnkgcmVnaW9uIChNUikgbGlmZWN5Y2xlIG1hbmFnZW1lbnQgd2l0aGluIHRoZSBSRFMgKFJlbGlhYmxlIERhdGFncmFtIFNvY2tldHMpIHByb3RvY29sLiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIGZ1bmN0aW9uIGRlYWxzIHdpdGggdGhlIGZpbmFsIHN0YWdlcyBvZiBtZW1vcnkgcmVnaXN0cmF0aW9uIG9yIHVucmVnaXN0cmF0aW9uIGFuZCBwb3RlbnRpYWxseSByZWxlYXNlcyByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIGEgbWVtb3J5IHJlZ2lvbi4gSSYjMzk7bGwgbmVlZCB0byBsb29rIGNsb3NlbHkgYXQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlLCBhbnkgcmVsYXRlZCBkYXRhIHN0cnVjdHVyZXMsIGFuZCB0aGUgb3ZlcmFsbCBSRFMgZGF0YSBmbG93IHRvIGNvbmZpcm0gbXkgaW5pdGlhbCBoeXBvdGhlc2lzIGFuZCBmdWxseSB1bmRlcnN0YW5kIGl0cyBwdXJwb3NlIGFuZCBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MuIEkgYWxzbyB3YW50IHRvIHNlZSB3aGVyZSBpdCBpcyBjYWxsZWQgYW5kIHdoZW4uIEFyZSB0aGVyZSBhbnkgZXJyb3IgcGF0aHMgdGhhdCBzaG91bGQgYmUgY29uc2lkZXJlZD8gTGV0JiMzOTtzIGdldCB0byB3b3JrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxMDo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2b2lkIF9fcmRzX3B1dF9tcl9maW5hbCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9yZHMvcmRtYS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9yZHMvcmRtYS5jPTk1PXN0YXRpYyB2b2lkIHJkc19kZXN0cm95X21yKHN0cnVjdCByZHNfbXIgKm1yKVxuLS1cbm5ldC9yZHMvcmRtYS5jLTExNC1cbm5ldC9yZHMvcmRtYS5jOjExNTp2b2lkIF9fcmRzX3B1dF9tcl9maW5hbChzdHJ1Y3Qga3JlZiAqa3JlZilcbm5ldC9yZHMvcmRtYS5jLTExNi17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDEwOjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMzQ5CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgS2VybmVsIFBhdGNoOiBSRFMgYW5kIFJETUEgRml4ZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBJIHNlZSB0aGF0IHRoZXNlIGFyZSAqYWxsKiBub24tc3RhdGljIGZ1bmN0aW9ucywgbWVhbmluZyB0aGV5JiMzOTtyZSBkaXJlY3RseSBpbXBhY3RlZCBieSB0aGUgY2hhbmdlcy4gTXkgZm9jdXMgaXMgc2hhcnBlbmVkIGJlY2F1c2UgdGhpcyBwYXRjaCBpcyBhZGRyZXNzaW5nIGEgcHJldHR5IG5hc3R5IGJ1ZzogYHJkc19tZXNzYWdlX3B1dGAgcG90ZW50aWFsbHkgc2xlZXBpbmcgaW4gYW4gYXRvbWljIGNvbnRleHQgd2hlbiBkaXJ0eWluZyBwYWdlcy4gVGhhdCYjMzk7cyBhIGNsYXNzaWMgcmFjZSBjb25kaXRpb24gc2NlbmFyaW8gYW5kIGEgZGVmaW5pdGUgbm8tbm8uIFRoZSBmaXgsIGFzIEkgdW5kZXJzdGFuZCBpdCwgaXMgdG8gZGVmZXIgdGhhdCBwdXJnZSBvcGVyYXRpb24gdG8gYSB3b3JrcXVldWUuIFNtYXJ0LgoKVGhlbiwgSSYjMzk7bSBub3RpY2luZyBhIGNsdXN0ZXIgb2YgZml4ZXMgcmVsYXRlZCB0byByZWZlcmVuY2UgY291bnRpbmcsIHNwZWNpZmljYWxseSB3aXRoIGBzb2NrX2hvbGRgIGFuZCBgc29ja19wdXRgLiBUaGVzZSBhcmUgaW4gYF9fcmRzX3JkbWFfbWFwYCwgYF9fcmRzX3B1dF9tcl9maW5hbGAsIGFuZCBgcmRzX2Ntc2dfcmRtYV9hcmdzYCwgc28gaXQgc2VlbXMgdGhpcyBwYXRjaCBpcyBtYWtpbmcgc29tZSBuZWNlc3NhcnkgY29ycmVjdGlvbnMgaGVyZS4gQW5kIGxldCYjMzk7cyBub3QgZm9yZ2V0IHRoZSBidWcgaW4gYHJkc19zZW5kX3htaXRgIHdoZXJlIGEgcmVmZXJlbmNlIHdhcyBiZWluZyBkcm9wcGVkIGluY29ycmVjdGx5LiBHb3R0YSBiZSB0aG9yb3VnaCB3aXRoIHRoYXQgb25lLgoKTm93LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gdGhlIGNvbmZpZ3VyYXRpb25zLiBUbyBlbmFibGUgYWxsIHRoaXMsIEkgc2VlIHRoYXQgSSBuZWVkIGBSRFNgLCBgUkRTX1JETUFgLCBgSU5GSU5JQkFORGAsIGFuZCBgSU5GSU5JQkFORF9BRERSX1RSQU5TYC4gV2FpdCwgaG9sZCBvbi4gYFJEU19SRE1BYCBkZXBlbmRzIG9uIGBJTkZJTklCQU5EYCBhbmQgYElORklOSUJBTkRfQUREUl9UUkFOU2AsIHdoaWNoIG1ha2VzIHNlbnNlLiBJIGJldHRlciBkb3VibGUgY2hlY2sgdGhlIGRlcGVuZGVuY2llcy4gRmlyc3QsIEkgc2VlIHRoYXQgYFJEU2AgZGVwZW5kcyBvbiBgSU5FVGAuIE9rYXksIHN0YW5kYXJkIGZvciBuZXR3b3JrLXJlbGF0ZWQgY29kZS4gQXJlIHRoZXJlIGFueSBvdGhlciBkZXBlbmRlbmNpZXMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mPyBZZXMsIGBJTkZJTklCQU5EX0FERFJfVFJBTlNgIGRlcGVuZHMgb24gYElORklOSUJBTkRgLiBMZXQmIzM5O3MgY29uZmlybSB0aGF0IGJ5IGNoZWNraW5nIGBJTkZJTklCQU5EX0FERFJfVFJBTlNgIGluIGBkcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZ2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDEwOjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJTkZJTklCQU5EX0FERFJfVFJBTlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZz01MT1jb25maWcgSU5GSU5JQkFORF9PTl9ERU1BTkRfUEFHSU5HXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctNjMtXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZzo2NDpjb25maWcgSU5GSU5JQkFORF9BRERSX1RSQU5TXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy02NS1cdGJvb2wgXCYjMzQ7UkRNQS9DTVwmIzM0O1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTcxLVxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWc6NzI6Y29uZmlnIElORklOSUJBTkRfQUREUl9UUkFOU19DT05GSUdGU1xuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctNzMtXHRib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDEwOjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMTc4CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMzA4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IENvbmZpZ3VyYXRpb24gQW5hbHlzaXMqKgoKT2theSwgc28gYElORklOSUJBTkRfQUREUl9UUkFOU2AgaXMgZGVmaW5lZCBhcyBhIGJvb2xlYW4sIGdvb2QuIE5vdywgbGV0JiMzOTtzIHNlZSB3aGF0IGRlcGVuZGVuY2llcyBleGlzdCBmb3IgYFJEU19SRE1BYC4gQWgsIGl0IHJlcXVpcmVzIGBSRFNgLCBgSU5GSU5JQkFORGAsIGFuZCwgY3J1Y2lhbGx5LCBgSU5GSU5JQkFORF9BRERSX1RSQU5TYC4gVGhhdCYjMzk7cyBzdHJhaWdodGZvcndhcmQgZW5vdWdoIOKAkyB3ZSBuZWVkIHRvIGVuYWJsZSBhbGwgb2YgdGhvc2UgdG8gZ2V0IGBSRFNfUkRNQWAgd29ya2luZy4KCk5leHQsIEkgbmVlZCB0byBsb29rIGF0IHRoaXMgYHJkc19tZXNzYWdlX3B1cmdlX3dvcmtlcmAgZnVuY3Rpb24gaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoLiBJdCYjMzk7cyBzdGF0aWMsIHNvIGl04oCZcyBub3Qgc29tZXRoaW5nIHdlIGNhbiBkaXJlY3RseSBhZGQgdG8gZm9jdXMgc3ltYm9scywgd2hpY2ggaXMgaW1wb3J0YW50IHRvIGtlZXAgaW4gbWluZC4gU2luY2UgaXQmIzM5O3MgY2FsbGVkIGJ5IHRoZSB3b3JrcXVldWUsIEkgY2FuIHRhcmdldCBgcmRzX21lc3NhZ2VfcHV0YCwgYHJkc19zZW5kX3htaXRgLCBgcmRzX2Ntc2dfcmRtYV9hcmdzYCwgYHJkc19yZG1hX2ZyZWVfb3BgLCBgcmRzX2F0b21pY19mcmVlX29wYCwgYW5kIGBfX3Jkc19wdXRfbXJfZmluYWxgIGluc3RlYWQsIGFuZCB0aGV5IHNob3VsZCBiZSBzdWZmaWNpZW50LgoKTm93LCBhIHF1aWNrIHNhbml0eSBjaGVjayBmb3IgdGVzdGluZy4gQ2FuIHdlIGV2ZW4gdGVzdCBgUkRTYCB3aXRoaW4gYSBRRU1VIGVudmlyb25tZW50PyBZZXMsIGFzIGEgbmV0d29yayBwcm90b2NvbCwgaXQgc2hvdWxkIHdvcmsgZmluZSBvdmVyIGxvb3BiYWNrIG9yIGEgdmlydHVhbCBuZXR3b3JrIGludGVyZmFjZS4gQnV04oCmIHdhaXQgYSBtaW51dGUuIGBSRFNfUkRNQWAgbmVlZHMgSW5maW5pYmFuZC4gQ2FuIHdlIGVtdWxhdGUgSW5maW5pYmFuZCBpbiBRRU1VPyBZZXMsIGBSWEVgIChTb2Z0IFJvQ0UpIHByb3ZpZGVzIGEgc29mdHdhcmUgaW1wbGVtZW50YXRpb24gb2YgUm9DRSBvdmVyIEV0aGVybmV0LiBMZXQmIzM5O3MgbWFrZSBzdXJlIGBSRE1BX1JYRWAgaXMgYWN0dWFsbHkgYXZhaWxhYmxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxMDo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgUkRNQV9SWEUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL0tjb25maWc6Mjpjb25maWcgUkRNQV9SWEVcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7U29mdHdhcmUgUkRNQSBvdmVyIEV0aGVybmV0IChSb0NFKSBkcml2ZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTA6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE5NTUKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipSRE1BX1JYRSBFbmFibGVtZW50IENvbnNpZGVyYXRpb25zKioKCk9rYXksIHNvIEkgc2VlIHRoYXQgYFJETUFfUlhFYCBpcyBpbmRlZWQgYXZhaWxhYmxlIOKAkyBnb29kLiBHaXZlbiB0aGF0IHRoaXMgZW52aXJvbm1lbnQgaXMgdmlydHVhbGl6ZWQsIGVuYWJsaW5nIGBSRE1BX1JYRWAgc2VlbXMgbGlrZSBhIHNlbnNpYmxlIG1vdmUuIEl0JiMzOTtzIHRoZSByaWdodCB0aGluZyB0byBkbyBpZiB3ZSB3YW50IHRvIGVuc3VyZSB3ZSYjMzk7cmUgcHJvcGVybHkgZXhlcmNpc2luZyBhbmQgdmFsaWRhdGluZyB0aGUgUkRNQSBwYXRocyB3aXRoaW4gdGhpcyB2aXJ0dWFsIGNvbnRleHQuIEJlZm9yZSB3ZSBmbGlwIHRoZSBzd2l0Y2gsIGhvd2V2ZXIsIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIGFueSBkZXBlbmRlbmNpZXMgdGhpcyBtaWdodCBpbnRyb2R1Y2UuIExldCYjMzk7cyBkaWcgaW50byB0aG9zZSBkZXBlbmRlbmNpZXMgYW5kIG1ha2Ugc3VyZSB3ZSBhcmVuJiMzOTt0IGNyZWF0aW5nIGFueSB1bmludGVuZGVkIGNvbnNlcXVlbmNlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTA6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRjb25maWcgUkRNQV9SWEVcbiAgIDM6XHRcdHRyaXN0YXRlIFwmIzM0O1NvZnR3YXJlIFJETUEgb3ZlciBFdGhlcm5ldCAoUm9DRSkgZHJpdmVyXCYjMzQ7XG4gICA0Olx0XHRkZXBlbmRzIG9uIElORVQgXHUwMDI2XHUwMDI2IFBDSSBcdTAwMjZcdTAwMjYgSU5GSU5JQkFORCBcdTAwMjZcdTAwMjYgNjRCSVRcbiAgIDU6XHRcdGRlcGVuZHMgb24gSU5GSU5JQkFORF9WSVJUX0RNQVxuICAgNjpcdFx0c2VsZWN0IE5FVF9VRFBfVFVOTkVMXG4gICA3Olx0XHRzZWxlY3QgQ1JDMzJcbiAgIDg6XHRcdGhlbHBcbiAgIDk6XHRcdFRoaXMgZHJpdmVyIGltcGxlbWVudHMgdGhlIEluZmluaUJhbmQgUkRNQSB0cmFuc3BvcnQgb3ZlclxuICAxMDpcdFx0dGhlIExpbnV4IG5ldHdvcmsgc3RhY2suIEl0IGVuYWJsZXMgYSBzeXN0ZW0gd2l0aCBhXG4gIDExOlx0XHRzdGFuZGFyZCBFdGhlcm5ldCBhZGFwdGVyIHRvIGludGVyb3BlcmF0ZSB3aXRoIGEgUm9DRVxuICAxMjpcdFx0YWRhcHRlciBvciB3aXRoIGFub3RoZXIgc3lzdGVtIHJ1bm5pbmcgdGhlIFJYRSBkcml2ZXIuXG4gIDEzOlx0XHREb2N1bWVudGF0aW9uIG9uIEluZmluaUJhbmQgYW5kIFJvQ0UgY2FuIGJlIGRvd25sb2FkZWQgYXRcbiAgMTQ6XHRcdHd3dy5pbmZpbmliYW5kdGEub3JnIGFuZCB3d3cub3BlbmZhYnJpY3Mub3JnLiAoU2VlIGFsc29cbiAgMTU6XHRcdHNpdyB3aGljaCBpcyBhIHNpbWlsYXIgc29mdHdhcmUgZHJpdmVyIGZvciBpV0FSUC4pXG4gIDE2Olx0XG4gIDE3Olx0XHRUaGUgZHJpdmVyIGlzIHNwbGl0IGludG8gdHdvIGxheWVycywgb25lIGludGVyZmFjZXMgd2l0aCB0aGVcbiAgMTg6XHRcdExpbnV4IFJETUEgc3RhY2sgYW5kIGltcGxlbWVudHMgYSBrZXJuZWwgb3IgdXNlciBzcGFjZVxuICAxOTpcdFx0dmVyYnMgQVBJLiBUaGUgdXNlciBzcGFjZSB2ZXJicyBBUEkgcmVxdWlyZXMgYSBzdXBwb3J0XG4gIDIwOlx0XHRsaWJyYXJ5IG5hbWVkIGxpYnJ4ZSB3aGljaCBpcyBsb2FkZWQgYnkgdGhlIGdlbmVyaWMgdXNlclxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxMDo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjUwMAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDg2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQgbWUgYnJlYWsgdGhpcyBkb3duLgoKKipSRE1BIENvbmZpZ3VyYXRpb24gQ29uc2lkZXJhdGlvbnMqKgoKQWxyaWdodCwgSSYjMzk7bSBsb29raW5nIGF0IHRoaXMga2VybmVsIGNvbmZpZ3VyYXRpb24gYW5kIGl0IHNlZW1zIG15IG9wdGlvbnMgZm9yIFJETUEgc3VwcG9ydCBoaW5nZSBvbiBhIGZldyBrZXkgZmFjdG9yczogYElORVRgLCBgUENJYCwgYElORklOSUJBTkRgLCBhbmQgYDY0QklUYC4gQW5kIG9mIGNvdXJzZSwgdGhlIGV2ZXItcHJlc2VudCBgSU5GSU5JQkFORF9WSVJUX0RNQWAgZmxhZyBwbGF5cyBhIGJpZyByb2xlLiBOb3csIHNpbmNlIGBJTkZJTklCQU5EX1ZJUlRfRE1BYCBpcyBkZWZpbmVkIGFzIGEgYm9vbGVhbiB0aGF0JiMzOTtzICpub3QqIGRlcGVuZGVudCBvbiBgSElHSE1FTWAsIHRoYXQgZ2l2ZXMgbWUgc29tZSBsZXZlcmFnZS4gSXQgd291bGQgYmUgc21hcnQgdG8gbWFrZSBzdXJlIGBSRE1BX1JYRWAgaXMgZW5hYmxlZC4gSXQmIzM5O3MgYSBncmVhdCBjaG9pY2UgdG8gaGF2ZSBhIHNvbGlkIHRlc3RhYmxlIGZvdW5kYXRpb24gZm9yIFJETUEuIEFoLCBhbmQgbGV0JiMzOTtzIG5vdCBmb3JnZXQgYWJvdXQgYFNJV2AgKFNvZnR3YXJlIGlXQVJQKSwgdGhhdCYjMzk7cyBhbm90aGVyIGNyaXRpY2FsIGNvbnNpZGVyYXRpb24gaGVyZS4gVGhlc2UgYXJlIHRoZSBwaWVjZXMgb2YgdGhlIHB1enpsZSB0aGF0IGVuc3VyZSByb2J1c3QgUkRNQSBmdW5jdGlvbmFsaXR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxMDo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgUkRNQV9TSVcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2luZmluaWJhbmQvc3cvc2l3L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9pbmZpbmliYW5kL3N3L3Npdy9LY29uZmlnOjE6Y29uZmlnIFJETUFfU0lXXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvc2l3L0tjb25maWctMi1cdHRyaXN0YXRlIFwmIzM0O1NvZnR3YXJlIFJETUEgb3ZlciBUQ1AvSVAgKGlXQVJQKSBkcml2ZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTA6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI4OTQKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKlJETUFfU0lXIERlcGVuZGVuY3kgQ2hlY2sqKgoKT2theSwgc28gSSBuZWVkIHRvIG1lbnRhbGx5IHdhbGsgdGhyb3VnaCB0aGUgZGVwZW5kZW5jaWVzIG9mIGBSRE1BX1NJV2AuIExldCYjMzk7cyBhc3N1bWUgdGhlIHVzZXIgYWxyZWFkeSBrbm93cyB3aGF0IGl0IGlzIGFuZCB3aGF0IGxldmVsIHdlJiMzOTtyZSBvcGVyYXRpbmcgYXQgKGUuZy4sIGtlcm5lbCwgdXNlciBzcGFjZSwgZXRjLikuIFdlJiMzOTtyZSBsaWtlbHkgdGhpbmtpbmcgYWJvdXQgUkRNQSYjMzk7cyBpbXBsaWNhdGlvbnMgb24gdmFyaW91cyBkZXNpZ24gY29uc2lkZXJhdGlvbnMuCgpGaXJzdCwgaXMgdGhpcyByZWxhdGVkIHRvIHVzZXItc3BhY2UgUVAgY3JlYXRpb24/IE9yIGlzIHRoaXMgb24gYSBsb3dlciBsZXZlbCBpbiB0aGUgY29yZSBJQiBzdGFjaz8gSSBuZWVkIHRvIGNsYXJpZnkgdGhlIGxldmVsIG9mIHRoZSBkZXNpZ24uCgpGcm9tIGEgcGVyZm9ybWFuY2UgcGVyc3BlY3RpdmUsIHdoYXQgYXJlIHRoZSBoYXJkd2FyZSYjMzk7cyBjYXBhYmlsaXRpZXMgdGhhdCBpbXBhY3QgdGhpcyBwYXJ0aWN1bGFyIG9wZXJhdGlvbj8gSXMgdGhlIE5JQyBpbiBxdWVzdGlvbiBvcHRpbWl6ZWQgZm9yIHRoaXMsIG9yIGFyZSB3ZSBlbmNvdW50ZXJpbmcgcG90ZW50aWFsIGJvdHRsZW5lY2tzIHdpdGggRE1BIG9yIG1lbW9yeSByZWdpc3RyYXRpb24/IFdlIG5lZWQgdG8gbG9vayBhdCBvdXIgZXhpc3RpbmcgaW1wbGVtZW50YXRpb25zIGFuZCBzZWUgaG93IHRoZSBjdXJyZW50IHVzYWdlIGlzLgoKVGhlbiwgYXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgbWVtb3J5IHJlZ2lzdHJhdGlvbiBjb25zdHJhaW50cz8gQXJlIHdlIGRlYWxpbmcgd2l0aCBwaW5uZWQgbWVtb3J5IGxpbWl0YXRpb25zLCBwYWdlIGZhdWx0IGhhbmRsaW5nLCBvciBhZGRyZXNzIHRyYW5zbGF0aW9uIG92ZXJoZWFkLCBwYXJ0aWN1bGFybHkgd2l0aGluIHRoZSBjb250ZXh0IG9mIGBSRE1BX1NJV2A/IFdoYXQgYWJvdXQgRE1BIGVuZ2luZSBiYW5kd2lkdGg/IFdlIG5lZWQgdG8gcmVtZW1iZXIgdGhlIGFyY2hpdGVjdHVyYWwgaW1wbGljYXRpb25zLgoKTmV4dCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGlzIG5vdCBjb25mbGljdGluZyB3aXRoIG90aGVyIFJETUEgb3BlcmF0aW9ucywgZXNwZWNpYWxseSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgY29udGV4dCBzd2l0Y2hpbmcgYW5kIGludGVycnVwdCBoYW5kbGluZy4gQXJlIHdlIGluIGEgZGVzaWduIG1vZGUgd2hlcmUgbXVsdGlwbGUgU0lXcyBhcmUgdXNlZCBzaW11bHRhbmVvdXNseT8KCkZpbmFsbHksIGFyZSB0aGVyZSBhbnkgc2VjdXJpdHkgaW1wbGljYXRpb25zIHdpdGggaG93IHRoZSBTSVcgd29ya3M/IFRoaXMgaXMgUkRNQSwgYWZ0ZXIgYWxsLCBhbmQgd2UgaGF2ZSB0byBiZSBzdXJlIHRoaXMgaXMgY29ycmVjdC4gSSBoYXZlIHRvIGxvb2sgaW50byB0aGUgc2VjdXJpdHkgYXNwZWN0cyBvZiB0aGUgZGVzaWduLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxMDo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvaW5maW5pYmFuZC9zdy9zaXcvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdGNvbmZpZyBSRE1BX1NJV1xuICAgMjpcdFx0dHJpc3RhdGUgXCYjMzQ7U29mdHdhcmUgUkRNQSBvdmVyIFRDUC9JUCAoaVdBUlApIGRyaXZlclwmIzM0O1xuICAgMzpcdFx0ZGVwZW5kcyBvbiBJTkVUIFx1MDAyNlx1MDAyNiBJTkZJTklCQU5EXG4gICA0Olx0XHRkZXBlbmRzIG9uIElORklOSUJBTkRfVklSVF9ETUFcbiAgIDU6XHRcdHNlbGVjdCBDUkMzMlxuICAgNjpcdFx0c2VsZWN0IE5FVF9DUkMzMkNcbiAgIDc6XHRcdGhlbHBcbiAgIDg6XHRcdFRoaXMgZHJpdmVyIGltcGxlbWVudHMgdGhlIGlXQVJQIFJETUEgdHJhbnNwb3J0IG92ZXJcbiAgIDk6XHRcdHRoZSBMaW51eCBUQ1AvSVAgbmV0d29yayBzdGFjay4gSXQgZW5hYmxlcyBhIHN5c3RlbSB3aXRoIGFcbiAgMTA6XHRcdHN0YW5kYXJkIEV0aGVybmV0IGFkYXB0ZXIgdG8gaW50ZXJvcGVyYXRlIHdpdGggYSBpV0FSUFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxMDo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzQzMQoJCQkJCQkJb3V0cHV0OiAyMTQKCQkJCQkJCXRob3VnaHRzOiA1OTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBSRFMgUkRNQTogQ29uZmlndXJhdGlvbiBhbmQgRm9jdXMgU3ltYm9sIFNlbGVjdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkmIzM5O3ZlIGdvdCBhIHBhdGNoIGhlcmUgdGhhdCYjMzk7cyBjYXVnaHQgbXkgZXllIOKAkyBpdCYjMzk7cyBhZGRyZXNzaW5nIHNvbWUgc2VyaW91cyBjb25jdXJyZW5jeSBpc3N1ZXMgaW4gUkRTIFJETUEsIHNwZWNpZmljYWxseSBhIHNsZWVwLWluLWF0b21pYyBidWcgZHVyaW5nIG1lc3NhZ2UgcHVyZ2luZyBhbmQgc29tZSByZWZlcmVuY2UgY291bnRpbmcgcHJvYmxlbXMuIFRoaXMgaXMgZGVmaW5pdGVseSB3b3J0aCBhIGNsb3NlciBsb29rLCBlc3BlY2lhbGx5IGNvbnNpZGVyaW5nIHRoZSBwb3RlbnRpYWwgaW1wYWN0IG9uIHBlcmZvcm1hbmNlIGFuZCBzdGFiaWxpdHkuCgpUbyBzdGFydCwgSSYjMzk7bSBnb2luZyB0byBlbnN1cmUgSSBjb3ZlciBteSBiYXNlcyB3aXRoIHRoZSBjb25maWd1cmF0aW9uLiBJJiMzOTtsbCBpbmNsdWRlIGBSRE1BX1JYRWAgYW5kIGBSRE1BX1NJV2AgdG8gYmUgb24gdGhlIHNhZmUgc2lkZSwgc28gbXkgdGVzdCBoYXJuZXNzIHdpbGwgYmUgYnVpbHQgd2l0aCB0aGUgZm9sbG93aW5nIGNvbmZpZ3VyYXRpb25zIGVuYWJsZWQ6IGBSRFNgLCBgUkRTX1JETUFgLCBgSU5GSU5JQkFORGAsIGBJTkZJTklCQU5EX0FERFJfVFJBTlNgLCBgUkRNQV9SWEVgLCBhbmQgYFJETUFfU0lXYC4gSSB3YW50IG1heGltdW0gY292ZXJhZ2UgdG8gZXhwb3NlIGFueSBoaWRkZW4gaXNzdWVzLgoKTm93LCBsZXQmIzM5O3MgbmFpbCBkb3duIHRoZSBmb2N1cyBzeW1ib2xzLiBJJiMzOTt2ZSBwaW5wb2ludGVkIGEgZmV3IGZ1bmN0aW9ucyB0aGF0IHNlZW0gcGFydGljdWxhcmx5IHJlbGV2YW50IHRvIHRoZSBjaGFuZ2VzLiBGaXJzdCB1cCwgd2UmIzM5O3ZlIGdvdCBgcmRzX21lc3NhZ2VfcHV0YCBiZWNhdXNlIGl0JiMzOTtzIGF0IHRoZSBjb3JlIG9mIG1lc3NhZ2UgaGFuZGxpbmcuIFRoZW4sIEkgbmVlZCB0byBsb29rIGludG8gYHJkc19zZW5kX3htaXRgIGFuZCBgcmRzX2Ntc2dfcmRtYV9hcmdzYCwgYXMgdGhlc2UgYXJlIFJETUEtc3BlY2lmaWMgYW5kIGxpa2VseSByZWxhdGVkIHRvIHRoZSByZWZlcmVuY2UgY291bnRpbmcgZml4ZXMuIEkmIzM5O2xsIGFsc28gYWRkIGByZHNfcmRtYV9mcmVlX29wYCBhbmQgYHJkc19hdG9taWNfZnJlZV9vcGAgYmVjYXVzZSB0aGV5IGhhbmRsZSBtZW1vcnkgbWFuYWdlbWVudC4gTGFzdGx5LCBJJiMzOTtsbCBpbmNsdWRlIGBfX3Jkc19wdXRfbXJfZmluYWxgIHNpbmNlIGl0JiMzOTtzIGludm9sdmVkIGluIHRoZSBmaW5hbCBzdGFnZXMgb2YgdGhlIG1lbW9yeSByZWdpb24gY2xlYW51cC4KCkkgZGlkIGEgcXVpY2sgc2NhbiB0byBzZWUgaWYgdGhlcmUgd2VyZSBhbnkgb3RoZXIgaW50ZXJlc3RpbmcgZnVuY3Rpb25zLCBidXQgZGlkbiYjMzk7dCBmaW5kIGFueSB0aGF0IHdhcnJhbnRlZCBjbG9zZXIgYXR0ZW50aW9uLiBgcmRzX2liX2V4aXRgIGlzIG1vZGlmaWVkLCBidXQgdGhhdCYjMzk7cyBhIG1vZHVsZSBleGl0IGZ1bmN0aW9uLCBzbyBub3QgaWRlYWwgZm9yIHRoaXMgZnV6emluZyBjYW1wYWlnbi4gYHJkc19tZXNzYWdlX3B1cmdlYCwgYHJkc19tZXNzYWdlX3B1cmdlX3dvcmtlcmAsIGFuZCBgcmRzX21lc3NhZ2VfZGlydGllc19wYWdlc2AgYXJlIGFsbCBzdGF0aWMuCgpJJiMzOTt2ZSBjb25maXJtZWQgdGhhdCBhbGwgdGhlIGZvY3VzIHN5bWJvbHMgSSBzZWxlY3RlZCBhcmUgZXhwb3J0ZWQgb3Igbm9uLXN0YXRpYywgd2hpY2ggaXMgd2hhdCBJIHdhbnQgZm9yIGEgZ29vZCBmdXp6aW5nIHRhcmdldC4KCkluIHNob3J0LCB0aGlzIHBhdGNoIGZpeGVzIHNsZWVwLWluLWF0b21pYyBpc3N1ZXMgZHVyaW5nIG1lc3NhZ2UgcHVyZ2luZyAoYnkgZGVmZXJyaW5nIGRpcnR5aW5nIHBhZ2VzKSwgc29ja2V0IHJlZmVyZW5jZSBjb3VudGluZyBwcm9ibGVtcywgYW5kIHJlZmVyZW5jZSBsZWFrcy4gVGhpcyB3aWxsIGFmZmVjdCBzdGFuZGFyZCBzb2NrZXQgb3BlcmF0aW9ucyBhbmQgUkRNQSBtZXNzYWdlcy4KCkkmIzM5O20gY29uZmlkZW50IGluIHRoZXNlIGZvY3VzIHN5bWJvbHMsIHNvIGl0JiMzOTtzIHRpbWUgdG8gc2V0LXJlc3VsdHMgYW5kIGdldCB0aGUgZnV6emluZyBzdGFydGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxMDo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UkRTJiMzNDssCiAgICAmIzM0O1JEU19SRE1BJiMzNDssCiAgICAmIzM0O0lORklOSUJBTkQmIzM0OywKICAgICYjMzQ7SU5GSU5JQkFORF9BRERSX1RSQU5TJiMzNDssCiAgICAmIzM0O1JETUFfUlhFJiMzNDssCiAgICAmIzM0O1JETUFfU0lXJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cmRzX21lc3NhZ2VfcHV0JiMzNDssCiAgICAmIzM0O3Jkc19zZW5kX3htaXQmIzM0OywKICAgICYjMzQ7cmRzX2Ntc2dfcmRtYV9hcmdzJiMzNDssCiAgICAmIzM0O3Jkc19yZG1hX2ZyZWVfb3AmIzM0OywKICAgICYjMzQ7cmRzX2F0b21pY19mcmVlX29wJiMzNDssCiAgICAmIzM0O19fcmRzX3B1dF9tcl9maW5hbCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHNsZWVwLWluLWF0b21pYyBidWcgaW4gUkRTIG1lc3NhZ2UgcHVyZ2luZyBieSBkZWZlcnJpbmcgdGhlIHB1cmdlIG9mIG1lc3NhZ2VzIHRoYXQgZGlydHkgcGFnZXMgdG8gYSB3b3JrcXVldWUuIEl0IGFsc28gZml4ZXMgc29ja2V0IHJlZmVyZW5jZSBjb3VudGluZyBpc3N1ZXMgaW4gUkRTIFJETUEgb3BlcmF0aW9ucyBhbmQgYSByZWZlcmVuY2UgbGVhayBpbiBgcmRzX3NlbmRfeG1pdGAuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gdGhlIGNvcmUgUkRTIGFuZCBSRFMgUkRNQSBjb2RlIHBhdGhzIHRoYXQgY2FuIGJlIHJlYWNoZWQgdmlhIHN0YW5kYXJkIHNvY2tldCBvcGVyYXRpb25zIGFuZCBSRE1BIG1lc3NhZ2VzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtSRFMmIzM0OywKICAgICYjMzQ7UkRTX1JETUEmIzM0OywKICAgICYjMzQ7SU5GSU5JQkFORCYjMzQ7LAogICAgJiMzNDtJTkZJTklCQU5EX0FERFJfVFJBTlMmIzM0OywKICAgICYjMzQ7UkRNQV9SWEUmIzM0OywKICAgICYjMzQ7UkRNQV9TSVcmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyZHNfbWVzc2FnZV9wdXQmIzM0OywKICAgICYjMzQ7cmRzX3NlbmRfeG1pdCYjMzQ7LAogICAgJiMzNDtyZHNfY21zZ19yZG1hX2FyZ3MmIzM0OywKICAgICYjMzQ7cmRzX3JkbWFfZnJlZV9vcCYjMzQ7LAogICAgJiMzNDtyZHNfYXRvbWljX2ZyZWVfb3AmIzM0OywKICAgICYjMzQ7X19yZHNfcHV0X21yX2ZpbmFsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgc2xlZXAtaW4tYXRvbWljIGJ1ZyBpbiBSRFMgbWVzc2FnZSBwdXJnaW5nIGJ5IGRlZmVycmluZyB0aGUgcHVyZ2Ugb2YgbWVzc2FnZXMgdGhhdCBkaXJ0eSBwYWdlcyB0byBhIHdvcmtxdWV1ZS4gSXQgYWxzbyBmaXhlcyBzb2NrZXQgcmVmZXJlbmNlIGNvdW50aW5nIGlzc3VlcyBpbiBSRFMgUkRNQSBvcGVyYXRpb25zIGFuZCBhIHJlZmVyZW5jZSBsZWFrIGluIGByZHNfc2VuZF94bWl0YC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiB0aGUgY29yZSBSRFMgYW5kIFJEUyBSRE1BIGNvZGUgcGF0aHMgdGhhdCBjYW4gYmUgcmVhY2hlZCB2aWEgc3RhbmRhcmQgc29ja2V0IG9wZXJhdGlvbnMgYW5kIFJETUEgbWVzc2FnZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxMDo0NToyNy41MTY2NTEwNDhaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4Nzc5NzQxNzAxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJSRFNcIixcbiAgICBcIlJEU19SRE1BXCIsXG4gICAgXCJJTkZJTklCQU5EXCIsXG4gICAgXCJJTkZJTklCQU5EX0FERFJfVFJBTlNcIixcbiAgICBcIlJETUFfUlhFXCIsXG4gICAgXCJSRE1BX1NJV1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJkc19tZXNzYWdlX3B1dFwiLFxuICAgIFwicmRzX3NlbmRfeG1pdFwiLFxuICAgIFwicmRzX2Ntc2dfcmRtYV9hcmdzXCIsXG4gICAgXCJyZHNfcmRtYV9mcmVlX29wXCIsXG4gICAgXCJyZHNfYXRvbWljX2ZyZWVfb3BcIixcbiAgICBcIl9fcmRzX3B1dF9tcl9maW5hbFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgc2xlZXAtaW4tYXRvbWljIGJ1ZyBpbiBSRFMgbWVzc2FnZSBwdXJnaW5nIGJ5IGRlZmVycmluZyB0aGUgcHVyZ2Ugb2YgbWVzc2FnZXMgdGhhdCBkaXJ0eSBwYWdlcyB0byBhIHdvcmtxdWV1ZS4gSXQgYWxzbyBmaXhlcyBzb2NrZXQgcmVmZXJlbmNlIGNvdW50aW5nIGlzc3VlcyBpbiBSRFMgUkRNQSBvcGVyYXRpb25zIGFuZCBhIHJlZmVyZW5jZSBsZWFrIGluIGByZHNfc2VuZF94bWl0YC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiB0aGUgY29yZSBSRFMgYW5kIFJEUyBSRE1BIGNvZGUgcGF0aHMgdGhhdCBjYW4gYmUgcmVhY2hlZCB2aWEgc3RhbmRhcmQgc29ja2V0IG9wZXJhdGlvbnMgYW5kIFJETUEgbWVzc2FnZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDEwOjQ1OjI3LjUxNjY1OTk1OFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTU3ODQyMTcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgM2ZmMDUxNmRiNWIzZjljMGJmZmNjYzE0ZmZmODdjMjRmOTljNjY4NVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEp1bCAyNyAxMDo0NToyNSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvcmRzL2liLmMgYi9uZXQvcmRzL2liLmNcXG5pbmRleCA4ZjljZjQ5MTk4NGYxMi4uYWQyZjAzOGJkMWFjNDIgMTAwNjQ0XFxuLS0tIGEvbmV0L3Jkcy9pYi5jXFxuKysrIGIvbmV0L3Jkcy9pYi5jXFxuQEAgLTU0MSw2ICs1NDEsMTggQEAgdm9pZCByZHNfaWJfZXhpdCh2b2lkKVxcbiAjZW5kaWZcXG4gXFx0cmRzX2liX3VucmVnaXN0ZXJfY2xpZW50KCk7XFxuIFxcdHJkc19pYl9kZXN0cm95X25vZGV2X2Nvbm5zKCk7XFxuK1xcbitcXHQvKiBUaGUgY29tcGxldGlvbiB0YXNrbGV0cyBtYXkgaGF2ZSBkZWZlcnJlZCBtZXNzYWdlIGZyZWVzIHRvXFxuK1xcdCAqIHJkc193cSwgYW5kIHRob3NlIGNhbiBjYWxsIGJhY2sgaW50byB0aGlzIG1vZHVsZSB0aHJvdWdoIHRoZVxcbitcXHQgKiBvcCdzIE1SLiAgRHJhaW4gdGhlbSBiZWZvcmUgdGhlIG1vZHVsZSBnb2VzIGF3YXkuICBBIGRlZmVycmVkXFxuK1xcdCAqIHB1cmdlIGNhbiBkcm9wIHRoZSBmaW5hbCByZWZlcmVuY2Ugb24gdGhlIG9wJ3MgZGV2aWNlLCB3aGljaFxcbitcXHQgKiBxdWV1ZXMgcmRzX2liX2Rldl9mcmVlKCkgYmFjayBvbnRvIHJkc193cSwgYW5kXFxuK1xcdCAqIGZsdXNoX3dvcmtxdWV1ZSgpIGRvZXMgbm90IHdhaXQgZm9yIHdvcmsgcXVldWVkIGJ5IHRoZSBpdGVtc1xcbitcXHQgKiBpdCBpcyBmbHVzaGluZy4gIEZsdXNoIGEgc2Vjb25kIHRpbWUgZm9yIHRob3NlLlxcbitcXHQgKi9cXG4rXFx0Zmx1c2hfd29ya3F1ZXVlKHJkc193cSk7XFxuK1xcdGZsdXNoX3dvcmtxdWV1ZShyZHNfd3EpO1xcbitcXG4gXFx0cmRzX2liX3N5c2N0bF9leGl0KCk7XFxuIFxcdHJkc19pYl9yZWN2X2V4aXQoKTtcXG4gXFx0cmRzX3RyYW5zX3VucmVnaXN0ZXIoXFx1MDAyNnJkc19pYl90cmFuc3BvcnQpO1xcbmRpZmYgLS1naXQgYS9uZXQvcmRzL21lc3NhZ2UuYyBiL25ldC9yZHMvbWVzc2FnZS5jXFxuaW5kZXggN2ZlYjBlYjY1MzdkYjguLjJmNjU0YWNhZDI5Yjk0IDEwMDY0NFxcbi0tLSBhL25ldC9yZHMvbWVzc2FnZS5jXFxuKysrIGIvbmV0L3Jkcy9tZXNzYWdlLmNcXG5AQCAtMTgyLDYgKzE4MiwyOSBAQCBzdGF0aWMgdm9pZCByZHNfbWVzc2FnZV9wdXJnZShzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtKVxcbiBcXHRcXHRrcmVmX3B1dChcXHUwMDI2cm0tXFx1MDAzZWF0b21pYy5vcF9yZG1hX21yLVxcdTAwM2VyX2tyZWYsIF9fcmRzX3B1dF9tcl9maW5hbCk7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIHJkc19tZXNzYWdlX3B1cmdlX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuK3tcXG4rXFx0c3RydWN0IHJkc19tZXNzYWdlICpybSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcmRzX21lc3NhZ2UsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIG1fcHVyZ2Vfd29yayk7XFxuK1xcbitcXHRyZHNfbWVzc2FnZV9wdXJnZShybSk7XFxuK1xcbitcXHRrZnJlZShybSk7XFxuK31cXG4rXFxuKy8qIFB1cmdpbmcgYSBtZXNzYWdlIHdpdGggYW4gUkRNQSBvciBhdG9taWMgb3Agd2hvc2UgcGFnZXMgd2VyZSBwb3NzaWJseVxcbisgKiB3cml0dGVuIGJ5IHRoZSByZW1vdGUgc2lkZSBtdXN0IGRpcnR5IHRob3NlIHBhZ2VzLCB3aGljaCBjYW4gc2xlZXBcXG4rICogKGFuZCB0aGUgcGFnZXMgbWF5IGJlIGZpbGUtYmFja2VkLCBzbyBkaXJ0eWluZyB0aGVtIHVuZGVyIGEgbm9uLWlycS1zYWZlXFxuKyAqIGZpbGVzeXN0ZW0gbG9jayBtdXN0IG5vdCBoYXBwZW4gZnJvbSBhdG9taWMgY29udGV4dCBhdCBhbGwpLlxcbisgKi9cXG4rc3RhdGljIGJvb2wgcmRzX21lc3NhZ2VfZGlydGllc19wYWdlcyhzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtKVxcbit7XFxuK1xcdGlmIChybS1cXHUwMDNlcmRtYS5vcF9hY3RpdmUgXFx1MDAyNlxcdTAwMjYgcm0tXFx1MDAzZXJkbWEub3BfbmVudHMgXFx1MDAyNlxcdTAwMjYgIXJtLVxcdTAwM2VyZG1hLm9wX3dyaXRlIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAhcm0tXFx1MDAzZXJkbWEub3Bfb2RwX21yKVxcbitcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFx0cmV0dXJuIHJtLVxcdTAwM2VhdG9taWMub3BfYWN0aXZlO1xcbit9XFxuK1xcbiB2b2lkIHJkc19tZXNzYWdlX3B1dChzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtKVxcbiB7XFxuIFxcdHJkc2RlYnVnKFxcXCJwdXQgcm0gJXAgcmVmICVkXFxcXG5cXFwiLCBybSwgcmVmY291bnRfcmVhZChcXHUwMDI2cm0tXFx1MDAzZW1fcmVmY291bnQpKTtcXG5AQCAtMTg5LDYgKzIxMiwxNyBAQCB2b2lkIHJkc19tZXNzYWdlX3B1dChzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtKVxcbiBcXHRpZiAocmVmY291bnRfZGVjX2FuZF90ZXN0KFxcdTAwMjZybS1cXHUwMDNlbV9yZWZjb3VudCkpIHtcXG4gXFx0XFx0QlVHX09OKCFsaXN0X2VtcHR5KFxcdTAwMjZybS1cXHUwMDNlbV9zb2NrX2l0ZW0pKTtcXG4gXFx0XFx0QlVHX09OKCFsaXN0X2VtcHR5KFxcdTAwMjZybS1cXHUwMDNlbV9jb25uX2l0ZW0pKTtcXG4rXFxuK1xcdFxcdC8qIFRoZSBmaW5hbCBwdXQgbWF5IGNvbWUgZnJvbSB0aGUgSUIgc2VuZCBjb21wbGV0aW9uXFxuK1xcdFxcdCAqIHRhc2tsZXQ7IHBhZ2UgZGlydHlpbmcgbXVzdCBiZSBkZWZlcnJlZCB0byBwcm9jZXNzXFxuK1xcdFxcdCAqIGNvbnRleHQgdGhlbi5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGlmICghaW5fdGFzaygpIFxcdTAwMjZcXHUwMDI2IHJkc19tZXNzYWdlX2RpcnRpZXNfcGFnZXMocm0pKSB7XFxuK1xcdFxcdFxcdElOSVRfV09SSyhcXHUwMDI2cm0tXFx1MDAzZW1fcHVyZ2Vfd29yaywgcmRzX21lc3NhZ2VfcHVyZ2Vfd29ya2VyKTtcXG4rXFx0XFx0XFx0cXVldWVfd29yayhyZHNfd3EsIFxcdTAwMjZybS1cXHUwMDNlbV9wdXJnZV93b3JrKTtcXG4rXFx0XFx0XFx0cmV0dXJuO1xcbitcXHRcXHR9XFxuK1xcbiBcXHRcXHRyZHNfbWVzc2FnZV9wdXJnZShybSk7XFxuIFxcbiBcXHRcXHRrZnJlZShybSk7XFxuZGlmZiAtLWdpdCBhL25ldC9yZHMvcmRtYS5jIGIvbmV0L3Jkcy9yZG1hLmNcXG5pbmRleCA2MWZiNmU0NTI4MWJmMS4uNWY1NzUzYWZkY2RjYmQgMTAwNjQ0XFxuLS0tIGEvbmV0L3Jkcy9yZG1hLmNcXG4rKysgYi9uZXQvcmRzL3JkbWEuY1xcbkBAIC0xMTcsNiArMTE3LDcgQEAgdm9pZCBfX3Jkc19wdXRfbXJfZmluYWwoc3RydWN0IGtyZWYgKmtyZWYpXFxuIFxcdHN0cnVjdCByZHNfbXIgKm1yID0gY29udGFpbmVyX29mKGtyZWYsIHN0cnVjdCByZHNfbXIsIHJfa3JlZik7XFxuIFxcbiBcXHRyZHNfZGVzdHJveV9tcihtcik7XFxuK1xcdHNvY2tfcHV0KHJkc19yc190b19zayhtci1cXHUwMDNlcl9zb2NrKSk7XFxuIFxcdGtmcmVlKG1yKTtcXG4gfVxcbiBcXG5AQCAtMjQzLDcgKzI0NCwxMSBAQCBzdGF0aWMgaW50IF9fcmRzX3JkbWFfbWFwKHN0cnVjdCByZHNfc29jayAqcnMsIHN0cnVjdCByZHNfZ2V0X21yX2FyZ3MgKmFyZ3MsXFxuIFxcdGtyZWZfaW5pdChcXHUwMDI2bXItXFx1MDAzZXJfa3JlZik7XFxuIFxcdFJCX0NMRUFSX05PREUoXFx1MDAyNm1yLVxcdTAwM2VyX3JiX25vZGUpO1xcbiBcXHRtci1cXHUwMDNlcl90cmFucyA9IHJzLVxcdTAwM2Vyc190cmFuc3BvcnQ7XFxuK1xcdC8qIFRoZSBNUiBjYW4gb3V0bGl2ZSBpdHMgc29ja2V0OiBhIHNvY2tldCByZWZlcmVuY2UgaXMgaGVsZFxcbitcXHQgKiB1bnRpbCB0aGUgZmluYWwga3JlZiBpcyBkcm9wcGVkIGluIF9fcmRzX3B1dF9tcl9maW5hbCgpLlxcbitcXHQgKi9cXG4gXFx0bXItXFx1MDAzZXJfc29jayA9IHJzO1xcbitcXHRzb2NrX2hvbGQocmRzX3JzX3RvX3NrKHJzKSk7XFxuIFxcbiBcXHRpZiAoYXJncy1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBSRFNfUkRNQV9VU0VfT05DRSlcXG4gXFx0XFx0bXItXFx1MDAzZXJfdXNlX29uY2UgPSAxO1xcbkBAIC00OTUsNyArNTAwLDkgQEAgdm9pZCByZHNfcmRtYV9mcmVlX29wKHN0cnVjdCBybV9yZG1hX29wICpybylcXG4gXFxuIFxcdFxcdFxcdC8qIE1hcmsgcGFnZSBkaXJ0eSBpZiBpdCB3YXMgcG9zc2libHkgbW9kaWZpZWQsIHdoaWNoXFxuIFxcdFxcdFxcdCAqIGlzIHRoZSBjYXNlIGZvciBhIFJETUFfUkVBRCB3aGljaCBjb3BpZXMgZnJvbSByZW1vdGVcXG4tXFx0XFx0XFx0ICogdG8gbG9jYWwgbWVtb3J5XFxuK1xcdFxcdFxcdCAqIHRvIGxvY2FsIG1lbW9yeS4gIERpcnR5aW5nIHRoZSBwYWdlIGNhbiBzbGVlcCwgc29cXG4rXFx0XFx0XFx0ICogcmRzX21lc3NhZ2VfcHV0KCkgZGVmZXJzIHRoZSBwdXJnZSBvZiBzdWNoIG9wcyB0b1xcbitcXHRcXHRcXHQgKiBwcm9jZXNzIGNvbnRleHQuXFxuIFxcdFxcdFxcdCAqL1xcbiBcXHRcXHRcXHR1bnBpbl91c2VyX3BhZ2VzX2RpcnR5X2xvY2soXFx1MDAyNnBhZ2UsIDEsICFyby1cXHUwMDNlb3Bfd3JpdGUpO1xcbiBcXHRcXHR9XFxuQEAgLTUxMyw3ICs1MjAsMTAgQEAgdm9pZCByZHNfYXRvbWljX2ZyZWVfb3Aoc3RydWN0IHJtX2F0b21pY19vcCAqYW8pXFxuIFxcbiBcXHQvKiBNYXJrIHBhZ2UgZGlydHkgaWYgaXQgd2FzIHBvc3NpYmx5IG1vZGlmaWVkLCB3aGljaFxcbiBcXHQgKiBpcyB0aGUgY2FzZSBmb3IgYSBSRE1BX1JFQUQgd2hpY2ggY29waWVzIGZyb20gcmVtb3RlXFxuLVxcdCAqIHRvIGxvY2FsIG1lbW9yeSAqL1xcbitcXHQgKiB0byBsb2NhbCBtZW1vcnkuICBEaXJ0eWluZyB0aGUgcGFnZSBjYW4gc2xlZXAsIHNvXFxuK1xcdCAqIHJkc19tZXNzYWdlX3B1dCgpIGRlZmVycyB0aGUgcHVyZ2Ugb2Ygc3VjaCBvcHMgdG9cXG4rXFx0ICogcHJvY2VzcyBjb250ZXh0LlxcbitcXHQgKi9cXG4gXFx0dW5waW5fdXNlcl9wYWdlc19kaXJ0eV9sb2NrKFxcdTAwMjZwYWdlLCAxLCB0cnVlKTtcXG4gXFxuIFxcdGtmcmVlKGFvLVxcdTAwM2VvcF9ub3RpZmllcik7XFxuQEAgLTc0Nyw2ICs3NTcsMTAgQEAgaW50IHJkc19jbXNnX3JkbWFfYXJncyhzdHJ1Y3QgcmRzX3NvY2sgKnJzLCBzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtLFxcbiBcXHRcXHRcXHR9XFxuIFxcdFxcdFxcdHJkc2RlYnVnKFxcXCJOZWVkIG9kcDsgbG9jYWxfb2RwX21yICVwIHRyYW5zX3ByaXZhdGUgJXBcXFxcblxcXCIsXFxuIFxcdFxcdFxcdFxcdCBsb2NhbF9vZHBfbXIsIGxvY2FsX29kcF9tci1cXHUwMDNlcl90cmFuc19wcml2YXRlKTtcXG4rXFx0XFx0XFx0LyogRnJvbSBoZXJlIG9uIHRoZSBNUiBpcyB0b3JuIGRvd24gdGhyb3VnaFxcbitcXHRcXHRcXHQgKiBfX3Jkc19wdXRfbXJfZmluYWwoKSwgd2hpY2ggZHJvcHMgdGhpcyByZWZlcmVuY2UuXFxuK1xcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHRzb2NrX2hvbGQocmRzX3JzX3RvX3NrKHJzKSk7XFxuIFxcdFxcdFxcdG9wLVxcdTAwM2VvcF9vZHBfbXIgPSBsb2NhbF9vZHBfbXI7XFxuIFxcdFxcdFxcdG9wLVxcdTAwM2VvcF9vZHBfYWRkciA9IGlvdi1cXHUwMDNlYWRkcjtcXG4gXFx0XFx0fVxcbmRpZmYgLS1naXQgYS9uZXQvcmRzL3Jkcy5oIGIvbmV0L3Jkcy9yZHMuaFxcbmluZGV4IDZlMDc5MGU0YjU3MDNiLi45ODJmM2U0MDY3NzNmYSAxMDA2NDRcXG4tLS0gYS9uZXQvcmRzL3Jkcy5oXFxuKysrIGIvbmV0L3Jkcy9yZHMuaFxcbkBAIC00NDUsNiArNDQ1LDEyIEBAIHN0cnVjdCByZHNfbWVzc2FnZSB7XFxuIFxcbiBcXHR2b2lkXFx0XFx0XFx0Km1fZmluYWxfb3A7XFxuIFxcbitcXHQvKiBGcmVlcyB0aGUgbWVzc2FnZSBmcm9tIHByb2Nlc3MgY29udGV4dCB3aGVuIHRoZSBmaW5hbCBwdXRcXG4rXFx0ICogaGFwcGVucyBpbiBhdG9taWMgY29udGV4dCBidXQgcHVyZ2luZyBuZWVkcyB0byBkaXJ0eSB1c2VyXFxuK1xcdCAqIHBhZ2VzLCB3aGljaCBjYW4gc2xlZXAuXFxuK1xcdCAqL1xcbitcXHRzdHJ1Y3Qgd29ya19zdHJ1Y3RcXHRtX3B1cmdlX3dvcms7XFxuK1xcbiBcXHRzdHJ1Y3Qge1xcbiBcXHRcXHRzdHJ1Y3Qgcm1fYXRvbWljX29wIHtcXG4gXFx0XFx0XFx0aW50XFx0XFx0XFx0b3BfdHlwZTtcXG5kaWZmIC0tZ2l0IGEvbmV0L3Jkcy9zZW5kLmMgYi9uZXQvcmRzL3NlbmQuY1xcbmluZGV4IDY4YmUxYmYwZTBhZGY5Li43ZTQ4ZjY0ZGZhYTY3OSAxMDA2NDRcXG4tLS0gYS9uZXQvcmRzL3NlbmQuY1xcbisrKyBiL25ldC9yZHMvc2VuZC5jXFxuQEAgLTMzOSw5ICszMzksMjEgQEAgaW50IHJkc19zZW5kX3htaXQoc3RydWN0IHJkc19jb25uX3BhdGggKmNwKVxcbiBcXHRcXHRcXHQgICAgKHJtLVxcdTAwM2VyZG1hLm9wX2FjdGl2ZSBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHRcXHQgICAgdGVzdF9iaXQoUkRTX01TR19SRVRSQU5TTUlUVEVELCBcXHUwMDI2cm0tXFx1MDAzZW1fZmxhZ3MpKSkge1xcbiBcXHRcXHRcXHRcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2Y3AtXFx1MDAzZWNwX2xvY2ssIGZsYWdzKTtcXG4tXFx0XFx0XFx0XFx0aWYgKHRlc3RfYW5kX2NsZWFyX2JpdChSRFNfTVNHX09OX0NPTk4sIFxcdTAwMjZybS1cXHUwMDNlbV9mbGFncykpXFxuLVxcdFxcdFxcdFxcdFxcdGxpc3RfbW92ZShcXHUwMDI2cm0tXFx1MDAzZW1fY29ubl9pdGVtLCBcXHUwMDI2dG9fYmVfZHJvcHBlZCk7XFxuLVxcdFxcdFxcdFxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNmNwLVxcdTAwM2VjcF9sb2NrLCBmbGFncyk7XFxuK1xcdFxcdFxcdFxcdGlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoUkRTX01TR19PTl9DT05OLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgXFx1MDAyNnJtLVxcdTAwM2VtX2ZsYWdzKSkge1xcbitcXHRcXHRcXHRcXHRcXHQvKiBvdXIgcmVmIGlzIHB1dCBhZnRlciB0aGUgYmF0Y2ggKi9cXG4rXFx0XFx0XFx0XFx0XFx0bGlzdF9tb3ZlKFxcdTAwMjZybS1cXHUwMDNlbV9jb25uX2l0ZW0sXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgXFx1MDAyNnRvX2JlX2Ryb3BwZWQpO1xcbitcXHRcXHRcXHRcXHRcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZjcC1cXHUwMDNlY3BfbG9jayxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIGZsYWdzKTtcXG4rXFx0XFx0XFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0XFx0XFx0LyogYWxyZWFkeSBvZmYgdGhlIGNvbm4gbGlzdDsgZHJvcFxcbitcXHRcXHRcXHRcXHRcXHQgKiB0aGUgcmVmIHRha2VuIGFib3ZlIG91cnNlbHZlc1xcbitcXHRcXHRcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0XFx0XFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2Y3AtXFx1MDAzZWNwX2xvY2ssXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBmbGFncyk7XFxuK1xcdFxcdFxcdFxcdFxcdHJkc19tZXNzYWdlX3B1dChybSk7XFxuK1xcdFxcdFxcdFxcdH1cXG4gXFx0XFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdFxcdH1cXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDEwOjQ1OjI4LjA3NTMwNDczOVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjg3MjM4NzUzNjU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlJEU1wiLFxuICAgIFwiUkRTX1JETUFcIixcbiAgICBcIklORklOSUJBTkRcIixcbiAgICBcIklORklOSUJBTkRfQUREUl9UUkFOU1wiLFxuICAgIFwiUkRNQV9SWEVcIixcbiAgICBcIlJETUFfU0lXXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicmRzX21lc3NhZ2VfcHV0XCIsXG4gICAgXCJyZHNfc2VuZF94bWl0XCIsXG4gICAgXCJyZHNfY21zZ19yZG1hX2FyZ3NcIixcbiAgICBcInJkc19yZG1hX2ZyZWVfb3BcIixcbiAgICBcInJkc19hdG9taWNfZnJlZV9vcFwiLFxuICAgIFwiX19yZHNfcHV0X21yX2ZpbmFsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBzbGVlcC1pbi1hdG9taWMgYnVnIGluIFJEUyBtZXNzYWdlIHB1cmdpbmcgYnkgZGVmZXJyaW5nIHRoZSBwdXJnZSBvZiBtZXNzYWdlcyB0aGF0IGRpcnR5IHBhZ2VzIHRvIGEgd29ya3F1ZXVlLiBJdCBhbHNvIGZpeGVzIHNvY2tldCByZWZlcmVuY2UgY291bnRpbmcgaXNzdWVzIGluIFJEUyBSRE1BIG9wZXJhdGlvbnMgYW5kIGEgcmVmZXJlbmNlIGxlYWsgaW4gYHJkc19zZW5kX3htaXRgLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHRoZSBjb3JlIFJEUyBhbmQgUkRTIFJETUEgY29kZSBwYXRocyB0aGF0IGNhbiBiZSByZWFjaGVkIHZpYSBzdGFuZGFyZCBzb2NrZXQgb3BlcmF0aW9ucyBhbmQgUkRNQSBtZXNzYWdlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgM2ZmMDUxNmRiNWIzZjljMGJmZmNjYzE0ZmZmODdjMjRmOTljNjY4NVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVsIDI3IDEwOjQ1OjI1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3Jkcy9pYi5jIGIvbmV0L3Jkcy9pYi5jXG5pbmRleCA4ZjljZjQ5MTk4NGYxMi4uYWQyZjAzOGJkMWFjNDIgMTAwNjQ0XG4tLS0gYS9uZXQvcmRzL2liLmNcbisrKyBiL25ldC9yZHMvaWIuY1xuQEAgLTU0MSw2ICs1NDEsMTggQEAgdm9pZCByZHNfaWJfZXhpdCh2b2lkKVxuICNlbmRpZlxuIFx0cmRzX2liX3VucmVnaXN0ZXJfY2xpZW50KCk7XG4gXHRyZHNfaWJfZGVzdHJveV9ub2Rldl9jb25ucygpO1xuK1xuK1x0LyogVGhlIGNvbXBsZXRpb24gdGFza2xldHMgbWF5IGhhdmUgZGVmZXJyZWQgbWVzc2FnZSBmcmVlcyB0b1xuK1x0ICogcmRzX3dxLCBhbmQgdGhvc2UgY2FuIGNhbGwgYmFjayBpbnRvIHRoaXMgbW9kdWxlIHRocm91Z2ggdGhlXG4rXHQgKiBvcCdzIE1SLiAgRHJhaW4gdGhlbSBiZWZvcmUgdGhlIG1vZHVsZSBnb2VzIGF3YXkuICBBIGRlZmVycmVkXG4rXHQgKiBwdXJnZSBjYW4gZHJvcCB0aGUgZmluYWwgcmVmZXJlbmNlIG9uIHRoZSBvcCdzIGRldmljZSwgd2hpY2hcbitcdCAqIHF1ZXVlcyByZHNfaWJfZGV2X2ZyZWUoKSBiYWNrIG9udG8gcmRzX3dxLCBhbmRcbitcdCAqIGZsdXNoX3dvcmtxdWV1ZSgpIGRvZXMgbm90IHdhaXQgZm9yIHdvcmsgcXVldWVkIGJ5IHRoZSBpdGVtc1xuK1x0ICogaXQgaXMgZmx1c2hpbmcuICBGbHVzaCBhIHNlY29uZCB0aW1lIGZvciB0aG9zZS5cbitcdCAqL1xuK1x0Zmx1c2hfd29ya3F1ZXVlKHJkc193cSk7XG4rXHRmbHVzaF93b3JrcXVldWUocmRzX3dxKTtcbitcbiBcdHJkc19pYl9zeXNjdGxfZXhpdCgpO1xuIFx0cmRzX2liX3JlY3ZfZXhpdCgpO1xuIFx0cmRzX3RyYW5zX3VucmVnaXN0ZXIoXHUwMDI2cmRzX2liX3RyYW5zcG9ydCk7XG5kaWZmIC0tZ2l0IGEvbmV0L3Jkcy9tZXNzYWdlLmMgYi9uZXQvcmRzL21lc3NhZ2UuY1xuaW5kZXggN2ZlYjBlYjY1MzdkYjguLjJmNjU0YWNhZDI5Yjk0IDEwMDY0NFxuLS0tIGEvbmV0L3Jkcy9tZXNzYWdlLmNcbisrKyBiL25ldC9yZHMvbWVzc2FnZS5jXG5AQCAtMTgyLDYgKzE4MiwyOSBAQCBzdGF0aWMgdm9pZCByZHNfbWVzc2FnZV9wdXJnZShzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtKVxuIFx0XHRrcmVmX3B1dChcdTAwMjZybS1cdTAwM2VhdG9taWMub3BfcmRtYV9tci1cdTAwM2VyX2tyZWYsIF9fcmRzX3B1dF9tcl9maW5hbCk7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIHJkc19tZXNzYWdlX3B1cmdlX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4re1xuK1x0c3RydWN0IHJkc19tZXNzYWdlICpybSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcmRzX21lc3NhZ2UsXG4rXHRcdFx0XHRcdCAgICAgIG1fcHVyZ2Vfd29yayk7XG4rXG4rXHRyZHNfbWVzc2FnZV9wdXJnZShybSk7XG4rXG4rXHRrZnJlZShybSk7XG4rfVxuK1xuKy8qIFB1cmdpbmcgYSBtZXNzYWdlIHdpdGggYW4gUkRNQSBvciBhdG9taWMgb3Agd2hvc2UgcGFnZXMgd2VyZSBwb3NzaWJseVxuKyAqIHdyaXR0ZW4gYnkgdGhlIHJlbW90ZSBzaWRlIG11c3QgZGlydHkgdGhvc2UgcGFnZXMsIHdoaWNoIGNhbiBzbGVlcFxuKyAqIChhbmQgdGhlIHBhZ2VzIG1heSBiZSBmaWxlLWJhY2tlZCwgc28gZGlydHlpbmcgdGhlbSB1bmRlciBhIG5vbi1pcnEtc2FmZVxuKyAqIGZpbGVzeXN0ZW0gbG9jayBtdXN0IG5vdCBoYXBwZW4gZnJvbSBhdG9taWMgY29udGV4dCBhdCBhbGwpLlxuKyAqL1xuK3N0YXRpYyBib29sIHJkc19tZXNzYWdlX2RpcnRpZXNfcGFnZXMoc3RydWN0IHJkc19tZXNzYWdlICpybSlcbit7XG4rXHRpZiAocm0tXHUwMDNlcmRtYS5vcF9hY3RpdmUgXHUwMDI2XHUwMDI2IHJtLVx1MDAzZXJkbWEub3BfbmVudHMgXHUwMDI2XHUwMDI2ICFybS1cdTAwM2VyZG1hLm9wX3dyaXRlIFx1MDAyNlx1MDAyNlxuK1x0ICAgICFybS1cdTAwM2VyZG1hLm9wX29kcF9tcilcbitcdFx0cmV0dXJuIHRydWU7XG4rXHRyZXR1cm4gcm0tXHUwMDNlYXRvbWljLm9wX2FjdGl2ZTtcbit9XG4rXG4gdm9pZCByZHNfbWVzc2FnZV9wdXQoc3RydWN0IHJkc19tZXNzYWdlICpybSlcbiB7XG4gXHRyZHNkZWJ1ZyhcInB1dCBybSAlcCByZWYgJWRcXG5cIiwgcm0sIHJlZmNvdW50X3JlYWQoXHUwMDI2cm0tXHUwMDNlbV9yZWZjb3VudCkpO1xuQEAgLTE4OSw2ICsyMTIsMTcgQEAgdm9pZCByZHNfbWVzc2FnZV9wdXQoc3RydWN0IHJkc19tZXNzYWdlICpybSlcbiBcdGlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoXHUwMDI2cm0tXHUwMDNlbV9yZWZjb3VudCkpIHtcbiBcdFx0QlVHX09OKCFsaXN0X2VtcHR5KFx1MDAyNnJtLVx1MDAzZW1fc29ja19pdGVtKSk7XG4gXHRcdEJVR19PTighbGlzdF9lbXB0eShcdTAwMjZybS1cdTAwM2VtX2Nvbm5faXRlbSkpO1xuK1xuK1x0XHQvKiBUaGUgZmluYWwgcHV0IG1heSBjb21lIGZyb20gdGhlIElCIHNlbmQgY29tcGxldGlvblxuK1x0XHQgKiB0YXNrbGV0OyBwYWdlIGRpcnR5aW5nIG11c3QgYmUgZGVmZXJyZWQgdG8gcHJvY2Vzc1xuK1x0XHQgKiBjb250ZXh0IHRoZW4uXG4rXHRcdCAqL1xuK1x0XHRpZiAoIWluX3Rhc2soKSBcdTAwMjZcdTAwMjYgcmRzX21lc3NhZ2VfZGlydGllc19wYWdlcyhybSkpIHtcbitcdFx0XHRJTklUX1dPUksoXHUwMDI2cm0tXHUwMDNlbV9wdXJnZV93b3JrLCByZHNfbWVzc2FnZV9wdXJnZV93b3JrZXIpO1xuK1x0XHRcdHF1ZXVlX3dvcmsocmRzX3dxLCBcdTAwMjZybS1cdTAwM2VtX3B1cmdlX3dvcmspO1xuK1x0XHRcdHJldHVybjtcbitcdFx0fVxuK1xuIFx0XHRyZHNfbWVzc2FnZV9wdXJnZShybSk7XG4gXG4gXHRcdGtmcmVlKHJtKTtcbmRpZmYgLS1naXQgYS9uZXQvcmRzL3JkbWEuYyBiL25ldC9yZHMvcmRtYS5jXG5pbmRleCA2MWZiNmU0NTI4MWJmMS4uNWY1NzUzYWZkY2RjYmQgMTAwNjQ0XG4tLS0gYS9uZXQvcmRzL3JkbWEuY1xuKysrIGIvbmV0L3Jkcy9yZG1hLmNcbkBAIC0xMTcsNiArMTE3LDcgQEAgdm9pZCBfX3Jkc19wdXRfbXJfZmluYWwoc3RydWN0IGtyZWYgKmtyZWYpXG4gXHRzdHJ1Y3QgcmRzX21yICptciA9IGNvbnRhaW5lcl9vZihrcmVmLCBzdHJ1Y3QgcmRzX21yLCByX2tyZWYpO1xuIFxuIFx0cmRzX2Rlc3Ryb3lfbXIobXIpO1xuK1x0c29ja19wdXQocmRzX3JzX3RvX3NrKG1yLVx1MDAzZXJfc29jaykpO1xuIFx0a2ZyZWUobXIpO1xuIH1cbiBcbkBAIC0yNDMsNyArMjQ0LDExIEBAIHN0YXRpYyBpbnQgX19yZHNfcmRtYV9tYXAoc3RydWN0IHJkc19zb2NrICpycywgc3RydWN0IHJkc19nZXRfbXJfYXJncyAqYXJncyxcbiBcdGtyZWZfaW5pdChcdTAwMjZtci1cdTAwM2VyX2tyZWYpO1xuIFx0UkJfQ0xFQVJfTk9ERShcdTAwMjZtci1cdTAwM2VyX3JiX25vZGUpO1xuIFx0bXItXHUwMDNlcl90cmFucyA9IHJzLVx1MDAzZXJzX3RyYW5zcG9ydDtcbitcdC8qIFRoZSBNUiBjYW4gb3V0bGl2ZSBpdHMgc29ja2V0OiBhIHNvY2tldCByZWZlcmVuY2UgaXMgaGVsZFxuK1x0ICogdW50aWwgdGhlIGZpbmFsIGtyZWYgaXMgZHJvcHBlZCBpbiBfX3Jkc19wdXRfbXJfZmluYWwoKS5cbitcdCAqL1xuIFx0bXItXHUwMDNlcl9zb2NrID0gcnM7XG4rXHRzb2NrX2hvbGQocmRzX3JzX3RvX3NrKHJzKSk7XG4gXG4gXHRpZiAoYXJncy1cdTAwM2VmbGFncyBcdTAwMjYgUkRTX1JETUFfVVNFX09OQ0UpXG4gXHRcdG1yLVx1MDAzZXJfdXNlX29uY2UgPSAxO1xuQEAgLTQ5NSw3ICs1MDAsOSBAQCB2b2lkIHJkc19yZG1hX2ZyZWVfb3Aoc3RydWN0IHJtX3JkbWFfb3AgKnJvKVxuIFxuIFx0XHRcdC8qIE1hcmsgcGFnZSBkaXJ0eSBpZiBpdCB3YXMgcG9zc2libHkgbW9kaWZpZWQsIHdoaWNoXG4gXHRcdFx0ICogaXMgdGhlIGNhc2UgZm9yIGEgUkRNQV9SRUFEIHdoaWNoIGNvcGllcyBmcm9tIHJlbW90ZVxuLVx0XHRcdCAqIHRvIGxvY2FsIG1lbW9yeVxuK1x0XHRcdCAqIHRvIGxvY2FsIG1lbW9yeS4gIERpcnR5aW5nIHRoZSBwYWdlIGNhbiBzbGVlcCwgc29cbitcdFx0XHQgKiByZHNfbWVzc2FnZV9wdXQoKSBkZWZlcnMgdGhlIHB1cmdlIG9mIHN1Y2ggb3BzIHRvXG4rXHRcdFx0ICogcHJvY2VzcyBjb250ZXh0LlxuIFx0XHRcdCAqL1xuIFx0XHRcdHVucGluX3VzZXJfcGFnZXNfZGlydHlfbG9jayhcdTAwMjZwYWdlLCAxLCAhcm8tXHUwMDNlb3Bfd3JpdGUpO1xuIFx0XHR9XG5AQCAtNTEzLDcgKzUyMCwxMCBAQCB2b2lkIHJkc19hdG9taWNfZnJlZV9vcChzdHJ1Y3Qgcm1fYXRvbWljX29wICphbylcbiBcbiBcdC8qIE1hcmsgcGFnZSBkaXJ0eSBpZiBpdCB3YXMgcG9zc2libHkgbW9kaWZpZWQsIHdoaWNoXG4gXHQgKiBpcyB0aGUgY2FzZSBmb3IgYSBSRE1BX1JFQUQgd2hpY2ggY29waWVzIGZyb20gcmVtb3RlXG4tXHQgKiB0byBsb2NhbCBtZW1vcnkgKi9cbitcdCAqIHRvIGxvY2FsIG1lbW9yeS4gIERpcnR5aW5nIHRoZSBwYWdlIGNhbiBzbGVlcCwgc29cbitcdCAqIHJkc19tZXNzYWdlX3B1dCgpIGRlZmVycyB0aGUgcHVyZ2Ugb2Ygc3VjaCBvcHMgdG9cbitcdCAqIHByb2Nlc3MgY29udGV4dC5cbitcdCAqL1xuIFx0dW5waW5fdXNlcl9wYWdlc19kaXJ0eV9sb2NrKFx1MDAyNnBhZ2UsIDEsIHRydWUpO1xuIFxuIFx0a2ZyZWUoYW8tXHUwMDNlb3Bfbm90aWZpZXIpO1xuQEAgLTc0Nyw2ICs3NTcsMTAgQEAgaW50IHJkc19jbXNnX3JkbWFfYXJncyhzdHJ1Y3QgcmRzX3NvY2sgKnJzLCBzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtLFxuIFx0XHRcdH1cbiBcdFx0XHRyZHNkZWJ1ZyhcIk5lZWQgb2RwOyBsb2NhbF9vZHBfbXIgJXAgdHJhbnNfcHJpdmF0ZSAlcFxcblwiLFxuIFx0XHRcdFx0IGxvY2FsX29kcF9tciwgbG9jYWxfb2RwX21yLVx1MDAzZXJfdHJhbnNfcHJpdmF0ZSk7XG4rXHRcdFx0LyogRnJvbSBoZXJlIG9uIHRoZSBNUiBpcyB0b3JuIGRvd24gdGhyb3VnaFxuK1x0XHRcdCAqIF9fcmRzX3B1dF9tcl9maW5hbCgpLCB3aGljaCBkcm9wcyB0aGlzIHJlZmVyZW5jZS5cbitcdFx0XHQgKi9cbitcdFx0XHRzb2NrX2hvbGQocmRzX3JzX3RvX3NrKHJzKSk7XG4gXHRcdFx0b3AtXHUwMDNlb3Bfb2RwX21yID0gbG9jYWxfb2RwX21yO1xuIFx0XHRcdG9wLVx1MDAzZW9wX29kcF9hZGRyID0gaW92LVx1MDAzZWFkZHI7XG4gXHRcdH1cbmRpZmYgLS1naXQgYS9uZXQvcmRzL3Jkcy5oIGIvbmV0L3Jkcy9yZHMuaFxuaW5kZXggNmUwNzkwZTRiNTcwM2IuLjk4MmYzZTQwNjc3M2ZhIDEwMDY0NFxuLS0tIGEvbmV0L3Jkcy9yZHMuaFxuKysrIGIvbmV0L3Jkcy9yZHMuaFxuQEAgLTQ0NSw2ICs0NDUsMTIgQEAgc3RydWN0IHJkc19tZXNzYWdlIHtcbiBcbiBcdHZvaWRcdFx0XHQqbV9maW5hbF9vcDtcbiBcbitcdC8qIEZyZWVzIHRoZSBtZXNzYWdlIGZyb20gcHJvY2VzcyBjb250ZXh0IHdoZW4gdGhlIGZpbmFsIHB1dFxuK1x0ICogaGFwcGVucyBpbiBhdG9taWMgY29udGV4dCBidXQgcHVyZ2luZyBuZWVkcyB0byBkaXJ0eSB1c2VyXG4rXHQgKiBwYWdlcywgd2hpY2ggY2FuIHNsZWVwLlxuK1x0ICovXG4rXHRzdHJ1Y3Qgd29ya19zdHJ1Y3RcdG1fcHVyZ2Vfd29yaztcbitcbiBcdHN0cnVjdCB7XG4gXHRcdHN0cnVjdCBybV9hdG9taWNfb3Age1xuIFx0XHRcdGludFx0XHRcdG9wX3R5cGU7XG5kaWZmIC0tZ2l0IGEvbmV0L3Jkcy9zZW5kLmMgYi9uZXQvcmRzL3NlbmQuY1xuaW5kZXggNjhiZTFiZjBlMGFkZjkuLjdlNDhmNjRkZmFhNjc5IDEwMDY0NFxuLS0tIGEvbmV0L3Jkcy9zZW5kLmNcbisrKyBiL25ldC9yZHMvc2VuZC5jXG5AQCAtMzM5LDkgKzMzOSwyMSBAQCBpbnQgcmRzX3NlbmRfeG1pdChzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3ApXG4gXHRcdFx0ICAgIChybS1cdTAwM2VyZG1hLm9wX2FjdGl2ZSBcdTAwMjZcdTAwMjZcbiBcdFx0XHQgICAgdGVzdF9iaXQoUkRTX01TR19SRVRSQU5TTUlUVEVELCBcdTAwMjZybS1cdTAwM2VtX2ZsYWdzKSkpIHtcbiBcdFx0XHRcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmNwLVx1MDAzZWNwX2xvY2ssIGZsYWdzKTtcbi1cdFx0XHRcdGlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoUkRTX01TR19PTl9DT05OLCBcdTAwMjZybS1cdTAwM2VtX2ZsYWdzKSlcbi1cdFx0XHRcdFx0bGlzdF9tb3ZlKFx1MDAyNnJtLVx1MDAzZW1fY29ubl9pdGVtLCBcdTAwMjZ0b19iZV9kcm9wcGVkKTtcbi1cdFx0XHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2Y3AtXHUwMDNlY3BfbG9jaywgZmxhZ3MpO1xuK1x0XHRcdFx0aWYgKHRlc3RfYW5kX2NsZWFyX2JpdChSRFNfTVNHX09OX0NPTk4sXG4rXHRcdFx0XHRcdFx0ICAgICAgIFx1MDAyNnJtLVx1MDAzZW1fZmxhZ3MpKSB7XG4rXHRcdFx0XHRcdC8qIG91ciByZWYgaXMgcHV0IGFmdGVyIHRoZSBiYXRjaCAqL1xuK1x0XHRcdFx0XHRsaXN0X21vdmUoXHUwMDI2cm0tXHUwMDNlbV9jb25uX2l0ZW0sXG4rXHRcdFx0XHRcdFx0ICBcdTAwMjZ0b19iZV9kcm9wcGVkKTtcbitcdFx0XHRcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZjcC1cdTAwM2VjcF9sb2NrLFxuK1x0XHRcdFx0XHRcdFx0ICAgICAgIGZsYWdzKTtcbitcdFx0XHRcdH0gZWxzZSB7XG4rXHRcdFx0XHRcdC8qIGFscmVhZHkgb2ZmIHRoZSBjb25uIGxpc3Q7IGRyb3BcbitcdFx0XHRcdFx0ICogdGhlIHJlZiB0YWtlbiBhYm92ZSBvdXJzZWx2ZXNcbitcdFx0XHRcdFx0ICovXG4rXHRcdFx0XHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2Y3AtXHUwMDNlY3BfbG9jayxcbitcdFx0XHRcdFx0XHRcdCAgICAgICBmbGFncyk7XG4rXHRcdFx0XHRcdHJkc19tZXNzYWdlX3B1dChybSk7XG4rXHRcdFx0XHR9XG4gXHRcdFx0XHRjb250aW51ZTtcbiBcdFx0XHR9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxMDo0NToyOC4wNzUzMDYwNzlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2ODcxOTk4OTI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFJEUyBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggaGVyZSB0aGF04oCZcyB0b3VjaGluZyB0aGUgUkRTIHN1YnN5c3RlbSBpbiB0aGUgTGludXgga2VybmVsLiBJdCBsb29rcyBsaWtlIGl0J3MgbWFraW5nIGNoYW5nZXMgdG8gc2V2ZXJhbCBrZXkgZmlsZXM6IGBpYi5jYCwgYG1lc3NhZ2UuY2AsIGByZG1hLmNgLCBgcmRzLmhgLCBhbmQgYHNlbmQuY2AuIE15IGluaXRpYWwgcmVhZCBzdWdnZXN0cyB0aGV54oCZcmUgaW50cm9kdWNpbmcgYSBkZWZlcnJlZCBwdXJnZSBtZWNoYW5pc20gZm9yIFJEUyBtZXNzYWdlcyB0aGF0IGRpcnR5IHBhZ2VzLiBJdCBtYWtlcyBzZW5zZSwgYXMgYXRvbWljIGNvbnRleHRzIGFyZSB1c3VhbGx5IHByb2JsZW1hdGljIHdoZW4gc2xlZXBpbmcgaXMgaW52b2x2ZWQuIFRoYXTigJlzIHByb2JhYmx5IHRoZSBtYWluIHBlcmZvcm1hbmNlIHR3ZWFrLlxuXG5UaGUgcGF0Y2ggYWxzbyBzZWVtcyB0byBiZSBhZGRyZXNzaW5nIHNvbWUgcmVmZXJlbmNlIGNvdW50aW5nIGlzc3VlcyByZWxhdGVkIHRvIE1ScyBhbmQgc29ja2V0cy4gR29vZCwgdGhvc2UgYXJlIGFsd2F5cyB0cmlja3kgYW5kIGNhbiBsZWFkIHRvIHNlcmlvdXMgcHJvYmxlbXMgaWYgbm90IGhhbmRsZWQgY29ycmVjdGx5LiBUaGV5J3JlIHRvdWNoaW5nIGBzb2NrX2hvbGRgIGFuZCBgc29ja19wdXRgLCBzbyBJJ2xsIHdhbnQgdG8gcGF5IGV4dHJhIGF0dGVudGlvbiB0byB0aG9zZSBjb2RlIHNlZ21lbnRzLiBBbHNvLCBhIGZpeCBpbiBgcmRzX3NlbmRfeG1pdGAsIHdoZXJlIG1lc3NhZ2VzIHdlcmUgcG90ZW50aWFsbHkgYmVpbmcgZHJvcHBlZCBmcm9tIHRoZSBjb25uZWN0aW9uIGxpc3QgaW1wcm9wZXJseS4gQWdhaW4sIHRoaXMgaXMgdGhlIHNvcnQgb2YgdGhpbmcgdGhhdCBjYW4gYml0ZSB5b3UgbGF0ZXIuXG5cbk5vdywgbXkgcHJpbWFyeSBjb25jZXJuIGlzIHJlYWNoYWJpbGl0eSBhbmQgZnVuY3Rpb25hbGl0eS4gU2luY2UgUkRTIGlzIGEgbmV0d29yayBwcm90b2NvbCwgSSdtIGFzc3VtaW5nIGl0J3MgYWxyZWFkeSBmdW5jdGlvbmFsIGluIGl0cyBleGlzdGluZyBzdGF0ZSwgYnV0IEkgZGVmaW5pdGVseSBuZWVkIHRvIHZlcmlmeSB0aGF0IHRoaXMgcGF0Y2ggZG9lc24ndCBicmVhayBhbnl0aGluZyBvciBjcmVhdGUgbmV3IHZ1bG5lcmFiaWxpdGllcy4gVGhlIG1vc3QgZWZmZWN0aXZlIGFwcHJvYWNoIHdvdWxkIGJlIHRvIGZ1enogaXQuXG5cbkknbGwgbmVlZCB0byBwaW5wb2ludCB0aGUgY3JpdGljYWwgZnVuY3Rpb25zIHRoaXMgcGF0Y2ggaW50ZXJhY3RzIHdpdGggZGlyZWN0bHkuIExldCdzIHNlZS4uLiBJJ3ZlIGdvdDpcblxuKiAgIGByZHNfbWVzc2FnZV9wdXRgXG4qICAgYHJkc19zZW5kX3htaXRgXG4qICAgYHJkc19jbXNnX3JkbWFfYXJnc2BcbiogICBgcmRzX3JkbWFfZnJlZV9vcGBcbiogICBgcmRzX2F0b21pY19mcmVlX29wYFxuKiAgIGBfX3Jkc19yZG1hX21hcGBcbiogICBgX19yZHNfcHV0X21yX2ZpbmFsYFxuXG5UaGVzZSBhcmUgZGVmaW5pdGVseSB0aGUga2V5IGFyZWFzIHRvIHByb2JlIHdpdGggZnV6emluZy5cblxuTmV4dCwgSSdsbCByZXZpZXcgdGhlIFJEUyBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEknbGwgc2VhcmNoIGZvciBcIlJEU1wiIGluIHNvbWV0aGluZyBsaWtlIGBuZXQvcmRzL0tjb25maWdgIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IHNldHRpbmdzIHRoYXQgaW5mbHVlbmNlIHRoZSBiZWhhdmlvciBvZiB0aGVzZSBmdW5jdGlvbnMuIEtub3dpbmcgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB3aWxsIGJlIGNyaXRpY2FsIGZvciBlZmZlY3RpdmUgZnV6emluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDM1MSwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwNywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDEwOjQ1OjM0Ljk0NzMwNzY4M1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2Mjk3NTYwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgUkRTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9yZHMvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvcmRzL0tjb25maWctMi1cXG5uZXQvcmRzL0tjb25maWc6Mzpjb25maWcgUkRTXFxubmV0L3Jkcy9LY29uZmlnLTQtXFx0dHJpc3RhdGUgXFxcIlRoZSBSZWxpYWJsZSBEYXRhZ3JhbSBTb2NrZXRzIFByb3RvY29sXFxcIlxcbi0tXFxubmV0L3Jkcy9LY29uZmlnLTktXFxubmV0L3Jkcy9LY29uZmlnOjEwOmNvbmZpZyBSRFNfUkRNQVxcbm5ldC9yZHMvS2NvbmZpZy0xMS1cXHR0cmlzdGF0ZSBcXFwiUkRTIG92ZXIgSW5maW5pYmFuZFxcXCJcXG4tLVxcbm5ldC9yZHMvS2NvbmZpZy0xNi1cXG5uZXQvcmRzL0tjb25maWc6MTc6Y29uZmlnIFJEU19UQ1BcXG5uZXQvcmRzL0tjb25maWctMTgtXFx0dHJpc3RhdGUgXFxcIlJEUyBvdmVyIFRDUFxcXCJcXG4tLVxcbm5ldC9yZHMvS2NvbmZpZy0yNC1cXG5uZXQvcmRzL0tjb25maWc6MjU6Y29uZmlnIFJEU19ERUJVR1xcbm5ldC9yZHMvS2NvbmZpZy0yNi1cXHRib29sIFxcXCJSRFMgZGVidWdnaW5nIG1lc3NhZ2VzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxMDo0NTozNS4wMTAyOTE2MzJaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NzAwMjQzMTcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUkRTIENvbmZpZ3VyYXRpb24gYW5kIFBvdGVudGlhbCBJbXBhY3Qgb2YgYSBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIGNvbmZpZ3VyYXRpb24gb3B0aW9uczogYFJEU2AsIGBSRFNfUkRNQWAsIGFuZCBgUkRTX1RDUGAuIFJpZ2h0IGF3YXksIG15IGV4cGVydCBpbnR1aXRpb24gdGVsbHMgbWUgdGhhdCB0aGlzIGlzIHJlbGF0ZWQgdG8gdGhlIFJlbGlhYmxlIERhdGFncmFtIFNvY2tldHMgKFJEUykgcHJvdG9jb2wsIHBvc3NpYmx5IGZvciBkaWZmZXJlbnQgdHJhbnNwb3J0cy4gR2l2ZW4gdGhhdCB0aGUgcGF0Y2ggbW9kaWZpZXMgYG5ldC9yZHMvaWIuY2AsIG15IGJyYWluIGltbWVkaWF0ZWx5IGp1bXBzIHRvIGBSRFNfUkRNQWAuIFRoZSBgaWIuY2AgZmlsZSBuYW1lIGlzIGEgZGVhZCBnaXZlYXdheSwgZ2l2ZW4gXCJpYlwiIGltcGxpZXMgSW5maW5pQmFuZCwgYSBjb21tb24gUkRNQSB0cmFuc3BvcnQuIEl0J3MgbGlrZWx5IHRoZSBwYXRjaCBkZWFscyB3aXRoIHRoZSBSRE1BIHNwZWNpZmljIGltcGxlbWVudGF0aW9uIHdpdGhpbiBSRFMuIFRvIGNvbmZpcm0gdGhpcyBhc3NvY2lhdGlvbiwgSSdtIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgdGhlIGBuZXQvcmRzL01ha2VmaWxlYC4gVGhhdCdsbCBoZWxwIG1lIHVuZGVyc3RhbmQgaG93IGBpYi5jYCBpcyBjb21waWxlZCBpbnRvIHRoZSBSRFMgbW9kdWxlLCBnaXZpbmcgbWUgdGhlIGZpbmFsIHBpZWNlIG9mIGNvbmZpcm1hdGlvbiBJIG5lZWQgYWJvdXQgaXRzIGRpcmVjdCBhc3NvY2lhdGlvbiB3aXRoIGBSRFNfUkRNQWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUzNTAsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxMDo0NTo0MC43MTA1MzY4NDRaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjEzNzY5MDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaWJcXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3Jkcy9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvcmRzL01ha2VmaWxlPTg9cmRzX3JkbWEteSA6PVxcdHJkbWFfdHJhbnNwb3J0Lm8gXFxcXFxcbm5ldC9yZHMvTWFrZWZpbGU6OTpcXHRcXHRcXHRpYi5vIGliX2NtLm8gaWJfcmVjdi5vIGliX3JpbmcubyBpYl9zZW5kLm8gaWJfc3RhdHMubyBcXFxcXFxubmV0L3Jkcy9NYWtlZmlsZS0xMC1cXHRcXHRcXHRpYl9zeXNjdGwubyBpYl9yZG1hLm8gaWJfZnJtci5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDEwOjQ1OjQwLjc3MTkxNzgyM1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3MDM1OTczMjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzaW5nOlxuXG4qKkRlbHZpbmcgaW50byB0aGUgUkRTX1JETUEgQnVpbGQgUHJvY2VzcyoqXG5cblJpZ2h0LCBzbyBgaWIub2AgaXMgZGVmaW5pdGVseSBwYXJ0IG9mIHRoZSBgcmRzX3JkbWEteWAgbW9kdWxlLCBhbmQgdGhhdCBtb2R1bGUgaXMgKnNwZWNpZmljYWxseSogY29tcGlsZWQgd2hlbiBgQ09ORklHX1JEU19SRE1BYCBpcyBlbmFibGVkLiBNYWtlcyBzZW5zZS4gVG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jeSBjaGFpbiwgYW5kIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIGl0J3MgYnVpbHQsIEkgbmVlZCB0byBkaWcgaW50byB0aGUgYG5ldC9yZHMvS2NvbmZpZ2AgZmlsZS4gVGhhdCdzIHdoZXJlIGFsbCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGF0IHBhcnQgb2YgdGhlIG5ldHdvcmtpbmcgc3RhY2sgYXJlIGRlZmluZWQsIGluY2x1ZGluZyB0aGUgZGVwZW5kZW5jaWVzIG9mIGBSRFNfUkRNQWAuIEkgbmVlZCB0byBmaWd1cmUgb3V0ICpleGFjdGx5KiB3aGF0IHRyaWdnZXJzIHRoYXQgZmxhZywgYW5kIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgdW5kZXJseWluZyByZXF1aXJlbWVudHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU3NDMsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxMDo0NTo0NC40NzU1MTc3NzVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjI0NTIwOTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFJEU19SRE1BXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9yZHMvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvcmRzL0tjb25maWc9Mz1jb25maWcgUkRTXFxuLS1cXG5uZXQvcmRzL0tjb25maWctOS1cXG5uZXQvcmRzL0tjb25maWc6MTA6Y29uZmlnIFJEU19SRE1BXFxubmV0L3Jkcy9LY29uZmlnLTExLVxcdHRyaXN0YXRlIFxcXCJSRFMgb3ZlciBJbmZpbmliYW5kXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxMDo0NTo0NC41Mzc5NzQ3ODVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDk2MjA1OTU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBSRFMgS2NvbmZpZyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHNvbWV0aGluZyBhYm91dCB0aGUgUkRTIGNvbmZpZ3VyYXRpb24uIExldCdzIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgYG5ldC9yZHMvS2NvbmZpZ2AsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAxMC4gVGhhdCdzIHVzdWFsbHkgd2hlcmUgdGhlIHRvcC1sZXZlbCBvcHRpb25zLCB0aGUgY29yZSBmdW5jdGlvbmFsaXR5IHRvZ2dsZXMsIGFuZCBtYXliZSB0aGUgb3ZlcmFsbCBSRFMgYXJjaGl0ZWN0dXJlIGFyZSBkZWZpbmVkLiBJIGV4cGVjdCB0byBmaW5kIHRoZSBmdW5kYW1lbnRhbCBrbm9icyBhbmQgbGV2ZXJzIGNvbnRyb2xsaW5nIHRoZSBSZW1vdGUgRGlyZWN0IE1lbW9yeSBBY2Nlc3MgKFJETUEpIG92ZXIgVENQL0lQIHN0YWNrIGluIHRoYXQgYXJlYS4gSSdtIGhvcGluZyB0byBxdWlja2x5IGdyYXNwIHRoZSBjb3JlIGRlcGVuZGVuY2llcyBhbmQgYW55IG1ham9yIGZlYXR1cmUgZmxhZ3MuIExpbmUgMTAgc2hvdWxkIG9mZmVyIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgdGhhdC4gVGhpcyBpcyB0aGUgYmVkcm9jayBvZiB1bmRlcnN0YW5kaW5nIGhvdyBldmVyeXRoaW5nIGlzIHB1dCB0b2dldGhlciwgZnJvbSB0aGUgdmVyeSBjb3JlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MDY1LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTA6NDU6NDguMDM0MTgzNDFaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTcyNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3Jkcy9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRcXG4gICAzOlxcdGNvbmZpZyBSRFNcXG4gICA0OlxcdFxcdHRyaXN0YXRlIFxcXCJUaGUgUmVsaWFibGUgRGF0YWdyYW0gU29ja2V0cyBQcm90b2NvbFxcXCJcXG4gICA1OlxcdFxcdGRlcGVuZHMgb24gSU5FVFxcbiAgIDY6XFx0XFx0aGVscFxcbiAgIDc6XFx0XFx0ICBUaGUgUkRTIChSZWxpYWJsZSBEYXRhZ3JhbSBTb2NrZXRzKSBwcm90b2NvbCBwcm92aWRlcyByZWxpYWJsZSxcXG4gICA4OlxcdFxcdCAgc2VxdWVuY2VkIGRlbGl2ZXJ5IG9mIGRhdGFncmFtcyBvdmVyIEluZmluaWJhbmQgb3IgVENQLlxcbiAgIDk6XFx0XFxuICAxMDpcXHRjb25maWcgUkRTX1JETUFcXG4gIDExOlxcdFxcdHRyaXN0YXRlIFxcXCJSRFMgb3ZlciBJbmZpbmliYW5kXFxcIlxcbiAgMTI6XFx0XFx0ZGVwZW5kcyBvbiBSRFMgXFx1MDAyNlxcdTAwMjYgSU5GSU5JQkFORCBcXHUwMDI2XFx1MDAyNiBJTkZJTklCQU5EX0FERFJfVFJBTlNcXG4gIDEzOlxcdFxcdGhlbHBcXG4gIDE0OlxcdFxcdCAgQWxsb3cgUkRTIHRvIHVzZSBJbmZpbmliYW5kIGFzIGEgdHJhbnNwb3J0LlxcbiAgMTU6XFx0XFx0ICBUaGlzIHRyYW5zcG9ydCBzdXBwb3J0cyBSRE1BIG9wZXJhdGlvbnMuXFxuICAxNjpcXHRcXG4gIDE3OlxcdGNvbmZpZyBSRFNfVENQXFxuICAxODpcXHRcXHR0cmlzdGF0ZSBcXFwiUkRTIG92ZXIgVENQXFxcIlxcbiAgMTk6XFx0XFx0ZGVwZW5kcyBvbiBSRFNcXG4gIDIwOlxcdFxcdGRlcGVuZHMgb24gSVBWNiB8fCAhSVBWNlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxMDo0NTo0OC4wMzQyNDQzNFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzgwOTY0NDQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyB0aGUgRGVwZW5kZW5jaWVzIG9mIFJEU19SRE1BKipcblxuT2theSwgc28gYFJEU19SRE1BYCBoYXMgc29tZSBrZXkgZGVwZW5kZW5jaWVzLiBJIHNlZSBpdCByZWxpZXMgb24gYFJEU2AsIGBJTkZJTklCQU5EYCwgYW5kIGBJTkZJTklCQU5EX0FERFJfVFJBTlNgLiBDbGVhcmx5LCB1bmRlcnN0YW5kaW5nIGhvdyB0aG9zZSBwaWVjZXMgZml0IGlzIGNydWNpYWwgdG8gdGhpcy4gVG8gZ2V0IGEgYmV0dGVyIGdyYXNwIG9uIHRoZXNlIGRlcGVuZGVuY2llcyBhbmQgaG93IHRoZXkncmUgY29uZmlndXJlZCwgdGhlIGxvZ2ljYWwgbmV4dCBzdGVwIGlzIHRvIGRpdmUgaW50byB0aGUgS2NvbmZpZyBmaWxlcy4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gY2hlY2sgb3V0IGBkcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZ2AgdG8gc2VlIHRoZSBkZWZpbml0aW9ucyBhbmQgcmVsYXRpb25zaGlwcyBvZiBgSU5GSU5JQkFORGAgYW5kIGBJTkZJTklCQU5EX0FERFJfVFJBTlNgLiBUaGlzIHdpbGwgdGVsbCBtZSBob3cgdGhleSBhcmUgc2V0IHVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NTQxLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxMDo0NTo1MS40MTUyMTExMzlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY3MDc0MTg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJTkZJTklCQU5EXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWc6MjptZW51Y29uZmlnIElORklOSUJBTkRcXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJJbmZpbmlCYW5kIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZz0xNj1pZiBJTkZJTklCQU5EXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctMTctXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWc6MTg6Y29uZmlnIElORklOSUJBTkRfVVNFUl9NQURcXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy0xOS1cXHR0cmlzdGF0ZSBcXFwiSW5maW5pQmFuZCB1c2Vyc3BhY2UgTUFEIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy0yNy1cXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZzoyODpjb25maWcgSU5GSU5JQkFORF9VU0VSX0FDQ0VTU1xcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTI5LVxcdHRyaXN0YXRlIFxcXCJJbmZpbmlCYW5kIHVzZXJzcGFjZSBhY2Nlc3MgKHZlcmJzIGFuZCBDTSlcXFwiXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy0zOS1cXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZzo0MDpjb25maWcgSU5GSU5JQkFORF9VU0VSX0FDQ0VTU19DT1JFXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctNDEtXFx0Ym9vbFxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctNDMtXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWc6NDQ6Y29uZmlnIElORklOSUJBTkRfVVNFUl9NRU1cXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy00NS1cXHRib29sXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy01MC1cXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZzo1MTpjb25maWcgSU5GSU5JQkFORF9PTl9ERU1BTkRfUEFHSU5HXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctNTItXFx0Ym9vbCBcXFwiSW5maW5pQmFuZCBvbi1kZW1hbmQgcGFnaW5nIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy02My1cXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZzo2NDpjb25maWcgSU5GSU5JQkFORF9BRERSX1RSQU5TXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctNjUtXFx0Ym9vbCBcXFwiUkRNQS9DTVxcXCJcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTcxLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnOjcyOmNvbmZpZyBJTkZJTklCQU5EX0FERFJfVFJBTlNfQ09ORklHRlNcXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy03My1cXHRib29sXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy04MC1cXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZzo4MTpjb25maWcgSU5GSU5JQkFORF9WSVJUX0RNQVxcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTgyLVxcdGRlZl9ib29sICFISUdITUVNXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDEwOjQ1OjUxLjQ4MjI5MDUwN1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MzMwNzE4NjY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIFJEUyBSRE1BIEZ1bmN0aW9ucyoqXG5cbk9rYXksIHNvIHdlJ3JlIGRpdmluZyBpbnRvIHRoZSBSZW1vdGUgRGlyZWN0IE1lbW9yeSBBY2Nlc3MgKFJETUEpIGFzcGVjdHMgb2YgdGhlIFJlbGlhYmxlIERhdGFncmFtIFNvY2tldHMgKFJEUykgcHJvdG9jb2wuIEkgbmVlZCB0byBmb2N1cyBvbiB0aGVzZSBrZXkgY29tcG9uZW50czogYFJEU2AsIGBSRFNfUkRNQWAsIGBJTkZJTklCQU5EYCwgYW5kIGBJTkZJTklCQU5EX0FERFJfVFJBTlNgLiBJJ3ZlIGdvdCBhIGRlY2VudCBncmFzcCBvbiB0aGlzLCBidXQgbGV0J3Mgc2hhcnBlbiBvdXIgZm9jdXMuXG5cbk15IHBsYW4gaXMgdG8gaG9tZSBpbiBvbiB0aGUgZnVuY3Rpb25zIHRoYXQgZGlyZWN0bHkgaGFuZGxlIHRoZSBSRE1BIG9wZXJhdGlvbnMuIE15IGluaXRpYWwgbGlzdCBpbmNsdWRlcyBgcmRzX21lc3NhZ2VfcHV0YCwgYHJkc19zZW5kX3htaXRgLCBgcmRzX2Ntc2dfcmRtYV9hcmdzYCwgYHJkc19yZG1hX2ZyZWVfb3BgLCBgcmRzX2F0b21pY19mcmVlX29wYCwgYF9fcmRzX3JkbWFfbWFwYCwgYW5kIGBfX3Jkc19wdXRfbXJfZmluYWxgLiBJIG5lZWQgdG8gZW5zdXJlIHRoZXNlIGFyZSB0aGUgY29ycmVjdCBmdW5jdGlvbnMgdG8gYmUgZm9jdXNpbmcgb24uXG5cbk5vdywgdG8gc2VlIGlmIHRoZXkncmUgcmVsZXZhbnQsIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCB0aGVzZSBmdW5jdGlvbnMgYXJlIGV4cG9ydGVkLiBXZSBkb24ndCB3YW50IHRvIGdldCBkaXN0cmFjdGVkIGJ5IHN0YXRpYywgaW5saW5lZCBmdW5jdGlvbnMuIEJhc2VkIG9uIHRoZSBpbmZvcm1hdGlvbiBhdmFpbGFibGUsIEkgY2FuIGNvbmZpcm0gdGhhdCBgcmRzX21lc3NhZ2VfcHV0YCwgYHJkc19zZW5kX3htaXRgLCBgcmRzX2Ntc2dfcmRtYV9hcmdzYCwgYHJkc19yZG1hX2ZyZWVfb3BgLCBhbmQgYHJkc19hdG9taWNfZnJlZV9vcGAgYXJlIGFsbCBub24tc3RhdGljLCBzbyB3ZSdyZSBnb29kIHRoZXJlLiBgX19yZHNfcmRtYV9tYXBgIGlzIHN0YXRpYywgc28gSSBuZWVkIHRvIGRpZyBmdXJ0aGVyIHRvIHNlZSBpZiBpdCBpcyBpbmxpbmVkIC0gaWYgaXQgaXMgaW5saW5lZCwgaXQgd29uJ3QgYmUgb24gdGhlIGxpc3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjczNTgsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTA6NDU6NTYuODEzMDEyMzc1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NDM2Mzg0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdGF0aWMgaW50IF9fcmRzX3JkbWFfbWFwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9yZHMvcmRtYS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9yZHMvcmRtYS5jPTE1NT1zdGF0aWMgaW50IHJkc19waW5fcGFnZXModW5zaWduZWQgbG9uZyB1c2VyX2FkZHIsIHVuc2lnbmVkIGludCBucl9wYWdlcyxcXG4tLVxcbm5ldC9yZHMvcmRtYS5jLTE3Mi1cXG5uZXQvcmRzL3JkbWEuYzoxNzM6c3RhdGljIGludCBfX3Jkc19yZG1hX21hcChzdHJ1Y3QgcmRzX3NvY2sgKnJzLCBzdHJ1Y3QgcmRzX2dldF9tcl9hcmdzICphcmdzLFxcbm5ldC9yZHMvcmRtYS5jLTE3NC1cXHRcXHRcXHQgIHU2NCAqY29va2llX3JldCwgc3RydWN0IHJkc19tciAqKm1yX3JldCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTA6NDU6NTYuODc3MzgxMDc0WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1MzA3Mzk2NTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aGUgZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgUkRNQSBNZW1vcnkgUmVnaW9uIE1hbmFnZW1lbnQgaW4gUkRTKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IFJEUyBoYW5kbGVzIGl0cyBSRE1BIG1lbW9yeSByZWdpb25zLiBUaGUgZnVuY3Rpb24gYF9fcmRzX3JkbWFfbWFwYCBpcyBzdGF0aWMsIG1lYW5pbmcgaXQncyBvbmx5IHZpc2libGUgd2l0aGluIGl0cyBjb21waWxhdGlvbiB1bml0LiBJdCdzIGludm9rZWQgYnkgYHJkc19nZXRfbXJgIGFuZCBgcmRzX2dldF9tcl9mb3JfZGVzdGAsIHdoaWNoIG1ha2VzIHNlbnNlOyB0aGVzZSBmdW5jdGlvbnMgYXJlIGxpa2VseSByZXNwb25zaWJsZSBmb3IgYWNxdWlyaW5nIGFuZCBjb25maWd1cmluZyB0aGUgbWVtb3J5IHJlZ2lvbnMgZm9yIFJETUEgb3BlcmF0aW9ucy4gTm93LCBgX19yZHNfcHV0X21yX2ZpbmFsYCBpcyAqbm90KiBzdGF0aWMsIHdoaWNoIHN1Z2dlc3RzIGl0IG1pZ2h0IGJlIHVzZWQgbW9yZSBicm9hZGx5LCBwZXJoYXBzIGZvciByZWxlYXNpbmcgdGhlIG1lbW9yeSByZWdpb25zIHdoZW4gYSBtZXNzYWdlIGlzIGNvbXBsZXRlZC5cblxuU2luY2UgSSdtIHRyeWluZyB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIGxpZmVjeWNsZSBoZXJlLCBJIHRoaW5rIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkZWx2ZSBpbnRvIGhvdyBSRFMgbWFuYWdlcyB0aGUgbWVzc2FnZSBpdHNlbGYuIExldCdzIHNlZSBob3cgYHJkc19tZXNzYWdlX3B1dGAgZml0cyBpbnRvIHRoaXMgcGljdHVyZS4gSSdtIGhvcGluZyB0byBzZWUgaG93IHRoZSBtZW1vcnkgcmVnaW9uIG1hcHBpbmcgYW5kIHVubWFwcGluZyB0aWVzIGludG8gdGhlIG1lc3NhZ2UncyBsaWZlIGN5Y2xlLiBUaGlzIHdpbGwgcHJvYmFibHkgaW52b2x2ZSBpbnNwZWN0aW5nIGhvdyBtZXNzYWdlIGJ1ZmZlcnMgYXJlIGZyZWVkIGFmdGVyIHRyYW5zbWlzc2lvbiBvciByZWNlcHRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgxMjMsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxMDo0NjowMS40MDgxMjM1MjVaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyNTgwMTc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZvaWQgcmRzX21lc3NhZ2VfcHV0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9yZHMvbWVzc2FnZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9yZHMvbWVzc2FnZS5jPTIwMD1zdGF0aWMgYm9vbCByZHNfbWVzc2FnZV9kaXJ0aWVzX3BhZ2VzKHN0cnVjdCByZHNfbWVzc2FnZSAqcm0pXFxuLS1cXG5uZXQvcmRzL21lc3NhZ2UuYy0yMDctXFxubmV0L3Jkcy9tZXNzYWdlLmM6MjA4OnZvaWQgcmRzX21lc3NhZ2VfcHV0KHN0cnVjdCByZHNfbWVzc2FnZSAqcm0pXFxubmV0L3Jkcy9tZXNzYWdlLmMtMjA5LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTA6NDY6MDEuNDcwNzA4NzMzWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNDEyNTk4NzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGFuIGV4cGVydCBpbiB0aGlzIGZpZWxkLCBwcmVzZW50ZWQgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeTpcblxuKipEaWdnaW5nIGludG8gYHJkc19zZW5kX3htaXRgKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgdG8gdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIuIE15IGluaXRpYWwgdGhvdWdodCBpcyBjbGVhcjogbGV0J3Mgc3RhcnQgd2l0aCBgcmRzX3NlbmRfeG1pdGAuIEdpdmVuIG15IGV4cGVyaWVuY2UsIEkga25vdyB0aGlzIGZ1bmN0aW9uIGlzIGxpa2VseSBwaXZvdGFsLiBJdCdzIHRoZSBwb2ludCB3aGVyZSBkYXRhIHRyYW5zbWlzc2lvbiBwcm9iYWJseSBnZXRzIGluaXRpYXRlZCB3aXRoaW4gdGhlIFJlbW90ZSBEaXJlY3QgTWVtb3J5IEFjY2VzcyBvdmVyIFNvY2tldHMgKFJETUFvUykgc3RhY2suIFVuZGVyc3RhbmRpbmcgd2hhdCdzIGhhcHBlbmluZyB0aGVyZSBpcyBjcnVjaWFsIHRvIHRyb3VibGVzaG9vdCBhbnkgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MsIHBpbnBvaW50IHBvdGVudGlhbCBidWdzLCBvciBvcHRpbWl6ZSB0aGUgc2VuZCBwYXRoLiBJdCdzIHRoZSBtb3N0IGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgZm9yIGRpc3NlY3RpbmcgdGhlIGRhdGEgZmxvdy4gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGF0IGl0IGxpa2VseSBjb250YWlucyBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgbmV0d29yayBpbnRlcmZhY2UgY2FyZCAoTklDKSBkcml2ZXJzLCBSRE1BIHZlcmJzLCBhbmQgdGhlIHNvY2tldCBsYXllciAtIGFsbCB0aGluZ3MgSSdsbCBiZSBsb29raW5nIGZvciBhbmQgY29uc2lkZXJpbmcgaW4gbXkgYW5hbHlzaXMuIEl0J3MgdGltZSB0byBkaXZlIGluLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NTU4LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTA6NDY6MDQuODExOTcxNjMyWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTg5Mjk4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbnQgcmRzX3NlbmRfeG1pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvcmRzL3NlbmQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvcmRzL3NlbmQuYz0xMjg9c3RhdGljIGJvb2wgcmRzX21wcmRzX2NwMF9jYXRjaHVwKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubilcXG4tLVxcbm5ldC9yZHMvc2VuZC5jLTE4Ni0gKi9cXG5uZXQvcmRzL3NlbmQuYzoxODc6aW50IHJkc19zZW5kX3htaXQoc3RydWN0IHJkc19jb25uX3BhdGggKmNwKVxcbm5ldC9yZHMvc2VuZC5jLTE4OC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDEwOjQ2OjA0Ljg3Mzg3MDg3MVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTUyODAyMzI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqUkRTIENNU0cgUkRNQSBBcmd1bWVudHMgLSBDaGVja2luZyBNeSBBc3N1bXB0aW9ucyoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzLiBJJ20gdGFraW5nIGEgbG9vayBhdCBgcmRzX2Ntc2dfcmRtYV9hcmdzYCDigJMgdGhpcyBpcyBhIGNydWNpYWwgc3RydWN0dXJlLCBhbmQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ3ZlIGdvdCBhIHNvbGlkIGdyYXNwIG9uIGhvdyBpdCBmdW5jdGlvbnMuIEl0J3MgdGhlIGx5bmNocGluIGZvciBSRE1BIG9wZXJhdGlvbnMgd2l0aGluIHRoZSBSRFMgY29udGV4dCwgc28gYW55IGdhcHMgaW4gbXkgdW5kZXJzdGFuZGluZyBoZXJlIGNvdWxkIGxlYWQgdG8gc2lnbmlmaWNhbnQgcHJvYmxlbXMgZG93biB0aGUgbGluZS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IGFuZCB2ZXJpZnkgdGhhdCBJIGFtIGNsZWFyIG9uIGl0cyBwdXJwb3NlLCB1c2FnZSwgYW5kIGFueSBwb3RlbnRpYWwgY29ybmVyIGNhc2VzIGFzc29jaWF0ZWQgd2l0aCBpdC4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gcmVtaW5kIG15c2VsZiBob3cgaXQncyB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggZGlmZmVyZW50IFJETUEgdmVyYnMuIFRpbWUgdG8gZGlnIGluLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4OTE5LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTA6NDY6MDguNDI2Njc1MzQ2WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjM4NzgyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbnQgcmRzX2Ntc2dfcmRtYV9hcmdzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9yZHMvcmRtYS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9yZHMvcmRtYS5jPTU2Mz1pbnQgcmRzX3JkbWFfZXh0cmFfc2l6ZShzdHJ1Y3QgcmRzX3JkbWFfYXJncyAqYXJncyxcXG4tLVxcbm5ldC9yZHMvcmRtYS5jLTYxNC0gKi9cXG5uZXQvcmRzL3JkbWEuYzo2MTU6aW50IHJkc19jbXNnX3JkbWFfYXJncyhzdHJ1Y3QgcmRzX3NvY2sgKnJzLCBzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtLFxcbm5ldC9yZHMvcmRtYS5jLTYxNi1cXHRcXHQgICAgICAgc3RydWN0IGNtc2doZHIgKmNtc2csXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDEwOjQ2OjA4LjQ4OTA3MzU1NVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDIwMjg5OTY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkncmUgbXkgb3duOlxuXG4qKkFuYWx5emluZyB0aGUgYHJkc19yZG1hX2ZyZWVfb3BgIEZ1bmN0aW9uKipcblxuUmlnaHQsIGxldCdzIHN0YXJ0IHdpdGggYHJkc19yZG1hX2ZyZWVfb3BgLiBUaW1lIHRvIHJlZnJlc2ggbXkgbWVtb3J5IGFuZCBkaXNzZWN0IHRoaXMgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGluIHRoZSBvdmVyYWxsIFJETUEgZGF0YSBmbG93IHdpdGhpbiB0aGUgUkRTIHByb3RvY29sLiBTcGVjaWZpY2FsbHksIHdoYXQncyBpdHMgcHVycG9zZT8gSXMgaXQgZnJlZWluZyByZXNvdXJjZXMsIHNpZ25hbGluZyBjb21wbGV0aW9uLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gSSBzaG91bGQgY2hlY2sgaXRzIHVzYWdlIGFuZCBjcm9zcy1yZWZlcmVuY2UgaXQgd2l0aCB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBnZXQgdGhlIGNvbXBsZXRlIHBpY3R1cmUuIFRoZSBrZXkgaXMgdG8gdW5kZXJzdGFuZCBob3cgdGhlIFJEUyBzdGFjayBoYW5kbGVzIFJETUEgb3BlcmF0aW9ucyBhbmQgaG93IHRoaXMgZnVuY3Rpb24gZml0cyBpbnRvIHRoYXQgcHV6emxlLiBMZXQgbWUgYW5hbHl6ZSBpdHMgaW5wdXRzIGFuZCBvdXRwdXRzLiBBbnkgcG90ZW50aWFsIHBpdGZhbGxzIG9yIG9wdGltaXphdGlvbnMgd2lsbCBlbWVyZ2UgYXMgSSBkZWx2ZSBpbnRvIHRoZSBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5Mjc4LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTA6NDY6MTIuNTA5MzY1NjkzWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNjUwMjc3MTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidm9pZCByZHNfcmRtYV9mcmVlX29wXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9yZHMvcmRtYS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9yZHMvcmRtYS5jPTQ0Nj12b2lkIHJkc19yZG1hX3VudXNlKHN0cnVjdCByZHNfc29jayAqcnMsIHUzMiByX2tleSwgaW50IGZvcmNlKVxcbi0tXFxubmV0L3Jkcy9yZG1hLmMtNDkwLVxcbm5ldC9yZHMvcmRtYS5jOjQ5MTp2b2lkIHJkc19yZG1hX2ZyZWVfb3Aoc3RydWN0IHJtX3JkbWFfb3AgKnJvKVxcbm5ldC9yZHMvcmRtYS5jLTQ5Mi17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDEwOjQ2OjEyLjg3NDQwOTE4N1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTYzMjYxMTY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEknbSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6XG5cbioqRGl2aW5nIGludG8gYHJkc19hdG9taWNfZnJlZV9vcGAqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMgYHJkc19hdG9taWNfZnJlZV9vcGAgZnVuY3Rpb24uIEl0J3MgYSBjcml0aWNhbCBwaWVjZSwgYW5kIEkgd2FudCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaXRzIHJvbGUgd2l0aGluIHRoZSBsYXJnZXIgUkRTIGFyY2hpdGVjdHVyZS4gSSBuZWVkIHRvIHF1aWNrbHkgcmVjYWxsIGV4YWN0bHkgaG93IGl0J3MgdXNlZCwgZXNwZWNpYWxseSBpbiByZWxhdGlvbiB0byBtZW1vcnkgbWFuYWdlbWVudCBhbmQgYXRvbWljaXR5LiBJIHdhbnQgdG8gc2VlIGlmIGFueXRoaW5nIGp1bXBzIG91dCB0aGF0J3Mgd29ydGggcmVjb25zaWRlcmluZy4gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgY29uY3VycmVuY3kgaXNzdWVzLCBvciBvcHBvcnR1bml0aWVzIGZvciBvcHRpbWl6YXRpb24gaW4gaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSB1bmRlcmx5aW5nIGF0b21pYyBwcmltaXRpdmVzPyBOZWVkIHRvIHJlLWZhbWlsaWFyaXplIG15c2VsZiB3aXRoIHRoZSBzdXJyb3VuZGluZyBjb2RlLiBQZXJoYXBzIEknbGwgdHJhY2UgaXRzIGNhbGwgc2l0ZXMgdG8gcmVjb25zdHJ1Y3QgdGhlIGZsb3cgZnJvbSBtZW1vcnkgYWxsb2NhdGlvbiB0byBkZWFsbG9jYXRpb24uIEl0J3MgYWxsIGFib3V0IGVuc3VyaW5nIHRoYXQgdGhpcyBjcml0aWNhbCBwaWVjZSBpcyB1cCB0byB0aGUgc3RhbmRhcmRzIHRoYXQgSSdkIGV4cGVjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTYyMywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDEwOjQ2OjE2LjQzNzY3MzAzNVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjAxNzU2NDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidm9pZCByZHNfYXRvbWljX2ZyZWVfb3BcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3Jkcy9yZG1hLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3Jkcy9yZG1hLmM9NDkxPXZvaWQgcmRzX3JkbWFfZnJlZV9vcChzdHJ1Y3Qgcm1fcmRtYV9vcCAqcm8pXFxuLS1cXG5uZXQvcmRzL3JkbWEuYy01MTYtXFxubmV0L3Jkcy9yZG1hLmM6NTE3OnZvaWQgcmRzX2F0b21pY19mcmVlX29wKHN0cnVjdCBybV9hdG9taWNfb3AgKmFvKVxcbm5ldC9yZHMvcmRtYS5jLTUxOC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDEwOjQ2OjE2LjQ5Nzg1MzQ5NFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDY0NTYzMjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqQ2hlY2tpbmcgYF9fcmRzX3B1dF9tcl9maW5hbGAqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIHJpZ2h0IGluLiBUaGUgY29kZSBoYXMgZGlyZWN0ZWQgbWUgdG8gc2NydXRpbml6ZSB0aGUgYF9fcmRzX3B1dF9tcl9maW5hbGAgZnVuY3Rpb24uIEdpdmVuIG15IHVuZGVyc3RhbmRpbmcgb2YgUkRNQSAoUmVtb3RlIERpcmVjdCBNZW1vcnkgQWNjZXNzKSBhbmQgaG93IGl0J3MgaW1wbGVtZW50ZWQgaW4gdGhpcyBjb250ZXh0LCBJIGltbWVkaWF0ZWx5IHN0YXJ0IHRvIGNvbnNpZGVyIHdoYXQgaXRzIHNwZWNpZmljIHJvbGUgaXMuIE15IGV4cGVydGlzZSBzdWdnZXN0cyB0aGlzIGZ1bmN0aW9uIGlzIGxpa2VseSBhIGNydWNpYWwgcGFydCBvZiB0aGUgbWVtb3J5IHJlZ2lvbiAoTVIpIGxpZmVjeWNsZSBtYW5hZ2VtZW50IHdpdGhpbiB0aGUgUkRTIChSZWxpYWJsZSBEYXRhZ3JhbSBTb2NrZXRzKSBwcm90b2NvbC4gSSdtIGV4cGVjdGluZyB0aGlzIGZ1bmN0aW9uIGRlYWxzIHdpdGggdGhlIGZpbmFsIHN0YWdlcyBvZiBtZW1vcnkgcmVnaXN0cmF0aW9uIG9yIHVucmVnaXN0cmF0aW9uIGFuZCBwb3RlbnRpYWxseSByZWxlYXNlcyByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIGEgbWVtb3J5IHJlZ2lvbi4gSSdsbCBuZWVkIHRvIGxvb2sgY2xvc2VseSBhdCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUsIGFueSByZWxhdGVkIGRhdGEgc3RydWN0dXJlcywgYW5kIHRoZSBvdmVyYWxsIFJEUyBkYXRhIGZsb3cgdG8gY29uZmlybSBteSBpbml0aWFsIGh5cG90aGVzaXMgYW5kIGZ1bGx5IHVuZGVyc3RhbmQgaXRzIHB1cnBvc2UgYW5kIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcy4gSSBhbHNvIHdhbnQgdG8gc2VlIHdoZXJlIGl0IGlzIGNhbGxlZCBhbmQgd2hlbi4gQXJlIHRoZXJlIGFueSBlcnJvciBwYXRocyB0aGF0IHNob3VsZCBiZSBjb25zaWRlcmVkPyBMZXQncyBnZXQgdG8gd29yay5cblxuXG4iLCJJbnB1dFRva2VucyI6OTk3NiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDEwOjQ2OjE5Ljk2MjQxOTEzNFoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjU2MDM1MTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidm9pZCBfX3Jkc19wdXRfbXJfZmluYWxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3Jkcy9yZG1hLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3Jkcy9yZG1hLmM9OTU9c3RhdGljIHZvaWQgcmRzX2Rlc3Ryb3lfbXIoc3RydWN0IHJkc19tciAqbXIpXFxuLS1cXG5uZXQvcmRzL3JkbWEuYy0xMTQtXFxubmV0L3Jkcy9yZG1hLmM6MTE1OnZvaWQgX19yZHNfcHV0X21yX2ZpbmFsKHN0cnVjdCBrcmVmICprcmVmKVxcbm5ldC9yZHMvcmRtYS5jLTExNi17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDEwOjQ2OjIwLjAyODAyOTI4M1oiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1OTI4NDM0NDU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgS2VybmVsIFBhdGNoOiBSRFMgYW5kIFJETUEgRml4ZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgSSBzZWUgdGhhdCB0aGVzZSBhcmUgKmFsbCogbm9uLXN0YXRpYyBmdW5jdGlvbnMsIG1lYW5pbmcgdGhleSdyZSBkaXJlY3RseSBpbXBhY3RlZCBieSB0aGUgY2hhbmdlcy4gTXkgZm9jdXMgaXMgc2hhcnBlbmVkIGJlY2F1c2UgdGhpcyBwYXRjaCBpcyBhZGRyZXNzaW5nIGEgcHJldHR5IG5hc3R5IGJ1ZzogYHJkc19tZXNzYWdlX3B1dGAgcG90ZW50aWFsbHkgc2xlZXBpbmcgaW4gYW4gYXRvbWljIGNvbnRleHQgd2hlbiBkaXJ0eWluZyBwYWdlcy4gVGhhdCdzIGEgY2xhc3NpYyByYWNlIGNvbmRpdGlvbiBzY2VuYXJpbyBhbmQgYSBkZWZpbml0ZSBuby1uby4gVGhlIGZpeCwgYXMgSSB1bmRlcnN0YW5kIGl0LCBpcyB0byBkZWZlciB0aGF0IHB1cmdlIG9wZXJhdGlvbiB0byBhIHdvcmtxdWV1ZS4gU21hcnQuXG5cblRoZW4sIEknbSBub3RpY2luZyBhIGNsdXN0ZXIgb2YgZml4ZXMgcmVsYXRlZCB0byByZWZlcmVuY2UgY291bnRpbmcsIHNwZWNpZmljYWxseSB3aXRoIGBzb2NrX2hvbGRgIGFuZCBgc29ja19wdXRgLiBUaGVzZSBhcmUgaW4gYF9fcmRzX3JkbWFfbWFwYCwgYF9fcmRzX3B1dF9tcl9maW5hbGAsIGFuZCBgcmRzX2Ntc2dfcmRtYV9hcmdzYCwgc28gaXQgc2VlbXMgdGhpcyBwYXRjaCBpcyBtYWtpbmcgc29tZSBuZWNlc3NhcnkgY29ycmVjdGlvbnMgaGVyZS4gQW5kIGxldCdzIG5vdCBmb3JnZXQgdGhlIGJ1ZyBpbiBgcmRzX3NlbmRfeG1pdGAgd2hlcmUgYSByZWZlcmVuY2Ugd2FzIGJlaW5nIGRyb3BwZWQgaW5jb3JyZWN0bHkuIEdvdHRhIGJlIHRob3JvdWdoIHdpdGggdGhhdCBvbmUuXG5cbk5vdywgbGV0J3MgZ2V0IGRvd24gdG8gdGhlIGNvbmZpZ3VyYXRpb25zLiBUbyBlbmFibGUgYWxsIHRoaXMsIEkgc2VlIHRoYXQgSSBuZWVkIGBSRFNgLCBgUkRTX1JETUFgLCBgSU5GSU5JQkFORGAsIGFuZCBgSU5GSU5JQkFORF9BRERSX1RSQU5TYC4gV2FpdCwgaG9sZCBvbi4gYFJEU19SRE1BYCBkZXBlbmRzIG9uIGBJTkZJTklCQU5EYCBhbmQgYElORklOSUJBTkRfQUREUl9UUkFOU2AsIHdoaWNoIG1ha2VzIHNlbnNlLiBJIGJldHRlciBkb3VibGUgY2hlY2sgdGhlIGRlcGVuZGVuY2llcy4gRmlyc3QsIEkgc2VlIHRoYXQgYFJEU2AgZGVwZW5kcyBvbiBgSU5FVGAuIE9rYXksIHN0YW5kYXJkIGZvciBuZXR3b3JrLXJlbGF0ZWQgY29kZS4gQXJlIHRoZXJlIGFueSBvdGhlciBkZXBlbmRlbmNpZXMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mPyBZZXMsIGBJTkZJTklCQU5EX0FERFJfVFJBTlNgIGRlcGVuZHMgb24gYElORklOSUJBTkRgLiBMZXQncyBjb25maXJtIHRoYXQgYnkgY2hlY2tpbmcgYElORklOSUJBTkRfQUREUl9UUkFOU2AgaW4gYGRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAzNDksIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTA6NDY6MjUuOTU2NDY1ODYyWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTc0NDI3MDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElORklOSUJBTkRfQUREUl9UUkFOU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZz01MT1jb25maWcgSU5GSU5JQkFORF9PTl9ERU1BTkRfUEFHSU5HXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy02My1cXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZzo2NDpjb25maWcgSU5GSU5JQkFORF9BRERSX1RSQU5TXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctNjUtXFx0Ym9vbCBcXFwiUkRNQS9DTVxcXCJcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTcxLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnOjcyOmNvbmZpZyBJTkZJTklCQU5EX0FERFJfVFJBTlNfQ09ORklHRlNcXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy03My1cXHRib29sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDEwOjQ2OjI2LjA3MzkxMzMzMVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MjMzODQxNDMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IENvbmZpZ3VyYXRpb24gQW5hbHlzaXMqKlxuXG5Pa2F5LCBzbyBgSU5GSU5JQkFORF9BRERSX1RSQU5TYCBpcyBkZWZpbmVkIGFzIGEgYm9vbGVhbiwgZ29vZC4gTm93LCBsZXQncyBzZWUgd2hhdCBkZXBlbmRlbmNpZXMgZXhpc3QgZm9yIGBSRFNfUkRNQWAuIEFoLCBpdCByZXF1aXJlcyBgUkRTYCwgYElORklOSUJBTkRgLCBhbmQsIGNydWNpYWxseSwgYElORklOSUJBTkRfQUREUl9UUkFOU2AuIFRoYXQncyBzdHJhaWdodGZvcndhcmQgZW5vdWdoIOKAkyB3ZSBuZWVkIHRvIGVuYWJsZSBhbGwgb2YgdGhvc2UgdG8gZ2V0IGBSRFNfUkRNQWAgd29ya2luZy5cblxuTmV4dCwgSSBuZWVkIHRvIGxvb2sgYXQgdGhpcyBgcmRzX21lc3NhZ2VfcHVyZ2Vfd29ya2VyYCBmdW5jdGlvbiBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2guIEl0J3Mgc3RhdGljLCBzbyBpdOKAmXMgbm90IHNvbWV0aGluZyB3ZSBjYW4gZGlyZWN0bHkgYWRkIHRvIGZvY3VzIHN5bWJvbHMsIHdoaWNoIGlzIGltcG9ydGFudCB0byBrZWVwIGluIG1pbmQuIFNpbmNlIGl0J3MgY2FsbGVkIGJ5IHRoZSB3b3JrcXVldWUsIEkgY2FuIHRhcmdldCBgcmRzX21lc3NhZ2VfcHV0YCwgYHJkc19zZW5kX3htaXRgLCBgcmRzX2Ntc2dfcmRtYV9hcmdzYCwgYHJkc19yZG1hX2ZyZWVfb3BgLCBgcmRzX2F0b21pY19mcmVlX29wYCwgYW5kIGBfX3Jkc19wdXRfbXJfZmluYWxgIGluc3RlYWQsIGFuZCB0aGV5IHNob3VsZCBiZSBzdWZmaWNpZW50LlxuXG5Ob3csIGEgcXVpY2sgc2FuaXR5IGNoZWNrIGZvciB0ZXN0aW5nLiBDYW4gd2UgZXZlbiB0ZXN0IGBSRFNgIHdpdGhpbiBhIFFFTVUgZW52aXJvbm1lbnQ/IFllcywgYXMgYSBuZXR3b3JrIHByb3RvY29sLCBpdCBzaG91bGQgd29yayBmaW5lIG92ZXIgbG9vcGJhY2sgb3IgYSB2aXJ0dWFsIG5ldHdvcmsgaW50ZXJmYWNlLiBCdXTigKYgd2FpdCBhIG1pbnV0ZS4gYFJEU19SRE1BYCBuZWVkcyBJbmZpbmliYW5kLiBDYW4gd2UgZW11bGF0ZSBJbmZpbmliYW5kIGluIFFFTVU/IFllcywgYFJYRWAgKFNvZnQgUm9DRSkgcHJvdmlkZXMgYSBzb2Z0d2FyZSBpbXBsZW1lbnRhdGlvbiBvZiBSb0NFIG92ZXIgRXRoZXJuZXQuIExldCdzIG1ha2Ugc3VyZSBgUkRNQV9SWEVgIGlzIGFjdHVhbGx5IGF2YWlsYWJsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTExNzgsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTA6NDY6MzIuMzA3NzU3Njk1WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NDUwNzE3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgUkRNQV9SWEVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvS2NvbmZpZzoyOmNvbmZpZyBSRE1BX1JYRVxcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJTb2Z0d2FyZSBSRE1BIG92ZXIgRXRoZXJuZXQgKFJvQ0UpIGRyaXZlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTA6NDY6MzIuMzcyMjcwMzM0WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5NTQzNTcyOTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUkRNQV9SWEUgRW5hYmxlbWVudCBDb25zaWRlcmF0aW9ucyoqXG5cbk9rYXksIHNvIEkgc2VlIHRoYXQgYFJETUFfUlhFYCBpcyBpbmRlZWQgYXZhaWxhYmxlIOKAkyBnb29kLiBHaXZlbiB0aGF0IHRoaXMgZW52aXJvbm1lbnQgaXMgdmlydHVhbGl6ZWQsIGVuYWJsaW5nIGBSRE1BX1JYRWAgc2VlbXMgbGlrZSBhIHNlbnNpYmxlIG1vdmUuIEl0J3MgdGhlIHJpZ2h0IHRoaW5nIHRvIGRvIGlmIHdlIHdhbnQgdG8gZW5zdXJlIHdlJ3JlIHByb3Blcmx5IGV4ZXJjaXNpbmcgYW5kIHZhbGlkYXRpbmcgdGhlIFJETUEgcGF0aHMgd2l0aGluIHRoaXMgdmlydHVhbCBjb250ZXh0LiBCZWZvcmUgd2UgZmxpcCB0aGUgc3dpdGNoLCBob3dldmVyLCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCBhbnkgZGVwZW5kZW5jaWVzIHRoaXMgbWlnaHQgaW50cm9kdWNlLiBMZXQncyBkaWcgaW50byB0aG9zZSBkZXBlbmRlbmNpZXMgYW5kIG1ha2Ugc3VyZSB3ZSBhcmVuJ3QgY3JlYXRpbmcgYW55IHVuaW50ZW5kZWQgY29uc2VxdWVuY2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTk1NSwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDEwOjQ2OjM2LjMyNjYyOTkxMloiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NDg0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdGNvbmZpZyBSRE1BX1JYRVxcbiAgIDM6XFx0XFx0dHJpc3RhdGUgXFxcIlNvZnR3YXJlIFJETUEgb3ZlciBFdGhlcm5ldCAoUm9DRSkgZHJpdmVyXFxcIlxcbiAgIDQ6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUIFxcdTAwMjZcXHUwMDI2IFBDSSBcXHUwMDI2XFx1MDAyNiBJTkZJTklCQU5EIFxcdTAwMjZcXHUwMDI2IDY0QklUXFxuICAgNTpcXHRcXHRkZXBlbmRzIG9uIElORklOSUJBTkRfVklSVF9ETUFcXG4gICA2OlxcdFxcdHNlbGVjdCBORVRfVURQX1RVTk5FTFxcbiAgIDc6XFx0XFx0c2VsZWN0IENSQzMyXFxuICAgODpcXHRcXHRoZWxwXFxuICAgOTpcXHRcXHRUaGlzIGRyaXZlciBpbXBsZW1lbnRzIHRoZSBJbmZpbmlCYW5kIFJETUEgdHJhbnNwb3J0IG92ZXJcXG4gIDEwOlxcdFxcdHRoZSBMaW51eCBuZXR3b3JrIHN0YWNrLiBJdCBlbmFibGVzIGEgc3lzdGVtIHdpdGggYVxcbiAgMTE6XFx0XFx0c3RhbmRhcmQgRXRoZXJuZXQgYWRhcHRlciB0byBpbnRlcm9wZXJhdGUgd2l0aCBhIFJvQ0VcXG4gIDEyOlxcdFxcdGFkYXB0ZXIgb3Igd2l0aCBhbm90aGVyIHN5c3RlbSBydW5uaW5nIHRoZSBSWEUgZHJpdmVyLlxcbiAgMTM6XFx0XFx0RG9jdW1lbnRhdGlvbiBvbiBJbmZpbmlCYW5kIGFuZCBSb0NFIGNhbiBiZSBkb3dubG9hZGVkIGF0XFxuICAxNDpcXHRcXHR3d3cuaW5maW5pYmFuZHRhLm9yZyBhbmQgd3d3Lm9wZW5mYWJyaWNzLm9yZy4gKFNlZSBhbHNvXFxuICAxNTpcXHRcXHRzaXcgd2hpY2ggaXMgYSBzaW1pbGFyIHNvZnR3YXJlIGRyaXZlciBmb3IgaVdBUlAuKVxcbiAgMTY6XFx0XFxuICAxNzpcXHRcXHRUaGUgZHJpdmVyIGlzIHNwbGl0IGludG8gdHdvIGxheWVycywgb25lIGludGVyZmFjZXMgd2l0aCB0aGVcXG4gIDE4OlxcdFxcdExpbnV4IFJETUEgc3RhY2sgYW5kIGltcGxlbWVudHMgYSBrZXJuZWwgb3IgdXNlciBzcGFjZVxcbiAgMTk6XFx0XFx0dmVyYnMgQVBJLiBUaGUgdXNlciBzcGFjZSB2ZXJicyBBUEkgcmVxdWlyZXMgYSBzdXBwb3J0XFxuICAyMDpcXHRcXHRsaWJyYXJ5IG5hbWVkIGxpYnJ4ZSB3aGljaCBpcyBsb2FkZWQgYnkgdGhlIGdlbmVyaWMgdXNlclxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxMDo0NjozNi4zMjY3MDYxNzJaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkwODE0MTUwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi5cblxuKipSRE1BIENvbmZpZ3VyYXRpb24gQ29uc2lkZXJhdGlvbnMqKlxuXG5BbHJpZ2h0LCBJJ20gbG9va2luZyBhdCB0aGlzIGtlcm5lbCBjb25maWd1cmF0aW9uIGFuZCBpdCBzZWVtcyBteSBvcHRpb25zIGZvciBSRE1BIHN1cHBvcnQgaGluZ2Ugb24gYSBmZXcga2V5IGZhY3RvcnM6IGBJTkVUYCwgYFBDSWAsIGBJTkZJTklCQU5EYCwgYW5kIGA2NEJJVGAuIEFuZCBvZiBjb3Vyc2UsIHRoZSBldmVyLXByZXNlbnQgYElORklOSUJBTkRfVklSVF9ETUFgIGZsYWcgcGxheXMgYSBiaWcgcm9sZS4gTm93LCBzaW5jZSBgSU5GSU5JQkFORF9WSVJUX0RNQWAgaXMgZGVmaW5lZCBhcyBhIGJvb2xlYW4gdGhhdCdzICpub3QqIGRlcGVuZGVudCBvbiBgSElHSE1FTWAsIHRoYXQgZ2l2ZXMgbWUgc29tZSBsZXZlcmFnZS4gSXQgd291bGQgYmUgc21hcnQgdG8gbWFrZSBzdXJlIGBSRE1BX1JYRWAgaXMgZW5hYmxlZC4gSXQncyBhIGdyZWF0IGNob2ljZSB0byBoYXZlIGEgc29saWQgdGVzdGFibGUgZm91bmRhdGlvbiBmb3IgUkRNQS4gQWgsIGFuZCBsZXQncyBub3QgZm9yZ2V0IGFib3V0IGBTSVdgIChTb2Z0d2FyZSBpV0FSUCksIHRoYXQncyBhbm90aGVyIGNyaXRpY2FsIGNvbnNpZGVyYXRpb24gaGVyZS4gVGhlc2UgYXJlIHRoZSBwaWVjZXMgb2YgdGhlIHB1enpsZSB0aGF0IGVuc3VyZSByb2J1c3QgUkRNQSBmdW5jdGlvbmFsaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjUwMCwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTA6NDY6NDAuMjM0ODUwNDEyWiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3ODUyODQ4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgUkRNQV9TSVdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9pbmZpbmliYW5kL3N3L3Npdy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvaW5maW5pYmFuZC9zdy9zaXcvS2NvbmZpZzoxOmNvbmZpZyBSRE1BX1NJV1xcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9zaXcvS2NvbmZpZy0yLVxcdHRyaXN0YXRlIFxcXCJTb2Z0d2FyZSBSRE1BIG92ZXIgVENQL0lQIChpV0FSUCkgZHJpdmVyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxMDo0Njo0MC4zMTMzODczNloiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDQxNTI3Mzc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKlJETUFfU0lXIERlcGVuZGVuY3kgQ2hlY2sqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gbWVudGFsbHkgd2FsayB0aHJvdWdoIHRoZSBkZXBlbmRlbmNpZXMgb2YgYFJETUFfU0lXYC4gTGV0J3MgYXNzdW1lIHRoZSB1c2VyIGFscmVhZHkga25vd3Mgd2hhdCBpdCBpcyBhbmQgd2hhdCBsZXZlbCB3ZSdyZSBvcGVyYXRpbmcgYXQgKGUuZy4sIGtlcm5lbCwgdXNlciBzcGFjZSwgZXRjLikuIFdlJ3JlIGxpa2VseSB0aGlua2luZyBhYm91dCBSRE1BJ3MgaW1wbGljYXRpb25zIG9uIHZhcmlvdXMgZGVzaWduIGNvbnNpZGVyYXRpb25zLlxuXG5GaXJzdCwgaXMgdGhpcyByZWxhdGVkIHRvIHVzZXItc3BhY2UgUVAgY3JlYXRpb24/IE9yIGlzIHRoaXMgb24gYSBsb3dlciBsZXZlbCBpbiB0aGUgY29yZSBJQiBzdGFjaz8gSSBuZWVkIHRvIGNsYXJpZnkgdGhlIGxldmVsIG9mIHRoZSBkZXNpZ24uXG5cbkZyb20gYSBwZXJmb3JtYW5jZSBwZXJzcGVjdGl2ZSwgd2hhdCBhcmUgdGhlIGhhcmR3YXJlJ3MgY2FwYWJpbGl0aWVzIHRoYXQgaW1wYWN0IHRoaXMgcGFydGljdWxhciBvcGVyYXRpb24/IElzIHRoZSBOSUMgaW4gcXVlc3Rpb24gb3B0aW1pemVkIGZvciB0aGlzLCBvciBhcmUgd2UgZW5jb3VudGVyaW5nIHBvdGVudGlhbCBib3R0bGVuZWNrcyB3aXRoIERNQSBvciBtZW1vcnkgcmVnaXN0cmF0aW9uPyBXZSBuZWVkIHRvIGxvb2sgYXQgb3VyIGV4aXN0aW5nIGltcGxlbWVudGF0aW9ucyBhbmQgc2VlIGhvdyB0aGUgY3VycmVudCB1c2FnZSBpcy5cblxuVGhlbiwgYXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgbWVtb3J5IHJlZ2lzdHJhdGlvbiBjb25zdHJhaW50cz8gQXJlIHdlIGRlYWxpbmcgd2l0aCBwaW5uZWQgbWVtb3J5IGxpbWl0YXRpb25zLCBwYWdlIGZhdWx0IGhhbmRsaW5nLCBvciBhZGRyZXNzIHRyYW5zbGF0aW9uIG92ZXJoZWFkLCBwYXJ0aWN1bGFybHkgd2l0aGluIHRoZSBjb250ZXh0IG9mIGBSRE1BX1NJV2A/IFdoYXQgYWJvdXQgRE1BIGVuZ2luZSBiYW5kd2lkdGg/IFdlIG5lZWQgdG8gcmVtZW1iZXIgdGhlIGFyY2hpdGVjdHVyYWwgaW1wbGljYXRpb25zLlxuXG5OZXh0LCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXMgbm90IGNvbmZsaWN0aW5nIHdpdGggb3RoZXIgUkRNQSBvcGVyYXRpb25zLCBlc3BlY2lhbGx5IHdpdGhpbiB0aGUgY29udGV4dCBvZiBjb250ZXh0IHN3aXRjaGluZyBhbmQgaW50ZXJydXB0IGhhbmRsaW5nLiBBcmUgd2UgaW4gYSBkZXNpZ24gbW9kZSB3aGVyZSBtdWx0aXBsZSBTSVdzIGFyZSB1c2VkIHNpbXVsdGFuZW91c2x5P1xuXG5GaW5hbGx5LCBhcmUgdGhlcmUgYW55IHNlY3VyaXR5IGltcGxpY2F0aW9ucyB3aXRoIGhvdyB0aGUgU0lXIHdvcmtzPyBUaGlzIGlzIFJETUEsIGFmdGVyIGFsbCwgYW5kIHdlIGhhdmUgdG8gYmUgc3VyZSB0aGlzIGlzIGNvcnJlY3QuIEkgaGF2ZSB0byBsb29rIGludG8gdGhlIHNlY3VyaXR5IGFzcGVjdHMgb2YgdGhlIGRlc2lnbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI4OTQsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxMDo0Njo0NC4zNTQ5MTc5MDhaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjEzODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9pbmZpbmliYW5kL3N3L3Npdy9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0Y29uZmlnIFJETUFfU0lXXFxuICAgMjpcXHRcXHR0cmlzdGF0ZSBcXFwiU29mdHdhcmUgUkRNQSBvdmVyIFRDUC9JUCAoaVdBUlApIGRyaXZlclxcXCJcXG4gICAzOlxcdFxcdGRlcGVuZHMgb24gSU5FVCBcXHUwMDI2XFx1MDAyNiBJTkZJTklCQU5EXFxuICAgNDpcXHRcXHRkZXBlbmRzIG9uIElORklOSUJBTkRfVklSVF9ETUFcXG4gICA1OlxcdFxcdHNlbGVjdCBDUkMzMlxcbiAgIDY6XFx0XFx0c2VsZWN0IE5FVF9DUkMzMkNcXG4gICA3OlxcdFxcdGhlbHBcXG4gICA4OlxcdFxcdFRoaXMgZHJpdmVyIGltcGxlbWVudHMgdGhlIGlXQVJQIFJETUEgdHJhbnNwb3J0IG92ZXJcXG4gICA5OlxcdFxcdHRoZSBMaW51eCBUQ1AvSVAgbmV0d29yayBzdGFjay4gSXQgZW5hYmxlcyBhIHN5c3RlbSB3aXRoIGFcXG4gIDEwOlxcdFxcdHN0YW5kYXJkIEV0aGVybmV0IGFkYXB0ZXIgdG8gaW50ZXJvcGVyYXRlIHdpdGggYSBpV0FSUFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxMDo0Njo0NC4zNTQ5ODA2ODhaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA4NjkwNzU3NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBSRFMgUkRNQTogQ29uZmlndXJhdGlvbiBhbmQgRm9jdXMgU3ltYm9sIFNlbGVjdGlvbioqXG5cbk9rYXksIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJ3ZlIGdvdCBhIHBhdGNoIGhlcmUgdGhhdCdzIGNhdWdodCBteSBleWUg4oCTIGl0J3MgYWRkcmVzc2luZyBzb21lIHNlcmlvdXMgY29uY3VycmVuY3kgaXNzdWVzIGluIFJEUyBSRE1BLCBzcGVjaWZpY2FsbHkgYSBzbGVlcC1pbi1hdG9taWMgYnVnIGR1cmluZyBtZXNzYWdlIHB1cmdpbmcgYW5kIHNvbWUgcmVmZXJlbmNlIGNvdW50aW5nIHByb2JsZW1zLiBUaGlzIGlzIGRlZmluaXRlbHkgd29ydGggYSBjbG9zZXIgbG9vaywgZXNwZWNpYWxseSBjb25zaWRlcmluZyB0aGUgcG90ZW50aWFsIGltcGFjdCBvbiBwZXJmb3JtYW5jZSBhbmQgc3RhYmlsaXR5LlxuXG5UbyBzdGFydCwgSSdtIGdvaW5nIHRvIGVuc3VyZSBJIGNvdmVyIG15IGJhc2VzIHdpdGggdGhlIGNvbmZpZ3VyYXRpb24uIEknbGwgaW5jbHVkZSBgUkRNQV9SWEVgIGFuZCBgUkRNQV9TSVdgIHRvIGJlIG9uIHRoZSBzYWZlIHNpZGUsIHNvIG15IHRlc3QgaGFybmVzcyB3aWxsIGJlIGJ1aWx0IHdpdGggdGhlIGZvbGxvd2luZyBjb25maWd1cmF0aW9ucyBlbmFibGVkOiBgUkRTYCwgYFJEU19SRE1BYCwgYElORklOSUJBTkRgLCBgSU5GSU5JQkFORF9BRERSX1RSQU5TYCwgYFJETUFfUlhFYCwgYW5kIGBSRE1BX1NJV2AuIEkgd2FudCBtYXhpbXVtIGNvdmVyYWdlIHRvIGV4cG9zZSBhbnkgaGlkZGVuIGlzc3Vlcy5cblxuTm93LCBsZXQncyBuYWlsIGRvd24gdGhlIGZvY3VzIHN5bWJvbHMuIEkndmUgcGlucG9pbnRlZCBhIGZldyBmdW5jdGlvbnMgdGhhdCBzZWVtIHBhcnRpY3VsYXJseSByZWxldmFudCB0byB0aGUgY2hhbmdlcy4gRmlyc3QgdXAsIHdlJ3ZlIGdvdCBgcmRzX21lc3NhZ2VfcHV0YCBiZWNhdXNlIGl0J3MgYXQgdGhlIGNvcmUgb2YgbWVzc2FnZSBoYW5kbGluZy4gVGhlbiwgSSBuZWVkIHRvIGxvb2sgaW50byBgcmRzX3NlbmRfeG1pdGAgYW5kIGByZHNfY21zZ19yZG1hX2FyZ3NgLCBhcyB0aGVzZSBhcmUgUkRNQS1zcGVjaWZpYyBhbmQgbGlrZWx5IHJlbGF0ZWQgdG8gdGhlIHJlZmVyZW5jZSBjb3VudGluZyBmaXhlcy4gSSdsbCBhbHNvIGFkZCBgcmRzX3JkbWFfZnJlZV9vcGAgYW5kIGByZHNfYXRvbWljX2ZyZWVfb3BgIGJlY2F1c2UgdGhleSBoYW5kbGUgbWVtb3J5IG1hbmFnZW1lbnQuIExhc3RseSwgSSdsbCBpbmNsdWRlIGBfX3Jkc19wdXRfbXJfZmluYWxgIHNpbmNlIGl0J3MgaW52b2x2ZWQgaW4gdGhlIGZpbmFsIHN0YWdlcyBvZiB0aGUgbWVtb3J5IHJlZ2lvbiBjbGVhbnVwLlxuXG5JIGRpZCBhIHF1aWNrIHNjYW4gdG8gc2VlIGlmIHRoZXJlIHdlcmUgYW55IG90aGVyIGludGVyZXN0aW5nIGZ1bmN0aW9ucywgYnV0IGRpZG4ndCBmaW5kIGFueSB0aGF0IHdhcnJhbnRlZCBjbG9zZXIgYXR0ZW50aW9uLiBgcmRzX2liX2V4aXRgIGlzIG1vZGlmaWVkLCBidXQgdGhhdCdzIGEgbW9kdWxlIGV4aXQgZnVuY3Rpb24sIHNvIG5vdCBpZGVhbCBmb3IgdGhpcyBmdXp6aW5nIGNhbXBhaWduLiBgcmRzX21lc3NhZ2VfcHVyZ2VgLCBgcmRzX21lc3NhZ2VfcHVyZ2Vfd29ya2VyYCwgYW5kIGByZHNfbWVzc2FnZV9kaXJ0aWVzX3BhZ2VzYCBhcmUgYWxsIHN0YXRpYy5cblxuSSd2ZSBjb25maXJtZWQgdGhhdCBhbGwgdGhlIGZvY3VzIHN5bWJvbHMgSSBzZWxlY3RlZCBhcmUgZXhwb3J0ZWQgb3Igbm9uLXN0YXRpYywgd2hpY2ggaXMgd2hhdCBJIHdhbnQgZm9yIGEgZ29vZCBmdXp6aW5nIHRhcmdldC5cblxuSW4gc2hvcnQsIHRoaXMgcGF0Y2ggZml4ZXMgc2xlZXAtaW4tYXRvbWljIGlzc3VlcyBkdXJpbmcgbWVzc2FnZSBwdXJnaW5nIChieSBkZWZlcnJpbmcgZGlydHlpbmcgcGFnZXMpLCBzb2NrZXQgcmVmZXJlbmNlIGNvdW50aW5nIHByb2JsZW1zLCBhbmQgcmVmZXJlbmNlIGxlYWtzLiBUaGlzIHdpbGwgYWZmZWN0IHN0YW5kYXJkIHNvY2tldCBvcGVyYXRpb25zIGFuZCBSRE1BIG1lc3NhZ2VzLlxuXG5JJ20gY29uZmlkZW50IGluIHRoZXNlIGZvY3VzIHN5bWJvbHMsIHNvIGl0J3MgdGltZSB0byBzZXQtcmVzdWx0cyBhbmQgZ2V0IHRoZSBmdXp6aW5nIHN0YXJ0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNDMxLCJPdXRwdXRUb2tlbnMiOjIxNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU5OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDEwOjQ2OjU1LjIyNDA1ODY2OVoiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg5OTk2MzY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJSRFNcIixcbiAgICBcIlJEU19SRE1BXCIsXG4gICAgXCJJTkZJTklCQU5EXCIsXG4gICAgXCJJTkZJTklCQU5EX0FERFJfVFJBTlNcIixcbiAgICBcIlJETUFfUlhFXCIsXG4gICAgXCJSRE1BX1NJV1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJkc19tZXNzYWdlX3B1dFwiLFxuICAgIFwicmRzX3NlbmRfeG1pdFwiLFxuICAgIFwicmRzX2Ntc2dfcmRtYV9hcmdzXCIsXG4gICAgXCJyZHNfcmRtYV9mcmVlX29wXCIsXG4gICAgXCJyZHNfYXRvbWljX2ZyZWVfb3BcIixcbiAgICBcIl9fcmRzX3B1dF9tcl9maW5hbFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgc2xlZXAtaW4tYXRvbWljIGJ1ZyBpbiBSRFMgbWVzc2FnZSBwdXJnaW5nIGJ5IGRlZmVycmluZyB0aGUgcHVyZ2Ugb2YgbWVzc2FnZXMgdGhhdCBkaXJ0eSBwYWdlcyB0byBhIHdvcmtxdWV1ZS4gSXQgYWxzbyBmaXhlcyBzb2NrZXQgcmVmZXJlbmNlIGNvdW50aW5nIGlzc3VlcyBpbiBSRFMgUkRNQSBvcGVyYXRpb25zIGFuZCBhIHJlZmVyZW5jZSBsZWFrIGluIGByZHNfc2VuZF94bWl0YC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiB0aGUgY29yZSBSRFMgYW5kIFJEUyBSRE1BIGNvZGUgcGF0aHMgdGhhdCBjYW4gYmUgcmVhY2hlZCB2aWEgc3RhbmRhcmQgc29ja2V0IG9wZXJhdGlvbnMgYW5kIFJETUEgbWVzc2FnZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUkRTXCIsXG4gICAgXCJSRFNfUkRNQVwiLFxuICAgIFwiSU5GSU5JQkFORFwiLFxuICAgIFwiSU5GSU5JQkFORF9BRERSX1RSQU5TXCIsXG4gICAgXCJSRE1BX1JYRVwiLFxuICAgIFwiUkRNQV9TSVdcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyZHNfbWVzc2FnZV9wdXRcIixcbiAgICBcInJkc19zZW5kX3htaXRcIixcbiAgICBcInJkc19jbXNnX3JkbWFfYXJnc1wiLFxuICAgIFwicmRzX3JkbWFfZnJlZV9vcFwiLFxuICAgIFwicmRzX2F0b21pY19mcmVlX29wXCIsXG4gICAgXCJfX3Jkc19wdXRfbXJfZmluYWxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHNsZWVwLWluLWF0b21pYyBidWcgaW4gUkRTIG1lc3NhZ2UgcHVyZ2luZyBieSBkZWZlcnJpbmcgdGhlIHB1cmdlIG9mIG1lc3NhZ2VzIHRoYXQgZGlydHkgcGFnZXMgdG8gYSB3b3JrcXVldWUuIEl0IGFsc28gZml4ZXMgc29ja2V0IHJlZmVyZW5jZSBjb3VudGluZyBpc3N1ZXMgaW4gUkRTIFJETUEgb3BlcmF0aW9ucyBhbmQgYSByZWZlcmVuY2UgbGVhayBpbiBgcmRzX3NlbmRfeG1pdGAuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gdGhlIGNvcmUgUkRTIGFuZCBSRFMgUkRNQSBjb2RlIHBhdGhzIHRoYXQgY2FuIGJlIHJlYWNoZWQgdmlhIHN0YW5kYXJkIHNvY2tldCBvcGVyYXRpb25zIGFuZCBSRE1BIG1lc3NhZ2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowmq6bg[1] Phase: Succeeded StartedAt: 2026-07-27 10:47:06 +0000 UTC FinishedAt: 2026-07-27 10:47:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmq6bg[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-27 10:47:06 +0000 UTC FinishedAt: 2026-07-27 10:47:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmq6bg[2] Phase: Succeeded StartedAt: 2026-07-27 10:47:06 +0000 UTC FinishedAt: 2026-07-27 15:23:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmq6bg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS","RDMA_RXE","RDMA_SIW"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rds_message_put","rds_send_xmit","rds_cmsg_rdma_args","rds_rdma_free_op","rds_atomic_free_op","__rds_put_mr_final"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS","RDMA_RXE","RDMA_SIW"],"series_id":"32576597-7320-4052-a3c9-e4d8e17e58bb","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-27 10:47:06 +0000 UTC FinishedAt: 2026-07-27 15:23:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS","RDMA_RXE","RDMA_SIW"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rds_message_put","rds_send_xmit","rds_cmsg_rdma_args","rds_rdma_free_op","rds_atomic_free_op","__rds_put_mr_final"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS","RDMA_RXE","RDMA_SIW"],"series_id":"32576597-7320-4052-a3c9-e4d8e17e58bb","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowmq6bg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS","RDMA_RXE","RDMA_SIW"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rds_message_put","rds_send_xmit","rds_cmsg_rdma_args","rds_rdma_free_op","rds_atomic_free_op","__rds_put_mr_final"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS","RDMA_RXE","RDMA_SIW"],"series_id":"32576597-7320-4052-a3c9-e4d8e17e58bb","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-27 10:47:06 +0000 UTC FinishedAt: 2026-07-27 10:47:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmq6bg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS","RDMA_RXE","RDMA_SIW"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rds_message_put","rds_send_xmit","rds_cmsg_rdma_args","rds_rdma_free_op","rds_atomic_free_op","__rds_put_mr_final"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS","RDMA_RXE","RDMA_SIW"],"series_id":"32576597-7320-4052-a3c9-e4d8e17e58bb","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-27 10:47:06 +0000 UTC FinishedAt: 2026-07-27 10:47:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS","RDMA_RXE","RDMA_SIW"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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-workflowmq6bg/series-workflowmq6bg-convert-artifact-2747781295/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmq6bg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS","RDMA_RXE","RDMA_SIW"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rds_message_put","rds_send_xmit","rds_cmsg_rdma_args","rds_rdma_free_op","rds_atomic_free_op","__rds_put_mr_final"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS","RDMA_RXE","RDMA_SIW"],"series_id":"32576597-7320-4052-a3c9-e4d8e17e58bb","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-27 10:47:16 +0000 UTC FinishedAt: 2026-07-27 11:23:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmq6bg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS","RDMA_RXE","RDMA_SIW"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rds_message_put","rds_send_xmit","rds_cmsg_rdma_args","rds_rdma_free_op","rds_atomic_free_op","__rds_put_mr_final"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS","RDMA_RXE","RDMA_SIW"],"series_id":"32576597-7320-4052-a3c9-e4d8e17e58bb","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-27 10:47:16 +0000 UTC FinishedAt: 2026-07-27 11:23:43 +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:*e33a08a6-30db-402f-8925-57817e1d9ab9,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-workflowmq6bg/series-workflowmq6bg-convert-artifact-2747781295/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": "15c910b7-4351-44ff-9334-4be09fa21b0e", "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-workflowmq6bg/series-workflowmq6bg-build-action-1173706357/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmq6bg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS","RDMA_RXE","RDMA_SIW"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rds_message_put","rds_send_xmit","rds_cmsg_rdma_args","rds_rdma_free_op","rds_atomic_free_op","__rds_put_mr_final"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS","RDMA_RXE","RDMA_SIW"],"series_id":"32576597-7320-4052-a3c9-e4d8e17e58bb","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-27 10:47:16 +0000 UTC FinishedAt: 2026-07-27 11:23:33 +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:*e33a08a6-30db-402f-8925-57817e1d9ab9,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-workflowmq6bg/series-workflowmq6bg-convert-artifact-2747781295/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": "15c910b7-4351-44ff-9334-4be09fa21b0e", "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-workflowmq6bg/series-workflowmq6bg-build-action-1173706357/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmq6bg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS","RDMA_RXE","RDMA_SIW"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rds_message_put","rds_send_xmit","rds_cmsg_rdma_args","rds_rdma_free_op","rds_atomic_free_op","__rds_put_mr_final"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS","RDMA_RXE","RDMA_SIW"],"series_id":"32576597-7320-4052-a3c9-e4d8e17e58bb","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-27 11:23:43 +0000 UTC FinishedAt: 2026-07-27 11:23:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmq6bg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS","RDMA_RXE","RDMA_SIW"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rds_message_put","rds_send_xmit","rds_cmsg_rdma_args","rds_rdma_free_op","rds_atomic_free_op","__rds_put_mr_final"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS","RDMA_RXE","RDMA_SIW"],"series_id":"32576597-7320-4052-a3c9-e4d8e17e58bb","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-27 11:23:43 +0000 UTC FinishedAt: 2026-07-27 11:23:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmq6bg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS","RDMA_RXE","RDMA_SIW"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rds_message_put","rds_send_xmit","rds_cmsg_rdma_args","rds_rdma_free_op","rds_atomic_free_op","__rds_put_mr_final"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS","RDMA_RXE","RDMA_SIW"],"series_id":"32576597-7320-4052-a3c9-e4d8e17e58bb","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-27 11:23:43 +0000 UTC FinishedAt: 2026-07-27 11:23:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmq6bg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS","RDMA_RXE","RDMA_SIW"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rds_message_put","rds_send_xmit","rds_cmsg_rdma_args","rds_rdma_free_op","rds_atomic_free_op","__rds_put_mr_final"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS","RDMA_RXE","RDMA_SIW"],"series_id":"32576597-7320-4052-a3c9-e4d8e17e58bb","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-27 11:23:43 +0000 UTC FinishedAt: 2026-07-27 11:23:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS","RDMA_RXE","RDMA_SIW"],"series_id":"32576597-7320-4052-a3c9-e4d8e17e58bb","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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-workflowmq6bg/series-workflowmq6bg-convert-artifact-3527012094/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmq6bg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS","RDMA_RXE","RDMA_SIW"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rds_message_put","rds_send_xmit","rds_cmsg_rdma_args","rds_rdma_free_op","rds_atomic_free_op","__rds_put_mr_final"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS","RDMA_RXE","RDMA_SIW"],"series_id":"32576597-7320-4052-a3c9-e4d8e17e58bb","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-27 11:23:53 +0000 UTC FinishedAt: 2026-07-27 11:25:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmq6bg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS","RDMA_RXE","RDMA_SIW"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rds_message_put","rds_send_xmit","rds_cmsg_rdma_args","rds_rdma_free_op","rds_atomic_free_op","__rds_put_mr_final"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS","RDMA_RXE","RDMA_SIW"],"series_id":"32576597-7320-4052-a3c9-e4d8e17e58bb","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-27 11:23:53 +0000 UTC FinishedAt: 2026-07-27 11:25:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*15c910b7-4351-44ff-9334-4be09fa21b0e,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-workflowmq6bg/series-workflowmq6bg-build-action-1173706357/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-workflowmq6bg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS","RDMA_RXE","RDMA_SIW"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rds_message_put","rds_send_xmit","rds_cmsg_rdma_args","rds_rdma_free_op","rds_atomic_free_op","__rds_put_mr_final"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS","RDMA_RXE","RDMA_SIW"],"series_id":"32576597-7320-4052-a3c9-e4d8e17e58bb","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-27 11:25:51 +0000 UTC FinishedAt: 2026-07-27 11:25:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmq6bg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS","RDMA_RXE","RDMA_SIW"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rds_message_put","rds_send_xmit","rds_cmsg_rdma_args","rds_rdma_free_op","rds_atomic_free_op","__rds_put_mr_final"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS","RDMA_RXE","RDMA_SIW"],"series_id":"32576597-7320-4052-a3c9-e4d8e17e58bb","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-27 11:25:51 +0000 UTC FinishedAt: 2026-07-27 11:25:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmq6bg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS","RDMA_RXE","RDMA_SIW"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rds_message_put","rds_send_xmit","rds_cmsg_rdma_args","rds_rdma_free_op","rds_atomic_free_op","__rds_put_mr_final"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS","RDMA_RXE","RDMA_SIW"],"series_id":"32576597-7320-4052-a3c9-e4d8e17e58bb","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-27 11:25:51 +0000 UTC FinishedAt: 2026-07-27 12:17:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmq6bg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS","RDMA_RXE","RDMA_SIW"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rds_message_put","rds_send_xmit","rds_cmsg_rdma_args","rds_rdma_free_op","rds_atomic_free_op","__rds_put_mr_final"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS","RDMA_RXE","RDMA_SIW"],"series_id":"32576597-7320-4052-a3c9-e4d8e17e58bb","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-27 11:25:51 +0000 UTC FinishedAt: 2026-07-27 12:17:53 +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:*e33a08a6-30db-402f-8925-57817e1d9ab9,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-workflowmq6bg/series-workflowmq6bg-convert-artifact-3527012094/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": "517f83be-86db-41bf-b3db-6bda3fe47e75", "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-workflowmq6bg/series-workflowmq6bg-build-action-2326838098/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmq6bg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS","RDMA_RXE","RDMA_SIW"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rds_message_put","rds_send_xmit","rds_cmsg_rdma_args","rds_rdma_free_op","rds_atomic_free_op","__rds_put_mr_final"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS","RDMA_RXE","RDMA_SIW"],"series_id":"32576597-7320-4052-a3c9-e4d8e17e58bb","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-27 11:25:51 +0000 UTC FinishedAt: 2026-07-27 12:17:42 +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:*e33a08a6-30db-402f-8925-57817e1d9ab9,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-workflowmq6bg/series-workflowmq6bg-convert-artifact-3527012094/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": "517f83be-86db-41bf-b3db-6bda3fe47e75", "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-workflowmq6bg/series-workflowmq6bg-build-action-2326838098/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmq6bg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS","RDMA_RXE","RDMA_SIW"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rds_message_put","rds_send_xmit","rds_cmsg_rdma_args","rds_rdma_free_op","rds_atomic_free_op","__rds_put_mr_final"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS","RDMA_RXE","RDMA_SIW"],"series_id":"32576597-7320-4052-a3c9-e4d8e17e58bb","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-27 12:17:53 +0000 UTC FinishedAt: 2026-07-27 12:17:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmq6bg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS","RDMA_RXE","RDMA_SIW"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rds_message_put","rds_send_xmit","rds_cmsg_rdma_args","rds_rdma_free_op","rds_atomic_free_op","__rds_put_mr_final"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS","RDMA_RXE","RDMA_SIW"],"series_id":"32576597-7320-4052-a3c9-e4d8e17e58bb","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-27 12:17:53 +0000 UTC FinishedAt: 2026-07-27 12:17:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmq6bg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS","RDMA_RXE","RDMA_SIW"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rds_message_put","rds_send_xmit","rds_cmsg_rdma_args","rds_rdma_free_op","rds_atomic_free_op","__rds_put_mr_final"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS","RDMA_RXE","RDMA_SIW"],"series_id":"32576597-7320-4052-a3c9-e4d8e17e58bb","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-27 12:17:53 +0000 UTC FinishedAt: 2026-07-27 12:20:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmq6bg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS","RDMA_RXE","RDMA_SIW"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rds_message_put","rds_send_xmit","rds_cmsg_rdma_args","rds_rdma_free_op","rds_atomic_free_op","__rds_put_mr_final"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS","RDMA_RXE","RDMA_SIW"],"series_id":"32576597-7320-4052-a3c9-e4d8e17e58bb","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-27 12:17:53 +0000 UTC FinishedAt: 2026-07-27 12:20:06 +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:*517f83be-86db-41bf-b3db-6bda3fe47e75,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-workflowmq6bg/series-workflowmq6bg-build-action-2326838098/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-workflowmq6bg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS","RDMA_RXE","RDMA_SIW"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rds_message_put","rds_send_xmit","rds_cmsg_rdma_args","rds_rdma_free_op","rds_atomic_free_op","__rds_put_mr_final"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS","RDMA_RXE","RDMA_SIW"],"series_id":"32576597-7320-4052-a3c9-e4d8e17e58bb","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-27 12:20:16 +0000 UTC FinishedAt: 2026-07-27 15:23:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmq6bg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS","RDMA_RXE","RDMA_SIW"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rds_message_put","rds_send_xmit","rds_cmsg_rdma_args","rds_rdma_free_op","rds_atomic_free_op","__rds_put_mr_final"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS","RDMA_RXE","RDMA_SIW"],"series_id":"32576597-7320-4052-a3c9-e4d8e17e58bb","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-27 12:20:16 +0000 UTC FinishedAt: 2026-07-27 15:23:28 +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":["rds_message_put","rds_send_xmit","rds_cmsg_rdma_args","rds_rdma_free_op","rds_atomic_free_op","__rds_put_mr_final"],"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:*15c910b7-4351-44ff-9334-4be09fa21b0e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*517f83be-86db-41bf-b3db-6bda3fe47e75,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-workflowmq6bg/series-workflowmq6bg-build-action-1173706357/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-workflowmq6bg/series-workflowmq6bg-build-action-2326838098/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowmq6bg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS","RDMA_RXE","RDMA_SIW"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rds_message_put","rds_send_xmit","rds_cmsg_rdma_args","rds_rdma_free_op","rds_atomic_free_op","__rds_put_mr_final"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS","RDMA_RXE","RDMA_SIW"],"series_id":"32576597-7320-4052-a3c9-e4d8e17e58bb","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-27 12:20:16 +0000 UTC FinishedAt: 2026-07-27 12:20:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmq6bg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS","RDMA_RXE","RDMA_SIW"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rds_message_put","rds_send_xmit","rds_cmsg_rdma_args","rds_rdma_free_op","rds_atomic_free_op","__rds_put_mr_final"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS","RDMA_RXE","RDMA_SIW"],"series_id":"32576597-7320-4052-a3c9-e4d8e17e58bb","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-27 12:20:16 +0000 UTC FinishedAt: 2026-07-27 12:20:31 +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":["rds_message_put","rds_send_xmit","rds_cmsg_rdma_args","rds_rdma_free_op","rds_atomic_free_op","__rds_put_mr_final"],"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-workflowmq6bg/series-workflowmq6bg-convert-artifact-859662851/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmq6bg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS","RDMA_RXE","RDMA_SIW"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rds_message_put","rds_send_xmit","rds_cmsg_rdma_args","rds_rdma_free_op","rds_atomic_free_op","__rds_put_mr_final"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS","RDMA_RXE","RDMA_SIW"],"series_id":"32576597-7320-4052-a3c9-e4d8e17e58bb","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-27 12:20:16 +0000 UTC FinishedAt: 2026-07-27 12:20:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmq6bg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS","RDMA_RXE","RDMA_SIW"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rds_message_put","rds_send_xmit","rds_cmsg_rdma_args","rds_rdma_free_op","rds_atomic_free_op","__rds_put_mr_final"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS","RDMA_RXE","RDMA_SIW"],"series_id":"32576597-7320-4052-a3c9-e4d8e17e58bb","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-27 12:20:16 +0000 UTC FinishedAt: 2026-07-27 12:20:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmq6bg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS","RDMA_RXE","RDMA_SIW"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rds_message_put","rds_send_xmit","rds_cmsg_rdma_args","rds_rdma_free_op","rds_atomic_free_op","__rds_put_mr_final"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS","RDMA_RXE","RDMA_SIW"],"series_id":"32576597-7320-4052-a3c9-e4d8e17e58bb","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-27 12:20:16 +0000 UTC FinishedAt: 2026-07-27 12:20:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmq6bg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS","RDMA_RXE","RDMA_SIW"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rds_message_put","rds_send_xmit","rds_cmsg_rdma_args","rds_rdma_free_op","rds_atomic_free_op","__rds_put_mr_final"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS","RDMA_RXE","RDMA_SIW"],"series_id":"32576597-7320-4052-a3c9-e4d8e17e58bb","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-27 12:20:39 +0000 UTC FinishedAt: 2026-07-27 15:23:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmq6bg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS","RDMA_RXE","RDMA_SIW"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rds_message_put","rds_send_xmit","rds_cmsg_rdma_args","rds_rdma_free_op","rds_atomic_free_op","__rds_put_mr_final"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS","RDMA_RXE","RDMA_SIW"],"series_id":"32576597-7320-4052-a3c9-e4d8e17e58bb","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-27 12:20:39 +0000 UTC FinishedAt: 2026-07-27 15:23:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*15c910b7-4351-44ff-9334-4be09fa21b0e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*517f83be-86db-41bf-b3db-6bda3fe47e75,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-workflowmq6bg/series-workflowmq6bg-build-action-1173706357/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-workflowmq6bg/series-workflowmq6bg-build-action-2326838098/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-workflowmq6bg/series-workflowmq6bg-convert-artifact-859662851/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,}