ZGlmZiAtLWdpdCBhL2phdmEvQW5kcm9pZE1hbmlmZXN0LnhtbCBiL2phdmEvQW5kcm9pZE1hbmlmZXN0LnhtbAppbmRleCAxN2QxMWMwLi4yMjczMzk0IDEwMDY0NAotLS0gYS9qYXZhL0FuZHJvaWRNYW5pZmVzdC54bWwKKysrIGIvamF2YS9BbmRyb2lkTWFuaWZlc3QueG1sCkBAIC0yOSwxMyArMjksMTMgQEAKICAgICA8dXNlcy1wZXJtaXNzaW9uIGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5wZXJtaXNzaW9uLldSSVRFX0VYVEVSTkFMX1NUT1JBR0UiIC8+CiAgICAgPHVzZXMtcGVybWlzc2lvbiBhbmRyb2lkOm5hbWU9ImFuZHJvaWQucGVybWlzc2lvbi5ET1dOTE9BRF9XSVRIT1VUX05PVElGSUNBVElPTiIgLz4KIAotICAgIDxhcHBsaWNhdGlvbiBhbmRyb2lkOmxhYmVsPSJAc3RyaW5nL2Fvc3BfYW5kcm9pZF9rZXlib2FyZF9pbWVfbmFtZSIKKyAgICA8YXBwbGljYXRpb24gYW5kcm9pZDpsYWJlbD0iQHN0cmluZy9lbmdsaXNoX2ltZV9uYW1lIgogICAgICAgICAgICAgYW5kcm9pZDppY29uPSJAbWlwbWFwL2ljX2ltZV9zZXR0aW5ncyIKICAgICAgICAgICAgIGFuZHJvaWQ6a2lsbEFmdGVyUmVzdG9yZT0iZmFsc2UiCiAgICAgICAgICAgICBhbmRyb2lkOnN1cHBvcnRzUnRsPSJ0cnVlIj4KIAogICAgICAgICA8c2VydmljZSBhbmRyb2lkOm5hbWU9IkxhdGluSU1FIgotICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGFiZWw9IkBzdHJpbmcvYW9zcF9hbmRyb2lkX2tleWJvYXJkX2ltZV9uYW1lIgorICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGFiZWw9IkBzdHJpbmcvZW5nbGlzaF9pbWVfbmFtZSIKICAgICAgICAgICAgICAgICBhbmRyb2lkOnBlcm1pc3Npb249ImFuZHJvaWQucGVybWlzc2lvbi5CSU5EX0lOUFVUX01FVEhPRCI+CiAgICAgICAgICAgICA8aW50ZW50LWZpbHRlcj4KICAgICAgICAgICAgICAgICA8YWN0aW9uIGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC52aWV3LklucHV0TWV0aG9kIiAvPgpAQCAtNDQsNyArNDQsNyBAQAogICAgICAgICA8L3NlcnZpY2U+CiAKICAgICAgICAgPHNlcnZpY2UgYW5kcm9pZDpuYW1lPSIuc3BlbGxjaGVjay5BbmRyb2lkU3BlbGxDaGVja2VyU2VydmljZSIKLSAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYWJlbD0iQHN0cmluZy9hb3NwX3NwZWxsX2NoZWNrZXJfc2VydmljZV9uYW1lIgorICAgICAgICAgICAgICAgICBhbmRyb2lkOmxhYmVsPSJAc3RyaW5nL3NwZWxsX2NoZWNrZXJfc2VydmljZV9uYW1lIgogICAgICAgICAgICAgICAgICBhbmRyb2lkOnBlcm1pc3Npb249ImFuZHJvaWQucGVybWlzc2lvbi5CSU5EX1RFWFRfU0VSVklDRSI+CiAgICAgICAgICAgICA8aW50ZW50LWZpbHRlcj4KICAgICAgICAgICAgICAgICA8YWN0aW9uIGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5zZXJ2aWNlLnRleHRzZXJ2aWNlLlNwZWxsQ2hlY2tlclNlcnZpY2UiIC8+CkBAIC01Myw3ICs1Myw3IEBACiAgICAgICAgIDwvc2VydmljZT4KIAogICAgICAgICA8YWN0aXZpdHkgYW5kcm9pZDpuYW1lPSIuc2V0dXAuU2V0dXBBY3Rpdml0eSIKLSAgICAgICAgICAgICAgICBhbmRyb2lkOmxhYmVsPSJAc3RyaW5nL2Fvc3BfYW5kcm9pZF9rZXlib2FyZF9pbWVfbmFtZSIKKyAgICAgICAgICAgICAgICBhbmRyb2lkOmxhYmVsPSJAc3RyaW5nL2VuZ2xpc2hfaW1lX25hbWUiCiAgICAgICAgICAgICAgICAgYW5kcm9pZDppY29uPSJAZHJhd2FibGUvaWNfc2V0dXBfd2l6YXJkIj4KICAgICAgICAgICAgIDxpbnRlbnQtZmlsdGVyPgogICAgICAgICAgICAgICAgIDxhY3Rpb24gYW5kcm9pZDpuYW1lPSJhbmRyb2lkLmludGVudC5hY3Rpb24uTUFJTiIgLz4KQEAgLTY5LDcgKzY5LDcgQEAKICAgICAgICAgICAgIDwvaW50ZW50LWZpbHRlcj4KICAgICAgICAgPC9yZWNlaXZlcj4KIAotICAgICAgICA8YWN0aXZpdHkgYW5kcm9pZDpuYW1lPSJTZXR0aW5nc0FjdGl2aXR5IiBhbmRyb2lkOmxhYmVsPSJAc3RyaW5nL2Fvc3BfYW5kcm9pZF9rZXlib2FyZF9pbWVfc2V0dGluZ3MiCisgICAgICAgIDxhY3Rpdml0eSBhbmRyb2lkOm5hbWU9IlNldHRpbmdzQWN0aXZpdHkiIGFuZHJvaWQ6bGFiZWw9IkBzdHJpbmcvZW5nbGlzaF9pbWVfc2V0dGluZ3MiCiAgICAgICAgICAgICAgICAgICBhbmRyb2lkOnVpT3B0aW9ucz0ic3BsaXRBY3Rpb25CYXJXaGVuTmFycm93Ij4KICAgICAgICAgICAgIDxpbnRlbnQtZmlsdGVyPgogICAgICAgICAgICAgICAgIDxhY3Rpb24gYW5kcm9pZDpuYW1lPSJhbmRyb2lkLmludGVudC5hY3Rpb24uTUFJTiIgLz4KQEAgLTc3LDcgKzc3LDcgQEAKICAgICAgICAgPC9hY3Rpdml0eT4KIAogICAgICAgICA8YWN0aXZpdHkgYW5kcm9pZDpuYW1lPSJjb20uYW5kcm9pZC5pbnB1dG1ldGhvZC5sYXRpbi5zcGVsbGNoZWNrLlNwZWxsQ2hlY2tlclNldHRpbmdzQWN0aXZpdHkiCi0gICAgICAgICAgICAgICAgICBhbmRyb2lkOmxhYmVsPSJAc3RyaW5nL2Fvc3BfYW5kcm9pZF9zcGVsbF9jaGVja2VyX3NlcnZpY2Vfc2V0dGluZ3MiPgorICAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYWJlbD0iQHN0cmluZy9hbmRyb2lkX3NwZWxsX2NoZWNrZXJfc2V0dGluZ3MiPgogICAgICAgICAgICAgPGludGVudC1maWx0ZXI+CiAgICAgICAgICAgICAgICAgPGFjdGlvbiBhbmRyb2lkOm5hbWU9ImFuZHJvaWQuaW50ZW50LmFjdGlvbi5NQUlOIiAvPgogICAgICAgICAgICAgPC9pbnRlbnQtZmlsdGVyPgpkaWZmIC0tZ2l0IGEvamF2YS9yZXMvbGF5b3V0L2RpY3Rpb25hcnlfbGluZS54bWwgYi9qYXZhL3Jlcy9sYXlvdXQvZGljdGlvbmFyeV9saW5lLnhtbAppbmRleCA5ZWVlYTY5Li45ZGRiY2Y3IDEwMDY0NAotLS0gYS9qYXZhL3Jlcy9sYXlvdXQvZGljdGlvbmFyeV9saW5lLnhtbAorKysgYi9qYXZhL3Jlcy9sYXlvdXQvZGljdGlvbmFyeV9saW5lLnhtbApAQCAtODQsNSArODQsMjEgQEAKICAgICAgICAgYW5kcm9pZDpzaW5nbGVMaW5lPSJ0cnVlIgogICAgICAgICBhbmRyb2lkOnRleHRBcHBlYXJhbmNlPSI/YW5kcm9pZDphdHRyL3RleHRBcHBlYXJhbmNlTWVkaXVtIgogICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvaW5zdGFsbF9kaWN0IiAvPgorICAgIDxCdXR0b24KKyAgICAgICAgYW5kcm9pZDppZD0iQCthbmRyb2lkOmlkL2RpY3RfY2FuY2VsX2J1dHRvbiIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2dyYXZpdHk9InJpZ2h0fGNlbnRlcl92ZXJ0aWNhbCIKKyAgICAgICAgYW5kcm9pZDpzaW5nbGVMaW5lPSJ0cnVlIgorICAgICAgICBhbmRyb2lkOnRleHRBcHBlYXJhbmNlPSI/YW5kcm9pZDphdHRyL3RleHRBcHBlYXJhbmNlTWVkaXVtIgorICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvY2FuY2VsX2Rvd25sb2FkX2RpY3QiIC8+CisgICAgPEJ1dHRvbgorICAgICAgICBhbmRyb2lkOmlkPSJAK2FuZHJvaWQ6aWQvZGljdF9kZWxldGVfYnV0dG9uIgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0id3JhcF9jb250ZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfZ3Jhdml0eT0icmlnaHR8Y2VudGVyX3ZlcnRpY2FsIgorICAgICAgICBhbmRyb2lkOnNpbmdsZUxpbmU9InRydWUiCisgICAgICAgIGFuZHJvaWQ6dGV4dEFwcGVhcmFuY2U9Ij9hbmRyb2lkOmF0dHIvdGV4dEFwcGVhcmFuY2VNZWRpdW0iCisgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9kZWxldGVfZGljdCIgLz4KICAgPC9jb20uYW5kcm9pZC5pbnB1dG1ldGhvZC5kaWN0aW9uYXJ5cGFjay5CdXR0b25Td2l0Y2hlcj4KIDwvTGluZWFyTGF5b3V0PgpkaWZmIC0tZ2l0IGEvamF2YS9yZXMvcmF3L2VtcHR5LmRpY3QgYi9qYXZhL3Jlcy9yYXcvZW1wdHkuZGljdAppbmRleCBkYTFiZjk2Li44MGNlMDY2IDEwMDY0NAotLS0gYS9qYXZhL3Jlcy9yYXcvZW1wdHkuZGljdAorKysgYi9qYXZhL3Jlcy9yYXcvZW1wdHkuZGljdApAQCAtMSArMSBAQAoteLEKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCiubwTr+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvamF2YS9yZXMvdmFsdWVzL3N0cmluZ3MtYXBwbmFtZS54bWwgYi9qYXZhL3Jlcy92YWx1ZXMvc3RyaW5ncy1hcHBuYW1lLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NmQ4YzQ0Ci0tLSAvZGV2L251bGwKKysrIGIvamF2YS9yZXMvdmFsdWVzL3N0cmluZ3MtYXBwbmFtZS54bWwKQEAgLTAsMCArMSwzNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzwhLS0KKy8qCisqKgorKiogQ29weXJpZ2h0IDIwMTMsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyoqCisqKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyoqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyoqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorKioKKyoqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyoqCisqKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisqKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorKiogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisqKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisqKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyovCistLT4KKworPHJlc291cmNlcz4KKyAgICA8IS0tIEFwcGxpY2F0aW9uIG5hbWUgZm9yIG9wZW5zb3VyY2UgQW5kcm9pZCBrZXlib2FyZC4gQU9TUChBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QpIHNob3VsZCBub3QgYmUgdHJhbnNsYXRlZC4KKyAgICAgICAgIFRoaXMgcmVzb3VyY2Ugc2hvdWxkIGJlIGNvcGllZCBmcm9tIG1zZ2lkPSI4MjUwOTkyNjEzNjE2NzkyMzIxIiAtLT4KKyAgICA8c3RyaW5nIG5hbWU9ImVuZ2xpc2hfaW1lX25hbWUiPkFuZHJvaWQgS2V5Ym9hcmQgKEFPU1ApPC9zdHJpbmc+CisKKyAgICA8IS0tIE5hbWUgb2YgQW5kcm9pZCBzcGVsbCBjaGVja2VyIHNlcnZpY2UuIEFPU1AoQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0KSBzaG91bGQgbm90IGJlIHRyYW5zbGF0ZWQuCisgICAgICAgICBUaGlzIHJlc291cmNlIHNob3VsZCBiZSBjb3BpZWQgZnJvbSBtc2dpZD0iNTExOTUwNDc3MTk5OTQ4MDQ4IiAtLT4KKyAgICA8c3RyaW5nIG5hbWU9InNwZWxsX2NoZWNrZXJfc2VydmljZV9uYW1lIj5BbmRyb2lkIFNwZWxsIENoZWNrZXIgKEFPU1ApPC9zdHJpbmc+CisKKyAgICA8IS0tIFRpdGxlIGZvciBBbmRyb2lkIEtleWJvYXJkIHNldHRpbmdzIHNjcmVlbi4gQU9TUChBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QpIHNob3VsZCBub3QgYmUgdHJhbnNsYXRlZC4KKyAgICAgICAgIFRoaXMgcmVzb3VyY2Ugc2hvdWxkIGJlIGNvcGllZCBmcm9tIG1zZ2lkPSI0MjM2MTU4NzcxNzQ4NTAyNjciIC0tPgorICAgIDxzdHJpbmcgbmFtZT0iZW5nbGlzaF9pbWVfc2V0dGluZ3MiPkFuZHJvaWQgS2V5Ym9hcmQgU2V0dGluZ3MgKEFPU1ApPC9zdHJpbmc+CisKKyAgICA8IS0tIFRpdGxlIGZvciB0aGUgc3BlbGwgY2hlY2tpbmcgc2VydmljZSBzZXR0aW5ncyBzY3JlZW4uIEFPU1AoQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0KSBzaG91bGQgbm90IGJlIHRyYW5zbGF0ZWQuCisgICAgICAgICBUaGlzIHJlc291cmNlIHNob3VsZCBiZSBjb3BpZWQgZnJvbSBtc2dpZD0iMjk3MDUzNTg5NDMyNzI4ODQyMSIgLS0+CisgICAgPHN0cmluZyBuYW1lPSJhbmRyb2lkX3NwZWxsX2NoZWNrZXJfc2V0dGluZ3MiPkFuZHJvaWQgU3BlbGwgQ2hlY2tlciBTZXR0aW5ncyAoQU9TUCk8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvamF2YS9yZXMvdmFsdWVzL3N0cmluZ3MueG1sIGIvamF2YS9yZXMvdmFsdWVzL3N0cmluZ3MueG1sCmluZGV4IDE0ODM5MzkuLjliZjRkZGQgMTAwNjQ0Ci0tLSBhL2phdmEvcmVzL3ZhbHVlcy9zdHJpbmdzLnhtbAorKysgYi9qYXZhL3Jlcy92YWx1ZXMvc3RyaW5ncy54bWwKQEAgLTE4LDE4ICsxOCw2IEBACiAqLwogLS0+CiA8cmVzb3VyY2VzIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KLSAgICA8IS0tIEFwcGxpY2F0aW9uIG5hbWUgZm9yIG9wZW5zb3VyY2UgQW5kcm9pZCBrZXlib2FyZC4gQU9TUChBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QpIHNob3VsZCBub3QgYmUgdHJhbnNsYXRlZC4gLS0+Ci0gICAgPHN0cmluZyBuYW1lPSJhb3NwX2FuZHJvaWRfa2V5Ym9hcmRfaW1lX25hbWUiPkFuZHJvaWQgS2V5Ym9hcmQgKEFPU1ApPC9zdHJpbmc+Ci0KLSAgICA8IS0tIFRpdGxlIGZvciBBbmRyb2lkIEtleWJvYXJkIHNldHRpbmdzIHNjcmVlbi4gQU9TUChBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QpIHNob3VsZCBub3QgYmUgdHJhbnNsYXRlZC4gLS0+Ci0gICAgPHN0cmluZyBuYW1lPSJhb3NwX2FuZHJvaWRfa2V5Ym9hcmRfaW1lX3NldHRpbmdzIj5BbmRyb2lkIEtleWJvYXJkIFNldHRpbmdzIChBT1NQKTwvc3RyaW5nPgotCi0gICAgPCEtLSBOYW1lIG9mIEFuZHJvaWQgc3BlbGwgY2hlY2tlciBzZXJ2aWNlLiBBT1NQKEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdCkgc2hvdWxkIG5vdCBiZSB0cmFuc2xhdGVkLiAtLT4KLSAgICA8c3RyaW5nIG5hbWU9ImFvc3Bfc3BlbGxfY2hlY2tlcl9zZXJ2aWNlX25hbWUiPkFuZHJvaWQgU3BlbGwgQ2hlY2tlciAoQU9TUCk8L3N0cmluZz4KLQotICAgIDwhLS0gVGl0bGUgZm9yIHRoZSBzcGVsbCBjaGVja2luZyBzZXJ2aWNlIHNldHRpbmdzIHNjcmVlbi4gQU9TUChBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QpIHNob3VsZCBub3QgYmUgdHJhbnNsYXRlZC4gLS0+Ci0gICAgPHN0cmluZyBuYW1lPSJhb3NwX2FuZHJvaWRfc3BlbGxfY2hlY2tlcl9zZXJ2aWNlX3NldHRpbmdzIj5BbmRyb2lkIFNwZWxsIENoZWNrZXIgU2V0dGluZ3MgKEFPU1ApPC9zdHJpbmc+Ci0KICAgICA8IS0tIFRpdGxlIGZvciBMYXRpbiBrZXlib2FyZCBpbnB1dCBvcHRpb25zIGRpYWxvZyBbQ0hBUiBMSU1JVD0yNV0gLS0+CiAgICAgPHN0cmluZyBuYW1lPSJlbmdsaXNoX2ltZV9pbnB1dF9vcHRpb25zIj5JbnB1dCBvcHRpb25zPC9zdHJpbmc+CiAKZGlmZiAtLWdpdCBhL2phdmEvcmVzL3ZhbHVlcy9zdHlsZXMueG1sIGIvamF2YS9yZXMvdmFsdWVzL3N0eWxlcy54bWwKaW5kZXggNDM2ZTA4MC4uZGFkN2UyMCAxMDA2NDQKLS0tIGEvamF2YS9yZXMvdmFsdWVzL3N0eWxlcy54bWwKKysrIGIvamF2YS9yZXMvdmFsdWVzL3N0eWxlcy54bWwKQEAgLTk0LDggKzk0LDEwIEBACiAgICAgICAgIDxpdGVtIG5hbWU9InNob3dNb3JlS2V5c0tleWJvYXJkQXRUb3VjaGVkUG9pbnQiPkBib29sL2NvbmZpZ19zaG93X21vcmVfa2V5c19rZXlib2FyZF9hdF90b3VjaGVkX3BvaW50PC9pdGVtPgogICAgICAgICA8aXRlbSBuYW1lPSJsYW5ndWFnZU9uU3BhY2ViYXJGaW5hbEFscGhhIj5AaW50ZWdlci9jb25maWdfbGFuZ3VhZ2Vfb25fc3BhY2ViYXJfZmluYWxfYWxwaGE8L2l0ZW0+CiAgICAgICAgIDxpdGVtIG5hbWU9Imxhbmd1YWdlT25TcGFjZWJhckZhZGVvdXRBbmltYXRvciI+QGFuaW0vbGFuZ3VhZ2Vfb25fc3BhY2ViYXJfZmFkZW91dDwvaXRlbT4KKyAgICAgICAgPCEtLSBSZW1vdmUgYW5pbWF0aW9ucyBmb3Igbm93IGJlY2F1c2UgaXQgY291bGQgZHJhaW4gYSBub24tbmVnbGlnaWJsZSBhbW91bnQgb2YgYmF0dGVyeSB3aGlsZSB0eXBpbmcuCiAgICAgICAgIDxpdGVtIG5hbWU9ImFsdENvZGVLZXlXaGlsZVR5cGluZ0ZhZGVvdXRBbmltYXRvciI+QGFuaW0vYWx0X2NvZGVfa2V5X3doaWxlX3R5cGluZ19mYWRlb3V0PC9pdGVtPgogICAgICAgICA8aXRlbSBuYW1lPSJhbHRDb2RlS2V5V2hpbGVUeXBpbmdGYWRlaW5BbmltYXRvciI+QGFuaW0vYWx0X2NvZGVfa2V5X3doaWxlX3R5cGluZ19mYWRlaW48L2l0ZW0+CisgICAgICAgIC0tPgogICAgICAgICA8IS0tIENvbW1vbiBhdHRyaWJ1dGVzIG9mIE1haW5LZXlib2FyZFZpZXcgZm9yIGdlc3R1cmUgdHlwaW5nIGRldGVjdGlvbiBhbmQgcmVjb2duaXRpb24gLS0+CiAgICAgICAgIDxpdGVtIG5hbWU9Imdlc3R1cmVGbG9hdGluZ1ByZXZpZXdUZXh0TGluZ2VyVGltZW91dCI+QGludGVnZXIvY29uZmlnX2dlc3R1cmVfZmxvYXRpbmdfcHJldmlld190ZXh0X2xpbmdlcl90aW1lb3V0PC9pdGVtPgogICAgICAgICA8aXRlbSBuYW1lPSJnZXN0dXJlU3RhdGljVGltZVRocmVzaG9sZEFmdGVyRmFzdFR5cGluZyI+QGludGVnZXIvY29uZmlnX2dlc3R1cmVfc3RhdGljX3RpbWVfdGhyZXNob2xkX2FmdGVyX2Zhc3RfdHlwaW5nPC9pdGVtPgpkaWZmIC0tZ2l0IGEvamF2YS9zcmMvY29tL2FuZHJvaWQvaW5wdXRtZXRob2QvZGljdGlvbmFyeXBhY2svQWN0aW9uQmF0Y2guamF2YSBiL2phdmEvc3JjL2NvbS9hbmRyb2lkL2lucHV0bWV0aG9kL2RpY3Rpb25hcnlwYWNrL0FjdGlvbkJhdGNoLmphdmEKaW5kZXggZmFmNWQzYy4uYTlkNzk5MiAxMDA2NDQKLS0tIGEvamF2YS9zcmMvY29tL2FuZHJvaWQvaW5wdXRtZXRob2QvZGljdGlvbmFyeXBhY2svQWN0aW9uQmF0Y2guamF2YQorKysgYi9qYXZhL3NyYy9jb20vYW5kcm9pZC9pbnB1dG1ldGhvZC9kaWN0aW9uYXJ5cGFjay9BY3Rpb25CYXRjaC5qYXZhCkBAIC0xMzgsNyArMTM4LDEyIEBACiAgICAgICAgICAgICBpZiAobnVsbCA9PSBtYW5hZ2VyKSByZXR1cm47CiAKICAgICAgICAgICAgIC8vIFRoaXMgaXMgYW4gdXBncmFkZWQgd29yZCBsaXN0OiB3ZSBzaG91bGQgZG93bmxvYWQgaXQuCi0gICAgICAgICAgICBmaW5hbCBVcmkgdXJpID0gVXJpLnBhcnNlKG1Xb3JkTGlzdC5tUmVtb3RlRmlsZW5hbWUpOworICAgICAgICAgICAgLy8gQWRkaW5nIGEgZGlzYW1iaWd1YXRvciB0byBjaXJjdW12ZW50IGEgYnVnIGluIG9sZGVyIHZlcnNpb25zIG9mIERvd25sb2FkTWFuYWdlci4KKyAgICAgICAgICAgIC8vIERvd25sb2FkTWFuYWdlciBhbHNvIHN0dXBpZGx5IGN1dHMgdGhlIGV4dGVuc2lvbiB0byByZXBsYWNlIHdpdGggaXRzIG93biB0aGF0IGl0CisgICAgICAgICAgICAvLyBnZXRzIGZyb20gdGhlIGNvbnRlbnQtdHlwZS4gV2UgbmVlZCB0byBjaXJjdW12ZW50IHRoaXMuCisgICAgICAgICAgICBmaW5hbCBTdHJpbmcgZGlzYW1iaWd1YXRvciA9ICIjIiArIFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpCisgICAgICAgICAgICAgICAgICAgICsgY29tLmFuZHJvaWQuaW5wdXRtZXRob2QubGF0aW4uVXRpbHMuZ2V0VmVyc2lvbk5hbWUoY29udGV4dCkgKyAiLmRpY3QiOworICAgICAgICAgICAgZmluYWwgVXJpIHVyaSA9IFVyaS5wYXJzZShtV29yZExpc3QubVJlbW90ZUZpbGVuYW1lICsgZGlzYW1iaWd1YXRvcik7CiAgICAgICAgICAgICBmaW5hbCBSZXF1ZXN0IHJlcXVlc3QgPSBuZXcgUmVxdWVzdCh1cmkpOwogCiAgICAgICAgICAgICBmaW5hbCBSZXNvdXJjZXMgcmVzID0gY29udGV4dC5nZXRSZXNvdXJjZXMoKTsKZGlmZiAtLWdpdCBhL2phdmEvc3JjL2NvbS9hbmRyb2lkL2lucHV0bWV0aG9kL2RpY3Rpb25hcnlwYWNrL0J1dHRvblN3aXRjaGVyLmphdmEgYi9qYXZhL3NyYy9jb20vYW5kcm9pZC9pbnB1dG1ldGhvZC9kaWN0aW9uYXJ5cGFjay9CdXR0b25Td2l0Y2hlci5qYXZhCmluZGV4IGEwNjIyOTguLjM5MWExNWMgMTAwNjQ0Ci0tLSBhL2phdmEvc3JjL2NvbS9hbmRyb2lkL2lucHV0bWV0aG9kL2RpY3Rpb25hcnlwYWNrL0J1dHRvblN3aXRjaGVyLmphdmEKKysrIGIvamF2YS9zcmMvY29tL2FuZHJvaWQvaW5wdXRtZXRob2QvZGljdGlvbmFyeXBhY2svQnV0dG9uU3dpdGNoZXIuamF2YQpAQCAtMTYsOSArMTYsMTIgQEAKIAogcGFja2FnZSBjb20uYW5kcm9pZC5pbnB1dG1ldGhvZC5kaWN0aW9uYXJ5cGFjazsKIAoraW1wb3J0IGFuZHJvaWQuYW5pbWF0aW9uLkFuaW1hdG9yOworaW1wb3J0IGFuZHJvaWQuYW5pbWF0aW9uLkFuaW1hdG9yTGlzdGVuZXJBZGFwdGVyOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwogaW1wb3J0IGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQ7CiBpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXc7CitpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXdQcm9wZXJ0eUFuaW1hdG9yOwogaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkJ1dHRvbjsKIGltcG9ydCBhbmRyb2lkLndpZGdldC5GcmFtZUxheW91dDsKIApAQCAtMjgsMTAgKzMxLDI0IEBACiAgKiBBIHZpZXcgdGhhdCBoYW5kbGVzIGJ1dHRvbnMgaW5zaWRlIGl0IGFjY29yZGluZyB0byBhIHN0YXR1cy4KICAqLwogcHVibGljIGNsYXNzIEJ1dHRvblN3aXRjaGVyIGV4dGVuZHMgRnJhbWVMYXlvdXQgeworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE5PVF9JTklUSUFMSVpFRCA9IC0xOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNUQVRVU19OT19CVVRUT04gPSAwOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNUQVRVU19JTlNUQUxMID0gMTsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTVEFUVVNfQ0FOQ0VMID0gMjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTVEFUVVNfREVMRVRFID0gMzsKKyAgICAvLyBPbmUgb2YgdGhlIGFib3ZlCisgICAgcHJpdmF0ZSBpbnQgbVN0YXR1cyA9IE5PVF9JTklUSUFMSVpFRDsKKyAgICBwcml2YXRlIGludCBtQW5pbWF0ZVRvU3RhdHVzID0gTk9UX0lOSVRJQUxJWkVEOworCiAgICAgLy8gQW5pbWF0aW9uIGRpcmVjdGlvbnMKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBBTklNQVRJT05fSU4gPSAxOwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEFOSU1BVElPTl9PVVQgPSAyOwogCisgICAgcHJpdmF0ZSBCdXR0b24gbUluc3RhbGxCdXR0b247CisgICAgcHJpdmF0ZSBCdXR0b24gbUNhbmNlbEJ1dHRvbjsKKyAgICBwcml2YXRlIEJ1dHRvbiBtRGVsZXRlQnV0dG9uOworICAgIHByaXZhdGUgT25DbGlja0xpc3RlbmVyIG1PbkNsaWNrTGlzdGVuZXI7CisKICAgICBwdWJsaWMgQnV0dG9uU3dpdGNoZXIoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMpIHsKICAgICAgICAgc3VwZXIoY29udGV4dCwgYXR0cnMpOwogICAgIH0KQEAgLTQwLDMwICs1Nyw5NiBAQAogICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycywgZGVmU3R5bGUpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIHNldFRleHQoZmluYWwgQ2hhclNlcXVlbmNlIHRleHQpIHsKLSAgICAgICAgKChCdXR0b24pZmluZFZpZXdCeUlkKFIuaWQuZGljdF9pbnN0YWxsX2J1dHRvbikpLnNldFRleHQodGV4dCk7CisgICAgQE92ZXJyaWRlCisgICAgcHJvdGVjdGVkIHZvaWQgb25MYXlvdXQoZmluYWwgYm9vbGVhbiBjaGFuZ2VkLCBmaW5hbCBpbnQgbGVmdCwgZmluYWwgaW50IHRvcCwgZmluYWwgaW50IHJpZ2h0LAorICAgICAgICAgICAgZmluYWwgaW50IGJvdHRvbSkgeworICAgICAgICBzdXBlci5vbkxheW91dChjaGFuZ2VkLCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pOworICAgICAgICBtSW5zdGFsbEJ1dHRvbiA9IChCdXR0b24pZmluZFZpZXdCeUlkKFIuaWQuZGljdF9pbnN0YWxsX2J1dHRvbik7CisgICAgICAgIG1DYW5jZWxCdXR0b24gPSAoQnV0dG9uKWZpbmRWaWV3QnlJZChSLmlkLmRpY3RfY2FuY2VsX2J1dHRvbik7CisgICAgICAgIG1EZWxldGVCdXR0b24gPSAoQnV0dG9uKWZpbmRWaWV3QnlJZChSLmlkLmRpY3RfZGVsZXRlX2J1dHRvbik7CisgICAgICAgIG1JbnN0YWxsQnV0dG9uLnNldE9uQ2xpY2tMaXN0ZW5lcihtT25DbGlja0xpc3RlbmVyKTsKKyAgICAgICAgbUNhbmNlbEJ1dHRvbi5zZXRPbkNsaWNrTGlzdGVuZXIobU9uQ2xpY2tMaXN0ZW5lcik7CisgICAgICAgIG1EZWxldGVCdXR0b24uc2V0T25DbGlja0xpc3RlbmVyKG1PbkNsaWNrTGlzdGVuZXIpOworICAgICAgICBzZXRCdXR0b25Qb3NpdGlvbldpdGhvdXRBbmltYXRpb24obVN0YXR1cyk7CisgICAgICAgIGlmIChtQW5pbWF0ZVRvU3RhdHVzICE9IE5PVF9JTklUSUFMSVpFRCkgeworICAgICAgICAgICAgLy8gV2UgaGF2ZSBiZWVuIGFza2VkIHRvIGFuaW1hdGUgYmVmb3JlIHdlIHdlcmUgcmVhZHksIHNvIHdlIHRvb2sgYSBub3RlIG9mIGl0LgorICAgICAgICAgICAgLy8gV2UgYXJlIG5vdyByZWFkeTogbGF1bmNoIHRoZSBhbmltYXRpb24uCisgICAgICAgICAgICBhbmltYXRlQnV0dG9uUG9zaXRpb24obVN0YXR1cywgbUFuaW1hdGVUb1N0YXR1cyk7CisgICAgICAgICAgICBtU3RhdHVzID0gbUFuaW1hdGVUb1N0YXR1czsKKyAgICAgICAgICAgIG1BbmltYXRlVG9TdGF0dXMgPSBOT1RfSU5JVElBTElaRUQ7CisgICAgICAgIH0KICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBzZXRJbnRlcm5hbEJ1dHRvblZpc2libGlsaXR5KGZpbmFsIGludCB2aXNpYmlsaXR5KSB7Ci0gICAgICAgIGZpbmRWaWV3QnlJZChSLmlkLmRpY3RfaW5zdGFsbF9idXR0b24pLnNldFZpc2liaWxpdHkodmlzaWJpbGl0eSk7CisgICAgcHJpdmF0ZSBCdXR0b24gZ2V0QnV0dG9uKGZpbmFsIGludCBzdGF0dXMpIHsKKyAgICAgICAgc3dpdGNoKHN0YXR1cykgeworICAgICAgICBjYXNlIFNUQVRVU19JTlNUQUxMOgorICAgICAgICAgICAgcmV0dXJuIG1JbnN0YWxsQnV0dG9uOworICAgICAgICBjYXNlIFNUQVRVU19DQU5DRUw6CisgICAgICAgICAgICByZXR1cm4gbUNhbmNlbEJ1dHRvbjsKKyAgICAgICAgY2FzZSBTVEFUVVNfREVMRVRFOgorICAgICAgICAgICAgcmV0dXJuIG1EZWxldGVCdXR0b247CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHNldFN0YXR1c0FuZFVwZGF0ZVZpc3VhbHMoZmluYWwgaW50IHN0YXR1cykgeworICAgICAgICBpZiAobVN0YXR1cyA9PSBOT1RfSU5JVElBTElaRUQpIHsKKyAgICAgICAgICAgIHNldEJ1dHRvblBvc2l0aW9uV2l0aG91dEFuaW1hdGlvbihzdGF0dXMpOworICAgICAgICAgICAgbVN0YXR1cyA9IHN0YXR1czsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChudWxsID09IG1JbnN0YWxsQnV0dG9uKSB7CisgICAgICAgICAgICAgICAgLy8gV2UgbWF5IGNvbWUgaGVyZSBiZWZvcmUgd2UgaGF2ZSBiZWVuIGxheW91dC4gSW4gdGhpcyBjYXNlIHdlIGRvbid0IGtub3cgb3VyCisgICAgICAgICAgICAgICAgLy8gc2l6ZSB5ZXQgc28gd2UgY2FuJ3Qgc3RhcnQgYW5pbWF0aW9ucyBzbyB3ZSBuZWVkIHRvIHJlbWVtYmVyIHdoYXQgYW5pbWF0aW9uIHRvCisgICAgICAgICAgICAgICAgLy8gc3RhcnQgb25jZSBsYXlvdXQgaGFzIGdvbmUgdGhyb3VnaC4KKyAgICAgICAgICAgICAgICBtQW5pbWF0ZVRvU3RhdHVzID0gc3RhdHVzOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBhbmltYXRlQnV0dG9uUG9zaXRpb24obVN0YXR1cywgc3RhdHVzKTsKKyAgICAgICAgICAgICAgICBtU3RhdHVzID0gc3RhdHVzOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIHNldEJ1dHRvblBvc2l0aW9uV2l0aG91dEFuaW1hdGlvbihmaW5hbCBpbnQgc3RhdHVzKSB7CisgICAgICAgIC8vIFRoaXMgbWF5IGJlIGNhbGxlZCBieSBzZXRTdGF0dXMoKSBiZWZvcmUgdGhlIGxheW91dCBoYXMgY29tZSB5ZXQuCisgICAgICAgIGlmIChudWxsID09IG1JbnN0YWxsQnV0dG9uKSByZXR1cm47CisgICAgICAgIGZpbmFsIGludCB3aWR0aCA9IGdldFdpZHRoKCk7CisgICAgICAgIC8vIFNldCB0byBvdXQgb2YgdGhlIHNjcmVlbiBpZiB0aGF0J3Mgbm90IHRoZSBjdXJyZW50bHkgZGlzcGxheWVkIHN0YXR1cworICAgICAgICBtSW5zdGFsbEJ1dHRvbi5zZXRUcmFuc2xhdGlvblgoU1RBVFVTX0lOU1RBTEwgPT0gc3RhdHVzID8gMCA6IHdpZHRoKTsKKyAgICAgICAgbUNhbmNlbEJ1dHRvbi5zZXRUcmFuc2xhdGlvblgoU1RBVFVTX0NBTkNFTCA9PSBzdGF0dXMgPyAwIDogd2lkdGgpOworICAgICAgICBtRGVsZXRlQnV0dG9uLnNldFRyYW5zbGF0aW9uWChTVEFUVVNfREVMRVRFID09IHN0YXR1cyA/IDAgOiB3aWR0aCk7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIGFuaW1hdGVCdXR0b25Qb3NpdGlvbihmaW5hbCBpbnQgb2xkU3RhdHVzLCBmaW5hbCBpbnQgbmV3U3RhdHVzKSB7CisgICAgICAgIGZpbmFsIFZpZXcgb2xkQnV0dG9uID0gZ2V0QnV0dG9uKG9sZFN0YXR1cyk7CisgICAgICAgIGZpbmFsIFZpZXcgbmV3QnV0dG9uID0gZ2V0QnV0dG9uKG5ld1N0YXR1cyk7CisgICAgICAgIGlmIChudWxsICE9IG9sZEJ1dHRvbiAmJiBudWxsICE9IG5ld0J1dHRvbikgeworICAgICAgICAgICAgLy8gVHJhbnNpdGlvbiBiZXR3ZWVuIHR3byBidXR0b25zIDogYW5pbWF0ZSBvdXQsIHRoZW4gaW4KKyAgICAgICAgICAgIGFuaW1hdGVCdXR0b24ob2xkQnV0dG9uLCBBTklNQVRJT05fT1VUKS5zZXRMaXN0ZW5lcigKKyAgICAgICAgICAgICAgICAgICAgbmV3IEFuaW1hdG9yTGlzdGVuZXJBZGFwdGVyKCkgeworICAgICAgICAgICAgICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBvbkFuaW1hdGlvbkVuZChmaW5hbCBBbmltYXRvciBhbmltYXRpb24pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmltYXRlQnV0dG9uKG5ld0J1dHRvbiwgQU5JTUFUSU9OX0lOKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgIH0gZWxzZSBpZiAobnVsbCAhPSBvbGRCdXR0b24pIHsKKyAgICAgICAgICAgIGFuaW1hdGVCdXR0b24ob2xkQnV0dG9uLCBBTklNQVRJT05fT1VUKTsKKyAgICAgICAgfSBlbHNlIGlmIChudWxsICE9IG5ld0J1dHRvbikgeworICAgICAgICAgICAgYW5pbWF0ZUJ1dHRvbihuZXdCdXR0b24sIEFOSU1BVElPTl9JTik7CisgICAgICAgIH0KICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBzZXRJbnRlcm5hbE9uQ2xpY2tMaXN0ZW5lcihmaW5hbCBPbkNsaWNrTGlzdGVuZXIgbGlzdGVuZXIpIHsKLSAgICAgICAgZmluZFZpZXdCeUlkKFIuaWQuZGljdF9pbnN0YWxsX2J1dHRvbikuc2V0T25DbGlja0xpc3RlbmVyKGxpc3RlbmVyKTsKKyAgICAgICAgbU9uQ2xpY2tMaXN0ZW5lciA9IGxpc3RlbmVyOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGFuaW1hdGVCdXR0b24oZmluYWwgaW50IGRpcmVjdGlvbikgewotICAgICAgICBmaW5hbCBWaWV3IGJ1dHRvbiA9IGZpbmRWaWV3QnlJZChSLmlkLmRpY3RfaW5zdGFsbF9idXR0b24pOworICAgIHByaXZhdGUgVmlld1Byb3BlcnR5QW5pbWF0b3IgYW5pbWF0ZUJ1dHRvbihmaW5hbCBWaWV3IGJ1dHRvbiwgZmluYWwgaW50IGRpcmVjdGlvbikgewogICAgICAgICBmaW5hbCBmbG9hdCBvdXRlclggPSBnZXRXaWR0aCgpOwogICAgICAgICBmaW5hbCBmbG9hdCBpbm5lclggPSBidXR0b24uZ2V0WCgpIC0gYnV0dG9uLmdldFRyYW5zbGF0aW9uWCgpOwotICAgICAgICBpZiAoVmlldy5JTlZJU0lCTEUgPT0gYnV0dG9uLmdldFZpc2liaWxpdHkoKSkgewotICAgICAgICAgICAgYnV0dG9uLnNldFRyYW5zbGF0aW9uWChvdXRlclggLSBpbm5lclgpOwotICAgICAgICAgICAgYnV0dG9uLnNldFZpc2liaWxpdHkoVmlldy5WSVNJQkxFKTsKLSAgICAgICAgfQogICAgICAgICBpZiAoQU5JTUFUSU9OX0lOID09IGRpcmVjdGlvbikgewotICAgICAgICAgICAgYnV0dG9uLmFuaW1hdGUoKS50cmFuc2xhdGlvblgoMCk7CisgICAgICAgICAgICByZXR1cm4gYnV0dG9uLmFuaW1hdGUoKS50cmFuc2xhdGlvblgoMCk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBidXR0b24uYW5pbWF0ZSgpLnRyYW5zbGF0aW9uWChvdXRlclggLSBpbm5lclgpOworICAgICAgICAgICAgcmV0dXJuIGJ1dHRvbi5hbmltYXRlKCkudHJhbnNsYXRpb25YKG91dGVyWCAtIGlubmVyWCk7CiAgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9qYXZhL3NyYy9jb20vYW5kcm9pZC9pbnB1dG1ldGhvZC9kaWN0aW9uYXJ5cGFjay9EaWN0aW9uYXJ5TGlzdEludGVyZmFjZVN0YXRlLmphdmEgYi9qYXZhL3NyYy9jb20vYW5kcm9pZC9pbnB1dG1ldGhvZC9kaWN0aW9uYXJ5cGFjay9EaWN0aW9uYXJ5TGlzdEludGVyZmFjZVN0YXRlLmphdmEKaW5kZXggODk3NWQ2OS4uZGUzNzExYyAxMDA2NDQKLS0tIGEvamF2YS9zcmMvY29tL2FuZHJvaWQvaW5wdXRtZXRob2QvZGljdGlvbmFyeXBhY2svRGljdGlvbmFyeUxpc3RJbnRlcmZhY2VTdGF0ZS5qYXZhCisrKyBiL2phdmEvc3JjL2NvbS9hbmRyb2lkL2lucHV0bWV0aG9kL2RpY3Rpb25hcnlwYWNrL0RpY3Rpb25hcnlMaXN0SW50ZXJmYWNlU3RhdGUuamF2YQpAQCAtNDQsNiArNDQsMTIgQEAKICAgICAgICAgcmV0dXJuIHN0YXRlLm1PcGVuOwogICAgIH0KIAorICAgIHB1YmxpYyBpbnQgZ2V0U3RhdHVzKGZpbmFsIFN0cmluZyB3b3JkbGlzdElkKSB7CisgICAgICAgIGZpbmFsIFN0YXRlIHN0YXRlID0gbVdvcmRsaXN0VG9TdGF0ZS5nZXQod29yZGxpc3RJZCk7CisgICAgICAgIGlmIChudWxsID09IHN0YXRlKSByZXR1cm4gTWV0YWRhdGFEYkhlbHBlci5TVEFUVVNfVU5LTk9XTjsKKyAgICAgICAgcmV0dXJuIHN0YXRlLm1TdGF0dXM7CisgICAgfQorCiAgICAgcHVibGljIHZvaWQgc2V0T3BlbihmaW5hbCBTdHJpbmcgd29yZGxpc3RJZCwgZmluYWwgaW50IHN0YXR1cykgewogICAgICAgICBmaW5hbCBTdGF0ZSBuZXdTdGF0ZTsKICAgICAgICAgZmluYWwgU3RhdGUgc3RhdGUgPSBtV29yZGxpc3RUb1N0YXRlLmdldCh3b3JkbGlzdElkKTsKZGlmZiAtLWdpdCBhL2phdmEvc3JjL2NvbS9hbmRyb2lkL2lucHV0bWV0aG9kL2RpY3Rpb25hcnlwYWNrL1VwZGF0ZUhhbmRsZXIuamF2YSBiL2phdmEvc3JjL2NvbS9hbmRyb2lkL2lucHV0bWV0aG9kL2RpY3Rpb25hcnlwYWNrL1VwZGF0ZUhhbmRsZXIuamF2YQppbmRleCBhNTk2NjA5Li4zZjkxN2YxIDEwMDY0NAotLS0gYS9qYXZhL3NyYy9jb20vYW5kcm9pZC9pbnB1dG1ldGhvZC9kaWN0aW9uYXJ5cGFjay9VcGRhdGVIYW5kbGVyLmphdmEKKysrIGIvamF2YS9zcmMvY29tL2FuZHJvaWQvaW5wdXRtZXRob2QvZGljdGlvbmFyeXBhY2svVXBkYXRlSGFuZGxlci5qYXZhCkBAIC0yMTIsNyArMjEyLDEyIEBACiAgICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCB1cGRhdGVDbGllbnRzV2l0aE1ldGFkYXRhVXJpKGZpbmFsIENvbnRleHQgY29udGV4dCwKICAgICAgICAgICAgIGZpbmFsIGJvb2xlYW4gdXBkYXRlTm93LCBmaW5hbCBTdHJpbmcgbWV0YWRhdGFVcmkpIHsKICAgICAgICAgUHJpdmF0ZUxvZy5sb2coIlVwZGF0ZSBmb3IgbWV0YWRhdGEgVVJJICIgKyBVdGlscy5zKG1ldGFkYXRhVXJpKSk7Ci0gICAgICAgIGZpbmFsIFJlcXVlc3QgbWV0YWRhdGFSZXF1ZXN0ID0gbmV3IFJlcXVlc3QoVXJpLnBhcnNlKG1ldGFkYXRhVXJpKSk7CisgICAgICAgIC8vIEFkZGluZyBhIGRpc2FtYmlndWF0b3IgdG8gY2lyY3VtdmVudCBhIGJ1ZyBpbiBvbGRlciB2ZXJzaW9ucyBvZiBEb3dubG9hZE1hbmFnZXIuCisgICAgICAgIC8vIERvd25sb2FkTWFuYWdlciBhbHNvIHN0dXBpZGx5IGN1dHMgdGhlIGV4dGVuc2lvbiB0byByZXBsYWNlIHdpdGggaXRzIG93biB0aGF0IGl0CisgICAgICAgIC8vIGdldHMgZnJvbSB0aGUgY29udGVudC10eXBlLiBXZSBuZWVkIHRvIGNpcmN1bXZlbnQgdGhpcy4KKyAgICAgICAgZmluYWwgU3RyaW5nIGRpc2FtYmlndWF0b3IgPSAiIyIgKyBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKQorICAgICAgICAgICAgICAgICsgY29tLmFuZHJvaWQuaW5wdXRtZXRob2QubGF0aW4uVXRpbHMuZ2V0VmVyc2lvbk5hbWUoY29udGV4dCkgKyAiLmpzb24iOworICAgICAgICBmaW5hbCBSZXF1ZXN0IG1ldGFkYXRhUmVxdWVzdCA9IG5ldyBSZXF1ZXN0KFVyaS5wYXJzZShtZXRhZGF0YVVyaSArIGRpc2FtYmlndWF0b3IpKTsKICAgICAgICAgVXRpbHMubCgiUmVxdWVzdCA9IiwgbWV0YWRhdGFSZXF1ZXN0KTsKIAogICAgICAgICBmaW5hbCBSZXNvdXJjZXMgcmVzID0gY29udGV4dC5nZXRSZXNvdXJjZXMoKTsKQEAgLTM1MSw3ICszNTYsMTMgQEAKICAgICAgICAgICAgICAgICBmaW5hbCBpbnQgY29sdW1uVXJpID0gY3Vyc29yLmdldENvbHVtbkluZGV4KERvd25sb2FkTWFuYWdlci5DT0xVTU5fVVJJKTsKICAgICAgICAgICAgICAgICBmaW5hbCBpbnQgZXJyb3IgPSBjdXJzb3IuZ2V0SW50KGNvbHVtbkVycm9yKTsKICAgICAgICAgICAgICAgICBzdGF0dXMgPSBjdXJzb3IuZ2V0SW50KGNvbHVtblN0YXR1cyk7Ci0gICAgICAgICAgICAgICAgdXJpID0gY3Vyc29yLmdldFN0cmluZyhjb2x1bW5VcmkpOworICAgICAgICAgICAgICAgIGZpbmFsIFN0cmluZyB1cmlXaXRoQW5jaG9yID0gY3Vyc29yLmdldFN0cmluZyhjb2x1bW5VcmkpOworICAgICAgICAgICAgICAgIGludCBhbmNob3JJbmRleCA9IHVyaVdpdGhBbmNob3IuaW5kZXhPZignIycpOworICAgICAgICAgICAgICAgIGlmIChhbmNob3JJbmRleCAhPSAtMSkgeworICAgICAgICAgICAgICAgICAgICB1cmkgPSB1cmlXaXRoQW5jaG9yLnN1YnN0cmluZygwLCBhbmNob3JJbmRleCk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgdXJpID0gdXJpV2l0aEFuY2hvcjsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgaWYgKERvd25sb2FkTWFuYWdlci5TVEFUVVNfU1VDQ0VTU0ZVTCAhPSBzdGF0dXMpIHsKICAgICAgICAgICAgICAgICAgICAgTG9nLmUoVEFHLCAiUGVybWFuZW50IGZhaWx1cmUgb2YgZG93bmxvYWQgIiArIGRvd25sb2FkSWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIgd2l0aCBlcnJvciBjb2RlOiAiICsgZXJyb3IpOwpkaWZmIC0tZ2l0IGEvamF2YS9zcmMvY29tL2FuZHJvaWQvaW5wdXRtZXRob2QvZGljdGlvbmFyeXBhY2svV29yZExpc3RQcmVmZXJlbmNlLmphdmEgYi9qYXZhL3NyYy9jb20vYW5kcm9pZC9pbnB1dG1ldGhvZC9kaWN0aW9uYXJ5cGFjay9Xb3JkTGlzdFByZWZlcmVuY2UuamF2YQppbmRleCBmMWMwMjI4Li4xY2Y5MTk2IDEwMDY0NAotLS0gYS9qYXZhL3NyYy9jb20vYW5kcm9pZC9pbnB1dG1ldGhvZC9kaWN0aW9uYXJ5cGFjay9Xb3JkTGlzdFByZWZlcmVuY2UuamF2YQorKysgYi9qYXZhL3NyYy9jb20vYW5kcm9pZC9pbnB1dG1ldGhvZC9kaWN0aW9uYXJ5cGFjay9Xb3JkTGlzdFByZWZlcmVuY2UuamF2YQpAQCAtMTEwLDI5ICsxMTAsMzEgQEAKICAgICAgICAgfQogICAgIH0KIAorICAgIC8vIFRoZSB0YWJsZSBiZWxvdyBuZWVkcyB0byBiZSBrZXB0IGluIHN5bmMgd2l0aCBNZXRhZGF0YURiSGVscGVyLlNUQVRVU18qIHNpbmNlIGl0IHVzZXMKKyAgICAvLyB0aGUgdmFsdWVzIGFzIGluZGljZXMuCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IHNTdGF0dXNBY3Rpb25MaXN0W11bXSA9IHsKICAgICAgICAgLy8gTWV0YWRhdGFEYkhlbHBlci5TVEFUVVNfVU5LTk9XTgogICAgICAgICB7fSwKICAgICAgICAgLy8gTWV0YWRhdGFEYkhlbHBlci5TVEFUVVNfQVZBSUxBQkxFCi0gICAgICAgIHsgUi5zdHJpbmcuaW5zdGFsbF9kaWN0LCBBQ1RJT05fRU5BQkxFX0RJQ1QgfSwKKyAgICAgICAgeyBCdXR0b25Td2l0Y2hlci5TVEFUVVNfSU5TVEFMTCwgQUNUSU9OX0VOQUJMRV9ESUNUIH0sCiAgICAgICAgIC8vIE1ldGFkYXRhRGJIZWxwZXIuU1RBVFVTX0RPV05MT0FESU5HCi0gICAgICAgIHsgUi5zdHJpbmcuY2FuY2VsX2Rvd25sb2FkX2RpY3QsIEFDVElPTl9ESVNBQkxFX0RJQ1QgfSwKKyAgICAgICAgeyBCdXR0b25Td2l0Y2hlci5TVEFUVVNfQ0FOQ0VMLCBBQ1RJT05fRElTQUJMRV9ESUNUIH0sCiAgICAgICAgIC8vIE1ldGFkYXRhRGJIZWxwZXIuU1RBVFVTX0lOU1RBTExFRAotICAgICAgICB7IFIuc3RyaW5nLmRlbGV0ZV9kaWN0LCBBQ1RJT05fREVMRVRFX0RJQ1QgfSwKKyAgICAgICAgeyBCdXR0b25Td2l0Y2hlci5TVEFUVVNfREVMRVRFLCBBQ1RJT05fREVMRVRFX0RJQ1QgfSwKICAgICAgICAgLy8gTWV0YWRhdGFEYkhlbHBlci5TVEFUVVNfRElTQUJMRUQKLSAgICAgICAgeyBSLnN0cmluZy5kZWxldGVfZGljdCwgQUNUSU9OX0RFTEVURV9ESUNUIH0sCisgICAgICAgIHsgQnV0dG9uU3dpdGNoZXIuU1RBVFVTX0RFTEVURSwgQUNUSU9OX0RFTEVURV9ESUNUIH0sCiAgICAgICAgIC8vIE1ldGFkYXRhRGJIZWxwZXIuU1RBVFVTX0RFTEVUSU5HCiAgICAgICAgIC8vIFdlIHNob3cgJ2luc3RhbGwnIGJlY2F1c2UgdGhlIGZpbGUgaXMgc3VwcG9zZWQgdG8gYmUgZGVsZXRlZC4KICAgICAgICAgLy8gVGhlIHVzZXIgbWF5IHJlaW5zdGFsbCBpdC4KLSAgICAgICAgeyBSLnN0cmluZy5pbnN0YWxsX2RpY3QsIEFDVElPTl9FTkFCTEVfRElDVCB9CisgICAgICAgIHsgQnV0dG9uU3dpdGNoZXIuU1RBVFVTX0lOU1RBTEwsIEFDVElPTl9FTkFCTEVfRElDVCB9CiAgICAgfTsKIAotICAgIHByaXZhdGUgQ2hhclNlcXVlbmNlIGdldEJ1dHRvbkxhYmVsKGZpbmFsIGludCBzdGF0dXMpIHsKKyAgICBwcml2YXRlIGludCBnZXRCdXR0b25Td2l0Y2hlclN0YXR1cyhmaW5hbCBpbnQgc3RhdHVzKSB7CiAgICAgICAgIGlmIChzdGF0dXMgPj0gc1N0YXR1c0FjdGlvbkxpc3QubGVuZ3RoKSB7CiAgICAgICAgICAgICBMb2cuZShUQUcsICJVbmtub3duIHN0YXR1cyAiICsgc3RhdHVzKTsKLSAgICAgICAgICAgIHJldHVybiAiIjsKKyAgICAgICAgICAgIHJldHVybiBCdXR0b25Td2l0Y2hlci5TVEFUVVNfTk9fQlVUVE9OOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBtQ29udGV4dC5nZXRTdHJpbmcoc1N0YXR1c0FjdGlvbkxpc3Rbc3RhdHVzXVswXSk7CisgICAgICAgIHJldHVybiBzU3RhdHVzQWN0aW9uTGlzdFtzdGF0dXNdWzBdOwogICAgIH0KIAogICAgIHByaXZhdGUgc3RhdGljIGludCBnZXRBY3Rpb25JZEZyb21TdGF0dXNBbmRNZW51RW50cnkoZmluYWwgaW50IHN0YXR1cykgewpAQCAtMTg5LDkgKzE5MSwyMCBAQAogICAgICAgICAoKFZpZXdHcm91cCl2aWV3KS5zZXRMYXlvdXRUcmFuc2l0aW9uKG51bGwpOwogICAgICAgICBmaW5hbCBCdXR0b25Td2l0Y2hlciBidXR0b25Td2l0Y2hlciA9CiAgICAgICAgICAgICAgICAgKEJ1dHRvblN3aXRjaGVyKXZpZXcuZmluZFZpZXdCeUlkKFIuaWQud29yZGxpc3RfYnV0dG9uX3N3aXRjaGVyKTsKLSAgICAgICAgYnV0dG9uU3dpdGNoZXIuc2V0VGV4dChnZXRCdXR0b25MYWJlbChtU3RhdHVzKSk7Ci0gICAgICAgIGJ1dHRvblN3aXRjaGVyLnNldEludGVybmFsQnV0dG9uVmlzaWJsaWxpdHkobUludGVyZmFjZVN0YXRlLmlzT3BlbihtV29yZGxpc3RJZCkgPwotICAgICAgICAgICAgICAgIFZpZXcuVklTSUJMRSA6IFZpZXcuSU5WSVNJQkxFKTsKKyAgICAgICAgaWYgKG1JbnRlcmZhY2VTdGF0ZS5pc09wZW4obVdvcmRsaXN0SWQpKSB7CisgICAgICAgICAgICAvLyBUaGUgYnV0dG9uIGlzIG9wZW4uCisgICAgICAgICAgICBmaW5hbCBpbnQgcHJldmlvdXNTdGF0dXMgPSBtSW50ZXJmYWNlU3RhdGUuZ2V0U3RhdHVzKG1Xb3JkbGlzdElkKTsKKyAgICAgICAgICAgIGJ1dHRvblN3aXRjaGVyLnNldFN0YXR1c0FuZFVwZGF0ZVZpc3VhbHMoZ2V0QnV0dG9uU3dpdGNoZXJTdGF0dXMocHJldmlvdXNTdGF0dXMpKTsKKyAgICAgICAgICAgIGlmIChwcmV2aW91c1N0YXR1cyAhPSBtU3RhdHVzKSB7CisgICAgICAgICAgICAgICAgLy8gV2UgY29tZSBoZXJlIGlmIHRoZSBzdGF0dXMgaGFzIGNoYW5nZWQgc2luY2UgbGFzdCB0aW1lLiBXZSBuZWVkIHRvIGFuaW1hdGUKKyAgICAgICAgICAgICAgICAvLyB0aGUgdHJhbnNpdGlvbi4KKyAgICAgICAgICAgICAgICBidXR0b25Td2l0Y2hlci5zZXRTdGF0dXNBbmRVcGRhdGVWaXN1YWxzKGdldEJ1dHRvblN3aXRjaGVyU3RhdHVzKG1TdGF0dXMpKTsKKyAgICAgICAgICAgICAgICBtSW50ZXJmYWNlU3RhdGUuc2V0T3BlbihtV29yZGxpc3RJZCwgbVN0YXR1cyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBUaGUgYnV0dG9uIGlzIGNsb3NlZC4KKyAgICAgICAgICAgIGJ1dHRvblN3aXRjaGVyLnNldFN0YXR1c0FuZFVwZGF0ZVZpc3VhbHMoQnV0dG9uU3dpdGNoZXIuU1RBVFVTX05PX0JVVFRPTik7CisgICAgICAgIH0KICAgICAgICAgYnV0dG9uU3dpdGNoZXIuc2V0SW50ZXJuYWxPbkNsaWNrTGlzdGVuZXIobUFjdGlvbkJ1dHRvbkNsaWNrSGFuZGxlcik7CiAgICAgICAgIHZpZXcuc2V0T25DbGlja0xpc3RlbmVyKG1QcmVmZXJlbmNlQ2xpY2tIYW5kbGVyKTsKICAgICB9CkBAIC0yMjQsOSArMjM3LDkgQEAKICAgICAgICAgICAgICAgICBmaW5hbCBCdXR0b25Td2l0Y2hlciBidXR0b25Td2l0Y2hlciA9IChCdXR0b25Td2l0Y2hlcilsaXN0Vmlldy5nZXRDaGlsZEF0KGkpCiAgICAgICAgICAgICAgICAgICAgICAgICAuZmluZFZpZXdCeUlkKFIuaWQud29yZGxpc3RfYnV0dG9uX3N3aXRjaGVyKTsKICAgICAgICAgICAgICAgICBpZiAoaSA9PSBpbmRleFRvT3BlbikgewotICAgICAgICAgICAgICAgICAgICBidXR0b25Td2l0Y2hlci5hbmltYXRlQnV0dG9uKEJ1dHRvblN3aXRjaGVyLkFOSU1BVElPTl9JTik7CisgICAgICAgICAgICAgICAgICAgIGJ1dHRvblN3aXRjaGVyLnNldFN0YXR1c0FuZFVwZGF0ZVZpc3VhbHMoZ2V0QnV0dG9uU3dpdGNoZXJTdGF0dXMobVN0YXR1cykpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGJ1dHRvblN3aXRjaGVyLmFuaW1hdGVCdXR0b24oQnV0dG9uU3dpdGNoZXIuQU5JTUFUSU9OX09VVCk7CisgICAgICAgICAgICAgICAgICAgIGJ1dHRvblN3aXRjaGVyLnNldFN0YXR1c0FuZFVwZGF0ZVZpc3VhbHMoQnV0dG9uU3dpdGNoZXIuU1RBVFVTX05PX0JVVFRPTik7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CmRpZmYgLS1naXQgYS9qYXZhL3NyYy9jb20vYW5kcm9pZC9pbnB1dG1ldGhvZC9rZXlib2FyZC9NYWluS2V5Ym9hcmRWaWV3LmphdmEgYi9qYXZhL3NyYy9jb20vYW5kcm9pZC9pbnB1dG1ldGhvZC9rZXlib2FyZC9NYWluS2V5Ym9hcmRWaWV3LmphdmEKaW5kZXggZDc0NjQ0ZC4uOGQ0YmVlYyAxMDA2NDQKLS0tIGEvamF2YS9zcmMvY29tL2FuZHJvaWQvaW5wdXRtZXRob2Qva2V5Ym9hcmQvTWFpbktleWJvYXJkVmlldy5qYXZhCisrKyBiL2phdmEvc3JjL2NvbS9hbmRyb2lkL2lucHV0bWV0aG9kL2tleWJvYXJkL01haW5LZXlib2FyZFZpZXcuamF2YQpAQCAtMzMzLDYgKzMzMywxMCBAQAogCiAgICAgICAgIHByaXZhdGUgc3RhdGljIHZvaWQgY2FuY2VsQW5kU3RhcnRBbmltYXRvcnMoZmluYWwgT2JqZWN0QW5pbWF0b3IgYW5pbWF0b3JUb0NhbmNlbCwKICAgICAgICAgICAgICAgICBmaW5hbCBPYmplY3RBbmltYXRvciBhbmltYXRvclRvU3RhcnQpIHsKKyAgICAgICAgICAgIGlmIChhbmltYXRvclRvQ2FuY2VsID09IG51bGwgfHwgYW5pbWF0b3JUb1N0YXJ0ID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICAvLyBUT0RPOiBTdG9wIHVzaW5nIG51bGwgYXMgYSBuby1vcGVyYXRpb24gYW5pbWF0b3IuCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQogICAgICAgICAgICAgZmxvYXQgc3RhcnRGcmFjdGlvbiA9IDAuMGY7CiAgICAgICAgICAgICBpZiAoYW5pbWF0b3JUb0NhbmNlbC5pc1N0YXJ0ZWQoKSkgewogICAgICAgICAgICAgICAgIGFuaW1hdG9yVG9DYW5jZWwuY2FuY2VsKCk7CkBAIC01ODEsNiArNTg1LDcgQEAKIAogICAgIHByaXZhdGUgT2JqZWN0QW5pbWF0b3IgbG9hZE9iamVjdEFuaW1hdG9yKGZpbmFsIGludCByZXNJZCwgZmluYWwgT2JqZWN0IHRhcmdldCkgewogICAgICAgICBpZiAocmVzSWQgPT0gMCkgeworICAgICAgICAgICAgLy8gVE9ETzogU3RvcCByZXR1cm5pbmcgbnVsbC4KICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICB9CiAgICAgICAgIGZpbmFsIE9iamVjdEFuaW1hdG9yIGFuaW1hdG9yID0gKE9iamVjdEFuaW1hdG9yKUFuaW1hdG9ySW5mbGF0ZXIubG9hZEFuaW1hdG9yKApAQCAtMTA1NCw2ICsxMDU5LDcgQEAKIAogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyB2b2lkIG9uU2hvd01vcmVLZXlzUGFuZWwoZmluYWwgTW9yZUtleXNQYW5lbCBwYW5lbCkgeworICAgICAgICBsb2NhdGVQcmV2aWV3UGxhY2VyVmlldygpOwogICAgICAgICBpZiAoaXNTaG93aW5nTW9yZUtleXNQYW5lbCgpKSB7CiAgICAgICAgICAgICBvbkRpc21pc3NNb3JlS2V5c1BhbmVsKCk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2phdmEvc3JjL2NvbS9hbmRyb2lkL2lucHV0bWV0aG9kL2xhdGluL0JpbmFyeURpY3Rpb25hcnkuamF2YSBiL2phdmEvc3JjL2NvbS9hbmRyb2lkL2lucHV0bWV0aG9kL2xhdGluL0JpbmFyeURpY3Rpb25hcnkuamF2YQppbmRleCBkYmMyYjkwLi4wM2Y3ZDFjIDEwMDY0NAotLS0gYS9qYXZhL3NyYy9jb20vYW5kcm9pZC9pbnB1dG1ldGhvZC9sYXRpbi9CaW5hcnlEaWN0aW9uYXJ5LmphdmEKKysrIGIvamF2YS9zcmMvY29tL2FuZHJvaWQvaW5wdXRtZXRob2QvbGF0aW4vQmluYXJ5RGljdGlvbmFyeS5qYXZhCkBAIC0xNDcsMTAgKzE0NywyMCBAQAogICAgICAgICAgICAgICAgICsrbGVuOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKGxlbiA+IDApIHsKLSAgICAgICAgICAgICAgICBmaW5hbCBpbnQgc2NvcmUgPSBTdWdnZXN0ZWRXb3JkSW5mby5LSU5EX1dISVRFTElTVCA9PSBtT3V0cHV0VHlwZXNbal0KKyAgICAgICAgICAgICAgICBmaW5hbCBpbnQgZmxhZ3MgPSBtT3V0cHV0VHlwZXNbal0gJiBTdWdnZXN0ZWRXb3JkSW5mby5LSU5EX01BU0tfRkxBR1M7CisgICAgICAgICAgICAgICAgaWYgKDAgIT0gKGZsYWdzICYgU3VnZ2VzdGVkV29yZEluZm8uS0lORF9GTEFHX1BPU1NJQkxZX09GRkVOU0lWRSkKKyAgICAgICAgICAgICAgICAgICAgICAgICYmIDAgPT0gKGZsYWdzICYgU3VnZ2VzdGVkV29yZEluZm8uS0lORF9GTEFHX0VYQUNUX01BVENIKSkgeworICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgd29yZCBpcyBwb3NzaWJseSBvZmZlbnNpdmUsIHdlIGRvbid0IG91dHB1dCBpdCB1bmxlc3MgaXQncyBhbHNvCisgICAgICAgICAgICAgICAgICAgIC8vIGFuIGV4YWN0IG1hdGNoLgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZmluYWwgaW50IGtpbmQgPSBtT3V0cHV0VHlwZXNbal0gJiBTdWdnZXN0ZWRXb3JkSW5mby5LSU5EX01BU0tfS0lORDsKKyAgICAgICAgICAgICAgICBmaW5hbCBpbnQgc2NvcmUgPSBTdWdnZXN0ZWRXb3JkSW5mby5LSU5EX1dISVRFTElTVCA9PSBraW5kCiAgICAgICAgICAgICAgICAgICAgICAgICA/IFN1Z2dlc3RlZFdvcmRJbmZvLk1BWF9TQ09SRSA6IG1PdXRwdXRTY29yZXNbal07CisgICAgICAgICAgICAgICAgLy8gVE9ETzogY2hlY2sgdGhhdCBhbGwgdXNlcnMgb2YgdGhlIGBraW5kJyBwYXJhbWV0ZXIgYXJlIHJlYWR5IHRvIGFjY2VwdAorICAgICAgICAgICAgICAgIC8vIGZsYWdzIHRvbyBhbmQgcGFzcyBtT3V0cHV0VHlwZXNbal0gaW5zdGVhZCBvZiBraW5kCiAgICAgICAgICAgICAgICAgc3VnZ2VzdGlvbnMuYWRkKG5ldyBTdWdnZXN0ZWRXb3JkSW5mbyhuZXcgU3RyaW5nKG1PdXRwdXRDb2RlUG9pbnRzLCBzdGFydCwgbGVuKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHNjb3JlLCBtT3V0cHV0VHlwZXNbal0sIG1EaWN0VHlwZSkpOworICAgICAgICAgICAgICAgICAgICAgICAgc2NvcmUsIGtpbmQsIG1EaWN0VHlwZSkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIHJldHVybiBzdWdnZXN0aW9uczsKZGlmZiAtLWdpdCBhL2phdmEvc3JjL2NvbS9hbmRyb2lkL2lucHV0bWV0aG9kL2xhdGluL0JpbmFyeURpY3Rpb25hcnlHZXR0ZXIuamF2YSBiL2phdmEvc3JjL2NvbS9hbmRyb2lkL2lucHV0bWV0aG9kL2xhdGluL0JpbmFyeURpY3Rpb25hcnlHZXR0ZXIuamF2YQppbmRleCAyOTQzMTI4Li5kZGQ3MmYxIDEwMDY0NAotLS0gYS9qYXZhL3NyYy9jb20vYW5kcm9pZC9pbnB1dG1ldGhvZC9sYXRpbi9CaW5hcnlEaWN0aW9uYXJ5R2V0dGVyLmphdmEKKysrIGIvamF2YS9zcmMvY29tL2FuZHJvaWQvaW5wdXRtZXRob2QvbGF0aW4vQmluYXJ5RGljdGlvbmFyeUdldHRlci5qYXZhCkBAIC03MiwxMCArNzIsMTYgQEAKICAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRUZW1wRmlsZU5hbWUoZmluYWwgU3RyaW5nIGlkLCBmaW5hbCBDb250ZXh0IGNvbnRleHQpCiAgICAgICAgICAgICB0aHJvd3MgSU9FeGNlcHRpb24gewogICAgICAgICBmaW5hbCBTdHJpbmcgc2FmZUlkID0gRGljdGlvbmFyeUluZm9VdGlscy5yZXBsYWNlRmlsZU5hbWVEYW5nZXJvdXNDaGFyYWN0ZXJzKGlkKTsKKyAgICAgICAgZmluYWwgRmlsZSBkaXJlY3RvcnkgPSBuZXcgRmlsZShEaWN0aW9uYXJ5SW5mb1V0aWxzLmdldFdvcmRMaXN0VGVtcERpcmVjdG9yeShjb250ZXh0KSk7CisgICAgICAgIGlmICghZGlyZWN0b3J5LmV4aXN0cygpKSB7CisgICAgICAgICAgICBpZiAoIWRpcmVjdG9yeS5ta2RpcnMoKSkgeworICAgICAgICAgICAgICAgIExvZy5lKFRBRywgIkNvdWxkIG5vdCBjcmVhdGUgdGhlIHRlbXBvcmFyeSBkaXJlY3RvcnkiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgICAgICAvLyBJZiB0aGUgZmlyc3QgYXJndW1lbnQgaXMgbGVzcyB0aGFuIHRocmVlIGNoYXJzLCBjcmVhdGVUZW1wRmlsZSB0aHJvd3MgYQogICAgICAgICAvLyBSdW50aW1lRXhjZXB0aW9uLiBXZSBkb24ndCByZWFsbHkgY2FyZSBhYm91dCB3aGF0IG5hbWUgd2UgZ2V0LCBzbyBqdXN0CiAgICAgICAgIC8vIHB1dCBhIHRocmVlLWNoYXJzIHByZWZpeCBtYWtlcyB1cyBzYWZlLgotICAgICAgICByZXR1cm4gRmlsZS5jcmVhdGVUZW1wRmlsZSgieHh4IiArIHNhZmVJZCwgbnVsbCkuZ2V0QWJzb2x1dGVQYXRoKCk7CisgICAgICAgIHJldHVybiBGaWxlLmNyZWF0ZVRlbXBGaWxlKCJ4eHgiICsgc2FmZUlkLCBudWxsLCBkaXJlY3RvcnkpLmdldEFic29sdXRlUGF0aCgpOwogICAgIH0KIAogICAgIC8qKgpkaWZmIC0tZ2l0IGEvamF2YS9zcmMvY29tL2FuZHJvaWQvaW5wdXRtZXRob2QvbGF0aW4vRGVidWdTZXR0aW5ncy5qYXZhIGIvamF2YS9zcmMvY29tL2FuZHJvaWQvaW5wdXRtZXRob2QvbGF0aW4vRGVidWdTZXR0aW5ncy5qYXZhCmluZGV4IDlkNDc5NDEuLjU5NjlhNjMgMTAwNjQ0Ci0tLSBhL2phdmEvc3JjL2NvbS9hbmRyb2lkL2lucHV0bWV0aG9kL2xhdGluL0RlYnVnU2V0dGluZ3MuamF2YQorKysgYi9qYXZhL3NyYy9jb20vYW5kcm9pZC9pbnB1dG1ldGhvZC9sYXRpbi9EZWJ1Z1NldHRpbmdzLmphdmEKQEAgLTEyMiw3ICsxMjIsNyBAQAogICAgICAgICB9CiAgICAgICAgIGJvb2xlYW4gaXNEZWJ1Z01vZGUgPSBtRGVidWdNb2RlLmlzQ2hlY2tlZCgpOwogICAgICAgICBmaW5hbCBTdHJpbmcgdmVyc2lvbiA9IGdldFJlc291cmNlcygpLmdldFN0cmluZygKLSAgICAgICAgICAgICAgICBSLnN0cmluZy52ZXJzaW9uX3RleHQsIFV0aWxzLmdldFNka1ZlcnNpb24oZ2V0QWN0aXZpdHkoKSkpOworICAgICAgICAgICAgICAgIFIuc3RyaW5nLnZlcnNpb25fdGV4dCwgVXRpbHMuZ2V0VmVyc2lvbk5hbWUoZ2V0QWN0aXZpdHkoKSkpOwogICAgICAgICBpZiAoIWlzRGVidWdNb2RlKSB7CiAgICAgICAgICAgICBtRGVidWdNb2RlLnNldFRpdGxlKHZlcnNpb24pOwogICAgICAgICAgICAgbURlYnVnTW9kZS5zZXRTdW1tYXJ5KCIiKTsKZGlmZiAtLWdpdCBhL2phdmEvc3JjL2NvbS9hbmRyb2lkL2lucHV0bWV0aG9kL2xhdGluL0RpY3Rpb25hcnlJbmZvVXRpbHMuamF2YSBiL2phdmEvc3JjL2NvbS9hbmRyb2lkL2lucHV0bWV0aG9kL2xhdGluL0RpY3Rpb25hcnlJbmZvVXRpbHMuamF2YQppbmRleCBkY2ZhNDgzLi5kZjdiYWQ4IDEwMDY0NAotLS0gYS9qYXZhL3NyYy9jb20vYW5kcm9pZC9pbnB1dG1ldGhvZC9sYXRpbi9EaWN0aW9uYXJ5SW5mb1V0aWxzLmphdmEKKysrIGIvamF2YS9zcmMvY29tL2FuZHJvaWQvaW5wdXRtZXRob2QvbGF0aW4vRGljdGlvbmFyeUluZm9VdGlscy5qYXZhCkBAIC0xMjksNiArMTI5LDEzIEBACiAgICAgfQogCiAgICAgLyoqCisgICAgICogSGVscGVyIG1ldGhvZCB0byBnZXQgdGhlIHRvcCBsZXZlbCB0ZW1wIGRpcmVjdG9yeS4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRXb3JkTGlzdFRlbXBEaXJlY3RvcnkoZmluYWwgQ29udGV4dCBjb250ZXh0KSB7CisgICAgICAgIHJldHVybiBjb250ZXh0LmdldEZpbGVzRGlyKCkgKyBGaWxlLnNlcGFyYXRvciArICJ0bXAiOworICAgIH0KKworICAgIC8qKgogICAgICAqIFJldmVyc2UgZXNjYXBpbmcgZG9uZSBieSByZXBsYWNlRmlsZU5hbWVEYW5nZXJvdXNDaGFyYWN0ZXJzLgogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFdvcmRMaXN0SWRGcm9tRmlsZU5hbWUoZmluYWwgU3RyaW5nIGZuYW1lKSB7CmRpZmYgLS1naXQgYS9qYXZhL3NyYy9jb20vYW5kcm9pZC9pbnB1dG1ldGhvZC9sYXRpbi9TdWdnZXN0ZWRXb3Jkcy5qYXZhIGIvamF2YS9zcmMvY29tL2FuZHJvaWQvaW5wdXRtZXRob2QvbGF0aW4vU3VnZ2VzdGVkV29yZHMuamF2YQppbmRleCA2MTZlMTkxLi5kZmRkYjBmIDEwMDY0NAotLS0gYS9qYXZhL3NyYy9jb20vYW5kcm9pZC9pbnB1dG1ldGhvZC9sYXRpbi9TdWdnZXN0ZWRXb3Jkcy5qYXZhCisrKyBiL2phdmEvc3JjL2NvbS9hbmRyb2lkL2lucHV0bWV0aG9kL2xhdGluL1N1Z2dlc3RlZFdvcmRzLmphdmEKQEAgLTEyMiw2ICsxMjIsNyBAQAogCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBjbGFzcyBTdWdnZXN0ZWRXb3JkSW5mbyB7CiAgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1BWF9TQ09SRSA9IEludGVnZXIuTUFYX1ZBTFVFOworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBLSU5EX01BU0tfS0lORCA9IDB4RkY7IC8vIE1hc2sgdG8gZ2V0IG9ubHkgdGhlIGtpbmQKICAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgS0lORF9UWVBFRCA9IDA7IC8vIFdoYXQgdXNlciB0eXBlZAogICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBLSU5EX0NPUlJFQ1RJT04gPSAxOyAvLyBTaW1wbGUgY29ycmVjdGlvbi9zdWdnZXN0aW9uCiAgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEtJTkRfQ09NUExFVElPTiA9IDI7IC8vIENvbXBsZXRpb24gKHN1Z2dlc3Rpb24gd2l0aCBhcHBlbmRlZCBjaGFycykKQEAgLTEzMiw2ICsxMzMsMTEgQEAKICAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgS0lORF9TSE9SVENVVCA9IDc7IC8vIEEgc2hvcnRjdXQKICAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgS0lORF9QUkVESUNUSU9OID0gODsgLy8gQSBwcmVkaWN0aW9uICg9PSBhIHN1Z2dlc3Rpb24gd2l0aCBubyBpbnB1dCkKICAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgS0lORF9SRVNVTUVEID0gOTsgLy8gQSByZXN1bWVkIHN1Z2dlc3Rpb24gKGNvbWVzIGZyb20gYSBzcGFuKQorCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEtJTkRfTUFTS19GTEFHUyA9IDB4RkZGRkZGMDA7IC8vIE1hc2sgdG8gZ2V0IHRoZSBmbGFncworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBLSU5EX0ZMQUdfUE9TU0lCTFlfT0ZGRU5TSVZFID0gMHg4MDAwMDAwMDsKKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgS0lORF9GTEFHX0VYQUNUX01BVENIID0gMHg0MDAwMDAwMDsKKwogICAgICAgICBwdWJsaWMgZmluYWwgU3RyaW5nIG1Xb3JkOwogICAgICAgICBwdWJsaWMgZmluYWwgaW50IG1TY29yZTsKICAgICAgICAgcHVibGljIGZpbmFsIGludCBtS2luZDsgLy8gb25lIG9mIHRoZSBLSU5EXyogY29uc3RhbnRzIGFib3ZlCmRpZmYgLS1naXQgYS9qYXZhL3NyYy9jb20vYW5kcm9pZC9pbnB1dG1ldGhvZC9sYXRpbi9VdGlscy5qYXZhIGIvamF2YS9zcmMvY29tL2FuZHJvaWQvaW5wdXRtZXRob2QvbGF0aW4vVXRpbHMuamF2YQppbmRleCBmYzMyYmQ0Li4wZjk2YzU0IDEwMDY0NAotLS0gYS9qYXZhL3NyYy9jb20vYW5kcm9pZC9pbnB1dG1ldGhvZC9sYXRpbi9VdGlscy5qYXZhCisrKyBiL2phdmEvc3JjL2NvbS9hbmRyb2lkL2lucHV0bWV0aG9kL2xhdGluL1V0aWxzLmphdmEKQEAgLTQ3NSw3ICs0NzUsNyBAQAogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRTZGtWZXJzaW9uKENvbnRleHQgY29udGV4dCkgeworICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFZlcnNpb25OYW1lKENvbnRleHQgY29udGV4dCkgewogICAgICAgICB0cnkgewogICAgICAgICAgICAgaWYgKGNvbnRleHQgPT0gbnVsbCkgewogICAgICAgICAgICAgICAgIHJldHVybiAiIjsKZGlmZiAtLWdpdCBhL2phdmEvc3JjL2NvbS9hbmRyb2lkL2lucHV0bWV0aG9kL2xhdGluL3NldHVwL1NldHVwQWN0aXZpdHkuamF2YSBiL2phdmEvc3JjL2NvbS9hbmRyb2lkL2lucHV0bWV0aG9kL2xhdGluL3NldHVwL1NldHVwQWN0aXZpdHkuamF2YQppbmRleCA1Nzg3ODdkLi4yOWVlNjNkIDEwMDY0NAotLS0gYS9qYXZhL3NyYy9jb20vYW5kcm9pZC9pbnB1dG1ldGhvZC9sYXRpbi9zZXR1cC9TZXR1cEFjdGl2aXR5LmphdmEKKysrIGIvamF2YS9zcmMvY29tL2FuZHJvaWQvaW5wdXRtZXRob2QvbGF0aW4vc2V0dXAvU2V0dXBBY3Rpdml0eS5qYXZhCkBAIC0yMzYsOCArMjM2LDcgQEAKICAgICAgICAgZmluYWwgSW50ZW50IGludGVudCA9IG5ldyBJbnRlbnQoKTsKICAgICAgICAgaW50ZW50LnNldENsYXNzKHRoaXMsIFNldHRpbmdzQWN0aXZpdHkuY2xhc3MpOwogICAgICAgICBpbnRlbnQuc2V0RmxhZ3MoSW50ZW50LkZMQUdfQUNUSVZJVFlfUkVTRVRfVEFTS19JRl9ORUVERUQKLSAgICAgICAgICAgICAgICB8IEludGVudC5GTEFHX0FDVElWSVRZX0NMRUFSX1RPUAotICAgICAgICAgICAgICAgIHwgSW50ZW50LkZMQUdfQUNUSVZJVFlfTk9fSElTVE9SWSk7CisgICAgICAgICAgICAgICAgfCBJbnRlbnQuRkxBR19BQ1RJVklUWV9DTEVBUl9UT1ApOwogICAgICAgICBzdGFydEFjdGl2aXR5KGludGVudCk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9uYXRpdmUvam5pL3NyYy9kZWZpbmVzLmggYi9uYXRpdmUvam5pL3NyYy9kZWZpbmVzLmgKaW5kZXggZTY3MTljOS4uZDNiMzUxZiAxMDA2NDQKLS0tIGEvbmF0aXZlL2puaS9zcmMvZGVmaW5lcy5oCisrKyBiL25hdGl2ZS9qbmkvc3JjL2RlZmluZXMuaApAQCAtNDM4LDQgKzQzOCwyNCBAQAogICAgIC8vIENyZWF0ZSBuZXcgd29yZCB3aXRoIHNwYWNlIHN1YnN0aXR1dGlvbgogICAgIENUX05FV19XT1JEX1NQQUNFX1NVQlNUSVRVVElPTiwKIH0gQ29ycmVjdGlvblR5cGU7CisKKy8vIEVycm9yVHlwZSBpcyBtYWlubHkgZGVjaWRlZCBieSBDb3JyZWN0aW9uVHlwZSBidXQgaXQgaXMgYWxzbyBkZXBlbmRpbmcgb24gaWYKKy8vIHRoZSBjb3JyZWN0aW9uIGhhcyByZWFsbHkgYmVlbiBwZXJmb3JtZWQgb3Igbm90LgordHlwZWRlZiBlbnVtIHsKKyAgICAvLyBTdWJzdGl0dXRpb24sIG9taXNzaW9uIGFuZCB0cmFuc3Bvc2l0aW9uCisgICAgRVRfRURJVF9DT1JSRUNUSU9OLAorICAgIC8vIFByb3hpbWl0eSBlcnJvcgorICAgIEVUX1BST1hJTUlUWV9DT1JSRUNUSU9OLAorICAgIC8vIENvbXBsZXRpb24KKyAgICBFVF9DT01QTEVUSU9OLAorICAgIC8vIE5ldyB3b3JkCisgICAgLy8gVE9ETzogUmVtb3ZlLgorICAgIC8vIEEgbmV3IHdvcmQgZXJyb3Igc2hvdWxkIGJlIGFuIGVkaXQgY29ycmVjdGlvbiBlcnJvciBvciBhIHByb3hpbWl0eSBjb3JyZWN0aW9uIGVycm9yLgorICAgIEVUX05FV19XT1JELAorICAgIC8vIFRyZWF0IGVycm9yIGFzIGFuIGludGVudGlvbmFsIG9taXNzaW9uIHdoZW4gdGhlIENvcnJlY3Rpb25UeXBlIGlzIG9taXNzaW9uIGFuZCB0aGUgbm9kZSBjYW4KKyAgICAvLyBiZSBpbnRlbnRpb25hbCBvbWlzc2lvbi4KKyAgICBFVF9JTlRFTlRJT05BTF9PTUlTU0lPTiwKKyAgICAvLyBOb3QgdHJlYXRlZCBhcyBhbiBlcnJvci4gVHJhY2tlZCBmb3IgY2hlY2tpbmcgZXhhY3QgbWF0Y2gKKyAgICBFVF9OT1RfQU5fRVJST1IKK30gRXJyb3JUeXBlOwogI2VuZGlmIC8vIExBVElOSU1FX0RFRklORVNfSApkaWZmIC0tZ2l0IGEvbmF0aXZlL2puaS9zcmMvZGljdGlvbmFyeS5oIGIvbmF0aXZlL2puaS9zcmMvZGljdGlvbmFyeS5oCmluZGV4IDA2NTNkM2MuLjJhZDViNmMgMTAwNjQ0Ci0tLSBhL25hdGl2ZS9qbmkvc3JjL2RpY3Rpb25hcnkuaAorKysgYi9uYXRpdmUvam5pL3NyYy9kaWN0aW9uYXJ5LmgKQEAgLTMxLDYgKzMxLDcgQEAKIGNsYXNzIERpY3Rpb25hcnkgewogIHB1YmxpYzoKICAgICAvLyBUYWtlbiBmcm9tIFN1Z2dlc3RlZFdvcmRzLmphdmEKKyAgICBzdGF0aWMgY29uc3QgaW50IEtJTkRfTUFTS19LSU5EID0gMHhGRjsgLy8gTWFzayB0byBnZXQgb25seSB0aGUga2luZAogICAgIHN0YXRpYyBjb25zdCBpbnQgS0lORF9UWVBFRCA9IDA7IC8vIFdoYXQgdXNlciB0eXBlZAogICAgIHN0YXRpYyBjb25zdCBpbnQgS0lORF9DT1JSRUNUSU9OID0gMTsgLy8gU2ltcGxlIGNvcnJlY3Rpb24vc3VnZ2VzdGlvbgogICAgIHN0YXRpYyBjb25zdCBpbnQgS0lORF9DT01QTEVUSU9OID0gMjsgLy8gQ29tcGxldGlvbiAoc3VnZ2VzdGlvbiB3aXRoIGFwcGVuZGVkIGNoYXJzKQpAQCAtNDEsNiArNDIsMTAgQEAKICAgICBzdGF0aWMgY29uc3QgaW50IEtJTkRfU0hPUlRDVVQgPSA3OyAvLyBBIHNob3J0Y3V0CiAgICAgc3RhdGljIGNvbnN0IGludCBLSU5EX1BSRURJQ1RJT04gPSA4OyAvLyBBIHByZWRpY3Rpb24gKD09IGEgc3VnZ2VzdGlvbiB3aXRoIG5vIGlucHV0KQogCisgICAgc3RhdGljIGNvbnN0IGludCBLSU5EX01BU0tfRkxBR1MgPSAweEZGRkZGRjAwOyAvLyBNYXNrIHRvIGdldCB0aGUgZmxhZ3MKKyAgICBzdGF0aWMgY29uc3QgaW50IEtJTkRfRkxBR19QT1NTSUJMWV9PRkZFTlNJVkUgPSAweDgwMDAwMDAwOworICAgIHN0YXRpYyBjb25zdCBpbnQgS0lORF9GTEFHX0VYQUNUX01BVENIID0gMHg0MDAwMDAwMDsKKwogICAgIERpY3Rpb25hcnkodm9pZCAqZGljdCwgaW50IGRpY3RTaXplLCBpbnQgbW1hcEZkLCBpbnQgZGljdEJ1ZkFkanVzdCk7CiAKICAgICBpbnQgZ2V0U3VnZ2VzdGlvbnMoUHJveGltaXR5SW5mbyAqcHJveGltaXR5SW5mbywgdm9pZCAqdHJhdmVyc2VTZXNzaW9uLCBpbnQgKnhjb29yZGluYXRlcywKZGlmZiAtLWdpdCBhL25hdGl2ZS9qbmkvc3JjL3N1Z2dlc3QvY29yZS9kaWNub2RlL2RpY19ub2RlLmggYi9uYXRpdmUvam5pL3NyYy9zdWdnZXN0L2NvcmUvZGljbm9kZS9kaWNfbm9kZS5oCmluZGV4IGU4NDMyNTQuLjkyNzgzZGUgMTAwNjQ0Ci0tLSBhL25hdGl2ZS9qbmkvc3JjL3N1Z2dlc3QvY29yZS9kaWNub2RlL2RpY19ub2RlLmgKKysrIGIvbmF0aXZlL2puaS9zcmMvc3VnZ2VzdC9jb3JlL2RpY25vZGUvZGljX25vZGUuaApAQCAtNDYzLDYgKzQ2MywxMCBAQAogICAgICAgICBtRGljTm9kZVN0YXRlLm1EaWNOb2RlU3RhdGVTY29yaW5nLmFkdmFuY2VEaWdyYXBoSW5kZXgoKTsKICAgICB9CiAKKyAgICBib29sIGlzRXhhY3RNYXRjaCgpIGNvbnN0IHsKKyAgICAgICAgcmV0dXJuIG1EaWNOb2RlU3RhdGUubURpY05vZGVTdGF0ZVNjb3JpbmcuaXNFeGFjdE1hdGNoKCk7CisgICAgfQorCiAgICAgdWludDhfdCBnZXRGbGFncygpIGNvbnN0IHsKICAgICAgICAgcmV0dXJuIG1EaWNOb2RlUHJvcGVydGllcy5nZXRGbGFncygpOwogICAgIH0KQEAgLTU0MiwxMyArNTQ2LDEyIEBACiAgICAgLy8gQ2F2ZWF0OiBNdXN0IG5vdCBiZSBjYWxsZWQgb3V0c2lkZSBXZWlnaHRpbmcKICAgICAvLyBUaGlzIHJlc3RyaWN0aW9uIGlzIGd1YXJhbnRlZWQgYnkgImZyaWVuZCIKICAgICBBS19GT1JDRV9JTkxJTkUgdm9pZCBhZGRDb3N0KGNvbnN0IGZsb2F0IHNwYXRpYWxDb3N0LCBjb25zdCBmbG9hdCBsYW5ndWFnZUNvc3QsCi0gICAgICAgICAgICBjb25zdCBib29sIGRvTm9ybWFsaXphdGlvbiwgY29uc3QgaW50IGlucHV0U2l6ZSwgY29uc3QgYm9vbCBpc0VkaXRDb3JyZWN0aW9uLAotICAgICAgICAgICAgY29uc3QgYm9vbCBpc1Byb3hpbWl0eUNvcnJlY3Rpb24pIHsKKyAgICAgICAgICAgIGNvbnN0IGJvb2wgZG9Ob3JtYWxpemF0aW9uLCBjb25zdCBpbnQgaW5wdXRTaXplLCBjb25zdCBFcnJvclR5cGUgZXJyb3JUeXBlKSB7CiAgICAgICAgIGlmIChERUJVR19HRU9fRlVMTCkgewogICAgICAgICAgICAgTE9HSV9TSE9XX0FERF9DT1NUX1BST1A7CiAgICAgICAgIH0KICAgICAgICAgbURpY05vZGVTdGF0ZS5tRGljTm9kZVN0YXRlU2NvcmluZy5hZGRDb3N0KHNwYXRpYWxDb3N0LCBsYW5ndWFnZUNvc3QsIGRvTm9ybWFsaXphdGlvbiwKLSAgICAgICAgICAgICAgICBpbnB1dFNpemUsIGdldFRvdGFsSW5wdXRJbmRleCgpLCBpc0VkaXRDb3JyZWN0aW9uLCBpc1Byb3hpbWl0eUNvcnJlY3Rpb24pOworICAgICAgICAgICAgICAgIGlucHV0U2l6ZSwgZ2V0VG90YWxJbnB1dEluZGV4KCksIGVycm9yVHlwZSk7CiAgICAgfQogCiAgICAgLy8gQ2F2ZWF0OiBNdXN0IG5vdCBiZSBjYWxsZWQgb3V0c2lkZSBXZWlnaHRpbmcKZGlmZiAtLWdpdCBhL25hdGl2ZS9qbmkvc3JjL3N1Z2dlc3QvY29yZS9kaWNub2RlL2RpY19ub2RlX3N0YXRlX2lucHV0LmggYi9uYXRpdmUvam5pL3NyYy9zdWdnZXN0L2NvcmUvZGljbm9kZS9kaWNfbm9kZV9zdGF0ZV9pbnB1dC5oCmluZGV4IDdhZDNlM2UuLmJiZDk0MzUgMTAwNjQ0Ci0tLSBhL25hdGl2ZS9qbmkvc3JjL3N1Z2dlc3QvY29yZS9kaWNub2RlL2RpY19ub2RlX3N0YXRlX2lucHV0LmgKKysrIGIvbmF0aXZlL2puaS9zcmMvc3VnZ2VzdC9jb3JlL2RpY25vZGUvZGljX25vZGVfc3RhdGVfaW5wdXQuaApAQCAtNDYsOCArNDYsOCBAQAogICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IE1BWF9QT0lOVEVSX0NPVU5UX0c7IGkrKykgewogICAgICAgICAgICAgIG1JbnB1dEluZGV4W2ldID0gc3JjLT5tSW5wdXRJbmRleFtpXTsKICAgICAgICAgICAgICBtUHJldkNvZGVQb2ludFtpXSA9IHNyYy0+bVByZXZDb2RlUG9pbnRbaV07Ci0gICAgICAgIG1UZXJtaW5hbERpZmZDb3N0W2ldID0gcmVzZXRUZXJtaW5hbERpZmZDb3N0ID8KLSAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxmbG9hdD4oTUFYX1ZBTFVFX0ZPUl9XRUlHSFRJTkcpIDogc3JjLT5tVGVybWluYWxEaWZmQ29zdFtpXTsKKyAgICAgICAgICAgICBtVGVybWluYWxEaWZmQ29zdFtpXSA9IHJlc2V0VGVybWluYWxEaWZmQ29zdCA/CisgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxmbG9hdD4oTUFYX1ZBTFVFX0ZPUl9XRUlHSFRJTkcpIDogc3JjLT5tVGVybWluYWxEaWZmQ29zdFtpXTsKICAgICAgICAgIH0KICAgICB9CiAKZGlmZiAtLWdpdCBhL25hdGl2ZS9qbmkvc3JjL3N1Z2dlc3QvY29yZS9kaWNub2RlL2RpY19ub2RlX3N0YXRlX3Njb3JpbmcuaCBiL25hdGl2ZS9qbmkvc3JjL3N1Z2dlc3QvY29yZS9kaWNub2RlL2RpY19ub2RlX3N0YXRlX3Njb3JpbmcuaAppbmRleCBmZDlkNjEwLi5kY2E5ZDYwIDEwMDY0NAotLS0gYS9uYXRpdmUvam5pL3NyYy9zdWdnZXN0L2NvcmUvZGljbm9kZS9kaWNfbm9kZV9zdGF0ZV9zY29yaW5nLmgKKysrIGIvbmF0aXZlL2puaS9zcmMvc3VnZ2VzdC9jb3JlL2RpY25vZGUvZGljX25vZGVfc3RhdGVfc2NvcmluZy5oCkBAIC0zMSw3ICszMSw3IEBACiAgICAgICAgICAgICAgIG1EaWdyYXBoSW5kZXgoRGlncmFwaFV0aWxzOjpOT1RfQV9ESUdSQVBIX0lOREVYKSwKICAgICAgICAgICAgICAgbUVkaXRDb3JyZWN0aW9uQ291bnQoMCksIG1Qcm94aW1pdHlDb3JyZWN0aW9uQ291bnQoMCksCiAgICAgICAgICAgICAgIG1Ob3JtYWxpemVkQ29tcG91bmREaXN0YW5jZSgwLjBmKSwgbVNwYXRpYWxEaXN0YW5jZSgwLjBmKSwgbUxhbmd1YWdlRGlzdGFuY2UoMC4wZiksCi0gICAgICAgICAgICAgIG1SYXdMZW5ndGgoMC4wZikgeworICAgICAgICAgICAgICBtUmF3TGVuZ3RoKDAuMGYpLCBtRXhhY3RNYXRjaCh0cnVlKSB7CiAgICAgfQogCiAgICAgdmlydHVhbCB+RGljTm9kZVN0YXRlU2NvcmluZygpIHt9CkBAIC00NSw2ICs0NSw3IEBACiAgICAgICAgIG1SYXdMZW5ndGggPSAwLjBmOwogICAgICAgICBtRG91YmxlTGV0dGVyTGV2ZWwgPSBOT1RfQV9ET1VCTEVfTEVUVEVSOwogICAgICAgICBtRGlncmFwaEluZGV4ID0gRGlncmFwaFV0aWxzOjpOT1RfQV9ESUdSQVBIX0lOREVYOworICAgICAgICBtRXhhY3RNYXRjaCA9IHRydWU7CiAgICAgfQogCiAgICAgQUtfRk9SQ0VfSU5MSU5FIHZvaWQgaW5pdChjb25zdCBEaWNOb2RlU3RhdGVTY29yaW5nICpjb25zdCBzY29yaW5nKSB7CkBAIC01NiwxNyArNTcsMzIgQEAKICAgICAgICAgbVJhd0xlbmd0aCA9IHNjb3JpbmctPm1SYXdMZW5ndGg7CiAgICAgICAgIG1Eb3VibGVMZXR0ZXJMZXZlbCA9IHNjb3JpbmctPm1Eb3VibGVMZXR0ZXJMZXZlbDsKICAgICAgICAgbURpZ3JhcGhJbmRleCA9IHNjb3JpbmctPm1EaWdyYXBoSW5kZXg7CisgICAgICAgIG1FeGFjdE1hdGNoID0gc2NvcmluZy0+bUV4YWN0TWF0Y2g7CiAgICAgfQogCiAgICAgdm9pZCBhZGRDb3N0KGNvbnN0IGZsb2F0IHNwYXRpYWxDb3N0LCBjb25zdCBmbG9hdCBsYW5ndWFnZUNvc3QsIGNvbnN0IGJvb2wgZG9Ob3JtYWxpemF0aW9uLAotICAgICAgICAgICAgY29uc3QgaW50IGlucHV0U2l6ZSwgY29uc3QgaW50IHRvdGFsSW5wdXRJbmRleCwgY29uc3QgYm9vbCBpc0VkaXRDb3JyZWN0aW9uLAotICAgICAgICAgICAgY29uc3QgYm9vbCBpc1Byb3hpbWl0eUNvcnJlY3Rpb24pIHsKKyAgICAgICAgICAgIGNvbnN0IGludCBpbnB1dFNpemUsIGNvbnN0IGludCB0b3RhbElucHV0SW5kZXgsIGNvbnN0IEVycm9yVHlwZSBlcnJvclR5cGUpIHsKICAgICAgICAgYWRkRGlzdGFuY2Uoc3BhdGlhbENvc3QsIGxhbmd1YWdlQ29zdCwgZG9Ob3JtYWxpemF0aW9uLCBpbnB1dFNpemUsIHRvdGFsSW5wdXRJbmRleCk7Ci0gICAgICAgIGlmIChpc0VkaXRDb3JyZWN0aW9uKSB7Ci0gICAgICAgICAgICArK21FZGl0Q29ycmVjdGlvbkNvdW50OwotICAgICAgICB9Ci0gICAgICAgIGlmIChpc1Byb3hpbWl0eUNvcnJlY3Rpb24pIHsKLSAgICAgICAgICAgICsrbVByb3hpbWl0eUNvcnJlY3Rpb25Db3VudDsKKyAgICAgICAgc3dpdGNoIChlcnJvclR5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgRVRfRURJVF9DT1JSRUNUSU9OOgorICAgICAgICAgICAgICAgICsrbUVkaXRDb3JyZWN0aW9uQ291bnQ7CisgICAgICAgICAgICAgICAgbUV4YWN0TWF0Y2ggPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRVRfUFJPWElNSVRZX0NPUlJFQ1RJT046CisgICAgICAgICAgICAgICAgKyttUHJveGltaXR5Q29ycmVjdGlvbkNvdW50OworICAgICAgICAgICAgICAgIG1FeGFjdE1hdGNoID0gZmFsc2U7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEVUX0NPTVBMRVRJT046CisgICAgICAgICAgICAgICAgbUV4YWN0TWF0Y2ggPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRVRfTkVXX1dPUkQ6CisgICAgICAgICAgICAgICAgbUV4YWN0TWF0Y2ggPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRVRfSU5URU5USU9OQUxfT01JU1NJT046CisgICAgICAgICAgICAgICAgbUV4YWN0TWF0Y2ggPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRVRfTk9UX0FOX0VSUk9SOgorICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQogCkBAIC0xNDMsNiArMTU5LDEwIEBACiAgICAgICAgIH0KICAgICB9CiAKKyAgICBib29sIGlzRXhhY3RNYXRjaCgpIGNvbnN0IHsKKyAgICAgICAgcmV0dXJuIG1FeGFjdE1hdGNoOworICAgIH0KKwogIHByaXZhdGU6CiAgICAgLy8gQ2F1dGlvbiEhIQogICAgIC8vIFVzZSBhIGRlZmF1bHQgY29weSBjb25zdHJ1Y3RvciBhbmQgYW4gYXNzaWduIG9wZXJhdG9yIGJlY2F1c2Ugc2hhbGxvdyBjb3BpZXMgYXJlIG9rCkBAIC0xNTcsNiArMTc3LDcgQEAKICAgICBmbG9hdCBtU3BhdGlhbERpc3RhbmNlOwogICAgIGZsb2F0IG1MYW5ndWFnZURpc3RhbmNlOwogICAgIGZsb2F0IG1SYXdMZW5ndGg7CisgICAgYm9vbCBtRXhhY3RNYXRjaDsKIAogICAgIEFLX0ZPUkNFX0lOTElORSB2b2lkIGFkZERpc3RhbmNlKGZsb2F0IHNwYXRpYWxEaXN0YW5jZSwgZmxvYXQgbGFuZ3VhZ2VEaXN0YW5jZSwKICAgICAgICAgICAgIGJvb2wgZG9Ob3JtYWxpemF0aW9uLCBpbnQgaW5wdXRTaXplLCBpbnQgdG90YWxJbnB1dEluZGV4KSB7CmRpZmYgLS1naXQgYS9uYXRpdmUvam5pL3NyYy9zdWdnZXN0L2NvcmUvcG9saWN5L3RyYXZlcnNhbC5oIGIvbmF0aXZlL2puaS9zcmMvc3VnZ2VzdC9jb3JlL3BvbGljeS90cmF2ZXJzYWwuaAppbmRleCAwMmMzNThhLi5kMzE0NmRhIDEwMDY0NAotLS0gYS9uYXRpdmUvam5pL3NyYy9zdWdnZXN0L2NvcmUvcG9saWN5L3RyYXZlcnNhbC5oCisrKyBiL25hdGl2ZS9qbmkvc3JjL3N1Z2dlc3QvY29yZS9wb2xpY3kvdHJhdmVyc2FsLmgKQEAgLTI4LDcgKzI4LDggQEAKICAgICB2aXJ0dWFsIGludCBnZXRNYXhQb2ludGVyQ291bnQoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBib29sIGFsbG93c0Vycm9yQ29ycmVjdGlvbnMoY29uc3QgRGljTm9kZSAqY29uc3QgZGljTm9kZSkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBpc09taXNzaW9uKGNvbnN0IERpY1RyYXZlcnNlU2Vzc2lvbiAqY29uc3QgdHJhdmVyc2VTZXNzaW9uLAotICAgICAgICAgICAgY29uc3QgRGljTm9kZSAqY29uc3QgZGljTm9kZSwgY29uc3QgRGljTm9kZSAqY29uc3QgY2hpbGREaWNOb2RlKSBjb25zdCA9IDA7CisgICAgICAgICAgICBjb25zdCBEaWNOb2RlICpjb25zdCBkaWNOb2RlLCBjb25zdCBEaWNOb2RlICpjb25zdCBjaGlsZERpY05vZGUsCisgICAgICAgICAgICBjb25zdCBib29sIGFsbG93c0Vycm9yQ29ycmVjdGlvbnMpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgaXNTcGFjZVN1YnN0aXR1dGlvblRlcm1pbmFsKGNvbnN0IERpY1RyYXZlcnNlU2Vzc2lvbiAqY29uc3QgdHJhdmVyc2VTZXNzaW9uLAogICAgICAgICAgICAgY29uc3QgRGljTm9kZSAqY29uc3QgZGljTm9kZSkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBpc1NwYWNlT21pc3Npb25UZXJtaW5hbChjb25zdCBEaWNUcmF2ZXJzZVNlc3Npb24gKmNvbnN0IHRyYXZlcnNlU2Vzc2lvbiwKZGlmZiAtLWdpdCBhL25hdGl2ZS9qbmkvc3JjL3N1Z2dlc3QvY29yZS9wb2xpY3kvd2VpZ2h0aW5nLmNwcCBiL25hdGl2ZS9qbmkvc3JjL3N1Z2dlc3QvY29yZS9wb2xpY3kvd2VpZ2h0aW5nLmNwcAppbmRleCA2YzA4ZTc2Li44NTdkZGNjIDEwMDY0NAotLS0gYS9uYXRpdmUvam5pL3NyYy9zdWdnZXN0L2NvcmUvcG9saWN5L3dlaWdodGluZy5jcHAKKysrIGIvbmF0aXZlL2puaS9zcmMvc3VnZ2VzdC9jb3JlL3BvbGljeS93ZWlnaHRpbmcuY3BwCkBAIC04MCw5ICs4MCw4IEBACiAgICAgICAgICAgICB0cmF2ZXJzZVNlc3Npb24sIHBhcmVudERpY05vZGUsIGRpY05vZGUsICZpbnB1dFN0YXRlRyk7CiAgICAgY29uc3QgZmxvYXQgbGFuZ3VhZ2VDb3N0ID0gV2VpZ2h0aW5nOjpnZXRMYW5ndWFnZUNvc3Qod2VpZ2h0aW5nLCBjb3JyZWN0aW9uVHlwZSwKICAgICAgICAgICAgIHRyYXZlcnNlU2Vzc2lvbiwgcGFyZW50RGljTm9kZSwgZGljTm9kZSwgYmlncmFtQ2FjaGVNYXApOwotICAgIGNvbnN0IGJvb2wgZWRpdCA9IFdlaWdodGluZzo6aXNFZGl0Q29ycmVjdGlvbihjb3JyZWN0aW9uVHlwZSk7Ci0gICAgY29uc3QgYm9vbCBwcm94aW1pdHkgPSBXZWlnaHRpbmc6OmlzUHJveGltaXR5Q29ycmVjdGlvbih3ZWlnaHRpbmcsIGNvcnJlY3Rpb25UeXBlLAotICAgICAgICAgICAgdHJhdmVyc2VTZXNzaW9uLCBkaWNOb2RlKTsKKyAgICBjb25zdCBFcnJvclR5cGUgZXJyb3JUeXBlID0gd2VpZ2h0aW5nLT5nZXRFcnJvclR5cGUoY29ycmVjdGlvblR5cGUsIHRyYXZlcnNlU2Vzc2lvbiwKKyAgICAgICAgICAgIHBhcmVudERpY05vZGUsIGRpY05vZGUpOwogICAgIHByb2ZpbGUoY29ycmVjdGlvblR5cGUsIGRpY05vZGUpOwogICAgIGlmIChpbnB1dFN0YXRlRy5tTmVlZHNUb1VwZGF0ZUlucHV0U3RhdGVHKSB7CiAgICAgICAgIGRpY05vZGUtPnVwZGF0ZUlucHV0SW5kZXhHKCZpbnB1dFN0YXRlRyk7CkBAIC05MSw3ICs5MCw3IEBACiAgICAgICAgICAgICAgICAgKGNvcnJlY3Rpb25UeXBlID09IENUX1RSQU5TUE9TSVRJT04pKTsKICAgICB9CiAgICAgZGljTm9kZS0+YWRkQ29zdChzcGF0aWFsQ29zdCwgbGFuZ3VhZ2VDb3N0LCB3ZWlnaHRpbmctPm5lZWRzVG9Ob3JtYWxpemVDb21wb3VuZERpc3RhbmNlKCksCi0gICAgICAgICAgICBpbnB1dFNpemUsIGVkaXQsIHByb3hpbWl0eSk7CisgICAgICAgICAgICBpbnB1dFNpemUsIGVycm9yVHlwZSk7CiB9CiAKIC8qIHN0YXRpYyAqLyBmbG9hdCBXZWlnaHRpbmc6OmdldFNwYXRpYWxDb3N0KGNvbnN0IFdlaWdodGluZyAqY29uc3Qgd2VpZ2h0aW5nLApAQCAtMTU4LDYyICsxNTcsNiBAQAogICAgIH0KIH0KIAotLyogc3RhdGljICovIGJvb2wgV2VpZ2h0aW5nOjppc0VkaXRDb3JyZWN0aW9uKGNvbnN0IENvcnJlY3Rpb25UeXBlIGNvcnJlY3Rpb25UeXBlKSB7Ci0gICAgc3dpdGNoKGNvcnJlY3Rpb25UeXBlKSB7Ci0gICAgICAgIGNhc2UgQ1RfT01JU1NJT046Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgY2FzZSBDVF9BRERJVElPTkFMX1BST1hJTUlUWToKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBjYXNlIENUX1NVQlNUSVRVVElPTjoKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBjYXNlIENUX05FV19XT1JEX1NQQUNFX09NSVRUSU9OOgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBjYXNlIENUX01BVENIOgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBjYXNlIENUX0NPTVBMRVRJT046Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGNhc2UgQ1RfVEVSTUlOQUw6Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGNhc2UgQ1RfTkVXX1dPUkRfU1BBQ0VfU1VCU1RJVFVUSU9OOgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBjYXNlIENUX0lOU0VSVElPTjoKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBjYXNlIENUX1RSQU5TUE9TSVRJT046Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KLS8qIHN0YXRpYyAqLyBib29sIFdlaWdodGluZzo6aXNQcm94aW1pdHlDb3JyZWN0aW9uKGNvbnN0IFdlaWdodGluZyAqY29uc3Qgd2VpZ2h0aW5nLAotICAgICAgICBjb25zdCBDb3JyZWN0aW9uVHlwZSBjb3JyZWN0aW9uVHlwZSwKLSAgICAgICAgY29uc3QgRGljVHJhdmVyc2VTZXNzaW9uICpjb25zdCB0cmF2ZXJzZVNlc3Npb24sIGNvbnN0IERpY05vZGUgKmNvbnN0IGRpY05vZGUpIHsKLSAgICBzd2l0Y2goY29ycmVjdGlvblR5cGUpIHsKLSAgICAgICAgY2FzZSBDVF9PTUlTU0lPTjoKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgY2FzZSBDVF9BRERJVElPTkFMX1BST1hJTUlUWToKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBjYXNlIENUX1NVQlNUSVRVVElPTjoKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgY2FzZSBDVF9ORVdfV09SRF9TUEFDRV9PTUlUVElPTjoKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgY2FzZSBDVF9NQVRDSDoKLSAgICAgICAgICAgIHJldHVybiB3ZWlnaHRpbmctPmlzUHJveGltaXR5RGljTm9kZSh0cmF2ZXJzZVNlc3Npb24sIGRpY05vZGUpOwotICAgICAgICBjYXNlIENUX0NPTVBMRVRJT046Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGNhc2UgQ1RfVEVSTUlOQUw6Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGNhc2UgQ1RfTkVXX1dPUkRfU1BBQ0VfU1VCU1RJVFVUSU9OOgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBjYXNlIENUX0lOU0VSVElPTjoKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgY2FzZSBDVF9UUkFOU1BPU0lUSU9OOgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0KLQogLyogc3RhdGljICovIGludCBXZWlnaHRpbmc6OmdldEZvcndhcmRJbnB1dENvdW50KGNvbnN0IENvcnJlY3Rpb25UeXBlIGNvcnJlY3Rpb25UeXBlKSB7CiAgICAgc3dpdGNoKGNvcnJlY3Rpb25UeXBlKSB7CiAgICAgICAgIGNhc2UgQ1RfT01JU1NJT046CmRpZmYgLS1naXQgYS9uYXRpdmUvam5pL3NyYy9zdWdnZXN0L2NvcmUvcG9saWN5L3dlaWdodGluZy5oIGIvbmF0aXZlL2puaS9zcmMvc3VnZ2VzdC9jb3JlL3BvbGljeS93ZWlnaHRpbmcuaAppbmRleCBiY2U0NzljLi42ZTc0MGQ5IDEwMDY0NAotLS0gYS9uYXRpdmUvam5pL3NyYy9zdWdnZXN0L2NvcmUvcG9saWN5L3dlaWdodGluZy5oCisrKyBiL25hdGl2ZS9qbmkvc3JjL3N1Z2dlc3QvY29yZS9wb2xpY3kvd2VpZ2h0aW5nLmgKQEAgLTgwLDYgKzgwLDEwIEBACiAgICAgdmlydHVhbCBmbG9hdCBnZXRTcGFjZVN1YnN0aXR1dGlvbkNvc3QoY29uc3QgRGljVHJhdmVyc2VTZXNzaW9uICpjb25zdCB0cmF2ZXJzZVNlc3Npb24sCiAgICAgICAgICAgICBjb25zdCBEaWNOb2RlICpjb25zdCBkaWNOb2RlKSBjb25zdCA9IDA7CiAKKyAgICB2aXJ0dWFsIEVycm9yVHlwZSBnZXRFcnJvclR5cGUoY29uc3QgQ29ycmVjdGlvblR5cGUgY29ycmVjdGlvblR5cGUsCisgICAgICAgICAgICBjb25zdCBEaWNUcmF2ZXJzZVNlc3Npb24gKmNvbnN0IHRyYXZlcnNlU2Vzc2lvbiwKKyAgICAgICAgICAgIGNvbnN0IERpY05vZGUgKmNvbnN0IHBhcmVudERpY05vZGUsIGNvbnN0IERpY05vZGUgKmNvbnN0IGRpY05vZGUpIGNvbnN0ID0gMDsKKwogICAgIFdlaWdodGluZygpIHt9CiAgICAgdmlydHVhbCB+V2VpZ2h0aW5nKCkge30KIApAQCAtOTUsMTIgKzk5LDYgQEAKICAgICAgICAgICAgIGNvbnN0IERpY05vZGUgKmNvbnN0IHBhcmVudERpY05vZGUsIGNvbnN0IERpY05vZGUgKmNvbnN0IGRpY05vZGUsCiAgICAgICAgICAgICBoYXNoX21hcF9jb21wYXQ8aW50LCBpbnQxNl90PiAqY29uc3QgYmlncmFtQ2FjaGVNYXApOwogICAgIC8vIFRPRE86IE1vdmUgdG8gVHlwaW5nV2VpZ2h0aW5nIGFuZCBHZXN0dXJlV2VpZ2h0aW5nPwotICAgIHN0YXRpYyBib29sIGlzRWRpdENvcnJlY3Rpb24oY29uc3QgQ29ycmVjdGlvblR5cGUgY29ycmVjdGlvblR5cGUpOwotICAgIC8vIFRPRE86IE1vdmUgdG8gVHlwaW5nV2VpZ2h0aW5nIGFuZCBHZXN0dXJlV2VpZ2h0aW5nPwotICAgIHN0YXRpYyBib29sIGlzUHJveGltaXR5Q29ycmVjdGlvbihjb25zdCBXZWlnaHRpbmcgKmNvbnN0IHdlaWdodGluZywKLSAgICAgICAgICAgIGNvbnN0IENvcnJlY3Rpb25UeXBlIGNvcnJlY3Rpb25UeXBlLCBjb25zdCBEaWNUcmF2ZXJzZVNlc3Npb24gKmNvbnN0IHRyYXZlcnNlU2Vzc2lvbiwKLSAgICAgICAgICAgIGNvbnN0IERpY05vZGUgKmNvbnN0IGRpY05vZGUpOwotICAgIC8vIFRPRE86IE1vdmUgdG8gVHlwaW5nV2VpZ2h0aW5nIGFuZCBHZXN0dXJlV2VpZ2h0aW5nPwogICAgIHN0YXRpYyBpbnQgZ2V0Rm9yd2FyZElucHV0Q291bnQoY29uc3QgQ29ycmVjdGlvblR5cGUgY29ycmVjdGlvblR5cGUpOwogfTsKIH0gLy8gbmFtZXNwYWNlIGxhdGluaW1lCmRpZmYgLS1naXQgYS9uYXRpdmUvam5pL3NyYy9zdWdnZXN0L2NvcmUvc3VnZ2VzdC5jcHAgYi9uYXRpdmUvam5pL3NyYy9zdWdnZXN0L2NvcmUvc3VnZ2VzdC5jcHAKaW5kZXggOWRlMmNkMi4uNGY5NGE5YSAxMDA2NDQKLS0tIGEvbmF0aXZlL2puaS9zcmMvc3VnZ2VzdC9jb3JlL3N1Z2dlc3QuY3BwCisrKyBiL25hdGl2ZS9qbmkvc3JjL3N1Z2dlc3QvY29yZS9zdWdnZXN0LmNwcApAQCAtMTYxLDEyICsxNjEsMTUgQEAKICAgICAgICAgICAgICAgICArIGRvdWJsZUxldHRlckNvc3Q7CiAgICAgICAgIGNvbnN0IFRlcm1pbmFsQXR0cmlidXRlcyB0ZXJtaW5hbEF0dHJpYnV0ZXModHJhdmVyc2VTZXNzaW9uLT5nZXRPZmZzZXREaWN0KCksCiAgICAgICAgICAgICAgICAgdGVybWluYWxEaWNOb2RlLT5nZXRGbGFncygpLCB0ZXJtaW5hbERpY05vZGUtPmdldEF0dHJpYnV0ZXNQb3MoKSk7Ci0gICAgICAgIGNvbnN0IGludCBvcmlnaW5hbFRlcm1pbmFsUHJvYmFiaWxpdHkgPSB0ZXJtaW5hbERpY05vZGUtPmdldFByb2JhYmlsaXR5KCk7CisgICAgICAgIGNvbnN0IGJvb2wgaXNQb3NzaWJseU9mZmVuc2l2ZVdvcmQgPSB0ZXJtaW5hbERpY05vZGUtPmdldFByb2JhYmlsaXR5KCkgPD0gMDsKKyAgICAgICAgY29uc3QgYm9vbCBpc0V4YWN0TWF0Y2ggPSB0ZXJtaW5hbERpY05vZGUtPmlzRXhhY3RNYXRjaCgpOworICAgICAgICBjb25zdCBpbnQgb3V0cHV0VHlwZUZsYWdzID0KKyAgICAgICAgICAgICAgICBpc1Bvc3NpYmx5T2ZmZW5zaXZlV29yZCA/IERpY3Rpb25hcnk6OktJTkRfRkxBR19QT1NTSUJMWV9PRkZFTlNJVkUgOiAwCisgICAgICAgICAgICAgICAgfCBpc0V4YWN0TWF0Y2ggPyBEaWN0aW9uYXJ5OjpLSU5EX0ZMQUdfRVhBQ1RfTUFUQ0ggOiAwOwogCi0gICAgICAgIC8vIERvIG5vdCBzdWdnZXN0IHdvcmRzIHdpdGggYSAwIHByb2JhYmlsaXR5LCBvciBlbnRyaWVzIHRoYXQgYXJlIGJsYWNrbGlzdGVkIG9yIGRvIG5vdAotICAgICAgICAvLyByZXByZXNlbnQgYSB3b3JkLiBIb3dldmVyLCB3ZSBzaG91bGQgc3RpbGwgc3VibWl0IHRoZWlyIHNob3J0Y3V0cyBpZiBhbnkuCi0gICAgICAgIGNvbnN0IGJvb2wgaXNWYWxpZFdvcmQgPQotICAgICAgICAgICAgICAgIG9yaWdpbmFsVGVybWluYWxQcm9iYWJpbGl0eSA+IDAgJiYgIXRlcm1pbmFsQXR0cmlidXRlcy5pc0JsYWNrbGlzdGVkT3JOb3RBV29yZCgpOworICAgICAgICAvLyBFbnRyaWVzIHRoYXQgYXJlIGJsYWNrbGlzdGVkIG9yIGRvIG5vdCByZXByZXNlbnQgYSB3b3JkIHNob3VsZCBub3QgYmUgb3V0cHV0LgorICAgICAgICBjb25zdCBib29sIGlzVmFsaWRXb3JkID0gIXRlcm1pbmFsQXR0cmlidXRlcy5pc0JsYWNrbGlzdGVkT3JOb3RBV29yZCgpOworCiAgICAgICAgIC8vIEluY3JlYXNlIG91dHB1dCBzY29yZSBvZiB0b3AgdHlwaW5nIHN1Z2dlc3Rpb24gdG8gZW5zdXJlIGF1dG9jb3JyZWN0aW9uLgogICAgICAgICAvLyBUT0RPOiBCZXR0ZXIgaW50ZWdyYXRpb24gd2l0aCBqYXZhIHNpZGUgYXV0b2NvcnJlY3Rpb24gbG9naWMuCiAgICAgICAgIC8vIEZvcmNlIGF1dG9jb3JyZWN0aW9uIGZvciBvYnZpb3VzIGxvbmcgbXVsdGktd29yZCBzdWdnZXN0aW9ucy4KQEAgLTE4OCwxMCArMTkxLDkgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIC8vIERvIG5vdCBzdWdnZXN0IHdvcmRzIHdpdGggYSAwIHByb2JhYmlsaXR5LCBvciBlbnRyaWVzIHRoYXQgYXJlIGJsYWNrbGlzdGVkIG9yIGRvIG5vdAotICAgICAgICAvLyByZXByZXNlbnQgYSB3b3JkLiBIb3dldmVyLCB3ZSBzaG91bGQgc3RpbGwgc3VibWl0IHRoZWlyIHNob3J0Y3V0cyBpZiBhbnkuCisgICAgICAgIC8vIERvbid0IG91dHB1dCBpbnZhbGlkIHdvcmRzLiBIb3dldmVyLCB3ZSBzdGlsbCBuZWVkIHRvIHN1Ym1pdCB0aGVpciBzaG9ydGN1dHMgaWYgYW55LgogICAgICAgICBpZiAoaXNWYWxpZFdvcmQpIHsKLSAgICAgICAgICAgIG91dHB1dFR5cGVzW291dHB1dFdvcmRJbmRleF0gPSBEaWN0aW9uYXJ5OjpLSU5EX0NPUlJFQ1RJT047CisgICAgICAgICAgICBvdXRwdXRUeXBlc1tvdXRwdXRXb3JkSW5kZXhdID0gRGljdGlvbmFyeTo6S0lORF9DT1JSRUNUSU9OIHwgb3V0cHV0VHlwZUZsYWdzOwogICAgICAgICAgICAgZnJlcXVlbmNpZXNbb3V0cHV0V29yZEluZGV4XSA9IGZpbmFsU2NvcmU7CiAgICAgICAgICAgICAvLyBQb3B1bGF0ZSB0aGUgb3V0cHV0Q2hhcnMgYXJyYXkgd2l0aCB0aGUgc3VnZ2VzdGVkIHdvcmQuCiAgICAgICAgICAgICBjb25zdCBpbnQgc3RhcnRJbmRleCA9IG91dHB1dFdvcmRJbmRleCAqIE1BWF9XT1JEX0xFTkdUSDsKQEAgLTI5NCw4ICsyOTYsOCBAQAogICAgICAgICAgICAgICAgICAgICBjb3JyZWN0aW9uRGljTm9kZS5hZHZhbmNlRGlncmFwaEluZGV4KCk7CiAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NEaWNOb2RlQXNEaWdyYXBoKHRyYXZlcnNlU2Vzc2lvbiwgJmNvcnJlY3Rpb25EaWNOb2RlKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKGFsbG93c0Vycm9yQ29ycmVjdGlvbnMKLSAgICAgICAgICAgICAgICAgICAgICAgICYmIFRSQVZFUlNBTC0+aXNPbWlzc2lvbih0cmF2ZXJzZVNlc3Npb24sICZkaWNOb2RlLCBjaGlsZERpY05vZGUpKSB7CisgICAgICAgICAgICAgICAgaWYgKFRSQVZFUlNBTC0+aXNPbWlzc2lvbih0cmF2ZXJzZVNlc3Npb24sICZkaWNOb2RlLCBjaGlsZERpY05vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICBhbGxvd3NFcnJvckNvcnJlY3Rpb25zKSkgewogICAgICAgICAgICAgICAgICAgICAvLyBUT0RPOiAoR2VzdHVyZSkgQ2hhbmdlIHdlaWdodCBiZXR3ZWVuIG9taXNzaW9uIGFuZCBzdWJzdGl0dXRpb24gZXJyb3JzCiAgICAgICAgICAgICAgICAgICAgIC8vIFRPRE86IChHZXN0dXJlKSBUZXJtaW5hbCBub2RlIHNob3VsZCBub3QgYmUgaGFuZGxlZCBhcyBvbWlzc2lvbgogICAgICAgICAgICAgICAgICAgICBjb3JyZWN0aW9uRGljTm9kZS5pbml0QnlDb3B5KGNoaWxkRGljTm9kZSk7CkBAIC00MjIsMjAgKzQyNCwxNSBAQAogICovCiB2b2lkIFN1Z2dlc3Q6OnByb2Nlc3NEaWNOb2RlQXNPbWlzc2lvbigKICAgICAgICAgRGljVHJhdmVyc2VTZXNzaW9uICp0cmF2ZXJzZVNlc3Npb24sIERpY05vZGUgKmRpY05vZGUpIGNvbnN0IHsKLSAgICAvLyBJZiB0aGUgb21pc3Npb24gaXMgc3VyZWx5IGludGVudGlvbmFsIHRoYXQgaXQgc2hvdWxkIGluY3VyIHplcm8gY29zdC4KLSAgICBjb25zdCBib29sIGlzWmVyb0Nvc3RPbWlzc2lvbiA9IGRpY05vZGUtPmlzWmVyb0Nvc3RPbWlzc2lvbigpOwogICAgIERpY05vZGVWZWN0b3IgY2hpbGREaWNOb2RlczsKLQogICAgIERpY05vZGVVdGlsczo6Z2V0QWxsQ2hpbGREaWNOb2RlcyhkaWNOb2RlLCB0cmF2ZXJzZVNlc3Npb24tPmdldE9mZnNldERpY3QoKSwgJmNoaWxkRGljTm9kZXMpOwogCiAgICAgY29uc3QgaW50IHNpemUgPSBjaGlsZERpY05vZGVzLmdldFNpemVBbmRMb2NrKCk7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKICAgICAgICAgRGljTm9kZSAqY29uc3QgY2hpbGREaWNOb2RlID0gY2hpbGREaWNOb2Rlc1tpXTsKLSAgICAgICAgaWYgKCFpc1plcm9Db3N0T21pc3Npb24pIHsKLSAgICAgICAgICAgIC8vIFRyZWF0IHRoaXMgd29yZCBhcyBvbWlzc2lvbgotICAgICAgICAgICAgV2VpZ2h0aW5nOjphZGRDb3N0QW5kRm9yd2FyZElucHV0SW5kZXgoV0VJR0hUSU5HLCBDVF9PTUlTU0lPTiwgdHJhdmVyc2VTZXNzaW9uLAotICAgICAgICAgICAgICAgICAgICBkaWNOb2RlLCBjaGlsZERpY05vZGUsIDAgLyogYmlncmFtQ2FjaGVNYXAgKi8pOwotICAgICAgICB9CisgICAgICAgIC8vIFRyZWF0IHRoaXMgd29yZCBhcyBvbWlzc2lvbgorICAgICAgICBXZWlnaHRpbmc6OmFkZENvc3RBbmRGb3J3YXJkSW5wdXRJbmRleChXRUlHSFRJTkcsIENUX09NSVNTSU9OLCB0cmF2ZXJzZVNlc3Npb24sCisgICAgICAgICAgICAgICAgZGljTm9kZSwgY2hpbGREaWNOb2RlLCAwIC8qIGJpZ3JhbUNhY2hlTWFwICovKTsKICAgICAgICAgd2VpZ2h0Q2hpbGROb2RlKHRyYXZlcnNlU2Vzc2lvbiwgY2hpbGREaWNOb2RlKTsKIAogICAgICAgICBpZiAoIVRSQVZFUlNBTC0+aXNQb3NzaWJsZU9taXNzaW9uQ2hpbGROb2RlKHRyYXZlcnNlU2Vzc2lvbiwgZGljTm9kZSwgY2hpbGREaWNOb2RlKSkgewpkaWZmIC0tZ2l0IGEvbmF0aXZlL2puaS9zcmMvc3VnZ2VzdC9wb2xpY3lpbXBsL3R5cGluZy90eXBpbmdfdHJhdmVyc2FsLmggYi9uYXRpdmUvam5pL3NyYy9zdWdnZXN0L3BvbGljeWltcGwvdHlwaW5nL3R5cGluZ190cmF2ZXJzYWwuaAppbmRleCA5ZjgzNDc0Li5mYjFmYjc5IDEwMDY0NAotLS0gYS9uYXRpdmUvam5pL3NyYy9zdWdnZXN0L3BvbGljeWltcGwvdHlwaW5nL3R5cGluZ190cmF2ZXJzYWwuaAorKysgYi9uYXRpdmUvam5pL3NyYy9zdWdnZXN0L3BvbGljeWltcGwvdHlwaW5nL3R5cGluZ190cmF2ZXJzYWwuaApAQCAtNDMsMTAgKzQzLDE3IEBACiAgICAgfQogCiAgICAgQUtfRk9SQ0VfSU5MSU5FIGJvb2wgaXNPbWlzc2lvbihjb25zdCBEaWNUcmF2ZXJzZVNlc3Npb24gKmNvbnN0IHRyYXZlcnNlU2Vzc2lvbiwKLSAgICAgICAgICAgIGNvbnN0IERpY05vZGUgKmNvbnN0IGRpY05vZGUsIGNvbnN0IERpY05vZGUgKmNvbnN0IGNoaWxkRGljTm9kZSkgY29uc3QgeworICAgICAgICAgICAgY29uc3QgRGljTm9kZSAqY29uc3QgZGljTm9kZSwgY29uc3QgRGljTm9kZSAqY29uc3QgY2hpbGREaWNOb2RlLAorICAgICAgICAgICAgY29uc3QgYm9vbCBhbGxvd3NFcnJvckNvcnJlY3Rpb25zKSBjb25zdCB7CiAgICAgICAgIGlmICghQ09SUkVDVF9PTUlTU0lPTikgewogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CisgICAgICAgIC8vIE5vdGU6IEFsd2F5cyBjb25zaWRlciBpbnRlbnRpb25hbCBvbWlzc2lvbnMgKGxpa2UgYXBvc3Ryb3BoZXMpIHNpbmNlIHRoZXkgYXJlIGNvbW1vbi4KKyAgICAgICAgY29uc3QgYm9vbCBjYW5Db25zaWRlck9taXNzaW9uID0KKyAgICAgICAgICAgICAgICBhbGxvd3NFcnJvckNvcnJlY3Rpb25zIHx8IGNoaWxkRGljTm9kZS0+Y2FuQmVJbnRlbnRpb25hbE9taXNzaW9uKCk7CisgICAgICAgIGlmICghY2FuQ29uc2lkZXJPbWlzc2lvbikgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CiAgICAgICAgIGNvbnN0IGludCBpbnB1dFNpemUgPSB0cmF2ZXJzZVNlc3Npb24tPmdldElucHV0U2l6ZSgpOwogICAgICAgICAvLyBUT0RPOiBEb24ndCByZWZlciB0byBpc0NvbXBsZXRpb24/CiAgICAgICAgIGlmIChkaWNOb2RlLT5pc0NvbXBsZXRpb24oaW5wdXRTaXplKSkgewpkaWZmIC0tZ2l0IGEvbmF0aXZlL2puaS9zcmMvc3VnZ2VzdC9wb2xpY3lpbXBsL3R5cGluZy90eXBpbmdfd2VpZ2h0aW5nLmNwcCBiL25hdGl2ZS9qbmkvc3JjL3N1Z2dlc3QvcG9saWN5aW1wbC90eXBpbmcvdHlwaW5nX3dlaWdodGluZy5jcHAKaW5kZXggMTUwMDM0MS4uNDdiZDIwNCAxMDA2NDQKLS0tIGEvbmF0aXZlL2puaS9zcmMvc3VnZ2VzdC9wb2xpY3lpbXBsL3R5cGluZy90eXBpbmdfd2VpZ2h0aW5nLmNwcAorKysgYi9uYXRpdmUvam5pL3NyYy9zdWdnZXN0L3BvbGljeWltcGwvdHlwaW5nL3R5cGluZ193ZWlnaHRpbmcuY3BwCkBAIC0yMSw0ICsyMSwzOSBAQAogCiBuYW1lc3BhY2UgbGF0aW5pbWUgewogY29uc3QgVHlwaW5nV2VpZ2h0aW5nIFR5cGluZ1dlaWdodGluZzo6c0luc3RhbmNlOworCitFcnJvclR5cGUgVHlwaW5nV2VpZ2h0aW5nOjpnZXRFcnJvclR5cGUoY29uc3QgQ29ycmVjdGlvblR5cGUgY29ycmVjdGlvblR5cGUsCisgICAgICAgIGNvbnN0IERpY1RyYXZlcnNlU2Vzc2lvbiAqY29uc3QgdHJhdmVyc2VTZXNzaW9uLAorICAgICAgICBjb25zdCBEaWNOb2RlICpjb25zdCBwYXJlbnREaWNOb2RlLCBjb25zdCBEaWNOb2RlICpjb25zdCBkaWNOb2RlKSBjb25zdCB7CisgICAgc3dpdGNoIChjb3JyZWN0aW9uVHlwZSkgeworICAgICAgICBjYXNlIENUX01BVENIOgorICAgICAgICAgICAgaWYgKGlzUHJveGltaXR5RGljTm9kZSh0cmF2ZXJzZVNlc3Npb24sIGRpY05vZGUpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIEVUX1BST1hJTUlUWV9DT1JSRUNUSU9OOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gRVRfTk9UX0FOX0VSUk9SOworICAgICAgICAgICAgfQorICAgICAgICBjYXNlIENUX0FERElUSU9OQUxfUFJPWElNSVRZOgorICAgICAgICAgICAgcmV0dXJuIEVUX1BST1hJTUlUWV9DT1JSRUNUSU9OOworICAgICAgICBjYXNlIENUX09NSVNTSU9OOgorICAgICAgICAgICAgaWYgKHBhcmVudERpY05vZGUtPmNhbkJlSW50ZW50aW9uYWxPbWlzc2lvbigpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIEVUX0lOVEVOVElPTkFMX09NSVNTSU9OOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gRVRfRURJVF9DT1JSRUNUSU9OOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1RfU1VCU1RJVFVUSU9OOgorICAgICAgICBjYXNlIENUX0lOU0VSVElPTjoKKyAgICAgICAgY2FzZSBDVF9UUkFOU1BPU0lUSU9OOgorICAgICAgICAgICAgcmV0dXJuIEVUX0VESVRfQ09SUkVDVElPTjsKKyAgICAgICAgY2FzZSBDVF9ORVdfV09SRF9TUEFDRV9PTUlUVElPTjoKKyAgICAgICAgY2FzZSBDVF9ORVdfV09SRF9TUEFDRV9TVUJTVElUVVRJT046CisgICAgICAgICAgICByZXR1cm4gRVRfTkVXX1dPUkQ7CisgICAgICAgIGNhc2UgQ1RfVEVSTUlOQUw6CisgICAgICAgICAgICByZXR1cm4gRVRfTk9UX0FOX0VSUk9SOworICAgICAgICBjYXNlIENUX0NPTVBMRVRJT046CisgICAgICAgICAgICByZXR1cm4gRVRfQ09NUExFVElPTjsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBFVF9OT1RfQU5fRVJST1I7CisgICAgfQorfQogfSAgLy8gbmFtZXNwYWNlIGxhdGluaW1lCmRpZmYgLS1naXQgYS9uYXRpdmUvam5pL3NyYy9zdWdnZXN0L3BvbGljeWltcGwvdHlwaW5nL3R5cGluZ193ZWlnaHRpbmcuaCBiL25hdGl2ZS9qbmkvc3JjL3N1Z2dlc3QvcG9saWN5aW1wbC90eXBpbmcvdHlwaW5nX3dlaWdodGluZy5oCmluZGV4IDM0ZDI1YWUuLjRhMGJkNzEgMTAwNjQ0Ci0tLSBhL25hdGl2ZS9qbmkvc3JjL3N1Z2dlc3QvcG9saWN5aW1wbC90eXBpbmcvdHlwaW5nX3dlaWdodGluZy5oCisrKyBiL25hdGl2ZS9qbmkvc3JjL3N1Z2dlc3QvcG9saWN5aW1wbC90eXBpbmcvdHlwaW5nX3dlaWdodGluZy5oCkBAIC01MCwxMyArNTAsMTQgQEAKICAgICB9CiAKICAgICBmbG9hdCBnZXRPbWlzc2lvbkNvc3QoY29uc3QgRGljTm9kZSAqY29uc3QgcGFyZW50RGljTm9kZSwgY29uc3QgRGljTm9kZSAqY29uc3QgZGljTm9kZSkgY29uc3QgewotICAgICAgICBib29sIHNhbWVDb2RlUG9pbnQgPSBmYWxzZTsKLSAgICAgICAgYm9vbCBpc0ZpcnN0TGV0dGVyT21pc3Npb24gPSBmYWxzZTsKLSAgICAgICAgZmxvYXQgY29zdCA9IDAuMGY7Ci0gICAgICAgIHNhbWVDb2RlUG9pbnQgPSBkaWNOb2RlLT5pc1NhbWVOb2RlQ29kZVBvaW50KHBhcmVudERpY05vZGUpOworICAgICAgICBjb25zdCBib29sIGlzWmVyb0Nvc3RPbWlzc2lvbiA9IHBhcmVudERpY05vZGUtPmlzWmVyb0Nvc3RPbWlzc2lvbigpOworICAgICAgICBjb25zdCBib29sIHNhbWVDb2RlUG9pbnQgPSBkaWNOb2RlLT5pc1NhbWVOb2RlQ29kZVBvaW50KHBhcmVudERpY05vZGUpOwogICAgICAgICAvLyBJZiB0aGUgdHJhdmVyc2FsIG9taXR0ZWQgdGhlIGZpcnN0IGxldHRlciB0aGVuIHRoZSBkaWNOb2RlIHNob3VsZCBub3cgYmUgb24gdGhlIHNlY29uZC4KLSAgICAgICAgaXNGaXJzdExldHRlck9taXNzaW9uID0gZGljTm9kZS0+Z2V0RGVwdGgoKSA9PSAyOwotICAgICAgICBpZiAoaXNGaXJzdExldHRlck9taXNzaW9uKSB7CisgICAgICAgIGNvbnN0IGJvb2wgaXNGaXJzdExldHRlck9taXNzaW9uID0gZGljTm9kZS0+Z2V0RGVwdGgoKSA9PSAyOworICAgICAgICBmbG9hdCBjb3N0ID0gMC4wZjsKKyAgICAgICAgaWYgKGlzWmVyb0Nvc3RPbWlzc2lvbikgeworICAgICAgICAgICAgY29zdCA9IDAuMGY7CisgICAgICAgIH0gZWxzZSBpZiAoaXNGaXJzdExldHRlck9taXNzaW9uKSB7CiAgICAgICAgICAgICBjb3N0ID0gU2NvcmluZ1BhcmFtczo6T01JU1NJT05fQ09TVF9GSVJTVF9DSEFSOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgY29zdCA9IHNhbWVDb2RlUG9pbnQgPyBTY29yaW5nUGFyYW1zOjpPTUlTU0lPTl9DT1NUX1NBTUVfQ0hBUgpAQCAtMTU2LDE1ICsxNTcsOCBAQAogCiAgICAgZmxvYXQgZ2V0VGVybWluYWxMYW5ndWFnZUNvc3QoY29uc3QgRGljVHJhdmVyc2VTZXNzaW9uICpjb25zdCB0cmF2ZXJzZVNlc3Npb24sCiAgICAgICAgICAgICBjb25zdCBEaWNOb2RlICpjb25zdCBkaWNOb2RlLCBjb25zdCBmbG9hdCBkaWNOb2RlTGFuZ3VhZ2VJbXByb2JhYmlsaXR5KSBjb25zdCB7Ci0gICAgICAgIGNvbnN0IGJvb2wgaGFzRWRpdENvdW50ID0gZGljTm9kZS0+Z2V0RWRpdENvcnJlY3Rpb25Db3VudCgpID4gMDsKLSAgICAgICAgY29uc3QgYm9vbCBpc1NhbWVMZW5ndGggPSBkaWNOb2RlLT5nZXREZXB0aCgpID09IHRyYXZlcnNlU2Vzc2lvbi0+Z2V0SW5wdXRTaXplKCk7Ci0gICAgICAgIGNvbnN0IGJvb2wgaGFzTXVsdGlwbGVXb3JkcyA9IGRpY05vZGUtPmhhc011bHRpcGxlV29yZHMoKTsKLSAgICAgICAgY29uc3QgYm9vbCBoYXNQcm94aW1pdHlFcnJvcnMgPSBkaWNOb2RlLT5nZXRQcm94aW1pdHlDb3JyZWN0aW9uQ291bnQoKSA+IDA7Ci0gICAgICAgIC8vIEdlc3R1cmUgaW5wdXQgaXMgYWx3YXlzIGFzc3VtZWQgdG8gaGF2ZSBwcm94aW1pdHkgZXJyb3JzCi0gICAgICAgIC8vIGJlY2F1c2UgdGhlIGlucHV0IHdvcmQgc2hvdWxkbid0IGJlIHRyZWF0ZWQgYXMgcGVyZmVjdAotICAgICAgICBjb25zdCBib29sIGlzRXhhY3RNYXRjaCA9ICFoYXNFZGl0Q291bnQgJiYgIWhhc011bHRpcGxlV29yZHMKLSAgICAgICAgICAgICAgICAmJiAhaGFzUHJveGltaXR5RXJyb3JzICYmIGlzU2FtZUxlbmd0aDsKLSAgICAgICAgY29uc3QgZmxvYXQgbGFuZ3VhZ2VJbXByb2JhYmlsaXR5ID0gaXNFeGFjdE1hdGNoID8gMC4wZiA6IGRpY05vZGVMYW5ndWFnZUltcHJvYmFiaWxpdHk7CisgICAgICAgIGNvbnN0IGZsb2F0IGxhbmd1YWdlSW1wcm9iYWJpbGl0eSA9IChkaWNOb2RlLT5pc0V4YWN0TWF0Y2goKSkgPworICAgICAgICAgICAgICAgIDAuMGYgOiBkaWNOb2RlTGFuZ3VhZ2VJbXByb2JhYmlsaXR5OwogICAgICAgICByZXR1cm4gbGFuZ3VhZ2VJbXByb2JhYmlsaXR5ICogU2NvcmluZ1BhcmFtczo6RElTVEFOQ0VfV0VJR0hUX0xBTkdVQUdFOwogICAgIH0KIApAQCAtMTg5LDYgKzE4MywxMCBAQAogICAgICAgICByZXR1cm4gY29zdCAqIHRyYXZlcnNlU2Vzc2lvbi0+Z2V0TXVsdGlXb3JkQ29zdE11bHRpcGxpZXIoKTsKICAgICB9CiAKKyAgICBFcnJvclR5cGUgZ2V0RXJyb3JUeXBlKGNvbnN0IENvcnJlY3Rpb25UeXBlIGNvcnJlY3Rpb25UeXBlLAorICAgICAgICAgICAgY29uc3QgRGljVHJhdmVyc2VTZXNzaW9uICpjb25zdCB0cmF2ZXJzZVNlc3Npb24sCisgICAgICAgICAgICBjb25zdCBEaWNOb2RlICpjb25zdCBwYXJlbnREaWNOb2RlLCBjb25zdCBEaWNOb2RlICpjb25zdCBkaWNOb2RlKSBjb25zdDsKKwogIHByaXZhdGU6CiAgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFR5cGluZ1dlaWdodGluZyk7CiAgICAgc3RhdGljIGNvbnN0IFR5cGluZ1dlaWdodGluZyBzSW5zdGFuY2U7Cg==