Name: series-workflownqm5h Phase: Succeeded StartedAt: 2026-09-07 13:08:05 +0000 UTC FinishedAt: 2026-09-07 17:33:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflownqm5h[0] Phase: Succeeded StartedAt: 2026-09-07 13:08:05 +0000 UTC FinishedAt: 2026-09-07 13:54:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflownqm5h[0].run-triage Phase: Succeeded StartedAt: 2026-09-07 13:08:05 +0000 UTC FinishedAt: 2026-09-07 13:54:59 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET", "IPV6", "XFRM", "INET_ESP", "INET6_ESP", "INET_ESPINTCP", "INET6_ESPINTCP", "XFRM_USER", "XFRM_IPTFS", "XFRM_MIGRATE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET", "IPV6", "XFRM", "INET_ESP", "INET6_ESP", "INET_ESPINTCP", "INET6_ESPINTCP", "XFRM_USER", "XFRM_IPTFS", "XFRM_MIGRATE" ], "series_id": "27234445-ea9c-452c-ba1b-e307f389c838" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "esp_output_head", "esp6_output_head", "xfrm6_local_rxpmtu", "xfrm6_local_error", "espintcp_rcv", "handle_esp", "xfrm_input", "xfrm_trans_reinject", "xfrm_trans_queue_net", "iptfs_skb_can_add_frags", "iptfs_reassem_cont", "xfrm_bundle_create", "xfrm_create_dummy_bundle", "xfrm_state_gc_task", "__xfrm_state_delete", "xfrm_dev_state_flush", "xfrm_alloc_userspi", "xfrm_send_migrate_state" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA3IDEzOjUzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVQmIzM0OywKICAgICYjMzQ7SVBWNiYjMzQ7LAogICAgJiMzNDtYRlJNJiMzNDssCiAgICAmIzM0O0lORVRfRVNQJiMzNDssCiAgICAmIzM0O0lORVQ2X0VTUCYjMzQ7LAogICAgJiMzNDtJTkVUX0VTUElOVENQJiMzNDssCiAgICAmIzM0O0lORVQ2X0VTUElOVENQJiMzNDssCiAgICAmIzM0O1hGUk1fVVNFUiYjMzQ7LAogICAgJiMzNDtYRlJNX0lQVEZTJiMzNDssCiAgICAmIzM0O1hGUk1fTUlHUkFURSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2VzcF9vdXRwdXRfaGVhZCYjMzQ7LAogICAgJiMzNDtlc3A2X291dHB1dF9oZWFkJiMzNDssCiAgICAmIzM0O3hmcm02X2xvY2FsX3J4cG10dSYjMzQ7LAogICAgJiMzNDt4ZnJtNl9sb2NhbF9lcnJvciYjMzQ7LAogICAgJiMzNDtlc3BpbnRjcF9yY3YmIzM0OywKICAgICYjMzQ7aGFuZGxlX2VzcCYjMzQ7LAogICAgJiMzNDt4ZnJtX2lucHV0JiMzNDssCiAgICAmIzM0O3hmcm1fdHJhbnNfcmVpbmplY3QmIzM0OywKICAgICYjMzQ7eGZybV90cmFuc19xdWV1ZV9uZXQmIzM0OywKICAgICYjMzQ7aXB0ZnNfc2tiX2Nhbl9hZGRfZnJhZ3MmIzM0OywKICAgICYjMzQ7aXB0ZnNfcmVhc3NlbV9jb250JiMzNDssCiAgICAmIzM0O3hmcm1fYnVuZGxlX2NyZWF0ZSYjMzQ7LAogICAgJiMzNDt4ZnJtX2NyZWF0ZV9kdW1teV9idW5kbGUmIzM0OywKICAgICYjMzQ7eGZybV9zdGF0ZV9nY190YXNrJiMzNDssCiAgICAmIzM0O19feGZybV9zdGF0ZV9kZWxldGUmIzM0OywKICAgICYjMzQ7eGZybV9kZXZfc3RhdGVfZmx1c2gmIzM0OywKICAgICYjMzQ7eGZybV9hbGxvY191c2Vyc3BpJiMzNDssCiAgICAmIzM0O3hmcm1fc2VuZF9taWdyYXRlX3N0YXRlJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIGNvbnRhaW5zIHNldmVyYWwgYnVnIGZpeGVzIGFuZCByZWZhY3RvcmluZ3MgYWNyb3NzIFhGUk0gYW5kIElQc2VjIG5ldHdvcmtpbmcgc3Vic3lzdGVtczpcbjEuIGBlc3A0LmNgIGFuZCBgZXNwNi5jYDogQWRkcyBgc2tiX3pjb3B5X2Rvd25ncmFkZV9tYW5hZ2VkKHNrYilgIHRvIGJhbGFuY2UgcmVmY291bnRzIG9uIHplcm9jb3B5IG1hbmFnZWQgZnJhZ3Mgd2hlbiBtdXRhdGluZyB0aGUgZnJhZyBhcnJheSAocmVmY291bnRpbmcgLyBVQUYgcHJldmVudGlvbiwgY292ZXJlZCBieSBLQVNBTi9yZWZjb3VudCB0cmFja2luZykuXG4yLiBgeGZybTZfb3V0cHV0LmNgOiBWYWxpZGF0ZXMgc29ja2V0cyB1c2luZyBgc2tiX3RvX2Z1bGxfc2soKWAgdG8gYXZvaWQgb3BlcmF0aW5nIG9uIG5vbi1mdWxsIHNvY2tldHMgb3IgTlVMTCBkZXJlZmVyZW5jZXMgKE5VTEwgcG9pbnRlciAvIHR5cGUgY29uZnVzaW9uKS5cbjMuIGBlc3BpbnRjcC5jYDogVXNlcyBgc2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bCgpYCB0byB2YWxpZGF0ZSB0cmFuc3BvcnQgaGVhZGVyIGJvdW5kcyBiZWZvcmUgcmVzZXR0aW5nIChPT0IgcHJldmVudGlvbiwgY292ZXJlZCBieSBLQVNBTikuXG40LiBgeGZybV9pbnB1dC5jYDogRml4ZXMgcHJvdG9jb2wgdHJhY2tpbmcgKGB4ZnJtX3Byb3RvYCksIGhhbmRsZXMgZGV2aWNlIHJlZmNvdW50cyBhbmQgUkNVIGxvY2tpbmcgZHVyaW5nIHJlaW5qZWN0aW9uLCBhbmQgZW5zdXJlcyBkc3QgZW50cnkgcGVyc2lzdGVuY2UgKGBza2JfZHN0X2ZvcmNlYCkuIEFsbCB2YXJpYWJsZXMgKGB4ZnJtX3Byb3RvYCkgYXJlIGZ1bGx5IGluaXRpYWxpemVkIHdpdGggZGVmYXVsdCB2YWx1ZXMuXG41LiBgeGZybV9pcHRmcy5jYDogQWRkcyBib3VuZHMgY2hlY2tpbmcgb24gZnJhZyB3YWxrIG9mZnNldCB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgaW5kZXhpbmcgaW4gYGlwdGZzX3NrYl9yZXNldF9mcmFnX3dhbGsoKWAsIGFuZCBjb3JyZWN0cyBydW50IHNpemUgdmVyaWZpY2F0aW9uIGFnYWluc3QgSVAgaGVhZGVyIGxlbmd0aCAoT09CIHJlYWRzLCBjb3ZlcmVkIGJ5IEtBU0FOKS5cbjYuIGB4ZnJtX3BvbGljeS5jYCwgYHhmcm1fc3RhdGUuY2AsIGB4ZnJtX3VzZXIuY2A6IEFkZHMgbWlzc2luZyBSQ1UgcmVhZCBsb2NrcyAoYGRzdF9kZXZfcmN1YCwgbXVsdGljYXN0KSwgYWRkcyBhIEdDIG11dGV4IHRvIHNlcmlhbGl6ZSBzdGF0ZSBkZXN0cnVjdGlvbiwgYW5kIGZpeGVzIGxpc3QgZGVsZXRpb24gaW5pdGlhbGl6YXRpb24gKGBobGlzdF9kZWxfaW5pdF9yY3VgKS5cblxuTm9uZSBvZiB0aGUgY2hhbmdlcyBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIG1lbW9yeSwga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcywgb3IgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gVGhlIHJpc2tzIGFkZHJlc3NlZCAob3V0LW9mLWJvdW5kcyBhY2Nlc3MsIHJlZmNvdW50aW5nLCB1c2UtYWZ0ZXItZnJlZSwgY29uY3VycmVuY3kvUkNVKSBhcmUgY292ZXJlZCBieSBLQVNBTiwgUFJPVkVfUkNVLCBhbmQgc3RhbmRhcmQgZGVidWcgY2hlY2tlcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHRvdWNoZXMgY29yZSBJUHNlYyAoWEZSTSkgSVB2NC9JUHY2IG5ldHdvcmtpbmcgbG9naWMsIGluY2x1ZGluZyBFU1Agb3V0cHV0IHplcm8tY29weSBkb3duZ3JhZGVzLCBJUHY2IFhGUk0gZXJyb3IgcmVwb3J0aW5nIGZvciBub24tZnVsbCBzb2NrZXRzLCBFU1AtaW4tVENQIHRyYW5zcG9ydCBoZWFkZXIgcmVzZXR0aW5nLCBYRlJNIGlucHV0IHBhY2tldCBwcm90byBkaXNwYXRjaCBhbmQgYXN5bmMgZGV2LXJlZiByZWluamVjdGlvbiBoYW5kbGluZywgSVAtVEZTIGZyYWdtZW50IHdhbGsgYm91bmRzIGNoZWNrcywgcG9saWN5IGJ1bmRsZSBSQ1UgZGV2aWNlIHJlc29sdXRpb24sIHN0YXRlIEdDIHNlcmlhbGl6YXRpb24gdW5kZXIgbXV0ZXgsIGFuZCBYRlJNIHVzZXIgbmV0bGluayBoYW5kbGVycy4gQWxsIGNoYW5nZXMgYXJlIGluIHJlYWNoYWJsZSBuZXR3b3JraW5nIHBhdGhzIGV4ZXJjaXNhYmxlIHZpYSBzb2NrZXRzIGFuZCBYRlJNIG5ldGxpbmsgaW50ZXJmYWNlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxMzo1MzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGNlMDE0ZGExNTNkOGRjZThjMzNlMzZmYTk1N2YxMDEzOTYzZjZlMTlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCA3IDEzOjUzOjUwIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L2VzcDQuYyBiL25ldC9pcHY0L2VzcDQuY1xuaW5kZXggYTZjMThhZWE3NDk4ZC4uZTc2ZGI1ODE3ZTc4ZSAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L2VzcDQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvZXNwNC5jXG5AQCAtNDQxLDYgJiM0Mzs0NDEsMTIgQEAgaW50IGVzcF9vdXRwdXRfaGVhZChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGVzcF9pbmZvICpcbiBcbiBcdFx0XHRlc3AtXHUwMDNlaW5wbGFjZSA9IGZhbHNlO1xuIFxuJiM0MztcdFx0XHQvKiBUYWtlIHJlYWwgcGFnZSByZWZzIGFuZCBjbGVhciBTS0JGTF9NQU5BR0VEX0ZSQUdfUkVGUyBiZWZvcmVcbiYjNDM7XHRcdFx0ICogd2UgbXV0YXRlIHRoZSBmcmFnIGFycmF5LCBzbyB0aGUgcGVyLWZyYWcgdW5yZWYgc3RheXMgYmFsYW5jZWRcbiYjNDM7XHRcdFx0ICogZm9yIHplcm9jb3B5IG1hbmFnZWQgZnJhZ3MgKHNlZSBfX2lwX2FwcGVuZF9kYXRhKCkpLlxuJiM0MztcdFx0XHQgKi9cbiYjNDM7XHRcdFx0c2tiX3pjb3B5X2Rvd25ncmFkZV9tYW5hZ2VkKHNrYik7XG4mIzQzO1xuIFx0XHRcdGFsbG9jc2l6ZSA9IEFMSUdOKHRhaWxlbiwgTDFfQ0FDSEVfQllURVMpO1xuIFxuIFx0XHRcdHNwaW5fbG9ja19iaChcdTAwMjZ4LVx1MDAzZWxvY2spO1xuZGlmZiAtLWdpdCBhL25ldC9pcHY2L2VzcDYuYyBiL25ldC9pcHY2L2VzcDYuY1xuaW5kZXggNzJlYzBkN2QxMTIwOS4uYjFjOWIzNmY3NmRjNCAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L2VzcDYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvZXNwNi5jXG5AQCAtNDcxLDYgJiM0Mzs0NzEsMTIgQEAgaW50IGVzcDZfb3V0cHV0X2hlYWQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBlc3BfaW5mb1xuIFxuIFx0XHRcdGVzcC1cdTAwM2VpbnBsYWNlID0gZmFsc2U7XG4gXG4mIzQzO1x0XHRcdC8qIFRha2UgcmVhbCBwYWdlIHJlZnMgYW5kIGNsZWFyIFNLQkZMX01BTkFHRURfRlJBR19SRUZTIGJlZm9yZVxuJiM0MztcdFx0XHQgKiB3ZSBtdXRhdGUgdGhlIGZyYWcgYXJyYXksIHNvIHRoZSBwZXItZnJhZyB1bnJlZiBzdGF5cyBiYWxhbmNlZFxuJiM0MztcdFx0XHQgKiBmb3IgemVyb2NvcHkgbWFuYWdlZCBmcmFncyAoc2VlIF9faXBfYXBwZW5kX2RhdGEoKSkuXG4mIzQzO1x0XHRcdCAqL1xuJiM0MztcdFx0XHRza2JfemNvcHlfZG93bmdyYWRlX21hbmFnZWQoc2tiKTtcbiYjNDM7XG4gXHRcdFx0YWxsb2NzaXplID0gQUxJR04odGFpbGVuLCBMMV9DQUNIRV9CWVRFUyk7XG4gXG4gXHRcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNngtXHUwMDNlbG9jayk7XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYveGZybTZfb3V0cHV0LmMgYi9uZXQvaXB2Ni94ZnJtNl9vdXRwdXQuY1xuaW5kZXggNTEyYmRhZjEzNjk5Ny4uNDRiMjIxYTA5YTBjOCAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L3hmcm02X291dHB1dC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni94ZnJtNl9vdXRwdXQuY1xuQEAgLTE5LDcgJiM0MzsxOSwxMCBAQFxuIHZvaWQgeGZybTZfbG9jYWxfcnhwbXR1KHN0cnVjdCBza19idWZmICpza2IsIHUzMiBtdHUpXG4ge1xuIFx0c3RydWN0IGZsb3dpNiBmbDY7XG4tXHRzdHJ1Y3Qgc29jayAqc2sgPSBza2ItXHUwMDNlc2s7XG4mIzQzO1x0c3RydWN0IHNvY2sgKnNrID0gc2tiX3RvX2Z1bGxfc2soc2tiKTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFzaylcbiYjNDM7XHRcdHJldHVybjtcbiBcbiBcdGZsNi5mbG93aTZfb2lmID0gc2stXHUwMDNlc2tfYm91bmRfZGV2X2lmO1xuIFx0Zmw2LmRhZGRyID0gaXB2Nl9oZHIoc2tiKS1cdTAwM2VkYWRkcjtcbkBAIC0zMSw3ICYjNDM7MzQsMTAgQEAgdm9pZCB4ZnJtNl9sb2NhbF9lcnJvcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgbXR1KVxuIHtcbiBcdHN0cnVjdCBmbG93aTYgZmw2O1xuIFx0Y29uc3Qgc3RydWN0IGlwdjZoZHIgKmhkcjtcbi1cdHN0cnVjdCBzb2NrICpzayA9IHNrYi1cdTAwM2VzaztcbiYjNDM7XHRzdHJ1Y3Qgc29jayAqc2sgPSBza2JfdG9fZnVsbF9zayhza2IpO1xuJiM0MztcbiYjNDM7XHRpZiAoIXNrKVxuJiM0MztcdFx0cmV0dXJuO1xuIFxuIFx0aGRyID0gc2tiLVx1MDAzZWVuY2Fwc3VsYXRpb24gPyBpbm5lcl9pcHY2X2hkcihza2IpIDogaXB2Nl9oZHIoc2tiKTtcbiBcdGZsNi5mbDZfZHBvcnQgPSBpbmV0X3NrKHNrKS1cdTAwM2VpbmV0X2Rwb3J0O1xuZGlmZiAtLWdpdCBhL25ldC94ZnJtL2VzcGludGNwLmMgYi9uZXQveGZybS9lc3BpbnRjcC5jXG5pbmRleCA2NzRhZWRjNWFmNWEyLi4zZTcyYjlmMDY3YjliIDEwMDY0NFxuLS0tIGEvbmV0L3hmcm0vZXNwaW50Y3AuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3hmcm0vZXNwaW50Y3AuY1xuQEAgLTMwLDcgJiM0MzszMCwxMSBAQCBzdGF0aWMgdm9pZCBoYW5kbGVfZXNwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzb2NrICpzaylcbiB7XG4gXHRzdHJ1Y3QgdGNwX3NrYl9jYiAqdGNwX2NiID0gKHN0cnVjdCB0Y3Bfc2tiX2NiICopc2tiLVx1MDAzZWNiO1xuIFxuLVx0c2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXIoc2tiKTtcbiYjNDM7XHRpZiAoIXNrYl9yZXNldF90cmFuc3BvcnRfaGVhZGVyX2NhcmVmdWwoc2tiKSkge1xuJiM0MztcdFx0WEZSTV9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBMSU5VWF9NSUJfWEZSTUlORVJST1IpO1xuJiM0MztcdFx0a2ZyZWVfc2tiKHNrYik7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuIFxuIFx0LyogcmVzdG9yZSBJUCBDQiwgd2UgbmVlZCBhdCBsZWFzdCBJUDZDQi1cdTAwM2VuaG9mZiAqL1xuIFx0bWVtbW92ZShza2ItXHUwMDNlY2IsIFx1MDAyNnRjcF9jYi1cdTAwM2VoZWFkZXIsIHNpemVvZih0Y3BfY2ItXHUwMDNlaGVhZGVyKSk7XG5kaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV9pbnB1dC5jIGIvbmV0L3hmcm0veGZybV9pbnB1dC5jXG5pbmRleCBlZWNhYjMzN2JkMGE3Li41ZWQ4N2Q1MTM5MmE1IDEwMDY0NFxuLS0tIGEvbmV0L3hmcm0veGZybV9pbnB1dC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQveGZybS94ZnJtX2lucHV0LmNcbkBAIC00NzQsNiAmIzQzOzQ3NCw3IEBAIGludCB4ZnJtX2lucHV0KHN0cnVjdCBza19idWZmICpza2IsIGludCBuZXh0aGRyLCBfX2JlMzIgc3BpLCBpbnQgZW5jYXBfdHlwZSlcbiBcdHN0cnVjdCB4ZnJtX3N0YXRlICp4ID0gTlVMTDtcbiBcdHhmcm1fYWRkcmVzc190ICpkYWRkcjtcbiBcdHUzMiBtYXJrID0gc2tiLVx1MDAzZW1hcms7XG4mIzQzO1x0dTggeGZybV9wcm90byA9IG5leHRoZHI7XG4gXHR1bnNpZ25lZCBpbnQgZmFtaWx5ID0gQUZfVU5TUEVDO1xuIFx0aW50IGRlY2FwcyA9IDA7XG4gXHRpbnQgYXN5bmMgPSAwO1xuQEAgLTQ4NSw2ICYjNDM7NDg2LDcgQEAgaW50IHhmcm1faW5wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG5leHRoZHIsIF9fYmUzMiBzcGksIGludCBlbmNhcF90eXBlKVxuIFx0aWYgKGVuY2FwX3R5cGUgXHUwMDNjIDAgfHwgKHhvIFx1MDAyNlx1MDAyNiAoeG8tXHUwMDNlZmxhZ3MgXHUwMDI2IFhGUk1fR1JPIHx8IGVuY2FwX3R5cGUgPT0gMCB8fFxuIFx0XHRcdFx0ICAgICAgZW5jYXBfdHlwZSA9PSBVRFBfRU5DQVBfRVNQSU5VRFApKSkge1xuIFx0XHR4ID0geGZybV9pbnB1dF9zdGF0ZShza2IpO1xuJiM0MztcdFx0eGZybV9wcm90byA9IHgtXHUwMDNldHlwZSA/IHgtXHUwMDNldHlwZS1cdTAwM2Vwcm90byA6IG5leHRoZHI7XG4gXG4gXHRcdGlmICh1bmxpa2VseSh4LVx1MDAzZWttLnN0YXRlICE9IFhGUk1fU1RBVEVfVkFMSUQpKSB7XG4gXHRcdFx0aWYgKHgtXHUwMDNla20uc3RhdGUgPT0gWEZSTV9TVEFURV9BQ1EpXG5AQCAtNTkyLDExICYjNDM7NTk0LDEzIEBAIGludCB4ZnJtX2lucHV0KHN0cnVjdCBza19idWZmICpza2IsIGludCBuZXh0aGRyLCBfX2JlMzIgc3BpLCBpbnQgZW5jYXBfdHlwZSlcbiBcbiBcdFx0eCA9IHhmcm1faW5wdXRfc3RhdGVfbG9va3VwKG5ldCwgbWFyaywgZGFkZHIsIHNwaSwgbmV4dGhkciwgZmFtaWx5KTtcbiBcdFx0aWYgKHggPT0gTlVMTCkge1xuJiM0MztcdFx0XHR4ZnJtX3Byb3RvID0gbmV4dGhkcjtcbiBcdFx0XHRzZWNwYXRoX3Jlc2V0KHNrYik7XG4gXHRcdFx0WEZSTV9JTkNfU1RBVFMobmV0LCBMSU5VWF9NSUJfWEZSTUlOTk9TVEFURVMpO1xuIFx0XHRcdHhmcm1fYXVkaXRfc3RhdGVfbm90Zm91bmQoc2tiLCBmYW1pbHksIHNwaSwgc2VxKTtcbiBcdFx0XHRnb3RvIGRyb3A7XG4gXHRcdH1cbiYjNDM7XHRcdHhmcm1fcHJvdG8gPSB4LVx1MDAzZXR5cGUgPyB4LVx1MDAzZXR5cGUtXHUwMDNlcHJvdG8gOiBuZXh0aGRyO1xuIFxuIFx0XHRpZiAodW5saWtlbHkoeC1cdTAwM2VkaXIgXHUwMDI2XHUwMDI2IHgtXHUwMDNlZGlyICE9IFhGUk1fU0FfRElSX0lOKSkge1xuIFx0XHRcdHNlY3BhdGhfcmVzZXQoc2tiKTtcbkBAIC02MDQsNiAmIzQzOzYwOCw3IEBAIGludCB4ZnJtX2lucHV0KHN0cnVjdCBza19idWZmICpza2IsIGludCBuZXh0aGRyLCBfX2JlMzIgc3BpLCBpbnQgZW5jYXBfdHlwZSlcbiBcdFx0XHR4ZnJtX2F1ZGl0X3N0YXRlX25vdGZvdW5kKHNrYiwgZmFtaWx5LCBzcGksIHNlcSk7XG4gXHRcdFx0eGZybV9zdGF0ZV9wdXQoeCk7XG4gXHRcdFx0eCA9IE5VTEw7XG4mIzQzO1x0XHRcdHhmcm1fcHJvdG8gPSBuZXh0aGRyO1xuIFx0XHRcdGdvdG8gZHJvcDtcbiBcdFx0fVxuIFxuQEAgLTcyOCw3ICYjNDM7NzMzLDcgQEAgaW50IHhmcm1faW5wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG5leHRoZHIsIF9fYmUzMiBzcGksIGludCBlbmNhcF90eXBlKVxuIFx0fSB3aGlsZSAoIWVycik7XG4gXG4gXHRyY3VfcmVhZF9sb2NrKCk7XG4tXHRlcnIgPSB4ZnJtX3Jjdl9jYihza2IsIGZhbWlseSwgeC1cdTAwM2V0eXBlLVx1MDAzZXByb3RvLCAwKTtcbiYjNDM7XHRlcnIgPSB4ZnJtX3Jjdl9jYihza2IsIGZhbWlseSwgeGZybV9wcm90bywgMCk7XG4gXHRpZiAoZXJyKSB7XG4gXHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0XHRnb3RvIGRyb3A7XG5AQCAtNzUzLDcgJiM0Mzs3NTgsNyBAQCBpbnQgeGZybV9pbnB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbmV4dGhkciwgX19iZTMyIHNwaSwgaW50IGVuY2FwX3R5cGUpXG4gXHRcdFx0eGZybV9ncm8gPSB4by1cdTAwM2VmbGFncyBcdTAwMjYgWEZSTV9HUk87XG4gXG4gXHRcdGVyciA9IC1FQUZOT1NVUFBPUlQ7XG4tXHRcdGFmaW5mbyA9IHhmcm1fc3RhdGVfYWZpbmZvX2dldF9yY3UoeC1cdTAwM2Vwcm9wcy5mYW1pbHkpO1xuJiM0MztcdFx0YWZpbmZvID0geGZybV9zdGF0ZV9hZmluZm9fZ2V0X3JjdShmYW1pbHkpO1xuIFx0XHRpZiAobGlrZWx5KGFmaW5mbykpXG4gXHRcdFx0ZXJyID0gYWZpbmZvLVx1MDAzZXRyYW5zcG9ydF9maW5pc2goc2tiLCB4ZnJtX2dybyB8fCBhc3luYyk7XG4gXHRcdGlmICh4ZnJtX2dybykge1xuQEAgLTc3Niw3ICYjNDM7NzgxLDcgQEAgaW50IHhmcm1faW5wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG5leHRoZHIsIF9fYmUzMiBzcGksIGludCBlbmNhcF90eXBlKVxuIGRyb3A6XG4gXHRpZiAoYXN5bmMpXG4gXHRcdGRldl9wdXQoZGV2KTtcbi1cdHhmcm1fcmN2X2NiKHNrYiwgZmFtaWx5LCB4IFx1MDAyNlx1MDAyNiB4LVx1MDAzZXR5cGUgPyB4LVx1MDAzZXR5cGUtXHUwMDNlcHJvdG8gOiBuZXh0aGRyLCAtMSk7XG4mIzQzO1x0eGZybV9yY3ZfY2Ioc2tiLCBmYW1pbHksIHhmcm1fcHJvdG8sIC0xKTtcbiBcdGtmcmVlX3NrYihza2IpO1xuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTgwMCwxMiAmIzQzOzgwNSwxNyBAQCBzdGF0aWMgdm9pZCB4ZnJtX3RyYW5zX3JlaW5qZWN0KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnRyYW5zLVx1MDAzZXF1ZXVlX2xvY2spO1xuIFxuIFx0bG9jYWxfYmhfZGlzYWJsZSgpO1xuJiM0MztcdHJjdV9yZWFkX2xvY2soKTtcbiBcdHdoaWxlICgoc2tiID0gX19za2JfZGVxdWV1ZShcdTAwMjZxdWV1ZSkpKSB7XG4gXHRcdHN0cnVjdCBuZXQgKm5ldCA9IFhGUk1fVFJBTlNfU0tCX0NCKHNrYiktXHUwMDNlbmV0O1xuJiM0MztcdFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHNrYi1cdTAwM2VkZXY7XG4gXG4gXHRcdFhGUk1fVFJBTlNfU0tCX0NCKHNrYiktXHUwMDNlZmluaXNoKG5ldCwgTlVMTCwgc2tiKTtcbiYjNDM7XHRcdGlmIChkZXYpXG4mIzQzO1x0XHRcdGRldl9wdXQoZGV2KTtcbiBcdFx0cHV0X25ldChuZXQpO1xuIFx0fVxuJiM0MztcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0bG9jYWxfYmhfZW5hYmxlKCk7XG4gfVxuIFxuQEAgLTgyMSwxMiAmIzQzOzgzMSwxOCBAQCBpbnQgeGZybV90cmFuc19xdWV1ZV9uZXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0aWYgKHNrYl9xdWV1ZV9sZW4oXHUwMDI2dHJhbnMtXHUwMDNlcXVldWUpIFx1MDAzZT0gUkVBRF9PTkNFKG5ldF9ob3RkYXRhLm1heF9iYWNrbG9nKSlcbiBcdFx0cmV0dXJuIC1FTk9CVUZTO1xuIFxuJiM0MztcdGlmIChza2JfZHN0KHNrYikgXHUwMDI2XHUwMDI2ICFza2JfZHN0X2ZvcmNlKHNrYikpXG4mIzQzO1x0XHRyZXR1cm4gLUVIT1NUVU5SRUFDSDtcbiYjNDM7XG4gXHRCVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCB4ZnJtX3RyYW5zX2NiKSBcdTAwM2Ugc2l6ZW9mKHNrYi1cdTAwM2VjYikpO1xuIFxuIFx0aG9sZF9uZXQgPSBtYXliZV9nZXRfbmV0KG5ldCk7XG4gXHRpZiAoIWhvbGRfbmV0KVxuIFx0XHRyZXR1cm4gLUVOT0RFVjtcbiBcbiYjNDM7XHRpZiAoc2tiLVx1MDAzZWRldilcbiYjNDM7XHRcdGRldl9ob2xkKHNrYi1cdTAwM2VkZXYpO1xuJiM0MztcbiBcdFhGUk1fVFJBTlNfU0tCX0NCKHNrYiktXHUwMDNlZmluaXNoID0gZmluaXNoO1xuIFx0WEZSTV9UUkFOU19TS0JfQ0Ioc2tiKS1cdTAwM2VuZXQgPSBob2xkX25ldDtcbiBcdHNwaW5fbG9ja19iaChcdTAwMjZ0cmFucy1cdTAwM2VxdWV1ZV9sb2NrKTtcbmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX2lwdGZzLmMgYi9uZXQveGZybS94ZnJtX2lwdGZzLmNcbmluZGV4IDU5N2FlZGVhYzI2ZWIuLjY5MjA5NDBhMzViNDkgMTAwNjQ0XG4tLS0gYS9uZXQveGZybS94ZnJtX2lwdGZzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC94ZnJtL3hmcm1faXB0ZnMuY1xuQEAgLTQxNiw2ICYjNDM7NDE2LDE0IEBAIHN0YXRpYyBib29sIGlwdGZzX3NrYl9jYW5fYWRkX2ZyYWdzKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4gXHRpZiAoc2tiX2hhc19mcmFnX2xpc3Qoc2tiKSB8fCBza2ItXHUwMDNlcHBfcmVjeWNsZSAhPSB3YWxrLVx1MDAzZXBwX3JlY3ljbGUpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbiYjNDM7XHQvKiBSZWplY3QgYW4gQG9mZnNldCB0aGF0IGlzIGF0IG9yIGJleW9uZCB0aGUgZW5kIG9mIHRoZSB3YWxrJiMzOTtzIGRhdGFcbiYjNDM7XHQgKiBiZWZvcmUgY2FsbGluZyBpcHRmc19za2JfcmVzZXRfZnJhZ193YWxrKCksIHdob3NlIGZyYWdtZW50LWFkdmFuY2VcbiYjNDM7XHQgKiBsb29wIGlzIG90aGVyd2lzZSB1bmJvdW5kZWQgYW5kIHdvdWxkIGluZGV4IHBhc3Qgd2Fsay1cdTAwM2VmcmFnc1tdLlxuJiM0MztcdCAqIFRoaXMgbWlycm9ycyB0aGUgZ3VhcmQgYWxyZWFkeSBwcmVzZW50IGluIGlwdGZzX3NrYl9hZGRfZnJhZ3MoKS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIXdhbGstXHUwMDNlbnJfZnJhZ3MgfHwgb2Zmc2V0IFx1MDAzZT0gd2Fsay1cdTAwM2V0b3RhbCAmIzQzOyB3YWxrLVx1MDAzZWluaXRpYWxfb2Zmc2V0KVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiBcdC8qIE1ha2Ugb2Zmc2V0IHJlbGF0aXZlIHRvIGN1cnJlbnQgZnJhZyBhZnRlciBzZXR0aW5nIHRoYXQgKi9cbiBcdG9mZnNldCA9IGlwdGZzX3NrYl9yZXNldF9mcmFnX3dhbGsod2Fsaywgb2Zmc2V0KTtcbiBcbkBAIC04MjAsOCAmIzQzOzgyOCw4IEBAIHN0YXRpYyB1MzIgaXB0ZnNfcmVhc3NlbV9jb250KHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsIHU2NCBzZXEsXG4gXHRcdCAqIGFsbG9jYXRlIGFuIGluIHByb2dyZXNzIHNrYlxuIFx0XHQgKi9cbiBcdFx0aXByZW1haW4gPSBfX2lwdGZzX2lwbGVuKHh0ZnMtXHUwMDNlcmFfcnVudCk7XG4tXHRcdGlmIChpcHJlbWFpbiBcdTAwM2Mgc2l6ZW9mKHh0ZnMtXHUwMDNlcmFfcnVudCkpIHtcbi1cdFx0XHQvKiBsZW5ndGggaGFzIHRvIGJlIGF0IGxlYXN0IHJ1bnRzaXplIGxhcmdlICovXG4mIzQzO1x0XHRpZiAoaXByZW1haW4gXHUwMDNjIF9faXB0ZnNfaXBobGVuKHh0ZnMtXHUwMDNlcmFfcnVudCkpIHtcbiYjNDM7XHRcdFx0LyogbGVuZ3RoIGhhcyB0byBiZSBhdCBsZWFzdCB0aGUgSVAgaGVhZGVyIHNpemUgKi9cbiBcdFx0XHRYRlJNX0lOQ19TVEFUUyh4c19uZXQoeHRmcy1cdTAwM2V4KSxcbiBcdFx0XHRcdCAgICAgICBMSU5VWF9NSUJfWEZSTUlOSVBURlNFUlJPUik7XG4gXHRcdFx0Z290byBhYmFuZG9uO1xuZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1fcG9saWN5LmMgYi9uZXQveGZybS94ZnJtX3BvbGljeS5jXG5pbmRleCA5MzJhMzEzYjk0NjBhLi41MTNjOWYyMjgzMzQ3IDEwMDY0NFxuLS0tIGEvbmV0L3hmcm0veGZybV9wb2xpY3kuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3hmcm0veGZybV9wb2xpY3kuY1xuQEAgLTI3NzAsOSAmIzQzOzI3NzAsMTIgQEAgc3RhdGljIHN0cnVjdCBkc3RfZW50cnkgKnhmcm1fYnVuZGxlX2NyZWF0ZShzdHJ1Y3QgeGZybV9wb2xpY3kgKnBvbGljeSxcbiBcdHhkc3QwLVx1MDAzZXBhdGggPSBkc3Q7XG4gXG4gXHRlcnIgPSAtRU5PREVWO1xuLVx0ZGV2ID0gZHN0LVx1MDAzZWRldjtcbi1cdGlmICghZGV2KVxuJiM0MztcdHJjdV9yZWFkX2xvY2soKTtcbiYjNDM7XHRkZXYgPSBkc3RfZGV2X3JjdShkc3QpO1xuJiM0MztcdGlmICghZGV2KSB7XG4mIzQzO1x0XHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdFx0Z290byBmcmVlX2RzdDtcbiYjNDM7XHR9XG4gXG4gXHR4ZnJtX2luaXRfcGF0aCh4ZHN0MCwgZHN0LCBuZmhlYWRlcl9sZW4pO1xuIFx0eGZybV9pbml0X3BtdHUoYnVuZGxlLCBueCk7XG5AQCAtMjc4MCw4ICYjNDM7Mjc4MywxMCBAQCBzdGF0aWMgc3RydWN0IGRzdF9lbnRyeSAqeGZybV9idW5kbGVfY3JlYXRlKHN0cnVjdCB4ZnJtX3BvbGljeSAqcG9saWN5LFxuIFx0Zm9yICh4ZHN0X3ByZXYgPSB4ZHN0MDsgeGRzdF9wcmV2ICE9IChzdHJ1Y3QgeGZybV9kc3QgKilkc3Q7XG4gXHQgICAgIHhkc3RfcHJldiA9IChzdHJ1Y3QgeGZybV9kc3QgKikgeGZybV9kc3RfY2hpbGQoXHUwMDI2eGRzdF9wcmV2LVx1MDAzZXUuZHN0KSkge1xuIFx0XHRlcnIgPSB4ZnJtX2ZpbGxfZHN0KHhkc3RfcHJldiwgZGV2LCBmbCk7XG4tXHRcdGlmIChlcnIpXG4mIzQzO1x0XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0XHRcdGdvdG8gZnJlZV9kc3Q7XG4mIzQzO1x0XHR9XG4gXG4gXHRcdHhkc3RfcHJldi1cdTAwM2V1LmRzdC5oZWFkZXJfbGVuID0gaGVhZGVyX2xlbjtcbiBcdFx0eGRzdF9wcmV2LVx1MDAzZXUuZHN0LnRyYWlsZXJfbGVuID0gdHJhaWxlcl9sZW47XG5AQCAtMjc4OSw2ICYjNDM7Mjc5NCw3IEBAIHN0YXRpYyBzdHJ1Y3QgZHN0X2VudHJ5ICp4ZnJtX2J1bmRsZV9jcmVhdGUoc3RydWN0IHhmcm1fcG9saWN5ICpwb2xpY3ksXG4gXHRcdHRyYWlsZXJfbGVuIC09IHhkc3RfcHJldi1cdTAwM2V1LmRzdC54ZnJtLVx1MDAzZXByb3BzLnRyYWlsZXJfbGVuO1xuIFx0fVxuIFxuJiM0MztcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0cmV0dXJuIFx1MDAyNnhkc3QwLVx1MDAzZXUuZHN0O1xuIFxuIHB1dF9zdGF0ZXM6XG5AQCAtMzA1OCwxMSAmIzQzOzMwNjQsMTUgQEAgc3RhdGljIHN0cnVjdCB4ZnJtX2RzdCAqeGZybV9jcmVhdGVfZHVtbXlfYnVuZGxlKHN0cnVjdCBuZXQgKm5ldCxcbiBcdHhmcm1faW5pdF9wYXRoKChzdHJ1Y3QgeGZybV9kc3QgKilkc3QxLCBkc3QsIDApO1xuIFxuIFx0ZXJyID0gLUVOT0RFVjtcbi1cdGRldiA9IGRzdC1cdTAwM2VkZXY7XG4tXHRpZiAoIWRldilcbiYjNDM7XHRyY3VfcmVhZF9sb2NrKCk7XG4mIzQzO1x0ZGV2ID0gZHN0X2Rldl9yY3UoZHN0KTtcbiYjNDM7XHRpZiAoIWRldikge1xuJiM0MztcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXHRcdGdvdG8gZnJlZV9kc3Q7XG4mIzQzO1x0fVxuIFxuIFx0ZXJyID0geGZybV9maWxsX2RzdCh4ZHN0LCBkZXYsIGZsKTtcbiYjNDM7XHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdGlmIChlcnIpXG4gXHRcdGdvdG8gZnJlZV9kc3Q7XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV9zdGF0ZS5jIGIvbmV0L3hmcm0veGZybV9zdGF0ZS5jXG5pbmRleCAzNmE0ZjY3OTNlZGVmLi5lNDVhYTFlZDViOTY1IDEwMDY0NFxuLS0tIGEvbmV0L3hmcm0veGZybV9zdGF0ZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQveGZybS94ZnJtX3N0YXRlLmNcbkBAIC0yMjYsNiAmIzQzOzIyNiw3IEBAIHN0YXRpYyBzdHJ1Y3QgeGZybV9zdGF0ZV9hZmluZm8gX19yY3UgKnhmcm1fc3RhdGVfYWZpbmZvW05QUk9UT107XG4gXG4gc3RhdGljIERFRklORV9TUElOTE9DSyh4ZnJtX3N0YXRlX2djX2xvY2spO1xuIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soeGZybV9zdGF0ZV9kZXZfZ2NfbG9jayk7XG4mIzQzO3N0YXRpYyBERUZJTkVfTVVURVgoeGZybV9zdGF0ZV9nY19tdXRleCk7XG4gXG4gaW50IF9feGZybV9zdGF0ZV9kZWxldGUoc3RydWN0IHhmcm1fc3RhdGUgKngpO1xuIFxuQEAgLTYzMiw4ICYjNDM7NjMzLDEwIEBAIHN0YXRpYyB2b2lkIHhmcm1fc3RhdGVfZ2NfdGFzayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gXG4gXHRzeW5jaHJvbml6ZV9yY3UoKTtcbiBcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNnhmcm1fc3RhdGVfZ2NfbXV0ZXgpO1xuIFx0aGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh4LCB0bXAsIFx1MDAyNmdjX2xpc3QsIGdjbGlzdClcbiBcdFx0eGZybV9zdGF0ZV9nY19kZXN0cm95KHgpO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZ4ZnJtX3N0YXRlX2djX211dGV4KTtcbiB9XG4gXG4gc3RhdGljIGVudW0gaHJ0aW1lcl9yZXN0YXJ0IHhmcm1fdGltZXJfaGFuZGxlcihzdHJ1Y3QgaHJ0aW1lciAqbWUpXG5AQCAtODIzLDkgJiM0Mzs4MjYsOSBAQCBpbnQgX194ZnJtX3N0YXRlX2RlbGV0ZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeClcbiBcdFx0aWYgKCFobGlzdF91bmhhc2hlZChcdTAwMjZ4LVx1MDAzZWJ5c2VxKSlcbiBcdFx0XHRobGlzdF9kZWxfaW5pdF9yY3UoXHUwMDI2eC1cdTAwM2VieXNlcSk7XG4gXHRcdGlmICghaGxpc3RfdW5oYXNoZWQoXHUwMDI2eC1cdTAwM2VzdGF0ZV9jYWNoZSkpXG4tXHRcdFx0aGxpc3RfZGVsX3JjdShcdTAwMjZ4LVx1MDAzZXN0YXRlX2NhY2hlKTtcbiYjNDM7XHRcdFx0aGxpc3RfZGVsX2luaXRfcmN1KFx1MDAyNngtXHUwMDNlc3RhdGVfY2FjaGUpO1xuIFx0XHRpZiAoIWhsaXN0X3VuaGFzaGVkKFx1MDAyNngtXHUwMDNlc3RhdGVfY2FjaGVfaW5wdXQpKVxuLVx0XHRcdGhsaXN0X2RlbF9yY3UoXHUwMDI2eC1cdTAwM2VzdGF0ZV9jYWNoZV9pbnB1dCk7XG4mIzQzO1x0XHRcdGhsaXN0X2RlbF9pbml0X3JjdShcdTAwMjZ4LVx1MDAzZXN0YXRlX2NhY2hlX2lucHV0KTtcbiBcbiBcdFx0aWYgKCFobGlzdF91bmhhc2hlZChcdTAwMjZ4LVx1MDAzZWJ5c3BpKSlcbiBcdFx0XHRobGlzdF9kZWxfaW5pdF9yY3UoXHUwMDI2eC1cdTAwM2VieXNwaSk7XG5AQCAtMTAwMCw2ICYjNDM7MTAwMyw3IEBAIGludCB4ZnJtX2Rldl9zdGF0ZV9mbHVzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGJvb2wgdGFza192YWxpXG4gb3V0OlxuIFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bmV0LVx1MDAzZXhmcm0ueGZybV9zdGF0ZV9sb2NrKTtcbiBcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNnhmcm1fc3RhdGVfZ2NfbXV0ZXgpO1xuIFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnhmcm1fc3RhdGVfZGV2X2djX2xvY2spO1xuIHJlc3RhcnRfZ2M6XG4gXHRobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHgsIHRtcCwgXHUwMDI2eGZybV9zdGF0ZV9kZXZfZ2NfbGlzdCwgZGV2X2djbGlzdCkge1xuQEAgLTEwMTQsNiAmIzQzOzEwMTgsNyBAQCBpbnQgeGZybV9kZXZfc3RhdGVfZmx1c2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIHRhc2tfdmFsaVxuIFxuIFx0fVxuIFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2eGZybV9zdGF0ZV9kZXZfZ2NfbG9jayk7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnhmcm1fc3RhdGVfZ2NfbXV0ZXgpO1xuIFxuIFx0eGZybV9mbHVzaF9nYygpO1xuIFxuZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1fdXNlci5jIGIvbmV0L3hmcm0veGZybV91c2VyLmNcbmluZGV4IDYyNjZhOTJjZjMwMjAuLmEyNTg3YzdlNzk2YjQgMTAwNjQ0XG4tLS0gYS9uZXQveGZybS94ZnJtX3VzZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3hmcm0veGZybV91c2VyLmNcbkBAIC0xODc3LDcgJiM0MzsxODc3LDYgQEAgc3RhdGljIGludCB4ZnJtX2FsbG9jX3VzZXJzcGkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG4gXHRzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChza2ItXHUwMDNlc2spO1xuIFx0c3RydWN0IHhmcm1fc3RhdGUgKng7XG4gXHRzdHJ1Y3QgeGZybV91c2Vyc3BpX2luZm8gKnA7XG4tXHRzdHJ1Y3QgeGZybV90cmFuc2xhdG9yICp4dHI7XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqcmVzcF9za2I7XG4gXHR4ZnJtX2FkZHJlc3NfdCAqZGFkZHI7XG4gXHRpbnQgZmFtaWx5O1xuQEAgLTE5NDMsMTcgJiM0MzsxOTQyLDYgQEAgc3RhdGljIGludCB4ZnJtX2FsbG9jX3VzZXJzcGkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuLVx0eHRyID0geGZybV9nZXRfdHJhbnNsYXRvcigpO1xuLVx0aWYgKHh0cikge1xuLVx0XHRlcnIgPSB4dHItXHUwMDNlYWxsb2NfY29tcGF0KHNrYiwgbmxtc2dfaGRyKHNrYikpO1xuLVxuLVx0XHR4ZnJtX3B1dF90cmFuc2xhdG9yKHh0cik7XG4tXHRcdGlmIChlcnIpIHtcbi1cdFx0XHRrZnJlZV9za2IocmVzcF9za2IpO1xuLVx0XHRcdGdvdG8gb3V0O1xuLVx0XHR9XG4tXHR9XG4tXG4gXHRlcnIgPSBubG1zZ191bmljYXN0KHhmcm1fbmV0X25sc2sobmV0LCBza2IpLCByZXNwX3NrYiwgTkVUTElOS19DQihza2IpLnBvcnRpZCk7XG4gXG4gb3V0OlxuQEAgLTMzMzcsNyAmIzQzOzMzMjUsMTEgQEAgc3RhdGljIGludCB4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZShzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRcdHJldHVybiBlcnI7XG4gXHR9XG4gXG4tXHRyZXR1cm4geGZybV9ubG1zZ19tdWx0aWNhc3QobmV0LCBza2IsIDAsIFhGUk1OTEdSUF9NSUdSQVRFKTtcbiYjNDM7XHRyY3VfcmVhZF9sb2NrKCk7XG4mIzQzO1x0ZXJyID0geGZybV9ubG1zZ19tdWx0aWNhc3QobmV0LCBza2IsIDAsIFhGUk1OTEdSUF9NSUdSQVRFKTtcbiYjNDM7XHRyY3VfcmVhZF91bmxvY2soKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiB9XG4gXG4gc3RhdGljIGludCB4ZnJtX2RvX21pZ3JhdGVfc3RhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTM6NTM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SU5FVCYjMzQ7LAogICAgJiMzNDtJUFY2JiMzNDssCiAgICAmIzM0O1hGUk0mIzM0OywKICAgICYjMzQ7SU5FVF9FU1AmIzM0OywKICAgICYjMzQ7SU5FVDZfRVNQJiMzNDssCiAgICAmIzM0O0lORVRfRVNQSU5UQ1AmIzM0OywKICAgICYjMzQ7SU5FVDZfRVNQSU5UQ1AmIzM0OywKICAgICYjMzQ7WEZSTV9VU0VSJiMzNDssCiAgICAmIzM0O1hGUk1fSVBURlMmIzM0OywKICAgICYjMzQ7WEZSTV9NSUdSQVRFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZXNwX291dHB1dF9oZWFkJiMzNDssCiAgICAmIzM0O2VzcDZfb3V0cHV0X2hlYWQmIzM0OywKICAgICYjMzQ7eGZybTZfbG9jYWxfcnhwbXR1JiMzNDssCiAgICAmIzM0O3hmcm02X2xvY2FsX2Vycm9yJiMzNDssCiAgICAmIzM0O2VzcGludGNwX3JjdiYjMzQ7LAogICAgJiMzNDtoYW5kbGVfZXNwJiMzNDssCiAgICAmIzM0O3hmcm1faW5wdXQmIzM0OywKICAgICYjMzQ7eGZybV90cmFuc19yZWluamVjdCYjMzQ7LAogICAgJiMzNDt4ZnJtX3RyYW5zX3F1ZXVlX25ldCYjMzQ7LAogICAgJiMzNDtpcHRmc19za2JfY2FuX2FkZF9mcmFncyYjMzQ7LAogICAgJiMzNDtpcHRmc19yZWFzc2VtX2NvbnQmIzM0OywKICAgICYjMzQ7eGZybV9idW5kbGVfY3JlYXRlJiMzNDssCiAgICAmIzM0O3hmcm1fY3JlYXRlX2R1bW15X2J1bmRsZSYjMzQ7LAogICAgJiMzNDt4ZnJtX3N0YXRlX2djX3Rhc2smIzM0OywKICAgICYjMzQ7X194ZnJtX3N0YXRlX2RlbGV0ZSYjMzQ7LAogICAgJiMzNDt4ZnJtX2Rldl9zdGF0ZV9mbHVzaCYjMzQ7LAogICAgJiMzNDt4ZnJtX2FsbG9jX3VzZXJzcGkmIzM0OywKICAgICYjMzQ7eGZybV9zZW5kX21pZ3JhdGVfc3RhdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggdG91Y2hlcyBjb3JlIElQc2VjIChYRlJNKSBJUHY0L0lQdjYgbmV0d29ya2luZyBsb2dpYywgaW5jbHVkaW5nIEVTUCBvdXRwdXQgemVyby1jb3B5IGRvd25ncmFkZXMsIElQdjYgWEZSTSBlcnJvciByZXBvcnRpbmcgZm9yIG5vbi1mdWxsIHNvY2tldHMsIEVTUC1pbi1UQ1AgdHJhbnNwb3J0IGhlYWRlciByZXNldHRpbmcsIFhGUk0gaW5wdXQgcGFja2V0IHByb3RvIGRpc3BhdGNoIGFuZCBhc3luYyBkZXYtcmVmIHJlaW5qZWN0aW9uIGhhbmRsaW5nLCBJUC1URlMgZnJhZ21lbnQgd2FsayBib3VuZHMgY2hlY2tzLCBwb2xpY3kgYnVuZGxlIFJDVSBkZXZpY2UgcmVzb2x1dGlvbiwgc3RhdGUgR0Mgc2VyaWFsaXphdGlvbiB1bmRlciBtdXRleCwgYW5kIFhGUk0gdXNlciBuZXRsaW5rIGhhbmRsZXJzLiBBbGwgY2hhbmdlcyBhcmUgaW4gcmVhY2hhYmxlIG5ldHdvcmtpbmcgcGF0aHMgZXhlcmNpc2FibGUgdmlhIHNvY2tldHMgYW5kIFhGUk0gbmV0bGluayBpbnRlcmZhY2VzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgY2UwMTRkYTE1M2Q4ZGNlOGMzM2UzNmZhOTU3ZjEwMTM5NjNmNmUxOQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gU2VwIDcgMTM6NTM6NTAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9lc3A0LmMgYi9uZXQvaXB2NC9lc3A0LmMKaW5kZXggYTZjMThhZWE3NDk4ZC4uZTc2ZGI1ODE3ZTc4ZSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvZXNwNC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L2VzcDQuYwpAQCAtNDQxLDYgJiM0Mzs0NDEsMTIgQEAgaW50IGVzcF9vdXRwdXRfaGVhZChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGVzcF9pbmZvICoKIAogCQkJZXNwLSZndDtpbnBsYWNlID0gZmFsc2U7CiAKJiM0MzsJCQkvKiBUYWtlIHJlYWwgcGFnZSByZWZzIGFuZCBjbGVhciBTS0JGTF9NQU5BR0VEX0ZSQUdfUkVGUyBiZWZvcmUKJiM0MzsJCQkgKiB3ZSBtdXRhdGUgdGhlIGZyYWcgYXJyYXksIHNvIHRoZSBwZXItZnJhZyB1bnJlZiBzdGF5cyBiYWxhbmNlZAomIzQzOwkJCSAqIGZvciB6ZXJvY29weSBtYW5hZ2VkIGZyYWdzIChzZWUgX19pcF9hcHBlbmRfZGF0YSgpKS4KJiM0MzsJCQkgKi8KJiM0MzsJCQlza2JfemNvcHlfZG93bmdyYWRlX21hbmFnZWQoc2tiKTsKJiM0MzsKIAkJCWFsbG9jc2l6ZSA9IEFMSUdOKHRhaWxlbiwgTDFfQ0FDSEVfQllURVMpOwogCiAJCQlzcGluX2xvY2tfYmgoJmFtcDt4LSZndDtsb2NrKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2VzcDYuYyBiL25ldC9pcHY2L2VzcDYuYwppbmRleCA3MmVjMGQ3ZDExMjA5Li5iMWM5YjM2Zjc2ZGM0IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9lc3A2LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvZXNwNi5jCkBAIC00NzEsNiAmIzQzOzQ3MSwxMiBAQCBpbnQgZXNwNl9vdXRwdXRfaGVhZChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGVzcF9pbmZvCiAKIAkJCWVzcC0mZ3Q7aW5wbGFjZSA9IGZhbHNlOwogCiYjNDM7CQkJLyogVGFrZSByZWFsIHBhZ2UgcmVmcyBhbmQgY2xlYXIgU0tCRkxfTUFOQUdFRF9GUkFHX1JFRlMgYmVmb3JlCiYjNDM7CQkJICogd2UgbXV0YXRlIHRoZSBmcmFnIGFycmF5LCBzbyB0aGUgcGVyLWZyYWcgdW5yZWYgc3RheXMgYmFsYW5jZWQKJiM0MzsJCQkgKiBmb3IgemVyb2NvcHkgbWFuYWdlZCBmcmFncyAoc2VlIF9faXBfYXBwZW5kX2RhdGEoKSkuCiYjNDM7CQkJICovCiYjNDM7CQkJc2tiX3pjb3B5X2Rvd25ncmFkZV9tYW5hZ2VkKHNrYik7CiYjNDM7CiAJCQlhbGxvY3NpemUgPSBBTElHTih0YWlsZW4sIEwxX0NBQ0hFX0JZVEVTKTsKIAogCQkJc3Bpbl9sb2NrX2JoKCZhbXA7eC0mZ3Q7bG9jayk7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni94ZnJtNl9vdXRwdXQuYyBiL25ldC9pcHY2L3hmcm02X291dHB1dC5jCmluZGV4IDUxMmJkYWYxMzY5OTcuLjQ0YjIyMWEwOWEwYzggMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3hmcm02X291dHB1dC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L3hmcm02X291dHB1dC5jCkBAIC0xOSw3ICYjNDM7MTksMTAgQEAKIHZvaWQgeGZybTZfbG9jYWxfcnhwbXR1KHN0cnVjdCBza19idWZmICpza2IsIHUzMiBtdHUpCiB7CiAJc3RydWN0IGZsb3dpNiBmbDY7Ci0Jc3RydWN0IHNvY2sgKnNrID0gc2tiLSZndDtzazsKJiM0MzsJc3RydWN0IHNvY2sgKnNrID0gc2tiX3RvX2Z1bGxfc2soc2tiKTsKJiM0MzsKJiM0MzsJaWYgKCFzaykKJiM0MzsJCXJldHVybjsKIAogCWZsNi5mbG93aTZfb2lmID0gc2stJmd0O3NrX2JvdW5kX2Rldl9pZjsKIAlmbDYuZGFkZHIgPSBpcHY2X2hkcihza2IpLSZndDtkYWRkcjsKQEAgLTMxLDcgJiM0MzszNCwxMCBAQCB2b2lkIHhmcm02X2xvY2FsX2Vycm9yKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBtdHUpCiB7CiAJc3RydWN0IGZsb3dpNiBmbDY7CiAJY29uc3Qgc3RydWN0IGlwdjZoZHIgKmhkcjsKLQlzdHJ1Y3Qgc29jayAqc2sgPSBza2ItJmd0O3NrOwomIzQzOwlzdHJ1Y3Qgc29jayAqc2sgPSBza2JfdG9fZnVsbF9zayhza2IpOwomIzQzOwomIzQzOwlpZiAoIXNrKQomIzQzOwkJcmV0dXJuOwogCiAJaGRyID0gc2tiLSZndDtlbmNhcHN1bGF0aW9uID8gaW5uZXJfaXB2Nl9oZHIoc2tiKSA6IGlwdjZfaGRyKHNrYik7CiAJZmw2LmZsNl9kcG9ydCA9IGluZXRfc2soc2spLSZndDtpbmV0X2Rwb3J0OwpkaWZmIC0tZ2l0IGEvbmV0L3hmcm0vZXNwaW50Y3AuYyBiL25ldC94ZnJtL2VzcGludGNwLmMKaW5kZXggNjc0YWVkYzVhZjVhMi4uM2U3MmI5ZjA2N2I5YiAxMDA2NDQKLS0tIGEvbmV0L3hmcm0vZXNwaW50Y3AuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQveGZybS9lc3BpbnRjcC5jCkBAIC0zMCw3ICYjNDM7MzAsMTEgQEAgc3RhdGljIHZvaWQgaGFuZGxlX2VzcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc29jayAqc2spCiB7CiAJc3RydWN0IHRjcF9za2JfY2IgKnRjcF9jYiA9IChzdHJ1Y3QgdGNwX3NrYl9jYiAqKXNrYi0mZ3Q7Y2I7CiAKLQlza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcihza2IpOwomIzQzOwlpZiAoIXNrYl9yZXNldF90cmFuc3BvcnRfaGVhZGVyX2NhcmVmdWwoc2tiKSkgewomIzQzOwkJWEZSTV9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBMSU5VWF9NSUJfWEZSTUlORVJST1IpOwomIzQzOwkJa2ZyZWVfc2tiKHNrYik7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KIAogCS8qIHJlc3RvcmUgSVAgQ0IsIHdlIG5lZWQgYXQgbGVhc3QgSVA2Q0ItJmd0O25ob2ZmICovCiAJbWVtbW92ZShza2ItJmd0O2NiLCAmYW1wO3RjcF9jYi0mZ3Q7aGVhZGVyLCBzaXplb2YodGNwX2NiLSZndDtoZWFkZXIpKTsKZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1faW5wdXQuYyBiL25ldC94ZnJtL3hmcm1faW5wdXQuYwppbmRleCBlZWNhYjMzN2JkMGE3Li41ZWQ4N2Q1MTM5MmE1IDEwMDY0NAotLS0gYS9uZXQveGZybS94ZnJtX2lucHV0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3hmcm0veGZybV9pbnB1dC5jCkBAIC00NzQsNiAmIzQzOzQ3NCw3IEBAIGludCB4ZnJtX2lucHV0KHN0cnVjdCBza19idWZmICpza2IsIGludCBuZXh0aGRyLCBfX2JlMzIgc3BpLCBpbnQgZW5jYXBfdHlwZSkKIAlzdHJ1Y3QgeGZybV9zdGF0ZSAqeCA9IE5VTEw7CiAJeGZybV9hZGRyZXNzX3QgKmRhZGRyOwogCXUzMiBtYXJrID0gc2tiLSZndDttYXJrOwomIzQzOwl1OCB4ZnJtX3Byb3RvID0gbmV4dGhkcjsKIAl1bnNpZ25lZCBpbnQgZmFtaWx5ID0gQUZfVU5TUEVDOwogCWludCBkZWNhcHMgPSAwOwogCWludCBhc3luYyA9IDA7CkBAIC00ODUsNiAmIzQzOzQ4Niw3IEBAIGludCB4ZnJtX2lucHV0KHN0cnVjdCBza19idWZmICpza2IsIGludCBuZXh0aGRyLCBfX2JlMzIgc3BpLCBpbnQgZW5jYXBfdHlwZSkKIAlpZiAoZW5jYXBfdHlwZSAmbHQ7IDAgfHwgKHhvICZhbXA7JmFtcDsgKHhvLSZndDtmbGFncyAmYW1wOyBYRlJNX0dSTyB8fCBlbmNhcF90eXBlID09IDAgfHwKIAkJCQkgICAgICBlbmNhcF90eXBlID09IFVEUF9FTkNBUF9FU1BJTlVEUCkpKSB7CiAJCXggPSB4ZnJtX2lucHV0X3N0YXRlKHNrYik7CiYjNDM7CQl4ZnJtX3Byb3RvID0geC0mZ3Q7dHlwZSA/IHgtJmd0O3R5cGUtJmd0O3Byb3RvIDogbmV4dGhkcjsKIAogCQlpZiAodW5saWtlbHkoeC0mZ3Q7a20uc3RhdGUgIT0gWEZSTV9TVEFURV9WQUxJRCkpIHsKIAkJCWlmICh4LSZndDtrbS5zdGF0ZSA9PSBYRlJNX1NUQVRFX0FDUSkKQEAgLTU5MiwxMSAmIzQzOzU5NCwxMyBAQCBpbnQgeGZybV9pbnB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbmV4dGhkciwgX19iZTMyIHNwaSwgaW50IGVuY2FwX3R5cGUpCiAKIAkJeCA9IHhmcm1faW5wdXRfc3RhdGVfbG9va3VwKG5ldCwgbWFyaywgZGFkZHIsIHNwaSwgbmV4dGhkciwgZmFtaWx5KTsKIAkJaWYgKHggPT0gTlVMTCkgewomIzQzOwkJCXhmcm1fcHJvdG8gPSBuZXh0aGRyOwogCQkJc2VjcGF0aF9yZXNldChza2IpOwogCQkJWEZSTV9JTkNfU1RBVFMobmV0LCBMSU5VWF9NSUJfWEZSTUlOTk9TVEFURVMpOwogCQkJeGZybV9hdWRpdF9zdGF0ZV9ub3Rmb3VuZChza2IsIGZhbWlseSwgc3BpLCBzZXEpOwogCQkJZ290byBkcm9wOwogCQl9CiYjNDM7CQl4ZnJtX3Byb3RvID0geC0mZ3Q7dHlwZSA/IHgtJmd0O3R5cGUtJmd0O3Byb3RvIDogbmV4dGhkcjsKIAogCQlpZiAodW5saWtlbHkoeC0mZ3Q7ZGlyICZhbXA7JmFtcDsgeC0mZ3Q7ZGlyICE9IFhGUk1fU0FfRElSX0lOKSkgewogCQkJc2VjcGF0aF9yZXNldChza2IpOwpAQCAtNjA0LDYgJiM0Mzs2MDgsNyBAQCBpbnQgeGZybV9pbnB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbmV4dGhkciwgX19iZTMyIHNwaSwgaW50IGVuY2FwX3R5cGUpCiAJCQl4ZnJtX2F1ZGl0X3N0YXRlX25vdGZvdW5kKHNrYiwgZmFtaWx5LCBzcGksIHNlcSk7CiAJCQl4ZnJtX3N0YXRlX3B1dCh4KTsKIAkJCXggPSBOVUxMOwomIzQzOwkJCXhmcm1fcHJvdG8gPSBuZXh0aGRyOwogCQkJZ290byBkcm9wOwogCQl9CiAKQEAgLTcyOCw3ICYjNDM7NzMzLDcgQEAgaW50IHhmcm1faW5wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG5leHRoZHIsIF9fYmUzMiBzcGksIGludCBlbmNhcF90eXBlKQogCX0gd2hpbGUgKCFlcnIpOwogCiAJcmN1X3JlYWRfbG9jaygpOwotCWVyciA9IHhmcm1fcmN2X2NiKHNrYiwgZmFtaWx5LCB4LSZndDt0eXBlLSZndDtwcm90bywgMCk7CiYjNDM7CWVyciA9IHhmcm1fcmN2X2NiKHNrYiwgZmFtaWx5LCB4ZnJtX3Byb3RvLCAwKTsKIAlpZiAoZXJyKSB7CiAJCXJjdV9yZWFkX3VubG9jaygpOwogCQlnb3RvIGRyb3A7CkBAIC03NTMsNyAmIzQzOzc1OCw3IEBAIGludCB4ZnJtX2lucHV0KHN0cnVjdCBza19idWZmICpza2IsIGludCBuZXh0aGRyLCBfX2JlMzIgc3BpLCBpbnQgZW5jYXBfdHlwZSkKIAkJCXhmcm1fZ3JvID0geG8tJmd0O2ZsYWdzICZhbXA7IFhGUk1fR1JPOwogCiAJCWVyciA9IC1FQUZOT1NVUFBPUlQ7Ci0JCWFmaW5mbyA9IHhmcm1fc3RhdGVfYWZpbmZvX2dldF9yY3UoeC0mZ3Q7cHJvcHMuZmFtaWx5KTsKJiM0MzsJCWFmaW5mbyA9IHhmcm1fc3RhdGVfYWZpbmZvX2dldF9yY3UoZmFtaWx5KTsKIAkJaWYgKGxpa2VseShhZmluZm8pKQogCQkJZXJyID0gYWZpbmZvLSZndDt0cmFuc3BvcnRfZmluaXNoKHNrYiwgeGZybV9ncm8gfHwgYXN5bmMpOwogCQlpZiAoeGZybV9ncm8pIHsKQEAgLTc3Niw3ICYjNDM7NzgxLDcgQEAgaW50IHhmcm1faW5wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG5leHRoZHIsIF9fYmUzMiBzcGksIGludCBlbmNhcF90eXBlKQogZHJvcDoKIAlpZiAoYXN5bmMpCiAJCWRldl9wdXQoZGV2KTsKLQl4ZnJtX3Jjdl9jYihza2IsIGZhbWlseSwgeCAmYW1wOyZhbXA7IHgtJmd0O3R5cGUgPyB4LSZndDt0eXBlLSZndDtwcm90byA6IG5leHRoZHIsIC0xKTsKJiM0MzsJeGZybV9yY3ZfY2Ioc2tiLCBmYW1pbHksIHhmcm1fcHJvdG8sIC0xKTsKIAlrZnJlZV9za2Ioc2tiKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTgwMCwxMiAmIzQzOzgwNSwxNyBAQCBzdGF0aWMgdm9pZCB4ZnJtX3RyYW5zX3JlaW5qZWN0KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIAlzcGluX3VubG9ja19iaCgmYW1wO3RyYW5zLSZndDtxdWV1ZV9sb2NrKTsKIAogCWxvY2FsX2JoX2Rpc2FibGUoKTsKJiM0MzsJcmN1X3JlYWRfbG9jaygpOwogCXdoaWxlICgoc2tiID0gX19za2JfZGVxdWV1ZSgmYW1wO3F1ZXVlKSkpIHsKIAkJc3RydWN0IG5ldCAqbmV0ID0gWEZSTV9UUkFOU19TS0JfQ0Ioc2tiKS0mZ3Q7bmV0OwomIzQzOwkJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHNrYi0mZ3Q7ZGV2OwogCiAJCVhGUk1fVFJBTlNfU0tCX0NCKHNrYiktJmd0O2ZpbmlzaChuZXQsIE5VTEwsIHNrYik7CiYjNDM7CQlpZiAoZGV2KQomIzQzOwkJCWRldl9wdXQoZGV2KTsKIAkJcHV0X25ldChuZXQpOwogCX0KJiM0MzsJcmN1X3JlYWRfdW5sb2NrKCk7CiAJbG9jYWxfYmhfZW5hYmxlKCk7CiB9CiAKQEAgLTgyMSwxMiAmIzQzOzgzMSwxOCBAQCBpbnQgeGZybV90cmFuc19xdWV1ZV9uZXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCWlmIChza2JfcXVldWVfbGVuKCZhbXA7dHJhbnMtJmd0O3F1ZXVlKSAmZ3Q7PSBSRUFEX09OQ0UobmV0X2hvdGRhdGEubWF4X2JhY2tsb2cpKQogCQlyZXR1cm4gLUVOT0JVRlM7CiAKJiM0MzsJaWYgKHNrYl9kc3Qoc2tiKSAmYW1wOyZhbXA7ICFza2JfZHN0X2ZvcmNlKHNrYikpCiYjNDM7CQlyZXR1cm4gLUVIT1NUVU5SRUFDSDsKJiM0MzsKIAlCVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCB4ZnJtX3RyYW5zX2NiKSAmZ3Q7IHNpemVvZihza2ItJmd0O2NiKSk7CiAKIAlob2xkX25ldCA9IG1heWJlX2dldF9uZXQobmV0KTsKIAlpZiAoIWhvbGRfbmV0KQogCQlyZXR1cm4gLUVOT0RFVjsKIAomIzQzOwlpZiAoc2tiLSZndDtkZXYpCiYjNDM7CQlkZXZfaG9sZChza2ItJmd0O2Rldik7CiYjNDM7CiAJWEZSTV9UUkFOU19TS0JfQ0Ioc2tiKS0mZ3Q7ZmluaXNoID0gZmluaXNoOwogCVhGUk1fVFJBTlNfU0tCX0NCKHNrYiktJmd0O25ldCA9IGhvbGRfbmV0OwogCXNwaW5fbG9ja19iaCgmYW1wO3RyYW5zLSZndDtxdWV1ZV9sb2NrKTsKZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1faXB0ZnMuYyBiL25ldC94ZnJtL3hmcm1faXB0ZnMuYwppbmRleCA1OTdhZWRlYWMyNmViLi42OTIwOTQwYTM1YjQ5IDEwMDY0NAotLS0gYS9uZXQveGZybS94ZnJtX2lwdGZzLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3hmcm0veGZybV9pcHRmcy5jCkBAIC00MTYsNiAmIzQzOzQxNiwxNCBAQCBzdGF0aWMgYm9vbCBpcHRmc19za2JfY2FuX2FkZF9mcmFncyhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCWlmIChza2JfaGFzX2ZyYWdfbGlzdChza2IpIHx8IHNrYi0mZ3Q7cHBfcmVjeWNsZSAhPSB3YWxrLSZndDtwcF9yZWN5Y2xlKQogCQlyZXR1cm4gZmFsc2U7CiAKJiM0MzsJLyogUmVqZWN0IGFuIEBvZmZzZXQgdGhhdCBpcyBhdCBvciBiZXlvbmQgdGhlIGVuZCBvZiB0aGUgd2FsayYjMzk7cyBkYXRhCiYjNDM7CSAqIGJlZm9yZSBjYWxsaW5nIGlwdGZzX3NrYl9yZXNldF9mcmFnX3dhbGsoKSwgd2hvc2UgZnJhZ21lbnQtYWR2YW5jZQomIzQzOwkgKiBsb29wIGlzIG90aGVyd2lzZSB1bmJvdW5kZWQgYW5kIHdvdWxkIGluZGV4IHBhc3Qgd2Fsay0mZ3Q7ZnJhZ3NbXS4KJiM0MzsJICogVGhpcyBtaXJyb3JzIHRoZSBndWFyZCBhbHJlYWR5IHByZXNlbnQgaW4gaXB0ZnNfc2tiX2FkZF9mcmFncygpLgomIzQzOwkgKi8KJiM0MzsJaWYgKCF3YWxrLSZndDtucl9mcmFncyB8fCBvZmZzZXQgJmd0Oz0gd2Fsay0mZ3Q7dG90YWwgJiM0Mzsgd2Fsay0mZ3Q7aW5pdGlhbF9vZmZzZXQpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiAJLyogTWFrZSBvZmZzZXQgcmVsYXRpdmUgdG8gY3VycmVudCBmcmFnIGFmdGVyIHNldHRpbmcgdGhhdCAqLwogCW9mZnNldCA9IGlwdGZzX3NrYl9yZXNldF9mcmFnX3dhbGsod2Fsaywgb2Zmc2V0KTsKIApAQCAtODIwLDggJiM0Mzs4MjgsOCBAQCBzdGF0aWMgdTMyIGlwdGZzX3JlYXNzZW1fY29udChzdHJ1Y3QgeGZybV9pcHRmc19kYXRhICp4dGZzLCB1NjQgc2VxLAogCQkgKiBhbGxvY2F0ZSBhbiBpbiBwcm9ncmVzcyBza2IKIAkJICovCiAJCWlwcmVtYWluID0gX19pcHRmc19pcGxlbih4dGZzLSZndDtyYV9ydW50KTsKLQkJaWYgKGlwcmVtYWluICZsdDsgc2l6ZW9mKHh0ZnMtJmd0O3JhX3J1bnQpKSB7Ci0JCQkvKiBsZW5ndGggaGFzIHRvIGJlIGF0IGxlYXN0IHJ1bnRzaXplIGxhcmdlICovCiYjNDM7CQlpZiAoaXByZW1haW4gJmx0OyBfX2lwdGZzX2lwaGxlbih4dGZzLSZndDtyYV9ydW50KSkgewomIzQzOwkJCS8qIGxlbmd0aCBoYXMgdG8gYmUgYXQgbGVhc3QgdGhlIElQIGhlYWRlciBzaXplICovCiAJCQlYRlJNX0lOQ19TVEFUUyh4c19uZXQoeHRmcy0mZ3Q7eCksCiAJCQkJICAgICAgIExJTlVYX01JQl9YRlJNSU5JUFRGU0VSUk9SKTsKIAkJCWdvdG8gYWJhbmRvbjsKZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1fcG9saWN5LmMgYi9uZXQveGZybS94ZnJtX3BvbGljeS5jCmluZGV4IDkzMmEzMTNiOTQ2MGEuLjUxM2M5ZjIyODMzNDcgMTAwNjQ0Ci0tLSBhL25ldC94ZnJtL3hmcm1fcG9saWN5LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3hmcm0veGZybV9wb2xpY3kuYwpAQCAtMjc3MCw5ICYjNDM7Mjc3MCwxMiBAQCBzdGF0aWMgc3RydWN0IGRzdF9lbnRyeSAqeGZybV9idW5kbGVfY3JlYXRlKHN0cnVjdCB4ZnJtX3BvbGljeSAqcG9saWN5LAogCXhkc3QwLSZndDtwYXRoID0gZHN0OwogCiAJZXJyID0gLUVOT0RFVjsKLQlkZXYgPSBkc3QtJmd0O2RldjsKLQlpZiAoIWRldikKJiM0MzsJcmN1X3JlYWRfbG9jaygpOwomIzQzOwlkZXYgPSBkc3RfZGV2X3JjdShkc3QpOwomIzQzOwlpZiAoIWRldikgewomIzQzOwkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJCWdvdG8gZnJlZV9kc3Q7CiYjNDM7CX0KIAogCXhmcm1faW5pdF9wYXRoKHhkc3QwLCBkc3QsIG5maGVhZGVyX2xlbik7CiAJeGZybV9pbml0X3BtdHUoYnVuZGxlLCBueCk7CkBAIC0yNzgwLDggJiM0MzsyNzgzLDEwIEBAIHN0YXRpYyBzdHJ1Y3QgZHN0X2VudHJ5ICp4ZnJtX2J1bmRsZV9jcmVhdGUoc3RydWN0IHhmcm1fcG9saWN5ICpwb2xpY3ksCiAJZm9yICh4ZHN0X3ByZXYgPSB4ZHN0MDsgeGRzdF9wcmV2ICE9IChzdHJ1Y3QgeGZybV9kc3QgKilkc3Q7CiAJICAgICB4ZHN0X3ByZXYgPSAoc3RydWN0IHhmcm1fZHN0ICopIHhmcm1fZHN0X2NoaWxkKCZhbXA7eGRzdF9wcmV2LSZndDt1LmRzdCkpIHsKIAkJZXJyID0geGZybV9maWxsX2RzdCh4ZHN0X3ByZXYsIGRldiwgZmwpOwotCQlpZiAoZXJyKQomIzQzOwkJaWYgKGVycikgewomIzQzOwkJCXJjdV9yZWFkX3VubG9jaygpOwogCQkJZ290byBmcmVlX2RzdDsKJiM0MzsJCX0KIAogCQl4ZHN0X3ByZXYtJmd0O3UuZHN0LmhlYWRlcl9sZW4gPSBoZWFkZXJfbGVuOwogCQl4ZHN0X3ByZXYtJmd0O3UuZHN0LnRyYWlsZXJfbGVuID0gdHJhaWxlcl9sZW47CkBAIC0yNzg5LDYgJiM0MzsyNzk0LDcgQEAgc3RhdGljIHN0cnVjdCBkc3RfZW50cnkgKnhmcm1fYnVuZGxlX2NyZWF0ZShzdHJ1Y3QgeGZybV9wb2xpY3kgKnBvbGljeSwKIAkJdHJhaWxlcl9sZW4gLT0geGRzdF9wcmV2LSZndDt1LmRzdC54ZnJtLSZndDtwcm9wcy50cmFpbGVyX2xlbjsKIAl9CiAKJiM0MzsJcmN1X3JlYWRfdW5sb2NrKCk7CiAJcmV0dXJuICZhbXA7eGRzdDAtJmd0O3UuZHN0OwogCiBwdXRfc3RhdGVzOgpAQCAtMzA1OCwxMSAmIzQzOzMwNjQsMTUgQEAgc3RhdGljIHN0cnVjdCB4ZnJtX2RzdCAqeGZybV9jcmVhdGVfZHVtbXlfYnVuZGxlKHN0cnVjdCBuZXQgKm5ldCwKIAl4ZnJtX2luaXRfcGF0aCgoc3RydWN0IHhmcm1fZHN0ICopZHN0MSwgZHN0LCAwKTsKIAogCWVyciA9IC1FTk9ERVY7Ci0JZGV2ID0gZHN0LSZndDtkZXY7Ci0JaWYgKCFkZXYpCiYjNDM7CXJjdV9yZWFkX2xvY2soKTsKJiM0MzsJZGV2ID0gZHN0X2Rldl9yY3UoZHN0KTsKJiM0MzsJaWYgKCFkZXYpIHsKJiM0MzsJCXJjdV9yZWFkX3VubG9jaygpOwogCQlnb3RvIGZyZWVfZHN0OwomIzQzOwl9CiAKIAllcnIgPSB4ZnJtX2ZpbGxfZHN0KHhkc3QsIGRldiwgZmwpOwomIzQzOwlyY3VfcmVhZF91bmxvY2soKTsKIAlpZiAoZXJyKQogCQlnb3RvIGZyZWVfZHN0OwogCmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX3N0YXRlLmMgYi9uZXQveGZybS94ZnJtX3N0YXRlLmMKaW5kZXggMzZhNGY2NzkzZWRlZi4uZTQ1YWExZWQ1Yjk2NSAxMDA2NDQKLS0tIGEvbmV0L3hmcm0veGZybV9zdGF0ZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC94ZnJtL3hmcm1fc3RhdGUuYwpAQCAtMjI2LDYgJiM0MzsyMjYsNyBAQCBzdGF0aWMgc3RydWN0IHhmcm1fc3RhdGVfYWZpbmZvIF9fcmN1ICp4ZnJtX3N0YXRlX2FmaW5mb1tOUFJPVE9dOwogCiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHhmcm1fc3RhdGVfZ2NfbG9jayk7CiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHhmcm1fc3RhdGVfZGV2X2djX2xvY2spOwomIzQzO3N0YXRpYyBERUZJTkVfTVVURVgoeGZybV9zdGF0ZV9nY19tdXRleCk7CiAKIGludCBfX3hmcm1fc3RhdGVfZGVsZXRlKHN0cnVjdCB4ZnJtX3N0YXRlICp4KTsKIApAQCAtNjMyLDggJiM0Mzs2MzMsMTAgQEAgc3RhdGljIHZvaWQgeGZybV9zdGF0ZV9nY190YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIAogCXN5bmNocm9uaXplX3JjdSgpOwogCiYjNDM7CW11dGV4X2xvY2soJmFtcDt4ZnJtX3N0YXRlX2djX211dGV4KTsKIAlobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHgsIHRtcCwgJmFtcDtnY19saXN0LCBnY2xpc3QpCiAJCXhmcm1fc3RhdGVfZ2NfZGVzdHJveSh4KTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7eGZybV9zdGF0ZV9nY19tdXRleCk7CiB9CiAKIHN0YXRpYyBlbnVtIGhydGltZXJfcmVzdGFydCB4ZnJtX3RpbWVyX2hhbmRsZXIoc3RydWN0IGhydGltZXIgKm1lKQpAQCAtODIzLDkgJiM0Mzs4MjYsOSBAQCBpbnQgX194ZnJtX3N0YXRlX2RlbGV0ZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCkKIAkJaWYgKCFobGlzdF91bmhhc2hlZCgmYW1wO3gtJmd0O2J5c2VxKSkKIAkJCWhsaXN0X2RlbF9pbml0X3JjdSgmYW1wO3gtJmd0O2J5c2VxKTsKIAkJaWYgKCFobGlzdF91bmhhc2hlZCgmYW1wO3gtJmd0O3N0YXRlX2NhY2hlKSkKLQkJCWhsaXN0X2RlbF9yY3UoJmFtcDt4LSZndDtzdGF0ZV9jYWNoZSk7CiYjNDM7CQkJaGxpc3RfZGVsX2luaXRfcmN1KCZhbXA7eC0mZ3Q7c3RhdGVfY2FjaGUpOwogCQlpZiAoIWhsaXN0X3VuaGFzaGVkKCZhbXA7eC0mZ3Q7c3RhdGVfY2FjaGVfaW5wdXQpKQotCQkJaGxpc3RfZGVsX3JjdSgmYW1wO3gtJmd0O3N0YXRlX2NhY2hlX2lucHV0KTsKJiM0MzsJCQlobGlzdF9kZWxfaW5pdF9yY3UoJmFtcDt4LSZndDtzdGF0ZV9jYWNoZV9pbnB1dCk7CiAKIAkJaWYgKCFobGlzdF91bmhhc2hlZCgmYW1wO3gtJmd0O2J5c3BpKSkKIAkJCWhsaXN0X2RlbF9pbml0X3JjdSgmYW1wO3gtJmd0O2J5c3BpKTsKQEAgLTEwMDAsNiAmIzQzOzEwMDMsNyBAQCBpbnQgeGZybV9kZXZfc3RhdGVfZmx1c2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIHRhc2tfdmFsaQogb3V0OgogCXNwaW5fdW5sb2NrX2JoKCZhbXA7bmV0LSZndDt4ZnJtLnhmcm1fc3RhdGVfbG9jayk7CiAKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO3hmcm1fc3RhdGVfZ2NfbXV0ZXgpOwogCXNwaW5fbG9ja19iaCgmYW1wO3hmcm1fc3RhdGVfZGV2X2djX2xvY2spOwogcmVzdGFydF9nYzoKIAlobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHgsIHRtcCwgJmFtcDt4ZnJtX3N0YXRlX2Rldl9nY19saXN0LCBkZXZfZ2NsaXN0KSB7CkBAIC0xMDE0LDYgJiM0MzsxMDE4LDcgQEAgaW50IHhmcm1fZGV2X3N0YXRlX2ZsdXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCB0YXNrX3ZhbGkKIAogCX0KIAlzcGluX3VubG9ja19iaCgmYW1wO3hmcm1fc3RhdGVfZGV2X2djX2xvY2spOwomIzQzOwltdXRleF91bmxvY2soJmFtcDt4ZnJtX3N0YXRlX2djX211dGV4KTsKIAogCXhmcm1fZmx1c2hfZ2MoKTsKIApkaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV91c2VyLmMgYi9uZXQveGZybS94ZnJtX3VzZXIuYwppbmRleCA2MjY2YTkyY2YzMDIwLi5hMjU4N2M3ZTc5NmI0IDEwMDY0NAotLS0gYS9uZXQveGZybS94ZnJtX3VzZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQveGZybS94ZnJtX3VzZXIuYwpAQCAtMTg3Nyw3ICYjNDM7MTg3Nyw2IEBAIHN0YXRpYyBpbnQgeGZybV9hbGxvY191c2Vyc3BpKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLAogCXN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrYi0mZ3Q7c2spOwogCXN0cnVjdCB4ZnJtX3N0YXRlICp4OwogCXN0cnVjdCB4ZnJtX3VzZXJzcGlfaW5mbyAqcDsKLQlzdHJ1Y3QgeGZybV90cmFuc2xhdG9yICp4dHI7CiAJc3RydWN0IHNrX2J1ZmYgKnJlc3Bfc2tiOwogCXhmcm1fYWRkcmVzc190ICpkYWRkcjsKIAlpbnQgZmFtaWx5OwpAQCAtMTk0MywxNyAmIzQzOzE5NDIsNiBAQCBzdGF0aWMgaW50IHhmcm1fYWxsb2NfdXNlcnNwaShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwKIAkJZ290byBvdXQ7CiAJfQogCi0JeHRyID0geGZybV9nZXRfdHJhbnNsYXRvcigpOwotCWlmICh4dHIpIHsKLQkJZXJyID0geHRyLSZndDthbGxvY19jb21wYXQoc2tiLCBubG1zZ19oZHIoc2tiKSk7Ci0KLQkJeGZybV9wdXRfdHJhbnNsYXRvcih4dHIpOwotCQlpZiAoZXJyKSB7Ci0JCQlrZnJlZV9za2IocmVzcF9za2IpOwotCQkJZ290byBvdXQ7Ci0JCX0KLQl9Ci0KIAllcnIgPSBubG1zZ191bmljYXN0KHhmcm1fbmV0X25sc2sobmV0LCBza2IpLCByZXNwX3NrYiwgTkVUTElOS19DQihza2IpLnBvcnRpZCk7CiAKIG91dDoKQEAgLTMzMzcsNyAmIzQzOzMzMjUsMTEgQEAgc3RhdGljIGludCB4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZShzdHJ1Y3QgbmV0ICpuZXQsCiAJCXJldHVybiBlcnI7CiAJfQogCi0JcmV0dXJuIHhmcm1fbmxtc2dfbXVsdGljYXN0KG5ldCwgc2tiLCAwLCBYRlJNTkxHUlBfTUlHUkFURSk7CiYjNDM7CXJjdV9yZWFkX2xvY2soKTsKJiM0MzsJZXJyID0geGZybV9ubG1zZ19tdWx0aWNhc3QobmV0LCBza2IsIDAsIFhGUk1OTEdSUF9NSUdSQVRFKTsKJiM0MzsJcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7CiYjNDM7CXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyBpbnQgeGZybV9kb19taWdyYXRlX3N0YXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxMzo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MjY1CgkJCQkJCQlvdXRwdXQ6IDY4CgkJCQkJCQl0aG91Z2h0czogMjcyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2ggU2VyaWVzKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaCBzZXJpZXMuIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggc29tZXRoaW5nIHNpZ25pZmljYW50LCBnaXZlbiB0aGUgYnJlYWR0aCBvZiBmaWxlcyBtb2RpZmllZC4gTG9va2luZyBhdCB0aGUgZmlsZSBsaXN0IOKAkyBgbmV0L2lwdjQvZXNwNC5jYCwgYG5ldC9pcHY2L2VzcDYuY2AsIGBuZXQvaXB2Ni94ZnJtNl9vdXRwdXQuY2AsIGBuZXQveGZybS9lc3BpbnRjcC5jYCwgYG5ldC94ZnJtL3hmcm1faW5wdXQuY2AsIGBuZXQveGZybS94ZnJtX2lwdGZzLmNgLCBgbmV0L3hmcm0veGZybV9wb2xpY3kuY2AsIGBuZXQveGZybS94ZnJtX3N0YXRlLmNgLCBhbmQgYG5ldC94ZnJtL3hmcm1fdXNlci5jYCDigJMgdGhpcyBpcyB0b3VjaGluZyB0aGUgaGVhcnQgb2YgdGhlIG5ldHdvcmtpbmcgc3RhY2ssIHNwZWNpZmljYWxseSBJUHNlYyBhbmQgdGhlIFhGUk0gc3Vic3lzdGVtLiBUaGVzZSBhcmUgYWxsIGNyaXRpY2FsIGFyZWFzLgoKR2l2ZW4gdGhpcyBzY29wZSwgdGhlIHBvdGVudGlhbCBhdHRhY2sgc3VyZmFjZSBpcyBsYXJnZS4gV2UmIzM5O3JlIHRhbGtpbmcgY29yZSBuZXR3b3JraW5nIGZ1bmN0aW9uYWxpdHksIGZ1bGx5IGV4cG9zZWQgdGhyb3VnaCBzdGFuZGFyZCBuZXR3b3JrIHNvY2tldHMsIG5ldGxpbmsgaW50ZXJmYWNlcyBsaWtlIFhGUk0gbmV0bGluayBhbmQgUEZfS0VZLCB2YXJpb3VzIHZpcnR1YWwgbmV0d29yayBkZXZpY2VzLCB0dW4vdGFwIGludGVyZmFjZXMsIGFuZCBldmVuIGxvb3BiYWNrLiBUaGlzIHNjcmVhbXMgJiMzNDtXb3J0aEZ1enppbmc9dHJ1ZSYjMzQ7LiBUaGUgZXhwb3N1cmUgaXMgaGlnaCwgYW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgYSB2dWxuZXJhYmlsaXR5IGhlcmUgY291bGQgYmUgd2lkZXNwcmVhZC4KCk5vdywgbXkgbmV4dCBzdGVwIGlzIHRvIGRyaWxsIGRvd24gaW50byB0aGUgc3BlY2lmaWMgZnVuY3Rpb25zIGJlaW5nIG1vZGlmaWVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgS2NvbmZpZyBkZXBlbmRlbmNpZXMgdG8gaWRlbnRpZnkgZXhhY3RseSB3aGF0IGNvbmZpZ3VyYXRpb25zIHdvdWxkIGVuYWJsZSB0aGlzIGNvZGUgYW5kIGlkZW50aWZ5IHRoZSBsaWtlbHkgZm9jdXMgc3ltYm9scy4gSSB0aGluayBgZ3JlcHBlcmAgaXMgdGhlIHBlcmZlY3QgdG9vbCBmb3IgdGhpcywgb3IgSSYjMzk7bGwganVzdCBtYW51YWxseSBleGFtaW5lIHRoZSBmaWxlcyBmb3IgdGhlIHJlbGV2YW50IEtjb25maWcgb3B0aW9ucyBhbmQgZGV0ZXJtaW5lIHRoZSBtb3N0IGFwcHJvcHJpYXRlIEZvY3VzU3ltYm9scyB0byB0YXJnZXQuIFRoaXMgaXMgd2hlcmUgdGhlIHJlYWwgd29yayBiZWdpbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTM6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElORVRfRVNQfGNvbmZpZyBYRlJNfGNvbmZpZyBJTkVUNl9FU1B8Y29uZmlnIE5FVF9LRVl8Y29uZmlnIFhGUk1fVVNFUnxjb25maWcgWEZSTV9JUFRGU3xjb25maWcgWEZSTV9FU1BJTlRDUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvS2NvbmZpZz0zMzk9Y29uZmlnIElORVRfQUhcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTM1My1cbm5ldC9pcHY0L0tjb25maWc6MzU0OmNvbmZpZyBJTkVUX0VTUFxubmV0L2lwdjQvS2NvbmZpZy0zNTUtXHR0cmlzdGF0ZSBcJiMzNDtJUDogRVNQIHRyYW5zZm9ybWF0aW9uXCYjMzQ7XG4tLVxubmV0L2lwdjQvS2NvbmZpZy0zNjgtXG5uZXQvaXB2NC9LY29uZmlnOjM2OTpjb25maWcgSU5FVF9FU1BfT0ZGTE9BRFxubmV0L2lwdjQvS2NvbmZpZy0zNzAtXHR0cmlzdGF0ZSBcJiMzNDtJUDogRVNQIHRyYW5zZm9ybWF0aW9uIG9mZmxvYWRcJiMzNDtcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTM4MS1cbm5ldC9pcHY0L0tjb25maWc6MzgyOmNvbmZpZyBJTkVUX0VTUElOVENQXG5uZXQvaXB2NC9LY29uZmlnLTM4My1cdGJvb2wgXCYjMzQ7SVA6IEVTUCBpbiBUQ1AgZW5jYXBzdWxhdGlvbiAoUkZDIDgyMjkpXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZz00Nz1jb25maWcgSU5FVDZfQUhcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTYxLVxubmV0L2lwdjYvS2NvbmZpZzo2Mjpjb25maWcgSU5FVDZfRVNQXG5uZXQvaXB2Ni9LY29uZmlnLTYzLVx0dHJpc3RhdGUgXCYjMzQ7SVB2NjogRVNQIHRyYW5zZm9ybWF0aW9uXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy03Ni1cbm5ldC9pcHY2L0tjb25maWc6Nzc6Y29uZmlnIElORVQ2X0VTUF9PRkZMT0FEXG5uZXQvaXB2Ni9LY29uZmlnLTc4LVx0dHJpc3RhdGUgXCYjMzQ7SVB2NjogRVNQIHRyYW5zZm9ybWF0aW9uIG9mZmxvYWRcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTg5LVxubmV0L2lwdjYvS2NvbmZpZzo5MDpjb25maWcgSU5FVDZfRVNQSU5UQ1Bcbm5ldC9pcHY2L0tjb25maWctOTEtXHRib29sIFwmIzM0O0lQdjY6IEVTUCBpbiBUQ1AgZW5jYXBzdWxhdGlvbiAoUkZDIDgyMjkpXCYjMzQ7XG4tLVxubmV0L3hmcm0vS2NvbmZpZy00LSNcbm5ldC94ZnJtL0tjb25maWc6NTpjb25maWcgWEZSTVxubmV0L3hmcm0vS2NvbmZpZy02LVx0Ym9vbFxuLS1cbm5ldC94ZnJtL0tjb25maWctMTAtXG5uZXQveGZybS9LY29uZmlnOjExOmNvbmZpZyBYRlJNX09GRkxPQURcbm5ldC94ZnJtL0tjb25maWctMTItXHRib29sXG5uZXQveGZybS9LY29uZmlnLTEzLVxubmV0L3hmcm0vS2NvbmZpZzoxNDpjb25maWcgWEZSTV9BTEdPXG5uZXQveGZybS9LY29uZmlnLTE1LVx0dHJpc3RhdGVcbi0tXG5uZXQveGZybS9LY29uZmlnPTIyPWlmIElORVRcbm5ldC94ZnJtL0tjb25maWc6MjM6Y29uZmlnIFhGUk1fVVNFUlxubmV0L3hmcm0vS2NvbmZpZy0yNC1cdHRyaXN0YXRlIFwmIzM0O1RyYW5zZm9ybWF0aW9uIHVzZXIgY29uZmlndXJhdGlvbiBpbnRlcmZhY2VcJiMzNDtcbi0tXG5uZXQveGZybS9LY29uZmlnLTMxLVxubmV0L3hmcm0vS2NvbmZpZzozMjpjb25maWcgWEZSTV9VU0VSX0NPTVBBVFxubmV0L3hmcm0vS2NvbmZpZy0zMy1cdHRyaXN0YXRlIFwmIzM0O0NvbXBhdGlibGUgQUJJIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQveGZybS9LY29uZmlnLTQyLVxubmV0L3hmcm0vS2NvbmZpZzo0Mzpjb25maWcgWEZSTV9JTlRFUkZBQ0Vcbm5ldC94ZnJtL0tjb25maWctNDQtXHR0cmlzdGF0ZSBcJiMzNDtUcmFuc2Zvcm1hdGlvbiB2aXJ0dWFsIGludGVyZmFjZVwmIzM0O1xuLS1cbm5ldC94ZnJtL0tjb25maWctNTAtXG5uZXQveGZybS9LY29uZmlnOjUxOmNvbmZpZyBYRlJNX1NVQl9QT0xJQ1lcbm5ldC94ZnJtL0tjb25maWctNTItXHRib29sIFwmIzM0O1RyYW5zZm9ybWF0aW9uIHN1YiBwb2xpY3kgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC94ZnJtL0tjb25maWctNjAtXG5uZXQveGZybS9LY29uZmlnOjYxOmNvbmZpZyBYRlJNX01JR1JBVEVcbm5ldC94ZnJtL0tjb25maWctNjItXHRib29sIFwmIzM0O1RyYW5zZm9ybWF0aW9uIG1pZ3JhdGUgZGF0YWJhc2VcJiMzNDtcbi0tXG5uZXQveGZybS9LY29uZmlnLTcxLVxubmV0L3hmcm0vS2NvbmZpZzo3Mjpjb25maWcgWEZSTV9TVEFUSVNUSUNTXG5uZXQveGZybS9LY29uZmlnLTczLVx0Ym9vbCBcJiMzNDtUcmFuc2Zvcm1hdGlvbiBzdGF0aXN0aWNzXCYjMzQ7XG4tLVxubmV0L3hmcm0vS2NvbmZpZy04My0jIFJGQyA4MjIxIGxpc3RzIGFzIE1VU1QgYmUgaW1wbGVtZW50ZWQuXG5uZXQveGZybS9LY29uZmlnOjg0OmNvbmZpZyBYRlJNX0FIXG5uZXQveGZybS9LY29uZmlnLTg1LVx0dHJpc3RhdGVcbi0tXG5uZXQveGZybS9LY29uZmlnLTkyLSMgYWxnb3JpdGhtcyB0aGF0IFJGQyA4MjIxIGxpc3RzIGFzIE1VU1QgYmUgaW1wbGVtZW50ZWQuXG5uZXQveGZybS9LY29uZmlnOjkzOmNvbmZpZyBYRlJNX0VTUFxubmV0L3hmcm0vS2NvbmZpZy05NC1cdHRyaXN0YXRlXG4tLVxubmV0L3hmcm0vS2NvbmZpZy0xMDUtXG5uZXQveGZybS9LY29uZmlnOjEwNjpjb25maWcgWEZSTV9JUENPTVBcbm5ldC94ZnJtL0tjb25maWctMTA3LVx0dHJpc3RhdGVcbi0tXG5uZXQveGZybS9LY29uZmlnLTExMS1cbm5ldC94ZnJtL0tjb25maWc6MTEyOmNvbmZpZyBORVRfS0VZXG5uZXQveGZybS9LY29uZmlnLTExMy1cdHRyaXN0YXRlIFwmIzM0O1BGX0tFWSBzb2NrZXRzIChkZXByZWNhdGVkKVwmIzM0O1xuLS1cbm5ldC94ZnJtL0tjb25maWctMTI0LVxubmV0L3hmcm0vS2NvbmZpZzoxMjU6Y29uZmlnIE5FVF9LRVlfTUlHUkFURVxubmV0L3hmcm0vS2NvbmZpZy0xMjYtXHRib29sIFwmIzM0O1BGX0tFWSBNSUdSQVRFXCYjMzQ7XG4tLVxubmV0L3hmcm0vS2NvbmZpZy0xNDAtXG5uZXQveGZybS9LY29uZmlnOjE0MTpjb25maWcgWEZSTV9JUFRGU1xubmV0L3hmcm0vS2NvbmZpZy0xNDItXHR0cmlzdGF0ZSBcJiMzNDtJUHNlYyBJUC1URlMvQUdHRlJBRyAoUkZDIDkzNDcpIGVuY2Fwc3VsYXRpb24gc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC94ZnJtL0tjb25maWctMTU2LVxubmV0L3hmcm0vS2NvbmZpZzoxNTc6Y29uZmlnIFhGUk1fRVNQSU5UQ1Bcbm5ldC94ZnJtL0tjb25maWctMTU4LVx0Ym9vbFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDEzOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMjQ3CgkJCQkJCQlvdXRwdXQ6IDgxCgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgQ29tcGlsYXRpb24gRGVwZW5kZW5jaWVzKioKClJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBtb2RpZmllZCBmaWxlcyBhcmUgYWN0dWFsbHkgYmVpbmcgaW50ZWdyYXRlZCBpbnRvIHRoZSBidWlsZCBwcm9jZXNzLiBUaGUgbW9zdCBsaWtlbHkgc3BvdHMgdG8gZmluZCB0aGF0IGluZm9ybWF0aW9uLCBvZiBjb3Vyc2UsIGFyZSB0aGUgTWFrZWZpbGVzLiBTcGVjaWZpY2FsbHksIHNpbmNlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggbmV0d29yayBzdGFjayBjb2RlLCBJJiMzOTtsbCBzdGFydCB3aXRoIHRoZSBvYnZpb3VzIHN1c3BlY3RzOiBgbmV0L2lwdjRgLCBgbmV0L2lwdjZgLCBhbmQgYG5ldC94ZnJtYC4gVGhlc2UgYXJlIHRoZSBjb3JlIHN1YmRpcmVjdG9yaWVzIGhhbmRsaW5nIElQdjQsIElQdjYsIGFuZCB0aGUgWEZSTSBmcmFtZXdvcmsgcmVzcGVjdGl2ZWx5LCBzbyB0aGUgY29tcGlsYXRpb24gcnVsZXMgZm9yIGZpbGVzIHdpdGhpbiB0aG9zZSBhcmVhcyBhcmUgcHJvYmFibHkgZGVmaW5lZCB0aGVyZS4gQSBxdWljayBzY2FuIG9mIHRob3NlIE1ha2VmaWxlcyBzaG91bGQgcmV2ZWFsIGV4YWN0bHkgaG93IHRoZXNlIG1vZGlmaWVkIGZpbGVzIGFyZSBiZWluZyBjb21waWxlZCwgbGlua2VkLCBhbmQgYW55IGRlcGVuZGVuY2llcyB0aGV5IG1pZ2h0IGhhdmUgb24gb3RoZXIgbW9kdWxlcyBvciBsaWJyYXJpZXMuIFRoYXQmIzM5O3MgdGhlIGZpcnN0IGFuZCBtb3N0IGNydWNpYWwgc3RlcCB0byBlbnN1cmUgdGhlIGNoYW5nZXMgYXJlIGNvcnJlY3RseSBpbnRlZ3JhdGVkIGFuZCBkb24mIzM5O3QgaW50cm9kdWNlIGFueSBidWlsZC10aW1lIGlzc3Vlcy4gVW5kZXJzdGFuZGluZyB0aGUgZXhpc3RpbmcgYnVpbGQgc3lzdGVtIGlzIGtleSB0byBtYWtpbmcgc3VyZSBteSBjaGFuZ2VzIGZpdCBzZWFtbGVzc2x5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDEzOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2VzcDRcXC5vfGVzcDZcXC5vfHhmcm02X291dHB1dFxcLm98ZXNwaW50Y3BcXC5vfHhmcm1faW5wdXRcXC5vfHhmcm1faXB0ZnNcXC5vfHhmcm1fcG9saWN5XFwub3x4ZnJtX3N0YXRlXFwub3x4ZnJtX3VzZXJcXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9NYWtlZmlsZT0zNT1vYmotJChDT05GSUdfSU5FVF9BSCkgJiM0Mzs9IGFoNC5vXG5uZXQvaXB2NC9NYWtlZmlsZTozNjpvYmotJChDT05GSUdfSU5FVF9FU1ApICYjNDM7PSBlc3A0Lm9cbm5ldC9pcHY0L01ha2VmaWxlLTM3LW9iai0kKENPTkZJR19JTkVUX0VTUF9PRkZMT0FEKSAmIzQzOz0gZXNwNF9vZmZsb2FkLm9cbi0tXG5uZXQvaXB2Ni9NYWtlZmlsZT0xOD1pcHY2LSQoQ09ORklHX1hGUk0pICYjNDM7PSB4ZnJtNl9wb2xpY3kubyB4ZnJtNl9zdGF0ZS5vIHhmcm02X2lucHV0Lm8gXFxcbm5ldC9pcHY2L01ha2VmaWxlOjE5Olx0eGZybTZfb3V0cHV0Lm8geGZybTZfcHJvdG9jb2wub1xubmV0L2lwdjYvTWFrZWZpbGUtMjAtaXB2Ni0kKENPTkZJR19ORVRGSUxURVIpICYjNDM7PSBuZXRmaWx0ZXIub1xuLS1cbm5ldC9pcHY2L01ha2VmaWxlPTMwPW9iai0kKENPTkZJR19JTkVUNl9BSCkgJiM0Mzs9IGFoNi5vXG5uZXQvaXB2Ni9NYWtlZmlsZTozMTpvYmotJChDT05GSUdfSU5FVDZfRVNQKSAmIzQzOz0gZXNwNi5vXG5uZXQvaXB2Ni9NYWtlZmlsZS0zMi1vYmotJChDT05GSUdfSU5FVDZfRVNQX09GRkxPQUQpICYjNDM7PSBlc3A2X29mZmxvYWQub1xuLS1cbm5ldC94ZnJtL01ha2VmaWxlPTEyPWVuZGlmXG5uZXQveGZybS9NYWtlZmlsZS0xMy1cbm5ldC94ZnJtL01ha2VmaWxlOjE0Om9iai0kKENPTkZJR19YRlJNKSA6PSB4ZnJtX3BvbGljeS5vIHhmcm1fc3RhdGUubyB4ZnJtX2hhc2gubyBcXFxubmV0L3hmcm0vTWFrZWZpbGU6MTU6XHRcdCAgICAgIHhmcm1faW5wdXQubyB4ZnJtX291dHB1dC5vIFxcXG5uZXQveGZybS9NYWtlZmlsZS0xNi1cdFx0ICAgICAgeGZybV9zeXNjdGwubyB4ZnJtX3JlcGxheS5vIHhmcm1fZGV2aWNlLm8gXFxcbi0tXG5uZXQveGZybS9NYWtlZmlsZT0xOT1vYmotJChDT05GSUdfWEZSTV9BTEdPKSAmIzQzOz0geGZybV9hbGdvLm9cbm5ldC94ZnJtL01ha2VmaWxlOjIwOm9iai0kKENPTkZJR19YRlJNX1VTRVIpICYjNDM7PSB4ZnJtX3VzZXIub1xubmV0L3hmcm0vTWFrZWZpbGUtMjEtb2JqLSQoQ09ORklHX1hGUk1fVVNFUl9DT01QQVQpICYjNDM7PSB4ZnJtX2NvbXBhdC5vXG4tLVxubmV0L3hmcm0vTWFrZWZpbGU9MjM9b2JqLSQoQ09ORklHX1hGUk1fSU5URVJGQUNFKSAmIzQzOz0geGZybV9pbnRlcmZhY2Uub1xubmV0L3hmcm0vTWFrZWZpbGU6MjQ6b2JqLSQoQ09ORklHX1hGUk1fSVBURlMpICYjNDM7PSB4ZnJtX2lwdGZzLm9cbm5ldC94ZnJtL01ha2VmaWxlOjI1Om9iai0kKENPTkZJR19YRlJNX0VTUElOVENQKSAmIzQzOz0gZXNwaW50Y3Aub1xubmV0L3hmcm0vTWFrZWZpbGUtMjYtb2JqLSQoQ09ORklHX0RFQlVHX0lORk9fQlRGKSAmIzQzOz0geGZybV9zdGF0ZV9icGYub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDEzOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMjAzCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRoaW5nczoKCioqRGlnZ2luZyBpbnRvIHRoZSBYRlJNIENvZGUqKgoKT2theSwgc28gSSYjMzk7bSByZXZpc2l0aW5nIHRoaXMgWEZSTSBjb2RlIGFnYWluLiBMZXQmIzM5O3MgbWFrZSBzdXJlIHdlJiMzOTtyZSBub3QgbWlzc2luZyBhbnl0aGluZyByZWxhdGVkIHRvIG1pZ3JhdGlvbi4gSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGUgYFhGUk1fTUlHUkFURWAgb3B0aW9uLCBhbmQgdGhhdCBtZWFucyBJIG5lZWQgdG8gbG9vayBjbG9zZWx5IGF0IGB4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZWAgaW4gYHhmcm1fdXNlci5jYC4gR290dGEgbWFrZSBzdXJlIHRoZSBtaWdyYXRpb24gc3RhdGUgaGFuZGxpbmcgaXMgc29saWQsIGVzcGVjaWFsbHkgd2l0aCBhbGwgdGhlIG51YW5jZXMgd2UmIzM5O3ZlIHNlZW4gaW4gdGhlIHBhc3QuIEFuZCBJIGNhbiYjMzk7dCBmb3JnZXQgYWJvdXQgRVNQIGluIFRDUCBtb2RlLi4uIEkgc2hvdWxkIHJldmlldyBgWEZSTV9FU1BJTlRDUGAgYW5kIHRoZSByZWxldmFudCBgc2VsZWN0c2Agc3RhdGVtZW50cyBpbiB0aGUgS2NvbmZpZyBmaWxlLiBHb3R0YSBiZSBkaWxpZ2VudCBhYm91dCBkZXBlbmRlbmNpZXMgYW5kIGVuc3VyZSBhbGwgdGhlIHJpZ2h0IGNvbXBvbmVudHMgYXJlIGVuYWJsZWQgb3IgZGlzYWJsZWQgY29ycmVjdGx5LiBHb3R0YSBtYWtlIHN1cmUgbm90aGluZyBicmVha3MgZHVyaW5nIGEgcmUtY29tcGlsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxMzo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtJTkVUX0VTUElOVENQfElORVQ2X0VTUElOVENQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9LY29uZmlnPTM2OT1jb25maWcgSU5FVF9FU1BfT0ZGTE9BRFxuLS1cbm5ldC9pcHY0L0tjb25maWctMzgxLVxubmV0L2lwdjQvS2NvbmZpZzozODI6Y29uZmlnIElORVRfRVNQSU5UQ1Bcbm5ldC9pcHY0L0tjb25maWctMzgzLVx0Ym9vbCBcJiMzNDtJUDogRVNQIGluIFRDUCBlbmNhcHN1bGF0aW9uIChSRkMgODIyOSlcJiMzNDtcbi0tXG5uZXQvaXB2NC9lc3A0LmM9OTk9c3RhdGljIHZvaWQgZXNwX3NzZ191bnJlZihzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgdm9pZCAqdG1wLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBib29sIGFscmVhZHlfdW5yZWYpXG4tLVxubmV0L2lwdjQvZXNwNC5jLTEyNC1cbm5ldC9pcHY0L2VzcDQuYzoxMjU6I2lmZGVmIENPTkZJR19JTkVUX0VTUElOVENQXG5uZXQvaXB2NC9lc3A0LmMtMTI2LXN0YXRpYyBzdHJ1Y3Qgc29jayAqZXNwX2ZpbmRfdGNwX3NrKHN0cnVjdCB4ZnJtX3N0YXRlICp4KVxuLS1cbm5ldC9pcHY0L2VzcDQuYz0zMDk9c3RhdGljIHN0cnVjdCBpcF9lc3BfaGRyICplc3Bfb3V0cHV0X3VkcF9lbmNhcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pcHY0L2VzcDQuYy0zMzgtXG5uZXQvaXB2NC9lc3A0LmM6MzM5OiNpZmRlZiBDT05GSUdfSU5FVF9FU1BJTlRDUFxubmV0L2lwdjQvZXNwNC5jLTM0MC1zdGF0aWMgc3RydWN0IGlwX2VzcF9oZHIgKmVzcF9vdXRwdXRfdGNwX2VuY2FwKHN0cnVjdCB4ZnJtX3N0YXRlICp4LFxuLS1cbm5ldC9pcHY0L2VzcDQuYz0xMTE4PXN0YXRpYyBpbnQgZXNwX2luaXRfc3RhdGUoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQvaXB2NC9lc3A0LmMtMTE1Ni1cdFx0XHRicmVhaztcbm5ldC9pcHY0L2VzcDQuYzoxMTU3OiNpZmRlZiBDT05GSUdfSU5FVF9FU1BJTlRDUFxubmV0L2lwdjQvZXNwNC5jLTExNTgtXHRcdGNhc2UgVENQX0VOQ0FQX0VTUElOVENQOlxuLS1cbm5ldC9pcHY2L0tjb25maWc9Nzc9Y29uZmlnIElORVQ2X0VTUF9PRkZMT0FEXG4tLVxubmV0L2lwdjYvS2NvbmZpZy04OS1cbm5ldC9pcHY2L0tjb25maWc6OTA6Y29uZmlnIElORVQ2X0VTUElOVENQXG5uZXQvaXB2Ni9LY29uZmlnLTkxLVx0Ym9vbCBcJiMzNDtJUHY2OiBFU1AgaW4gVENQIGVuY2Fwc3VsYXRpb24gKFJGQyA4MjI5KVwmIzM0O1xuLS1cbm5ldC9pcHY2L2VzcDYuYz0xMTY9c3RhdGljIHZvaWQgZXNwX3NzZ191bnJlZihzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgdm9pZCAqdG1wLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBib29sIGFscmVhZHlfdW5yZWYpXG4tLVxubmV0L2lwdjYvZXNwNi5jLTE0MS1cbm5ldC9pcHY2L2VzcDYuYzoxNDI6I2lmZGVmIENPTkZJR19JTkVUNl9FU1BJTlRDUFxubmV0L2lwdjYvZXNwNi5jLTE0My1zdGF0aWMgc3RydWN0IHNvY2sgKmVzcDZfZmluZF90Y3Bfc2soc3RydWN0IHhmcm1fc3RhdGUgKngpXG4tLVxubmV0L2lwdjYvZXNwNi5jPTM0Nj1zdGF0aWMgc3RydWN0IGlwX2VzcF9oZHIgKmVzcDZfb3V0cHV0X3VkcF9lbmNhcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pcHY2L2VzcDYuYy0zNjktXG5uZXQvaXB2Ni9lc3A2LmM6MzcwOiNpZmRlZiBDT05GSUdfSU5FVDZfRVNQSU5UQ1Bcbm5ldC9pcHY2L2VzcDYuYy0zNzEtc3RhdGljIHN0cnVjdCBpcF9lc3BfaGRyICplc3A2X291dHB1dF90Y3BfZW5jYXAoc3RydWN0IHhmcm1fc3RhdGUgKngsXG4tLVxubmV0L2lwdjYvZXNwNi5jPTExNTY9c3RhdGljIGludCBlc3A2X2luaXRfc3RhdGUoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQvaXB2Ni9lc3A2LmMtMTIwNC1cdFx0XHRicmVhaztcbm5ldC9pcHY2L2VzcDYuYzoxMjA1OiNpZmRlZiBDT05GSUdfSU5FVDZfRVNQSU5UQ1Bcbm5ldC9pcHY2L2VzcDYuYy0xMjA2LVx0XHRjYXNlIFRDUF9FTkNBUF9FU1BJTlRDUDpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxMzo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjQxMAoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgS2NvbmZpZyBkZWZpbml0aW9uczoKCioqQW5hbHl6aW5nIEVTUCBpbiBUQ1AgS2NvbmZpZyBPcHRpb25zKioKCk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBLY29uZmlnIG9wdGlvbnMgcmVsYXRlZCB0byBFU1Agb3ZlciBUQ1AuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB0aGVzZSBhcmUgZGVmaW5lZCBhbmQsIG1vcmUgaW1wb3J0YW50bHksIGhvdyB0aGV5IGludGVycmVsYXRlLiBJJiMzOTttIGZvY3VzaW5nIG9uIGBJTkVUX0VTUElOVENQYCwgYElORVQ2X0VTUElOVENQYCwgYW5kIGBYRlJNX0VTUElOVENQYC4gSSYjMzk7bSBpbW1lZGlhdGVseSB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zIGZvciBJUHY0IHZzLiBJUHY2IHN1cHBvcnQsIGhlbmNlIG15IGludGVyZXN0IGluIHRoZSBgSU5FVGAgcHJlZml4ZXMsIHdoaWNoIGluZGljYXRlIHRoaXMuIFRoZSBgWEZSTWAgcHJlZml4IHRlbGxzIG1lIHRoaXMgb3B0aW9uIGlzIHJlbGF0ZWQgdG8gdGhlIFhGUk0gZnJhbWV3b3JrIGFuZCBob3cgaXQgaW50ZXJmYWNlcyB3aXRoIEVTUC1vdmVyLVRDUCBpbXBsZW1lbnRhdGlvbnMuIEkgd2FudCB0byBzZWUgaG93IHRoZSBidWlsZCBzeXN0ZW0gaW50ZWdyYXRlcyBvciBjb25kaXRpb25hbGl6ZXMgYmFzZWQgb24gdGhlc2Ugb3B0aW9ucy4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgZGVwZW5kZW5jaWVzIGFuZCBzZWxlY3Qgc3RhdGVtZW50cyB0byBzZWUgdGhlIGltcGxpY2F0aW9ucyBvZiBlYWNoIG9wdGlvbiBiZWluZyBlbmFibGVkIG9yIGRpc2FibGVkLiBJdCB3aWxsIGJlIGhlbHBmdWwgdG8gaWRlbnRpZnkgYW55IGRpZmZlcmVuY2VzIG9yIHNpbWlsYXJpdGllcyBpbiB0aGUgaW1wbGVtZW50YXRpb25zIGJhc2VkIG9uIHdoZXRoZXIgb3Igbm90IElQdjQgb3IgSVB2NiBpcyBzZWxlY3RlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hldGhlciB0aGVzZSBvcHRpb25zIGFyZSBtdXR1YWxseSBleGNsdXNpdmUsIG9yIGlmIGl0IGlzIHBvc3NpYmxlIHRvIGNvbmZpZ3VyZSwgc2F5LCBgSU5FVF9FU1BJTlRDUGAgd2l0aCBgSU5FVDZfRVNQSU5UQ1BgIG9yIGBYRlJNX0VTUElOVENQYC4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgcG9zc2libGUgYnVpbGQgY29uZmlndXJhdGlvbnMgYW5kIHdoZXRoZXIgdGhlIG9wdGlvbnMgYXJlIGludGVuZGVkIGZvciBzcGVjaWZpYyB1c2UgY2FzZXMgb3IgYXJjaGl0ZWN0dXJlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTM6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7SU5FVF9FU1BJTlRDUHxJTkVUNl9FU1BJTlRDUHxYRlJNX0VTUElOVENQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9LY29uZmlnPTM2OT1jb25maWcgSU5FVF9FU1BfT0ZGTE9BRFxuLS1cbm5ldC9pcHY0L0tjb25maWctMzgxLVxubmV0L2lwdjQvS2NvbmZpZzozODI6Y29uZmlnIElORVRfRVNQSU5UQ1Bcbm5ldC9pcHY0L0tjb25maWctMzgzLVx0Ym9vbCBcJiMzNDtJUDogRVNQIGluIFRDUCBlbmNhcHN1bGF0aW9uIChSRkMgODIyOSlcJiMzNDtcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTM4Ni1cdHNlbGVjdCBORVRfU09DS19NU0dcbm5ldC9pcHY0L0tjb25maWc6Mzg3Olx0c2VsZWN0IFhGUk1fRVNQSU5UQ1Bcbm5ldC9pcHY0L0tjb25maWctMzg4LVx0aGVscFxuLS1cbm5ldC9pcHY0L2VzcDQuYz05OT1zdGF0aWMgdm9pZCBlc3Bfc3NnX3VucmVmKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCB2b2lkICp0bXAsIHN0cnVjdCBza19idWZmICpza2IsIGJvb2wgYWxyZWFkeV91bnJlZilcbi0tXG5uZXQvaXB2NC9lc3A0LmMtMTI0LVxubmV0L2lwdjQvZXNwNC5jOjEyNTojaWZkZWYgQ09ORklHX0lORVRfRVNQSU5UQ1Bcbm5ldC9pcHY0L2VzcDQuYy0xMjYtc3RhdGljIHN0cnVjdCBzb2NrICplc3BfZmluZF90Y3Bfc2soc3RydWN0IHhmcm1fc3RhdGUgKngpXG4tLVxubmV0L2lwdjQvZXNwNC5jPTMwOT1zdGF0aWMgc3RydWN0IGlwX2VzcF9oZHIgKmVzcF9vdXRwdXRfdWRwX2VuY2FwKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjQvZXNwNC5jLTMzOC1cbm5ldC9pcHY0L2VzcDQuYzozMzk6I2lmZGVmIENPTkZJR19JTkVUX0VTUElOVENQXG5uZXQvaXB2NC9lc3A0LmMtMzQwLXN0YXRpYyBzdHJ1Y3QgaXBfZXNwX2hkciAqZXNwX291dHB1dF90Y3BfZW5jYXAoc3RydWN0IHhmcm1fc3RhdGUgKngsXG4tLVxubmV0L2lwdjQvZXNwNC5jPTExMTg9c3RhdGljIGludCBlc3BfaW5pdF9zdGF0ZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuLS1cbm5ldC9pcHY0L2VzcDQuYy0xMTU2LVx0XHRcdGJyZWFrO1xubmV0L2lwdjQvZXNwNC5jOjExNTc6I2lmZGVmIENPTkZJR19JTkVUX0VTUElOVENQXG5uZXQvaXB2NC9lc3A0LmMtMTE1OC1cdFx0Y2FzZSBUQ1BfRU5DQVBfRVNQSU5UQ1A6XG4tLVxubmV0L2lwdjYvS2NvbmZpZz03Nz1jb25maWcgSU5FVDZfRVNQX09GRkxPQURcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTg5LVxubmV0L2lwdjYvS2NvbmZpZzo5MDpjb25maWcgSU5FVDZfRVNQSU5UQ1Bcbm5ldC9pcHY2L0tjb25maWctOTEtXHRib29sIFwmIzM0O0lQdjY6IEVTUCBpbiBUQ1AgZW5jYXBzdWxhdGlvbiAoUkZDIDgyMjkpXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy05NC1cdHNlbGVjdCBORVRfU09DS19NU0dcbm5ldC9pcHY2L0tjb25maWc6OTU6XHRzZWxlY3QgWEZSTV9FU1BJTlRDUFxubmV0L2lwdjYvS2NvbmZpZy05Ni1cdGhlbHBcbi0tXG5uZXQvaXB2Ni9lc3A2LmM9MTE2PXN0YXRpYyB2b2lkIGVzcF9zc2dfdW5yZWYoc3RydWN0IHhmcm1fc3RhdGUgKngsIHZvaWQgKnRtcCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgYm9vbCBhbHJlYWR5X3VucmVmKVxuLS1cbm5ldC9pcHY2L2VzcDYuYy0xNDEtXG5uZXQvaXB2Ni9lc3A2LmM6MTQyOiNpZmRlZiBDT05GSUdfSU5FVDZfRVNQSU5UQ1Bcbm5ldC9pcHY2L2VzcDYuYy0xNDMtc3RhdGljIHN0cnVjdCBzb2NrICplc3A2X2ZpbmRfdGNwX3NrKHN0cnVjdCB4ZnJtX3N0YXRlICp4KVxuLS1cbm5ldC9pcHY2L2VzcDYuYz0zNDY9c3RhdGljIHN0cnVjdCBpcF9lc3BfaGRyICplc3A2X291dHB1dF91ZHBfZW5jYXAoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2Ni9lc3A2LmMtMzY5LVxubmV0L2lwdjYvZXNwNi5jOjM3MDojaWZkZWYgQ09ORklHX0lORVQ2X0VTUElOVENQXG5uZXQvaXB2Ni9lc3A2LmMtMzcxLXN0YXRpYyBzdHJ1Y3QgaXBfZXNwX2hkciAqZXNwNl9vdXRwdXRfdGNwX2VuY2FwKHN0cnVjdCB4ZnJtX3N0YXRlICp4LFxuLS1cbm5ldC9pcHY2L2VzcDYuYz0xMTU2PXN0YXRpYyBpbnQgZXNwNl9pbml0X3N0YXRlKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L2lwdjYvZXNwNi5jLTEyMDQtXHRcdFx0YnJlYWs7XG5uZXQvaXB2Ni9lc3A2LmM6MTIwNTojaWZkZWYgQ09ORklHX0lORVQ2X0VTUElOVENQXG5uZXQvaXB2Ni9lc3A2LmMtMTIwNi1cdFx0Y2FzZSBUQ1BfRU5DQVBfRVNQSU5UQ1A6XG4tLVxubmV0L3hmcm0vS2NvbmZpZz0xNDE9Y29uZmlnIFhGUk1fSVBURlNcbi0tXG5uZXQveGZybS9LY29uZmlnLTE1Ni1cbm5ldC94ZnJtL0tjb25maWc6MTU3OmNvbmZpZyBYRlJNX0VTUElOVENQXG5uZXQveGZybS9LY29uZmlnLTE1OC1cdGJvb2xcbi0tXG5uZXQveGZybS9NYWtlZmlsZT0yND1vYmotJChDT05GSUdfWEZSTV9JUFRGUykgJiM0Mzs9IHhmcm1faXB0ZnMub1xubmV0L3hmcm0vTWFrZWZpbGU6MjU6b2JqLSQoQ09ORklHX1hGUk1fRVNQSU5UQ1ApICYjNDM7PSBlc3BpbnRjcC5vXG5uZXQveGZybS9NYWtlZmlsZS0yNi1vYmotJChDT05GSUdfREVCVUdfSU5GT19CVEYpICYjNDM7PSB4ZnJtX3N0YXRlX2JwZi5vXG4tLVxubmV0L3hmcm0veGZybV9wb2xpY3kuYy00NC0jZW5kaWZcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6NDU6I2lmZGVmIENPTkZJR19YRlJNX0VTUElOVENQXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTQ2LSNpbmNsdWRlIFx1MDAzY25ldC9lc3BpbnRjcC5oXHUwMDNlXG4tLVxubmV0L3hmcm0veGZybV9wb2xpY3kuYz00NDE0PXZvaWQgX19pbml0IHhmcm1faW5pdCh2b2lkKVxuLS1cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtNDQyMy1cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6NDQyNDojaWZkZWYgQ09ORklHX1hGUk1fRVNQSU5UQ1Bcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtNDQyNS1cdGVzcGludGNwX2luaXQoKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTM6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQxNjEKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqQ2hlY2tpbmcgWEZSTV9NSUdSQVRFIEltcGxlbWVudGF0aW9uIERldGFpbHMqKgoKQWxyaWdodCwgdGltZSB0byBkaWcgaW50byB0aGUgWEZSTSBtaWdyYXRpb24gc3VwcG9ydC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGhvdyB0aGlzIGlzIGhhbmRsZWQsIHNvIGZpcnN0IHRoaW5ncyBmaXJzdDogSSYjMzk7bGwgaGVhZCBvdmVyIHRvIGBuZXQveGZybS9LY29uZmlnYCB0byBzZWUgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGZvciBgWEZSTV9NSUdSQVRFYC4gSSB3YW50IHRvIHF1aWNrbHkgY29uZmlybSB3aGF0IGRlcGVuZGVuY2llcyBpdCBoYXMsIGlmIGFueSwgYW5kIHdoYXQgZmVhdHVyZXMgaXQgZW5hYmxlcyBvciBkaXNhYmxlcy4gQSBxdWljayBzY2FuIHRoZXJlIHdpbGwgZ2l2ZSBtZSB0aGUgaGlnaC1sZXZlbCBwaWN0dXJlLgoKVGhlbiwgdG8gdW5kZXJzdGFuZCB0aGUgbml0dHktZ3JpdHR5IG9mIHRoZSBpbXBsZW1lbnRhdGlvbiwgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRpdmUgaW50byBgeGZybV91c2VyLmNgLiBUaGlzIGlzIHdoZXJlIGFsbCB0aGUgdXNlci1zcGFjZSBpbnRlcmFjdGlvbiBmb3IgWEZSTSB0eXBpY2FsbHkgaGFwcGVucywgYW5kIHdoZXJlIHRoZSBtaWdyYXRpb24tcmVsYXRlZCBjb2RlIHNob3VsZCBiZS4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyBkZWFsaW5nIHdpdGggWEZSTSBzdGF0ZXMgYmVpbmcgbW92ZWQgYmV0d2VlbiBpbnRlcmZhY2VzIG9yIG5hbWVzcGFjZXMgYW5kIHNlZSBob3cgdGhlIG1pZ3JhdGlvbiBpdHNlbGYgaXMgYWN0dWFsbHkgdHJpZ2dlcmVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIG1vdmVkLCB0aGUgbG9ja2luZyBjb25zaWRlcmF0aW9ucywgYW5kIGFueSBlcnJvciBoYW5kbGluZyBpbiBwbGFjZS4gSSBhbHNvIHdhbnQgdG8gZG91YmxlLWNoZWNrIHRoYXQgdGhpcyBpcyBpbXBsZW1lbnRlZCBjb3JyZWN0bHkgZm9yIGJvdGggdGhlIGluZ3Jlc3MgYW5kIGVncmVzcyBwYXRocy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTM6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7WEZSTV9NSUdSQVRFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS9LY29uZmlnPTUxPWNvbmZpZyBYRlJNX1NVQl9QT0xJQ1lcbi0tXG5uZXQveGZybS9LY29uZmlnLTYwLVxubmV0L3hmcm0vS2NvbmZpZzo2MTpjb25maWcgWEZSTV9NSUdSQVRFXG5uZXQveGZybS9LY29uZmlnLTYyLVx0Ym9vbCBcJiMzNDtUcmFuc2Zvcm1hdGlvbiBtaWdyYXRlIGRhdGFiYXNlXCYjMzQ7XG4tLVxubmV0L3hmcm0vS2NvbmZpZz0xMjU9Y29uZmlnIE5FVF9LRVlfTUlHUkFURVxuLS1cbm5ldC94ZnJtL0tjb25maWctMTI3LVx0ZGVwZW5kcyBvbiBORVRfS0VZXG5uZXQveGZybS9LY29uZmlnOjEyODpcdHNlbGVjdCBYRlJNX01JR1JBVEVcbm5ldC94ZnJtL0tjb25maWctMTI5LVx0aGVscFxuLS1cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM9NDQ5ND1FWFBPUlRfU1lNQk9MX0dQTCh4ZnJtX2F1ZGl0X3BvbGljeV9kZWxldGUpO1xuLS1cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtNDQ5Ni1cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6NDQ5NzojaWZkZWYgQ09ORklHX1hGUk1fTUlHUkFURVxubmV0L3hmcm0veGZybV9wb2xpY3kuYy00NDk4LXN0YXRpYyBzdHJ1Y3QgeGZybV9wb2xpY3kgKnhmcm1fbWlncmF0ZV9wb2xpY3lfZmluZChjb25zdCBzdHJ1Y3QgeGZybV9zZWxlY3RvciAqc2VsLFxuLS1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYz0xOTU0PUVYUE9SVF9TWU1CT0woeGZybV9zdGF0ZV9hZGQpO1xubmV0L3hmcm0veGZybV9zdGF0ZS5jLTE5NTUtXG5uZXQveGZybS94ZnJtX3N0YXRlLmM6MTk1NjojaWZkZWYgQ09ORklHX1hGUk1fTUlHUkFURVxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTE5NTctc3RhdGljIGlubGluZSBpbnQgY2xvbmVfc2VjdXJpdHkoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCB4ZnJtX3NlY19jdHggKnNlY3VyaXR5KVxuLS1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYz0xOTgxPXN0YXRpYyBzdHJ1Y3QgeGZybV9zdGF0ZSAqeGZybV9zdGF0ZV9jbG9uZV9hbmRfc2V0dXAoc3RydWN0IHhmcm1fc3RhdGUgKm9yaWcsXG4tLVxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTE5OTAtXHRpZiAobS1cdTAwM2Vtc2dfdHlwZSA9PSBYRlJNX01TR19NSUdSQVRFX1NUQVRFKSB7XG5uZXQveGZybS94ZnJtX3N0YXRlLmM6MTk5MTpcdFx0aWYgKG0tXHUwMDNlZmxhZ3MgXHUwMDI2IFhGUk1fTUlHUkFURV9TVEFURV9VUERBVEVfSDJIX1NFTCkge1xubmV0L3hmcm0veGZybV9zdGF0ZS5jLTE5OTItXHRcdFx0dTggcHJlZml4bGVuID0gKG0tXHUwMDNlbmV3X2ZhbWlseSA9PSBBRl9JTkVUNikgPyAxMjggOiAzMjtcbi0tXG5uZXQveGZybS94ZnJtX3N0YXRlLmM9Mjg4OT1FWFBPUlRfU1lNQk9MKGttX3BvbGljeV9leHBpcmVkKTtcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0yODkwLVxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjI4OTE6I2lmZGVmIENPTkZJR19YRlJNX01JR1JBVEVcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0yODkyLWludCBrbV9taWdyYXRlKGNvbnN0IHN0cnVjdCB4ZnJtX3NlbGVjdG9yICpzZWwsIHU4IGRpciwgdTggdHlwZSxcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYz0xMjA0PXN0YXRpYyB2b2lkIHhzb190b194dW9faWZpbmRleChjb25zdCBzdHJ1Y3QgeGZybV9kZXZfb2ZmbG9hZCAqeHNvLCBpbnQgaWZpbmRleCxcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy0xMjEzLVxubmV0L3hmcm0veGZybV91c2VyLmM6MTIxNDojaWZkZWYgQ09ORklHX1hGUk1fTUlHUkFURVxubmV0L3hmcm0veGZybV91c2VyLmMtMTIxNS1zdGF0aWMgdm9pZCB4c29fdG9feHVvKGNvbnN0IHN0cnVjdCB4ZnJtX2Rldl9vZmZsb2FkICp4c28sXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmM9MzAzMD1zdGF0aWMgaW50IHhmcm1fYWRkX2FjcXVpcmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMzEwNC1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjMxMDU6I2lmZGVmIENPTkZJR19YRlJNX01JR1JBVEVcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTMxMDYtc3RhdGljIHZvaWQgY29weV9mcm9tX3VzZXJfbWlncmF0ZV9zdGF0ZShzdHJ1Y3QgeGZybV9taWdyYXRlICptYSxcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYz0zMzM1PXN0YXRpYyBpbnQgeGZybV9kb19taWdyYXRlX3N0YXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTMzNTUtXG5uZXQveGZybS94ZnJtX3VzZXIuYzozMzU2Olx0aWYgKHVtLVx1MDAzZWZsYWdzIFx1MDAyNiB+WEZSTV9NSUdSQVRFX1NUQVRFX0tOT1dOX0ZMQUdTKSB7XG5uZXQveGZybS94ZnJtX3VzZXIuYy0zMzU3LVx0XHROTF9TRVRfRVJSX01TR19GTVQoZXh0YWNrLCBcJiMzNDtVbmtub3duIGZsYWdzOiAweCV4XCYjMzQ7LFxubmV0L3hmcm0veGZybV91c2VyLmM6MzM1ODpcdFx0XHRcdCAgIHVtLVx1MDAzZWZsYWdzIFx1MDAyNiB+WEZSTV9NSUdSQVRFX1NUQVRFX0tOT1dOX0ZMQUdTKTtcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTMzNTktXHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTMzNjUtXG5uZXQveGZybS94ZnJtX3VzZXIuYzozMzY2Olx0aWYgKCEodW0tXHUwMDNlZmxhZ3MgXHUwMDI2IFhGUk1fTUlHUkFURV9TVEFURV9VUERBVEVfSDJIX1NFTCkpIHtcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTMzNjctXHRcdGVyciA9IHZlcmlmeV9zZWxlY3Rvcl9wcmVmaXhsZW4odW0tXHUwMDNlbmV3X3NlbC5mYW1pbHksXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMzM4Mi1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjMzODM6XHRpZiAodW0tXHUwMDNlZmxhZ3MgXHUwMDI2IFhGUk1fTUlHUkFURV9TVEFURV9VUERBVEVfSDJIX1NFTCkge1xubmV0L3hmcm0veGZybV91c2VyLmMtMzM4NC1cdFx0dTggcHJlZml4bGVuID0gKHgtXHUwMDNlcHJvcHMuZmFtaWx5ID09IEFGX0lORVQ2KSA/IDEyOCA6IDMyO1xuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM0MjUtXHR9IGVsc2Uge1xubmV0L3hmcm0veGZybV91c2VyLmM6MzQyNjpcdFx0Ym9vbCBpbmhlcml0X29mZmxvYWQgPSAhKHVtLVx1MDAzZWZsYWdzIFx1MDAyNiBYRlJNX01JR1JBVEVfU1RBVEVfQ0xFQVJfT0ZGTE9BRCk7XG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNDI3LVxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jPTM1MjQ9c3RhdGljIGludCB4ZnJtX2RvX21pZ3JhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMzUzMC1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjM1MzE6I2lmZGVmIENPTkZJR19YRlJNX01JR1JBVEVcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM1MzItc3RhdGljIGludCBjb3B5X3RvX3VzZXJfbWlncmF0ZShjb25zdCBzdHJ1Y3QgeGZybV9taWdyYXRlICptLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxMzo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjEwOQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDMyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUmVjZW50IFhGUk0gQ2hhbmdlcyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZXNlIHJlY2VudCBYRlJNIGNoYW5nZXMuIEZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgaW1wYWN0IHJlbGF0ZWQgdG8gYFhGUk1fVVNFUl9DT01QQVRgLiBJIHNlZSB0aGF0IHRoZSBgeGZybV9hbGxvY191c2Vyc3BpYCBmdW5jdGlvbiBpbiBgbmV0L3hmcm0veGZybV91c2VyLmNgIGhhcyBoYWQgdGhhdCBgeHRyID0geGZybV9nZXRfdHJhbnNsYXRvcigpYCBibG9jayByZW1vdmVkLCBzbyBJJiMzOTtsbCBuZWVkIHRvIGV4YW1pbmUgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGF0IHJlbW92YWwuIE5vdywgbGV0JiMzOTtzIGRpc3NlY3QgdGhlIHJlc3QuCgpTcGVjaWZpY2FsbHksIEkmIzM5O20gbm90aW5nIHRoZSBmb2xsb3dpbmcgc2lnbmlmaWNhbnQgbW9kaWZpY2F0aW9uczoKCjEuICBJbiBgbmV0L2lwdjQvZXNwNC5jYCwgdGhlIGBlc3Bfb3V0cHV0X2hlYWRgIGZ1bmN0aW9uLCBhbmQgYnkgZXh0ZW5zaW9uIGBlc3Bfb3V0cHV0YCwgaGFzIGhhZCBgc2tiX3pjb3B5X2Rvd25ncmFkZV9tYW5hZ2VkKHNrYik7YCBpbnRyb2R1Y2VkLiBUaGlzIGlzIG15IHByaW1hcnkgZm9jdXMgaGVyZS4KCjIuICBTaW1pbGFybHksIGBuZXQvaXB2Ni9lc3A2LmNgIGFsc28gaGFzIHRoaXMgaW5zZXJ0aW9uIHdpdGhpbiBpdHMgYGVzcDZfb3V0cHV0X2hlYWRgIGZ1bmN0aW9uIChhbmQgYGVzcDZfb3V0cHV0YCksIHNvIHRoaXMgaXMgYSBjb25zaXN0ZW50IGNoYW5nZSwgcG90ZW50aWFsbHkgcmVsYXRlZCB0byB6ZXJvLWNvcHkgb3B0aW1pemF0aW9uIGRvd25ncmFkaW5nLgoKMy4gIEluIGBuZXQvaXB2Ni94ZnJtNl9vdXRwdXQuY2AsIHRoZXJlJiMzOTtzIGEgc2hpZnQgaW4gYHhmcm02X2xvY2FsX3J4cG10dWAgYW5kIGB4ZnJtNl9sb2NhbF9lcnJvcmAuIFRoZXkmIzM5O3JlIG5vdyB1c2luZyBgc2tiX3RvX2Z1bGxfc2soc2tiKWAgYW5kIHBlcmZvcm1pbmcgbnVsbCBjaGVja3MuIFRoaXMgc2lnbmFscyBwb3NzaWJsZSBjaGFuZ2VzIGluIGhvdyB0aGUgU0tCIGlzIGhhbmRsZWQgd2l0aGluIHRob3NlIGZ1bmN0aW9ucy4KCjQuICBGaW5hbGx5LCBgbmV0L3hmcm0vZXNwaW50Y3AuY2Agbm93IGluY2x1ZGVzIGEgY2hlY2sgZm9yIGBza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHNrYilgIHdpdGhpbiB0aGUgYGhhbmRsZV9lc3BgIGZ1bmN0aW9uLiBJIHdpbGwgbmVlZCB0byBkZWx2ZSBmdXJ0aGVyIGludG8gdGhlIHVzYWdlIG9yIHRoZSBmdW5jdGlvbnMgaW4gdGhpcyBmaWxlIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDEzOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2hhbmRsZV9lc3AmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS9lc3BpbnRjcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL2VzcGludGNwLmM9MTI9c3RhdGljIHZvaWQgaGFuZGxlX25vbmVzcChzdHJ1Y3QgZXNwaW50Y3BfY3R4ICpjdHgsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L3hmcm0vZXNwaW50Y3AuYy0yOC1cbm5ldC94ZnJtL2VzcGludGNwLmM6Mjk6c3RhdGljIHZvaWQgaGFuZGxlX2VzcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc29jayAqc2spXG5uZXQveGZybS9lc3BpbnRjcC5jLTMwLXtcbi0tXG5uZXQveGZybS9lc3BpbnRjcC5jPTYxPXN0YXRpYyB2b2lkIGVzcGludGNwX3JjdihzdHJ1Y3Qgc3RycGFyc2VyICpzdHJwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC94ZnJtL2VzcGludGNwLmMtMTE3LVx0ZWxzZVxubmV0L3hmcm0vZXNwaW50Y3AuYzoxMTg6XHRcdGhhbmRsZV9lc3Aoc2tiLCBzdHJwLVx1MDAzZXNrKTtcbm5ldC94ZnJtL2VzcGludGNwLmMtMTE5LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTM6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcwODEKCQkJCQkJCW91dHB1dDogNTIKCQkJCQkJCXRob3VnaHRzOiAxNjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBFeGFtaW5hdGlvbiBvZiB0aGUgRVNQL1RDUCBSZWNlaXZlIFBhdGgqKgoKT2theSwgc28gYGVzcGludGNwX3JjdmAgaXMgdGhlIGtleSBmdW5jdGlvbiBpbml0aWF0aW5nIHRoaW5ncyBpbiBgZXNwaW50Y3AuY2AuIFRoYXQmIzM5O3Mgd2hlcmUgSSBuZWVkIHRvIHN0YXJ0LiBOb3csIGxldCYjMzk7cyBwaXZvdCB0byB0aGUgWEZSTS1yZWxhdGVkIGNvZGUsIHNwZWNpZmljYWxseSB3aGF0IGhhcHBlbnMgYWZ0ZXIgdGhhdC4KCkkgc2VlIGBuZXQveGZybS94ZnJtX2lucHV0LmNgIHdpdGggYHhmcm1faW5wdXRgLCBgeGZybV90cmFuc19yZWluamVjdGAsIGFuZCBgeGZybV90cmFuc19xdWV1ZV9uZXRgIGFzIGNyaXRpY2FsIGZ1bmN0aW9ucy4gVGhvc2UgZGVzZXJ2ZSBpbW1lZGlhdGUgYXR0ZW50aW9uLiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGRhdGEgaXMgcHJvY2Vzc2VkIGJ5IHRob3NlLgoKTmV4dCwgSSYjMzk7bGwgc3dpdGNoIG92ZXIgdG8gYG5ldC94ZnJtL3hmcm1faXB0ZnMuY2AuIEkgd2FudCB0byBpbnZlc3RpZ2F0ZSBgaXB0ZnNfc2tiX2Nhbl9hZGRfZnJhZ3NgIGFuZCBgaXB0ZnNfcmVhc3NlbV9jb250YC4gSSYjMzk7bGwgd2FudCB0byBxdWlja2x5IGNoZWNrIHRoZSBgc3RhdGljYCBzdGF0dXMgb2YgdGhlc2UsIGFuZCBtYXAgdGhlIGVudHJ5IHBvaW50cy4gSG9wZWZ1bGx5IHRoaXMgd2lsbCByZXZlYWwgdGhlIHNwZWNpZmljcyBvZiBJUCBmcmFnbWVudCByZWFzc2VtYmx5IHdpdGhpbiB0aGUgWEZSTSBmcmFtZXdvcmsuIFRoaXMgd2lsbCBob3BlZnVsbHkgcHJvdmlkZSBpbnNpZ2h0IHRvIHRoZSBvdmVyYWxsIGVuZC10by1lbmQgZmxvdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTM6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXB0ZnNfc2tiX2Nhbl9hZGRfZnJhZ3N8aXB0ZnNfcmVhc3NlbV9jb250JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9pcHRmcy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1faXB0ZnMuYz0zODA9c3RhdGljIHUzMiBpcHRmc19za2JfcmVzZXRfZnJhZ193YWxrKHN0cnVjdCBpcHRmc19za2JfZnJhZ193YWxrICp3YWxrLFxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy00MDAtLyoqXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6NDAxOiAqIGlwdGZzX3NrYl9jYW5fYWRkX2ZyYWdzKCkgLSBjaGVjayBpZiBvayB0byBhZGQgZnJhZ3MgZnJvbSB3YWxrIHRvIHNrYlxubmV0L3hmcm0veGZybV9pcHRmcy5jLTQwMi0gKiBAc2tiOiBza2IgdG8gY2hlY2sgZm9yIGFkZGluZyBmcmFncyB0b1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy00MDgtICovXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6NDA5OnN0YXRpYyBib29sIGlwdGZzX3NrYl9jYW5fYWRkX2ZyYWdzKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNDEwLVx0XHRcdFx0ICAgIHN0cnVjdCBpcHRmc19za2JfZnJhZ193YWxrICp3YWxrLFxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy00NTgtICpcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo0NTk6ICogaXB0ZnNfc2tiX2Nhbl9hZGRfZnJhZ3MoKSBzaG91bGQgYmUgY2FsbGVkIGJlZm9yZSB0aGlzIGZ1bmN0aW9uIHRvIHZlcmlmeVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTQ2MC0gKiB0aGF0IHRoZSBkZXN0aW5hdGlvbiBAc2tiIGlzIGNvbXBhdGlibGUgd2l0aCB0aGUgd2FsayBhbmQgaGFzIHNwYWNlIGluIHRoZVxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz01NDE9aXB0ZnNfcHNrYl9hZGRfZnJhZ3Moc3RydWN0IHNrX2J1ZmYgKnRwbCwgc3RydWN0IGlwdGZzX3NrYl9mcmFnX3dhbGsgKndhbGssXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTU1MC1cdC8qIHRoaXMgc2hvdWxkIG5vdCBub3JtYWxseSBiZSBoYXBwZW5pbmcgKi9cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo1NTE6XHRpZiAoIWlwdGZzX3NrYl9jYW5fYWRkX2ZyYWdzKHNrYiwgd2Fsaywgb2ZmICYjNDM7IGNvcHlfbGVuLFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTU1Mi1cdFx0XHRcdCAgICAgbGVuIC0gY29weV9sZW4pKSB7XG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jPTczMD1zdGF0aWMgdm9pZCBpcHRmc19yZWFzc2VtX2RvbmUoc3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcylcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNzM1LS8qKlxubmV0L3hmcm0veGZybV9pcHRmcy5jOjczNjogKiBpcHRmc19yZWFzc2VtX2NvbnQoKSAtIENvbnRpbnVlIHRoZSByZWFzc2VtYmx5IG9mIGFuIGlubmVyIHBhY2tldHMuXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNzM3LSAqIEB4dGZzOiB4dGZzIHN0YXRlXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTc0OS0gKi9cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo3NTA6c3RhdGljIHUzMiBpcHRmc19yZWFzc2VtX2NvbnQoc3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcywgdTY0IHNlcSxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy03NTEtXHRcdFx0ICAgICAgc3RydWN0IHNrYl9zZXFfc3RhdGUgKnN0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy05MDktXHRpZiAoZnJhZ3dhbGsgXHUwMDI2XHUwMDI2XG5uZXQveGZybS94ZnJtX2lwdGZzLmM6OTEwOlx0ICAgIGlwdGZzX3NrYl9jYW5fYWRkX2ZyYWdzKG5ld3NrYiwgZnJhZ3dhbGssIGRhdGEsIGNvcHlsZW4pKSB7XG5uZXQveGZybS94ZnJtX2lwdGZzLmMtOTExLVx0XHRpcHRmc19za2JfYWRkX2ZyYWdzKG5ld3NrYiwgZnJhZ3dhbGssIGRhdGEsIGNvcHlsZW4pO1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz0xMjI2PXN0YXRpYyB2b2lkIGlwdGZzX2lucHV0X29yZGVyZWQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTEyODctXHRcdGlmIChibGtvZmYgfHwgeHRmcy1cdTAwM2VyYV9ydW50bGVuIHx8IHh0ZnMtXHUwMDNlcmFfbmV3c2tiKSB7XG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTI4ODpcdFx0XHRkYXRhID0gaXB0ZnNfcmVhc3NlbV9jb250KHh0ZnMsIHNlcSwgXHUwMDI2c2tic2VxLCBza2IsIGRhdGEsXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTI4OS1cdFx0XHRcdFx0XHQgIGJsa29mZiwgXHUwMDI2c3VibGlzdCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDEzOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NTQ2CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogOTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgeGZybV9pcHRmcy5jYCBjb2RlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZ2V0IGEgbGF5IG9mIHRoZSBsYW5kLCBzbyBJJiMzOTtsbCBzdGFydCBieSBsaXN0aW5nIHRoZSBrZXkgZnVuY3Rpb25zLiBJIHdhbnQgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgZW50cnkgcG9pbnRzIGFuZCBtYWpvciBvcGVyYXRpb25zLiBJIHNlZSBgaXB0ZnNfaW5wdXRfb3JkZXJlZGAsIGBpcHRmc19pbnB1dGAsIGBpcHRmc19vdXRwdXRgLCBhbmQgSSYjMzk7bSBndWVzc2luZyB0aGVzZSBhcmUgaGFuZGxpbmcgdGhlIGFjdHVhbCBwYWNrZXQgcHJvY2Vzc2luZyBpbiBkaWZmZXJlbnQgc2NlbmFyaW9zLiBUaGVuIHRoZXJlJiMzOTtzIGBpcHRmc191c2VyX2luaXRgIGFuZCBgaXB0ZnNfaW5pdF9zdGF0ZWAsIHByb2JhYmx5IHJlbGF0ZWQgdG8gaW5pdGlhbGl6YXRpb24sIHVzZXIgc3BhY2UgaW50ZXJhY3Rpb24sIGFuZCBzdGF0ZSBtYW5hZ2VtZW50LCB3aGljaCBhcmUgdmVyeSBpbXBvcnRhbnQgaW4gY29ubmVjdGlvbiB0cmFja2luZy4gQW5kIEkgc2VlIGEgZnJhZ21lbnRhdGlvbiByZWxhdGVkIGZ1bmN0aW9uIGBpcHRmc19wc2tiX2FkZF9mcmFnc2AgaGVyZS4KClRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgd2l0aGluIHRoZSBicm9hZGVyIFhGUk0gZnJhbWV3b3JrIGFuZCBpdHMgaW50ZXJhY3Rpb24gd2l0aCB0aGUga2VybmVsLCBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIHNlbnNlIG9mIGhvdyBpdCBpbnRlZ3JhdGVzIHdpdGggWEZSTSBzdHJ1Y3R1cmVzLiBUaGVyZWZvcmUsIEkgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gaG93IHRoZSBjb2RlIHJlbGF0ZXMgdG8gYHhmcm1fdHlwZWAgb3IgYW55IFhGUk0gcHJvdG9jb2wgY2FsbGJhY2tzLiBJJiMzOTtsbCBuZWVkIHRvIGdyZXAgZm9yIHRoZXNlIHRlcm1zIHRvIHNlZSB0aGUgY29ubmVjdGlvbnMuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGFyY2hpdGVjdHVyYWwgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTM6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdGF0aWMgY29uc3Qgc3RydWN0IHhmcm1fdHlwZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1faXB0ZnMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDEzOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4OTM4CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqRGl2aW5nIGludG8gdGhlIFhGUk0gQ29yZSoqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBkb3VibGUtY2hlY2tpbmcgdGhlIGluaXRpYWxpemF0aW9uIGFuZCB0aGUgZGVmaW5pdGlvbnMgb2YgYHhmcm1fdHlwZWAgd2l0aGluIGB4ZnJtX2lwdGZzLmNgLiBJIG5lZWQgdG8gZW5zdXJlIHRoZSBmb3VuZGF0aW9uIGlzIHNvbGlkIGJlZm9yZSBJIGRlbHZlIGFueSBkZWVwZXIgaW50byB0aGUgSVBzZWMgcHJvY2Vzc2luZyBmbG93LiBUaGlzIGFyZWEgYWx3YXlzIGhhcyBwb3RlbnRpYWwgZm9yIHN1YnRsZSBidWdzLCBzbyBiZXN0IHRvIHRha2UgYSBtb21lbnQgYW5kIHJlLWZhbWlsaWFyaXplIG15c2VsZiB3aXRoIHRoZSBiYXNpY3MuIEl0JiMzOTtzIGEga2V5IHBpZWNlIGluIGVuc3VyaW5nIGFueSBuZXcgSVBzZWMgZmVhdHVyZSBiZWhhdmVzIGFzIGludGVuZGVkIHdpdGhpbiB0aGUgbGFyZ2VyIHN5c3RlbS4gVGltZSB0byByZWZyZXNoIG15IG1lbW9yeSBhbmQgdmVyaWZ5IHRoZSBzdGFydGluZyBzdGF0ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTM6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eGZybV90eXBlfHhmcm1fbW9kZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1faXB0ZnMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX2lwdGZzLmM9MjczMj1zdGF0aWMgdm9pZCBpcHRmc19kZXN0cm95X3N0YXRlKHN0cnVjdCB4ZnJtX3N0YXRlICp4KVxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNzY3LVxubmV0L3hmcm0veGZybV9pcHRmcy5jOjI3Njg6c3RhdGljIGNvbnN0IHN0cnVjdCB4ZnJtX21vZGVfY2JzIGlwdGZzX21vZGVfY2JzID0ge1xubmV0L3hmcm0veGZybV9pcHRmcy5jLTI3NjktXHQub3duZXIgPSBUSElTX01PRFVMRSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTM6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkyODIKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSB3ZXJlIHRoaW5raW5nIHRocm91Z2ggdGhlIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBgeGZybV9pcHRmcy5jYCBDb2RlKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGB4ZnJtX2lwdGZzLmNgIGZpbGUuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBmb2N1c2luZyBpbiBvbiB0aGUgYGlwdGZzX21vZGVfY2JzYCBzdHJ1Y3R1cmUuIEkgcmVtZW1iZXIgZGVhbGluZyB3aXRoIHRoYXQgYXJlYSBiZWZvcmUsIGFuZCBJIHdhbnQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGNhbGxiYWNrcyBkZWZpbmVkIHRoZXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIElQc2VjIHRyYW5zcG9ydCBtb2RlIGludGVyYWN0cyB3aXRoaW4gdGhlIFhGUk0gZnJhbWV3b3JrLiBJdCYjMzk7cyBrZXkgdG8gaG93IHRoaW5ncyBhcmUgYmVpbmcgbWFuYWdlZCBhbmQgY29uZmlndXJlZC4gU28sIGxldCYjMzk7cyBkcmlsbCBkb3duIGludG8gdGhhdCBzZWN0aW9uIG9mIHRoZSBjb2RlIGFuZCByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcuIEl0IGlzIGxpa2VseSB0aGF0IGNhbGxiYWNrcyBhcmUgZGVmaW5lZCB0byBoYW5kbGUgZGlmZmVyZW50IGFzcGVjdHMgb2YgdGhlIGludGVyYWN0aW9uLCBzdWNoIGFzIGluaXRpYWxpemF0aW9uLCBwYWNrZXQgcHJvY2Vzc2luZyBvciB0ZWFyZG93biB3aXRoaW4gdGhlIElQc2VjIHN1YnN5c3RlbSwgb3IgcGVyaGFwcyBoYW5kbGluZyBvZiBkaWZmZXJlbnQgU0EgdHlwZXMuIExldCYjMzk7cyBzZWUgZXhhY3RseSBob3cgdGhpcyBjb2RlIGlzIGhhbmRsaW5nIHRob3NlIGNhbGxiYWNrIGFjdGlvbnMgd2l0aGluIHRyYW5zcG9ydCBtb2RlLiBJJiMzOTttIGhvcGluZyBJIGNhbiByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNhbGxiYWNrIHByb2Nlc3MgdG8gY2hlY2sgd2hhdCBpcyBjb25maWd1cmVkIGF0IHRoaXMgcG9pbnQgaW4gdGhlIHByb2Nlc3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDEzOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwdGZzX21vZGVfY2JzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9pcHRmcy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1faXB0ZnMuYz0yNzMyPXN0YXRpYyB2b2lkIGlwdGZzX2Rlc3Ryb3lfc3RhdGUoc3RydWN0IHhmcm1fc3RhdGUgKngpXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTI3NjctXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6Mjc2ODpzdGF0aWMgY29uc3Qgc3RydWN0IHhmcm1fbW9kZV9jYnMgaXB0ZnNfbW9kZV9jYnMgPSB7XG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjc2OS1cdC5vd25lciA9IFRISVNfTU9EVUxFLFxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz0yNzgyPXN0YXRpYyBpbnQgX19pbml0IHhmcm1faXB0ZnNfaW5pdCh2b2lkKVxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNzg3LVxubmV0L3hmcm0veGZybV9pcHRmcy5jOjI3ODg6XHRlcnIgPSB4ZnJtX3JlZ2lzdGVyX21vZGVfY2JzKFhGUk1fTU9ERV9JUFRGUywgXHUwMDI2aXB0ZnNfbW9kZV9jYnMpO1xubmV0L3hmcm0veGZybV9pcHRmcy5jLTI3ODktXHRpZiAoZXJyIFx1MDAzYyAwKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxMzo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTg0MwoJCQkJCQkJb3V0cHV0OiAzOTcKCQkJCQkJCXRob3VnaHRzOiAxMzMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIElQc2VjL1hGUk0gUGF0Y2ggQ29tcG9uZW50cyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGtleSBmdW5jdGlvbnMgYW5kIGRhdGEgc3RydWN0dXJlcyBiZWluZyB0b3VjaGVkIGJ5IHRoaXMgcGF0Y2gsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBuZXQveGZybWAgYW5kIHJlbGF0ZWQgZGlyZWN0b3JpZXMuIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIGNvcmUgWEZSTSBjb21wb25lbnRzLCB0aGUgRVNQIChFbmNhcHN1bGF0aW5nIFNlY3VyaXR5IFBheWxvYWQpIGltcGxlbWVudGF0aW9ucyBmb3IgSVB2NCBhbmQgSVB2NiwgYW5kIHRoZSBFU1AtaW4tVENQIHZhcmlhbnQuCgpTcGVjaWZpY2FsbHksIEkgc2VlIHRoYXQgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCB0aGVzZSBmdW5jdGlvbnMgYXJlIGNvcnJlY3RseSBuYW1lZCBpbiB0aGUgY29kZTogYHhmcm1fYnVuZGxlX2NyZWF0ZWAsIGB4ZnJtX2NyZWF0ZV9kdW1teV9idW5kbGVgIChwb2xpY3kpLCBgeGZybV9zdGF0ZV9nY190YXNrYCwgYF9feGZybV9zdGF0ZV9kZWxldGVgLCBgeGZybV9kZXZfc3RhdGVfZmx1c2hgIChzdGF0ZSBtYW5hZ2VtZW50KSwgYHhmcm1fYWxsb2NfdXNlcnNwaWAsIGB4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZWAgKHVzZXIgc3BhY2UgaW50ZXJhY3Rpb24pLiBBbHNvIEkgbXVzdCBjaGVjayBpbnB1dCBoYW5kbGluZyBpbiBgeGZybV9pbnB1dGAsIGB4ZnJtX3RyYW5zX3JlaW5qZWN0YCwgYHhmcm1fdHJhbnNfcXVldWVfbmV0YC4gVGhlIEVTUCBvdXRwdXQgZnVuY3Rpb25zIGFyZSBpbXBvcnRhbnQ6IGBlc3Bfb3V0cHV0X2hlYWRgIChJUHY0KSwgYGVzcDZfb3V0cHV0X2hlYWRgIChJUHY2KSwgYW5kIHRob3NlIGZvciBlcnJvciBoYW5kbGluZzogYHhmcm02X2xvY2FsX3J4cG10dWAsIGB4ZnJtNl9sb2NhbF9lcnJvcmAuIEkgbXVzdCBhbHNvIGVuc3VyZSB0aGF0IHRoZSBgaGFuZGxlX2VzcGAgZnVuY3Rpb24gKG9yIGBlc3BpbnRjcF9yY3ZgKSBpcyBoYW5kbGVkIHByb3Blcmx5IGZvciBFU1AtaW4tVENQLCBhbG9uZyB3aXRoICBmcmFnbWVudGF0aW9uL3JlYXNzZW1ibHkgKGBpcHRmc19za2JfY2FuX2FkZF9mcmFnc2AsIGBpcHRmc19yZWFzc2VtX2NvbnRgKS4KCkkgaGF2ZSB0byB2ZXJpZnkgYWxsIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyBhcmUgZW5hYmxlZCBhbmQgaGF2ZSB0aGUgY29ycmVjdCBkZXBlbmRlbmNpZXM6IGBDT05GSUdfSU5FVF9FU1BgLCBgQ09ORklHX0lORVQ2X0VTUGAsIGBDT05GSUdfSU5FVF9FU1BJTlRDUGAsIGBDT05GSUdfSU5FVDZfRVNQSU5UQ1BgLCBgQ09ORklHX1hGUk1gLCBgQ09ORklHX1hGUk1fVVNFUmAsIGBDT05GSUdfWEZSTV9JUFRGU2AsIGBDT05GSUdfWEZSTV9NSUdSQVRFYCwgYENPTkZJR19JUFY2YCwgYW5kIGBDT05GSUdfSU5FVGAuIEkgY2FuIHNlZSBmcm9tIHRoZSBLY29uZmlnIGZpbGVzIHRoYXQgWEZSTSBkZXBlbmRzIG9uIE5FVCwgRVNQIGRlcGVuZHMgb24gSU5FVC9JUFY2LCBhbmQgdGhlIHVzZXIgYW5kIElQVEZTIG9wdGlvbnMgZGVwZW5kIG9uIFhGUk0uIFRoZSBtaWdyYXRpb24gZmVhdHVyZSBzZWVtcyBzdHJhaWdodGZvcndhcmQuCgpMb29raW5nIGF0IHRoZSBgRm9jdXNTeW1ib2xzYCwgSSBoYXZlIGEgZ29vZCBoYW5kbGUgb24gd2hlcmUgdGhlIGNoYW5nZXMgbGllLiBUaGUgYFdvcnRoRnV6emluZ2AgYXNzZXNzbWVudCBhbHNvIGNvbmZpcm1zIG15IHN1c3BpY2lvbnMuIFRoaXMgcGF0Y2ggdG91Y2hlcyB0aGUgY3JpdGljYWwgSVBzZWMvWEZSTSBuZXR3b3JraW5nIGNvZGUsIG1ha2luZyBpdCBwcmltZSByZWFsIGVzdGF0ZSBmb3IgZnV6emluZy4gSSBjYW4gc2VlIHRoYXQgdGhlIGNoYW5nZXMgaW5jbHVkZSB6ZXJvLWNvcHkgZnJhZ21lbnQgaGFuZGxpbmcsIElQdjYgWEZSTSBlcnJvciBoYW5kbGluZywgRVNQLWluLVRDUCwgWEZSTSBwYWNrZXQgcGFyc2luZywgcmVpbmplY3Rpb24gbWVjaGFuaXNtcywgSVAtVEZTIChJUCBUcmFmZmljIEZsb3cgU2VjdXJpdHkpIGZyYWdtZW50IHZhbGlkYXRpb24sIHBvbGljeSBidW5kbGUgY3JlYXRpb24sIHN0YXRlIGRlbGV0aW9uIGxvY2tpbmcsIGRldmljZSBzdGF0ZSBmbHVzaGluZywgYW5kIHRoZSB1c2VyIHNwYWNlIG5ldGxpbmsgaGFuZGxlcnMuIEFsbCB0aGVzZSBhcmVhcyBhcmUgZGVmaW5pdGVseSBhY2Nlc3NpYmxlIHZpYSB1c2VyLWNvbnRyb2xsZWQgbmV0d29yayB0cmFmZmljIGFuZCBuZXRsaW5rIG1lc3NhZ2VzLCBzbyB0aGlzIGlzIGRlZmluaXRlbHkgc29tZXRoaW5nIHRvIHByaW9yaXRpemUuCgpJJiMzOTt2ZSBjb25maXJtZWQgdGhlIGV4aXN0ZW5jZSBhbmQgY29ycmVjdCBuYW1pbmcgb2YgYWxsIGlkZW50aWZpZWQgc3ltYm9scyBhY3Jvc3MgdGhlIHJlbGV2YW50IHNvdXJjZSBmaWxlcy4gVGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIGFsc28gY2hlY2sgb3V0LgoKQWxyaWdodCwgd2l0aCBhbGwgdGhlIGNoZWNrcyBjb21wbGV0ZWQsIEkmIzM5O20gY29uZmlkZW50IGluIHRoZSBhbmFseXNpcy4gTGV0JiMzOTtzIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTM6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVQmIzM0OywKICAgICYjMzQ7SVBWNiYjMzQ7LAogICAgJiMzNDtYRlJNJiMzNDssCiAgICAmIzM0O0lORVRfRVNQJiMzNDssCiAgICAmIzM0O0lORVQ2X0VTUCYjMzQ7LAogICAgJiMzNDtJTkVUX0VTUElOVENQJiMzNDssCiAgICAmIzM0O0lORVQ2X0VTUElOVENQJiMzNDssCiAgICAmIzM0O1hGUk1fVVNFUiYjMzQ7LAogICAgJiMzNDtYRlJNX0lQVEZTJiMzNDssCiAgICAmIzM0O1hGUk1fTUlHUkFURSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2VzcF9vdXRwdXRfaGVhZCYjMzQ7LAogICAgJiMzNDtlc3A2X291dHB1dF9oZWFkJiMzNDssCiAgICAmIzM0O3hmcm02X2xvY2FsX3J4cG10dSYjMzQ7LAogICAgJiMzNDt4ZnJtNl9sb2NhbF9lcnJvciYjMzQ7LAogICAgJiMzNDtlc3BpbnRjcF9yY3YmIzM0OywKICAgICYjMzQ7aGFuZGxlX2VzcCYjMzQ7LAogICAgJiMzNDt4ZnJtX2lucHV0JiMzNDssCiAgICAmIzM0O3hmcm1fdHJhbnNfcmVpbmplY3QmIzM0OywKICAgICYjMzQ7eGZybV90cmFuc19xdWV1ZV9uZXQmIzM0OywKICAgICYjMzQ7aXB0ZnNfc2tiX2Nhbl9hZGRfZnJhZ3MmIzM0OywKICAgICYjMzQ7aXB0ZnNfcmVhc3NlbV9jb250JiMzNDssCiAgICAmIzM0O3hmcm1fYnVuZGxlX2NyZWF0ZSYjMzQ7LAogICAgJiMzNDt4ZnJtX2NyZWF0ZV9kdW1teV9idW5kbGUmIzM0OywKICAgICYjMzQ7eGZybV9zdGF0ZV9nY190YXNrJiMzNDssCiAgICAmIzM0O19feGZybV9zdGF0ZV9kZWxldGUmIzM0OywKICAgICYjMzQ7eGZybV9kZXZfc3RhdGVfZmx1c2gmIzM0OywKICAgICYjMzQ7eGZybV9hbGxvY191c2Vyc3BpJiMzNDssCiAgICAmIzM0O3hmcm1fc2VuZF9taWdyYXRlX3N0YXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHRvdWNoZXMgY29yZSBJUHNlYyAoWEZSTSkgSVB2NC9JUHY2IG5ldHdvcmtpbmcgbG9naWMsIGluY2x1ZGluZyBFU1Agb3V0cHV0IHplcm8tY29weSBkb3duZ3JhZGVzLCBJUHY2IFhGUk0gZXJyb3IgcmVwb3J0aW5nIGZvciBub24tZnVsbCBzb2NrZXRzLCBFU1AtaW4tVENQIHRyYW5zcG9ydCBoZWFkZXIgcmVzZXR0aW5nLCBYRlJNIGlucHV0IHBhY2tldCBwcm90byBkaXNwYXRjaCBhbmQgYXN5bmMgZGV2LXJlZiByZWluamVjdGlvbiBoYW5kbGluZywgSVAtVEZTIGZyYWdtZW50IHdhbGsgYm91bmRzIGNoZWNrcywgcG9saWN5IGJ1bmRsZSBSQ1UgZGV2aWNlIHJlc29sdXRpb24sIHN0YXRlIEdDIHNlcmlhbGl6YXRpb24gdW5kZXIgbXV0ZXgsIGFuZCBYRlJNIHVzZXIgbmV0bGluayBoYW5kbGVycy4gQWxsIGNoYW5nZXMgYXJlIGluIHJlYWNoYWJsZSBuZXR3b3JraW5nIHBhdGhzIGV4ZXJjaXNhYmxlIHZpYSBzb2NrZXRzIGFuZCBYRlJNIG5ldGxpbmsgaW50ZXJmYWNlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SU5FVCYjMzQ7LAogICAgJiMzNDtJUFY2JiMzNDssCiAgICAmIzM0O1hGUk0mIzM0OywKICAgICYjMzQ7SU5FVF9FU1AmIzM0OywKICAgICYjMzQ7SU5FVDZfRVNQJiMzNDssCiAgICAmIzM0O0lORVRfRVNQSU5UQ1AmIzM0OywKICAgICYjMzQ7SU5FVDZfRVNQSU5UQ1AmIzM0OywKICAgICYjMzQ7WEZSTV9VU0VSJiMzNDssCiAgICAmIzM0O1hGUk1fSVBURlMmIzM0OywKICAgICYjMzQ7WEZSTV9NSUdSQVRFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZXNwX291dHB1dF9oZWFkJiMzNDssCiAgICAmIzM0O2VzcDZfb3V0cHV0X2hlYWQmIzM0OywKICAgICYjMzQ7eGZybTZfbG9jYWxfcnhwbXR1JiMzNDssCiAgICAmIzM0O3hmcm02X2xvY2FsX2Vycm9yJiMzNDssCiAgICAmIzM0O2VzcGludGNwX3JjdiYjMzQ7LAogICAgJiMzNDtoYW5kbGVfZXNwJiMzNDssCiAgICAmIzM0O3hmcm1faW5wdXQmIzM0OywKICAgICYjMzQ7eGZybV90cmFuc19yZWluamVjdCYjMzQ7LAogICAgJiMzNDt4ZnJtX3RyYW5zX3F1ZXVlX25ldCYjMzQ7LAogICAgJiMzNDtpcHRmc19za2JfY2FuX2FkZF9mcmFncyYjMzQ7LAogICAgJiMzNDtpcHRmc19yZWFzc2VtX2NvbnQmIzM0OywKICAgICYjMzQ7eGZybV9idW5kbGVfY3JlYXRlJiMzNDssCiAgICAmIzM0O3hmcm1fY3JlYXRlX2R1bW15X2J1bmRsZSYjMzQ7LAogICAgJiMzNDt4ZnJtX3N0YXRlX2djX3Rhc2smIzM0OywKICAgICYjMzQ7X194ZnJtX3N0YXRlX2RlbGV0ZSYjMzQ7LAogICAgJiMzNDt4ZnJtX2Rldl9zdGF0ZV9mbHVzaCYjMzQ7LAogICAgJiMzNDt4ZnJtX2FsbG9jX3VzZXJzcGkmIzM0OywKICAgICYjMzQ7eGZybV9zZW5kX21pZ3JhdGVfc3RhdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggdG91Y2hlcyBjb3JlIElQc2VjIChYRlJNKSBJUHY0L0lQdjYgbmV0d29ya2luZyBsb2dpYywgaW5jbHVkaW5nIEVTUCBvdXRwdXQgemVyby1jb3B5IGRvd25ncmFkZXMsIElQdjYgWEZSTSBlcnJvciByZXBvcnRpbmcgZm9yIG5vbi1mdWxsIHNvY2tldHMsIEVTUC1pbi1UQ1AgdHJhbnNwb3J0IGhlYWRlciByZXNldHRpbmcsIFhGUk0gaW5wdXQgcGFja2V0IHByb3RvIGRpc3BhdGNoIGFuZCBhc3luYyBkZXYtcmVmIHJlaW5qZWN0aW9uIGhhbmRsaW5nLCBJUC1URlMgZnJhZ21lbnQgd2FsayBib3VuZHMgY2hlY2tzLCBwb2xpY3kgYnVuZGxlIFJDVSBkZXZpY2UgcmVzb2x1dGlvbiwgc3RhdGUgR0Mgc2VyaWFsaXphdGlvbiB1bmRlciBtdXRleCwgYW5kIFhGUk0gdXNlciBuZXRsaW5rIGhhbmRsZXJzLiBBbGwgY2hhbmdlcyBhcmUgaW4gcmVhY2hhYmxlIG5ldHdvcmtpbmcgcGF0aHMgZXhlcmNpc2FibGUgdmlhIHNvY2tldHMgYW5kIFhGUk0gbmV0bGluayBpbnRlcmZhY2VzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxMzo1NDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDEzOjU0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIGNvbnRhaW5zIHNldmVyYWwgYnVnIGZpeGVzIGFuZCByZWZhY3RvcmluZ3MgYWNyb3NzIFhGUk0gYW5kIElQc2VjIG5ldHdvcmtpbmcgc3Vic3lzdGVtczpcbjEuIGBlc3A0LmNgIGFuZCBgZXNwNi5jYDogQWRkcyBgc2tiX3pjb3B5X2Rvd25ncmFkZV9tYW5hZ2VkKHNrYilgIHRvIGJhbGFuY2UgcmVmY291bnRzIG9uIHplcm9jb3B5IG1hbmFnZWQgZnJhZ3Mgd2hlbiBtdXRhdGluZyB0aGUgZnJhZyBhcnJheSAocmVmY291bnRpbmcgLyBVQUYgcHJldmVudGlvbiwgY292ZXJlZCBieSBLQVNBTi9yZWZjb3VudCB0cmFja2luZykuXG4yLiBgeGZybTZfb3V0cHV0LmNgOiBWYWxpZGF0ZXMgc29ja2V0cyB1c2luZyBgc2tiX3RvX2Z1bGxfc2soKWAgdG8gYXZvaWQgb3BlcmF0aW5nIG9uIG5vbi1mdWxsIHNvY2tldHMgb3IgTlVMTCBkZXJlZmVyZW5jZXMgKE5VTEwgcG9pbnRlciAvIHR5cGUgY29uZnVzaW9uKS5cbjMuIGBlc3BpbnRjcC5jYDogVXNlcyBgc2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bCgpYCB0byB2YWxpZGF0ZSB0cmFuc3BvcnQgaGVhZGVyIGJvdW5kcyBiZWZvcmUgcmVzZXR0aW5nIChPT0IgcHJldmVudGlvbiwgY292ZXJlZCBieSBLQVNBTikuXG40LiBgeGZybV9pbnB1dC5jYDogRml4ZXMgcHJvdG9jb2wgdHJhY2tpbmcgKGB4ZnJtX3Byb3RvYCksIGhhbmRsZXMgZGV2aWNlIHJlZmNvdW50cyBhbmQgUkNVIGxvY2tpbmcgZHVyaW5nIHJlaW5qZWN0aW9uLCBhbmQgZW5zdXJlcyBkc3QgZW50cnkgcGVyc2lzdGVuY2UgKGBza2JfZHN0X2ZvcmNlYCkuIEFsbCB2YXJpYWJsZXMgKGB4ZnJtX3Byb3RvYCkgYXJlIGZ1bGx5IGluaXRpYWxpemVkIHdpdGggZGVmYXVsdCB2YWx1ZXMuXG41LiBgeGZybV9pcHRmcy5jYDogQWRkcyBib3VuZHMgY2hlY2tpbmcgb24gZnJhZyB3YWxrIG9mZnNldCB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgaW5kZXhpbmcgaW4gYGlwdGZzX3NrYl9yZXNldF9mcmFnX3dhbGsoKWAsIGFuZCBjb3JyZWN0cyBydW50IHNpemUgdmVyaWZpY2F0aW9uIGFnYWluc3QgSVAgaGVhZGVyIGxlbmd0aCAoT09CIHJlYWRzLCBjb3ZlcmVkIGJ5IEtBU0FOKS5cbjYuIGB4ZnJtX3BvbGljeS5jYCwgYHhmcm1fc3RhdGUuY2AsIGB4ZnJtX3VzZXIuY2A6IEFkZHMgbWlzc2luZyBSQ1UgcmVhZCBsb2NrcyAoYGRzdF9kZXZfcmN1YCwgbXVsdGljYXN0KSwgYWRkcyBhIEdDIG11dGV4IHRvIHNlcmlhbGl6ZSBzdGF0ZSBkZXN0cnVjdGlvbiwgYW5kIGZpeGVzIGxpc3QgZGVsZXRpb24gaW5pdGlhbGl6YXRpb24gKGBobGlzdF9kZWxfaW5pdF9yY3VgKS5cblxuTm9uZSBvZiB0aGUgY2hhbmdlcyBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIG1lbW9yeSwga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcywgb3IgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gVGhlIHJpc2tzIGFkZHJlc3NlZCAob3V0LW9mLWJvdW5kcyBhY2Nlc3MsIHJlZmNvdW50aW5nLCB1c2UtYWZ0ZXItZnJlZSwgY29uY3VycmVuY3kvUkNVKSBhcmUgY292ZXJlZCBieSBLQVNBTiwgUFJPVkVfUkNVLCBhbmQgc3RhbmRhcmQgZGVidWcgY2hlY2tlcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBjZTAxNGRhMTUzZDhkY2U4YzMzZTM2ZmE5NTdmMTAxMzk2M2Y2ZTE5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBTZXAgNyAxMzo1Mzo1MCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2VzcDQuYyBiL25ldC9pcHY0L2VzcDQuYwppbmRleCBhNmMxOGFlYTc0OThkLi5lNzZkYjU4MTdlNzhlIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9lc3A0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvZXNwNC5jCkBAIC00NDEsNiAmIzQzOzQ0MSwxMiBAQCBpbnQgZXNwX291dHB1dF9oZWFkKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZXNwX2luZm8gKgogCiAJCQllc3AtJmd0O2lucGxhY2UgPSBmYWxzZTsKIAomIzQzOwkJCS8qIFRha2UgcmVhbCBwYWdlIHJlZnMgYW5kIGNsZWFyIFNLQkZMX01BTkFHRURfRlJBR19SRUZTIGJlZm9yZQomIzQzOwkJCSAqIHdlIG11dGF0ZSB0aGUgZnJhZyBhcnJheSwgc28gdGhlIHBlci1mcmFnIHVucmVmIHN0YXlzIGJhbGFuY2VkCiYjNDM7CQkJICogZm9yIHplcm9jb3B5IG1hbmFnZWQgZnJhZ3MgKHNlZSBfX2lwX2FwcGVuZF9kYXRhKCkpLgomIzQzOwkJCSAqLwomIzQzOwkJCXNrYl96Y29weV9kb3duZ3JhZGVfbWFuYWdlZChza2IpOwomIzQzOwogCQkJYWxsb2NzaXplID0gQUxJR04odGFpbGVuLCBMMV9DQUNIRV9CWVRFUyk7CiAKIAkJCXNwaW5fbG9ja19iaCgmYW1wO3gtJmd0O2xvY2spOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvZXNwNi5jIGIvbmV0L2lwdjYvZXNwNi5jCmluZGV4IDcyZWMwZDdkMTEyMDkuLmIxYzliMzZmNzZkYzQgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2VzcDYuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9lc3A2LmMKQEAgLTQ3MSw2ICYjNDM7NDcxLDEyIEBAIGludCBlc3A2X291dHB1dF9oZWFkKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZXNwX2luZm8KIAogCQkJZXNwLSZndDtpbnBsYWNlID0gZmFsc2U7CiAKJiM0MzsJCQkvKiBUYWtlIHJlYWwgcGFnZSByZWZzIGFuZCBjbGVhciBTS0JGTF9NQU5BR0VEX0ZSQUdfUkVGUyBiZWZvcmUKJiM0MzsJCQkgKiB3ZSBtdXRhdGUgdGhlIGZyYWcgYXJyYXksIHNvIHRoZSBwZXItZnJhZyB1bnJlZiBzdGF5cyBiYWxhbmNlZAomIzQzOwkJCSAqIGZvciB6ZXJvY29weSBtYW5hZ2VkIGZyYWdzIChzZWUgX19pcF9hcHBlbmRfZGF0YSgpKS4KJiM0MzsJCQkgKi8KJiM0MzsJCQlza2JfemNvcHlfZG93bmdyYWRlX21hbmFnZWQoc2tiKTsKJiM0MzsKIAkJCWFsbG9jc2l6ZSA9IEFMSUdOKHRhaWxlbiwgTDFfQ0FDSEVfQllURVMpOwogCiAJCQlzcGluX2xvY2tfYmgoJmFtcDt4LSZndDtsb2NrKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3hmcm02X291dHB1dC5jIGIvbmV0L2lwdjYveGZybTZfb3V0cHV0LmMKaW5kZXggNTEyYmRhZjEzNjk5Ny4uNDRiMjIxYTA5YTBjOCAxMDA2NDQKLS0tIGEvbmV0L2lwdjYveGZybTZfb3V0cHV0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYveGZybTZfb3V0cHV0LmMKQEAgLTE5LDcgJiM0MzsxOSwxMCBAQAogdm9pZCB4ZnJtNl9sb2NhbF9yeHBtdHUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIG10dSkKIHsKIAlzdHJ1Y3QgZmxvd2k2IGZsNjsKLQlzdHJ1Y3Qgc29jayAqc2sgPSBza2ItJmd0O3NrOwomIzQzOwlzdHJ1Y3Qgc29jayAqc2sgPSBza2JfdG9fZnVsbF9zayhza2IpOwomIzQzOwomIzQzOwlpZiAoIXNrKQomIzQzOwkJcmV0dXJuOwogCiAJZmw2LmZsb3dpNl9vaWYgPSBzay0mZ3Q7c2tfYm91bmRfZGV2X2lmOwogCWZsNi5kYWRkciA9IGlwdjZfaGRyKHNrYiktJmd0O2RhZGRyOwpAQCAtMzEsNyAmIzQzOzM0LDEwIEBAIHZvaWQgeGZybTZfbG9jYWxfZXJyb3Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIG10dSkKIHsKIAlzdHJ1Y3QgZmxvd2k2IGZsNjsKIAljb25zdCBzdHJ1Y3QgaXB2NmhkciAqaGRyOwotCXN0cnVjdCBzb2NrICpzayA9IHNrYi0mZ3Q7c2s7CiYjNDM7CXN0cnVjdCBzb2NrICpzayA9IHNrYl90b19mdWxsX3NrKHNrYik7CiYjNDM7CiYjNDM7CWlmICghc2spCiYjNDM7CQlyZXR1cm47CiAKIAloZHIgPSBza2ItJmd0O2VuY2Fwc3VsYXRpb24gPyBpbm5lcl9pcHY2X2hkcihza2IpIDogaXB2Nl9oZHIoc2tiKTsKIAlmbDYuZmw2X2Rwb3J0ID0gaW5ldF9zayhzayktJmd0O2luZXRfZHBvcnQ7CmRpZmYgLS1naXQgYS9uZXQveGZybS9lc3BpbnRjcC5jIGIvbmV0L3hmcm0vZXNwaW50Y3AuYwppbmRleCA2NzRhZWRjNWFmNWEyLi4zZTcyYjlmMDY3YjliIDEwMDY0NAotLS0gYS9uZXQveGZybS9lc3BpbnRjcC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC94ZnJtL2VzcGludGNwLmMKQEAgLTMwLDcgJiM0MzszMCwxMSBAQCBzdGF0aWMgdm9pZCBoYW5kbGVfZXNwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzb2NrICpzaykKIHsKIAlzdHJ1Y3QgdGNwX3NrYl9jYiAqdGNwX2NiID0gKHN0cnVjdCB0Y3Bfc2tiX2NiICopc2tiLSZndDtjYjsKIAotCXNrYl9yZXNldF90cmFuc3BvcnRfaGVhZGVyKHNrYik7CiYjNDM7CWlmICghc2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bChza2IpKSB7CiYjNDM7CQlYRlJNX0lOQ19TVEFUUyhzb2NrX25ldChzayksIExJTlVYX01JQl9YRlJNSU5FUlJPUik7CiYjNDM7CQlrZnJlZV9za2Ioc2tiKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQogCiAJLyogcmVzdG9yZSBJUCBDQiwgd2UgbmVlZCBhdCBsZWFzdCBJUDZDQi0mZ3Q7bmhvZmYgKi8KIAltZW1tb3ZlKHNrYi0mZ3Q7Y2IsICZhbXA7dGNwX2NiLSZndDtoZWFkZXIsIHNpemVvZih0Y3BfY2ItJmd0O2hlYWRlcikpOwpkaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV9pbnB1dC5jIGIvbmV0L3hmcm0veGZybV9pbnB1dC5jCmluZGV4IGVlY2FiMzM3YmQwYTcuLjVlZDg3ZDUxMzkyYTUgMTAwNjQ0Ci0tLSBhL25ldC94ZnJtL3hmcm1faW5wdXQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQveGZybS94ZnJtX2lucHV0LmMKQEAgLTQ3NCw2ICYjNDM7NDc0LDcgQEAgaW50IHhmcm1faW5wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG5leHRoZHIsIF9fYmUzMiBzcGksIGludCBlbmNhcF90eXBlKQogCXN0cnVjdCB4ZnJtX3N0YXRlICp4ID0gTlVMTDsKIAl4ZnJtX2FkZHJlc3NfdCAqZGFkZHI7CiAJdTMyIG1hcmsgPSBza2ItJmd0O21hcms7CiYjNDM7CXU4IHhmcm1fcHJvdG8gPSBuZXh0aGRyOwogCXVuc2lnbmVkIGludCBmYW1pbHkgPSBBRl9VTlNQRUM7CiAJaW50IGRlY2FwcyA9IDA7CiAJaW50IGFzeW5jID0gMDsKQEAgLTQ4NSw2ICYjNDM7NDg2LDcgQEAgaW50IHhmcm1faW5wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG5leHRoZHIsIF9fYmUzMiBzcGksIGludCBlbmNhcF90eXBlKQogCWlmIChlbmNhcF90eXBlICZsdDsgMCB8fCAoeG8gJmFtcDsmYW1wOyAoeG8tJmd0O2ZsYWdzICZhbXA7IFhGUk1fR1JPIHx8IGVuY2FwX3R5cGUgPT0gMCB8fAogCQkJCSAgICAgIGVuY2FwX3R5cGUgPT0gVURQX0VOQ0FQX0VTUElOVURQKSkpIHsKIAkJeCA9IHhmcm1faW5wdXRfc3RhdGUoc2tiKTsKJiM0MzsJCXhmcm1fcHJvdG8gPSB4LSZndDt0eXBlID8geC0mZ3Q7dHlwZS0mZ3Q7cHJvdG8gOiBuZXh0aGRyOwogCiAJCWlmICh1bmxpa2VseSh4LSZndDtrbS5zdGF0ZSAhPSBYRlJNX1NUQVRFX1ZBTElEKSkgewogCQkJaWYgKHgtJmd0O2ttLnN0YXRlID09IFhGUk1fU1RBVEVfQUNRKQpAQCAtNTkyLDExICYjNDM7NTk0LDEzIEBAIGludCB4ZnJtX2lucHV0KHN0cnVjdCBza19idWZmICpza2IsIGludCBuZXh0aGRyLCBfX2JlMzIgc3BpLCBpbnQgZW5jYXBfdHlwZSkKIAogCQl4ID0geGZybV9pbnB1dF9zdGF0ZV9sb29rdXAobmV0LCBtYXJrLCBkYWRkciwgc3BpLCBuZXh0aGRyLCBmYW1pbHkpOwogCQlpZiAoeCA9PSBOVUxMKSB7CiYjNDM7CQkJeGZybV9wcm90byA9IG5leHRoZHI7CiAJCQlzZWNwYXRoX3Jlc2V0KHNrYik7CiAJCQlYRlJNX0lOQ19TVEFUUyhuZXQsIExJTlVYX01JQl9YRlJNSU5OT1NUQVRFUyk7CiAJCQl4ZnJtX2F1ZGl0X3N0YXRlX25vdGZvdW5kKHNrYiwgZmFtaWx5LCBzcGksIHNlcSk7CiAJCQlnb3RvIGRyb3A7CiAJCX0KJiM0MzsJCXhmcm1fcHJvdG8gPSB4LSZndDt0eXBlID8geC0mZ3Q7dHlwZS0mZ3Q7cHJvdG8gOiBuZXh0aGRyOwogCiAJCWlmICh1bmxpa2VseSh4LSZndDtkaXIgJmFtcDsmYW1wOyB4LSZndDtkaXIgIT0gWEZSTV9TQV9ESVJfSU4pKSB7CiAJCQlzZWNwYXRoX3Jlc2V0KHNrYik7CkBAIC02MDQsNiAmIzQzOzYwOCw3IEBAIGludCB4ZnJtX2lucHV0KHN0cnVjdCBza19idWZmICpza2IsIGludCBuZXh0aGRyLCBfX2JlMzIgc3BpLCBpbnQgZW5jYXBfdHlwZSkKIAkJCXhmcm1fYXVkaXRfc3RhdGVfbm90Zm91bmQoc2tiLCBmYW1pbHksIHNwaSwgc2VxKTsKIAkJCXhmcm1fc3RhdGVfcHV0KHgpOwogCQkJeCA9IE5VTEw7CiYjNDM7CQkJeGZybV9wcm90byA9IG5leHRoZHI7CiAJCQlnb3RvIGRyb3A7CiAJCX0KIApAQCAtNzI4LDcgJiM0Mzs3MzMsNyBAQCBpbnQgeGZybV9pbnB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbmV4dGhkciwgX19iZTMyIHNwaSwgaW50IGVuY2FwX3R5cGUpCiAJfSB3aGlsZSAoIWVycik7CiAKIAlyY3VfcmVhZF9sb2NrKCk7Ci0JZXJyID0geGZybV9yY3ZfY2Ioc2tiLCBmYW1pbHksIHgtJmd0O3R5cGUtJmd0O3Byb3RvLCAwKTsKJiM0MzsJZXJyID0geGZybV9yY3ZfY2Ioc2tiLCBmYW1pbHksIHhmcm1fcHJvdG8sIDApOwogCWlmIChlcnIpIHsKIAkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJCWdvdG8gZHJvcDsKQEAgLTc1Myw3ICYjNDM7NzU4LDcgQEAgaW50IHhmcm1faW5wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG5leHRoZHIsIF9fYmUzMiBzcGksIGludCBlbmNhcF90eXBlKQogCQkJeGZybV9ncm8gPSB4by0mZ3Q7ZmxhZ3MgJmFtcDsgWEZSTV9HUk87CiAKIAkJZXJyID0gLUVBRk5PU1VQUE9SVDsKLQkJYWZpbmZvID0geGZybV9zdGF0ZV9hZmluZm9fZ2V0X3JjdSh4LSZndDtwcm9wcy5mYW1pbHkpOwomIzQzOwkJYWZpbmZvID0geGZybV9zdGF0ZV9hZmluZm9fZ2V0X3JjdShmYW1pbHkpOwogCQlpZiAobGlrZWx5KGFmaW5mbykpCiAJCQllcnIgPSBhZmluZm8tJmd0O3RyYW5zcG9ydF9maW5pc2goc2tiLCB4ZnJtX2dybyB8fCBhc3luYyk7CiAJCWlmICh4ZnJtX2dybykgewpAQCAtNzc2LDcgJiM0Mzs3ODEsNyBAQCBpbnQgeGZybV9pbnB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbmV4dGhkciwgX19iZTMyIHNwaSwgaW50IGVuY2FwX3R5cGUpCiBkcm9wOgogCWlmIChhc3luYykKIAkJZGV2X3B1dChkZXYpOwotCXhmcm1fcmN2X2NiKHNrYiwgZmFtaWx5LCB4ICZhbXA7JmFtcDsgeC0mZ3Q7dHlwZSA/IHgtJmd0O3R5cGUtJmd0O3Byb3RvIDogbmV4dGhkciwgLTEpOwomIzQzOwl4ZnJtX3Jjdl9jYihza2IsIGZhbWlseSwgeGZybV9wcm90bywgLTEpOwogCWtmcmVlX3NrYihza2IpOwogCXJldHVybiAwOwogfQpAQCAtODAwLDEyICYjNDM7ODA1LDE3IEBAIHN0YXRpYyB2b2lkIHhmcm1fdHJhbnNfcmVpbmplY3Qoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogCXNwaW5fdW5sb2NrX2JoKCZhbXA7dHJhbnMtJmd0O3F1ZXVlX2xvY2spOwogCiAJbG9jYWxfYmhfZGlzYWJsZSgpOwomIzQzOwlyY3VfcmVhZF9sb2NrKCk7CiAJd2hpbGUgKChza2IgPSBfX3NrYl9kZXF1ZXVlKCZhbXA7cXVldWUpKSkgewogCQlzdHJ1Y3QgbmV0ICpuZXQgPSBYRlJNX1RSQU5TX1NLQl9DQihza2IpLSZndDtuZXQ7CiYjNDM7CQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gc2tiLSZndDtkZXY7CiAKIAkJWEZSTV9UUkFOU19TS0JfQ0Ioc2tiKS0mZ3Q7ZmluaXNoKG5ldCwgTlVMTCwgc2tiKTsKJiM0MzsJCWlmIChkZXYpCiYjNDM7CQkJZGV2X3B1dChkZXYpOwogCQlwdXRfbmV0KG5ldCk7CiAJfQomIzQzOwlyY3VfcmVhZF91bmxvY2soKTsKIAlsb2NhbF9iaF9lbmFibGUoKTsKIH0KIApAQCAtODIxLDEyICYjNDM7ODMxLDE4IEBAIGludCB4ZnJtX3RyYW5zX3F1ZXVlX25ldChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsCiAJaWYgKHNrYl9xdWV1ZV9sZW4oJmFtcDt0cmFucy0mZ3Q7cXVldWUpICZndDs9IFJFQURfT05DRShuZXRfaG90ZGF0YS5tYXhfYmFja2xvZykpCiAJCXJldHVybiAtRU5PQlVGUzsKIAomIzQzOwlpZiAoc2tiX2RzdChza2IpICZhbXA7JmFtcDsgIXNrYl9kc3RfZm9yY2Uoc2tiKSkKJiM0MzsJCXJldHVybiAtRUhPU1RVTlJFQUNIOwomIzQzOwogCUJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IHhmcm1fdHJhbnNfY2IpICZndDsgc2l6ZW9mKHNrYi0mZ3Q7Y2IpKTsKIAogCWhvbGRfbmV0ID0gbWF5YmVfZ2V0X25ldChuZXQpOwogCWlmICghaG9sZF9uZXQpCiAJCXJldHVybiAtRU5PREVWOwogCiYjNDM7CWlmIChza2ItJmd0O2RldikKJiM0MzsJCWRldl9ob2xkKHNrYi0mZ3Q7ZGV2KTsKJiM0MzsKIAlYRlJNX1RSQU5TX1NLQl9DQihza2IpLSZndDtmaW5pc2ggPSBmaW5pc2g7CiAJWEZSTV9UUkFOU19TS0JfQ0Ioc2tiKS0mZ3Q7bmV0ID0gaG9sZF9uZXQ7CiAJc3Bpbl9sb2NrX2JoKCZhbXA7dHJhbnMtJmd0O3F1ZXVlX2xvY2spOwpkaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV9pcHRmcy5jIGIvbmV0L3hmcm0veGZybV9pcHRmcy5jCmluZGV4IDU5N2FlZGVhYzI2ZWIuLjY5MjA5NDBhMzViNDkgMTAwNjQ0Ci0tLSBhL25ldC94ZnJtL3hmcm1faXB0ZnMuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQveGZybS94ZnJtX2lwdGZzLmMKQEAgLTQxNiw2ICYjNDM7NDE2LDE0IEBAIHN0YXRpYyBib29sIGlwdGZzX3NrYl9jYW5fYWRkX2ZyYWdzKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCiAJaWYgKHNrYl9oYXNfZnJhZ19saXN0KHNrYikgfHwgc2tiLSZndDtwcF9yZWN5Y2xlICE9IHdhbGstJmd0O3BwX3JlY3ljbGUpCiAJCXJldHVybiBmYWxzZTsKIAomIzQzOwkvKiBSZWplY3QgYW4gQG9mZnNldCB0aGF0IGlzIGF0IG9yIGJleW9uZCB0aGUgZW5kIG9mIHRoZSB3YWxrJiMzOTtzIGRhdGEKJiM0MzsJICogYmVmb3JlIGNhbGxpbmcgaXB0ZnNfc2tiX3Jlc2V0X2ZyYWdfd2FsaygpLCB3aG9zZSBmcmFnbWVudC1hZHZhbmNlCiYjNDM7CSAqIGxvb3AgaXMgb3RoZXJ3aXNlIHVuYm91bmRlZCBhbmQgd291bGQgaW5kZXggcGFzdCB3YWxrLSZndDtmcmFnc1tdLgomIzQzOwkgKiBUaGlzIG1pcnJvcnMgdGhlIGd1YXJkIGFscmVhZHkgcHJlc2VudCBpbiBpcHRmc19za2JfYWRkX2ZyYWdzKCkuCiYjNDM7CSAqLwomIzQzOwlpZiAoIXdhbGstJmd0O25yX2ZyYWdzIHx8IG9mZnNldCAmZ3Q7PSB3YWxrLSZndDt0b3RhbCAmIzQzOyB3YWxrLSZndDtpbml0aWFsX29mZnNldCkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKIAkvKiBNYWtlIG9mZnNldCByZWxhdGl2ZSB0byBjdXJyZW50IGZyYWcgYWZ0ZXIgc2V0dGluZyB0aGF0ICovCiAJb2Zmc2V0ID0gaXB0ZnNfc2tiX3Jlc2V0X2ZyYWdfd2Fsayh3YWxrLCBvZmZzZXQpOwogCkBAIC04MjAsOCAmIzQzOzgyOCw4IEBAIHN0YXRpYyB1MzIgaXB0ZnNfcmVhc3NlbV9jb250KHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsIHU2NCBzZXEsCiAJCSAqIGFsbG9jYXRlIGFuIGluIHByb2dyZXNzIHNrYgogCQkgKi8KIAkJaXByZW1haW4gPSBfX2lwdGZzX2lwbGVuKHh0ZnMtJmd0O3JhX3J1bnQpOwotCQlpZiAoaXByZW1haW4gJmx0OyBzaXplb2YoeHRmcy0mZ3Q7cmFfcnVudCkpIHsKLQkJCS8qIGxlbmd0aCBoYXMgdG8gYmUgYXQgbGVhc3QgcnVudHNpemUgbGFyZ2UgKi8KJiM0MzsJCWlmIChpcHJlbWFpbiAmbHQ7IF9faXB0ZnNfaXBobGVuKHh0ZnMtJmd0O3JhX3J1bnQpKSB7CiYjNDM7CQkJLyogbGVuZ3RoIGhhcyB0byBiZSBhdCBsZWFzdCB0aGUgSVAgaGVhZGVyIHNpemUgKi8KIAkJCVhGUk1fSU5DX1NUQVRTKHhzX25ldCh4dGZzLSZndDt4KSwKIAkJCQkgICAgICAgTElOVVhfTUlCX1hGUk1JTklQVEZTRVJST1IpOwogCQkJZ290byBhYmFuZG9uOwpkaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV9wb2xpY3kuYyBiL25ldC94ZnJtL3hmcm1fcG9saWN5LmMKaW5kZXggOTMyYTMxM2I5NDYwYS4uNTEzYzlmMjI4MzM0NyAxMDA2NDQKLS0tIGEvbmV0L3hmcm0veGZybV9wb2xpY3kuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQveGZybS94ZnJtX3BvbGljeS5jCkBAIC0yNzcwLDkgJiM0MzsyNzcwLDEyIEBAIHN0YXRpYyBzdHJ1Y3QgZHN0X2VudHJ5ICp4ZnJtX2J1bmRsZV9jcmVhdGUoc3RydWN0IHhmcm1fcG9saWN5ICpwb2xpY3ksCiAJeGRzdDAtJmd0O3BhdGggPSBkc3Q7CiAKIAllcnIgPSAtRU5PREVWOwotCWRldiA9IGRzdC0mZ3Q7ZGV2OwotCWlmICghZGV2KQomIzQzOwlyY3VfcmVhZF9sb2NrKCk7CiYjNDM7CWRldiA9IGRzdF9kZXZfcmN1KGRzdCk7CiYjNDM7CWlmICghZGV2KSB7CiYjNDM7CQlyY3VfcmVhZF91bmxvY2soKTsKIAkJZ290byBmcmVlX2RzdDsKJiM0MzsJfQogCiAJeGZybV9pbml0X3BhdGgoeGRzdDAsIGRzdCwgbmZoZWFkZXJfbGVuKTsKIAl4ZnJtX2luaXRfcG10dShidW5kbGUsIG54KTsKQEAgLTI3ODAsOCAmIzQzOzI3ODMsMTAgQEAgc3RhdGljIHN0cnVjdCBkc3RfZW50cnkgKnhmcm1fYnVuZGxlX2NyZWF0ZShzdHJ1Y3QgeGZybV9wb2xpY3kgKnBvbGljeSwKIAlmb3IgKHhkc3RfcHJldiA9IHhkc3QwOyB4ZHN0X3ByZXYgIT0gKHN0cnVjdCB4ZnJtX2RzdCAqKWRzdDsKIAkgICAgIHhkc3RfcHJldiA9IChzdHJ1Y3QgeGZybV9kc3QgKikgeGZybV9kc3RfY2hpbGQoJmFtcDt4ZHN0X3ByZXYtJmd0O3UuZHN0KSkgewogCQllcnIgPSB4ZnJtX2ZpbGxfZHN0KHhkc3RfcHJldiwgZGV2LCBmbCk7Ci0JCWlmIChlcnIpCiYjNDM7CQlpZiAoZXJyKSB7CiYjNDM7CQkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJCQlnb3RvIGZyZWVfZHN0OwomIzQzOwkJfQogCiAJCXhkc3RfcHJldi0mZ3Q7dS5kc3QuaGVhZGVyX2xlbiA9IGhlYWRlcl9sZW47CiAJCXhkc3RfcHJldi0mZ3Q7dS5kc3QudHJhaWxlcl9sZW4gPSB0cmFpbGVyX2xlbjsKQEAgLTI3ODksNiAmIzQzOzI3OTQsNyBAQCBzdGF0aWMgc3RydWN0IGRzdF9lbnRyeSAqeGZybV9idW5kbGVfY3JlYXRlKHN0cnVjdCB4ZnJtX3BvbGljeSAqcG9saWN5LAogCQl0cmFpbGVyX2xlbiAtPSB4ZHN0X3ByZXYtJmd0O3UuZHN0Lnhmcm0tJmd0O3Byb3BzLnRyYWlsZXJfbGVuOwogCX0KIAomIzQzOwlyY3VfcmVhZF91bmxvY2soKTsKIAlyZXR1cm4gJmFtcDt4ZHN0MC0mZ3Q7dS5kc3Q7CiAKIHB1dF9zdGF0ZXM6CkBAIC0zMDU4LDExICYjNDM7MzA2NCwxNSBAQCBzdGF0aWMgc3RydWN0IHhmcm1fZHN0ICp4ZnJtX2NyZWF0ZV9kdW1teV9idW5kbGUoc3RydWN0IG5ldCAqbmV0LAogCXhmcm1faW5pdF9wYXRoKChzdHJ1Y3QgeGZybV9kc3QgKilkc3QxLCBkc3QsIDApOwogCiAJZXJyID0gLUVOT0RFVjsKLQlkZXYgPSBkc3QtJmd0O2RldjsKLQlpZiAoIWRldikKJiM0MzsJcmN1X3JlYWRfbG9jaygpOwomIzQzOwlkZXYgPSBkc3RfZGV2X3JjdShkc3QpOwomIzQzOwlpZiAoIWRldikgewomIzQzOwkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJCWdvdG8gZnJlZV9kc3Q7CiYjNDM7CX0KIAogCWVyciA9IHhmcm1fZmlsbF9kc3QoeGRzdCwgZGV2LCBmbCk7CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwogCWlmIChlcnIpCiAJCWdvdG8gZnJlZV9kc3Q7CiAKZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1fc3RhdGUuYyBiL25ldC94ZnJtL3hmcm1fc3RhdGUuYwppbmRleCAzNmE0ZjY3OTNlZGVmLi5lNDVhYTFlZDViOTY1IDEwMDY0NAotLS0gYS9uZXQveGZybS94ZnJtX3N0YXRlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3hmcm0veGZybV9zdGF0ZS5jCkBAIC0yMjYsNiAmIzQzOzIyNiw3IEBAIHN0YXRpYyBzdHJ1Y3QgeGZybV9zdGF0ZV9hZmluZm8gX19yY3UgKnhmcm1fc3RhdGVfYWZpbmZvW05QUk9UT107CiAKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soeGZybV9zdGF0ZV9nY19sb2NrKTsKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soeGZybV9zdGF0ZV9kZXZfZ2NfbG9jayk7CiYjNDM7c3RhdGljIERFRklORV9NVVRFWCh4ZnJtX3N0YXRlX2djX211dGV4KTsKIAogaW50IF9feGZybV9zdGF0ZV9kZWxldGUoc3RydWN0IHhmcm1fc3RhdGUgKngpOwogCkBAIC02MzIsOCAmIzQzOzYzMywxMCBAQCBzdGF0aWMgdm9pZCB4ZnJtX3N0YXRlX2djX3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogCiAJc3luY2hyb25pemVfcmN1KCk7CiAKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO3hmcm1fc3RhdGVfZ2NfbXV0ZXgpOwogCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoeCwgdG1wLCAmYW1wO2djX2xpc3QsIGdjbGlzdCkKIAkJeGZybV9zdGF0ZV9nY19kZXN0cm95KHgpOwomIzQzOwltdXRleF91bmxvY2soJmFtcDt4ZnJtX3N0YXRlX2djX211dGV4KTsKIH0KIAogc3RhdGljIGVudW0gaHJ0aW1lcl9yZXN0YXJ0IHhmcm1fdGltZXJfaGFuZGxlcihzdHJ1Y3QgaHJ0aW1lciAqbWUpCkBAIC04MjMsOSAmIzQzOzgyNiw5IEBAIGludCBfX3hmcm1fc3RhdGVfZGVsZXRlKHN0cnVjdCB4ZnJtX3N0YXRlICp4KQogCQlpZiAoIWhsaXN0X3VuaGFzaGVkKCZhbXA7eC0mZ3Q7YnlzZXEpKQogCQkJaGxpc3RfZGVsX2luaXRfcmN1KCZhbXA7eC0mZ3Q7YnlzZXEpOwogCQlpZiAoIWhsaXN0X3VuaGFzaGVkKCZhbXA7eC0mZ3Q7c3RhdGVfY2FjaGUpKQotCQkJaGxpc3RfZGVsX3JjdSgmYW1wO3gtJmd0O3N0YXRlX2NhY2hlKTsKJiM0MzsJCQlobGlzdF9kZWxfaW5pdF9yY3UoJmFtcDt4LSZndDtzdGF0ZV9jYWNoZSk7CiAJCWlmICghaGxpc3RfdW5oYXNoZWQoJmFtcDt4LSZndDtzdGF0ZV9jYWNoZV9pbnB1dCkpCi0JCQlobGlzdF9kZWxfcmN1KCZhbXA7eC0mZ3Q7c3RhdGVfY2FjaGVfaW5wdXQpOwomIzQzOwkJCWhsaXN0X2RlbF9pbml0X3JjdSgmYW1wO3gtJmd0O3N0YXRlX2NhY2hlX2lucHV0KTsKIAogCQlpZiAoIWhsaXN0X3VuaGFzaGVkKCZhbXA7eC0mZ3Q7YnlzcGkpKQogCQkJaGxpc3RfZGVsX2luaXRfcmN1KCZhbXA7eC0mZ3Q7YnlzcGkpOwpAQCAtMTAwMCw2ICYjNDM7MTAwMyw3IEBAIGludCB4ZnJtX2Rldl9zdGF0ZV9mbHVzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGJvb2wgdGFza192YWxpCiBvdXQ6CiAJc3Bpbl91bmxvY2tfYmgoJmFtcDtuZXQtJmd0O3hmcm0ueGZybV9zdGF0ZV9sb2NrKTsKIAomIzQzOwltdXRleF9sb2NrKCZhbXA7eGZybV9zdGF0ZV9nY19tdXRleCk7CiAJc3Bpbl9sb2NrX2JoKCZhbXA7eGZybV9zdGF0ZV9kZXZfZ2NfbG9jayk7CiByZXN0YXJ0X2djOgogCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoeCwgdG1wLCAmYW1wO3hmcm1fc3RhdGVfZGV2X2djX2xpc3QsIGRldl9nY2xpc3QpIHsKQEAgLTEwMTQsNiAmIzQzOzEwMTgsNyBAQCBpbnQgeGZybV9kZXZfc3RhdGVfZmx1c2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIHRhc2tfdmFsaQogCiAJfQogCXNwaW5fdW5sb2NrX2JoKCZhbXA7eGZybV9zdGF0ZV9kZXZfZ2NfbG9jayk7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO3hmcm1fc3RhdGVfZ2NfbXV0ZXgpOwogCiAJeGZybV9mbHVzaF9nYygpOwogCmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX3VzZXIuYyBiL25ldC94ZnJtL3hmcm1fdXNlci5jCmluZGV4IDYyNjZhOTJjZjMwMjAuLmEyNTg3YzdlNzk2YjQgMTAwNjQ0Ci0tLSBhL25ldC94ZnJtL3hmcm1fdXNlci5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC94ZnJtL3hmcm1fdXNlci5jCkBAIC0xODc3LDcgJiM0MzsxODc3LDYgQEAgc3RhdGljIGludCB4ZnJtX2FsbG9jX3VzZXJzcGkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsCiAJc3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2tiLSZndDtzayk7CiAJc3RydWN0IHhmcm1fc3RhdGUgKng7CiAJc3RydWN0IHhmcm1fdXNlcnNwaV9pbmZvICpwOwotCXN0cnVjdCB4ZnJtX3RyYW5zbGF0b3IgKnh0cjsKIAlzdHJ1Y3Qgc2tfYnVmZiAqcmVzcF9za2I7CiAJeGZybV9hZGRyZXNzX3QgKmRhZGRyOwogCWludCBmYW1pbHk7CkBAIC0xOTQzLDE3ICYjNDM7MTk0Miw2IEBAIHN0YXRpYyBpbnQgeGZybV9hbGxvY191c2Vyc3BpKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLAogCQlnb3RvIG91dDsKIAl9CiAKLQl4dHIgPSB4ZnJtX2dldF90cmFuc2xhdG9yKCk7Ci0JaWYgKHh0cikgewotCQllcnIgPSB4dHItJmd0O2FsbG9jX2NvbXBhdChza2IsIG5sbXNnX2hkcihza2IpKTsKLQotCQl4ZnJtX3B1dF90cmFuc2xhdG9yKHh0cik7Ci0JCWlmIChlcnIpIHsKLQkJCWtmcmVlX3NrYihyZXNwX3NrYik7Ci0JCQlnb3RvIG91dDsKLQkJfQotCX0KLQogCWVyciA9IG5sbXNnX3VuaWNhc3QoeGZybV9uZXRfbmxzayhuZXQsIHNrYiksIHJlc3Bfc2tiLCBORVRMSU5LX0NCKHNrYikucG9ydGlkKTsKIAogb3V0OgpAQCAtMzMzNyw3ICYjNDM7MzMyNSwxMSBAQCBzdGF0aWMgaW50IHhmcm1fc2VuZF9taWdyYXRlX3N0YXRlKHN0cnVjdCBuZXQgKm5ldCwKIAkJcmV0dXJuIGVycjsKIAl9CiAKLQlyZXR1cm4geGZybV9ubG1zZ19tdWx0aWNhc3QobmV0LCBza2IsIDAsIFhGUk1OTEdSUF9NSUdSQVRFKTsKJiM0MzsJcmN1X3JlYWRfbG9jaygpOwomIzQzOwllcnIgPSB4ZnJtX25sbXNnX211bHRpY2FzdChuZXQsIHNrYiwgMCwgWEZSTU5MR1JQX01JR1JBVEUpOwomIzQzOwlyY3VfcmVhZF91bmxvY2soKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIGludCB4ZnJtX2RvX21pZ3JhdGVfc3RhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxMzo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NDc3CgkJCQkJCQlvdXRwdXQ6IDQ3OAoJCQkJCQkJdGhvdWdodHM6IDE2ODkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gRXZhbHVhdGlvbjogUGF0Y2ggU2VyaWVzIEFuYWx5c2lzKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUgaWYgaXQgd2FycmFudHMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBNeSBnb2FsIGlzIHRvIGJlIGFzIHRob3JvdWdoIGFzIHBvc3NpYmxlLCBnaXZlbiBteSBleHBlcmllbmNlLgoKRmlyc3QsIEkgbmVlZCB0byBhbmFseXplIGVhY2ggY2hhbmdlIHdpdGhpbiB0aGUgZGlmZiB0byBzZWUgaWYgYW55IGludHJvZHVjZSBvciBleHBvc2UgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBJIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGVzZSByaXNrcyBhbmQgaG93IEtNU0FOIGlzIGRlc2lnbmVkIHRvIGNhdGNoIHRoZW0uCgoqICAgYG5ldC9pcHY0L2VzcDQuY2AgJmFtcDsgYG5ldC9pcHY2L2VzcDYuY2A6IFRoZSBhZGRpdGlvbiBvZiBgc2tiX3pjb3B5X2Rvd25ncmFkZV9tYW5hZ2VkKHNrYilgIGlzIGFib3V0IHBhZ2UgcmVmY291bnRpbmcgb24gemVyb2NvcHkgbWFuYWdlZCBmcmFncy4gVGhpcyBzb3VuZHMgbGlrZSBpdCYjMzk7cyBtYW5hZ2luZyBleGlzdGluZyBtZW1vcnksIG5vdCBhbGxvY2F0aW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBObyByZWQgZmxhZ3MgaGVyZS4KCiogICBgbmV0L2lwdjYveGZybTZfb3V0cHV0LmNgOiBSZXBsYWNpbmcgYHNrYi0mZ3Q7c2tgIHdpdGggYSBgc2tiX3RvX2Z1bGxfc2tgIGNoZWNrIGlzIGEgZ29vZCBwcmFjdGljZSB0byBhdm9pZCBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2VzIG9yIGhhbmRsaW5nIG9mICYjMzQ7bm9uLWZ1bGwmIzM0OyBzb2NrZXRzLiBUaGlzIHNlZW1zIGxpa2UgYSBzYWZldHkgaW1wcm92ZW1lbnQgcmF0aGVyIHRoYW4gYSBzb3VyY2Ugb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuCgoqICAgYG5ldC94ZnJtL2VzcGludGNwLmNgOiBVc2luZyBgc2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bChza2IpYCBhZGRzIGEgYm91bmQgY2hlY2sgb24gdGhlIHRyYW5zcG9ydCBoZWFkZXIgcmVzZXQuIFRoaXMgYWRkcyBhbm90aGVyIGxheWVyIG9mIHNlY3VyaXR5IHRvIHByZXZlbnQgYW4gb3ZlcmZsb3csIGluc3RlYWQgb2YgYWxsb2NhdGluZyBhIGNodW5rIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LgoKKiAgIGBuZXQveGZybS94ZnJtX2lucHV0LmNgOiBUaGUgY2hhbmdlIHJlZ2FyZGluZyBgeGZybV9wcm90b2AgbG9va3MgbGlrZSBwcm9wZXIgaW5pdGlhbGl6YXRpb24gYW5kIHRyYWNraW5nIG9mIGEgdmFyaWFibGUuIFRoaXMgYXBwZWFycyB0byBiZSBhIGJ1ZyBmaXggZm9yIHByb3BlciB1c2FnZSBvZiBjYWxsYmFja3MgYW5kIGFmaW5mbyBsb29rdXAsIHdoaWNoIHNob3VsZCBub3QgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgcmVmY291bnRpbmcgYW5kIGxvY2tpbmcgd2l0aCBgc2tiX2RzdF9mb3JjZWAsIGBkZXZfaG9sZGAsIGBkZXZfcHV0YCwgYW5kIFJDVSByZWFkIGxvY2tpbmcgYXJlIGFsc28gcG9zaXRpdmUgc2lnbnMuCgoqICAgYG5ldC94ZnJtL3hmcm1faXB0ZnMuY2A6IEJvdW5kcyBjaGVja3MsIGVzcGVjaWFsbHkgdGhlIG9uZXMgcHJldmVudGluZyBvdXQtb2YtYm91bmRzIGZyYWcgaW5kZXhpbmcgYW5kIHJ1bnQgY2hlY2tzLCBhcmUgY3JpdGljYWwgZm9yIHByZXZlbnRpbmcgS0FTQU4gaXNzdWVzLCBhbmQgSSBkb24mIzM5O3Qgc2VlIGFueSBzaWduIG9mIGludHJvZHVjaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LgoKKiAgIGBuZXQveGZybS94ZnJtX3BvbGljeS5jYDogUkNVIHJlYWQgbG9ja2luZyBhcm91bmQgYGRzdF9kZXZfcmN1KGRzdClgIGlzIGVzc2VudGlhbCBmb3IgdGhyZWFkIHNhZmV0eS4gVGhpcyBwcm90ZWN0cyBhZ2FpbnN0IHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMgYW5kIHJhY2VzLCB3aGljaCBhcmUgY29tbW9uIEtBU0FOIHBpdGZhbGxzLgoKKiAgIGBuZXQveGZybS94ZnJtX3N0YXRlLmNgOiBNdXRleCBsb2NraW5nIGZvciBHQyBwcm90ZWN0aW9uIGFuZCB0aGUgdXNlIG9mIGBobGlzdF9kZWxfaW5pdF9yY3VgIGFyZSBhYm91dCBjb25jdXJyZW5jeSBhbmQgZGF0YSBzdHJ1Y3R1cmUgc2FmZXR5LCBub3QgdW5pbml0aWFsaXplZCBtZW1vcnkuCgoqICAgYG5ldC94ZnJtL3hmcm1fdXNlci5jYDogVGhlIHJlbW92YWwgb2YgdGhlIHRyYW5zbGF0b3IgYWxsb2NfY29tcGF0IGJsb2NrIGFuZCBSQ1UgcmVhZCBsb2NraW5nIGFyb3VuZCBtdWx0aWNhc3QgYXJlIGFib3V0IGNvZGUgY2xlYW51cCBhbmQgY29uY3VycmVuY3ksIHdoaWNoIGFyZSBnb29kIHRoaW5ncy4gVGhleSB3b24mIzM5O3QgY2F1c2UgdW5pbml0aWFsaXplZCBtZW1vcnkuCgpBZnRlciBhIGRldGFpbGVkIHJldmlldywgSSYjMzk7bSBjb25maWRlbnQgdGhhdCBub25lIG9mIHRoZXNlIGNoYW5nZXMgZGlyZWN0bHkgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIGRhdGEgdG8gdXNlcnNwYWNlLiBUaGUgbW9kaWZpY2F0aW9ucyBhcmUgcHJpbWFyaWx5IGZvY3VzZWQgb24gcmVmZXJlbmNlIGNvdW50aW5nLCBsb2NraW5nIChSQ1UgYW5kIG11dGV4KSwgYm91bmRzIGNoZWNrcyAod2hpY2ggS0FTQU4gaGFuZGxlcyksIGFuZCBhZGRyZXNzaW5nIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIG51bGwgZGVyZWZlcmVuY2VzLCBhbmQgc29ja2V0IHR5cGUtcmVsYXRlZCBpc3N1ZXMuIFRoaXMgYWxsIHBvaW50cyB0byBhIGhpZ2gtcXVhbGl0eSBwYXRjaCBzZXJpZXMuCgpUaGVyZWZvcmUsIHRoZSBgTmVlZHNLTVNBTmAgZmxhZyBzaG91bGQgZGVmaW5pdGVseSBiZSBgZmFsc2VgLiBJJiMzOTtsbCBub3cgcHJlcGFyZSB0aGUgYHNldC1yZXN1bHRzYCB0b29sIHdpdGggdGhhdCB2YWx1ZSBhbmQgYSBkZXRhaWxlZCBgS01TQU5SZWFzb25pbmdgIHRvIGV4cGxhaW4gbXkgcmF0aW9uYWxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxMzo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgY29udGFpbnMgc2V2ZXJhbCBidWcgZml4ZXMgYW5kIHJlZmFjdG9yaW5ncyBhY3Jvc3MgWEZSTSBhbmQgSVBzZWMgbmV0d29ya2luZyBzdWJzeXN0ZW1zOlxuMS4gYGVzcDQuY2AgYW5kIGBlc3A2LmNgOiBBZGRzIGBza2JfemNvcHlfZG93bmdyYWRlX21hbmFnZWQoc2tiKWAgdG8gYmFsYW5jZSByZWZjb3VudHMgb24gemVyb2NvcHkgbWFuYWdlZCBmcmFncyB3aGVuIG11dGF0aW5nIHRoZSBmcmFnIGFycmF5IChyZWZjb3VudGluZyAvIFVBRiBwcmV2ZW50aW9uLCBjb3ZlcmVkIGJ5IEtBU0FOL3JlZmNvdW50IHRyYWNraW5nKS5cbjIuIGB4ZnJtNl9vdXRwdXQuY2A6IFZhbGlkYXRlcyBzb2NrZXRzIHVzaW5nIGBza2JfdG9fZnVsbF9zaygpYCB0byBhdm9pZCBvcGVyYXRpbmcgb24gbm9uLWZ1bGwgc29ja2V0cyBvciBOVUxMIGRlcmVmZXJlbmNlcyAoTlVMTCBwb2ludGVyIC8gdHlwZSBjb25mdXNpb24pLlxuMy4gYGVzcGludGNwLmNgOiBVc2VzIGBza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKClgIHRvIHZhbGlkYXRlIHRyYW5zcG9ydCBoZWFkZXIgYm91bmRzIGJlZm9yZSByZXNldHRpbmcgKE9PQiBwcmV2ZW50aW9uLCBjb3ZlcmVkIGJ5IEtBU0FOKS5cbjQuIGB4ZnJtX2lucHV0LmNgOiBGaXhlcyBwcm90b2NvbCB0cmFja2luZyAoYHhmcm1fcHJvdG9gKSwgaGFuZGxlcyBkZXZpY2UgcmVmY291bnRzIGFuZCBSQ1UgbG9ja2luZyBkdXJpbmcgcmVpbmplY3Rpb24sIGFuZCBlbnN1cmVzIGRzdCBlbnRyeSBwZXJzaXN0ZW5jZSAoYHNrYl9kc3RfZm9yY2VgKS4gQWxsIHZhcmlhYmxlcyAoYHhmcm1fcHJvdG9gKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgd2l0aCBkZWZhdWx0IHZhbHVlcy5cbjUuIGB4ZnJtX2lwdGZzLmNgOiBBZGRzIGJvdW5kcyBjaGVja2luZyBvbiBmcmFnIHdhbGsgb2Zmc2V0IHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyBpbmRleGluZyBpbiBgaXB0ZnNfc2tiX3Jlc2V0X2ZyYWdfd2FsaygpYCwgYW5kIGNvcnJlY3RzIHJ1bnQgc2l6ZSB2ZXJpZmljYXRpb24gYWdhaW5zdCBJUCBoZWFkZXIgbGVuZ3RoIChPT0IgcmVhZHMsIGNvdmVyZWQgYnkgS0FTQU4pLlxuNi4gYHhmcm1fcG9saWN5LmNgLCBgeGZybV9zdGF0ZS5jYCwgYHhmcm1fdXNlci5jYDogQWRkcyBtaXNzaW5nIFJDVSByZWFkIGxvY2tzIChgZHN0X2Rldl9yY3VgLCBtdWx0aWNhc3QpLCBhZGRzIGEgR0MgbXV0ZXggdG8gc2VyaWFsaXplIHN0YXRlIGRlc3RydWN0aW9uLCBhbmQgZml4ZXMgbGlzdCBkZWxldGlvbiBpbml0aWFsaXphdGlvbiAoYGhsaXN0X2RlbF9pbml0X3JjdWApLlxuXG5Ob25lIG9mIHRoZSBjaGFuZ2VzIGludHJvZHVjZSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgbWVtb3J5LCBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzLCBvciBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBkYXRhLiBUaGUgcmlza3MgYWRkcmVzc2VkIChvdXQtb2YtYm91bmRzIGFjY2VzcywgcmVmY291bnRpbmcsIHVzZS1hZnRlci1mcmVlLCBjb25jdXJyZW5jeS9SQ1UpIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOLCBQUk9WRV9SQ1UsIGFuZCBzdGFuZGFyZCBkZWJ1ZyBjaGVja2Vycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBjb250YWlucyBzZXZlcmFsIGJ1ZyBmaXhlcyBhbmQgcmVmYWN0b3JpbmdzIGFjcm9zcyBYRlJNIGFuZCBJUHNlYyBuZXR3b3JraW5nIHN1YnN5c3RlbXM6XG4xLiBgZXNwNC5jYCBhbmQgYGVzcDYuY2A6IEFkZHMgYHNrYl96Y29weV9kb3duZ3JhZGVfbWFuYWdlZChza2IpYCB0byBiYWxhbmNlIHJlZmNvdW50cyBvbiB6ZXJvY29weSBtYW5hZ2VkIGZyYWdzIHdoZW4gbXV0YXRpbmcgdGhlIGZyYWcgYXJyYXkgKHJlZmNvdW50aW5nIC8gVUFGIHByZXZlbnRpb24sIGNvdmVyZWQgYnkgS0FTQU4vcmVmY291bnQgdHJhY2tpbmcpLlxuMi4gYHhmcm02X291dHB1dC5jYDogVmFsaWRhdGVzIHNvY2tldHMgdXNpbmcgYHNrYl90b19mdWxsX3NrKClgIHRvIGF2b2lkIG9wZXJhdGluZyBvbiBub24tZnVsbCBzb2NrZXRzIG9yIE5VTEwgZGVyZWZlcmVuY2VzIChOVUxMIHBvaW50ZXIgLyB0eXBlIGNvbmZ1c2lvbikuXG4zLiBgZXNwaW50Y3AuY2A6IFVzZXMgYHNrYl9yZXNldF90cmFuc3BvcnRfaGVhZGVyX2NhcmVmdWwoKWAgdG8gdmFsaWRhdGUgdHJhbnNwb3J0IGhlYWRlciBib3VuZHMgYmVmb3JlIHJlc2V0dGluZyAoT09CIHByZXZlbnRpb24sIGNvdmVyZWQgYnkgS0FTQU4pLlxuNC4gYHhmcm1faW5wdXQuY2A6IEZpeGVzIHByb3RvY29sIHRyYWNraW5nIChgeGZybV9wcm90b2ApLCBoYW5kbGVzIGRldmljZSByZWZjb3VudHMgYW5kIFJDVSBsb2NraW5nIGR1cmluZyByZWluamVjdGlvbiwgYW5kIGVuc3VyZXMgZHN0IGVudHJ5IHBlcnNpc3RlbmNlIChgc2tiX2RzdF9mb3JjZWApLiBBbGwgdmFyaWFibGVzIChgeGZybV9wcm90b2ApIGFyZSBmdWxseSBpbml0aWFsaXplZCB3aXRoIGRlZmF1bHQgdmFsdWVzLlxuNS4gYHhmcm1faXB0ZnMuY2A6IEFkZHMgYm91bmRzIGNoZWNraW5nIG9uIGZyYWcgd2FsayBvZmZzZXQgdG8gcHJldmVudCBvdXQtb2YtYm91bmRzIGluZGV4aW5nIGluIGBpcHRmc19za2JfcmVzZXRfZnJhZ193YWxrKClgLCBhbmQgY29ycmVjdHMgcnVudCBzaXplIHZlcmlmaWNhdGlvbiBhZ2FpbnN0IElQIGhlYWRlciBsZW5ndGggKE9PQiByZWFkcywgY292ZXJlZCBieSBLQVNBTikuXG42LiBgeGZybV9wb2xpY3kuY2AsIGB4ZnJtX3N0YXRlLmNgLCBgeGZybV91c2VyLmNgOiBBZGRzIG1pc3NpbmcgUkNVIHJlYWQgbG9ja3MgKGBkc3RfZGV2X3JjdWAsIG11bHRpY2FzdCksIGFkZHMgYSBHQyBtdXRleCB0byBzZXJpYWxpemUgc3RhdGUgZGVzdHJ1Y3Rpb24sIGFuZCBmaXhlcyBsaXN0IGRlbGV0aW9uIGluaXRpYWxpemF0aW9uIChgaGxpc3RfZGVsX2luaXRfcmN1YCkuXG5cbk5vbmUgb2YgdGhlIGNoYW5nZXMgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBtZW1vcnksIGtlcm5lbC10by11c2VyIGluZm8tbGVha3MsIG9yIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEuIFRoZSByaXNrcyBhZGRyZXNzZWQgKG91dC1vZi1ib3VuZHMgYWNjZXNzLCByZWZjb3VudGluZywgdXNlLWFmdGVyLWZyZWUsIGNvbmN1cnJlbmN5L1JDVSkgYXJlIGNvdmVyZWQgYnkgS0FTQU4sIFBST1ZFX1JDVSwgYW5kIHN0YW5kYXJkIGRlYnVnIGNoZWNrZXJzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxMzo1Mzo1Mi43Njg0MDI4NTJaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NjIxMDgyNjM1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJTkVUXCIsXG4gICAgXCJJUFY2XCIsXG4gICAgXCJYRlJNXCIsXG4gICAgXCJJTkVUX0VTUFwiLFxuICAgIFwiSU5FVDZfRVNQXCIsXG4gICAgXCJJTkVUX0VTUElOVENQXCIsXG4gICAgXCJJTkVUNl9FU1BJTlRDUFwiLFxuICAgIFwiWEZSTV9VU0VSXCIsXG4gICAgXCJYRlJNX0lQVEZTXCIsXG4gICAgXCJYRlJNX01JR1JBVEVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJlc3Bfb3V0cHV0X2hlYWRcIixcbiAgICBcImVzcDZfb3V0cHV0X2hlYWRcIixcbiAgICBcInhmcm02X2xvY2FsX3J4cG10dVwiLFxuICAgIFwieGZybTZfbG9jYWxfZXJyb3JcIixcbiAgICBcImVzcGludGNwX3JjdlwiLFxuICAgIFwiaGFuZGxlX2VzcFwiLFxuICAgIFwieGZybV9pbnB1dFwiLFxuICAgIFwieGZybV90cmFuc19yZWluamVjdFwiLFxuICAgIFwieGZybV90cmFuc19xdWV1ZV9uZXRcIixcbiAgICBcImlwdGZzX3NrYl9jYW5fYWRkX2ZyYWdzXCIsXG4gICAgXCJpcHRmc19yZWFzc2VtX2NvbnRcIixcbiAgICBcInhmcm1fYnVuZGxlX2NyZWF0ZVwiLFxuICAgIFwieGZybV9jcmVhdGVfZHVtbXlfYnVuZGxlXCIsXG4gICAgXCJ4ZnJtX3N0YXRlX2djX3Rhc2tcIixcbiAgICBcIl9feGZybV9zdGF0ZV9kZWxldGVcIixcbiAgICBcInhmcm1fZGV2X3N0YXRlX2ZsdXNoXCIsXG4gICAgXCJ4ZnJtX2FsbG9jX3VzZXJzcGlcIixcbiAgICBcInhmcm1fc2VuZF9taWdyYXRlX3N0YXRlXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgY29udGFpbnMgc2V2ZXJhbCBidWcgZml4ZXMgYW5kIHJlZmFjdG9yaW5ncyBhY3Jvc3MgWEZSTSBhbmQgSVBzZWMgbmV0d29ya2luZyBzdWJzeXN0ZW1zOlxcbjEuIGBlc3A0LmNgIGFuZCBgZXNwNi5jYDogQWRkcyBgc2tiX3pjb3B5X2Rvd25ncmFkZV9tYW5hZ2VkKHNrYilgIHRvIGJhbGFuY2UgcmVmY291bnRzIG9uIHplcm9jb3B5IG1hbmFnZWQgZnJhZ3Mgd2hlbiBtdXRhdGluZyB0aGUgZnJhZyBhcnJheSAocmVmY291bnRpbmcgLyBVQUYgcHJldmVudGlvbiwgY292ZXJlZCBieSBLQVNBTi9yZWZjb3VudCB0cmFja2luZykuXFxuMi4gYHhmcm02X291dHB1dC5jYDogVmFsaWRhdGVzIHNvY2tldHMgdXNpbmcgYHNrYl90b19mdWxsX3NrKClgIHRvIGF2b2lkIG9wZXJhdGluZyBvbiBub24tZnVsbCBzb2NrZXRzIG9yIE5VTEwgZGVyZWZlcmVuY2VzIChOVUxMIHBvaW50ZXIgLyB0eXBlIGNvbmZ1c2lvbikuXFxuMy4gYGVzcGludGNwLmNgOiBVc2VzIGBza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKClgIHRvIHZhbGlkYXRlIHRyYW5zcG9ydCBoZWFkZXIgYm91bmRzIGJlZm9yZSByZXNldHRpbmcgKE9PQiBwcmV2ZW50aW9uLCBjb3ZlcmVkIGJ5IEtBU0FOKS5cXG40LiBgeGZybV9pbnB1dC5jYDogRml4ZXMgcHJvdG9jb2wgdHJhY2tpbmcgKGB4ZnJtX3Byb3RvYCksIGhhbmRsZXMgZGV2aWNlIHJlZmNvdW50cyBhbmQgUkNVIGxvY2tpbmcgZHVyaW5nIHJlaW5qZWN0aW9uLCBhbmQgZW5zdXJlcyBkc3QgZW50cnkgcGVyc2lzdGVuY2UgKGBza2JfZHN0X2ZvcmNlYCkuIEFsbCB2YXJpYWJsZXMgKGB4ZnJtX3Byb3RvYCkgYXJlIGZ1bGx5IGluaXRpYWxpemVkIHdpdGggZGVmYXVsdCB2YWx1ZXMuXFxuNS4gYHhmcm1faXB0ZnMuY2A6IEFkZHMgYm91bmRzIGNoZWNraW5nIG9uIGZyYWcgd2FsayBvZmZzZXQgdG8gcHJldmVudCBvdXQtb2YtYm91bmRzIGluZGV4aW5nIGluIGBpcHRmc19za2JfcmVzZXRfZnJhZ193YWxrKClgLCBhbmQgY29ycmVjdHMgcnVudCBzaXplIHZlcmlmaWNhdGlvbiBhZ2FpbnN0IElQIGhlYWRlciBsZW5ndGggKE9PQiByZWFkcywgY292ZXJlZCBieSBLQVNBTikuXFxuNi4gYHhmcm1fcG9saWN5LmNgLCBgeGZybV9zdGF0ZS5jYCwgYHhmcm1fdXNlci5jYDogQWRkcyBtaXNzaW5nIFJDVSByZWFkIGxvY2tzIChgZHN0X2Rldl9yY3VgLCBtdWx0aWNhc3QpLCBhZGRzIGEgR0MgbXV0ZXggdG8gc2VyaWFsaXplIHN0YXRlIGRlc3RydWN0aW9uLCBhbmQgZml4ZXMgbGlzdCBkZWxldGlvbiBpbml0aWFsaXphdGlvbiAoYGhsaXN0X2RlbF9pbml0X3JjdWApLlxcblxcbk5vbmUgb2YgdGhlIGNoYW5nZXMgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBtZW1vcnksIGtlcm5lbC10by11c2VyIGluZm8tbGVha3MsIG9yIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEuIFRoZSByaXNrcyBhZGRyZXNzZWQgKG91dC1vZi1ib3VuZHMgYWNjZXNzLCByZWZjb3VudGluZywgdXNlLWFmdGVyLWZyZWUsIGNvbmN1cnJlbmN5L1JDVSkgYXJlIGNvdmVyZWQgYnkgS0FTQU4sIFBST1ZFX1JDVSwgYW5kIHN0YW5kYXJkIGRlYnVnIGNoZWNrZXJzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHRvdWNoZXMgY29yZSBJUHNlYyAoWEZSTSkgSVB2NC9JUHY2IG5ldHdvcmtpbmcgbG9naWMsIGluY2x1ZGluZyBFU1Agb3V0cHV0IHplcm8tY29weSBkb3duZ3JhZGVzLCBJUHY2IFhGUk0gZXJyb3IgcmVwb3J0aW5nIGZvciBub24tZnVsbCBzb2NrZXRzLCBFU1AtaW4tVENQIHRyYW5zcG9ydCBoZWFkZXIgcmVzZXR0aW5nLCBYRlJNIGlucHV0IHBhY2tldCBwcm90byBkaXNwYXRjaCBhbmQgYXN5bmMgZGV2LXJlZiByZWluamVjdGlvbiBoYW5kbGluZywgSVAtVEZTIGZyYWdtZW50IHdhbGsgYm91bmRzIGNoZWNrcywgcG9saWN5IGJ1bmRsZSBSQ1UgZGV2aWNlIHJlc29sdXRpb24sIHN0YXRlIEdDIHNlcmlhbGl6YXRpb24gdW5kZXIgbXV0ZXgsIGFuZCBYRlJNIHVzZXIgbmV0bGluayBoYW5kbGVycy4gQWxsIGNoYW5nZXMgYXJlIGluIHJlYWNoYWJsZSBuZXR3b3JraW5nIHBhdGhzIGV4ZXJjaXNhYmxlIHZpYSBzb2NrZXRzIGFuZCBYRlJNIG5ldGxpbmsgaW50ZXJmYWNlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTM6NTM6NTIuNzY4NDA3OTUyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTk3ODAzMjEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgY2UwMTRkYTE1M2Q4ZGNlOGMzM2UzNmZhOTU3ZjEwMTM5NjNmNmUxOVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIFNlcCA3IDEzOjUzOjUwIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L2VzcDQuYyBiL25ldC9pcHY0L2VzcDQuY1xcbmluZGV4IGE2YzE4YWVhNzQ5OGQuLmU3NmRiNTgxN2U3OGUgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjQvZXNwNC5jXFxuKysrIGIvbmV0L2lwdjQvZXNwNC5jXFxuQEAgLTQ0MSw2ICs0NDEsMTIgQEAgaW50IGVzcF9vdXRwdXRfaGVhZChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGVzcF9pbmZvICpcXG4gXFxuIFxcdFxcdFxcdGVzcC1cXHUwMDNlaW5wbGFjZSA9IGZhbHNlO1xcbiBcXG4rXFx0XFx0XFx0LyogVGFrZSByZWFsIHBhZ2UgcmVmcyBhbmQgY2xlYXIgU0tCRkxfTUFOQUdFRF9GUkFHX1JFRlMgYmVmb3JlXFxuK1xcdFxcdFxcdCAqIHdlIG11dGF0ZSB0aGUgZnJhZyBhcnJheSwgc28gdGhlIHBlci1mcmFnIHVucmVmIHN0YXlzIGJhbGFuY2VkXFxuK1xcdFxcdFxcdCAqIGZvciB6ZXJvY29weSBtYW5hZ2VkIGZyYWdzIChzZWUgX19pcF9hcHBlbmRfZGF0YSgpKS5cXG4rXFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdHNrYl96Y29weV9kb3duZ3JhZGVfbWFuYWdlZChza2IpO1xcbitcXG4gXFx0XFx0XFx0YWxsb2NzaXplID0gQUxJR04odGFpbGVuLCBMMV9DQUNIRV9CWVRFUyk7XFxuIFxcbiBcXHRcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNngtXFx1MDAzZWxvY2spO1xcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9lc3A2LmMgYi9uZXQvaXB2Ni9lc3A2LmNcXG5pbmRleCA3MmVjMGQ3ZDExMjA5Li5iMWM5YjM2Zjc2ZGM0IDEwMDY0NFxcbi0tLSBhL25ldC9pcHY2L2VzcDYuY1xcbisrKyBiL25ldC9pcHY2L2VzcDYuY1xcbkBAIC00NzEsNiArNDcxLDEyIEBAIGludCBlc3A2X291dHB1dF9oZWFkKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZXNwX2luZm9cXG4gXFxuIFxcdFxcdFxcdGVzcC1cXHUwMDNlaW5wbGFjZSA9IGZhbHNlO1xcbiBcXG4rXFx0XFx0XFx0LyogVGFrZSByZWFsIHBhZ2UgcmVmcyBhbmQgY2xlYXIgU0tCRkxfTUFOQUdFRF9GUkFHX1JFRlMgYmVmb3JlXFxuK1xcdFxcdFxcdCAqIHdlIG11dGF0ZSB0aGUgZnJhZyBhcnJheSwgc28gdGhlIHBlci1mcmFnIHVucmVmIHN0YXlzIGJhbGFuY2VkXFxuK1xcdFxcdFxcdCAqIGZvciB6ZXJvY29weSBtYW5hZ2VkIGZyYWdzIChzZWUgX19pcF9hcHBlbmRfZGF0YSgpKS5cXG4rXFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdHNrYl96Y29weV9kb3duZ3JhZGVfbWFuYWdlZChza2IpO1xcbitcXG4gXFx0XFx0XFx0YWxsb2NzaXplID0gQUxJR04odGFpbGVuLCBMMV9DQUNIRV9CWVRFUyk7XFxuIFxcbiBcXHRcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNngtXFx1MDAzZWxvY2spO1xcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni94ZnJtNl9vdXRwdXQuYyBiL25ldC9pcHY2L3hmcm02X291dHB1dC5jXFxuaW5kZXggNTEyYmRhZjEzNjk5Ny4uNDRiMjIxYTA5YTBjOCAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2Ni94ZnJtNl9vdXRwdXQuY1xcbisrKyBiL25ldC9pcHY2L3hmcm02X291dHB1dC5jXFxuQEAgLTE5LDcgKzE5LDEwIEBAXFxuIHZvaWQgeGZybTZfbG9jYWxfcnhwbXR1KHN0cnVjdCBza19idWZmICpza2IsIHUzMiBtdHUpXFxuIHtcXG4gXFx0c3RydWN0IGZsb3dpNiBmbDY7XFxuLVxcdHN0cnVjdCBzb2NrICpzayA9IHNrYi1cXHUwMDNlc2s7XFxuK1xcdHN0cnVjdCBzb2NrICpzayA9IHNrYl90b19mdWxsX3NrKHNrYik7XFxuK1xcbitcXHRpZiAoIXNrKVxcbitcXHRcXHRyZXR1cm47XFxuIFxcbiBcXHRmbDYuZmxvd2k2X29pZiA9IHNrLVxcdTAwM2Vza19ib3VuZF9kZXZfaWY7XFxuIFxcdGZsNi5kYWRkciA9IGlwdjZfaGRyKHNrYiktXFx1MDAzZWRhZGRyO1xcbkBAIC0zMSw3ICszNCwxMCBAQCB2b2lkIHhmcm02X2xvY2FsX2Vycm9yKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBtdHUpXFxuIHtcXG4gXFx0c3RydWN0IGZsb3dpNiBmbDY7XFxuIFxcdGNvbnN0IHN0cnVjdCBpcHY2aGRyICpoZHI7XFxuLVxcdHN0cnVjdCBzb2NrICpzayA9IHNrYi1cXHUwMDNlc2s7XFxuK1xcdHN0cnVjdCBzb2NrICpzayA9IHNrYl90b19mdWxsX3NrKHNrYik7XFxuK1xcbitcXHRpZiAoIXNrKVxcbitcXHRcXHRyZXR1cm47XFxuIFxcbiBcXHRoZHIgPSBza2ItXFx1MDAzZWVuY2Fwc3VsYXRpb24gPyBpbm5lcl9pcHY2X2hkcihza2IpIDogaXB2Nl9oZHIoc2tiKTtcXG4gXFx0Zmw2LmZsNl9kcG9ydCA9IGluZXRfc2soc2spLVxcdTAwM2VpbmV0X2Rwb3J0O1xcbmRpZmYgLS1naXQgYS9uZXQveGZybS9lc3BpbnRjcC5jIGIvbmV0L3hmcm0vZXNwaW50Y3AuY1xcbmluZGV4IDY3NGFlZGM1YWY1YTIuLjNlNzJiOWYwNjdiOWIgMTAwNjQ0XFxuLS0tIGEvbmV0L3hmcm0vZXNwaW50Y3AuY1xcbisrKyBiL25ldC94ZnJtL2VzcGludGNwLmNcXG5AQCAtMzAsNyArMzAsMTEgQEAgc3RhdGljIHZvaWQgaGFuZGxlX2VzcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc29jayAqc2spXFxuIHtcXG4gXFx0c3RydWN0IHRjcF9za2JfY2IgKnRjcF9jYiA9IChzdHJ1Y3QgdGNwX3NrYl9jYiAqKXNrYi1cXHUwMDNlY2I7XFxuIFxcbi1cXHRza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcihza2IpO1xcbitcXHRpZiAoIXNrYl9yZXNldF90cmFuc3BvcnRfaGVhZGVyX2NhcmVmdWwoc2tiKSkge1xcbitcXHRcXHRYRlJNX0lOQ19TVEFUUyhzb2NrX25ldChzayksIExJTlVYX01JQl9YRlJNSU5FUlJPUik7XFxuK1xcdFxcdGtmcmVlX3NrYihza2IpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4gXFxuIFxcdC8qIHJlc3RvcmUgSVAgQ0IsIHdlIG5lZWQgYXQgbGVhc3QgSVA2Q0ItXFx1MDAzZW5ob2ZmICovXFxuIFxcdG1lbW1vdmUoc2tiLVxcdTAwM2VjYiwgXFx1MDAyNnRjcF9jYi1cXHUwMDNlaGVhZGVyLCBzaXplb2YodGNwX2NiLVxcdTAwM2VoZWFkZXIpKTtcXG5kaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV9pbnB1dC5jIGIvbmV0L3hmcm0veGZybV9pbnB1dC5jXFxuaW5kZXggZWVjYWIzMzdiZDBhNy4uNWVkODdkNTEzOTJhNSAxMDA2NDRcXG4tLS0gYS9uZXQveGZybS94ZnJtX2lucHV0LmNcXG4rKysgYi9uZXQveGZybS94ZnJtX2lucHV0LmNcXG5AQCAtNDc0LDYgKzQ3NCw3IEBAIGludCB4ZnJtX2lucHV0KHN0cnVjdCBza19idWZmICpza2IsIGludCBuZXh0aGRyLCBfX2JlMzIgc3BpLCBpbnQgZW5jYXBfdHlwZSlcXG4gXFx0c3RydWN0IHhmcm1fc3RhdGUgKnggPSBOVUxMO1xcbiBcXHR4ZnJtX2FkZHJlc3NfdCAqZGFkZHI7XFxuIFxcdHUzMiBtYXJrID0gc2tiLVxcdTAwM2VtYXJrO1xcbitcXHR1OCB4ZnJtX3Byb3RvID0gbmV4dGhkcjtcXG4gXFx0dW5zaWduZWQgaW50IGZhbWlseSA9IEFGX1VOU1BFQztcXG4gXFx0aW50IGRlY2FwcyA9IDA7XFxuIFxcdGludCBhc3luYyA9IDA7XFxuQEAgLTQ4NSw2ICs0ODYsNyBAQCBpbnQgeGZybV9pbnB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbmV4dGhkciwgX19iZTMyIHNwaSwgaW50IGVuY2FwX3R5cGUpXFxuIFxcdGlmIChlbmNhcF90eXBlIFxcdTAwM2MgMCB8fCAoeG8gXFx1MDAyNlxcdTAwMjYgKHhvLVxcdTAwM2VmbGFncyBcXHUwMDI2IFhGUk1fR1JPIHx8IGVuY2FwX3R5cGUgPT0gMCB8fFxcbiBcXHRcXHRcXHRcXHQgICAgICBlbmNhcF90eXBlID09IFVEUF9FTkNBUF9FU1BJTlVEUCkpKSB7XFxuIFxcdFxcdHggPSB4ZnJtX2lucHV0X3N0YXRlKHNrYik7XFxuK1xcdFxcdHhmcm1fcHJvdG8gPSB4LVxcdTAwM2V0eXBlID8geC1cXHUwMDNldHlwZS1cXHUwMDNlcHJvdG8gOiBuZXh0aGRyO1xcbiBcXG4gXFx0XFx0aWYgKHVubGlrZWx5KHgtXFx1MDAzZWttLnN0YXRlICE9IFhGUk1fU1RBVEVfVkFMSUQpKSB7XFxuIFxcdFxcdFxcdGlmICh4LVxcdTAwM2VrbS5zdGF0ZSA9PSBYRlJNX1NUQVRFX0FDUSlcXG5AQCAtNTkyLDExICs1OTQsMTMgQEAgaW50IHhmcm1faW5wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG5leHRoZHIsIF9fYmUzMiBzcGksIGludCBlbmNhcF90eXBlKVxcbiBcXG4gXFx0XFx0eCA9IHhmcm1faW5wdXRfc3RhdGVfbG9va3VwKG5ldCwgbWFyaywgZGFkZHIsIHNwaSwgbmV4dGhkciwgZmFtaWx5KTtcXG4gXFx0XFx0aWYgKHggPT0gTlVMTCkge1xcbitcXHRcXHRcXHR4ZnJtX3Byb3RvID0gbmV4dGhkcjtcXG4gXFx0XFx0XFx0c2VjcGF0aF9yZXNldChza2IpO1xcbiBcXHRcXHRcXHRYRlJNX0lOQ19TVEFUUyhuZXQsIExJTlVYX01JQl9YRlJNSU5OT1NUQVRFUyk7XFxuIFxcdFxcdFxcdHhmcm1fYXVkaXRfc3RhdGVfbm90Zm91bmQoc2tiLCBmYW1pbHksIHNwaSwgc2VxKTtcXG4gXFx0XFx0XFx0Z290byBkcm9wO1xcbiBcXHRcXHR9XFxuK1xcdFxcdHhmcm1fcHJvdG8gPSB4LVxcdTAwM2V0eXBlID8geC1cXHUwMDNldHlwZS1cXHUwMDNlcHJvdG8gOiBuZXh0aGRyO1xcbiBcXG4gXFx0XFx0aWYgKHVubGlrZWx5KHgtXFx1MDAzZWRpciBcXHUwMDI2XFx1MDAyNiB4LVxcdTAwM2VkaXIgIT0gWEZSTV9TQV9ESVJfSU4pKSB7XFxuIFxcdFxcdFxcdHNlY3BhdGhfcmVzZXQoc2tiKTtcXG5AQCAtNjA0LDYgKzYwOCw3IEBAIGludCB4ZnJtX2lucHV0KHN0cnVjdCBza19idWZmICpza2IsIGludCBuZXh0aGRyLCBfX2JlMzIgc3BpLCBpbnQgZW5jYXBfdHlwZSlcXG4gXFx0XFx0XFx0eGZybV9hdWRpdF9zdGF0ZV9ub3Rmb3VuZChza2IsIGZhbWlseSwgc3BpLCBzZXEpO1xcbiBcXHRcXHRcXHR4ZnJtX3N0YXRlX3B1dCh4KTtcXG4gXFx0XFx0XFx0eCA9IE5VTEw7XFxuK1xcdFxcdFxcdHhmcm1fcHJvdG8gPSBuZXh0aGRyO1xcbiBcXHRcXHRcXHRnb3RvIGRyb3A7XFxuIFxcdFxcdH1cXG4gXFxuQEAgLTcyOCw3ICs3MzMsNyBAQCBpbnQgeGZybV9pbnB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbmV4dGhkciwgX19iZTMyIHNwaSwgaW50IGVuY2FwX3R5cGUpXFxuIFxcdH0gd2hpbGUgKCFlcnIpO1xcbiBcXG4gXFx0cmN1X3JlYWRfbG9jaygpO1xcbi1cXHRlcnIgPSB4ZnJtX3Jjdl9jYihza2IsIGZhbWlseSwgeC1cXHUwMDNldHlwZS1cXHUwMDNlcHJvdG8sIDApO1xcbitcXHRlcnIgPSB4ZnJtX3Jjdl9jYihza2IsIGZhbWlseSwgeGZybV9wcm90bywgMCk7XFxuIFxcdGlmIChlcnIpIHtcXG4gXFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIFxcdFxcdGdvdG8gZHJvcDtcXG5AQCAtNzUzLDcgKzc1OCw3IEBAIGludCB4ZnJtX2lucHV0KHN0cnVjdCBza19idWZmICpza2IsIGludCBuZXh0aGRyLCBfX2JlMzIgc3BpLCBpbnQgZW5jYXBfdHlwZSlcXG4gXFx0XFx0XFx0eGZybV9ncm8gPSB4by1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBYRlJNX0dSTztcXG4gXFxuIFxcdFxcdGVyciA9IC1FQUZOT1NVUFBPUlQ7XFxuLVxcdFxcdGFmaW5mbyA9IHhmcm1fc3RhdGVfYWZpbmZvX2dldF9yY3UoeC1cXHUwMDNlcHJvcHMuZmFtaWx5KTtcXG4rXFx0XFx0YWZpbmZvID0geGZybV9zdGF0ZV9hZmluZm9fZ2V0X3JjdShmYW1pbHkpO1xcbiBcXHRcXHRpZiAobGlrZWx5KGFmaW5mbykpXFxuIFxcdFxcdFxcdGVyciA9IGFmaW5mby1cXHUwMDNldHJhbnNwb3J0X2ZpbmlzaChza2IsIHhmcm1fZ3JvIHx8IGFzeW5jKTtcXG4gXFx0XFx0aWYgKHhmcm1fZ3JvKSB7XFxuQEAgLTc3Niw3ICs3ODEsNyBAQCBpbnQgeGZybV9pbnB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbmV4dGhkciwgX19iZTMyIHNwaSwgaW50IGVuY2FwX3R5cGUpXFxuIGRyb3A6XFxuIFxcdGlmIChhc3luYylcXG4gXFx0XFx0ZGV2X3B1dChkZXYpO1xcbi1cXHR4ZnJtX3Jjdl9jYihza2IsIGZhbWlseSwgeCBcXHUwMDI2XFx1MDAyNiB4LVxcdTAwM2V0eXBlID8geC1cXHUwMDNldHlwZS1cXHUwMDNlcHJvdG8gOiBuZXh0aGRyLCAtMSk7XFxuK1xcdHhmcm1fcmN2X2NiKHNrYiwgZmFtaWx5LCB4ZnJtX3Byb3RvLCAtMSk7XFxuIFxcdGtmcmVlX3NrYihza2IpO1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbkBAIC04MDAsMTIgKzgwNSwxNyBAQCBzdGF0aWMgdm9pZCB4ZnJtX3RyYW5zX3JlaW5qZWN0KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4gXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnRyYW5zLVxcdTAwM2VxdWV1ZV9sb2NrKTtcXG4gXFxuIFxcdGxvY2FsX2JoX2Rpc2FibGUoKTtcXG4rXFx0cmN1X3JlYWRfbG9jaygpO1xcbiBcXHR3aGlsZSAoKHNrYiA9IF9fc2tiX2RlcXVldWUoXFx1MDAyNnF1ZXVlKSkpIHtcXG4gXFx0XFx0c3RydWN0IG5ldCAqbmV0ID0gWEZSTV9UUkFOU19TS0JfQ0Ioc2tiKS1cXHUwMDNlbmV0O1xcbitcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gc2tiLVxcdTAwM2VkZXY7XFxuIFxcbiBcXHRcXHRYRlJNX1RSQU5TX1NLQl9DQihza2IpLVxcdTAwM2VmaW5pc2gobmV0LCBOVUxMLCBza2IpO1xcbitcXHRcXHRpZiAoZGV2KVxcbitcXHRcXHRcXHRkZXZfcHV0KGRldik7XFxuIFxcdFxcdHB1dF9uZXQobmV0KTtcXG4gXFx0fVxcbitcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gXFx0bG9jYWxfYmhfZW5hYmxlKCk7XFxuIH1cXG4gXFxuQEAgLTgyMSwxMiArODMxLDE4IEBAIGludCB4ZnJtX3RyYW5zX3F1ZXVlX25ldChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdGlmIChza2JfcXVldWVfbGVuKFxcdTAwMjZ0cmFucy1cXHUwMDNlcXVldWUpIFxcdTAwM2U9IFJFQURfT05DRShuZXRfaG90ZGF0YS5tYXhfYmFja2xvZykpXFxuIFxcdFxcdHJldHVybiAtRU5PQlVGUztcXG4gXFxuK1xcdGlmIChza2JfZHN0KHNrYikgXFx1MDAyNlxcdTAwMjYgIXNrYl9kc3RfZm9yY2Uoc2tiKSlcXG4rXFx0XFx0cmV0dXJuIC1FSE9TVFVOUkVBQ0g7XFxuK1xcbiBcXHRCVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCB4ZnJtX3RyYW5zX2NiKSBcXHUwMDNlIHNpemVvZihza2ItXFx1MDAzZWNiKSk7XFxuIFxcbiBcXHRob2xkX25ldCA9IG1heWJlX2dldF9uZXQobmV0KTtcXG4gXFx0aWYgKCFob2xkX25ldClcXG4gXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuIFxcbitcXHRpZiAoc2tiLVxcdTAwM2VkZXYpXFxuK1xcdFxcdGRldl9ob2xkKHNrYi1cXHUwMDNlZGV2KTtcXG4rXFxuIFxcdFhGUk1fVFJBTlNfU0tCX0NCKHNrYiktXFx1MDAzZWZpbmlzaCA9IGZpbmlzaDtcXG4gXFx0WEZSTV9UUkFOU19TS0JfQ0Ioc2tiKS1cXHUwMDNlbmV0ID0gaG9sZF9uZXQ7XFxuIFxcdHNwaW5fbG9ja19iaChcXHUwMDI2dHJhbnMtXFx1MDAzZXF1ZXVlX2xvY2spO1xcbmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX2lwdGZzLmMgYi9uZXQveGZybS94ZnJtX2lwdGZzLmNcXG5pbmRleCA1OTdhZWRlYWMyNmViLi42OTIwOTQwYTM1YjQ5IDEwMDY0NFxcbi0tLSBhL25ldC94ZnJtL3hmcm1faXB0ZnMuY1xcbisrKyBiL25ldC94ZnJtL3hmcm1faXB0ZnMuY1xcbkBAIC00MTYsNiArNDE2LDE0IEBAIHN0YXRpYyBib29sIGlwdGZzX3NrYl9jYW5fYWRkX2ZyYWdzKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdGlmIChza2JfaGFzX2ZyYWdfbGlzdChza2IpIHx8IHNrYi1cXHUwMDNlcHBfcmVjeWNsZSAhPSB3YWxrLVxcdTAwM2VwcF9yZWN5Y2xlKVxcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcbitcXHQvKiBSZWplY3QgYW4gQG9mZnNldCB0aGF0IGlzIGF0IG9yIGJleW9uZCB0aGUgZW5kIG9mIHRoZSB3YWxrJ3MgZGF0YVxcbitcXHQgKiBiZWZvcmUgY2FsbGluZyBpcHRmc19za2JfcmVzZXRfZnJhZ193YWxrKCksIHdob3NlIGZyYWdtZW50LWFkdmFuY2VcXG4rXFx0ICogbG9vcCBpcyBvdGhlcndpc2UgdW5ib3VuZGVkIGFuZCB3b3VsZCBpbmRleCBwYXN0IHdhbGstXFx1MDAzZWZyYWdzW10uXFxuK1xcdCAqIFRoaXMgbWlycm9ycyB0aGUgZ3VhcmQgYWxyZWFkeSBwcmVzZW50IGluIGlwdGZzX3NrYl9hZGRfZnJhZ3MoKS5cXG4rXFx0ICovXFxuK1xcdGlmICghd2Fsay1cXHUwMDNlbnJfZnJhZ3MgfHwgb2Zmc2V0IFxcdTAwM2U9IHdhbGstXFx1MDAzZXRvdGFsICsgd2Fsay1cXHUwMDNlaW5pdGlhbF9vZmZzZXQpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuIFxcdC8qIE1ha2Ugb2Zmc2V0IHJlbGF0aXZlIHRvIGN1cnJlbnQgZnJhZyBhZnRlciBzZXR0aW5nIHRoYXQgKi9cXG4gXFx0b2Zmc2V0ID0gaXB0ZnNfc2tiX3Jlc2V0X2ZyYWdfd2Fsayh3YWxrLCBvZmZzZXQpO1xcbiBcXG5AQCAtODIwLDggKzgyOCw4IEBAIHN0YXRpYyB1MzIgaXB0ZnNfcmVhc3NlbV9jb250KHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsIHU2NCBzZXEsXFxuIFxcdFxcdCAqIGFsbG9jYXRlIGFuIGluIHByb2dyZXNzIHNrYlxcbiBcXHRcXHQgKi9cXG4gXFx0XFx0aXByZW1haW4gPSBfX2lwdGZzX2lwbGVuKHh0ZnMtXFx1MDAzZXJhX3J1bnQpO1xcbi1cXHRcXHRpZiAoaXByZW1haW4gXFx1MDAzYyBzaXplb2YoeHRmcy1cXHUwMDNlcmFfcnVudCkpIHtcXG4tXFx0XFx0XFx0LyogbGVuZ3RoIGhhcyB0byBiZSBhdCBsZWFzdCBydW50c2l6ZSBsYXJnZSAqL1xcbitcXHRcXHRpZiAoaXByZW1haW4gXFx1MDAzYyBfX2lwdGZzX2lwaGxlbih4dGZzLVxcdTAwM2VyYV9ydW50KSkge1xcbitcXHRcXHRcXHQvKiBsZW5ndGggaGFzIHRvIGJlIGF0IGxlYXN0IHRoZSBJUCBoZWFkZXIgc2l6ZSAqL1xcbiBcXHRcXHRcXHRYRlJNX0lOQ19TVEFUUyh4c19uZXQoeHRmcy1cXHUwMDNleCksXFxuIFxcdFxcdFxcdFxcdCAgICAgICBMSU5VWF9NSUJfWEZSTUlOSVBURlNFUlJPUik7XFxuIFxcdFxcdFxcdGdvdG8gYWJhbmRvbjtcXG5kaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV9wb2xpY3kuYyBiL25ldC94ZnJtL3hmcm1fcG9saWN5LmNcXG5pbmRleCA5MzJhMzEzYjk0NjBhLi41MTNjOWYyMjgzMzQ3IDEwMDY0NFxcbi0tLSBhL25ldC94ZnJtL3hmcm1fcG9saWN5LmNcXG4rKysgYi9uZXQveGZybS94ZnJtX3BvbGljeS5jXFxuQEAgLTI3NzAsOSArMjc3MCwxMiBAQCBzdGF0aWMgc3RydWN0IGRzdF9lbnRyeSAqeGZybV9idW5kbGVfY3JlYXRlKHN0cnVjdCB4ZnJtX3BvbGljeSAqcG9saWN5LFxcbiBcXHR4ZHN0MC1cXHUwMDNlcGF0aCA9IGRzdDtcXG4gXFxuIFxcdGVyciA9IC1FTk9ERVY7XFxuLVxcdGRldiA9IGRzdC1cXHUwMDNlZGV2O1xcbi1cXHRpZiAoIWRldilcXG4rXFx0cmN1X3JlYWRfbG9jaygpO1xcbitcXHRkZXYgPSBkc3RfZGV2X3JjdShkc3QpO1xcbitcXHRpZiAoIWRldikge1xcbitcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gXFx0XFx0Z290byBmcmVlX2RzdDtcXG4rXFx0fVxcbiBcXG4gXFx0eGZybV9pbml0X3BhdGgoeGRzdDAsIGRzdCwgbmZoZWFkZXJfbGVuKTtcXG4gXFx0eGZybV9pbml0X3BtdHUoYnVuZGxlLCBueCk7XFxuQEAgLTI3ODAsOCArMjc4MywxMCBAQCBzdGF0aWMgc3RydWN0IGRzdF9lbnRyeSAqeGZybV9idW5kbGVfY3JlYXRlKHN0cnVjdCB4ZnJtX3BvbGljeSAqcG9saWN5LFxcbiBcXHRmb3IgKHhkc3RfcHJldiA9IHhkc3QwOyB4ZHN0X3ByZXYgIT0gKHN0cnVjdCB4ZnJtX2RzdCAqKWRzdDtcXG4gXFx0ICAgICB4ZHN0X3ByZXYgPSAoc3RydWN0IHhmcm1fZHN0ICopIHhmcm1fZHN0X2NoaWxkKFxcdTAwMjZ4ZHN0X3ByZXYtXFx1MDAzZXUuZHN0KSkge1xcbiBcXHRcXHRlcnIgPSB4ZnJtX2ZpbGxfZHN0KHhkc3RfcHJldiwgZGV2LCBmbCk7XFxuLVxcdFxcdGlmIChlcnIpXFxuK1xcdFxcdGlmIChlcnIpIHtcXG4rXFx0XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIFxcdFxcdFxcdGdvdG8gZnJlZV9kc3Q7XFxuK1xcdFxcdH1cXG4gXFxuIFxcdFxcdHhkc3RfcHJldi1cXHUwMDNldS5kc3QuaGVhZGVyX2xlbiA9IGhlYWRlcl9sZW47XFxuIFxcdFxcdHhkc3RfcHJldi1cXHUwMDNldS5kc3QudHJhaWxlcl9sZW4gPSB0cmFpbGVyX2xlbjtcXG5AQCAtMjc4OSw2ICsyNzk0LDcgQEAgc3RhdGljIHN0cnVjdCBkc3RfZW50cnkgKnhmcm1fYnVuZGxlX2NyZWF0ZShzdHJ1Y3QgeGZybV9wb2xpY3kgKnBvbGljeSxcXG4gXFx0XFx0dHJhaWxlcl9sZW4gLT0geGRzdF9wcmV2LVxcdTAwM2V1LmRzdC54ZnJtLVxcdTAwM2Vwcm9wcy50cmFpbGVyX2xlbjtcXG4gXFx0fVxcbiBcXG4rXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIFxcdHJldHVybiBcXHUwMDI2eGRzdDAtXFx1MDAzZXUuZHN0O1xcbiBcXG4gcHV0X3N0YXRlczpcXG5AQCAtMzA1OCwxMSArMzA2NCwxNSBAQCBzdGF0aWMgc3RydWN0IHhmcm1fZHN0ICp4ZnJtX2NyZWF0ZV9kdW1teV9idW5kbGUoc3RydWN0IG5ldCAqbmV0LFxcbiBcXHR4ZnJtX2luaXRfcGF0aCgoc3RydWN0IHhmcm1fZHN0ICopZHN0MSwgZHN0LCAwKTtcXG4gXFxuIFxcdGVyciA9IC1FTk9ERVY7XFxuLVxcdGRldiA9IGRzdC1cXHUwMDNlZGV2O1xcbi1cXHRpZiAoIWRldilcXG4rXFx0cmN1X3JlYWRfbG9jaygpO1xcbitcXHRkZXYgPSBkc3RfZGV2X3JjdShkc3QpO1xcbitcXHRpZiAoIWRldikge1xcbitcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gXFx0XFx0Z290byBmcmVlX2RzdDtcXG4rXFx0fVxcbiBcXG4gXFx0ZXJyID0geGZybV9maWxsX2RzdCh4ZHN0LCBkZXYsIGZsKTtcXG4rXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIFxcdGlmIChlcnIpXFxuIFxcdFxcdGdvdG8gZnJlZV9kc3Q7XFxuIFxcbmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX3N0YXRlLmMgYi9uZXQveGZybS94ZnJtX3N0YXRlLmNcXG5pbmRleCAzNmE0ZjY3OTNlZGVmLi5lNDVhYTFlZDViOTY1IDEwMDY0NFxcbi0tLSBhL25ldC94ZnJtL3hmcm1fc3RhdGUuY1xcbisrKyBiL25ldC94ZnJtL3hmcm1fc3RhdGUuY1xcbkBAIC0yMjYsNiArMjI2LDcgQEAgc3RhdGljIHN0cnVjdCB4ZnJtX3N0YXRlX2FmaW5mbyBfX3JjdSAqeGZybV9zdGF0ZV9hZmluZm9bTlBST1RPXTtcXG4gXFxuIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soeGZybV9zdGF0ZV9nY19sb2NrKTtcXG4gc3RhdGljIERFRklORV9TUElOTE9DSyh4ZnJtX3N0YXRlX2Rldl9nY19sb2NrKTtcXG4rc3RhdGljIERFRklORV9NVVRFWCh4ZnJtX3N0YXRlX2djX211dGV4KTtcXG4gXFxuIGludCBfX3hmcm1fc3RhdGVfZGVsZXRlKHN0cnVjdCB4ZnJtX3N0YXRlICp4KTtcXG4gXFxuQEAgLTYzMiw4ICs2MzMsMTAgQEAgc3RhdGljIHZvaWQgeGZybV9zdGF0ZV9nY190YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4gXFxuIFxcdHN5bmNocm9uaXplX3JjdSgpO1xcbiBcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2eGZybV9zdGF0ZV9nY19tdXRleCk7XFxuIFxcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoeCwgdG1wLCBcXHUwMDI2Z2NfbGlzdCwgZ2NsaXN0KVxcbiBcXHRcXHR4ZnJtX3N0YXRlX2djX2Rlc3Ryb3koeCk7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2eGZybV9zdGF0ZV9nY19tdXRleCk7XFxuIH1cXG4gXFxuIHN0YXRpYyBlbnVtIGhydGltZXJfcmVzdGFydCB4ZnJtX3RpbWVyX2hhbmRsZXIoc3RydWN0IGhydGltZXIgKm1lKVxcbkBAIC04MjMsOSArODI2LDkgQEAgaW50IF9feGZybV9zdGF0ZV9kZWxldGUoc3RydWN0IHhmcm1fc3RhdGUgKngpXFxuIFxcdFxcdGlmICghaGxpc3RfdW5oYXNoZWQoXFx1MDAyNngtXFx1MDAzZWJ5c2VxKSlcXG4gXFx0XFx0XFx0aGxpc3RfZGVsX2luaXRfcmN1KFxcdTAwMjZ4LVxcdTAwM2VieXNlcSk7XFxuIFxcdFxcdGlmICghaGxpc3RfdW5oYXNoZWQoXFx1MDAyNngtXFx1MDAzZXN0YXRlX2NhY2hlKSlcXG4tXFx0XFx0XFx0aGxpc3RfZGVsX3JjdShcXHUwMDI2eC1cXHUwMDNlc3RhdGVfY2FjaGUpO1xcbitcXHRcXHRcXHRobGlzdF9kZWxfaW5pdF9yY3UoXFx1MDAyNngtXFx1MDAzZXN0YXRlX2NhY2hlKTtcXG4gXFx0XFx0aWYgKCFobGlzdF91bmhhc2hlZChcXHUwMDI2eC1cXHUwMDNlc3RhdGVfY2FjaGVfaW5wdXQpKVxcbi1cXHRcXHRcXHRobGlzdF9kZWxfcmN1KFxcdTAwMjZ4LVxcdTAwM2VzdGF0ZV9jYWNoZV9pbnB1dCk7XFxuK1xcdFxcdFxcdGhsaXN0X2RlbF9pbml0X3JjdShcXHUwMDI2eC1cXHUwMDNlc3RhdGVfY2FjaGVfaW5wdXQpO1xcbiBcXG4gXFx0XFx0aWYgKCFobGlzdF91bmhhc2hlZChcXHUwMDI2eC1cXHUwMDNlYnlzcGkpKVxcbiBcXHRcXHRcXHRobGlzdF9kZWxfaW5pdF9yY3UoXFx1MDAyNngtXFx1MDAzZWJ5c3BpKTtcXG5AQCAtMTAwMCw2ICsxMDAzLDcgQEAgaW50IHhmcm1fZGV2X3N0YXRlX2ZsdXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCB0YXNrX3ZhbGlcXG4gb3V0OlxcbiBcXHRzcGluX3VubG9ja19iaChcXHUwMDI2bmV0LVxcdTAwM2V4ZnJtLnhmcm1fc3RhdGVfbG9jayk7XFxuIFxcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZ4ZnJtX3N0YXRlX2djX211dGV4KTtcXG4gXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZ4ZnJtX3N0YXRlX2Rldl9nY19sb2NrKTtcXG4gcmVzdGFydF9nYzpcXG4gXFx0aGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh4LCB0bXAsIFxcdTAwMjZ4ZnJtX3N0YXRlX2Rldl9nY19saXN0LCBkZXZfZ2NsaXN0KSB7XFxuQEAgLTEwMTQsNiArMTAxOCw3IEBAIGludCB4ZnJtX2Rldl9zdGF0ZV9mbHVzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGJvb2wgdGFza192YWxpXFxuIFxcbiBcXHR9XFxuIFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZ4ZnJtX3N0YXRlX2Rldl9nY19sb2NrKTtcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZ4ZnJtX3N0YXRlX2djX211dGV4KTtcXG4gXFxuIFxcdHhmcm1fZmx1c2hfZ2MoKTtcXG4gXFxuZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1fdXNlci5jIGIvbmV0L3hmcm0veGZybV91c2VyLmNcXG5pbmRleCA2MjY2YTkyY2YzMDIwLi5hMjU4N2M3ZTc5NmI0IDEwMDY0NFxcbi0tLSBhL25ldC94ZnJtL3hmcm1fdXNlci5jXFxuKysrIGIvbmV0L3hmcm0veGZybV91c2VyLmNcXG5AQCAtMTg3Nyw3ICsxODc3LDYgQEAgc3RhdGljIGludCB4ZnJtX2FsbG9jX3VzZXJzcGkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXFxuIFxcdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrYi1cXHUwMDNlc2spO1xcbiBcXHRzdHJ1Y3QgeGZybV9zdGF0ZSAqeDtcXG4gXFx0c3RydWN0IHhmcm1fdXNlcnNwaV9pbmZvICpwO1xcbi1cXHRzdHJ1Y3QgeGZybV90cmFuc2xhdG9yICp4dHI7XFxuIFxcdHN0cnVjdCBza19idWZmICpyZXNwX3NrYjtcXG4gXFx0eGZybV9hZGRyZXNzX3QgKmRhZGRyO1xcbiBcXHRpbnQgZmFtaWx5O1xcbkBAIC0xOTQzLDE3ICsxOTQyLDYgQEAgc3RhdGljIGludCB4ZnJtX2FsbG9jX3VzZXJzcGkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXHR9XFxuIFxcbi1cXHR4dHIgPSB4ZnJtX2dldF90cmFuc2xhdG9yKCk7XFxuLVxcdGlmICh4dHIpIHtcXG4tXFx0XFx0ZXJyID0geHRyLVxcdTAwM2VhbGxvY19jb21wYXQoc2tiLCBubG1zZ19oZHIoc2tiKSk7XFxuLVxcbi1cXHRcXHR4ZnJtX3B1dF90cmFuc2xhdG9yKHh0cik7XFxuLVxcdFxcdGlmIChlcnIpIHtcXG4tXFx0XFx0XFx0a2ZyZWVfc2tiKHJlc3Bfc2tiKTtcXG4tXFx0XFx0XFx0Z290byBvdXQ7XFxuLVxcdFxcdH1cXG4tXFx0fVxcbi1cXG4gXFx0ZXJyID0gbmxtc2dfdW5pY2FzdCh4ZnJtX25ldF9ubHNrKG5ldCwgc2tiKSwgcmVzcF9za2IsIE5FVExJTktfQ0Ioc2tiKS5wb3J0aWQpO1xcbiBcXG4gb3V0OlxcbkBAIC0zMzM3LDcgKzMzMjUsMTEgQEAgc3RhdGljIGludCB4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZShzdHJ1Y3QgbmV0ICpuZXQsXFxuIFxcdFxcdHJldHVybiBlcnI7XFxuIFxcdH1cXG4gXFxuLVxcdHJldHVybiB4ZnJtX25sbXNnX211bHRpY2FzdChuZXQsIHNrYiwgMCwgWEZSTU5MR1JQX01JR1JBVEUpO1xcbitcXHRyY3VfcmVhZF9sb2NrKCk7XFxuK1xcdGVyciA9IHhmcm1fbmxtc2dfbXVsdGljYXN0KG5ldCwgc2tiLCAwLCBYRlJNTkxHUlBfTUlHUkFURSk7XFxuK1xcdHJjdV9yZWFkX3VubG9jaygpO1xcbitcXG4rXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG4gc3RhdGljIGludCB4ZnJtX2RvX21pZ3JhdGVfc3RhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDEzOjUzOjU0LjM2Njk4ODUxNFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NDQwNjMwMjE3NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU5FVFwiLFxuICAgIFwiSVBWNlwiLFxuICAgIFwiWEZSTVwiLFxuICAgIFwiSU5FVF9FU1BcIixcbiAgICBcIklORVQ2X0VTUFwiLFxuICAgIFwiSU5FVF9FU1BJTlRDUFwiLFxuICAgIFwiSU5FVDZfRVNQSU5UQ1BcIixcbiAgICBcIlhGUk1fVVNFUlwiLFxuICAgIFwiWEZSTV9JUFRGU1wiLFxuICAgIFwiWEZSTV9NSUdSQVRFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZXNwX291dHB1dF9oZWFkXCIsXG4gICAgXCJlc3A2X291dHB1dF9oZWFkXCIsXG4gICAgXCJ4ZnJtNl9sb2NhbF9yeHBtdHVcIixcbiAgICBcInhmcm02X2xvY2FsX2Vycm9yXCIsXG4gICAgXCJlc3BpbnRjcF9yY3ZcIixcbiAgICBcImhhbmRsZV9lc3BcIixcbiAgICBcInhmcm1faW5wdXRcIixcbiAgICBcInhmcm1fdHJhbnNfcmVpbmplY3RcIixcbiAgICBcInhmcm1fdHJhbnNfcXVldWVfbmV0XCIsXG4gICAgXCJpcHRmc19za2JfY2FuX2FkZF9mcmFnc1wiLFxuICAgIFwiaXB0ZnNfcmVhc3NlbV9jb250XCIsXG4gICAgXCJ4ZnJtX2J1bmRsZV9jcmVhdGVcIixcbiAgICBcInhmcm1fY3JlYXRlX2R1bW15X2J1bmRsZVwiLFxuICAgIFwieGZybV9zdGF0ZV9nY190YXNrXCIsXG4gICAgXCJfX3hmcm1fc3RhdGVfZGVsZXRlXCIsXG4gICAgXCJ4ZnJtX2Rldl9zdGF0ZV9mbHVzaFwiLFxuICAgIFwieGZybV9hbGxvY191c2Vyc3BpXCIsXG4gICAgXCJ4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHRvdWNoZXMgY29yZSBJUHNlYyAoWEZSTSkgSVB2NC9JUHY2IG5ldHdvcmtpbmcgbG9naWMsIGluY2x1ZGluZyBFU1Agb3V0cHV0IHplcm8tY29weSBkb3duZ3JhZGVzLCBJUHY2IFhGUk0gZXJyb3IgcmVwb3J0aW5nIGZvciBub24tZnVsbCBzb2NrZXRzLCBFU1AtaW4tVENQIHRyYW5zcG9ydCBoZWFkZXIgcmVzZXR0aW5nLCBYRlJNIGlucHV0IHBhY2tldCBwcm90byBkaXNwYXRjaCBhbmQgYXN5bmMgZGV2LXJlZiByZWluamVjdGlvbiBoYW5kbGluZywgSVAtVEZTIGZyYWdtZW50IHdhbGsgYm91bmRzIGNoZWNrcywgcG9saWN5IGJ1bmRsZSBSQ1UgZGV2aWNlIHJlc29sdXRpb24sIHN0YXRlIEdDIHNlcmlhbGl6YXRpb24gdW5kZXIgbXV0ZXgsIGFuZCBYRlJNIHVzZXIgbmV0bGluayBoYW5kbGVycy4gQWxsIGNoYW5nZXMgYXJlIGluIHJlYWNoYWJsZSBuZXR3b3JraW5nIHBhdGhzIGV4ZXJjaXNhYmxlIHZpYSBzb2NrZXRzIGFuZCBYRlJNIG5ldGxpbmsgaW50ZXJmYWNlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBjZTAxNGRhMTUzZDhkY2U4YzMzZTM2ZmE5NTdmMTAxMzk2M2Y2ZTE5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgNyAxMzo1Mzo1MCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L2VzcDQuYyBiL25ldC9pcHY0L2VzcDQuY1xuaW5kZXggYTZjMThhZWE3NDk4ZC4uZTc2ZGI1ODE3ZTc4ZSAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L2VzcDQuY1xuKysrIGIvbmV0L2lwdjQvZXNwNC5jXG5AQCAtNDQxLDYgKzQ0MSwxMiBAQCBpbnQgZXNwX291dHB1dF9oZWFkKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZXNwX2luZm8gKlxuIFxuIFx0XHRcdGVzcC1cdTAwM2VpbnBsYWNlID0gZmFsc2U7XG4gXG4rXHRcdFx0LyogVGFrZSByZWFsIHBhZ2UgcmVmcyBhbmQgY2xlYXIgU0tCRkxfTUFOQUdFRF9GUkFHX1JFRlMgYmVmb3JlXG4rXHRcdFx0ICogd2UgbXV0YXRlIHRoZSBmcmFnIGFycmF5LCBzbyB0aGUgcGVyLWZyYWcgdW5yZWYgc3RheXMgYmFsYW5jZWRcbitcdFx0XHQgKiBmb3IgemVyb2NvcHkgbWFuYWdlZCBmcmFncyAoc2VlIF9faXBfYXBwZW5kX2RhdGEoKSkuXG4rXHRcdFx0ICovXG4rXHRcdFx0c2tiX3pjb3B5X2Rvd25ncmFkZV9tYW5hZ2VkKHNrYik7XG4rXG4gXHRcdFx0YWxsb2NzaXplID0gQUxJR04odGFpbGVuLCBMMV9DQUNIRV9CWVRFUyk7XG4gXG4gXHRcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNngtXHUwMDNlbG9jayk7XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvZXNwNi5jIGIvbmV0L2lwdjYvZXNwNi5jXG5pbmRleCA3MmVjMGQ3ZDExMjA5Li5iMWM5YjM2Zjc2ZGM0IDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvZXNwNi5jXG4rKysgYi9uZXQvaXB2Ni9lc3A2LmNcbkBAIC00NzEsNiArNDcxLDEyIEBAIGludCBlc3A2X291dHB1dF9oZWFkKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZXNwX2luZm9cbiBcbiBcdFx0XHRlc3AtXHUwMDNlaW5wbGFjZSA9IGZhbHNlO1xuIFxuK1x0XHRcdC8qIFRha2UgcmVhbCBwYWdlIHJlZnMgYW5kIGNsZWFyIFNLQkZMX01BTkFHRURfRlJBR19SRUZTIGJlZm9yZVxuK1x0XHRcdCAqIHdlIG11dGF0ZSB0aGUgZnJhZyBhcnJheSwgc28gdGhlIHBlci1mcmFnIHVucmVmIHN0YXlzIGJhbGFuY2VkXG4rXHRcdFx0ICogZm9yIHplcm9jb3B5IG1hbmFnZWQgZnJhZ3MgKHNlZSBfX2lwX2FwcGVuZF9kYXRhKCkpLlxuK1x0XHRcdCAqL1xuK1x0XHRcdHNrYl96Y29weV9kb3duZ3JhZGVfbWFuYWdlZChza2IpO1xuK1xuIFx0XHRcdGFsbG9jc2l6ZSA9IEFMSUdOKHRhaWxlbiwgTDFfQ0FDSEVfQllURVMpO1xuIFxuIFx0XHRcdHNwaW5fbG9ja19iaChcdTAwMjZ4LVx1MDAzZWxvY2spO1xuZGlmZiAtLWdpdCBhL25ldC9pcHY2L3hmcm02X291dHB1dC5jIGIvbmV0L2lwdjYveGZybTZfb3V0cHV0LmNcbmluZGV4IDUxMmJkYWYxMzY5OTcuLjQ0YjIyMWEwOWEwYzggMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni94ZnJtNl9vdXRwdXQuY1xuKysrIGIvbmV0L2lwdjYveGZybTZfb3V0cHV0LmNcbkBAIC0xOSw3ICsxOSwxMCBAQFxuIHZvaWQgeGZybTZfbG9jYWxfcnhwbXR1KHN0cnVjdCBza19idWZmICpza2IsIHUzMiBtdHUpXG4ge1xuIFx0c3RydWN0IGZsb3dpNiBmbDY7XG4tXHRzdHJ1Y3Qgc29jayAqc2sgPSBza2ItXHUwMDNlc2s7XG4rXHRzdHJ1Y3Qgc29jayAqc2sgPSBza2JfdG9fZnVsbF9zayhza2IpO1xuK1xuK1x0aWYgKCFzaylcbitcdFx0cmV0dXJuO1xuIFxuIFx0Zmw2LmZsb3dpNl9vaWYgPSBzay1cdTAwM2Vza19ib3VuZF9kZXZfaWY7XG4gXHRmbDYuZGFkZHIgPSBpcHY2X2hkcihza2IpLVx1MDAzZWRhZGRyO1xuQEAgLTMxLDcgKzM0LDEwIEBAIHZvaWQgeGZybTZfbG9jYWxfZXJyb3Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIG10dSlcbiB7XG4gXHRzdHJ1Y3QgZmxvd2k2IGZsNjtcbiBcdGNvbnN0IHN0cnVjdCBpcHY2aGRyICpoZHI7XG4tXHRzdHJ1Y3Qgc29jayAqc2sgPSBza2ItXHUwMDNlc2s7XG4rXHRzdHJ1Y3Qgc29jayAqc2sgPSBza2JfdG9fZnVsbF9zayhza2IpO1xuK1xuK1x0aWYgKCFzaylcbitcdFx0cmV0dXJuO1xuIFxuIFx0aGRyID0gc2tiLVx1MDAzZWVuY2Fwc3VsYXRpb24gPyBpbm5lcl9pcHY2X2hkcihza2IpIDogaXB2Nl9oZHIoc2tiKTtcbiBcdGZsNi5mbDZfZHBvcnQgPSBpbmV0X3NrKHNrKS1cdTAwM2VpbmV0X2Rwb3J0O1xuZGlmZiAtLWdpdCBhL25ldC94ZnJtL2VzcGludGNwLmMgYi9uZXQveGZybS9lc3BpbnRjcC5jXG5pbmRleCA2NzRhZWRjNWFmNWEyLi4zZTcyYjlmMDY3YjliIDEwMDY0NFxuLS0tIGEvbmV0L3hmcm0vZXNwaW50Y3AuY1xuKysrIGIvbmV0L3hmcm0vZXNwaW50Y3AuY1xuQEAgLTMwLDcgKzMwLDExIEBAIHN0YXRpYyB2b2lkIGhhbmRsZV9lc3Aoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNvY2sgKnNrKVxuIHtcbiBcdHN0cnVjdCB0Y3Bfc2tiX2NiICp0Y3BfY2IgPSAoc3RydWN0IHRjcF9za2JfY2IgKilza2ItXHUwMDNlY2I7XG4gXG4tXHRza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcihza2IpO1xuK1x0aWYgKCFza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHNrYikpIHtcbitcdFx0WEZSTV9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBMSU5VWF9NSUJfWEZSTUlORVJST1IpO1xuK1x0XHRrZnJlZV9za2Ioc2tiKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuIFxuIFx0LyogcmVzdG9yZSBJUCBDQiwgd2UgbmVlZCBhdCBsZWFzdCBJUDZDQi1cdTAwM2VuaG9mZiAqL1xuIFx0bWVtbW92ZShza2ItXHUwMDNlY2IsIFx1MDAyNnRjcF9jYi1cdTAwM2VoZWFkZXIsIHNpemVvZih0Y3BfY2ItXHUwMDNlaGVhZGVyKSk7XG5kaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV9pbnB1dC5jIGIvbmV0L3hmcm0veGZybV9pbnB1dC5jXG5pbmRleCBlZWNhYjMzN2JkMGE3Li41ZWQ4N2Q1MTM5MmE1IDEwMDY0NFxuLS0tIGEvbmV0L3hmcm0veGZybV9pbnB1dC5jXG4rKysgYi9uZXQveGZybS94ZnJtX2lucHV0LmNcbkBAIC00NzQsNiArNDc0LDcgQEAgaW50IHhmcm1faW5wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG5leHRoZHIsIF9fYmUzMiBzcGksIGludCBlbmNhcF90eXBlKVxuIFx0c3RydWN0IHhmcm1fc3RhdGUgKnggPSBOVUxMO1xuIFx0eGZybV9hZGRyZXNzX3QgKmRhZGRyO1xuIFx0dTMyIG1hcmsgPSBza2ItXHUwMDNlbWFyaztcbitcdHU4IHhmcm1fcHJvdG8gPSBuZXh0aGRyO1xuIFx0dW5zaWduZWQgaW50IGZhbWlseSA9IEFGX1VOU1BFQztcbiBcdGludCBkZWNhcHMgPSAwO1xuIFx0aW50IGFzeW5jID0gMDtcbkBAIC00ODUsNiArNDg2LDcgQEAgaW50IHhmcm1faW5wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG5leHRoZHIsIF9fYmUzMiBzcGksIGludCBlbmNhcF90eXBlKVxuIFx0aWYgKGVuY2FwX3R5cGUgXHUwMDNjIDAgfHwgKHhvIFx1MDAyNlx1MDAyNiAoeG8tXHUwMDNlZmxhZ3MgXHUwMDI2IFhGUk1fR1JPIHx8IGVuY2FwX3R5cGUgPT0gMCB8fFxuIFx0XHRcdFx0ICAgICAgZW5jYXBfdHlwZSA9PSBVRFBfRU5DQVBfRVNQSU5VRFApKSkge1xuIFx0XHR4ID0geGZybV9pbnB1dF9zdGF0ZShza2IpO1xuK1x0XHR4ZnJtX3Byb3RvID0geC1cdTAwM2V0eXBlID8geC1cdTAwM2V0eXBlLVx1MDAzZXByb3RvIDogbmV4dGhkcjtcbiBcbiBcdFx0aWYgKHVubGlrZWx5KHgtXHUwMDNla20uc3RhdGUgIT0gWEZSTV9TVEFURV9WQUxJRCkpIHtcbiBcdFx0XHRpZiAoeC1cdTAwM2VrbS5zdGF0ZSA9PSBYRlJNX1NUQVRFX0FDUSlcbkBAIC01OTIsMTEgKzU5NCwxMyBAQCBpbnQgeGZybV9pbnB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbmV4dGhkciwgX19iZTMyIHNwaSwgaW50IGVuY2FwX3R5cGUpXG4gXG4gXHRcdHggPSB4ZnJtX2lucHV0X3N0YXRlX2xvb2t1cChuZXQsIG1hcmssIGRhZGRyLCBzcGksIG5leHRoZHIsIGZhbWlseSk7XG4gXHRcdGlmICh4ID09IE5VTEwpIHtcbitcdFx0XHR4ZnJtX3Byb3RvID0gbmV4dGhkcjtcbiBcdFx0XHRzZWNwYXRoX3Jlc2V0KHNrYik7XG4gXHRcdFx0WEZSTV9JTkNfU1RBVFMobmV0LCBMSU5VWF9NSUJfWEZSTUlOTk9TVEFURVMpO1xuIFx0XHRcdHhmcm1fYXVkaXRfc3RhdGVfbm90Zm91bmQoc2tiLCBmYW1pbHksIHNwaSwgc2VxKTtcbiBcdFx0XHRnb3RvIGRyb3A7XG4gXHRcdH1cbitcdFx0eGZybV9wcm90byA9IHgtXHUwMDNldHlwZSA/IHgtXHUwMDNldHlwZS1cdTAwM2Vwcm90byA6IG5leHRoZHI7XG4gXG4gXHRcdGlmICh1bmxpa2VseSh4LVx1MDAzZWRpciBcdTAwMjZcdTAwMjYgeC1cdTAwM2VkaXIgIT0gWEZSTV9TQV9ESVJfSU4pKSB7XG4gXHRcdFx0c2VjcGF0aF9yZXNldChza2IpO1xuQEAgLTYwNCw2ICs2MDgsNyBAQCBpbnQgeGZybV9pbnB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbmV4dGhkciwgX19iZTMyIHNwaSwgaW50IGVuY2FwX3R5cGUpXG4gXHRcdFx0eGZybV9hdWRpdF9zdGF0ZV9ub3Rmb3VuZChza2IsIGZhbWlseSwgc3BpLCBzZXEpO1xuIFx0XHRcdHhmcm1fc3RhdGVfcHV0KHgpO1xuIFx0XHRcdHggPSBOVUxMO1xuK1x0XHRcdHhmcm1fcHJvdG8gPSBuZXh0aGRyO1xuIFx0XHRcdGdvdG8gZHJvcDtcbiBcdFx0fVxuIFxuQEAgLTcyOCw3ICs3MzMsNyBAQCBpbnQgeGZybV9pbnB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbmV4dGhkciwgX19iZTMyIHNwaSwgaW50IGVuY2FwX3R5cGUpXG4gXHR9IHdoaWxlICghZXJyKTtcbiBcbiBcdHJjdV9yZWFkX2xvY2soKTtcbi1cdGVyciA9IHhmcm1fcmN2X2NiKHNrYiwgZmFtaWx5LCB4LVx1MDAzZXR5cGUtXHUwMDNlcHJvdG8sIDApO1xuK1x0ZXJyID0geGZybV9yY3ZfY2Ioc2tiLCBmYW1pbHksIHhmcm1fcHJvdG8sIDApO1xuIFx0aWYgKGVycikge1xuIFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdFx0Z290byBkcm9wO1xuQEAgLTc1Myw3ICs3NTgsNyBAQCBpbnQgeGZybV9pbnB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbmV4dGhkciwgX19iZTMyIHNwaSwgaW50IGVuY2FwX3R5cGUpXG4gXHRcdFx0eGZybV9ncm8gPSB4by1cdTAwM2VmbGFncyBcdTAwMjYgWEZSTV9HUk87XG4gXG4gXHRcdGVyciA9IC1FQUZOT1NVUFBPUlQ7XG4tXHRcdGFmaW5mbyA9IHhmcm1fc3RhdGVfYWZpbmZvX2dldF9yY3UoeC1cdTAwM2Vwcm9wcy5mYW1pbHkpO1xuK1x0XHRhZmluZm8gPSB4ZnJtX3N0YXRlX2FmaW5mb19nZXRfcmN1KGZhbWlseSk7XG4gXHRcdGlmIChsaWtlbHkoYWZpbmZvKSlcbiBcdFx0XHRlcnIgPSBhZmluZm8tXHUwMDNldHJhbnNwb3J0X2ZpbmlzaChza2IsIHhmcm1fZ3JvIHx8IGFzeW5jKTtcbiBcdFx0aWYgKHhmcm1fZ3JvKSB7XG5AQCAtNzc2LDcgKzc4MSw3IEBAIGludCB4ZnJtX2lucHV0KHN0cnVjdCBza19idWZmICpza2IsIGludCBuZXh0aGRyLCBfX2JlMzIgc3BpLCBpbnQgZW5jYXBfdHlwZSlcbiBkcm9wOlxuIFx0aWYgKGFzeW5jKVxuIFx0XHRkZXZfcHV0KGRldik7XG4tXHR4ZnJtX3Jjdl9jYihza2IsIGZhbWlseSwgeCBcdTAwMjZcdTAwMjYgeC1cdTAwM2V0eXBlID8geC1cdTAwM2V0eXBlLVx1MDAzZXByb3RvIDogbmV4dGhkciwgLTEpO1xuK1x0eGZybV9yY3ZfY2Ioc2tiLCBmYW1pbHksIHhmcm1fcHJvdG8sIC0xKTtcbiBcdGtmcmVlX3NrYihza2IpO1xuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTgwMCwxMiArODA1LDE3IEBAIHN0YXRpYyB2b2lkIHhmcm1fdHJhbnNfcmVpbmplY3Qoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2dHJhbnMtXHUwMDNlcXVldWVfbG9jayk7XG4gXG4gXHRsb2NhbF9iaF9kaXNhYmxlKCk7XG4rXHRyY3VfcmVhZF9sb2NrKCk7XG4gXHR3aGlsZSAoKHNrYiA9IF9fc2tiX2RlcXVldWUoXHUwMDI2cXVldWUpKSkge1xuIFx0XHRzdHJ1Y3QgbmV0ICpuZXQgPSBYRlJNX1RSQU5TX1NLQl9DQihza2IpLVx1MDAzZW5ldDtcbitcdFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHNrYi1cdTAwM2VkZXY7XG4gXG4gXHRcdFhGUk1fVFJBTlNfU0tCX0NCKHNrYiktXHUwMDNlZmluaXNoKG5ldCwgTlVMTCwgc2tiKTtcbitcdFx0aWYgKGRldilcbitcdFx0XHRkZXZfcHV0KGRldik7XG4gXHRcdHB1dF9uZXQobmV0KTtcbiBcdH1cbitcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0bG9jYWxfYmhfZW5hYmxlKCk7XG4gfVxuIFxuQEAgLTgyMSwxMiArODMxLDE4IEBAIGludCB4ZnJtX3RyYW5zX3F1ZXVlX25ldChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRpZiAoc2tiX3F1ZXVlX2xlbihcdTAwMjZ0cmFucy1cdTAwM2VxdWV1ZSkgXHUwMDNlPSBSRUFEX09OQ0UobmV0X2hvdGRhdGEubWF4X2JhY2tsb2cpKVxuIFx0XHRyZXR1cm4gLUVOT0JVRlM7XG4gXG4rXHRpZiAoc2tiX2RzdChza2IpIFx1MDAyNlx1MDAyNiAhc2tiX2RzdF9mb3JjZShza2IpKVxuK1x0XHRyZXR1cm4gLUVIT1NUVU5SRUFDSDtcbitcbiBcdEJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IHhmcm1fdHJhbnNfY2IpIFx1MDAzZSBzaXplb2Yoc2tiLVx1MDAzZWNiKSk7XG4gXG4gXHRob2xkX25ldCA9IG1heWJlX2dldF9uZXQobmV0KTtcbiBcdGlmICghaG9sZF9uZXQpXG4gXHRcdHJldHVybiAtRU5PREVWO1xuIFxuK1x0aWYgKHNrYi1cdTAwM2VkZXYpXG4rXHRcdGRldl9ob2xkKHNrYi1cdTAwM2VkZXYpO1xuK1xuIFx0WEZSTV9UUkFOU19TS0JfQ0Ioc2tiKS1cdTAwM2VmaW5pc2ggPSBmaW5pc2g7XG4gXHRYRlJNX1RSQU5TX1NLQl9DQihza2IpLVx1MDAzZW5ldCA9IGhvbGRfbmV0O1xuIFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnRyYW5zLVx1MDAzZXF1ZXVlX2xvY2spO1xuZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1faXB0ZnMuYyBiL25ldC94ZnJtL3hmcm1faXB0ZnMuY1xuaW5kZXggNTk3YWVkZWFjMjZlYi4uNjkyMDk0MGEzNWI0OSAxMDA2NDRcbi0tLSBhL25ldC94ZnJtL3hmcm1faXB0ZnMuY1xuKysrIGIvbmV0L3hmcm0veGZybV9pcHRmcy5jXG5AQCAtNDE2LDYgKzQxNiwxNCBAQCBzdGF0aWMgYm9vbCBpcHRmc19za2JfY2FuX2FkZF9mcmFncyhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0aWYgKHNrYl9oYXNfZnJhZ19saXN0KHNrYikgfHwgc2tiLVx1MDAzZXBwX3JlY3ljbGUgIT0gd2Fsay1cdTAwM2VwcF9yZWN5Y2xlKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4rXHQvKiBSZWplY3QgYW4gQG9mZnNldCB0aGF0IGlzIGF0IG9yIGJleW9uZCB0aGUgZW5kIG9mIHRoZSB3YWxrJ3MgZGF0YVxuK1x0ICogYmVmb3JlIGNhbGxpbmcgaXB0ZnNfc2tiX3Jlc2V0X2ZyYWdfd2FsaygpLCB3aG9zZSBmcmFnbWVudC1hZHZhbmNlXG4rXHQgKiBsb29wIGlzIG90aGVyd2lzZSB1bmJvdW5kZWQgYW5kIHdvdWxkIGluZGV4IHBhc3Qgd2Fsay1cdTAwM2VmcmFnc1tdLlxuK1x0ICogVGhpcyBtaXJyb3JzIHRoZSBndWFyZCBhbHJlYWR5IHByZXNlbnQgaW4gaXB0ZnNfc2tiX2FkZF9mcmFncygpLlxuK1x0ICovXG4rXHRpZiAoIXdhbGstXHUwMDNlbnJfZnJhZ3MgfHwgb2Zmc2V0IFx1MDAzZT0gd2Fsay1cdTAwM2V0b3RhbCArIHdhbGstXHUwMDNlaW5pdGlhbF9vZmZzZXQpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbiBcdC8qIE1ha2Ugb2Zmc2V0IHJlbGF0aXZlIHRvIGN1cnJlbnQgZnJhZyBhZnRlciBzZXR0aW5nIHRoYXQgKi9cbiBcdG9mZnNldCA9IGlwdGZzX3NrYl9yZXNldF9mcmFnX3dhbGsod2Fsaywgb2Zmc2V0KTtcbiBcbkBAIC04MjAsOCArODI4LDggQEAgc3RhdGljIHUzMiBpcHRmc19yZWFzc2VtX2NvbnQoc3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcywgdTY0IHNlcSxcbiBcdFx0ICogYWxsb2NhdGUgYW4gaW4gcHJvZ3Jlc3Mgc2tiXG4gXHRcdCAqL1xuIFx0XHRpcHJlbWFpbiA9IF9faXB0ZnNfaXBsZW4oeHRmcy1cdTAwM2VyYV9ydW50KTtcbi1cdFx0aWYgKGlwcmVtYWluIFx1MDAzYyBzaXplb2YoeHRmcy1cdTAwM2VyYV9ydW50KSkge1xuLVx0XHRcdC8qIGxlbmd0aCBoYXMgdG8gYmUgYXQgbGVhc3QgcnVudHNpemUgbGFyZ2UgKi9cbitcdFx0aWYgKGlwcmVtYWluIFx1MDAzYyBfX2lwdGZzX2lwaGxlbih4dGZzLVx1MDAzZXJhX3J1bnQpKSB7XG4rXHRcdFx0LyogbGVuZ3RoIGhhcyB0byBiZSBhdCBsZWFzdCB0aGUgSVAgaGVhZGVyIHNpemUgKi9cbiBcdFx0XHRYRlJNX0lOQ19TVEFUUyh4c19uZXQoeHRmcy1cdTAwM2V4KSxcbiBcdFx0XHRcdCAgICAgICBMSU5VWF9NSUJfWEZSTUlOSVBURlNFUlJPUik7XG4gXHRcdFx0Z290byBhYmFuZG9uO1xuZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1fcG9saWN5LmMgYi9uZXQveGZybS94ZnJtX3BvbGljeS5jXG5pbmRleCA5MzJhMzEzYjk0NjBhLi41MTNjOWYyMjgzMzQ3IDEwMDY0NFxuLS0tIGEvbmV0L3hmcm0veGZybV9wb2xpY3kuY1xuKysrIGIvbmV0L3hmcm0veGZybV9wb2xpY3kuY1xuQEAgLTI3NzAsOSArMjc3MCwxMiBAQCBzdGF0aWMgc3RydWN0IGRzdF9lbnRyeSAqeGZybV9idW5kbGVfY3JlYXRlKHN0cnVjdCB4ZnJtX3BvbGljeSAqcG9saWN5LFxuIFx0eGRzdDAtXHUwMDNlcGF0aCA9IGRzdDtcbiBcbiBcdGVyciA9IC1FTk9ERVY7XG4tXHRkZXYgPSBkc3QtXHUwMDNlZGV2O1xuLVx0aWYgKCFkZXYpXG4rXHRyY3VfcmVhZF9sb2NrKCk7XG4rXHRkZXYgPSBkc3RfZGV2X3JjdShkc3QpO1xuK1x0aWYgKCFkZXYpIHtcbitcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXHRcdGdvdG8gZnJlZV9kc3Q7XG4rXHR9XG4gXG4gXHR4ZnJtX2luaXRfcGF0aCh4ZHN0MCwgZHN0LCBuZmhlYWRlcl9sZW4pO1xuIFx0eGZybV9pbml0X3BtdHUoYnVuZGxlLCBueCk7XG5AQCAtMjc4MCw4ICsyNzgzLDEwIEBAIHN0YXRpYyBzdHJ1Y3QgZHN0X2VudHJ5ICp4ZnJtX2J1bmRsZV9jcmVhdGUoc3RydWN0IHhmcm1fcG9saWN5ICpwb2xpY3ksXG4gXHRmb3IgKHhkc3RfcHJldiA9IHhkc3QwOyB4ZHN0X3ByZXYgIT0gKHN0cnVjdCB4ZnJtX2RzdCAqKWRzdDtcbiBcdCAgICAgeGRzdF9wcmV2ID0gKHN0cnVjdCB4ZnJtX2RzdCAqKSB4ZnJtX2RzdF9jaGlsZChcdTAwMjZ4ZHN0X3ByZXYtXHUwMDNldS5kc3QpKSB7XG4gXHRcdGVyciA9IHhmcm1fZmlsbF9kc3QoeGRzdF9wcmV2LCBkZXYsIGZsKTtcbi1cdFx0aWYgKGVycilcbitcdFx0aWYgKGVycikge1xuK1x0XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0XHRcdGdvdG8gZnJlZV9kc3Q7XG4rXHRcdH1cbiBcbiBcdFx0eGRzdF9wcmV2LVx1MDAzZXUuZHN0LmhlYWRlcl9sZW4gPSBoZWFkZXJfbGVuO1xuIFx0XHR4ZHN0X3ByZXYtXHUwMDNldS5kc3QudHJhaWxlcl9sZW4gPSB0cmFpbGVyX2xlbjtcbkBAIC0yNzg5LDYgKzI3OTQsNyBAQCBzdGF0aWMgc3RydWN0IGRzdF9lbnRyeSAqeGZybV9idW5kbGVfY3JlYXRlKHN0cnVjdCB4ZnJtX3BvbGljeSAqcG9saWN5LFxuIFx0XHR0cmFpbGVyX2xlbiAtPSB4ZHN0X3ByZXYtXHUwMDNldS5kc3QueGZybS1cdTAwM2Vwcm9wcy50cmFpbGVyX2xlbjtcbiBcdH1cbiBcbitcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0cmV0dXJuIFx1MDAyNnhkc3QwLVx1MDAzZXUuZHN0O1xuIFxuIHB1dF9zdGF0ZXM6XG5AQCAtMzA1OCwxMSArMzA2NCwxNSBAQCBzdGF0aWMgc3RydWN0IHhmcm1fZHN0ICp4ZnJtX2NyZWF0ZV9kdW1teV9idW5kbGUoc3RydWN0IG5ldCAqbmV0LFxuIFx0eGZybV9pbml0X3BhdGgoKHN0cnVjdCB4ZnJtX2RzdCAqKWRzdDEsIGRzdCwgMCk7XG4gXG4gXHRlcnIgPSAtRU5PREVWO1xuLVx0ZGV2ID0gZHN0LVx1MDAzZWRldjtcbi1cdGlmICghZGV2KVxuK1x0cmN1X3JlYWRfbG9jaygpO1xuK1x0ZGV2ID0gZHN0X2Rldl9yY3UoZHN0KTtcbitcdGlmICghZGV2KSB7XG4rXHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0XHRnb3RvIGZyZWVfZHN0O1xuK1x0fVxuIFxuIFx0ZXJyID0geGZybV9maWxsX2RzdCh4ZHN0LCBkZXYsIGZsKTtcbitcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0aWYgKGVycilcbiBcdFx0Z290byBmcmVlX2RzdDtcbiBcbmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX3N0YXRlLmMgYi9uZXQveGZybS94ZnJtX3N0YXRlLmNcbmluZGV4IDM2YTRmNjc5M2VkZWYuLmU0NWFhMWVkNWI5NjUgMTAwNjQ0XG4tLS0gYS9uZXQveGZybS94ZnJtX3N0YXRlLmNcbisrKyBiL25ldC94ZnJtL3hmcm1fc3RhdGUuY1xuQEAgLTIyNiw2ICsyMjYsNyBAQCBzdGF0aWMgc3RydWN0IHhmcm1fc3RhdGVfYWZpbmZvIF9fcmN1ICp4ZnJtX3N0YXRlX2FmaW5mb1tOUFJPVE9dO1xuIFxuIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soeGZybV9zdGF0ZV9nY19sb2NrKTtcbiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHhmcm1fc3RhdGVfZGV2X2djX2xvY2spO1xuK3N0YXRpYyBERUZJTkVfTVVURVgoeGZybV9zdGF0ZV9nY19tdXRleCk7XG4gXG4gaW50IF9feGZybV9zdGF0ZV9kZWxldGUoc3RydWN0IHhmcm1fc3RhdGUgKngpO1xuIFxuQEAgLTYzMiw4ICs2MzMsMTAgQEAgc3RhdGljIHZvaWQgeGZybV9zdGF0ZV9nY190YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcbiBcdHN5bmNocm9uaXplX3JjdSgpO1xuIFxuK1x0bXV0ZXhfbG9jayhcdTAwMjZ4ZnJtX3N0YXRlX2djX211dGV4KTtcbiBcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoeCwgdG1wLCBcdTAwMjZnY19saXN0LCBnY2xpc3QpXG4gXHRcdHhmcm1fc3RhdGVfZ2NfZGVzdHJveSh4KTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZ4ZnJtX3N0YXRlX2djX211dGV4KTtcbiB9XG4gXG4gc3RhdGljIGVudW0gaHJ0aW1lcl9yZXN0YXJ0IHhmcm1fdGltZXJfaGFuZGxlcihzdHJ1Y3QgaHJ0aW1lciAqbWUpXG5AQCAtODIzLDkgKzgyNiw5IEBAIGludCBfX3hmcm1fc3RhdGVfZGVsZXRlKHN0cnVjdCB4ZnJtX3N0YXRlICp4KVxuIFx0XHRpZiAoIWhsaXN0X3VuaGFzaGVkKFx1MDAyNngtXHUwMDNlYnlzZXEpKVxuIFx0XHRcdGhsaXN0X2RlbF9pbml0X3JjdShcdTAwMjZ4LVx1MDAzZWJ5c2VxKTtcbiBcdFx0aWYgKCFobGlzdF91bmhhc2hlZChcdTAwMjZ4LVx1MDAzZXN0YXRlX2NhY2hlKSlcbi1cdFx0XHRobGlzdF9kZWxfcmN1KFx1MDAyNngtXHUwMDNlc3RhdGVfY2FjaGUpO1xuK1x0XHRcdGhsaXN0X2RlbF9pbml0X3JjdShcdTAwMjZ4LVx1MDAzZXN0YXRlX2NhY2hlKTtcbiBcdFx0aWYgKCFobGlzdF91bmhhc2hlZChcdTAwMjZ4LVx1MDAzZXN0YXRlX2NhY2hlX2lucHV0KSlcbi1cdFx0XHRobGlzdF9kZWxfcmN1KFx1MDAyNngtXHUwMDNlc3RhdGVfY2FjaGVfaW5wdXQpO1xuK1x0XHRcdGhsaXN0X2RlbF9pbml0X3JjdShcdTAwMjZ4LVx1MDAzZXN0YXRlX2NhY2hlX2lucHV0KTtcbiBcbiBcdFx0aWYgKCFobGlzdF91bmhhc2hlZChcdTAwMjZ4LVx1MDAzZWJ5c3BpKSlcbiBcdFx0XHRobGlzdF9kZWxfaW5pdF9yY3UoXHUwMDI2eC1cdTAwM2VieXNwaSk7XG5AQCAtMTAwMCw2ICsxMDAzLDcgQEAgaW50IHhmcm1fZGV2X3N0YXRlX2ZsdXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCB0YXNrX3ZhbGlcbiBvdXQ6XG4gXHRzcGluX3VubG9ja19iaChcdTAwMjZuZXQtXHUwMDNleGZybS54ZnJtX3N0YXRlX2xvY2spO1xuIFxuK1x0bXV0ZXhfbG9jayhcdTAwMjZ4ZnJtX3N0YXRlX2djX211dGV4KTtcbiBcdHNwaW5fbG9ja19iaChcdTAwMjZ4ZnJtX3N0YXRlX2Rldl9nY19sb2NrKTtcbiByZXN0YXJ0X2djOlxuIFx0aGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh4LCB0bXAsIFx1MDAyNnhmcm1fc3RhdGVfZGV2X2djX2xpc3QsIGRldl9nY2xpc3QpIHtcbkBAIC0xMDE0LDYgKzEwMTgsNyBAQCBpbnQgeGZybV9kZXZfc3RhdGVfZmx1c2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIHRhc2tfdmFsaVxuIFxuIFx0fVxuIFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2eGZybV9zdGF0ZV9kZXZfZ2NfbG9jayk7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2eGZybV9zdGF0ZV9nY19tdXRleCk7XG4gXG4gXHR4ZnJtX2ZsdXNoX2djKCk7XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV91c2VyLmMgYi9uZXQveGZybS94ZnJtX3VzZXIuY1xuaW5kZXggNjI2NmE5MmNmMzAyMC4uYTI1ODdjN2U3OTZiNCAxMDA2NDRcbi0tLSBhL25ldC94ZnJtL3hmcm1fdXNlci5jXG4rKysgYi9uZXQveGZybS94ZnJtX3VzZXIuY1xuQEAgLTE4NzcsNyArMTg3Nyw2IEBAIHN0YXRpYyBpbnQgeGZybV9hbGxvY191c2Vyc3BpKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuIFx0c3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2tiLVx1MDAzZXNrKTtcbiBcdHN0cnVjdCB4ZnJtX3N0YXRlICp4O1xuIFx0c3RydWN0IHhmcm1fdXNlcnNwaV9pbmZvICpwO1xuLVx0c3RydWN0IHhmcm1fdHJhbnNsYXRvciAqeHRyO1xuIFx0c3RydWN0IHNrX2J1ZmYgKnJlc3Bfc2tiO1xuIFx0eGZybV9hZGRyZXNzX3QgKmRhZGRyO1xuIFx0aW50IGZhbWlseTtcbkBAIC0xOTQzLDE3ICsxOTQyLDYgQEAgc3RhdGljIGludCB4ZnJtX2FsbG9jX3VzZXJzcGkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuLVx0eHRyID0geGZybV9nZXRfdHJhbnNsYXRvcigpO1xuLVx0aWYgKHh0cikge1xuLVx0XHRlcnIgPSB4dHItXHUwMDNlYWxsb2NfY29tcGF0KHNrYiwgbmxtc2dfaGRyKHNrYikpO1xuLVxuLVx0XHR4ZnJtX3B1dF90cmFuc2xhdG9yKHh0cik7XG4tXHRcdGlmIChlcnIpIHtcbi1cdFx0XHRrZnJlZV9za2IocmVzcF9za2IpO1xuLVx0XHRcdGdvdG8gb3V0O1xuLVx0XHR9XG4tXHR9XG4tXG4gXHRlcnIgPSBubG1zZ191bmljYXN0KHhmcm1fbmV0X25sc2sobmV0LCBza2IpLCByZXNwX3NrYiwgTkVUTElOS19DQihza2IpLnBvcnRpZCk7XG4gXG4gb3V0OlxuQEAgLTMzMzcsNyArMzMyNSwxMSBAQCBzdGF0aWMgaW50IHhmcm1fc2VuZF9taWdyYXRlX3N0YXRlKHN0cnVjdCBuZXQgKm5ldCxcbiBcdFx0cmV0dXJuIGVycjtcbiBcdH1cbiBcbi1cdHJldHVybiB4ZnJtX25sbXNnX211bHRpY2FzdChuZXQsIHNrYiwgMCwgWEZSTU5MR1JQX01JR1JBVEUpO1xuK1x0cmN1X3JlYWRfbG9jaygpO1xuK1x0ZXJyID0geGZybV9ubG1zZ19tdWx0aWNhc3QobmV0LCBza2IsIDAsIFhGUk1OTEdSUF9NSUdSQVRFKTtcbitcdHJjdV9yZWFkX3VubG9jaygpO1xuK1xuK1x0cmV0dXJuIGVycjtcbiB9XG4gXG4gc3RhdGljIGludCB4ZnJtX2RvX21pZ3JhdGVfc3RhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxMzo1Mzo1NC4zNjY5ODk5MjRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MTQ2MjUxMTMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2ggU2VyaWVzKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggc2VyaWVzLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCB3ZSdyZSBkZWFsaW5nIHdpdGggc29tZXRoaW5nIHNpZ25pZmljYW50LCBnaXZlbiB0aGUgYnJlYWR0aCBvZiBmaWxlcyBtb2RpZmllZC4gTG9va2luZyBhdCB0aGUgZmlsZSBsaXN0IOKAkyBgbmV0L2lwdjQvZXNwNC5jYCwgYG5ldC9pcHY2L2VzcDYuY2AsIGBuZXQvaXB2Ni94ZnJtNl9vdXRwdXQuY2AsIGBuZXQveGZybS9lc3BpbnRjcC5jYCwgYG5ldC94ZnJtL3hmcm1faW5wdXQuY2AsIGBuZXQveGZybS94ZnJtX2lwdGZzLmNgLCBgbmV0L3hmcm0veGZybV9wb2xpY3kuY2AsIGBuZXQveGZybS94ZnJtX3N0YXRlLmNgLCBhbmQgYG5ldC94ZnJtL3hmcm1fdXNlci5jYCDigJMgdGhpcyBpcyB0b3VjaGluZyB0aGUgaGVhcnQgb2YgdGhlIG5ldHdvcmtpbmcgc3RhY2ssIHNwZWNpZmljYWxseSBJUHNlYyBhbmQgdGhlIFhGUk0gc3Vic3lzdGVtLiBUaGVzZSBhcmUgYWxsIGNyaXRpY2FsIGFyZWFzLlxuXG5HaXZlbiB0aGlzIHNjb3BlLCB0aGUgcG90ZW50aWFsIGF0dGFjayBzdXJmYWNlIGlzIGxhcmdlLiBXZSdyZSB0YWxraW5nIGNvcmUgbmV0d29ya2luZyBmdW5jdGlvbmFsaXR5LCBmdWxseSBleHBvc2VkIHRocm91Z2ggc3RhbmRhcmQgbmV0d29yayBzb2NrZXRzLCBuZXRsaW5rIGludGVyZmFjZXMgbGlrZSBYRlJNIG5ldGxpbmsgYW5kIFBGX0tFWSwgdmFyaW91cyB2aXJ0dWFsIG5ldHdvcmsgZGV2aWNlcywgdHVuL3RhcCBpbnRlcmZhY2VzLCBhbmQgZXZlbiBsb29wYmFjay4gVGhpcyBzY3JlYW1zIFwiV29ydGhGdXp6aW5nPXRydWVcIi4gVGhlIGV4cG9zdXJlIGlzIGhpZ2gsIGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGEgdnVsbmVyYWJpbGl0eSBoZXJlIGNvdWxkIGJlIHdpZGVzcHJlYWQuXG5cbk5vdywgbXkgbmV4dCBzdGVwIGlzIHRvIGRyaWxsIGRvd24gaW50byB0aGUgc3BlY2lmaWMgZnVuY3Rpb25zIGJlaW5nIG1vZGlmaWVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgS2NvbmZpZyBkZXBlbmRlbmNpZXMgdG8gaWRlbnRpZnkgZXhhY3RseSB3aGF0IGNvbmZpZ3VyYXRpb25zIHdvdWxkIGVuYWJsZSB0aGlzIGNvZGUgYW5kIGlkZW50aWZ5IHRoZSBsaWtlbHkgZm9jdXMgc3ltYm9scy4gSSB0aGluayBgZ3JlcHBlcmAgaXMgdGhlIHBlcmZlY3QgdG9vbCBmb3IgdGhpcywgb3IgSSdsbCBqdXN0IG1hbnVhbGx5IGV4YW1pbmUgdGhlIGZpbGVzIGZvciB0aGUgcmVsZXZhbnQgS2NvbmZpZyBvcHRpb25zIGFuZCBkZXRlcm1pbmUgdGhlIG1vc3QgYXBwcm9wcmlhdGUgRm9jdXNTeW1ib2xzIHRvIHRhcmdldC4gVGhpcyBpcyB3aGVyZSB0aGUgcmVhbCB3b3JrIGJlZ2lucy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODI2NSwiT3V0cHV0VG9rZW5zIjo2OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3MiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDEzOjUzOjU4LjUxMzI0Mzk5NVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzg3NDkzNzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElORVRfRVNQfGNvbmZpZyBYRlJNfGNvbmZpZyBJTkVUNl9FU1B8Y29uZmlnIE5FVF9LRVl8Y29uZmlnIFhGUk1fVVNFUnxjb25maWcgWEZSTV9JUFRGU3xjb25maWcgWEZSTV9FU1BJTlRDUFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L0tjb25maWc9MzM5PWNvbmZpZyBJTkVUX0FIXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTM1My1cXG5uZXQvaXB2NC9LY29uZmlnOjM1NDpjb25maWcgSU5FVF9FU1BcXG5uZXQvaXB2NC9LY29uZmlnLTM1NS1cXHR0cmlzdGF0ZSBcXFwiSVA6IEVTUCB0cmFuc2Zvcm1hdGlvblxcXCJcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctMzY4LVxcbm5ldC9pcHY0L0tjb25maWc6MzY5OmNvbmZpZyBJTkVUX0VTUF9PRkZMT0FEXFxubmV0L2lwdjQvS2NvbmZpZy0zNzAtXFx0dHJpc3RhdGUgXFxcIklQOiBFU1AgdHJhbnNmb3JtYXRpb24gb2ZmbG9hZFxcXCJcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctMzgxLVxcbm5ldC9pcHY0L0tjb25maWc6MzgyOmNvbmZpZyBJTkVUX0VTUElOVENQXFxubmV0L2lwdjQvS2NvbmZpZy0zODMtXFx0Ym9vbCBcXFwiSVA6IEVTUCBpbiBUQ1AgZW5jYXBzdWxhdGlvbiAoUkZDIDgyMjkpXFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZz00Nz1jb25maWcgSU5FVDZfQUhcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctNjEtXFxubmV0L2lwdjYvS2NvbmZpZzo2Mjpjb25maWcgSU5FVDZfRVNQXFxubmV0L2lwdjYvS2NvbmZpZy02My1cXHR0cmlzdGF0ZSBcXFwiSVB2NjogRVNQIHRyYW5zZm9ybWF0aW9uXFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy03Ni1cXG5uZXQvaXB2Ni9LY29uZmlnOjc3OmNvbmZpZyBJTkVUNl9FU1BfT0ZGTE9BRFxcbm5ldC9pcHY2L0tjb25maWctNzgtXFx0dHJpc3RhdGUgXFxcIklQdjY6IEVTUCB0cmFuc2Zvcm1hdGlvbiBvZmZsb2FkXFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy04OS1cXG5uZXQvaXB2Ni9LY29uZmlnOjkwOmNvbmZpZyBJTkVUNl9FU1BJTlRDUFxcbm5ldC9pcHY2L0tjb25maWctOTEtXFx0Ym9vbCBcXFwiSVB2NjogRVNQIGluIFRDUCBlbmNhcHN1bGF0aW9uIChSRkMgODIyOSlcXFwiXFxuLS1cXG5uZXQveGZybS9LY29uZmlnLTQtI1xcbm5ldC94ZnJtL0tjb25maWc6NTpjb25maWcgWEZSTVxcbm5ldC94ZnJtL0tjb25maWctNi1cXHRib29sXFxuLS1cXG5uZXQveGZybS9LY29uZmlnLTEwLVxcbm5ldC94ZnJtL0tjb25maWc6MTE6Y29uZmlnIFhGUk1fT0ZGTE9BRFxcbm5ldC94ZnJtL0tjb25maWctMTItXFx0Ym9vbFxcbm5ldC94ZnJtL0tjb25maWctMTMtXFxubmV0L3hmcm0vS2NvbmZpZzoxNDpjb25maWcgWEZSTV9BTEdPXFxubmV0L3hmcm0vS2NvbmZpZy0xNS1cXHR0cmlzdGF0ZVxcbi0tXFxubmV0L3hmcm0vS2NvbmZpZz0yMj1pZiBJTkVUXFxubmV0L3hmcm0vS2NvbmZpZzoyMzpjb25maWcgWEZSTV9VU0VSXFxubmV0L3hmcm0vS2NvbmZpZy0yNC1cXHR0cmlzdGF0ZSBcXFwiVHJhbnNmb3JtYXRpb24gdXNlciBjb25maWd1cmF0aW9uIGludGVyZmFjZVxcXCJcXG4tLVxcbm5ldC94ZnJtL0tjb25maWctMzEtXFxubmV0L3hmcm0vS2NvbmZpZzozMjpjb25maWcgWEZSTV9VU0VSX0NPTVBBVFxcbm5ldC94ZnJtL0tjb25maWctMzMtXFx0dHJpc3RhdGUgXFxcIkNvbXBhdGlibGUgQUJJIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQveGZybS9LY29uZmlnLTQyLVxcbm5ldC94ZnJtL0tjb25maWc6NDM6Y29uZmlnIFhGUk1fSU5URVJGQUNFXFxubmV0L3hmcm0vS2NvbmZpZy00NC1cXHR0cmlzdGF0ZSBcXFwiVHJhbnNmb3JtYXRpb24gdmlydHVhbCBpbnRlcmZhY2VcXFwiXFxuLS1cXG5uZXQveGZybS9LY29uZmlnLTUwLVxcbm5ldC94ZnJtL0tjb25maWc6NTE6Y29uZmlnIFhGUk1fU1VCX1BPTElDWVxcbm5ldC94ZnJtL0tjb25maWctNTItXFx0Ym9vbCBcXFwiVHJhbnNmb3JtYXRpb24gc3ViIHBvbGljeSBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L3hmcm0vS2NvbmZpZy02MC1cXG5uZXQveGZybS9LY29uZmlnOjYxOmNvbmZpZyBYRlJNX01JR1JBVEVcXG5uZXQveGZybS9LY29uZmlnLTYyLVxcdGJvb2wgXFxcIlRyYW5zZm9ybWF0aW9uIG1pZ3JhdGUgZGF0YWJhc2VcXFwiXFxuLS1cXG5uZXQveGZybS9LY29uZmlnLTcxLVxcbm5ldC94ZnJtL0tjb25maWc6NzI6Y29uZmlnIFhGUk1fU1RBVElTVElDU1xcbm5ldC94ZnJtL0tjb25maWctNzMtXFx0Ym9vbCBcXFwiVHJhbnNmb3JtYXRpb24gc3RhdGlzdGljc1xcXCJcXG4tLVxcbm5ldC94ZnJtL0tjb25maWctODMtIyBSRkMgODIyMSBsaXN0cyBhcyBNVVNUIGJlIGltcGxlbWVudGVkLlxcbm5ldC94ZnJtL0tjb25maWc6ODQ6Y29uZmlnIFhGUk1fQUhcXG5uZXQveGZybS9LY29uZmlnLTg1LVxcdHRyaXN0YXRlXFxuLS1cXG5uZXQveGZybS9LY29uZmlnLTkyLSMgYWxnb3JpdGhtcyB0aGF0IFJGQyA4MjIxIGxpc3RzIGFzIE1VU1QgYmUgaW1wbGVtZW50ZWQuXFxubmV0L3hmcm0vS2NvbmZpZzo5Mzpjb25maWcgWEZSTV9FU1BcXG5uZXQveGZybS9LY29uZmlnLTk0LVxcdHRyaXN0YXRlXFxuLS1cXG5uZXQveGZybS9LY29uZmlnLTEwNS1cXG5uZXQveGZybS9LY29uZmlnOjEwNjpjb25maWcgWEZSTV9JUENPTVBcXG5uZXQveGZybS9LY29uZmlnLTEwNy1cXHR0cmlzdGF0ZVxcbi0tXFxubmV0L3hmcm0vS2NvbmZpZy0xMTEtXFxubmV0L3hmcm0vS2NvbmZpZzoxMTI6Y29uZmlnIE5FVF9LRVlcXG5uZXQveGZybS9LY29uZmlnLTExMy1cXHR0cmlzdGF0ZSBcXFwiUEZfS0VZIHNvY2tldHMgKGRlcHJlY2F0ZWQpXFxcIlxcbi0tXFxubmV0L3hmcm0vS2NvbmZpZy0xMjQtXFxubmV0L3hmcm0vS2NvbmZpZzoxMjU6Y29uZmlnIE5FVF9LRVlfTUlHUkFURVxcbm5ldC94ZnJtL0tjb25maWctMTI2LVxcdGJvb2wgXFxcIlBGX0tFWSBNSUdSQVRFXFxcIlxcbi0tXFxubmV0L3hmcm0vS2NvbmZpZy0xNDAtXFxubmV0L3hmcm0vS2NvbmZpZzoxNDE6Y29uZmlnIFhGUk1fSVBURlNcXG5uZXQveGZybS9LY29uZmlnLTE0Mi1cXHR0cmlzdGF0ZSBcXFwiSVBzZWMgSVAtVEZTL0FHR0ZSQUcgKFJGQyA5MzQ3KSBlbmNhcHN1bGF0aW9uIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQveGZybS9LY29uZmlnLTE1Ni1cXG5uZXQveGZybS9LY29uZmlnOjE1Nzpjb25maWcgWEZSTV9FU1BJTlRDUFxcbm5ldC94ZnJtL0tjb25maWctMTU4LVxcdGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTM6NTM6NTguNjUxOTk5MTEyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQxMDQ0MjYzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBDb21waWxhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5SaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBtb2RpZmllZCBmaWxlcyBhcmUgYWN0dWFsbHkgYmVpbmcgaW50ZWdyYXRlZCBpbnRvIHRoZSBidWlsZCBwcm9jZXNzLiBUaGUgbW9zdCBsaWtlbHkgc3BvdHMgdG8gZmluZCB0aGF0IGluZm9ybWF0aW9uLCBvZiBjb3Vyc2UsIGFyZSB0aGUgTWFrZWZpbGVzLiBTcGVjaWZpY2FsbHksIHNpbmNlIHdlJ3JlIGRlYWxpbmcgd2l0aCBuZXR3b3JrIHN0YWNrIGNvZGUsIEknbGwgc3RhcnQgd2l0aCB0aGUgb2J2aW91cyBzdXNwZWN0czogYG5ldC9pcHY0YCwgYG5ldC9pcHY2YCwgYW5kIGBuZXQveGZybWAuIFRoZXNlIGFyZSB0aGUgY29yZSBzdWJkaXJlY3RvcmllcyBoYW5kbGluZyBJUHY0LCBJUHY2LCBhbmQgdGhlIFhGUk0gZnJhbWV3b3JrIHJlc3BlY3RpdmVseSwgc28gdGhlIGNvbXBpbGF0aW9uIHJ1bGVzIGZvciBmaWxlcyB3aXRoaW4gdGhvc2UgYXJlYXMgYXJlIHByb2JhYmx5IGRlZmluZWQgdGhlcmUuIEEgcXVpY2sgc2NhbiBvZiB0aG9zZSBNYWtlZmlsZXMgc2hvdWxkIHJldmVhbCBleGFjdGx5IGhvdyB0aGVzZSBtb2RpZmllZCBmaWxlcyBhcmUgYmVpbmcgY29tcGlsZWQsIGxpbmtlZCwgYW5kIGFueSBkZXBlbmRlbmNpZXMgdGhleSBtaWdodCBoYXZlIG9uIG90aGVyIG1vZHVsZXMgb3IgbGlicmFyaWVzLiBUaGF0J3MgdGhlIGZpcnN0IGFuZCBtb3N0IGNydWNpYWwgc3RlcCB0byBlbnN1cmUgdGhlIGNoYW5nZXMgYXJlIGNvcnJlY3RseSBpbnRlZ3JhdGVkIGFuZCBkb24ndCBpbnRyb2R1Y2UgYW55IGJ1aWxkLXRpbWUgaXNzdWVzLiBVbmRlcnN0YW5kaW5nIHRoZSBleGlzdGluZyBidWlsZCBzeXN0ZW0gaXMga2V5IHRvIG1ha2luZyBzdXJlIG15IGNoYW5nZXMgZml0IHNlYW1sZXNzbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMjQ3LCJPdXRwdXRUb2tlbnMiOjgxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTM6NTQ6MDEuMDYyNDQ1NjczWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkwNzQ1OTc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImVzcDRcXFxcLm98ZXNwNlxcXFwub3x4ZnJtNl9vdXRwdXRcXFxcLm98ZXNwaW50Y3BcXFxcLm98eGZybV9pbnB1dFxcXFwub3x4ZnJtX2lwdGZzXFxcXC5vfHhmcm1fcG9saWN5XFxcXC5vfHhmcm1fc3RhdGVcXFxcLm98eGZybV91c2VyXFxcXC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvTWFrZWZpbGU9MzU9b2JqLSQoQ09ORklHX0lORVRfQUgpICs9IGFoNC5vXFxubmV0L2lwdjQvTWFrZWZpbGU6MzY6b2JqLSQoQ09ORklHX0lORVRfRVNQKSArPSBlc3A0Lm9cXG5uZXQvaXB2NC9NYWtlZmlsZS0zNy1vYmotJChDT05GSUdfSU5FVF9FU1BfT0ZGTE9BRCkgKz0gZXNwNF9vZmZsb2FkLm9cXG4tLVxcbm5ldC9pcHY2L01ha2VmaWxlPTE4PWlwdjYtJChDT05GSUdfWEZSTSkgKz0geGZybTZfcG9saWN5Lm8geGZybTZfc3RhdGUubyB4ZnJtNl9pbnB1dC5vIFxcXFxcXG5uZXQvaXB2Ni9NYWtlZmlsZToxOTpcXHR4ZnJtNl9vdXRwdXQubyB4ZnJtNl9wcm90b2NvbC5vXFxubmV0L2lwdjYvTWFrZWZpbGUtMjAtaXB2Ni0kKENPTkZJR19ORVRGSUxURVIpICs9IG5ldGZpbHRlci5vXFxuLS1cXG5uZXQvaXB2Ni9NYWtlZmlsZT0zMD1vYmotJChDT05GSUdfSU5FVDZfQUgpICs9IGFoNi5vXFxubmV0L2lwdjYvTWFrZWZpbGU6MzE6b2JqLSQoQ09ORklHX0lORVQ2X0VTUCkgKz0gZXNwNi5vXFxubmV0L2lwdjYvTWFrZWZpbGUtMzItb2JqLSQoQ09ORklHX0lORVQ2X0VTUF9PRkZMT0FEKSArPSBlc3A2X29mZmxvYWQub1xcbi0tXFxubmV0L3hmcm0vTWFrZWZpbGU9MTI9ZW5kaWZcXG5uZXQveGZybS9NYWtlZmlsZS0xMy1cXG5uZXQveGZybS9NYWtlZmlsZToxNDpvYmotJChDT05GSUdfWEZSTSkgOj0geGZybV9wb2xpY3kubyB4ZnJtX3N0YXRlLm8geGZybV9oYXNoLm8gXFxcXFxcbm5ldC94ZnJtL01ha2VmaWxlOjE1OlxcdFxcdCAgICAgIHhmcm1faW5wdXQubyB4ZnJtX291dHB1dC5vIFxcXFxcXG5uZXQveGZybS9NYWtlZmlsZS0xNi1cXHRcXHQgICAgICB4ZnJtX3N5c2N0bC5vIHhmcm1fcmVwbGF5Lm8geGZybV9kZXZpY2UubyBcXFxcXFxuLS1cXG5uZXQveGZybS9NYWtlZmlsZT0xOT1vYmotJChDT05GSUdfWEZSTV9BTEdPKSArPSB4ZnJtX2FsZ28ub1xcbm5ldC94ZnJtL01ha2VmaWxlOjIwOm9iai0kKENPTkZJR19YRlJNX1VTRVIpICs9IHhmcm1fdXNlci5vXFxubmV0L3hmcm0vTWFrZWZpbGUtMjEtb2JqLSQoQ09ORklHX1hGUk1fVVNFUl9DT01QQVQpICs9IHhmcm1fY29tcGF0Lm9cXG4tLVxcbm5ldC94ZnJtL01ha2VmaWxlPTIzPW9iai0kKENPTkZJR19YRlJNX0lOVEVSRkFDRSkgKz0geGZybV9pbnRlcmZhY2Uub1xcbm5ldC94ZnJtL01ha2VmaWxlOjI0Om9iai0kKENPTkZJR19YRlJNX0lQVEZTKSArPSB4ZnJtX2lwdGZzLm9cXG5uZXQveGZybS9NYWtlZmlsZToyNTpvYmotJChDT05GSUdfWEZSTV9FU1BJTlRDUCkgKz0gZXNwaW50Y3Aub1xcbm5ldC94ZnJtL01ha2VmaWxlLTI2LW9iai0kKENPTkZJR19ERUJVR19JTkZPX0JURikgKz0geGZybV9zdGF0ZV9icGYub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxMzo1NDowMS4xNTMxOTcxODlaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDM2MTE2MDg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRoaW5nczpcblxuKipEaWdnaW5nIGludG8gdGhlIFhGUk0gQ29kZSoqXG5cbk9rYXksIHNvIEknbSByZXZpc2l0aW5nIHRoaXMgWEZSTSBjb2RlIGFnYWluLiBMZXQncyBtYWtlIHN1cmUgd2UncmUgbm90IG1pc3NpbmcgYW55dGhpbmcgcmVsYXRlZCB0byBtaWdyYXRpb24uIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhlIGBYRlJNX01JR1JBVEVgIG9wdGlvbiwgYW5kIHRoYXQgbWVhbnMgSSBuZWVkIHRvIGxvb2sgY2xvc2VseSBhdCBgeGZybV9zZW5kX21pZ3JhdGVfc3RhdGVgIGluIGB4ZnJtX3VzZXIuY2AuIEdvdHRhIG1ha2Ugc3VyZSB0aGUgbWlncmF0aW9uIHN0YXRlIGhhbmRsaW5nIGlzIHNvbGlkLCBlc3BlY2lhbGx5IHdpdGggYWxsIHRoZSBudWFuY2VzIHdlJ3ZlIHNlZW4gaW4gdGhlIHBhc3QuIEFuZCBJIGNhbid0IGZvcmdldCBhYm91dCBFU1AgaW4gVENQIG1vZGUuLi4gSSBzaG91bGQgcmV2aWV3IGBYRlJNX0VTUElOVENQYCBhbmQgdGhlIHJlbGV2YW50IGBzZWxlY3RzYCBzdGF0ZW1lbnRzIGluIHRoZSBLY29uZmlnIGZpbGUuIEdvdHRhIGJlIGRpbGlnZW50IGFib3V0IGRlcGVuZGVuY2llcyBhbmQgZW5zdXJlIGFsbCB0aGUgcmlnaHQgY29tcG9uZW50cyBhcmUgZW5hYmxlZCBvciBkaXNhYmxlZCBjb3JyZWN0bHkuIEdvdHRhIG1ha2Ugc3VyZSBub3RoaW5nIGJyZWFrcyBkdXJpbmcgYSByZS1jb21waWxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTIwMywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDEzOjU0OjAzLjU4OTMxNTQ3NVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozOTEzODY1MjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiSU5FVF9FU1BJTlRDUHxJTkVUNl9FU1BJTlRDUFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L0tjb25maWc9MzY5PWNvbmZpZyBJTkVUX0VTUF9PRkZMT0FEXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTM4MS1cXG5uZXQvaXB2NC9LY29uZmlnOjM4Mjpjb25maWcgSU5FVF9FU1BJTlRDUFxcbm5ldC9pcHY0L0tjb25maWctMzgzLVxcdGJvb2wgXFxcIklQOiBFU1AgaW4gVENQIGVuY2Fwc3VsYXRpb24gKFJGQyA4MjI5KVxcXCJcXG4tLVxcbm5ldC9pcHY0L2VzcDQuYz05OT1zdGF0aWMgdm9pZCBlc3Bfc3NnX3VucmVmKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCB2b2lkICp0bXAsIHN0cnVjdCBza19idWZmICpza2IsIGJvb2wgYWxyZWFkeV91bnJlZilcXG4tLVxcbm5ldC9pcHY0L2VzcDQuYy0xMjQtXFxubmV0L2lwdjQvZXNwNC5jOjEyNTojaWZkZWYgQ09ORklHX0lORVRfRVNQSU5UQ1BcXG5uZXQvaXB2NC9lc3A0LmMtMTI2LXN0YXRpYyBzdHJ1Y3Qgc29jayAqZXNwX2ZpbmRfdGNwX3NrKHN0cnVjdCB4ZnJtX3N0YXRlICp4KVxcbi0tXFxubmV0L2lwdjQvZXNwNC5jPTMwOT1zdGF0aWMgc3RydWN0IGlwX2VzcF9oZHIgKmVzcF9vdXRwdXRfdWRwX2VuY2FwKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2NC9lc3A0LmMtMzM4LVxcbm5ldC9pcHY0L2VzcDQuYzozMzk6I2lmZGVmIENPTkZJR19JTkVUX0VTUElOVENQXFxubmV0L2lwdjQvZXNwNC5jLTM0MC1zdGF0aWMgc3RydWN0IGlwX2VzcF9oZHIgKmVzcF9vdXRwdXRfdGNwX2VuY2FwKHN0cnVjdCB4ZnJtX3N0YXRlICp4LFxcbi0tXFxubmV0L2lwdjQvZXNwNC5jPTExMTg9c3RhdGljIGludCBlc3BfaW5pdF9zdGF0ZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxubmV0L2lwdjQvZXNwNC5jLTExNTYtXFx0XFx0XFx0YnJlYWs7XFxubmV0L2lwdjQvZXNwNC5jOjExNTc6I2lmZGVmIENPTkZJR19JTkVUX0VTUElOVENQXFxubmV0L2lwdjQvZXNwNC5jLTExNTgtXFx0XFx0Y2FzZSBUQ1BfRU5DQVBfRVNQSU5UQ1A6XFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnPTc3PWNvbmZpZyBJTkVUNl9FU1BfT0ZGTE9BRFxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy04OS1cXG5uZXQvaXB2Ni9LY29uZmlnOjkwOmNvbmZpZyBJTkVUNl9FU1BJTlRDUFxcbm5ldC9pcHY2L0tjb25maWctOTEtXFx0Ym9vbCBcXFwiSVB2NjogRVNQIGluIFRDUCBlbmNhcHN1bGF0aW9uIChSRkMgODIyOSlcXFwiXFxuLS1cXG5uZXQvaXB2Ni9lc3A2LmM9MTE2PXN0YXRpYyB2b2lkIGVzcF9zc2dfdW5yZWYoc3RydWN0IHhmcm1fc3RhdGUgKngsIHZvaWQgKnRtcCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgYm9vbCBhbHJlYWR5X3VucmVmKVxcbi0tXFxubmV0L2lwdjYvZXNwNi5jLTE0MS1cXG5uZXQvaXB2Ni9lc3A2LmM6MTQyOiNpZmRlZiBDT05GSUdfSU5FVDZfRVNQSU5UQ1BcXG5uZXQvaXB2Ni9lc3A2LmMtMTQzLXN0YXRpYyBzdHJ1Y3Qgc29jayAqZXNwNl9maW5kX3RjcF9zayhzdHJ1Y3QgeGZybV9zdGF0ZSAqeClcXG4tLVxcbm5ldC9pcHY2L2VzcDYuYz0zNDY9c3RhdGljIHN0cnVjdCBpcF9lc3BfaGRyICplc3A2X291dHB1dF91ZHBfZW5jYXAoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9pcHY2L2VzcDYuYy0zNjktXFxubmV0L2lwdjYvZXNwNi5jOjM3MDojaWZkZWYgQ09ORklHX0lORVQ2X0VTUElOVENQXFxubmV0L2lwdjYvZXNwNi5jLTM3MS1zdGF0aWMgc3RydWN0IGlwX2VzcF9oZHIgKmVzcDZfb3V0cHV0X3RjcF9lbmNhcChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCxcXG4tLVxcbm5ldC9pcHY2L2VzcDYuYz0xMTU2PXN0YXRpYyBpbnQgZXNwNl9pbml0X3N0YXRlKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuLS1cXG5uZXQvaXB2Ni9lc3A2LmMtMTIwNC1cXHRcXHRcXHRicmVhaztcXG5uZXQvaXB2Ni9lc3A2LmM6MTIwNTojaWZkZWYgQ09ORklHX0lORVQ2X0VTUElOVENQXFxubmV0L2lwdjYvZXNwNi5jLTEyMDYtXFx0XFx0Y2FzZSBUQ1BfRU5DQVBfRVNQSU5UQ1A6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDEzOjU0OjAzLjk4MDcwNjEyMloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0MzI4MzA1NDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIEtjb25maWcgZGVmaW5pdGlvbnM6XG5cbioqQW5hbHl6aW5nIEVTUCBpbiBUQ1AgS2NvbmZpZyBPcHRpb25zKipcblxuT2theSwgdGltZSB0byBkaXZlIGludG8gdGhlIEtjb25maWcgb3B0aW9ucyByZWxhdGVkIHRvIEVTUCBvdmVyIFRDUC4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHRoZXNlIGFyZSBkZWZpbmVkIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgaG93IHRoZXkgaW50ZXJyZWxhdGUuIEknbSBmb2N1c2luZyBvbiBgSU5FVF9FU1BJTlRDUGAsIGBJTkVUNl9FU1BJTlRDUGAsIGFuZCBgWEZSTV9FU1BJTlRDUGAuIEknbSBpbW1lZGlhdGVseSB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zIGZvciBJUHY0IHZzLiBJUHY2IHN1cHBvcnQsIGhlbmNlIG15IGludGVyZXN0IGluIHRoZSBgSU5FVGAgcHJlZml4ZXMsIHdoaWNoIGluZGljYXRlIHRoaXMuIFRoZSBgWEZSTWAgcHJlZml4IHRlbGxzIG1lIHRoaXMgb3B0aW9uIGlzIHJlbGF0ZWQgdG8gdGhlIFhGUk0gZnJhbWV3b3JrIGFuZCBob3cgaXQgaW50ZXJmYWNlcyB3aXRoIEVTUC1vdmVyLVRDUCBpbXBsZW1lbnRhdGlvbnMuIEkgd2FudCB0byBzZWUgaG93IHRoZSBidWlsZCBzeXN0ZW0gaW50ZWdyYXRlcyBvciBjb25kaXRpb25hbGl6ZXMgYmFzZWQgb24gdGhlc2Ugb3B0aW9ucy4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMgYW5kIHNlbGVjdCBzdGF0ZW1lbnRzIHRvIHNlZSB0aGUgaW1wbGljYXRpb25zIG9mIGVhY2ggb3B0aW9uIGJlaW5nIGVuYWJsZWQgb3IgZGlzYWJsZWQuIEl0IHdpbGwgYmUgaGVscGZ1bCB0byBpZGVudGlmeSBhbnkgZGlmZmVyZW5jZXMgb3Igc2ltaWxhcml0aWVzIGluIHRoZSBpbXBsZW1lbnRhdGlvbnMgYmFzZWQgb24gd2hldGhlciBvciBub3QgSVB2NCBvciBJUHY2IGlzIHNlbGVjdGVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGV0aGVyIHRoZXNlIG9wdGlvbnMgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSwgb3IgaWYgaXQgaXMgcG9zc2libGUgdG8gY29uZmlndXJlLCBzYXksIGBJTkVUX0VTUElOVENQYCB3aXRoIGBJTkVUNl9FU1BJTlRDUGAgb3IgYFhGUk1fRVNQSU5UQ1BgLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBwb3NzaWJsZSBidWlsZCBjb25maWd1cmF0aW9ucyBhbmQgd2hldGhlciB0aGUgb3B0aW9ucyBhcmUgaW50ZW5kZWQgZm9yIHNwZWNpZmljIHVzZSBjYXNlcyBvciBhcmNoaXRlY3R1cmVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjQxMCwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDEzOjU0OjA2LjQxMzUzODY5OVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njk1OTQ3MTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiSU5FVF9FU1BJTlRDUHxJTkVUNl9FU1BJTlRDUHxYRlJNX0VTUElOVENQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvS2NvbmZpZz0zNjk9Y29uZmlnIElORVRfRVNQX09GRkxPQURcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctMzgxLVxcbm5ldC9pcHY0L0tjb25maWc6MzgyOmNvbmZpZyBJTkVUX0VTUElOVENQXFxubmV0L2lwdjQvS2NvbmZpZy0zODMtXFx0Ym9vbCBcXFwiSVA6IEVTUCBpbiBUQ1AgZW5jYXBzdWxhdGlvbiAoUkZDIDgyMjkpXFxcIlxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy0zODYtXFx0c2VsZWN0IE5FVF9TT0NLX01TR1xcbm5ldC9pcHY0L0tjb25maWc6Mzg3OlxcdHNlbGVjdCBYRlJNX0VTUElOVENQXFxubmV0L2lwdjQvS2NvbmZpZy0zODgtXFx0aGVscFxcbi0tXFxubmV0L2lwdjQvZXNwNC5jPTk5PXN0YXRpYyB2b2lkIGVzcF9zc2dfdW5yZWYoc3RydWN0IHhmcm1fc3RhdGUgKngsIHZvaWQgKnRtcCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgYm9vbCBhbHJlYWR5X3VucmVmKVxcbi0tXFxubmV0L2lwdjQvZXNwNC5jLTEyNC1cXG5uZXQvaXB2NC9lc3A0LmM6MTI1OiNpZmRlZiBDT05GSUdfSU5FVF9FU1BJTlRDUFxcbm5ldC9pcHY0L2VzcDQuYy0xMjYtc3RhdGljIHN0cnVjdCBzb2NrICplc3BfZmluZF90Y3Bfc2soc3RydWN0IHhmcm1fc3RhdGUgKngpXFxuLS1cXG5uZXQvaXB2NC9lc3A0LmM9MzA5PXN0YXRpYyBzdHJ1Y3QgaXBfZXNwX2hkciAqZXNwX291dHB1dF91ZHBfZW5jYXAoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9pcHY0L2VzcDQuYy0zMzgtXFxubmV0L2lwdjQvZXNwNC5jOjMzOTojaWZkZWYgQ09ORklHX0lORVRfRVNQSU5UQ1BcXG5uZXQvaXB2NC9lc3A0LmMtMzQwLXN0YXRpYyBzdHJ1Y3QgaXBfZXNwX2hkciAqZXNwX291dHB1dF90Y3BfZW5jYXAoc3RydWN0IHhmcm1fc3RhdGUgKngsXFxuLS1cXG5uZXQvaXB2NC9lc3A0LmM9MTExOD1zdGF0aWMgaW50IGVzcF9pbml0X3N0YXRlKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuLS1cXG5uZXQvaXB2NC9lc3A0LmMtMTE1Ni1cXHRcXHRcXHRicmVhaztcXG5uZXQvaXB2NC9lc3A0LmM6MTE1NzojaWZkZWYgQ09ORklHX0lORVRfRVNQSU5UQ1BcXG5uZXQvaXB2NC9lc3A0LmMtMTE1OC1cXHRcXHRjYXNlIFRDUF9FTkNBUF9FU1BJTlRDUDpcXG4tLVxcbm5ldC9pcHY2L0tjb25maWc9Nzc9Y29uZmlnIElORVQ2X0VTUF9PRkZMT0FEXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTg5LVxcbm5ldC9pcHY2L0tjb25maWc6OTA6Y29uZmlnIElORVQ2X0VTUElOVENQXFxubmV0L2lwdjYvS2NvbmZpZy05MS1cXHRib29sIFxcXCJJUHY2OiBFU1AgaW4gVENQIGVuY2Fwc3VsYXRpb24gKFJGQyA4MjI5KVxcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctOTQtXFx0c2VsZWN0IE5FVF9TT0NLX01TR1xcbm5ldC9pcHY2L0tjb25maWc6OTU6XFx0c2VsZWN0IFhGUk1fRVNQSU5UQ1BcXG5uZXQvaXB2Ni9LY29uZmlnLTk2LVxcdGhlbHBcXG4tLVxcbm5ldC9pcHY2L2VzcDYuYz0xMTY9c3RhdGljIHZvaWQgZXNwX3NzZ191bnJlZihzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgdm9pZCAqdG1wLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBib29sIGFscmVhZHlfdW5yZWYpXFxuLS1cXG5uZXQvaXB2Ni9lc3A2LmMtMTQxLVxcbm5ldC9pcHY2L2VzcDYuYzoxNDI6I2lmZGVmIENPTkZJR19JTkVUNl9FU1BJTlRDUFxcbm5ldC9pcHY2L2VzcDYuYy0xNDMtc3RhdGljIHN0cnVjdCBzb2NrICplc3A2X2ZpbmRfdGNwX3NrKHN0cnVjdCB4ZnJtX3N0YXRlICp4KVxcbi0tXFxubmV0L2lwdjYvZXNwNi5jPTM0Nj1zdGF0aWMgc3RydWN0IGlwX2VzcF9oZHIgKmVzcDZfb3V0cHV0X3VkcF9lbmNhcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjYvZXNwNi5jLTM2OS1cXG5uZXQvaXB2Ni9lc3A2LmM6MzcwOiNpZmRlZiBDT05GSUdfSU5FVDZfRVNQSU5UQ1BcXG5uZXQvaXB2Ni9lc3A2LmMtMzcxLXN0YXRpYyBzdHJ1Y3QgaXBfZXNwX2hkciAqZXNwNl9vdXRwdXRfdGNwX2VuY2FwKHN0cnVjdCB4ZnJtX3N0YXRlICp4LFxcbi0tXFxubmV0L2lwdjYvZXNwNi5jPTExNTY9c3RhdGljIGludCBlc3A2X2luaXRfc3RhdGUoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbm5ldC9pcHY2L2VzcDYuYy0xMjA0LVxcdFxcdFxcdGJyZWFrO1xcbm5ldC9pcHY2L2VzcDYuYzoxMjA1OiNpZmRlZiBDT05GSUdfSU5FVDZfRVNQSU5UQ1BcXG5uZXQvaXB2Ni9lc3A2LmMtMTIwNi1cXHRcXHRjYXNlIFRDUF9FTkNBUF9FU1BJTlRDUDpcXG4tLVxcbm5ldC94ZnJtL0tjb25maWc9MTQxPWNvbmZpZyBYRlJNX0lQVEZTXFxuLS1cXG5uZXQveGZybS9LY29uZmlnLTE1Ni1cXG5uZXQveGZybS9LY29uZmlnOjE1Nzpjb25maWcgWEZSTV9FU1BJTlRDUFxcbm5ldC94ZnJtL0tjb25maWctMTU4LVxcdGJvb2xcXG4tLVxcbm5ldC94ZnJtL01ha2VmaWxlPTI0PW9iai0kKENPTkZJR19YRlJNX0lQVEZTKSArPSB4ZnJtX2lwdGZzLm9cXG5uZXQveGZybS9NYWtlZmlsZToyNTpvYmotJChDT05GSUdfWEZSTV9FU1BJTlRDUCkgKz0gZXNwaW50Y3Aub1xcbm5ldC94ZnJtL01ha2VmaWxlLTI2LW9iai0kKENPTkZJR19ERUJVR19JTkZPX0JURikgKz0geGZybV9zdGF0ZV9icGYub1xcbi0tXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy00NC0jZW5kaWZcXG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjQ1OiNpZmRlZiBDT05GSUdfWEZSTV9FU1BJTlRDUFxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtNDYtI2luY2x1ZGUgXFx1MDAzY25ldC9lc3BpbnRjcC5oXFx1MDAzZVxcbi0tXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYz00NDE0PXZvaWQgX19pbml0IHhmcm1faW5pdCh2b2lkKVxcbi0tXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy00NDIzLVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6NDQyNDojaWZkZWYgQ09ORklHX1hGUk1fRVNQSU5UQ1BcXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTQ0MjUtXFx0ZXNwaW50Y3BfaW5pdCgpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxMzo1NDowNi40ODMxNDE3MzhaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTAyMjIyOTUwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqQ2hlY2tpbmcgWEZSTV9NSUdSQVRFIEltcGxlbWVudGF0aW9uIERldGFpbHMqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBYRlJNIG1pZ3JhdGlvbiBzdXBwb3J0LiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IHRoaXMgaXMgaGFuZGxlZCwgc28gZmlyc3QgdGhpbmdzIGZpcnN0OiBJJ2xsIGhlYWQgb3ZlciB0byBgbmV0L3hmcm0vS2NvbmZpZ2AgdG8gc2VlIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbiBmb3IgYFhGUk1fTUlHUkFURWAuIEkgd2FudCB0byBxdWlja2x5IGNvbmZpcm0gd2hhdCBkZXBlbmRlbmNpZXMgaXQgaGFzLCBpZiBhbnksIGFuZCB3aGF0IGZlYXR1cmVzIGl0IGVuYWJsZXMgb3IgZGlzYWJsZXMuIEEgcXVpY2sgc2NhbiB0aGVyZSB3aWxsIGdpdmUgbWUgdGhlIGhpZ2gtbGV2ZWwgcGljdHVyZS5cblxuVGhlbiwgdG8gdW5kZXJzdGFuZCB0aGUgbml0dHktZ3JpdHR5IG9mIHRoZSBpbXBsZW1lbnRhdGlvbiwgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRpdmUgaW50byBgeGZybV91c2VyLmNgLiBUaGlzIGlzIHdoZXJlIGFsbCB0aGUgdXNlci1zcGFjZSBpbnRlcmFjdGlvbiBmb3IgWEZSTSB0eXBpY2FsbHkgaGFwcGVucywgYW5kIHdoZXJlIHRoZSBtaWdyYXRpb24tcmVsYXRlZCBjb2RlIHNob3VsZCBiZS4gSSdsbCBiZSBsb29raW5nIGZvciB0aGUgc3BlY2lmaWMgZnVuY3Rpb25zIGRlYWxpbmcgd2l0aCBYRlJNIHN0YXRlcyBiZWluZyBtb3ZlZCBiZXR3ZWVuIGludGVyZmFjZXMgb3IgbmFtZXNwYWNlcyBhbmQgc2VlIGhvdyB0aGUgbWlncmF0aW9uIGl0c2VsZiBpcyBhY3R1YWxseSB0cmlnZ2VyZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkYXRhIHN0cnVjdHVyZXMgYmVpbmcgbW92ZWQsIHRoZSBsb2NraW5nIGNvbnNpZGVyYXRpb25zLCBhbmQgYW55IGVycm9yIGhhbmRsaW5nIGluIHBsYWNlLiBJIGFsc28gd2FudCB0byBkb3VibGUtY2hlY2sgdGhhdCB0aGlzIGlzIGltcGxlbWVudGVkIGNvcnJlY3RseSBmb3IgYm90aCB0aGUgaW5ncmVzcyBhbmQgZWdyZXNzIHBhdGhzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDE2MSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDEzOjU0OjExLjUwNTM3NDc0N1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjgzMzcwNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiWEZSTV9NSUdSQVRFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0vS2NvbmZpZz01MT1jb25maWcgWEZSTV9TVUJfUE9MSUNZXFxuLS1cXG5uZXQveGZybS9LY29uZmlnLTYwLVxcbm5ldC94ZnJtL0tjb25maWc6NjE6Y29uZmlnIFhGUk1fTUlHUkFURVxcbm5ldC94ZnJtL0tjb25maWctNjItXFx0Ym9vbCBcXFwiVHJhbnNmb3JtYXRpb24gbWlncmF0ZSBkYXRhYmFzZVxcXCJcXG4tLVxcbm5ldC94ZnJtL0tjb25maWc9MTI1PWNvbmZpZyBORVRfS0VZX01JR1JBVEVcXG4tLVxcbm5ldC94ZnJtL0tjb25maWctMTI3LVxcdGRlcGVuZHMgb24gTkVUX0tFWVxcbm5ldC94ZnJtL0tjb25maWc6MTI4OlxcdHNlbGVjdCBYRlJNX01JR1JBVEVcXG5uZXQveGZybS9LY29uZmlnLTEyOS1cXHRoZWxwXFxuLS1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jPTQ0OTQ9RVhQT1JUX1NZTUJPTF9HUEwoeGZybV9hdWRpdF9wb2xpY3lfZGVsZXRlKTtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtNDQ5Ni1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjQ0OTc6I2lmZGVmIENPTkZJR19YRlJNX01JR1JBVEVcXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTQ0OTgtc3RhdGljIHN0cnVjdCB4ZnJtX3BvbGljeSAqeGZybV9taWdyYXRlX3BvbGljeV9maW5kKGNvbnN0IHN0cnVjdCB4ZnJtX3NlbGVjdG9yICpzZWwsXFxuLS1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmM9MTk1ND1FWFBPUlRfU1lNQk9MKHhmcm1fc3RhdGVfYWRkKTtcXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMTk1NS1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmM6MTk1NjojaWZkZWYgQ09ORklHX1hGUk1fTUlHUkFURVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0xOTU3LXN0YXRpYyBpbmxpbmUgaW50IGNsb25lX3NlY3VyaXR5KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3QgeGZybV9zZWNfY3R4ICpzZWN1cml0eSlcXG4tLVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYz0xOTgxPXN0YXRpYyBzdHJ1Y3QgeGZybV9zdGF0ZSAqeGZybV9zdGF0ZV9jbG9uZV9hbmRfc2V0dXAoc3RydWN0IHhmcm1fc3RhdGUgKm9yaWcsXFxuLS1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMTk5MC1cXHRpZiAobS1cXHUwMDNlbXNnX3R5cGUgPT0gWEZSTV9NU0dfTUlHUkFURV9TVEFURSkge1xcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzoxOTkxOlxcdFxcdGlmIChtLVxcdTAwM2VmbGFncyBcXHUwMDI2IFhGUk1fTUlHUkFURV9TVEFURV9VUERBVEVfSDJIX1NFTCkge1xcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0xOTkyLVxcdFxcdFxcdHU4IHByZWZpeGxlbiA9IChtLVxcdTAwM2VuZXdfZmFtaWx5ID09IEFGX0lORVQ2KSA/IDEyOCA6IDMyO1xcbi0tXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jPTI4ODk9RVhQT1JUX1NZTUJPTChrbV9wb2xpY3lfZXhwaXJlZCk7XFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTI4OTAtXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjI4OTE6I2lmZGVmIENPTkZJR19YRlJNX01JR1JBVEVcXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMjg5Mi1pbnQga21fbWlncmF0ZShjb25zdCBzdHJ1Y3QgeGZybV9zZWxlY3RvciAqc2VsLCB1OCBkaXIsIHU4IHR5cGUsXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYz0xMjA0PXN0YXRpYyB2b2lkIHhzb190b194dW9faWZpbmRleChjb25zdCBzdHJ1Y3QgeGZybV9kZXZfb2ZmbG9hZCAqeHNvLCBpbnQgaWZpbmRleCxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTEyMTMtXFxubmV0L3hmcm0veGZybV91c2VyLmM6MTIxNDojaWZkZWYgQ09ORklHX1hGUk1fTUlHUkFURVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTEyMTUtc3RhdGljIHZvaWQgeHNvX3RvX3h1byhjb25zdCBzdHJ1Y3QgeGZybV9kZXZfb2ZmbG9hZCAqeHNvLFxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmM9MzAzMD1zdGF0aWMgaW50IHhmcm1fYWRkX2FjcXVpcmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zMTA0LVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjMxMDU6I2lmZGVmIENPTkZJR19YRlJNX01JR1JBVEVcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zMTA2LXN0YXRpYyB2b2lkIGNvcHlfZnJvbV91c2VyX21pZ3JhdGVfc3RhdGUoc3RydWN0IHhmcm1fbWlncmF0ZSAqbWEsXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYz0zMzM1PXN0YXRpYyBpbnQgeGZybV9kb19taWdyYXRlX3N0YXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMzM1NS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzozMzU2OlxcdGlmICh1bS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiB+WEZSTV9NSUdSQVRFX1NUQVRFX0tOT1dOX0ZMQUdTKSB7XFxubmV0L3hmcm0veGZybV91c2VyLmMtMzM1Ny1cXHRcXHROTF9TRVRfRVJSX01TR19GTVQoZXh0YWNrLCBcXFwiVW5rbm93biBmbGFnczogMHgleFxcXCIsXFxubmV0L3hmcm0veGZybV91c2VyLmM6MzM1ODpcXHRcXHRcXHRcXHQgICB1bS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiB+WEZSTV9NSUdSQVRFX1NUQVRFX0tOT1dOX0ZMQUdTKTtcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zMzU5LVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMzM2NS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzozMzY2OlxcdGlmICghKHVtLVxcdTAwM2VmbGFncyBcXHUwMDI2IFhGUk1fTUlHUkFURV9TVEFURV9VUERBVEVfSDJIX1NFTCkpIHtcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zMzY3LVxcdFxcdGVyciA9IHZlcmlmeV9zZWxlY3Rvcl9wcmVmaXhsZW4odW0tXFx1MDAzZW5ld19zZWwuZmFtaWx5LFxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMzM4Mi1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzozMzgzOlxcdGlmICh1bS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBYRlJNX01JR1JBVEVfU1RBVEVfVVBEQVRFX0gySF9TRUwpIHtcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zMzg0LVxcdFxcdHU4IHByZWZpeGxlbiA9ICh4LVxcdTAwM2Vwcm9wcy5mYW1pbHkgPT0gQUZfSU5FVDYpID8gMTI4IDogMzI7XFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNDI1LVxcdH0gZWxzZSB7XFxubmV0L3hmcm0veGZybV91c2VyLmM6MzQyNjpcXHRcXHRib29sIGluaGVyaXRfb2ZmbG9hZCA9ICEodW0tXFx1MDAzZWZsYWdzIFxcdTAwMjYgWEZSTV9NSUdSQVRFX1NUQVRFX0NMRUFSX09GRkxPQUQpO1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM0MjctXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYz0zNTI0PXN0YXRpYyBpbnQgeGZybV9kb19taWdyYXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMzUzMC1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzozNTMxOiNpZmRlZiBDT05GSUdfWEZSTV9NSUdSQVRFXFxubmV0L3hmcm0veGZybV91c2VyLmMtMzUzMi1zdGF0aWMgaW50IGNvcHlfdG9fdXNlcl9taWdyYXRlKGNvbnN0IHN0cnVjdCB4ZnJtX21pZ3JhdGUgKm0sIHN0cnVjdCBza19idWZmICpza2IpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDEzOjU0OjExLjU3MzcxNzI2NloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNTc1MDU1MTczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBSZWNlbnQgWEZSTSBDaGFuZ2VzKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoZXNlIHJlY2VudCBYRlJNIGNoYW5nZXMuIEZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgaW1wYWN0IHJlbGF0ZWQgdG8gYFhGUk1fVVNFUl9DT01QQVRgLiBJIHNlZSB0aGF0IHRoZSBgeGZybV9hbGxvY191c2Vyc3BpYCBmdW5jdGlvbiBpbiBgbmV0L3hmcm0veGZybV91c2VyLmNgIGhhcyBoYWQgdGhhdCBgeHRyID0geGZybV9nZXRfdHJhbnNsYXRvcigpYCBibG9jayByZW1vdmVkLCBzbyBJJ2xsIG5lZWQgdG8gZXhhbWluZSB0aGUgaW1wbGljYXRpb25zIG9mIHRoYXQgcmVtb3ZhbC4gTm93LCBsZXQncyBkaXNzZWN0IHRoZSByZXN0LlxuXG5TcGVjaWZpY2FsbHksIEknbSBub3RpbmcgdGhlIGZvbGxvd2luZyBzaWduaWZpY2FudCBtb2RpZmljYXRpb25zOlxuXG4xLiAgSW4gYG5ldC9pcHY0L2VzcDQuY2AsIHRoZSBgZXNwX291dHB1dF9oZWFkYCBmdW5jdGlvbiwgYW5kIGJ5IGV4dGVuc2lvbiBgZXNwX291dHB1dGAsIGhhcyBoYWQgYHNrYl96Y29weV9kb3duZ3JhZGVfbWFuYWdlZChza2IpO2AgaW50cm9kdWNlZC4gVGhpcyBpcyBteSBwcmltYXJ5IGZvY3VzIGhlcmUuXG5cbjIuICBTaW1pbGFybHksIGBuZXQvaXB2Ni9lc3A2LmNgIGFsc28gaGFzIHRoaXMgaW5zZXJ0aW9uIHdpdGhpbiBpdHMgYGVzcDZfb3V0cHV0X2hlYWRgIGZ1bmN0aW9uIChhbmQgYGVzcDZfb3V0cHV0YCksIHNvIHRoaXMgaXMgYSBjb25zaXN0ZW50IGNoYW5nZSwgcG90ZW50aWFsbHkgcmVsYXRlZCB0byB6ZXJvLWNvcHkgb3B0aW1pemF0aW9uIGRvd25ncmFkaW5nLlxuXG4zLiAgSW4gYG5ldC9pcHY2L3hmcm02X291dHB1dC5jYCwgdGhlcmUncyBhIHNoaWZ0IGluIGB4ZnJtNl9sb2NhbF9yeHBtdHVgIGFuZCBgeGZybTZfbG9jYWxfZXJyb3JgLiBUaGV5J3JlIG5vdyB1c2luZyBgc2tiX3RvX2Z1bGxfc2soc2tiKWAgYW5kIHBlcmZvcm1pbmcgbnVsbCBjaGVja3MuIFRoaXMgc2lnbmFscyBwb3NzaWJsZSBjaGFuZ2VzIGluIGhvdyB0aGUgU0tCIGlzIGhhbmRsZWQgd2l0aGluIHRob3NlIGZ1bmN0aW9ucy5cblxuNC4gIEZpbmFsbHksIGBuZXQveGZybS9lc3BpbnRjcC5jYCBub3cgaW5jbHVkZXMgYSBjaGVjayBmb3IgYHNrYl9yZXNldF90cmFuc3BvcnRfaGVhZGVyX2NhcmVmdWwoc2tiKWAgd2l0aGluIHRoZSBgaGFuZGxlX2VzcGAgZnVuY3Rpb24uIEkgd2lsbCBuZWVkIHRvIGRlbHZlIGZ1cnRoZXIgaW50byB0aGUgdXNhZ2Ugb3IgdGhlIGZ1bmN0aW9ucyBpbiB0aGlzIGZpbGUgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYxMDksIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTM6NTQ6MTUuMTQ4Nzc0NzI5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjM0ODM3MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJoYW5kbGVfZXNwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL2VzcGludGNwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0vZXNwaW50Y3AuYz0xMj1zdGF0aWMgdm9pZCBoYW5kbGVfbm9uZXNwKHN0cnVjdCBlc3BpbnRjcF9jdHggKmN0eCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC94ZnJtL2VzcGludGNwLmMtMjgtXFxubmV0L3hmcm0vZXNwaW50Y3AuYzoyOTpzdGF0aWMgdm9pZCBoYW5kbGVfZXNwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzb2NrICpzaylcXG5uZXQveGZybS9lc3BpbnRjcC5jLTMwLXtcXG4tLVxcbm5ldC94ZnJtL2VzcGludGNwLmM9NjE9c3RhdGljIHZvaWQgZXNwaW50Y3BfcmN2KHN0cnVjdCBzdHJwYXJzZXIgKnN0cnAsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQveGZybS9lc3BpbnRjcC5jLTExNy1cXHRlbHNlXFxubmV0L3hmcm0vZXNwaW50Y3AuYzoxMTg6XFx0XFx0aGFuZGxlX2VzcChza2IsIHN0cnAtXFx1MDAzZXNrKTtcXG5uZXQveGZybS9lc3BpbnRjcC5jLTExOS19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDEzOjU0OjE1LjE5NTEyNTQwMloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMzk1NDg2NDMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgRXhhbWluYXRpb24gb2YgdGhlIEVTUC9UQ1AgUmVjZWl2ZSBQYXRoKipcblxuT2theSwgc28gYGVzcGludGNwX3JjdmAgaXMgdGhlIGtleSBmdW5jdGlvbiBpbml0aWF0aW5nIHRoaW5ncyBpbiBgZXNwaW50Y3AuY2AuIFRoYXQncyB3aGVyZSBJIG5lZWQgdG8gc3RhcnQuIE5vdywgbGV0J3MgcGl2b3QgdG8gdGhlIFhGUk0tcmVsYXRlZCBjb2RlLCBzcGVjaWZpY2FsbHkgd2hhdCBoYXBwZW5zIGFmdGVyIHRoYXQuXG5cbkkgc2VlIGBuZXQveGZybS94ZnJtX2lucHV0LmNgIHdpdGggYHhmcm1faW5wdXRgLCBgeGZybV90cmFuc19yZWluamVjdGAsIGFuZCBgeGZybV90cmFuc19xdWV1ZV9uZXRgIGFzIGNyaXRpY2FsIGZ1bmN0aW9ucy4gVGhvc2UgZGVzZXJ2ZSBpbW1lZGlhdGUgYXR0ZW50aW9uLiBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgZGF0YSBpcyBwcm9jZXNzZWQgYnkgdGhvc2UuXG5cbk5leHQsIEknbGwgc3dpdGNoIG92ZXIgdG8gYG5ldC94ZnJtL3hmcm1faXB0ZnMuY2AuIEkgd2FudCB0byBpbnZlc3RpZ2F0ZSBgaXB0ZnNfc2tiX2Nhbl9hZGRfZnJhZ3NgIGFuZCBgaXB0ZnNfcmVhc3NlbV9jb250YC4gSSdsbCB3YW50IHRvIHF1aWNrbHkgY2hlY2sgdGhlIGBzdGF0aWNgIHN0YXR1cyBvZiB0aGVzZSwgYW5kIG1hcCB0aGUgZW50cnkgcG9pbnRzLiBIb3BlZnVsbHkgdGhpcyB3aWxsIHJldmVhbCB0aGUgc3BlY2lmaWNzIG9mIElQIGZyYWdtZW50IHJlYXNzZW1ibHkgd2l0aGluIHRoZSBYRlJNIGZyYW1ld29yay4gVGhpcyB3aWxsIGhvcGVmdWxseSBwcm92aWRlIGluc2lnaHQgdG8gdGhlIG92ZXJhbGwgZW5kLXRvLWVuZCBmbG93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzA4MSwiT3V0cHV0VG9rZW5zIjo1MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxMzo1NDoxOC41OTA2MTM5NDNaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NzQ3MDAzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwdGZzX3NrYl9jYW5fYWRkX2ZyYWdzfGlwdGZzX3JlYXNzZW1fY29udFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS94ZnJtX2lwdGZzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0veGZybV9pcHRmcy5jPTM4MD1zdGF0aWMgdTMyIGlwdGZzX3NrYl9yZXNldF9mcmFnX3dhbGsoc3RydWN0IGlwdGZzX3NrYl9mcmFnX3dhbGsgKndhbGssXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNDAwLS8qKlxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo0MDE6ICogaXB0ZnNfc2tiX2Nhbl9hZGRfZnJhZ3MoKSAtIGNoZWNrIGlmIG9rIHRvIGFkZCBmcmFncyBmcm9tIHdhbGsgdG8gc2tiXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTQwMi0gKiBAc2tiOiBza2IgdG8gY2hlY2sgZm9yIGFkZGluZyBmcmFncyB0b1xcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTQwOC0gKi9cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6NDA5OnN0YXRpYyBib29sIGlwdGZzX3NrYl9jYW5fYWRkX2ZyYWdzKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTQxMC1cXHRcXHRcXHRcXHQgICAgc3RydWN0IGlwdGZzX3NrYl9mcmFnX3dhbGsgKndhbGssXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNDU4LSAqXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjQ1OTogKiBpcHRmc19za2JfY2FuX2FkZF9mcmFncygpIHNob3VsZCBiZSBjYWxsZWQgYmVmb3JlIHRoaXMgZnVuY3Rpb24gdG8gdmVyaWZ5XFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTQ2MC0gKiB0aGF0IHRoZSBkZXN0aW5hdGlvbiBAc2tiIGlzIGNvbXBhdGlibGUgd2l0aCB0aGUgd2FsayBhbmQgaGFzIHNwYWNlIGluIHRoZVxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jPTU0MT1pcHRmc19wc2tiX2FkZF9mcmFncyhzdHJ1Y3Qgc2tfYnVmZiAqdHBsLCBzdHJ1Y3QgaXB0ZnNfc2tiX2ZyYWdfd2FsayAqd2FsayxcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy01NTAtXFx0LyogdGhpcyBzaG91bGQgbm90IG5vcm1hbGx5IGJlIGhhcHBlbmluZyAqL1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo1NTE6XFx0aWYgKCFpcHRmc19za2JfY2FuX2FkZF9mcmFncyhza2IsIHdhbGssIG9mZiArIGNvcHlfbGVuLFxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy01NTItXFx0XFx0XFx0XFx0ICAgICBsZW4gLSBjb3B5X2xlbikpIHtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz03MzA9c3RhdGljIHZvaWQgaXB0ZnNfcmVhc3NlbV9kb25lKHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMpXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNzM1LS8qKlxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo3MzY6ICogaXB0ZnNfcmVhc3NlbV9jb250KCkgLSBDb250aW51ZSB0aGUgcmVhc3NlbWJseSBvZiBhbiBpbm5lciBwYWNrZXRzLlxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy03MzctICogQHh0ZnM6IHh0ZnMgc3RhdGVcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy03NDktICovXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjc1MDpzdGF0aWMgdTMyIGlwdGZzX3JlYXNzZW1fY29udChzdHJ1Y3QgeGZybV9pcHRmc19kYXRhICp4dGZzLCB1NjQgc2VxLFxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy03NTEtXFx0XFx0XFx0ICAgICAgc3RydWN0IHNrYl9zZXFfc3RhdGUgKnN0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTkwOS1cXHRpZiAoZnJhZ3dhbGsgXFx1MDAyNlxcdTAwMjZcXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6OTEwOlxcdCAgICBpcHRmc19za2JfY2FuX2FkZF9mcmFncyhuZXdza2IsIGZyYWd3YWxrLCBkYXRhLCBjb3B5bGVuKSkge1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy05MTEtXFx0XFx0aXB0ZnNfc2tiX2FkZF9mcmFncyhuZXdza2IsIGZyYWd3YWxrLCBkYXRhLCBjb3B5bGVuKTtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz0xMjI2PXN0YXRpYyB2b2lkIGlwdGZzX2lucHV0X29yZGVyZWQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTI4Ny1cXHRcXHRpZiAoYmxrb2ZmIHx8IHh0ZnMtXFx1MDAzZXJhX3J1bnRsZW4gfHwgeHRmcy1cXHUwMDNlcmFfbmV3c2tiKSB7XFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjEyODg6XFx0XFx0XFx0ZGF0YSA9IGlwdGZzX3JlYXNzZW1fY29udCh4dGZzLCBzZXEsIFxcdTAwMjZza2JzZXEsIHNrYiwgZGF0YSxcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTI4OS1cXHRcXHRcXHRcXHRcXHRcXHQgIGJsa29mZiwgXFx1MDAyNnN1Ymxpc3QpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxMzo1NDoxOC42MzUzNjMxNTZaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjc1Mjk0NDE0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYHhmcm1faXB0ZnMuY2AgY29kZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGdldCBhIGxheSBvZiB0aGUgbGFuZCwgc28gSSdsbCBzdGFydCBieSBsaXN0aW5nIHRoZSBrZXkgZnVuY3Rpb25zLiBJIHdhbnQgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgZW50cnkgcG9pbnRzIGFuZCBtYWpvciBvcGVyYXRpb25zLiBJIHNlZSBgaXB0ZnNfaW5wdXRfb3JkZXJlZGAsIGBpcHRmc19pbnB1dGAsIGBpcHRmc19vdXRwdXRgLCBhbmQgSSdtIGd1ZXNzaW5nIHRoZXNlIGFyZSBoYW5kbGluZyB0aGUgYWN0dWFsIHBhY2tldCBwcm9jZXNzaW5nIGluIGRpZmZlcmVudCBzY2VuYXJpb3MuIFRoZW4gdGhlcmUncyBgaXB0ZnNfdXNlcl9pbml0YCBhbmQgYGlwdGZzX2luaXRfc3RhdGVgLCBwcm9iYWJseSByZWxhdGVkIHRvIGluaXRpYWxpemF0aW9uLCB1c2VyIHNwYWNlIGludGVyYWN0aW9uLCBhbmQgc3RhdGUgbWFuYWdlbWVudCwgd2hpY2ggYXJlIHZlcnkgaW1wb3J0YW50IGluIGNvbm5lY3Rpb24gdHJhY2tpbmcuIEFuZCBJIHNlZSBhIGZyYWdtZW50YXRpb24gcmVsYXRlZCBmdW5jdGlvbiBgaXB0ZnNfcHNrYl9hZGRfZnJhZ3NgIGhlcmUuXG5cblRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgd2l0aGluIHRoZSBicm9hZGVyIFhGUk0gZnJhbWV3b3JrIGFuZCBpdHMgaW50ZXJhY3Rpb24gd2l0aCB0aGUga2VybmVsLCBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIHNlbnNlIG9mIGhvdyBpdCBpbnRlZ3JhdGVzIHdpdGggWEZSTSBzdHJ1Y3R1cmVzLiBUaGVyZWZvcmUsIEkgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gaG93IHRoZSBjb2RlIHJlbGF0ZXMgdG8gYHhmcm1fdHlwZWAgb3IgYW55IFhGUk0gcHJvdG9jb2wgY2FsbGJhY2tzLiBJJ2xsIG5lZWQgdG8gZ3JlcCBmb3IgdGhlc2UgdGVybXMgdG8gc2VlIHRoZSBjb25uZWN0aW9ucy4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgYXJjaGl0ZWN0dXJhbCBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODU0NiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDEzOjU0OjIxLjM4ODMwOTU4MloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc3ODg4MzIsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0YXRpYyBjb25zdCBzdHJ1Y3QgeGZybV90eXBlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL3hmcm1faXB0ZnMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTM6NTQ6MjEuNDM2MTI4MjU0WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM2ODE2ODU5MTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBYRlJNIENvcmUqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IGRvdWJsZS1jaGVja2luZyB0aGUgaW5pdGlhbGl6YXRpb24gYW5kIHRoZSBkZWZpbml0aW9ucyBvZiBgeGZybV90eXBlYCB3aXRoaW4gYHhmcm1faXB0ZnMuY2AuIEkgbmVlZCB0byBlbnN1cmUgdGhlIGZvdW5kYXRpb24gaXMgc29saWQgYmVmb3JlIEkgZGVsdmUgYW55IGRlZXBlciBpbnRvIHRoZSBJUHNlYyBwcm9jZXNzaW5nIGZsb3cuIFRoaXMgYXJlYSBhbHdheXMgaGFzIHBvdGVudGlhbCBmb3Igc3VidGxlIGJ1Z3MsIHNvIGJlc3QgdG8gdGFrZSBhIG1vbWVudCBhbmQgcmUtZmFtaWxpYXJpemUgbXlzZWxmIHdpdGggdGhlIGJhc2ljcy4gSXQncyBhIGtleSBwaWVjZSBpbiBlbnN1cmluZyBhbnkgbmV3IElQc2VjIGZlYXR1cmUgYmVoYXZlcyBhcyBpbnRlbmRlZCB3aXRoaW4gdGhlIGxhcmdlciBzeXN0ZW0uIFRpbWUgdG8gcmVmcmVzaCBteSBtZW1vcnkgYW5kIHZlcmlmeSB0aGUgc3RhcnRpbmcgc3RhdGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4OTM4LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTM6NTQ6MjUuMTE3ODE3NjZaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MzY0ODUzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInhmcm1fdHlwZXx4ZnJtX21vZGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0veGZybV9pcHRmcy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL3hmcm1faXB0ZnMuYz0yNzMyPXN0YXRpYyB2b2lkIGlwdGZzX2Rlc3Ryb3lfc3RhdGUoc3RydWN0IHhmcm1fc3RhdGUgKngpXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjc2Ny1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6Mjc2ODpzdGF0aWMgY29uc3Qgc3RydWN0IHhmcm1fbW9kZV9jYnMgaXB0ZnNfbW9kZV9jYnMgPSB7XFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTI3NjktXFx0Lm93bmVyID0gVEhJU19NT0RVTEUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDEzOjU0OjI1LjE2NjE4NjMxMloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMDc0NzQxMDEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkgd2VyZSB0aGlua2luZyB0aHJvdWdoIHRoZSBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBgeGZybV9pcHRmcy5jYCBDb2RlKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGUgYHhmcm1faXB0ZnMuY2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJJ20gZm9jdXNpbmcgaW4gb24gdGhlIGBpcHRmc19tb2RlX2Nic2Agc3RydWN0dXJlLiBJIHJlbWVtYmVyIGRlYWxpbmcgd2l0aCB0aGF0IGFyZWEgYmVmb3JlLCBhbmQgSSB3YW50IHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBjYWxsYmFja3MgZGVmaW5lZCB0aGVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBJUHNlYyB0cmFuc3BvcnQgbW9kZSBpbnRlcmFjdHMgd2l0aGluIHRoZSBYRlJNIGZyYW1ld29yay4gSXQncyBrZXkgdG8gaG93IHRoaW5ncyBhcmUgYmVpbmcgbWFuYWdlZCBhbmQgY29uZmlndXJlZC4gU28sIGxldCdzIGRyaWxsIGRvd24gaW50byB0aGF0IHNlY3Rpb24gb2YgdGhlIGNvZGUgYW5kIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZy4gSXQgaXMgbGlrZWx5IHRoYXQgY2FsbGJhY2tzIGFyZSBkZWZpbmVkIHRvIGhhbmRsZSBkaWZmZXJlbnQgYXNwZWN0cyBvZiB0aGUgaW50ZXJhY3Rpb24sIHN1Y2ggYXMgaW5pdGlhbGl6YXRpb24sIHBhY2tldCBwcm9jZXNzaW5nIG9yIHRlYXJkb3duIHdpdGhpbiB0aGUgSVBzZWMgc3Vic3lzdGVtLCBvciBwZXJoYXBzIGhhbmRsaW5nIG9mIGRpZmZlcmVudCBTQSB0eXBlcy4gTGV0J3Mgc2VlIGV4YWN0bHkgaG93IHRoaXMgY29kZSBpcyBoYW5kbGluZyB0aG9zZSBjYWxsYmFjayBhY3Rpb25zIHdpdGhpbiB0cmFuc3BvcnQgbW9kZS4gSSdtIGhvcGluZyBJIGNhbiByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNhbGxiYWNrIHByb2Nlc3MgdG8gY2hlY2sgd2hhdCBpcyBjb25maWd1cmVkIGF0IHRoaXMgcG9pbnQgaW4gdGhlIHByb2Nlc3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MjgyLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTM6NTQ6MjguMjQwOTI5NjQ1WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTk1NDg3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcHRmc19tb2RlX2Nic1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS94ZnJtX2lwdGZzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0veGZybV9pcHRmcy5jPTI3MzI9c3RhdGljIHZvaWQgaXB0ZnNfZGVzdHJveV9zdGF0ZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeClcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNzY3LVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoyNzY4OnN0YXRpYyBjb25zdCBzdHJ1Y3QgeGZybV9tb2RlX2NicyBpcHRmc19tb2RlX2NicyA9IHtcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjc2OS1cXHQub3duZXIgPSBUSElTX01PRFVMRSxcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz0yNzgyPXN0YXRpYyBpbnQgX19pbml0IHhmcm1faXB0ZnNfaW5pdCh2b2lkKVxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTI3ODctXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjI3ODg6XFx0ZXJyID0geGZybV9yZWdpc3Rlcl9tb2RlX2NicyhYRlJNX01PREVfSVBURlMsIFxcdTAwMjZpcHRmc19tb2RlX2Nicyk7XFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTI3ODktXFx0aWYgKGVyciBcXHUwMDNjIDApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDEzOjU0OjI4LjMwMDg4OTIxNVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMDA0NTc3MTg3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBJUHNlYy9YRlJNIFBhdGNoIENvbXBvbmVudHMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSB0aGUga2V5IGZ1bmN0aW9ucyBhbmQgZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIHRvdWNoZWQgYnkgdGhpcyBwYXRjaCwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYG5ldC94ZnJtYCBhbmQgcmVsYXRlZCBkaXJlY3Rvcmllcy4gSSdtIGZvY3VzaW5nIG9uIHRoZSBjb3JlIFhGUk0gY29tcG9uZW50cywgdGhlIEVTUCAoRW5jYXBzdWxhdGluZyBTZWN1cml0eSBQYXlsb2FkKSBpbXBsZW1lbnRhdGlvbnMgZm9yIElQdjQgYW5kIElQdjYsIGFuZCB0aGUgRVNQLWluLVRDUCB2YXJpYW50LlxuXG5TcGVjaWZpY2FsbHksIEkgc2VlIHRoYXQgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCB0aGVzZSBmdW5jdGlvbnMgYXJlIGNvcnJlY3RseSBuYW1lZCBpbiB0aGUgY29kZTogYHhmcm1fYnVuZGxlX2NyZWF0ZWAsIGB4ZnJtX2NyZWF0ZV9kdW1teV9idW5kbGVgIChwb2xpY3kpLCBgeGZybV9zdGF0ZV9nY190YXNrYCwgYF9feGZybV9zdGF0ZV9kZWxldGVgLCBgeGZybV9kZXZfc3RhdGVfZmx1c2hgIChzdGF0ZSBtYW5hZ2VtZW50KSwgYHhmcm1fYWxsb2NfdXNlcnNwaWAsIGB4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZWAgKHVzZXIgc3BhY2UgaW50ZXJhY3Rpb24pLiBBbHNvIEkgbXVzdCBjaGVjayBpbnB1dCBoYW5kbGluZyBpbiBgeGZybV9pbnB1dGAsIGB4ZnJtX3RyYW5zX3JlaW5qZWN0YCwgYHhmcm1fdHJhbnNfcXVldWVfbmV0YC4gVGhlIEVTUCBvdXRwdXQgZnVuY3Rpb25zIGFyZSBpbXBvcnRhbnQ6IGBlc3Bfb3V0cHV0X2hlYWRgIChJUHY0KSwgYGVzcDZfb3V0cHV0X2hlYWRgIChJUHY2KSwgYW5kIHRob3NlIGZvciBlcnJvciBoYW5kbGluZzogYHhmcm02X2xvY2FsX3J4cG10dWAsIGB4ZnJtNl9sb2NhbF9lcnJvcmAuIEkgbXVzdCBhbHNvIGVuc3VyZSB0aGF0IHRoZSBgaGFuZGxlX2VzcGAgZnVuY3Rpb24gKG9yIGBlc3BpbnRjcF9yY3ZgKSBpcyBoYW5kbGVkIHByb3Blcmx5IGZvciBFU1AtaW4tVENQLCBhbG9uZyB3aXRoICBmcmFnbWVudGF0aW9uL3JlYXNzZW1ibHkgKGBpcHRmc19za2JfY2FuX2FkZF9mcmFnc2AsIGBpcHRmc19yZWFzc2VtX2NvbnRgKS5cblxuSSBoYXZlIHRvIHZlcmlmeSBhbGwgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIGFyZSBlbmFibGVkIGFuZCBoYXZlIHRoZSBjb3JyZWN0IGRlcGVuZGVuY2llczogYENPTkZJR19JTkVUX0VTUGAsIGBDT05GSUdfSU5FVDZfRVNQYCwgYENPTkZJR19JTkVUX0VTUElOVENQYCwgYENPTkZJR19JTkVUNl9FU1BJTlRDUGAsIGBDT05GSUdfWEZSTWAsIGBDT05GSUdfWEZSTV9VU0VSYCwgYENPTkZJR19YRlJNX0lQVEZTYCwgYENPTkZJR19YRlJNX01JR1JBVEVgLCBgQ09ORklHX0lQVjZgLCBhbmQgYENPTkZJR19JTkVUYC4gSSBjYW4gc2VlIGZyb20gdGhlIEtjb25maWcgZmlsZXMgdGhhdCBYRlJNIGRlcGVuZHMgb24gTkVULCBFU1AgZGVwZW5kcyBvbiBJTkVUL0lQVjYsIGFuZCB0aGUgdXNlciBhbmQgSVBURlMgb3B0aW9ucyBkZXBlbmQgb24gWEZSTS4gVGhlIG1pZ3JhdGlvbiBmZWF0dXJlIHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZC5cblxuTG9va2luZyBhdCB0aGUgYEZvY3VzU3ltYm9sc2AsIEkgaGF2ZSBhIGdvb2QgaGFuZGxlIG9uIHdoZXJlIHRoZSBjaGFuZ2VzIGxpZS4gVGhlIGBXb3J0aEZ1enppbmdgIGFzc2Vzc21lbnQgYWxzbyBjb25maXJtcyBteSBzdXNwaWNpb25zLiBUaGlzIHBhdGNoIHRvdWNoZXMgdGhlIGNyaXRpY2FsIElQc2VjL1hGUk0gbmV0d29ya2luZyBjb2RlLCBtYWtpbmcgaXQgcHJpbWUgcmVhbCBlc3RhdGUgZm9yIGZ1enppbmcuIEkgY2FuIHNlZSB0aGF0IHRoZSBjaGFuZ2VzIGluY2x1ZGUgemVyby1jb3B5IGZyYWdtZW50IGhhbmRsaW5nLCBJUHY2IFhGUk0gZXJyb3IgaGFuZGxpbmcsIEVTUC1pbi1UQ1AsIFhGUk0gcGFja2V0IHBhcnNpbmcsIHJlaW5qZWN0aW9uIG1lY2hhbmlzbXMsIElQLVRGUyAoSVAgVHJhZmZpYyBGbG93IFNlY3VyaXR5KSBmcmFnbWVudCB2YWxpZGF0aW9uLCBwb2xpY3kgYnVuZGxlIGNyZWF0aW9uLCBzdGF0ZSBkZWxldGlvbiBsb2NraW5nLCBkZXZpY2Ugc3RhdGUgZmx1c2hpbmcsIGFuZCB0aGUgdXNlciBzcGFjZSBuZXRsaW5rIGhhbmRsZXJzLiBBbGwgdGhlc2UgYXJlYXMgYXJlIGRlZmluaXRlbHkgYWNjZXNzaWJsZSB2aWEgdXNlci1jb250cm9sbGVkIG5ldHdvcmsgdHJhZmZpYyBhbmQgbmV0bGluayBtZXNzYWdlcywgc28gdGhpcyBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyB0byBwcmlvcml0aXplLlxuXG5JJ3ZlIGNvbmZpcm1lZCB0aGUgZXhpc3RlbmNlIGFuZCBjb3JyZWN0IG5hbWluZyBvZiBhbGwgaWRlbnRpZmllZCBzeW1ib2xzIGFjcm9zcyB0aGUgcmVsZXZhbnQgc291cmNlIGZpbGVzLiBUaGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgYWxzbyBjaGVjayBvdXQuXG5cbkFscmlnaHQsIHdpdGggYWxsIHRoZSBjaGVja3MgY29tcGxldGVkLCBJJ20gY29uZmlkZW50IGluIHRoZSBhbmFseXNpcy4gTGV0J3MgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTg0MywiT3V0cHV0VG9rZW5zIjozOTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDEzOjU0OjM4LjM0NjY2Mzc5M1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgzMzQzODA3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJTkVUXCIsXG4gICAgXCJJUFY2XCIsXG4gICAgXCJYRlJNXCIsXG4gICAgXCJJTkVUX0VTUFwiLFxuICAgIFwiSU5FVDZfRVNQXCIsXG4gICAgXCJJTkVUX0VTUElOVENQXCIsXG4gICAgXCJJTkVUNl9FU1BJTlRDUFwiLFxuICAgIFwiWEZSTV9VU0VSXCIsXG4gICAgXCJYRlJNX0lQVEZTXCIsXG4gICAgXCJYRlJNX01JR1JBVEVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJlc3Bfb3V0cHV0X2hlYWRcIixcbiAgICBcImVzcDZfb3V0cHV0X2hlYWRcIixcbiAgICBcInhmcm02X2xvY2FsX3J4cG10dVwiLFxuICAgIFwieGZybTZfbG9jYWxfZXJyb3JcIixcbiAgICBcImVzcGludGNwX3JjdlwiLFxuICAgIFwiaGFuZGxlX2VzcFwiLFxuICAgIFwieGZybV9pbnB1dFwiLFxuICAgIFwieGZybV90cmFuc19yZWluamVjdFwiLFxuICAgIFwieGZybV90cmFuc19xdWV1ZV9uZXRcIixcbiAgICBcImlwdGZzX3NrYl9jYW5fYWRkX2ZyYWdzXCIsXG4gICAgXCJpcHRmc19yZWFzc2VtX2NvbnRcIixcbiAgICBcInhmcm1fYnVuZGxlX2NyZWF0ZVwiLFxuICAgIFwieGZybV9jcmVhdGVfZHVtbXlfYnVuZGxlXCIsXG4gICAgXCJ4ZnJtX3N0YXRlX2djX3Rhc2tcIixcbiAgICBcIl9feGZybV9zdGF0ZV9kZWxldGVcIixcbiAgICBcInhmcm1fZGV2X3N0YXRlX2ZsdXNoXCIsXG4gICAgXCJ4ZnJtX2FsbG9jX3VzZXJzcGlcIixcbiAgICBcInhmcm1fc2VuZF9taWdyYXRlX3N0YXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggdG91Y2hlcyBjb3JlIElQc2VjIChYRlJNKSBJUHY0L0lQdjYgbmV0d29ya2luZyBsb2dpYywgaW5jbHVkaW5nIEVTUCBvdXRwdXQgemVyby1jb3B5IGRvd25ncmFkZXMsIElQdjYgWEZSTSBlcnJvciByZXBvcnRpbmcgZm9yIG5vbi1mdWxsIHNvY2tldHMsIEVTUC1pbi1UQ1AgdHJhbnNwb3J0IGhlYWRlciByZXNldHRpbmcsIFhGUk0gaW5wdXQgcGFja2V0IHByb3RvIGRpc3BhdGNoIGFuZCBhc3luYyBkZXYtcmVmIHJlaW5qZWN0aW9uIGhhbmRsaW5nLCBJUC1URlMgZnJhZ21lbnQgd2FsayBib3VuZHMgY2hlY2tzLCBwb2xpY3kgYnVuZGxlIFJDVSBkZXZpY2UgcmVzb2x1dGlvbiwgc3RhdGUgR0Mgc2VyaWFsaXphdGlvbiB1bmRlciBtdXRleCwgYW5kIFhGUk0gdXNlciBuZXRsaW5rIGhhbmRsZXJzLiBBbGwgY2hhbmdlcyBhcmUgaW4gcmVhY2hhYmxlIG5ldHdvcmtpbmcgcGF0aHMgZXhlcmNpc2FibGUgdmlhIHNvY2tldHMgYW5kIFhGUk0gbmV0bGluayBpbnRlcmZhY2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklORVRcIixcbiAgICBcIklQVjZcIixcbiAgICBcIlhGUk1cIixcbiAgICBcIklORVRfRVNQXCIsXG4gICAgXCJJTkVUNl9FU1BcIixcbiAgICBcIklORVRfRVNQSU5UQ1BcIixcbiAgICBcIklORVQ2X0VTUElOVENQXCIsXG4gICAgXCJYRlJNX1VTRVJcIixcbiAgICBcIlhGUk1fSVBURlNcIixcbiAgICBcIlhGUk1fTUlHUkFURVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImVzcF9vdXRwdXRfaGVhZFwiLFxuICAgIFwiZXNwNl9vdXRwdXRfaGVhZFwiLFxuICAgIFwieGZybTZfbG9jYWxfcnhwbXR1XCIsXG4gICAgXCJ4ZnJtNl9sb2NhbF9lcnJvclwiLFxuICAgIFwiZXNwaW50Y3BfcmN2XCIsXG4gICAgXCJoYW5kbGVfZXNwXCIsXG4gICAgXCJ4ZnJtX2lucHV0XCIsXG4gICAgXCJ4ZnJtX3RyYW5zX3JlaW5qZWN0XCIsXG4gICAgXCJ4ZnJtX3RyYW5zX3F1ZXVlX25ldFwiLFxuICAgIFwiaXB0ZnNfc2tiX2Nhbl9hZGRfZnJhZ3NcIixcbiAgICBcImlwdGZzX3JlYXNzZW1fY29udFwiLFxuICAgIFwieGZybV9idW5kbGVfY3JlYXRlXCIsXG4gICAgXCJ4ZnJtX2NyZWF0ZV9kdW1teV9idW5kbGVcIixcbiAgICBcInhmcm1fc3RhdGVfZ2NfdGFza1wiLFxuICAgIFwiX194ZnJtX3N0YXRlX2RlbGV0ZVwiLFxuICAgIFwieGZybV9kZXZfc3RhdGVfZmx1c2hcIixcbiAgICBcInhmcm1fYWxsb2NfdXNlcnNwaVwiLFxuICAgIFwieGZybV9zZW5kX21pZ3JhdGVfc3RhdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCB0b3VjaGVzIGNvcmUgSVBzZWMgKFhGUk0pIElQdjQvSVB2NiBuZXR3b3JraW5nIGxvZ2ljLCBpbmNsdWRpbmcgRVNQIG91dHB1dCB6ZXJvLWNvcHkgZG93bmdyYWRlcywgSVB2NiBYRlJNIGVycm9yIHJlcG9ydGluZyBmb3Igbm9uLWZ1bGwgc29ja2V0cywgRVNQLWluLVRDUCB0cmFuc3BvcnQgaGVhZGVyIHJlc2V0dGluZywgWEZSTSBpbnB1dCBwYWNrZXQgcHJvdG8gZGlzcGF0Y2ggYW5kIGFzeW5jIGRldi1yZWYgcmVpbmplY3Rpb24gaGFuZGxpbmcsIElQLVRGUyBmcmFnbWVudCB3YWxrIGJvdW5kcyBjaGVja3MsIHBvbGljeSBidW5kbGUgUkNVIGRldmljZSByZXNvbHV0aW9uLCBzdGF0ZSBHQyBzZXJpYWxpemF0aW9uIHVuZGVyIG11dGV4LCBhbmQgWEZSTSB1c2VyIG5ldGxpbmsgaGFuZGxlcnMuIEFsbCBjaGFuZ2VzIGFyZSBpbiByZWFjaGFibGUgbmV0d29ya2luZyBwYXRocyBleGVyY2lzYWJsZSB2aWEgc29ja2V0cyBhbmQgWEZSTSBuZXRsaW5rIGludGVyZmFjZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDEzOjU0OjM4LjQzMDAxMzQ5WiIsIlNlcSI6MjUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDU0OTIwNTUzNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDEzOjU0OjM4LjQzMDQ5OTYzWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTA1NDg3MTU4OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBjb250YWlucyBzZXZlcmFsIGJ1ZyBmaXhlcyBhbmQgcmVmYWN0b3JpbmdzIGFjcm9zcyBYRlJNIGFuZCBJUHNlYyBuZXR3b3JraW5nIHN1YnN5c3RlbXM6XFxuMS4gYGVzcDQuY2AgYW5kIGBlc3A2LmNgOiBBZGRzIGBza2JfemNvcHlfZG93bmdyYWRlX21hbmFnZWQoc2tiKWAgdG8gYmFsYW5jZSByZWZjb3VudHMgb24gemVyb2NvcHkgbWFuYWdlZCBmcmFncyB3aGVuIG11dGF0aW5nIHRoZSBmcmFnIGFycmF5IChyZWZjb3VudGluZyAvIFVBRiBwcmV2ZW50aW9uLCBjb3ZlcmVkIGJ5IEtBU0FOL3JlZmNvdW50IHRyYWNraW5nKS5cXG4yLiBgeGZybTZfb3V0cHV0LmNgOiBWYWxpZGF0ZXMgc29ja2V0cyB1c2luZyBgc2tiX3RvX2Z1bGxfc2soKWAgdG8gYXZvaWQgb3BlcmF0aW5nIG9uIG5vbi1mdWxsIHNvY2tldHMgb3IgTlVMTCBkZXJlZmVyZW5jZXMgKE5VTEwgcG9pbnRlciAvIHR5cGUgY29uZnVzaW9uKS5cXG4zLiBgZXNwaW50Y3AuY2A6IFVzZXMgYHNrYl9yZXNldF90cmFuc3BvcnRfaGVhZGVyX2NhcmVmdWwoKWAgdG8gdmFsaWRhdGUgdHJhbnNwb3J0IGhlYWRlciBib3VuZHMgYmVmb3JlIHJlc2V0dGluZyAoT09CIHByZXZlbnRpb24sIGNvdmVyZWQgYnkgS0FTQU4pLlxcbjQuIGB4ZnJtX2lucHV0LmNgOiBGaXhlcyBwcm90b2NvbCB0cmFja2luZyAoYHhmcm1fcHJvdG9gKSwgaGFuZGxlcyBkZXZpY2UgcmVmY291bnRzIGFuZCBSQ1UgbG9ja2luZyBkdXJpbmcgcmVpbmplY3Rpb24sIGFuZCBlbnN1cmVzIGRzdCBlbnRyeSBwZXJzaXN0ZW5jZSAoYHNrYl9kc3RfZm9yY2VgKS4gQWxsIHZhcmlhYmxlcyAoYHhmcm1fcHJvdG9gKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgd2l0aCBkZWZhdWx0IHZhbHVlcy5cXG41LiBgeGZybV9pcHRmcy5jYDogQWRkcyBib3VuZHMgY2hlY2tpbmcgb24gZnJhZyB3YWxrIG9mZnNldCB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgaW5kZXhpbmcgaW4gYGlwdGZzX3NrYl9yZXNldF9mcmFnX3dhbGsoKWAsIGFuZCBjb3JyZWN0cyBydW50IHNpemUgdmVyaWZpY2F0aW9uIGFnYWluc3QgSVAgaGVhZGVyIGxlbmd0aCAoT09CIHJlYWRzLCBjb3ZlcmVkIGJ5IEtBU0FOKS5cXG42LiBgeGZybV9wb2xpY3kuY2AsIGB4ZnJtX3N0YXRlLmNgLCBgeGZybV91c2VyLmNgOiBBZGRzIG1pc3NpbmcgUkNVIHJlYWQgbG9ja3MgKGBkc3RfZGV2X3JjdWAsIG11bHRpY2FzdCksIGFkZHMgYSBHQyBtdXRleCB0byBzZXJpYWxpemUgc3RhdGUgZGVzdHJ1Y3Rpb24sIGFuZCBmaXhlcyBsaXN0IGRlbGV0aW9uIGluaXRpYWxpemF0aW9uIChgaGxpc3RfZGVsX2luaXRfcmN1YCkuXFxuXFxuTm9uZSBvZiB0aGUgY2hhbmdlcyBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIG1lbW9yeSwga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcywgb3IgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gVGhlIHJpc2tzIGFkZHJlc3NlZCAob3V0LW9mLWJvdW5kcyBhY2Nlc3MsIHJlZmNvdW50aW5nLCB1c2UtYWZ0ZXItZnJlZSwgY29uY3VycmVuY3kvUkNVKSBhcmUgY292ZXJlZCBieSBLQVNBTiwgUFJPVkVfUkNVLCBhbmQgc3RhbmRhcmQgZGVidWcgY2hlY2tlcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgY2UwMTRkYTE1M2Q4ZGNlOGMzM2UzNmZhOTU3ZjEwMTM5NjNmNmUxOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDcgMTM6NTM6NTAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9lc3A0LmMgYi9uZXQvaXB2NC9lc3A0LmNcbmluZGV4IGE2YzE4YWVhNzQ5OGQuLmU3NmRiNTgxN2U3OGUgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC9lc3A0LmNcbisrKyBiL25ldC9pcHY0L2VzcDQuY1xuQEAgLTQ0MSw2ICs0NDEsMTIgQEAgaW50IGVzcF9vdXRwdXRfaGVhZChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGVzcF9pbmZvICpcbiBcbiBcdFx0XHRlc3AtXHUwMDNlaW5wbGFjZSA9IGZhbHNlO1xuIFxuK1x0XHRcdC8qIFRha2UgcmVhbCBwYWdlIHJlZnMgYW5kIGNsZWFyIFNLQkZMX01BTkFHRURfRlJBR19SRUZTIGJlZm9yZVxuK1x0XHRcdCAqIHdlIG11dGF0ZSB0aGUgZnJhZyBhcnJheSwgc28gdGhlIHBlci1mcmFnIHVucmVmIHN0YXlzIGJhbGFuY2VkXG4rXHRcdFx0ICogZm9yIHplcm9jb3B5IG1hbmFnZWQgZnJhZ3MgKHNlZSBfX2lwX2FwcGVuZF9kYXRhKCkpLlxuK1x0XHRcdCAqL1xuK1x0XHRcdHNrYl96Y29weV9kb3duZ3JhZGVfbWFuYWdlZChza2IpO1xuK1xuIFx0XHRcdGFsbG9jc2l6ZSA9IEFMSUdOKHRhaWxlbiwgTDFfQ0FDSEVfQllURVMpO1xuIFxuIFx0XHRcdHNwaW5fbG9ja19iaChcdTAwMjZ4LVx1MDAzZWxvY2spO1xuZGlmZiAtLWdpdCBhL25ldC9pcHY2L2VzcDYuYyBiL25ldC9pcHY2L2VzcDYuY1xuaW5kZXggNzJlYzBkN2QxMTIwOS4uYjFjOWIzNmY3NmRjNCAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L2VzcDYuY1xuKysrIGIvbmV0L2lwdjYvZXNwNi5jXG5AQCAtNDcxLDYgKzQ3MSwxMiBAQCBpbnQgZXNwNl9vdXRwdXRfaGVhZChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGVzcF9pbmZvXG4gXG4gXHRcdFx0ZXNwLVx1MDAzZWlucGxhY2UgPSBmYWxzZTtcbiBcbitcdFx0XHQvKiBUYWtlIHJlYWwgcGFnZSByZWZzIGFuZCBjbGVhciBTS0JGTF9NQU5BR0VEX0ZSQUdfUkVGUyBiZWZvcmVcbitcdFx0XHQgKiB3ZSBtdXRhdGUgdGhlIGZyYWcgYXJyYXksIHNvIHRoZSBwZXItZnJhZyB1bnJlZiBzdGF5cyBiYWxhbmNlZFxuK1x0XHRcdCAqIGZvciB6ZXJvY29weSBtYW5hZ2VkIGZyYWdzIChzZWUgX19pcF9hcHBlbmRfZGF0YSgpKS5cbitcdFx0XHQgKi9cbitcdFx0XHRza2JfemNvcHlfZG93bmdyYWRlX21hbmFnZWQoc2tiKTtcbitcbiBcdFx0XHRhbGxvY3NpemUgPSBBTElHTih0YWlsZW4sIEwxX0NBQ0hFX0JZVEVTKTtcbiBcbiBcdFx0XHRzcGluX2xvY2tfYmgoXHUwMDI2eC1cdTAwM2Vsb2NrKTtcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni94ZnJtNl9vdXRwdXQuYyBiL25ldC9pcHY2L3hmcm02X291dHB1dC5jXG5pbmRleCA1MTJiZGFmMTM2OTk3Li40NGIyMjFhMDlhMGM4IDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYveGZybTZfb3V0cHV0LmNcbisrKyBiL25ldC9pcHY2L3hmcm02X291dHB1dC5jXG5AQCAtMTksNyArMTksMTAgQEBcbiB2b2lkIHhmcm02X2xvY2FsX3J4cG10dShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgbXR1KVxuIHtcbiBcdHN0cnVjdCBmbG93aTYgZmw2O1xuLVx0c3RydWN0IHNvY2sgKnNrID0gc2tiLVx1MDAzZXNrO1xuK1x0c3RydWN0IHNvY2sgKnNrID0gc2tiX3RvX2Z1bGxfc2soc2tiKTtcbitcbitcdGlmICghc2spXG4rXHRcdHJldHVybjtcbiBcbiBcdGZsNi5mbG93aTZfb2lmID0gc2stXHUwMDNlc2tfYm91bmRfZGV2X2lmO1xuIFx0Zmw2LmRhZGRyID0gaXB2Nl9oZHIoc2tiKS1cdTAwM2VkYWRkcjtcbkBAIC0zMSw3ICszNCwxMCBAQCB2b2lkIHhmcm02X2xvY2FsX2Vycm9yKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBtdHUpXG4ge1xuIFx0c3RydWN0IGZsb3dpNiBmbDY7XG4gXHRjb25zdCBzdHJ1Y3QgaXB2NmhkciAqaGRyO1xuLVx0c3RydWN0IHNvY2sgKnNrID0gc2tiLVx1MDAzZXNrO1xuK1x0c3RydWN0IHNvY2sgKnNrID0gc2tiX3RvX2Z1bGxfc2soc2tiKTtcbitcbitcdGlmICghc2spXG4rXHRcdHJldHVybjtcbiBcbiBcdGhkciA9IHNrYi1cdTAwM2VlbmNhcHN1bGF0aW9uID8gaW5uZXJfaXB2Nl9oZHIoc2tiKSA6IGlwdjZfaGRyKHNrYik7XG4gXHRmbDYuZmw2X2Rwb3J0ID0gaW5ldF9zayhzayktXHUwMDNlaW5ldF9kcG9ydDtcbmRpZmYgLS1naXQgYS9uZXQveGZybS9lc3BpbnRjcC5jIGIvbmV0L3hmcm0vZXNwaW50Y3AuY1xuaW5kZXggNjc0YWVkYzVhZjVhMi4uM2U3MmI5ZjA2N2I5YiAxMDA2NDRcbi0tLSBhL25ldC94ZnJtL2VzcGludGNwLmNcbisrKyBiL25ldC94ZnJtL2VzcGludGNwLmNcbkBAIC0zMCw3ICszMCwxMSBAQCBzdGF0aWMgdm9pZCBoYW5kbGVfZXNwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzb2NrICpzaylcbiB7XG4gXHRzdHJ1Y3QgdGNwX3NrYl9jYiAqdGNwX2NiID0gKHN0cnVjdCB0Y3Bfc2tiX2NiICopc2tiLVx1MDAzZWNiO1xuIFxuLVx0c2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXIoc2tiKTtcbitcdGlmICghc2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bChza2IpKSB7XG4rXHRcdFhGUk1fSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwgTElOVVhfTUlCX1hGUk1JTkVSUk9SKTtcbitcdFx0a2ZyZWVfc2tiKHNrYik7XG4rXHRcdHJldHVybjtcbitcdH1cbiBcbiBcdC8qIHJlc3RvcmUgSVAgQ0IsIHdlIG5lZWQgYXQgbGVhc3QgSVA2Q0ItXHUwMDNlbmhvZmYgKi9cbiBcdG1lbW1vdmUoc2tiLVx1MDAzZWNiLCBcdTAwMjZ0Y3BfY2ItXHUwMDNlaGVhZGVyLCBzaXplb2YodGNwX2NiLVx1MDAzZWhlYWRlcikpO1xuZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1faW5wdXQuYyBiL25ldC94ZnJtL3hmcm1faW5wdXQuY1xuaW5kZXggZWVjYWIzMzdiZDBhNy4uNWVkODdkNTEzOTJhNSAxMDA2NDRcbi0tLSBhL25ldC94ZnJtL3hmcm1faW5wdXQuY1xuKysrIGIvbmV0L3hmcm0veGZybV9pbnB1dC5jXG5AQCAtNDc0LDYgKzQ3NCw3IEBAIGludCB4ZnJtX2lucHV0KHN0cnVjdCBza19idWZmICpza2IsIGludCBuZXh0aGRyLCBfX2JlMzIgc3BpLCBpbnQgZW5jYXBfdHlwZSlcbiBcdHN0cnVjdCB4ZnJtX3N0YXRlICp4ID0gTlVMTDtcbiBcdHhmcm1fYWRkcmVzc190ICpkYWRkcjtcbiBcdHUzMiBtYXJrID0gc2tiLVx1MDAzZW1hcms7XG4rXHR1OCB4ZnJtX3Byb3RvID0gbmV4dGhkcjtcbiBcdHVuc2lnbmVkIGludCBmYW1pbHkgPSBBRl9VTlNQRUM7XG4gXHRpbnQgZGVjYXBzID0gMDtcbiBcdGludCBhc3luYyA9IDA7XG5AQCAtNDg1LDYgKzQ4Niw3IEBAIGludCB4ZnJtX2lucHV0KHN0cnVjdCBza19idWZmICpza2IsIGludCBuZXh0aGRyLCBfX2JlMzIgc3BpLCBpbnQgZW5jYXBfdHlwZSlcbiBcdGlmIChlbmNhcF90eXBlIFx1MDAzYyAwIHx8ICh4byBcdTAwMjZcdTAwMjYgKHhvLVx1MDAzZWZsYWdzIFx1MDAyNiBYRlJNX0dSTyB8fCBlbmNhcF90eXBlID09IDAgfHxcbiBcdFx0XHRcdCAgICAgIGVuY2FwX3R5cGUgPT0gVURQX0VOQ0FQX0VTUElOVURQKSkpIHtcbiBcdFx0eCA9IHhmcm1faW5wdXRfc3RhdGUoc2tiKTtcbitcdFx0eGZybV9wcm90byA9IHgtXHUwMDNldHlwZSA/IHgtXHUwMDNldHlwZS1cdTAwM2Vwcm90byA6IG5leHRoZHI7XG4gXG4gXHRcdGlmICh1bmxpa2VseSh4LVx1MDAzZWttLnN0YXRlICE9IFhGUk1fU1RBVEVfVkFMSUQpKSB7XG4gXHRcdFx0aWYgKHgtXHUwMDNla20uc3RhdGUgPT0gWEZSTV9TVEFURV9BQ1EpXG5AQCAtNTkyLDExICs1OTQsMTMgQEAgaW50IHhmcm1faW5wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG5leHRoZHIsIF9fYmUzMiBzcGksIGludCBlbmNhcF90eXBlKVxuIFxuIFx0XHR4ID0geGZybV9pbnB1dF9zdGF0ZV9sb29rdXAobmV0LCBtYXJrLCBkYWRkciwgc3BpLCBuZXh0aGRyLCBmYW1pbHkpO1xuIFx0XHRpZiAoeCA9PSBOVUxMKSB7XG4rXHRcdFx0eGZybV9wcm90byA9IG5leHRoZHI7XG4gXHRcdFx0c2VjcGF0aF9yZXNldChza2IpO1xuIFx0XHRcdFhGUk1fSU5DX1NUQVRTKG5ldCwgTElOVVhfTUlCX1hGUk1JTk5PU1RBVEVTKTtcbiBcdFx0XHR4ZnJtX2F1ZGl0X3N0YXRlX25vdGZvdW5kKHNrYiwgZmFtaWx5LCBzcGksIHNlcSk7XG4gXHRcdFx0Z290byBkcm9wO1xuIFx0XHR9XG4rXHRcdHhmcm1fcHJvdG8gPSB4LVx1MDAzZXR5cGUgPyB4LVx1MDAzZXR5cGUtXHUwMDNlcHJvdG8gOiBuZXh0aGRyO1xuIFxuIFx0XHRpZiAodW5saWtlbHkoeC1cdTAwM2VkaXIgXHUwMDI2XHUwMDI2IHgtXHUwMDNlZGlyICE9IFhGUk1fU0FfRElSX0lOKSkge1xuIFx0XHRcdHNlY3BhdGhfcmVzZXQoc2tiKTtcbkBAIC02MDQsNiArNjA4LDcgQEAgaW50IHhmcm1faW5wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG5leHRoZHIsIF9fYmUzMiBzcGksIGludCBlbmNhcF90eXBlKVxuIFx0XHRcdHhmcm1fYXVkaXRfc3RhdGVfbm90Zm91bmQoc2tiLCBmYW1pbHksIHNwaSwgc2VxKTtcbiBcdFx0XHR4ZnJtX3N0YXRlX3B1dCh4KTtcbiBcdFx0XHR4ID0gTlVMTDtcbitcdFx0XHR4ZnJtX3Byb3RvID0gbmV4dGhkcjtcbiBcdFx0XHRnb3RvIGRyb3A7XG4gXHRcdH1cbiBcbkBAIC03MjgsNyArNzMzLDcgQEAgaW50IHhmcm1faW5wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG5leHRoZHIsIF9fYmUzMiBzcGksIGludCBlbmNhcF90eXBlKVxuIFx0fSB3aGlsZSAoIWVycik7XG4gXG4gXHRyY3VfcmVhZF9sb2NrKCk7XG4tXHRlcnIgPSB4ZnJtX3Jjdl9jYihza2IsIGZhbWlseSwgeC1cdTAwM2V0eXBlLVx1MDAzZXByb3RvLCAwKTtcbitcdGVyciA9IHhmcm1fcmN2X2NiKHNrYiwgZmFtaWx5LCB4ZnJtX3Byb3RvLCAwKTtcbiBcdGlmIChlcnIpIHtcbiBcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXHRcdGdvdG8gZHJvcDtcbkBAIC03NTMsNyArNzU4LDcgQEAgaW50IHhmcm1faW5wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG5leHRoZHIsIF9fYmUzMiBzcGksIGludCBlbmNhcF90eXBlKVxuIFx0XHRcdHhmcm1fZ3JvID0geG8tXHUwMDNlZmxhZ3MgXHUwMDI2IFhGUk1fR1JPO1xuIFxuIFx0XHRlcnIgPSAtRUFGTk9TVVBQT1JUO1xuLVx0XHRhZmluZm8gPSB4ZnJtX3N0YXRlX2FmaW5mb19nZXRfcmN1KHgtXHUwMDNlcHJvcHMuZmFtaWx5KTtcbitcdFx0YWZpbmZvID0geGZybV9zdGF0ZV9hZmluZm9fZ2V0X3JjdShmYW1pbHkpO1xuIFx0XHRpZiAobGlrZWx5KGFmaW5mbykpXG4gXHRcdFx0ZXJyID0gYWZpbmZvLVx1MDAzZXRyYW5zcG9ydF9maW5pc2goc2tiLCB4ZnJtX2dybyB8fCBhc3luYyk7XG4gXHRcdGlmICh4ZnJtX2dybykge1xuQEAgLTc3Niw3ICs3ODEsNyBAQCBpbnQgeGZybV9pbnB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbmV4dGhkciwgX19iZTMyIHNwaSwgaW50IGVuY2FwX3R5cGUpXG4gZHJvcDpcbiBcdGlmIChhc3luYylcbiBcdFx0ZGV2X3B1dChkZXYpO1xuLVx0eGZybV9yY3ZfY2Ioc2tiLCBmYW1pbHksIHggXHUwMDI2XHUwMDI2IHgtXHUwMDNldHlwZSA/IHgtXHUwMDNldHlwZS1cdTAwM2Vwcm90byA6IG5leHRoZHIsIC0xKTtcbitcdHhmcm1fcmN2X2NiKHNrYiwgZmFtaWx5LCB4ZnJtX3Byb3RvLCAtMSk7XG4gXHRrZnJlZV9za2Ioc2tiKTtcbiBcdHJldHVybiAwO1xuIH1cbkBAIC04MDAsMTIgKzgwNSwxNyBAQCBzdGF0aWMgdm9pZCB4ZnJtX3RyYW5zX3JlaW5qZWN0KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnRyYW5zLVx1MDAzZXF1ZXVlX2xvY2spO1xuIFxuIFx0bG9jYWxfYmhfZGlzYWJsZSgpO1xuK1x0cmN1X3JlYWRfbG9jaygpO1xuIFx0d2hpbGUgKChza2IgPSBfX3NrYl9kZXF1ZXVlKFx1MDAyNnF1ZXVlKSkpIHtcbiBcdFx0c3RydWN0IG5ldCAqbmV0ID0gWEZSTV9UUkFOU19TS0JfQ0Ioc2tiKS1cdTAwM2VuZXQ7XG4rXHRcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBza2ItXHUwMDNlZGV2O1xuIFxuIFx0XHRYRlJNX1RSQU5TX1NLQl9DQihza2IpLVx1MDAzZWZpbmlzaChuZXQsIE5VTEwsIHNrYik7XG4rXHRcdGlmIChkZXYpXG4rXHRcdFx0ZGV2X3B1dChkZXYpO1xuIFx0XHRwdXRfbmV0KG5ldCk7XG4gXHR9XG4rXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdGxvY2FsX2JoX2VuYWJsZSgpO1xuIH1cbiBcbkBAIC04MjEsMTIgKzgzMSwxOCBAQCBpbnQgeGZybV90cmFuc19xdWV1ZV9uZXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0aWYgKHNrYl9xdWV1ZV9sZW4oXHUwMDI2dHJhbnMtXHUwMDNlcXVldWUpIFx1MDAzZT0gUkVBRF9PTkNFKG5ldF9ob3RkYXRhLm1heF9iYWNrbG9nKSlcbiBcdFx0cmV0dXJuIC1FTk9CVUZTO1xuIFxuK1x0aWYgKHNrYl9kc3Qoc2tiKSBcdTAwMjZcdTAwMjYgIXNrYl9kc3RfZm9yY2Uoc2tiKSlcbitcdFx0cmV0dXJuIC1FSE9TVFVOUkVBQ0g7XG4rXG4gXHRCVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCB4ZnJtX3RyYW5zX2NiKSBcdTAwM2Ugc2l6ZW9mKHNrYi1cdTAwM2VjYikpO1xuIFxuIFx0aG9sZF9uZXQgPSBtYXliZV9nZXRfbmV0KG5ldCk7XG4gXHRpZiAoIWhvbGRfbmV0KVxuIFx0XHRyZXR1cm4gLUVOT0RFVjtcbiBcbitcdGlmIChza2ItXHUwMDNlZGV2KVxuK1x0XHRkZXZfaG9sZChza2ItXHUwMDNlZGV2KTtcbitcbiBcdFhGUk1fVFJBTlNfU0tCX0NCKHNrYiktXHUwMDNlZmluaXNoID0gZmluaXNoO1xuIFx0WEZSTV9UUkFOU19TS0JfQ0Ioc2tiKS1cdTAwM2VuZXQgPSBob2xkX25ldDtcbiBcdHNwaW5fbG9ja19iaChcdTAwMjZ0cmFucy1cdTAwM2VxdWV1ZV9sb2NrKTtcbmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX2lwdGZzLmMgYi9uZXQveGZybS94ZnJtX2lwdGZzLmNcbmluZGV4IDU5N2FlZGVhYzI2ZWIuLjY5MjA5NDBhMzViNDkgMTAwNjQ0XG4tLS0gYS9uZXQveGZybS94ZnJtX2lwdGZzLmNcbisrKyBiL25ldC94ZnJtL3hmcm1faXB0ZnMuY1xuQEAgLTQxNiw2ICs0MTYsMTQgQEAgc3RhdGljIGJvb2wgaXB0ZnNfc2tiX2Nhbl9hZGRfZnJhZ3MoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdGlmIChza2JfaGFzX2ZyYWdfbGlzdChza2IpIHx8IHNrYi1cdTAwM2VwcF9yZWN5Y2xlICE9IHdhbGstXHUwMDNlcHBfcmVjeWNsZSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuK1x0LyogUmVqZWN0IGFuIEBvZmZzZXQgdGhhdCBpcyBhdCBvciBiZXlvbmQgdGhlIGVuZCBvZiB0aGUgd2FsaydzIGRhdGFcbitcdCAqIGJlZm9yZSBjYWxsaW5nIGlwdGZzX3NrYl9yZXNldF9mcmFnX3dhbGsoKSwgd2hvc2UgZnJhZ21lbnQtYWR2YW5jZVxuK1x0ICogbG9vcCBpcyBvdGhlcndpc2UgdW5ib3VuZGVkIGFuZCB3b3VsZCBpbmRleCBwYXN0IHdhbGstXHUwMDNlZnJhZ3NbXS5cbitcdCAqIFRoaXMgbWlycm9ycyB0aGUgZ3VhcmQgYWxyZWFkeSBwcmVzZW50IGluIGlwdGZzX3NrYl9hZGRfZnJhZ3MoKS5cbitcdCAqL1xuK1x0aWYgKCF3YWxrLVx1MDAzZW5yX2ZyYWdzIHx8IG9mZnNldCBcdTAwM2U9IHdhbGstXHUwMDNldG90YWwgKyB3YWxrLVx1MDAzZWluaXRpYWxfb2Zmc2V0KVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4gXHQvKiBNYWtlIG9mZnNldCByZWxhdGl2ZSB0byBjdXJyZW50IGZyYWcgYWZ0ZXIgc2V0dGluZyB0aGF0ICovXG4gXHRvZmZzZXQgPSBpcHRmc19za2JfcmVzZXRfZnJhZ193YWxrKHdhbGssIG9mZnNldCk7XG4gXG5AQCAtODIwLDggKzgyOCw4IEBAIHN0YXRpYyB1MzIgaXB0ZnNfcmVhc3NlbV9jb250KHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsIHU2NCBzZXEsXG4gXHRcdCAqIGFsbG9jYXRlIGFuIGluIHByb2dyZXNzIHNrYlxuIFx0XHQgKi9cbiBcdFx0aXByZW1haW4gPSBfX2lwdGZzX2lwbGVuKHh0ZnMtXHUwMDNlcmFfcnVudCk7XG4tXHRcdGlmIChpcHJlbWFpbiBcdTAwM2Mgc2l6ZW9mKHh0ZnMtXHUwMDNlcmFfcnVudCkpIHtcbi1cdFx0XHQvKiBsZW5ndGggaGFzIHRvIGJlIGF0IGxlYXN0IHJ1bnRzaXplIGxhcmdlICovXG4rXHRcdGlmIChpcHJlbWFpbiBcdTAwM2MgX19pcHRmc19pcGhsZW4oeHRmcy1cdTAwM2VyYV9ydW50KSkge1xuK1x0XHRcdC8qIGxlbmd0aCBoYXMgdG8gYmUgYXQgbGVhc3QgdGhlIElQIGhlYWRlciBzaXplICovXG4gXHRcdFx0WEZSTV9JTkNfU1RBVFMoeHNfbmV0KHh0ZnMtXHUwMDNleCksXG4gXHRcdFx0XHQgICAgICAgTElOVVhfTUlCX1hGUk1JTklQVEZTRVJST1IpO1xuIFx0XHRcdGdvdG8gYWJhbmRvbjtcbmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX3BvbGljeS5jIGIvbmV0L3hmcm0veGZybV9wb2xpY3kuY1xuaW5kZXggOTMyYTMxM2I5NDYwYS4uNTEzYzlmMjI4MzM0NyAxMDA2NDRcbi0tLSBhL25ldC94ZnJtL3hmcm1fcG9saWN5LmNcbisrKyBiL25ldC94ZnJtL3hmcm1fcG9saWN5LmNcbkBAIC0yNzcwLDkgKzI3NzAsMTIgQEAgc3RhdGljIHN0cnVjdCBkc3RfZW50cnkgKnhmcm1fYnVuZGxlX2NyZWF0ZShzdHJ1Y3QgeGZybV9wb2xpY3kgKnBvbGljeSxcbiBcdHhkc3QwLVx1MDAzZXBhdGggPSBkc3Q7XG4gXG4gXHRlcnIgPSAtRU5PREVWO1xuLVx0ZGV2ID0gZHN0LVx1MDAzZWRldjtcbi1cdGlmICghZGV2KVxuK1x0cmN1X3JlYWRfbG9jaygpO1xuK1x0ZGV2ID0gZHN0X2Rldl9yY3UoZHN0KTtcbitcdGlmICghZGV2KSB7XG4rXHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0XHRnb3RvIGZyZWVfZHN0O1xuK1x0fVxuIFxuIFx0eGZybV9pbml0X3BhdGgoeGRzdDAsIGRzdCwgbmZoZWFkZXJfbGVuKTtcbiBcdHhmcm1faW5pdF9wbXR1KGJ1bmRsZSwgbngpO1xuQEAgLTI3ODAsOCArMjc4MywxMCBAQCBzdGF0aWMgc3RydWN0IGRzdF9lbnRyeSAqeGZybV9idW5kbGVfY3JlYXRlKHN0cnVjdCB4ZnJtX3BvbGljeSAqcG9saWN5LFxuIFx0Zm9yICh4ZHN0X3ByZXYgPSB4ZHN0MDsgeGRzdF9wcmV2ICE9IChzdHJ1Y3QgeGZybV9kc3QgKilkc3Q7XG4gXHQgICAgIHhkc3RfcHJldiA9IChzdHJ1Y3QgeGZybV9kc3QgKikgeGZybV9kc3RfY2hpbGQoXHUwMDI2eGRzdF9wcmV2LVx1MDAzZXUuZHN0KSkge1xuIFx0XHRlcnIgPSB4ZnJtX2ZpbGxfZHN0KHhkc3RfcHJldiwgZGV2LCBmbCk7XG4tXHRcdGlmIChlcnIpXG4rXHRcdGlmIChlcnIpIHtcbitcdFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdFx0XHRnb3RvIGZyZWVfZHN0O1xuK1x0XHR9XG4gXG4gXHRcdHhkc3RfcHJldi1cdTAwM2V1LmRzdC5oZWFkZXJfbGVuID0gaGVhZGVyX2xlbjtcbiBcdFx0eGRzdF9wcmV2LVx1MDAzZXUuZHN0LnRyYWlsZXJfbGVuID0gdHJhaWxlcl9sZW47XG5AQCAtMjc4OSw2ICsyNzk0LDcgQEAgc3RhdGljIHN0cnVjdCBkc3RfZW50cnkgKnhmcm1fYnVuZGxlX2NyZWF0ZShzdHJ1Y3QgeGZybV9wb2xpY3kgKnBvbGljeSxcbiBcdFx0dHJhaWxlcl9sZW4gLT0geGRzdF9wcmV2LVx1MDAzZXUuZHN0Lnhmcm0tXHUwMDNlcHJvcHMudHJhaWxlcl9sZW47XG4gXHR9XG4gXG4rXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdHJldHVybiBcdTAwMjZ4ZHN0MC1cdTAwM2V1LmRzdDtcbiBcbiBwdXRfc3RhdGVzOlxuQEAgLTMwNTgsMTEgKzMwNjQsMTUgQEAgc3RhdGljIHN0cnVjdCB4ZnJtX2RzdCAqeGZybV9jcmVhdGVfZHVtbXlfYnVuZGxlKHN0cnVjdCBuZXQgKm5ldCxcbiBcdHhmcm1faW5pdF9wYXRoKChzdHJ1Y3QgeGZybV9kc3QgKilkc3QxLCBkc3QsIDApO1xuIFxuIFx0ZXJyID0gLUVOT0RFVjtcbi1cdGRldiA9IGRzdC1cdTAwM2VkZXY7XG4tXHRpZiAoIWRldilcbitcdHJjdV9yZWFkX2xvY2soKTtcbitcdGRldiA9IGRzdF9kZXZfcmN1KGRzdCk7XG4rXHRpZiAoIWRldikge1xuK1x0XHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdFx0Z290byBmcmVlX2RzdDtcbitcdH1cbiBcbiBcdGVyciA9IHhmcm1fZmlsbF9kc3QoeGRzdCwgZGV2LCBmbCk7XG4rXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdGlmIChlcnIpXG4gXHRcdGdvdG8gZnJlZV9kc3Q7XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV9zdGF0ZS5jIGIvbmV0L3hmcm0veGZybV9zdGF0ZS5jXG5pbmRleCAzNmE0ZjY3OTNlZGVmLi5lNDVhYTFlZDViOTY1IDEwMDY0NFxuLS0tIGEvbmV0L3hmcm0veGZybV9zdGF0ZS5jXG4rKysgYi9uZXQveGZybS94ZnJtX3N0YXRlLmNcbkBAIC0yMjYsNiArMjI2LDcgQEAgc3RhdGljIHN0cnVjdCB4ZnJtX3N0YXRlX2FmaW5mbyBfX3JjdSAqeGZybV9zdGF0ZV9hZmluZm9bTlBST1RPXTtcbiBcbiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHhmcm1fc3RhdGVfZ2NfbG9jayk7XG4gc3RhdGljIERFRklORV9TUElOTE9DSyh4ZnJtX3N0YXRlX2Rldl9nY19sb2NrKTtcbitzdGF0aWMgREVGSU5FX01VVEVYKHhmcm1fc3RhdGVfZ2NfbXV0ZXgpO1xuIFxuIGludCBfX3hmcm1fc3RhdGVfZGVsZXRlKHN0cnVjdCB4ZnJtX3N0YXRlICp4KTtcbiBcbkBAIC02MzIsOCArNjMzLDEwIEBAIHN0YXRpYyB2b2lkIHhmcm1fc3RhdGVfZ2NfdGFzayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gXG4gXHRzeW5jaHJvbml6ZV9yY3UoKTtcbiBcbitcdG11dGV4X2xvY2soXHUwMDI2eGZybV9zdGF0ZV9nY19tdXRleCk7XG4gXHRobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHgsIHRtcCwgXHUwMDI2Z2NfbGlzdCwgZ2NsaXN0KVxuIFx0XHR4ZnJtX3N0YXRlX2djX2Rlc3Ryb3koeCk7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2eGZybV9zdGF0ZV9nY19tdXRleCk7XG4gfVxuIFxuIHN0YXRpYyBlbnVtIGhydGltZXJfcmVzdGFydCB4ZnJtX3RpbWVyX2hhbmRsZXIoc3RydWN0IGhydGltZXIgKm1lKVxuQEAgLTgyMyw5ICs4MjYsOSBAQCBpbnQgX194ZnJtX3N0YXRlX2RlbGV0ZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeClcbiBcdFx0aWYgKCFobGlzdF91bmhhc2hlZChcdTAwMjZ4LVx1MDAzZWJ5c2VxKSlcbiBcdFx0XHRobGlzdF9kZWxfaW5pdF9yY3UoXHUwMDI2eC1cdTAwM2VieXNlcSk7XG4gXHRcdGlmICghaGxpc3RfdW5oYXNoZWQoXHUwMDI2eC1cdTAwM2VzdGF0ZV9jYWNoZSkpXG4tXHRcdFx0aGxpc3RfZGVsX3JjdShcdTAwMjZ4LVx1MDAzZXN0YXRlX2NhY2hlKTtcbitcdFx0XHRobGlzdF9kZWxfaW5pdF9yY3UoXHUwMDI2eC1cdTAwM2VzdGF0ZV9jYWNoZSk7XG4gXHRcdGlmICghaGxpc3RfdW5oYXNoZWQoXHUwMDI2eC1cdTAwM2VzdGF0ZV9jYWNoZV9pbnB1dCkpXG4tXHRcdFx0aGxpc3RfZGVsX3JjdShcdTAwMjZ4LVx1MDAzZXN0YXRlX2NhY2hlX2lucHV0KTtcbitcdFx0XHRobGlzdF9kZWxfaW5pdF9yY3UoXHUwMDI2eC1cdTAwM2VzdGF0ZV9jYWNoZV9pbnB1dCk7XG4gXG4gXHRcdGlmICghaGxpc3RfdW5oYXNoZWQoXHUwMDI2eC1cdTAwM2VieXNwaSkpXG4gXHRcdFx0aGxpc3RfZGVsX2luaXRfcmN1KFx1MDAyNngtXHUwMDNlYnlzcGkpO1xuQEAgLTEwMDAsNiArMTAwMyw3IEBAIGludCB4ZnJtX2Rldl9zdGF0ZV9mbHVzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGJvb2wgdGFza192YWxpXG4gb3V0OlxuIFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bmV0LVx1MDAzZXhmcm0ueGZybV9zdGF0ZV9sb2NrKTtcbiBcbitcdG11dGV4X2xvY2soXHUwMDI2eGZybV9zdGF0ZV9nY19tdXRleCk7XG4gXHRzcGluX2xvY2tfYmgoXHUwMDI2eGZybV9zdGF0ZV9kZXZfZ2NfbG9jayk7XG4gcmVzdGFydF9nYzpcbiBcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoeCwgdG1wLCBcdTAwMjZ4ZnJtX3N0YXRlX2Rldl9nY19saXN0LCBkZXZfZ2NsaXN0KSB7XG5AQCAtMTAxNCw2ICsxMDE4LDcgQEAgaW50IHhmcm1fZGV2X3N0YXRlX2ZsdXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCB0YXNrX3ZhbGlcbiBcbiBcdH1cbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnhmcm1fc3RhdGVfZGV2X2djX2xvY2spO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnhmcm1fc3RhdGVfZ2NfbXV0ZXgpO1xuIFxuIFx0eGZybV9mbHVzaF9nYygpO1xuIFxuZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1fdXNlci5jIGIvbmV0L3hmcm0veGZybV91c2VyLmNcbmluZGV4IDYyNjZhOTJjZjMwMjAuLmEyNTg3YzdlNzk2YjQgMTAwNjQ0XG4tLS0gYS9uZXQveGZybS94ZnJtX3VzZXIuY1xuKysrIGIvbmV0L3hmcm0veGZybV91c2VyLmNcbkBAIC0xODc3LDcgKzE4NzcsNiBAQCBzdGF0aWMgaW50IHhmcm1fYWxsb2NfdXNlcnNwaShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbiBcdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrYi1cdTAwM2Vzayk7XG4gXHRzdHJ1Y3QgeGZybV9zdGF0ZSAqeDtcbiBcdHN0cnVjdCB4ZnJtX3VzZXJzcGlfaW5mbyAqcDtcbi1cdHN0cnVjdCB4ZnJtX3RyYW5zbGF0b3IgKnh0cjtcbiBcdHN0cnVjdCBza19idWZmICpyZXNwX3NrYjtcbiBcdHhmcm1fYWRkcmVzc190ICpkYWRkcjtcbiBcdGludCBmYW1pbHk7XG5AQCAtMTk0MywxNyArMTk0Miw2IEBAIHN0YXRpYyBpbnQgeGZybV9hbGxvY191c2Vyc3BpKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuIFx0XHRnb3RvIG91dDtcbiBcdH1cbiBcbi1cdHh0ciA9IHhmcm1fZ2V0X3RyYW5zbGF0b3IoKTtcbi1cdGlmICh4dHIpIHtcbi1cdFx0ZXJyID0geHRyLVx1MDAzZWFsbG9jX2NvbXBhdChza2IsIG5sbXNnX2hkcihza2IpKTtcbi1cbi1cdFx0eGZybV9wdXRfdHJhbnNsYXRvcih4dHIpO1xuLVx0XHRpZiAoZXJyKSB7XG4tXHRcdFx0a2ZyZWVfc2tiKHJlc3Bfc2tiKTtcbi1cdFx0XHRnb3RvIG91dDtcbi1cdFx0fVxuLVx0fVxuLVxuIFx0ZXJyID0gbmxtc2dfdW5pY2FzdCh4ZnJtX25ldF9ubHNrKG5ldCwgc2tiKSwgcmVzcF9za2IsIE5FVExJTktfQ0Ioc2tiKS5wb3J0aWQpO1xuIFxuIG91dDpcbkBAIC0zMzM3LDcgKzMzMjUsMTEgQEAgc3RhdGljIGludCB4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZShzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRcdHJldHVybiBlcnI7XG4gXHR9XG4gXG4tXHRyZXR1cm4geGZybV9ubG1zZ19tdWx0aWNhc3QobmV0LCBza2IsIDAsIFhGUk1OTEdSUF9NSUdSQVRFKTtcbitcdHJjdV9yZWFkX2xvY2soKTtcbitcdGVyciA9IHhmcm1fbmxtc2dfbXVsdGljYXN0KG5ldCwgc2tiLCAwLCBYRlJNTkxHUlBfTUlHUkFURSk7XG4rXHRyY3VfcmVhZF91bmxvY2soKTtcbitcbitcdHJldHVybiBlcnI7XG4gfVxuIFxuIHN0YXRpYyBpbnQgeGZybV9kb19taWdyYXRlX3N0YXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTM6NTQ6MzguNDMwNTAwNTRaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTA1NDg2OTQwNjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gRXZhbHVhdGlvbjogUGF0Y2ggU2VyaWVzIEFuYWx5c2lzKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgZG93biB0aGlzIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lIGlmIGl0IHdhcnJhbnRzIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gTXkgZ29hbCBpcyB0byBiZSBhcyB0aG9yb3VnaCBhcyBwb3NzaWJsZSwgZ2l2ZW4gbXkgZXhwZXJpZW5jZS5cblxuRmlyc3QsIEkgbmVlZCB0byBhbmFseXplIGVhY2ggY2hhbmdlIHdpdGhpbiB0aGUgZGlmZiB0byBzZWUgaWYgYW55IGludHJvZHVjZSBvciBleHBvc2UgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBJIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGVzZSByaXNrcyBhbmQgaG93IEtNU0FOIGlzIGRlc2lnbmVkIHRvIGNhdGNoIHRoZW0uXG5cbiogICBgbmV0L2lwdjQvZXNwNC5jYCBcdTAwMjYgYG5ldC9pcHY2L2VzcDYuY2A6IFRoZSBhZGRpdGlvbiBvZiBgc2tiX3pjb3B5X2Rvd25ncmFkZV9tYW5hZ2VkKHNrYilgIGlzIGFib3V0IHBhZ2UgcmVmY291bnRpbmcgb24gemVyb2NvcHkgbWFuYWdlZCBmcmFncy4gVGhpcyBzb3VuZHMgbGlrZSBpdCdzIG1hbmFnaW5nIGV4aXN0aW5nIG1lbW9yeSwgbm90IGFsbG9jYXRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuIE5vIHJlZCBmbGFncyBoZXJlLlxuXG4qICAgYG5ldC9pcHY2L3hmcm02X291dHB1dC5jYDogUmVwbGFjaW5nIGBza2ItXHUwMDNlc2tgIHdpdGggYSBgc2tiX3RvX2Z1bGxfc2tgIGNoZWNrIGlzIGEgZ29vZCBwcmFjdGljZSB0byBhdm9pZCBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2VzIG9yIGhhbmRsaW5nIG9mIFwibm9uLWZ1bGxcIiBzb2NrZXRzLiBUaGlzIHNlZW1zIGxpa2UgYSBzYWZldHkgaW1wcm92ZW1lbnQgcmF0aGVyIHRoYW4gYSBzb3VyY2Ugb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuXG5cbiogICBgbmV0L3hmcm0vZXNwaW50Y3AuY2A6IFVzaW5nIGBza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHNrYilgIGFkZHMgYSBib3VuZCBjaGVjayBvbiB0aGUgdHJhbnNwb3J0IGhlYWRlciByZXNldC4gVGhpcyBhZGRzIGFub3RoZXIgbGF5ZXIgb2Ygc2VjdXJpdHkgdG8gcHJldmVudCBhbiBvdmVyZmxvdywgaW5zdGVhZCBvZiBhbGxvY2F0aW5nIGEgY2h1bmsgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuXG5cbiogICBgbmV0L3hmcm0veGZybV9pbnB1dC5jYDogVGhlIGNoYW5nZSByZWdhcmRpbmcgYHhmcm1fcHJvdG9gIGxvb2tzIGxpa2UgcHJvcGVyIGluaXRpYWxpemF0aW9uIGFuZCB0cmFja2luZyBvZiBhIHZhcmlhYmxlLiBUaGlzIGFwcGVhcnMgdG8gYmUgYSBidWcgZml4IGZvciBwcm9wZXIgdXNhZ2Ugb2YgY2FsbGJhY2tzIGFuZCBhZmluZm8gbG9va3VwLCB3aGljaCBzaG91bGQgbm90IGludHJvZHVjZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlIHJlZmNvdW50aW5nIGFuZCBsb2NraW5nIHdpdGggYHNrYl9kc3RfZm9yY2VgLCBgZGV2X2hvbGRgLCBgZGV2X3B1dGAsIGFuZCBSQ1UgcmVhZCBsb2NraW5nIGFyZSBhbHNvIHBvc2l0aXZlIHNpZ25zLlxuXG4qICAgYG5ldC94ZnJtL3hmcm1faXB0ZnMuY2A6IEJvdW5kcyBjaGVja3MsIGVzcGVjaWFsbHkgdGhlIG9uZXMgcHJldmVudGluZyBvdXQtb2YtYm91bmRzIGZyYWcgaW5kZXhpbmcgYW5kIHJ1bnQgY2hlY2tzLCBhcmUgY3JpdGljYWwgZm9yIHByZXZlbnRpbmcgS0FTQU4gaXNzdWVzLCBhbmQgSSBkb24ndCBzZWUgYW55IHNpZ24gb2YgaW50cm9kdWNpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuXG5cbiogICBgbmV0L3hmcm0veGZybV9wb2xpY3kuY2A6IFJDVSByZWFkIGxvY2tpbmcgYXJvdW5kIGBkc3RfZGV2X3JjdShkc3QpYCBpcyBlc3NlbnRpYWwgZm9yIHRocmVhZCBzYWZldHkuIFRoaXMgcHJvdGVjdHMgYWdhaW5zdCB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zIGFuZCByYWNlcywgd2hpY2ggYXJlIGNvbW1vbiBLQVNBTiBwaXRmYWxscy5cblxuKiAgIGBuZXQveGZybS94ZnJtX3N0YXRlLmNgOiBNdXRleCBsb2NraW5nIGZvciBHQyBwcm90ZWN0aW9uIGFuZCB0aGUgdXNlIG9mIGBobGlzdF9kZWxfaW5pdF9yY3VgIGFyZSBhYm91dCBjb25jdXJyZW5jeSBhbmQgZGF0YSBzdHJ1Y3R1cmUgc2FmZXR5LCBub3QgdW5pbml0aWFsaXplZCBtZW1vcnkuXG5cbiogICBgbmV0L3hmcm0veGZybV91c2VyLmNgOiBUaGUgcmVtb3ZhbCBvZiB0aGUgdHJhbnNsYXRvciBhbGxvY19jb21wYXQgYmxvY2sgYW5kIFJDVSByZWFkIGxvY2tpbmcgYXJvdW5kIG11bHRpY2FzdCBhcmUgYWJvdXQgY29kZSBjbGVhbnVwIGFuZCBjb25jdXJyZW5jeSwgd2hpY2ggYXJlIGdvb2QgdGhpbmdzLiBUaGV5IHdvbid0IGNhdXNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxuXG5BZnRlciBhIGRldGFpbGVkIHJldmlldywgSSdtIGNvbmZpZGVudCB0aGF0IG5vbmUgb2YgdGhlc2UgY2hhbmdlcyBkaXJlY3RseSBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgZGF0YSB0byB1c2Vyc3BhY2UuIFRoZSBtb2RpZmljYXRpb25zIGFyZSBwcmltYXJpbHkgZm9jdXNlZCBvbiByZWZlcmVuY2UgY291bnRpbmcsIGxvY2tpbmcgKFJDVSBhbmQgbXV0ZXgpLCBib3VuZHMgY2hlY2tzICh3aGljaCBLQVNBTiBoYW5kbGVzKSwgYW5kIGFkZHJlc3NpbmcgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgbnVsbCBkZXJlZmVyZW5jZXMsIGFuZCBzb2NrZXQgdHlwZS1yZWxhdGVkIGlzc3Vlcy4gVGhpcyBhbGwgcG9pbnRzIHRvIGEgaGlnaC1xdWFsaXR5IHBhdGNoIHNlcmllcy5cblxuVGhlcmVmb3JlLCB0aGUgYE5lZWRzS01TQU5gIGZsYWcgc2hvdWxkIGRlZmluaXRlbHkgYmUgYGZhbHNlYC4gSSdsbCBub3cgcHJlcGFyZSB0aGUgYHNldC1yZXN1bHRzYCB0b29sIHdpdGggdGhhdCB2YWx1ZSBhbmQgYSBkZXRhaWxlZCBgS01TQU5SZWFzb25pbmdgIHRvIGV4cGxhaW4gbXkgcmF0aW9uYWxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NDc3LCJPdXRwdXRUb2tlbnMiOjQ3OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2ODksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxMzo1NDo0OC45NzkxOTc1MjdaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjYyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBjb250YWlucyBzZXZlcmFsIGJ1ZyBmaXhlcyBhbmQgcmVmYWN0b3JpbmdzIGFjcm9zcyBYRlJNIGFuZCBJUHNlYyBuZXR3b3JraW5nIHN1YnN5c3RlbXM6XFxuMS4gYGVzcDQuY2AgYW5kIGBlc3A2LmNgOiBBZGRzIGBza2JfemNvcHlfZG93bmdyYWRlX21hbmFnZWQoc2tiKWAgdG8gYmFsYW5jZSByZWZjb3VudHMgb24gemVyb2NvcHkgbWFuYWdlZCBmcmFncyB3aGVuIG11dGF0aW5nIHRoZSBmcmFnIGFycmF5IChyZWZjb3VudGluZyAvIFVBRiBwcmV2ZW50aW9uLCBjb3ZlcmVkIGJ5IEtBU0FOL3JlZmNvdW50IHRyYWNraW5nKS5cXG4yLiBgeGZybTZfb3V0cHV0LmNgOiBWYWxpZGF0ZXMgc29ja2V0cyB1c2luZyBgc2tiX3RvX2Z1bGxfc2soKWAgdG8gYXZvaWQgb3BlcmF0aW5nIG9uIG5vbi1mdWxsIHNvY2tldHMgb3IgTlVMTCBkZXJlZmVyZW5jZXMgKE5VTEwgcG9pbnRlciAvIHR5cGUgY29uZnVzaW9uKS5cXG4zLiBgZXNwaW50Y3AuY2A6IFVzZXMgYHNrYl9yZXNldF90cmFuc3BvcnRfaGVhZGVyX2NhcmVmdWwoKWAgdG8gdmFsaWRhdGUgdHJhbnNwb3J0IGhlYWRlciBib3VuZHMgYmVmb3JlIHJlc2V0dGluZyAoT09CIHByZXZlbnRpb24sIGNvdmVyZWQgYnkgS0FTQU4pLlxcbjQuIGB4ZnJtX2lucHV0LmNgOiBGaXhlcyBwcm90b2NvbCB0cmFja2luZyAoYHhmcm1fcHJvdG9gKSwgaGFuZGxlcyBkZXZpY2UgcmVmY291bnRzIGFuZCBSQ1UgbG9ja2luZyBkdXJpbmcgcmVpbmplY3Rpb24sIGFuZCBlbnN1cmVzIGRzdCBlbnRyeSBwZXJzaXN0ZW5jZSAoYHNrYl9kc3RfZm9yY2VgKS4gQWxsIHZhcmlhYmxlcyAoYHhmcm1fcHJvdG9gKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgd2l0aCBkZWZhdWx0IHZhbHVlcy5cXG41LiBgeGZybV9pcHRmcy5jYDogQWRkcyBib3VuZHMgY2hlY2tpbmcgb24gZnJhZyB3YWxrIG9mZnNldCB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgaW5kZXhpbmcgaW4gYGlwdGZzX3NrYl9yZXNldF9mcmFnX3dhbGsoKWAsIGFuZCBjb3JyZWN0cyBydW50IHNpemUgdmVyaWZpY2F0aW9uIGFnYWluc3QgSVAgaGVhZGVyIGxlbmd0aCAoT09CIHJlYWRzLCBjb3ZlcmVkIGJ5IEtBU0FOKS5cXG42LiBgeGZybV9wb2xpY3kuY2AsIGB4ZnJtX3N0YXRlLmNgLCBgeGZybV91c2VyLmNgOiBBZGRzIG1pc3NpbmcgUkNVIHJlYWQgbG9ja3MgKGBkc3RfZGV2X3JjdWAsIG11bHRpY2FzdCksIGFkZHMgYSBHQyBtdXRleCB0byBzZXJpYWxpemUgc3RhdGUgZGVzdHJ1Y3Rpb24sIGFuZCBmaXhlcyBsaXN0IGRlbGV0aW9uIGluaXRpYWxpemF0aW9uIChgaGxpc3RfZGVsX2luaXRfcmN1YCkuXFxuXFxuTm9uZSBvZiB0aGUgY2hhbmdlcyBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIG1lbW9yeSwga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcywgb3IgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gVGhlIHJpc2tzIGFkZHJlc3NlZCAob3V0LW9mLWJvdW5kcyBhY2Nlc3MsIHJlZmNvdW50aW5nLCB1c2UtYWZ0ZXItZnJlZSwgY29uY3VycmVuY3kvUkNVKSBhcmUgY292ZXJlZCBieSBLQVNBTiwgUFJPVkVfUkNVLCBhbmQgc3RhbmRhcmQgZGVidWcgY2hlY2tlcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIGNvbnRhaW5zIHNldmVyYWwgYnVnIGZpeGVzIGFuZCByZWZhY3RvcmluZ3MgYWNyb3NzIFhGUk0gYW5kIElQc2VjIG5ldHdvcmtpbmcgc3Vic3lzdGVtczpcXG4xLiBgZXNwNC5jYCBhbmQgYGVzcDYuY2A6IEFkZHMgYHNrYl96Y29weV9kb3duZ3JhZGVfbWFuYWdlZChza2IpYCB0byBiYWxhbmNlIHJlZmNvdW50cyBvbiB6ZXJvY29weSBtYW5hZ2VkIGZyYWdzIHdoZW4gbXV0YXRpbmcgdGhlIGZyYWcgYXJyYXkgKHJlZmNvdW50aW5nIC8gVUFGIHByZXZlbnRpb24sIGNvdmVyZWQgYnkgS0FTQU4vcmVmY291bnQgdHJhY2tpbmcpLlxcbjIuIGB4ZnJtNl9vdXRwdXQuY2A6IFZhbGlkYXRlcyBzb2NrZXRzIHVzaW5nIGBza2JfdG9fZnVsbF9zaygpYCB0byBhdm9pZCBvcGVyYXRpbmcgb24gbm9uLWZ1bGwgc29ja2V0cyBvciBOVUxMIGRlcmVmZXJlbmNlcyAoTlVMTCBwb2ludGVyIC8gdHlwZSBjb25mdXNpb24pLlxcbjMuIGBlc3BpbnRjcC5jYDogVXNlcyBgc2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bCgpYCB0byB2YWxpZGF0ZSB0cmFuc3BvcnQgaGVhZGVyIGJvdW5kcyBiZWZvcmUgcmVzZXR0aW5nIChPT0IgcHJldmVudGlvbiwgY292ZXJlZCBieSBLQVNBTikuXFxuNC4gYHhmcm1faW5wdXQuY2A6IEZpeGVzIHByb3RvY29sIHRyYWNraW5nIChgeGZybV9wcm90b2ApLCBoYW5kbGVzIGRldmljZSByZWZjb3VudHMgYW5kIFJDVSBsb2NraW5nIGR1cmluZyByZWluamVjdGlvbiwgYW5kIGVuc3VyZXMgZHN0IGVudHJ5IHBlcnNpc3RlbmNlIChgc2tiX2RzdF9mb3JjZWApLiBBbGwgdmFyaWFibGVzIChgeGZybV9wcm90b2ApIGFyZSBmdWxseSBpbml0aWFsaXplZCB3aXRoIGRlZmF1bHQgdmFsdWVzLlxcbjUuIGB4ZnJtX2lwdGZzLmNgOiBBZGRzIGJvdW5kcyBjaGVja2luZyBvbiBmcmFnIHdhbGsgb2Zmc2V0IHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyBpbmRleGluZyBpbiBgaXB0ZnNfc2tiX3Jlc2V0X2ZyYWdfd2FsaygpYCwgYW5kIGNvcnJlY3RzIHJ1bnQgc2l6ZSB2ZXJpZmljYXRpb24gYWdhaW5zdCBJUCBoZWFkZXIgbGVuZ3RoIChPT0IgcmVhZHMsIGNvdmVyZWQgYnkgS0FTQU4pLlxcbjYuIGB4ZnJtX3BvbGljeS5jYCwgYHhmcm1fc3RhdGUuY2AsIGB4ZnJtX3VzZXIuY2A6IEFkZHMgbWlzc2luZyBSQ1UgcmVhZCBsb2NrcyAoYGRzdF9kZXZfcmN1YCwgbXVsdGljYXN0KSwgYWRkcyBhIEdDIG11dGV4IHRvIHNlcmlhbGl6ZSBzdGF0ZSBkZXN0cnVjdGlvbiwgYW5kIGZpeGVzIGxpc3QgZGVsZXRpb24gaW5pdGlhbGl6YXRpb24gKGBobGlzdF9kZWxfaW5pdF9yY3VgKS5cXG5cXG5Ob25lIG9mIHRoZSBjaGFuZ2VzIGludHJvZHVjZSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgbWVtb3J5LCBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzLCBvciBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBkYXRhLiBUaGUgcmlza3MgYWRkcmVzc2VkIChvdXQtb2YtYm91bmRzIGFjY2VzcywgcmVmY291bnRpbmcsIHVzZS1hZnRlci1mcmVlLCBjb25jdXJyZW5jeS9SQ1UpIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOLCBQUk9WRV9SQ1UsIGFuZCBzdGFuZGFyZCBkZWJ1ZyBjaGVja2Vycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflownqm5h[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-07 13:08:05 +0000 UTC FinishedAt: 2026-09-07 13:54:49 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET", "IPV6", "XFRM", "INET_ESP", "INET6_ESP", "INET_ESPINTCP", "INET6_ESPINTCP", "XFRM_USER", "XFRM_IPTFS", "XFRM_MIGRATE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET", "IPV6", "XFRM", "INET_ESP", "INET6_ESP", "INET_ESPINTCP", "INET6_ESPINTCP", "XFRM_USER", "XFRM_IPTFS", "XFRM_MIGRATE" ], "series_id": "27234445-ea9c-452c-ba1b-e307f389c838" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "esp_output_head", "esp6_output_head", "xfrm6_local_rxpmtu", "xfrm6_local_error", "espintcp_rcv", "handle_esp", "xfrm_input", "xfrm_trans_reinject", "xfrm_trans_queue_net", "iptfs_skb_can_add_frags", "iptfs_reassem_cont", "xfrm_bundle_create", "xfrm_create_dummy_bundle", "xfrm_state_gc_task", "__xfrm_state_delete", "xfrm_dev_state_flush", "xfrm_alloc_userspi", "xfrm_send_migrate_state" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA3IDEzOjUzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVQmIzM0OywKICAgICYjMzQ7SVBWNiYjMzQ7LAogICAgJiMzNDtYRlJNJiMzNDssCiAgICAmIzM0O0lORVRfRVNQJiMzNDssCiAgICAmIzM0O0lORVQ2X0VTUCYjMzQ7LAogICAgJiMzNDtJTkVUX0VTUElOVENQJiMzNDssCiAgICAmIzM0O0lORVQ2X0VTUElOVENQJiMzNDssCiAgICAmIzM0O1hGUk1fVVNFUiYjMzQ7LAogICAgJiMzNDtYRlJNX0lQVEZTJiMzNDssCiAgICAmIzM0O1hGUk1fTUlHUkFURSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2VzcF9vdXRwdXRfaGVhZCYjMzQ7LAogICAgJiMzNDtlc3A2X291dHB1dF9oZWFkJiMzNDssCiAgICAmIzM0O3hmcm02X2xvY2FsX3J4cG10dSYjMzQ7LAogICAgJiMzNDt4ZnJtNl9sb2NhbF9lcnJvciYjMzQ7LAogICAgJiMzNDtlc3BpbnRjcF9yY3YmIzM0OywKICAgICYjMzQ7aGFuZGxlX2VzcCYjMzQ7LAogICAgJiMzNDt4ZnJtX2lucHV0JiMzNDssCiAgICAmIzM0O3hmcm1fdHJhbnNfcmVpbmplY3QmIzM0OywKICAgICYjMzQ7eGZybV90cmFuc19xdWV1ZV9uZXQmIzM0OywKICAgICYjMzQ7aXB0ZnNfc2tiX2Nhbl9hZGRfZnJhZ3MmIzM0OywKICAgICYjMzQ7aXB0ZnNfcmVhc3NlbV9jb250JiMzNDssCiAgICAmIzM0O3hmcm1fYnVuZGxlX2NyZWF0ZSYjMzQ7LAogICAgJiMzNDt4ZnJtX2NyZWF0ZV9kdW1teV9idW5kbGUmIzM0OywKICAgICYjMzQ7eGZybV9zdGF0ZV9nY190YXNrJiMzNDssCiAgICAmIzM0O19feGZybV9zdGF0ZV9kZWxldGUmIzM0OywKICAgICYjMzQ7eGZybV9kZXZfc3RhdGVfZmx1c2gmIzM0OywKICAgICYjMzQ7eGZybV9hbGxvY191c2Vyc3BpJiMzNDssCiAgICAmIzM0O3hmcm1fc2VuZF9taWdyYXRlX3N0YXRlJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIGNvbnRhaW5zIHNldmVyYWwgYnVnIGZpeGVzIGFuZCByZWZhY3RvcmluZ3MgYWNyb3NzIFhGUk0gYW5kIElQc2VjIG5ldHdvcmtpbmcgc3Vic3lzdGVtczpcbjEuIGBlc3A0LmNgIGFuZCBgZXNwNi5jYDogQWRkcyBgc2tiX3pjb3B5X2Rvd25ncmFkZV9tYW5hZ2VkKHNrYilgIHRvIGJhbGFuY2UgcmVmY291bnRzIG9uIHplcm9jb3B5IG1hbmFnZWQgZnJhZ3Mgd2hlbiBtdXRhdGluZyB0aGUgZnJhZyBhcnJheSAocmVmY291bnRpbmcgLyBVQUYgcHJldmVudGlvbiwgY292ZXJlZCBieSBLQVNBTi9yZWZjb3VudCB0cmFja2luZykuXG4yLiBgeGZybTZfb3V0cHV0LmNgOiBWYWxpZGF0ZXMgc29ja2V0cyB1c2luZyBgc2tiX3RvX2Z1bGxfc2soKWAgdG8gYXZvaWQgb3BlcmF0aW5nIG9uIG5vbi1mdWxsIHNvY2tldHMgb3IgTlVMTCBkZXJlZmVyZW5jZXMgKE5VTEwgcG9pbnRlciAvIHR5cGUgY29uZnVzaW9uKS5cbjMuIGBlc3BpbnRjcC5jYDogVXNlcyBgc2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bCgpYCB0byB2YWxpZGF0ZSB0cmFuc3BvcnQgaGVhZGVyIGJvdW5kcyBiZWZvcmUgcmVzZXR0aW5nIChPT0IgcHJldmVudGlvbiwgY292ZXJlZCBieSBLQVNBTikuXG40LiBgeGZybV9pbnB1dC5jYDogRml4ZXMgcHJvdG9jb2wgdHJhY2tpbmcgKGB4ZnJtX3Byb3RvYCksIGhhbmRsZXMgZGV2aWNlIHJlZmNvdW50cyBhbmQgUkNVIGxvY2tpbmcgZHVyaW5nIHJlaW5qZWN0aW9uLCBhbmQgZW5zdXJlcyBkc3QgZW50cnkgcGVyc2lzdGVuY2UgKGBza2JfZHN0X2ZvcmNlYCkuIEFsbCB2YXJpYWJsZXMgKGB4ZnJtX3Byb3RvYCkgYXJlIGZ1bGx5IGluaXRpYWxpemVkIHdpdGggZGVmYXVsdCB2YWx1ZXMuXG41LiBgeGZybV9pcHRmcy5jYDogQWRkcyBib3VuZHMgY2hlY2tpbmcgb24gZnJhZyB3YWxrIG9mZnNldCB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgaW5kZXhpbmcgaW4gYGlwdGZzX3NrYl9yZXNldF9mcmFnX3dhbGsoKWAsIGFuZCBjb3JyZWN0cyBydW50IHNpemUgdmVyaWZpY2F0aW9uIGFnYWluc3QgSVAgaGVhZGVyIGxlbmd0aCAoT09CIHJlYWRzLCBjb3ZlcmVkIGJ5IEtBU0FOKS5cbjYuIGB4ZnJtX3BvbGljeS5jYCwgYHhmcm1fc3RhdGUuY2AsIGB4ZnJtX3VzZXIuY2A6IEFkZHMgbWlzc2luZyBSQ1UgcmVhZCBsb2NrcyAoYGRzdF9kZXZfcmN1YCwgbXVsdGljYXN0KSwgYWRkcyBhIEdDIG11dGV4IHRvIHNlcmlhbGl6ZSBzdGF0ZSBkZXN0cnVjdGlvbiwgYW5kIGZpeGVzIGxpc3QgZGVsZXRpb24gaW5pdGlhbGl6YXRpb24gKGBobGlzdF9kZWxfaW5pdF9yY3VgKS5cblxuTm9uZSBvZiB0aGUgY2hhbmdlcyBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIG1lbW9yeSwga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcywgb3IgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gVGhlIHJpc2tzIGFkZHJlc3NlZCAob3V0LW9mLWJvdW5kcyBhY2Nlc3MsIHJlZmNvdW50aW5nLCB1c2UtYWZ0ZXItZnJlZSwgY29uY3VycmVuY3kvUkNVKSBhcmUgY292ZXJlZCBieSBLQVNBTiwgUFJPVkVfUkNVLCBhbmQgc3RhbmRhcmQgZGVidWcgY2hlY2tlcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHRvdWNoZXMgY29yZSBJUHNlYyAoWEZSTSkgSVB2NC9JUHY2IG5ldHdvcmtpbmcgbG9naWMsIGluY2x1ZGluZyBFU1Agb3V0cHV0IHplcm8tY29weSBkb3duZ3JhZGVzLCBJUHY2IFhGUk0gZXJyb3IgcmVwb3J0aW5nIGZvciBub24tZnVsbCBzb2NrZXRzLCBFU1AtaW4tVENQIHRyYW5zcG9ydCBoZWFkZXIgcmVzZXR0aW5nLCBYRlJNIGlucHV0IHBhY2tldCBwcm90byBkaXNwYXRjaCBhbmQgYXN5bmMgZGV2LXJlZiByZWluamVjdGlvbiBoYW5kbGluZywgSVAtVEZTIGZyYWdtZW50IHdhbGsgYm91bmRzIGNoZWNrcywgcG9saWN5IGJ1bmRsZSBSQ1UgZGV2aWNlIHJlc29sdXRpb24sIHN0YXRlIEdDIHNlcmlhbGl6YXRpb24gdW5kZXIgbXV0ZXgsIGFuZCBYRlJNIHVzZXIgbmV0bGluayBoYW5kbGVycy4gQWxsIGNoYW5nZXMgYXJlIGluIHJlYWNoYWJsZSBuZXR3b3JraW5nIHBhdGhzIGV4ZXJjaXNhYmxlIHZpYSBzb2NrZXRzIGFuZCBYRlJNIG5ldGxpbmsgaW50ZXJmYWNlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxMzo1MzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGNlMDE0ZGExNTNkOGRjZThjMzNlMzZmYTk1N2YxMDEzOTYzZjZlMTlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCA3IDEzOjUzOjUwIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L2VzcDQuYyBiL25ldC9pcHY0L2VzcDQuY1xuaW5kZXggYTZjMThhZWE3NDk4ZC4uZTc2ZGI1ODE3ZTc4ZSAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L2VzcDQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvZXNwNC5jXG5AQCAtNDQxLDYgJiM0Mzs0NDEsMTIgQEAgaW50IGVzcF9vdXRwdXRfaGVhZChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGVzcF9pbmZvICpcbiBcbiBcdFx0XHRlc3AtXHUwMDNlaW5wbGFjZSA9IGZhbHNlO1xuIFxuJiM0MztcdFx0XHQvKiBUYWtlIHJlYWwgcGFnZSByZWZzIGFuZCBjbGVhciBTS0JGTF9NQU5BR0VEX0ZSQUdfUkVGUyBiZWZvcmVcbiYjNDM7XHRcdFx0ICogd2UgbXV0YXRlIHRoZSBmcmFnIGFycmF5LCBzbyB0aGUgcGVyLWZyYWcgdW5yZWYgc3RheXMgYmFsYW5jZWRcbiYjNDM7XHRcdFx0ICogZm9yIHplcm9jb3B5IG1hbmFnZWQgZnJhZ3MgKHNlZSBfX2lwX2FwcGVuZF9kYXRhKCkpLlxuJiM0MztcdFx0XHQgKi9cbiYjNDM7XHRcdFx0c2tiX3pjb3B5X2Rvd25ncmFkZV9tYW5hZ2VkKHNrYik7XG4mIzQzO1xuIFx0XHRcdGFsbG9jc2l6ZSA9IEFMSUdOKHRhaWxlbiwgTDFfQ0FDSEVfQllURVMpO1xuIFxuIFx0XHRcdHNwaW5fbG9ja19iaChcdTAwMjZ4LVx1MDAzZWxvY2spO1xuZGlmZiAtLWdpdCBhL25ldC9pcHY2L2VzcDYuYyBiL25ldC9pcHY2L2VzcDYuY1xuaW5kZXggNzJlYzBkN2QxMTIwOS4uYjFjOWIzNmY3NmRjNCAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L2VzcDYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvZXNwNi5jXG5AQCAtNDcxLDYgJiM0Mzs0NzEsMTIgQEAgaW50IGVzcDZfb3V0cHV0X2hlYWQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBlc3BfaW5mb1xuIFxuIFx0XHRcdGVzcC1cdTAwM2VpbnBsYWNlID0gZmFsc2U7XG4gXG4mIzQzO1x0XHRcdC8qIFRha2UgcmVhbCBwYWdlIHJlZnMgYW5kIGNsZWFyIFNLQkZMX01BTkFHRURfRlJBR19SRUZTIGJlZm9yZVxuJiM0MztcdFx0XHQgKiB3ZSBtdXRhdGUgdGhlIGZyYWcgYXJyYXksIHNvIHRoZSBwZXItZnJhZyB1bnJlZiBzdGF5cyBiYWxhbmNlZFxuJiM0MztcdFx0XHQgKiBmb3IgemVyb2NvcHkgbWFuYWdlZCBmcmFncyAoc2VlIF9faXBfYXBwZW5kX2RhdGEoKSkuXG4mIzQzO1x0XHRcdCAqL1xuJiM0MztcdFx0XHRza2JfemNvcHlfZG93bmdyYWRlX21hbmFnZWQoc2tiKTtcbiYjNDM7XG4gXHRcdFx0YWxsb2NzaXplID0gQUxJR04odGFpbGVuLCBMMV9DQUNIRV9CWVRFUyk7XG4gXG4gXHRcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNngtXHUwMDNlbG9jayk7XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYveGZybTZfb3V0cHV0LmMgYi9uZXQvaXB2Ni94ZnJtNl9vdXRwdXQuY1xuaW5kZXggNTEyYmRhZjEzNjk5Ny4uNDRiMjIxYTA5YTBjOCAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L3hmcm02X291dHB1dC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni94ZnJtNl9vdXRwdXQuY1xuQEAgLTE5LDcgJiM0MzsxOSwxMCBAQFxuIHZvaWQgeGZybTZfbG9jYWxfcnhwbXR1KHN0cnVjdCBza19idWZmICpza2IsIHUzMiBtdHUpXG4ge1xuIFx0c3RydWN0IGZsb3dpNiBmbDY7XG4tXHRzdHJ1Y3Qgc29jayAqc2sgPSBza2ItXHUwMDNlc2s7XG4mIzQzO1x0c3RydWN0IHNvY2sgKnNrID0gc2tiX3RvX2Z1bGxfc2soc2tiKTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFzaylcbiYjNDM7XHRcdHJldHVybjtcbiBcbiBcdGZsNi5mbG93aTZfb2lmID0gc2stXHUwMDNlc2tfYm91bmRfZGV2X2lmO1xuIFx0Zmw2LmRhZGRyID0gaXB2Nl9oZHIoc2tiKS1cdTAwM2VkYWRkcjtcbkBAIC0zMSw3ICYjNDM7MzQsMTAgQEAgdm9pZCB4ZnJtNl9sb2NhbF9lcnJvcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgbXR1KVxuIHtcbiBcdHN0cnVjdCBmbG93aTYgZmw2O1xuIFx0Y29uc3Qgc3RydWN0IGlwdjZoZHIgKmhkcjtcbi1cdHN0cnVjdCBzb2NrICpzayA9IHNrYi1cdTAwM2VzaztcbiYjNDM7XHRzdHJ1Y3Qgc29jayAqc2sgPSBza2JfdG9fZnVsbF9zayhza2IpO1xuJiM0MztcbiYjNDM7XHRpZiAoIXNrKVxuJiM0MztcdFx0cmV0dXJuO1xuIFxuIFx0aGRyID0gc2tiLVx1MDAzZWVuY2Fwc3VsYXRpb24gPyBpbm5lcl9pcHY2X2hkcihza2IpIDogaXB2Nl9oZHIoc2tiKTtcbiBcdGZsNi5mbDZfZHBvcnQgPSBpbmV0X3NrKHNrKS1cdTAwM2VpbmV0X2Rwb3J0O1xuZGlmZiAtLWdpdCBhL25ldC94ZnJtL2VzcGludGNwLmMgYi9uZXQveGZybS9lc3BpbnRjcC5jXG5pbmRleCA2NzRhZWRjNWFmNWEyLi4zZTcyYjlmMDY3YjliIDEwMDY0NFxuLS0tIGEvbmV0L3hmcm0vZXNwaW50Y3AuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3hmcm0vZXNwaW50Y3AuY1xuQEAgLTMwLDcgJiM0MzszMCwxMSBAQCBzdGF0aWMgdm9pZCBoYW5kbGVfZXNwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzb2NrICpzaylcbiB7XG4gXHRzdHJ1Y3QgdGNwX3NrYl9jYiAqdGNwX2NiID0gKHN0cnVjdCB0Y3Bfc2tiX2NiICopc2tiLVx1MDAzZWNiO1xuIFxuLVx0c2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXIoc2tiKTtcbiYjNDM7XHRpZiAoIXNrYl9yZXNldF90cmFuc3BvcnRfaGVhZGVyX2NhcmVmdWwoc2tiKSkge1xuJiM0MztcdFx0WEZSTV9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBMSU5VWF9NSUJfWEZSTUlORVJST1IpO1xuJiM0MztcdFx0a2ZyZWVfc2tiKHNrYik7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuIFxuIFx0LyogcmVzdG9yZSBJUCBDQiwgd2UgbmVlZCBhdCBsZWFzdCBJUDZDQi1cdTAwM2VuaG9mZiAqL1xuIFx0bWVtbW92ZShza2ItXHUwMDNlY2IsIFx1MDAyNnRjcF9jYi1cdTAwM2VoZWFkZXIsIHNpemVvZih0Y3BfY2ItXHUwMDNlaGVhZGVyKSk7XG5kaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV9pbnB1dC5jIGIvbmV0L3hmcm0veGZybV9pbnB1dC5jXG5pbmRleCBlZWNhYjMzN2JkMGE3Li41ZWQ4N2Q1MTM5MmE1IDEwMDY0NFxuLS0tIGEvbmV0L3hmcm0veGZybV9pbnB1dC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQveGZybS94ZnJtX2lucHV0LmNcbkBAIC00NzQsNiAmIzQzOzQ3NCw3IEBAIGludCB4ZnJtX2lucHV0KHN0cnVjdCBza19idWZmICpza2IsIGludCBuZXh0aGRyLCBfX2JlMzIgc3BpLCBpbnQgZW5jYXBfdHlwZSlcbiBcdHN0cnVjdCB4ZnJtX3N0YXRlICp4ID0gTlVMTDtcbiBcdHhmcm1fYWRkcmVzc190ICpkYWRkcjtcbiBcdHUzMiBtYXJrID0gc2tiLVx1MDAzZW1hcms7XG4mIzQzO1x0dTggeGZybV9wcm90byA9IG5leHRoZHI7XG4gXHR1bnNpZ25lZCBpbnQgZmFtaWx5ID0gQUZfVU5TUEVDO1xuIFx0aW50IGRlY2FwcyA9IDA7XG4gXHRpbnQgYXN5bmMgPSAwO1xuQEAgLTQ4NSw2ICYjNDM7NDg2LDcgQEAgaW50IHhmcm1faW5wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG5leHRoZHIsIF9fYmUzMiBzcGksIGludCBlbmNhcF90eXBlKVxuIFx0aWYgKGVuY2FwX3R5cGUgXHUwMDNjIDAgfHwgKHhvIFx1MDAyNlx1MDAyNiAoeG8tXHUwMDNlZmxhZ3MgXHUwMDI2IFhGUk1fR1JPIHx8IGVuY2FwX3R5cGUgPT0gMCB8fFxuIFx0XHRcdFx0ICAgICAgZW5jYXBfdHlwZSA9PSBVRFBfRU5DQVBfRVNQSU5VRFApKSkge1xuIFx0XHR4ID0geGZybV9pbnB1dF9zdGF0ZShza2IpO1xuJiM0MztcdFx0eGZybV9wcm90byA9IHgtXHUwMDNldHlwZSA/IHgtXHUwMDNldHlwZS1cdTAwM2Vwcm90byA6IG5leHRoZHI7XG4gXG4gXHRcdGlmICh1bmxpa2VseSh4LVx1MDAzZWttLnN0YXRlICE9IFhGUk1fU1RBVEVfVkFMSUQpKSB7XG4gXHRcdFx0aWYgKHgtXHUwMDNla20uc3RhdGUgPT0gWEZSTV9TVEFURV9BQ1EpXG5AQCAtNTkyLDExICYjNDM7NTk0LDEzIEBAIGludCB4ZnJtX2lucHV0KHN0cnVjdCBza19idWZmICpza2IsIGludCBuZXh0aGRyLCBfX2JlMzIgc3BpLCBpbnQgZW5jYXBfdHlwZSlcbiBcbiBcdFx0eCA9IHhmcm1faW5wdXRfc3RhdGVfbG9va3VwKG5ldCwgbWFyaywgZGFkZHIsIHNwaSwgbmV4dGhkciwgZmFtaWx5KTtcbiBcdFx0aWYgKHggPT0gTlVMTCkge1xuJiM0MztcdFx0XHR4ZnJtX3Byb3RvID0gbmV4dGhkcjtcbiBcdFx0XHRzZWNwYXRoX3Jlc2V0KHNrYik7XG4gXHRcdFx0WEZSTV9JTkNfU1RBVFMobmV0LCBMSU5VWF9NSUJfWEZSTUlOTk9TVEFURVMpO1xuIFx0XHRcdHhmcm1fYXVkaXRfc3RhdGVfbm90Zm91bmQoc2tiLCBmYW1pbHksIHNwaSwgc2VxKTtcbiBcdFx0XHRnb3RvIGRyb3A7XG4gXHRcdH1cbiYjNDM7XHRcdHhmcm1fcHJvdG8gPSB4LVx1MDAzZXR5cGUgPyB4LVx1MDAzZXR5cGUtXHUwMDNlcHJvdG8gOiBuZXh0aGRyO1xuIFxuIFx0XHRpZiAodW5saWtlbHkoeC1cdTAwM2VkaXIgXHUwMDI2XHUwMDI2IHgtXHUwMDNlZGlyICE9IFhGUk1fU0FfRElSX0lOKSkge1xuIFx0XHRcdHNlY3BhdGhfcmVzZXQoc2tiKTtcbkBAIC02MDQsNiAmIzQzOzYwOCw3IEBAIGludCB4ZnJtX2lucHV0KHN0cnVjdCBza19idWZmICpza2IsIGludCBuZXh0aGRyLCBfX2JlMzIgc3BpLCBpbnQgZW5jYXBfdHlwZSlcbiBcdFx0XHR4ZnJtX2F1ZGl0X3N0YXRlX25vdGZvdW5kKHNrYiwgZmFtaWx5LCBzcGksIHNlcSk7XG4gXHRcdFx0eGZybV9zdGF0ZV9wdXQoeCk7XG4gXHRcdFx0eCA9IE5VTEw7XG4mIzQzO1x0XHRcdHhmcm1fcHJvdG8gPSBuZXh0aGRyO1xuIFx0XHRcdGdvdG8gZHJvcDtcbiBcdFx0fVxuIFxuQEAgLTcyOCw3ICYjNDM7NzMzLDcgQEAgaW50IHhmcm1faW5wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG5leHRoZHIsIF9fYmUzMiBzcGksIGludCBlbmNhcF90eXBlKVxuIFx0fSB3aGlsZSAoIWVycik7XG4gXG4gXHRyY3VfcmVhZF9sb2NrKCk7XG4tXHRlcnIgPSB4ZnJtX3Jjdl9jYihza2IsIGZhbWlseSwgeC1cdTAwM2V0eXBlLVx1MDAzZXByb3RvLCAwKTtcbiYjNDM7XHRlcnIgPSB4ZnJtX3Jjdl9jYihza2IsIGZhbWlseSwgeGZybV9wcm90bywgMCk7XG4gXHRpZiAoZXJyKSB7XG4gXHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0XHRnb3RvIGRyb3A7XG5AQCAtNzUzLDcgJiM0Mzs3NTgsNyBAQCBpbnQgeGZybV9pbnB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbmV4dGhkciwgX19iZTMyIHNwaSwgaW50IGVuY2FwX3R5cGUpXG4gXHRcdFx0eGZybV9ncm8gPSB4by1cdTAwM2VmbGFncyBcdTAwMjYgWEZSTV9HUk87XG4gXG4gXHRcdGVyciA9IC1FQUZOT1NVUFBPUlQ7XG4tXHRcdGFmaW5mbyA9IHhmcm1fc3RhdGVfYWZpbmZvX2dldF9yY3UoeC1cdTAwM2Vwcm9wcy5mYW1pbHkpO1xuJiM0MztcdFx0YWZpbmZvID0geGZybV9zdGF0ZV9hZmluZm9fZ2V0X3JjdShmYW1pbHkpO1xuIFx0XHRpZiAobGlrZWx5KGFmaW5mbykpXG4gXHRcdFx0ZXJyID0gYWZpbmZvLVx1MDAzZXRyYW5zcG9ydF9maW5pc2goc2tiLCB4ZnJtX2dybyB8fCBhc3luYyk7XG4gXHRcdGlmICh4ZnJtX2dybykge1xuQEAgLTc3Niw3ICYjNDM7NzgxLDcgQEAgaW50IHhmcm1faW5wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG5leHRoZHIsIF9fYmUzMiBzcGksIGludCBlbmNhcF90eXBlKVxuIGRyb3A6XG4gXHRpZiAoYXN5bmMpXG4gXHRcdGRldl9wdXQoZGV2KTtcbi1cdHhmcm1fcmN2X2NiKHNrYiwgZmFtaWx5LCB4IFx1MDAyNlx1MDAyNiB4LVx1MDAzZXR5cGUgPyB4LVx1MDAzZXR5cGUtXHUwMDNlcHJvdG8gOiBuZXh0aGRyLCAtMSk7XG4mIzQzO1x0eGZybV9yY3ZfY2Ioc2tiLCBmYW1pbHksIHhmcm1fcHJvdG8sIC0xKTtcbiBcdGtmcmVlX3NrYihza2IpO1xuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTgwMCwxMiAmIzQzOzgwNSwxNyBAQCBzdGF0aWMgdm9pZCB4ZnJtX3RyYW5zX3JlaW5qZWN0KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnRyYW5zLVx1MDAzZXF1ZXVlX2xvY2spO1xuIFxuIFx0bG9jYWxfYmhfZGlzYWJsZSgpO1xuJiM0MztcdHJjdV9yZWFkX2xvY2soKTtcbiBcdHdoaWxlICgoc2tiID0gX19za2JfZGVxdWV1ZShcdTAwMjZxdWV1ZSkpKSB7XG4gXHRcdHN0cnVjdCBuZXQgKm5ldCA9IFhGUk1fVFJBTlNfU0tCX0NCKHNrYiktXHUwMDNlbmV0O1xuJiM0MztcdFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHNrYi1cdTAwM2VkZXY7XG4gXG4gXHRcdFhGUk1fVFJBTlNfU0tCX0NCKHNrYiktXHUwMDNlZmluaXNoKG5ldCwgTlVMTCwgc2tiKTtcbiYjNDM7XHRcdGlmIChkZXYpXG4mIzQzO1x0XHRcdGRldl9wdXQoZGV2KTtcbiBcdFx0cHV0X25ldChuZXQpO1xuIFx0fVxuJiM0MztcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0bG9jYWxfYmhfZW5hYmxlKCk7XG4gfVxuIFxuQEAgLTgyMSwxMiAmIzQzOzgzMSwxOCBAQCBpbnQgeGZybV90cmFuc19xdWV1ZV9uZXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0aWYgKHNrYl9xdWV1ZV9sZW4oXHUwMDI2dHJhbnMtXHUwMDNlcXVldWUpIFx1MDAzZT0gUkVBRF9PTkNFKG5ldF9ob3RkYXRhLm1heF9iYWNrbG9nKSlcbiBcdFx0cmV0dXJuIC1FTk9CVUZTO1xuIFxuJiM0MztcdGlmIChza2JfZHN0KHNrYikgXHUwMDI2XHUwMDI2ICFza2JfZHN0X2ZvcmNlKHNrYikpXG4mIzQzO1x0XHRyZXR1cm4gLUVIT1NUVU5SRUFDSDtcbiYjNDM7XG4gXHRCVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCB4ZnJtX3RyYW5zX2NiKSBcdTAwM2Ugc2l6ZW9mKHNrYi1cdTAwM2VjYikpO1xuIFxuIFx0aG9sZF9uZXQgPSBtYXliZV9nZXRfbmV0KG5ldCk7XG4gXHRpZiAoIWhvbGRfbmV0KVxuIFx0XHRyZXR1cm4gLUVOT0RFVjtcbiBcbiYjNDM7XHRpZiAoc2tiLVx1MDAzZWRldilcbiYjNDM7XHRcdGRldl9ob2xkKHNrYi1cdTAwM2VkZXYpO1xuJiM0MztcbiBcdFhGUk1fVFJBTlNfU0tCX0NCKHNrYiktXHUwMDNlZmluaXNoID0gZmluaXNoO1xuIFx0WEZSTV9UUkFOU19TS0JfQ0Ioc2tiKS1cdTAwM2VuZXQgPSBob2xkX25ldDtcbiBcdHNwaW5fbG9ja19iaChcdTAwMjZ0cmFucy1cdTAwM2VxdWV1ZV9sb2NrKTtcbmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX2lwdGZzLmMgYi9uZXQveGZybS94ZnJtX2lwdGZzLmNcbmluZGV4IDU5N2FlZGVhYzI2ZWIuLjY5MjA5NDBhMzViNDkgMTAwNjQ0XG4tLS0gYS9uZXQveGZybS94ZnJtX2lwdGZzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC94ZnJtL3hmcm1faXB0ZnMuY1xuQEAgLTQxNiw2ICYjNDM7NDE2LDE0IEBAIHN0YXRpYyBib29sIGlwdGZzX3NrYl9jYW5fYWRkX2ZyYWdzKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4gXHRpZiAoc2tiX2hhc19mcmFnX2xpc3Qoc2tiKSB8fCBza2ItXHUwMDNlcHBfcmVjeWNsZSAhPSB3YWxrLVx1MDAzZXBwX3JlY3ljbGUpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbiYjNDM7XHQvKiBSZWplY3QgYW4gQG9mZnNldCB0aGF0IGlzIGF0IG9yIGJleW9uZCB0aGUgZW5kIG9mIHRoZSB3YWxrJiMzOTtzIGRhdGFcbiYjNDM7XHQgKiBiZWZvcmUgY2FsbGluZyBpcHRmc19za2JfcmVzZXRfZnJhZ193YWxrKCksIHdob3NlIGZyYWdtZW50LWFkdmFuY2VcbiYjNDM7XHQgKiBsb29wIGlzIG90aGVyd2lzZSB1bmJvdW5kZWQgYW5kIHdvdWxkIGluZGV4IHBhc3Qgd2Fsay1cdTAwM2VmcmFnc1tdLlxuJiM0MztcdCAqIFRoaXMgbWlycm9ycyB0aGUgZ3VhcmQgYWxyZWFkeSBwcmVzZW50IGluIGlwdGZzX3NrYl9hZGRfZnJhZ3MoKS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIXdhbGstXHUwMDNlbnJfZnJhZ3MgfHwgb2Zmc2V0IFx1MDAzZT0gd2Fsay1cdTAwM2V0b3RhbCAmIzQzOyB3YWxrLVx1MDAzZWluaXRpYWxfb2Zmc2V0KVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiBcdC8qIE1ha2Ugb2Zmc2V0IHJlbGF0aXZlIHRvIGN1cnJlbnQgZnJhZyBhZnRlciBzZXR0aW5nIHRoYXQgKi9cbiBcdG9mZnNldCA9IGlwdGZzX3NrYl9yZXNldF9mcmFnX3dhbGsod2Fsaywgb2Zmc2V0KTtcbiBcbkBAIC04MjAsOCAmIzQzOzgyOCw4IEBAIHN0YXRpYyB1MzIgaXB0ZnNfcmVhc3NlbV9jb250KHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsIHU2NCBzZXEsXG4gXHRcdCAqIGFsbG9jYXRlIGFuIGluIHByb2dyZXNzIHNrYlxuIFx0XHQgKi9cbiBcdFx0aXByZW1haW4gPSBfX2lwdGZzX2lwbGVuKHh0ZnMtXHUwMDNlcmFfcnVudCk7XG4tXHRcdGlmIChpcHJlbWFpbiBcdTAwM2Mgc2l6ZW9mKHh0ZnMtXHUwMDNlcmFfcnVudCkpIHtcbi1cdFx0XHQvKiBsZW5ndGggaGFzIHRvIGJlIGF0IGxlYXN0IHJ1bnRzaXplIGxhcmdlICovXG4mIzQzO1x0XHRpZiAoaXByZW1haW4gXHUwMDNjIF9faXB0ZnNfaXBobGVuKHh0ZnMtXHUwMDNlcmFfcnVudCkpIHtcbiYjNDM7XHRcdFx0LyogbGVuZ3RoIGhhcyB0byBiZSBhdCBsZWFzdCB0aGUgSVAgaGVhZGVyIHNpemUgKi9cbiBcdFx0XHRYRlJNX0lOQ19TVEFUUyh4c19uZXQoeHRmcy1cdTAwM2V4KSxcbiBcdFx0XHRcdCAgICAgICBMSU5VWF9NSUJfWEZSTUlOSVBURlNFUlJPUik7XG4gXHRcdFx0Z290byBhYmFuZG9uO1xuZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1fcG9saWN5LmMgYi9uZXQveGZybS94ZnJtX3BvbGljeS5jXG5pbmRleCA5MzJhMzEzYjk0NjBhLi41MTNjOWYyMjgzMzQ3IDEwMDY0NFxuLS0tIGEvbmV0L3hmcm0veGZybV9wb2xpY3kuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3hmcm0veGZybV9wb2xpY3kuY1xuQEAgLTI3NzAsOSAmIzQzOzI3NzAsMTIgQEAgc3RhdGljIHN0cnVjdCBkc3RfZW50cnkgKnhmcm1fYnVuZGxlX2NyZWF0ZShzdHJ1Y3QgeGZybV9wb2xpY3kgKnBvbGljeSxcbiBcdHhkc3QwLVx1MDAzZXBhdGggPSBkc3Q7XG4gXG4gXHRlcnIgPSAtRU5PREVWO1xuLVx0ZGV2ID0gZHN0LVx1MDAzZWRldjtcbi1cdGlmICghZGV2KVxuJiM0MztcdHJjdV9yZWFkX2xvY2soKTtcbiYjNDM7XHRkZXYgPSBkc3RfZGV2X3JjdShkc3QpO1xuJiM0MztcdGlmICghZGV2KSB7XG4mIzQzO1x0XHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdFx0Z290byBmcmVlX2RzdDtcbiYjNDM7XHR9XG4gXG4gXHR4ZnJtX2luaXRfcGF0aCh4ZHN0MCwgZHN0LCBuZmhlYWRlcl9sZW4pO1xuIFx0eGZybV9pbml0X3BtdHUoYnVuZGxlLCBueCk7XG5AQCAtMjc4MCw4ICYjNDM7Mjc4MywxMCBAQCBzdGF0aWMgc3RydWN0IGRzdF9lbnRyeSAqeGZybV9idW5kbGVfY3JlYXRlKHN0cnVjdCB4ZnJtX3BvbGljeSAqcG9saWN5LFxuIFx0Zm9yICh4ZHN0X3ByZXYgPSB4ZHN0MDsgeGRzdF9wcmV2ICE9IChzdHJ1Y3QgeGZybV9kc3QgKilkc3Q7XG4gXHQgICAgIHhkc3RfcHJldiA9IChzdHJ1Y3QgeGZybV9kc3QgKikgeGZybV9kc3RfY2hpbGQoXHUwMDI2eGRzdF9wcmV2LVx1MDAzZXUuZHN0KSkge1xuIFx0XHRlcnIgPSB4ZnJtX2ZpbGxfZHN0KHhkc3RfcHJldiwgZGV2LCBmbCk7XG4tXHRcdGlmIChlcnIpXG4mIzQzO1x0XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0XHRcdGdvdG8gZnJlZV9kc3Q7XG4mIzQzO1x0XHR9XG4gXG4gXHRcdHhkc3RfcHJldi1cdTAwM2V1LmRzdC5oZWFkZXJfbGVuID0gaGVhZGVyX2xlbjtcbiBcdFx0eGRzdF9wcmV2LVx1MDAzZXUuZHN0LnRyYWlsZXJfbGVuID0gdHJhaWxlcl9sZW47XG5AQCAtMjc4OSw2ICYjNDM7Mjc5NCw3IEBAIHN0YXRpYyBzdHJ1Y3QgZHN0X2VudHJ5ICp4ZnJtX2J1bmRsZV9jcmVhdGUoc3RydWN0IHhmcm1fcG9saWN5ICpwb2xpY3ksXG4gXHRcdHRyYWlsZXJfbGVuIC09IHhkc3RfcHJldi1cdTAwM2V1LmRzdC54ZnJtLVx1MDAzZXByb3BzLnRyYWlsZXJfbGVuO1xuIFx0fVxuIFxuJiM0MztcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0cmV0dXJuIFx1MDAyNnhkc3QwLVx1MDAzZXUuZHN0O1xuIFxuIHB1dF9zdGF0ZXM6XG5AQCAtMzA1OCwxMSAmIzQzOzMwNjQsMTUgQEAgc3RhdGljIHN0cnVjdCB4ZnJtX2RzdCAqeGZybV9jcmVhdGVfZHVtbXlfYnVuZGxlKHN0cnVjdCBuZXQgKm5ldCxcbiBcdHhmcm1faW5pdF9wYXRoKChzdHJ1Y3QgeGZybV9kc3QgKilkc3QxLCBkc3QsIDApO1xuIFxuIFx0ZXJyID0gLUVOT0RFVjtcbi1cdGRldiA9IGRzdC1cdTAwM2VkZXY7XG4tXHRpZiAoIWRldilcbiYjNDM7XHRyY3VfcmVhZF9sb2NrKCk7XG4mIzQzO1x0ZGV2ID0gZHN0X2Rldl9yY3UoZHN0KTtcbiYjNDM7XHRpZiAoIWRldikge1xuJiM0MztcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXHRcdGdvdG8gZnJlZV9kc3Q7XG4mIzQzO1x0fVxuIFxuIFx0ZXJyID0geGZybV9maWxsX2RzdCh4ZHN0LCBkZXYsIGZsKTtcbiYjNDM7XHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdGlmIChlcnIpXG4gXHRcdGdvdG8gZnJlZV9kc3Q7XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV9zdGF0ZS5jIGIvbmV0L3hmcm0veGZybV9zdGF0ZS5jXG5pbmRleCAzNmE0ZjY3OTNlZGVmLi5lNDVhYTFlZDViOTY1IDEwMDY0NFxuLS0tIGEvbmV0L3hmcm0veGZybV9zdGF0ZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQveGZybS94ZnJtX3N0YXRlLmNcbkBAIC0yMjYsNiAmIzQzOzIyNiw3IEBAIHN0YXRpYyBzdHJ1Y3QgeGZybV9zdGF0ZV9hZmluZm8gX19yY3UgKnhmcm1fc3RhdGVfYWZpbmZvW05QUk9UT107XG4gXG4gc3RhdGljIERFRklORV9TUElOTE9DSyh4ZnJtX3N0YXRlX2djX2xvY2spO1xuIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soeGZybV9zdGF0ZV9kZXZfZ2NfbG9jayk7XG4mIzQzO3N0YXRpYyBERUZJTkVfTVVURVgoeGZybV9zdGF0ZV9nY19tdXRleCk7XG4gXG4gaW50IF9feGZybV9zdGF0ZV9kZWxldGUoc3RydWN0IHhmcm1fc3RhdGUgKngpO1xuIFxuQEAgLTYzMiw4ICYjNDM7NjMzLDEwIEBAIHN0YXRpYyB2b2lkIHhmcm1fc3RhdGVfZ2NfdGFzayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gXG4gXHRzeW5jaHJvbml6ZV9yY3UoKTtcbiBcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNnhmcm1fc3RhdGVfZ2NfbXV0ZXgpO1xuIFx0aGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh4LCB0bXAsIFx1MDAyNmdjX2xpc3QsIGdjbGlzdClcbiBcdFx0eGZybV9zdGF0ZV9nY19kZXN0cm95KHgpO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZ4ZnJtX3N0YXRlX2djX211dGV4KTtcbiB9XG4gXG4gc3RhdGljIGVudW0gaHJ0aW1lcl9yZXN0YXJ0IHhmcm1fdGltZXJfaGFuZGxlcihzdHJ1Y3QgaHJ0aW1lciAqbWUpXG5AQCAtODIzLDkgJiM0Mzs4MjYsOSBAQCBpbnQgX194ZnJtX3N0YXRlX2RlbGV0ZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeClcbiBcdFx0aWYgKCFobGlzdF91bmhhc2hlZChcdTAwMjZ4LVx1MDAzZWJ5c2VxKSlcbiBcdFx0XHRobGlzdF9kZWxfaW5pdF9yY3UoXHUwMDI2eC1cdTAwM2VieXNlcSk7XG4gXHRcdGlmICghaGxpc3RfdW5oYXNoZWQoXHUwMDI2eC1cdTAwM2VzdGF0ZV9jYWNoZSkpXG4tXHRcdFx0aGxpc3RfZGVsX3JjdShcdTAwMjZ4LVx1MDAzZXN0YXRlX2NhY2hlKTtcbiYjNDM7XHRcdFx0aGxpc3RfZGVsX2luaXRfcmN1KFx1MDAyNngtXHUwMDNlc3RhdGVfY2FjaGUpO1xuIFx0XHRpZiAoIWhsaXN0X3VuaGFzaGVkKFx1MDAyNngtXHUwMDNlc3RhdGVfY2FjaGVfaW5wdXQpKVxuLVx0XHRcdGhsaXN0X2RlbF9yY3UoXHUwMDI2eC1cdTAwM2VzdGF0ZV9jYWNoZV9pbnB1dCk7XG4mIzQzO1x0XHRcdGhsaXN0X2RlbF9pbml0X3JjdShcdTAwMjZ4LVx1MDAzZXN0YXRlX2NhY2hlX2lucHV0KTtcbiBcbiBcdFx0aWYgKCFobGlzdF91bmhhc2hlZChcdTAwMjZ4LVx1MDAzZWJ5c3BpKSlcbiBcdFx0XHRobGlzdF9kZWxfaW5pdF9yY3UoXHUwMDI2eC1cdTAwM2VieXNwaSk7XG5AQCAtMTAwMCw2ICYjNDM7MTAwMyw3IEBAIGludCB4ZnJtX2Rldl9zdGF0ZV9mbHVzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGJvb2wgdGFza192YWxpXG4gb3V0OlxuIFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bmV0LVx1MDAzZXhmcm0ueGZybV9zdGF0ZV9sb2NrKTtcbiBcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNnhmcm1fc3RhdGVfZ2NfbXV0ZXgpO1xuIFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnhmcm1fc3RhdGVfZGV2X2djX2xvY2spO1xuIHJlc3RhcnRfZ2M6XG4gXHRobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHgsIHRtcCwgXHUwMDI2eGZybV9zdGF0ZV9kZXZfZ2NfbGlzdCwgZGV2X2djbGlzdCkge1xuQEAgLTEwMTQsNiAmIzQzOzEwMTgsNyBAQCBpbnQgeGZybV9kZXZfc3RhdGVfZmx1c2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIHRhc2tfdmFsaVxuIFxuIFx0fVxuIFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2eGZybV9zdGF0ZV9kZXZfZ2NfbG9jayk7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnhmcm1fc3RhdGVfZ2NfbXV0ZXgpO1xuIFxuIFx0eGZybV9mbHVzaF9nYygpO1xuIFxuZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1fdXNlci5jIGIvbmV0L3hmcm0veGZybV91c2VyLmNcbmluZGV4IDYyNjZhOTJjZjMwMjAuLmEyNTg3YzdlNzk2YjQgMTAwNjQ0XG4tLS0gYS9uZXQveGZybS94ZnJtX3VzZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3hmcm0veGZybV91c2VyLmNcbkBAIC0xODc3LDcgJiM0MzsxODc3LDYgQEAgc3RhdGljIGludCB4ZnJtX2FsbG9jX3VzZXJzcGkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG4gXHRzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChza2ItXHUwMDNlc2spO1xuIFx0c3RydWN0IHhmcm1fc3RhdGUgKng7XG4gXHRzdHJ1Y3QgeGZybV91c2Vyc3BpX2luZm8gKnA7XG4tXHRzdHJ1Y3QgeGZybV90cmFuc2xhdG9yICp4dHI7XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqcmVzcF9za2I7XG4gXHR4ZnJtX2FkZHJlc3NfdCAqZGFkZHI7XG4gXHRpbnQgZmFtaWx5O1xuQEAgLTE5NDMsMTcgJiM0MzsxOTQyLDYgQEAgc3RhdGljIGludCB4ZnJtX2FsbG9jX3VzZXJzcGkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuLVx0eHRyID0geGZybV9nZXRfdHJhbnNsYXRvcigpO1xuLVx0aWYgKHh0cikge1xuLVx0XHRlcnIgPSB4dHItXHUwMDNlYWxsb2NfY29tcGF0KHNrYiwgbmxtc2dfaGRyKHNrYikpO1xuLVxuLVx0XHR4ZnJtX3B1dF90cmFuc2xhdG9yKHh0cik7XG4tXHRcdGlmIChlcnIpIHtcbi1cdFx0XHRrZnJlZV9za2IocmVzcF9za2IpO1xuLVx0XHRcdGdvdG8gb3V0O1xuLVx0XHR9XG4tXHR9XG4tXG4gXHRlcnIgPSBubG1zZ191bmljYXN0KHhmcm1fbmV0X25sc2sobmV0LCBza2IpLCByZXNwX3NrYiwgTkVUTElOS19DQihza2IpLnBvcnRpZCk7XG4gXG4gb3V0OlxuQEAgLTMzMzcsNyAmIzQzOzMzMjUsMTEgQEAgc3RhdGljIGludCB4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZShzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRcdHJldHVybiBlcnI7XG4gXHR9XG4gXG4tXHRyZXR1cm4geGZybV9ubG1zZ19tdWx0aWNhc3QobmV0LCBza2IsIDAsIFhGUk1OTEdSUF9NSUdSQVRFKTtcbiYjNDM7XHRyY3VfcmVhZF9sb2NrKCk7XG4mIzQzO1x0ZXJyID0geGZybV9ubG1zZ19tdWx0aWNhc3QobmV0LCBza2IsIDAsIFhGUk1OTEdSUF9NSUdSQVRFKTtcbiYjNDM7XHRyY3VfcmVhZF91bmxvY2soKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiB9XG4gXG4gc3RhdGljIGludCB4ZnJtX2RvX21pZ3JhdGVfc3RhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTM6NTM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SU5FVCYjMzQ7LAogICAgJiMzNDtJUFY2JiMzNDssCiAgICAmIzM0O1hGUk0mIzM0OywKICAgICYjMzQ7SU5FVF9FU1AmIzM0OywKICAgICYjMzQ7SU5FVDZfRVNQJiMzNDssCiAgICAmIzM0O0lORVRfRVNQSU5UQ1AmIzM0OywKICAgICYjMzQ7SU5FVDZfRVNQSU5UQ1AmIzM0OywKICAgICYjMzQ7WEZSTV9VU0VSJiMzNDssCiAgICAmIzM0O1hGUk1fSVBURlMmIzM0OywKICAgICYjMzQ7WEZSTV9NSUdSQVRFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZXNwX291dHB1dF9oZWFkJiMzNDssCiAgICAmIzM0O2VzcDZfb3V0cHV0X2hlYWQmIzM0OywKICAgICYjMzQ7eGZybTZfbG9jYWxfcnhwbXR1JiMzNDssCiAgICAmIzM0O3hmcm02X2xvY2FsX2Vycm9yJiMzNDssCiAgICAmIzM0O2VzcGludGNwX3JjdiYjMzQ7LAogICAgJiMzNDtoYW5kbGVfZXNwJiMzNDssCiAgICAmIzM0O3hmcm1faW5wdXQmIzM0OywKICAgICYjMzQ7eGZybV90cmFuc19yZWluamVjdCYjMzQ7LAogICAgJiMzNDt4ZnJtX3RyYW5zX3F1ZXVlX25ldCYjMzQ7LAogICAgJiMzNDtpcHRmc19za2JfY2FuX2FkZF9mcmFncyYjMzQ7LAogICAgJiMzNDtpcHRmc19yZWFzc2VtX2NvbnQmIzM0OywKICAgICYjMzQ7eGZybV9idW5kbGVfY3JlYXRlJiMzNDssCiAgICAmIzM0O3hmcm1fY3JlYXRlX2R1bW15X2J1bmRsZSYjMzQ7LAogICAgJiMzNDt4ZnJtX3N0YXRlX2djX3Rhc2smIzM0OywKICAgICYjMzQ7X194ZnJtX3N0YXRlX2RlbGV0ZSYjMzQ7LAogICAgJiMzNDt4ZnJtX2Rldl9zdGF0ZV9mbHVzaCYjMzQ7LAogICAgJiMzNDt4ZnJtX2FsbG9jX3VzZXJzcGkmIzM0OywKICAgICYjMzQ7eGZybV9zZW5kX21pZ3JhdGVfc3RhdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggdG91Y2hlcyBjb3JlIElQc2VjIChYRlJNKSBJUHY0L0lQdjYgbmV0d29ya2luZyBsb2dpYywgaW5jbHVkaW5nIEVTUCBvdXRwdXQgemVyby1jb3B5IGRvd25ncmFkZXMsIElQdjYgWEZSTSBlcnJvciByZXBvcnRpbmcgZm9yIG5vbi1mdWxsIHNvY2tldHMsIEVTUC1pbi1UQ1AgdHJhbnNwb3J0IGhlYWRlciByZXNldHRpbmcsIFhGUk0gaW5wdXQgcGFja2V0IHByb3RvIGRpc3BhdGNoIGFuZCBhc3luYyBkZXYtcmVmIHJlaW5qZWN0aW9uIGhhbmRsaW5nLCBJUC1URlMgZnJhZ21lbnQgd2FsayBib3VuZHMgY2hlY2tzLCBwb2xpY3kgYnVuZGxlIFJDVSBkZXZpY2UgcmVzb2x1dGlvbiwgc3RhdGUgR0Mgc2VyaWFsaXphdGlvbiB1bmRlciBtdXRleCwgYW5kIFhGUk0gdXNlciBuZXRsaW5rIGhhbmRsZXJzLiBBbGwgY2hhbmdlcyBhcmUgaW4gcmVhY2hhYmxlIG5ldHdvcmtpbmcgcGF0aHMgZXhlcmNpc2FibGUgdmlhIHNvY2tldHMgYW5kIFhGUk0gbmV0bGluayBpbnRlcmZhY2VzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgY2UwMTRkYTE1M2Q4ZGNlOGMzM2UzNmZhOTU3ZjEwMTM5NjNmNmUxOQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gU2VwIDcgMTM6NTM6NTAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9lc3A0LmMgYi9uZXQvaXB2NC9lc3A0LmMKaW5kZXggYTZjMThhZWE3NDk4ZC4uZTc2ZGI1ODE3ZTc4ZSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvZXNwNC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L2VzcDQuYwpAQCAtNDQxLDYgJiM0Mzs0NDEsMTIgQEAgaW50IGVzcF9vdXRwdXRfaGVhZChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGVzcF9pbmZvICoKIAogCQkJZXNwLSZndDtpbnBsYWNlID0gZmFsc2U7CiAKJiM0MzsJCQkvKiBUYWtlIHJlYWwgcGFnZSByZWZzIGFuZCBjbGVhciBTS0JGTF9NQU5BR0VEX0ZSQUdfUkVGUyBiZWZvcmUKJiM0MzsJCQkgKiB3ZSBtdXRhdGUgdGhlIGZyYWcgYXJyYXksIHNvIHRoZSBwZXItZnJhZyB1bnJlZiBzdGF5cyBiYWxhbmNlZAomIzQzOwkJCSAqIGZvciB6ZXJvY29weSBtYW5hZ2VkIGZyYWdzIChzZWUgX19pcF9hcHBlbmRfZGF0YSgpKS4KJiM0MzsJCQkgKi8KJiM0MzsJCQlza2JfemNvcHlfZG93bmdyYWRlX21hbmFnZWQoc2tiKTsKJiM0MzsKIAkJCWFsbG9jc2l6ZSA9IEFMSUdOKHRhaWxlbiwgTDFfQ0FDSEVfQllURVMpOwogCiAJCQlzcGluX2xvY2tfYmgoJmFtcDt4LSZndDtsb2NrKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2VzcDYuYyBiL25ldC9pcHY2L2VzcDYuYwppbmRleCA3MmVjMGQ3ZDExMjA5Li5iMWM5YjM2Zjc2ZGM0IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9lc3A2LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvZXNwNi5jCkBAIC00NzEsNiAmIzQzOzQ3MSwxMiBAQCBpbnQgZXNwNl9vdXRwdXRfaGVhZChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGVzcF9pbmZvCiAKIAkJCWVzcC0mZ3Q7aW5wbGFjZSA9IGZhbHNlOwogCiYjNDM7CQkJLyogVGFrZSByZWFsIHBhZ2UgcmVmcyBhbmQgY2xlYXIgU0tCRkxfTUFOQUdFRF9GUkFHX1JFRlMgYmVmb3JlCiYjNDM7CQkJICogd2UgbXV0YXRlIHRoZSBmcmFnIGFycmF5LCBzbyB0aGUgcGVyLWZyYWcgdW5yZWYgc3RheXMgYmFsYW5jZWQKJiM0MzsJCQkgKiBmb3IgemVyb2NvcHkgbWFuYWdlZCBmcmFncyAoc2VlIF9faXBfYXBwZW5kX2RhdGEoKSkuCiYjNDM7CQkJICovCiYjNDM7CQkJc2tiX3pjb3B5X2Rvd25ncmFkZV9tYW5hZ2VkKHNrYik7CiYjNDM7CiAJCQlhbGxvY3NpemUgPSBBTElHTih0YWlsZW4sIEwxX0NBQ0hFX0JZVEVTKTsKIAogCQkJc3Bpbl9sb2NrX2JoKCZhbXA7eC0mZ3Q7bG9jayk7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni94ZnJtNl9vdXRwdXQuYyBiL25ldC9pcHY2L3hmcm02X291dHB1dC5jCmluZGV4IDUxMmJkYWYxMzY5OTcuLjQ0YjIyMWEwOWEwYzggMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3hmcm02X291dHB1dC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L3hmcm02X291dHB1dC5jCkBAIC0xOSw3ICYjNDM7MTksMTAgQEAKIHZvaWQgeGZybTZfbG9jYWxfcnhwbXR1KHN0cnVjdCBza19idWZmICpza2IsIHUzMiBtdHUpCiB7CiAJc3RydWN0IGZsb3dpNiBmbDY7Ci0Jc3RydWN0IHNvY2sgKnNrID0gc2tiLSZndDtzazsKJiM0MzsJc3RydWN0IHNvY2sgKnNrID0gc2tiX3RvX2Z1bGxfc2soc2tiKTsKJiM0MzsKJiM0MzsJaWYgKCFzaykKJiM0MzsJCXJldHVybjsKIAogCWZsNi5mbG93aTZfb2lmID0gc2stJmd0O3NrX2JvdW5kX2Rldl9pZjsKIAlmbDYuZGFkZHIgPSBpcHY2X2hkcihza2IpLSZndDtkYWRkcjsKQEAgLTMxLDcgJiM0MzszNCwxMCBAQCB2b2lkIHhmcm02X2xvY2FsX2Vycm9yKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBtdHUpCiB7CiAJc3RydWN0IGZsb3dpNiBmbDY7CiAJY29uc3Qgc3RydWN0IGlwdjZoZHIgKmhkcjsKLQlzdHJ1Y3Qgc29jayAqc2sgPSBza2ItJmd0O3NrOwomIzQzOwlzdHJ1Y3Qgc29jayAqc2sgPSBza2JfdG9fZnVsbF9zayhza2IpOwomIzQzOwomIzQzOwlpZiAoIXNrKQomIzQzOwkJcmV0dXJuOwogCiAJaGRyID0gc2tiLSZndDtlbmNhcHN1bGF0aW9uID8gaW5uZXJfaXB2Nl9oZHIoc2tiKSA6IGlwdjZfaGRyKHNrYik7CiAJZmw2LmZsNl9kcG9ydCA9IGluZXRfc2soc2spLSZndDtpbmV0X2Rwb3J0OwpkaWZmIC0tZ2l0IGEvbmV0L3hmcm0vZXNwaW50Y3AuYyBiL25ldC94ZnJtL2VzcGludGNwLmMKaW5kZXggNjc0YWVkYzVhZjVhMi4uM2U3MmI5ZjA2N2I5YiAxMDA2NDQKLS0tIGEvbmV0L3hmcm0vZXNwaW50Y3AuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQveGZybS9lc3BpbnRjcC5jCkBAIC0zMCw3ICYjNDM7MzAsMTEgQEAgc3RhdGljIHZvaWQgaGFuZGxlX2VzcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc29jayAqc2spCiB7CiAJc3RydWN0IHRjcF9za2JfY2IgKnRjcF9jYiA9IChzdHJ1Y3QgdGNwX3NrYl9jYiAqKXNrYi0mZ3Q7Y2I7CiAKLQlza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcihza2IpOwomIzQzOwlpZiAoIXNrYl9yZXNldF90cmFuc3BvcnRfaGVhZGVyX2NhcmVmdWwoc2tiKSkgewomIzQzOwkJWEZSTV9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBMSU5VWF9NSUJfWEZSTUlORVJST1IpOwomIzQzOwkJa2ZyZWVfc2tiKHNrYik7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KIAogCS8qIHJlc3RvcmUgSVAgQ0IsIHdlIG5lZWQgYXQgbGVhc3QgSVA2Q0ItJmd0O25ob2ZmICovCiAJbWVtbW92ZShza2ItJmd0O2NiLCAmYW1wO3RjcF9jYi0mZ3Q7aGVhZGVyLCBzaXplb2YodGNwX2NiLSZndDtoZWFkZXIpKTsKZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1faW5wdXQuYyBiL25ldC94ZnJtL3hmcm1faW5wdXQuYwppbmRleCBlZWNhYjMzN2JkMGE3Li41ZWQ4N2Q1MTM5MmE1IDEwMDY0NAotLS0gYS9uZXQveGZybS94ZnJtX2lucHV0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3hmcm0veGZybV9pbnB1dC5jCkBAIC00NzQsNiAmIzQzOzQ3NCw3IEBAIGludCB4ZnJtX2lucHV0KHN0cnVjdCBza19idWZmICpza2IsIGludCBuZXh0aGRyLCBfX2JlMzIgc3BpLCBpbnQgZW5jYXBfdHlwZSkKIAlzdHJ1Y3QgeGZybV9zdGF0ZSAqeCA9IE5VTEw7CiAJeGZybV9hZGRyZXNzX3QgKmRhZGRyOwogCXUzMiBtYXJrID0gc2tiLSZndDttYXJrOwomIzQzOwl1OCB4ZnJtX3Byb3RvID0gbmV4dGhkcjsKIAl1bnNpZ25lZCBpbnQgZmFtaWx5ID0gQUZfVU5TUEVDOwogCWludCBkZWNhcHMgPSAwOwogCWludCBhc3luYyA9IDA7CkBAIC00ODUsNiAmIzQzOzQ4Niw3IEBAIGludCB4ZnJtX2lucHV0KHN0cnVjdCBza19idWZmICpza2IsIGludCBuZXh0aGRyLCBfX2JlMzIgc3BpLCBpbnQgZW5jYXBfdHlwZSkKIAlpZiAoZW5jYXBfdHlwZSAmbHQ7IDAgfHwgKHhvICZhbXA7JmFtcDsgKHhvLSZndDtmbGFncyAmYW1wOyBYRlJNX0dSTyB8fCBlbmNhcF90eXBlID09IDAgfHwKIAkJCQkgICAgICBlbmNhcF90eXBlID09IFVEUF9FTkNBUF9FU1BJTlVEUCkpKSB7CiAJCXggPSB4ZnJtX2lucHV0X3N0YXRlKHNrYik7CiYjNDM7CQl4ZnJtX3Byb3RvID0geC0mZ3Q7dHlwZSA/IHgtJmd0O3R5cGUtJmd0O3Byb3RvIDogbmV4dGhkcjsKIAogCQlpZiAodW5saWtlbHkoeC0mZ3Q7a20uc3RhdGUgIT0gWEZSTV9TVEFURV9WQUxJRCkpIHsKIAkJCWlmICh4LSZndDtrbS5zdGF0ZSA9PSBYRlJNX1NUQVRFX0FDUSkKQEAgLTU5MiwxMSAmIzQzOzU5NCwxMyBAQCBpbnQgeGZybV9pbnB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbmV4dGhkciwgX19iZTMyIHNwaSwgaW50IGVuY2FwX3R5cGUpCiAKIAkJeCA9IHhmcm1faW5wdXRfc3RhdGVfbG9va3VwKG5ldCwgbWFyaywgZGFkZHIsIHNwaSwgbmV4dGhkciwgZmFtaWx5KTsKIAkJaWYgKHggPT0gTlVMTCkgewomIzQzOwkJCXhmcm1fcHJvdG8gPSBuZXh0aGRyOwogCQkJc2VjcGF0aF9yZXNldChza2IpOwogCQkJWEZSTV9JTkNfU1RBVFMobmV0LCBMSU5VWF9NSUJfWEZSTUlOTk9TVEFURVMpOwogCQkJeGZybV9hdWRpdF9zdGF0ZV9ub3Rmb3VuZChza2IsIGZhbWlseSwgc3BpLCBzZXEpOwogCQkJZ290byBkcm9wOwogCQl9CiYjNDM7CQl4ZnJtX3Byb3RvID0geC0mZ3Q7dHlwZSA/IHgtJmd0O3R5cGUtJmd0O3Byb3RvIDogbmV4dGhkcjsKIAogCQlpZiAodW5saWtlbHkoeC0mZ3Q7ZGlyICZhbXA7JmFtcDsgeC0mZ3Q7ZGlyICE9IFhGUk1fU0FfRElSX0lOKSkgewogCQkJc2VjcGF0aF9yZXNldChza2IpOwpAQCAtNjA0LDYgJiM0Mzs2MDgsNyBAQCBpbnQgeGZybV9pbnB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbmV4dGhkciwgX19iZTMyIHNwaSwgaW50IGVuY2FwX3R5cGUpCiAJCQl4ZnJtX2F1ZGl0X3N0YXRlX25vdGZvdW5kKHNrYiwgZmFtaWx5LCBzcGksIHNlcSk7CiAJCQl4ZnJtX3N0YXRlX3B1dCh4KTsKIAkJCXggPSBOVUxMOwomIzQzOwkJCXhmcm1fcHJvdG8gPSBuZXh0aGRyOwogCQkJZ290byBkcm9wOwogCQl9CiAKQEAgLTcyOCw3ICYjNDM7NzMzLDcgQEAgaW50IHhmcm1faW5wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG5leHRoZHIsIF9fYmUzMiBzcGksIGludCBlbmNhcF90eXBlKQogCX0gd2hpbGUgKCFlcnIpOwogCiAJcmN1X3JlYWRfbG9jaygpOwotCWVyciA9IHhmcm1fcmN2X2NiKHNrYiwgZmFtaWx5LCB4LSZndDt0eXBlLSZndDtwcm90bywgMCk7CiYjNDM7CWVyciA9IHhmcm1fcmN2X2NiKHNrYiwgZmFtaWx5LCB4ZnJtX3Byb3RvLCAwKTsKIAlpZiAoZXJyKSB7CiAJCXJjdV9yZWFkX3VubG9jaygpOwogCQlnb3RvIGRyb3A7CkBAIC03NTMsNyAmIzQzOzc1OCw3IEBAIGludCB4ZnJtX2lucHV0KHN0cnVjdCBza19idWZmICpza2IsIGludCBuZXh0aGRyLCBfX2JlMzIgc3BpLCBpbnQgZW5jYXBfdHlwZSkKIAkJCXhmcm1fZ3JvID0geG8tJmd0O2ZsYWdzICZhbXA7IFhGUk1fR1JPOwogCiAJCWVyciA9IC1FQUZOT1NVUFBPUlQ7Ci0JCWFmaW5mbyA9IHhmcm1fc3RhdGVfYWZpbmZvX2dldF9yY3UoeC0mZ3Q7cHJvcHMuZmFtaWx5KTsKJiM0MzsJCWFmaW5mbyA9IHhmcm1fc3RhdGVfYWZpbmZvX2dldF9yY3UoZmFtaWx5KTsKIAkJaWYgKGxpa2VseShhZmluZm8pKQogCQkJZXJyID0gYWZpbmZvLSZndDt0cmFuc3BvcnRfZmluaXNoKHNrYiwgeGZybV9ncm8gfHwgYXN5bmMpOwogCQlpZiAoeGZybV9ncm8pIHsKQEAgLTc3Niw3ICYjNDM7NzgxLDcgQEAgaW50IHhmcm1faW5wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG5leHRoZHIsIF9fYmUzMiBzcGksIGludCBlbmNhcF90eXBlKQogZHJvcDoKIAlpZiAoYXN5bmMpCiAJCWRldl9wdXQoZGV2KTsKLQl4ZnJtX3Jjdl9jYihza2IsIGZhbWlseSwgeCAmYW1wOyZhbXA7IHgtJmd0O3R5cGUgPyB4LSZndDt0eXBlLSZndDtwcm90byA6IG5leHRoZHIsIC0xKTsKJiM0MzsJeGZybV9yY3ZfY2Ioc2tiLCBmYW1pbHksIHhmcm1fcHJvdG8sIC0xKTsKIAlrZnJlZV9za2Ioc2tiKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTgwMCwxMiAmIzQzOzgwNSwxNyBAQCBzdGF0aWMgdm9pZCB4ZnJtX3RyYW5zX3JlaW5qZWN0KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIAlzcGluX3VubG9ja19iaCgmYW1wO3RyYW5zLSZndDtxdWV1ZV9sb2NrKTsKIAogCWxvY2FsX2JoX2Rpc2FibGUoKTsKJiM0MzsJcmN1X3JlYWRfbG9jaygpOwogCXdoaWxlICgoc2tiID0gX19za2JfZGVxdWV1ZSgmYW1wO3F1ZXVlKSkpIHsKIAkJc3RydWN0IG5ldCAqbmV0ID0gWEZSTV9UUkFOU19TS0JfQ0Ioc2tiKS0mZ3Q7bmV0OwomIzQzOwkJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHNrYi0mZ3Q7ZGV2OwogCiAJCVhGUk1fVFJBTlNfU0tCX0NCKHNrYiktJmd0O2ZpbmlzaChuZXQsIE5VTEwsIHNrYik7CiYjNDM7CQlpZiAoZGV2KQomIzQzOwkJCWRldl9wdXQoZGV2KTsKIAkJcHV0X25ldChuZXQpOwogCX0KJiM0MzsJcmN1X3JlYWRfdW5sb2NrKCk7CiAJbG9jYWxfYmhfZW5hYmxlKCk7CiB9CiAKQEAgLTgyMSwxMiAmIzQzOzgzMSwxOCBAQCBpbnQgeGZybV90cmFuc19xdWV1ZV9uZXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCWlmIChza2JfcXVldWVfbGVuKCZhbXA7dHJhbnMtJmd0O3F1ZXVlKSAmZ3Q7PSBSRUFEX09OQ0UobmV0X2hvdGRhdGEubWF4X2JhY2tsb2cpKQogCQlyZXR1cm4gLUVOT0JVRlM7CiAKJiM0MzsJaWYgKHNrYl9kc3Qoc2tiKSAmYW1wOyZhbXA7ICFza2JfZHN0X2ZvcmNlKHNrYikpCiYjNDM7CQlyZXR1cm4gLUVIT1NUVU5SRUFDSDsKJiM0MzsKIAlCVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCB4ZnJtX3RyYW5zX2NiKSAmZ3Q7IHNpemVvZihza2ItJmd0O2NiKSk7CiAKIAlob2xkX25ldCA9IG1heWJlX2dldF9uZXQobmV0KTsKIAlpZiAoIWhvbGRfbmV0KQogCQlyZXR1cm4gLUVOT0RFVjsKIAomIzQzOwlpZiAoc2tiLSZndDtkZXYpCiYjNDM7CQlkZXZfaG9sZChza2ItJmd0O2Rldik7CiYjNDM7CiAJWEZSTV9UUkFOU19TS0JfQ0Ioc2tiKS0mZ3Q7ZmluaXNoID0gZmluaXNoOwogCVhGUk1fVFJBTlNfU0tCX0NCKHNrYiktJmd0O25ldCA9IGhvbGRfbmV0OwogCXNwaW5fbG9ja19iaCgmYW1wO3RyYW5zLSZndDtxdWV1ZV9sb2NrKTsKZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1faXB0ZnMuYyBiL25ldC94ZnJtL3hmcm1faXB0ZnMuYwppbmRleCA1OTdhZWRlYWMyNmViLi42OTIwOTQwYTM1YjQ5IDEwMDY0NAotLS0gYS9uZXQveGZybS94ZnJtX2lwdGZzLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3hmcm0veGZybV9pcHRmcy5jCkBAIC00MTYsNiAmIzQzOzQxNiwxNCBAQCBzdGF0aWMgYm9vbCBpcHRmc19za2JfY2FuX2FkZF9mcmFncyhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCWlmIChza2JfaGFzX2ZyYWdfbGlzdChza2IpIHx8IHNrYi0mZ3Q7cHBfcmVjeWNsZSAhPSB3YWxrLSZndDtwcF9yZWN5Y2xlKQogCQlyZXR1cm4gZmFsc2U7CiAKJiM0MzsJLyogUmVqZWN0IGFuIEBvZmZzZXQgdGhhdCBpcyBhdCBvciBiZXlvbmQgdGhlIGVuZCBvZiB0aGUgd2FsayYjMzk7cyBkYXRhCiYjNDM7CSAqIGJlZm9yZSBjYWxsaW5nIGlwdGZzX3NrYl9yZXNldF9mcmFnX3dhbGsoKSwgd2hvc2UgZnJhZ21lbnQtYWR2YW5jZQomIzQzOwkgKiBsb29wIGlzIG90aGVyd2lzZSB1bmJvdW5kZWQgYW5kIHdvdWxkIGluZGV4IHBhc3Qgd2Fsay0mZ3Q7ZnJhZ3NbXS4KJiM0MzsJICogVGhpcyBtaXJyb3JzIHRoZSBndWFyZCBhbHJlYWR5IHByZXNlbnQgaW4gaXB0ZnNfc2tiX2FkZF9mcmFncygpLgomIzQzOwkgKi8KJiM0MzsJaWYgKCF3YWxrLSZndDtucl9mcmFncyB8fCBvZmZzZXQgJmd0Oz0gd2Fsay0mZ3Q7dG90YWwgJiM0Mzsgd2Fsay0mZ3Q7aW5pdGlhbF9vZmZzZXQpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiAJLyogTWFrZSBvZmZzZXQgcmVsYXRpdmUgdG8gY3VycmVudCBmcmFnIGFmdGVyIHNldHRpbmcgdGhhdCAqLwogCW9mZnNldCA9IGlwdGZzX3NrYl9yZXNldF9mcmFnX3dhbGsod2Fsaywgb2Zmc2V0KTsKIApAQCAtODIwLDggJiM0Mzs4MjgsOCBAQCBzdGF0aWMgdTMyIGlwdGZzX3JlYXNzZW1fY29udChzdHJ1Y3QgeGZybV9pcHRmc19kYXRhICp4dGZzLCB1NjQgc2VxLAogCQkgKiBhbGxvY2F0ZSBhbiBpbiBwcm9ncmVzcyBza2IKIAkJICovCiAJCWlwcmVtYWluID0gX19pcHRmc19pcGxlbih4dGZzLSZndDtyYV9ydW50KTsKLQkJaWYgKGlwcmVtYWluICZsdDsgc2l6ZW9mKHh0ZnMtJmd0O3JhX3J1bnQpKSB7Ci0JCQkvKiBsZW5ndGggaGFzIHRvIGJlIGF0IGxlYXN0IHJ1bnRzaXplIGxhcmdlICovCiYjNDM7CQlpZiAoaXByZW1haW4gJmx0OyBfX2lwdGZzX2lwaGxlbih4dGZzLSZndDtyYV9ydW50KSkgewomIzQzOwkJCS8qIGxlbmd0aCBoYXMgdG8gYmUgYXQgbGVhc3QgdGhlIElQIGhlYWRlciBzaXplICovCiAJCQlYRlJNX0lOQ19TVEFUUyh4c19uZXQoeHRmcy0mZ3Q7eCksCiAJCQkJICAgICAgIExJTlVYX01JQl9YRlJNSU5JUFRGU0VSUk9SKTsKIAkJCWdvdG8gYWJhbmRvbjsKZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1fcG9saWN5LmMgYi9uZXQveGZybS94ZnJtX3BvbGljeS5jCmluZGV4IDkzMmEzMTNiOTQ2MGEuLjUxM2M5ZjIyODMzNDcgMTAwNjQ0Ci0tLSBhL25ldC94ZnJtL3hmcm1fcG9saWN5LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3hmcm0veGZybV9wb2xpY3kuYwpAQCAtMjc3MCw5ICYjNDM7Mjc3MCwxMiBAQCBzdGF0aWMgc3RydWN0IGRzdF9lbnRyeSAqeGZybV9idW5kbGVfY3JlYXRlKHN0cnVjdCB4ZnJtX3BvbGljeSAqcG9saWN5LAogCXhkc3QwLSZndDtwYXRoID0gZHN0OwogCiAJZXJyID0gLUVOT0RFVjsKLQlkZXYgPSBkc3QtJmd0O2RldjsKLQlpZiAoIWRldikKJiM0MzsJcmN1X3JlYWRfbG9jaygpOwomIzQzOwlkZXYgPSBkc3RfZGV2X3JjdShkc3QpOwomIzQzOwlpZiAoIWRldikgewomIzQzOwkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJCWdvdG8gZnJlZV9kc3Q7CiYjNDM7CX0KIAogCXhmcm1faW5pdF9wYXRoKHhkc3QwLCBkc3QsIG5maGVhZGVyX2xlbik7CiAJeGZybV9pbml0X3BtdHUoYnVuZGxlLCBueCk7CkBAIC0yNzgwLDggJiM0MzsyNzgzLDEwIEBAIHN0YXRpYyBzdHJ1Y3QgZHN0X2VudHJ5ICp4ZnJtX2J1bmRsZV9jcmVhdGUoc3RydWN0IHhmcm1fcG9saWN5ICpwb2xpY3ksCiAJZm9yICh4ZHN0X3ByZXYgPSB4ZHN0MDsgeGRzdF9wcmV2ICE9IChzdHJ1Y3QgeGZybV9kc3QgKilkc3Q7CiAJICAgICB4ZHN0X3ByZXYgPSAoc3RydWN0IHhmcm1fZHN0ICopIHhmcm1fZHN0X2NoaWxkKCZhbXA7eGRzdF9wcmV2LSZndDt1LmRzdCkpIHsKIAkJZXJyID0geGZybV9maWxsX2RzdCh4ZHN0X3ByZXYsIGRldiwgZmwpOwotCQlpZiAoZXJyKQomIzQzOwkJaWYgKGVycikgewomIzQzOwkJCXJjdV9yZWFkX3VubG9jaygpOwogCQkJZ290byBmcmVlX2RzdDsKJiM0MzsJCX0KIAogCQl4ZHN0X3ByZXYtJmd0O3UuZHN0LmhlYWRlcl9sZW4gPSBoZWFkZXJfbGVuOwogCQl4ZHN0X3ByZXYtJmd0O3UuZHN0LnRyYWlsZXJfbGVuID0gdHJhaWxlcl9sZW47CkBAIC0yNzg5LDYgJiM0MzsyNzk0LDcgQEAgc3RhdGljIHN0cnVjdCBkc3RfZW50cnkgKnhmcm1fYnVuZGxlX2NyZWF0ZShzdHJ1Y3QgeGZybV9wb2xpY3kgKnBvbGljeSwKIAkJdHJhaWxlcl9sZW4gLT0geGRzdF9wcmV2LSZndDt1LmRzdC54ZnJtLSZndDtwcm9wcy50cmFpbGVyX2xlbjsKIAl9CiAKJiM0MzsJcmN1X3JlYWRfdW5sb2NrKCk7CiAJcmV0dXJuICZhbXA7eGRzdDAtJmd0O3UuZHN0OwogCiBwdXRfc3RhdGVzOgpAQCAtMzA1OCwxMSAmIzQzOzMwNjQsMTUgQEAgc3RhdGljIHN0cnVjdCB4ZnJtX2RzdCAqeGZybV9jcmVhdGVfZHVtbXlfYnVuZGxlKHN0cnVjdCBuZXQgKm5ldCwKIAl4ZnJtX2luaXRfcGF0aCgoc3RydWN0IHhmcm1fZHN0ICopZHN0MSwgZHN0LCAwKTsKIAogCWVyciA9IC1FTk9ERVY7Ci0JZGV2ID0gZHN0LSZndDtkZXY7Ci0JaWYgKCFkZXYpCiYjNDM7CXJjdV9yZWFkX2xvY2soKTsKJiM0MzsJZGV2ID0gZHN0X2Rldl9yY3UoZHN0KTsKJiM0MzsJaWYgKCFkZXYpIHsKJiM0MzsJCXJjdV9yZWFkX3VubG9jaygpOwogCQlnb3RvIGZyZWVfZHN0OwomIzQzOwl9CiAKIAllcnIgPSB4ZnJtX2ZpbGxfZHN0KHhkc3QsIGRldiwgZmwpOwomIzQzOwlyY3VfcmVhZF91bmxvY2soKTsKIAlpZiAoZXJyKQogCQlnb3RvIGZyZWVfZHN0OwogCmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX3N0YXRlLmMgYi9uZXQveGZybS94ZnJtX3N0YXRlLmMKaW5kZXggMzZhNGY2NzkzZWRlZi4uZTQ1YWExZWQ1Yjk2NSAxMDA2NDQKLS0tIGEvbmV0L3hmcm0veGZybV9zdGF0ZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC94ZnJtL3hmcm1fc3RhdGUuYwpAQCAtMjI2LDYgJiM0MzsyMjYsNyBAQCBzdGF0aWMgc3RydWN0IHhmcm1fc3RhdGVfYWZpbmZvIF9fcmN1ICp4ZnJtX3N0YXRlX2FmaW5mb1tOUFJPVE9dOwogCiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHhmcm1fc3RhdGVfZ2NfbG9jayk7CiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHhmcm1fc3RhdGVfZGV2X2djX2xvY2spOwomIzQzO3N0YXRpYyBERUZJTkVfTVVURVgoeGZybV9zdGF0ZV9nY19tdXRleCk7CiAKIGludCBfX3hmcm1fc3RhdGVfZGVsZXRlKHN0cnVjdCB4ZnJtX3N0YXRlICp4KTsKIApAQCAtNjMyLDggJiM0Mzs2MzMsMTAgQEAgc3RhdGljIHZvaWQgeGZybV9zdGF0ZV9nY190YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIAogCXN5bmNocm9uaXplX3JjdSgpOwogCiYjNDM7CW11dGV4X2xvY2soJmFtcDt4ZnJtX3N0YXRlX2djX211dGV4KTsKIAlobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHgsIHRtcCwgJmFtcDtnY19saXN0LCBnY2xpc3QpCiAJCXhmcm1fc3RhdGVfZ2NfZGVzdHJveSh4KTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7eGZybV9zdGF0ZV9nY19tdXRleCk7CiB9CiAKIHN0YXRpYyBlbnVtIGhydGltZXJfcmVzdGFydCB4ZnJtX3RpbWVyX2hhbmRsZXIoc3RydWN0IGhydGltZXIgKm1lKQpAQCAtODIzLDkgJiM0Mzs4MjYsOSBAQCBpbnQgX194ZnJtX3N0YXRlX2RlbGV0ZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCkKIAkJaWYgKCFobGlzdF91bmhhc2hlZCgmYW1wO3gtJmd0O2J5c2VxKSkKIAkJCWhsaXN0X2RlbF9pbml0X3JjdSgmYW1wO3gtJmd0O2J5c2VxKTsKIAkJaWYgKCFobGlzdF91bmhhc2hlZCgmYW1wO3gtJmd0O3N0YXRlX2NhY2hlKSkKLQkJCWhsaXN0X2RlbF9yY3UoJmFtcDt4LSZndDtzdGF0ZV9jYWNoZSk7CiYjNDM7CQkJaGxpc3RfZGVsX2luaXRfcmN1KCZhbXA7eC0mZ3Q7c3RhdGVfY2FjaGUpOwogCQlpZiAoIWhsaXN0X3VuaGFzaGVkKCZhbXA7eC0mZ3Q7c3RhdGVfY2FjaGVfaW5wdXQpKQotCQkJaGxpc3RfZGVsX3JjdSgmYW1wO3gtJmd0O3N0YXRlX2NhY2hlX2lucHV0KTsKJiM0MzsJCQlobGlzdF9kZWxfaW5pdF9yY3UoJmFtcDt4LSZndDtzdGF0ZV9jYWNoZV9pbnB1dCk7CiAKIAkJaWYgKCFobGlzdF91bmhhc2hlZCgmYW1wO3gtJmd0O2J5c3BpKSkKIAkJCWhsaXN0X2RlbF9pbml0X3JjdSgmYW1wO3gtJmd0O2J5c3BpKTsKQEAgLTEwMDAsNiAmIzQzOzEwMDMsNyBAQCBpbnQgeGZybV9kZXZfc3RhdGVfZmx1c2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIHRhc2tfdmFsaQogb3V0OgogCXNwaW5fdW5sb2NrX2JoKCZhbXA7bmV0LSZndDt4ZnJtLnhmcm1fc3RhdGVfbG9jayk7CiAKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO3hmcm1fc3RhdGVfZ2NfbXV0ZXgpOwogCXNwaW5fbG9ja19iaCgmYW1wO3hmcm1fc3RhdGVfZGV2X2djX2xvY2spOwogcmVzdGFydF9nYzoKIAlobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHgsIHRtcCwgJmFtcDt4ZnJtX3N0YXRlX2Rldl9nY19saXN0LCBkZXZfZ2NsaXN0KSB7CkBAIC0xMDE0LDYgJiM0MzsxMDE4LDcgQEAgaW50IHhmcm1fZGV2X3N0YXRlX2ZsdXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCB0YXNrX3ZhbGkKIAogCX0KIAlzcGluX3VubG9ja19iaCgmYW1wO3hmcm1fc3RhdGVfZGV2X2djX2xvY2spOwomIzQzOwltdXRleF91bmxvY2soJmFtcDt4ZnJtX3N0YXRlX2djX211dGV4KTsKIAogCXhmcm1fZmx1c2hfZ2MoKTsKIApkaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV91c2VyLmMgYi9uZXQveGZybS94ZnJtX3VzZXIuYwppbmRleCA2MjY2YTkyY2YzMDIwLi5hMjU4N2M3ZTc5NmI0IDEwMDY0NAotLS0gYS9uZXQveGZybS94ZnJtX3VzZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQveGZybS94ZnJtX3VzZXIuYwpAQCAtMTg3Nyw3ICYjNDM7MTg3Nyw2IEBAIHN0YXRpYyBpbnQgeGZybV9hbGxvY191c2Vyc3BpKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLAogCXN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrYi0mZ3Q7c2spOwogCXN0cnVjdCB4ZnJtX3N0YXRlICp4OwogCXN0cnVjdCB4ZnJtX3VzZXJzcGlfaW5mbyAqcDsKLQlzdHJ1Y3QgeGZybV90cmFuc2xhdG9yICp4dHI7CiAJc3RydWN0IHNrX2J1ZmYgKnJlc3Bfc2tiOwogCXhmcm1fYWRkcmVzc190ICpkYWRkcjsKIAlpbnQgZmFtaWx5OwpAQCAtMTk0MywxNyAmIzQzOzE5NDIsNiBAQCBzdGF0aWMgaW50IHhmcm1fYWxsb2NfdXNlcnNwaShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwKIAkJZ290byBvdXQ7CiAJfQogCi0JeHRyID0geGZybV9nZXRfdHJhbnNsYXRvcigpOwotCWlmICh4dHIpIHsKLQkJZXJyID0geHRyLSZndDthbGxvY19jb21wYXQoc2tiLCBubG1zZ19oZHIoc2tiKSk7Ci0KLQkJeGZybV9wdXRfdHJhbnNsYXRvcih4dHIpOwotCQlpZiAoZXJyKSB7Ci0JCQlrZnJlZV9za2IocmVzcF9za2IpOwotCQkJZ290byBvdXQ7Ci0JCX0KLQl9Ci0KIAllcnIgPSBubG1zZ191bmljYXN0KHhmcm1fbmV0X25sc2sobmV0LCBza2IpLCByZXNwX3NrYiwgTkVUTElOS19DQihza2IpLnBvcnRpZCk7CiAKIG91dDoKQEAgLTMzMzcsNyAmIzQzOzMzMjUsMTEgQEAgc3RhdGljIGludCB4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZShzdHJ1Y3QgbmV0ICpuZXQsCiAJCXJldHVybiBlcnI7CiAJfQogCi0JcmV0dXJuIHhmcm1fbmxtc2dfbXVsdGljYXN0KG5ldCwgc2tiLCAwLCBYRlJNTkxHUlBfTUlHUkFURSk7CiYjNDM7CXJjdV9yZWFkX2xvY2soKTsKJiM0MzsJZXJyID0geGZybV9ubG1zZ19tdWx0aWNhc3QobmV0LCBza2IsIDAsIFhGUk1OTEdSUF9NSUdSQVRFKTsKJiM0MzsJcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7CiYjNDM7CXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyBpbnQgeGZybV9kb19taWdyYXRlX3N0YXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxMzo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MjY1CgkJCQkJCQlvdXRwdXQ6IDY4CgkJCQkJCQl0aG91Z2h0czogMjcyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2ggU2VyaWVzKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaCBzZXJpZXMuIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggc29tZXRoaW5nIHNpZ25pZmljYW50LCBnaXZlbiB0aGUgYnJlYWR0aCBvZiBmaWxlcyBtb2RpZmllZC4gTG9va2luZyBhdCB0aGUgZmlsZSBsaXN0IOKAkyBgbmV0L2lwdjQvZXNwNC5jYCwgYG5ldC9pcHY2L2VzcDYuY2AsIGBuZXQvaXB2Ni94ZnJtNl9vdXRwdXQuY2AsIGBuZXQveGZybS9lc3BpbnRjcC5jYCwgYG5ldC94ZnJtL3hmcm1faW5wdXQuY2AsIGBuZXQveGZybS94ZnJtX2lwdGZzLmNgLCBgbmV0L3hmcm0veGZybV9wb2xpY3kuY2AsIGBuZXQveGZybS94ZnJtX3N0YXRlLmNgLCBhbmQgYG5ldC94ZnJtL3hmcm1fdXNlci5jYCDigJMgdGhpcyBpcyB0b3VjaGluZyB0aGUgaGVhcnQgb2YgdGhlIG5ldHdvcmtpbmcgc3RhY2ssIHNwZWNpZmljYWxseSBJUHNlYyBhbmQgdGhlIFhGUk0gc3Vic3lzdGVtLiBUaGVzZSBhcmUgYWxsIGNyaXRpY2FsIGFyZWFzLgoKR2l2ZW4gdGhpcyBzY29wZSwgdGhlIHBvdGVudGlhbCBhdHRhY2sgc3VyZmFjZSBpcyBsYXJnZS4gV2UmIzM5O3JlIHRhbGtpbmcgY29yZSBuZXR3b3JraW5nIGZ1bmN0aW9uYWxpdHksIGZ1bGx5IGV4cG9zZWQgdGhyb3VnaCBzdGFuZGFyZCBuZXR3b3JrIHNvY2tldHMsIG5ldGxpbmsgaW50ZXJmYWNlcyBsaWtlIFhGUk0gbmV0bGluayBhbmQgUEZfS0VZLCB2YXJpb3VzIHZpcnR1YWwgbmV0d29yayBkZXZpY2VzLCB0dW4vdGFwIGludGVyZmFjZXMsIGFuZCBldmVuIGxvb3BiYWNrLiBUaGlzIHNjcmVhbXMgJiMzNDtXb3J0aEZ1enppbmc9dHJ1ZSYjMzQ7LiBUaGUgZXhwb3N1cmUgaXMgaGlnaCwgYW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgYSB2dWxuZXJhYmlsaXR5IGhlcmUgY291bGQgYmUgd2lkZXNwcmVhZC4KCk5vdywgbXkgbmV4dCBzdGVwIGlzIHRvIGRyaWxsIGRvd24gaW50byB0aGUgc3BlY2lmaWMgZnVuY3Rpb25zIGJlaW5nIG1vZGlmaWVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgS2NvbmZpZyBkZXBlbmRlbmNpZXMgdG8gaWRlbnRpZnkgZXhhY3RseSB3aGF0IGNvbmZpZ3VyYXRpb25zIHdvdWxkIGVuYWJsZSB0aGlzIGNvZGUgYW5kIGlkZW50aWZ5IHRoZSBsaWtlbHkgZm9jdXMgc3ltYm9scy4gSSB0aGluayBgZ3JlcHBlcmAgaXMgdGhlIHBlcmZlY3QgdG9vbCBmb3IgdGhpcywgb3IgSSYjMzk7bGwganVzdCBtYW51YWxseSBleGFtaW5lIHRoZSBmaWxlcyBmb3IgdGhlIHJlbGV2YW50IEtjb25maWcgb3B0aW9ucyBhbmQgZGV0ZXJtaW5lIHRoZSBtb3N0IGFwcHJvcHJpYXRlIEZvY3VzU3ltYm9scyB0byB0YXJnZXQuIFRoaXMgaXMgd2hlcmUgdGhlIHJlYWwgd29yayBiZWdpbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTM6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElORVRfRVNQfGNvbmZpZyBYRlJNfGNvbmZpZyBJTkVUNl9FU1B8Y29uZmlnIE5FVF9LRVl8Y29uZmlnIFhGUk1fVVNFUnxjb25maWcgWEZSTV9JUFRGU3xjb25maWcgWEZSTV9FU1BJTlRDUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvS2NvbmZpZz0zMzk9Y29uZmlnIElORVRfQUhcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTM1My1cbm5ldC9pcHY0L0tjb25maWc6MzU0OmNvbmZpZyBJTkVUX0VTUFxubmV0L2lwdjQvS2NvbmZpZy0zNTUtXHR0cmlzdGF0ZSBcJiMzNDtJUDogRVNQIHRyYW5zZm9ybWF0aW9uXCYjMzQ7XG4tLVxubmV0L2lwdjQvS2NvbmZpZy0zNjgtXG5uZXQvaXB2NC9LY29uZmlnOjM2OTpjb25maWcgSU5FVF9FU1BfT0ZGTE9BRFxubmV0L2lwdjQvS2NvbmZpZy0zNzAtXHR0cmlzdGF0ZSBcJiMzNDtJUDogRVNQIHRyYW5zZm9ybWF0aW9uIG9mZmxvYWRcJiMzNDtcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTM4MS1cbm5ldC9pcHY0L0tjb25maWc6MzgyOmNvbmZpZyBJTkVUX0VTUElOVENQXG5uZXQvaXB2NC9LY29uZmlnLTM4My1cdGJvb2wgXCYjMzQ7SVA6IEVTUCBpbiBUQ1AgZW5jYXBzdWxhdGlvbiAoUkZDIDgyMjkpXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZz00Nz1jb25maWcgSU5FVDZfQUhcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTYxLVxubmV0L2lwdjYvS2NvbmZpZzo2Mjpjb25maWcgSU5FVDZfRVNQXG5uZXQvaXB2Ni9LY29uZmlnLTYzLVx0dHJpc3RhdGUgXCYjMzQ7SVB2NjogRVNQIHRyYW5zZm9ybWF0aW9uXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy03Ni1cbm5ldC9pcHY2L0tjb25maWc6Nzc6Y29uZmlnIElORVQ2X0VTUF9PRkZMT0FEXG5uZXQvaXB2Ni9LY29uZmlnLTc4LVx0dHJpc3RhdGUgXCYjMzQ7SVB2NjogRVNQIHRyYW5zZm9ybWF0aW9uIG9mZmxvYWRcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTg5LVxubmV0L2lwdjYvS2NvbmZpZzo5MDpjb25maWcgSU5FVDZfRVNQSU5UQ1Bcbm5ldC9pcHY2L0tjb25maWctOTEtXHRib29sIFwmIzM0O0lQdjY6IEVTUCBpbiBUQ1AgZW5jYXBzdWxhdGlvbiAoUkZDIDgyMjkpXCYjMzQ7XG4tLVxubmV0L3hmcm0vS2NvbmZpZy00LSNcbm5ldC94ZnJtL0tjb25maWc6NTpjb25maWcgWEZSTVxubmV0L3hmcm0vS2NvbmZpZy02LVx0Ym9vbFxuLS1cbm5ldC94ZnJtL0tjb25maWctMTAtXG5uZXQveGZybS9LY29uZmlnOjExOmNvbmZpZyBYRlJNX09GRkxPQURcbm5ldC94ZnJtL0tjb25maWctMTItXHRib29sXG5uZXQveGZybS9LY29uZmlnLTEzLVxubmV0L3hmcm0vS2NvbmZpZzoxNDpjb25maWcgWEZSTV9BTEdPXG5uZXQveGZybS9LY29uZmlnLTE1LVx0dHJpc3RhdGVcbi0tXG5uZXQveGZybS9LY29uZmlnPTIyPWlmIElORVRcbm5ldC94ZnJtL0tjb25maWc6MjM6Y29uZmlnIFhGUk1fVVNFUlxubmV0L3hmcm0vS2NvbmZpZy0yNC1cdHRyaXN0YXRlIFwmIzM0O1RyYW5zZm9ybWF0aW9uIHVzZXIgY29uZmlndXJhdGlvbiBpbnRlcmZhY2VcJiMzNDtcbi0tXG5uZXQveGZybS9LY29uZmlnLTMxLVxubmV0L3hmcm0vS2NvbmZpZzozMjpjb25maWcgWEZSTV9VU0VSX0NPTVBBVFxubmV0L3hmcm0vS2NvbmZpZy0zMy1cdHRyaXN0YXRlIFwmIzM0O0NvbXBhdGlibGUgQUJJIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQveGZybS9LY29uZmlnLTQyLVxubmV0L3hmcm0vS2NvbmZpZzo0Mzpjb25maWcgWEZSTV9JTlRFUkZBQ0Vcbm5ldC94ZnJtL0tjb25maWctNDQtXHR0cmlzdGF0ZSBcJiMzNDtUcmFuc2Zvcm1hdGlvbiB2aXJ0dWFsIGludGVyZmFjZVwmIzM0O1xuLS1cbm5ldC94ZnJtL0tjb25maWctNTAtXG5uZXQveGZybS9LY29uZmlnOjUxOmNvbmZpZyBYRlJNX1NVQl9QT0xJQ1lcbm5ldC94ZnJtL0tjb25maWctNTItXHRib29sIFwmIzM0O1RyYW5zZm9ybWF0aW9uIHN1YiBwb2xpY3kgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC94ZnJtL0tjb25maWctNjAtXG5uZXQveGZybS9LY29uZmlnOjYxOmNvbmZpZyBYRlJNX01JR1JBVEVcbm5ldC94ZnJtL0tjb25maWctNjItXHRib29sIFwmIzM0O1RyYW5zZm9ybWF0aW9uIG1pZ3JhdGUgZGF0YWJhc2VcJiMzNDtcbi0tXG5uZXQveGZybS9LY29uZmlnLTcxLVxubmV0L3hmcm0vS2NvbmZpZzo3Mjpjb25maWcgWEZSTV9TVEFUSVNUSUNTXG5uZXQveGZybS9LY29uZmlnLTczLVx0Ym9vbCBcJiMzNDtUcmFuc2Zvcm1hdGlvbiBzdGF0aXN0aWNzXCYjMzQ7XG4tLVxubmV0L3hmcm0vS2NvbmZpZy04My0jIFJGQyA4MjIxIGxpc3RzIGFzIE1VU1QgYmUgaW1wbGVtZW50ZWQuXG5uZXQveGZybS9LY29uZmlnOjg0OmNvbmZpZyBYRlJNX0FIXG5uZXQveGZybS9LY29uZmlnLTg1LVx0dHJpc3RhdGVcbi0tXG5uZXQveGZybS9LY29uZmlnLTkyLSMgYWxnb3JpdGhtcyB0aGF0IFJGQyA4MjIxIGxpc3RzIGFzIE1VU1QgYmUgaW1wbGVtZW50ZWQuXG5uZXQveGZybS9LY29uZmlnOjkzOmNvbmZpZyBYRlJNX0VTUFxubmV0L3hmcm0vS2NvbmZpZy05NC1cdHRyaXN0YXRlXG4tLVxubmV0L3hmcm0vS2NvbmZpZy0xMDUtXG5uZXQveGZybS9LY29uZmlnOjEwNjpjb25maWcgWEZSTV9JUENPTVBcbm5ldC94ZnJtL0tjb25maWctMTA3LVx0dHJpc3RhdGVcbi0tXG5uZXQveGZybS9LY29uZmlnLTExMS1cbm5ldC94ZnJtL0tjb25maWc6MTEyOmNvbmZpZyBORVRfS0VZXG5uZXQveGZybS9LY29uZmlnLTExMy1cdHRyaXN0YXRlIFwmIzM0O1BGX0tFWSBzb2NrZXRzIChkZXByZWNhdGVkKVwmIzM0O1xuLS1cbm5ldC94ZnJtL0tjb25maWctMTI0LVxubmV0L3hmcm0vS2NvbmZpZzoxMjU6Y29uZmlnIE5FVF9LRVlfTUlHUkFURVxubmV0L3hmcm0vS2NvbmZpZy0xMjYtXHRib29sIFwmIzM0O1BGX0tFWSBNSUdSQVRFXCYjMzQ7XG4tLVxubmV0L3hmcm0vS2NvbmZpZy0xNDAtXG5uZXQveGZybS9LY29uZmlnOjE0MTpjb25maWcgWEZSTV9JUFRGU1xubmV0L3hmcm0vS2NvbmZpZy0xNDItXHR0cmlzdGF0ZSBcJiMzNDtJUHNlYyBJUC1URlMvQUdHRlJBRyAoUkZDIDkzNDcpIGVuY2Fwc3VsYXRpb24gc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC94ZnJtL0tjb25maWctMTU2LVxubmV0L3hmcm0vS2NvbmZpZzoxNTc6Y29uZmlnIFhGUk1fRVNQSU5UQ1Bcbm5ldC94ZnJtL0tjb25maWctMTU4LVx0Ym9vbFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDEzOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMjQ3CgkJCQkJCQlvdXRwdXQ6IDgxCgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgQ29tcGlsYXRpb24gRGVwZW5kZW5jaWVzKioKClJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBtb2RpZmllZCBmaWxlcyBhcmUgYWN0dWFsbHkgYmVpbmcgaW50ZWdyYXRlZCBpbnRvIHRoZSBidWlsZCBwcm9jZXNzLiBUaGUgbW9zdCBsaWtlbHkgc3BvdHMgdG8gZmluZCB0aGF0IGluZm9ybWF0aW9uLCBvZiBjb3Vyc2UsIGFyZSB0aGUgTWFrZWZpbGVzLiBTcGVjaWZpY2FsbHksIHNpbmNlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggbmV0d29yayBzdGFjayBjb2RlLCBJJiMzOTtsbCBzdGFydCB3aXRoIHRoZSBvYnZpb3VzIHN1c3BlY3RzOiBgbmV0L2lwdjRgLCBgbmV0L2lwdjZgLCBhbmQgYG5ldC94ZnJtYC4gVGhlc2UgYXJlIHRoZSBjb3JlIHN1YmRpcmVjdG9yaWVzIGhhbmRsaW5nIElQdjQsIElQdjYsIGFuZCB0aGUgWEZSTSBmcmFtZXdvcmsgcmVzcGVjdGl2ZWx5LCBzbyB0aGUgY29tcGlsYXRpb24gcnVsZXMgZm9yIGZpbGVzIHdpdGhpbiB0aG9zZSBhcmVhcyBhcmUgcHJvYmFibHkgZGVmaW5lZCB0aGVyZS4gQSBxdWljayBzY2FuIG9mIHRob3NlIE1ha2VmaWxlcyBzaG91bGQgcmV2ZWFsIGV4YWN0bHkgaG93IHRoZXNlIG1vZGlmaWVkIGZpbGVzIGFyZSBiZWluZyBjb21waWxlZCwgbGlua2VkLCBhbmQgYW55IGRlcGVuZGVuY2llcyB0aGV5IG1pZ2h0IGhhdmUgb24gb3RoZXIgbW9kdWxlcyBvciBsaWJyYXJpZXMuIFRoYXQmIzM5O3MgdGhlIGZpcnN0IGFuZCBtb3N0IGNydWNpYWwgc3RlcCB0byBlbnN1cmUgdGhlIGNoYW5nZXMgYXJlIGNvcnJlY3RseSBpbnRlZ3JhdGVkIGFuZCBkb24mIzM5O3QgaW50cm9kdWNlIGFueSBidWlsZC10aW1lIGlzc3Vlcy4gVW5kZXJzdGFuZGluZyB0aGUgZXhpc3RpbmcgYnVpbGQgc3lzdGVtIGlzIGtleSB0byBtYWtpbmcgc3VyZSBteSBjaGFuZ2VzIGZpdCBzZWFtbGVzc2x5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDEzOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2VzcDRcXC5vfGVzcDZcXC5vfHhmcm02X291dHB1dFxcLm98ZXNwaW50Y3BcXC5vfHhmcm1faW5wdXRcXC5vfHhmcm1faXB0ZnNcXC5vfHhmcm1fcG9saWN5XFwub3x4ZnJtX3N0YXRlXFwub3x4ZnJtX3VzZXJcXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9NYWtlZmlsZT0zNT1vYmotJChDT05GSUdfSU5FVF9BSCkgJiM0Mzs9IGFoNC5vXG5uZXQvaXB2NC9NYWtlZmlsZTozNjpvYmotJChDT05GSUdfSU5FVF9FU1ApICYjNDM7PSBlc3A0Lm9cbm5ldC9pcHY0L01ha2VmaWxlLTM3LW9iai0kKENPTkZJR19JTkVUX0VTUF9PRkZMT0FEKSAmIzQzOz0gZXNwNF9vZmZsb2FkLm9cbi0tXG5uZXQvaXB2Ni9NYWtlZmlsZT0xOD1pcHY2LSQoQ09ORklHX1hGUk0pICYjNDM7PSB4ZnJtNl9wb2xpY3kubyB4ZnJtNl9zdGF0ZS5vIHhmcm02X2lucHV0Lm8gXFxcbm5ldC9pcHY2L01ha2VmaWxlOjE5Olx0eGZybTZfb3V0cHV0Lm8geGZybTZfcHJvdG9jb2wub1xubmV0L2lwdjYvTWFrZWZpbGUtMjAtaXB2Ni0kKENPTkZJR19ORVRGSUxURVIpICYjNDM7PSBuZXRmaWx0ZXIub1xuLS1cbm5ldC9pcHY2L01ha2VmaWxlPTMwPW9iai0kKENPTkZJR19JTkVUNl9BSCkgJiM0Mzs9IGFoNi5vXG5uZXQvaXB2Ni9NYWtlZmlsZTozMTpvYmotJChDT05GSUdfSU5FVDZfRVNQKSAmIzQzOz0gZXNwNi5vXG5uZXQvaXB2Ni9NYWtlZmlsZS0zMi1vYmotJChDT05GSUdfSU5FVDZfRVNQX09GRkxPQUQpICYjNDM7PSBlc3A2X29mZmxvYWQub1xuLS1cbm5ldC94ZnJtL01ha2VmaWxlPTEyPWVuZGlmXG5uZXQveGZybS9NYWtlZmlsZS0xMy1cbm5ldC94ZnJtL01ha2VmaWxlOjE0Om9iai0kKENPTkZJR19YRlJNKSA6PSB4ZnJtX3BvbGljeS5vIHhmcm1fc3RhdGUubyB4ZnJtX2hhc2gubyBcXFxubmV0L3hmcm0vTWFrZWZpbGU6MTU6XHRcdCAgICAgIHhmcm1faW5wdXQubyB4ZnJtX291dHB1dC5vIFxcXG5uZXQveGZybS9NYWtlZmlsZS0xNi1cdFx0ICAgICAgeGZybV9zeXNjdGwubyB4ZnJtX3JlcGxheS5vIHhmcm1fZGV2aWNlLm8gXFxcbi0tXG5uZXQveGZybS9NYWtlZmlsZT0xOT1vYmotJChDT05GSUdfWEZSTV9BTEdPKSAmIzQzOz0geGZybV9hbGdvLm9cbm5ldC94ZnJtL01ha2VmaWxlOjIwOm9iai0kKENPTkZJR19YRlJNX1VTRVIpICYjNDM7PSB4ZnJtX3VzZXIub1xubmV0L3hmcm0vTWFrZWZpbGUtMjEtb2JqLSQoQ09ORklHX1hGUk1fVVNFUl9DT01QQVQpICYjNDM7PSB4ZnJtX2NvbXBhdC5vXG4tLVxubmV0L3hmcm0vTWFrZWZpbGU9MjM9b2JqLSQoQ09ORklHX1hGUk1fSU5URVJGQUNFKSAmIzQzOz0geGZybV9pbnRlcmZhY2Uub1xubmV0L3hmcm0vTWFrZWZpbGU6MjQ6b2JqLSQoQ09ORklHX1hGUk1fSVBURlMpICYjNDM7PSB4ZnJtX2lwdGZzLm9cbm5ldC94ZnJtL01ha2VmaWxlOjI1Om9iai0kKENPTkZJR19YRlJNX0VTUElOVENQKSAmIzQzOz0gZXNwaW50Y3Aub1xubmV0L3hmcm0vTWFrZWZpbGUtMjYtb2JqLSQoQ09ORklHX0RFQlVHX0lORk9fQlRGKSAmIzQzOz0geGZybV9zdGF0ZV9icGYub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDEzOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMjAzCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRoaW5nczoKCioqRGlnZ2luZyBpbnRvIHRoZSBYRlJNIENvZGUqKgoKT2theSwgc28gSSYjMzk7bSByZXZpc2l0aW5nIHRoaXMgWEZSTSBjb2RlIGFnYWluLiBMZXQmIzM5O3MgbWFrZSBzdXJlIHdlJiMzOTtyZSBub3QgbWlzc2luZyBhbnl0aGluZyByZWxhdGVkIHRvIG1pZ3JhdGlvbi4gSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGUgYFhGUk1fTUlHUkFURWAgb3B0aW9uLCBhbmQgdGhhdCBtZWFucyBJIG5lZWQgdG8gbG9vayBjbG9zZWx5IGF0IGB4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZWAgaW4gYHhmcm1fdXNlci5jYC4gR290dGEgbWFrZSBzdXJlIHRoZSBtaWdyYXRpb24gc3RhdGUgaGFuZGxpbmcgaXMgc29saWQsIGVzcGVjaWFsbHkgd2l0aCBhbGwgdGhlIG51YW5jZXMgd2UmIzM5O3ZlIHNlZW4gaW4gdGhlIHBhc3QuIEFuZCBJIGNhbiYjMzk7dCBmb3JnZXQgYWJvdXQgRVNQIGluIFRDUCBtb2RlLi4uIEkgc2hvdWxkIHJldmlldyBgWEZSTV9FU1BJTlRDUGAgYW5kIHRoZSByZWxldmFudCBgc2VsZWN0c2Agc3RhdGVtZW50cyBpbiB0aGUgS2NvbmZpZyBmaWxlLiBHb3R0YSBiZSBkaWxpZ2VudCBhYm91dCBkZXBlbmRlbmNpZXMgYW5kIGVuc3VyZSBhbGwgdGhlIHJpZ2h0IGNvbXBvbmVudHMgYXJlIGVuYWJsZWQgb3IgZGlzYWJsZWQgY29ycmVjdGx5LiBHb3R0YSBtYWtlIHN1cmUgbm90aGluZyBicmVha3MgZHVyaW5nIGEgcmUtY29tcGlsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxMzo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtJTkVUX0VTUElOVENQfElORVQ2X0VTUElOVENQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9LY29uZmlnPTM2OT1jb25maWcgSU5FVF9FU1BfT0ZGTE9BRFxuLS1cbm5ldC9pcHY0L0tjb25maWctMzgxLVxubmV0L2lwdjQvS2NvbmZpZzozODI6Y29uZmlnIElORVRfRVNQSU5UQ1Bcbm5ldC9pcHY0L0tjb25maWctMzgzLVx0Ym9vbCBcJiMzNDtJUDogRVNQIGluIFRDUCBlbmNhcHN1bGF0aW9uIChSRkMgODIyOSlcJiMzNDtcbi0tXG5uZXQvaXB2NC9lc3A0LmM9OTk9c3RhdGljIHZvaWQgZXNwX3NzZ191bnJlZihzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgdm9pZCAqdG1wLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBib29sIGFscmVhZHlfdW5yZWYpXG4tLVxubmV0L2lwdjQvZXNwNC5jLTEyNC1cbm5ldC9pcHY0L2VzcDQuYzoxMjU6I2lmZGVmIENPTkZJR19JTkVUX0VTUElOVENQXG5uZXQvaXB2NC9lc3A0LmMtMTI2LXN0YXRpYyBzdHJ1Y3Qgc29jayAqZXNwX2ZpbmRfdGNwX3NrKHN0cnVjdCB4ZnJtX3N0YXRlICp4KVxuLS1cbm5ldC9pcHY0L2VzcDQuYz0zMDk9c3RhdGljIHN0cnVjdCBpcF9lc3BfaGRyICplc3Bfb3V0cHV0X3VkcF9lbmNhcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pcHY0L2VzcDQuYy0zMzgtXG5uZXQvaXB2NC9lc3A0LmM6MzM5OiNpZmRlZiBDT05GSUdfSU5FVF9FU1BJTlRDUFxubmV0L2lwdjQvZXNwNC5jLTM0MC1zdGF0aWMgc3RydWN0IGlwX2VzcF9oZHIgKmVzcF9vdXRwdXRfdGNwX2VuY2FwKHN0cnVjdCB4ZnJtX3N0YXRlICp4LFxuLS1cbm5ldC9pcHY0L2VzcDQuYz0xMTE4PXN0YXRpYyBpbnQgZXNwX2luaXRfc3RhdGUoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQvaXB2NC9lc3A0LmMtMTE1Ni1cdFx0XHRicmVhaztcbm5ldC9pcHY0L2VzcDQuYzoxMTU3OiNpZmRlZiBDT05GSUdfSU5FVF9FU1BJTlRDUFxubmV0L2lwdjQvZXNwNC5jLTExNTgtXHRcdGNhc2UgVENQX0VOQ0FQX0VTUElOVENQOlxuLS1cbm5ldC9pcHY2L0tjb25maWc9Nzc9Y29uZmlnIElORVQ2X0VTUF9PRkZMT0FEXG4tLVxubmV0L2lwdjYvS2NvbmZpZy04OS1cbm5ldC9pcHY2L0tjb25maWc6OTA6Y29uZmlnIElORVQ2X0VTUElOVENQXG5uZXQvaXB2Ni9LY29uZmlnLTkxLVx0Ym9vbCBcJiMzNDtJUHY2OiBFU1AgaW4gVENQIGVuY2Fwc3VsYXRpb24gKFJGQyA4MjI5KVwmIzM0O1xuLS1cbm5ldC9pcHY2L2VzcDYuYz0xMTY9c3RhdGljIHZvaWQgZXNwX3NzZ191bnJlZihzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgdm9pZCAqdG1wLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBib29sIGFscmVhZHlfdW5yZWYpXG4tLVxubmV0L2lwdjYvZXNwNi5jLTE0MS1cbm5ldC9pcHY2L2VzcDYuYzoxNDI6I2lmZGVmIENPTkZJR19JTkVUNl9FU1BJTlRDUFxubmV0L2lwdjYvZXNwNi5jLTE0My1zdGF0aWMgc3RydWN0IHNvY2sgKmVzcDZfZmluZF90Y3Bfc2soc3RydWN0IHhmcm1fc3RhdGUgKngpXG4tLVxubmV0L2lwdjYvZXNwNi5jPTM0Nj1zdGF0aWMgc3RydWN0IGlwX2VzcF9oZHIgKmVzcDZfb3V0cHV0X3VkcF9lbmNhcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pcHY2L2VzcDYuYy0zNjktXG5uZXQvaXB2Ni9lc3A2LmM6MzcwOiNpZmRlZiBDT05GSUdfSU5FVDZfRVNQSU5UQ1Bcbm5ldC9pcHY2L2VzcDYuYy0zNzEtc3RhdGljIHN0cnVjdCBpcF9lc3BfaGRyICplc3A2X291dHB1dF90Y3BfZW5jYXAoc3RydWN0IHhmcm1fc3RhdGUgKngsXG4tLVxubmV0L2lwdjYvZXNwNi5jPTExNTY9c3RhdGljIGludCBlc3A2X2luaXRfc3RhdGUoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQvaXB2Ni9lc3A2LmMtMTIwNC1cdFx0XHRicmVhaztcbm5ldC9pcHY2L2VzcDYuYzoxMjA1OiNpZmRlZiBDT05GSUdfSU5FVDZfRVNQSU5UQ1Bcbm5ldC9pcHY2L2VzcDYuYy0xMjA2LVx0XHRjYXNlIFRDUF9FTkNBUF9FU1BJTlRDUDpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxMzo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjQxMAoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgS2NvbmZpZyBkZWZpbml0aW9uczoKCioqQW5hbHl6aW5nIEVTUCBpbiBUQ1AgS2NvbmZpZyBPcHRpb25zKioKCk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBLY29uZmlnIG9wdGlvbnMgcmVsYXRlZCB0byBFU1Agb3ZlciBUQ1AuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB0aGVzZSBhcmUgZGVmaW5lZCBhbmQsIG1vcmUgaW1wb3J0YW50bHksIGhvdyB0aGV5IGludGVycmVsYXRlLiBJJiMzOTttIGZvY3VzaW5nIG9uIGBJTkVUX0VTUElOVENQYCwgYElORVQ2X0VTUElOVENQYCwgYW5kIGBYRlJNX0VTUElOVENQYC4gSSYjMzk7bSBpbW1lZGlhdGVseSB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zIGZvciBJUHY0IHZzLiBJUHY2IHN1cHBvcnQsIGhlbmNlIG15IGludGVyZXN0IGluIHRoZSBgSU5FVGAgcHJlZml4ZXMsIHdoaWNoIGluZGljYXRlIHRoaXMuIFRoZSBgWEZSTWAgcHJlZml4IHRlbGxzIG1lIHRoaXMgb3B0aW9uIGlzIHJlbGF0ZWQgdG8gdGhlIFhGUk0gZnJhbWV3b3JrIGFuZCBob3cgaXQgaW50ZXJmYWNlcyB3aXRoIEVTUC1vdmVyLVRDUCBpbXBsZW1lbnRhdGlvbnMuIEkgd2FudCB0byBzZWUgaG93IHRoZSBidWlsZCBzeXN0ZW0gaW50ZWdyYXRlcyBvciBjb25kaXRpb25hbGl6ZXMgYmFzZWQgb24gdGhlc2Ugb3B0aW9ucy4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgZGVwZW5kZW5jaWVzIGFuZCBzZWxlY3Qgc3RhdGVtZW50cyB0byBzZWUgdGhlIGltcGxpY2F0aW9ucyBvZiBlYWNoIG9wdGlvbiBiZWluZyBlbmFibGVkIG9yIGRpc2FibGVkLiBJdCB3aWxsIGJlIGhlbHBmdWwgdG8gaWRlbnRpZnkgYW55IGRpZmZlcmVuY2VzIG9yIHNpbWlsYXJpdGllcyBpbiB0aGUgaW1wbGVtZW50YXRpb25zIGJhc2VkIG9uIHdoZXRoZXIgb3Igbm90IElQdjQgb3IgSVB2NiBpcyBzZWxlY3RlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hldGhlciB0aGVzZSBvcHRpb25zIGFyZSBtdXR1YWxseSBleGNsdXNpdmUsIG9yIGlmIGl0IGlzIHBvc3NpYmxlIHRvIGNvbmZpZ3VyZSwgc2F5LCBgSU5FVF9FU1BJTlRDUGAgd2l0aCBgSU5FVDZfRVNQSU5UQ1BgIG9yIGBYRlJNX0VTUElOVENQYC4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgcG9zc2libGUgYnVpbGQgY29uZmlndXJhdGlvbnMgYW5kIHdoZXRoZXIgdGhlIG9wdGlvbnMgYXJlIGludGVuZGVkIGZvciBzcGVjaWZpYyB1c2UgY2FzZXMgb3IgYXJjaGl0ZWN0dXJlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTM6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7SU5FVF9FU1BJTlRDUHxJTkVUNl9FU1BJTlRDUHxYRlJNX0VTUElOVENQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9LY29uZmlnPTM2OT1jb25maWcgSU5FVF9FU1BfT0ZGTE9BRFxuLS1cbm5ldC9pcHY0L0tjb25maWctMzgxLVxubmV0L2lwdjQvS2NvbmZpZzozODI6Y29uZmlnIElORVRfRVNQSU5UQ1Bcbm5ldC9pcHY0L0tjb25maWctMzgzLVx0Ym9vbCBcJiMzNDtJUDogRVNQIGluIFRDUCBlbmNhcHN1bGF0aW9uIChSRkMgODIyOSlcJiMzNDtcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTM4Ni1cdHNlbGVjdCBORVRfU09DS19NU0dcbm5ldC9pcHY0L0tjb25maWc6Mzg3Olx0c2VsZWN0IFhGUk1fRVNQSU5UQ1Bcbm5ldC9pcHY0L0tjb25maWctMzg4LVx0aGVscFxuLS1cbm5ldC9pcHY0L2VzcDQuYz05OT1zdGF0aWMgdm9pZCBlc3Bfc3NnX3VucmVmKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCB2b2lkICp0bXAsIHN0cnVjdCBza19idWZmICpza2IsIGJvb2wgYWxyZWFkeV91bnJlZilcbi0tXG5uZXQvaXB2NC9lc3A0LmMtMTI0LVxubmV0L2lwdjQvZXNwNC5jOjEyNTojaWZkZWYgQ09ORklHX0lORVRfRVNQSU5UQ1Bcbm5ldC9pcHY0L2VzcDQuYy0xMjYtc3RhdGljIHN0cnVjdCBzb2NrICplc3BfZmluZF90Y3Bfc2soc3RydWN0IHhmcm1fc3RhdGUgKngpXG4tLVxubmV0L2lwdjQvZXNwNC5jPTMwOT1zdGF0aWMgc3RydWN0IGlwX2VzcF9oZHIgKmVzcF9vdXRwdXRfdWRwX2VuY2FwKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjQvZXNwNC5jLTMzOC1cbm5ldC9pcHY0L2VzcDQuYzozMzk6I2lmZGVmIENPTkZJR19JTkVUX0VTUElOVENQXG5uZXQvaXB2NC9lc3A0LmMtMzQwLXN0YXRpYyBzdHJ1Y3QgaXBfZXNwX2hkciAqZXNwX291dHB1dF90Y3BfZW5jYXAoc3RydWN0IHhmcm1fc3RhdGUgKngsXG4tLVxubmV0L2lwdjQvZXNwNC5jPTExMTg9c3RhdGljIGludCBlc3BfaW5pdF9zdGF0ZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuLS1cbm5ldC9pcHY0L2VzcDQuYy0xMTU2LVx0XHRcdGJyZWFrO1xubmV0L2lwdjQvZXNwNC5jOjExNTc6I2lmZGVmIENPTkZJR19JTkVUX0VTUElOVENQXG5uZXQvaXB2NC9lc3A0LmMtMTE1OC1cdFx0Y2FzZSBUQ1BfRU5DQVBfRVNQSU5UQ1A6XG4tLVxubmV0L2lwdjYvS2NvbmZpZz03Nz1jb25maWcgSU5FVDZfRVNQX09GRkxPQURcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTg5LVxubmV0L2lwdjYvS2NvbmZpZzo5MDpjb25maWcgSU5FVDZfRVNQSU5UQ1Bcbm5ldC9pcHY2L0tjb25maWctOTEtXHRib29sIFwmIzM0O0lQdjY6IEVTUCBpbiBUQ1AgZW5jYXBzdWxhdGlvbiAoUkZDIDgyMjkpXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy05NC1cdHNlbGVjdCBORVRfU09DS19NU0dcbm5ldC9pcHY2L0tjb25maWc6OTU6XHRzZWxlY3QgWEZSTV9FU1BJTlRDUFxubmV0L2lwdjYvS2NvbmZpZy05Ni1cdGhlbHBcbi0tXG5uZXQvaXB2Ni9lc3A2LmM9MTE2PXN0YXRpYyB2b2lkIGVzcF9zc2dfdW5yZWYoc3RydWN0IHhmcm1fc3RhdGUgKngsIHZvaWQgKnRtcCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgYm9vbCBhbHJlYWR5X3VucmVmKVxuLS1cbm5ldC9pcHY2L2VzcDYuYy0xNDEtXG5uZXQvaXB2Ni9lc3A2LmM6MTQyOiNpZmRlZiBDT05GSUdfSU5FVDZfRVNQSU5UQ1Bcbm5ldC9pcHY2L2VzcDYuYy0xNDMtc3RhdGljIHN0cnVjdCBzb2NrICplc3A2X2ZpbmRfdGNwX3NrKHN0cnVjdCB4ZnJtX3N0YXRlICp4KVxuLS1cbm5ldC9pcHY2L2VzcDYuYz0zNDY9c3RhdGljIHN0cnVjdCBpcF9lc3BfaGRyICplc3A2X291dHB1dF91ZHBfZW5jYXAoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2Ni9lc3A2LmMtMzY5LVxubmV0L2lwdjYvZXNwNi5jOjM3MDojaWZkZWYgQ09ORklHX0lORVQ2X0VTUElOVENQXG5uZXQvaXB2Ni9lc3A2LmMtMzcxLXN0YXRpYyBzdHJ1Y3QgaXBfZXNwX2hkciAqZXNwNl9vdXRwdXRfdGNwX2VuY2FwKHN0cnVjdCB4ZnJtX3N0YXRlICp4LFxuLS1cbm5ldC9pcHY2L2VzcDYuYz0xMTU2PXN0YXRpYyBpbnQgZXNwNl9pbml0X3N0YXRlKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L2lwdjYvZXNwNi5jLTEyMDQtXHRcdFx0YnJlYWs7XG5uZXQvaXB2Ni9lc3A2LmM6MTIwNTojaWZkZWYgQ09ORklHX0lORVQ2X0VTUElOVENQXG5uZXQvaXB2Ni9lc3A2LmMtMTIwNi1cdFx0Y2FzZSBUQ1BfRU5DQVBfRVNQSU5UQ1A6XG4tLVxubmV0L3hmcm0vS2NvbmZpZz0xNDE9Y29uZmlnIFhGUk1fSVBURlNcbi0tXG5uZXQveGZybS9LY29uZmlnLTE1Ni1cbm5ldC94ZnJtL0tjb25maWc6MTU3OmNvbmZpZyBYRlJNX0VTUElOVENQXG5uZXQveGZybS9LY29uZmlnLTE1OC1cdGJvb2xcbi0tXG5uZXQveGZybS9NYWtlZmlsZT0yND1vYmotJChDT05GSUdfWEZSTV9JUFRGUykgJiM0Mzs9IHhmcm1faXB0ZnMub1xubmV0L3hmcm0vTWFrZWZpbGU6MjU6b2JqLSQoQ09ORklHX1hGUk1fRVNQSU5UQ1ApICYjNDM7PSBlc3BpbnRjcC5vXG5uZXQveGZybS9NYWtlZmlsZS0yNi1vYmotJChDT05GSUdfREVCVUdfSU5GT19CVEYpICYjNDM7PSB4ZnJtX3N0YXRlX2JwZi5vXG4tLVxubmV0L3hmcm0veGZybV9wb2xpY3kuYy00NC0jZW5kaWZcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6NDU6I2lmZGVmIENPTkZJR19YRlJNX0VTUElOVENQXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTQ2LSNpbmNsdWRlIFx1MDAzY25ldC9lc3BpbnRjcC5oXHUwMDNlXG4tLVxubmV0L3hmcm0veGZybV9wb2xpY3kuYz00NDE0PXZvaWQgX19pbml0IHhmcm1faW5pdCh2b2lkKVxuLS1cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtNDQyMy1cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6NDQyNDojaWZkZWYgQ09ORklHX1hGUk1fRVNQSU5UQ1Bcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtNDQyNS1cdGVzcGludGNwX2luaXQoKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTM6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQxNjEKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqQ2hlY2tpbmcgWEZSTV9NSUdSQVRFIEltcGxlbWVudGF0aW9uIERldGFpbHMqKgoKQWxyaWdodCwgdGltZSB0byBkaWcgaW50byB0aGUgWEZSTSBtaWdyYXRpb24gc3VwcG9ydC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGhvdyB0aGlzIGlzIGhhbmRsZWQsIHNvIGZpcnN0IHRoaW5ncyBmaXJzdDogSSYjMzk7bGwgaGVhZCBvdmVyIHRvIGBuZXQveGZybS9LY29uZmlnYCB0byBzZWUgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGZvciBgWEZSTV9NSUdSQVRFYC4gSSB3YW50IHRvIHF1aWNrbHkgY29uZmlybSB3aGF0IGRlcGVuZGVuY2llcyBpdCBoYXMsIGlmIGFueSwgYW5kIHdoYXQgZmVhdHVyZXMgaXQgZW5hYmxlcyBvciBkaXNhYmxlcy4gQSBxdWljayBzY2FuIHRoZXJlIHdpbGwgZ2l2ZSBtZSB0aGUgaGlnaC1sZXZlbCBwaWN0dXJlLgoKVGhlbiwgdG8gdW5kZXJzdGFuZCB0aGUgbml0dHktZ3JpdHR5IG9mIHRoZSBpbXBsZW1lbnRhdGlvbiwgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRpdmUgaW50byBgeGZybV91c2VyLmNgLiBUaGlzIGlzIHdoZXJlIGFsbCB0aGUgdXNlci1zcGFjZSBpbnRlcmFjdGlvbiBmb3IgWEZSTSB0eXBpY2FsbHkgaGFwcGVucywgYW5kIHdoZXJlIHRoZSBtaWdyYXRpb24tcmVsYXRlZCBjb2RlIHNob3VsZCBiZS4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyBkZWFsaW5nIHdpdGggWEZSTSBzdGF0ZXMgYmVpbmcgbW92ZWQgYmV0d2VlbiBpbnRlcmZhY2VzIG9yIG5hbWVzcGFjZXMgYW5kIHNlZSBob3cgdGhlIG1pZ3JhdGlvbiBpdHNlbGYgaXMgYWN0dWFsbHkgdHJpZ2dlcmVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIG1vdmVkLCB0aGUgbG9ja2luZyBjb25zaWRlcmF0aW9ucywgYW5kIGFueSBlcnJvciBoYW5kbGluZyBpbiBwbGFjZS4gSSBhbHNvIHdhbnQgdG8gZG91YmxlLWNoZWNrIHRoYXQgdGhpcyBpcyBpbXBsZW1lbnRlZCBjb3JyZWN0bHkgZm9yIGJvdGggdGhlIGluZ3Jlc3MgYW5kIGVncmVzcyBwYXRocy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTM6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7WEZSTV9NSUdSQVRFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS9LY29uZmlnPTUxPWNvbmZpZyBYRlJNX1NVQl9QT0xJQ1lcbi0tXG5uZXQveGZybS9LY29uZmlnLTYwLVxubmV0L3hmcm0vS2NvbmZpZzo2MTpjb25maWcgWEZSTV9NSUdSQVRFXG5uZXQveGZybS9LY29uZmlnLTYyLVx0Ym9vbCBcJiMzNDtUcmFuc2Zvcm1hdGlvbiBtaWdyYXRlIGRhdGFiYXNlXCYjMzQ7XG4tLVxubmV0L3hmcm0vS2NvbmZpZz0xMjU9Y29uZmlnIE5FVF9LRVlfTUlHUkFURVxuLS1cbm5ldC94ZnJtL0tjb25maWctMTI3LVx0ZGVwZW5kcyBvbiBORVRfS0VZXG5uZXQveGZybS9LY29uZmlnOjEyODpcdHNlbGVjdCBYRlJNX01JR1JBVEVcbm5ldC94ZnJtL0tjb25maWctMTI5LVx0aGVscFxuLS1cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM9NDQ5ND1FWFBPUlRfU1lNQk9MX0dQTCh4ZnJtX2F1ZGl0X3BvbGljeV9kZWxldGUpO1xuLS1cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtNDQ5Ni1cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6NDQ5NzojaWZkZWYgQ09ORklHX1hGUk1fTUlHUkFURVxubmV0L3hmcm0veGZybV9wb2xpY3kuYy00NDk4LXN0YXRpYyBzdHJ1Y3QgeGZybV9wb2xpY3kgKnhmcm1fbWlncmF0ZV9wb2xpY3lfZmluZChjb25zdCBzdHJ1Y3QgeGZybV9zZWxlY3RvciAqc2VsLFxuLS1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYz0xOTU0PUVYUE9SVF9TWU1CT0woeGZybV9zdGF0ZV9hZGQpO1xubmV0L3hmcm0veGZybV9zdGF0ZS5jLTE5NTUtXG5uZXQveGZybS94ZnJtX3N0YXRlLmM6MTk1NjojaWZkZWYgQ09ORklHX1hGUk1fTUlHUkFURVxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTE5NTctc3RhdGljIGlubGluZSBpbnQgY2xvbmVfc2VjdXJpdHkoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCB4ZnJtX3NlY19jdHggKnNlY3VyaXR5KVxuLS1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYz0xOTgxPXN0YXRpYyBzdHJ1Y3QgeGZybV9zdGF0ZSAqeGZybV9zdGF0ZV9jbG9uZV9hbmRfc2V0dXAoc3RydWN0IHhmcm1fc3RhdGUgKm9yaWcsXG4tLVxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTE5OTAtXHRpZiAobS1cdTAwM2Vtc2dfdHlwZSA9PSBYRlJNX01TR19NSUdSQVRFX1NUQVRFKSB7XG5uZXQveGZybS94ZnJtX3N0YXRlLmM6MTk5MTpcdFx0aWYgKG0tXHUwMDNlZmxhZ3MgXHUwMDI2IFhGUk1fTUlHUkFURV9TVEFURV9VUERBVEVfSDJIX1NFTCkge1xubmV0L3hmcm0veGZybV9zdGF0ZS5jLTE5OTItXHRcdFx0dTggcHJlZml4bGVuID0gKG0tXHUwMDNlbmV3X2ZhbWlseSA9PSBBRl9JTkVUNikgPyAxMjggOiAzMjtcbi0tXG5uZXQveGZybS94ZnJtX3N0YXRlLmM9Mjg4OT1FWFBPUlRfU1lNQk9MKGttX3BvbGljeV9leHBpcmVkKTtcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0yODkwLVxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjI4OTE6I2lmZGVmIENPTkZJR19YRlJNX01JR1JBVEVcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0yODkyLWludCBrbV9taWdyYXRlKGNvbnN0IHN0cnVjdCB4ZnJtX3NlbGVjdG9yICpzZWwsIHU4IGRpciwgdTggdHlwZSxcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYz0xMjA0PXN0YXRpYyB2b2lkIHhzb190b194dW9faWZpbmRleChjb25zdCBzdHJ1Y3QgeGZybV9kZXZfb2ZmbG9hZCAqeHNvLCBpbnQgaWZpbmRleCxcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYy0xMjEzLVxubmV0L3hmcm0veGZybV91c2VyLmM6MTIxNDojaWZkZWYgQ09ORklHX1hGUk1fTUlHUkFURVxubmV0L3hmcm0veGZybV91c2VyLmMtMTIxNS1zdGF0aWMgdm9pZCB4c29fdG9feHVvKGNvbnN0IHN0cnVjdCB4ZnJtX2Rldl9vZmZsb2FkICp4c28sXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmM9MzAzMD1zdGF0aWMgaW50IHhmcm1fYWRkX2FjcXVpcmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMzEwNC1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjMxMDU6I2lmZGVmIENPTkZJR19YRlJNX01JR1JBVEVcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTMxMDYtc3RhdGljIHZvaWQgY29weV9mcm9tX3VzZXJfbWlncmF0ZV9zdGF0ZShzdHJ1Y3QgeGZybV9taWdyYXRlICptYSxcbi0tXG5uZXQveGZybS94ZnJtX3VzZXIuYz0zMzM1PXN0YXRpYyBpbnQgeGZybV9kb19taWdyYXRlX3N0YXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTMzNTUtXG5uZXQveGZybS94ZnJtX3VzZXIuYzozMzU2Olx0aWYgKHVtLVx1MDAzZWZsYWdzIFx1MDAyNiB+WEZSTV9NSUdSQVRFX1NUQVRFX0tOT1dOX0ZMQUdTKSB7XG5uZXQveGZybS94ZnJtX3VzZXIuYy0zMzU3LVx0XHROTF9TRVRfRVJSX01TR19GTVQoZXh0YWNrLCBcJiMzNDtVbmtub3duIGZsYWdzOiAweCV4XCYjMzQ7LFxubmV0L3hmcm0veGZybV91c2VyLmM6MzM1ODpcdFx0XHRcdCAgIHVtLVx1MDAzZWZsYWdzIFx1MDAyNiB+WEZSTV9NSUdSQVRFX1NUQVRFX0tOT1dOX0ZMQUdTKTtcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTMzNTktXHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTMzNjUtXG5uZXQveGZybS94ZnJtX3VzZXIuYzozMzY2Olx0aWYgKCEodW0tXHUwMDNlZmxhZ3MgXHUwMDI2IFhGUk1fTUlHUkFURV9TVEFURV9VUERBVEVfSDJIX1NFTCkpIHtcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTMzNjctXHRcdGVyciA9IHZlcmlmeV9zZWxlY3Rvcl9wcmVmaXhsZW4odW0tXHUwMDNlbmV3X3NlbC5mYW1pbHksXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMzM4Mi1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjMzODM6XHRpZiAodW0tXHUwMDNlZmxhZ3MgXHUwMDI2IFhGUk1fTUlHUkFURV9TVEFURV9VUERBVEVfSDJIX1NFTCkge1xubmV0L3hmcm0veGZybV91c2VyLmMtMzM4NC1cdFx0dTggcHJlZml4bGVuID0gKHgtXHUwMDNlcHJvcHMuZmFtaWx5ID09IEFGX0lORVQ2KSA/IDEyOCA6IDMyO1xuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM0MjUtXHR9IGVsc2Uge1xubmV0L3hmcm0veGZybV91c2VyLmM6MzQyNjpcdFx0Ym9vbCBpbmhlcml0X29mZmxvYWQgPSAhKHVtLVx1MDAzZWZsYWdzIFx1MDAyNiBYRlJNX01JR1JBVEVfU1RBVEVfQ0xFQVJfT0ZGTE9BRCk7XG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNDI3LVxuLS1cbm5ldC94ZnJtL3hmcm1fdXNlci5jPTM1MjQ9c3RhdGljIGludCB4ZnJtX2RvX21pZ3JhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG4tLVxubmV0L3hmcm0veGZybV91c2VyLmMtMzUzMC1cbm5ldC94ZnJtL3hmcm1fdXNlci5jOjM1MzE6I2lmZGVmIENPTkZJR19YRlJNX01JR1JBVEVcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM1MzItc3RhdGljIGludCBjb3B5X3RvX3VzZXJfbWlncmF0ZShjb25zdCBzdHJ1Y3QgeGZybV9taWdyYXRlICptLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxMzo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjEwOQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDMyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUmVjZW50IFhGUk0gQ2hhbmdlcyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZXNlIHJlY2VudCBYRlJNIGNoYW5nZXMuIEZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgaW1wYWN0IHJlbGF0ZWQgdG8gYFhGUk1fVVNFUl9DT01QQVRgLiBJIHNlZSB0aGF0IHRoZSBgeGZybV9hbGxvY191c2Vyc3BpYCBmdW5jdGlvbiBpbiBgbmV0L3hmcm0veGZybV91c2VyLmNgIGhhcyBoYWQgdGhhdCBgeHRyID0geGZybV9nZXRfdHJhbnNsYXRvcigpYCBibG9jayByZW1vdmVkLCBzbyBJJiMzOTtsbCBuZWVkIHRvIGV4YW1pbmUgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGF0IHJlbW92YWwuIE5vdywgbGV0JiMzOTtzIGRpc3NlY3QgdGhlIHJlc3QuCgpTcGVjaWZpY2FsbHksIEkmIzM5O20gbm90aW5nIHRoZSBmb2xsb3dpbmcgc2lnbmlmaWNhbnQgbW9kaWZpY2F0aW9uczoKCjEuICBJbiBgbmV0L2lwdjQvZXNwNC5jYCwgdGhlIGBlc3Bfb3V0cHV0X2hlYWRgIGZ1bmN0aW9uLCBhbmQgYnkgZXh0ZW5zaW9uIGBlc3Bfb3V0cHV0YCwgaGFzIGhhZCBgc2tiX3pjb3B5X2Rvd25ncmFkZV9tYW5hZ2VkKHNrYik7YCBpbnRyb2R1Y2VkLiBUaGlzIGlzIG15IHByaW1hcnkgZm9jdXMgaGVyZS4KCjIuICBTaW1pbGFybHksIGBuZXQvaXB2Ni9lc3A2LmNgIGFsc28gaGFzIHRoaXMgaW5zZXJ0aW9uIHdpdGhpbiBpdHMgYGVzcDZfb3V0cHV0X2hlYWRgIGZ1bmN0aW9uIChhbmQgYGVzcDZfb3V0cHV0YCksIHNvIHRoaXMgaXMgYSBjb25zaXN0ZW50IGNoYW5nZSwgcG90ZW50aWFsbHkgcmVsYXRlZCB0byB6ZXJvLWNvcHkgb3B0aW1pemF0aW9uIGRvd25ncmFkaW5nLgoKMy4gIEluIGBuZXQvaXB2Ni94ZnJtNl9vdXRwdXQuY2AsIHRoZXJlJiMzOTtzIGEgc2hpZnQgaW4gYHhmcm02X2xvY2FsX3J4cG10dWAgYW5kIGB4ZnJtNl9sb2NhbF9lcnJvcmAuIFRoZXkmIzM5O3JlIG5vdyB1c2luZyBgc2tiX3RvX2Z1bGxfc2soc2tiKWAgYW5kIHBlcmZvcm1pbmcgbnVsbCBjaGVja3MuIFRoaXMgc2lnbmFscyBwb3NzaWJsZSBjaGFuZ2VzIGluIGhvdyB0aGUgU0tCIGlzIGhhbmRsZWQgd2l0aGluIHRob3NlIGZ1bmN0aW9ucy4KCjQuICBGaW5hbGx5LCBgbmV0L3hmcm0vZXNwaW50Y3AuY2Agbm93IGluY2x1ZGVzIGEgY2hlY2sgZm9yIGBza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHNrYilgIHdpdGhpbiB0aGUgYGhhbmRsZV9lc3BgIGZ1bmN0aW9uLiBJIHdpbGwgbmVlZCB0byBkZWx2ZSBmdXJ0aGVyIGludG8gdGhlIHVzYWdlIG9yIHRoZSBmdW5jdGlvbnMgaW4gdGhpcyBmaWxlIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDEzOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2hhbmRsZV9lc3AmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS9lc3BpbnRjcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL2VzcGludGNwLmM9MTI9c3RhdGljIHZvaWQgaGFuZGxlX25vbmVzcChzdHJ1Y3QgZXNwaW50Y3BfY3R4ICpjdHgsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L3hmcm0vZXNwaW50Y3AuYy0yOC1cbm5ldC94ZnJtL2VzcGludGNwLmM6Mjk6c3RhdGljIHZvaWQgaGFuZGxlX2VzcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc29jayAqc2spXG5uZXQveGZybS9lc3BpbnRjcC5jLTMwLXtcbi0tXG5uZXQveGZybS9lc3BpbnRjcC5jPTYxPXN0YXRpYyB2b2lkIGVzcGludGNwX3JjdihzdHJ1Y3Qgc3RycGFyc2VyICpzdHJwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC94ZnJtL2VzcGludGNwLmMtMTE3LVx0ZWxzZVxubmV0L3hmcm0vZXNwaW50Y3AuYzoxMTg6XHRcdGhhbmRsZV9lc3Aoc2tiLCBzdHJwLVx1MDAzZXNrKTtcbm5ldC94ZnJtL2VzcGludGNwLmMtMTE5LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTM6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcwODEKCQkJCQkJCW91dHB1dDogNTIKCQkJCQkJCXRob3VnaHRzOiAxNjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBFeGFtaW5hdGlvbiBvZiB0aGUgRVNQL1RDUCBSZWNlaXZlIFBhdGgqKgoKT2theSwgc28gYGVzcGludGNwX3JjdmAgaXMgdGhlIGtleSBmdW5jdGlvbiBpbml0aWF0aW5nIHRoaW5ncyBpbiBgZXNwaW50Y3AuY2AuIFRoYXQmIzM5O3Mgd2hlcmUgSSBuZWVkIHRvIHN0YXJ0LiBOb3csIGxldCYjMzk7cyBwaXZvdCB0byB0aGUgWEZSTS1yZWxhdGVkIGNvZGUsIHNwZWNpZmljYWxseSB3aGF0IGhhcHBlbnMgYWZ0ZXIgdGhhdC4KCkkgc2VlIGBuZXQveGZybS94ZnJtX2lucHV0LmNgIHdpdGggYHhmcm1faW5wdXRgLCBgeGZybV90cmFuc19yZWluamVjdGAsIGFuZCBgeGZybV90cmFuc19xdWV1ZV9uZXRgIGFzIGNyaXRpY2FsIGZ1bmN0aW9ucy4gVGhvc2UgZGVzZXJ2ZSBpbW1lZGlhdGUgYXR0ZW50aW9uLiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGRhdGEgaXMgcHJvY2Vzc2VkIGJ5IHRob3NlLgoKTmV4dCwgSSYjMzk7bGwgc3dpdGNoIG92ZXIgdG8gYG5ldC94ZnJtL3hmcm1faXB0ZnMuY2AuIEkgd2FudCB0byBpbnZlc3RpZ2F0ZSBgaXB0ZnNfc2tiX2Nhbl9hZGRfZnJhZ3NgIGFuZCBgaXB0ZnNfcmVhc3NlbV9jb250YC4gSSYjMzk7bGwgd2FudCB0byBxdWlja2x5IGNoZWNrIHRoZSBgc3RhdGljYCBzdGF0dXMgb2YgdGhlc2UsIGFuZCBtYXAgdGhlIGVudHJ5IHBvaW50cy4gSG9wZWZ1bGx5IHRoaXMgd2lsbCByZXZlYWwgdGhlIHNwZWNpZmljcyBvZiBJUCBmcmFnbWVudCByZWFzc2VtYmx5IHdpdGhpbiB0aGUgWEZSTSBmcmFtZXdvcmsuIFRoaXMgd2lsbCBob3BlZnVsbHkgcHJvdmlkZSBpbnNpZ2h0IHRvIHRoZSBvdmVyYWxsIGVuZC10by1lbmQgZmxvdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTM6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXB0ZnNfc2tiX2Nhbl9hZGRfZnJhZ3N8aXB0ZnNfcmVhc3NlbV9jb250JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9pcHRmcy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1faXB0ZnMuYz0zODA9c3RhdGljIHUzMiBpcHRmc19za2JfcmVzZXRfZnJhZ193YWxrKHN0cnVjdCBpcHRmc19za2JfZnJhZ193YWxrICp3YWxrLFxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy00MDAtLyoqXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6NDAxOiAqIGlwdGZzX3NrYl9jYW5fYWRkX2ZyYWdzKCkgLSBjaGVjayBpZiBvayB0byBhZGQgZnJhZ3MgZnJvbSB3YWxrIHRvIHNrYlxubmV0L3hmcm0veGZybV9pcHRmcy5jLTQwMi0gKiBAc2tiOiBza2IgdG8gY2hlY2sgZm9yIGFkZGluZyBmcmFncyB0b1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy00MDgtICovXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6NDA5OnN0YXRpYyBib29sIGlwdGZzX3NrYl9jYW5fYWRkX2ZyYWdzKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNDEwLVx0XHRcdFx0ICAgIHN0cnVjdCBpcHRmc19za2JfZnJhZ193YWxrICp3YWxrLFxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy00NTgtICpcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo0NTk6ICogaXB0ZnNfc2tiX2Nhbl9hZGRfZnJhZ3MoKSBzaG91bGQgYmUgY2FsbGVkIGJlZm9yZSB0aGlzIGZ1bmN0aW9uIHRvIHZlcmlmeVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTQ2MC0gKiB0aGF0IHRoZSBkZXN0aW5hdGlvbiBAc2tiIGlzIGNvbXBhdGlibGUgd2l0aCB0aGUgd2FsayBhbmQgaGFzIHNwYWNlIGluIHRoZVxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz01NDE9aXB0ZnNfcHNrYl9hZGRfZnJhZ3Moc3RydWN0IHNrX2J1ZmYgKnRwbCwgc3RydWN0IGlwdGZzX3NrYl9mcmFnX3dhbGsgKndhbGssXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTU1MC1cdC8qIHRoaXMgc2hvdWxkIG5vdCBub3JtYWxseSBiZSBoYXBwZW5pbmcgKi9cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo1NTE6XHRpZiAoIWlwdGZzX3NrYl9jYW5fYWRkX2ZyYWdzKHNrYiwgd2Fsaywgb2ZmICYjNDM7IGNvcHlfbGVuLFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTU1Mi1cdFx0XHRcdCAgICAgbGVuIC0gY29weV9sZW4pKSB7XG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jPTczMD1zdGF0aWMgdm9pZCBpcHRmc19yZWFzc2VtX2RvbmUoc3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcylcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNzM1LS8qKlxubmV0L3hmcm0veGZybV9pcHRmcy5jOjczNjogKiBpcHRmc19yZWFzc2VtX2NvbnQoKSAtIENvbnRpbnVlIHRoZSByZWFzc2VtYmx5IG9mIGFuIGlubmVyIHBhY2tldHMuXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNzM3LSAqIEB4dGZzOiB4dGZzIHN0YXRlXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTc0OS0gKi9cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo3NTA6c3RhdGljIHUzMiBpcHRmc19yZWFzc2VtX2NvbnQoc3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcywgdTY0IHNlcSxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy03NTEtXHRcdFx0ICAgICAgc3RydWN0IHNrYl9zZXFfc3RhdGUgKnN0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy05MDktXHRpZiAoZnJhZ3dhbGsgXHUwMDI2XHUwMDI2XG5uZXQveGZybS94ZnJtX2lwdGZzLmM6OTEwOlx0ICAgIGlwdGZzX3NrYl9jYW5fYWRkX2ZyYWdzKG5ld3NrYiwgZnJhZ3dhbGssIGRhdGEsIGNvcHlsZW4pKSB7XG5uZXQveGZybS94ZnJtX2lwdGZzLmMtOTExLVx0XHRpcHRmc19za2JfYWRkX2ZyYWdzKG5ld3NrYiwgZnJhZ3dhbGssIGRhdGEsIGNvcHlsZW4pO1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz0xMjI2PXN0YXRpYyB2b2lkIGlwdGZzX2lucHV0X29yZGVyZWQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTEyODctXHRcdGlmIChibGtvZmYgfHwgeHRmcy1cdTAwM2VyYV9ydW50bGVuIHx8IHh0ZnMtXHUwMDNlcmFfbmV3c2tiKSB7XG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTI4ODpcdFx0XHRkYXRhID0gaXB0ZnNfcmVhc3NlbV9jb250KHh0ZnMsIHNlcSwgXHUwMDI2c2tic2VxLCBza2IsIGRhdGEsXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTI4OS1cdFx0XHRcdFx0XHQgIGJsa29mZiwgXHUwMDI2c3VibGlzdCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDEzOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NTQ2CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogOTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgeGZybV9pcHRmcy5jYCBjb2RlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZ2V0IGEgbGF5IG9mIHRoZSBsYW5kLCBzbyBJJiMzOTtsbCBzdGFydCBieSBsaXN0aW5nIHRoZSBrZXkgZnVuY3Rpb25zLiBJIHdhbnQgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgZW50cnkgcG9pbnRzIGFuZCBtYWpvciBvcGVyYXRpb25zLiBJIHNlZSBgaXB0ZnNfaW5wdXRfb3JkZXJlZGAsIGBpcHRmc19pbnB1dGAsIGBpcHRmc19vdXRwdXRgLCBhbmQgSSYjMzk7bSBndWVzc2luZyB0aGVzZSBhcmUgaGFuZGxpbmcgdGhlIGFjdHVhbCBwYWNrZXQgcHJvY2Vzc2luZyBpbiBkaWZmZXJlbnQgc2NlbmFyaW9zLiBUaGVuIHRoZXJlJiMzOTtzIGBpcHRmc191c2VyX2luaXRgIGFuZCBgaXB0ZnNfaW5pdF9zdGF0ZWAsIHByb2JhYmx5IHJlbGF0ZWQgdG8gaW5pdGlhbGl6YXRpb24sIHVzZXIgc3BhY2UgaW50ZXJhY3Rpb24sIGFuZCBzdGF0ZSBtYW5hZ2VtZW50LCB3aGljaCBhcmUgdmVyeSBpbXBvcnRhbnQgaW4gY29ubmVjdGlvbiB0cmFja2luZy4gQW5kIEkgc2VlIGEgZnJhZ21lbnRhdGlvbiByZWxhdGVkIGZ1bmN0aW9uIGBpcHRmc19wc2tiX2FkZF9mcmFnc2AgaGVyZS4KClRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgd2l0aGluIHRoZSBicm9hZGVyIFhGUk0gZnJhbWV3b3JrIGFuZCBpdHMgaW50ZXJhY3Rpb24gd2l0aCB0aGUga2VybmVsLCBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIHNlbnNlIG9mIGhvdyBpdCBpbnRlZ3JhdGVzIHdpdGggWEZSTSBzdHJ1Y3R1cmVzLiBUaGVyZWZvcmUsIEkgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gaG93IHRoZSBjb2RlIHJlbGF0ZXMgdG8gYHhmcm1fdHlwZWAgb3IgYW55IFhGUk0gcHJvdG9jb2wgY2FsbGJhY2tzLiBJJiMzOTtsbCBuZWVkIHRvIGdyZXAgZm9yIHRoZXNlIHRlcm1zIHRvIHNlZSB0aGUgY29ubmVjdGlvbnMuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGFyY2hpdGVjdHVyYWwgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTM6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdGF0aWMgY29uc3Qgc3RydWN0IHhmcm1fdHlwZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1faXB0ZnMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDEzOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4OTM4CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqRGl2aW5nIGludG8gdGhlIFhGUk0gQ29yZSoqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBkb3VibGUtY2hlY2tpbmcgdGhlIGluaXRpYWxpemF0aW9uIGFuZCB0aGUgZGVmaW5pdGlvbnMgb2YgYHhmcm1fdHlwZWAgd2l0aGluIGB4ZnJtX2lwdGZzLmNgLiBJIG5lZWQgdG8gZW5zdXJlIHRoZSBmb3VuZGF0aW9uIGlzIHNvbGlkIGJlZm9yZSBJIGRlbHZlIGFueSBkZWVwZXIgaW50byB0aGUgSVBzZWMgcHJvY2Vzc2luZyBmbG93LiBUaGlzIGFyZWEgYWx3YXlzIGhhcyBwb3RlbnRpYWwgZm9yIHN1YnRsZSBidWdzLCBzbyBiZXN0IHRvIHRha2UgYSBtb21lbnQgYW5kIHJlLWZhbWlsaWFyaXplIG15c2VsZiB3aXRoIHRoZSBiYXNpY3MuIEl0JiMzOTtzIGEga2V5IHBpZWNlIGluIGVuc3VyaW5nIGFueSBuZXcgSVBzZWMgZmVhdHVyZSBiZWhhdmVzIGFzIGludGVuZGVkIHdpdGhpbiB0aGUgbGFyZ2VyIHN5c3RlbS4gVGltZSB0byByZWZyZXNoIG15IG1lbW9yeSBhbmQgdmVyaWZ5IHRoZSBzdGFydGluZyBzdGF0ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTM6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eGZybV90eXBlfHhmcm1fbW9kZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1faXB0ZnMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX2lwdGZzLmM9MjczMj1zdGF0aWMgdm9pZCBpcHRmc19kZXN0cm95X3N0YXRlKHN0cnVjdCB4ZnJtX3N0YXRlICp4KVxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNzY3LVxubmV0L3hmcm0veGZybV9pcHRmcy5jOjI3Njg6c3RhdGljIGNvbnN0IHN0cnVjdCB4ZnJtX21vZGVfY2JzIGlwdGZzX21vZGVfY2JzID0ge1xubmV0L3hmcm0veGZybV9pcHRmcy5jLTI3NjktXHQub3duZXIgPSBUSElTX01PRFVMRSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTM6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkyODIKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSB3ZXJlIHRoaW5raW5nIHRocm91Z2ggdGhlIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBgeGZybV9pcHRmcy5jYCBDb2RlKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGB4ZnJtX2lwdGZzLmNgIGZpbGUuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBmb2N1c2luZyBpbiBvbiB0aGUgYGlwdGZzX21vZGVfY2JzYCBzdHJ1Y3R1cmUuIEkgcmVtZW1iZXIgZGVhbGluZyB3aXRoIHRoYXQgYXJlYSBiZWZvcmUsIGFuZCBJIHdhbnQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGNhbGxiYWNrcyBkZWZpbmVkIHRoZXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIElQc2VjIHRyYW5zcG9ydCBtb2RlIGludGVyYWN0cyB3aXRoaW4gdGhlIFhGUk0gZnJhbWV3b3JrLiBJdCYjMzk7cyBrZXkgdG8gaG93IHRoaW5ncyBhcmUgYmVpbmcgbWFuYWdlZCBhbmQgY29uZmlndXJlZC4gU28sIGxldCYjMzk7cyBkcmlsbCBkb3duIGludG8gdGhhdCBzZWN0aW9uIG9mIHRoZSBjb2RlIGFuZCByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcuIEl0IGlzIGxpa2VseSB0aGF0IGNhbGxiYWNrcyBhcmUgZGVmaW5lZCB0byBoYW5kbGUgZGlmZmVyZW50IGFzcGVjdHMgb2YgdGhlIGludGVyYWN0aW9uLCBzdWNoIGFzIGluaXRpYWxpemF0aW9uLCBwYWNrZXQgcHJvY2Vzc2luZyBvciB0ZWFyZG93biB3aXRoaW4gdGhlIElQc2VjIHN1YnN5c3RlbSwgb3IgcGVyaGFwcyBoYW5kbGluZyBvZiBkaWZmZXJlbnQgU0EgdHlwZXMuIExldCYjMzk7cyBzZWUgZXhhY3RseSBob3cgdGhpcyBjb2RlIGlzIGhhbmRsaW5nIHRob3NlIGNhbGxiYWNrIGFjdGlvbnMgd2l0aGluIHRyYW5zcG9ydCBtb2RlLiBJJiMzOTttIGhvcGluZyBJIGNhbiByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNhbGxiYWNrIHByb2Nlc3MgdG8gY2hlY2sgd2hhdCBpcyBjb25maWd1cmVkIGF0IHRoaXMgcG9pbnQgaW4gdGhlIHByb2Nlc3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDEzOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwdGZzX21vZGVfY2JzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9pcHRmcy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1faXB0ZnMuYz0yNzMyPXN0YXRpYyB2b2lkIGlwdGZzX2Rlc3Ryb3lfc3RhdGUoc3RydWN0IHhmcm1fc3RhdGUgKngpXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTI3NjctXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6Mjc2ODpzdGF0aWMgY29uc3Qgc3RydWN0IHhmcm1fbW9kZV9jYnMgaXB0ZnNfbW9kZV9jYnMgPSB7XG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjc2OS1cdC5vd25lciA9IFRISVNfTU9EVUxFLFxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz0yNzgyPXN0YXRpYyBpbnQgX19pbml0IHhmcm1faXB0ZnNfaW5pdCh2b2lkKVxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNzg3LVxubmV0L3hmcm0veGZybV9pcHRmcy5jOjI3ODg6XHRlcnIgPSB4ZnJtX3JlZ2lzdGVyX21vZGVfY2JzKFhGUk1fTU9ERV9JUFRGUywgXHUwMDI2aXB0ZnNfbW9kZV9jYnMpO1xubmV0L3hmcm0veGZybV9pcHRmcy5jLTI3ODktXHRpZiAoZXJyIFx1MDAzYyAwKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxMzo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTg0MwoJCQkJCQkJb3V0cHV0OiAzOTcKCQkJCQkJCXRob3VnaHRzOiAxMzMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIElQc2VjL1hGUk0gUGF0Y2ggQ29tcG9uZW50cyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGtleSBmdW5jdGlvbnMgYW5kIGRhdGEgc3RydWN0dXJlcyBiZWluZyB0b3VjaGVkIGJ5IHRoaXMgcGF0Y2gsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBuZXQveGZybWAgYW5kIHJlbGF0ZWQgZGlyZWN0b3JpZXMuIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIGNvcmUgWEZSTSBjb21wb25lbnRzLCB0aGUgRVNQIChFbmNhcHN1bGF0aW5nIFNlY3VyaXR5IFBheWxvYWQpIGltcGxlbWVudGF0aW9ucyBmb3IgSVB2NCBhbmQgSVB2NiwgYW5kIHRoZSBFU1AtaW4tVENQIHZhcmlhbnQuCgpTcGVjaWZpY2FsbHksIEkgc2VlIHRoYXQgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCB0aGVzZSBmdW5jdGlvbnMgYXJlIGNvcnJlY3RseSBuYW1lZCBpbiB0aGUgY29kZTogYHhmcm1fYnVuZGxlX2NyZWF0ZWAsIGB4ZnJtX2NyZWF0ZV9kdW1teV9idW5kbGVgIChwb2xpY3kpLCBgeGZybV9zdGF0ZV9nY190YXNrYCwgYF9feGZybV9zdGF0ZV9kZWxldGVgLCBgeGZybV9kZXZfc3RhdGVfZmx1c2hgIChzdGF0ZSBtYW5hZ2VtZW50KSwgYHhmcm1fYWxsb2NfdXNlcnNwaWAsIGB4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZWAgKHVzZXIgc3BhY2UgaW50ZXJhY3Rpb24pLiBBbHNvIEkgbXVzdCBjaGVjayBpbnB1dCBoYW5kbGluZyBpbiBgeGZybV9pbnB1dGAsIGB4ZnJtX3RyYW5zX3JlaW5qZWN0YCwgYHhmcm1fdHJhbnNfcXVldWVfbmV0YC4gVGhlIEVTUCBvdXRwdXQgZnVuY3Rpb25zIGFyZSBpbXBvcnRhbnQ6IGBlc3Bfb3V0cHV0X2hlYWRgIChJUHY0KSwgYGVzcDZfb3V0cHV0X2hlYWRgIChJUHY2KSwgYW5kIHRob3NlIGZvciBlcnJvciBoYW5kbGluZzogYHhmcm02X2xvY2FsX3J4cG10dWAsIGB4ZnJtNl9sb2NhbF9lcnJvcmAuIEkgbXVzdCBhbHNvIGVuc3VyZSB0aGF0IHRoZSBgaGFuZGxlX2VzcGAgZnVuY3Rpb24gKG9yIGBlc3BpbnRjcF9yY3ZgKSBpcyBoYW5kbGVkIHByb3Blcmx5IGZvciBFU1AtaW4tVENQLCBhbG9uZyB3aXRoICBmcmFnbWVudGF0aW9uL3JlYXNzZW1ibHkgKGBpcHRmc19za2JfY2FuX2FkZF9mcmFnc2AsIGBpcHRmc19yZWFzc2VtX2NvbnRgKS4KCkkgaGF2ZSB0byB2ZXJpZnkgYWxsIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyBhcmUgZW5hYmxlZCBhbmQgaGF2ZSB0aGUgY29ycmVjdCBkZXBlbmRlbmNpZXM6IGBDT05GSUdfSU5FVF9FU1BgLCBgQ09ORklHX0lORVQ2X0VTUGAsIGBDT05GSUdfSU5FVF9FU1BJTlRDUGAsIGBDT05GSUdfSU5FVDZfRVNQSU5UQ1BgLCBgQ09ORklHX1hGUk1gLCBgQ09ORklHX1hGUk1fVVNFUmAsIGBDT05GSUdfWEZSTV9JUFRGU2AsIGBDT05GSUdfWEZSTV9NSUdSQVRFYCwgYENPTkZJR19JUFY2YCwgYW5kIGBDT05GSUdfSU5FVGAuIEkgY2FuIHNlZSBmcm9tIHRoZSBLY29uZmlnIGZpbGVzIHRoYXQgWEZSTSBkZXBlbmRzIG9uIE5FVCwgRVNQIGRlcGVuZHMgb24gSU5FVC9JUFY2LCBhbmQgdGhlIHVzZXIgYW5kIElQVEZTIG9wdGlvbnMgZGVwZW5kIG9uIFhGUk0uIFRoZSBtaWdyYXRpb24gZmVhdHVyZSBzZWVtcyBzdHJhaWdodGZvcndhcmQuCgpMb29raW5nIGF0IHRoZSBgRm9jdXNTeW1ib2xzYCwgSSBoYXZlIGEgZ29vZCBoYW5kbGUgb24gd2hlcmUgdGhlIGNoYW5nZXMgbGllLiBUaGUgYFdvcnRoRnV6emluZ2AgYXNzZXNzbWVudCBhbHNvIGNvbmZpcm1zIG15IHN1c3BpY2lvbnMuIFRoaXMgcGF0Y2ggdG91Y2hlcyB0aGUgY3JpdGljYWwgSVBzZWMvWEZSTSBuZXR3b3JraW5nIGNvZGUsIG1ha2luZyBpdCBwcmltZSByZWFsIGVzdGF0ZSBmb3IgZnV6emluZy4gSSBjYW4gc2VlIHRoYXQgdGhlIGNoYW5nZXMgaW5jbHVkZSB6ZXJvLWNvcHkgZnJhZ21lbnQgaGFuZGxpbmcsIElQdjYgWEZSTSBlcnJvciBoYW5kbGluZywgRVNQLWluLVRDUCwgWEZSTSBwYWNrZXQgcGFyc2luZywgcmVpbmplY3Rpb24gbWVjaGFuaXNtcywgSVAtVEZTIChJUCBUcmFmZmljIEZsb3cgU2VjdXJpdHkpIGZyYWdtZW50IHZhbGlkYXRpb24sIHBvbGljeSBidW5kbGUgY3JlYXRpb24sIHN0YXRlIGRlbGV0aW9uIGxvY2tpbmcsIGRldmljZSBzdGF0ZSBmbHVzaGluZywgYW5kIHRoZSB1c2VyIHNwYWNlIG5ldGxpbmsgaGFuZGxlcnMuIEFsbCB0aGVzZSBhcmVhcyBhcmUgZGVmaW5pdGVseSBhY2Nlc3NpYmxlIHZpYSB1c2VyLWNvbnRyb2xsZWQgbmV0d29yayB0cmFmZmljIGFuZCBuZXRsaW5rIG1lc3NhZ2VzLCBzbyB0aGlzIGlzIGRlZmluaXRlbHkgc29tZXRoaW5nIHRvIHByaW9yaXRpemUuCgpJJiMzOTt2ZSBjb25maXJtZWQgdGhlIGV4aXN0ZW5jZSBhbmQgY29ycmVjdCBuYW1pbmcgb2YgYWxsIGlkZW50aWZpZWQgc3ltYm9scyBhY3Jvc3MgdGhlIHJlbGV2YW50IHNvdXJjZSBmaWxlcy4gVGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIGFsc28gY2hlY2sgb3V0LgoKQWxyaWdodCwgd2l0aCBhbGwgdGhlIGNoZWNrcyBjb21wbGV0ZWQsIEkmIzM5O20gY29uZmlkZW50IGluIHRoZSBhbmFseXNpcy4gTGV0JiMzOTtzIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTM6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVQmIzM0OywKICAgICYjMzQ7SVBWNiYjMzQ7LAogICAgJiMzNDtYRlJNJiMzNDssCiAgICAmIzM0O0lORVRfRVNQJiMzNDssCiAgICAmIzM0O0lORVQ2X0VTUCYjMzQ7LAogICAgJiMzNDtJTkVUX0VTUElOVENQJiMzNDssCiAgICAmIzM0O0lORVQ2X0VTUElOVENQJiMzNDssCiAgICAmIzM0O1hGUk1fVVNFUiYjMzQ7LAogICAgJiMzNDtYRlJNX0lQVEZTJiMzNDssCiAgICAmIzM0O1hGUk1fTUlHUkFURSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2VzcF9vdXRwdXRfaGVhZCYjMzQ7LAogICAgJiMzNDtlc3A2X291dHB1dF9oZWFkJiMzNDssCiAgICAmIzM0O3hmcm02X2xvY2FsX3J4cG10dSYjMzQ7LAogICAgJiMzNDt4ZnJtNl9sb2NhbF9lcnJvciYjMzQ7LAogICAgJiMzNDtlc3BpbnRjcF9yY3YmIzM0OywKICAgICYjMzQ7aGFuZGxlX2VzcCYjMzQ7LAogICAgJiMzNDt4ZnJtX2lucHV0JiMzNDssCiAgICAmIzM0O3hmcm1fdHJhbnNfcmVpbmplY3QmIzM0OywKICAgICYjMzQ7eGZybV90cmFuc19xdWV1ZV9uZXQmIzM0OywKICAgICYjMzQ7aXB0ZnNfc2tiX2Nhbl9hZGRfZnJhZ3MmIzM0OywKICAgICYjMzQ7aXB0ZnNfcmVhc3NlbV9jb250JiMzNDssCiAgICAmIzM0O3hmcm1fYnVuZGxlX2NyZWF0ZSYjMzQ7LAogICAgJiMzNDt4ZnJtX2NyZWF0ZV9kdW1teV9idW5kbGUmIzM0OywKICAgICYjMzQ7eGZybV9zdGF0ZV9nY190YXNrJiMzNDssCiAgICAmIzM0O19feGZybV9zdGF0ZV9kZWxldGUmIzM0OywKICAgICYjMzQ7eGZybV9kZXZfc3RhdGVfZmx1c2gmIzM0OywKICAgICYjMzQ7eGZybV9hbGxvY191c2Vyc3BpJiMzNDssCiAgICAmIzM0O3hmcm1fc2VuZF9taWdyYXRlX3N0YXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHRvdWNoZXMgY29yZSBJUHNlYyAoWEZSTSkgSVB2NC9JUHY2IG5ldHdvcmtpbmcgbG9naWMsIGluY2x1ZGluZyBFU1Agb3V0cHV0IHplcm8tY29weSBkb3duZ3JhZGVzLCBJUHY2IFhGUk0gZXJyb3IgcmVwb3J0aW5nIGZvciBub24tZnVsbCBzb2NrZXRzLCBFU1AtaW4tVENQIHRyYW5zcG9ydCBoZWFkZXIgcmVzZXR0aW5nLCBYRlJNIGlucHV0IHBhY2tldCBwcm90byBkaXNwYXRjaCBhbmQgYXN5bmMgZGV2LXJlZiByZWluamVjdGlvbiBoYW5kbGluZywgSVAtVEZTIGZyYWdtZW50IHdhbGsgYm91bmRzIGNoZWNrcywgcG9saWN5IGJ1bmRsZSBSQ1UgZGV2aWNlIHJlc29sdXRpb24sIHN0YXRlIEdDIHNlcmlhbGl6YXRpb24gdW5kZXIgbXV0ZXgsIGFuZCBYRlJNIHVzZXIgbmV0bGluayBoYW5kbGVycy4gQWxsIGNoYW5nZXMgYXJlIGluIHJlYWNoYWJsZSBuZXR3b3JraW5nIHBhdGhzIGV4ZXJjaXNhYmxlIHZpYSBzb2NrZXRzIGFuZCBYRlJNIG5ldGxpbmsgaW50ZXJmYWNlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SU5FVCYjMzQ7LAogICAgJiMzNDtJUFY2JiMzNDssCiAgICAmIzM0O1hGUk0mIzM0OywKICAgICYjMzQ7SU5FVF9FU1AmIzM0OywKICAgICYjMzQ7SU5FVDZfRVNQJiMzNDssCiAgICAmIzM0O0lORVRfRVNQSU5UQ1AmIzM0OywKICAgICYjMzQ7SU5FVDZfRVNQSU5UQ1AmIzM0OywKICAgICYjMzQ7WEZSTV9VU0VSJiMzNDssCiAgICAmIzM0O1hGUk1fSVBURlMmIzM0OywKICAgICYjMzQ7WEZSTV9NSUdSQVRFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZXNwX291dHB1dF9oZWFkJiMzNDssCiAgICAmIzM0O2VzcDZfb3V0cHV0X2hlYWQmIzM0OywKICAgICYjMzQ7eGZybTZfbG9jYWxfcnhwbXR1JiMzNDssCiAgICAmIzM0O3hmcm02X2xvY2FsX2Vycm9yJiMzNDssCiAgICAmIzM0O2VzcGludGNwX3JjdiYjMzQ7LAogICAgJiMzNDtoYW5kbGVfZXNwJiMzNDssCiAgICAmIzM0O3hmcm1faW5wdXQmIzM0OywKICAgICYjMzQ7eGZybV90cmFuc19yZWluamVjdCYjMzQ7LAogICAgJiMzNDt4ZnJtX3RyYW5zX3F1ZXVlX25ldCYjMzQ7LAogICAgJiMzNDtpcHRmc19za2JfY2FuX2FkZF9mcmFncyYjMzQ7LAogICAgJiMzNDtpcHRmc19yZWFzc2VtX2NvbnQmIzM0OywKICAgICYjMzQ7eGZybV9idW5kbGVfY3JlYXRlJiMzNDssCiAgICAmIzM0O3hmcm1fY3JlYXRlX2R1bW15X2J1bmRsZSYjMzQ7LAogICAgJiMzNDt4ZnJtX3N0YXRlX2djX3Rhc2smIzM0OywKICAgICYjMzQ7X194ZnJtX3N0YXRlX2RlbGV0ZSYjMzQ7LAogICAgJiMzNDt4ZnJtX2Rldl9zdGF0ZV9mbHVzaCYjMzQ7LAogICAgJiMzNDt4ZnJtX2FsbG9jX3VzZXJzcGkmIzM0OywKICAgICYjMzQ7eGZybV9zZW5kX21pZ3JhdGVfc3RhdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggdG91Y2hlcyBjb3JlIElQc2VjIChYRlJNKSBJUHY0L0lQdjYgbmV0d29ya2luZyBsb2dpYywgaW5jbHVkaW5nIEVTUCBvdXRwdXQgemVyby1jb3B5IGRvd25ncmFkZXMsIElQdjYgWEZSTSBlcnJvciByZXBvcnRpbmcgZm9yIG5vbi1mdWxsIHNvY2tldHMsIEVTUC1pbi1UQ1AgdHJhbnNwb3J0IGhlYWRlciByZXNldHRpbmcsIFhGUk0gaW5wdXQgcGFja2V0IHByb3RvIGRpc3BhdGNoIGFuZCBhc3luYyBkZXYtcmVmIHJlaW5qZWN0aW9uIGhhbmRsaW5nLCBJUC1URlMgZnJhZ21lbnQgd2FsayBib3VuZHMgY2hlY2tzLCBwb2xpY3kgYnVuZGxlIFJDVSBkZXZpY2UgcmVzb2x1dGlvbiwgc3RhdGUgR0Mgc2VyaWFsaXphdGlvbiB1bmRlciBtdXRleCwgYW5kIFhGUk0gdXNlciBuZXRsaW5rIGhhbmRsZXJzLiBBbGwgY2hhbmdlcyBhcmUgaW4gcmVhY2hhYmxlIG5ldHdvcmtpbmcgcGF0aHMgZXhlcmNpc2FibGUgdmlhIHNvY2tldHMgYW5kIFhGUk0gbmV0bGluayBpbnRlcmZhY2VzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxMzo1NDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDEzOjU0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIGNvbnRhaW5zIHNldmVyYWwgYnVnIGZpeGVzIGFuZCByZWZhY3RvcmluZ3MgYWNyb3NzIFhGUk0gYW5kIElQc2VjIG5ldHdvcmtpbmcgc3Vic3lzdGVtczpcbjEuIGBlc3A0LmNgIGFuZCBgZXNwNi5jYDogQWRkcyBgc2tiX3pjb3B5X2Rvd25ncmFkZV9tYW5hZ2VkKHNrYilgIHRvIGJhbGFuY2UgcmVmY291bnRzIG9uIHplcm9jb3B5IG1hbmFnZWQgZnJhZ3Mgd2hlbiBtdXRhdGluZyB0aGUgZnJhZyBhcnJheSAocmVmY291bnRpbmcgLyBVQUYgcHJldmVudGlvbiwgY292ZXJlZCBieSBLQVNBTi9yZWZjb3VudCB0cmFja2luZykuXG4yLiBgeGZybTZfb3V0cHV0LmNgOiBWYWxpZGF0ZXMgc29ja2V0cyB1c2luZyBgc2tiX3RvX2Z1bGxfc2soKWAgdG8gYXZvaWQgb3BlcmF0aW5nIG9uIG5vbi1mdWxsIHNvY2tldHMgb3IgTlVMTCBkZXJlZmVyZW5jZXMgKE5VTEwgcG9pbnRlciAvIHR5cGUgY29uZnVzaW9uKS5cbjMuIGBlc3BpbnRjcC5jYDogVXNlcyBgc2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bCgpYCB0byB2YWxpZGF0ZSB0cmFuc3BvcnQgaGVhZGVyIGJvdW5kcyBiZWZvcmUgcmVzZXR0aW5nIChPT0IgcHJldmVudGlvbiwgY292ZXJlZCBieSBLQVNBTikuXG40LiBgeGZybV9pbnB1dC5jYDogRml4ZXMgcHJvdG9jb2wgdHJhY2tpbmcgKGB4ZnJtX3Byb3RvYCksIGhhbmRsZXMgZGV2aWNlIHJlZmNvdW50cyBhbmQgUkNVIGxvY2tpbmcgZHVyaW5nIHJlaW5qZWN0aW9uLCBhbmQgZW5zdXJlcyBkc3QgZW50cnkgcGVyc2lzdGVuY2UgKGBza2JfZHN0X2ZvcmNlYCkuIEFsbCB2YXJpYWJsZXMgKGB4ZnJtX3Byb3RvYCkgYXJlIGZ1bGx5IGluaXRpYWxpemVkIHdpdGggZGVmYXVsdCB2YWx1ZXMuXG41LiBgeGZybV9pcHRmcy5jYDogQWRkcyBib3VuZHMgY2hlY2tpbmcgb24gZnJhZyB3YWxrIG9mZnNldCB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgaW5kZXhpbmcgaW4gYGlwdGZzX3NrYl9yZXNldF9mcmFnX3dhbGsoKWAsIGFuZCBjb3JyZWN0cyBydW50IHNpemUgdmVyaWZpY2F0aW9uIGFnYWluc3QgSVAgaGVhZGVyIGxlbmd0aCAoT09CIHJlYWRzLCBjb3ZlcmVkIGJ5IEtBU0FOKS5cbjYuIGB4ZnJtX3BvbGljeS5jYCwgYHhmcm1fc3RhdGUuY2AsIGB4ZnJtX3VzZXIuY2A6IEFkZHMgbWlzc2luZyBSQ1UgcmVhZCBsb2NrcyAoYGRzdF9kZXZfcmN1YCwgbXVsdGljYXN0KSwgYWRkcyBhIEdDIG11dGV4IHRvIHNlcmlhbGl6ZSBzdGF0ZSBkZXN0cnVjdGlvbiwgYW5kIGZpeGVzIGxpc3QgZGVsZXRpb24gaW5pdGlhbGl6YXRpb24gKGBobGlzdF9kZWxfaW5pdF9yY3VgKS5cblxuTm9uZSBvZiB0aGUgY2hhbmdlcyBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIG1lbW9yeSwga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcywgb3IgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gVGhlIHJpc2tzIGFkZHJlc3NlZCAob3V0LW9mLWJvdW5kcyBhY2Nlc3MsIHJlZmNvdW50aW5nLCB1c2UtYWZ0ZXItZnJlZSwgY29uY3VycmVuY3kvUkNVKSBhcmUgY292ZXJlZCBieSBLQVNBTiwgUFJPVkVfUkNVLCBhbmQgc3RhbmRhcmQgZGVidWcgY2hlY2tlcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBjZTAxNGRhMTUzZDhkY2U4YzMzZTM2ZmE5NTdmMTAxMzk2M2Y2ZTE5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBTZXAgNyAxMzo1Mzo1MCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2VzcDQuYyBiL25ldC9pcHY0L2VzcDQuYwppbmRleCBhNmMxOGFlYTc0OThkLi5lNzZkYjU4MTdlNzhlIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9lc3A0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvZXNwNC5jCkBAIC00NDEsNiAmIzQzOzQ0MSwxMiBAQCBpbnQgZXNwX291dHB1dF9oZWFkKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZXNwX2luZm8gKgogCiAJCQllc3AtJmd0O2lucGxhY2UgPSBmYWxzZTsKIAomIzQzOwkJCS8qIFRha2UgcmVhbCBwYWdlIHJlZnMgYW5kIGNsZWFyIFNLQkZMX01BTkFHRURfRlJBR19SRUZTIGJlZm9yZQomIzQzOwkJCSAqIHdlIG11dGF0ZSB0aGUgZnJhZyBhcnJheSwgc28gdGhlIHBlci1mcmFnIHVucmVmIHN0YXlzIGJhbGFuY2VkCiYjNDM7CQkJICogZm9yIHplcm9jb3B5IG1hbmFnZWQgZnJhZ3MgKHNlZSBfX2lwX2FwcGVuZF9kYXRhKCkpLgomIzQzOwkJCSAqLwomIzQzOwkJCXNrYl96Y29weV9kb3duZ3JhZGVfbWFuYWdlZChza2IpOwomIzQzOwogCQkJYWxsb2NzaXplID0gQUxJR04odGFpbGVuLCBMMV9DQUNIRV9CWVRFUyk7CiAKIAkJCXNwaW5fbG9ja19iaCgmYW1wO3gtJmd0O2xvY2spOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvZXNwNi5jIGIvbmV0L2lwdjYvZXNwNi5jCmluZGV4IDcyZWMwZDdkMTEyMDkuLmIxYzliMzZmNzZkYzQgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2VzcDYuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9lc3A2LmMKQEAgLTQ3MSw2ICYjNDM7NDcxLDEyIEBAIGludCBlc3A2X291dHB1dF9oZWFkKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZXNwX2luZm8KIAogCQkJZXNwLSZndDtpbnBsYWNlID0gZmFsc2U7CiAKJiM0MzsJCQkvKiBUYWtlIHJlYWwgcGFnZSByZWZzIGFuZCBjbGVhciBTS0JGTF9NQU5BR0VEX0ZSQUdfUkVGUyBiZWZvcmUKJiM0MzsJCQkgKiB3ZSBtdXRhdGUgdGhlIGZyYWcgYXJyYXksIHNvIHRoZSBwZXItZnJhZyB1bnJlZiBzdGF5cyBiYWxhbmNlZAomIzQzOwkJCSAqIGZvciB6ZXJvY29weSBtYW5hZ2VkIGZyYWdzIChzZWUgX19pcF9hcHBlbmRfZGF0YSgpKS4KJiM0MzsJCQkgKi8KJiM0MzsJCQlza2JfemNvcHlfZG93bmdyYWRlX21hbmFnZWQoc2tiKTsKJiM0MzsKIAkJCWFsbG9jc2l6ZSA9IEFMSUdOKHRhaWxlbiwgTDFfQ0FDSEVfQllURVMpOwogCiAJCQlzcGluX2xvY2tfYmgoJmFtcDt4LSZndDtsb2NrKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3hmcm02X291dHB1dC5jIGIvbmV0L2lwdjYveGZybTZfb3V0cHV0LmMKaW5kZXggNTEyYmRhZjEzNjk5Ny4uNDRiMjIxYTA5YTBjOCAxMDA2NDQKLS0tIGEvbmV0L2lwdjYveGZybTZfb3V0cHV0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYveGZybTZfb3V0cHV0LmMKQEAgLTE5LDcgJiM0MzsxOSwxMCBAQAogdm9pZCB4ZnJtNl9sb2NhbF9yeHBtdHUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIG10dSkKIHsKIAlzdHJ1Y3QgZmxvd2k2IGZsNjsKLQlzdHJ1Y3Qgc29jayAqc2sgPSBza2ItJmd0O3NrOwomIzQzOwlzdHJ1Y3Qgc29jayAqc2sgPSBza2JfdG9fZnVsbF9zayhza2IpOwomIzQzOwomIzQzOwlpZiAoIXNrKQomIzQzOwkJcmV0dXJuOwogCiAJZmw2LmZsb3dpNl9vaWYgPSBzay0mZ3Q7c2tfYm91bmRfZGV2X2lmOwogCWZsNi5kYWRkciA9IGlwdjZfaGRyKHNrYiktJmd0O2RhZGRyOwpAQCAtMzEsNyAmIzQzOzM0LDEwIEBAIHZvaWQgeGZybTZfbG9jYWxfZXJyb3Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIG10dSkKIHsKIAlzdHJ1Y3QgZmxvd2k2IGZsNjsKIAljb25zdCBzdHJ1Y3QgaXB2NmhkciAqaGRyOwotCXN0cnVjdCBzb2NrICpzayA9IHNrYi0mZ3Q7c2s7CiYjNDM7CXN0cnVjdCBzb2NrICpzayA9IHNrYl90b19mdWxsX3NrKHNrYik7CiYjNDM7CiYjNDM7CWlmICghc2spCiYjNDM7CQlyZXR1cm47CiAKIAloZHIgPSBza2ItJmd0O2VuY2Fwc3VsYXRpb24gPyBpbm5lcl9pcHY2X2hkcihza2IpIDogaXB2Nl9oZHIoc2tiKTsKIAlmbDYuZmw2X2Rwb3J0ID0gaW5ldF9zayhzayktJmd0O2luZXRfZHBvcnQ7CmRpZmYgLS1naXQgYS9uZXQveGZybS9lc3BpbnRjcC5jIGIvbmV0L3hmcm0vZXNwaW50Y3AuYwppbmRleCA2NzRhZWRjNWFmNWEyLi4zZTcyYjlmMDY3YjliIDEwMDY0NAotLS0gYS9uZXQveGZybS9lc3BpbnRjcC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC94ZnJtL2VzcGludGNwLmMKQEAgLTMwLDcgJiM0MzszMCwxMSBAQCBzdGF0aWMgdm9pZCBoYW5kbGVfZXNwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzb2NrICpzaykKIHsKIAlzdHJ1Y3QgdGNwX3NrYl9jYiAqdGNwX2NiID0gKHN0cnVjdCB0Y3Bfc2tiX2NiICopc2tiLSZndDtjYjsKIAotCXNrYl9yZXNldF90cmFuc3BvcnRfaGVhZGVyKHNrYik7CiYjNDM7CWlmICghc2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bChza2IpKSB7CiYjNDM7CQlYRlJNX0lOQ19TVEFUUyhzb2NrX25ldChzayksIExJTlVYX01JQl9YRlJNSU5FUlJPUik7CiYjNDM7CQlrZnJlZV9za2Ioc2tiKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQogCiAJLyogcmVzdG9yZSBJUCBDQiwgd2UgbmVlZCBhdCBsZWFzdCBJUDZDQi0mZ3Q7bmhvZmYgKi8KIAltZW1tb3ZlKHNrYi0mZ3Q7Y2IsICZhbXA7dGNwX2NiLSZndDtoZWFkZXIsIHNpemVvZih0Y3BfY2ItJmd0O2hlYWRlcikpOwpkaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV9pbnB1dC5jIGIvbmV0L3hmcm0veGZybV9pbnB1dC5jCmluZGV4IGVlY2FiMzM3YmQwYTcuLjVlZDg3ZDUxMzkyYTUgMTAwNjQ0Ci0tLSBhL25ldC94ZnJtL3hmcm1faW5wdXQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQveGZybS94ZnJtX2lucHV0LmMKQEAgLTQ3NCw2ICYjNDM7NDc0LDcgQEAgaW50IHhmcm1faW5wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG5leHRoZHIsIF9fYmUzMiBzcGksIGludCBlbmNhcF90eXBlKQogCXN0cnVjdCB4ZnJtX3N0YXRlICp4ID0gTlVMTDsKIAl4ZnJtX2FkZHJlc3NfdCAqZGFkZHI7CiAJdTMyIG1hcmsgPSBza2ItJmd0O21hcms7CiYjNDM7CXU4IHhmcm1fcHJvdG8gPSBuZXh0aGRyOwogCXVuc2lnbmVkIGludCBmYW1pbHkgPSBBRl9VTlNQRUM7CiAJaW50IGRlY2FwcyA9IDA7CiAJaW50IGFzeW5jID0gMDsKQEAgLTQ4NSw2ICYjNDM7NDg2LDcgQEAgaW50IHhmcm1faW5wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG5leHRoZHIsIF9fYmUzMiBzcGksIGludCBlbmNhcF90eXBlKQogCWlmIChlbmNhcF90eXBlICZsdDsgMCB8fCAoeG8gJmFtcDsmYW1wOyAoeG8tJmd0O2ZsYWdzICZhbXA7IFhGUk1fR1JPIHx8IGVuY2FwX3R5cGUgPT0gMCB8fAogCQkJCSAgICAgIGVuY2FwX3R5cGUgPT0gVURQX0VOQ0FQX0VTUElOVURQKSkpIHsKIAkJeCA9IHhmcm1faW5wdXRfc3RhdGUoc2tiKTsKJiM0MzsJCXhmcm1fcHJvdG8gPSB4LSZndDt0eXBlID8geC0mZ3Q7dHlwZS0mZ3Q7cHJvdG8gOiBuZXh0aGRyOwogCiAJCWlmICh1bmxpa2VseSh4LSZndDtrbS5zdGF0ZSAhPSBYRlJNX1NUQVRFX1ZBTElEKSkgewogCQkJaWYgKHgtJmd0O2ttLnN0YXRlID09IFhGUk1fU1RBVEVfQUNRKQpAQCAtNTkyLDExICYjNDM7NTk0LDEzIEBAIGludCB4ZnJtX2lucHV0KHN0cnVjdCBza19idWZmICpza2IsIGludCBuZXh0aGRyLCBfX2JlMzIgc3BpLCBpbnQgZW5jYXBfdHlwZSkKIAogCQl4ID0geGZybV9pbnB1dF9zdGF0ZV9sb29rdXAobmV0LCBtYXJrLCBkYWRkciwgc3BpLCBuZXh0aGRyLCBmYW1pbHkpOwogCQlpZiAoeCA9PSBOVUxMKSB7CiYjNDM7CQkJeGZybV9wcm90byA9IG5leHRoZHI7CiAJCQlzZWNwYXRoX3Jlc2V0KHNrYik7CiAJCQlYRlJNX0lOQ19TVEFUUyhuZXQsIExJTlVYX01JQl9YRlJNSU5OT1NUQVRFUyk7CiAJCQl4ZnJtX2F1ZGl0X3N0YXRlX25vdGZvdW5kKHNrYiwgZmFtaWx5LCBzcGksIHNlcSk7CiAJCQlnb3RvIGRyb3A7CiAJCX0KJiM0MzsJCXhmcm1fcHJvdG8gPSB4LSZndDt0eXBlID8geC0mZ3Q7dHlwZS0mZ3Q7cHJvdG8gOiBuZXh0aGRyOwogCiAJCWlmICh1bmxpa2VseSh4LSZndDtkaXIgJmFtcDsmYW1wOyB4LSZndDtkaXIgIT0gWEZSTV9TQV9ESVJfSU4pKSB7CiAJCQlzZWNwYXRoX3Jlc2V0KHNrYik7CkBAIC02MDQsNiAmIzQzOzYwOCw3IEBAIGludCB4ZnJtX2lucHV0KHN0cnVjdCBza19idWZmICpza2IsIGludCBuZXh0aGRyLCBfX2JlMzIgc3BpLCBpbnQgZW5jYXBfdHlwZSkKIAkJCXhmcm1fYXVkaXRfc3RhdGVfbm90Zm91bmQoc2tiLCBmYW1pbHksIHNwaSwgc2VxKTsKIAkJCXhmcm1fc3RhdGVfcHV0KHgpOwogCQkJeCA9IE5VTEw7CiYjNDM7CQkJeGZybV9wcm90byA9IG5leHRoZHI7CiAJCQlnb3RvIGRyb3A7CiAJCX0KIApAQCAtNzI4LDcgJiM0Mzs3MzMsNyBAQCBpbnQgeGZybV9pbnB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbmV4dGhkciwgX19iZTMyIHNwaSwgaW50IGVuY2FwX3R5cGUpCiAJfSB3aGlsZSAoIWVycik7CiAKIAlyY3VfcmVhZF9sb2NrKCk7Ci0JZXJyID0geGZybV9yY3ZfY2Ioc2tiLCBmYW1pbHksIHgtJmd0O3R5cGUtJmd0O3Byb3RvLCAwKTsKJiM0MzsJZXJyID0geGZybV9yY3ZfY2Ioc2tiLCBmYW1pbHksIHhmcm1fcHJvdG8sIDApOwogCWlmIChlcnIpIHsKIAkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJCWdvdG8gZHJvcDsKQEAgLTc1Myw3ICYjNDM7NzU4LDcgQEAgaW50IHhmcm1faW5wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG5leHRoZHIsIF9fYmUzMiBzcGksIGludCBlbmNhcF90eXBlKQogCQkJeGZybV9ncm8gPSB4by0mZ3Q7ZmxhZ3MgJmFtcDsgWEZSTV9HUk87CiAKIAkJZXJyID0gLUVBRk5PU1VQUE9SVDsKLQkJYWZpbmZvID0geGZybV9zdGF0ZV9hZmluZm9fZ2V0X3JjdSh4LSZndDtwcm9wcy5mYW1pbHkpOwomIzQzOwkJYWZpbmZvID0geGZybV9zdGF0ZV9hZmluZm9fZ2V0X3JjdShmYW1pbHkpOwogCQlpZiAobGlrZWx5KGFmaW5mbykpCiAJCQllcnIgPSBhZmluZm8tJmd0O3RyYW5zcG9ydF9maW5pc2goc2tiLCB4ZnJtX2dybyB8fCBhc3luYyk7CiAJCWlmICh4ZnJtX2dybykgewpAQCAtNzc2LDcgJiM0Mzs3ODEsNyBAQCBpbnQgeGZybV9pbnB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbmV4dGhkciwgX19iZTMyIHNwaSwgaW50IGVuY2FwX3R5cGUpCiBkcm9wOgogCWlmIChhc3luYykKIAkJZGV2X3B1dChkZXYpOwotCXhmcm1fcmN2X2NiKHNrYiwgZmFtaWx5LCB4ICZhbXA7JmFtcDsgeC0mZ3Q7dHlwZSA/IHgtJmd0O3R5cGUtJmd0O3Byb3RvIDogbmV4dGhkciwgLTEpOwomIzQzOwl4ZnJtX3Jjdl9jYihza2IsIGZhbWlseSwgeGZybV9wcm90bywgLTEpOwogCWtmcmVlX3NrYihza2IpOwogCXJldHVybiAwOwogfQpAQCAtODAwLDEyICYjNDM7ODA1LDE3IEBAIHN0YXRpYyB2b2lkIHhmcm1fdHJhbnNfcmVpbmplY3Qoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogCXNwaW5fdW5sb2NrX2JoKCZhbXA7dHJhbnMtJmd0O3F1ZXVlX2xvY2spOwogCiAJbG9jYWxfYmhfZGlzYWJsZSgpOwomIzQzOwlyY3VfcmVhZF9sb2NrKCk7CiAJd2hpbGUgKChza2IgPSBfX3NrYl9kZXF1ZXVlKCZhbXA7cXVldWUpKSkgewogCQlzdHJ1Y3QgbmV0ICpuZXQgPSBYRlJNX1RSQU5TX1NLQl9DQihza2IpLSZndDtuZXQ7CiYjNDM7CQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gc2tiLSZndDtkZXY7CiAKIAkJWEZSTV9UUkFOU19TS0JfQ0Ioc2tiKS0mZ3Q7ZmluaXNoKG5ldCwgTlVMTCwgc2tiKTsKJiM0MzsJCWlmIChkZXYpCiYjNDM7CQkJZGV2X3B1dChkZXYpOwogCQlwdXRfbmV0KG5ldCk7CiAJfQomIzQzOwlyY3VfcmVhZF91bmxvY2soKTsKIAlsb2NhbF9iaF9lbmFibGUoKTsKIH0KIApAQCAtODIxLDEyICYjNDM7ODMxLDE4IEBAIGludCB4ZnJtX3RyYW5zX3F1ZXVlX25ldChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsCiAJaWYgKHNrYl9xdWV1ZV9sZW4oJmFtcDt0cmFucy0mZ3Q7cXVldWUpICZndDs9IFJFQURfT05DRShuZXRfaG90ZGF0YS5tYXhfYmFja2xvZykpCiAJCXJldHVybiAtRU5PQlVGUzsKIAomIzQzOwlpZiAoc2tiX2RzdChza2IpICZhbXA7JmFtcDsgIXNrYl9kc3RfZm9yY2Uoc2tiKSkKJiM0MzsJCXJldHVybiAtRUhPU1RVTlJFQUNIOwomIzQzOwogCUJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IHhmcm1fdHJhbnNfY2IpICZndDsgc2l6ZW9mKHNrYi0mZ3Q7Y2IpKTsKIAogCWhvbGRfbmV0ID0gbWF5YmVfZ2V0X25ldChuZXQpOwogCWlmICghaG9sZF9uZXQpCiAJCXJldHVybiAtRU5PREVWOwogCiYjNDM7CWlmIChza2ItJmd0O2RldikKJiM0MzsJCWRldl9ob2xkKHNrYi0mZ3Q7ZGV2KTsKJiM0MzsKIAlYRlJNX1RSQU5TX1NLQl9DQihza2IpLSZndDtmaW5pc2ggPSBmaW5pc2g7CiAJWEZSTV9UUkFOU19TS0JfQ0Ioc2tiKS0mZ3Q7bmV0ID0gaG9sZF9uZXQ7CiAJc3Bpbl9sb2NrX2JoKCZhbXA7dHJhbnMtJmd0O3F1ZXVlX2xvY2spOwpkaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV9pcHRmcy5jIGIvbmV0L3hmcm0veGZybV9pcHRmcy5jCmluZGV4IDU5N2FlZGVhYzI2ZWIuLjY5MjA5NDBhMzViNDkgMTAwNjQ0Ci0tLSBhL25ldC94ZnJtL3hmcm1faXB0ZnMuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQveGZybS94ZnJtX2lwdGZzLmMKQEAgLTQxNiw2ICYjNDM7NDE2LDE0IEBAIHN0YXRpYyBib29sIGlwdGZzX3NrYl9jYW5fYWRkX2ZyYWdzKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCiAJaWYgKHNrYl9oYXNfZnJhZ19saXN0KHNrYikgfHwgc2tiLSZndDtwcF9yZWN5Y2xlICE9IHdhbGstJmd0O3BwX3JlY3ljbGUpCiAJCXJldHVybiBmYWxzZTsKIAomIzQzOwkvKiBSZWplY3QgYW4gQG9mZnNldCB0aGF0IGlzIGF0IG9yIGJleW9uZCB0aGUgZW5kIG9mIHRoZSB3YWxrJiMzOTtzIGRhdGEKJiM0MzsJICogYmVmb3JlIGNhbGxpbmcgaXB0ZnNfc2tiX3Jlc2V0X2ZyYWdfd2FsaygpLCB3aG9zZSBmcmFnbWVudC1hZHZhbmNlCiYjNDM7CSAqIGxvb3AgaXMgb3RoZXJ3aXNlIHVuYm91bmRlZCBhbmQgd291bGQgaW5kZXggcGFzdCB3YWxrLSZndDtmcmFnc1tdLgomIzQzOwkgKiBUaGlzIG1pcnJvcnMgdGhlIGd1YXJkIGFscmVhZHkgcHJlc2VudCBpbiBpcHRmc19za2JfYWRkX2ZyYWdzKCkuCiYjNDM7CSAqLwomIzQzOwlpZiAoIXdhbGstJmd0O25yX2ZyYWdzIHx8IG9mZnNldCAmZ3Q7PSB3YWxrLSZndDt0b3RhbCAmIzQzOyB3YWxrLSZndDtpbml0aWFsX29mZnNldCkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKIAkvKiBNYWtlIG9mZnNldCByZWxhdGl2ZSB0byBjdXJyZW50IGZyYWcgYWZ0ZXIgc2V0dGluZyB0aGF0ICovCiAJb2Zmc2V0ID0gaXB0ZnNfc2tiX3Jlc2V0X2ZyYWdfd2Fsayh3YWxrLCBvZmZzZXQpOwogCkBAIC04MjAsOCAmIzQzOzgyOCw4IEBAIHN0YXRpYyB1MzIgaXB0ZnNfcmVhc3NlbV9jb250KHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsIHU2NCBzZXEsCiAJCSAqIGFsbG9jYXRlIGFuIGluIHByb2dyZXNzIHNrYgogCQkgKi8KIAkJaXByZW1haW4gPSBfX2lwdGZzX2lwbGVuKHh0ZnMtJmd0O3JhX3J1bnQpOwotCQlpZiAoaXByZW1haW4gJmx0OyBzaXplb2YoeHRmcy0mZ3Q7cmFfcnVudCkpIHsKLQkJCS8qIGxlbmd0aCBoYXMgdG8gYmUgYXQgbGVhc3QgcnVudHNpemUgbGFyZ2UgKi8KJiM0MzsJCWlmIChpcHJlbWFpbiAmbHQ7IF9faXB0ZnNfaXBobGVuKHh0ZnMtJmd0O3JhX3J1bnQpKSB7CiYjNDM7CQkJLyogbGVuZ3RoIGhhcyB0byBiZSBhdCBsZWFzdCB0aGUgSVAgaGVhZGVyIHNpemUgKi8KIAkJCVhGUk1fSU5DX1NUQVRTKHhzX25ldCh4dGZzLSZndDt4KSwKIAkJCQkgICAgICAgTElOVVhfTUlCX1hGUk1JTklQVEZTRVJST1IpOwogCQkJZ290byBhYmFuZG9uOwpkaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV9wb2xpY3kuYyBiL25ldC94ZnJtL3hmcm1fcG9saWN5LmMKaW5kZXggOTMyYTMxM2I5NDYwYS4uNTEzYzlmMjI4MzM0NyAxMDA2NDQKLS0tIGEvbmV0L3hmcm0veGZybV9wb2xpY3kuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQveGZybS94ZnJtX3BvbGljeS5jCkBAIC0yNzcwLDkgJiM0MzsyNzcwLDEyIEBAIHN0YXRpYyBzdHJ1Y3QgZHN0X2VudHJ5ICp4ZnJtX2J1bmRsZV9jcmVhdGUoc3RydWN0IHhmcm1fcG9saWN5ICpwb2xpY3ksCiAJeGRzdDAtJmd0O3BhdGggPSBkc3Q7CiAKIAllcnIgPSAtRU5PREVWOwotCWRldiA9IGRzdC0mZ3Q7ZGV2OwotCWlmICghZGV2KQomIzQzOwlyY3VfcmVhZF9sb2NrKCk7CiYjNDM7CWRldiA9IGRzdF9kZXZfcmN1KGRzdCk7CiYjNDM7CWlmICghZGV2KSB7CiYjNDM7CQlyY3VfcmVhZF91bmxvY2soKTsKIAkJZ290byBmcmVlX2RzdDsKJiM0MzsJfQogCiAJeGZybV9pbml0X3BhdGgoeGRzdDAsIGRzdCwgbmZoZWFkZXJfbGVuKTsKIAl4ZnJtX2luaXRfcG10dShidW5kbGUsIG54KTsKQEAgLTI3ODAsOCAmIzQzOzI3ODMsMTAgQEAgc3RhdGljIHN0cnVjdCBkc3RfZW50cnkgKnhmcm1fYnVuZGxlX2NyZWF0ZShzdHJ1Y3QgeGZybV9wb2xpY3kgKnBvbGljeSwKIAlmb3IgKHhkc3RfcHJldiA9IHhkc3QwOyB4ZHN0X3ByZXYgIT0gKHN0cnVjdCB4ZnJtX2RzdCAqKWRzdDsKIAkgICAgIHhkc3RfcHJldiA9IChzdHJ1Y3QgeGZybV9kc3QgKikgeGZybV9kc3RfY2hpbGQoJmFtcDt4ZHN0X3ByZXYtJmd0O3UuZHN0KSkgewogCQllcnIgPSB4ZnJtX2ZpbGxfZHN0KHhkc3RfcHJldiwgZGV2LCBmbCk7Ci0JCWlmIChlcnIpCiYjNDM7CQlpZiAoZXJyKSB7CiYjNDM7CQkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJCQlnb3RvIGZyZWVfZHN0OwomIzQzOwkJfQogCiAJCXhkc3RfcHJldi0mZ3Q7dS5kc3QuaGVhZGVyX2xlbiA9IGhlYWRlcl9sZW47CiAJCXhkc3RfcHJldi0mZ3Q7dS5kc3QudHJhaWxlcl9sZW4gPSB0cmFpbGVyX2xlbjsKQEAgLTI3ODksNiAmIzQzOzI3OTQsNyBAQCBzdGF0aWMgc3RydWN0IGRzdF9lbnRyeSAqeGZybV9idW5kbGVfY3JlYXRlKHN0cnVjdCB4ZnJtX3BvbGljeSAqcG9saWN5LAogCQl0cmFpbGVyX2xlbiAtPSB4ZHN0X3ByZXYtJmd0O3UuZHN0Lnhmcm0tJmd0O3Byb3BzLnRyYWlsZXJfbGVuOwogCX0KIAomIzQzOwlyY3VfcmVhZF91bmxvY2soKTsKIAlyZXR1cm4gJmFtcDt4ZHN0MC0mZ3Q7dS5kc3Q7CiAKIHB1dF9zdGF0ZXM6CkBAIC0zMDU4LDExICYjNDM7MzA2NCwxNSBAQCBzdGF0aWMgc3RydWN0IHhmcm1fZHN0ICp4ZnJtX2NyZWF0ZV9kdW1teV9idW5kbGUoc3RydWN0IG5ldCAqbmV0LAogCXhmcm1faW5pdF9wYXRoKChzdHJ1Y3QgeGZybV9kc3QgKilkc3QxLCBkc3QsIDApOwogCiAJZXJyID0gLUVOT0RFVjsKLQlkZXYgPSBkc3QtJmd0O2RldjsKLQlpZiAoIWRldikKJiM0MzsJcmN1X3JlYWRfbG9jaygpOwomIzQzOwlkZXYgPSBkc3RfZGV2X3JjdShkc3QpOwomIzQzOwlpZiAoIWRldikgewomIzQzOwkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJCWdvdG8gZnJlZV9kc3Q7CiYjNDM7CX0KIAogCWVyciA9IHhmcm1fZmlsbF9kc3QoeGRzdCwgZGV2LCBmbCk7CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwogCWlmIChlcnIpCiAJCWdvdG8gZnJlZV9kc3Q7CiAKZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1fc3RhdGUuYyBiL25ldC94ZnJtL3hmcm1fc3RhdGUuYwppbmRleCAzNmE0ZjY3OTNlZGVmLi5lNDVhYTFlZDViOTY1IDEwMDY0NAotLS0gYS9uZXQveGZybS94ZnJtX3N0YXRlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3hmcm0veGZybV9zdGF0ZS5jCkBAIC0yMjYsNiAmIzQzOzIyNiw3IEBAIHN0YXRpYyBzdHJ1Y3QgeGZybV9zdGF0ZV9hZmluZm8gX19yY3UgKnhmcm1fc3RhdGVfYWZpbmZvW05QUk9UT107CiAKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soeGZybV9zdGF0ZV9nY19sb2NrKTsKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soeGZybV9zdGF0ZV9kZXZfZ2NfbG9jayk7CiYjNDM7c3RhdGljIERFRklORV9NVVRFWCh4ZnJtX3N0YXRlX2djX211dGV4KTsKIAogaW50IF9feGZybV9zdGF0ZV9kZWxldGUoc3RydWN0IHhmcm1fc3RhdGUgKngpOwogCkBAIC02MzIsOCAmIzQzOzYzMywxMCBAQCBzdGF0aWMgdm9pZCB4ZnJtX3N0YXRlX2djX3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogCiAJc3luY2hyb25pemVfcmN1KCk7CiAKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO3hmcm1fc3RhdGVfZ2NfbXV0ZXgpOwogCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoeCwgdG1wLCAmYW1wO2djX2xpc3QsIGdjbGlzdCkKIAkJeGZybV9zdGF0ZV9nY19kZXN0cm95KHgpOwomIzQzOwltdXRleF91bmxvY2soJmFtcDt4ZnJtX3N0YXRlX2djX211dGV4KTsKIH0KIAogc3RhdGljIGVudW0gaHJ0aW1lcl9yZXN0YXJ0IHhmcm1fdGltZXJfaGFuZGxlcihzdHJ1Y3QgaHJ0aW1lciAqbWUpCkBAIC04MjMsOSAmIzQzOzgyNiw5IEBAIGludCBfX3hmcm1fc3RhdGVfZGVsZXRlKHN0cnVjdCB4ZnJtX3N0YXRlICp4KQogCQlpZiAoIWhsaXN0X3VuaGFzaGVkKCZhbXA7eC0mZ3Q7YnlzZXEpKQogCQkJaGxpc3RfZGVsX2luaXRfcmN1KCZhbXA7eC0mZ3Q7YnlzZXEpOwogCQlpZiAoIWhsaXN0X3VuaGFzaGVkKCZhbXA7eC0mZ3Q7c3RhdGVfY2FjaGUpKQotCQkJaGxpc3RfZGVsX3JjdSgmYW1wO3gtJmd0O3N0YXRlX2NhY2hlKTsKJiM0MzsJCQlobGlzdF9kZWxfaW5pdF9yY3UoJmFtcDt4LSZndDtzdGF0ZV9jYWNoZSk7CiAJCWlmICghaGxpc3RfdW5oYXNoZWQoJmFtcDt4LSZndDtzdGF0ZV9jYWNoZV9pbnB1dCkpCi0JCQlobGlzdF9kZWxfcmN1KCZhbXA7eC0mZ3Q7c3RhdGVfY2FjaGVfaW5wdXQpOwomIzQzOwkJCWhsaXN0X2RlbF9pbml0X3JjdSgmYW1wO3gtJmd0O3N0YXRlX2NhY2hlX2lucHV0KTsKIAogCQlpZiAoIWhsaXN0X3VuaGFzaGVkKCZhbXA7eC0mZ3Q7YnlzcGkpKQogCQkJaGxpc3RfZGVsX2luaXRfcmN1KCZhbXA7eC0mZ3Q7YnlzcGkpOwpAQCAtMTAwMCw2ICYjNDM7MTAwMyw3IEBAIGludCB4ZnJtX2Rldl9zdGF0ZV9mbHVzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGJvb2wgdGFza192YWxpCiBvdXQ6CiAJc3Bpbl91bmxvY2tfYmgoJmFtcDtuZXQtJmd0O3hmcm0ueGZybV9zdGF0ZV9sb2NrKTsKIAomIzQzOwltdXRleF9sb2NrKCZhbXA7eGZybV9zdGF0ZV9nY19tdXRleCk7CiAJc3Bpbl9sb2NrX2JoKCZhbXA7eGZybV9zdGF0ZV9kZXZfZ2NfbG9jayk7CiByZXN0YXJ0X2djOgogCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoeCwgdG1wLCAmYW1wO3hmcm1fc3RhdGVfZGV2X2djX2xpc3QsIGRldl9nY2xpc3QpIHsKQEAgLTEwMTQsNiAmIzQzOzEwMTgsNyBAQCBpbnQgeGZybV9kZXZfc3RhdGVfZmx1c2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIHRhc2tfdmFsaQogCiAJfQogCXNwaW5fdW5sb2NrX2JoKCZhbXA7eGZybV9zdGF0ZV9kZXZfZ2NfbG9jayk7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO3hmcm1fc3RhdGVfZ2NfbXV0ZXgpOwogCiAJeGZybV9mbHVzaF9nYygpOwogCmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX3VzZXIuYyBiL25ldC94ZnJtL3hmcm1fdXNlci5jCmluZGV4IDYyNjZhOTJjZjMwMjAuLmEyNTg3YzdlNzk2YjQgMTAwNjQ0Ci0tLSBhL25ldC94ZnJtL3hmcm1fdXNlci5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC94ZnJtL3hmcm1fdXNlci5jCkBAIC0xODc3LDcgJiM0MzsxODc3LDYgQEAgc3RhdGljIGludCB4ZnJtX2FsbG9jX3VzZXJzcGkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsCiAJc3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2tiLSZndDtzayk7CiAJc3RydWN0IHhmcm1fc3RhdGUgKng7CiAJc3RydWN0IHhmcm1fdXNlcnNwaV9pbmZvICpwOwotCXN0cnVjdCB4ZnJtX3RyYW5zbGF0b3IgKnh0cjsKIAlzdHJ1Y3Qgc2tfYnVmZiAqcmVzcF9za2I7CiAJeGZybV9hZGRyZXNzX3QgKmRhZGRyOwogCWludCBmYW1pbHk7CkBAIC0xOTQzLDE3ICYjNDM7MTk0Miw2IEBAIHN0YXRpYyBpbnQgeGZybV9hbGxvY191c2Vyc3BpKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLAogCQlnb3RvIG91dDsKIAl9CiAKLQl4dHIgPSB4ZnJtX2dldF90cmFuc2xhdG9yKCk7Ci0JaWYgKHh0cikgewotCQllcnIgPSB4dHItJmd0O2FsbG9jX2NvbXBhdChza2IsIG5sbXNnX2hkcihza2IpKTsKLQotCQl4ZnJtX3B1dF90cmFuc2xhdG9yKHh0cik7Ci0JCWlmIChlcnIpIHsKLQkJCWtmcmVlX3NrYihyZXNwX3NrYik7Ci0JCQlnb3RvIG91dDsKLQkJfQotCX0KLQogCWVyciA9IG5sbXNnX3VuaWNhc3QoeGZybV9uZXRfbmxzayhuZXQsIHNrYiksIHJlc3Bfc2tiLCBORVRMSU5LX0NCKHNrYikucG9ydGlkKTsKIAogb3V0OgpAQCAtMzMzNyw3ICYjNDM7MzMyNSwxMSBAQCBzdGF0aWMgaW50IHhmcm1fc2VuZF9taWdyYXRlX3N0YXRlKHN0cnVjdCBuZXQgKm5ldCwKIAkJcmV0dXJuIGVycjsKIAl9CiAKLQlyZXR1cm4geGZybV9ubG1zZ19tdWx0aWNhc3QobmV0LCBza2IsIDAsIFhGUk1OTEdSUF9NSUdSQVRFKTsKJiM0MzsJcmN1X3JlYWRfbG9jaygpOwomIzQzOwllcnIgPSB4ZnJtX25sbXNnX211bHRpY2FzdChuZXQsIHNrYiwgMCwgWEZSTU5MR1JQX01JR1JBVEUpOwomIzQzOwlyY3VfcmVhZF91bmxvY2soKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIGludCB4ZnJtX2RvX21pZ3JhdGVfc3RhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxMzo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NDc3CgkJCQkJCQlvdXRwdXQ6IDQ3OAoJCQkJCQkJdGhvdWdodHM6IDE2ODkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gRXZhbHVhdGlvbjogUGF0Y2ggU2VyaWVzIEFuYWx5c2lzKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUgaWYgaXQgd2FycmFudHMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBNeSBnb2FsIGlzIHRvIGJlIGFzIHRob3JvdWdoIGFzIHBvc3NpYmxlLCBnaXZlbiBteSBleHBlcmllbmNlLgoKRmlyc3QsIEkgbmVlZCB0byBhbmFseXplIGVhY2ggY2hhbmdlIHdpdGhpbiB0aGUgZGlmZiB0byBzZWUgaWYgYW55IGludHJvZHVjZSBvciBleHBvc2UgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBJIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGVzZSByaXNrcyBhbmQgaG93IEtNU0FOIGlzIGRlc2lnbmVkIHRvIGNhdGNoIHRoZW0uCgoqICAgYG5ldC9pcHY0L2VzcDQuY2AgJmFtcDsgYG5ldC9pcHY2L2VzcDYuY2A6IFRoZSBhZGRpdGlvbiBvZiBgc2tiX3pjb3B5X2Rvd25ncmFkZV9tYW5hZ2VkKHNrYilgIGlzIGFib3V0IHBhZ2UgcmVmY291bnRpbmcgb24gemVyb2NvcHkgbWFuYWdlZCBmcmFncy4gVGhpcyBzb3VuZHMgbGlrZSBpdCYjMzk7cyBtYW5hZ2luZyBleGlzdGluZyBtZW1vcnksIG5vdCBhbGxvY2F0aW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBObyByZWQgZmxhZ3MgaGVyZS4KCiogICBgbmV0L2lwdjYveGZybTZfb3V0cHV0LmNgOiBSZXBsYWNpbmcgYHNrYi0mZ3Q7c2tgIHdpdGggYSBgc2tiX3RvX2Z1bGxfc2tgIGNoZWNrIGlzIGEgZ29vZCBwcmFjdGljZSB0byBhdm9pZCBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2VzIG9yIGhhbmRsaW5nIG9mICYjMzQ7bm9uLWZ1bGwmIzM0OyBzb2NrZXRzLiBUaGlzIHNlZW1zIGxpa2UgYSBzYWZldHkgaW1wcm92ZW1lbnQgcmF0aGVyIHRoYW4gYSBzb3VyY2Ugb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuCgoqICAgYG5ldC94ZnJtL2VzcGludGNwLmNgOiBVc2luZyBgc2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bChza2IpYCBhZGRzIGEgYm91bmQgY2hlY2sgb24gdGhlIHRyYW5zcG9ydCBoZWFkZXIgcmVzZXQuIFRoaXMgYWRkcyBhbm90aGVyIGxheWVyIG9mIHNlY3VyaXR5IHRvIHByZXZlbnQgYW4gb3ZlcmZsb3csIGluc3RlYWQgb2YgYWxsb2NhdGluZyBhIGNodW5rIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LgoKKiAgIGBuZXQveGZybS94ZnJtX2lucHV0LmNgOiBUaGUgY2hhbmdlIHJlZ2FyZGluZyBgeGZybV9wcm90b2AgbG9va3MgbGlrZSBwcm9wZXIgaW5pdGlhbGl6YXRpb24gYW5kIHRyYWNraW5nIG9mIGEgdmFyaWFibGUuIFRoaXMgYXBwZWFycyB0byBiZSBhIGJ1ZyBmaXggZm9yIHByb3BlciB1c2FnZSBvZiBjYWxsYmFja3MgYW5kIGFmaW5mbyBsb29rdXAsIHdoaWNoIHNob3VsZCBub3QgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgcmVmY291bnRpbmcgYW5kIGxvY2tpbmcgd2l0aCBgc2tiX2RzdF9mb3JjZWAsIGBkZXZfaG9sZGAsIGBkZXZfcHV0YCwgYW5kIFJDVSByZWFkIGxvY2tpbmcgYXJlIGFsc28gcG9zaXRpdmUgc2lnbnMuCgoqICAgYG5ldC94ZnJtL3hmcm1faXB0ZnMuY2A6IEJvdW5kcyBjaGVja3MsIGVzcGVjaWFsbHkgdGhlIG9uZXMgcHJldmVudGluZyBvdXQtb2YtYm91bmRzIGZyYWcgaW5kZXhpbmcgYW5kIHJ1bnQgY2hlY2tzLCBhcmUgY3JpdGljYWwgZm9yIHByZXZlbnRpbmcgS0FTQU4gaXNzdWVzLCBhbmQgSSBkb24mIzM5O3Qgc2VlIGFueSBzaWduIG9mIGludHJvZHVjaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LgoKKiAgIGBuZXQveGZybS94ZnJtX3BvbGljeS5jYDogUkNVIHJlYWQgbG9ja2luZyBhcm91bmQgYGRzdF9kZXZfcmN1KGRzdClgIGlzIGVzc2VudGlhbCBmb3IgdGhyZWFkIHNhZmV0eS4gVGhpcyBwcm90ZWN0cyBhZ2FpbnN0IHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMgYW5kIHJhY2VzLCB3aGljaCBhcmUgY29tbW9uIEtBU0FOIHBpdGZhbGxzLgoKKiAgIGBuZXQveGZybS94ZnJtX3N0YXRlLmNgOiBNdXRleCBsb2NraW5nIGZvciBHQyBwcm90ZWN0aW9uIGFuZCB0aGUgdXNlIG9mIGBobGlzdF9kZWxfaW5pdF9yY3VgIGFyZSBhYm91dCBjb25jdXJyZW5jeSBhbmQgZGF0YSBzdHJ1Y3R1cmUgc2FmZXR5LCBub3QgdW5pbml0aWFsaXplZCBtZW1vcnkuCgoqICAgYG5ldC94ZnJtL3hmcm1fdXNlci5jYDogVGhlIHJlbW92YWwgb2YgdGhlIHRyYW5zbGF0b3IgYWxsb2NfY29tcGF0IGJsb2NrIGFuZCBSQ1UgcmVhZCBsb2NraW5nIGFyb3VuZCBtdWx0aWNhc3QgYXJlIGFib3V0IGNvZGUgY2xlYW51cCBhbmQgY29uY3VycmVuY3ksIHdoaWNoIGFyZSBnb29kIHRoaW5ncy4gVGhleSB3b24mIzM5O3QgY2F1c2UgdW5pbml0aWFsaXplZCBtZW1vcnkuCgpBZnRlciBhIGRldGFpbGVkIHJldmlldywgSSYjMzk7bSBjb25maWRlbnQgdGhhdCBub25lIG9mIHRoZXNlIGNoYW5nZXMgZGlyZWN0bHkgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIGRhdGEgdG8gdXNlcnNwYWNlLiBUaGUgbW9kaWZpY2F0aW9ucyBhcmUgcHJpbWFyaWx5IGZvY3VzZWQgb24gcmVmZXJlbmNlIGNvdW50aW5nLCBsb2NraW5nIChSQ1UgYW5kIG11dGV4KSwgYm91bmRzIGNoZWNrcyAod2hpY2ggS0FTQU4gaGFuZGxlcyksIGFuZCBhZGRyZXNzaW5nIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIG51bGwgZGVyZWZlcmVuY2VzLCBhbmQgc29ja2V0IHR5cGUtcmVsYXRlZCBpc3N1ZXMuIFRoaXMgYWxsIHBvaW50cyB0byBhIGhpZ2gtcXVhbGl0eSBwYXRjaCBzZXJpZXMuCgpUaGVyZWZvcmUsIHRoZSBgTmVlZHNLTVNBTmAgZmxhZyBzaG91bGQgZGVmaW5pdGVseSBiZSBgZmFsc2VgLiBJJiMzOTtsbCBub3cgcHJlcGFyZSB0aGUgYHNldC1yZXN1bHRzYCB0b29sIHdpdGggdGhhdCB2YWx1ZSBhbmQgYSBkZXRhaWxlZCBgS01TQU5SZWFzb25pbmdgIHRvIGV4cGxhaW4gbXkgcmF0aW9uYWxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxMzo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgY29udGFpbnMgc2V2ZXJhbCBidWcgZml4ZXMgYW5kIHJlZmFjdG9yaW5ncyBhY3Jvc3MgWEZSTSBhbmQgSVBzZWMgbmV0d29ya2luZyBzdWJzeXN0ZW1zOlxuMS4gYGVzcDQuY2AgYW5kIGBlc3A2LmNgOiBBZGRzIGBza2JfemNvcHlfZG93bmdyYWRlX21hbmFnZWQoc2tiKWAgdG8gYmFsYW5jZSByZWZjb3VudHMgb24gemVyb2NvcHkgbWFuYWdlZCBmcmFncyB3aGVuIG11dGF0aW5nIHRoZSBmcmFnIGFycmF5IChyZWZjb3VudGluZyAvIFVBRiBwcmV2ZW50aW9uLCBjb3ZlcmVkIGJ5IEtBU0FOL3JlZmNvdW50IHRyYWNraW5nKS5cbjIuIGB4ZnJtNl9vdXRwdXQuY2A6IFZhbGlkYXRlcyBzb2NrZXRzIHVzaW5nIGBza2JfdG9fZnVsbF9zaygpYCB0byBhdm9pZCBvcGVyYXRpbmcgb24gbm9uLWZ1bGwgc29ja2V0cyBvciBOVUxMIGRlcmVmZXJlbmNlcyAoTlVMTCBwb2ludGVyIC8gdHlwZSBjb25mdXNpb24pLlxuMy4gYGVzcGludGNwLmNgOiBVc2VzIGBza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKClgIHRvIHZhbGlkYXRlIHRyYW5zcG9ydCBoZWFkZXIgYm91bmRzIGJlZm9yZSByZXNldHRpbmcgKE9PQiBwcmV2ZW50aW9uLCBjb3ZlcmVkIGJ5IEtBU0FOKS5cbjQuIGB4ZnJtX2lucHV0LmNgOiBGaXhlcyBwcm90b2NvbCB0cmFja2luZyAoYHhmcm1fcHJvdG9gKSwgaGFuZGxlcyBkZXZpY2UgcmVmY291bnRzIGFuZCBSQ1UgbG9ja2luZyBkdXJpbmcgcmVpbmplY3Rpb24sIGFuZCBlbnN1cmVzIGRzdCBlbnRyeSBwZXJzaXN0ZW5jZSAoYHNrYl9kc3RfZm9yY2VgKS4gQWxsIHZhcmlhYmxlcyAoYHhmcm1fcHJvdG9gKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgd2l0aCBkZWZhdWx0IHZhbHVlcy5cbjUuIGB4ZnJtX2lwdGZzLmNgOiBBZGRzIGJvdW5kcyBjaGVja2luZyBvbiBmcmFnIHdhbGsgb2Zmc2V0IHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyBpbmRleGluZyBpbiBgaXB0ZnNfc2tiX3Jlc2V0X2ZyYWdfd2FsaygpYCwgYW5kIGNvcnJlY3RzIHJ1bnQgc2l6ZSB2ZXJpZmljYXRpb24gYWdhaW5zdCBJUCBoZWFkZXIgbGVuZ3RoIChPT0IgcmVhZHMsIGNvdmVyZWQgYnkgS0FTQU4pLlxuNi4gYHhmcm1fcG9saWN5LmNgLCBgeGZybV9zdGF0ZS5jYCwgYHhmcm1fdXNlci5jYDogQWRkcyBtaXNzaW5nIFJDVSByZWFkIGxvY2tzIChgZHN0X2Rldl9yY3VgLCBtdWx0aWNhc3QpLCBhZGRzIGEgR0MgbXV0ZXggdG8gc2VyaWFsaXplIHN0YXRlIGRlc3RydWN0aW9uLCBhbmQgZml4ZXMgbGlzdCBkZWxldGlvbiBpbml0aWFsaXphdGlvbiAoYGhsaXN0X2RlbF9pbml0X3JjdWApLlxuXG5Ob25lIG9mIHRoZSBjaGFuZ2VzIGludHJvZHVjZSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgbWVtb3J5LCBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzLCBvciBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBkYXRhLiBUaGUgcmlza3MgYWRkcmVzc2VkIChvdXQtb2YtYm91bmRzIGFjY2VzcywgcmVmY291bnRpbmcsIHVzZS1hZnRlci1mcmVlLCBjb25jdXJyZW5jeS9SQ1UpIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOLCBQUk9WRV9SQ1UsIGFuZCBzdGFuZGFyZCBkZWJ1ZyBjaGVja2Vycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBjb250YWlucyBzZXZlcmFsIGJ1ZyBmaXhlcyBhbmQgcmVmYWN0b3JpbmdzIGFjcm9zcyBYRlJNIGFuZCBJUHNlYyBuZXR3b3JraW5nIHN1YnN5c3RlbXM6XG4xLiBgZXNwNC5jYCBhbmQgYGVzcDYuY2A6IEFkZHMgYHNrYl96Y29weV9kb3duZ3JhZGVfbWFuYWdlZChza2IpYCB0byBiYWxhbmNlIHJlZmNvdW50cyBvbiB6ZXJvY29weSBtYW5hZ2VkIGZyYWdzIHdoZW4gbXV0YXRpbmcgdGhlIGZyYWcgYXJyYXkgKHJlZmNvdW50aW5nIC8gVUFGIHByZXZlbnRpb24sIGNvdmVyZWQgYnkgS0FTQU4vcmVmY291bnQgdHJhY2tpbmcpLlxuMi4gYHhmcm02X291dHB1dC5jYDogVmFsaWRhdGVzIHNvY2tldHMgdXNpbmcgYHNrYl90b19mdWxsX3NrKClgIHRvIGF2b2lkIG9wZXJhdGluZyBvbiBub24tZnVsbCBzb2NrZXRzIG9yIE5VTEwgZGVyZWZlcmVuY2VzIChOVUxMIHBvaW50ZXIgLyB0eXBlIGNvbmZ1c2lvbikuXG4zLiBgZXNwaW50Y3AuY2A6IFVzZXMgYHNrYl9yZXNldF90cmFuc3BvcnRfaGVhZGVyX2NhcmVmdWwoKWAgdG8gdmFsaWRhdGUgdHJhbnNwb3J0IGhlYWRlciBib3VuZHMgYmVmb3JlIHJlc2V0dGluZyAoT09CIHByZXZlbnRpb24sIGNvdmVyZWQgYnkgS0FTQU4pLlxuNC4gYHhmcm1faW5wdXQuY2A6IEZpeGVzIHByb3RvY29sIHRyYWNraW5nIChgeGZybV9wcm90b2ApLCBoYW5kbGVzIGRldmljZSByZWZjb3VudHMgYW5kIFJDVSBsb2NraW5nIGR1cmluZyByZWluamVjdGlvbiwgYW5kIGVuc3VyZXMgZHN0IGVudHJ5IHBlcnNpc3RlbmNlIChgc2tiX2RzdF9mb3JjZWApLiBBbGwgdmFyaWFibGVzIChgeGZybV9wcm90b2ApIGFyZSBmdWxseSBpbml0aWFsaXplZCB3aXRoIGRlZmF1bHQgdmFsdWVzLlxuNS4gYHhmcm1faXB0ZnMuY2A6IEFkZHMgYm91bmRzIGNoZWNraW5nIG9uIGZyYWcgd2FsayBvZmZzZXQgdG8gcHJldmVudCBvdXQtb2YtYm91bmRzIGluZGV4aW5nIGluIGBpcHRmc19za2JfcmVzZXRfZnJhZ193YWxrKClgLCBhbmQgY29ycmVjdHMgcnVudCBzaXplIHZlcmlmaWNhdGlvbiBhZ2FpbnN0IElQIGhlYWRlciBsZW5ndGggKE9PQiByZWFkcywgY292ZXJlZCBieSBLQVNBTikuXG42LiBgeGZybV9wb2xpY3kuY2AsIGB4ZnJtX3N0YXRlLmNgLCBgeGZybV91c2VyLmNgOiBBZGRzIG1pc3NpbmcgUkNVIHJlYWQgbG9ja3MgKGBkc3RfZGV2X3JjdWAsIG11bHRpY2FzdCksIGFkZHMgYSBHQyBtdXRleCB0byBzZXJpYWxpemUgc3RhdGUgZGVzdHJ1Y3Rpb24sIGFuZCBmaXhlcyBsaXN0IGRlbGV0aW9uIGluaXRpYWxpemF0aW9uIChgaGxpc3RfZGVsX2luaXRfcmN1YCkuXG5cbk5vbmUgb2YgdGhlIGNoYW5nZXMgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBtZW1vcnksIGtlcm5lbC10by11c2VyIGluZm8tbGVha3MsIG9yIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEuIFRoZSByaXNrcyBhZGRyZXNzZWQgKG91dC1vZi1ib3VuZHMgYWNjZXNzLCByZWZjb3VudGluZywgdXNlLWFmdGVyLWZyZWUsIGNvbmN1cnJlbmN5L1JDVSkgYXJlIGNvdmVyZWQgYnkgS0FTQU4sIFBST1ZFX1JDVSwgYW5kIHN0YW5kYXJkIGRlYnVnIGNoZWNrZXJzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxMzo1Mzo1Mi43Njg0MDI4NTJaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NjIxMDgyNjM1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJTkVUXCIsXG4gICAgXCJJUFY2XCIsXG4gICAgXCJYRlJNXCIsXG4gICAgXCJJTkVUX0VTUFwiLFxuICAgIFwiSU5FVDZfRVNQXCIsXG4gICAgXCJJTkVUX0VTUElOVENQXCIsXG4gICAgXCJJTkVUNl9FU1BJTlRDUFwiLFxuICAgIFwiWEZSTV9VU0VSXCIsXG4gICAgXCJYRlJNX0lQVEZTXCIsXG4gICAgXCJYRlJNX01JR1JBVEVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJlc3Bfb3V0cHV0X2hlYWRcIixcbiAgICBcImVzcDZfb3V0cHV0X2hlYWRcIixcbiAgICBcInhmcm02X2xvY2FsX3J4cG10dVwiLFxuICAgIFwieGZybTZfbG9jYWxfZXJyb3JcIixcbiAgICBcImVzcGludGNwX3JjdlwiLFxuICAgIFwiaGFuZGxlX2VzcFwiLFxuICAgIFwieGZybV9pbnB1dFwiLFxuICAgIFwieGZybV90cmFuc19yZWluamVjdFwiLFxuICAgIFwieGZybV90cmFuc19xdWV1ZV9uZXRcIixcbiAgICBcImlwdGZzX3NrYl9jYW5fYWRkX2ZyYWdzXCIsXG4gICAgXCJpcHRmc19yZWFzc2VtX2NvbnRcIixcbiAgICBcInhmcm1fYnVuZGxlX2NyZWF0ZVwiLFxuICAgIFwieGZybV9jcmVhdGVfZHVtbXlfYnVuZGxlXCIsXG4gICAgXCJ4ZnJtX3N0YXRlX2djX3Rhc2tcIixcbiAgICBcIl9feGZybV9zdGF0ZV9kZWxldGVcIixcbiAgICBcInhmcm1fZGV2X3N0YXRlX2ZsdXNoXCIsXG4gICAgXCJ4ZnJtX2FsbG9jX3VzZXJzcGlcIixcbiAgICBcInhmcm1fc2VuZF9taWdyYXRlX3N0YXRlXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgY29udGFpbnMgc2V2ZXJhbCBidWcgZml4ZXMgYW5kIHJlZmFjdG9yaW5ncyBhY3Jvc3MgWEZSTSBhbmQgSVBzZWMgbmV0d29ya2luZyBzdWJzeXN0ZW1zOlxcbjEuIGBlc3A0LmNgIGFuZCBgZXNwNi5jYDogQWRkcyBgc2tiX3pjb3B5X2Rvd25ncmFkZV9tYW5hZ2VkKHNrYilgIHRvIGJhbGFuY2UgcmVmY291bnRzIG9uIHplcm9jb3B5IG1hbmFnZWQgZnJhZ3Mgd2hlbiBtdXRhdGluZyB0aGUgZnJhZyBhcnJheSAocmVmY291bnRpbmcgLyBVQUYgcHJldmVudGlvbiwgY292ZXJlZCBieSBLQVNBTi9yZWZjb3VudCB0cmFja2luZykuXFxuMi4gYHhmcm02X291dHB1dC5jYDogVmFsaWRhdGVzIHNvY2tldHMgdXNpbmcgYHNrYl90b19mdWxsX3NrKClgIHRvIGF2b2lkIG9wZXJhdGluZyBvbiBub24tZnVsbCBzb2NrZXRzIG9yIE5VTEwgZGVyZWZlcmVuY2VzIChOVUxMIHBvaW50ZXIgLyB0eXBlIGNvbmZ1c2lvbikuXFxuMy4gYGVzcGludGNwLmNgOiBVc2VzIGBza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKClgIHRvIHZhbGlkYXRlIHRyYW5zcG9ydCBoZWFkZXIgYm91bmRzIGJlZm9yZSByZXNldHRpbmcgKE9PQiBwcmV2ZW50aW9uLCBjb3ZlcmVkIGJ5IEtBU0FOKS5cXG40LiBgeGZybV9pbnB1dC5jYDogRml4ZXMgcHJvdG9jb2wgdHJhY2tpbmcgKGB4ZnJtX3Byb3RvYCksIGhhbmRsZXMgZGV2aWNlIHJlZmNvdW50cyBhbmQgUkNVIGxvY2tpbmcgZHVyaW5nIHJlaW5qZWN0aW9uLCBhbmQgZW5zdXJlcyBkc3QgZW50cnkgcGVyc2lzdGVuY2UgKGBza2JfZHN0X2ZvcmNlYCkuIEFsbCB2YXJpYWJsZXMgKGB4ZnJtX3Byb3RvYCkgYXJlIGZ1bGx5IGluaXRpYWxpemVkIHdpdGggZGVmYXVsdCB2YWx1ZXMuXFxuNS4gYHhmcm1faXB0ZnMuY2A6IEFkZHMgYm91bmRzIGNoZWNraW5nIG9uIGZyYWcgd2FsayBvZmZzZXQgdG8gcHJldmVudCBvdXQtb2YtYm91bmRzIGluZGV4aW5nIGluIGBpcHRmc19za2JfcmVzZXRfZnJhZ193YWxrKClgLCBhbmQgY29ycmVjdHMgcnVudCBzaXplIHZlcmlmaWNhdGlvbiBhZ2FpbnN0IElQIGhlYWRlciBsZW5ndGggKE9PQiByZWFkcywgY292ZXJlZCBieSBLQVNBTikuXFxuNi4gYHhmcm1fcG9saWN5LmNgLCBgeGZybV9zdGF0ZS5jYCwgYHhmcm1fdXNlci5jYDogQWRkcyBtaXNzaW5nIFJDVSByZWFkIGxvY2tzIChgZHN0X2Rldl9yY3VgLCBtdWx0aWNhc3QpLCBhZGRzIGEgR0MgbXV0ZXggdG8gc2VyaWFsaXplIHN0YXRlIGRlc3RydWN0aW9uLCBhbmQgZml4ZXMgbGlzdCBkZWxldGlvbiBpbml0aWFsaXphdGlvbiAoYGhsaXN0X2RlbF9pbml0X3JjdWApLlxcblxcbk5vbmUgb2YgdGhlIGNoYW5nZXMgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBtZW1vcnksIGtlcm5lbC10by11c2VyIGluZm8tbGVha3MsIG9yIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEuIFRoZSByaXNrcyBhZGRyZXNzZWQgKG91dC1vZi1ib3VuZHMgYWNjZXNzLCByZWZjb3VudGluZywgdXNlLWFmdGVyLWZyZWUsIGNvbmN1cnJlbmN5L1JDVSkgYXJlIGNvdmVyZWQgYnkgS0FTQU4sIFBST1ZFX1JDVSwgYW5kIHN0YW5kYXJkIGRlYnVnIGNoZWNrZXJzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHRvdWNoZXMgY29yZSBJUHNlYyAoWEZSTSkgSVB2NC9JUHY2IG5ldHdvcmtpbmcgbG9naWMsIGluY2x1ZGluZyBFU1Agb3V0cHV0IHplcm8tY29weSBkb3duZ3JhZGVzLCBJUHY2IFhGUk0gZXJyb3IgcmVwb3J0aW5nIGZvciBub24tZnVsbCBzb2NrZXRzLCBFU1AtaW4tVENQIHRyYW5zcG9ydCBoZWFkZXIgcmVzZXR0aW5nLCBYRlJNIGlucHV0IHBhY2tldCBwcm90byBkaXNwYXRjaCBhbmQgYXN5bmMgZGV2LXJlZiByZWluamVjdGlvbiBoYW5kbGluZywgSVAtVEZTIGZyYWdtZW50IHdhbGsgYm91bmRzIGNoZWNrcywgcG9saWN5IGJ1bmRsZSBSQ1UgZGV2aWNlIHJlc29sdXRpb24sIHN0YXRlIEdDIHNlcmlhbGl6YXRpb24gdW5kZXIgbXV0ZXgsIGFuZCBYRlJNIHVzZXIgbmV0bGluayBoYW5kbGVycy4gQWxsIGNoYW5nZXMgYXJlIGluIHJlYWNoYWJsZSBuZXR3b3JraW5nIHBhdGhzIGV4ZXJjaXNhYmxlIHZpYSBzb2NrZXRzIGFuZCBYRlJNIG5ldGxpbmsgaW50ZXJmYWNlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTM6NTM6NTIuNzY4NDA3OTUyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTk3ODAzMjEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgY2UwMTRkYTE1M2Q4ZGNlOGMzM2UzNmZhOTU3ZjEwMTM5NjNmNmUxOVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIFNlcCA3IDEzOjUzOjUwIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L2VzcDQuYyBiL25ldC9pcHY0L2VzcDQuY1xcbmluZGV4IGE2YzE4YWVhNzQ5OGQuLmU3NmRiNTgxN2U3OGUgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjQvZXNwNC5jXFxuKysrIGIvbmV0L2lwdjQvZXNwNC5jXFxuQEAgLTQ0MSw2ICs0NDEsMTIgQEAgaW50IGVzcF9vdXRwdXRfaGVhZChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGVzcF9pbmZvICpcXG4gXFxuIFxcdFxcdFxcdGVzcC1cXHUwMDNlaW5wbGFjZSA9IGZhbHNlO1xcbiBcXG4rXFx0XFx0XFx0LyogVGFrZSByZWFsIHBhZ2UgcmVmcyBhbmQgY2xlYXIgU0tCRkxfTUFOQUdFRF9GUkFHX1JFRlMgYmVmb3JlXFxuK1xcdFxcdFxcdCAqIHdlIG11dGF0ZSB0aGUgZnJhZyBhcnJheSwgc28gdGhlIHBlci1mcmFnIHVucmVmIHN0YXlzIGJhbGFuY2VkXFxuK1xcdFxcdFxcdCAqIGZvciB6ZXJvY29weSBtYW5hZ2VkIGZyYWdzIChzZWUgX19pcF9hcHBlbmRfZGF0YSgpKS5cXG4rXFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdHNrYl96Y29weV9kb3duZ3JhZGVfbWFuYWdlZChza2IpO1xcbitcXG4gXFx0XFx0XFx0YWxsb2NzaXplID0gQUxJR04odGFpbGVuLCBMMV9DQUNIRV9CWVRFUyk7XFxuIFxcbiBcXHRcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNngtXFx1MDAzZWxvY2spO1xcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9lc3A2LmMgYi9uZXQvaXB2Ni9lc3A2LmNcXG5pbmRleCA3MmVjMGQ3ZDExMjA5Li5iMWM5YjM2Zjc2ZGM0IDEwMDY0NFxcbi0tLSBhL25ldC9pcHY2L2VzcDYuY1xcbisrKyBiL25ldC9pcHY2L2VzcDYuY1xcbkBAIC00NzEsNiArNDcxLDEyIEBAIGludCBlc3A2X291dHB1dF9oZWFkKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZXNwX2luZm9cXG4gXFxuIFxcdFxcdFxcdGVzcC1cXHUwMDNlaW5wbGFjZSA9IGZhbHNlO1xcbiBcXG4rXFx0XFx0XFx0LyogVGFrZSByZWFsIHBhZ2UgcmVmcyBhbmQgY2xlYXIgU0tCRkxfTUFOQUdFRF9GUkFHX1JFRlMgYmVmb3JlXFxuK1xcdFxcdFxcdCAqIHdlIG11dGF0ZSB0aGUgZnJhZyBhcnJheSwgc28gdGhlIHBlci1mcmFnIHVucmVmIHN0YXlzIGJhbGFuY2VkXFxuK1xcdFxcdFxcdCAqIGZvciB6ZXJvY29weSBtYW5hZ2VkIGZyYWdzIChzZWUgX19pcF9hcHBlbmRfZGF0YSgpKS5cXG4rXFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdHNrYl96Y29weV9kb3duZ3JhZGVfbWFuYWdlZChza2IpO1xcbitcXG4gXFx0XFx0XFx0YWxsb2NzaXplID0gQUxJR04odGFpbGVuLCBMMV9DQUNIRV9CWVRFUyk7XFxuIFxcbiBcXHRcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNngtXFx1MDAzZWxvY2spO1xcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni94ZnJtNl9vdXRwdXQuYyBiL25ldC9pcHY2L3hmcm02X291dHB1dC5jXFxuaW5kZXggNTEyYmRhZjEzNjk5Ny4uNDRiMjIxYTA5YTBjOCAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2Ni94ZnJtNl9vdXRwdXQuY1xcbisrKyBiL25ldC9pcHY2L3hmcm02X291dHB1dC5jXFxuQEAgLTE5LDcgKzE5LDEwIEBAXFxuIHZvaWQgeGZybTZfbG9jYWxfcnhwbXR1KHN0cnVjdCBza19idWZmICpza2IsIHUzMiBtdHUpXFxuIHtcXG4gXFx0c3RydWN0IGZsb3dpNiBmbDY7XFxuLVxcdHN0cnVjdCBzb2NrICpzayA9IHNrYi1cXHUwMDNlc2s7XFxuK1xcdHN0cnVjdCBzb2NrICpzayA9IHNrYl90b19mdWxsX3NrKHNrYik7XFxuK1xcbitcXHRpZiAoIXNrKVxcbitcXHRcXHRyZXR1cm47XFxuIFxcbiBcXHRmbDYuZmxvd2k2X29pZiA9IHNrLVxcdTAwM2Vza19ib3VuZF9kZXZfaWY7XFxuIFxcdGZsNi5kYWRkciA9IGlwdjZfaGRyKHNrYiktXFx1MDAzZWRhZGRyO1xcbkBAIC0zMSw3ICszNCwxMCBAQCB2b2lkIHhmcm02X2xvY2FsX2Vycm9yKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBtdHUpXFxuIHtcXG4gXFx0c3RydWN0IGZsb3dpNiBmbDY7XFxuIFxcdGNvbnN0IHN0cnVjdCBpcHY2aGRyICpoZHI7XFxuLVxcdHN0cnVjdCBzb2NrICpzayA9IHNrYi1cXHUwMDNlc2s7XFxuK1xcdHN0cnVjdCBzb2NrICpzayA9IHNrYl90b19mdWxsX3NrKHNrYik7XFxuK1xcbitcXHRpZiAoIXNrKVxcbitcXHRcXHRyZXR1cm47XFxuIFxcbiBcXHRoZHIgPSBza2ItXFx1MDAzZWVuY2Fwc3VsYXRpb24gPyBpbm5lcl9pcHY2X2hkcihza2IpIDogaXB2Nl9oZHIoc2tiKTtcXG4gXFx0Zmw2LmZsNl9kcG9ydCA9IGluZXRfc2soc2spLVxcdTAwM2VpbmV0X2Rwb3J0O1xcbmRpZmYgLS1naXQgYS9uZXQveGZybS9lc3BpbnRjcC5jIGIvbmV0L3hmcm0vZXNwaW50Y3AuY1xcbmluZGV4IDY3NGFlZGM1YWY1YTIuLjNlNzJiOWYwNjdiOWIgMTAwNjQ0XFxuLS0tIGEvbmV0L3hmcm0vZXNwaW50Y3AuY1xcbisrKyBiL25ldC94ZnJtL2VzcGludGNwLmNcXG5AQCAtMzAsNyArMzAsMTEgQEAgc3RhdGljIHZvaWQgaGFuZGxlX2VzcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc29jayAqc2spXFxuIHtcXG4gXFx0c3RydWN0IHRjcF9za2JfY2IgKnRjcF9jYiA9IChzdHJ1Y3QgdGNwX3NrYl9jYiAqKXNrYi1cXHUwMDNlY2I7XFxuIFxcbi1cXHRza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcihza2IpO1xcbitcXHRpZiAoIXNrYl9yZXNldF90cmFuc3BvcnRfaGVhZGVyX2NhcmVmdWwoc2tiKSkge1xcbitcXHRcXHRYRlJNX0lOQ19TVEFUUyhzb2NrX25ldChzayksIExJTlVYX01JQl9YRlJNSU5FUlJPUik7XFxuK1xcdFxcdGtmcmVlX3NrYihza2IpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4gXFxuIFxcdC8qIHJlc3RvcmUgSVAgQ0IsIHdlIG5lZWQgYXQgbGVhc3QgSVA2Q0ItXFx1MDAzZW5ob2ZmICovXFxuIFxcdG1lbW1vdmUoc2tiLVxcdTAwM2VjYiwgXFx1MDAyNnRjcF9jYi1cXHUwMDNlaGVhZGVyLCBzaXplb2YodGNwX2NiLVxcdTAwM2VoZWFkZXIpKTtcXG5kaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV9pbnB1dC5jIGIvbmV0L3hmcm0veGZybV9pbnB1dC5jXFxuaW5kZXggZWVjYWIzMzdiZDBhNy4uNWVkODdkNTEzOTJhNSAxMDA2NDRcXG4tLS0gYS9uZXQveGZybS94ZnJtX2lucHV0LmNcXG4rKysgYi9uZXQveGZybS94ZnJtX2lucHV0LmNcXG5AQCAtNDc0LDYgKzQ3NCw3IEBAIGludCB4ZnJtX2lucHV0KHN0cnVjdCBza19idWZmICpza2IsIGludCBuZXh0aGRyLCBfX2JlMzIgc3BpLCBpbnQgZW5jYXBfdHlwZSlcXG4gXFx0c3RydWN0IHhmcm1fc3RhdGUgKnggPSBOVUxMO1xcbiBcXHR4ZnJtX2FkZHJlc3NfdCAqZGFkZHI7XFxuIFxcdHUzMiBtYXJrID0gc2tiLVxcdTAwM2VtYXJrO1xcbitcXHR1OCB4ZnJtX3Byb3RvID0gbmV4dGhkcjtcXG4gXFx0dW5zaWduZWQgaW50IGZhbWlseSA9IEFGX1VOU1BFQztcXG4gXFx0aW50IGRlY2FwcyA9IDA7XFxuIFxcdGludCBhc3luYyA9IDA7XFxuQEAgLTQ4NSw2ICs0ODYsNyBAQCBpbnQgeGZybV9pbnB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbmV4dGhkciwgX19iZTMyIHNwaSwgaW50IGVuY2FwX3R5cGUpXFxuIFxcdGlmIChlbmNhcF90eXBlIFxcdTAwM2MgMCB8fCAoeG8gXFx1MDAyNlxcdTAwMjYgKHhvLVxcdTAwM2VmbGFncyBcXHUwMDI2IFhGUk1fR1JPIHx8IGVuY2FwX3R5cGUgPT0gMCB8fFxcbiBcXHRcXHRcXHRcXHQgICAgICBlbmNhcF90eXBlID09IFVEUF9FTkNBUF9FU1BJTlVEUCkpKSB7XFxuIFxcdFxcdHggPSB4ZnJtX2lucHV0X3N0YXRlKHNrYik7XFxuK1xcdFxcdHhmcm1fcHJvdG8gPSB4LVxcdTAwM2V0eXBlID8geC1cXHUwMDNldHlwZS1cXHUwMDNlcHJvdG8gOiBuZXh0aGRyO1xcbiBcXG4gXFx0XFx0aWYgKHVubGlrZWx5KHgtXFx1MDAzZWttLnN0YXRlICE9IFhGUk1fU1RBVEVfVkFMSUQpKSB7XFxuIFxcdFxcdFxcdGlmICh4LVxcdTAwM2VrbS5zdGF0ZSA9PSBYRlJNX1NUQVRFX0FDUSlcXG5AQCAtNTkyLDExICs1OTQsMTMgQEAgaW50IHhmcm1faW5wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG5leHRoZHIsIF9fYmUzMiBzcGksIGludCBlbmNhcF90eXBlKVxcbiBcXG4gXFx0XFx0eCA9IHhmcm1faW5wdXRfc3RhdGVfbG9va3VwKG5ldCwgbWFyaywgZGFkZHIsIHNwaSwgbmV4dGhkciwgZmFtaWx5KTtcXG4gXFx0XFx0aWYgKHggPT0gTlVMTCkge1xcbitcXHRcXHRcXHR4ZnJtX3Byb3RvID0gbmV4dGhkcjtcXG4gXFx0XFx0XFx0c2VjcGF0aF9yZXNldChza2IpO1xcbiBcXHRcXHRcXHRYRlJNX0lOQ19TVEFUUyhuZXQsIExJTlVYX01JQl9YRlJNSU5OT1NUQVRFUyk7XFxuIFxcdFxcdFxcdHhmcm1fYXVkaXRfc3RhdGVfbm90Zm91bmQoc2tiLCBmYW1pbHksIHNwaSwgc2VxKTtcXG4gXFx0XFx0XFx0Z290byBkcm9wO1xcbiBcXHRcXHR9XFxuK1xcdFxcdHhmcm1fcHJvdG8gPSB4LVxcdTAwM2V0eXBlID8geC1cXHUwMDNldHlwZS1cXHUwMDNlcHJvdG8gOiBuZXh0aGRyO1xcbiBcXG4gXFx0XFx0aWYgKHVubGlrZWx5KHgtXFx1MDAzZWRpciBcXHUwMDI2XFx1MDAyNiB4LVxcdTAwM2VkaXIgIT0gWEZSTV9TQV9ESVJfSU4pKSB7XFxuIFxcdFxcdFxcdHNlY3BhdGhfcmVzZXQoc2tiKTtcXG5AQCAtNjA0LDYgKzYwOCw3IEBAIGludCB4ZnJtX2lucHV0KHN0cnVjdCBza19idWZmICpza2IsIGludCBuZXh0aGRyLCBfX2JlMzIgc3BpLCBpbnQgZW5jYXBfdHlwZSlcXG4gXFx0XFx0XFx0eGZybV9hdWRpdF9zdGF0ZV9ub3Rmb3VuZChza2IsIGZhbWlseSwgc3BpLCBzZXEpO1xcbiBcXHRcXHRcXHR4ZnJtX3N0YXRlX3B1dCh4KTtcXG4gXFx0XFx0XFx0eCA9IE5VTEw7XFxuK1xcdFxcdFxcdHhmcm1fcHJvdG8gPSBuZXh0aGRyO1xcbiBcXHRcXHRcXHRnb3RvIGRyb3A7XFxuIFxcdFxcdH1cXG4gXFxuQEAgLTcyOCw3ICs3MzMsNyBAQCBpbnQgeGZybV9pbnB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbmV4dGhkciwgX19iZTMyIHNwaSwgaW50IGVuY2FwX3R5cGUpXFxuIFxcdH0gd2hpbGUgKCFlcnIpO1xcbiBcXG4gXFx0cmN1X3JlYWRfbG9jaygpO1xcbi1cXHRlcnIgPSB4ZnJtX3Jjdl9jYihza2IsIGZhbWlseSwgeC1cXHUwMDNldHlwZS1cXHUwMDNlcHJvdG8sIDApO1xcbitcXHRlcnIgPSB4ZnJtX3Jjdl9jYihza2IsIGZhbWlseSwgeGZybV9wcm90bywgMCk7XFxuIFxcdGlmIChlcnIpIHtcXG4gXFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIFxcdFxcdGdvdG8gZHJvcDtcXG5AQCAtNzUzLDcgKzc1OCw3IEBAIGludCB4ZnJtX2lucHV0KHN0cnVjdCBza19idWZmICpza2IsIGludCBuZXh0aGRyLCBfX2JlMzIgc3BpLCBpbnQgZW5jYXBfdHlwZSlcXG4gXFx0XFx0XFx0eGZybV9ncm8gPSB4by1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBYRlJNX0dSTztcXG4gXFxuIFxcdFxcdGVyciA9IC1FQUZOT1NVUFBPUlQ7XFxuLVxcdFxcdGFmaW5mbyA9IHhmcm1fc3RhdGVfYWZpbmZvX2dldF9yY3UoeC1cXHUwMDNlcHJvcHMuZmFtaWx5KTtcXG4rXFx0XFx0YWZpbmZvID0geGZybV9zdGF0ZV9hZmluZm9fZ2V0X3JjdShmYW1pbHkpO1xcbiBcXHRcXHRpZiAobGlrZWx5KGFmaW5mbykpXFxuIFxcdFxcdFxcdGVyciA9IGFmaW5mby1cXHUwMDNldHJhbnNwb3J0X2ZpbmlzaChza2IsIHhmcm1fZ3JvIHx8IGFzeW5jKTtcXG4gXFx0XFx0aWYgKHhmcm1fZ3JvKSB7XFxuQEAgLTc3Niw3ICs3ODEsNyBAQCBpbnQgeGZybV9pbnB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbmV4dGhkciwgX19iZTMyIHNwaSwgaW50IGVuY2FwX3R5cGUpXFxuIGRyb3A6XFxuIFxcdGlmIChhc3luYylcXG4gXFx0XFx0ZGV2X3B1dChkZXYpO1xcbi1cXHR4ZnJtX3Jjdl9jYihza2IsIGZhbWlseSwgeCBcXHUwMDI2XFx1MDAyNiB4LVxcdTAwM2V0eXBlID8geC1cXHUwMDNldHlwZS1cXHUwMDNlcHJvdG8gOiBuZXh0aGRyLCAtMSk7XFxuK1xcdHhmcm1fcmN2X2NiKHNrYiwgZmFtaWx5LCB4ZnJtX3Byb3RvLCAtMSk7XFxuIFxcdGtmcmVlX3NrYihza2IpO1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbkBAIC04MDAsMTIgKzgwNSwxNyBAQCBzdGF0aWMgdm9pZCB4ZnJtX3RyYW5zX3JlaW5qZWN0KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4gXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnRyYW5zLVxcdTAwM2VxdWV1ZV9sb2NrKTtcXG4gXFxuIFxcdGxvY2FsX2JoX2Rpc2FibGUoKTtcXG4rXFx0cmN1X3JlYWRfbG9jaygpO1xcbiBcXHR3aGlsZSAoKHNrYiA9IF9fc2tiX2RlcXVldWUoXFx1MDAyNnF1ZXVlKSkpIHtcXG4gXFx0XFx0c3RydWN0IG5ldCAqbmV0ID0gWEZSTV9UUkFOU19TS0JfQ0Ioc2tiKS1cXHUwMDNlbmV0O1xcbitcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gc2tiLVxcdTAwM2VkZXY7XFxuIFxcbiBcXHRcXHRYRlJNX1RSQU5TX1NLQl9DQihza2IpLVxcdTAwM2VmaW5pc2gobmV0LCBOVUxMLCBza2IpO1xcbitcXHRcXHRpZiAoZGV2KVxcbitcXHRcXHRcXHRkZXZfcHV0KGRldik7XFxuIFxcdFxcdHB1dF9uZXQobmV0KTtcXG4gXFx0fVxcbitcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gXFx0bG9jYWxfYmhfZW5hYmxlKCk7XFxuIH1cXG4gXFxuQEAgLTgyMSwxMiArODMxLDE4IEBAIGludCB4ZnJtX3RyYW5zX3F1ZXVlX25ldChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdGlmIChza2JfcXVldWVfbGVuKFxcdTAwMjZ0cmFucy1cXHUwMDNlcXVldWUpIFxcdTAwM2U9IFJFQURfT05DRShuZXRfaG90ZGF0YS5tYXhfYmFja2xvZykpXFxuIFxcdFxcdHJldHVybiAtRU5PQlVGUztcXG4gXFxuK1xcdGlmIChza2JfZHN0KHNrYikgXFx1MDAyNlxcdTAwMjYgIXNrYl9kc3RfZm9yY2Uoc2tiKSlcXG4rXFx0XFx0cmV0dXJuIC1FSE9TVFVOUkVBQ0g7XFxuK1xcbiBcXHRCVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCB4ZnJtX3RyYW5zX2NiKSBcXHUwMDNlIHNpemVvZihza2ItXFx1MDAzZWNiKSk7XFxuIFxcbiBcXHRob2xkX25ldCA9IG1heWJlX2dldF9uZXQobmV0KTtcXG4gXFx0aWYgKCFob2xkX25ldClcXG4gXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuIFxcbitcXHRpZiAoc2tiLVxcdTAwM2VkZXYpXFxuK1xcdFxcdGRldl9ob2xkKHNrYi1cXHUwMDNlZGV2KTtcXG4rXFxuIFxcdFhGUk1fVFJBTlNfU0tCX0NCKHNrYiktXFx1MDAzZWZpbmlzaCA9IGZpbmlzaDtcXG4gXFx0WEZSTV9UUkFOU19TS0JfQ0Ioc2tiKS1cXHUwMDNlbmV0ID0gaG9sZF9uZXQ7XFxuIFxcdHNwaW5fbG9ja19iaChcXHUwMDI2dHJhbnMtXFx1MDAzZXF1ZXVlX2xvY2spO1xcbmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX2lwdGZzLmMgYi9uZXQveGZybS94ZnJtX2lwdGZzLmNcXG5pbmRleCA1OTdhZWRlYWMyNmViLi42OTIwOTQwYTM1YjQ5IDEwMDY0NFxcbi0tLSBhL25ldC94ZnJtL3hmcm1faXB0ZnMuY1xcbisrKyBiL25ldC94ZnJtL3hmcm1faXB0ZnMuY1xcbkBAIC00MTYsNiArNDE2LDE0IEBAIHN0YXRpYyBib29sIGlwdGZzX3NrYl9jYW5fYWRkX2ZyYWdzKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdGlmIChza2JfaGFzX2ZyYWdfbGlzdChza2IpIHx8IHNrYi1cXHUwMDNlcHBfcmVjeWNsZSAhPSB3YWxrLVxcdTAwM2VwcF9yZWN5Y2xlKVxcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcbitcXHQvKiBSZWplY3QgYW4gQG9mZnNldCB0aGF0IGlzIGF0IG9yIGJleW9uZCB0aGUgZW5kIG9mIHRoZSB3YWxrJ3MgZGF0YVxcbitcXHQgKiBiZWZvcmUgY2FsbGluZyBpcHRmc19za2JfcmVzZXRfZnJhZ193YWxrKCksIHdob3NlIGZyYWdtZW50LWFkdmFuY2VcXG4rXFx0ICogbG9vcCBpcyBvdGhlcndpc2UgdW5ib3VuZGVkIGFuZCB3b3VsZCBpbmRleCBwYXN0IHdhbGstXFx1MDAzZWZyYWdzW10uXFxuK1xcdCAqIFRoaXMgbWlycm9ycyB0aGUgZ3VhcmQgYWxyZWFkeSBwcmVzZW50IGluIGlwdGZzX3NrYl9hZGRfZnJhZ3MoKS5cXG4rXFx0ICovXFxuK1xcdGlmICghd2Fsay1cXHUwMDNlbnJfZnJhZ3MgfHwgb2Zmc2V0IFxcdTAwM2U9IHdhbGstXFx1MDAzZXRvdGFsICsgd2Fsay1cXHUwMDNlaW5pdGlhbF9vZmZzZXQpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuIFxcdC8qIE1ha2Ugb2Zmc2V0IHJlbGF0aXZlIHRvIGN1cnJlbnQgZnJhZyBhZnRlciBzZXR0aW5nIHRoYXQgKi9cXG4gXFx0b2Zmc2V0ID0gaXB0ZnNfc2tiX3Jlc2V0X2ZyYWdfd2Fsayh3YWxrLCBvZmZzZXQpO1xcbiBcXG5AQCAtODIwLDggKzgyOCw4IEBAIHN0YXRpYyB1MzIgaXB0ZnNfcmVhc3NlbV9jb250KHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsIHU2NCBzZXEsXFxuIFxcdFxcdCAqIGFsbG9jYXRlIGFuIGluIHByb2dyZXNzIHNrYlxcbiBcXHRcXHQgKi9cXG4gXFx0XFx0aXByZW1haW4gPSBfX2lwdGZzX2lwbGVuKHh0ZnMtXFx1MDAzZXJhX3J1bnQpO1xcbi1cXHRcXHRpZiAoaXByZW1haW4gXFx1MDAzYyBzaXplb2YoeHRmcy1cXHUwMDNlcmFfcnVudCkpIHtcXG4tXFx0XFx0XFx0LyogbGVuZ3RoIGhhcyB0byBiZSBhdCBsZWFzdCBydW50c2l6ZSBsYXJnZSAqL1xcbitcXHRcXHRpZiAoaXByZW1haW4gXFx1MDAzYyBfX2lwdGZzX2lwaGxlbih4dGZzLVxcdTAwM2VyYV9ydW50KSkge1xcbitcXHRcXHRcXHQvKiBsZW5ndGggaGFzIHRvIGJlIGF0IGxlYXN0IHRoZSBJUCBoZWFkZXIgc2l6ZSAqL1xcbiBcXHRcXHRcXHRYRlJNX0lOQ19TVEFUUyh4c19uZXQoeHRmcy1cXHUwMDNleCksXFxuIFxcdFxcdFxcdFxcdCAgICAgICBMSU5VWF9NSUJfWEZSTUlOSVBURlNFUlJPUik7XFxuIFxcdFxcdFxcdGdvdG8gYWJhbmRvbjtcXG5kaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV9wb2xpY3kuYyBiL25ldC94ZnJtL3hmcm1fcG9saWN5LmNcXG5pbmRleCA5MzJhMzEzYjk0NjBhLi41MTNjOWYyMjgzMzQ3IDEwMDY0NFxcbi0tLSBhL25ldC94ZnJtL3hmcm1fcG9saWN5LmNcXG4rKysgYi9uZXQveGZybS94ZnJtX3BvbGljeS5jXFxuQEAgLTI3NzAsOSArMjc3MCwxMiBAQCBzdGF0aWMgc3RydWN0IGRzdF9lbnRyeSAqeGZybV9idW5kbGVfY3JlYXRlKHN0cnVjdCB4ZnJtX3BvbGljeSAqcG9saWN5LFxcbiBcXHR4ZHN0MC1cXHUwMDNlcGF0aCA9IGRzdDtcXG4gXFxuIFxcdGVyciA9IC1FTk9ERVY7XFxuLVxcdGRldiA9IGRzdC1cXHUwMDNlZGV2O1xcbi1cXHRpZiAoIWRldilcXG4rXFx0cmN1X3JlYWRfbG9jaygpO1xcbitcXHRkZXYgPSBkc3RfZGV2X3JjdShkc3QpO1xcbitcXHRpZiAoIWRldikge1xcbitcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gXFx0XFx0Z290byBmcmVlX2RzdDtcXG4rXFx0fVxcbiBcXG4gXFx0eGZybV9pbml0X3BhdGgoeGRzdDAsIGRzdCwgbmZoZWFkZXJfbGVuKTtcXG4gXFx0eGZybV9pbml0X3BtdHUoYnVuZGxlLCBueCk7XFxuQEAgLTI3ODAsOCArMjc4MywxMCBAQCBzdGF0aWMgc3RydWN0IGRzdF9lbnRyeSAqeGZybV9idW5kbGVfY3JlYXRlKHN0cnVjdCB4ZnJtX3BvbGljeSAqcG9saWN5LFxcbiBcXHRmb3IgKHhkc3RfcHJldiA9IHhkc3QwOyB4ZHN0X3ByZXYgIT0gKHN0cnVjdCB4ZnJtX2RzdCAqKWRzdDtcXG4gXFx0ICAgICB4ZHN0X3ByZXYgPSAoc3RydWN0IHhmcm1fZHN0ICopIHhmcm1fZHN0X2NoaWxkKFxcdTAwMjZ4ZHN0X3ByZXYtXFx1MDAzZXUuZHN0KSkge1xcbiBcXHRcXHRlcnIgPSB4ZnJtX2ZpbGxfZHN0KHhkc3RfcHJldiwgZGV2LCBmbCk7XFxuLVxcdFxcdGlmIChlcnIpXFxuK1xcdFxcdGlmIChlcnIpIHtcXG4rXFx0XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIFxcdFxcdFxcdGdvdG8gZnJlZV9kc3Q7XFxuK1xcdFxcdH1cXG4gXFxuIFxcdFxcdHhkc3RfcHJldi1cXHUwMDNldS5kc3QuaGVhZGVyX2xlbiA9IGhlYWRlcl9sZW47XFxuIFxcdFxcdHhkc3RfcHJldi1cXHUwMDNldS5kc3QudHJhaWxlcl9sZW4gPSB0cmFpbGVyX2xlbjtcXG5AQCAtMjc4OSw2ICsyNzk0LDcgQEAgc3RhdGljIHN0cnVjdCBkc3RfZW50cnkgKnhmcm1fYnVuZGxlX2NyZWF0ZShzdHJ1Y3QgeGZybV9wb2xpY3kgKnBvbGljeSxcXG4gXFx0XFx0dHJhaWxlcl9sZW4gLT0geGRzdF9wcmV2LVxcdTAwM2V1LmRzdC54ZnJtLVxcdTAwM2Vwcm9wcy50cmFpbGVyX2xlbjtcXG4gXFx0fVxcbiBcXG4rXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIFxcdHJldHVybiBcXHUwMDI2eGRzdDAtXFx1MDAzZXUuZHN0O1xcbiBcXG4gcHV0X3N0YXRlczpcXG5AQCAtMzA1OCwxMSArMzA2NCwxNSBAQCBzdGF0aWMgc3RydWN0IHhmcm1fZHN0ICp4ZnJtX2NyZWF0ZV9kdW1teV9idW5kbGUoc3RydWN0IG5ldCAqbmV0LFxcbiBcXHR4ZnJtX2luaXRfcGF0aCgoc3RydWN0IHhmcm1fZHN0ICopZHN0MSwgZHN0LCAwKTtcXG4gXFxuIFxcdGVyciA9IC1FTk9ERVY7XFxuLVxcdGRldiA9IGRzdC1cXHUwMDNlZGV2O1xcbi1cXHRpZiAoIWRldilcXG4rXFx0cmN1X3JlYWRfbG9jaygpO1xcbitcXHRkZXYgPSBkc3RfZGV2X3JjdShkc3QpO1xcbitcXHRpZiAoIWRldikge1xcbitcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gXFx0XFx0Z290byBmcmVlX2RzdDtcXG4rXFx0fVxcbiBcXG4gXFx0ZXJyID0geGZybV9maWxsX2RzdCh4ZHN0LCBkZXYsIGZsKTtcXG4rXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIFxcdGlmIChlcnIpXFxuIFxcdFxcdGdvdG8gZnJlZV9kc3Q7XFxuIFxcbmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX3N0YXRlLmMgYi9uZXQveGZybS94ZnJtX3N0YXRlLmNcXG5pbmRleCAzNmE0ZjY3OTNlZGVmLi5lNDVhYTFlZDViOTY1IDEwMDY0NFxcbi0tLSBhL25ldC94ZnJtL3hmcm1fc3RhdGUuY1xcbisrKyBiL25ldC94ZnJtL3hmcm1fc3RhdGUuY1xcbkBAIC0yMjYsNiArMjI2LDcgQEAgc3RhdGljIHN0cnVjdCB4ZnJtX3N0YXRlX2FmaW5mbyBfX3JjdSAqeGZybV9zdGF0ZV9hZmluZm9bTlBST1RPXTtcXG4gXFxuIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soeGZybV9zdGF0ZV9nY19sb2NrKTtcXG4gc3RhdGljIERFRklORV9TUElOTE9DSyh4ZnJtX3N0YXRlX2Rldl9nY19sb2NrKTtcXG4rc3RhdGljIERFRklORV9NVVRFWCh4ZnJtX3N0YXRlX2djX211dGV4KTtcXG4gXFxuIGludCBfX3hmcm1fc3RhdGVfZGVsZXRlKHN0cnVjdCB4ZnJtX3N0YXRlICp4KTtcXG4gXFxuQEAgLTYzMiw4ICs2MzMsMTAgQEAgc3RhdGljIHZvaWQgeGZybV9zdGF0ZV9nY190YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4gXFxuIFxcdHN5bmNocm9uaXplX3JjdSgpO1xcbiBcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2eGZybV9zdGF0ZV9nY19tdXRleCk7XFxuIFxcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoeCwgdG1wLCBcXHUwMDI2Z2NfbGlzdCwgZ2NsaXN0KVxcbiBcXHRcXHR4ZnJtX3N0YXRlX2djX2Rlc3Ryb3koeCk7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2eGZybV9zdGF0ZV9nY19tdXRleCk7XFxuIH1cXG4gXFxuIHN0YXRpYyBlbnVtIGhydGltZXJfcmVzdGFydCB4ZnJtX3RpbWVyX2hhbmRsZXIoc3RydWN0IGhydGltZXIgKm1lKVxcbkBAIC04MjMsOSArODI2LDkgQEAgaW50IF9feGZybV9zdGF0ZV9kZWxldGUoc3RydWN0IHhmcm1fc3RhdGUgKngpXFxuIFxcdFxcdGlmICghaGxpc3RfdW5oYXNoZWQoXFx1MDAyNngtXFx1MDAzZWJ5c2VxKSlcXG4gXFx0XFx0XFx0aGxpc3RfZGVsX2luaXRfcmN1KFxcdTAwMjZ4LVxcdTAwM2VieXNlcSk7XFxuIFxcdFxcdGlmICghaGxpc3RfdW5oYXNoZWQoXFx1MDAyNngtXFx1MDAzZXN0YXRlX2NhY2hlKSlcXG4tXFx0XFx0XFx0aGxpc3RfZGVsX3JjdShcXHUwMDI2eC1cXHUwMDNlc3RhdGVfY2FjaGUpO1xcbitcXHRcXHRcXHRobGlzdF9kZWxfaW5pdF9yY3UoXFx1MDAyNngtXFx1MDAzZXN0YXRlX2NhY2hlKTtcXG4gXFx0XFx0aWYgKCFobGlzdF91bmhhc2hlZChcXHUwMDI2eC1cXHUwMDNlc3RhdGVfY2FjaGVfaW5wdXQpKVxcbi1cXHRcXHRcXHRobGlzdF9kZWxfcmN1KFxcdTAwMjZ4LVxcdTAwM2VzdGF0ZV9jYWNoZV9pbnB1dCk7XFxuK1xcdFxcdFxcdGhsaXN0X2RlbF9pbml0X3JjdShcXHUwMDI2eC1cXHUwMDNlc3RhdGVfY2FjaGVfaW5wdXQpO1xcbiBcXG4gXFx0XFx0aWYgKCFobGlzdF91bmhhc2hlZChcXHUwMDI2eC1cXHUwMDNlYnlzcGkpKVxcbiBcXHRcXHRcXHRobGlzdF9kZWxfaW5pdF9yY3UoXFx1MDAyNngtXFx1MDAzZWJ5c3BpKTtcXG5AQCAtMTAwMCw2ICsxMDAzLDcgQEAgaW50IHhmcm1fZGV2X3N0YXRlX2ZsdXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCB0YXNrX3ZhbGlcXG4gb3V0OlxcbiBcXHRzcGluX3VubG9ja19iaChcXHUwMDI2bmV0LVxcdTAwM2V4ZnJtLnhmcm1fc3RhdGVfbG9jayk7XFxuIFxcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZ4ZnJtX3N0YXRlX2djX211dGV4KTtcXG4gXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZ4ZnJtX3N0YXRlX2Rldl9nY19sb2NrKTtcXG4gcmVzdGFydF9nYzpcXG4gXFx0aGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh4LCB0bXAsIFxcdTAwMjZ4ZnJtX3N0YXRlX2Rldl9nY19saXN0LCBkZXZfZ2NsaXN0KSB7XFxuQEAgLTEwMTQsNiArMTAxOCw3IEBAIGludCB4ZnJtX2Rldl9zdGF0ZV9mbHVzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGJvb2wgdGFza192YWxpXFxuIFxcbiBcXHR9XFxuIFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZ4ZnJtX3N0YXRlX2Rldl9nY19sb2NrKTtcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZ4ZnJtX3N0YXRlX2djX211dGV4KTtcXG4gXFxuIFxcdHhmcm1fZmx1c2hfZ2MoKTtcXG4gXFxuZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1fdXNlci5jIGIvbmV0L3hmcm0veGZybV91c2VyLmNcXG5pbmRleCA2MjY2YTkyY2YzMDIwLi5hMjU4N2M3ZTc5NmI0IDEwMDY0NFxcbi0tLSBhL25ldC94ZnJtL3hmcm1fdXNlci5jXFxuKysrIGIvbmV0L3hmcm0veGZybV91c2VyLmNcXG5AQCAtMTg3Nyw3ICsxODc3LDYgQEAgc3RhdGljIGludCB4ZnJtX2FsbG9jX3VzZXJzcGkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXFxuIFxcdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrYi1cXHUwMDNlc2spO1xcbiBcXHRzdHJ1Y3QgeGZybV9zdGF0ZSAqeDtcXG4gXFx0c3RydWN0IHhmcm1fdXNlcnNwaV9pbmZvICpwO1xcbi1cXHRzdHJ1Y3QgeGZybV90cmFuc2xhdG9yICp4dHI7XFxuIFxcdHN0cnVjdCBza19idWZmICpyZXNwX3NrYjtcXG4gXFx0eGZybV9hZGRyZXNzX3QgKmRhZGRyO1xcbiBcXHRpbnQgZmFtaWx5O1xcbkBAIC0xOTQzLDE3ICsxOTQyLDYgQEAgc3RhdGljIGludCB4ZnJtX2FsbG9jX3VzZXJzcGkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXHR9XFxuIFxcbi1cXHR4dHIgPSB4ZnJtX2dldF90cmFuc2xhdG9yKCk7XFxuLVxcdGlmICh4dHIpIHtcXG4tXFx0XFx0ZXJyID0geHRyLVxcdTAwM2VhbGxvY19jb21wYXQoc2tiLCBubG1zZ19oZHIoc2tiKSk7XFxuLVxcbi1cXHRcXHR4ZnJtX3B1dF90cmFuc2xhdG9yKHh0cik7XFxuLVxcdFxcdGlmIChlcnIpIHtcXG4tXFx0XFx0XFx0a2ZyZWVfc2tiKHJlc3Bfc2tiKTtcXG4tXFx0XFx0XFx0Z290byBvdXQ7XFxuLVxcdFxcdH1cXG4tXFx0fVxcbi1cXG4gXFx0ZXJyID0gbmxtc2dfdW5pY2FzdCh4ZnJtX25ldF9ubHNrKG5ldCwgc2tiKSwgcmVzcF9za2IsIE5FVExJTktfQ0Ioc2tiKS5wb3J0aWQpO1xcbiBcXG4gb3V0OlxcbkBAIC0zMzM3LDcgKzMzMjUsMTEgQEAgc3RhdGljIGludCB4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZShzdHJ1Y3QgbmV0ICpuZXQsXFxuIFxcdFxcdHJldHVybiBlcnI7XFxuIFxcdH1cXG4gXFxuLVxcdHJldHVybiB4ZnJtX25sbXNnX211bHRpY2FzdChuZXQsIHNrYiwgMCwgWEZSTU5MR1JQX01JR1JBVEUpO1xcbitcXHRyY3VfcmVhZF9sb2NrKCk7XFxuK1xcdGVyciA9IHhmcm1fbmxtc2dfbXVsdGljYXN0KG5ldCwgc2tiLCAwLCBYRlJNTkxHUlBfTUlHUkFURSk7XFxuK1xcdHJjdV9yZWFkX3VubG9jaygpO1xcbitcXG4rXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG4gc3RhdGljIGludCB4ZnJtX2RvX21pZ3JhdGVfc3RhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDEzOjUzOjU0LjM2Njk4ODUxNFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NDQwNjMwMjE3NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU5FVFwiLFxuICAgIFwiSVBWNlwiLFxuICAgIFwiWEZSTVwiLFxuICAgIFwiSU5FVF9FU1BcIixcbiAgICBcIklORVQ2X0VTUFwiLFxuICAgIFwiSU5FVF9FU1BJTlRDUFwiLFxuICAgIFwiSU5FVDZfRVNQSU5UQ1BcIixcbiAgICBcIlhGUk1fVVNFUlwiLFxuICAgIFwiWEZSTV9JUFRGU1wiLFxuICAgIFwiWEZSTV9NSUdSQVRFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZXNwX291dHB1dF9oZWFkXCIsXG4gICAgXCJlc3A2X291dHB1dF9oZWFkXCIsXG4gICAgXCJ4ZnJtNl9sb2NhbF9yeHBtdHVcIixcbiAgICBcInhmcm02X2xvY2FsX2Vycm9yXCIsXG4gICAgXCJlc3BpbnRjcF9yY3ZcIixcbiAgICBcImhhbmRsZV9lc3BcIixcbiAgICBcInhmcm1faW5wdXRcIixcbiAgICBcInhmcm1fdHJhbnNfcmVpbmplY3RcIixcbiAgICBcInhmcm1fdHJhbnNfcXVldWVfbmV0XCIsXG4gICAgXCJpcHRmc19za2JfY2FuX2FkZF9mcmFnc1wiLFxuICAgIFwiaXB0ZnNfcmVhc3NlbV9jb250XCIsXG4gICAgXCJ4ZnJtX2J1bmRsZV9jcmVhdGVcIixcbiAgICBcInhmcm1fY3JlYXRlX2R1bW15X2J1bmRsZVwiLFxuICAgIFwieGZybV9zdGF0ZV9nY190YXNrXCIsXG4gICAgXCJfX3hmcm1fc3RhdGVfZGVsZXRlXCIsXG4gICAgXCJ4ZnJtX2Rldl9zdGF0ZV9mbHVzaFwiLFxuICAgIFwieGZybV9hbGxvY191c2Vyc3BpXCIsXG4gICAgXCJ4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHRvdWNoZXMgY29yZSBJUHNlYyAoWEZSTSkgSVB2NC9JUHY2IG5ldHdvcmtpbmcgbG9naWMsIGluY2x1ZGluZyBFU1Agb3V0cHV0IHplcm8tY29weSBkb3duZ3JhZGVzLCBJUHY2IFhGUk0gZXJyb3IgcmVwb3J0aW5nIGZvciBub24tZnVsbCBzb2NrZXRzLCBFU1AtaW4tVENQIHRyYW5zcG9ydCBoZWFkZXIgcmVzZXR0aW5nLCBYRlJNIGlucHV0IHBhY2tldCBwcm90byBkaXNwYXRjaCBhbmQgYXN5bmMgZGV2LXJlZiByZWluamVjdGlvbiBoYW5kbGluZywgSVAtVEZTIGZyYWdtZW50IHdhbGsgYm91bmRzIGNoZWNrcywgcG9saWN5IGJ1bmRsZSBSQ1UgZGV2aWNlIHJlc29sdXRpb24sIHN0YXRlIEdDIHNlcmlhbGl6YXRpb24gdW5kZXIgbXV0ZXgsIGFuZCBYRlJNIHVzZXIgbmV0bGluayBoYW5kbGVycy4gQWxsIGNoYW5nZXMgYXJlIGluIHJlYWNoYWJsZSBuZXR3b3JraW5nIHBhdGhzIGV4ZXJjaXNhYmxlIHZpYSBzb2NrZXRzIGFuZCBYRlJNIG5ldGxpbmsgaW50ZXJmYWNlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBjZTAxNGRhMTUzZDhkY2U4YzMzZTM2ZmE5NTdmMTAxMzk2M2Y2ZTE5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgNyAxMzo1Mzo1MCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L2VzcDQuYyBiL25ldC9pcHY0L2VzcDQuY1xuaW5kZXggYTZjMThhZWE3NDk4ZC4uZTc2ZGI1ODE3ZTc4ZSAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L2VzcDQuY1xuKysrIGIvbmV0L2lwdjQvZXNwNC5jXG5AQCAtNDQxLDYgKzQ0MSwxMiBAQCBpbnQgZXNwX291dHB1dF9oZWFkKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZXNwX2luZm8gKlxuIFxuIFx0XHRcdGVzcC1cdTAwM2VpbnBsYWNlID0gZmFsc2U7XG4gXG4rXHRcdFx0LyogVGFrZSByZWFsIHBhZ2UgcmVmcyBhbmQgY2xlYXIgU0tCRkxfTUFOQUdFRF9GUkFHX1JFRlMgYmVmb3JlXG4rXHRcdFx0ICogd2UgbXV0YXRlIHRoZSBmcmFnIGFycmF5LCBzbyB0aGUgcGVyLWZyYWcgdW5yZWYgc3RheXMgYmFsYW5jZWRcbitcdFx0XHQgKiBmb3IgemVyb2NvcHkgbWFuYWdlZCBmcmFncyAoc2VlIF9faXBfYXBwZW5kX2RhdGEoKSkuXG4rXHRcdFx0ICovXG4rXHRcdFx0c2tiX3pjb3B5X2Rvd25ncmFkZV9tYW5hZ2VkKHNrYik7XG4rXG4gXHRcdFx0YWxsb2NzaXplID0gQUxJR04odGFpbGVuLCBMMV9DQUNIRV9CWVRFUyk7XG4gXG4gXHRcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNngtXHUwMDNlbG9jayk7XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvZXNwNi5jIGIvbmV0L2lwdjYvZXNwNi5jXG5pbmRleCA3MmVjMGQ3ZDExMjA5Li5iMWM5YjM2Zjc2ZGM0IDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvZXNwNi5jXG4rKysgYi9uZXQvaXB2Ni9lc3A2LmNcbkBAIC00NzEsNiArNDcxLDEyIEBAIGludCBlc3A2X291dHB1dF9oZWFkKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZXNwX2luZm9cbiBcbiBcdFx0XHRlc3AtXHUwMDNlaW5wbGFjZSA9IGZhbHNlO1xuIFxuK1x0XHRcdC8qIFRha2UgcmVhbCBwYWdlIHJlZnMgYW5kIGNsZWFyIFNLQkZMX01BTkFHRURfRlJBR19SRUZTIGJlZm9yZVxuK1x0XHRcdCAqIHdlIG11dGF0ZSB0aGUgZnJhZyBhcnJheSwgc28gdGhlIHBlci1mcmFnIHVucmVmIHN0YXlzIGJhbGFuY2VkXG4rXHRcdFx0ICogZm9yIHplcm9jb3B5IG1hbmFnZWQgZnJhZ3MgKHNlZSBfX2lwX2FwcGVuZF9kYXRhKCkpLlxuK1x0XHRcdCAqL1xuK1x0XHRcdHNrYl96Y29weV9kb3duZ3JhZGVfbWFuYWdlZChza2IpO1xuK1xuIFx0XHRcdGFsbG9jc2l6ZSA9IEFMSUdOKHRhaWxlbiwgTDFfQ0FDSEVfQllURVMpO1xuIFxuIFx0XHRcdHNwaW5fbG9ja19iaChcdTAwMjZ4LVx1MDAzZWxvY2spO1xuZGlmZiAtLWdpdCBhL25ldC9pcHY2L3hmcm02X291dHB1dC5jIGIvbmV0L2lwdjYveGZybTZfb3V0cHV0LmNcbmluZGV4IDUxMmJkYWYxMzY5OTcuLjQ0YjIyMWEwOWEwYzggMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni94ZnJtNl9vdXRwdXQuY1xuKysrIGIvbmV0L2lwdjYveGZybTZfb3V0cHV0LmNcbkBAIC0xOSw3ICsxOSwxMCBAQFxuIHZvaWQgeGZybTZfbG9jYWxfcnhwbXR1KHN0cnVjdCBza19idWZmICpza2IsIHUzMiBtdHUpXG4ge1xuIFx0c3RydWN0IGZsb3dpNiBmbDY7XG4tXHRzdHJ1Y3Qgc29jayAqc2sgPSBza2ItXHUwMDNlc2s7XG4rXHRzdHJ1Y3Qgc29jayAqc2sgPSBza2JfdG9fZnVsbF9zayhza2IpO1xuK1xuK1x0aWYgKCFzaylcbitcdFx0cmV0dXJuO1xuIFxuIFx0Zmw2LmZsb3dpNl9vaWYgPSBzay1cdTAwM2Vza19ib3VuZF9kZXZfaWY7XG4gXHRmbDYuZGFkZHIgPSBpcHY2X2hkcihza2IpLVx1MDAzZWRhZGRyO1xuQEAgLTMxLDcgKzM0LDEwIEBAIHZvaWQgeGZybTZfbG9jYWxfZXJyb3Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIG10dSlcbiB7XG4gXHRzdHJ1Y3QgZmxvd2k2IGZsNjtcbiBcdGNvbnN0IHN0cnVjdCBpcHY2aGRyICpoZHI7XG4tXHRzdHJ1Y3Qgc29jayAqc2sgPSBza2ItXHUwMDNlc2s7XG4rXHRzdHJ1Y3Qgc29jayAqc2sgPSBza2JfdG9fZnVsbF9zayhza2IpO1xuK1xuK1x0aWYgKCFzaylcbitcdFx0cmV0dXJuO1xuIFxuIFx0aGRyID0gc2tiLVx1MDAzZWVuY2Fwc3VsYXRpb24gPyBpbm5lcl9pcHY2X2hkcihza2IpIDogaXB2Nl9oZHIoc2tiKTtcbiBcdGZsNi5mbDZfZHBvcnQgPSBpbmV0X3NrKHNrKS1cdTAwM2VpbmV0X2Rwb3J0O1xuZGlmZiAtLWdpdCBhL25ldC94ZnJtL2VzcGludGNwLmMgYi9uZXQveGZybS9lc3BpbnRjcC5jXG5pbmRleCA2NzRhZWRjNWFmNWEyLi4zZTcyYjlmMDY3YjliIDEwMDY0NFxuLS0tIGEvbmV0L3hmcm0vZXNwaW50Y3AuY1xuKysrIGIvbmV0L3hmcm0vZXNwaW50Y3AuY1xuQEAgLTMwLDcgKzMwLDExIEBAIHN0YXRpYyB2b2lkIGhhbmRsZV9lc3Aoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNvY2sgKnNrKVxuIHtcbiBcdHN0cnVjdCB0Y3Bfc2tiX2NiICp0Y3BfY2IgPSAoc3RydWN0IHRjcF9za2JfY2IgKilza2ItXHUwMDNlY2I7XG4gXG4tXHRza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcihza2IpO1xuK1x0aWYgKCFza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHNrYikpIHtcbitcdFx0WEZSTV9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBMSU5VWF9NSUJfWEZSTUlORVJST1IpO1xuK1x0XHRrZnJlZV9za2Ioc2tiKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuIFxuIFx0LyogcmVzdG9yZSBJUCBDQiwgd2UgbmVlZCBhdCBsZWFzdCBJUDZDQi1cdTAwM2VuaG9mZiAqL1xuIFx0bWVtbW92ZShza2ItXHUwMDNlY2IsIFx1MDAyNnRjcF9jYi1cdTAwM2VoZWFkZXIsIHNpemVvZih0Y3BfY2ItXHUwMDNlaGVhZGVyKSk7XG5kaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV9pbnB1dC5jIGIvbmV0L3hmcm0veGZybV9pbnB1dC5jXG5pbmRleCBlZWNhYjMzN2JkMGE3Li41ZWQ4N2Q1MTM5MmE1IDEwMDY0NFxuLS0tIGEvbmV0L3hmcm0veGZybV9pbnB1dC5jXG4rKysgYi9uZXQveGZybS94ZnJtX2lucHV0LmNcbkBAIC00NzQsNiArNDc0LDcgQEAgaW50IHhmcm1faW5wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG5leHRoZHIsIF9fYmUzMiBzcGksIGludCBlbmNhcF90eXBlKVxuIFx0c3RydWN0IHhmcm1fc3RhdGUgKnggPSBOVUxMO1xuIFx0eGZybV9hZGRyZXNzX3QgKmRhZGRyO1xuIFx0dTMyIG1hcmsgPSBza2ItXHUwMDNlbWFyaztcbitcdHU4IHhmcm1fcHJvdG8gPSBuZXh0aGRyO1xuIFx0dW5zaWduZWQgaW50IGZhbWlseSA9IEFGX1VOU1BFQztcbiBcdGludCBkZWNhcHMgPSAwO1xuIFx0aW50IGFzeW5jID0gMDtcbkBAIC00ODUsNiArNDg2LDcgQEAgaW50IHhmcm1faW5wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG5leHRoZHIsIF9fYmUzMiBzcGksIGludCBlbmNhcF90eXBlKVxuIFx0aWYgKGVuY2FwX3R5cGUgXHUwMDNjIDAgfHwgKHhvIFx1MDAyNlx1MDAyNiAoeG8tXHUwMDNlZmxhZ3MgXHUwMDI2IFhGUk1fR1JPIHx8IGVuY2FwX3R5cGUgPT0gMCB8fFxuIFx0XHRcdFx0ICAgICAgZW5jYXBfdHlwZSA9PSBVRFBfRU5DQVBfRVNQSU5VRFApKSkge1xuIFx0XHR4ID0geGZybV9pbnB1dF9zdGF0ZShza2IpO1xuK1x0XHR4ZnJtX3Byb3RvID0geC1cdTAwM2V0eXBlID8geC1cdTAwM2V0eXBlLVx1MDAzZXByb3RvIDogbmV4dGhkcjtcbiBcbiBcdFx0aWYgKHVubGlrZWx5KHgtXHUwMDNla20uc3RhdGUgIT0gWEZSTV9TVEFURV9WQUxJRCkpIHtcbiBcdFx0XHRpZiAoeC1cdTAwM2VrbS5zdGF0ZSA9PSBYRlJNX1NUQVRFX0FDUSlcbkBAIC01OTIsMTEgKzU5NCwxMyBAQCBpbnQgeGZybV9pbnB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbmV4dGhkciwgX19iZTMyIHNwaSwgaW50IGVuY2FwX3R5cGUpXG4gXG4gXHRcdHggPSB4ZnJtX2lucHV0X3N0YXRlX2xvb2t1cChuZXQsIG1hcmssIGRhZGRyLCBzcGksIG5leHRoZHIsIGZhbWlseSk7XG4gXHRcdGlmICh4ID09IE5VTEwpIHtcbitcdFx0XHR4ZnJtX3Byb3RvID0gbmV4dGhkcjtcbiBcdFx0XHRzZWNwYXRoX3Jlc2V0KHNrYik7XG4gXHRcdFx0WEZSTV9JTkNfU1RBVFMobmV0LCBMSU5VWF9NSUJfWEZSTUlOTk9TVEFURVMpO1xuIFx0XHRcdHhmcm1fYXVkaXRfc3RhdGVfbm90Zm91bmQoc2tiLCBmYW1pbHksIHNwaSwgc2VxKTtcbiBcdFx0XHRnb3RvIGRyb3A7XG4gXHRcdH1cbitcdFx0eGZybV9wcm90byA9IHgtXHUwMDNldHlwZSA/IHgtXHUwMDNldHlwZS1cdTAwM2Vwcm90byA6IG5leHRoZHI7XG4gXG4gXHRcdGlmICh1bmxpa2VseSh4LVx1MDAzZWRpciBcdTAwMjZcdTAwMjYgeC1cdTAwM2VkaXIgIT0gWEZSTV9TQV9ESVJfSU4pKSB7XG4gXHRcdFx0c2VjcGF0aF9yZXNldChza2IpO1xuQEAgLTYwNCw2ICs2MDgsNyBAQCBpbnQgeGZybV9pbnB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbmV4dGhkciwgX19iZTMyIHNwaSwgaW50IGVuY2FwX3R5cGUpXG4gXHRcdFx0eGZybV9hdWRpdF9zdGF0ZV9ub3Rmb3VuZChza2IsIGZhbWlseSwgc3BpLCBzZXEpO1xuIFx0XHRcdHhmcm1fc3RhdGVfcHV0KHgpO1xuIFx0XHRcdHggPSBOVUxMO1xuK1x0XHRcdHhmcm1fcHJvdG8gPSBuZXh0aGRyO1xuIFx0XHRcdGdvdG8gZHJvcDtcbiBcdFx0fVxuIFxuQEAgLTcyOCw3ICs3MzMsNyBAQCBpbnQgeGZybV9pbnB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbmV4dGhkciwgX19iZTMyIHNwaSwgaW50IGVuY2FwX3R5cGUpXG4gXHR9IHdoaWxlICghZXJyKTtcbiBcbiBcdHJjdV9yZWFkX2xvY2soKTtcbi1cdGVyciA9IHhmcm1fcmN2X2NiKHNrYiwgZmFtaWx5LCB4LVx1MDAzZXR5cGUtXHUwMDNlcHJvdG8sIDApO1xuK1x0ZXJyID0geGZybV9yY3ZfY2Ioc2tiLCBmYW1pbHksIHhmcm1fcHJvdG8sIDApO1xuIFx0aWYgKGVycikge1xuIFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdFx0Z290byBkcm9wO1xuQEAgLTc1Myw3ICs3NTgsNyBAQCBpbnQgeGZybV9pbnB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbmV4dGhkciwgX19iZTMyIHNwaSwgaW50IGVuY2FwX3R5cGUpXG4gXHRcdFx0eGZybV9ncm8gPSB4by1cdTAwM2VmbGFncyBcdTAwMjYgWEZSTV9HUk87XG4gXG4gXHRcdGVyciA9IC1FQUZOT1NVUFBPUlQ7XG4tXHRcdGFmaW5mbyA9IHhmcm1fc3RhdGVfYWZpbmZvX2dldF9yY3UoeC1cdTAwM2Vwcm9wcy5mYW1pbHkpO1xuK1x0XHRhZmluZm8gPSB4ZnJtX3N0YXRlX2FmaW5mb19nZXRfcmN1KGZhbWlseSk7XG4gXHRcdGlmIChsaWtlbHkoYWZpbmZvKSlcbiBcdFx0XHRlcnIgPSBhZmluZm8tXHUwMDNldHJhbnNwb3J0X2ZpbmlzaChza2IsIHhmcm1fZ3JvIHx8IGFzeW5jKTtcbiBcdFx0aWYgKHhmcm1fZ3JvKSB7XG5AQCAtNzc2LDcgKzc4MSw3IEBAIGludCB4ZnJtX2lucHV0KHN0cnVjdCBza19idWZmICpza2IsIGludCBuZXh0aGRyLCBfX2JlMzIgc3BpLCBpbnQgZW5jYXBfdHlwZSlcbiBkcm9wOlxuIFx0aWYgKGFzeW5jKVxuIFx0XHRkZXZfcHV0KGRldik7XG4tXHR4ZnJtX3Jjdl9jYihza2IsIGZhbWlseSwgeCBcdTAwMjZcdTAwMjYgeC1cdTAwM2V0eXBlID8geC1cdTAwM2V0eXBlLVx1MDAzZXByb3RvIDogbmV4dGhkciwgLTEpO1xuK1x0eGZybV9yY3ZfY2Ioc2tiLCBmYW1pbHksIHhmcm1fcHJvdG8sIC0xKTtcbiBcdGtmcmVlX3NrYihza2IpO1xuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTgwMCwxMiArODA1LDE3IEBAIHN0YXRpYyB2b2lkIHhmcm1fdHJhbnNfcmVpbmplY3Qoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2dHJhbnMtXHUwMDNlcXVldWVfbG9jayk7XG4gXG4gXHRsb2NhbF9iaF9kaXNhYmxlKCk7XG4rXHRyY3VfcmVhZF9sb2NrKCk7XG4gXHR3aGlsZSAoKHNrYiA9IF9fc2tiX2RlcXVldWUoXHUwMDI2cXVldWUpKSkge1xuIFx0XHRzdHJ1Y3QgbmV0ICpuZXQgPSBYRlJNX1RSQU5TX1NLQl9DQihza2IpLVx1MDAzZW5ldDtcbitcdFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHNrYi1cdTAwM2VkZXY7XG4gXG4gXHRcdFhGUk1fVFJBTlNfU0tCX0NCKHNrYiktXHUwMDNlZmluaXNoKG5ldCwgTlVMTCwgc2tiKTtcbitcdFx0aWYgKGRldilcbitcdFx0XHRkZXZfcHV0KGRldik7XG4gXHRcdHB1dF9uZXQobmV0KTtcbiBcdH1cbitcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0bG9jYWxfYmhfZW5hYmxlKCk7XG4gfVxuIFxuQEAgLTgyMSwxMiArODMxLDE4IEBAIGludCB4ZnJtX3RyYW5zX3F1ZXVlX25ldChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRpZiAoc2tiX3F1ZXVlX2xlbihcdTAwMjZ0cmFucy1cdTAwM2VxdWV1ZSkgXHUwMDNlPSBSRUFEX09OQ0UobmV0X2hvdGRhdGEubWF4X2JhY2tsb2cpKVxuIFx0XHRyZXR1cm4gLUVOT0JVRlM7XG4gXG4rXHRpZiAoc2tiX2RzdChza2IpIFx1MDAyNlx1MDAyNiAhc2tiX2RzdF9mb3JjZShza2IpKVxuK1x0XHRyZXR1cm4gLUVIT1NUVU5SRUFDSDtcbitcbiBcdEJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IHhmcm1fdHJhbnNfY2IpIFx1MDAzZSBzaXplb2Yoc2tiLVx1MDAzZWNiKSk7XG4gXG4gXHRob2xkX25ldCA9IG1heWJlX2dldF9uZXQobmV0KTtcbiBcdGlmICghaG9sZF9uZXQpXG4gXHRcdHJldHVybiAtRU5PREVWO1xuIFxuK1x0aWYgKHNrYi1cdTAwM2VkZXYpXG4rXHRcdGRldl9ob2xkKHNrYi1cdTAwM2VkZXYpO1xuK1xuIFx0WEZSTV9UUkFOU19TS0JfQ0Ioc2tiKS1cdTAwM2VmaW5pc2ggPSBmaW5pc2g7XG4gXHRYRlJNX1RSQU5TX1NLQl9DQihza2IpLVx1MDAzZW5ldCA9IGhvbGRfbmV0O1xuIFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnRyYW5zLVx1MDAzZXF1ZXVlX2xvY2spO1xuZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1faXB0ZnMuYyBiL25ldC94ZnJtL3hmcm1faXB0ZnMuY1xuaW5kZXggNTk3YWVkZWFjMjZlYi4uNjkyMDk0MGEzNWI0OSAxMDA2NDRcbi0tLSBhL25ldC94ZnJtL3hmcm1faXB0ZnMuY1xuKysrIGIvbmV0L3hmcm0veGZybV9pcHRmcy5jXG5AQCAtNDE2LDYgKzQxNiwxNCBAQCBzdGF0aWMgYm9vbCBpcHRmc19za2JfY2FuX2FkZF9mcmFncyhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0aWYgKHNrYl9oYXNfZnJhZ19saXN0KHNrYikgfHwgc2tiLVx1MDAzZXBwX3JlY3ljbGUgIT0gd2Fsay1cdTAwM2VwcF9yZWN5Y2xlKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4rXHQvKiBSZWplY3QgYW4gQG9mZnNldCB0aGF0IGlzIGF0IG9yIGJleW9uZCB0aGUgZW5kIG9mIHRoZSB3YWxrJ3MgZGF0YVxuK1x0ICogYmVmb3JlIGNhbGxpbmcgaXB0ZnNfc2tiX3Jlc2V0X2ZyYWdfd2FsaygpLCB3aG9zZSBmcmFnbWVudC1hZHZhbmNlXG4rXHQgKiBsb29wIGlzIG90aGVyd2lzZSB1bmJvdW5kZWQgYW5kIHdvdWxkIGluZGV4IHBhc3Qgd2Fsay1cdTAwM2VmcmFnc1tdLlxuK1x0ICogVGhpcyBtaXJyb3JzIHRoZSBndWFyZCBhbHJlYWR5IHByZXNlbnQgaW4gaXB0ZnNfc2tiX2FkZF9mcmFncygpLlxuK1x0ICovXG4rXHRpZiAoIXdhbGstXHUwMDNlbnJfZnJhZ3MgfHwgb2Zmc2V0IFx1MDAzZT0gd2Fsay1cdTAwM2V0b3RhbCArIHdhbGstXHUwMDNlaW5pdGlhbF9vZmZzZXQpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbiBcdC8qIE1ha2Ugb2Zmc2V0IHJlbGF0aXZlIHRvIGN1cnJlbnQgZnJhZyBhZnRlciBzZXR0aW5nIHRoYXQgKi9cbiBcdG9mZnNldCA9IGlwdGZzX3NrYl9yZXNldF9mcmFnX3dhbGsod2Fsaywgb2Zmc2V0KTtcbiBcbkBAIC04MjAsOCArODI4LDggQEAgc3RhdGljIHUzMiBpcHRmc19yZWFzc2VtX2NvbnQoc3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcywgdTY0IHNlcSxcbiBcdFx0ICogYWxsb2NhdGUgYW4gaW4gcHJvZ3Jlc3Mgc2tiXG4gXHRcdCAqL1xuIFx0XHRpcHJlbWFpbiA9IF9faXB0ZnNfaXBsZW4oeHRmcy1cdTAwM2VyYV9ydW50KTtcbi1cdFx0aWYgKGlwcmVtYWluIFx1MDAzYyBzaXplb2YoeHRmcy1cdTAwM2VyYV9ydW50KSkge1xuLVx0XHRcdC8qIGxlbmd0aCBoYXMgdG8gYmUgYXQgbGVhc3QgcnVudHNpemUgbGFyZ2UgKi9cbitcdFx0aWYgKGlwcmVtYWluIFx1MDAzYyBfX2lwdGZzX2lwaGxlbih4dGZzLVx1MDAzZXJhX3J1bnQpKSB7XG4rXHRcdFx0LyogbGVuZ3RoIGhhcyB0byBiZSBhdCBsZWFzdCB0aGUgSVAgaGVhZGVyIHNpemUgKi9cbiBcdFx0XHRYRlJNX0lOQ19TVEFUUyh4c19uZXQoeHRmcy1cdTAwM2V4KSxcbiBcdFx0XHRcdCAgICAgICBMSU5VWF9NSUJfWEZSTUlOSVBURlNFUlJPUik7XG4gXHRcdFx0Z290byBhYmFuZG9uO1xuZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1fcG9saWN5LmMgYi9uZXQveGZybS94ZnJtX3BvbGljeS5jXG5pbmRleCA5MzJhMzEzYjk0NjBhLi41MTNjOWYyMjgzMzQ3IDEwMDY0NFxuLS0tIGEvbmV0L3hmcm0veGZybV9wb2xpY3kuY1xuKysrIGIvbmV0L3hmcm0veGZybV9wb2xpY3kuY1xuQEAgLTI3NzAsOSArMjc3MCwxMiBAQCBzdGF0aWMgc3RydWN0IGRzdF9lbnRyeSAqeGZybV9idW5kbGVfY3JlYXRlKHN0cnVjdCB4ZnJtX3BvbGljeSAqcG9saWN5LFxuIFx0eGRzdDAtXHUwMDNlcGF0aCA9IGRzdDtcbiBcbiBcdGVyciA9IC1FTk9ERVY7XG4tXHRkZXYgPSBkc3QtXHUwMDNlZGV2O1xuLVx0aWYgKCFkZXYpXG4rXHRyY3VfcmVhZF9sb2NrKCk7XG4rXHRkZXYgPSBkc3RfZGV2X3JjdShkc3QpO1xuK1x0aWYgKCFkZXYpIHtcbitcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXHRcdGdvdG8gZnJlZV9kc3Q7XG4rXHR9XG4gXG4gXHR4ZnJtX2luaXRfcGF0aCh4ZHN0MCwgZHN0LCBuZmhlYWRlcl9sZW4pO1xuIFx0eGZybV9pbml0X3BtdHUoYnVuZGxlLCBueCk7XG5AQCAtMjc4MCw4ICsyNzgzLDEwIEBAIHN0YXRpYyBzdHJ1Y3QgZHN0X2VudHJ5ICp4ZnJtX2J1bmRsZV9jcmVhdGUoc3RydWN0IHhmcm1fcG9saWN5ICpwb2xpY3ksXG4gXHRmb3IgKHhkc3RfcHJldiA9IHhkc3QwOyB4ZHN0X3ByZXYgIT0gKHN0cnVjdCB4ZnJtX2RzdCAqKWRzdDtcbiBcdCAgICAgeGRzdF9wcmV2ID0gKHN0cnVjdCB4ZnJtX2RzdCAqKSB4ZnJtX2RzdF9jaGlsZChcdTAwMjZ4ZHN0X3ByZXYtXHUwMDNldS5kc3QpKSB7XG4gXHRcdGVyciA9IHhmcm1fZmlsbF9kc3QoeGRzdF9wcmV2LCBkZXYsIGZsKTtcbi1cdFx0aWYgKGVycilcbitcdFx0aWYgKGVycikge1xuK1x0XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0XHRcdGdvdG8gZnJlZV9kc3Q7XG4rXHRcdH1cbiBcbiBcdFx0eGRzdF9wcmV2LVx1MDAzZXUuZHN0LmhlYWRlcl9sZW4gPSBoZWFkZXJfbGVuO1xuIFx0XHR4ZHN0X3ByZXYtXHUwMDNldS5kc3QudHJhaWxlcl9sZW4gPSB0cmFpbGVyX2xlbjtcbkBAIC0yNzg5LDYgKzI3OTQsNyBAQCBzdGF0aWMgc3RydWN0IGRzdF9lbnRyeSAqeGZybV9idW5kbGVfY3JlYXRlKHN0cnVjdCB4ZnJtX3BvbGljeSAqcG9saWN5LFxuIFx0XHR0cmFpbGVyX2xlbiAtPSB4ZHN0X3ByZXYtXHUwMDNldS5kc3QueGZybS1cdTAwM2Vwcm9wcy50cmFpbGVyX2xlbjtcbiBcdH1cbiBcbitcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0cmV0dXJuIFx1MDAyNnhkc3QwLVx1MDAzZXUuZHN0O1xuIFxuIHB1dF9zdGF0ZXM6XG5AQCAtMzA1OCwxMSArMzA2NCwxNSBAQCBzdGF0aWMgc3RydWN0IHhmcm1fZHN0ICp4ZnJtX2NyZWF0ZV9kdW1teV9idW5kbGUoc3RydWN0IG5ldCAqbmV0LFxuIFx0eGZybV9pbml0X3BhdGgoKHN0cnVjdCB4ZnJtX2RzdCAqKWRzdDEsIGRzdCwgMCk7XG4gXG4gXHRlcnIgPSAtRU5PREVWO1xuLVx0ZGV2ID0gZHN0LVx1MDAzZWRldjtcbi1cdGlmICghZGV2KVxuK1x0cmN1X3JlYWRfbG9jaygpO1xuK1x0ZGV2ID0gZHN0X2Rldl9yY3UoZHN0KTtcbitcdGlmICghZGV2KSB7XG4rXHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0XHRnb3RvIGZyZWVfZHN0O1xuK1x0fVxuIFxuIFx0ZXJyID0geGZybV9maWxsX2RzdCh4ZHN0LCBkZXYsIGZsKTtcbitcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0aWYgKGVycilcbiBcdFx0Z290byBmcmVlX2RzdDtcbiBcbmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX3N0YXRlLmMgYi9uZXQveGZybS94ZnJtX3N0YXRlLmNcbmluZGV4IDM2YTRmNjc5M2VkZWYuLmU0NWFhMWVkNWI5NjUgMTAwNjQ0XG4tLS0gYS9uZXQveGZybS94ZnJtX3N0YXRlLmNcbisrKyBiL25ldC94ZnJtL3hmcm1fc3RhdGUuY1xuQEAgLTIyNiw2ICsyMjYsNyBAQCBzdGF0aWMgc3RydWN0IHhmcm1fc3RhdGVfYWZpbmZvIF9fcmN1ICp4ZnJtX3N0YXRlX2FmaW5mb1tOUFJPVE9dO1xuIFxuIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soeGZybV9zdGF0ZV9nY19sb2NrKTtcbiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHhmcm1fc3RhdGVfZGV2X2djX2xvY2spO1xuK3N0YXRpYyBERUZJTkVfTVVURVgoeGZybV9zdGF0ZV9nY19tdXRleCk7XG4gXG4gaW50IF9feGZybV9zdGF0ZV9kZWxldGUoc3RydWN0IHhmcm1fc3RhdGUgKngpO1xuIFxuQEAgLTYzMiw4ICs2MzMsMTAgQEAgc3RhdGljIHZvaWQgeGZybV9zdGF0ZV9nY190YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcbiBcdHN5bmNocm9uaXplX3JjdSgpO1xuIFxuK1x0bXV0ZXhfbG9jayhcdTAwMjZ4ZnJtX3N0YXRlX2djX211dGV4KTtcbiBcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoeCwgdG1wLCBcdTAwMjZnY19saXN0LCBnY2xpc3QpXG4gXHRcdHhmcm1fc3RhdGVfZ2NfZGVzdHJveSh4KTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZ4ZnJtX3N0YXRlX2djX211dGV4KTtcbiB9XG4gXG4gc3RhdGljIGVudW0gaHJ0aW1lcl9yZXN0YXJ0IHhmcm1fdGltZXJfaGFuZGxlcihzdHJ1Y3QgaHJ0aW1lciAqbWUpXG5AQCAtODIzLDkgKzgyNiw5IEBAIGludCBfX3hmcm1fc3RhdGVfZGVsZXRlKHN0cnVjdCB4ZnJtX3N0YXRlICp4KVxuIFx0XHRpZiAoIWhsaXN0X3VuaGFzaGVkKFx1MDAyNngtXHUwMDNlYnlzZXEpKVxuIFx0XHRcdGhsaXN0X2RlbF9pbml0X3JjdShcdTAwMjZ4LVx1MDAzZWJ5c2VxKTtcbiBcdFx0aWYgKCFobGlzdF91bmhhc2hlZChcdTAwMjZ4LVx1MDAzZXN0YXRlX2NhY2hlKSlcbi1cdFx0XHRobGlzdF9kZWxfcmN1KFx1MDAyNngtXHUwMDNlc3RhdGVfY2FjaGUpO1xuK1x0XHRcdGhsaXN0X2RlbF9pbml0X3JjdShcdTAwMjZ4LVx1MDAzZXN0YXRlX2NhY2hlKTtcbiBcdFx0aWYgKCFobGlzdF91bmhhc2hlZChcdTAwMjZ4LVx1MDAzZXN0YXRlX2NhY2hlX2lucHV0KSlcbi1cdFx0XHRobGlzdF9kZWxfcmN1KFx1MDAyNngtXHUwMDNlc3RhdGVfY2FjaGVfaW5wdXQpO1xuK1x0XHRcdGhsaXN0X2RlbF9pbml0X3JjdShcdTAwMjZ4LVx1MDAzZXN0YXRlX2NhY2hlX2lucHV0KTtcbiBcbiBcdFx0aWYgKCFobGlzdF91bmhhc2hlZChcdTAwMjZ4LVx1MDAzZWJ5c3BpKSlcbiBcdFx0XHRobGlzdF9kZWxfaW5pdF9yY3UoXHUwMDI2eC1cdTAwM2VieXNwaSk7XG5AQCAtMTAwMCw2ICsxMDAzLDcgQEAgaW50IHhmcm1fZGV2X3N0YXRlX2ZsdXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCB0YXNrX3ZhbGlcbiBvdXQ6XG4gXHRzcGluX3VubG9ja19iaChcdTAwMjZuZXQtXHUwMDNleGZybS54ZnJtX3N0YXRlX2xvY2spO1xuIFxuK1x0bXV0ZXhfbG9jayhcdTAwMjZ4ZnJtX3N0YXRlX2djX211dGV4KTtcbiBcdHNwaW5fbG9ja19iaChcdTAwMjZ4ZnJtX3N0YXRlX2Rldl9nY19sb2NrKTtcbiByZXN0YXJ0X2djOlxuIFx0aGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh4LCB0bXAsIFx1MDAyNnhmcm1fc3RhdGVfZGV2X2djX2xpc3QsIGRldl9nY2xpc3QpIHtcbkBAIC0xMDE0LDYgKzEwMTgsNyBAQCBpbnQgeGZybV9kZXZfc3RhdGVfZmx1c2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIHRhc2tfdmFsaVxuIFxuIFx0fVxuIFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2eGZybV9zdGF0ZV9kZXZfZ2NfbG9jayk7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2eGZybV9zdGF0ZV9nY19tdXRleCk7XG4gXG4gXHR4ZnJtX2ZsdXNoX2djKCk7XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV91c2VyLmMgYi9uZXQveGZybS94ZnJtX3VzZXIuY1xuaW5kZXggNjI2NmE5MmNmMzAyMC4uYTI1ODdjN2U3OTZiNCAxMDA2NDRcbi0tLSBhL25ldC94ZnJtL3hmcm1fdXNlci5jXG4rKysgYi9uZXQveGZybS94ZnJtX3VzZXIuY1xuQEAgLTE4NzcsNyArMTg3Nyw2IEBAIHN0YXRpYyBpbnQgeGZybV9hbGxvY191c2Vyc3BpKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuIFx0c3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2tiLVx1MDAzZXNrKTtcbiBcdHN0cnVjdCB4ZnJtX3N0YXRlICp4O1xuIFx0c3RydWN0IHhmcm1fdXNlcnNwaV9pbmZvICpwO1xuLVx0c3RydWN0IHhmcm1fdHJhbnNsYXRvciAqeHRyO1xuIFx0c3RydWN0IHNrX2J1ZmYgKnJlc3Bfc2tiO1xuIFx0eGZybV9hZGRyZXNzX3QgKmRhZGRyO1xuIFx0aW50IGZhbWlseTtcbkBAIC0xOTQzLDE3ICsxOTQyLDYgQEAgc3RhdGljIGludCB4ZnJtX2FsbG9jX3VzZXJzcGkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuLVx0eHRyID0geGZybV9nZXRfdHJhbnNsYXRvcigpO1xuLVx0aWYgKHh0cikge1xuLVx0XHRlcnIgPSB4dHItXHUwMDNlYWxsb2NfY29tcGF0KHNrYiwgbmxtc2dfaGRyKHNrYikpO1xuLVxuLVx0XHR4ZnJtX3B1dF90cmFuc2xhdG9yKHh0cik7XG4tXHRcdGlmIChlcnIpIHtcbi1cdFx0XHRrZnJlZV9za2IocmVzcF9za2IpO1xuLVx0XHRcdGdvdG8gb3V0O1xuLVx0XHR9XG4tXHR9XG4tXG4gXHRlcnIgPSBubG1zZ191bmljYXN0KHhmcm1fbmV0X25sc2sobmV0LCBza2IpLCByZXNwX3NrYiwgTkVUTElOS19DQihza2IpLnBvcnRpZCk7XG4gXG4gb3V0OlxuQEAgLTMzMzcsNyArMzMyNSwxMSBAQCBzdGF0aWMgaW50IHhmcm1fc2VuZF9taWdyYXRlX3N0YXRlKHN0cnVjdCBuZXQgKm5ldCxcbiBcdFx0cmV0dXJuIGVycjtcbiBcdH1cbiBcbi1cdHJldHVybiB4ZnJtX25sbXNnX211bHRpY2FzdChuZXQsIHNrYiwgMCwgWEZSTU5MR1JQX01JR1JBVEUpO1xuK1x0cmN1X3JlYWRfbG9jaygpO1xuK1x0ZXJyID0geGZybV9ubG1zZ19tdWx0aWNhc3QobmV0LCBza2IsIDAsIFhGUk1OTEdSUF9NSUdSQVRFKTtcbitcdHJjdV9yZWFkX3VubG9jaygpO1xuK1xuK1x0cmV0dXJuIGVycjtcbiB9XG4gXG4gc3RhdGljIGludCB4ZnJtX2RvX21pZ3JhdGVfc3RhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxMzo1Mzo1NC4zNjY5ODk5MjRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MTQ2MjUxMTMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2ggU2VyaWVzKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggc2VyaWVzLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCB3ZSdyZSBkZWFsaW5nIHdpdGggc29tZXRoaW5nIHNpZ25pZmljYW50LCBnaXZlbiB0aGUgYnJlYWR0aCBvZiBmaWxlcyBtb2RpZmllZC4gTG9va2luZyBhdCB0aGUgZmlsZSBsaXN0IOKAkyBgbmV0L2lwdjQvZXNwNC5jYCwgYG5ldC9pcHY2L2VzcDYuY2AsIGBuZXQvaXB2Ni94ZnJtNl9vdXRwdXQuY2AsIGBuZXQveGZybS9lc3BpbnRjcC5jYCwgYG5ldC94ZnJtL3hmcm1faW5wdXQuY2AsIGBuZXQveGZybS94ZnJtX2lwdGZzLmNgLCBgbmV0L3hmcm0veGZybV9wb2xpY3kuY2AsIGBuZXQveGZybS94ZnJtX3N0YXRlLmNgLCBhbmQgYG5ldC94ZnJtL3hmcm1fdXNlci5jYCDigJMgdGhpcyBpcyB0b3VjaGluZyB0aGUgaGVhcnQgb2YgdGhlIG5ldHdvcmtpbmcgc3RhY2ssIHNwZWNpZmljYWxseSBJUHNlYyBhbmQgdGhlIFhGUk0gc3Vic3lzdGVtLiBUaGVzZSBhcmUgYWxsIGNyaXRpY2FsIGFyZWFzLlxuXG5HaXZlbiB0aGlzIHNjb3BlLCB0aGUgcG90ZW50aWFsIGF0dGFjayBzdXJmYWNlIGlzIGxhcmdlLiBXZSdyZSB0YWxraW5nIGNvcmUgbmV0d29ya2luZyBmdW5jdGlvbmFsaXR5LCBmdWxseSBleHBvc2VkIHRocm91Z2ggc3RhbmRhcmQgbmV0d29yayBzb2NrZXRzLCBuZXRsaW5rIGludGVyZmFjZXMgbGlrZSBYRlJNIG5ldGxpbmsgYW5kIFBGX0tFWSwgdmFyaW91cyB2aXJ0dWFsIG5ldHdvcmsgZGV2aWNlcywgdHVuL3RhcCBpbnRlcmZhY2VzLCBhbmQgZXZlbiBsb29wYmFjay4gVGhpcyBzY3JlYW1zIFwiV29ydGhGdXp6aW5nPXRydWVcIi4gVGhlIGV4cG9zdXJlIGlzIGhpZ2gsIGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGEgdnVsbmVyYWJpbGl0eSBoZXJlIGNvdWxkIGJlIHdpZGVzcHJlYWQuXG5cbk5vdywgbXkgbmV4dCBzdGVwIGlzIHRvIGRyaWxsIGRvd24gaW50byB0aGUgc3BlY2lmaWMgZnVuY3Rpb25zIGJlaW5nIG1vZGlmaWVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgS2NvbmZpZyBkZXBlbmRlbmNpZXMgdG8gaWRlbnRpZnkgZXhhY3RseSB3aGF0IGNvbmZpZ3VyYXRpb25zIHdvdWxkIGVuYWJsZSB0aGlzIGNvZGUgYW5kIGlkZW50aWZ5IHRoZSBsaWtlbHkgZm9jdXMgc3ltYm9scy4gSSB0aGluayBgZ3JlcHBlcmAgaXMgdGhlIHBlcmZlY3QgdG9vbCBmb3IgdGhpcywgb3IgSSdsbCBqdXN0IG1hbnVhbGx5IGV4YW1pbmUgdGhlIGZpbGVzIGZvciB0aGUgcmVsZXZhbnQgS2NvbmZpZyBvcHRpb25zIGFuZCBkZXRlcm1pbmUgdGhlIG1vc3QgYXBwcm9wcmlhdGUgRm9jdXNTeW1ib2xzIHRvIHRhcmdldC4gVGhpcyBpcyB3aGVyZSB0aGUgcmVhbCB3b3JrIGJlZ2lucy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODI2NSwiT3V0cHV0VG9rZW5zIjo2OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3MiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDEzOjUzOjU4LjUxMzI0Mzk5NVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzg3NDkzNzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElORVRfRVNQfGNvbmZpZyBYRlJNfGNvbmZpZyBJTkVUNl9FU1B8Y29uZmlnIE5FVF9LRVl8Y29uZmlnIFhGUk1fVVNFUnxjb25maWcgWEZSTV9JUFRGU3xjb25maWcgWEZSTV9FU1BJTlRDUFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L0tjb25maWc9MzM5PWNvbmZpZyBJTkVUX0FIXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTM1My1cXG5uZXQvaXB2NC9LY29uZmlnOjM1NDpjb25maWcgSU5FVF9FU1BcXG5uZXQvaXB2NC9LY29uZmlnLTM1NS1cXHR0cmlzdGF0ZSBcXFwiSVA6IEVTUCB0cmFuc2Zvcm1hdGlvblxcXCJcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctMzY4LVxcbm5ldC9pcHY0L0tjb25maWc6MzY5OmNvbmZpZyBJTkVUX0VTUF9PRkZMT0FEXFxubmV0L2lwdjQvS2NvbmZpZy0zNzAtXFx0dHJpc3RhdGUgXFxcIklQOiBFU1AgdHJhbnNmb3JtYXRpb24gb2ZmbG9hZFxcXCJcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctMzgxLVxcbm5ldC9pcHY0L0tjb25maWc6MzgyOmNvbmZpZyBJTkVUX0VTUElOVENQXFxubmV0L2lwdjQvS2NvbmZpZy0zODMtXFx0Ym9vbCBcXFwiSVA6IEVTUCBpbiBUQ1AgZW5jYXBzdWxhdGlvbiAoUkZDIDgyMjkpXFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZz00Nz1jb25maWcgSU5FVDZfQUhcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctNjEtXFxubmV0L2lwdjYvS2NvbmZpZzo2Mjpjb25maWcgSU5FVDZfRVNQXFxubmV0L2lwdjYvS2NvbmZpZy02My1cXHR0cmlzdGF0ZSBcXFwiSVB2NjogRVNQIHRyYW5zZm9ybWF0aW9uXFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy03Ni1cXG5uZXQvaXB2Ni9LY29uZmlnOjc3OmNvbmZpZyBJTkVUNl9FU1BfT0ZGTE9BRFxcbm5ldC9pcHY2L0tjb25maWctNzgtXFx0dHJpc3RhdGUgXFxcIklQdjY6IEVTUCB0cmFuc2Zvcm1hdGlvbiBvZmZsb2FkXFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy04OS1cXG5uZXQvaXB2Ni9LY29uZmlnOjkwOmNvbmZpZyBJTkVUNl9FU1BJTlRDUFxcbm5ldC9pcHY2L0tjb25maWctOTEtXFx0Ym9vbCBcXFwiSVB2NjogRVNQIGluIFRDUCBlbmNhcHN1bGF0aW9uIChSRkMgODIyOSlcXFwiXFxuLS1cXG5uZXQveGZybS9LY29uZmlnLTQtI1xcbm5ldC94ZnJtL0tjb25maWc6NTpjb25maWcgWEZSTVxcbm5ldC94ZnJtL0tjb25maWctNi1cXHRib29sXFxuLS1cXG5uZXQveGZybS9LY29uZmlnLTEwLVxcbm5ldC94ZnJtL0tjb25maWc6MTE6Y29uZmlnIFhGUk1fT0ZGTE9BRFxcbm5ldC94ZnJtL0tjb25maWctMTItXFx0Ym9vbFxcbm5ldC94ZnJtL0tjb25maWctMTMtXFxubmV0L3hmcm0vS2NvbmZpZzoxNDpjb25maWcgWEZSTV9BTEdPXFxubmV0L3hmcm0vS2NvbmZpZy0xNS1cXHR0cmlzdGF0ZVxcbi0tXFxubmV0L3hmcm0vS2NvbmZpZz0yMj1pZiBJTkVUXFxubmV0L3hmcm0vS2NvbmZpZzoyMzpjb25maWcgWEZSTV9VU0VSXFxubmV0L3hmcm0vS2NvbmZpZy0yNC1cXHR0cmlzdGF0ZSBcXFwiVHJhbnNmb3JtYXRpb24gdXNlciBjb25maWd1cmF0aW9uIGludGVyZmFjZVxcXCJcXG4tLVxcbm5ldC94ZnJtL0tjb25maWctMzEtXFxubmV0L3hmcm0vS2NvbmZpZzozMjpjb25maWcgWEZSTV9VU0VSX0NPTVBBVFxcbm5ldC94ZnJtL0tjb25maWctMzMtXFx0dHJpc3RhdGUgXFxcIkNvbXBhdGlibGUgQUJJIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQveGZybS9LY29uZmlnLTQyLVxcbm5ldC94ZnJtL0tjb25maWc6NDM6Y29uZmlnIFhGUk1fSU5URVJGQUNFXFxubmV0L3hmcm0vS2NvbmZpZy00NC1cXHR0cmlzdGF0ZSBcXFwiVHJhbnNmb3JtYXRpb24gdmlydHVhbCBpbnRlcmZhY2VcXFwiXFxuLS1cXG5uZXQveGZybS9LY29uZmlnLTUwLVxcbm5ldC94ZnJtL0tjb25maWc6NTE6Y29uZmlnIFhGUk1fU1VCX1BPTElDWVxcbm5ldC94ZnJtL0tjb25maWctNTItXFx0Ym9vbCBcXFwiVHJhbnNmb3JtYXRpb24gc3ViIHBvbGljeSBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L3hmcm0vS2NvbmZpZy02MC1cXG5uZXQveGZybS9LY29uZmlnOjYxOmNvbmZpZyBYRlJNX01JR1JBVEVcXG5uZXQveGZybS9LY29uZmlnLTYyLVxcdGJvb2wgXFxcIlRyYW5zZm9ybWF0aW9uIG1pZ3JhdGUgZGF0YWJhc2VcXFwiXFxuLS1cXG5uZXQveGZybS9LY29uZmlnLTcxLVxcbm5ldC94ZnJtL0tjb25maWc6NzI6Y29uZmlnIFhGUk1fU1RBVElTVElDU1xcbm5ldC94ZnJtL0tjb25maWctNzMtXFx0Ym9vbCBcXFwiVHJhbnNmb3JtYXRpb24gc3RhdGlzdGljc1xcXCJcXG4tLVxcbm5ldC94ZnJtL0tjb25maWctODMtIyBSRkMgODIyMSBsaXN0cyBhcyBNVVNUIGJlIGltcGxlbWVudGVkLlxcbm5ldC94ZnJtL0tjb25maWc6ODQ6Y29uZmlnIFhGUk1fQUhcXG5uZXQveGZybS9LY29uZmlnLTg1LVxcdHRyaXN0YXRlXFxuLS1cXG5uZXQveGZybS9LY29uZmlnLTkyLSMgYWxnb3JpdGhtcyB0aGF0IFJGQyA4MjIxIGxpc3RzIGFzIE1VU1QgYmUgaW1wbGVtZW50ZWQuXFxubmV0L3hmcm0vS2NvbmZpZzo5Mzpjb25maWcgWEZSTV9FU1BcXG5uZXQveGZybS9LY29uZmlnLTk0LVxcdHRyaXN0YXRlXFxuLS1cXG5uZXQveGZybS9LY29uZmlnLTEwNS1cXG5uZXQveGZybS9LY29uZmlnOjEwNjpjb25maWcgWEZSTV9JUENPTVBcXG5uZXQveGZybS9LY29uZmlnLTEwNy1cXHR0cmlzdGF0ZVxcbi0tXFxubmV0L3hmcm0vS2NvbmZpZy0xMTEtXFxubmV0L3hmcm0vS2NvbmZpZzoxMTI6Y29uZmlnIE5FVF9LRVlcXG5uZXQveGZybS9LY29uZmlnLTExMy1cXHR0cmlzdGF0ZSBcXFwiUEZfS0VZIHNvY2tldHMgKGRlcHJlY2F0ZWQpXFxcIlxcbi0tXFxubmV0L3hmcm0vS2NvbmZpZy0xMjQtXFxubmV0L3hmcm0vS2NvbmZpZzoxMjU6Y29uZmlnIE5FVF9LRVlfTUlHUkFURVxcbm5ldC94ZnJtL0tjb25maWctMTI2LVxcdGJvb2wgXFxcIlBGX0tFWSBNSUdSQVRFXFxcIlxcbi0tXFxubmV0L3hmcm0vS2NvbmZpZy0xNDAtXFxubmV0L3hmcm0vS2NvbmZpZzoxNDE6Y29uZmlnIFhGUk1fSVBURlNcXG5uZXQveGZybS9LY29uZmlnLTE0Mi1cXHR0cmlzdGF0ZSBcXFwiSVBzZWMgSVAtVEZTL0FHR0ZSQUcgKFJGQyA5MzQ3KSBlbmNhcHN1bGF0aW9uIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQveGZybS9LY29uZmlnLTE1Ni1cXG5uZXQveGZybS9LY29uZmlnOjE1Nzpjb25maWcgWEZSTV9FU1BJTlRDUFxcbm5ldC94ZnJtL0tjb25maWctMTU4LVxcdGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTM6NTM6NTguNjUxOTk5MTEyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQxMDQ0MjYzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBDb21waWxhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5SaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBtb2RpZmllZCBmaWxlcyBhcmUgYWN0dWFsbHkgYmVpbmcgaW50ZWdyYXRlZCBpbnRvIHRoZSBidWlsZCBwcm9jZXNzLiBUaGUgbW9zdCBsaWtlbHkgc3BvdHMgdG8gZmluZCB0aGF0IGluZm9ybWF0aW9uLCBvZiBjb3Vyc2UsIGFyZSB0aGUgTWFrZWZpbGVzLiBTcGVjaWZpY2FsbHksIHNpbmNlIHdlJ3JlIGRlYWxpbmcgd2l0aCBuZXR3b3JrIHN0YWNrIGNvZGUsIEknbGwgc3RhcnQgd2l0aCB0aGUgb2J2aW91cyBzdXNwZWN0czogYG5ldC9pcHY0YCwgYG5ldC9pcHY2YCwgYW5kIGBuZXQveGZybWAuIFRoZXNlIGFyZSB0aGUgY29yZSBzdWJkaXJlY3RvcmllcyBoYW5kbGluZyBJUHY0LCBJUHY2LCBhbmQgdGhlIFhGUk0gZnJhbWV3b3JrIHJlc3BlY3RpdmVseSwgc28gdGhlIGNvbXBpbGF0aW9uIHJ1bGVzIGZvciBmaWxlcyB3aXRoaW4gdGhvc2UgYXJlYXMgYXJlIHByb2JhYmx5IGRlZmluZWQgdGhlcmUuIEEgcXVpY2sgc2NhbiBvZiB0aG9zZSBNYWtlZmlsZXMgc2hvdWxkIHJldmVhbCBleGFjdGx5IGhvdyB0aGVzZSBtb2RpZmllZCBmaWxlcyBhcmUgYmVpbmcgY29tcGlsZWQsIGxpbmtlZCwgYW5kIGFueSBkZXBlbmRlbmNpZXMgdGhleSBtaWdodCBoYXZlIG9uIG90aGVyIG1vZHVsZXMgb3IgbGlicmFyaWVzLiBUaGF0J3MgdGhlIGZpcnN0IGFuZCBtb3N0IGNydWNpYWwgc3RlcCB0byBlbnN1cmUgdGhlIGNoYW5nZXMgYXJlIGNvcnJlY3RseSBpbnRlZ3JhdGVkIGFuZCBkb24ndCBpbnRyb2R1Y2UgYW55IGJ1aWxkLXRpbWUgaXNzdWVzLiBVbmRlcnN0YW5kaW5nIHRoZSBleGlzdGluZyBidWlsZCBzeXN0ZW0gaXMga2V5IHRvIG1ha2luZyBzdXJlIG15IGNoYW5nZXMgZml0IHNlYW1sZXNzbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMjQ3LCJPdXRwdXRUb2tlbnMiOjgxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTM6NTQ6MDEuMDYyNDQ1NjczWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkwNzQ1OTc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImVzcDRcXFxcLm98ZXNwNlxcXFwub3x4ZnJtNl9vdXRwdXRcXFxcLm98ZXNwaW50Y3BcXFxcLm98eGZybV9pbnB1dFxcXFwub3x4ZnJtX2lwdGZzXFxcXC5vfHhmcm1fcG9saWN5XFxcXC5vfHhmcm1fc3RhdGVcXFxcLm98eGZybV91c2VyXFxcXC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvTWFrZWZpbGU9MzU9b2JqLSQoQ09ORklHX0lORVRfQUgpICs9IGFoNC5vXFxubmV0L2lwdjQvTWFrZWZpbGU6MzY6b2JqLSQoQ09ORklHX0lORVRfRVNQKSArPSBlc3A0Lm9cXG5uZXQvaXB2NC9NYWtlZmlsZS0zNy1vYmotJChDT05GSUdfSU5FVF9FU1BfT0ZGTE9BRCkgKz0gZXNwNF9vZmZsb2FkLm9cXG4tLVxcbm5ldC9pcHY2L01ha2VmaWxlPTE4PWlwdjYtJChDT05GSUdfWEZSTSkgKz0geGZybTZfcG9saWN5Lm8geGZybTZfc3RhdGUubyB4ZnJtNl9pbnB1dC5vIFxcXFxcXG5uZXQvaXB2Ni9NYWtlZmlsZToxOTpcXHR4ZnJtNl9vdXRwdXQubyB4ZnJtNl9wcm90b2NvbC5vXFxubmV0L2lwdjYvTWFrZWZpbGUtMjAtaXB2Ni0kKENPTkZJR19ORVRGSUxURVIpICs9IG5ldGZpbHRlci5vXFxuLS1cXG5uZXQvaXB2Ni9NYWtlZmlsZT0zMD1vYmotJChDT05GSUdfSU5FVDZfQUgpICs9IGFoNi5vXFxubmV0L2lwdjYvTWFrZWZpbGU6MzE6b2JqLSQoQ09ORklHX0lORVQ2X0VTUCkgKz0gZXNwNi5vXFxubmV0L2lwdjYvTWFrZWZpbGUtMzItb2JqLSQoQ09ORklHX0lORVQ2X0VTUF9PRkZMT0FEKSArPSBlc3A2X29mZmxvYWQub1xcbi0tXFxubmV0L3hmcm0vTWFrZWZpbGU9MTI9ZW5kaWZcXG5uZXQveGZybS9NYWtlZmlsZS0xMy1cXG5uZXQveGZybS9NYWtlZmlsZToxNDpvYmotJChDT05GSUdfWEZSTSkgOj0geGZybV9wb2xpY3kubyB4ZnJtX3N0YXRlLm8geGZybV9oYXNoLm8gXFxcXFxcbm5ldC94ZnJtL01ha2VmaWxlOjE1OlxcdFxcdCAgICAgIHhmcm1faW5wdXQubyB4ZnJtX291dHB1dC5vIFxcXFxcXG5uZXQveGZybS9NYWtlZmlsZS0xNi1cXHRcXHQgICAgICB4ZnJtX3N5c2N0bC5vIHhmcm1fcmVwbGF5Lm8geGZybV9kZXZpY2UubyBcXFxcXFxuLS1cXG5uZXQveGZybS9NYWtlZmlsZT0xOT1vYmotJChDT05GSUdfWEZSTV9BTEdPKSArPSB4ZnJtX2FsZ28ub1xcbm5ldC94ZnJtL01ha2VmaWxlOjIwOm9iai0kKENPTkZJR19YRlJNX1VTRVIpICs9IHhmcm1fdXNlci5vXFxubmV0L3hmcm0vTWFrZWZpbGUtMjEtb2JqLSQoQ09ORklHX1hGUk1fVVNFUl9DT01QQVQpICs9IHhmcm1fY29tcGF0Lm9cXG4tLVxcbm5ldC94ZnJtL01ha2VmaWxlPTIzPW9iai0kKENPTkZJR19YRlJNX0lOVEVSRkFDRSkgKz0geGZybV9pbnRlcmZhY2Uub1xcbm5ldC94ZnJtL01ha2VmaWxlOjI0Om9iai0kKENPTkZJR19YRlJNX0lQVEZTKSArPSB4ZnJtX2lwdGZzLm9cXG5uZXQveGZybS9NYWtlZmlsZToyNTpvYmotJChDT05GSUdfWEZSTV9FU1BJTlRDUCkgKz0gZXNwaW50Y3Aub1xcbm5ldC94ZnJtL01ha2VmaWxlLTI2LW9iai0kKENPTkZJR19ERUJVR19JTkZPX0JURikgKz0geGZybV9zdGF0ZV9icGYub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxMzo1NDowMS4xNTMxOTcxODlaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDM2MTE2MDg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRoaW5nczpcblxuKipEaWdnaW5nIGludG8gdGhlIFhGUk0gQ29kZSoqXG5cbk9rYXksIHNvIEknbSByZXZpc2l0aW5nIHRoaXMgWEZSTSBjb2RlIGFnYWluLiBMZXQncyBtYWtlIHN1cmUgd2UncmUgbm90IG1pc3NpbmcgYW55dGhpbmcgcmVsYXRlZCB0byBtaWdyYXRpb24uIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhlIGBYRlJNX01JR1JBVEVgIG9wdGlvbiwgYW5kIHRoYXQgbWVhbnMgSSBuZWVkIHRvIGxvb2sgY2xvc2VseSBhdCBgeGZybV9zZW5kX21pZ3JhdGVfc3RhdGVgIGluIGB4ZnJtX3VzZXIuY2AuIEdvdHRhIG1ha2Ugc3VyZSB0aGUgbWlncmF0aW9uIHN0YXRlIGhhbmRsaW5nIGlzIHNvbGlkLCBlc3BlY2lhbGx5IHdpdGggYWxsIHRoZSBudWFuY2VzIHdlJ3ZlIHNlZW4gaW4gdGhlIHBhc3QuIEFuZCBJIGNhbid0IGZvcmdldCBhYm91dCBFU1AgaW4gVENQIG1vZGUuLi4gSSBzaG91bGQgcmV2aWV3IGBYRlJNX0VTUElOVENQYCBhbmQgdGhlIHJlbGV2YW50IGBzZWxlY3RzYCBzdGF0ZW1lbnRzIGluIHRoZSBLY29uZmlnIGZpbGUuIEdvdHRhIGJlIGRpbGlnZW50IGFib3V0IGRlcGVuZGVuY2llcyBhbmQgZW5zdXJlIGFsbCB0aGUgcmlnaHQgY29tcG9uZW50cyBhcmUgZW5hYmxlZCBvciBkaXNhYmxlZCBjb3JyZWN0bHkuIEdvdHRhIG1ha2Ugc3VyZSBub3RoaW5nIGJyZWFrcyBkdXJpbmcgYSByZS1jb21waWxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTIwMywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDEzOjU0OjAzLjU4OTMxNTQ3NVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozOTEzODY1MjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiSU5FVF9FU1BJTlRDUHxJTkVUNl9FU1BJTlRDUFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L0tjb25maWc9MzY5PWNvbmZpZyBJTkVUX0VTUF9PRkZMT0FEXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTM4MS1cXG5uZXQvaXB2NC9LY29uZmlnOjM4Mjpjb25maWcgSU5FVF9FU1BJTlRDUFxcbm5ldC9pcHY0L0tjb25maWctMzgzLVxcdGJvb2wgXFxcIklQOiBFU1AgaW4gVENQIGVuY2Fwc3VsYXRpb24gKFJGQyA4MjI5KVxcXCJcXG4tLVxcbm5ldC9pcHY0L2VzcDQuYz05OT1zdGF0aWMgdm9pZCBlc3Bfc3NnX3VucmVmKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCB2b2lkICp0bXAsIHN0cnVjdCBza19idWZmICpza2IsIGJvb2wgYWxyZWFkeV91bnJlZilcXG4tLVxcbm5ldC9pcHY0L2VzcDQuYy0xMjQtXFxubmV0L2lwdjQvZXNwNC5jOjEyNTojaWZkZWYgQ09ORklHX0lORVRfRVNQSU5UQ1BcXG5uZXQvaXB2NC9lc3A0LmMtMTI2LXN0YXRpYyBzdHJ1Y3Qgc29jayAqZXNwX2ZpbmRfdGNwX3NrKHN0cnVjdCB4ZnJtX3N0YXRlICp4KVxcbi0tXFxubmV0L2lwdjQvZXNwNC5jPTMwOT1zdGF0aWMgc3RydWN0IGlwX2VzcF9oZHIgKmVzcF9vdXRwdXRfdWRwX2VuY2FwKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2NC9lc3A0LmMtMzM4LVxcbm5ldC9pcHY0L2VzcDQuYzozMzk6I2lmZGVmIENPTkZJR19JTkVUX0VTUElOVENQXFxubmV0L2lwdjQvZXNwNC5jLTM0MC1zdGF0aWMgc3RydWN0IGlwX2VzcF9oZHIgKmVzcF9vdXRwdXRfdGNwX2VuY2FwKHN0cnVjdCB4ZnJtX3N0YXRlICp4LFxcbi0tXFxubmV0L2lwdjQvZXNwNC5jPTExMTg9c3RhdGljIGludCBlc3BfaW5pdF9zdGF0ZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxubmV0L2lwdjQvZXNwNC5jLTExNTYtXFx0XFx0XFx0YnJlYWs7XFxubmV0L2lwdjQvZXNwNC5jOjExNTc6I2lmZGVmIENPTkZJR19JTkVUX0VTUElOVENQXFxubmV0L2lwdjQvZXNwNC5jLTExNTgtXFx0XFx0Y2FzZSBUQ1BfRU5DQVBfRVNQSU5UQ1A6XFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnPTc3PWNvbmZpZyBJTkVUNl9FU1BfT0ZGTE9BRFxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy04OS1cXG5uZXQvaXB2Ni9LY29uZmlnOjkwOmNvbmZpZyBJTkVUNl9FU1BJTlRDUFxcbm5ldC9pcHY2L0tjb25maWctOTEtXFx0Ym9vbCBcXFwiSVB2NjogRVNQIGluIFRDUCBlbmNhcHN1bGF0aW9uIChSRkMgODIyOSlcXFwiXFxuLS1cXG5uZXQvaXB2Ni9lc3A2LmM9MTE2PXN0YXRpYyB2b2lkIGVzcF9zc2dfdW5yZWYoc3RydWN0IHhmcm1fc3RhdGUgKngsIHZvaWQgKnRtcCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgYm9vbCBhbHJlYWR5X3VucmVmKVxcbi0tXFxubmV0L2lwdjYvZXNwNi5jLTE0MS1cXG5uZXQvaXB2Ni9lc3A2LmM6MTQyOiNpZmRlZiBDT05GSUdfSU5FVDZfRVNQSU5UQ1BcXG5uZXQvaXB2Ni9lc3A2LmMtMTQzLXN0YXRpYyBzdHJ1Y3Qgc29jayAqZXNwNl9maW5kX3RjcF9zayhzdHJ1Y3QgeGZybV9zdGF0ZSAqeClcXG4tLVxcbm5ldC9pcHY2L2VzcDYuYz0zNDY9c3RhdGljIHN0cnVjdCBpcF9lc3BfaGRyICplc3A2X291dHB1dF91ZHBfZW5jYXAoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9pcHY2L2VzcDYuYy0zNjktXFxubmV0L2lwdjYvZXNwNi5jOjM3MDojaWZkZWYgQ09ORklHX0lORVQ2X0VTUElOVENQXFxubmV0L2lwdjYvZXNwNi5jLTM3MS1zdGF0aWMgc3RydWN0IGlwX2VzcF9oZHIgKmVzcDZfb3V0cHV0X3RjcF9lbmNhcChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCxcXG4tLVxcbm5ldC9pcHY2L2VzcDYuYz0xMTU2PXN0YXRpYyBpbnQgZXNwNl9pbml0X3N0YXRlKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuLS1cXG5uZXQvaXB2Ni9lc3A2LmMtMTIwNC1cXHRcXHRcXHRicmVhaztcXG5uZXQvaXB2Ni9lc3A2LmM6MTIwNTojaWZkZWYgQ09ORklHX0lORVQ2X0VTUElOVENQXFxubmV0L2lwdjYvZXNwNi5jLTEyMDYtXFx0XFx0Y2FzZSBUQ1BfRU5DQVBfRVNQSU5UQ1A6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDEzOjU0OjAzLjk4MDcwNjEyMloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0MzI4MzA1NDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIEtjb25maWcgZGVmaW5pdGlvbnM6XG5cbioqQW5hbHl6aW5nIEVTUCBpbiBUQ1AgS2NvbmZpZyBPcHRpb25zKipcblxuT2theSwgdGltZSB0byBkaXZlIGludG8gdGhlIEtjb25maWcgb3B0aW9ucyByZWxhdGVkIHRvIEVTUCBvdmVyIFRDUC4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHRoZXNlIGFyZSBkZWZpbmVkIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgaG93IHRoZXkgaW50ZXJyZWxhdGUuIEknbSBmb2N1c2luZyBvbiBgSU5FVF9FU1BJTlRDUGAsIGBJTkVUNl9FU1BJTlRDUGAsIGFuZCBgWEZSTV9FU1BJTlRDUGAuIEknbSBpbW1lZGlhdGVseSB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zIGZvciBJUHY0IHZzLiBJUHY2IHN1cHBvcnQsIGhlbmNlIG15IGludGVyZXN0IGluIHRoZSBgSU5FVGAgcHJlZml4ZXMsIHdoaWNoIGluZGljYXRlIHRoaXMuIFRoZSBgWEZSTWAgcHJlZml4IHRlbGxzIG1lIHRoaXMgb3B0aW9uIGlzIHJlbGF0ZWQgdG8gdGhlIFhGUk0gZnJhbWV3b3JrIGFuZCBob3cgaXQgaW50ZXJmYWNlcyB3aXRoIEVTUC1vdmVyLVRDUCBpbXBsZW1lbnRhdGlvbnMuIEkgd2FudCB0byBzZWUgaG93IHRoZSBidWlsZCBzeXN0ZW0gaW50ZWdyYXRlcyBvciBjb25kaXRpb25hbGl6ZXMgYmFzZWQgb24gdGhlc2Ugb3B0aW9ucy4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMgYW5kIHNlbGVjdCBzdGF0ZW1lbnRzIHRvIHNlZSB0aGUgaW1wbGljYXRpb25zIG9mIGVhY2ggb3B0aW9uIGJlaW5nIGVuYWJsZWQgb3IgZGlzYWJsZWQuIEl0IHdpbGwgYmUgaGVscGZ1bCB0byBpZGVudGlmeSBhbnkgZGlmZmVyZW5jZXMgb3Igc2ltaWxhcml0aWVzIGluIHRoZSBpbXBsZW1lbnRhdGlvbnMgYmFzZWQgb24gd2hldGhlciBvciBub3QgSVB2NCBvciBJUHY2IGlzIHNlbGVjdGVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGV0aGVyIHRoZXNlIG9wdGlvbnMgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSwgb3IgaWYgaXQgaXMgcG9zc2libGUgdG8gY29uZmlndXJlLCBzYXksIGBJTkVUX0VTUElOVENQYCB3aXRoIGBJTkVUNl9FU1BJTlRDUGAgb3IgYFhGUk1fRVNQSU5UQ1BgLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBwb3NzaWJsZSBidWlsZCBjb25maWd1cmF0aW9ucyBhbmQgd2hldGhlciB0aGUgb3B0aW9ucyBhcmUgaW50ZW5kZWQgZm9yIHNwZWNpZmljIHVzZSBjYXNlcyBvciBhcmNoaXRlY3R1cmVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjQxMCwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDEzOjU0OjA2LjQxMzUzODY5OVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njk1OTQ3MTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiSU5FVF9FU1BJTlRDUHxJTkVUNl9FU1BJTlRDUHxYRlJNX0VTUElOVENQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvS2NvbmZpZz0zNjk9Y29uZmlnIElORVRfRVNQX09GRkxPQURcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctMzgxLVxcbm5ldC9pcHY0L0tjb25maWc6MzgyOmNvbmZpZyBJTkVUX0VTUElOVENQXFxubmV0L2lwdjQvS2NvbmZpZy0zODMtXFx0Ym9vbCBcXFwiSVA6IEVTUCBpbiBUQ1AgZW5jYXBzdWxhdGlvbiAoUkZDIDgyMjkpXFxcIlxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy0zODYtXFx0c2VsZWN0IE5FVF9TT0NLX01TR1xcbm5ldC9pcHY0L0tjb25maWc6Mzg3OlxcdHNlbGVjdCBYRlJNX0VTUElOVENQXFxubmV0L2lwdjQvS2NvbmZpZy0zODgtXFx0aGVscFxcbi0tXFxubmV0L2lwdjQvZXNwNC5jPTk5PXN0YXRpYyB2b2lkIGVzcF9zc2dfdW5yZWYoc3RydWN0IHhmcm1fc3RhdGUgKngsIHZvaWQgKnRtcCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgYm9vbCBhbHJlYWR5X3VucmVmKVxcbi0tXFxubmV0L2lwdjQvZXNwNC5jLTEyNC1cXG5uZXQvaXB2NC9lc3A0LmM6MTI1OiNpZmRlZiBDT05GSUdfSU5FVF9FU1BJTlRDUFxcbm5ldC9pcHY0L2VzcDQuYy0xMjYtc3RhdGljIHN0cnVjdCBzb2NrICplc3BfZmluZF90Y3Bfc2soc3RydWN0IHhmcm1fc3RhdGUgKngpXFxuLS1cXG5uZXQvaXB2NC9lc3A0LmM9MzA5PXN0YXRpYyBzdHJ1Y3QgaXBfZXNwX2hkciAqZXNwX291dHB1dF91ZHBfZW5jYXAoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9pcHY0L2VzcDQuYy0zMzgtXFxubmV0L2lwdjQvZXNwNC5jOjMzOTojaWZkZWYgQ09ORklHX0lORVRfRVNQSU5UQ1BcXG5uZXQvaXB2NC9lc3A0LmMtMzQwLXN0YXRpYyBzdHJ1Y3QgaXBfZXNwX2hkciAqZXNwX291dHB1dF90Y3BfZW5jYXAoc3RydWN0IHhmcm1fc3RhdGUgKngsXFxuLS1cXG5uZXQvaXB2NC9lc3A0LmM9MTExOD1zdGF0aWMgaW50IGVzcF9pbml0X3N0YXRlKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuLS1cXG5uZXQvaXB2NC9lc3A0LmMtMTE1Ni1cXHRcXHRcXHRicmVhaztcXG5uZXQvaXB2NC9lc3A0LmM6MTE1NzojaWZkZWYgQ09ORklHX0lORVRfRVNQSU5UQ1BcXG5uZXQvaXB2NC9lc3A0LmMtMTE1OC1cXHRcXHRjYXNlIFRDUF9FTkNBUF9FU1BJTlRDUDpcXG4tLVxcbm5ldC9pcHY2L0tjb25maWc9Nzc9Y29uZmlnIElORVQ2X0VTUF9PRkZMT0FEXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTg5LVxcbm5ldC9pcHY2L0tjb25maWc6OTA6Y29uZmlnIElORVQ2X0VTUElOVENQXFxubmV0L2lwdjYvS2NvbmZpZy05MS1cXHRib29sIFxcXCJJUHY2OiBFU1AgaW4gVENQIGVuY2Fwc3VsYXRpb24gKFJGQyA4MjI5KVxcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctOTQtXFx0c2VsZWN0IE5FVF9TT0NLX01TR1xcbm5ldC9pcHY2L0tjb25maWc6OTU6XFx0c2VsZWN0IFhGUk1fRVNQSU5UQ1BcXG5uZXQvaXB2Ni9LY29uZmlnLTk2LVxcdGhlbHBcXG4tLVxcbm5ldC9pcHY2L2VzcDYuYz0xMTY9c3RhdGljIHZvaWQgZXNwX3NzZ191bnJlZihzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgdm9pZCAqdG1wLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBib29sIGFscmVhZHlfdW5yZWYpXFxuLS1cXG5uZXQvaXB2Ni9lc3A2LmMtMTQxLVxcbm5ldC9pcHY2L2VzcDYuYzoxNDI6I2lmZGVmIENPTkZJR19JTkVUNl9FU1BJTlRDUFxcbm5ldC9pcHY2L2VzcDYuYy0xNDMtc3RhdGljIHN0cnVjdCBzb2NrICplc3A2X2ZpbmRfdGNwX3NrKHN0cnVjdCB4ZnJtX3N0YXRlICp4KVxcbi0tXFxubmV0L2lwdjYvZXNwNi5jPTM0Nj1zdGF0aWMgc3RydWN0IGlwX2VzcF9oZHIgKmVzcDZfb3V0cHV0X3VkcF9lbmNhcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjYvZXNwNi5jLTM2OS1cXG5uZXQvaXB2Ni9lc3A2LmM6MzcwOiNpZmRlZiBDT05GSUdfSU5FVDZfRVNQSU5UQ1BcXG5uZXQvaXB2Ni9lc3A2LmMtMzcxLXN0YXRpYyBzdHJ1Y3QgaXBfZXNwX2hkciAqZXNwNl9vdXRwdXRfdGNwX2VuY2FwKHN0cnVjdCB4ZnJtX3N0YXRlICp4LFxcbi0tXFxubmV0L2lwdjYvZXNwNi5jPTExNTY9c3RhdGljIGludCBlc3A2X2luaXRfc3RhdGUoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbm5ldC9pcHY2L2VzcDYuYy0xMjA0LVxcdFxcdFxcdGJyZWFrO1xcbm5ldC9pcHY2L2VzcDYuYzoxMjA1OiNpZmRlZiBDT05GSUdfSU5FVDZfRVNQSU5UQ1BcXG5uZXQvaXB2Ni9lc3A2LmMtMTIwNi1cXHRcXHRjYXNlIFRDUF9FTkNBUF9FU1BJTlRDUDpcXG4tLVxcbm5ldC94ZnJtL0tjb25maWc9MTQxPWNvbmZpZyBYRlJNX0lQVEZTXFxuLS1cXG5uZXQveGZybS9LY29uZmlnLTE1Ni1cXG5uZXQveGZybS9LY29uZmlnOjE1Nzpjb25maWcgWEZSTV9FU1BJTlRDUFxcbm5ldC94ZnJtL0tjb25maWctMTU4LVxcdGJvb2xcXG4tLVxcbm5ldC94ZnJtL01ha2VmaWxlPTI0PW9iai0kKENPTkZJR19YRlJNX0lQVEZTKSArPSB4ZnJtX2lwdGZzLm9cXG5uZXQveGZybS9NYWtlZmlsZToyNTpvYmotJChDT05GSUdfWEZSTV9FU1BJTlRDUCkgKz0gZXNwaW50Y3Aub1xcbm5ldC94ZnJtL01ha2VmaWxlLTI2LW9iai0kKENPTkZJR19ERUJVR19JTkZPX0JURikgKz0geGZybV9zdGF0ZV9icGYub1xcbi0tXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy00NC0jZW5kaWZcXG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjQ1OiNpZmRlZiBDT05GSUdfWEZSTV9FU1BJTlRDUFxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtNDYtI2luY2x1ZGUgXFx1MDAzY25ldC9lc3BpbnRjcC5oXFx1MDAzZVxcbi0tXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYz00NDE0PXZvaWQgX19pbml0IHhmcm1faW5pdCh2b2lkKVxcbi0tXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy00NDIzLVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6NDQyNDojaWZkZWYgQ09ORklHX1hGUk1fRVNQSU5UQ1BcXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTQ0MjUtXFx0ZXNwaW50Y3BfaW5pdCgpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxMzo1NDowNi40ODMxNDE3MzhaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTAyMjIyOTUwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqQ2hlY2tpbmcgWEZSTV9NSUdSQVRFIEltcGxlbWVudGF0aW9uIERldGFpbHMqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBYRlJNIG1pZ3JhdGlvbiBzdXBwb3J0LiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IHRoaXMgaXMgaGFuZGxlZCwgc28gZmlyc3QgdGhpbmdzIGZpcnN0OiBJJ2xsIGhlYWQgb3ZlciB0byBgbmV0L3hmcm0vS2NvbmZpZ2AgdG8gc2VlIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbiBmb3IgYFhGUk1fTUlHUkFURWAuIEkgd2FudCB0byBxdWlja2x5IGNvbmZpcm0gd2hhdCBkZXBlbmRlbmNpZXMgaXQgaGFzLCBpZiBhbnksIGFuZCB3aGF0IGZlYXR1cmVzIGl0IGVuYWJsZXMgb3IgZGlzYWJsZXMuIEEgcXVpY2sgc2NhbiB0aGVyZSB3aWxsIGdpdmUgbWUgdGhlIGhpZ2gtbGV2ZWwgcGljdHVyZS5cblxuVGhlbiwgdG8gdW5kZXJzdGFuZCB0aGUgbml0dHktZ3JpdHR5IG9mIHRoZSBpbXBsZW1lbnRhdGlvbiwgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRpdmUgaW50byBgeGZybV91c2VyLmNgLiBUaGlzIGlzIHdoZXJlIGFsbCB0aGUgdXNlci1zcGFjZSBpbnRlcmFjdGlvbiBmb3IgWEZSTSB0eXBpY2FsbHkgaGFwcGVucywgYW5kIHdoZXJlIHRoZSBtaWdyYXRpb24tcmVsYXRlZCBjb2RlIHNob3VsZCBiZS4gSSdsbCBiZSBsb29raW5nIGZvciB0aGUgc3BlY2lmaWMgZnVuY3Rpb25zIGRlYWxpbmcgd2l0aCBYRlJNIHN0YXRlcyBiZWluZyBtb3ZlZCBiZXR3ZWVuIGludGVyZmFjZXMgb3IgbmFtZXNwYWNlcyBhbmQgc2VlIGhvdyB0aGUgbWlncmF0aW9uIGl0c2VsZiBpcyBhY3R1YWxseSB0cmlnZ2VyZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkYXRhIHN0cnVjdHVyZXMgYmVpbmcgbW92ZWQsIHRoZSBsb2NraW5nIGNvbnNpZGVyYXRpb25zLCBhbmQgYW55IGVycm9yIGhhbmRsaW5nIGluIHBsYWNlLiBJIGFsc28gd2FudCB0byBkb3VibGUtY2hlY2sgdGhhdCB0aGlzIGlzIGltcGxlbWVudGVkIGNvcnJlY3RseSBmb3IgYm90aCB0aGUgaW5ncmVzcyBhbmQgZWdyZXNzIHBhdGhzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDE2MSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDEzOjU0OjExLjUwNTM3NDc0N1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjgzMzcwNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiWEZSTV9NSUdSQVRFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0vS2NvbmZpZz01MT1jb25maWcgWEZSTV9TVUJfUE9MSUNZXFxuLS1cXG5uZXQveGZybS9LY29uZmlnLTYwLVxcbm5ldC94ZnJtL0tjb25maWc6NjE6Y29uZmlnIFhGUk1fTUlHUkFURVxcbm5ldC94ZnJtL0tjb25maWctNjItXFx0Ym9vbCBcXFwiVHJhbnNmb3JtYXRpb24gbWlncmF0ZSBkYXRhYmFzZVxcXCJcXG4tLVxcbm5ldC94ZnJtL0tjb25maWc9MTI1PWNvbmZpZyBORVRfS0VZX01JR1JBVEVcXG4tLVxcbm5ldC94ZnJtL0tjb25maWctMTI3LVxcdGRlcGVuZHMgb24gTkVUX0tFWVxcbm5ldC94ZnJtL0tjb25maWc6MTI4OlxcdHNlbGVjdCBYRlJNX01JR1JBVEVcXG5uZXQveGZybS9LY29uZmlnLTEyOS1cXHRoZWxwXFxuLS1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jPTQ0OTQ9RVhQT1JUX1NZTUJPTF9HUEwoeGZybV9hdWRpdF9wb2xpY3lfZGVsZXRlKTtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtNDQ5Ni1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjQ0OTc6I2lmZGVmIENPTkZJR19YRlJNX01JR1JBVEVcXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTQ0OTgtc3RhdGljIHN0cnVjdCB4ZnJtX3BvbGljeSAqeGZybV9taWdyYXRlX3BvbGljeV9maW5kKGNvbnN0IHN0cnVjdCB4ZnJtX3NlbGVjdG9yICpzZWwsXFxuLS1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmM9MTk1ND1FWFBPUlRfU1lNQk9MKHhmcm1fc3RhdGVfYWRkKTtcXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMTk1NS1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmM6MTk1NjojaWZkZWYgQ09ORklHX1hGUk1fTUlHUkFURVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0xOTU3LXN0YXRpYyBpbmxpbmUgaW50IGNsb25lX3NlY3VyaXR5KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3QgeGZybV9zZWNfY3R4ICpzZWN1cml0eSlcXG4tLVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYz0xOTgxPXN0YXRpYyBzdHJ1Y3QgeGZybV9zdGF0ZSAqeGZybV9zdGF0ZV9jbG9uZV9hbmRfc2V0dXAoc3RydWN0IHhmcm1fc3RhdGUgKm9yaWcsXFxuLS1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMTk5MC1cXHRpZiAobS1cXHUwMDNlbXNnX3R5cGUgPT0gWEZSTV9NU0dfTUlHUkFURV9TVEFURSkge1xcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzoxOTkxOlxcdFxcdGlmIChtLVxcdTAwM2VmbGFncyBcXHUwMDI2IFhGUk1fTUlHUkFURV9TVEFURV9VUERBVEVfSDJIX1NFTCkge1xcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0xOTkyLVxcdFxcdFxcdHU4IHByZWZpeGxlbiA9IChtLVxcdTAwM2VuZXdfZmFtaWx5ID09IEFGX0lORVQ2KSA/IDEyOCA6IDMyO1xcbi0tXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jPTI4ODk9RVhQT1JUX1NZTUJPTChrbV9wb2xpY3lfZXhwaXJlZCk7XFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTI4OTAtXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjI4OTE6I2lmZGVmIENPTkZJR19YRlJNX01JR1JBVEVcXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMjg5Mi1pbnQga21fbWlncmF0ZShjb25zdCBzdHJ1Y3QgeGZybV9zZWxlY3RvciAqc2VsLCB1OCBkaXIsIHU4IHR5cGUsXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYz0xMjA0PXN0YXRpYyB2b2lkIHhzb190b194dW9faWZpbmRleChjb25zdCBzdHJ1Y3QgeGZybV9kZXZfb2ZmbG9hZCAqeHNvLCBpbnQgaWZpbmRleCxcXG4tLVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTEyMTMtXFxubmV0L3hmcm0veGZybV91c2VyLmM6MTIxNDojaWZkZWYgQ09ORklHX1hGUk1fTUlHUkFURVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTEyMTUtc3RhdGljIHZvaWQgeHNvX3RvX3h1byhjb25zdCBzdHJ1Y3QgeGZybV9kZXZfb2ZmbG9hZCAqeHNvLFxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmM9MzAzMD1zdGF0aWMgaW50IHhmcm1fYWRkX2FjcXVpcmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zMTA0LVxcbm5ldC94ZnJtL3hmcm1fdXNlci5jOjMxMDU6I2lmZGVmIENPTkZJR19YRlJNX01JR1JBVEVcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zMTA2LXN0YXRpYyB2b2lkIGNvcHlfZnJvbV91c2VyX21pZ3JhdGVfc3RhdGUoc3RydWN0IHhmcm1fbWlncmF0ZSAqbWEsXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYz0zMzM1PXN0YXRpYyBpbnQgeGZybV9kb19taWdyYXRlX3N0YXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMzM1NS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzozMzU2OlxcdGlmICh1bS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiB+WEZSTV9NSUdSQVRFX1NUQVRFX0tOT1dOX0ZMQUdTKSB7XFxubmV0L3hmcm0veGZybV91c2VyLmMtMzM1Ny1cXHRcXHROTF9TRVRfRVJSX01TR19GTVQoZXh0YWNrLCBcXFwiVW5rbm93biBmbGFnczogMHgleFxcXCIsXFxubmV0L3hmcm0veGZybV91c2VyLmM6MzM1ODpcXHRcXHRcXHRcXHQgICB1bS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiB+WEZSTV9NSUdSQVRFX1NUQVRFX0tOT1dOX0ZMQUdTKTtcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zMzU5LVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMzM2NS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzozMzY2OlxcdGlmICghKHVtLVxcdTAwM2VmbGFncyBcXHUwMDI2IFhGUk1fTUlHUkFURV9TVEFURV9VUERBVEVfSDJIX1NFTCkpIHtcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zMzY3LVxcdFxcdGVyciA9IHZlcmlmeV9zZWxlY3Rvcl9wcmVmaXhsZW4odW0tXFx1MDAzZW5ld19zZWwuZmFtaWx5LFxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMzM4Mi1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzozMzgzOlxcdGlmICh1bS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBYRlJNX01JR1JBVEVfU1RBVEVfVVBEQVRFX0gySF9TRUwpIHtcXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zMzg0LVxcdFxcdHU4IHByZWZpeGxlbiA9ICh4LVxcdTAwM2Vwcm9wcy5mYW1pbHkgPT0gQUZfSU5FVDYpID8gMTI4IDogMzI7XFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYy0zNDI1LVxcdH0gZWxzZSB7XFxubmV0L3hmcm0veGZybV91c2VyLmM6MzQyNjpcXHRcXHRib29sIGluaGVyaXRfb2ZmbG9hZCA9ICEodW0tXFx1MDAzZWZsYWdzIFxcdTAwMjYgWEZSTV9NSUdSQVRFX1NUQVRFX0NMRUFSX09GRkxPQUQpO1xcbm5ldC94ZnJtL3hmcm1fdXNlci5jLTM0MjctXFxuLS1cXG5uZXQveGZybS94ZnJtX3VzZXIuYz0zNTI0PXN0YXRpYyBpbnQgeGZybV9kb19taWdyYXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbi0tXFxubmV0L3hmcm0veGZybV91c2VyLmMtMzUzMC1cXG5uZXQveGZybS94ZnJtX3VzZXIuYzozNTMxOiNpZmRlZiBDT05GSUdfWEZSTV9NSUdSQVRFXFxubmV0L3hmcm0veGZybV91c2VyLmMtMzUzMi1zdGF0aWMgaW50IGNvcHlfdG9fdXNlcl9taWdyYXRlKGNvbnN0IHN0cnVjdCB4ZnJtX21pZ3JhdGUgKm0sIHN0cnVjdCBza19idWZmICpza2IpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDEzOjU0OjExLjU3MzcxNzI2NloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNTc1MDU1MTczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBSZWNlbnQgWEZSTSBDaGFuZ2VzKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoZXNlIHJlY2VudCBYRlJNIGNoYW5nZXMuIEZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgaW1wYWN0IHJlbGF0ZWQgdG8gYFhGUk1fVVNFUl9DT01QQVRgLiBJIHNlZSB0aGF0IHRoZSBgeGZybV9hbGxvY191c2Vyc3BpYCBmdW5jdGlvbiBpbiBgbmV0L3hmcm0veGZybV91c2VyLmNgIGhhcyBoYWQgdGhhdCBgeHRyID0geGZybV9nZXRfdHJhbnNsYXRvcigpYCBibG9jayByZW1vdmVkLCBzbyBJJ2xsIG5lZWQgdG8gZXhhbWluZSB0aGUgaW1wbGljYXRpb25zIG9mIHRoYXQgcmVtb3ZhbC4gTm93LCBsZXQncyBkaXNzZWN0IHRoZSByZXN0LlxuXG5TcGVjaWZpY2FsbHksIEknbSBub3RpbmcgdGhlIGZvbGxvd2luZyBzaWduaWZpY2FudCBtb2RpZmljYXRpb25zOlxuXG4xLiAgSW4gYG5ldC9pcHY0L2VzcDQuY2AsIHRoZSBgZXNwX291dHB1dF9oZWFkYCBmdW5jdGlvbiwgYW5kIGJ5IGV4dGVuc2lvbiBgZXNwX291dHB1dGAsIGhhcyBoYWQgYHNrYl96Y29weV9kb3duZ3JhZGVfbWFuYWdlZChza2IpO2AgaW50cm9kdWNlZC4gVGhpcyBpcyBteSBwcmltYXJ5IGZvY3VzIGhlcmUuXG5cbjIuICBTaW1pbGFybHksIGBuZXQvaXB2Ni9lc3A2LmNgIGFsc28gaGFzIHRoaXMgaW5zZXJ0aW9uIHdpdGhpbiBpdHMgYGVzcDZfb3V0cHV0X2hlYWRgIGZ1bmN0aW9uIChhbmQgYGVzcDZfb3V0cHV0YCksIHNvIHRoaXMgaXMgYSBjb25zaXN0ZW50IGNoYW5nZSwgcG90ZW50aWFsbHkgcmVsYXRlZCB0byB6ZXJvLWNvcHkgb3B0aW1pemF0aW9uIGRvd25ncmFkaW5nLlxuXG4zLiAgSW4gYG5ldC9pcHY2L3hmcm02X291dHB1dC5jYCwgdGhlcmUncyBhIHNoaWZ0IGluIGB4ZnJtNl9sb2NhbF9yeHBtdHVgIGFuZCBgeGZybTZfbG9jYWxfZXJyb3JgLiBUaGV5J3JlIG5vdyB1c2luZyBgc2tiX3RvX2Z1bGxfc2soc2tiKWAgYW5kIHBlcmZvcm1pbmcgbnVsbCBjaGVja3MuIFRoaXMgc2lnbmFscyBwb3NzaWJsZSBjaGFuZ2VzIGluIGhvdyB0aGUgU0tCIGlzIGhhbmRsZWQgd2l0aGluIHRob3NlIGZ1bmN0aW9ucy5cblxuNC4gIEZpbmFsbHksIGBuZXQveGZybS9lc3BpbnRjcC5jYCBub3cgaW5jbHVkZXMgYSBjaGVjayBmb3IgYHNrYl9yZXNldF90cmFuc3BvcnRfaGVhZGVyX2NhcmVmdWwoc2tiKWAgd2l0aGluIHRoZSBgaGFuZGxlX2VzcGAgZnVuY3Rpb24uIEkgd2lsbCBuZWVkIHRvIGRlbHZlIGZ1cnRoZXIgaW50byB0aGUgdXNhZ2Ugb3IgdGhlIGZ1bmN0aW9ucyBpbiB0aGlzIGZpbGUgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYxMDksIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTM6NTQ6MTUuMTQ4Nzc0NzI5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjM0ODM3MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJoYW5kbGVfZXNwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL2VzcGludGNwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0vZXNwaW50Y3AuYz0xMj1zdGF0aWMgdm9pZCBoYW5kbGVfbm9uZXNwKHN0cnVjdCBlc3BpbnRjcF9jdHggKmN0eCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC94ZnJtL2VzcGludGNwLmMtMjgtXFxubmV0L3hmcm0vZXNwaW50Y3AuYzoyOTpzdGF0aWMgdm9pZCBoYW5kbGVfZXNwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzb2NrICpzaylcXG5uZXQveGZybS9lc3BpbnRjcC5jLTMwLXtcXG4tLVxcbm5ldC94ZnJtL2VzcGludGNwLmM9NjE9c3RhdGljIHZvaWQgZXNwaW50Y3BfcmN2KHN0cnVjdCBzdHJwYXJzZXIgKnN0cnAsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQveGZybS9lc3BpbnRjcC5jLTExNy1cXHRlbHNlXFxubmV0L3hmcm0vZXNwaW50Y3AuYzoxMTg6XFx0XFx0aGFuZGxlX2VzcChza2IsIHN0cnAtXFx1MDAzZXNrKTtcXG5uZXQveGZybS9lc3BpbnRjcC5jLTExOS19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDEzOjU0OjE1LjE5NTEyNTQwMloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMzk1NDg2NDMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgRXhhbWluYXRpb24gb2YgdGhlIEVTUC9UQ1AgUmVjZWl2ZSBQYXRoKipcblxuT2theSwgc28gYGVzcGludGNwX3JjdmAgaXMgdGhlIGtleSBmdW5jdGlvbiBpbml0aWF0aW5nIHRoaW5ncyBpbiBgZXNwaW50Y3AuY2AuIFRoYXQncyB3aGVyZSBJIG5lZWQgdG8gc3RhcnQuIE5vdywgbGV0J3MgcGl2b3QgdG8gdGhlIFhGUk0tcmVsYXRlZCBjb2RlLCBzcGVjaWZpY2FsbHkgd2hhdCBoYXBwZW5zIGFmdGVyIHRoYXQuXG5cbkkgc2VlIGBuZXQveGZybS94ZnJtX2lucHV0LmNgIHdpdGggYHhmcm1faW5wdXRgLCBgeGZybV90cmFuc19yZWluamVjdGAsIGFuZCBgeGZybV90cmFuc19xdWV1ZV9uZXRgIGFzIGNyaXRpY2FsIGZ1bmN0aW9ucy4gVGhvc2UgZGVzZXJ2ZSBpbW1lZGlhdGUgYXR0ZW50aW9uLiBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgZGF0YSBpcyBwcm9jZXNzZWQgYnkgdGhvc2UuXG5cbk5leHQsIEknbGwgc3dpdGNoIG92ZXIgdG8gYG5ldC94ZnJtL3hmcm1faXB0ZnMuY2AuIEkgd2FudCB0byBpbnZlc3RpZ2F0ZSBgaXB0ZnNfc2tiX2Nhbl9hZGRfZnJhZ3NgIGFuZCBgaXB0ZnNfcmVhc3NlbV9jb250YC4gSSdsbCB3YW50IHRvIHF1aWNrbHkgY2hlY2sgdGhlIGBzdGF0aWNgIHN0YXR1cyBvZiB0aGVzZSwgYW5kIG1hcCB0aGUgZW50cnkgcG9pbnRzLiBIb3BlZnVsbHkgdGhpcyB3aWxsIHJldmVhbCB0aGUgc3BlY2lmaWNzIG9mIElQIGZyYWdtZW50IHJlYXNzZW1ibHkgd2l0aGluIHRoZSBYRlJNIGZyYW1ld29yay4gVGhpcyB3aWxsIGhvcGVmdWxseSBwcm92aWRlIGluc2lnaHQgdG8gdGhlIG92ZXJhbGwgZW5kLXRvLWVuZCBmbG93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzA4MSwiT3V0cHV0VG9rZW5zIjo1MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxMzo1NDoxOC41OTA2MTM5NDNaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NzQ3MDAzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwdGZzX3NrYl9jYW5fYWRkX2ZyYWdzfGlwdGZzX3JlYXNzZW1fY29udFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS94ZnJtX2lwdGZzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0veGZybV9pcHRmcy5jPTM4MD1zdGF0aWMgdTMyIGlwdGZzX3NrYl9yZXNldF9mcmFnX3dhbGsoc3RydWN0IGlwdGZzX3NrYl9mcmFnX3dhbGsgKndhbGssXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNDAwLS8qKlxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo0MDE6ICogaXB0ZnNfc2tiX2Nhbl9hZGRfZnJhZ3MoKSAtIGNoZWNrIGlmIG9rIHRvIGFkZCBmcmFncyBmcm9tIHdhbGsgdG8gc2tiXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTQwMi0gKiBAc2tiOiBza2IgdG8gY2hlY2sgZm9yIGFkZGluZyBmcmFncyB0b1xcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTQwOC0gKi9cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6NDA5OnN0YXRpYyBib29sIGlwdGZzX3NrYl9jYW5fYWRkX2ZyYWdzKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTQxMC1cXHRcXHRcXHRcXHQgICAgc3RydWN0IGlwdGZzX3NrYl9mcmFnX3dhbGsgKndhbGssXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNDU4LSAqXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjQ1OTogKiBpcHRmc19za2JfY2FuX2FkZF9mcmFncygpIHNob3VsZCBiZSBjYWxsZWQgYmVmb3JlIHRoaXMgZnVuY3Rpb24gdG8gdmVyaWZ5XFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTQ2MC0gKiB0aGF0IHRoZSBkZXN0aW5hdGlvbiBAc2tiIGlzIGNvbXBhdGlibGUgd2l0aCB0aGUgd2FsayBhbmQgaGFzIHNwYWNlIGluIHRoZVxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jPTU0MT1pcHRmc19wc2tiX2FkZF9mcmFncyhzdHJ1Y3Qgc2tfYnVmZiAqdHBsLCBzdHJ1Y3QgaXB0ZnNfc2tiX2ZyYWdfd2FsayAqd2FsayxcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy01NTAtXFx0LyogdGhpcyBzaG91bGQgbm90IG5vcm1hbGx5IGJlIGhhcHBlbmluZyAqL1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo1NTE6XFx0aWYgKCFpcHRmc19za2JfY2FuX2FkZF9mcmFncyhza2IsIHdhbGssIG9mZiArIGNvcHlfbGVuLFxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy01NTItXFx0XFx0XFx0XFx0ICAgICBsZW4gLSBjb3B5X2xlbikpIHtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz03MzA9c3RhdGljIHZvaWQgaXB0ZnNfcmVhc3NlbV9kb25lKHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMpXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNzM1LS8qKlxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo3MzY6ICogaXB0ZnNfcmVhc3NlbV9jb250KCkgLSBDb250aW51ZSB0aGUgcmVhc3NlbWJseSBvZiBhbiBpbm5lciBwYWNrZXRzLlxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy03MzctICogQHh0ZnM6IHh0ZnMgc3RhdGVcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy03NDktICovXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjc1MDpzdGF0aWMgdTMyIGlwdGZzX3JlYXNzZW1fY29udChzdHJ1Y3QgeGZybV9pcHRmc19kYXRhICp4dGZzLCB1NjQgc2VxLFxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy03NTEtXFx0XFx0XFx0ICAgICAgc3RydWN0IHNrYl9zZXFfc3RhdGUgKnN0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTkwOS1cXHRpZiAoZnJhZ3dhbGsgXFx1MDAyNlxcdTAwMjZcXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6OTEwOlxcdCAgICBpcHRmc19za2JfY2FuX2FkZF9mcmFncyhuZXdza2IsIGZyYWd3YWxrLCBkYXRhLCBjb3B5bGVuKSkge1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy05MTEtXFx0XFx0aXB0ZnNfc2tiX2FkZF9mcmFncyhuZXdza2IsIGZyYWd3YWxrLCBkYXRhLCBjb3B5bGVuKTtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz0xMjI2PXN0YXRpYyB2b2lkIGlwdGZzX2lucHV0X29yZGVyZWQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTI4Ny1cXHRcXHRpZiAoYmxrb2ZmIHx8IHh0ZnMtXFx1MDAzZXJhX3J1bnRsZW4gfHwgeHRmcy1cXHUwMDNlcmFfbmV3c2tiKSB7XFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjEyODg6XFx0XFx0XFx0ZGF0YSA9IGlwdGZzX3JlYXNzZW1fY29udCh4dGZzLCBzZXEsIFxcdTAwMjZza2JzZXEsIHNrYiwgZGF0YSxcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTI4OS1cXHRcXHRcXHRcXHRcXHRcXHQgIGJsa29mZiwgXFx1MDAyNnN1Ymxpc3QpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxMzo1NDoxOC42MzUzNjMxNTZaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjc1Mjk0NDE0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYHhmcm1faXB0ZnMuY2AgY29kZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGdldCBhIGxheSBvZiB0aGUgbGFuZCwgc28gSSdsbCBzdGFydCBieSBsaXN0aW5nIHRoZSBrZXkgZnVuY3Rpb25zLiBJIHdhbnQgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgZW50cnkgcG9pbnRzIGFuZCBtYWpvciBvcGVyYXRpb25zLiBJIHNlZSBgaXB0ZnNfaW5wdXRfb3JkZXJlZGAsIGBpcHRmc19pbnB1dGAsIGBpcHRmc19vdXRwdXRgLCBhbmQgSSdtIGd1ZXNzaW5nIHRoZXNlIGFyZSBoYW5kbGluZyB0aGUgYWN0dWFsIHBhY2tldCBwcm9jZXNzaW5nIGluIGRpZmZlcmVudCBzY2VuYXJpb3MuIFRoZW4gdGhlcmUncyBgaXB0ZnNfdXNlcl9pbml0YCBhbmQgYGlwdGZzX2luaXRfc3RhdGVgLCBwcm9iYWJseSByZWxhdGVkIHRvIGluaXRpYWxpemF0aW9uLCB1c2VyIHNwYWNlIGludGVyYWN0aW9uLCBhbmQgc3RhdGUgbWFuYWdlbWVudCwgd2hpY2ggYXJlIHZlcnkgaW1wb3J0YW50IGluIGNvbm5lY3Rpb24gdHJhY2tpbmcuIEFuZCBJIHNlZSBhIGZyYWdtZW50YXRpb24gcmVsYXRlZCBmdW5jdGlvbiBgaXB0ZnNfcHNrYl9hZGRfZnJhZ3NgIGhlcmUuXG5cblRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgd2l0aGluIHRoZSBicm9hZGVyIFhGUk0gZnJhbWV3b3JrIGFuZCBpdHMgaW50ZXJhY3Rpb24gd2l0aCB0aGUga2VybmVsLCBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIHNlbnNlIG9mIGhvdyBpdCBpbnRlZ3JhdGVzIHdpdGggWEZSTSBzdHJ1Y3R1cmVzLiBUaGVyZWZvcmUsIEkgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gaG93IHRoZSBjb2RlIHJlbGF0ZXMgdG8gYHhmcm1fdHlwZWAgb3IgYW55IFhGUk0gcHJvdG9jb2wgY2FsbGJhY2tzLiBJJ2xsIG5lZWQgdG8gZ3JlcCBmb3IgdGhlc2UgdGVybXMgdG8gc2VlIHRoZSBjb25uZWN0aW9ucy4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgYXJjaGl0ZWN0dXJhbCBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODU0NiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDEzOjU0OjIxLjM4ODMwOTU4MloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc3ODg4MzIsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0YXRpYyBjb25zdCBzdHJ1Y3QgeGZybV90eXBlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL3hmcm1faXB0ZnMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTM6NTQ6MjEuNDM2MTI4MjU0WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM2ODE2ODU5MTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBYRlJNIENvcmUqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IGRvdWJsZS1jaGVja2luZyB0aGUgaW5pdGlhbGl6YXRpb24gYW5kIHRoZSBkZWZpbml0aW9ucyBvZiBgeGZybV90eXBlYCB3aXRoaW4gYHhmcm1faXB0ZnMuY2AuIEkgbmVlZCB0byBlbnN1cmUgdGhlIGZvdW5kYXRpb24gaXMgc29saWQgYmVmb3JlIEkgZGVsdmUgYW55IGRlZXBlciBpbnRvIHRoZSBJUHNlYyBwcm9jZXNzaW5nIGZsb3cuIFRoaXMgYXJlYSBhbHdheXMgaGFzIHBvdGVudGlhbCBmb3Igc3VidGxlIGJ1Z3MsIHNvIGJlc3QgdG8gdGFrZSBhIG1vbWVudCBhbmQgcmUtZmFtaWxpYXJpemUgbXlzZWxmIHdpdGggdGhlIGJhc2ljcy4gSXQncyBhIGtleSBwaWVjZSBpbiBlbnN1cmluZyBhbnkgbmV3IElQc2VjIGZlYXR1cmUgYmVoYXZlcyBhcyBpbnRlbmRlZCB3aXRoaW4gdGhlIGxhcmdlciBzeXN0ZW0uIFRpbWUgdG8gcmVmcmVzaCBteSBtZW1vcnkgYW5kIHZlcmlmeSB0aGUgc3RhcnRpbmcgc3RhdGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4OTM4LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTM6NTQ6MjUuMTE3ODE3NjZaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MzY0ODUzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInhmcm1fdHlwZXx4ZnJtX21vZGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0veGZybV9pcHRmcy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL3hmcm1faXB0ZnMuYz0yNzMyPXN0YXRpYyB2b2lkIGlwdGZzX2Rlc3Ryb3lfc3RhdGUoc3RydWN0IHhmcm1fc3RhdGUgKngpXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjc2Ny1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6Mjc2ODpzdGF0aWMgY29uc3Qgc3RydWN0IHhmcm1fbW9kZV9jYnMgaXB0ZnNfbW9kZV9jYnMgPSB7XFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTI3NjktXFx0Lm93bmVyID0gVEhJU19NT0RVTEUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDEzOjU0OjI1LjE2NjE4NjMxMloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMDc0NzQxMDEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkgd2VyZSB0aGlua2luZyB0aHJvdWdoIHRoZSBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBgeGZybV9pcHRmcy5jYCBDb2RlKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGUgYHhmcm1faXB0ZnMuY2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJJ20gZm9jdXNpbmcgaW4gb24gdGhlIGBpcHRmc19tb2RlX2Nic2Agc3RydWN0dXJlLiBJIHJlbWVtYmVyIGRlYWxpbmcgd2l0aCB0aGF0IGFyZWEgYmVmb3JlLCBhbmQgSSB3YW50IHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBjYWxsYmFja3MgZGVmaW5lZCB0aGVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBJUHNlYyB0cmFuc3BvcnQgbW9kZSBpbnRlcmFjdHMgd2l0aGluIHRoZSBYRlJNIGZyYW1ld29yay4gSXQncyBrZXkgdG8gaG93IHRoaW5ncyBhcmUgYmVpbmcgbWFuYWdlZCBhbmQgY29uZmlndXJlZC4gU28sIGxldCdzIGRyaWxsIGRvd24gaW50byB0aGF0IHNlY3Rpb24gb2YgdGhlIGNvZGUgYW5kIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZy4gSXQgaXMgbGlrZWx5IHRoYXQgY2FsbGJhY2tzIGFyZSBkZWZpbmVkIHRvIGhhbmRsZSBkaWZmZXJlbnQgYXNwZWN0cyBvZiB0aGUgaW50ZXJhY3Rpb24sIHN1Y2ggYXMgaW5pdGlhbGl6YXRpb24sIHBhY2tldCBwcm9jZXNzaW5nIG9yIHRlYXJkb3duIHdpdGhpbiB0aGUgSVBzZWMgc3Vic3lzdGVtLCBvciBwZXJoYXBzIGhhbmRsaW5nIG9mIGRpZmZlcmVudCBTQSB0eXBlcy4gTGV0J3Mgc2VlIGV4YWN0bHkgaG93IHRoaXMgY29kZSBpcyBoYW5kbGluZyB0aG9zZSBjYWxsYmFjayBhY3Rpb25zIHdpdGhpbiB0cmFuc3BvcnQgbW9kZS4gSSdtIGhvcGluZyBJIGNhbiByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNhbGxiYWNrIHByb2Nlc3MgdG8gY2hlY2sgd2hhdCBpcyBjb25maWd1cmVkIGF0IHRoaXMgcG9pbnQgaW4gdGhlIHByb2Nlc3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MjgyLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTM6NTQ6MjguMjQwOTI5NjQ1WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTk1NDg3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcHRmc19tb2RlX2Nic1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS94ZnJtX2lwdGZzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0veGZybV9pcHRmcy5jPTI3MzI9c3RhdGljIHZvaWQgaXB0ZnNfZGVzdHJveV9zdGF0ZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeClcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNzY3LVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoyNzY4OnN0YXRpYyBjb25zdCBzdHJ1Y3QgeGZybV9tb2RlX2NicyBpcHRmc19tb2RlX2NicyA9IHtcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjc2OS1cXHQub3duZXIgPSBUSElTX01PRFVMRSxcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz0yNzgyPXN0YXRpYyBpbnQgX19pbml0IHhmcm1faXB0ZnNfaW5pdCh2b2lkKVxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTI3ODctXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjI3ODg6XFx0ZXJyID0geGZybV9yZWdpc3Rlcl9tb2RlX2NicyhYRlJNX01PREVfSVBURlMsIFxcdTAwMjZpcHRmc19tb2RlX2Nicyk7XFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTI3ODktXFx0aWYgKGVyciBcXHUwMDNjIDApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDEzOjU0OjI4LjMwMDg4OTIxNVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMDA0NTc3MTg3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBJUHNlYy9YRlJNIFBhdGNoIENvbXBvbmVudHMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSB0aGUga2V5IGZ1bmN0aW9ucyBhbmQgZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIHRvdWNoZWQgYnkgdGhpcyBwYXRjaCwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYG5ldC94ZnJtYCBhbmQgcmVsYXRlZCBkaXJlY3Rvcmllcy4gSSdtIGZvY3VzaW5nIG9uIHRoZSBjb3JlIFhGUk0gY29tcG9uZW50cywgdGhlIEVTUCAoRW5jYXBzdWxhdGluZyBTZWN1cml0eSBQYXlsb2FkKSBpbXBsZW1lbnRhdGlvbnMgZm9yIElQdjQgYW5kIElQdjYsIGFuZCB0aGUgRVNQLWluLVRDUCB2YXJpYW50LlxuXG5TcGVjaWZpY2FsbHksIEkgc2VlIHRoYXQgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCB0aGVzZSBmdW5jdGlvbnMgYXJlIGNvcnJlY3RseSBuYW1lZCBpbiB0aGUgY29kZTogYHhmcm1fYnVuZGxlX2NyZWF0ZWAsIGB4ZnJtX2NyZWF0ZV9kdW1teV9idW5kbGVgIChwb2xpY3kpLCBgeGZybV9zdGF0ZV9nY190YXNrYCwgYF9feGZybV9zdGF0ZV9kZWxldGVgLCBgeGZybV9kZXZfc3RhdGVfZmx1c2hgIChzdGF0ZSBtYW5hZ2VtZW50KSwgYHhmcm1fYWxsb2NfdXNlcnNwaWAsIGB4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZWAgKHVzZXIgc3BhY2UgaW50ZXJhY3Rpb24pLiBBbHNvIEkgbXVzdCBjaGVjayBpbnB1dCBoYW5kbGluZyBpbiBgeGZybV9pbnB1dGAsIGB4ZnJtX3RyYW5zX3JlaW5qZWN0YCwgYHhmcm1fdHJhbnNfcXVldWVfbmV0YC4gVGhlIEVTUCBvdXRwdXQgZnVuY3Rpb25zIGFyZSBpbXBvcnRhbnQ6IGBlc3Bfb3V0cHV0X2hlYWRgIChJUHY0KSwgYGVzcDZfb3V0cHV0X2hlYWRgIChJUHY2KSwgYW5kIHRob3NlIGZvciBlcnJvciBoYW5kbGluZzogYHhmcm02X2xvY2FsX3J4cG10dWAsIGB4ZnJtNl9sb2NhbF9lcnJvcmAuIEkgbXVzdCBhbHNvIGVuc3VyZSB0aGF0IHRoZSBgaGFuZGxlX2VzcGAgZnVuY3Rpb24gKG9yIGBlc3BpbnRjcF9yY3ZgKSBpcyBoYW5kbGVkIHByb3Blcmx5IGZvciBFU1AtaW4tVENQLCBhbG9uZyB3aXRoICBmcmFnbWVudGF0aW9uL3JlYXNzZW1ibHkgKGBpcHRmc19za2JfY2FuX2FkZF9mcmFnc2AsIGBpcHRmc19yZWFzc2VtX2NvbnRgKS5cblxuSSBoYXZlIHRvIHZlcmlmeSBhbGwgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIGFyZSBlbmFibGVkIGFuZCBoYXZlIHRoZSBjb3JyZWN0IGRlcGVuZGVuY2llczogYENPTkZJR19JTkVUX0VTUGAsIGBDT05GSUdfSU5FVDZfRVNQYCwgYENPTkZJR19JTkVUX0VTUElOVENQYCwgYENPTkZJR19JTkVUNl9FU1BJTlRDUGAsIGBDT05GSUdfWEZSTWAsIGBDT05GSUdfWEZSTV9VU0VSYCwgYENPTkZJR19YRlJNX0lQVEZTYCwgYENPTkZJR19YRlJNX01JR1JBVEVgLCBgQ09ORklHX0lQVjZgLCBhbmQgYENPTkZJR19JTkVUYC4gSSBjYW4gc2VlIGZyb20gdGhlIEtjb25maWcgZmlsZXMgdGhhdCBYRlJNIGRlcGVuZHMgb24gTkVULCBFU1AgZGVwZW5kcyBvbiBJTkVUL0lQVjYsIGFuZCB0aGUgdXNlciBhbmQgSVBURlMgb3B0aW9ucyBkZXBlbmQgb24gWEZSTS4gVGhlIG1pZ3JhdGlvbiBmZWF0dXJlIHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZC5cblxuTG9va2luZyBhdCB0aGUgYEZvY3VzU3ltYm9sc2AsIEkgaGF2ZSBhIGdvb2QgaGFuZGxlIG9uIHdoZXJlIHRoZSBjaGFuZ2VzIGxpZS4gVGhlIGBXb3J0aEZ1enppbmdgIGFzc2Vzc21lbnQgYWxzbyBjb25maXJtcyBteSBzdXNwaWNpb25zLiBUaGlzIHBhdGNoIHRvdWNoZXMgdGhlIGNyaXRpY2FsIElQc2VjL1hGUk0gbmV0d29ya2luZyBjb2RlLCBtYWtpbmcgaXQgcHJpbWUgcmVhbCBlc3RhdGUgZm9yIGZ1enppbmcuIEkgY2FuIHNlZSB0aGF0IHRoZSBjaGFuZ2VzIGluY2x1ZGUgemVyby1jb3B5IGZyYWdtZW50IGhhbmRsaW5nLCBJUHY2IFhGUk0gZXJyb3IgaGFuZGxpbmcsIEVTUC1pbi1UQ1AsIFhGUk0gcGFja2V0IHBhcnNpbmcsIHJlaW5qZWN0aW9uIG1lY2hhbmlzbXMsIElQLVRGUyAoSVAgVHJhZmZpYyBGbG93IFNlY3VyaXR5KSBmcmFnbWVudCB2YWxpZGF0aW9uLCBwb2xpY3kgYnVuZGxlIGNyZWF0aW9uLCBzdGF0ZSBkZWxldGlvbiBsb2NraW5nLCBkZXZpY2Ugc3RhdGUgZmx1c2hpbmcsIGFuZCB0aGUgdXNlciBzcGFjZSBuZXRsaW5rIGhhbmRsZXJzLiBBbGwgdGhlc2UgYXJlYXMgYXJlIGRlZmluaXRlbHkgYWNjZXNzaWJsZSB2aWEgdXNlci1jb250cm9sbGVkIG5ldHdvcmsgdHJhZmZpYyBhbmQgbmV0bGluayBtZXNzYWdlcywgc28gdGhpcyBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyB0byBwcmlvcml0aXplLlxuXG5JJ3ZlIGNvbmZpcm1lZCB0aGUgZXhpc3RlbmNlIGFuZCBjb3JyZWN0IG5hbWluZyBvZiBhbGwgaWRlbnRpZmllZCBzeW1ib2xzIGFjcm9zcyB0aGUgcmVsZXZhbnQgc291cmNlIGZpbGVzLiBUaGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgYWxzbyBjaGVjayBvdXQuXG5cbkFscmlnaHQsIHdpdGggYWxsIHRoZSBjaGVja3MgY29tcGxldGVkLCBJJ20gY29uZmlkZW50IGluIHRoZSBhbmFseXNpcy4gTGV0J3MgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTg0MywiT3V0cHV0VG9rZW5zIjozOTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDEzOjU0OjM4LjM0NjY2Mzc5M1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgzMzQzODA3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJTkVUXCIsXG4gICAgXCJJUFY2XCIsXG4gICAgXCJYRlJNXCIsXG4gICAgXCJJTkVUX0VTUFwiLFxuICAgIFwiSU5FVDZfRVNQXCIsXG4gICAgXCJJTkVUX0VTUElOVENQXCIsXG4gICAgXCJJTkVUNl9FU1BJTlRDUFwiLFxuICAgIFwiWEZSTV9VU0VSXCIsXG4gICAgXCJYRlJNX0lQVEZTXCIsXG4gICAgXCJYRlJNX01JR1JBVEVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJlc3Bfb3V0cHV0X2hlYWRcIixcbiAgICBcImVzcDZfb3V0cHV0X2hlYWRcIixcbiAgICBcInhmcm02X2xvY2FsX3J4cG10dVwiLFxuICAgIFwieGZybTZfbG9jYWxfZXJyb3JcIixcbiAgICBcImVzcGludGNwX3JjdlwiLFxuICAgIFwiaGFuZGxlX2VzcFwiLFxuICAgIFwieGZybV9pbnB1dFwiLFxuICAgIFwieGZybV90cmFuc19yZWluamVjdFwiLFxuICAgIFwieGZybV90cmFuc19xdWV1ZV9uZXRcIixcbiAgICBcImlwdGZzX3NrYl9jYW5fYWRkX2ZyYWdzXCIsXG4gICAgXCJpcHRmc19yZWFzc2VtX2NvbnRcIixcbiAgICBcInhmcm1fYnVuZGxlX2NyZWF0ZVwiLFxuICAgIFwieGZybV9jcmVhdGVfZHVtbXlfYnVuZGxlXCIsXG4gICAgXCJ4ZnJtX3N0YXRlX2djX3Rhc2tcIixcbiAgICBcIl9feGZybV9zdGF0ZV9kZWxldGVcIixcbiAgICBcInhmcm1fZGV2X3N0YXRlX2ZsdXNoXCIsXG4gICAgXCJ4ZnJtX2FsbG9jX3VzZXJzcGlcIixcbiAgICBcInhmcm1fc2VuZF9taWdyYXRlX3N0YXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggdG91Y2hlcyBjb3JlIElQc2VjIChYRlJNKSBJUHY0L0lQdjYgbmV0d29ya2luZyBsb2dpYywgaW5jbHVkaW5nIEVTUCBvdXRwdXQgemVyby1jb3B5IGRvd25ncmFkZXMsIElQdjYgWEZSTSBlcnJvciByZXBvcnRpbmcgZm9yIG5vbi1mdWxsIHNvY2tldHMsIEVTUC1pbi1UQ1AgdHJhbnNwb3J0IGhlYWRlciByZXNldHRpbmcsIFhGUk0gaW5wdXQgcGFja2V0IHByb3RvIGRpc3BhdGNoIGFuZCBhc3luYyBkZXYtcmVmIHJlaW5qZWN0aW9uIGhhbmRsaW5nLCBJUC1URlMgZnJhZ21lbnQgd2FsayBib3VuZHMgY2hlY2tzLCBwb2xpY3kgYnVuZGxlIFJDVSBkZXZpY2UgcmVzb2x1dGlvbiwgc3RhdGUgR0Mgc2VyaWFsaXphdGlvbiB1bmRlciBtdXRleCwgYW5kIFhGUk0gdXNlciBuZXRsaW5rIGhhbmRsZXJzLiBBbGwgY2hhbmdlcyBhcmUgaW4gcmVhY2hhYmxlIG5ldHdvcmtpbmcgcGF0aHMgZXhlcmNpc2FibGUgdmlhIHNvY2tldHMgYW5kIFhGUk0gbmV0bGluayBpbnRlcmZhY2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklORVRcIixcbiAgICBcIklQVjZcIixcbiAgICBcIlhGUk1cIixcbiAgICBcIklORVRfRVNQXCIsXG4gICAgXCJJTkVUNl9FU1BcIixcbiAgICBcIklORVRfRVNQSU5UQ1BcIixcbiAgICBcIklORVQ2X0VTUElOVENQXCIsXG4gICAgXCJYRlJNX1VTRVJcIixcbiAgICBcIlhGUk1fSVBURlNcIixcbiAgICBcIlhGUk1fTUlHUkFURVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImVzcF9vdXRwdXRfaGVhZFwiLFxuICAgIFwiZXNwNl9vdXRwdXRfaGVhZFwiLFxuICAgIFwieGZybTZfbG9jYWxfcnhwbXR1XCIsXG4gICAgXCJ4ZnJtNl9sb2NhbF9lcnJvclwiLFxuICAgIFwiZXNwaW50Y3BfcmN2XCIsXG4gICAgXCJoYW5kbGVfZXNwXCIsXG4gICAgXCJ4ZnJtX2lucHV0XCIsXG4gICAgXCJ4ZnJtX3RyYW5zX3JlaW5qZWN0XCIsXG4gICAgXCJ4ZnJtX3RyYW5zX3F1ZXVlX25ldFwiLFxuICAgIFwiaXB0ZnNfc2tiX2Nhbl9hZGRfZnJhZ3NcIixcbiAgICBcImlwdGZzX3JlYXNzZW1fY29udFwiLFxuICAgIFwieGZybV9idW5kbGVfY3JlYXRlXCIsXG4gICAgXCJ4ZnJtX2NyZWF0ZV9kdW1teV9idW5kbGVcIixcbiAgICBcInhmcm1fc3RhdGVfZ2NfdGFza1wiLFxuICAgIFwiX194ZnJtX3N0YXRlX2RlbGV0ZVwiLFxuICAgIFwieGZybV9kZXZfc3RhdGVfZmx1c2hcIixcbiAgICBcInhmcm1fYWxsb2NfdXNlcnNwaVwiLFxuICAgIFwieGZybV9zZW5kX21pZ3JhdGVfc3RhdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCB0b3VjaGVzIGNvcmUgSVBzZWMgKFhGUk0pIElQdjQvSVB2NiBuZXR3b3JraW5nIGxvZ2ljLCBpbmNsdWRpbmcgRVNQIG91dHB1dCB6ZXJvLWNvcHkgZG93bmdyYWRlcywgSVB2NiBYRlJNIGVycm9yIHJlcG9ydGluZyBmb3Igbm9uLWZ1bGwgc29ja2V0cywgRVNQLWluLVRDUCB0cmFuc3BvcnQgaGVhZGVyIHJlc2V0dGluZywgWEZSTSBpbnB1dCBwYWNrZXQgcHJvdG8gZGlzcGF0Y2ggYW5kIGFzeW5jIGRldi1yZWYgcmVpbmplY3Rpb24gaGFuZGxpbmcsIElQLVRGUyBmcmFnbWVudCB3YWxrIGJvdW5kcyBjaGVja3MsIHBvbGljeSBidW5kbGUgUkNVIGRldmljZSByZXNvbHV0aW9uLCBzdGF0ZSBHQyBzZXJpYWxpemF0aW9uIHVuZGVyIG11dGV4LCBhbmQgWEZSTSB1c2VyIG5ldGxpbmsgaGFuZGxlcnMuIEFsbCBjaGFuZ2VzIGFyZSBpbiByZWFjaGFibGUgbmV0d29ya2luZyBwYXRocyBleGVyY2lzYWJsZSB2aWEgc29ja2V0cyBhbmQgWEZSTSBuZXRsaW5rIGludGVyZmFjZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDEzOjU0OjM4LjQzMDAxMzQ5WiIsIlNlcSI6MjUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDU0OTIwNTUzNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDEzOjU0OjM4LjQzMDQ5OTYzWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTA1NDg3MTU4OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBjb250YWlucyBzZXZlcmFsIGJ1ZyBmaXhlcyBhbmQgcmVmYWN0b3JpbmdzIGFjcm9zcyBYRlJNIGFuZCBJUHNlYyBuZXR3b3JraW5nIHN1YnN5c3RlbXM6XFxuMS4gYGVzcDQuY2AgYW5kIGBlc3A2LmNgOiBBZGRzIGBza2JfemNvcHlfZG93bmdyYWRlX21hbmFnZWQoc2tiKWAgdG8gYmFsYW5jZSByZWZjb3VudHMgb24gemVyb2NvcHkgbWFuYWdlZCBmcmFncyB3aGVuIG11dGF0aW5nIHRoZSBmcmFnIGFycmF5IChyZWZjb3VudGluZyAvIFVBRiBwcmV2ZW50aW9uLCBjb3ZlcmVkIGJ5IEtBU0FOL3JlZmNvdW50IHRyYWNraW5nKS5cXG4yLiBgeGZybTZfb3V0cHV0LmNgOiBWYWxpZGF0ZXMgc29ja2V0cyB1c2luZyBgc2tiX3RvX2Z1bGxfc2soKWAgdG8gYXZvaWQgb3BlcmF0aW5nIG9uIG5vbi1mdWxsIHNvY2tldHMgb3IgTlVMTCBkZXJlZmVyZW5jZXMgKE5VTEwgcG9pbnRlciAvIHR5cGUgY29uZnVzaW9uKS5cXG4zLiBgZXNwaW50Y3AuY2A6IFVzZXMgYHNrYl9yZXNldF90cmFuc3BvcnRfaGVhZGVyX2NhcmVmdWwoKWAgdG8gdmFsaWRhdGUgdHJhbnNwb3J0IGhlYWRlciBib3VuZHMgYmVmb3JlIHJlc2V0dGluZyAoT09CIHByZXZlbnRpb24sIGNvdmVyZWQgYnkgS0FTQU4pLlxcbjQuIGB4ZnJtX2lucHV0LmNgOiBGaXhlcyBwcm90b2NvbCB0cmFja2luZyAoYHhmcm1fcHJvdG9gKSwgaGFuZGxlcyBkZXZpY2UgcmVmY291bnRzIGFuZCBSQ1UgbG9ja2luZyBkdXJpbmcgcmVpbmplY3Rpb24sIGFuZCBlbnN1cmVzIGRzdCBlbnRyeSBwZXJzaXN0ZW5jZSAoYHNrYl9kc3RfZm9yY2VgKS4gQWxsIHZhcmlhYmxlcyAoYHhmcm1fcHJvdG9gKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgd2l0aCBkZWZhdWx0IHZhbHVlcy5cXG41LiBgeGZybV9pcHRmcy5jYDogQWRkcyBib3VuZHMgY2hlY2tpbmcgb24gZnJhZyB3YWxrIG9mZnNldCB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgaW5kZXhpbmcgaW4gYGlwdGZzX3NrYl9yZXNldF9mcmFnX3dhbGsoKWAsIGFuZCBjb3JyZWN0cyBydW50IHNpemUgdmVyaWZpY2F0aW9uIGFnYWluc3QgSVAgaGVhZGVyIGxlbmd0aCAoT09CIHJlYWRzLCBjb3ZlcmVkIGJ5IEtBU0FOKS5cXG42LiBgeGZybV9wb2xpY3kuY2AsIGB4ZnJtX3N0YXRlLmNgLCBgeGZybV91c2VyLmNgOiBBZGRzIG1pc3NpbmcgUkNVIHJlYWQgbG9ja3MgKGBkc3RfZGV2X3JjdWAsIG11bHRpY2FzdCksIGFkZHMgYSBHQyBtdXRleCB0byBzZXJpYWxpemUgc3RhdGUgZGVzdHJ1Y3Rpb24sIGFuZCBmaXhlcyBsaXN0IGRlbGV0aW9uIGluaXRpYWxpemF0aW9uIChgaGxpc3RfZGVsX2luaXRfcmN1YCkuXFxuXFxuTm9uZSBvZiB0aGUgY2hhbmdlcyBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIG1lbW9yeSwga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcywgb3IgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gVGhlIHJpc2tzIGFkZHJlc3NlZCAob3V0LW9mLWJvdW5kcyBhY2Nlc3MsIHJlZmNvdW50aW5nLCB1c2UtYWZ0ZXItZnJlZSwgY29uY3VycmVuY3kvUkNVKSBhcmUgY292ZXJlZCBieSBLQVNBTiwgUFJPVkVfUkNVLCBhbmQgc3RhbmRhcmQgZGVidWcgY2hlY2tlcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgY2UwMTRkYTE1M2Q4ZGNlOGMzM2UzNmZhOTU3ZjEwMTM5NjNmNmUxOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDcgMTM6NTM6NTAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9lc3A0LmMgYi9uZXQvaXB2NC9lc3A0LmNcbmluZGV4IGE2YzE4YWVhNzQ5OGQuLmU3NmRiNTgxN2U3OGUgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC9lc3A0LmNcbisrKyBiL25ldC9pcHY0L2VzcDQuY1xuQEAgLTQ0MSw2ICs0NDEsMTIgQEAgaW50IGVzcF9vdXRwdXRfaGVhZChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGVzcF9pbmZvICpcbiBcbiBcdFx0XHRlc3AtXHUwMDNlaW5wbGFjZSA9IGZhbHNlO1xuIFxuK1x0XHRcdC8qIFRha2UgcmVhbCBwYWdlIHJlZnMgYW5kIGNsZWFyIFNLQkZMX01BTkFHRURfRlJBR19SRUZTIGJlZm9yZVxuK1x0XHRcdCAqIHdlIG11dGF0ZSB0aGUgZnJhZyBhcnJheSwgc28gdGhlIHBlci1mcmFnIHVucmVmIHN0YXlzIGJhbGFuY2VkXG4rXHRcdFx0ICogZm9yIHplcm9jb3B5IG1hbmFnZWQgZnJhZ3MgKHNlZSBfX2lwX2FwcGVuZF9kYXRhKCkpLlxuK1x0XHRcdCAqL1xuK1x0XHRcdHNrYl96Y29weV9kb3duZ3JhZGVfbWFuYWdlZChza2IpO1xuK1xuIFx0XHRcdGFsbG9jc2l6ZSA9IEFMSUdOKHRhaWxlbiwgTDFfQ0FDSEVfQllURVMpO1xuIFxuIFx0XHRcdHNwaW5fbG9ja19iaChcdTAwMjZ4LVx1MDAzZWxvY2spO1xuZGlmZiAtLWdpdCBhL25ldC9pcHY2L2VzcDYuYyBiL25ldC9pcHY2L2VzcDYuY1xuaW5kZXggNzJlYzBkN2QxMTIwOS4uYjFjOWIzNmY3NmRjNCAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L2VzcDYuY1xuKysrIGIvbmV0L2lwdjYvZXNwNi5jXG5AQCAtNDcxLDYgKzQ3MSwxMiBAQCBpbnQgZXNwNl9vdXRwdXRfaGVhZChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGVzcF9pbmZvXG4gXG4gXHRcdFx0ZXNwLVx1MDAzZWlucGxhY2UgPSBmYWxzZTtcbiBcbitcdFx0XHQvKiBUYWtlIHJlYWwgcGFnZSByZWZzIGFuZCBjbGVhciBTS0JGTF9NQU5BR0VEX0ZSQUdfUkVGUyBiZWZvcmVcbitcdFx0XHQgKiB3ZSBtdXRhdGUgdGhlIGZyYWcgYXJyYXksIHNvIHRoZSBwZXItZnJhZyB1bnJlZiBzdGF5cyBiYWxhbmNlZFxuK1x0XHRcdCAqIGZvciB6ZXJvY29weSBtYW5hZ2VkIGZyYWdzIChzZWUgX19pcF9hcHBlbmRfZGF0YSgpKS5cbitcdFx0XHQgKi9cbitcdFx0XHRza2JfemNvcHlfZG93bmdyYWRlX21hbmFnZWQoc2tiKTtcbitcbiBcdFx0XHRhbGxvY3NpemUgPSBBTElHTih0YWlsZW4sIEwxX0NBQ0hFX0JZVEVTKTtcbiBcbiBcdFx0XHRzcGluX2xvY2tfYmgoXHUwMDI2eC1cdTAwM2Vsb2NrKTtcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni94ZnJtNl9vdXRwdXQuYyBiL25ldC9pcHY2L3hmcm02X291dHB1dC5jXG5pbmRleCA1MTJiZGFmMTM2OTk3Li40NGIyMjFhMDlhMGM4IDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYveGZybTZfb3V0cHV0LmNcbisrKyBiL25ldC9pcHY2L3hmcm02X291dHB1dC5jXG5AQCAtMTksNyArMTksMTAgQEBcbiB2b2lkIHhmcm02X2xvY2FsX3J4cG10dShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgbXR1KVxuIHtcbiBcdHN0cnVjdCBmbG93aTYgZmw2O1xuLVx0c3RydWN0IHNvY2sgKnNrID0gc2tiLVx1MDAzZXNrO1xuK1x0c3RydWN0IHNvY2sgKnNrID0gc2tiX3RvX2Z1bGxfc2soc2tiKTtcbitcbitcdGlmICghc2spXG4rXHRcdHJldHVybjtcbiBcbiBcdGZsNi5mbG93aTZfb2lmID0gc2stXHUwMDNlc2tfYm91bmRfZGV2X2lmO1xuIFx0Zmw2LmRhZGRyID0gaXB2Nl9oZHIoc2tiKS1cdTAwM2VkYWRkcjtcbkBAIC0zMSw3ICszNCwxMCBAQCB2b2lkIHhmcm02X2xvY2FsX2Vycm9yKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBtdHUpXG4ge1xuIFx0c3RydWN0IGZsb3dpNiBmbDY7XG4gXHRjb25zdCBzdHJ1Y3QgaXB2NmhkciAqaGRyO1xuLVx0c3RydWN0IHNvY2sgKnNrID0gc2tiLVx1MDAzZXNrO1xuK1x0c3RydWN0IHNvY2sgKnNrID0gc2tiX3RvX2Z1bGxfc2soc2tiKTtcbitcbitcdGlmICghc2spXG4rXHRcdHJldHVybjtcbiBcbiBcdGhkciA9IHNrYi1cdTAwM2VlbmNhcHN1bGF0aW9uID8gaW5uZXJfaXB2Nl9oZHIoc2tiKSA6IGlwdjZfaGRyKHNrYik7XG4gXHRmbDYuZmw2X2Rwb3J0ID0gaW5ldF9zayhzayktXHUwMDNlaW5ldF9kcG9ydDtcbmRpZmYgLS1naXQgYS9uZXQveGZybS9lc3BpbnRjcC5jIGIvbmV0L3hmcm0vZXNwaW50Y3AuY1xuaW5kZXggNjc0YWVkYzVhZjVhMi4uM2U3MmI5ZjA2N2I5YiAxMDA2NDRcbi0tLSBhL25ldC94ZnJtL2VzcGludGNwLmNcbisrKyBiL25ldC94ZnJtL2VzcGludGNwLmNcbkBAIC0zMCw3ICszMCwxMSBAQCBzdGF0aWMgdm9pZCBoYW5kbGVfZXNwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzb2NrICpzaylcbiB7XG4gXHRzdHJ1Y3QgdGNwX3NrYl9jYiAqdGNwX2NiID0gKHN0cnVjdCB0Y3Bfc2tiX2NiICopc2tiLVx1MDAzZWNiO1xuIFxuLVx0c2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXIoc2tiKTtcbitcdGlmICghc2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bChza2IpKSB7XG4rXHRcdFhGUk1fSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwgTElOVVhfTUlCX1hGUk1JTkVSUk9SKTtcbitcdFx0a2ZyZWVfc2tiKHNrYik7XG4rXHRcdHJldHVybjtcbitcdH1cbiBcbiBcdC8qIHJlc3RvcmUgSVAgQ0IsIHdlIG5lZWQgYXQgbGVhc3QgSVA2Q0ItXHUwMDNlbmhvZmYgKi9cbiBcdG1lbW1vdmUoc2tiLVx1MDAzZWNiLCBcdTAwMjZ0Y3BfY2ItXHUwMDNlaGVhZGVyLCBzaXplb2YodGNwX2NiLVx1MDAzZWhlYWRlcikpO1xuZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1faW5wdXQuYyBiL25ldC94ZnJtL3hmcm1faW5wdXQuY1xuaW5kZXggZWVjYWIzMzdiZDBhNy4uNWVkODdkNTEzOTJhNSAxMDA2NDRcbi0tLSBhL25ldC94ZnJtL3hmcm1faW5wdXQuY1xuKysrIGIvbmV0L3hmcm0veGZybV9pbnB1dC5jXG5AQCAtNDc0LDYgKzQ3NCw3IEBAIGludCB4ZnJtX2lucHV0KHN0cnVjdCBza19idWZmICpza2IsIGludCBuZXh0aGRyLCBfX2JlMzIgc3BpLCBpbnQgZW5jYXBfdHlwZSlcbiBcdHN0cnVjdCB4ZnJtX3N0YXRlICp4ID0gTlVMTDtcbiBcdHhmcm1fYWRkcmVzc190ICpkYWRkcjtcbiBcdHUzMiBtYXJrID0gc2tiLVx1MDAzZW1hcms7XG4rXHR1OCB4ZnJtX3Byb3RvID0gbmV4dGhkcjtcbiBcdHVuc2lnbmVkIGludCBmYW1pbHkgPSBBRl9VTlNQRUM7XG4gXHRpbnQgZGVjYXBzID0gMDtcbiBcdGludCBhc3luYyA9IDA7XG5AQCAtNDg1LDYgKzQ4Niw3IEBAIGludCB4ZnJtX2lucHV0KHN0cnVjdCBza19idWZmICpza2IsIGludCBuZXh0aGRyLCBfX2JlMzIgc3BpLCBpbnQgZW5jYXBfdHlwZSlcbiBcdGlmIChlbmNhcF90eXBlIFx1MDAzYyAwIHx8ICh4byBcdTAwMjZcdTAwMjYgKHhvLVx1MDAzZWZsYWdzIFx1MDAyNiBYRlJNX0dSTyB8fCBlbmNhcF90eXBlID09IDAgfHxcbiBcdFx0XHRcdCAgICAgIGVuY2FwX3R5cGUgPT0gVURQX0VOQ0FQX0VTUElOVURQKSkpIHtcbiBcdFx0eCA9IHhmcm1faW5wdXRfc3RhdGUoc2tiKTtcbitcdFx0eGZybV9wcm90byA9IHgtXHUwMDNldHlwZSA/IHgtXHUwMDNldHlwZS1cdTAwM2Vwcm90byA6IG5leHRoZHI7XG4gXG4gXHRcdGlmICh1bmxpa2VseSh4LVx1MDAzZWttLnN0YXRlICE9IFhGUk1fU1RBVEVfVkFMSUQpKSB7XG4gXHRcdFx0aWYgKHgtXHUwMDNla20uc3RhdGUgPT0gWEZSTV9TVEFURV9BQ1EpXG5AQCAtNTkyLDExICs1OTQsMTMgQEAgaW50IHhmcm1faW5wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG5leHRoZHIsIF9fYmUzMiBzcGksIGludCBlbmNhcF90eXBlKVxuIFxuIFx0XHR4ID0geGZybV9pbnB1dF9zdGF0ZV9sb29rdXAobmV0LCBtYXJrLCBkYWRkciwgc3BpLCBuZXh0aGRyLCBmYW1pbHkpO1xuIFx0XHRpZiAoeCA9PSBOVUxMKSB7XG4rXHRcdFx0eGZybV9wcm90byA9IG5leHRoZHI7XG4gXHRcdFx0c2VjcGF0aF9yZXNldChza2IpO1xuIFx0XHRcdFhGUk1fSU5DX1NUQVRTKG5ldCwgTElOVVhfTUlCX1hGUk1JTk5PU1RBVEVTKTtcbiBcdFx0XHR4ZnJtX2F1ZGl0X3N0YXRlX25vdGZvdW5kKHNrYiwgZmFtaWx5LCBzcGksIHNlcSk7XG4gXHRcdFx0Z290byBkcm9wO1xuIFx0XHR9XG4rXHRcdHhmcm1fcHJvdG8gPSB4LVx1MDAzZXR5cGUgPyB4LVx1MDAzZXR5cGUtXHUwMDNlcHJvdG8gOiBuZXh0aGRyO1xuIFxuIFx0XHRpZiAodW5saWtlbHkoeC1cdTAwM2VkaXIgXHUwMDI2XHUwMDI2IHgtXHUwMDNlZGlyICE9IFhGUk1fU0FfRElSX0lOKSkge1xuIFx0XHRcdHNlY3BhdGhfcmVzZXQoc2tiKTtcbkBAIC02MDQsNiArNjA4LDcgQEAgaW50IHhmcm1faW5wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG5leHRoZHIsIF9fYmUzMiBzcGksIGludCBlbmNhcF90eXBlKVxuIFx0XHRcdHhmcm1fYXVkaXRfc3RhdGVfbm90Zm91bmQoc2tiLCBmYW1pbHksIHNwaSwgc2VxKTtcbiBcdFx0XHR4ZnJtX3N0YXRlX3B1dCh4KTtcbiBcdFx0XHR4ID0gTlVMTDtcbitcdFx0XHR4ZnJtX3Byb3RvID0gbmV4dGhkcjtcbiBcdFx0XHRnb3RvIGRyb3A7XG4gXHRcdH1cbiBcbkBAIC03MjgsNyArNzMzLDcgQEAgaW50IHhmcm1faW5wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG5leHRoZHIsIF9fYmUzMiBzcGksIGludCBlbmNhcF90eXBlKVxuIFx0fSB3aGlsZSAoIWVycik7XG4gXG4gXHRyY3VfcmVhZF9sb2NrKCk7XG4tXHRlcnIgPSB4ZnJtX3Jjdl9jYihza2IsIGZhbWlseSwgeC1cdTAwM2V0eXBlLVx1MDAzZXByb3RvLCAwKTtcbitcdGVyciA9IHhmcm1fcmN2X2NiKHNrYiwgZmFtaWx5LCB4ZnJtX3Byb3RvLCAwKTtcbiBcdGlmIChlcnIpIHtcbiBcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXHRcdGdvdG8gZHJvcDtcbkBAIC03NTMsNyArNzU4LDcgQEAgaW50IHhmcm1faW5wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG5leHRoZHIsIF9fYmUzMiBzcGksIGludCBlbmNhcF90eXBlKVxuIFx0XHRcdHhmcm1fZ3JvID0geG8tXHUwMDNlZmxhZ3MgXHUwMDI2IFhGUk1fR1JPO1xuIFxuIFx0XHRlcnIgPSAtRUFGTk9TVVBQT1JUO1xuLVx0XHRhZmluZm8gPSB4ZnJtX3N0YXRlX2FmaW5mb19nZXRfcmN1KHgtXHUwMDNlcHJvcHMuZmFtaWx5KTtcbitcdFx0YWZpbmZvID0geGZybV9zdGF0ZV9hZmluZm9fZ2V0X3JjdShmYW1pbHkpO1xuIFx0XHRpZiAobGlrZWx5KGFmaW5mbykpXG4gXHRcdFx0ZXJyID0gYWZpbmZvLVx1MDAzZXRyYW5zcG9ydF9maW5pc2goc2tiLCB4ZnJtX2dybyB8fCBhc3luYyk7XG4gXHRcdGlmICh4ZnJtX2dybykge1xuQEAgLTc3Niw3ICs3ODEsNyBAQCBpbnQgeGZybV9pbnB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbmV4dGhkciwgX19iZTMyIHNwaSwgaW50IGVuY2FwX3R5cGUpXG4gZHJvcDpcbiBcdGlmIChhc3luYylcbiBcdFx0ZGV2X3B1dChkZXYpO1xuLVx0eGZybV9yY3ZfY2Ioc2tiLCBmYW1pbHksIHggXHUwMDI2XHUwMDI2IHgtXHUwMDNldHlwZSA/IHgtXHUwMDNldHlwZS1cdTAwM2Vwcm90byA6IG5leHRoZHIsIC0xKTtcbitcdHhmcm1fcmN2X2NiKHNrYiwgZmFtaWx5LCB4ZnJtX3Byb3RvLCAtMSk7XG4gXHRrZnJlZV9za2Ioc2tiKTtcbiBcdHJldHVybiAwO1xuIH1cbkBAIC04MDAsMTIgKzgwNSwxNyBAQCBzdGF0aWMgdm9pZCB4ZnJtX3RyYW5zX3JlaW5qZWN0KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnRyYW5zLVx1MDAzZXF1ZXVlX2xvY2spO1xuIFxuIFx0bG9jYWxfYmhfZGlzYWJsZSgpO1xuK1x0cmN1X3JlYWRfbG9jaygpO1xuIFx0d2hpbGUgKChza2IgPSBfX3NrYl9kZXF1ZXVlKFx1MDAyNnF1ZXVlKSkpIHtcbiBcdFx0c3RydWN0IG5ldCAqbmV0ID0gWEZSTV9UUkFOU19TS0JfQ0Ioc2tiKS1cdTAwM2VuZXQ7XG4rXHRcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBza2ItXHUwMDNlZGV2O1xuIFxuIFx0XHRYRlJNX1RSQU5TX1NLQl9DQihza2IpLVx1MDAzZWZpbmlzaChuZXQsIE5VTEwsIHNrYik7XG4rXHRcdGlmIChkZXYpXG4rXHRcdFx0ZGV2X3B1dChkZXYpO1xuIFx0XHRwdXRfbmV0KG5ldCk7XG4gXHR9XG4rXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdGxvY2FsX2JoX2VuYWJsZSgpO1xuIH1cbiBcbkBAIC04MjEsMTIgKzgzMSwxOCBAQCBpbnQgeGZybV90cmFuc19xdWV1ZV9uZXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0aWYgKHNrYl9xdWV1ZV9sZW4oXHUwMDI2dHJhbnMtXHUwMDNlcXVldWUpIFx1MDAzZT0gUkVBRF9PTkNFKG5ldF9ob3RkYXRhLm1heF9iYWNrbG9nKSlcbiBcdFx0cmV0dXJuIC1FTk9CVUZTO1xuIFxuK1x0aWYgKHNrYl9kc3Qoc2tiKSBcdTAwMjZcdTAwMjYgIXNrYl9kc3RfZm9yY2Uoc2tiKSlcbitcdFx0cmV0dXJuIC1FSE9TVFVOUkVBQ0g7XG4rXG4gXHRCVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCB4ZnJtX3RyYW5zX2NiKSBcdTAwM2Ugc2l6ZW9mKHNrYi1cdTAwM2VjYikpO1xuIFxuIFx0aG9sZF9uZXQgPSBtYXliZV9nZXRfbmV0KG5ldCk7XG4gXHRpZiAoIWhvbGRfbmV0KVxuIFx0XHRyZXR1cm4gLUVOT0RFVjtcbiBcbitcdGlmIChza2ItXHUwMDNlZGV2KVxuK1x0XHRkZXZfaG9sZChza2ItXHUwMDNlZGV2KTtcbitcbiBcdFhGUk1fVFJBTlNfU0tCX0NCKHNrYiktXHUwMDNlZmluaXNoID0gZmluaXNoO1xuIFx0WEZSTV9UUkFOU19TS0JfQ0Ioc2tiKS1cdTAwM2VuZXQgPSBob2xkX25ldDtcbiBcdHNwaW5fbG9ja19iaChcdTAwMjZ0cmFucy1cdTAwM2VxdWV1ZV9sb2NrKTtcbmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX2lwdGZzLmMgYi9uZXQveGZybS94ZnJtX2lwdGZzLmNcbmluZGV4IDU5N2FlZGVhYzI2ZWIuLjY5MjA5NDBhMzViNDkgMTAwNjQ0XG4tLS0gYS9uZXQveGZybS94ZnJtX2lwdGZzLmNcbisrKyBiL25ldC94ZnJtL3hmcm1faXB0ZnMuY1xuQEAgLTQxNiw2ICs0MTYsMTQgQEAgc3RhdGljIGJvb2wgaXB0ZnNfc2tiX2Nhbl9hZGRfZnJhZ3MoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdGlmIChza2JfaGFzX2ZyYWdfbGlzdChza2IpIHx8IHNrYi1cdTAwM2VwcF9yZWN5Y2xlICE9IHdhbGstXHUwMDNlcHBfcmVjeWNsZSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuK1x0LyogUmVqZWN0IGFuIEBvZmZzZXQgdGhhdCBpcyBhdCBvciBiZXlvbmQgdGhlIGVuZCBvZiB0aGUgd2FsaydzIGRhdGFcbitcdCAqIGJlZm9yZSBjYWxsaW5nIGlwdGZzX3NrYl9yZXNldF9mcmFnX3dhbGsoKSwgd2hvc2UgZnJhZ21lbnQtYWR2YW5jZVxuK1x0ICogbG9vcCBpcyBvdGhlcndpc2UgdW5ib3VuZGVkIGFuZCB3b3VsZCBpbmRleCBwYXN0IHdhbGstXHUwMDNlZnJhZ3NbXS5cbitcdCAqIFRoaXMgbWlycm9ycyB0aGUgZ3VhcmQgYWxyZWFkeSBwcmVzZW50IGluIGlwdGZzX3NrYl9hZGRfZnJhZ3MoKS5cbitcdCAqL1xuK1x0aWYgKCF3YWxrLVx1MDAzZW5yX2ZyYWdzIHx8IG9mZnNldCBcdTAwM2U9IHdhbGstXHUwMDNldG90YWwgKyB3YWxrLVx1MDAzZWluaXRpYWxfb2Zmc2V0KVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4gXHQvKiBNYWtlIG9mZnNldCByZWxhdGl2ZSB0byBjdXJyZW50IGZyYWcgYWZ0ZXIgc2V0dGluZyB0aGF0ICovXG4gXHRvZmZzZXQgPSBpcHRmc19za2JfcmVzZXRfZnJhZ193YWxrKHdhbGssIG9mZnNldCk7XG4gXG5AQCAtODIwLDggKzgyOCw4IEBAIHN0YXRpYyB1MzIgaXB0ZnNfcmVhc3NlbV9jb250KHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsIHU2NCBzZXEsXG4gXHRcdCAqIGFsbG9jYXRlIGFuIGluIHByb2dyZXNzIHNrYlxuIFx0XHQgKi9cbiBcdFx0aXByZW1haW4gPSBfX2lwdGZzX2lwbGVuKHh0ZnMtXHUwMDNlcmFfcnVudCk7XG4tXHRcdGlmIChpcHJlbWFpbiBcdTAwM2Mgc2l6ZW9mKHh0ZnMtXHUwMDNlcmFfcnVudCkpIHtcbi1cdFx0XHQvKiBsZW5ndGggaGFzIHRvIGJlIGF0IGxlYXN0IHJ1bnRzaXplIGxhcmdlICovXG4rXHRcdGlmIChpcHJlbWFpbiBcdTAwM2MgX19pcHRmc19pcGhsZW4oeHRmcy1cdTAwM2VyYV9ydW50KSkge1xuK1x0XHRcdC8qIGxlbmd0aCBoYXMgdG8gYmUgYXQgbGVhc3QgdGhlIElQIGhlYWRlciBzaXplICovXG4gXHRcdFx0WEZSTV9JTkNfU1RBVFMoeHNfbmV0KHh0ZnMtXHUwMDNleCksXG4gXHRcdFx0XHQgICAgICAgTElOVVhfTUlCX1hGUk1JTklQVEZTRVJST1IpO1xuIFx0XHRcdGdvdG8gYWJhbmRvbjtcbmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX3BvbGljeS5jIGIvbmV0L3hmcm0veGZybV9wb2xpY3kuY1xuaW5kZXggOTMyYTMxM2I5NDYwYS4uNTEzYzlmMjI4MzM0NyAxMDA2NDRcbi0tLSBhL25ldC94ZnJtL3hmcm1fcG9saWN5LmNcbisrKyBiL25ldC94ZnJtL3hmcm1fcG9saWN5LmNcbkBAIC0yNzcwLDkgKzI3NzAsMTIgQEAgc3RhdGljIHN0cnVjdCBkc3RfZW50cnkgKnhmcm1fYnVuZGxlX2NyZWF0ZShzdHJ1Y3QgeGZybV9wb2xpY3kgKnBvbGljeSxcbiBcdHhkc3QwLVx1MDAzZXBhdGggPSBkc3Q7XG4gXG4gXHRlcnIgPSAtRU5PREVWO1xuLVx0ZGV2ID0gZHN0LVx1MDAzZWRldjtcbi1cdGlmICghZGV2KVxuK1x0cmN1X3JlYWRfbG9jaygpO1xuK1x0ZGV2ID0gZHN0X2Rldl9yY3UoZHN0KTtcbitcdGlmICghZGV2KSB7XG4rXHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0XHRnb3RvIGZyZWVfZHN0O1xuK1x0fVxuIFxuIFx0eGZybV9pbml0X3BhdGgoeGRzdDAsIGRzdCwgbmZoZWFkZXJfbGVuKTtcbiBcdHhmcm1faW5pdF9wbXR1KGJ1bmRsZSwgbngpO1xuQEAgLTI3ODAsOCArMjc4MywxMCBAQCBzdGF0aWMgc3RydWN0IGRzdF9lbnRyeSAqeGZybV9idW5kbGVfY3JlYXRlKHN0cnVjdCB4ZnJtX3BvbGljeSAqcG9saWN5LFxuIFx0Zm9yICh4ZHN0X3ByZXYgPSB4ZHN0MDsgeGRzdF9wcmV2ICE9IChzdHJ1Y3QgeGZybV9kc3QgKilkc3Q7XG4gXHQgICAgIHhkc3RfcHJldiA9IChzdHJ1Y3QgeGZybV9kc3QgKikgeGZybV9kc3RfY2hpbGQoXHUwMDI2eGRzdF9wcmV2LVx1MDAzZXUuZHN0KSkge1xuIFx0XHRlcnIgPSB4ZnJtX2ZpbGxfZHN0KHhkc3RfcHJldiwgZGV2LCBmbCk7XG4tXHRcdGlmIChlcnIpXG4rXHRcdGlmIChlcnIpIHtcbitcdFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdFx0XHRnb3RvIGZyZWVfZHN0O1xuK1x0XHR9XG4gXG4gXHRcdHhkc3RfcHJldi1cdTAwM2V1LmRzdC5oZWFkZXJfbGVuID0gaGVhZGVyX2xlbjtcbiBcdFx0eGRzdF9wcmV2LVx1MDAzZXUuZHN0LnRyYWlsZXJfbGVuID0gdHJhaWxlcl9sZW47XG5AQCAtMjc4OSw2ICsyNzk0LDcgQEAgc3RhdGljIHN0cnVjdCBkc3RfZW50cnkgKnhmcm1fYnVuZGxlX2NyZWF0ZShzdHJ1Y3QgeGZybV9wb2xpY3kgKnBvbGljeSxcbiBcdFx0dHJhaWxlcl9sZW4gLT0geGRzdF9wcmV2LVx1MDAzZXUuZHN0Lnhmcm0tXHUwMDNlcHJvcHMudHJhaWxlcl9sZW47XG4gXHR9XG4gXG4rXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdHJldHVybiBcdTAwMjZ4ZHN0MC1cdTAwM2V1LmRzdDtcbiBcbiBwdXRfc3RhdGVzOlxuQEAgLTMwNTgsMTEgKzMwNjQsMTUgQEAgc3RhdGljIHN0cnVjdCB4ZnJtX2RzdCAqeGZybV9jcmVhdGVfZHVtbXlfYnVuZGxlKHN0cnVjdCBuZXQgKm5ldCxcbiBcdHhmcm1faW5pdF9wYXRoKChzdHJ1Y3QgeGZybV9kc3QgKilkc3QxLCBkc3QsIDApO1xuIFxuIFx0ZXJyID0gLUVOT0RFVjtcbi1cdGRldiA9IGRzdC1cdTAwM2VkZXY7XG4tXHRpZiAoIWRldilcbitcdHJjdV9yZWFkX2xvY2soKTtcbitcdGRldiA9IGRzdF9kZXZfcmN1KGRzdCk7XG4rXHRpZiAoIWRldikge1xuK1x0XHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdFx0Z290byBmcmVlX2RzdDtcbitcdH1cbiBcbiBcdGVyciA9IHhmcm1fZmlsbF9kc3QoeGRzdCwgZGV2LCBmbCk7XG4rXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdGlmIChlcnIpXG4gXHRcdGdvdG8gZnJlZV9kc3Q7XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV9zdGF0ZS5jIGIvbmV0L3hmcm0veGZybV9zdGF0ZS5jXG5pbmRleCAzNmE0ZjY3OTNlZGVmLi5lNDVhYTFlZDViOTY1IDEwMDY0NFxuLS0tIGEvbmV0L3hmcm0veGZybV9zdGF0ZS5jXG4rKysgYi9uZXQveGZybS94ZnJtX3N0YXRlLmNcbkBAIC0yMjYsNiArMjI2LDcgQEAgc3RhdGljIHN0cnVjdCB4ZnJtX3N0YXRlX2FmaW5mbyBfX3JjdSAqeGZybV9zdGF0ZV9hZmluZm9bTlBST1RPXTtcbiBcbiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHhmcm1fc3RhdGVfZ2NfbG9jayk7XG4gc3RhdGljIERFRklORV9TUElOTE9DSyh4ZnJtX3N0YXRlX2Rldl9nY19sb2NrKTtcbitzdGF0aWMgREVGSU5FX01VVEVYKHhmcm1fc3RhdGVfZ2NfbXV0ZXgpO1xuIFxuIGludCBfX3hmcm1fc3RhdGVfZGVsZXRlKHN0cnVjdCB4ZnJtX3N0YXRlICp4KTtcbiBcbkBAIC02MzIsOCArNjMzLDEwIEBAIHN0YXRpYyB2b2lkIHhmcm1fc3RhdGVfZ2NfdGFzayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gXG4gXHRzeW5jaHJvbml6ZV9yY3UoKTtcbiBcbitcdG11dGV4X2xvY2soXHUwMDI2eGZybV9zdGF0ZV9nY19tdXRleCk7XG4gXHRobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHgsIHRtcCwgXHUwMDI2Z2NfbGlzdCwgZ2NsaXN0KVxuIFx0XHR4ZnJtX3N0YXRlX2djX2Rlc3Ryb3koeCk7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2eGZybV9zdGF0ZV9nY19tdXRleCk7XG4gfVxuIFxuIHN0YXRpYyBlbnVtIGhydGltZXJfcmVzdGFydCB4ZnJtX3RpbWVyX2hhbmRsZXIoc3RydWN0IGhydGltZXIgKm1lKVxuQEAgLTgyMyw5ICs4MjYsOSBAQCBpbnQgX194ZnJtX3N0YXRlX2RlbGV0ZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeClcbiBcdFx0aWYgKCFobGlzdF91bmhhc2hlZChcdTAwMjZ4LVx1MDAzZWJ5c2VxKSlcbiBcdFx0XHRobGlzdF9kZWxfaW5pdF9yY3UoXHUwMDI2eC1cdTAwM2VieXNlcSk7XG4gXHRcdGlmICghaGxpc3RfdW5oYXNoZWQoXHUwMDI2eC1cdTAwM2VzdGF0ZV9jYWNoZSkpXG4tXHRcdFx0aGxpc3RfZGVsX3JjdShcdTAwMjZ4LVx1MDAzZXN0YXRlX2NhY2hlKTtcbitcdFx0XHRobGlzdF9kZWxfaW5pdF9yY3UoXHUwMDI2eC1cdTAwM2VzdGF0ZV9jYWNoZSk7XG4gXHRcdGlmICghaGxpc3RfdW5oYXNoZWQoXHUwMDI2eC1cdTAwM2VzdGF0ZV9jYWNoZV9pbnB1dCkpXG4tXHRcdFx0aGxpc3RfZGVsX3JjdShcdTAwMjZ4LVx1MDAzZXN0YXRlX2NhY2hlX2lucHV0KTtcbitcdFx0XHRobGlzdF9kZWxfaW5pdF9yY3UoXHUwMDI2eC1cdTAwM2VzdGF0ZV9jYWNoZV9pbnB1dCk7XG4gXG4gXHRcdGlmICghaGxpc3RfdW5oYXNoZWQoXHUwMDI2eC1cdTAwM2VieXNwaSkpXG4gXHRcdFx0aGxpc3RfZGVsX2luaXRfcmN1KFx1MDAyNngtXHUwMDNlYnlzcGkpO1xuQEAgLTEwMDAsNiArMTAwMyw3IEBAIGludCB4ZnJtX2Rldl9zdGF0ZV9mbHVzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGJvb2wgdGFza192YWxpXG4gb3V0OlxuIFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bmV0LVx1MDAzZXhmcm0ueGZybV9zdGF0ZV9sb2NrKTtcbiBcbitcdG11dGV4X2xvY2soXHUwMDI2eGZybV9zdGF0ZV9nY19tdXRleCk7XG4gXHRzcGluX2xvY2tfYmgoXHUwMDI2eGZybV9zdGF0ZV9kZXZfZ2NfbG9jayk7XG4gcmVzdGFydF9nYzpcbiBcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoeCwgdG1wLCBcdTAwMjZ4ZnJtX3N0YXRlX2Rldl9nY19saXN0LCBkZXZfZ2NsaXN0KSB7XG5AQCAtMTAxNCw2ICsxMDE4LDcgQEAgaW50IHhmcm1fZGV2X3N0YXRlX2ZsdXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCB0YXNrX3ZhbGlcbiBcbiBcdH1cbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnhmcm1fc3RhdGVfZGV2X2djX2xvY2spO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnhmcm1fc3RhdGVfZ2NfbXV0ZXgpO1xuIFxuIFx0eGZybV9mbHVzaF9nYygpO1xuIFxuZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1fdXNlci5jIGIvbmV0L3hmcm0veGZybV91c2VyLmNcbmluZGV4IDYyNjZhOTJjZjMwMjAuLmEyNTg3YzdlNzk2YjQgMTAwNjQ0XG4tLS0gYS9uZXQveGZybS94ZnJtX3VzZXIuY1xuKysrIGIvbmV0L3hmcm0veGZybV91c2VyLmNcbkBAIC0xODc3LDcgKzE4NzcsNiBAQCBzdGF0aWMgaW50IHhmcm1fYWxsb2NfdXNlcnNwaShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbiBcdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrYi1cdTAwM2Vzayk7XG4gXHRzdHJ1Y3QgeGZybV9zdGF0ZSAqeDtcbiBcdHN0cnVjdCB4ZnJtX3VzZXJzcGlfaW5mbyAqcDtcbi1cdHN0cnVjdCB4ZnJtX3RyYW5zbGF0b3IgKnh0cjtcbiBcdHN0cnVjdCBza19idWZmICpyZXNwX3NrYjtcbiBcdHhmcm1fYWRkcmVzc190ICpkYWRkcjtcbiBcdGludCBmYW1pbHk7XG5AQCAtMTk0MywxNyArMTk0Miw2IEBAIHN0YXRpYyBpbnQgeGZybV9hbGxvY191c2Vyc3BpKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuIFx0XHRnb3RvIG91dDtcbiBcdH1cbiBcbi1cdHh0ciA9IHhmcm1fZ2V0X3RyYW5zbGF0b3IoKTtcbi1cdGlmICh4dHIpIHtcbi1cdFx0ZXJyID0geHRyLVx1MDAzZWFsbG9jX2NvbXBhdChza2IsIG5sbXNnX2hkcihza2IpKTtcbi1cbi1cdFx0eGZybV9wdXRfdHJhbnNsYXRvcih4dHIpO1xuLVx0XHRpZiAoZXJyKSB7XG4tXHRcdFx0a2ZyZWVfc2tiKHJlc3Bfc2tiKTtcbi1cdFx0XHRnb3RvIG91dDtcbi1cdFx0fVxuLVx0fVxuLVxuIFx0ZXJyID0gbmxtc2dfdW5pY2FzdCh4ZnJtX25ldF9ubHNrKG5ldCwgc2tiKSwgcmVzcF9za2IsIE5FVExJTktfQ0Ioc2tiKS5wb3J0aWQpO1xuIFxuIG91dDpcbkBAIC0zMzM3LDcgKzMzMjUsMTEgQEAgc3RhdGljIGludCB4ZnJtX3NlbmRfbWlncmF0ZV9zdGF0ZShzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRcdHJldHVybiBlcnI7XG4gXHR9XG4gXG4tXHRyZXR1cm4geGZybV9ubG1zZ19tdWx0aWNhc3QobmV0LCBza2IsIDAsIFhGUk1OTEdSUF9NSUdSQVRFKTtcbitcdHJjdV9yZWFkX2xvY2soKTtcbitcdGVyciA9IHhmcm1fbmxtc2dfbXVsdGljYXN0KG5ldCwgc2tiLCAwLCBYRlJNTkxHUlBfTUlHUkFURSk7XG4rXHRyY3VfcmVhZF91bmxvY2soKTtcbitcbitcdHJldHVybiBlcnI7XG4gfVxuIFxuIHN0YXRpYyBpbnQgeGZybV9kb19taWdyYXRlX3N0YXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTM6NTQ6MzguNDMwNTAwNTRaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTA1NDg2OTQwNjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gRXZhbHVhdGlvbjogUGF0Y2ggU2VyaWVzIEFuYWx5c2lzKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgZG93biB0aGlzIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lIGlmIGl0IHdhcnJhbnRzIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gTXkgZ29hbCBpcyB0byBiZSBhcyB0aG9yb3VnaCBhcyBwb3NzaWJsZSwgZ2l2ZW4gbXkgZXhwZXJpZW5jZS5cblxuRmlyc3QsIEkgbmVlZCB0byBhbmFseXplIGVhY2ggY2hhbmdlIHdpdGhpbiB0aGUgZGlmZiB0byBzZWUgaWYgYW55IGludHJvZHVjZSBvciBleHBvc2UgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBJIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGVzZSByaXNrcyBhbmQgaG93IEtNU0FOIGlzIGRlc2lnbmVkIHRvIGNhdGNoIHRoZW0uXG5cbiogICBgbmV0L2lwdjQvZXNwNC5jYCBcdTAwMjYgYG5ldC9pcHY2L2VzcDYuY2A6IFRoZSBhZGRpdGlvbiBvZiBgc2tiX3pjb3B5X2Rvd25ncmFkZV9tYW5hZ2VkKHNrYilgIGlzIGFib3V0IHBhZ2UgcmVmY291bnRpbmcgb24gemVyb2NvcHkgbWFuYWdlZCBmcmFncy4gVGhpcyBzb3VuZHMgbGlrZSBpdCdzIG1hbmFnaW5nIGV4aXN0aW5nIG1lbW9yeSwgbm90IGFsbG9jYXRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuIE5vIHJlZCBmbGFncyBoZXJlLlxuXG4qICAgYG5ldC9pcHY2L3hmcm02X291dHB1dC5jYDogUmVwbGFjaW5nIGBza2ItXHUwMDNlc2tgIHdpdGggYSBgc2tiX3RvX2Z1bGxfc2tgIGNoZWNrIGlzIGEgZ29vZCBwcmFjdGljZSB0byBhdm9pZCBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2VzIG9yIGhhbmRsaW5nIG9mIFwibm9uLWZ1bGxcIiBzb2NrZXRzLiBUaGlzIHNlZW1zIGxpa2UgYSBzYWZldHkgaW1wcm92ZW1lbnQgcmF0aGVyIHRoYW4gYSBzb3VyY2Ugb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuXG5cbiogICBgbmV0L3hmcm0vZXNwaW50Y3AuY2A6IFVzaW5nIGBza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcl9jYXJlZnVsKHNrYilgIGFkZHMgYSBib3VuZCBjaGVjayBvbiB0aGUgdHJhbnNwb3J0IGhlYWRlciByZXNldC4gVGhpcyBhZGRzIGFub3RoZXIgbGF5ZXIgb2Ygc2VjdXJpdHkgdG8gcHJldmVudCBhbiBvdmVyZmxvdywgaW5zdGVhZCBvZiBhbGxvY2F0aW5nIGEgY2h1bmsgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuXG5cbiogICBgbmV0L3hmcm0veGZybV9pbnB1dC5jYDogVGhlIGNoYW5nZSByZWdhcmRpbmcgYHhmcm1fcHJvdG9gIGxvb2tzIGxpa2UgcHJvcGVyIGluaXRpYWxpemF0aW9uIGFuZCB0cmFja2luZyBvZiBhIHZhcmlhYmxlLiBUaGlzIGFwcGVhcnMgdG8gYmUgYSBidWcgZml4IGZvciBwcm9wZXIgdXNhZ2Ugb2YgY2FsbGJhY2tzIGFuZCBhZmluZm8gbG9va3VwLCB3aGljaCBzaG91bGQgbm90IGludHJvZHVjZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlIHJlZmNvdW50aW5nIGFuZCBsb2NraW5nIHdpdGggYHNrYl9kc3RfZm9yY2VgLCBgZGV2X2hvbGRgLCBgZGV2X3B1dGAsIGFuZCBSQ1UgcmVhZCBsb2NraW5nIGFyZSBhbHNvIHBvc2l0aXZlIHNpZ25zLlxuXG4qICAgYG5ldC94ZnJtL3hmcm1faXB0ZnMuY2A6IEJvdW5kcyBjaGVja3MsIGVzcGVjaWFsbHkgdGhlIG9uZXMgcHJldmVudGluZyBvdXQtb2YtYm91bmRzIGZyYWcgaW5kZXhpbmcgYW5kIHJ1bnQgY2hlY2tzLCBhcmUgY3JpdGljYWwgZm9yIHByZXZlbnRpbmcgS0FTQU4gaXNzdWVzLCBhbmQgSSBkb24ndCBzZWUgYW55IHNpZ24gb2YgaW50cm9kdWNpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuXG5cbiogICBgbmV0L3hmcm0veGZybV9wb2xpY3kuY2A6IFJDVSByZWFkIGxvY2tpbmcgYXJvdW5kIGBkc3RfZGV2X3JjdShkc3QpYCBpcyBlc3NlbnRpYWwgZm9yIHRocmVhZCBzYWZldHkuIFRoaXMgcHJvdGVjdHMgYWdhaW5zdCB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zIGFuZCByYWNlcywgd2hpY2ggYXJlIGNvbW1vbiBLQVNBTiBwaXRmYWxscy5cblxuKiAgIGBuZXQveGZybS94ZnJtX3N0YXRlLmNgOiBNdXRleCBsb2NraW5nIGZvciBHQyBwcm90ZWN0aW9uIGFuZCB0aGUgdXNlIG9mIGBobGlzdF9kZWxfaW5pdF9yY3VgIGFyZSBhYm91dCBjb25jdXJyZW5jeSBhbmQgZGF0YSBzdHJ1Y3R1cmUgc2FmZXR5LCBub3QgdW5pbml0aWFsaXplZCBtZW1vcnkuXG5cbiogICBgbmV0L3hmcm0veGZybV91c2VyLmNgOiBUaGUgcmVtb3ZhbCBvZiB0aGUgdHJhbnNsYXRvciBhbGxvY19jb21wYXQgYmxvY2sgYW5kIFJDVSByZWFkIGxvY2tpbmcgYXJvdW5kIG11bHRpY2FzdCBhcmUgYWJvdXQgY29kZSBjbGVhbnVwIGFuZCBjb25jdXJyZW5jeSwgd2hpY2ggYXJlIGdvb2QgdGhpbmdzLiBUaGV5IHdvbid0IGNhdXNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxuXG5BZnRlciBhIGRldGFpbGVkIHJldmlldywgSSdtIGNvbmZpZGVudCB0aGF0IG5vbmUgb2YgdGhlc2UgY2hhbmdlcyBkaXJlY3RseSBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgZGF0YSB0byB1c2Vyc3BhY2UuIFRoZSBtb2RpZmljYXRpb25zIGFyZSBwcmltYXJpbHkgZm9jdXNlZCBvbiByZWZlcmVuY2UgY291bnRpbmcsIGxvY2tpbmcgKFJDVSBhbmQgbXV0ZXgpLCBib3VuZHMgY2hlY2tzICh3aGljaCBLQVNBTiBoYW5kbGVzKSwgYW5kIGFkZHJlc3NpbmcgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgbnVsbCBkZXJlZmVyZW5jZXMsIGFuZCBzb2NrZXQgdHlwZS1yZWxhdGVkIGlzc3Vlcy4gVGhpcyBhbGwgcG9pbnRzIHRvIGEgaGlnaC1xdWFsaXR5IHBhdGNoIHNlcmllcy5cblxuVGhlcmVmb3JlLCB0aGUgYE5lZWRzS01TQU5gIGZsYWcgc2hvdWxkIGRlZmluaXRlbHkgYmUgYGZhbHNlYC4gSSdsbCBub3cgcHJlcGFyZSB0aGUgYHNldC1yZXN1bHRzYCB0b29sIHdpdGggdGhhdCB2YWx1ZSBhbmQgYSBkZXRhaWxlZCBgS01TQU5SZWFzb25pbmdgIHRvIGV4cGxhaW4gbXkgcmF0aW9uYWxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NDc3LCJPdXRwdXRUb2tlbnMiOjQ3OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2ODksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxMzo1NDo0OC45NzkxOTc1MjdaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjYyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBjb250YWlucyBzZXZlcmFsIGJ1ZyBmaXhlcyBhbmQgcmVmYWN0b3JpbmdzIGFjcm9zcyBYRlJNIGFuZCBJUHNlYyBuZXR3b3JraW5nIHN1YnN5c3RlbXM6XFxuMS4gYGVzcDQuY2AgYW5kIGBlc3A2LmNgOiBBZGRzIGBza2JfemNvcHlfZG93bmdyYWRlX21hbmFnZWQoc2tiKWAgdG8gYmFsYW5jZSByZWZjb3VudHMgb24gemVyb2NvcHkgbWFuYWdlZCBmcmFncyB3aGVuIG11dGF0aW5nIHRoZSBmcmFnIGFycmF5IChyZWZjb3VudGluZyAvIFVBRiBwcmV2ZW50aW9uLCBjb3ZlcmVkIGJ5IEtBU0FOL3JlZmNvdW50IHRyYWNraW5nKS5cXG4yLiBgeGZybTZfb3V0cHV0LmNgOiBWYWxpZGF0ZXMgc29ja2V0cyB1c2luZyBgc2tiX3RvX2Z1bGxfc2soKWAgdG8gYXZvaWQgb3BlcmF0aW5nIG9uIG5vbi1mdWxsIHNvY2tldHMgb3IgTlVMTCBkZXJlZmVyZW5jZXMgKE5VTEwgcG9pbnRlciAvIHR5cGUgY29uZnVzaW9uKS5cXG4zLiBgZXNwaW50Y3AuY2A6IFVzZXMgYHNrYl9yZXNldF90cmFuc3BvcnRfaGVhZGVyX2NhcmVmdWwoKWAgdG8gdmFsaWRhdGUgdHJhbnNwb3J0IGhlYWRlciBib3VuZHMgYmVmb3JlIHJlc2V0dGluZyAoT09CIHByZXZlbnRpb24sIGNvdmVyZWQgYnkgS0FTQU4pLlxcbjQuIGB4ZnJtX2lucHV0LmNgOiBGaXhlcyBwcm90b2NvbCB0cmFja2luZyAoYHhmcm1fcHJvdG9gKSwgaGFuZGxlcyBkZXZpY2UgcmVmY291bnRzIGFuZCBSQ1UgbG9ja2luZyBkdXJpbmcgcmVpbmplY3Rpb24sIGFuZCBlbnN1cmVzIGRzdCBlbnRyeSBwZXJzaXN0ZW5jZSAoYHNrYl9kc3RfZm9yY2VgKS4gQWxsIHZhcmlhYmxlcyAoYHhmcm1fcHJvdG9gKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgd2l0aCBkZWZhdWx0IHZhbHVlcy5cXG41LiBgeGZybV9pcHRmcy5jYDogQWRkcyBib3VuZHMgY2hlY2tpbmcgb24gZnJhZyB3YWxrIG9mZnNldCB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgaW5kZXhpbmcgaW4gYGlwdGZzX3NrYl9yZXNldF9mcmFnX3dhbGsoKWAsIGFuZCBjb3JyZWN0cyBydW50IHNpemUgdmVyaWZpY2F0aW9uIGFnYWluc3QgSVAgaGVhZGVyIGxlbmd0aCAoT09CIHJlYWRzLCBjb3ZlcmVkIGJ5IEtBU0FOKS5cXG42LiBgeGZybV9wb2xpY3kuY2AsIGB4ZnJtX3N0YXRlLmNgLCBgeGZybV91c2VyLmNgOiBBZGRzIG1pc3NpbmcgUkNVIHJlYWQgbG9ja3MgKGBkc3RfZGV2X3JjdWAsIG11bHRpY2FzdCksIGFkZHMgYSBHQyBtdXRleCB0byBzZXJpYWxpemUgc3RhdGUgZGVzdHJ1Y3Rpb24sIGFuZCBmaXhlcyBsaXN0IGRlbGV0aW9uIGluaXRpYWxpemF0aW9uIChgaGxpc3RfZGVsX2luaXRfcmN1YCkuXFxuXFxuTm9uZSBvZiB0aGUgY2hhbmdlcyBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIG1lbW9yeSwga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcywgb3IgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gVGhlIHJpc2tzIGFkZHJlc3NlZCAob3V0LW9mLWJvdW5kcyBhY2Nlc3MsIHJlZmNvdW50aW5nLCB1c2UtYWZ0ZXItZnJlZSwgY29uY3VycmVuY3kvUkNVKSBhcmUgY292ZXJlZCBieSBLQVNBTiwgUFJPVkVfUkNVLCBhbmQgc3RhbmRhcmQgZGVidWcgY2hlY2tlcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIGNvbnRhaW5zIHNldmVyYWwgYnVnIGZpeGVzIGFuZCByZWZhY3RvcmluZ3MgYWNyb3NzIFhGUk0gYW5kIElQc2VjIG5ldHdvcmtpbmcgc3Vic3lzdGVtczpcXG4xLiBgZXNwNC5jYCBhbmQgYGVzcDYuY2A6IEFkZHMgYHNrYl96Y29weV9kb3duZ3JhZGVfbWFuYWdlZChza2IpYCB0byBiYWxhbmNlIHJlZmNvdW50cyBvbiB6ZXJvY29weSBtYW5hZ2VkIGZyYWdzIHdoZW4gbXV0YXRpbmcgdGhlIGZyYWcgYXJyYXkgKHJlZmNvdW50aW5nIC8gVUFGIHByZXZlbnRpb24sIGNvdmVyZWQgYnkgS0FTQU4vcmVmY291bnQgdHJhY2tpbmcpLlxcbjIuIGB4ZnJtNl9vdXRwdXQuY2A6IFZhbGlkYXRlcyBzb2NrZXRzIHVzaW5nIGBza2JfdG9fZnVsbF9zaygpYCB0byBhdm9pZCBvcGVyYXRpbmcgb24gbm9uLWZ1bGwgc29ja2V0cyBvciBOVUxMIGRlcmVmZXJlbmNlcyAoTlVMTCBwb2ludGVyIC8gdHlwZSBjb25mdXNpb24pLlxcbjMuIGBlc3BpbnRjcC5jYDogVXNlcyBgc2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXJfY2FyZWZ1bCgpYCB0byB2YWxpZGF0ZSB0cmFuc3BvcnQgaGVhZGVyIGJvdW5kcyBiZWZvcmUgcmVzZXR0aW5nIChPT0IgcHJldmVudGlvbiwgY292ZXJlZCBieSBLQVNBTikuXFxuNC4gYHhmcm1faW5wdXQuY2A6IEZpeGVzIHByb3RvY29sIHRyYWNraW5nIChgeGZybV9wcm90b2ApLCBoYW5kbGVzIGRldmljZSByZWZjb3VudHMgYW5kIFJDVSBsb2NraW5nIGR1cmluZyByZWluamVjdGlvbiwgYW5kIGVuc3VyZXMgZHN0IGVudHJ5IHBlcnNpc3RlbmNlIChgc2tiX2RzdF9mb3JjZWApLiBBbGwgdmFyaWFibGVzIChgeGZybV9wcm90b2ApIGFyZSBmdWxseSBpbml0aWFsaXplZCB3aXRoIGRlZmF1bHQgdmFsdWVzLlxcbjUuIGB4ZnJtX2lwdGZzLmNgOiBBZGRzIGJvdW5kcyBjaGVja2luZyBvbiBmcmFnIHdhbGsgb2Zmc2V0IHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyBpbmRleGluZyBpbiBgaXB0ZnNfc2tiX3Jlc2V0X2ZyYWdfd2FsaygpYCwgYW5kIGNvcnJlY3RzIHJ1bnQgc2l6ZSB2ZXJpZmljYXRpb24gYWdhaW5zdCBJUCBoZWFkZXIgbGVuZ3RoIChPT0IgcmVhZHMsIGNvdmVyZWQgYnkgS0FTQU4pLlxcbjYuIGB4ZnJtX3BvbGljeS5jYCwgYHhmcm1fc3RhdGUuY2AsIGB4ZnJtX3VzZXIuY2A6IEFkZHMgbWlzc2luZyBSQ1UgcmVhZCBsb2NrcyAoYGRzdF9kZXZfcmN1YCwgbXVsdGljYXN0KSwgYWRkcyBhIEdDIG11dGV4IHRvIHNlcmlhbGl6ZSBzdGF0ZSBkZXN0cnVjdGlvbiwgYW5kIGZpeGVzIGxpc3QgZGVsZXRpb24gaW5pdGlhbGl6YXRpb24gKGBobGlzdF9kZWxfaW5pdF9yY3VgKS5cXG5cXG5Ob25lIG9mIHRoZSBjaGFuZ2VzIGludHJvZHVjZSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgbWVtb3J5LCBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzLCBvciBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBkYXRhLiBUaGUgcmlza3MgYWRkcmVzc2VkIChvdXQtb2YtYm91bmRzIGFjY2VzcywgcmVmY291bnRpbmcsIHVzZS1hZnRlci1mcmVlLCBjb25jdXJyZW5jeS9SQ1UpIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOLCBQUk9WRV9SQ1UsIGFuZCBzdGFuZGFyZCBkZWJ1ZyBjaGVja2Vycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflownqm5h[1] Phase: Succeeded StartedAt: 2026-09-07 13:54:59 +0000 UTC FinishedAt: 2026-09-07 13:54:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflownqm5h[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-07 13:54:59 +0000 UTC FinishedAt: 2026-09-07 13:54:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflownqm5h[2] Phase: Succeeded StartedAt: 2026-09-07 13:54:59 +0000 UTC FinishedAt: 2026-09-07 17:33:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflownqm5h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6","XFRM","INET_ESP","INET6_ESP","INET_ESPINTCP","INET6_ESPINTCP","XFRM_USER","XFRM_IPTFS","XFRM_MIGRATE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["esp_output_head","esp6_output_head","xfrm6_local_rxpmtu","xfrm6_local_error","espintcp_rcv","handle_esp","xfrm_input","xfrm_trans_reinject","xfrm_trans_queue_net","iptfs_skb_can_add_frags","iptfs_reassem_cont","xfrm_bundle_create","xfrm_create_dummy_bundle","xfrm_state_gc_task","__xfrm_state_delete","xfrm_dev_state_flush","xfrm_alloc_userspi","xfrm_send_migrate_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6","XFRM","INET_ESP","INET6_ESP","INET_ESPINTCP","INET6_ESPINTCP","XFRM_USER","XFRM_IPTFS","XFRM_MIGRATE"],"series_id":"27234445-ea9c-452c-ba1b-e307f389c838","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-07 13:54:59 +0000 UTC FinishedAt: 2026-09-07 17:33:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6","XFRM","INET_ESP","INET6_ESP","INET_ESPINTCP","INET6_ESPINTCP","XFRM_USER","XFRM_IPTFS","XFRM_MIGRATE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["esp_output_head","esp6_output_head","xfrm6_local_rxpmtu","xfrm6_local_error","espintcp_rcv","handle_esp","xfrm_input","xfrm_trans_reinject","xfrm_trans_queue_net","iptfs_skb_can_add_frags","iptfs_reassem_cont","xfrm_bundle_create","xfrm_create_dummy_bundle","xfrm_state_gc_task","__xfrm_state_delete","xfrm_dev_state_flush","xfrm_alloc_userspi","xfrm_send_migrate_state"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6","XFRM","INET_ESP","INET6_ESP","INET_ESPINTCP","INET6_ESPINTCP","XFRM_USER","XFRM_IPTFS","XFRM_MIGRATE"],"series_id":"27234445-ea9c-452c-ba1b-e307f389c838","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflownqm5h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6","XFRM","INET_ESP","INET6_ESP","INET_ESPINTCP","INET6_ESPINTCP","XFRM_USER","XFRM_IPTFS","XFRM_MIGRATE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["esp_output_head","esp6_output_head","xfrm6_local_rxpmtu","xfrm6_local_error","espintcp_rcv","handle_esp","xfrm_input","xfrm_trans_reinject","xfrm_trans_queue_net","iptfs_skb_can_add_frags","iptfs_reassem_cont","xfrm_bundle_create","xfrm_create_dummy_bundle","xfrm_state_gc_task","__xfrm_state_delete","xfrm_dev_state_flush","xfrm_alloc_userspi","xfrm_send_migrate_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6","XFRM","INET_ESP","INET6_ESP","INET_ESPINTCP","INET6_ESPINTCP","XFRM_USER","XFRM_IPTFS","XFRM_MIGRATE"],"series_id":"27234445-ea9c-452c-ba1b-e307f389c838","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-07 13:54:59 +0000 UTC FinishedAt: 2026-09-07 13:55:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflownqm5h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6","XFRM","INET_ESP","INET6_ESP","INET_ESPINTCP","INET6_ESPINTCP","XFRM_USER","XFRM_IPTFS","XFRM_MIGRATE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["esp_output_head","esp6_output_head","xfrm6_local_rxpmtu","xfrm6_local_error","espintcp_rcv","handle_esp","xfrm_input","xfrm_trans_reinject","xfrm_trans_queue_net","iptfs_skb_can_add_frags","iptfs_reassem_cont","xfrm_bundle_create","xfrm_create_dummy_bundle","xfrm_state_gc_task","__xfrm_state_delete","xfrm_dev_state_flush","xfrm_alloc_userspi","xfrm_send_migrate_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6","XFRM","INET_ESP","INET6_ESP","INET_ESPINTCP","INET6_ESPINTCP","XFRM_USER","XFRM_IPTFS","XFRM_MIGRATE"],"series_id":"27234445-ea9c-452c-ba1b-e307f389c838","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-07 13:54:59 +0000 UTC FinishedAt: 2026-09-07 13:55:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6","XFRM","INET_ESP","INET6_ESP","INET_ESPINTCP","INET6_ESPINTCP","XFRM_USER","XFRM_IPTFS","XFRM_MIGRATE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflownqm5h/series-workflownqm5h-convert-artifact-3829128849/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownqm5h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6","XFRM","INET_ESP","INET6_ESP","INET_ESPINTCP","INET6_ESPINTCP","XFRM_USER","XFRM_IPTFS","XFRM_MIGRATE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["esp_output_head","esp6_output_head","xfrm6_local_rxpmtu","xfrm6_local_error","espintcp_rcv","handle_esp","xfrm_input","xfrm_trans_reinject","xfrm_trans_queue_net","iptfs_skb_can_add_frags","iptfs_reassem_cont","xfrm_bundle_create","xfrm_create_dummy_bundle","xfrm_state_gc_task","__xfrm_state_delete","xfrm_dev_state_flush","xfrm_alloc_userspi","xfrm_send_migrate_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6","XFRM","INET_ESP","INET6_ESP","INET_ESPINTCP","INET6_ESPINTCP","XFRM_USER","XFRM_IPTFS","XFRM_MIGRATE"],"series_id":"27234445-ea9c-452c-ba1b-e307f389c838","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-07 13:55:10 +0000 UTC FinishedAt: 2026-09-07 14:11:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflownqm5h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6","XFRM","INET_ESP","INET6_ESP","INET_ESPINTCP","INET6_ESPINTCP","XFRM_USER","XFRM_IPTFS","XFRM_MIGRATE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["esp_output_head","esp6_output_head","xfrm6_local_rxpmtu","xfrm6_local_error","espintcp_rcv","handle_esp","xfrm_input","xfrm_trans_reinject","xfrm_trans_queue_net","iptfs_skb_can_add_frags","iptfs_reassem_cont","xfrm_bundle_create","xfrm_create_dummy_bundle","xfrm_state_gc_task","__xfrm_state_delete","xfrm_dev_state_flush","xfrm_alloc_userspi","xfrm_send_migrate_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6","XFRM","INET_ESP","INET6_ESP","INET_ESPINTCP","INET6_ESPINTCP","XFRM_USER","XFRM_IPTFS","XFRM_MIGRATE"],"series_id":"27234445-ea9c-452c-ba1b-e307f389c838","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-07 13:55:10 +0000 UTC FinishedAt: 2026-09-07 14:11:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*e6490371-fd93-410e-9fd3-9540b0845801,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-workflownqm5h/series-workflownqm5h-convert-artifact-3829128849/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": "ea09ef2a-3a1a-417f-b67d-f1bfcf981af8", "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-workflownqm5h/series-workflownqm5h-build-action-4050501695/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownqm5h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6","XFRM","INET_ESP","INET6_ESP","INET_ESPINTCP","INET6_ESPINTCP","XFRM_USER","XFRM_IPTFS","XFRM_MIGRATE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["esp_output_head","esp6_output_head","xfrm6_local_rxpmtu","xfrm6_local_error","espintcp_rcv","handle_esp","xfrm_input","xfrm_trans_reinject","xfrm_trans_queue_net","iptfs_skb_can_add_frags","iptfs_reassem_cont","xfrm_bundle_create","xfrm_create_dummy_bundle","xfrm_state_gc_task","__xfrm_state_delete","xfrm_dev_state_flush","xfrm_alloc_userspi","xfrm_send_migrate_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6","XFRM","INET_ESP","INET6_ESP","INET_ESPINTCP","INET6_ESPINTCP","XFRM_USER","XFRM_IPTFS","XFRM_MIGRATE"],"series_id":"27234445-ea9c-452c-ba1b-e307f389c838","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-07 13:55:10 +0000 UTC FinishedAt: 2026-09-07 14:11:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*e6490371-fd93-410e-9fd3-9540b0845801,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-workflownqm5h/series-workflownqm5h-convert-artifact-3829128849/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": "ea09ef2a-3a1a-417f-b67d-f1bfcf981af8", "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-workflownqm5h/series-workflownqm5h-build-action-4050501695/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownqm5h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6","XFRM","INET_ESP","INET6_ESP","INET_ESPINTCP","INET6_ESPINTCP","XFRM_USER","XFRM_IPTFS","XFRM_MIGRATE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["esp_output_head","esp6_output_head","xfrm6_local_rxpmtu","xfrm6_local_error","espintcp_rcv","handle_esp","xfrm_input","xfrm_trans_reinject","xfrm_trans_queue_net","iptfs_skb_can_add_frags","iptfs_reassem_cont","xfrm_bundle_create","xfrm_create_dummy_bundle","xfrm_state_gc_task","__xfrm_state_delete","xfrm_dev_state_flush","xfrm_alloc_userspi","xfrm_send_migrate_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6","XFRM","INET_ESP","INET6_ESP","INET_ESPINTCP","INET6_ESPINTCP","XFRM_USER","XFRM_IPTFS","XFRM_MIGRATE"],"series_id":"27234445-ea9c-452c-ba1b-e307f389c838","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-07 14:11:20 +0000 UTC FinishedAt: 2026-09-07 14:11:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflownqm5h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6","XFRM","INET_ESP","INET6_ESP","INET_ESPINTCP","INET6_ESPINTCP","XFRM_USER","XFRM_IPTFS","XFRM_MIGRATE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["esp_output_head","esp6_output_head","xfrm6_local_rxpmtu","xfrm6_local_error","espintcp_rcv","handle_esp","xfrm_input","xfrm_trans_reinject","xfrm_trans_queue_net","iptfs_skb_can_add_frags","iptfs_reassem_cont","xfrm_bundle_create","xfrm_create_dummy_bundle","xfrm_state_gc_task","__xfrm_state_delete","xfrm_dev_state_flush","xfrm_alloc_userspi","xfrm_send_migrate_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6","XFRM","INET_ESP","INET6_ESP","INET_ESPINTCP","INET6_ESPINTCP","XFRM_USER","XFRM_IPTFS","XFRM_MIGRATE"],"series_id":"27234445-ea9c-452c-ba1b-e307f389c838","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-07 14:11:20 +0000 UTC FinishedAt: 2026-09-07 14:11:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflownqm5h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6","XFRM","INET_ESP","INET6_ESP","INET_ESPINTCP","INET6_ESPINTCP","XFRM_USER","XFRM_IPTFS","XFRM_MIGRATE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["esp_output_head","esp6_output_head","xfrm6_local_rxpmtu","xfrm6_local_error","espintcp_rcv","handle_esp","xfrm_input","xfrm_trans_reinject","xfrm_trans_queue_net","iptfs_skb_can_add_frags","iptfs_reassem_cont","xfrm_bundle_create","xfrm_create_dummy_bundle","xfrm_state_gc_task","__xfrm_state_delete","xfrm_dev_state_flush","xfrm_alloc_userspi","xfrm_send_migrate_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6","XFRM","INET_ESP","INET6_ESP","INET_ESPINTCP","INET6_ESPINTCP","XFRM_USER","XFRM_IPTFS","XFRM_MIGRATE"],"series_id":"27234445-ea9c-452c-ba1b-e307f389c838","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-07 14:11:20 +0000 UTC FinishedAt: 2026-09-07 14:11:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflownqm5h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6","XFRM","INET_ESP","INET6_ESP","INET_ESPINTCP","INET6_ESPINTCP","XFRM_USER","XFRM_IPTFS","XFRM_MIGRATE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["esp_output_head","esp6_output_head","xfrm6_local_rxpmtu","xfrm6_local_error","espintcp_rcv","handle_esp","xfrm_input","xfrm_trans_reinject","xfrm_trans_queue_net","iptfs_skb_can_add_frags","iptfs_reassem_cont","xfrm_bundle_create","xfrm_create_dummy_bundle","xfrm_state_gc_task","__xfrm_state_delete","xfrm_dev_state_flush","xfrm_alloc_userspi","xfrm_send_migrate_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6","XFRM","INET_ESP","INET6_ESP","INET_ESPINTCP","INET6_ESPINTCP","XFRM_USER","XFRM_IPTFS","XFRM_MIGRATE"],"series_id":"27234445-ea9c-452c-ba1b-e307f389c838","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-07 14:11:20 +0000 UTC FinishedAt: 2026-09-07 14:11:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6","XFRM","INET_ESP","INET6_ESP","INET_ESPINTCP","INET6_ESPINTCP","XFRM_USER","XFRM_IPTFS","XFRM_MIGRATE"],"series_id":"27234445-ea9c-452c-ba1b-e307f389c838","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflownqm5h/series-workflownqm5h-convert-artifact-1941718116/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownqm5h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6","XFRM","INET_ESP","INET6_ESP","INET_ESPINTCP","INET6_ESPINTCP","XFRM_USER","XFRM_IPTFS","XFRM_MIGRATE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["esp_output_head","esp6_output_head","xfrm6_local_rxpmtu","xfrm6_local_error","espintcp_rcv","handle_esp","xfrm_input","xfrm_trans_reinject","xfrm_trans_queue_net","iptfs_skb_can_add_frags","iptfs_reassem_cont","xfrm_bundle_create","xfrm_create_dummy_bundle","xfrm_state_gc_task","__xfrm_state_delete","xfrm_dev_state_flush","xfrm_alloc_userspi","xfrm_send_migrate_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6","XFRM","INET_ESP","INET6_ESP","INET_ESPINTCP","INET6_ESPINTCP","XFRM_USER","XFRM_IPTFS","XFRM_MIGRATE"],"series_id":"27234445-ea9c-452c-ba1b-e307f389c838","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-07 14:11:30 +0000 UTC FinishedAt: 2026-09-07 14:13:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflownqm5h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6","XFRM","INET_ESP","INET6_ESP","INET_ESPINTCP","INET6_ESPINTCP","XFRM_USER","XFRM_IPTFS","XFRM_MIGRATE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["esp_output_head","esp6_output_head","xfrm6_local_rxpmtu","xfrm6_local_error","espintcp_rcv","handle_esp","xfrm_input","xfrm_trans_reinject","xfrm_trans_queue_net","iptfs_skb_can_add_frags","iptfs_reassem_cont","xfrm_bundle_create","xfrm_create_dummy_bundle","xfrm_state_gc_task","__xfrm_state_delete","xfrm_dev_state_flush","xfrm_alloc_userspi","xfrm_send_migrate_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6","XFRM","INET_ESP","INET6_ESP","INET_ESPINTCP","INET6_ESPINTCP","XFRM_USER","XFRM_IPTFS","XFRM_MIGRATE"],"series_id":"27234445-ea9c-452c-ba1b-e307f389c838","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-07 14:11:30 +0000 UTC FinishedAt: 2026-09-07 14:13:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*ea09ef2a-3a1a-417f-b67d-f1bfcf981af8,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-workflownqm5h/series-workflownqm5h-build-action-4050501695/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-workflownqm5h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6","XFRM","INET_ESP","INET6_ESP","INET_ESPINTCP","INET6_ESPINTCP","XFRM_USER","XFRM_IPTFS","XFRM_MIGRATE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["esp_output_head","esp6_output_head","xfrm6_local_rxpmtu","xfrm6_local_error","espintcp_rcv","handle_esp","xfrm_input","xfrm_trans_reinject","xfrm_trans_queue_net","iptfs_skb_can_add_frags","iptfs_reassem_cont","xfrm_bundle_create","xfrm_create_dummy_bundle","xfrm_state_gc_task","__xfrm_state_delete","xfrm_dev_state_flush","xfrm_alloc_userspi","xfrm_send_migrate_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6","XFRM","INET_ESP","INET6_ESP","INET_ESPINTCP","INET6_ESPINTCP","XFRM_USER","XFRM_IPTFS","XFRM_MIGRATE"],"series_id":"27234445-ea9c-452c-ba1b-e307f389c838","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-07 14:13:25 +0000 UTC FinishedAt: 2026-09-07 14:13:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflownqm5h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6","XFRM","INET_ESP","INET6_ESP","INET_ESPINTCP","INET6_ESPINTCP","XFRM_USER","XFRM_IPTFS","XFRM_MIGRATE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["esp_output_head","esp6_output_head","xfrm6_local_rxpmtu","xfrm6_local_error","espintcp_rcv","handle_esp","xfrm_input","xfrm_trans_reinject","xfrm_trans_queue_net","iptfs_skb_can_add_frags","iptfs_reassem_cont","xfrm_bundle_create","xfrm_create_dummy_bundle","xfrm_state_gc_task","__xfrm_state_delete","xfrm_dev_state_flush","xfrm_alloc_userspi","xfrm_send_migrate_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6","XFRM","INET_ESP","INET6_ESP","INET_ESPINTCP","INET6_ESPINTCP","XFRM_USER","XFRM_IPTFS","XFRM_MIGRATE"],"series_id":"27234445-ea9c-452c-ba1b-e307f389c838","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-07 14:13:25 +0000 UTC FinishedAt: 2026-09-07 14:13:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflownqm5h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6","XFRM","INET_ESP","INET6_ESP","INET_ESPINTCP","INET6_ESPINTCP","XFRM_USER","XFRM_IPTFS","XFRM_MIGRATE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["esp_output_head","esp6_output_head","xfrm6_local_rxpmtu","xfrm6_local_error","espintcp_rcv","handle_esp","xfrm_input","xfrm_trans_reinject","xfrm_trans_queue_net","iptfs_skb_can_add_frags","iptfs_reassem_cont","xfrm_bundle_create","xfrm_create_dummy_bundle","xfrm_state_gc_task","__xfrm_state_delete","xfrm_dev_state_flush","xfrm_alloc_userspi","xfrm_send_migrate_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6","XFRM","INET_ESP","INET6_ESP","INET_ESPINTCP","INET6_ESPINTCP","XFRM_USER","XFRM_IPTFS","XFRM_MIGRATE"],"series_id":"27234445-ea9c-452c-ba1b-e307f389c838","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-07 14:13:25 +0000 UTC FinishedAt: 2026-09-07 14:30:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflownqm5h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6","XFRM","INET_ESP","INET6_ESP","INET_ESPINTCP","INET6_ESPINTCP","XFRM_USER","XFRM_IPTFS","XFRM_MIGRATE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["esp_output_head","esp6_output_head","xfrm6_local_rxpmtu","xfrm6_local_error","espintcp_rcv","handle_esp","xfrm_input","xfrm_trans_reinject","xfrm_trans_queue_net","iptfs_skb_can_add_frags","iptfs_reassem_cont","xfrm_bundle_create","xfrm_create_dummy_bundle","xfrm_state_gc_task","__xfrm_state_delete","xfrm_dev_state_flush","xfrm_alloc_userspi","xfrm_send_migrate_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6","XFRM","INET_ESP","INET6_ESP","INET_ESPINTCP","INET6_ESPINTCP","XFRM_USER","XFRM_IPTFS","XFRM_MIGRATE"],"series_id":"27234445-ea9c-452c-ba1b-e307f389c838","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-07 14:13:25 +0000 UTC FinishedAt: 2026-09-07 14:30:26 +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:*e6490371-fd93-410e-9fd3-9540b0845801,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-workflownqm5h/series-workflownqm5h-convert-artifact-1941718116/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": "f86e4ef4-b93b-4463-b3c7-d326b8040ac4", "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-workflownqm5h/series-workflownqm5h-build-action-1387941360/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownqm5h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6","XFRM","INET_ESP","INET6_ESP","INET_ESPINTCP","INET6_ESPINTCP","XFRM_USER","XFRM_IPTFS","XFRM_MIGRATE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["esp_output_head","esp6_output_head","xfrm6_local_rxpmtu","xfrm6_local_error","espintcp_rcv","handle_esp","xfrm_input","xfrm_trans_reinject","xfrm_trans_queue_net","iptfs_skb_can_add_frags","iptfs_reassem_cont","xfrm_bundle_create","xfrm_create_dummy_bundle","xfrm_state_gc_task","__xfrm_state_delete","xfrm_dev_state_flush","xfrm_alloc_userspi","xfrm_send_migrate_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6","XFRM","INET_ESP","INET6_ESP","INET_ESPINTCP","INET6_ESPINTCP","XFRM_USER","XFRM_IPTFS","XFRM_MIGRATE"],"series_id":"27234445-ea9c-452c-ba1b-e307f389c838","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-07 14:13:25 +0000 UTC FinishedAt: 2026-09-07 14:30:16 +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:*e6490371-fd93-410e-9fd3-9540b0845801,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-workflownqm5h/series-workflownqm5h-convert-artifact-1941718116/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": "f86e4ef4-b93b-4463-b3c7-d326b8040ac4", "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-workflownqm5h/series-workflownqm5h-build-action-1387941360/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownqm5h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6","XFRM","INET_ESP","INET6_ESP","INET_ESPINTCP","INET6_ESPINTCP","XFRM_USER","XFRM_IPTFS","XFRM_MIGRATE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["esp_output_head","esp6_output_head","xfrm6_local_rxpmtu","xfrm6_local_error","espintcp_rcv","handle_esp","xfrm_input","xfrm_trans_reinject","xfrm_trans_queue_net","iptfs_skb_can_add_frags","iptfs_reassem_cont","xfrm_bundle_create","xfrm_create_dummy_bundle","xfrm_state_gc_task","__xfrm_state_delete","xfrm_dev_state_flush","xfrm_alloc_userspi","xfrm_send_migrate_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6","XFRM","INET_ESP","INET6_ESP","INET_ESPINTCP","INET6_ESPINTCP","XFRM_USER","XFRM_IPTFS","XFRM_MIGRATE"],"series_id":"27234445-ea9c-452c-ba1b-e307f389c838","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-07 14:30:26 +0000 UTC FinishedAt: 2026-09-07 14:30:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflownqm5h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6","XFRM","INET_ESP","INET6_ESP","INET_ESPINTCP","INET6_ESPINTCP","XFRM_USER","XFRM_IPTFS","XFRM_MIGRATE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["esp_output_head","esp6_output_head","xfrm6_local_rxpmtu","xfrm6_local_error","espintcp_rcv","handle_esp","xfrm_input","xfrm_trans_reinject","xfrm_trans_queue_net","iptfs_skb_can_add_frags","iptfs_reassem_cont","xfrm_bundle_create","xfrm_create_dummy_bundle","xfrm_state_gc_task","__xfrm_state_delete","xfrm_dev_state_flush","xfrm_alloc_userspi","xfrm_send_migrate_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6","XFRM","INET_ESP","INET6_ESP","INET_ESPINTCP","INET6_ESPINTCP","XFRM_USER","XFRM_IPTFS","XFRM_MIGRATE"],"series_id":"27234445-ea9c-452c-ba1b-e307f389c838","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-07 14:30:26 +0000 UTC FinishedAt: 2026-09-07 14:30:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflownqm5h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6","XFRM","INET_ESP","INET6_ESP","INET_ESPINTCP","INET6_ESPINTCP","XFRM_USER","XFRM_IPTFS","XFRM_MIGRATE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["esp_output_head","esp6_output_head","xfrm6_local_rxpmtu","xfrm6_local_error","espintcp_rcv","handle_esp","xfrm_input","xfrm_trans_reinject","xfrm_trans_queue_net","iptfs_skb_can_add_frags","iptfs_reassem_cont","xfrm_bundle_create","xfrm_create_dummy_bundle","xfrm_state_gc_task","__xfrm_state_delete","xfrm_dev_state_flush","xfrm_alloc_userspi","xfrm_send_migrate_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6","XFRM","INET_ESP","INET6_ESP","INET_ESPINTCP","INET6_ESPINTCP","XFRM_USER","XFRM_IPTFS","XFRM_MIGRATE"],"series_id":"27234445-ea9c-452c-ba1b-e307f389c838","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-07 14:30:26 +0000 UTC FinishedAt: 2026-09-07 14:32:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflownqm5h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6","XFRM","INET_ESP","INET6_ESP","INET_ESPINTCP","INET6_ESPINTCP","XFRM_USER","XFRM_IPTFS","XFRM_MIGRATE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["esp_output_head","esp6_output_head","xfrm6_local_rxpmtu","xfrm6_local_error","espintcp_rcv","handle_esp","xfrm_input","xfrm_trans_reinject","xfrm_trans_queue_net","iptfs_skb_can_add_frags","iptfs_reassem_cont","xfrm_bundle_create","xfrm_create_dummy_bundle","xfrm_state_gc_task","__xfrm_state_delete","xfrm_dev_state_flush","xfrm_alloc_userspi","xfrm_send_migrate_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6","XFRM","INET_ESP","INET6_ESP","INET_ESPINTCP","INET6_ESPINTCP","XFRM_USER","XFRM_IPTFS","XFRM_MIGRATE"],"series_id":"27234445-ea9c-452c-ba1b-e307f389c838","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-07 14:30:26 +0000 UTC FinishedAt: 2026-09-07 14:32:22 +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:*f86e4ef4-b93b-4463-b3c7-d326b8040ac4,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-workflownqm5h/series-workflownqm5h-build-action-1387941360/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-workflownqm5h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6","XFRM","INET_ESP","INET6_ESP","INET_ESPINTCP","INET6_ESPINTCP","XFRM_USER","XFRM_IPTFS","XFRM_MIGRATE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["esp_output_head","esp6_output_head","xfrm6_local_rxpmtu","xfrm6_local_error","espintcp_rcv","handle_esp","xfrm_input","xfrm_trans_reinject","xfrm_trans_queue_net","iptfs_skb_can_add_frags","iptfs_reassem_cont","xfrm_bundle_create","xfrm_create_dummy_bundle","xfrm_state_gc_task","__xfrm_state_delete","xfrm_dev_state_flush","xfrm_alloc_userspi","xfrm_send_migrate_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6","XFRM","INET_ESP","INET6_ESP","INET_ESPINTCP","INET6_ESPINTCP","XFRM_USER","XFRM_IPTFS","XFRM_MIGRATE"],"series_id":"27234445-ea9c-452c-ba1b-e307f389c838","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-07 14:32:27 +0000 UTC FinishedAt: 2026-09-07 17:33:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflownqm5h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6","XFRM","INET_ESP","INET6_ESP","INET_ESPINTCP","INET6_ESPINTCP","XFRM_USER","XFRM_IPTFS","XFRM_MIGRATE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["esp_output_head","esp6_output_head","xfrm6_local_rxpmtu","xfrm6_local_error","espintcp_rcv","handle_esp","xfrm_input","xfrm_trans_reinject","xfrm_trans_queue_net","iptfs_skb_can_add_frags","iptfs_reassem_cont","xfrm_bundle_create","xfrm_create_dummy_bundle","xfrm_state_gc_task","__xfrm_state_delete","xfrm_dev_state_flush","xfrm_alloc_userspi","xfrm_send_migrate_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6","XFRM","INET_ESP","INET6_ESP","INET_ESPINTCP","INET6_ESPINTCP","XFRM_USER","XFRM_IPTFS","XFRM_MIGRATE"],"series_id":"27234445-ea9c-452c-ba1b-e307f389c838","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-07 14:32:27 +0000 UTC FinishedAt: 2026-09-07 17:33:46 +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":["esp_output_head","esp6_output_head","xfrm6_local_rxpmtu","xfrm6_local_error","espintcp_rcv","handle_esp","xfrm_input","xfrm_trans_reinject","xfrm_trans_queue_net","iptfs_skb_can_add_frags","iptfs_reassem_cont","xfrm_bundle_create","xfrm_create_dummy_bundle","xfrm_state_gc_task","__xfrm_state_delete","xfrm_dev_state_flush","xfrm_alloc_userspi","xfrm_send_migrate_state"],"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:*ea09ef2a-3a1a-417f-b67d-f1bfcf981af8,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f86e4ef4-b93b-4463-b3c7-d326b8040ac4,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-workflownqm5h/series-workflownqm5h-build-action-4050501695/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-workflownqm5h/series-workflownqm5h-build-action-1387941360/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflownqm5h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6","XFRM","INET_ESP","INET6_ESP","INET_ESPINTCP","INET6_ESPINTCP","XFRM_USER","XFRM_IPTFS","XFRM_MIGRATE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["esp_output_head","esp6_output_head","xfrm6_local_rxpmtu","xfrm6_local_error","espintcp_rcv","handle_esp","xfrm_input","xfrm_trans_reinject","xfrm_trans_queue_net","iptfs_skb_can_add_frags","iptfs_reassem_cont","xfrm_bundle_create","xfrm_create_dummy_bundle","xfrm_state_gc_task","__xfrm_state_delete","xfrm_dev_state_flush","xfrm_alloc_userspi","xfrm_send_migrate_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6","XFRM","INET_ESP","INET6_ESP","INET_ESPINTCP","INET6_ESPINTCP","XFRM_USER","XFRM_IPTFS","XFRM_MIGRATE"],"series_id":"27234445-ea9c-452c-ba1b-e307f389c838","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-07 14:32:27 +0000 UTC FinishedAt: 2026-09-07 14:32:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflownqm5h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6","XFRM","INET_ESP","INET6_ESP","INET_ESPINTCP","INET6_ESPINTCP","XFRM_USER","XFRM_IPTFS","XFRM_MIGRATE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["esp_output_head","esp6_output_head","xfrm6_local_rxpmtu","xfrm6_local_error","espintcp_rcv","handle_esp","xfrm_input","xfrm_trans_reinject","xfrm_trans_queue_net","iptfs_skb_can_add_frags","iptfs_reassem_cont","xfrm_bundle_create","xfrm_create_dummy_bundle","xfrm_state_gc_task","__xfrm_state_delete","xfrm_dev_state_flush","xfrm_alloc_userspi","xfrm_send_migrate_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6","XFRM","INET_ESP","INET6_ESP","INET_ESPINTCP","INET6_ESPINTCP","XFRM_USER","XFRM_IPTFS","XFRM_MIGRATE"],"series_id":"27234445-ea9c-452c-ba1b-e307f389c838","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-07 14:32:27 +0000 UTC FinishedAt: 2026-09-07 14:32:32 +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":["esp_output_head","esp6_output_head","xfrm6_local_rxpmtu","xfrm6_local_error","espintcp_rcv","handle_esp","xfrm_input","xfrm_trans_reinject","xfrm_trans_queue_net","iptfs_skb_can_add_frags","iptfs_reassem_cont","xfrm_bundle_create","xfrm_create_dummy_bundle","xfrm_state_gc_task","__xfrm_state_delete","xfrm_dev_state_flush","xfrm_alloc_userspi","xfrm_send_migrate_state"],"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-workflownqm5h/series-workflownqm5h-convert-artifact-4213528045/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownqm5h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6","XFRM","INET_ESP","INET6_ESP","INET_ESPINTCP","INET6_ESPINTCP","XFRM_USER","XFRM_IPTFS","XFRM_MIGRATE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["esp_output_head","esp6_output_head","xfrm6_local_rxpmtu","xfrm6_local_error","espintcp_rcv","handle_esp","xfrm_input","xfrm_trans_reinject","xfrm_trans_queue_net","iptfs_skb_can_add_frags","iptfs_reassem_cont","xfrm_bundle_create","xfrm_create_dummy_bundle","xfrm_state_gc_task","__xfrm_state_delete","xfrm_dev_state_flush","xfrm_alloc_userspi","xfrm_send_migrate_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6","XFRM","INET_ESP","INET6_ESP","INET_ESPINTCP","INET6_ESPINTCP","XFRM_USER","XFRM_IPTFS","XFRM_MIGRATE"],"series_id":"27234445-ea9c-452c-ba1b-e307f389c838","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-07 14:32:27 +0000 UTC FinishedAt: 2026-09-07 14:32:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflownqm5h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6","XFRM","INET_ESP","INET6_ESP","INET_ESPINTCP","INET6_ESPINTCP","XFRM_USER","XFRM_IPTFS","XFRM_MIGRATE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["esp_output_head","esp6_output_head","xfrm6_local_rxpmtu","xfrm6_local_error","espintcp_rcv","handle_esp","xfrm_input","xfrm_trans_reinject","xfrm_trans_queue_net","iptfs_skb_can_add_frags","iptfs_reassem_cont","xfrm_bundle_create","xfrm_create_dummy_bundle","xfrm_state_gc_task","__xfrm_state_delete","xfrm_dev_state_flush","xfrm_alloc_userspi","xfrm_send_migrate_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6","XFRM","INET_ESP","INET6_ESP","INET_ESPINTCP","INET6_ESPINTCP","XFRM_USER","XFRM_IPTFS","XFRM_MIGRATE"],"series_id":"27234445-ea9c-452c-ba1b-e307f389c838","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-07 14:32:27 +0000 UTC FinishedAt: 2026-09-07 14:32:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflownqm5h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6","XFRM","INET_ESP","INET6_ESP","INET_ESPINTCP","INET6_ESPINTCP","XFRM_USER","XFRM_IPTFS","XFRM_MIGRATE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["esp_output_head","esp6_output_head","xfrm6_local_rxpmtu","xfrm6_local_error","espintcp_rcv","handle_esp","xfrm_input","xfrm_trans_reinject","xfrm_trans_queue_net","iptfs_skb_can_add_frags","iptfs_reassem_cont","xfrm_bundle_create","xfrm_create_dummy_bundle","xfrm_state_gc_task","__xfrm_state_delete","xfrm_dev_state_flush","xfrm_alloc_userspi","xfrm_send_migrate_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6","XFRM","INET_ESP","INET6_ESP","INET_ESPINTCP","INET6_ESPINTCP","XFRM_USER","XFRM_IPTFS","XFRM_MIGRATE"],"series_id":"27234445-ea9c-452c-ba1b-e307f389c838","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-07 14:32:27 +0000 UTC FinishedAt: 2026-09-07 14:32:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflownqm5h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6","XFRM","INET_ESP","INET6_ESP","INET_ESPINTCP","INET6_ESPINTCP","XFRM_USER","XFRM_IPTFS","XFRM_MIGRATE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["esp_output_head","esp6_output_head","xfrm6_local_rxpmtu","xfrm6_local_error","espintcp_rcv","handle_esp","xfrm_input","xfrm_trans_reinject","xfrm_trans_queue_net","iptfs_skb_can_add_frags","iptfs_reassem_cont","xfrm_bundle_create","xfrm_create_dummy_bundle","xfrm_state_gc_task","__xfrm_state_delete","xfrm_dev_state_flush","xfrm_alloc_userspi","xfrm_send_migrate_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6","XFRM","INET_ESP","INET6_ESP","INET_ESPINTCP","INET6_ESPINTCP","XFRM_USER","XFRM_IPTFS","XFRM_MIGRATE"],"series_id":"27234445-ea9c-452c-ba1b-e307f389c838","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-07 14:32:37 +0000 UTC FinishedAt: 2026-09-07 17:33:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflownqm5h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6","XFRM","INET_ESP","INET6_ESP","INET_ESPINTCP","INET6_ESPINTCP","XFRM_USER","XFRM_IPTFS","XFRM_MIGRATE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["esp_output_head","esp6_output_head","xfrm6_local_rxpmtu","xfrm6_local_error","espintcp_rcv","handle_esp","xfrm_input","xfrm_trans_reinject","xfrm_trans_queue_net","iptfs_skb_can_add_frags","iptfs_reassem_cont","xfrm_bundle_create","xfrm_create_dummy_bundle","xfrm_state_gc_task","__xfrm_state_delete","xfrm_dev_state_flush","xfrm_alloc_userspi","xfrm_send_migrate_state"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6","XFRM","INET_ESP","INET6_ESP","INET_ESPINTCP","INET6_ESPINTCP","XFRM_USER","XFRM_IPTFS","XFRM_MIGRATE"],"series_id":"27234445-ea9c-452c-ba1b-e307f389c838","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-07 14:32:37 +0000 UTC FinishedAt: 2026-09-07 17:33:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*ea09ef2a-3a1a-417f-b67d-f1bfcf981af8,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f86e4ef4-b93b-4463-b3c7-d326b8040ac4,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-workflownqm5h/series-workflownqm5h-build-action-4050501695/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-workflownqm5h/series-workflownqm5h-build-action-1387941360/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-workflownqm5h/series-workflownqm5h-convert-artifact-4213528045/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,}