ZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliLy5jcHJvamVjdCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliLy5jcHJvamVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYzVmYWQyCi0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvLmNwcm9qZWN0CkBAIC0wLDAgKzEsMzEgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQorPD9maWxlVmVyc2lvbiA0LjAuMD8+DQorDQorPGNwcm9qZWN0Pg0KKzxzdG9yYWdlTW9kdWxlIG1vZHVsZUlkPSJvcmcuZWNsaXBzZS5jZHQuY29yZS5zZXR0aW5ncyI+DQorPGNjb25maWd1cmF0aW9uIGlkPSJvcmcuZWNsaXBzZS5jZHQuY29yZS5kZWZhdWx0LmNvbmZpZy4xMDc1NjEzNjg4Ij4NCis8c3RvcmFnZU1vZHVsZSBidWlsZFN5c3RlbUlkPSJvcmcuZWNsaXBzZS5jZHQuY29yZS5kZWZhdWx0Q29uZmlnRGF0YVByb3ZpZGVyIiBpZD0ib3JnLmVjbGlwc2UuY2R0LmNvcmUuZGVmYXVsdC5jb25maWcuMTA3NTYxMzY4OCIgbW9kdWxlSWQ9Im9yZy5lY2xpcHNlLmNkdC5jb3JlLnNldHRpbmdzIiBuYW1lPSJDb25maWd1cmF0aW9uIj4NCis8ZXh0ZXJuYWxTZXR0aW5ncy8+DQorPGV4dGVuc2lvbnM+DQorPGV4dGVuc2lvbiBpZD0iY29tLndpbmRyaXZlci5pZGUuY29yZS5XUlNjYW5uZXJJbmZvUHJvdmlkZXIiIHBvaW50PSJvcmcuZWNsaXBzZS5jZHQuY29yZS5TY2FubmVySW5mb1Byb3ZpZGVyIi8+DQorPGV4dGVuc2lvbiBpZD0iY29tLndpbmRyaXZlci5pZGUuY29yZS5XUkVsZlBhcnNlclZ4V29ya3MiIHBvaW50PSJvcmcuZWNsaXBzZS5jZHQuY29yZS5CaW5hcnlQYXJzZXIiLz4NCis8ZXh0ZW5zaW9uIGlkPSJvcmcuZWNsaXBzZS5jZHQuY29yZS5HTlVfRUxGIiBwb2ludD0ib3JnLmVjbGlwc2UuY2R0LmNvcmUuQmluYXJ5UGFyc2VyIi8+DQorPC9leHRlbnNpb25zPg0KKzwvc3RvcmFnZU1vZHVsZT4NCis8c3RvcmFnZU1vZHVsZSBtb2R1bGVJZD0ib3JnLmVjbGlwc2UuY2R0LmNvcmUuZXh0ZXJuYWxTZXR0aW5ncyIvPg0KKw0KKzxzdG9yYWdlTW9kdWxlIG1vZHVsZUlkPSJzY2FubmVyQ29uZmlndXJhdGlvbiIvPg0KKzxzdG9yYWdlTW9kdWxlIG1vZHVsZUlkPSJ1c2VyZGVmaW5lZENvbnRhaW5lciI+DQorPGluZGV4QWxsRmlsZXMgdmFsdWU9ImZhbHNlIi8+DQorPGluaXRpYWxpemVkIHZhbHVlPSJ0cnVlIi8+DQorPC9zdG9yYWdlTW9kdWxlPg0KKzxzdG9yYWdlTW9kdWxlIG1vZHVsZUlkPSJvcmcuZWNsaXBzZS5jZHQuY29yZS5sYW5ndWFnZS5tYXBwaW5nIi8+DQorPHN0b3JhZ2VNb2R1bGUgbW9kdWxlSWQ9Im9yZy5lY2xpcHNlLmNkdC5jb3JlLnBhdGhlbnRyeSI+DQorPHBhdGhlbnRyeSBleGNsdWRpbmc9IlBQQzYwM2dudS98LnN2bi98LnNldHRpbmdzLyIga2luZD0ic3JjIiBwYXRoPSIiLz4NCis8cGF0aGVudHJ5IGtpbmQ9Im91dCIgcGF0aD0iIi8+DQorPHBhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9ImNvbS53aW5kcml2ZXIuaWRlLmNvcmUuV1JfQ09OVEFJTkVSIi8+DQorPHBhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9ImNvbS53aW5kcml2ZXIuaWRlLmNvcmUuYnVpbGQubW9kZWwuV1JfVVNFUkRFRklORURfQ09OVEFJTkVSIi8+DQorPC9zdG9yYWdlTW9kdWxlPg0KKzwvY2NvbmZpZ3VyYXRpb24+DQorPC9zdG9yYWdlTW9kdWxlPg0KKzwvY3Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvLnByb2plY3QgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi8ucHJvamVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMmZiMmNjCi0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvLnByb2plY3QKQEAgLTAsMCArMSwyMCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCis8cHJvamVjdERlc2NyaXB0aW9uPg0KKwk8bmFtZT5XUElMaWI8L25hbWU+DQorCTxjb21tZW50PjwvY29tbWVudD4NCisJPHByb2plY3RzPg0KKwk8L3Byb2plY3RzPg0KKwk8YnVpbGRTcGVjPg0KKwkJPGJ1aWxkQ29tbWFuZD4NCisJCQk8bmFtZT5jb20ud2luZHJpdmVyLmlkZS5jb3JlLndyYnVpbGRlcjwvbmFtZT4NCisJCQk8YXJndW1lbnRzPg0KKwkJCTwvYXJndW1lbnRzPg0KKwkJPC9idWlsZENvbW1hbmQ+DQorCTwvYnVpbGRTcGVjPg0KKwk8bmF0dXJlcz4NCisJCTxuYXR1cmU+Y29tLndpbmRyaXZlci5pZGUuY29yZS53cm5hdHVyZTwvbmF0dXJlPg0KKwkJPG5hdHVyZT5jb20ud2luZHJpdmVyLmlkZS5jb3JlLndyY29yZW5hdHVyZTwvbmF0dXJlPg0KKwkJPG5hdHVyZT5vcmcuZWNsaXBzZS5jZHQuY29yZS5jbmF0dXJlPC9uYXR1cmU+DQorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmNkdC5jb3JlLmNjbmF0dXJlPC9uYXR1cmU+DQorCTwvbmF0dXJlcz4NCis8L3Byb2plY3REZXNjcmlwdGlvbj4NCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi8uc2V0dGluZ3MvTWFrZWZpbGUgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi8uc2V0dGluZ3MvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGEwNWM5NgotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliLy5zZXR0aW5ncy9NYWtlZmlsZQpAQCAtMCwwICsxLDIxODQgQEAKKyMgV2luZCBSaXZlciBXb3JrYmVuY2ggZ2VuZXJhdGVkIE1ha2VmaWxlLg0KKyMgRG8gbm90IGVkaXQhISENCisjDQorIyBUaGUgZmlsZSAiLndybWFrZWZpbGUiIGlzIHRoZSB0ZW1wbGF0ZSB1c2VkIGJ5IHRoZSBXaW5kIFJpdmVyIFdvcmtiZW5jaCB0bw0KKyMgZ2VuZXJhdGUgdGhlIG1ha2VmaWxlcyBvZiB0aGlzIHByb2plY3QuIEFkZCB1c2VyLXNwZWNpZmljIGJ1aWxkIHRhcmdldHMgYW5kDQorIyBtYWtlIHJ1bGVzIG9ubHkoISkgaW4gdGhpcyBwcm9qZWN0J3MgIi53cm1ha2VmaWxlIiBmaWxlLiBUaGVzZSB3aWxsIHRoZW4gYmUNCisjIGF1dG9tYXRpY2FsbHkgZHVtcGVkIGludG8gdGhlIG1ha2VmaWxlcy4NCisNCitXSU5EX0hPTUUgOj0gJChzdWJzdCBcLC8sJChXSU5EX0hPTUUpKQ0KK1dJTkRfQkFTRSA6PSAkKHN1YnN0IFwsLywkKFdJTkRfQkFTRSkpDQorV0lORF9VU1IgOj0gJChzdWJzdCBcLC8sJChXSU5EX1VTUikpDQorDQorYWxsIDogcHJlX2J1aWxkIG1haW5fYWxsIHBvc3RfYnVpbGQNCisNCitfY2xlYW4gOjoNCisJQGVjaG8gIm1ha2U6IHJlbW92aW5nIHRhcmdldHMgYW5kIG9iamVjdHMgb2YgYHB3ZGAiDQorDQorVFJBQ0U9MA0KK1RSQUNFT049JChUUkFDRTowPUApDQorVFJBQ0VfRkxBRz0kKFRSQUNFT046MT0pDQorDQorTUFLRUZJTEUgOj0gTWFrZWZpbGUNCisNCitCVUlMRF9TUEVDID0gUFBDNjAzZ251DQorREVCVUdfTU9ERSA9IDENCitTUkNfRElSIDo9IC4NCitCVUlMRF9ST09UX0RJUiA6PSANCitQUkpfUk9PVF9ESVIgOj0gQzovd2luZHJpdmVyL3dvcmtzcGFjZS9XUElMaWINCitXU19ST09UX0RJUiA6PSBDOi93aW5kcml2ZXIvd29ya3NwYWNlDQorDQorQUxMX0JVSUxEX1NQRUNTIDo9IFBQQzMyZGlhYiBQUEMzMmdudSBQUEMzMnNmZGlhYiBQUEMzMnNmZ251IFwNCisJIFBQQzQwM2RpYWIgUFBDNDAzZ251IFBQQzQwNWRpYWIgUFBDNDA1Z251IFwNCisJIFBQQzQwNXNmZGlhYiBQUEM0MDVzZmdudSBQUEM0NDBkaWFiIFBQQzQ0MGdudSBcDQorCSBQUEM0NDBzZmRpYWIgUFBDNDQwc2ZnbnUgUFBDNjAzZGlhYiBQUEM2MDNnbnUgXA0KKwkgUFBDNjA0ZGlhYiBQUEM2MDRnbnUgUFBDODVYWGRpYWIgUFBDODVYWGdudSBcDQorCSBQUEM4NVhYc2ZkaWFiIFBQQzg1WFhzZmdudSBQUEM4NjBzZmRpYWIgUFBDODYwc2ZnbnUgXA0KKwkgU0lNTElOVVhkaWFiIFNJTUxJTlVYZ251IFNJTU5UZGlhYiBTSU1OVGdudSBcDQorCSBTSU1TUEFSQ1NPTEFSSVNkaWFiIFNJTVNQQVJDU09MQVJJU2dudQ0KK0VOQUJMRURfQlVJTERfU1BFQ1MgOj0gUFBDNjAzZ251DQorDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEMzMmRpYWIpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK09CSl9ESVIgOj0gUFBDMzJkaWFiX0RFQlVHDQorZWxzZQ0KK09CSl9ESVIgOj0gUFBDMzJkaWFiDQorZW5kaWYNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDMzJnbnUpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK09CSl9ESVIgOj0gUFBDMzJnbnVfREVCVUcNCitlbHNlDQorT0JKX0RJUiA6PSBQUEMzMmdudQ0KK2VuZGlmDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzMyc2ZkaWFiKQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitPQkpfRElSIDo9IFBQQzMyc2ZkaWFiX0RFQlVHDQorZWxzZQ0KK09CSl9ESVIgOj0gUFBDMzJzZmRpYWINCitlbmRpZg0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEMzMnNmZ251KQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitPQkpfRElSIDo9IFBQQzMyc2ZnbnVfREVCVUcNCitlbHNlDQorT0JKX0RJUiA6PSBQUEMzMnNmZ251DQorZW5kaWYNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNDAzZGlhYikNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorT0JKX0RJUiA6PSBQUEM0MDNkaWFiX0RFQlVHDQorZWxzZQ0KK09CSl9ESVIgOj0gUFBDNDAzZGlhYg0KK2VuZGlmDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzQwM2dudSkNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorT0JKX0RJUiA6PSBQUEM0MDNnbnVfREVCVUcNCitlbHNlDQorT0JKX0RJUiA6PSBQUEM0MDNnbnUNCitlbmRpZg0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM0MDVkaWFiKQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitPQkpfRElSIDo9IFBQQzQwNWRpYWJfREVCVUcNCitlbHNlDQorT0JKX0RJUiA6PSBQUEM0MDVkaWFiDQorZW5kaWYNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNDA1Z251KQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitPQkpfRElSIDo9IFBQQzQwNWdudV9ERUJVRw0KK2Vsc2UNCitPQkpfRElSIDo9IFBQQzQwNWdudQ0KK2VuZGlmDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzQwNXNmZGlhYikNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorT0JKX0RJUiA6PSBQUEM0MDVzZmRpYWJfREVCVUcNCitlbHNlDQorT0JKX0RJUiA6PSBQUEM0MDVzZmRpYWINCitlbmRpZg0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM0MDVzZmdudSkNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorT0JKX0RJUiA6PSBQUEM0MDVzZmdudV9ERUJVRw0KK2Vsc2UNCitPQkpfRElSIDo9IFBQQzQwNXNmZ251DQorZW5kaWYNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNDQwZGlhYikNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorT0JKX0RJUiA6PSBQUEM0NDBkaWFiX0RFQlVHDQorZWxzZQ0KK09CSl9ESVIgOj0gUFBDNDQwZGlhYg0KK2VuZGlmDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzQ0MGdudSkNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorT0JKX0RJUiA6PSBQUEM0NDBnbnVfREVCVUcNCitlbHNlDQorT0JKX0RJUiA6PSBQUEM0NDBnbnUNCitlbmRpZg0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM0NDBzZmRpYWIpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK09CSl9ESVIgOj0gUFBDNDQwc2ZkaWFiX0RFQlVHDQorZWxzZQ0KK09CSl9ESVIgOj0gUFBDNDQwc2ZkaWFiDQorZW5kaWYNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNDQwc2ZnbnUpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK09CSl9ESVIgOj0gUFBDNDQwc2ZnbnVfREVCVUcNCitlbHNlDQorT0JKX0RJUiA6PSBQUEM0NDBzZmdudQ0KK2VuZGlmDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzYwM2RpYWIpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK09CSl9ESVIgOj0gUFBDNjAzZGlhYl9ERUJVRw0KK2Vsc2UNCitPQkpfRElSIDo9IFBQQzYwM2RpYWINCitlbmRpZg0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM2MDNnbnUpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK09CSl9ESVIgOj0gUFBDNjAzZ251X0RFQlVHDQorZWxzZQ0KK09CSl9ESVIgOj0gUFBDNjAzZ251DQorZW5kaWYNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNjA0ZGlhYikNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorT0JKX0RJUiA6PSBQUEM2MDRkaWFiX0RFQlVHDQorZWxzZQ0KK09CSl9ESVIgOj0gUFBDNjA0ZGlhYg0KK2VuZGlmDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzYwNGdudSkNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorT0JKX0RJUiA6PSBQUEM2MDRnbnVfREVCVUcNCitlbHNlDQorT0JKX0RJUiA6PSBQUEM2MDRnbnUNCitlbmRpZg0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM4NVhYZGlhYikNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorT0JKX0RJUiA6PSBQUEM4NVhYZGlhYl9ERUJVRw0KK2Vsc2UNCitPQkpfRElSIDo9IFBQQzg1WFhkaWFiDQorZW5kaWYNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDODVYWGdudSkNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorT0JKX0RJUiA6PSBQUEM4NVhYZ251X0RFQlVHDQorZWxzZQ0KK09CSl9ESVIgOj0gUFBDODVYWGdudQ0KK2VuZGlmDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzg1WFhzZmRpYWIpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK09CSl9ESVIgOj0gUFBDODVYWHNmZGlhYl9ERUJVRw0KK2Vsc2UNCitPQkpfRElSIDo9IFBQQzg1WFhzZmRpYWINCitlbmRpZg0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM4NVhYc2ZnbnUpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK09CSl9ESVIgOj0gUFBDODVYWHNmZ251X0RFQlVHDQorZWxzZQ0KK09CSl9ESVIgOj0gUFBDODVYWHNmZ251DQorZW5kaWYNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDODYwc2ZkaWFiKQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitPQkpfRElSIDo9IFBQQzg2MHNmZGlhYl9ERUJVRw0KK2Vsc2UNCitPQkpfRElSIDo9IFBQQzg2MHNmZGlhYg0KK2VuZGlmDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzg2MHNmZ251KQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitPQkpfRElSIDo9IFBQQzg2MHNmZ251X0RFQlVHDQorZWxzZQ0KK09CSl9ESVIgOj0gUFBDODYwc2ZnbnUNCitlbmRpZg0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxTSU1MSU5VWGRpYWIpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK09CSl9ESVIgOj0gU0lNTElOVVhkaWFiX0RFQlVHDQorZWxzZQ0KK09CSl9ESVIgOj0gU0lNTElOVVhkaWFiDQorZW5kaWYNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksU0lNTElOVVhnbnUpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK09CSl9ESVIgOj0gU0lNTElOVVhnbnVfREVCVUcNCitlbHNlDQorT0JKX0RJUiA6PSBTSU1MSU5VWGdudQ0KK2VuZGlmDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFNJTU5UZGlhYikNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorT0JKX0RJUiA6PSBTSU1OVGRpYWJfREVCVUcNCitlbHNlDQorT0JKX0RJUiA6PSBTSU1OVGRpYWINCitlbmRpZg0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxTSU1OVGdudSkNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorT0JKX0RJUiA6PSBTSU1OVGdudV9ERUJVRw0KK2Vsc2UNCitPQkpfRElSIDo9IFNJTU5UZ251DQorZW5kaWYNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksU0lNU1BBUkNTT0xBUklTZGlhYikNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorT0JKX0RJUiA6PSBTSU1TUEFSQ1NPTEFSSVNkaWFiX0RFQlVHDQorZWxzZQ0KK09CSl9ESVIgOj0gU0lNU1BBUkNTT0xBUklTZGlhYg0KK2VuZGlmDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFNJTVNQQVJDU09MQVJJU2dudSkNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorT0JKX0RJUiA6PSBTSU1TUEFSQ1NPTEFSSVNnbnVfREVCVUcNCitlbHNlDQorT0JKX0RJUiA6PSBTSU1TUEFSQ1NPTEFSSVNnbnUNCitlbmRpZg0KK2VuZGlmDQorDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEMzMmRpYWIpDQorU1VCRElSUyA6PQ0KK09CSkVDVFMgOj0NCisNCitQUk9KRUNUX1RBUkdFVFMgOj0gJChPQkpFQ1RTKQ0KKw0KK1NVQl9PQkpFQ1RTIDo9DQorU1VCX1RBUkdFVFMgOj0NCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDMzJnbnUpDQorU1VCRElSUyA6PQ0KK09CSkVDVFMgOj0NCisNCitQUk9KRUNUX1RBUkdFVFMgOj0gJChPQkpFQ1RTKQ0KKw0KK1NVQl9PQkpFQ1RTIDo9DQorU1VCX1RBUkdFVFMgOj0NCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDMzJzZmRpYWIpDQorU1VCRElSUyA6PQ0KK09CSkVDVFMgOj0NCisNCitQUk9KRUNUX1RBUkdFVFMgOj0gJChPQkpFQ1RTKQ0KKw0KK1NVQl9PQkpFQ1RTIDo9DQorU1VCX1RBUkdFVFMgOj0NCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDMzJzZmdudSkNCitTVUJESVJTIDo9DQorT0JKRUNUUyA6PQ0KKw0KK1BST0pFQ1RfVEFSR0VUUyA6PSAkKE9CSkVDVFMpDQorDQorU1VCX09CSkVDVFMgOj0NCitTVUJfVEFSR0VUUyA6PQ0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM0MDNkaWFiKQ0KK1NVQkRJUlMgOj0NCitPQkpFQ1RTIDo9DQorDQorUFJPSkVDVF9UQVJHRVRTIDo9ICQoT0JKRUNUUykNCisNCitTVUJfT0JKRUNUUyA6PQ0KK1NVQl9UQVJHRVRTIDo9DQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzQwM2dudSkNCitTVUJESVJTIDo9DQorT0JKRUNUUyA6PQ0KKw0KK1BST0pFQ1RfVEFSR0VUUyA6PSAkKE9CSkVDVFMpDQorDQorU1VCX09CSkVDVFMgOj0NCitTVUJfVEFSR0VUUyA6PQ0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM0MDVkaWFiKQ0KK1NVQkRJUlMgOj0NCitPQkpFQ1RTIDo9DQorDQorUFJPSkVDVF9UQVJHRVRTIDo9ICQoT0JKRUNUUykNCisNCitTVUJfT0JKRUNUUyA6PQ0KK1NVQl9UQVJHRVRTIDo9DQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzQwNWdudSkNCitTVUJESVJTIDo9DQorT0JKRUNUUyA6PQ0KKw0KK1BST0pFQ1RfVEFSR0VUUyA6PSAkKE9CSkVDVFMpDQorDQorU1VCX09CSkVDVFMgOj0NCitTVUJfVEFSR0VUUyA6PQ0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM0MDVzZmRpYWIpDQorU1VCRElSUyA6PQ0KK09CSkVDVFMgOj0NCisNCitQUk9KRUNUX1RBUkdFVFMgOj0gJChPQkpFQ1RTKQ0KKw0KK1NVQl9PQkpFQ1RTIDo9DQorU1VCX1RBUkdFVFMgOj0NCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNDA1c2ZnbnUpDQorU1VCRElSUyA6PQ0KK09CSkVDVFMgOj0NCisNCitQUk9KRUNUX1RBUkdFVFMgOj0gJChPQkpFQ1RTKQ0KKw0KK1NVQl9PQkpFQ1RTIDo9DQorU1VCX1RBUkdFVFMgOj0NCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNDQwZGlhYikNCitTVUJESVJTIDo9DQorT0JKRUNUUyA6PQ0KKw0KK1BST0pFQ1RfVEFSR0VUUyA6PSAkKE9CSkVDVFMpDQorDQorU1VCX09CSkVDVFMgOj0NCitTVUJfVEFSR0VUUyA6PQ0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM0NDBnbnUpDQorU1VCRElSUyA6PQ0KK09CSkVDVFMgOj0NCisNCitQUk9KRUNUX1RBUkdFVFMgOj0gJChPQkpFQ1RTKQ0KKw0KK1NVQl9PQkpFQ1RTIDo9DQorU1VCX1RBUkdFVFMgOj0NCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNDQwc2ZkaWFiKQ0KK1NVQkRJUlMgOj0NCitPQkpFQ1RTIDo9DQorDQorUFJPSkVDVF9UQVJHRVRTIDo9ICQoT0JKRUNUUykNCisNCitTVUJfT0JKRUNUUyA6PQ0KK1NVQl9UQVJHRVRTIDo9DQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzQ0MHNmZ251KQ0KK1NVQkRJUlMgOj0NCitPQkpFQ1RTIDo9DQorDQorUFJPSkVDVF9UQVJHRVRTIDo9ICQoT0JKRUNUUykNCisNCitTVUJfT0JKRUNUUyA6PQ0KK1NVQl9UQVJHRVRTIDo9DQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzYwM2RpYWIpDQorU1VCRElSUyA6PQ0KK09CSkVDVFMgOj0NCisNCitQUk9KRUNUX1RBUkdFVFMgOj0gJChPQkpFQ1RTKQ0KKw0KK1NVQl9PQkpFQ1RTIDo9DQorU1VCX1RBUkdFVFMgOj0NCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNjAzZ251KQ0KK1NVQkRJUlMgOj0NCitPQkpFQ1RTIDo9DQorDQorUFJPSkVDVF9UQVJHRVRTIDo9ICQoT0JKRUNUUykNCisNCitTVUJfT0JKRUNUUyA6PQ0KK1NVQl9UQVJHRVRTIDo9DQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzYwNGRpYWIpDQorU1VCRElSUyA6PQ0KK09CSkVDVFMgOj0NCisNCitQUk9KRUNUX1RBUkdFVFMgOj0gJChPQkpFQ1RTKQ0KKw0KK1NVQl9PQkpFQ1RTIDo9DQorU1VCX1RBUkdFVFMgOj0NCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNjA0Z251KQ0KK1NVQkRJUlMgOj0NCitPQkpFQ1RTIDo9DQorDQorUFJPSkVDVF9UQVJHRVRTIDo9ICQoT0JKRUNUUykNCisNCitTVUJfT0JKRUNUUyA6PQ0KK1NVQl9UQVJHRVRTIDo9DQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzg1WFhkaWFiKQ0KK1NVQkRJUlMgOj0NCitPQkpFQ1RTIDo9DQorDQorUFJPSkVDVF9UQVJHRVRTIDo9ICQoT0JKRUNUUykNCisNCitTVUJfT0JKRUNUUyA6PQ0KK1NVQl9UQVJHRVRTIDo9DQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzg1WFhnbnUpDQorU1VCRElSUyA6PQ0KK09CSkVDVFMgOj0NCisNCitQUk9KRUNUX1RBUkdFVFMgOj0gJChPQkpFQ1RTKQ0KKw0KK1NVQl9PQkpFQ1RTIDo9DQorU1VCX1RBUkdFVFMgOj0NCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDODVYWHNmZGlhYikNCitTVUJESVJTIDo9DQorT0JKRUNUUyA6PQ0KKw0KK1BST0pFQ1RfVEFSR0VUUyA6PSAkKE9CSkVDVFMpDQorDQorU1VCX09CSkVDVFMgOj0NCitTVUJfVEFSR0VUUyA6PQ0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM4NVhYc2ZnbnUpDQorU1VCRElSUyA6PQ0KK09CSkVDVFMgOj0NCisNCitQUk9KRUNUX1RBUkdFVFMgOj0gJChPQkpFQ1RTKQ0KKw0KK1NVQl9PQkpFQ1RTIDo9DQorU1VCX1RBUkdFVFMgOj0NCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDODYwc2ZkaWFiKQ0KK1NVQkRJUlMgOj0NCitPQkpFQ1RTIDo9DQorDQorUFJPSkVDVF9UQVJHRVRTIDo9ICQoT0JKRUNUUykNCisNCitTVUJfT0JKRUNUUyA6PQ0KK1NVQl9UQVJHRVRTIDo9DQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzg2MHNmZ251KQ0KK1NVQkRJUlMgOj0NCitPQkpFQ1RTIDo9DQorDQorUFJPSkVDVF9UQVJHRVRTIDo9ICQoT0JKRUNUUykNCisNCitTVUJfT0JKRUNUUyA6PQ0KK1NVQl9UQVJHRVRTIDo9DQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFNJTUxJTlVYZGlhYikNCitTVUJESVJTIDo9DQorT0JKRUNUUyA6PQ0KKw0KK1BST0pFQ1RfVEFSR0VUUyA6PSAkKE9CSkVDVFMpDQorDQorU1VCX09CSkVDVFMgOj0NCitTVUJfVEFSR0VUUyA6PQ0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxTSU1MSU5VWGdudSkNCitTVUJESVJTIDo9DQorT0JKRUNUUyA6PQ0KKw0KK1BST0pFQ1RfVEFSR0VUUyA6PSAkKE9CSkVDVFMpDQorDQorU1VCX09CSkVDVFMgOj0NCitTVUJfVEFSR0VUUyA6PQ0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxTSU1OVGRpYWIpDQorU1VCRElSUyA6PQ0KK09CSkVDVFMgOj0NCisNCitQUk9KRUNUX1RBUkdFVFMgOj0gJChPQkpFQ1RTKQ0KKw0KK1NVQl9PQkpFQ1RTIDo9DQorU1VCX1RBUkdFVFMgOj0NCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksU0lNTlRnbnUpDQorU1VCRElSUyA6PQ0KK09CSkVDVFMgOj0NCisNCitQUk9KRUNUX1RBUkdFVFMgOj0gJChPQkpFQ1RTKQ0KKw0KK1NVQl9PQkpFQ1RTIDo9DQorU1VCX1RBUkdFVFMgOj0NCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksU0lNU1BBUkNTT0xBUklTZGlhYikNCitTVUJESVJTIDo9DQorT0JKRUNUUyA6PQ0KKw0KK1BST0pFQ1RfVEFSR0VUUyA6PSAkKE9CSkVDVFMpDQorDQorU1VCX09CSkVDVFMgOj0NCitTVUJfVEFSR0VUUyA6PQ0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxTSU1TUEFSQ1NPTEFSSVNnbnUpDQorU1VCRElSUyA6PQ0KK09CSkVDVFMgOj0NCisNCitQUk9KRUNUX1RBUkdFVFMgOj0gJChPQkpFQ1RTKQ0KKw0KK1NVQl9PQkpFQ1RTIDo9DQorU1VCX1RBUkdFVFMgOj0NCitlbmRpZg0KKw0KK1BST0pFQ1RfVFlQRSA9IERLTQ0KK0RFRklORVMgPSANCitFWFBBTkRfREJHID0gMA0KKw0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDMzJkaWFiKQ0KK1ZYX0NQVV9GQU1JTFkgPSBwcGMNCitDUFUgPSBQUEMzMg0KK1RPT0xfRkFNSUxZID0gZGlhYg0KK1RPT0wgPSBkaWFiDQorVE9PTF9QQVRIID0gDQorQ0NfQVJDSF9TUEVDID0gLXRQUENGSDp2eHdvcmtzNjMgLVhzdG13LXNsb3cgLURQUEMzMl9mcDYweA0KK0xJQlBBVEggPSANCitMSUJTID0gDQorDQorSURFX0lOQ0xVREVTID0gLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2ggLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2gvd3JuL2NvcmVpcCANCisNCitJREVfTElCUkFSSUVTID0gDQorZW5kaWYNCisNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzMyZ251KQ0KK1ZYX0NQVV9GQU1JTFkgPSBwcGMNCitDUFUgPSBQUEMzMg0KK1RPT0xfRkFNSUxZID0gZ251DQorVE9PTCA9IGdudQ0KK1RPT0xfUEFUSCA9IA0KK0NDX0FSQ0hfU1BFQyA9IC1taGFyZC1mbG9hdCAtbXN0cmljdC1hbGlnbiAtbW5vLWltcGxpY2l0LWZwIC1EUFBDMzJfZnA2MHgNCitMSUJQQVRIID0gDQorTElCUyA9IA0KKw0KK0lERV9JTkNMVURFUyA9IC1JJChXSU5EX0JBU0UpL3RhcmdldC9oIC1JJChXSU5EX0JBU0UpL3RhcmdldC9oL3dybi9jb3JlaXAgDQorDQorSURFX0xJQlJBUklFUyA9IA0KK2VuZGlmDQorDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEMzMnNmZGlhYikNCitWWF9DUFVfRkFNSUxZID0gcHBjDQorQ1BVID0gUFBDMzINCitUT09MX0ZBTUlMWSA9IGRpYWINCitUT09MID0gc2ZkaWFiDQorVE9PTF9QQVRIID0gDQorQ0NfQVJDSF9TUEVDID0gLXRQUENGUzp2eHdvcmtzNjMNCitMSUJQQVRIID0gDQorTElCUyA9IA0KKw0KK0lERV9JTkNMVURFUyA9IC1JJChXSU5EX0JBU0UpL3RhcmdldC9oIC1JJChXSU5EX0JBU0UpL3RhcmdldC9oL3dybi9jb3JlaXAgDQorDQorSURFX0xJQlJBUklFUyA9IA0KK2VuZGlmDQorDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEMzMnNmZ251KQ0KK1ZYX0NQVV9GQU1JTFkgPSBwcGMNCitDUFUgPSBQUEMzMg0KK1RPT0xfRkFNSUxZID0gZ251DQorVE9PTCA9IHNmZ251DQorVE9PTF9QQVRIID0gDQorQ0NfQVJDSF9TUEVDID0gLW1zb2Z0LWZsb2F0IC1tc3RyaWN0LWFsaWduDQorTElCUEFUSCA9IA0KK0xJQlMgPSANCisNCitJREVfSU5DTFVERVMgPSAtSSQoV0lORF9CQVNFKS90YXJnZXQvaCAtSSQoV0lORF9CQVNFKS90YXJnZXQvaC93cm4vY29yZWlwIA0KKw0KK0lERV9MSUJSQVJJRVMgPSANCitlbmRpZg0KKw0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNDAzZGlhYikNCitWWF9DUFVfRkFNSUxZID0gcHBjDQorQ1BVID0gUFBDNDAzDQorVE9PTF9GQU1JTFkgPSBkaWFiDQorVE9PTCA9IGRpYWINCitUT09MX1BBVEggPSANCitDQ19BUkNIX1NQRUMgPSAtdFBQQzQwM0ZTOnZ4d29ya3M2Mw0KK0xJQlBBVEggPSANCitMSUJTID0gDQorDQorSURFX0lOQ0xVREVTID0gLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2ggLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2gvd3JuL2NvcmVpcCANCisNCitJREVfTElCUkFSSUVTID0gDQorZW5kaWYNCisNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzQwM2dudSkNCitWWF9DUFVfRkFNSUxZID0gcHBjDQorQ1BVID0gUFBDNDAzDQorVE9PTF9GQU1JTFkgPSBnbnUNCitUT09MID0gZ251DQorVE9PTF9QQVRIID0gDQorQ0NfQVJDSF9TUEVDID0gLW1jcHU9NDAzIC1tc3RyaWN0LWFsaWduIC1tc29mdC1mbG9hdA0KK0xJQlBBVEggPSANCitMSUJTID0gDQorDQorSURFX0lOQ0xVREVTID0gLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2ggLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2gvd3JuL2NvcmVpcCANCisNCitJREVfTElCUkFSSUVTID0gDQorZW5kaWYNCisNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzQwNWRpYWIpDQorVlhfQ1BVX0ZBTUlMWSA9IHBwYw0KK0NQVSA9IFBQQzQwNQ0KK1RPT0xfRkFNSUxZID0gZGlhYg0KK1RPT0wgPSBkaWFiDQorVE9PTF9QQVRIID0gDQorQ0NfQVJDSF9TUEVDID0gLXRQUEM0MDVGUzp2eHdvcmtzNjMNCitMSUJQQVRIID0gDQorTElCUyA9IA0KKw0KK0lERV9JTkNMVURFUyA9IC1JJChXSU5EX0JBU0UpL3RhcmdldC9oIC1JJChXSU5EX0JBU0UpL3RhcmdldC9oL3dybi9jb3JlaXAgDQorDQorSURFX0xJQlJBUklFUyA9IA0KK2VuZGlmDQorDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM0MDVnbnUpDQorVlhfQ1BVX0ZBTUlMWSA9IHBwYw0KK0NQVSA9IFBQQzQwNQ0KK1RPT0xfRkFNSUxZID0gZ251DQorVE9PTCA9IGdudQ0KK1RPT0xfUEFUSCA9IA0KK0NDX0FSQ0hfU1BFQyA9IC1tY3B1PTQwNSAtbXN0cmljdC1hbGlnbiAtbXNvZnQtZmxvYXQNCitMSUJQQVRIID0gDQorTElCUyA9IA0KKw0KK0lERV9JTkNMVURFUyA9IC1JJChXSU5EX0JBU0UpL3RhcmdldC9oIC1JJChXSU5EX0JBU0UpL3RhcmdldC9oL3dybi9jb3JlaXAgDQorDQorSURFX0xJQlJBUklFUyA9IA0KK2VuZGlmDQorDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM0MDVzZmRpYWIpDQorVlhfQ1BVX0ZBTUlMWSA9IHBwYw0KK0NQVSA9IFBQQzQwNQ0KK1RPT0xfRkFNSUxZID0gZGlhYg0KK1RPT0wgPSBzZmRpYWINCitUT09MX1BBVEggPSANCitDQ19BUkNIX1NQRUMgPSAtdFBQQzQwNUZTOnZ4d29ya3M2Mw0KK0xJQlBBVEggPSANCitMSUJTID0gDQorDQorSURFX0lOQ0xVREVTID0gLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2ggLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2gvd3JuL2NvcmVpcCANCisNCitJREVfTElCUkFSSUVTID0gDQorZW5kaWYNCisNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzQwNXNmZ251KQ0KK1ZYX0NQVV9GQU1JTFkgPSBwcGMNCitDUFUgPSBQUEM0MDUNCitUT09MX0ZBTUlMWSA9IGdudQ0KK1RPT0wgPSBzZmdudQ0KK1RPT0xfUEFUSCA9IA0KK0NDX0FSQ0hfU1BFQyA9IC1tY3B1PTQwNSAtbXN0cmljdC1hbGlnbiAtbXNvZnQtZmxvYXQNCitMSUJQQVRIID0gDQorTElCUyA9IA0KKw0KK0lERV9JTkNMVURFUyA9IC1JJChXSU5EX0JBU0UpL3RhcmdldC9oIC1JJChXSU5EX0JBU0UpL3RhcmdldC9oL3dybi9jb3JlaXAgDQorDQorSURFX0xJQlJBUklFUyA9IA0KK2VuZGlmDQorDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM0NDBkaWFiKQ0KK1ZYX0NQVV9GQU1JTFkgPSBwcGMNCitDUFUgPSBQUEM0NDANCitUT09MX0ZBTUlMWSA9IGRpYWINCitUT09MID0gZGlhYg0KK1RPT0xfUEFUSCA9IA0KK0NDX0FSQ0hfU1BFQyA9IC10UFBDNDQwRkg6dnh3b3JrczYzDQorTElCUEFUSCA9IA0KK0xJQlMgPSANCisNCitJREVfSU5DTFVERVMgPSAtSSQoV0lORF9CQVNFKS90YXJnZXQvaCAtSSQoV0lORF9CQVNFKS90YXJnZXQvaC93cm4vY29yZWlwIA0KKw0KK0lERV9MSUJSQVJJRVMgPSANCitlbmRpZg0KKw0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNDQwZ251KQ0KK1ZYX0NQVV9GQU1JTFkgPSBwcGMNCitDUFUgPSBQUEM0NDANCitUT09MX0ZBTUlMWSA9IGdudQ0KK1RPT0wgPSBnbnUNCitUT09MX1BBVEggPSANCitDQ19BUkNIX1NQRUMgPSAtbWNwdT00NDAgLW1zdHJpY3QtYWxpZ24gLW1zb2Z0LWZsb2F0DQorTElCUEFUSCA9IA0KK0xJQlMgPSANCisNCitJREVfSU5DTFVERVMgPSAtSSQoV0lORF9CQVNFKS90YXJnZXQvaCAtSSQoV0lORF9CQVNFKS90YXJnZXQvaC93cm4vY29yZWlwIA0KKw0KK0lERV9MSUJSQVJJRVMgPSANCitlbmRpZg0KKw0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNDQwc2ZkaWFiKQ0KK1ZYX0NQVV9GQU1JTFkgPSBwcGMNCitDUFUgPSBQUEM0NDANCitUT09MX0ZBTUlMWSA9IGRpYWINCitUT09MID0gc2ZkaWFiDQorVE9PTF9QQVRIID0gDQorQ0NfQVJDSF9TUEVDID0gLXRQUEM0NDBGUzp2eHdvcmtzNjMNCitMSUJQQVRIID0gDQorTElCUyA9IA0KKw0KK0lERV9JTkNMVURFUyA9IC1JJChXSU5EX0JBU0UpL3RhcmdldC9oIC1JJChXSU5EX0JBU0UpL3RhcmdldC9oL3dybi9jb3JlaXAgDQorDQorSURFX0xJQlJBUklFUyA9IA0KK2VuZGlmDQorDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM0NDBzZmdudSkNCitWWF9DUFVfRkFNSUxZID0gcHBjDQorQ1BVID0gUFBDNDQwDQorVE9PTF9GQU1JTFkgPSBnbnUNCitUT09MID0gc2ZnbnUNCitUT09MX1BBVEggPSANCitDQ19BUkNIX1NQRUMgPSAtbWNwdT00NDAgLW1zdHJpY3QtYWxpZ24gLW1zb2Z0LWZsb2F0DQorTElCUEFUSCA9IA0KK0xJQlMgPSANCisNCitJREVfSU5DTFVERVMgPSAtSSQoV0lORF9CQVNFKS90YXJnZXQvaCAtSSQoV0lORF9CQVNFKS90YXJnZXQvaC93cm4vY29yZWlwIA0KKw0KK0lERV9MSUJSQVJJRVMgPSANCitlbmRpZg0KKw0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNjAzZGlhYikNCitWWF9DUFVfRkFNSUxZID0gcHBjDQorQ1BVID0gUFBDNjAzDQorVE9PTF9GQU1JTFkgPSBkaWFiDQorVE9PTCA9IGRpYWINCitUT09MX1BBVEggPSANCitDQ19BUkNIX1NQRUMgPSAtdFBQQzYwM0ZIOnZ4d29ya3M2Mw0KK0xJQlBBVEggPSANCitMSUJTID0gDQorDQorSURFX0lOQ0xVREVTID0gLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2ggLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2gvd3JuL2NvcmVpcCANCisNCitJREVfTElCUkFSSUVTID0gDQorZW5kaWYNCisNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzYwM2dudSkNCitWWF9DUFVfRkFNSUxZID0gcHBjDQorQ1BVID0gUFBDNjAzDQorVE9PTF9GQU1JTFkgPSBnbnUNCitUT09MID0gZ251DQorVE9PTF9QQVRIID0gDQorQ0NfQVJDSF9TUEVDID0gLW1jcHU9NjAzIC1tc3RyaWN0LWFsaWduIC1tbm8taW1wbGljaXQtZnAgLW1sb25nY2FsbA0KK0xJQlBBVEggPSANCitMSUJTID0gDQorDQorSURFX0lOQ0xVREVTID0gLUkuLiAtSSQoV0lORF9CQVNFKS90YXJnZXQvaCAtSSQoV0lORF9CQVNFKS90YXJnZXQvaC93cm4vY29yZWlwIA0KKw0KK0lERV9MSUJSQVJJRVMgPSANCitlbmRpZg0KKw0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNjA0ZGlhYikNCitWWF9DUFVfRkFNSUxZID0gcHBjDQorQ1BVID0gUFBDNjA0DQorVE9PTF9GQU1JTFkgPSBkaWFiDQorVE9PTCA9IGRpYWINCitUT09MX1BBVEggPSANCitDQ19BUkNIX1NQRUMgPSAtdFBQQzYwNEZIOnZ4d29ya3M2Mw0KK0xJQlBBVEggPSANCitMSUJTID0gDQorDQorSURFX0lOQ0xVREVTID0gLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2ggLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2gvd3JuL2NvcmVpcCANCisNCitJREVfTElCUkFSSUVTID0gDQorZW5kaWYNCisNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzYwNGdudSkNCitWWF9DUFVfRkFNSUxZID0gcHBjDQorQ1BVID0gUFBDNjA0DQorVE9PTF9GQU1JTFkgPSBnbnUNCitUT09MID0gZ251DQorVE9PTF9QQVRIID0gDQorQ0NfQVJDSF9TUEVDID0gLW1jcHU9NjA0IC1tc3RyaWN0LWFsaWduIC1tbm8taW1wbGljaXQtZnANCitMSUJQQVRIID0gDQorTElCUyA9IA0KKw0KK0lERV9JTkNMVURFUyA9IC1JJChXSU5EX0JBU0UpL3RhcmdldC9oIC1JJChXSU5EX0JBU0UpL3RhcmdldC9oL3dybi9jb3JlaXAgDQorDQorSURFX0xJQlJBUklFUyA9IA0KK2VuZGlmDQorDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM4NVhYZGlhYikNCitWWF9DUFVfRkFNSUxZID0gcHBjDQorQ1BVID0gUFBDODVYWA0KK1RPT0xfRkFNSUxZID0gZGlhYg0KK1RPT0wgPSBkaWFiDQorVE9PTF9QQVRIID0gDQorQ0NfQVJDSF9TUEVDID0gLXRQUENFNTAwRlM6dnh3b3JrczYzDQorTElCUEFUSCA9IA0KK0xJQlMgPSANCisNCitJREVfSU5DTFVERVMgPSAtSSQoV0lORF9CQVNFKS90YXJnZXQvaCAtSSQoV0lORF9CQVNFKS90YXJnZXQvaC93cm4vY29yZWlwIA0KKw0KK0lERV9MSUJSQVJJRVMgPSANCitlbmRpZg0KKw0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDODVYWGdudSkNCitWWF9DUFVfRkFNSUxZID0gcHBjDQorQ1BVID0gUFBDODVYWA0KK1RPT0xfRkFNSUxZID0gZ251DQorVE9PTCA9IGdudQ0KK1RPT0xfUEFUSCA9IA0KK0NDX0FSQ0hfU1BFQyA9IC1tY3B1PTg1NDAgLW1zdHJpY3QtYWxpZ24gLW1zb2Z0LWZsb2F0IC1tYWJpPW5vLXNwZQ0KK0xJQlBBVEggPSANCitMSUJTID0gDQorDQorSURFX0lOQ0xVREVTID0gLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2ggLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2gvd3JuL2NvcmVpcCANCisNCitJREVfTElCUkFSSUVTID0gDQorZW5kaWYNCisNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzg1WFhzZmRpYWIpDQorVlhfQ1BVX0ZBTUlMWSA9IHBwYw0KK0NQVSA9IFBQQzg1WFgNCitUT09MX0ZBTUlMWSA9IGRpYWINCitUT09MID0gc2ZkaWFiDQorVE9PTF9QQVRIID0gDQorQ0NfQVJDSF9TUEVDID0gLXRQUENFNTAwRlM6dnh3b3JrczYzDQorTElCUEFUSCA9IA0KK0xJQlMgPSANCisNCitJREVfSU5DTFVERVMgPSAtSSQoV0lORF9CQVNFKS90YXJnZXQvaCAtSSQoV0lORF9CQVNFKS90YXJnZXQvaC93cm4vY29yZWlwIA0KKw0KK0lERV9MSUJSQVJJRVMgPSANCitlbmRpZg0KKw0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDODVYWHNmZ251KQ0KK1ZYX0NQVV9GQU1JTFkgPSBwcGMNCitDUFUgPSBQUEM4NVhYDQorVE9PTF9GQU1JTFkgPSBnbnUNCitUT09MID0gc2ZnbnUNCitUT09MX1BBVEggPSANCitDQ19BUkNIX1NQRUMgPSAtbWNwdT04NTQwIC1tc3RyaWN0LWFsaWduIC1tc29mdC1mbG9hdCAtbWFiaT1uby1zcGUNCitMSUJQQVRIID0gDQorTElCUyA9IA0KKw0KK0lERV9JTkNMVURFUyA9IC1JJChXSU5EX0JBU0UpL3RhcmdldC9oIC1JJChXSU5EX0JBU0UpL3RhcmdldC9oL3dybi9jb3JlaXAgDQorDQorSURFX0xJQlJBUklFUyA9IA0KK2VuZGlmDQorDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM4NjBzZmRpYWIpDQorVlhfQ1BVX0ZBTUlMWSA9IHBwYw0KK0NQVSA9IFBQQzg2MA0KK1RPT0xfRkFNSUxZID0gZGlhYg0KK1RPT0wgPSBzZmRpYWINCitUT09MX1BBVEggPSANCitDQ19BUkNIX1NQRUMgPSAtdFBQQzg2MEZTOnZ4d29ya3M2Mw0KK0xJQlBBVEggPSANCitMSUJTID0gDQorDQorSURFX0lOQ0xVREVTID0gLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2ggLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2gvd3JuL2NvcmVpcCANCisNCitJREVfTElCUkFSSUVTID0gDQorZW5kaWYNCisNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzg2MHNmZ251KQ0KK1ZYX0NQVV9GQU1JTFkgPSBwcGMNCitDUFUgPSBQUEM4NjANCitUT09MX0ZBTUlMWSA9IGdudQ0KK1RPT0wgPSBzZmdudQ0KK1RPT0xfUEFUSCA9IA0KK0NDX0FSQ0hfU1BFQyA9IC1tY3B1PTg2MCAtbXN0cmljdC1hbGlnbiAtbXNvZnQtZmxvYXQNCitMSUJQQVRIID0gDQorTElCUyA9IA0KKw0KK0lERV9JTkNMVURFUyA9IC1JJChXSU5EX0JBU0UpL3RhcmdldC9oIC1JJChXSU5EX0JBU0UpL3RhcmdldC9oL3dybi9jb3JlaXAgDQorDQorSURFX0xJQlJBUklFUyA9IA0KK2VuZGlmDQorDQoraWZlcSAoJChCVUlMRF9TUEVDKSxTSU1MSU5VWGRpYWIpDQorVlhfQ1BVX0ZBTUlMWSA9IHNpbWxpbnV4DQorQ1BVID0gU0lNTElOVVgNCitUT09MX0ZBTUlMWSA9IGRpYWINCitUT09MID0gZGlhYg0KK1RPT0xfUEFUSCA9IA0KK0NDX0FSQ0hfU1BFQyA9IC10WDg2TEg6dnh3b3JrczYzDQorTElCUEFUSCA9IA0KK0xJQlMgPSANCisNCitJREVfSU5DTFVERVMgPSAtSSQoV0lORF9CQVNFKS90YXJnZXQvaCAtSSQoV0lORF9CQVNFKS90YXJnZXQvaC93cm4vY29yZWlwIA0KKw0KK0lERV9MSUJSQVJJRVMgPSANCitlbmRpZg0KKw0KK2lmZXEgKCQoQlVJTERfU1BFQyksU0lNTElOVVhnbnUpDQorVlhfQ1BVX0ZBTUlMWSA9IHNpbWxpbnV4DQorQ1BVID0gU0lNTElOVVgNCitUT09MX0ZBTUlMWSA9IGdudQ0KK1RPT0wgPSBnbnUNCitUT09MX1BBVEggPSANCitDQ19BUkNIX1NQRUMgPSAtbXR1bmU9aTQ4NiAtbWFyY2g9aTQ4Ng0KK0xJQlBBVEggPSANCitMSUJTID0gDQorDQorSURFX0lOQ0xVREVTID0gLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2ggLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2gvd3JuL2NvcmVpcCANCisNCitJREVfTElCUkFSSUVTID0gDQorZW5kaWYNCisNCitpZmVxICgkKEJVSUxEX1NQRUMpLFNJTU5UZGlhYikNCitWWF9DUFVfRkFNSUxZID0gc2ltcGMNCitDUFUgPSBTSU1OVA0KK1RPT0xfRkFNSUxZID0gZGlhYg0KK1RPT0wgPSBkaWFiDQorVE9PTF9QQVRIID0gDQorQ0NfQVJDSF9TUEVDID0gLXRYODZMSDp2eHdvcmtzNjMNCitMSUJQQVRIID0gDQorTElCUyA9IA0KKw0KK0lERV9JTkNMVURFUyA9IC1JJChXSU5EX0JBU0UpL3RhcmdldC9oIC1JJChXSU5EX0JBU0UpL3RhcmdldC9oL3dybi9jb3JlaXAgDQorDQorSURFX0xJQlJBUklFUyA9IA0KK2VuZGlmDQorDQoraWZlcSAoJChCVUlMRF9TUEVDKSxTSU1OVGdudSkNCitWWF9DUFVfRkFNSUxZID0gc2ltcGMNCitDUFUgPSBTSU1OVA0KK1RPT0xfRkFNSUxZID0gZ251DQorVE9PTCA9IGdudQ0KK1RPT0xfUEFUSCA9IA0KK0NDX0FSQ0hfU1BFQyA9IC1tdHVuZT1pNDg2IC1tYXJjaD1pNDg2DQorTElCUEFUSCA9IA0KK0xJQlMgPSANCisNCitJREVfSU5DTFVERVMgPSAtSSQoV0lORF9CQVNFKS90YXJnZXQvaCAtSSQoV0lORF9CQVNFKS90YXJnZXQvaC93cm4vY29yZWlwIA0KKw0KK0lERV9MSUJSQVJJRVMgPSANCitlbmRpZg0KKw0KK2lmZXEgKCQoQlVJTERfU1BFQyksU0lNU1BBUkNTT0xBUklTZGlhYikNCitWWF9DUFVfRkFNSUxZID0gc2ltc28NCitDUFUgPSBTSU1TUEFSQ1NPTEFSSVMNCitUT09MX0ZBTUlMWSA9IGRpYWINCitUT09MID0gZGlhYg0KK1RPT0xfUEFUSCA9IA0KK0NDX0FSQ0hfU1BFQyA9IC10U1BBUkNGSDp2eHdvcmtzNjMNCitMSUJQQVRIID0gDQorTElCUyA9IA0KKw0KK0lERV9JTkNMVURFUyA9IC1JJChXSU5EX0JBU0UpL3RhcmdldC9oIC1JJChXSU5EX0JBU0UpL3RhcmdldC9oL3dybi9jb3JlaXAgDQorDQorSURFX0xJQlJBUklFUyA9IA0KK2VuZGlmDQorDQoraWZlcSAoJChCVUlMRF9TUEVDKSxTSU1TUEFSQ1NPTEFSSVNnbnUpDQorVlhfQ1BVX0ZBTUlMWSA9IHNpbXNvDQorQ1BVID0gU0lNU1BBUkNTT0xBUklTDQorVE9PTF9GQU1JTFkgPSBnbnUNCitUT09MID0gZ251DQorVE9PTF9QQVRIID0gDQorQ0NfQVJDSF9TUEVDID0gDQorTElCUEFUSCA9IA0KK0xJQlMgPSANCisNCitJREVfSU5DTFVERVMgPSAtSSQoV0lORF9CQVNFKS90YXJnZXQvaCAtSSQoV0lORF9CQVNFKS90YXJnZXQvaC93cm4vY29yZWlwIA0KKw0KK0lERV9MSUJSQVJJRVMgPSANCitlbmRpZg0KKw0KKw0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDMzJkaWFiKQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0MtQ29tcGlsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0MtQ29tcGlsZXIgPSAtWE8gLVhzaXplLW9wdA0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuYw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MtQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzMyZ251KQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0MtQ29tcGlsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0MtQ29tcGlsZXIgPSAtTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluDQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgIC1XYWxsICAtTUQgLU1QICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzMyc2ZkaWFiKQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0MtQ29tcGlsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0MtQ29tcGlsZXIgPSAtWE8gLVhzaXplLW9wdA0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuYw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MtQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWHN0c3ctc2xvdyAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzMyc2ZnbnUpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQy1Db21waWxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQy1Db21waWxlciA9IC1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4NCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MtQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNDAzZGlhYikNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19DLUNvbXBpbGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19DLUNvbXBpbGVyID0gLVhPIC1Yc2l6ZS1vcHQNCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0NGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM0MDNnbnUpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQy1Db21waWxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQy1Db21waWxlciA9IC1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4NCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MtQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNDA1ZGlhYikNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19DLUNvbXBpbGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19DLUNvbXBpbGVyID0gLVhPIC1Yc2l6ZS1vcHQNCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0NGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM0MDVnbnUpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQy1Db21waWxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQy1Db21waWxlciA9IC1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4NCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MtQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNDA1c2ZkaWFiKQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0MtQ29tcGlsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0MtQ29tcGlsZXIgPSAtWE8gLVhzaXplLW9wdA0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuYw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MtQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzQwNXNmZ251KQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0MtQ29tcGlsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0MtQ29tcGlsZXIgPSAtTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluDQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgIC1XYWxsICAtTUQgLU1QICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzQ0MGRpYWIpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQy1Db21waWxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQy1Db21waWxlciA9IC1YTyAtWHNpemUtb3B0DQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNDQwZ251KQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0MtQ29tcGlsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0MtQ29tcGlsZXIgPSAtTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluDQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgIC1XYWxsICAtTUQgLU1QICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzQ0MHNmZGlhYikNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19DLUNvbXBpbGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19DLUNvbXBpbGVyID0gLVhPIC1Yc2l6ZS1vcHQNCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0NGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM0NDBzZmdudSkNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19DLUNvbXBpbGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19DLUNvbXBpbGVyID0gLU8yIC1mc3RyZW5ndGgtcmVkdWNlIC1mbm8tYnVpbHRpbg0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuYw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpICAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0NGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM2MDNkaWFiKQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0MtQ29tcGlsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0MtQ29tcGlsZXIgPSAtWE8gLVhzaXplLW9wdA0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuYw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MtQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzYwM2dudSkNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19DLUNvbXBpbGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19DLUNvbXBpbGVyID0gLU8yIC1mc3RyZW5ndGgtcmVkdWNlIC1mbm8tYnVpbHRpbg0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuYw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpICAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0NGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM2MDRkaWFiKQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0MtQ29tcGlsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0MtQ29tcGlsZXIgPSAtWE8gLVhzaXplLW9wdA0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuYw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MtQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzYwNGdudSkNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19DLUNvbXBpbGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19DLUNvbXBpbGVyID0gLU8yIC1mc3RyZW5ndGgtcmVkdWNlIC1mbm8tYnVpbHRpbg0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuYw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpICAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0NGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM4NVhYZGlhYikNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19DLUNvbXBpbGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19DLUNvbXBpbGVyID0gLVhPIC1Yc2l6ZS1vcHQNCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0NGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM4NVhYZ251KQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0MtQ29tcGlsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0MtQ29tcGlsZXIgPSAtTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluDQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgIC1XYWxsICAtTUQgLU1QICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzg1WFhzZmRpYWIpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQy1Db21waWxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQy1Db21waWxlciA9IC1YTyAtWHNpemUtb3B0DQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDODVYWHNmZ251KQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0MtQ29tcGlsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0MtQ29tcGlsZXIgPSAtTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluDQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgIC1XYWxsICAtTUQgLU1QICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzg2MHNmZGlhYikNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19DLUNvbXBpbGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19DLUNvbXBpbGVyID0gLVhPIC1Yc2l6ZS1vcHQNCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0NGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM4NjBzZmdudSkNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19DLUNvbXBpbGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19DLUNvbXBpbGVyID0gLU8yIC1mc3RyZW5ndGgtcmVkdWNlIC1mbm8tYnVpbHRpbg0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuYw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpICAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0NGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxTSU1MSU5VWGRpYWIpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQy1Db21waWxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQy1Db21waWxlciA9IC1YTyAtWHNpemUtb3B0DQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksU0lNTElOVVhnbnUpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQy1Db21waWxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQy1Db21waWxlciA9IC1PMiAtbm9zdGRsaWIgLWZuby1idWlsdGluIC1mbm8tZGVmZXItcG9wDQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcGVudGl1bSAkKERFQlVHRkxBR1NfQy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpICAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0NGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxTSU1OVGRpYWIpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQy1Db21waWxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQy1Db21waWxlciA9IC1YTyAtWHNpemUtb3B0DQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksU0lNTlRnbnUpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQy1Db21waWxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQy1Db21waWxlciA9IC1PMiAtbm9zdGRsaWIgLWZuby1idWlsdGluIC1mbm8tZGVmZXItcG9wDQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcGVudGl1bSAkKERFQlVHRkxBR1NfQy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpICAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0NGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxTSU1TUEFSQ1NPTEFSSVNkaWFiKQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0MtQ29tcGlsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0MtQ29tcGlsZXIgPSAtWE8gLVhzaXplLW9wdA0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuYw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MtQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFNJTVNQQVJDU09MQVJJU2dudSkNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19DLUNvbXBpbGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19DLUNvbXBpbGVyID0gLU8yIC1mc3RyZW5ndGgtcmVkdWNlIC1mbm8tYnVpbHRpbg0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuYw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3NwYXJjICQoREVCVUdGTEFHU19DLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgIC1XYWxsICAtTUQgLU1QICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzMyZGlhYikNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19DKystQ29tcGlsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0MrKy1Db21waWxlciA9IC1YTyAtWHNpemUtb3B0DQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jcHANCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5DDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY3h4DQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY2MNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDMzJnbnUpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQysrLUNvbXBpbGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19DKystQ29tcGlsZXIgPSAtTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluDQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jcHANCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5DDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY3h4DQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY2MNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDMzJzZmRpYWIpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQysrLUNvbXBpbGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19DKystQ29tcGlsZXIgPSAtWE8gLVhzaXplLW9wdA0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY3BwDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhzdHN3LXNsb3cgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuQw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1Yc3Rzdy1zbG93IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmN4eA0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1Yc3Rzdy1zbG93IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmNjDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhzdHN3LXNsb3cgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzMyc2ZnbnUpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQysrLUNvbXBpbGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19DKystQ29tcGlsZXIgPSAtTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluDQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jcHANCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5DDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY3h4DQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY2MNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNDAzZGlhYikNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19DKystQ29tcGlsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0MrKy1Db21waWxlciA9IC1YTyAtWHNpemUtb3B0DQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jcHANCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5DDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY3h4DQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY2MNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNDAzZ251KQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0MrKy1Db21waWxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQysrLUNvbXBpbGVyID0gLU8yIC1mc3RyZW5ndGgtcmVkdWNlIC1mbm8tYnVpbHRpbg0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY3BwDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuQw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmN4eA0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmNjDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzQwNWRpYWIpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQysrLUNvbXBpbGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19DKystQ29tcGlsZXIgPSAtWE8gLVhzaXplLW9wdA0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY3BwDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuQw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmN4eA0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmNjDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzQwNWdudSkNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19DKystQ29tcGlsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0MrKy1Db21waWxlciA9IC1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4NCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmNwcA0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLkMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jeHgNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jYw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM0MDVzZmRpYWIpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQysrLUNvbXBpbGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19DKystQ29tcGlsZXIgPSAtWE8gLVhzaXplLW9wdA0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY3BwDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuQw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmN4eA0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmNjDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzQwNXNmZ251KQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0MrKy1Db21waWxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQysrLUNvbXBpbGVyID0gLU8yIC1mc3RyZW5ndGgtcmVkdWNlIC1mbm8tYnVpbHRpbg0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY3BwDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuQw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmN4eA0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmNjDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzQ0MGRpYWIpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQysrLUNvbXBpbGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19DKystQ29tcGlsZXIgPSAtWE8gLVhzaXplLW9wdA0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY3BwDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuQw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmN4eA0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmNjDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzQ0MGdudSkNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19DKystQ29tcGlsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0MrKy1Db21waWxlciA9IC1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4NCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmNwcA0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLkMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jeHgNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jYw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM0NDBzZmRpYWIpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQysrLUNvbXBpbGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19DKystQ29tcGlsZXIgPSAtWE8gLVhzaXplLW9wdA0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY3BwDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuQw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmN4eA0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmNjDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzQ0MHNmZ251KQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0MrKy1Db21waWxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQysrLUNvbXBpbGVyID0gLU8yIC1mc3RyZW5ndGgtcmVkdWNlIC1mbm8tYnVpbHRpbg0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY3BwDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuQw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmN4eA0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmNjDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzYwM2RpYWIpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQysrLUNvbXBpbGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19DKystQ29tcGlsZXIgPSAtWE8gLVhzaXplLW9wdA0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY3BwDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuQw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmN4eA0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmNjDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzYwM2dudSkNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19DKystQ29tcGlsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0MrKy1Db21waWxlciA9IC1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4NCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmNwcA0KKwkkKFRSQUNFX0ZMQUcpICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAtRCdTVk5fUkVWPSIkKHNoZWxsIHN2bnZlcnNpb24gLW4gLi4pIicgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5DDQorCSQoVFJBQ0VfRkxBRykgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMIC1EJ1NWTl9SRVY9IiQoc2hlbGwgc3ZudmVyc2lvbiAtbiAuLikiJyAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmN4eA0KKwkkKFRSQUNFX0ZMQUcpICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAtRCdTVk5fUkVWPSIkKHNoZWxsIHN2bnZlcnNpb24gLW4gLi4pIicgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jYw0KKwkkKFRSQUNFX0ZMQUcpICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAtRCdTVk5fUkVWPSIkKHNoZWxsIHN2bnZlcnNpb24gLW4gLi4pIicgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNjA0ZGlhYikNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19DKystQ29tcGlsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0MrKy1Db21waWxlciA9IC1YTyAtWHNpemUtb3B0DQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jcHANCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5DDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY3h4DQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY2MNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNjA0Z251KQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0MrKy1Db21waWxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQysrLUNvbXBpbGVyID0gLU8yIC1mc3RyZW5ndGgtcmVkdWNlIC1mbm8tYnVpbHRpbg0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY3BwDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuQw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmN4eA0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmNjDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzg1WFhkaWFiKQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0MrKy1Db21waWxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQysrLUNvbXBpbGVyID0gLVhPIC1Yc2l6ZS1vcHQNCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmNwcA0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLkMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jeHgNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jYw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM4NVhYZ251KQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0MrKy1Db21waWxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQysrLUNvbXBpbGVyID0gLU8yIC1mc3RyZW5ndGgtcmVkdWNlIC1mbm8tYnVpbHRpbg0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY3BwDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuQw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmN4eA0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmNjDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzg1WFhzZmRpYWIpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQysrLUNvbXBpbGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19DKystQ29tcGlsZXIgPSAtWE8gLVhzaXplLW9wdA0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY3BwDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuQw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmN4eA0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmNjDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzg1WFhzZmdudSkNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19DKystQ29tcGlsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0MrKy1Db21waWxlciA9IC1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4NCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmNwcA0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLkMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jeHgNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jYw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM4NjBzZmRpYWIpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQysrLUNvbXBpbGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19DKystQ29tcGlsZXIgPSAtWE8gLVhzaXplLW9wdA0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY3BwDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuQw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmN4eA0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmNjDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzg2MHNmZ251KQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0MrKy1Db21waWxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQysrLUNvbXBpbGVyID0gLU8yIC1mc3RyZW5ndGgtcmVkdWNlIC1mbm8tYnVpbHRpbg0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY3BwDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuQw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmN4eA0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmNjDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFNJTUxJTlVYZGlhYikNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19DKystQ29tcGlsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0MrKy1Db21waWxlciA9IC1YTyAtWHNpemUtb3B0DQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jcHANCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5DDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY3h4DQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY2MNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksU0lNTElOVVhnbnUpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQysrLUNvbXBpbGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19DKystQ29tcGlsZXIgPSAtTzIgLW5vc3RkbGliIC1mbm8tYnVpbHRpbiAtZm5vLWRlZmVyLXBvcA0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY3BwDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcGVudGl1bSAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLkMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwZW50aXVtICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY3h4DQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcGVudGl1bSAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmNjDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcGVudGl1bSAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxTSU1OVGRpYWIpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQysrLUNvbXBpbGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19DKystQ29tcGlsZXIgPSAtWE8gLVhzaXplLW9wdA0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY3BwDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuQw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmN4eA0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmNjDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFNJTU5UZ251KQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0MrKy1Db21waWxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQysrLUNvbXBpbGVyID0gLU8yIC1ub3N0ZGxpYiAtZm5vLWJ1aWx0aW4gLWZuby1kZWZlci1wb3ANCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmNwcA0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BlbnRpdW0gJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5DDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcGVudGl1bSAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmN4eA0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BlbnRpdW0gJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jYw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BlbnRpdW0gJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksU0lNU1BBUkNTT0xBUklTZGlhYikNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19DKystQ29tcGlsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0MrKy1Db21waWxlciA9IC1YTyAtWHNpemUtb3B0DQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jcHANCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5DDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY3h4DQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY2MNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksU0lNU1BBUkNTT0xBUklTZ251KQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0MrKy1Db21waWxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQysrLUNvbXBpbGVyID0gLU8yIC1mc3RyZW5ndGgtcmVkdWNlIC1mbm8tYnVpbHRpbg0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY3BwDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjc3BhcmMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5DDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjc3BhcmMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jeHgNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NzcGFyYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmNjDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjc3BhcmMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDMzJkaWFiKQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0Fzc2VtYmxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQXNzZW1ibGVyID0gLVhPIC1Yc2l6ZS1vcHQNCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLnMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19Bc3NlbWJsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWHByZXByb2Nlc3MtYXNzZW1ibHkgLVhjcHAtbm8tc3BhY2UgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0NGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEMzMmdudSkNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19Bc3NlbWJsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0Fzc2VtYmxlciA9IC1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4NCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLnMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0Fzc2VtYmxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpICAgLXhhc3NlbWJsZXItd2l0aC1jcHAgLU1EIC1NUCAkKEFEREVEX0NGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEMzMnNmZGlhYikNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19Bc3NlbWJsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0Fzc2VtYmxlciA9IC1YTyAtWHNpemUtb3B0DQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5zDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQXNzZW1ibGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhzdHN3LXNsb3cgLVhwcmVwcm9jZXNzLWFzc2VtYmx5IC1YY3BwLW5vLXNwYWNlICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDMzJzZmdudSkNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19Bc3NlbWJsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0Fzc2VtYmxlciA9IC1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4NCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLnMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0Fzc2VtYmxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpICAgLXhhc3NlbWJsZXItd2l0aC1jcHAgLU1EIC1NUCAkKEFEREVEX0NGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM0MDNkaWFiKQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0Fzc2VtYmxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQXNzZW1ibGVyID0gLVhPIC1Yc2l6ZS1vcHQNCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLnMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19Bc3NlbWJsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWHByZXByb2Nlc3MtYXNzZW1ibHkgLVhjcHAtbm8tc3BhY2UgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0NGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM0MDNnbnUpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQXNzZW1ibGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19Bc3NlbWJsZXIgPSAtTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluDQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5zDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19Bc3NlbWJsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAgIC14YXNzZW1ibGVyLXdpdGgtY3BwIC1NRCAtTVAgJChBRERFRF9DRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNDA1ZGlhYikNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19Bc3NlbWJsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0Fzc2VtYmxlciA9IC1YTyAtWHNpemUtb3B0DQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5zDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQXNzZW1ibGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhwcmVwcm9jZXNzLWFzc2VtYmx5IC1YY3BwLW5vLXNwYWNlICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNDA1Z251KQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0Fzc2VtYmxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQXNzZW1ibGVyID0gLU8yIC1mc3RyZW5ndGgtcmVkdWNlIC1mbm8tYnVpbHRpbg0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUucw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQXNzZW1ibGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgICAteGFzc2VtYmxlci13aXRoLWNwcCAtTUQgLU1QICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzQwNXNmZGlhYikNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19Bc3NlbWJsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0Fzc2VtYmxlciA9IC1YTyAtWHNpemUtb3B0DQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5zDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQXNzZW1ibGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhwcmVwcm9jZXNzLWFzc2VtYmx5IC1YY3BwLW5vLXNwYWNlICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNDA1c2ZnbnUpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQXNzZW1ibGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19Bc3NlbWJsZXIgPSAtTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluDQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5zDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19Bc3NlbWJsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAgIC14YXNzZW1ibGVyLXdpdGgtY3BwIC1NRCAtTVAgJChBRERFRF9DRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNDQwZGlhYikNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19Bc3NlbWJsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0Fzc2VtYmxlciA9IC1YTyAtWHNpemUtb3B0DQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5zDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQXNzZW1ibGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhwcmVwcm9jZXNzLWFzc2VtYmx5IC1YY3BwLW5vLXNwYWNlICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNDQwZ251KQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0Fzc2VtYmxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQXNzZW1ibGVyID0gLU8yIC1mc3RyZW5ndGgtcmVkdWNlIC1mbm8tYnVpbHRpbg0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUucw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQXNzZW1ibGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgICAteGFzc2VtYmxlci13aXRoLWNwcCAtTUQgLU1QICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzQ0MHNmZGlhYikNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19Bc3NlbWJsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0Fzc2VtYmxlciA9IC1YTyAtWHNpemUtb3B0DQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5zDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQXNzZW1ibGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhwcmVwcm9jZXNzLWFzc2VtYmx5IC1YY3BwLW5vLXNwYWNlICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNDQwc2ZnbnUpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQXNzZW1ibGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19Bc3NlbWJsZXIgPSAtTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluDQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5zDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19Bc3NlbWJsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAgIC14YXNzZW1ibGVyLXdpdGgtY3BwIC1NRCAtTVAgJChBRERFRF9DRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNjAzZGlhYikNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19Bc3NlbWJsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0Fzc2VtYmxlciA9IC1YTyAtWHNpemUtb3B0DQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5zDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQXNzZW1ibGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhwcmVwcm9jZXNzLWFzc2VtYmx5IC1YY3BwLW5vLXNwYWNlICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNjAzZ251KQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0Fzc2VtYmxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQXNzZW1ibGVyID0gLU8yIC1mc3RyZW5ndGgtcmVkdWNlIC1mbm8tYnVpbHRpbg0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUucw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQXNzZW1ibGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgICAteGFzc2VtYmxlci13aXRoLWNwcCAtTUQgLU1QICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzYwNGRpYWIpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQXNzZW1ibGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19Bc3NlbWJsZXIgPSAtWE8gLVhzaXplLW9wdA0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUucw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0Fzc2VtYmxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YcHJlcHJvY2Vzcy1hc3NlbWJseSAtWGNwcC1uby1zcGFjZSAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzYwNGdudSkNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19Bc3NlbWJsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0Fzc2VtYmxlciA9IC1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4NCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLnMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0Fzc2VtYmxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpICAgLXhhc3NlbWJsZXItd2l0aC1jcHAgLU1EIC1NUCAkKEFEREVEX0NGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM4NVhYZGlhYikNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19Bc3NlbWJsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0Fzc2VtYmxlciA9IC1YTyAtWHNpemUtb3B0DQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5zDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQXNzZW1ibGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhwcmVwcm9jZXNzLWFzc2VtYmx5IC1YY3BwLW5vLXNwYWNlICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDODVYWGdudSkNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19Bc3NlbWJsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0Fzc2VtYmxlciA9IC1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4NCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLnMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0Fzc2VtYmxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpICAgLXhhc3NlbWJsZXItd2l0aC1jcHAgLU1EIC1NUCAkKEFEREVEX0NGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM4NVhYc2ZkaWFiKQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0Fzc2VtYmxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQXNzZW1ibGVyID0gLVhPIC1Yc2l6ZS1vcHQNCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLnMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19Bc3NlbWJsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWHByZXByb2Nlc3MtYXNzZW1ibHkgLVhjcHAtbm8tc3BhY2UgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0NGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM4NVhYc2ZnbnUpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQXNzZW1ibGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19Bc3NlbWJsZXIgPSAtTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluDQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5zDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19Bc3NlbWJsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAgIC14YXNzZW1ibGVyLXdpdGgtY3BwIC1NRCAtTVAgJChBRERFRF9DRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDODYwc2ZkaWFiKQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0Fzc2VtYmxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQXNzZW1ibGVyID0gLVhPIC1Yc2l6ZS1vcHQNCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLnMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19Bc3NlbWJsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWHByZXByb2Nlc3MtYXNzZW1ibHkgLVhjcHAtbm8tc3BhY2UgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0NGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM4NjBzZmdudSkNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19Bc3NlbWJsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0Fzc2VtYmxlciA9IC1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4NCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLnMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0Fzc2VtYmxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpICAgLXhhc3NlbWJsZXItd2l0aC1jcHAgLU1EIC1NUCAkKEFEREVEX0NGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxTSU1MSU5VWGRpYWIpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQXNzZW1ibGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19Bc3NlbWJsZXIgPSAtWE8gLVhzaXplLW9wdA0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUucw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0Fzc2VtYmxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YcHJlcHJvY2Vzcy1hc3NlbWJseSAtWGNwcC1uby1zcGFjZSAtV2EsLVhtbmVtLW1pdCAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksU0lNTElOVVhnbnUpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQXNzZW1ibGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19Bc3NlbWJsZXIgPSAtTzIgLW5vc3RkbGliIC1mbm8tYnVpbHRpbiAtZm5vLWRlZmVyLXBvcA0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUucw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BlbnRpdW0gJChERUJVR0ZMQUdTX0Fzc2VtYmxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpICAgLXhhc3NlbWJsZXItd2l0aC1jcHAgLU1EIC1NUCAkKEFEREVEX0NGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxTSU1OVGRpYWIpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQXNzZW1ibGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19Bc3NlbWJsZXIgPSAtWE8gLVhzaXplLW9wdA0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUucw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0Fzc2VtYmxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YcHJlcHJvY2Vzcy1hc3NlbWJseSAtWGNwcC1uby1zcGFjZSAtV2EsLVhtbmVtLW1pdCAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksU0lNTlRnbnUpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQXNzZW1ibGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19Bc3NlbWJsZXIgPSAtTzIgLW5vc3RkbGliIC1mbm8tYnVpbHRpbiAtZm5vLWRlZmVyLXBvcA0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUucw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BlbnRpdW0gJChERUJVR0ZMQUdTX0Fzc2VtYmxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpICAgLXhhc3NlbWJsZXItd2l0aC1jcHAgLU1EIC1NUCAkKEFEREVEX0NGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxTSU1TUEFSQ1NPTEFSSVNkaWFiKQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0Fzc2VtYmxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQXNzZW1ibGVyID0gLVhPIC1Yc2l6ZS1vcHQNCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLnMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19Bc3NlbWJsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWHByZXByb2Nlc3MtYXNzZW1ibHkgLVhjcHAtbm8tc3BhY2UgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0NGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxTSU1TUEFSQ1NPTEFSSVNnbnUpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQXNzZW1ibGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19Bc3NlbWJsZXIgPSAtTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluDQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5zDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjc3BhcmMgJChERUJVR0ZMQUdTX0Fzc2VtYmxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpICAgLXhhc3NlbWJsZXItd2l0aC1jcHAgLU1EIC1NUCAkKEFEREVEX0NGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQorDQorDQorDQorDQorDQorLWluY2x1ZGUgJChQUkpfUk9PVF9ESVIpLyoubWFrZWZpbGUNCisNCistaW5jbHVkZSAqLm1ha2VmaWxlDQorDQorbWFpbl9hbGwgOiBleHRlcm5hbF9idWlsZCAkKFBST0pFQ1RfVEFSR0VUUykNCisJQGVjaG8gIm1ha2U6IGJ1aWx0IHRhcmdldHMgb2YgYHB3ZGAiDQorDQorIyBlbnRyeSBwb2ludCBmb3IgZXh0ZW5kaW5nIHRoZSBidWlsZA0KK2V4dGVybmFsX2J1aWxkIDo6DQorCUBlY2hvICIiDQorDQorIyBtYWluIGVudHJ5IHBvaW50IGZvciBwcmUgcHJvY2Vzc2luZyBwcmlvciB0byB0aGUgYnVpbGQNCitwcmVfYnVpbGQgOjogJChQUkVfQlVJTERfU1RFUCkgZ2VuZXJhdGVfc291cmNlcw0KKwlAZWNobyAiIg0KKw0KKyMgZW50cnkgcG9pbnQgZm9yIGdlbmVyYXRpbmcgc291cmNlcyBwcmlvciB0byB0aGUgYnVpbGQNCitnZW5lcmF0ZV9zb3VyY2VzIDo6DQorCUBlY2hvICIiDQorDQorIyBtYWluIGVudHJ5IHBvaW50IGZvciBwb3N0IHByb2Nlc3NpbmcgYWZ0ZXIgdGhlIGJ1aWxkDQorcG9zdF9idWlsZCA6OiAkKFBPU1RfQlVJTERfU1RFUCkgZGVwbG95X291dHB1dA0KKwlAZWNobyAiIg0KKw0KKyMgZW50cnkgcG9pbnQgZm9yIGRlcGxveWluZyBvdXRwdXQgYWZ0ZXIgdGhlIGJ1aWxkDQorZGVwbG95X291dHB1dCA6Og0KKwlAZWNobyAiIg0KKw0KK2NsZWFuIDo6IGV4dGVybmFsX2NsZWFuICQoQ0xFQU5fU1RFUCkgX2NsZWFuDQorDQorIyBlbnRyeSBwb2ludCBmb3IgZXh0ZW5kaW5nIHRoZSBidWlsZCBjbGVhbg0KK2V4dGVybmFsX2NsZWFuIDo6DQorCUBlY2hvICIiDQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvLnNldHRpbmdzL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLnByZWZzIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvLnNldHRpbmdzL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLnByZWZzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmYzU2OGMKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcucHJlZnMKQEAgLTAsMCArMSwzIEBACisjVHVlIFNlcCAxNCAxNzoxNzozOSBFRFQgMjAxMA0KK2VjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xDQorb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcuZW5hYmxlLnByb2plY3QucmVmYWN0b3JpbmcuaGlzdG9yeT1mYWxzZQ0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliLy53cm1ha2VmaWxlIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvLndybWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTFkZDdmOAotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliLy53cm1ha2VmaWxlCkBAIC0wLDAgKzEsNDggQEAKKyMgVGhlIGZpbGUgIi53cm1ha2VmaWxlIiBpcyB0aGUgdGVtcGxhdGUgdXNlZCBieSB0aGUgV2luZCBSaXZlciBXb3JrYmVuY2ggdG8NCisjIGdlbmVyYXRlIHRoZSBtYWtlZmlsZXMgb2YgdGhpcyBwcm9qZWN0LiBBZGQgdXNlci1zcGVjaWZpYyBidWlsZCB0YXJnZXRzIGFuZA0KKyMgbWFrZSBydWxlcyBvbmx5KCEpIGluIHRoaXMgcHJvamVjdCdzICIud3JtYWtlZmlsZSIgZmlsZS4gVGhlc2Ugd2lsbCB0aGVuIGJlDQorIyBhdXRvbWF0aWNhbGx5IGR1bXBlZCBpbnRvIHRoZSBtYWtlZmlsZXMuDQorDQorV0lORF9IT01FIDo9ICQoc3Vic3QgXCwvLCQoV0lORF9IT01FKSkNCitXSU5EX0JBU0UgOj0gJChzdWJzdCBcLC8sJChXSU5EX0JBU0UpKQ0KK1dJTkRfVVNSIDo9ICQoc3Vic3QgXCwvLCQoV0lORF9VU1IpKQ0KKw0KK2FsbCA6IHByZV9idWlsZCBtYWluX2FsbCBwb3N0X2J1aWxkDQorDQorX2NsZWFuIDo6DQorCUBlY2hvICJtYWtlOiByZW1vdmluZyB0YXJnZXRzIGFuZCBvYmplY3RzIG9mIGBwd2RgIg0KKw0KKyVJREVfR0VORVJBVEVEJQ0KKw0KKy1pbmNsdWRlICQoUFJKX1JPT1RfRElSKS8qLm1ha2VmaWxlDQorDQorLWluY2x1ZGUgKi5tYWtlZmlsZQ0KKw0KK21haW5fYWxsIDogZXh0ZXJuYWxfYnVpbGQgJChQUk9KRUNUX1RBUkdFVFMpDQorCUBlY2hvICJtYWtlOiBidWlsdCB0YXJnZXRzIG9mIGBwd2RgIg0KKw0KKyMgZW50cnkgcG9pbnQgZm9yIGV4dGVuZGluZyB0aGUgYnVpbGQNCitleHRlcm5hbF9idWlsZCA6Og0KKwlAZWNobyAiIg0KKw0KKyMgbWFpbiBlbnRyeSBwb2ludCBmb3IgcHJlIHByb2Nlc3NpbmcgcHJpb3IgdG8gdGhlIGJ1aWxkDQorcHJlX2J1aWxkIDo6ICQoUFJFX0JVSUxEX1NURVApIGdlbmVyYXRlX3NvdXJjZXMNCisJQGVjaG8gIiINCisNCisjIGVudHJ5IHBvaW50IGZvciBnZW5lcmF0aW5nIHNvdXJjZXMgcHJpb3IgdG8gdGhlIGJ1aWxkDQorZ2VuZXJhdGVfc291cmNlcyA6Og0KKwlAZWNobyAiIg0KKw0KKyMgbWFpbiBlbnRyeSBwb2ludCBmb3IgcG9zdCBwcm9jZXNzaW5nIGFmdGVyIHRoZSBidWlsZA0KK3Bvc3RfYnVpbGQgOjogJChQT1NUX0JVSUxEX1NURVApIGRlcGxveV9vdXRwdXQNCisJQGVjaG8gIiINCisNCisjIGVudHJ5IHBvaW50IGZvciBkZXBsb3lpbmcgb3V0cHV0IGFmdGVyIHRoZSBidWlsZA0KK2RlcGxveV9vdXRwdXQgOjoNCisJQGVjaG8gIiINCisNCitjbGVhbiA6OiBleHRlcm5hbF9jbGVhbiAkKENMRUFOX1NURVApIF9jbGVhbg0KKw0KKyMgZW50cnkgcG9pbnQgZm9yIGV4dGVuZGluZyB0aGUgYnVpbGQgY2xlYW4NCitleHRlcm5hbF9jbGVhbiA6Og0KKwlAZWNobyAiIg0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliLy53cnByb2plY3QgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi8ud3Jwcm9qZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwOGFjYjQKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi8ud3Jwcm9qZWN0CkBAIC0wLDAgKzEsMTQxNCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQorPHdyeG1sPg0KKyAgICA8cHJvcGVydGllcyBwbGF0Zm9ybT0iVnhXb3JrcyIgcGxhdGZvcm1fbmFtZT0idnh3b3Jrcy02LjMiIHJvb3Q9IjEiIHR5cGU9IkRvd25sb2FkYWJsZUtlcm5lbE1vZHVsZVByb2plY3QiLz4NCisgICAgPGF0dHJpYnV0ZXM+DQorICAgICAgICA8bWFwQXR0cmlidXRlPg0KKyAgICAgICAgICAgIDxsaXN0QXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfEdsb2JhbE1hY3JvcyI+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9IlBST0pFQ1RfVFlQRSIvPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSJERUZJTkVTIi8+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9IkVYUEFORF9EQkciLz4NCisgICAgICAgICAgICA8L2xpc3RBdHRyaWJ1dGU+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xHbG9iYWxNYWNyb3xERUZJTkVTIiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xHbG9iYWxNYWNyb3xFWFBBTkRfREJHIiB2YWx1ZT0iMCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98R2xvYmFsTWFjcm98UFJPSkVDVF9UWVBFIiB2YWx1ZT0iREtNIi8+DQorICAgICAgICAgICAgPGxpc3RBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98SW5jbHxQUEMzMmRpYWIiPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSItSSQoV0lORF9CQVNFKS90YXJnZXQvaCIvPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSItSSQoV0lORF9CQVNFKS90YXJnZXQvaC93cm4vY29yZWlwIi8+DQorICAgICAgICAgICAgPC9saXN0QXR0cmlidXRlPg0KKyAgICAgICAgICAgIDxsaXN0QXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfEluY2x8UFBDMzJnbnUiPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSItSSQoV0lORF9CQVNFKS90YXJnZXQvaCIvPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSItSSQoV0lORF9CQVNFKS90YXJnZXQvaC93cm4vY29yZWlwIi8+DQorICAgICAgICAgICAgPC9saXN0QXR0cmlidXRlPg0KKyAgICAgICAgICAgIDxsaXN0QXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfEluY2x8UFBDMzJzZmRpYWIiPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSItSSQoV0lORF9CQVNFKS90YXJnZXQvaCIvPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSItSSQoV0lORF9CQVNFKS90YXJnZXQvaC93cm4vY29yZWlwIi8+DQorICAgICAgICAgICAgPC9saXN0QXR0cmlidXRlPg0KKyAgICAgICAgICAgIDxsaXN0QXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfEluY2x8UFBDMzJzZmdudSI+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9Ii1JJChXSU5EX0JBU0UpL3RhcmdldC9oIi8+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9Ii1JJChXSU5EX0JBU0UpL3RhcmdldC9oL3dybi9jb3JlaXAiLz4NCisgICAgICAgICAgICA8L2xpc3RBdHRyaWJ1dGU+DQorICAgICAgICAgICAgPGxpc3RBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98SW5jbHxQUEM0MDNkaWFiIj4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2giLz4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2gvd3JuL2NvcmVpcCIvPg0KKyAgICAgICAgICAgIDwvbGlzdEF0dHJpYnV0ZT4NCisgICAgICAgICAgICA8bGlzdEF0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xJbmNsfFBQQzQwM2dudSI+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9Ii1JJChXSU5EX0JBU0UpL3RhcmdldC9oIi8+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9Ii1JJChXSU5EX0JBU0UpL3RhcmdldC9oL3dybi9jb3JlaXAiLz4NCisgICAgICAgICAgICA8L2xpc3RBdHRyaWJ1dGU+DQorICAgICAgICAgICAgPGxpc3RBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98SW5jbHxQUEM0MDVkaWFiIj4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2giLz4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2gvd3JuL2NvcmVpcCIvPg0KKyAgICAgICAgICAgIDwvbGlzdEF0dHJpYnV0ZT4NCisgICAgICAgICAgICA8bGlzdEF0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xJbmNsfFBQQzQwNWdudSI+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9Ii1JJChXSU5EX0JBU0UpL3RhcmdldC9oIi8+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9Ii1JJChXSU5EX0JBU0UpL3RhcmdldC9oL3dybi9jb3JlaXAiLz4NCisgICAgICAgICAgICA8L2xpc3RBdHRyaWJ1dGU+DQorICAgICAgICAgICAgPGxpc3RBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98SW5jbHxQUEM0MDVzZmRpYWIiPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSItSSQoV0lORF9CQVNFKS90YXJnZXQvaCIvPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSItSSQoV0lORF9CQVNFKS90YXJnZXQvaC93cm4vY29yZWlwIi8+DQorICAgICAgICAgICAgPC9saXN0QXR0cmlidXRlPg0KKyAgICAgICAgICAgIDxsaXN0QXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfEluY2x8UFBDNDA1c2ZnbnUiPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSItSSQoV0lORF9CQVNFKS90YXJnZXQvaCIvPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSItSSQoV0lORF9CQVNFKS90YXJnZXQvaC93cm4vY29yZWlwIi8+DQorICAgICAgICAgICAgPC9saXN0QXR0cmlidXRlPg0KKyAgICAgICAgICAgIDxsaXN0QXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfEluY2x8UFBDNDQwZGlhYiI+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9Ii1JJChXSU5EX0JBU0UpL3RhcmdldC9oIi8+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9Ii1JJChXSU5EX0JBU0UpL3RhcmdldC9oL3dybi9jb3JlaXAiLz4NCisgICAgICAgICAgICA8L2xpc3RBdHRyaWJ1dGU+DQorICAgICAgICAgICAgPGxpc3RBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98SW5jbHxQUEM0NDBnbnUiPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSItSSQoV0lORF9CQVNFKS90YXJnZXQvaCIvPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSItSSQoV0lORF9CQVNFKS90YXJnZXQvaC93cm4vY29yZWlwIi8+DQorICAgICAgICAgICAgPC9saXN0QXR0cmlidXRlPg0KKyAgICAgICAgICAgIDxsaXN0QXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfEluY2x8UFBDNDQwc2ZkaWFiIj4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2giLz4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2gvd3JuL2NvcmVpcCIvPg0KKyAgICAgICAgICAgIDwvbGlzdEF0dHJpYnV0ZT4NCisgICAgICAgICAgICA8bGlzdEF0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xJbmNsfFBQQzQ0MHNmZ251Ij4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2giLz4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2gvd3JuL2NvcmVpcCIvPg0KKyAgICAgICAgICAgIDwvbGlzdEF0dHJpYnV0ZT4NCisgICAgICAgICAgICA8bGlzdEF0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xJbmNsfFBQQzYwM2RpYWIiPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSItSSQoV0lORF9CQVNFKS90YXJnZXQvaCIvPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSItSSQoV0lORF9CQVNFKS90YXJnZXQvaC93cm4vY29yZWlwIi8+DQorICAgICAgICAgICAgPC9saXN0QXR0cmlidXRlPg0KKyAgICAgICAgICAgIDxsaXN0QXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfEluY2x8UFBDNjAzZ251Ij4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iLUkuLiIvPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSItSSQoV0lORF9CQVNFKS90YXJnZXQvaCIvPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSItSSQoV0lORF9CQVNFKS90YXJnZXQvaC93cm4vY29yZWlwIi8+DQorICAgICAgICAgICAgPC9saXN0QXR0cmlidXRlPg0KKyAgICAgICAgICAgIDxsaXN0QXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfEluY2x8UFBDNjA0ZGlhYiI+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9Ii1JJChXSU5EX0JBU0UpL3RhcmdldC9oIi8+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9Ii1JJChXSU5EX0JBU0UpL3RhcmdldC9oL3dybi9jb3JlaXAiLz4NCisgICAgICAgICAgICA8L2xpc3RBdHRyaWJ1dGU+DQorICAgICAgICAgICAgPGxpc3RBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98SW5jbHxQUEM2MDRnbnUiPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSItSSQoV0lORF9CQVNFKS90YXJnZXQvaCIvPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSItSSQoV0lORF9CQVNFKS90YXJnZXQvaC93cm4vY29yZWlwIi8+DQorICAgICAgICAgICAgPC9saXN0QXR0cmlidXRlPg0KKyAgICAgICAgICAgIDxsaXN0QXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfEluY2x8UFBDODVYWGRpYWIiPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSItSSQoV0lORF9CQVNFKS90YXJnZXQvaCIvPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSItSSQoV0lORF9CQVNFKS90YXJnZXQvaC93cm4vY29yZWlwIi8+DQorICAgICAgICAgICAgPC9saXN0QXR0cmlidXRlPg0KKyAgICAgICAgICAgIDxsaXN0QXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfEluY2x8UFBDODVYWGdudSI+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9Ii1JJChXSU5EX0JBU0UpL3RhcmdldC9oIi8+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9Ii1JJChXSU5EX0JBU0UpL3RhcmdldC9oL3dybi9jb3JlaXAiLz4NCisgICAgICAgICAgICA8L2xpc3RBdHRyaWJ1dGU+DQorICAgICAgICAgICAgPGxpc3RBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98SW5jbHxQUEM4NVhYc2ZkaWFiIj4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2giLz4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2gvd3JuL2NvcmVpcCIvPg0KKyAgICAgICAgICAgIDwvbGlzdEF0dHJpYnV0ZT4NCisgICAgICAgICAgICA8bGlzdEF0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xJbmNsfFBQQzg1WFhzZmdudSI+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9Ii1JJChXSU5EX0JBU0UpL3RhcmdldC9oIi8+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9Ii1JJChXSU5EX0JBU0UpL3RhcmdldC9oL3dybi9jb3JlaXAiLz4NCisgICAgICAgICAgICA8L2xpc3RBdHRyaWJ1dGU+DQorICAgICAgICAgICAgPGxpc3RBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98SW5jbHxQUEM4NjBzZmRpYWIiPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSItSSQoV0lORF9CQVNFKS90YXJnZXQvaCIvPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSItSSQoV0lORF9CQVNFKS90YXJnZXQvaC93cm4vY29yZWlwIi8+DQorICAgICAgICAgICAgPC9saXN0QXR0cmlidXRlPg0KKyAgICAgICAgICAgIDxsaXN0QXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfEluY2x8UFBDODYwc2ZnbnUiPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSItSSQoV0lORF9CQVNFKS90YXJnZXQvaCIvPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSItSSQoV0lORF9CQVNFKS90YXJnZXQvaC93cm4vY29yZWlwIi8+DQorICAgICAgICAgICAgPC9saXN0QXR0cmlidXRlPg0KKyAgICAgICAgICAgIDxsaXN0QXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfEluY2x8U0lNTElOVVhkaWFiIj4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2giLz4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2gvd3JuL2NvcmVpcCIvPg0KKyAgICAgICAgICAgIDwvbGlzdEF0dHJpYnV0ZT4NCisgICAgICAgICAgICA8bGlzdEF0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xJbmNsfFNJTUxJTlVYZ251Ij4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2giLz4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2gvd3JuL2NvcmVpcCIvPg0KKyAgICAgICAgICAgIDwvbGlzdEF0dHJpYnV0ZT4NCisgICAgICAgICAgICA8bGlzdEF0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xJbmNsfFNJTU5UZGlhYiI+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9Ii1JJChXSU5EX0JBU0UpL3RhcmdldC9oIi8+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9Ii1JJChXSU5EX0JBU0UpL3RhcmdldC9oL3dybi9jb3JlaXAiLz4NCisgICAgICAgICAgICA8L2xpc3RBdHRyaWJ1dGU+DQorICAgICAgICAgICAgPGxpc3RBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98SW5jbHxTSU1OVGdudSI+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9Ii1JJChXSU5EX0JBU0UpL3RhcmdldC9oIi8+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9Ii1JJChXSU5EX0JBU0UpL3RhcmdldC9oL3dybi9jb3JlaXAiLz4NCisgICAgICAgICAgICA8L2xpc3RBdHRyaWJ1dGU+DQorICAgICAgICAgICAgPGxpc3RBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98SW5jbHxTSU1TUEFSQ1NPTEFSSVNkaWFiIj4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2giLz4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2gvd3JuL2NvcmVpcCIvPg0KKyAgICAgICAgICAgIDwvbGlzdEF0dHJpYnV0ZT4NCisgICAgICAgICAgICA8bGlzdEF0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xJbmNsfFNJTVNQQVJDU09MQVJJU2dudSI+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9Ii1JJChXSU5EX0JBU0UpL3RhcmdldC9oIi8+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9Ii1JJChXSU5EX0JBU0UpL3RhcmdldC9oL3dybi9jb3JlaXAiLz4NCisgICAgICAgICAgICA8L2xpc3RBdHRyaWJ1dGU+DQorICAgICAgICAgICAgPGxpc3RBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm9zIj4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iVlhfQ1BVX0ZBTUlMWSIvPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSJDUFUiLz4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iVE9PTF9GQU1JTFkiLz4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iVE9PTCIvPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSJUT09MX1BBVEgiLz4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iQ0NfQVJDSF9TUEVDIi8+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9IkxJQlBBVEgiLz4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iTElCUyIvPg0KKyAgICAgICAgICAgIDwvbGlzdEF0dHJpYnV0ZT4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfENDX0FSQ0hfU1BFQ3x2YWx1ZXxQUEMzMmRpYWIiIHZhbHVlPSItdFBQQ0ZIOnZ4d29ya3M2MyAtWHN0bXctc2xvdyAtRFBQQzMyX2ZwNjB4Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xDQ19BUkNIX1NQRUN8dmFsdWV8UFBDMzJnbnUiIHZhbHVlPSItbWhhcmQtZmxvYXQgLW1zdHJpY3QtYWxpZ24gLW1uby1pbXBsaWNpdC1mcCAtRFBQQzMyX2ZwNjB4Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xDQ19BUkNIX1NQRUN8dmFsdWV8UFBDMzJzZmRpYWIiIHZhbHVlPSItdFBQQ0ZTOnZ4d29ya3M2MyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98Q0NfQVJDSF9TUEVDfHZhbHVlfFBQQzMyc2ZnbnUiIHZhbHVlPSItbXNvZnQtZmxvYXQgLW1zdHJpY3QtYWxpZ24iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfENDX0FSQ0hfU1BFQ3x2YWx1ZXxQUEM0MDNkaWFiIiB2YWx1ZT0iLXRQUEM0MDNGUzp2eHdvcmtzNjMiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfENDX0FSQ0hfU1BFQ3x2YWx1ZXxQUEM0MDNnbnUiIHZhbHVlPSItbWNwdT00MDMgLW1zdHJpY3QtYWxpZ24gLW1zb2Z0LWZsb2F0Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xDQ19BUkNIX1NQRUN8dmFsdWV8UFBDNDA1ZGlhYiIgdmFsdWU9Ii10UFBDNDA1RlM6dnh3b3JrczYzIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xDQ19BUkNIX1NQRUN8dmFsdWV8UFBDNDA1Z251IiB2YWx1ZT0iLW1jcHU9NDA1IC1tc3RyaWN0LWFsaWduIC1tc29mdC1mbG9hdCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98Q0NfQVJDSF9TUEVDfHZhbHVlfFBQQzQwNXNmZGlhYiIgdmFsdWU9Ii10UFBDNDA1RlM6dnh3b3JrczYzIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xDQ19BUkNIX1NQRUN8dmFsdWV8UFBDNDA1c2ZnbnUiIHZhbHVlPSItbWNwdT00MDUgLW1zdHJpY3QtYWxpZ24gLW1zb2Z0LWZsb2F0Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xDQ19BUkNIX1NQRUN8dmFsdWV8UFBDNDQwZGlhYiIgdmFsdWU9Ii10UFBDNDQwRkg6dnh3b3JrczYzIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xDQ19BUkNIX1NQRUN8dmFsdWV8UFBDNDQwZ251IiB2YWx1ZT0iLW1jcHU9NDQwIC1tc3RyaWN0LWFsaWduIC1tc29mdC1mbG9hdCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98Q0NfQVJDSF9TUEVDfHZhbHVlfFBQQzQ0MHNmZGlhYiIgdmFsdWU9Ii10UFBDNDQwRlM6dnh3b3JrczYzIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xDQ19BUkNIX1NQRUN8dmFsdWV8UFBDNDQwc2ZnbnUiIHZhbHVlPSItbWNwdT00NDAgLW1zdHJpY3QtYWxpZ24gLW1zb2Z0LWZsb2F0Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xDQ19BUkNIX1NQRUN8dmFsdWV8UFBDNjAzZGlhYiIgdmFsdWU9Ii10UFBDNjAzRkg6dnh3b3JrczYzIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xDQ19BUkNIX1NQRUN8dmFsdWV8UFBDNjAzZ251IiB2YWx1ZT0iLW1jcHU9NjAzIC1tc3RyaWN0LWFsaWduIC1tbm8taW1wbGljaXQtZnAgLW1sb25nY2FsbCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98Q0NfQVJDSF9TUEVDfHZhbHVlfFBQQzYwNGRpYWIiIHZhbHVlPSItdFBQQzYwNEZIOnZ4d29ya3M2MyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98Q0NfQVJDSF9TUEVDfHZhbHVlfFBQQzYwNGdudSIgdmFsdWU9Ii1tY3B1PTYwNCAtbXN0cmljdC1hbGlnbiAtbW5vLWltcGxpY2l0LWZwIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xDQ19BUkNIX1NQRUN8dmFsdWV8UFBDODVYWGRpYWIiIHZhbHVlPSItdFBQQ0U1MDBGUzp2eHdvcmtzNjMiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfENDX0FSQ0hfU1BFQ3x2YWx1ZXxQUEM4NVhYZ251IiB2YWx1ZT0iLW1jcHU9ODU0MCAtbXN0cmljdC1hbGlnbiAtbXNvZnQtZmxvYXQgLW1hYmk9bm8tc3BlIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xDQ19BUkNIX1NQRUN8dmFsdWV8UFBDODVYWHNmZGlhYiIgdmFsdWU9Ii10UFBDRTUwMEZTOnZ4d29ya3M2MyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98Q0NfQVJDSF9TUEVDfHZhbHVlfFBQQzg1WFhzZmdudSIgdmFsdWU9Ii1tY3B1PTg1NDAgLW1zdHJpY3QtYWxpZ24gLW1zb2Z0LWZsb2F0IC1tYWJpPW5vLXNwZSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98Q0NfQVJDSF9TUEVDfHZhbHVlfFBQQzg2MHNmZGlhYiIgdmFsdWU9Ii10UFBDODYwRlM6dnh3b3JrczYzIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xDQ19BUkNIX1NQRUN8dmFsdWV8UFBDODYwc2ZnbnUiIHZhbHVlPSItbWNwdT04NjAgLW1zdHJpY3QtYWxpZ24gLW1zb2Z0LWZsb2F0Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xDQ19BUkNIX1NQRUN8dmFsdWV8U0lNTElOVVhkaWFiIiB2YWx1ZT0iLXRYODZMSDp2eHdvcmtzNjMiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfENDX0FSQ0hfU1BFQ3x2YWx1ZXxTSU1MSU5VWGdudSIgdmFsdWU9Ii1tdHVuZT1pNDg2IC1tYXJjaD1pNDg2Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xDQ19BUkNIX1NQRUN8dmFsdWV8U0lNTlRkaWFiIiB2YWx1ZT0iLXRYODZMSDp2eHdvcmtzNjMiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfENDX0FSQ0hfU1BFQ3x2YWx1ZXxTSU1OVGdudSIgdmFsdWU9Ii1tdHVuZT1pNDg2IC1tYXJjaD1pNDg2Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xDQ19BUkNIX1NQRUN8dmFsdWV8U0lNU1BBUkNTT0xBUklTZGlhYiIgdmFsdWU9Ii10U1BBUkNGSDp2eHdvcmtzNjMiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfENDX0FSQ0hfU1BFQ3x2YWx1ZXxTSU1TUEFSQ1NPTEFSSVNnbnUiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfENQVXx2YWx1ZXxQUEMzMmRpYWIiIHZhbHVlPSJQUEMzMiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98Q1BVfHZhbHVlfFBQQzMyZ251IiB2YWx1ZT0iUFBDMzIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfENQVXx2YWx1ZXxQUEMzMnNmZGlhYiIgdmFsdWU9IlBQQzMyIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xDUFV8dmFsdWV8UFBDMzJzZmdudSIgdmFsdWU9IlBQQzMyIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xDUFV8dmFsdWV8UFBDNDAzZGlhYiIgdmFsdWU9IlBQQzQwMyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98Q1BVfHZhbHVlfFBQQzQwM2dudSIgdmFsdWU9IlBQQzQwMyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98Q1BVfHZhbHVlfFBQQzQwNWRpYWIiIHZhbHVlPSJQUEM0MDUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfENQVXx2YWx1ZXxQUEM0MDVnbnUiIHZhbHVlPSJQUEM0MDUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfENQVXx2YWx1ZXxQUEM0MDVzZmRpYWIiIHZhbHVlPSJQUEM0MDUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfENQVXx2YWx1ZXxQUEM0MDVzZmdudSIgdmFsdWU9IlBQQzQwNSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98Q1BVfHZhbHVlfFBQQzQ0MGRpYWIiIHZhbHVlPSJQUEM0NDAiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfENQVXx2YWx1ZXxQUEM0NDBnbnUiIHZhbHVlPSJQUEM0NDAiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfENQVXx2YWx1ZXxQUEM0NDBzZmRpYWIiIHZhbHVlPSJQUEM0NDAiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfENQVXx2YWx1ZXxQUEM0NDBzZmdudSIgdmFsdWU9IlBQQzQ0MCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98Q1BVfHZhbHVlfFBQQzYwM2RpYWIiIHZhbHVlPSJQUEM2MDMiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfENQVXx2YWx1ZXxQUEM2MDNnbnUiIHZhbHVlPSJQUEM2MDMiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfENQVXx2YWx1ZXxQUEM2MDRkaWFiIiB2YWx1ZT0iUFBDNjA0Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xDUFV8dmFsdWV8UFBDNjA0Z251IiB2YWx1ZT0iUFBDNjA0Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xDUFV8dmFsdWV8UFBDODVYWGRpYWIiIHZhbHVlPSJQUEM4NVhYIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xDUFV8dmFsdWV8UFBDODVYWGdudSIgdmFsdWU9IlBQQzg1WFgiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfENQVXx2YWx1ZXxQUEM4NVhYc2ZkaWFiIiB2YWx1ZT0iUFBDODVYWCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98Q1BVfHZhbHVlfFBQQzg1WFhzZmdudSIgdmFsdWU9IlBQQzg1WFgiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfENQVXx2YWx1ZXxQUEM4NjBzZmRpYWIiIHZhbHVlPSJQUEM4NjAiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfENQVXx2YWx1ZXxQUEM4NjBzZmdudSIgdmFsdWU9IlBQQzg2MCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98Q1BVfHZhbHVlfFNJTUxJTlVYZGlhYiIgdmFsdWU9IlNJTUxJTlVYIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xDUFV8dmFsdWV8U0lNTElOVVhnbnUiIHZhbHVlPSJTSU1MSU5VWCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98Q1BVfHZhbHVlfFNJTU5UZGlhYiIgdmFsdWU9IlNJTU5UIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xDUFV8dmFsdWV8U0lNTlRnbnUiIHZhbHVlPSJTSU1OVCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98Q1BVfHZhbHVlfFNJTVNQQVJDU09MQVJJU2RpYWIiIHZhbHVlPSJTSU1TUEFSQ1NPTEFSSVMiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfENQVXx2YWx1ZXxTSU1TUEFSQ1NPTEFSSVNnbnUiIHZhbHVlPSJTSU1TUEFSQ1NPTEFSSVMiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfExJQlBBVEh8dmFsdWV8UFBDMzJkaWFiIiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xMSUJQQVRIfHZhbHVlfFBQQzMyZ251IiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xMSUJQQVRIfHZhbHVlfFBQQzMyc2ZkaWFiIiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xMSUJQQVRIfHZhbHVlfFBQQzMyc2ZnbnUiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfExJQlBBVEh8dmFsdWV8UFBDNDAzZGlhYiIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98TElCUEFUSHx2YWx1ZXxQUEM0MDNnbnUiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfExJQlBBVEh8dmFsdWV8UFBDNDA1ZGlhYiIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98TElCUEFUSHx2YWx1ZXxQUEM0MDVnbnUiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfExJQlBBVEh8dmFsdWV8UFBDNDA1c2ZkaWFiIiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xMSUJQQVRIfHZhbHVlfFBQQzQwNXNmZ251IiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xMSUJQQVRIfHZhbHVlfFBQQzQ0MGRpYWIiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfExJQlBBVEh8dmFsdWV8UFBDNDQwZ251IiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xMSUJQQVRIfHZhbHVlfFBQQzQ0MHNmZGlhYiIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98TElCUEFUSHx2YWx1ZXxQUEM0NDBzZmdudSIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98TElCUEFUSHx2YWx1ZXxQUEM2MDNkaWFiIiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xMSUJQQVRIfHZhbHVlfFBQQzYwM2dudSIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98TElCUEFUSHx2YWx1ZXxQUEM2MDRkaWFiIiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xMSUJQQVRIfHZhbHVlfFBQQzYwNGdudSIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98TElCUEFUSHx2YWx1ZXxQUEM4NVhYZGlhYiIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98TElCUEFUSHx2YWx1ZXxQUEM4NVhYZ251IiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xMSUJQQVRIfHZhbHVlfFBQQzg1WFhzZmRpYWIiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfExJQlBBVEh8dmFsdWV8UFBDODVYWHNmZ251IiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xMSUJQQVRIfHZhbHVlfFBQQzg2MHNmZGlhYiIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98TElCUEFUSHx2YWx1ZXxQUEM4NjBzZmdudSIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98TElCUEFUSHx2YWx1ZXxTSU1MSU5VWGRpYWIiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfExJQlBBVEh8dmFsdWV8U0lNTElOVVhnbnUiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfExJQlBBVEh8dmFsdWV8U0lNTlRkaWFiIiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xMSUJQQVRIfHZhbHVlfFNJTU5UZ251IiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xMSUJQQVRIfHZhbHVlfFNJTVNQQVJDU09MQVJJU2RpYWIiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfExJQlBBVEh8dmFsdWV8U0lNU1BBUkNTT0xBUklTZ251IiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xMSUJTfHZhbHVlfFBQQzMyZGlhYiIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98TElCU3x2YWx1ZXxQUEMzMmdudSIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98TElCU3x2YWx1ZXxQUEMzMnNmZGlhYiIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98TElCU3x2YWx1ZXxQUEMzMnNmZ251IiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xMSUJTfHZhbHVlfFBQQzQwM2RpYWIiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfExJQlN8dmFsdWV8UFBDNDAzZ251IiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xMSUJTfHZhbHVlfFBQQzQwNWRpYWIiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfExJQlN8dmFsdWV8UFBDNDA1Z251IiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xMSUJTfHZhbHVlfFBQQzQwNXNmZGlhYiIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98TElCU3x2YWx1ZXxQUEM0MDVzZmdudSIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98TElCU3x2YWx1ZXxQUEM0NDBkaWFiIiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xMSUJTfHZhbHVlfFBQQzQ0MGdudSIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98TElCU3x2YWx1ZXxQUEM0NDBzZmRpYWIiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfExJQlN8dmFsdWV8UFBDNDQwc2ZnbnUiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfExJQlN8dmFsdWV8UFBDNjAzZGlhYiIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98TElCU3x2YWx1ZXxQUEM2MDNnbnUiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfExJQlN8dmFsdWV8UFBDNjA0ZGlhYiIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98TElCU3x2YWx1ZXxQUEM2MDRnbnUiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfExJQlN8dmFsdWV8UFBDODVYWGRpYWIiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfExJQlN8dmFsdWV8UFBDODVYWGdudSIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98TElCU3x2YWx1ZXxQUEM4NVhYc2ZkaWFiIiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xMSUJTfHZhbHVlfFBQQzg1WFhzZmdudSIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98TElCU3x2YWx1ZXxQUEM4NjBzZmRpYWIiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfExJQlN8dmFsdWV8UFBDODYwc2ZnbnUiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfExJQlN8dmFsdWV8U0lNTElOVVhkaWFiIiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xMSUJTfHZhbHVlfFNJTUxJTlVYZ251IiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xMSUJTfHZhbHVlfFNJTU5UZGlhYiIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98TElCU3x2YWx1ZXxTSU1OVGdudSIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98TElCU3x2YWx1ZXxTSU1TUEFSQ1NPTEFSSVNkaWFiIiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xMSUJTfHZhbHVlfFNJTVNQQVJDU09MQVJJU2dudSIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98VE9PTF9GQU1JTFl8dmFsdWV8UFBDMzJkaWFiIiB2YWx1ZT0iZGlhYiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98VE9PTF9GQU1JTFl8dmFsdWV8UFBDMzJnbnUiIHZhbHVlPSJnbnUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfFRPT0xfRkFNSUxZfHZhbHVlfFBQQzMyc2ZkaWFiIiB2YWx1ZT0iZGlhYiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98VE9PTF9GQU1JTFl8dmFsdWV8UFBDMzJzZmdudSIgdmFsdWU9ImdudSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98VE9PTF9GQU1JTFl8dmFsdWV8UFBDNDAzZGlhYiIgdmFsdWU9ImRpYWIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfFRPT0xfRkFNSUxZfHZhbHVlfFBQQzQwM2dudSIgdmFsdWU9ImdudSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98VE9PTF9GQU1JTFl8dmFsdWV8UFBDNDA1ZGlhYiIgdmFsdWU9ImRpYWIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfFRPT0xfRkFNSUxZfHZhbHVlfFBQQzQwNWdudSIgdmFsdWU9ImdudSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98VE9PTF9GQU1JTFl8dmFsdWV8UFBDNDA1c2ZkaWFiIiB2YWx1ZT0iZGlhYiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98VE9PTF9GQU1JTFl8dmFsdWV8UFBDNDA1c2ZnbnUiIHZhbHVlPSJnbnUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfFRPT0xfRkFNSUxZfHZhbHVlfFBQQzQ0MGRpYWIiIHZhbHVlPSJkaWFiIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xUT09MX0ZBTUlMWXx2YWx1ZXxQUEM0NDBnbnUiIHZhbHVlPSJnbnUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfFRPT0xfRkFNSUxZfHZhbHVlfFBQQzQ0MHNmZGlhYiIgdmFsdWU9ImRpYWIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfFRPT0xfRkFNSUxZfHZhbHVlfFBQQzQ0MHNmZ251IiB2YWx1ZT0iZ251Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xUT09MX0ZBTUlMWXx2YWx1ZXxQUEM2MDNkaWFiIiB2YWx1ZT0iZGlhYiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98VE9PTF9GQU1JTFl8dmFsdWV8UFBDNjAzZ251IiB2YWx1ZT0iZ251Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xUT09MX0ZBTUlMWXx2YWx1ZXxQUEM2MDRkaWFiIiB2YWx1ZT0iZGlhYiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98VE9PTF9GQU1JTFl8dmFsdWV8UFBDNjA0Z251IiB2YWx1ZT0iZ251Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xUT09MX0ZBTUlMWXx2YWx1ZXxQUEM4NVhYZGlhYiIgdmFsdWU9ImRpYWIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfFRPT0xfRkFNSUxZfHZhbHVlfFBQQzg1WFhnbnUiIHZhbHVlPSJnbnUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfFRPT0xfRkFNSUxZfHZhbHVlfFBQQzg1WFhzZmRpYWIiIHZhbHVlPSJkaWFiIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xUT09MX0ZBTUlMWXx2YWx1ZXxQUEM4NVhYc2ZnbnUiIHZhbHVlPSJnbnUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfFRPT0xfRkFNSUxZfHZhbHVlfFBQQzg2MHNmZGlhYiIgdmFsdWU9ImRpYWIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfFRPT0xfRkFNSUxZfHZhbHVlfFBQQzg2MHNmZ251IiB2YWx1ZT0iZ251Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xUT09MX0ZBTUlMWXx2YWx1ZXxTSU1MSU5VWGRpYWIiIHZhbHVlPSJkaWFiIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xUT09MX0ZBTUlMWXx2YWx1ZXxTSU1MSU5VWGdudSIgdmFsdWU9ImdudSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98VE9PTF9GQU1JTFl8dmFsdWV8U0lNTlRkaWFiIiB2YWx1ZT0iZGlhYiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98VE9PTF9GQU1JTFl8dmFsdWV8U0lNTlRnbnUiIHZhbHVlPSJnbnUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfFRPT0xfRkFNSUxZfHZhbHVlfFNJTVNQQVJDU09MQVJJU2RpYWIiIHZhbHVlPSJkaWFiIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xUT09MX0ZBTUlMWXx2YWx1ZXxTSU1TUEFSQ1NPTEFSSVNnbnUiIHZhbHVlPSJnbnUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfFRPT0xfUEFUSHx2YWx1ZXxQUEMzMmRpYWIiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfFRPT0xfUEFUSHx2YWx1ZXxQUEMzMmdudSIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98VE9PTF9QQVRIfHZhbHVlfFBQQzMyc2ZkaWFiIiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xUT09MX1BBVEh8dmFsdWV8UFBDMzJzZmdudSIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98VE9PTF9QQVRIfHZhbHVlfFBQQzQwM2RpYWIiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfFRPT0xfUEFUSHx2YWx1ZXxQUEM0MDNnbnUiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfFRPT0xfUEFUSHx2YWx1ZXxQUEM0MDVkaWFiIiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xUT09MX1BBVEh8dmFsdWV8UFBDNDA1Z251IiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xUT09MX1BBVEh8dmFsdWV8UFBDNDA1c2ZkaWFiIiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xUT09MX1BBVEh8dmFsdWV8UFBDNDA1c2ZnbnUiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfFRPT0xfUEFUSHx2YWx1ZXxQUEM0NDBkaWFiIiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xUT09MX1BBVEh8dmFsdWV8UFBDNDQwZ251IiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xUT09MX1BBVEh8dmFsdWV8UFBDNDQwc2ZkaWFiIiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xUT09MX1BBVEh8dmFsdWV8UFBDNDQwc2ZnbnUiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfFRPT0xfUEFUSHx2YWx1ZXxQUEM2MDNkaWFiIiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xUT09MX1BBVEh8dmFsdWV8UFBDNjAzZ251IiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xUT09MX1BBVEh8dmFsdWV8UFBDNjA0ZGlhYiIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98VE9PTF9QQVRIfHZhbHVlfFBQQzYwNGdudSIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98VE9PTF9QQVRIfHZhbHVlfFBQQzg1WFhkaWFiIiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xUT09MX1BBVEh8dmFsdWV8UFBDODVYWGdudSIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98VE9PTF9QQVRIfHZhbHVlfFBQQzg1WFhzZmRpYWIiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfFRPT0xfUEFUSHx2YWx1ZXxQUEM4NVhYc2ZnbnUiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfFRPT0xfUEFUSHx2YWx1ZXxQUEM4NjBzZmRpYWIiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfFRPT0xfUEFUSHx2YWx1ZXxQUEM4NjBzZmdudSIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98VE9PTF9QQVRIfHZhbHVlfFNJTUxJTlVYZGlhYiIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98VE9PTF9QQVRIfHZhbHVlfFNJTUxJTlVYZ251IiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xUT09MX1BBVEh8dmFsdWV8U0lNTlRkaWFiIiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xUT09MX1BBVEh8dmFsdWV8U0lNTlRnbnUiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfFRPT0xfUEFUSHx2YWx1ZXxTSU1TUEFSQ1NPTEFSSVNkaWFiIiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xUT09MX1BBVEh8dmFsdWV8U0lNU1BBUkNTT0xBUklTZ251IiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xUT09MfHZhbHVlfFBQQzMyZGlhYiIgdmFsdWU9ImRpYWIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfFRPT0x8dmFsdWV8UFBDMzJnbnUiIHZhbHVlPSJnbnUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfFRPT0x8dmFsdWV8UFBDMzJzZmRpYWIiIHZhbHVlPSJzZmRpYWIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfFRPT0x8dmFsdWV8UFBDMzJzZmdudSIgdmFsdWU9InNmZ251Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xUT09MfHZhbHVlfFBQQzQwM2RpYWIiIHZhbHVlPSJkaWFiIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xUT09MfHZhbHVlfFBQQzQwM2dudSIgdmFsdWU9ImdudSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98VE9PTHx2YWx1ZXxQUEM0MDVkaWFiIiB2YWx1ZT0iZGlhYiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98VE9PTHx2YWx1ZXxQUEM0MDVnbnUiIHZhbHVlPSJnbnUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfFRPT0x8dmFsdWV8UFBDNDA1c2ZkaWFiIiB2YWx1ZT0ic2ZkaWFiIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xUT09MfHZhbHVlfFBQQzQwNXNmZ251IiB2YWx1ZT0ic2ZnbnUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfFRPT0x8dmFsdWV8UFBDNDQwZGlhYiIgdmFsdWU9ImRpYWIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfFRPT0x8dmFsdWV8UFBDNDQwZ251IiB2YWx1ZT0iZ251Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xUT09MfHZhbHVlfFBQQzQ0MHNmZGlhYiIgdmFsdWU9InNmZGlhYiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98VE9PTHx2YWx1ZXxQUEM0NDBzZmdudSIgdmFsdWU9InNmZ251Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xUT09MfHZhbHVlfFBQQzYwM2RpYWIiIHZhbHVlPSJkaWFiIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xUT09MfHZhbHVlfFBQQzYwM2dudSIgdmFsdWU9ImdudSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98VE9PTHx2YWx1ZXxQUEM2MDRkaWFiIiB2YWx1ZT0iZGlhYiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98VE9PTHx2YWx1ZXxQUEM2MDRnbnUiIHZhbHVlPSJnbnUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfFRPT0x8dmFsdWV8UFBDODVYWGRpYWIiIHZhbHVlPSJkaWFiIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xUT09MfHZhbHVlfFBQQzg1WFhnbnUiIHZhbHVlPSJnbnUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfFRPT0x8dmFsdWV8UFBDODVYWHNmZGlhYiIgdmFsdWU9InNmZGlhYiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98VE9PTHx2YWx1ZXxQUEM4NVhYc2ZnbnUiIHZhbHVlPSJzZmdudSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98VE9PTHx2YWx1ZXxQUEM4NjBzZmRpYWIiIHZhbHVlPSJzZmRpYWIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfFRPT0x8dmFsdWV8UFBDODYwc2ZnbnUiIHZhbHVlPSJzZmdudSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98VE9PTHx2YWx1ZXxTSU1MSU5VWGRpYWIiIHZhbHVlPSJkaWFiIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xUT09MfHZhbHVlfFNJTUxJTlVYZ251IiB2YWx1ZT0iZ251Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xUT09MfHZhbHVlfFNJTU5UZGlhYiIgdmFsdWU9ImRpYWIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfFRPT0x8dmFsdWV8U0lNTlRnbnUiIHZhbHVlPSJnbnUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfFRPT0x8dmFsdWV8U0lNU1BBUkNTT0xBUklTZGlhYiIgdmFsdWU9ImRpYWIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfFRPT0x8dmFsdWV8U0lNU1BBUkNTT0xBUklTZ251IiB2YWx1ZT0iZ251Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xWWF9DUFVfRkFNSUxZfHZhbHVlfFBQQzMyZGlhYiIgdmFsdWU9InBwYyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98VlhfQ1BVX0ZBTUlMWXx2YWx1ZXxQUEMzMmdudSIgdmFsdWU9InBwYyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98VlhfQ1BVX0ZBTUlMWXx2YWx1ZXxQUEMzMnNmZGlhYiIgdmFsdWU9InBwYyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98VlhfQ1BVX0ZBTUlMWXx2YWx1ZXxQUEMzMnNmZ251IiB2YWx1ZT0icHBjIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xWWF9DUFVfRkFNSUxZfHZhbHVlfFBQQzQwM2RpYWIiIHZhbHVlPSJwcGMiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfFZYX0NQVV9GQU1JTFl8dmFsdWV8UFBDNDAzZ251IiB2YWx1ZT0icHBjIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xWWF9DUFVfRkFNSUxZfHZhbHVlfFBQQzQwNWRpYWIiIHZhbHVlPSJwcGMiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfFZYX0NQVV9GQU1JTFl8dmFsdWV8UFBDNDA1Z251IiB2YWx1ZT0icHBjIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xWWF9DUFVfRkFNSUxZfHZhbHVlfFBQQzQwNXNmZGlhYiIgdmFsdWU9InBwYyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98VlhfQ1BVX0ZBTUlMWXx2YWx1ZXxQUEM0MDVzZmdudSIgdmFsdWU9InBwYyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98VlhfQ1BVX0ZBTUlMWXx2YWx1ZXxQUEM0NDBkaWFiIiB2YWx1ZT0icHBjIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xWWF9DUFVfRkFNSUxZfHZhbHVlfFBQQzQ0MGdudSIgdmFsdWU9InBwYyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98VlhfQ1BVX0ZBTUlMWXx2YWx1ZXxQUEM0NDBzZmRpYWIiIHZhbHVlPSJwcGMiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfFZYX0NQVV9GQU1JTFl8dmFsdWV8UFBDNDQwc2ZnbnUiIHZhbHVlPSJwcGMiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfFZYX0NQVV9GQU1JTFl8dmFsdWV8UFBDNjAzZGlhYiIgdmFsdWU9InBwYyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98VlhfQ1BVX0ZBTUlMWXx2YWx1ZXxQUEM2MDNnbnUiIHZhbHVlPSJwcGMiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfFZYX0NQVV9GQU1JTFl8dmFsdWV8UFBDNjA0ZGlhYiIgdmFsdWU9InBwYyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98VlhfQ1BVX0ZBTUlMWXx2YWx1ZXxQUEM2MDRnbnUiIHZhbHVlPSJwcGMiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfFZYX0NQVV9GQU1JTFl8dmFsdWV8UFBDODVYWGRpYWIiIHZhbHVlPSJwcGMiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfFZYX0NQVV9GQU1JTFl8dmFsdWV8UFBDODVYWGdudSIgdmFsdWU9InBwYyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98VlhfQ1BVX0ZBTUlMWXx2YWx1ZXxQUEM4NVhYc2ZkaWFiIiB2YWx1ZT0icHBjIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xWWF9DUFVfRkFNSUxZfHZhbHVlfFBQQzg1WFhzZmdudSIgdmFsdWU9InBwYyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98VlhfQ1BVX0ZBTUlMWXx2YWx1ZXxQUEM4NjBzZmRpYWIiIHZhbHVlPSJwcGMiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfFZYX0NQVV9GQU1JTFl8dmFsdWV8UFBDODYwc2ZnbnUiIHZhbHVlPSJwcGMiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfFZYX0NQVV9GQU1JTFl8dmFsdWV8U0lNTElOVVhkaWFiIiB2YWx1ZT0ic2ltbGludXgiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfFZYX0NQVV9GQU1JTFl8dmFsdWV8U0lNTElOVVhnbnUiIHZhbHVlPSJzaW1saW51eCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98VlhfQ1BVX0ZBTUlMWXx2YWx1ZXxTSU1OVGRpYWIiIHZhbHVlPSJzaW1wYyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98VlhfQ1BVX0ZBTUlMWXx2YWx1ZXxTSU1OVGdudSIgdmFsdWU9InNpbXBjIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xWWF9DUFVfRkFNSUxZfHZhbHVlfFNJTVNQQVJDU09MQVJJU2RpYWIiIHZhbHVlPSJzaW1zbyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98VlhfQ1BVX0ZBTUlMWXx2YWx1ZXxTSU1TUEFSQ1NPTEFSSVNnbnUiIHZhbHVlPSJzaW1zbyIvPg0KKyAgICAgICAgICAgIDxsaXN0QXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2xzIj4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iQy1Db21waWxlciIvPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSJDKystQ29tcGlsZXIiLz4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iTGlua2VyIi8+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9IlBhcnRpYWwgSW1hZ2UgTGlua2VyIi8+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9IkxpYnJhcmlhbiIvPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSJBc3NlbWJsZXIiLz4NCisgICAgICAgICAgICA8L2xpc3RBdHRyaWJ1dGU+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxjbWR8UFBDMzJkaWFiIiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OzslYXNzZW1ibGVycHJlZml4JSAkKFRPT0xfUEFUSClkY2MgJURlYnVnTW9kZUZsYWdzJSAlVG9vbEZsYWdzJSAkKEFEREVEX0NGTEFHUykgJUluY2x1ZGVzJSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAlT3V0RmlsZSUgLWMgJUluRmlsZSUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfGNtZHxQUEMzMmdudSIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWFzc2VtYmxlcnByZWZpeCUgJChUT09MX1BBVEgpY2NwcGMgJURlYnVnTW9kZUZsYWdzJSAlVG9vbEZsYWdzJSAkKEFEREVEX0NGTEFHUykgJUluY2x1ZGVzJSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAlT3V0RmlsZSUgLWMgJUluRmlsZSUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfGNtZHxQUEMzMnNmZGlhYiIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWFzc2VtYmxlcnByZWZpeCUgJChUT09MX1BBVEgpZGNjICVEZWJ1Z01vZGVGbGFncyUgJVRvb2xGbGFncyUgJChBRERFRF9DRkxBR1MpICVJbmNsdWRlcyUgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gJU91dEZpbGUlIC1jICVJbkZpbGUlIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxjbWR8UFBDMzJzZmdudSIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWFzc2VtYmxlcnByZWZpeCUgJChUT09MX1BBVEgpY2NwcGMgJURlYnVnTW9kZUZsYWdzJSAlVG9vbEZsYWdzJSAkKEFEREVEX0NGTEFHUykgJUluY2x1ZGVzJSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAlT3V0RmlsZSUgLWMgJUluRmlsZSUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfGNtZHxQUEM0MDNkaWFiIiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OzslYXNzZW1ibGVycHJlZml4JSAkKFRPT0xfUEFUSClkY2MgJURlYnVnTW9kZUZsYWdzJSAlVG9vbEZsYWdzJSAkKEFEREVEX0NGTEFHUykgJUluY2x1ZGVzJSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAlT3V0RmlsZSUgLWMgJUluRmlsZSUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfGNtZHxQUEM0MDNnbnUiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7OyVhc3NlbWJsZXJwcmVmaXglICQoVE9PTF9QQVRIKWNjcHBjICVEZWJ1Z01vZGVGbGFncyUgJVRvb2xGbGFncyUgJChBRERFRF9DRkxBR1MpICVJbmNsdWRlcyUgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gJU91dEZpbGUlIC1jICVJbkZpbGUlIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxjbWR8UFBDNDA1ZGlhYiIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWFzc2VtYmxlcnByZWZpeCUgJChUT09MX1BBVEgpZGNjICVEZWJ1Z01vZGVGbGFncyUgJVRvb2xGbGFncyUgJChBRERFRF9DRkxBR1MpICVJbmNsdWRlcyUgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gJU91dEZpbGUlIC1jICVJbkZpbGUlIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxjbWR8UFBDNDA1Z251IiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OzslYXNzZW1ibGVycHJlZml4JSAkKFRPT0xfUEFUSCljY3BwYyAlRGVidWdNb2RlRmxhZ3MlICVUb29sRmxhZ3MlICQoQURERURfQ0ZMQUdTKSAlSW5jbHVkZXMlICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICVPdXRGaWxlJSAtYyAlSW5GaWxlJSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxBc3NlbWJsZXJ8Y21kfFBQQzQwNXNmZGlhYiIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWFzc2VtYmxlcnByZWZpeCUgJChUT09MX1BBVEgpZGNjICVEZWJ1Z01vZGVGbGFncyUgJVRvb2xGbGFncyUgJChBRERFRF9DRkxBR1MpICVJbmNsdWRlcyUgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gJU91dEZpbGUlIC1jICVJbkZpbGUlIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxjbWR8UFBDNDA1c2ZnbnUiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7OyVhc3NlbWJsZXJwcmVmaXglICQoVE9PTF9QQVRIKWNjcHBjICVEZWJ1Z01vZGVGbGFncyUgJVRvb2xGbGFncyUgJChBRERFRF9DRkxBR1MpICVJbmNsdWRlcyUgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gJU91dEZpbGUlIC1jICVJbkZpbGUlIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxjbWR8UFBDNDQwZGlhYiIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWFzc2VtYmxlcnByZWZpeCUgJChUT09MX1BBVEgpZGNjICVEZWJ1Z01vZGVGbGFncyUgJVRvb2xGbGFncyUgJChBRERFRF9DRkxBR1MpICVJbmNsdWRlcyUgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gJU91dEZpbGUlIC1jICVJbkZpbGUlIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxjbWR8UFBDNDQwZ251IiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OzslYXNzZW1ibGVycHJlZml4JSAkKFRPT0xfUEFUSCljY3BwYyAlRGVidWdNb2RlRmxhZ3MlICVUb29sRmxhZ3MlICQoQURERURfQ0ZMQUdTKSAlSW5jbHVkZXMlICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICVPdXRGaWxlJSAtYyAlSW5GaWxlJSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxBc3NlbWJsZXJ8Y21kfFBQQzQ0MHNmZGlhYiIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWFzc2VtYmxlcnByZWZpeCUgJChUT09MX1BBVEgpZGNjICVEZWJ1Z01vZGVGbGFncyUgJVRvb2xGbGFncyUgJChBRERFRF9DRkxBR1MpICVJbmNsdWRlcyUgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gJU91dEZpbGUlIC1jICVJbkZpbGUlIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxjbWR8UFBDNDQwc2ZnbnUiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7OyVhc3NlbWJsZXJwcmVmaXglICQoVE9PTF9QQVRIKWNjcHBjICVEZWJ1Z01vZGVGbGFncyUgJVRvb2xGbGFncyUgJChBRERFRF9DRkxBR1MpICVJbmNsdWRlcyUgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gJU91dEZpbGUlIC1jICVJbkZpbGUlIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxjbWR8UFBDNjAzZGlhYiIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWFzc2VtYmxlcnByZWZpeCUgJChUT09MX1BBVEgpZGNjICVEZWJ1Z01vZGVGbGFncyUgJVRvb2xGbGFncyUgJChBRERFRF9DRkxBR1MpICVJbmNsdWRlcyUgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gJU91dEZpbGUlIC1jICVJbkZpbGUlIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxjbWR8UFBDNjAzZ251IiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OzslYXNzZW1ibGVycHJlZml4JSAkKFRPT0xfUEFUSCljY3BwYyAlRGVidWdNb2RlRmxhZ3MlICVUb29sRmxhZ3MlICQoQURERURfQ0ZMQUdTKSAlSW5jbHVkZXMlICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICVPdXRGaWxlJSAtYyAlSW5GaWxlJSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxBc3NlbWJsZXJ8Y21kfFBQQzYwNGRpYWIiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7OyVhc3NlbWJsZXJwcmVmaXglICQoVE9PTF9QQVRIKWRjYyAlRGVidWdNb2RlRmxhZ3MlICVUb29sRmxhZ3MlICQoQURERURfQ0ZMQUdTKSAlSW5jbHVkZXMlICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICVPdXRGaWxlJSAtYyAlSW5GaWxlJSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxBc3NlbWJsZXJ8Y21kfFBQQzYwNGdudSIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWFzc2VtYmxlcnByZWZpeCUgJChUT09MX1BBVEgpY2NwcGMgJURlYnVnTW9kZUZsYWdzJSAlVG9vbEZsYWdzJSAkKEFEREVEX0NGTEFHUykgJUluY2x1ZGVzJSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAlT3V0RmlsZSUgLWMgJUluRmlsZSUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfGNtZHxQUEM4NVhYZGlhYiIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWFzc2VtYmxlcnByZWZpeCUgJChUT09MX1BBVEgpZGNjICVEZWJ1Z01vZGVGbGFncyUgJVRvb2xGbGFncyUgJChBRERFRF9DRkxBR1MpICVJbmNsdWRlcyUgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gJU91dEZpbGUlIC1jICVJbkZpbGUlIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxjbWR8UFBDODVYWGdudSIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWFzc2VtYmxlcnByZWZpeCUgJChUT09MX1BBVEgpY2NwcGMgJURlYnVnTW9kZUZsYWdzJSAlVG9vbEZsYWdzJSAkKEFEREVEX0NGTEFHUykgJUluY2x1ZGVzJSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAlT3V0RmlsZSUgLWMgJUluRmlsZSUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfGNtZHxQUEM4NVhYc2ZkaWFiIiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OzslYXNzZW1ibGVycHJlZml4JSAkKFRPT0xfUEFUSClkY2MgJURlYnVnTW9kZUZsYWdzJSAlVG9vbEZsYWdzJSAkKEFEREVEX0NGTEFHUykgJUluY2x1ZGVzJSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAlT3V0RmlsZSUgLWMgJUluRmlsZSUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfGNtZHxQUEM4NVhYc2ZnbnUiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7OyVhc3NlbWJsZXJwcmVmaXglICQoVE9PTF9QQVRIKWNjcHBjICVEZWJ1Z01vZGVGbGFncyUgJVRvb2xGbGFncyUgJChBRERFRF9DRkxBR1MpICVJbmNsdWRlcyUgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gJU91dEZpbGUlIC1jICVJbkZpbGUlIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxjbWR8UFBDODYwc2ZkaWFiIiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OzslYXNzZW1ibGVycHJlZml4JSAkKFRPT0xfUEFUSClkY2MgJURlYnVnTW9kZUZsYWdzJSAlVG9vbEZsYWdzJSAkKEFEREVEX0NGTEFHUykgJUluY2x1ZGVzJSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAlT3V0RmlsZSUgLWMgJUluRmlsZSUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfGNtZHxQUEM4NjBzZmdudSIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWFzc2VtYmxlcnByZWZpeCUgJChUT09MX1BBVEgpY2NwcGMgJURlYnVnTW9kZUZsYWdzJSAlVG9vbEZsYWdzJSAkKEFEREVEX0NGTEFHUykgJUluY2x1ZGVzJSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAlT3V0RmlsZSUgLWMgJUluRmlsZSUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfGNtZHxTSU1MSU5VWGRpYWIiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7OyVhc3NlbWJsZXJwcmVmaXglICQoVE9PTF9QQVRIKWRjYyAlRGVidWdNb2RlRmxhZ3MlICVUb29sRmxhZ3MlICQoQURERURfQ0ZMQUdTKSAlSW5jbHVkZXMlICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICVPdXRGaWxlJSAtYyAlSW5GaWxlJSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxBc3NlbWJsZXJ8Y21kfFNJTUxJTlVYZ251IiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OzslYXNzZW1ibGVycHJlZml4JSAkKFRPT0xfUEFUSCljY3BlbnRpdW0gJURlYnVnTW9kZUZsYWdzJSAlVG9vbEZsYWdzJSAkKEFEREVEX0NGTEFHUykgJUluY2x1ZGVzJSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAlT3V0RmlsZSUgLWMgJUluRmlsZSUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfGNtZHxTSU1OVGRpYWIiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7OyVhc3NlbWJsZXJwcmVmaXglICQoVE9PTF9QQVRIKWRjYyAlRGVidWdNb2RlRmxhZ3MlICVUb29sRmxhZ3MlICQoQURERURfQ0ZMQUdTKSAlSW5jbHVkZXMlICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICVPdXRGaWxlJSAtYyAlSW5GaWxlJSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxBc3NlbWJsZXJ8Y21kfFNJTU5UZ251IiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OzslYXNzZW1ibGVycHJlZml4JSAkKFRPT0xfUEFUSCljY3BlbnRpdW0gJURlYnVnTW9kZUZsYWdzJSAlVG9vbEZsYWdzJSAkKEFEREVEX0NGTEFHUykgJUluY2x1ZGVzJSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAlT3V0RmlsZSUgLWMgJUluRmlsZSUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfGNtZHxTSU1TUEFSQ1NPTEFSSVNkaWFiIiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OzslYXNzZW1ibGVycHJlZml4JSAkKFRPT0xfUEFUSClkY2MgJURlYnVnTW9kZUZsYWdzJSAlVG9vbEZsYWdzJSAkKEFEREVEX0NGTEFHUykgJUluY2x1ZGVzJSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAlT3V0RmlsZSUgLWMgJUluRmlsZSUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfGNtZHxTSU1TUEFSQ1NPTEFSSVNnbnUiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7OyVhc3NlbWJsZXJwcmVmaXglICQoVE9PTF9QQVRIKWNjc3BhcmMgJURlYnVnTW9kZUZsYWdzJSAlVG9vbEZsYWdzJSAkKEFEREVEX0NGTEFHUykgJUluY2x1ZGVzJSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAlT3V0RmlsZSUgLWMgJUluRmlsZSUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfGRiZ0ZsYWdzfFBQQzMyZGlhYiIgdmFsdWU9Ii1nIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxkYmdGbGFnc3xQUEMzMmdudSIgdmFsdWU9Ii1nIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxkYmdGbGFnc3xQUEMzMnNmZGlhYiIgdmFsdWU9Ii1nIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxkYmdGbGFnc3xQUEMzMnNmZ251IiB2YWx1ZT0iLWciLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfGRiZ0ZsYWdzfFBQQzQwM2RpYWIiIHZhbHVlPSItZyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxBc3NlbWJsZXJ8ZGJnRmxhZ3N8UFBDNDAzZ251IiB2YWx1ZT0iLWciLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfGRiZ0ZsYWdzfFBQQzQwNWRpYWIiIHZhbHVlPSItZyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxBc3NlbWJsZXJ8ZGJnRmxhZ3N8UFBDNDA1Z251IiB2YWx1ZT0iLWciLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfGRiZ0ZsYWdzfFBQQzQwNXNmZGlhYiIgdmFsdWU9Ii1nIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxkYmdGbGFnc3xQUEM0MDVzZmdudSIgdmFsdWU9Ii1nIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxkYmdGbGFnc3xQUEM0NDBkaWFiIiB2YWx1ZT0iLWciLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfGRiZ0ZsYWdzfFBQQzQ0MGdudSIgdmFsdWU9Ii1nIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxkYmdGbGFnc3xQUEM0NDBzZmRpYWIiIHZhbHVlPSItZyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxBc3NlbWJsZXJ8ZGJnRmxhZ3N8UFBDNDQwc2ZnbnUiIHZhbHVlPSItZyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxBc3NlbWJsZXJ8ZGJnRmxhZ3N8UFBDNjAzZGlhYiIgdmFsdWU9Ii1nIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxkYmdGbGFnc3xQUEM2MDNnbnUiIHZhbHVlPSItZyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxBc3NlbWJsZXJ8ZGJnRmxhZ3N8UFBDNjA0ZGlhYiIgdmFsdWU9Ii1nIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxkYmdGbGFnc3xQUEM2MDRnbnUiIHZhbHVlPSItZyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxBc3NlbWJsZXJ8ZGJnRmxhZ3N8UFBDODVYWGRpYWIiIHZhbHVlPSItZyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxBc3NlbWJsZXJ8ZGJnRmxhZ3N8UFBDODVYWGdudSIgdmFsdWU9Ii1nIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxkYmdGbGFnc3xQUEM4NVhYc2ZkaWFiIiB2YWx1ZT0iLWciLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfGRiZ0ZsYWdzfFBQQzg1WFhzZmdudSIgdmFsdWU9Ii1nIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxkYmdGbGFnc3xQUEM4NjBzZmRpYWIiIHZhbHVlPSItZyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxBc3NlbWJsZXJ8ZGJnRmxhZ3N8UFBDODYwc2ZnbnUiIHZhbHVlPSItZyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxBc3NlbWJsZXJ8ZGJnRmxhZ3N8U0lNTElOVVhkaWFiIiB2YWx1ZT0iLWciLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfGRiZ0ZsYWdzfFNJTUxJTlVYZ251IiB2YWx1ZT0iLWciLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfGRiZ0ZsYWdzfFNJTU5UZGlhYiIgdmFsdWU9Ii1nIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxkYmdGbGFnc3xTSU1OVGdudSIgdmFsdWU9Ii1nIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxkYmdGbGFnc3xTSU1TUEFSQ1NPTEFSSVNkaWFiIiB2YWx1ZT0iLWciLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfGRiZ0ZsYWdzfFNJTVNQQVJDU09MQVJJU2dudSIgdmFsdWU9Ii1nIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxkZXJpdmVkU2lnc3xQUEMzMmRpYWIiIHZhbHVlPSIqLm8iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfGRlcml2ZWRTaWdzfFBQQzMyZ251IiB2YWx1ZT0iKi5vIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxkZXJpdmVkU2lnc3xQUEMzMnNmZGlhYiIgdmFsdWU9IioubyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxBc3NlbWJsZXJ8ZGVyaXZlZFNpZ3N8UFBDMzJzZmdudSIgdmFsdWU9IioubyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxBc3NlbWJsZXJ8ZGVyaXZlZFNpZ3N8UFBDNDAzZGlhYiIgdmFsdWU9IioubyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxBc3NlbWJsZXJ8ZGVyaXZlZFNpZ3N8UFBDNDAzZ251IiB2YWx1ZT0iKi5vIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxkZXJpdmVkU2lnc3xQUEM0MDVkaWFiIiB2YWx1ZT0iKi5vIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxkZXJpdmVkU2lnc3xQUEM0MDVnbnUiIHZhbHVlPSIqLm8iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfGRlcml2ZWRTaWdzfFBQQzQwNXNmZGlhYiIgdmFsdWU9IioubyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxBc3NlbWJsZXJ8ZGVyaXZlZFNpZ3N8UFBDNDA1c2ZnbnUiIHZhbHVlPSIqLm8iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfGRlcml2ZWRTaWdzfFBQQzQ0MGRpYWIiIHZhbHVlPSIqLm8iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfGRlcml2ZWRTaWdzfFBQQzQ0MGdudSIgdmFsdWU9IioubyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxBc3NlbWJsZXJ8ZGVyaXZlZFNpZ3N8UFBDNDQwc2ZkaWFiIiB2YWx1ZT0iKi5vIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxkZXJpdmVkU2lnc3xQUEM0NDBzZmdudSIgdmFsdWU9IioubyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxBc3NlbWJsZXJ8ZGVyaXZlZFNpZ3N8UFBDNjAzZGlhYiIgdmFsdWU9IioubyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxBc3NlbWJsZXJ8ZGVyaXZlZFNpZ3N8UFBDNjAzZ251IiB2YWx1ZT0iKi5vIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxkZXJpdmVkU2lnc3xQUEM2MDRkaWFiIiB2YWx1ZT0iKi5vIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxkZXJpdmVkU2lnc3xQUEM2MDRnbnUiIHZhbHVlPSIqLm8iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfGRlcml2ZWRTaWdzfFBQQzg1WFhkaWFiIiB2YWx1ZT0iKi5vIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxkZXJpdmVkU2lnc3xQUEM4NVhYZ251IiB2YWx1ZT0iKi5vIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxkZXJpdmVkU2lnc3xQUEM4NVhYc2ZkaWFiIiB2YWx1ZT0iKi5vIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxkZXJpdmVkU2lnc3xQUEM4NVhYc2ZnbnUiIHZhbHVlPSIqLm8iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfGRlcml2ZWRTaWdzfFBQQzg2MHNmZGlhYiIgdmFsdWU9IioubyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxBc3NlbWJsZXJ8ZGVyaXZlZFNpZ3N8UFBDODYwc2ZnbnUiIHZhbHVlPSIqLm8iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfGRlcml2ZWRTaWdzfFNJTUxJTlVYZGlhYiIgdmFsdWU9IioubyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxBc3NlbWJsZXJ8ZGVyaXZlZFNpZ3N8U0lNTElOVVhnbnUiIHZhbHVlPSIqLm8iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfGRlcml2ZWRTaWdzfFNJTU5UZGlhYiIgdmFsdWU9IioubyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxBc3NlbWJsZXJ8ZGVyaXZlZFNpZ3N8U0lNTlRnbnUiIHZhbHVlPSIqLm8iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfGRlcml2ZWRTaWdzfFNJTVNQQVJDU09MQVJJU2RpYWIiIHZhbHVlPSIqLm8iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfGRlcml2ZWRTaWdzfFNJTVNQQVJDU09MQVJJU2dudSIgdmFsdWU9IioubyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxBc3NlbWJsZXJ8ZmxhZ3N8UFBDMzJkaWFiIiB2YWx1ZT0iJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YcHJlcHJvY2Vzcy1hc3NlbWJseSAtWGNwcC1uby1zcGFjZSAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxmbGFnc3xQUEMzMmdudSIgdmFsdWU9IiQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAgIC14YXNzZW1ibGVyLXdpdGgtY3BwIC1NRCAtTVAiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfGZsYWdzfFBQQzMyc2ZkaWFiIiB2YWx1ZT0iJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1Yc3Rzdy1zbG93IC1YcHJlcHJvY2Vzcy1hc3NlbWJseSAtWGNwcC1uby1zcGFjZSAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxmbGFnc3xQUEMzMnNmZ251IiB2YWx1ZT0iJChDQ19BUkNIX1NQRUMpIC1hbnNpICAgLXhhc3NlbWJsZXItd2l0aC1jcHAgLU1EIC1NUCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxBc3NlbWJsZXJ8ZmxhZ3N8UFBDNDAzZGlhYiIgdmFsdWU9IiQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWHByZXByb2Nlc3MtYXNzZW1ibHkgLVhjcHAtbm8tc3BhY2UgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxBc3NlbWJsZXJ8ZmxhZ3N8UFBDNDAzZ251IiB2YWx1ZT0iJChDQ19BUkNIX1NQRUMpIC1hbnNpICAgLXhhc3NlbWJsZXItd2l0aC1jcHAgLU1EIC1NUCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxBc3NlbWJsZXJ8ZmxhZ3N8UFBDNDA1ZGlhYiIgdmFsdWU9IiQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWHByZXByb2Nlc3MtYXNzZW1ibHkgLVhjcHAtbm8tc3BhY2UgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxBc3NlbWJsZXJ8ZmxhZ3N8UFBDNDA1Z251IiB2YWx1ZT0iJChDQ19BUkNIX1NQRUMpIC1hbnNpICAgLXhhc3NlbWJsZXItd2l0aC1jcHAgLU1EIC1NUCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxBc3NlbWJsZXJ8ZmxhZ3N8UFBDNDA1c2ZkaWFiIiB2YWx1ZT0iJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YcHJlcHJvY2Vzcy1hc3NlbWJseSAtWGNwcC1uby1zcGFjZSAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxmbGFnc3xQUEM0MDVzZmdudSIgdmFsdWU9IiQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAgIC14YXNzZW1ibGVyLXdpdGgtY3BwIC1NRCAtTVAiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfGZsYWdzfFBQQzQ0MGRpYWIiIHZhbHVlPSIkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhwcmVwcm9jZXNzLWFzc2VtYmx5IC1YY3BwLW5vLXNwYWNlICAtWG1ha2UtZGVwZW5kZW5jeT0weGQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfGZsYWdzfFBQQzQ0MGdudSIgdmFsdWU9IiQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAgIC14YXNzZW1ibGVyLXdpdGgtY3BwIC1NRCAtTVAiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfGZsYWdzfFBQQzQ0MHNmZGlhYiIgdmFsdWU9IiQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWHByZXByb2Nlc3MtYXNzZW1ibHkgLVhjcHAtbm8tc3BhY2UgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxBc3NlbWJsZXJ8ZmxhZ3N8UFBDNDQwc2ZnbnUiIHZhbHVlPSIkKENDX0FSQ0hfU1BFQykgLWFuc2kgICAteGFzc2VtYmxlci13aXRoLWNwcCAtTUQgLU1QIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxmbGFnc3xQUEM2MDNkaWFiIiB2YWx1ZT0iJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YcHJlcHJvY2Vzcy1hc3NlbWJseSAtWGNwcC1uby1zcGFjZSAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxmbGFnc3xQUEM2MDNnbnUiIHZhbHVlPSIkKENDX0FSQ0hfU1BFQykgLWFuc2kgICAteGFzc2VtYmxlci13aXRoLWNwcCAtTUQgLU1QIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxmbGFnc3xQUEM2MDRkaWFiIiB2YWx1ZT0iJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YcHJlcHJvY2Vzcy1hc3NlbWJseSAtWGNwcC1uby1zcGFjZSAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxmbGFnc3xQUEM2MDRnbnUiIHZhbHVlPSIkKENDX0FSQ0hfU1BFQykgLWFuc2kgICAteGFzc2VtYmxlci13aXRoLWNwcCAtTUQgLU1QIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxmbGFnc3xQUEM4NVhYZGlhYiIgdmFsdWU9IiQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWHByZXByb2Nlc3MtYXNzZW1ibHkgLVhjcHAtbm8tc3BhY2UgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxBc3NlbWJsZXJ8ZmxhZ3N8UFBDODVYWGdudSIgdmFsdWU9IiQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAgIC14YXNzZW1ibGVyLXdpdGgtY3BwIC1NRCAtTVAiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfGZsYWdzfFBQQzg1WFhzZmRpYWIiIHZhbHVlPSIkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhwcmVwcm9jZXNzLWFzc2VtYmx5IC1YY3BwLW5vLXNwYWNlICAtWG1ha2UtZGVwZW5kZW5jeT0weGQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfGZsYWdzfFBQQzg1WFhzZmdudSIgdmFsdWU9IiQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAgIC14YXNzZW1ibGVyLXdpdGgtY3BwIC1NRCAtTVAiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfGZsYWdzfFBQQzg2MHNmZGlhYiIgdmFsdWU9IiQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWHByZXByb2Nlc3MtYXNzZW1ibHkgLVhjcHAtbm8tc3BhY2UgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxBc3NlbWJsZXJ8ZmxhZ3N8UFBDODYwc2ZnbnUiIHZhbHVlPSIkKENDX0FSQ0hfU1BFQykgLWFuc2kgICAteGFzc2VtYmxlci13aXRoLWNwcCAtTUQgLU1QIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxmbGFnc3xTSU1MSU5VWGRpYWIiIHZhbHVlPSIkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhwcmVwcm9jZXNzLWFzc2VtYmx5IC1YY3BwLW5vLXNwYWNlIC1XYSwtWG1uZW0tbWl0IC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxBc3NlbWJsZXJ8ZmxhZ3N8U0lNTElOVVhnbnUiIHZhbHVlPSIkKENDX0FSQ0hfU1BFQykgLWFuc2kgICAteGFzc2VtYmxlci13aXRoLWNwcCAtTUQgLU1QIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxmbGFnc3xTSU1OVGRpYWIiIHZhbHVlPSIkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhwcmVwcm9jZXNzLWFzc2VtYmx5IC1YY3BwLW5vLXNwYWNlIC1XYSwtWG1uZW0tbWl0IC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxBc3NlbWJsZXJ8ZmxhZ3N8U0lNTlRnbnUiIHZhbHVlPSIkKENDX0FSQ0hfU1BFQykgLWFuc2kgICAteGFzc2VtYmxlci13aXRoLWNwcCAtTUQgLU1QIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxmbGFnc3xTSU1TUEFSQ1NPTEFSSVNkaWFiIiB2YWx1ZT0iJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YcHJlcHJvY2Vzcy1hc3NlbWJseSAtWGNwcC1uby1zcGFjZSAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxmbGFnc3xTSU1TUEFSQ1NPTEFSSVNnbnUiIHZhbHVlPSIkKENDX0FSQ0hfU1BFQykgLWFuc2kgICAteGFzc2VtYmxlci13aXRoLWNwcCAtTUQgLU1QIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxub25EYmdGbGFnc3xQUEMzMmRpYWIiIHZhbHVlPSItWE8gLVhzaXplLW9wdCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxBc3NlbWJsZXJ8bm9uRGJnRmxhZ3N8UFBDMzJnbnUiIHZhbHVlPSItTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxub25EYmdGbGFnc3xQUEMzMnNmZGlhYiIgdmFsdWU9Ii1YTyAtWHNpemUtb3B0Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxub25EYmdGbGFnc3xQUEMzMnNmZ251IiB2YWx1ZT0iLU8yIC1mc3RyZW5ndGgtcmVkdWNlIC1mbm8tYnVpbHRpbiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxBc3NlbWJsZXJ8bm9uRGJnRmxhZ3N8UFBDNDAzZGlhYiIgdmFsdWU9Ii1YTyAtWHNpemUtb3B0Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxub25EYmdGbGFnc3xQUEM0MDNnbnUiIHZhbHVlPSItTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxub25EYmdGbGFnc3xQUEM0MDVkaWFiIiB2YWx1ZT0iLVhPIC1Yc2l6ZS1vcHQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfG5vbkRiZ0ZsYWdzfFBQQzQwNWdudSIgdmFsdWU9Ii1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfG5vbkRiZ0ZsYWdzfFBQQzQwNXNmZGlhYiIgdmFsdWU9Ii1YTyAtWHNpemUtb3B0Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxub25EYmdGbGFnc3xQUEM0MDVzZmdudSIgdmFsdWU9Ii1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfG5vbkRiZ0ZsYWdzfFBQQzQ0MGRpYWIiIHZhbHVlPSItWE8gLVhzaXplLW9wdCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxBc3NlbWJsZXJ8bm9uRGJnRmxhZ3N8UFBDNDQwZ251IiB2YWx1ZT0iLU8yIC1mc3RyZW5ndGgtcmVkdWNlIC1mbm8tYnVpbHRpbiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxBc3NlbWJsZXJ8bm9uRGJnRmxhZ3N8UFBDNDQwc2ZkaWFiIiB2YWx1ZT0iLVhPIC1Yc2l6ZS1vcHQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfG5vbkRiZ0ZsYWdzfFBQQzQ0MHNmZ251IiB2YWx1ZT0iLU8yIC1mc3RyZW5ndGgtcmVkdWNlIC1mbm8tYnVpbHRpbiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxBc3NlbWJsZXJ8bm9uRGJnRmxhZ3N8UFBDNjAzZGlhYiIgdmFsdWU9Ii1YTyAtWHNpemUtb3B0Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxub25EYmdGbGFnc3xQUEM2MDNnbnUiIHZhbHVlPSItTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxub25EYmdGbGFnc3xQUEM2MDRkaWFiIiB2YWx1ZT0iLVhPIC1Yc2l6ZS1vcHQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfG5vbkRiZ0ZsYWdzfFBQQzYwNGdudSIgdmFsdWU9Ii1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfG5vbkRiZ0ZsYWdzfFBQQzg1WFhkaWFiIiB2YWx1ZT0iLVhPIC1Yc2l6ZS1vcHQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfG5vbkRiZ0ZsYWdzfFBQQzg1WFhnbnUiIHZhbHVlPSItTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxub25EYmdGbGFnc3xQUEM4NVhYc2ZkaWFiIiB2YWx1ZT0iLVhPIC1Yc2l6ZS1vcHQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfG5vbkRiZ0ZsYWdzfFBQQzg1WFhzZmdudSIgdmFsdWU9Ii1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfG5vbkRiZ0ZsYWdzfFBQQzg2MHNmZGlhYiIgdmFsdWU9Ii1YTyAtWHNpemUtb3B0Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxub25EYmdGbGFnc3xQUEM4NjBzZmdudSIgdmFsdWU9Ii1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfG5vbkRiZ0ZsYWdzfFNJTUxJTlVYZGlhYiIgdmFsdWU9Ii1YTyAtWHNpemUtb3B0Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxub25EYmdGbGFnc3xTSU1MSU5VWGdudSIgdmFsdWU9Ii1PMiAtbm9zdGRsaWIgLWZuby1idWlsdGluIC1mbm8tZGVmZXItcG9wIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxub25EYmdGbGFnc3xTSU1OVGRpYWIiIHZhbHVlPSItWE8gLVhzaXplLW9wdCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxBc3NlbWJsZXJ8bm9uRGJnRmxhZ3N8U0lNTlRnbnUiIHZhbHVlPSItTzIgLW5vc3RkbGliIC1mbm8tYnVpbHRpbiAtZm5vLWRlZmVyLXBvcCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxBc3NlbWJsZXJ8bm9uRGJnRmxhZ3N8U0lNU1BBUkNTT0xBUklTZGlhYiIgdmFsdWU9Ii1YTyAtWHNpemUtb3B0Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxub25EYmdGbGFnc3xTSU1TUEFSQ1NPTEFSSVNnbnUiIHZhbHVlPSItTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluIi8+DQorICAgICAgICAgICAgPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxBc3NlbWJsZXJ8b2JqZWN0IiB2YWx1ZT0idHJ1ZSIvPg0KKyAgICAgICAgICAgIDxib29sZWFuQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfHBhc3NBYmxlIiB2YWx1ZT0iZmFsc2UiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfHNpZ3MiIHZhbHVlPSIqLnMiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfGNtZHxQUEMzMmRpYWIiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7OyVjcHBjb21waWxlcnByZWZpeCUgJChUT09MX1BBVEgpZGNjICVEZWJ1Z01vZGVGbGFncyUgJVRvb2xGbGFncyUgJChBRERFRF9DKytGTEFHUykgJUluY2x1ZGVzJSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAlT3V0RmlsZSUgLWMgJUluRmlsZSUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfGNtZHxQUEMzMmdudSIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWNwcGNvbXBpbGVycHJlZml4JSAkKFRPT0xfUEFUSCljY3BwYyAlRGVidWdNb2RlRmxhZ3MlICVUb29sRmxhZ3MlICQoQURERURfQysrRkxBR1MpICVJbmNsdWRlcyUgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gJU91dEZpbGUlIC1jICVJbkZpbGUlIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxjbWR8UFBDMzJzZmRpYWIiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7OyVjcHBjb21waWxlcnByZWZpeCUgJChUT09MX1BBVEgpZGNjICVEZWJ1Z01vZGVGbGFncyUgJVRvb2xGbGFncyUgJChBRERFRF9DKytGTEFHUykgJUluY2x1ZGVzJSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAlT3V0RmlsZSUgLWMgJUluRmlsZSUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfGNtZHxQUEMzMnNmZ251IiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OzslY3BwY29tcGlsZXJwcmVmaXglICQoVE9PTF9QQVRIKWNjcHBjICVEZWJ1Z01vZGVGbGFncyUgJVRvb2xGbGFncyUgJChBRERFRF9DKytGTEFHUykgJUluY2x1ZGVzJSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAlT3V0RmlsZSUgLWMgJUluRmlsZSUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfGNtZHxQUEM0MDNkaWFiIiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OzslY3BwY29tcGlsZXJwcmVmaXglICQoVE9PTF9QQVRIKWRjYyAlRGVidWdNb2RlRmxhZ3MlICVUb29sRmxhZ3MlICQoQURERURfQysrRkxBR1MpICVJbmNsdWRlcyUgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gJU91dEZpbGUlIC1jICVJbkZpbGUlIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxjbWR8UFBDNDAzZ251IiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OzslY3BwY29tcGlsZXJwcmVmaXglICQoVE9PTF9QQVRIKWNjcHBjICVEZWJ1Z01vZGVGbGFncyUgJVRvb2xGbGFncyUgJChBRERFRF9DKytGTEFHUykgJUluY2x1ZGVzJSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAlT3V0RmlsZSUgLWMgJUluRmlsZSUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfGNtZHxQUEM0MDVkaWFiIiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OzslY3BwY29tcGlsZXJwcmVmaXglICQoVE9PTF9QQVRIKWRjYyAlRGVidWdNb2RlRmxhZ3MlICVUb29sRmxhZ3MlICQoQURERURfQysrRkxBR1MpICVJbmNsdWRlcyUgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gJU91dEZpbGUlIC1jICVJbkZpbGUlIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxjbWR8UFBDNDA1Z251IiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OzslY3BwY29tcGlsZXJwcmVmaXglICQoVE9PTF9QQVRIKWNjcHBjICVEZWJ1Z01vZGVGbGFncyUgJVRvb2xGbGFncyUgJChBRERFRF9DKytGTEFHUykgJUluY2x1ZGVzJSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAlT3V0RmlsZSUgLWMgJUluRmlsZSUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfGNtZHxQUEM0MDVzZmRpYWIiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7OyVjcHBjb21waWxlcnByZWZpeCUgJChUT09MX1BBVEgpZGNjICVEZWJ1Z01vZGVGbGFncyUgJVRvb2xGbGFncyUgJChBRERFRF9DKytGTEFHUykgJUluY2x1ZGVzJSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAlT3V0RmlsZSUgLWMgJUluRmlsZSUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfGNtZHxQUEM0MDVzZmdudSIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWNwcGNvbXBpbGVycHJlZml4JSAkKFRPT0xfUEFUSCljY3BwYyAlRGVidWdNb2RlRmxhZ3MlICVUb29sRmxhZ3MlICQoQURERURfQysrRkxBR1MpICVJbmNsdWRlcyUgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gJU91dEZpbGUlIC1jICVJbkZpbGUlIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxjbWR8UFBDNDQwZGlhYiIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWNwcGNvbXBpbGVycHJlZml4JSAkKFRPT0xfUEFUSClkY2MgJURlYnVnTW9kZUZsYWdzJSAlVG9vbEZsYWdzJSAkKEFEREVEX0MrK0ZMQUdTKSAlSW5jbHVkZXMlICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICVPdXRGaWxlJSAtYyAlSW5GaWxlJSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8Y21kfFBQQzQ0MGdudSIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWNwcGNvbXBpbGVycHJlZml4JSAkKFRPT0xfUEFUSCljY3BwYyAlRGVidWdNb2RlRmxhZ3MlICVUb29sRmxhZ3MlICQoQURERURfQysrRkxBR1MpICVJbmNsdWRlcyUgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gJU91dEZpbGUlIC1jICVJbkZpbGUlIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxjbWR8UFBDNDQwc2ZkaWFiIiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OzslY3BwY29tcGlsZXJwcmVmaXglICQoVE9PTF9QQVRIKWRjYyAlRGVidWdNb2RlRmxhZ3MlICVUb29sRmxhZ3MlICQoQURERURfQysrRkxBR1MpICVJbmNsdWRlcyUgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gJU91dEZpbGUlIC1jICVJbkZpbGUlIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxjbWR8UFBDNDQwc2ZnbnUiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7OyVjcHBjb21waWxlcnByZWZpeCUgJChUT09MX1BBVEgpY2NwcGMgJURlYnVnTW9kZUZsYWdzJSAlVG9vbEZsYWdzJSAkKEFEREVEX0MrK0ZMQUdTKSAlSW5jbHVkZXMlICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICVPdXRGaWxlJSAtYyAlSW5GaWxlJSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8Y21kfFBQQzYwM2RpYWIiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7OyVjcHBjb21waWxlcnByZWZpeCUgJChUT09MX1BBVEgpZGNjICVEZWJ1Z01vZGVGbGFncyUgJVRvb2xGbGFncyUgJChBRERFRF9DKytGTEFHUykgJUluY2x1ZGVzJSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAlT3V0RmlsZSUgLWMgJUluRmlsZSUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfGNtZHxQUEM2MDNnbnUiIHZhbHVlPSIlY3BwY29tcGlsZXJwcmVmaXglICQoVE9PTF9QQVRIKWNjcHBjICVEZWJ1Z01vZGVGbGFncyUgJVRvb2xGbGFncyUgJChBRERFRF9DKytGTEFHUykgJUluY2x1ZGVzJSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMIC1EJ1NWTl9SRVY9JnF1b3Q7JChzaGVsbCBzdm52ZXJzaW9uIC1uIC4uKSZxdW90OycgJChERUZJTkVTKSAtbyAlT3V0RmlsZSUgLWMgJUluRmlsZSUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfGNtZHxQUEM2MDRkaWFiIiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OzslY3BwY29tcGlsZXJwcmVmaXglICQoVE9PTF9QQVRIKWRjYyAlRGVidWdNb2RlRmxhZ3MlICVUb29sRmxhZ3MlICQoQURERURfQysrRkxBR1MpICVJbmNsdWRlcyUgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gJU91dEZpbGUlIC1jICVJbkZpbGUlIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxjbWR8UFBDNjA0Z251IiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OzslY3BwY29tcGlsZXJwcmVmaXglICQoVE9PTF9QQVRIKWNjcHBjICVEZWJ1Z01vZGVGbGFncyUgJVRvb2xGbGFncyUgJChBRERFRF9DKytGTEFHUykgJUluY2x1ZGVzJSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAlT3V0RmlsZSUgLWMgJUluRmlsZSUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfGNtZHxQUEM4NVhYZGlhYiIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWNwcGNvbXBpbGVycHJlZml4JSAkKFRPT0xfUEFUSClkY2MgJURlYnVnTW9kZUZsYWdzJSAlVG9vbEZsYWdzJSAkKEFEREVEX0MrK0ZMQUdTKSAlSW5jbHVkZXMlICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICVPdXRGaWxlJSAtYyAlSW5GaWxlJSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8Y21kfFBQQzg1WFhnbnUiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7OyVjcHBjb21waWxlcnByZWZpeCUgJChUT09MX1BBVEgpY2NwcGMgJURlYnVnTW9kZUZsYWdzJSAlVG9vbEZsYWdzJSAkKEFEREVEX0MrK0ZMQUdTKSAlSW5jbHVkZXMlICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICVPdXRGaWxlJSAtYyAlSW5GaWxlJSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8Y21kfFBQQzg1WFhzZmRpYWIiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7OyVjcHBjb21waWxlcnByZWZpeCUgJChUT09MX1BBVEgpZGNjICVEZWJ1Z01vZGVGbGFncyUgJVRvb2xGbGFncyUgJChBRERFRF9DKytGTEFHUykgJUluY2x1ZGVzJSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAlT3V0RmlsZSUgLWMgJUluRmlsZSUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfGNtZHxQUEM4NVhYc2ZnbnUiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7OyVjcHBjb21waWxlcnByZWZpeCUgJChUT09MX1BBVEgpY2NwcGMgJURlYnVnTW9kZUZsYWdzJSAlVG9vbEZsYWdzJSAkKEFEREVEX0MrK0ZMQUdTKSAlSW5jbHVkZXMlICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICVPdXRGaWxlJSAtYyAlSW5GaWxlJSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8Y21kfFBQQzg2MHNmZGlhYiIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWNwcGNvbXBpbGVycHJlZml4JSAkKFRPT0xfUEFUSClkY2MgJURlYnVnTW9kZUZsYWdzJSAlVG9vbEZsYWdzJSAkKEFEREVEX0MrK0ZMQUdTKSAlSW5jbHVkZXMlICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICVPdXRGaWxlJSAtYyAlSW5GaWxlJSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8Y21kfFBQQzg2MHNmZ251IiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OzslY3BwY29tcGlsZXJwcmVmaXglICQoVE9PTF9QQVRIKWNjcHBjICVEZWJ1Z01vZGVGbGFncyUgJVRvb2xGbGFncyUgJChBRERFRF9DKytGTEFHUykgJUluY2x1ZGVzJSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAlT3V0RmlsZSUgLWMgJUluRmlsZSUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfGNtZHxTSU1MSU5VWGRpYWIiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7OyVjcHBjb21waWxlcnByZWZpeCUgJChUT09MX1BBVEgpZGNjICVEZWJ1Z01vZGVGbGFncyUgJVRvb2xGbGFncyUgJChBRERFRF9DKytGTEFHUykgJUluY2x1ZGVzJSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAlT3V0RmlsZSUgLWMgJUluRmlsZSUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfGNtZHxTSU1MSU5VWGdudSIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWNwcGNvbXBpbGVycHJlZml4JSAkKFRPT0xfUEFUSCljY3BlbnRpdW0gJURlYnVnTW9kZUZsYWdzJSAlVG9vbEZsYWdzJSAkKEFEREVEX0MrK0ZMQUdTKSAlSW5jbHVkZXMlICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICVPdXRGaWxlJSAtYyAlSW5GaWxlJSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8Y21kfFNJTU5UZGlhYiIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWNwcGNvbXBpbGVycHJlZml4JSAkKFRPT0xfUEFUSClkY2MgJURlYnVnTW9kZUZsYWdzJSAlVG9vbEZsYWdzJSAkKEFEREVEX0MrK0ZMQUdTKSAlSW5jbHVkZXMlICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICVPdXRGaWxlJSAtYyAlSW5GaWxlJSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8Y21kfFNJTU5UZ251IiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OzslY3BwY29tcGlsZXJwcmVmaXglICQoVE9PTF9QQVRIKWNjcGVudGl1bSAlRGVidWdNb2RlRmxhZ3MlICVUb29sRmxhZ3MlICQoQURERURfQysrRkxBR1MpICVJbmNsdWRlcyUgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gJU91dEZpbGUlIC1jICVJbkZpbGUlIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxjbWR8U0lNU1BBUkNTT0xBUklTZGlhYiIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWNwcGNvbXBpbGVycHJlZml4JSAkKFRPT0xfUEFUSClkY2MgJURlYnVnTW9kZUZsYWdzJSAlVG9vbEZsYWdzJSAkKEFEREVEX0MrK0ZMQUdTKSAlSW5jbHVkZXMlICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICVPdXRGaWxlJSAtYyAlSW5GaWxlJSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8Y21kfFNJTVNQQVJDU09MQVJJU2dudSIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWNwcGNvbXBpbGVycHJlZml4JSAkKFRPT0xfUEFUSCljY3NwYXJjICVEZWJ1Z01vZGVGbGFncyUgJVRvb2xGbGFncyUgJChBRERFRF9DKytGTEFHUykgJUluY2x1ZGVzJSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAlT3V0RmlsZSUgLWMgJUluRmlsZSUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfGRiZ0ZsYWdzfFBQQzMyZGlhYiIgdmFsdWU9Ii1nIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxkYmdGbGFnc3xQUEMzMmdudSIgdmFsdWU9Ii1nIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxkYmdGbGFnc3xQUEMzMnNmZGlhYiIgdmFsdWU9Ii1nIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxkYmdGbGFnc3xQUEMzMnNmZ251IiB2YWx1ZT0iLWciLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfGRiZ0ZsYWdzfFBQQzQwM2RpYWIiIHZhbHVlPSItZyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8ZGJnRmxhZ3N8UFBDNDAzZ251IiB2YWx1ZT0iLWciLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfGRiZ0ZsYWdzfFBQQzQwNWRpYWIiIHZhbHVlPSItZyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8ZGJnRmxhZ3N8UFBDNDA1Z251IiB2YWx1ZT0iLWciLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfGRiZ0ZsYWdzfFBQQzQwNXNmZGlhYiIgdmFsdWU9Ii1nIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxkYmdGbGFnc3xQUEM0MDVzZmdudSIgdmFsdWU9Ii1nIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxkYmdGbGFnc3xQUEM0NDBkaWFiIiB2YWx1ZT0iLWciLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfGRiZ0ZsYWdzfFBQQzQ0MGdudSIgdmFsdWU9Ii1nIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxkYmdGbGFnc3xQUEM0NDBzZmRpYWIiIHZhbHVlPSItZyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8ZGJnRmxhZ3N8UFBDNDQwc2ZnbnUiIHZhbHVlPSItZyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8ZGJnRmxhZ3N8UFBDNjAzZGlhYiIgdmFsdWU9Ii1nIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxkYmdGbGFnc3xQUEM2MDNnbnUiIHZhbHVlPSItZyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8ZGJnRmxhZ3N8UFBDNjA0ZGlhYiIgdmFsdWU9Ii1nIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxkYmdGbGFnc3xQUEM2MDRnbnUiIHZhbHVlPSItZyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8ZGJnRmxhZ3N8UFBDODVYWGRpYWIiIHZhbHVlPSItZyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8ZGJnRmxhZ3N8UFBDODVYWGdudSIgdmFsdWU9Ii1nIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxkYmdGbGFnc3xQUEM4NVhYc2ZkaWFiIiB2YWx1ZT0iLWciLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfGRiZ0ZsYWdzfFBQQzg1WFhzZmdudSIgdmFsdWU9Ii1nIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxkYmdGbGFnc3xQUEM4NjBzZmRpYWIiIHZhbHVlPSItZyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8ZGJnRmxhZ3N8UFBDODYwc2ZnbnUiIHZhbHVlPSItZyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8ZGJnRmxhZ3N8U0lNTElOVVhkaWFiIiB2YWx1ZT0iLWciLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfGRiZ0ZsYWdzfFNJTUxJTlVYZ251IiB2YWx1ZT0iLWciLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfGRiZ0ZsYWdzfFNJTU5UZGlhYiIgdmFsdWU9Ii1nIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxkYmdGbGFnc3xTSU1OVGdudSIgdmFsdWU9Ii1nIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxkYmdGbGFnc3xTSU1TUEFSQ1NPTEFSSVNkaWFiIiB2YWx1ZT0iLWciLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfGRiZ0ZsYWdzfFNJTVNQQVJDU09MQVJJU2dudSIgdmFsdWU9Ii1nIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxkZXJpdmVkU2lnc3xQUEMzMmRpYWIiIHZhbHVlPSIqLm8iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfGRlcml2ZWRTaWdzfFBQQzMyZ251IiB2YWx1ZT0iKi5vIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxkZXJpdmVkU2lnc3xQUEMzMnNmZGlhYiIgdmFsdWU9IioubyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8ZGVyaXZlZFNpZ3N8UFBDMzJzZmdudSIgdmFsdWU9IioubyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8ZGVyaXZlZFNpZ3N8UFBDNDAzZGlhYiIgdmFsdWU9IioubyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8ZGVyaXZlZFNpZ3N8UFBDNDAzZ251IiB2YWx1ZT0iKi5vIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxkZXJpdmVkU2lnc3xQUEM0MDVkaWFiIiB2YWx1ZT0iKi5vIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxkZXJpdmVkU2lnc3xQUEM0MDVnbnUiIHZhbHVlPSIqLm8iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfGRlcml2ZWRTaWdzfFBQQzQwNXNmZGlhYiIgdmFsdWU9IioubyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8ZGVyaXZlZFNpZ3N8UFBDNDA1c2ZnbnUiIHZhbHVlPSIqLm8iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfGRlcml2ZWRTaWdzfFBQQzQ0MGRpYWIiIHZhbHVlPSIqLm8iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfGRlcml2ZWRTaWdzfFBQQzQ0MGdudSIgdmFsdWU9IioubyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8ZGVyaXZlZFNpZ3N8UFBDNDQwc2ZkaWFiIiB2YWx1ZT0iKi5vIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxkZXJpdmVkU2lnc3xQUEM0NDBzZmdudSIgdmFsdWU9IioubyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8ZGVyaXZlZFNpZ3N8UFBDNjAzZGlhYiIgdmFsdWU9IioubyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8ZGVyaXZlZFNpZ3N8UFBDNjAzZ251IiB2YWx1ZT0iKi5vIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxkZXJpdmVkU2lnc3xQUEM2MDRkaWFiIiB2YWx1ZT0iKi5vIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxkZXJpdmVkU2lnc3xQUEM2MDRnbnUiIHZhbHVlPSIqLm8iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfGRlcml2ZWRTaWdzfFBQQzg1WFhkaWFiIiB2YWx1ZT0iKi5vIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxkZXJpdmVkU2lnc3xQUEM4NVhYZ251IiB2YWx1ZT0iKi5vIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxkZXJpdmVkU2lnc3xQUEM4NVhYc2ZkaWFiIiB2YWx1ZT0iKi5vIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxkZXJpdmVkU2lnc3xQUEM4NVhYc2ZnbnUiIHZhbHVlPSIqLm8iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfGRlcml2ZWRTaWdzfFBQQzg2MHNmZGlhYiIgdmFsdWU9IioubyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8ZGVyaXZlZFNpZ3N8UFBDODYwc2ZnbnUiIHZhbHVlPSIqLm8iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfGRlcml2ZWRTaWdzfFNJTUxJTlVYZGlhYiIgdmFsdWU9IioubyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8ZGVyaXZlZFNpZ3N8U0lNTElOVVhnbnUiIHZhbHVlPSIqLm8iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfGRlcml2ZWRTaWdzfFNJTU5UZGlhYiIgdmFsdWU9IioubyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8ZGVyaXZlZFNpZ3N8U0lNTlRnbnUiIHZhbHVlPSIqLm8iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfGRlcml2ZWRTaWdzfFNJTVNQQVJDU09MQVJJU2RpYWIiIHZhbHVlPSIqLm8iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfGRlcml2ZWRTaWdzfFNJTVNQQVJDU09MQVJJU2dudSIgdmFsdWU9IioubyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8ZmxhZ3N8UFBDMzJkaWFiIiB2YWx1ZT0iJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfGZsYWdzfFBQQzMyZ251IiB2YWx1ZT0iJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxmbGFnc3xQUEMzMnNmZGlhYiIgdmFsdWU9IiQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWHN0c3ctc2xvdyAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxmbGFnc3xQUEMzMnNmZ251IiB2YWx1ZT0iJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxmbGFnc3xQUEM0MDNkaWFiIiB2YWx1ZT0iJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfGZsYWdzfFBQQzQwM2dudSIgdmFsdWU9IiQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8ZmxhZ3N8UFBDNDA1ZGlhYiIgdmFsdWU9IiQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxmbGFnc3xQUEM0MDVnbnUiIHZhbHVlPSIkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfGZsYWdzfFBQQzQwNXNmZGlhYiIgdmFsdWU9IiQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxmbGFnc3xQUEM0MDVzZmdudSIgdmFsdWU9IiQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8ZmxhZ3N8UFBDNDQwZGlhYiIgdmFsdWU9IiQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxmbGFnc3xQUEM0NDBnbnUiIHZhbHVlPSIkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfGZsYWdzfFBQQzQ0MHNmZGlhYiIgdmFsdWU9IiQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxmbGFnc3xQUEM0NDBzZmdudSIgdmFsdWU9IiQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8ZmxhZ3N8UFBDNjAzZGlhYiIgdmFsdWU9IiQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxmbGFnc3xQUEM2MDNnbnUiIHZhbHVlPSIkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfGZsYWdzfFBQQzYwNGRpYWIiIHZhbHVlPSIkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8ZmxhZ3N8UFBDNjA0Z251IiB2YWx1ZT0iJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxmbGFnc3xQUEM4NVhYZGlhYiIgdmFsdWU9IiQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxmbGFnc3xQUEM4NVhYZ251IiB2YWx1ZT0iJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxmbGFnc3xQUEM4NVhYc2ZkaWFiIiB2YWx1ZT0iJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfGZsYWdzfFBQQzg1WFhzZmdudSIgdmFsdWU9IiQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8ZmxhZ3N8UFBDODYwc2ZkaWFiIiB2YWx1ZT0iJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfGZsYWdzfFBQQzg2MHNmZ251IiB2YWx1ZT0iJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxmbGFnc3xTSU1MSU5VWGRpYWIiIHZhbHVlPSIkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8ZmxhZ3N8U0lNTElOVVhnbnUiIHZhbHVlPSIkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfGZsYWdzfFNJTU5UZGlhYiIgdmFsdWU9IiQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxmbGFnc3xTSU1OVGdudSIgdmFsdWU9IiQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8ZmxhZ3N8U0lNU1BBUkNTT0xBUklTZGlhYiIgdmFsdWU9IiQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxmbGFnc3xTSU1TUEFSQ1NPTEFSSVNnbnUiIHZhbHVlPSIkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfG5vbkRiZ0ZsYWdzfFBQQzMyZGlhYiIgdmFsdWU9Ii1YTyAtWHNpemUtb3B0Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxub25EYmdGbGFnc3xQUEMzMmdudSIgdmFsdWU9Ii1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfG5vbkRiZ0ZsYWdzfFBQQzMyc2ZkaWFiIiB2YWx1ZT0iLVhPIC1Yc2l6ZS1vcHQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfG5vbkRiZ0ZsYWdzfFBQQzMyc2ZnbnUiIHZhbHVlPSItTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxub25EYmdGbGFnc3xQUEM0MDNkaWFiIiB2YWx1ZT0iLVhPIC1Yc2l6ZS1vcHQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfG5vbkRiZ0ZsYWdzfFBQQzQwM2dudSIgdmFsdWU9Ii1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfG5vbkRiZ0ZsYWdzfFBQQzQwNWRpYWIiIHZhbHVlPSItWE8gLVhzaXplLW9wdCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8bm9uRGJnRmxhZ3N8UFBDNDA1Z251IiB2YWx1ZT0iLU8yIC1mc3RyZW5ndGgtcmVkdWNlIC1mbm8tYnVpbHRpbiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8bm9uRGJnRmxhZ3N8UFBDNDA1c2ZkaWFiIiB2YWx1ZT0iLVhPIC1Yc2l6ZS1vcHQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfG5vbkRiZ0ZsYWdzfFBQQzQwNXNmZ251IiB2YWx1ZT0iLU8yIC1mc3RyZW5ndGgtcmVkdWNlIC1mbm8tYnVpbHRpbiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8bm9uRGJnRmxhZ3N8UFBDNDQwZGlhYiIgdmFsdWU9Ii1YTyAtWHNpemUtb3B0Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxub25EYmdGbGFnc3xQUEM0NDBnbnUiIHZhbHVlPSItTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxub25EYmdGbGFnc3xQUEM0NDBzZmRpYWIiIHZhbHVlPSItWE8gLVhzaXplLW9wdCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8bm9uRGJnRmxhZ3N8UFBDNDQwc2ZnbnUiIHZhbHVlPSItTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxub25EYmdGbGFnc3xQUEM2MDNkaWFiIiB2YWx1ZT0iLVhPIC1Yc2l6ZS1vcHQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfG5vbkRiZ0ZsYWdzfFBQQzYwM2dudSIgdmFsdWU9Ii1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfG5vbkRiZ0ZsYWdzfFBQQzYwNGRpYWIiIHZhbHVlPSItWE8gLVhzaXplLW9wdCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8bm9uRGJnRmxhZ3N8UFBDNjA0Z251IiB2YWx1ZT0iLU8yIC1mc3RyZW5ndGgtcmVkdWNlIC1mbm8tYnVpbHRpbiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8bm9uRGJnRmxhZ3N8UFBDODVYWGRpYWIiIHZhbHVlPSItWE8gLVhzaXplLW9wdCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8bm9uRGJnRmxhZ3N8UFBDODVYWGdudSIgdmFsdWU9Ii1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfG5vbkRiZ0ZsYWdzfFBQQzg1WFhzZmRpYWIiIHZhbHVlPSItWE8gLVhzaXplLW9wdCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8bm9uRGJnRmxhZ3N8UFBDODVYWHNmZ251IiB2YWx1ZT0iLU8yIC1mc3RyZW5ndGgtcmVkdWNlIC1mbm8tYnVpbHRpbiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8bm9uRGJnRmxhZ3N8UFBDODYwc2ZkaWFiIiB2YWx1ZT0iLVhPIC1Yc2l6ZS1vcHQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfG5vbkRiZ0ZsYWdzfFBQQzg2MHNmZ251IiB2YWx1ZT0iLU8yIC1mc3RyZW5ndGgtcmVkdWNlIC1mbm8tYnVpbHRpbiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8bm9uRGJnRmxhZ3N8U0lNTElOVVhkaWFiIiB2YWx1ZT0iLVhPIC1Yc2l6ZS1vcHQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfG5vbkRiZ0ZsYWdzfFNJTUxJTlVYZ251IiB2YWx1ZT0iLU8yIC1ub3N0ZGxpYiAtZm5vLWJ1aWx0aW4gLWZuby1kZWZlci1wb3AiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfG5vbkRiZ0ZsYWdzfFNJTU5UZGlhYiIgdmFsdWU9Ii1YTyAtWHNpemUtb3B0Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxub25EYmdGbGFnc3xTSU1OVGdudSIgdmFsdWU9Ii1PMiAtbm9zdGRsaWIgLWZuby1idWlsdGluIC1mbm8tZGVmZXItcG9wIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxub25EYmdGbGFnc3xTSU1TUEFSQ1NPTEFSSVNkaWFiIiB2YWx1ZT0iLVhPIC1Yc2l6ZS1vcHQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfG5vbkRiZ0ZsYWdzfFNJTVNQQVJDU09MQVJJU2dudSIgdmFsdWU9Ii1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4iLz4NCisgICAgICAgICAgICA8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxvYmplY3QiIHZhbHVlPSJ0cnVlIi8+DQorICAgICAgICAgICAgPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8cGFzc0FibGUiIHZhbHVlPSJmYWxzZSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8c2lncyIgdmFsdWU9IiouY3BwOyouQzsqLmN4eDsqLmNjIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8Y21kfFBQQzMyZGlhYiIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWNjb21waWxlcnByZWZpeCUgJChUT09MX1BBVEgpZGNjICVEZWJ1Z01vZGVGbGFncyUgJVRvb2xGbGFncyUgJChBRERFRF9DRkxBR1MpICVJbmNsdWRlcyUgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gJU91dEZpbGUlIC1jICVJbkZpbGUlIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8Y21kfFBQQzMyZ251IiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OzslY2NvbXBpbGVycHJlZml4JSAkKFRPT0xfUEFUSCljY3BwYyAlRGVidWdNb2RlRmxhZ3MlICVUb29sRmxhZ3MlICQoQURERURfQ0ZMQUdTKSAlSW5jbHVkZXMlICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICVPdXRGaWxlJSAtYyAlSW5GaWxlJSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfGNtZHxQUEMzMnNmZGlhYiIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWNjb21waWxlcnByZWZpeCUgJChUT09MX1BBVEgpZGNjICVEZWJ1Z01vZGVGbGFncyUgJVRvb2xGbGFncyUgJChBRERFRF9DRkxBR1MpICVJbmNsdWRlcyUgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gJU91dEZpbGUlIC1jICVJbkZpbGUlIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8Y21kfFBQQzMyc2ZnbnUiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7OyVjY29tcGlsZXJwcmVmaXglICQoVE9PTF9QQVRIKWNjcHBjICVEZWJ1Z01vZGVGbGFncyUgJVRvb2xGbGFncyUgJChBRERFRF9DRkxBR1MpICVJbmNsdWRlcyUgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gJU91dEZpbGUlIC1jICVJbkZpbGUlIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8Y21kfFBQQzQwM2RpYWIiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7OyVjY29tcGlsZXJwcmVmaXglICQoVE9PTF9QQVRIKWRjYyAlRGVidWdNb2RlRmxhZ3MlICVUb29sRmxhZ3MlICQoQURERURfQ0ZMQUdTKSAlSW5jbHVkZXMlICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICVPdXRGaWxlJSAtYyAlSW5GaWxlJSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfGNtZHxQUEM0MDNnbnUiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7OyVjY29tcGlsZXJwcmVmaXglICQoVE9PTF9QQVRIKWNjcHBjICVEZWJ1Z01vZGVGbGFncyUgJVRvb2xGbGFncyUgJChBRERFRF9DRkxBR1MpICVJbmNsdWRlcyUgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gJU91dEZpbGUlIC1jICVJbkZpbGUlIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8Y21kfFBQQzQwNWRpYWIiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7OyVjY29tcGlsZXJwcmVmaXglICQoVE9PTF9QQVRIKWRjYyAlRGVidWdNb2RlRmxhZ3MlICVUb29sRmxhZ3MlICQoQURERURfQ0ZMQUdTKSAlSW5jbHVkZXMlICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICVPdXRGaWxlJSAtYyAlSW5GaWxlJSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfGNtZHxQUEM0MDVnbnUiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7OyVjY29tcGlsZXJwcmVmaXglICQoVE9PTF9QQVRIKWNjcHBjICVEZWJ1Z01vZGVGbGFncyUgJVRvb2xGbGFncyUgJChBRERFRF9DRkxBR1MpICVJbmNsdWRlcyUgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gJU91dEZpbGUlIC1jICVJbkZpbGUlIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8Y21kfFBQQzQwNXNmZGlhYiIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWNjb21waWxlcnByZWZpeCUgJChUT09MX1BBVEgpZGNjICVEZWJ1Z01vZGVGbGFncyUgJVRvb2xGbGFncyUgJChBRERFRF9DRkxBR1MpICVJbmNsdWRlcyUgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gJU91dEZpbGUlIC1jICVJbkZpbGUlIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8Y21kfFBQQzQwNXNmZ251IiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OzslY2NvbXBpbGVycHJlZml4JSAkKFRPT0xfUEFUSCljY3BwYyAlRGVidWdNb2RlRmxhZ3MlICVUb29sRmxhZ3MlICQoQURERURfQ0ZMQUdTKSAlSW5jbHVkZXMlICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICVPdXRGaWxlJSAtYyAlSW5GaWxlJSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfGNtZHxQUEM0NDBkaWFiIiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OzslY2NvbXBpbGVycHJlZml4JSAkKFRPT0xfUEFUSClkY2MgJURlYnVnTW9kZUZsYWdzJSAlVG9vbEZsYWdzJSAkKEFEREVEX0NGTEFHUykgJUluY2x1ZGVzJSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAlT3V0RmlsZSUgLWMgJUluRmlsZSUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxjbWR8UFBDNDQwZ251IiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OzslY2NvbXBpbGVycHJlZml4JSAkKFRPT0xfUEFUSCljY3BwYyAlRGVidWdNb2RlRmxhZ3MlICVUb29sRmxhZ3MlICQoQURERURfQ0ZMQUdTKSAlSW5jbHVkZXMlICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICVPdXRGaWxlJSAtYyAlSW5GaWxlJSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfGNtZHxQUEM0NDBzZmRpYWIiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7OyVjY29tcGlsZXJwcmVmaXglICQoVE9PTF9QQVRIKWRjYyAlRGVidWdNb2RlRmxhZ3MlICVUb29sRmxhZ3MlICQoQURERURfQ0ZMQUdTKSAlSW5jbHVkZXMlICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICVPdXRGaWxlJSAtYyAlSW5GaWxlJSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfGNtZHxQUEM0NDBzZmdudSIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWNjb21waWxlcnByZWZpeCUgJChUT09MX1BBVEgpY2NwcGMgJURlYnVnTW9kZUZsYWdzJSAlVG9vbEZsYWdzJSAkKEFEREVEX0NGTEFHUykgJUluY2x1ZGVzJSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAlT3V0RmlsZSUgLWMgJUluRmlsZSUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxjbWR8UFBDNjAzZGlhYiIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWNjb21waWxlcnByZWZpeCUgJChUT09MX1BBVEgpZGNjICVEZWJ1Z01vZGVGbGFncyUgJVRvb2xGbGFncyUgJChBRERFRF9DRkxBR1MpICVJbmNsdWRlcyUgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gJU91dEZpbGUlIC1jICVJbkZpbGUlIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8Y21kfFBQQzYwM2dudSIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWNjb21waWxlcnByZWZpeCUgJChUT09MX1BBVEgpY2NwcGMgJURlYnVnTW9kZUZsYWdzJSAlVG9vbEZsYWdzJSAkKEFEREVEX0NGTEFHUykgJUluY2x1ZGVzJSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAlT3V0RmlsZSUgLWMgJUluRmlsZSUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxjbWR8UFBDNjA0ZGlhYiIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWNjb21waWxlcnByZWZpeCUgJChUT09MX1BBVEgpZGNjICVEZWJ1Z01vZGVGbGFncyUgJVRvb2xGbGFncyUgJChBRERFRF9DRkxBR1MpICVJbmNsdWRlcyUgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gJU91dEZpbGUlIC1jICVJbkZpbGUlIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8Y21kfFBQQzYwNGdudSIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWNjb21waWxlcnByZWZpeCUgJChUT09MX1BBVEgpY2NwcGMgJURlYnVnTW9kZUZsYWdzJSAlVG9vbEZsYWdzJSAkKEFEREVEX0NGTEFHUykgJUluY2x1ZGVzJSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAlT3V0RmlsZSUgLWMgJUluRmlsZSUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxjbWR8UFBDODVYWGRpYWIiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7OyVjY29tcGlsZXJwcmVmaXglICQoVE9PTF9QQVRIKWRjYyAlRGVidWdNb2RlRmxhZ3MlICVUb29sRmxhZ3MlICQoQURERURfQ0ZMQUdTKSAlSW5jbHVkZXMlICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICVPdXRGaWxlJSAtYyAlSW5GaWxlJSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfGNtZHxQUEM4NVhYZ251IiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OzslY2NvbXBpbGVycHJlZml4JSAkKFRPT0xfUEFUSCljY3BwYyAlRGVidWdNb2RlRmxhZ3MlICVUb29sRmxhZ3MlICQoQURERURfQ0ZMQUdTKSAlSW5jbHVkZXMlICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICVPdXRGaWxlJSAtYyAlSW5GaWxlJSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfGNtZHxQUEM4NVhYc2ZkaWFiIiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OzslY2NvbXBpbGVycHJlZml4JSAkKFRPT0xfUEFUSClkY2MgJURlYnVnTW9kZUZsYWdzJSAlVG9vbEZsYWdzJSAkKEFEREVEX0NGTEFHUykgJUluY2x1ZGVzJSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAlT3V0RmlsZSUgLWMgJUluRmlsZSUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxjbWR8UFBDODVYWHNmZ251IiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OzslY2NvbXBpbGVycHJlZml4JSAkKFRPT0xfUEFUSCljY3BwYyAlRGVidWdNb2RlRmxhZ3MlICVUb29sRmxhZ3MlICQoQURERURfQ0ZMQUdTKSAlSW5jbHVkZXMlICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICVPdXRGaWxlJSAtYyAlSW5GaWxlJSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfGNtZHxQUEM4NjBzZmRpYWIiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7OyVjY29tcGlsZXJwcmVmaXglICQoVE9PTF9QQVRIKWRjYyAlRGVidWdNb2RlRmxhZ3MlICVUb29sRmxhZ3MlICQoQURERURfQ0ZMQUdTKSAlSW5jbHVkZXMlICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICVPdXRGaWxlJSAtYyAlSW5GaWxlJSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfGNtZHxQUEM4NjBzZmdudSIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWNjb21waWxlcnByZWZpeCUgJChUT09MX1BBVEgpY2NwcGMgJURlYnVnTW9kZUZsYWdzJSAlVG9vbEZsYWdzJSAkKEFEREVEX0NGTEFHUykgJUluY2x1ZGVzJSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAlT3V0RmlsZSUgLWMgJUluRmlsZSUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxjbWR8U0lNTElOVVhkaWFiIiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OzslY2NvbXBpbGVycHJlZml4JSAkKFRPT0xfUEFUSClkY2MgJURlYnVnTW9kZUZsYWdzJSAlVG9vbEZsYWdzJSAkKEFEREVEX0NGTEFHUykgJUluY2x1ZGVzJSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAlT3V0RmlsZSUgLWMgJUluRmlsZSUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxjbWR8U0lNTElOVVhnbnUiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7OyVjY29tcGlsZXJwcmVmaXglICQoVE9PTF9QQVRIKWNjcGVudGl1bSAlRGVidWdNb2RlRmxhZ3MlICVUb29sRmxhZ3MlICQoQURERURfQ0ZMQUdTKSAlSW5jbHVkZXMlICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICVPdXRGaWxlJSAtYyAlSW5GaWxlJSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfGNtZHxTSU1OVGRpYWIiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7OyVjY29tcGlsZXJwcmVmaXglICQoVE9PTF9QQVRIKWRjYyAlRGVidWdNb2RlRmxhZ3MlICVUb29sRmxhZ3MlICQoQURERURfQ0ZMQUdTKSAlSW5jbHVkZXMlICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICVPdXRGaWxlJSAtYyAlSW5GaWxlJSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfGNtZHxTSU1OVGdudSIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWNjb21waWxlcnByZWZpeCUgJChUT09MX1BBVEgpY2NwZW50aXVtICVEZWJ1Z01vZGVGbGFncyUgJVRvb2xGbGFncyUgJChBRERFRF9DRkxBR1MpICVJbmNsdWRlcyUgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gJU91dEZpbGUlIC1jICVJbkZpbGUlIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8Y21kfFNJTVNQQVJDU09MQVJJU2RpYWIiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7OyVjY29tcGlsZXJwcmVmaXglICQoVE9PTF9QQVRIKWRjYyAlRGVidWdNb2RlRmxhZ3MlICVUb29sRmxhZ3MlICQoQURERURfQ0ZMQUdTKSAlSW5jbHVkZXMlICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICVPdXRGaWxlJSAtYyAlSW5GaWxlJSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfGNtZHxTSU1TUEFSQ1NPTEFSSVNnbnUiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7OyVjY29tcGlsZXJwcmVmaXglICQoVE9PTF9QQVRIKWNjc3BhcmMgJURlYnVnTW9kZUZsYWdzJSAlVG9vbEZsYWdzJSAkKEFEREVEX0NGTEFHUykgJUluY2x1ZGVzJSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAlT3V0RmlsZSUgLWMgJUluRmlsZSUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxkYmdGbGFnc3xQUEMzMmRpYWIiIHZhbHVlPSItZyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfGRiZ0ZsYWdzfFBQQzMyZ251IiB2YWx1ZT0iLWciLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxkYmdGbGFnc3xQUEMzMnNmZGlhYiIgdmFsdWU9Ii1nIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8ZGJnRmxhZ3N8UFBDMzJzZmdudSIgdmFsdWU9Ii1nIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8ZGJnRmxhZ3N8UFBDNDAzZGlhYiIgdmFsdWU9Ii1nIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8ZGJnRmxhZ3N8UFBDNDAzZ251IiB2YWx1ZT0iLWciLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxkYmdGbGFnc3xQUEM0MDVkaWFiIiB2YWx1ZT0iLWciLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxkYmdGbGFnc3xQUEM0MDVnbnUiIHZhbHVlPSItZyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfGRiZ0ZsYWdzfFBQQzQwNXNmZGlhYiIgdmFsdWU9Ii1nIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8ZGJnRmxhZ3N8UFBDNDA1c2ZnbnUiIHZhbHVlPSItZyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfGRiZ0ZsYWdzfFBQQzQ0MGRpYWIiIHZhbHVlPSItZyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfGRiZ0ZsYWdzfFBQQzQ0MGdudSIgdmFsdWU9Ii1nIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8ZGJnRmxhZ3N8UFBDNDQwc2ZkaWFiIiB2YWx1ZT0iLWciLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxkYmdGbGFnc3xQUEM0NDBzZmdudSIgdmFsdWU9Ii1nIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8ZGJnRmxhZ3N8UFBDNjAzZGlhYiIgdmFsdWU9Ii1nIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8ZGJnRmxhZ3N8UFBDNjAzZ251IiB2YWx1ZT0iLWciLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxkYmdGbGFnc3xQUEM2MDRkaWFiIiB2YWx1ZT0iLWciLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxkYmdGbGFnc3xQUEM2MDRnbnUiIHZhbHVlPSItZyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfGRiZ0ZsYWdzfFBQQzg1WFhkaWFiIiB2YWx1ZT0iLWciLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxkYmdGbGFnc3xQUEM4NVhYZ251IiB2YWx1ZT0iLWciLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxkYmdGbGFnc3xQUEM4NVhYc2ZkaWFiIiB2YWx1ZT0iLWciLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxkYmdGbGFnc3xQUEM4NVhYc2ZnbnUiIHZhbHVlPSItZyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfGRiZ0ZsYWdzfFBQQzg2MHNmZGlhYiIgdmFsdWU9Ii1nIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8ZGJnRmxhZ3N8UFBDODYwc2ZnbnUiIHZhbHVlPSItZyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfGRiZ0ZsYWdzfFNJTUxJTlVYZGlhYiIgdmFsdWU9Ii1nIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8ZGJnRmxhZ3N8U0lNTElOVVhnbnUiIHZhbHVlPSItZyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfGRiZ0ZsYWdzfFNJTU5UZGlhYiIgdmFsdWU9Ii1nIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8ZGJnRmxhZ3N8U0lNTlRnbnUiIHZhbHVlPSItZyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfGRiZ0ZsYWdzfFNJTVNQQVJDU09MQVJJU2RpYWIiIHZhbHVlPSItZyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfGRiZ0ZsYWdzfFNJTVNQQVJDU09MQVJJU2dudSIgdmFsdWU9Ii1nIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8ZGVyaXZlZFNpZ3N8UFBDMzJkaWFiIiB2YWx1ZT0iKi5vIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8ZGVyaXZlZFNpZ3N8UFBDMzJnbnUiIHZhbHVlPSIqLm8iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxkZXJpdmVkU2lnc3xQUEMzMnNmZGlhYiIgdmFsdWU9IioubyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfGRlcml2ZWRTaWdzfFBQQzMyc2ZnbnUiIHZhbHVlPSIqLm8iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxkZXJpdmVkU2lnc3xQUEM0MDNkaWFiIiB2YWx1ZT0iKi5vIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8ZGVyaXZlZFNpZ3N8UFBDNDAzZ251IiB2YWx1ZT0iKi5vIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8ZGVyaXZlZFNpZ3N8UFBDNDA1ZGlhYiIgdmFsdWU9IioubyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfGRlcml2ZWRTaWdzfFBQQzQwNWdudSIgdmFsdWU9IioubyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfGRlcml2ZWRTaWdzfFBQQzQwNXNmZGlhYiIgdmFsdWU9IioubyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfGRlcml2ZWRTaWdzfFBQQzQwNXNmZ251IiB2YWx1ZT0iKi5vIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8ZGVyaXZlZFNpZ3N8UFBDNDQwZGlhYiIgdmFsdWU9IioubyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfGRlcml2ZWRTaWdzfFBQQzQ0MGdudSIgdmFsdWU9IioubyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfGRlcml2ZWRTaWdzfFBQQzQ0MHNmZGlhYiIgdmFsdWU9IioubyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfGRlcml2ZWRTaWdzfFBQQzQ0MHNmZ251IiB2YWx1ZT0iKi5vIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8ZGVyaXZlZFNpZ3N8UFBDNjAzZGlhYiIgdmFsdWU9IioubyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfGRlcml2ZWRTaWdzfFBQQzYwM2dudSIgdmFsdWU9IioubyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfGRlcml2ZWRTaWdzfFBQQzYwNGRpYWIiIHZhbHVlPSIqLm8iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxkZXJpdmVkU2lnc3xQUEM2MDRnbnUiIHZhbHVlPSIqLm8iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxkZXJpdmVkU2lnc3xQUEM4NVhYZGlhYiIgdmFsdWU9IioubyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfGRlcml2ZWRTaWdzfFBQQzg1WFhnbnUiIHZhbHVlPSIqLm8iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxkZXJpdmVkU2lnc3xQUEM4NVhYc2ZkaWFiIiB2YWx1ZT0iKi5vIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8ZGVyaXZlZFNpZ3N8UFBDODVYWHNmZ251IiB2YWx1ZT0iKi5vIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8ZGVyaXZlZFNpZ3N8UFBDODYwc2ZkaWFiIiB2YWx1ZT0iKi5vIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8ZGVyaXZlZFNpZ3N8UFBDODYwc2ZnbnUiIHZhbHVlPSIqLm8iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxkZXJpdmVkU2lnc3xTSU1MSU5VWGRpYWIiIHZhbHVlPSIqLm8iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxkZXJpdmVkU2lnc3xTSU1MSU5VWGdudSIgdmFsdWU9IioubyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfGRlcml2ZWRTaWdzfFNJTU5UZGlhYiIgdmFsdWU9IioubyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfGRlcml2ZWRTaWdzfFNJTU5UZ251IiB2YWx1ZT0iKi5vIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8ZGVyaXZlZFNpZ3N8U0lNU1BBUkNTT0xBUklTZGlhYiIgdmFsdWU9IioubyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfGRlcml2ZWRTaWdzfFNJTVNQQVJDU09MQVJJU2dudSIgdmFsdWU9IioubyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfGZsYWdzfFBQQzMyZGlhYiIgdmFsdWU9IiQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8ZmxhZ3N8UFBDMzJnbnUiIHZhbHVlPSIkKENDX0FSQ0hfU1BFQykgLWFuc2kgIC1XYWxsICAtTUQgLU1QIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8ZmxhZ3N8UFBDMzJzZmRpYWIiIHZhbHVlPSIkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhzdHN3LXNsb3cgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfGZsYWdzfFBQQzMyc2ZnbnUiIHZhbHVlPSIkKENDX0FSQ0hfU1BFQykgLWFuc2kgIC1XYWxsICAtTUQgLU1QIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8ZmxhZ3N8UFBDNDAzZGlhYiIgdmFsdWU9IiQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8ZmxhZ3N8UFBDNDAzZ251IiB2YWx1ZT0iJChDQ19BUkNIX1NQRUMpIC1hbnNpICAtV2FsbCAgLU1EIC1NUCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfGZsYWdzfFBQQzQwNWRpYWIiIHZhbHVlPSIkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfGZsYWdzfFBQQzQwNWdudSIgdmFsdWU9IiQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAgLVdhbGwgIC1NRCAtTVAiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxmbGFnc3xQUEM0MDVzZmRpYWIiIHZhbHVlPSIkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfGZsYWdzfFBQQzQwNXNmZ251IiB2YWx1ZT0iJChDQ19BUkNIX1NQRUMpIC1hbnNpICAtV2FsbCAgLU1EIC1NUCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfGZsYWdzfFBQQzQ0MGRpYWIiIHZhbHVlPSIkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfGZsYWdzfFBQQzQ0MGdudSIgdmFsdWU9IiQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAgLVdhbGwgIC1NRCAtTVAiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxmbGFnc3xQUEM0NDBzZmRpYWIiIHZhbHVlPSIkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfGZsYWdzfFBQQzQ0MHNmZ251IiB2YWx1ZT0iJChDQ19BUkNIX1NQRUMpIC1hbnNpICAtV2FsbCAgLU1EIC1NUCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfGZsYWdzfFBQQzYwM2RpYWIiIHZhbHVlPSIkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfGZsYWdzfFBQQzYwM2dudSIgdmFsdWU9IiQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAgLVdhbGwgIC1NRCAtTVAiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxmbGFnc3xQUEM2MDRkaWFiIiB2YWx1ZT0iJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxmbGFnc3xQUEM2MDRnbnUiIHZhbHVlPSIkKENDX0FSQ0hfU1BFQykgLWFuc2kgIC1XYWxsICAtTUQgLU1QIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8ZmxhZ3N8UFBDODVYWGRpYWIiIHZhbHVlPSIkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfGZsYWdzfFBQQzg1WFhnbnUiIHZhbHVlPSIkKENDX0FSQ0hfU1BFQykgLWFuc2kgIC1XYWxsICAtTUQgLU1QIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8ZmxhZ3N8UFBDODVYWHNmZGlhYiIgdmFsdWU9IiQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8ZmxhZ3N8UFBDODVYWHNmZ251IiB2YWx1ZT0iJChDQ19BUkNIX1NQRUMpIC1hbnNpICAtV2FsbCAgLU1EIC1NUCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfGZsYWdzfFBQQzg2MHNmZGlhYiIgdmFsdWU9IiQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8ZmxhZ3N8UFBDODYwc2ZnbnUiIHZhbHVlPSIkKENDX0FSQ0hfU1BFQykgLWFuc2kgIC1XYWxsICAtTUQgLU1QIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8ZmxhZ3N8U0lNTElOVVhkaWFiIiB2YWx1ZT0iJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxmbGFnc3xTSU1MSU5VWGdudSIgdmFsdWU9IiQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAgLVdhbGwgIC1NRCAtTVAiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxmbGFnc3xTSU1OVGRpYWIiIHZhbHVlPSIkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfGZsYWdzfFNJTU5UZ251IiB2YWx1ZT0iJChDQ19BUkNIX1NQRUMpIC1hbnNpICAtV2FsbCAgLU1EIC1NUCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfGZsYWdzfFNJTVNQQVJDU09MQVJJU2RpYWIiIHZhbHVlPSIkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfGZsYWdzfFNJTVNQQVJDU09MQVJJU2dudSIgdmFsdWU9IiQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAgLVdhbGwgIC1NRCAtTVAiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxub25EYmdGbGFnc3xQUEMzMmRpYWIiIHZhbHVlPSItWE8gLVhzaXplLW9wdCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfG5vbkRiZ0ZsYWdzfFBQQzMyZ251IiB2YWx1ZT0iLU8yIC1mc3RyZW5ndGgtcmVkdWNlIC1mbm8tYnVpbHRpbiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfG5vbkRiZ0ZsYWdzfFBQQzMyc2ZkaWFiIiB2YWx1ZT0iLVhPIC1Yc2l6ZS1vcHQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxub25EYmdGbGFnc3xQUEMzMnNmZ251IiB2YWx1ZT0iLU8yIC1mc3RyZW5ndGgtcmVkdWNlIC1mbm8tYnVpbHRpbiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfG5vbkRiZ0ZsYWdzfFBQQzQwM2RpYWIiIHZhbHVlPSItWE8gLVhzaXplLW9wdCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfG5vbkRiZ0ZsYWdzfFBQQzQwM2dudSIgdmFsdWU9Ii1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxub25EYmdGbGFnc3xQUEM0MDVkaWFiIiB2YWx1ZT0iLVhPIC1Yc2l6ZS1vcHQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxub25EYmdGbGFnc3xQUEM0MDVnbnUiIHZhbHVlPSItTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8bm9uRGJnRmxhZ3N8UFBDNDA1c2ZkaWFiIiB2YWx1ZT0iLVhPIC1Yc2l6ZS1vcHQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxub25EYmdGbGFnc3xQUEM0MDVzZmdudSIgdmFsdWU9Ii1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxub25EYmdGbGFnc3xQUEM0NDBkaWFiIiB2YWx1ZT0iLVhPIC1Yc2l6ZS1vcHQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxub25EYmdGbGFnc3xQUEM0NDBnbnUiIHZhbHVlPSItTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8bm9uRGJnRmxhZ3N8UFBDNDQwc2ZkaWFiIiB2YWx1ZT0iLVhPIC1Yc2l6ZS1vcHQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxub25EYmdGbGFnc3xQUEM0NDBzZmdudSIgdmFsdWU9Ii1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxub25EYmdGbGFnc3xQUEM2MDNkaWFiIiB2YWx1ZT0iLVhPIC1Yc2l6ZS1vcHQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxub25EYmdGbGFnc3xQUEM2MDNnbnUiIHZhbHVlPSItTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8bm9uRGJnRmxhZ3N8UFBDNjA0ZGlhYiIgdmFsdWU9Ii1YTyAtWHNpemUtb3B0Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8bm9uRGJnRmxhZ3N8UFBDNjA0Z251IiB2YWx1ZT0iLU8yIC1mc3RyZW5ndGgtcmVkdWNlIC1mbm8tYnVpbHRpbiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfG5vbkRiZ0ZsYWdzfFBQQzg1WFhkaWFiIiB2YWx1ZT0iLVhPIC1Yc2l6ZS1vcHQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxub25EYmdGbGFnc3xQUEM4NVhYZ251IiB2YWx1ZT0iLU8yIC1mc3RyZW5ndGgtcmVkdWNlIC1mbm8tYnVpbHRpbiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfG5vbkRiZ0ZsYWdzfFBQQzg1WFhzZmRpYWIiIHZhbHVlPSItWE8gLVhzaXplLW9wdCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfG5vbkRiZ0ZsYWdzfFBQQzg1WFhzZmdudSIgdmFsdWU9Ii1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxub25EYmdGbGFnc3xQUEM4NjBzZmRpYWIiIHZhbHVlPSItWE8gLVhzaXplLW9wdCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfG5vbkRiZ0ZsYWdzfFBQQzg2MHNmZ251IiB2YWx1ZT0iLU8yIC1mc3RyZW5ndGgtcmVkdWNlIC1mbm8tYnVpbHRpbiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfG5vbkRiZ0ZsYWdzfFNJTUxJTlVYZGlhYiIgdmFsdWU9Ii1YTyAtWHNpemUtb3B0Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8bm9uRGJnRmxhZ3N8U0lNTElOVVhnbnUiIHZhbHVlPSItTzIgLW5vc3RkbGliIC1mbm8tYnVpbHRpbiAtZm5vLWRlZmVyLXBvcCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfG5vbkRiZ0ZsYWdzfFNJTU5UZGlhYiIgdmFsdWU9Ii1YTyAtWHNpemUtb3B0Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8bm9uRGJnRmxhZ3N8U0lNTlRnbnUiIHZhbHVlPSItTzIgLW5vc3RkbGliIC1mbm8tYnVpbHRpbiAtZm5vLWRlZmVyLXBvcCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfG5vbkRiZ0ZsYWdzfFNJTVNQQVJDU09MQVJJU2RpYWIiIHZhbHVlPSItWE8gLVhzaXplLW9wdCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfG5vbkRiZ0ZsYWdzfFNJTVNQQVJDU09MQVJJU2dudSIgdmFsdWU9Ii1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4iLz4NCisgICAgICAgICAgICA8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8b2JqZWN0IiB2YWx1ZT0idHJ1ZSIvPg0KKyAgICAgICAgICAgIDxib29sZWFuQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxwYXNzQWJsZSIgdmFsdWU9ImZhbHNlIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8c2lncyIgdmFsdWU9IiouYyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58Y21kfFBQQzMyZGlhYiIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWFyY2hpdmVycHJlZml4JSAkKFRPT0xfUEFUSClkYXIgJVRvb2xGbGFncyUgJU91dEZpbGUlICVPYmplY3RzJSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58Y21kfFBQQzMyZ251IiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OzslYXJjaGl2ZXJwcmVmaXglICQoVE9PTF9QQVRIKWFycHBjICVUb29sRmxhZ3MlICVPdXRGaWxlJSAlT2JqZWN0cyUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufGNtZHxQUEMzMnNmZGlhYiIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWFyY2hpdmVycHJlZml4JSAkKFRPT0xfUEFUSClkYXIgJVRvb2xGbGFncyUgJU91dEZpbGUlICVPYmplY3RzJSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58Y21kfFBQQzMyc2ZnbnUiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7OyVhcmNoaXZlcnByZWZpeCUgJChUT09MX1BBVEgpYXJwcGMgJVRvb2xGbGFncyUgJU91dEZpbGUlICVPYmplY3RzJSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58Y21kfFBQQzQwM2RpYWIiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7OyVhcmNoaXZlcnByZWZpeCUgJChUT09MX1BBVEgpZGFyICVUb29sRmxhZ3MlICVPdXRGaWxlJSAlT2JqZWN0cyUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufGNtZHxQUEM0MDNnbnUiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7OyVhcmNoaXZlcnByZWZpeCUgJChUT09MX1BBVEgpYXJwcGMgJVRvb2xGbGFncyUgJU91dEZpbGUlICVPYmplY3RzJSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58Y21kfFBQQzQwNWRpYWIiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7OyVhcmNoaXZlcnByZWZpeCUgJChUT09MX1BBVEgpZGFyICVUb29sRmxhZ3MlICVPdXRGaWxlJSAlT2JqZWN0cyUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufGNtZHxQUEM0MDVnbnUiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7OyVhcmNoaXZlcnByZWZpeCUgJChUT09MX1BBVEgpYXJwcGMgJVRvb2xGbGFncyUgJU91dEZpbGUlICVPYmplY3RzJSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58Y21kfFBQQzQwNXNmZGlhYiIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWFyY2hpdmVycHJlZml4JSAkKFRPT0xfUEFUSClkYXIgJVRvb2xGbGFncyUgJU91dEZpbGUlICVPYmplY3RzJSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58Y21kfFBQQzQwNXNmZ251IiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OzslYXJjaGl2ZXJwcmVmaXglICQoVE9PTF9QQVRIKWFycHBjICVUb29sRmxhZ3MlICVPdXRGaWxlJSAlT2JqZWN0cyUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufGNtZHxQUEM0NDBkaWFiIiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OzslYXJjaGl2ZXJwcmVmaXglICQoVE9PTF9QQVRIKWRhciAlVG9vbEZsYWdzJSAlT3V0RmlsZSUgJU9iamVjdHMlIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxjbWR8UFBDNDQwZ251IiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OzslYXJjaGl2ZXJwcmVmaXglICQoVE9PTF9QQVRIKWFycHBjICVUb29sRmxhZ3MlICVPdXRGaWxlJSAlT2JqZWN0cyUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufGNtZHxQUEM0NDBzZmRpYWIiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7OyVhcmNoaXZlcnByZWZpeCUgJChUT09MX1BBVEgpZGFyICVUb29sRmxhZ3MlICVPdXRGaWxlJSAlT2JqZWN0cyUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufGNtZHxQUEM0NDBzZmdudSIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWFyY2hpdmVycHJlZml4JSAkKFRPT0xfUEFUSClhcnBwYyAlVG9vbEZsYWdzJSAlT3V0RmlsZSUgJU9iamVjdHMlIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxjbWR8UFBDNjAzZGlhYiIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWFyY2hpdmVycHJlZml4JSAkKFRPT0xfUEFUSClkYXIgJVRvb2xGbGFncyUgJU91dEZpbGUlICVPYmplY3RzJSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58Y21kfFBQQzYwM2dudSIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWFyY2hpdmVycHJlZml4JSAkKFRPT0xfUEFUSClhcnBwYyAlVG9vbEZsYWdzJSAlT3V0RmlsZSUgJU9iamVjdHMlIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxjbWR8UFBDNjA0ZGlhYiIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWFyY2hpdmVycHJlZml4JSAkKFRPT0xfUEFUSClkYXIgJVRvb2xGbGFncyUgJU91dEZpbGUlICVPYmplY3RzJSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58Y21kfFBQQzYwNGdudSIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWFyY2hpdmVycHJlZml4JSAkKFRPT0xfUEFUSClhcnBwYyAlVG9vbEZsYWdzJSAlT3V0RmlsZSUgJU9iamVjdHMlIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxjbWR8UFBDODVYWGRpYWIiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7OyVhcmNoaXZlcnByZWZpeCUgJChUT09MX1BBVEgpZGFyICVUb29sRmxhZ3MlICVPdXRGaWxlJSAlT2JqZWN0cyUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufGNtZHxQUEM4NVhYZ251IiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OzslYXJjaGl2ZXJwcmVmaXglICQoVE9PTF9QQVRIKWFycHBjICVUb29sRmxhZ3MlICVPdXRGaWxlJSAlT2JqZWN0cyUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufGNtZHxQUEM4NVhYc2ZkaWFiIiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OzslYXJjaGl2ZXJwcmVmaXglICQoVE9PTF9QQVRIKWRhciAlVG9vbEZsYWdzJSAlT3V0RmlsZSUgJU9iamVjdHMlIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxjbWR8UFBDODVYWHNmZ251IiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OzslYXJjaGl2ZXJwcmVmaXglICQoVE9PTF9QQVRIKWFycHBjICVUb29sRmxhZ3MlICVPdXRGaWxlJSAlT2JqZWN0cyUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufGNtZHxQUEM4NjBzZmRpYWIiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7OyVhcmNoaXZlcnByZWZpeCUgJChUT09MX1BBVEgpZGFyICVUb29sRmxhZ3MlICVPdXRGaWxlJSAlT2JqZWN0cyUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufGNtZHxQUEM4NjBzZmdudSIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWFyY2hpdmVycHJlZml4JSAkKFRPT0xfUEFUSClhcnBwYyAlVG9vbEZsYWdzJSAlT3V0RmlsZSUgJU9iamVjdHMlIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxjbWR8U0lNTElOVVhkaWFiIiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OzslYXJjaGl2ZXJwcmVmaXglICQoVE9PTF9QQVRIKWRhciAlVG9vbEZsYWdzJSAlT3V0RmlsZSUgJU9iamVjdHMlIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxjbWR8U0lNTElOVVhnbnUiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7OyVhcmNoaXZlcnByZWZpeCUgJChUT09MX1BBVEgpYXJwZW50aXVtICVUb29sRmxhZ3MlICVPdXRGaWxlJSAlT2JqZWN0cyUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufGNtZHxTSU1OVGRpYWIiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7OyVhcmNoaXZlcnByZWZpeCUgJChUT09MX1BBVEgpZGFyICVUb29sRmxhZ3MlICVPdXRGaWxlJSAlT2JqZWN0cyUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufGNtZHxTSU1OVGdudSIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWFyY2hpdmVycHJlZml4JSAkKFRPT0xfUEFUSClhcnBlbnRpdW0gJVRvb2xGbGFncyUgJU91dEZpbGUlICVPYmplY3RzJSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58Y21kfFNJTVNQQVJDU09MQVJJU2RpYWIiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7OyVhcmNoaXZlcnByZWZpeCUgJChUT09MX1BBVEgpZGFyICVUb29sRmxhZ3MlICVPdXRGaWxlJSAlT2JqZWN0cyUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufGNtZHxTSU1TUEFSQ1NPTEFSSVNnbnUiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7OyVhcmNoaXZlcnByZWZpeCUgJChUT09MX1BBVEgpYXJzcGFyYyAlVG9vbEZsYWdzJSAlT3V0RmlsZSUgJU9iamVjdHMlIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxkYmdGbGFnc3xQUEMzMmRpYWIiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufGRiZ0ZsYWdzfFBQQzMyZ251IiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxkYmdGbGFnc3xQUEMzMnNmZGlhYiIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58ZGJnRmxhZ3N8UFBDMzJzZmdudSIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58ZGJnRmxhZ3N8UFBDNDAzZGlhYiIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58ZGJnRmxhZ3N8UFBDNDAzZ251IiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxkYmdGbGFnc3xQUEM0MDVkaWFiIiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxkYmdGbGFnc3xQUEM0MDVnbnUiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufGRiZ0ZsYWdzfFBQQzQwNXNmZGlhYiIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58ZGJnRmxhZ3N8UFBDNDA1c2ZnbnUiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufGRiZ0ZsYWdzfFBQQzQ0MGRpYWIiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufGRiZ0ZsYWdzfFBQQzQ0MGdudSIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58ZGJnRmxhZ3N8UFBDNDQwc2ZkaWFiIiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxkYmdGbGFnc3xQUEM0NDBzZmdudSIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58ZGJnRmxhZ3N8UFBDNjAzZGlhYiIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58ZGJnRmxhZ3N8UFBDNjAzZ251IiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxkYmdGbGFnc3xQUEM2MDRkaWFiIiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxkYmdGbGFnc3xQUEM2MDRnbnUiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufGRiZ0ZsYWdzfFBQQzg1WFhkaWFiIiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxkYmdGbGFnc3xQUEM4NVhYZ251IiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxkYmdGbGFnc3xQUEM4NVhYc2ZkaWFiIiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxkYmdGbGFnc3xQUEM4NVhYc2ZnbnUiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufGRiZ0ZsYWdzfFBQQzg2MHNmZGlhYiIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58ZGJnRmxhZ3N8UFBDODYwc2ZnbnUiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufGRiZ0ZsYWdzfFNJTUxJTlVYZGlhYiIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58ZGJnRmxhZ3N8U0lNTElOVVhnbnUiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufGRiZ0ZsYWdzfFNJTU5UZGlhYiIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58ZGJnRmxhZ3N8U0lNTlRnbnUiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufGRiZ0ZsYWdzfFNJTVNQQVJDU09MQVJJU2RpYWIiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufGRiZ0ZsYWdzfFNJTVNQQVJDU09MQVJJU2dudSIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58ZGVyaXZlZFNpZ3N8UFBDMzJkaWFiIiB2YWx1ZT0iKi5hIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxkZXJpdmVkU2lnc3xQUEMzMmdudSIgdmFsdWU9IiouYSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58ZGVyaXZlZFNpZ3N8UFBDMzJzZmRpYWIiIHZhbHVlPSIqLmEiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufGRlcml2ZWRTaWdzfFBQQzMyc2ZnbnUiIHZhbHVlPSIqLmEiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufGRlcml2ZWRTaWdzfFBQQzQwM2RpYWIiIHZhbHVlPSIqLmEiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufGRlcml2ZWRTaWdzfFBQQzQwM2dudSIgdmFsdWU9IiouYSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58ZGVyaXZlZFNpZ3N8UFBDNDA1ZGlhYiIgdmFsdWU9IiouYSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58ZGVyaXZlZFNpZ3N8UFBDNDA1Z251IiB2YWx1ZT0iKi5hIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxkZXJpdmVkU2lnc3xQUEM0MDVzZmRpYWIiIHZhbHVlPSIqLmEiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufGRlcml2ZWRTaWdzfFBQQzQwNXNmZ251IiB2YWx1ZT0iKi5hIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxkZXJpdmVkU2lnc3xQUEM0NDBkaWFiIiB2YWx1ZT0iKi5hIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxkZXJpdmVkU2lnc3xQUEM0NDBnbnUiIHZhbHVlPSIqLmEiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufGRlcml2ZWRTaWdzfFBQQzQ0MHNmZGlhYiIgdmFsdWU9IiouYSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58ZGVyaXZlZFNpZ3N8UFBDNDQwc2ZnbnUiIHZhbHVlPSIqLmEiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufGRlcml2ZWRTaWdzfFBQQzYwM2RpYWIiIHZhbHVlPSIqLmEiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufGRlcml2ZWRTaWdzfFBQQzYwM2dudSIgdmFsdWU9IiouYSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58ZGVyaXZlZFNpZ3N8UFBDNjA0ZGlhYiIgdmFsdWU9IiouYSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58ZGVyaXZlZFNpZ3N8UFBDNjA0Z251IiB2YWx1ZT0iKi5hIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxkZXJpdmVkU2lnc3xQUEM4NVhYZGlhYiIgdmFsdWU9IiouYSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58ZGVyaXZlZFNpZ3N8UFBDODVYWGdudSIgdmFsdWU9IiouYSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58ZGVyaXZlZFNpZ3N8UFBDODVYWHNmZGlhYiIgdmFsdWU9IiouYSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58ZGVyaXZlZFNpZ3N8UFBDODVYWHNmZ251IiB2YWx1ZT0iKi5hIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxkZXJpdmVkU2lnc3xQUEM4NjBzZmRpYWIiIHZhbHVlPSIqLmEiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufGRlcml2ZWRTaWdzfFBQQzg2MHNmZ251IiB2YWx1ZT0iKi5hIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxkZXJpdmVkU2lnc3xTSU1MSU5VWGRpYWIiIHZhbHVlPSIqLmEiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufGRlcml2ZWRTaWdzfFNJTUxJTlVYZ251IiB2YWx1ZT0iKi5hIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxkZXJpdmVkU2lnc3xTSU1OVGRpYWIiIHZhbHVlPSIqLmEiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufGRlcml2ZWRTaWdzfFNJTU5UZ251IiB2YWx1ZT0iKi5hIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxkZXJpdmVkU2lnc3xTSU1TUEFSQ1NPTEFSSVNkaWFiIiB2YWx1ZT0iKi5hIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxkZXJpdmVkU2lnc3xTSU1TUEFSQ1NPTEFSSVNnbnUiIHZhbHVlPSIqLmEiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufGZsYWdzfFBQQzMyZGlhYiIgdmFsdWU9ImNydXMiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufGZsYWdzfFBQQzMyZ251IiB2YWx1ZT0iY3J1cyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58ZmxhZ3N8UFBDMzJzZmRpYWIiIHZhbHVlPSJjcnVzIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxmbGFnc3xQUEMzMnNmZ251IiB2YWx1ZT0iY3J1cyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58ZmxhZ3N8UFBDNDAzZGlhYiIgdmFsdWU9ImNydXMiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufGZsYWdzfFBQQzQwM2dudSIgdmFsdWU9ImNydXMiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufGZsYWdzfFBQQzQwNWRpYWIiIHZhbHVlPSJjcnVzIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxmbGFnc3xQUEM0MDVnbnUiIHZhbHVlPSJjcnVzIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxmbGFnc3xQUEM0MDVzZmRpYWIiIHZhbHVlPSJjcnVzIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxmbGFnc3xQUEM0MDVzZmdudSIgdmFsdWU9ImNydXMiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufGZsYWdzfFBQQzQ0MGRpYWIiIHZhbHVlPSJjcnVzIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxmbGFnc3xQUEM0NDBnbnUiIHZhbHVlPSJjcnVzIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxmbGFnc3xQUEM0NDBzZmRpYWIiIHZhbHVlPSJjcnVzIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxmbGFnc3xQUEM0NDBzZmdudSIgdmFsdWU9ImNydXMiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufGZsYWdzfFBQQzYwM2RpYWIiIHZhbHVlPSJjcnVzIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxmbGFnc3xQUEM2MDNnbnUiIHZhbHVlPSJjcnVzIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxmbGFnc3xQUEM2MDRkaWFiIiB2YWx1ZT0iY3J1cyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58ZmxhZ3N8UFBDNjA0Z251IiB2YWx1ZT0iY3J1cyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58ZmxhZ3N8UFBDODVYWGRpYWIiIHZhbHVlPSJjcnVzIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxmbGFnc3xQUEM4NVhYZ251IiB2YWx1ZT0iY3J1cyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58ZmxhZ3N8UFBDODVYWHNmZGlhYiIgdmFsdWU9ImNydXMiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufGZsYWdzfFBQQzg1WFhzZmdudSIgdmFsdWU9ImNydXMiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufGZsYWdzfFBQQzg2MHNmZGlhYiIgdmFsdWU9ImNydXMiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufGZsYWdzfFBQQzg2MHNmZ251IiB2YWx1ZT0iY3J1cyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58ZmxhZ3N8U0lNTElOVVhkaWFiIiB2YWx1ZT0iY3J1cyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58ZmxhZ3N8U0lNTElOVVhnbnUiIHZhbHVlPSJjcnVzIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxmbGFnc3xTSU1OVGRpYWIiIHZhbHVlPSJjcnVzIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxmbGFnc3xTSU1OVGdudSIgdmFsdWU9ImNydXMiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufGZsYWdzfFNJTVNQQVJDU09MQVJJU2RpYWIiIHZhbHVlPSJjcnVzIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxmbGFnc3xTSU1TUEFSQ1NPTEFSSVNnbnUiIHZhbHVlPSJjcnVzIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxub25EYmdGbGFnc3xQUEMzMmRpYWIiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufG5vbkRiZ0ZsYWdzfFBQQzMyZ251IiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxub25EYmdGbGFnc3xQUEMzMnNmZGlhYiIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58bm9uRGJnRmxhZ3N8UFBDMzJzZmdudSIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58bm9uRGJnRmxhZ3N8UFBDNDAzZGlhYiIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58bm9uRGJnRmxhZ3N8UFBDNDAzZ251IiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxub25EYmdGbGFnc3xQUEM0MDVkaWFiIiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxub25EYmdGbGFnc3xQUEM0MDVnbnUiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufG5vbkRiZ0ZsYWdzfFBQQzQwNXNmZGlhYiIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58bm9uRGJnRmxhZ3N8UFBDNDA1c2ZnbnUiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufG5vbkRiZ0ZsYWdzfFBQQzQ0MGRpYWIiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufG5vbkRiZ0ZsYWdzfFBQQzQ0MGdudSIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58bm9uRGJnRmxhZ3N8UFBDNDQwc2ZkaWFiIiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxub25EYmdGbGFnc3xQUEM0NDBzZmdudSIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58bm9uRGJnRmxhZ3N8UFBDNjAzZGlhYiIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58bm9uRGJnRmxhZ3N8UFBDNjAzZ251IiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxub25EYmdGbGFnc3xQUEM2MDRkaWFiIiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxub25EYmdGbGFnc3xQUEM2MDRnbnUiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufG5vbkRiZ0ZsYWdzfFBQQzg1WFhkaWFiIiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxub25EYmdGbGFnc3xQUEM4NVhYZ251IiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxub25EYmdGbGFnc3xQUEM4NVhYc2ZkaWFiIiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxub25EYmdGbGFnc3xQUEM4NVhYc2ZnbnUiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufG5vbkRiZ0ZsYWdzfFBQQzg2MHNmZGlhYiIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58bm9uRGJnRmxhZ3N8UFBDODYwc2ZnbnUiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufG5vbkRiZ0ZsYWdzfFNJTUxJTlVYZGlhYiIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58bm9uRGJnRmxhZ3N8U0lNTElOVVhnbnUiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufG5vbkRiZ0ZsYWdzfFNJTU5UZGlhYiIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58bm9uRGJnRmxhZ3N8U0lNTlRnbnUiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufG5vbkRiZ0ZsYWdzfFNJTVNQQVJDU09MQVJJU2RpYWIiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufG5vbkRiZ0ZsYWdzfFNJTVNQQVJDU09MQVJJU2dudSIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxib29sZWFuQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufG9iamVjdCIgdmFsdWU9ImZhbHNlIi8+DQorICAgICAgICAgICAgPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58cGFzc0FibGUiIHZhbHVlPSJ0cnVlIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxzaWdzIiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxjbWR8UFBDMzJkaWFiIiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OztybSAtZiAlT3V0RmlsZSU7ZGR1bXAgLU5nICVPYmplY3RzJSAlTGlicmFyaWVzJSB8IHRjbHNoICQoV0lORF9CQVNFKS9ob3N0L3Jlc291cmNlL2h1dGlscy90Y2wvbXVuY2gudGNsIC1jIHBwYyAmZ3Q7ICQoT0JKX0RJUikvY3RkdC5jOyVjY29tcGlsZXJwcmVmaXglICQoVE9PTF9QQVRIKWRjYyAlRGVidWdNb2RlRmxhZ3MlICQoQ0NfQVJDSF9TUEVDKSAtWGRvbGxhci1pbi1pZGVudCAtWGZvcmNlLWRlY2xhcmF0aW9ucyAkKEFEREVEX0NGTEFHUykgJUluY2x1ZGVzJSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAgLW8gJChPQkpfRElSKS9jdGR0Lm8gLWMgJChPQkpfRElSKS9jdGR0LmM7JWxpbmtlcnByZWZpeCUgJChUT09MX1BBVEgpZGxkIC10UFBDRkg6dnh3b3JrczYzIC1YIC1yNSAlVG9vbEZsYWdzJSAtbyAlT3V0RmlsZSUgJChPQkpfRElSKS9jdGR0Lm8gJU9iamVjdHMlICVMaWJyYXJpZXMlICQoTElCUEFUSCkgJChMSUJTKSAgJChBRERFRF9MSUJQQVRIKSAkKEFEREVEX0xJQlMpICZhbXA7JmFtcDsgaWYgWyAmcXVvdDskKEVYUEFORF9EQkcpJnF1b3Q7ID0gJnF1b3Q7MSZxdW90OyBdOyB0aGVuIHBsaW5rICZxdW90OyRAJnF1b3Q7O2ZpIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxjbWR8UFBDMzJnbnUiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7O3JtIC1mICVPdXRGaWxlJTtubXBwYyAlT2JqZWN0cyUgJUxpYnJhcmllcyUgfCB0Y2xzaCAkKFdJTkRfQkFTRSkvaG9zdC9yZXNvdXJjZS9odXRpbHMvdGNsL211bmNoLnRjbCAtYyBwcGMgJmd0OyAkKE9CSl9ESVIpL2N0ZHQuYzslY2NvbXBpbGVycHJlZml4JSAkKFRPT0xfUEFUSCljY3BwYyAlRGVidWdNb2RlRmxhZ3MlICQoQ0NfQVJDSF9TUEVDKSAtZmRvbGxhcnMtaW4taWRlbnRpZmllcnMgLVdhbGwgJChBRERFRF9DRkxBR1MpICVJbmNsdWRlcyUgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgIC1vICQoT0JKX0RJUikvY3RkdC5vIC1jICQoT0JKX0RJUikvY3RkdC5jOyVsaW5rZXJwcmVmaXglICQoVE9PTF9QQVRIKWNjcHBjIC1yIC1ub3N0ZGxpYiAtV2wsLVggJVRvb2xGbGFncyUgLW8gJU91dEZpbGUlICQoT0JKX0RJUikvY3RkdC5vICVPYmplY3RzJSAlTGlicmFyaWVzJSAkKExJQlBBVEgpICQoTElCUykgICQoQURERURfTElCUEFUSCkgJChBRERFRF9MSUJTKSAmYW1wOyZhbXA7IGlmIFsgJnF1b3Q7JChFWFBBTkRfREJHKSZxdW90OyA9ICZxdW90OzEmcXVvdDsgXTsgdGhlbiBwbGluayAmcXVvdDskQCZxdW90OztmaSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8Y21kfFBQQzMyc2ZkaWFiIiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OztybSAtZiAlT3V0RmlsZSU7ZGR1bXAgLU5nICVPYmplY3RzJSAlTGlicmFyaWVzJSB8IHRjbHNoICQoV0lORF9CQVNFKS9ob3N0L3Jlc291cmNlL2h1dGlscy90Y2wvbXVuY2gudGNsIC1jIHBwYyAmZ3Q7ICQoT0JKX0RJUikvY3RkdC5jOyVjY29tcGlsZXJwcmVmaXglICQoVE9PTF9QQVRIKWRjYyAlRGVidWdNb2RlRmxhZ3MlICQoQ0NfQVJDSF9TUEVDKSAtWGRvbGxhci1pbi1pZGVudCAtWGZvcmNlLWRlY2xhcmF0aW9ucyAkKEFEREVEX0NGTEFHUykgJUluY2x1ZGVzJSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAgLW8gJChPQkpfRElSKS9jdGR0Lm8gLWMgJChPQkpfRElSKS9jdGR0LmM7JWxpbmtlcnByZWZpeCUgJChUT09MX1BBVEgpZGxkIC10UFBDRlM6dnh3b3JrczYzIC1YIC1yNSAlVG9vbEZsYWdzJSAtbyAlT3V0RmlsZSUgJChPQkpfRElSKS9jdGR0Lm8gJU9iamVjdHMlICVMaWJyYXJpZXMlICQoTElCUEFUSCkgJChMSUJTKSAgJChBRERFRF9MSUJQQVRIKSAkKEFEREVEX0xJQlMpICZhbXA7JmFtcDsgaWYgWyAmcXVvdDskKEVYUEFORF9EQkcpJnF1b3Q7ID0gJnF1b3Q7MSZxdW90OyBdOyB0aGVuIHBsaW5rICZxdW90OyRAJnF1b3Q7O2ZpIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxjbWR8UFBDMzJzZmdudSIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7cm0gLWYgJU91dEZpbGUlO25tcHBjICVPYmplY3RzJSAlTGlicmFyaWVzJSB8IHRjbHNoICQoV0lORF9CQVNFKS9ob3N0L3Jlc291cmNlL2h1dGlscy90Y2wvbXVuY2gudGNsIC1jIHBwYyAmZ3Q7ICQoT0JKX0RJUikvY3RkdC5jOyVjY29tcGlsZXJwcmVmaXglICQoVE9PTF9QQVRIKWNjcHBjICVEZWJ1Z01vZGVGbGFncyUgJChDQ19BUkNIX1NQRUMpIC1mZG9sbGFycy1pbi1pZGVudGlmaWVycyAtV2FsbCAkKEFEREVEX0NGTEFHUykgJUluY2x1ZGVzJSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAgLW8gJChPQkpfRElSKS9jdGR0Lm8gLWMgJChPQkpfRElSKS9jdGR0LmM7JWxpbmtlcnByZWZpeCUgJChUT09MX1BBVEgpY2NwcGMgLXIgLW5vc3RkbGliIC1XbCwtWCAlVG9vbEZsYWdzJSAtbyAlT3V0RmlsZSUgJChPQkpfRElSKS9jdGR0Lm8gJU9iamVjdHMlICVMaWJyYXJpZXMlICQoTElCUEFUSCkgJChMSUJTKSAgJChBRERFRF9MSUJQQVRIKSAkKEFEREVEX0xJQlMpICZhbXA7JmFtcDsgaWYgWyAmcXVvdDskKEVYUEFORF9EQkcpJnF1b3Q7ID0gJnF1b3Q7MSZxdW90OyBdOyB0aGVuIHBsaW5rICZxdW90OyRAJnF1b3Q7O2ZpIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxjbWR8UFBDNDAzZGlhYiIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7cm0gLWYgJU91dEZpbGUlO2RkdW1wIC1OZyAlT2JqZWN0cyUgJUxpYnJhcmllcyUgfCB0Y2xzaCAkKFdJTkRfQkFTRSkvaG9zdC9yZXNvdXJjZS9odXRpbHMvdGNsL211bmNoLnRjbCAtYyBwcGMgJmd0OyAkKE9CSl9ESVIpL2N0ZHQuYzslY2NvbXBpbGVycHJlZml4JSAkKFRPT0xfUEFUSClkY2MgJURlYnVnTW9kZUZsYWdzJSAkKENDX0FSQ0hfU1BFQykgLVhkb2xsYXItaW4taWRlbnQgLVhmb3JjZS1kZWNsYXJhdGlvbnMgJChBRERFRF9DRkxBR1MpICVJbmNsdWRlcyUgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgIC1vICQoT0JKX0RJUikvY3RkdC5vIC1jICQoT0JKX0RJUikvY3RkdC5jOyVsaW5rZXJwcmVmaXglICQoVE9PTF9QQVRIKWRsZCAtdFBQQzQwM0ZTOnZ4d29ya3M2MyAtWCAtcjUgJVRvb2xGbGFncyUgLW8gJU91dEZpbGUlICQoT0JKX0RJUikvY3RkdC5vICVPYmplY3RzJSAlTGlicmFyaWVzJSAkKExJQlBBVEgpICQoTElCUykgICQoQURERURfTElCUEFUSCkgJChBRERFRF9MSUJTKSAmYW1wOyZhbXA7IGlmIFsgJnF1b3Q7JChFWFBBTkRfREJHKSZxdW90OyA9ICZxdW90OzEmcXVvdDsgXTsgdGhlbiBwbGluayAmcXVvdDskQCZxdW90OztmaSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8Y21kfFBQQzQwM2dudSIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7cm0gLWYgJU91dEZpbGUlO25tcHBjICVPYmplY3RzJSAlTGlicmFyaWVzJSB8IHRjbHNoICQoV0lORF9CQVNFKS9ob3N0L3Jlc291cmNlL2h1dGlscy90Y2wvbXVuY2gudGNsIC1jIHBwYyAmZ3Q7ICQoT0JKX0RJUikvY3RkdC5jOyVjY29tcGlsZXJwcmVmaXglICQoVE9PTF9QQVRIKWNjcHBjICVEZWJ1Z01vZGVGbGFncyUgJChDQ19BUkNIX1NQRUMpIC1mZG9sbGFycy1pbi1pZGVudGlmaWVycyAtV2FsbCAkKEFEREVEX0NGTEFHUykgJUluY2x1ZGVzJSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAgLW8gJChPQkpfRElSKS9jdGR0Lm8gLWMgJChPQkpfRElSKS9jdGR0LmM7JWxpbmtlcnByZWZpeCUgJChUT09MX1BBVEgpY2NwcGMgLXIgLW5vc3RkbGliIC1XbCwtWCAlVG9vbEZsYWdzJSAtbyAlT3V0RmlsZSUgJChPQkpfRElSKS9jdGR0Lm8gJU9iamVjdHMlICVMaWJyYXJpZXMlICQoTElCUEFUSCkgJChMSUJTKSAgJChBRERFRF9MSUJQQVRIKSAkKEFEREVEX0xJQlMpICZhbXA7JmFtcDsgaWYgWyAmcXVvdDskKEVYUEFORF9EQkcpJnF1b3Q7ID0gJnF1b3Q7MSZxdW90OyBdOyB0aGVuIHBsaW5rICZxdW90OyRAJnF1b3Q7O2ZpIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxjbWR8UFBDNDA1ZGlhYiIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7cm0gLWYgJU91dEZpbGUlO2RkdW1wIC1OZyAlT2JqZWN0cyUgJUxpYnJhcmllcyUgfCB0Y2xzaCAkKFdJTkRfQkFTRSkvaG9zdC9yZXNvdXJjZS9odXRpbHMvdGNsL211bmNoLnRjbCAtYyBwcGMgJmd0OyAkKE9CSl9ESVIpL2N0ZHQuYzslY2NvbXBpbGVycHJlZml4JSAkKFRPT0xfUEFUSClkY2MgJURlYnVnTW9kZUZsYWdzJSAkKENDX0FSQ0hfU1BFQykgLVhkb2xsYXItaW4taWRlbnQgLVhmb3JjZS1kZWNsYXJhdGlvbnMgJChBRERFRF9DRkxBR1MpICVJbmNsdWRlcyUgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgIC1vICQoT0JKX0RJUikvY3RkdC5vIC1jICQoT0JKX0RJUikvY3RkdC5jOyVsaW5rZXJwcmVmaXglICQoVE9PTF9QQVRIKWRsZCAtdFBQQzQwNUZTOnZ4d29ya3M2MyAtWCAtcjUgJVRvb2xGbGFncyUgLW8gJU91dEZpbGUlICQoT0JKX0RJUikvY3RkdC5vICVPYmplY3RzJSAlTGlicmFyaWVzJSAkKExJQlBBVEgpICQoTElCUykgICQoQURERURfTElCUEFUSCkgJChBRERFRF9MSUJTKSAmYW1wOyZhbXA7IGlmIFsgJnF1b3Q7JChFWFBBTkRfREJHKSZxdW90OyA9ICZxdW90OzEmcXVvdDsgXTsgdGhlbiBwbGluayAmcXVvdDskQCZxdW90OztmaSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8Y21kfFBQQzQwNWdudSIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7cm0gLWYgJU91dEZpbGUlO25tcHBjICVPYmplY3RzJSAlTGlicmFyaWVzJSB8IHRjbHNoICQoV0lORF9CQVNFKS9ob3N0L3Jlc291cmNlL2h1dGlscy90Y2wvbXVuY2gudGNsIC1jIHBwYyAmZ3Q7ICQoT0JKX0RJUikvY3RkdC5jOyVjY29tcGlsZXJwcmVmaXglICQoVE9PTF9QQVRIKWNjcHBjICVEZWJ1Z01vZGVGbGFncyUgJChDQ19BUkNIX1NQRUMpIC1mZG9sbGFycy1pbi1pZGVudGlmaWVycyAtV2FsbCAkKEFEREVEX0NGTEFHUykgJUluY2x1ZGVzJSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAgLW8gJChPQkpfRElSKS9jdGR0Lm8gLWMgJChPQkpfRElSKS9jdGR0LmM7JWxpbmtlcnByZWZpeCUgJChUT09MX1BBVEgpY2NwcGMgLXIgLW5vc3RkbGliIC1XbCwtWCAlVG9vbEZsYWdzJSAtbyAlT3V0RmlsZSUgJChPQkpfRElSKS9jdGR0Lm8gJU9iamVjdHMlICVMaWJyYXJpZXMlICQoTElCUEFUSCkgJChMSUJTKSAgJChBRERFRF9MSUJQQVRIKSAkKEFEREVEX0xJQlMpICZhbXA7JmFtcDsgaWYgWyAmcXVvdDskKEVYUEFORF9EQkcpJnF1b3Q7ID0gJnF1b3Q7MSZxdW90OyBdOyB0aGVuIHBsaW5rICZxdW90OyRAJnF1b3Q7O2ZpIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxjbWR8UFBDNDA1c2ZkaWFiIiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OztybSAtZiAlT3V0RmlsZSU7ZGR1bXAgLU5nICVPYmplY3RzJSAlTGlicmFyaWVzJSB8IHRjbHNoICQoV0lORF9CQVNFKS9ob3N0L3Jlc291cmNlL2h1dGlscy90Y2wvbXVuY2gudGNsIC1jIHBwYyAmZ3Q7ICQoT0JKX0RJUikvY3RkdC5jOyVjY29tcGlsZXJwcmVmaXglICQoVE9PTF9QQVRIKWRjYyAlRGVidWdNb2RlRmxhZ3MlICQoQ0NfQVJDSF9TUEVDKSAtWGRvbGxhci1pbi1pZGVudCAtWGZvcmNlLWRlY2xhcmF0aW9ucyAkKEFEREVEX0NGTEFHUykgJUluY2x1ZGVzJSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAgLW8gJChPQkpfRElSKS9jdGR0Lm8gLWMgJChPQkpfRElSKS9jdGR0LmM7JWxpbmtlcnByZWZpeCUgJChUT09MX1BBVEgpZGxkIC10UFBDNDA1RlM6dnh3b3JrczYzIC1YIC1yNSAlVG9vbEZsYWdzJSAtbyAlT3V0RmlsZSUgJChPQkpfRElSKS9jdGR0Lm8gJU9iamVjdHMlICVMaWJyYXJpZXMlICQoTElCUEFUSCkgJChMSUJTKSAgJChBRERFRF9MSUJQQVRIKSAkKEFEREVEX0xJQlMpICZhbXA7JmFtcDsgaWYgWyAmcXVvdDskKEVYUEFORF9EQkcpJnF1b3Q7ID0gJnF1b3Q7MSZxdW90OyBdOyB0aGVuIHBsaW5rICZxdW90OyRAJnF1b3Q7O2ZpIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxjbWR8UFBDNDA1c2ZnbnUiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7O3JtIC1mICVPdXRGaWxlJTtubXBwYyAlT2JqZWN0cyUgJUxpYnJhcmllcyUgfCB0Y2xzaCAkKFdJTkRfQkFTRSkvaG9zdC9yZXNvdXJjZS9odXRpbHMvdGNsL211bmNoLnRjbCAtYyBwcGMgJmd0OyAkKE9CSl9ESVIpL2N0ZHQuYzslY2NvbXBpbGVycHJlZml4JSAkKFRPT0xfUEFUSCljY3BwYyAlRGVidWdNb2RlRmxhZ3MlICQoQ0NfQVJDSF9TUEVDKSAtZmRvbGxhcnMtaW4taWRlbnRpZmllcnMgLVdhbGwgJChBRERFRF9DRkxBR1MpICVJbmNsdWRlcyUgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgIC1vICQoT0JKX0RJUikvY3RkdC5vIC1jICQoT0JKX0RJUikvY3RkdC5jOyVsaW5rZXJwcmVmaXglICQoVE9PTF9QQVRIKWNjcHBjIC1yIC1ub3N0ZGxpYiAtV2wsLVggJVRvb2xGbGFncyUgLW8gJU91dEZpbGUlICQoT0JKX0RJUikvY3RkdC5vICVPYmplY3RzJSAlTGlicmFyaWVzJSAkKExJQlBBVEgpICQoTElCUykgICQoQURERURfTElCUEFUSCkgJChBRERFRF9MSUJTKSAmYW1wOyZhbXA7IGlmIFsgJnF1b3Q7JChFWFBBTkRfREJHKSZxdW90OyA9ICZxdW90OzEmcXVvdDsgXTsgdGhlbiBwbGluayAmcXVvdDskQCZxdW90OztmaSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8Y21kfFBQQzQ0MGRpYWIiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7O3JtIC1mICVPdXRGaWxlJTtkZHVtcCAtTmcgJU9iamVjdHMlICVMaWJyYXJpZXMlIHwgdGNsc2ggJChXSU5EX0JBU0UpL2hvc3QvcmVzb3VyY2UvaHV0aWxzL3RjbC9tdW5jaC50Y2wgLWMgcHBjICZndDsgJChPQkpfRElSKS9jdGR0LmM7JWNjb21waWxlcnByZWZpeCUgJChUT09MX1BBVEgpZGNjICVEZWJ1Z01vZGVGbGFncyUgJChDQ19BUkNIX1NQRUMpIC1YZG9sbGFyLWluLWlkZW50IC1YZm9yY2UtZGVjbGFyYXRpb25zICQoQURERURfQ0ZMQUdTKSAlSW5jbHVkZXMlICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpICAtbyAkKE9CSl9ESVIpL2N0ZHQubyAtYyAkKE9CSl9ESVIpL2N0ZHQuYzslbGlua2VycHJlZml4JSAkKFRPT0xfUEFUSClkbGQgLXRQUEM0NDBGSDp2eHdvcmtzNjMgLVggLXI1ICVUb29sRmxhZ3MlIC1vICVPdXRGaWxlJSAkKE9CSl9ESVIpL2N0ZHQubyAlT2JqZWN0cyUgJUxpYnJhcmllcyUgJChMSUJQQVRIKSAkKExJQlMpICAkKEFEREVEX0xJQlBBVEgpICQoQURERURfTElCUykgJmFtcDsmYW1wOyBpZiBbICZxdW90OyQoRVhQQU5EX0RCRykmcXVvdDsgPSAmcXVvdDsxJnF1b3Q7IF07IHRoZW4gcGxpbmsgJnF1b3Q7JEAmcXVvdDs7ZmkiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfGNtZHxQUEM0NDBnbnUiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7O3JtIC1mICVPdXRGaWxlJTtubXBwYyAlT2JqZWN0cyUgJUxpYnJhcmllcyUgfCB0Y2xzaCAkKFdJTkRfQkFTRSkvaG9zdC9yZXNvdXJjZS9odXRpbHMvdGNsL211bmNoLnRjbCAtYyBwcGMgJmd0OyAkKE9CSl9ESVIpL2N0ZHQuYzslY2NvbXBpbGVycHJlZml4JSAkKFRPT0xfUEFUSCljY3BwYyAlRGVidWdNb2RlRmxhZ3MlICQoQ0NfQVJDSF9TUEVDKSAtZmRvbGxhcnMtaW4taWRlbnRpZmllcnMgLVdhbGwgJChBRERFRF9DRkxBR1MpICVJbmNsdWRlcyUgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgIC1vICQoT0JKX0RJUikvY3RkdC5vIC1jICQoT0JKX0RJUikvY3RkdC5jOyVsaW5rZXJwcmVmaXglICQoVE9PTF9QQVRIKWNjcHBjIC1yIC1ub3N0ZGxpYiAtV2wsLVggJVRvb2xGbGFncyUgLW8gJU91dEZpbGUlICQoT0JKX0RJUikvY3RkdC5vICVPYmplY3RzJSAlTGlicmFyaWVzJSAkKExJQlBBVEgpICQoTElCUykgICQoQURERURfTElCUEFUSCkgJChBRERFRF9MSUJTKSAmYW1wOyZhbXA7IGlmIFsgJnF1b3Q7JChFWFBBTkRfREJHKSZxdW90OyA9ICZxdW90OzEmcXVvdDsgXTsgdGhlbiBwbGluayAmcXVvdDskQCZxdW90OztmaSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8Y21kfFBQQzQ0MHNmZGlhYiIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7cm0gLWYgJU91dEZpbGUlO2RkdW1wIC1OZyAlT2JqZWN0cyUgJUxpYnJhcmllcyUgfCB0Y2xzaCAkKFdJTkRfQkFTRSkvaG9zdC9yZXNvdXJjZS9odXRpbHMvdGNsL211bmNoLnRjbCAtYyBwcGMgJmd0OyAkKE9CSl9ESVIpL2N0ZHQuYzslY2NvbXBpbGVycHJlZml4JSAkKFRPT0xfUEFUSClkY2MgJURlYnVnTW9kZUZsYWdzJSAkKENDX0FSQ0hfU1BFQykgLVhkb2xsYXItaW4taWRlbnQgLVhmb3JjZS1kZWNsYXJhdGlvbnMgJChBRERFRF9DRkxBR1MpICVJbmNsdWRlcyUgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgIC1vICQoT0JKX0RJUikvY3RkdC5vIC1jICQoT0JKX0RJUikvY3RkdC5jOyVsaW5rZXJwcmVmaXglICQoVE9PTF9QQVRIKWRsZCAtdFBQQzQ0MEZTOnZ4d29ya3M2MyAtWCAtcjUgJVRvb2xGbGFncyUgLW8gJU91dEZpbGUlICQoT0JKX0RJUikvY3RkdC5vICVPYmplY3RzJSAlTGlicmFyaWVzJSAkKExJQlBBVEgpICQoTElCUykgICQoQURERURfTElCUEFUSCkgJChBRERFRF9MSUJTKSAmYW1wOyZhbXA7IGlmIFsgJnF1b3Q7JChFWFBBTkRfREJHKSZxdW90OyA9ICZxdW90OzEmcXVvdDsgXTsgdGhlbiBwbGluayAmcXVvdDskQCZxdW90OztmaSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8Y21kfFBQQzQ0MHNmZ251IiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OztybSAtZiAlT3V0RmlsZSU7bm1wcGMgJU9iamVjdHMlICVMaWJyYXJpZXMlIHwgdGNsc2ggJChXSU5EX0JBU0UpL2hvc3QvcmVzb3VyY2UvaHV0aWxzL3RjbC9tdW5jaC50Y2wgLWMgcHBjICZndDsgJChPQkpfRElSKS9jdGR0LmM7JWNjb21waWxlcnByZWZpeCUgJChUT09MX1BBVEgpY2NwcGMgJURlYnVnTW9kZUZsYWdzJSAkKENDX0FSQ0hfU1BFQykgLWZkb2xsYXJzLWluLWlkZW50aWZpZXJzIC1XYWxsICQoQURERURfQ0ZMQUdTKSAlSW5jbHVkZXMlICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpICAtbyAkKE9CSl9ESVIpL2N0ZHQubyAtYyAkKE9CSl9ESVIpL2N0ZHQuYzslbGlua2VycHJlZml4JSAkKFRPT0xfUEFUSCljY3BwYyAtciAtbm9zdGRsaWIgLVdsLC1YICVUb29sRmxhZ3MlIC1vICVPdXRGaWxlJSAkKE9CSl9ESVIpL2N0ZHQubyAlT2JqZWN0cyUgJUxpYnJhcmllcyUgJChMSUJQQVRIKSAkKExJQlMpICAkKEFEREVEX0xJQlBBVEgpICQoQURERURfTElCUykgJmFtcDsmYW1wOyBpZiBbICZxdW90OyQoRVhQQU5EX0RCRykmcXVvdDsgPSAmcXVvdDsxJnF1b3Q7IF07IHRoZW4gcGxpbmsgJnF1b3Q7JEAmcXVvdDs7ZmkiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfGNtZHxQUEM2MDNkaWFiIiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OztybSAtZiAlT3V0RmlsZSU7ZGR1bXAgLU5nICVPYmplY3RzJSAlTGlicmFyaWVzJSB8IHRjbHNoICQoV0lORF9CQVNFKS9ob3N0L3Jlc291cmNlL2h1dGlscy90Y2wvbXVuY2gudGNsIC1jIHBwYyAmZ3Q7ICQoT0JKX0RJUikvY3RkdC5jOyVjY29tcGlsZXJwcmVmaXglICQoVE9PTF9QQVRIKWRjYyAlRGVidWdNb2RlRmxhZ3MlICQoQ0NfQVJDSF9TUEVDKSAtWGRvbGxhci1pbi1pZGVudCAtWGZvcmNlLWRlY2xhcmF0aW9ucyAkKEFEREVEX0NGTEFHUykgJUluY2x1ZGVzJSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAgLW8gJChPQkpfRElSKS9jdGR0Lm8gLWMgJChPQkpfRElSKS9jdGR0LmM7JWxpbmtlcnByZWZpeCUgJChUT09MX1BBVEgpZGxkIC10UFBDNjAzRkg6dnh3b3JrczYzIC1YIC1yNSAlVG9vbEZsYWdzJSAtbyAlT3V0RmlsZSUgJChPQkpfRElSKS9jdGR0Lm8gJU9iamVjdHMlICVMaWJyYXJpZXMlICQoTElCUEFUSCkgJChMSUJTKSAgJChBRERFRF9MSUJQQVRIKSAkKEFEREVEX0xJQlMpICZhbXA7JmFtcDsgaWYgWyAmcXVvdDskKEVYUEFORF9EQkcpJnF1b3Q7ID0gJnF1b3Q7MSZxdW90OyBdOyB0aGVuIHBsaW5rICZxdW90OyRAJnF1b3Q7O2ZpIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxjbWR8UFBDNjAzZ251IiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OztybSAtZiAlT3V0RmlsZSU7bm1wcGMgJU9iamVjdHMlICVMaWJyYXJpZXMlIHwgdGNsc2ggJChXSU5EX0JBU0UpL2hvc3QvcmVzb3VyY2UvaHV0aWxzL3RjbC9tdW5jaC50Y2wgLWMgcHBjICZndDsgJChPQkpfRElSKS9jdGR0LmM7JWNjb21waWxlcnByZWZpeCUgJChUT09MX1BBVEgpY2NwcGMgJURlYnVnTW9kZUZsYWdzJSAkKENDX0FSQ0hfU1BFQykgLWZkb2xsYXJzLWluLWlkZW50aWZpZXJzIC1XYWxsICQoQURERURfQ0ZMQUdTKSAlSW5jbHVkZXMlICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpICAtbyAkKE9CSl9ESVIpL2N0ZHQubyAtYyAkKE9CSl9ESVIpL2N0ZHQuYzslbGlua2VycHJlZml4JSAkKFRPT0xfUEFUSCljY3BwYyAtciAtbm9zdGRsaWIgLVdsLC1YICVUb29sRmxhZ3MlIC1vICVPdXRGaWxlJSAkKE9CSl9ESVIpL2N0ZHQubyAlT2JqZWN0cyUgJUxpYnJhcmllcyUgJChMSUJQQVRIKSAkKExJQlMpICAkKEFEREVEX0xJQlBBVEgpICQoQURERURfTElCUykgJmFtcDsmYW1wOyBpZiBbICZxdW90OyQoRVhQQU5EX0RCRykmcXVvdDsgPSAmcXVvdDsxJnF1b3Q7IF07IHRoZW4gcGxpbmsgJnF1b3Q7JEAmcXVvdDs7ZmkiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfGNtZHxQUEM2MDRkaWFiIiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OztybSAtZiAlT3V0RmlsZSU7ZGR1bXAgLU5nICVPYmplY3RzJSAlTGlicmFyaWVzJSB8IHRjbHNoICQoV0lORF9CQVNFKS9ob3N0L3Jlc291cmNlL2h1dGlscy90Y2wvbXVuY2gudGNsIC1jIHBwYyAmZ3Q7ICQoT0JKX0RJUikvY3RkdC5jOyVjY29tcGlsZXJwcmVmaXglICQoVE9PTF9QQVRIKWRjYyAlRGVidWdNb2RlRmxhZ3MlICQoQ0NfQVJDSF9TUEVDKSAtWGRvbGxhci1pbi1pZGVudCAtWGZvcmNlLWRlY2xhcmF0aW9ucyAkKEFEREVEX0NGTEFHUykgJUluY2x1ZGVzJSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAgLW8gJChPQkpfRElSKS9jdGR0Lm8gLWMgJChPQkpfRElSKS9jdGR0LmM7JWxpbmtlcnByZWZpeCUgJChUT09MX1BBVEgpZGxkIC10UFBDNjA0Rkg6dnh3b3JrczYzIC1YIC1yNSAlVG9vbEZsYWdzJSAtbyAlT3V0RmlsZSUgJChPQkpfRElSKS9jdGR0Lm8gJU9iamVjdHMlICVMaWJyYXJpZXMlICQoTElCUEFUSCkgJChMSUJTKSAgJChBRERFRF9MSUJQQVRIKSAkKEFEREVEX0xJQlMpICZhbXA7JmFtcDsgaWYgWyAmcXVvdDskKEVYUEFORF9EQkcpJnF1b3Q7ID0gJnF1b3Q7MSZxdW90OyBdOyB0aGVuIHBsaW5rICZxdW90OyRAJnF1b3Q7O2ZpIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxjbWR8UFBDNjA0Z251IiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OztybSAtZiAlT3V0RmlsZSU7bm1wcGMgJU9iamVjdHMlICVMaWJyYXJpZXMlIHwgdGNsc2ggJChXSU5EX0JBU0UpL2hvc3QvcmVzb3VyY2UvaHV0aWxzL3RjbC9tdW5jaC50Y2wgLWMgcHBjICZndDsgJChPQkpfRElSKS9jdGR0LmM7JWNjb21waWxlcnByZWZpeCUgJChUT09MX1BBVEgpY2NwcGMgJURlYnVnTW9kZUZsYWdzJSAkKENDX0FSQ0hfU1BFQykgLWZkb2xsYXJzLWluLWlkZW50aWZpZXJzIC1XYWxsICQoQURERURfQ0ZMQUdTKSAlSW5jbHVkZXMlICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpICAtbyAkKE9CSl9ESVIpL2N0ZHQubyAtYyAkKE9CSl9ESVIpL2N0ZHQuYzslbGlua2VycHJlZml4JSAkKFRPT0xfUEFUSCljY3BwYyAtciAtbm9zdGRsaWIgLVdsLC1YICVUb29sRmxhZ3MlIC1vICVPdXRGaWxlJSAkKE9CSl9ESVIpL2N0ZHQubyAlT2JqZWN0cyUgJUxpYnJhcmllcyUgJChMSUJQQVRIKSAkKExJQlMpICAkKEFEREVEX0xJQlBBVEgpICQoQURERURfTElCUykgJmFtcDsmYW1wOyBpZiBbICZxdW90OyQoRVhQQU5EX0RCRykmcXVvdDsgPSAmcXVvdDsxJnF1b3Q7IF07IHRoZW4gcGxpbmsgJnF1b3Q7JEAmcXVvdDs7ZmkiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfGNtZHxQUEM4NVhYZGlhYiIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7cm0gLWYgJU91dEZpbGUlO2RkdW1wIC1OZyAlT2JqZWN0cyUgJUxpYnJhcmllcyUgfCB0Y2xzaCAkKFdJTkRfQkFTRSkvaG9zdC9yZXNvdXJjZS9odXRpbHMvdGNsL211bmNoLnRjbCAtYyBwcGMgJmd0OyAkKE9CSl9ESVIpL2N0ZHQuYzslY2NvbXBpbGVycHJlZml4JSAkKFRPT0xfUEFUSClkY2MgJURlYnVnTW9kZUZsYWdzJSAkKENDX0FSQ0hfU1BFQykgLVhkb2xsYXItaW4taWRlbnQgLVhmb3JjZS1kZWNsYXJhdGlvbnMgJChBRERFRF9DRkxBR1MpICVJbmNsdWRlcyUgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgIC1vICQoT0JKX0RJUikvY3RkdC5vIC1jICQoT0JKX0RJUikvY3RkdC5jOyVsaW5rZXJwcmVmaXglICQoVE9PTF9QQVRIKWRsZCAtdFBQQ0U1MDBGUzp2eHdvcmtzNjMgLVggLXI1ICVUb29sRmxhZ3MlIC1vICVPdXRGaWxlJSAkKE9CSl9ESVIpL2N0ZHQubyAlT2JqZWN0cyUgJUxpYnJhcmllcyUgJChMSUJQQVRIKSAkKExJQlMpICAkKEFEREVEX0xJQlBBVEgpICQoQURERURfTElCUykgJmFtcDsmYW1wOyBpZiBbICZxdW90OyQoRVhQQU5EX0RCRykmcXVvdDsgPSAmcXVvdDsxJnF1b3Q7IF07IHRoZW4gcGxpbmsgJnF1b3Q7JEAmcXVvdDs7ZmkiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfGNtZHxQUEM4NVhYZ251IiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OztybSAtZiAlT3V0RmlsZSU7bm1wcGMgJU9iamVjdHMlICVMaWJyYXJpZXMlIHwgdGNsc2ggJChXSU5EX0JBU0UpL2hvc3QvcmVzb3VyY2UvaHV0aWxzL3RjbC9tdW5jaC50Y2wgLWMgcHBjICZndDsgJChPQkpfRElSKS9jdGR0LmM7JWNjb21waWxlcnByZWZpeCUgJChUT09MX1BBVEgpY2NwcGMgJURlYnVnTW9kZUZsYWdzJSAkKENDX0FSQ0hfU1BFQykgLWZkb2xsYXJzLWluLWlkZW50aWZpZXJzIC1XYWxsICQoQURERURfQ0ZMQUdTKSAlSW5jbHVkZXMlICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpICAtbyAkKE9CSl9ESVIpL2N0ZHQubyAtYyAkKE9CSl9ESVIpL2N0ZHQuYzslbGlua2VycHJlZml4JSAkKFRPT0xfUEFUSCljY3BwYyAtciAtbm9zdGRsaWIgLVdsLC1YICVUb29sRmxhZ3MlIC1vICVPdXRGaWxlJSAkKE9CSl9ESVIpL2N0ZHQubyAlT2JqZWN0cyUgJUxpYnJhcmllcyUgJChMSUJQQVRIKSAkKExJQlMpICAkKEFEREVEX0xJQlBBVEgpICQoQURERURfTElCUykgJmFtcDsmYW1wOyBpZiBbICZxdW90OyQoRVhQQU5EX0RCRykmcXVvdDsgPSAmcXVvdDsxJnF1b3Q7IF07IHRoZW4gcGxpbmsgJnF1b3Q7JEAmcXVvdDs7ZmkiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfGNtZHxQUEM4NVhYc2ZkaWFiIiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OztybSAtZiAlT3V0RmlsZSU7ZGR1bXAgLU5nICVPYmplY3RzJSAlTGlicmFyaWVzJSB8IHRjbHNoICQoV0lORF9CQVNFKS9ob3N0L3Jlc291cmNlL2h1dGlscy90Y2wvbXVuY2gudGNsIC1jIHBwYyAmZ3Q7ICQoT0JKX0RJUikvY3RkdC5jOyVjY29tcGlsZXJwcmVmaXglICQoVE9PTF9QQVRIKWRjYyAlRGVidWdNb2RlRmxhZ3MlICQoQ0NfQVJDSF9TUEVDKSAtWGRvbGxhci1pbi1pZGVudCAtWGZvcmNlLWRlY2xhcmF0aW9ucyAkKEFEREVEX0NGTEFHUykgJUluY2x1ZGVzJSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAgLW8gJChPQkpfRElSKS9jdGR0Lm8gLWMgJChPQkpfRElSKS9jdGR0LmM7JWxpbmtlcnByZWZpeCUgJChUT09MX1BBVEgpZGxkIC10UFBDRTUwMEZTOnZ4d29ya3M2MyAtWCAtcjUgJVRvb2xGbGFncyUgLW8gJU91dEZpbGUlICQoT0JKX0RJUikvY3RkdC5vICVPYmplY3RzJSAlTGlicmFyaWVzJSAkKExJQlBBVEgpICQoTElCUykgICQoQURERURfTElCUEFUSCkgJChBRERFRF9MSUJTKSAmYW1wOyZhbXA7IGlmIFsgJnF1b3Q7JChFWFBBTkRfREJHKSZxdW90OyA9ICZxdW90OzEmcXVvdDsgXTsgdGhlbiBwbGluayAmcXVvdDskQCZxdW90OztmaSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8Y21kfFBQQzg1WFhzZmdudSIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7cm0gLWYgJU91dEZpbGUlO25tcHBjICVPYmplY3RzJSAlTGlicmFyaWVzJSB8IHRjbHNoICQoV0lORF9CQVNFKS9ob3N0L3Jlc291cmNlL2h1dGlscy90Y2wvbXVuY2gudGNsIC1jIHBwYyAmZ3Q7ICQoT0JKX0RJUikvY3RkdC5jOyVjY29tcGlsZXJwcmVmaXglICQoVE9PTF9QQVRIKWNjcHBjICVEZWJ1Z01vZGVGbGFncyUgJChDQ19BUkNIX1NQRUMpIC1mZG9sbGFycy1pbi1pZGVudGlmaWVycyAtV2FsbCAkKEFEREVEX0NGTEFHUykgJUluY2x1ZGVzJSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAgLW8gJChPQkpfRElSKS9jdGR0Lm8gLWMgJChPQkpfRElSKS9jdGR0LmM7JWxpbmtlcnByZWZpeCUgJChUT09MX1BBVEgpY2NwcGMgLXIgLW5vc3RkbGliIC1XbCwtWCAlVG9vbEZsYWdzJSAtbyAlT3V0RmlsZSUgJChPQkpfRElSKS9jdGR0Lm8gJU9iamVjdHMlICVMaWJyYXJpZXMlICQoTElCUEFUSCkgJChMSUJTKSAgJChBRERFRF9MSUJQQVRIKSAkKEFEREVEX0xJQlMpICZhbXA7JmFtcDsgaWYgWyAmcXVvdDskKEVYUEFORF9EQkcpJnF1b3Q7ID0gJnF1b3Q7MSZxdW90OyBdOyB0aGVuIHBsaW5rICZxdW90OyRAJnF1b3Q7O2ZpIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxjbWR8UFBDODYwc2ZkaWFiIiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OztybSAtZiAlT3V0RmlsZSU7ZGR1bXAgLU5nICVPYmplY3RzJSAlTGlicmFyaWVzJSB8IHRjbHNoICQoV0lORF9CQVNFKS9ob3N0L3Jlc291cmNlL2h1dGlscy90Y2wvbXVuY2gudGNsIC1jIHBwYyAmZ3Q7ICQoT0JKX0RJUikvY3RkdC5jOyVjY29tcGlsZXJwcmVmaXglICQoVE9PTF9QQVRIKWRjYyAlRGVidWdNb2RlRmxhZ3MlICQoQ0NfQVJDSF9TUEVDKSAtWGRvbGxhci1pbi1pZGVudCAtWGZvcmNlLWRlY2xhcmF0aW9ucyAkKEFEREVEX0NGTEFHUykgJUluY2x1ZGVzJSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAgLW8gJChPQkpfRElSKS9jdGR0Lm8gLWMgJChPQkpfRElSKS9jdGR0LmM7JWxpbmtlcnByZWZpeCUgJChUT09MX1BBVEgpZGxkIC10UFBDODYwRlM6dnh3b3JrczYzIC1YIC1yNSAlVG9vbEZsYWdzJSAtbyAlT3V0RmlsZSUgJChPQkpfRElSKS9jdGR0Lm8gJU9iamVjdHMlICVMaWJyYXJpZXMlICQoTElCUEFUSCkgJChMSUJTKSAgJChBRERFRF9MSUJQQVRIKSAkKEFEREVEX0xJQlMpICZhbXA7JmFtcDsgaWYgWyAmcXVvdDskKEVYUEFORF9EQkcpJnF1b3Q7ID0gJnF1b3Q7MSZxdW90OyBdOyB0aGVuIHBsaW5rICZxdW90OyRAJnF1b3Q7O2ZpIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxjbWR8UFBDODYwc2ZnbnUiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7O3JtIC1mICVPdXRGaWxlJTtubXBwYyAlT2JqZWN0cyUgJUxpYnJhcmllcyUgfCB0Y2xzaCAkKFdJTkRfQkFTRSkvaG9zdC9yZXNvdXJjZS9odXRpbHMvdGNsL211bmNoLnRjbCAtYyBwcGMgJmd0OyAkKE9CSl9ESVIpL2N0ZHQuYzslY2NvbXBpbGVycHJlZml4JSAkKFRPT0xfUEFUSCljY3BwYyAlRGVidWdNb2RlRmxhZ3MlICQoQ0NfQVJDSF9TUEVDKSAtZmRvbGxhcnMtaW4taWRlbnRpZmllcnMgLVdhbGwgJChBRERFRF9DRkxBR1MpICVJbmNsdWRlcyUgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgIC1vICQoT0JKX0RJUikvY3RkdC5vIC1jICQoT0JKX0RJUikvY3RkdC5jOyVsaW5rZXJwcmVmaXglICQoVE9PTF9QQVRIKWNjcHBjIC1yIC1ub3N0ZGxpYiAtV2wsLVggJVRvb2xGbGFncyUgLW8gJU91dEZpbGUlICQoT0JKX0RJUikvY3RkdC5vICVPYmplY3RzJSAlTGlicmFyaWVzJSAkKExJQlBBVEgpICQoTElCUykgICQoQURERURfTElCUEFUSCkgJChBRERFRF9MSUJTKSAmYW1wOyZhbXA7IGlmIFsgJnF1b3Q7JChFWFBBTkRfREJHKSZxdW90OyA9ICZxdW90OzEmcXVvdDsgXTsgdGhlbiBwbGluayAmcXVvdDskQCZxdW90OztmaSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8Y21kfFNJTUxJTlVYZGlhYiIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7cm0gLWYgJU91dEZpbGUlO2RkdW1wIC1OZyAlT2JqZWN0cyUgJUxpYnJhcmllcyUgfCB0Y2xzaCAkKFdJTkRfQkFTRSkvaG9zdC9yZXNvdXJjZS9odXRpbHMvdGNsL211bmNoLnRjbCAtYyBwZW50aXVtICZndDsgJChPQkpfRElSKS9jdGR0LmM7JWNjb21waWxlcnByZWZpeCUgJChUT09MX1BBVEgpZGNjICVEZWJ1Z01vZGVGbGFncyUgJChDQ19BUkNIX1NQRUMpIC1YZG9sbGFyLWluLWlkZW50IC1YZm9yY2UtZGVjbGFyYXRpb25zICQoQURERURfQ0ZMQUdTKSAlSW5jbHVkZXMlICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpICAtbyAkKE9CSl9ESVIpL2N0ZHQubyAtYyAkKE9CSl9ESVIpL2N0ZHQuYzslbGlua2VycHJlZml4JSAkKFRPT0xfUEFUSClkbGQgLXRYODZMSDp2eHdvcmtzNjMgLVggLXI1IC1mIDB4OTAsMSwxICVUb29sRmxhZ3MlIC1vICVPdXRGaWxlJSAkKE9CSl9ESVIpL2N0ZHQubyAlT2JqZWN0cyUgJUxpYnJhcmllcyUgJChMSUJQQVRIKSAkKExJQlMpICAkKEFEREVEX0xJQlBBVEgpICQoQURERURfTElCUykgJmFtcDsmYW1wOyBpZiBbICZxdW90OyQoRVhQQU5EX0RCRykmcXVvdDsgPSAmcXVvdDsxJnF1b3Q7IF07IHRoZW4gcGxpbmsgJnF1b3Q7JEAmcXVvdDs7ZmkiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfGNtZHxTSU1MSU5VWGdudSIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7cm0gLWYgJU91dEZpbGUlO25tcGVudGl1bSAlT2JqZWN0cyUgJUxpYnJhcmllcyUgfCB0Y2xzaCAkKFdJTkRfQkFTRSkvaG9zdC9yZXNvdXJjZS9odXRpbHMvdGNsL211bmNoLnRjbCAtYyBwZW50aXVtICZndDsgJChPQkpfRElSKS9jdGR0LmM7JWNjb21waWxlcnByZWZpeCUgJChUT09MX1BBVEgpY2NwZW50aXVtICVEZWJ1Z01vZGVGbGFncyUgJChDQ19BUkNIX1NQRUMpIC1mZG9sbGFycy1pbi1pZGVudGlmaWVycyAtV2FsbCAkKEFEREVEX0NGTEFHUykgJUluY2x1ZGVzJSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAgLW8gJChPQkpfRElSKS9jdGR0Lm8gLWMgJChPQkpfRElSKS9jdGR0LmM7JWxpbmtlcnByZWZpeCUgJChUT09MX1BBVEgpY2NwZW50aXVtIC1yIC1ub3N0ZGxpYiAtV2wsLVggJVRvb2xGbGFncyUgLW8gJU91dEZpbGUlICQoT0JKX0RJUikvY3RkdC5vICVPYmplY3RzJSAlTGlicmFyaWVzJSAkKExJQlBBVEgpICQoTElCUykgICQoQURERURfTElCUEFUSCkgJChBRERFRF9MSUJTKSAmYW1wOyZhbXA7IGlmIFsgJnF1b3Q7JChFWFBBTkRfREJHKSZxdW90OyA9ICZxdW90OzEmcXVvdDsgXTsgdGhlbiBwbGluayAmcXVvdDskQCZxdW90OztmaSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8Y21kfFNJTU5UZGlhYiIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7cm0gLWYgJU91dEZpbGUlO2RkdW1wIC1OZyAlT2JqZWN0cyUgJUxpYnJhcmllcyUgfCB0Y2xzaCAkKFdJTkRfQkFTRSkvaG9zdC9yZXNvdXJjZS9odXRpbHMvdGNsL211bmNoLnRjbCAtYyBwZW50aXVtICZndDsgJChPQkpfRElSKS9jdGR0LmM7JWNjb21waWxlcnByZWZpeCUgJChUT09MX1BBVEgpZGNjICVEZWJ1Z01vZGVGbGFncyUgJChDQ19BUkNIX1NQRUMpIC1YZG9sbGFyLWluLWlkZW50IC1YZm9yY2UtZGVjbGFyYXRpb25zICQoQURERURfQ0ZMQUdTKSAlSW5jbHVkZXMlICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpICAtbyAkKE9CSl9ESVIpL2N0ZHQubyAtYyAkKE9CSl9ESVIpL2N0ZHQuYzslbGlua2VycHJlZml4JSAkKFRPT0xfUEFUSClkbGQgLXRYODZMSDp2eHdvcmtzNjMgLVggLXI1IC1mIDB4OTAsMSwxICVUb29sRmxhZ3MlIC1vICVPdXRGaWxlJSAkKE9CSl9ESVIpL2N0ZHQubyAlT2JqZWN0cyUgJUxpYnJhcmllcyUgJChMSUJQQVRIKSAkKExJQlMpICAkKEFEREVEX0xJQlBBVEgpICQoQURERURfTElCUykgJmFtcDsmYW1wOyBpZiBbICZxdW90OyQoRVhQQU5EX0RCRykmcXVvdDsgPSAmcXVvdDsxJnF1b3Q7IF07IHRoZW4gcGxpbmsgJnF1b3Q7JEAmcXVvdDs7ZmkiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfGNtZHxTSU1OVGdudSIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7cm0gLWYgJU91dEZpbGUlO25tcGVudGl1bSAlT2JqZWN0cyUgJUxpYnJhcmllcyUgfCB0Y2xzaCAkKFdJTkRfQkFTRSkvaG9zdC9yZXNvdXJjZS9odXRpbHMvdGNsL211bmNoLnRjbCAtYyBwZW50aXVtICZndDsgJChPQkpfRElSKS9jdGR0LmM7JWNjb21waWxlcnByZWZpeCUgJChUT09MX1BBVEgpY2NwZW50aXVtICVEZWJ1Z01vZGVGbGFncyUgJChDQ19BUkNIX1NQRUMpIC1mZG9sbGFycy1pbi1pZGVudGlmaWVycyAtV2FsbCAkKEFEREVEX0NGTEFHUykgJUluY2x1ZGVzJSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAgLW8gJChPQkpfRElSKS9jdGR0Lm8gLWMgJChPQkpfRElSKS9jdGR0LmM7JWxpbmtlcnByZWZpeCUgJChUT09MX1BBVEgpY2NwZW50aXVtIC1yIC1ub3N0ZGxpYiAtV2wsLVggJVRvb2xGbGFncyUgLW8gJU91dEZpbGUlICQoT0JKX0RJUikvY3RkdC5vICVPYmplY3RzJSAlTGlicmFyaWVzJSAkKExJQlBBVEgpICQoTElCUykgICQoQURERURfTElCUEFUSCkgJChBRERFRF9MSUJTKSAmYW1wOyZhbXA7IGlmIFsgJnF1b3Q7JChFWFBBTkRfREJHKSZxdW90OyA9ICZxdW90OzEmcXVvdDsgXTsgdGhlbiBwbGluayAmcXVvdDskQCZxdW90OztmaSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8Y21kfFNJTVNQQVJDU09MQVJJU2RpYWIiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7O3JtIC1mICVPdXRGaWxlJTtkZHVtcCAtTmcgJU9iamVjdHMlICVMaWJyYXJpZXMlIHwgdGNsc2ggJChXSU5EX0JBU0UpL2hvc3QvcmVzb3VyY2UvaHV0aWxzL3RjbC9tdW5jaC50Y2wgLWMgc3BhcmMgJmd0OyAkKE9CSl9ESVIpL2N0ZHQuYzslY2NvbXBpbGVycHJlZml4JSAkKFRPT0xfUEFUSClkY2MgJURlYnVnTW9kZUZsYWdzJSAkKENDX0FSQ0hfU1BFQykgLVhkb2xsYXItaW4taWRlbnQgLVhmb3JjZS1kZWNsYXJhdGlvbnMgJChBRERFRF9DRkxBR1MpICVJbmNsdWRlcyUgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgIC1vICQoT0JKX0RJUikvY3RkdC5vIC1jICQoT0JKX0RJUikvY3RkdC5jOyVsaW5rZXJwcmVmaXglICQoVE9PTF9QQVRIKWRsZCAtdFNQQVJDRkg6dnh3b3JrczYzIC1YIC1yNSAlVG9vbEZsYWdzJSAtbyAlT3V0RmlsZSUgJChPQkpfRElSKS9jdGR0Lm8gJU9iamVjdHMlICVMaWJyYXJpZXMlICQoTElCUEFUSCkgJChMSUJTKSAgJChBRERFRF9MSUJQQVRIKSAkKEFEREVEX0xJQlMpICZhbXA7JmFtcDsgaWYgWyAmcXVvdDskKEVYUEFORF9EQkcpJnF1b3Q7ID0gJnF1b3Q7MSZxdW90OyBdOyB0aGVuIHBsaW5rICZxdW90OyRAJnF1b3Q7O2ZpIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxjbWR8U0lNU1BBUkNTT0xBUklTZ251IiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OztybSAtZiAlT3V0RmlsZSU7bm1zcGFyYyAlT2JqZWN0cyUgJUxpYnJhcmllcyUgfCB0Y2xzaCAkKFdJTkRfQkFTRSkvaG9zdC9yZXNvdXJjZS9odXRpbHMvdGNsL211bmNoLnRjbCAtYyBzcGFyYyAmZ3Q7ICQoT0JKX0RJUikvY3RkdC5jOyVjY29tcGlsZXJwcmVmaXglICQoVE9PTF9QQVRIKWNjc3BhcmMgJURlYnVnTW9kZUZsYWdzJSAkKENDX0FSQ0hfU1BFQykgLWZkb2xsYXJzLWluLWlkZW50aWZpZXJzIC1XYWxsICQoQURERURfQ0ZMQUdTKSAlSW5jbHVkZXMlICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpICAtbyAkKE9CSl9ESVIpL2N0ZHQubyAtYyAkKE9CSl9ESVIpL2N0ZHQuYzslbGlua2VycHJlZml4JSAkKFRPT0xfUEFUSCljY3NwYXJjIC1yIC1ub3N0ZGxpYiAtV2wsLVggJVRvb2xGbGFncyUgLW8gJU91dEZpbGUlICQoT0JKX0RJUikvY3RkdC5vICVPYmplY3RzJSAlTGlicmFyaWVzJSAkKExJQlBBVEgpICQoTElCUykgICQoQURERURfTElCUEFUSCkgJChBRERFRF9MSUJTKSAmYW1wOyZhbXA7IGlmIFsgJnF1b3Q7JChFWFBBTkRfREJHKSZxdW90OyA9ICZxdW90OzEmcXVvdDsgXTsgdGhlbiBwbGluayAmcXVvdDskQCZxdW90OztmaSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8ZGJnRmxhZ3N8UFBDMzJkaWFiIiB2YWx1ZT0iLWciLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfGRiZ0ZsYWdzfFBQQzMyZ251IiB2YWx1ZT0iLWciLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfGRiZ0ZsYWdzfFBQQzMyc2ZkaWFiIiB2YWx1ZT0iLWciLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfGRiZ0ZsYWdzfFBQQzMyc2ZnbnUiIHZhbHVlPSItZyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8ZGJnRmxhZ3N8UFBDNDAzZGlhYiIgdmFsdWU9Ii1nIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxkYmdGbGFnc3xQUEM0MDNnbnUiIHZhbHVlPSItZyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8ZGJnRmxhZ3N8UFBDNDA1ZGlhYiIgdmFsdWU9Ii1nIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxkYmdGbGFnc3xQUEM0MDVnbnUiIHZhbHVlPSItZyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8ZGJnRmxhZ3N8UFBDNDA1c2ZkaWFiIiB2YWx1ZT0iLWciLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfGRiZ0ZsYWdzfFBQQzQwNXNmZ251IiB2YWx1ZT0iLWciLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfGRiZ0ZsYWdzfFBQQzQ0MGRpYWIiIHZhbHVlPSItZyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8ZGJnRmxhZ3N8UFBDNDQwZ251IiB2YWx1ZT0iLWciLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfGRiZ0ZsYWdzfFBQQzQ0MHNmZGlhYiIgdmFsdWU9Ii1nIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxkYmdGbGFnc3xQUEM0NDBzZmdudSIgdmFsdWU9Ii1nIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxkYmdGbGFnc3xQUEM2MDNkaWFiIiB2YWx1ZT0iLWciLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfGRiZ0ZsYWdzfFBQQzYwM2dudSIgdmFsdWU9Ii1nIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxkYmdGbGFnc3xQUEM2MDRkaWFiIiB2YWx1ZT0iLWciLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfGRiZ0ZsYWdzfFBQQzYwNGdudSIgdmFsdWU9Ii1nIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxkYmdGbGFnc3xQUEM4NVhYZGlhYiIgdmFsdWU9Ii1nIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxkYmdGbGFnc3xQUEM4NVhYZ251IiB2YWx1ZT0iLWciLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfGRiZ0ZsYWdzfFBQQzg1WFhzZmRpYWIiIHZhbHVlPSItZyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8ZGJnRmxhZ3N8UFBDODVYWHNmZ251IiB2YWx1ZT0iLWciLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfGRiZ0ZsYWdzfFBQQzg2MHNmZGlhYiIgdmFsdWU9Ii1nIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxkYmdGbGFnc3xQUEM4NjBzZmdudSIgdmFsdWU9Ii1nIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxkYmdGbGFnc3xTSU1MSU5VWGRpYWIiIHZhbHVlPSItZyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8ZGJnRmxhZ3N8U0lNTElOVVhnbnUiIHZhbHVlPSItZyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8ZGJnRmxhZ3N8U0lNTlRkaWFiIiB2YWx1ZT0iLWciLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfGRiZ0ZsYWdzfFNJTU5UZ251IiB2YWx1ZT0iLWciLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfGRiZ0ZsYWdzfFNJTVNQQVJDU09MQVJJU2RpYWIiIHZhbHVlPSItZyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8ZGJnRmxhZ3N8U0lNU1BBUkNTT0xBUklTZ251IiB2YWx1ZT0iLWciLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfGRlcml2ZWRTaWdzfFBQQzMyZGlhYiIgdmFsdWU9Iioub3V0Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxkZXJpdmVkU2lnc3xQUEMzMmdudSIgdmFsdWU9Iioub3V0Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxkZXJpdmVkU2lnc3xQUEMzMnNmZGlhYiIgdmFsdWU9Iioub3V0Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxkZXJpdmVkU2lnc3xQUEMzMnNmZ251IiB2YWx1ZT0iKi5vdXQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfGRlcml2ZWRTaWdzfFBQQzQwM2RpYWIiIHZhbHVlPSIqLm91dCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8ZGVyaXZlZFNpZ3N8UFBDNDAzZ251IiB2YWx1ZT0iKi5vdXQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfGRlcml2ZWRTaWdzfFBQQzQwNWRpYWIiIHZhbHVlPSIqLm91dCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8ZGVyaXZlZFNpZ3N8UFBDNDA1Z251IiB2YWx1ZT0iKi5vdXQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfGRlcml2ZWRTaWdzfFBQQzQwNXNmZGlhYiIgdmFsdWU9Iioub3V0Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxkZXJpdmVkU2lnc3xQUEM0MDVzZmdudSIgdmFsdWU9Iioub3V0Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxkZXJpdmVkU2lnc3xQUEM0NDBkaWFiIiB2YWx1ZT0iKi5vdXQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfGRlcml2ZWRTaWdzfFBQQzQ0MGdudSIgdmFsdWU9Iioub3V0Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxkZXJpdmVkU2lnc3xQUEM0NDBzZmRpYWIiIHZhbHVlPSIqLm91dCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8ZGVyaXZlZFNpZ3N8UFBDNDQwc2ZnbnUiIHZhbHVlPSIqLm91dCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8ZGVyaXZlZFNpZ3N8UFBDNjAzZGlhYiIgdmFsdWU9Iioub3V0Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxkZXJpdmVkU2lnc3xQUEM2MDNnbnUiIHZhbHVlPSIqLm91dCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8ZGVyaXZlZFNpZ3N8UFBDNjA0ZGlhYiIgdmFsdWU9Iioub3V0Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxkZXJpdmVkU2lnc3xQUEM2MDRnbnUiIHZhbHVlPSIqLm91dCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8ZGVyaXZlZFNpZ3N8UFBDODVYWGRpYWIiIHZhbHVlPSIqLm91dCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8ZGVyaXZlZFNpZ3N8UFBDODVYWGdudSIgdmFsdWU9Iioub3V0Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxkZXJpdmVkU2lnc3xQUEM4NVhYc2ZkaWFiIiB2YWx1ZT0iKi5vdXQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfGRlcml2ZWRTaWdzfFBQQzg1WFhzZmdudSIgdmFsdWU9Iioub3V0Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxkZXJpdmVkU2lnc3xQUEM4NjBzZmRpYWIiIHZhbHVlPSIqLm91dCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8ZGVyaXZlZFNpZ3N8UFBDODYwc2ZnbnUiIHZhbHVlPSIqLm91dCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8ZGVyaXZlZFNpZ3N8U0lNTElOVVhkaWFiIiB2YWx1ZT0iKi5vdXQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfGRlcml2ZWRTaWdzfFNJTUxJTlVYZ251IiB2YWx1ZT0iKi5vdXQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfGRlcml2ZWRTaWdzfFNJTU5UZGlhYiIgdmFsdWU9Iioub3V0Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxkZXJpdmVkU2lnc3xTSU1OVGdudSIgdmFsdWU9Iioub3V0Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxkZXJpdmVkU2lnc3xTSU1TUEFSQ1NPTEFSSVNkaWFiIiB2YWx1ZT0iKi5vdXQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfGRlcml2ZWRTaWdzfFNJTVNQQVJDU09MQVJJU2dudSIgdmFsdWU9Iioub3V0Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxmbGFnc3xQUEMzMmRpYWIiIHZhbHVlPSItcjQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfGZsYWdzfFBQQzMyZ251IiB2YWx1ZT0iLVQgJChXSU5EX0JBU0UpL3RhcmdldC9oL3Rvb2wvZ251L2xkc2NyaXB0cy9saW5rLk9VVCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8ZmxhZ3N8UFBDMzJzZmRpYWIiIHZhbHVlPSItcjQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfGZsYWdzfFBQQzMyc2ZnbnUiIHZhbHVlPSItVCAkKFdJTkRfQkFTRSkvdGFyZ2V0L2gvdG9vbC9nbnUvbGRzY3JpcHRzL2xpbmsuT1VUIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxmbGFnc3xQUEM0MDNkaWFiIiB2YWx1ZT0iLXI0Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxmbGFnc3xQUEM0MDNnbnUiIHZhbHVlPSItVCAkKFdJTkRfQkFTRSkvdGFyZ2V0L2gvdG9vbC9nbnUvbGRzY3JpcHRzL2xpbmsuT1VUIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxmbGFnc3xQUEM0MDVkaWFiIiB2YWx1ZT0iLXI0Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxmbGFnc3xQUEM0MDVnbnUiIHZhbHVlPSItVCAkKFdJTkRfQkFTRSkvdGFyZ2V0L2gvdG9vbC9nbnUvbGRzY3JpcHRzL2xpbmsuT1VUIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxmbGFnc3xQUEM0MDVzZmRpYWIiIHZhbHVlPSItcjQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfGZsYWdzfFBQQzQwNXNmZ251IiB2YWx1ZT0iLVQgJChXSU5EX0JBU0UpL3RhcmdldC9oL3Rvb2wvZ251L2xkc2NyaXB0cy9saW5rLk9VVCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8ZmxhZ3N8UFBDNDQwZGlhYiIgdmFsdWU9Ii1yNCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8ZmxhZ3N8UFBDNDQwZ251IiB2YWx1ZT0iLVQgJChXSU5EX0JBU0UpL3RhcmdldC9oL3Rvb2wvZ251L2xkc2NyaXB0cy9saW5rLk9VVCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8ZmxhZ3N8UFBDNDQwc2ZkaWFiIiB2YWx1ZT0iLXI0Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxmbGFnc3xQUEM0NDBzZmdudSIgdmFsdWU9Ii1UICQoV0lORF9CQVNFKS90YXJnZXQvaC90b29sL2dudS9sZHNjcmlwdHMvbGluay5PVVQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfGZsYWdzfFBQQzYwM2RpYWIiIHZhbHVlPSItcjQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfGZsYWdzfFBQQzYwM2dudSIgdmFsdWU9Ii1UICQoV0lORF9CQVNFKS90YXJnZXQvaC90b29sL2dudS9sZHNjcmlwdHMvbGluay5PVVQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfGZsYWdzfFBQQzYwNGRpYWIiIHZhbHVlPSItcjQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfGZsYWdzfFBQQzYwNGdudSIgdmFsdWU9Ii1UICQoV0lORF9CQVNFKS90YXJnZXQvaC90b29sL2dudS9sZHNjcmlwdHMvbGluay5PVVQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfGZsYWdzfFBQQzg1WFhkaWFiIiB2YWx1ZT0iLXI0Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxmbGFnc3xQUEM4NVhYZ251IiB2YWx1ZT0iLVQgJChXSU5EX0JBU0UpL3RhcmdldC9oL3Rvb2wvZ251L2xkc2NyaXB0cy9saW5rLk9VVCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8ZmxhZ3N8UFBDODVYWHNmZGlhYiIgdmFsdWU9Ii1yNCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8ZmxhZ3N8UFBDODVYWHNmZ251IiB2YWx1ZT0iLVQgJChXSU5EX0JBU0UpL3RhcmdldC9oL3Rvb2wvZ251L2xkc2NyaXB0cy9saW5rLk9VVCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8ZmxhZ3N8UFBDODYwc2ZkaWFiIiB2YWx1ZT0iLXI0Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxmbGFnc3xQUEM4NjBzZmdudSIgdmFsdWU9Ii1UICQoV0lORF9CQVNFKS90YXJnZXQvaC90b29sL2dudS9sZHNjcmlwdHMvbGluay5PVVQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfGZsYWdzfFNJTUxJTlVYZGlhYiIgdmFsdWU9Ii1yNCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8ZmxhZ3N8U0lNTElOVVhnbnUiIHZhbHVlPSItVCAkKFdJTkRfQkFTRSkvdGFyZ2V0L2gvdG9vbC9nbnUvbGRzY3JpcHRzL2xpbmsuT1VUIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxmbGFnc3xTSU1OVGRpYWIiIHZhbHVlPSItcjQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfGZsYWdzfFNJTU5UZ251IiB2YWx1ZT0iLVQgJChXSU5EX0JBU0UpL3RhcmdldC9oL3Rvb2wvZ251L2xkc2NyaXB0cy9saW5rLk9VVCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8ZmxhZ3N8U0lNU1BBUkNTT0xBUklTZGlhYiIgdmFsdWU9Ii1yNCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8ZmxhZ3N8U0lNU1BBUkNTT0xBUklTZ251IiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxub25EYmdGbGFnc3xQUEMzMmRpYWIiIHZhbHVlPSItWE8gLVhzaXplLW9wdCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8bm9uRGJnRmxhZ3N8UFBDMzJnbnUiIHZhbHVlPSItTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxub25EYmdGbGFnc3xQUEMzMnNmZGlhYiIgdmFsdWU9Ii1YTyAtWHNpemUtb3B0Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxub25EYmdGbGFnc3xQUEMzMnNmZ251IiB2YWx1ZT0iLU8yIC1mc3RyZW5ndGgtcmVkdWNlIC1mbm8tYnVpbHRpbiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8bm9uRGJnRmxhZ3N8UFBDNDAzZGlhYiIgdmFsdWU9Ii1YTyAtWHNpemUtb3B0Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxub25EYmdGbGFnc3xQUEM0MDNnbnUiIHZhbHVlPSItTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxub25EYmdGbGFnc3xQUEM0MDVkaWFiIiB2YWx1ZT0iLVhPIC1Yc2l6ZS1vcHQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfG5vbkRiZ0ZsYWdzfFBQQzQwNWdudSIgdmFsdWU9Ii1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfG5vbkRiZ0ZsYWdzfFBQQzQwNXNmZGlhYiIgdmFsdWU9Ii1YTyAtWHNpemUtb3B0Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxub25EYmdGbGFnc3xQUEM0MDVzZmdudSIgdmFsdWU9Ii1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfG5vbkRiZ0ZsYWdzfFBQQzQ0MGRpYWIiIHZhbHVlPSItWE8gLVhzaXplLW9wdCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8bm9uRGJnRmxhZ3N8UFBDNDQwZ251IiB2YWx1ZT0iLU8yIC1mc3RyZW5ndGgtcmVkdWNlIC1mbm8tYnVpbHRpbiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8bm9uRGJnRmxhZ3N8UFBDNDQwc2ZkaWFiIiB2YWx1ZT0iLVhPIC1Yc2l6ZS1vcHQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfG5vbkRiZ0ZsYWdzfFBQQzQ0MHNmZ251IiB2YWx1ZT0iLU8yIC1mc3RyZW5ndGgtcmVkdWNlIC1mbm8tYnVpbHRpbiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8bm9uRGJnRmxhZ3N8UFBDNjAzZGlhYiIgdmFsdWU9Ii1YTyAtWHNpemUtb3B0Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxub25EYmdGbGFnc3xQUEM2MDNnbnUiIHZhbHVlPSItTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxub25EYmdGbGFnc3xQUEM2MDRkaWFiIiB2YWx1ZT0iLVhPIC1Yc2l6ZS1vcHQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfG5vbkRiZ0ZsYWdzfFBQQzYwNGdudSIgdmFsdWU9Ii1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfG5vbkRiZ0ZsYWdzfFBQQzg1WFhkaWFiIiB2YWx1ZT0iLVhPIC1Yc2l6ZS1vcHQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfG5vbkRiZ0ZsYWdzfFBQQzg1WFhnbnUiIHZhbHVlPSItTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxub25EYmdGbGFnc3xQUEM4NVhYc2ZkaWFiIiB2YWx1ZT0iLVhPIC1Yc2l6ZS1vcHQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfG5vbkRiZ0ZsYWdzfFBQQzg1WFhzZmdudSIgdmFsdWU9Ii1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfG5vbkRiZ0ZsYWdzfFBQQzg2MHNmZGlhYiIgdmFsdWU9Ii1YTyAtWHNpemUtb3B0Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxub25EYmdGbGFnc3xQUEM4NjBzZmdudSIgdmFsdWU9Ii1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfG5vbkRiZ0ZsYWdzfFNJTUxJTlVYZGlhYiIgdmFsdWU9Ii1YTyAtWHNpemUtb3B0Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxub25EYmdGbGFnc3xTSU1MSU5VWGdudSIgdmFsdWU9Ii1PMiAtbm9zdGRsaWIgLWZuby1idWlsdGluIC1mbm8tZGVmZXItcG9wIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxub25EYmdGbGFnc3xTSU1OVGRpYWIiIHZhbHVlPSItWE8gLVhzaXplLW9wdCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8bm9uRGJnRmxhZ3N8U0lNTlRnbnUiIHZhbHVlPSItTzIgLW5vc3RkbGliIC1mbm8tYnVpbHRpbiAtZm5vLWRlZmVyLXBvcCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8bm9uRGJnRmxhZ3N8U0lNU1BBUkNTT0xBUklTZGlhYiIgdmFsdWU9Ii1YTyAtWHNpemUtb3B0Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxub25EYmdGbGFnc3xTSU1TUEFSQ1NPTEFSSVNnbnUiIHZhbHVlPSItTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluIi8+DQorICAgICAgICAgICAgPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8b2JqZWN0IiB2YWx1ZT0iZmFsc2UiLz4NCisgICAgICAgICAgICA8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxwYXNzQWJsZSIgdmFsdWU9ImZhbHNlIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxzaWdzIiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfGNtZHxQUEMzMmRpYWIiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7OyVsaW5rZXJwcmVmaXglICQoVE9PTF9QQVRIKWRsZCAtdFBQQ0ZIOnZ4d29ya3M2MyAtWCAtcjUgJVRvb2xGbGFncyUgLW8gJU91dEZpbGUlICVPYmplY3RzJSAkKExJQlBBVEgpICQoTElCUykgJChBRERFRF9MSUJQQVRIKSAkKEFEREVEX0xJQlMpICAmYW1wOyZhbXA7IGlmIFsgJnF1b3Q7JChFWFBBTkRfREJHKSZxdW90OyA9ICZxdW90OzEmcXVvdDsgXTsgdGhlbiBwbGluayAmcXVvdDskQCZxdW90OztmaSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxjbWR8UFBDMzJnbnUiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7OyVsaW5rZXJwcmVmaXglICQoVE9PTF9QQVRIKWNjcHBjIC1yIC1ub3N0ZGxpYiAtV2wsLVggJVRvb2xGbGFncyUgLW8gJU91dEZpbGUlICVPYmplY3RzJSAkKExJQlBBVEgpICQoTElCUykgJChBRERFRF9MSUJQQVRIKSAkKEFEREVEX0xJQlMpICAmYW1wOyZhbXA7IGlmIFsgJnF1b3Q7JChFWFBBTkRfREJHKSZxdW90OyA9ICZxdW90OzEmcXVvdDsgXTsgdGhlbiBwbGluayAmcXVvdDskQCZxdW90OztmaSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxjbWR8UFBDMzJzZmRpYWIiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7OyVsaW5rZXJwcmVmaXglICQoVE9PTF9QQVRIKWRsZCAtdFBQQ0ZTOnZ4d29ya3M2MyAtWCAtcjUgJVRvb2xGbGFncyUgLW8gJU91dEZpbGUlICVPYmplY3RzJSAkKExJQlBBVEgpICQoTElCUykgJChBRERFRF9MSUJQQVRIKSAkKEFEREVEX0xJQlMpICAmYW1wOyZhbXA7IGlmIFsgJnF1b3Q7JChFWFBBTkRfREJHKSZxdW90OyA9ICZxdW90OzEmcXVvdDsgXTsgdGhlbiBwbGluayAmcXVvdDskQCZxdW90OztmaSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxjbWR8UFBDMzJzZmdudSIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWxpbmtlcnByZWZpeCUgJChUT09MX1BBVEgpY2NwcGMgLXIgLW5vc3RkbGliIC1XbCwtWCAlVG9vbEZsYWdzJSAtbyAlT3V0RmlsZSUgJU9iamVjdHMlICQoTElCUEFUSCkgJChMSUJTKSAkKEFEREVEX0xJQlBBVEgpICQoQURERURfTElCUykgICZhbXA7JmFtcDsgaWYgWyAmcXVvdDskKEVYUEFORF9EQkcpJnF1b3Q7ID0gJnF1b3Q7MSZxdW90OyBdOyB0aGVuIHBsaW5rICZxdW90OyRAJnF1b3Q7O2ZpIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfGNtZHxQUEM0MDNkaWFiIiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OzslbGlua2VycHJlZml4JSAkKFRPT0xfUEFUSClkbGQgLXRQUEM0MDNGUzp2eHdvcmtzNjMgLVggLXI1ICVUb29sRmxhZ3MlIC1vICVPdXRGaWxlJSAlT2JqZWN0cyUgJChMSUJQQVRIKSAkKExJQlMpICQoQURERURfTElCUEFUSCkgJChBRERFRF9MSUJTKSAgJmFtcDsmYW1wOyBpZiBbICZxdW90OyQoRVhQQU5EX0RCRykmcXVvdDsgPSAmcXVvdDsxJnF1b3Q7IF07IHRoZW4gcGxpbmsgJnF1b3Q7JEAmcXVvdDs7ZmkiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8Y21kfFBQQzQwM2dudSIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWxpbmtlcnByZWZpeCUgJChUT09MX1BBVEgpY2NwcGMgLXIgLW5vc3RkbGliIC1XbCwtWCAlVG9vbEZsYWdzJSAtbyAlT3V0RmlsZSUgJU9iamVjdHMlICQoTElCUEFUSCkgJChMSUJTKSAkKEFEREVEX0xJQlBBVEgpICQoQURERURfTElCUykgICZhbXA7JmFtcDsgaWYgWyAmcXVvdDskKEVYUEFORF9EQkcpJnF1b3Q7ID0gJnF1b3Q7MSZxdW90OyBdOyB0aGVuIHBsaW5rICZxdW90OyRAJnF1b3Q7O2ZpIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfGNtZHxQUEM0MDVkaWFiIiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OzslbGlua2VycHJlZml4JSAkKFRPT0xfUEFUSClkbGQgLXRQUEM0MDVGUzp2eHdvcmtzNjMgLVggLXI1ICVUb29sRmxhZ3MlIC1vICVPdXRGaWxlJSAlT2JqZWN0cyUgJChMSUJQQVRIKSAkKExJQlMpICQoQURERURfTElCUEFUSCkgJChBRERFRF9MSUJTKSAgJmFtcDsmYW1wOyBpZiBbICZxdW90OyQoRVhQQU5EX0RCRykmcXVvdDsgPSAmcXVvdDsxJnF1b3Q7IF07IHRoZW4gcGxpbmsgJnF1b3Q7JEAmcXVvdDs7ZmkiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8Y21kfFBQQzQwNWdudSIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWxpbmtlcnByZWZpeCUgJChUT09MX1BBVEgpY2NwcGMgLXIgLW5vc3RkbGliIC1XbCwtWCAlVG9vbEZsYWdzJSAtbyAlT3V0RmlsZSUgJU9iamVjdHMlICQoTElCUEFUSCkgJChMSUJTKSAkKEFEREVEX0xJQlBBVEgpICQoQURERURfTElCUykgICZhbXA7JmFtcDsgaWYgWyAmcXVvdDskKEVYUEFORF9EQkcpJnF1b3Q7ID0gJnF1b3Q7MSZxdW90OyBdOyB0aGVuIHBsaW5rICZxdW90OyRAJnF1b3Q7O2ZpIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfGNtZHxQUEM0MDVzZmRpYWIiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7OyVsaW5rZXJwcmVmaXglICQoVE9PTF9QQVRIKWRsZCAtdFBQQzQwNUZTOnZ4d29ya3M2MyAtWCAtcjUgJVRvb2xGbGFncyUgLW8gJU91dEZpbGUlICVPYmplY3RzJSAkKExJQlBBVEgpICQoTElCUykgJChBRERFRF9MSUJQQVRIKSAkKEFEREVEX0xJQlMpICAmYW1wOyZhbXA7IGlmIFsgJnF1b3Q7JChFWFBBTkRfREJHKSZxdW90OyA9ICZxdW90OzEmcXVvdDsgXTsgdGhlbiBwbGluayAmcXVvdDskQCZxdW90OztmaSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxjbWR8UFBDNDA1c2ZnbnUiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7OyVsaW5rZXJwcmVmaXglICQoVE9PTF9QQVRIKWNjcHBjIC1yIC1ub3N0ZGxpYiAtV2wsLVggJVRvb2xGbGFncyUgLW8gJU91dEZpbGUlICVPYmplY3RzJSAkKExJQlBBVEgpICQoTElCUykgJChBRERFRF9MSUJQQVRIKSAkKEFEREVEX0xJQlMpICAmYW1wOyZhbXA7IGlmIFsgJnF1b3Q7JChFWFBBTkRfREJHKSZxdW90OyA9ICZxdW90OzEmcXVvdDsgXTsgdGhlbiBwbGluayAmcXVvdDskQCZxdW90OztmaSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxjbWR8UFBDNDQwZGlhYiIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWxpbmtlcnByZWZpeCUgJChUT09MX1BBVEgpZGxkIC10UFBDNDQwRkg6dnh3b3JrczYzIC1YIC1yNSAlVG9vbEZsYWdzJSAtbyAlT3V0RmlsZSUgJU9iamVjdHMlICQoTElCUEFUSCkgJChMSUJTKSAkKEFEREVEX0xJQlBBVEgpICQoQURERURfTElCUykgICZhbXA7JmFtcDsgaWYgWyAmcXVvdDskKEVYUEFORF9EQkcpJnF1b3Q7ID0gJnF1b3Q7MSZxdW90OyBdOyB0aGVuIHBsaW5rICZxdW90OyRAJnF1b3Q7O2ZpIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfGNtZHxQUEM0NDBnbnUiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7OyVsaW5rZXJwcmVmaXglICQoVE9PTF9QQVRIKWNjcHBjIC1yIC1ub3N0ZGxpYiAtV2wsLVggJVRvb2xGbGFncyUgLW8gJU91dEZpbGUlICVPYmplY3RzJSAkKExJQlBBVEgpICQoTElCUykgJChBRERFRF9MSUJQQVRIKSAkKEFEREVEX0xJQlMpICAmYW1wOyZhbXA7IGlmIFsgJnF1b3Q7JChFWFBBTkRfREJHKSZxdW90OyA9ICZxdW90OzEmcXVvdDsgXTsgdGhlbiBwbGluayAmcXVvdDskQCZxdW90OztmaSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxjbWR8UFBDNDQwc2ZkaWFiIiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OzslbGlua2VycHJlZml4JSAkKFRPT0xfUEFUSClkbGQgLXRQUEM0NDBGUzp2eHdvcmtzNjMgLVggLXI1ICVUb29sRmxhZ3MlIC1vICVPdXRGaWxlJSAlT2JqZWN0cyUgJChMSUJQQVRIKSAkKExJQlMpICQoQURERURfTElCUEFUSCkgJChBRERFRF9MSUJTKSAgJmFtcDsmYW1wOyBpZiBbICZxdW90OyQoRVhQQU5EX0RCRykmcXVvdDsgPSAmcXVvdDsxJnF1b3Q7IF07IHRoZW4gcGxpbmsgJnF1b3Q7JEAmcXVvdDs7ZmkiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8Y21kfFBQQzQ0MHNmZ251IiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OzslbGlua2VycHJlZml4JSAkKFRPT0xfUEFUSCljY3BwYyAtciAtbm9zdGRsaWIgLVdsLC1YICVUb29sRmxhZ3MlIC1vICVPdXRGaWxlJSAlT2JqZWN0cyUgJChMSUJQQVRIKSAkKExJQlMpICQoQURERURfTElCUEFUSCkgJChBRERFRF9MSUJTKSAgJmFtcDsmYW1wOyBpZiBbICZxdW90OyQoRVhQQU5EX0RCRykmcXVvdDsgPSAmcXVvdDsxJnF1b3Q7IF07IHRoZW4gcGxpbmsgJnF1b3Q7JEAmcXVvdDs7ZmkiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8Y21kfFBQQzYwM2RpYWIiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7OyVsaW5rZXJwcmVmaXglICQoVE9PTF9QQVRIKWRsZCAtdFBQQzYwM0ZIOnZ4d29ya3M2MyAtWCAtcjUgJVRvb2xGbGFncyUgLW8gJU91dEZpbGUlICVPYmplY3RzJSAkKExJQlBBVEgpICQoTElCUykgJChBRERFRF9MSUJQQVRIKSAkKEFEREVEX0xJQlMpICAmYW1wOyZhbXA7IGlmIFsgJnF1b3Q7JChFWFBBTkRfREJHKSZxdW90OyA9ICZxdW90OzEmcXVvdDsgXTsgdGhlbiBwbGluayAmcXVvdDskQCZxdW90OztmaSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxjbWR8UFBDNjAzZ251IiB2YWx1ZT0iJWxpbmtlcnByZWZpeCUgJChUT09MX1BBVEgpY2NwcGMgLXIgLW5vc3RkbGliIC1XbCwtWCAlVG9vbEZsYWdzJSAtbyAlT3V0RmlsZSUgJU9iamVjdHMlICQoTElCUEFUSCkgJChMSUJTKSAkKEFEREVEX0xJQlBBVEgpICQoQURERURfTElCUykgICZhbXA7JmFtcDsgaWYgWyAmcXVvdDskKEVYUEFORF9EQkcpJnF1b3Q7ID0gJnF1b3Q7MSZxdW90OyBdOyB0aGVuIHBsaW5rICZxdW90OyRAJnF1b3Q7O2ZpIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfGNtZHxQUEM2MDRkaWFiIiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OzslbGlua2VycHJlZml4JSAkKFRPT0xfUEFUSClkbGQgLXRQUEM2MDRGSDp2eHdvcmtzNjMgLVggLXI1ICVUb29sRmxhZ3MlIC1vICVPdXRGaWxlJSAlT2JqZWN0cyUgJChMSUJQQVRIKSAkKExJQlMpICQoQURERURfTElCUEFUSCkgJChBRERFRF9MSUJTKSAgJmFtcDsmYW1wOyBpZiBbICZxdW90OyQoRVhQQU5EX0RCRykmcXVvdDsgPSAmcXVvdDsxJnF1b3Q7IF07IHRoZW4gcGxpbmsgJnF1b3Q7JEAmcXVvdDs7ZmkiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8Y21kfFBQQzYwNGdudSIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWxpbmtlcnByZWZpeCUgJChUT09MX1BBVEgpY2NwcGMgLXIgLW5vc3RkbGliIC1XbCwtWCAlVG9vbEZsYWdzJSAtbyAlT3V0RmlsZSUgJU9iamVjdHMlICQoTElCUEFUSCkgJChMSUJTKSAkKEFEREVEX0xJQlBBVEgpICQoQURERURfTElCUykgICZhbXA7JmFtcDsgaWYgWyAmcXVvdDskKEVYUEFORF9EQkcpJnF1b3Q7ID0gJnF1b3Q7MSZxdW90OyBdOyB0aGVuIHBsaW5rICZxdW90OyRAJnF1b3Q7O2ZpIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfGNtZHxQUEM4NVhYZGlhYiIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWxpbmtlcnByZWZpeCUgJChUT09MX1BBVEgpZGxkIC10UFBDRTUwMEZTOnZ4d29ya3M2MyAtWCAtcjUgJVRvb2xGbGFncyUgLW8gJU91dEZpbGUlICVPYmplY3RzJSAkKExJQlBBVEgpICQoTElCUykgJChBRERFRF9MSUJQQVRIKSAkKEFEREVEX0xJQlMpICAmYW1wOyZhbXA7IGlmIFsgJnF1b3Q7JChFWFBBTkRfREJHKSZxdW90OyA9ICZxdW90OzEmcXVvdDsgXTsgdGhlbiBwbGluayAmcXVvdDskQCZxdW90OztmaSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxjbWR8UFBDODVYWGdudSIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWxpbmtlcnByZWZpeCUgJChUT09MX1BBVEgpY2NwcGMgLXIgLW5vc3RkbGliIC1XbCwtWCAlVG9vbEZsYWdzJSAtbyAlT3V0RmlsZSUgJU9iamVjdHMlICQoTElCUEFUSCkgJChMSUJTKSAkKEFEREVEX0xJQlBBVEgpICQoQURERURfTElCUykgICZhbXA7JmFtcDsgaWYgWyAmcXVvdDskKEVYUEFORF9EQkcpJnF1b3Q7ID0gJnF1b3Q7MSZxdW90OyBdOyB0aGVuIHBsaW5rICZxdW90OyRAJnF1b3Q7O2ZpIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfGNtZHxQUEM4NVhYc2ZkaWFiIiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OzslbGlua2VycHJlZml4JSAkKFRPT0xfUEFUSClkbGQgLXRQUENFNTAwRlM6dnh3b3JrczYzIC1YIC1yNSAlVG9vbEZsYWdzJSAtbyAlT3V0RmlsZSUgJU9iamVjdHMlICQoTElCUEFUSCkgJChMSUJTKSAkKEFEREVEX0xJQlBBVEgpICQoQURERURfTElCUykgICZhbXA7JmFtcDsgaWYgWyAmcXVvdDskKEVYUEFORF9EQkcpJnF1b3Q7ID0gJnF1b3Q7MSZxdW90OyBdOyB0aGVuIHBsaW5rICZxdW90OyRAJnF1b3Q7O2ZpIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfGNtZHxQUEM4NVhYc2ZnbnUiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7OyVsaW5rZXJwcmVmaXglICQoVE9PTF9QQVRIKWNjcHBjIC1yIC1ub3N0ZGxpYiAtV2wsLVggJVRvb2xGbGFncyUgLW8gJU91dEZpbGUlICVPYmplY3RzJSAkKExJQlBBVEgpICQoTElCUykgJChBRERFRF9MSUJQQVRIKSAkKEFEREVEX0xJQlMpICAmYW1wOyZhbXA7IGlmIFsgJnF1b3Q7JChFWFBBTkRfREJHKSZxdW90OyA9ICZxdW90OzEmcXVvdDsgXTsgdGhlbiBwbGluayAmcXVvdDskQCZxdW90OztmaSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxjbWR8UFBDODYwc2ZkaWFiIiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OzslbGlua2VycHJlZml4JSAkKFRPT0xfUEFUSClkbGQgLXRQUEM4NjBGUzp2eHdvcmtzNjMgLVggLXI1ICVUb29sRmxhZ3MlIC1vICVPdXRGaWxlJSAlT2JqZWN0cyUgJChMSUJQQVRIKSAkKExJQlMpICQoQURERURfTElCUEFUSCkgJChBRERFRF9MSUJTKSAgJmFtcDsmYW1wOyBpZiBbICZxdW90OyQoRVhQQU5EX0RCRykmcXVvdDsgPSAmcXVvdDsxJnF1b3Q7IF07IHRoZW4gcGxpbmsgJnF1b3Q7JEAmcXVvdDs7ZmkiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8Y21kfFBQQzg2MHNmZ251IiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OzslbGlua2VycHJlZml4JSAkKFRPT0xfUEFUSCljY3BwYyAtciAtbm9zdGRsaWIgLVdsLC1YICVUb29sRmxhZ3MlIC1vICVPdXRGaWxlJSAlT2JqZWN0cyUgJChMSUJQQVRIKSAkKExJQlMpICQoQURERURfTElCUEFUSCkgJChBRERFRF9MSUJTKSAgJmFtcDsmYW1wOyBpZiBbICZxdW90OyQoRVhQQU5EX0RCRykmcXVvdDsgPSAmcXVvdDsxJnF1b3Q7IF07IHRoZW4gcGxpbmsgJnF1b3Q7JEAmcXVvdDs7ZmkiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8Y21kfFNJTUxJTlVYZGlhYiIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWxpbmtlcnByZWZpeCUgJChUT09MX1BBVEgpZGxkIC10WDg2TEg6dnh3b3JrczYzIC1YIC1yNSAtZiAweDkwLDEsMSAlVG9vbEZsYWdzJSAtbyAlT3V0RmlsZSUgJU9iamVjdHMlICQoTElCUEFUSCkgJChMSUJTKSAkKEFEREVEX0xJQlBBVEgpICQoQURERURfTElCUykgICZhbXA7JmFtcDsgaWYgWyAmcXVvdDskKEVYUEFORF9EQkcpJnF1b3Q7ID0gJnF1b3Q7MSZxdW90OyBdOyB0aGVuIHBsaW5rICZxdW90OyRAJnF1b3Q7O2ZpIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfGNtZHxTSU1MSU5VWGdudSIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWxpbmtlcnByZWZpeCUgJChUT09MX1BBVEgpY2NwZW50aXVtIC1yIC1ub3N0ZGxpYiAtV2wsLVggJVRvb2xGbGFncyUgLW8gJU91dEZpbGUlICVPYmplY3RzJSAkKExJQlBBVEgpICQoTElCUykgJChBRERFRF9MSUJQQVRIKSAkKEFEREVEX0xJQlMpICAmYW1wOyZhbXA7IGlmIFsgJnF1b3Q7JChFWFBBTkRfREJHKSZxdW90OyA9ICZxdW90OzEmcXVvdDsgXTsgdGhlbiBwbGluayAmcXVvdDskQCZxdW90OztmaSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxjbWR8U0lNTlRkaWFiIiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OzslbGlua2VycHJlZml4JSAkKFRPT0xfUEFUSClkbGQgLXRYODZMSDp2eHdvcmtzNjMgLVggLXI1IC1mIDB4OTAsMSwxICVUb29sRmxhZ3MlIC1vICVPdXRGaWxlJSAlT2JqZWN0cyUgJChMSUJQQVRIKSAkKExJQlMpICQoQURERURfTElCUEFUSCkgJChBRERFRF9MSUJTKSAgJmFtcDsmYW1wOyBpZiBbICZxdW90OyQoRVhQQU5EX0RCRykmcXVvdDsgPSAmcXVvdDsxJnF1b3Q7IF07IHRoZW4gcGxpbmsgJnF1b3Q7JEAmcXVvdDs7ZmkiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8Y21kfFNJTU5UZ251IiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OzslbGlua2VycHJlZml4JSAkKFRPT0xfUEFUSCljY3BlbnRpdW0gLXIgLW5vc3RkbGliIC1XbCwtWCAlVG9vbEZsYWdzJSAtbyAlT3V0RmlsZSUgJU9iamVjdHMlICQoTElCUEFUSCkgJChMSUJTKSAkKEFEREVEX0xJQlBBVEgpICQoQURERURfTElCUykgICZhbXA7JmFtcDsgaWYgWyAmcXVvdDskKEVYUEFORF9EQkcpJnF1b3Q7ID0gJnF1b3Q7MSZxdW90OyBdOyB0aGVuIHBsaW5rICZxdW90OyRAJnF1b3Q7O2ZpIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfGNtZHxTSU1TUEFSQ1NPTEFSSVNkaWFiIiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OzslbGlua2VycHJlZml4JSAkKFRPT0xfUEFUSClkbGQgLXRTUEFSQ0ZIOnZ4d29ya3M2MyAtWCAtcjUgJVRvb2xGbGFncyUgLW8gJU91dEZpbGUlICVPYmplY3RzJSAkKExJQlBBVEgpICQoTElCUykgJChBRERFRF9MSUJQQVRIKSAkKEFEREVEX0xJQlMpICAmYW1wOyZhbXA7IGlmIFsgJnF1b3Q7JChFWFBBTkRfREJHKSZxdW90OyA9ICZxdW90OzEmcXVvdDsgXTsgdGhlbiBwbGluayAmcXVvdDskQCZxdW90OztmaSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxjbWR8U0lNU1BBUkNTT0xBUklTZ251IiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OzslbGlua2VycHJlZml4JSAkKFRPT0xfUEFUSCljY3NwYXJjIC1yIC1ub3N0ZGxpYiAtV2wsLVggJVRvb2xGbGFncyUgLW8gJU91dEZpbGUlICVPYmplY3RzJSAkKExJQlBBVEgpICQoTElCUykgJChBRERFRF9MSUJQQVRIKSAkKEFEREVEX0xJQlMpICAmYW1wOyZhbXA7IGlmIFsgJnF1b3Q7JChFWFBBTkRfREJHKSZxdW90OyA9ICZxdW90OzEmcXVvdDsgXTsgdGhlbiBwbGluayAmcXVvdDskQCZxdW90OztmaSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxkYmdGbGFnc3xQUEMzMmRpYWIiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8ZGJnRmxhZ3N8UFBDMzJnbnUiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8ZGJnRmxhZ3N8UFBDMzJzZmRpYWIiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8ZGJnRmxhZ3N8UFBDMzJzZmdudSIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxkYmdGbGFnc3xQUEM0MDNkaWFiIiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfGRiZ0ZsYWdzfFBQQzQwM2dudSIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxkYmdGbGFnc3xQUEM0MDVkaWFiIiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfGRiZ0ZsYWdzfFBQQzQwNWdudSIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxkYmdGbGFnc3xQUEM0MDVzZmRpYWIiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8ZGJnRmxhZ3N8UFBDNDA1c2ZnbnUiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8ZGJnRmxhZ3N8UFBDNDQwZGlhYiIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxkYmdGbGFnc3xQUEM0NDBnbnUiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8ZGJnRmxhZ3N8UFBDNDQwc2ZkaWFiIiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfGRiZ0ZsYWdzfFBQQzQ0MHNmZ251IiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfGRiZ0ZsYWdzfFBQQzYwM2RpYWIiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8ZGJnRmxhZ3N8UFBDNjAzZ251IiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfGRiZ0ZsYWdzfFBQQzYwNGRpYWIiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8ZGJnRmxhZ3N8UFBDNjA0Z251IiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfGRiZ0ZsYWdzfFBQQzg1WFhkaWFiIiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfGRiZ0ZsYWdzfFBQQzg1WFhnbnUiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8ZGJnRmxhZ3N8UFBDODVYWHNmZGlhYiIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxkYmdGbGFnc3xQUEM4NVhYc2ZnbnUiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8ZGJnRmxhZ3N8UFBDODYwc2ZkaWFiIiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfGRiZ0ZsYWdzfFBQQzg2MHNmZ251IiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfGRiZ0ZsYWdzfFNJTUxJTlVYZGlhYiIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxkYmdGbGFnc3xTSU1MSU5VWGdudSIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxkYmdGbGFnc3xTSU1OVGRpYWIiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8ZGJnRmxhZ3N8U0lNTlRnbnUiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8ZGJnRmxhZ3N8U0lNU1BBUkNTT0xBUklTZGlhYiIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxkYmdGbGFnc3xTSU1TUEFSQ1NPTEFSSVNnbnUiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8ZGVyaXZlZFNpZ3N8UFBDMzJkaWFiIiB2YWx1ZT0iKi5vIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfGRlcml2ZWRTaWdzfFBQQzMyZ251IiB2YWx1ZT0iKi5vIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfGRlcml2ZWRTaWdzfFBQQzMyc2ZkaWFiIiB2YWx1ZT0iKi5vIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfGRlcml2ZWRTaWdzfFBQQzMyc2ZnbnUiIHZhbHVlPSIqLm8iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8ZGVyaXZlZFNpZ3N8UFBDNDAzZGlhYiIgdmFsdWU9IioubyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxkZXJpdmVkU2lnc3xQUEM0MDNnbnUiIHZhbHVlPSIqLm8iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8ZGVyaXZlZFNpZ3N8UFBDNDA1ZGlhYiIgdmFsdWU9IioubyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxkZXJpdmVkU2lnc3xQUEM0MDVnbnUiIHZhbHVlPSIqLm8iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8ZGVyaXZlZFNpZ3N8UFBDNDA1c2ZkaWFiIiB2YWx1ZT0iKi5vIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfGRlcml2ZWRTaWdzfFBQQzQwNXNmZ251IiB2YWx1ZT0iKi5vIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfGRlcml2ZWRTaWdzfFBQQzQ0MGRpYWIiIHZhbHVlPSIqLm8iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8ZGVyaXZlZFNpZ3N8UFBDNDQwZ251IiB2YWx1ZT0iKi5vIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfGRlcml2ZWRTaWdzfFBQQzQ0MHNmZGlhYiIgdmFsdWU9IioubyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxkZXJpdmVkU2lnc3xQUEM0NDBzZmdudSIgdmFsdWU9IioubyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxkZXJpdmVkU2lnc3xQUEM2MDNkaWFiIiB2YWx1ZT0iKi5vIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfGRlcml2ZWRTaWdzfFBQQzYwM2dudSIgdmFsdWU9IioubyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxkZXJpdmVkU2lnc3xQUEM2MDRkaWFiIiB2YWx1ZT0iKi5vIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfGRlcml2ZWRTaWdzfFBQQzYwNGdudSIgdmFsdWU9IioubyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxkZXJpdmVkU2lnc3xQUEM4NVhYZGlhYiIgdmFsdWU9IioubyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxkZXJpdmVkU2lnc3xQUEM4NVhYZ251IiB2YWx1ZT0iKi5vIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfGRlcml2ZWRTaWdzfFBQQzg1WFhzZmRpYWIiIHZhbHVlPSIqLm8iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8ZGVyaXZlZFNpZ3N8UFBDODVYWHNmZ251IiB2YWx1ZT0iKi5vIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfGRlcml2ZWRTaWdzfFBQQzg2MHNmZGlhYiIgdmFsdWU9IioubyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxkZXJpdmVkU2lnc3xQUEM4NjBzZmdudSIgdmFsdWU9IioubyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxkZXJpdmVkU2lnc3xTSU1MSU5VWGRpYWIiIHZhbHVlPSIqLm8iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8ZGVyaXZlZFNpZ3N8U0lNTElOVVhnbnUiIHZhbHVlPSIqLm8iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8ZGVyaXZlZFNpZ3N8U0lNTlRkaWFiIiB2YWx1ZT0iKi5vIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfGRlcml2ZWRTaWdzfFNJTU5UZ251IiB2YWx1ZT0iKi5vIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfGRlcml2ZWRTaWdzfFNJTVNQQVJDU09MQVJJU2RpYWIiIHZhbHVlPSIqLm8iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8ZGVyaXZlZFNpZ3N8U0lNU1BBUkNTT0xBUklTZ251IiB2YWx1ZT0iKi5vIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfGZsYWdzfFBQQzMyZGlhYiIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxmbGFnc3xQUEMzMmdudSIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxmbGFnc3xQUEMzMnNmZGlhYiIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxmbGFnc3xQUEMzMnNmZ251IiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfGZsYWdzfFBQQzQwM2RpYWIiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8ZmxhZ3N8UFBDNDAzZ251IiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfGZsYWdzfFBQQzQwNWRpYWIiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8ZmxhZ3N8UFBDNDA1Z251IiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfGZsYWdzfFBQQzQwNXNmZGlhYiIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxmbGFnc3xQUEM0MDVzZmdudSIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxmbGFnc3xQUEM0NDBkaWFiIiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfGZsYWdzfFBQQzQ0MGdudSIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxmbGFnc3xQUEM0NDBzZmRpYWIiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8ZmxhZ3N8UFBDNDQwc2ZnbnUiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8ZmxhZ3N8UFBDNjAzZGlhYiIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxmbGFnc3xQUEM2MDNnbnUiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8ZmxhZ3N8UFBDNjA0ZGlhYiIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxmbGFnc3xQUEM2MDRnbnUiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8ZmxhZ3N8UFBDODVYWGRpYWIiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8ZmxhZ3N8UFBDODVYWGdudSIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxmbGFnc3xQUEM4NVhYc2ZkaWFiIiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfGZsYWdzfFBQQzg1WFhzZmdudSIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxmbGFnc3xQUEM4NjBzZmRpYWIiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8ZmxhZ3N8UFBDODYwc2ZnbnUiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8ZmxhZ3N8U0lNTElOVVhkaWFiIiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfGZsYWdzfFNJTUxJTlVYZ251IiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfGZsYWdzfFNJTU5UZGlhYiIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxmbGFnc3xTSU1OVGdudSIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxmbGFnc3xTSU1TUEFSQ1NPTEFSSVNkaWFiIiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfGZsYWdzfFNJTVNQQVJDU09MQVJJU2dudSIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxub25EYmdGbGFnc3xQUEMzMmRpYWIiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8bm9uRGJnRmxhZ3N8UFBDMzJnbnUiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8bm9uRGJnRmxhZ3N8UFBDMzJzZmRpYWIiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8bm9uRGJnRmxhZ3N8UFBDMzJzZmdudSIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxub25EYmdGbGFnc3xQUEM0MDNkaWFiIiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfG5vbkRiZ0ZsYWdzfFBQQzQwM2dudSIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxub25EYmdGbGFnc3xQUEM0MDVkaWFiIiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfG5vbkRiZ0ZsYWdzfFBQQzQwNWdudSIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxub25EYmdGbGFnc3xQUEM0MDVzZmRpYWIiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8bm9uRGJnRmxhZ3N8UFBDNDA1c2ZnbnUiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8bm9uRGJnRmxhZ3N8UFBDNDQwZGlhYiIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxub25EYmdGbGFnc3xQUEM0NDBnbnUiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8bm9uRGJnRmxhZ3N8UFBDNDQwc2ZkaWFiIiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfG5vbkRiZ0ZsYWdzfFBQQzQ0MHNmZ251IiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfG5vbkRiZ0ZsYWdzfFBQQzYwM2RpYWIiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8bm9uRGJnRmxhZ3N8UFBDNjAzZ251IiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfG5vbkRiZ0ZsYWdzfFBQQzYwNGRpYWIiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8bm9uRGJnRmxhZ3N8UFBDNjA0Z251IiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfG5vbkRiZ0ZsYWdzfFBQQzg1WFhkaWFiIiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfG5vbkRiZ0ZsYWdzfFBQQzg1WFhnbnUiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8bm9uRGJnRmxhZ3N8UFBDODVYWHNmZGlhYiIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxub25EYmdGbGFnc3xQUEM4NVhYc2ZnbnUiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8bm9uRGJnRmxhZ3N8UFBDODYwc2ZkaWFiIiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfG5vbkRiZ0ZsYWdzfFBQQzg2MHNmZ251IiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfG5vbkRiZ0ZsYWdzfFNJTUxJTlVYZGlhYiIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxub25EYmdGbGFnc3xTSU1MSU5VWGdudSIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxub25EYmdGbGFnc3xTSU1OVGRpYWIiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8bm9uRGJnRmxhZ3N8U0lNTlRnbnUiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8bm9uRGJnRmxhZ3N8U0lNU1BBUkNTT0xBUklTZGlhYiIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxub25EYmdGbGFnc3xTSU1TUEFSQ1NPTEFSSVNnbnUiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfG9iamVjdCIgdmFsdWU9ImZhbHNlIi8+DQorICAgICAgICAgICAgPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxwYXNzQWJsZSIgdmFsdWU9InRydWUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8c2lncyIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98Y21kIiB2YWx1ZT0iJW1ha2VwcmVmaXglIG1ha2UgLS1uby1wcmludC1kaXJlY3RvcnkiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfGRlZmF1bHRTcGVjIiB2YWx1ZT0iUFBDNjAzZ251Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xyZWRpckRpcnxQUEMzMmRpYWIiIHZhbHVlPSJQUEMzMmRpYWIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfHJlZGlyRGlyfFBQQzMyZ251IiB2YWx1ZT0iUFBDMzJnbnUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfHJlZGlyRGlyfFBQQzMyc2ZkaWFiIiB2YWx1ZT0iUFBDMzJzZmRpYWIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfHJlZGlyRGlyfFBQQzMyc2ZnbnUiIHZhbHVlPSJQUEMzMnNmZ251Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xyZWRpckRpcnxQUEM0MDNkaWFiIiB2YWx1ZT0iUFBDNDAzZGlhYiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98cmVkaXJEaXJ8UFBDNDAzZ251IiB2YWx1ZT0iUFBDNDAzZ251Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xyZWRpckRpcnxQUEM0MDVkaWFiIiB2YWx1ZT0iUFBDNDA1ZGlhYiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98cmVkaXJEaXJ8UFBDNDA1Z251IiB2YWx1ZT0iUFBDNDA1Z251Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xyZWRpckRpcnxQUEM0MDVzZmRpYWIiIHZhbHVlPSJQUEM0MDVzZmRpYWIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfHJlZGlyRGlyfFBQQzQwNXNmZ251IiB2YWx1ZT0iUFBDNDA1c2ZnbnUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfHJlZGlyRGlyfFBQQzQ0MGRpYWIiIHZhbHVlPSJQUEM0NDBkaWFiIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xyZWRpckRpcnxQUEM0NDBnbnUiIHZhbHVlPSJQUEM0NDBnbnUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfHJlZGlyRGlyfFBQQzQ0MHNmZGlhYiIgdmFsdWU9IlBQQzQ0MHNmZGlhYiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98cmVkaXJEaXJ8UFBDNDQwc2ZnbnUiIHZhbHVlPSJQUEM0NDBzZmdudSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98cmVkaXJEaXJ8UFBDNjAzZGlhYiIgdmFsdWU9IlBQQzYwM2RpYWIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfHJlZGlyRGlyfFBQQzYwM2dudSIgdmFsdWU9IlBQQzYwM2dudSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98cmVkaXJEaXJ8UFBDNjA0ZGlhYiIgdmFsdWU9IlBQQzYwNGRpYWIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfHJlZGlyRGlyfFBQQzYwNGdudSIgdmFsdWU9IlBQQzYwNGdudSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98cmVkaXJEaXJ8UFBDODVYWGRpYWIiIHZhbHVlPSJQUEM4NVhYZGlhYiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98cmVkaXJEaXJ8UFBDODVYWGdudSIgdmFsdWU9IlBQQzg1WFhnbnUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfHJlZGlyRGlyfFBQQzg1WFhzZmRpYWIiIHZhbHVlPSJQUEM4NVhYc2ZkaWFiIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xyZWRpckRpcnxQUEM4NVhYc2ZnbnUiIHZhbHVlPSJQUEM4NVhYc2ZnbnUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfHJlZGlyRGlyfFBQQzg2MHNmZGlhYiIgdmFsdWU9IlBQQzg2MHNmZGlhYiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98cmVkaXJEaXJ8UFBDODYwc2ZnbnUiIHZhbHVlPSJQUEM4NjBzZmdudSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98cmVkaXJEaXJ8U0lNTElOVVhkaWFiIiB2YWx1ZT0iU0lNTElOVVhkaWFiIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xyZWRpckRpcnxTSU1MSU5VWGdudSIgdmFsdWU9IlNJTUxJTlVYZ251Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xyZWRpckRpcnxTSU1OVGRpYWIiIHZhbHVlPSJTSU1OVGRpYWIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfHJlZGlyRGlyfFNJTU5UZ251IiB2YWx1ZT0iU0lNTlRnbnUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfHJlZGlyRGlyfFNJTVNQQVJDU09MQVJJU2RpYWIiIHZhbHVlPSJTSU1TUEFSQ1NPTEFSSVNkaWFiIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xyZWRpckRpcnxTSU1TUEFSQ1NPTEFSSVNnbnUiIHZhbHVlPSJTSU1TUEFSQ1NPTEFSSVNnbnUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfHJlZGlyUm9vdCIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxpbnRBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98cmVmcmVzaFR5cGUiIHZhbHVlPSIwIi8+DQorICAgICAgICAgICAgPGxpc3RBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98c3BlY3MiPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSJQUEMzMmRpYWIiLz4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iUFBDMzJnbnUiLz4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iUFBDMzJzZmRpYWIiLz4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iUFBDMzJzZmdudSIvPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSJQUEM0MDNkaWFiIi8+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9IlBQQzQwM2dudSIvPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSJQUEM0MDVkaWFiIi8+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9IlBQQzQwNWdudSIvPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSJQUEM0MDVzZmRpYWIiLz4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iUFBDNDA1c2ZnbnUiLz4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iUFBDNDQwZGlhYiIvPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSJQUEM0NDBnbnUiLz4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iUFBDNDQwc2ZkaWFiIi8+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9IlBQQzQ0MHNmZ251Ii8+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9IlBQQzYwM2RpYWIiLz4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iUFBDNjAzZ251Ii8+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9IlBQQzYwNGRpYWIiLz4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iUFBDNjA0Z251Ii8+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9IlBQQzg1WFhkaWFiIi8+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9IlBQQzg1WFhnbnUiLz4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iUFBDODVYWHNmZGlhYiIvPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSJQUEM4NVhYc2ZnbnUiLz4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iUFBDODYwc2ZkaWFiIi8+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9IlBQQzg2MHNmZ251Ii8+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9IlNJTUxJTlVYZGlhYiIvPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSJTSU1MSU5VWGdudSIvPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSJTSU1OVGRpYWIiLz4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iU0lNTlRnbnUiLz4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iU0lNU1BBUkNTT0xBUklTZGlhYiIvPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSJTSU1TUEFSQ1NPTEFSSVNnbnUiLz4NCisgICAgICAgICAgICA8L2xpc3RBdHRyaWJ1dGU+DQorICAgICAgICAgICAgPGxpc3RBdHRyaWJ1dGUga2V5PSJCTEQ6OlRndHxUYXJnZXRzIi8+DQorICAgICAgICAgICAgPGludEF0dHJpYnV0ZSBrZXk9IkJ1aWxkU3VwcG9ydEVuYWJsZWQiIHZhbHVlPSIxIi8+DQorICAgICAgICAgICAgPGxpc3RBdHRyaWJ1dGUga2V5PSJCdWlsZFN1cHBvcnRGb3JCdWlsZFNwZWNzIj4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iUFBDNjAzZ251Ii8+DQorICAgICAgICAgICAgPC9saXN0QXR0cmlidXRlPg0KKyAgICAgICAgICAgIDxib29sZWFuQXR0cmlidXRlIGtleT0iQnVpbGRUYXJnZXRDZW50cmljIiB2YWx1ZT0idHJ1ZSIvPg0KKyAgICAgICAgICAgIDxib29sZWFuQXR0cmlidXRlIGtleT0iUGFzc09iamVjdHMiIHZhbHVlPSJmYWxzZSIvPg0KKyAgICAgICAgPC9tYXBBdHRyaWJ1dGU+DQorICAgIDwvYXR0cmlidXRlcz4NCisgICAgPGJ1aWxkdGFyZ2V0cz4NCisgICAgICAgIDxidWlsZHRhcmdldCBidWlsZHRvb2w9IkxpYnJhcmlhbiIgbmFtZT0iV1BJTGliIiBwYXNzZWQ9InRydWUiIHRhcmdldG5hbWU9IldQSUxpYiI+DQorICAgICAgICAgICAgPGNvbnRlbnRzPg0KKyAgICAgICAgICAgICAgICA8Zm9sZGVyIG5hbWU9Ii9XUElMaWIiIHJlY3Vyc2l2ZT0idHJ1ZSIvPg0KKyAgICAgICAgICAgIDwvY29udGVudHM+DQorICAgICAgICA8L2J1aWxkdGFyZ2V0Pg0KKyAgICAgICAgPGJ1aWxkdGFyZ2V0IGJ1aWxkdG9vbD0iTGlicmFyaWFuIiBuYW1lPSJKYXZhQ2FtZXJhTGliIiBwYXNzZWQ9ImZhbHNlIiB0YXJnZXRuYW1lPSJKYXZhQ2FtZXJhTGliIj4NCisgICAgICAgICAgICA8YXR0cmlidXRlcz4NCisgICAgICAgICAgICAgICAgPG1hcEF0dHJpYnV0ZT4NCisgICAgICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8Y21kfFBQQzYwM2dudSIgdmFsdWU9IiVjcHBjb21waWxlcnByZWZpeCUgJChUT09MX1BBVEgpY2NwcGMgJURlYnVnTW9kZUZsYWdzJSAlVG9vbEZsYWdzJSAkKEFEREVEX0MrK0ZMQUdTKSAlSW5jbHVkZXMlICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1ESkFWQV9DQU1FUkFfTElCPTEgLURfV1JTX0tFUk5FTCAtRCdTVk5fUkVWPSZxdW90OyQoc2hlbGwgc3ZudmVyc2lvbiAtbiAuLikmcXVvdDsnICQoREVGSU5FUykgLW8gJU91dEZpbGUlIC1jICVJbkZpbGUlIi8+DQorICAgICAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxjbWR8UFBDNjAzZ251IiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OzslY2NvbXBpbGVycHJlZml4JSAkKFRPT0xfUEFUSCljY3BwYyAlRGVidWdNb2RlRmxhZ3MlICVUb29sRmxhZ3MlICQoQURERURfQ0ZMQUdTKSAlSW5jbHVkZXMlICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1ESkFWQV9DQU1FUkFfTElCPTEgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gJU91dEZpbGUlIC1jICVJbkZpbGUlIi8+DQorICAgICAgICAgICAgICAgIDwvbWFwQXR0cmlidXRlPg0KKyAgICAgICAgICAgIDwvYXR0cmlidXRlcz4NCisgICAgICAgICAgICA8Y29udGVudHM+DQorICAgICAgICAgICAgICAgIDxmaWxlIG5hbWU9Ii9XUElMaWIvVmlzaW9uL1BDVmlkZW9TZXJ2ZXIuY3BwIi8+DQorICAgICAgICAgICAgICAgIDxmaWxlIG5hbWU9Ii9XUElMaWIvVmlzaW9uL0F4aXNDYW1lcmEuY3BwIi8+DQorICAgICAgICAgICAgICAgIDxmaWxlIG5hbWU9Ii9XUElMaWIvVmlzaW9uL0F4aXNDYW1lcmFQYXJhbXMuY3BwIi8+DQorICAgICAgICAgICAgICAgIDxmaWxlIG5hbWU9Ii9XUElMaWIvVmlzaW9uL0VudW1DYW1lcmFQYXJhbWV0ZXIuY3BwIi8+DQorICAgICAgICAgICAgICAgIDxmaWxlIG5hbWU9Ii9XUElMaWIvVmlzaW9uL0ludENhbWVyYVBhcmFtZXRlci5jcHAiLz4NCisgICAgICAgICAgICAgICAgPGZpbGUgbmFtZT0iL1dQSUxpYi9FcnJvci5jcHAiLz4NCisgICAgICAgICAgICAgICAgPGZpbGUgbmFtZT0iL1dQSUxpYi9FcnJvckJhc2UuY3BwIi8+DQorICAgICAgICAgICAgICAgIDxmaWxlIG5hbWU9Ii9XUElMaWIvVGFzay5jcHAiLz4NCisgICAgICAgICAgICAgICAgPGZpbGUgbmFtZT0iL1dQSUxpYi9UaW1lci5jcHAiLz4NCisgICAgICAgICAgICAgICAgPGZpbGUgbmFtZT0iL1dQSUxpYi9TeW5jaHJvbml6ZWQuY3BwIi8+DQorICAgICAgICAgICAgICAgIDxmaWxlIG5hbWU9Ii9XUElMaWIvVXRpbGl0eS5jcHAiLz4NCisgICAgICAgICAgICA8L2NvbnRlbnRzPg0KKyAgICAgICAgPC9idWlsZHRhcmdldD4NCisgICAgPC9idWlsZHRhcmdldHM+DQorPC93cnhtbD4NCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9BRFhMMzQ1X0kyQy5jcHAgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9BRFhMMzQ1X0kyQy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWZkNzRjMAotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0FEWEwzNDVfSTJDLmNwcApAQCAtMCwwICsxLDk0IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy8qIENvcHlyaWdodCAoYykgRklSU1QgMjAwOC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4JCQkJCQkJICAqLw0KKy8qIE9wZW4gU291cmNlIFNvZnR3YXJlIC0gbWF5IGJlIG1vZGlmaWVkIGFuZCBzaGFyZWQgYnkgRlJDIHRlYW1zLiBUaGUgY29kZSAgICovDQorLyogbXVzdCBiZSBhY2NvbXBhbmllZCBieSB0aGUgRklSU1QgQlNEIGxpY2Vuc2UgZmlsZSBpbiAkKFdJTkRfQkFTRSkvV1BJTGliLiAgKi8NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKyNpbmNsdWRlICJBRFhMMzQ1X0kyQy5oIg0KKyNpbmNsdWRlICJEaWdpdGFsTW9kdWxlLmgiDQorI2luY2x1ZGUgIk5ldHdvcmtDb21tdW5pY2F0aW9uL1VzYWdlUmVwb3J0aW5nLmgiDQorI2luY2x1ZGUgIkkyQy5oIg0KKw0KK2NvbnN0IFVJTlQ4IEFEWEwzNDVfSTJDOjprQWRkcmVzczsNCitjb25zdCBVSU5UOCBBRFhMMzQ1X0kyQzo6a1Bvd2VyQ3RsUmVnaXN0ZXI7DQorY29uc3QgVUlOVDggQURYTDM0NV9JMkM6OmtEYXRhRm9ybWF0UmVnaXN0ZXI7DQorY29uc3QgVUlOVDggQURYTDM0NV9JMkM6OmtEYXRhUmVnaXN0ZXI7DQorY29uc3QgZG91YmxlIEFEWEwzNDVfSTJDOjprR3NQZXJMU0I7DQorDQorLyoqDQorICogQ29uc3RydWN0b3IuDQorICogDQorICogQHBhcmFtIG1vZHVsZU51bWJlciBUaGUgZGlnaXRhbCBtb2R1bGUgdGhhdCB0aGUgc2Vuc29yIGlzIHBsdWdnZWQgaW50byAoMSBvciAyKS4NCisgKiBAcGFyYW0gcmFuZ2UgVGhlIHJhbmdlICgrIG9yIC0pIHRoYXQgdGhlIGFjY2VsZXJvbWV0ZXIgd2lsbCBtZWFzdXJlLg0KKyAqLw0KK0FEWEwzNDVfSTJDOjpBRFhMMzQ1X0kyQyhVSU5UOCBtb2R1bGVOdW1iZXIsIEFEWEwzNDVfSTJDOjpEYXRhRm9ybWF0X1JhbmdlIHJhbmdlKQ0KKwk6IG1faTJjIChOVUxMKQ0KK3sNCisJRGlnaXRhbE1vZHVsZSAqbW9kdWxlID0gRGlnaXRhbE1vZHVsZTo6R2V0SW5zdGFuY2UobW9kdWxlTnVtYmVyKTsNCisJaWYgKG1vZHVsZSkNCisJew0KKwkJbV9pMmMgPSBtb2R1bGUtPkdldEkyQyhrQWRkcmVzcyk7DQorDQorCQkvLyBUdXJuIG9uIHRoZSBtZWFzdXJlbWVudHMNCisJCW1faTJjLT5Xcml0ZShrUG93ZXJDdGxSZWdpc3Rlciwga1Bvd2VyQ3RsX01lYXN1cmUpOw0KKwkJLy8gU3BlY2lmeSB0aGUgZGF0YSBmb3JtYXQgdG8gcmVhZA0KKwkJbV9pMmMtPldyaXRlKGtEYXRhRm9ybWF0UmVnaXN0ZXIsIGtEYXRhRm9ybWF0X0Z1bGxSZXMgfCAoVUlOVDgpcmFuZ2UpOw0KKw0KKwkJblVzYWdlUmVwb3J0aW5nOjpyZXBvcnQoblVzYWdlUmVwb3J0aW5nOjprUmVzb3VyY2VUeXBlX0FEWEwzNDUsIG5Vc2FnZVJlcG9ydGluZzo6a0FEWEwzNDVfSTJDLCBtb2R1bGVOdW1iZXIgLSAxKTsNCisJfQ0KK30NCisNCisvKioNCisgKiBEZXN0cnVjdG9yLg0KKyAqLw0KK0FEWEwzNDVfSTJDOjp+QURYTDM0NV9JMkMoKQ0KK3sNCisJZGVsZXRlIG1faTJjOw0KKwltX2kyYyA9IE5VTEw7DQorfQ0KKw0KKy8qKg0KKyAqIEdldCB0aGUgYWNjZWxlcmF0aW9uIG9mIG9uZSBheGlzIGluIEdzLg0KKyAqIA0KKyAqIEBwYXJhbSBheGlzIFRoZSBheGlzIHRvIHJlYWQgZnJvbS4NCisgKiBAcmV0dXJuIEFjY2VsZXJhdGlvbiBvZiB0aGUgQURYTDM0NSBpbiBHcy4NCisgKi8NCitkb3VibGUgQURYTDM0NV9JMkM6OkdldEFjY2VsZXJhdGlvbihBRFhMMzQ1X0kyQzo6QXhlcyBheGlzKQ0KK3sNCisJSU5UMTYgcmF3QWNjZWwgPSAwOw0KKwlpZihtX2kyYykNCisJew0KKwkJbV9pMmMtPlJlYWQoa0RhdGFSZWdpc3RlciArIChVSU5UOClheGlzLCBzaXplb2YocmF3QWNjZWwpLCAoVUlOVDggKikmcmF3QWNjZWwpOw0KKw0KKwkJLy8gU2Vuc29yIGlzIGxpdHRsZSBlbmRpYW4uLi4gc3dhcCBieXRlcw0KKwkJcmF3QWNjZWwgPSAoKHJhd0FjY2VsID4+IDgpICYgMHhGRikgfCAocmF3QWNjZWwgPDwgOCk7DQorCX0NCisJcmV0dXJuIHJhd0FjY2VsICoga0dzUGVyTFNCOw0KK30NCisNCisvKioNCisgKiBHZXQgdGhlIGFjY2VsZXJhdGlvbiBvZiBhbGwgYXhlcyBpbiBHcy4NCisgKiANCisgKiBAcmV0dXJuIEFjY2VsZXJhdGlvbiBtZWFzdXJlZCBvbiBhbGwgYXhlcyBvZiB0aGUgQURYTDM0NSBpbiBHcy4NCisgKi8NCitBRFhMMzQ1X0kyQzo6QWxsQXhlcyBBRFhMMzQ1X0kyQzo6R2V0QWNjZWxlcmF0aW9ucygpDQorew0KKwlBbGxBeGVzIGRhdGEgPSB7MC4wfTsNCisJSU5UMTYgcmF3RGF0YVszXTsNCisJaWYgKG1faTJjKQ0KKwl7DQorCQltX2kyYy0+UmVhZChrRGF0YVJlZ2lzdGVyLCBzaXplb2YocmF3RGF0YSksIChVSU5UOCopcmF3RGF0YSk7DQorDQorCQkvLyBTZW5zb3IgaXMgbGl0dGxlIGVuZGlhbi4uLiBzd2FwIGJ5dGVzDQorCQlmb3IgKElOVDMyIGk9MDsgaTwzOyBpKyspDQorCQl7DQorCQkJcmF3RGF0YVtpXSA9ICgocmF3RGF0YVtpXSA+PiA4KSAmIDB4RkYpIHwgKHJhd0RhdGFbaV0gPDwgOCk7DQorCQl9DQorDQorCQlkYXRhLlhBeGlzID0gcmF3RGF0YVswXSAqIGtHc1BlckxTQjsNCisJCWRhdGEuWUF4aXMgPSByYXdEYXRhWzFdICoga0dzUGVyTFNCOw0KKwkJZGF0YS5aQXhpcyA9IHJhd0RhdGFbMl0gKiBrR3NQZXJMU0I7DQorCX0NCisJcmV0dXJuIGRhdGE7DQorfQ0KKw0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0FEWEwzNDVfSTJDLmggYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9BRFhMMzQ1X0kyQy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2NGZlZjkKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9BRFhMMzQ1X0kyQy5oCkBAIC0wLDAgKzEsNTMgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorLyogQ29weXJpZ2h0IChjKSBGSVJTVCAyMDA4LiBBbGwgUmlnaHRzIFJlc2VydmVkLgkJCQkJCQkgICovDQorLyogT3BlbiBTb3VyY2UgU29mdHdhcmUgLSBtYXkgYmUgbW9kaWZpZWQgYW5kIHNoYXJlZCBieSBGUkMgdGVhbXMuIFRoZSBjb2RlICAgKi8NCisvKiBtdXN0IGJlIGFjY29tcGFuaWVkIGJ5IHRoZSBGSVJTVCBCU0QgbGljZW5zZSBmaWxlIGluICQoV0lORF9CQVNFKS9XUElMaWIuICAqLw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorI2lmbmRlZiBfX0FEWEwzNDVfSTJDX2hfXw0KKyNkZWZpbmUgX19BRFhMMzQ1X0kyQ19oX18NCisNCisjaW5jbHVkZSAiU2Vuc29yQmFzZS5oIg0KKw0KK2NsYXNzIEkyQzsNCisNCisvKioNCisgKiBBRFhMMzQ1IEFjY2VsZXJvbWV0ZXIgb24gSTJDLg0KKyAqIA0KKyAqIFRoaXMgY2xhc3MgYWxvd3MgYWNjZXNzIHRvIGEgQW5hbG9nIERldmljZXMgQURYTDM0NSAzLWF4aXMgYWNjZWxlcm9tZXRlciBvbiBhbiBJMkMgYnVzLg0KKyAqIFRoaXMgY2xhc3MgYXNzdW1lcyB0aGUgZGVmYXVsdCAobm90IGFsdGVybmF0ZSkgc2Vuc29yIGFkZHJlc3Mgb2YgMHgzQSAoOC1iaXQgYWRkcmVzcykuDQorICovDQorY2xhc3MgQURYTDM0NV9JMkMgOiBwdWJsaWMgU2Vuc29yQmFzZQ0KK3sNCitwcm90ZWN0ZWQ6DQorCXN0YXRpYyBjb25zdCBVSU5UOCBrQWRkcmVzcyA9IDB4M0E7DQorCXN0YXRpYyBjb25zdCBVSU5UOCBrUG93ZXJDdGxSZWdpc3RlciA9IDB4MkQ7DQorCXN0YXRpYyBjb25zdCBVSU5UOCBrRGF0YUZvcm1hdFJlZ2lzdGVyID0gMHgzMTsNCisJc3RhdGljIGNvbnN0IFVJTlQ4IGtEYXRhUmVnaXN0ZXIgPSAweDMyOw0KKwlzdGF0aWMgY29uc3QgZG91YmxlIGtHc1BlckxTQiA9IDAuMDAzOTA2MjU7DQorCWVudW0gUG93ZXJDdGxGaWVsZHMge2tQb3dlckN0bF9MaW5rPTB4MjAsIGtQb3dlckN0bF9BdXRvU2xlZXA9MHgxMCwga1Bvd2VyQ3RsX01lYXN1cmU9MHgwOCwga1Bvd2VyQ3RsX1NsZWVwPTB4MDR9Ow0KKwllbnVtIERhdGFGb3JtYXRGaWVsZHMge2tEYXRhRm9ybWF0X1NlbGZUZXN0PTB4ODAsIGtEYXRhRm9ybWF0X1NQST0weDQwLCBrRGF0YUZvcm1hdF9JbnRJbnZlcnQ9MHgyMCwNCisJCWtEYXRhRm9ybWF0X0Z1bGxSZXM9MHgwOCwga0RhdGFGb3JtYXRfSnVzdGlmeT0weDA0fTsNCisNCitwdWJsaWM6DQorCWVudW0gRGF0YUZvcm1hdF9SYW5nZSB7a1JhbmdlXzJHPTB4MDAsIGtSYW5nZV80Rz0weDAxLCBrUmFuZ2VfOEc9MHgwMiwga1JhbmdlXzE2Rz0weDAzfTsNCisJZW51bSBBeGVzIHtrQXhpc19YPTB4MDAsIGtBeGlzX1k9MHgwMiwga0F4aXNfWj0weDA0fTsNCisJc3RydWN0IEFsbEF4ZXMNCisJew0KKwkJZG91YmxlIFhBeGlzOw0KKwkJZG91YmxlIFlBeGlzOw0KKwkJZG91YmxlIFpBeGlzOw0KKwl9Ow0KKw0KK3B1YmxpYzoNCisJZXhwbGljaXQgQURYTDM0NV9JMkMoVUlOVDggbW9kdWxlTnVtYmVyLCBEYXRhRm9ybWF0X1JhbmdlIHJhbmdlPWtSYW5nZV8yRyk7DQorCXZpcnR1YWwgfkFEWEwzNDVfSTJDKCk7DQorCXZpcnR1YWwgZG91YmxlIEdldEFjY2VsZXJhdGlvbihBeGVzIGF4aXMpOw0KKwl2aXJ0dWFsIEFsbEF4ZXMgR2V0QWNjZWxlcmF0aW9ucygpOw0KKw0KK3Byb3RlY3RlZDoNCisJSTJDKiBtX2kyYzsNCit9Ow0KKw0KKyNlbmRpZg0KKw0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0FEWEwzNDVfU1BJLmNwcCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0FEWEwzNDVfU1BJLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTdkMzNjCi0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvQURYTDM0NV9TUEkuY3BwCkBAIC0wLDAgKzEsMjEzIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy8qIENvcHlyaWdodCAoYykgRklSU1QgMjAwOC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4JCQkJCQkJICAqLw0KKy8qIE9wZW4gU291cmNlIFNvZnR3YXJlIC0gbWF5IGJlIG1vZGlmaWVkIGFuZCBzaGFyZWQgYnkgRlJDIHRlYW1zLiBUaGUgY29kZSAgICovDQorLyogbXVzdCBiZSBhY2NvbXBhbmllZCBieSB0aGUgRklSU1QgQlNEIGxpY2Vuc2UgZmlsZSBpbiAkKFdJTkRfQkFTRSkvV1BJTGliLiAgKi8NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKyNpbmNsdWRlICJBRFhMMzQ1X1NQSS5oIg0KKyNpbmNsdWRlICJEaWdpdGFsSW5wdXQuaCINCisjaW5jbHVkZSAiRGlnaXRhbE91dHB1dC5oIg0KKyNpbmNsdWRlICJOZXR3b3JrQ29tbXVuaWNhdGlvbi9Vc2FnZVJlcG9ydGluZy5oIg0KKyNpbmNsdWRlICJTUEkuaCINCisNCitjb25zdCBVSU5UOCBBRFhMMzQ1X1NQSTo6a1Bvd2VyQ3RsUmVnaXN0ZXI7DQorY29uc3QgVUlOVDggQURYTDM0NV9TUEk6OmtEYXRhRm9ybWF0UmVnaXN0ZXI7DQorY29uc3QgVUlOVDggQURYTDM0NV9TUEk6OmtEYXRhUmVnaXN0ZXI7DQorY29uc3QgZG91YmxlIEFEWEwzNDVfU1BJOjprR3NQZXJMU0I7DQorDQorLyoqDQorICogQ29uc3RydWN0b3IuDQorICogDQorICogQHBhcmFtIGNsayBUaGUgR1BJTyB0aGUgY2xvY2sgc2lnbmFsIGlzIHdpcmVkIHRvLg0KKyAqIEBwYXJhbSBtb3NpIFRoZSBHUElPIHRoZSBNT1NJIChNYXN0ZXIgT3V0IFNsYXZlIEluKSBzaWduYWwgaXMgd2lyZWQgdG8uDQorICogQHBhcmFtIG1pc28gVGhlIEdQSU8gdGhlIE1JU08gKE1hc3RlciBJbiBTbGF2ZSBPdXQpIHNpZ25hbCBpcyB3aXJlZCB0by4NCisgKiBAcGFyYW0gY3MgVGhlIEdQSU8gdGhlIENTIChDaGlwIFNlbGVjdCkgc2lnbmFsIGlzIHdpcmVkIHRvLg0KKyAqIEBwYXJhbSByYW5nZSBUaGUgcmFuZ2UgKCsgb3IgLSkgdGhhdCB0aGUgYWNjZWxlcm9tZXRlciB3aWxsIG1lYXN1cmUuDQorICovDQorQURYTDM0NV9TUEk6OkFEWEwzNDVfU1BJKERpZ2l0YWxPdXRwdXQgJmNsaywgRGlnaXRhbE91dHB1dCAmbW9zaSwgRGlnaXRhbElucHV0ICZtaXNvLA0KKwlEaWdpdGFsT3V0cHV0ICZjcywgRGF0YUZvcm1hdF9SYW5nZSByYW5nZSkNCisJOiBtX2NsayAoTlVMTCkNCisJLCBtX21vc2kgKE5VTEwpDQorCSwgbV9taXNvIChOVUxMKQ0KKwksIG1fY3MgKE5VTEwpDQorCSwgbV9zcGkgKE5VTEwpDQorew0KKwlJbml0KCZjbGssICZtb3NpLCAmbWlzbywgJmNzLCByYW5nZSk7DQorfQ0KKw0KKy8qKg0KKyAqIENvbnN0cnVjdG9yLg0KKyAqIA0KKyAqIEBwYXJhbSBjbGsgVGhlIEdQSU8gdGhlIGNsb2NrIHNpZ25hbCBpcyB3aXJlZCB0by4NCisgKiBAcGFyYW0gbW9zaSBUaGUgR1BJTyB0aGUgTU9TSSAoTWFzdGVyIE91dCBTbGF2ZSBJbikgc2lnbmFsIGlzIHdpcmVkIHRvLg0KKyAqIEBwYXJhbSBtaXNvIFRoZSBHUElPIHRoZSBNSVNPIChNYXN0ZXIgSW4gU2xhdmUgT3V0KSBzaWduYWwgaXMgd2lyZWQgdG8uDQorICogQHBhcmFtIGNzIFRoZSBHUElPIHRoZSBDUyAoQ2hpcCBTZWxlY3QpIHNpZ25hbCBpcyB3aXJlZCB0by4NCisgKiBAcGFyYW0gcmFuZ2UgVGhlIHJhbmdlICgrIG9yIC0pIHRoYXQgdGhlIGFjY2VsZXJvbWV0ZXIgd2lsbCBtZWFzdXJlLg0KKyAqLw0KK0FEWEwzNDVfU1BJOjpBRFhMMzQ1X1NQSShEaWdpdGFsT3V0cHV0ICpjbGssIERpZ2l0YWxPdXRwdXQgKm1vc2ksIERpZ2l0YWxJbnB1dCAqbWlzbywNCisJRGlnaXRhbE91dHB1dCAqY3MsIERhdGFGb3JtYXRfUmFuZ2UgcmFuZ2UpDQorCTogbV9jbGsgKE5VTEwpDQorCSwgbV9tb3NpIChOVUxMKQ0KKwksIG1fbWlzbyAoTlVMTCkNCisJLCBtX2NzIChOVUxMKQ0KKwksIG1fc3BpIChOVUxMKQ0KK3sNCisJSW5pdChjbGssIG1vc2ksIG1pc28sIGNzLCByYW5nZSk7DQorfQ0KKw0KKy8qKg0KKyAqIENvbnN0cnVjdG9yLg0KKyAqIA0KKyAqIEBwYXJhbSBtb2R1bGVOdW1iZXIgVGhlIGRpZ2l0YWwgbW9kdWxlIHdpdGggdGhlIHNlbnNvciBhdHRhY2hlZC4NCisgKiBAcGFyYW0gY2xrIFRoZSBHUElPIHRoZSBjbG9jayBzaWduYWwgaXMgd2lyZWQgdG8uDQorICogQHBhcmFtIG1vc2kgVGhlIEdQSU8gdGhlIE1PU0kgKE1hc3RlciBPdXQgU2xhdmUgSW4pIHNpZ25hbCBpcyB3aXJlZCB0by4NCisgKiBAcGFyYW0gbWlzbyBUaGUgR1BJTyB0aGUgTUlTTyAoTWFzdGVyIEluIFNsYXZlIE91dCkgc2lnbmFsIGlzIHdpcmVkIHRvLg0KKyAqIEBwYXJhbSBjcyBUaGUgR1BJTyB0aGUgQ1MgKENoaXAgU2VsZWN0KSBzaWduYWwgaXMgd2lyZWQgdG8uDQorICogQHBhcmFtIHJhbmdlIFRoZSByYW5nZSAoKyBvciAtKSB0aGF0IHRoZSBhY2NlbGVyb21ldGVyIHdpbGwgbWVhc3VyZS4NCisgKi8NCitBRFhMMzQ1X1NQSTo6QURYTDM0NV9TUEkoVUlOVDggbW9kdWxlTnVtYmVyLCBVSU5UMzIgY2xrLCBVSU5UMzIgbW9zaSwgVUlOVDMyIG1pc28sDQorCQlVSU5UMzIgY3MsIEFEWEwzNDVfU1BJOjpEYXRhRm9ybWF0X1JhbmdlIHJhbmdlKQ0KKwk6IG1fY2xrIChOVUxMKQ0KKwksIG1fbW9zaSAoTlVMTCkNCisJLCBtX21pc28gKE5VTEwpDQorCSwgbV9jcyAoTlVMTCkNCisJLCBtX3NwaSAoTlVMTCkNCit7DQorCW1fY2xrID0gbmV3IERpZ2l0YWxPdXRwdXQobW9kdWxlTnVtYmVyLCBjbGspOw0KKwltX21vc2kgPSBuZXcgRGlnaXRhbE91dHB1dChtb2R1bGVOdW1iZXIsIG1vc2kpOw0KKwltX21pc28gPSBuZXcgRGlnaXRhbElucHV0KG1vZHVsZU51bWJlciwgbWlzbyk7DQorCW1fY3MgPSBuZXcgRGlnaXRhbE91dHB1dChtb2R1bGVOdW1iZXIsIGNzKTsNCisJSW5pdChtX2NsaywgbV9tb3NpLCBtX21pc28sIG1fY3MsIHJhbmdlKTsNCit9DQorDQorLyoqDQorICogSW50ZXJuYWwgY29tbW9uIGluaXQgZnVuY3Rpb24uDQorICovDQordm9pZCBBRFhMMzQ1X1NQSTo6SW5pdChEaWdpdGFsT3V0cHV0ICpjbGssIERpZ2l0YWxPdXRwdXQgKm1vc2ksIERpZ2l0YWxJbnB1dCAqbWlzbywNCisJRGlnaXRhbE91dHB1dCAqY3MsIERhdGFGb3JtYXRfUmFuZ2UgcmFuZ2UpDQorew0KKwlpZiAoY2xrICE9IE5VTEwgJiYgbW9zaSAhPSBOVUxMICYmIG1pc28gIT0gTlVMTCAmJiBjcyAhPSBOVUxMKQ0KKwl7DQorCQltX3NwaSA9IG5ldyBTUEkoY2xrLCBtb3NpLCBtaXNvKTsNCisJCW1fc3BpLT5TZXRNU0JGaXJzdCgpOw0KKwkJbV9zcGktPlNldFNhbXBsZURhdGFPblJpc2luZygpOw0KKwkJbV9zcGktPlNldFNsYXZlU2VsZWN0KGNzLCBTUEk6OmtDaGlwU2VsZWN0LCBmYWxzZSk7DQorCQltX3NwaS0+U2V0Q2xvY2tBY3RpdmVMb3coKTsNCisJCS8vIDgtYml0IGFkZHJlc3MgYW5kIDgtYml0IGRhdGENCisJCW1fc3BpLT5TZXRCaXRzUGVyV29yZCgxNik7DQorCQltX3NwaS0+QXBwbHlDb25maWcoKTsNCisJCW1fc3BpLT5DbGVhclJlY2VpdmVkRGF0YSgpOw0KKw0KKwkJLy8gVHVybiBvbiB0aGUgbWVhc3VyZW1lbnRzDQorCQltX3NwaS0+V3JpdGUoKGtQb3dlckN0bFJlZ2lzdGVyIDw8IDgpIHwga1Bvd2VyQ3RsX01lYXN1cmUpOw0KKwkJbV9zcGktPlJlYWQoKTsNCisJCS8vIFNwZWNpZnkgdGhlIGRhdGEgZm9ybWF0IHRvIHJlYWQNCisJCW1fc3BpLT5Xcml0ZSgoa0RhdGFGb3JtYXRSZWdpc3RlciA8PCA4KSB8IGtEYXRhRm9ybWF0X0Z1bGxSZXMgfCAoVUlOVDgpKHJhbmdlICYgMHgwMykpOw0KKwkJbV9zcGktPlJlYWQoKTsNCisNCisJCS8vIDgtYml0IGFkZHJlc3MgYW5kIDE2LWJpdCBkYXRhDQorCQltX3NwaS0+U2V0Qml0c1BlcldvcmQoMjQpOw0KKwkJbV9zcGktPkFwcGx5Q29uZmlnKCk7DQorDQorCQluVXNhZ2VSZXBvcnRpbmc6OnJlcG9ydChuVXNhZ2VSZXBvcnRpbmc6OmtSZXNvdXJjZVR5cGVfQURYTDM0NSwgblVzYWdlUmVwb3J0aW5nOjprQURYTDM0NV9TUEkpOw0KKwl9DQorfQ0KKw0KKy8qKg0KKyAqIERlc3RydWN0b3IuDQorICovDQorQURYTDM0NV9TUEk6On5BRFhMMzQ1X1NQSSgpDQorew0KKwlkZWxldGUgbV9zcGk7DQorCW1fc3BpID0gTlVMTDsNCisJZGVsZXRlIG1fY3M7DQorCW1fY3MgPSBOVUxMOw0KKwlkZWxldGUgbV9taXNvOw0KKwltX21pc28gPSBOVUxMOw0KKwlkZWxldGUgbV9tb3NpOw0KKwltX21vc2kgPSBOVUxMOw0KKwlkZWxldGUgbV9jbGs7DQorCW1fY2xrID0gTlVMTDsNCit9DQorDQorLyoqDQorICogR2V0IHRoZSBhY2NlbGVyYXRpb24gb2Ygb25lIGF4aXMgaW4gR3MuDQorICogDQorICogQHBhcmFtIGF4aXMgVGhlIGF4aXMgdG8gcmVhZCBmcm9tLg0KKyAqIEByZXR1cm4gQWNjZWxlcmF0aW9uIG9mIHRoZSBBRFhMMzQ1IGluIEdzLg0KKyAqLw0KK2RvdWJsZSBBRFhMMzQ1X1NQSTo6R2V0QWNjZWxlcmF0aW9uKEFEWEwzNDVfU1BJOjpBeGVzIGF4aXMpDQorew0KKwlJTlQxNiByYXdBY2NlbCA9IDA7DQorCWlmKG1fc3BpKQ0KKwl7DQorCQltX3NwaS0+V3JpdGUoKChrQWRkcmVzc19SZWFkIHwga0FkZHJlc3NfTXVsdGlCeXRlIHwga0RhdGFSZWdpc3RlcikgKyAoVUlOVDgpYXhpcykgPDwgMTYpOw0KKwkJcmF3QWNjZWwgPSAoVUlOVDE2KW1fc3BpLT5SZWFkKCk7DQorDQorCQkvLyBTZW5zb3IgaXMgbGl0dGxlIGVuZGlhbi4uLiBzd2FwIGJ5dGVzDQorCQlyYXdBY2NlbCA9ICgocmF3QWNjZWwgPj4gOCkgJiAweEZGKSB8IChyYXdBY2NlbCA8PCA4KTsNCisJfQ0KKwlyZXR1cm4gcmF3QWNjZWwgKiBrR3NQZXJMU0I7DQorfQ0KKw0KKy8qKg0KKyAqIEdldCB0aGUgYWNjZWxlcmF0aW9uIG9mIGFsbCBheGVzIGluIEdzLg0KKyAqIA0KKyAqIEByZXR1cm4gQWNjZWxlcmF0aW9uIG1lYXN1cmVkIG9uIGFsbCBheGVzIG9mIHRoZSBBRFhMMzQ1IGluIEdzLg0KKyAqLw0KK0FEWEwzNDVfU1BJOjpBbGxBeGVzIEFEWEwzNDVfU1BJOjpHZXRBY2NlbGVyYXRpb25zKCkNCit7DQorCUFsbEF4ZXMgZGF0YSA9IHswLjB9Ow0KKwlJTlQxNiByYXdEYXRhWzNdOw0KKwlpZiAobV9zcGkpDQorCXsNCisJCVNQSTo6dEZyYW1lTW9kZSBtb2RlOw0KKwkJYm9vbCBhY3RpdmVMb3c7DQorDQorCQkvLyBCYWNrdXAgb3JpZ2luYWwgc2V0dGluZ3MuDQorCQlEaWdpdGFsT3V0cHV0ICpjcyA9IG1fc3BpLT5HZXRTbGF2ZVNlbGVjdCgmbW9kZSwgJmFjdGl2ZUxvdyk7DQorCQlVSU5UMzIgYml0c1BlcldvcmQgPSBtX3NwaS0+R2V0Qml0c1BlcldvcmQoKTsNCisNCisJCS8vIEluaXRpYWxpemUgdGhlIGNoaXAgc2VsZWN0IHRvIGluYWN0aXZlLg0KKwkJY3MtPlNldChhY3RpdmVMb3cpOw0KKw0KKwkJLy8gQ29udHJvbCB0aGUgY2hpcCBzZWxlY3QgbWFudWFsbHkuDQorCQltX3NwaS0+U2V0U2xhdmVTZWxlY3QoTlVMTCk7DQorCQkvLyA4LWJpdCBhZGRyZXNzDQorCQltX3NwaS0+U2V0Qml0c1BlcldvcmQoOCk7DQorCQltX3NwaS0+QXBwbHlDb25maWcoKTsNCisNCisJCS8vIEFzc2VydCBjaGlwIHNlbGVjdC4NCisJCWNzLT5TZXQoIWFjdGl2ZUxvdyk7DQorDQorCQkvLyBTZWxlY3QgdGhlIGRhdGEgYWRkcmVzcy4NCisJCW1fc3BpLT5Xcml0ZShrQWRkcmVzc19SZWFkIHwga0FkZHJlc3NfTXVsdGlCeXRlIHwga0RhdGFSZWdpc3Rlcik7DQorCQltX3NwaS0+UmVhZCgpOw0KKw0KKwkJLy8gMTYtYml0cyBmb3IgZWFjaCBheGlzDQorCQltX3NwaS0+U2V0Qml0c1BlcldvcmQoMTYpOw0KKwkJbV9zcGktPkFwcGx5Q29uZmlnKCk7DQorDQorCQlmb3IgKElOVDMyIGk9MDsgaTwzOyBpKyspDQorCQl7DQorCQkJLy8gU1BJIEludGVyZmFjZSBjYW4ndCByZWFkIGVub3VnaCBkYXRhIGluIGEgc2luZ2xlIHRyYW5zYWN0aW9uIHRvIHJlYWQgYWxsIGF4ZXMgYXQgb25jZS4NCisJCQlyYXdEYXRhW2ldID0gKFVJTlQxNiltX3NwaS0+UmVhZCh0cnVlKTsNCisJCQkvLyBTZW5zb3IgaXMgbGl0dGxlIGVuZGlhbi4uLiBzd2FwIGJ5dGVzDQorCQkJcmF3RGF0YVtpXSA9ICgocmF3RGF0YVtpXSA+PiA4KSAmIDB4RkYpIHwgKHJhd0RhdGFbaV0gPDwgOCk7DQorCQl9DQorDQorCQkvLyBEZWFzc2VydCBjaGlwIHNlbGVjdC4NCisJCWNzLT5TZXQoYWN0aXZlTG93KTsNCisNCisJCS8vIFJlc3RvcmUgb3JpZ2luYWwgc2V0dGluZ3MuDQorCQltX3NwaS0+U2V0U2xhdmVTZWxlY3QoY3MsIG1vZGUsIGFjdGl2ZUxvdyk7DQorCQltX3NwaS0+U2V0Qml0c1BlcldvcmQoYml0c1BlcldvcmQpOw0KKwkJbV9zcGktPkFwcGx5Q29uZmlnKCk7DQorDQorCQlkYXRhLlhBeGlzID0gcmF3RGF0YVswXSAqIGtHc1BlckxTQjsNCisJCWRhdGEuWUF4aXMgPSByYXdEYXRhWzFdICoga0dzUGVyTFNCOw0KKwkJZGF0YS5aQXhpcyA9IHJhd0RhdGFbMl0gKiBrR3NQZXJMU0I7DQorCX0NCisJcmV0dXJuIGRhdGE7DQorfQ0KKw0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0FEWEwzNDVfU1BJLmggYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9BRFhMMzQ1X1NQSS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4OGUyOGYKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9BRFhMMzQ1X1NQSS5oCkBAIC0wLDAgKzEsNjcgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorLyogQ29weXJpZ2h0IChjKSBGSVJTVCAyMDA4LiBBbGwgUmlnaHRzIFJlc2VydmVkLgkJCQkJCQkgICovDQorLyogT3BlbiBTb3VyY2UgU29mdHdhcmUgLSBtYXkgYmUgbW9kaWZpZWQgYW5kIHNoYXJlZCBieSBGUkMgdGVhbXMuIFRoZSBjb2RlICAgKi8NCisvKiBtdXN0IGJlIGFjY29tcGFuaWVkIGJ5IHRoZSBGSVJTVCBCU0QgbGljZW5zZSBmaWxlIGluICQoV0lORF9CQVNFKS9XUElMaWIuICAqLw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorI2lmbmRlZiBfX0FEWEwzNDVfU1BJX2hfXw0KKyNkZWZpbmUgX19BRFhMMzQ1X1NQSV9oX18NCisNCisjaW5jbHVkZSAiU2Vuc29yQmFzZS5oIg0KKw0KK2NsYXNzIERpZ2l0YWxJbnB1dDsNCitjbGFzcyBEaWdpdGFsT3V0cHV0Ow0KK2NsYXNzIFNQSTsNCisNCisvKioNCisgKiBBRFhMMzQ1IEFjY2VsZXJvbWV0ZXIgb24gU1BJLg0KKyAqIA0KKyAqIFRoaXMgY2xhc3MgYWxvd3MgYWNjZXNzIHRvIGFuIEFuYWxvZyBEZXZpY2VzIEFEWEwzNDUgMy1heGlzIGFjY2VsZXJvbWV0ZXIgdmlhIFNQSS4NCisgKiBUaGlzIGNsYXNzIGFzc3VtZXMgdGhlIHNlbnNvciBpcyB3aXJlZCBpbiA0LXdpcmUgU1BJIG1vZGUuDQorICovDQorY2xhc3MgQURYTDM0NV9TUEkgOiBwdWJsaWMgU2Vuc29yQmFzZQ0KK3sNCitwcm90ZWN0ZWQ6DQorCXN0YXRpYyBjb25zdCBVSU5UOCBrUG93ZXJDdGxSZWdpc3RlciA9IDB4MkQ7DQorCXN0YXRpYyBjb25zdCBVSU5UOCBrRGF0YUZvcm1hdFJlZ2lzdGVyID0gMHgzMTsNCisJc3RhdGljIGNvbnN0IFVJTlQ4IGtEYXRhUmVnaXN0ZXIgPSAweDMyOw0KKwlzdGF0aWMgY29uc3QgZG91YmxlIGtHc1BlckxTQiA9IDAuMDAzOTA2MjU7DQorCWVudW0gU1BJQWRkcmVzc0ZpZWxkcyB7a0FkZHJlc3NfUmVhZD0weDgwLCBrQWRkcmVzc19NdWx0aUJ5dGU9MHg0MH07DQorCWVudW0gUG93ZXJDdGxGaWVsZHMge2tQb3dlckN0bF9MaW5rPTB4MjAsIGtQb3dlckN0bF9BdXRvU2xlZXA9MHgxMCwga1Bvd2VyQ3RsX01lYXN1cmU9MHgwOCwga1Bvd2VyQ3RsX1NsZWVwPTB4MDR9Ow0KKwllbnVtIERhdGFGb3JtYXRGaWVsZHMge2tEYXRhRm9ybWF0X1NlbGZUZXN0PTB4ODAsIGtEYXRhRm9ybWF0X1NQST0weDQwLCBrRGF0YUZvcm1hdF9JbnRJbnZlcnQ9MHgyMCwNCisJCWtEYXRhRm9ybWF0X0Z1bGxSZXM9MHgwOCwga0RhdGFGb3JtYXRfSnVzdGlmeT0weDA0fTsNCisNCitwdWJsaWM6DQorCWVudW0gRGF0YUZvcm1hdF9SYW5nZSB7a1JhbmdlXzJHPTB4MDAsIGtSYW5nZV80Rz0weDAxLCBrUmFuZ2VfOEc9MHgwMiwga1JhbmdlXzE2Rz0weDAzfTsNCisJZW51bSBBeGVzIHtrQXhpc19YPTB4MDAsIGtBeGlzX1k9MHgwMiwga0F4aXNfWj0weDA0fTsNCisJc3RydWN0IEFsbEF4ZXMNCisJew0KKwkJZG91YmxlIFhBeGlzOw0KKwkJZG91YmxlIFlBeGlzOw0KKwkJZG91YmxlIFpBeGlzOw0KKwl9Ow0KKw0KK3B1YmxpYzoNCisJQURYTDM0NV9TUEkoRGlnaXRhbE91dHB1dCAmY2xrLCBEaWdpdGFsT3V0cHV0ICZtb3NpLCBEaWdpdGFsSW5wdXQgJm1pc28sDQorCQlEaWdpdGFsT3V0cHV0ICZjcywgRGF0YUZvcm1hdF9SYW5nZSByYW5nZT1rUmFuZ2VfMkcpOw0KKwlBRFhMMzQ1X1NQSShEaWdpdGFsT3V0cHV0ICpjbGssIERpZ2l0YWxPdXRwdXQgKm1vc2ksIERpZ2l0YWxJbnB1dCAqbWlzbywNCisJCURpZ2l0YWxPdXRwdXQgKmNzLCBEYXRhRm9ybWF0X1JhbmdlIHJhbmdlPWtSYW5nZV8yRyk7DQorCUFEWEwzNDVfU1BJKFVJTlQ4IG1vZHVsZU51bWJlciwgVUlOVDMyIGNsaywgVUlOVDMyIG1vc2ksIFVJTlQzMiBtaXNvLCBVSU5UMzIgY3MsDQorCQlEYXRhRm9ybWF0X1JhbmdlIHJhbmdlPWtSYW5nZV8yRyk7DQorCXZpcnR1YWwgfkFEWEwzNDVfU1BJKCk7DQorCXZpcnR1YWwgZG91YmxlIEdldEFjY2VsZXJhdGlvbihBeGVzIGF4aXMpOw0KKwl2aXJ0dWFsIEFsbEF4ZXMgR2V0QWNjZWxlcmF0aW9ucygpOw0KKw0KK3Byb3RlY3RlZDoNCisJdm9pZCBJbml0KERpZ2l0YWxPdXRwdXQgKmNsaywgRGlnaXRhbE91dHB1dCAqbW9zaSwgRGlnaXRhbElucHV0ICptaXNvLA0KKwkJRGlnaXRhbE91dHB1dCAqY3MsIERhdGFGb3JtYXRfUmFuZ2UgcmFuZ2UpOw0KKw0KKwlEaWdpdGFsT3V0cHV0ICptX2NsazsNCisJRGlnaXRhbE91dHB1dCAqbV9tb3NpOw0KKwlEaWdpdGFsSW5wdXQgKm1fbWlzbzsNCisJRGlnaXRhbE91dHB1dCAqbV9jczsNCisJU1BJKiBtX3NwaTsNCit9Ow0KKw0KKyNlbmRpZg0KKw0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0FjY2VsZXJvbWV0ZXIuY3BwIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvQWNjZWxlcm9tZXRlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmEzNjdhOAotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0FjY2VsZXJvbWV0ZXIuY3BwCkBAIC0wLDAgKzEsMTU1IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy8qIENvcHlyaWdodCAoYykgRklSU1QgMjAwOC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4JCQkJCQkJICAqLw0KKy8qIE9wZW4gU291cmNlIFNvZnR3YXJlIC0gbWF5IGJlIG1vZGlmaWVkIGFuZCBzaGFyZWQgYnkgRlJDIHRlYW1zLiBUaGUgY29kZSAgICovDQorLyogbXVzdCBiZSBhY2NvbXBhbmllZCBieSB0aGUgRklSU1QgQlNEIGxpY2Vuc2UgZmlsZSBpbiAkKFdJTkRfQkFTRSkvV1BJTGliLiAgKi8NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKyNpbmNsdWRlICJBY2NlbGVyb21ldGVyLmgiDQorI2luY2x1ZGUgIkFuYWxvZ01vZHVsZS5oIg0KKyNpbmNsdWRlICJOZXR3b3JrQ29tbXVuaWNhdGlvbi9Vc2FnZVJlcG9ydGluZy5oIg0KKyNpbmNsdWRlICJXUElFcnJvcnMuaCINCisjaW5jbHVkZSAiTGl2ZVdpbmRvdy9MaXZlV2luZG93LmgiDQorDQorLyoqDQorICogQ29tbW9uIGZ1bmN0aW9uIGZvciBpbml0aWFsaXppbmcgdGhlIGFjY2VsZXJvbWV0ZXIuDQorICovDQordm9pZCBBY2NlbGVyb21ldGVyOjpJbml0QWNjZWxlcm9tZXRlcigpDQorew0KKwltX3ZvbHRzUGVyRyA9IDEuMDsNCisJbV96ZXJvR1ZvbHRhZ2UgPSAyLjU7DQorCW5Vc2FnZVJlcG9ydGluZzo6cmVwb3J0KG5Vc2FnZVJlcG9ydGluZzo6a1Jlc291cmNlVHlwZV9BY2NlbGVyb21ldGVyLCBtX2FuYWxvZ0NoYW5uZWwtPkdldENoYW5uZWwoKSwgbV9hbmFsb2dDaGFubmVsLT5HZXRNb2R1bGVOdW1iZXIoKSAtIDEpOw0KKwlMaXZlV2luZG93OjpHZXRJbnN0YW5jZSgpLT5BZGRTZW5zb3IoIkFjY2VsZXJvbWV0ZXIiLCBtX2FuYWxvZ0NoYW5uZWwtPkdldE1vZHVsZU51bWJlcigpLCBtX2FuYWxvZ0NoYW5uZWwtPkdldENoYW5uZWwoKSwgdGhpcyk7DQorfQ0KKw0KKy8qKg0KKyAqIENyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiBhbiBhY2NlbGVyb21ldGVyLg0KKyAqIA0KKyAqIFRoZSBhY2NlbGVyb21ldGVyIGlzIGFzc3VtZWQgdG8gYmUgaW4gdGhlIGZpcnN0IGFuYWxvZyBtb2R1bGUgaW4gdGhlIGdpdmVuIGFuYWxvZyBjaGFubmVsLiBUaGUNCisgKiBjb25zdHJ1Y3RvciBhbGxvY2F0ZXMgZGVzaXJlZCBhbmFsb2cgY2hhbm5lbC4NCisgKi8NCitBY2NlbGVyb21ldGVyOjpBY2NlbGVyb21ldGVyKFVJTlQzMiBjaGFubmVsKQ0KK3sNCisJbV9hbmFsb2dDaGFubmVsID0gbmV3IEFuYWxvZ0NoYW5uZWwoY2hhbm5lbCk7DQorCW1fYWxsb2NhdGVkQ2hhbm5lbCA9IHRydWU7DQorCUluaXRBY2NlbGVyb21ldGVyKCk7DQorfQ0KKw0KKy8qKg0KKyAqIENyZWF0ZSBuZXcgaW5zdGFuY2Ugb2YgYWNjZWxlcm9tZXRlci4NCisgKiANCisgKiBNYWtlIGEgbmV3IGluc3RhbmNlIG9mIHRoZSBhY2NlbGVyb21ldGVyIGdpdmVuIGEgbW9kdWxlIGFuZCBjaGFubmVsLiBUaGUgY29uc3RydWN0b3IgYWxsb2NhdGVzDQorICogdGhlIGRlc2lyZWQgYW5hbG9nIGNoYW5uZWwgZnJvbSB0aGUgc3BlY2lmaWVkIG1vZHVsZQ0KKyAqDQorICogQHBhcmFtIG1vZHVsZU51bWJlciBUaGUgYW5hbG9nIG1vZHVsZSAoMSBvciAyKS4NCisgKiBAcGFyYW0gY2hhbm5lbCBUaGUgYW5hbG9nIGNoYW5uZWwgKDEuLjgpDQorICovDQorQWNjZWxlcm9tZXRlcjo6QWNjZWxlcm9tZXRlcihVSU5UOCBtb2R1bGVOdW1iZXIsIFVJTlQzMiBjaGFubmVsKQ0KK3sNCisJbV9hbmFsb2dDaGFubmVsID0gbmV3IEFuYWxvZ0NoYW5uZWwobW9kdWxlTnVtYmVyLCBjaGFubmVsKTsNCisJbV9hbGxvY2F0ZWRDaGFubmVsID0gdHJ1ZTsNCisJSW5pdEFjY2VsZXJvbWV0ZXIoKTsNCit9DQorDQorLyoqDQorICogQ3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIEFjY2VsZXJvbWV0ZXIgZnJvbSBhbiBleGlzdGluZyBBbmFsb2dDaGFubmVsLg0KKyAqIE1ha2UgYSBuZXcgaW5zdGFuY2Ugb2YgYWNjZWxlcm9tZXRlciBnaXZlbiBhbiBBbmFsb2dDaGFubmVsLiBUaGlzIGlzIHBhcnRpY3VsYXJseQ0KKyAqIHVzZWZ1bCBpZiB0aGUgcG9ydCBpcyBnb2luZyB0byBiZSByZWFkIGFzIGFuIGFuYWxvZyBjaGFubmVsIGFzIHdlbGwgYXMgdGhyb3VnaA0KKyAqIHRoZSBBY2NlbGVyb21ldGVyIGNsYXNzLg0KKyAqLw0KK0FjY2VsZXJvbWV0ZXI6OkFjY2VsZXJvbWV0ZXIoQW5hbG9nQ2hhbm5lbCAqY2hhbm5lbCkNCit7DQorCWlmIChjaGFubmVsID09IE5VTEwpDQorCXsNCisJCXdwaV9zZXRXUElFcnJvcihOdWxsUGFyYW1ldGVyKTsNCisJfQ0KKwllbHNlDQorCXsNCisJCW1fYW5hbG9nQ2hhbm5lbCA9IGNoYW5uZWw7DQorCQlJbml0QWNjZWxlcm9tZXRlcigpOw0KKwl9DQorCW1fYWxsb2NhdGVkQ2hhbm5lbCA9IGZhbHNlOw0KK30NCisJDQorLyoqDQorICogRGVsZXRlIHRoZSBhbmFsb2cgY29tcG9uZW50cyB1c2VkIGZvciB0aGUgYWNjZWxlcm9tZXRlci4NCisgKi8NCitBY2NlbGVyb21ldGVyOjp+QWNjZWxlcm9tZXRlcigpDQorew0KKwlpZiAobV9hbGxvY2F0ZWRDaGFubmVsKQ0KKwl7DQorCQlkZWxldGUgbV9hbmFsb2dDaGFubmVsOw0KKwl9DQorfQ0KKw0KKy8qKg0KKyAqIFJldHVybiB0aGUgYWNjZWxlcmF0aW9uIGluIEdzLg0KKyAqIA0KKyAqIFRoZSBhY2NlbGVyYXRpb24gaXMgcmV0dXJuZWQgdW5pdHMgb2YgR3MuDQorICogDQorICogQHJldHVybiBUaGUgY3VycmVudCBhY2NlbGVyYXRpb24gb2YgdGhlIHNlbnNvciBpbiBHcy4NCisgKi8NCitmbG9hdCBBY2NlbGVyb21ldGVyOjpHZXRBY2NlbGVyYXRpb24oKQ0KK3sNCisJcmV0dXJuIChtX2FuYWxvZ0NoYW5uZWwtPkdldEF2ZXJhZ2VWb2x0YWdlKCkgLSBtX3plcm9HVm9sdGFnZSkgLyBtX3ZvbHRzUGVyRzsNCit9DQorDQorLyoqDQorICogU2V0IHRoZSBhY2NlbGVyb21ldGVyIHNlbnNpdGl2aXR5Lg0KKyAqIA0KKyAqIFRoaXMgc2V0cyB0aGUgc2Vuc2l0aXZpdHkgb2YgdGhlIGFjY2VsZXJvbWV0ZXIgdXNlZCBmb3IgY2FsY3VsYXRpbmcgdGhlIGFjY2VsZXJhdGlvbi4NCisgKiBUaGUgc2Vuc2l0aXZpdHkgdmFyeXMgYnkgYWNjZWxlcm9tZXRlciBtb2RlbC4gVGhlcmUgYXJlIGNvbnN0YW50cyBkZWZpbmVkIGZvciB2YXJpb3VzIG1vZGVscy4NCisgKiANCisgKiBAcGFyYW0gc2Vuc2l0aXZpdHkgVGhlIHNlbnNpdGl2aXR5IG9mIGFjY2VsZXJvbWV0ZXIgaW4gVm9sdHMgcGVyIEcuDQorICovDQordm9pZCBBY2NlbGVyb21ldGVyOjpTZXRTZW5zaXRpdml0eShmbG9hdCBzZW5zaXRpdml0eSkNCit7DQorCW1fdm9sdHNQZXJHID0gc2Vuc2l0aXZpdHk7DQorfQ0KKw0KKy8qKg0KKyAqIFNldCB0aGUgdm9sdGFnZSB0aGF0IGNvcnJlc3BvbmRzIHRvIDAgRy4NCisgKiANCisgKiBUaGUgemVybyBHIHZvbHRhZ2UgdmFyeXMgYnkgYWNjZWxlcm9tZXRlciBtb2RlbC4gVGhlcmUgYXJlIGNvbnN0YW50cyBkZWZpbmVkIGZvciB2YXJpb3VzIG1vZGVscy4NCisgKiANCisgKiBAcGFyYW0gemVybyBUaGUgemVybyBHIHZvbHRhZ2UuDQorICovDQordm9pZCBBY2NlbGVyb21ldGVyOjpTZXRaZXJvKGZsb2F0IHplcm8pDQorew0KKwltX3plcm9HVm9sdGFnZSA9IHplcm87DQorfQ0KKw0KKy8qKg0KKyAqIEdldCB0aGUgQWNjZWxlcmF0aW9uIGZvciB0aGUgUElEIFNvdXJjZSBwYXJlbnQuDQorICogDQorICogQHJldHVybiBUaGUgY3VycmVudCBhY2NlbGVyYXRpb24gaW4gR3MuDQorICovIA0KK2RvdWJsZSBBY2NlbGVyb21ldGVyOjpQSURHZXQoKQ0KK3sNCisJcmV0dXJuIEdldEFjY2VsZXJhdGlvbigpOw0KK30NCisNCit2b2lkIEFjY2VsZXJvbWV0ZXI6OlVwZGF0ZVRhYmxlKCkgew0KKwlpZiAobV90YWJsZSAhPSBOVUxMKSB7DQorCQltX3RhYmxlLT5QdXROdW1iZXIoIlZhbHVlIiwgR2V0QWNjZWxlcmF0aW9uKCkpOw0KKwl9DQorfQ0KKw0KK3ZvaWQgQWNjZWxlcm9tZXRlcjo6U3RhcnRMaXZlV2luZG93TW9kZSgpIHsNCit9DQorDQordm9pZCBBY2NlbGVyb21ldGVyOjpTdG9wTGl2ZVdpbmRvd01vZGUoKSB7DQorfQ0KKw0KK3N0ZDo6c3RyaW5nIEFjY2VsZXJvbWV0ZXI6OkdldFNtYXJ0RGFzaGJvYXJkVHlwZSgpIHsNCisJcmV0dXJuICJBY2NlbGVyb21ldGVyIjsNCit9DQorDQordm9pZCBBY2NlbGVyb21ldGVyOjpJbml0VGFibGUoSVRhYmxlICpzdWJUYWJsZSkgew0KKwltX3RhYmxlID0gc3ViVGFibGU7DQorCVVwZGF0ZVRhYmxlKCk7DQorfQ0KKw0KK0lUYWJsZSAqIEFjY2VsZXJvbWV0ZXI6OkdldFRhYmxlKCkgew0KKwlyZXR1cm4gbV90YWJsZTsNCit9DQorDQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvQWNjZWxlcm9tZXRlci5oIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvQWNjZWxlcm9tZXRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjZmNlMWUKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9BY2NlbGVyb21ldGVyLmgKQEAgLTAsMCArMSw1MSBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBDb3B5cmlnaHQgKGMpIEZJUlNUIDIwMDguIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCQkJCQkJCSAgKi8NCisvKiBPcGVuIFNvdXJjZSBTb2Z0d2FyZSAtIG1heSBiZSBtb2RpZmllZCBhbmQgc2hhcmVkIGJ5IEZSQyB0ZWFtcy4gVGhlIGNvZGUgICAqLw0KKy8qIG11c3QgYmUgYWNjb21wYW5pZWQgYnkgdGhlIEZJUlNUIEJTRCBsaWNlbnNlIGZpbGUgaW4gJChXSU5EX0JBU0UpL1dQSUxpYi4gICovDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisjaWZuZGVmIEFDQ0VMRVJPTUVURVJfSF8NCisjZGVmaW5lIEFDQ0VMRVJPTUVURVJfSF8NCisNCisjaW5jbHVkZSAiQW5hbG9nQ2hhbm5lbC5oIg0KKyNpbmNsdWRlICJTZW5zb3JCYXNlLmgiDQorI2luY2x1ZGUgIlBJRFNvdXJjZS5oIg0KKyNpbmNsdWRlICJMaXZlV2luZG93L0xpdmVXaW5kb3dTZW5kYWJsZS5oIg0KKw0KKy8qKiANCisgKiBIYW5kbGUgb3BlcmF0aW9uIG9mIHRoZSBhY2NlbGVyb21ldGVyLg0KKyAqIFRoZSBhY2NlbGVyb21ldGVyIHJlYWRzIGFjY2VsZXJhdGlvbiBkaXJlY3RseSB0aHJvdWdoIHRoZSBzZW5zb3IuIE1hbnkgc2Vuc29ycyBoYXZlDQorICogbXVsdGlwbGUgYXhpcyBhbmQgY2FuIGJlIHRyZWF0ZWQgYXMgbXVsdGlwbGUgZGV2aWNlcy4gRWFjaCBpcyBjYWxpYnJhdGVkIGJ5IGZpbmRpbmcNCisgKiB0aGUgY2VudGVyIHZhbHVlIG92ZXIgYSBwZXJpb2Qgb2YgdGltZS4NCisgKi8NCitjbGFzcyBBY2NlbGVyb21ldGVyIDogcHVibGljIFNlbnNvckJhc2UsIHB1YmxpYyBQSURTb3VyY2UsIHB1YmxpYyBMaXZlV2luZG93U2VuZGFibGUgew0KK3B1YmxpYzoNCisJZXhwbGljaXQgQWNjZWxlcm9tZXRlcihVSU5UMzIgY2hhbm5lbCk7DQorCUFjY2VsZXJvbWV0ZXIoVUlOVDggbW9kdWxlTnVtYmVyLCBVSU5UMzIgY2hhbm5lbCk7DQorCWV4cGxpY2l0IEFjY2VsZXJvbWV0ZXIoQW5hbG9nQ2hhbm5lbCAqY2hhbm5lbCk7DQorCXZpcnR1YWwgfkFjY2VsZXJvbWV0ZXIoKTsNCisNCisJZmxvYXQgR2V0QWNjZWxlcmF0aW9uKCk7DQorCXZvaWQgU2V0U2Vuc2l0aXZpdHkoZmxvYXQgc2Vuc2l0aXZpdHkpOw0KKwl2b2lkIFNldFplcm8oZmxvYXQgemVybyk7DQorCWRvdWJsZSBQSURHZXQoKTsNCisNCisJdm9pZCBVcGRhdGVUYWJsZSgpOw0KKwl2b2lkIFN0YXJ0TGl2ZVdpbmRvd01vZGUoKTsNCisJdm9pZCBTdG9wTGl2ZVdpbmRvd01vZGUoKTsNCisJc3RkOjpzdHJpbmcgR2V0U21hcnREYXNoYm9hcmRUeXBlKCk7DQorCXZvaWQgSW5pdFRhYmxlKElUYWJsZSAqc3ViVGFibGUpOw0KKwlJVGFibGUgKiBHZXRUYWJsZSgpOw0KKw0KK3ByaXZhdGU6DQorCXZvaWQgSW5pdEFjY2VsZXJvbWV0ZXIoKTsNCisNCisJQW5hbG9nQ2hhbm5lbCAqbV9hbmFsb2dDaGFubmVsOw0KKwlmbG9hdCBtX3ZvbHRzUGVyRzsNCisJZmxvYXQgbV96ZXJvR1ZvbHRhZ2U7DQorCWJvb2wgbV9hbGxvY2F0ZWRDaGFubmVsOw0KKwkNCisJSVRhYmxlICptX3RhYmxlOw0KK307DQorDQorI2VuZGlmDQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvQW5hbG9nQ2hhbm5lbC5jcHAgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9BbmFsb2dDaGFubmVsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZWI4Njg4Ci0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvQW5hbG9nQ2hhbm5lbC5jcHAKQEAgLTAsMCArMSw0NjQgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorLyogQ29weXJpZ2h0IChjKSBGSVJTVCAyMDA4LiBBbGwgUmlnaHRzIFJlc2VydmVkLgkJCQkJCQkgICovDQorLyogT3BlbiBTb3VyY2UgU29mdHdhcmUgLSBtYXkgYmUgbW9kaWZpZWQgYW5kIHNoYXJlZCBieSBGUkMgdGVhbXMuIFRoZSBjb2RlICAgKi8NCisvKiBtdXN0IGJlIGFjY29tcGFuaWVkIGJ5IHRoZSBGSVJTVCBCU0QgbGljZW5zZSBmaWxlIGluICQoV0lORF9CQVNFKS9XUElMaWIuICAqLw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorI2luY2x1ZGUgIkFuYWxvZ0NoYW5uZWwuaCINCisjaW5jbHVkZSAiQW5hbG9nTW9kdWxlLmgiDQorI2luY2x1ZGUgIk5ldHdvcmtDb21tdW5pY2F0aW9uL1VzYWdlUmVwb3J0aW5nLmgiDQorI2luY2x1ZGUgIlJlc291cmNlLmgiDQorI2luY2x1ZGUgIldQSUVycm9ycy5oIg0KKyNpbmNsdWRlICJMaXZlV2luZG93L0xpdmVXaW5kb3cuaCINCisNCitzdGF0aWMgUmVzb3VyY2UgKmNoYW5uZWxzID0gTlVMTDsNCisNCitjb25zdCBVSU5UOCBBbmFsb2dDaGFubmVsOjprQWNjdW11bGF0b3JNb2R1bGVOdW1iZXI7DQorY29uc3QgVUlOVDMyIEFuYWxvZ0NoYW5uZWw6OmtBY2N1bXVsYXRvck51bUNoYW5uZWxzOw0KK2NvbnN0IFVJTlQzMiBBbmFsb2dDaGFubmVsOjprQWNjdW11bGF0b3JDaGFubmVsc1tdID0gezEsIDJ9Ow0KKw0KKy8qKg0KKyAqIENvbW1vbiBpbml0aWFsaXphdGlvbi4NCisgKi8NCit2b2lkIEFuYWxvZ0NoYW5uZWw6OkluaXRDaGFubmVsKFVJTlQ4IG1vZHVsZU51bWJlciwgVUlOVDMyIGNoYW5uZWwpDQorew0KKwljaGFyIGJ1Zls2NF07DQorCVJlc291cmNlOjpDcmVhdGVSZXNvdXJjZU9iamVjdCgmY2hhbm5lbHMsIGtBbmFsb2dNb2R1bGVzICoga0FuYWxvZ0NoYW5uZWxzKTsNCisJaWYgKCFDaGVja0FuYWxvZ01vZHVsZShtb2R1bGVOdW1iZXIpKQ0KKwl7DQorCQlzbnByaW50ZihidWYsIDY0LCAiQW5hbG9nIE1vZHVsZSAlZCIsIG1vZHVsZU51bWJlcik7DQorCQl3cGlfc2V0V1BJRXJyb3JXaXRoQ29udGV4dChNb2R1bGVJbmRleE91dE9mUmFuZ2UsIGJ1Zik7DQorCQlyZXR1cm47DQorCX0NCisJaWYgKCFDaGVja0FuYWxvZ0NoYW5uZWwoY2hhbm5lbCkpDQorCXsNCisJCXNucHJpbnRmKGJ1ZiwgNjQsICJBbmFsb2cgQ2hhbm5lbCAlZCIsIGNoYW5uZWwpOw0KKwkJd3BpX3NldFdQSUVycm9yV2l0aENvbnRleHQoQ2hhbm5lbEluZGV4T3V0T2ZSYW5nZSwgYnVmKTsNCisJCXJldHVybjsNCisJfQ0KKw0KKwlzbnByaW50ZihidWYsIDY0LCAiQW5hbG9nIElucHV0ICVkIChNb2R1bGU6ICVkKSIsIGNoYW5uZWwsIG1vZHVsZU51bWJlcik7DQorCWlmIChjaGFubmVscy0+QWxsb2NhdGUoKG1vZHVsZU51bWJlciAtIDEpICoga0FuYWxvZ0NoYW5uZWxzICsgY2hhbm5lbCAtIDEsIGJ1ZikgPT0gfjB1bCkNCisJew0KKwkJQ2xvbmVFcnJvcihjaGFubmVscyk7DQorCQlyZXR1cm47DQorCX0NCisJbV9jaGFubmVsID0gY2hhbm5lbDsNCisJbV9tb2R1bGUgPSBBbmFsb2dNb2R1bGU6OkdldEluc3RhbmNlKG1vZHVsZU51bWJlcik7DQorCWlmIChJc0FjY3VtdWxhdG9yQ2hhbm5lbCgpKQ0KKwl7DQorCQl0UmlvU3RhdHVzQ29kZSBsb2NhbFN0YXR1cyA9IE5pRnBnYV9TdGF0dXNfU3VjY2VzczsNCisJCW1fYWNjdW11bGF0b3IgPSB0QWNjdW11bGF0b3I6OmNyZWF0ZShjaGFubmVsIC0gMSwgJmxvY2FsU3RhdHVzKTsNCisJCXdwaV9zZXRFcnJvcihsb2NhbFN0YXR1cyk7DQorCQltX2FjY3VtdWxhdG9yT2Zmc2V0PTA7DQorCX0NCisJZWxzZQ0KKwl7DQorCQltX2FjY3VtdWxhdG9yID0gTlVMTDsNCisJfQ0KKwlMaXZlV2luZG93OjpHZXRJbnN0YW5jZSgpLT5BZGRBY3R1YXRvcigiQW5hbG9nQ2hhbm5lbCIsY2hhbm5lbCwgR2V0TW9kdWxlTnVtYmVyKCksIHRoaXMpOw0KKwluVXNhZ2VSZXBvcnRpbmc6OnJlcG9ydChuVXNhZ2VSZXBvcnRpbmc6OmtSZXNvdXJjZVR5cGVfQW5hbG9nQ2hhbm5lbCwgY2hhbm5lbCwgR2V0TW9kdWxlTnVtYmVyKCkgLSAxKTsNCit9DQorDQorLyoqDQorICogQ29uc3RydWN0IGFuIGFuYWxvZyBjaGFubmVsIG9uIGEgc3BlY2lmaWVkIG1vZHVsZS4NCisgKiANCisgKiBAcGFyYW0gbW9kdWxlTnVtYmVyIFRoZSBhbmFsb2cgbW9kdWxlICgxIG9yIDIpLg0KKyAqIEBwYXJhbSBjaGFubmVsIFRoZSBjaGFubmVsIG51bWJlciB0byByZXByZXNlbnQuDQorICovDQorQW5hbG9nQ2hhbm5lbDo6QW5hbG9nQ2hhbm5lbChVSU5UOCBtb2R1bGVOdW1iZXIsIFVJTlQzMiBjaGFubmVsKQ0KK3sNCisJSW5pdENoYW5uZWwobW9kdWxlTnVtYmVyLCBjaGFubmVsKTsNCit9DQorDQorLyoqDQorICogQ29uc3RydWN0IGFuIGFuYWxvZyBjaGFubmVsIG9uIHRoZSBkZWZhdWx0IG1vZHVsZS4NCisgKiANCisgKiBAcGFyYW0gY2hhbm5lbCBUaGUgY2hhbm5lbCBudW1iZXIgdG8gcmVwcmVzZW50Lg0KKyAqLw0KK0FuYWxvZ0NoYW5uZWw6OkFuYWxvZ0NoYW5uZWwoVUlOVDMyIGNoYW5uZWwpDQorew0KKwlJbml0Q2hhbm5lbChHZXREZWZhdWx0QW5hbG9nTW9kdWxlKCksIGNoYW5uZWwpOw0KK30NCisNCisvKioNCisgKiBDaGFubmVsIGRlc3RydWN0b3IuDQorICovDQorQW5hbG9nQ2hhbm5lbDo6fkFuYWxvZ0NoYW5uZWwoKQ0KK3sNCisJY2hhbm5lbHMtPkZyZWUoKG1fbW9kdWxlLT5HZXROdW1iZXIoKSAtIDEpICoga0FuYWxvZ0NoYW5uZWxzICsgbV9jaGFubmVsIC0gMSk7DQorfQ0KKw0KKy8qKg0KKyAqIEdldCB0aGUgYW5hbG9nIG1vZHVsZSB0aGF0IHRoaXMgY2hhbm5lbCBpcyBvbi4NCisgKiBAcmV0dXJuIEEgcG9pbnRlciB0byB0aGUgQW5hbG9nTW9kdWxlIHRoYXQgdGhpcyBjaGFubmVsIGlzIG9uLg0KKyAqLw0KK0FuYWxvZ01vZHVsZSAqQW5hbG9nQ2hhbm5lbDo6R2V0TW9kdWxlKCkNCit7DQorCWlmIChTdGF0dXNJc0ZhdGFsKCkpIHJldHVybiBOVUxMOw0KKwlyZXR1cm4gbV9tb2R1bGU7DQorfQ0KKw0KKy8qKg0KKyAqIEdldCBhIHNhbXBsZSBzdHJhaWdodCBmcm9tIHRoaXMgY2hhbm5lbCBvbiB0aGUgbW9kdWxlLg0KKyAqIFRoZSBzYW1wbGUgaXMgYSAxMi1iaXQgdmFsdWUgcmVwcmVzZW50aW5nIHRoZSAtMTBWIHRvIDEwViByYW5nZSBvZiB0aGUgQS9EIGNvbnZlcnRlciBpbiB0aGUgbW9kdWxlLg0KKyAqIFRoZSB1bml0cyBhcmUgaW4gQS9EIGNvbnZlcnRlciBjb2Rlcy4gIFVzZSBHZXRWb2x0YWdlKCkgdG8gZ2V0IHRoZSBhbmFsb2cgdmFsdWUgaW4gY2FsaWJyYXRlZCB1bml0cy4NCisgKiBAcmV0dXJuIEEgc2FtcGxlIHN0cmFpZ2h0IGZyb20gdGhpcyBjaGFubmVsIG9uIHRoZSBtb2R1bGUuDQorICovDQorSU5UMTYgQW5hbG9nQ2hhbm5lbDo6R2V0VmFsdWUoKQ0KK3sNCisJaWYgKFN0YXR1c0lzRmF0YWwoKSkgcmV0dXJuIDA7DQorCXJldHVybiBtX21vZHVsZS0+R2V0VmFsdWUobV9jaGFubmVsKTsNCit9DQorDQorLyoqDQorICogR2V0IGEgc2FtcGxlIGZyb20gdGhlIG91dHB1dCBvZiB0aGUgb3ZlcnNhbXBsZSBhbmQgYXZlcmFnZSBlbmdpbmUgZm9yIHRoaXMgY2hhbm5lbC4NCisgKiBUaGUgc2FtcGxlIGlzIDEyLWJpdCArIHRoZSB2YWx1ZSBjb25maWd1cmVkIGluIFNldE92ZXJzYW1wbGVCaXRzKCkuDQorICogVGhlIHZhbHVlIGNvbmZpZ3VyZWQgaW4gU2V0QXZlcmFnZUJpdHMoKSB3aWxsIGNhdXNlIHRoaXMgdmFsdWUgdG8gYmUgYXZlcmFnZWQgMioqYml0cyBudW1iZXIgb2Ygc2FtcGxlcy4NCisgKiBUaGlzIGlzIG5vdCBhIHNsaWRpbmcgd2luZG93LiAgVGhlIHNhbXBsZSB3aWxsIG5vdCBjaGFuZ2UgdW50aWwgMioqKE92ZXJzYW1wbEJpdHMgKyBBdmVyYWdlQml0cykgc2FtcGxlcw0KKyAqIGhhdmUgYmVlbiBhY3F1aXJlZCBmcm9tIHRoZSBtb2R1bGUgb24gdGhpcyBjaGFubmVsLg0KKyAqIFVzZSBHZXRBdmVyYWdlVm9sdGFnZSgpIHRvIGdldCB0aGUgYW5hbG9nIHZhbHVlIGluIGNhbGlicmF0ZWQgdW5pdHMuDQorICogQHJldHVybiBBIHNhbXBsZSBmcm9tIHRoZSBvdmVyc2FtcGxlIGFuZCBhdmVyYWdlIGVuZ2luZSBmb3IgdGhpcyBjaGFubmVsLg0KKyAqLw0KK0lOVDMyIEFuYWxvZ0NoYW5uZWw6OkdldEF2ZXJhZ2VWYWx1ZSgpDQorew0KKwlpZiAoU3RhdHVzSXNGYXRhbCgpKSByZXR1cm4gMDsNCisJcmV0dXJuIG1fbW9kdWxlLT5HZXRBdmVyYWdlVmFsdWUobV9jaGFubmVsKTsNCit9DQorDQorLyoqDQorICogR2V0IGEgc2NhbGVkIHNhbXBsZSBzdHJhaWdodCBmcm9tIHRoaXMgY2hhbm5lbCBvbiB0aGUgbW9kdWxlLg0KKyAqIFRoZSB2YWx1ZSBpcyBzY2FsZWQgdG8gdW5pdHMgb2YgVm9sdHMgdXNpbmcgdGhlIGNhbGlicmF0ZWQgc2NhbGluZyBkYXRhIGZyb20gR2V0TFNCV2VpZ2h0KCkgYW5kIEdldE9mZnNldCgpLg0KKyAqIEByZXR1cm4gQSBzY2FsZWQgc2FtcGxlIHN0cmFpZ2h0IGZyb20gdGhpcyBjaGFubmVsIG9uIHRoZSBtb2R1bGUuDQorICovDQorZmxvYXQgQW5hbG9nQ2hhbm5lbDo6R2V0Vm9sdGFnZSgpDQorew0KKwlpZiAoU3RhdHVzSXNGYXRhbCgpKSByZXR1cm4gMC4wZjsNCisJcmV0dXJuIG1fbW9kdWxlLT5HZXRWb2x0YWdlKG1fY2hhbm5lbCk7DQorfQ0KKw0KKy8qKg0KKyAqIEdldCBhIHNjYWxlZCBzYW1wbGUgZnJvbSB0aGUgb3V0cHV0IG9mIHRoZSBvdmVyc2FtcGxlIGFuZCBhdmVyYWdlIGVuZ2luZSBmb3IgdGhpcyBjaGFubmVsLg0KKyAqIFRoZSB2YWx1ZSBpcyBzY2FsZWQgdG8gdW5pdHMgb2YgVm9sdHMgdXNpbmcgdGhlIGNhbGlicmF0ZWQgc2NhbGluZyBkYXRhIGZyb20gR2V0TFNCV2VpZ2h0KCkgYW5kIEdldE9mZnNldCgpLg0KKyAqIFVzaW5nIG92ZXJzYW1wbGluZyB3aWxsIGNhdXNlIHRoaXMgdmFsdWUgdG8gYmUgaGlnaGVyIHJlc29sdXRpb24sIGJ1dCBpdCB3aWxsIHVwZGF0ZSBtb3JlIHNsb3dseS4NCisgKiBVc2luZyBhdmVyYWdpbmcgd2lsbCBjYXVzZSB0aGlzIHZhbHVlIHRvIGJlIG1vcmUgc3RhYmxlLCBidXQgaXQgd2lsbCB1cGRhdGUgbW9yZSBzbG93bHkuDQorICogQHJldHVybiBBIHNjYWxlZCBzYW1wbGUgZnJvbSB0aGUgb3V0cHV0IG9mIHRoZSBvdmVyc2FtcGxlIGFuZCBhdmVyYWdlIGVuZ2luZSBmb3IgdGhpcyBjaGFubmVsLg0KKyAqLw0KK2Zsb2F0IEFuYWxvZ0NoYW5uZWw6OkdldEF2ZXJhZ2VWb2x0YWdlKCkNCit7DQorCWlmIChTdGF0dXNJc0ZhdGFsKCkpIHJldHVybiAwLjBmOw0KKwlyZXR1cm4gbV9tb2R1bGUtPkdldEF2ZXJhZ2VWb2x0YWdlKG1fY2hhbm5lbCk7DQorfQ0KKw0KKy8qKg0KKyAqIEdldCB0aGUgZmFjdG9yeSBzY2FsaW5nIGxlYXN0IHNpZ25pZmljYW50IGJpdCB3ZWlnaHQgY29uc3RhbnQuDQorICogVGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdCB3ZWlnaHQgY29uc3RhbnQgZm9yIHRoZSBjaGFubmVsIHRoYXQgd2FzIGNhbGlicmF0ZWQgaW4NCisgKiBtYW51ZmFjdHVyaW5nIGFuZCBzdG9yZWQgaW4gYW4gZWVwcm9tIGluIHRoZSBtb2R1bGUuDQorICogDQorICogVm9sdHMgPSAoKExTQl9XZWlnaHQgKiAxZS05KSAqIHJhdykgLSAoT2Zmc2V0ICogMWUtOSkNCisgKiANCisgKiBAcmV0dXJuIExlYXN0IHNpZ25pZmljYW50IGJpdCB3ZWlnaHQuDQorICovDQorVUlOVDMyIEFuYWxvZ0NoYW5uZWw6OkdldExTQldlaWdodCgpDQorew0KKwlpZiAoU3RhdHVzSXNGYXRhbCgpKSByZXR1cm4gMDsNCisJcmV0dXJuIG1fbW9kdWxlLT5HZXRMU0JXZWlnaHQobV9jaGFubmVsKTsNCit9DQorDQorLyoqDQorICogR2V0IHRoZSBmYWN0b3J5IHNjYWxpbmcgb2Zmc2V0IGNvbnN0YW50Lg0KKyAqIFRoZSBvZmZzZXQgY29uc3RhbnQgZm9yIHRoZSBjaGFubmVsIHRoYXQgd2FzIGNhbGlicmF0ZWQgaW4gbWFudWZhY3R1cmluZyBhbmQgc3RvcmVkDQorICogaW4gYW4gZWVwcm9tIGluIHRoZSBtb2R1bGUuDQorICogDQorICogVm9sdHMgPSAoKExTQl9XZWlnaHQgKiAxZS05KSAqIHJhdykgLSAoT2Zmc2V0ICogMWUtOSkNCisgKiANCisgKiBAcmV0dXJuIE9mZnNldCBjb25zdGFudC4NCisgKi8NCitJTlQzMiBBbmFsb2dDaGFubmVsOjpHZXRPZmZzZXQoKQ0KK3sNCisJaWYgKFN0YXR1c0lzRmF0YWwoKSkgcmV0dXJuIDA7DQorCXJldHVybiBtX21vZHVsZS0+R2V0T2Zmc2V0KG1fY2hhbm5lbCk7DQorfQ0KKw0KKy8qKg0KKyAqIEdldCB0aGUgY2hhbm5lbCBudW1iZXIuDQorICogQHJldHVybiBUaGUgY2hhbm5lbCBudW1iZXIuDQorICovDQorVUlOVDMyIEFuYWxvZ0NoYW5uZWw6OkdldENoYW5uZWwoKQ0KK3sNCisJaWYgKFN0YXR1c0lzRmF0YWwoKSkgcmV0dXJuIDA7DQorCXJldHVybiBtX2NoYW5uZWw7DQorfQ0KKw0KKy8qKg0KKyAqIEdldCB0aGUgbW9kdWxlIG51bWJlci4NCisgKiBAcmV0dXJuIFRoZSBtb2R1bGUgbnVtYmVyLg0KKyAqLw0KK1VJTlQ4IEFuYWxvZ0NoYW5uZWw6OkdldE1vZHVsZU51bWJlcigpDQorew0KKwlpZiAoU3RhdHVzSXNGYXRhbCgpKSByZXR1cm4gMDsNCisJcmV0dXJuIG1fbW9kdWxlLT5HZXROdW1iZXIoKTsNCit9DQorDQorLyoqDQorICogU2V0IHRoZSBudW1iZXIgb2YgYXZlcmFnaW5nIGJpdHMuDQorICogVGhpcyBzZXRzIHRoZSBudW1iZXIgb2YgYXZlcmFnaW5nIGJpdHMuIFRoZSBhY3R1YWwgbnVtYmVyIG9mIGF2ZXJhZ2VkIHNhbXBsZXMgaXMgMioqYml0cy4NCisgKiBVc2UgYXZlcmFnaW5nIHRvIGltcHJvdmUgdGhlIHN0YWJpbGl0eSBvZiB5b3VyIG1lYXN1cmVtZW50IGF0IHRoZSBleHBlbnNlIG9mIHNhbXBsaW5nIHJhdGUuDQorICogVGhlIGF2ZXJhZ2luZyBpcyBkb25lIGF1dG9tYXRpY2FsbHkgaW4gdGhlIEZQR0EuDQorICogDQorICogQHBhcmFtIGJpdHMgTnVtYmVyIG9mIGJpdHMgb2YgYXZlcmFnaW5nLg0KKyAqLw0KK3ZvaWQgQW5hbG9nQ2hhbm5lbDo6U2V0QXZlcmFnZUJpdHMoVUlOVDMyIGJpdHMpDQorew0KKwlpZiAoU3RhdHVzSXNGYXRhbCgpKSByZXR1cm47DQorCW1fbW9kdWxlLT5TZXRBdmVyYWdlQml0cyhtX2NoYW5uZWwsIGJpdHMpOw0KK30NCisNCisvKioNCisgKiBHZXQgdGhlIG51bWJlciBvZiBhdmVyYWdpbmcgYml0cyBwcmV2aW91c2x5IGNvbmZpZ3VyZWQuDQorICogVGhpcyBnZXRzIHRoZSBudW1iZXIgb2YgYXZlcmFnaW5nIGJpdHMgZnJvbSB0aGUgRlBHQS4gVGhlIGFjdHVhbCBudW1iZXIgb2YgYXZlcmFnZWQgc2FtcGxlcyBpcyAyKipiaXRzLg0KKyAqIFRoZSBhdmVyYWdpbmcgaXMgZG9uZSBhdXRvbWF0aWNhbGx5IGluIHRoZSBGUEdBLg0KKyAqIA0KKyAqIEByZXR1cm4gTnVtYmVyIG9mIGJpdHMgb2YgYXZlcmFnaW5nIHByZXZpb3VzbHkgY29uZmlndXJlZC4NCisgKi8NCitVSU5UMzIgQW5hbG9nQ2hhbm5lbDo6R2V0QXZlcmFnZUJpdHMoKQ0KK3sNCisJaWYgKFN0YXR1c0lzRmF0YWwoKSkgcmV0dXJuIDA7DQorCXJldHVybiBtX21vZHVsZS0+R2V0QXZlcmFnZUJpdHMobV9jaGFubmVsKTsNCit9DQorDQorLyoqDQorICogU2V0IHRoZSBudW1iZXIgb2Ygb3ZlcnNhbXBsZSBiaXRzLg0KKyAqIFRoaXMgc2V0cyB0aGUgbnVtYmVyIG9mIG92ZXJzYW1wbGUgYml0cy4gVGhlIGFjdHVhbCBudW1iZXIgb2Ygb3ZlcnNhbXBsZWQgdmFsdWVzIGlzIDIqKmJpdHMuDQorICogVXNlIG92ZXJzYW1wbGluZyB0byBpbXByb3ZlIHRoZSByZXNvbHV0aW9uIG9mIHlvdXIgbWVhc3VyZW1lbnRzIGF0IHRoZSBleHBlbnNlIG9mIHNhbXBsaW5nIHJhdGUuDQorICogVGhlIG92ZXJzYW1wbGluZyBpcyBkb25lIGF1dG9tYXRpY2FsbHkgaW4gdGhlIEZQR0EuDQorICogDQorICogQHBhcmFtIGJpdHMgTnVtYmVyIG9mIGJpdHMgb2Ygb3ZlcnNhbXBsaW5nLg0KKyAqLw0KK3ZvaWQgQW5hbG9nQ2hhbm5lbDo6U2V0T3ZlcnNhbXBsZUJpdHMoVUlOVDMyIGJpdHMpDQorew0KKwlpZiAoU3RhdHVzSXNGYXRhbCgpKSByZXR1cm47DQorCW1fbW9kdWxlLT5TZXRPdmVyc2FtcGxlQml0cyhtX2NoYW5uZWwsIGJpdHMpOw0KK30NCisNCisvKioNCisgKiBHZXQgdGhlIG51bWJlciBvZiBvdmVyc2FtcGxlIGJpdHMgcHJldmlvdXNseSBjb25maWd1cmVkLg0KKyAqIFRoaXMgZ2V0cyB0aGUgbnVtYmVyIG9mIG92ZXJzYW1wbGUgYml0cyBmcm9tIHRoZSBGUEdBLiBUaGUgYWN0dWFsIG51bWJlciBvZiBvdmVyc2FtcGxlZCB2YWx1ZXMgaXMNCisgKiAyKipiaXRzLiBUaGUgb3ZlcnNhbXBsaW5nIGlzIGRvbmUgYXV0b21hdGljYWxseSBpbiB0aGUgRlBHQS4NCisgKiANCisgKiBAcmV0dXJuIE51bWJlciBvZiBiaXRzIG9mIG92ZXJzYW1wbGluZyBwcmV2aW91c2x5IGNvbmZpZ3VyZWQuDQorICovDQorVUlOVDMyIEFuYWxvZ0NoYW5uZWw6OkdldE92ZXJzYW1wbGVCaXRzKCkNCit7DQorCWlmIChTdGF0dXNJc0ZhdGFsKCkpIHJldHVybiAwOw0KKwlyZXR1cm4gbV9tb2R1bGUtPkdldE92ZXJzYW1wbGVCaXRzKG1fY2hhbm5lbCk7DQorfQ0KKw0KKy8qKg0KKyAqIElzIHRoZSBjaGFubmVsIGF0dGFjaGVkIHRvIGFuIGFjY3VtdWxhdG9yLg0KKyAqIA0KKyAqIEByZXR1cm4gVGhlIGFuYWxvZyBjaGFubmVsIGlzIGF0dGFjaGVkIHRvIGFuIGFjY3VtdWxhdG9yLg0KKyAqLw0KK2Jvb2wgQW5hbG9nQ2hhbm5lbDo6SXNBY2N1bXVsYXRvckNoYW5uZWwoKQ0KK3sNCisJaWYgKFN0YXR1c0lzRmF0YWwoKSkgcmV0dXJuIGZhbHNlOw0KKwlpZihtX21vZHVsZS0+R2V0TnVtYmVyKCkgIT0ga0FjY3VtdWxhdG9yTW9kdWxlTnVtYmVyKSByZXR1cm4gZmFsc2U7DQorCWZvciAoVUlOVDMyIGk9MDsgaTxrQWNjdW11bGF0b3JOdW1DaGFubmVsczsgaSsrKQ0KKwl7DQorCQlpZiAobV9jaGFubmVsID09IGtBY2N1bXVsYXRvckNoYW5uZWxzW2ldKSByZXR1cm4gdHJ1ZTsNCisJfQ0KKwlyZXR1cm4gZmFsc2U7DQorfQ0KKw0KKy8qKg0KKyAqIEluaXRpYWxpemUgdGhlIGFjY3VtdWxhdG9yLg0KKyAqLw0KK3ZvaWQgQW5hbG9nQ2hhbm5lbDo6SW5pdEFjY3VtdWxhdG9yKCkNCit7DQorCWlmIChTdGF0dXNJc0ZhdGFsKCkpIHJldHVybjsNCisJbV9hY2N1bXVsYXRvck9mZnNldCA9IDA7DQorCVNldEFjY3VtdWxhdG9yQ2VudGVyKDApOw0KKwlSZXNldEFjY3VtdWxhdG9yKCk7DQorfQ0KKw0KKw0KKy8qKg0KKyAqIFNldCBhbiBpbml0YWwgdmFsdWUgZm9yIHRoZSBhY2N1bXVsYXRvci4NCisgKiANCisgKiBUaGlzIHdpbGwgYmUgYWRkZWQgdG8gYWxsIHZhbHVlcyByZXR1cm5lZCB0byB0aGUgdXNlci4NCisgKiBAcGFyYW0gaW5pdGlhbFZhbHVlIFRoZSB2YWx1ZSB0aGF0IHRoZSBhY2N1bXVsYXRvciBzaG91bGQgc3RhcnQgZnJvbSB3aGVuIHJlc2V0Lg0KKyAqLw0KK3ZvaWQgQW5hbG9nQ2hhbm5lbDo6U2V0QWNjdW11bGF0b3JJbml0aWFsVmFsdWUoSU5UNjQgaW5pdGlhbFZhbHVlKQ0KK3sNCisJaWYgKFN0YXR1c0lzRmF0YWwoKSkgcmV0dXJuOw0KKwltX2FjY3VtdWxhdG9yT2Zmc2V0ID0gaW5pdGlhbFZhbHVlOw0KK30NCisNCisvKioNCisgKiBSZXNldHMgdGhlIGFjY3VtdWxhdG9yIHRvIHRoZSBpbml0aWFsIHZhbHVlLg0KKyAqLw0KK3ZvaWQgQW5hbG9nQ2hhbm5lbDo6UmVzZXRBY2N1bXVsYXRvcigpDQorew0KKwlpZiAoU3RhdHVzSXNGYXRhbCgpKSByZXR1cm47DQorCWlmIChtX2FjY3VtdWxhdG9yID09IE5VTEwpDQorCXsNCisJCXdwaV9zZXRXUElFcnJvcihOdWxsUGFyYW1ldGVyKTsNCisJCXJldHVybjsNCisJfQ0KKwl0UmlvU3RhdHVzQ29kZSBsb2NhbFN0YXR1cyA9IE5pRnBnYV9TdGF0dXNfU3VjY2VzczsNCisJbV9hY2N1bXVsYXRvci0+c3Ryb2JlUmVzZXQoJmxvY2FsU3RhdHVzKTsNCisJd3BpX3NldEVycm9yKGxvY2FsU3RhdHVzKTsNCit9DQorDQorLyoqDQorICogU2V0IHRoZSBjZW50ZXIgdmFsdWUgb2YgdGhlIGFjY3VtdWxhdG9yLg0KKyAqIA0KKyAqIFRoZSBjZW50ZXIgdmFsdWUgaXMgc3VidHJhY3RlZCBmcm9tIGVhY2ggQS9EIHZhbHVlIGJlZm9yZSBpdCBpcyBhZGRlZCB0byB0aGUgYWNjdW11bGF0b3IuIFRoaXMNCisgKiBpcyB1c2VkIGZvciB0aGUgY2VudGVyIHZhbHVlIG9mIGRldmljZXMgbGlrZSBneXJvcyBhbmQgYWNjZWxlcm9tZXRlcnMgdG8gbWFrZSBpbnRlZ3JhdGlvbiB3b3JrDQorICogYW5kIHRvIHRha2UgdGhlIGRldmljZSBvZmZzZXQgaW50byBhY2NvdW50IHdoZW4gaW50ZWdyYXRpbmcuDQorICogDQorICogVGhpcyBjZW50ZXIgdmFsdWUgaXMgYmFzZWQgb24gdGhlIG91dHB1dCBvZiB0aGUgb3ZlcnNhbXBsZWQgYW5kIGF2ZXJhZ2VkIHNvdXJjZSBmcm9tIGNoYW5uZWwgMS4NCisgKiBCZWNhdXNlIG9mIHRoaXMsIGFueSBub24temVybyBvdmVyc2FtcGxlIGJpdHMgd2lsbCBhZmZlY3QgdGhlIHNpemUgb2YgdGhlIHZhbHVlIGZvciB0aGlzIGZpZWxkLg0KKyAqLw0KK3ZvaWQgQW5hbG9nQ2hhbm5lbDo6U2V0QWNjdW11bGF0b3JDZW50ZXIoSU5UMzIgY2VudGVyKQ0KK3sNCisJaWYgKFN0YXR1c0lzRmF0YWwoKSkgcmV0dXJuOw0KKwlpZiAobV9hY2N1bXVsYXRvciA9PSBOVUxMKQ0KKwl7DQorCQl3cGlfc2V0V1BJRXJyb3IoTnVsbFBhcmFtZXRlcik7DQorCQlyZXR1cm47DQorCX0NCisJdFJpb1N0YXR1c0NvZGUgbG9jYWxTdGF0dXMgPSBOaUZwZ2FfU3RhdHVzX1N1Y2Nlc3M7DQorCW1fYWNjdW11bGF0b3ItPndyaXRlQ2VudGVyKGNlbnRlciwgJmxvY2FsU3RhdHVzKTsNCisJd3BpX3NldEVycm9yKGxvY2FsU3RhdHVzKTsNCit9DQorDQorLyoqDQorICogU2V0IHRoZSBhY2N1bXVsYXRvcidzIGRlYWRiYW5kLg0KKyAqLw0KK3ZvaWQgQW5hbG9nQ2hhbm5lbDo6U2V0QWNjdW11bGF0b3JEZWFkYmFuZChJTlQzMiBkZWFkYmFuZCkNCit7DQorCWlmIChTdGF0dXNJc0ZhdGFsKCkpIHJldHVybjsNCisJaWYgKG1fYWNjdW11bGF0b3IgPT0gTlVMTCkNCisJew0KKwkJd3BpX3NldFdQSUVycm9yKE51bGxQYXJhbWV0ZXIpOw0KKwkJcmV0dXJuOw0KKwl9DQorCXRSaW9TdGF0dXNDb2RlIGxvY2FsU3RhdHVzID0gTmlGcGdhX1N0YXR1c19TdWNjZXNzOw0KKwltX2FjY3VtdWxhdG9yLT53cml0ZURlYWRiYW5kKGRlYWRiYW5kLCAmbG9jYWxTdGF0dXMpOw0KKwl3cGlfc2V0RXJyb3IobG9jYWxTdGF0dXMpOw0KK30NCisNCisvKioNCisgKiBSZWFkIHRoZSBhY2N1bXVsYXRlZCB2YWx1ZS4NCisgKiANCisgKiBSZWFkIHRoZSB2YWx1ZSB0aGF0IGhhcyBiZWVuIGFjY3VtdWxhdGluZyBvbiBjaGFubmVsIDEuDQorICogVGhlIGFjY3VtdWxhdG9yIGlzIGF0dGFjaGVkIGFmdGVyIHRoZSBvdmVyc2FtcGxlIGFuZCBhdmVyYWdlIGVuZ2luZS4NCisgKiANCisgKiBAcmV0dXJuIFRoZSA2NC1iaXQgdmFsdWUgYWNjdW11bGF0ZWQgc2luY2UgdGhlIGxhc3QgUmVzZXQoKS4NCisgKi8NCitJTlQ2NCBBbmFsb2dDaGFubmVsOjpHZXRBY2N1bXVsYXRvclZhbHVlKCkNCit7DQorCWlmIChTdGF0dXNJc0ZhdGFsKCkpIHJldHVybiAwOw0KKwlpZiAobV9hY2N1bXVsYXRvciA9PSBOVUxMKQ0KKwl7DQorCQl3cGlfc2V0V1BJRXJyb3IoTnVsbFBhcmFtZXRlcik7DQorCQlyZXR1cm4gMDsNCisJfQ0KKwl0UmlvU3RhdHVzQ29kZSBsb2NhbFN0YXR1cyA9IE5pRnBnYV9TdGF0dXNfU3VjY2VzczsNCisJSU5UNjQgdmFsdWUgPSBtX2FjY3VtdWxhdG9yLT5yZWFkT3V0cHV0X1ZhbHVlKCZsb2NhbFN0YXR1cykgKyBtX2FjY3VtdWxhdG9yT2Zmc2V0Ow0KKwl3cGlfc2V0RXJyb3IobG9jYWxTdGF0dXMpOw0KKwlyZXR1cm4gdmFsdWU7DQorfQ0KKw0KKy8qKg0KKyAqIFJlYWQgdGhlIG51bWJlciBvZiBhY2N1bXVsYXRlZCB2YWx1ZXMuDQorICogDQorICogUmVhZCB0aGUgY291bnQgb2YgdGhlIGFjY3VtdWxhdGVkIHZhbHVlcyBzaW5jZSB0aGUgYWNjdW11bGF0b3Igd2FzIGxhc3QgUmVzZXQoKS4NCisgKiANCisgKiBAcmV0dXJuIFRoZSBudW1iZXIgb2YgdGltZXMgc2FtcGxlcyBmcm9tIHRoZSBjaGFubmVsIHdlcmUgYWNjdW11bGF0ZWQuDQorICovDQorVUlOVDMyIEFuYWxvZ0NoYW5uZWw6OkdldEFjY3VtdWxhdG9yQ291bnQoKQ0KK3sNCisJaWYgKFN0YXR1c0lzRmF0YWwoKSkgcmV0dXJuIDA7DQorCWlmIChtX2FjY3VtdWxhdG9yID09IE5VTEwpDQorCXsNCisJCXdwaV9zZXRXUElFcnJvcihOdWxsUGFyYW1ldGVyKTsNCisJCXJldHVybiAwOw0KKwl9DQorCXRSaW9TdGF0dXNDb2RlIGxvY2FsU3RhdHVzID0gTmlGcGdhX1N0YXR1c19TdWNjZXNzOw0KKwlVSU5UMzIgY291bnQgPSBtX2FjY3VtdWxhdG9yLT5yZWFkT3V0cHV0X0NvdW50KCZsb2NhbFN0YXR1cyk7DQorCXdwaV9zZXRFcnJvcihsb2NhbFN0YXR1cyk7DQorCXJldHVybiBjb3VudDsNCit9DQorDQorDQorLyoqDQorICogUmVhZCB0aGUgYWNjdW11bGF0ZWQgdmFsdWUgYW5kIHRoZSBudW1iZXIgb2YgYWNjdW11bGF0ZWQgdmFsdWVzIGF0b21pY2FsbHkuDQorICogDQorICogVGhpcyBmdW5jdGlvbiByZWFkcyB0aGUgdmFsdWUgYW5kIGNvdW50IGZyb20gdGhlIEZQR0EgYXRvbWljYWxseS4NCisgKiBUaGlzIGNhbiBiZSB1c2VkIGZvciBhdmVyYWdpbmcuDQorICogDQorICogQHBhcmFtIHZhbHVlIFBvaW50ZXIgdG8gdGhlIDY0LWJpdCBhY2N1bXVsYXRlZCBvdXRwdXQuDQorICogQHBhcmFtIGNvdW50IFBvaW50ZXIgdG8gdGhlIG51bWJlciBvZiBhY2N1bXVsYXRpb24gY3ljbGVzLg0KKyAqLw0KK3ZvaWQgQW5hbG9nQ2hhbm5lbDo6R2V0QWNjdW11bGF0b3JPdXRwdXQoSU5UNjQgKnZhbHVlLCBVSU5UMzIgKmNvdW50KQ0KK3sNCisJaWYgKFN0YXR1c0lzRmF0YWwoKSkgcmV0dXJuOw0KKwlpZiAobV9hY2N1bXVsYXRvciA9PSBOVUxMKQ0KKwl7DQorCQl3cGlfc2V0V1BJRXJyb3IoTnVsbFBhcmFtZXRlcik7DQorCQlyZXR1cm47DQorCX0NCisJaWYgKHZhbHVlID09IE5VTEwgfHwgY291bnQgPT0gTlVMTCkNCisJew0KKwkJd3BpX3NldFdQSUVycm9yKE51bGxQYXJhbWV0ZXIpOw0KKwkJcmV0dXJuOw0KKwl9DQorDQorCXRSaW9TdGF0dXNDb2RlIGxvY2FsU3RhdHVzID0gTmlGcGdhX1N0YXR1c19TdWNjZXNzOw0KKwl0QWNjdW11bGF0b3I6OnRPdXRwdXQgb3V0cHV0ID0gbV9hY2N1bXVsYXRvci0+cmVhZE91dHB1dCgmbG9jYWxTdGF0dXMpOw0KKwkqdmFsdWUgPSBvdXRwdXQuVmFsdWUgKyBtX2FjY3VtdWxhdG9yT2Zmc2V0Ow0KKwkqY291bnQgPSBvdXRwdXQuQ291bnQ7DQorCXdwaV9zZXRFcnJvcihsb2NhbFN0YXR1cyk7DQorfQ0KKw0KKy8qKg0KKyAqIEdldCB0aGUgQXZlcmFnZSB2b2x0YWdlIGZvciB0aGUgUElEIFNvdXJjZSBiYXNlIG9iamVjdC4NCisgKiANCisgKiBAcmV0dXJuIFRoZSBhdmVyYWdlIHZvbHRhZ2UuDQorICovDQorZG91YmxlIEFuYWxvZ0NoYW5uZWw6OlBJREdldCgpIA0KK3sNCisJaWYgKFN0YXR1c0lzRmF0YWwoKSkgcmV0dXJuIDAuMDsNCisJcmV0dXJuIEdldEF2ZXJhZ2VWYWx1ZSgpOw0KK30NCisNCit2b2lkIEFuYWxvZ0NoYW5uZWw6OlVwZGF0ZVRhYmxlKCkgew0KKwlpZiAobV90YWJsZSAhPSBOVUxMKSB7DQorCQltX3RhYmxlLT5QdXROdW1iZXIoIlZhbHVlIiwgR2V0QXZlcmFnZVZvbHRhZ2UoKSk7DQorCX0NCit9DQorDQordm9pZCBBbmFsb2dDaGFubmVsOjpTdGFydExpdmVXaW5kb3dNb2RlKCkgew0KKwkNCit9DQorDQordm9pZCBBbmFsb2dDaGFubmVsOjpTdG9wTGl2ZVdpbmRvd01vZGUoKSB7DQorCQ0KK30NCisNCitzdGQ6OnN0cmluZyBBbmFsb2dDaGFubmVsOjpHZXRTbWFydERhc2hib2FyZFR5cGUoKSB7DQorCXJldHVybiAiQW5hbG9nIElucHV0IjsNCit9DQorDQordm9pZCBBbmFsb2dDaGFubmVsOjpJbml0VGFibGUoSVRhYmxlICpzdWJUYWJsZSkgew0KKwltX3RhYmxlID0gc3ViVGFibGU7DQorCVVwZGF0ZVRhYmxlKCk7DQorfQ0KKw0KK0lUYWJsZSAqIEFuYWxvZ0NoYW5uZWw6OkdldFRhYmxlKCkgew0KKwlyZXR1cm4gbV90YWJsZTsNCit9DQorDQorDQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvQW5hbG9nQ2hhbm5lbC5oIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvQW5hbG9nQ2hhbm5lbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0NjMxNWUKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9BbmFsb2dDaGFubmVsLmgKQEAgLTAsMCArMSw4OCBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBDb3B5cmlnaHQgKGMpIEZJUlNUIDIwMDguIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCQkJCQkJCSAgKi8NCisvKiBPcGVuIFNvdXJjZSBTb2Z0d2FyZSAtIG1heSBiZSBtb2RpZmllZCBhbmQgc2hhcmVkIGJ5IEZSQyB0ZWFtcy4gVGhlIGNvZGUgICAqLw0KKy8qIG11c3QgYmUgYWNjb21wYW5pZWQgYnkgdGhlIEZJUlNUIEJTRCBsaWNlbnNlIGZpbGUgaW4gJChXSU5EX0JBU0UpL1dQSUxpYi4gICovDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisjaWZuZGVmIEFOQUxPR19DSEFOTkVMX0hfDQorI2RlZmluZSBBTkFMT0dfQ0hBTk5FTF9IXw0KKw0KKyNpbmNsdWRlICJDaGlwT2JqZWN0LmgiDQorI2luY2x1ZGUgIlNlbnNvckJhc2UuaCINCisjaW5jbHVkZSAiUElEU291cmNlLmgiDQorI2luY2x1ZGUgIkxpdmVXaW5kb3cvTGl2ZVdpbmRvd1NlbmRhYmxlLmgiDQorDQorY2xhc3MgQW5hbG9nTW9kdWxlOw0KKw0KKy8qKg0KKyAqIEFuYWxvZyBjaGFubmVsIGNsYXNzLg0KKyAqIA0KKyAqIEVhY2ggYW5hbG9nIGNoYW5uZWwgaXMgcmVhZCBmcm9tIGhhcmR3YXJlIGFzIGEgMTItYml0IG51bWJlciByZXByZXNlbnRpbmcgLTEwViB0byAxMFYuDQorICogDQorICogQ29ubmVjdGVkIHRvIGVhY2ggYW5hbG9nIGNoYW5uZWwgaXMgYW4gYXZlcmFnaW5nIGFuZCBvdmVyc2FtcGxpbmcgZW5naW5lLiAgVGhpcyBlbmdpbmUgYWNjdW11bGF0ZXMNCisgKiB0aGUgc3BlY2lmaWVkICggYnkgU2V0QXZlcmFnZUJpdHMoKSBhbmQgU2V0T3ZlcnNhbXBsZUJpdHMoKSApIG51bWJlciBvZiBzYW1wbGVzIGJlZm9yZSByZXR1cm5pbmcgYSBuZXcNCisgKiB2YWx1ZS4gIFRoaXMgaXMgbm90IGEgc2xpZGluZyB3aW5kb3cgYXZlcmFnZS4gIFRoZSBvbmx5IGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgb3ZlcnNhbXBsZWQgc2FtcGxlcyBhbmQNCisgKiB0aGUgYXZlcmFnZWQgc2FtcGxlcyBpcyB0aGF0IHRoZSBvdmVyc2FtcGxlZCBzYW1wbGVzIGFyZSBzaW1wbHkgYWNjdW11bGF0ZWQgZWZmZWN0aXZlbHkgaW5jcmVhc2luZyB0aGUNCisgKiByZXNvbHV0aW9uLCB3aGlsZSB0aGUgYXZlcmFnZWQgc2FtcGxlcyBhcmUgZGl2aWRlZCBieSB0aGUgbnVtYmVyIG9mIHNhbXBsZXMgdG8gcmV0YWluIHRoZSByZXNvbHV0aW9uLA0KKyAqIGJ1dCBnZXQgbW9yZSBzdGFibGUgdmFsdWVzLg0KKyAqLw0KK2NsYXNzIEFuYWxvZ0NoYW5uZWwgOiBwdWJsaWMgU2Vuc29yQmFzZSwgcHVibGljIFBJRFNvdXJjZSwgcHVibGljIExpdmVXaW5kb3dTZW5kYWJsZQ0KK3sNCitwdWJsaWM6DQorCXN0YXRpYyBjb25zdCBVSU5UOCBrQWNjdW11bGF0b3JNb2R1bGVOdW1iZXIgPSAxOw0KKwlzdGF0aWMgY29uc3QgVUlOVDMyIGtBY2N1bXVsYXRvck51bUNoYW5uZWxzID0gMjsNCisJc3RhdGljIGNvbnN0IFVJTlQzMiBrQWNjdW11bGF0b3JDaGFubmVsc1trQWNjdW11bGF0b3JOdW1DaGFubmVsc107DQorDQorCUFuYWxvZ0NoYW5uZWwoVUlOVDggbW9kdWxlTnVtYmVyLCBVSU5UMzIgY2hhbm5lbCk7DQorCWV4cGxpY2l0IEFuYWxvZ0NoYW5uZWwoVUlOVDMyIGNoYW5uZWwpOw0KKwl2aXJ0dWFsIH5BbmFsb2dDaGFubmVsKCk7DQorDQorCUFuYWxvZ01vZHVsZSAqR2V0TW9kdWxlKCk7DQorDQorCUlOVDE2IEdldFZhbHVlKCk7DQorCUlOVDMyIEdldEF2ZXJhZ2VWYWx1ZSgpOw0KKw0KKwlmbG9hdCBHZXRWb2x0YWdlKCk7DQorCWZsb2F0IEdldEF2ZXJhZ2VWb2x0YWdlKCk7DQorDQorCVVJTlQ4IEdldE1vZHVsZU51bWJlcigpOw0KKwlVSU5UMzIgR2V0Q2hhbm5lbCgpOw0KKw0KKwl2b2lkIFNldEF2ZXJhZ2VCaXRzKFVJTlQzMiBiaXRzKTsNCisJVUlOVDMyIEdldEF2ZXJhZ2VCaXRzKCk7DQorCXZvaWQgU2V0T3ZlcnNhbXBsZUJpdHMoVUlOVDMyIGJpdHMpOw0KKwlVSU5UMzIgR2V0T3ZlcnNhbXBsZUJpdHMoKTsNCisNCisJVUlOVDMyIEdldExTQldlaWdodCgpOw0KKwlJTlQzMiBHZXRPZmZzZXQoKTsNCisNCisJYm9vbCBJc0FjY3VtdWxhdG9yQ2hhbm5lbCgpOw0KKwl2b2lkIEluaXRBY2N1bXVsYXRvcigpOw0KKwl2b2lkIFNldEFjY3VtdWxhdG9ySW5pdGlhbFZhbHVlKElOVDY0IHZhbHVlKTsNCisJdm9pZCBSZXNldEFjY3VtdWxhdG9yKCk7DQorCXZvaWQgU2V0QWNjdW11bGF0b3JDZW50ZXIoSU5UMzIgY2VudGVyKTsNCisJdm9pZCBTZXRBY2N1bXVsYXRvckRlYWRiYW5kKElOVDMyIGRlYWRiYW5kKTsNCisJSU5UNjQgR2V0QWNjdW11bGF0b3JWYWx1ZSgpOw0KKwlVSU5UMzIgR2V0QWNjdW11bGF0b3JDb3VudCgpOw0KKwl2b2lkIEdldEFjY3VtdWxhdG9yT3V0cHV0KElOVDY0ICp2YWx1ZSwgVUlOVDMyICpjb3VudCk7DQorCQ0KKwlkb3VibGUgUElER2V0KCk7DQorCQ0KKwl2b2lkIFVwZGF0ZVRhYmxlKCk7DQorCXZvaWQgU3RhcnRMaXZlV2luZG93TW9kZSgpOw0KKwl2b2lkIFN0b3BMaXZlV2luZG93TW9kZSgpOw0KKwlzdGQ6OnN0cmluZyBHZXRTbWFydERhc2hib2FyZFR5cGUoKTsNCisJdm9pZCBJbml0VGFibGUoSVRhYmxlICpzdWJUYWJsZSk7DQorCUlUYWJsZSAqIEdldFRhYmxlKCk7DQorDQorcHJpdmF0ZToNCisJdm9pZCBJbml0Q2hhbm5lbChVSU5UOCBtb2R1bGVOdW1iZXIsIFVJTlQzMiBjaGFubmVsKTsNCisJVUlOVDMyIG1fY2hhbm5lbDsNCisJQW5hbG9nTW9kdWxlICptX21vZHVsZTsNCisJdEFjY3VtdWxhdG9yICptX2FjY3VtdWxhdG9yOw0KKwlJTlQ2NCBtX2FjY3VtdWxhdG9yT2Zmc2V0Ow0KKwkNCisJSVRhYmxlICptX3RhYmxlOw0KK307DQorDQorI2VuZGlmDQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvQW5hbG9nTW9kdWxlLmNwcCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0FuYWxvZ01vZHVsZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWMzNTQ4NwotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0FuYWxvZ01vZHVsZS5jcHAKQEAgLTAsMCArMSw0MjMgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorLyogQ29weXJpZ2h0IChjKSBGSVJTVCAyMDA4LiBBbGwgUmlnaHRzIFJlc2VydmVkLgkJCQkJCQkgICovDQorLyogT3BlbiBTb3VyY2UgU29mdHdhcmUgLSBtYXkgYmUgbW9kaWZpZWQgYW5kIHNoYXJlZCBieSBGUkMgdGVhbXMuIFRoZSBjb2RlICAgKi8NCisvKiBtdXN0IGJlIGFjY29tcGFuaWVkIGJ5IHRoZSBGSVJTVCBCU0QgbGljZW5zZSBmaWxlIGluICQoV0lORF9CQVNFKS9XUElMaWIuICAqLw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorI2luY2x1ZGUgIkFuYWxvZ01vZHVsZS5oIg0KKyNpbmNsdWRlICJTeW5jaHJvbml6ZWQuaCINCisjaW5jbHVkZSAiVGltZXIuaCINCisjaW5jbHVkZSAiV1BJRXJyb3JzLmgiDQorI2luY2x1ZGUgIk5ldHdvcmtDb21tdW5pY2F0aW9uL0FJQ2FsaWJyYXRpb24uaCINCisNCitjb25zdCBsb25nIEFuYWxvZ01vZHVsZTo6a1RpbWViYXNlOyAvLy88IDQwIE1IeiBjbG9jaw0KK2NvbnN0IGxvbmcgQW5hbG9nTW9kdWxlOjprRGVmYXVsdE92ZXJzYW1wbGVCaXRzOw0KK2NvbnN0IGxvbmcgQW5hbG9nTW9kdWxlOjprRGVmYXVsdEF2ZXJhZ2VCaXRzOw0KK2NvbnN0IGZsb2F0IEFuYWxvZ01vZHVsZTo6a0RlZmF1bHRTYW1wbGVSYXRlOw0KK1NFTV9JRCBBbmFsb2dNb2R1bGU6Om1fcmVnaXN0ZXJXaW5kb3dTZW1hcGhvcmUgPSBOVUxMOw0KKw0KKy8qKg0KKyAqIEdldCBhbiBpbnN0YW5jZSBvZiBhbiBBbmFsb2cgTW9kdWxlLg0KKyAqIA0KKyAqIFNpbmdsZXRvbiBhbmFsb2cgbW9kdWxlIGNyZWF0aW9uIHdoZXJlIGEgbW9kdWxlIGlzIGFsbG9jYXRlZCBvbiB0aGUgZmlyc3QgdXNlDQorICogYW5kIHRoZSBzYW1lIG1vZHVsZSBpcyByZXR1cm5lZCBvbiBzdWJzZXF1ZW50IHVzZXMuDQorICogDQorICogQHBhcmFtIG1vZHVsZU51bWJlciBUaGUgYW5hbG9nIG1vZHVsZSB0byBnZXQgKDEgb3IgMikuDQorICogQHJldHVybiBBIHBvaW50ZXIgdG8gdGhlIEFuYWxvZ01vZHVsZS4NCisgKi8NCitBbmFsb2dNb2R1bGUqIEFuYWxvZ01vZHVsZTo6R2V0SW5zdGFuY2UoVUlOVDggbW9kdWxlTnVtYmVyKQ0KK3sNCisJaWYgKENoZWNrQW5hbG9nTW9kdWxlKG1vZHVsZU51bWJlcikpDQorCXsNCisJCXJldHVybiAoQW5hbG9nTW9kdWxlKilHZXRNb2R1bGUobkxvYWRPdXQ6OmtNb2R1bGVUeXBlX0FuYWxvZywgbW9kdWxlTnVtYmVyKTsNCisJfQ0KKw0KKwkvLyBJZiB0aGlzIHdhc24ndCBjYXVnaHQgYmVmb3JlIG5vdywgbWFrZSBzdXJlIHdlIHNheSB3aGF0J3Mgd3JvbmcgYmVmb3JlIHdlIGNyYXNoDQorCWNoYXIgYnVmWzY0XTsNCisJc25wcmludGYoYnVmLCA2NCwgIkFuYWxvZyBNb2R1bGUgJWQiLCBtb2R1bGVOdW1iZXIpOw0KKwl3cGlfc2V0R2xvYmFsV1BJRXJyb3JXaXRoQ29udGV4dChNb2R1bGVJbmRleE91dE9mUmFuZ2UsIGJ1Zik7DQorDQorCXJldHVybiBOVUxMOw0KK30NCisNCisvKioNCisgKiBDcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgYW4gYW5hbG9nIG1vZHVsZS4NCisgKiANCisgKiBDcmVhdGUgYW4gaW5zdGFuY2Ugb2YgdGhlIGFuYWxvZyBtb2R1bGUgb2JqZWN0LiBJbml0aWFsaXplIGFsbCB0aGUgcGFyYW1ldGVycw0KKyAqIHRvIHJlYXNvbmFibGUgdmFsdWVzIG9uIHN0YXJ0Lg0KKyAqIFNldHRpbmcgYSBnbG9iYWwgdmFsdWUgb24gYW4gYW5hbG9nIG1vZHVsZSBjYW4gYmUgZG9uZSBvbmx5IG9uY2UgdW5sZXNzIHN1YnNlcXVlbnQNCisgKiB2YWx1ZXMgYXJlIHNldCB0aGUgcHJldmlvdXNseSBzZXQgdmFsdWUuDQorICogQW5hbG9nIG1vZHVsZXMgYXJlIGEgc2luZ2xldG9uLCBzbyB0aGUgY29uc3RydWN0b3IgaXMgbmV2ZXIgY2FsbGVkIG91dHNpZGUgb2YgdGhpcyBjbGFzcy4NCisgKiANCisgKiBAcGFyYW0gbW9kdWxlTnVtYmVyIFRoZSBhbmFsb2cgbW9kdWxlIHRvIGNyZWF0ZSAoMSBvciAyKS4NCisgKi8NCitBbmFsb2dNb2R1bGU6OkFuYWxvZ01vZHVsZShVSU5UOCBtb2R1bGVOdW1iZXIpDQorCTogTW9kdWxlKG5Mb2FkT3V0OjprTW9kdWxlVHlwZV9BbmFsb2csIG1vZHVsZU51bWJlcikNCisJLCBtX21vZHVsZSAoTlVMTCkNCisJLCBtX3NhbXBsZVJhdGVTZXQgKGZhbHNlKQ0KKwksIG1fbnVtQ2hhbm5lbHNUb0FjdGl2YXRlICgwKQ0KK3sNCisJQWRkVG9TaW5nbGV0b25MaXN0KCk7DQorCXRSaW9TdGF0dXNDb2RlIGxvY2FsU3RhdHVzID0gTmlGcGdhX1N0YXR1c19TdWNjZXNzOw0KKwltX21vZHVsZSA9IHRBSTo6Y3JlYXRlKG1fbW9kdWxlTnVtYmVyIC0gMSwgJmxvY2FsU3RhdHVzKTsNCisJd3BpX3NldEVycm9yKGxvY2FsU3RhdHVzKTsNCisJU2V0TnVtQ2hhbm5lbHNUb0FjdGl2YXRlKGtBbmFsb2dDaGFubmVscyk7DQorCVNldFNhbXBsZVJhdGUoa0RlZmF1bHRTYW1wbGVSYXRlKTsNCisNCisJZm9yIChVSU5UMzIgaSA9IDA7IGkgPCBrQW5hbG9nQ2hhbm5lbHM7IGkrKykNCisJew0KKwkJbV9tb2R1bGUtPndyaXRlU2Nhbkxpc3QoaSwgaSwgJmxvY2FsU3RhdHVzKTsNCisJCXdwaV9zZXRFcnJvcihsb2NhbFN0YXR1cyk7DQorCQlTZXRBdmVyYWdlQml0cyhpICsgMSwga0RlZmF1bHRBdmVyYWdlQml0cyk7DQorCQlTZXRPdmVyc2FtcGxlQml0cyhpICsgMSwga0RlZmF1bHRPdmVyc2FtcGxlQml0cyk7DQorCX0NCisNCisJaWYgKG1fcmVnaXN0ZXJXaW5kb3dTZW1hcGhvcmUgPT0gTlVMTCkNCisJew0KKwkJLy8gTmVlZHMgdG8gYmUgZ2xvYmFsIHNpbmNlIHRoZSBwcm90ZWN0ZWQgcmVzb3VyY2Ugc3BhbnMgYm90aCBtb2R1bGUgc2luZ2xldG9ucy4NCisJCW1fcmVnaXN0ZXJXaW5kb3dTZW1hcGhvcmUgPSBzZW1NQ3JlYXRlKFNFTV9RX1BSSU9SSVRZIHwgU0VNX0RFTEVURV9TQUZFIHwgU0VNX0lOVkVSU0lPTl9TQUZFKTsNCisJfQ0KK30NCisNCisvKioNCisgKiBEZXN0cnVjdG9yIGZvciBBbmFsb2dNb2R1bGUuDQorICovDQorQW5hbG9nTW9kdWxlOjp+QW5hbG9nTW9kdWxlKCkNCit7DQorCWRlbGV0ZSBtX21vZHVsZTsNCit9DQorDQorLyoqDQorICogU2V0IHRoZSBzYW1wbGUgcmF0ZSBvbiB0aGUgbW9kdWxlLg0KKyAqIA0KKyAqIFRoaXMgaXMgYSBnbG9iYWwgc2V0dGluZyBmb3IgdGhlIG1vZHVsZSBhbmQgZWZmZWN0cyBhbGwgY2hhbm5lbHMuDQorICogDQorICogQHBhcmFtIHNhbXBsZXNQZXJTZWNvbmQgVGhlIG51bWJlciBvZiBzYW1wbGVzIHBlciBjaGFubmVsIHBlciBzZWNvbmQuDQorICovDQordm9pZCBBbmFsb2dNb2R1bGU6OlNldFNhbXBsZVJhdGUoZmxvYXQgc2FtcGxlc1BlclNlY29uZCkNCit7DQorCS8vIFRPRE86IFRoaXMgd2lsbCBjaGFuZ2Ugd2hlbiB2YXJpYWJsZSBzaXplIHNjYW4gbGlzdHMgYXJlIGltcGxlbWVudGVkLg0KKwkvLyBUT0RPOiBOZWVkIGZsb2F0IGNvbXBhcmlzb24gd2l0aCBlcHNpbG9uLg0KKwkvL3dwaV9hc3NlcnQoIXNhbXBsZVJhdGVTZXQgfHwgR2V0U2FtcGxlUmF0ZSgpID09IHNhbXBsZXNQZXJTZWNvbmQpOw0KKwltX3NhbXBsZVJhdGVTZXQgPSB0cnVlOw0KKw0KKwkvLyBDb21wdXRlIHRoZSBjb252ZXJ0IHJhdGUNCisJVUlOVDMyIHRpY2tzUGVyU2FtcGxlID0gKFVJTlQzMikoKGZsb2F0KWtUaW1lYmFzZSAvIHNhbXBsZXNQZXJTZWNvbmQpOw0KKwlVSU5UMzIgdGlja3NQZXJDb252ZXJzaW9uID0gdGlja3NQZXJTYW1wbGUgLyBHZXROdW1DaGFubmVsc1RvQWN0aXZhdGUoKTsNCisJLy8gdGlja3NQZXJDb252ZXJzaW9uIG11c3QgYmUgYXQgbGVhc3QgODANCisJaWYgKHRpY2tzUGVyQ29udmVyc2lvbiA8IDgwKQ0KKwl7DQorCQl3cGlfc2V0V1BJRXJyb3IoU2FtcGxlUmF0ZVRvb0hpZ2gpOw0KKwkJdGlja3NQZXJDb252ZXJzaW9uID0gODA7DQorCX0NCisNCisJLy8gQXRvbWljYWxseSBzZXQgdGhlIHNjYW4gc2l6ZSBhbmQgdGhlIGNvbnZlcnQgcmF0ZSBzbyB0aGF0IHRoZSBzYW1wbGUgcmF0ZSBpcyBjb25zdGFudA0KKwl0QUk6OnRDb25maWcgY29uZmlnOw0KKwljb25maWcuU2NhblNpemUgPSBHZXROdW1DaGFubmVsc1RvQWN0aXZhdGUoKTsNCisJY29uZmlnLkNvbnZlcnRSYXRlID0gdGlja3NQZXJDb252ZXJzaW9uOw0KKwl0UmlvU3RhdHVzQ29kZSBsb2NhbFN0YXR1cyA9IE5pRnBnYV9TdGF0dXNfU3VjY2VzczsNCisJbV9tb2R1bGUtPndyaXRlQ29uZmlnKGNvbmZpZywgJmxvY2FsU3RhdHVzKTsNCisJd3BpX3NldEVycm9yKGxvY2FsU3RhdHVzKTsNCisNCisJLy8gSW5kaWNhdGUgdGhhdCB0aGUgc2NhbiBzaXplIGhhcyBiZWVuIGNvbW1pdGVkIHRvIGhhcmR3YXJlLg0KKwlTZXROdW1DaGFubmVsc1RvQWN0aXZhdGUoMCk7DQorfQ0KKw0KKy8qKg0KKyAqIEdldCB0aGUgY3VycmVudCBzYW1wbGUgcmF0ZSBvbiB0aGUgbW9kdWxlLg0KKyAqIA0KKyAqIFRoaXMgYXNzdW1lcyBvbmUgZW50cnkgaW4gdGhlIHNjYW4gbGlzdC4NCisgKiBUaGlzIGlzIGEgZ2xvYmFsIHNldHRpbmcgZm9yIHRoZSBtb2R1bGUgYW5kIGVmZmVjdHMgYWxsIGNoYW5uZWxzLg0KKyAqIA0KKyAqIEByZXR1cm4gU2FtcGxlIHJhdGUuDQorICovDQorZmxvYXQgQW5hbG9nTW9kdWxlOjpHZXRTYW1wbGVSYXRlKCkNCit7DQorCXRSaW9TdGF0dXNDb2RlIGxvY2FsU3RhdHVzID0gTmlGcGdhX1N0YXR1c19TdWNjZXNzOw0KKwlVSU5UMzIgdGlja3NQZXJDb252ZXJzaW9uID0gbV9tb2R1bGUtPnJlYWRMb29wVGltaW5nKCZsb2NhbFN0YXR1cyk7DQorCXdwaV9zZXRFcnJvcihsb2NhbFN0YXR1cyk7DQorCVVJTlQzMiB0aWNrc1BlclNhbXBsZSA9IHRpY2tzUGVyQ29udmVyc2lvbiAqIEdldE51bUFjdGl2ZUNoYW5uZWxzKCk7DQorCXJldHVybiAoZmxvYXQpa1RpbWViYXNlIC8gKGZsb2F0KXRpY2tzUGVyU2FtcGxlOw0KK30NCisNCisvKioNCisgKiBSZXR1cm4gdGhlIG51bWJlciBvZiBjaGFubmVscyBvbiB0aGUgbW9kdWxlIGluIHVzZS4NCisgKiANCisgKiBAcmV0dXJuIEFjdGl2ZSBjaGFubmVscy4NCisgKi8NCitVSU5UMzIgQW5hbG9nTW9kdWxlOjpHZXROdW1BY3RpdmVDaGFubmVscygpDQorew0KKwl0UmlvU3RhdHVzQ29kZSBsb2NhbFN0YXR1cyA9IE5pRnBnYV9TdGF0dXNfU3VjY2VzczsNCisJVUlOVDMyIHNjYW5TaXplID0gbV9tb2R1bGUtPnJlYWRDb25maWdfU2NhblNpemUoJmxvY2FsU3RhdHVzKTsNCisJd3BpX3NldEVycm9yKGxvY2FsU3RhdHVzKTsNCisJaWYgKHNjYW5TaXplID09IDApDQorCQlyZXR1cm4gODsNCisJcmV0dXJuIHNjYW5TaXplOw0KK30NCisNCisvKioNCisgKiBHZXQgdGhlIG51bWJlciBvZiBhY3RpdmUgY2hhbm5lbHMuDQorICogDQorICogVGhpcyBpcyBhbiBpbnRlcm5hbCBmdW5jdGlvbiB0byBhbGxvdyB0aGUgYXRvbWljIHVwZGF0ZSBvZiBib3RoIHRoZSANCisgKiBudW1iZXIgb2YgYWN0aXZlIGNoYW5uZWxzIGFuZCB0aGUgc2FtcGxlIHJhdGUuDQorICogDQorICogV2hlbiB0aGUgbnVtYmVyIG9mIGNoYW5uZWxzIGNoYW5nZXMsIHVzZSB0aGUgbmV3IHZhbHVlLiAgT3RoZXJ3aXNlLA0KKyAqIHJldHVybiB0aGUgY3VyZW50IHZhbHVlLg0KKyAqIA0KKyAqIEByZXR1cm4gVmFsdWUgdG8gd3JpdGUgdG8gdGhlIGFjdGl2ZSBjaGFubmVscyBmaWVsZC4NCisgKi8NCitVSU5UMzIgQW5hbG9nTW9kdWxlOjpHZXROdW1DaGFubmVsc1RvQWN0aXZhdGUoKQ0KK3sNCisJaWYobV9udW1DaGFubmVsc1RvQWN0aXZhdGUgPT0gMCkgcmV0dXJuIEdldE51bUFjdGl2ZUNoYW5uZWxzKCk7DQorCXJldHVybiBtX251bUNoYW5uZWxzVG9BY3RpdmF0ZTsNCit9DQorDQorLyoqDQorICogU2V0IHRoZSBudW1iZXIgb2YgYWN0aXZlIGNoYW5uZWxzLg0KKyAqIA0KKyAqIFN0b3JlIHRoZSBudW1iZXIgb2YgYWN0aXZlIGNoYW5uZWxzIHRvIHNldC4gIERvbid0IGFjdHVhbGx5IGNvbW1pdCB0byBoYXJkd2FyZQ0KKyAqIHVudGlsIFNldFNhbXBsZVJhdGUoKS4NCisgKiANCisgKiBAcGFyYW0gY2hhbm5lbHMgTnVtYmVyIG9mIGFjdGl2ZSBjaGFubmVscy4NCisgKi8NCit2b2lkIEFuYWxvZ01vZHVsZTo6U2V0TnVtQ2hhbm5lbHNUb0FjdGl2YXRlKFVJTlQzMiBjaGFubmVscykNCit7DQorCW1fbnVtQ2hhbm5lbHNUb0FjdGl2YXRlID0gY2hhbm5lbHM7DQorfQ0KKw0KKy8qKg0KKyAqIFNldCB0aGUgbnVtYmVyIG9mIGF2ZXJhZ2luZyBiaXRzLg0KKyAqIA0KKyAqIFRoaXMgc2V0cyB0aGUgbnVtYmVyIG9mIGF2ZXJhZ2luZyBiaXRzLiBUaGUgYWN0dWFsIG51bWJlciBvZiBhdmVyYWdlZCBzYW1wbGVzIGlzIDIqKmJpdHMuDQorICogVXNlIGF2ZXJhZ2luZyB0byBpbXByb3ZlIHRoZSBzdGFiaWxpdHkgb2YgeW91ciBtZWFzdXJlbWVudCBhdCB0aGUgZXhwZW5zZSBvZiBzYW1wbGluZyByYXRlLg0KKyAqIFRoZSBhdmVyYWdpbmcgaXMgZG9uZSBhdXRvbWF0aWNhbGx5IGluIHRoZSBGUEdBLg0KKyAqIA0KKyAqIEBwYXJhbSBjaGFubmVsIEFuYWxvZyBjaGFubmVsIHRvIGNvbmZpZ3VyZS4NCisgKiBAcGFyYW0gYml0cyBOdW1iZXIgb2YgYml0cyB0byBhdmVyYWdlLg0KKyAqLw0KK3ZvaWQgQW5hbG9nTW9kdWxlOjpTZXRBdmVyYWdlQml0cyhVSU5UMzIgY2hhbm5lbCwgVUlOVDMyIGJpdHMpDQorew0KKwl0UmlvU3RhdHVzQ29kZSBsb2NhbFN0YXR1cyA9IE5pRnBnYV9TdGF0dXNfU3VjY2VzczsNCisJbV9tb2R1bGUtPndyaXRlQXZlcmFnZUJpdHMoY2hhbm5lbCAtIDEsIGJpdHMsICZsb2NhbFN0YXR1cyk7DQorCXdwaV9zZXRFcnJvcihsb2NhbFN0YXR1cyk7DQorfQ0KKw0KKy8qKg0KKyAqIEdldCB0aGUgbnVtYmVyIG9mIGF2ZXJhZ2luZyBiaXRzLg0KKyAqIA0KKyAqIFRoaXMgZ2V0cyB0aGUgbnVtYmVyIG9mIGF2ZXJhZ2luZyBiaXRzIGZyb20gdGhlIEZQR0EuIFRoZSBhY3R1YWwgbnVtYmVyIG9mIGF2ZXJhZ2VkIHNhbXBsZXMgaXMgMioqYml0cy4NCisgKiBUaGUgYXZlcmFnaW5nIGlzIGRvbmUgYXV0b21hdGljYWxseSBpbiB0aGUgRlBHQS4NCisgKiANCisgKiBAcGFyYW0gY2hhbm5lbCBDaGFubmVsIHRvIGFkZHJlc3MuDQorICogQHJldHVybiBCaXRzIHRvIGF2ZXJhZ2UuDQorICovDQorVUlOVDMyIEFuYWxvZ01vZHVsZTo6R2V0QXZlcmFnZUJpdHMoVUlOVDMyIGNoYW5uZWwpDQorew0KKwl0UmlvU3RhdHVzQ29kZSBsb2NhbFN0YXR1cyA9IE5pRnBnYV9TdGF0dXNfU3VjY2VzczsNCisJVUlOVDMyIHJlc3VsdCA9IG1fbW9kdWxlLT5yZWFkQXZlcmFnZUJpdHMoY2hhbm5lbCAtIDEsICZsb2NhbFN0YXR1cyk7DQorCXdwaV9zZXRFcnJvcihsb2NhbFN0YXR1cyk7DQorCXJldHVybiByZXN1bHQ7DQorfQ0KKw0KKy8qKg0KKyAqIFNldCB0aGUgbnVtYmVyIG9mIG92ZXJzYW1wbGUgYml0cy4NCisgKiANCisgKiBUaGlzIHNldHMgdGhlIG51bWJlciBvZiBvdmVyc2FtcGxlIGJpdHMuIFRoZSBhY3R1YWwgbnVtYmVyIG9mIG92ZXJzYW1wbGVkIHZhbHVlcyBpcyAyKipiaXRzLg0KKyAqIFVzZSBvdmVyc2FtcGxpbmcgdG8gaW1wcm92ZSB0aGUgcmVzb2x1dGlvbiBvZiB5b3VyIG1lYXN1cmVtZW50cyBhdCB0aGUgZXhwZW5zZSBvZiBzYW1wbGluZyByYXRlLg0KKyAqIFRoZSBvdmVyc2FtcGxpbmcgaXMgZG9uZSBhdXRvbWF0aWNhbGx5IGluIHRoZSBGUEdBLg0KKyAqIA0KKyAqIEBwYXJhbSBjaGFubmVsIEFuYWxvZyBjaGFubmVsIHRvIGNvbmZpZ3VyZS4NCisgKiBAcGFyYW0gYml0cyBOdW1iZXIgb2YgYml0cyB0byBvdmVyc2FtcGxlLg0KKyAqLw0KK3ZvaWQgQW5hbG9nTW9kdWxlOjpTZXRPdmVyc2FtcGxlQml0cyhVSU5UMzIgY2hhbm5lbCwgVUlOVDMyIGJpdHMpDQorew0KKwl0UmlvU3RhdHVzQ29kZSBsb2NhbFN0YXR1cyA9IE5pRnBnYV9TdGF0dXNfU3VjY2VzczsNCisJbV9tb2R1bGUtPndyaXRlT3ZlcnNhbXBsZUJpdHMoY2hhbm5lbCAtIDEsIGJpdHMsICZsb2NhbFN0YXR1cyk7DQorCXdwaV9zZXRFcnJvcihsb2NhbFN0YXR1cyk7DQorfQ0KKw0KKy8qKg0KKyAqIEdldCB0aGUgbnVtYmVyIG9mIG92ZXJzYW1wbGUgYml0cy4NCisgKiANCisgKiBUaGlzIGdldHMgdGhlIG51bWJlciBvZiBvdmVyc2FtcGxlIGJpdHMgZnJvbSB0aGUgRlBHQS4gVGhlIGFjdHVhbCBudW1iZXIgb2Ygb3ZlcnNhbXBsZWQgdmFsdWVzIGlzDQorICogMioqYml0cy4gVGhlIG92ZXJzYW1wbGluZyBpcyBkb25lIGF1dG9tYXRpY2FsbHkgaW4gdGhlIEZQR0EuDQorICogDQorICogQHBhcmFtIGNoYW5uZWwgQ2hhbm5lbCB0byBhZGRyZXNzLg0KKyAqIEByZXR1cm4gQml0cyB0byBvdmVyc2FtcGxlLg0KKyAqLw0KK1VJTlQzMiBBbmFsb2dNb2R1bGU6OkdldE92ZXJzYW1wbGVCaXRzKFVJTlQzMiBjaGFubmVsKQ0KK3sNCisJdFJpb1N0YXR1c0NvZGUgbG9jYWxTdGF0dXMgPSBOaUZwZ2FfU3RhdHVzX1N1Y2Nlc3M7DQorCVVJTlQzMiByZXN1bHQgPSBtX21vZHVsZS0+cmVhZE92ZXJzYW1wbGVCaXRzKGNoYW5uZWwgLSAxLCAmbG9jYWxTdGF0dXMpOw0KKwl3cGlfc2V0RXJyb3IobG9jYWxTdGF0dXMpOw0KKwlyZXR1cm4gcmVzdWx0Ow0KK30NCisNCisvKioNCisgKiBHZXQgYSBzYW1wbGUgc3RyYWlnaHQgZnJvbSB0aGUgY2hhbm5lbCBvbiB0aGlzIG1vZHVsZS4NCisgKiANCisgKiBUaGUgc2FtcGxlIGlzIGEgMTItYml0IHZhbHVlIHJlcHJlc2VudGluZyB0aGUgLTEwViB0byAxMFYgcmFuZ2Ugb2YgdGhlIEEvRCBjb252ZXJ0ZXIgaW4gdGhlIG1vZHVsZS4NCisgKiBUaGUgdW5pdHMgYXJlIGluIEEvRCBjb252ZXJ0ZXIgY29kZXMuICBVc2UgR2V0Vm9sdGFnZSgpIHRvIGdldCB0aGUgYW5hbG9nIHZhbHVlIGluIGNhbGlicmF0ZWQgdW5pdHMuDQorICogDQorICogQHJldHVybiBBIHNhbXBsZSBzdHJhaWdodCBmcm9tIHRoZSBjaGFubmVsIG9uIHRoaXMgbW9kdWxlLg0KKyAqLw0KK0lOVDE2IEFuYWxvZ01vZHVsZTo6R2V0VmFsdWUoVUlOVDMyIGNoYW5uZWwpDQorew0KKwlJTlQxNiB2YWx1ZTsNCisJQ2hlY2tBbmFsb2dDaGFubmVsKGNoYW5uZWwpOw0KKw0KKwl0QUk6OnRSZWFkU2VsZWN0IHJlYWRTZWxlY3Q7DQorCXJlYWRTZWxlY3QuQ2hhbm5lbCA9IGNoYW5uZWwgLSAxOw0KKwlyZWFkU2VsZWN0Lk1vZHVsZSA9IG1fbW9kdWxlTnVtYmVyIC0gMTsNCisJcmVhZFNlbGVjdC5BdmVyYWdlZCA9IGZhbHNlOw0KKwl0UmlvU3RhdHVzQ29kZSBsb2NhbFN0YXR1cyA9IE5pRnBnYV9TdGF0dXNfU3VjY2VzczsNCisNCisJew0KKwkJU3luY2hyb25pemVkIHN5bmMobV9yZWdpc3RlcldpbmRvd1NlbWFwaG9yZSk7DQorCQltX21vZHVsZS0+d3JpdGVSZWFkU2VsZWN0KHJlYWRTZWxlY3QsICZsb2NhbFN0YXR1cyk7DQorCQltX21vZHVsZS0+c3Ryb2JlTGF0Y2hPdXRwdXQoJmxvY2FsU3RhdHVzKTsNCisJCXZhbHVlID0gKElOVDE2KSBtX21vZHVsZS0+cmVhZE91dHB1dCgmbG9jYWxTdGF0dXMpOw0KKwl9DQorDQorCXdwaV9zZXRFcnJvcihsb2NhbFN0YXR1cyk7DQorCXJldHVybiB2YWx1ZTsNCit9DQorDQorLyoqDQorICogR2V0IGEgc2FtcGxlIGZyb20gdGhlIG91dHB1dCBvZiB0aGUgb3ZlcnNhbXBsZSBhbmQgYXZlcmFnZSBlbmdpbmUgZm9yIHRoZSBjaGFubmVsLg0KKyAqIA0KKyAqIFRoZSBzYW1wbGUgaXMgMTItYml0ICsgdGhlIHZhbHVlIGNvbmZpZ3VyZWQgaW4gU2V0T3ZlcnNhbXBsZUJpdHMoKS4NCisgKiBUaGUgdmFsdWUgY29uZmlndXJlZCBpbiBTZXRBdmVyYWdlQml0cygpIHdpbGwgY2F1c2UgdGhpcyB2YWx1ZSB0byBiZSBhdmVyYWdlZCAyKipiaXRzIG51bWJlciBvZiBzYW1wbGVzLg0KKyAqIFRoaXMgaXMgbm90IGEgc2xpZGluZyB3aW5kb3cuICBUaGUgc2FtcGxlIHdpbGwgbm90IGNoYW5nZSB1bnRpbCAyKiooT3ZlcnNhbXBsQml0cyArIEF2ZXJhZ2VCaXRzKSBzYW1wbGVzDQorICogaGF2ZSBiZWVuIGFjcXVpcmVkIGZyb20gdGhlIG1vZHVsZSBvbiB0aGlzIGNoYW5uZWwuDQorICogVXNlIEdldEF2ZXJhZ2VWb2x0YWdlKCkgdG8gZ2V0IHRoZSBhbmFsb2cgdmFsdWUgaW4gY2FsaWJyYXRlZCB1bml0cy4NCisgKiANCisgKiBAcGFyYW0gY2hhbm5lbCBDaGFubmVsIG51bWJlciB0byByZWFkLg0KKyAqIEByZXR1cm4gQSBzYW1wbGUgZnJvbSB0aGUgb3ZlcnNhbXBsZSBhbmQgYXZlcmFnZSBlbmdpbmUgZm9yIHRoZSBjaGFubmVsLg0KKyAqLw0KK0lOVDMyIEFuYWxvZ01vZHVsZTo6R2V0QXZlcmFnZVZhbHVlKFVJTlQzMiBjaGFubmVsKQ0KK3sNCisJSU5UMzIgdmFsdWU7DQorCUNoZWNrQW5hbG9nQ2hhbm5lbChjaGFubmVsKTsNCisNCisJdEFJOjp0UmVhZFNlbGVjdCByZWFkU2VsZWN0Ow0KKwlyZWFkU2VsZWN0LkNoYW5uZWwgPSBjaGFubmVsIC0gMTsNCisJcmVhZFNlbGVjdC5Nb2R1bGUgPSBtX21vZHVsZU51bWJlciAtIDE7DQorCXJlYWRTZWxlY3QuQXZlcmFnZWQgPSB0cnVlOw0KKwl0UmlvU3RhdHVzQ29kZSBsb2NhbFN0YXR1cyA9IE5pRnBnYV9TdGF0dXNfU3VjY2VzczsNCisNCisJew0KKwkJU3luY2hyb25pemVkIHN5bmMobV9yZWdpc3RlcldpbmRvd1NlbWFwaG9yZSk7DQorCQltX21vZHVsZS0+d3JpdGVSZWFkU2VsZWN0KHJlYWRTZWxlY3QsICZsb2NhbFN0YXR1cyk7DQorCQltX21vZHVsZS0+c3Ryb2JlTGF0Y2hPdXRwdXQoJmxvY2FsU3RhdHVzKTsNCisJCXZhbHVlID0gbV9tb2R1bGUtPnJlYWRPdXRwdXQoJmxvY2FsU3RhdHVzKTsNCisJfQ0KKw0KKwl3cGlfc2V0RXJyb3IobG9jYWxTdGF0dXMpOw0KKwlyZXR1cm4gdmFsdWU7DQorfQ0KKw0KKy8qKg0KKyAqIENvbnZlcnQgYSB2b2x0YWdlIHRvIGEgcmF3IHZhbHVlIGZvciBhIHNwZWNpZmllZCBjaGFubmVsLg0KKyAqIA0KKyAqIFRoaXMgcHJvY2VzcyBkZXBlbmRzIG9uIHRoZSBjYWxpYnJhdGlvbiBvZiBlYWNoIGNoYW5uZWwsIHNvIHRoZSBjaGFubmVsDQorICogbXVzdCBiZSBzcGVjaWZpZWQuDQorICogDQorICogQHRvZG8gVGhpcyBhc3N1bWVzIHJhdyB2YWx1ZXMuICBPdmVyc2FtcGxpbmcgbm90IHN1cHBvcnRlZCBhcyBpcy4NCisgKiANCisgKiBAcGFyYW0gY2hhbm5lbCBUaGUgY2hhbm5lbCB0byBjb252ZXJ0IGZvci4NCisgKiBAcGFyYW0gdm9sdGFnZSBUaGUgdm9sdGFnZSB0byBjb252ZXJ0Lg0KKyAqIEByZXR1cm4gVGhlIHJhdyB2YWx1ZSBmb3IgdGhlIGNoYW5uZWwuDQorICovDQorSU5UMzIgQW5hbG9nTW9kdWxlOjpWb2x0c1RvVmFsdWUoSU5UMzIgY2hhbm5lbCwgZmxvYXQgdm9sdGFnZSkNCit7DQorCWlmICh2b2x0YWdlID4gMTAuMCkNCisJew0KKwkJdm9sdGFnZSA9IDEwLjA7DQorCQl3cGlfc2V0V1BJRXJyb3IoVm9sdGFnZU91dE9mUmFuZ2UpOw0KKwl9DQorCWlmICh2b2x0YWdlIDwgLTEwLjApDQorCXsNCisJCXZvbHRhZ2UgPSAtMTAuMDsNCisJCXdwaV9zZXRXUElFcnJvcihWb2x0YWdlT3V0T2ZSYW5nZSk7DQorCX0NCisJVUlOVDMyIExTQldlaWdodCA9IEdldExTQldlaWdodChjaGFubmVsKTsNCisJSU5UMzIgb2Zmc2V0ID0gR2V0T2Zmc2V0KGNoYW5uZWwpOw0KKwlJTlQzMiB2YWx1ZSA9IChJTlQzMikgKCh2b2x0YWdlICsgb2Zmc2V0ICogMS4wZS05KSAvIChMU0JXZWlnaHQgKiAxLjBlLTkpKTsNCisJcmV0dXJuIHZhbHVlOw0KK30NCisNCisvKioNCisgKiBHZXQgYSBzY2FsZWQgc2FtcGxlIHN0cmFpZ2h0IGZyb20gdGhlIGNoYW5uZWwgb24gdGhpcyBtb2R1bGUuDQorICogDQorICogVGhlIHZhbHVlIGlzIHNjYWxlZCB0byB1bml0cyBvZiBWb2x0cyB1c2luZyB0aGUgY2FsaWJyYXRlZCBzY2FsaW5nIGRhdGEgZnJvbSBHZXRMU0JXZWlnaHQoKSBhbmQgR2V0T2Zmc2V0KCkuDQorICogDQorICogQHBhcmFtIGNoYW5uZWwgVGhlIGNoYW5uZWwgdG8gcmVhZC4NCisgKiBAcmV0dXJuIEEgc2NhbGVkIHNhbXBsZSBzdHJhaWdodCBmcm9tIHRoZSBjaGFubmVsIG9uIHRoaXMgbW9kdWxlLg0KKyAqLw0KK2Zsb2F0IEFuYWxvZ01vZHVsZTo6R2V0Vm9sdGFnZShVSU5UMzIgY2hhbm5lbCkNCit7DQorCUlOVDE2IHZhbHVlID0gR2V0VmFsdWUoY2hhbm5lbCk7DQorCVVJTlQzMiBMU0JXZWlnaHQgPSBHZXRMU0JXZWlnaHQoY2hhbm5lbCk7DQorCUlOVDMyIG9mZnNldCA9IEdldE9mZnNldChjaGFubmVsKTsNCisJZmxvYXQgdm9sdGFnZSA9IExTQldlaWdodCAqIDEuMGUtOSAqIHZhbHVlIC0gb2Zmc2V0ICogMS4wZS05Ow0KKwlyZXR1cm4gdm9sdGFnZTsNCit9DQorDQorLyoqDQorICogR2V0IGEgc2NhbGVkIHNhbXBsZSBmcm9tIHRoZSBvdXRwdXQgb2YgdGhlIG92ZXJzYW1wbGUgYW5kIGF2ZXJhZ2UgZW5naW5lIGZvciB0aGUgY2hhbm5lbC4NCisgKiANCisgKiBUaGUgdmFsdWUgaXMgc2NhbGVkIHRvIHVuaXRzIG9mIFZvbHRzIHVzaW5nIHRoZSBjYWxpYnJhdGVkIHNjYWxpbmcgZGF0YSBmcm9tIEdldExTQldlaWdodCgpIGFuZCBHZXRPZmZzZXQoKS4NCisgKiBVc2luZyBvdmVyc2FtcGxpbmcgd2lsbCBjYXVzZSB0aGlzIHZhbHVlIHRvIGJlIGhpZ2hlciByZXNvbHV0aW9uLCBidXQgaXQgd2lsbCB1cGRhdGUgbW9yZSBzbG93bHkuDQorICogVXNpbmcgYXZlcmFnaW5nIHdpbGwgY2F1c2UgdGhpcyB2YWx1ZSB0byBiZSBtb3JlIHN0YWJsZSwgYnV0IGl0IHdpbGwgdXBkYXRlIG1vcmUgc2xvd2x5Lg0KKyAqIA0KKyAqIEBwYXJhbSBjaGFubmVsIFRoZSBjaGFubmVsIHRvIHJlYWQuDQorICogQHJldHVybiBBIHNjYWxlZCBzYW1wbGUgZnJvbSB0aGUgb3V0cHV0IG9mIHRoZSBvdmVyc2FtcGxlIGFuZCBhdmVyYWdlIGVuZ2luZSBmb3IgdGhlIGNoYW5uZWwuDQorICovDQorZmxvYXQgQW5hbG9nTW9kdWxlOjpHZXRBdmVyYWdlVm9sdGFnZShVSU5UMzIgY2hhbm5lbCkNCit7DQorCUlOVDMyIHZhbHVlID0gR2V0QXZlcmFnZVZhbHVlKGNoYW5uZWwpOw0KKwlVSU5UMzIgTFNCV2VpZ2h0ID0gR2V0TFNCV2VpZ2h0KGNoYW5uZWwpOw0KKwlJTlQzMiBvZmZzZXQgPSBHZXRPZmZzZXQoY2hhbm5lbCk7DQorCVVJTlQzMiBvdmVyc2FtcGxlQml0cyA9IEdldE92ZXJzYW1wbGVCaXRzKGNoYW5uZWwpOw0KKwlmbG9hdCB2b2x0YWdlID0gKChMU0JXZWlnaHQgKiAxLjBlLTkgKiB2YWx1ZSkgLyAoZmxvYXQpKDEgPDwgb3ZlcnNhbXBsZUJpdHMpKSAtIG9mZnNldCAqIDEuMGUtOTsNCisJcmV0dXJuIHZvbHRhZ2U7DQorfQ0KKw0KKy8qKg0KKyAqIEdldCB0aGUgZmFjdG9yeSBzY2FsaW5nIGxlYXN0IHNpZ25pZmljYW50IGJpdCB3ZWlnaHQgY29uc3RhbnQuDQorICogVGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdCB3ZWlnaHQgY29uc3RhbnQgZm9yIHRoZSBjaGFubmVsIHRoYXQgd2FzIGNhbGlicmF0ZWQgaW4NCisgKiBtYW51ZmFjdHVyaW5nIGFuZCBzdG9yZWQgaW4gYW4gZWVwcm9tIGluIHRoZSBtb2R1bGUuDQorICogDQorICogVm9sdHMgPSAoKExTQl9XZWlnaHQgKiAxZS05KSAqIHJhdykgLSAoT2Zmc2V0ICogMWUtOSkNCisgKiANCisgKiBAcGFyYW0gY2hhbm5lbCBUaGUgY2hhbm5lbCB0byBnZXQgY2FsaWJyYXRpb24gZGF0YSBmb3IuDQorICogQHJldHVybiBMZWFzdCBzaWduaWZpY2FudCBiaXQgd2VpZ2h0Lg0KKyAqLw0KK1VJTlQzMiBBbmFsb2dNb2R1bGU6OkdldExTQldlaWdodChVSU5UMzIgY2hhbm5lbCkgDQorew0KKwl0UmlvU3RhdHVzQ29kZSBsb2NhbFN0YXR1cyA9IE5pRnBnYV9TdGF0dXNfU3VjY2VzczsNCisJVUlOVDMyIGxzYldlaWdodCA9IEZSQ19OZXR3b3JrQ29tbXVuaWNhdGlvbl9uQUlDYWxpYnJhdGlvbl9nZXRMU0JXZWlnaHQobV9tb2R1bGUtPmdldFN5c3RlbUluZGV4KCksIGNoYW5uZWwgLSAxLCAoSU5UMzIqKSZsb2NhbFN0YXR1cyk7DQorCXdwaV9zZXRFcnJvcihsb2NhbFN0YXR1cyk7DQorCXJldHVybiBsc2JXZWlnaHQ7DQorfQ0KKw0KKy8qKg0KKyAqIEdldCB0aGUgZmFjdG9yeSBzY2FsaW5nIG9mZnNldCBjb25zdGFudC4NCisgKiBUaGUgb2Zmc2V0IGNvbnN0YW50IGZvciB0aGUgY2hhbm5lbCB0aGF0IHdhcyBjYWxpYnJhdGVkIGluIG1hbnVmYWN0dXJpbmcgYW5kIHN0b3JlZA0KKyAqIGluIGFuIGVlcHJvbSBpbiB0aGUgbW9kdWxlLg0KKyAqIA0KKyAqIFZvbHRzID0gKChMU0JfV2VpZ2h0ICogMWUtOSkgKiByYXcpIC0gKE9mZnNldCAqIDFlLTkpDQorICogDQorICogQHBhcmFtIGNoYW5uZWwgVGhlIGNoYW5uZWwgdG8gZ2V0IGNhbGlicmF0aW9uIGRhdGEgZm9yLg0KKyAqIEByZXR1cm4gT2Zmc2V0IGNvbnN0YW50Lg0KKyAqLw0KK0lOVDMyIEFuYWxvZ01vZHVsZTo6R2V0T2Zmc2V0KFVJTlQzMiBjaGFubmVsKQ0KK3sNCisJdFJpb1N0YXR1c0NvZGUgbG9jYWxTdGF0dXMgPSBOaUZwZ2FfU3RhdHVzX1N1Y2Nlc3M7DQorCUlOVDMyIG9mZnNldCA9IEZSQ19OZXR3b3JrQ29tbXVuaWNhdGlvbl9uQUlDYWxpYnJhdGlvbl9nZXRPZmZzZXQobV9tb2R1bGUtPmdldFN5c3RlbUluZGV4KCksIGNoYW5uZWwgLSAxLCAoSU5UMzIqKSZsb2NhbFN0YXR1cyk7DQorCXdwaV9zZXRFcnJvcihsb2NhbFN0YXR1cyk7DQorCXJldHVybiBvZmZzZXQ7DQorfQ0KKw0KKw0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0FuYWxvZ01vZHVsZS5oIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvQW5hbG9nTW9kdWxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmYzYmI0YwotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0FuYWxvZ01vZHVsZS5oCkBAIC0wLDAgKzEsNjIgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorLyogQ29weXJpZ2h0IChjKSBGSVJTVCAyMDA4LiBBbGwgUmlnaHRzIFJlc2VydmVkLgkJCQkJCQkgICovDQorLyogT3BlbiBTb3VyY2UgU29mdHdhcmUgLSBtYXkgYmUgbW9kaWZpZWQgYW5kIHNoYXJlZCBieSBGUkMgdGVhbXMuIFRoZSBjb2RlICAgKi8NCisvKiBtdXN0IGJlIGFjY29tcGFuaWVkIGJ5IHRoZSBGSVJTVCBCU0QgbGljZW5zZSBmaWxlIGluICQoV0lORF9CQVNFKS9XUElMaWIuICAqLw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorI2lmbmRlZiBBTkFMT0dfTU9EVUxFX0hfDQorI2RlZmluZSBBTkFMT0dfTU9EVUxFX0hfDQorDQorI2luY2x1ZGUgIkNoaXBPYmplY3QuaCINCisjaW5jbHVkZSAiTW9kdWxlLmgiDQorDQorLyoqDQorICogQW5hbG9nIE1vZHVsZSBjbGFzcy4NCisgKiBFYWNoIG1vZHVsZSBjYW4gaW5kZXBlbmRlbnRseSBzYW1wbGUgaXRzIGNoYW5uZWxzIGF0IGEgY29uZmlndXJhYmxlIHJhdGUuDQorICogVGhlcmUgaXMgYSA2NC1iaXQgaGFyZHdhcmUgYWNjdW11bGF0b3IgYXNzb2NpYXRlZCB3aXRoIGNoYW5uZWwgMSBvbiBlYWNoIG1vZHVsZS4NCisgKiBUaGUgYWNjdW11bGF0b3IgaXMgYXR0YWNoZWQgdG8gdGhlIG91dHB1dCBvZiB0aGUgb3ZlcnNhbXBsZSBhbmQgYXZlcmFnZSBlbmdpbmUgc28gdGhhdCB0aGUgY2VudGVyDQorICogdmFsdWUgY2FuIGJlIHNwZWNpZmllZCBpbiBoaWdoZXIgcmVzb2x1dGlvbiByZXN1bHRpbmcgaW4gbGVzcyBlcnJvci4NCisgKi8NCitjbGFzcyBBbmFsb2dNb2R1bGU6IHB1YmxpYyBNb2R1bGUNCit7IA0KKyAgICBmcmllbmQgY2xhc3MgTW9kdWxlOw0KKw0KK3B1YmxpYzoNCisJc3RhdGljIGNvbnN0IGxvbmcga1RpbWViYXNlID0gNDAwMDAwMDA7IC8vLzwgNDAgTUh6IGNsb2NrDQorCXN0YXRpYyBjb25zdCBsb25nIGtEZWZhdWx0T3ZlcnNhbXBsZUJpdHMgPSAwOw0KKwlzdGF0aWMgY29uc3QgbG9uZyBrRGVmYXVsdEF2ZXJhZ2VCaXRzID0gNzsNCisJc3RhdGljIGNvbnN0IGZsb2F0IGtEZWZhdWx0U2FtcGxlUmF0ZSA9IDUwMDAwLjA7DQorDQorCXZvaWQgU2V0U2FtcGxlUmF0ZShmbG9hdCBzYW1wbGVzUGVyU2Vjb25kKTsNCisJZmxvYXQgR2V0U2FtcGxlUmF0ZSgpOw0KKwl2b2lkIFNldEF2ZXJhZ2VCaXRzKFVJTlQzMiBjaGFubmVsLCBVSU5UMzIgYml0cyk7DQorCVVJTlQzMiBHZXRBdmVyYWdlQml0cyhVSU5UMzIgY2hhbm5lbCk7DQorCXZvaWQgU2V0T3ZlcnNhbXBsZUJpdHMoVUlOVDMyIGNoYW5uZWwsIFVJTlQzMiBiaXRzKTsNCisJVUlOVDMyIEdldE92ZXJzYW1wbGVCaXRzKFVJTlQzMiBjaGFubmVsKTsNCisJSU5UMTYgR2V0VmFsdWUoVUlOVDMyIGNoYW5uZWwpOw0KKwlJTlQzMiBHZXRBdmVyYWdlVmFsdWUoVUlOVDMyIGNoYW5uZWwpOw0KKwlmbG9hdCBHZXRBdmVyYWdlVm9sdGFnZShVSU5UMzIgY2hhbm5lbCk7DQorCWZsb2F0IEdldFZvbHRhZ2UoVUlOVDMyIGNoYW5uZWwpOw0KKwlVSU5UMzIgR2V0TFNCV2VpZ2h0KFVJTlQzMiBjaGFubmVsKTsNCisJSU5UMzIgR2V0T2Zmc2V0KFVJTlQzMiBjaGFubmVsKTsNCisJSU5UMzIgVm9sdHNUb1ZhbHVlKElOVDMyIGNoYW5uZWwsIGZsb2F0IHZvbHRhZ2UpOw0KKw0KKwlzdGF0aWMgQW5hbG9nTW9kdWxlKiBHZXRJbnN0YW5jZShVSU5UOCBtb2R1bGVOdW1iZXIpOw0KKw0KK3Byb3RlY3RlZDoNCisJZXhwbGljaXQgQW5hbG9nTW9kdWxlKFVJTlQ4IG1vZHVsZU51bWJlcik7DQorCXZpcnR1YWwgfkFuYWxvZ01vZHVsZSgpOw0KKw0KK3ByaXZhdGU6DQorCXN0YXRpYyBTRU1fSUQgbV9yZWdpc3RlcldpbmRvd1NlbWFwaG9yZTsNCisNCisJVUlOVDMyIEdldE51bUFjdGl2ZUNoYW5uZWxzKCk7DQorCVVJTlQzMiBHZXROdW1DaGFubmVsc1RvQWN0aXZhdGUoKTsNCisJdm9pZCBTZXROdW1DaGFubmVsc1RvQWN0aXZhdGUoVUlOVDMyIGNoYW5uZWxzKTsNCisNCisJdEFJICptX21vZHVsZTsNCisJYm9vbCBtX3NhbXBsZVJhdGVTZXQ7DQorCVVJTlQzMiBtX251bUNoYW5uZWxzVG9BY3RpdmF0ZTsNCit9Ow0KKw0KKyNlbmRpZg0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0FuYWxvZ1RyaWdnZXIuY3BwIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvQW5hbG9nVHJpZ2dlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTM0MjBkNQotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0FuYWxvZ1RyaWdnZXIuY3BwCkBAIC0wLDAgKzEsMjAwIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy8qIENvcHlyaWdodCAoYykgRklSU1QgMjAwOC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4JCQkJCQkJICAqLw0KKy8qIE9wZW4gU291cmNlIFNvZnR3YXJlIC0gbWF5IGJlIG1vZGlmaWVkIGFuZCBzaGFyZWQgYnkgRlJDIHRlYW1zLiBUaGUgY29kZSAgICovDQorLyogbXVzdCBiZSBhY2NvbXBhbmllZCBieSB0aGUgRklSU1QgQlNEIGxpY2Vuc2UgZmlsZSBpbiAkKFdJTkRfQkFTRSkvV1BJTGliLiAgKi8NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKyNpbmNsdWRlICJBbmFsb2dUcmlnZ2VyLmgiDQorDQorI2luY2x1ZGUgIkFuYWxvZ0NoYW5uZWwuaCINCisjaW5jbHVkZSAiQW5hbG9nTW9kdWxlLmgiDQorI2luY2x1ZGUgIk5ldHdvcmtDb21tdW5pY2F0aW9uL1VzYWdlUmVwb3J0aW5nLmgiDQorI2luY2x1ZGUgIlJlc291cmNlLmgiDQorI2luY2x1ZGUgIldQSUVycm9ycy5oIg0KKw0KK3N0YXRpYyBSZXNvdXJjZSAqdHJpZ2dlcnMgPSBOVUxMOw0KKw0KKy8qKg0KKyAqIEluaXRpYWxpemUgYW4gYW5hbG9nIHRyaWdnZXIgZnJvbSBhIHNsb3QgYW5kIGNoYW5uZWwuDQorICogVGhpcyBpcyB0aGUgY29tbW9uIGNvZGUgZm9yIHRoZSB0d28gY29uc3RydWN0b3JzIHRoYXQgdXNlIGEgc2xvdCBhbmQgY2hhbm5lbC4NCisgKi8NCit2b2lkIEFuYWxvZ1RyaWdnZXI6OkluaXRUcmlnZ2VyKFVJTlQ4IG1vZHVsZU51bWJlciwgVUlOVDMyIGNoYW5uZWwpDQorew0KKwlSZXNvdXJjZTo6Q3JlYXRlUmVzb3VyY2VPYmplY3QoJnRyaWdnZXJzLCB0QW5hbG9nVHJpZ2dlcjo6a051bVN5c3RlbXMpOw0KKwlVSU5UMzIgaW5kZXggPSB0cmlnZ2Vycy0+QWxsb2NhdGUoIkFuYWxvZyBUcmlnZ2VyIik7DQorCWlmIChpbmRleCA9PSB+MHVsKQ0KKwl7DQorCQlDbG9uZUVycm9yKHRyaWdnZXJzKTsNCisJCXJldHVybjsNCisJfQ0KKwltX2luZGV4ID0gKFVJTlQ4KWluZGV4Ow0KKwltX2NoYW5uZWwgPSBjaGFubmVsOw0KKwltX2FuYWxvZ01vZHVsZSA9IEFuYWxvZ01vZHVsZTo6R2V0SW5zdGFuY2UobW9kdWxlTnVtYmVyKTsNCisNCisJdFJpb1N0YXR1c0NvZGUgbG9jYWxTdGF0dXMgPSBOaUZwZ2FfU3RhdHVzX1N1Y2Nlc3M7DQorCW1fdHJpZ2dlciA9IHRBbmFsb2dUcmlnZ2VyOjpjcmVhdGUobV9pbmRleCwgJmxvY2FsU3RhdHVzKTsNCisJbV90cmlnZ2VyLT53cml0ZVNvdXJjZVNlbGVjdF9DaGFubmVsKG1fY2hhbm5lbCAtIDEsICZsb2NhbFN0YXR1cyk7DQorCW1fdHJpZ2dlci0+d3JpdGVTb3VyY2VTZWxlY3RfTW9kdWxlKG1vZHVsZU51bWJlciAtIDEsICZsb2NhbFN0YXR1cyk7DQorCXdwaV9zZXRFcnJvcihsb2NhbFN0YXR1cyk7DQorDQorCW5Vc2FnZVJlcG9ydGluZzo6cmVwb3J0KG5Vc2FnZVJlcG9ydGluZzo6a1Jlc291cmNlVHlwZV9BbmFsb2dUcmlnZ2VyLCBtX2NoYW5uZWwsIG1vZHVsZU51bWJlciAtIDEpOw0KK30NCisNCisvKioNCisgKiBDb25zdHJ1Y3RvciBmb3IgYW4gYW5hbG9nIHRyaWdnZXIgZ2l2ZW4gYSBjaGFubmVsIG51bWJlci4NCisgKiBUaGUgZGVmYXVsdCBtb2R1bGUgaXMgdXNlZCBpbiB0aGlzIGNhc2UuDQorICoNCisgKiBAcGFyYW0gY2hhbm5lbCBUaGUgYW5hbG9nIGNoYW5uZWwgKDEuLjgpLg0KKyAqLw0KK0FuYWxvZ1RyaWdnZXI6OkFuYWxvZ1RyaWdnZXIoVUlOVDMyIGNoYW5uZWwpDQorew0KKwlJbml0VHJpZ2dlcihHZXREZWZhdWx0QW5hbG9nTW9kdWxlKCksIGNoYW5uZWwpOw0KK30NCisNCisvKioNCisgKiBDb25zdHJ1Y3RvciBmb3IgYW4gYW5hbG9nIHRyaWdnZXIgZ2l2ZW4gYm90aCB0aGUgc2xvdCBhbmQgY2hhbm5lbC4NCisgKg0KKyAqIEBwYXJhbSBtb2R1bGVOdW1iZXIgVGhlIGFuYWxvZyBtb2R1bGUgKDEgb3IgMikuDQorICogQHBhcmFtIGNoYW5uZWwgVGhlIGFuYWxvZyBjaGFubmVsICgxLi44KS4NCisgKi8NCitBbmFsb2dUcmlnZ2VyOjpBbmFsb2dUcmlnZ2VyKFVJTlQ4IG1vZHVsZU51bWJlciwgVUlOVDMyIGNoYW5uZWwpDQorew0KKwlJbml0VHJpZ2dlcihtb2R1bGVOdW1iZXIsIGNoYW5uZWwpOw0KK30NCisNCisvKioNCisgKiBDb25zdHJ1Y3QgYW4gYW5hbG9nIHRyaWdnZXIgZ2l2ZW4gYW4gYW5hbG9nIGNoYW5uZWwuDQorICogVGhpcyBzaG91bGQgYmUgdXNlZCBpbiB0aGUgY2FzZSBvZiBzaGFyaW5nIGFuIGFuYWxvZyBjaGFubmVsIGJldHdlZW4gdGhlIHRyaWdnZXINCisgKiBhbmQgYW4gYW5hbG9nIGlucHV0IG9iamVjdC4NCisgKi8NCitBbmFsb2dUcmlnZ2VyOjpBbmFsb2dUcmlnZ2VyKEFuYWxvZ0NoYW5uZWwgKmNoYW5uZWwpDQorew0KKwlJbml0VHJpZ2dlcihjaGFubmVsLT5HZXRNb2R1bGVOdW1iZXIoKSwgY2hhbm5lbC0+R2V0Q2hhbm5lbCgpKTsNCit9DQorDQorQW5hbG9nVHJpZ2dlcjo6fkFuYWxvZ1RyaWdnZXIoKQ0KK3sNCisJdHJpZ2dlcnMtPkZyZWUobV9pbmRleCk7DQorCWRlbGV0ZSBtX3RyaWdnZXI7DQorfQ0KKw0KKy8qKg0KKyAqIFNldCB0aGUgdXBwZXIgYW5kIGxvd2VyIGxpbWl0cyBvZiB0aGUgYW5hbG9nIHRyaWdnZXIuDQorICogVGhlIGxpbWl0cyBhcmUgZ2l2ZW4gaW4gQURDIGNvZGVzLiAgSWYgb3ZlcnNhbXBsaW5nIGlzIHVzZWQsIHRoZSB1bml0cyBtdXN0IGJlIHNjYWxlZA0KKyAqIGFwcHJvcHJpYXRlbHkuDQorICovDQordm9pZCBBbmFsb2dUcmlnZ2VyOjpTZXRMaW1pdHNSYXcoSU5UMzIgbG93ZXIsIElOVDMyIHVwcGVyKQ0KK3sNCisJaWYgKFN0YXR1c0lzRmF0YWwoKSkgcmV0dXJuOw0KKwlpZiAobG93ZXIgPiB1cHBlcikNCisJew0KKwkJd3BpX3NldFdQSUVycm9yKEFuYWxvZ1RyaWdnZXJMaW1pdE9yZGVyRXJyb3IpOw0KKwl9DQorCXRSaW9TdGF0dXNDb2RlIGxvY2FsU3RhdHVzID0gTmlGcGdhX1N0YXR1c19TdWNjZXNzOw0KKwltX3RyaWdnZXItPndyaXRlTG93ZXJMaW1pdChsb3dlciwgJmxvY2FsU3RhdHVzKTsNCisJbV90cmlnZ2VyLT53cml0ZVVwcGVyTGltaXQodXBwZXIsICZsb2NhbFN0YXR1cyk7DQorCXdwaV9zZXRFcnJvcihsb2NhbFN0YXR1cyk7DQorfQ0KKw0KKy8qKg0KKyAqIFNldCB0aGUgdXBwZXIgYW5kIGxvd2VyIGxpbWl0cyBvZiB0aGUgYW5hbG9nIHRyaWdnZXIuDQorICogVGhlIGxpbWl0cyBhcmUgZ2l2ZW4gYXMgZmxvYXRpbmcgcG9pbnQgdm9sdGFnZSB2YWx1ZXMuDQorICovDQordm9pZCBBbmFsb2dUcmlnZ2VyOjpTZXRMaW1pdHNWb2x0YWdlKGZsb2F0IGxvd2VyLCBmbG9hdCB1cHBlcikNCit7DQorCWlmIChTdGF0dXNJc0ZhdGFsKCkpIHJldHVybjsNCisJaWYgKGxvd2VyID4gdXBwZXIpDQorCXsNCisJCXdwaV9zZXRXUElFcnJvcihBbmFsb2dUcmlnZ2VyTGltaXRPcmRlckVycm9yKTsNCisJfQ0KKwkvLyBUT0RPOiBUaGlzIGRlcGVuZHMgb24gdGhlIGF2ZXJhZ2VkIHNldHRpbmcuICBPbmx5IHJhdyB2YWx1ZXMgd2lsbCB3b3JrIGFzIGlzLg0KKwl0UmlvU3RhdHVzQ29kZSBsb2NhbFN0YXR1cyA9IE5pRnBnYV9TdGF0dXNfU3VjY2VzczsNCisJbV90cmlnZ2VyLT53cml0ZUxvd2VyTGltaXQobV9hbmFsb2dNb2R1bGUtPlZvbHRzVG9WYWx1ZShtX2NoYW5uZWwsIGxvd2VyKSwgJmxvY2FsU3RhdHVzKTsNCisJbV90cmlnZ2VyLT53cml0ZVVwcGVyTGltaXQobV9hbmFsb2dNb2R1bGUtPlZvbHRzVG9WYWx1ZShtX2NoYW5uZWwsIHVwcGVyKSwgJmxvY2FsU3RhdHVzKTsNCisJd3BpX3NldEVycm9yKGxvY2FsU3RhdHVzKTsNCit9DQorDQorLyoqDQorICogQ29uZmlndXJlIHRoZSBhbmFsb2cgdHJpZ2dlciB0byB1c2UgdGhlIGF2ZXJhZ2VkIHZzLiByYXcgdmFsdWVzLg0KKyAqIElmIHRoZSB2YWx1ZSBpcyB0cnVlLCB0aGVuIHRoZSBhdmVyYWdlZCB2YWx1ZSBpcyBzZWxlY3RlZCBmb3IgdGhlIGFuYWxvZyB0cmlnZ2VyLCBvdGhlcndpc2UNCisgKiB0aGUgaW1tZWRpYXRlIHZhbHVlIGlzIHVzZWQuDQorICovDQordm9pZCBBbmFsb2dUcmlnZ2VyOjpTZXRBdmVyYWdlZChib29sIHVzZUF2ZXJhZ2VkVmFsdWUpDQorew0KKwlpZiAoU3RhdHVzSXNGYXRhbCgpKSByZXR1cm47DQorCXRSaW9TdGF0dXNDb2RlIGxvY2FsU3RhdHVzID0gTmlGcGdhX1N0YXR1c19TdWNjZXNzOw0KKwlpZiAobV90cmlnZ2VyLT5yZWFkU291cmNlU2VsZWN0X0ZpbHRlcigmbG9jYWxTdGF0dXMpICE9IDApDQorCQl3cGlfc2V0V1BJRXJyb3JXaXRoQ29udGV4dChJbmNvbXBhdGlibGVNb2RlLCAiSGFyZHdhcmUgZG9lcyBub3Qgc3VwcG9ydCBhdmVyYWdlIGFuZCBmaWx0ZXJpbmcgYXQgdGhlIHNhbWUgdGltZS4iKTsNCisJbV90cmlnZ2VyLT53cml0ZVNvdXJjZVNlbGVjdF9BdmVyYWdlZCh1c2VBdmVyYWdlZFZhbHVlLCAmbG9jYWxTdGF0dXMpOw0KKwl3cGlfc2V0RXJyb3IobG9jYWxTdGF0dXMpOw0KK30NCisNCisvKioNCisgKiBDb25maWd1cmUgdGhlIGFuYWxvZyB0cmlnZ2VyIHRvIHVzZSBhIGZpbHRlcmVkIHZhbHVlLg0KKyAqIFRoZSBhbmFsb2cgdHJpZ2dlciB3aWxsIG9wZXJhdGUgd2l0aCBhIDMgcG9pbnQgYXZlcmFnZSByZWplY3Rpb24gZmlsdGVyLiBUaGlzIGlzIGRlc2lnbmVkIHRvDQorICogaGVscCB3aXRoIDM2MCBkZWdyZWUgcG90IGFwcGxpY2F0aW9ucyBmb3IgdGhlIHBlcmlvZCB3aGVyZSB0aGUgcG90IGNyb3NzZXMgdGhyb3VnaCB6ZXJvLg0KKyAqLw0KK3ZvaWQgQW5hbG9nVHJpZ2dlcjo6U2V0RmlsdGVyZWQoYm9vbCB1c2VGaWx0ZXJlZFZhbHVlKQ0KK3sNCisJaWYgKFN0YXR1c0lzRmF0YWwoKSkgcmV0dXJuOw0KKwl0UmlvU3RhdHVzQ29kZSBsb2NhbFN0YXR1cyA9IE5pRnBnYV9TdGF0dXNfU3VjY2VzczsNCisJaWYgKG1fdHJpZ2dlci0+cmVhZFNvdXJjZVNlbGVjdF9BdmVyYWdlZCgmbG9jYWxTdGF0dXMpICE9IDApDQorCQl3cGlfc2V0V1BJRXJyb3JXaXRoQ29udGV4dChJbmNvbXBhdGlibGVNb2RlLCAiSGFyZHdhcmUgZG9lcyBub3Qgc3VwcG9ydCBhdmVyYWdlIGFuZCBmaWx0ZXJpbmcgYXQgdGhlIHNhbWUgdGltZS4iKTsNCisJbV90cmlnZ2VyLT53cml0ZVNvdXJjZVNlbGVjdF9GaWx0ZXIodXNlRmlsdGVyZWRWYWx1ZSwgJmxvY2FsU3RhdHVzKTsNCisJd3BpX3NldEVycm9yKGxvY2FsU3RhdHVzKTsNCit9DQorDQorLyoqDQorICogUmV0dXJuIHRoZSBpbmRleCBvZiB0aGUgYW5hbG9nIHRyaWdnZXIuDQorICogVGhpcyBpcyB0aGUgRlBHQSBpbmRleCBvZiB0aGlzIGFuYWxvZyB0cmlnZ2VyIGluc3RhbmNlLg0KKyAqIEByZXR1cm4gVGhlIGluZGV4IG9mIHRoZSBhbmFsb2cgdHJpZ2dlci4NCisgKi8NCitVSU5UMzIgQW5hbG9nVHJpZ2dlcjo6R2V0SW5kZXgoKQ0KK3sNCisJaWYgKFN0YXR1c0lzRmF0YWwoKSkgcmV0dXJuIH4wdWw7DQorCXJldHVybiBtX2luZGV4Ow0KK30NCisNCisvKioNCisgKiBSZXR1cm4gdGhlIEluV2luZG93IG91dHB1dCBvZiB0aGUgYW5hbG9nIHRyaWdnZXIuDQorICogVHJ1ZSBpZiB0aGUgYW5hbG9nIGlucHV0IGlzIGJldHdlZW4gdGhlIHVwcGVyIGFuZCBsb3dlciBsaW1pdHMuDQorICogQHJldHVybiBUaGUgSW5XaW5kb3cgb3V0cHV0IG9mIHRoZSBhbmFsb2cgdHJpZ2dlci4NCisgKi8NCitib29sIEFuYWxvZ1RyaWdnZXI6OkdldEluV2luZG93KCkNCit7DQorCWlmIChTdGF0dXNJc0ZhdGFsKCkpIHJldHVybiBmYWxzZTsNCisJdFJpb1N0YXR1c0NvZGUgbG9jYWxTdGF0dXMgPSBOaUZwZ2FfU3RhdHVzX1N1Y2Nlc3M7DQorCWJvb2wgcmVzdWx0ID0gbV90cmlnZ2VyLT5yZWFkT3V0cHV0X0luSHlzdGVyZXNpcyhtX2luZGV4LCAmbG9jYWxTdGF0dXMpICE9IDA7DQorCXdwaV9zZXRFcnJvcihsb2NhbFN0YXR1cyk7DQorCXJldHVybiByZXN1bHQ7DQorfQ0KKw0KKy8qKg0KKyAqIFJldHVybiB0aGUgVHJpZ2dlclN0YXRlIG91dHB1dCBvZiB0aGUgYW5hbG9nIHRyaWdnZXIuDQorICogVHJ1ZSBpZiBhYm92ZSB1cHBlciBsaW1pdC4NCisgKiBGYWxzZSBpZiBiZWxvdyBsb3dlciBsaW1pdC4NCisgKiBJZiBpbiBIeXN0ZXJlc2lzLCBtYWludGFpbiBwcmV2aW91cyBzdGF0ZS4NCisgKiBAcmV0dXJuIFRoZSBUcmlnZ2VyU3RhdGUgb3V0cHV0IG9mIHRoZSBhbmFsb2cgdHJpZ2dlci4NCisgKi8NCitib29sIEFuYWxvZ1RyaWdnZXI6OkdldFRyaWdnZXJTdGF0ZSgpDQorew0KKwlpZiAoU3RhdHVzSXNGYXRhbCgpKSByZXR1cm4gZmFsc2U7DQorCXRSaW9TdGF0dXNDb2RlIGxvY2FsU3RhdHVzID0gTmlGcGdhX1N0YXR1c19TdWNjZXNzOw0KKwlib29sIHJlc3VsdCA9IG1fdHJpZ2dlci0+cmVhZE91dHB1dF9PdmVyTGltaXQobV9pbmRleCwgJmxvY2FsU3RhdHVzKSAhPSAwOw0KKwl3cGlfc2V0RXJyb3IobG9jYWxTdGF0dXMpOw0KKwlyZXR1cm4gcmVzdWx0Ow0KK30NCisNCisvKioNCisgKiBDcmVhdGVzIGFuIEFuYWxvZ1RyaWdnZXJPdXRwdXQgb2JqZWN0Lg0KKyAqIEdldHMgYW4gb3V0cHV0IG9iamVjdCB0aGF0IGNhbiBiZSB1c2VkIGZvciByb3V0aW5nLg0KKyAqIENhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgZGVsZXRpbmcgdGhlIEFuYWxvZ1RyaWdnZXJPdXRwdXQgb2JqZWN0Lg0KKyAqIEBwYXJhbSB0eXBlIEFuIGVudW0gb2YgdGhlIHR5cGUgb2Ygb3V0cHV0IG9iamVjdCB0byBjcmVhdGUuDQorICogQHJldHVybiBBIHBvaW50ZXIgdG8gYSBuZXcgQW5hbG9nVHJpZ2dlck91dHB1dCBvYmplY3QuDQorICovDQorQW5hbG9nVHJpZ2dlck91dHB1dCAqQW5hbG9nVHJpZ2dlcjo6Q3JlYXRlT3V0cHV0KEFuYWxvZ1RyaWdnZXJPdXRwdXQ6OlR5cGUgdHlwZSkNCit7DQorCWlmIChTdGF0dXNJc0ZhdGFsKCkpIHJldHVybiBOVUxMOw0KKwlyZXR1cm4gbmV3IEFuYWxvZ1RyaWdnZXJPdXRwdXQodGhpcywgdHlwZSk7DQorfQ0KKw0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0FuYWxvZ1RyaWdnZXIuaCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0FuYWxvZ1RyaWdnZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjk1YTMzCi0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvQW5hbG9nVHJpZ2dlci5oCkBAIC0wLDAgKzEsNDQgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorLyogQ29weXJpZ2h0IChjKSBGSVJTVCAyMDA4LiBBbGwgUmlnaHRzIFJlc2VydmVkLgkJCQkJCQkgICovDQorLyogT3BlbiBTb3VyY2UgU29mdHdhcmUgLSBtYXkgYmUgbW9kaWZpZWQgYW5kIHNoYXJlZCBieSBGUkMgdGVhbXMuIFRoZSBjb2RlICAgKi8NCisvKiBtdXN0IGJlIGFjY29tcGFuaWVkIGJ5IHRoZSBGSVJTVCBCU0QgbGljZW5zZSBmaWxlIGluICQoV0lORF9CQVNFKS9XUElMaWIuICAqLw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorI2lmbmRlZiBBTkFMT0dfVFJJR0dFUl9IXw0KKyNkZWZpbmUgQU5BTE9HX1RSSUdHRVJfSF8NCisNCisjaW5jbHVkZSAiQW5hbG9nVHJpZ2dlck91dHB1dC5oIg0KKyNpbmNsdWRlICJTZW5zb3JCYXNlLmgiDQorDQorY2xhc3MgQW5hbG9nQ2hhbm5lbDsNCitjbGFzcyBBbmFsb2dNb2R1bGU7DQorDQorY2xhc3MgQW5hbG9nVHJpZ2dlcjogcHVibGljIFNlbnNvckJhc2UNCit7DQorCWZyaWVuZCBjbGFzcyBBbmFsb2dUcmlnZ2VyT3V0cHV0Ow0KK3B1YmxpYzoNCisJQW5hbG9nVHJpZ2dlcihVSU5UOCBtb2R1bGVOdW1iZXIsIFVJTlQzMiBjaGFubmVsKTsNCisJZXhwbGljaXQgQW5hbG9nVHJpZ2dlcihVSU5UMzIgY2hhbm5lbCk7DQorCWV4cGxpY2l0IEFuYWxvZ1RyaWdnZXIoQW5hbG9nQ2hhbm5lbCAqY2hhbm5lbCk7DQorCXZpcnR1YWwgfkFuYWxvZ1RyaWdnZXIoKTsNCisNCisJdm9pZCBTZXRMaW1pdHNWb2x0YWdlKGZsb2F0IGxvd2VyLCBmbG9hdCB1cHBlcik7DQorCXZvaWQgU2V0TGltaXRzUmF3KElOVDMyIGxvd2VyLCBJTlQzMiB1cHBlcik7DQorCXZvaWQgU2V0QXZlcmFnZWQoYm9vbCB1c2VBdmVyYWdlZFZhbHVlKTsNCisJdm9pZCBTZXRGaWx0ZXJlZChib29sIHVzZUZpbHRlcmVkVmFsdWUpOw0KKwlVSU5UMzIgR2V0SW5kZXgoKTsNCisJYm9vbCBHZXRJbldpbmRvdygpOw0KKwlib29sIEdldFRyaWdnZXJTdGF0ZSgpOw0KKwlBbmFsb2dUcmlnZ2VyT3V0cHV0ICpDcmVhdGVPdXRwdXQoQW5hbG9nVHJpZ2dlck91dHB1dDo6VHlwZSB0eXBlKTsNCisNCitwcml2YXRlOg0KKwl2b2lkIEluaXRUcmlnZ2VyKFVJTlQ4IG1vZHVsZU51bWJlciwgVUlOVDMyIGNoYW5uZWwpOw0KKw0KKwlVSU5UOCBtX2luZGV4Ow0KKwl0QW5hbG9nVHJpZ2dlciAqbV90cmlnZ2VyOw0KKwlBbmFsb2dNb2R1bGUgKm1fYW5hbG9nTW9kdWxlOw0KKwlVSU5UMzIgbV9jaGFubmVsOw0KK307DQorDQorI2VuZGlmDQorDQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvQW5hbG9nVHJpZ2dlck91dHB1dC5jcHAgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9BbmFsb2dUcmlnZ2VyT3V0cHV0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTNlZjVjCi0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvQW5hbG9nVHJpZ2dlck91dHB1dC5jcHAKQEAgLTAsMCArMSw5NCBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBDb3B5cmlnaHQgKGMpIEZJUlNUIDIwMDguIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCQkJCQkJCSAgKi8NCisvKiBPcGVuIFNvdXJjZSBTb2Z0d2FyZSAtIG1heSBiZSBtb2RpZmllZCBhbmQgc2hhcmVkIGJ5IEZSQyB0ZWFtcy4gVGhlIGNvZGUgICAqLw0KKy8qIG11c3QgYmUgYWNjb21wYW5pZWQgYnkgdGhlIEZJUlNUIEJTRCBsaWNlbnNlIGZpbGUgaW4gJChXSU5EX0JBU0UpL1dQSUxpYi4gICovDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisjaW5jbHVkZSAiQW5hbG9nVHJpZ2dlck91dHB1dC5oIg0KKyNpbmNsdWRlICJBbmFsb2dUcmlnZ2VyLmgiDQorI2luY2x1ZGUgIk5ldHdvcmtDb21tdW5pY2F0aW9uL1VzYWdlUmVwb3J0aW5nLmgiDQorI2luY2x1ZGUgIldQSUVycm9ycy5oIg0KKw0KKy8qKg0KKyAqIENyZWF0ZSBhbiBvYmplY3QgdGhhdCByZXByZXNlbnRzIG9uZSBvZiB0aGUgZm91ciBvdXRwdXRzIGZyb20gYW4gYW5hbG9nIHRyaWdnZXIuDQorICogDQorICogQmVjYXVzZSB0aGlzIGNsYXNzIGRlcml2ZXMgZnJvbSBEaWdpdGFsU291cmNlLCBpdCBjYW4gYmUgcGFzc2VkIGludG8gcm91dGluZyBmdW5jdGlvbnMNCisgKiBmb3IgQ291bnRlciwgRW5jb2RlciwgZXRjLg0KKyAqIA0KKyAqIEBwYXJhbSB0cmlnZ2VyIEEgcG9pbnRlciB0byB0aGUgdHJpZ2dlciBmb3Igd2hpY2ggdGhpcyBpcyBhbiBvdXRwdXQuDQorICogQHBhcmFtIG91dHB1dFR5cGUgQW4gZW51bSB0aGF0IHNwZWNpZmllcyB0aGUgb3V0cHV0IG9uIHRoZSB0cmlnZ2VyIHRvIHJlcHJlc2VudC4NCisgKi8NCitBbmFsb2dUcmlnZ2VyT3V0cHV0OjpBbmFsb2dUcmlnZ2VyT3V0cHV0KEFuYWxvZ1RyaWdnZXIgKnRyaWdnZXIsIEFuYWxvZ1RyaWdnZXJPdXRwdXQ6OlR5cGUgb3V0cHV0VHlwZSkNCisJOiBtX3RyaWdnZXIgKHRyaWdnZXIpDQorCSwgbV9vdXRwdXRUeXBlIChvdXRwdXRUeXBlKQ0KK3sNCisJblVzYWdlUmVwb3J0aW5nOjpyZXBvcnQoblVzYWdlUmVwb3J0aW5nOjprUmVzb3VyY2VUeXBlX0FuYWxvZ1RyaWdnZXJPdXRwdXQsIHRyaWdnZXItPkdldEluZGV4KCksIG91dHB1dFR5cGUpOw0KK30NCisNCitBbmFsb2dUcmlnZ2VyT3V0cHV0Ojp+QW5hbG9nVHJpZ2dlck91dHB1dCgpDQorew0KK30NCisNCisvKioNCisgKiBHZXQgdGhlIHN0YXRlIG9mIHRoZSBhbmFsb2cgdHJpZ2dlciBvdXRwdXQuDQorICogQHJldHVybiBUaGUgc3RhdGUgb2YgdGhlIGFuYWxvZyB0cmlnZ2VyIG91dHB1dC4NCisgKi8NCitib29sIEFuYWxvZ1RyaWdnZXJPdXRwdXQ6OkdldCgpDQorew0KKwl0UmlvU3RhdHVzQ29kZSBsb2NhbFN0YXR1cyA9IE5pRnBnYV9TdGF0dXNfU3VjY2VzczsNCisJYm9vbCByZXN1bHQgPSBmYWxzZTsNCisJc3dpdGNoKG1fb3V0cHV0VHlwZSkNCisJew0KKwljYXNlIGtJbldpbmRvdzoNCisJCXJlc3VsdCA9IG1fdHJpZ2dlci0+bV90cmlnZ2VyLT5yZWFkT3V0cHV0X0luSHlzdGVyZXNpcyhtX3RyaWdnZXItPm1faW5kZXgsICZsb2NhbFN0YXR1cyk7DQorCWNhc2Uga1N0YXRlOg0KKwkJcmVzdWx0ID0gbV90cmlnZ2VyLT5tX3RyaWdnZXItPnJlYWRPdXRwdXRfT3ZlckxpbWl0KG1fdHJpZ2dlci0+bV9pbmRleCwgJmxvY2FsU3RhdHVzKTsNCisJY2FzZSBrUmlzaW5nUHVsc2U6DQorCWNhc2Uga0ZhbGxpbmdQdWxzZToNCisJCXdwaV9zZXRXUElFcnJvcihBbmFsb2dUcmlnZ2VyUHVsc2VPdXRwdXRFcnJvcik7DQorCQlyZXR1cm4gZmFsc2U7DQorCX0NCisJd3BpX3NldEVycm9yKGxvY2FsU3RhdHVzKTsNCisJcmV0dXJuIHJlc3VsdDsNCit9DQorDQorLyoqDQorICogQHJldHVybiBUaGUgdmFsdWUgdG8gYmUgd3JpdHRlbiB0byB0aGUgY2hhbm5lbCBmaWVsZCBvZiBhIHJvdXRpbmcgbXV4Lg0KKyAqLw0KK1VJTlQzMiBBbmFsb2dUcmlnZ2VyT3V0cHV0OjpHZXRDaGFubmVsRm9yUm91dGluZygpDQorew0KKwlyZXR1cm4gKG1fdHJpZ2dlci0+bV9pbmRleCA8PCAyKSArIG1fb3V0cHV0VHlwZTsNCit9DQorDQorLyoqDQorICogQHJldHVybiBUaGUgdmFsdWUgdG8gYmUgd3JpdHRlbiB0byB0aGUgbW9kdWxlIGZpZWxkIG9mIGEgcm91dGluZyBtdXguDQorICovDQorVUlOVDMyIEFuYWxvZ1RyaWdnZXJPdXRwdXQ6OkdldE1vZHVsZUZvclJvdXRpbmcoKQ0KK3sNCisJcmV0dXJuIG1fdHJpZ2dlci0+bV9pbmRleCA+PiAyOw0KK30NCisNCisvKioNCisgKiBAcmV0dXJuIFRoZSB2YWx1ZSB0byBiZSB3cml0dGVuIHRvIHRoZSBtb2R1bGUgZmllbGQgb2YgYSByb3V0aW5nIG11eC4NCisgKi8NCitib29sIEFuYWxvZ1RyaWdnZXJPdXRwdXQ6OkdldEFuYWxvZ1RyaWdnZXJGb3JSb3V0aW5nKCkNCit7DQorCXJldHVybiB0cnVlOw0KK30NCisNCisvKioNCisgKiBSZXF1ZXN0IGludGVycnVwdHMgYXN5bmNocm9ub3VzbHkgb24gdGhpcyBhbmFsb2cgdHJpZ2dlciBvdXRwdXQuDQorICogVE9ETzogSGFyZHdhcmUgc3VwcG9ydHMgaW50ZXJydXB0cyBvbiBBbmFsb2cgVHJpZ2dlciBvdXRwdXRzLi4uIFdQSUxpYiBzaG91bGQgdG9vDQorICovDQordm9pZCBBbmFsb2dUcmlnZ2VyT3V0cHV0OjpSZXF1ZXN0SW50ZXJydXB0cyh0SW50ZXJydXB0SGFuZGxlciBoYW5kbGVyLCB2b2lkICpwYXJhbSkNCit7DQorfQ0KKw0KKy8qKg0KKyAqIFJlcXVlc3QgaW50ZXJydXB0cyBzeW5jaHJvbm91c2x5IG9uIHRoaXMgYW5hbG9nIHRyaWdnZXIgb3V0cHV0Lg0KKyAqIFRPRE86IEhhcmR3YXJlIHN1cHBvcnRzIGludGVycnVwdHMgb24gQW5hbG9nIFRyaWdnZXIgb3V0cHV0cy4uLiBXUElMaWIgc2hvdWxkIHRvbw0KKyAqLw0KK3ZvaWQgQW5hbG9nVHJpZ2dlck91dHB1dDo6UmVxdWVzdEludGVycnVwdHMoKQ0KK3sNCit9DQorDQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvQW5hbG9nVHJpZ2dlck91dHB1dC5oIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvQW5hbG9nVHJpZ2dlck91dHB1dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1NjNjZjYKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9BbmFsb2dUcmlnZ2VyT3V0cHV0LmgKQEAgLTAsMCArMSw2NSBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBDb3B5cmlnaHQgKGMpIEZJUlNUIDIwMDguIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCQkJCQkJCSAgKi8NCisvKiBPcGVuIFNvdXJjZSBTb2Z0d2FyZSAtIG1heSBiZSBtb2RpZmllZCBhbmQgc2hhcmVkIGJ5IEZSQyB0ZWFtcy4gVGhlIGNvZGUgICAqLw0KKy8qIG11c3QgYmUgYWNjb21wYW5pZWQgYnkgdGhlIEZJUlNUIEJTRCBsaWNlbnNlIGZpbGUgaW4gJChXSU5EX0JBU0UpL1dQSUxpYi4gICovDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisjaWZuZGVmIEFOQUxPR19UUklHR0VSX09VVFBVVF9IXw0KKyNkZWZpbmUgQU5BTE9HX1RSSUdHRVJfT1VUUFVUX0hfDQorDQorI2luY2x1ZGUgIkRpZ2l0YWxTb3VyY2UuaCINCisNCitjbGFzcyBBbmFsb2dUcmlnZ2VyOw0KKw0KKy8qKg0KKyAqIENsYXNzIHRvIHJlcHJlc2VudCBhIHNwZWNpZmljIG91dHB1dCBmcm9tIGFuIGFuYWxvZyB0cmlnZ2VyLg0KKyAqIFRoaXMgY2xhc3MgaXMgdXNlZCB0byBnZXQgdGhlIGN1cnJlbnQgb3V0cHV0IHZhbHVlIGFuZCBhbHNvIGFzIGEgRGlnaXRhbFNvdXJjZQ0KKyAqIHRvIHByb3ZpZGUgcm91dGluZyBvZiBhbiBvdXRwdXQgdG8gZGlnaXRhbCBzdWJzeXN0ZW1zIG9uIHRoZSBGUEdBIHN1Y2ggYXMNCisgKiBDb3VudGVyLCBFbmNvZGVyLCBhbmQgSW50ZXJydXB0Lg0KKyAqIA0KKyAqIFRoZSBUcmlnZ2VyU3RhdGUgb3V0cHV0IGluZGljYXRlcyB0aGUgcHJpbWFyeSBvdXRwdXQgdmFsdWUgb2YgdGhlIHRyaWdnZXIuICBJZiB0aGUgYW5hbG9nDQorICogc2lnbmFsIGlzIGxlc3MgdGhhbiB0aGUgbG93ZXIgbGltaXQsIHRoZSBvdXRwdXQgaXMgZmFsc2UuICBJZiB0aGUgYW5hbG9nIHZhbHVlIGlzIGdyZWF0ZXINCisgKiB0aGFuIHRoZSB1cHBlciBsaW1pdCwgdGhlbiB0aGUgb3V0cHV0IGlzIHRydWUuICBJZiB0aGUgYW5hbG9nIHZhbHVlIGlzIGluIGJldHdlZW4sIHRoZW4NCisgKiB0aGUgdHJpZ2dlciBvdXRwdXQgc3RhdGUgbWFpbnRhaW5zIGl0cyBtb3N0IHJlY2VudCB2YWx1ZS4NCisgKiANCisgKiBUaGUgSW5XaW5kb3cgb3V0cHV0IGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgYW5hbG9nIHNpZ25hbCBpcyBpbnNpZGUgdGhlIHJhbmdlIGRlZmluZWQNCisgKiBieSB0aGUgbGltaXRzLg0KKyAqIA0KKyAqIFRoZSBSaXNpbmdQdWxzZSBhbmQgRmFsbGluZ1B1bHNlIG91dHB1dHMgZGV0ZWN0IGFuIGluc3RhbnRhbmVvdXMgdHJhbnNpdGlvbiBmcm9tIGFib3ZlIHRoZQ0KKyAqIHVwcGVyIGxpbWl0IHRvIGJlbG93IHRoZSBsb3dlciBsaW1pdCwgYW5kIHZpc2UgdmVyc2EuICBUaGVzZSBwdWxzZXMgcmVwcmVzZW50IGEgcm9sbG92ZXINCisgKiBjb25kaXRpb24gb2YgYSBzZW5zb3IgYW5kIGNhbiBiZSByb3V0ZWQgdG8gYW4gdXAgLyBkb3duIGNvdXRlciBvciB0byBpbnRlcnJ1cHRzLiAgQmVjYXVzZQ0KKyAqIHRoZSBvdXRwdXRzIGdlbmVyYXRlIGEgcHVsc2UsIHRoZXkgY2Fubm90IGJlIHJlYWQgZGlyZWN0bHkuICBUbyBoZWxwIGVuc3VyZSB0aGF0IGEgcm9sbG92ZXINCisgKiBjb25kaXRpb24gaXMgbm90IG1pc3NlZCwgdGhlcmUgaXMgYW4gYXZlcmFnZSByZWplY3Rpb24gZmlsdGVyIGF2YWlsYWJsZSB0aGF0IG9wZXJhdGVzIG9uIHRoZQ0KKyAqIHVwcGVyIDggYml0cyBvZiBhIDEyIGJpdCBudW1iZXIgYW5kIHNlbGVjdHMgdGhlIG5lYXJlc3Qgb3V0bHllciBvZiAzIHNhbXBsZXMuICBUaGlzIHdpbGwgcmVqZWN0DQorICogYSBzYW1wbGUgdGhhdCBpcyAoZHVlIHRvIGF2ZXJhZ2luZyBvciBzYW1wbGluZykgZXJyYW50bHkgYmV0d2VlbiB0aGUgdHdvIGxpbWl0cy4gIFRoaXMgZmlsdGVyDQorICogd2lsbCBmYWlsIGlmIG1vcmUgdGhhbiBvbmUgc2FtcGxlIGluIGEgcm93IGlzIGVycmFudGx5IGluIGJldHdlZW4gdGhlIHR3byBsaW1pdHMuICBZb3UgbWF5IHNlZQ0KKyAqIHRoaXMgcHJvYmxlbSBpZiBhdHRlbXB0aW5nIHRvIHVzZSB0aGlzIGZlYXR1cmUgd2l0aCBhIG1lY2hhbmljYWwgcm9sbG92ZXIgc2Vuc29yLCBzdWNoIGFzIGENCisgKiAzNjAgZGVncmVlIG5vLXN0b3AgcG90ZW50aW9tZXRlciB3aXRob3V0IHNpZ25hbCBjb25kaXRpb25pbmcsIGJlY2F1c2UgdGhlIHJvbGxvdmVyIHRyYW5zaXRpb24NCisgKiBpcyBub3Qgc2hhcnAgLyBjbGVhbiBlbm91Z2guICBVc2luZyB0aGUgYXZlcmFnaW5nIGVuZ2luZSBtYXkgaGVscCB3aXRoIHRoaXMsIGJ1dCByb3RhdGlvbmFsIHNwZWVkcyBvZg0KKyAqIHRoZSBzZW5zb3Igd2lsbCB0aGVuIGJlIGxpbWl0ZWQuDQorICovDQorY2xhc3MgQW5hbG9nVHJpZ2dlck91dHB1dDogcHVibGljIERpZ2l0YWxTb3VyY2UNCit7DQorCWZyaWVuZCBjbGFzcyBBbmFsb2dUcmlnZ2VyOw0KK3B1YmxpYzoNCisJdHlwZWRlZiBlbnVtIHtrSW5XaW5kb3c9MCwga1N0YXRlPTEsIGtSaXNpbmdQdWxzZT0yLCBrRmFsbGluZ1B1bHNlPTN9IFR5cGU7DQorCQ0KKwl2aXJ0dWFsIH5BbmFsb2dUcmlnZ2VyT3V0cHV0KCk7DQorCWJvb2wgR2V0KCk7DQorDQorCS8vIERpZ2l0YWxTb3VyY2UgaW50ZXJmYWNlDQorCXZpcnR1YWwgVUlOVDMyIEdldENoYW5uZWxGb3JSb3V0aW5nKCk7DQorCXZpcnR1YWwgVUlOVDMyIEdldE1vZHVsZUZvclJvdXRpbmcoKTsNCisJdmlydHVhbCBib29sIEdldEFuYWxvZ1RyaWdnZXJGb3JSb3V0aW5nKCk7DQorCXZpcnR1YWwgdm9pZCBSZXF1ZXN0SW50ZXJydXB0cyh0SW50ZXJydXB0SGFuZGxlciBoYW5kbGVyLCB2b2lkICpwYXJhbT1OVUxMKTsgLy8vPCBBc3luY2hyb251cyBoYW5kbGVyIHZlcnNpb24uDQorCXZpcnR1YWwgdm9pZCBSZXF1ZXN0SW50ZXJydXB0cygpOwkJLy8vPCBTeW5jaHJvbnVzIFdhaXQgdmVyc2lvbi4NCitwcm90ZWN0ZWQ6DQorCUFuYWxvZ1RyaWdnZXJPdXRwdXQoQW5hbG9nVHJpZ2dlciAqdHJpZ2dlciwgVHlwZSBvdXRwdXRUeXBlKTsNCisNCitwcml2YXRlOg0KKwlBbmFsb2dUcmlnZ2VyICptX3RyaWdnZXI7DQorCVR5cGUgbV9vdXRwdXRUeXBlOw0KK307DQorDQorDQorI2VuZGlmDQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvQmFzZS5oIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvQmFzZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3NGEyNWQKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9CYXNlLmgKQEAgLTAsMCArMSwxNiBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBDb3B5cmlnaHQgKGMpIEZJUlNUIDIwMDguIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCQkJCQkJCSAgKi8NCisvKiBPcGVuIFNvdXJjZSBTb2Z0d2FyZSAtIG1heSBiZSBtb2RpZmllZCBhbmQgc2hhcmVkIGJ5IEZSQyB0ZWFtcy4gVGhlIGNvZGUgICAqLw0KKy8qIG11c3QgYmUgYWNjb21wYW5pZWQgYnkgdGhlIEZJUlNUIEJTRCBsaWNlbnNlIGZpbGUgaW4gJChXSU5EX0JBU0UpL1dQSUxpYi4gICovDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisjaWZuZGVmIF9CQVNFX0gNCisjZGVmaW5lIF9CQVNFX0gNCisNCisvLyBBIG1hY3JvIHRvIGRpc2FsbG93IHRoZSBjb3B5IGNvbnN0cnVjdG9yIGFuZCBvcGVyYXRvcj0gZnVuY3Rpb25zDQorLy8gVGhpcyBzaG91bGQgYmUgdXNlZCBpbiB0aGUgcHJpdmF0ZTogZGVjbGFyYXRpb25zIGZvciBhIGNsYXNzDQorI2RlZmluZSBESVNBTExPV19DT1BZX0FORF9BU1NJR04oVHlwZU5hbWUpIFwNCisgIFR5cGVOYW1lKGNvbnN0IFR5cGVOYW1lJik7ICAgICAgICAgICAgICAgXA0KKyAgdm9pZCBvcGVyYXRvcj0oY29uc3QgVHlwZU5hbWUmKQ0KKw0KKyNlbmRpZg0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0J1dHRvbnMvQW5hbG9nSU9CdXR0b24uY3BwIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvQnV0dG9ucy9BbmFsb2dJT0J1dHRvbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjRiMDllZQotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0J1dHRvbnMvQW5hbG9nSU9CdXR0b24uY3BwCkBAIC0wLDAgKzEsMjAgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorLyogQ29weXJpZ2h0IChjKSBGSVJTVCAyMDExLiBBbGwgUmlnaHRzIFJlc2VydmVkLgkJCQkJCQkgICovDQorLyogT3BlbiBTb3VyY2UgU29mdHdhcmUgLSBtYXkgYmUgbW9kaWZpZWQgYW5kIHNoYXJlZCBieSBGUkMgdGVhbXMuIFRoZSBjb2RlICAgKi8NCisvKiBtdXN0IGJlIGFjY29tcGFuaWVkIGJ5IHRoZSBGSVJTVCBCU0QgbGljZW5zZSBmaWxlIGluICQoV0lORF9CQVNFKS9XUElMaWIuICAqLw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorI2luY2x1ZGUgIkJ1dHRvbnMvQW5hbG9nSU9CdXR0b24uaCINCisjaW5jbHVkZSAiRHJpdmVyU3RhdGlvbi5oIg0KKw0KK2NvbnN0IGRvdWJsZSBBbmFsb2dJT0J1dHRvbjo6a1RocmVzaG9sZCA9IDAuNTsNCisNCitBbmFsb2dJT0J1dHRvbjo6QW5hbG9nSU9CdXR0b24oaW50IHBvcnQpIDoNCisJbV9wb3J0KHBvcnQpDQorew0KK30NCisNCitib29sIEFuYWxvZ0lPQnV0dG9uOjpHZXQoKQ0KK3sNCisJcmV0dXJuIERyaXZlclN0YXRpb246OkdldEluc3RhbmNlKCktPkdldEVuaGFuY2VkSU8oKS5HZXRBbmFsb2dJbihtX3BvcnQpIDwga1RocmVzaG9sZDsNCit9DQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvQnV0dG9ucy9BbmFsb2dJT0J1dHRvbi5oIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvQnV0dG9ucy9BbmFsb2dJT0J1dHRvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyNjE0NzkKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9CdXR0b25zL0FuYWxvZ0lPQnV0dG9uLmgKQEAgLTAsMCArMSwyNiBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBDb3B5cmlnaHQgKGMpIEZJUlNUIDIwMTEuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCQkJCQkJCSAgKi8NCisvKiBPcGVuIFNvdXJjZSBTb2Z0d2FyZSAtIG1heSBiZSBtb2RpZmllZCBhbmQgc2hhcmVkIGJ5IEZSQyB0ZWFtcy4gVGhlIGNvZGUgICAqLw0KKy8qIG11c3QgYmUgYWNjb21wYW5pZWQgYnkgdGhlIEZJUlNUIEJTRCBsaWNlbnNlIGZpbGUgaW4gJChXSU5EX0JBU0UpL1dQSUxpYi4gICovDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisjaWZuZGVmIF9fQU5BTE9HX0lPX0JVVFRPTl9IX18NCisjZGVmaW5lIF9fQU5BTE9HX0lPX0JVVFRPTl9IX18NCisNCisjaW5jbHVkZSAiQnV0dG9ucy9CdXR0b24uaCINCisNCitjbGFzcyBBbmFsb2dJT0J1dHRvbiA6IHB1YmxpYyBUcmlnZ2VyDQorew0KK3B1YmxpYzoNCisJc3RhdGljIGNvbnN0IGRvdWJsZSBrVGhyZXNob2xkOw0KKw0KKwlBbmFsb2dJT0J1dHRvbihpbnQgcG9ydCk7DQorCXZpcnR1YWwgfkFuYWxvZ0lPQnV0dG9uKCkge30NCisJdmlydHVhbCBib29sIEdldCgpOw0KKw0KK3ByaXZhdGU6DQorCWludCBtX3BvcnQ7DQorfTsNCisNCisjZW5kaWYNCisNCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9CdXR0b25zL0J1dHRvbi5jcHAgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9CdXR0b25zL0J1dHRvbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmIzNjFkNAotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0J1dHRvbnMvQnV0dG9uLmNwcApAQCAtMCwwICsxLDM0IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy8qIENvcHlyaWdodCAoYykgRklSU1QgMjAxMS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4JCQkJCQkJICAqLw0KKy8qIE9wZW4gU291cmNlIFNvZnR3YXJlIC0gbWF5IGJlIG1vZGlmaWVkIGFuZCBzaGFyZWQgYnkgRlJDIHRlYW1zLiBUaGUgY29kZSAgICovDQorLyogbXVzdCBiZSBhY2NvbXBhbmllZCBieSB0aGUgRklSU1QgQlNEIGxpY2Vuc2UgZmlsZSBpbiAkKFdJTkRfQkFTRSkvV1BJTGliLiAgKi8NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKyNpbmNsdWRlICJCdXR0b24uaCINCisNCisvKioNCisgKiBTcGVjaWZpZXMgdGhlIGNvbW1hbmQgdG8gcnVuIHdoZW4gYSBidXR0b24gaXMgZmlyc3QgcHJlc3NlZA0KKyAqIEBwYXJhbSBjb21tYW5kIFRoZSBwb2ludGVyIHRvIHRoZSBjb21tYW5kIHRvIHJ1bg0KKyAqLw0KK3ZvaWQgQnV0dG9uOjpXaGVuUHJlc3NlZChDb21tYW5kICpjb21tYW5kKSB7DQorCVdoZW5BY3RpdmUoY29tbWFuZCk7DQorfQ0KKw0KKy8qKg0KKyAqIFNwZWNpZmllcyB0aGUgY29tbWFuZCB0byBiZSBzY2hlZHVsZWQgd2hpbGUgdGhlIGJ1dHRvbiBpcyBwcmVzc2VkDQorICogVGhlIGNvbW1hbmQgd2lsbCBiZSBzY2hlZHVsZWQgcmVwZWF0ZWRseSB3aGlsZSB0aGUgYnV0dG9uIGlzIHByZXNzZWQgYW5kIHdpbGwNCisgKiBiZSBjYW5jZWxlZCB3aGVuIHRoZSBidXR0b24gaXMgcmVsZWFzZWQuDQorICogQHBhcmFtIGNvbW1hbmQgVGhlIHBvaW50ZXIgdG8gdGhlIGNvbW1hbmQgdG8gcnVuDQorICovDQordm9pZCBCdXR0b246OldoaWxlSGVsZChDb21tYW5kICpjb21tYW5kKSB7DQorCVdoaWxlQWN0aXZlKGNvbW1hbmQpOw0KK30NCisNCisvKioNCisgKiBTcGVjaWZpZXMgdGhlIGNvbW1hbmQgdG8gcnVuIHdoZW4gdGhlIGJ1dHRvbiBpcyByZWxlYXNlZA0KKyAqIFRoZSBjb21tYW5kIHdpbGwgYmUgc2NoZWR1bGVkIGEgc2luZ2xlIHRpbWUuDQorICogQHBhcmFtIFRoZSBwb2ludGVyIHRvIHRoZSBjb21tYW5kIHRvIHJ1bg0KKyAqLw0KK3ZvaWQgQnV0dG9uOjpXaGVuUmVsZWFzZWQoQ29tbWFuZCAqY29tbWFuZCkgew0KKwlXaGVuSW5hY3RpdmUoY29tbWFuZCk7DQorfQ0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0J1dHRvbnMvQnV0dG9uLmggYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9CdXR0b25zL0J1dHRvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlYTY3OTkKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9CdXR0b25zL0J1dHRvbi5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorLyogQ29weXJpZ2h0IChjKSBGSVJTVCAyMDExLiBBbGwgUmlnaHRzIFJlc2VydmVkLgkJCQkJCQkgICovDQorLyogT3BlbiBTb3VyY2UgU29mdHdhcmUgLSBtYXkgYmUgbW9kaWZpZWQgYW5kIHNoYXJlZCBieSBGUkMgdGVhbXMuIFRoZSBjb2RlICAgKi8NCisvKiBtdXN0IGJlIGFjY29tcGFuaWVkIGJ5IHRoZSBGSVJTVCBCU0QgbGljZW5zZSBmaWxlIGluICQoV0lORF9CQVNFKS9XUElMaWIuICAqLw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorI2lmbmRlZiBfX0JVVFRPTl9IX18NCisjZGVmaW5lIF9fQlVUVE9OX0hfXw0KKw0KKyNpbmNsdWRlICJCdXR0b25zL1RyaWdnZXIuaCINCisjaW5jbHVkZSAiQ29tbWFuZHMvQ29tbWFuZC5oIg0KKw0KKy8qKg0KKyAqIFRoaXMgY2xhc3MgcHJvdmlkZXMgYW4gZWFzeSB3YXkgdG8gbGluayBjb21tYW5kcyB0byBPSSBpbnB1dHMuDQorICoNCisgKiBJdCBpcyB2ZXJ5IGVhc3kgdG8gbGluayBhIGJ1dHRvbiB0byBhIGNvbW1hbmQuICBGb3IgaW5zdGFuY2UsIHlvdSBjb3VsZA0KKyAqIGxpbmsgdGhlIHRyaWdnZXIgYnV0dG9uIG9mIGEgam95c3RpY2sgdG8gYSAic2NvcmUiIGNvbW1hbmQuDQorICoNCisgKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMgYSBzdWJjbGFzcyBvZiBUcmlnZ2VyIHRoYXQgaXMgc3BlY2lmaWNhbGx5IGFpbWVkIGF0DQorICogYnV0dG9ucyBvbiBhbiBvcGVyYXRvciBpbnRlcmZhY2UgYXMgYSBjb21tb24gdXNlIGNhc2Ugb2YgdGhlIG1vcmUgZ2VuZXJhbGl6ZWQNCisgKiBUcmlnZ2VyIG9iamVjdHMuIFRoaXMgaXMgYSBzaW1wbGUgd3JhcHBlciBhcm91bmQgVHJpZ2dlciB3aXRoIHRoZSBtZXRob2QgbmFtZXMNCisgKiByZW5hbWVkIHRvIGZpdCB0aGUgQnV0dG9uIG9iamVjdCB1c2UuDQorICogDQorICogQGF1dGhvciBicmFkDQorICovDQorY2xhc3MgQnV0dG9uIDogcHVibGljIFRyaWdnZXIgew0KK3B1YmxpYzoNCisJdmlydHVhbCB2b2lkIFdoZW5QcmVzc2VkKENvbW1hbmQgKmNvbW1hbmQpOw0KKwl2aXJ0dWFsIHZvaWQgV2hpbGVIZWxkKENvbW1hbmQgKmNvbW1hbmQpOw0KKwl2aXJ0dWFsIHZvaWQgV2hlblJlbGVhc2VkKENvbW1hbmQgKmNvbW1hbmQpOw0KK307DQorDQorI2VuZGlmDQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvQnV0dG9ucy9CdXR0b25TY2hlZHVsZXIuY3BwIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvQnV0dG9ucy9CdXR0b25TY2hlZHVsZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmMjMzMTIKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9CdXR0b25zL0J1dHRvblNjaGVkdWxlci5jcHAKQEAgLTAsMCArMSwyMSBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBDb3B5cmlnaHQgKGMpIEZJUlNUIDIwMTEuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCQkJCQkJCSAgKi8NCisvKiBPcGVuIFNvdXJjZSBTb2Z0d2FyZSAtIG1heSBiZSBtb2RpZmllZCBhbmQgc2hhcmVkIGJ5IEZSQyB0ZWFtcy4gVGhlIGNvZGUgICAqLw0KKy8qIG11c3QgYmUgYWNjb21wYW5pZWQgYnkgdGhlIEZJUlNUIEJTRCBsaWNlbnNlIGZpbGUgaW4gJChXSU5EX0JBU0UpL1dQSUxpYi4gICovDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisjaW5jbHVkZSAiQnV0dG9ucy9CdXR0b25TY2hlZHVsZXIuaCINCisNCisjaW5jbHVkZSAiQ29tbWFuZHMvU2NoZWR1bGVyLmgiDQorDQorQnV0dG9uU2NoZWR1bGVyOjpCdXR0b25TY2hlZHVsZXIoYm9vbCBsYXN0LCBUcmlnZ2VyICpidXR0b24sIENvbW1hbmQgKm9yZGVycykgOg0KKwltX3ByZXNzZWRMYXN0KGxhc3QpLA0KKwltX2J1dHRvbihidXR0b24pLA0KKwltX2NvbW1hbmQob3JkZXJzKQ0KK3sNCit9DQorDQordm9pZCBCdXR0b25TY2hlZHVsZXI6OlN0YXJ0KCkNCit7DQorCVNjaGVkdWxlcjo6R2V0SW5zdGFuY2UoKS0+QWRkQnV0dG9uKHRoaXMpOw0KK30NCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9CdXR0b25zL0J1dHRvblNjaGVkdWxlci5oIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvQnV0dG9ucy9CdXR0b25TY2hlZHVsZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTI0M2FhCi0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvQnV0dG9ucy9CdXR0b25TY2hlZHVsZXIuaApAQCAtMCwwICsxLDI3IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy8qIENvcHlyaWdodCAoYykgRklSU1QgMjAxMS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4JCQkJCQkJICAqLw0KKy8qIE9wZW4gU291cmNlIFNvZnR3YXJlIC0gbWF5IGJlIG1vZGlmaWVkIGFuZCBzaGFyZWQgYnkgRlJDIHRlYW1zLiBUaGUgY29kZSAgICovDQorLyogbXVzdCBiZSBhY2NvbXBhbmllZCBieSB0aGUgRklSU1QgQlNEIGxpY2Vuc2UgZmlsZSBpbiAkKFdJTkRfQkFTRSkvV1BJTGliLiAgKi8NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKyNpZm5kZWYgX19CVVRUT05fU0NIRURVTEVSX0hfXw0KKyNkZWZpbmUgX19CVVRUT05fU0NIRURVTEVSX0hfXw0KKw0KK2NsYXNzIFRyaWdnZXI7DQorY2xhc3MgQ29tbWFuZDsNCisNCitjbGFzcyBCdXR0b25TY2hlZHVsZXINCit7DQorcHVibGljOg0KKwlCdXR0b25TY2hlZHVsZXIoYm9vbCBsYXN0LCBUcmlnZ2VyICpidXR0b24sIENvbW1hbmQgKm9yZGVycyk7DQorCXZpcnR1YWwgfkJ1dHRvblNjaGVkdWxlcigpIHt9DQorCXZpcnR1YWwgdm9pZCBFeGVjdXRlKCkgPSAwOw0KKwl2b2lkIFN0YXJ0KCk7DQorDQorcHJvdGVjdGVkOg0KKwlib29sIG1fcHJlc3NlZExhc3Q7DQorCVRyaWdnZXIgKm1fYnV0dG9uOw0KKwlDb21tYW5kICptX2NvbW1hbmQ7DQorfTsNCisNCisjZW5kaWYNCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9CdXR0b25zL0RpZ2l0YWxJT0J1dHRvbi5jcHAgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9CdXR0b25zL0RpZ2l0YWxJT0J1dHRvbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDkzM2FjMgotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0J1dHRvbnMvRGlnaXRhbElPQnV0dG9uLmNwcApAQCAtMCwwICsxLDIwIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy8qIENvcHlyaWdodCAoYykgRklSU1QgMjAxMS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4JCQkJCQkJICAqLw0KKy8qIE9wZW4gU291cmNlIFNvZnR3YXJlIC0gbWF5IGJlIG1vZGlmaWVkIGFuZCBzaGFyZWQgYnkgRlJDIHRlYW1zLiBUaGUgY29kZSAgICovDQorLyogbXVzdCBiZSBhY2NvbXBhbmllZCBieSB0aGUgRklSU1QgQlNEIGxpY2Vuc2UgZmlsZSBpbiAkKFdJTkRfQkFTRSkvV1BJTGliLiAgKi8NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKyNpbmNsdWRlICJCdXR0b25zL0RpZ2l0YWxJT0J1dHRvbi5oIg0KKyNpbmNsdWRlICJEcml2ZXJTdGF0aW9uLmgiDQorDQorY29uc3QgYm9vbCBEaWdpdGFsSU9CdXR0b246OmtBY3RpdmVTdGF0ZSA9IGZhbHNlOw0KKw0KK0RpZ2l0YWxJT0J1dHRvbjo6RGlnaXRhbElPQnV0dG9uKGludCBwb3J0KSA6DQorCW1fcG9ydChwb3J0KQ0KK3sNCit9DQorDQorYm9vbCBEaWdpdGFsSU9CdXR0b246OkdldCgpDQorew0KKwlyZXR1cm4gRHJpdmVyU3RhdGlvbjo6R2V0SW5zdGFuY2UoKS0+R2V0RW5oYW5jZWRJTygpLkdldERpZ2l0YWwobV9wb3J0KSA9PSBrQWN0aXZlU3RhdGU7DQorfQ0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0J1dHRvbnMvRGlnaXRhbElPQnV0dG9uLmggYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9CdXR0b25zL0RpZ2l0YWxJT0J1dHRvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2ODI0NzEKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9CdXR0b25zL0RpZ2l0YWxJT0J1dHRvbi5oCkBAIC0wLDAgKzEsMjYgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorLyogQ29weXJpZ2h0IChjKSBGSVJTVCAyMDExLiBBbGwgUmlnaHRzIFJlc2VydmVkLgkJCQkJCQkgICovDQorLyogT3BlbiBTb3VyY2UgU29mdHdhcmUgLSBtYXkgYmUgbW9kaWZpZWQgYW5kIHNoYXJlZCBieSBGUkMgdGVhbXMuIFRoZSBjb2RlICAgKi8NCisvKiBtdXN0IGJlIGFjY29tcGFuaWVkIGJ5IHRoZSBGSVJTVCBCU0QgbGljZW5zZSBmaWxlIGluICQoV0lORF9CQVNFKS9XUElMaWIuICAqLw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorI2lmbmRlZiBfX0RJR0lUQUxfSU9fQlVUVE9OX0hfXw0KKyNkZWZpbmUgX19ESUdJVEFMX0lPX0JVVFRPTl9IX18NCisNCisjaW5jbHVkZSAiQnV0dG9ucy9CdXR0b24uaCINCisNCitjbGFzcyBEaWdpdGFsSU9CdXR0b246IHB1YmxpYyBCdXR0b24NCit7DQorcHVibGljOg0KKwlzdGF0aWMgY29uc3QgYm9vbCBrQWN0aXZlU3RhdGU7DQorDQorCURpZ2l0YWxJT0J1dHRvbihpbnQgcG9ydCk7DQorCXZpcnR1YWwgfkRpZ2l0YWxJT0J1dHRvbigpIHt9DQorDQorCXZpcnR1YWwgYm9vbCBHZXQoKTsNCisNCitwcml2YXRlOg0KKwlpbnQgbV9wb3J0Ow0KK307DQorDQorI2VuZGlmDQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvQnV0dG9ucy9IZWxkQnV0dG9uU2NoZWR1bGVyLmNwcCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0J1dHRvbnMvSGVsZEJ1dHRvblNjaGVkdWxlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDFhZGRkNQotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0J1dHRvbnMvSGVsZEJ1dHRvblNjaGVkdWxlci5jcHAKQEAgLTAsMCArMSwzMiBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBDb3B5cmlnaHQgKGMpIEZJUlNUIDIwMTEuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCQkJCQkJCSAgKi8NCisvKiBPcGVuIFNvdXJjZSBTb2Z0d2FyZSAtIG1heSBiZSBtb2RpZmllZCBhbmQgc2hhcmVkIGJ5IEZSQyB0ZWFtcy4gVGhlIGNvZGUgICAqLw0KKy8qIG11c3QgYmUgYWNjb21wYW5pZWQgYnkgdGhlIEZJUlNUIEJTRCBsaWNlbnNlIGZpbGUgaW4gJChXSU5EX0JBU0UpL1dQSUxpYi4gICovDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisjaW5jbHVkZSAiQnV0dG9ucy9IZWxkQnV0dG9uU2NoZWR1bGVyLmgiDQorDQorI2luY2x1ZGUgIkJ1dHRvbnMvQnV0dG9uLmgiDQorI2luY2x1ZGUgIkNvbW1hbmRzL0NvbW1hbmQuaCINCisNCitIZWxkQnV0dG9uU2NoZWR1bGVyOjpIZWxkQnV0dG9uU2NoZWR1bGVyKGJvb2wgbGFzdCwgVHJpZ2dlciAqYnV0dG9uLCBDb21tYW5kICpvcmRlcnMpIDoNCisJQnV0dG9uU2NoZWR1bGVyKGxhc3QsIGJ1dHRvbiwgb3JkZXJzKQ0KK3sNCit9DQorDQordm9pZCBIZWxkQnV0dG9uU2NoZWR1bGVyOjpFeGVjdXRlKCkNCit7DQorCWlmIChtX2J1dHRvbi0+R3JhYigpKQ0KKwl7DQorCQltX3ByZXNzZWRMYXN0ID0gdHJ1ZTsNCisJCW1fY29tbWFuZC0+U3RhcnQoKTsNCisJfQ0KKwllbHNlDQorCXsNCisJCWlmIChtX3ByZXNzZWRMYXN0KQ0KKwkJew0KKwkJCW1fcHJlc3NlZExhc3QgPSBmYWxzZTsNCisJCQltX2NvbW1hbmQtPkNhbmNlbCgpOw0KKwkJfQ0KKwl9DQorfQ0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0J1dHRvbnMvSGVsZEJ1dHRvblNjaGVkdWxlci5oIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvQnV0dG9ucy9IZWxkQnV0dG9uU2NoZWR1bGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTM3ODgwZQotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0J1dHRvbnMvSGVsZEJ1dHRvblNjaGVkdWxlci5oCkBAIC0wLDAgKzEsMjMgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorLyogQ29weXJpZ2h0IChjKSBGSVJTVCAyMDExLiBBbGwgUmlnaHRzIFJlc2VydmVkLgkJCQkJCQkgICovDQorLyogT3BlbiBTb3VyY2UgU29mdHdhcmUgLSBtYXkgYmUgbW9kaWZpZWQgYW5kIHNoYXJlZCBieSBGUkMgdGVhbXMuIFRoZSBjb2RlICAgKi8NCisvKiBtdXN0IGJlIGFjY29tcGFuaWVkIGJ5IHRoZSBGSVJTVCBCU0QgbGljZW5zZSBmaWxlIGluICQoV0lORF9CQVNFKS9XUElMaWIuICAqLw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorI2lmbmRlZiBfX0hFTERfQlVUVE9OX1NDSEVEVUxFUl9IX18NCisjZGVmaW5lIF9fSEVMRF9CVVRUT05fU0NIRURVTEVSX0hfXw0KKw0KKyNpbmNsdWRlICJCdXR0b25zL0J1dHRvblNjaGVkdWxlci5oIg0KKw0KK2NsYXNzIFRyaWdnZXI7DQorY2xhc3MgQ29tbWFuZDsNCisNCitjbGFzcyBIZWxkQnV0dG9uU2NoZWR1bGVyIDogcHVibGljIEJ1dHRvblNjaGVkdWxlcg0KK3sNCitwdWJsaWM6DQorCUhlbGRCdXR0b25TY2hlZHVsZXIoYm9vbCBsYXN0LCBUcmlnZ2VyICpidXR0b24sIENvbW1hbmQgKm9yZGVycyk7DQorCXZpcnR1YWwgfkhlbGRCdXR0b25TY2hlZHVsZXIoKSB7fQ0KKwl2aXJ0dWFsIHZvaWQgRXhlY3V0ZSgpOw0KK307DQorDQorI2VuZGlmDQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvQnV0dG9ucy9JbnRlcm5hbEJ1dHRvbi5jcHAgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9CdXR0b25zL0ludGVybmFsQnV0dG9uLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNGFiMDZhCi0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvQnV0dG9ucy9JbnRlcm5hbEJ1dHRvbi5jcHAKQEAgLTAsMCArMSwzNCBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBDb3B5cmlnaHQgKGMpIEZJUlNUIDIwMTEuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCQkJCQkJCSAgKi8NCisvKiBPcGVuIFNvdXJjZSBTb2Z0d2FyZSAtIG1heSBiZSBtb2RpZmllZCBhbmQgc2hhcmVkIGJ5IEZSQyB0ZWFtcy4gVGhlIGNvZGUgICAqLw0KKy8qIG11c3QgYmUgYWNjb21wYW5pZWQgYnkgdGhlIEZJUlNUIEJTRCBsaWNlbnNlIGZpbGUgaW4gJChXSU5EX0JBU0UpL1dQSUxpYi4gICovDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisjaW5jbHVkZSAiQnV0dG9ucy9JbnRlcm5hbEJ1dHRvbi5oIg0KKw0KK0ludGVybmFsQnV0dG9uOjpJbnRlcm5hbEJ1dHRvbigpIDoNCisJbV9wcmVzc2VkKGZhbHNlKSwNCisJbV9pbnZlcnRlZChmYWxzZSkNCit7DQorfQ0KKw0KK0ludGVybmFsQnV0dG9uOjpJbnRlcm5hbEJ1dHRvbihib29sIGludmVydGVkKSA6DQorCW1fcHJlc3NlZChpbnZlcnRlZCksDQorCW1faW52ZXJ0ZWQoaW52ZXJ0ZWQpDQorew0KK30NCisNCit2b2lkIEludGVybmFsQnV0dG9uOjpTZXRJbnZlcnRlZChib29sIGludmVydGVkKQ0KK3sNCisJbV9pbnZlcnRlZCA9IGludmVydGVkOw0KK30NCisNCit2b2lkIEludGVybmFsQnV0dG9uOjpTZXRQcmVzc2VkKGJvb2wgcHJlc3NlZCkNCit7DQorCW1fcHJlc3NlZCA9IHByZXNzZWQ7DQorfQ0KKw0KK2Jvb2wgSW50ZXJuYWxCdXR0b246OkdldCgpDQorew0KKwlyZXR1cm4gbV9wcmVzc2VkIF4gbV9pbnZlcnRlZDsNCit9DQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvQnV0dG9ucy9JbnRlcm5hbEJ1dHRvbi5oIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvQnV0dG9ucy9JbnRlcm5hbEJ1dHRvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4ZDc4ZmEKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9CdXR0b25zL0ludGVybmFsQnV0dG9uLmgKQEAgLTAsMCArMSwyOSBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBDb3B5cmlnaHQgKGMpIEZJUlNUIDIwMTEuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCQkJCQkJCSAgKi8NCisvKiBPcGVuIFNvdXJjZSBTb2Z0d2FyZSAtIG1heSBiZSBtb2RpZmllZCBhbmQgc2hhcmVkIGJ5IEZSQyB0ZWFtcy4gVGhlIGNvZGUgICAqLw0KKy8qIG11c3QgYmUgYWNjb21wYW5pZWQgYnkgdGhlIEZJUlNUIEJTRCBsaWNlbnNlIGZpbGUgaW4gJChXSU5EX0JBU0UpL1dQSUxpYi4gICovDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisjaWZuZGVmIF9fSU5URVJOQUxfQlVUVE9OX0hfXw0KKyNkZWZpbmUgX19JTlRFUk5BTF9CVVRUT05fSF9fDQorDQorI2luY2x1ZGUgIkJ1dHRvbnMvQnV0dG9uLmgiDQorDQorY2xhc3MgSW50ZXJuYWxCdXR0b24gOiBwdWJsaWMgQnV0dG9uDQorew0KK3B1YmxpYzoNCisJSW50ZXJuYWxCdXR0b24oKTsNCisJSW50ZXJuYWxCdXR0b24oYm9vbCBpbnZlcnRlZCk7DQorCXZpcnR1YWwgfkludGVybmFsQnV0dG9uKCkge30NCisNCisJdm9pZCBTZXRJbnZlcnRlZChib29sIGludmVydGVkKTsNCisJdm9pZCBTZXRQcmVzc2VkKGJvb2wgcHJlc3NlZCk7DQorDQorCXZpcnR1YWwgYm9vbCBHZXQoKTsNCisNCitwcml2YXRlOg0KKwlib29sIG1fcHJlc3NlZDsNCisJYm9vbCBtX2ludmVydGVkOw0KK307DQorDQorI2VuZGlmDQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvQnV0dG9ucy9Kb3lzdGlja0J1dHRvbi5jcHAgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9CdXR0b25zL0pveXN0aWNrQnV0dG9uLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZmUwOTZkCi0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvQnV0dG9ucy9Kb3lzdGlja0J1dHRvbi5jcHAKQEAgLTAsMCArMSwxOCBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBDb3B5cmlnaHQgKGMpIEZJUlNUIDIwMTEuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCQkJCQkJCSAgKi8NCisvKiBPcGVuIFNvdXJjZSBTb2Z0d2FyZSAtIG1heSBiZSBtb2RpZmllZCBhbmQgc2hhcmVkIGJ5IEZSQyB0ZWFtcy4gVGhlIGNvZGUgICAqLw0KKy8qIG11c3QgYmUgYWNjb21wYW5pZWQgYnkgdGhlIEZJUlNUIEJTRCBsaWNlbnNlIGZpbGUgaW4gJChXSU5EX0JBU0UpL1dQSUxpYi4gICovDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisjaW5jbHVkZSAiQnV0dG9ucy9Kb3lzdGlja0J1dHRvbi5oIg0KKw0KK0pveXN0aWNrQnV0dG9uOjpKb3lzdGlja0J1dHRvbihHZW5lcmljSElEICpqb3lzdGljaywgaW50IGJ1dHRvbk51bWJlcikgOg0KKwltX2pveXN0aWNrKGpveXN0aWNrKSwNCisJbV9idXR0b25OdW1iZXIoYnV0dG9uTnVtYmVyKQ0KK3sNCit9DQorDQorYm9vbCBKb3lzdGlja0J1dHRvbjo6R2V0KCkNCit7DQorICAgIHJldHVybiBtX2pveXN0aWNrLT5HZXRSYXdCdXR0b24obV9idXR0b25OdW1iZXIpOw0KK30NCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9CdXR0b25zL0pveXN0aWNrQnV0dG9uLmggYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9CdXR0b25zL0pveXN0aWNrQnV0dG9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjRmMzQ4MAotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0J1dHRvbnMvSm95c3RpY2tCdXR0b24uaApAQCAtMCwwICsxLDI2IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy8qIENvcHlyaWdodCAoYykgRklSU1QgMjAxMS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4JCQkJCQkJICAqLw0KKy8qIE9wZW4gU291cmNlIFNvZnR3YXJlIC0gbWF5IGJlIG1vZGlmaWVkIGFuZCBzaGFyZWQgYnkgRlJDIHRlYW1zLiBUaGUgY29kZSAgICovDQorLyogbXVzdCBiZSBhY2NvbXBhbmllZCBieSB0aGUgRklSU1QgQlNEIGxpY2Vuc2UgZmlsZSBpbiAkKFdJTkRfQkFTRSkvV1BJTGliLiAgKi8NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKyNpZm5kZWYgX19KT1lTVElDS19CVVRUT05fSF9fDQorI2RlZmluZSBfX0pPWVNUSUNLX0JVVFRPTl9IX18NCisNCisjaW5jbHVkZSAiR2VuZXJpY0hJRC5oIg0KKyNpbmNsdWRlICJCdXR0b25zL0J1dHRvbi5oIg0KKw0KK2NsYXNzIEpveXN0aWNrQnV0dG9uIDogcHVibGljIEJ1dHRvbg0KK3sNCitwdWJsaWM6DQorCUpveXN0aWNrQnV0dG9uKEdlbmVyaWNISUQgKmpveXN0aWNrLCBpbnQgYnV0dG9uTnVtYmVyKTsNCisJdmlydHVhbCB+Sm95c3RpY2tCdXR0b24oKSB7fQ0KKw0KKwl2aXJ0dWFsIGJvb2wgR2V0KCk7DQorDQorcHJpdmF0ZToNCisJR2VuZXJpY0hJRCAqbV9qb3lzdGljazsNCisJaW50IG1fYnV0dG9uTnVtYmVyOw0KK307DQorDQorI2VuZGlmDQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvQnV0dG9ucy9OZXR3b3JrQnV0dG9uLmNwcCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0J1dHRvbnMvTmV0d29ya0J1dHRvbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDY1OTY1ZQotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0J1dHRvbnMvTmV0d29ya0J1dHRvbi5jcHAKQEAgLTAsMCArMSwyOSBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBDb3B5cmlnaHQgKGMpIEZJUlNUIDIwMTEuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCQkJCQkJCSAgKi8NCisvKiBPcGVuIFNvdXJjZSBTb2Z0d2FyZSAtIG1heSBiZSBtb2RpZmllZCBhbmQgc2hhcmVkIGJ5IEZSQyB0ZWFtcy4gVGhlIGNvZGUgICAqLw0KKy8qIG11c3QgYmUgYWNjb21wYW5pZWQgYnkgdGhlIEZJUlNUIEJTRCBsaWNlbnNlIGZpbGUgaW4gJChXSU5EX0JBU0UpL1dQSUxpYi4gICovDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisjaW5jbHVkZSAiQnV0dG9ucy9OZXR3b3JrQnV0dG9uLmgiDQorI2luY2x1ZGUgIm5ldHdvcmt0YWJsZXMvTmV0d29ya1RhYmxlLmgiDQorDQorTmV0d29ya0J1dHRvbjo6TmV0d29ya0J1dHRvbihjb25zdCBjaGFyICp0YWJsZU5hbWUsIGNvbnN0IGNoYXIgKmZpZWxkKSA6Ly9UT0RPIGhvdyBpcyB0aGlzIHN1cHBvc2VkIHRvIHdvcms/Pz8NCisJbV9uZXRUYWJsZShOZXR3b3JrVGFibGU6OkdldFRhYmxlKHRhYmxlTmFtZSkpLA0KKwltX2ZpZWxkKGZpZWxkKQ0KK3sNCit9DQorDQorTmV0d29ya0J1dHRvbjo6TmV0d29ya0J1dHRvbihJVGFibGUgKnRhYmxlLCBjb25zdCBjaGFyICpmaWVsZCkgOg0KKwltX25ldFRhYmxlKHRhYmxlKSwNCisJbV9maWVsZChmaWVsZCkNCit7DQorfQ0KKw0KK2Jvb2wgTmV0d29ya0J1dHRvbjo6R2V0KCkNCit7DQorCS8qaWYgKG1fbmV0VGFibGUtPmlzQ29ubmVjdGVkKCkpDQorCQlyZXR1cm4gbV9uZXRUYWJsZS0+R2V0Qm9vbGVhbihtX2ZpZWxkLmNfc3RyKCkpOw0KKwllbHNlDQorCQlyZXR1cm4gZmFsc2U7Ki8NCisJcmV0dXJuIG1fbmV0VGFibGUtPkdldEJvb2xlYW4obV9maWVsZCk7DQorfQ0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0J1dHRvbnMvTmV0d29ya0J1dHRvbi5oIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvQnV0dG9ucy9OZXR3b3JrQnV0dG9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmRmZGQ5ZAotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0J1dHRvbnMvTmV0d29ya0J1dHRvbi5oCkBAIC0wLDAgKzEsMjggQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorLyogQ29weXJpZ2h0IChjKSBGSVJTVCAyMDExLiBBbGwgUmlnaHRzIFJlc2VydmVkLgkJCQkJCQkgICovDQorLyogT3BlbiBTb3VyY2UgU29mdHdhcmUgLSBtYXkgYmUgbW9kaWZpZWQgYW5kIHNoYXJlZCBieSBGUkMgdGVhbXMuIFRoZSBjb2RlICAgKi8NCisvKiBtdXN0IGJlIGFjY29tcGFuaWVkIGJ5IHRoZSBGSVJTVCBCU0QgbGljZW5zZSBmaWxlIGluICQoV0lORF9CQVNFKS9XUElMaWIuICAqLw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorI2lmbmRlZiBfX05FVFdPUktfQlVUVE9OX0hfXw0KKyNkZWZpbmUgX19ORVRXT1JLX0JVVFRPTl9IX18NCisNCisjaW5jbHVkZSAiQnV0dG9ucy9CdXR0b24uaCINCisjaW5jbHVkZSA8c3RyaW5nPg0KKw0KK2NsYXNzIE5ldHdvcmtCdXR0b24gOiBwdWJsaWMgQnV0dG9uDQorew0KK3B1YmxpYzoNCisJTmV0d29ya0J1dHRvbihjb25zdCBjaGFyICp0YWJsZU5hbWUsIGNvbnN0IGNoYXIgKmZpZWxkKTsNCisJTmV0d29ya0J1dHRvbihJVGFibGUqIHRhYmxlLCBjb25zdCBjaGFyICpmaWVsZCk7DQorCXZpcnR1YWwgfk5ldHdvcmtCdXR0b24oKSB7fQ0KKw0KKwl2aXJ0dWFsIGJvb2wgR2V0KCk7DQorDQorcHJpdmF0ZToNCisJSVRhYmxlKiBtX25ldFRhYmxlOw0KKwlzdGQ6OnN0cmluZyBtX2ZpZWxkOw0KKw0KK307DQorDQorI2VuZGlmDQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvQnV0dG9ucy9QcmVzc2VkQnV0dG9uU2NoZWR1bGVyLmNwcCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0J1dHRvbnMvUHJlc3NlZEJ1dHRvblNjaGVkdWxlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjliZTQ0NAotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0J1dHRvbnMvUHJlc3NlZEJ1dHRvblNjaGVkdWxlci5jcHAKQEAgLTAsMCArMSwzMSBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBDb3B5cmlnaHQgKGMpIEZJUlNUIDIwMTEuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCQkJCQkJCSAgKi8NCisvKiBPcGVuIFNvdXJjZSBTb2Z0d2FyZSAtIG1heSBiZSBtb2RpZmllZCBhbmQgc2hhcmVkIGJ5IEZSQyB0ZWFtcy4gVGhlIGNvZGUgICAqLw0KKy8qIG11c3QgYmUgYWNjb21wYW5pZWQgYnkgdGhlIEZJUlNUIEJTRCBsaWNlbnNlIGZpbGUgaW4gJChXSU5EX0JBU0UpL1dQSUxpYi4gICovDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisjaW5jbHVkZSAiQnV0dG9ucy9QcmVzc2VkQnV0dG9uU2NoZWR1bGVyLmgiDQorDQorI2luY2x1ZGUgIkJ1dHRvbnMvQnV0dG9uLmgiDQorI2luY2x1ZGUgIkNvbW1hbmRzL0NvbW1hbmQuaCINCisNCitQcmVzc2VkQnV0dG9uU2NoZWR1bGVyOjpQcmVzc2VkQnV0dG9uU2NoZWR1bGVyKGJvb2wgbGFzdCwgVHJpZ2dlciAqYnV0dG9uLCBDb21tYW5kICpvcmRlcnMpIDoNCisJQnV0dG9uU2NoZWR1bGVyKGxhc3QsIGJ1dHRvbiwgb3JkZXJzKQ0KK3sNCit9DQorDQordm9pZCBQcmVzc2VkQnV0dG9uU2NoZWR1bGVyOjpFeGVjdXRlKCkNCit7DQorCWlmIChtX2J1dHRvbi0+R3JhYigpKQ0KKwl7DQorCQlpZiAoIW1fcHJlc3NlZExhc3QpDQorCQl7DQorCQkJbV9wcmVzc2VkTGFzdCA9IHRydWU7DQorCQkJbV9jb21tYW5kLT5TdGFydCgpOw0KKwkJfQ0KKwl9DQorCWVsc2UNCisJew0KKwkJbV9wcmVzc2VkTGFzdCA9IGZhbHNlOw0KKwl9DQorfQ0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0J1dHRvbnMvUHJlc3NlZEJ1dHRvblNjaGVkdWxlci5oIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvQnV0dG9ucy9QcmVzc2VkQnV0dG9uU2NoZWR1bGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOThmYjk4NwotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0J1dHRvbnMvUHJlc3NlZEJ1dHRvblNjaGVkdWxlci5oCkBAIC0wLDAgKzEsMjMgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorLyogQ29weXJpZ2h0IChjKSBGSVJTVCAyMDExLiBBbGwgUmlnaHRzIFJlc2VydmVkLgkJCQkJCQkgICovDQorLyogT3BlbiBTb3VyY2UgU29mdHdhcmUgLSBtYXkgYmUgbW9kaWZpZWQgYW5kIHNoYXJlZCBieSBGUkMgdGVhbXMuIFRoZSBjb2RlICAgKi8NCisvKiBtdXN0IGJlIGFjY29tcGFuaWVkIGJ5IHRoZSBGSVJTVCBCU0QgbGljZW5zZSBmaWxlIGluICQoV0lORF9CQVNFKS9XUElMaWIuICAqLw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorI2lmbmRlZiBfX1BSRVNTRURfQlVUVE9OX1NDSEVEVUxFUl9IX18NCisjZGVmaW5lIF9fUFJFU1NFRF9CVVRUT05fU0NIRURVTEVSX0hfXw0KKw0KKyNpbmNsdWRlICJCdXR0b25zL0J1dHRvblNjaGVkdWxlci5oIg0KKw0KK2NsYXNzIFRyaWdnZXI7DQorY2xhc3MgQ29tbWFuZDsNCisNCitjbGFzcyBQcmVzc2VkQnV0dG9uU2NoZWR1bGVyIDogcHVibGljIEJ1dHRvblNjaGVkdWxlcg0KK3sNCitwdWJsaWM6DQorCVByZXNzZWRCdXR0b25TY2hlZHVsZXIoYm9vbCBsYXN0LCBUcmlnZ2VyICpidXR0b24sIENvbW1hbmQgKm9yZGVycyk7DQorCXZpcnR1YWwgflByZXNzZWRCdXR0b25TY2hlZHVsZXIoKSB7fQ0KKwl2aXJ0dWFsIHZvaWQgRXhlY3V0ZSgpOw0KK307DQorDQorI2VuZGlmDQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvQnV0dG9ucy9SZWxlYXNlZEJ1dHRvblNjaGVkdWxlci5jcHAgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9CdXR0b25zL1JlbGVhc2VkQnV0dG9uU2NoZWR1bGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDllODdmCi0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvQnV0dG9ucy9SZWxlYXNlZEJ1dHRvblNjaGVkdWxlci5jcHAKQEAgLTAsMCArMSwzMSBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBDb3B5cmlnaHQgKGMpIEZJUlNUIDIwMTEuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCQkJCQkJCSAgKi8NCisvKiBPcGVuIFNvdXJjZSBTb2Z0d2FyZSAtIG1heSBiZSBtb2RpZmllZCBhbmQgc2hhcmVkIGJ5IEZSQyB0ZWFtcy4gVGhlIGNvZGUgICAqLw0KKy8qIG11c3QgYmUgYWNjb21wYW5pZWQgYnkgdGhlIEZJUlNUIEJTRCBsaWNlbnNlIGZpbGUgaW4gJChXSU5EX0JBU0UpL1dQSUxpYi4gICovDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisjaW5jbHVkZSAiQnV0dG9ucy9SZWxlYXNlZEJ1dHRvblNjaGVkdWxlci5oIg0KKw0KKyNpbmNsdWRlICJCdXR0b25zL0J1dHRvbi5oIg0KKyNpbmNsdWRlICJDb21tYW5kcy9Db21tYW5kLmgiDQorDQorUmVsZWFzZWRCdXR0b25TY2hlZHVsZXI6OlJlbGVhc2VkQnV0dG9uU2NoZWR1bGVyKGJvb2wgbGFzdCwgVHJpZ2dlciAqYnV0dG9uLCBDb21tYW5kICpvcmRlcnMpIDoNCisJQnV0dG9uU2NoZWR1bGVyKGxhc3QsIGJ1dHRvbiwgb3JkZXJzKQ0KK3sNCit9DQorDQordm9pZCBSZWxlYXNlZEJ1dHRvblNjaGVkdWxlcjo6RXhlY3V0ZSgpDQorew0KKwlpZiAobV9idXR0b24tPkdyYWIoKSkNCisJew0KKwkJbV9wcmVzc2VkTGFzdCA9IHRydWU7DQorCX0NCisJZWxzZQ0KKwl7DQorCQlpZiAobV9wcmVzc2VkTGFzdCkNCisJCXsNCisJCQltX3ByZXNzZWRMYXN0ID0gZmFsc2U7DQorCQkJbV9jb21tYW5kLT5TdGFydCgpOw0KKwkJfQ0KKwl9DQorfQ0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0J1dHRvbnMvUmVsZWFzZWRCdXR0b25TY2hlZHVsZXIuaCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0J1dHRvbnMvUmVsZWFzZWRCdXR0b25TY2hlZHVsZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NDI2ODJkCi0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvQnV0dG9ucy9SZWxlYXNlZEJ1dHRvblNjaGVkdWxlci5oCkBAIC0wLDAgKzEsMjMgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorLyogQ29weXJpZ2h0IChjKSBGSVJTVCAyMDExLiBBbGwgUmlnaHRzIFJlc2VydmVkLgkJCQkJCQkgICovDQorLyogT3BlbiBTb3VyY2UgU29mdHdhcmUgLSBtYXkgYmUgbW9kaWZpZWQgYW5kIHNoYXJlZCBieSBGUkMgdGVhbXMuIFRoZSBjb2RlICAgKi8NCisvKiBtdXN0IGJlIGFjY29tcGFuaWVkIGJ5IHRoZSBGSVJTVCBCU0QgbGljZW5zZSBmaWxlIGluICQoV0lORF9CQVNFKS9XUElMaWIuICAqLw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorI2lmbmRlZiBfX1JFTEVBU0VEX0JVVFRPTl9TQ0hFRFVMRVJfSF9fDQorI2RlZmluZSBfX1JFTEVBU0VEX0JVVFRPTl9TQ0hFRFVMRVJfSF9fDQorDQorI2luY2x1ZGUgIkJ1dHRvbnMvQnV0dG9uU2NoZWR1bGVyLmgiDQorDQorY2xhc3MgVHJpZ2dlcjsNCitjbGFzcyBDb21tYW5kOw0KKw0KK2NsYXNzIFJlbGVhc2VkQnV0dG9uU2NoZWR1bGVyIDogcHVibGljIEJ1dHRvblNjaGVkdWxlcg0KK3sNCitwdWJsaWM6DQorCVJlbGVhc2VkQnV0dG9uU2NoZWR1bGVyKGJvb2wgbGFzdCwgVHJpZ2dlciAqYnV0dG9uLCBDb21tYW5kICpvcmRlcnMpOw0KKwl2aXJ0dWFsIH5SZWxlYXNlZEJ1dHRvblNjaGVkdWxlcigpIHt9DQorCXZpcnR1YWwgdm9pZCBFeGVjdXRlKCk7DQorfTsNCisNCisjZW5kaWYNCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9CdXR0b25zL1RyaWdnZXIuY3BwIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvQnV0dG9ucy9UcmlnZ2VyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNTRmMjczCi0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvQnV0dG9ucy9UcmlnZ2VyLmNwcApAQCAtMCwwICsxLDY1IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy8qIENvcHlyaWdodCAoYykgRklSU1QgMjAxMS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4JCQkJCQkJICAqLw0KKy8qIE9wZW4gU291cmNlIFNvZnR3YXJlIC0gbWF5IGJlIG1vZGlmaWVkIGFuZCBzaGFyZWQgYnkgRlJDIHRlYW1zLiBUaGUgY29kZSAgICovDQorLyogbXVzdCBiZSBhY2NvbXBhbmllZCBieSB0aGUgRklSU1QgQlNEIGxpY2Vuc2UgZmlsZSBpbiAkKFdJTkRfQkFTRSkvV1BJTGliLiAgKi8NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKyNpbmNsdWRlICJCdXR0b25zL0J1dHRvbi5oIg0KKw0KKyNpbmNsdWRlICJCdXR0b25zL0hlbGRCdXR0b25TY2hlZHVsZXIuaCINCisjaW5jbHVkZSAiQnV0dG9ucy9QcmVzc2VkQnV0dG9uU2NoZWR1bGVyLmgiDQorI2luY2x1ZGUgIkJ1dHRvbnMvUmVsZWFzZWRCdXR0b25TY2hlZHVsZXIuaCINCisNCitUcmlnZ2VyOjpUcmlnZ2VyKCkgew0KKwltX3RhYmxlID0gTlVMTDsNCit9DQorDQorYm9vbCBUcmlnZ2VyOjpHcmFiKCkNCit7DQorCWlmIChHZXQoKSkNCisJCXJldHVybiB0cnVlOw0KKwllbHNlIGlmIChtX3RhYmxlICE9IE5VTEwpDQorCXsNCisJCS8vaWYgKG1fdGFibGUtPmlzQ29ubmVjdGVkKCkpLy9UT0RPIGlzIGNvbm5lY3RlZCBvbiBidXR0b24/DQorCQkJcmV0dXJuIG1fdGFibGUtPkdldEJvb2xlYW4oInByZXNzZWQiKTsNCisJCS8qZWxzZQ0KKwkJCXJldHVybiBmYWxzZTsqLw0KKwl9DQorCWVsc2UNCisJCXJldHVybiBmYWxzZTsNCit9DQorDQordm9pZCBUcmlnZ2VyOjpXaGVuQWN0aXZlKENvbW1hbmQgKmNvbW1hbmQpDQorew0KKwlQcmVzc2VkQnV0dG9uU2NoZWR1bGVyICpwYnMgPSBuZXcgUHJlc3NlZEJ1dHRvblNjaGVkdWxlcihHcmFiKCksIHRoaXMsIGNvbW1hbmQpOw0KKwlwYnMtPlN0YXJ0KCk7DQorfQ0KKw0KK3ZvaWQgVHJpZ2dlcjo6V2hpbGVBY3RpdmUoQ29tbWFuZCAqY29tbWFuZCkNCit7DQorCUhlbGRCdXR0b25TY2hlZHVsZXIgKmhicyA9IG5ldyBIZWxkQnV0dG9uU2NoZWR1bGVyKEdyYWIoKSwgdGhpcywgY29tbWFuZCk7DQorCWhicy0+U3RhcnQoKTsNCit9DQorDQordm9pZCBUcmlnZ2VyOjpXaGVuSW5hY3RpdmUoQ29tbWFuZCAqY29tbWFuZCkNCit7DQorCVJlbGVhc2VkQnV0dG9uU2NoZWR1bGVyICpyYnMgPSBuZXcgUmVsZWFzZWRCdXR0b25TY2hlZHVsZXIoR3JhYigpLCB0aGlzLCBjb21tYW5kKTsNCisJcmJzLT5TdGFydCgpOw0KK30NCisNCisNCisNCitzdGQ6OnN0cmluZyBUcmlnZ2VyOjpHZXRTbWFydERhc2hib2FyZFR5cGUoKXsNCisJcmV0dXJuICJCdXR0b24iOw0KK30NCisNCit2b2lkIFRyaWdnZXI6OkluaXRUYWJsZShJVGFibGUqIHRhYmxlKXsNCisJbV90YWJsZSA9IHRhYmxlOw0KKwlpZihtX3RhYmxlIT1OVUxMKXsNCisJCW1fdGFibGUtPlB1dEJvb2xlYW4oInByZXNzZWQiLCBHZXQoKSk7DQorCX0NCit9DQorDQorSVRhYmxlKiBUcmlnZ2VyOjpHZXRUYWJsZSgpew0KKwlyZXR1cm4gbV90YWJsZTsNCit9DQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvQnV0dG9ucy9UcmlnZ2VyLmggYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9CdXR0b25zL1RyaWdnZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYzQwZTllCi0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvQnV0dG9ucy9UcmlnZ2VyLmgKQEAgLTAsMCArMSw0NyBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBDb3B5cmlnaHQgKGMpIEZJUlNUIDIwMTEuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCQkJCQkJCSAgKi8NCisvKiBPcGVuIFNvdXJjZSBTb2Z0d2FyZSAtIG1heSBiZSBtb2RpZmllZCBhbmQgc2hhcmVkIGJ5IEZSQyB0ZWFtcy4gVGhlIGNvZGUgICAqLw0KKy8qIG11c3QgYmUgYWNjb21wYW5pZWQgYnkgdGhlIEZJUlNUIEJTRCBsaWNlbnNlIGZpbGUgaW4gJChXSU5EX0JBU0UpL1dQSUxpYi4gICovDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisjaWZuZGVmIF9fVFJJR0dFUl9IX18NCisjZGVmaW5lIF9fVFJJR0dFUl9IX18NCisNCisjaW5jbHVkZSAiU21hcnREYXNoYm9hcmQvU2VuZGFibGUuaCINCisNCitjbGFzcyBDb21tYW5kOw0KKw0KKy8qKg0KKyAqIFRoaXMgY2xhc3MgcHJvdmlkZXMgYW4gZWFzeSB3YXkgdG8gbGluayBjb21tYW5kcyB0byBpbnB1dHMuDQorICoNCisgKiBJdCBpcyB2ZXJ5IGVhc3kgdG8gbGluayBhIHBvbGxlZCBpbnB1dCB0byBhIGNvbW1hbmQuICBGb3IgaW5zdGFuY2UsIHlvdSBjb3VsZA0KKyAqIGxpbmsgdGhlIHRyaWdnZXIgYnV0dG9uIG9mIGEgam95c3RpY2sgdG8gYSAic2NvcmUiIGNvbW1hbmQgb3IgYW4gZW5jb2RlciByZWFjaGluZw0KKyAqIGEgcGFydGljdWxhciB2YWx1ZS4NCisgKg0KKyAqIEl0IGlzIGVuY291cmFnZWQgdGhhdCB0ZWFtcyB3cml0ZSBhIHN1YmNsYXNzIG9mIFRyaWdnZXIgaWYgdGhleSB3YW50IHRvIGhhdmUNCisgKiBzb21ldGhpbmcgdW51c3VhbCAoZm9yIGluc3RhbmNlLCBpZiB0aGV5IHdhbnQgdG8gcmVhY3QgdG8gdGhlIHVzZXIgaG9sZGluZw0KKyAqIGEgYnV0dG9uIHdoaWxlIHRoZSByb2JvdCBpcyByZWFkaW5nIGEgY2VydGFpbiBzZW5zb3IgaW5wdXQpLiAgRm9yIHRoaXMsIHRoZXkNCisgKiBvbmx5IGhhdmUgdG8gd3JpdGUgdGhlIHtAbGluayBUcmlnZ2VyI0dldCgpfSBtZXRob2QgdG8gZ2V0IHRoZSBmdWxsIGZ1bmN0aW9uYWxpdHkNCisgKiBvZiB0aGUgVHJpZ2dlciBjbGFzcy4NCisgKg0KKyAqIEBhdXRob3IgQnJhZCBNaWxsZXIsIEpvZSBHcmluc3RlYWQNCisgKi8NCitjbGFzcyBUcmlnZ2VyIDogcHVibGljIFNlbmRhYmxlDQorew0KK3B1YmxpYzoNCisJVHJpZ2dlcigpOw0KKwl2aXJ0dWFsIH5UcmlnZ2VyKCkge30NCisJYm9vbCBHcmFiKCk7DQorCXZpcnR1YWwgYm9vbCBHZXQoKSA9IDA7DQorCXZvaWQgV2hlbkFjdGl2ZShDb21tYW5kICpjb21tYW5kKTsNCisJdm9pZCBXaGlsZUFjdGl2ZShDb21tYW5kICpjb21tYW5kKTsNCisJdm9pZCBXaGVuSW5hY3RpdmUoQ29tbWFuZCAqY29tbWFuZCk7DQorCQ0KKwl2aXJ0dWFsIHZvaWQgSW5pdFRhYmxlKElUYWJsZSogdGFibGUpOw0KKwl2aXJ0dWFsIElUYWJsZSogR2V0VGFibGUoKTsNCisJdmlydHVhbCBzdGQ6OnN0cmluZyBHZXRTbWFydERhc2hib2FyZFR5cGUoKTsNCitwcm90ZWN0ZWQ6DQorCUlUYWJsZSogbV90YWJsZTsNCit9Ow0KKw0KKyNlbmRpZg0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0NBTi9KYWd1YXJDQU5Ecml2ZXIuaCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0NBTi9KYWd1YXJDQU5Ecml2ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZTY1Y2JkCi0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvQ0FOL0phZ3VhckNBTkRyaXZlci5oCkBAIC0wLDAgKzEsMzEgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorLyogQ29weXJpZ2h0IChjKSBGSVJTVCAyMDA5LiBBbGwgUmlnaHRzIFJlc2VydmVkLgkJCQkJCQkgICovDQorLyogT3BlbiBTb3VyY2UgU29mdHdhcmUgLSBtYXkgYmUgbW9kaWZpZWQgYW5kIHNoYXJlZCBieSBGUkMgdGVhbXMuIFRoZSBjb2RlICAgKi8NCisvKiBtdXN0IGJlIGFjY29tcGFuaWVkIGJ5IHRoZSBGSVJTVCBCU0QgbGljZW5zZSBmaWxlIGluICQoV0lORF9CQVNFKS9XUElMaWIuICAqLw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorLy8gSmFndWFyQ0FORHJpdmVyLmgNCisvLw0KKy8vICBEZWZpbmVzIHRoZSBBUEkgZm9yIGJ1aWxkaW5nIGEgQ0FOIEludGVyZmFjZSBQbHVnaW4gdG8gc3VwcG9ydA0KKy8vICAgIFBXTS1jYWJsZS1mcmVlIENBTiBtb3RvciBjb250cm9sIG9uIEZSQyByb2JvdHMuICBUaGlzIGFsbG93cyB5b3UNCisvLyAgICB0byBjb25uZWN0IGFueSBDQU4gaW50ZXJmYWNlIHRvIHRoZSBzZWN1cmUgSmFndWFyIENBTiBkcml2ZXIuDQorLy8NCisNCisjaWZuZGVmIF9fSmFndWFyQ0FORHJpdmVyX2hfXw0KKyNkZWZpbmUgX19KYWd1YXJDQU5Ecml2ZXJfaF9fDQorDQorI2luY2x1ZGUgPFZ4V29ya3MuaD4NCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCitleHRlcm4gIkMiDQorew0KKyNlbmRpZg0KKw0KKwl2b2lkIEZSQ19OZXR3b3JrQ29tbXVuaWNhdGlvbl9KYWd1YXJDQU5Ecml2ZXJfc2VuZE1lc3NhZ2UoVUlOVDMyIG1lc3NhZ2VJRCwgY29uc3QgVUlOVDggKmRhdGEsIFVJTlQ4IGRhdGFTaXplLCBJTlQzMiAqc3RhdHVzKTsNCisJdm9pZCBGUkNfTmV0d29ya0NvbW11bmljYXRpb25fSmFndWFyQ0FORHJpdmVyX3JlY2VpdmVNZXNzYWdlKFVJTlQzMiAqbWVzc2FnZUlELCBVSU5UOCAqZGF0YSwgVUlOVDggKmRhdGFTaXplLCBVSU5UMzIgdGltZW91dE1zLCBJTlQzMiAqc3RhdHVzKTsNCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCit9DQorI2VuZGlmDQorDQorI2VuZGlmIC8vIF9fSmFndWFyQ0FORHJpdmVyX2hfXw0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0NBTi9jYW5fcHJvdG8uaCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0NBTi9jYW5fcHJvdG8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNDBlNjk2Ci0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvQ0FOL2Nhbl9wcm90by5oCkBAIC0wLDAgKzEsNDI4IEBACisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8NCisvLyBjYW5fcHJvdG8uaCAtIERlZmluaXRpb25zIGZvciB0aGUgQ0FOIHByb3RvY29sIHVzZWQgdG8gY29tbXVuaWNhdGUgd2l0aCB0aGUNCisvLyAgICAgICAgICAgICAgIEJEQyBtb3RvciBjb250cm9sbGVyLg0KKy8vDQorLy8gQ29weXJpZ2h0IChjKSAyMDA4IFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQorLy8gVEkgSW5mb3JtYXRpb24gLSBTZWxlY3RpdmUgRGlzY2xvc3VyZQ0KKy8vDQorLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KKyNpZm5kZWYgX19DQU5fUFJPVE9fSF9fDQorI2RlZmluZSBfX0NBTl9QUk9UT19IX18NCisNCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8NCisvLyBUaGUgbWFza3Mgb2YgdGhlIGZpZWxkcyB0aGF0IGFyZSB1c2VkIGluIHRoZSBtZXNzYWdlIGlkZW50aWZpZXIuDQorLy8NCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorI2RlZmluZSBDQU5fTVNHSURfRlVMTF9NICAgICAgICAweDFmZmZmZmZmDQorI2RlZmluZSBDQU5fTVNHSURfREVWTk9fTSAgICAgICAweDAwMDAwMDNmDQorI2RlZmluZSBDQU5fTVNHSURfQVBJX00gICAgICAgICAweDAwMDBmZmMwDQorI2RlZmluZSBDQU5fTVNHSURfTUZSX00gICAgICAgICAweDAwZmYwMDAwDQorI2RlZmluZSBDQU5fTVNHSURfRFRZUEVfTSAgICAgICAweDFmMDAwMDAwDQorI2RlZmluZSBDQU5fTVNHSURfREVWTk9fUyAgICAgICAwDQorI2RlZmluZSBDQU5fTVNHSURfQVBJX1MgICAgICAgICA2DQorI2RlZmluZSBDQU5fTVNHSURfTUZSX1MgICAgICAgICAxNg0KKyNkZWZpbmUgQ0FOX01TR0lEX0RUWVBFX1MgICAgICAgMjQNCisNCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8NCisvLyBUaGUgUmVzZXJ2ZWQgZGV2aWNlIG51bWJlciB2YWx1ZXMgaW4gdGhlIE1lc3NhZ2UgSWQuDQorLy8NCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorI2RlZmluZSBDQU5fTVNHSURfREVWTk9fQkNBU1QgICAweDAwMDAwMDAwDQorDQorLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vDQorLy8gVGhlIFJlc2VydmVkIHN5c3RlbSBjb250cm9sIEFQSSBudW1iZXJzIGluIHRoZSBNZXNzYWdlIElkLg0KKy8vDQorLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyNkZWZpbmUgQ0FOX01TR0lEX0FQSV9TWVNIQUxUICAgMHgwMDAwMDAwMA0KKyNkZWZpbmUgQ0FOX01TR0lEX0FQSV9TWVNSU1QgICAgMHgwMDAwMDA0MA0KKyNkZWZpbmUgQ0FOX01TR0lEX0FQSV9ERVZBU1NJR04gMHgwMDAwMDA4MA0KKyNkZWZpbmUgQ0FOX01TR0lEX0FQSV9ERVZRVUVSWSAgMHgwMDAwMDBjMA0KKyNkZWZpbmUgQ0FOX01TR0lEX0FQSV9IRUFSVEJFQVQgMHgwMDAwMDE0MA0KKyNkZWZpbmUgQ0FOX01TR0lEX0FQSV9TWU5DICAgICAgMHgwMDAwMDE4MA0KKyNkZWZpbmUgQ0FOX01TR0lEX0FQSV9VUERBVEUgICAgMHgwMDAwMDFjMA0KKyNkZWZpbmUgQ0FOX01TR0lEX0FQSV9GSVJNVkVSICAgMHgwMDAwMDIwMA0KKyNkZWZpbmUgQ0FOX01TR0lEX0FQSV9FTlVNRVJBVEUgMHgwMDAwMDI0MA0KKyNkZWZpbmUgQ0FOX01TR0lEX0FQSV9TWVNSRVNVTUUgMHgwMDAwMDI4MA0KKw0KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLw0KKy8vIFRoZSAzMiBiaXQgdmFsdWVzIGFzc29jaWF0ZWQgd2l0aCB0aGUgQ0FOX01TR0lEX0FQSV9TVEFUVVMgcmVxdWVzdC4NCisvLw0KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisjZGVmaW5lIENBTl9TVEFUVVNfQ09ERV9NICAgICAgIDB4MDAwMGZmZmYNCisjZGVmaW5lIENBTl9TVEFUVVNfTUZHX00gICAgICAgIDB4MDBmZjAwMDANCisjZGVmaW5lIENBTl9TVEFUVVNfRFRZUEVfTSAgICAgIDB4MWYwMDAwMDANCisjZGVmaW5lIENBTl9TVEFUVVNfQ09ERV9TICAgICAgIDANCisjZGVmaW5lIENBTl9TVEFUVVNfTUZHX1MgICAgICAgIDE2DQorI2RlZmluZSBDQU5fU1RBVFVTX0RUWVBFX1MgICAgICAyNA0KKw0KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLw0KKy8vIFRoZSBSZXNlcnZlZCBtYW51ZmFjdHVyZXIgaWRlbnRpZmllcnMgaW4gdGhlIE1lc3NhZ2UgSWQuDQorLy8NCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorI2RlZmluZSBDQU5fTVNHSURfTUZSX05JICAgICAgICAweDAwMDEwMDAwDQorI2RlZmluZSBDQU5fTVNHSURfTUZSX0xNICAgICAgICAweDAwMDIwMDAwDQorI2RlZmluZSBDQU5fTVNHSURfTUZSX0RFS0EgICAgICAweDAwMDMwMDAwDQorDQorLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vDQorLy8gVGhlIFJlc2VydmVkIGRldmljZSB0eXBlIGlkZW50aWZpZXJzIGluIHRoZSBNZXNzYWdlIElkLg0KKy8vDQorLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyNkZWZpbmUgQ0FOX01TR0lEX0RUWVBFX0JDQVNUICAgMHgwMDAwMDAwMA0KKyNkZWZpbmUgQ0FOX01TR0lEX0RUWVBFX1JPQk9UICAgMHgwMTAwMDAwMA0KKyNkZWZpbmUgQ0FOX01TR0lEX0RUWVBFX01PVE9SICAgMHgwMjAwMDAwMA0KKyNkZWZpbmUgQ0FOX01TR0lEX0RUWVBFX1JFTEFZICAgMHgwMzAwMDAwMA0KKyNkZWZpbmUgQ0FOX01TR0lEX0RUWVBFX0dZUk8gICAgMHgwNDAwMDAwMA0KKyNkZWZpbmUgQ0FOX01TR0lEX0RUWVBFX0FDQ0VMICAgMHgwNTAwMDAwMA0KKyNkZWZpbmUgQ0FOX01TR0lEX0RUWVBFX1VTT05JQyAgMHgwNjAwMDAwMA0KKyNkZWZpbmUgQ0FOX01TR0lEX0RUWVBFX0dFQVJUICAgMHgwNzAwMDAwMA0KKyNkZWZpbmUgQ0FOX01TR0lEX0RUWVBFX1VQREFURSAgMHgxZjAwMDAwMA0KKw0KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLw0KKy8vIExNIE1vdG9yIENvbnRyb2wgQVBJIENsYXNzZXMgQVBJIENsYXNzIGFuZCBJRCBtYXNrcy4NCisvLw0KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisjZGVmaW5lIENBTl9NU0dJRF9BUElfQ0xBU1NfTSAgIDB4MDAwMGZjMDANCisjZGVmaW5lIENBTl9NU0dJRF9BUElfSURfTSAgICAgIDB4MDAwMDAzYzANCisNCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8NCisvLyBMTSBNb3RvciBDb250cm9sIEFQSSBDbGFzc2VzIGluIHRoZSBNZXNzYWdlIElkIGZvciBub24tYnJvYWRjYXN0Lg0KKy8vIFRoZXNlIGFyZSB0aGUgdXBwZXIgNiBiaXRzIG9mIHRoZSBBUEkgZmllbGQsIHRoZSBsb3dlciA0IGJpdHMgZGV0ZXJtaW5lDQorLy8gdGhlIEFQSUlkLg0KKy8vDQorLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyNkZWZpbmUgQ0FOX0FQSV9NQ19WT0xUQUdFICAgICAgMHgwMDAwMDAwMA0KKyNkZWZpbmUgQ0FOX0FQSV9NQ19TUEQgICAgICAgICAgMHgwMDAwMDQwMA0KKyNkZWZpbmUgQ0FOX0FQSV9NQ19WQ09NUCAgICAgICAgMHgwMDAwMDgwMA0KKyNkZWZpbmUgQ0FOX0FQSV9NQ19QT1MgICAgICAgICAgMHgwMDAwMGMwMA0KKyNkZWZpbmUgQ0FOX0FQSV9NQ19JQ1RSTCAgICAgICAgMHgwMDAwMTAwMA0KKyNkZWZpbmUgQ0FOX0FQSV9NQ19TVEFUVVMgICAgICAgMHgwMDAwMTQwMA0KKyNkZWZpbmUgQ0FOX0FQSV9NQ19QU1RBVCAgICAgICAgMHgwMDAwMTgwMA0KKyNkZWZpbmUgQ0FOX0FQSV9NQ19DRkcgICAgICAgICAgMHgwMDAwMWMwMA0KKyNkZWZpbmUgQ0FOX0FQSV9NQ19BQ0sgICAgICAgICAgMHgwMDAwMjAwMA0KKw0KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLw0KKy8vIFRoZSBTdGVsbGFyaXMgTW90b3IgQ2xhc3MgQ29udHJvbCBWb2x0YWdlIEFQSSBkZWZpbml0aW9ucy4NCisvLw0KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisjZGVmaW5lIExNX0FQSV9WT0xUICAgICAgICAgICAgIChDQU5fTVNHSURfTUZSX0xNIHwgQ0FOX01TR0lEX0RUWVBFX01PVE9SIHwgICBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0FOX0FQSV9NQ19WT0xUQUdFKQ0KKyNkZWZpbmUgTE1fQVBJX1ZPTFRfRU4gICAgICAgICAgKExNX0FQSV9WT0xUIHwgKDAgPDwgQ0FOX01TR0lEX0FQSV9TKSkNCisjZGVmaW5lIExNX0FQSV9WT0xUX0RJUyAgICAgICAgIChMTV9BUElfVk9MVCB8ICgxIDw8IENBTl9NU0dJRF9BUElfUykpDQorI2RlZmluZSBMTV9BUElfVk9MVF9TRVQgICAgICAgICAoTE1fQVBJX1ZPTFQgfCAoMiA8PCBDQU5fTVNHSURfQVBJX1MpKQ0KKyNkZWZpbmUgTE1fQVBJX1ZPTFRfU0VUX1JBTVAgICAgKExNX0FQSV9WT0xUIHwgKDMgPDwgQ0FOX01TR0lEX0FQSV9TKSkNCisvLyMjIyMjIEZJUlNUIEJFR0lOICMjIyMjDQorI2RlZmluZSBMTV9BUElfVk9MVF9UX0VOICAgICAgICAoTE1fQVBJX1ZPTFQgfCAoNCA8PCBDQU5fTVNHSURfQVBJX1MpKQ0KKyNkZWZpbmUgTE1fQVBJX1ZPTFRfVF9TRVQgICAgICAgKExNX0FQSV9WT0xUIHwgKDUgPDwgQ0FOX01TR0lEX0FQSV9TKSkNCisjZGVmaW5lIExNX0FQSV9WT0xUX1RfU0VUX05PX0FDSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoTE1fQVBJX1ZPTFQgfCAoNyA8PCBDQU5fTVNHSURfQVBJX1MpKQ0KKy8vIyMjIyMgRklSU1QgRU5EICMjIyMjDQorI2RlZmluZSBMTV9BUElfVk9MVF9TRVRfTk9fQUNLICAoTE1fQVBJX1ZPTFQgfCAoOCA8PCBDQU5fTVNHSURfQVBJX1MpKQ0KKw0KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLw0KKy8vIFRoZSBTdGVsbGFyaXMgTW90b3IgQ2xhc3MgQ29udHJvbCBBUEkgZGVmaW5pdGlvbnMgZm9yIExNX0FQSV9WT0xUX1NFVF9SQU1QLg0KKy8vDQorLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyNkZWZpbmUgTE1fQVBJX1ZPTFRfUkFNUF9ESVMgICAgMA0KKw0KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLw0KKy8vIFRoZSBTdGVsbGFyaXMgTW90b3IgQ2xhc3MgQ29udHJvbCBBUEkgZGVmaW5pdGlvbnMgZm9yIENBTl9NU0dJRF9BUElfU1lOQy4NCisvLw0KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisjZGVmaW5lIExNX0FQSV9TWU5DX1BFTkRfTk9XICAgIDANCisNCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8NCisvLyBUaGUgU3RlbGxhcmlzIE1vdG9yIENsYXNzIFNwZWVkIENvbnRyb2wgQVBJIGRlZmluaXRpb25zLg0KKy8vDQorLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyNkZWZpbmUgTE1fQVBJX1NQRCAgICAgICAgICAgICAgKENBTl9NU0dJRF9NRlJfTE0gfCBDQU5fTVNHSURfRFRZUEVfTU9UT1IgfCAgIFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQU5fQVBJX01DX1NQRCkNCisjZGVmaW5lIExNX0FQSV9TUERfRU4gICAgICAgICAgIChMTV9BUElfU1BEIHwgKDAgPDwgQ0FOX01TR0lEX0FQSV9TKSkNCisjZGVmaW5lIExNX0FQSV9TUERfRElTICAgICAgICAgIChMTV9BUElfU1BEIHwgKDEgPDwgQ0FOX01TR0lEX0FQSV9TKSkNCisjZGVmaW5lIExNX0FQSV9TUERfU0VUICAgICAgICAgIChMTV9BUElfU1BEIHwgKDIgPDwgQ0FOX01TR0lEX0FQSV9TKSkNCisjZGVmaW5lIExNX0FQSV9TUERfUEMgICAgICAgICAgIChMTV9BUElfU1BEIHwgKDMgPDwgQ0FOX01TR0lEX0FQSV9TKSkNCisjZGVmaW5lIExNX0FQSV9TUERfSUMgICAgICAgICAgIChMTV9BUElfU1BEIHwgKDQgPDwgQ0FOX01TR0lEX0FQSV9TKSkNCisjZGVmaW5lIExNX0FQSV9TUERfREMgICAgICAgICAgIChMTV9BUElfU1BEIHwgKDUgPDwgQ0FOX01TR0lEX0FQSV9TKSkNCisjZGVmaW5lIExNX0FQSV9TUERfUkVGICAgICAgICAgIChMTV9BUElfU1BEIHwgKDYgPDwgQ0FOX01TR0lEX0FQSV9TKSkNCisvLyMjIyMjIEZJUlNUIEJFR0lOICMjIyMjDQorI2RlZmluZSBMTV9BUElfU1BEX1RfRU4gICAgICAgICAoTE1fQVBJX1NQRCB8ICg3IDw8IENBTl9NU0dJRF9BUElfUykpDQorI2RlZmluZSBMTV9BUElfU1BEX1RfU0VUICAgICAgICAoTE1fQVBJX1NQRCB8ICg4IDw8IENBTl9NU0dJRF9BUElfUykpDQorI2RlZmluZSBMTV9BUElfU1BEX1RfU0VUX05PX0FDSyAoTE1fQVBJX1NQRCB8ICgxMCA8PCBDQU5fTVNHSURfQVBJX1MpKQ0KKy8vIyMjIyMgRklSU1QgRU5EICMjIyMjDQorI2RlZmluZSBMTV9BUElfU1BEX1NFVF9OT19BQ0sgICAoTE1fQVBJX1NQRCB8ICgxMSA8PCBDQU5fTVNHSURfQVBJX1MpKQ0KKw0KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLw0KKy8vIFRoZSBTdGVsbGFyaXMgTW90b3IgQ29udHJvbCBWb2x0YWdlIENvbXBlbnNhdGlvbiBDb250cm9sIEFQSSBkZWZpbml0aW9ucy4NCisvLw0KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisjZGVmaW5lIExNX0FQSV9WQ09NUCAgICAgICAgICAgIChDQU5fTVNHSURfTUZSX0xNIHwgQ0FOX01TR0lEX0RUWVBFX01PVE9SIHwgICBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0FOX0FQSV9NQ19WQ09NUCkNCisjZGVmaW5lIExNX0FQSV9WQ09NUF9FTiAgICAgICAgIChMTV9BUElfVkNPTVAgfCAoMCA8PCBDQU5fTVNHSURfQVBJX1MpKQ0KKyNkZWZpbmUgTE1fQVBJX1ZDT01QX0RJUyAgICAgICAgKExNX0FQSV9WQ09NUCB8ICgxIDw8IENBTl9NU0dJRF9BUElfUykpDQorI2RlZmluZSBMTV9BUElfVkNPTVBfU0VUICAgICAgICAoTE1fQVBJX1ZDT01QIHwgKDIgPDwgQ0FOX01TR0lEX0FQSV9TKSkNCisjZGVmaW5lIExNX0FQSV9WQ09NUF9JTl9SQU1QICAgIChMTV9BUElfVkNPTVAgfCAoMyA8PCBDQU5fTVNHSURfQVBJX1MpKQ0KKyNkZWZpbmUgTE1fQVBJX1ZDT01QX0NPTVBfUkFNUCAgKExNX0FQSV9WQ09NUCB8ICg0IDw8IENBTl9NU0dJRF9BUElfUykpDQorLy8jIyMjIyBGSVJTVCBCRUdJTiAjIyMjIw0KKyNkZWZpbmUgTE1fQVBJX1ZDT01QX1RfRU4gICAgICAgKExNX0FQSV9WQ09NUCB8ICg1IDw8IENBTl9NU0dJRF9BUElfUykpDQorI2RlZmluZSBMTV9BUElfVkNPTVBfVF9TRVQgICAgICAoTE1fQVBJX1ZDT01QIHwgKDYgPDwgQ0FOX01TR0lEX0FQSV9TKSkNCisjZGVmaW5lIExNX0FQSV9WQ09NUF9UX1NFVF9OT19BQ0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoTE1fQVBJX1ZDT01QIHwgKDggPDwgQ0FOX01TR0lEX0FQSV9TKSkNCisvLyMjIyMjIEZJUlNUIEVORCAjIyMjIw0KKyNkZWZpbmUgTE1fQVBJX1ZDT01QX1NFVF9OT19BQ0sgKExNX0FQSV9WQ09NUCB8ICg5IDw8IENBTl9NU0dJRF9BUElfUykpDQorDQorLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vDQorLy8gVGhlIFN0ZWxsYXJpcyBNb3RvciBDbGFzcyBQb3NpdGlvbiBDb250cm9sIEFQSSBkZWZpbml0aW9ucy4NCisvLw0KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisjZGVmaW5lIExNX0FQSV9QT1MgICAgICAgICAgICAgIChDQU5fTVNHSURfTUZSX0xNIHwgQ0FOX01TR0lEX0RUWVBFX01PVE9SIHwgICBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0FOX0FQSV9NQ19QT1MpDQorI2RlZmluZSBMTV9BUElfUE9TX0VOICAgICAgICAgICAoTE1fQVBJX1BPUyB8ICgwIDw8IENBTl9NU0dJRF9BUElfUykpDQorI2RlZmluZSBMTV9BUElfUE9TX0RJUyAgICAgICAgICAoTE1fQVBJX1BPUyB8ICgxIDw8IENBTl9NU0dJRF9BUElfUykpDQorI2RlZmluZSBMTV9BUElfUE9TX1NFVCAgICAgICAgICAoTE1fQVBJX1BPUyB8ICgyIDw8IENBTl9NU0dJRF9BUElfUykpDQorI2RlZmluZSBMTV9BUElfUE9TX1BDICAgICAgICAgICAoTE1fQVBJX1BPUyB8ICgzIDw8IENBTl9NU0dJRF9BUElfUykpDQorI2RlZmluZSBMTV9BUElfUE9TX0lDICAgICAgICAgICAoTE1fQVBJX1BPUyB8ICg0IDw8IENBTl9NU0dJRF9BUElfUykpDQorI2RlZmluZSBMTV9BUElfUE9TX0RDICAgICAgICAgICAoTE1fQVBJX1BPUyB8ICg1IDw8IENBTl9NU0dJRF9BUElfUykpDQorI2RlZmluZSBMTV9BUElfUE9TX1JFRiAgICAgICAgICAoTE1fQVBJX1BPUyB8ICg2IDw8IENBTl9NU0dJRF9BUElfUykpDQorLy8jIyMjIyBGSVJTVCBCRUdJTiAjIyMjIw0KKyNkZWZpbmUgTE1fQVBJX1BPU19UX0VOICAgICAgICAgKExNX0FQSV9QT1MgfCAoNyA8PCBDQU5fTVNHSURfQVBJX1MpKQ0KKyNkZWZpbmUgTE1fQVBJX1BPU19UX1NFVCAgICAgICAgKExNX0FQSV9QT1MgfCAoOCA8PCBDQU5fTVNHSURfQVBJX1MpKQ0KKyNkZWZpbmUgTE1fQVBJX1BPU19UX1NFVF9OT19BQ0sgKExNX0FQSV9QT1MgfCAoMTAgPDwgQ0FOX01TR0lEX0FQSV9TKSkNCisvLyMjIyMjIEZJUlNUIEVORCAjIyMjIw0KKyNkZWZpbmUgTE1fQVBJX1BPU19TRVRfTk9fQUNLICAgKExNX0FQSV9QT1MgfCAoMTEgPDwgQ0FOX01TR0lEX0FQSV9TKSkNCisNCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8NCisvLyBUaGUgU3RlbGxhcmlzIE1vdG9yIENsYXNzIEN1cnJlbnQgQ29udHJvbCBBUEkgZGVmaW5pdGlvbnMuDQorLy8NCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorI2RlZmluZSBMTV9BUElfSUNUUkwgICAgICAgICAgICAoQ0FOX01TR0lEX01GUl9MTSB8IENBTl9NU0dJRF9EVFlQRV9NT1RPUiB8ICAgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENBTl9BUElfTUNfSUNUUkwpDQorI2RlZmluZSBMTV9BUElfSUNUUkxfRU4gICAgICAgICAoTE1fQVBJX0lDVFJMIHwgKDAgPDwgQ0FOX01TR0lEX0FQSV9TKSkNCisjZGVmaW5lIExNX0FQSV9JQ1RSTF9ESVMgICAgICAgIChMTV9BUElfSUNUUkwgfCAoMSA8PCBDQU5fTVNHSURfQVBJX1MpKQ0KKyNkZWZpbmUgTE1fQVBJX0lDVFJMX1NFVCAgICAgICAgKExNX0FQSV9JQ1RSTCB8ICgyIDw8IENBTl9NU0dJRF9BUElfUykpDQorI2RlZmluZSBMTV9BUElfSUNUUkxfUEMgICAgICAgICAoTE1fQVBJX0lDVFJMIHwgKDMgPDwgQ0FOX01TR0lEX0FQSV9TKSkNCisjZGVmaW5lIExNX0FQSV9JQ1RSTF9JQyAgICAgICAgIChMTV9BUElfSUNUUkwgfCAoNCA8PCBDQU5fTVNHSURfQVBJX1MpKQ0KKyNkZWZpbmUgTE1fQVBJX0lDVFJMX0RDICAgICAgICAgKExNX0FQSV9JQ1RSTCB8ICg1IDw8IENBTl9NU0dJRF9BUElfUykpDQorLy8jIyMjIyBGSVJTVCBCRUdJTiAjIyMjIw0KKyNkZWZpbmUgTE1fQVBJX0lDVFJMX1RfRU4gICAgICAgKExNX0FQSV9JQ1RSTCB8ICg2IDw8IENBTl9NU0dJRF9BUElfUykpDQorI2RlZmluZSBMTV9BUElfSUNUUkxfVF9TRVQgICAgICAoTE1fQVBJX0lDVFJMIHwgKDcgPDwgQ0FOX01TR0lEX0FQSV9TKSkNCisjZGVmaW5lIExNX0FQSV9JQ1RSTF9UX1NFVF9OT19BQ0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoTE1fQVBJX0lDVFJMIHwgKDkgPDwgQ0FOX01TR0lEX0FQSV9TKSkNCisvLyMjIyMjIEZJUlNUIEVORCAjIyMjIw0KKyNkZWZpbmUgTE1fQVBJX0lDVFJMX1NFVF9OT19BQ0sgKExNX0FQSV9JQ1RSTCB8ICgxMCA8PCBDQU5fTVNHSURfQVBJX1MpKQ0KKw0KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLw0KKy8vIFRoZSBTdGVsbGFyaXMgTW90b3IgQ2xhc3MgRmlybXdhcmUgVXBkYXRlIEFQSSBkZWZpbml0aW9ucy4NCisvLw0KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisjZGVmaW5lIExNX0FQSV9VUEQgICAgICAgICAgICAgIChDQU5fTVNHSURfTUZSX0xNIHwgQ0FOX01TR0lEX0RUWVBFX1VQREFURSkNCisjZGVmaW5lIExNX0FQSV9VUERfUElORyAgICAgICAgIChMTV9BUElfVVBEIHwgKDAgPDwgQ0FOX01TR0lEX0FQSV9TKSkNCisjZGVmaW5lIExNX0FQSV9VUERfRE9XTkxPQUQgICAgIChMTV9BUElfVVBEIHwgKDEgPDwgQ0FOX01TR0lEX0FQSV9TKSkNCisjZGVmaW5lIExNX0FQSV9VUERfU0VORF9EQVRBICAgIChMTV9BUElfVVBEIHwgKDIgPDwgQ0FOX01TR0lEX0FQSV9TKSkNCisjZGVmaW5lIExNX0FQSV9VUERfUkVTRVQgICAgICAgIChMTV9BUElfVVBEIHwgKDMgPDwgQ0FOX01TR0lEX0FQSV9TKSkNCisjZGVmaW5lIExNX0FQSV9VUERfQUNLICAgICAgICAgIChMTV9BUElfVVBEIHwgKDQgPDwgQ0FOX01TR0lEX0FQSV9TKSkNCisjZGVmaW5lIExNX0FQSV9IV1ZFUiAgICAgICAgICAgIChMTV9BUElfVVBEIHwgKDUgPDwgQ0FOX01TR0lEX0FQSV9TKSkNCisjZGVmaW5lIExNX0FQSV9VUERfUkVRVUVTVCAgICAgIChMTV9BUElfVVBEIHwgKDYgPDwgQ0FOX01TR0lEX0FQSV9TKSkNCisvLyMjIyMjIEZJUlNUIEJFR0lOICMjIyMjDQorI2RlZmluZSBMTV9BUElfVU5UUlVTVF9FTiAgICAgICAoTE1fQVBJX1VQRCB8ICgxMSA8PCBDQU5fTVNHSURfQVBJX1MpKQ0KKyNkZWZpbmUgTE1fQVBJX1RSVVNUX0VOICAgICAgICAgKExNX0FQSV9VUEQgfCAoMTIgPDwgQ0FOX01TR0lEX0FQSV9TKSkNCisjZGVmaW5lIExNX0FQSV9UUlVTVF9IRUFSVEJFQVQgIChMTV9BUElfVVBEIHwgKDEzIDw8IENBTl9NU0dJRF9BUElfUykpDQorLy8jIyMjIyBGSVJTVCBFTkQgIyMjIyMNCisNCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8NCisvLyBUaGUgU3RlbGxhcmlzIE1vdG9yIENsYXNzIFN0YXR1cyBBUEkgZGVmaW5pdGlvbnMuDQorLy8NCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorI2RlZmluZSBMTV9BUElfU1RBVFVTICAgICAgICAgICAoQ0FOX01TR0lEX01GUl9MTSB8IENBTl9NU0dJRF9EVFlQRV9NT1RPUiB8ICAgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENBTl9BUElfTUNfU1RBVFVTKQ0KKyNkZWZpbmUgTE1fQVBJX1NUQVRVU19WT0xUT1VUICAgKExNX0FQSV9TVEFUVVMgfCAoMCA8PCBDQU5fTVNHSURfQVBJX1MpKQ0KKyNkZWZpbmUgTE1fQVBJX1NUQVRVU19WT0xUQlVTICAgKExNX0FQSV9TVEFUVVMgfCAoMSA8PCBDQU5fTVNHSURfQVBJX1MpKQ0KKyNkZWZpbmUgTE1fQVBJX1NUQVRVU19DVVJSRU5UICAgKExNX0FQSV9TVEFUVVMgfCAoMiA8PCBDQU5fTVNHSURfQVBJX1MpKQ0KKyNkZWZpbmUgTE1fQVBJX1NUQVRVU19URU1QICAgICAgKExNX0FQSV9TVEFUVVMgfCAoMyA8PCBDQU5fTVNHSURfQVBJX1MpKQ0KKyNkZWZpbmUgTE1fQVBJX1NUQVRVU19QT1MgICAgICAgKExNX0FQSV9TVEFUVVMgfCAoNCA8PCBDQU5fTVNHSURfQVBJX1MpKQ0KKyNkZWZpbmUgTE1fQVBJX1NUQVRVU19TUEQgICAgICAgKExNX0FQSV9TVEFUVVMgfCAoNSA8PCBDQU5fTVNHSURfQVBJX1MpKQ0KKyNkZWZpbmUgTE1fQVBJX1NUQVRVU19MSU1JVCAgICAgKExNX0FQSV9TVEFUVVMgfCAoNiA8PCBDQU5fTVNHSURfQVBJX1MpKQ0KKyNkZWZpbmUgTE1fQVBJX1NUQVRVU19GQVVMVCAgICAgKExNX0FQSV9TVEFUVVMgfCAoNyA8PCBDQU5fTVNHSURfQVBJX1MpKQ0KKyNkZWZpbmUgTE1fQVBJX1NUQVRVU19QT1dFUiAgICAgKExNX0FQSV9TVEFUVVMgfCAoOCA8PCBDQU5fTVNHSURfQVBJX1MpKQ0KKyNkZWZpbmUgTE1fQVBJX1NUQVRVU19DTU9ERSAgICAgKExNX0FQSV9TVEFUVVMgfCAoOSA8PCBDQU5fTVNHSURfQVBJX1MpKQ0KKyNkZWZpbmUgTE1fQVBJX1NUQVRVU19WT1VUICAgICAgKExNX0FQSV9TVEFUVVMgfCAoMTAgPDwgQ0FOX01TR0lEX0FQSV9TKSkNCisjZGVmaW5lIExNX0FQSV9TVEFUVVNfU1RLWV9GTFQgIChMTV9BUElfU1RBVFVTIHwgKDExIDw8IENBTl9NU0dJRF9BUElfUykpDQorI2RlZmluZSBMTV9BUElfU1RBVFVTX0ZMVF9DT1VOVCAoTE1fQVBJX1NUQVRVUyB8ICgxMiA8PCBDQU5fTVNHSURfQVBJX1MpKQ0KKw0KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLw0KKy8vIFRoZXNlIGRlZmluaXRpb25zIGFyZSB1c2VkIHdpdGggdGhlIGJ5dGUgdGhhdCBpcyByZXR1cm5lZCBmcm9tDQorLy8gdGhlIHN0YXR1cyByZXF1ZXN0IGZvciBMTV9BUElfU1RBVFVTX0xJTUlULg0KKy8vDQorLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyNkZWZpbmUgTE1fU1RBVFVTX0xJTUlUX0ZXRCAgICAgMHgwMQ0KKyNkZWZpbmUgTE1fU1RBVFVTX0xJTUlUX1JFViAgICAgMHgwMg0KKyNkZWZpbmUgTE1fU1RBVFVTX0xJTUlUX1NGV0QgICAgMHgwNA0KKyNkZWZpbmUgTE1fU1RBVFVTX0xJTUlUX1NSRVYgICAgMHgwOA0KKyNkZWZpbmUgTE1fU1RBVFVTX0xJTUlUX1NUS1lfRldEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTANCisjZGVmaW5lIExNX1NUQVRVU19MSU1JVF9TVEtZX1JFViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwDQorI2RlZmluZSBMTV9TVEFUVVNfTElNSVRfU1RLWV9TRldEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MA0KKyNkZWZpbmUgTE1fU1RBVFVTX0xJTUlUX1NUS1lfU1JFViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODANCisNCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8NCisvLyBMTSBNb3RvciBDb250cm9sIHN0YXR1cyBjb2RlcyByZXR1cm5lZCBkdWUgdG8gdGhlIENBTl9TVEFUVVNfQ09ERV9NIGZpZWxkLg0KKy8vDQorLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyNkZWZpbmUgTE1fU1RBVFVTX0ZBVUxUX0lMSU1JVCAgMHgwMQ0KKyNkZWZpbmUgTE1fU1RBVFVTX0ZBVUxUX1RMSU1JVCAgMHgwMg0KKyNkZWZpbmUgTE1fU1RBVFVTX0ZBVUxUX1ZMSU1JVCAgMHgwNA0KKw0KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLw0KKy8vIFRoZSBTdGVsbGFyaXMgTW90b3IgQ2xhc3MgQ29uZmlndXJhdGlvbiBBUEkgZGVmaW5pdGlvbnMuDQorLy8NCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorI2RlZmluZSBMTV9BUElfQ0ZHICAgICAgICAgICAgICAoQ0FOX01TR0lEX01GUl9MTSB8IENBTl9NU0dJRF9EVFlQRV9NT1RPUiB8ICAgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENBTl9BUElfTUNfQ0ZHKQ0KKyNkZWZpbmUgTE1fQVBJX0NGR19OVU1fQlJVU0hFUyAgKExNX0FQSV9DRkcgfCAoMCA8PCBDQU5fTVNHSURfQVBJX1MpKQ0KKyNkZWZpbmUgTE1fQVBJX0NGR19FTkNfTElORVMgICAgKExNX0FQSV9DRkcgfCAoMSA8PCBDQU5fTVNHSURfQVBJX1MpKQ0KKyNkZWZpbmUgTE1fQVBJX0NGR19QT1RfVFVSTlMgICAgKExNX0FQSV9DRkcgfCAoMiA8PCBDQU5fTVNHSURfQVBJX1MpKQ0KKyNkZWZpbmUgTE1fQVBJX0NGR19CUkFLRV9DT0FTVCAgKExNX0FQSV9DRkcgfCAoMyA8PCBDQU5fTVNHSURfQVBJX1MpKQ0KKyNkZWZpbmUgTE1fQVBJX0NGR19MSU1JVF9NT0RFICAgKExNX0FQSV9DRkcgfCAoNCA8PCBDQU5fTVNHSURfQVBJX1MpKQ0KKyNkZWZpbmUgTE1fQVBJX0NGR19MSU1JVF9GV0QgICAgKExNX0FQSV9DRkcgfCAoNSA8PCBDQU5fTVNHSURfQVBJX1MpKQ0KKyNkZWZpbmUgTE1fQVBJX0NGR19MSU1JVF9SRVYgICAgKExNX0FQSV9DRkcgfCAoNiA8PCBDQU5fTVNHSURfQVBJX1MpKQ0KKyNkZWZpbmUgTE1fQVBJX0NGR19NQVhfVk9VVCAgICAgKExNX0FQSV9DRkcgfCAoNyA8PCBDQU5fTVNHSURfQVBJX1MpKQ0KKyNkZWZpbmUgTE1fQVBJX0NGR19GQVVMVF9USU1FICAgKExNX0FQSV9DRkcgfCAoOCA8PCBDQU5fTVNHSURfQVBJX1MpKQ0KKw0KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLw0KKy8vIFRoZSBTdGVsbGFyaXMgQUNLIEFQSSBkZWZpbml0aW9uLg0KKy8vDQorLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyNkZWZpbmUgTE1fQVBJX0FDSyAgICAgICAgICAgICAgKENBTl9NU0dJRF9NRlJfTE0gfCBDQU5fTVNHSURfRFRZUEVfTU9UT1IgfCAgIFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQU5fQVBJX01DX0FDSykNCisNCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorLy8NCisvLyBUaGUgOCBiaXQgdmFsdWVzIHRoYXQgY2FuIGJlIHJldHVybmVkIGJ5IGEgY2FsbCB0byBMTV9BUElfU1RBVFVTX0hXVkVSLg0KKy8vDQorLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyNkZWZpbmUgTE1fSFdWRVJfVU5LTk9XTiAgICAgICAgMHgwMA0KKyNkZWZpbmUgTE1fSFdWRVJfSkFHXzFfMCAgICAgICAgMHgwMQ0KKyNkZWZpbmUgTE1fSFdWRVJfSkFHXzJfMCAgICAgICAgMHgwMg0KKw0KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLw0KKy8vIFRoZSA4IGJpdCB2YWx1ZXMgdGhhdCBjYW4gYmUgcmV0dXJuZWQgYnkgYSBjYWxsIHRvIExNX0FQSV9TVEFUVVNfQ01PREUuDQorLy8NCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorI2RlZmluZSBMTV9TVEFUVVNfQ01PREVfVk9MVCAgICAweDAwDQorI2RlZmluZSBMTV9TVEFUVVNfQ01PREVfQ1VSUkVOVCAweDAxDQorI2RlZmluZSBMTV9TVEFUVVNfQ01PREVfU1BFRUQgICAweDAyDQorI2RlZmluZSBMTV9TVEFUVVNfQ01PREVfUE9TICAgICAweDAzDQorI2RlZmluZSBMTV9TVEFUVVNfQ01PREVfVkNPTVAgICAweDA0DQorDQorLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vDQorLy8gVGhlIHZhbHVlcyB0aGF0IGNhbiBzcGVjaWZpZWQgYXMgdGhlIHBvc2l0aW9uIG9yIHNwZWVkIHJlZmVyZW5jZS4gIE5vdCBhbGwNCisvLyB2YWx1ZXMgYXJlIHZhbGlkIGZvciBlYWNoIHJlZmVyZW5jZTsgaWYgYW4gaW52YWxpZCByZWZlcmVuY2UgaXMgc2V0LCB0aGVuDQorLy8gbm9uZSB3aWxsIGJlIHNlbGVjdGVkLg0KKy8vDQorLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyNkZWZpbmUgTE1fUkVGX0VOQ09ERVIgICAgICAgICAgMHgwMA0KKyNkZWZpbmUgTE1fUkVGX1BPVCAgICAgICAgICAgICAgMHgwMQ0KKyNkZWZpbmUgTE1fUkVGX0lOVl9FTkNPREVSICAgICAgMHgwMg0KKyNkZWZpbmUgTE1fUkVGX1FVQURfRU5DT0RFUiAgICAgMHgwMw0KKyNkZWZpbmUgTE1fUkVGX05PTkUgICAgICAgICAgICAgMHhmZg0KKw0KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvLw0KKy8vIFRoZSBmbGFncyB0aGF0IGFyZSB1c2VkIHRvIGluZGljYXRlIHRoZSBjdXJyZW50bHkgYWN0aXZlIGZhdWx0IHNvdXJjZXMuDQorLy8NCisvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorI2RlZmluZSBMTV9GQVVMVF9DVVJSRU5UICAgICAgICAweDAxDQorI2RlZmluZSBMTV9GQVVMVF9URU1QICAgICAgICAgICAweDAyDQorI2RlZmluZSBMTV9GQVVMVF9WQlVTICAgICAgICAgICAweDA0DQorI2RlZmluZSBMTV9GQVVMVF9HQVRFX0RSSVZFICAgICAweDA4DQorI2RlZmluZSBMTV9GQVVMVF9DT01NICAgICAgICAgICAweDEwDQorDQorLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vDQorLy8gVGhlIFN0ZWxsYXJpcyBNb3RvciBDbGFzcyBQZXJpb2RpYyBTdGF0dXMgQVBJIGRlZmluaXRpb25zLg0KKy8vDQorLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyNkZWZpbmUgTE1fQVBJX1BTVEFUICAgICAgICAgICAgKENBTl9NU0dJRF9NRlJfTE0gfCBDQU5fTVNHSURfRFRZUEVfTU9UT1IgfCAgIFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQU5fQVBJX01DX1BTVEFUKQ0KKyNkZWZpbmUgTE1fQVBJX1BTVEFUX1BFUl9FTl9TMCAgKExNX0FQSV9QU1RBVCB8ICgwIDw8IENBTl9NU0dJRF9BUElfUykpDQorI2RlZmluZSBMTV9BUElfUFNUQVRfUEVSX0VOX1MxICAoTE1fQVBJX1BTVEFUIHwgKDEgPDwgQ0FOX01TR0lEX0FQSV9TKSkNCisjZGVmaW5lIExNX0FQSV9QU1RBVF9QRVJfRU5fUzIgIChMTV9BUElfUFNUQVQgfCAoMiA8PCBDQU5fTVNHSURfQVBJX1MpKQ0KKyNkZWZpbmUgTE1fQVBJX1BTVEFUX1BFUl9FTl9TMyAgKExNX0FQSV9QU1RBVCB8ICgzIDw8IENBTl9NU0dJRF9BUElfUykpDQorI2RlZmluZSBMTV9BUElfUFNUQVRfQ0ZHX1MwICAgICAoTE1fQVBJX1BTVEFUIHwgKDQgPDwgQ0FOX01TR0lEX0FQSV9TKSkNCisjZGVmaW5lIExNX0FQSV9QU1RBVF9DRkdfUzEgICAgIChMTV9BUElfUFNUQVQgfCAoNSA8PCBDQU5fTVNHSURfQVBJX1MpKQ0KKyNkZWZpbmUgTE1fQVBJX1BTVEFUX0NGR19TMiAgICAgKExNX0FQSV9QU1RBVCB8ICg2IDw8IENBTl9NU0dJRF9BUElfUykpDQorI2RlZmluZSBMTV9BUElfUFNUQVRfQ0ZHX1MzICAgICAoTE1fQVBJX1BTVEFUIHwgKDcgPDwgQ0FOX01TR0lEX0FQSV9TKSkNCisjZGVmaW5lIExNX0FQSV9QU1RBVF9EQVRBX1MwICAgIChMTV9BUElfUFNUQVQgfCAoOCA8PCBDQU5fTVNHSURfQVBJX1MpKQ0KKyNkZWZpbmUgTE1fQVBJX1BTVEFUX0RBVEFfUzEgICAgKExNX0FQSV9QU1RBVCB8ICg5IDw8IENBTl9NU0dJRF9BUElfUykpDQorI2RlZmluZSBMTV9BUElfUFNUQVRfREFUQV9TMiAgICAoTE1fQVBJX1BTVEFUIHwgKDEwIDw8IENBTl9NU0dJRF9BUElfUykpDQorI2RlZmluZSBMTV9BUElfUFNUQVRfREFUQV9TMyAgICAoTE1fQVBJX1BTVEFUIHwgKDExIDw8IENBTl9NU0dJRF9BUElfUykpDQorDQorLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8vDQorLy8gVGhlIHZhbHVlcyB0aGF0IGNhbiBiZSB1c2VkIHRvIGNvbmZpZ3VyZSB0aGUgZGF0YSB0aGUgUGVyaW9kaWMgU3RhdHVzDQorLy8gTWVzc2FnZSBieXRlcy4gIEJ5dGVzIG9mIGEgbXVsdGktYnl0ZSBkYXRhIHZhbHVlcyBhcmUgZW5jb2RlZCBhcw0KKy8vIGxpdHRsZS1lbmRpYW4sIHRoZXJlZm9yZSBCMCBpcyB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgYnl0ZS4NCisvLw0KKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisjZGVmaW5lIExNX1BTVEFUX0VORCAgICAgICAgICAgIDANCisjZGVmaW5lIExNX1BTVEFUX1ZPTFRPVVRfQjAgICAgIDENCisjZGVmaW5lIExNX1BTVEFUX1ZPTFRPVVRfQjEgICAgIDINCisjZGVmaW5lIExNX1BTVEFUX1ZPTFRCVVNfQjAgICAgIDMNCisjZGVmaW5lIExNX1BTVEFUX1ZPTFRCVVNfQjEgICAgIDQNCisjZGVmaW5lIExNX1BTVEFUX0NVUlJFTlRfQjAgICAgIDUNCisjZGVmaW5lIExNX1BTVEFUX0NVUlJFTlRfQjEgICAgIDYNCisjZGVmaW5lIExNX1BTVEFUX1RFTVBfQjAgICAgICAgIDcNCisjZGVmaW5lIExNX1BTVEFUX1RFTVBfQjEgICAgICAgIDgNCisjZGVmaW5lIExNX1BTVEFUX1BPU19CMCAgICAgICAgIDkNCisjZGVmaW5lIExNX1BTVEFUX1BPU19CMSAgICAgICAgIDEwDQorI2RlZmluZSBMTV9QU1RBVF9QT1NfQjIgICAgICAgICAxMQ0KKyNkZWZpbmUgTE1fUFNUQVRfUE9TX0IzICAgICAgICAgMTINCisjZGVmaW5lIExNX1BTVEFUX1NQRF9CMCAgICAgICAgIDEzDQorI2RlZmluZSBMTV9QU1RBVF9TUERfQjEgICAgICAgICAxNA0KKyNkZWZpbmUgTE1fUFNUQVRfU1BEX0IyICAgICAgICAgMTUNCisjZGVmaW5lIExNX1BTVEFUX1NQRF9CMyAgICAgICAgIDE2DQorI2RlZmluZSBMTV9QU1RBVF9MSU1JVF9OQ0xSICAgICAxNw0KKyNkZWZpbmUgTE1fUFNUQVRfTElNSVRfQ0xSICAgICAgMTgNCisjZGVmaW5lIExNX1BTVEFUX0ZBVUxUICAgICAgICAgIDE5DQorI2RlZmluZSBMTV9QU1RBVF9TVEtZX0ZMVF9OQ0xSICAyMA0KKyNkZWZpbmUgTE1fUFNUQVRfU1RLWV9GTFRfQ0xSICAgMjENCisjZGVmaW5lIExNX1BTVEFUX1ZPVVRfQjAgICAgICAgIDIyDQorI2RlZmluZSBMTV9QU1RBVF9WT1VUX0IxICAgICAgICAyMw0KKyNkZWZpbmUgTE1fUFNUQVRfRkxUX0NPVU5UX0NVUlJFTlQgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQNCisjZGVmaW5lIExNX1BTVEFUX0ZMVF9DT1VOVF9URU1QIDI1DQorI2RlZmluZSBMTV9QU1RBVF9GTFRfQ09VTlRfVk9MVEJVUyBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNg0KKyNkZWZpbmUgTE1fUFNUQVRfRkxUX0NPVU5UX0dBVEUgMjcNCisjZGVmaW5lIExNX1BTVEFUX0ZMVF9DT1VOVF9DT01NIDI4DQorI2RlZmluZSBMTV9QU1RBVF9DQU5TVFMgICAgICAgICAyOQ0KKyNkZWZpbmUgTE1fUFNUQVRfQ0FORVJSX0IwICAgICAgMzANCisjZGVmaW5lIExNX1BTVEFUX0NBTkVSUl9CMSAgICAgIDMxDQorDQorI2VuZGlmIC8vIF9fQ0FOX1BST1RPX0hfXw0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0NBTkphZ3Vhci5jcHAgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9DQU5KYWd1YXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiYmFkNzgKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9DQU5KYWd1YXIuY3BwCkBAIC0wLDAgKzEsMTI3MSBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBDb3B5cmlnaHQgKGMpIEZJUlNUIDIwMDkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCQkJCQkJCSAgKi8NCisvKiBPcGVuIFNvdXJjZSBTb2Z0d2FyZSAtIG1heSBiZSBtb2RpZmllZCBhbmQgc2hhcmVkIGJ5IEZSQyB0ZWFtcy4gVGhlIGNvZGUgICAqLw0KKy8qIG11c3QgYmUgYWNjb21wYW5pZWQgYnkgdGhlIEZJUlNUIEJTRCBsaWNlbnNlIGZpbGUgaW4gJChXSU5EX0JBU0UpL1dQSUxpYi4gICovDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisjaW5jbHVkZSAiQ0FOSmFndWFyLmgiDQorI2RlZmluZSB0TklSSU9faTMyIGludA0KKyNpbmNsdWRlICJDaGlwT2JqZWN0L05pRnBnYS5oIg0KKyNpbmNsdWRlICJDQU4vSmFndWFyQ0FORHJpdmVyLmgiDQorI2luY2x1ZGUgIkNBTi9jYW5fcHJvdG8uaCINCisjaW5jbHVkZSAiTmV0d29ya0NvbW11bmljYXRpb24vVXNhZ2VSZXBvcnRpbmcuaCINCisjaW5jbHVkZSAiV1BJRXJyb3JzLmgiDQorI2luY2x1ZGUgPHN0ZGlvLmg+DQorI2luY2x1ZGUgIkxpdmVXaW5kb3cvTGl2ZVdpbmRvdy5oIg0KKw0KKyNkZWZpbmUgc3dhcDE2KHgpICggKCgoeCk+PjgpICYweDAwRkYpIFwNCisgICAgICAgICAgICAgICAgICB8ICgoKHgpPDw4KSAmMHhGRjAwKSApDQorI2RlZmluZSBzd2FwMzIoeCkgKCAoKCh4KT4+MjQpJjB4MDAwMDAwRkYpIFwNCisgICAgICAgICAgICAgICAgICB8ICgoKHgpPj44KSAmMHgwMDAwRkYwMCkgXA0KKyAgICAgICAgICAgICAgICAgIHwgKCgoeCk8PDgpICYweDAwRkYwMDAwKSBcDQorICAgICAgICAgICAgICAgICAgfCAoKCh4KTw8MjQpJjB4RkYwMDAwMDApICkNCisNCisjZGVmaW5lIGtGdWxsTWVzc2FnZUlETWFzayAoQ0FOX01TR0lEX0FQSV9NIHwgQ0FOX01TR0lEX01GUl9NIHwgQ0FOX01TR0lEX0RUWVBFX00pDQorDQorY29uc3QgSU5UMzIgQ0FOSmFndWFyOjprQ29udHJvbGxlclJhdGU7DQorY29uc3QgZG91YmxlIENBTkphZ3Vhcjo6a0FwcHJveEJ1c1ZvbHRhZ2U7DQorDQorLyoqDQorICogQ29tbW9uIGluaXRpYWxpemF0aW9uIGNvZGUgY2FsbGVkIGJ5IGFsbCBjb25zdHJ1Y3RvcnMuDQorICovDQordm9pZCBDQU5KYWd1YXI6OkluaXRDQU5KYWd1YXIoKQ0KK3sNCisJbV90cmFuc2FjdGlvblNlbWFwaG9yZSA9IHNlbU1DcmVhdGUoU0VNX1FfUFJJT1JJVFkgfCBTRU1fSU5WRVJTSU9OX1NBRkUgfCBTRU1fREVMRVRFX1NBRkUpOw0KKwlpZiAobV9kZXZpY2VOdW1iZXIgPCAxIHx8IG1fZGV2aWNlTnVtYmVyID4gNjMpDQorCXsNCisJCWNoYXIgYnVmWzI1Nl07DQorCQlzbnByaW50ZihidWYsIDI1NiwgImRldmljZSBudW1iZXIgXCIlZFwiIG11c3QgYmUgYmV0d2VlbiAxIGFuZCA2MyIsIG1fZGV2aWNlTnVtYmVyKTsNCisJCXdwaV9zZXRXUElFcnJvcldpdGhDb250ZXh0KFBhcmFtZXRlck91dE9mUmFuZ2UsIGJ1Zik7DQorCQlyZXR1cm47DQorCX0NCisJVUlOVDMyIGZ3VmVyID0gR2V0RmlybXdhcmVWZXJzaW9uKCk7DQorCWlmIChTdGF0dXNJc0ZhdGFsKCkpDQorCQlyZXR1cm47DQorCS8vIDMzMzAgd2FzIHRoZSBmaXJzdCBzaGlwcGluZyBSREsgZmlybXdhcmUgdmVyc2lvbiBmb3IgdGhlIEphZ3Vhcg0KKwlpZiAoZndWZXIgPj0gMzMzMCB8fCBmd1ZlciA8IDkyKQ0KKwl7DQorCQljaGFyIGJ1ZlsyNTZdOw0KKwkJaWYgKGZ3VmVyIDwgMzMzMCkNCisJCXsNCisJCQlzbnByaW50ZihidWYsIDI1NiwgIkphZyAjJWQgZmlybXdhcmUgKCVkKSBpcyB0b28gb2xkIChtdXN0IGJlIGF0IGxlYXN0IHZlcnNpb24gOTIgb2YgdGhlIEZJUlNUIGFwcHJvdmVkIGZpcm13YXJlKSIsIG1fZGV2aWNlTnVtYmVyLCBmd1Zlcik7DQorCQl9DQorCQllbHNlDQorCQl7DQorCQkJc25wcmludGYoYnVmLCAyNTYsICJKYWcgIyVkIGZpcm13YXJlICglZCkgaXMgbm90IEZJUlNUIGFwcHJvdmVkIChtdXN0IGJlIGF0IGxlYXN0IHZlcnNpb24gOTIgb2YgdGhlIEZJUlNUIGFwcHJvdmVkIGZpcm13YXJlKSIsIG1fZGV2aWNlTnVtYmVyLCBmd1Zlcik7DQorCQl9DQorCQl3cGlfc2V0V1BJRXJyb3JXaXRoQ29udGV4dChKYWd1YXJWZXJzaW9uRXJyb3IsIGJ1Zik7DQorCQlyZXR1cm47DQorCX0NCisJc3dpdGNoIChtX2NvbnRyb2xNb2RlKQ0KKwl7DQorCWNhc2Uga1BlcmNlbnRWYnVzOg0KKwljYXNlIGtWb2x0YWdlOg0KKwkJLy8gTm8gYWRkaXRpb25hbCBjb25maWd1cmF0aW9uIHJlcXVpcmVkLi4uIHN0YXJ0IGVuYWJsZWQuDQorCQlFbmFibGVDb250cm9sKCk7DQorCQlicmVhazsNCisJZGVmYXVsdDoNCisJCWJyZWFrOw0KKwl9DQorCW1fc2FmZXR5SGVscGVyID0gbmV3IE1vdG9yU2FmZXR5SGVscGVyKHRoaXMpOw0KKw0KKwluVXNhZ2VSZXBvcnRpbmc6OnJlcG9ydChuVXNhZ2VSZXBvcnRpbmc6OmtSZXNvdXJjZVR5cGVfQ0FOSmFndWFyLCBtX2RldmljZU51bWJlciwgbV9jb250cm9sTW9kZSk7DQorCUxpdmVXaW5kb3c6OkdldEluc3RhbmNlKCktPkFkZEFjdHVhdG9yKCJDQU5KYWd1YXIiLCBtX2RldmljZU51bWJlciwgMCwgdGhpcyk7DQorfQ0KKw0KKy8qKg0KKyAqIENvbnN0cnVjdG9yDQorICogDQorICogQHBhcmFtIGRldmljZU51bWJlciBUaGUgdGhlIGFkZHJlc3Mgb2YgdGhlIEphZ3VhciBvbiB0aGUgQ0FOIGJ1cy4NCisgKi8NCitDQU5KYWd1YXI6OkNBTkphZ3VhcihVSU5UOCBkZXZpY2VOdW1iZXIsIENvbnRyb2xNb2RlIGNvbnRyb2xNb2RlKQ0KKwk6IG1fZGV2aWNlTnVtYmVyIChkZXZpY2VOdW1iZXIpDQorCSwgbV9jb250cm9sTW9kZSAoY29udHJvbE1vZGUpDQorCSwgbV90cmFuc2FjdGlvblNlbWFwaG9yZSAoTlVMTCkNCisJLCBtX21heE91dHB1dFZvbHRhZ2UgKGtBcHByb3hCdXNWb2x0YWdlKQ0KKwksIG1fc2FmZXR5SGVscGVyIChOVUxMKQ0KK3sNCisJSW5pdENBTkphZ3VhcigpOw0KK30NCisNCitDQU5KYWd1YXI6On5DQU5KYWd1YXIoKQ0KK3sNCisJZGVsZXRlIG1fc2FmZXR5SGVscGVyOw0KKwltX3NhZmV0eUhlbHBlciA9IE5VTEw7DQorCXNlbURlbGV0ZShtX3RyYW5zYWN0aW9uU2VtYXBob3JlKTsNCisJbV90cmFuc2FjdGlvblNlbWFwaG9yZSA9IE5VTEw7DQorfQ0KKw0KKy8qKg0KKyAqIFNldCB0aGUgb3V0cHV0IHNldC1wb2ludCB2YWx1ZS4gIA0KKyAqIA0KKyAqIFRoZSBzY2FsZSBhbmQgdGhlIHVuaXRzIGRlcGVuZCBvbiB0aGUgbW9kZSB0aGUgSmFndWFyIGlzIGluLg0KKyAqIEluIFBlcmNlbnRWYnVzIE1vZGUsIHRoZSBvdXRwdXRWYWx1ZSBpcyBmcm9tIC0xLjAgdG8gMS4wIChzYW1lIGFzIFBXTSBKYWd1YXIpLg0KKyAqIEluIFZvbHRhZ2UgTW9kZSwgdGhlIG91dHB1dFZhbHVlIGlzIGluIFZvbHRzLg0KKyAqIEluIEN1cnJlbnQgTW9kZSwgdGhlIG91dHB1dFZhbHVlIGlzIGluIEFtcHMuDQorICogSW4gU3BlZWQgTW9kZSwgdGhlIG91dHB1dFZhbHVlIGlzIGluIFJvdGF0aW9ucy9NaW51dGUuDQorICogSW4gUG9zaXRpb24gTW9kZSwgdGhlIG91dHB1dFZhbHVlIGlzIGluIFJvdGF0aW9ucy4NCisgKiANCisgKiBAcGFyYW0gb3V0cHV0VmFsdWUgVGhlIHNldC1wb2ludCB0byBzZW50IHRvIHRoZSBtb3RvciBjb250cm9sbGVyLg0KKyAqIEBwYXJhbSBzeW5jR3JvdXAgVGhlIHVwZGF0ZSBncm91cCB0byBhZGQgdGhpcyBTZXQoKSB0bywgcGVuZGluZyBVcGRhdGVTeW5jR3JvdXAoKS4gIElmIDAsIHVwZGF0ZSBpbW1lZGlhdGVseS4NCisgKi8NCit2b2lkIENBTkphZ3Vhcjo6U2V0KGZsb2F0IG91dHB1dFZhbHVlLCBVSU5UOCBzeW5jR3JvdXApDQorew0KKwlVSU5UMzIgbWVzc2FnZUlEOw0KKwlVSU5UOCBkYXRhQnVmZmVyWzhdOw0KKwlVSU5UOCBkYXRhU2l6ZTsNCisNCisJaWYgKG1fc2FmZXR5SGVscGVyICYmICFtX3NhZmV0eUhlbHBlci0+SXNBbGl2ZSgpKQ0KKwl7DQorCQlFbmFibGVDb250cm9sKCk7DQorCX0NCisNCisJc3dpdGNoKG1fY29udHJvbE1vZGUpDQorCXsNCisJY2FzZSBrUGVyY2VudFZidXM6DQorCQl7DQorCQkJbWVzc2FnZUlEID0gTE1fQVBJX1ZPTFRfVF9TRVQ7DQorCQkJaWYgKG91dHB1dFZhbHVlID4gMS4wKSBvdXRwdXRWYWx1ZSA9IDEuMDsNCisJCQlpZiAob3V0cHV0VmFsdWUgPCAtMS4wKSBvdXRwdXRWYWx1ZSA9IC0xLjA7DQorCQkJZGF0YVNpemUgPSBwYWNrUGVyY2VudGFnZShkYXRhQnVmZmVyLCBvdXRwdXRWYWx1ZSk7DQorCQl9DQorCQlicmVhazsNCisJY2FzZSBrU3BlZWQ6DQorCQl7DQorCQkJbWVzc2FnZUlEID0gTE1fQVBJX1NQRF9UX1NFVDsNCisJCQlkYXRhU2l6ZSA9IHBhY2tGWFAxNl8xNihkYXRhQnVmZmVyLCBvdXRwdXRWYWx1ZSk7DQorCQl9DQorCQlicmVhazsNCisJY2FzZSBrUG9zaXRpb246DQorCQl7DQorCQkJbWVzc2FnZUlEID0gTE1fQVBJX1BPU19UX1NFVDsNCisJCQlkYXRhU2l6ZSA9IHBhY2tGWFAxNl8xNihkYXRhQnVmZmVyLCBvdXRwdXRWYWx1ZSk7DQorCQl9DQorCQlicmVhazsNCisJY2FzZSBrQ3VycmVudDoNCisJCXsNCisJCQltZXNzYWdlSUQgPSBMTV9BUElfSUNUUkxfVF9TRVQ7DQorCQkJZGF0YVNpemUgPSBwYWNrRlhQOF84KGRhdGFCdWZmZXIsIG91dHB1dFZhbHVlKTsNCisJCX0NCisJCWJyZWFrOw0KKwljYXNlIGtWb2x0YWdlOg0KKwkJew0KKwkJCW1lc3NhZ2VJRCA9IExNX0FQSV9WQ09NUF9UX1NFVDsNCisJCQlkYXRhU2l6ZSA9IHBhY2tGWFA4XzgoZGF0YUJ1ZmZlciwgb3V0cHV0VmFsdWUpOw0KKwkJfQ0KKwkJYnJlYWs7DQorCWRlZmF1bHQ6DQorCQlyZXR1cm47DQorCX0NCisJaWYgKHN5bmNHcm91cCAhPSAwKQ0KKwl7DQorCQlkYXRhQnVmZmVyW2RhdGFTaXplXSA9IHN5bmNHcm91cDsNCisJCWRhdGFTaXplKys7DQorCX0NCisJc2V0VHJhbnNhY3Rpb24obWVzc2FnZUlELCBkYXRhQnVmZmVyLCBkYXRhU2l6ZSk7DQorCWlmIChtX3NhZmV0eUhlbHBlcikgbV9zYWZldHlIZWxwZXItPkZlZWQoKTsNCit9DQorDQorLyoqDQorICogR2V0IHRoZSByZWNlbnRseSBzZXQgb3V0cHV0VmFsdWUgc2V0cG9pbnQuDQorICogDQorICogVGhlIHNjYWxlIGFuZCB0aGUgdW5pdHMgZGVwZW5kIG9uIHRoZSBtb2RlIHRoZSBKYWd1YXIgaXMgaW4uDQorICogSW4gUGVyY2VudFZidXMgTW9kZSwgdGhlIG91dHB1dFZhbHVlIGlzIGZyb20gLTEuMCB0byAxLjAgKHNhbWUgYXMgUFdNIEphZ3VhcikuDQorICogSW4gVm9sdGFnZSBNb2RlLCB0aGUgb3V0cHV0VmFsdWUgaXMgaW4gVm9sdHMuDQorICogSW4gQ3VycmVudCBNb2RlLCB0aGUgb3V0cHV0VmFsdWUgaXMgaW4gQW1wcy4NCisgKiBJbiBTcGVlZCBNb2RlLCB0aGUgb3V0cHV0VmFsdWUgaXMgaW4gUm90YXRpb25zL01pbnV0ZS4NCisgKiBJbiBQb3NpdGlvbiBNb2RlLCB0aGUgb3V0cHV0VmFsdWUgaXMgaW4gUm90YXRpb25zLg0KKyAqIA0KKyAqIEByZXR1cm4gVGhlIG1vc3QgcmVjZW50bHkgc2V0IG91dHB1dFZhbHVlIHNldHBvaW50Lg0KKyAqLw0KK2Zsb2F0IENBTkphZ3Vhcjo6R2V0KCkNCit7DQorCVVJTlQ4IGRhdGFCdWZmZXJbOF07DQorCVVJTlQ4IGRhdGFTaXplOw0KKw0KKwlzd2l0Y2gobV9jb250cm9sTW9kZSkNCisJew0KKwljYXNlIGtQZXJjZW50VmJ1czoNCisJCWdldFRyYW5zYWN0aW9uKExNX0FQSV9WT0xUX1NFVCwgZGF0YUJ1ZmZlciwgJmRhdGFTaXplKTsNCisJCWlmIChkYXRhU2l6ZSA9PSBzaXplb2YoSU5UMTYpKQ0KKwkJew0KKwkJCXJldHVybiB1bnBhY2tQZXJjZW50YWdlKGRhdGFCdWZmZXIpOw0KKwkJfQ0KKwkJYnJlYWs7DQorCWNhc2Uga1NwZWVkOg0KKwkJZ2V0VHJhbnNhY3Rpb24oTE1fQVBJX1NQRF9TRVQsIGRhdGFCdWZmZXIsICZkYXRhU2l6ZSk7DQorCQlpZiAoZGF0YVNpemUgPT0gc2l6ZW9mKElOVDMyKSkNCisJCXsNCisJCQlyZXR1cm4gdW5wYWNrRlhQMTZfMTYoZGF0YUJ1ZmZlcik7DQorCQl9DQorCQlicmVhazsNCisJY2FzZSBrUG9zaXRpb246DQorCQlnZXRUcmFuc2FjdGlvbihMTV9BUElfUE9TX1NFVCwgZGF0YUJ1ZmZlciwgJmRhdGFTaXplKTsNCisJCWlmIChkYXRhU2l6ZSA9PSBzaXplb2YoSU5UMzIpKQ0KKwkJew0KKwkJCXJldHVybiB1bnBhY2tGWFAxNl8xNihkYXRhQnVmZmVyKTsNCisJCX0NCisJCWJyZWFrOw0KKwljYXNlIGtDdXJyZW50Og0KKwkJZ2V0VHJhbnNhY3Rpb24oTE1fQVBJX0lDVFJMX1NFVCwgZGF0YUJ1ZmZlciwgJmRhdGFTaXplKTsNCisJCWlmIChkYXRhU2l6ZSA9PSBzaXplb2YoSU5UMTYpKQ0KKwkJew0KKwkJCXJldHVybiB1bnBhY2tGWFA4XzgoZGF0YUJ1ZmZlcik7DQorCQl9DQorCQlicmVhazsNCisJY2FzZSBrVm9sdGFnZToNCisJCWdldFRyYW5zYWN0aW9uKExNX0FQSV9WQ09NUF9TRVQsIGRhdGFCdWZmZXIsICZkYXRhU2l6ZSk7DQorCQlpZiAoZGF0YVNpemUgPT0gc2l6ZW9mKElOVDE2KSkNCisJCXsNCisJCQlyZXR1cm4gdW5wYWNrRlhQOF84KGRhdGFCdWZmZXIpOw0KKwkJfQ0KKwkJYnJlYWs7DQorCX0NCisJcmV0dXJuIDAuMDsNCit9DQorDQorLyoqDQorICogQ29tbW9uIGludGVyZmFjZSBmb3IgZGlzYWJsaW5nIGEgbW90b3IuDQorICogDQorICogQGRlcHJlY2F0ZWQgQ2FsbCBEaXNhYmxlQ29udHJvbCBpbnN0ZWFkLg0KKyAqLw0KK3ZvaWQgQ0FOSmFndWFyOjpEaXNhYmxlKCkNCit7DQorCURpc2FibGVDb250cm9sKCk7DQorfQ0KKw0KKy8qKg0KKyAqIFdyaXRlIG91dCB0aGUgUElEIHZhbHVlIGFzIHNlZW4gaW4gdGhlIFBJRE91dHB1dCBiYXNlIG9iamVjdC4NCisgKiANCisgKiBAZGVwcmVjYXRlZCBDYWxsIFNldCBpbnN0ZWFkLg0KKyAqIA0KKyAqIEBwYXJhbSBvdXRwdXQgV3JpdGUgb3V0IHRoZSBQZXJjZW50VmJ1cyB2YWx1ZSBhcyB3YXMgY29tcHV0ZWQgYnkgdGhlIFBJRENvbnRyb2xsZXINCisgKi8NCit2b2lkIENBTkphZ3Vhcjo6UElEV3JpdGUoZmxvYXQgb3V0cHV0KQ0KK3sNCisJaWYgKG1fY29udHJvbE1vZGUgPT0ga1BlcmNlbnRWYnVzKQ0KKwl7DQorCQlTZXQob3V0cHV0KTsNCisJfQ0KKwllbHNlDQorCXsNCisJCXdwaV9zZXRXUElFcnJvcldpdGhDb250ZXh0KEluY29tcGF0aWJsZU1vZGUsICJQSUQgb25seSBzdXBwb3J0ZWQgaW4gUGVyY2VudFZidXMgbW9kZSIpOw0KKwl9DQorfQ0KKw0KK1VJTlQ4IENBTkphZ3Vhcjo6cGFja1BlcmNlbnRhZ2UoVUlOVDggKmJ1ZmZlciwgZG91YmxlIHZhbHVlKQ0KK3sNCisJSU5UMTYgaW50VmFsdWUgPSAoSU5UMTYpKHZhbHVlICogMzI3NjcuMCk7DQorCSooKElOVDE2KilidWZmZXIpID0gc3dhcDE2KGludFZhbHVlKTsNCisJcmV0dXJuIHNpemVvZihJTlQxNik7DQorfQ0KKw0KK1VJTlQ4IENBTkphZ3Vhcjo6cGFja0ZYUDhfOChVSU5UOCAqYnVmZmVyLCBkb3VibGUgdmFsdWUpDQorew0KKwlJTlQxNiBpbnRWYWx1ZSA9IChJTlQxNikodmFsdWUgKiAyNTYuMCk7DQorCSooKElOVDE2KilidWZmZXIpID0gc3dhcDE2KGludFZhbHVlKTsNCisJcmV0dXJuIHNpemVvZihJTlQxNik7DQorfQ0KKw0KK1VJTlQ4IENBTkphZ3Vhcjo6cGFja0ZYUDE2XzE2KFVJTlQ4ICpidWZmZXIsIGRvdWJsZSB2YWx1ZSkNCit7DQorCUlOVDMyIGludFZhbHVlID0gKElOVDMyKSh2YWx1ZSAqIDY1NTM2LjApOw0KKwkqKChJTlQzMiopYnVmZmVyKSA9IHN3YXAzMihpbnRWYWx1ZSk7DQorCXJldHVybiBzaXplb2YoSU5UMzIpOw0KK30NCisNCitVSU5UOCBDQU5KYWd1YXI6OnBhY2tJTlQxNihVSU5UOCAqYnVmZmVyLCBJTlQxNiB2YWx1ZSkNCit7DQorCSooKElOVDE2KilidWZmZXIpID0gc3dhcDE2KHZhbHVlKTsNCisJcmV0dXJuIHNpemVvZihJTlQxNik7DQorfQ0KKw0KK1VJTlQ4IENBTkphZ3Vhcjo6cGFja0lOVDMyKFVJTlQ4ICpidWZmZXIsIElOVDMyIHZhbHVlKQ0KK3sNCisJKigoSU5UMzIqKWJ1ZmZlcikgPSBzd2FwMzIodmFsdWUpOw0KKwlyZXR1cm4gc2l6ZW9mKElOVDMyKTsNCit9DQorDQorZG91YmxlIENBTkphZ3Vhcjo6dW5wYWNrUGVyY2VudGFnZShVSU5UOCAqYnVmZmVyKQ0KK3sNCisJSU5UMTYgdmFsdWUgPSAqKChJTlQxNiopYnVmZmVyKTsNCisJdmFsdWUgPSBzd2FwMTYodmFsdWUpOw0KKwlyZXR1cm4gdmFsdWUgLyAzMjc2Ny4wOw0KK30NCisNCitkb3VibGUgQ0FOSmFndWFyOjp1bnBhY2tGWFA4XzgoVUlOVDggKmJ1ZmZlcikNCit7DQorCUlOVDE2IHZhbHVlID0gKigoSU5UMTYqKWJ1ZmZlcik7DQorCXZhbHVlID0gc3dhcDE2KHZhbHVlKTsNCisJcmV0dXJuIHZhbHVlIC8gMjU2LjA7DQorfQ0KKw0KK2RvdWJsZSBDQU5KYWd1YXI6OnVucGFja0ZYUDE2XzE2KFVJTlQ4ICpidWZmZXIpDQorew0KKwlJTlQzMiB2YWx1ZSA9ICooKElOVDMyKilidWZmZXIpOw0KKwl2YWx1ZSA9IHN3YXAzMih2YWx1ZSk7DQorCXJldHVybiB2YWx1ZSAvIDY1NTM2LjA7DQorfQ0KKw0KK0lOVDE2IENBTkphZ3Vhcjo6dW5wYWNrSU5UMTYoVUlOVDggKmJ1ZmZlcikNCit7DQorCUlOVDE2IHZhbHVlID0gKigoSU5UMTYqKWJ1ZmZlcik7DQorCXJldHVybiBzd2FwMTYodmFsdWUpOw0KK30NCisNCitJTlQzMiBDQU5KYWd1YXI6OnVucGFja0lOVDMyKFVJTlQ4ICpidWZmZXIpDQorew0KKwlJTlQzMiB2YWx1ZSA9ICooKElOVDMyKilidWZmZXIpOw0KKwlyZXR1cm4gc3dhcDMyKHZhbHVlKTsNCit9DQorDQorLyoqDQorICogU2VuZCBhIG1lc3NhZ2Ugb24gdGhlIENBTiBidXMgdGhyb3VnaCB0aGUgQ0FOIGRyaXZlciBpbiBGUkNfTmV0d29ya0NvbW11bmljYXRpb24NCisgKiANCisgKiBUcnVzdGVkIG1lc3NhZ2VzIHJlcXVpcmUgYSAyLWJ5dGUgdG9rZW4gYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZGF0YSBwYXlsb2FkLg0KKyAqIElmIHRoZSBtZXNzYWdlIGJlaW5nIHNlbnQgaXMgdHJ1c3RlZCwgbWFrZSBzcGFjZSBmb3IgdGhlIHRva2VuLg0KKyAqIA0KKyAqIEBwYXJhbSBtZXNzYWdlSUQgVGhlIG1lc3NhZ2VJRCB0byBiZSB1c2VkIG9uIHRoZSBDQU4gYnVzDQorICogQHBhcmFtIGRhdGEgVGhlIHVwIHRvIDggYnl0ZXMgb2YgZGF0YSB0byBiZSBzZW50IHdpdGggdGhlIG1lc3NhZ2UNCisgKiBAcGFyYW0gZGF0YVNpemUgU3BlY2lmeSBob3cgbXVjaCBvZiB0aGUgZGF0YSBpbiAiZGF0YSIgdG8gc2VuZA0KKyAqIEByZXR1cm4gU3RhdHVzIG9mIHNlbmQgY2FsbA0KKyAqLw0KK0lOVDMyIENBTkphZ3Vhcjo6c2VuZE1lc3NhZ2UoVUlOVDMyIG1lc3NhZ2VJRCwgY29uc3QgVUlOVDggKmRhdGEsIFVJTlQ4IGRhdGFTaXplKQ0KK3sNCisJc3RhdGljIGNvbnN0IFVJTlQzMiBrVHJ1c3RlZE1lc3NhZ2VzW10gPSB7DQorCQkJTE1fQVBJX1ZPTFRfVF9FTiwgTE1fQVBJX1ZPTFRfVF9TRVQsIExNX0FQSV9TUERfVF9FTiwgTE1fQVBJX1NQRF9UX1NFVCwNCisJCQlMTV9BUElfVkNPTVBfVF9FTiwgTE1fQVBJX1ZDT01QX1RfU0VULCBMTV9BUElfUE9TX1RfRU4sIExNX0FQSV9QT1NfVF9TRVQsDQorCQkJTE1fQVBJX0lDVFJMX1RfRU4sIExNX0FQSV9JQ1RSTF9UX1NFVH07DQorCUlOVDMyIHN0YXR1cz0wOw0KKw0KKwlmb3IgKFVJTlQ4IGk9MDsgaTwoc2l6ZW9mKGtUcnVzdGVkTWVzc2FnZXMpL3NpemVvZihrVHJ1c3RlZE1lc3NhZ2VzWzBdKSk7IGkrKykNCisJew0KKwkJaWYgKChrRnVsbE1lc3NhZ2VJRE1hc2sgJiBtZXNzYWdlSUQpID09IGtUcnVzdGVkTWVzc2FnZXNbaV0pDQorCQl7DQorCQkJVUlOVDggZGF0YUJ1ZmZlcls4XTsNCisJCQlkYXRhQnVmZmVyWzBdID0gMDsNCisJCQlkYXRhQnVmZmVyWzFdID0gMDsNCisJCQkvLyBNYWtlIHN1cmUgdGhlIGRhdGEgd2lsbCBzdGlsbCBmaXQgYWZ0ZXIgYWRqdXN0aW5nIGZvciB0aGUgdG9rZW4uDQorCQkJaWYgKGRhdGFTaXplID4gNikNCisJCQl7DQorCQkJCS8vIFRPRE86IEkgd291bGQgcmF0aGVyIHRoaXMgbm90IGhhdmUgdG8gc2V0IHRoZSBnbG9iYWwgZXJyb3INCisJCQkJd3BpX3NldEdsb2JhbFdQSUVycm9yV2l0aENvbnRleHQoUGFyYW1ldGVyT3V0T2ZSYW5nZSwgImRhdGFTaXplID4gNiIpOw0KKwkJCQlyZXR1cm4gMDsNCisJCQl9DQorCQkJZm9yIChVSU5UOCBqPTA7IGogPCBkYXRhU2l6ZTsgaisrKQ0KKwkJCXsNCisJCQkJZGF0YUJ1ZmZlcltqICsgMl0gPSBkYXRhW2pdOw0KKwkJCX0NCisJCQlGUkNfTmV0d29ya0NvbW11bmljYXRpb25fSmFndWFyQ0FORHJpdmVyX3NlbmRNZXNzYWdlKG1lc3NhZ2VJRCwgZGF0YUJ1ZmZlciwgZGF0YVNpemUgKyAyLCAmc3RhdHVzKTsNCisJCQlyZXR1cm4gc3RhdHVzOw0KKwkJfQ0KKwl9DQorCUZSQ19OZXR3b3JrQ29tbXVuaWNhdGlvbl9KYWd1YXJDQU5Ecml2ZXJfc2VuZE1lc3NhZ2UobWVzc2FnZUlELCBkYXRhLCBkYXRhU2l6ZSwgJnN0YXR1cyk7DQorCXJldHVybiBzdGF0dXM7DQorfQ0KKw0KKy8qKg0KKyAqIFJlY2VpdmUgYSBtZXNzYWdlIGZyb20gdGhlIENBTiBidXMgdGhyb3VnaCB0aGUgQ0FOIGRyaXZlciBpbiBGUkNfTmV0d29ya0NvbW11bmljYXRpb24NCisgKiANCisgKiBAcGFyYW0gbWVzc2FnZUlEIFRoZSBtZXNzYWdlSUQgdG8gcmVhZCBmcm9tIHRoZSBDQU4gYnVzDQorICogQHBhcmFtIGRhdGEgVGhlIHVwIHRvIDggYnl0ZXMgb2YgZGF0YSB0aGF0IHdhcyByZWNlaXZlZCB3aXRoIHRoZSBtZXNzYWdlDQorICogQHBhcmFtIGRhdGFTaXplIEluZGljYXRlcyBob3cgbXVjaCBkYXRhIHdhcyByZWNlaXZlZA0KKyAqIEBwYXJhbSB0aW1lb3V0IFNwZWNpZnkgaG93IGxvbmcgdG8gd2FpdCBmb3IgYSBtZXNzYWdlIChpbiBzZWNvbmRzKQ0KKyAqIEByZXR1cm4gU3RhdHVzIG9mIHJlY2VpdmUgY2FsbA0KKyAqLw0KK0lOVDMyIENBTkphZ3Vhcjo6cmVjZWl2ZU1lc3NhZ2UoVUlOVDMyICptZXNzYWdlSUQsIFVJTlQ4ICpkYXRhLCBVSU5UOCAqZGF0YVNpemUsIGZsb2F0IHRpbWVvdXQpDQorew0KKwlJTlQzMiBzdGF0dXMgPSAwOw0KKwlGUkNfTmV0d29ya0NvbW11bmljYXRpb25fSmFndWFyQ0FORHJpdmVyX3JlY2VpdmVNZXNzYWdlKG1lc3NhZ2VJRCwgZGF0YSwgZGF0YVNpemUsDQorCQkJKFVJTlQzMikodGltZW91dCAqIDEwMDApLCAmc3RhdHVzKTsNCisJcmV0dXJuIHN0YXR1czsNCit9DQorDQorLyoqDQorICogRXhlY3V0ZSBhIHRyYW5zYWN0aW9uIHdpdGggYSBKYWd1YXIgdGhhdCBzZXRzIHNvbWUgcHJvcGVydHkuDQorICogDQorICogSmFndWFyIGFsd2F5cyBhY2tzIHdoZW4gaXQgcmVjZWl2ZXMgYSBtZXNzYWdlLiAgSWYgd2UgZG9uJ3Qgd2FpdCBmb3IgYW4gYWNrLA0KKyAqIHRoZSBtZXNzYWdlIG9iamVjdCBpbiB0aGUgSmFndWFyIGNvdWxkIGdldCBvdmVyd3JpdHRlbiBiZWZvcmUgaXQgaXMgaGFuZGxlZC4NCisgKiANCisgKiBAcGFyYW0gbWVzc2FnZUlEIFRoZSBtZXNzYWdlSUQgdG8gYmUgdXNlZCBvbiB0aGUgQ0FOIGJ1cyAoZGV2aWNlIG51bWJlciBpcyBhZGRlZCBpbnRlcm5hbGx5KQ0KKyAqIEBwYXJhbSBkYXRhIFRoZSB1cCB0byA4IGJ5dGVzIG9mIGRhdGEgdG8gYmUgc2VudCB3aXRoIHRoZSBtZXNzYWdlDQorICogQHBhcmFtIGRhdGFTaXplIFNwZWNpZnkgaG93IG11Y2ggb2YgdGhlIGRhdGEgaW4gImRhdGEiIHRvIHNlbmQNCisgKi8NCit2b2lkIENBTkphZ3Vhcjo6c2V0VHJhbnNhY3Rpb24oVUlOVDMyIG1lc3NhZ2VJRCwgY29uc3QgVUlOVDggKmRhdGEsIFVJTlQ4IGRhdGFTaXplKQ0KK3sNCisJVUlOVDMyIGFja01lc3NhZ2VJRCA9IExNX0FQSV9BQ0sgfCBtX2RldmljZU51bWJlcjsNCisJSU5UMzIgbG9jYWxTdGF0dXMgPSAwOw0KKw0KKwkvLyBJZiB0aGVyZSB3YXMgYW4gZXJyb3Igb24gdGhpcyBvYmplY3QgYW5kIGl0IHdhc24ndCBhIHRpbWVvdXQsIHJlZnVzZSB0byB0YWxrIHRvIHRoZSBkZXZpY2UNCisJLy8gQ2FsbCBDbGVhckVycm9yKCkgb24gdGhlIG9iamVjdCB0byB0cnkgYWdhaW4NCisJaWYgKFN0YXR1c0lzRmF0YWwoKSAmJiBHZXRFcnJvcigpLkdldENvZGUoKSAhPSAtNDQwODcpDQorCQlyZXR1cm47DQorDQorCS8vIE1ha2Ugc3VyZSB3ZSBkb24ndCBoYXZlIG1vcmUgdGhhbiBvbmUgdHJhbnNhY3Rpb24gd2l0aCB0aGUgc2FtZSBKYWd1YXIgb3V0c3RhbmRpbmcuDQorCXNlbVRha2UobV90cmFuc2FjdGlvblNlbWFwaG9yZSwgV0FJVF9GT1JFVkVSKTsNCisNCisJLy8gVGhyb3cgYXdheSBhbnkgc3RhbGUgYWNrcy4NCisJcmVjZWl2ZU1lc3NhZ2UoJmFja01lc3NhZ2VJRCwgTlVMTCwgMCwgMC4wZik7DQorCS8vIFNlbmQgdGhlIG1lc3NhZ2Ugd2l0aCB0aGUgZGF0YS4NCisJbG9jYWxTdGF0dXMgPSBzZW5kTWVzc2FnZShtZXNzYWdlSUQgfCBtX2RldmljZU51bWJlciwgZGF0YSwgZGF0YVNpemUpOw0KKwl3cGlfc2V0RXJyb3JXaXRoQ29udGV4dChsb2NhbFN0YXR1cywgInNlbmRNZXNzYWdlIik7DQorCS8vIFdhaXQgZm9yIGFuIGFjay4NCisJbG9jYWxTdGF0dXMgPSByZWNlaXZlTWVzc2FnZSgmYWNrTWVzc2FnZUlELCBOVUxMLCAwKTsNCisJd3BpX3NldEVycm9yV2l0aENvbnRleHQobG9jYWxTdGF0dXMsICJyZWNlaXZlTWVzc2FnZSIpOw0KKw0KKwkvLyBUcmFuc2FjdGlvbiBjb21wbGV0ZS4NCisJc2VtR2l2ZShtX3RyYW5zYWN0aW9uU2VtYXBob3JlKTsNCit9DQorDQorLyoqDQorICogRXhlY3V0ZSBhIHRyYW5zYWN0aW9uIHdpdGggYSBKYWd1YXIgdGhhdCBnZXRzIHNvbWUgcHJvcGVydHkuDQorICogDQorICogSmFndWFyIGFsd2F5cyBnZW5lcmF0ZXMgYSBtZXNzYWdlIHdpdGggdGhlIHNhbWUgbWVzc2FnZSBJRCB3aGVuIHJlcGx5aW5nLg0KKyAqIA0KKyAqIEBwYXJhbSBtZXNzYWdlSUQgVGhlIG1lc3NhZ2VJRCB0byByZWFkIGZyb20gdGhlIENBTiBidXMgKGRldmljZSBudW1iZXIgaXMgYWRkZWQgaW50ZXJuYWxseSkNCisgKiBAcGFyYW0gZGF0YSBUaGUgdXAgdG8gOCBieXRlcyBvZiBkYXRhIHRoYXQgd2FzIHJlY2VpdmVkIHdpdGggdGhlIG1lc3NhZ2UNCisgKiBAcGFyYW0gZGF0YVNpemUgSW5kaWNhdGVzIGhvdyBtdWNoIGRhdGEgd2FzIHJlY2VpdmVkDQorICovDQordm9pZCBDQU5KYWd1YXI6OmdldFRyYW5zYWN0aW9uKFVJTlQzMiBtZXNzYWdlSUQsIFVJTlQ4ICpkYXRhLCBVSU5UOCAqZGF0YVNpemUpDQorew0KKwlVSU5UMzIgdGFyZ2V0ZWRNZXNzYWdlSUQgPSBtZXNzYWdlSUQgfCBtX2RldmljZU51bWJlcjsNCisJSU5UMzIgbG9jYWxTdGF0dXMgPSAwOw0KKw0KKwkvLyBJZiB0aGVyZSB3YXMgYW4gZXJyb3Igb24gdGhpcyBvYmplY3QgYW5kIGl0IHdhc24ndCBhIHRpbWVvdXQsIHJlZnVzZSB0byB0YWxrIHRvIHRoZSBkZXZpY2UNCisJLy8gQ2FsbCBDbGVhckVycm9yKCkgb24gdGhlIG9iamVjdCB0byB0cnkgYWdhaW4NCisJaWYgKFN0YXR1c0lzRmF0YWwoKSAmJiBHZXRFcnJvcigpLkdldENvZGUoKSAhPSAtNDQwODcpDQorCXsNCisJCWlmIChkYXRhU2l6ZSAhPSBOVUxMKQ0KKwkJCSpkYXRhU2l6ZSA9IDA7DQorCQlyZXR1cm47DQorCX0NCisNCisJLy8gTWFrZSBzdXJlIHdlIGRvbid0IGhhdmUgbW9yZSB0aGFuIG9uZSB0cmFuc2FjdGlvbiB3aXRoIHRoZSBzYW1lIEphZ3VhciBvdXRzdGFuZGluZy4NCisJc2VtVGFrZShtX3RyYW5zYWN0aW9uU2VtYXBob3JlLCBXQUlUX0ZPUkVWRVIpOw0KKw0KKwkvLyBUaHJvdyBhd2F5IGFueSBzdGFsZSByZXNwb25zZXMuDQorCXJlY2VpdmVNZXNzYWdlKCZ0YXJnZXRlZE1lc3NhZ2VJRCwgTlVMTCwgMCwgMC4wZik7DQorCS8vIFNlbmQgdGhlIG1lc3NhZ2UgcmVxdWVzdGluZyBkYXRhLg0KKwlsb2NhbFN0YXR1cyA9IHNlbmRNZXNzYWdlKHRhcmdldGVkTWVzc2FnZUlELCBOVUxMLCAwKTsNCisJd3BpX3NldEVycm9yV2l0aENvbnRleHQobG9jYWxTdGF0dXMsICJzZW5kTWVzc2FnZSIpOw0KKwkvLyBDYWxsZXIgbWF5IGhhdmUgc2V0IGJpdDMxIGZvciByZW1vdGUgZnJhbWUgdHJhbnNtaXNzaW9uIHNvIGNsZWFyIGludmFsaWQgYml0c1szMS0yOV0NCisJdGFyZ2V0ZWRNZXNzYWdlSUQgJj0gMHgxRkZGRkZGRjsNCisJLy8gV2FpdCBmb3IgdGhlIGRhdGEuDQorCWxvY2FsU3RhdHVzID0gcmVjZWl2ZU1lc3NhZ2UoJnRhcmdldGVkTWVzc2FnZUlELCBkYXRhLCBkYXRhU2l6ZSk7DQorCXdwaV9zZXRFcnJvcldpdGhDb250ZXh0KGxvY2FsU3RhdHVzLCAicmVjZWl2ZU1lc3NhZ2UiKTsNCisNCisJLy8gVHJhbnNhY3Rpb24gY29tcGxldGUuDQorCXNlbUdpdmUobV90cmFuc2FjdGlvblNlbWFwaG9yZSk7DQorfQ0KKw0KKy8qKg0KKyAqIFNldCB0aGUgcmVmZXJlbmNlIHNvdXJjZSBkZXZpY2UgZm9yIHNwZWVkIGNvbnRyb2xsZXIgbW9kZS4NCisgKiANCisgKiBDaG9vc2UgZW5jb2RlciBhcyB0aGUgc291cmNlIG9mIHNwZWVkIGZlZWRiYWNrIHdoZW4gaW4gc3BlZWQgY29udHJvbCBtb2RlLg0KKyAqIA0KKyAqIEBwYXJhbSByZWZlcmVuY2UgU3BlY2lmeSBhIFNwZWVkUmVmZXJlbmNlLg0KKyAqLw0KK3ZvaWQgQ0FOSmFndWFyOjpTZXRTcGVlZFJlZmVyZW5jZShTcGVlZFJlZmVyZW5jZSByZWZlcmVuY2UpDQorew0KKwlVSU5UOCBkYXRhQnVmZmVyWzhdOw0KKw0KKwlkYXRhQnVmZmVyWzBdID0gcmVmZXJlbmNlOw0KKwlzZXRUcmFuc2FjdGlvbihMTV9BUElfU1BEX1JFRiwgZGF0YUJ1ZmZlciwgc2l6ZW9mKFVJTlQ4KSk7DQorfQ0KKw0KKy8qKg0KKyAqIEdldCB0aGUgcmVmZXJlbmNlIHNvdXJjZSBkZXZpY2UgZm9yIHNwZWVkIGNvbnRyb2xsZXIgbW9kZS4NCisgKiANCisgKiBAcmV0dXJuIEEgU3BlZWRSZWZlcmVuY2UgaW5kaWNhdGluZyB0aGUgY3VycmVudGx5IHNlbGVjdGVkIHJlZmVyZW5jZSBkZXZpY2UgZm9yIHNwZWVkIGNvbnRyb2xsZXIgbW9kZS4NCisgKi8NCitDQU5KYWd1YXI6OlNwZWVkUmVmZXJlbmNlIENBTkphZ3Vhcjo6R2V0U3BlZWRSZWZlcmVuY2UoKQ0KK3sNCisJVUlOVDggZGF0YUJ1ZmZlcls4XTsNCisJVUlOVDggZGF0YVNpemU7DQorDQorCWdldFRyYW5zYWN0aW9uKExNX0FQSV9TUERfUkVGLCBkYXRhQnVmZmVyLCAmZGF0YVNpemUpOw0KKwlpZiAoZGF0YVNpemUgPT0gc2l6ZW9mKFVJTlQ4KSkNCisJew0KKwkJcmV0dXJuIChTcGVlZFJlZmVyZW5jZSkqZGF0YUJ1ZmZlcjsNCisJfQ0KKwlyZXR1cm4ga1NwZWVkUmVmX05vbmU7DQorfQ0KKw0KKy8qKg0KKyAqIFNldCB0aGUgcmVmZXJlbmNlIHNvdXJjZSBkZXZpY2UgZm9yIHBvc2l0aW9uIGNvbnRyb2xsZXIgbW9kZS4NCisgKiANCisgKiBDaG9vc2UgYmV0d2VlbiB1c2luZyBhbmQgZW5jb2RlciBhbmQgdXNpbmcgYSBwb3RlbnRpb21ldGVyDQorICogYXMgdGhlIHNvdXJjZSBvZiBwb3NpdGlvbiBmZWVkYmFjayB3aGVuIGluIHBvc2l0aW9uIGNvbnRyb2wgbW9kZS4NCisgKiANCisgKiBAcGFyYW0gcmVmZXJlbmNlIFNwZWNpZnkgYSBQb3NpdGlvblJlZmVyZW5jZS4NCisgKi8NCit2b2lkIENBTkphZ3Vhcjo6U2V0UG9zaXRpb25SZWZlcmVuY2UoUG9zaXRpb25SZWZlcmVuY2UgcmVmZXJlbmNlKQ0KK3sNCisJVUlOVDggZGF0YUJ1ZmZlcls4XTsNCisNCisJZGF0YUJ1ZmZlclswXSA9IHJlZmVyZW5jZTsNCisJc2V0VHJhbnNhY3Rpb24oTE1fQVBJX1BPU19SRUYsIGRhdGFCdWZmZXIsIHNpemVvZihVSU5UOCkpOw0KK30NCisNCisvKioNCisgKiBHZXQgdGhlIHJlZmVyZW5jZSBzb3VyY2UgZGV2aWNlIGZvciBwb3NpdGlvbiBjb250cm9sbGVyIG1vZGUuDQorICogDQorICogQHJldHVybiBBIFBvc2l0aW9uUmVmZXJlbmNlIGluZGljYXRpbmcgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCByZWZlcmVuY2UgZGV2aWNlIGZvciBwb3NpdGlvbiBjb250cm9sbGVyIG1vZGUuDQorICovDQorQ0FOSmFndWFyOjpQb3NpdGlvblJlZmVyZW5jZSBDQU5KYWd1YXI6OkdldFBvc2l0aW9uUmVmZXJlbmNlKCkNCit7DQorCVVJTlQ4IGRhdGFCdWZmZXJbOF07DQorCVVJTlQ4IGRhdGFTaXplOw0KKw0KKwlnZXRUcmFuc2FjdGlvbihMTV9BUElfUE9TX1JFRiwgZGF0YUJ1ZmZlciwgJmRhdGFTaXplKTsNCisJaWYgKGRhdGFTaXplID09IHNpemVvZihVSU5UOCkpDQorCXsNCisJCXJldHVybiAoUG9zaXRpb25SZWZlcmVuY2UpKmRhdGFCdWZmZXI7DQorCX0NCisJcmV0dXJuIGtQb3NSZWZfTm9uZTsNCit9DQorDQorLyoqDQorICogU2V0IHRoZSBQLCBJLCBhbmQgRCBjb25zdGFudHMgZm9yIHRoZSBjbG9zZWQgbG9vcCBtb2Rlcy4NCisgKiANCisgKiBAcGFyYW0gcCBUaGUgcHJvcG9ydGlvbmFsIGdhaW4gb2YgdGhlIEphZ3VhcidzIFBJRCBjb250cm9sbGVyLg0KKyAqIEBwYXJhbSBpIFRoZSBpbnRlZ3JhbCBnYWluIG9mIHRoZSBKYWd1YXIncyBQSUQgY29udHJvbGxlci4NCisgKiBAcGFyYW0gZCBUaGUgZGlmZmVyZW50aWFsIGdhaW4gb2YgdGhlIEphZ3VhcidzIFBJRCBjb250cm9sbGVyLg0KKyAqLw0KK3ZvaWQgQ0FOSmFndWFyOjpTZXRQSUQoZG91YmxlIHAsIGRvdWJsZSBpLCBkb3VibGUgZCkNCit7DQorCVVJTlQ4IGRhdGFCdWZmZXJbOF07DQorCVVJTlQ4IGRhdGFTaXplOw0KKw0KKwlzd2l0Y2gobV9jb250cm9sTW9kZSkNCisJew0KKwljYXNlIGtQZXJjZW50VmJ1czoNCisJY2FzZSBrVm9sdGFnZToNCisJCXdwaV9zZXRXUElFcnJvcldpdGhDb250ZXh0KEluY29tcGF0aWJsZU1vZGUsICJQSUQgY29uc3RhbnRzIG9ubHkgYXBwbHkgaW4gU3BlZWQsIFBvc2l0aW9uLCBhbmQgQ3VycmVudCBtb2RlIik7DQorCQlicmVhazsNCisJY2FzZSBrU3BlZWQ6DQorCQlkYXRhU2l6ZSA9IHBhY2tGWFAxNl8xNihkYXRhQnVmZmVyLCBwKTsNCisJCXNldFRyYW5zYWN0aW9uKExNX0FQSV9TUERfUEMsIGRhdGFCdWZmZXIsIGRhdGFTaXplKTsNCisJCWRhdGFTaXplID0gcGFja0ZYUDE2XzE2KGRhdGFCdWZmZXIsIGkpOw0KKwkJc2V0VHJhbnNhY3Rpb24oTE1fQVBJX1NQRF9JQywgZGF0YUJ1ZmZlciwgZGF0YVNpemUpOw0KKwkJZGF0YVNpemUgPSBwYWNrRlhQMTZfMTYoZGF0YUJ1ZmZlciwgZCk7DQorCQlzZXRUcmFuc2FjdGlvbihMTV9BUElfU1BEX0RDLCBkYXRhQnVmZmVyLCBkYXRhU2l6ZSk7DQorCQlicmVhazsNCisJY2FzZSBrUG9zaXRpb246DQorCQlkYXRhU2l6ZSA9IHBhY2tGWFAxNl8xNihkYXRhQnVmZmVyLCBwKTsNCisJCXNldFRyYW5zYWN0aW9uKExNX0FQSV9QT1NfUEMsIGRhdGFCdWZmZXIsIGRhdGFTaXplKTsNCisJCWRhdGFTaXplID0gcGFja0ZYUDE2XzE2KGRhdGFCdWZmZXIsIGkpOw0KKwkJc2V0VHJhbnNhY3Rpb24oTE1fQVBJX1BPU19JQywgZGF0YUJ1ZmZlciwgZGF0YVNpemUpOw0KKwkJZGF0YVNpemUgPSBwYWNrRlhQMTZfMTYoZGF0YUJ1ZmZlciwgZCk7DQorCQlzZXRUcmFuc2FjdGlvbihMTV9BUElfUE9TX0RDLCBkYXRhQnVmZmVyLCBkYXRhU2l6ZSk7DQorCQlicmVhazsNCisJY2FzZSBrQ3VycmVudDoNCisJCWRhdGFTaXplID0gcGFja0ZYUDE2XzE2KGRhdGFCdWZmZXIsIHApOw0KKwkJc2V0VHJhbnNhY3Rpb24oTE1fQVBJX0lDVFJMX1BDLCBkYXRhQnVmZmVyLCBkYXRhU2l6ZSk7DQorCQlkYXRhU2l6ZSA9IHBhY2tGWFAxNl8xNihkYXRhQnVmZmVyLCBpKTsNCisJCXNldFRyYW5zYWN0aW9uKExNX0FQSV9JQ1RSTF9JQywgZGF0YUJ1ZmZlciwgZGF0YVNpemUpOw0KKwkJZGF0YVNpemUgPSBwYWNrRlhQMTZfMTYoZGF0YUJ1ZmZlciwgZCk7DQorCQlzZXRUcmFuc2FjdGlvbihMTV9BUElfSUNUUkxfREMsIGRhdGFCdWZmZXIsIGRhdGFTaXplKTsNCisJCWJyZWFrOw0KKwl9DQorfQ0KKw0KKy8qKg0KKyAqIEdldCB0aGUgUHJvcG9ydGlvbmFsIGdhaW4gb2YgdGhlIGNvbnRyb2xsZXIuDQorICogDQorICogQHJldHVybiBUaGUgcHJvcG9ydGlvbmFsIGdhaW4uDQorICovDQorZG91YmxlIENBTkphZ3Vhcjo6R2V0UCgpDQorew0KKwlVSU5UOCBkYXRhQnVmZmVyWzhdOw0KKwlVSU5UOCBkYXRhU2l6ZTsNCisNCisJc3dpdGNoKG1fY29udHJvbE1vZGUpDQorCXsNCisJY2FzZSBrUGVyY2VudFZidXM6DQorCWNhc2Uga1ZvbHRhZ2U6DQorCQl3cGlfc2V0V1BJRXJyb3JXaXRoQ29udGV4dChJbmNvbXBhdGlibGVNb2RlLCAiUElEIGNvbnN0YW50cyBvbmx5IGFwcGx5IGluIFNwZWVkLCBQb3NpdGlvbiwgYW5kIEN1cnJlbnQgbW9kZSIpOw0KKwkJYnJlYWs7DQorCWNhc2Uga1NwZWVkOg0KKwkJZ2V0VHJhbnNhY3Rpb24oTE1fQVBJX1NQRF9QQywgZGF0YUJ1ZmZlciwgJmRhdGFTaXplKTsNCisJCWlmIChkYXRhU2l6ZSA9PSBzaXplb2YoSU5UMzIpKQ0KKwkJew0KKwkJCXJldHVybiB1bnBhY2tGWFAxNl8xNihkYXRhQnVmZmVyKTsNCisJCX0NCisJCWJyZWFrOw0KKwljYXNlIGtQb3NpdGlvbjoNCisJCWdldFRyYW5zYWN0aW9uKExNX0FQSV9QT1NfUEMsIGRhdGFCdWZmZXIsICZkYXRhU2l6ZSk7DQorCQlpZiAoZGF0YVNpemUgPT0gc2l6ZW9mKElOVDMyKSkNCisJCXsNCisJCQlyZXR1cm4gdW5wYWNrRlhQMTZfMTYoZGF0YUJ1ZmZlcik7DQorCQl9DQorCQlicmVhazsNCisJY2FzZSBrQ3VycmVudDoNCisJCWdldFRyYW5zYWN0aW9uKExNX0FQSV9JQ1RSTF9QQywgZGF0YUJ1ZmZlciwgJmRhdGFTaXplKTsNCisJCWlmIChkYXRhU2l6ZSA9PSBzaXplb2YoSU5UMzIpKQ0KKwkJew0KKwkJCXJldHVybiB1bnBhY2tGWFAxNl8xNihkYXRhQnVmZmVyKTsNCisJCX0NCisJCWJyZWFrOw0KKwl9DQorCXJldHVybiAwLjA7DQorfQ0KKw0KKy8qKg0KKyAqIEdldCB0aGUgSW50cmVncmFsIGdhaW4gb2YgdGhlIGNvbnRyb2xsZXIuDQorICogDQorICogQHJldHVybiBUaGUgaW50ZWdyYWwgZ2Fpbi4NCisgKi8NCitkb3VibGUgQ0FOSmFndWFyOjpHZXRJKCkNCit7DQorCVVJTlQ4IGRhdGFCdWZmZXJbOF07DQorCVVJTlQ4IGRhdGFTaXplOw0KKw0KKwlzd2l0Y2gobV9jb250cm9sTW9kZSkNCisJew0KKwljYXNlIGtQZXJjZW50VmJ1czoNCisJY2FzZSBrVm9sdGFnZToNCisJCXdwaV9zZXRXUElFcnJvcldpdGhDb250ZXh0KEluY29tcGF0aWJsZU1vZGUsICJQSUQgY29uc3RhbnRzIG9ubHkgYXBwbHkgaW4gU3BlZWQsIFBvc2l0aW9uLCBhbmQgQ3VycmVudCBtb2RlIik7DQorCQlicmVhazsNCisJY2FzZSBrU3BlZWQ6DQorCQlnZXRUcmFuc2FjdGlvbihMTV9BUElfU1BEX0lDLCBkYXRhQnVmZmVyLCAmZGF0YVNpemUpOw0KKwkJaWYgKGRhdGFTaXplID09IHNpemVvZihJTlQzMikpDQorCQl7DQorCQkJcmV0dXJuIHVucGFja0ZYUDE2XzE2KGRhdGFCdWZmZXIpOw0KKwkJfQ0KKwkJYnJlYWs7DQorCWNhc2Uga1Bvc2l0aW9uOg0KKwkJZ2V0VHJhbnNhY3Rpb24oTE1fQVBJX1BPU19JQywgZGF0YUJ1ZmZlciwgJmRhdGFTaXplKTsNCisJCWlmIChkYXRhU2l6ZSA9PSBzaXplb2YoSU5UMzIpKQ0KKwkJew0KKwkJCXJldHVybiB1bnBhY2tGWFAxNl8xNihkYXRhQnVmZmVyKTsNCisJCX0NCisJCWJyZWFrOw0KKwljYXNlIGtDdXJyZW50Og0KKwkJZ2V0VHJhbnNhY3Rpb24oTE1fQVBJX0lDVFJMX0lDLCBkYXRhQnVmZmVyLCAmZGF0YVNpemUpOw0KKwkJaWYgKGRhdGFTaXplID09IHNpemVvZihJTlQzMikpDQorCQl7DQorCQkJcmV0dXJuIHVucGFja0ZYUDE2XzE2KGRhdGFCdWZmZXIpOw0KKwkJfQ0KKwkJYnJlYWs7DQorCX0NCisJcmV0dXJuIDAuMDsNCit9DQorDQorLyoqDQorICogR2V0IHRoZSBEaWZmZXJlbnRpYWwgZ2FpbiBvZiB0aGUgY29udHJvbGxlci4NCisgKiANCisgKiBAcmV0dXJuIFRoZSBkaWZmZXJlbnRpYWwgZ2Fpbi4NCisgKi8NCitkb3VibGUgQ0FOSmFndWFyOjpHZXREKCkNCit7DQorCVVJTlQ4IGRhdGFCdWZmZXJbOF07DQorCVVJTlQ4IGRhdGFTaXplOw0KKw0KKwlzd2l0Y2gobV9jb250cm9sTW9kZSkNCisJew0KKwljYXNlIGtQZXJjZW50VmJ1czoNCisJY2FzZSBrVm9sdGFnZToNCisJCXdwaV9zZXRXUElFcnJvcldpdGhDb250ZXh0KEluY29tcGF0aWJsZU1vZGUsICJQSUQgY29uc3RhbnRzIG9ubHkgYXBwbHkgaW4gU3BlZWQsIFBvc2l0aW9uLCBhbmQgQ3VycmVudCBtb2RlIik7DQorCQlicmVhazsNCisJY2FzZSBrU3BlZWQ6DQorCQlnZXRUcmFuc2FjdGlvbihMTV9BUElfU1BEX0RDLCBkYXRhQnVmZmVyLCAmZGF0YVNpemUpOw0KKwkJaWYgKGRhdGFTaXplID09IHNpemVvZihJTlQzMikpDQorCQl7DQorCQkJcmV0dXJuIHVucGFja0ZYUDE2XzE2KGRhdGFCdWZmZXIpOw0KKwkJfQ0KKwkJYnJlYWs7DQorCWNhc2Uga1Bvc2l0aW9uOg0KKwkJZ2V0VHJhbnNhY3Rpb24oTE1fQVBJX1BPU19EQywgZGF0YUJ1ZmZlciwgJmRhdGFTaXplKTsNCisJCWlmIChkYXRhU2l6ZSA9PSBzaXplb2YoSU5UMzIpKQ0KKwkJew0KKwkJCXJldHVybiB1bnBhY2tGWFAxNl8xNihkYXRhQnVmZmVyKTsNCisJCX0NCisJCWJyZWFrOw0KKwljYXNlIGtDdXJyZW50Og0KKwkJZ2V0VHJhbnNhY3Rpb24oTE1fQVBJX0lDVFJMX0RDLCBkYXRhQnVmZmVyLCAmZGF0YVNpemUpOw0KKwkJaWYgKGRhdGFTaXplID09IHNpemVvZihJTlQzMikpDQorCQl7DQorCQkJcmV0dXJuIHVucGFja0ZYUDE2XzE2KGRhdGFCdWZmZXIpOw0KKwkJfQ0KKwkJYnJlYWs7DQorCX0NCisJcmV0dXJuIDAuMDsNCit9DQorDQorLyoqDQorICogRW5hYmxlIHRoZSBjbG9zZWQgbG9vcCBjb250cm9sbGVyLg0KKyAqIA0KKyAqIFN0YXJ0IGFjdHVhbGx5IGNvbnRyb2xsaW5nIHRoZSBvdXRwdXQgYmFzZWQgb24gdGhlIGZlZWRiYWNrLg0KKyAqIElmIHN0YXJ0aW5nIGEgcG9zaXRpb24gY29udHJvbGxlciB3aXRoIGFuIGVuY29kZXIgcmVmZXJlbmNlLA0KKyAqIHVzZSB0aGUgZW5jb2RlckluaXRpYWxQb3NpdGlvbiBwYXJhbWV0ZXIgdG8gaW5pdGlhbGl6ZSB0aGUNCisgKiBlbmNvZGVyIHN0YXRlLg0KKyAqIA0KKyAqIEBwYXJhbSBlbmNvZGVySW5pdGlhbFBvc2l0aW9uIEVuY29kZXIgcG9zaXRpb24gdG8gc2V0IGlmIHBvc2l0aW9uIHdpdGggZW5jb2RlciByZWZlcmVuY2UuICBJZ25vcmVkIG90aGVyd2lzZS4NCisgKi8NCit2b2lkIENBTkphZ3Vhcjo6RW5hYmxlQ29udHJvbChkb3VibGUgZW5jb2RlckluaXRpYWxQb3NpdGlvbikNCit7DQorCVVJTlQ4IGRhdGFCdWZmZXJbOF07DQorCVVJTlQ4IGRhdGFTaXplID0gMDsNCisNCisJc3dpdGNoKG1fY29udHJvbE1vZGUpDQorCXsNCisJY2FzZSBrUGVyY2VudFZidXM6DQorCQlzZXRUcmFuc2FjdGlvbihMTV9BUElfVk9MVF9UX0VOLCBkYXRhQnVmZmVyLCBkYXRhU2l6ZSk7DQorCQlicmVhazsNCisJY2FzZSBrU3BlZWQ6DQorCQlzZXRUcmFuc2FjdGlvbihMTV9BUElfU1BEX1RfRU4sIGRhdGFCdWZmZXIsIGRhdGFTaXplKTsNCisJCWJyZWFrOw0KKwljYXNlIGtQb3NpdGlvbjoNCisJCWRhdGFTaXplID0gcGFja0ZYUDE2XzE2KGRhdGFCdWZmZXIsIGVuY29kZXJJbml0aWFsUG9zaXRpb24pOw0KKwkJc2V0VHJhbnNhY3Rpb24oTE1fQVBJX1BPU19UX0VOLCBkYXRhQnVmZmVyLCBkYXRhU2l6ZSk7DQorCQlicmVhazsNCisJY2FzZSBrQ3VycmVudDoNCisJCXNldFRyYW5zYWN0aW9uKExNX0FQSV9JQ1RSTF9UX0VOLCBkYXRhQnVmZmVyLCBkYXRhU2l6ZSk7DQorCQlicmVhazsNCisJY2FzZSBrVm9sdGFnZToNCisJCXNldFRyYW5zYWN0aW9uKExNX0FQSV9WQ09NUF9UX0VOLCBkYXRhQnVmZmVyLCBkYXRhU2l6ZSk7DQorCQlicmVhazsNCisJfQ0KK30NCisNCisvKioNCisgKiBEaXNhYmxlIHRoZSBjbG9zZWQgbG9vcCBjb250cm9sbGVyLg0KKyAqIA0KKyAqIFN0b3AgZHJpdmluZyB0aGUgb3V0cHV0IGJhc2VkIG9uIHRoZSBmZWVkYmFjay4NCisgKi8NCit2b2lkIENBTkphZ3Vhcjo6RGlzYWJsZUNvbnRyb2woKQ0KK3sNCisJVUlOVDggZGF0YUJ1ZmZlcls4XTsNCisJVUlOVDggZGF0YVNpemUgPSAwOw0KKw0KKwlzd2l0Y2gobV9jb250cm9sTW9kZSkNCisJew0KKwljYXNlIGtQZXJjZW50VmJ1czoNCisJCXNldFRyYW5zYWN0aW9uKExNX0FQSV9WT0xUX0RJUywgZGF0YUJ1ZmZlciwgZGF0YVNpemUpOw0KKwkJYnJlYWs7DQorCWNhc2Uga1NwZWVkOg0KKwkJc2V0VHJhbnNhY3Rpb24oTE1fQVBJX1NQRF9ESVMsIGRhdGFCdWZmZXIsIGRhdGFTaXplKTsNCisJCWJyZWFrOw0KKwljYXNlIGtQb3NpdGlvbjoNCisJCXNldFRyYW5zYWN0aW9uKExNX0FQSV9QT1NfRElTLCBkYXRhQnVmZmVyLCBkYXRhU2l6ZSk7DQorCQlicmVhazsNCisJY2FzZSBrQ3VycmVudDoNCisJCXNldFRyYW5zYWN0aW9uKExNX0FQSV9JQ1RSTF9ESVMsIGRhdGFCdWZmZXIsIGRhdGFTaXplKTsNCisJCWJyZWFrOw0KKwljYXNlIGtWb2x0YWdlOg0KKwkJc2V0VHJhbnNhY3Rpb24oTE1fQVBJX1ZDT01QX0RJUywgZGF0YUJ1ZmZlciwgZGF0YVNpemUpOw0KKwkJYnJlYWs7DQorCX0NCit9DQorDQorLyoqDQorICogQ2hhbmdlIHRoZSBjb250cm9sIG1vZGUgb2YgdGhpcyBKYWd1YXIgb2JqZWN0Lg0KKyAqIA0KKyAqIEFmdGVyIGNoYW5naW5nIG1vZGVzLCBjb25maWd1cmUgYW55IFBJRCBjb25zdGFudHMgb3Igb3RoZXIgc2V0dGluZ3MgbmVlZGVkDQorICogYW5kIHRoZW4gRW5hYmxlQ29udHJvbCgpIHRvIGFjdHVhbGx5IGNoYW5nZSB0aGUgbW9kZSBvbiB0aGUgSmFndWFyLg0KKyAqIA0KKyAqIEBwYXJhbSBjb250cm9sTW9kZSBUaGUgbmV3IG1vZGUuDQorICovDQordm9pZCBDQU5KYWd1YXI6OkNoYW5nZUNvbnRyb2xNb2RlKENvbnRyb2xNb2RlIGNvbnRyb2xNb2RlKQ0KK3sNCisJLy8gRGlzYWJsZSB0aGUgcHJldmlvdXMgbW9kZQ0KKwlEaXNhYmxlQ29udHJvbCgpOw0KKw0KKwkvLyBVcGRhdGUgdGhlIGxvY2FsIG1vZGUNCisJbV9jb250cm9sTW9kZSA9IGNvbnRyb2xNb2RlOw0KKw0KKwluVXNhZ2VSZXBvcnRpbmc6OnJlcG9ydChuVXNhZ2VSZXBvcnRpbmc6OmtSZXNvdXJjZVR5cGVfQ0FOSmFndWFyLCBtX2RldmljZU51bWJlciwgbV9jb250cm9sTW9kZSk7DQorfQ0KKw0KKy8qKg0KKyAqIEdldCB0aGUgYWN0aXZlIGNvbnRyb2wgbW9kZSBmcm9tIHRoZSBKYWd1YXIuDQorICogDQorICogQXNrIHRoZSBKYWcgd2hhdCBtb2RlIGl0IGlzIGluLg0KKyAqIA0KKyAqIEByZXR1cm4gQ29udHJvbE1vZGUgdGhhdCB0aGUgSmFnIGlzIGluLg0KKyAqLw0KK0NBTkphZ3Vhcjo6Q29udHJvbE1vZGUgQ0FOSmFndWFyOjpHZXRDb250cm9sTW9kZSgpDQorew0KKwlVSU5UOCBkYXRhQnVmZmVyWzhdOw0KKwlVSU5UOCBkYXRhU2l6ZTsNCisNCisJZ2V0VHJhbnNhY3Rpb24oTE1fQVBJX1NUQVRVU19DTU9ERSwgZGF0YUJ1ZmZlciwgJmRhdGFTaXplKTsNCisJaWYgKGRhdGFTaXplID09IHNpemVvZihJTlQ4KSkNCisJew0KKwkJcmV0dXJuIChDb250cm9sTW9kZSlkYXRhQnVmZmVyWzBdOw0KKwl9DQorCXJldHVybiBrUGVyY2VudFZidXM7DQorfQ0KKw0KKy8qKg0KKyAqIEdldCB0aGUgdm9sdGFnZSBhdCB0aGUgYmF0dGVyeSBpbnB1dCB0ZXJtaW5hbHMgb2YgdGhlIEphZ3Vhci4NCisgKiANCisgKiBAcmV0dXJuIFRoZSBidXMgdm9sdGFnZSBpbiBWb2x0cy4NCisgKi8NCitmbG9hdCBDQU5KYWd1YXI6OkdldEJ1c1ZvbHRhZ2UoKQ0KK3sNCisJVUlOVDggZGF0YUJ1ZmZlcls4XTsNCisJVUlOVDggZGF0YVNpemU7DQorDQorCWdldFRyYW5zYWN0aW9uKExNX0FQSV9TVEFUVVNfVk9MVEJVUywgZGF0YUJ1ZmZlciwgJmRhdGFTaXplKTsNCisJaWYgKGRhdGFTaXplID09IHNpemVvZihJTlQxNikpDQorCXsNCisJCXJldHVybiB1bnBhY2tGWFA4XzgoZGF0YUJ1ZmZlcik7DQorCX0NCisJcmV0dXJuIDAuMDsNCit9DQorDQorLyoqDQorICogR2V0IHRoZSB2b2x0YWdlIGJlaW5nIG91dHB1dCBmcm9tIHRoZSBtb3RvciB0ZXJtaW5hbHMgb2YgdGhlIEphZ3Vhci4NCisgKiANCisgKiBAcmV0dXJuIFRoZSBvdXRwdXQgdm9sdGFnZSBpbiBWb2x0cy4NCisgKi8NCitmbG9hdCBDQU5KYWd1YXI6OkdldE91dHB1dFZvbHRhZ2UoKQ0KK3sNCisJVUlOVDggZGF0YUJ1ZmZlcls4XTsNCisJVUlOVDggZGF0YVNpemU7DQorDQorCS8vIFJlYWQgdGhlIHZvbHQgb3V0IHdoaWNoIGlzIGluIFZvbHRzIHVuaXRzLg0KKwlnZXRUcmFuc2FjdGlvbihMTV9BUElfU1RBVFVTX1ZPVVQsIGRhdGFCdWZmZXIsICZkYXRhU2l6ZSk7DQorCWlmIChkYXRhU2l6ZSA9PSBzaXplb2YoSU5UMTYpKQ0KKwl7DQorCQlyZXR1cm4gdW5wYWNrRlhQOF84KGRhdGFCdWZmZXIpOw0KKwl9DQorCXJldHVybiAwLjA7DQorfQ0KKw0KKy8qKg0KKyAqIEdldCB0aGUgY3VycmVudCB0aHJvdWdoIHRoZSBtb3RvciB0ZXJtaW5hbHMgb2YgdGhlIEphZ3Vhci4NCisgKiANCisgKiBAcmV0dXJuIFRoZSBvdXRwdXQgY3VycmVudCBpbiBBbXBzLg0KKyAqLw0KK2Zsb2F0IENBTkphZ3Vhcjo6R2V0T3V0cHV0Q3VycmVudCgpDQorew0KKwlVSU5UOCBkYXRhQnVmZmVyWzhdOw0KKwlVSU5UOCBkYXRhU2l6ZTsNCisNCisJZ2V0VHJhbnNhY3Rpb24oTE1fQVBJX1NUQVRVU19DVVJSRU5ULCBkYXRhQnVmZmVyLCAmZGF0YVNpemUpOw0KKwlpZiAoZGF0YVNpemUgPT0gc2l6ZW9mKElOVDE2KSkNCisJew0KKwkJcmV0dXJuIHVucGFja0ZYUDhfOChkYXRhQnVmZmVyKTsNCisJfQ0KKwlyZXR1cm4gMC4wOw0KK30NCisNCisvKioNCisgKiBHZXQgdGhlIGludGVybmFsIHRlbXBlcmF0dXJlIG9mIHRoZSBKYWd1YXIuDQorICogDQorICogQHJldHVybiBUaGUgdGVtcGVyYXR1cmUgb2YgdGhlIEphZ3VhciBpbiBkZWdyZWVzIENlbHNpdXMuDQorICovDQorZmxvYXQgQ0FOSmFndWFyOjpHZXRUZW1wZXJhdHVyZSgpDQorew0KKwlVSU5UOCBkYXRhQnVmZmVyWzhdOw0KKwlVSU5UOCBkYXRhU2l6ZTsNCisNCisJZ2V0VHJhbnNhY3Rpb24oTE1fQVBJX1NUQVRVU19URU1QLCBkYXRhQnVmZmVyLCAmZGF0YVNpemUpOw0KKwlpZiAoZGF0YVNpemUgPT0gc2l6ZW9mKElOVDE2KSkNCisJew0KKwkJcmV0dXJuIHVucGFja0ZYUDhfOChkYXRhQnVmZmVyKTsNCisJfQ0KKwlyZXR1cm4gMC4wOw0KK30NCisNCisvKioNCisgKiBHZXQgdGhlIHBvc2l0aW9uIG9mIHRoZSBlbmNvZGVyIG9yIHBvdGVudGlvbWV0ZXIuDQorICogDQorICogQHJldHVybiBUaGUgcG9zaXRpb24gb2YgdGhlIG1vdG9yIGluIHJvdGF0aW9ucyBiYXNlZCBvbiB0aGUgY29uZmlndXJlZCBmZWVkYmFjay4NCisgKi8NCitkb3VibGUgQ0FOSmFndWFyOjpHZXRQb3NpdGlvbigpDQorew0KKwlVSU5UOCBkYXRhQnVmZmVyWzhdOw0KKwlVSU5UOCBkYXRhU2l6ZTsNCisNCisJZ2V0VHJhbnNhY3Rpb24oTE1fQVBJX1NUQVRVU19QT1MsIGRhdGFCdWZmZXIsICZkYXRhU2l6ZSk7DQorCWlmIChkYXRhU2l6ZSA9PSBzaXplb2YoSU5UMzIpKQ0KKwl7DQorCQlyZXR1cm4gdW5wYWNrRlhQMTZfMTYoZGF0YUJ1ZmZlcik7DQorCX0NCisJcmV0dXJuIDAuMDsNCit9DQorDQorLyoqDQorICogR2V0IHRoZSBzcGVlZCBvZiB0aGUgZW5jb2Rlci4NCisgKiANCisgKiBAcmV0dXJuIFRoZSBzcGVlZCBvZiB0aGUgbW90b3IgaW4gUlBNIGJhc2VkIG9uIHRoZSBjb25maWd1cmVkIGZlZWRiYWNrLg0KKyAqLw0KK2RvdWJsZSBDQU5KYWd1YXI6OkdldFNwZWVkKCkNCit7DQorCVVJTlQ4IGRhdGFCdWZmZXJbOF07DQorCVVJTlQ4IGRhdGFTaXplOw0KKw0KKwlnZXRUcmFuc2FjdGlvbihMTV9BUElfU1RBVFVTX1NQRCwgZGF0YUJ1ZmZlciwgJmRhdGFTaXplKTsNCisJaWYgKGRhdGFTaXplID09IHNpemVvZihJTlQzMikpDQorCXsNCisJCXJldHVybiB1bnBhY2tGWFAxNl8xNihkYXRhQnVmZmVyKTsNCisJfQ0KKwlyZXR1cm4gMC4wOw0KK30NCisNCisvKioNCisgKiBHZXQgdGhlIHN0YXR1cyBvZiB0aGUgZm9yd2FyZCBsaW1pdCBzd2l0Y2guDQorICogDQorICogQHJldHVybiBUaGUgbW90b3IgaXMgYWxsb3dlZCB0byB0dXJuIGluIHRoZSBmb3J3YXJkIGRpcmVjdGlvbiB3aGVuIHRydWUuDQorICovDQorYm9vbCBDQU5KYWd1YXI6OkdldEZvcndhcmRMaW1pdE9LKCkNCit7DQorCVVJTlQ4IGRhdGFCdWZmZXJbOF07DQorCVVJTlQ4IGRhdGFTaXplOw0KKw0KKwlnZXRUcmFuc2FjdGlvbihMTV9BUElfU1RBVFVTX0xJTUlULCBkYXRhQnVmZmVyLCAmZGF0YVNpemUpOw0KKwlpZiAoZGF0YVNpemUgPT0gc2l6ZW9mKFVJTlQ4KSkNCisJew0KKwkJcmV0dXJuICgqZGF0YUJ1ZmZlciAmIGtGb3J3YXJkTGltaXQpICE9IDA7DQorCX0NCisJcmV0dXJuIDA7DQorfQ0KKw0KKy8qKg0KKyAqIEdldCB0aGUgc3RhdHVzIG9mIHRoZSByZXZlcnNlIGxpbWl0IHN3aXRjaC4NCisgKiANCisgKiBAcmV0dXJuIFRoZSBtb3RvciBpcyBhbGxvd2VkIHRvIHR1cm4gaW4gdGhlIHJldmVyc2UgZGlyZWN0aW9uIHdoZW4gdHJ1ZS4NCisgKi8NCitib29sIENBTkphZ3Vhcjo6R2V0UmV2ZXJzZUxpbWl0T0soKQ0KK3sNCisJVUlOVDggZGF0YUJ1ZmZlcls4XTsNCisJVUlOVDggZGF0YVNpemU7DQorDQorCWdldFRyYW5zYWN0aW9uKExNX0FQSV9TVEFUVVNfTElNSVQsIGRhdGFCdWZmZXIsICZkYXRhU2l6ZSk7DQorCWlmIChkYXRhU2l6ZSA9PSBzaXplb2YoVUlOVDgpKQ0KKwl7DQorCQlyZXR1cm4gKCpkYXRhQnVmZmVyICYga1JldmVyc2VMaW1pdCkgIT0gMDsNCisJfQ0KKwlyZXR1cm4gMDsNCit9DQorDQorLyoqDQorICogR2V0IHRoZSBzdGF0dXMgb2YgYW55IGZhdWx0cyB0aGUgSmFndWFyIGhhcyBkZXRlY3RlZC4NCisgKiANCisgKiBAcmV0dXJuIEEgYml0LW1hc2sgb2YgZmF1bHRzIGRlZmluZWQgYnkgdGhlICJGYXVsdHMiIGVudW0uDQorICovDQorVUlOVDE2IENBTkphZ3Vhcjo6R2V0RmF1bHRzKCkNCit7DQorCVVJTlQ4IGRhdGFCdWZmZXJbOF07DQorCVVJTlQ4IGRhdGFTaXplOw0KKw0KKwlnZXRUcmFuc2FjdGlvbihMTV9BUElfU1RBVFVTX0ZBVUxULCBkYXRhQnVmZmVyLCAmZGF0YVNpemUpOw0KKwlpZiAoZGF0YVNpemUgPT0gc2l6ZW9mKFVJTlQxNikpDQorCXsNCisJCXJldHVybiB1bnBhY2tJTlQxNihkYXRhQnVmZmVyKTsNCisJfQ0KKwlyZXR1cm4gMDsNCit9DQorDQorLyoqDQorICogQ2hlY2sgaWYgdGhlIEphZ3VhcidzIHBvd2VyIGhhcyBiZWVuIGN5Y2xlZCBzaW5jZSB0aGlzIHdhcyBsYXN0IGNhbGxlZC4NCisgKiANCisgKiBUaGlzIHNob3VsZCByZXR1cm4gdHJ1ZSB0aGUgZmlyc3QgdGltZSBjYWxsZWQgYWZ0ZXIgYSBKYWd1YXIgcG93ZXIgdXAsDQorICogYW5kIGZhbHNlIGFmdGVyIHRoYXQuDQorICogDQorICogQHJldHVybiBUaGUgSmFndWFyIHdhcyBwb3dlciBjeWNsZWQgc2luY2UgdGhlIGxhc3QgY2FsbCB0byB0aGlzIGZ1bmN0aW9uLg0KKyAqLw0KK2Jvb2wgQ0FOSmFndWFyOjpHZXRQb3dlckN5Y2xlZCgpDQorew0KKwlVSU5UOCBkYXRhQnVmZmVyWzhdOw0KKwlVSU5UOCBkYXRhU2l6ZTsNCisNCisJZ2V0VHJhbnNhY3Rpb24oTE1fQVBJX1NUQVRVU19QT1dFUiwgZGF0YUJ1ZmZlciwgJmRhdGFTaXplKTsNCisJaWYgKGRhdGFTaXplID09IHNpemVvZihVSU5UOCkpDQorCXsNCisJCWJvb2wgcG93ZXJDeWNsZWQgPSAoKmRhdGFCdWZmZXIgIT0gMCk7DQorDQorCQkvLyBDbGVhciB0aGUgcG93ZXIgY3ljbGVkIGJpdCBub3cgdGhhdCB3ZSd2ZSBhY2Nlc3NlZCBpdA0KKwkJaWYgKHBvd2VyQ3ljbGVkKQ0KKwkJew0KKwkJCWRhdGFCdWZmZXJbMF0gPSAxOw0KKwkJCXNldFRyYW5zYWN0aW9uKExNX0FQSV9TVEFUVVNfUE9XRVIsIGRhdGFCdWZmZXIsIHNpemVvZihVSU5UOCkpOw0KKwkJfQ0KKw0KKwkJcmV0dXJuIHBvd2VyQ3ljbGVkOw0KKwl9DQorCXJldHVybiAwOw0KK30NCisNCisvKioNCisgKiBTZXQgdGhlIG1heGltdW0gdm9sdGFnZSBjaGFuZ2UgcmF0ZS4NCisgKiANCisgKiBXaGVuIGluIFBlcmNlbnRWYnVzIG9yIFZvbHRhZ2Ugb3V0cHV0IG1vZGUsIHRoZSByYXRlIGF0IHdoaWNoIHRoZSB2b2x0YWdlIGNoYW5nZXMgY2FuDQorICogYmUgbGltaXRlZCB0byByZWR1Y2UgY3VycmVudCBzcGlrZXMuICBTZXQgdGhpcyB0byAwLjAgdG8gZGlzYWJsZSByYXRlIGxpbWl0aW5nLg0KKyAqIA0KKyAqIEBwYXJhbSByYW1wUmF0ZSBUaGUgbWF4aW11bSByYXRlIG9mIHZvbHRhZ2UgY2hhbmdlIGluIFBlcmNlbnQgVm9sdGFnZSBtb2RlIGluIFYvcy4NCisgKi8NCit2b2lkIENBTkphZ3Vhcjo6U2V0Vm9sdGFnZVJhbXBSYXRlKGRvdWJsZSByYW1wUmF0ZSkNCit7DQorCVVJTlQ4IGRhdGFCdWZmZXJbOF07DQorCVVJTlQ4IGRhdGFTaXplOw0KKw0KKwlzd2l0Y2gobV9jb250cm9sTW9kZSkNCisJew0KKwljYXNlIGtQZXJjZW50VmJ1czoNCisJCWRhdGFTaXplID0gcGFja1BlcmNlbnRhZ2UoZGF0YUJ1ZmZlciwgcmFtcFJhdGUgLyAobV9tYXhPdXRwdXRWb2x0YWdlICoga0NvbnRyb2xsZXJSYXRlKSk7DQorCQlzZXRUcmFuc2FjdGlvbihMTV9BUElfVk9MVF9TRVRfUkFNUCwgZGF0YUJ1ZmZlciwgZGF0YVNpemUpOw0KKwkJYnJlYWs7DQorCWNhc2Uga1ZvbHRhZ2U6DQorCQlkYXRhU2l6ZSA9IHBhY2tGWFA4XzgoZGF0YUJ1ZmZlciwgcmFtcFJhdGUgLyBrQ29udHJvbGxlclJhdGUpOw0KKwkJc2V0VHJhbnNhY3Rpb24oTE1fQVBJX1ZDT01QX0lOX1JBTVAsIGRhdGFCdWZmZXIsIGRhdGFTaXplKTsNCisJCWJyZWFrOw0KKwlkZWZhdWx0Og0KKwkJcmV0dXJuOw0KKwl9DQorfQ0KKw0KKy8qKg0KKyAqIEdldCB0aGUgdmVyc2lvbiBvZiB0aGUgZmlybXdhcmUgcnVubmluZyBvbiB0aGUgSmFndWFyLg0KKyAqIA0KKyAqIEByZXR1cm4gVGhlIGZpcm13YXJlIHZlcnNpb24uICAwIGlmIHRoZSBkZXZpY2UgZGlkIG5vdCByZXNwb25kLg0KKyAqLw0KK1VJTlQzMiBDQU5KYWd1YXI6OkdldEZpcm13YXJlVmVyc2lvbigpDQorew0KKwlVSU5UOCBkYXRhQnVmZmVyWzhdOw0KKwlVSU5UOCBkYXRhU2l6ZTsNCisNCisJLy8gU2V0IHRoZSBNU0IgdG8gdGVsbCB0aGUgMkNBTiB0aGF0IHRoaXMgaXMgYSByZW1vdGUgbWVzc2FnZS4NCisJZ2V0VHJhbnNhY3Rpb24oMHg4MDAwMDAwMCB8IENBTl9NU0dJRF9BUElfRklSTVZFUiwgZGF0YUJ1ZmZlciwgJmRhdGFTaXplKTsNCisJaWYgKGRhdGFTaXplID09IHNpemVvZihVSU5UMzIpKQ0KKwl7DQorCQlyZXR1cm4gdW5wYWNrSU5UMzIoZGF0YUJ1ZmZlcik7DQorCX0NCisJcmV0dXJuIDA7DQorfQ0KKw0KKy8qKg0KKyAqIEdldCB0aGUgdmVyc2lvbiBvZiB0aGUgSmFndWFyIGhhcmR3YXJlLg0KKyAqIA0KKyAqIEByZXR1cm4gVGhlIGhhcmR3YXJlIHZlcnNpb24uIDE6IEphZ3VhciwgIDI6IEJsYWNrIEphZ3Vhcg0KKyAqLw0KK1VJTlQ4IENBTkphZ3Vhcjo6R2V0SGFyZHdhcmVWZXJzaW9uKCkNCit7DQorCVVJTlQ4IGRhdGFCdWZmZXJbOF07DQorCVVJTlQ4IGRhdGFTaXplOw0KKw0KKwlnZXRUcmFuc2FjdGlvbihMTV9BUElfSFdWRVIsIGRhdGFCdWZmZXIsICZkYXRhU2l6ZSk7DQorCWlmIChkYXRhU2l6ZSA9PSBzaXplb2YoVUlOVDgpK3NpemVvZihVSU5UOCkpDQorCXsNCisJCWlmICgqZGF0YUJ1ZmZlciA9PSBtX2RldmljZU51bWJlcikNCisJCXsNCisJCQlyZXR1cm4gKihkYXRhQnVmZmVyKzEpOw0KKwkJfQ0KKwl9DQorCS8vIEFzc3VtZSBHcmF5IEphZyBpZiB0aGVyZSBpcyBubyByZXNwb25zZQ0KKwlyZXR1cm4gTE1fSFdWRVJfSkFHXzFfMDsNCit9DQorDQorLyoqDQorICogQ29uZmlndXJlIHdoYXQgdGhlIGNvbnRyb2xsZXIgZG9lcyB0byB0aGUgSC1CcmlkZ2Ugd2hlbiBuZXV0cmFsIChub3QgZHJpdmluZyB0aGUgb3V0cHV0KS4NCisgKiANCisgKiBUaGlzIGFsbG93cyB5b3UgdG8gb3ZlcnJpZGUgdGhlIGp1bXBlciBjb25maWd1cmF0aW9uIGZvciBicmFrZSBvciBjb2FzdC4NCisgKiANCisgKiBAcGFyYW0gbW9kZSBTZWxlY3QgdG8gdXNlIHRoZSBqdW1wZXIgc2V0dGluZyBvciB0byBvdmVycmlkZSBpdCB0byBjb2FzdCBvciBicmFrZS4NCisgKi8NCit2b2lkIENBTkphZ3Vhcjo6Q29uZmlnTmV1dHJhbE1vZGUoTmV1dHJhbE1vZGUgbW9kZSkNCit7DQorCVVJTlQ4IGRhdGFCdWZmZXJbOF07DQorDQorCWRhdGFCdWZmZXJbMF0gPSBtb2RlOw0KKwlzZXRUcmFuc2FjdGlvbihMTV9BUElfQ0ZHX0JSQUtFX0NPQVNULCBkYXRhQnVmZmVyLCBzaXplb2YoVUlOVDgpKTsNCit9DQorDQorLyoqDQorICogQ29uZmlndXJlIGhvdyBtYW55IGNvZGVzIHBlciByZXZvbHV0aW9uIGFyZSBnZW5lcmF0ZWQgYnkgeW91ciBlbmNvZGVyLg0KKyAqIA0KKyAqIEBwYXJhbSBjb2Rlc1BlclJldiBUaGUgbnVtYmVyIG9mIGNvdW50cyBwZXIgcmV2b2x1dGlvbiBpbiAxWCBtb2RlLg0KKyAqLw0KK3ZvaWQgQ0FOSmFndWFyOjpDb25maWdFbmNvZGVyQ29kZXNQZXJSZXYoVUlOVDE2IGNvZGVzUGVyUmV2KQ0KK3sNCisJVUlOVDggZGF0YUJ1ZmZlcls4XTsNCisJVUlOVDggZGF0YVNpemU7DQorDQorCWRhdGFTaXplID0gcGFja0lOVDE2KGRhdGFCdWZmZXIsIGNvZGVzUGVyUmV2KTsNCisJc2V0VHJhbnNhY3Rpb24oTE1fQVBJX0NGR19FTkNfTElORVMsIGRhdGFCdWZmZXIsIGRhdGFTaXplKTsNCit9DQorDQorLyoqDQorICogQ29uZmlndXJlIHRoZSBudW1iZXIgb2YgdHVybnMgb24gdGhlIHBvdGVudGlvbWV0ZXIuDQorICogDQorICogVGhlcmUgaXMgbm8gc3BlY2lhbCBzdXBwb3J0IGZvciBjb250aW51b3VzIHR1cm4gcG90ZW50aW9tZXRlcnMuDQorICogT25seSBpbnRlZ2VyIG51bWJlcnMgb2YgdHVybnMgYXJlIHN1cHBvcnRlZC4NCisgKiANCisgKiBAcGFyYW0gdHVybnMgVGhlIG51bWJlciBvZiB0dXJucyBvZiB0aGUgcG90ZW50aW9tZXRlcg0KKyAqLw0KK3ZvaWQgQ0FOSmFndWFyOjpDb25maWdQb3RlbnRpb21ldGVyVHVybnMoVUlOVDE2IHR1cm5zKQ0KK3sNCisJVUlOVDggZGF0YUJ1ZmZlcls4XTsNCisJVUlOVDggZGF0YVNpemU7DQorDQorCWRhdGFTaXplID0gcGFja0lOVDE2KGRhdGFCdWZmZXIsIHR1cm5zKTsNCisJc2V0VHJhbnNhY3Rpb24oTE1fQVBJX0NGR19QT1RfVFVSTlMsIGRhdGFCdWZmZXIsIGRhdGFTaXplKTsNCit9DQorDQorLyoqDQorICogQ29uZmlndXJlIFNvZnQgUG9zaXRpb24gTGltaXRzIHdoZW4gaW4gUG9zaXRpb24gQ29udHJvbGxlciBtb2RlLg0KKyAqIA0KKyAqIFdoZW4gY29udHJvbGxpbmcgcG9zaXRpb24sIHlvdSBjYW4gYWRkIGFkZGl0aW9uYWwgbGltaXRzIG9uIHRvcCBvZiB0aGUgbGltaXQgc3dpdGNoIGlucHV0cw0KKyAqIHRoYXQgYXJlIGJhc2VkIG9uIHRoZSBwb3NpdGlvbiBmZWVkYmFjay4gIElmIHRoZSBwb3NpdGlvbiBsaW1pdCBpcyByZWFjaGVkIG9yIHRoZQ0KKyAqIHN3aXRjaCBpcyBvcGVuZWQsIHRoYXQgZGlyZWN0aW9uIHdpbGwgYmUgZGlzYWJsZWQuDQorICogDQorICogQHBhcmFtIGZvcndhcmRMaW1pdFBvc2l0aW9uIFRoZSBwb3NpdGlvbiB0aGF0IGlmIGV4Y2VlZGVkIHdpbGwgZGlzYWJsZSB0aGUgZm9yd2FyZCBkaXJlY3Rpb24uDQorICogQHBhcmFtIHJldmVyc2VMaW1pdFBvc2l0aW9uIFRoZSBwb3NpdGlvbiB0aGF0IGlmIGV4Y2VlZGVkIHdpbGwgZGlzYWJsZSB0aGUgcmV2ZXJzZSBkaXJlY3Rpb24uDQorICovDQordm9pZCBDQU5KYWd1YXI6OkNvbmZpZ1NvZnRQb3NpdGlvbkxpbWl0cyhkb3VibGUgZm9yd2FyZExpbWl0UG9zaXRpb24sIGRvdWJsZSByZXZlcnNlTGltaXRQb3NpdGlvbikNCit7DQorCVVJTlQ4IGRhdGFCdWZmZXJbOF07DQorCVVJTlQ4IGRhdGFTaXplOw0KKw0KKwlkYXRhU2l6ZSA9IHBhY2tGWFAxNl8xNihkYXRhQnVmZmVyLCBmb3J3YXJkTGltaXRQb3NpdGlvbik7DQorCWRhdGFCdWZmZXJbZGF0YVNpemUrK10gPSBmb3J3YXJkTGltaXRQb3NpdGlvbiA+IHJldmVyc2VMaW1pdFBvc2l0aW9uOw0KKwlzZXRUcmFuc2FjdGlvbihMTV9BUElfQ0ZHX0xJTUlUX0ZXRCwgZGF0YUJ1ZmZlciwgZGF0YVNpemUpOw0KKw0KKwlkYXRhU2l6ZSA9IHBhY2tGWFAxNl8xNihkYXRhQnVmZmVyLCByZXZlcnNlTGltaXRQb3NpdGlvbik7DQorCWRhdGFCdWZmZXJbZGF0YVNpemUrK10gPSBmb3J3YXJkTGltaXRQb3NpdGlvbiA8PSByZXZlcnNlTGltaXRQb3NpdGlvbjsNCisJc2V0VHJhbnNhY3Rpb24oTE1fQVBJX0NGR19MSU1JVF9SRVYsIGRhdGFCdWZmZXIsIGRhdGFTaXplKTsNCisNCisJZGF0YUJ1ZmZlclswXSA9IGtMaW1pdE1vZGVfU29mdFBvc2l0aW9uTGltaXRzOw0KKwlzZXRUcmFuc2FjdGlvbihMTV9BUElfQ0ZHX0xJTUlUX01PREUsIGRhdGFCdWZmZXIsIHNpemVvZihVSU5UOCkpOw0KK30NCisNCisvKioNCisgKiBEaXNhYmxlIFNvZnQgUG9zaXRpb24gTGltaXRzIGlmIHByZXZpb3VzbHkgZW5hYmxlZC4NCisgKiANCisgKiBTb2Z0IFBvc2l0aW9uIExpbWl0cyBhcmUgZGlzYWJsZWQgYnkgZGVmYXVsdC4NCisgKi8NCit2b2lkIENBTkphZ3Vhcjo6RGlzYWJsZVNvZnRQb3NpdGlvbkxpbWl0cygpDQorew0KKwlVSU5UOCBkYXRhQnVmZmVyWzhdOw0KKw0KKwlkYXRhQnVmZmVyWzBdID0ga0xpbWl0TW9kZV9Td2l0Y2hJbnB1dHNPbmx5Ow0KKwlzZXRUcmFuc2FjdGlvbihMTV9BUElfQ0ZHX0xJTUlUX01PREUsIGRhdGFCdWZmZXIsIHNpemVvZihVSU5UOCkpOw0KK30NCisNCisvKioNCisgKiBDb25maWd1cmUgdGhlIG1heGltdW0gdm9sdGFnZSB0aGF0IHRoZSBKYWd1YXIgd2lsbCBldmVyIG91dHB1dC4NCisgKiANCisgKiBUaGlzIGNhbiBiZSB1c2VkIHRvIGxpbWl0IHRoZSBtYXhpbXVtIG91dHB1dCB2b2x0YWdlIGluIGFsbCBtb2RlcyBzbyB0aGF0DQorICogbW90b3JzIHdoaWNoIGNhbm5vdCB3aXRoc3RhbmQgZnVsbCBidXMgdm9sdGFnZSBjYW4gYmUgdXNlZCBzYWZlbHkuDQorICogDQorICogQHBhcmFtIHZvbHRhZ2UgVGhlIG1heGltdW0gdm9sdGFnZSBvdXRwdXQgYnkgdGhlIEphZ3Vhci4NCisgKi8NCit2b2lkIENBTkphZ3Vhcjo6Q29uZmlnTWF4T3V0cHV0Vm9sdGFnZShkb3VibGUgdm9sdGFnZSkNCit7DQorCVVJTlQ4IGRhdGFCdWZmZXJbOF07DQorCVVJTlQ4IGRhdGFTaXplOw0KKw0KKwltX21heE91dHB1dFZvbHRhZ2UgPSB2b2x0YWdlOw0KKwlkYXRhU2l6ZSA9IHBhY2tGWFA4XzgoZGF0YUJ1ZmZlciwgdm9sdGFnZSk7DQorCXNldFRyYW5zYWN0aW9uKExNX0FQSV9DRkdfTUFYX1ZPVVQsIGRhdGFCdWZmZXIsIGRhdGFTaXplKTsNCit9DQorDQorLyoqDQorICogQ29uZmlndXJlIGhvdyBsb25nIHRoZSBKYWd1YXIgd2FpdHMgaW4gdGhlIGNhc2Ugb2YgYSBmYXVsdCBiZWZvcmUgcmVzdW1pbmcgb3BlcmF0aW9uLg0KKyAqIA0KKyAqIEZhdWx0cyBpbmNsdWRlIG92ZXIgdGVtZXJhdHVyZSwgb3ZlciBjdXJyZW50LCBhbmQgYnVzIHVuZGVyIHZvbHRhZ2UuDQorICogVGhlIGRlZmF1bHQgaXMgMy4wIHNlY29uZHMsIGJ1dCBjYW4gYmUgcmVkdWNlZCB0byBhcyBsb3cgYXMgMC41IHNlY29uZHMuDQorICogDQorICogQHBhcmFtIGZhdWx0VGltZSBUaGUgdGltZSB0byB3YWl0IGJlZm9yZSByZXN1bWluZyBvcGVyYXRpb24sIGluIHNlY29uZHMuDQorICovDQordm9pZCBDQU5KYWd1YXI6OkNvbmZpZ0ZhdWx0VGltZShmbG9hdCBmYXVsdFRpbWUpDQorew0KKwlVSU5UOCBkYXRhQnVmZmVyWzhdOw0KKwlVSU5UOCBkYXRhU2l6ZTsNCisNCisJLy8gTWVzc2FnZSB0YWtlcyBtcw0KKwlkYXRhU2l6ZSA9IHBhY2tJTlQxNihkYXRhQnVmZmVyLCAoSU5UMTYpKGZhdWx0VGltZSAqIDEwMDAuMCkpOw0KKwlzZXRUcmFuc2FjdGlvbihMTV9BUElfQ0ZHX0ZBVUxUX1RJTUUsIGRhdGFCdWZmZXIsIGRhdGFTaXplKTsNCit9DQorDQorLyoqDQorICogVXBkYXRlIGFsbCB0aGUgbW90b3JzIHRoYXQgaGF2ZSBwZW5kaW5nIHNldHMgaW4gdGhlIHN5bmNHcm91cC4NCisgKiANCisgKiBAcGFyYW0gc3luY0dyb3VwIEEgYml0bWFzayBvZiBncm91cHMgdG8gZ2VuZXJhdGUgc3luY2hyb25vdXMgb3V0cHV0Lg0KKyAqLw0KK3ZvaWQgQ0FOSmFndWFyOjpVcGRhdGVTeW5jR3JvdXAoVUlOVDggc3luY0dyb3VwKQ0KK3sNCisJc2VuZE1lc3NhZ2UoQ0FOX01TR0lEX0FQSV9TWU5DLCAmc3luY0dyb3VwLCBzaXplb2Yoc3luY0dyb3VwKSk7DQorfQ0KKw0KKw0KK3ZvaWQgQ0FOSmFndWFyOjpTZXRFeHBpcmF0aW9uKGZsb2F0IHRpbWVvdXQpDQorew0KKwlpZiAobV9zYWZldHlIZWxwZXIpIG1fc2FmZXR5SGVscGVyLT5TZXRFeHBpcmF0aW9uKHRpbWVvdXQpOw0KK30NCisNCitmbG9hdCBDQU5KYWd1YXI6OkdldEV4cGlyYXRpb24oKQ0KK3sNCisJaWYgKCFtX3NhZmV0eUhlbHBlcikgcmV0dXJuIDAuMDsNCisJcmV0dXJuIG1fc2FmZXR5SGVscGVyLT5HZXRFeHBpcmF0aW9uKCk7DQorfQ0KKw0KK2Jvb2wgQ0FOSmFndWFyOjpJc0FsaXZlKCkNCit7DQorCWlmICghbV9zYWZldHlIZWxwZXIpIHJldHVybiBmYWxzZTsNCisJcmV0dXJuIG1fc2FmZXR5SGVscGVyLT5Jc0FsaXZlKCk7DQorfQ0KKw0KK2Jvb2wgQ0FOSmFndWFyOjpJc1NhZmV0eUVuYWJsZWQoKQ0KK3sNCisJaWYgKCFtX3NhZmV0eUhlbHBlcikgcmV0dXJuIGZhbHNlOw0KKwlyZXR1cm4gbV9zYWZldHlIZWxwZXItPklzU2FmZXR5RW5hYmxlZCgpOw0KK30NCisNCit2b2lkIENBTkphZ3Vhcjo6U2V0U2FmZXR5RW5hYmxlZChib29sIGVuYWJsZWQpDQorew0KKwlpZiAobV9zYWZldHlIZWxwZXIpIG1fc2FmZXR5SGVscGVyLT5TZXRTYWZldHlFbmFibGVkKGVuYWJsZWQpOw0KK30NCisNCit2b2lkIENBTkphZ3Vhcjo6R2V0RGVzY3JpcHRpb24oY2hhciAqZGVzYykNCit7DQorCXNwcmludGYoZGVzYywgIkNBTkphZ3VhciBJRCAlZCIsIG1fZGV2aWNlTnVtYmVyKTsNCit9DQorDQorLyoqDQorICogQ29tbW9uIGludGVyZmFjZSBmb3Igc3RvcHBpbmcgdGhlIG1vdG9yDQorICogUGFydCBvZiB0aGUgTW90b3JTYWZldHkgaW50ZXJmYWNlDQorICogDQorICogQGRlcHJlY2F0ZWQgQ2FsbCBEaXNhYmxlQ29udHJvbCBpbnN0ZWFkLg0KKyAqLw0KK3ZvaWQgQ0FOSmFndWFyOjpTdG9wTW90b3IoKQ0KK3sNCisJRGlzYWJsZUNvbnRyb2woKTsNCit9DQorDQordm9pZCBDQU5KYWd1YXI6OlZhbHVlQ2hhbmdlZChJVGFibGUqIHNvdXJjZSwgY29uc3Qgc3RkOjpzdHJpbmcmIGtleSwgRW50cnlWYWx1ZSB2YWx1ZSwgYm9vbCBpc05ldykgew0KKwlTZXQodmFsdWUuZik7DQorfQ0KKw0KK3ZvaWQgQ0FOSmFndWFyOjpVcGRhdGVUYWJsZSgpIHsNCisJaWYgKG1fdGFibGUgIT0gTlVMTCkgew0KKwkJbV90YWJsZS0+UHV0TnVtYmVyKCJWYWx1ZSIsIEdldCgpKTsNCisJfQ0KK30NCisNCit2b2lkIENBTkphZ3Vhcjo6U3RhcnRMaXZlV2luZG93TW9kZSgpIHsNCisJbV90YWJsZS0+QWRkVGFibGVMaXN0ZW5lcigiVmFsdWUiLCB0aGlzLCB0cnVlKTsNCit9DQorDQordm9pZCBDQU5KYWd1YXI6OlN0b3BMaXZlV2luZG93TW9kZSgpIHsNCisJbV90YWJsZS0+UmVtb3ZlVGFibGVMaXN0ZW5lcih0aGlzKTsNCit9DQorDQorc3RkOjpzdHJpbmcgQ0FOSmFndWFyOjpHZXRTbWFydERhc2hib2FyZFR5cGUoKSB7DQorCXJldHVybiAiU3BlZWQgQ29udHJvbGxlciI7DQorfQ0KKw0KK3ZvaWQgQ0FOSmFndWFyOjpJbml0VGFibGUoSVRhYmxlICpzdWJUYWJsZSkgew0KKwltX3RhYmxlID0gc3ViVGFibGU7DQorCVVwZGF0ZVRhYmxlKCk7DQorfQ0KKw0KK0lUYWJsZSAqIENBTkphZ3Vhcjo6R2V0VGFibGUoKSB7DQorCXJldHVybiBtX3RhYmxlOw0KK30NCisNCisNCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9DQU5KYWd1YXIuaCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0NBTkphZ3Vhci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzNzc5ZTcKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9DQU5KYWd1YXIuaApAQCAtMCwwICsxLDEzNiBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBDb3B5cmlnaHQgKGMpIEZJUlNUIDIwMDkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCQkJCQkJCSAgKi8NCisvKiBPcGVuIFNvdXJjZSBTb2Z0d2FyZSAtIG1heSBiZSBtb2RpZmllZCBhbmQgc2hhcmVkIGJ5IEZSQyB0ZWFtcy4gVGhlIGNvZGUgICAqLw0KKy8qIG11c3QgYmUgYWNjb21wYW5pZWQgYnkgdGhlIEZJUlNUIEJTRCBsaWNlbnNlIGZpbGUgaW4gJChXSU5EX0JBU0UpL1dQSUxpYi4gICovDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisNCisjaWZuZGVmIENBTkpBR1VBUl9IDQorI2RlZmluZSBDQU5KQUdVQVJfSA0KKw0KKyNpbmNsdWRlICJFcnJvckJhc2UuaCINCisjaW5jbHVkZSAiTW90b3JTYWZldHkuaCINCisjaW5jbHVkZSAiTW90b3JTYWZldHlIZWxwZXIuaCINCisjaW5jbHVkZSAiUElET3V0cHV0LmgiDQorI2luY2x1ZGUgIlNwZWVkQ29udHJvbGxlci5oIg0KKyNpbmNsdWRlIDxzZW1MaWIuaD4NCisjaW5jbHVkZSA8dnhXb3Jrcy5oPg0KKyNpbmNsdWRlICJMaXZlV2luZG93L0xpdmVXaW5kb3dTZW5kYWJsZS5oIg0KKyNpbmNsdWRlICJ0YWJsZXMvSVRhYmxlLmgiDQorDQorLyoqDQorICogTHVtaW5hcnkgTWljcm8gSmFndWFyIFNwZWVkIENvbnRyb2wNCisgKi8NCitjbGFzcyBDQU5KYWd1YXIgOiBwdWJsaWMgTW90b3JTYWZldHksDQorCQkJCQlwdWJsaWMgU3BlZWRDb250cm9sbGVyLA0KKwkJCQkJcHVibGljIEVycm9yQmFzZSwNCisJCQkJCXB1YmxpYyBMaXZlV2luZG93U2VuZGFibGUsDQorCQkJCQlwdWJsaWMgSVRhYmxlTGlzdGVuZXINCit7DQorcHVibGljOg0KKwkvLyBUaGUgaW50ZXJuYWwgUElEIGNvbnRyb2wgbG9vcCBpbiB0aGUgSmFndWFyIHJ1bnMgYXQgMWtIei4NCisJc3RhdGljIGNvbnN0IElOVDMyIGtDb250cm9sbGVyUmF0ZSA9IDEwMDA7DQorCXN0YXRpYyBjb25zdCBkb3VibGUga0FwcHJveEJ1c1ZvbHRhZ2UgPSAxMi4wOw0KKw0KKwl0eXBlZGVmIGVudW0ge2tQZXJjZW50VmJ1cywga0N1cnJlbnQsIGtTcGVlZCwga1Bvc2l0aW9uLCBrVm9sdGFnZX0gQ29udHJvbE1vZGU7DQorCXR5cGVkZWYgZW51bSB7a0N1cnJlbnRGYXVsdCA9IDEsIGtUZW1wZXJhdHVyZUZhdWx0ID0gMiwga0J1c1ZvbHRhZ2VGYXVsdCA9IDQsIGtHYXRlRHJpdmVyRmF1bHQgPSA4fSBGYXVsdHM7DQorCXR5cGVkZWYgZW51bSB7a0ZvcndhcmRMaW1pdCA9IDEsIGtSZXZlcnNlTGltaXQgPSAyfSBMaW1pdHM7DQorCXR5cGVkZWYgZW51bSB7a1Bvc1JlZl9RdWFkRW5jb2RlciA9IDAsIGtQb3NSZWZfUG90ZW50aW9tZXRlciA9IDEsIGtQb3NSZWZfTm9uZSA9IDB4RkZ9IFBvc2l0aW9uUmVmZXJlbmNlOw0KKwl0eXBlZGVmIGVudW0ge2tTcGVlZFJlZl9FbmNvZGVyID0gMCwga1NwZWVkUmVmX0ludkVuY29kZXIgPSAyLCBrU3BlZWRSZWZfUXVhZEVuY29kZXIgPSAzLCBrU3BlZWRSZWZfTm9uZSA9IDB4RkZ9IFNwZWVkUmVmZXJlbmNlOw0KKwl0eXBlZGVmIGVudW0ge2tOZXV0cmFsTW9kZV9KdW1wZXIgPSAwLCBrTmV1dHJhbE1vZGVfQnJha2UgPSAxLCBrTmV1dHJhbE1vZGVfQ29hc3QgPSAyfSBOZXV0cmFsTW9kZTsNCisJdHlwZWRlZiBlbnVtIHtrTGltaXRNb2RlX1N3aXRjaElucHV0c09ubHkgPSAwLCBrTGltaXRNb2RlX1NvZnRQb3NpdGlvbkxpbWl0cyA9IDF9IExpbWl0TW9kZTsNCisNCisJZXhwbGljaXQgQ0FOSmFndWFyKFVJTlQ4IGRldmljZU51bWJlciwgQ29udHJvbE1vZGUgY29udHJvbE1vZGUgPSBrUGVyY2VudFZidXMpOw0KKwl2aXJ0dWFsIH5DQU5KYWd1YXIoKTsNCisNCisJLy8gU3BlZWRDb250cm9sbGVyIGludGVyZmFjZQ0KKwl2aXJ0dWFsIGZsb2F0IEdldCgpOw0KKwl2aXJ0dWFsIHZvaWQgU2V0KGZsb2F0IHZhbHVlLCBVSU5UOCBzeW5jR3JvdXA9MCk7DQorCXZpcnR1YWwgdm9pZCBEaXNhYmxlKCk7DQorDQorCS8vIFBJRE91dHB1dCBpbnRlcmZhY2UNCisJdmlydHVhbCB2b2lkIFBJRFdyaXRlKGZsb2F0IG91dHB1dCk7DQorDQorCS8vIE90aGVyIEFjY2Vzc29ycw0KKwl2b2lkIFNldFNwZWVkUmVmZXJlbmNlKFNwZWVkUmVmZXJlbmNlIHJlZmVyZW5jZSk7DQorCVNwZWVkUmVmZXJlbmNlIEdldFNwZWVkUmVmZXJlbmNlKCk7DQorCXZvaWQgU2V0UG9zaXRpb25SZWZlcmVuY2UoUG9zaXRpb25SZWZlcmVuY2UgcmVmZXJlbmNlKTsNCisJUG9zaXRpb25SZWZlcmVuY2UgR2V0UG9zaXRpb25SZWZlcmVuY2UoKTsNCisJdm9pZCBTZXRQSUQoZG91YmxlIHAsIGRvdWJsZSBpLCBkb3VibGUgZCk7DQorCWRvdWJsZSBHZXRQKCk7DQorCWRvdWJsZSBHZXRJKCk7DQorCWRvdWJsZSBHZXREKCk7DQorCXZvaWQgRW5hYmxlQ29udHJvbChkb3VibGUgZW5jb2RlckluaXRpYWxQb3NpdGlvbiA9IDAuMCk7DQorCXZvaWQgRGlzYWJsZUNvbnRyb2woKTsNCisJdm9pZCBDaGFuZ2VDb250cm9sTW9kZShDb250cm9sTW9kZSBjb250cm9sTW9kZSk7DQorCUNvbnRyb2xNb2RlIEdldENvbnRyb2xNb2RlKCk7DQorCWZsb2F0IEdldEJ1c1ZvbHRhZ2UoKTsNCisJZmxvYXQgR2V0T3V0cHV0Vm9sdGFnZSgpOw0KKwlmbG9hdCBHZXRPdXRwdXRDdXJyZW50KCk7DQorCWZsb2F0IEdldFRlbXBlcmF0dXJlKCk7DQorCWRvdWJsZSBHZXRQb3NpdGlvbigpOw0KKwlkb3VibGUgR2V0U3BlZWQoKTsNCisJYm9vbCBHZXRGb3J3YXJkTGltaXRPSygpOw0KKwlib29sIEdldFJldmVyc2VMaW1pdE9LKCk7DQorCVVJTlQxNiBHZXRGYXVsdHMoKTsNCisJYm9vbCBHZXRQb3dlckN5Y2xlZCgpOw0KKwl2b2lkIFNldFZvbHRhZ2VSYW1wUmF0ZShkb3VibGUgcmFtcFJhdGUpOw0KKwl2aXJ0dWFsIFVJTlQzMiBHZXRGaXJtd2FyZVZlcnNpb24oKTsNCisJVUlOVDggR2V0SGFyZHdhcmVWZXJzaW9uKCk7DQorCXZvaWQgQ29uZmlnTmV1dHJhbE1vZGUoTmV1dHJhbE1vZGUgbW9kZSk7DQorCXZvaWQgQ29uZmlnRW5jb2RlckNvZGVzUGVyUmV2KFVJTlQxNiBjb2Rlc1BlclJldik7DQorCXZvaWQgQ29uZmlnUG90ZW50aW9tZXRlclR1cm5zKFVJTlQxNiB0dXJucyk7DQorCXZvaWQgQ29uZmlnU29mdFBvc2l0aW9uTGltaXRzKGRvdWJsZSBmb3J3YXJkTGltaXRQb3NpdGlvbiwgZG91YmxlIHJldmVyc2VMaW1pdFBvc2l0aW9uKTsNCisJdm9pZCBEaXNhYmxlU29mdFBvc2l0aW9uTGltaXRzKCk7DQorCXZvaWQgQ29uZmlnTWF4T3V0cHV0Vm9sdGFnZShkb3VibGUgdm9sdGFnZSk7DQorCXZvaWQgQ29uZmlnRmF1bHRUaW1lKGZsb2F0IGZhdWx0VGltZSk7DQorDQorCXN0YXRpYyB2b2lkIFVwZGF0ZVN5bmNHcm91cChVSU5UOCBzeW5jR3JvdXApOw0KKw0KKwl2b2lkIFNldEV4cGlyYXRpb24oZmxvYXQgdGltZW91dCk7DQorCWZsb2F0IEdldEV4cGlyYXRpb24oKTsNCisJYm9vbCBJc0FsaXZlKCk7DQorCXZvaWQgU3RvcE1vdG9yKCk7DQorCWJvb2wgSXNTYWZldHlFbmFibGVkKCk7DQorCXZvaWQgU2V0U2FmZXR5RW5hYmxlZChib29sIGVuYWJsZWQpOw0KKwl2b2lkIEdldERlc2NyaXB0aW9uKGNoYXIgKmRlc2MpOw0KKw0KK3Byb3RlY3RlZDoNCisJVUlOVDggcGFja1BlcmNlbnRhZ2UoVUlOVDggKmJ1ZmZlciwgZG91YmxlIHZhbHVlKTsNCisJVUlOVDggcGFja0ZYUDhfOChVSU5UOCAqYnVmZmVyLCBkb3VibGUgdmFsdWUpOw0KKwlVSU5UOCBwYWNrRlhQMTZfMTYoVUlOVDggKmJ1ZmZlciwgZG91YmxlIHZhbHVlKTsNCisJVUlOVDggcGFja0lOVDE2KFVJTlQ4ICpidWZmZXIsIElOVDE2IHZhbHVlKTsNCisJVUlOVDggcGFja0lOVDMyKFVJTlQ4ICpidWZmZXIsIElOVDMyIHZhbHVlKTsNCisJZG91YmxlIHVucGFja1BlcmNlbnRhZ2UoVUlOVDggKmJ1ZmZlcik7DQorCWRvdWJsZSB1bnBhY2tGWFA4XzgoVUlOVDggKmJ1ZmZlcik7DQorCWRvdWJsZSB1bnBhY2tGWFAxNl8xNihVSU5UOCAqYnVmZmVyKTsNCisJSU5UMTYgdW5wYWNrSU5UMTYoVUlOVDggKmJ1ZmZlcik7DQorCUlOVDMyIHVucGFja0lOVDMyKFVJTlQ4ICpidWZmZXIpOw0KKwl2aXJ0dWFsIHZvaWQgc2V0VHJhbnNhY3Rpb24oVUlOVDMyIG1lc3NhZ2VJRCwgY29uc3QgVUlOVDggKmRhdGEsIFVJTlQ4IGRhdGFTaXplKTsNCisJdmlydHVhbCB2b2lkIGdldFRyYW5zYWN0aW9uKFVJTlQzMiBtZXNzYWdlSUQsIFVJTlQ4ICpkYXRhLCBVSU5UOCAqZGF0YVNpemUpOw0KKw0KKwlzdGF0aWMgSU5UMzIgc2VuZE1lc3NhZ2UoVUlOVDMyIG1lc3NhZ2VJRCwgY29uc3QgVUlOVDggKmRhdGEsIFVJTlQ4IGRhdGFTaXplKTsNCisJc3RhdGljIElOVDMyIHJlY2VpdmVNZXNzYWdlKFVJTlQzMiAqbWVzc2FnZUlELCBVSU5UOCAqZGF0YSwgVUlOVDggKmRhdGFTaXplLCBmbG9hdCB0aW1lb3V0ID0gMC4wMik7DQorDQorCVVJTlQ4IG1fZGV2aWNlTnVtYmVyOw0KKwlDb250cm9sTW9kZSBtX2NvbnRyb2xNb2RlOw0KKwlTRU1fSUQgbV90cmFuc2FjdGlvblNlbWFwaG9yZTsNCisJZG91YmxlIG1fbWF4T3V0cHV0Vm9sdGFnZTsNCisNCisJTW90b3JTYWZldHlIZWxwZXIgKm1fc2FmZXR5SGVscGVyOw0KKw0KKwl2b2lkIFZhbHVlQ2hhbmdlZChJVGFibGUqIHNvdXJjZSwgY29uc3Qgc3RkOjpzdHJpbmcmIGtleSwgRW50cnlWYWx1ZSB2YWx1ZSwgYm9vbCBpc05ldyk7DQorCXZvaWQgVXBkYXRlVGFibGUoKTsNCisJdm9pZCBTdGFydExpdmVXaW5kb3dNb2RlKCk7DQorCXZvaWQgU3RvcExpdmVXaW5kb3dNb2RlKCk7DQorCXN0ZDo6c3RyaW5nIEdldFNtYXJ0RGFzaGJvYXJkVHlwZSgpOw0KKwl2b2lkIEluaXRUYWJsZShJVGFibGUgKnN1YlRhYmxlKTsNCisJSVRhYmxlICogR2V0VGFibGUoKTsNCisJDQorCUlUYWJsZSAqbV90YWJsZTsNCisNCitwcml2YXRlOg0KKwl2b2lkIEluaXRDQU5KYWd1YXIoKTsNCit9Ow0KKyNlbmRpZg0KKw0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0NoaXBPYmplY3QuaCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0NoaXBPYmplY3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NTgwNDMyCi0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvQ2hpcE9iamVjdC5oCkBAIC0wLDAgKzEsMzIgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorLyogQ29weXJpZ2h0IChjKSBGSVJTVCAyMDA4LiBBbGwgUmlnaHRzIFJlc2VydmVkLgkJCQkJCQkgICovDQorLyogT3BlbiBTb3VyY2UgU29mdHdhcmUgLSBtYXkgYmUgbW9kaWZpZWQgYW5kIHNoYXJlZCBieSBGUkMgdGVhbXMuIFRoZSBjb2RlICAgKi8NCisvKiBtdXN0IGJlIGFjY29tcGFuaWVkIGJ5IHRoZSBGSVJTVCBCU0QgbGljZW5zZSBmaWxlIGluICQoV0lORF9CQVNFKS9XUElMaWIuICAqLw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorI2lmbmRlZiBfX0NoaXBPYmplY3RfaF9fDQorI2RlZmluZSBfX0NoaXBPYmplY3RfaF9fDQorDQorI2luY2x1ZGUgPHZ4V29ya3MuaD4NCisjaW5jbHVkZSAiQ2hpcE9iamVjdC9OaVJpby5oIg0KKw0KKyNpbmNsdWRlICJDaGlwT2JqZWN0L3RBY2N1bXVsYXRvci5oIg0KKyNpbmNsdWRlICJDaGlwT2JqZWN0L3RBSS5oIg0KKyNpbmNsdWRlICJDaGlwT2JqZWN0L3RBbGFybS5oIg0KKyNpbmNsdWRlICJDaGlwT2JqZWN0L3RBbmFsb2dUcmlnZ2VyLmgiDQorI2luY2x1ZGUgIkNoaXBPYmplY3QvdENvdW50ZXIuaCINCisjaW5jbHVkZSAiQ2hpcE9iamVjdC90RElPLmgiDQorI2luY2x1ZGUgIkNoaXBPYmplY3QvdERNQS5oIg0KKy8vI2luY2x1ZGUgIkNoaXBPYmplY3QvdERNQU1hbmFnZXIuaCINCisjaW5jbHVkZSAiQ2hpcE9iamVjdC90RW5jb2Rlci5oIg0KKyNpbmNsdWRlICJDaGlwT2JqZWN0L3RHbG9iYWwuaCINCisjaW5jbHVkZSAiQ2hpcE9iamVjdC90SW50ZXJydXB0LmgiDQorI2luY2x1ZGUgIkNoaXBPYmplY3QvdEludGVycnVwdE1hbmFnZXIuaCINCisjaW5jbHVkZSAiQ2hpcE9iamVjdC90U29sZW5vaWQuaCINCisjaW5jbHVkZSAiQ2hpcE9iamVjdC90U1BJLmgiDQorI2luY2x1ZGUgIkNoaXBPYmplY3QvdFdhdGNoZG9nLmgiDQorDQordXNpbmcgbmFtZXNwYWNlIG5GUEdBOw0KK3VzaW5nIG5hbWVzcGFjZSBuRlJDXzIwMTJfMV82XzQ7DQorDQorI2VuZGlmDQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvQ2hpcE9iamVjdC9NYWtlZmlsZSBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0NoaXBPYmplY3QvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGEwNWM5NgotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0NoaXBPYmplY3QvTWFrZWZpbGUKQEAgLTAsMCArMSwyMTg0IEBACisjIFdpbmQgUml2ZXIgV29ya2JlbmNoIGdlbmVyYXRlZCBNYWtlZmlsZS4NCisjIERvIG5vdCBlZGl0ISEhDQorIw0KKyMgVGhlIGZpbGUgIi53cm1ha2VmaWxlIiBpcyB0aGUgdGVtcGxhdGUgdXNlZCBieSB0aGUgV2luZCBSaXZlciBXb3JrYmVuY2ggdG8NCisjIGdlbmVyYXRlIHRoZSBtYWtlZmlsZXMgb2YgdGhpcyBwcm9qZWN0LiBBZGQgdXNlci1zcGVjaWZpYyBidWlsZCB0YXJnZXRzIGFuZA0KKyMgbWFrZSBydWxlcyBvbmx5KCEpIGluIHRoaXMgcHJvamVjdCdzICIud3JtYWtlZmlsZSIgZmlsZS4gVGhlc2Ugd2lsbCB0aGVuIGJlDQorIyBhdXRvbWF0aWNhbGx5IGR1bXBlZCBpbnRvIHRoZSBtYWtlZmlsZXMuDQorDQorV0lORF9IT01FIDo9ICQoc3Vic3QgXCwvLCQoV0lORF9IT01FKSkNCitXSU5EX0JBU0UgOj0gJChzdWJzdCBcLC8sJChXSU5EX0JBU0UpKQ0KK1dJTkRfVVNSIDo9ICQoc3Vic3QgXCwvLCQoV0lORF9VU1IpKQ0KKw0KK2FsbCA6IHByZV9idWlsZCBtYWluX2FsbCBwb3N0X2J1aWxkDQorDQorX2NsZWFuIDo6DQorCUBlY2hvICJtYWtlOiByZW1vdmluZyB0YXJnZXRzIGFuZCBvYmplY3RzIG9mIGBwd2RgIg0KKw0KK1RSQUNFPTANCitUUkFDRU9OPSQoVFJBQ0U6MD1AKQ0KK1RSQUNFX0ZMQUc9JChUUkFDRU9OOjE9KQ0KKw0KK01BS0VGSUxFIDo9IE1ha2VmaWxlDQorDQorQlVJTERfU1BFQyA9IFBQQzYwM2dudQ0KK0RFQlVHX01PREUgPSAxDQorU1JDX0RJUiA6PSAuDQorQlVJTERfUk9PVF9ESVIgOj0gDQorUFJKX1JPT1RfRElSIDo9IEM6L3dpbmRyaXZlci93b3Jrc3BhY2UvV1BJTGliDQorV1NfUk9PVF9ESVIgOj0gQzovd2luZHJpdmVyL3dvcmtzcGFjZQ0KKw0KK0FMTF9CVUlMRF9TUEVDUyA6PSBQUEMzMmRpYWIgUFBDMzJnbnUgUFBDMzJzZmRpYWIgUFBDMzJzZmdudSBcDQorCSBQUEM0MDNkaWFiIFBQQzQwM2dudSBQUEM0MDVkaWFiIFBQQzQwNWdudSBcDQorCSBQUEM0MDVzZmRpYWIgUFBDNDA1c2ZnbnUgUFBDNDQwZGlhYiBQUEM0NDBnbnUgXA0KKwkgUFBDNDQwc2ZkaWFiIFBQQzQ0MHNmZ251IFBQQzYwM2RpYWIgUFBDNjAzZ251IFwNCisJIFBQQzYwNGRpYWIgUFBDNjA0Z251IFBQQzg1WFhkaWFiIFBQQzg1WFhnbnUgXA0KKwkgUFBDODVYWHNmZGlhYiBQUEM4NVhYc2ZnbnUgUFBDODYwc2ZkaWFiIFBQQzg2MHNmZ251IFwNCisJIFNJTUxJTlVYZGlhYiBTSU1MSU5VWGdudSBTSU1OVGRpYWIgU0lNTlRnbnUgXA0KKwkgU0lNU1BBUkNTT0xBUklTZGlhYiBTSU1TUEFSQ1NPTEFSSVNnbnUNCitFTkFCTEVEX0JVSUxEX1NQRUNTIDo9IFBQQzYwM2dudQ0KKw0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDMzJkaWFiKQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitPQkpfRElSIDo9IFBQQzMyZGlhYl9ERUJVRw0KK2Vsc2UNCitPQkpfRElSIDo9IFBQQzMyZGlhYg0KK2VuZGlmDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzMyZ251KQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitPQkpfRElSIDo9IFBQQzMyZ251X0RFQlVHDQorZWxzZQ0KK09CSl9ESVIgOj0gUFBDMzJnbnUNCitlbmRpZg0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEMzMnNmZGlhYikNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorT0JKX0RJUiA6PSBQUEMzMnNmZGlhYl9ERUJVRw0KK2Vsc2UNCitPQkpfRElSIDo9IFBQQzMyc2ZkaWFiDQorZW5kaWYNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDMzJzZmdudSkNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorT0JKX0RJUiA6PSBQUEMzMnNmZ251X0RFQlVHDQorZWxzZQ0KK09CSl9ESVIgOj0gUFBDMzJzZmdudQ0KK2VuZGlmDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzQwM2RpYWIpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK09CSl9ESVIgOj0gUFBDNDAzZGlhYl9ERUJVRw0KK2Vsc2UNCitPQkpfRElSIDo9IFBQQzQwM2RpYWINCitlbmRpZg0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM0MDNnbnUpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK09CSl9ESVIgOj0gUFBDNDAzZ251X0RFQlVHDQorZWxzZQ0KK09CSl9ESVIgOj0gUFBDNDAzZ251DQorZW5kaWYNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNDA1ZGlhYikNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorT0JKX0RJUiA6PSBQUEM0MDVkaWFiX0RFQlVHDQorZWxzZQ0KK09CSl9ESVIgOj0gUFBDNDA1ZGlhYg0KK2VuZGlmDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzQwNWdudSkNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorT0JKX0RJUiA6PSBQUEM0MDVnbnVfREVCVUcNCitlbHNlDQorT0JKX0RJUiA6PSBQUEM0MDVnbnUNCitlbmRpZg0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM0MDVzZmRpYWIpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK09CSl9ESVIgOj0gUFBDNDA1c2ZkaWFiX0RFQlVHDQorZWxzZQ0KK09CSl9ESVIgOj0gUFBDNDA1c2ZkaWFiDQorZW5kaWYNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNDA1c2ZnbnUpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK09CSl9ESVIgOj0gUFBDNDA1c2ZnbnVfREVCVUcNCitlbHNlDQorT0JKX0RJUiA6PSBQUEM0MDVzZmdudQ0KK2VuZGlmDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzQ0MGRpYWIpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK09CSl9ESVIgOj0gUFBDNDQwZGlhYl9ERUJVRw0KK2Vsc2UNCitPQkpfRElSIDo9IFBQQzQ0MGRpYWINCitlbmRpZg0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM0NDBnbnUpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK09CSl9ESVIgOj0gUFBDNDQwZ251X0RFQlVHDQorZWxzZQ0KK09CSl9ESVIgOj0gUFBDNDQwZ251DQorZW5kaWYNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNDQwc2ZkaWFiKQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitPQkpfRElSIDo9IFBQQzQ0MHNmZGlhYl9ERUJVRw0KK2Vsc2UNCitPQkpfRElSIDo9IFBQQzQ0MHNmZGlhYg0KK2VuZGlmDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzQ0MHNmZ251KQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitPQkpfRElSIDo9IFBQQzQ0MHNmZ251X0RFQlVHDQorZWxzZQ0KK09CSl9ESVIgOj0gUFBDNDQwc2ZnbnUNCitlbmRpZg0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM2MDNkaWFiKQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitPQkpfRElSIDo9IFBQQzYwM2RpYWJfREVCVUcNCitlbHNlDQorT0JKX0RJUiA6PSBQUEM2MDNkaWFiDQorZW5kaWYNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNjAzZ251KQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitPQkpfRElSIDo9IFBQQzYwM2dudV9ERUJVRw0KK2Vsc2UNCitPQkpfRElSIDo9IFBQQzYwM2dudQ0KK2VuZGlmDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzYwNGRpYWIpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK09CSl9ESVIgOj0gUFBDNjA0ZGlhYl9ERUJVRw0KK2Vsc2UNCitPQkpfRElSIDo9IFBQQzYwNGRpYWINCitlbmRpZg0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM2MDRnbnUpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK09CSl9ESVIgOj0gUFBDNjA0Z251X0RFQlVHDQorZWxzZQ0KK09CSl9ESVIgOj0gUFBDNjA0Z251DQorZW5kaWYNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDODVYWGRpYWIpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK09CSl9ESVIgOj0gUFBDODVYWGRpYWJfREVCVUcNCitlbHNlDQorT0JKX0RJUiA6PSBQUEM4NVhYZGlhYg0KK2VuZGlmDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzg1WFhnbnUpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK09CSl9ESVIgOj0gUFBDODVYWGdudV9ERUJVRw0KK2Vsc2UNCitPQkpfRElSIDo9IFBQQzg1WFhnbnUNCitlbmRpZg0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM4NVhYc2ZkaWFiKQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitPQkpfRElSIDo9IFBQQzg1WFhzZmRpYWJfREVCVUcNCitlbHNlDQorT0JKX0RJUiA6PSBQUEM4NVhYc2ZkaWFiDQorZW5kaWYNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDODVYWHNmZ251KQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitPQkpfRElSIDo9IFBQQzg1WFhzZmdudV9ERUJVRw0KK2Vsc2UNCitPQkpfRElSIDo9IFBQQzg1WFhzZmdudQ0KK2VuZGlmDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzg2MHNmZGlhYikNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorT0JKX0RJUiA6PSBQUEM4NjBzZmRpYWJfREVCVUcNCitlbHNlDQorT0JKX0RJUiA6PSBQUEM4NjBzZmRpYWINCitlbmRpZg0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM4NjBzZmdudSkNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorT0JKX0RJUiA6PSBQUEM4NjBzZmdudV9ERUJVRw0KK2Vsc2UNCitPQkpfRElSIDo9IFBQQzg2MHNmZ251DQorZW5kaWYNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksU0lNTElOVVhkaWFiKQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitPQkpfRElSIDo9IFNJTUxJTlVYZGlhYl9ERUJVRw0KK2Vsc2UNCitPQkpfRElSIDo9IFNJTUxJTlVYZGlhYg0KK2VuZGlmDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFNJTUxJTlVYZ251KQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitPQkpfRElSIDo9IFNJTUxJTlVYZ251X0RFQlVHDQorZWxzZQ0KK09CSl9ESVIgOj0gU0lNTElOVVhnbnUNCitlbmRpZg0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxTSU1OVGRpYWIpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK09CSl9ESVIgOj0gU0lNTlRkaWFiX0RFQlVHDQorZWxzZQ0KK09CSl9ESVIgOj0gU0lNTlRkaWFiDQorZW5kaWYNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksU0lNTlRnbnUpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK09CSl9ESVIgOj0gU0lNTlRnbnVfREVCVUcNCitlbHNlDQorT0JKX0RJUiA6PSBTSU1OVGdudQ0KK2VuZGlmDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFNJTVNQQVJDU09MQVJJU2RpYWIpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK09CSl9ESVIgOj0gU0lNU1BBUkNTT0xBUklTZGlhYl9ERUJVRw0KK2Vsc2UNCitPQkpfRElSIDo9IFNJTVNQQVJDU09MQVJJU2RpYWINCitlbmRpZg0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxTSU1TUEFSQ1NPTEFSSVNnbnUpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK09CSl9ESVIgOj0gU0lNU1BBUkNTT0xBUklTZ251X0RFQlVHDQorZWxzZQ0KK09CSl9ESVIgOj0gU0lNU1BBUkNTT0xBUklTZ251DQorZW5kaWYNCitlbmRpZg0KKw0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDMzJkaWFiKQ0KK1NVQkRJUlMgOj0NCitPQkpFQ1RTIDo9DQorDQorUFJPSkVDVF9UQVJHRVRTIDo9ICQoT0JKRUNUUykNCisNCitTVUJfT0JKRUNUUyA6PQ0KK1NVQl9UQVJHRVRTIDo9DQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzMyZ251KQ0KK1NVQkRJUlMgOj0NCitPQkpFQ1RTIDo9DQorDQorUFJPSkVDVF9UQVJHRVRTIDo9ICQoT0JKRUNUUykNCisNCitTVUJfT0JKRUNUUyA6PQ0KK1NVQl9UQVJHRVRTIDo9DQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzMyc2ZkaWFiKQ0KK1NVQkRJUlMgOj0NCitPQkpFQ1RTIDo9DQorDQorUFJPSkVDVF9UQVJHRVRTIDo9ICQoT0JKRUNUUykNCisNCitTVUJfT0JKRUNUUyA6PQ0KK1NVQl9UQVJHRVRTIDo9DQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzMyc2ZnbnUpDQorU1VCRElSUyA6PQ0KK09CSkVDVFMgOj0NCisNCitQUk9KRUNUX1RBUkdFVFMgOj0gJChPQkpFQ1RTKQ0KKw0KK1NVQl9PQkpFQ1RTIDo9DQorU1VCX1RBUkdFVFMgOj0NCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNDAzZGlhYikNCitTVUJESVJTIDo9DQorT0JKRUNUUyA6PQ0KKw0KK1BST0pFQ1RfVEFSR0VUUyA6PSAkKE9CSkVDVFMpDQorDQorU1VCX09CSkVDVFMgOj0NCitTVUJfVEFSR0VUUyA6PQ0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM0MDNnbnUpDQorU1VCRElSUyA6PQ0KK09CSkVDVFMgOj0NCisNCitQUk9KRUNUX1RBUkdFVFMgOj0gJChPQkpFQ1RTKQ0KKw0KK1NVQl9PQkpFQ1RTIDo9DQorU1VCX1RBUkdFVFMgOj0NCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNDA1ZGlhYikNCitTVUJESVJTIDo9DQorT0JKRUNUUyA6PQ0KKw0KK1BST0pFQ1RfVEFSR0VUUyA6PSAkKE9CSkVDVFMpDQorDQorU1VCX09CSkVDVFMgOj0NCitTVUJfVEFSR0VUUyA6PQ0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM0MDVnbnUpDQorU1VCRElSUyA6PQ0KK09CSkVDVFMgOj0NCisNCitQUk9KRUNUX1RBUkdFVFMgOj0gJChPQkpFQ1RTKQ0KKw0KK1NVQl9PQkpFQ1RTIDo9DQorU1VCX1RBUkdFVFMgOj0NCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNDA1c2ZkaWFiKQ0KK1NVQkRJUlMgOj0NCitPQkpFQ1RTIDo9DQorDQorUFJPSkVDVF9UQVJHRVRTIDo9ICQoT0JKRUNUUykNCisNCitTVUJfT0JKRUNUUyA6PQ0KK1NVQl9UQVJHRVRTIDo9DQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzQwNXNmZ251KQ0KK1NVQkRJUlMgOj0NCitPQkpFQ1RTIDo9DQorDQorUFJPSkVDVF9UQVJHRVRTIDo9ICQoT0JKRUNUUykNCisNCitTVUJfT0JKRUNUUyA6PQ0KK1NVQl9UQVJHRVRTIDo9DQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzQ0MGRpYWIpDQorU1VCRElSUyA6PQ0KK09CSkVDVFMgOj0NCisNCitQUk9KRUNUX1RBUkdFVFMgOj0gJChPQkpFQ1RTKQ0KKw0KK1NVQl9PQkpFQ1RTIDo9DQorU1VCX1RBUkdFVFMgOj0NCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNDQwZ251KQ0KK1NVQkRJUlMgOj0NCitPQkpFQ1RTIDo9DQorDQorUFJPSkVDVF9UQVJHRVRTIDo9ICQoT0JKRUNUUykNCisNCitTVUJfT0JKRUNUUyA6PQ0KK1NVQl9UQVJHRVRTIDo9DQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzQ0MHNmZGlhYikNCitTVUJESVJTIDo9DQorT0JKRUNUUyA6PQ0KKw0KK1BST0pFQ1RfVEFSR0VUUyA6PSAkKE9CSkVDVFMpDQorDQorU1VCX09CSkVDVFMgOj0NCitTVUJfVEFSR0VUUyA6PQ0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM0NDBzZmdudSkNCitTVUJESVJTIDo9DQorT0JKRUNUUyA6PQ0KKw0KK1BST0pFQ1RfVEFSR0VUUyA6PSAkKE9CSkVDVFMpDQorDQorU1VCX09CSkVDVFMgOj0NCitTVUJfVEFSR0VUUyA6PQ0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM2MDNkaWFiKQ0KK1NVQkRJUlMgOj0NCitPQkpFQ1RTIDo9DQorDQorUFJPSkVDVF9UQVJHRVRTIDo9ICQoT0JKRUNUUykNCisNCitTVUJfT0JKRUNUUyA6PQ0KK1NVQl9UQVJHRVRTIDo9DQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzYwM2dudSkNCitTVUJESVJTIDo9DQorT0JKRUNUUyA6PQ0KKw0KK1BST0pFQ1RfVEFSR0VUUyA6PSAkKE9CSkVDVFMpDQorDQorU1VCX09CSkVDVFMgOj0NCitTVUJfVEFSR0VUUyA6PQ0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM2MDRkaWFiKQ0KK1NVQkRJUlMgOj0NCitPQkpFQ1RTIDo9DQorDQorUFJPSkVDVF9UQVJHRVRTIDo9ICQoT0JKRUNUUykNCisNCitTVUJfT0JKRUNUUyA6PQ0KK1NVQl9UQVJHRVRTIDo9DQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzYwNGdudSkNCitTVUJESVJTIDo9DQorT0JKRUNUUyA6PQ0KKw0KK1BST0pFQ1RfVEFSR0VUUyA6PSAkKE9CSkVDVFMpDQorDQorU1VCX09CSkVDVFMgOj0NCitTVUJfVEFSR0VUUyA6PQ0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM4NVhYZGlhYikNCitTVUJESVJTIDo9DQorT0JKRUNUUyA6PQ0KKw0KK1BST0pFQ1RfVEFSR0VUUyA6PSAkKE9CSkVDVFMpDQorDQorU1VCX09CSkVDVFMgOj0NCitTVUJfVEFSR0VUUyA6PQ0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM4NVhYZ251KQ0KK1NVQkRJUlMgOj0NCitPQkpFQ1RTIDo9DQorDQorUFJPSkVDVF9UQVJHRVRTIDo9ICQoT0JKRUNUUykNCisNCitTVUJfT0JKRUNUUyA6PQ0KK1NVQl9UQVJHRVRTIDo9DQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzg1WFhzZmRpYWIpDQorU1VCRElSUyA6PQ0KK09CSkVDVFMgOj0NCisNCitQUk9KRUNUX1RBUkdFVFMgOj0gJChPQkpFQ1RTKQ0KKw0KK1NVQl9PQkpFQ1RTIDo9DQorU1VCX1RBUkdFVFMgOj0NCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDODVYWHNmZ251KQ0KK1NVQkRJUlMgOj0NCitPQkpFQ1RTIDo9DQorDQorUFJPSkVDVF9UQVJHRVRTIDo9ICQoT0JKRUNUUykNCisNCitTVUJfT0JKRUNUUyA6PQ0KK1NVQl9UQVJHRVRTIDo9DQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzg2MHNmZGlhYikNCitTVUJESVJTIDo9DQorT0JKRUNUUyA6PQ0KKw0KK1BST0pFQ1RfVEFSR0VUUyA6PSAkKE9CSkVDVFMpDQorDQorU1VCX09CSkVDVFMgOj0NCitTVUJfVEFSR0VUUyA6PQ0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM4NjBzZmdudSkNCitTVUJESVJTIDo9DQorT0JKRUNUUyA6PQ0KKw0KK1BST0pFQ1RfVEFSR0VUUyA6PSAkKE9CSkVDVFMpDQorDQorU1VCX09CSkVDVFMgOj0NCitTVUJfVEFSR0VUUyA6PQ0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxTSU1MSU5VWGRpYWIpDQorU1VCRElSUyA6PQ0KK09CSkVDVFMgOj0NCisNCitQUk9KRUNUX1RBUkdFVFMgOj0gJChPQkpFQ1RTKQ0KKw0KK1NVQl9PQkpFQ1RTIDo9DQorU1VCX1RBUkdFVFMgOj0NCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksU0lNTElOVVhnbnUpDQorU1VCRElSUyA6PQ0KK09CSkVDVFMgOj0NCisNCitQUk9KRUNUX1RBUkdFVFMgOj0gJChPQkpFQ1RTKQ0KKw0KK1NVQl9PQkpFQ1RTIDo9DQorU1VCX1RBUkdFVFMgOj0NCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksU0lNTlRkaWFiKQ0KK1NVQkRJUlMgOj0NCitPQkpFQ1RTIDo9DQorDQorUFJPSkVDVF9UQVJHRVRTIDo9ICQoT0JKRUNUUykNCisNCitTVUJfT0JKRUNUUyA6PQ0KK1NVQl9UQVJHRVRTIDo9DQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFNJTU5UZ251KQ0KK1NVQkRJUlMgOj0NCitPQkpFQ1RTIDo9DQorDQorUFJPSkVDVF9UQVJHRVRTIDo9ICQoT0JKRUNUUykNCisNCitTVUJfT0JKRUNUUyA6PQ0KK1NVQl9UQVJHRVRTIDo9DQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFNJTVNQQVJDU09MQVJJU2RpYWIpDQorU1VCRElSUyA6PQ0KK09CSkVDVFMgOj0NCisNCitQUk9KRUNUX1RBUkdFVFMgOj0gJChPQkpFQ1RTKQ0KKw0KK1NVQl9PQkpFQ1RTIDo9DQorU1VCX1RBUkdFVFMgOj0NCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksU0lNU1BBUkNTT0xBUklTZ251KQ0KK1NVQkRJUlMgOj0NCitPQkpFQ1RTIDo9DQorDQorUFJPSkVDVF9UQVJHRVRTIDo9ICQoT0JKRUNUUykNCisNCitTVUJfT0JKRUNUUyA6PQ0KK1NVQl9UQVJHRVRTIDo9DQorZW5kaWYNCisNCitQUk9KRUNUX1RZUEUgPSBES00NCitERUZJTkVTID0gDQorRVhQQU5EX0RCRyA9IDANCisNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzMyZGlhYikNCitWWF9DUFVfRkFNSUxZID0gcHBjDQorQ1BVID0gUFBDMzINCitUT09MX0ZBTUlMWSA9IGRpYWINCitUT09MID0gZGlhYg0KK1RPT0xfUEFUSCA9IA0KK0NDX0FSQ0hfU1BFQyA9IC10UFBDRkg6dnh3b3JrczYzIC1Yc3Rtdy1zbG93IC1EUFBDMzJfZnA2MHgNCitMSUJQQVRIID0gDQorTElCUyA9IA0KKw0KK0lERV9JTkNMVURFUyA9IC1JJChXSU5EX0JBU0UpL3RhcmdldC9oIC1JJChXSU5EX0JBU0UpL3RhcmdldC9oL3dybi9jb3JlaXAgDQorDQorSURFX0xJQlJBUklFUyA9IA0KK2VuZGlmDQorDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEMzMmdudSkNCitWWF9DUFVfRkFNSUxZID0gcHBjDQorQ1BVID0gUFBDMzINCitUT09MX0ZBTUlMWSA9IGdudQ0KK1RPT0wgPSBnbnUNCitUT09MX1BBVEggPSANCitDQ19BUkNIX1NQRUMgPSAtbWhhcmQtZmxvYXQgLW1zdHJpY3QtYWxpZ24gLW1uby1pbXBsaWNpdC1mcCAtRFBQQzMyX2ZwNjB4DQorTElCUEFUSCA9IA0KK0xJQlMgPSANCisNCitJREVfSU5DTFVERVMgPSAtSSQoV0lORF9CQVNFKS90YXJnZXQvaCAtSSQoV0lORF9CQVNFKS90YXJnZXQvaC93cm4vY29yZWlwIA0KKw0KK0lERV9MSUJSQVJJRVMgPSANCitlbmRpZg0KKw0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDMzJzZmRpYWIpDQorVlhfQ1BVX0ZBTUlMWSA9IHBwYw0KK0NQVSA9IFBQQzMyDQorVE9PTF9GQU1JTFkgPSBkaWFiDQorVE9PTCA9IHNmZGlhYg0KK1RPT0xfUEFUSCA9IA0KK0NDX0FSQ0hfU1BFQyA9IC10UFBDRlM6dnh3b3JrczYzDQorTElCUEFUSCA9IA0KK0xJQlMgPSANCisNCitJREVfSU5DTFVERVMgPSAtSSQoV0lORF9CQVNFKS90YXJnZXQvaCAtSSQoV0lORF9CQVNFKS90YXJnZXQvaC93cm4vY29yZWlwIA0KKw0KK0lERV9MSUJSQVJJRVMgPSANCitlbmRpZg0KKw0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDMzJzZmdudSkNCitWWF9DUFVfRkFNSUxZID0gcHBjDQorQ1BVID0gUFBDMzINCitUT09MX0ZBTUlMWSA9IGdudQ0KK1RPT0wgPSBzZmdudQ0KK1RPT0xfUEFUSCA9IA0KK0NDX0FSQ0hfU1BFQyA9IC1tc29mdC1mbG9hdCAtbXN0cmljdC1hbGlnbg0KK0xJQlBBVEggPSANCitMSUJTID0gDQorDQorSURFX0lOQ0xVREVTID0gLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2ggLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2gvd3JuL2NvcmVpcCANCisNCitJREVfTElCUkFSSUVTID0gDQorZW5kaWYNCisNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzQwM2RpYWIpDQorVlhfQ1BVX0ZBTUlMWSA9IHBwYw0KK0NQVSA9IFBQQzQwMw0KK1RPT0xfRkFNSUxZID0gZGlhYg0KK1RPT0wgPSBkaWFiDQorVE9PTF9QQVRIID0gDQorQ0NfQVJDSF9TUEVDID0gLXRQUEM0MDNGUzp2eHdvcmtzNjMNCitMSUJQQVRIID0gDQorTElCUyA9IA0KKw0KK0lERV9JTkNMVURFUyA9IC1JJChXSU5EX0JBU0UpL3RhcmdldC9oIC1JJChXSU5EX0JBU0UpL3RhcmdldC9oL3dybi9jb3JlaXAgDQorDQorSURFX0xJQlJBUklFUyA9IA0KK2VuZGlmDQorDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM0MDNnbnUpDQorVlhfQ1BVX0ZBTUlMWSA9IHBwYw0KK0NQVSA9IFBQQzQwMw0KK1RPT0xfRkFNSUxZID0gZ251DQorVE9PTCA9IGdudQ0KK1RPT0xfUEFUSCA9IA0KK0NDX0FSQ0hfU1BFQyA9IC1tY3B1PTQwMyAtbXN0cmljdC1hbGlnbiAtbXNvZnQtZmxvYXQNCitMSUJQQVRIID0gDQorTElCUyA9IA0KKw0KK0lERV9JTkNMVURFUyA9IC1JJChXSU5EX0JBU0UpL3RhcmdldC9oIC1JJChXSU5EX0JBU0UpL3RhcmdldC9oL3dybi9jb3JlaXAgDQorDQorSURFX0xJQlJBUklFUyA9IA0KK2VuZGlmDQorDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM0MDVkaWFiKQ0KK1ZYX0NQVV9GQU1JTFkgPSBwcGMNCitDUFUgPSBQUEM0MDUNCitUT09MX0ZBTUlMWSA9IGRpYWINCitUT09MID0gZGlhYg0KK1RPT0xfUEFUSCA9IA0KK0NDX0FSQ0hfU1BFQyA9IC10UFBDNDA1RlM6dnh3b3JrczYzDQorTElCUEFUSCA9IA0KK0xJQlMgPSANCisNCitJREVfSU5DTFVERVMgPSAtSSQoV0lORF9CQVNFKS90YXJnZXQvaCAtSSQoV0lORF9CQVNFKS90YXJnZXQvaC93cm4vY29yZWlwIA0KKw0KK0lERV9MSUJSQVJJRVMgPSANCitlbmRpZg0KKw0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNDA1Z251KQ0KK1ZYX0NQVV9GQU1JTFkgPSBwcGMNCitDUFUgPSBQUEM0MDUNCitUT09MX0ZBTUlMWSA9IGdudQ0KK1RPT0wgPSBnbnUNCitUT09MX1BBVEggPSANCitDQ19BUkNIX1NQRUMgPSAtbWNwdT00MDUgLW1zdHJpY3QtYWxpZ24gLW1zb2Z0LWZsb2F0DQorTElCUEFUSCA9IA0KK0xJQlMgPSANCisNCitJREVfSU5DTFVERVMgPSAtSSQoV0lORF9CQVNFKS90YXJnZXQvaCAtSSQoV0lORF9CQVNFKS90YXJnZXQvaC93cm4vY29yZWlwIA0KKw0KK0lERV9MSUJSQVJJRVMgPSANCitlbmRpZg0KKw0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNDA1c2ZkaWFiKQ0KK1ZYX0NQVV9GQU1JTFkgPSBwcGMNCitDUFUgPSBQUEM0MDUNCitUT09MX0ZBTUlMWSA9IGRpYWINCitUT09MID0gc2ZkaWFiDQorVE9PTF9QQVRIID0gDQorQ0NfQVJDSF9TUEVDID0gLXRQUEM0MDVGUzp2eHdvcmtzNjMNCitMSUJQQVRIID0gDQorTElCUyA9IA0KKw0KK0lERV9JTkNMVURFUyA9IC1JJChXSU5EX0JBU0UpL3RhcmdldC9oIC1JJChXSU5EX0JBU0UpL3RhcmdldC9oL3dybi9jb3JlaXAgDQorDQorSURFX0xJQlJBUklFUyA9IA0KK2VuZGlmDQorDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM0MDVzZmdudSkNCitWWF9DUFVfRkFNSUxZID0gcHBjDQorQ1BVID0gUFBDNDA1DQorVE9PTF9GQU1JTFkgPSBnbnUNCitUT09MID0gc2ZnbnUNCitUT09MX1BBVEggPSANCitDQ19BUkNIX1NQRUMgPSAtbWNwdT00MDUgLW1zdHJpY3QtYWxpZ24gLW1zb2Z0LWZsb2F0DQorTElCUEFUSCA9IA0KK0xJQlMgPSANCisNCitJREVfSU5DTFVERVMgPSAtSSQoV0lORF9CQVNFKS90YXJnZXQvaCAtSSQoV0lORF9CQVNFKS90YXJnZXQvaC93cm4vY29yZWlwIA0KKw0KK0lERV9MSUJSQVJJRVMgPSANCitlbmRpZg0KKw0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNDQwZGlhYikNCitWWF9DUFVfRkFNSUxZID0gcHBjDQorQ1BVID0gUFBDNDQwDQorVE9PTF9GQU1JTFkgPSBkaWFiDQorVE9PTCA9IGRpYWINCitUT09MX1BBVEggPSANCitDQ19BUkNIX1NQRUMgPSAtdFBQQzQ0MEZIOnZ4d29ya3M2Mw0KK0xJQlBBVEggPSANCitMSUJTID0gDQorDQorSURFX0lOQ0xVREVTID0gLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2ggLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2gvd3JuL2NvcmVpcCANCisNCitJREVfTElCUkFSSUVTID0gDQorZW5kaWYNCisNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzQ0MGdudSkNCitWWF9DUFVfRkFNSUxZID0gcHBjDQorQ1BVID0gUFBDNDQwDQorVE9PTF9GQU1JTFkgPSBnbnUNCitUT09MID0gZ251DQorVE9PTF9QQVRIID0gDQorQ0NfQVJDSF9TUEVDID0gLW1jcHU9NDQwIC1tc3RyaWN0LWFsaWduIC1tc29mdC1mbG9hdA0KK0xJQlBBVEggPSANCitMSUJTID0gDQorDQorSURFX0lOQ0xVREVTID0gLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2ggLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2gvd3JuL2NvcmVpcCANCisNCitJREVfTElCUkFSSUVTID0gDQorZW5kaWYNCisNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzQ0MHNmZGlhYikNCitWWF9DUFVfRkFNSUxZID0gcHBjDQorQ1BVID0gUFBDNDQwDQorVE9PTF9GQU1JTFkgPSBkaWFiDQorVE9PTCA9IHNmZGlhYg0KK1RPT0xfUEFUSCA9IA0KK0NDX0FSQ0hfU1BFQyA9IC10UFBDNDQwRlM6dnh3b3JrczYzDQorTElCUEFUSCA9IA0KK0xJQlMgPSANCisNCitJREVfSU5DTFVERVMgPSAtSSQoV0lORF9CQVNFKS90YXJnZXQvaCAtSSQoV0lORF9CQVNFKS90YXJnZXQvaC93cm4vY29yZWlwIA0KKw0KK0lERV9MSUJSQVJJRVMgPSANCitlbmRpZg0KKw0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNDQwc2ZnbnUpDQorVlhfQ1BVX0ZBTUlMWSA9IHBwYw0KK0NQVSA9IFBQQzQ0MA0KK1RPT0xfRkFNSUxZID0gZ251DQorVE9PTCA9IHNmZ251DQorVE9PTF9QQVRIID0gDQorQ0NfQVJDSF9TUEVDID0gLW1jcHU9NDQwIC1tc3RyaWN0LWFsaWduIC1tc29mdC1mbG9hdA0KK0xJQlBBVEggPSANCitMSUJTID0gDQorDQorSURFX0lOQ0xVREVTID0gLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2ggLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2gvd3JuL2NvcmVpcCANCisNCitJREVfTElCUkFSSUVTID0gDQorZW5kaWYNCisNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzYwM2RpYWIpDQorVlhfQ1BVX0ZBTUlMWSA9IHBwYw0KK0NQVSA9IFBQQzYwMw0KK1RPT0xfRkFNSUxZID0gZGlhYg0KK1RPT0wgPSBkaWFiDQorVE9PTF9QQVRIID0gDQorQ0NfQVJDSF9TUEVDID0gLXRQUEM2MDNGSDp2eHdvcmtzNjMNCitMSUJQQVRIID0gDQorTElCUyA9IA0KKw0KK0lERV9JTkNMVURFUyA9IC1JJChXSU5EX0JBU0UpL3RhcmdldC9oIC1JJChXSU5EX0JBU0UpL3RhcmdldC9oL3dybi9jb3JlaXAgDQorDQorSURFX0xJQlJBUklFUyA9IA0KK2VuZGlmDQorDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM2MDNnbnUpDQorVlhfQ1BVX0ZBTUlMWSA9IHBwYw0KK0NQVSA9IFBQQzYwMw0KK1RPT0xfRkFNSUxZID0gZ251DQorVE9PTCA9IGdudQ0KK1RPT0xfUEFUSCA9IA0KK0NDX0FSQ0hfU1BFQyA9IC1tY3B1PTYwMyAtbXN0cmljdC1hbGlnbiAtbW5vLWltcGxpY2l0LWZwIC1tbG9uZ2NhbGwNCitMSUJQQVRIID0gDQorTElCUyA9IA0KKw0KK0lERV9JTkNMVURFUyA9IC1JLi4gLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2ggLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2gvd3JuL2NvcmVpcCANCisNCitJREVfTElCUkFSSUVTID0gDQorZW5kaWYNCisNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzYwNGRpYWIpDQorVlhfQ1BVX0ZBTUlMWSA9IHBwYw0KK0NQVSA9IFBQQzYwNA0KK1RPT0xfRkFNSUxZID0gZGlhYg0KK1RPT0wgPSBkaWFiDQorVE9PTF9QQVRIID0gDQorQ0NfQVJDSF9TUEVDID0gLXRQUEM2MDRGSDp2eHdvcmtzNjMNCitMSUJQQVRIID0gDQorTElCUyA9IA0KKw0KK0lERV9JTkNMVURFUyA9IC1JJChXSU5EX0JBU0UpL3RhcmdldC9oIC1JJChXSU5EX0JBU0UpL3RhcmdldC9oL3dybi9jb3JlaXAgDQorDQorSURFX0xJQlJBUklFUyA9IA0KK2VuZGlmDQorDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM2MDRnbnUpDQorVlhfQ1BVX0ZBTUlMWSA9IHBwYw0KK0NQVSA9IFBQQzYwNA0KK1RPT0xfRkFNSUxZID0gZ251DQorVE9PTCA9IGdudQ0KK1RPT0xfUEFUSCA9IA0KK0NDX0FSQ0hfU1BFQyA9IC1tY3B1PTYwNCAtbXN0cmljdC1hbGlnbiAtbW5vLWltcGxpY2l0LWZwDQorTElCUEFUSCA9IA0KK0xJQlMgPSANCisNCitJREVfSU5DTFVERVMgPSAtSSQoV0lORF9CQVNFKS90YXJnZXQvaCAtSSQoV0lORF9CQVNFKS90YXJnZXQvaC93cm4vY29yZWlwIA0KKw0KK0lERV9MSUJSQVJJRVMgPSANCitlbmRpZg0KKw0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDODVYWGRpYWIpDQorVlhfQ1BVX0ZBTUlMWSA9IHBwYw0KK0NQVSA9IFBQQzg1WFgNCitUT09MX0ZBTUlMWSA9IGRpYWINCitUT09MID0gZGlhYg0KK1RPT0xfUEFUSCA9IA0KK0NDX0FSQ0hfU1BFQyA9IC10UFBDRTUwMEZTOnZ4d29ya3M2Mw0KK0xJQlBBVEggPSANCitMSUJTID0gDQorDQorSURFX0lOQ0xVREVTID0gLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2ggLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2gvd3JuL2NvcmVpcCANCisNCitJREVfTElCUkFSSUVTID0gDQorZW5kaWYNCisNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzg1WFhnbnUpDQorVlhfQ1BVX0ZBTUlMWSA9IHBwYw0KK0NQVSA9IFBQQzg1WFgNCitUT09MX0ZBTUlMWSA9IGdudQ0KK1RPT0wgPSBnbnUNCitUT09MX1BBVEggPSANCitDQ19BUkNIX1NQRUMgPSAtbWNwdT04NTQwIC1tc3RyaWN0LWFsaWduIC1tc29mdC1mbG9hdCAtbWFiaT1uby1zcGUNCitMSUJQQVRIID0gDQorTElCUyA9IA0KKw0KK0lERV9JTkNMVURFUyA9IC1JJChXSU5EX0JBU0UpL3RhcmdldC9oIC1JJChXSU5EX0JBU0UpL3RhcmdldC9oL3dybi9jb3JlaXAgDQorDQorSURFX0xJQlJBUklFUyA9IA0KK2VuZGlmDQorDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM4NVhYc2ZkaWFiKQ0KK1ZYX0NQVV9GQU1JTFkgPSBwcGMNCitDUFUgPSBQUEM4NVhYDQorVE9PTF9GQU1JTFkgPSBkaWFiDQorVE9PTCA9IHNmZGlhYg0KK1RPT0xfUEFUSCA9IA0KK0NDX0FSQ0hfU1BFQyA9IC10UFBDRTUwMEZTOnZ4d29ya3M2Mw0KK0xJQlBBVEggPSANCitMSUJTID0gDQorDQorSURFX0lOQ0xVREVTID0gLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2ggLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2gvd3JuL2NvcmVpcCANCisNCitJREVfTElCUkFSSUVTID0gDQorZW5kaWYNCisNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzg1WFhzZmdudSkNCitWWF9DUFVfRkFNSUxZID0gcHBjDQorQ1BVID0gUFBDODVYWA0KK1RPT0xfRkFNSUxZID0gZ251DQorVE9PTCA9IHNmZ251DQorVE9PTF9QQVRIID0gDQorQ0NfQVJDSF9TUEVDID0gLW1jcHU9ODU0MCAtbXN0cmljdC1hbGlnbiAtbXNvZnQtZmxvYXQgLW1hYmk9bm8tc3BlDQorTElCUEFUSCA9IA0KK0xJQlMgPSANCisNCitJREVfSU5DTFVERVMgPSAtSSQoV0lORF9CQVNFKS90YXJnZXQvaCAtSSQoV0lORF9CQVNFKS90YXJnZXQvaC93cm4vY29yZWlwIA0KKw0KK0lERV9MSUJSQVJJRVMgPSANCitlbmRpZg0KKw0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDODYwc2ZkaWFiKQ0KK1ZYX0NQVV9GQU1JTFkgPSBwcGMNCitDUFUgPSBQUEM4NjANCitUT09MX0ZBTUlMWSA9IGRpYWINCitUT09MID0gc2ZkaWFiDQorVE9PTF9QQVRIID0gDQorQ0NfQVJDSF9TUEVDID0gLXRQUEM4NjBGUzp2eHdvcmtzNjMNCitMSUJQQVRIID0gDQorTElCUyA9IA0KKw0KK0lERV9JTkNMVURFUyA9IC1JJChXSU5EX0JBU0UpL3RhcmdldC9oIC1JJChXSU5EX0JBU0UpL3RhcmdldC9oL3dybi9jb3JlaXAgDQorDQorSURFX0xJQlJBUklFUyA9IA0KK2VuZGlmDQorDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM4NjBzZmdudSkNCitWWF9DUFVfRkFNSUxZID0gcHBjDQorQ1BVID0gUFBDODYwDQorVE9PTF9GQU1JTFkgPSBnbnUNCitUT09MID0gc2ZnbnUNCitUT09MX1BBVEggPSANCitDQ19BUkNIX1NQRUMgPSAtbWNwdT04NjAgLW1zdHJpY3QtYWxpZ24gLW1zb2Z0LWZsb2F0DQorTElCUEFUSCA9IA0KK0xJQlMgPSANCisNCitJREVfSU5DTFVERVMgPSAtSSQoV0lORF9CQVNFKS90YXJnZXQvaCAtSSQoV0lORF9CQVNFKS90YXJnZXQvaC93cm4vY29yZWlwIA0KKw0KK0lERV9MSUJSQVJJRVMgPSANCitlbmRpZg0KKw0KK2lmZXEgKCQoQlVJTERfU1BFQyksU0lNTElOVVhkaWFiKQ0KK1ZYX0NQVV9GQU1JTFkgPSBzaW1saW51eA0KK0NQVSA9IFNJTUxJTlVYDQorVE9PTF9GQU1JTFkgPSBkaWFiDQorVE9PTCA9IGRpYWINCitUT09MX1BBVEggPSANCitDQ19BUkNIX1NQRUMgPSAtdFg4NkxIOnZ4d29ya3M2Mw0KK0xJQlBBVEggPSANCitMSUJTID0gDQorDQorSURFX0lOQ0xVREVTID0gLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2ggLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2gvd3JuL2NvcmVpcCANCisNCitJREVfTElCUkFSSUVTID0gDQorZW5kaWYNCisNCitpZmVxICgkKEJVSUxEX1NQRUMpLFNJTUxJTlVYZ251KQ0KK1ZYX0NQVV9GQU1JTFkgPSBzaW1saW51eA0KK0NQVSA9IFNJTUxJTlVYDQorVE9PTF9GQU1JTFkgPSBnbnUNCitUT09MID0gZ251DQorVE9PTF9QQVRIID0gDQorQ0NfQVJDSF9TUEVDID0gLW10dW5lPWk0ODYgLW1hcmNoPWk0ODYNCitMSUJQQVRIID0gDQorTElCUyA9IA0KKw0KK0lERV9JTkNMVURFUyA9IC1JJChXSU5EX0JBU0UpL3RhcmdldC9oIC1JJChXSU5EX0JBU0UpL3RhcmdldC9oL3dybi9jb3JlaXAgDQorDQorSURFX0xJQlJBUklFUyA9IA0KK2VuZGlmDQorDQoraWZlcSAoJChCVUlMRF9TUEVDKSxTSU1OVGRpYWIpDQorVlhfQ1BVX0ZBTUlMWSA9IHNpbXBjDQorQ1BVID0gU0lNTlQNCitUT09MX0ZBTUlMWSA9IGRpYWINCitUT09MID0gZGlhYg0KK1RPT0xfUEFUSCA9IA0KK0NDX0FSQ0hfU1BFQyA9IC10WDg2TEg6dnh3b3JrczYzDQorTElCUEFUSCA9IA0KK0xJQlMgPSANCisNCitJREVfSU5DTFVERVMgPSAtSSQoV0lORF9CQVNFKS90YXJnZXQvaCAtSSQoV0lORF9CQVNFKS90YXJnZXQvaC93cm4vY29yZWlwIA0KKw0KK0lERV9MSUJSQVJJRVMgPSANCitlbmRpZg0KKw0KK2lmZXEgKCQoQlVJTERfU1BFQyksU0lNTlRnbnUpDQorVlhfQ1BVX0ZBTUlMWSA9IHNpbXBjDQorQ1BVID0gU0lNTlQNCitUT09MX0ZBTUlMWSA9IGdudQ0KK1RPT0wgPSBnbnUNCitUT09MX1BBVEggPSANCitDQ19BUkNIX1NQRUMgPSAtbXR1bmU9aTQ4NiAtbWFyY2g9aTQ4Ng0KK0xJQlBBVEggPSANCitMSUJTID0gDQorDQorSURFX0lOQ0xVREVTID0gLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2ggLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2gvd3JuL2NvcmVpcCANCisNCitJREVfTElCUkFSSUVTID0gDQorZW5kaWYNCisNCitpZmVxICgkKEJVSUxEX1NQRUMpLFNJTVNQQVJDU09MQVJJU2RpYWIpDQorVlhfQ1BVX0ZBTUlMWSA9IHNpbXNvDQorQ1BVID0gU0lNU1BBUkNTT0xBUklTDQorVE9PTF9GQU1JTFkgPSBkaWFiDQorVE9PTCA9IGRpYWINCitUT09MX1BBVEggPSANCitDQ19BUkNIX1NQRUMgPSAtdFNQQVJDRkg6dnh3b3JrczYzDQorTElCUEFUSCA9IA0KK0xJQlMgPSANCisNCitJREVfSU5DTFVERVMgPSAtSSQoV0lORF9CQVNFKS90YXJnZXQvaCAtSSQoV0lORF9CQVNFKS90YXJnZXQvaC93cm4vY29yZWlwIA0KKw0KK0lERV9MSUJSQVJJRVMgPSANCitlbmRpZg0KKw0KK2lmZXEgKCQoQlVJTERfU1BFQyksU0lNU1BBUkNTT0xBUklTZ251KQ0KK1ZYX0NQVV9GQU1JTFkgPSBzaW1zbw0KK0NQVSA9IFNJTVNQQVJDU09MQVJJUw0KK1RPT0xfRkFNSUxZID0gZ251DQorVE9PTCA9IGdudQ0KK1RPT0xfUEFUSCA9IA0KK0NDX0FSQ0hfU1BFQyA9IA0KK0xJQlBBVEggPSANCitMSUJTID0gDQorDQorSURFX0lOQ0xVREVTID0gLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2ggLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2gvd3JuL2NvcmVpcCANCisNCitJREVfTElCUkFSSUVTID0gDQorZW5kaWYNCisNCisNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzMyZGlhYikNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19DLUNvbXBpbGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19DLUNvbXBpbGVyID0gLVhPIC1Yc2l6ZS1vcHQNCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0NGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEMzMmdudSkNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19DLUNvbXBpbGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19DLUNvbXBpbGVyID0gLU8yIC1mc3RyZW5ndGgtcmVkdWNlIC1mbm8tYnVpbHRpbg0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuYw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpICAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0NGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEMzMnNmZGlhYikNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19DLUNvbXBpbGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19DLUNvbXBpbGVyID0gLVhPIC1Yc2l6ZS1vcHQNCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhzdHN3LXNsb3cgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0NGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEMzMnNmZ251KQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0MtQ29tcGlsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0MtQ29tcGlsZXIgPSAtTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluDQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgIC1XYWxsICAtTUQgLU1QICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzQwM2RpYWIpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQy1Db21waWxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQy1Db21waWxlciA9IC1YTyAtWHNpemUtb3B0DQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNDAzZ251KQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0MtQ29tcGlsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0MtQ29tcGlsZXIgPSAtTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluDQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgIC1XYWxsICAtTUQgLU1QICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzQwNWRpYWIpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQy1Db21waWxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQy1Db21waWxlciA9IC1YTyAtWHNpemUtb3B0DQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNDA1Z251KQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0MtQ29tcGlsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0MtQ29tcGlsZXIgPSAtTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluDQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgIC1XYWxsICAtTUQgLU1QICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzQwNXNmZGlhYikNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19DLUNvbXBpbGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19DLUNvbXBpbGVyID0gLVhPIC1Yc2l6ZS1vcHQNCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0NGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM0MDVzZmdudSkNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19DLUNvbXBpbGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19DLUNvbXBpbGVyID0gLU8yIC1mc3RyZW5ndGgtcmVkdWNlIC1mbm8tYnVpbHRpbg0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuYw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpICAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0NGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM0NDBkaWFiKQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0MtQ29tcGlsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0MtQ29tcGlsZXIgPSAtWE8gLVhzaXplLW9wdA0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuYw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MtQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzQ0MGdudSkNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19DLUNvbXBpbGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19DLUNvbXBpbGVyID0gLU8yIC1mc3RyZW5ndGgtcmVkdWNlIC1mbm8tYnVpbHRpbg0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuYw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpICAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0NGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM0NDBzZmRpYWIpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQy1Db21waWxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQy1Db21waWxlciA9IC1YTyAtWHNpemUtb3B0DQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNDQwc2ZnbnUpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQy1Db21waWxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQy1Db21waWxlciA9IC1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4NCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MtQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNjAzZGlhYikNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19DLUNvbXBpbGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19DLUNvbXBpbGVyID0gLVhPIC1Yc2l6ZS1vcHQNCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0NGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM2MDNnbnUpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQy1Db21waWxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQy1Db21waWxlciA9IC1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4NCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MtQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNjA0ZGlhYikNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19DLUNvbXBpbGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19DLUNvbXBpbGVyID0gLVhPIC1Yc2l6ZS1vcHQNCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0NGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM2MDRnbnUpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQy1Db21waWxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQy1Db21waWxlciA9IC1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4NCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MtQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDODVYWGRpYWIpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQy1Db21waWxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQy1Db21waWxlciA9IC1YTyAtWHNpemUtb3B0DQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDODVYWGdudSkNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19DLUNvbXBpbGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19DLUNvbXBpbGVyID0gLU8yIC1mc3RyZW5ndGgtcmVkdWNlIC1mbm8tYnVpbHRpbg0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuYw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpICAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0NGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM4NVhYc2ZkaWFiKQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0MtQ29tcGlsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0MtQ29tcGlsZXIgPSAtWE8gLVhzaXplLW9wdA0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuYw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MtQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzg1WFhzZmdudSkNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19DLUNvbXBpbGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19DLUNvbXBpbGVyID0gLU8yIC1mc3RyZW5ndGgtcmVkdWNlIC1mbm8tYnVpbHRpbg0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuYw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpICAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0NGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM4NjBzZmRpYWIpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQy1Db21waWxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQy1Db21waWxlciA9IC1YTyAtWHNpemUtb3B0DQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDODYwc2ZnbnUpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQy1Db21waWxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQy1Db21waWxlciA9IC1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4NCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MtQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksU0lNTElOVVhkaWFiKQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0MtQ29tcGlsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0MtQ29tcGlsZXIgPSAtWE8gLVhzaXplLW9wdA0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuYw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MtQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFNJTUxJTlVYZ251KQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0MtQ29tcGlsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0MtQ29tcGlsZXIgPSAtTzIgLW5vc3RkbGliIC1mbm8tYnVpbHRpbiAtZm5vLWRlZmVyLXBvcA0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuYw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BlbnRpdW0gJChERUJVR0ZMQUdTX0MtQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksU0lNTlRkaWFiKQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0MtQ29tcGlsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0MtQ29tcGlsZXIgPSAtWE8gLVhzaXplLW9wdA0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuYw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MtQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFNJTU5UZ251KQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0MtQ29tcGlsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0MtQ29tcGlsZXIgPSAtTzIgLW5vc3RkbGliIC1mbm8tYnVpbHRpbiAtZm5vLWRlZmVyLXBvcA0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuYw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BlbnRpdW0gJChERUJVR0ZMQUdTX0MtQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksU0lNU1BBUkNTT0xBUklTZGlhYikNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19DLUNvbXBpbGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19DLUNvbXBpbGVyID0gLVhPIC1Yc2l6ZS1vcHQNCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0NGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxTSU1TUEFSQ1NPTEFSSVNnbnUpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQy1Db21waWxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQy1Db21waWxlciA9IC1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4NCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NzcGFyYyAkKERFQlVHRkxBR1NfQy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpICAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0NGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEMzMmRpYWIpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQysrLUNvbXBpbGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19DKystQ29tcGlsZXIgPSAtWE8gLVhzaXplLW9wdA0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY3BwDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuQw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmN4eA0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmNjDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzMyZ251KQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0MrKy1Db21waWxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQysrLUNvbXBpbGVyID0gLU8yIC1mc3RyZW5ndGgtcmVkdWNlIC1mbm8tYnVpbHRpbg0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY3BwDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuQw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmN4eA0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmNjDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzMyc2ZkaWFiKQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0MrKy1Db21waWxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQysrLUNvbXBpbGVyID0gLVhPIC1Yc2l6ZS1vcHQNCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmNwcA0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1Yc3Rzdy1zbG93IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLkMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWHN0c3ctc2xvdyAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jeHgNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWHN0c3ctc2xvdyAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jYw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1Yc3Rzdy1zbG93IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEMzMnNmZ251KQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0MrKy1Db21waWxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQysrLUNvbXBpbGVyID0gLU8yIC1mc3RyZW5ndGgtcmVkdWNlIC1mbm8tYnVpbHRpbg0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY3BwDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuQw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmN4eA0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmNjDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzQwM2RpYWIpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQysrLUNvbXBpbGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19DKystQ29tcGlsZXIgPSAtWE8gLVhzaXplLW9wdA0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY3BwDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuQw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmN4eA0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmNjDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzQwM2dudSkNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19DKystQ29tcGlsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0MrKy1Db21waWxlciA9IC1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4NCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmNwcA0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLkMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jeHgNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jYw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM0MDVkaWFiKQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0MrKy1Db21waWxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQysrLUNvbXBpbGVyID0gLVhPIC1Yc2l6ZS1vcHQNCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmNwcA0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLkMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jeHgNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jYw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM0MDVnbnUpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQysrLUNvbXBpbGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19DKystQ29tcGlsZXIgPSAtTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluDQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jcHANCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5DDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY3h4DQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY2MNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNDA1c2ZkaWFiKQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0MrKy1Db21waWxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQysrLUNvbXBpbGVyID0gLVhPIC1Yc2l6ZS1vcHQNCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmNwcA0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLkMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jeHgNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jYw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM0MDVzZmdudSkNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19DKystQ29tcGlsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0MrKy1Db21waWxlciA9IC1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4NCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmNwcA0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLkMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jeHgNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jYw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM0NDBkaWFiKQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0MrKy1Db21waWxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQysrLUNvbXBpbGVyID0gLVhPIC1Yc2l6ZS1vcHQNCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmNwcA0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLkMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jeHgNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jYw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM0NDBnbnUpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQysrLUNvbXBpbGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19DKystQ29tcGlsZXIgPSAtTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluDQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jcHANCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5DDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY3h4DQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY2MNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNDQwc2ZkaWFiKQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0MrKy1Db21waWxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQysrLUNvbXBpbGVyID0gLVhPIC1Yc2l6ZS1vcHQNCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmNwcA0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLkMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jeHgNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jYw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM0NDBzZmdudSkNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19DKystQ29tcGlsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0MrKy1Db21waWxlciA9IC1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4NCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmNwcA0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLkMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jeHgNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jYw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM2MDNkaWFiKQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0MrKy1Db21waWxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQysrLUNvbXBpbGVyID0gLVhPIC1Yc2l6ZS1vcHQNCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmNwcA0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLkMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jeHgNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jYw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM2MDNnbnUpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQysrLUNvbXBpbGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19DKystQ29tcGlsZXIgPSAtTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluDQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jcHANCisJJChUUkFDRV9GTEFHKSAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgLUQnU1ZOX1JFVj0iJChzaGVsbCBzdm52ZXJzaW9uIC1uIC4uKSInICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuQw0KKwkkKFRSQUNFX0ZMQUcpICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAtRCdTVk5fUkVWPSIkKHNoZWxsIHN2bnZlcnNpb24gLW4gLi4pIicgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jeHgNCisJJChUUkFDRV9GTEFHKSAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgLUQnU1ZOX1JFVj0iJChzaGVsbCBzdm52ZXJzaW9uIC1uIC4uKSInICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY2MNCisJJChUUkFDRV9GTEFHKSAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgLUQnU1ZOX1JFVj0iJChzaGVsbCBzdm52ZXJzaW9uIC1uIC4uKSInICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzYwNGRpYWIpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQysrLUNvbXBpbGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19DKystQ29tcGlsZXIgPSAtWE8gLVhzaXplLW9wdA0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY3BwDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuQw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmN4eA0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmNjDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzYwNGdudSkNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19DKystQ29tcGlsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0MrKy1Db21waWxlciA9IC1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4NCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmNwcA0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLkMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jeHgNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jYw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM4NVhYZGlhYikNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19DKystQ29tcGlsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0MrKy1Db21waWxlciA9IC1YTyAtWHNpemUtb3B0DQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jcHANCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5DDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY3h4DQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY2MNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDODVYWGdudSkNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19DKystQ29tcGlsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0MrKy1Db21waWxlciA9IC1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4NCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmNwcA0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLkMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jeHgNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jYw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM4NVhYc2ZkaWFiKQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0MrKy1Db21waWxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQysrLUNvbXBpbGVyID0gLVhPIC1Yc2l6ZS1vcHQNCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmNwcA0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLkMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jeHgNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jYw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM4NVhYc2ZnbnUpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQysrLUNvbXBpbGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19DKystQ29tcGlsZXIgPSAtTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluDQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jcHANCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5DDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY3h4DQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY2MNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDODYwc2ZkaWFiKQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0MrKy1Db21waWxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQysrLUNvbXBpbGVyID0gLVhPIC1Yc2l6ZS1vcHQNCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmNwcA0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLkMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jeHgNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jYw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM4NjBzZmdudSkNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19DKystQ29tcGlsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0MrKy1Db21waWxlciA9IC1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4NCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmNwcA0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLkMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jeHgNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jYw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxTSU1MSU5VWGRpYWIpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQysrLUNvbXBpbGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19DKystQ29tcGlsZXIgPSAtWE8gLVhzaXplLW9wdA0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY3BwDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuQw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmN4eA0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmNjDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFNJTUxJTlVYZ251KQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0MrKy1Db21waWxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQysrLUNvbXBpbGVyID0gLU8yIC1ub3N0ZGxpYiAtZm5vLWJ1aWx0aW4gLWZuby1kZWZlci1wb3ANCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmNwcA0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BlbnRpdW0gJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5DDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcGVudGl1bSAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmN4eA0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BlbnRpdW0gJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jYw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BlbnRpdW0gJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksU0lNTlRkaWFiKQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0MrKy1Db21waWxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQysrLUNvbXBpbGVyID0gLVhPIC1Yc2l6ZS1vcHQNCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmNwcA0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLkMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jeHgNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jYw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxTSU1OVGdudSkNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19DKystQ29tcGlsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0MrKy1Db21waWxlciA9IC1PMiAtbm9zdGRsaWIgLWZuby1idWlsdGluIC1mbm8tZGVmZXItcG9wDQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jcHANCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwZW50aXVtICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuQw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BlbnRpdW0gJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jeHgNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwZW50aXVtICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY2MNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwZW50aXVtICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFNJTVNQQVJDU09MQVJJU2RpYWIpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQysrLUNvbXBpbGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19DKystQ29tcGlsZXIgPSAtWE8gLVhzaXplLW9wdA0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY3BwDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuQw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmN4eA0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmNjDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFNJTVNQQVJDU09MQVJJU2dudSkNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19DKystQ29tcGlsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0MrKy1Db21waWxlciA9IC1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4NCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmNwcA0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3NwYXJjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuQw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3NwYXJjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY3h4DQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjc3BhcmMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jYw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3NwYXJjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzMyZGlhYikNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19Bc3NlbWJsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0Fzc2VtYmxlciA9IC1YTyAtWHNpemUtb3B0DQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5zDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQXNzZW1ibGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhwcmVwcm9jZXNzLWFzc2VtYmx5IC1YY3BwLW5vLXNwYWNlICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDMzJnbnUpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQXNzZW1ibGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19Bc3NlbWJsZXIgPSAtTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluDQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5zDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19Bc3NlbWJsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAgIC14YXNzZW1ibGVyLXdpdGgtY3BwIC1NRCAtTVAgJChBRERFRF9DRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDMzJzZmRpYWIpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQXNzZW1ibGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19Bc3NlbWJsZXIgPSAtWE8gLVhzaXplLW9wdA0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUucw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0Fzc2VtYmxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1Yc3Rzdy1zbG93IC1YcHJlcHJvY2Vzcy1hc3NlbWJseSAtWGNwcC1uby1zcGFjZSAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzMyc2ZnbnUpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQXNzZW1ibGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19Bc3NlbWJsZXIgPSAtTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluDQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5zDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19Bc3NlbWJsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAgIC14YXNzZW1ibGVyLXdpdGgtY3BwIC1NRCAtTVAgJChBRERFRF9DRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNDAzZGlhYikNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19Bc3NlbWJsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0Fzc2VtYmxlciA9IC1YTyAtWHNpemUtb3B0DQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5zDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQXNzZW1ibGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhwcmVwcm9jZXNzLWFzc2VtYmx5IC1YY3BwLW5vLXNwYWNlICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNDAzZ251KQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0Fzc2VtYmxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQXNzZW1ibGVyID0gLU8yIC1mc3RyZW5ndGgtcmVkdWNlIC1mbm8tYnVpbHRpbg0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUucw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQXNzZW1ibGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgICAteGFzc2VtYmxlci13aXRoLWNwcCAtTUQgLU1QICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzQwNWRpYWIpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQXNzZW1ibGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19Bc3NlbWJsZXIgPSAtWE8gLVhzaXplLW9wdA0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUucw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0Fzc2VtYmxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YcHJlcHJvY2Vzcy1hc3NlbWJseSAtWGNwcC1uby1zcGFjZSAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzQwNWdudSkNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19Bc3NlbWJsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0Fzc2VtYmxlciA9IC1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4NCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLnMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0Fzc2VtYmxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpICAgLXhhc3NlbWJsZXItd2l0aC1jcHAgLU1EIC1NUCAkKEFEREVEX0NGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM0MDVzZmRpYWIpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQXNzZW1ibGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19Bc3NlbWJsZXIgPSAtWE8gLVhzaXplLW9wdA0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUucw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0Fzc2VtYmxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YcHJlcHJvY2Vzcy1hc3NlbWJseSAtWGNwcC1uby1zcGFjZSAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzQwNXNmZ251KQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0Fzc2VtYmxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQXNzZW1ibGVyID0gLU8yIC1mc3RyZW5ndGgtcmVkdWNlIC1mbm8tYnVpbHRpbg0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUucw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQXNzZW1ibGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgICAteGFzc2VtYmxlci13aXRoLWNwcCAtTUQgLU1QICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzQ0MGRpYWIpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQXNzZW1ibGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19Bc3NlbWJsZXIgPSAtWE8gLVhzaXplLW9wdA0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUucw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0Fzc2VtYmxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YcHJlcHJvY2Vzcy1hc3NlbWJseSAtWGNwcC1uby1zcGFjZSAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzQ0MGdudSkNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19Bc3NlbWJsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0Fzc2VtYmxlciA9IC1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4NCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLnMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0Fzc2VtYmxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpICAgLXhhc3NlbWJsZXItd2l0aC1jcHAgLU1EIC1NUCAkKEFEREVEX0NGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM0NDBzZmRpYWIpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQXNzZW1ibGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19Bc3NlbWJsZXIgPSAtWE8gLVhzaXplLW9wdA0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUucw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0Fzc2VtYmxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YcHJlcHJvY2Vzcy1hc3NlbWJseSAtWGNwcC1uby1zcGFjZSAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzQ0MHNmZ251KQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0Fzc2VtYmxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQXNzZW1ibGVyID0gLU8yIC1mc3RyZW5ndGgtcmVkdWNlIC1mbm8tYnVpbHRpbg0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUucw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQXNzZW1ibGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgICAteGFzc2VtYmxlci13aXRoLWNwcCAtTUQgLU1QICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzYwM2RpYWIpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQXNzZW1ibGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19Bc3NlbWJsZXIgPSAtWE8gLVhzaXplLW9wdA0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUucw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0Fzc2VtYmxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YcHJlcHJvY2Vzcy1hc3NlbWJseSAtWGNwcC1uby1zcGFjZSAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzYwM2dudSkNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19Bc3NlbWJsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0Fzc2VtYmxlciA9IC1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4NCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLnMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0Fzc2VtYmxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpICAgLXhhc3NlbWJsZXItd2l0aC1jcHAgLU1EIC1NUCAkKEFEREVEX0NGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM2MDRkaWFiKQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0Fzc2VtYmxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQXNzZW1ibGVyID0gLVhPIC1Yc2l6ZS1vcHQNCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLnMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19Bc3NlbWJsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWHByZXByb2Nlc3MtYXNzZW1ibHkgLVhjcHAtbm8tc3BhY2UgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0NGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM2MDRnbnUpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQXNzZW1ibGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19Bc3NlbWJsZXIgPSAtTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluDQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5zDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19Bc3NlbWJsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAgIC14YXNzZW1ibGVyLXdpdGgtY3BwIC1NRCAtTVAgJChBRERFRF9DRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDODVYWGRpYWIpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQXNzZW1ibGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19Bc3NlbWJsZXIgPSAtWE8gLVhzaXplLW9wdA0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUucw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0Fzc2VtYmxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YcHJlcHJvY2Vzcy1hc3NlbWJseSAtWGNwcC1uby1zcGFjZSAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzg1WFhnbnUpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQXNzZW1ibGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19Bc3NlbWJsZXIgPSAtTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluDQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5zDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19Bc3NlbWJsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAgIC14YXNzZW1ibGVyLXdpdGgtY3BwIC1NRCAtTVAgJChBRERFRF9DRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDODVYWHNmZGlhYikNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19Bc3NlbWJsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0Fzc2VtYmxlciA9IC1YTyAtWHNpemUtb3B0DQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5zDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQXNzZW1ibGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhwcmVwcm9jZXNzLWFzc2VtYmx5IC1YY3BwLW5vLXNwYWNlICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDODVYWHNmZ251KQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0Fzc2VtYmxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQXNzZW1ibGVyID0gLU8yIC1mc3RyZW5ndGgtcmVkdWNlIC1mbm8tYnVpbHRpbg0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUucw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQXNzZW1ibGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgICAteGFzc2VtYmxlci13aXRoLWNwcCAtTUQgLU1QICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzg2MHNmZGlhYikNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19Bc3NlbWJsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0Fzc2VtYmxlciA9IC1YTyAtWHNpemUtb3B0DQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5zDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQXNzZW1ibGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhwcmVwcm9jZXNzLWFzc2VtYmx5IC1YY3BwLW5vLXNwYWNlICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDODYwc2ZnbnUpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQXNzZW1ibGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19Bc3NlbWJsZXIgPSAtTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluDQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5zDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19Bc3NlbWJsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAgIC14YXNzZW1ibGVyLXdpdGgtY3BwIC1NRCAtTVAgJChBRERFRF9DRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksU0lNTElOVVhkaWFiKQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0Fzc2VtYmxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQXNzZW1ibGVyID0gLVhPIC1Yc2l6ZS1vcHQNCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLnMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19Bc3NlbWJsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWHByZXByb2Nlc3MtYXNzZW1ibHkgLVhjcHAtbm8tc3BhY2UgLVdhLC1YbW5lbS1taXQgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFNJTUxJTlVYZ251KQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0Fzc2VtYmxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQXNzZW1ibGVyID0gLU8yIC1ub3N0ZGxpYiAtZm5vLWJ1aWx0aW4gLWZuby1kZWZlci1wb3ANCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLnMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwZW50aXVtICQoREVCVUdGTEFHU19Bc3NlbWJsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAgIC14YXNzZW1ibGVyLXdpdGgtY3BwIC1NRCAtTVAgJChBRERFRF9DRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksU0lNTlRkaWFiKQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0Fzc2VtYmxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQXNzZW1ibGVyID0gLVhPIC1Yc2l6ZS1vcHQNCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLnMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19Bc3NlbWJsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWHByZXByb2Nlc3MtYXNzZW1ibHkgLVhjcHAtbm8tc3BhY2UgLVdhLC1YbW5lbS1taXQgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFNJTU5UZ251KQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0Fzc2VtYmxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQXNzZW1ibGVyID0gLU8yIC1ub3N0ZGxpYiAtZm5vLWJ1aWx0aW4gLWZuby1kZWZlci1wb3ANCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLnMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwZW50aXVtICQoREVCVUdGTEFHU19Bc3NlbWJsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAgIC14YXNzZW1ibGVyLXdpdGgtY3BwIC1NRCAtTVAgJChBRERFRF9DRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksU0lNU1BBUkNTT0xBUklTZGlhYikNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19Bc3NlbWJsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0Fzc2VtYmxlciA9IC1YTyAtWHNpemUtb3B0DQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5zDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQXNzZW1ibGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhwcmVwcm9jZXNzLWFzc2VtYmx5IC1YY3BwLW5vLXNwYWNlICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksU0lNU1BBUkNTT0xBUklTZ251KQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0Fzc2VtYmxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQXNzZW1ibGVyID0gLU8yIC1mc3RyZW5ndGgtcmVkdWNlIC1mbm8tYnVpbHRpbg0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUucw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3NwYXJjICQoREVCVUdGTEFHU19Bc3NlbWJsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAgIC14YXNzZW1ibGVyLXdpdGgtY3BwIC1NRCAtTVAgJChBRERFRF9DRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KKw0KKw0KKw0KKw0KKw0KKy1pbmNsdWRlICQoUFJKX1JPT1RfRElSKS8qLm1ha2VmaWxlDQorDQorLWluY2x1ZGUgKi5tYWtlZmlsZQ0KKw0KK21haW5fYWxsIDogZXh0ZXJuYWxfYnVpbGQgJChQUk9KRUNUX1RBUkdFVFMpDQorCUBlY2hvICJtYWtlOiBidWlsdCB0YXJnZXRzIG9mIGBwd2RgIg0KKw0KKyMgZW50cnkgcG9pbnQgZm9yIGV4dGVuZGluZyB0aGUgYnVpbGQNCitleHRlcm5hbF9idWlsZCA6Og0KKwlAZWNobyAiIg0KKw0KKyMgbWFpbiBlbnRyeSBwb2ludCBmb3IgcHJlIHByb2Nlc3NpbmcgcHJpb3IgdG8gdGhlIGJ1aWxkDQorcHJlX2J1aWxkIDo6ICQoUFJFX0JVSUxEX1NURVApIGdlbmVyYXRlX3NvdXJjZXMNCisJQGVjaG8gIiINCisNCisjIGVudHJ5IHBvaW50IGZvciBnZW5lcmF0aW5nIHNvdXJjZXMgcHJpb3IgdG8gdGhlIGJ1aWxkDQorZ2VuZXJhdGVfc291cmNlcyA6Og0KKwlAZWNobyAiIg0KKw0KKyMgbWFpbiBlbnRyeSBwb2ludCBmb3IgcG9zdCBwcm9jZXNzaW5nIGFmdGVyIHRoZSBidWlsZA0KK3Bvc3RfYnVpbGQgOjogJChQT1NUX0JVSUxEX1NURVApIGRlcGxveV9vdXRwdXQNCisJQGVjaG8gIiINCisNCisjIGVudHJ5IHBvaW50IGZvciBkZXBsb3lpbmcgb3V0cHV0IGFmdGVyIHRoZSBidWlsZA0KK2RlcGxveV9vdXRwdXQgOjoNCisJQGVjaG8gIiINCisNCitjbGVhbiA6OiBleHRlcm5hbF9jbGVhbiAkKENMRUFOX1NURVApIF9jbGVhbg0KKw0KKyMgZW50cnkgcG9pbnQgZm9yIGV4dGVuZGluZyB0aGUgYnVpbGQgY2xlYW4NCitleHRlcm5hbF9jbGVhbiA6Og0KKwlAZWNobyAiIg0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0NoaXBPYmplY3QvTmlGcGdhLmggYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9DaGlwT2JqZWN0L05pRnBnYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlYWM3YzkKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9DaGlwT2JqZWN0L05pRnBnYS5oCkBAIC0wLDAgKzEsMjMxMSBAQAorLyoNCisgKiBGUEdBIEludGVyZmFjZSBDIEFQSSAyLjAgaGVhZGVyIGZpbGUuDQorICoNCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEsDQorICogTmF0aW9uYWwgSW5zdHJ1bWVudHMgQ29ycG9yYXRpb24uDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4NCisgKi8NCisNCisjaWZuZGVmIF9fTmlGcGdhX2hfXw0KKyNkZWZpbmUgX19OaUZwZ2FfaF9fDQorDQorLyoNCisgKiBEZXRlcm1pbmUgcGxhdGZvcm0gZGV0YWlscy4NCisgKi8NCisjaWYgZGVmaW5lZChfTV9JWDg2KSBcDQorIHx8IGRlZmluZWQoX01fWDY0KSBcDQorIHx8IGRlZmluZWQoaTM4NikgXA0KKyB8fCBkZWZpbmVkKF9faTM4Nl9fKSBcDQorIHx8IGRlZmluZWQoX19hbWQ2NF9fKSBcDQorIHx8IGRlZmluZWQoX19hbWQ2NCkgXA0KKyB8fCBkZWZpbmVkKF9feDg2XzY0X18pIFwNCisgfHwgZGVmaW5lZChfX3g4Nl82NCkgXA0KKyB8fCBkZWZpbmVkKF9faTM4NikgXA0KKyB8fCBkZWZpbmVkKF9YODZfKSBcDQorIHx8IGRlZmluZWQoX19USFdfSU5URUxfXykgXA0KKyB8fCBkZWZpbmVkKF9fSTg2X18pIFwNCisgfHwgZGVmaW5lZChfX0lOVEVMX18pIFwNCisgfHwgZGVmaW5lZChfX1g4Nl9fKSBcDQorIHx8IGRlZmluZWQoX18zODZfXykgXA0KKyB8fCBkZWZpbmVkKF9fSTg2X18pIFwNCisgfHwgZGVmaW5lZChNX0kzODYpIFwNCisgfHwgZGVmaW5lZChNX0k4NikgXA0KKyB8fCBkZWZpbmVkKF9NX0kzODYpIFwNCisgfHwgZGVmaW5lZChfTV9JODYpDQorICAgI2lmIGRlZmluZWQoX1dJTjMyKSBcDQorICAgIHx8IGRlZmluZWQoX1dJTjY0KSBcDQorICAgIHx8IGRlZmluZWQoX19XSU4zMl9fKSBcDQorICAgIHx8IGRlZmluZWQoX19UT1NfV0lOX18pIFwNCisgICAgfHwgZGVmaW5lZChfX1dJTkRPV1NfXykgXA0KKyAgICB8fCBkZWZpbmVkKF9XSU5ET1dTKSBcDQorICAgIHx8IGRlZmluZWQoX19XSU5ET1dTXzM4Nl9fKSBcDQorICAgIHx8IGRlZmluZWQoX19DWUdXSU5fXykNCisgICAgICAvKiBFaXRoZXIgV2luZG93cyBvciBQaGFyIExhcCBFVFMuICovDQorICAgICAgI2RlZmluZSBOaUZwZ2FfV2luZG93cyAxDQorICAgI2VsaWYgZGVmaW5lZChfX2xpbnV4KSBcDQorICAgICAgfHwgZGVmaW5lZChfX2xpbnV4X18pIFwNCisgICAgICB8fCBkZWZpbmVkKF9fZ251X2xpbnV4X18pIFwNCisgICAgICB8fCBkZWZpbmVkKGxpbnV4KQ0KKyAgICAgICNkZWZpbmUgTmlGcGdhX0xpbnV4IDENCisgICAjZWxzZQ0KKyAgICAgICNlcnJvciBVbnN1cHBvcnRlZCBPUy4NCisgICAjZW5kaWYNCisjZWxpZiBkZWZpbmVkKF9fcG93ZXJwYykgXA0KKyAgIHx8IGRlZmluZWQoX19wb3dlcnBjX18pIFwNCisgICB8fCBkZWZpbmVkKF9fUE9XRVJQQ19fKSBcDQorICAgfHwgZGVmaW5lZChfX3BwY19fKSBcDQorICAgfHwgZGVmaW5lZChfX1BQQykgXA0KKyAgIHx8IGRlZmluZWQoX01fUFBDKSBcDQorICAgfHwgZGVmaW5lZChfQVJDSF9QUEMpIFwNCisgICB8fCBkZWZpbmVkKF9fUFBDX18pIFwNCisgICB8fCBkZWZpbmVkKF9fcHBjKQ0KKyAgICNpZiBkZWZpbmVkKF9fdnh3b3JrcykNCisgICAgICAjZGVmaW5lIE5pRnBnYV9WeFdvcmtzIDENCisgICAjZWxzZQ0KKyAgICAgICNlcnJvciBVbnN1cHBvcnRlZCBPUy4NCisgICAjZW5kaWYNCisjZWxzZQ0KKyAgICNlcnJvciBVbnN1cHBvcnRlZCBhcmNoaXRlY3R1cmUuDQorI2VuZGlmDQorDQorLyoNCisgKiBEZXRlcm1pbmUgY29tcGlsZXIuDQorICovDQorI2lmIGRlZmluZWQoX01TQ19WRVIpDQorICAgI2RlZmluZSBOaUZwZ2FfTXN2YyAxDQorI2VsaWYgZGVmaW5lZChfX0dOVUNfXykNCisgICAjZGVmaW5lIE5pRnBnYV9HY2MgMQ0KKyNlbGlmIGRlZmluZWQoX0NWSV8pICYmICFkZWZpbmVkKF9UUENfKQ0KKyAgICNkZWZpbmUgTmlGcGdhX0N2aSAxDQorICAgLyogRW5hYmxlcyBDVkkgTGlicmFyeSBQcm90ZWN0aW9uIEVycm9ycy4gKi8NCisgICAjcHJhZ21hIEVuYWJsZUxpYnJhcnlSdW50aW1lQ2hlY2tpbmcNCisjZWxzZQ0KKyAgIC8qIFVua25vd24gY29tcGlsZXIuICovDQorI2VuZGlmDQorDQorLyoNCisgKiBEZXRlcm1pbmUgY29tcGxpYW5jZSB3aXRoIGRpZmZlcmVudCBDL0MrKyBsYW5ndWFnZSBzdGFuZGFyZHMuDQorICovDQorI2lmIGRlZmluZWQoX19jcGx1c3BsdXMpDQorICAgI2RlZmluZSBOaUZwZ2FfQ3BwIDENCisgICAjaWYgX19jcGx1c3BsdXMgPj0gMTk5NzA3TA0KKyAgICAgICNkZWZpbmUgTmlGcGdhX0NwcDk4IDENCisgICAjZW5kaWYNCisjZW5kaWYNCisjaWYgZGVmaW5lZChfX1NURENfXykNCisgICAjZGVmaW5lIE5pRnBnYV9DODkgMQ0KKyAgICNpZiBkZWZpbmVkKF9fU1REQ19WRVJTSU9OX18pDQorICAgICAgI2RlZmluZSBOaUZwZ2FfQzkwIDENCisgICAgICAjaWYgX19TVERDX1ZFUlNJT05fXyA+PSAxOTk0MDlMDQorICAgICAgICAgI2RlZmluZSBOaUZwZ2FfQzk0IDENCisgICAgICAgICAjaWYgX19TVERDX1ZFUlNJT05fXyA+PSAxOTk5MDFMDQorICAgICAgICAgICAgI2RlZmluZSBOaUZwZ2FfQzk5IDENCisgICAgICAgICAjZW5kaWYNCisgICAgICAjZW5kaWYNCisgICAjZW5kaWYNCisjZW5kaWYNCisNCisvKg0KKyAqIERldGVybWluZSBhYmlsaXR5IHRvIGlubGluZSBmdW5jdGlvbnMuDQorICovDQorI2lmIE5pRnBnYV9DcHAgfHwgTmlGcGdhX0M5OQ0KKyAgIC8qIFRoZSBpbmxpbmUga2V5d29yZCBleGlzdHMgaW4gQysrIGFuZCBDOTkuICovDQorICAgI2RlZmluZSBOaUZwZ2FfSW5saW5lIGlubGluZQ0KKyNlbGlmIE5pRnBnYV9Nc3ZjDQorICAgLyogVmlzdWFsIEMrKyAoYXQgbGVhc3Qgc2luY2UgNi4wKSBhbHNvIHN1cHBvcnRzIGFuIGFsdGVybmF0ZSBrZXl3b3JkLiAqLw0KKyAgICNkZWZpbmUgTmlGcGdhX0lubGluZSBfX2lubGluZQ0KKyNlbGlmIE5pRnBnYV9HY2MNCisgICAvKiBHQ0MgKGF0IGxlYXN0IHNpbmNlIDIuOTUuMikgYWxzbyBzdXBwb3J0cyBhbiBhbHRlcm5hdGUga2V5d29yZC4gKi8NCisgICAjZGVmaW5lIE5pRnBnYV9JbmxpbmUgX19pbmxpbmVfXw0KKyNlbGlmICFkZWZpbmVkKE5pRnBnYV9JbmxpbmUpDQorICAgLyoNCisgICAgKiBEaXNhYmxlIGlubGluaW5nIGlmIGlubGluZSBzdXBwb3J0IGlzIHVua25vd24uIFRvIG1hbnVhbGx5IGVuYWJsZQ0KKyAgICAqIGlubGluaW5nLCAjZGVmaW5lIHRoZSBmb2xsb3dpbmcgbWFjcm8gYmVmb3JlICNpbmNsdWRpbmcgTmlGcGdhLmg6DQorICAgICoNCisgICAgKiAgICAjZGVmaW5lIE5pRnBnYV9JbmxpbmUgaW5saW5lDQorICAgICovDQorICAgI2RlZmluZSBOaUZwZ2FfSW5saW5lDQorI2VuZGlmDQorDQorLyoNCisgKiBEZWZpbmUgZXhhY3Qtd2lkdGggaW50ZWdlciB0eXBlcywgaWYgdGhleSBoYXZlIG5vdCBhbHJlYWR5IGJlZW4gZGVmaW5lZC4NCisgKi8NCisjaWYgTmlGcGdhX0V4YWN0V2lkdGhJbnRlZ2VyVHlwZXNEZWZpbmVkIFwNCisgfHwgZGVmaW5lZChfU1RESU5UKSBcDQorIHx8IGRlZmluZWQoX1NURElOVF9IKSBcDQorIHx8IGRlZmluZWQoX1NURElOVF9IXykgXA0KKyB8fCBkZWZpbmVkKF9JTlRUWVBFU19IKSBcDQorIHx8IGRlZmluZWQoX0lOVFRZUEVTX0hfKSBcDQorIHx8IGRlZmluZWQoX1NZU19TVERJTlRfSCkgXA0KKyB8fCBkZWZpbmVkKF9TWVNfU1RESU5UX0hfKSBcDQorIHx8IGRlZmluZWQoX1NZU19JTlRUWVBFU19IKSBcDQorIHx8IGRlZmluZWQoX1NZU19JTlRUWVBFU19IXykgXA0KKyB8fCBkZWZpbmVkKF9TVERJTlRfSF9JTkNMVURFRCkgXA0KKyB8fCBkZWZpbmVkKEJPT1NUX0NTVERJTlRfSFBQKSBcDQorIHx8IGRlZmluZWQoX01TQ19TVERJTlRfSF8pIFwNCisgfHwgZGVmaW5lZChfUFNURElOVF9IX0lOQ0xVREVEKQ0KKyAgIC8qIEFzc3VtZSB0aGF0IGV4YWN0LXdpZHRoIGludGVnZXIgdHlwZXMgaGF2ZSBhbHJlYWR5IGJlZW4gZGVmaW5lZC4gKi8NCisjZWxpZiBOaUZwZ2FfVnhXb3Jrcw0KKyAgICNpbmNsdWRlIDx2eFdvcmtzLmg+DQorI2VsaWYgTmlGcGdhX0M5OSBcDQorICAgfHwgTmlGcGdhX0djYyAvKiBHQ0MgKGF0IGxlYXN0IHNpbmNlIDMuMCkgaGFzIGEgc3RkaW50LmguICovIFwNCisgICB8fCBkZWZpbmVkKEhBVkVfU1RESU5UX0gpDQorICAgLyogQXNzdW1lIHRoYXQgc3RkaW50LmggY2FuIGJlIGluY2x1ZGVkLiAqLw0KKyAgICNpbmNsdWRlIDxzdGRpbnQuaD4NCisjZWxpZiBOaUZwZ2FfTXN2YyBcDQorICAgfHwgTmlGcGdhX0N2aQ0KKyAgIC8qIE1hbnVhbGx5IGRlZmluZSBleGFjdC13aWR0aCBpbnRlZ2VyIHR5cGVzLiAqLw0KKyAgIHR5cGVkZWYgICBzaWduZWQgICAgY2hhciAgaW50OF90Ow0KKyAgIHR5cGVkZWYgdW5zaWduZWQgICAgY2hhciB1aW50OF90Ow0KKyAgIHR5cGVkZWYgICAgICAgICAgICBzaG9ydCAgaW50MTZfdDsNCisgICB0eXBlZGVmIHVuc2lnbmVkICAgc2hvcnQgdWludDE2X3Q7DQorICAgdHlwZWRlZiAgICAgICAgICAgICAgaW50ICBpbnQzMl90Ow0KKyAgIHR5cGVkZWYgdW5zaWduZWQgICAgIGludCB1aW50MzJfdDsNCisgICB0eXBlZGVmICAgICAgICAgIF9faW50NjQgIGludDY0X3Q7DQorICAgdHlwZWRlZiB1bnNpZ25lZCBfX2ludDY0IHVpbnQ2NF90Ow0KKyNlbHNlDQorICAgLyoNCisgICAgKiBFeGFjdC13aWR0aCBpbnRlZ2VyIHR5cGVzIG11c3QgYmUgZGVmaW5lZCBieSB0aGUgdXNlciwgYW5kIHRoZSBmb2xsb3dpbmcNCisgICAgKiBtYWNybyBtdXN0IGJlICNkZWZpbmVkLCBiZWZvcmUgI2luY2x1ZGluZyBOaUZwZ2EuaDoNCisgICAgKg0KKyAgICAqICAgICNkZWZpbmUgTmlGcGdhX0V4YWN0V2lkdGhJbnRlZ2VyVHlwZXNEZWZpbmVkIDENCisgICAgKi8NCisgICAjZXJyb3IgRXhhY3Qtd2lkdGggaW50ZWdlciB0eXBlcyBtdXN0IGJlIGRlZmluZWQgYnkgdGhlIHVzZXIuIFNlZSBjb21tZW50Lg0KKyNlbmRpZg0KKw0KKy8qIEluY2x1ZGVkIGZvciBkZWZpbml0aW9uIG9mIHNpemVfdC4gKi8NCisjaW5jbHVkZSA8c3RkZGVmLmg+DQorDQorI2lmIE5pRnBnYV9DcHANCitleHRlcm4gIkMiIHsNCisjZW5kaWYNCisNCisvKioNCisgKiBBIGJvb2xlYW4gdmFsdWU7IGVpdGhlciBOaUZwZ2FfRmFsc2Ugb3IgTmlGcGdhX1RydWUuDQorICovDQordHlwZWRlZiB1aW50OF90IE5pRnBnYV9Cb29sOw0KKw0KKy8qKg0KKyAqIFJlcHJlc2VudHMgYSBmYWxzZSBjb25kaXRpb24uDQorICovDQorc3RhdGljIGNvbnN0IE5pRnBnYV9Cb29sIE5pRnBnYV9GYWxzZSA9IDA7DQorDQorLyoqDQorICogUmVwcmVzZW50cyBhIHRydWUgY29uZGl0aW9uLg0KKyAqLw0KK3N0YXRpYyBjb25zdCBOaUZwZ2FfQm9vbCBOaUZwZ2FfVHJ1ZSA9IDE7DQorDQorLyoqDQorICogUmVwcmVzZW50cyB0aGUgcmVzdWx0aW5nIHN0YXR1cyBvZiBhIGZ1bmN0aW9uIGNhbGwgdGhyb3VnaCBpdHMgcmV0dXJuIHZhbHVlLg0KKyAqIDAgaXMgc3VjY2VzcywgbmVnYXRpdmUgdmFsdWVzIGFyZSBlcnJvcnMsIGFuZCBwb3NpdGl2ZSB2YWx1ZXMgYXJlIHdhcm5pbmdzLg0KKyAqLw0KK3R5cGVkZWYgaW50MzJfdCBOaUZwZ2FfU3RhdHVzOw0KKw0KKy8qKg0KKyAqIE5vIGVycm9ycyBvciB3YXJuaW5ncy4NCisgKi8NCitzdGF0aWMgY29uc3QgTmlGcGdhX1N0YXR1cyBOaUZwZ2FfU3RhdHVzX1N1Y2Nlc3MgPSAwOw0KKw0KKy8qKg0KKyAqIFRoZSB0aW1lb3V0IGV4cGlyZWQgYmVmb3JlIHRoZSBGSUZPIG9wZXJhdGlvbiBjb3VsZCBjb21wbGV0ZS4NCisgKi8NCitzdGF0aWMgY29uc3QgTmlGcGdhX1N0YXR1cyBOaUZwZ2FfU3RhdHVzX0ZpZm9UaW1lb3V0ID0gLTUwNDAwOw0KKw0KKy8qKg0KKyAqIEEgbWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkLiBUcnkgYWdhaW4gYWZ0ZXIgcmVib290aW5nLg0KKyAqLw0KK3N0YXRpYyBjb25zdCBOaUZwZ2FfU3RhdHVzIE5pRnBnYV9TdGF0dXNfTWVtb3J5RnVsbCA9IC01MjAwMDsNCisNCisvKioNCisgKiBBbiB1bmV4cGVjdGVkIHNvZnR3YXJlIGVycm9yIG9jY3VycmVkLg0KKyAqLw0KK3N0YXRpYyBjb25zdCBOaUZwZ2FfU3RhdHVzIE5pRnBnYV9TdGF0dXNfU29mdHdhcmVGYXVsdCA9IC01MjAwMzsNCisNCisvKioNCisgKiBBIHBhcmFtZXRlciB0byBhIGZ1bmN0aW9uIHdhcyBub3QgdmFsaWQuIFRoaXMgY291bGQgYmUgYSBOVUxMIHBvaW50ZXIsIGEgYmFkDQorICogdmFsdWUsIGV0Yy4NCisgKi8NCitzdGF0aWMgY29uc3QgTmlGcGdhX1N0YXR1cyBOaUZwZ2FfU3RhdHVzX0ludmFsaWRQYXJhbWV0ZXIgPSAtNTIwMDU7DQorDQorLyoqDQorICogQSByZXF1aXJlZCByZXNvdXJjZSB3YXMgbm90IGZvdW5kLiBUaGUgTmlGcGdhLiogbGlicmFyeSwgdGhlIFJJTyByZXNvdXJjZSwNCisgKiBvciBzb21lIG90aGVyIHJlc291cmNlIG1heSBiZSBtaXNzaW5nLCBvciB0aGUgTmlGcGdhLiogbGlicmFyeSBtYXkgbm90IGJlDQorICogdGhlIHJlcXVpcmVkIG1pbmltdW0gdmVyc2lvbi4NCisgKi8NCitzdGF0aWMgY29uc3QgTmlGcGdhX1N0YXR1cyBOaUZwZ2FfU3RhdHVzX1Jlc291cmNlTm90Rm91bmQgPSAtNTIwMDY7DQorDQorLyoqDQorICogQSByZXF1aXJlZCByZXNvdXJjZSB3YXMgbm90IHByb3Blcmx5IGluaXRpYWxpemVkLiBUaGlzIGNvdWxkIG9jY3VyIGlmDQorICogTmlGcGdhX0luaXRpYWxpemUgd2FzIG5vdCBjYWxsZWQgb3IgYSByZXF1aXJlZCBOaUZwZ2FfSXJxQ29udGV4dCB3YXMgbm90DQorICogcmVzZXJ2ZWQuDQorICovDQorc3RhdGljIGNvbnN0IE5pRnBnYV9TdGF0dXMgTmlGcGdhX1N0YXR1c19SZXNvdXJjZU5vdEluaXRpYWxpemVkID0gLTUyMDEwOw0KKw0KKy8qKg0KKyAqIFRoZSBGUEdBIGlzIGFscmVhZHkgcnVubmluZy4NCisgKi8NCitzdGF0aWMgY29uc3QgTmlGcGdhX1N0YXR1cyBOaUZwZ2FfU3RhdHVzX0ZwZ2FBbHJlYWR5UnVubmluZyA9IC02MTAwMzsNCisNCisvKioNCisgKiBUaGUgYml0ZmlsZSB3YXMgbm90IGNvbXBpbGVkIGZvciB0aGUgc3BlY2lmaWVkIHJlc291cmNlJ3MgZGV2aWNlIHR5cGUuDQorICovDQorc3RhdGljIGNvbnN0IE5pRnBnYV9TdGF0dXMgTmlGcGdhX1N0YXR1c19EZXZpY2VUeXBlTWlzbWF0Y2ggPSAtNjEwMjQ7DQorDQorLyoqDQorICogQW4gZXJyb3Igd2FzIGRldGVjdGVkIGluIHRoZSBjb21tdW5pY2F0aW9uIGJldHdlZW4gdGhlIGhvc3QgY29tcHV0ZXIgYW5kIHRoZQ0KKyAqIEZQR0EgdGFyZ2V0Lg0KKyAqLw0KK3N0YXRpYyBjb25zdCBOaUZwZ2FfU3RhdHVzIE5pRnBnYV9TdGF0dXNfQ29tbXVuaWNhdGlvblRpbWVvdXQgPSAtNjEwNDY7DQorDQorLyoqDQorICogVGhlIHRpbWVvdXQgZXhwaXJlZCBiZWZvcmUgYW55IG9mIHRoZSBJUlFzIHdlcmUgYXNzZXJ0ZWQuDQorICovDQorc3RhdGljIGNvbnN0IE5pRnBnYV9TdGF0dXMgTmlGcGdhX1N0YXR1c19JcnFUaW1lb3V0ID0gLTYxMDYwOw0KKw0KKy8qKg0KKyAqIFRoZSBzcGVjaWZpZWQgYml0ZmlsZSBpcyBpbnZhbGlkIG9yIGNvcnJ1cHQuDQorICovDQorc3RhdGljIGNvbnN0IE5pRnBnYV9TdGF0dXMgTmlGcGdhX1N0YXR1c19Db3JydXB0Qml0ZmlsZSA9IC02MTA3MDsNCisNCisvKioNCisgKiBUaGUgRklGTyBkZXB0aCBpcyBpbnZhbGlkLiBJdCB3YXMgZWl0aGVyIDAsIGdyZWF0ZXIgdGhhbiB0aGUgYW1vdW50IG9mDQorICogYXZhaWxhYmxlIG1lbW9yeSBpbiB0aGUgaG9zdCBjb21wdXRlciwgb3IgZ3JlYXRlciB0aGFuIHRoZSBtYXhpbXVtIHNpemUNCisgKiBhbGxvd2VkIGJ5IHRoZSBoYXJkd2FyZS4NCisgKi8NCitzdGF0aWMgY29uc3QgTmlGcGdhX1N0YXR1cyBOaUZwZ2FfU3RhdHVzX0JhZERlcHRoID0gLTYxMDcyOw0KKw0KKy8qKg0KKyAqIFRoZSBudW1iZXIgb2YgRklGTyBlbGVtZW50cyBpcyBpbnZhbGlkLiBFaXRoZXIgdGhlIG51bWJlciBpcyBncmVhdGVyIHRoYW4NCisgKiB0aGUgZGVwdGggb2YgdGhlIGhvc3QgbWVtb3J5IERNQSBGSUZPLCBvciBtb3JlIGVsZW1lbnRzIHdlcmUgcmVxdWVzdGVkIGZvcg0KKyAqIHJlbGVhc2UgdGhhbiBoYWQgYmVlbiBhY3F1aXJlZC4gDQorICovDQorc3RhdGljIGNvbnN0IE5pRnBnYV9TdGF0dXMgTmlGcGdhX1N0YXR1c19CYWRSZWFkV3JpdGVDb3VudCA9IC02MTA3MzsNCisNCisvKioNCisgKiBBIGhhcmR3YXJlIGNsb2NraW5nIGVycm9yIG9jY3VycmVkLiBBIGRlcml2ZWQgY2xvY2sgbG9zdCBsb2NrIHdpdGggaXRzIGJhc2UNCisgKiBjbG9jayBkdXJpbmcgdGhlIGV4ZWN1dGlvbiBvZiB0aGUgTGFiVklFVyBGUEdBIFZJLiBJZiBhbnkgYmFzZSBjbG9ja3Mgd2l0aA0KKyAqIGRlcml2ZWQgY2xvY2tzIGFyZSByZWZlcmVuY2luZyBhbiBleHRlcm5hbCBzb3VyY2UsIG1ha2Ugc3VyZSB0aGF0IHRoZQ0KKyAqIGV4dGVybmFsIHNvdXJjZSBpcyBjb25uZWN0ZWQgYW5kIHdpdGhpbiB0aGUgc3VwcG9ydGVkIGZyZXF1ZW5jeSwgaml0dGVyLA0KKyAqIGFjY3VyYWN5LCBkdXR5IGN5Y2xlLCBhbmQgdm9sdGFnZSBzcGVjaWZpY2F0aW9ucy4gQWxzbyB2ZXJpZnkgdGhhdCB0aGUNCisgKiBjaGFyYWN0ZXJpc3RpY3Mgb2YgdGhlIGJhc2UgY2xvY2sgbWF0Y2ggdGhlIGNvbmZpZ3VyYXRpb24gc3BlY2lmaWVkIGluIHRoZQ0KKyAqIEZQR0EgQmFzZSBDbG9jayBQcm9wZXJ0aWVzLiBJZiBhbGwgYmFzZSBjbG9ja3Mgd2l0aCBkZXJpdmVkIGNsb2NrcyBhcmUNCisgKiBnZW5lcmF0ZWQgZnJvbSBmcmVlLXJ1bm5pbmcsIG9uLWJvYXJkIHNvdXJjZXMsIHBsZWFzZSBjb250YWN0IE5hdGlvbmFsDQorICogSW5zdHJ1bWVudHMgdGVjaG5pY2FsIHN1cHBvcnQgYXQgbmkuY29tL3N1cHBvcnQuDQorICovDQorc3RhdGljIGNvbnN0IE5pRnBnYV9TdGF0dXMgTmlGcGdhX1N0YXR1c19DbG9ja0xvc3RMb2NrID0gLTYxMDgzOw0KKw0KKy8qKg0KKyAqIE9wZXJhdGlvbiBjb3VsZCBub3QgYmUgcGVyZm9ybWVkIGJlY2F1c2UgdGhlIEZQR0EgaXMgYnVzeS4gU3RvcCBhbGwgdGhlDQorICogYWN0aXZpdGllcyBvbiB0aGUgRlBHQSBiZWZvcmUgcmVxdWVzdGluZyB0aGlzIG9wZXJhdGlvbi4NCisgKi8NCitzdGF0aWMgY29uc3QgTmlGcGdhX1N0YXR1cyBOaUZwZ2FfU3RhdHVzX0ZwZ2FCdXN5ID0gLTYxMTQxOw0KKw0KKy8qKg0KKyAqIE9wZXJhdGlvbiBjb3VsZCBub3QgYmUgcGVyZm9ybWVkIGJlY2F1c2UgdGhlIEZQR0EgaXMgYnVzeSBvcGVyYXRpbmcgaW4gRlBHQQ0KKyAqIEludGVyZmFjZSBDIEFQSSBtb2RlLiBTdG9wIGFsbCB0aGUgYWN0aXZpdGllcyBvbiB0aGUgRlBHQSBiZWZvcmUgcmVxdWVzdGluZw0KKyAqIHRoaXMgb3BlcmF0aW9uLg0KKyAqLw0KK3N0YXRpYyBjb25zdCBOaUZwZ2FfU3RhdHVzIE5pRnBnYV9TdGF0dXNfRnBnYUJ1c3lGcGdhSW50ZXJmYWNlQ0FwaSA9IC02MTIwMDsNCisNCisvKioNCisgKiBUaGUgY2hhc3NpcyBpcyBpbiBTY2FuIEludGVyZmFjZSBwcm9ncmFtbWluZyBtb2RlLiBJbiBvcmRlciB0byBydW4gRlBHQSBWSXMsDQorICogeW91IG11c3QgZ28gdG8gdGhlIGNoYXNzaXMgcHJvcGVydGllcyBwYWdlLCBzZWxlY3QgRlBHQSBwcm9ncmFtbWluZyBtb2RlLA0KKyAqIGFuZCBkZXBsb3kgc2V0dGluZ3MuDQorICovDQorc3RhdGljIGNvbnN0IE5pRnBnYV9TdGF0dXMgTmlGcGdhX1N0YXR1c19GcGdhQnVzeVNjYW5JbnRlcmZhY2UgPSAtNjEyMDE7DQorDQorLyoqDQorICogT3BlcmF0aW9uIGNvdWxkIG5vdCBiZSBwZXJmb3JtZWQgYmVjYXVzZSB0aGUgRlBHQSBpcyBidXN5IG9wZXJhdGluZyBpbiBGUEdBDQorICogSW50ZXJmYWNlIG1vZGUuIFN0b3AgYWxsIHRoZSBhY3Rpdml0aWVzIG9uIHRoZSBGUEdBIGJlZm9yZSByZXF1ZXN0aW5nIHRoaXMNCisgKiBvcGVyYXRpb24uDQorICovDQorc3RhdGljIGNvbnN0IE5pRnBnYV9TdGF0dXMgTmlGcGdhX1N0YXR1c19GcGdhQnVzeUZwZ2FJbnRlcmZhY2UgPSAtNjEyMDI7DQorDQorLyoqDQorICogT3BlcmF0aW9uIGNvdWxkIG5vdCBiZSBwZXJmb3JtZWQgYmVjYXVzZSB0aGUgRlBHQSBpcyBidXN5IG9wZXJhdGluZyBpbg0KKyAqIEludGVyYWN0aXZlIG1vZGUuIFN0b3AgYWxsIHRoZSBhY3Rpdml0aWVzIG9uIHRoZSBGUEdBIGJlZm9yZSByZXF1ZXN0aW5nIHRoaXMNCisgKiBvcGVyYXRpb24uDQorICovDQorc3RhdGljIGNvbnN0IE5pRnBnYV9TdGF0dXMgTmlGcGdhX1N0YXR1c19GcGdhQnVzeUludGVyYWN0aXZlID0gLTYxMjAzOw0KKw0KKy8qKg0KKyAqIE9wZXJhdGlvbiBjb3VsZCBub3QgYmUgcGVyZm9ybWVkIGJlY2F1c2UgdGhlIEZQR0EgaXMgYnVzeSBvcGVyYXRpbmcgaW4NCisgKiBFbXVsYXRpb24gbW9kZS4gU3RvcCBhbGwgdGhlIGFjdGl2aXRpZXMgb24gdGhlIEZQR0EgYmVmb3JlIHJlcXVlc3RpbmcgdGhpcw0KKyAqIG9wZXJhdGlvbi4NCisgKi8NCitzdGF0aWMgY29uc3QgTmlGcGdhX1N0YXR1cyBOaUZwZ2FfU3RhdHVzX0ZwZ2FCdXN5RW11bGF0aW9uID0gLTYxMjA0Ow0KKw0KKy8qKg0KKyAqIEFuIHVuZXhwZWN0ZWQgaW50ZXJuYWwgZXJyb3Igb2NjdXJyZWQuDQorICovDQorc3RhdGljIGNvbnN0IE5pRnBnYV9TdGF0dXMgTmlGcGdhX1N0YXR1c19JbnRlcm5hbEVycm9yID0gLTYxNDk5Ow0KKw0KKy8qKg0KKyAqIEFjY2VzcyB0byB0aGUgcmVtb3RlIHN5c3RlbSB3YXMgZGVuaWVkLiBVc2UgTUFYIHRvIGNoZWNrIHRoZSBSZW1vdGUgRGV2aWNlDQorICogQWNjZXNzIHNldHRpbmdzIHVuZGVyIFNvZnR3YXJlPj5OSS1SSU8+Pk5JLVJJTyBTZXR0aW5ncyBvbiB0aGUgcmVtb3RlIHN5c3RlbS4NCisgKi8NCitzdGF0aWMgY29uc3QgTmlGcGdhX1N0YXR1cyBOaUZwZ2FfU3RhdHVzX0FjY2Vzc0RlbmllZCA9IC02MzAzMzsNCisNCisvKioNCisgKiBBIGNvbm5lY3Rpb24gY291bGQgbm90IGJlIGVzdGFibGlzaGVkIHRvIHRoZSBzcGVjaWZpZWQgcmVtb3RlIGRldmljZS4gRW5zdXJlDQorICogdGhhdCB0aGUgZGV2aWNlIGlzIG9uIGFuZCBhY2Nlc3NpYmxlIG92ZXIgdGhlIG5ldHdvcmssIHRoYXQgTkktUklPIHNvZnR3YXJlDQorICogaXMgaW5zdGFsbGVkLCBhbmQgdGhhdCB0aGUgUklPIHNlcnZlciBpcyBydW5uaW5nIGFuZCBwcm9wZXJseSBjb25maWd1cmVkLg0KKyAqLw0KK3N0YXRpYyBjb25zdCBOaUZwZ2FfU3RhdHVzIE5pRnBnYV9TdGF0dXNfUnBjQ29ubmVjdGlvbkVycm9yID0gLTYzMDQwOw0KKw0KKy8qKg0KKyAqIFRoZSBSUEMgc2Vzc2lvbiBpcyBpbnZhbGlkLiBUaGUgdGFyZ2V0IG1heSBoYXZlIHJlc2V0IG9yIGJlZW4gcmVib290ZWQuIENoZWNrDQorICogdGhlIG5ldHdvcmsgY29ubmVjdGlvbiBhbmQgcmV0cnkgdGhlIG9wZXJhdGlvbi4NCisgKi8NCitzdGF0aWMgY29uc3QgTmlGcGdhX1N0YXR1cyBOaUZwZ2FfU3RhdHVzX1JwY1Nlc3Npb25FcnJvciA9IC02MzA0MzsNCisNCisvKioNCisgKiBBIFJlYWQgRklGTyBvciBXcml0ZSBGSUZPIGZ1bmN0aW9uIHdhcyBjYWxsZWQgd2hpbGUgdGhlIGhvc3QgaGFkIGFjcXVpcmVkDQorICogZWxlbWVudHMgb2YgdGhlIEZJRk8uIFJlbGVhc2UgYWxsIGFjcXVpcmVkIGVsZW1lbnRzIGJlZm9yZSByZWFkaW5nIG9yDQorICogd3JpdGluZy4NCisgKi8NCitzdGF0aWMgY29uc3QgTmlGcGdhX1N0YXR1cyBOaUZwZ2FfU3RhdHVzX0ZpZm9FbGVtZW50c0N1cnJlbnRseUFjcXVpcmVkID0gLTYzMDgzOw0KKw0KKy8qKg0KKyAqIFRoZSBiaXRmaWxlIGNvdWxkIG5vdCBiZSByZWFkLg0KKyAqLw0KK3N0YXRpYyBjb25zdCBOaUZwZ2FfU3RhdHVzIE5pRnBnYV9TdGF0dXNfQml0ZmlsZVJlYWRFcnJvciA9IC02MzEwMTsNCisNCisvKioNCisgKiBUaGUgc3BlY2lmaWVkIHNpZ25hdHVyZSBkb2VzIG5vdCBtYXRjaCB0aGUgc2lnbmF0dXJlIG9mIHRoZSBiaXRmaWxlLiBJZiB0aGUNCisgKiBiaXRmaWxlIGhhcyBiZWVuIHJlY29tcGlsZWQsIHJlZ2VuZXJhdGUgdGhlIEMgQVBJIGFuZCByZWJ1aWxkIHRoZQ0KKyAqIGFwcGxpY2F0aW9uLg0KKyAqLw0KK3N0YXRpYyBjb25zdCBOaUZwZ2FfU3RhdHVzIE5pRnBnYV9TdGF0dXNfU2lnbmF0dXJlTWlzbWF0Y2ggPSAtNjMxMDY7DQorDQorLyoqDQorICogRWl0aGVyIHRoZSBzdXBwbGllZCByZXNvdXJjZSBuYW1lIGlzIGludmFsaWQgYXMgYSBSSU8gcmVzb3VyY2UgbmFtZSwgb3IgdGhlDQorICogZGV2aWNlIHdhcyBub3QgZm91bmQuIFVzZSBNQVggdG8gZmluZCB0aGUgcHJvcGVyIHJlc291cmNlIG5hbWUgZm9yIHRoZQ0KKyAqIGludGVuZGVkIGRldmljZS4NCisgKi8NCitzdGF0aWMgY29uc3QgTmlGcGdhX1N0YXR1cyBOaUZwZ2FfU3RhdHVzX0ludmFsaWRSZXNvdXJjZU5hbWUgPSAtNjMxOTI7DQorDQorLyoqDQorICogVGhlIHJlcXVlc3RlZCBmZWF0dXJlIGlzIG5vdCBzdXBwb3J0ZWQuDQorICovDQorc3RhdGljIGNvbnN0IE5pRnBnYV9TdGF0dXMgTmlGcGdhX1N0YXR1c19GZWF0dXJlTm90U3VwcG9ydGVkID0gLTYzMTkzOw0KKw0KKy8qKg0KKyAqIFRoZSBOSS1SSU8gc29mdHdhcmUgb24gdGhlIHJlbW90ZSBzeXN0ZW0gaXMgbm90IGNvbXBhdGlibGUgd2l0aCB0aGUgbG9jYWwNCisgKiBOSS1SSU8gc29mdHdhcmUuIFVwZ3JhZGUgdGhlIE5JLVJJTyBzb2Z0d2FyZSBvbiB0aGUgcmVtb3RlIHN5c3RlbS4NCisgKi8NCitzdGF0aWMgY29uc3QgTmlGcGdhX1N0YXR1cyBOaUZwZ2FfU3RhdHVzX1ZlcnNpb25NaXNtYXRjaCA9IC02MzE5NDsNCisNCisvKioNCisgKiBUaGUgc2Vzc2lvbiBpcyBpbnZhbGlkIG9yIGhhcyBiZWVuIGNsb3NlZC4NCisgKi8NCitzdGF0aWMgY29uc3QgTmlGcGdhX1N0YXR1cyBOaUZwZ2FfU3RhdHVzX0ludmFsaWRTZXNzaW9uID0gLTYzMTk1Ow0KKw0KKy8qKg0KKyAqIFRoZSBtYXhpbXVtIG51bWJlciBvZiBvcGVuIEZQR0Egc2Vzc2lvbnMgaGFzIGJlZW4gcmVhY2hlZC4gQ2xvc2Ugc29tZSBvcGVuDQorICogc2Vzc2lvbnMuDQorICovDQorc3RhdGljIGNvbnN0IE5pRnBnYV9TdGF0dXMgTmlGcGdhX1N0YXR1c19PdXRPZkhhbmRsZXMgPSAtNjMxOTg7DQorDQorLyoqDQorICogVGVzdHMgd2hldGhlciBhIHN0YXR1cyBpcyBhbiBlcnJvci4NCisgKg0KKyAqIEBwYXJhbSBzdGF0dXMgc3RhdHVzIHRvIGNoZWNrIGZvciBhbiBlcnJvcg0KKyAqIEByZXR1cm4gd2hldGhlciB0aGUgc3RhdHVzIHdhcyBhbiBlcnJvcg0KKyAqLw0KK3N0YXRpYyBOaUZwZ2FfSW5saW5lIE5pRnBnYV9Cb29sIE5pRnBnYV9Jc0Vycm9yKGNvbnN0IE5pRnBnYV9TdGF0dXMgc3RhdHVzKQ0KK3sNCisgICByZXR1cm4gc3RhdHVzIDwgTmlGcGdhX1N0YXR1c19TdWNjZXNzOw0KK30NCisNCisvKioNCisgKiBUZXN0cyB3aGV0aGVyIGEgc3RhdHVzIGlzIG5vdCBhbiBlcnJvci4gU3VjY2VzcyBhbmQgd2FybmluZ3MgYXJlIG5vdCBlcnJvcnMuDQorICoNCisgKiBAcGFyYW0gc3RhdHVzIHN0YXR1cyB0byBjaGVjayBmb3IgYW4gZXJyb3INCisgKiBAcmV0dXJuIHdoZXRoZXIgdGhlIHN0YXR1cyB3YXMgYSBzdWNjZXNzIG9yIHdhcm5pbmcNCisgKi8NCitzdGF0aWMgTmlGcGdhX0lubGluZSBOaUZwZ2FfQm9vbCBOaUZwZ2FfSXNOb3RFcnJvcihjb25zdCBOaUZwZ2FfU3RhdHVzIHN0YXR1cykNCit7DQorICAgcmV0dXJuIHN0YXR1cyA+PSBOaUZwZ2FfU3RhdHVzX1N1Y2Nlc3M7DQorfQ0KKw0KKy8qKg0KKyAqIENvbmRpdGlvbmFsbHkgc2V0cyB0aGUgc3RhdHVzIHRvIGEgbmV3IHZhbHVlLiBUaGUgcHJldmlvdXMgc3RhdHVzIGlzDQorICogcHJlc2VydmVkIHVubGVzcyB0aGUgbmV3IHN0YXR1cyBpcyBtb3JlIG9mIGFuIGVycm9yLCB3aGljaCBtZWFucyB0aGF0DQorICogd2FybmluZ3MgYW5kIGVycm9ycyBvdmVyd3JpdGUgc3VjY2Vzc2VzLCBhbmQgZXJyb3JzIG92ZXJ3cml0ZSB3YXJuaW5ncy4gTmV3DQorICogZXJyb3JzIGRvIG5vdCBvdmVyd3JpdGUgb2xkZXIgZXJyb3JzLCBhbmQgbmV3IHdhcm5pbmdzIGRvIG5vdCBvdmVyd3JpdGUNCisgKiBvbGRlciB3YXJuaW5ncy4NCisgKg0KKyAqIEBwYXJhbSBzdGF0dXMgc3RhdHVzIHRvIGNvbmRpdGlvbmFsbHkgc2V0DQorICogQHBhcmFtIG5ld1N0YXR1cyBuZXcgc3RhdHVzIHZhbHVlIHRoYXQgbWF5IGJlIHNldA0KKyAqIEByZXR1cm4gdGhlIHJlc3VsdGluZyBzdGF0dXMNCisgKi8NCitzdGF0aWMgTmlGcGdhX0lubGluZSBOaUZwZ2FfU3RhdHVzIE5pRnBnYV9NZXJnZVN0YXR1cygNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOaUZwZ2FfU3RhdHVzKiBjb25zdCBzdGF0dXMsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgTmlGcGdhX1N0YXR1cyAgbmV3U3RhdHVzKQ0KK3sNCisgICBpZiAoIXN0YXR1cykNCisgICB7DQorICAgICAgcmV0dXJuIE5pRnBnYV9TdGF0dXNfSW52YWxpZFBhcmFtZXRlcjsNCisgICB9DQorICAgaWYgKE5pRnBnYV9Jc05vdEVycm9yKCpzdGF0dXMpDQorICAgJiYgICgqc3RhdHVzID09IE5pRnBnYV9TdGF0dXNfU3VjY2VzcyB8fCBOaUZwZ2FfSXNFcnJvcihuZXdTdGF0dXMpKSkNCisgICB7DQorICAgICAgKnN0YXR1cyA9IG5ld1N0YXR1czsNCisgICB9DQorICAgcmV0dXJuICpzdGF0dXM7DQorfQ0KKw0KKy8qKg0KKyAqIFRoaXMgbWFjcm8gZXZhbHVhdGVzIHRoZSBleHByZXNzaW9uIG9ubHkgaWYgdGhlIHN0YXR1cyBpcyBub3QgYW4gZXJyb3IuIFRoZQ0KKyAqIGV4cHJlc3Npb24gbXVzdCBldmFsdWF0ZSB0byBhbiBOaUZwZ2FfU3RhdHVzLCBzdWNoIGFzIGEgY2FsbCB0byBhbnkgTmlGcGdhXyoNCisgKiBmdW5jdGlvbiwgYmVjYXVzZSB0aGUgc3RhdHVzIHdpbGwgYmUgc2V0IHRvIHRoZSByZXR1cm5lZCBzdGF0dXMgaWYgdGhlDQorICogZXhwcmVzc2lvbiBpcyBldmFsdWF0ZWQuDQorICoNCisgKiBZb3UgY2FuIHVzZSB0aGlzIG1hY3JvIHRvIG1pbWljIHN0YXR1cyBjaGFpbmluZyBpbiBMYWJWSUVXLCB3aGVyZSB0aGUgc3RhdHVzDQorICogZG9lcyBub3QgaGF2ZSB0byBiZSBleHBsaWNpdGx5IGNoZWNrZWQgYWZ0ZXIgZWFjaCBjYWxsLiBTdWNoIGNvZGUgbWF5IGxvb2sNCisgKiBsaWtlIHRoZSBmb2xsb3dpbmcgZXhhbXBsZS4NCisgKg0KKyAqICAgIE5pRnBnYV9TdGF0dXMgc3RhdHVzID0gTmlGcGdhX1N0YXR1c19TdWNjZXNzOw0KKyAqICAgIE5pRnBnYV9JZklzTm90RXJyb3Ioc3RhdHVzLCBOaUZwZ2FfV3JpdGVVMzIoLi4uKSk7DQorICogICAgTmlGcGdhX0lmSXNOb3RFcnJvcihzdGF0dXMsIE5pRnBnYV9Xcml0ZVUzMiguLi4pKTsNCisgKiAgICBOaUZwZ2FfSWZJc05vdEVycm9yKHN0YXR1cywgTmlGcGdhX1dyaXRlVTMyKC4uLikpOw0KKyAqDQorICogQHBhcmFtIHN0YXR1cyBzdGF0dXMgdG8gY2hlY2sgZm9yIGFuIGVycm9yDQorICogQHBhcmFtIGV4cHJlc3Npb24gZXhwcmVzc2lvbiB0byBjYWxsIGlmIHRoZSBpbmNvbWluZyBzdGF0dXMgaXMgbm90IGFuIGVycm9yDQorICovDQorI2RlZmluZSBOaUZwZ2FfSWZJc05vdEVycm9yKHN0YXR1cywgZXhwcmVzc2lvbikgXA0KKyAgIGlmIChOaUZwZ2FfSXNOb3RFcnJvcihzdGF0dXMpKSBcDQorICAgeyBcDQorICAgICAgTmlGcGdhX01lcmdlU3RhdHVzKCZzdGF0dXMsIChleHByZXNzaW9uKSk7IFwNCisgICB9DQorDQorLyoqDQorICogWW91IG11c3QgY2FsbCB0aGlzIGZ1bmN0aW9uIGJlZm9yZSBhbGwgb3RoZXIgZnVuY3Rpb24gY2FsbHMuIFRoaXMgZnVuY3Rpb24NCisgKiBsb2FkcyB0aGUgTmlGcGdhIGxpYnJhcnkgc28gdGhhdCBhbGwgdGhlIG90aGVyIGZ1bmN0aW9ucyB3aWxsIHdvcmsuIElmIHRoaXMNCisgKiBmdW5jdGlvbiBzdWNjZWVkcywgeW91IG11c3QgY2FsbCBOaUZwZ2FfRmluYWxpemUgYWZ0ZXIgYWxsIG90aGVyIGZ1bmN0aW9uDQorICogY2FsbHMuDQorICoNCisgKiBAd2FybmluZyBUaGlzIGZ1bmN0aW9uIGlzIG5vdCB0aHJlYWQgc2FmZS4NCisgKg0KKyAqIEByZXR1cm4gcmVzdWx0IG9mIHRoZSBjYWxsDQorICovDQorTmlGcGdhX1N0YXR1cyBOaUZwZ2FfSW5pdGlhbGl6ZSh2b2lkKTsNCisNCisvKioNCisgKiBZb3UgbXVzdCBjYWxsIHRoaXMgZnVuY3Rpb24gYWZ0ZXIgYWxsIG90aGVyIGZ1bmN0aW9uIGNhbGxzIGlmDQorICogTmlGcGdhX0luaXRpYWxpemUgc3VjY2VlZHMuIFRoaXMgZnVuY3Rpb24gdW5sb2FkcyB0aGUgTmlGcGdhIGxpYnJhcnkuDQorICoNCisgKiBAd2FybmluZyBUaGlzIGZ1bmN0aW9uIGlzIG5vdCB0aHJlYWQgc2FmZS4NCisgKg0KKyAqIEByZXR1cm4gcmVzdWx0IG9mIHRoZSBjYWxsDQorICovDQorTmlGcGdhX1N0YXR1cyBOaUZwZ2FfRmluYWxpemUodm9pZCk7DQorDQorLyoqDQorICogQSBoYW5kbGUgdG8gYW4gRlBHQSBzZXNzaW9uLg0KKyAqLw0KK3R5cGVkZWYgdWludDMyX3QgTmlGcGdhX1Nlc3Npb247DQorDQorLyoqDQorICogQXR0cmlidXRlcyB0aGF0IE5pRnBnYV9PcGVuIGFjY2VwdHMuDQorICovDQordHlwZWRlZiBlbnVtDQorew0KKyAgIE5pRnBnYV9PcGVuQXR0cmlidXRlX05vUnVuID0gMQ0KK30gTmlGcGdhX09wZW5BdHRyaWJ1dGU7DQorDQorLyoqDQorICogT3BlbnMgYSBzZXNzaW9uIHRvIHRoZSBGUEdBLiBUaGlzIGNhbGwgZW5zdXJlcyB0aGF0IHRoZSBjb250ZW50cyBvZiB0aGUNCisgKiBiaXRmaWxlIGFyZSBwcm9ncmFtbWVkIHRvIHRoZSBGUEdBLiBUaGUgRlBHQSBydW5zIHVubGVzcyB0aGUNCisgKiBOaUZwZ2FfT3BlbkF0dHJpYnV0ZV9Ob1J1biBhdHRyaWJ1dGUgaXMgdXNlZC4NCisgKg0KKyAqIEJlY2F1c2UgZGlmZmVyZW50IG9wZXJhdGluZyBzeXN0ZW1zIGhhdmUgZGlmZmVyZW50IGRlZmF1bHQgY3VycmVudCB3b3JraW5nDQorICogZGlyZWN0b3JpZXMgZm9yIGFwcGxpY2F0aW9ucywgeW91IG11c3QgcGFzcyBhbiBhYnNvbHV0ZSBwYXRoIGZvciB0aGUgYml0ZmlsZQ0KKyAqIHBhcmFtZXRlci4gSWYgeW91IHBhc3Mgb25seSB0aGUgZmlsZW5hbWUgaW5zdGVhZCBvZiBhbiBhYnNvbHV0ZSBwYXRoLCB0aGUNCisgKiBvcGVyYXRpbmcgc3lzdGVtIG1heSBub3QgYmUgYWJsZSB0byBsb2NhdGUgdGhlIGJpdGZpbGUuIEZvciBleGFtcGxlLCB0aGUNCisgKiBkZWZhdWx0IGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcmllcyBhcmUgQzpcbmktcnRcc3lzdGVtXCBmb3IgUGhhciBMYXAgRVRTIGFuZA0KKyAqIC9jLyBmb3IgVnhXb3Jrcy4gQmVjYXVzZSB0aGUgZ2VuZXJhdGVkICpfQml0ZmlsZSBjb25zdGFudCBpcyBhICNkZWZpbmUgdG8gYQ0KKyAqIHN0cmluZyBsaXRlcmFsLCB5b3UgY2FuIHVzZSBDL0MrKyBzdHJpbmctbGl0ZXJhbCBjb25jYXRlbmF0aW9uIHRvIGZvcm0gYW4NCisgKiBhYnNvbHV0ZSBwYXRoLiBGb3IgZXhhbXBsZSwgaWYgdGhlIGJpdGZpbGUgaXMgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIGENCisgKiBQaGFyIExhcCBFVFMgc3lzdGVtLCBwYXNzIHRoZSBmb2xsb3dpbmcgZm9yIHRoZSBiaXRmaWxlIHBhcmFtZXRlci4NCisgKg0KKyAqICAgICJDOlxcIiBOaUZwZ2FfTXlBcHBsaWNhdGlvbl9CaXRmaWxlDQorICoNCisgKiBAcGFyYW0gYml0ZmlsZSBwYXRoIHRvIHRoZSBiaXRmaWxlDQorICogQHBhcmFtIHNpZ25hdHVyZSBzaWduYXR1cmUgb2YgdGhlIGJpdGZpbGUNCisgKiBAcGFyYW0gcmVzb3VyY2UgUklPIHJlc291cmNlIHN0cmluZyB0byBvcGVuICgiUklPMCIgb3IgInJpbzovL215c3lzdGVtL1JJTyIpDQorICogQHBhcmFtIGF0dHJpYnV0ZSBiaXR3aXNlIE9SIG9mIGFueSBOaUZwZ2FfT3BlbkF0dHJpYnV0ZXMsIG9yIDANCisgKiBAcGFyYW0gc2Vzc2lvbiBvdXRwdXRzIHRoZSBzZXNzaW9uIGhhbmRsZSwgd2hpY2ggbXVzdCBiZSBjbG9zZWQgd2hlbiBubw0KKyAqICAgICAgICAgICAgICAgIGxvbmdlciBuZWVkZWQNCisgKiBAcmV0dXJuIHJlc3VsdCBvZiB0aGUgY2FsbA0KKyAqLw0KK05pRnBnYV9TdGF0dXMgTmlGcGdhX09wZW4oY29uc3QgY2hhciogICAgIGJpdGZpbGUsDQorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiAgICAgc2lnbmF0dXJlLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogICAgIHJlc291cmNlLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgICAgICAgIGF0dHJpYnV0ZSwNCisgICAgICAgICAgICAgICAgICAgICAgICAgIE5pRnBnYV9TZXNzaW9uKiBzZXNzaW9uKTsNCisNCisvKioNCisgKiBBdHRyaWJ1dGVzIHRoYXQgTmlGcGdhX0Nsb3NlIGFjY2VwdHMuDQorICovDQordHlwZWRlZiBlbnVtDQorew0KKyAgIE5pRnBnYV9DbG9zZUF0dHJpYnV0ZV9Ob1Jlc2V0SWZMYXN0U2Vzc2lvbiA9IDENCit9IE5pRnBnYV9DbG9zZUF0dHJpYnV0ZTsNCisNCisvKioNCisgKiBDbG9zZXMgdGhlIHNlc3Npb24gdG8gdGhlIEZQR0EuIFRoZSBGUEdBIHJlc2V0cyB1bmxlc3MgZWl0aGVyIGFub3RoZXIgc2Vzc2lvbg0KKyAqIGlzIHN0aWxsIG9wZW4gb3IgeW91IHVzZSB0aGUgTmlGcGdhX0Nsb3NlQXR0cmlidXRlX05vUmVzZXRJZkxhc3RTZXNzaW9uDQorICogYXR0cmlidXRlLg0KKyAqDQorICogQHBhcmFtIHNlc3Npb24gaGFuZGxlIHRvIGEgY3VycmVudGx5IG9wZW4gc2Vzc2lvbg0KKyAqIEBwYXJhbSBhdHRyaWJ1dGUgYml0d2lzZSBPUiBvZiBhbnkgTmlGcGdhX0Nsb3NlQXR0cmlidXRlcywgb3IgMA0KKyAqIEByZXR1cm4gcmVzdWx0IG9mIHRoZSBjYWxsDQorICovDQorTmlGcGdhX1N0YXR1cyBOaUZwZ2FfQ2xvc2UoTmlGcGdhX1Nlc3Npb24gc2Vzc2lvbiwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAgICAgICBhdHRyaWJ1dGUpOw0KKw0KKy8qKg0KKyAqIEF0dHJpYnV0ZXMgdGhhdCBOaUZwZ2FfUnVuIGFjY2VwdHMuDQorICovDQordHlwZWRlZiBlbnVtDQorew0KKyAgIE5pRnBnYV9SdW5BdHRyaWJ1dGVfV2FpdFVudGlsRG9uZSA9IDENCit9IE5pRnBnYV9SdW5BdHRyaWJ1dGU7DQorDQorLyoqDQorICogUnVucyB0aGUgRlBHQSBWSSBvbiB0aGUgdGFyZ2V0LiBJZiB5b3UgdXNlIE5pRnBnYV9SdW5BdHRyaWJ1dGVfV2FpdFVudGlsRG9uZSwNCisgKiBOaUZwZ2FfUnVuIGJsb2NrcyB0aGUgdGhyZWFkIHVudGlsIHRoZSBGUEdBIGZpbmlzaGVzIHJ1bm5pbmcgKGlmIGV2ZXIpLg0KKyAqDQorICogQHBhcmFtIHNlc3Npb24gaGFuZGxlIHRvIGEgY3VycmVudGx5IG9wZW4gc2Vzc2lvbg0KKyAqIEBwYXJhbSBhdHRyaWJ1dGUgYml0d2lzZSBPUiBvZiBhbnkgTmlGcGdhX1J1bkF0dHJpYnV0ZXMsIG9yIDANCisgKiBAcmV0dXJuIHJlc3VsdCBvZiB0aGUgY2FsbA0KKyAqLw0KK05pRnBnYV9TdGF0dXMgTmlGcGdhX1J1bihOaUZwZ2FfU2Vzc2lvbiBzZXNzaW9uLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAgICAgICBhdHRyaWJ1dGUpOw0KKw0KKy8qKg0KKyAqIEFib3J0cyB0aGUgRlBHQSBWSS4NCisgKg0KKyAqIEBwYXJhbSBzZXNzaW9uIGhhbmRsZSB0byBhIGN1cnJlbnRseSBvcGVuIHNlc3Npb24NCisgKiBAcmV0dXJuIHJlc3VsdCBvZiB0aGUgY2FsbA0KKyAqLw0KK05pRnBnYV9TdGF0dXMgTmlGcGdhX0Fib3J0KE5pRnBnYV9TZXNzaW9uIHNlc3Npb24pOw0KKw0KKy8qKg0KKyAqIFJlc2V0cyB0aGUgRlBHQSBWSS4NCisgKg0KKyAqIEBwYXJhbSBzZXNzaW9uIGhhbmRsZSB0byBhIGN1cnJlbnRseSBvcGVuIHNlc3Npb24NCisgKiBAcmV0dXJuIHJlc3VsdCBvZiB0aGUgY2FsbA0KKyAqLw0KK05pRnBnYV9TdGF0dXMgTmlGcGdhX1Jlc2V0KE5pRnBnYV9TZXNzaW9uIHNlc3Npb24pOw0KKw0KKy8qKg0KKyAqIFJlLWRvd25sb2FkcyB0aGUgRlBHQSBiaXRzdHJlYW0gdG8gdGhlIHRhcmdldC4NCisgKg0KKyAqIEBwYXJhbSBzZXNzaW9uIGhhbmRsZSB0byBhIGN1cnJlbnRseSBvcGVuIHNlc3Npb24NCisgKiBAcmV0dXJuIHJlc3VsdCBvZiB0aGUgY2FsbA0KKyAqLw0KK05pRnBnYV9TdGF0dXMgTmlGcGdhX0Rvd25sb2FkKE5pRnBnYV9TZXNzaW9uIHNlc3Npb24pOw0KKw0KKy8qKg0KKyAqIFJlYWRzIGEgYm9vbGVhbiB2YWx1ZSBmcm9tIGEgZ2l2ZW4gaW5kaWNhdG9yIG9yIGNvbnRyb2wuDQorICoNCisgKiBAcGFyYW0gc2Vzc2lvbiBoYW5kbGUgdG8gYSBjdXJyZW50bHkgb3BlbiBzZXNzaW9uDQorICogQHBhcmFtIGluZGljYXRvciBpbmRpY2F0b3Igb3IgY29udHJvbCBmcm9tIHdoaWNoIHRvIHJlYWQNCisgKiBAcGFyYW0gdmFsdWUgb3V0cHV0cyB0aGUgdmFsdWUgdGhhdCB3YXMgcmVhZA0KKyAqIEByZXR1cm4gcmVzdWx0IG9mIHRoZSBjYWxsDQorICovDQorTmlGcGdhX1N0YXR1cyBOaUZwZ2FfUmVhZEJvb2woTmlGcGdhX1Nlc3Npb24gc2Vzc2lvbiwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAgICAgICBpbmRpY2F0b3IsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmlGcGdhX0Jvb2wqICAgdmFsdWUpOw0KKw0KKy8qKg0KKyAqIFJlYWRzIGEgc2lnbmVkIDgtYml0IGludGVnZXIgdmFsdWUgZnJvbSBhIGdpdmVuIGluZGljYXRvciBvciBjb250cm9sLg0KKyAqDQorICogQHBhcmFtIHNlc3Npb24gaGFuZGxlIHRvIGEgY3VycmVudGx5IG9wZW4gc2Vzc2lvbg0KKyAqIEBwYXJhbSBpbmRpY2F0b3IgaW5kaWNhdG9yIG9yIGNvbnRyb2wgZnJvbSB3aGljaCB0byByZWFkDQorICogQHBhcmFtIHZhbHVlIG91dHB1dHMgdGhlIHZhbHVlIHRoYXQgd2FzIHJlYWQNCisgKiBAcmV0dXJuIHJlc3VsdCBvZiB0aGUgY2FsbA0KKyAqLw0KK05pRnBnYV9TdGF0dXMgTmlGcGdhX1JlYWRJOChOaUZwZ2FfU2Vzc2lvbiBzZXNzaW9uLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAgICAgICBpbmRpY2F0b3IsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDhfdCogICAgICAgIHZhbHVlKTsNCisNCisvKioNCisgKiBSZWFkcyBhbiB1bnNpZ25lZCA4LWJpdCBpbnRlZ2VyIHZhbHVlIGZyb20gYSBnaXZlbiBpbmRpY2F0b3Igb3IgY29udHJvbC4NCisgKg0KKyAqIEBwYXJhbSBzZXNzaW9uIGhhbmRsZSB0byBhIGN1cnJlbnRseSBvcGVuIHNlc3Npb24NCisgKiBAcGFyYW0gaW5kaWNhdG9yIGluZGljYXRvciBvciBjb250cm9sIGZyb20gd2hpY2ggdG8gcmVhZA0KKyAqIEBwYXJhbSB2YWx1ZSBvdXRwdXRzIHRoZSB2YWx1ZSB0aGF0IHdhcyByZWFkDQorICogQHJldHVybiByZXN1bHQgb2YgdGhlIGNhbGwNCisgKi8NCitOaUZwZ2FfU3RhdHVzIE5pRnBnYV9SZWFkVTgoTmlGcGdhX1Nlc3Npb24gc2Vzc2lvbiwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgICAgICAgaW5kaWNhdG9yLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90KiAgICAgICB2YWx1ZSk7DQorDQorLyoqDQorICogUmVhZHMgYSBzaWduZWQgMTYtYml0IGludGVnZXIgdmFsdWUgZnJvbSBhIGdpdmVuIGluZGljYXRvciBvciBjb250cm9sLg0KKyAqDQorICogQHBhcmFtIHNlc3Npb24gaGFuZGxlIHRvIGEgY3VycmVudGx5IG9wZW4gc2Vzc2lvbg0KKyAqIEBwYXJhbSBpbmRpY2F0b3IgaW5kaWNhdG9yIG9yIGNvbnRyb2wgZnJvbSB3aGljaCB0byByZWFkDQorICogQHBhcmFtIHZhbHVlIG91dHB1dHMgdGhlIHZhbHVlIHRoYXQgd2FzIHJlYWQNCisgKiBAcmV0dXJuIHJlc3VsdCBvZiB0aGUgY2FsbA0KKyAqLw0KK05pRnBnYV9TdGF0dXMgTmlGcGdhX1JlYWRJMTYoTmlGcGdhX1Nlc3Npb24gc2Vzc2lvbiwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90ICAgICAgIGluZGljYXRvciwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDE2X3QqICAgICAgIHZhbHVlKTsNCisNCisvKioNCisgKiBSZWFkcyBhbiB1bnNpZ25lZCAxNi1iaXQgaW50ZWdlciB2YWx1ZSBmcm9tIGEgZ2l2ZW4gaW5kaWNhdG9yIG9yIGNvbnRyb2wuDQorICoNCisgKiBAcGFyYW0gc2Vzc2lvbiBoYW5kbGUgdG8gYSBjdXJyZW50bHkgb3BlbiBzZXNzaW9uDQorICogQHBhcmFtIGluZGljYXRvciBpbmRpY2F0b3Igb3IgY29udHJvbCBmcm9tIHdoaWNoIHRvIHJlYWQNCisgKiBAcGFyYW0gdmFsdWUgb3V0cHV0cyB0aGUgdmFsdWUgdGhhdCB3YXMgcmVhZA0KKyAqIEByZXR1cm4gcmVzdWx0IG9mIHRoZSBjYWxsDQorICovDQorTmlGcGdhX1N0YXR1cyBOaUZwZ2FfUmVhZFUxNihOaUZwZ2FfU2Vzc2lvbiBzZXNzaW9uLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgICAgICAgaW5kaWNhdG9yLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QqICAgICAgdmFsdWUpOw0KKw0KKy8qKg0KKyAqIFJlYWRzIGEgc2lnbmVkIDMyLWJpdCBpbnRlZ2VyIHZhbHVlIGZyb20gYSBnaXZlbiBpbmRpY2F0b3Igb3IgY29udHJvbC4NCisgKg0KKyAqIEBwYXJhbSBzZXNzaW9uIGhhbmRsZSB0byBhIGN1cnJlbnRseSBvcGVuIHNlc3Npb24NCisgKiBAcGFyYW0gaW5kaWNhdG9yIGluZGljYXRvciBvciBjb250cm9sIGZyb20gd2hpY2ggdG8gcmVhZA0KKyAqIEBwYXJhbSB2YWx1ZSBvdXRwdXRzIHRoZSB2YWx1ZSB0aGF0IHdhcyByZWFkDQorICogQHJldHVybiByZXN1bHQgb2YgdGhlIGNhbGwNCisgKi8NCitOaUZwZ2FfU3RhdHVzIE5pRnBnYV9SZWFkSTMyKE5pRnBnYV9TZXNzaW9uIHNlc3Npb24sDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAgICAgICBpbmRpY2F0b3IsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90KiAgICAgICB2YWx1ZSk7DQorDQorLyoqDQorICogUmVhZHMgYW4gdW5zaWduZWQgMzItYml0IGludGVnZXIgdmFsdWUgZnJvbSBhIGdpdmVuIGluZGljYXRvciBvciBjb250cm9sLg0KKyAqDQorICogQHBhcmFtIHNlc3Npb24gaGFuZGxlIHRvIGEgY3VycmVudGx5IG9wZW4gc2Vzc2lvbg0KKyAqIEBwYXJhbSBpbmRpY2F0b3IgaW5kaWNhdG9yIG9yIGNvbnRyb2wgZnJvbSB3aGljaCB0byByZWFkDQorICogQHBhcmFtIHZhbHVlIG91dHB1dHMgdGhlIHZhbHVlIHRoYXQgd2FzIHJlYWQNCisgKiBAcmV0dXJuIHJlc3VsdCBvZiB0aGUgY2FsbA0KKyAqLw0KK05pRnBnYV9TdGF0dXMgTmlGcGdhX1JlYWRVMzIoTmlGcGdhX1Nlc3Npb24gc2Vzc2lvbiwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90ICAgICAgIGluZGljYXRvciwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90KiAgICAgIHZhbHVlKTsNCisNCisvKioNCisgKiBSZWFkcyBhIHNpZ25lZCA2NC1iaXQgaW50ZWdlciB2YWx1ZSBmcm9tIGEgZ2l2ZW4gaW5kaWNhdG9yIG9yIGNvbnRyb2wuDQorICoNCisgKiBAcGFyYW0gc2Vzc2lvbiBoYW5kbGUgdG8gYSBjdXJyZW50bHkgb3BlbiBzZXNzaW9uDQorICogQHBhcmFtIGluZGljYXRvciBpbmRpY2F0b3Igb3IgY29udHJvbCBmcm9tIHdoaWNoIHRvIHJlYWQNCisgKiBAcGFyYW0gdmFsdWUgb3V0cHV0cyB0aGUgdmFsdWUgdGhhdCB3YXMgcmVhZA0KKyAqIEByZXR1cm4gcmVzdWx0IG9mIHRoZSBjYWxsDQorICovDQorTmlGcGdhX1N0YXR1cyBOaUZwZ2FfUmVhZEk2NChOaUZwZ2FfU2Vzc2lvbiBzZXNzaW9uLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgICAgICAgaW5kaWNhdG9yLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50NjRfdCogICAgICAgdmFsdWUpOw0KKw0KKy8qKg0KKyAqIFJlYWRzIGFuIHVuc2lnbmVkIDY0LWJpdCBpbnRlZ2VyIHZhbHVlIGZyb20gYSBnaXZlbiBpbmRpY2F0b3Igb3IgY29udHJvbC4NCisgKg0KKyAqIEBwYXJhbSBzZXNzaW9uIGhhbmRsZSB0byBhIGN1cnJlbnRseSBvcGVuIHNlc3Npb24NCisgKiBAcGFyYW0gaW5kaWNhdG9yIGluZGljYXRvciBvciBjb250cm9sIGZyb20gd2hpY2ggdG8gcmVhZA0KKyAqIEBwYXJhbSB2YWx1ZSBvdXRwdXRzIHRoZSB2YWx1ZSB0aGF0IHdhcyByZWFkDQorICogQHJldHVybiByZXN1bHQgb2YgdGhlIGNhbGwNCisgKi8NCitOaUZwZ2FfU3RhdHVzIE5pRnBnYV9SZWFkVTY0KE5pRnBnYV9TZXNzaW9uIHNlc3Npb24sDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAgICAgICBpbmRpY2F0b3IsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50NjRfdCogICAgICB2YWx1ZSk7DQorDQorLyoqDQorICogV3JpdGVzIGEgYm9vbGVhbiB2YWx1ZSB0byBhIGdpdmVuIGNvbnRyb2wgb3IgaW5kaWNhdG9yLg0KKyAqDQorICogQHBhcmFtIHNlc3Npb24gaGFuZGxlIHRvIGEgY3VycmVudGx5IG9wZW4gc2Vzc2lvbg0KKyAqIEBwYXJhbSBjb250cm9sIGNvbnRyb2wgb3IgaW5kaWNhdG9yIHRvIHdoaWNoIHRvIHdyaXRlDQorICogQHBhcmFtIHZhbHVlIHZhbHVlIHRvIHdyaXRlDQorICogQHJldHVybiByZXN1bHQgb2YgdGhlIGNhbGwNCisgKi8NCitOaUZwZ2FfU3RhdHVzIE5pRnBnYV9Xcml0ZUJvb2woTmlGcGdhX1Nlc3Npb24gc2Vzc2lvbiwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgICAgICAgY29udHJvbCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmlGcGdhX0Jvb2wgICAgdmFsdWUpOw0KKw0KKy8qKg0KKyAqIFdyaXRlcyBhIHNpZ25lZCA4LWJpdCBpbnRlZ2VyIHZhbHVlIHRvIGEgZ2l2ZW4gY29udHJvbCBvciBpbmRpY2F0b3IuDQorICoNCisgKiBAcGFyYW0gc2Vzc2lvbiBoYW5kbGUgdG8gYSBjdXJyZW50bHkgb3BlbiBzZXNzaW9uDQorICogQHBhcmFtIGNvbnRyb2wgY29udHJvbCBvciBpbmRpY2F0b3IgdG8gd2hpY2ggdG8gd3JpdGUNCisgKiBAcGFyYW0gdmFsdWUgdmFsdWUgdG8gd3JpdGUNCisgKiBAcmV0dXJuIHJlc3VsdCBvZiB0aGUgY2FsbA0KKyAqLw0KK05pRnBnYV9TdGF0dXMgTmlGcGdhX1dyaXRlSTgoTmlGcGdhX1Nlc3Npb24gc2Vzc2lvbiwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90ICAgICAgIGNvbnRyb2wsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQ4X3QgICAgICAgICB2YWx1ZSk7DQorDQorLyoqDQorICogV3JpdGVzIGFuIHVuc2lnbmVkIDgtYml0IGludGVnZXIgdmFsdWUgdG8gYSBnaXZlbiBjb250cm9sIG9yIGluZGljYXRvci4NCisgKg0KKyAqIEBwYXJhbSBzZXNzaW9uIGhhbmRsZSB0byBhIGN1cnJlbnRseSBvcGVuIHNlc3Npb24NCisgKiBAcGFyYW0gY29udHJvbCBjb250cm9sIG9yIGluZGljYXRvciB0byB3aGljaCB0byB3cml0ZQ0KKyAqIEBwYXJhbSB2YWx1ZSB2YWx1ZSB0byB3cml0ZQ0KKyAqIEByZXR1cm4gcmVzdWx0IG9mIHRoZSBjYWxsDQorICovDQorTmlGcGdhX1N0YXR1cyBOaUZwZ2FfV3JpdGVVOChOaUZwZ2FfU2Vzc2lvbiBzZXNzaW9uLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgICAgICAgY29udHJvbCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgICAgICAgIHZhbHVlKTsNCisNCisvKioNCisgKiBXcml0ZXMgYSBzaWduZWQgMTYtYml0IGludGVnZXIgdmFsdWUgdG8gYSBnaXZlbiBjb250cm9sIG9yIGluZGljYXRvci4NCisgKg0KKyAqIEBwYXJhbSBzZXNzaW9uIGhhbmRsZSB0byBhIGN1cnJlbnRseSBvcGVuIHNlc3Npb24NCisgKiBAcGFyYW0gY29udHJvbCBjb250cm9sIG9yIGluZGljYXRvciB0byB3aGljaCB0byB3cml0ZQ0KKyAqIEBwYXJhbSB2YWx1ZSB2YWx1ZSB0byB3cml0ZQ0KKyAqIEByZXR1cm4gcmVzdWx0IG9mIHRoZSBjYWxsDQorICovDQorTmlGcGdhX1N0YXR1cyBOaUZwZ2FfV3JpdGVJMTYoTmlGcGdhX1Nlc3Npb24gc2Vzc2lvbiwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAgICAgICBjb250cm9sLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDE2X3QgICAgICAgIHZhbHVlKTsNCisNCisvKioNCisgKiBXcml0ZXMgYW4gdW5zaWduZWQgMTYtYml0IGludGVnZXIgdmFsdWUgdG8gYSBnaXZlbiBjb250cm9sIG9yIGluZGljYXRvci4NCisgKg0KKyAqIEBwYXJhbSBzZXNzaW9uIGhhbmRsZSB0byBhIGN1cnJlbnRseSBvcGVuIHNlc3Npb24NCisgKiBAcGFyYW0gY29udHJvbCBjb250cm9sIG9yIGluZGljYXRvciB0byB3aGljaCB0byB3cml0ZQ0KKyAqIEBwYXJhbSB2YWx1ZSB2YWx1ZSB0byB3cml0ZQ0KKyAqIEByZXR1cm4gcmVzdWx0IG9mIHRoZSBjYWxsDQorICovDQorTmlGcGdhX1N0YXR1cyBOaUZwZ2FfV3JpdGVVMTYoTmlGcGdhX1Nlc3Npb24gc2Vzc2lvbiwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAgICAgICBjb250cm9sLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90ICAgICAgIHZhbHVlKTsNCisNCisvKioNCisgKiBXcml0ZXMgYSBzaWduZWQgMzItYml0IGludGVnZXIgdmFsdWUgdG8gYSBnaXZlbiBjb250cm9sIG9yIGluZGljYXRvci4NCisgKg0KKyAqIEBwYXJhbSBzZXNzaW9uIGhhbmRsZSB0byBhIGN1cnJlbnRseSBvcGVuIHNlc3Npb24NCisgKiBAcGFyYW0gY29udHJvbCBjb250cm9sIG9yIGluZGljYXRvciB0byB3aGljaCB0byB3cml0ZQ0KKyAqIEBwYXJhbSB2YWx1ZSB2YWx1ZSB0byB3cml0ZQ0KKyAqIEByZXR1cm4gcmVzdWx0IG9mIHRoZSBjYWxsDQorICovDQorTmlGcGdhX1N0YXR1cyBOaUZwZ2FfV3JpdGVJMzIoTmlGcGdhX1Nlc3Npb24gc2Vzc2lvbiwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAgICAgICBjb250cm9sLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgICAgICAgIHZhbHVlKTsNCisNCisvKioNCisgKiBXcml0ZXMgYW4gdW5zaWduZWQgMzItYml0IGludGVnZXIgdmFsdWUgdG8gYSBnaXZlbiBjb250cm9sIG9yIGluZGljYXRvci4NCisgKg0KKyAqIEBwYXJhbSBzZXNzaW9uIGhhbmRsZSB0byBhIGN1cnJlbnRseSBvcGVuIHNlc3Npb24NCisgKiBAcGFyYW0gY29udHJvbCBjb250cm9sIG9yIGluZGljYXRvciB0byB3aGljaCB0byB3cml0ZQ0KKyAqIEBwYXJhbSB2YWx1ZSB2YWx1ZSB0byB3cml0ZQ0KKyAqIEByZXR1cm4gcmVzdWx0IG9mIHRoZSBjYWxsDQorICovDQorTmlGcGdhX1N0YXR1cyBOaUZwZ2FfV3JpdGVVMzIoTmlGcGdhX1Nlc3Npb24gc2Vzc2lvbiwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAgICAgICBjb250cm9sLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90ICAgICAgIHZhbHVlKTsNCisNCisvKioNCisgKiBXcml0ZXMgYSBzaWduZWQgNjQtYml0IGludGVnZXIgdmFsdWUgdG8gYSBnaXZlbiBjb250cm9sIG9yIGluZGljYXRvci4NCisgKg0KKyAqIEBwYXJhbSBzZXNzaW9uIGhhbmRsZSB0byBhIGN1cnJlbnRseSBvcGVuIHNlc3Npb24NCisgKiBAcGFyYW0gY29udHJvbCBjb250cm9sIG9yIGluZGljYXRvciB0byB3aGljaCB0byB3cml0ZQ0KKyAqIEBwYXJhbSB2YWx1ZSB2YWx1ZSB0byB3cml0ZQ0KKyAqIEByZXR1cm4gcmVzdWx0IG9mIHRoZSBjYWxsDQorICovDQorTmlGcGdhX1N0YXR1cyBOaUZwZ2FfV3JpdGVJNjQoTmlGcGdhX1Nlc3Npb24gc2Vzc2lvbiwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAgICAgICBjb250cm9sLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDY0X3QgICAgICAgIHZhbHVlKTsNCisNCisvKioNCisgKiBXcml0ZXMgYW4gdW5zaWduZWQgNjQtYml0IGludGVnZXIgdmFsdWUgdG8gYSBnaXZlbiBjb250cm9sIG9yIGluZGljYXRvci4NCisgKg0KKyAqIEBwYXJhbSBzZXNzaW9uIGhhbmRsZSB0byBhIGN1cnJlbnRseSBvcGVuIHNlc3Npb24NCisgKiBAcGFyYW0gY29udHJvbCBjb250cm9sIG9yIGluZGljYXRvciB0byB3aGljaCB0byB3cml0ZQ0KKyAqIEBwYXJhbSB2YWx1ZSB2YWx1ZSB0byB3cml0ZQ0KKyAqIEByZXR1cm4gcmVzdWx0IG9mIHRoZSBjYWxsDQorICovDQorTmlGcGdhX1N0YXR1cyBOaUZwZ2FfV3JpdGVVNjQoTmlGcGdhX1Nlc3Npb24gc2Vzc2lvbiwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAgICAgICBjb250cm9sLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90ICAgICAgIHZhbHVlKTsNCisNCisvKioNCisgKiBSZWFkcyBhbiBlbnRpcmUgYXJyYXkgb2YgYm9vbGVhbiB2YWx1ZXMgZnJvbSBhIGdpdmVuIGFycmF5IGluZGljYXRvciBvcg0KKyAqIGNvbnRyb2wuDQorICoNCisgKiBAd2FybmluZyBUaGUgc2l6ZSBwYXNzZWQgbXVzdCBiZSB0aGUgZXhhY3QgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZQ0KKyAqICAgICAgICAgIGluZGljYXRvciBvciBjb250cm9sLg0KKyAqDQorICogQHBhcmFtIHNlc3Npb24gaGFuZGxlIHRvIGEgY3VycmVudGx5IG9wZW4gc2Vzc2lvbg0KKyAqIEBwYXJhbSBpbmRpY2F0b3IgaW5kaWNhdG9yIG9yIGNvbnRyb2wgZnJvbSB3aGljaCB0byByZWFkDQorICogQHBhcmFtIGFycmF5IG91dHB1dHMgdGhlIGVudGlyZSBhcnJheSB0aGF0IHdhcyByZWFkDQorICogQHBhcmFtIHNpemUgZXhhY3QgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBpbmRpY2F0b3Igb3IgY29udHJvbA0KKyAqIEByZXR1cm4gcmVzdWx0IG9mIHRoZSBjYWxsDQorICovDQorTmlGcGdhX1N0YXR1cyBOaUZwZ2FfUmVhZEFycmF5Qm9vbChOaUZwZ2FfU2Vzc2lvbiBzZXNzaW9uLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgICAgICAgaW5kaWNhdG9yLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmlGcGdhX0Jvb2wqICAgYXJyYXksDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgICAgICAgICBzaXplKTsNCisNCisvKioNCisgKiBSZWFkcyBhbiBlbnRpcmUgYXJyYXkgb2Ygc2lnbmVkIDgtYml0IGludGVnZXIgdmFsdWVzIGZyb20gYSBnaXZlbiBhcnJheQ0KKyAqIGluZGljYXRvciBvciBjb250cm9sLg0KKyAqDQorICogQHdhcm5pbmcgVGhlIHNpemUgcGFzc2VkIG11c3QgYmUgdGhlIGV4YWN0IG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUNCisgKiAgICAgICAgICBpbmRpY2F0b3Igb3IgY29udHJvbC4NCisgKg0KKyAqIEBwYXJhbSBzZXNzaW9uIGhhbmRsZSB0byBhIGN1cnJlbnRseSBvcGVuIHNlc3Npb24NCisgKiBAcGFyYW0gaW5kaWNhdG9yIGluZGljYXRvciBvciBjb250cm9sIGZyb20gd2hpY2ggdG8gcmVhZA0KKyAqIEBwYXJhbSBhcnJheSBvdXRwdXRzIHRoZSBlbnRpcmUgYXJyYXkgdGhhdCB3YXMgcmVhZA0KKyAqIEBwYXJhbSBzaXplIGV4YWN0IG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgaW5kaWNhdG9yIG9yIGNvbnRyb2wNCisgKiBAcmV0dXJuIHJlc3VsdCBvZiB0aGUgY2FsbA0KKyAqLw0KK05pRnBnYV9TdGF0dXMgTmlGcGdhX1JlYWRBcnJheUk4KE5pRnBnYV9TZXNzaW9uIHNlc3Npb24sDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgICAgICAgaW5kaWNhdG9yLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDhfdCogICAgICAgIGFycmF5LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAgICAgICAgIHNpemUpOw0KKw0KKy8qKg0KKyAqIFJlYWRzIGFuIGVudGlyZSBhcnJheSBvZiB1bnNpZ25lZCA4LWJpdCBpbnRlZ2VyIHZhbHVlcyBmcm9tIGEgZ2l2ZW4gYXJyYXkNCisgKiBpbmRpY2F0b3Igb3IgY29udHJvbC4NCisgKg0KKyAqIEB3YXJuaW5nIFRoZSBzaXplIHBhc3NlZCBtdXN0IGJlIHRoZSBleGFjdCBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlDQorICogICAgICAgICAgaW5kaWNhdG9yIG9yIGNvbnRyb2wuDQorICoNCisgKiBAcGFyYW0gc2Vzc2lvbiBoYW5kbGUgdG8gYSBjdXJyZW50bHkgb3BlbiBzZXNzaW9uDQorICogQHBhcmFtIGluZGljYXRvciBpbmRpY2F0b3Igb3IgY29udHJvbCBmcm9tIHdoaWNoIHRvIHJlYWQNCisgKiBAcGFyYW0gYXJyYXkgb3V0cHV0cyB0aGUgZW50aXJlIGFycmF5IHRoYXQgd2FzIHJlYWQNCisgKiBAcGFyYW0gc2l6ZSBleGFjdCBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIGluZGljYXRvciBvciBjb250cm9sDQorICogQHJldHVybiByZXN1bHQgb2YgdGhlIGNhbGwNCisgKi8NCitOaUZwZ2FfU3RhdHVzIE5pRnBnYV9SZWFkQXJyYXlVOChOaUZwZ2FfU2Vzc2lvbiBzZXNzaW9uLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90ICAgICAgIGluZGljYXRvciwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90KiAgICAgICBhcnJheSwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgICAgICAgICBzaXplKTsNCisNCisvKioNCisgKiBSZWFkcyBhbiBlbnRpcmUgYXJyYXkgb2Ygc2lnbmVkIDE2LWJpdCBpbnRlZ2VyIHZhbHVlcyBmcm9tIGEgZ2l2ZW4gYXJyYXkNCisgKiBpbmRpY2F0b3Igb3IgY29udHJvbC4NCisgKg0KKyAqIEB3YXJuaW5nIFRoZSBzaXplIHBhc3NlZCBtdXN0IGJlIHRoZSBleGFjdCBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlDQorICogICAgICAgICAgaW5kaWNhdG9yIG9yIGNvbnRyb2wuDQorICoNCisgKiBAcGFyYW0gc2Vzc2lvbiBoYW5kbGUgdG8gYSBjdXJyZW50bHkgb3BlbiBzZXNzaW9uDQorICogQHBhcmFtIGluZGljYXRvciBpbmRpY2F0b3Igb3IgY29udHJvbCBmcm9tIHdoaWNoIHRvIHJlYWQNCisgKiBAcGFyYW0gYXJyYXkgb3V0cHV0cyB0aGUgZW50aXJlIGFycmF5IHRoYXQgd2FzIHJlYWQNCisgKiBAcGFyYW0gc2l6ZSBleGFjdCBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIGluZGljYXRvciBvciBjb250cm9sDQorICogQHJldHVybiByZXN1bHQgb2YgdGhlIGNhbGwNCisgKi8NCitOaUZwZ2FfU3RhdHVzIE5pRnBnYV9SZWFkQXJyYXlJMTYoTmlGcGdhX1Nlc3Npb24gc2Vzc2lvbiwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgICAgICAgaW5kaWNhdG9yLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQxNl90KiAgICAgICBhcnJheSwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICAgICAgICAgc2l6ZSk7DQorDQorLyoqDQorICogUmVhZHMgYW4gZW50aXJlIGFycmF5IG9mIHVuc2lnbmVkIDE2LWJpdCBpbnRlZ2VyIHZhbHVlcyBmcm9tIGEgZ2l2ZW4gYXJyYXkNCisgKiBpbmRpY2F0b3Igb3IgY29udHJvbC4NCisgKg0KKyAqIEB3YXJuaW5nIFRoZSBzaXplIHBhc3NlZCBtdXN0IGJlIHRoZSBleGFjdCBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlDQorICogICAgICAgICAgaW5kaWNhdG9yIG9yIGNvbnRyb2wuDQorICoNCisgKiBAcGFyYW0gc2Vzc2lvbiBoYW5kbGUgdG8gYSBjdXJyZW50bHkgb3BlbiBzZXNzaW9uDQorICogQHBhcmFtIGluZGljYXRvciBpbmRpY2F0b3Igb3IgY29udHJvbCBmcm9tIHdoaWNoIHRvIHJlYWQNCisgKiBAcGFyYW0gYXJyYXkgb3V0cHV0cyB0aGUgZW50aXJlIGFycmF5IHRoYXQgd2FzIHJlYWQNCisgKiBAcGFyYW0gc2l6ZSBleGFjdCBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIGluZGljYXRvciBvciBjb250cm9sDQorICogQHJldHVybiByZXN1bHQgb2YgdGhlIGNhbGwNCisgKi8NCitOaUZwZ2FfU3RhdHVzIE5pRnBnYV9SZWFkQXJyYXlVMTYoTmlGcGdhX1Nlc3Npb24gc2Vzc2lvbiwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgICAgICAgaW5kaWNhdG9yLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCogICAgICBhcnJheSwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICAgICAgICAgc2l6ZSk7DQorDQorLyoqDQorICogUmVhZHMgYW4gZW50aXJlIGFycmF5IG9mIHNpZ25lZCAzMi1iaXQgaW50ZWdlciB2YWx1ZXMgZnJvbSBhIGdpdmVuIGFycmF5DQorICogaW5kaWNhdG9yIG9yIGNvbnRyb2wuDQorICoNCisgKiBAd2FybmluZyBUaGUgc2l6ZSBwYXNzZWQgbXVzdCBiZSB0aGUgZXhhY3QgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZQ0KKyAqICAgICAgICAgIGluZGljYXRvciBvciBjb250cm9sLg0KKyAqDQorICogQHBhcmFtIHNlc3Npb24gaGFuZGxlIHRvIGEgY3VycmVudGx5IG9wZW4gc2Vzc2lvbg0KKyAqIEBwYXJhbSBpbmRpY2F0b3IgaW5kaWNhdG9yIG9yIGNvbnRyb2wgZnJvbSB3aGljaCB0byByZWFkDQorICogQHBhcmFtIGFycmF5IG91dHB1dHMgdGhlIGVudGlyZSBhcnJheSB0aGF0IHdhcyByZWFkDQorICogQHBhcmFtIHNpemUgZXhhY3QgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBpbmRpY2F0b3Igb3IgY29udHJvbA0KKyAqIEByZXR1cm4gcmVzdWx0IG9mIHRoZSBjYWxsDQorICovDQorTmlGcGdhX1N0YXR1cyBOaUZwZ2FfUmVhZEFycmF5STMyKE5pRnBnYV9TZXNzaW9uIHNlc3Npb24sDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90ICAgICAgIGluZGljYXRvciwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCogICAgICAgYXJyYXksDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAgICAgICAgIHNpemUpOw0KKw0KKy8qKg0KKyAqIFJlYWRzIGFuIGVudGlyZSBhcnJheSBvZiB1bnNpZ25lZCAzMi1iaXQgaW50ZWdlciB2YWx1ZXMgZnJvbSBhIGdpdmVuIGFycmF5DQorICogaW5kaWNhdG9yIG9yIGNvbnRyb2wuDQorICoNCisgKiBAd2FybmluZyBUaGUgc2l6ZSBwYXNzZWQgbXVzdCBiZSB0aGUgZXhhY3QgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZQ0KKyAqICAgICAgICAgIGluZGljYXRvciBvciBjb250cm9sLg0KKyAqDQorICogQHBhcmFtIHNlc3Npb24gaGFuZGxlIHRvIGEgY3VycmVudGx5IG9wZW4gc2Vzc2lvbg0KKyAqIEBwYXJhbSBpbmRpY2F0b3IgaW5kaWNhdG9yIG9yIGNvbnRyb2wgZnJvbSB3aGljaCB0byByZWFkDQorICogQHBhcmFtIGFycmF5IG91dHB1dHMgdGhlIGVudGlyZSBhcnJheSB0aGF0IHdhcyByZWFkDQorICogQHBhcmFtIHNpemUgZXhhY3QgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBpbmRpY2F0b3Igb3IgY29udHJvbA0KKyAqIEByZXR1cm4gcmVzdWx0IG9mIHRoZSBjYWxsDQorICovDQorTmlGcGdhX1N0YXR1cyBOaUZwZ2FfUmVhZEFycmF5VTMyKE5pRnBnYV9TZXNzaW9uIHNlc3Npb24sDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90ICAgICAgIGluZGljYXRvciwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QqICAgICAgYXJyYXksDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAgICAgICAgIHNpemUpOw0KKw0KKy8qKg0KKyAqIFJlYWRzIGFuIGVudGlyZSBhcnJheSBvZiBzaWduZWQgNjQtYml0IGludGVnZXIgdmFsdWVzIGZyb20gYSBnaXZlbiBhcnJheQ0KKyAqIGluZGljYXRvciBvciBjb250cm9sLg0KKyAqDQorICogQHdhcm5pbmcgVGhlIHNpemUgcGFzc2VkIG11c3QgYmUgdGhlIGV4YWN0IG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUNCisgKiAgICAgICAgICBpbmRpY2F0b3Igb3IgY29udHJvbC4NCisgKg0KKyAqIEBwYXJhbSBzZXNzaW9uIGhhbmRsZSB0byBhIGN1cnJlbnRseSBvcGVuIHNlc3Npb24NCisgKiBAcGFyYW0gaW5kaWNhdG9yIGluZGljYXRvciBvciBjb250cm9sIGZyb20gd2hpY2ggdG8gcmVhZA0KKyAqIEBwYXJhbSBhcnJheSBvdXRwdXRzIHRoZSBlbnRpcmUgYXJyYXkgdGhhdCB3YXMgcmVhZA0KKyAqIEBwYXJhbSBzaXplIGV4YWN0IG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgaW5kaWNhdG9yIG9yIGNvbnRyb2wNCisgKiBAcmV0dXJuIHJlc3VsdCBvZiB0aGUgY2FsbA0KKyAqLw0KK05pRnBnYV9TdGF0dXMgTmlGcGdhX1JlYWRBcnJheUk2NChOaUZwZ2FfU2Vzc2lvbiBzZXNzaW9uLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAgICAgICBpbmRpY2F0b3IsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDY0X3QqICAgICAgIGFycmF5LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgICAgICAgICBzaXplKTsNCisNCisvKioNCisgKiBSZWFkcyBhbiBlbnRpcmUgYXJyYXkgb2YgdW5zaWduZWQgNjQtYml0IGludGVnZXIgdmFsdWVzIGZyb20gYSBnaXZlbiBhcnJheQ0KKyAqIGluZGljYXRvciBvciBjb250cm9sLg0KKyAqDQorICogQHdhcm5pbmcgVGhlIHNpemUgcGFzc2VkIG11c3QgYmUgdGhlIGV4YWN0IG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUNCisgKiAgICAgICAgICBpbmRpY2F0b3Igb3IgY29udHJvbC4NCisgKg0KKyAqIEBwYXJhbSBzZXNzaW9uIGhhbmRsZSB0byBhIGN1cnJlbnRseSBvcGVuIHNlc3Npb24NCisgKiBAcGFyYW0gaW5kaWNhdG9yIGluZGljYXRvciBvciBjb250cm9sIGZyb20gd2hpY2ggdG8gcmVhZA0KKyAqIEBwYXJhbSBhcnJheSBvdXRwdXRzIHRoZSBlbnRpcmUgYXJyYXkgdGhhdCB3YXMgcmVhZA0KKyAqIEBwYXJhbSBzaXplIGV4YWN0IG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgaW5kaWNhdG9yIG9yIGNvbnRyb2wNCisgKiBAcmV0dXJuIHJlc3VsdCBvZiB0aGUgY2FsbA0KKyAqLw0KK05pRnBnYV9TdGF0dXMgTmlGcGdhX1JlYWRBcnJheVU2NChOaUZwZ2FfU2Vzc2lvbiBzZXNzaW9uLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAgICAgICBpbmRpY2F0b3IsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90KiAgICAgIGFycmF5LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgICAgICAgICBzaXplKTsNCisNCisvKioNCisgKiBXcml0ZXMgYW4gZW50aXJlIGFycmF5IG9mIGJvb2xlYW4gdmFsdWVzIHRvIGEgZ2l2ZW4gYXJyYXkgY29udHJvbCBvcg0KKyAqIGluZGljYXRvci4NCisgKg0KKyAqIEB3YXJuaW5nIFRoZSBzaXplIHBhc3NlZCBtdXN0IGJlIHRoZSBleGFjdCBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlDQorICogICAgICAgICAgY29udHJvbCBvciBpbmRpY2F0b3IuDQorICoNCisgKiBAcGFyYW0gc2Vzc2lvbiBoYW5kbGUgdG8gYSBjdXJyZW50bHkgb3BlbiBzZXNzaW9uDQorICogQHBhcmFtIGNvbnRyb2wgY29udHJvbCBvciBpbmRpY2F0b3IgdG8gd2hpY2ggdG8gd3JpdGUNCisgKiBAcGFyYW0gYXJyYXkgZW50aXJlIGFycmF5IHRvIHdyaXRlDQorICogQHBhcmFtIHNpemUgZXhhY3QgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBjb250cm9sIG9yIGluZGljYXRvcg0KKyAqIEByZXR1cm4gcmVzdWx0IG9mIHRoZSBjYWxsDQorICovDQorTmlGcGdhX1N0YXR1cyBOaUZwZ2FfV3JpdGVBcnJheUJvb2woTmlGcGdhX1Nlc3Npb24gICAgIHNlc3Npb24sDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgICAgICAgICAgIGNvbnRyb2wsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgTmlGcGdhX0Jvb2wqIGFycmF5LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAgICAgICAgICAgICBzaXplKTsNCisNCisvKioNCisgKiBXcml0ZXMgYW4gZW50aXJlIGFycmF5IG9mIHNpZ25lZCA4LWJpdCBpbnRlZ2VyIHZhbHVlcyB0byBhIGdpdmVuIGFycmF5DQorICogY29udHJvbCBvciBpbmRpY2F0b3IuDQorICoNCisgKiBAd2FybmluZyBUaGUgc2l6ZSBwYXNzZWQgbXVzdCBiZSB0aGUgZXhhY3QgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZQ0KKyAqICAgICAgICAgIGNvbnRyb2wgb3IgaW5kaWNhdG9yLg0KKyAqDQorICogQHBhcmFtIHNlc3Npb24gaGFuZGxlIHRvIGEgY3VycmVudGx5IG9wZW4gc2Vzc2lvbg0KKyAqIEBwYXJhbSBjb250cm9sIGNvbnRyb2wgb3IgaW5kaWNhdG9yIHRvIHdoaWNoIHRvIHdyaXRlDQorICogQHBhcmFtIGFycmF5IGVudGlyZSBhcnJheSB0byB3cml0ZQ0KKyAqIEBwYXJhbSBzaXplIGV4YWN0IG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgY29udHJvbCBvciBpbmRpY2F0b3INCisgKiBAcmV0dXJuIHJlc3VsdCBvZiB0aGUgY2FsbA0KKyAqLw0KK05pRnBnYV9TdGF0dXMgTmlGcGdhX1dyaXRlQXJyYXlJOChOaUZwZ2FfU2Vzc2lvbiBzZXNzaW9uLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAgICAgICBjb250cm9sLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQ4X3QqICBhcnJheSwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICAgICAgICAgc2l6ZSk7DQorDQorLyoqDQorICogV3JpdGVzIGFuIGVudGlyZSBhcnJheSBvZiB1bnNpZ25lZCA4LWJpdCBpbnRlZ2VyIHZhbHVlcyB0byBhIGdpdmVuIGFycmF5DQorICogY29udHJvbCBvciBpbmRpY2F0b3IuDQorICoNCisgKiBAd2FybmluZyBUaGUgc2l6ZSBwYXNzZWQgbXVzdCBiZSB0aGUgZXhhY3QgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZQ0KKyAqICAgICAgICAgIGNvbnRyb2wgb3IgaW5kaWNhdG9yLg0KKyAqDQorICogQHBhcmFtIHNlc3Npb24gaGFuZGxlIHRvIGEgY3VycmVudGx5IG9wZW4gc2Vzc2lvbg0KKyAqIEBwYXJhbSBjb250cm9sIGNvbnRyb2wgb3IgaW5kaWNhdG9yIHRvIHdoaWNoIHRvIHdyaXRlDQorICogQHBhcmFtIGFycmF5IGVudGlyZSBhcnJheSB0byB3cml0ZQ0KKyAqIEBwYXJhbSBzaXplIGV4YWN0IG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgY29udHJvbCBvciBpbmRpY2F0b3INCisgKiBAcmV0dXJuIHJlc3VsdCBvZiB0aGUgY2FsbA0KKyAqLw0KK05pRnBnYV9TdGF0dXMgTmlGcGdhX1dyaXRlQXJyYXlVOChOaUZwZ2FfU2Vzc2lvbiBzZXNzaW9uLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAgICAgICBjb250cm9sLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90KiBhcnJheSwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICAgICAgICAgc2l6ZSk7DQorDQorLyoqDQorICogV3JpdGVzIGFuIGVudGlyZSBhcnJheSBvZiBzaWduZWQgMTYtYml0IGludGVnZXIgdmFsdWVzIHRvIGEgZ2l2ZW4gYXJyYXkNCisgKiBjb250cm9sIG9yIGluZGljYXRvci4NCisgKg0KKyAqIEB3YXJuaW5nIFRoZSBzaXplIHBhc3NlZCBtdXN0IGJlIHRoZSBleGFjdCBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlDQorICogICAgICAgICAgY29udHJvbCBvciBpbmRpY2F0b3IuDQorICoNCisgKiBAcGFyYW0gc2Vzc2lvbiBoYW5kbGUgdG8gYSBjdXJyZW50bHkgb3BlbiBzZXNzaW9uDQorICogQHBhcmFtIGNvbnRyb2wgY29udHJvbCBvciBpbmRpY2F0b3IgdG8gd2hpY2ggdG8gd3JpdGUNCisgKiBAcGFyYW0gYXJyYXkgZW50aXJlIGFycmF5IHRvIHdyaXRlDQorICogQHBhcmFtIHNpemUgZXhhY3QgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBjb250cm9sIG9yIGluZGljYXRvcg0KKyAqIEByZXR1cm4gcmVzdWx0IG9mIHRoZSBjYWxsDQorICovDQorTmlGcGdhX1N0YXR1cyBOaUZwZ2FfV3JpdGVBcnJheUkxNihOaUZwZ2FfU2Vzc2lvbiBzZXNzaW9uLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgICAgICAgY29udHJvbCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludDE2X3QqIGFycmF5LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICAgICAgICAgc2l6ZSk7DQorDQorLyoqDQorICogV3JpdGVzIGFuIGVudGlyZSBhcnJheSBvZiB1bnNpZ25lZCAxNi1iaXQgaW50ZWdlciB2YWx1ZXMgdG8gYSBnaXZlbiBhcnJheQ0KKyAqIGNvbnRyb2wgb3IgaW5kaWNhdG9yLg0KKyAqDQorICogQHdhcm5pbmcgVGhlIHNpemUgcGFzc2VkIG11c3QgYmUgdGhlIGV4YWN0IG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUNCisgKiAgICAgICAgICBjb250cm9sIG9yIGluZGljYXRvci4NCisgKg0KKyAqIEBwYXJhbSBzZXNzaW9uIGhhbmRsZSB0byBhIGN1cnJlbnRseSBvcGVuIHNlc3Npb24NCisgKiBAcGFyYW0gY29udHJvbCBjb250cm9sIG9yIGluZGljYXRvciB0byB3aGljaCB0byB3cml0ZQ0KKyAqIEBwYXJhbSBhcnJheSBlbnRpcmUgYXJyYXkgdG8gd3JpdGUNCisgKiBAcGFyYW0gc2l6ZSBleGFjdCBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIGNvbnRyb2wgb3IgaW5kaWNhdG9yDQorICogQHJldHVybiByZXN1bHQgb2YgdGhlIGNhbGwNCisgKi8NCitOaUZwZ2FfU3RhdHVzIE5pRnBnYV9Xcml0ZUFycmF5VTE2KE5pRnBnYV9TZXNzaW9uICBzZXNzaW9uLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgICAgICAgIGNvbnRyb2wsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50MTZfdCogYXJyYXksDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgICAgICAgICAgc2l6ZSk7DQorDQorLyoqDQorICogV3JpdGVzIGFuIGVudGlyZSBhcnJheSBvZiBzaWduZWQgMzItYml0IGludGVnZXIgdmFsdWVzIHRvIGEgZ2l2ZW4gYXJyYXkNCisgKiBjb250cm9sIG9yIGluZGljYXRvci4NCisgKg0KKyAqIEB3YXJuaW5nIFRoZSBzaXplIHBhc3NlZCBtdXN0IGJlIHRoZSBleGFjdCBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlDQorICogICAgICAgICAgY29udHJvbCBvciBpbmRpY2F0b3IuDQorICoNCisgKiBAcGFyYW0gc2Vzc2lvbiBoYW5kbGUgdG8gYSBjdXJyZW50bHkgb3BlbiBzZXNzaW9uDQorICogQHBhcmFtIGNvbnRyb2wgY29udHJvbCBvciBpbmRpY2F0b3IgdG8gd2hpY2ggdG8gd3JpdGUNCisgKiBAcGFyYW0gYXJyYXkgZW50aXJlIGFycmF5IHRvIHdyaXRlDQorICogQHBhcmFtIHNpemUgZXhhY3QgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBjb250cm9sIG9yIGluZGljYXRvcg0KKyAqIEByZXR1cm4gcmVzdWx0IG9mIHRoZSBjYWxsDQorICovDQorTmlGcGdhX1N0YXR1cyBOaUZwZ2FfV3JpdGVBcnJheUkzMihOaUZwZ2FfU2Vzc2lvbiBzZXNzaW9uLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgICAgICAgY29udHJvbCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludDMyX3QqIGFycmF5LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICAgICAgICAgc2l6ZSk7DQorDQorLyoqDQorICogV3JpdGVzIGFuIGVudGlyZSBhcnJheSBvZiB1bnNpZ25lZCAzMi1iaXQgaW50ZWdlciB2YWx1ZXMgdG8gYSBnaXZlbiBhcnJheQ0KKyAqIGNvbnRyb2wgb3IgaW5kaWNhdG9yLg0KKyAqDQorICogQHdhcm5pbmcgVGhlIHNpemUgcGFzc2VkIG11c3QgYmUgdGhlIGV4YWN0IG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUNCisgKiAgICAgICAgICBjb250cm9sIG9yIGluZGljYXRvci4NCisgKg0KKyAqIEBwYXJhbSBzZXNzaW9uIGhhbmRsZSB0byBhIGN1cnJlbnRseSBvcGVuIHNlc3Npb24NCisgKiBAcGFyYW0gY29udHJvbCBjb250cm9sIG9yIGluZGljYXRvciB0byB3aGljaCB0byB3cml0ZQ0KKyAqIEBwYXJhbSBhcnJheSBlbnRpcmUgYXJyYXkgdG8gd3JpdGUNCisgKiBAcGFyYW0gc2l6ZSBleGFjdCBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIGNvbnRyb2wgb3IgaW5kaWNhdG9yDQorICogQHJldHVybiByZXN1bHQgb2YgdGhlIGNhbGwNCisgKi8NCitOaUZwZ2FfU3RhdHVzIE5pRnBnYV9Xcml0ZUFycmF5VTMyKE5pRnBnYV9TZXNzaW9uICBzZXNzaW9uLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgICAgICAgIGNvbnRyb2wsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50MzJfdCogYXJyYXksDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgICAgICAgICAgc2l6ZSk7DQorDQorLyoqDQorICogV3JpdGVzIGFuIGVudGlyZSBhcnJheSBvZiBzaWduZWQgNjQtYml0IGludGVnZXIgdmFsdWVzIHRvIGEgZ2l2ZW4gYXJyYXkNCisgKiBjb250cm9sIG9yIGluZGljYXRvci4NCisgKg0KKyAqIEB3YXJuaW5nIFRoZSBzaXplIHBhc3NlZCBtdXN0IGJlIHRoZSBleGFjdCBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlDQorICogICAgICAgICAgY29udHJvbCBvciBpbmRpY2F0b3IuDQorICoNCisgKiBAcGFyYW0gc2Vzc2lvbiBoYW5kbGUgdG8gYSBjdXJyZW50bHkgb3BlbiBzZXNzaW9uDQorICogQHBhcmFtIGNvbnRyb2wgY29udHJvbCBvciBpbmRpY2F0b3IgdG8gd2hpY2ggdG8gd3JpdGUNCisgKiBAcGFyYW0gYXJyYXkgZW50aXJlIGFycmF5IHRvIHdyaXRlDQorICogQHBhcmFtIHNpemUgZXhhY3QgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBjb250cm9sIG9yIGluZGljYXRvcg0KKyAqIEByZXR1cm4gcmVzdWx0IG9mIHRoZSBjYWxsDQorICovDQorTmlGcGdhX1N0YXR1cyBOaUZwZ2FfV3JpdGVBcnJheUk2NChOaUZwZ2FfU2Vzc2lvbiBzZXNzaW9uLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgICAgICAgY29udHJvbCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludDY0X3QqIGFycmF5LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICAgICAgICAgc2l6ZSk7DQorDQorLyoqDQorICogV3JpdGVzIGFuIGVudGlyZSBhcnJheSBvZiB1bnNpZ25lZCA2NC1iaXQgaW50ZWdlciB2YWx1ZXMgdG8gYSBnaXZlbiBhcnJheQ0KKyAqIGNvbnRyb2wgb3IgaW5kaWNhdG9yLg0KKyAqDQorICogQHdhcm5pbmcgVGhlIHNpemUgcGFzc2VkIG11c3QgYmUgdGhlIGV4YWN0IG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUNCisgKiAgICAgICAgICBjb250cm9sIG9yIGluZGljYXRvci4NCisgKg0KKyAqIEBwYXJhbSBzZXNzaW9uIGhhbmRsZSB0byBhIGN1cnJlbnRseSBvcGVuIHNlc3Npb24NCisgKiBAcGFyYW0gY29udHJvbCBjb250cm9sIG9yIGluZGljYXRvciB0byB3aGljaCB0byB3cml0ZQ0KKyAqIEBwYXJhbSBhcnJheSBlbnRpcmUgYXJyYXkgdG8gd3JpdGUNCisgKiBAcGFyYW0gc2l6ZSBleGFjdCBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIGNvbnRyb2wgb3IgaW5kaWNhdG9yDQorICogQHJldHVybiByZXN1bHQgb2YgdGhlIGNhbGwNCisgKi8NCitOaUZwZ2FfU3RhdHVzIE5pRnBnYV9Xcml0ZUFycmF5VTY0KE5pRnBnYV9TZXNzaW9uICBzZXNzaW9uLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgICAgICAgIGNvbnRyb2wsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50NjRfdCogYXJyYXksDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgICAgICAgICAgc2l6ZSk7DQorDQorLyoqDQorICogRW51bWVyYXRpb24gb2YgYWxsIDMyIHBvc3NpYmxlIElSUXMuIE11bHRpcGxlIElSUXMgY2FuIGJlIGJpdHdpc2UgT1JlZA0KKyAqIHRvZ2V0aGVyIGxpa2UgdGhpczoNCisgKg0KKyAqICAgIE5pRnBnYV9JcnFfMyB8IE5pRnBnYV9JcnFfMjMNCisgKi8NCit0eXBlZGVmIGVudW0NCit7DQorICAgTmlGcGdhX0lycV8wICA9IDEgPDwgMCwNCisgICBOaUZwZ2FfSXJxXzEgID0gMSA8PCAxLA0KKyAgIE5pRnBnYV9JcnFfMiAgPSAxIDw8IDIsDQorICAgTmlGcGdhX0lycV8zICA9IDEgPDwgMywNCisgICBOaUZwZ2FfSXJxXzQgID0gMSA8PCA0LA0KKyAgIE5pRnBnYV9JcnFfNSAgPSAxIDw8IDUsDQorICAgTmlGcGdhX0lycV82ICA9IDEgPDwgNiwNCisgICBOaUZwZ2FfSXJxXzcgID0gMSA8PCA3LA0KKyAgIE5pRnBnYV9JcnFfOCAgPSAxIDw8IDgsDQorICAgTmlGcGdhX0lycV85ICA9IDEgPDwgOSwNCisgICBOaUZwZ2FfSXJxXzEwID0gMSA8PCAxMCwNCisgICBOaUZwZ2FfSXJxXzExID0gMSA8PCAxMSwNCisgICBOaUZwZ2FfSXJxXzEyID0gMSA8PCAxMiwNCisgICBOaUZwZ2FfSXJxXzEzID0gMSA8PCAxMywNCisgICBOaUZwZ2FfSXJxXzE0ID0gMSA8PCAxNCwNCisgICBOaUZwZ2FfSXJxXzE1ID0gMSA8PCAxNSwNCisgICBOaUZwZ2FfSXJxXzE2ID0gMSA8PCAxNiwNCisgICBOaUZwZ2FfSXJxXzE3ID0gMSA8PCAxNywNCisgICBOaUZwZ2FfSXJxXzE4ID0gMSA8PCAxOCwNCisgICBOaUZwZ2FfSXJxXzE5ID0gMSA8PCAxOSwNCisgICBOaUZwZ2FfSXJxXzIwID0gMSA8PCAyMCwNCisgICBOaUZwZ2FfSXJxXzIxID0gMSA8PCAyMSwNCisgICBOaUZwZ2FfSXJxXzIyID0gMSA8PCAyMiwNCisgICBOaUZwZ2FfSXJxXzIzID0gMSA8PCAyMywNCisgICBOaUZwZ2FfSXJxXzI0ID0gMSA8PCAyNCwNCisgICBOaUZwZ2FfSXJxXzI1ID0gMSA8PCAyNSwNCisgICBOaUZwZ2FfSXJxXzI2ID0gMSA8PCAyNiwNCisgICBOaUZwZ2FfSXJxXzI3ID0gMSA8PCAyNywNCisgICBOaUZwZ2FfSXJxXzI4ID0gMSA8PCAyOCwNCisgICBOaUZwZ2FfSXJxXzI5ID0gMSA8PCAyOSwNCisgICBOaUZwZ2FfSXJxXzMwID0gMSA8PCAzMCwNCisgICBOaUZwZ2FfSXJxXzMxID0gMVUgPDwgMzENCit9IE5pRnBnYV9JcnE7DQorDQorLyoqDQorICogUmVwcmVzZW50cyBhbiBpbmZpbml0ZSB0aW1lb3V0Lg0KKyAqLw0KK3N0YXRpYyBjb25zdCB1aW50MzJfdCBOaUZwZ2FfSW5maW5pdGVUaW1lb3V0ID0gMHhGRkZGRkZGRjsNCisNCisvKioNCisgKiBTZWUgTmlGcGdhX1Jlc2VydmVJcnFDb250ZXh0IGZvciBtb3JlIGluZm9ybWF0aW9uLg0KKyAqLw0KK3R5cGVkZWYgdm9pZCogTmlGcGdhX0lycUNvbnRleHQ7DQorDQorLyoqDQorICogSVJRIGNvbnRleHRzIGFyZSBzaW5nbGUtdGhyZWFkZWQ7IG9ubHkgb25lIHRocmVhZCBjYW4gd2FpdCB3aXRoIGEgcGFydGljdWxhcg0KKyAqIGNvbnRleHQgYXQgYW55IGdpdmVuIHRpbWUuIENsaWVudHMgbXVzdCByZXNlcnZlIGFzIG1hbnkgY29udGV4dHMgYXMgdGhlDQorICogYXBwbGljYXRpb24gcmVxdWlyZXMuDQorICoNCisgKiBJZiBhIGNvbnRleHQgaXMgc3VjY2Vzc2Z1bGx5IHJlc2VydmVkICh0aGUgcmV0dXJuZWQgc3RhdHVzIGlzIG5vdCBhbiBlcnJvciksDQorICogaXQgbXVzdCBiZSB1bnJlc2VydmVkIGxhdGVyLiBPdGhlcndpc2UgYSBtZW1vcnkgbGVhayB3aWxsIG9jY3VyLg0KKyAqDQorICogQHBhcmFtIHNlc3Npb24gaGFuZGxlIHRvIGEgY3VycmVudGx5IG9wZW4gc2Vzc2lvbg0KKyAqIEBwYXJhbSBjb250ZXh0IG91dHB1dHMgdGhlIElSUSBjb250ZXh0DQorICogQHJldHVybiByZXN1bHQgb2YgdGhlIGNhbGwNCisgKi8NCitOaUZwZ2FfU3RhdHVzIE5pRnBnYV9SZXNlcnZlSXJxQ29udGV4dChOaUZwZ2FfU2Vzc2lvbiAgICAgc2Vzc2lvbiwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOaUZwZ2FfSXJxQ29udGV4dCogY29udGV4dCk7DQorDQorLyoqDQorICogVW5yZXNlcnZlcyBhbiBJUlEgY29udGV4dCBvYnRhaW5lZCBmcm9tIE5pRnBnYV9SZXNlcnZlSXJxQ29udGV4dC4NCisgKg0KKyAqIEBwYXJhbSBzZXNzaW9uIGhhbmRsZSB0byBhIGN1cnJlbnRseSBvcGVuIHNlc3Npb24NCisgKiBAcGFyYW0gY29udGV4dCBJUlEgY29udGV4dCB0byB1bnJlc2VydmUNCisgKiBAcmV0dXJuIHJlc3VsdCBvZiB0aGUgY2FsbA0KKyAqLw0KK05pRnBnYV9TdGF0dXMgTmlGcGdhX1VucmVzZXJ2ZUlycUNvbnRleHQoTmlGcGdhX1Nlc3Npb24gICAgc2Vzc2lvbiwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5pRnBnYV9JcnFDb250ZXh0IGNvbnRleHQpOw0KKw0KKy8qKg0KKyAqIFRoaXMgaXMgYSBibG9ja2luZyBmdW5jdGlvbiB0aGF0IHN0b3BzIHRoZSBjYWxsaW5nIHRocmVhZCB1bnRpbCB0aGUgRlBHQQ0KKyAqIGFzc2VydHMgYW55IElSUSBpbiB0aGUgaXJxcyBwYXJhbWV0ZXIsIG9yIHVudGlsIHRoZSBmdW5jdGlvbiBjYWxsIHRpbWVzIG91dC4NCisgKiBCZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLCB5b3UgbXVzdCB1c2UgTmlGcGdhX1Jlc2VydmVJcnFDb250ZXh0IHRvDQorICogcmVzZXJ2ZSBhbiBJUlEgY29udGV4dC4gTm8gb3RoZXIgdGhyZWFkcyBjYW4gdXNlIHRoZSBzYW1lIGNvbnRleHQgd2hlbiB0aGlzDQorICogZnVuY3Rpb24gaXMgY2FsbGVkLg0KKyAqDQorICogWW91IGNhbiB1c2UgdGhlIGlycXNBc3NlcnRlZCBwYXJhbWV0ZXIgdG8gZGV0ZXJtaW5lIHdoaWNoIElSUXMgd2VyZSBhc3NlcnRlZA0KKyAqIGZvciBlYWNoIGZ1bmN0aW9uIGNhbGwuDQorICoNCisgKiBAcGFyYW0gc2Vzc2lvbiBoYW5kbGUgdG8gYSBjdXJyZW50bHkgb3BlbiBzZXNzaW9uDQorICogQHBhcmFtIGNvbnRleHQgSVJRIGNvbnRleHQgd2l0aCB3aGljaCB0byB3YWl0DQorICogQHBhcmFtIGlycXMgYml0d2lzZSBPUiBvZiBOaUZwZ2FfSXJxcw0KKyAqIEBwYXJhbSB0aW1lb3V0IHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzLCBvciBOaUZwZ2FfSW5maW5pdGVUaW1lb3V0DQorICogQHBhcmFtIGlycXNBc3NlcnRlZCBpZiBub24tTlVMTCwgb3V0cHV0cyBiaXR3aXNlIE9SIG9mIElSUXMgdGhhdCB3ZXJlDQorICogICAgICAgICAgICAgICAgICAgICBhc3NlcnRlZA0KKyAqIEBwYXJhbSB0aW1lZE91dCBpZiBub24tTlVMTCwgb3V0cHV0cyB3aGV0aGVyIHRoZSB0aW1lb3V0IGV4cGlyZWQNCisgKiBAcmV0dXJuIHJlc3VsdCBvZiB0aGUgY2FsbA0KKyAqLw0KK05pRnBnYV9TdGF0dXMgTmlGcGdhX1dhaXRPbklycXMoTmlGcGdhX1Nlc3Npb24gICAgc2Vzc2lvbiwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5pRnBnYV9JcnFDb250ZXh0IGNvbnRleHQsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAgICAgICAgICBpcnFzLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgICAgICAgICAgdGltZW91dCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90KiAgICAgICAgIGlycXNBc3NlcnRlZCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5pRnBnYV9Cb29sKiAgICAgIHRpbWVkT3V0KTsNCisNCisvKioNCisgKiBBY2tub3dsZWRnZXMgYW4gSVJRIG9yIHNldCBvZiBJUlFzLg0KKyAqDQorICogQHBhcmFtIHNlc3Npb24gaGFuZGxlIHRvIGEgY3VycmVudGx5IG9wZW4gc2Vzc2lvbg0KKyAqIEBwYXJhbSBpcnFzIGJpdHdpc2UgT1Igb2YgTmlGcGdhX0lycXMNCisgKiBAcmV0dXJuIHJlc3VsdCBvZiB0aGUgY2FsbA0KKyAqLw0KK05pRnBnYV9TdGF0dXMgTmlGcGdhX0Fja25vd2xlZGdlSXJxcyhOaUZwZ2FfU2Vzc2lvbiBzZXNzaW9uLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAgICAgICBpcnFzKTsNCisNCisvKioNCisgKiBTcGVjaWZpZXMgdGhlIGRlcHRoIG9mIHRoZSBob3N0IG1lbW9yeSBwYXJ0IG9mIHRoZSBETUEgRklGTy4gVGhpcyBtZXRob2QgaXMNCisgKiBvcHRpb25hbC4gSW4gb3JkZXIgdG8gc2VlIHRoZSBhY3R1YWwgZGVwdGggY29uZmlndXJlZCwgdXNlDQorICogTmlGcGdhX0NvbmZpZ3VyZUZpZm8yLg0KKyAqDQorICogQHBhcmFtIHNlc3Npb24gaGFuZGxlIHRvIGEgY3VycmVudGx5IG9wZW4gc2Vzc2lvbg0KKyAqIEBwYXJhbSBmaWZvIEZJRk8gdG8gY29uZmlndXJlDQorICogQHBhcmFtIGRlcHRoIHJlcXVlc3RlZCBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIGhvc3QgbWVtb3J5IHBhcnQgb2YgdGhlDQorICogICAgICAgICAgICAgIERNQSBGSUZPDQorICogQHJldHVybiByZXN1bHQgb2YgdGhlIGNhbGwNCisgKi8NCitOaUZwZ2FfU3RhdHVzIE5pRnBnYV9Db25maWd1cmVGaWZvKE5pRnBnYV9TZXNzaW9uIHNlc3Npb24sDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAgICAgICBmaWZvLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICAgICAgICAgZGVwdGgpOw0KKw0KKy8qKg0KKyAqIFNwZWNpZmllcyB0aGUgZGVwdGggb2YgdGhlIGhvc3QgbWVtb3J5IHBhcnQgb2YgdGhlIERNQSBGSUZPLiBUaGlzIG1ldGhvZCBpcw0KKyAqIG9wdGlvbmFsLg0KKyAqDQorICogQHBhcmFtIHNlc3Npb24gaGFuZGxlIHRvIGEgY3VycmVudGx5IG9wZW4gc2Vzc2lvbg0KKyAqIEBwYXJhbSBmaWZvIEZJRk8gdG8gY29uZmlndXJlDQorICogQHBhcmFtIHJlcXVlc3RlZERlcHRoIHJlcXVlc3RlZCBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIGhvc3QgbWVtb3J5IHBhcnQNCisgKiAgICAgICAgICAgICAgICAgICAgICAgb2YgdGhlIERNQSBGSUZPDQorICogQHBhcmFtIGFjdHVhbERlcHRoIGlmIG5vbi1OVUxMLCBvdXRwdXRzIHRoZSBhY3R1YWwgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZQ0KKyAqICAgICAgICAgICAgICAgICAgICBob3N0IG1lbW9yeSBwYXJ0IG9mIHRoZSBETUEgRklGTywgd2hpY2ggbWF5IGJlIG1vcmUgdGhhbg0KKyAqICAgICAgICAgICAgICAgICAgICB0aGUgcmVxdWVzdGVkIG51bWJlcg0KKyAqIEByZXR1cm4gcmVzdWx0IG9mIHRoZSBjYWxsDQorICovDQorTmlGcGdhX1N0YXR1cyBOaUZwZ2FfQ29uZmlndXJlRmlmbzIoTmlGcGdhX1Nlc3Npb24gc2Vzc2lvbiwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAgICAgICBmaWZvLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAgICAgICAgIHJlcXVlc3RlZERlcHRoLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCogICAgICAgIGFjdHVhbERlcHRoKTsNCisvKioNCisgKiBTdGFydHMgYSBGSUZPLiBUaGlzIG1ldGhvZCBpcyBvcHRpb25hbC4NCisgKg0KKyAqIEBwYXJhbSBzZXNzaW9uIGhhbmRsZSB0byBhIGN1cnJlbnRseSBvcGVuIHNlc3Npb24NCisgKiBAcGFyYW0gZmlmbyBGSUZPIHRvIHN0YXJ0DQorICogQHJldHVybiByZXN1bHQgb2YgdGhlIGNhbGwNCisgKi8NCitOaUZwZ2FfU3RhdHVzIE5pRnBnYV9TdGFydEZpZm8oTmlGcGdhX1Nlc3Npb24gc2Vzc2lvbiwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgICAgICAgZmlmbyk7DQorDQorLyoqDQorICogU3RvcHMgYSBGSUZPLiBUaGlzIG1ldGhvZCBpcyBvcHRpb25hbC4NCisgKg0KKyAqIEBwYXJhbSBzZXNzaW9uIGhhbmRsZSB0byBhIGN1cnJlbnRseSBvcGVuIHNlc3Npb24NCisgKiBAcGFyYW0gZmlmbyBGSUZPIHRvIHN0b3ANCisgKiBAcmV0dXJuIHJlc3VsdCBvZiB0aGUgY2FsbA0KKyAqLw0KK05pRnBnYV9TdGF0dXMgTmlGcGdhX1N0b3BGaWZvKE5pRnBnYV9TZXNzaW9uIHNlc3Npb24sDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgICAgICAgZmlmbyk7DQorDQorLyoqDQorICogUmVhZHMgZnJvbSBhIHRhcmdldC10by1ob3N0IEZJRk8gb2YgYm9vbGVhbnMuDQorICoNCisgKiBAcGFyYW0gc2Vzc2lvbiBoYW5kbGUgdG8gYSBjdXJyZW50bHkgb3BlbiBzZXNzaW9uDQorICogQHBhcmFtIGZpZm8gdGFyZ2V0LXRvLWhvc3QgRklGTyBmcm9tIHdoaWNoIHRvIHJlYWQNCisgKiBAcGFyYW0gZGF0YSBvdXRwdXRzIHRoZSBkYXRhIHRoYXQgd2FzIHJlYWQNCisgKiBAcGFyYW0gbnVtYmVyT2ZFbGVtZW50cyBudW1iZXIgb2YgZWxlbWVudHMgdG8gcmVhZA0KKyAqIEBwYXJhbSB0aW1lb3V0IHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzLCBvciBOaUZwZ2FfSW5maW5pdGVUaW1lb3V0DQorICogQHBhcmFtIGVsZW1lbnRzUmVtYWluaW5nIGlmIG5vbi1OVUxMLCBvdXRwdXRzIHRoZSBudW1iZXIgb2YgZWxlbWVudHMNCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtYWluaW5nIGluIHRoZSBob3N0IG1lbW9yeSBwYXJ0IG9mIHRoZSBETUEgRklGTw0KKyAqIEByZXR1cm4gcmVzdWx0IG9mIHRoZSBjYWxsDQorICovDQorTmlGcGdhX1N0YXR1cyBOaUZwZ2FfUmVhZEZpZm9Cb29sKE5pRnBnYV9TZXNzaW9uIHNlc3Npb24sDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90ICAgICAgIGZpZm8sDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5pRnBnYV9Cb29sKiAgIGRhdGEsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAgICAgICAgIG51bWJlck9mRWxlbWVudHMsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90ICAgICAgIHRpbWVvdXQsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCogICAgICAgIGVsZW1lbnRzUmVtYWluaW5nKTsNCisNCisvKioNCisgKiBSZWFkcyBmcm9tIGEgdGFyZ2V0LXRvLWhvc3QgRklGTyBvZiBzaWduZWQgOC1iaXQgaW50ZWdlcnMuDQorICoNCisgKiBAcGFyYW0gc2Vzc2lvbiBoYW5kbGUgdG8gYSBjdXJyZW50bHkgb3BlbiBzZXNzaW9uDQorICogQHBhcmFtIGZpZm8gdGFyZ2V0LXRvLWhvc3QgRklGTyBmcm9tIHdoaWNoIHRvIHJlYWQNCisgKiBAcGFyYW0gZGF0YSBvdXRwdXRzIHRoZSBkYXRhIHRoYXQgd2FzIHJlYWQNCisgKiBAcGFyYW0gbnVtYmVyT2ZFbGVtZW50cyBudW1iZXIgb2YgZWxlbWVudHMgdG8gcmVhZA0KKyAqIEBwYXJhbSB0aW1lb3V0IHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzLCBvciBOaUZwZ2FfSW5maW5pdGVUaW1lb3V0DQorICogQHBhcmFtIGVsZW1lbnRzUmVtYWluaW5nIGlmIG5vbi1OVUxMLCBvdXRwdXRzIHRoZSBudW1iZXIgb2YgZWxlbWVudHMNCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtYWluaW5nIGluIHRoZSBob3N0IG1lbW9yeSBwYXJ0IG9mIHRoZSBETUEgRklGTw0KKyAqIEByZXR1cm4gcmVzdWx0IG9mIHRoZSBjYWxsDQorICovDQorTmlGcGdhX1N0YXR1cyBOaUZwZ2FfUmVhZEZpZm9JOChOaUZwZ2FfU2Vzc2lvbiBzZXNzaW9uLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgICAgICAgZmlmbywNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDhfdCogICAgICAgIGRhdGEsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgICAgICAgICBudW1iZXJPZkVsZW1lbnRzLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgICAgICAgdGltZW91dCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCogICAgICAgIGVsZW1lbnRzUmVtYWluaW5nKTsNCisNCisvKioNCisgKiBSZWFkcyBmcm9tIGEgdGFyZ2V0LXRvLWhvc3QgRklGTyBvZiB1bnNpZ25lZCA4LWJpdCBpbnRlZ2Vycy4NCisgKg0KKyAqIEBwYXJhbSBzZXNzaW9uIGhhbmRsZSB0byBhIGN1cnJlbnRseSBvcGVuIHNlc3Npb24NCisgKiBAcGFyYW0gZmlmbyB0YXJnZXQtdG8taG9zdCBGSUZPIGZyb20gd2hpY2ggdG8gcmVhZA0KKyAqIEBwYXJhbSBkYXRhIG91dHB1dHMgdGhlIGRhdGEgdGhhdCB3YXMgcmVhZA0KKyAqIEBwYXJhbSBudW1iZXJPZkVsZW1lbnRzIG51bWJlciBvZiBlbGVtZW50cyB0byByZWFkDQorICogQHBhcmFtIHRpbWVvdXQgdGltZW91dCBpbiBtaWxsaXNlY29uZHMsIG9yIE5pRnBnYV9JbmZpbml0ZVRpbWVvdXQNCisgKiBAcGFyYW0gZWxlbWVudHNSZW1haW5pbmcgaWYgbm9uLU5VTEwsIG91dHB1dHMgdGhlIG51bWJlciBvZiBlbGVtZW50cw0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICByZW1haW5pbmcgaW4gdGhlIGhvc3QgbWVtb3J5IHBhcnQgb2YgdGhlIERNQSBGSUZPDQorICogQHJldHVybiByZXN1bHQgb2YgdGhlIGNhbGwNCisgKi8NCitOaUZwZ2FfU3RhdHVzIE5pRnBnYV9SZWFkRmlmb1U4KE5pRnBnYV9TZXNzaW9uIHNlc3Npb24sDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAgICAgICBmaWZvLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCogICAgICAgZGF0YSwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAgICAgICAgIG51bWJlck9mRWxlbWVudHMsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAgICAgICB0aW1lb3V0LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90KiAgICAgICAgZWxlbWVudHNSZW1haW5pbmcpOw0KKw0KKy8qKg0KKyAqIFJlYWRzIGZyb20gYSB0YXJnZXQtdG8taG9zdCBGSUZPIG9mIHNpZ25lZCAxNi1iaXQgaW50ZWdlcnMuDQorICoNCisgKiBAcGFyYW0gc2Vzc2lvbiBoYW5kbGUgdG8gYSBjdXJyZW50bHkgb3BlbiBzZXNzaW9uDQorICogQHBhcmFtIGZpZm8gdGFyZ2V0LXRvLWhvc3QgRklGTyBmcm9tIHdoaWNoIHRvIHJlYWQNCisgKiBAcGFyYW0gZGF0YSBvdXRwdXRzIHRoZSBkYXRhIHRoYXQgd2FzIHJlYWQNCisgKiBAcGFyYW0gbnVtYmVyT2ZFbGVtZW50cyBudW1iZXIgb2YgZWxlbWVudHMgdG8gcmVhZA0KKyAqIEBwYXJhbSB0aW1lb3V0IHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzLCBvciBOaUZwZ2FfSW5maW5pdGVUaW1lb3V0DQorICogQHBhcmFtIGVsZW1lbnRzUmVtYWluaW5nIGlmIG5vbi1OVUxMLCBvdXRwdXRzIHRoZSBudW1iZXIgb2YgZWxlbWVudHMNCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtYWluaW5nIGluIHRoZSBob3N0IG1lbW9yeSBwYXJ0IG9mIHRoZSBETUEgRklGTw0KKyAqIEByZXR1cm4gcmVzdWx0IG9mIHRoZSBjYWxsDQorICovDQorTmlGcGdhX1N0YXR1cyBOaUZwZ2FfUmVhZEZpZm9JMTYoTmlGcGdhX1Nlc3Npb24gc2Vzc2lvbiwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAgICAgICBmaWZvLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDE2X3QqICAgICAgIGRhdGEsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICAgICAgICAgbnVtYmVyT2ZFbGVtZW50cywNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAgICAgICB0aW1lb3V0LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCogICAgICAgIGVsZW1lbnRzUmVtYWluaW5nKTsNCisNCisvKioNCisgKiBSZWFkcyBmcm9tIGEgdGFyZ2V0LXRvLWhvc3QgRklGTyBvZiB1bnNpZ25lZCAxNi1iaXQgaW50ZWdlcnMuDQorICoNCisgKiBAcGFyYW0gc2Vzc2lvbiBoYW5kbGUgdG8gYSBjdXJyZW50bHkgb3BlbiBzZXNzaW9uDQorICogQHBhcmFtIGZpZm8gdGFyZ2V0LXRvLWhvc3QgRklGTyBmcm9tIHdoaWNoIHRvIHJlYWQNCisgKiBAcGFyYW0gZGF0YSBvdXRwdXRzIHRoZSBkYXRhIHRoYXQgd2FzIHJlYWQNCisgKiBAcGFyYW0gbnVtYmVyT2ZFbGVtZW50cyBudW1iZXIgb2YgZWxlbWVudHMgdG8gcmVhZA0KKyAqIEBwYXJhbSB0aW1lb3V0IHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzLCBvciBOaUZwZ2FfSW5maW5pdGVUaW1lb3V0DQorICogQHBhcmFtIGVsZW1lbnRzUmVtYWluaW5nIGlmIG5vbi1OVUxMLCBvdXRwdXRzIHRoZSBudW1iZXIgb2YgZWxlbWVudHMNCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtYWluaW5nIGluIHRoZSBob3N0IG1lbW9yeSBwYXJ0IG9mIHRoZSBETUEgRklGTw0KKyAqIEByZXR1cm4gcmVzdWx0IG9mIHRoZSBjYWxsDQorICovDQorTmlGcGdhX1N0YXR1cyBOaUZwZ2FfUmVhZEZpZm9VMTYoTmlGcGdhX1Nlc3Npb24gc2Vzc2lvbiwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAgICAgICBmaWZvLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90KiAgICAgIGRhdGEsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICAgICAgICAgbnVtYmVyT2ZFbGVtZW50cywNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAgICAgICB0aW1lb3V0LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCogICAgICAgIGVsZW1lbnRzUmVtYWluaW5nKTsNCisNCisvKioNCisgKiBSZWFkcyBmcm9tIGEgdGFyZ2V0LXRvLWhvc3QgRklGTyBvZiBzaWduZWQgMzItYml0IGludGVnZXJzLg0KKyAqDQorICogQHBhcmFtIHNlc3Npb24gaGFuZGxlIHRvIGEgY3VycmVudGx5IG9wZW4gc2Vzc2lvbg0KKyAqIEBwYXJhbSBmaWZvIHRhcmdldC10by1ob3N0IEZJRk8gZnJvbSB3aGljaCB0byByZWFkDQorICogQHBhcmFtIGRhdGEgb3V0cHV0cyB0aGUgZGF0YSB0aGF0IHdhcyByZWFkDQorICogQHBhcmFtIG51bWJlck9mRWxlbWVudHMgbnVtYmVyIG9mIGVsZW1lbnRzIHRvIHJlYWQNCisgKiBAcGFyYW0gdGltZW91dCB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcywgb3IgTmlGcGdhX0luZmluaXRlVGltZW91dA0KKyAqIEBwYXJhbSBlbGVtZW50c1JlbWFpbmluZyBpZiBub24tTlVMTCwgb3V0cHV0cyB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzDQorICogICAgICAgICAgICAgICAgICAgICAgICAgIHJlbWFpbmluZyBpbiB0aGUgaG9zdCBtZW1vcnkgcGFydCBvZiB0aGUgRE1BIEZJRk8NCisgKiBAcmV0dXJuIHJlc3VsdCBvZiB0aGUgY2FsbA0KKyAqLw0KK05pRnBnYV9TdGF0dXMgTmlGcGdhX1JlYWRGaWZvSTMyKE5pRnBnYV9TZXNzaW9uIHNlc3Npb24sDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgICAgICAgZmlmbywNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90KiAgICAgICBkYXRhLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAgICAgICAgIG51bWJlck9mRWxlbWVudHMsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgICAgICAgdGltZW91dCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QqICAgICAgICBlbGVtZW50c1JlbWFpbmluZyk7DQorDQorLyoqDQorICogUmVhZHMgZnJvbSBhIHRhcmdldC10by1ob3N0IEZJRk8gb2YgdW5zaWduZWQgMzItYml0IGludGVnZXJzLg0KKyAqDQorICogQHBhcmFtIHNlc3Npb24gaGFuZGxlIHRvIGEgY3VycmVudGx5IG9wZW4gc2Vzc2lvbg0KKyAqIEBwYXJhbSBmaWZvIHRhcmdldC10by1ob3N0IEZJRk8gZnJvbSB3aGljaCB0byByZWFkDQorICogQHBhcmFtIGRhdGEgb3V0cHV0cyB0aGUgZGF0YSB0aGF0IHdhcyByZWFkDQorICogQHBhcmFtIG51bWJlck9mRWxlbWVudHMgbnVtYmVyIG9mIGVsZW1lbnRzIHRvIHJlYWQNCisgKiBAcGFyYW0gdGltZW91dCB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcywgb3IgTmlGcGdhX0luZmluaXRlVGltZW91dA0KKyAqIEBwYXJhbSBlbGVtZW50c1JlbWFpbmluZyBpZiBub24tTlVMTCwgb3V0cHV0cyB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzDQorICogICAgICAgICAgICAgICAgICAgICAgICAgIHJlbWFpbmluZyBpbiB0aGUgaG9zdCBtZW1vcnkgcGFydCBvZiB0aGUgRE1BIEZJRk8NCisgKiBAcmV0dXJuIHJlc3VsdCBvZiB0aGUgY2FsbA0KKyAqLw0KK05pRnBnYV9TdGF0dXMgTmlGcGdhX1JlYWRGaWZvVTMyKE5pRnBnYV9TZXNzaW9uIHNlc3Npb24sDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgICAgICAgZmlmbywNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCogICAgICBkYXRhLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAgICAgICAgIG51bWJlck9mRWxlbWVudHMsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgICAgICAgdGltZW91dCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QqICAgICAgICBlbGVtZW50c1JlbWFpbmluZyk7DQorDQorLyoqDQorICogUmVhZHMgZnJvbSBhIHRhcmdldC10by1ob3N0IEZJRk8gb2Ygc2lnbmVkIDY0LWJpdCBpbnRlZ2Vycy4NCisgKg0KKyAqIEBwYXJhbSBzZXNzaW9uIGhhbmRsZSB0byBhIGN1cnJlbnRseSBvcGVuIHNlc3Npb24NCisgKiBAcGFyYW0gZmlmbyB0YXJnZXQtdG8taG9zdCBGSUZPIGZyb20gd2hpY2ggdG8gcmVhZA0KKyAqIEBwYXJhbSBkYXRhIG91dHB1dHMgdGhlIGRhdGEgdGhhdCB3YXMgcmVhZA0KKyAqIEBwYXJhbSBudW1iZXJPZkVsZW1lbnRzIG51bWJlciBvZiBlbGVtZW50cyB0byByZWFkDQorICogQHBhcmFtIHRpbWVvdXQgdGltZW91dCBpbiBtaWxsaXNlY29uZHMsIG9yIE5pRnBnYV9JbmZpbml0ZVRpbWVvdXQNCisgKiBAcGFyYW0gZWxlbWVudHNSZW1haW5pbmcgaWYgbm9uLU5VTEwsIG91dHB1dHMgdGhlIG51bWJlciBvZiBlbGVtZW50cw0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICByZW1haW5pbmcgaW4gdGhlIGhvc3QgbWVtb3J5IHBhcnQgb2YgdGhlIERNQSBGSUZPDQorICogQHJldHVybiByZXN1bHQgb2YgdGhlIGNhbGwNCisgKi8NCitOaUZwZ2FfU3RhdHVzIE5pRnBnYV9SZWFkRmlmb0k2NChOaUZwZ2FfU2Vzc2lvbiBzZXNzaW9uLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90ICAgICAgIGZpZm8sDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50NjRfdCogICAgICAgZGF0YSwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgICAgICAgICBudW1iZXJPZkVsZW1lbnRzLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90ICAgICAgIHRpbWVvdXQsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90KiAgICAgICAgZWxlbWVudHNSZW1haW5pbmcpOw0KKw0KKy8qKg0KKyAqIFJlYWRzIGZyb20gYSB0YXJnZXQtdG8taG9zdCBGSUZPIG9mIHVuc2lnbmVkIDY0LWJpdCBpbnRlZ2Vycy4NCisgKg0KKyAqIEBwYXJhbSBzZXNzaW9uIGhhbmRsZSB0byBhIGN1cnJlbnRseSBvcGVuIHNlc3Npb24NCisgKiBAcGFyYW0gZmlmbyB0YXJnZXQtdG8taG9zdCBGSUZPIGZyb20gd2hpY2ggdG8gcmVhZA0KKyAqIEBwYXJhbSBkYXRhIG91dHB1dHMgdGhlIGRhdGEgdGhhdCB3YXMgcmVhZA0KKyAqIEBwYXJhbSBudW1iZXJPZkVsZW1lbnRzIG51bWJlciBvZiBlbGVtZW50cyB0byByZWFkDQorICogQHBhcmFtIHRpbWVvdXQgdGltZW91dCBpbiBtaWxsaXNlY29uZHMsIG9yIE5pRnBnYV9JbmZpbml0ZVRpbWVvdXQNCisgKiBAcGFyYW0gZWxlbWVudHNSZW1haW5pbmcgaWYgbm9uLU5VTEwsIG91dHB1dHMgdGhlIG51bWJlciBvZiBlbGVtZW50cw0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICByZW1haW5pbmcgaW4gdGhlIGhvc3QgbWVtb3J5IHBhcnQgb2YgdGhlIERNQSBGSUZPDQorICogQHJldHVybiByZXN1bHQgb2YgdGhlIGNhbGwNCisgKi8NCitOaUZwZ2FfU3RhdHVzIE5pRnBnYV9SZWFkRmlmb1U2NChOaUZwZ2FfU2Vzc2lvbiBzZXNzaW9uLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90ICAgICAgIGZpZm8sDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDY0X3QqICAgICAgZGF0YSwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgICAgICAgICBudW1iZXJPZkVsZW1lbnRzLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90ICAgICAgIHRpbWVvdXQsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90KiAgICAgICAgZWxlbWVudHNSZW1haW5pbmcpOw0KKw0KKy8qKg0KKyAqIFdyaXRlcyB0byBhIGhvc3QtdG8tdGFyZ2V0IEZJRk8gb2YgYm9vbGVhbnMuDQorICoNCisgKiBAcGFyYW0gc2Vzc2lvbiBoYW5kbGUgdG8gYSBjdXJyZW50bHkgb3BlbiBzZXNzaW9uDQorICogQHBhcmFtIGZpZm8gaG9zdC10by10YXJnZXQgRklGTyB0byB3aGljaCB0byB3cml0ZQ0KKyAqIEBwYXJhbSBkYXRhIGRhdGEgdG8gd3JpdGUNCisgKiBAcGFyYW0gbnVtYmVyT2ZFbGVtZW50cyBudW1iZXIgb2YgZWxlbWVudHMgdG8gd3JpdGUNCisgKiBAcGFyYW0gdGltZW91dCB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcywgb3IgTmlGcGdhX0luZmluaXRlVGltZW91dA0KKyAqIEBwYXJhbSBlbXB0eUVsZW1lbnRzUmVtYWluaW5nIGlmIG5vbi1OVUxMLCBvdXRwdXRzIHRoZSBudW1iZXIgb2YgZW1wdHkNCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50cyByZW1haW5pbmcgaW4gdGhlIGhvc3QgbWVtb3J5IHBhcnQgb2YNCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgRE1BIEZJRk8NCisgKiBAcmV0dXJuIHJlc3VsdCBvZiB0aGUgY2FsbA0KKyAqLw0KK05pRnBnYV9TdGF0dXMgTmlGcGdhX1dyaXRlRmlmb0Jvb2woTmlGcGdhX1Nlc3Npb24gICAgIHNlc3Npb24sDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAgICAgICAgICAgZmlmbywNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IE5pRnBnYV9Cb29sKiBkYXRhLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICAgICAgICAgICAgIG51bWJlck9mRWxlbWVudHMsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAgICAgICAgICAgdGltZW91dCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCogICAgICAgICAgICBlbXB0eUVsZW1lbnRzUmVtYWluaW5nKTsNCisNCisvKioNCisgKiBXcml0ZXMgdG8gYSBob3N0LXRvLXRhcmdldCBGSUZPIG9mIHNpZ25lZCA4LWJpdCBpbnRlZ2Vycy4NCisgKg0KKyAqIEBwYXJhbSBzZXNzaW9uIGhhbmRsZSB0byBhIGN1cnJlbnRseSBvcGVuIHNlc3Npb24NCisgKiBAcGFyYW0gZmlmbyBob3N0LXRvLXRhcmdldCBGSUZPIHRvIHdoaWNoIHRvIHdyaXRlDQorICogQHBhcmFtIGRhdGEgZGF0YSB0byB3cml0ZQ0KKyAqIEBwYXJhbSBudW1iZXJPZkVsZW1lbnRzIG51bWJlciBvZiBlbGVtZW50cyB0byB3cml0ZQ0KKyAqIEBwYXJhbSB0aW1lb3V0IHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzLCBvciBOaUZwZ2FfSW5maW5pdGVUaW1lb3V0DQorICogQHBhcmFtIGVtcHR5RWxlbWVudHNSZW1haW5pbmcgaWYgbm9uLU5VTEwsIG91dHB1dHMgdGhlIG51bWJlciBvZiBlbXB0eQ0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRzIHJlbWFpbmluZyBpbiB0aGUgaG9zdCBtZW1vcnkgcGFydCBvZg0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBETUEgRklGTw0KKyAqIEByZXR1cm4gcmVzdWx0IG9mIHRoZSBjYWxsDQorICovDQorTmlGcGdhX1N0YXR1cyBOaUZwZ2FfV3JpdGVGaWZvSTgoTmlGcGdhX1Nlc3Npb24gc2Vzc2lvbiwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAgICAgICBmaWZvLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludDhfdCogIGRhdGEsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICAgICAgICAgbnVtYmVyT2ZFbGVtZW50cywNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAgICAgICB0aW1lb3V0LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCogICAgICAgIGVtcHR5RWxlbWVudHNSZW1haW5pbmcpOw0KKw0KKy8qKg0KKyAqIFdyaXRlcyB0byBhIGhvc3QtdG8tdGFyZ2V0IEZJRk8gb2YgdW5zaWduZWQgOC1iaXQgaW50ZWdlcnMuDQorICoNCisgKiBAcGFyYW0gc2Vzc2lvbiBoYW5kbGUgdG8gYSBjdXJyZW50bHkgb3BlbiBzZXNzaW9uDQorICogQHBhcmFtIGZpZm8gaG9zdC10by10YXJnZXQgRklGTyB0byB3aGljaCB0byB3cml0ZQ0KKyAqIEBwYXJhbSBkYXRhIGRhdGEgdG8gd3JpdGUNCisgKiBAcGFyYW0gbnVtYmVyT2ZFbGVtZW50cyBudW1iZXIgb2YgZWxlbWVudHMgdG8gd3JpdGUNCisgKiBAcGFyYW0gdGltZW91dCB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcywgb3IgTmlGcGdhX0luZmluaXRlVGltZW91dA0KKyAqIEBwYXJhbSBlbXB0eUVsZW1lbnRzUmVtYWluaW5nIGlmIG5vbi1OVUxMLCBvdXRwdXRzIHRoZSBudW1iZXIgb2YgZW1wdHkNCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50cyByZW1haW5pbmcgaW4gdGhlIGhvc3QgbWVtb3J5IHBhcnQgb2YNCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgRE1BIEZJRk8NCisgKiBAcmV0dXJuIHJlc3VsdCBvZiB0aGUgY2FsbA0KKyAqLw0KK05pRnBnYV9TdGF0dXMgTmlGcGdhX1dyaXRlRmlmb1U4KE5pRnBnYV9TZXNzaW9uIHNlc3Npb24sDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgICAgICAgZmlmbywNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90KiBkYXRhLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAgICAgICAgIG51bWJlck9mRWxlbWVudHMsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgICAgICAgdGltZW91dCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QqICAgICAgICBlbXB0eUVsZW1lbnRzUmVtYWluaW5nKTsNCisNCisvKioNCisgKiBXcml0ZXMgdG8gYSBob3N0LXRvLXRhcmdldCBGSUZPIG9mIHNpZ25lZCAxNi1iaXQgaW50ZWdlcnMuDQorICoNCisgKiBAcGFyYW0gc2Vzc2lvbiBoYW5kbGUgdG8gYSBjdXJyZW50bHkgb3BlbiBzZXNzaW9uDQorICogQHBhcmFtIGZpZm8gaG9zdC10by10YXJnZXQgRklGTyB0byB3aGljaCB0byB3cml0ZQ0KKyAqIEBwYXJhbSBkYXRhIGRhdGEgdG8gd3JpdGUNCisgKiBAcGFyYW0gbnVtYmVyT2ZFbGVtZW50cyBudW1iZXIgb2YgZWxlbWVudHMgdG8gd3JpdGUNCisgKiBAcGFyYW0gdGltZW91dCB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcywgb3IgTmlGcGdhX0luZmluaXRlVGltZW91dA0KKyAqIEBwYXJhbSBlbXB0eUVsZW1lbnRzUmVtYWluaW5nIGlmIG5vbi1OVUxMLCBvdXRwdXRzIHRoZSBudW1iZXIgb2YgZW1wdHkNCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50cyByZW1haW5pbmcgaW4gdGhlIGhvc3QgbWVtb3J5IHBhcnQgb2YNCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgRE1BIEZJRk8NCisgKiBAcmV0dXJuIHJlc3VsdCBvZiB0aGUgY2FsbA0KKyAqLw0KK05pRnBnYV9TdGF0dXMgTmlGcGdhX1dyaXRlRmlmb0kxNihOaUZwZ2FfU2Vzc2lvbiBzZXNzaW9uLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAgICAgICBmaWZvLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQxNl90KiBkYXRhLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgICAgICAgICBudW1iZXJPZkVsZW1lbnRzLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAgICAgICB0aW1lb3V0LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QqICAgICAgICBlbXB0eUVsZW1lbnRzUmVtYWluaW5nKTsNCisNCisvKioNCisgKiBXcml0ZXMgdG8gYSBob3N0LXRvLXRhcmdldCBGSUZPIG9mIHVuc2lnbmVkIDE2LWJpdCBpbnRlZ2Vycy4NCisgKg0KKyAqIEBwYXJhbSBzZXNzaW9uIGhhbmRsZSB0byBhIGN1cnJlbnRseSBvcGVuIHNlc3Npb24NCisgKiBAcGFyYW0gZmlmbyBob3N0LXRvLXRhcmdldCBGSUZPIHRvIHdoaWNoIHRvIHdyaXRlDQorICogQHBhcmFtIGRhdGEgZGF0YSB0byB3cml0ZQ0KKyAqIEBwYXJhbSBudW1iZXJPZkVsZW1lbnRzIG51bWJlciBvZiBlbGVtZW50cyB0byB3cml0ZQ0KKyAqIEBwYXJhbSB0aW1lb3V0IHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzLCBvciBOaUZwZ2FfSW5maW5pdGVUaW1lb3V0DQorICogQHBhcmFtIGVtcHR5RWxlbWVudHNSZW1haW5pbmcgaWYgbm9uLU5VTEwsIG91dHB1dHMgdGhlIG51bWJlciBvZiBlbXB0eQ0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRzIHJlbWFpbmluZyBpbiB0aGUgaG9zdCBtZW1vcnkgcGFydCBvZg0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBETUEgRklGTw0KKyAqIEByZXR1cm4gcmVzdWx0IG9mIHRoZSBjYWxsDQorICovDQorTmlGcGdhX1N0YXR1cyBOaUZwZ2FfV3JpdGVGaWZvVTE2KE5pRnBnYV9TZXNzaW9uICBzZXNzaW9uLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAgICAgICAgZmlmbywNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDE2X3QqIGRhdGEsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAgICAgICAgICBudW1iZXJPZkVsZW1lbnRzLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAgICAgICAgdGltZW91dCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90KiAgICAgICAgIGVtcHR5RWxlbWVudHNSZW1haW5pbmcpOw0KKw0KKy8qKg0KKyAqIFdyaXRlcyB0byBhIGhvc3QtdG8tdGFyZ2V0IEZJRk8gb2Ygc2lnbmVkIDMyLWJpdCBpbnRlZ2Vycy4NCisgKg0KKyAqIEBwYXJhbSBzZXNzaW9uIGhhbmRsZSB0byBhIGN1cnJlbnRseSBvcGVuIHNlc3Npb24NCisgKiBAcGFyYW0gZmlmbyBob3N0LXRvLXRhcmdldCBGSUZPIHRvIHdoaWNoIHRvIHdyaXRlDQorICogQHBhcmFtIGRhdGEgZGF0YSB0byB3cml0ZQ0KKyAqIEBwYXJhbSBudW1iZXJPZkVsZW1lbnRzIG51bWJlciBvZiBlbGVtZW50cyB0byB3cml0ZQ0KKyAqIEBwYXJhbSB0aW1lb3V0IHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzLCBvciBOaUZwZ2FfSW5maW5pdGVUaW1lb3V0DQorICogQHBhcmFtIGVtcHR5RWxlbWVudHNSZW1haW5pbmcgaWYgbm9uLU5VTEwsIG91dHB1dHMgdGhlIG51bWJlciBvZiBlbXB0eQ0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRzIHJlbWFpbmluZyBpbiB0aGUgaG9zdCBtZW1vcnkgcGFydCBvZg0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBETUEgRklGTw0KKyAqIEByZXR1cm4gcmVzdWx0IG9mIHRoZSBjYWxsDQorICovDQorTmlGcGdhX1N0YXR1cyBOaUZwZ2FfV3JpdGVGaWZvSTMyKE5pRnBnYV9TZXNzaW9uIHNlc3Npb24sDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90ICAgICAgIGZpZm8sDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludDMyX3QqIGRhdGEsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAgICAgICAgIG51bWJlck9mRWxlbWVudHMsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90ICAgICAgIHRpbWVvdXQsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCogICAgICAgIGVtcHR5RWxlbWVudHNSZW1haW5pbmcpOw0KKw0KKy8qKg0KKyAqIFdyaXRlcyB0byBhIGhvc3QtdG8tdGFyZ2V0IEZJRk8gb2YgdW5zaWduZWQgMzItYml0IGludGVnZXJzLg0KKyAqDQorICogQHBhcmFtIHNlc3Npb24gaGFuZGxlIHRvIGEgY3VycmVudGx5IG9wZW4gc2Vzc2lvbg0KKyAqIEBwYXJhbSBmaWZvIGhvc3QtdG8tdGFyZ2V0IEZJRk8gdG8gd2hpY2ggdG8gd3JpdGUNCisgKiBAcGFyYW0gZGF0YSBkYXRhIHRvIHdyaXRlDQorICogQHBhcmFtIG51bWJlck9mRWxlbWVudHMgbnVtYmVyIG9mIGVsZW1lbnRzIHRvIHdyaXRlDQorICogQHBhcmFtIHRpbWVvdXQgdGltZW91dCBpbiBtaWxsaXNlY29uZHMsIG9yIE5pRnBnYV9JbmZpbml0ZVRpbWVvdXQNCisgKiBAcGFyYW0gZW1wdHlFbGVtZW50c1JlbWFpbmluZyBpZiBub24tTlVMTCwgb3V0cHV0cyB0aGUgbnVtYmVyIG9mIGVtcHR5DQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudHMgcmVtYWluaW5nIGluIHRoZSBob3N0IG1lbW9yeSBwYXJ0IG9mDQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIERNQSBGSUZPDQorICogQHJldHVybiByZXN1bHQgb2YgdGhlIGNhbGwNCisgKi8NCitOaUZwZ2FfU3RhdHVzIE5pRnBnYV9Xcml0ZUZpZm9VMzIoTmlGcGdhX1Nlc3Npb24gIHNlc3Npb24sDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90ICAgICAgICBmaWZvLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50MzJfdCogZGF0YSwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICAgICAgICAgIG51bWJlck9mRWxlbWVudHMsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90ICAgICAgICB0aW1lb3V0LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QqICAgICAgICAgZW1wdHlFbGVtZW50c1JlbWFpbmluZyk7DQorDQorLyoqDQorICogV3JpdGVzIHRvIGEgaG9zdC10by10YXJnZXQgRklGTyBvZiBzaWduZWQgNjQtYml0IGludGVnZXJzLg0KKyAqDQorICogQHBhcmFtIHNlc3Npb24gaGFuZGxlIHRvIGEgY3VycmVudGx5IG9wZW4gc2Vzc2lvbg0KKyAqIEBwYXJhbSBmaWZvIGhvc3QtdG8tdGFyZ2V0IEZJRk8gdG8gd2hpY2ggdG8gd3JpdGUNCisgKiBAcGFyYW0gZGF0YSBkYXRhIHRvIHdyaXRlDQorICogQHBhcmFtIG51bWJlck9mRWxlbWVudHMgbnVtYmVyIG9mIGVsZW1lbnRzIHRvIHdyaXRlDQorICogQHBhcmFtIHRpbWVvdXQgdGltZW91dCBpbiBtaWxsaXNlY29uZHMsIG9yIE5pRnBnYV9JbmZpbml0ZVRpbWVvdXQNCisgKiBAcGFyYW0gZW1wdHlFbGVtZW50c1JlbWFpbmluZyBpZiBub24tTlVMTCwgb3V0cHV0cyB0aGUgbnVtYmVyIG9mIGVtcHR5DQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudHMgcmVtYWluaW5nIGluIHRoZSBob3N0IG1lbW9yeSBwYXJ0IG9mDQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIERNQSBGSUZPDQorICogQHJldHVybiByZXN1bHQgb2YgdGhlIGNhbGwNCisgKi8NCitOaUZwZ2FfU3RhdHVzIE5pRnBnYV9Xcml0ZUZpZm9JNjQoTmlGcGdhX1Nlc3Npb24gc2Vzc2lvbiwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgICAgICAgZmlmbywNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50NjRfdCogZGF0YSwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICAgICAgICAgbnVtYmVyT2ZFbGVtZW50cywNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgICAgICAgdGltZW91dCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90KiAgICAgICAgZW1wdHlFbGVtZW50c1JlbWFpbmluZyk7DQorDQorLyoqDQorICogV3JpdGVzIHRvIGEgaG9zdC10by10YXJnZXQgRklGTyBvZiB1bnNpZ25lZCA2NC1iaXQgaW50ZWdlcnMuDQorICoNCisgKiBAcGFyYW0gc2Vzc2lvbiBoYW5kbGUgdG8gYSBjdXJyZW50bHkgb3BlbiBzZXNzaW9uDQorICogQHBhcmFtIGZpZm8gaG9zdC10by10YXJnZXQgRklGTyB0byB3aGljaCB0byB3cml0ZQ0KKyAqIEBwYXJhbSBkYXRhIGRhdGEgdG8gd3JpdGUNCisgKiBAcGFyYW0gbnVtYmVyT2ZFbGVtZW50cyBudW1iZXIgb2YgZWxlbWVudHMgdG8gd3JpdGUNCisgKiBAcGFyYW0gdGltZW91dCB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcywgb3IgTmlGcGdhX0luZmluaXRlVGltZW91dA0KKyAqIEBwYXJhbSBlbXB0eUVsZW1lbnRzUmVtYWluaW5nIGlmIG5vbi1OVUxMLCBvdXRwdXRzIHRoZSBudW1iZXIgb2YgZW1wdHkNCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50cyByZW1haW5pbmcgaW4gdGhlIGhvc3QgbWVtb3J5IHBhcnQgb2YNCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgRE1BIEZJRk8NCisgKiBAcmV0dXJuIHJlc3VsdCBvZiB0aGUgY2FsbA0KKyAqLw0KK05pRnBnYV9TdGF0dXMgTmlGcGdhX1dyaXRlRmlmb1U2NChOaUZwZ2FfU2Vzc2lvbiAgc2Vzc2lvbiwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgICAgICAgIGZpZm8sDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ2NF90KiBkYXRhLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgICAgICAgICAgbnVtYmVyT2ZFbGVtZW50cywNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgICAgICAgIHRpbWVvdXQsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCogICAgICAgICBlbXB0eUVsZW1lbnRzUmVtYWluaW5nKTsNCisNCisvKioNCisgKiBBY3F1aXJlcyBlbGVtZW50cyBmb3IgcmVhZGluZyBmcm9tIGEgdGFyZ2V0LXRvLWhvc3QgRklGTyBvZiBib29sZWFucy4NCisgKg0KKyAqIEFjcXVpcmluZywgcmVhZGluZywgYW5kIHJlbGVhc2luZyBGSUZPIGVsZW1lbnRzIHByZXZlbnRzIHRoZSBuZWVkIHRvIGNvcHkNCisgKiB0aGUgY29udGVudHMgb2YgZWxlbWVudHMgZnJvbSB0aGUgaG9zdCBtZW1vcnkgYnVmZmVyIHRvIGEgc2VwYXJhdGUNCisgKiB1c2VyLWFsbG9jYXRlZCBidWZmZXIgYmVmb3JlIHJlYWRpbmcuIFRoZSBGUEdBIHRhcmdldCBjYW5ub3Qgd3JpdGUgdG8NCisgKiBlbGVtZW50cyBhY3F1aXJlZCBieSB0aGUgaG9zdC4gVGhlcmVmb3JlLCB0aGUgaG9zdCBtdXN0IHJlbGVhc2UgZWxlbWVudHMNCisgKiBhZnRlciByZWFkaW5nIHRoZW0uIFRoZSBudW1iZXIgb2YgZWxlbWVudHMgYWNxdWlyZWQgbWF5IGRpZmZlciBmcm9tIHRoZQ0KKyAqIG51bWJlciBvZiBlbGVtZW50cyByZXF1ZXN0ZWQgaWYsIGZvciBleGFtcGxlLCB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzDQorICogcmVxdWVzdGVkIHJlYWNoZXMgdGhlIGVuZCBvZiB0aGUgaG9zdCBtZW1vcnkgYnVmZmVyLiBBbHdheXMgcmVsZWFzZSBhbGwNCisgKiBhY3F1aXJlZCBlbGVtZW50cyBiZWZvcmUgY2xvc2luZyB0aGUgc2Vzc2lvbi4gRG8gbm90IGF0dGVtcHQgdG8gYWNjZXNzIEZJRk8NCisgKiBlbGVtZW50cyBhZnRlciB0aGUgZWxlbWVudHMgYXJlIHJlbGVhc2VkIG9yIHRoZSBzZXNzaW9uIGlzIGNsb3NlZC4NCisgKg0KKyAqIEBwYXJhbSBzZXNzaW9uIGhhbmRsZSB0byBhIGN1cnJlbnRseSBvcGVuIHNlc3Npb24NCisgKiBAcGFyYW0gZmlmbyB0YXJnZXQtdG8taG9zdCBGSUZPIGZyb20gd2hpY2ggdG8gcmVhZA0KKyAqIEBwYXJhbSBlbGVtZW50cyBvdXRwdXRzIGEgcG9pbnRlciB0byB0aGUgZWxlbWVudHMgYWNxdWlyZWQNCisgKiBAcGFyYW0gZWxlbWVudHNSZXF1ZXN0ZWQgcmVxZXN0ZWQgbnVtYmVyIG9mIGVsZW1lbnRzDQorICogQHBhcmFtIHRpbWVvdXQgdGltZW91dCBpbiBtaWxsaXNlY29uZHMsIG9yIE5pRnBnYV9JbmZpbml0ZVRpbWVvdXQNCisgKiBAcGFyYW0gZWxlbWVudHNBY3F1aXJlZCBhY3R1YWwgbnVtYmVyIG9mIGVsZW1lbnRzIGFjcXVpcmVkLCB3aGljaCBtYXkgYmUNCisgKiAgICAgICAgICAgICAgICAgICAgICAgICBsZXNzIHRoYW4gdGhlIHJlcXVlc3RlZCBudW1iZXINCisgKiBAcGFyYW0gZWxlbWVudHNSZW1haW5pbmcgaWYgbm9uLU5VTEwsIG91dHB1dHMgdGhlIG51bWJlciBvZiBlbGVtZW50cw0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICByZW1haW5pbmcgaW4gdGhlIGhvc3QgbWVtb3J5IHBhcnQgb2YgdGhlIERNQSBGSUZPDQorICogQHJldHVybiByZXN1bHQgb2YgdGhlIGNhbGwNCisgKi8NCitOaUZwZ2FfU3RhdHVzIE5pRnBnYV9BY3F1aXJlRmlmb1JlYWRFbGVtZW50c0Jvb2woDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmlGcGdhX1Nlc3Npb24gc2Vzc2lvbiwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAgICAgICBmaWZvLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5pRnBnYV9Cb29sKiogIGVsZW1lbnRzLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAgICAgICAgIGVsZW1lbnRzUmVxdWVzdGVkLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90ICAgICAgIHRpbWVvdXQsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90KiAgICAgICAgZWxlbWVudHNBY3F1aXJlZCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QqICAgICAgICBlbGVtZW50c1JlbWFpbmluZyk7DQorDQorLyoqDQorICogQWNxdWlyZXMgZWxlbWVudHMgZm9yIHJlYWRpbmcgZnJvbSBhIHRhcmdldC10by1ob3N0IEZJRk8gb2Ygc2lnbmVkIDgtYml0DQorICogaW50ZWdlcnMuDQorICoNCisgKiBBY3F1aXJpbmcsIHJlYWRpbmcsIGFuZCByZWxlYXNpbmcgRklGTyBlbGVtZW50cyBwcmV2ZW50cyB0aGUgbmVlZCB0byBjb3B5DQorICogdGhlIGNvbnRlbnRzIG9mIGVsZW1lbnRzIGZyb20gdGhlIGhvc3QgbWVtb3J5IGJ1ZmZlciB0byBhIHNlcGFyYXRlDQorICogdXNlci1hbGxvY2F0ZWQgYnVmZmVyIGJlZm9yZSByZWFkaW5nLiBUaGUgRlBHQSB0YXJnZXQgY2Fubm90IHdyaXRlIHRvDQorICogZWxlbWVudHMgYWNxdWlyZWQgYnkgdGhlIGhvc3QuIFRoZXJlZm9yZSwgdGhlIGhvc3QgbXVzdCByZWxlYXNlIGVsZW1lbnRzDQorICogYWZ0ZXIgcmVhZGluZyB0aGVtLiBUaGUgbnVtYmVyIG9mIGVsZW1lbnRzIGFjcXVpcmVkIG1heSBkaWZmZXIgZnJvbSB0aGUNCisgKiBudW1iZXIgb2YgZWxlbWVudHMgcmVxdWVzdGVkIGlmLCBmb3IgZXhhbXBsZSwgdGhlIG51bWJlciBvZiBlbGVtZW50cw0KKyAqIHJlcXVlc3RlZCByZWFjaGVzIHRoZSBlbmQgb2YgdGhlIGhvc3QgbWVtb3J5IGJ1ZmZlci4gQWx3YXlzIHJlbGVhc2UgYWxsDQorICogYWNxdWlyZWQgZWxlbWVudHMgYmVmb3JlIGNsb3NpbmcgdGhlIHNlc3Npb24uIERvIG5vdCBhdHRlbXB0IHRvIGFjY2VzcyBGSUZPDQorICogZWxlbWVudHMgYWZ0ZXIgdGhlIGVsZW1lbnRzIGFyZSByZWxlYXNlZCBvciB0aGUgc2Vzc2lvbiBpcyBjbG9zZWQuDQorICoNCisgKiBAcGFyYW0gc2Vzc2lvbiBoYW5kbGUgdG8gYSBjdXJyZW50bHkgb3BlbiBzZXNzaW9uDQorICogQHBhcmFtIGZpZm8gdGFyZ2V0LXRvLWhvc3QgRklGTyBmcm9tIHdoaWNoIHRvIHJlYWQNCisgKiBAcGFyYW0gZWxlbWVudHMgb3V0cHV0cyBhIHBvaW50ZXIgdG8gdGhlIGVsZW1lbnRzIGFjcXVpcmVkDQorICogQHBhcmFtIGVsZW1lbnRzUmVxdWVzdGVkIHJlcWVzdGVkIG51bWJlciBvZiBlbGVtZW50cw0KKyAqIEBwYXJhbSB0aW1lb3V0IHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzLCBvciBOaUZwZ2FfSW5maW5pdGVUaW1lb3V0DQorICogQHBhcmFtIGVsZW1lbnRzQWNxdWlyZWQgYWN0dWFsIG51bWJlciBvZiBlbGVtZW50cyBhY3F1aXJlZCwgd2hpY2ggbWF5IGJlDQorICogICAgICAgICAgICAgICAgICAgICAgICAgbGVzcyB0aGFuIHRoZSByZXF1ZXN0ZWQgbnVtYmVyDQorICogQHBhcmFtIGVsZW1lbnRzUmVtYWluaW5nIGlmIG5vbi1OVUxMLCBvdXRwdXRzIHRoZSBudW1iZXIgb2YgZWxlbWVudHMNCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtYWluaW5nIGluIHRoZSBob3N0IG1lbW9yeSBwYXJ0IG9mIHRoZSBETUEgRklGTw0KKyAqIEByZXR1cm4gcmVzdWx0IG9mIHRoZSBjYWxsDQorICovDQorTmlGcGdhX1N0YXR1cyBOaUZwZ2FfQWNxdWlyZUZpZm9SZWFkRWxlbWVudHNJOCgNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOaUZwZ2FfU2Vzc2lvbiBzZXNzaW9uLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90ICAgICAgIGZpZm8sDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50OF90KiogICAgICAgZWxlbWVudHMsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICAgICAgICAgZWxlbWVudHNSZXF1ZXN0ZWQsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgICAgICAgdGltZW91dCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QqICAgICAgICBlbGVtZW50c0FjcXVpcmVkLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCogICAgICAgIGVsZW1lbnRzUmVtYWluaW5nKTsNCisNCisvKioNCisgKiBBY3F1aXJlcyBlbGVtZW50cyBmb3IgcmVhZGluZyBmcm9tIGEgdGFyZ2V0LXRvLWhvc3QgRklGTyBvZiB1bnNpZ25lZCA4LWJpdA0KKyAqIGludGVnZXJzLg0KKyAqDQorICogQWNxdWlyaW5nLCByZWFkaW5nLCBhbmQgcmVsZWFzaW5nIEZJRk8gZWxlbWVudHMgcHJldmVudHMgdGhlIG5lZWQgdG8gY29weQ0KKyAqIHRoZSBjb250ZW50cyBvZiBlbGVtZW50cyBmcm9tIHRoZSBob3N0IG1lbW9yeSBidWZmZXIgdG8gYSBzZXBhcmF0ZQ0KKyAqIHVzZXItYWxsb2NhdGVkIGJ1ZmZlciBiZWZvcmUgcmVhZGluZy4gVGhlIEZQR0EgdGFyZ2V0IGNhbm5vdCB3cml0ZSB0bw0KKyAqIGVsZW1lbnRzIGFjcXVpcmVkIGJ5IHRoZSBob3N0LiBUaGVyZWZvcmUsIHRoZSBob3N0IG11c3QgcmVsZWFzZSBlbGVtZW50cw0KKyAqIGFmdGVyIHJlYWRpbmcgdGhlbS4gVGhlIG51bWJlciBvZiBlbGVtZW50cyBhY3F1aXJlZCBtYXkgZGlmZmVyIGZyb20gdGhlDQorICogbnVtYmVyIG9mIGVsZW1lbnRzIHJlcXVlc3RlZCBpZiwgZm9yIGV4YW1wbGUsIHRoZSBudW1iZXIgb2YgZWxlbWVudHMNCisgKiByZXF1ZXN0ZWQgcmVhY2hlcyB0aGUgZW5kIG9mIHRoZSBob3N0IG1lbW9yeSBidWZmZXIuIEFsd2F5cyByZWxlYXNlIGFsbA0KKyAqIGFjcXVpcmVkIGVsZW1lbnRzIGJlZm9yZSBjbG9zaW5nIHRoZSBzZXNzaW9uLiBEbyBub3QgYXR0ZW1wdCB0byBhY2Nlc3MgRklGTw0KKyAqIGVsZW1lbnRzIGFmdGVyIHRoZSBlbGVtZW50cyBhcmUgcmVsZWFzZWQgb3IgdGhlIHNlc3Npb24gaXMgY2xvc2VkLg0KKyAqDQorICogQHBhcmFtIHNlc3Npb24gaGFuZGxlIHRvIGEgY3VycmVudGx5IG9wZW4gc2Vzc2lvbg0KKyAqIEBwYXJhbSBmaWZvIHRhcmdldC10by1ob3N0IEZJRk8gZnJvbSB3aGljaCB0byByZWFkDQorICogQHBhcmFtIGVsZW1lbnRzIG91dHB1dHMgYSBwb2ludGVyIHRvIHRoZSBlbGVtZW50cyBhY3F1aXJlZA0KKyAqIEBwYXJhbSBlbGVtZW50c1JlcXVlc3RlZCByZXFlc3RlZCBudW1iZXIgb2YgZWxlbWVudHMNCisgKiBAcGFyYW0gdGltZW91dCB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcywgb3IgTmlGcGdhX0luZmluaXRlVGltZW91dA0KKyAqIEBwYXJhbSBlbGVtZW50c0FjcXVpcmVkIGFjdHVhbCBudW1iZXIgb2YgZWxlbWVudHMgYWNxdWlyZWQsIHdoaWNoIG1heSBiZQ0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgIGxlc3MgdGhhbiB0aGUgcmVxdWVzdGVkIG51bWJlcg0KKyAqIEBwYXJhbSBlbGVtZW50c1JlbWFpbmluZyBpZiBub24tTlVMTCwgb3V0cHV0cyB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzDQorICogICAgICAgICAgICAgICAgICAgICAgICAgIHJlbWFpbmluZyBpbiB0aGUgaG9zdCBtZW1vcnkgcGFydCBvZiB0aGUgRE1BIEZJRk8NCisgKiBAcmV0dXJuIHJlc3VsdCBvZiB0aGUgY2FsbA0KKyAqLw0KK05pRnBnYV9TdGF0dXMgTmlGcGdhX0FjcXVpcmVGaWZvUmVhZEVsZW1lbnRzVTgoDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOaUZwZ2FfU2Vzc2lvbiAgc2Vzc2lvbiwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90ICAgICAgICBmaWZvLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCoqICAgICAgIGVsZW1lbnRzLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICAgICAgICAgIGVsZW1lbnRzUmVxdWVzdGVkLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgICAgICAgIHRpbWVvdXQsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QqICAgICAgICAgZWxlbWVudHNBY3F1aXJlZCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCogICAgICAgICBlbGVtZW50c1JlbWFpbmluZyk7DQorDQorLyoqDQorICogQWNxdWlyZXMgZWxlbWVudHMgZm9yIHJlYWRpbmcgZnJvbSBhIHRhcmdldC10by1ob3N0IEZJRk8gb2Ygc2lnbmVkIDE2LWJpdA0KKyAqIGludGVnZXJzLg0KKyAqDQorICogQWNxdWlyaW5nLCByZWFkaW5nLCBhbmQgcmVsZWFzaW5nIEZJRk8gZWxlbWVudHMgcHJldmVudHMgdGhlIG5lZWQgdG8gY29weQ0KKyAqIHRoZSBjb250ZW50cyBvZiBlbGVtZW50cyBmcm9tIHRoZSBob3N0IG1lbW9yeSBidWZmZXIgdG8gYSBzZXBhcmF0ZQ0KKyAqIHVzZXItYWxsb2NhdGVkIGJ1ZmZlciBiZWZvcmUgcmVhZGluZy4gVGhlIEZQR0EgdGFyZ2V0IGNhbm5vdCB3cml0ZSB0bw0KKyAqIGVsZW1lbnRzIGFjcXVpcmVkIGJ5IHRoZSBob3N0LiBUaGVyZWZvcmUsIHRoZSBob3N0IG11c3QgcmVsZWFzZSBlbGVtZW50cw0KKyAqIGFmdGVyIHJlYWRpbmcgdGhlbS4gVGhlIG51bWJlciBvZiBlbGVtZW50cyBhY3F1aXJlZCBtYXkgZGlmZmVyIGZyb20gdGhlDQorICogbnVtYmVyIG9mIGVsZW1lbnRzIHJlcXVlc3RlZCBpZiwgZm9yIGV4YW1wbGUsIHRoZSBudW1iZXIgb2YgZWxlbWVudHMNCisgKiByZXF1ZXN0ZWQgcmVhY2hlcyB0aGUgZW5kIG9mIHRoZSBob3N0IG1lbW9yeSBidWZmZXIuIEFsd2F5cyByZWxlYXNlIGFsbA0KKyAqIGFjcXVpcmVkIGVsZW1lbnRzIGJlZm9yZSBjbG9zaW5nIHRoZSBzZXNzaW9uLiBEbyBub3QgYXR0ZW1wdCB0byBhY2Nlc3MgRklGTw0KKyAqIGVsZW1lbnRzIGFmdGVyIHRoZSBlbGVtZW50cyBhcmUgcmVsZWFzZWQgb3IgdGhlIHNlc3Npb24gaXMgY2xvc2VkLg0KKyAqDQorICogQHBhcmFtIHNlc3Npb24gaGFuZGxlIHRvIGEgY3VycmVudGx5IG9wZW4gc2Vzc2lvbg0KKyAqIEBwYXJhbSBmaWZvIHRhcmdldC10by1ob3N0IEZJRk8gZnJvbSB3aGljaCB0byByZWFkDQorICogQHBhcmFtIGVsZW1lbnRzIG91dHB1dHMgYSBwb2ludGVyIHRvIHRoZSBlbGVtZW50cyBhY3F1aXJlZA0KKyAqIEBwYXJhbSBlbGVtZW50c1JlcXVlc3RlZCByZXFlc3RlZCBudW1iZXIgb2YgZWxlbWVudHMNCisgKiBAcGFyYW0gdGltZW91dCB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcywgb3IgTmlGcGdhX0luZmluaXRlVGltZW91dA0KKyAqIEBwYXJhbSBlbGVtZW50c0FjcXVpcmVkIGFjdHVhbCBudW1iZXIgb2YgZWxlbWVudHMgYWNxdWlyZWQsIHdoaWNoIG1heSBiZQ0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgIGxlc3MgdGhhbiB0aGUgcmVxdWVzdGVkIG51bWJlcg0KKyAqIEBwYXJhbSBlbGVtZW50c1JlbWFpbmluZyBpZiBub24tTlVMTCwgb3V0cHV0cyB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzDQorICogICAgICAgICAgICAgICAgICAgICAgICAgIHJlbWFpbmluZyBpbiB0aGUgaG9zdCBtZW1vcnkgcGFydCBvZiB0aGUgRE1BIEZJRk8NCisgKiBAcmV0dXJuIHJlc3VsdCBvZiB0aGUgY2FsbA0KKyAqLw0KK05pRnBnYV9TdGF0dXMgTmlGcGdhX0FjcXVpcmVGaWZvUmVhZEVsZW1lbnRzSTE2KA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmlGcGdhX1Nlc3Npb24gIHNlc3Npb24sDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAgICAgICAgZmlmbywNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDE2X3QqKiAgICAgICBlbGVtZW50cywNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAgICAgICAgICBlbGVtZW50c1JlcXVlc3RlZCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90ICAgICAgICB0aW1lb3V0LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90KiAgICAgICAgIGVsZW1lbnRzQWNxdWlyZWQsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QqICAgICAgICAgZWxlbWVudHNSZW1haW5pbmcpOw0KKw0KKy8qKg0KKyAqIEFjcXVpcmVzIGVsZW1lbnRzIGZvciByZWFkaW5nIGZyb20gYSB0YXJnZXQtdG8taG9zdCBGSUZPIG9mIHVuc2lnbmVkIDE2LWJpdA0KKyAqIGludGVnZXJzLg0KKyAqDQorICogQWNxdWlyaW5nLCByZWFkaW5nLCBhbmQgcmVsZWFzaW5nIEZJRk8gZWxlbWVudHMgcHJldmVudHMgdGhlIG5lZWQgdG8gY29weQ0KKyAqIHRoZSBjb250ZW50cyBvZiBlbGVtZW50cyBmcm9tIHRoZSBob3N0IG1lbW9yeSBidWZmZXIgdG8gYSBzZXBhcmF0ZQ0KKyAqIHVzZXItYWxsb2NhdGVkIGJ1ZmZlciBiZWZvcmUgcmVhZGluZy4gVGhlIEZQR0EgdGFyZ2V0IGNhbm5vdCB3cml0ZSB0bw0KKyAqIGVsZW1lbnRzIGFjcXVpcmVkIGJ5IHRoZSBob3N0LiBUaGVyZWZvcmUsIHRoZSBob3N0IG11c3QgcmVsZWFzZSBlbGVtZW50cw0KKyAqIGFmdGVyIHJlYWRpbmcgdGhlbS4gVGhlIG51bWJlciBvZiBlbGVtZW50cyBhY3F1aXJlZCBtYXkgZGlmZmVyIGZyb20gdGhlDQorICogbnVtYmVyIG9mIGVsZW1lbnRzIHJlcXVlc3RlZCBpZiwgZm9yIGV4YW1wbGUsIHRoZSBudW1iZXIgb2YgZWxlbWVudHMNCisgKiByZXF1ZXN0ZWQgcmVhY2hlcyB0aGUgZW5kIG9mIHRoZSBob3N0IG1lbW9yeSBidWZmZXIuIEFsd2F5cyByZWxlYXNlIGFsbA0KKyAqIGFjcXVpcmVkIGVsZW1lbnRzIGJlZm9yZSBjbG9zaW5nIHRoZSBzZXNzaW9uLiBEbyBub3QgYXR0ZW1wdCB0byBhY2Nlc3MgRklGTw0KKyAqIGVsZW1lbnRzIGFmdGVyIHRoZSBlbGVtZW50cyBhcmUgcmVsZWFzZWQgb3IgdGhlIHNlc3Npb24gaXMgY2xvc2VkLg0KKyAqDQorICogQHBhcmFtIHNlc3Npb24gaGFuZGxlIHRvIGEgY3VycmVudGx5IG9wZW4gc2Vzc2lvbg0KKyAqIEBwYXJhbSBmaWZvIHRhcmdldC10by1ob3N0IEZJRk8gZnJvbSB3aGljaCB0byByZWFkDQorICogQHBhcmFtIGVsZW1lbnRzIG91dHB1dHMgYSBwb2ludGVyIHRvIHRoZSBlbGVtZW50cyBhY3F1aXJlZA0KKyAqIEBwYXJhbSBlbGVtZW50c1JlcXVlc3RlZCByZXFlc3RlZCBudW1iZXIgb2YgZWxlbWVudHMNCisgKiBAcGFyYW0gdGltZW91dCB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcywgb3IgTmlGcGdhX0luZmluaXRlVGltZW91dA0KKyAqIEBwYXJhbSBlbGVtZW50c0FjcXVpcmVkIGFjdHVhbCBudW1iZXIgb2YgZWxlbWVudHMgYWNxdWlyZWQsIHdoaWNoIG1heSBiZQ0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgIGxlc3MgdGhhbiB0aGUgcmVxdWVzdGVkIG51bWJlcg0KKyAqIEBwYXJhbSBlbGVtZW50c1JlbWFpbmluZyBpZiBub24tTlVMTCwgb3V0cHV0cyB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzDQorICogICAgICAgICAgICAgICAgICAgICAgICAgIHJlbWFpbmluZyBpbiB0aGUgaG9zdCBtZW1vcnkgcGFydCBvZiB0aGUgRE1BIEZJRk8NCisgKiBAcmV0dXJuIHJlc3VsdCBvZiB0aGUgY2FsbA0KKyAqLw0KK05pRnBnYV9TdGF0dXMgTmlGcGdhX0FjcXVpcmVGaWZvUmVhZEVsZW1lbnRzVTE2KA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOaUZwZ2FfU2Vzc2lvbiAgIHNlc3Npb24sDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90ICAgICAgICAgZmlmbywNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QqKiAgICAgICBlbGVtZW50cywNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICAgICAgICAgICBlbGVtZW50c1JlcXVlc3RlZCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgICAgICAgICB0aW1lb3V0LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QqICAgICAgICAgIGVsZW1lbnRzQWNxdWlyZWQsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCogICAgICAgICAgZWxlbWVudHNSZW1haW5pbmcpOw0KKw0KKy8qKg0KKyAqIEFjcXVpcmVzIGVsZW1lbnRzIGZvciByZWFkaW5nIGZyb20gYSB0YXJnZXQtdG8taG9zdCBGSUZPIG9mIHNpZ25lZCAzMi1iaXQNCisgKiBpbnRlZ2Vycy4NCisgKg0KKyAqIEFjcXVpcmluZywgcmVhZGluZywgYW5kIHJlbGVhc2luZyBGSUZPIGVsZW1lbnRzIHByZXZlbnRzIHRoZSBuZWVkIHRvIGNvcHkNCisgKiB0aGUgY29udGVudHMgb2YgZWxlbWVudHMgZnJvbSB0aGUgaG9zdCBtZW1vcnkgYnVmZmVyIHRvIGEgc2VwYXJhdGUNCisgKiB1c2VyLWFsbG9jYXRlZCBidWZmZXIgYmVmb3JlIHJlYWRpbmcuIFRoZSBGUEdBIHRhcmdldCBjYW5ub3Qgd3JpdGUgdG8NCisgKiBlbGVtZW50cyBhY3F1aXJlZCBieSB0aGUgaG9zdC4gVGhlcmVmb3JlLCB0aGUgaG9zdCBtdXN0IHJlbGVhc2UgZWxlbWVudHMNCisgKiBhZnRlciByZWFkaW5nIHRoZW0uIFRoZSBudW1iZXIgb2YgZWxlbWVudHMgYWNxdWlyZWQgbWF5IGRpZmZlciBmcm9tIHRoZQ0KKyAqIG51bWJlciBvZiBlbGVtZW50cyByZXF1ZXN0ZWQgaWYsIGZvciBleGFtcGxlLCB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzDQorICogcmVxdWVzdGVkIHJlYWNoZXMgdGhlIGVuZCBvZiB0aGUgaG9zdCBtZW1vcnkgYnVmZmVyLiBBbHdheXMgcmVsZWFzZSBhbGwNCisgKiBhY3F1aXJlZCBlbGVtZW50cyBiZWZvcmUgY2xvc2luZyB0aGUgc2Vzc2lvbi4gRG8gbm90IGF0dGVtcHQgdG8gYWNjZXNzIEZJRk8NCisgKiBlbGVtZW50cyBhZnRlciB0aGUgZWxlbWVudHMgYXJlIHJlbGVhc2VkIG9yIHRoZSBzZXNzaW9uIGlzIGNsb3NlZC4NCisgKg0KKyAqIEBwYXJhbSBzZXNzaW9uIGhhbmRsZSB0byBhIGN1cnJlbnRseSBvcGVuIHNlc3Npb24NCisgKiBAcGFyYW0gZmlmbyB0YXJnZXQtdG8taG9zdCBGSUZPIGZyb20gd2hpY2ggdG8gcmVhZA0KKyAqIEBwYXJhbSBlbGVtZW50cyBvdXRwdXRzIGEgcG9pbnRlciB0byB0aGUgZWxlbWVudHMgYWNxdWlyZWQNCisgKiBAcGFyYW0gZWxlbWVudHNSZXF1ZXN0ZWQgcmVxZXN0ZWQgbnVtYmVyIG9mIGVsZW1lbnRzDQorICogQHBhcmFtIHRpbWVvdXQgdGltZW91dCBpbiBtaWxsaXNlY29uZHMsIG9yIE5pRnBnYV9JbmZpbml0ZVRpbWVvdXQNCisgKiBAcGFyYW0gZWxlbWVudHNBY3F1aXJlZCBhY3R1YWwgbnVtYmVyIG9mIGVsZW1lbnRzIGFjcXVpcmVkLCB3aGljaCBtYXkgYmUNCisgKiAgICAgICAgICAgICAgICAgICAgICAgICBsZXNzIHRoYW4gdGhlIHJlcXVlc3RlZCBudW1iZXINCisgKiBAcGFyYW0gZWxlbWVudHNSZW1haW5pbmcgaWYgbm9uLU5VTEwsIG91dHB1dHMgdGhlIG51bWJlciBvZiBlbGVtZW50cw0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICByZW1haW5pbmcgaW4gdGhlIGhvc3QgbWVtb3J5IHBhcnQgb2YgdGhlIERNQSBGSUZPDQorICogQHJldHVybiByZXN1bHQgb2YgdGhlIGNhbGwNCisgKi8NCitOaUZwZ2FfU3RhdHVzIE5pRnBnYV9BY3F1aXJlRmlmb1JlYWRFbGVtZW50c0kzMigNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5pRnBnYV9TZXNzaW9uICBzZXNzaW9uLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgICAgICAgIGZpZm8sDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90KiogICAgICAgZWxlbWVudHMsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgICAgICAgICAgZWxlbWVudHNSZXF1ZXN0ZWQsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAgICAgICAgdGltZW91dCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCogICAgICAgICBlbGVtZW50c0FjcXVpcmVkLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90KiAgICAgICAgIGVsZW1lbnRzUmVtYWluaW5nKTsNCisNCisvKioNCisgKiBBY3F1aXJlcyBlbGVtZW50cyBmb3IgcmVhZGluZyBmcm9tIGEgdGFyZ2V0LXRvLWhvc3QgRklGTyBvZiB1bnNpZ25lZCAzMi1iaXQNCisgKiBpbnRlZ2Vycy4NCisgKg0KKyAqIEFjcXVpcmluZywgcmVhZGluZywgYW5kIHJlbGVhc2luZyBGSUZPIGVsZW1lbnRzIHByZXZlbnRzIHRoZSBuZWVkIHRvIGNvcHkNCisgKiB0aGUgY29udGVudHMgb2YgZWxlbWVudHMgZnJvbSB0aGUgaG9zdCBtZW1vcnkgYnVmZmVyIHRvIGEgc2VwYXJhdGUNCisgKiB1c2VyLWFsbG9jYXRlZCBidWZmZXIgYmVmb3JlIHJlYWRpbmcuIFRoZSBGUEdBIHRhcmdldCBjYW5ub3Qgd3JpdGUgdG8NCisgKiBlbGVtZW50cyBhY3F1aXJlZCBieSB0aGUgaG9zdC4gVGhlcmVmb3JlLCB0aGUgaG9zdCBtdXN0IHJlbGVhc2UgZWxlbWVudHMNCisgKiBhZnRlciByZWFkaW5nIHRoZW0uIFRoZSBudW1iZXIgb2YgZWxlbWVudHMgYWNxdWlyZWQgbWF5IGRpZmZlciBmcm9tIHRoZQ0KKyAqIG51bWJlciBvZiBlbGVtZW50cyByZXF1ZXN0ZWQgaWYsIGZvciBleGFtcGxlLCB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzDQorICogcmVxdWVzdGVkIHJlYWNoZXMgdGhlIGVuZCBvZiB0aGUgaG9zdCBtZW1vcnkgYnVmZmVyLiBBbHdheXMgcmVsZWFzZSBhbGwNCisgKiBhY3F1aXJlZCBlbGVtZW50cyBiZWZvcmUgY2xvc2luZyB0aGUgc2Vzc2lvbi4gRG8gbm90IGF0dGVtcHQgdG8gYWNjZXNzIEZJRk8NCisgKiBlbGVtZW50cyBhZnRlciB0aGUgZWxlbWVudHMgYXJlIHJlbGVhc2VkIG9yIHRoZSBzZXNzaW9uIGlzIGNsb3NlZC4NCisgKg0KKyAqIEBwYXJhbSBzZXNzaW9uIGhhbmRsZSB0byBhIGN1cnJlbnRseSBvcGVuIHNlc3Npb24NCisgKiBAcGFyYW0gZmlmbyB0YXJnZXQtdG8taG9zdCBGSUZPIGZyb20gd2hpY2ggdG8gcmVhZA0KKyAqIEBwYXJhbSBlbGVtZW50cyBvdXRwdXRzIGEgcG9pbnRlciB0byB0aGUgZWxlbWVudHMgYWNxdWlyZWQNCisgKiBAcGFyYW0gZWxlbWVudHNSZXF1ZXN0ZWQgcmVxZXN0ZWQgbnVtYmVyIG9mIGVsZW1lbnRzDQorICogQHBhcmFtIHRpbWVvdXQgdGltZW91dCBpbiBtaWxsaXNlY29uZHMsIG9yIE5pRnBnYV9JbmZpbml0ZVRpbWVvdXQNCisgKiBAcGFyYW0gZWxlbWVudHNBY3F1aXJlZCBhY3R1YWwgbnVtYmVyIG9mIGVsZW1lbnRzIGFjcXVpcmVkLCB3aGljaCBtYXkgYmUNCisgKiAgICAgICAgICAgICAgICAgICAgICAgICBsZXNzIHRoYW4gdGhlIHJlcXVlc3RlZCBudW1iZXINCisgKiBAcGFyYW0gZWxlbWVudHNSZW1haW5pbmcgaWYgbm9uLU5VTEwsIG91dHB1dHMgdGhlIG51bWJlciBvZiBlbGVtZW50cw0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICByZW1haW5pbmcgaW4gdGhlIGhvc3QgbWVtb3J5IHBhcnQgb2YgdGhlIERNQSBGSUZPDQorICogQHJldHVybiByZXN1bHQgb2YgdGhlIGNhbGwNCisgKi8NCitOaUZwZ2FfU3RhdHVzIE5pRnBnYV9BY3F1aXJlRmlmb1JlYWRFbGVtZW50c1UzMigNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmlGcGdhX1Nlc3Npb24gICBzZXNzaW9uLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAgICAgICAgIGZpZm8sDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90KiogICAgICAgZWxlbWVudHMsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAgICAgICAgICAgZWxlbWVudHNSZXF1ZXN0ZWQsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90ICAgICAgICAgdGltZW91dCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90KiAgICAgICAgICBlbGVtZW50c0FjcXVpcmVkLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QqICAgICAgICAgIGVsZW1lbnRzUmVtYWluaW5nKTsNCisNCisvKioNCisgKiBBY3F1aXJlcyBlbGVtZW50cyBmb3IgcmVhZGluZyBmcm9tIGEgdGFyZ2V0LXRvLWhvc3QgRklGTyBvZiBzaWduZWQgNjQtYml0DQorICogaW50ZWdlcnMuDQorICoNCisgKiBBY3F1aXJpbmcsIHJlYWRpbmcsIGFuZCByZWxlYXNpbmcgRklGTyBlbGVtZW50cyBwcmV2ZW50cyB0aGUgbmVlZCB0byBjb3B5DQorICogdGhlIGNvbnRlbnRzIG9mIGVsZW1lbnRzIGZyb20gdGhlIGhvc3QgbWVtb3J5IGJ1ZmZlciB0byBhIHNlcGFyYXRlDQorICogdXNlci1hbGxvY2F0ZWQgYnVmZmVyIGJlZm9yZSByZWFkaW5nLiBUaGUgRlBHQSB0YXJnZXQgY2Fubm90IHdyaXRlIHRvDQorICogZWxlbWVudHMgYWNxdWlyZWQgYnkgdGhlIGhvc3QuIFRoZXJlZm9yZSwgdGhlIGhvc3QgbXVzdCByZWxlYXNlIGVsZW1lbnRzDQorICogYWZ0ZXIgcmVhZGluZyB0aGVtLiBUaGUgbnVtYmVyIG9mIGVsZW1lbnRzIGFjcXVpcmVkIG1heSBkaWZmZXIgZnJvbSB0aGUNCisgKiBudW1iZXIgb2YgZWxlbWVudHMgcmVxdWVzdGVkIGlmLCBmb3IgZXhhbXBsZSwgdGhlIG51bWJlciBvZiBlbGVtZW50cw0KKyAqIHJlcXVlc3RlZCByZWFjaGVzIHRoZSBlbmQgb2YgdGhlIGhvc3QgbWVtb3J5IGJ1ZmZlci4gQWx3YXlzIHJlbGVhc2UgYWxsDQorICogYWNxdWlyZWQgZWxlbWVudHMgYmVmb3JlIGNsb3NpbmcgdGhlIHNlc3Npb24uIERvIG5vdCBhdHRlbXB0IHRvIGFjY2VzcyBGSUZPDQorICogZWxlbWVudHMgYWZ0ZXIgdGhlIGVsZW1lbnRzIGFyZSByZWxlYXNlZCBvciB0aGUgc2Vzc2lvbiBpcyBjbG9zZWQuDQorICoNCisgKiBAcGFyYW0gc2Vzc2lvbiBoYW5kbGUgdG8gYSBjdXJyZW50bHkgb3BlbiBzZXNzaW9uDQorICogQHBhcmFtIGZpZm8gdGFyZ2V0LXRvLWhvc3QgRklGTyBmcm9tIHdoaWNoIHRvIHJlYWQNCisgKiBAcGFyYW0gZWxlbWVudHMgb3V0cHV0cyBhIHBvaW50ZXIgdG8gdGhlIGVsZW1lbnRzIGFjcXVpcmVkDQorICogQHBhcmFtIGVsZW1lbnRzUmVxdWVzdGVkIHJlcWVzdGVkIG51bWJlciBvZiBlbGVtZW50cw0KKyAqIEBwYXJhbSB0aW1lb3V0IHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzLCBvciBOaUZwZ2FfSW5maW5pdGVUaW1lb3V0DQorICogQHBhcmFtIGVsZW1lbnRzQWNxdWlyZWQgYWN0dWFsIG51bWJlciBvZiBlbGVtZW50cyBhY3F1aXJlZCwgd2hpY2ggbWF5IGJlDQorICogICAgICAgICAgICAgICAgICAgICAgICAgbGVzcyB0aGFuIHRoZSByZXF1ZXN0ZWQgbnVtYmVyDQorICogQHBhcmFtIGVsZW1lbnRzUmVtYWluaW5nIGlmIG5vbi1OVUxMLCBvdXRwdXRzIHRoZSBudW1iZXIgb2YgZWxlbWVudHMNCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtYWluaW5nIGluIHRoZSBob3N0IG1lbW9yeSBwYXJ0IG9mIHRoZSBETUEgRklGTw0KKyAqIEByZXR1cm4gcmVzdWx0IG9mIHRoZSBjYWxsDQorICovDQorTmlGcGdhX1N0YXR1cyBOaUZwZ2FfQWNxdWlyZUZpZm9SZWFkRWxlbWVudHNJNjQoDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOaUZwZ2FfU2Vzc2lvbiAgc2Vzc2lvbiwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90ICAgICAgICBmaWZvLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50NjRfdCoqICAgICAgIGVsZW1lbnRzLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICAgICAgICAgIGVsZW1lbnRzUmVxdWVzdGVkLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgICAgICAgIHRpbWVvdXQsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QqICAgICAgICAgZWxlbWVudHNBY3F1aXJlZCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCogICAgICAgICBlbGVtZW50c1JlbWFpbmluZyk7DQorDQorLyoqDQorICogQWNxdWlyZXMgZWxlbWVudHMgZm9yIHJlYWRpbmcgZnJvbSBhIHRhcmdldC10by1ob3N0IEZJRk8gb2YgdW5zaWduZWQgNjQtYml0DQorICogaW50ZWdlcnMuDQorICoNCisgKiBBY3F1aXJpbmcsIHJlYWRpbmcsIGFuZCByZWxlYXNpbmcgRklGTyBlbGVtZW50cyBwcmV2ZW50cyB0aGUgbmVlZCB0byBjb3B5DQorICogdGhlIGNvbnRlbnRzIG9mIGVsZW1lbnRzIGZyb20gdGhlIGhvc3QgbWVtb3J5IGJ1ZmZlciB0byBhIHNlcGFyYXRlDQorICogdXNlci1hbGxvY2F0ZWQgYnVmZmVyIGJlZm9yZSByZWFkaW5nLiBUaGUgRlBHQSB0YXJnZXQgY2Fubm90IHdyaXRlIHRvDQorICogZWxlbWVudHMgYWNxdWlyZWQgYnkgdGhlIGhvc3QuIFRoZXJlZm9yZSwgdGhlIGhvc3QgbXVzdCByZWxlYXNlIGVsZW1lbnRzDQorICogYWZ0ZXIgcmVhZGluZyB0aGVtLiBUaGUgbnVtYmVyIG9mIGVsZW1lbnRzIGFjcXVpcmVkIG1heSBkaWZmZXIgZnJvbSB0aGUNCisgKiBudW1iZXIgb2YgZWxlbWVudHMgcmVxdWVzdGVkIGlmLCBmb3IgZXhhbXBsZSwgdGhlIG51bWJlciBvZiBlbGVtZW50cw0KKyAqIHJlcXVlc3RlZCByZWFjaGVzIHRoZSBlbmQgb2YgdGhlIGhvc3QgbWVtb3J5IGJ1ZmZlci4gQWx3YXlzIHJlbGVhc2UgYWxsDQorICogYWNxdWlyZWQgZWxlbWVudHMgYmVmb3JlIGNsb3NpbmcgdGhlIHNlc3Npb24uIERvIG5vdCBhdHRlbXB0IHRvIGFjY2VzcyBGSUZPDQorICogZWxlbWVudHMgYWZ0ZXIgdGhlIGVsZW1lbnRzIGFyZSByZWxlYXNlZCBvciB0aGUgc2Vzc2lvbiBpcyBjbG9zZWQuDQorICoNCisgKiBAcGFyYW0gc2Vzc2lvbiBoYW5kbGUgdG8gYSBjdXJyZW50bHkgb3BlbiBzZXNzaW9uDQorICogQHBhcmFtIGZpZm8gdGFyZ2V0LXRvLWhvc3QgRklGTyBmcm9tIHdoaWNoIHRvIHJlYWQNCisgKiBAcGFyYW0gZWxlbWVudHMgb3V0cHV0cyBhIHBvaW50ZXIgdG8gdGhlIGVsZW1lbnRzIGFjcXVpcmVkDQorICogQHBhcmFtIGVsZW1lbnRzUmVxdWVzdGVkIHJlcWVzdGVkIG51bWJlciBvZiBlbGVtZW50cw0KKyAqIEBwYXJhbSB0aW1lb3V0IHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzLCBvciBOaUZwZ2FfSW5maW5pdGVUaW1lb3V0DQorICogQHBhcmFtIGVsZW1lbnRzQWNxdWlyZWQgYWN0dWFsIG51bWJlciBvZiBlbGVtZW50cyBhY3F1aXJlZCwgd2hpY2ggbWF5IGJlDQorICogICAgICAgICAgICAgICAgICAgICAgICAgbGVzcyB0aGFuIHRoZSByZXF1ZXN0ZWQgbnVtYmVyDQorICogQHBhcmFtIGVsZW1lbnRzUmVtYWluaW5nIGlmIG5vbi1OVUxMLCBvdXRwdXRzIHRoZSBudW1iZXIgb2YgZWxlbWVudHMNCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtYWluaW5nIGluIHRoZSBob3N0IG1lbW9yeSBwYXJ0IG9mIHRoZSBETUEgRklGTw0KKyAqIEByZXR1cm4gcmVzdWx0IG9mIHRoZSBjYWxsDQorICovDQorTmlGcGdhX1N0YXR1cyBOaUZwZ2FfQWNxdWlyZUZpZm9SZWFkRWxlbWVudHNVNjQoDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5pRnBnYV9TZXNzaW9uICAgc2Vzc2lvbiwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgICAgICAgICBmaWZvLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50NjRfdCoqICAgICAgIGVsZW1lbnRzLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgICAgICAgICAgIGVsZW1lbnRzUmVxdWVzdGVkLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAgICAgICAgIHRpbWVvdXQsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCogICAgICAgICAgZWxlbWVudHNBY3F1aXJlZCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90KiAgICAgICAgICBlbGVtZW50c1JlbWFpbmluZyk7DQorDQorLyoqDQorICogQWNxdWlyZXMgZWxlbWVudHMgZm9yIHdyaXRpbmcgdG8gYSBob3N0LXRvLXRhcmdldCBGSUZPIG9mIGJvb2xlYW5zLg0KKyAqDQorICogQWNxdWlyaW5nLCB3cml0aW5nLCBhbmQgcmVsZWFzaW5nIEZJRk8gZWxlbWVudHMgcHJldmVudHMgdGhlIG5lZWQgdG8gd3JpdGUNCisgKiBmaXJzdCBpbnRvIGEgc2VwYXJhdGUgdXNlci1hbGxvY2F0ZWQgYnVmZmVyIGFuZCB0aGVuIGNvcHkgdGhlIGNvbnRlbnRzIG9mDQorICogZWxlbWVudHMgdG8gdGhlIGhvc3QgbWVtb3J5IGJ1ZmZlci4gVGhlIEZQR0EgdGFyZ2V0IGNhbm5vdCByZWFkIGVsZW1lbnRzDQorICogYWNxdWlyZWQgYnkgdGhlIGhvc3QuIFRoZXJlZm9yZSwgdGhlIGhvc3QgbXVzdCByZWxlYXNlIGVsZW1lbnRzIGFmdGVyDQorICogd3JpdGluZyB0byB0aGVtLiBUaGUgbnVtYmVyIG9mIGVsZW1lbnRzIGFjcXVpcmVkIG1heSBkaWZmZXIgZnJvbSB0aGUgbnVtYmVyDQorICogb2YgZWxlbWVudHMgcmVxdWVzdGVkIGlmLCBmb3IgZXhhbXBsZSwgdGhlIG51bWJlciBvZiBlbGVtZW50cyByZXF1ZXN0ZWQNCisgKiByZWFjaGVzIHRoZSBlbmQgb2YgdGhlIGhvc3QgbWVtb3J5IGJ1ZmZlci4gQWx3YXlzIHJlbGVhc2UgYWxsIGFjcXVpcmVkDQorICogZWxlbWVudHMgYmVmb3JlIGNsb3NpbmcgdGhlIHNlc3Npb24uIERvIG5vdCBhdHRlbXB0IHRvIGFjY2VzcyBGSUZPIGVsZW1lbnRzDQorICogYWZ0ZXIgdGhlIGVsZW1lbnRzIGFyZSByZWxlYXNlZCBvciB0aGUgc2Vzc2lvbiBpcyBjbG9zZWQuDQorICoNCisgKiBAcGFyYW0gc2Vzc2lvbiBoYW5kbGUgdG8gYSBjdXJyZW50bHkgb3BlbiBzZXNzaW9uDQorICogQHBhcmFtIGZpZm8gaG9zdC10by10YXJnZXQgRklGTyB0byB3aGljaCB0byB3cml0ZQ0KKyAqIEBwYXJhbSBlbGVtZW50cyBvdXRwdXRzIGEgcG9pbnRlciB0byB0aGUgZWxlbWVudHMgYWNxdWlyZWQNCisgKiBAcGFyYW0gZWxlbWVudHNSZXF1ZXN0ZWQgcmVxZXN0ZWQgbnVtYmVyIG9mIGVsZW1lbnRzDQorICogQHBhcmFtIHRpbWVvdXQgdGltZW91dCBpbiBtaWxsaXNlY29uZHMsIG9yIE5pRnBnYV9JbmZpbml0ZVRpbWVvdXQNCisgKiBAcGFyYW0gZWxlbWVudHNBY3F1aXJlZCBhY3R1YWwgbnVtYmVyIG9mIGVsZW1lbnRzIGFjcXVpcmVkLCB3aGljaCBtYXkgYmUNCisgKiAgICAgICAgICAgICAgICAgICAgICAgICBsZXNzIHRoYW4gdGhlIHJlcXVlc3RlZCBudW1iZXINCisgKiBAcGFyYW0gZWxlbWVudHNSZW1haW5pbmcgaWYgbm9uLU5VTEwsIG91dHB1dHMgdGhlIG51bWJlciBvZiBlbGVtZW50cw0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICByZW1haW5pbmcgaW4gdGhlIGhvc3QgbWVtb3J5IHBhcnQgb2YgdGhlIERNQSBGSUZPDQorICogQHJldHVybiByZXN1bHQgb2YgdGhlIGNhbGwNCisgKi8NCitOaUZwZ2FfU3RhdHVzIE5pRnBnYV9BY3F1aXJlRmlmb1dyaXRlRWxlbWVudHNCb29sKA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5pRnBnYV9TZXNzaW9uIHNlc3Npb24sDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgICAgICAgZmlmbywNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOaUZwZ2FfQm9vbCoqICBlbGVtZW50cywNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgICAgICAgICBlbGVtZW50c1JlcXVlc3RlZCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAgICAgICB0aW1lb3V0LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCogICAgICAgIGVsZW1lbnRzQWNxdWlyZWQsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90KiAgICAgICAgZWxlbWVudHNSZW1haW5pbmcpOw0KKw0KKy8qKg0KKyAqIEFjcXVpcmVzIGVsZW1lbnRzIGZvciB3cml0aW5nIHRvIGEgaG9zdC10by10YXJnZXQgRklGTyBvZiBzaWduZWQgOC1iaXQNCisgKiBpbnRlZ2Vycy4NCisgKg0KKyAqIEFjcXVpcmluZywgd3JpdGluZywgYW5kIHJlbGVhc2luZyBGSUZPIGVsZW1lbnRzIHByZXZlbnRzIHRoZSBuZWVkIHRvIHdyaXRlDQorICogZmlyc3QgaW50byBhIHNlcGFyYXRlIHVzZXItYWxsb2NhdGVkIGJ1ZmZlciBhbmQgdGhlbiBjb3B5IHRoZSBjb250ZW50cyBvZg0KKyAqIGVsZW1lbnRzIHRvIHRoZSBob3N0IG1lbW9yeSBidWZmZXIuIFRoZSBGUEdBIHRhcmdldCBjYW5ub3QgcmVhZCBlbGVtZW50cw0KKyAqIGFjcXVpcmVkIGJ5IHRoZSBob3N0LiBUaGVyZWZvcmUsIHRoZSBob3N0IG11c3QgcmVsZWFzZSBlbGVtZW50cyBhZnRlcg0KKyAqIHdyaXRpbmcgdG8gdGhlbS4gVGhlIG51bWJlciBvZiBlbGVtZW50cyBhY3F1aXJlZCBtYXkgZGlmZmVyIGZyb20gdGhlIG51bWJlcg0KKyAqIG9mIGVsZW1lbnRzIHJlcXVlc3RlZCBpZiwgZm9yIGV4YW1wbGUsIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgcmVxdWVzdGVkDQorICogcmVhY2hlcyB0aGUgZW5kIG9mIHRoZSBob3N0IG1lbW9yeSBidWZmZXIuIEFsd2F5cyByZWxlYXNlIGFsbCBhY3F1aXJlZA0KKyAqIGVsZW1lbnRzIGJlZm9yZSBjbG9zaW5nIHRoZSBzZXNzaW9uLiBEbyBub3QgYXR0ZW1wdCB0byBhY2Nlc3MgRklGTyBlbGVtZW50cw0KKyAqIGFmdGVyIHRoZSBlbGVtZW50cyBhcmUgcmVsZWFzZWQgb3IgdGhlIHNlc3Npb24gaXMgY2xvc2VkLg0KKyAqDQorICogQHBhcmFtIHNlc3Npb24gaGFuZGxlIHRvIGEgY3VycmVudGx5IG9wZW4gc2Vzc2lvbg0KKyAqIEBwYXJhbSBmaWZvIGhvc3QtdG8tdGFyZ2V0IEZJRk8gdG8gd2hpY2ggdG8gd3JpdGUNCisgKiBAcGFyYW0gZWxlbWVudHMgb3V0cHV0cyBhIHBvaW50ZXIgdG8gdGhlIGVsZW1lbnRzIGFjcXVpcmVkDQorICogQHBhcmFtIGVsZW1lbnRzUmVxdWVzdGVkIHJlcWVzdGVkIG51bWJlciBvZiBlbGVtZW50cw0KKyAqIEBwYXJhbSB0aW1lb3V0IHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzLCBvciBOaUZwZ2FfSW5maW5pdGVUaW1lb3V0DQorICogQHBhcmFtIGVsZW1lbnRzQWNxdWlyZWQgYWN0dWFsIG51bWJlciBvZiBlbGVtZW50cyBhY3F1aXJlZCwgd2hpY2ggbWF5IGJlDQorICogICAgICAgICAgICAgICAgICAgICAgICAgbGVzcyB0aGFuIHRoZSByZXF1ZXN0ZWQgbnVtYmVyDQorICogQHBhcmFtIGVsZW1lbnRzUmVtYWluaW5nIGlmIG5vbi1OVUxMLCBvdXRwdXRzIHRoZSBudW1iZXIgb2YgZWxlbWVudHMNCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtYWluaW5nIGluIHRoZSBob3N0IG1lbW9yeSBwYXJ0IG9mIHRoZSBETUEgRklGTw0KKyAqIEByZXR1cm4gcmVzdWx0IG9mIHRoZSBjYWxsDQorICovDQorTmlGcGdhX1N0YXR1cyBOaUZwZ2FfQWNxdWlyZUZpZm9Xcml0ZUVsZW1lbnRzSTgoDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmlGcGdhX1Nlc3Npb24gc2Vzc2lvbiwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAgICAgICBmaWZvLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDhfdCoqICAgICAgIGVsZW1lbnRzLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAgICAgICAgIGVsZW1lbnRzUmVxdWVzdGVkLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90ICAgICAgIHRpbWVvdXQsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90KiAgICAgICAgZWxlbWVudHNBY3F1aXJlZCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QqICAgICAgICBlbGVtZW50c1JlbWFpbmluZyk7DQorDQorLyoqDQorICogQWNxdWlyZXMgZWxlbWVudHMgZm9yIHdyaXRpbmcgdG8gYSBob3N0LXRvLXRhcmdldCBGSUZPIG9mIHVuc2lnbmVkIDgtYml0DQorICogaW50ZWdlcnMuDQorICoNCisgKiBBY3F1aXJpbmcsIHdyaXRpbmcsIGFuZCByZWxlYXNpbmcgRklGTyBlbGVtZW50cyBwcmV2ZW50cyB0aGUgbmVlZCB0byB3cml0ZQ0KKyAqIGZpcnN0IGludG8gYSBzZXBhcmF0ZSB1c2VyLWFsbG9jYXRlZCBidWZmZXIgYW5kIHRoZW4gY29weSB0aGUgY29udGVudHMgb2YNCisgKiBlbGVtZW50cyB0byB0aGUgaG9zdCBtZW1vcnkgYnVmZmVyLiBUaGUgRlBHQSB0YXJnZXQgY2Fubm90IHJlYWQgZWxlbWVudHMNCisgKiBhY3F1aXJlZCBieSB0aGUgaG9zdC4gVGhlcmVmb3JlLCB0aGUgaG9zdCBtdXN0IHJlbGVhc2UgZWxlbWVudHMgYWZ0ZXINCisgKiB3cml0aW5nIHRvIHRoZW0uIFRoZSBudW1iZXIgb2YgZWxlbWVudHMgYWNxdWlyZWQgbWF5IGRpZmZlciBmcm9tIHRoZSBudW1iZXINCisgKiBvZiBlbGVtZW50cyByZXF1ZXN0ZWQgaWYsIGZvciBleGFtcGxlLCB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIHJlcXVlc3RlZA0KKyAqIHJlYWNoZXMgdGhlIGVuZCBvZiB0aGUgaG9zdCBtZW1vcnkgYnVmZmVyLiBBbHdheXMgcmVsZWFzZSBhbGwgYWNxdWlyZWQNCisgKiBlbGVtZW50cyBiZWZvcmUgY2xvc2luZyB0aGUgc2Vzc2lvbi4gRG8gbm90IGF0dGVtcHQgdG8gYWNjZXNzIEZJRk8gZWxlbWVudHMNCisgKiBhZnRlciB0aGUgZWxlbWVudHMgYXJlIHJlbGVhc2VkIG9yIHRoZSBzZXNzaW9uIGlzIGNsb3NlZC4NCisgKg0KKyAqIEBwYXJhbSBzZXNzaW9uIGhhbmRsZSB0byBhIGN1cnJlbnRseSBvcGVuIHNlc3Npb24NCisgKiBAcGFyYW0gZmlmbyBob3N0LXRvLXRhcmdldCBGSUZPIHRvIHdoaWNoIHRvIHdyaXRlDQorICogQHBhcmFtIGVsZW1lbnRzIG91dHB1dHMgYSBwb2ludGVyIHRvIHRoZSBlbGVtZW50cyBhY3F1aXJlZA0KKyAqIEBwYXJhbSBlbGVtZW50c1JlcXVlc3RlZCByZXFlc3RlZCBudW1iZXIgb2YgZWxlbWVudHMNCisgKiBAcGFyYW0gdGltZW91dCB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcywgb3IgTmlGcGdhX0luZmluaXRlVGltZW91dA0KKyAqIEBwYXJhbSBlbGVtZW50c0FjcXVpcmVkIGFjdHVhbCBudW1iZXIgb2YgZWxlbWVudHMgYWNxdWlyZWQsIHdoaWNoIG1heSBiZQ0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgIGxlc3MgdGhhbiB0aGUgcmVxdWVzdGVkIG51bWJlcg0KKyAqIEBwYXJhbSBlbGVtZW50c1JlbWFpbmluZyBpZiBub24tTlVMTCwgb3V0cHV0cyB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzDQorICogICAgICAgICAgICAgICAgICAgICAgICAgIHJlbWFpbmluZyBpbiB0aGUgaG9zdCBtZW1vcnkgcGFydCBvZiB0aGUgRE1BIEZJRk8NCisgKiBAcmV0dXJuIHJlc3VsdCBvZiB0aGUgY2FsbA0KKyAqLw0KK05pRnBnYV9TdGF0dXMgTmlGcGdhX0FjcXVpcmVGaWZvV3JpdGVFbGVtZW50c1U4KA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5pRnBnYV9TZXNzaW9uIHNlc3Npb24sDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgICAgICAgZmlmbywNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90KiogICAgICBlbGVtZW50cywNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgICAgICAgICBlbGVtZW50c1JlcXVlc3RlZCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAgICAgICB0aW1lb3V0LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCogICAgICAgIGVsZW1lbnRzQWNxdWlyZWQsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90KiAgICAgICAgZWxlbWVudHNSZW1haW5pbmcpOw0KKw0KKy8qKg0KKyAqIEFjcXVpcmVzIGVsZW1lbnRzIGZvciB3cml0aW5nIHRvIGEgaG9zdC10by10YXJnZXQgRklGTyBvZiBzaWduZWQgMTYtYml0DQorICogaW50ZWdlcnMuDQorICoNCisgKiBBY3F1aXJpbmcsIHdyaXRpbmcsIGFuZCByZWxlYXNpbmcgRklGTyBlbGVtZW50cyBwcmV2ZW50cyB0aGUgbmVlZCB0byB3cml0ZQ0KKyAqIGZpcnN0IGludG8gYSBzZXBhcmF0ZSB1c2VyLWFsbG9jYXRlZCBidWZmZXIgYW5kIHRoZW4gY29weSB0aGUgY29udGVudHMgb2YNCisgKiBlbGVtZW50cyB0byB0aGUgaG9zdCBtZW1vcnkgYnVmZmVyLiBUaGUgRlBHQSB0YXJnZXQgY2Fubm90IHJlYWQgZWxlbWVudHMNCisgKiBhY3F1aXJlZCBieSB0aGUgaG9zdC4gVGhlcmVmb3JlLCB0aGUgaG9zdCBtdXN0IHJlbGVhc2UgZWxlbWVudHMgYWZ0ZXINCisgKiB3cml0aW5nIHRvIHRoZW0uIFRoZSBudW1iZXIgb2YgZWxlbWVudHMgYWNxdWlyZWQgbWF5IGRpZmZlciBmcm9tIHRoZSBudW1iZXINCisgKiBvZiBlbGVtZW50cyByZXF1ZXN0ZWQgaWYsIGZvciBleGFtcGxlLCB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIHJlcXVlc3RlZA0KKyAqIHJlYWNoZXMgdGhlIGVuZCBvZiB0aGUgaG9zdCBtZW1vcnkgYnVmZmVyLiBBbHdheXMgcmVsZWFzZSBhbGwgYWNxdWlyZWQNCisgKiBlbGVtZW50cyBiZWZvcmUgY2xvc2luZyB0aGUgc2Vzc2lvbi4gRG8gbm90IGF0dGVtcHQgdG8gYWNjZXNzIEZJRk8gZWxlbWVudHMNCisgKiBhZnRlciB0aGUgZWxlbWVudHMgYXJlIHJlbGVhc2VkIG9yIHRoZSBzZXNzaW9uIGlzIGNsb3NlZC4NCisgKg0KKyAqIEBwYXJhbSBzZXNzaW9uIGhhbmRsZSB0byBhIGN1cnJlbnRseSBvcGVuIHNlc3Npb24NCisgKiBAcGFyYW0gZmlmbyBob3N0LXRvLXRhcmdldCBGSUZPIHRvIHdoaWNoIHRvIHdyaXRlDQorICogQHBhcmFtIGVsZW1lbnRzIG91dHB1dHMgYSBwb2ludGVyIHRvIHRoZSBlbGVtZW50cyBhY3F1aXJlZA0KKyAqIEBwYXJhbSBlbGVtZW50c1JlcXVlc3RlZCByZXFlc3RlZCBudW1iZXIgb2YgZWxlbWVudHMNCisgKiBAcGFyYW0gdGltZW91dCB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcywgb3IgTmlGcGdhX0luZmluaXRlVGltZW91dA0KKyAqIEBwYXJhbSBlbGVtZW50c0FjcXVpcmVkIGFjdHVhbCBudW1iZXIgb2YgZWxlbWVudHMgYWNxdWlyZWQsIHdoaWNoIG1heSBiZQ0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgIGxlc3MgdGhhbiB0aGUgcmVxdWVzdGVkIG51bWJlcg0KKyAqIEBwYXJhbSBlbGVtZW50c1JlbWFpbmluZyBpZiBub24tTlVMTCwgb3V0cHV0cyB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzDQorICogICAgICAgICAgICAgICAgICAgICAgICAgIHJlbWFpbmluZyBpbiB0aGUgaG9zdCBtZW1vcnkgcGFydCBvZiB0aGUgRE1BIEZJRk8NCisgKiBAcmV0dXJuIHJlc3VsdCBvZiB0aGUgY2FsbA0KKyAqLw0KK05pRnBnYV9TdGF0dXMgTmlGcGdhX0FjcXVpcmVGaWZvV3JpdGVFbGVtZW50c0kxNigNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOaUZwZ2FfU2Vzc2lvbiBzZXNzaW9uLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90ICAgICAgIGZpZm8sDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MTZfdCoqICAgICAgZWxlbWVudHMsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICAgICAgICAgZWxlbWVudHNSZXF1ZXN0ZWQsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgICAgICAgdGltZW91dCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QqICAgICAgICBlbGVtZW50c0FjcXVpcmVkLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCogICAgICAgIGVsZW1lbnRzUmVtYWluaW5nKTsNCisNCisvKioNCisgKiBBY3F1aXJlcyBlbGVtZW50cyBmb3Igd3JpdGluZyB0byBhIGhvc3QtdG8tdGFyZ2V0IEZJRk8gb2YgdW5zaWduZWQgMTYtYml0DQorICogaW50ZWdlcnMuDQorICoNCisgKiBBY3F1aXJpbmcsIHdyaXRpbmcsIGFuZCByZWxlYXNpbmcgRklGTyBlbGVtZW50cyBwcmV2ZW50cyB0aGUgbmVlZCB0byB3cml0ZQ0KKyAqIGZpcnN0IGludG8gYSBzZXBhcmF0ZSB1c2VyLWFsbG9jYXRlZCBidWZmZXIgYW5kIHRoZW4gY29weSB0aGUgY29udGVudHMgb2YNCisgKiBlbGVtZW50cyB0byB0aGUgaG9zdCBtZW1vcnkgYnVmZmVyLiBUaGUgRlBHQSB0YXJnZXQgY2Fubm90IHJlYWQgZWxlbWVudHMNCisgKiBhY3F1aXJlZCBieSB0aGUgaG9zdC4gVGhlcmVmb3JlLCB0aGUgaG9zdCBtdXN0IHJlbGVhc2UgZWxlbWVudHMgYWZ0ZXINCisgKiB3cml0aW5nIHRvIHRoZW0uIFRoZSBudW1iZXIgb2YgZWxlbWVudHMgYWNxdWlyZWQgbWF5IGRpZmZlciBmcm9tIHRoZSBudW1iZXINCisgKiBvZiBlbGVtZW50cyByZXF1ZXN0ZWQgaWYsIGZvciBleGFtcGxlLCB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIHJlcXVlc3RlZA0KKyAqIHJlYWNoZXMgdGhlIGVuZCBvZiB0aGUgaG9zdCBtZW1vcnkgYnVmZmVyLiBBbHdheXMgcmVsZWFzZSBhbGwgYWNxdWlyZWQNCisgKiBlbGVtZW50cyBiZWZvcmUgY2xvc2luZyB0aGUgc2Vzc2lvbi4gRG8gbm90IGF0dGVtcHQgdG8gYWNjZXNzIEZJRk8gZWxlbWVudHMNCisgKiBhZnRlciB0aGUgZWxlbWVudHMgYXJlIHJlbGVhc2VkIG9yIHRoZSBzZXNzaW9uIGlzIGNsb3NlZC4NCisgKg0KKyAqIEBwYXJhbSBzZXNzaW9uIGhhbmRsZSB0byBhIGN1cnJlbnRseSBvcGVuIHNlc3Npb24NCisgKiBAcGFyYW0gZmlmbyBob3N0LXRvLXRhcmdldCBGSUZPIHRvIHdoaWNoIHRvIHdyaXRlDQorICogQHBhcmFtIGVsZW1lbnRzIG91dHB1dHMgYSBwb2ludGVyIHRvIHRoZSBlbGVtZW50cyBhY3F1aXJlZA0KKyAqIEBwYXJhbSBlbGVtZW50c1JlcXVlc3RlZCByZXFlc3RlZCBudW1iZXIgb2YgZWxlbWVudHMNCisgKiBAcGFyYW0gdGltZW91dCB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcywgb3IgTmlGcGdhX0luZmluaXRlVGltZW91dA0KKyAqIEBwYXJhbSBlbGVtZW50c0FjcXVpcmVkIGFjdHVhbCBudW1iZXIgb2YgZWxlbWVudHMgYWNxdWlyZWQsIHdoaWNoIG1heSBiZQ0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgIGxlc3MgdGhhbiB0aGUgcmVxdWVzdGVkIG51bWJlcg0KKyAqIEBwYXJhbSBlbGVtZW50c1JlbWFpbmluZyBpZiBub24tTlVMTCwgb3V0cHV0cyB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzDQorICogICAgICAgICAgICAgICAgICAgICAgICAgIHJlbWFpbmluZyBpbiB0aGUgaG9zdCBtZW1vcnkgcGFydCBvZiB0aGUgRE1BIEZJRk8NCisgKiBAcmV0dXJuIHJlc3VsdCBvZiB0aGUgY2FsbA0KKyAqLw0KK05pRnBnYV9TdGF0dXMgTmlGcGdhX0FjcXVpcmVGaWZvV3JpdGVFbGVtZW50c1UxNigNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOaUZwZ2FfU2Vzc2lvbiBzZXNzaW9uLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90ICAgICAgIGZpZm8sDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QqKiAgICAgZWxlbWVudHMsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICAgICAgICAgZWxlbWVudHNSZXF1ZXN0ZWQsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgICAgICAgdGltZW91dCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QqICAgICAgICBlbGVtZW50c0FjcXVpcmVkLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCogICAgICAgIGVsZW1lbnRzUmVtYWluaW5nKTsNCisNCisvKioNCisgKiBBY3F1aXJlcyBlbGVtZW50cyBmb3Igd3JpdGluZyB0byBhIGhvc3QtdG8tdGFyZ2V0IEZJRk8gb2Ygc2lnbmVkIDMyLWJpdA0KKyAqIGludGVnZXJzLg0KKyAqDQorICogQWNxdWlyaW5nLCB3cml0aW5nLCBhbmQgcmVsZWFzaW5nIEZJRk8gZWxlbWVudHMgcHJldmVudHMgdGhlIG5lZWQgdG8gd3JpdGUNCisgKiBmaXJzdCBpbnRvIGEgc2VwYXJhdGUgdXNlci1hbGxvY2F0ZWQgYnVmZmVyIGFuZCB0aGVuIGNvcHkgdGhlIGNvbnRlbnRzIG9mDQorICogZWxlbWVudHMgdG8gdGhlIGhvc3QgbWVtb3J5IGJ1ZmZlci4gVGhlIEZQR0EgdGFyZ2V0IGNhbm5vdCByZWFkIGVsZW1lbnRzDQorICogYWNxdWlyZWQgYnkgdGhlIGhvc3QuIFRoZXJlZm9yZSwgdGhlIGhvc3QgbXVzdCByZWxlYXNlIGVsZW1lbnRzIGFmdGVyDQorICogd3JpdGluZyB0byB0aGVtLiBUaGUgbnVtYmVyIG9mIGVsZW1lbnRzIGFjcXVpcmVkIG1heSBkaWZmZXIgZnJvbSB0aGUgbnVtYmVyDQorICogb2YgZWxlbWVudHMgcmVxdWVzdGVkIGlmLCBmb3IgZXhhbXBsZSwgdGhlIG51bWJlciBvZiBlbGVtZW50cyByZXF1ZXN0ZWQNCisgKiByZWFjaGVzIHRoZSBlbmQgb2YgdGhlIGhvc3QgbWVtb3J5IGJ1ZmZlci4gQWx3YXlzIHJlbGVhc2UgYWxsIGFjcXVpcmVkDQorICogZWxlbWVudHMgYmVmb3JlIGNsb3NpbmcgdGhlIHNlc3Npb24uIERvIG5vdCBhdHRlbXB0IHRvIGFjY2VzcyBGSUZPIGVsZW1lbnRzDQorICogYWZ0ZXIgdGhlIGVsZW1lbnRzIGFyZSByZWxlYXNlZCBvciB0aGUgc2Vzc2lvbiBpcyBjbG9zZWQuDQorICoNCisgKiBAcGFyYW0gc2Vzc2lvbiBoYW5kbGUgdG8gYSBjdXJyZW50bHkgb3BlbiBzZXNzaW9uDQorICogQHBhcmFtIGZpZm8gaG9zdC10by10YXJnZXQgRklGTyB0byB3aGljaCB0byB3cml0ZQ0KKyAqIEBwYXJhbSBlbGVtZW50cyBvdXRwdXRzIGEgcG9pbnRlciB0byB0aGUgZWxlbWVudHMgYWNxdWlyZWQNCisgKiBAcGFyYW0gZWxlbWVudHNSZXF1ZXN0ZWQgcmVxZXN0ZWQgbnVtYmVyIG9mIGVsZW1lbnRzDQorICogQHBhcmFtIHRpbWVvdXQgdGltZW91dCBpbiBtaWxsaXNlY29uZHMsIG9yIE5pRnBnYV9JbmZpbml0ZVRpbWVvdXQNCisgKiBAcGFyYW0gZWxlbWVudHNBY3F1aXJlZCBhY3R1YWwgbnVtYmVyIG9mIGVsZW1lbnRzIGFjcXVpcmVkLCB3aGljaCBtYXkgYmUNCisgKiAgICAgICAgICAgICAgICAgICAgICAgICBsZXNzIHRoYW4gdGhlIHJlcXVlc3RlZCBudW1iZXINCisgKiBAcGFyYW0gZWxlbWVudHNSZW1haW5pbmcgaWYgbm9uLU5VTEwsIG91dHB1dHMgdGhlIG51bWJlciBvZiBlbGVtZW50cw0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICByZW1haW5pbmcgaW4gdGhlIGhvc3QgbWVtb3J5IHBhcnQgb2YgdGhlIERNQSBGSUZPDQorICogQHJldHVybiByZXN1bHQgb2YgdGhlIGNhbGwNCisgKi8NCitOaUZwZ2FfU3RhdHVzIE5pRnBnYV9BY3F1aXJlRmlmb1dyaXRlRWxlbWVudHNJMzIoDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmlGcGdhX1Nlc3Npb24gc2Vzc2lvbiwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAgICAgICBmaWZvLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QqKiAgICAgIGVsZW1lbnRzLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAgICAgICAgIGVsZW1lbnRzUmVxdWVzdGVkLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90ICAgICAgIHRpbWVvdXQsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90KiAgICAgICAgZWxlbWVudHNBY3F1aXJlZCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QqICAgICAgICBlbGVtZW50c1JlbWFpbmluZyk7DQorDQorLyoqDQorICogQWNxdWlyZXMgZWxlbWVudHMgZm9yIHdyaXRpbmcgdG8gYSBob3N0LXRvLXRhcmdldCBGSUZPIG9mIHVuc2lnbmVkIDMyLWJpdA0KKyAqIGludGVnZXJzLg0KKyAqDQorICogQWNxdWlyaW5nLCB3cml0aW5nLCBhbmQgcmVsZWFzaW5nIEZJRk8gZWxlbWVudHMgcHJldmVudHMgdGhlIG5lZWQgdG8gd3JpdGUNCisgKiBmaXJzdCBpbnRvIGEgc2VwYXJhdGUgdXNlci1hbGxvY2F0ZWQgYnVmZmVyIGFuZCB0aGVuIGNvcHkgdGhlIGNvbnRlbnRzIG9mDQorICogZWxlbWVudHMgdG8gdGhlIGhvc3QgbWVtb3J5IGJ1ZmZlci4gVGhlIEZQR0EgdGFyZ2V0IGNhbm5vdCByZWFkIGVsZW1lbnRzDQorICogYWNxdWlyZWQgYnkgdGhlIGhvc3QuIFRoZXJlZm9yZSwgdGhlIGhvc3QgbXVzdCByZWxlYXNlIGVsZW1lbnRzIGFmdGVyDQorICogd3JpdGluZyB0byB0aGVtLiBUaGUgbnVtYmVyIG9mIGVsZW1lbnRzIGFjcXVpcmVkIG1heSBkaWZmZXIgZnJvbSB0aGUgbnVtYmVyDQorICogb2YgZWxlbWVudHMgcmVxdWVzdGVkIGlmLCBmb3IgZXhhbXBsZSwgdGhlIG51bWJlciBvZiBlbGVtZW50cyByZXF1ZXN0ZWQNCisgKiByZWFjaGVzIHRoZSBlbmQgb2YgdGhlIGhvc3QgbWVtb3J5IGJ1ZmZlci4gQWx3YXlzIHJlbGVhc2UgYWxsIGFjcXVpcmVkDQorICogZWxlbWVudHMgYmVmb3JlIGNsb3NpbmcgdGhlIHNlc3Npb24uIERvIG5vdCBhdHRlbXB0IHRvIGFjY2VzcyBGSUZPIGVsZW1lbnRzDQorICogYWZ0ZXIgdGhlIGVsZW1lbnRzIGFyZSByZWxlYXNlZCBvciB0aGUgc2Vzc2lvbiBpcyBjbG9zZWQuDQorICoNCisgKiBAcGFyYW0gc2Vzc2lvbiBoYW5kbGUgdG8gYSBjdXJyZW50bHkgb3BlbiBzZXNzaW9uDQorICogQHBhcmFtIGZpZm8gaG9zdC10by10YXJnZXQgRklGTyB0byB3aGljaCB0byB3cml0ZQ0KKyAqIEBwYXJhbSBlbGVtZW50cyBvdXRwdXRzIGEgcG9pbnRlciB0byB0aGUgZWxlbWVudHMgYWNxdWlyZWQNCisgKiBAcGFyYW0gZWxlbWVudHNSZXF1ZXN0ZWQgcmVxZXN0ZWQgbnVtYmVyIG9mIGVsZW1lbnRzDQorICogQHBhcmFtIHRpbWVvdXQgdGltZW91dCBpbiBtaWxsaXNlY29uZHMsIG9yIE5pRnBnYV9JbmZpbml0ZVRpbWVvdXQNCisgKiBAcGFyYW0gZWxlbWVudHNBY3F1aXJlZCBhY3R1YWwgbnVtYmVyIG9mIGVsZW1lbnRzIGFjcXVpcmVkLCB3aGljaCBtYXkgYmUNCisgKiAgICAgICAgICAgICAgICAgICAgICAgICBsZXNzIHRoYW4gdGhlIHJlcXVlc3RlZCBudW1iZXINCisgKiBAcGFyYW0gZWxlbWVudHNSZW1haW5pbmcgaWYgbm9uLU5VTEwsIG91dHB1dHMgdGhlIG51bWJlciBvZiBlbGVtZW50cw0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICByZW1haW5pbmcgaW4gdGhlIGhvc3QgbWVtb3J5IHBhcnQgb2YgdGhlIERNQSBGSUZPDQorICogQHJldHVybiByZXN1bHQgb2YgdGhlIGNhbGwNCisgKi8NCitOaUZwZ2FfU3RhdHVzIE5pRnBnYV9BY3F1aXJlRmlmb1dyaXRlRWxlbWVudHNVMzIoDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmlGcGdhX1Nlc3Npb24gc2Vzc2lvbiwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAgICAgICBmaWZvLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90KiogICAgIGVsZW1lbnRzLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAgICAgICAgIGVsZW1lbnRzUmVxdWVzdGVkLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90ICAgICAgIHRpbWVvdXQsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90KiAgICAgICAgZWxlbWVudHNBY3F1aXJlZCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QqICAgICAgICBlbGVtZW50c1JlbWFpbmluZyk7DQorDQorLyoqDQorICogQWNxdWlyZXMgZWxlbWVudHMgZm9yIHdyaXRpbmcgdG8gYSBob3N0LXRvLXRhcmdldCBGSUZPIG9mIHNpZ25lZCA2NC1iaXQNCisgKiBpbnRlZ2Vycy4NCisgKg0KKyAqIEFjcXVpcmluZywgd3JpdGluZywgYW5kIHJlbGVhc2luZyBGSUZPIGVsZW1lbnRzIHByZXZlbnRzIHRoZSBuZWVkIHRvIHdyaXRlDQorICogZmlyc3QgaW50byBhIHNlcGFyYXRlIHVzZXItYWxsb2NhdGVkIGJ1ZmZlciBhbmQgdGhlbiBjb3B5IHRoZSBjb250ZW50cyBvZg0KKyAqIGVsZW1lbnRzIHRvIHRoZSBob3N0IG1lbW9yeSBidWZmZXIuIFRoZSBGUEdBIHRhcmdldCBjYW5ub3QgcmVhZCBlbGVtZW50cw0KKyAqIGFjcXVpcmVkIGJ5IHRoZSBob3N0LiBUaGVyZWZvcmUsIHRoZSBob3N0IG11c3QgcmVsZWFzZSBlbGVtZW50cyBhZnRlcg0KKyAqIHdyaXRpbmcgdG8gdGhlbS4gVGhlIG51bWJlciBvZiBlbGVtZW50cyBhY3F1aXJlZCBtYXkgZGlmZmVyIGZyb20gdGhlIG51bWJlcg0KKyAqIG9mIGVsZW1lbnRzIHJlcXVlc3RlZCBpZiwgZm9yIGV4YW1wbGUsIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgcmVxdWVzdGVkDQorICogcmVhY2hlcyB0aGUgZW5kIG9mIHRoZSBob3N0IG1lbW9yeSBidWZmZXIuIEFsd2F5cyByZWxlYXNlIGFsbCBhY3F1aXJlZA0KKyAqIGVsZW1lbnRzIGJlZm9yZSBjbG9zaW5nIHRoZSBzZXNzaW9uLiBEbyBub3QgYXR0ZW1wdCB0byBhY2Nlc3MgRklGTyBlbGVtZW50cw0KKyAqIGFmdGVyIHRoZSBlbGVtZW50cyBhcmUgcmVsZWFzZWQgb3IgdGhlIHNlc3Npb24gaXMgY2xvc2VkLg0KKyAqDQorICogQHBhcmFtIHNlc3Npb24gaGFuZGxlIHRvIGEgY3VycmVudGx5IG9wZW4gc2Vzc2lvbg0KKyAqIEBwYXJhbSBmaWZvIGhvc3QtdG8tdGFyZ2V0IEZJRk8gdG8gd2hpY2ggdG8gd3JpdGUNCisgKiBAcGFyYW0gZWxlbWVudHMgb3V0cHV0cyBhIHBvaW50ZXIgdG8gdGhlIGVsZW1lbnRzIGFjcXVpcmVkDQorICogQHBhcmFtIGVsZW1lbnRzUmVxdWVzdGVkIHJlcWVzdGVkIG51bWJlciBvZiBlbGVtZW50cw0KKyAqIEBwYXJhbSB0aW1lb3V0IHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzLCBvciBOaUZwZ2FfSW5maW5pdGVUaW1lb3V0DQorICogQHBhcmFtIGVsZW1lbnRzQWNxdWlyZWQgYWN0dWFsIG51bWJlciBvZiBlbGVtZW50cyBhY3F1aXJlZCwgd2hpY2ggbWF5IGJlDQorICogICAgICAgICAgICAgICAgICAgICAgICAgbGVzcyB0aGFuIHRoZSByZXF1ZXN0ZWQgbnVtYmVyDQorICogQHBhcmFtIGVsZW1lbnRzUmVtYWluaW5nIGlmIG5vbi1OVUxMLCBvdXRwdXRzIHRoZSBudW1iZXIgb2YgZWxlbWVudHMNCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtYWluaW5nIGluIHRoZSBob3N0IG1lbW9yeSBwYXJ0IG9mIHRoZSBETUEgRklGTw0KKyAqIEByZXR1cm4gcmVzdWx0IG9mIHRoZSBjYWxsDQorICovDQorTmlGcGdhX1N0YXR1cyBOaUZwZ2FfQWNxdWlyZUZpZm9Xcml0ZUVsZW1lbnRzSTY0KA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5pRnBnYV9TZXNzaW9uIHNlc3Npb24sDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgICAgICAgZmlmbywNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQ2NF90KiogICAgICBlbGVtZW50cywNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgICAgICAgICBlbGVtZW50c1JlcXVlc3RlZCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAgICAgICB0aW1lb3V0LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCogICAgICAgIGVsZW1lbnRzQWNxdWlyZWQsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90KiAgICAgICAgZWxlbWVudHNSZW1haW5pbmcpOw0KKw0KKy8qKg0KKyAqIEFjcXVpcmVzIGVsZW1lbnRzIGZvciB3cml0aW5nIHRvIGEgaG9zdC10by10YXJnZXQgRklGTyBvZiB1bnNpZ25lZCA2NC1iaXQNCisgKiBpbnRlZ2Vycy4NCisgKg0KKyAqIEFjcXVpcmluZywgd3JpdGluZywgYW5kIHJlbGVhc2luZyBGSUZPIGVsZW1lbnRzIHByZXZlbnRzIHRoZSBuZWVkIHRvIHdyaXRlDQorICogZmlyc3QgaW50byBhIHNlcGFyYXRlIHVzZXItYWxsb2NhdGVkIGJ1ZmZlciBhbmQgdGhlbiBjb3B5IHRoZSBjb250ZW50cyBvZg0KKyAqIGVsZW1lbnRzIHRvIHRoZSBob3N0IG1lbW9yeSBidWZmZXIuIFRoZSBGUEdBIHRhcmdldCBjYW5ub3QgcmVhZCBlbGVtZW50cw0KKyAqIGFjcXVpcmVkIGJ5IHRoZSBob3N0LiBUaGVyZWZvcmUsIHRoZSBob3N0IG11c3QgcmVsZWFzZSBlbGVtZW50cyBhZnRlcg0KKyAqIHdyaXRpbmcgdG8gdGhlbS4gVGhlIG51bWJlciBvZiBlbGVtZW50cyBhY3F1aXJlZCBtYXkgZGlmZmVyIGZyb20gdGhlIG51bWJlcg0KKyAqIG9mIGVsZW1lbnRzIHJlcXVlc3RlZCBpZiwgZm9yIGV4YW1wbGUsIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgcmVxdWVzdGVkDQorICogcmVhY2hlcyB0aGUgZW5kIG9mIHRoZSBob3N0IG1lbW9yeSBidWZmZXIuIEFsd2F5cyByZWxlYXNlIGFsbCBhY3F1aXJlZA0KKyAqIGVsZW1lbnRzIGJlZm9yZSBjbG9zaW5nIHRoZSBzZXNzaW9uLiBEbyBub3QgYXR0ZW1wdCB0byBhY2Nlc3MgRklGTyBlbGVtZW50cw0KKyAqIGFmdGVyIHRoZSBlbGVtZW50cyBhcmUgcmVsZWFzZWQgb3IgdGhlIHNlc3Npb24gaXMgY2xvc2VkLg0KKyAqDQorICogQHBhcmFtIHNlc3Npb24gaGFuZGxlIHRvIGEgY3VycmVudGx5IG9wZW4gc2Vzc2lvbg0KKyAqIEBwYXJhbSBmaWZvIGhvc3QtdG8tdGFyZ2V0IEZJRk8gdG8gd2hpY2ggdG8gd3JpdGUNCisgKiBAcGFyYW0gZWxlbWVudHMgb3V0cHV0cyBhIHBvaW50ZXIgdG8gdGhlIGVsZW1lbnRzIGFjcXVpcmVkDQorICogQHBhcmFtIGVsZW1lbnRzUmVxdWVzdGVkIHJlcWVzdGVkIG51bWJlciBvZiBlbGVtZW50cw0KKyAqIEBwYXJhbSB0aW1lb3V0IHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzLCBvciBOaUZwZ2FfSW5maW5pdGVUaW1lb3V0DQorICogQHBhcmFtIGVsZW1lbnRzQWNxdWlyZWQgYWN0dWFsIG51bWJlciBvZiBlbGVtZW50cyBhY3F1aXJlZCwgd2hpY2ggbWF5IGJlDQorICogICAgICAgICAgICAgICAgICAgICAgICAgbGVzcyB0aGFuIHRoZSByZXF1ZXN0ZWQgbnVtYmVyDQorICogQHBhcmFtIGVsZW1lbnRzUmVtYWluaW5nIGlmIG5vbi1OVUxMLCBvdXRwdXRzIHRoZSBudW1iZXIgb2YgZWxlbWVudHMNCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtYWluaW5nIGluIHRoZSBob3N0IG1lbW9yeSBwYXJ0IG9mIHRoZSBETUEgRklGTw0KKyAqIEByZXR1cm4gcmVzdWx0IG9mIHRoZSBjYWxsDQorICovDQorTmlGcGdhX1N0YXR1cyBOaUZwZ2FfQWNxdWlyZUZpZm9Xcml0ZUVsZW1lbnRzVTY0KA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5pRnBnYV9TZXNzaW9uIHNlc3Npb24sDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgICAgICAgZmlmbywNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50NjRfdCoqICAgICBlbGVtZW50cywNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgICAgICAgICBlbGVtZW50c1JlcXVlc3RlZCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAgICAgICB0aW1lb3V0LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCogICAgICAgIGVsZW1lbnRzQWNxdWlyZWQsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90KiAgICAgICAgZWxlbWVudHNSZW1haW5pbmcpOw0KKw0KKy8qKg0KKyAqIFJlbGVhc2VzIHByZXZpb3VzbHkgYWNxdWlyZWQgRklGTyBlbGVtZW50cy4NCisgKg0KKyAqIFRoZSBGUEdBIHRhcmdldCBjYW5ub3QgcmVhZCBlbGVtZW50cyBhY3F1aXJlZCBieSB0aGUgaG9zdC4gVGhlcmVmb3JlLCB0aGUNCisgKiBob3N0IG11c3QgcmVsZWFzZSBlbGVtZW50cyBhZnRlciBhY3F1aXJpbmcgdGhlbS4gQWx3YXlzIHJlbGVhc2UgYWxsIGFjcXVpcmVkDQorICogZWxlbWVudHMgYmVmb3JlIGNsb3NpbmcgdGhlIHNlc3Npb24uIERvIG5vdCBhdHRlbXB0IHRvIGFjY2VzcyBGSUZPIGVsZW1lbnRzDQorICogYWZ0ZXIgdGhlIGVsZW1lbnRzIGFyZSByZWxlYXNlZCBvciB0aGUgc2Vzc2lvbiBpcyBjbG9zZWQuDQorICoNCisgKiBAcGFyYW0gc2Vzc2lvbiBoYW5kbGUgdG8gYSBjdXJyZW50bHkgb3BlbiBzZXNzaW9uDQorICogQHBhcmFtIGZpZm8gRklGTyBmcm9tIHdoaWNoIHRvIHJlbGVhc2UgZWxlbWVudHMNCisgKiBAcGFyYW0gZWxlbWVudHMgbnVtYmVyIG9mIGVsZW1lbnRzIHRvIHJlbGVhc2UNCisgKiBAcmV0dXJuIHJlc3VsdCBvZiB0aGUgY2FsbA0KKyAqLw0KK05pRnBnYV9TdGF0dXMgTmlGcGdhX1JlbGVhc2VGaWZvRWxlbWVudHMoTmlGcGdhX1Nlc3Npb24gc2Vzc2lvbiwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90ICAgICAgIGZpZm8sDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgICAgICAgICBlbGVtZW50cyk7DQorDQorLyoqDQorICogR2V0cyBhbiBlbmRwb2ludCByZWZlcmVuY2UgdG8gYSBwZWVyLXRvLXBlZXIgRklGTy4NCisgKg0KKyAqIEBwYXJhbSBzZXNzaW9uIGhhbmRsZSB0byBhIGN1cnJlbnRseSBvcGVuIHNlc3Npb24NCisgKiBAcGFyYW0gZmlmbyBwZWVyLXRvLXBlZXIgRklGTw0KKyAqIEBwYXJhbSBlbmRwb2ludCBvdXRwdXRzIHRoZSBlbmRwb2ludCByZWZlcmVuY2UNCisgKiBAcmV0dXJuIHJlc3VsdCBvZiB0aGUgY2FsbA0KKyAqLw0KK05pRnBnYV9TdGF0dXMgTmlGcGdhX0dldFBlZXJUb1BlZXJGaWZvRW5kcG9pbnQoTmlGcGdhX1Nlc3Npb24gc2Vzc2lvbiwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90ICAgICAgIGZpZm8sDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCogICAgICBlbmRwb2ludCk7DQorDQorI2lmIE5pRnBnYV9DcHANCit9DQorI2VuZGlmDQorDQorI2VuZGlmDQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvQ2hpcE9iamVjdC9OaVJpby5oIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvQ2hpcE9iamVjdC9OaVJpby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlZjBkNmMKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9DaGlwT2JqZWN0L05pUmlvLmgKQEAgLTAsMCArMSw5IEBACisvLyBDb3B5cmlnaHQgKGMpIE5hdGlvbmFsIEluc3RydW1lbnRzIDIwMDguICBBbGwgUmlnaHRzIFJlc2VydmVkLg0KKw0KKyNpZm5kZWYgX19OaVJpb19oX18NCisjZGVmaW5lIF9fTmlSaW9faF9fDQorDQorI2luY2x1ZGUgIk5pRnBnYS5oIg0KK3R5cGVkZWYgTmlGcGdhX1N0YXR1cyB0UmlvU3RhdHVzQ29kZTsNCisNCisjZW5kaWYgLy8gX19OaVJpb19oX18NCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9DaGlwT2JqZWN0L3RBSS5oIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvQ2hpcE9iamVjdC90QUkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDM4OTlhCi0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvQ2hpcE9iamVjdC90QUkuaApAQCAtMCwwICsxLDEzOCBAQAorLy8gQ29weXJpZ2h0IChjKSBOYXRpb25hbCBJbnN0cnVtZW50cyAyMDA4LiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4NCisvLyBEbyBOb3QgRWRpdC4uLiB0aGlzIGZpbGUgaXMgZ2VuZXJhdGVkIQ0KKw0KKyNpZm5kZWYgX19uRlJDXzIwMTJfMV82XzRfQUlfaF9fDQorI2RlZmluZSBfX25GUkNfMjAxMl8xXzZfNF9BSV9oX18NCisNCisjaW5jbHVkZSAidFN5c3RlbUludGVyZmFjZS5oIg0KKw0KK25hbWVzcGFjZSBuRlBHQQ0KK3sNCituYW1lc3BhY2UgbkZSQ18yMDEyXzFfNl80DQorew0KKw0KK2NsYXNzIHRBSQ0KK3sNCitwdWJsaWM6DQorICAgdEFJKCl7fQ0KKyAgIHZpcnR1YWwgfnRBSSgpe30NCisNCisgICB2aXJ0dWFsIHRTeXN0ZW1JbnRlcmZhY2UqIGdldFN5c3RlbUludGVyZmFjZSgpID0gMDsNCisgICBzdGF0aWMgdEFJKiBjcmVhdGUodW5zaWduZWQgY2hhciBzeXNfaW5kZXgsIHRSaW9TdGF0dXNDb2RlICpzdGF0dXMpOw0KKyAgIHZpcnR1YWwgdW5zaWduZWQgY2hhciBnZXRTeXN0ZW1JbmRleCgpID0gMDsNCisNCisNCisgICB0eXBlZGVmIGVudW0NCisgICB7DQorICAgICAga051bVN5c3RlbXMgPSAyLA0KKyAgIH0gdElmYWNlQ29uc3RhbnRzOw0KKw0KKyAgIHR5cGVkZWYNCisgICB1bmlvbnsNCisgICAgICBzdHJ1Y3R7DQorICAgICAgICAgdW5zaWduZWQgQ2hhbm5lbCA6IDM7DQorICAgICAgICAgdW5zaWduZWQgTW9kdWxlIDogMTsNCisgICAgICAgICB1bnNpZ25lZCBBdmVyYWdlZCA6IDE7DQorICAgICAgfTsNCisgICAgICBzdHJ1Y3R7DQorICAgICAgICAgdW5zaWduZWQgdmFsdWUgOiA1Ow0KKyAgICAgIH07DQorICAgfSB0UmVhZFNlbGVjdDsNCisgICB0eXBlZGVmDQorICAgdW5pb257DQorICAgICAgc3RydWN0ew0KKyAgICAgICAgIHVuc2lnbmVkIFNjYW5TaXplIDogMzsNCisgICAgICAgICB1bnNpZ25lZCBDb252ZXJ0UmF0ZSA6IDI2Ow0KKyAgICAgIH07DQorICAgICAgc3RydWN0ew0KKyAgICAgICAgIHVuc2lnbmVkIHZhbHVlIDogMjk7DQorICAgICAgfTsNCisgICB9IHRDb25maWc7DQorDQorDQorICAgdHlwZWRlZiBlbnVtDQorICAgew0KKyAgIH0gdENvbmZpZ19JZmFjZUNvbnN0YW50czsNCisNCisgICB2aXJ0dWFsIHZvaWQgd3JpdGVDb25maWcodENvbmZpZyB2YWx1ZSwgdFJpb1N0YXR1c0NvZGUgKnN0YXR1cykgPSAwOw0KKyAgIHZpcnR1YWwgdm9pZCB3cml0ZUNvbmZpZ19TY2FuU2l6ZSh1bnNpZ25lZCBjaGFyIHZhbHVlLCB0UmlvU3RhdHVzQ29kZSAqc3RhdHVzKSA9IDA7DQorICAgdmlydHVhbCB2b2lkIHdyaXRlQ29uZmlnX0NvbnZlcnRSYXRlKHVuc2lnbmVkIGludCB2YWx1ZSwgdFJpb1N0YXR1c0NvZGUgKnN0YXR1cykgPSAwOw0KKyAgIHZpcnR1YWwgdENvbmZpZyByZWFkQ29uZmlnKHRSaW9TdGF0dXNDb2RlICpzdGF0dXMpID0gMDsNCisgICB2aXJ0dWFsIHVuc2lnbmVkIGNoYXIgcmVhZENvbmZpZ19TY2FuU2l6ZSh0UmlvU3RhdHVzQ29kZSAqc3RhdHVzKSA9IDA7DQorICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgcmVhZENvbmZpZ19Db252ZXJ0UmF0ZSh0UmlvU3RhdHVzQ29kZSAqc3RhdHVzKSA9IDA7DQorDQorDQorICAgdHlwZWRlZiBlbnVtDQorICAgew0KKyAgICAgIGtOdW1TY2FuTGlzdEVsZW1lbnRzID0gOCwNCisgICB9IHRTY2FuTGlzdF9JZmFjZUNvbnN0YW50czsNCisNCisgICB2aXJ0dWFsIHZvaWQgd3JpdGVTY2FuTGlzdCh1bnNpZ25lZCBjaGFyIGJpdGZpZWxkX2luZGV4LCB1bnNpZ25lZCBjaGFyIHZhbHVlLCB0UmlvU3RhdHVzQ29kZSAqc3RhdHVzKSA9IDA7DQorICAgdmlydHVhbCB1bnNpZ25lZCBjaGFyIHJlYWRTY2FuTGlzdCh1bnNpZ25lZCBjaGFyIGJpdGZpZWxkX2luZGV4LCB0UmlvU3RhdHVzQ29kZSAqc3RhdHVzKSA9IDA7DQorDQorDQorICAgdHlwZWRlZiBlbnVtDQorICAgew0KKyAgIH0gdExvb3BUaW1pbmdfSWZhY2VDb25zdGFudHM7DQorDQorICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgcmVhZExvb3BUaW1pbmcodFJpb1N0YXR1c0NvZGUgKnN0YXR1cykgPSAwOw0KKw0KKw0KKyAgIHR5cGVkZWYgZW51bQ0KKyAgIHsNCisgICAgICBrTnVtQXZlcmFnZUJpdHNFbGVtZW50cyA9IDgsDQorICAgfSB0QXZlcmFnZUJpdHNfSWZhY2VDb25zdGFudHM7DQorDQorICAgdmlydHVhbCB2b2lkIHdyaXRlQXZlcmFnZUJpdHModW5zaWduZWQgY2hhciBiaXRmaWVsZF9pbmRleCwgdW5zaWduZWQgY2hhciB2YWx1ZSwgdFJpb1N0YXR1c0NvZGUgKnN0YXR1cykgPSAwOw0KKyAgIHZpcnR1YWwgdW5zaWduZWQgY2hhciByZWFkQXZlcmFnZUJpdHModW5zaWduZWQgY2hhciBiaXRmaWVsZF9pbmRleCwgdFJpb1N0YXR1c0NvZGUgKnN0YXR1cykgPSAwOw0KKw0KKw0KKyAgIHR5cGVkZWYgZW51bQ0KKyAgIHsNCisgICAgICBrTnVtT3ZlcnNhbXBsZUJpdHNFbGVtZW50cyA9IDgsDQorICAgfSB0T3ZlcnNhbXBsZUJpdHNfSWZhY2VDb25zdGFudHM7DQorDQorICAgdmlydHVhbCB2b2lkIHdyaXRlT3ZlcnNhbXBsZUJpdHModW5zaWduZWQgY2hhciBiaXRmaWVsZF9pbmRleCwgdW5zaWduZWQgY2hhciB2YWx1ZSwgdFJpb1N0YXR1c0NvZGUgKnN0YXR1cykgPSAwOw0KKyAgIHZpcnR1YWwgdW5zaWduZWQgY2hhciByZWFkT3ZlcnNhbXBsZUJpdHModW5zaWduZWQgY2hhciBiaXRmaWVsZF9pbmRleCwgdFJpb1N0YXR1c0NvZGUgKnN0YXR1cykgPSAwOw0KKw0KKw0KKw0KKyAgIHR5cGVkZWYgZW51bQ0KKyAgIHsNCisgICB9IHRPdXRwdXRfSWZhY2VDb25zdGFudHM7DQorDQorICAgdmlydHVhbCBzaWduZWQgaW50IHJlYWRPdXRwdXQodFJpb1N0YXR1c0NvZGUgKnN0YXR1cykgPSAwOw0KKw0KKw0KKyAgIHR5cGVkZWYgZW51bQ0KKyAgIHsNCisgICB9IHRSZWFkU2VsZWN0X0lmYWNlQ29uc3RhbnRzOw0KKw0KKyAgIHZpcnR1YWwgdm9pZCB3cml0ZVJlYWRTZWxlY3QodFJlYWRTZWxlY3QgdmFsdWUsIHRSaW9TdGF0dXNDb2RlICpzdGF0dXMpID0gMDsNCisgICB2aXJ0dWFsIHZvaWQgd3JpdGVSZWFkU2VsZWN0X0NoYW5uZWwodW5zaWduZWQgY2hhciB2YWx1ZSwgdFJpb1N0YXR1c0NvZGUgKnN0YXR1cykgPSAwOw0KKyAgIHZpcnR1YWwgdm9pZCB3cml0ZVJlYWRTZWxlY3RfTW9kdWxlKHVuc2lnbmVkIGNoYXIgdmFsdWUsIHRSaW9TdGF0dXNDb2RlICpzdGF0dXMpID0gMDsNCisgICB2aXJ0dWFsIHZvaWQgd3JpdGVSZWFkU2VsZWN0X0F2ZXJhZ2VkKGJvb2wgdmFsdWUsIHRSaW9TdGF0dXNDb2RlICpzdGF0dXMpID0gMDsNCisgICB2aXJ0dWFsIHRSZWFkU2VsZWN0IHJlYWRSZWFkU2VsZWN0KHRSaW9TdGF0dXNDb2RlICpzdGF0dXMpID0gMDsNCisgICB2aXJ0dWFsIHVuc2lnbmVkIGNoYXIgcmVhZFJlYWRTZWxlY3RfQ2hhbm5lbCh0UmlvU3RhdHVzQ29kZSAqc3RhdHVzKSA9IDA7DQorICAgdmlydHVhbCB1bnNpZ25lZCBjaGFyIHJlYWRSZWFkU2VsZWN0X01vZHVsZSh0UmlvU3RhdHVzQ29kZSAqc3RhdHVzKSA9IDA7DQorICAgdmlydHVhbCBib29sIHJlYWRSZWFkU2VsZWN0X0F2ZXJhZ2VkKHRSaW9TdGF0dXNDb2RlICpzdGF0dXMpID0gMDsNCisNCisNCisgICB0eXBlZGVmIGVudW0NCisgICB7DQorICAgfSB0TGF0Y2hPdXRwdXRfSWZhY2VDb25zdGFudHM7DQorDQorICAgdmlydHVhbCB2b2lkIHN0cm9iZUxhdGNoT3V0cHV0KHRSaW9TdGF0dXNDb2RlICpzdGF0dXMpID0gMDsNCisNCisNCisNCisNCitwcml2YXRlOg0KKyAgIHRBSShjb25zdCB0QUkmKTsNCisgICB2b2lkIG9wZXJhdG9yPShjb25zdCB0QUkmKTsNCit9Ow0KKw0KK30NCit9DQorDQorI2VuZGlmIC8vIF9fbkZSQ18yMDEyXzFfNl80X0FJX2hfXw0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0NoaXBPYmplY3QvdEFjY3VtdWxhdG9yLmggYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9DaGlwT2JqZWN0L3RBY2N1bXVsYXRvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3NzlhODkKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9DaGlwT2JqZWN0L3RBY2N1bXVsYXRvci5oCkBAIC0wLDAgKzEsODcgQEAKKy8vIENvcHlyaWdodCAoYykgTmF0aW9uYWwgSW5zdHJ1bWVudHMgMjAwOC4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuDQorLy8gRG8gTm90IEVkaXQuLi4gdGhpcyBmaWxlIGlzIGdlbmVyYXRlZCENCisNCisjaWZuZGVmIF9fbkZSQ18yMDEyXzFfNl80X0FjY3VtdWxhdG9yX2hfXw0KKyNkZWZpbmUgX19uRlJDXzIwMTJfMV82XzRfQWNjdW11bGF0b3JfaF9fDQorDQorI2luY2x1ZGUgInRTeXN0ZW1JbnRlcmZhY2UuaCINCisNCituYW1lc3BhY2UgbkZQR0ENCit7DQorbmFtZXNwYWNlIG5GUkNfMjAxMl8xXzZfNA0KK3sNCisNCitjbGFzcyB0QWNjdW11bGF0b3INCit7DQorcHVibGljOg0KKyAgIHRBY2N1bXVsYXRvcigpe30NCisgICB2aXJ0dWFsIH50QWNjdW11bGF0b3IoKXt9DQorDQorICAgdmlydHVhbCB0U3lzdGVtSW50ZXJmYWNlKiBnZXRTeXN0ZW1JbnRlcmZhY2UoKSA9IDA7DQorICAgc3RhdGljIHRBY2N1bXVsYXRvciogY3JlYXRlKHVuc2lnbmVkIGNoYXIgc3lzX2luZGV4LCB0UmlvU3RhdHVzQ29kZSAqc3RhdHVzKTsNCisgICB2aXJ0dWFsIHVuc2lnbmVkIGNoYXIgZ2V0U3lzdGVtSW5kZXgoKSA9IDA7DQorDQorDQorICAgdHlwZWRlZiBlbnVtDQorICAgew0KKyAgICAgIGtOdW1TeXN0ZW1zID0gMiwNCisgICB9IHRJZmFjZUNvbnN0YW50czsNCisNCisgICB0eXBlZGVmDQorICAgdW5pb257DQorICAgICAgc3RydWN0ew0KKyAgICAgICAgIHNpZ25lZCBsb25nIGxvbmcgVmFsdWU7DQorICAgICAgICAgdW5zaWduZWQgQ291bnQgOiAzMjsNCisgICAgICB9Ow0KKyAgICAgIHN0cnVjdHsNCisgICAgICAgICB1bnNpZ25lZCB2YWx1ZSA6IDMyOw0KKyAgICAgICAgIHVuc2lnbmVkIHZhbHVlMiA6IDMyOw0KKyAgICAgICAgIHVuc2lnbmVkIHZhbHVlMyA6IDMyOw0KKyAgICAgIH07DQorICAgfSB0T3V0cHV0Ow0KKw0KKw0KKyAgIHR5cGVkZWYgZW51bQ0KKyAgIHsNCisgICB9IHRPdXRwdXRfSWZhY2VDb25zdGFudHM7DQorDQorICAgdmlydHVhbCB0T3V0cHV0IHJlYWRPdXRwdXQodFJpb1N0YXR1c0NvZGUgKnN0YXR1cykgPSAwOw0KKyAgIHZpcnR1YWwgc2lnbmVkIGxvbmcgbG9uZyByZWFkT3V0cHV0X1ZhbHVlKHRSaW9TdGF0dXNDb2RlICpzdGF0dXMpID0gMDsNCisgICB2aXJ0dWFsIHVuc2lnbmVkIGludCByZWFkT3V0cHV0X0NvdW50KHRSaW9TdGF0dXNDb2RlICpzdGF0dXMpID0gMDsNCisNCisNCisgICB0eXBlZGVmIGVudW0NCisgICB7DQorICAgfSB0Q2VudGVyX0lmYWNlQ29uc3RhbnRzOw0KKw0KKyAgIHZpcnR1YWwgdm9pZCB3cml0ZUNlbnRlcihzaWduZWQgaW50IHZhbHVlLCB0UmlvU3RhdHVzQ29kZSAqc3RhdHVzKSA9IDA7DQorICAgdmlydHVhbCBzaWduZWQgaW50IHJlYWRDZW50ZXIodFJpb1N0YXR1c0NvZGUgKnN0YXR1cykgPSAwOw0KKw0KKw0KKyAgIHR5cGVkZWYgZW51bQ0KKyAgIHsNCisgICB9IHRSZXNldF9JZmFjZUNvbnN0YW50czsNCisNCisgICB2aXJ0dWFsIHZvaWQgc3Ryb2JlUmVzZXQodFJpb1N0YXR1c0NvZGUgKnN0YXR1cykgPSAwOw0KKw0KKw0KKyAgIHR5cGVkZWYgZW51bQ0KKyAgIHsNCisgICB9IHREZWFkYmFuZF9JZmFjZUNvbnN0YW50czsNCisNCisgICB2aXJ0dWFsIHZvaWQgd3JpdGVEZWFkYmFuZChzaWduZWQgaW50IHZhbHVlLCB0UmlvU3RhdHVzQ29kZSAqc3RhdHVzKSA9IDA7DQorICAgdmlydHVhbCBzaWduZWQgaW50IHJlYWREZWFkYmFuZCh0UmlvU3RhdHVzQ29kZSAqc3RhdHVzKSA9IDA7DQorDQorDQorDQorDQorDQorcHJpdmF0ZToNCisgICB0QWNjdW11bGF0b3IoY29uc3QgdEFjY3VtdWxhdG9yJik7DQorICAgdm9pZCBvcGVyYXRvcj0oY29uc3QgdEFjY3VtdWxhdG9yJik7DQorfTsNCisNCit9DQorfQ0KKw0KKyNlbmRpZiAvLyBfX25GUkNfMjAxMl8xXzZfNF9BY2N1bXVsYXRvcl9oX18NCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9DaGlwT2JqZWN0L3RBbGFybS5oIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvQ2hpcE9iamVjdC90QWxhcm0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yN2E2OGU4Ci0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvQ2hpcE9iamVjdC90QWxhcm0uaApAQCAtMCwwICsxLDU3IEBACisvLyBDb3B5cmlnaHQgKGMpIE5hdGlvbmFsIEluc3RydW1lbnRzIDIwMDguICBBbGwgUmlnaHRzIFJlc2VydmVkLg0KKy8vIERvIE5vdCBFZGl0Li4uIHRoaXMgZmlsZSBpcyBnZW5lcmF0ZWQhDQorDQorI2lmbmRlZiBfX25GUkNfMjAxMl8xXzZfNF9BbGFybV9oX18NCisjZGVmaW5lIF9fbkZSQ18yMDEyXzFfNl80X0FsYXJtX2hfXw0KKw0KKyNpbmNsdWRlICJ0U3lzdGVtSW50ZXJmYWNlLmgiDQorDQorbmFtZXNwYWNlIG5GUEdBDQorew0KK25hbWVzcGFjZSBuRlJDXzIwMTJfMV82XzQNCit7DQorDQorY2xhc3MgdEFsYXJtDQorew0KK3B1YmxpYzoNCisgICB0QWxhcm0oKXt9DQorICAgdmlydHVhbCB+dEFsYXJtKCl7fQ0KKw0KKyAgIHZpcnR1YWwgdFN5c3RlbUludGVyZmFjZSogZ2V0U3lzdGVtSW50ZXJmYWNlKCkgPSAwOw0KKyAgIHN0YXRpYyB0QWxhcm0qIGNyZWF0ZSh0UmlvU3RhdHVzQ29kZSAqc3RhdHVzKTsNCisNCisgICB0eXBlZGVmIGVudW0NCisgICB7DQorICAgICAga051bVN5c3RlbXMgPSAxLA0KKyAgIH0gdElmYWNlQ29uc3RhbnRzOw0KKw0KKw0KKw0KKw0KKyAgIHR5cGVkZWYgZW51bQ0KKyAgIHsNCisgICB9IHRUcmlnZ2VyVGltZV9JZmFjZUNvbnN0YW50czsNCisNCisgICB2aXJ0dWFsIHZvaWQgd3JpdGVUcmlnZ2VyVGltZSh1bnNpZ25lZCBpbnQgdmFsdWUsIHRSaW9TdGF0dXNDb2RlICpzdGF0dXMpID0gMDsNCisgICB2aXJ0dWFsIHVuc2lnbmVkIGludCByZWFkVHJpZ2dlclRpbWUodFJpb1N0YXR1c0NvZGUgKnN0YXR1cykgPSAwOw0KKw0KKw0KKyAgIHR5cGVkZWYgZW51bQ0KKyAgIHsNCisgICB9IHRFbmFibGVfSWZhY2VDb25zdGFudHM7DQorDQorICAgdmlydHVhbCB2b2lkIHdyaXRlRW5hYmxlKGJvb2wgdmFsdWUsIHRSaW9TdGF0dXNDb2RlICpzdGF0dXMpID0gMDsNCisgICB2aXJ0dWFsIGJvb2wgcmVhZEVuYWJsZSh0UmlvU3RhdHVzQ29kZSAqc3RhdHVzKSA9IDA7DQorDQorDQorDQorDQorcHJpdmF0ZToNCisgICB0QWxhcm0oY29uc3QgdEFsYXJtJik7DQorICAgdm9pZCBvcGVyYXRvcj0oY29uc3QgdEFsYXJtJik7DQorfTsNCisNCit9DQorfQ0KKw0KKyNlbmRpZiAvLyBfX25GUkNfMjAxMl8xXzZfNF9BbGFybV9oX18NCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9DaGlwT2JqZWN0L3RBbmFsb2dUcmlnZ2VyLmggYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9DaGlwT2JqZWN0L3RBbmFsb2dUcmlnZ2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNThjNTAzOQotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0NoaXBPYmplY3QvdEFuYWxvZ1RyaWdnZXIuaApAQCAtMCwwICsxLDExNyBAQAorLy8gQ29weXJpZ2h0IChjKSBOYXRpb25hbCBJbnN0cnVtZW50cyAyMDA4LiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4NCisvLyBEbyBOb3QgRWRpdC4uLiB0aGlzIGZpbGUgaXMgZ2VuZXJhdGVkIQ0KKw0KKyNpZm5kZWYgX19uRlJDXzIwMTJfMV82XzRfQW5hbG9nVHJpZ2dlcl9oX18NCisjZGVmaW5lIF9fbkZSQ18yMDEyXzFfNl80X0FuYWxvZ1RyaWdnZXJfaF9fDQorDQorI2luY2x1ZGUgInRTeXN0ZW1JbnRlcmZhY2UuaCINCisNCituYW1lc3BhY2UgbkZQR0ENCit7DQorbmFtZXNwYWNlIG5GUkNfMjAxMl8xXzZfNA0KK3sNCisNCitjbGFzcyB0QW5hbG9nVHJpZ2dlcg0KK3sNCitwdWJsaWM6DQorICAgdEFuYWxvZ1RyaWdnZXIoKXt9DQorICAgdmlydHVhbCB+dEFuYWxvZ1RyaWdnZXIoKXt9DQorDQorICAgdmlydHVhbCB0U3lzdGVtSW50ZXJmYWNlKiBnZXRTeXN0ZW1JbnRlcmZhY2UoKSA9IDA7DQorICAgc3RhdGljIHRBbmFsb2dUcmlnZ2VyKiBjcmVhdGUodW5zaWduZWQgY2hhciBzeXNfaW5kZXgsIHRSaW9TdGF0dXNDb2RlICpzdGF0dXMpOw0KKyAgIHZpcnR1YWwgdW5zaWduZWQgY2hhciBnZXRTeXN0ZW1JbmRleCgpID0gMDsNCisNCisNCisgICB0eXBlZGVmIGVudW0NCisgICB7DQorICAgICAga051bVN5c3RlbXMgPSA4LA0KKyAgIH0gdElmYWNlQ29uc3RhbnRzOw0KKw0KKyAgIHR5cGVkZWYNCisgICB1bmlvbnsNCisgICAgICBzdHJ1Y3R7DQorICAgICAgICAgdW5zaWduZWQgSW5IeXN0ZXJlc2lzIDogMTsNCisgICAgICAgICB1bnNpZ25lZCBPdmVyTGltaXQgOiAxOw0KKyAgICAgICAgIHVuc2lnbmVkIFJpc2luZyA6IDE7DQorICAgICAgICAgdW5zaWduZWQgRmFsbGluZyA6IDE7DQorICAgICAgfTsNCisgICAgICBzdHJ1Y3R7DQorICAgICAgICAgdW5zaWduZWQgdmFsdWUgOiA0Ow0KKyAgICAgIH07DQorICAgfSB0T3V0cHV0Ow0KKyAgIHR5cGVkZWYNCisgICB1bmlvbnsNCisgICAgICBzdHJ1Y3R7DQorICAgICAgICAgdW5zaWduZWQgQ2hhbm5lbCA6IDM7DQorICAgICAgICAgdW5zaWduZWQgTW9kdWxlIDogMTsNCisgICAgICAgICB1bnNpZ25lZCBBdmVyYWdlZCA6IDE7DQorICAgICAgICAgdW5zaWduZWQgRmlsdGVyIDogMTsNCisgICAgICAgICB1bnNpZ25lZCBGbG9hdGluZ1JvbGxvdmVyIDogMTsNCisgICAgICAgICBzaWduZWQgUm9sbG92ZXJMaW1pdCA6IDg7DQorICAgICAgfTsNCisgICAgICBzdHJ1Y3R7DQorICAgICAgICAgdW5zaWduZWQgdmFsdWUgOiAxNTsNCisgICAgICB9Ow0KKyAgIH0gdFNvdXJjZVNlbGVjdDsNCisNCisNCisgICB0eXBlZGVmIGVudW0NCisgICB7DQorICAgfSB0U291cmNlU2VsZWN0X0lmYWNlQ29uc3RhbnRzOw0KKw0KKyAgIHZpcnR1YWwgdm9pZCB3cml0ZVNvdXJjZVNlbGVjdCh0U291cmNlU2VsZWN0IHZhbHVlLCB0UmlvU3RhdHVzQ29kZSAqc3RhdHVzKSA9IDA7DQorICAgdmlydHVhbCB2b2lkIHdyaXRlU291cmNlU2VsZWN0X0NoYW5uZWwodW5zaWduZWQgY2hhciB2YWx1ZSwgdFJpb1N0YXR1c0NvZGUgKnN0YXR1cykgPSAwOw0KKyAgIHZpcnR1YWwgdm9pZCB3cml0ZVNvdXJjZVNlbGVjdF9Nb2R1bGUodW5zaWduZWQgY2hhciB2YWx1ZSwgdFJpb1N0YXR1c0NvZGUgKnN0YXR1cykgPSAwOw0KKyAgIHZpcnR1YWwgdm9pZCB3cml0ZVNvdXJjZVNlbGVjdF9BdmVyYWdlZChib29sIHZhbHVlLCB0UmlvU3RhdHVzQ29kZSAqc3RhdHVzKSA9IDA7DQorICAgdmlydHVhbCB2b2lkIHdyaXRlU291cmNlU2VsZWN0X0ZpbHRlcihib29sIHZhbHVlLCB0UmlvU3RhdHVzQ29kZSAqc3RhdHVzKSA9IDA7DQorICAgdmlydHVhbCB2b2lkIHdyaXRlU291cmNlU2VsZWN0X0Zsb2F0aW5nUm9sbG92ZXIoYm9vbCB2YWx1ZSwgdFJpb1N0YXR1c0NvZGUgKnN0YXR1cykgPSAwOw0KKyAgIHZpcnR1YWwgdm9pZCB3cml0ZVNvdXJjZVNlbGVjdF9Sb2xsb3ZlckxpbWl0KHNpZ25lZCBzaG9ydCB2YWx1ZSwgdFJpb1N0YXR1c0NvZGUgKnN0YXR1cykgPSAwOw0KKyAgIHZpcnR1YWwgdFNvdXJjZVNlbGVjdCByZWFkU291cmNlU2VsZWN0KHRSaW9TdGF0dXNDb2RlICpzdGF0dXMpID0gMDsNCisgICB2aXJ0dWFsIHVuc2lnbmVkIGNoYXIgcmVhZFNvdXJjZVNlbGVjdF9DaGFubmVsKHRSaW9TdGF0dXNDb2RlICpzdGF0dXMpID0gMDsNCisgICB2aXJ0dWFsIHVuc2lnbmVkIGNoYXIgcmVhZFNvdXJjZVNlbGVjdF9Nb2R1bGUodFJpb1N0YXR1c0NvZGUgKnN0YXR1cykgPSAwOw0KKyAgIHZpcnR1YWwgYm9vbCByZWFkU291cmNlU2VsZWN0X0F2ZXJhZ2VkKHRSaW9TdGF0dXNDb2RlICpzdGF0dXMpID0gMDsNCisgICB2aXJ0dWFsIGJvb2wgcmVhZFNvdXJjZVNlbGVjdF9GaWx0ZXIodFJpb1N0YXR1c0NvZGUgKnN0YXR1cykgPSAwOw0KKyAgIHZpcnR1YWwgYm9vbCByZWFkU291cmNlU2VsZWN0X0Zsb2F0aW5nUm9sbG92ZXIodFJpb1N0YXR1c0NvZGUgKnN0YXR1cykgPSAwOw0KKyAgIHZpcnR1YWwgc2lnbmVkIHNob3J0IHJlYWRTb3VyY2VTZWxlY3RfUm9sbG92ZXJMaW1pdCh0UmlvU3RhdHVzQ29kZSAqc3RhdHVzKSA9IDA7DQorDQorDQorICAgdHlwZWRlZiBlbnVtDQorICAgew0KKyAgIH0gdFVwcGVyTGltaXRfSWZhY2VDb25zdGFudHM7DQorDQorICAgdmlydHVhbCB2b2lkIHdyaXRlVXBwZXJMaW1pdChzaWduZWQgaW50IHZhbHVlLCB0UmlvU3RhdHVzQ29kZSAqc3RhdHVzKSA9IDA7DQorICAgdmlydHVhbCBzaWduZWQgaW50IHJlYWRVcHBlckxpbWl0KHRSaW9TdGF0dXNDb2RlICpzdGF0dXMpID0gMDsNCisNCisNCisgICB0eXBlZGVmIGVudW0NCisgICB7DQorICAgfSB0TG93ZXJMaW1pdF9JZmFjZUNvbnN0YW50czsNCisNCisgICB2aXJ0dWFsIHZvaWQgd3JpdGVMb3dlckxpbWl0KHNpZ25lZCBpbnQgdmFsdWUsIHRSaW9TdGF0dXNDb2RlICpzdGF0dXMpID0gMDsNCisgICB2aXJ0dWFsIHNpZ25lZCBpbnQgcmVhZExvd2VyTGltaXQodFJpb1N0YXR1c0NvZGUgKnN0YXR1cykgPSAwOw0KKw0KKw0KKw0KKyAgIHR5cGVkZWYgZW51bQ0KKyAgIHsNCisgICAgICBrTnVtT3V0cHV0RWxlbWVudHMgPSA4LA0KKyAgIH0gdE91dHB1dF9JZmFjZUNvbnN0YW50czsNCisNCisgICB2aXJ0dWFsIHRPdXRwdXQgcmVhZE91dHB1dCh1bnNpZ25lZCBjaGFyIGJpdGZpZWxkX2luZGV4LCB0UmlvU3RhdHVzQ29kZSAqc3RhdHVzKSA9IDA7DQorICAgdmlydHVhbCBib29sIHJlYWRPdXRwdXRfSW5IeXN0ZXJlc2lzKHVuc2lnbmVkIGNoYXIgYml0ZmllbGRfaW5kZXgsIHRSaW9TdGF0dXNDb2RlICpzdGF0dXMpID0gMDsNCisgICB2aXJ0dWFsIGJvb2wgcmVhZE91dHB1dF9PdmVyTGltaXQodW5zaWduZWQgY2hhciBiaXRmaWVsZF9pbmRleCwgdFJpb1N0YXR1c0NvZGUgKnN0YXR1cykgPSAwOw0KKyAgIHZpcnR1YWwgYm9vbCByZWFkT3V0cHV0X1Jpc2luZyh1bnNpZ25lZCBjaGFyIGJpdGZpZWxkX2luZGV4LCB0UmlvU3RhdHVzQ29kZSAqc3RhdHVzKSA9IDA7DQorICAgdmlydHVhbCBib29sIHJlYWRPdXRwdXRfRmFsbGluZyh1bnNpZ25lZCBjaGFyIGJpdGZpZWxkX2luZGV4LCB0UmlvU3RhdHVzQ29kZSAqc3RhdHVzKSA9IDA7DQorDQorDQorDQorDQorcHJpdmF0ZToNCisgICB0QW5hbG9nVHJpZ2dlcihjb25zdCB0QW5hbG9nVHJpZ2dlciYpOw0KKyAgIHZvaWQgb3BlcmF0b3I9KGNvbnN0IHRBbmFsb2dUcmlnZ2VyJik7DQorfTsNCisNCit9DQorfQ0KKw0KKyNlbmRpZiAvLyBfX25GUkNfMjAxMl8xXzZfNF9BbmFsb2dUcmlnZ2VyX2hfXw0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0NoaXBPYmplY3QvdENvdW50ZXIuaCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0NoaXBPYmplY3QvdENvdW50ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDU1MmU1Ci0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvQ2hpcE9iamVjdC90Q291bnRlci5oCkBAIC0wLDAgKzEsMTgyIEBACisvLyBDb3B5cmlnaHQgKGMpIE5hdGlvbmFsIEluc3RydW1lbnRzIDIwMDguICBBbGwgUmlnaHRzIFJlc2VydmVkLg0KKy8vIERvIE5vdCBFZGl0Li4uIHRoaXMgZmlsZSBpcyBnZW5lcmF0ZWQhDQorDQorI2lmbmRlZiBfX25GUkNfMjAxMl8xXzZfNF9Db3VudGVyX2hfXw0KKyNkZWZpbmUgX19uRlJDXzIwMTJfMV82XzRfQ291bnRlcl9oX18NCisNCisjaW5jbHVkZSAidFN5c3RlbUludGVyZmFjZS5oIg0KKw0KK25hbWVzcGFjZSBuRlBHQQ0KK3sNCituYW1lc3BhY2UgbkZSQ18yMDEyXzFfNl80DQorew0KKw0KK2NsYXNzIHRDb3VudGVyDQorew0KK3B1YmxpYzoNCisgICB0Q291bnRlcigpe30NCisgICB2aXJ0dWFsIH50Q291bnRlcigpe30NCisNCisgICB2aXJ0dWFsIHRTeXN0ZW1JbnRlcmZhY2UqIGdldFN5c3RlbUludGVyZmFjZSgpID0gMDsNCisgICBzdGF0aWMgdENvdW50ZXIqIGNyZWF0ZSh1bnNpZ25lZCBjaGFyIHN5c19pbmRleCwgdFJpb1N0YXR1c0NvZGUgKnN0YXR1cyk7DQorICAgdmlydHVhbCB1bnNpZ25lZCBjaGFyIGdldFN5c3RlbUluZGV4KCkgPSAwOw0KKw0KKw0KKyAgIHR5cGVkZWYgZW51bQ0KKyAgIHsNCisgICAgICBrTnVtU3lzdGVtcyA9IDgsDQorICAgfSB0SWZhY2VDb25zdGFudHM7DQorDQorICAgdHlwZWRlZg0KKyAgIHVuaW9uew0KKyAgICAgIHN0cnVjdHsNCisgICAgICAgICB1bnNpZ25lZCBEaXJlY3Rpb24gOiAxOw0KKyAgICAgICAgIHNpZ25lZCBWYWx1ZSA6IDMxOw0KKyAgICAgIH07DQorICAgICAgc3RydWN0ew0KKyAgICAgICAgIHVuc2lnbmVkIHZhbHVlIDogMzI7DQorICAgICAgfTsNCisgICB9IHRPdXRwdXQ7DQorICAgdHlwZWRlZg0KKyAgIHVuaW9uew0KKyAgICAgIHN0cnVjdHsNCisgICAgICAgICB1bnNpZ25lZCBVcFNvdXJjZV9DaGFubmVsIDogNDsNCisgICAgICAgICB1bnNpZ25lZCBVcFNvdXJjZV9Nb2R1bGUgOiAxOw0KKyAgICAgICAgIHVuc2lnbmVkIFVwU291cmNlX0FuYWxvZ1RyaWdnZXIgOiAxOw0KKyAgICAgICAgIHVuc2lnbmVkIERvd25Tb3VyY2VfQ2hhbm5lbCA6IDQ7DQorICAgICAgICAgdW5zaWduZWQgRG93blNvdXJjZV9Nb2R1bGUgOiAxOw0KKyAgICAgICAgIHVuc2lnbmVkIERvd25Tb3VyY2VfQW5hbG9nVHJpZ2dlciA6IDE7DQorICAgICAgICAgdW5zaWduZWQgSW5kZXhTb3VyY2VfQ2hhbm5lbCA6IDQ7DQorICAgICAgICAgdW5zaWduZWQgSW5kZXhTb3VyY2VfTW9kdWxlIDogMTsNCisgICAgICAgICB1bnNpZ25lZCBJbmRleFNvdXJjZV9BbmFsb2dUcmlnZ2VyIDogMTsNCisgICAgICAgICB1bnNpZ25lZCBJbmRleEFjdGl2ZUhpZ2ggOiAxOw0KKyAgICAgICAgIHVuc2lnbmVkIFVwUmlzaW5nRWRnZSA6IDE7DQorICAgICAgICAgdW5zaWduZWQgVXBGYWxsaW5nRWRnZSA6IDE7DQorICAgICAgICAgdW5zaWduZWQgRG93blJpc2luZ0VkZ2UgOiAxOw0KKyAgICAgICAgIHVuc2lnbmVkIERvd25GYWxsaW5nRWRnZSA6IDE7DQorICAgICAgICAgdW5zaWduZWQgTW9kZSA6IDI7DQorICAgICAgICAgdW5zaWduZWQgUHVsc2VMZW5ndGhUaHJlc2hvbGQgOiA2Ow0KKyAgICAgICAgIHVuc2lnbmVkIEVuYWJsZSA6IDE7DQorICAgICAgfTsNCisgICAgICBzdHJ1Y3R7DQorICAgICAgICAgdW5zaWduZWQgdmFsdWUgOiAzMjsNCisgICAgICB9Ow0KKyAgIH0gdENvbmZpZzsNCisgICB0eXBlZGVmDQorICAgdW5pb257DQorICAgICAgc3RydWN0ew0KKyAgICAgICAgIHVuc2lnbmVkIFBlcmlvZCA6IDIzOw0KKyAgICAgICAgIHNpZ25lZCBDb3VudCA6IDg7DQorICAgICAgICAgdW5zaWduZWQgU3RhbGxlZCA6IDE7DQorICAgICAgfTsNCisgICAgICBzdHJ1Y3R7DQorICAgICAgICAgdW5zaWduZWQgdmFsdWUgOiAzMjsNCisgICAgICB9Ow0KKyAgIH0gdFRpbWVyT3V0cHV0Ow0KKyAgIHR5cGVkZWYNCisgICB1bmlvbnsNCisgICAgICBzdHJ1Y3R7DQorICAgICAgICAgdW5zaWduZWQgU3RhbGxQZXJpb2QgOiAyNDsNCisgICAgICAgICB1bnNpZ25lZCBBdmVyYWdlU2l6ZSA6IDc7DQorICAgICAgICAgdW5zaWduZWQgVXBkYXRlV2hlbkVtcHR5IDogMTsNCisgICAgICB9Ow0KKyAgICAgIHN0cnVjdHsNCisgICAgICAgICB1bnNpZ25lZCB2YWx1ZSA6IDMyOw0KKyAgICAgIH07DQorICAgfSB0VGltZXJDb25maWc7DQorDQorDQorICAgdHlwZWRlZiBlbnVtDQorICAgew0KKyAgIH0gdE91dHB1dF9JZmFjZUNvbnN0YW50czsNCisNCisgICB2aXJ0dWFsIHRPdXRwdXQgcmVhZE91dHB1dCh0UmlvU3RhdHVzQ29kZSAqc3RhdHVzKSA9IDA7DQorICAgdmlydHVhbCBib29sIHJlYWRPdXRwdXRfRGlyZWN0aW9uKHRSaW9TdGF0dXNDb2RlICpzdGF0dXMpID0gMDsNCisgICB2aXJ0dWFsIHNpZ25lZCBpbnQgcmVhZE91dHB1dF9WYWx1ZSh0UmlvU3RhdHVzQ29kZSAqc3RhdHVzKSA9IDA7DQorDQorDQorICAgdHlwZWRlZiBlbnVtDQorICAgew0KKyAgIH0gdENvbmZpZ19JZmFjZUNvbnN0YW50czsNCisNCisgICB2aXJ0dWFsIHZvaWQgd3JpdGVDb25maWcodENvbmZpZyB2YWx1ZSwgdFJpb1N0YXR1c0NvZGUgKnN0YXR1cykgPSAwOw0KKyAgIHZpcnR1YWwgdm9pZCB3cml0ZUNvbmZpZ19VcFNvdXJjZV9DaGFubmVsKHVuc2lnbmVkIGNoYXIgdmFsdWUsIHRSaW9TdGF0dXNDb2RlICpzdGF0dXMpID0gMDsNCisgICB2aXJ0dWFsIHZvaWQgd3JpdGVDb25maWdfVXBTb3VyY2VfTW9kdWxlKHVuc2lnbmVkIGNoYXIgdmFsdWUsIHRSaW9TdGF0dXNDb2RlICpzdGF0dXMpID0gMDsNCisgICB2aXJ0dWFsIHZvaWQgd3JpdGVDb25maWdfVXBTb3VyY2VfQW5hbG9nVHJpZ2dlcihib29sIHZhbHVlLCB0UmlvU3RhdHVzQ29kZSAqc3RhdHVzKSA9IDA7DQorICAgdmlydHVhbCB2b2lkIHdyaXRlQ29uZmlnX0Rvd25Tb3VyY2VfQ2hhbm5lbCh1bnNpZ25lZCBjaGFyIHZhbHVlLCB0UmlvU3RhdHVzQ29kZSAqc3RhdHVzKSA9IDA7DQorICAgdmlydHVhbCB2b2lkIHdyaXRlQ29uZmlnX0Rvd25Tb3VyY2VfTW9kdWxlKHVuc2lnbmVkIGNoYXIgdmFsdWUsIHRSaW9TdGF0dXNDb2RlICpzdGF0dXMpID0gMDsNCisgICB2aXJ0dWFsIHZvaWQgd3JpdGVDb25maWdfRG93blNvdXJjZV9BbmFsb2dUcmlnZ2VyKGJvb2wgdmFsdWUsIHRSaW9TdGF0dXNDb2RlICpzdGF0dXMpID0gMDsNCisgICB2aXJ0dWFsIHZvaWQgd3JpdGVDb25maWdfSW5kZXhTb3VyY2VfQ2hhbm5lbCh1bnNpZ25lZCBjaGFyIHZhbHVlLCB0UmlvU3RhdHVzQ29kZSAqc3RhdHVzKSA9IDA7DQorICAgdmlydHVhbCB2b2lkIHdyaXRlQ29uZmlnX0luZGV4U291cmNlX01vZHVsZSh1bnNpZ25lZCBjaGFyIHZhbHVlLCB0UmlvU3RhdHVzQ29kZSAqc3RhdHVzKSA9IDA7DQorICAgdmlydHVhbCB2b2lkIHdyaXRlQ29uZmlnX0luZGV4U291cmNlX0FuYWxvZ1RyaWdnZXIoYm9vbCB2YWx1ZSwgdFJpb1N0YXR1c0NvZGUgKnN0YXR1cykgPSAwOw0KKyAgIHZpcnR1YWwgdm9pZCB3cml0ZUNvbmZpZ19JbmRleEFjdGl2ZUhpZ2goYm9vbCB2YWx1ZSwgdFJpb1N0YXR1c0NvZGUgKnN0YXR1cykgPSAwOw0KKyAgIHZpcnR1YWwgdm9pZCB3cml0ZUNvbmZpZ19VcFJpc2luZ0VkZ2UoYm9vbCB2YWx1ZSwgdFJpb1N0YXR1c0NvZGUgKnN0YXR1cykgPSAwOw0KKyAgIHZpcnR1YWwgdm9pZCB3cml0ZUNvbmZpZ19VcEZhbGxpbmdFZGdlKGJvb2wgdmFsdWUsIHRSaW9TdGF0dXNDb2RlICpzdGF0dXMpID0gMDsNCisgICB2aXJ0dWFsIHZvaWQgd3JpdGVDb25maWdfRG93blJpc2luZ0VkZ2UoYm9vbCB2YWx1ZSwgdFJpb1N0YXR1c0NvZGUgKnN0YXR1cykgPSAwOw0KKyAgIHZpcnR1YWwgdm9pZCB3cml0ZUNvbmZpZ19Eb3duRmFsbGluZ0VkZ2UoYm9vbCB2YWx1ZSwgdFJpb1N0YXR1c0NvZGUgKnN0YXR1cykgPSAwOw0KKyAgIHZpcnR1YWwgdm9pZCB3cml0ZUNvbmZpZ19Nb2RlKHVuc2lnbmVkIGNoYXIgdmFsdWUsIHRSaW9TdGF0dXNDb2RlICpzdGF0dXMpID0gMDsNCisgICB2aXJ0dWFsIHZvaWQgd3JpdGVDb25maWdfUHVsc2VMZW5ndGhUaHJlc2hvbGQodW5zaWduZWQgc2hvcnQgdmFsdWUsIHRSaW9TdGF0dXNDb2RlICpzdGF0dXMpID0gMDsNCisgICB2aXJ0dWFsIHZvaWQgd3JpdGVDb25maWdfRW5hYmxlKGJvb2wgdmFsdWUsIHRSaW9TdGF0dXNDb2RlICpzdGF0dXMpID0gMDsNCisgICB2aXJ0dWFsIHRDb25maWcgcmVhZENvbmZpZyh0UmlvU3RhdHVzQ29kZSAqc3RhdHVzKSA9IDA7DQorICAgdmlydHVhbCB1bnNpZ25lZCBjaGFyIHJlYWRDb25maWdfVXBTb3VyY2VfQ2hhbm5lbCh0UmlvU3RhdHVzQ29kZSAqc3RhdHVzKSA9IDA7DQorICAgdmlydHVhbCB1bnNpZ25lZCBjaGFyIHJlYWRDb25maWdfVXBTb3VyY2VfTW9kdWxlKHRSaW9TdGF0dXNDb2RlICpzdGF0dXMpID0gMDsNCisgICB2aXJ0dWFsIGJvb2wgcmVhZENvbmZpZ19VcFNvdXJjZV9BbmFsb2dUcmlnZ2VyKHRSaW9TdGF0dXNDb2RlICpzdGF0dXMpID0gMDsNCisgICB2aXJ0dWFsIHVuc2lnbmVkIGNoYXIgcmVhZENvbmZpZ19Eb3duU291cmNlX0NoYW5uZWwodFJpb1N0YXR1c0NvZGUgKnN0YXR1cykgPSAwOw0KKyAgIHZpcnR1YWwgdW5zaWduZWQgY2hhciByZWFkQ29uZmlnX0Rvd25Tb3VyY2VfTW9kdWxlKHRSaW9TdGF0dXNDb2RlICpzdGF0dXMpID0gMDsNCisgICB2aXJ0dWFsIGJvb2wgcmVhZENvbmZpZ19Eb3duU291cmNlX0FuYWxvZ1RyaWdnZXIodFJpb1N0YXR1c0NvZGUgKnN0YXR1cykgPSAwOw0KKyAgIHZpcnR1YWwgdW5zaWduZWQgY2hhciByZWFkQ29uZmlnX0luZGV4U291cmNlX0NoYW5uZWwodFJpb1N0YXR1c0NvZGUgKnN0YXR1cykgPSAwOw0KKyAgIHZpcnR1YWwgdW5zaWduZWQgY2hhciByZWFkQ29uZmlnX0luZGV4U291cmNlX01vZHVsZSh0UmlvU3RhdHVzQ29kZSAqc3RhdHVzKSA9IDA7DQorICAgdmlydHVhbCBib29sIHJlYWRDb25maWdfSW5kZXhTb3VyY2VfQW5hbG9nVHJpZ2dlcih0UmlvU3RhdHVzQ29kZSAqc3RhdHVzKSA9IDA7DQorICAgdmlydHVhbCBib29sIHJlYWRDb25maWdfSW5kZXhBY3RpdmVIaWdoKHRSaW9TdGF0dXNDb2RlICpzdGF0dXMpID0gMDsNCisgICB2aXJ0dWFsIGJvb2wgcmVhZENvbmZpZ19VcFJpc2luZ0VkZ2UodFJpb1N0YXR1c0NvZGUgKnN0YXR1cykgPSAwOw0KKyAgIHZpcnR1YWwgYm9vbCByZWFkQ29uZmlnX1VwRmFsbGluZ0VkZ2UodFJpb1N0YXR1c0NvZGUgKnN0YXR1cykgPSAwOw0KKyAgIHZpcnR1YWwgYm9vbCByZWFkQ29uZmlnX0Rvd25SaXNpbmdFZGdlKHRSaW9TdGF0dXNDb2RlICpzdGF0dXMpID0gMDsNCisgICB2aXJ0dWFsIGJvb2wgcmVhZENvbmZpZ19Eb3duRmFsbGluZ0VkZ2UodFJpb1N0YXR1c0NvZGUgKnN0YXR1cykgPSAwOw0KKyAgIHZpcnR1YWwgdW5zaWduZWQgY2hhciByZWFkQ29uZmlnX01vZGUodFJpb1N0YXR1c0NvZGUgKnN0YXR1cykgPSAwOw0KKyAgIHZpcnR1YWwgdW5zaWduZWQgc2hvcnQgcmVhZENvbmZpZ19QdWxzZUxlbmd0aFRocmVzaG9sZCh0UmlvU3RhdHVzQ29kZSAqc3RhdHVzKSA9IDA7DQorICAgdmlydHVhbCBib29sIHJlYWRDb25maWdfRW5hYmxlKHRSaW9TdGF0dXNDb2RlICpzdGF0dXMpID0gMDsNCisNCisNCisgICB0eXBlZGVmIGVudW0NCisgICB7DQorICAgfSB0UmVzZXRfSWZhY2VDb25zdGFudHM7DQorDQorICAgdmlydHVhbCB2b2lkIHN0cm9iZVJlc2V0KHRSaW9TdGF0dXNDb2RlICpzdGF0dXMpID0gMDsNCisNCisNCisgICB0eXBlZGVmIGVudW0NCisgICB7DQorICAgfSB0VGltZXJPdXRwdXRfSWZhY2VDb25zdGFudHM7DQorDQorICAgdmlydHVhbCB0VGltZXJPdXRwdXQgcmVhZFRpbWVyT3V0cHV0KHRSaW9TdGF0dXNDb2RlICpzdGF0dXMpID0gMDsNCisgICB2aXJ0dWFsIHVuc2lnbmVkIGludCByZWFkVGltZXJPdXRwdXRfUGVyaW9kKHRSaW9TdGF0dXNDb2RlICpzdGF0dXMpID0gMDsNCisgICB2aXJ0dWFsIHNpZ25lZCBjaGFyIHJlYWRUaW1lck91dHB1dF9Db3VudCh0UmlvU3RhdHVzQ29kZSAqc3RhdHVzKSA9IDA7DQorICAgdmlydHVhbCBib29sIHJlYWRUaW1lck91dHB1dF9TdGFsbGVkKHRSaW9TdGF0dXNDb2RlICpzdGF0dXMpID0gMDsNCisNCisNCisgICB0eXBlZGVmIGVudW0NCisgICB7DQorICAgfSB0VGltZXJDb25maWdfSWZhY2VDb25zdGFudHM7DQorDQorICAgdmlydHVhbCB2b2lkIHdyaXRlVGltZXJDb25maWcodFRpbWVyQ29uZmlnIHZhbHVlLCB0UmlvU3RhdHVzQ29kZSAqc3RhdHVzKSA9IDA7DQorICAgdmlydHVhbCB2b2lkIHdyaXRlVGltZXJDb25maWdfU3RhbGxQZXJpb2QodW5zaWduZWQgaW50IHZhbHVlLCB0UmlvU3RhdHVzQ29kZSAqc3RhdHVzKSA9IDA7DQorICAgdmlydHVhbCB2b2lkIHdyaXRlVGltZXJDb25maWdfQXZlcmFnZVNpemUodW5zaWduZWQgY2hhciB2YWx1ZSwgdFJpb1N0YXR1c0NvZGUgKnN0YXR1cykgPSAwOw0KKyAgIHZpcnR1YWwgdm9pZCB3cml0ZVRpbWVyQ29uZmlnX1VwZGF0ZVdoZW5FbXB0eShib29sIHZhbHVlLCB0UmlvU3RhdHVzQ29kZSAqc3RhdHVzKSA9IDA7DQorICAgdmlydHVhbCB0VGltZXJDb25maWcgcmVhZFRpbWVyQ29uZmlnKHRSaW9TdGF0dXNDb2RlICpzdGF0dXMpID0gMDsNCisgICB2aXJ0dWFsIHVuc2lnbmVkIGludCByZWFkVGltZXJDb25maWdfU3RhbGxQZXJpb2QodFJpb1N0YXR1c0NvZGUgKnN0YXR1cykgPSAwOw0KKyAgIHZpcnR1YWwgdW5zaWduZWQgY2hhciByZWFkVGltZXJDb25maWdfQXZlcmFnZVNpemUodFJpb1N0YXR1c0NvZGUgKnN0YXR1cykgPSAwOw0KKyAgIHZpcnR1YWwgYm9vbCByZWFkVGltZXJDb25maWdfVXBkYXRlV2hlbkVtcHR5KHRSaW9TdGF0dXNDb2RlICpzdGF0dXMpID0gMDsNCisNCisNCisNCisNCisNCitwcml2YXRlOg0KKyAgIHRDb3VudGVyKGNvbnN0IHRDb3VudGVyJik7DQorICAgdm9pZCBvcGVyYXRvcj0oY29uc3QgdENvdW50ZXImKTsNCit9Ow0KKw0KK30NCit9DQorDQorI2VuZGlmIC8vIF9fbkZSQ18yMDEyXzFfNl80X0NvdW50ZXJfaF9fDQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvQ2hpcE9iamVjdC90RElPLmggYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9DaGlwT2JqZWN0L3RESU8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYmYxNWZjCi0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvQ2hpcE9iamVjdC90RElPLmgKQEAgLTAsMCArMSwyOTYgQEAKKy8vIENvcHlyaWdodCAoYykgTmF0aW9uYWwgSW5zdHJ1bWVudHMgMjAwOC4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuDQorLy8gRG8gTm90IEVkaXQuLi4gdGhpcyBmaWxlIGlzIGdlbmVyYXRlZCENCisNCisjaWZuZGVmIF9fbkZSQ18yMDEyXzFfNl80X0RJT19oX18NCisjZGVmaW5lIF9fbkZSQ18yMDEyXzFfNl80X0RJT19oX18NCisNCisjaW5jbHVkZSAidFN5c3RlbUludGVyZmFjZS5oIg0KKw0KK25hbWVzcGFjZSBuRlBHQQ0KK3sNCituYW1lc3BhY2UgbkZSQ18yMDEyXzFfNl80DQorew0KKw0KK2NsYXNzIHRESU8NCit7DQorcHVibGljOg0KKyAgIHRESU8oKXt9DQorICAgdmlydHVhbCB+dERJTygpe30NCisNCisgICB2aXJ0dWFsIHRTeXN0ZW1JbnRlcmZhY2UqIGdldFN5c3RlbUludGVyZmFjZSgpID0gMDsNCisgICBzdGF0aWMgdERJTyogY3JlYXRlKHVuc2lnbmVkIGNoYXIgc3lzX2luZGV4LCB0UmlvU3RhdHVzQ29kZSAqc3RhdHVzKTsNCisgICB2aXJ0dWFsIHVuc2lnbmVkIGNoYXIgZ2V0U3lzdGVtSW5kZXgoKSA9IDA7DQorDQorDQorICAgdHlwZWRlZiBlbnVtDQorICAgew0KKyAgICAgIGtOdW1TeXN0ZW1zID0gMiwNCisgICB9IHRJZmFjZUNvbnN0YW50czsNCisNCisgICB0eXBlZGVmDQorICAgdW5pb257DQorICAgICAgc3RydWN0ew0KKyAgICAgICAgIHVuc2lnbmVkIFBlcmlvZCA6IDE2Ow0KKyAgICAgICAgIHVuc2lnbmVkIE1pbkhpZ2ggOiAxNjsNCisgICAgICB9Ow0KKyAgICAgIHN0cnVjdHsNCisgICAgICAgICB1bnNpZ25lZCB2YWx1ZSA6IDMyOw0KKyAgICAgIH07DQorICAgfSB0UFdNQ29uZmlnOw0KKyAgIHR5cGVkZWYNCisgICB1bmlvbnsNCisgICAgICBzdHJ1Y3R7DQorICAgICAgICAgdW5zaWduZWQgUmVsYXlGd2QgOiA4Ow0KKyAgICAgICAgIHVuc2lnbmVkIFJlbGF5UmV2IDogODsNCisgICAgICAgICB1bnNpZ25lZCBJMkNIZWFkZXIgOiA0Ow0KKyAgICAgIH07DQorICAgICAgc3RydWN0ew0KKyAgICAgICAgIHVuc2lnbmVkIHZhbHVlIDogMjA7DQorICAgICAgfTsNCisgICB9IHRTbG93VmFsdWU7DQorICAgdHlwZWRlZg0KKyAgIHVuaW9uew0KKyAgICAgIHN0cnVjdHsNCisgICAgICAgICB1bnNpZ25lZCBUcmFuc2FjdGlvbiA6IDE7DQorICAgICAgICAgdW5zaWduZWQgRG9uZSA6IDE7DQorICAgICAgICAgdW5zaWduZWQgQWJvcnRlZCA6IDE7DQorICAgICAgICAgdW5zaWduZWQgRGF0YVJlY2VpdmVkSGlnaCA6IDI0Ow0KKyAgICAgIH07DQorICAgICAgc3RydWN0ew0KKyAgICAgICAgIHVuc2lnbmVkIHZhbHVlIDogMjc7DQorICAgICAgfTsNCisgICB9IHRJMkNTdGF0dXM7DQorICAgdHlwZWRlZg0KKyAgIHVuaW9uew0KKyAgICAgIHN0cnVjdHsNCisgICAgICAgICB1bnNpZ25lZCBQZXJpb2RQb3dlciA6IDQ7DQorICAgICAgICAgdW5zaWduZWQgT3V0cHV0U2VsZWN0XzAgOiA0Ow0KKyAgICAgICAgIHVuc2lnbmVkIE91dHB1dFNlbGVjdF8xIDogNDsNCisgICAgICAgICB1bnNpZ25lZCBPdXRwdXRTZWxlY3RfMiA6IDQ7DQorICAgICAgICAgdW5zaWduZWQgT3V0cHV0U2VsZWN0XzMgOiA0Ow0KKyAgICAgIH07DQorICAgICAgc3RydWN0ew0KKyAgICAgICAgIHVuc2lnbmVkIHZhbHVlIDogMjA7DQorICAgICAgfTsNCisgICB9IHRET19QV01Db25maWc7DQorICAgdHlwZWRlZg0KKyAgIHVuaW9uew0KKyAgICAgIHN0cnVjdHsNCisgICAgICAgICB1bnNpZ25lZCBBZGRyZXNzIDogODsNCisgICAgICAgICB1bnNpZ25lZCBCeXRlc1RvUmVhZCA6IDM7DQorICAgICAgICAgdW5zaWduZWQgQnl0ZXNUb1dyaXRlIDogMzsNCisgICAgICAgICB1bnNpZ25lZCBEYXRhVG9TZW5kSGlnaCA6IDE2Ow0KKyAgICAgICAgIHVuc2lnbmVkIEJpdHdpc2VIYW5kc2hha2UgOiAxOw0KKyAgICAgIH07DQorICAgICAgc3RydWN0ew0KKyAgICAgICAgIHVuc2lnbmVkIHZhbHVlIDogMzE7DQorICAgICAgfTsNCisgICB9IHRJMkNDb25maWc7DQorDQorDQorICAgdHlwZWRlZiBlbnVtDQorICAgew0KKyAgIH0gdEkyQ0RhdGFUb1NlbmRfSWZhY2VDb25zdGFudHM7DQorDQorICAgdmlydHVhbCB2b2lkIHdyaXRlSTJDRGF0YVRvU2VuZCh1bnNpZ25lZCBpbnQgdmFsdWUsIHRSaW9TdGF0dXNDb2RlICpzdGF0dXMpID0gMDsNCisgICB2aXJ0dWFsIHVuc2lnbmVkIGludCByZWFkSTJDRGF0YVRvU2VuZCh0UmlvU3RhdHVzQ29kZSAqc3RhdHVzKSA9IDA7DQorDQorDQorICAgdHlwZWRlZiBlbnVtDQorICAgew0KKyAgIH0gdERPX0lmYWNlQ29uc3RhbnRzOw0KKw0KKyAgIHZpcnR1YWwgdm9pZCB3cml0ZURPKHVuc2lnbmVkIHNob3J0IHZhbHVlLCB0UmlvU3RhdHVzQ29kZSAqc3RhdHVzKSA9IDA7DQorICAgdmlydHVhbCB1bnNpZ25lZCBzaG9ydCByZWFkRE8odFJpb1N0YXR1c0NvZGUgKnN0YXR1cykgPSAwOw0KKw0KKw0KKyAgIHR5cGVkZWYgZW51bQ0KKyAgIHsNCisgICAgICBrTnVtRmlsdGVyU2VsZWN0RWxlbWVudHMgPSAxNiwNCisgICB9IHRGaWx0ZXJTZWxlY3RfSWZhY2VDb25zdGFudHM7DQorDQorICAgdmlydHVhbCB2b2lkIHdyaXRlRmlsdGVyU2VsZWN0KHVuc2lnbmVkIGNoYXIgYml0ZmllbGRfaW5kZXgsIHVuc2lnbmVkIGNoYXIgdmFsdWUsIHRSaW9TdGF0dXNDb2RlICpzdGF0dXMpID0gMDsNCisgICB2aXJ0dWFsIHVuc2lnbmVkIGNoYXIgcmVhZEZpbHRlclNlbGVjdCh1bnNpZ25lZCBjaGFyIGJpdGZpZWxkX2luZGV4LCB0UmlvU3RhdHVzQ29kZSAqc3RhdHVzKSA9IDA7DQorDQorDQorICAgdHlwZWRlZiBlbnVtDQorICAgew0KKyAgICAgIGtOdW1GaWx0ZXJQZXJpb2RFbGVtZW50cyA9IDMsDQorICAgfSB0RmlsdGVyUGVyaW9kX0lmYWNlQ29uc3RhbnRzOw0KKw0KKyAgIHZpcnR1YWwgdm9pZCB3cml0ZUZpbHRlclBlcmlvZCh1bnNpZ25lZCBjaGFyIGJpdGZpZWxkX2luZGV4LCB1bnNpZ25lZCBjaGFyIHZhbHVlLCB0UmlvU3RhdHVzQ29kZSAqc3RhdHVzKSA9IDA7DQorICAgdmlydHVhbCB1bnNpZ25lZCBjaGFyIHJlYWRGaWx0ZXJQZXJpb2QodW5zaWduZWQgY2hhciBiaXRmaWVsZF9pbmRleCwgdFJpb1N0YXR1c0NvZGUgKnN0YXR1cykgPSAwOw0KKw0KKw0KKyAgIHR5cGVkZWYgZW51bQ0KKyAgIHsNCisgICB9IHRPdXRwdXRFbmFibGVfSWZhY2VDb25zdGFudHM7DQorDQorICAgdmlydHVhbCB2b2lkIHdyaXRlT3V0cHV0RW5hYmxlKHVuc2lnbmVkIHNob3J0IHZhbHVlLCB0UmlvU3RhdHVzQ29kZSAqc3RhdHVzKSA9IDA7DQorICAgdmlydHVhbCB1bnNpZ25lZCBzaG9ydCByZWFkT3V0cHV0RW5hYmxlKHRSaW9TdGF0dXNDb2RlICpzdGF0dXMpID0gMDsNCisNCisNCisgICB0eXBlZGVmIGVudW0NCisgICB7DQorICAgfSB0U2xvd1ZhbHVlX0lmYWNlQ29uc3RhbnRzOw0KKw0KKyAgIHZpcnR1YWwgdm9pZCB3cml0ZVNsb3dWYWx1ZSh0U2xvd1ZhbHVlIHZhbHVlLCB0UmlvU3RhdHVzQ29kZSAqc3RhdHVzKSA9IDA7DQorICAgdmlydHVhbCB2b2lkIHdyaXRlU2xvd1ZhbHVlX1JlbGF5RndkKHVuc2lnbmVkIGNoYXIgdmFsdWUsIHRSaW9TdGF0dXNDb2RlICpzdGF0dXMpID0gMDsNCisgICB2aXJ0dWFsIHZvaWQgd3JpdGVTbG93VmFsdWVfUmVsYXlSZXYodW5zaWduZWQgY2hhciB2YWx1ZSwgdFJpb1N0YXR1c0NvZGUgKnN0YXR1cykgPSAwOw0KKyAgIHZpcnR1YWwgdm9pZCB3cml0ZVNsb3dWYWx1ZV9JMkNIZWFkZXIodW5zaWduZWQgY2hhciB2YWx1ZSwgdFJpb1N0YXR1c0NvZGUgKnN0YXR1cykgPSAwOw0KKyAgIHZpcnR1YWwgdFNsb3dWYWx1ZSByZWFkU2xvd1ZhbHVlKHRSaW9TdGF0dXNDb2RlICpzdGF0dXMpID0gMDsNCisgICB2aXJ0dWFsIHVuc2lnbmVkIGNoYXIgcmVhZFNsb3dWYWx1ZV9SZWxheUZ3ZCh0UmlvU3RhdHVzQ29kZSAqc3RhdHVzKSA9IDA7DQorICAgdmlydHVhbCB1bnNpZ25lZCBjaGFyIHJlYWRTbG93VmFsdWVfUmVsYXlSZXYodFJpb1N0YXR1c0NvZGUgKnN0YXR1cykgPSAwOw0KKyAgIHZpcnR1YWwgdW5zaWduZWQgY2hhciByZWFkU2xvd1ZhbHVlX0kyQ0hlYWRlcih0UmlvU3RhdHVzQ29kZSAqc3RhdHVzKSA9IDA7DQorDQorDQorICAgdHlwZWRlZiBlbnVtDQorICAgew0KKyAgIH0gdEkyQ1N0YXR1c19JZmFjZUNvbnN0YW50czsNCisNCisgICB2aXJ0dWFsIHRJMkNTdGF0dXMgcmVhZEkyQ1N0YXR1cyh0UmlvU3RhdHVzQ29kZSAqc3RhdHVzKSA9IDA7DQorICAgdmlydHVhbCB1bnNpZ25lZCBjaGFyIHJlYWRJMkNTdGF0dXNfVHJhbnNhY3Rpb24odFJpb1N0YXR1c0NvZGUgKnN0YXR1cykgPSAwOw0KKyAgIHZpcnR1YWwgYm9vbCByZWFkSTJDU3RhdHVzX0RvbmUodFJpb1N0YXR1c0NvZGUgKnN0YXR1cykgPSAwOw0KKyAgIHZpcnR1YWwgYm9vbCByZWFkSTJDU3RhdHVzX0Fib3J0ZWQodFJpb1N0YXR1c0NvZGUgKnN0YXR1cykgPSAwOw0KKyAgIHZpcnR1YWwgdW5zaWduZWQgaW50IHJlYWRJMkNTdGF0dXNfRGF0YVJlY2VpdmVkSGlnaCh0UmlvU3RhdHVzQ29kZSAqc3RhdHVzKSA9IDA7DQorDQorDQorICAgdHlwZWRlZiBlbnVtDQorICAgew0KKyAgIH0gdEkyQ0RhdGFSZWNlaXZlZF9JZmFjZUNvbnN0YW50czsNCisNCisgICB2aXJ0dWFsIHVuc2lnbmVkIGludCByZWFkSTJDRGF0YVJlY2VpdmVkKHRSaW9TdGF0dXNDb2RlICpzdGF0dXMpID0gMDsNCisNCisNCisgICB0eXBlZGVmIGVudW0NCisgICB7DQorICAgfSB0RElfSWZhY2VDb25zdGFudHM7DQorDQorICAgdmlydHVhbCB1bnNpZ25lZCBzaG9ydCByZWFkREkodFJpb1N0YXR1c0NvZGUgKnN0YXR1cykgPSAwOw0KKw0KKw0KKyAgIHR5cGVkZWYgZW51bQ0KKyAgIHsNCisgICB9IHRQdWxzZV9JZmFjZUNvbnN0YW50czsNCisNCisgICB2aXJ0dWFsIHZvaWQgd3JpdGVQdWxzZSh1bnNpZ25lZCBzaG9ydCB2YWx1ZSwgdFJpb1N0YXR1c0NvZGUgKnN0YXR1cykgPSAwOw0KKyAgIHZpcnR1YWwgdW5zaWduZWQgc2hvcnQgcmVhZFB1bHNlKHRSaW9TdGF0dXNDb2RlICpzdGF0dXMpID0gMDsNCisNCisNCisgICB0eXBlZGVmIGVudW0NCisgICB7DQorICAgICAga051bVBXTVBlcmlvZFNjYWxlRWxlbWVudHMgPSAxMCwNCisgICB9IHRQV01QZXJpb2RTY2FsZV9JZmFjZUNvbnN0YW50czsNCisNCisgICB2aXJ0dWFsIHZvaWQgd3JpdGVQV01QZXJpb2RTY2FsZSh1bnNpZ25lZCBjaGFyIGJpdGZpZWxkX2luZGV4LCB1bnNpZ25lZCBjaGFyIHZhbHVlLCB0UmlvU3RhdHVzQ29kZSAqc3RhdHVzKSA9IDA7DQorICAgdmlydHVhbCB1bnNpZ25lZCBjaGFyIHJlYWRQV01QZXJpb2RTY2FsZSh1bnNpZ25lZCBjaGFyIGJpdGZpZWxkX2luZGV4LCB0UmlvU3RhdHVzQ29kZSAqc3RhdHVzKSA9IDA7DQorDQorDQorICAgdHlwZWRlZiBlbnVtDQorICAgew0KKyAgICAgIGtOdW1ET19QV01EdXR5Q3ljbGVFbGVtZW50cyA9IDQsDQorICAgfSB0RE9fUFdNRHV0eUN5Y2xlX0lmYWNlQ29uc3RhbnRzOw0KKw0KKyAgIHZpcnR1YWwgdm9pZCB3cml0ZURPX1BXTUR1dHlDeWNsZSh1bnNpZ25lZCBjaGFyIGJpdGZpZWxkX2luZGV4LCB1bnNpZ25lZCBjaGFyIHZhbHVlLCB0UmlvU3RhdHVzQ29kZSAqc3RhdHVzKSA9IDA7DQorICAgdmlydHVhbCB1bnNpZ25lZCBjaGFyIHJlYWRET19QV01EdXR5Q3ljbGUodW5zaWduZWQgY2hhciBiaXRmaWVsZF9pbmRleCwgdFJpb1N0YXR1c0NvZGUgKnN0YXR1cykgPSAwOw0KKw0KKw0KKyAgIHR5cGVkZWYgZW51bQ0KKyAgIHsNCisgICB9IHRCRkxfSWZhY2VDb25zdGFudHM7DQorDQorICAgdmlydHVhbCB2b2lkIHdyaXRlQkZMKGJvb2wgdmFsdWUsIHRSaW9TdGF0dXNDb2RlICpzdGF0dXMpID0gMDsNCisgICB2aXJ0dWFsIGJvb2wgcmVhZEJGTCh0UmlvU3RhdHVzQ29kZSAqc3RhdHVzKSA9IDA7DQorDQorDQorICAgdHlwZWRlZiBlbnVtDQorICAgew0KKyAgIH0gdEkyQ1N0YXJ0X0lmYWNlQ29uc3RhbnRzOw0KKw0KKyAgIHZpcnR1YWwgdm9pZCBzdHJvYmVJMkNTdGFydCh0UmlvU3RhdHVzQ29kZSAqc3RhdHVzKSA9IDA7DQorDQorDQorICAgdHlwZWRlZiBlbnVtDQorICAgew0KKyAgIH0gdERPX1BXTUNvbmZpZ19JZmFjZUNvbnN0YW50czsNCisNCisgICB2aXJ0dWFsIHZvaWQgd3JpdGVET19QV01Db25maWcodERPX1BXTUNvbmZpZyB2YWx1ZSwgdFJpb1N0YXR1c0NvZGUgKnN0YXR1cykgPSAwOw0KKyAgIHZpcnR1YWwgdm9pZCB3cml0ZURPX1BXTUNvbmZpZ19QZXJpb2RQb3dlcih1bnNpZ25lZCBjaGFyIHZhbHVlLCB0UmlvU3RhdHVzQ29kZSAqc3RhdHVzKSA9IDA7DQorICAgdmlydHVhbCB2b2lkIHdyaXRlRE9fUFdNQ29uZmlnX091dHB1dFNlbGVjdF8wKHVuc2lnbmVkIGNoYXIgdmFsdWUsIHRSaW9TdGF0dXNDb2RlICpzdGF0dXMpID0gMDsNCisgICB2aXJ0dWFsIHZvaWQgd3JpdGVET19QV01Db25maWdfT3V0cHV0U2VsZWN0XzEodW5zaWduZWQgY2hhciB2YWx1ZSwgdFJpb1N0YXR1c0NvZGUgKnN0YXR1cykgPSAwOw0KKyAgIHZpcnR1YWwgdm9pZCB3cml0ZURPX1BXTUNvbmZpZ19PdXRwdXRTZWxlY3RfMih1bnNpZ25lZCBjaGFyIHZhbHVlLCB0UmlvU3RhdHVzQ29kZSAqc3RhdHVzKSA9IDA7DQorICAgdmlydHVhbCB2b2lkIHdyaXRlRE9fUFdNQ29uZmlnX091dHB1dFNlbGVjdF8zKHVuc2lnbmVkIGNoYXIgdmFsdWUsIHRSaW9TdGF0dXNDb2RlICpzdGF0dXMpID0gMDsNCisgICB2aXJ0dWFsIHRET19QV01Db25maWcgcmVhZERPX1BXTUNvbmZpZyh0UmlvU3RhdHVzQ29kZSAqc3RhdHVzKSA9IDA7DQorICAgdmlydHVhbCB1bnNpZ25lZCBjaGFyIHJlYWRET19QV01Db25maWdfUGVyaW9kUG93ZXIodFJpb1N0YXR1c0NvZGUgKnN0YXR1cykgPSAwOw0KKyAgIHZpcnR1YWwgdW5zaWduZWQgY2hhciByZWFkRE9fUFdNQ29uZmlnX091dHB1dFNlbGVjdF8wKHRSaW9TdGF0dXNDb2RlICpzdGF0dXMpID0gMDsNCisgICB2aXJ0dWFsIHVuc2lnbmVkIGNoYXIgcmVhZERPX1BXTUNvbmZpZ19PdXRwdXRTZWxlY3RfMSh0UmlvU3RhdHVzQ29kZSAqc3RhdHVzKSA9IDA7DQorICAgdmlydHVhbCB1bnNpZ25lZCBjaGFyIHJlYWRET19QV01Db25maWdfT3V0cHV0U2VsZWN0XzIodFJpb1N0YXR1c0NvZGUgKnN0YXR1cykgPSAwOw0KKyAgIHZpcnR1YWwgdW5zaWduZWQgY2hhciByZWFkRE9fUFdNQ29uZmlnX091dHB1dFNlbGVjdF8zKHRSaW9TdGF0dXNDb2RlICpzdGF0dXMpID0gMDsNCisNCisNCisgICB0eXBlZGVmIGVudW0NCisgICB7DQorICAgfSB0UHVsc2VMZW5ndGhfSWZhY2VDb25zdGFudHM7DQorDQorICAgdmlydHVhbCB2b2lkIHdyaXRlUHVsc2VMZW5ndGgodW5zaWduZWQgY2hhciB2YWx1ZSwgdFJpb1N0YXR1c0NvZGUgKnN0YXR1cykgPSAwOw0KKyAgIHZpcnR1YWwgdW5zaWduZWQgY2hhciByZWFkUHVsc2VMZW5ndGgodFJpb1N0YXR1c0NvZGUgKnN0YXR1cykgPSAwOw0KKw0KKw0KKyAgIHR5cGVkZWYgZW51bQ0KKyAgIHsNCisgICB9IHRJMkNDb25maWdfSWZhY2VDb25zdGFudHM7DQorDQorICAgdmlydHVhbCB2b2lkIHdyaXRlSTJDQ29uZmlnKHRJMkNDb25maWcgdmFsdWUsIHRSaW9TdGF0dXNDb2RlICpzdGF0dXMpID0gMDsNCisgICB2aXJ0dWFsIHZvaWQgd3JpdGVJMkNDb25maWdfQWRkcmVzcyh1bnNpZ25lZCBjaGFyIHZhbHVlLCB0UmlvU3RhdHVzQ29kZSAqc3RhdHVzKSA9IDA7DQorICAgdmlydHVhbCB2b2lkIHdyaXRlSTJDQ29uZmlnX0J5dGVzVG9SZWFkKHVuc2lnbmVkIGNoYXIgdmFsdWUsIHRSaW9TdGF0dXNDb2RlICpzdGF0dXMpID0gMDsNCisgICB2aXJ0dWFsIHZvaWQgd3JpdGVJMkNDb25maWdfQnl0ZXNUb1dyaXRlKHVuc2lnbmVkIGNoYXIgdmFsdWUsIHRSaW9TdGF0dXNDb2RlICpzdGF0dXMpID0gMDsNCisgICB2aXJ0dWFsIHZvaWQgd3JpdGVJMkNDb25maWdfRGF0YVRvU2VuZEhpZ2godW5zaWduZWQgc2hvcnQgdmFsdWUsIHRSaW9TdGF0dXNDb2RlICpzdGF0dXMpID0gMDsNCisgICB2aXJ0dWFsIHZvaWQgd3JpdGVJMkNDb25maWdfQml0d2lzZUhhbmRzaGFrZShib29sIHZhbHVlLCB0UmlvU3RhdHVzQ29kZSAqc3RhdHVzKSA9IDA7DQorICAgdmlydHVhbCB0STJDQ29uZmlnIHJlYWRJMkNDb25maWcodFJpb1N0YXR1c0NvZGUgKnN0YXR1cykgPSAwOw0KKyAgIHZpcnR1YWwgdW5zaWduZWQgY2hhciByZWFkSTJDQ29uZmlnX0FkZHJlc3ModFJpb1N0YXR1c0NvZGUgKnN0YXR1cykgPSAwOw0KKyAgIHZpcnR1YWwgdW5zaWduZWQgY2hhciByZWFkSTJDQ29uZmlnX0J5dGVzVG9SZWFkKHRSaW9TdGF0dXNDb2RlICpzdGF0dXMpID0gMDsNCisgICB2aXJ0dWFsIHVuc2lnbmVkIGNoYXIgcmVhZEkyQ0NvbmZpZ19CeXRlc1RvV3JpdGUodFJpb1N0YXR1c0NvZGUgKnN0YXR1cykgPSAwOw0KKyAgIHZpcnR1YWwgdW5zaWduZWQgc2hvcnQgcmVhZEkyQ0NvbmZpZ19EYXRhVG9TZW5kSGlnaCh0UmlvU3RhdHVzQ29kZSAqc3RhdHVzKSA9IDA7DQorICAgdmlydHVhbCBib29sIHJlYWRJMkNDb25maWdfQml0d2lzZUhhbmRzaGFrZSh0UmlvU3RhdHVzQ29kZSAqc3RhdHVzKSA9IDA7DQorDQorDQorDQorICAgdHlwZWRlZiBlbnVtDQorICAgew0KKyAgIH0gdExvb3BUaW1pbmdfSWZhY2VDb25zdGFudHM7DQorDQorICAgdmlydHVhbCB1bnNpZ25lZCBzaG9ydCByZWFkTG9vcFRpbWluZyh0UmlvU3RhdHVzQ29kZSAqc3RhdHVzKSA9IDA7DQorDQorDQorICAgdHlwZWRlZiBlbnVtDQorICAgew0KKyAgIH0gdFBXTUNvbmZpZ19JZmFjZUNvbnN0YW50czsNCisNCisgICB2aXJ0dWFsIHZvaWQgd3JpdGVQV01Db25maWcodFBXTUNvbmZpZyB2YWx1ZSwgdFJpb1N0YXR1c0NvZGUgKnN0YXR1cykgPSAwOw0KKyAgIHZpcnR1YWwgdm9pZCB3cml0ZVBXTUNvbmZpZ19QZXJpb2QodW5zaWduZWQgc2hvcnQgdmFsdWUsIHRSaW9TdGF0dXNDb2RlICpzdGF0dXMpID0gMDsNCisgICB2aXJ0dWFsIHZvaWQgd3JpdGVQV01Db25maWdfTWluSGlnaCh1bnNpZ25lZCBzaG9ydCB2YWx1ZSwgdFJpb1N0YXR1c0NvZGUgKnN0YXR1cykgPSAwOw0KKyAgIHZpcnR1YWwgdFBXTUNvbmZpZyByZWFkUFdNQ29uZmlnKHRSaW9TdGF0dXNDb2RlICpzdGF0dXMpID0gMDsNCisgICB2aXJ0dWFsIHVuc2lnbmVkIHNob3J0IHJlYWRQV01Db25maWdfUGVyaW9kKHRSaW9TdGF0dXNDb2RlICpzdGF0dXMpID0gMDsNCisgICB2aXJ0dWFsIHVuc2lnbmVkIHNob3J0IHJlYWRQV01Db25maWdfTWluSGlnaCh0UmlvU3RhdHVzQ29kZSAqc3RhdHVzKSA9IDA7DQorDQorDQorDQorICAgdHlwZWRlZiBlbnVtDQorICAgew0KKyAgICAgIGtOdW1QV01WYWx1ZVJlZ2lzdGVycyA9IDEwLA0KKyAgIH0gdFBXTVZhbHVlX0lmYWNlQ29uc3RhbnRzOw0KKw0KKyAgIHZpcnR1YWwgdm9pZCB3cml0ZVBXTVZhbHVlKHVuc2lnbmVkIGNoYXIgcmVnX2luZGV4LCB1bnNpZ25lZCBjaGFyIHZhbHVlLCB0UmlvU3RhdHVzQ29kZSAqc3RhdHVzKSA9IDA7DQorICAgdmlydHVhbCB1bnNpZ25lZCBjaGFyIHJlYWRQV01WYWx1ZSh1bnNpZ25lZCBjaGFyIHJlZ19pbmRleCwgdFJpb1N0YXR1c0NvZGUgKnN0YXR1cykgPSAwOw0KKw0KKw0KKw0KK3ByaXZhdGU6DQorICAgdERJTyhjb25zdCB0RElPJik7DQorICAgdm9pZCBvcGVyYXRvcj0oY29uc3QgdERJTyYpOw0KK307DQorDQorfQ0KK30NCisNCisjZW5kaWYgLy8gX19uRlJDXzIwMTJfMV82XzRfRElPX2hfXw0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0NoaXBPYmplY3QvdERNQS5oIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvQ2hpcE9iamVjdC90RE1BLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjk5ODJmNwotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0NoaXBPYmplY3QvdERNQS5oCkBAIC0wLDAgKzEsMTU3IEBACisvLyBDb3B5cmlnaHQgKGMpIE5hdGlvbmFsIEluc3RydW1lbnRzIDIwMDguICBBbGwgUmlnaHRzIFJlc2VydmVkLg0KKy8vIERvIE5vdCBFZGl0Li4uIHRoaXMgZmlsZSBpcyBnZW5lcmF0ZWQhDQorDQorI2lmbmRlZiBfX25GUkNfMjAxMl8xXzZfNF9ETUFfaF9fDQorI2RlZmluZSBfX25GUkNfMjAxMl8xXzZfNF9ETUFfaF9fDQorDQorI2luY2x1ZGUgInRTeXN0ZW1JbnRlcmZhY2UuaCINCisNCituYW1lc3BhY2UgbkZQR0ENCit7DQorbmFtZXNwYWNlIG5GUkNfMjAxMl8xXzZfNA0KK3sNCisNCitjbGFzcyB0RE1BDQorew0KK3B1YmxpYzoNCisgICB0RE1BKCl7fQ0KKyAgIHZpcnR1YWwgfnRETUEoKXt9DQorDQorICAgdmlydHVhbCB0U3lzdGVtSW50ZXJmYWNlKiBnZXRTeXN0ZW1JbnRlcmZhY2UoKSA9IDA7DQorICAgc3RhdGljIHRETUEqIGNyZWF0ZSh0UmlvU3RhdHVzQ29kZSAqc3RhdHVzKTsNCisNCisgICB0eXBlZGVmIGVudW0NCisgICB7DQorICAgICAga051bVN5c3RlbXMgPSAxLA0KKyAgIH0gdElmYWNlQ29uc3RhbnRzOw0KKw0KKyAgIHR5cGVkZWYNCisgICB1bmlvbnsNCisgICAgICBzdHJ1Y3R7DQorICAgICAgICAgdW5zaWduZWQgUGF1c2UgOiAxOw0KKyAgICAgICAgIHVuc2lnbmVkIEVuYWJsZV9BSTBfTG93IDogMTsNCisgICAgICAgICB1bnNpZ25lZCBFbmFibGVfQUkwX0hpZ2ggOiAxOw0KKyAgICAgICAgIHVuc2lnbmVkIEVuYWJsZV9BSUF2ZXJhZ2VkMF9Mb3cgOiAxOw0KKyAgICAgICAgIHVuc2lnbmVkIEVuYWJsZV9BSUF2ZXJhZ2VkMF9IaWdoIDogMTsNCisgICAgICAgICB1bnNpZ25lZCBFbmFibGVfQUkxX0xvdyA6IDE7DQorICAgICAgICAgdW5zaWduZWQgRW5hYmxlX0FJMV9IaWdoIDogMTsNCisgICAgICAgICB1bnNpZ25lZCBFbmFibGVfQUlBdmVyYWdlZDFfTG93IDogMTsNCisgICAgICAgICB1bnNpZ25lZCBFbmFibGVfQUlBdmVyYWdlZDFfSGlnaCA6IDE7DQorICAgICAgICAgdW5zaWduZWQgRW5hYmxlX0FjY3VtdWxhdG9yMCA6IDE7DQorICAgICAgICAgdW5zaWduZWQgRW5hYmxlX0FjY3VtdWxhdG9yMSA6IDE7DQorICAgICAgICAgdW5zaWduZWQgRW5hYmxlX0RJIDogMTsNCisgICAgICAgICB1bnNpZ25lZCBFbmFibGVfQW5hbG9nVHJpZ2dlcnMgOiAxOw0KKyAgICAgICAgIHVuc2lnbmVkIEVuYWJsZV9Db3VudGVyc19Mb3cgOiAxOw0KKyAgICAgICAgIHVuc2lnbmVkIEVuYWJsZV9Db3VudGVyc19IaWdoIDogMTsNCisgICAgICAgICB1bnNpZ25lZCBFbmFibGVfQ291bnRlclRpbWVyc19Mb3cgOiAxOw0KKyAgICAgICAgIHVuc2lnbmVkIEVuYWJsZV9Db3VudGVyVGltZXJzX0hpZ2ggOiAxOw0KKyAgICAgICAgIHVuc2lnbmVkIEVuYWJsZV9FbmNvZGVycyA6IDE7DQorICAgICAgICAgdW5zaWduZWQgRW5hYmxlX0VuY29kZXJUaW1lcnMgOiAxOw0KKyAgICAgICAgIHVuc2lnbmVkIEV4dGVybmFsQ2xvY2sgOiAxOw0KKyAgICAgIH07DQorICAgICAgc3RydWN0ew0KKyAgICAgICAgIHVuc2lnbmVkIHZhbHVlIDogMjA7DQorICAgICAgfTsNCisgICB9IHRDb25maWc7DQorICAgdHlwZWRlZg0KKyAgIHVuaW9uew0KKyAgICAgIHN0cnVjdHsNCisgICAgICAgICB1bnNpZ25lZCBFeHRlcm5hbENsb2NrU291cmNlX0NoYW5uZWwgOiA0Ow0KKyAgICAgICAgIHVuc2lnbmVkIEV4dGVybmFsQ2xvY2tTb3VyY2VfTW9kdWxlIDogMTsNCisgICAgICAgICB1bnNpZ25lZCBFeHRlcm5hbENsb2NrU291cmNlX0FuYWxvZ1RyaWdnZXIgOiAxOw0KKyAgICAgICAgIHVuc2lnbmVkIFJpc2luZ0VkZ2UgOiAxOw0KKyAgICAgICAgIHVuc2lnbmVkIEZhbGxpbmdFZGdlIDogMTsNCisgICAgICB9Ow0KKyAgICAgIHN0cnVjdHsNCisgICAgICAgICB1bnNpZ25lZCB2YWx1ZSA6IDg7DQorICAgICAgfTsNCisgICB9IHRFeHRlcm5hbFRyaWdnZXJzOw0KKw0KKw0KKw0KKyAgIHR5cGVkZWYgZW51bQ0KKyAgIHsNCisgICB9IHRSYXRlX0lmYWNlQ29uc3RhbnRzOw0KKw0KKyAgIHZpcnR1YWwgdm9pZCB3cml0ZVJhdGUodW5zaWduZWQgaW50IHZhbHVlLCB0UmlvU3RhdHVzQ29kZSAqc3RhdHVzKSA9IDA7DQorICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgcmVhZFJhdGUodFJpb1N0YXR1c0NvZGUgKnN0YXR1cykgPSAwOw0KKw0KKw0KKyAgIHR5cGVkZWYgZW51bQ0KKyAgIHsNCisgICB9IHRDb25maWdfSWZhY2VDb25zdGFudHM7DQorDQorICAgdmlydHVhbCB2b2lkIHdyaXRlQ29uZmlnKHRDb25maWcgdmFsdWUsIHRSaW9TdGF0dXNDb2RlICpzdGF0dXMpID0gMDsNCisgICB2aXJ0dWFsIHZvaWQgd3JpdGVDb25maWdfUGF1c2UoYm9vbCB2YWx1ZSwgdFJpb1N0YXR1c0NvZGUgKnN0YXR1cykgPSAwOw0KKyAgIHZpcnR1YWwgdm9pZCB3cml0ZUNvbmZpZ19FbmFibGVfQUkwX0xvdyhib29sIHZhbHVlLCB0UmlvU3RhdHVzQ29kZSAqc3RhdHVzKSA9IDA7DQorICAgdmlydHVhbCB2b2lkIHdyaXRlQ29uZmlnX0VuYWJsZV9BSTBfSGlnaChib29sIHZhbHVlLCB0UmlvU3RhdHVzQ29kZSAqc3RhdHVzKSA9IDA7DQorICAgdmlydHVhbCB2b2lkIHdyaXRlQ29uZmlnX0VuYWJsZV9BSUF2ZXJhZ2VkMF9Mb3coYm9vbCB2YWx1ZSwgdFJpb1N0YXR1c0NvZGUgKnN0YXR1cykgPSAwOw0KKyAgIHZpcnR1YWwgdm9pZCB3cml0ZUNvbmZpZ19FbmFibGVfQUlBdmVyYWdlZDBfSGlnaChib29sIHZhbHVlLCB0UmlvU3RhdHVzQ29kZSAqc3RhdHVzKSA9IDA7DQorICAgdmlydHVhbCB2b2lkIHdyaXRlQ29uZmlnX0VuYWJsZV9BSTFfTG93KGJvb2wgdmFsdWUsIHRSaW9TdGF0dXNDb2RlICpzdGF0dXMpID0gMDsNCisgICB2aXJ0dWFsIHZvaWQgd3JpdGVDb25maWdfRW5hYmxlX0FJMV9IaWdoKGJvb2wgdmFsdWUsIHRSaW9TdGF0dXNDb2RlICpzdGF0dXMpID0gMDsNCisgICB2aXJ0dWFsIHZvaWQgd3JpdGVDb25maWdfRW5hYmxlX0FJQXZlcmFnZWQxX0xvdyhib29sIHZhbHVlLCB0UmlvU3RhdHVzQ29kZSAqc3RhdHVzKSA9IDA7DQorICAgdmlydHVhbCB2b2lkIHdyaXRlQ29uZmlnX0VuYWJsZV9BSUF2ZXJhZ2VkMV9IaWdoKGJvb2wgdmFsdWUsIHRSaW9TdGF0dXNDb2RlICpzdGF0dXMpID0gMDsNCisgICB2aXJ0dWFsIHZvaWQgd3JpdGVDb25maWdfRW5hYmxlX0FjY3VtdWxhdG9yMChib29sIHZhbHVlLCB0UmlvU3RhdHVzQ29kZSAqc3RhdHVzKSA9IDA7DQorICAgdmlydHVhbCB2b2lkIHdyaXRlQ29uZmlnX0VuYWJsZV9BY2N1bXVsYXRvcjEoYm9vbCB2YWx1ZSwgdFJpb1N0YXR1c0NvZGUgKnN0YXR1cykgPSAwOw0KKyAgIHZpcnR1YWwgdm9pZCB3cml0ZUNvbmZpZ19FbmFibGVfREkoYm9vbCB2YWx1ZSwgdFJpb1N0YXR1c0NvZGUgKnN0YXR1cykgPSAwOw0KKyAgIHZpcnR1YWwgdm9pZCB3cml0ZUNvbmZpZ19FbmFibGVfQW5hbG9nVHJpZ2dlcnMoYm9vbCB2YWx1ZSwgdFJpb1N0YXR1c0NvZGUgKnN0YXR1cykgPSAwOw0KKyAgIHZpcnR1YWwgdm9pZCB3cml0ZUNvbmZpZ19FbmFibGVfQ291bnRlcnNfTG93KGJvb2wgdmFsdWUsIHRSaW9TdGF0dXNDb2RlICpzdGF0dXMpID0gMDsNCisgICB2aXJ0dWFsIHZvaWQgd3JpdGVDb25maWdfRW5hYmxlX0NvdW50ZXJzX0hpZ2goYm9vbCB2YWx1ZSwgdFJpb1N0YXR1c0NvZGUgKnN0YXR1cykgPSAwOw0KKyAgIHZpcnR1YWwgdm9pZCB3cml0ZUNvbmZpZ19FbmFibGVfQ291bnRlclRpbWVyc19Mb3coYm9vbCB2YWx1ZSwgdFJpb1N0YXR1c0NvZGUgKnN0YXR1cykgPSAwOw0KKyAgIHZpcnR1YWwgdm9pZCB3cml0ZUNvbmZpZ19FbmFibGVfQ291bnRlclRpbWVyc19IaWdoKGJvb2wgdmFsdWUsIHRSaW9TdGF0dXNDb2RlICpzdGF0dXMpID0gMDsNCisgICB2aXJ0dWFsIHZvaWQgd3JpdGVDb25maWdfRW5hYmxlX0VuY29kZXJzKGJvb2wgdmFsdWUsIHRSaW9TdGF0dXNDb2RlICpzdGF0dXMpID0gMDsNCisgICB2aXJ0dWFsIHZvaWQgd3JpdGVDb25maWdfRW5hYmxlX0VuY29kZXJUaW1lcnMoYm9vbCB2YWx1ZSwgdFJpb1N0YXR1c0NvZGUgKnN0YXR1cykgPSAwOw0KKyAgIHZpcnR1YWwgdm9pZCB3cml0ZUNvbmZpZ19FeHRlcm5hbENsb2NrKGJvb2wgdmFsdWUsIHRSaW9TdGF0dXNDb2RlICpzdGF0dXMpID0gMDsNCisgICB2aXJ0dWFsIHRDb25maWcgcmVhZENvbmZpZyh0UmlvU3RhdHVzQ29kZSAqc3RhdHVzKSA9IDA7DQorICAgdmlydHVhbCBib29sIHJlYWRDb25maWdfUGF1c2UodFJpb1N0YXR1c0NvZGUgKnN0YXR1cykgPSAwOw0KKyAgIHZpcnR1YWwgYm9vbCByZWFkQ29uZmlnX0VuYWJsZV9BSTBfTG93KHRSaW9TdGF0dXNDb2RlICpzdGF0dXMpID0gMDsNCisgICB2aXJ0dWFsIGJvb2wgcmVhZENvbmZpZ19FbmFibGVfQUkwX0hpZ2godFJpb1N0YXR1c0NvZGUgKnN0YXR1cykgPSAwOw0KKyAgIHZpcnR1YWwgYm9vbCByZWFkQ29uZmlnX0VuYWJsZV9BSUF2ZXJhZ2VkMF9Mb3codFJpb1N0YXR1c0NvZGUgKnN0YXR1cykgPSAwOw0KKyAgIHZpcnR1YWwgYm9vbCByZWFkQ29uZmlnX0VuYWJsZV9BSUF2ZXJhZ2VkMF9IaWdoKHRSaW9TdGF0dXNDb2RlICpzdGF0dXMpID0gMDsNCisgICB2aXJ0dWFsIGJvb2wgcmVhZENvbmZpZ19FbmFibGVfQUkxX0xvdyh0UmlvU3RhdHVzQ29kZSAqc3RhdHVzKSA9IDA7DQorICAgdmlydHVhbCBib29sIHJlYWRDb25maWdfRW5hYmxlX0FJMV9IaWdoKHRSaW9TdGF0dXNDb2RlICpzdGF0dXMpID0gMDsNCisgICB2aXJ0dWFsIGJvb2wgcmVhZENvbmZpZ19FbmFibGVfQUlBdmVyYWdlZDFfTG93KHRSaW9TdGF0dXNDb2RlICpzdGF0dXMpID0gMDsNCisgICB2aXJ0dWFsIGJvb2wgcmVhZENvbmZpZ19FbmFibGVfQUlBdmVyYWdlZDFfSGlnaCh0UmlvU3RhdHVzQ29kZSAqc3RhdHVzKSA9IDA7DQorICAgdmlydHVhbCBib29sIHJlYWRDb25maWdfRW5hYmxlX0FjY3VtdWxhdG9yMCh0UmlvU3RhdHVzQ29kZSAqc3RhdHVzKSA9IDA7DQorICAgdmlydHVhbCBib29sIHJlYWRDb25maWdfRW5hYmxlX0FjY3VtdWxhdG9yMSh0UmlvU3RhdHVzQ29kZSAqc3RhdHVzKSA9IDA7DQorICAgdmlydHVhbCBib29sIHJlYWRDb25maWdfRW5hYmxlX0RJKHRSaW9TdGF0dXNDb2RlICpzdGF0dXMpID0gMDsNCisgICB2aXJ0dWFsIGJvb2wgcmVhZENvbmZpZ19FbmFibGVfQW5hbG9nVHJpZ2dlcnModFJpb1N0YXR1c0NvZGUgKnN0YXR1cykgPSAwOw0KKyAgIHZpcnR1YWwgYm9vbCByZWFkQ29uZmlnX0VuYWJsZV9Db3VudGVyc19Mb3codFJpb1N0YXR1c0NvZGUgKnN0YXR1cykgPSAwOw0KKyAgIHZpcnR1YWwgYm9vbCByZWFkQ29uZmlnX0VuYWJsZV9Db3VudGVyc19IaWdoKHRSaW9TdGF0dXNDb2RlICpzdGF0dXMpID0gMDsNCisgICB2aXJ0dWFsIGJvb2wgcmVhZENvbmZpZ19FbmFibGVfQ291bnRlclRpbWVyc19Mb3codFJpb1N0YXR1c0NvZGUgKnN0YXR1cykgPSAwOw0KKyAgIHZpcnR1YWwgYm9vbCByZWFkQ29uZmlnX0VuYWJsZV9Db3VudGVyVGltZXJzX0hpZ2godFJpb1N0YXR1c0NvZGUgKnN0YXR1cykgPSAwOw0KKyAgIHZpcnR1YWwgYm9vbCByZWFkQ29uZmlnX0VuYWJsZV9FbmNvZGVycyh0UmlvU3RhdHVzQ29kZSAqc3RhdHVzKSA9IDA7DQorICAgdmlydHVhbCBib29sIHJlYWRDb25maWdfRW5hYmxlX0VuY29kZXJUaW1lcnModFJpb1N0YXR1c0NvZGUgKnN0YXR1cykgPSAwOw0KKyAgIHZpcnR1YWwgYm9vbCByZWFkQ29uZmlnX0V4dGVybmFsQ2xvY2sodFJpb1N0YXR1c0NvZGUgKnN0YXR1cykgPSAwOw0KKw0KKw0KKyAgIHR5cGVkZWYgZW51bQ0KKyAgIHsNCisgICAgICBrTnVtRXh0ZXJuYWxUcmlnZ2Vyc0VsZW1lbnRzID0gNCwNCisgICB9IHRFeHRlcm5hbFRyaWdnZXJzX0lmYWNlQ29uc3RhbnRzOw0KKw0KKyAgIHZpcnR1YWwgdm9pZCB3cml0ZUV4dGVybmFsVHJpZ2dlcnModW5zaWduZWQgY2hhciBiaXRmaWVsZF9pbmRleCwgdEV4dGVybmFsVHJpZ2dlcnMgdmFsdWUsIHRSaW9TdGF0dXNDb2RlICpzdGF0dXMpID0gMDsNCisgICB2aXJ0dWFsIHZvaWQgd3JpdGVFeHRlcm5hbFRyaWdnZXJzX0V4dGVybmFsQ2xvY2tTb3VyY2VfQ2hhbm5lbCh1bnNpZ25lZCBjaGFyIGJpdGZpZWxkX2luZGV4LCB1bnNpZ25lZCBjaGFyIHZhbHVlLCB0UmlvU3RhdHVzQ29kZSAqc3RhdHVzKSA9IDA7DQorICAgdmlydHVhbCB2b2lkIHdyaXRlRXh0ZXJuYWxUcmlnZ2Vyc19FeHRlcm5hbENsb2NrU291cmNlX01vZHVsZSh1bnNpZ25lZCBjaGFyIGJpdGZpZWxkX2luZGV4LCB1bnNpZ25lZCBjaGFyIHZhbHVlLCB0UmlvU3RhdHVzQ29kZSAqc3RhdHVzKSA9IDA7DQorICAgdmlydHVhbCB2b2lkIHdyaXRlRXh0ZXJuYWxUcmlnZ2Vyc19FeHRlcm5hbENsb2NrU291cmNlX0FuYWxvZ1RyaWdnZXIodW5zaWduZWQgY2hhciBiaXRmaWVsZF9pbmRleCwgYm9vbCB2YWx1ZSwgdFJpb1N0YXR1c0NvZGUgKnN0YXR1cykgPSAwOw0KKyAgIHZpcnR1YWwgdm9pZCB3cml0ZUV4dGVybmFsVHJpZ2dlcnNfUmlzaW5nRWRnZSh1bnNpZ25lZCBjaGFyIGJpdGZpZWxkX2luZGV4LCBib29sIHZhbHVlLCB0UmlvU3RhdHVzQ29kZSAqc3RhdHVzKSA9IDA7DQorICAgdmlydHVhbCB2b2lkIHdyaXRlRXh0ZXJuYWxUcmlnZ2Vyc19GYWxsaW5nRWRnZSh1bnNpZ25lZCBjaGFyIGJpdGZpZWxkX2luZGV4LCBib29sIHZhbHVlLCB0UmlvU3RhdHVzQ29kZSAqc3RhdHVzKSA9IDA7DQorICAgdmlydHVhbCB0RXh0ZXJuYWxUcmlnZ2VycyByZWFkRXh0ZXJuYWxUcmlnZ2Vycyh1bnNpZ25lZCBjaGFyIGJpdGZpZWxkX2luZGV4LCB0UmlvU3RhdHVzQ29kZSAqc3RhdHVzKSA9IDA7DQorICAgdmlydHVhbCB1bnNpZ25lZCBjaGFyIHJlYWRFeHRlcm5hbFRyaWdnZXJzX0V4dGVybmFsQ2xvY2tTb3VyY2VfQ2hhbm5lbCh1bnNpZ25lZCBjaGFyIGJpdGZpZWxkX2luZGV4LCB0UmlvU3RhdHVzQ29kZSAqc3RhdHVzKSA9IDA7DQorICAgdmlydHVhbCB1bnNpZ25lZCBjaGFyIHJlYWRFeHRlcm5hbFRyaWdnZXJzX0V4dGVybmFsQ2xvY2tTb3VyY2VfTW9kdWxlKHVuc2lnbmVkIGNoYXIgYml0ZmllbGRfaW5kZXgsIHRSaW9TdGF0dXNDb2RlICpzdGF0dXMpID0gMDsNCisgICB2aXJ0dWFsIGJvb2wgcmVhZEV4dGVybmFsVHJpZ2dlcnNfRXh0ZXJuYWxDbG9ja1NvdXJjZV9BbmFsb2dUcmlnZ2VyKHVuc2lnbmVkIGNoYXIgYml0ZmllbGRfaW5kZXgsIHRSaW9TdGF0dXNDb2RlICpzdGF0dXMpID0gMDsNCisgICB2aXJ0dWFsIGJvb2wgcmVhZEV4dGVybmFsVHJpZ2dlcnNfUmlzaW5nRWRnZSh1bnNpZ25lZCBjaGFyIGJpdGZpZWxkX2luZGV4LCB0UmlvU3RhdHVzQ29kZSAqc3RhdHVzKSA9IDA7DQorICAgdmlydHVhbCBib29sIHJlYWRFeHRlcm5hbFRyaWdnZXJzX0ZhbGxpbmdFZGdlKHVuc2lnbmVkIGNoYXIgYml0ZmllbGRfaW5kZXgsIHRSaW9TdGF0dXNDb2RlICpzdGF0dXMpID0gMDsNCisNCisNCisNCisNCitwcml2YXRlOg0KKyAgIHRETUEoY29uc3QgdERNQSYpOw0KKyAgIHZvaWQgb3BlcmF0b3I9KGNvbnN0IHRETUEmKTsNCit9Ow0KKw0KK30NCit9DQorDQorI2VuZGlmIC8vIF9fbkZSQ18yMDEyXzFfNl80X0RNQV9oX18NCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9DaGlwT2JqZWN0L3RETUFNYW5hZ2VyLmggYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9DaGlwT2JqZWN0L3RETUFNYW5hZ2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDFmMjk1MAotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0NoaXBPYmplY3QvdERNQU1hbmFnZXIuaApAQCAtMCwwICsxLDQ3IEBACisvLyBDbGFzcyBmb3IgaGFuZGxpbmcgRE1BIHRyYW5zdGVycy4NCisvLyBDb3B5cmlnaHQgKGMpIE5hdGlvbmFsIEluc3RydW1lbnRzIDIwMDguICBBbGwgUmlnaHRzIFJlc2VydmVkLg0KKw0KKyNpZm5kZWYgX190RE1BTWFuYWdlcl9oX18NCisjZGVmaW5lIF9fdERNQU1hbmFnZXJfaF9fDQorDQorI2luY2x1ZGUgIk5pUmlvLmgiDQorI2luY2x1ZGUgInRTeXN0ZW0uaCINCisNCituYW1lc3BhY2UgbkZQR0ENCit7DQorLy8gVE9ETzogSW1wbGVtZW50IERNQSBNYW5hZ2VyDQorLyoNCitjbGFzcyB0RE1BTWFuYWdlciA6IHB1YmxpYyB0U3lzdGVtDQorew0KK3B1YmxpYzoNCisgICB0RE1BTWFuYWdlcih0TklSSU9fdTMyIGRtYUNoYW5uZWwsIHROSVJJT191MzIgaG9zdEJ1ZmZlclNpemUsIHRSaW9TdGF0dXNDb2RlICpzdGF0dXMpOw0KKyAgIH50RE1BTWFuYWdlcigpOw0KKyAgIHZvaWQgc3RhcnQodFJpb1N0YXR1c0NvZGUgKnN0YXR1cyk7DQorICAgdm9pZCBzdG9wKHRSaW9TdGF0dXNDb2RlICpzdGF0dXMpOw0KKyAgIGJvb2wgaXNTdGFydGVkKCkge3JldHVybiBfc3RhcnRlZDt9DQorICAgdm9pZCByZWFkKA0KKyAgICAgIHROSVJJT191MzIqICAgICAgYnVmLA0KKyAgICAgIHROSVJJT191MzIgICAgICAgbnVtLA0KKyAgICAgIHROSVJJT191MzIgICAgICAgdGltZW91dCwNCisgICAgICB0TklSSU9fdTMyKiAgICAgIHJlYWQsDQorICAgICAgdE5JUklPX3UzMiogICAgICByZW1haW5pbmcsDQorICAgICAgdFJpb1N0YXR1c0NvZGUgKnN0YXR1cyk7DQorICAgdm9pZCB3cml0ZSgNCisgICAgICB0TklSSU9fdTMyKiAgICAgIGJ1ZiwNCisgICAgICB0TklSSU9fdTMyICAgICAgIG51bSwNCisgICAgICB0TklSSU9fdTMyICAgICAgIHRpbWVvdXQsDQorICAgICAgdE5JUklPX3UzMiogICAgICByZW1haW5pbmcsDQorICAgICAgdFJpb1N0YXR1c0NvZGUgKnN0YXR1cyk7DQorcHJpdmF0ZToNCisgICBib29sIF9zdGFydGVkOw0KKyAgIHROSVJJT191MzIgX2RtYUNoYW5uZWw7DQorICAgdE5JUklPX3UzMiBfaG9zdEJ1ZmZlclNpemU7DQorICAgdERNQUNoYW5uZWxEZXNjcmlwdG9yIGNvbnN0ICpfZG1hQ2hhbm5lbERlc2NyaXB0b3I7DQorDQorfTsNCisqLw0KK30NCisNCisNCisjZW5kaWYgLy8gX190RE1BTWFuYWdlcl9oX18NCisNCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9DaGlwT2JqZWN0L3RFbmNvZGVyLmggYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9DaGlwT2JqZWN0L3RFbmNvZGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTc0OGZlNgotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0NoaXBPYmplY3QvdEVuY29kZXIuaApAQCAtMCwwICsxLDE2NyBAQAorLy8gQ29weXJpZ2h0IChjKSBOYXRpb25hbCBJbnN0cnVtZW50cyAyMDA4LiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4NCisvLyBEbyBOb3QgRWRpdC4uLiB0aGlzIGZpbGUgaXMgZ2VuZXJhdGVkIQ0KKw0KKyNpZm5kZWYgX19uRlJDXzIwMTJfMV82XzRfRW5jb2Rlcl9oX18NCisjZGVmaW5lIF9fbkZSQ18yMDEyXzFfNl80X0VuY29kZXJfaF9fDQorDQorI2luY2x1ZGUgInRTeXN0ZW1JbnRlcmZhY2UuaCINCisNCituYW1lc3BhY2UgbkZQR0ENCit7DQorbmFtZXNwYWNlIG5GUkNfMjAxMl8xXzZfNA0KK3sNCisNCitjbGFzcyB0RW5jb2Rlcg0KK3sNCitwdWJsaWM6DQorICAgdEVuY29kZXIoKXt9DQorICAgdmlydHVhbCB+dEVuY29kZXIoKXt9DQorDQorICAgdmlydHVhbCB0U3lzdGVtSW50ZXJmYWNlKiBnZXRTeXN0ZW1JbnRlcmZhY2UoKSA9IDA7DQorICAgc3RhdGljIHRFbmNvZGVyKiBjcmVhdGUodW5zaWduZWQgY2hhciBzeXNfaW5kZXgsIHRSaW9TdGF0dXNDb2RlICpzdGF0dXMpOw0KKyAgIHZpcnR1YWwgdW5zaWduZWQgY2hhciBnZXRTeXN0ZW1JbmRleCgpID0gMDsNCisNCisNCisgICB0eXBlZGVmIGVudW0NCisgICB7DQorICAgICAga051bVN5c3RlbXMgPSA0LA0KKyAgIH0gdElmYWNlQ29uc3RhbnRzOw0KKw0KKyAgIHR5cGVkZWYNCisgICB1bmlvbnsNCisgICAgICBzdHJ1Y3R7DQorICAgICAgICAgdW5zaWduZWQgRGlyZWN0aW9uIDogMTsNCisgICAgICAgICBzaWduZWQgVmFsdWUgOiAzMTsNCisgICAgICB9Ow0KKyAgICAgIHN0cnVjdHsNCisgICAgICAgICB1bnNpZ25lZCB2YWx1ZSA6IDMyOw0KKyAgICAgIH07DQorICAgfSB0T3V0cHV0Ow0KKyAgIHR5cGVkZWYNCisgICB1bmlvbnsNCisgICAgICBzdHJ1Y3R7DQorICAgICAgICAgdW5zaWduZWQgQVNvdXJjZV9DaGFubmVsIDogNDsNCisgICAgICAgICB1bnNpZ25lZCBBU291cmNlX01vZHVsZSA6IDE7DQorICAgICAgICAgdW5zaWduZWQgQVNvdXJjZV9BbmFsb2dUcmlnZ2VyIDogMTsNCisgICAgICAgICB1bnNpZ25lZCBCU291cmNlX0NoYW5uZWwgOiA0Ow0KKyAgICAgICAgIHVuc2lnbmVkIEJTb3VyY2VfTW9kdWxlIDogMTsNCisgICAgICAgICB1bnNpZ25lZCBCU291cmNlX0FuYWxvZ1RyaWdnZXIgOiAxOw0KKyAgICAgICAgIHVuc2lnbmVkIEluZGV4U291cmNlX0NoYW5uZWwgOiA0Ow0KKyAgICAgICAgIHVuc2lnbmVkIEluZGV4U291cmNlX01vZHVsZSA6IDE7DQorICAgICAgICAgdW5zaWduZWQgSW5kZXhTb3VyY2VfQW5hbG9nVHJpZ2dlciA6IDE7DQorICAgICAgICAgdW5zaWduZWQgSW5kZXhBY3RpdmVIaWdoIDogMTsNCisgICAgICAgICB1bnNpZ25lZCBSZXZlcnNlIDogMTsNCisgICAgICAgICB1bnNpZ25lZCBFbmFibGUgOiAxOw0KKyAgICAgIH07DQorICAgICAgc3RydWN0ew0KKyAgICAgICAgIHVuc2lnbmVkIHZhbHVlIDogMjE7DQorICAgICAgfTsNCisgICB9IHRDb25maWc7DQorICAgdHlwZWRlZg0KKyAgIHVuaW9uew0KKyAgICAgIHN0cnVjdHsNCisgICAgICAgICB1bnNpZ25lZCBQZXJpb2QgOiAyMzsNCisgICAgICAgICBzaWduZWQgQ291bnQgOiA4Ow0KKyAgICAgICAgIHVuc2lnbmVkIFN0YWxsZWQgOiAxOw0KKyAgICAgIH07DQorICAgICAgc3RydWN0ew0KKyAgICAgICAgIHVuc2lnbmVkIHZhbHVlIDogMzI7DQorICAgICAgfTsNCisgICB9IHRUaW1lck91dHB1dDsNCisgICB0eXBlZGVmDQorICAgdW5pb257DQorICAgICAgc3RydWN0ew0KKyAgICAgICAgIHVuc2lnbmVkIFN0YWxsUGVyaW9kIDogMjQ7DQorICAgICAgICAgdW5zaWduZWQgQXZlcmFnZVNpemUgOiA3Ow0KKyAgICAgICAgIHVuc2lnbmVkIFVwZGF0ZVdoZW5FbXB0eSA6IDE7DQorICAgICAgfTsNCisgICAgICBzdHJ1Y3R7DQorICAgICAgICAgdW5zaWduZWQgdmFsdWUgOiAzMjsNCisgICAgICB9Ow0KKyAgIH0gdFRpbWVyQ29uZmlnOw0KKw0KKw0KKyAgIHR5cGVkZWYgZW51bQ0KKyAgIHsNCisgICB9IHRPdXRwdXRfSWZhY2VDb25zdGFudHM7DQorDQorICAgdmlydHVhbCB0T3V0cHV0IHJlYWRPdXRwdXQodFJpb1N0YXR1c0NvZGUgKnN0YXR1cykgPSAwOw0KKyAgIHZpcnR1YWwgYm9vbCByZWFkT3V0cHV0X0RpcmVjdGlvbih0UmlvU3RhdHVzQ29kZSAqc3RhdHVzKSA9IDA7DQorICAgdmlydHVhbCBzaWduZWQgaW50IHJlYWRPdXRwdXRfVmFsdWUodFJpb1N0YXR1c0NvZGUgKnN0YXR1cykgPSAwOw0KKw0KKw0KKyAgIHR5cGVkZWYgZW51bQ0KKyAgIHsNCisgICB9IHRDb25maWdfSWZhY2VDb25zdGFudHM7DQorDQorICAgdmlydHVhbCB2b2lkIHdyaXRlQ29uZmlnKHRDb25maWcgdmFsdWUsIHRSaW9TdGF0dXNDb2RlICpzdGF0dXMpID0gMDsNCisgICB2aXJ0dWFsIHZvaWQgd3JpdGVDb25maWdfQVNvdXJjZV9DaGFubmVsKHVuc2lnbmVkIGNoYXIgdmFsdWUsIHRSaW9TdGF0dXNDb2RlICpzdGF0dXMpID0gMDsNCisgICB2aXJ0dWFsIHZvaWQgd3JpdGVDb25maWdfQVNvdXJjZV9Nb2R1bGUodW5zaWduZWQgY2hhciB2YWx1ZSwgdFJpb1N0YXR1c0NvZGUgKnN0YXR1cykgPSAwOw0KKyAgIHZpcnR1YWwgdm9pZCB3cml0ZUNvbmZpZ19BU291cmNlX0FuYWxvZ1RyaWdnZXIoYm9vbCB2YWx1ZSwgdFJpb1N0YXR1c0NvZGUgKnN0YXR1cykgPSAwOw0KKyAgIHZpcnR1YWwgdm9pZCB3cml0ZUNvbmZpZ19CU291cmNlX0NoYW5uZWwodW5zaWduZWQgY2hhciB2YWx1ZSwgdFJpb1N0YXR1c0NvZGUgKnN0YXR1cykgPSAwOw0KKyAgIHZpcnR1YWwgdm9pZCB3cml0ZUNvbmZpZ19CU291cmNlX01vZHVsZSh1bnNpZ25lZCBjaGFyIHZhbHVlLCB0UmlvU3RhdHVzQ29kZSAqc3RhdHVzKSA9IDA7DQorICAgdmlydHVhbCB2b2lkIHdyaXRlQ29uZmlnX0JTb3VyY2VfQW5hbG9nVHJpZ2dlcihib29sIHZhbHVlLCB0UmlvU3RhdHVzQ29kZSAqc3RhdHVzKSA9IDA7DQorICAgdmlydHVhbCB2b2lkIHdyaXRlQ29uZmlnX0luZGV4U291cmNlX0NoYW5uZWwodW5zaWduZWQgY2hhciB2YWx1ZSwgdFJpb1N0YXR1c0NvZGUgKnN0YXR1cykgPSAwOw0KKyAgIHZpcnR1YWwgdm9pZCB3cml0ZUNvbmZpZ19JbmRleFNvdXJjZV9Nb2R1bGUodW5zaWduZWQgY2hhciB2YWx1ZSwgdFJpb1N0YXR1c0NvZGUgKnN0YXR1cykgPSAwOw0KKyAgIHZpcnR1YWwgdm9pZCB3cml0ZUNvbmZpZ19JbmRleFNvdXJjZV9BbmFsb2dUcmlnZ2VyKGJvb2wgdmFsdWUsIHRSaW9TdGF0dXNDb2RlICpzdGF0dXMpID0gMDsNCisgICB2aXJ0dWFsIHZvaWQgd3JpdGVDb25maWdfSW5kZXhBY3RpdmVIaWdoKGJvb2wgdmFsdWUsIHRSaW9TdGF0dXNDb2RlICpzdGF0dXMpID0gMDsNCisgICB2aXJ0dWFsIHZvaWQgd3JpdGVDb25maWdfUmV2ZXJzZShib29sIHZhbHVlLCB0UmlvU3RhdHVzQ29kZSAqc3RhdHVzKSA9IDA7DQorICAgdmlydHVhbCB2b2lkIHdyaXRlQ29uZmlnX0VuYWJsZShib29sIHZhbHVlLCB0UmlvU3RhdHVzQ29kZSAqc3RhdHVzKSA9IDA7DQorICAgdmlydHVhbCB0Q29uZmlnIHJlYWRDb25maWcodFJpb1N0YXR1c0NvZGUgKnN0YXR1cykgPSAwOw0KKyAgIHZpcnR1YWwgdW5zaWduZWQgY2hhciByZWFkQ29uZmlnX0FTb3VyY2VfQ2hhbm5lbCh0UmlvU3RhdHVzQ29kZSAqc3RhdHVzKSA9IDA7DQorICAgdmlydHVhbCB1bnNpZ25lZCBjaGFyIHJlYWRDb25maWdfQVNvdXJjZV9Nb2R1bGUodFJpb1N0YXR1c0NvZGUgKnN0YXR1cykgPSAwOw0KKyAgIHZpcnR1YWwgYm9vbCByZWFkQ29uZmlnX0FTb3VyY2VfQW5hbG9nVHJpZ2dlcih0UmlvU3RhdHVzQ29kZSAqc3RhdHVzKSA9IDA7DQorICAgdmlydHVhbCB1bnNpZ25lZCBjaGFyIHJlYWRDb25maWdfQlNvdXJjZV9DaGFubmVsKHRSaW9TdGF0dXNDb2RlICpzdGF0dXMpID0gMDsNCisgICB2aXJ0dWFsIHVuc2lnbmVkIGNoYXIgcmVhZENvbmZpZ19CU291cmNlX01vZHVsZSh0UmlvU3RhdHVzQ29kZSAqc3RhdHVzKSA9IDA7DQorICAgdmlydHVhbCBib29sIHJlYWRDb25maWdfQlNvdXJjZV9BbmFsb2dUcmlnZ2VyKHRSaW9TdGF0dXNDb2RlICpzdGF0dXMpID0gMDsNCisgICB2aXJ0dWFsIHVuc2lnbmVkIGNoYXIgcmVhZENvbmZpZ19JbmRleFNvdXJjZV9DaGFubmVsKHRSaW9TdGF0dXNDb2RlICpzdGF0dXMpID0gMDsNCisgICB2aXJ0dWFsIHVuc2lnbmVkIGNoYXIgcmVhZENvbmZpZ19JbmRleFNvdXJjZV9Nb2R1bGUodFJpb1N0YXR1c0NvZGUgKnN0YXR1cykgPSAwOw0KKyAgIHZpcnR1YWwgYm9vbCByZWFkQ29uZmlnX0luZGV4U291cmNlX0FuYWxvZ1RyaWdnZXIodFJpb1N0YXR1c0NvZGUgKnN0YXR1cykgPSAwOw0KKyAgIHZpcnR1YWwgYm9vbCByZWFkQ29uZmlnX0luZGV4QWN0aXZlSGlnaCh0UmlvU3RhdHVzQ29kZSAqc3RhdHVzKSA9IDA7DQorICAgdmlydHVhbCBib29sIHJlYWRDb25maWdfUmV2ZXJzZSh0UmlvU3RhdHVzQ29kZSAqc3RhdHVzKSA9IDA7DQorICAgdmlydHVhbCBib29sIHJlYWRDb25maWdfRW5hYmxlKHRSaW9TdGF0dXNDb2RlICpzdGF0dXMpID0gMDsNCisNCisNCisgICB0eXBlZGVmIGVudW0NCisgICB7DQorICAgfSB0UmVzZXRfSWZhY2VDb25zdGFudHM7DQorDQorICAgdmlydHVhbCB2b2lkIHN0cm9iZVJlc2V0KHRSaW9TdGF0dXNDb2RlICpzdGF0dXMpID0gMDsNCisNCisNCisgICB0eXBlZGVmIGVudW0NCisgICB7DQorICAgfSB0VGltZXJPdXRwdXRfSWZhY2VDb25zdGFudHM7DQorDQorICAgdmlydHVhbCB0VGltZXJPdXRwdXQgcmVhZFRpbWVyT3V0cHV0KHRSaW9TdGF0dXNDb2RlICpzdGF0dXMpID0gMDsNCisgICB2aXJ0dWFsIHVuc2lnbmVkIGludCByZWFkVGltZXJPdXRwdXRfUGVyaW9kKHRSaW9TdGF0dXNDb2RlICpzdGF0dXMpID0gMDsNCisgICB2aXJ0dWFsIHNpZ25lZCBjaGFyIHJlYWRUaW1lck91dHB1dF9Db3VudCh0UmlvU3RhdHVzQ29kZSAqc3RhdHVzKSA9IDA7DQorICAgdmlydHVhbCBib29sIHJlYWRUaW1lck91dHB1dF9TdGFsbGVkKHRSaW9TdGF0dXNDb2RlICpzdGF0dXMpID0gMDsNCisNCisNCisgICB0eXBlZGVmIGVudW0NCisgICB7DQorICAgfSB0VGltZXJDb25maWdfSWZhY2VDb25zdGFudHM7DQorDQorICAgdmlydHVhbCB2b2lkIHdyaXRlVGltZXJDb25maWcodFRpbWVyQ29uZmlnIHZhbHVlLCB0UmlvU3RhdHVzQ29kZSAqc3RhdHVzKSA9IDA7DQorICAgdmlydHVhbCB2b2lkIHdyaXRlVGltZXJDb25maWdfU3RhbGxQZXJpb2QodW5zaWduZWQgaW50IHZhbHVlLCB0UmlvU3RhdHVzQ29kZSAqc3RhdHVzKSA9IDA7DQorICAgdmlydHVhbCB2b2lkIHdyaXRlVGltZXJDb25maWdfQXZlcmFnZVNpemUodW5zaWduZWQgY2hhciB2YWx1ZSwgdFJpb1N0YXR1c0NvZGUgKnN0YXR1cykgPSAwOw0KKyAgIHZpcnR1YWwgdm9pZCB3cml0ZVRpbWVyQ29uZmlnX1VwZGF0ZVdoZW5FbXB0eShib29sIHZhbHVlLCB0UmlvU3RhdHVzQ29kZSAqc3RhdHVzKSA9IDA7DQorICAgdmlydHVhbCB0VGltZXJDb25maWcgcmVhZFRpbWVyQ29uZmlnKHRSaW9TdGF0dXNDb2RlICpzdGF0dXMpID0gMDsNCisgICB2aXJ0dWFsIHVuc2lnbmVkIGludCByZWFkVGltZXJDb25maWdfU3RhbGxQZXJpb2QodFJpb1N0YXR1c0NvZGUgKnN0YXR1cykgPSAwOw0KKyAgIHZpcnR1YWwgdW5zaWduZWQgY2hhciByZWFkVGltZXJDb25maWdfQXZlcmFnZVNpemUodFJpb1N0YXR1c0NvZGUgKnN0YXR1cykgPSAwOw0KKyAgIHZpcnR1YWwgYm9vbCByZWFkVGltZXJDb25maWdfVXBkYXRlV2hlbkVtcHR5KHRSaW9TdGF0dXNDb2RlICpzdGF0dXMpID0gMDsNCisNCisNCisNCisNCisNCitwcml2YXRlOg0KKyAgIHRFbmNvZGVyKGNvbnN0IHRFbmNvZGVyJik7DQorICAgdm9pZCBvcGVyYXRvcj0oY29uc3QgdEVuY29kZXImKTsNCit9Ow0KKw0KK30NCit9DQorDQorI2VuZGlmIC8vIF9fbkZSQ18yMDEyXzFfNl80X0VuY29kZXJfaF9fDQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvQ2hpcE9iamVjdC90R2xvYmFsLmggYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9DaGlwT2JqZWN0L3RHbG9iYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTdhZWIxCi0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvQ2hpcE9iamVjdC90R2xvYmFsLmgKQEAgLTAsMCArMSw3MCBAQAorLy8gQ29weXJpZ2h0IChjKSBOYXRpb25hbCBJbnN0cnVtZW50cyAyMDA4LiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4NCisvLyBEbyBOb3QgRWRpdC4uLiB0aGlzIGZpbGUgaXMgZ2VuZXJhdGVkIQ0KKw0KKyNpZm5kZWYgX19uRlJDXzIwMTJfMV82XzRfR2xvYmFsX2hfXw0KKyNkZWZpbmUgX19uRlJDXzIwMTJfMV82XzRfR2xvYmFsX2hfXw0KKw0KKyNpbmNsdWRlICJ0U3lzdGVtSW50ZXJmYWNlLmgiDQorDQorbmFtZXNwYWNlIG5GUEdBDQorew0KK25hbWVzcGFjZSBuRlJDXzIwMTJfMV82XzQNCit7DQorDQorY2xhc3MgdEdsb2JhbA0KK3sNCitwdWJsaWM6DQorICAgdEdsb2JhbCgpe30NCisgICB2aXJ0dWFsIH50R2xvYmFsKCl7fQ0KKw0KKyAgIHZpcnR1YWwgdFN5c3RlbUludGVyZmFjZSogZ2V0U3lzdGVtSW50ZXJmYWNlKCkgPSAwOw0KKyAgIHN0YXRpYyB0R2xvYmFsKiBjcmVhdGUodFJpb1N0YXR1c0NvZGUgKnN0YXR1cyk7DQorDQorICAgdHlwZWRlZiBlbnVtDQorICAgew0KKyAgICAgIGtOdW1TeXN0ZW1zID0gMSwNCisgICB9IHRJZmFjZUNvbnN0YW50czsNCisNCisNCisNCisNCisgICB0eXBlZGVmIGVudW0NCisgICB7DQorICAgfSB0VmVyc2lvbl9JZmFjZUNvbnN0YW50czsNCisNCisgICB2aXJ0dWFsIHVuc2lnbmVkIHNob3J0IHJlYWRWZXJzaW9uKHRSaW9TdGF0dXNDb2RlICpzdGF0dXMpID0gMDsNCisNCisNCisgICB0eXBlZGVmIGVudW0NCisgICB7DQorICAgfSB0RlBHQV9MRURfSWZhY2VDb25zdGFudHM7DQorDQorICAgdmlydHVhbCB2b2lkIHdyaXRlRlBHQV9MRUQoYm9vbCB2YWx1ZSwgdFJpb1N0YXR1c0NvZGUgKnN0YXR1cykgPSAwOw0KKyAgIHZpcnR1YWwgYm9vbCByZWFkRlBHQV9MRUQodFJpb1N0YXR1c0NvZGUgKnN0YXR1cykgPSAwOw0KKw0KKw0KKyAgIHR5cGVkZWYgZW51bQ0KKyAgIHsNCisgICB9IHRMb2NhbFRpbWVfSWZhY2VDb25zdGFudHM7DQorDQorICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgcmVhZExvY2FsVGltZSh0UmlvU3RhdHVzQ29kZSAqc3RhdHVzKSA9IDA7DQorDQorDQorICAgdHlwZWRlZiBlbnVtDQorICAgew0KKyAgIH0gdFJldmlzaW9uX0lmYWNlQ29uc3RhbnRzOw0KKw0KKyAgIHZpcnR1YWwgdW5zaWduZWQgaW50IHJlYWRSZXZpc2lvbih0UmlvU3RhdHVzQ29kZSAqc3RhdHVzKSA9IDA7DQorDQorDQorDQorDQorcHJpdmF0ZToNCisgICB0R2xvYmFsKGNvbnN0IHRHbG9iYWwmKTsNCisgICB2b2lkIG9wZXJhdG9yPShjb25zdCB0R2xvYmFsJik7DQorfTsNCisNCit9DQorfQ0KKw0KKyNlbmRpZiAvLyBfX25GUkNfMjAxMl8xXzZfNF9HbG9iYWxfaF9fDQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvQ2hpcE9iamVjdC90SW50ZXJydXB0LmggYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9DaGlwT2JqZWN0L3RJbnRlcnJ1cHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMTgxZmIzCi0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvQ2hpcE9iamVjdC90SW50ZXJydXB0LmgKQEAgLTAsMCArMSw4NCBAQAorLy8gQ29weXJpZ2h0IChjKSBOYXRpb25hbCBJbnN0cnVtZW50cyAyMDA4LiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4NCisvLyBEbyBOb3QgRWRpdC4uLiB0aGlzIGZpbGUgaXMgZ2VuZXJhdGVkIQ0KKw0KKyNpZm5kZWYgX19uRlJDXzIwMTJfMV82XzRfSW50ZXJydXB0X2hfXw0KKyNkZWZpbmUgX19uRlJDXzIwMTJfMV82XzRfSW50ZXJydXB0X2hfXw0KKw0KKyNpbmNsdWRlICJ0U3lzdGVtSW50ZXJmYWNlLmgiDQorDQorbmFtZXNwYWNlIG5GUEdBDQorew0KK25hbWVzcGFjZSBuRlJDXzIwMTJfMV82XzQNCit7DQorDQorY2xhc3MgdEludGVycnVwdA0KK3sNCitwdWJsaWM6DQorICAgdEludGVycnVwdCgpe30NCisgICB2aXJ0dWFsIH50SW50ZXJydXB0KCl7fQ0KKw0KKyAgIHZpcnR1YWwgdFN5c3RlbUludGVyZmFjZSogZ2V0U3lzdGVtSW50ZXJmYWNlKCkgPSAwOw0KKyAgIHN0YXRpYyB0SW50ZXJydXB0KiBjcmVhdGUodW5zaWduZWQgY2hhciBzeXNfaW5kZXgsIHRSaW9TdGF0dXNDb2RlICpzdGF0dXMpOw0KKyAgIHZpcnR1YWwgdW5zaWduZWQgY2hhciBnZXRTeXN0ZW1JbmRleCgpID0gMDsNCisNCisNCisgICB0eXBlZGVmIGVudW0NCisgICB7DQorICAgICAga051bVN5c3RlbXMgPSA4LA0KKyAgIH0gdElmYWNlQ29uc3RhbnRzOw0KKw0KKyAgIHR5cGVkZWYNCisgICB1bmlvbnsNCisgICAgICBzdHJ1Y3R7DQorICAgICAgICAgdW5zaWduZWQgU291cmNlX0NoYW5uZWwgOiA0Ow0KKyAgICAgICAgIHVuc2lnbmVkIFNvdXJjZV9Nb2R1bGUgOiAxOw0KKyAgICAgICAgIHVuc2lnbmVkIFNvdXJjZV9BbmFsb2dUcmlnZ2VyIDogMTsNCisgICAgICAgICB1bnNpZ25lZCBSaXNpbmdFZGdlIDogMTsNCisgICAgICAgICB1bnNpZ25lZCBGYWxsaW5nRWRnZSA6IDE7DQorICAgICAgICAgdW5zaWduZWQgV2FpdEZvckFjayA6IDE7DQorICAgICAgfTsNCisgICAgICBzdHJ1Y3R7DQorICAgICAgICAgdW5zaWduZWQgdmFsdWUgOiA5Ow0KKyAgICAgIH07DQorICAgfSB0Q29uZmlnOw0KKw0KKw0KKyAgIHR5cGVkZWYgZW51bQ0KKyAgIHsNCisgICB9IHRUaW1lU3RhbXBfSWZhY2VDb25zdGFudHM7DQorDQorICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgcmVhZFRpbWVTdGFtcCh0UmlvU3RhdHVzQ29kZSAqc3RhdHVzKSA9IDA7DQorDQorDQorICAgdHlwZWRlZiBlbnVtDQorICAgew0KKyAgIH0gdENvbmZpZ19JZmFjZUNvbnN0YW50czsNCisNCisgICB2aXJ0dWFsIHZvaWQgd3JpdGVDb25maWcodENvbmZpZyB2YWx1ZSwgdFJpb1N0YXR1c0NvZGUgKnN0YXR1cykgPSAwOw0KKyAgIHZpcnR1YWwgdm9pZCB3cml0ZUNvbmZpZ19Tb3VyY2VfQ2hhbm5lbCh1bnNpZ25lZCBjaGFyIHZhbHVlLCB0UmlvU3RhdHVzQ29kZSAqc3RhdHVzKSA9IDA7DQorICAgdmlydHVhbCB2b2lkIHdyaXRlQ29uZmlnX1NvdXJjZV9Nb2R1bGUodW5zaWduZWQgY2hhciB2YWx1ZSwgdFJpb1N0YXR1c0NvZGUgKnN0YXR1cykgPSAwOw0KKyAgIHZpcnR1YWwgdm9pZCB3cml0ZUNvbmZpZ19Tb3VyY2VfQW5hbG9nVHJpZ2dlcihib29sIHZhbHVlLCB0UmlvU3RhdHVzQ29kZSAqc3RhdHVzKSA9IDA7DQorICAgdmlydHVhbCB2b2lkIHdyaXRlQ29uZmlnX1Jpc2luZ0VkZ2UoYm9vbCB2YWx1ZSwgdFJpb1N0YXR1c0NvZGUgKnN0YXR1cykgPSAwOw0KKyAgIHZpcnR1YWwgdm9pZCB3cml0ZUNvbmZpZ19GYWxsaW5nRWRnZShib29sIHZhbHVlLCB0UmlvU3RhdHVzQ29kZSAqc3RhdHVzKSA9IDA7DQorICAgdmlydHVhbCB2b2lkIHdyaXRlQ29uZmlnX1dhaXRGb3JBY2soYm9vbCB2YWx1ZSwgdFJpb1N0YXR1c0NvZGUgKnN0YXR1cykgPSAwOw0KKyAgIHZpcnR1YWwgdENvbmZpZyByZWFkQ29uZmlnKHRSaW9TdGF0dXNDb2RlICpzdGF0dXMpID0gMDsNCisgICB2aXJ0dWFsIHVuc2lnbmVkIGNoYXIgcmVhZENvbmZpZ19Tb3VyY2VfQ2hhbm5lbCh0UmlvU3RhdHVzQ29kZSAqc3RhdHVzKSA9IDA7DQorICAgdmlydHVhbCB1bnNpZ25lZCBjaGFyIHJlYWRDb25maWdfU291cmNlX01vZHVsZSh0UmlvU3RhdHVzQ29kZSAqc3RhdHVzKSA9IDA7DQorICAgdmlydHVhbCBib29sIHJlYWRDb25maWdfU291cmNlX0FuYWxvZ1RyaWdnZXIodFJpb1N0YXR1c0NvZGUgKnN0YXR1cykgPSAwOw0KKyAgIHZpcnR1YWwgYm9vbCByZWFkQ29uZmlnX1Jpc2luZ0VkZ2UodFJpb1N0YXR1c0NvZGUgKnN0YXR1cykgPSAwOw0KKyAgIHZpcnR1YWwgYm9vbCByZWFkQ29uZmlnX0ZhbGxpbmdFZGdlKHRSaW9TdGF0dXNDb2RlICpzdGF0dXMpID0gMDsNCisgICB2aXJ0dWFsIGJvb2wgcmVhZENvbmZpZ19XYWl0Rm9yQWNrKHRSaW9TdGF0dXNDb2RlICpzdGF0dXMpID0gMDsNCisNCisNCisNCisNCisNCitwcml2YXRlOg0KKyAgIHRJbnRlcnJ1cHQoY29uc3QgdEludGVycnVwdCYpOw0KKyAgIHZvaWQgb3BlcmF0b3I9KGNvbnN0IHRJbnRlcnJ1cHQmKTsNCit9Ow0KKw0KK30NCit9DQorDQorI2VuZGlmIC8vIF9fbkZSQ18yMDEyXzFfNl80X0ludGVycnVwdF9oX18NCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9DaGlwT2JqZWN0L3RJbnRlcnJ1cHRNYW5hZ2VyLmggYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9DaGlwT2JqZWN0L3RJbnRlcnJ1cHRNYW5hZ2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTYyODNmZQotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0NoaXBPYmplY3QvdEludGVycnVwdE1hbmFnZXIuaApAQCAtMCwwICsxLDUwIEBACisvLyBDbGFzcyBmb3IgaGFuZGxpbmcgaW50ZXJydXB0cy4NCisvLyBDb3B5cmlnaHQgKGMpIE5hdGlvbmFsIEluc3RydW1lbnRzIDIwMDguICBBbGwgUmlnaHRzIFJlc2VydmVkLg0KKw0KKyNpZm5kZWYgX190SW50ZXJydXB0TWFuYWdlcl9oX18NCisjZGVmaW5lIF9fdEludGVycnVwdE1hbmFnZXJfaF9fDQorDQorI2luY2x1ZGUgIk5pUmlvLmgiDQorI2luY2x1ZGUgInRTeXN0ZW0uaCINCisjaW5jbHVkZSA8c2VtTGliLmg+DQorDQorbmFtZXNwYWNlIG5GUEdBDQorew0KKw0KK3R5cGVkZWYgdm9pZCAoKnRJbnRlcnJ1cHRIYW5kbGVyKSh1aW50MzJfdCBpbnRlcnJ1cHRBc3NlcnRlZE1hc2ssIHZvaWQgKnBhcmFtKTsNCisNCitjbGFzcyB0SW50ZXJydXB0TWFuYWdlciA6IHB1YmxpYyB0U3lzdGVtDQorew0KK3B1YmxpYzoNCisgICB0SW50ZXJydXB0TWFuYWdlcih1aW50MzJfdCBpbnRlcnJ1cHRNYXNrLCBib29sIHdhdGNoZXIsIHRSaW9TdGF0dXNDb2RlICpzdGF0dXMpOw0KKyAgIH50SW50ZXJydXB0TWFuYWdlcigpOw0KKyAgIHZvaWQgcmVnaXN0ZXJIYW5kbGVyKHRJbnRlcnJ1cHRIYW5kbGVyIGhhbmRsZXIsIHZvaWQgKnBhcmFtLCB0UmlvU3RhdHVzQ29kZSAqc3RhdHVzKTsNCisgICB1aW50MzJfdCB3YXRjaChpbnQzMl90IHRpbWVvdXRJbk1zLCB0UmlvU3RhdHVzQ29kZSAqc3RhdHVzKTsNCisgICB2b2lkIGVuYWJsZSh0UmlvU3RhdHVzQ29kZSAqc3RhdHVzKTsNCisgICB2b2lkIGRpc2FibGUodFJpb1N0YXR1c0NvZGUgKnN0YXR1cyk7DQorICAgYm9vbCBpc0VuYWJsZWQodFJpb1N0YXR1c0NvZGUgKnN0YXR1cyk7DQorcHJpdmF0ZToNCisgICB2b2lkIGhhbmRsZXIoKTsNCisgICBzdGF0aWMgaW50IGhhbmRsZXJXcmFwcGVyKHRJbnRlcnJ1cHRNYW5hZ2VyICpwSW50ZXJydXB0KTsNCisNCisgICB2b2lkIGFja25vd2xlZGdlKHRSaW9TdGF0dXNDb2RlICpzdGF0dXMpOw0KKyAgIHZvaWQgcmVzZXJ2ZSh0UmlvU3RhdHVzQ29kZSAqc3RhdHVzKTsNCisgICB2b2lkIHVucmVzZXJ2ZSh0UmlvU3RhdHVzQ29kZSAqc3RhdHVzKTsNCisgICB0SW50ZXJydXB0SGFuZGxlciBfaGFuZGxlcjsNCisgICB1aW50MzJfdCBfaW50ZXJydXB0TWFzazsNCisgICBpbnQzMl90IF90YXNrSWQ7DQorICAgTmlGcGdhX0lycUNvbnRleHQgX3Jpb0NvbnRleHQ7DQorICAgYm9vbCBfd2F0Y2hlcjsNCisgICBib29sIF9lbmFibGVkOw0KKyAgIHZvaWQgKl91c2VyUGFyYW07DQorDQorICAgLy8gbWFpbnRhaW4gdGhlIGludGVycnVwdHMgdGhhdCBhcmUgYWxyZWFkeSBkZWFsdCB3aXRoLg0KKyAgIHN0YXRpYyB1aW50MzJfdCBfZ2xvYmFsSW50ZXJydXB0TWFzazsNCisgICBzdGF0aWMgU0VNX0lEIF9nbG9iYWxJbnRlcnJ1cHRNYXNrU2VtYXBob3JlOw0KK307DQorDQorfQ0KKw0KKw0KKyNlbmRpZiAvLyBfX3RJbnRlcnJ1cHRNYW5hZ2VyX2hfXw0KKw0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0NoaXBPYmplY3QvdFNQSS5oIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvQ2hpcE9iamVjdC90U1BJLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTQzMDMwNgotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0NoaXBPYmplY3QvdFNQSS5oCkBAIC0wLDAgKzEsMjAwIEBACisvLyBDb3B5cmlnaHQgKGMpIE5hdGlvbmFsIEluc3RydW1lbnRzIDIwMDguICBBbGwgUmlnaHRzIFJlc2VydmVkLg0KKy8vIERvIE5vdCBFZGl0Li4uIHRoaXMgZmlsZSBpcyBnZW5lcmF0ZWQhDQorDQorI2lmbmRlZiBfX25GUkNfMjAxMl8xXzZfNF9TUElfaF9fDQorI2RlZmluZSBfX25GUkNfMjAxMl8xXzZfNF9TUElfaF9fDQorDQorI2luY2x1ZGUgInRTeXN0ZW1JbnRlcmZhY2UuaCINCisNCituYW1lc3BhY2UgbkZQR0ENCit7DQorbmFtZXNwYWNlIG5GUkNfMjAxMl8xXzZfNA0KK3sNCisNCitjbGFzcyB0U1BJDQorew0KK3B1YmxpYzoNCisgICB0U1BJKCl7fQ0KKyAgIHZpcnR1YWwgfnRTUEkoKXt9DQorDQorICAgdmlydHVhbCB0U3lzdGVtSW50ZXJmYWNlKiBnZXRTeXN0ZW1JbnRlcmZhY2UoKSA9IDA7DQorICAgc3RhdGljIHRTUEkqIGNyZWF0ZSh0UmlvU3RhdHVzQ29kZSAqc3RhdHVzKTsNCisNCisgICB0eXBlZGVmIGVudW0NCisgICB7DQorICAgICAga051bVN5c3RlbXMgPSAxLA0KKyAgIH0gdElmYWNlQ29uc3RhbnRzOw0KKw0KKyAgIHR5cGVkZWYNCisgICB1bmlvbnsNCisgICAgICBzdHJ1Y3R7DQorICAgICAgICAgdW5zaWduZWQgUmVjZWl2ZWREYXRhT3ZlcmZsb3cgOiAxOw0KKyAgICAgICAgIHVuc2lnbmVkIElkbGUgOiAxOw0KKyAgICAgIH07DQorICAgICAgc3RydWN0ew0KKyAgICAgICAgIHVuc2lnbmVkIHZhbHVlIDogMjsNCisgICAgICB9Ow0KKyAgIH0gdFN0YXR1czsNCisgICB0eXBlZGVmDQorICAgdW5pb257DQorICAgICAgc3RydWN0ew0KKyAgICAgICAgIHVuc2lnbmVkIEJ1c0JpdFdpZHRoIDogODsNCisgICAgICAgICB1bnNpZ25lZCBDbG9ja0hhbGZQZXJpb2REZWxheSA6IDg7DQorICAgICAgICAgdW5zaWduZWQgTVNCZmlyc3QgOiAxOw0KKyAgICAgICAgIHVuc2lnbmVkIERhdGFPbkZhbGxpbmcgOiAxOw0KKyAgICAgICAgIHVuc2lnbmVkIExhdGNoRmlyc3QgOiAxOw0KKyAgICAgICAgIHVuc2lnbmVkIExhdGNoTGFzdCA6IDE7DQorICAgICAgICAgdW5zaWduZWQgRnJhbWVQb2xhcml0eSA6IDE7DQorICAgICAgICAgdW5zaWduZWQgV3JpdGVPbmx5IDogMTsNCisgICAgICAgICB1bnNpZ25lZCBDbG9ja1BvbGFyaXR5IDogMTsNCisgICAgICB9Ow0KKyAgICAgIHN0cnVjdHsNCisgICAgICAgICB1bnNpZ25lZCB2YWx1ZSA6IDIzOw0KKyAgICAgIH07DQorICAgfSB0Q29uZmlnOw0KKyAgIHR5cGVkZWYNCisgICB1bmlvbnsNCisgICAgICBzdHJ1Y3R7DQorICAgICAgICAgdW5zaWduZWQgU0NMS19DaGFubmVsIDogNDsNCisgICAgICAgICB1bnNpZ25lZCBTQ0xLX01vZHVsZSA6IDE7DQorICAgICAgICAgdW5zaWduZWQgTU9TSV9DaGFubmVsIDogNDsNCisgICAgICAgICB1bnNpZ25lZCBNT1NJX01vZHVsZSA6IDE7DQorICAgICAgICAgdW5zaWduZWQgTUlTT19DaGFubmVsIDogNDsNCisgICAgICAgICB1bnNpZ25lZCBNSVNPX01vZHVsZSA6IDE7DQorICAgICAgICAgdW5zaWduZWQgU1NfQ2hhbm5lbCA6IDQ7DQorICAgICAgICAgdW5zaWduZWQgU1NfTW9kdWxlIDogMTsNCisgICAgICB9Ow0KKyAgICAgIHN0cnVjdHsNCisgICAgICAgICB1bnNpZ25lZCB2YWx1ZSA6IDIwOw0KKyAgICAgIH07DQorICAgfSB0Q2hhbm5lbHM7DQorDQorDQorDQorICAgdHlwZWRlZiBlbnVtDQorICAgew0KKyAgIH0gdFN0YXR1c19JZmFjZUNvbnN0YW50czsNCisNCisgICB2aXJ0dWFsIHRTdGF0dXMgcmVhZFN0YXR1cyh0UmlvU3RhdHVzQ29kZSAqc3RhdHVzKSA9IDA7DQorICAgdmlydHVhbCBib29sIHJlYWRTdGF0dXNfUmVjZWl2ZWREYXRhT3ZlcmZsb3codFJpb1N0YXR1c0NvZGUgKnN0YXR1cykgPSAwOw0KKyAgIHZpcnR1YWwgYm9vbCByZWFkU3RhdHVzX0lkbGUodFJpb1N0YXR1c0NvZGUgKnN0YXR1cykgPSAwOw0KKw0KKw0KKyAgIHR5cGVkZWYgZW51bQ0KKyAgIHsNCisgICB9IHRSZWFkUmVjZWl2ZWREYXRhX0lmYWNlQ29uc3RhbnRzOw0KKw0KKyAgIHZpcnR1YWwgdm9pZCBzdHJvYmVSZWFkUmVjZWl2ZWREYXRhKHRSaW9TdGF0dXNDb2RlICpzdGF0dXMpID0gMDsNCisNCisNCisgICB0eXBlZGVmIGVudW0NCisgICB7DQorICAgfSB0Q29uZmlnX0lmYWNlQ29uc3RhbnRzOw0KKw0KKyAgIHZpcnR1YWwgdm9pZCB3cml0ZUNvbmZpZyh0Q29uZmlnIHZhbHVlLCB0UmlvU3RhdHVzQ29kZSAqc3RhdHVzKSA9IDA7DQorICAgdmlydHVhbCB2b2lkIHdyaXRlQ29uZmlnX0J1c0JpdFdpZHRoKHVuc2lnbmVkIGNoYXIgdmFsdWUsIHRSaW9TdGF0dXNDb2RlICpzdGF0dXMpID0gMDsNCisgICB2aXJ0dWFsIHZvaWQgd3JpdGVDb25maWdfQ2xvY2tIYWxmUGVyaW9kRGVsYXkodW5zaWduZWQgY2hhciB2YWx1ZSwgdFJpb1N0YXR1c0NvZGUgKnN0YXR1cykgPSAwOw0KKyAgIHZpcnR1YWwgdm9pZCB3cml0ZUNvbmZpZ19NU0JmaXJzdChib29sIHZhbHVlLCB0UmlvU3RhdHVzQ29kZSAqc3RhdHVzKSA9IDA7DQorICAgdmlydHVhbCB2b2lkIHdyaXRlQ29uZmlnX0RhdGFPbkZhbGxpbmcoYm9vbCB2YWx1ZSwgdFJpb1N0YXR1c0NvZGUgKnN0YXR1cykgPSAwOw0KKyAgIHZpcnR1YWwgdm9pZCB3cml0ZUNvbmZpZ19MYXRjaEZpcnN0KGJvb2wgdmFsdWUsIHRSaW9TdGF0dXNDb2RlICpzdGF0dXMpID0gMDsNCisgICB2aXJ0dWFsIHZvaWQgd3JpdGVDb25maWdfTGF0Y2hMYXN0KGJvb2wgdmFsdWUsIHRSaW9TdGF0dXNDb2RlICpzdGF0dXMpID0gMDsNCisgICB2aXJ0dWFsIHZvaWQgd3JpdGVDb25maWdfRnJhbWVQb2xhcml0eShib29sIHZhbHVlLCB0UmlvU3RhdHVzQ29kZSAqc3RhdHVzKSA9IDA7DQorICAgdmlydHVhbCB2b2lkIHdyaXRlQ29uZmlnX1dyaXRlT25seShib29sIHZhbHVlLCB0UmlvU3RhdHVzQ29kZSAqc3RhdHVzKSA9IDA7DQorICAgdmlydHVhbCB2b2lkIHdyaXRlQ29uZmlnX0Nsb2NrUG9sYXJpdHkoYm9vbCB2YWx1ZSwgdFJpb1N0YXR1c0NvZGUgKnN0YXR1cykgPSAwOw0KKyAgIHZpcnR1YWwgdENvbmZpZyByZWFkQ29uZmlnKHRSaW9TdGF0dXNDb2RlICpzdGF0dXMpID0gMDsNCisgICB2aXJ0dWFsIHVuc2lnbmVkIGNoYXIgcmVhZENvbmZpZ19CdXNCaXRXaWR0aCh0UmlvU3RhdHVzQ29kZSAqc3RhdHVzKSA9IDA7DQorICAgdmlydHVhbCB1bnNpZ25lZCBjaGFyIHJlYWRDb25maWdfQ2xvY2tIYWxmUGVyaW9kRGVsYXkodFJpb1N0YXR1c0NvZGUgKnN0YXR1cykgPSAwOw0KKyAgIHZpcnR1YWwgYm9vbCByZWFkQ29uZmlnX01TQmZpcnN0KHRSaW9TdGF0dXNDb2RlICpzdGF0dXMpID0gMDsNCisgICB2aXJ0dWFsIGJvb2wgcmVhZENvbmZpZ19EYXRhT25GYWxsaW5nKHRSaW9TdGF0dXNDb2RlICpzdGF0dXMpID0gMDsNCisgICB2aXJ0dWFsIGJvb2wgcmVhZENvbmZpZ19MYXRjaEZpcnN0KHRSaW9TdGF0dXNDb2RlICpzdGF0dXMpID0gMDsNCisgICB2aXJ0dWFsIGJvb2wgcmVhZENvbmZpZ19MYXRjaExhc3QodFJpb1N0YXR1c0NvZGUgKnN0YXR1cykgPSAwOw0KKyAgIHZpcnR1YWwgYm9vbCByZWFkQ29uZmlnX0ZyYW1lUG9sYXJpdHkodFJpb1N0YXR1c0NvZGUgKnN0YXR1cykgPSAwOw0KKyAgIHZpcnR1YWwgYm9vbCByZWFkQ29uZmlnX1dyaXRlT25seSh0UmlvU3RhdHVzQ29kZSAqc3RhdHVzKSA9IDA7DQorICAgdmlydHVhbCBib29sIHJlYWRDb25maWdfQ2xvY2tQb2xhcml0eSh0UmlvU3RhdHVzQ29kZSAqc3RhdHVzKSA9IDA7DQorDQorDQorICAgdHlwZWRlZiBlbnVtDQorICAgew0KKyAgIH0gdFJlY2VpdmVkRGF0YV9JZmFjZUNvbnN0YW50czsNCisNCisgICB2aXJ0dWFsIHVuc2lnbmVkIGludCByZWFkUmVjZWl2ZWREYXRhKHRSaW9TdGF0dXNDb2RlICpzdGF0dXMpID0gMDsNCisNCisNCisgICB0eXBlZGVmIGVudW0NCisgICB7DQorICAgfSB0RGF0YVRvTG9hZF9JZmFjZUNvbnN0YW50czsNCisNCisgICB2aXJ0dWFsIHZvaWQgd3JpdGVEYXRhVG9Mb2FkKHVuc2lnbmVkIGludCB2YWx1ZSwgdFJpb1N0YXR1c0NvZGUgKnN0YXR1cykgPSAwOw0KKyAgIHZpcnR1YWwgdW5zaWduZWQgaW50IHJlYWREYXRhVG9Mb2FkKHRSaW9TdGF0dXNDb2RlICpzdGF0dXMpID0gMDsNCisNCisNCisgICB0eXBlZGVmIGVudW0NCisgICB7DQorICAgfSB0UmVzZXRfSWZhY2VDb25zdGFudHM7DQorDQorICAgdmlydHVhbCB2b2lkIHN0cm9iZVJlc2V0KHRSaW9TdGF0dXNDb2RlICpzdGF0dXMpID0gMDsNCisNCisNCisgICB0eXBlZGVmIGVudW0NCisgICB7DQorICAgfSB0Q2hhbm5lbHNfSWZhY2VDb25zdGFudHM7DQorDQorICAgdmlydHVhbCB2b2lkIHdyaXRlQ2hhbm5lbHModENoYW5uZWxzIHZhbHVlLCB0UmlvU3RhdHVzQ29kZSAqc3RhdHVzKSA9IDA7DQorICAgdmlydHVhbCB2b2lkIHdyaXRlQ2hhbm5lbHNfU0NMS19DaGFubmVsKHVuc2lnbmVkIGNoYXIgdmFsdWUsIHRSaW9TdGF0dXNDb2RlICpzdGF0dXMpID0gMDsNCisgICB2aXJ0dWFsIHZvaWQgd3JpdGVDaGFubmVsc19TQ0xLX01vZHVsZSh1bnNpZ25lZCBjaGFyIHZhbHVlLCB0UmlvU3RhdHVzQ29kZSAqc3RhdHVzKSA9IDA7DQorICAgdmlydHVhbCB2b2lkIHdyaXRlQ2hhbm5lbHNfTU9TSV9DaGFubmVsKHVuc2lnbmVkIGNoYXIgdmFsdWUsIHRSaW9TdGF0dXNDb2RlICpzdGF0dXMpID0gMDsNCisgICB2aXJ0dWFsIHZvaWQgd3JpdGVDaGFubmVsc19NT1NJX01vZHVsZSh1bnNpZ25lZCBjaGFyIHZhbHVlLCB0UmlvU3RhdHVzQ29kZSAqc3RhdHVzKSA9IDA7DQorICAgdmlydHVhbCB2b2lkIHdyaXRlQ2hhbm5lbHNfTUlTT19DaGFubmVsKHVuc2lnbmVkIGNoYXIgdmFsdWUsIHRSaW9TdGF0dXNDb2RlICpzdGF0dXMpID0gMDsNCisgICB2aXJ0dWFsIHZvaWQgd3JpdGVDaGFubmVsc19NSVNPX01vZHVsZSh1bnNpZ25lZCBjaGFyIHZhbHVlLCB0UmlvU3RhdHVzQ29kZSAqc3RhdHVzKSA9IDA7DQorICAgdmlydHVhbCB2b2lkIHdyaXRlQ2hhbm5lbHNfU1NfQ2hhbm5lbCh1bnNpZ25lZCBjaGFyIHZhbHVlLCB0UmlvU3RhdHVzQ29kZSAqc3RhdHVzKSA9IDA7DQorICAgdmlydHVhbCB2b2lkIHdyaXRlQ2hhbm5lbHNfU1NfTW9kdWxlKHVuc2lnbmVkIGNoYXIgdmFsdWUsIHRSaW9TdGF0dXNDb2RlICpzdGF0dXMpID0gMDsNCisgICB2aXJ0dWFsIHRDaGFubmVscyByZWFkQ2hhbm5lbHModFJpb1N0YXR1c0NvZGUgKnN0YXR1cykgPSAwOw0KKyAgIHZpcnR1YWwgdW5zaWduZWQgY2hhciByZWFkQ2hhbm5lbHNfU0NMS19DaGFubmVsKHRSaW9TdGF0dXNDb2RlICpzdGF0dXMpID0gMDsNCisgICB2aXJ0dWFsIHVuc2lnbmVkIGNoYXIgcmVhZENoYW5uZWxzX1NDTEtfTW9kdWxlKHRSaW9TdGF0dXNDb2RlICpzdGF0dXMpID0gMDsNCisgICB2aXJ0dWFsIHVuc2lnbmVkIGNoYXIgcmVhZENoYW5uZWxzX01PU0lfQ2hhbm5lbCh0UmlvU3RhdHVzQ29kZSAqc3RhdHVzKSA9IDA7DQorICAgdmlydHVhbCB1bnNpZ25lZCBjaGFyIHJlYWRDaGFubmVsc19NT1NJX01vZHVsZSh0UmlvU3RhdHVzQ29kZSAqc3RhdHVzKSA9IDA7DQorICAgdmlydHVhbCB1bnNpZ25lZCBjaGFyIHJlYWRDaGFubmVsc19NSVNPX0NoYW5uZWwodFJpb1N0YXR1c0NvZGUgKnN0YXR1cykgPSAwOw0KKyAgIHZpcnR1YWwgdW5zaWduZWQgY2hhciByZWFkQ2hhbm5lbHNfTUlTT19Nb2R1bGUodFJpb1N0YXR1c0NvZGUgKnN0YXR1cykgPSAwOw0KKyAgIHZpcnR1YWwgdW5zaWduZWQgY2hhciByZWFkQ2hhbm5lbHNfU1NfQ2hhbm5lbCh0UmlvU3RhdHVzQ29kZSAqc3RhdHVzKSA9IDA7DQorICAgdmlydHVhbCB1bnNpZ25lZCBjaGFyIHJlYWRDaGFubmVsc19TU19Nb2R1bGUodFJpb1N0YXR1c0NvZGUgKnN0YXR1cykgPSAwOw0KKw0KKw0KKyAgIHR5cGVkZWYgZW51bQ0KKyAgIHsNCisgICB9IHRDbGVhclJlY2VpdmVkRGF0YV9JZmFjZUNvbnN0YW50czsNCisNCisgICB2aXJ0dWFsIHZvaWQgc3Ryb2JlQ2xlYXJSZWNlaXZlZERhdGEodFJpb1N0YXR1c0NvZGUgKnN0YXR1cykgPSAwOw0KKw0KKw0KKyAgIHR5cGVkZWYgZW51bQ0KKyAgIHsNCisgICB9IHRSZWNlaXZlZEVsZW1lbnRzX0lmYWNlQ29uc3RhbnRzOw0KKw0KKyAgIHZpcnR1YWwgdW5zaWduZWQgc2hvcnQgcmVhZFJlY2VpdmVkRWxlbWVudHModFJpb1N0YXR1c0NvZGUgKnN0YXR1cykgPSAwOw0KKw0KKw0KKyAgIHR5cGVkZWYgZW51bQ0KKyAgIHsNCisgICB9IHRMb2FkX0lmYWNlQ29uc3RhbnRzOw0KKw0KKyAgIHZpcnR1YWwgdm9pZCBzdHJvYmVMb2FkKHRSaW9TdGF0dXNDb2RlICpzdGF0dXMpID0gMDsNCisNCisNCisgICB0eXBlZGVmIGVudW0NCisgICB7DQorICAgfSB0QXZhaWxhYmxlVG9Mb2FkX0lmYWNlQ29uc3RhbnRzOw0KKw0KKyAgIHZpcnR1YWwgdW5zaWduZWQgc2hvcnQgcmVhZEF2YWlsYWJsZVRvTG9hZCh0UmlvU3RhdHVzQ29kZSAqc3RhdHVzKSA9IDA7DQorDQorDQorDQorDQorcHJpdmF0ZToNCisgICB0U1BJKGNvbnN0IHRTUEkmKTsNCisgICB2b2lkIG9wZXJhdG9yPShjb25zdCB0U1BJJik7DQorfTsNCisNCit9DQorfQ0KKw0KKyNlbmRpZiAvLyBfX25GUkNfMjAxMl8xXzZfNF9TUElfaF9fDQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvQ2hpcE9iamVjdC90U29sZW5vaWQuaCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0NoaXBPYmplY3QvdFNvbGVub2lkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODYyN2VlYQotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0NoaXBPYmplY3QvdFNvbGVub2lkLmgKQEAgLTAsMCArMSw1MCBAQAorLy8gQ29weXJpZ2h0IChjKSBOYXRpb25hbCBJbnN0cnVtZW50cyAyMDA4LiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4NCisvLyBEbyBOb3QgRWRpdC4uLiB0aGlzIGZpbGUgaXMgZ2VuZXJhdGVkIQ0KKw0KKyNpZm5kZWYgX19uRlJDXzIwMTJfMV82XzRfU29sZW5vaWRfaF9fDQorI2RlZmluZSBfX25GUkNfMjAxMl8xXzZfNF9Tb2xlbm9pZF9oX18NCisNCisjaW5jbHVkZSAidFN5c3RlbUludGVyZmFjZS5oIg0KKw0KK25hbWVzcGFjZSBuRlBHQQ0KK3sNCituYW1lc3BhY2UgbkZSQ18yMDEyXzFfNl80DQorew0KKw0KK2NsYXNzIHRTb2xlbm9pZA0KK3sNCitwdWJsaWM6DQorICAgdFNvbGVub2lkKCl7fQ0KKyAgIHZpcnR1YWwgfnRTb2xlbm9pZCgpe30NCisNCisgICB2aXJ0dWFsIHRTeXN0ZW1JbnRlcmZhY2UqIGdldFN5c3RlbUludGVyZmFjZSgpID0gMDsNCisgICBzdGF0aWMgdFNvbGVub2lkKiBjcmVhdGUodFJpb1N0YXR1c0NvZGUgKnN0YXR1cyk7DQorDQorICAgdHlwZWRlZiBlbnVtDQorICAgew0KKyAgICAgIGtOdW1TeXN0ZW1zID0gMSwNCisgICB9IHRJZmFjZUNvbnN0YW50czsNCisNCisNCisNCisNCisgICB0eXBlZGVmIGVudW0NCisgICB7DQorICAgICAga051bURPN18wRWxlbWVudHMgPSAyLA0KKyAgIH0gdERPN18wX0lmYWNlQ29uc3RhbnRzOw0KKw0KKyAgIHZpcnR1YWwgdm9pZCB3cml0ZURPN18wKHVuc2lnbmVkIGNoYXIgYml0ZmllbGRfaW5kZXgsIHVuc2lnbmVkIGNoYXIgdmFsdWUsIHRSaW9TdGF0dXNDb2RlICpzdGF0dXMpID0gMDsNCisgICB2aXJ0dWFsIHVuc2lnbmVkIGNoYXIgcmVhZERPN18wKHVuc2lnbmVkIGNoYXIgYml0ZmllbGRfaW5kZXgsIHRSaW9TdGF0dXNDb2RlICpzdGF0dXMpID0gMDsNCisNCisNCisNCisNCitwcml2YXRlOg0KKyAgIHRTb2xlbm9pZChjb25zdCB0U29sZW5vaWQmKTsNCisgICB2b2lkIG9wZXJhdG9yPShjb25zdCB0U29sZW5vaWQmKTsNCit9Ow0KKw0KK30NCit9DQorDQorI2VuZGlmIC8vIF9fbkZSQ18yMDEyXzFfNl80X1NvbGVub2lkX2hfXw0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0NoaXBPYmplY3QvdFN5c3RlbS5oIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvQ2hpcE9iamVjdC90U3lzdGVtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWUwZTdhYwotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0NoaXBPYmplY3QvdFN5c3RlbS5oCkBAIC0wLDAgKzEsNDcgQEAKKy8vIEJhc2UgY2xhc3MgZm9yIGdlbmVyYXRlZCBjaGlwIG9iamVjdHMNCisvLyBDb3B5cmlnaHQgKGMpIE5hdGlvbmFsIEluc3RydW1lbnRzIDIwMDguICBBbGwgUmlnaHRzIFJlc2VydmVkLg0KKw0KKyNpZm5kZWYgX190U3lzdGVtX2hfXw0KKyNkZWZpbmUgX190U3lzdGVtX2hfXw0KKw0KKyNpbmNsdWRlICJOaVJpby5oIg0KKyNpbmNsdWRlIDx2eFdvcmtzLmg+DQorDQorI2RlZmluZSBGUkNfRlBHQV9QUkVMT0FEX0JJVEZJTEUNCisNCit0eXBlZGVmIHVpbnQzMl90IE5pRnBnYV9TZXNzaW9uOw0KKw0KK25hbWVzcGFjZSBuRlBHQQ0KK3sNCisNCitjbGFzcyB0U3lzdGVtDQorew0KK3B1YmxpYzoNCisgICB0U3lzdGVtKHRSaW9TdGF0dXNDb2RlICpzdGF0dXMpOw0KKyAgIH50U3lzdGVtKCk7DQorICAgdm9pZCBnZXRGcGdhR3VpZCh1aW50MzJfdCAqZ3VpZF9wdHIsIHRSaW9TdGF0dXNDb2RlICpzdGF0dXMpOw0KKw0KK3Byb3RlY3RlZDoNCisgICBzdGF0aWMgTmlGcGdhX1Nlc3Npb24gX0RldmljZUhhbmRsZTsNCisNCisjaWZkZWYgRlJDX0ZQR0FfUFJFTE9BRF9CSVRGSUxFDQorICAgdm9pZCBOaUZwZ2FfU2hhcmVkT3Blbl9jb21tb24oY29uc3QgY2hhciogICAgIGJpdGZpbGUpOw0KKyAgIE5pRnBnYV9TdGF0dXMgTmlGcGdhX1NoYXJlZE9wZW4oY29uc3QgY2hhciogICAgIGJpdGZpbGUsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqICAgICBzaWduYXR1cmUsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqICAgICByZXNvdXJjZSwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgICAgICAgIGF0dHJpYnV0ZSwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmlGcGdhX1Nlc3Npb24qIHNlc3Npb24pOw0KKyAgIE5pRnBnYV9TdGF0dXMgTmlGcGdhTHZfU2hhcmVkT3Blbihjb25zdCBjaGFyKiBjb25zdCAgICAgYml0ZmlsZSwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogY29uc3QgICAgIGFwaVNpZ25hdHVyZSwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogY29uc3QgICAgIHJlc291cmNlLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50MzJfdCAgICAgICAgYXR0cmlidXRlLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBOaUZwZ2FfU2Vzc2lvbiogY29uc3Qgc2Vzc2lvbik7DQorcHJpdmF0ZToNCisgICAgc3RhdGljIGNoYXIgKl9GaWxlTmFtZTsNCisgICAgc3RhdGljIGNoYXIgKl9CaXRmaWxlOw0KKyNlbmRpZg0KK307DQorDQorfQ0KKw0KKyNlbmRpZiAvLyBfX3RTeXN0ZW1faF9fDQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvQ2hpcE9iamVjdC90U3lzdGVtSW50ZXJmYWNlLmggYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9DaGlwT2JqZWN0L3RTeXN0ZW1JbnRlcmZhY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTNlOTMyCi0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvQ2hpcE9iamVjdC90U3lzdGVtSW50ZXJmYWNlLmgKQEAgLTAsMCArMSwyNiBAQAorLy8gQ29weXJpZ2h0IChjKSBOYXRpb25hbCBJbnN0cnVtZW50cyAyMDA4LiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4NCisNCisjaWZuZGVmIF9fdFN5c3RlbUludGVyZmFjZV9oX18NCisjZGVmaW5lIF9fdFN5c3RlbUludGVyZmFjZV9oX18NCisNCituYW1lc3BhY2UgbkZQR0ENCit7DQorDQorY2xhc3MgdFN5c3RlbUludGVyZmFjZQ0KK3sNCitwdWJsaWM6DQorICAgdFN5c3RlbUludGVyZmFjZSgpe30NCisgICB2aXJ0dWFsIH50U3lzdGVtSW50ZXJmYWNlKCl7fQ0KKw0KKyAgIHZpcnR1YWwgY29uc3QgdWludDE2X3QgZ2V0RXhwZWN0ZWRGUEdBVmVyc2lvbigpPTA7DQorICAgdmlydHVhbCBjb25zdCB1aW50MzJfdCBnZXRFeHBlY3RlZEZQR0FSZXZpc2lvbigpPTA7DQorICAgdmlydHVhbCBjb25zdCB1aW50MzJfdCAqIGNvbnN0IGdldEV4cGVjdGVkRlBHQVNpZ25hdHVyZSgpPTA7DQorICAgdmlydHVhbCB2b2lkIGdldEhhcmR3YXJlRnBnYVNpZ25hdHVyZSh1aW50MzJfdCAqZ3VpZF9wdHIsIHRSaW9TdGF0dXNDb2RlICpzdGF0dXMpPTA7DQorICAgdmlydHVhbCB1aW50MzJfdCBnZXRMVkhhbmRsZSh0UmlvU3RhdHVzQ29kZSAqc3RhdHVzKT0wOw0KKyAgIHZpcnR1YWwgdWludDMyX3QgZ2V0SGFuZGxlKCk9MDsNCit9Ow0KKw0KK30NCisNCisjZW5kaWYgLy8gX190U3lzdGVtSW50ZXJmYWNlX2hfXw0KKw0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0NoaXBPYmplY3QvdFdhdGNoZG9nLmggYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9DaGlwT2JqZWN0L3RXYXRjaGRvZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzMmY4ZWYKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9DaGlwT2JqZWN0L3RXYXRjaGRvZy5oCkBAIC0wLDAgKzEsMTAxIEBACisvLyBDb3B5cmlnaHQgKGMpIE5hdGlvbmFsIEluc3RydW1lbnRzIDIwMDguICBBbGwgUmlnaHRzIFJlc2VydmVkLg0KKy8vIERvIE5vdCBFZGl0Li4uIHRoaXMgZmlsZSBpcyBnZW5lcmF0ZWQhDQorDQorI2lmbmRlZiBfX25GUkNfMjAxMl8xXzZfNF9XYXRjaGRvZ19oX18NCisjZGVmaW5lIF9fbkZSQ18yMDEyXzFfNl80X1dhdGNoZG9nX2hfXw0KKw0KKyNpbmNsdWRlICJ0U3lzdGVtSW50ZXJmYWNlLmgiDQorDQorbmFtZXNwYWNlIG5GUEdBDQorew0KK25hbWVzcGFjZSBuRlJDXzIwMTJfMV82XzQNCit7DQorDQorY2xhc3MgdFdhdGNoZG9nDQorew0KK3B1YmxpYzoNCisgICB0V2F0Y2hkb2coKXt9DQorICAgdmlydHVhbCB+dFdhdGNoZG9nKCl7fQ0KKw0KKyAgIHZpcnR1YWwgdFN5c3RlbUludGVyZmFjZSogZ2V0U3lzdGVtSW50ZXJmYWNlKCkgPSAwOw0KKyAgIHN0YXRpYyB0V2F0Y2hkb2cqIGNyZWF0ZSh0UmlvU3RhdHVzQ29kZSAqc3RhdHVzKTsNCisNCisgICB0eXBlZGVmIGVudW0NCisgICB7DQorICAgICAga051bVN5c3RlbXMgPSAxLA0KKyAgIH0gdElmYWNlQ29uc3RhbnRzOw0KKw0KKyAgIHR5cGVkZWYNCisgICB1bmlvbnsNCisgICAgICBzdHJ1Y3R7DQorICAgICAgICAgdW5zaWduZWQgU3lzdGVtQWN0aXZlIDogMTsNCisgICAgICAgICB1bnNpZ25lZCBBbGl2ZSA6IDE7DQorICAgICAgICAgdW5zaWduZWQgU3lzRGlzYWJsZUNvdW50IDogMTU7DQorICAgICAgICAgdW5zaWduZWQgRGlzYWJsZUNvdW50IDogMTU7DQorICAgICAgfTsNCisgICAgICBzdHJ1Y3R7DQorICAgICAgICAgdW5zaWduZWQgdmFsdWUgOiAzMjsNCisgICAgICB9Ow0KKyAgIH0gdFN0YXR1czsNCisNCisNCisNCisgICB0eXBlZGVmIGVudW0NCisgICB7DQorICAgfSB0U3RhdHVzX0lmYWNlQ29uc3RhbnRzOw0KKw0KKyAgIHZpcnR1YWwgdFN0YXR1cyByZWFkU3RhdHVzKHRSaW9TdGF0dXNDb2RlICpzdGF0dXMpID0gMDsNCisgICB2aXJ0dWFsIGJvb2wgcmVhZFN0YXR1c19TeXN0ZW1BY3RpdmUodFJpb1N0YXR1c0NvZGUgKnN0YXR1cykgPSAwOw0KKyAgIHZpcnR1YWwgYm9vbCByZWFkU3RhdHVzX0FsaXZlKHRSaW9TdGF0dXNDb2RlICpzdGF0dXMpID0gMDsNCisgICB2aXJ0dWFsIHVuc2lnbmVkIHNob3J0IHJlYWRTdGF0dXNfU3lzRGlzYWJsZUNvdW50KHRSaW9TdGF0dXNDb2RlICpzdGF0dXMpID0gMDsNCisgICB2aXJ0dWFsIHVuc2lnbmVkIHNob3J0IHJlYWRTdGF0dXNfRGlzYWJsZUNvdW50KHRSaW9TdGF0dXNDb2RlICpzdGF0dXMpID0gMDsNCisNCisNCisgICB0eXBlZGVmIGVudW0NCisgICB7DQorICAgfSB0SW1tb3J0YWxfSWZhY2VDb25zdGFudHM7DQorDQorICAgdmlydHVhbCB2b2lkIHdyaXRlSW1tb3J0YWwoYm9vbCB2YWx1ZSwgdFJpb1N0YXR1c0NvZGUgKnN0YXR1cykgPSAwOw0KKyAgIHZpcnR1YWwgYm9vbCByZWFkSW1tb3J0YWwodFJpb1N0YXR1c0NvZGUgKnN0YXR1cykgPSAwOw0KKw0KKw0KKyAgIHR5cGVkZWYgZW51bQ0KKyAgIHsNCisgICB9IHRLaWxsX0lmYWNlQ29uc3RhbnRzOw0KKw0KKyAgIHZpcnR1YWwgdm9pZCBzdHJvYmVLaWxsKHRSaW9TdGF0dXNDb2RlICpzdGF0dXMpID0gMDsNCisNCisNCisgICB0eXBlZGVmIGVudW0NCisgICB7DQorICAgfSB0RmVlZF9JZmFjZUNvbnN0YW50czsNCisNCisgICB2aXJ0dWFsIHZvaWQgc3Ryb2JlRmVlZCh0UmlvU3RhdHVzQ29kZSAqc3RhdHVzKSA9IDA7DQorDQorDQorICAgdHlwZWRlZiBlbnVtDQorICAgew0KKyAgIH0gdEV4cGlyYXRpb25fSWZhY2VDb25zdGFudHM7DQorDQorICAgdmlydHVhbCB2b2lkIHdyaXRlRXhwaXJhdGlvbih1bnNpZ25lZCBpbnQgdmFsdWUsIHRSaW9TdGF0dXNDb2RlICpzdGF0dXMpID0gMDsNCisgICB2aXJ0dWFsIHVuc2lnbmVkIGludCByZWFkRXhwaXJhdGlvbih0UmlvU3RhdHVzQ29kZSAqc3RhdHVzKSA9IDA7DQorDQorDQorICAgdHlwZWRlZiBlbnVtDQorICAgew0KKyAgIH0gdFRpbWVyX0lmYWNlQ29uc3RhbnRzOw0KKw0KKyAgIHZpcnR1YWwgdW5zaWduZWQgaW50IHJlYWRUaW1lcih0UmlvU3RhdHVzQ29kZSAqc3RhdHVzKSA9IDA7DQorDQorDQorDQorDQorcHJpdmF0ZToNCisgICB0V2F0Y2hkb2coY29uc3QgdFdhdGNoZG9nJik7DQorICAgdm9pZCBvcGVyYXRvcj0oY29uc3QgdFdhdGNoZG9nJik7DQorfTsNCisNCit9DQorfQ0KKw0KKyNlbmRpZiAvLyBfX25GUkNfMjAxMl8xXzZfNF9XYXRjaGRvZ19oX18NCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9Db21tYW5kcy9Db21tYW5kLmNwcCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0NvbW1hbmRzL0NvbW1hbmQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlYTZmZGYKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9Db21tYW5kcy9Db21tYW5kLmNwcApAQCAtMCwwICsxLDQ2MyBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBDb3B5cmlnaHQgKGMpIEZJUlNUIDIwMTEuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCQkJCQkJCSAgKi8NCisvKiBPcGVuIFNvdXJjZSBTb2Z0d2FyZSAtIG1heSBiZSBtb2RpZmllZCBhbmQgc2hhcmVkIGJ5IEZSQyB0ZWFtcy4gVGhlIGNvZGUgICAqLw0KKy8qIG11c3QgYmUgYWNjb21wYW5pZWQgYnkgdGhlIEZJUlNUIEJTRCBsaWNlbnNlIGZpbGUgaW4gJChXSU5EX0JBU0UpL1dQSUxpYi4gICovDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisjaW5jbHVkZSAiQ29tbWFuZHMvQ29tbWFuZC5oIg0KKyNpbmNsdWRlICJDb21tYW5kcy9Db21tYW5kR3JvdXAuaCINCisjaW5jbHVkZSAiQ29tbWFuZHMvU2NoZWR1bGVyLmgiDQorI2luY2x1ZGUgIkRyaXZlclN0YXRpb24uaCINCisjaW5jbHVkZSAiVGltZXIuaCINCisjaW5jbHVkZSAiV1BJRXJyb3JzLmgiDQorDQorc3RhdGljIGNvbnN0IGNoYXIgKmtOYW1lID0gIm5hbWUiOw0KK3N0YXRpYyBjb25zdCBjaGFyICprUnVubmluZyA9ICJydW5uaW5nIjsNCitzdGF0aWMgY29uc3QgY2hhciAqa0lzUGFyZW50ZWQgPSAiaXNQYXJlbnRlZCI7DQorDQordm9pZCBDb21tYW5kOjpJbml0Q29tbWFuZChjb25zdCBjaGFyICpuYW1lLCBkb3VibGUgdGltZW91dCkNCit7DQorCW1fdGltZW91dCA9IHRpbWVvdXQ7DQorCW1fbG9ja2VkID0gZmFsc2U7DQorCW1fc3RhcnRUaW1lID0gLTE7DQorCW1faW5pdGlhbGl6ZWQgPSBmYWxzZTsNCisJbV9ydW5uaW5nID0gZmFsc2U7DQorCW1faW50ZXJydXB0aWJsZSA9IHRydWU7DQorCW1fY2FuY2VsZWQgPSBmYWxzZTsNCisJbV9ydW5XaGVuRGlzYWJsZWQgPSBmYWxzZTsNCisJbV9wYXJlbnQgPSBOVUxMOw0KKwlpZiAobmFtZSA9PSBOVUxMKQ0KKwl7DQorCQkvLyBEb24ndCBoYXZlIGEgd2F5IHRvIGZpbmQgdGhlIHN1YmNsYXNzIG5hbWUgbGlrZSBqYXZhLCBzbyB1c2UgdGhlIGFkZHJlc3MNCisJCWNoYXIgYnVmWzMyXTsNCisJCXNucHJpbnRmKGJ1ZiwgMzIsICJDb21tYW5kXyVwIiwgdGhpcyk7DQorCQltX25hbWUgPSBidWY7DQorCX0NCisJZWxzZQ0KKwl7DQorCQltX25hbWUgPSBuYW1lOw0KKwl9DQorCW1fdGFibGUgPSBOVUxMOwkNCit9DQorDQorLyoqDQorICogQ3JlYXRlcyBhIG5ldyBjb21tYW5kLg0KKyAqIFRoZSBuYW1lIG9mIHRoaXMgY29tbWFuZCB3aWxsIGJlIGRlZmF1bHQuDQorICovDQorQ29tbWFuZDo6Q29tbWFuZCgpDQorew0KKwlJbml0Q29tbWFuZChOVUxMLCAtMS4wKTsNCit9DQorDQorLyoqDQorICogQ3JlYXRlcyBhIG5ldyBjb21tYW5kIHdpdGggdGhlIGdpdmVuIG5hbWUgYW5kIG5vIHRpbWVvdXQuDQorICogQHBhcmFtIG5hbWUgdGhlIG5hbWUgZm9yIHRoaXMgY29tbWFuZA0KKyAqLw0KK0NvbW1hbmQ6OkNvbW1hbmQoY29uc3QgY2hhciAqbmFtZSkNCit7DQorCWlmIChuYW1lID09IE5VTEwpDQorCQl3cGlfc2V0V1BJRXJyb3JXaXRoQ29udGV4dChOdWxsUGFyYW1ldGVyLCAibmFtZSIpOw0KKwlJbml0Q29tbWFuZChuYW1lLCAtMS4wKTsNCit9DQorDQorLyoqDQorICogQ3JlYXRlcyBhIG5ldyBjb21tYW5kIHdpdGggdGhlIGdpdmVuIHRpbWVvdXQgYW5kIGEgZGVmYXVsdCBuYW1lLg0KKyAqIEBwYXJhbSB0aW1lb3V0IHRoZSB0aW1lIChpbiBzZWNvbmRzKSBiZWZvcmUgdGhpcyBjb21tYW5kICJ0aW1lcyBvdXQiDQorICogQHNlZSBDb21tYW5kI2lzVGltZWRPdXQoKSBpc1RpbWVkT3V0KCkNCisgKi8NCitDb21tYW5kOjpDb21tYW5kKGRvdWJsZSB0aW1lb3V0KQ0KK3sNCisJaWYgKHRpbWVvdXQgPCAwLjApDQorCQl3cGlfc2V0V1BJRXJyb3JXaXRoQ29udGV4dChQYXJhbWV0ZXJPdXRPZlJhbmdlLCAidGltZW91dCA8IDAuMCIpOw0KKwlJbml0Q29tbWFuZChOVUxMLCB0aW1lb3V0KTsNCit9DQorDQorLyoqDQorICogQ3JlYXRlcyBhIG5ldyBjb21tYW5kIHdpdGggdGhlIGdpdmVuIG5hbWUgYW5kIHRpbWVvdXQuDQorICogQHBhcmFtIG5hbWUgdGhlIG5hbWUgb2YgdGhlIGNvbW1hbmQNCisgKiBAcGFyYW0gdGltZW91dCB0aGUgdGltZSAoaW4gc2Vjb25kcykgYmVmb3JlIHRoaXMgY29tbWFuZCAidGltZXMgb3V0Ig0KKyAqIEBzZWUgQ29tbWFuZCNpc1RpbWVkT3V0KCkgaXNUaW1lZE91dCgpDQorICovDQorQ29tbWFuZDo6Q29tbWFuZChjb25zdCBjaGFyICpuYW1lLCBkb3VibGUgdGltZW91dCkNCit7DQorCWlmIChuYW1lID09IE5VTEwpDQorCQl3cGlfc2V0V1BJRXJyb3JXaXRoQ29udGV4dChOdWxsUGFyYW1ldGVyLCAibmFtZSIpOw0KKwlpZiAodGltZW91dCA8IDAuMCkNCisJCXdwaV9zZXRXUElFcnJvcldpdGhDb250ZXh0KFBhcmFtZXRlck91dE9mUmFuZ2UsICJ0aW1lb3V0IDwgMC4wIik7DQorCUluaXRDb21tYW5kKG5hbWUsIHRpbWVvdXQpOw0KK30NCisNCitDb21tYW5kOjp+Q29tbWFuZCgpDQorey8vVE9ETyBkZWFsIHdpdGggY2xlYW5pbmcgdXAgYWxsIGxpc3RlbmVycw0KKwkvKmlmIChtX3RhYmxlICE9IE5VTEwpew0KKwkJbV90YWJsZS0+UmVtb3ZlQ2hhbmdlTGlzdGVuZXIoa1J1bm5pbmcsIHRoaXMpOw0KKwl9Ki8NCit9DQorDQorLyoqDQorICogU2V0cyB0aGUgdGltZW91dCBvZiB0aGlzIGNvbW1hbmQuDQorICogQHBhcmFtIHRpbWVvdXQgdGhlIHRpbWVvdXQgKGluIHNlY29uZHMpDQorICogQHNlZSBDb21tYW5kI2lzVGltZWRPdXQoKSBpc1RpbWVkT3V0KCkNCisgKi8NCit2b2lkIENvbW1hbmQ6OlNldFRpbWVvdXQoZG91YmxlIHRpbWVvdXQpDQorew0KKwlpZiAodGltZW91dCA8IDAuMCkNCisJCXdwaV9zZXRXUElFcnJvcldpdGhDb250ZXh0KFBhcmFtZXRlck91dE9mUmFuZ2UsICJ0aW1lb3V0IDwgMC4wIik7DQorCWVsc2UNCisJCW1fdGltZW91dCA9IHRpbWVvdXQ7DQorfQ0KKw0KKy8qKg0KKyAqIFJldHVybnMgdGhlIHRpbWUgc2luY2UgdGhpcyBjb21tYW5kIHdhcyBpbml0aWFsaXplZCAoaW4gc2Vjb25kcykuDQorICogVGhpcyBmdW5jdGlvbiB3aWxsIHdvcmsgZXZlbiBpZiB0aGVyZSBpcyBubyBzcGVjaWZpZWQgdGltZW91dC4NCisgKiBAcmV0dXJuIHRoZSB0aW1lIHNpbmNlIHRoaXMgY29tbWFuZCB3YXMgaW5pdGlhbGl6ZWQgKGluIHNlY29uZHMpLg0KKyAqLw0KK2RvdWJsZSBDb21tYW5kOjpUaW1lU2luY2VJbml0aWFsaXplZCgpDQorew0KKwlpZiAobV9zdGFydFRpbWUgPCAwLjApDQorCQlyZXR1cm4gMC4wOw0KKwllbHNlDQorCQlyZXR1cm4gVGltZXI6OkdldEZQR0FUaW1lc3RhbXAoKSAtIG1fc3RhcnRUaW1lOw0KK30NCisNCisvKioNCisgKiBUaGlzIG1ldGhvZCBzcGVjaWZpZXMgdGhhdCB0aGUgZ2l2ZW4ge0BsaW5rIFN1YnN5c3RlbX0gaXMgdXNlZCBieSB0aGlzIGNvbW1hbmQuDQorICogVGhpcyBtZXRob2QgaXMgY3J1Y2lhbCB0byB0aGUgZnVuY3Rpb25pbmcgb2YgdGhlIENvbW1hbmQgU3lzdGVtIGluIGdlbmVyYWwuDQorICoNCisgKiA8cD5Ob3RlIHRoYXQgdGhlIHJlY29tbWVuZGVkIHdheSB0byBjYWxsIHRoaXMgbWV0aG9kIGlzIGluIHRoZSBjb25zdHJ1Y3Rvci48L3A+DQorICoNCisgKiBAcGFyYW0gc3Vic3lzdGVtIHRoZSB7QGxpbmsgU3Vic3lzdGVtfSByZXF1aXJlZA0KKyAqIEBzZWUgU3Vic3lzdGVtDQorICovDQordm9pZCBDb21tYW5kOjpSZXF1aXJlcyhTdWJzeXN0ZW0gKnN1YnN5c3RlbSkNCit7DQorCWlmICghQXNzZXJ0VW5sb2NrZWQoIkNhbiBub3QgYWRkIG5ldyByZXF1aXJlbWVudCB0byBjb21tYW5kIikpDQorCQlyZXR1cm47DQorDQorCWlmIChzdWJzeXN0ZW0gIT0gTlVMTCkNCisJCW1fcmVxdWlyZW1lbnRzLmluc2VydChzdWJzeXN0ZW0pOw0KKwllbHNlDQorCQl3cGlfc2V0V1BJRXJyb3JXaXRoQ29udGV4dChOdWxsUGFyYW1ldGVyLCAic3Vic3lzdGVtIik7DQorfQ0KKw0KKy8qKg0KKyAqIENhbGxlZCB3aGVuIHRoZSBjb21tYW5kIGhhcyBiZWVuIHJlbW92ZWQuDQorICogVGhpcyB3aWxsIGNhbGwge0BsaW5rIENvbW1hbmQjaW50ZXJydXB0ZWQoKSBpbnRlcnJ1cHRlZCgpfSBvciB7QGxpbmsgQ29tbWFuZCNlbmQoKSBlbmQoKX0uDQorICovDQordm9pZCBDb21tYW5kOjpSZW1vdmVkKCkNCit7DQorCWlmIChtX2luaXRpYWxpemVkKQ0KKwl7DQorCQlpZiAoSXNDYW5jZWxlZCgpKQ0KKwkJew0KKwkJCUludGVycnVwdGVkKCk7DQorCQkJX0ludGVycnVwdGVkKCk7DQorCQl9DQorCQllbHNlDQorCQl7DQorCQkJRW5kKCk7DQorCQkJX0VuZCgpOw0KKwkJfQ0KKwl9DQorCW1faW5pdGlhbGl6ZWQgPSBmYWxzZTsNCisJbV9jYW5jZWxlZCA9IGZhbHNlOw0KKwltX3J1bm5pbmcgPSBmYWxzZTsNCisJaWYgKG1fdGFibGUgIT0gTlVMTCkNCisJCW1fdGFibGUtPlB1dEJvb2xlYW4oa1J1bm5pbmcsIGZhbHNlKTsNCit9DQorDQorLyoqDQorICogU3RhcnRzIHVwIHRoZSBjb21tYW5kLiAgR2V0cyB0aGUgY29tbWFuZCByZWFkeSB0byBzdGFydC4NCisgKiA8cD5Ob3RlIHRoYXQgdGhlIGNvbW1hbmQgd2lsbCBldmVudHVhbGx5IHN0YXJ0LCBob3dldmVyIGl0IHdpbGwgbm90IG5lY2Vzc2FyaWx5DQorICogZG8gc28gaW1tZWRpYXRlbHksIGFuZCBtYXkgaW4gZmFjdCBiZSBjYW5jZWxlZCBiZWZvcmUgaW5pdGlhbGl6ZSBpcyBldmVuIGNhbGxlZC48L3A+DQorICovDQordm9pZCBDb21tYW5kOjpTdGFydCgpDQorew0KKwlMb2NrQ2hhbmdlcygpOw0KKwlpZiAobV9wYXJlbnQgIT0gTlVMTCkNCisJCXdwaV9zZXRXUElFcnJvcldpdGhDb250ZXh0KENvbW1hbmRJbGxlZ2FsVXNlLCAiQ2FuIG5vdCBzdGFydCBhIGNvbW1hbmQgdGhhdCBpcyBwYXJ0IG9mIGEgY29tbWFuZCBncm91cCIpOw0KKw0KKwlTY2hlZHVsZXI6OkdldEluc3RhbmNlKCktPkFkZENvbW1hbmQodGhpcyk7DQorfQ0KKw0KKy8qKg0KKyAqIFRoZSBydW4gbWV0aG9kIGlzIHVzZWQgaW50ZXJuYWxseSB0byBhY3R1YWxseSBydW4gdGhlIGNvbW1hbmRzLg0KKyAqIEByZXR1cm4gd2hldGhlciBvciBub3QgdGhlIGNvbW1hbmQgc2hvdWxkIHN0YXkgd2l0aGluIHRoZSB7QGxpbmsgU2NoZWR1bGVyfS4NCisgKi8NCitib29sIENvbW1hbmQ6OlJ1bigpDQorew0KKwlpZiAoIW1fcnVuV2hlbkRpc2FibGVkICYmIG1fcGFyZW50ID09IE5VTEwgJiYgRHJpdmVyU3RhdGlvbjo6R2V0SW5zdGFuY2UoKS0+SXNEaXNhYmxlZCgpKQ0KKwkJQ2FuY2VsKCk7DQorDQorCWlmIChJc0NhbmNlbGVkKCkpDQorCQlyZXR1cm4gZmFsc2U7DQorDQorCWlmICghbV9pbml0aWFsaXplZCkNCisJew0KKwkJbV9pbml0aWFsaXplZCA9IHRydWU7DQorCQlTdGFydFRpbWluZygpOw0KKwkJX0luaXRpYWxpemUoKTsNCisJCUluaXRpYWxpemUoKTsNCisJfQ0KKwlfRXhlY3V0ZSgpOw0KKwlFeGVjdXRlKCk7DQorCXJldHVybiAhSXNGaW5pc2hlZCgpOw0KK30NCisNCit2b2lkIENvbW1hbmQ6Ol9Jbml0aWFsaXplKCkNCit7DQorfQ0KKw0KK3ZvaWQgQ29tbWFuZDo6X0ludGVycnVwdGVkKCkNCit7DQorfQ0KKw0KK3ZvaWQgQ29tbWFuZDo6X0V4ZWN1dGUoKQ0KK3sNCit9DQorDQordm9pZCBDb21tYW5kOjpfRW5kKCkNCit7DQorfQ0KKw0KKy8qKg0KKyAqIENhbGxlZCB0byBpbmRpY2F0ZSB0aGF0IHRoZSB0aW1lciBzaG91bGQgc3RhcnQuDQorICogVGhpcyBpcyBjYWxsZWQgcmlnaHQgYmVmb3JlIHtAbGluayBDb21tYW5kI2luaXRpYWxpemUoKSBpbml0aWFsaXplKCl9IGlzLCBpbnNpZGUgdGhlDQorICoge0BsaW5rIENvbW1hbmQjcnVuKCkgcnVuKCl9IG1ldGhvZC4NCisgKi8NCit2b2lkIENvbW1hbmQ6OlN0YXJ0VGltaW5nKCkNCit7DQorCW1fc3RhcnRUaW1lID0gVGltZXI6OkdldEZQR0FUaW1lc3RhbXAoKTsNCit9DQorDQorLyoqDQorICogUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUge0BsaW5rIENvbW1hbmQjdGltZVNpbmNlSW5pdGlhbGl6ZWQoKSB0aW1lU2luY2VJbml0aWFsaXplZCgpfQ0KKyAqIG1ldGhvZCByZXR1cm5zIGEgbnVtYmVyIHdoaWNoIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB0aGUgdGltZW91dCBmb3IgdGhlIGNvbW1hbmQuDQorICogSWYgdGhlcmUgaXMgbm8gdGltZW91dCwgdGhpcyB3aWxsIGFsd2F5cyByZXR1cm4gZmFsc2UuDQorICogQHJldHVybiB3aGV0aGVyIHRoZSB0aW1lIGhhcyBleHBpcmVkDQorICovDQorYm9vbCBDb21tYW5kOjpJc1RpbWVkT3V0KCkNCit7DQorCXJldHVybiBtX3RpbWVvdXQgIT0gLTEgJiYgVGltZVNpbmNlSW5pdGlhbGl6ZWQoKSA+PSBtX3RpbWVvdXQ7DQorfQ0KKw0KKy8qKg0KKyAqIFJldHVybnMgdGhlIHJlcXVpcmVtZW50cyAoYXMgYW4gc3RkOjpzZXQgb2Yge0BsaW5rIFN1YnN5c3RlbSBTdWJzeXN0ZW1zfSBwb2ludGVycykgb2YgdGhpcyBjb21tYW5kDQorICogQHJldHVybiB0aGUgcmVxdWlyZW1lbnRzIChhcyBhbiBzdGQ6OnNldCBvZiB7QGxpbmsgU3Vic3lzdGVtIFN1YnN5c3RlbXN9IHBvaW50ZXJzKSBvZiB0aGlzIGNvbW1hbmQNCisgKi8NCitDb21tYW5kOjpTdWJzeXN0ZW1TZXQgQ29tbWFuZDo6R2V0UmVxdWlyZW1lbnRzKCkNCit7DQorCXJldHVybiBtX3JlcXVpcmVtZW50czsNCit9DQorDQorLyoqDQorICogUHJldmVudHMgZnVydGhlciBjaGFuZ2VzIGZyb20gYmVpbmcgbWFkZQ0KKyAqLw0KK3ZvaWQgQ29tbWFuZDo6TG9ja0NoYW5nZXMoKQ0KK3sNCisJbV9sb2NrZWQgPSB0cnVlOw0KK30NCisNCisvKioNCisgKiBJZiBjaGFuZ2VzIGFyZSBsb2NrZWQsIHRoZW4gdGhpcyB3aWxsIGdlbmVyYXRlIGEgQ29tbWFuZElsbGVnYWxVc2UgZXJyb3IuDQorICogQHBhcmFtIG1lc3NhZ2UgdGhlIG1lc3NhZ2UgdG8gcmVwb3J0IG9uIGVycm9yIChpdCBpcyBhcHBlbmRlZCBieSBhIGRlZmF1bHQgbWVzc2FnZSkNCisgKiBAcmV0dXJuIHRydWUgaWYgYXNzZXJ0IHBhc3NlZCwgZmFsc2UgaWYgYXNzZXJ0IGZhaWxlZA0KKyAqLw0KK2Jvb2wgQ29tbWFuZDo6QXNzZXJ0VW5sb2NrZWQoY29uc3QgY2hhciAqbWVzc2FnZSkNCit7DQorCWlmIChtX2xvY2tlZCkNCisJew0KKwkJY2hhciBidWZbMTI4XTsNCisJCXNucHJpbnRmKGJ1ZiwgMTI4LCAiJXMgYWZ0ZXIgYmVpbmcgc3RhcnRlZCBvciBiZWluZyBhZGRlZCB0byBhIGNvbW1hbmQgZ3JvdXAiLCBtZXNzYWdlKTsNCisJCXdwaV9zZXRXUElFcnJvcldpdGhDb250ZXh0KENvbW1hbmRJbGxlZ2FsVXNlLCBidWYpOw0KKwkJcmV0dXJuIGZhbHNlOw0KKwl9DQorCXJldHVybiB0cnVlOw0KK30NCisNCisvKioNCisgKiBTZXRzIHRoZSBwYXJlbnQgb2YgdGhpcyBjb21tYW5kLiAgTm8gYWN0dWFsIGNoYW5nZSBpcyBtYWRlIHRvIHRoZSBncm91cC4NCisgKiBAcGFyYW0gcGFyZW50IHRoZSBwYXJlbnQNCisgKi8NCit2b2lkIENvbW1hbmQ6OlNldFBhcmVudChDb21tYW5kR3JvdXAgKnBhcmVudCkNCit7DQorCWlmIChwYXJlbnQgPT0gTlVMTCkNCisJew0KKwkJd3BpX3NldFdQSUVycm9yV2l0aENvbnRleHQoTnVsbFBhcmFtZXRlciwgInBhcmVudCIpOw0KKwl9DQorCWVsc2UgaWYgKG1fcGFyZW50ICE9IE5VTEwpDQorCXsNCisJCXdwaV9zZXRXUElFcnJvcldpdGhDb250ZXh0KENvbW1hbmRJbGxlZ2FsVXNlLCAiQ2FuIG5vdCBnaXZlIGNvbW1hbmQgdG8gYSBjb21tYW5kIGdyb3VwIGFmdGVyIGFscmVhZHkgYmVpbmcgcHV0IGluIGEgY29tbWFuZCBncm91cCIpOw0KKwl9DQorCWVsc2UNCisJew0KKwkJTG9ja0NoYW5nZXMoKTsNCisJCW1fcGFyZW50ID0gcGFyZW50Ow0KKwkJaWYgKG1fdGFibGUgIT0gTlVMTCkNCisJCXsNCisJCQltX3RhYmxlLT5QdXRCb29sZWFuKGtJc1BhcmVudGVkLCB0cnVlKTsNCisJCX0NCisJfQ0KK30NCisNCisvKioNCisgKiBUaGlzIGlzIHVzZWQgaW50ZXJuYWxseSB0byBtYXJrIHRoYXQgdGhlIGNvbW1hbmQgaGFzIGJlZW4gc3RhcnRlZC4NCisgKiBUaGUgbGlmZWN5Y2xlIG9mIGEgY29tbWFuZCBpczoNCisgKg0KKyAqIHN0YXJ0UnVubmluZygpIGlzIGNhbGxlZC4NCisgKiBydW4oKSBpcyBjYWxsZWQgKG11bHRpcGxlIHRpbWVzIHBvdGVudGlhbGx5KQ0KKyAqIHJlbW92ZWQoKSBpcyBjYWxsZWQNCisgKg0KKyAqIEl0IGlzIHZlcnkgaW1wb3J0YW50IHRoYXQgc3RhcnRSdW5uaW5nIGFuZCByZW1vdmVkIGJlIGNhbGxlZCBpbiBvcmRlciBvciBzb21lIGFzc3VtcHRpb25zDQorICogb2YgdGhlIGNvZGUgd2lsbCBiZSBicm9rZW4uDQorICovDQordm9pZCBDb21tYW5kOjpTdGFydFJ1bm5pbmcoKQ0KK3sNCisJbV9ydW5uaW5nID0gdHJ1ZTsNCisJbV9zdGFydFRpbWUgPSAtMTsNCisJaWYgKG1fdGFibGUgIT0gTlVMTCkNCisJCW1fdGFibGUtPlB1dEJvb2xlYW4oa1J1bm5pbmcsIHRydWUpOw0KK30NCisNCisvKioNCisgKiBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IHRoZSBjb21tYW5kIGlzIHJ1bm5pbmcuDQorICogVGhpcyBtYXkgcmV0dXJuIHRydWUgZXZlbiBpZiB0aGUgY29tbWFuZCBoYXMganVzdCBiZWVuIGNhbmNlbGVkLCBhcyBpdCBtYXkNCisgKiBub3QgaGF2ZSB5ZXQgY2FsbGVkIHtAbGluayBDb21tYW5kI2ludGVycnVwdGVkKCl9Lg0KKyAqIEByZXR1cm4gd2hldGhlciBvciBub3QgdGhlIGNvbW1hbmQgaXMgcnVubmluZw0KKyAqLw0KK2Jvb2wgQ29tbWFuZDo6SXNSdW5uaW5nKCkNCit7DQorCXJldHVybiBtX3J1bm5pbmc7DQorfQ0KKw0KKy8qKg0KKyAqIFRoaXMgd2lsbCBjYW5jZWwgdGhlIGN1cnJlbnQgY29tbWFuZC4NCisgKiA8cD5UaGlzIHdpbGwgY2FuY2VsIHRoZSBjdXJyZW50IGNvbW1hbmQgZXZlbnR1YWxseS4gIEl0IGNhbiBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMuDQorICogQW5kIGl0IGNhbiBiZSBjYWxsZWQgd2hlbiB0aGUgY29tbWFuZCBpcyBub3QgcnVubmluZy4gIElmIHRoZSBjb21tYW5kIGlzIHJ1bm5pbmcgdGhvdWdoLA0KKyAqIHRoZW4gdGhlIGNvbW1hbmQgd2lsbCBiZSBtYXJrZWQgYXMgY2FuY2VsZWQgYW5kIGV2ZW50dWFsbHkgcmVtb3ZlZC48L3A+DQorICogPHA+QSBjb21tYW5kIGNhbiBub3QgYmUgY2FuY2VsZWQNCisgKiBpZiBpdCBpcyBhIHBhcnQgb2YgYSBjb21tYW5kIGdyb3VwLCB5b3UgbXVzdCBjYW5jZWwgdGhlIGNvbW1hbmQgZ3JvdXAgaW5zdGVhZC48L3A+DQorICovDQordm9pZCBDb21tYW5kOjpDYW5jZWwoKQ0KK3sNCisJaWYgKG1fcGFyZW50ICE9IE5VTEwpDQorCQl3cGlfc2V0V1BJRXJyb3JXaXRoQ29udGV4dChDb21tYW5kSWxsZWdhbFVzZSwgIkNhbiBub3QgY2FuY2VsIGEgY29tbWFuZCB0aGF0IGlzIHBhcnQgb2YgYSBjb21tYW5kIGdyb3VwIik7DQorDQorCV9DYW5jZWwoKTsNCit9DQorDQorLyoqDQorICogVGhpcyB3b3JrcyBsaWtlIGNhbmNlbCgpLCBleGNlcHQgdGhhdCBpdCBkb2Vzbid0IHRocm93IGFuIGV4Y2VwdGlvbiBpZiBpdCBpcyBhIHBhcnQNCisgKiBvZiBhIGNvbW1hbmQgZ3JvdXAuICBTaG91bGQgb25seSBiZSBjYWxsZWQgYnkgdGhlIHBhcmVudCBjb21tYW5kIGdyb3VwLg0KKyAqLw0KK3ZvaWQgQ29tbWFuZDo6X0NhbmNlbCgpDQorew0KKwlpZiAoSXNSdW5uaW5nKCkpDQorCQltX2NhbmNlbGVkID0gdHJ1ZTsNCit9DQorDQorLyoqDQorICogUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGlzIGhhcyBiZWVuIGNhbmNlbGVkLg0KKyAqIEByZXR1cm4gd2hldGhlciBvciBub3QgdGhpcyBoYXMgYmVlbiBjYW5jZWxlZA0KKyAqLw0KK2Jvb2wgQ29tbWFuZDo6SXNDYW5jZWxlZCgpDQorew0KKwlyZXR1cm4gbV9jYW5jZWxlZDsNCit9DQorDQorLyoqDQorICogUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGlzIGNvbW1hbmQgY2FuIGJlIGludGVycnVwdGVkLg0KKyAqIEByZXR1cm4gd2hldGhlciBvciBub3QgdGhpcyBjb21tYW5kIGNhbiBiZSBpbnRlcnJ1cHRlZA0KKyAqLw0KK2Jvb2wgQ29tbWFuZDo6SXNJbnRlcnJ1cHRpYmxlKCkNCit7DQorCXJldHVybiBtX2ludGVycnVwdGlibGU7DQorfQ0KKw0KKy8qKg0KKyAqIFNldHMgd2hldGhlciBvciBub3QgdGhpcyBjb21tYW5kIGNhbiBiZSBpbnRlcnJ1cHRlZC4NCisgKiBAcGFyYW0gaW50ZXJydXB0aWJsZSB3aGV0aGVyIG9yIG5vdCB0aGlzIGNvbW1hbmQgY2FuIGJlIGludGVycnVwdGVkDQorICovDQordm9pZCBDb21tYW5kOjpTZXRJbnRlcnJ1cHRpYmxlKGJvb2wgaW50ZXJydXB0aWJsZSkNCit7DQorCW1faW50ZXJydXB0aWJsZSA9IGludGVycnVwdGlibGU7DQorfQ0KKw0KKy8qKg0KKyAqIENoZWNrcyBpZiB0aGUgY29tbWFuZCByZXF1aXJlcyB0aGUgZ2l2ZW4ge0BsaW5rIFN1YnN5c3RlbX0uDQorICogQHBhcmFtIHN5c3RlbSB0aGUgc3lzdGVtDQorICogQHJldHVybiB3aGV0aGVyIG9yIG5vdCB0aGUgc3Vic3lzdGVtIGlzIHJlcXVpcmVkIChmYWxzZSBpZiBnaXZlbiBOVUxMKQ0KKyAqLw0KK2Jvb2wgQ29tbWFuZDo6RG9lc1JlcXVpcmUoU3Vic3lzdGVtICpzeXN0ZW0pDQorew0KKwlyZXR1cm4gbV9yZXF1aXJlbWVudHMuY291bnQoc3lzdGVtKSA+IDA7DQorfQ0KKw0KKy8qKg0KKyAqIFJldHVybnMgdGhlIHtAbGluayBDb21tYW5kR3JvdXB9IHRoYXQgdGhpcyBjb21tYW5kIGlzIGEgcGFydCBvZi4NCisgKiBXaWxsIHJldHVybiBudWxsIGlmIHRoaXMge0BsaW5rIENvbW1hbmR9IGlzIG5vdCBpbiBhIGdyb3VwLg0KKyAqIEByZXR1cm4gdGhlIHtAbGluayBDb21tYW5kR3JvdXB9IHRoYXQgdGhpcyBjb21tYW5kIGlzIGEgcGFydCBvZiAob3IgbnVsbCBpZiBub3QgaW4gZ3JvdXApDQorICovDQorQ29tbWFuZEdyb3VwICpDb21tYW5kOjpHZXRHcm91cCgpDQorew0KKwlyZXR1cm4gbV9wYXJlbnQ7DQorfQ0KKw0KKy8qKg0KKyAqIFNldHMgd2hldGhlciBvciBub3QgdGhpcyB7QGxpbmsgQ29tbWFuZH0gc2hvdWxkIHJ1biB3aGVuIHRoZSByb2JvdCBpcyBkaXNhYmxlZC4NCisgKg0KKyAqIDxwPkJ5IGRlZmF1bHQgYSBjb21tYW5kIHdpbGwgbm90IHJ1biB3aGVuIHRoZSByb2JvdCBpcyBkaXNhYmxlZCwgYW5kIHdpbGwgaW4gZmFjdCBiZSBjYW5jZWxlZC48L3A+DQorICogQHBhcmFtIHJ1biB3aGV0aGVyIG9yIG5vdCB0aGlzIGNvbW1hbmQgc2hvdWxkIHJ1biB3aGVuIHRoZSByb2JvdCBpcyBkaXNhYmxlZA0KKyAqLw0KK3ZvaWQgQ29tbWFuZDo6U2V0UnVuV2hlbkRpc2FibGVkKGJvb2wgcnVuKQ0KK3sNCisJbV9ydW5XaGVuRGlzYWJsZWQgPSBydW47DQorfQ0KKw0KKy8qKg0KKyAqIFJldHVybnMgd2hldGhlciBvciBub3QgdGhpcyB7QGxpbmsgQ29tbWFuZH0gd2lsbCBydW4gd2hlbiB0aGUgcm9ib3QgaXMgZGlzYWJsZWQsIG9yIGlmIGl0IHdpbGwgY2FuY2VsIGl0c2VsZi4NCisgKiBAcmV0dXJuIHdoZXRoZXIgb3Igbm90IHRoaXMge0BsaW5rIENvbW1hbmR9IHdpbGwgcnVuIHdoZW4gdGhlIHJvYm90IGlzIGRpc2FibGVkLCBvciBpZiBpdCB3aWxsIGNhbmNlbCBpdHNlbGYNCisgKi8NCitib29sIENvbW1hbmQ6OldpbGxSdW5XaGVuRGlzYWJsZWQoKQ0KK3sNCisJcmV0dXJuIG1fcnVuV2hlbkRpc2FibGVkOw0KK30NCisNCitzdGQ6OnN0cmluZyBDb21tYW5kOjpHZXROYW1lKCkNCit7DQorCXJldHVybiBtX25hbWU7DQorfQ0KKw0KK3N0ZDo6c3RyaW5nIENvbW1hbmQ6OkdldFNtYXJ0RGFzaGJvYXJkVHlwZSgpDQorew0KKwlyZXR1cm4gIkNvbW1hbmQiOw0KK30NCisNCit2b2lkIENvbW1hbmQ6OkluaXRUYWJsZShJVGFibGUqIHRhYmxlKQ0KK3sNCisgICAgaWYobV90YWJsZSE9TlVMTCkNCisgICAgCW1fdGFibGUtPlJlbW92ZVRhYmxlTGlzdGVuZXIodGhpcyk7DQorICAgIG1fdGFibGUgPSB0YWJsZTsNCisgICAgaWYobV90YWJsZSE9TlVMTCl7DQorICAgIAltX3RhYmxlLT5QdXRTdHJpbmcoa05hbWUsIEdldE5hbWUoKSk7DQorICAgIAltX3RhYmxlLT5QdXRCb29sZWFuKGtSdW5uaW5nLCBJc1J1bm5pbmcoKSk7DQorICAgIAltX3RhYmxlLT5QdXRCb29sZWFuKGtJc1BhcmVudGVkLCBtX3BhcmVudCAhPSBOVUxMKTsNCisgICAgCW1fdGFibGUtPkFkZFRhYmxlTGlzdGVuZXIoa1J1bm5pbmcsIHRoaXMsIGZhbHNlKTsNCisgICAgfQ0KK30NCisNCitJVGFibGUqIENvbW1hbmQ6OkdldFRhYmxlKCl7DQorCXJldHVybiBtX3RhYmxlOw0KK30NCisNCit2b2lkIENvbW1hbmQ6OlZhbHVlQ2hhbmdlZChJVGFibGUqIHNvdXJjZSwgY29uc3Qgc3RkOjpzdHJpbmcmIGtleSwgRW50cnlWYWx1ZSB2YWx1ZSwgYm9vbCBpc05ldykNCit7DQorCWlmICh2YWx1ZS5iKXsNCisJCWlmKCFJc1J1bm5pbmcoKSkNCisJCQlTdGFydCgpOw0KKwl9DQorCWVsc2V7DQorCQlpZihJc1J1bm5pbmcoKSkNCisJCQlDYW5jZWwoKTsNCisJfQ0KK30NCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9Db21tYW5kcy9Db21tYW5kLmggYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9Db21tYW5kcy9Db21tYW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzYwYzhmNQotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0NvbW1hbmRzL0NvbW1hbmQuaApAQCAtMCwwICsxLDE2MiBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBDb3B5cmlnaHQgKGMpIEZJUlNUIDIwMTEuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCQkJCQkJCSAgKi8NCisvKiBPcGVuIFNvdXJjZSBTb2Z0d2FyZSAtIG1heSBiZSBtb2RpZmllZCBhbmQgc2hhcmVkIGJ5IEZSQyB0ZWFtcy4gVGhlIGNvZGUgICAqLw0KKy8qIG11c3QgYmUgYWNjb21wYW5pZWQgYnkgdGhlIEZJUlNUIEJTRCBsaWNlbnNlIGZpbGUgaW4gJChXSU5EX0JBU0UpL1dQSUxpYi4gICovDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisjaWZuZGVmIF9fQ09NTUFORF9IX18NCisjZGVmaW5lIF9fQ09NTUFORF9IX18NCisNCisjaW5jbHVkZSAiRXJyb3JCYXNlLmgiDQorI2luY2x1ZGUgIlNtYXJ0RGFzaGJvYXJkL05hbWVkU2VuZGFibGUuaCINCisjaW5jbHVkZSA8c2V0Pg0KKyNpbmNsdWRlIDxzdHJpbmc+DQorDQorY2xhc3MgQ29tbWFuZEdyb3VwOw0KK2NsYXNzIFN1YnN5c3RlbTsNCisNCisvKioNCisgKiBUaGUgQ29tbWFuZCBjbGFzcyBpcyBhdCB0aGUgdmVyeSBjb3JlIG9mIHRoZSBlbnRpcmUgY29tbWFuZCBmcmFtZXdvcmsuDQorICogRXZlcnkgY29tbWFuZCBjYW4gYmUgc3RhcnRlZCB3aXRoIGEgY2FsbCB0byB7QGxpbmsgQ29tbWFuZCNTdGFydCgpIFN0YXJ0KCl9Lg0KKyAqIE9uY2UgYSBjb21tYW5kIGlzIHN0YXJ0ZWQgaXQgd2lsbCBjYWxsIHtAbGluayBDb21tYW5kI0luaXRpYWxpemUoKSBJbml0aWFsaXplKCl9LCBhbmQgdGhlbg0KKyAqIHdpbGwgcmVwZWF0ZWRseSBjYWxsIHtAbGluayBDb21tYW5kI0V4ZWN1dGUoKSBFeGVjdXRlKCl9IHVudGlsIHRoZSB7QGxpbmsgQ29tbWFuZCNJc0ZpbmlzaGVkKCkgSXNGaW5pc2hlZCgpfQ0KKyAqIHJldHVybnMgdHJ1ZS4gIE9uY2UgaXQgZG9lcywge0BsaW5rIENvbW1hbmQjRW5kKCkgRW5kKCl9IHdpbGwgYmUgY2FsbGVkLg0KKyAqDQorICogPHA+SG93ZXZlciwgaWYgYXQgYW55IHBvaW50IHdoaWxlIGl0IGlzIHJ1bm5pbmcge0BsaW5rIENvbW1hbmQjQ2FuY2VsKCkgQ2FuY2VsKCl9IGlzIGNhbGxlZCwgdGhlbg0KKyAqIHRoZSBjb21tYW5kIHdpbGwgYmUgc3RvcHBlZCBhbmQge0BsaW5rIENvbW1hbmQjSW50ZXJydXB0ZWQoKSBJbnRlcnJ1cHRlZCgpfSB3aWxsIGJlIGNhbGxlZC48L3A+DQorICoNCisgKiA8cD5JZiBhIGNvbW1hbmQgdXNlcyBhIHtAbGluayBTdWJzeXN0ZW19LCB0aGVuIGl0IHNob3VsZCBzcGVjaWZ5IHRoYXQgaXQgZG9lcyBzbyBieQ0KKyAqIGNhbGxpbmcgdGhlIHtAbGluayBDb21tYW5kI1JlcXVpcmVzKFN1YnN5c3RlbSkgUmVxdWlyZXMoLi4uKX0gbWV0aG9kDQorICogaW4gaXRzIGNvbnN0cnVjdG9yLiBOb3RlIHRoYXQgYSBDb21tYW5kIG1heSBoYXZlIG11bHRpcGxlIHJlcXVpcmVtZW50cywgYW5kDQorICoge0BsaW5rIENvbW1hbmQjUmVxdWlyZXMoU3Vic3lzdGVtKSBSZXF1aXJlcyguLi4pfSBzaG91bGQgYmUNCisgKiBjYWxsZWQgZm9yIGVhY2ggb25lLjwvcD4NCisgKg0KKyAqIDxwPklmIGEgY29tbWFuZCBpcyBydW5uaW5nIGFuZCBhIG5ldyBjb21tYW5kIHdpdGggc2hhcmVkIHJlcXVpcmVtZW50cyBpcyBzdGFydGVkLA0KKyAqIHRoZW4gb25lIG9mIHR3byB0aGluZ3Mgd2lsbCBoYXBwZW4uICBJZiB0aGUgYWN0aXZlIGNvbW1hbmQgaXMgaW50ZXJydXB0aWJsZSwNCisgKiB0aGVuIHtAbGluayBDb21tYW5kI0NhbmNlbCgpIENhbmNlbCgpfSB3aWxsIGJlIGNhbGxlZCBhbmQgdGhlIGNvbW1hbmQgd2lsbCBiZSByZW1vdmVkDQorICogdG8gbWFrZSB3YXkgZm9yIHRoZSBuZXcgb25lLiAgSWYgdGhlIGFjdGl2ZSBjb21tYW5kIGlzIG5vdCBpbnRlcnJ1cHRpYmxlLCB0aGUNCisgKiBvdGhlciBvbmUgd2lsbCBub3QgZXZlbiBiZSBzdGFydGVkLCBhbmQgdGhlIGFjdGl2ZSBvbmUgd2lsbCBjb250aW51ZSBmdW5jdGlvbmluZy48L3A+DQorICoNCisgKiBAc2VlIENvbW1hbmRHcm91cA0KKyAqIEBzZWUgU3Vic3lzdGVtDQorICovDQorY2xhc3MgQ29tbWFuZCA6IHB1YmxpYyBFcnJvckJhc2UsIHB1YmxpYyBOYW1lZFNlbmRhYmxlLCBwdWJsaWMgSVRhYmxlTGlzdGVuZXINCit7DQorCWZyaWVuZCBjbGFzcyBDb21tYW5kR3JvdXA7DQorCWZyaWVuZCBjbGFzcyBTY2hlZHVsZXI7DQorcHVibGljOg0KKwlDb21tYW5kKCk7DQorCUNvbW1hbmQoY29uc3QgY2hhciAqbmFtZSk7DQorCUNvbW1hbmQoZG91YmxlIHRpbWVvdXQpOw0KKwlDb21tYW5kKGNvbnN0IGNoYXIgKm5hbWUsIGRvdWJsZSB0aW1lb3V0KTsNCisJdmlydHVhbCB+Q29tbWFuZCgpOw0KKwlkb3VibGUgVGltZVNpbmNlSW5pdGlhbGl6ZWQoKTsNCisJdm9pZCBSZXF1aXJlcyhTdWJzeXN0ZW0gKnMpOw0KKwlib29sIElzQ2FuY2VsZWQoKTsNCisJdm9pZCBTdGFydCgpOw0KKwlib29sIFJ1bigpOw0KKwl2b2lkIENhbmNlbCgpOw0KKwlib29sIElzUnVubmluZygpOw0KKwlib29sIElzSW50ZXJydXB0aWJsZSgpOw0KKwl2b2lkIFNldEludGVycnVwdGlibGUoYm9vbCBpbnRlcnJ1cHRpYmxlKTsNCisJYm9vbCBEb2VzUmVxdWlyZShTdWJzeXN0ZW0gKnN1YnN5c3RlbSk7DQorCXR5cGVkZWYgc3RkOjpzZXQ8U3Vic3lzdGVtICo+IFN1YnN5c3RlbVNldDsNCisJU3Vic3lzdGVtU2V0IEdldFJlcXVpcmVtZW50cygpOw0KKwlDb21tYW5kR3JvdXAgKkdldEdyb3VwKCk7DQorCXZvaWQgU2V0UnVuV2hlbkRpc2FibGVkKGJvb2wgcnVuKTsNCisJYm9vbCBXaWxsUnVuV2hlbkRpc2FibGVkKCk7DQorDQorDQorcHJvdGVjdGVkOg0KKwl2b2lkIFNldFRpbWVvdXQoZG91YmxlIHRpbWVvdXQpOw0KKwlib29sIElzVGltZWRPdXQoKTsNCisJYm9vbCBBc3NlcnRVbmxvY2tlZChjb25zdCBjaGFyICptZXNzYWdlKTsNCisJdm9pZCBTZXRQYXJlbnQoQ29tbWFuZEdyb3VwICpwYXJlbnQpOw0KKwkvKioNCisJICogVGhlIGluaXRpYWxpemUgbWV0aG9kIGlzIGNhbGxlZCB0aGUgZmlyc3QgdGltZSB0aGlzIENvbW1hbmQgaXMgcnVuIGFmdGVyIA0KKwkgKiBiZWluZyBzdGFydGVkLg0KKwkgKi8NCisJdmlydHVhbCB2b2lkIEluaXRpYWxpemUoKSA9IDA7DQorCS8qKg0KKwkgKiBUaGUgZXhlY3V0ZSBtZXRob2QgaXMgY2FsbGVkIHJlcGVhdGVkbHkgdW50aWwgdGhpcyBDb21tYW5kIGVpdGhlciBmaW5pc2hlcw0KKwkgKiBvciBpcyBjYW5jZWxlZC4NCisJICovDQorCXZpcnR1YWwgdm9pZCBFeGVjdXRlKCkgPSAwOw0KKwkvKioNCisJICogUmV0dXJucyB3aGV0aGVyIHRoaXMgY29tbWFuZCBpcyBmaW5pc2hlZC4NCisJICogSWYgaXQgaXMsIHRoZW4gdGhlIGNvbW1hbmQgd2lsbCBiZSByZW1vdmVkDQorCSAqIGFuZCB7QGxpbmsgQ29tbWFuZCNlbmQoKSBlbmQoKX0gd2lsbCBiZSBjYWxsZWQuDQorCSAqDQorCSAqIDxwPkl0IG1heSBiZSB1c2VmdWwgZm9yIGEgdGVhbSB0byByZWZlcmVuY2UgdGhlIHtAbGluayBDb21tYW5kI2lzVGltZWRPdXQoKSBpc1RpbWVkT3V0KCl9IG1ldGhvZA0KKwkgKiBmb3IgdGltZS1zZW5zaXRpdmUgY29tbWFuZHMuPC9wPg0KKwkgKiBAcmV0dXJuIHdoZXRoZXIgdGhpcyBjb21tYW5kIGlzIGZpbmlzaGVkLg0KKwkgKiBAc2VlIENvbW1hbmQjaXNUaW1lZE91dCgpIGlzVGltZWRPdXQoKQ0KKwkgKi8NCisJdmlydHVhbCBib29sIElzRmluaXNoZWQoKSA9IDA7DQorCS8qKg0KKwkgKiBDYWxsZWQgd2hlbiB0aGUgY29tbWFuZCBlbmRlZCBwZWFjZWZ1bGx5LiAgVGhpcyBpcyB3aGVyZSB5b3UgbWF5IHdhbnQNCisJICogdG8gd3JhcCB1cCBsb29zZSBlbmRzLCBsaWtlIHNodXR0aW5nIG9mZiBhIG1vdG9yIHRoYXQgd2FzIGJlaW5nIHVzZWQNCisJICogaW4gdGhlIGNvbW1hbmQuDQorCSAqLw0KKwl2aXJ0dWFsIHZvaWQgRW5kKCkgPSAwOw0KKwkvKioNCisJICogQ2FsbGVkIHdoZW4gdGhlIGNvbW1hbmQgZW5kcyBiZWNhdXNlIHNvbWVib2R5IGNhbGxlZCB7QGxpbmsgQ29tbWFuZCNjYW5jZWwoKSBjYW5jZWwoKX0NCisJICogb3IgYW5vdGhlciBjb21tYW5kIHNoYXJlZCB0aGUgc2FtZSByZXF1aXJlbWVudHMgYXMgdGhpcyBvbmUsIGFuZCBib290ZWQNCisJICogaXQgb3V0Lg0KKwkgKg0KKwkgKiA8cD5UaGlzIGlzIHdoZXJlIHlvdSBtYXkgd2FudA0KKwkgKiB0byB3cmFwIHVwIGxvb3NlIGVuZHMsIGxpa2Ugc2h1dHRpbmcgb2ZmIGEgbW90b3IgdGhhdCB3YXMgYmVpbmcgdXNlZA0KKwkgKiBpbiB0aGUgY29tbWFuZC48L3A+DQorCSAqDQorCSAqIDxwPkdlbmVyYWxseSwgaXQgaXMgdXNlZnVsIHRvIHNpbXBseSBjYWxsIHRoZSB7QGxpbmsgQ29tbWFuZCNlbmQoKSBlbmQoKX0gbWV0aG9kDQorCSAqIHdpdGhpbiB0aGlzIG1ldGhvZDwvcD4NCisJICovDQorCXZpcnR1YWwgdm9pZCBJbnRlcnJ1cHRlZCgpID0gMDsNCisJdmlydHVhbCB2b2lkIF9Jbml0aWFsaXplKCk7DQorCXZpcnR1YWwgdm9pZCBfSW50ZXJydXB0ZWQoKTsNCisJdmlydHVhbCB2b2lkIF9FeGVjdXRlKCk7DQorCXZpcnR1YWwgdm9pZCBfRW5kKCk7DQorCXZpcnR1YWwgdm9pZCBfQ2FuY2VsKCk7DQorDQorcHJpdmF0ZToNCisJdm9pZCBJbml0Q29tbWFuZChjb25zdCBjaGFyICpuYW1lLCBkb3VibGUgdGltZW91dCk7DQorCXZvaWQgTG9ja0NoYW5nZXMoKTsNCisJLypzeW5jaHJvbml6ZWQqLyB2b2lkIFJlbW92ZWQoKTsNCisJdm9pZCBTdGFydFJ1bm5pbmcoKTsNCisJdm9pZCBTdGFydFRpbWluZygpOw0KKw0KKwkvKiogVGhlIG5hbWUgb2YgdGhpcyBjb21tYW5kICovDQorCXN0ZDo6c3RyaW5nIG1fbmFtZTsNCisJLyoqIFRoZSB0aW1lIHNpbmNlIHRoaXMgY29tbWFuZCB3YXMgaW5pdGlhbGl6ZWQgKi8NCisJZG91YmxlIG1fc3RhcnRUaW1lOw0KKwkvKiogVGhlIHRpbWUgKGluIHNlY29uZHMpIGJlZm9yZSB0aGlzIGNvbW1hbmQgInRpbWVzIG91dCIgKG9yIC0xIGlmIG5vIHRpbWVvdXQpICovDQorCWRvdWJsZSBtX3RpbWVvdXQ7DQorCS8qKiBXaGV0aGVyIG9yIG5vdCB0aGlzIGNvbW1hbmQgaGFzIGJlZW4gaW5pdGlhbGl6ZWQgKi8NCisJYm9vbCBtX2luaXRpYWxpemVkOw0KKwkvKiogVGhlIHJlcXVpcmVtZW50cyAob3IgbnVsbCBpZiBubyByZXF1aXJlbWVudHMpICovDQorCVN1YnN5c3RlbVNldCBtX3JlcXVpcmVtZW50czsNCisJLyoqIFdoZXRoZXIgb3Igbm90IGl0IGlzIHJ1bm5pbmcgKi8NCisJYm9vbCBtX3J1bm5pbmc7DQorCS8qKiBXaGV0aGVyIG9yIG5vdCBpdCBpcyBpbnRlcnJ1cHRpYmxlKi8NCisJYm9vbCBtX2ludGVycnVwdGlibGU7DQorCS8qKiBXaGV0aGVyIG9yIG5vdCBpdCBoYXMgYmVlbiBjYW5jZWxlZCAqLw0KKwlib29sIG1fY2FuY2VsZWQ7DQorCS8qKiBXaGV0aGVyIG9yIG5vdCBpdCBoYXMgYmVlbiBsb2NrZWQgKi8NCisJYm9vbCBtX2xvY2tlZDsNCisJLyoqIFdoZXRoZXIgdGhpcyBjb21tYW5kIHNob3VsZCBydW4gd2hlbiB0aGUgcm9ib3QgaXMgZGlzYWJsZWQgKi8NCisJYm9vbCBtX3J1bldoZW5EaXNhYmxlZDsNCisJLyoqIFRoZSB7QGxpbmsgQ29tbWFuZEdyb3VwfSB0aGlzIGlzIGluICovDQorCUNvbW1hbmRHcm91cCAqbV9wYXJlbnQ7DQorCQ0KKwkNCitwdWJsaWM6DQorCXZpcnR1YWwgc3RkOjpzdHJpbmcgR2V0TmFtZSgpOw0KKwl2aXJ0dWFsIHZvaWQgSW5pdFRhYmxlKElUYWJsZSogdGFibGUpOw0KKwl2aXJ0dWFsIElUYWJsZSogR2V0VGFibGUoKTsNCisJdmlydHVhbCBzdGQ6OnN0cmluZyBHZXRTbWFydERhc2hib2FyZFR5cGUoKTsNCisJdmlydHVhbCB2b2lkIFZhbHVlQ2hhbmdlZChJVGFibGUqIHNvdXJjZSwgY29uc3Qgc3RkOjpzdHJpbmcmIGtleSwgRW50cnlWYWx1ZSB2YWx1ZSwgYm9vbCBpc05ldyk7DQorcHJvdGVjdGVkOg0KKwlJVGFibGUqIG1fdGFibGU7DQorfTsNCisNCisjZW5kaWYNCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9Db21tYW5kcy9Db21tYW5kR3JvdXAuY3BwIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvQ29tbWFuZHMvQ29tbWFuZEdyb3VwLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mY2Y2ZDQxCi0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvQ29tbWFuZHMvQ29tbWFuZEdyb3VwLmNwcApAQCAtMCwwICsxLDM4MyBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBDb3B5cmlnaHQgKGMpIEZJUlNUIDIwMTEuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCQkJCQkJCSAgKi8NCisvKiBPcGVuIFNvdXJjZSBTb2Z0d2FyZSAtIG1heSBiZSBtb2RpZmllZCBhbmQgc2hhcmVkIGJ5IEZSQyB0ZWFtcy4gVGhlIGNvZGUgICAqLw0KKy8qIG11c3QgYmUgYWNjb21wYW5pZWQgYnkgdGhlIEZJUlNUIEJTRCBsaWNlbnNlIGZpbGUgaW4gJChXSU5EX0JBU0UpL1dQSUxpYi4gICovDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisjaW5jbHVkZSAiQ29tbWFuZHMvQ29tbWFuZEdyb3VwLmgiDQorI2luY2x1ZGUgIldQSUVycm9ycy5oIg0KKw0KKy8qKg0KKyAqIENyZWF0ZXMgYSBuZXcge0BsaW5rIENvbW1hbmRHcm91cCBDb21tYW5kR3JvdXB9Lg0KKyAqLw0KK0NvbW1hbmRHcm91cDo6Q29tbWFuZEdyb3VwKCkNCit7DQorCW1fY3VycmVudENvbW1hbmRJbmRleCA9IC0xOw0KK30NCisNCisvKioNCisgKiBDcmVhdGVzIGEgbmV3IHtAbGluayBDb21tYW5kR3JvdXAgQ29tbWFuZEdyb3VwfSB3aXRoIHRoZSBnaXZlbiBuYW1lLg0KKyAqIEBwYXJhbSBuYW1lIHRoZSBuYW1lIGZvciB0aGlzIGNvbW1hbmQgZ3JvdXANCisgKi8NCitDb21tYW5kR3JvdXA6OkNvbW1hbmRHcm91cChjb25zdCBjaGFyICpuYW1lKSA6DQorCUNvbW1hbmQobmFtZSkNCit7DQorCW1fY3VycmVudENvbW1hbmRJbmRleCA9IC0xOw0KK30NCisNCitDb21tYW5kR3JvdXA6On5Db21tYW5kR3JvdXAoKQ0KK3sNCit9DQorDQorLyoqDQorICogQWRkcyBhIG5ldyB7QGxpbmsgQ29tbWFuZCBDb21tYW5kfSB0byB0aGUgZ3JvdXAuICBUaGUge0BsaW5rIENvbW1hbmQgQ29tbWFuZH0gd2lsbCBiZSBzdGFydGVkIGFmdGVyDQorICogYWxsIHRoZSBwcmV2aW91c2x5IGFkZGVkIHtAbGluayBDb21tYW5kIENvbW1hbmRzfS4NCisgKg0KKyAqIDxwPk5vdGUgdGhhdCBhbnkgcmVxdWlyZW1lbnRzIHRoZSBnaXZlbiB7QGxpbmsgQ29tbWFuZCBDb21tYW5kfSBoYXMgd2lsbCBiZSBhZGRlZCB0byB0aGUNCisgKiBncm91cC4gIEZvciB0aGlzIHJlYXNvbiwgYSB7QGxpbmsgQ29tbWFuZCBDb21tYW5kJ3N9IHJlcXVpcmVtZW50cyBjYW4gbm90IGJlIGNoYW5nZWQgYWZ0ZXINCisgKiBiZWluZyBhZGRlZCB0byBhIGdyb3VwLjwvcD4NCisgKg0KKyAqIDxwPkl0IGlzIHJlY29tbWVuZGVkIHRoYXQgdGhpcyBtZXRob2QgYmUgY2FsbGVkIGluIHRoZSBjb25zdHJ1Y3Rvci48L3A+DQorICogDQorICogQHBhcmFtIGNvbW1hbmQgVGhlIHtAbGluayBDb21tYW5kIENvbW1hbmR9IHRvIGJlIGFkZGVkDQorICovDQordm9pZCBDb21tYW5kR3JvdXA6OkFkZFNlcXVlbnRpYWwoQ29tbWFuZCAqY29tbWFuZCkNCit7DQorCWlmIChjb21tYW5kID09IE5VTEwpDQorCXsNCisJCXdwaV9zZXRXUElFcnJvcldpdGhDb250ZXh0KE51bGxQYXJhbWV0ZXIsICJjb21tYW5kIik7DQorCQlyZXR1cm47DQorCX0NCisJaWYgKCFBc3NlcnRVbmxvY2tlZCgiQ2Fubm90IGFkZCBuZXcgY29tbWFuZCB0byBjb21tYW5kIGdyb3VwIikpDQorCQlyZXR1cm47DQorDQorCWNvbW1hbmQtPlNldFBhcmVudCh0aGlzKTsNCisNCisJbV9jb21tYW5kcy5wdXNoX2JhY2soQ29tbWFuZEdyb3VwRW50cnkoY29tbWFuZCwgQ29tbWFuZEdyb3VwRW50cnk6OmtTZXF1ZW5jZV9JblNlcXVlbmNlKSk7DQorCS8vIEl0ZXJhdGUgdGhyb3VnaCBjb21tYW5kLT5HZXRSZXF1aXJlbWVudHMoKSBhbmQgY2FsbCBSZXF1aXJlcygpIG9uIGVhY2ggcmVxdWlyZWQgc3Vic3lzdGVtDQorCUNvbW1hbmQ6OlN1YnN5c3RlbVNldCByZXF1aXJlbWVudHMgPSBjb21tYW5kLT5HZXRSZXF1aXJlbWVudHMoKTsNCisJQ29tbWFuZDo6U3Vic3lzdGVtU2V0OjppdGVyYXRvciBpdGVyID0gcmVxdWlyZW1lbnRzLmJlZ2luKCk7DQorCWZvciAoOyBpdGVyICE9IHJlcXVpcmVtZW50cy5lbmQoKTsgaXRlcisrKQ0KKwkJUmVxdWlyZXMoKml0ZXIpOw0KK30NCisNCisvKioNCisgKiBBZGRzIGEgbmV3IHtAbGluayBDb21tYW5kIENvbW1hbmR9IHRvIHRoZSBncm91cCB3aXRoIGEgZ2l2ZW4gdGltZW91dC4NCisgKiBUaGUge0BsaW5rIENvbW1hbmQgQ29tbWFuZH0gd2lsbCBiZSBzdGFydGVkIGFmdGVyIGFsbCB0aGUgcHJldmlvdXNseSBhZGRlZCBjb21tYW5kcy4NCisgKg0KKyAqIDxwPk9uY2UgdGhlIHtAbGluayBDb21tYW5kIENvbW1hbmR9IGlzIHN0YXJ0ZWQsIGl0IHdpbGwgYmUgcnVuIHVudGlsIGl0IGZpbmlzaGVzIG9yIHRoZSB0aW1lDQorICogZXhwaXJlcywgd2hpY2hldmVyIGlzIHNvb25lci4gIE5vdGUgdGhhdCB0aGUgZ2l2ZW4ge0BsaW5rIENvbW1hbmQgQ29tbWFuZH0gd2lsbCBoYXZlIG5vDQorICoga25vd2xlZGdlIHRoYXQgaXQgaXMgb24gYSB0aW1lci48L3A+DQorICoNCisgKiA8cD5Ob3RlIHRoYXQgYW55IHJlcXVpcmVtZW50cyB0aGUgZ2l2ZW4ge0BsaW5rIENvbW1hbmQgQ29tbWFuZH0gaGFzIHdpbGwgYmUgYWRkZWQgdG8gdGhlDQorICogZ3JvdXAuICBGb3IgdGhpcyByZWFzb24sIGEge0BsaW5rIENvbW1hbmQgQ29tbWFuZCdzfSByZXF1aXJlbWVudHMgY2FuIG5vdCBiZSBjaGFuZ2VkIGFmdGVyDQorICogYmVpbmcgYWRkZWQgdG8gYSBncm91cC48L3A+DQorICoNCisgKiA8cD5JdCBpcyByZWNvbW1lbmRlZCB0aGF0IHRoaXMgbWV0aG9kIGJlIGNhbGxlZCBpbiB0aGUgY29uc3RydWN0b3IuPC9wPg0KKyAqDQorICogQHBhcmFtIGNvbW1hbmQgVGhlIHtAbGluayBDb21tYW5kIENvbW1hbmR9IHRvIGJlIGFkZGVkDQorICogQHBhcmFtIHRpbWVvdXQgVGhlIHRpbWVvdXQgKGluIHNlY29uZHMpDQorICovDQordm9pZCBDb21tYW5kR3JvdXA6OkFkZFNlcXVlbnRpYWwoQ29tbWFuZCAqY29tbWFuZCwgZG91YmxlIHRpbWVvdXQpDQorew0KKwlpZiAoY29tbWFuZCA9PSBOVUxMKQ0KKwl7DQorCQl3cGlfc2V0V1BJRXJyb3JXaXRoQ29udGV4dChOdWxsUGFyYW1ldGVyLCAiY29tbWFuZCIpOw0KKwkJcmV0dXJuOw0KKwl9DQorCWlmICghQXNzZXJ0VW5sb2NrZWQoIkNhbm5vdCBhZGQgbmV3IGNvbW1hbmQgdG8gY29tbWFuZCBncm91cCIpKQ0KKwkJcmV0dXJuOw0KKwlpZiAodGltZW91dCA8IDAuMCkNCisJew0KKwkJd3BpX3NldFdQSUVycm9yV2l0aENvbnRleHQoUGFyYW1ldGVyT3V0T2ZSYW5nZSwgInRpbWVvdXQgPCAwLjAiKTsNCisJCXJldHVybjsNCisJfQ0KKw0KKwljb21tYW5kLT5TZXRQYXJlbnQodGhpcyk7DQorDQorCW1fY29tbWFuZHMucHVzaF9iYWNrKENvbW1hbmRHcm91cEVudHJ5KGNvbW1hbmQsIENvbW1hbmRHcm91cEVudHJ5OjprU2VxdWVuY2VfSW5TZXF1ZW5jZSwgdGltZW91dCkpOw0KKwkvLyBJdGVyYXRlIHRocm91Z2ggY29tbWFuZC0+R2V0UmVxdWlyZW1lbnRzKCkgYW5kIGNhbGwgUmVxdWlyZXMoKSBvbiBlYWNoIHJlcXVpcmVkIHN1YnN5c3RlbQ0KKwlDb21tYW5kOjpTdWJzeXN0ZW1TZXQgcmVxdWlyZW1lbnRzID0gY29tbWFuZC0+R2V0UmVxdWlyZW1lbnRzKCk7DQorCUNvbW1hbmQ6OlN1YnN5c3RlbVNldDo6aXRlcmF0b3IgaXRlciA9IHJlcXVpcmVtZW50cy5iZWdpbigpOw0KKwlmb3IgKDsgaXRlciAhPSByZXF1aXJlbWVudHMuZW5kKCk7IGl0ZXIrKykNCisJCVJlcXVpcmVzKCppdGVyKTsNCit9DQorDQorLyoqDQorICogQWRkcyBhIG5ldyBjaGlsZCB7QGxpbmsgQ29tbWFuZH0gdG8gdGhlIGdyb3VwLiAgVGhlIHtAbGluayBDb21tYW5kfSB3aWxsIGJlIHN0YXJ0ZWQgYWZ0ZXINCisgKiBhbGwgdGhlIHByZXZpb3VzbHkgYWRkZWQge0BsaW5rIENvbW1hbmQgQ29tbWFuZHN9Lg0KKyAqDQorICogPHA+SW5zdGVhZCBvZiB3YWl0aW5nIGZvciB0aGUgY2hpbGQgdG8gZmluaXNoLCBhIHtAbGluayBDb21tYW5kR3JvdXB9IHdpbGwgaGF2ZSBpdA0KKyAqIHJ1biBhdCB0aGUgc2FtZSB0aW1lIGFzIHRoZSBzdWJzZXF1ZW50IHtAbGluayBDb21tYW5kIENvbW1hbmRzfS4gIFRoZSBjaGlsZCB3aWxsIHJ1biB1bnRpbCBlaXRoZXINCisgKiBpdCBmaW5pc2hlcywgYSBuZXcgY2hpbGQgd2l0aCBjb25mbGljdGluZyByZXF1aXJlbWVudHMgaXMgc3RhcnRlZCwgb3INCisgKiB0aGUgbWFpbiBzZXF1ZW5jZSBydW5zIGEge0BsaW5rIENvbW1hbmR9IHdpdGggY29uZmxpY3RpbmcgcmVxdWlyZW1lbnRzLiAgSW4gdGhlIGxhdHRlcg0KKyAqIHR3byBjYXNlcywgdGhlIGNoaWxkIHdpbGwgYmUgY2FuY2VsZWQgZXZlbiBpZiBpdCBzYXlzIGl0IGNhbid0IGJlDQorICogaW50ZXJydXB0ZWQuPC9wPg0KKyAqDQorICogPHA+Tm90ZSB0aGF0IGFueSByZXF1aXJlbWVudHMgdGhlIGdpdmVuIHtAbGluayBDb21tYW5kIENvbW1hbmR9IGhhcyB3aWxsIGJlIGFkZGVkIHRvIHRoZQ0KKyAqIGdyb3VwLiAgRm9yIHRoaXMgcmVhc29uLCBhIHtAbGluayBDb21tYW5kIENvbW1hbmQnc30gcmVxdWlyZW1lbnRzIGNhbiBub3QgYmUgY2hhbmdlZCBhZnRlcg0KKyAqIGJlaW5nIGFkZGVkIHRvIGEgZ3JvdXAuPC9wPg0KKyAqDQorICogPHA+SXQgaXMgcmVjb21tZW5kZWQgdGhhdCB0aGlzIG1ldGhvZCBiZSBjYWxsZWQgaW4gdGhlIGNvbnN0cnVjdG9yLjwvcD4NCisgKg0KKyAqIEBwYXJhbSBjb21tYW5kIFRoZSBjb21tYW5kIHRvIGJlIGFkZGVkDQorICovDQordm9pZCBDb21tYW5kR3JvdXA6OkFkZFBhcmFsbGVsKENvbW1hbmQgKmNvbW1hbmQpDQorew0KKwlpZiAoY29tbWFuZCA9PSBOVUxMKQ0KKwl7DQorCQl3cGlfc2V0V1BJRXJyb3JXaXRoQ29udGV4dChOdWxsUGFyYW1ldGVyLCAiY29tbWFuZCIpOw0KKwkJcmV0dXJuOw0KKwl9DQorCWlmICghQXNzZXJ0VW5sb2NrZWQoIkNhbm5vdCBhZGQgbmV3IGNvbW1hbmQgdG8gY29tbWFuZCBncm91cCIpKQ0KKwkJcmV0dXJuOw0KKw0KKwljb21tYW5kLT5TZXRQYXJlbnQodGhpcyk7DQorDQorCW1fY29tbWFuZHMucHVzaF9iYWNrKENvbW1hbmRHcm91cEVudHJ5KGNvbW1hbmQsIENvbW1hbmRHcm91cEVudHJ5OjprU2VxdWVuY2VfQnJhbmNoQ2hpbGQpKTsNCisJLy8gSXRlcmF0ZSB0aHJvdWdoIGNvbW1hbmQtPkdldFJlcXVpcmVtZW50cygpIGFuZCBjYWxsIFJlcXVpcmVzKCkgb24gZWFjaCByZXF1aXJlZCBzdWJzeXN0ZW0NCisJQ29tbWFuZDo6U3Vic3lzdGVtU2V0IHJlcXVpcmVtZW50cyA9IGNvbW1hbmQtPkdldFJlcXVpcmVtZW50cygpOw0KKwlDb21tYW5kOjpTdWJzeXN0ZW1TZXQ6Oml0ZXJhdG9yIGl0ZXIgPSByZXF1aXJlbWVudHMuYmVnaW4oKTsNCisJZm9yICg7IGl0ZXIgIT0gcmVxdWlyZW1lbnRzLmVuZCgpOyBpdGVyKyspDQorCQlSZXF1aXJlcygqaXRlcik7DQorfQ0KKw0KKy8qKg0KKyAqIEFkZHMgYSBuZXcgY2hpbGQge0BsaW5rIENvbW1hbmR9IHRvIHRoZSBncm91cCB3aXRoIHRoZSBnaXZlbiB0aW1lb3V0LiAgVGhlIHtAbGluayBDb21tYW5kfSB3aWxsIGJlIHN0YXJ0ZWQgYWZ0ZXINCisgKiBhbGwgdGhlIHByZXZpb3VzbHkgYWRkZWQge0BsaW5rIENvbW1hbmQgQ29tbWFuZHN9Lg0KKyAqDQorICogPHA+T25jZSB0aGUge0BsaW5rIENvbW1hbmQgQ29tbWFuZH0gaXMgc3RhcnRlZCwgaXQgd2lsbCBydW4gdW50aWwgaXQgZmluaXNoZXMsIGlzIGludGVycnVwdGVkLA0KKyAqIG9yIHRoZSB0aW1lIGV4cGlyZXMsIHdoaWNoZXZlciBpcyBzb29uZXIuICBOb3RlIHRoYXQgdGhlIGdpdmVuIHtAbGluayBDb21tYW5kIENvbW1hbmR9IHdpbGwgaGF2ZSBubw0KKyAqIGtub3dsZWRnZSB0aGF0IGl0IGlzIG9uIGEgdGltZXIuPC9wPg0KKyAqDQorICogPHA+SW5zdGVhZCBvZiB3YWl0aW5nIGZvciB0aGUgY2hpbGQgdG8gZmluaXNoLCBhIHtAbGluayBDb21tYW5kR3JvdXB9IHdpbGwgaGF2ZSBpdA0KKyAqIHJ1biBhdCB0aGUgc2FtZSB0aW1lIGFzIHRoZSBzdWJzZXF1ZW50IHtAbGluayBDb21tYW5kIENvbW1hbmRzfS4gIFRoZSBjaGlsZCB3aWxsIHJ1biB1bnRpbCBlaXRoZXINCisgKiBpdCBmaW5pc2hlcywgdGhlIHRpbWVvdXQgZXhwaXJlcywgYSBuZXcgY2hpbGQgd2l0aCBjb25mbGljdGluZyByZXF1aXJlbWVudHMgaXMgc3RhcnRlZCwgb3INCisgKiB0aGUgbWFpbiBzZXF1ZW5jZSBydW5zIGEge0BsaW5rIENvbW1hbmR9IHdpdGggY29uZmxpY3RpbmcgcmVxdWlyZW1lbnRzLiAgSW4gdGhlIGxhdHRlcg0KKyAqIHR3byBjYXNlcywgdGhlIGNoaWxkIHdpbGwgYmUgY2FuY2VsZWQgZXZlbiBpZiBpdCBzYXlzIGl0IGNhbid0IGJlDQorICogaW50ZXJydXB0ZWQuPC9wPg0KKyAqDQorICogPHA+Tm90ZSB0aGF0IGFueSByZXF1aXJlbWVudHMgdGhlIGdpdmVuIHtAbGluayBDb21tYW5kIENvbW1hbmR9IGhhcyB3aWxsIGJlIGFkZGVkIHRvIHRoZQ0KKyAqIGdyb3VwLiAgRm9yIHRoaXMgcmVhc29uLCBhIHtAbGluayBDb21tYW5kIENvbW1hbmQnc30gcmVxdWlyZW1lbnRzIGNhbiBub3QgYmUgY2hhbmdlZCBhZnRlcg0KKyAqIGJlaW5nIGFkZGVkIHRvIGEgZ3JvdXAuPC9wPg0KKyAqDQorICogPHA+SXQgaXMgcmVjb21tZW5kZWQgdGhhdCB0aGlzIG1ldGhvZCBiZSBjYWxsZWQgaW4gdGhlIGNvbnN0cnVjdG9yLjwvcD4NCisgKg0KKyAqIEBwYXJhbSBjb21tYW5kIFRoZSBjb21tYW5kIHRvIGJlIGFkZGVkDQorICogQHBhcmFtIHRpbWVvdXQgVGhlIHRpbWVvdXQgKGluIHNlY29uZHMpDQorICovDQordm9pZCBDb21tYW5kR3JvdXA6OkFkZFBhcmFsbGVsKENvbW1hbmQgKmNvbW1hbmQsIGRvdWJsZSB0aW1lb3V0KQ0KK3sNCisJaWYgKGNvbW1hbmQgPT0gTlVMTCkNCisJew0KKwkJd3BpX3NldFdQSUVycm9yV2l0aENvbnRleHQoTnVsbFBhcmFtZXRlciwgImNvbW1hbmQiKTsNCisJCXJldHVybjsNCisJfQ0KKwlpZiAoIUFzc2VydFVubG9ja2VkKCJDYW5ub3QgYWRkIG5ldyBjb21tYW5kIHRvIGNvbW1hbmQgZ3JvdXAiKSkNCisJCXJldHVybjsNCisJaWYgKHRpbWVvdXQgPCAwLjApDQorCXsNCisJCXdwaV9zZXRXUElFcnJvcldpdGhDb250ZXh0KFBhcmFtZXRlck91dE9mUmFuZ2UsICJ0aW1lb3V0IDwgMC4wIik7DQorCQlyZXR1cm47DQorCX0NCisNCisJY29tbWFuZC0+U2V0UGFyZW50KHRoaXMpOw0KKw0KKwltX2NvbW1hbmRzLnB1c2hfYmFjayhDb21tYW5kR3JvdXBFbnRyeShjb21tYW5kLCBDb21tYW5kR3JvdXBFbnRyeTo6a1NlcXVlbmNlX0JyYW5jaENoaWxkLCB0aW1lb3V0KSk7DQorCS8vIEl0ZXJhdGUgdGhyb3VnaCBjb21tYW5kLT5HZXRSZXF1aXJlbWVudHMoKSBhbmQgY2FsbCBSZXF1aXJlcygpIG9uIGVhY2ggcmVxdWlyZWQgc3Vic3lzdGVtDQorCUNvbW1hbmQ6OlN1YnN5c3RlbVNldCByZXF1aXJlbWVudHMgPSBjb21tYW5kLT5HZXRSZXF1aXJlbWVudHMoKTsNCisJQ29tbWFuZDo6U3Vic3lzdGVtU2V0OjppdGVyYXRvciBpdGVyID0gcmVxdWlyZW1lbnRzLmJlZ2luKCk7DQorCWZvciAoOyBpdGVyICE9IHJlcXVpcmVtZW50cy5lbmQoKTsgaXRlcisrKQ0KKwkJUmVxdWlyZXMoKml0ZXIpOw0KK30NCisNCit2b2lkIENvbW1hbmRHcm91cDo6X0luaXRpYWxpemUoKQ0KK3sNCisJbV9jdXJyZW50Q29tbWFuZEluZGV4ID0gLTE7DQorfQ0KKw0KK3ZvaWQgQ29tbWFuZEdyb3VwOjpfRXhlY3V0ZSgpDQorew0KKwlDb21tYW5kR3JvdXBFbnRyeSBlbnRyeTsNCisJQ29tbWFuZCAqY21kID0gTlVMTDsNCisJYm9vbCBmaXJzdFJ1biA9IGZhbHNlOw0KKw0KKwlpZiAobV9jdXJyZW50Q29tbWFuZEluZGV4ID09IC0xKQ0KKwl7DQorCQlmaXJzdFJ1biA9IHRydWU7DQorCQltX2N1cnJlbnRDb21tYW5kSW5kZXggPSAwOw0KKwl9DQorDQorCXdoaWxlICgodW5zaWduZWQpbV9jdXJyZW50Q29tbWFuZEluZGV4IDwgbV9jb21tYW5kcy5zaXplKCkpDQorCXsNCisJCWlmIChjbWQgIT0gTlVMTCkNCisJCXsNCisJCQlpZiAoZW50cnkuSXNUaW1lZE91dCgpKQ0KKwkJCQljbWQtPl9DYW5jZWwoKTsNCisNCisJCQlpZiAoY21kLT5SdW4oKSkNCisJCQl7DQorCQkJCWJyZWFrOw0KKwkJCX0NCisJCQllbHNlDQorCQkJew0KKwkJCQljbWQtPlJlbW92ZWQoKTsNCisJCQkJbV9jdXJyZW50Q29tbWFuZEluZGV4Kys7DQorCQkJCWZpcnN0UnVuID0gdHJ1ZTsNCisJCQkJY21kID0gTlVMTDsNCisJCQkJY29udGludWU7DQorCQkJfQ0KKwkJfQ0KKw0KKwkJZW50cnkgPSBtX2NvbW1hbmRzW21fY3VycmVudENvbW1hbmRJbmRleF07DQorCQljbWQgPSBOVUxMOw0KKw0KKwkJc3dpdGNoIChlbnRyeS5tX3N0YXRlKQ0KKwkJew0KKwkJCWNhc2UgQ29tbWFuZEdyb3VwRW50cnk6OmtTZXF1ZW5jZV9JblNlcXVlbmNlOg0KKwkJCQljbWQgPSBlbnRyeS5tX2NvbW1hbmQ7DQorCQkJCWlmIChmaXJzdFJ1bikNCisJCQkJew0KKwkJCQkJY21kLT5TdGFydFJ1bm5pbmcoKTsNCisJCQkJCUNhbmNlbENvbmZsaWN0cyhjbWQpOw0KKwkJCQkJZmlyc3RSdW4gPSBmYWxzZTsNCisJCQkJfQ0KKwkJCQlicmVhazsNCisNCisJCQljYXNlIENvbW1hbmRHcm91cEVudHJ5OjprU2VxdWVuY2VfQnJhbmNoUGVlcjoNCisJCQkJbV9jdXJyZW50Q29tbWFuZEluZGV4Kys7DQorCQkJCWVudHJ5Lm1fY29tbWFuZC0+U3RhcnQoKTsNCisJCQkJYnJlYWs7DQorDQorCQkJY2FzZSBDb21tYW5kR3JvdXBFbnRyeTo6a1NlcXVlbmNlX0JyYW5jaENoaWxkOg0KKwkJCQltX2N1cnJlbnRDb21tYW5kSW5kZXgrKzsNCisJCQkJQ2FuY2VsQ29uZmxpY3RzKGVudHJ5Lm1fY29tbWFuZCk7DQorCQkJCWVudHJ5Lm1fY29tbWFuZC0+U3RhcnRSdW5uaW5nKCk7DQorCQkJCW1fY2hpbGRyZW4ucHVzaF9iYWNrKGVudHJ5KTsNCisJCQkJYnJlYWs7DQorCQl9DQorCX0NCisNCisJLy8gUnVuIENoaWxkcmVuDQorCUNvbW1hbmRMaXN0OjppdGVyYXRvciBpdGVyID0gbV9jaGlsZHJlbi5iZWdpbigpOw0KKwlmb3IgKDsgaXRlciAhPSBtX2NoaWxkcmVuLmVuZCgpOykNCisJew0KKwkJZW50cnkgPSAqaXRlcjsNCisJCUNvbW1hbmQgKmNoaWxkID0gZW50cnkubV9jb21tYW5kOw0KKwkJaWYgKGVudHJ5LklzVGltZWRPdXQoKSkNCisJCQljaGlsZC0+X0NhbmNlbCgpOw0KKw0KKwkJaWYgKCFjaGlsZC0+UnVuKCkpDQorCQl7DQorCQkJY2hpbGQtPlJlbW92ZWQoKTsNCisJCQlpdGVyID0gbV9jaGlsZHJlbi5lcmFzZShpdGVyKTsNCisJCX0NCisJCWVsc2UNCisJCXsNCisJCQlpdGVyKys7DQorCQl9DQorCX0NCit9DQorDQordm9pZCBDb21tYW5kR3JvdXA6Ol9FbmQoKQ0KK3sNCisJLy8gVGhlb3JldGljYWxseSwgd2UgZG9uJ3QgaGF2ZSB0byBjaGVjayB0aGlzLCBidXQgd2UgZG8gaWYgdGVhbXMgb3ZlcnJpZGUgdGhlIElzRmluaXNoZWQgbWV0aG9kDQorCWlmIChtX2N1cnJlbnRDb21tYW5kSW5kZXggIT0gLTEgJiYgKHVuc2lnbmVkKW1fY3VycmVudENvbW1hbmRJbmRleCA8IG1fY29tbWFuZHMuc2l6ZSgpKQ0KKwl7DQorCQlDb21tYW5kICpjbWQgPSBtX2NvbW1hbmRzW21fY3VycmVudENvbW1hbmRJbmRleF0ubV9jb21tYW5kOw0KKwkJY21kLT5fQ2FuY2VsKCk7DQorCQljbWQtPlJlbW92ZWQoKTsNCisJfQ0KKw0KKwlDb21tYW5kTGlzdDo6aXRlcmF0b3IgaXRlciA9IG1fY2hpbGRyZW4uYmVnaW4oKTsNCisJZm9yICg7IGl0ZXIgIT0gbV9jaGlsZHJlbi5lbmQoKTsgaXRlcisrKQ0KKwl7DQorCQlDb21tYW5kICpjbWQgPSBpdGVyLT5tX2NvbW1hbmQ7DQorCQljbWQtPl9DYW5jZWwoKTsNCisJCWNtZC0+UmVtb3ZlZCgpOw0KKwl9DQorCW1fY2hpbGRyZW4uY2xlYXIoKTsNCit9DQorDQordm9pZCBDb21tYW5kR3JvdXA6Ol9JbnRlcnJ1cHRlZCgpDQorew0KKwlfRW5kKCk7DQorfQ0KKw0KKy8vIENhbiBiZSBvdmVyd3JpdHRlbiBieSB0ZWFtcw0KK3ZvaWQgQ29tbWFuZEdyb3VwOjpJbml0aWFsaXplKCkNCit7DQorfQ0KKw0KKy8vIENhbiBiZSBvdmVyd3JpdHRlbiBieSB0ZWFtcw0KK3ZvaWQgQ29tbWFuZEdyb3VwOjpFeGVjdXRlKCkNCit7DQorfQ0KKw0KKy8vIENhbiBiZSBvdmVyd3JpdHRlbiBieSB0ZWFtcw0KK3ZvaWQgQ29tbWFuZEdyb3VwOjpFbmQoKQ0KK3sNCit9DQorDQorLy8gQ2FuIGJlIG92ZXJ3cml0dGVuIGJ5IHRlYW1zDQordm9pZCBDb21tYW5kR3JvdXA6OkludGVycnVwdGVkKCkNCit7DQorfQ0KKw0KK2Jvb2wgQ29tbWFuZEdyb3VwOjpJc0ZpbmlzaGVkKCkNCit7DQorCXJldHVybiAodW5zaWduZWQpbV9jdXJyZW50Q29tbWFuZEluZGV4ID49IG1fY29tbWFuZHMuc2l6ZSgpICYmIG1fY2hpbGRyZW4uZW1wdHkoKTsNCit9DQorDQorYm9vbCBDb21tYW5kR3JvdXA6OklzSW50ZXJydXB0aWJsZSgpDQorew0KKwlpZiAoIUNvbW1hbmQ6OklzSW50ZXJydXB0aWJsZSgpKQ0KKwkJcmV0dXJuIGZhbHNlOw0KKw0KKwlpZiAobV9jdXJyZW50Q29tbWFuZEluZGV4ICE9IC0xICYmICh1bnNpZ25lZCltX2N1cnJlbnRDb21tYW5kSW5kZXggPCBtX2NvbW1hbmRzLnNpemUoKSkNCisJew0KKwkJQ29tbWFuZCAqY21kID0gbV9jb21tYW5kc1ttX2N1cnJlbnRDb21tYW5kSW5kZXhdLm1fY29tbWFuZDsNCisJCWlmICghY21kLT5Jc0ludGVycnVwdGlibGUoKSkNCisJCQlyZXR1cm4gZmFsc2U7DQorCX0NCisNCisJQ29tbWFuZExpc3Q6Oml0ZXJhdG9yIGl0ZXIgPSBtX2NoaWxkcmVuLmJlZ2luKCk7DQorCWZvciAoOyBpdGVyICE9IG1fY2hpbGRyZW4uZW5kKCk7IGl0ZXIrKykNCisJew0KKwkJaWYgKCFpdGVyLT5tX2NvbW1hbmQtPklzSW50ZXJydXB0aWJsZSgpKQ0KKwkJCXJldHVybiBmYWxzZTsNCisJfQ0KKw0KKwlyZXR1cm4gdHJ1ZTsNCit9DQorDQordm9pZCBDb21tYW5kR3JvdXA6OkNhbmNlbENvbmZsaWN0cyhDb21tYW5kICpjb21tYW5kKQ0KK3sNCisJQ29tbWFuZExpc3Q6Oml0ZXJhdG9yIGNoaWxkSXRlciA9IG1fY2hpbGRyZW4uYmVnaW4oKTsNCisJZm9yICg7IGNoaWxkSXRlciAhPSBtX2NoaWxkcmVuLmVuZCgpOykNCisJew0KKwkJQ29tbWFuZCAqY2hpbGQgPSBjaGlsZEl0ZXItPm1fY29tbWFuZDsNCisJCWJvb2wgZXJhc2VkID0gZmFsc2U7DQorDQorCQlDb21tYW5kOjpTdWJzeXN0ZW1TZXQgcmVxdWlyZW1lbnRzID0gY29tbWFuZC0+R2V0UmVxdWlyZW1lbnRzKCk7DQorCQlDb21tYW5kOjpTdWJzeXN0ZW1TZXQ6Oml0ZXJhdG9yIHJlcXVpcmVtZW50SXRlciA9IHJlcXVpcmVtZW50cy5iZWdpbigpOw0KKwkJZm9yICg7IHJlcXVpcmVtZW50SXRlciAhPSByZXF1aXJlbWVudHMuZW5kKCk7IHJlcXVpcmVtZW50SXRlcisrKQ0KKwkJew0KKwkJCWlmIChjaGlsZC0+RG9lc1JlcXVpcmUoKnJlcXVpcmVtZW50SXRlcikpDQorCQkJew0KKwkJCQljaGlsZC0+X0NhbmNlbCgpOw0KKwkJCQljaGlsZC0+UmVtb3ZlZCgpOw0KKwkJCQljaGlsZEl0ZXIgPSBtX2NoaWxkcmVuLmVyYXNlKGNoaWxkSXRlcik7DQorCQkJCWVyYXNlZCA9IHRydWU7DQorCQkJCWJyZWFrOw0KKwkJCX0NCisJCX0NCisJCWlmICghZXJhc2VkKQ0KKwkJCWNoaWxkSXRlcisrOw0KKwl9DQorfQ0KKw0KK2ludCBDb21tYW5kR3JvdXA6OkdldFNpemUoKQ0KK3sNCisJcmV0dXJuIG1fY2hpbGRyZW4uc2l6ZSgpOw0KK30NCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9Db21tYW5kcy9Db21tYW5kR3JvdXAuaCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0NvbW1hbmRzL0NvbW1hbmRHcm91cC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwODEzODEKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9Db21tYW5kcy9Db21tYW5kR3JvdXAuaApAQCAtMCwwICsxLDcxIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy8qIENvcHlyaWdodCAoYykgRklSU1QgMjAxMS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4JCQkJCQkJICAqLw0KKy8qIE9wZW4gU291cmNlIFNvZnR3YXJlIC0gbWF5IGJlIG1vZGlmaWVkIGFuZCBzaGFyZWQgYnkgRlJDIHRlYW1zLiBUaGUgY29kZSAgICovDQorLyogbXVzdCBiZSBhY2NvbXBhbmllZCBieSB0aGUgRklSU1QgQlNEIGxpY2Vuc2UgZmlsZSBpbiAkKFdJTkRfQkFTRSkvV1BJTGliLiAgKi8NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKyNpZm5kZWYgX19DT01NQU5EX0dST1VQX0hfXw0KKyNkZWZpbmUgX19DT01NQU5EX0dST1VQX0hfXw0KKw0KKyNpbmNsdWRlICJDb21tYW5kcy9Db21tYW5kLmgiDQorI2luY2x1ZGUgIkNvbW1hbmRzL0NvbW1hbmRHcm91cEVudHJ5LmgiDQorI2luY2x1ZGUgPGxpc3Q+DQorI2luY2x1ZGUgPHZlY3Rvcj4NCisNCisvKioNCisgKiBBIHtAbGluayBDb21tYW5kR3JvdXB9IGlzIGEgbGlzdCBvZiBjb21tYW5kcyB3aGljaCBhcmUgZXhlY3V0ZWQgaW4gc2VxdWVuY2UuDQorICoNCisgKiA8cD5Db21tYW5kcyBpbiBhIHtAbGluayBDb21tYW5kR3JvdXB9IGFyZSBhZGRlZCB1c2luZyB0aGUge0BsaW5rIENvbW1hbmRHcm91cCNBZGRTZXF1ZW50aWFsKENvbW1hbmQpIEFkZFNlcXVlbnRpYWwoLi4uKX0gbWV0aG9kDQorICogYW5kIGFyZSBjYWxsZWQgc2VxdWVudGlhbGx5Lg0KKyAqIHtAbGluayBDb21tYW5kR3JvdXAgQ29tbWFuZEdyb3Vwc30gYXJlIHRoZW1zZWx2ZXMge0BsaW5rIENvbW1hbmQgQ29tbWFuZHN9DQorICogYW5kIGNhbiBiZSBnaXZlbiB0byBvdGhlciB7QGxpbmsgQ29tbWFuZEdyb3VwIENvbW1hbmRHcm91cHN9LjwvcD4NCisgKg0KKyAqIDxwPntAbGluayBDb21tYW5kR3JvdXAgQ29tbWFuZEdyb3Vwc30gd2lsbCBjYXJyeSBhbGwgb2YgdGhlIHJlcXVpcmVtZW50cyBvZiB0aGVpciB7QGxpbmsgQ29tbWFuZCBzdWJjb21tYW5kc30uICBBZGRpdGlvbmFsDQorICogcmVxdWlyZW1lbnRzIGNhbiBiZSBzcGVjaWZpZWQgYnkgY2FsbGluZyB7QGxpbmsgQ29tbWFuZEdyb3VwI1JlcXVpcmVzKFN1YnN5c3RlbSkgUmVxdWlyZXMoLi4uKX0NCisgKiBub3JtYWxseSBpbiB0aGUgY29uc3RydWN0b3IuPC9QPg0KKyAqDQorICogPHA+Q29tbWFuZEdyb3VwcyBjYW4gYWxzbyBleGVjdXRlIGNvbW1hbmRzIGluIHBhcmFsbGVsLCBzaW1wbHkgYnkgYWRkaW5nIHRoZW0NCisgKiB1c2luZyB7QGxpbmsgQ29tbWFuZEdyb3VwI0FkZFBhcmFsbGVsKENvbW1hbmQpIEFkZFBhcmFsbGVsKC4uLil9LjwvcD4NCisgKiANCisgKiBAc2VlIENvbW1hbmQNCisgKiBAc2VlIFN1YnN5c3RlbQ0KKyAqLw0KK2NsYXNzIENvbW1hbmRHcm91cCA6IHB1YmxpYyBDb21tYW5kDQorew0KK3B1YmxpYzoNCisJQ29tbWFuZEdyb3VwKCk7DQorCUNvbW1hbmRHcm91cChjb25zdCBjaGFyICpuYW1lKTsNCisJdmlydHVhbCB+Q29tbWFuZEdyb3VwKCk7DQorCQ0KKwl2b2lkIEFkZFNlcXVlbnRpYWwoQ29tbWFuZCAqY29tbWFuZCk7DQorCXZvaWQgQWRkU2VxdWVudGlhbChDb21tYW5kICpjb21tYW5kLCBkb3VibGUgdGltZW91dCk7DQorCXZvaWQgQWRkUGFyYWxsZWwoQ29tbWFuZCAqY29tbWFuZCk7DQorCXZvaWQgQWRkUGFyYWxsZWwoQ29tbWFuZCAqY29tbWFuZCwgZG91YmxlIHRpbWVvdXQpOw0KKwlib29sIElzSW50ZXJydXB0aWJsZSgpOw0KKwlpbnQgR2V0U2l6ZSgpOw0KKw0KK3Byb3RlY3RlZDoNCisJdmlydHVhbCB2b2lkIEluaXRpYWxpemUoKTsNCisJdmlydHVhbCB2b2lkIEV4ZWN1dGUoKTsNCisJdmlydHVhbCBib29sIElzRmluaXNoZWQoKTsNCisJdmlydHVhbCB2b2lkIEVuZCgpOw0KKwl2aXJ0dWFsIHZvaWQgSW50ZXJydXB0ZWQoKTsNCisJdmlydHVhbCB2b2lkIF9Jbml0aWFsaXplKCk7DQorCXZpcnR1YWwgdm9pZCBfSW50ZXJydXB0ZWQoKTsNCisJdmlydHVhbCB2b2lkIF9FeGVjdXRlKCk7DQorCXZpcnR1YWwgdm9pZCBfRW5kKCk7DQorDQorcHJpdmF0ZToNCisJdm9pZCBDYW5jZWxDb25mbGljdHMoQ29tbWFuZCAqY29tbWFuZCk7DQorDQorCXR5cGVkZWYgc3RkOjp2ZWN0b3I8Q29tbWFuZEdyb3VwRW50cnk+IENvbW1hbmRWZWN0b3I7DQorCS8qKiBUaGUgY29tbWFuZHMgaW4gdGhpcyBncm91cCAoc3RvcmVkIGluIGVudHJpZXMpICovDQorCUNvbW1hbmRWZWN0b3IgbV9jb21tYW5kczsNCisJdHlwZWRlZiBzdGQ6Omxpc3Q8Q29tbWFuZEdyb3VwRW50cnk+IENvbW1hbmRMaXN0Ow0KKwkvKiogVGhlIGFjdGl2ZSBjaGlsZHJlbiBpbiB0aGlzIGdyb3VwIChzdG9yZWQgaW4gZW50cmllcykgKi8NCisJQ29tbWFuZExpc3QgbV9jaGlsZHJlbjsNCisJLyoqIFRoZSBjdXJyZW50IGNvbW1hbmQsIC0xIHNpZ25pZmllcyB0aGF0IG5vbmUgaGF2ZSBiZWVuIHJ1biAqLw0KKwlpbnQgbV9jdXJyZW50Q29tbWFuZEluZGV4Ow0KK307DQorDQorI2VuZGlmDQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvQ29tbWFuZHMvQ29tbWFuZEdyb3VwRW50cnkuY3BwIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvQ29tbWFuZHMvQ29tbWFuZEdyb3VwRW50cnkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmNDIwYTAKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9Db21tYW5kcy9Db21tYW5kR3JvdXBFbnRyeS5jcHAKQEAgLTAsMCArMSw0MCBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBDb3B5cmlnaHQgKGMpIEZJUlNUIDIwMTEuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCQkJCQkJCSAgKi8NCisvKiBPcGVuIFNvdXJjZSBTb2Z0d2FyZSAtIG1heSBiZSBtb2RpZmllZCBhbmQgc2hhcmVkIGJ5IEZSQyB0ZWFtcy4gVGhlIGNvZGUgICAqLw0KKy8qIG11c3QgYmUgYWNjb21wYW5pZWQgYnkgdGhlIEZJUlNUIEJTRCBsaWNlbnNlIGZpbGUgaW4gJChXSU5EX0JBU0UpL1dQSUxpYi4gICovDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisjaW5jbHVkZSAiQ29tbWFuZHMvQ29tbWFuZEdyb3VwRW50cnkuaCINCisNCisjaW5jbHVkZSAiQ29tbWFuZHMvQ29tbWFuZC5oIg0KKw0KK0NvbW1hbmRHcm91cEVudHJ5OjpDb21tYW5kR3JvdXBFbnRyeSgpIDoNCisJbV90aW1lb3V0KC0xLjApLA0KKwltX2NvbW1hbmQoTlVMTCksDQorCW1fc3RhdGUoa1NlcXVlbmNlX0luU2VxdWVuY2UpDQorew0KK30NCisNCitDb21tYW5kR3JvdXBFbnRyeTo6Q29tbWFuZEdyb3VwRW50cnkoQ29tbWFuZCAqY29tbWFuZCwgU2VxdWVuY2Ugc3RhdGUpIDoNCisJbV90aW1lb3V0KC0xLjApLA0KKwltX2NvbW1hbmQoY29tbWFuZCksDQorCW1fc3RhdGUoc3RhdGUpDQorew0KK30NCisNCitDb21tYW5kR3JvdXBFbnRyeTo6Q29tbWFuZEdyb3VwRW50cnkoQ29tbWFuZCAqY29tbWFuZCwgU2VxdWVuY2Ugc3RhdGUsIGRvdWJsZSB0aW1lb3V0KSA6DQorCW1fdGltZW91dCh0aW1lb3V0KSwNCisJbV9jb21tYW5kKGNvbW1hbmQpLA0KKwltX3N0YXRlKHN0YXRlKQ0KK3sNCit9DQorDQorYm9vbCBDb21tYW5kR3JvdXBFbnRyeTo6SXNUaW1lZE91dCgpDQorew0KKwlpZiAobV90aW1lb3V0IDwgMC4wKQ0KKwkJcmV0dXJuIGZhbHNlOw0KKwlkb3VibGUgdGltZSA9IG1fY29tbWFuZC0+VGltZVNpbmNlSW5pdGlhbGl6ZWQoKTsNCisJaWYgKHRpbWUgPT0gMC4wKQ0KKwkJcmV0dXJuIGZhbHNlOw0KKwlyZXR1cm4gdGltZSA+PSBtX3RpbWVvdXQ7DQorfQ0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0NvbW1hbmRzL0NvbW1hbmRHcm91cEVudHJ5LmggYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9Db21tYW5kcy9Db21tYW5kR3JvdXBFbnRyeS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3YWViMzQKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9Db21tYW5kcy9Db21tYW5kR3JvdXBFbnRyeS5oCkBAIC0wLDAgKzEsMjcgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorLyogQ29weXJpZ2h0IChjKSBGSVJTVCAyMDExLiBBbGwgUmlnaHRzIFJlc2VydmVkLgkJCQkJCQkgICovDQorLyogT3BlbiBTb3VyY2UgU29mdHdhcmUgLSBtYXkgYmUgbW9kaWZpZWQgYW5kIHNoYXJlZCBieSBGUkMgdGVhbXMuIFRoZSBjb2RlICAgKi8NCisvKiBtdXN0IGJlIGFjY29tcGFuaWVkIGJ5IHRoZSBGSVJTVCBCU0QgbGljZW5zZSBmaWxlIGluICQoV0lORF9CQVNFKS9XUElMaWIuICAqLw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorI2lmbmRlZiBfX0NPTU1BTkRfR1JPVVBfRU5UUllfSF9fDQorI2RlZmluZSBfX0NPTU1BTkRfR1JPVVBfRU5UUllfSF9fDQorDQorY2xhc3MgQ29tbWFuZDsNCisNCitjbGFzcyBDb21tYW5kR3JvdXBFbnRyeQ0KK3sNCitwdWJsaWM6DQorCXR5cGVkZWYgZW51bSB7a1NlcXVlbmNlX0luU2VxdWVuY2UsIGtTZXF1ZW5jZV9CcmFuY2hQZWVyLCBrU2VxdWVuY2VfQnJhbmNoQ2hpbGR9IFNlcXVlbmNlOw0KKw0KKwlDb21tYW5kR3JvdXBFbnRyeSgpOw0KKwlDb21tYW5kR3JvdXBFbnRyeShDb21tYW5kICpjb21tYW5kLCBTZXF1ZW5jZSBzdGF0ZSk7DQorCUNvbW1hbmRHcm91cEVudHJ5KENvbW1hbmQgKmNvbW1hbmQsIFNlcXVlbmNlIHN0YXRlLCBkb3VibGUgdGltZW91dCk7DQorCWJvb2wgSXNUaW1lZE91dCgpOw0KKw0KKwlkb3VibGUgbV90aW1lb3V0Ow0KKwlDb21tYW5kICptX2NvbW1hbmQ7DQorCVNlcXVlbmNlIG1fc3RhdGU7DQorfTsNCisNCisjZW5kaWYNCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9Db21tYW5kcy9QSURDb21tYW5kLmNwcCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0NvbW1hbmRzL1BJRENvbW1hbmQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyODdlNGMKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9Db21tYW5kcy9QSURDb21tYW5kLmNwcApAQCAtMCwwICsxLDEwNiBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBDb3B5cmlnaHQgKGMpIEZJUlNUIDIwMTEuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCQkJCQkJCSAgKi8NCisvKiBPcGVuIFNvdXJjZSBTb2Z0d2FyZSAtIG1heSBiZSBtb2RpZmllZCBhbmQgc2hhcmVkIGJ5IEZSQyB0ZWFtcy4gVGhlIGNvZGUgICAqLw0KKy8qIG11c3QgYmUgYWNjb21wYW5pZWQgYnkgdGhlIEZJUlNUIEJTRCBsaWNlbnNlIGZpbGUgaW4gJChXSU5EX0JBU0UpL1dQSUxpYi4gICovDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisjaW5jbHVkZSAiQ29tbWFuZHMvUElEQ29tbWFuZC5oIg0KKw0KKyNpbmNsdWRlICJQSURDb250cm9sbGVyLmgiDQorI2luY2x1ZGUgImZsb2F0LmgiDQorDQorUElEQ29tbWFuZDo6UElEQ29tbWFuZChjb25zdCBjaGFyICpuYW1lLCBkb3VibGUgcCwgZG91YmxlIGksIGRvdWJsZSBkLCBkb3VibGUgZiwgZG91YmxlIHBlcmlvZCkgOg0KKwkJQ29tbWFuZChuYW1lKQ0KK3sNCisJbV9jb250cm9sbGVyID0gbmV3IFBJRENvbnRyb2xsZXIocCwgaSwgZCwgdGhpcywgdGhpcywgcGVyaW9kKTsNCit9DQorDQorUElEQ29tbWFuZDo6UElEQ29tbWFuZChkb3VibGUgcCwgZG91YmxlIGksIGRvdWJsZSBkLCBkb3VibGUgZiwgZG91YmxlIHBlcmlvZCkNCit7DQorCW1fY29udHJvbGxlciA9IG5ldyBQSURDb250cm9sbGVyKHAsIGksIGQsIGYsIHRoaXMsIHRoaXMsIHBlcmlvZCk7DQorfQ0KKw0KK1BJRENvbW1hbmQ6OlBJRENvbW1hbmQoY29uc3QgY2hhciAqbmFtZSwgZG91YmxlIHAsIGRvdWJsZSBpLCBkb3VibGUgZCkgOg0KKwlDb21tYW5kKG5hbWUpDQorew0KKwltX2NvbnRyb2xsZXIgPSBuZXcgUElEQ29udHJvbGxlcihwLCBpLCBkLCB0aGlzLCB0aGlzKTsNCit9DQorDQorUElEQ29tbWFuZDo6UElEQ29tbWFuZChjb25zdCBjaGFyICpuYW1lLCBkb3VibGUgcCwgZG91YmxlIGksIGRvdWJsZSBkLCBkb3VibGUgcGVyaW9kKSA6DQorCUNvbW1hbmQobmFtZSkNCit7DQorCW1fY29udHJvbGxlciA9IG5ldyBQSURDb250cm9sbGVyKHAsIGksIGQsIHRoaXMsIHRoaXMsIHBlcmlvZCk7DQorfQ0KKw0KK1BJRENvbW1hbmQ6OlBJRENvbW1hbmQoZG91YmxlIHAsIGRvdWJsZSBpLCBkb3VibGUgZCkNCit7DQorCW1fY29udHJvbGxlciA9IG5ldyBQSURDb250cm9sbGVyKHAsIGksIGQsIHRoaXMsIHRoaXMpOw0KK30NCisNCitQSURDb21tYW5kOjpQSURDb21tYW5kKGRvdWJsZSBwLCBkb3VibGUgaSwgZG91YmxlIGQsIGRvdWJsZSBwZXJpb2QpDQorew0KKwltX2NvbnRyb2xsZXIgPSBuZXcgUElEQ29udHJvbGxlcihwLCBpLCBkLCB0aGlzLCB0aGlzLCBwZXJpb2QpOw0KK30NCisNCitQSURDb21tYW5kOjp+UElEQ29tbWFuZCgpDQorew0KKwlkZWxldGUgbV9jb250cm9sbGVyOw0KK30NCisNCit2b2lkIFBJRENvbW1hbmQ6Ol9Jbml0aWFsaXplKCkNCit7DQorCW1fY29udHJvbGxlci0+RW5hYmxlKCk7DQorfQ0KKw0KK3ZvaWQgUElEQ29tbWFuZDo6X0VuZCgpDQorew0KKwltX2NvbnRyb2xsZXItPkRpc2FibGUoKTsNCit9DQorDQordm9pZCBQSURDb21tYW5kOjpfSW50ZXJydXB0ZWQoKQ0KK3sNCisJX0VuZCgpOw0KK30NCisNCit2b2lkIFBJRENvbW1hbmQ6OlNldFNldHBvaW50UmVsYXRpdmUoZG91YmxlIGRlbHRhU2V0cG9pbnQpDQorew0KKwlTZXRTZXRwb2ludChHZXRTZXRwb2ludCgpICsgZGVsdGFTZXRwb2ludCk7DQorfQ0KKw0KK3ZvaWQgUElEQ29tbWFuZDo6UElEV3JpdGUoZmxvYXQgb3V0cHV0KQ0KK3sNCisJVXNlUElET3V0cHV0KG91dHB1dCk7DQorfQ0KKw0KK2RvdWJsZSBQSURDb21tYW5kOjpQSURHZXQoKQ0KK3sNCisJcmV0dXJuIFJldHVyblBJRElucHV0KCk7DQorfQ0KKw0KK1BJRENvbnRyb2xsZXIgKlBJRENvbW1hbmQ6OkdldFBJRENvbnRyb2xsZXIoKQ0KK3sNCisJcmV0dXJuIG1fY29udHJvbGxlcjsNCit9DQorDQordm9pZCBQSURDb21tYW5kOjpTZXRTZXRwb2ludChkb3VibGUgc2V0cG9pbnQpDQorew0KKwltX2NvbnRyb2xsZXItPlNldFNldHBvaW50KHNldHBvaW50KTsNCit9DQorDQorZG91YmxlIFBJRENvbW1hbmQ6OkdldFNldHBvaW50KCkNCit7DQorCXJldHVybiBtX2NvbnRyb2xsZXItPkdldFNldHBvaW50KCk7DQorfQ0KKw0KK2RvdWJsZSBQSURDb21tYW5kOjpHZXRQb3NpdGlvbigpDQorew0KKwlyZXR1cm4gUmV0dXJuUElESW5wdXQoKTsNCit9DQorDQorc3RkOjpzdHJpbmcgUElEQ29tbWFuZDo6R2V0U21hcnREYXNoYm9hcmRUeXBlKCl7DQorICAgICAgICByZXR1cm4gIlBJRENvbW1hbmQiOw0KK30NCit2b2lkIFBJRENvbW1hbmQ6OkluaXRUYWJsZShJVGFibGUqIHRhYmxlKXsNCisJbV9jb250cm9sbGVyLT5Jbml0VGFibGUodGFibGUpOw0KKwlDb21tYW5kOjpJbml0VGFibGUodGFibGUpOw0KK30NCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9Db21tYW5kcy9QSURDb21tYW5kLmggYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9Db21tYW5kcy9QSURDb21tYW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGU0NTA2NAotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0NvbW1hbmRzL1BJRENvbW1hbmQuaApAQCAtMCwwICsxLDU2IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy8qIENvcHlyaWdodCAoYykgRklSU1QgMjAxMS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4JCQkJCQkJICAqLw0KKy8qIE9wZW4gU291cmNlIFNvZnR3YXJlIC0gbWF5IGJlIG1vZGlmaWVkIGFuZCBzaGFyZWQgYnkgRlJDIHRlYW1zLiBUaGUgY29kZSAgICovDQorLyogbXVzdCBiZSBhY2NvbXBhbmllZCBieSB0aGUgRklSU1QgQlNEIGxpY2Vuc2UgZmlsZSBpbiAkKFdJTkRfQkFTRSkvV1BJTGliLiAgKi8NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKyNpZm5kZWYgX19QSURfQ09NTUFORF9IX18NCisjZGVmaW5lIF9fUElEX0NPTU1BTkRfSF9fDQorDQorI2luY2x1ZGUgIkNvbW1hbmRzL0NvbW1hbmQuaCINCisjaW5jbHVkZSAiUElEU291cmNlLmgiDQorI2luY2x1ZGUgIlBJRE91dHB1dC5oIg0KKw0KK2NsYXNzIFBJRENvbnRyb2xsZXI7DQorDQorY2xhc3MgUElEQ29tbWFuZCA6IHB1YmxpYyBDb21tYW5kLCBwdWJsaWMgUElET3V0cHV0LCBwdWJsaWMgUElEU291cmNlDQorew0KK3B1YmxpYzoNCisJUElEQ29tbWFuZChjb25zdCBjaGFyICpuYW1lLCBkb3VibGUgcCwgZG91YmxlIGksIGRvdWJsZSBkKTsNCisJUElEQ29tbWFuZChjb25zdCBjaGFyICpuYW1lLCBkb3VibGUgcCwgZG91YmxlIGksIGRvdWJsZSBkLCBkb3VibGUgcGVyaW9kKTsNCisJUElEQ29tbWFuZChjb25zdCBjaGFyICpuYW1lLCBkb3VibGUgcCwgZG91YmxlIGksIGRvdWJsZSBkLCBkb3VibGUgZiwgZG91YmxlIHBlcmlvaWQpOw0KKwlQSURDb21tYW5kKGRvdWJsZSBwLCBkb3VibGUgaSwgZG91YmxlIGQpOw0KKwlQSURDb21tYW5kKGRvdWJsZSBwLCBkb3VibGUgaSwgZG91YmxlIGQsIGRvdWJsZSBwZXJpb2QpOw0KKwlQSURDb21tYW5kKGRvdWJsZSBwLCBkb3VibGUgaSwgZG91YmxlIGQsIGRvdWJsZSBmLCBkb3VibGUgcGVyaW9kKTsNCisJdmlydHVhbCB+UElEQ29tbWFuZCgpOw0KKwkNCisJdm9pZCBTZXRTZXRwb2ludFJlbGF0aXZlKGRvdWJsZSBkZWx0YVNldHBvaW50KTsNCisNCisJLy8gUElET3V0cHV0IGludGVyZmFjZQ0KKwl2aXJ0dWFsIHZvaWQgUElEV3JpdGUoZmxvYXQgb3V0cHV0KTsNCisNCisJLy8gUElEU291cmNlIGludGVyZmFjZQ0KKwl2aXJ0dWFsIGRvdWJsZSBQSURHZXQoKTsNCitwcm90ZWN0ZWQ6DQorCVBJRENvbnRyb2xsZXIgKkdldFBJRENvbnRyb2xsZXIoKTsNCisJdmlydHVhbCB2b2lkIF9Jbml0aWFsaXplKCk7DQorCXZpcnR1YWwgdm9pZCBfSW50ZXJydXB0ZWQoKTsNCisJdmlydHVhbCB2b2lkIF9FbmQoKTsNCisJdm9pZCBTZXRTZXRwb2ludChkb3VibGUgc2V0cG9pbnQpOw0KKwlkb3VibGUgR2V0U2V0cG9pbnQoKTsNCisJZG91YmxlIEdldFBvc2l0aW9uKCk7DQorDQorCXZpcnR1YWwgZG91YmxlIFJldHVyblBJRElucHV0KCkgPSAwOw0KKwl2aXJ0dWFsIHZvaWQgVXNlUElET3V0cHV0KGRvdWJsZSBvdXRwdXQpID0gMDsNCisNCitwcml2YXRlOgkNCisJLyoqIFRoZSBpbnRlcm5hbCB7QGxpbmsgUElEQ29udHJvbGxlcn0gKi8NCisJUElEQ29udHJvbGxlciAqbV9jb250cm9sbGVyOw0KKw0KK3B1YmxpYzoNCisJdmlydHVhbCB2b2lkIEluaXRUYWJsZShJVGFibGUqIHRhYmxlKTsNCisJdmlydHVhbCBzdGQ6OnN0cmluZyBHZXRTbWFydERhc2hib2FyZFR5cGUoKTsNCit9Ow0KKw0KKyNlbmRpZg0KKw0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0NvbW1hbmRzL1BJRFN1YnN5c3RlbS5jcHAgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9Db21tYW5kcy9QSURTdWJzeXN0ZW0uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwMjMxMzUKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9Db21tYW5kcy9QSURTdWJzeXN0ZW0uY3BwCkBAIC0wLDAgKzEsMjM3IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy8qIENvcHlyaWdodCAoYykgRklSU1QgMjAxMS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4JCQkJCQkJICAqLw0KKy8qIE9wZW4gU291cmNlIFNvZnR3YXJlIC0gbWF5IGJlIG1vZGlmaWVkIGFuZCBzaGFyZWQgYnkgRlJDIHRlYW1zLiBUaGUgY29kZSAgICovDQorLyogbXVzdCBiZSBhY2NvbXBhbmllZCBieSB0aGUgRklSU1QgQlNEIGxpY2Vuc2UgZmlsZSBpbiAkKFdJTkRfQkFTRSkvV1BJTGliLiAgKi8NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKyNpbmNsdWRlICJDb21tYW5kcy9QSURTdWJzeXN0ZW0uaCINCisjaW5jbHVkZSAiUElEQ29udHJvbGxlci5oIg0KKyNpbmNsdWRlICJmbG9hdC5oIg0KKw0KKy8vIFhYWCBtYXggYW5kIG1pbiBhcmUgbm90IHVzZWQ/DQorDQorLyoqDQorICogSW5zdGFudGlhdGVzIGEge0BsaW5rIFBJRFN1YnN5c3RlbX0gdGhhdCB3aWxsIHVzZSB0aGUgZ2l2ZW4gcCwgaSBhbmQgZCB2YWx1ZXMuDQorICogQHBhcmFtIG5hbWUgdGhlIG5hbWUNCisgKiBAcGFyYW0gcCB0aGUgcHJvcG9ydGlvbmFsIHZhbHVlDQorICogQHBhcmFtIGkgdGhlIGludGVncmFsIHZhbHVlDQorICogQHBhcmFtIGQgdGhlIGRlcml2YXRpdmUgdmFsdWUNCisgKi8NCitQSURTdWJzeXN0ZW06OlBJRFN1YnN5c3RlbShjb25zdCBjaGFyICpuYW1lLCBkb3VibGUgcCwgZG91YmxlIGksIGRvdWJsZSBkKSA6DQorCVN1YnN5c3RlbShuYW1lKQ0KK3sNCisJbV9jb250cm9sbGVyID0gbmV3IFBJRENvbnRyb2xsZXIocCwgaSwgZCwgdGhpcywgdGhpcyk7DQorfQ0KKw0KKy8qKg0KKyAqIEluc3RhbnRpYXRlcyBhIHtAbGluayBQSURTdWJzeXN0ZW19IHRoYXQgd2lsbCB1c2UgdGhlIGdpdmVuIHAsIGkgYW5kIGQgdmFsdWVzLg0KKyAqIEBwYXJhbSBuYW1lIHRoZSBuYW1lDQorICogQHBhcmFtIHAgdGhlIHByb3BvcnRpb25hbCB2YWx1ZQ0KKyAqIEBwYXJhbSBpIHRoZSBpbnRlZ3JhbCB2YWx1ZQ0KKyAqIEBwYXJhbSBkIHRoZSBkZXJpdmF0aXZlIHZhbHVlDQorICogQHBhcmFtIGYgdGhlIGZlZWRmb3J3YXJkIHZhbHVlDQorICovDQorUElEU3Vic3lzdGVtOjpQSURTdWJzeXN0ZW0oY29uc3QgY2hhciAqbmFtZSwgZG91YmxlIHAsIGRvdWJsZSBpLCBkb3VibGUgZCwgZG91YmxlIGYpIDoNCisJU3Vic3lzdGVtKG5hbWUpDQorew0KKwltX2NvbnRyb2xsZXIgPSBuZXcgUElEQ29udHJvbGxlcihwLCBpLCBkLCBmLCB0aGlzLCB0aGlzKTsNCit9DQorDQorLyoqDQorICogSW5zdGFudGlhdGVzIGEge0BsaW5rIFBJRFN1YnN5c3RlbX0gdGhhdCB3aWxsIHVzZSB0aGUgZ2l2ZW4gcCwgaSBhbmQgZCB2YWx1ZXMuICBJdCB3aWxsIGFsc28gc3BhY2UgdGhlIHRpbWUNCisgKiBiZXR3ZWVuIFBJRCBsb29wIGNhbGN1bGF0aW9ucyB0byBiZSBlcXVhbCB0byB0aGUgZ2l2ZW4gcGVyaW9kLg0KKyAqIEBwYXJhbSBuYW1lIHRoZSBuYW1lDQorICogQHBhcmFtIHAgdGhlIHByb3BvcnRpb25hbCB2YWx1ZQ0KKyAqIEBwYXJhbSBpIHRoZSBpbnRlZ3JhbCB2YWx1ZQ0KKyAqIEBwYXJhbSBkIHRoZSBkZXJpdmF0aXZlIHZhbHVlDQorICogQHBhcmFtIGYgdGhlIGZlZWRmb3dhcmQgdmFsdWUNCisgKiBAcGFyYW0gcGVyaW9kIHRoZSB0aW1lIChpbiBzZWNvbmRzKSBiZXR3ZWVuIGNhbGN1bGF0aW9ucw0KKyAqLw0KK1BJRFN1YnN5c3RlbTo6UElEU3Vic3lzdGVtKGNvbnN0IGNoYXIgKm5hbWUsIGRvdWJsZSBwLCBkb3VibGUgaSwgZG91YmxlIGQsIGRvdWJsZSBmLA0KKwlkb3VibGUgcGVyaW9kKSA6DQorCVN1YnN5c3RlbShuYW1lKQ0KK3sNCisJbV9jb250cm9sbGVyID0gbmV3IFBJRENvbnRyb2xsZXIocCwgaSwgZCwgZiwgdGhpcywgdGhpcywgcGVyaW9kKTsNCit9DQorDQorLyoqDQorICogSW5zdGFudGlhdGVzIGEge0BsaW5rIFBJRFN1YnN5c3RlbX0gdGhhdCB3aWxsIHVzZSB0aGUgZ2l2ZW4gcCwgaSBhbmQgZCB2YWx1ZXMuDQorICogSXQgd2lsbCB1c2UgdGhlIGNsYXNzIG5hbWUgYXMgaXRzIG5hbWUuDQorICogQHBhcmFtIHAgdGhlIHByb3BvcnRpb25hbCB2YWx1ZQ0KKyAqIEBwYXJhbSBpIHRoZSBpbnRlZ3JhbCB2YWx1ZQ0KKyAqIEBwYXJhbSBkIHRoZSBkZXJpdmF0aXZlIHZhbHVlDQorICovDQorUElEU3Vic3lzdGVtOjpQSURTdWJzeXN0ZW0oZG91YmxlIHAsIGRvdWJsZSBpLCBkb3VibGUgZCkgOg0KKwlTdWJzeXN0ZW0oIlBJRFN1YnN5c3RlbSIpDQorew0KKwltX2NvbnRyb2xsZXIgPSBuZXcgUElEQ29udHJvbGxlcihwLCBpLCBkLCB0aGlzLCB0aGlzKTsNCit9DQorDQorLyoqDQorICogSW5zdGFudGlhdGVzIGEge0BsaW5rIFBJRFN1YnN5c3RlbX0gdGhhdCB3aWxsIHVzZSB0aGUgZ2l2ZW4gcCwgaSBhbmQgZCB2YWx1ZXMuDQorICogSXQgd2lsbCB1c2UgdGhlIGNsYXNzIG5hbWUgYXMgaXRzIG5hbWUuDQorICogQHBhcmFtIHAgdGhlIHByb3BvcnRpb25hbCB2YWx1ZQ0KKyAqIEBwYXJhbSBpIHRoZSBpbnRlZ3JhbCB2YWx1ZQ0KKyAqIEBwYXJhbSBkIHRoZSBkZXJpdmF0aXZlIHZhbHVlDQorICogQHBhcmFtIGYgdGhlIGZlZWRmb3J3YXJkIHZhbHVlDQorICovDQorUElEU3Vic3lzdGVtOjpQSURTdWJzeXN0ZW0oZG91YmxlIHAsIGRvdWJsZSBpLCBkb3VibGUgZCwgZG91YmxlIGYpIDoNCisJU3Vic3lzdGVtKCJQSURTdWJzeXN0ZW0iKQ0KK3sNCisJbV9jb250cm9sbGVyID0gbmV3IFBJRENvbnRyb2xsZXIocCwgaSwgZCwgZiwgdGhpcywgdGhpcyk7DQorfQ0KKw0KKy8qKg0KKyAqIEluc3RhbnRpYXRlcyBhIHtAbGluayBQSURTdWJzeXN0ZW19IHRoYXQgd2lsbCB1c2UgdGhlIGdpdmVuIHAsIGkgYW5kIGQgdmFsdWVzLg0KKyAqIEl0IHdpbGwgdXNlIHRoZSBjbGFzcyBuYW1lIGFzIGl0cyBuYW1lLg0KKyAqIEl0IHdpbGwgYWxzbyBzcGFjZSB0aGUgdGltZQ0KKyAqIGJldHdlZW4gUElEIGxvb3AgY2FsY3VsYXRpb25zIHRvIGJlIGVxdWFsIHRvIHRoZSBnaXZlbiBwZXJpb2QuDQorICogQHBhcmFtIHAgdGhlIHByb3BvcnRpb25hbCB2YWx1ZQ0KKyAqIEBwYXJhbSBpIHRoZSBpbnRlZ3JhbCB2YWx1ZQ0KKyAqIEBwYXJhbSBkIHRoZSBkZXJpdmF0aXZlIHZhbHVlDQorICogQHBhcmFtIGYgdGhlIGZlZWRmb3J3YXJkIHZhbHVlDQorICogQHBhcmFtIHBlcmlvZCB0aGUgdGltZSAoaW4gc2Vjb25kcykgYmV0d2VlbiBjYWxjdWxhdGlvbnMNCisgKi8NCitQSURTdWJzeXN0ZW06OlBJRFN1YnN5c3RlbShkb3VibGUgcCwgZG91YmxlIGksIGRvdWJsZSBkLCBkb3VibGUgZiwgZG91YmxlIHBlcmlvZCkgOg0KKwlTdWJzeXN0ZW0oIlBJRFN1YnN5c3RlbSIpDQorew0KKwltX2NvbnRyb2xsZXIgPSBuZXcgUElEQ29udHJvbGxlcihwLCBpLCBkLCBmLCB0aGlzLCB0aGlzLCBwZXJpb2QpOw0KK30NCisNCitQSURTdWJzeXN0ZW06On5QSURTdWJzeXN0ZW0oKQ0KK3sNCisJZGVsZXRlIG1fY29udHJvbGxlcjsNCit9DQorDQorLyoqDQorICogRW5hYmxlcyB0aGUgaW50ZXJuYWwge0BsaW5rIFBJRENvbnRyb2xsZXJ9DQorICovDQordm9pZCBQSURTdWJzeXN0ZW06OkVuYWJsZSgpDQorew0KKwltX2NvbnRyb2xsZXItPkVuYWJsZSgpOw0KK30NCisNCisvKiogDQorICAqIERpc2FibGVzIHRoZSBpbnRlcm5hbCB7QGxpbmsgUElEQ29udHJvbGxlcn0NCisgICovDQordm9pZCBQSURTdWJzeXN0ZW06OkRpc2FibGUoKQ0KK3sNCisJbV9jb250cm9sbGVyLT5EaXNhYmxlKCk7DQorfQ0KKw0KKw0KKy8qKg0KKyAqIFJldHVybnMgdGhlIHtAbGluayBQSURDb250cm9sbGVyfSB1c2VkIGJ5IHRoaXMge0BsaW5rIFBJRFN1YnN5c3RlbX0uDQorICogVXNlIHRoaXMgaWYgeW91IHdvdWxkIGxpa2UgdG8gZmluZSB0dW5lIHRoZSBwaWQgbG9vcC4NCisgKg0KKyAqIEByZXR1cm4gdGhlIHtAbGluayBQSURDb250cm9sbGVyfSB1c2VkIGJ5IHRoaXMge0BsaW5rIFBJRFN1YnN5c3RlbX0NCisgKi8NCitQSURDb250cm9sbGVyICpQSURTdWJzeXN0ZW06OkdldFBJRENvbnRyb2xsZXIoKQ0KK3sNCisJcmV0dXJuIG1fY29udHJvbGxlcjsNCit9DQorDQorLyoqDQorICogU2V0cyB0aGUgc2V0cG9pbnQgdG8gdGhlIGdpdmVuIHZhbHVlLiAgSWYge0BsaW5rIFBJRENvbW1hbmQjU2V0UmFuZ2UoZG91YmxlLCBkb3VibGUpIFNldFJhbmdlKC4uLil9DQorICogd2FzIGNhbGxlZCwNCisgKiB0aGVuIHRoZSBnaXZlbiBzZXRwb2ludA0KKyAqIHdpbGwgYmUgdHJpbW1lZCB0byBmaXQgd2l0aGluIHRoZSByYW5nZS4NCisgKiBAcGFyYW0gc2V0cG9pbnQgdGhlIG5ldyBzZXRwb2ludA0KKyAqLw0KK3ZvaWQgUElEU3Vic3lzdGVtOjpTZXRTZXRwb2ludChkb3VibGUgc2V0cG9pbnQpDQorew0KKwltX2NvbnRyb2xsZXItPlNldFNldHBvaW50KHNldHBvaW50KTsNCit9DQorDQorLyoqDQorICogQWRkcyB0aGUgZ2l2ZW4gdmFsdWUgdG8gdGhlIHNldHBvaW50Lg0KKyAqIElmIHtAbGluayBQSURDb21tYW5kI1NldFJhbmdlKGRvdWJsZSwgZG91YmxlKSBTZXRSYW5nZSguLi4pfSB3YXMgdXNlZCwNCisgKiB0aGVuIHRoZSBib3VuZHMgd2lsbCBzdGlsbCBiZSBob25vcmVkIGJ5IHRoaXMgbWV0aG9kLg0KKyAqIEBwYXJhbSBkZWx0YVNldHBvaW50IHRoZSBjaGFuZ2UgaW4gdGhlIHNldHBvaW50DQorICovDQordm9pZCBQSURTdWJzeXN0ZW06OlNldFNldHBvaW50UmVsYXRpdmUoZG91YmxlIGRlbHRhU2V0cG9pbnQpDQorew0KKwlTZXRTZXRwb2ludChHZXRTZXRwb2ludCgpICsgZGVsdGFTZXRwb2ludCk7DQorfQ0KKw0KKy8qKg0KKyAqIFJldHVybiB0aGUgY3VycmVudCBzZXRwb2ludA0KKyAqIEByZXR1cm4gVGhlIGN1cnJlbnQgc2V0cG9pbnQNCisgKi8NCitkb3VibGUgUElEU3Vic3lzdGVtOjpHZXRTZXRwb2ludCgpDQorew0KKwlyZXR1cm4gbV9jb250cm9sbGVyLT5HZXRTZXRwb2ludCgpOw0KK30NCisNCisvKioNCisgKiBTZXRzIHRoZSBtYXhpbXVtIGFuZCBtaW5pbXVtIHZhbHVlcyBleHBlY3RlZCBmcm9tIHRoZSBpbnB1dC4NCisgKiANCisgKiBAcGFyYW0gbWluaW11bUlucHV0IHRoZSBtaW5pbXVtIHZhbHVlIGV4cGVjdGVkIGZyb20gdGhlIGlucHV0DQorICogQHBhcmFtIG1heGltdW1JbnB1dCB0aGUgbWF4aW11bSB2YWx1ZSBleHBlY3RlZCBmcm9tIHRoZSBvdXRwdXQNCisgKi8NCit2b2lkIFBJRFN1YnN5c3RlbTo6U2V0SW5wdXRSYW5nZShmbG9hdCBtaW5pbXVtSW5wdXQsIGZsb2F0IG1heGltdW1JbnB1dCkNCit7DQorCW1fY29udHJvbGxlci0+U2V0SW5wdXRSYW5nZShtaW5pbXVtSW5wdXQsIG1heGltdW1JbnB1dCk7DQorfQ0KKw0KKy8qDQorICogU2V0IHRoZSBhYnNvbHV0ZSBlcnJvciB3aGljaCBpcyBjb25zaWRlcmVkIHRvbGVyYWJsZSBmb3IgdXNlIHdpdGgNCisgKiBPblRhcmdldC4NCisgKiBAcGFyYW0gcGVyY2VudGFnZSBlcnJvciB3aGljaCBpcyB0b2xlcmFibGUNCisgKi8NCit2b2lkIFBJRFN1YnN5c3RlbTo6U2V0QWJzb2x1dGVUb2xlcmFuY2UoZmxvYXQgYWJzVmFsdWUpIHsNCisJbV9jb250cm9sbGVyLT5TZXRBYnNvbHV0ZVRvbGVyYW5jZShhYnNWYWx1ZSk7DQorfQ0KKw0KKy8qDQorICogU2V0IHRoZSBwZXJjZW50YWdlIGVycm9yIHdoaWNoIGlzIGNvbnNpZGVyZWQgdG9sZXJhYmxlIGZvciB1c2Ugd2l0aA0KKyAqIE9uVGFyZ2V0Lg0KKyAqIEBwYXJhbSBwZXJjZW50YWdlIGVycm9yIHdoaWNoIGlzIHRvbGVyYWJsZQ0KKyAqLw0KK3ZvaWQgUElEU3Vic3lzdGVtOjpTZXRQZXJjZW50VG9sZXJhbmNlKGZsb2F0IHBlcmNlbnQpIHsNCisJbV9jb250cm9sbGVyLT5TZXRQZXJjZW50VG9sZXJhbmNlKHBlcmNlbnQpOw0KK30NCisNCisvKg0KKyAqIFJldHVybiB0cnVlIGlmIHRoZSBlcnJvciBpcyB3aXRoaW4gdGhlIHBlcmNlbnRhZ2Ugb2YgdGhlIHRvdGFsIGlucHV0IHJhbmdlLA0KKyAqIGRldGVybWluZWQgYnkgU2V0VG9sZXJhbmNlLiBUaGlzIGFzc3N1bWVzIHRoYXQgdGhlIG1heGltdW0gYW5kIG1pbmltdW0gaW5wdXQNCisgKiB3ZXJlIHNldCB1c2luZyBTZXRJbnB1dC4gVXNlIE9uVGFyZ2V0KCkgaW4gdGhlIElzRmluaXNoZWQoKSBtZXRob2Qgb2YgY29tbWFuZHMNCisgKiB0aGF0IHVzZSB0aGlzIHN1YnN5c3RlbS4NCisgKiANCisgKiBDdXJyZW50bHkgdGhpcyBqdXN0IHJlcG9ydHMgb24gdGFyZ2V0IGFzIHRoZSBhY3R1YWwgdmFsdWUgcGFzc2VzIHRocm91Z2ggdGhlIHNldHBvaW50Lg0KKyAqIElkZWFsbHkgaXQgc2hvdWxkIGJlIGJhc2VkIG9uIGJlaW5nIHdpdGhpbiB0aGUgdG9sZXJhbmNlIGZvciBzb21lIHBlcmlvZCBvZiB0aW1lLg0KKyAqIA0KKyAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgZXJyb3IgaXMgd2l0aGluIHRoZSBwZXJjZW50YWdlIHRvbGVyYW5jZSBvZiB0aGUgaW5wdXQgcmFuZ2UNCisgKi8NCitib29sIFBJRFN1YnN5c3RlbTo6T25UYXJnZXQoKQ0KK3sNCisJcmV0dXJuIG1fY29udHJvbGxlci0+T25UYXJnZXQoKTsNCit9DQorDQorLyoqDQorICogUmV0dXJucyB0aGUgY3VycmVudCBwb3NpdGlvbg0KKyAqIEByZXR1cm4gdGhlIGN1cnJlbnQgcG9zaXRpb24NCisgKi8NCitkb3VibGUgUElEU3Vic3lzdGVtOjpHZXRQb3NpdGlvbigpDQorew0KKwlyZXR1cm4gUmV0dXJuUElESW5wdXQoKTsNCit9DQorDQordm9pZCBQSURTdWJzeXN0ZW06OlBJRFdyaXRlKGZsb2F0IG91dHB1dCkNCit7DQorCVVzZVBJRE91dHB1dChvdXRwdXQpOw0KK30NCisNCitkb3VibGUgUElEU3Vic3lzdGVtOjpQSURHZXQoKQ0KK3sNCisJcmV0dXJuIFJldHVyblBJRElucHV0KCk7DQorfQ0KKw0KKw0KK3N0ZDo6c3RyaW5nIFBJRFN1YnN5c3RlbTo6R2V0U21hcnREYXNoYm9hcmRUeXBlKCl7DQorCXJldHVybiAiUElEQ29tbWFuZCI7DQorfQ0KK3ZvaWQgUElEU3Vic3lzdGVtOjpJbml0VGFibGUoSVRhYmxlKiB0YWJsZSl7DQorCW1fY29udHJvbGxlci0+SW5pdFRhYmxlKHRhYmxlKTsNCisJU3Vic3lzdGVtOjpJbml0VGFibGUodGFibGUpOw0KK30NCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9Db21tYW5kcy9QSURTdWJzeXN0ZW0uaCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0NvbW1hbmRzL1BJRFN1YnN5c3RlbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmNjlhMDMKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9Db21tYW5kcy9QSURTdWJzeXN0ZW0uaApAQCAtMCwwICsxLDcwIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy8qIENvcHlyaWdodCAoYykgRklSU1QgMjAxMS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4JCQkJCQkJICAqLw0KKy8qIE9wZW4gU291cmNlIFNvZnR3YXJlIC0gbWF5IGJlIG1vZGlmaWVkIGFuZCBzaGFyZWQgYnkgRlJDIHRlYW1zLiBUaGUgY29kZSAgICovDQorLyogbXVzdCBiZSBhY2NvbXBhbmllZCBieSB0aGUgRklSU1QgQlNEIGxpY2Vuc2UgZmlsZSBpbiAkKFdJTkRfQkFTRSkvV1BJTGliLiAgKi8NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKyNpZm5kZWYgX19QSURfU1VCU1lTVEVNX0hfXw0KKyNkZWZpbmUgX19QSURfU1VCU1lTVEVNX0hfXw0KKw0KKyNpbmNsdWRlICJDb21tYW5kcy9TdWJzeXN0ZW0uaCINCisjaW5jbHVkZSAiUElEQ29udHJvbGxlci5oIg0KKyNpbmNsdWRlICJQSURTb3VyY2UuaCINCisjaW5jbHVkZSAiUElET3V0cHV0LmgiDQorDQorLyoqDQorICogVGhpcyBjbGFzcyBpcyBkZXNpZ25lZCB0byBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgdGhlcmUgaXMgYSB7QGxpbmsgU3Vic3lzdGVtfQ0KKyAqIHdoaWNoIHVzZXMgYSBzaW5nbGUge0BsaW5rIFBJRENvbnRyb2xsZXJ9IGFsbW9zdCBjb25zdGFudGx5IChmb3IgaW5zdGFuY2UsIA0KKyAqIGFuIGVsZXZhdG9yIHdoaWNoIGF0dGVtcHRzIHRvIHN0YXkgYXQgYSBjb25zdGFudCBoZWlnaHQpLg0KKyAqDQorICogPHA+SXQgcHJvdmlkZXMgc29tZSBjb252ZW5pZW5jZSBtZXRob2RzIHRvIHJ1biBhbiBpbnRlcm5hbCB7QGxpbmsgUElEQ29udHJvbGxlcn0uDQorICogSXQgYWxzbyBhbGxvd3MgYWNjZXNzIHRvIHRoZSBpbnRlcm5hbCB7QGxpbmsgUElEQ29udHJvbGxlcn0gaW4gb3JkZXIgdG8gZ2l2ZSB0b3RhbCBjb250cm9sDQorICogdG8gdGhlIHByb2dyYW1tZXIuPC9wPg0KKyAqDQorICovDQorY2xhc3MgUElEU3Vic3lzdGVtIDogcHVibGljIFN1YnN5c3RlbSwgcHVibGljIFBJRE91dHB1dCwgcHVibGljIFBJRFNvdXJjZQ0KK3sNCitwdWJsaWM6DQorCVBJRFN1YnN5c3RlbShjb25zdCBjaGFyICpuYW1lLCBkb3VibGUgcCwgZG91YmxlIGksIGRvdWJsZSBkKTsNCisJUElEU3Vic3lzdGVtKGNvbnN0IGNoYXIgKm5hbWUsIGRvdWJsZSBwLCBkb3VibGUgaSwgZG91YmxlIGQsIGRvdWJsZSBmKTsNCisJUElEU3Vic3lzdGVtKGNvbnN0IGNoYXIgKm5hbWUsIGRvdWJsZSBwLCBkb3VibGUgaSwgZG91YmxlIGQsIGRvdWJsZSBmLCBkb3VibGUgcGVyaW9kKTsNCisJUElEU3Vic3lzdGVtKGRvdWJsZSBwLCBkb3VibGUgaSwgZG91YmxlIGQpOw0KKwlQSURTdWJzeXN0ZW0oZG91YmxlIHAsIGRvdWJsZSBpLCBkb3VibGUgZCwgZG91YmxlIGYpOw0KKwlQSURTdWJzeXN0ZW0oZG91YmxlIHAsIGRvdWJsZSBpLCBkb3VibGUgZCwgZG91YmxlIGYsIGRvdWJsZSBwZXJpb2QpOw0KKwl2aXJ0dWFsIH5QSURTdWJzeXN0ZW0oKTsNCisJDQorCXZvaWQgRW5hYmxlKCk7DQorCXZvaWQgRGlzYWJsZSgpOw0KKw0KKwkvLyBQSURPdXRwdXQgaW50ZXJmYWNlDQorCXZpcnR1YWwgdm9pZCBQSURXcml0ZShmbG9hdCBvdXRwdXQpOw0KKw0KKwkvLyBQSURTb3VyY2UgaW50ZXJmYWNlDQorCXZpcnR1YWwgZG91YmxlIFBJREdldCgpOw0KKwl2b2lkIFNldFNldHBvaW50KGRvdWJsZSBzZXRwb2ludCk7DQorCXZvaWQgU2V0U2V0cG9pbnRSZWxhdGl2ZShkb3VibGUgZGVsdGFTZXRwb2ludCk7DQorCXZvaWQgU2V0SW5wdXRSYW5nZShmbG9hdCBtaW5pbXVtSW5wdXQsIGZsb2F0IG1heGltdW1JbnB1dCk7DQorCWRvdWJsZSBHZXRTZXRwb2ludCgpOw0KKwlkb3VibGUgR2V0UG9zaXRpb24oKTsNCisNCisJdmlydHVhbCB2b2lkIFNldEFic29sdXRlVG9sZXJhbmNlKGZsb2F0IGFic1ZhbHVlKTsNCisJdmlydHVhbCB2b2lkIFNldFBlcmNlbnRUb2xlcmFuY2UoZmxvYXQgcGVyY2VudCk7DQorCXZpcnR1YWwgYm9vbCBPblRhcmdldCgpOw0KKwkNCitwcm90ZWN0ZWQ6DQorCVBJRENvbnRyb2xsZXIgKkdldFBJRENvbnRyb2xsZXIoKTsNCisNCisJdmlydHVhbCBkb3VibGUgUmV0dXJuUElESW5wdXQoKSA9IDA7DQorCXZpcnR1YWwgdm9pZCBVc2VQSURPdXRwdXQoZG91YmxlIG91dHB1dCkgPSAwOw0KKw0KK3ByaXZhdGU6DQorCS8qKiBUaGUgaW50ZXJuYWwge0BsaW5rIFBJRENvbnRyb2xsZXJ9ICovDQorCVBJRENvbnRyb2xsZXIgKm1fY29udHJvbGxlcjsNCisNCitwdWJsaWM6DQorCXZpcnR1YWwgdm9pZCBJbml0VGFibGUoSVRhYmxlKiB0YWJsZSk7DQorCXZpcnR1YWwgc3RkOjpzdHJpbmcgR2V0U21hcnREYXNoYm9hcmRUeXBlKCk7DQorfTsNCisNCisjZW5kaWYNCisNCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9Db21tYW5kcy9QcmludENvbW1hbmQuY3BwIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvQ29tbWFuZHMvUHJpbnRDb21tYW5kLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YWJhMDQ0Ci0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvQ29tbWFuZHMvUHJpbnRDb21tYW5kLmNwcApAQCAtMCwwICsxLDM3IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy8qIENvcHlyaWdodCAoYykgRklSU1QgMjAxMS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4JCQkJCQkJICAqLw0KKy8qIE9wZW4gU291cmNlIFNvZnR3YXJlIC0gbWF5IGJlIG1vZGlmaWVkIGFuZCBzaGFyZWQgYnkgRlJDIHRlYW1zLiBUaGUgY29kZSAgICovDQorLyogbXVzdCBiZSBhY2NvbXBhbmllZCBieSB0aGUgRklSU1QgQlNEIGxpY2Vuc2UgZmlsZSBpbiAkKFdJTkRfQkFTRSkvV1BJTGliLiAgKi8NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKyNpbmNsdWRlICJDb21tYW5kcy9QcmludENvbW1hbmQuaCINCisjaW5jbHVkZSAic3RkaW8uaCINCisjaW5jbHVkZSA8c3N0cmVhbT4NCisNCitQcmludENvbW1hbmQ6OlByaW50Q29tbWFuZChjb25zdCBjaGFyICptZXNzYWdlKSA6DQorCUNvbW1hbmQoKChzdGQ6OnN0cmluZ3N0cmVhbSYpKHN0ZDo6c3RyaW5nc3RyZWFtKCJQcmludCBcIiIpIDw8IG1lc3NhZ2UgPDwgIlwiIikpLnN0cigpLmNfc3RyKCkpDQorew0KKwltX21lc3NhZ2UgPSBtZXNzYWdlOw0KK30NCisNCit2b2lkIFByaW50Q29tbWFuZDo6SW5pdGlhbGl6ZSgpDQorew0KKwlwcmludGYobV9tZXNzYWdlLmNfc3RyKCkpOw0KK30NCisNCit2b2lkIFByaW50Q29tbWFuZDo6RXhlY3V0ZSgpDQorew0KK30NCisNCitib29sIFByaW50Q29tbWFuZDo6SXNGaW5pc2hlZCgpDQorew0KKwlyZXR1cm4gdHJ1ZTsNCit9DQorDQordm9pZCBQcmludENvbW1hbmQ6OkVuZCgpDQorew0KK30NCisNCit2b2lkIFByaW50Q29tbWFuZDo6SW50ZXJydXB0ZWQoKQ0KK3sNCit9DQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvQ29tbWFuZHMvUHJpbnRDb21tYW5kLmggYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9Db21tYW5kcy9QcmludENvbW1hbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNGRlOWZjCi0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvQ29tbWFuZHMvUHJpbnRDb21tYW5kLmgKQEAgLTAsMCArMSwzMCBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBDb3B5cmlnaHQgKGMpIEZJUlNUIDIwMTEuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCQkJCQkJCSAgKi8NCisvKiBPcGVuIFNvdXJjZSBTb2Z0d2FyZSAtIG1heSBiZSBtb2RpZmllZCBhbmQgc2hhcmVkIGJ5IEZSQyB0ZWFtcy4gVGhlIGNvZGUgICAqLw0KKy8qIG11c3QgYmUgYWNjb21wYW5pZWQgYnkgdGhlIEZJUlNUIEJTRCBsaWNlbnNlIGZpbGUgaW4gJChXSU5EX0JBU0UpL1dQSUxpYi4gICovDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisjaWZuZGVmIF9fUFJJTlRfQ09NTUFORF9IX18NCisjZGVmaW5lIF9fUFJJTlRfQ09NTUFORF9IX18NCisNCisjaW5jbHVkZSAiQ29tbWFuZHMvQ29tbWFuZC5oIg0KKyNpbmNsdWRlIDxzdHJpbmc+DQorDQorY2xhc3MgUHJpbnRDb21tYW5kIDogcHVibGljIENvbW1hbmQNCit7DQorcHVibGljOg0KKwlQcmludENvbW1hbmQoY29uc3QgY2hhciAqbWVzc2FnZSk7DQorCXZpcnR1YWwgflByaW50Q29tbWFuZCgpIHt9DQorDQorcHJvdGVjdGVkOg0KKwl2aXJ0dWFsIHZvaWQgSW5pdGlhbGl6ZSgpOw0KKwl2aXJ0dWFsIHZvaWQgRXhlY3V0ZSgpOw0KKwl2aXJ0dWFsIGJvb2wgSXNGaW5pc2hlZCgpOw0KKwl2aXJ0dWFsIHZvaWQgRW5kKCk7DQorCXZpcnR1YWwgdm9pZCBJbnRlcnJ1cHRlZCgpOw0KKw0KK3ByaXZhdGU6DQorCXN0ZDo6c3RyaW5nIG1fbWVzc2FnZTsNCit9Ow0KKw0KKyNlbmRpZg0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0NvbW1hbmRzL1NjaGVkdWxlci5jcHAgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9Db21tYW5kcy9TY2hlZHVsZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljZDY3ZDYKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9Db21tYW5kcy9TY2hlZHVsZXIuY3BwCkBAIC0wLDAgKzEsMjkyIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy8qIENvcHlyaWdodCAoYykgRklSU1QgMjAxMS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4JCQkJCQkJICAqLw0KKy8qIE9wZW4gU291cmNlIFNvZnR3YXJlIC0gbWF5IGJlIG1vZGlmaWVkIGFuZCBzaGFyZWQgYnkgRlJDIHRlYW1zLiBUaGUgY29kZSAgICovDQorLyogbXVzdCBiZSBhY2NvbXBhbmllZCBieSB0aGUgRklSU1QgQlNEIGxpY2Vuc2UgZmlsZSBpbiAkKFdJTkRfQkFTRSkvV1BJTGliLiAgKi8NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKyNpbmNsdWRlICJDb21tYW5kcy9TY2hlZHVsZXIuaCINCisNCisjaW5jbHVkZSAiQnV0dG9ucy9CdXR0b25TY2hlZHVsZXIuaCINCisjaW5jbHVkZSAiQ29tbWFuZHMvU3Vic3lzdGVtLmgiDQorI2luY2x1ZGUgIk5ldHdvcmtDb21tdW5pY2F0aW9uL1VzYWdlUmVwb3J0aW5nLmgiDQorI2luY2x1ZGUgIlN5bmNocm9uaXplZC5oIg0KKyNpbmNsdWRlICJXUElFcnJvcnMuaCINCisjaW5jbHVkZSA8aW9zdHJlYW0+DQorI2luY2x1ZGUgPHNldD4NCisjaW5jbHVkZSA8c2VtTGliLmg+DQorI2luY2x1ZGUgPGFsZ29yaXRobT4NCisNCitTY2hlZHVsZXIgKlNjaGVkdWxlcjo6X2luc3RhbmNlID0gTlVMTDsNCisNCitTY2hlZHVsZXI6OlNjaGVkdWxlcigpIDoNCisJbV9idXR0b25zTG9jayhOVUxMKSwNCisJbV9hZGRpdGlvbnNMb2NrKE5VTEwpLA0KKwltX2FkZGluZyhmYWxzZSkNCit7DQorCW1fYnV0dG9uc0xvY2sgPSBzZW1NQ3JlYXRlKFNFTV9RX1BSSU9SSVRZIHwgU0VNX0lOVkVSU0lPTl9TQUZFIHwgU0VNX0RFTEVURV9TQUZFKTsNCisJbV9hZGRpdGlvbnNMb2NrID0gc2VtTUNyZWF0ZShTRU1fUV9QUklPUklUWSB8IFNFTV9JTlZFUlNJT05fU0FGRSB8IFNFTV9ERUxFVEVfU0FGRSk7DQorDQorCW5Vc2FnZVJlcG9ydGluZzo6cmVwb3J0KG5Vc2FnZVJlcG9ydGluZzo6a1Jlc291cmNlVHlwZV9Db21tYW5kLCBuVXNhZ2VSZXBvcnRpbmc6OmtDb21tYW5kX1NjaGVkdWxlcik7DQorCQ0KKwltX2VuYWJsZWQgPSB0cnVlOw0KK30NCisNCitTY2hlZHVsZXI6On5TY2hlZHVsZXIoKQ0KK3sNCisJc2VtVGFrZShtX2FkZGl0aW9uc0xvY2ssIFdBSVRfRk9SRVZFUik7DQorCXNlbURlbGV0ZShtX2FkZGl0aW9uc0xvY2spOw0KKw0KKwlzZW1UYWtlKG1fYnV0dG9uc0xvY2ssIFdBSVRfRk9SRVZFUik7DQorCXNlbURlbGV0ZShtX2J1dHRvbnNMb2NrKTsNCit9DQorDQorLyoqDQorICogUmV0dXJucyB0aGUge0BsaW5rIFNjaGVkdWxlcn0sIGNyZWF0aW5nIGl0IGlmIG9uZSBkb2VzIG5vdCBleGlzdC4NCisgKiBAcmV0dXJuIHRoZSB7QGxpbmsgU2NoZWR1bGVyfQ0KKyAqLw0KK1NjaGVkdWxlciAqU2NoZWR1bGVyOjpHZXRJbnN0YW5jZSgpDQorew0KKwlpZiAoX2luc3RhbmNlID09IE5VTEwpDQorCQlfaW5zdGFuY2UgPSBuZXcgU2NoZWR1bGVyKCk7DQorCXJldHVybiBfaW5zdGFuY2U7DQorfQ0KKw0KK3ZvaWQgU2NoZWR1bGVyOjpTZXRFbmFibGVkKGJvb2wgZW5hYmxlZCkgew0KKwltX2VuYWJsZWQgPSBlbmFibGVkOw0KK30NCisNCisvKioNCisgKiBBZGQgYSBjb21tYW5kIHRvIGJlIHNjaGVkdWxlZCBsYXRlci4NCisgKiBJbiBhbnkgcGFzcyB0aHJvdWdoIHRoZSBzY2hlZHVsZXIsIGFsbCBjb21tYW5kcyBhcmUgYWRkZWQgdG8gdGhlIGFkZGl0aW9ucyBsaXN0LCB0aGVuDQorICogYXQgdGhlIGVuZCBvZiB0aGUgcGFzcywgdGhleSBhcmUgYWxsIHNjaGVkdWxlZC4NCisgKiBAcGFyYW0gY29tbWFuZCBUaGUgY29tbWFuZCB0byBiZSBzY2hlZHVsZWQNCisgKi8NCit2b2lkIFNjaGVkdWxlcjo6QWRkQ29tbWFuZChDb21tYW5kICpjb21tYW5kKQ0KK3sNCisJU3luY2hyb25pemVkIHN5bmMobV9hZGRpdGlvbnNMb2NrKTsNCisJaWYgKHN0ZDo6ZmluZChtX2FkZGl0aW9ucy5iZWdpbigpLCBtX2FkZGl0aW9ucy5lbmQoKSwgY29tbWFuZCkgIT0gbV9hZGRpdGlvbnMuZW5kKCkpDQorCQlyZXR1cm47DQorCW1fYWRkaXRpb25zLnB1c2hfYmFjayhjb21tYW5kKTsNCit9DQorDQordm9pZCBTY2hlZHVsZXI6OkFkZEJ1dHRvbihCdXR0b25TY2hlZHVsZXIgKmJ1dHRvbikNCit7DQorCVN5bmNocm9uaXplZCBzeW5jKG1fYnV0dG9uc0xvY2spOw0KKwltX2J1dHRvbnMucHVzaF9iYWNrKGJ1dHRvbik7DQorfQ0KKw0KK3ZvaWQgU2NoZWR1bGVyOjpQcm9jZXNzQ29tbWFuZEFkZGl0aW9uKENvbW1hbmQgKmNvbW1hbmQpDQorew0KKwlpZiAoY29tbWFuZCA9PSBOVUxMKQ0KKwkJcmV0dXJuOw0KKw0KKwkvLyBDaGVjayB0byBtYWtlIHN1cmUgbm8gYWRkaW5nIGR1cmluZyBhZGRpbmcNCisJaWYgKG1fYWRkaW5nKQ0KKwl7DQorCQl3cGlfc2V0V1BJRXJyb3JXaXRoQ29udGV4dChJbmNvbXBhdGlibGVTdGF0ZSwgIkNhbiBub3Qgc3RhcnQgY29tbWFuZCBmcm9tIGNhbmNlbCBtZXRob2QiKTsNCisJCXJldHVybjsNCisJfQ0KKw0KKwkvLyBPbmx5IGFkZCBpZiBub3QgYWxyZWFkeSBpbg0KKwlDb21tYW5kU2V0OjppdGVyYXRvciBmb3VuZCA9IG1fY29tbWFuZHMuZmluZChjb21tYW5kKTsNCisJaWYgKGZvdW5kID09IG1fY29tbWFuZHMuZW5kKCkpDQorCXsNCisJCS8vIENoZWNrIHRoYXQgdGhlIHJlcXVpcmVtZW50cyBjYW4gYmUgaGFkDQorCQlDb21tYW5kOjpTdWJzeXN0ZW1TZXQgcmVxdWlyZW1lbnRzID0gY29tbWFuZC0+R2V0UmVxdWlyZW1lbnRzKCk7DQorCQlDb21tYW5kOjpTdWJzeXN0ZW1TZXQ6Oml0ZXJhdG9yIGl0ZXI7DQorCQlmb3IgKGl0ZXIgPSByZXF1aXJlbWVudHMuYmVnaW4oKTsgaXRlciAhPSByZXF1aXJlbWVudHMuZW5kKCk7IGl0ZXIrKykNCisJCXsNCisJCQlTdWJzeXN0ZW0gKmxvY2sgPSAqaXRlcjsNCisJCQlpZiAobG9jay0+R2V0Q3VycmVudENvbW1hbmQoKSAhPSBOVUxMICYmICFsb2NrLT5HZXRDdXJyZW50Q29tbWFuZCgpLT5Jc0ludGVycnVwdGlibGUoKSkNCisJCQkJcmV0dXJuOw0KKwkJfQ0KKw0KKwkJLy8gR2l2ZSBpdCB0aGUgcmVxdWlyZW1lbnRzDQorCQltX2FkZGluZyA9IHRydWU7DQorCQlmb3IgKGl0ZXIgPSByZXF1aXJlbWVudHMuYmVnaW4oKTsgaXRlciAhPSByZXF1aXJlbWVudHMuZW5kKCk7IGl0ZXIrKykNCisJCXsNCisJCQlTdWJzeXN0ZW0gKmxvY2sgPSAqaXRlcjsNCisJCQlpZiAobG9jay0+R2V0Q3VycmVudENvbW1hbmQoKSAhPSBOVUxMKQ0KKwkJCXsNCisJCQkJbG9jay0+R2V0Q3VycmVudENvbW1hbmQoKS0+Q2FuY2VsKCk7DQorCQkJCVJlbW92ZShsb2NrLT5HZXRDdXJyZW50Q29tbWFuZCgpKTsNCisJCQl9DQorCQkJbG9jay0+U2V0Q3VycmVudENvbW1hbmQoY29tbWFuZCk7DQorCQl9DQorCQltX2FkZGluZyA9IGZhbHNlOw0KKw0KKwkJbV9jb21tYW5kcy5pbnNlcnQoY29tbWFuZCk7DQorDQorCQljb21tYW5kLT5TdGFydFJ1bm5pbmcoKTsNCisJfQ0KK30NCisNCisvKioNCisgKiBSdW5zIGEgc2luZ2xlIGl0ZXJhdGlvbiBvZiB0aGUgbG9vcC4gIFRoaXMgbWV0aG9kIHNob3VsZCBiZSBjYWxsZWQgb2Z0ZW4gaW4gb3JkZXIgdG8gaGF2ZSBhIGZ1bmN0aW9uaW5nDQorICoge0BsaW5rIENvbW1hbmR9IHN5c3RlbS4gIFRoZSBsb29wIGhhcyBmaXZlIHN0YWdlczoNCisgKg0KKyAqIDxvbD4NCisgKiA8bGk+IFBvbGwgdGhlIEJ1dHRvbnMgPC9saT4NCisgKiA8bGk+IEV4ZWN1dGUvUmVtb3ZlIHRoZSBDb21tYW5kcyA8L2xpPg0KKyAqIDxsaT4gU2VuZCB2YWx1ZXMgdG8gU21hcnREYXNoYm9hcmQgPC9saT4NCisgKiA8bGk+IEFkZCBDb21tYW5kcyA8L2xpPg0KKyAqIDxsaT4gQWRkIERlZmF1bHRzIDwvbGk+DQorICogPC9vbD4NCisgKi8NCit2b2lkIFNjaGVkdWxlcjo6UnVuKCkNCit7DQorCS8vIEdldCBidXR0b24gaW5wdXQgKGdvaW5nIGJhY2t3YXJkcyBwcmVzZXJ2ZXMgYnV0dG9uIHByaW9yaXR5KQ0KKwl7DQorCQlpZiAoIW1fZW5hYmxlZCkgcmV0dXJuOw0KKw0KKwkJU3luY2hyb25pemVkIHN5bmMobV9idXR0b25zTG9jayk7DQorCQlCdXR0b25WZWN0b3I6OnJldmVyc2VfaXRlcmF0b3IgckJ1dHRvbkl0ZXIgPSBtX2J1dHRvbnMucmJlZ2luKCk7DQorCQlmb3IgKDsgckJ1dHRvbkl0ZXIgIT0gbV9idXR0b25zLnJlbmQoKTsgckJ1dHRvbkl0ZXIrKykNCisJCXsNCisJCQkoKnJCdXR0b25JdGVyKS0+RXhlY3V0ZSgpOw0KKwkJfQ0KKwl9DQorDQorCS8vIExvb3AgdGhyb3VnaCB0aGUgY29tbWFuZHMNCisJQ29tbWFuZFNldDo6aXRlcmF0b3IgY29tbWFuZEl0ZXIgPSBtX2NvbW1hbmRzLmJlZ2luKCk7DQorCWZvciAoOyBjb21tYW5kSXRlciAhPSBtX2NvbW1hbmRzLmVuZCgpOykNCisJew0KKwkJQ29tbWFuZCAqY29tbWFuZCA9ICpjb21tYW5kSXRlcjsNCisJCS8vIEluY3JlbWVudCBiZWZvcmUgcG90ZW50aWFsbHkgcmVtb3ZpbmcgdG8ga2VlcCB0aGUgaXRlcmF0b3IgdmFsaWQNCisJCWNvbW1hbmRJdGVyKys7DQorCQlpZiAoIWNvbW1hbmQtPlJ1bigpKQ0KKwkJew0KKwkJCVJlbW92ZShjb21tYW5kKTsNCisJCX0NCisJfQ0KKw0KKwkvLyBBZGQgdGhlIG5ldyB0aGluZ3MNCisJew0KKwkJU3luY2hyb25pemVkIHN5bmMobV9hZGRpdGlvbnNMb2NrKTsNCisJCUNvbW1hbmRWZWN0b3I6Oml0ZXJhdG9yIGFkZGl0aW9uc0l0ZXIgPSBtX2FkZGl0aW9ucy5iZWdpbigpOw0KKwkJZm9yICg7IGFkZGl0aW9uc0l0ZXIgIT0gbV9hZGRpdGlvbnMuZW5kKCk7IGFkZGl0aW9uc0l0ZXIrKykNCisJCXsNCisJCQlQcm9jZXNzQ29tbWFuZEFkZGl0aW9uKCphZGRpdGlvbnNJdGVyKTsNCisJCX0NCisJCW1fYWRkaXRpb25zLmNsZWFyKCk7DQorCX0NCisNCisJLy8gQWRkIGluIHRoZSBkZWZhdWx0cw0KKwlDb21tYW5kOjpTdWJzeXN0ZW1TZXQ6Oml0ZXJhdG9yIHN1YnN5c3RlbUl0ZXIgPSBtX3N1YnN5c3RlbXMuYmVnaW4oKTsNCisJZm9yICg7IHN1YnN5c3RlbUl0ZXIgIT0gbV9zdWJzeXN0ZW1zLmVuZCgpOyBzdWJzeXN0ZW1JdGVyKyspDQorCXsNCisJCVN1YnN5c3RlbSAqbG9jayA9ICpzdWJzeXN0ZW1JdGVyOw0KKwkJaWYgKGxvY2stPkdldEN1cnJlbnRDb21tYW5kKCkgPT0gTlVMTCkNCisJCXsNCisJCQlQcm9jZXNzQ29tbWFuZEFkZGl0aW9uKGxvY2stPkdldERlZmF1bHRDb21tYW5kKCkpOw0KKwkJfQ0KKwkJbG9jay0+Q29uZmlybUNvbW1hbmQoKTsNCisJfQ0KKwkNCisJVXBkYXRlVGFibGUoKTsNCit9DQorDQorLyoqDQorICogUmVnaXN0ZXJzIGEge0BsaW5rIFN1YnN5c3RlbX0gdG8gdGhpcyB7QGxpbmsgU2NoZWR1bGVyfSwgc28gdGhhdCB0aGUge0BsaW5rIFNjaGVkdWxlcn0gbWlnaHQga25vdw0KKyAqIGlmIGEgZGVmYXVsdCB7QGxpbmsgQ29tbWFuZH0gbmVlZHMgdG8gYmUgcnVuLiAgQWxsIHtAbGluayBTdWJzeXN0ZW0gU3Vic3lzdGVtc30gc2hvdWxkIGNhbGwgdGhpcy4NCisgKiBAcGFyYW0gc3lzdGVtIHRoZSBzeXN0ZW0NCisgKi8NCit2b2lkIFNjaGVkdWxlcjo6UmVnaXN0ZXJTdWJzeXN0ZW0oU3Vic3lzdGVtICpzdWJzeXN0ZW0pDQorew0KKwlpZiAoc3Vic3lzdGVtID09IE5VTEwpDQorCXsNCisJCXdwaV9zZXRXUElFcnJvcldpdGhDb250ZXh0KE51bGxQYXJhbWV0ZXIsICJzdWJzeXN0ZW0iKTsNCisJCXJldHVybjsNCisJfQ0KKwltX3N1YnN5c3RlbXMuaW5zZXJ0KHN1YnN5c3RlbSk7DQorfQ0KKw0KKy8qKg0KKyAqIFJlbW92ZXMgdGhlIHtAbGluayBDb21tYW5kfSBmcm9tIHRoZSB7QGxpbmsgU2NoZWR1bGVyfS4NCisgKiBAcGFyYW0gY29tbWFuZCB0aGUgY29tbWFuZCB0byByZW1vdmUNCisgKi8NCit2b2lkIFNjaGVkdWxlcjo6UmVtb3ZlKENvbW1hbmQgKmNvbW1hbmQpDQorew0KKwlpZiAoY29tbWFuZCA9PSBOVUxMKQ0KKwl7DQorCQl3cGlfc2V0V1BJRXJyb3JXaXRoQ29udGV4dChOdWxsUGFyYW1ldGVyLCAiY29tbWFuZCIpOw0KKwkJcmV0dXJuOw0KKwl9DQorDQorCWlmICghbV9jb21tYW5kcy5lcmFzZShjb21tYW5kKSkNCisJCXJldHVybjsNCisNCisJQ29tbWFuZDo6U3Vic3lzdGVtU2V0IHJlcXVpcmVtZW50cyA9IGNvbW1hbmQtPkdldFJlcXVpcmVtZW50cygpOw0KKwlDb21tYW5kOjpTdWJzeXN0ZW1TZXQ6Oml0ZXJhdG9yIGl0ZXIgPSByZXF1aXJlbWVudHMuYmVnaW4oKTsNCisJZm9yICg7IGl0ZXIgIT0gcmVxdWlyZW1lbnRzLmVuZCgpOyBpdGVyKyspDQorCXsNCisJCVN1YnN5c3RlbSAqbG9jayA9ICppdGVyOw0KKwkJbG9jay0+U2V0Q3VycmVudENvbW1hbmQoTlVMTCk7DQorCX0NCisNCisJY29tbWFuZC0+UmVtb3ZlZCgpOw0KK30NCisNCit2b2lkIFNjaGVkdWxlcjo6UmVtb3ZlQWxsKCkgew0KKwl3aGlsZShtX2NvbW1hbmRzLnNpemUoKT4wKXsNCisJCVJlbW92ZSgqbV9jb21tYW5kcy5iZWdpbigpKTsNCisJfQ0KK30NCisNCit2b2lkIFNjaGVkdWxlcjo6VXBkYXRlVGFibGUoKSB7DQorCUNvbW1hbmRTZXQ6Oml0ZXJhdG9yIGNvbW1hbmRJdGVyOw0KKwlpZiAobV90YWJsZSAhPSBOVUxMKSB7DQorCQkvLyBHZXQgdGhlIGNvbW1hbmRzIHRvIGNhbmNlbA0KKwkJbV90YWJsZS0+UmV0cmlldmVWYWx1ZSgiQ2FuY2VsIiwgKnRvQ2FuY2VsKTsNCisJCQ0KKwkJZm9yIChjb21tYW5kSXRlciA9IG1fY29tbWFuZHMuYmVnaW4oKTsgY29tbWFuZEl0ZXIgIT0gbV9jb21tYW5kcy5lbmQoKTspIHsNCisJCQlmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdG9DYW5jZWwtPnNpemUoKTsgaSsrKSB7DQorCQkJCUNvbW1hbmQgKmMgPSAqY29tbWFuZEl0ZXI7DQorCQkJCWlmICgodW5zaWduZWQpYyA9PSB0b0NhbmNlbC0+Z2V0KGkpKSB7DQorCQkJCQljLT5DYW5jZWwoKTsNCisJCQkJfQ0KKwkJCX0NCisJCX0NCisJCXRvQ2FuY2VsLT5zZXRTaXplKDApOw0KKwkJbV90YWJsZS0+UHV0VmFsdWUoIkNhbmNlbCIsICp0b0NhbmNlbCk7DQorCQkNCisJCWNvbW1hbmRzLT5zZXRTaXplKDApOw0KKwkJaWRzLT5zZXRTaXplKDApOw0KKwkJDQorCQkvLyBTZXQgdGhlIHJ1bm5pbmcgY29tbWFuZHMNCisJCWZvciAoY29tbWFuZEl0ZXIgPSBtX2NvbW1hbmRzLmJlZ2luKCk7IGNvbW1hbmRJdGVyICE9IG1fY29tbWFuZHMuZW5kKCk7KSB7DQorCQkJQ29tbWFuZCAqYyA9ICpjb21tYW5kSXRlcjsNCisJCQljb21tYW5kcy0+YWRkKGMtPkdldE5hbWUoKSk7DQorCQkJaWRzLT5hZGQoKHVuc2lnbmVkKWMpOw0KKwkJfQ0KKwkJbV90YWJsZS0+UHV0VmFsdWUoIk5hbWVzIiwgKmNvbW1hbmRzKTsNCisJCW1fdGFibGUtPlB1dFZhbHVlKCJJZHMiLCAqaWRzKTsNCisJfQ0KK30NCisNCitzdGQ6OnN0cmluZyBTY2hlZHVsZXI6OkdldE5hbWUoKSB7DQorCXJldHVybiAiU2NoZWR1bGVyIjsNCit9DQorDQorc3RkOjpzdHJpbmcgU2NoZWR1bGVyOjpHZXRUeXBlKCkgew0KKwlyZXR1cm4gIlNjaGVkdWxlciI7DQorfQ0KKw0KK3N0ZDo6c3RyaW5nIFNjaGVkdWxlcjo6R2V0U21hcnREYXNoYm9hcmRUeXBlKCkgew0KKwlyZXR1cm4gIlNjaGVkdWxlciI7DQorfQ0KKw0KK3ZvaWQgU2NoZWR1bGVyOjpJbml0VGFibGUoSVRhYmxlICpzdWJUYWJsZSkgew0KKwltX3RhYmxlID0gc3ViVGFibGU7DQorCWNvbW1hbmRzID0gbmV3IFN0cmluZ0FycmF5KCk7DQorCWlkcyA9IG5ldyBOdW1iZXJBcnJheSgpOw0KKwl0b0NhbmNlbCA9IG5ldyBOdW1iZXJBcnJheSgpOw0KKwkNCisJbV90YWJsZS0+UHV0VmFsdWUoIk5hbWVzIiwgKmNvbW1hbmRzKTsNCisJbV90YWJsZS0+UHV0VmFsdWUoIklkcyIsICppZHMpOw0KKwltX3RhYmxlLT5QdXRWYWx1ZSgiQ2FuY2VsIiwgKnRvQ2FuY2VsKTsNCit9DQorDQorSVRhYmxlICogU2NoZWR1bGVyOjpHZXRUYWJsZSgpIHsNCisJcmV0dXJuIG1fdGFibGU7DQorfQ0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0NvbW1hbmRzL1NjaGVkdWxlci5oIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvQ29tbWFuZHMvU2NoZWR1bGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjYzNmFjNgotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0NvbW1hbmRzL1NjaGVkdWxlci5oCkBAIC0wLDAgKzEsNjkgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorLyogQ29weXJpZ2h0IChjKSBGSVJTVCAyMDExLiBBbGwgUmlnaHRzIFJlc2VydmVkLgkJCQkJCQkgICovDQorLyogT3BlbiBTb3VyY2UgU29mdHdhcmUgLSBtYXkgYmUgbW9kaWZpZWQgYW5kIHNoYXJlZCBieSBGUkMgdGVhbXMuIFRoZSBjb2RlICAgKi8NCisvKiBtdXN0IGJlIGFjY29tcGFuaWVkIGJ5IHRoZSBGSVJTVCBCU0QgbGljZW5zZSBmaWxlIGluICQoV0lORF9CQVNFKS9XUElMaWIuICAqLw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorI2lmbmRlZiBfX1NDSEVEVUxFUl9IX18NCisjZGVmaW5lIF9fU0NIRURVTEVSX0hfXw0KKw0KKyNpbmNsdWRlICJDb21tYW5kcy9Db21tYW5kLmgiDQorI2luY2x1ZGUgIkVycm9yQmFzZS5oIg0KKyNpbmNsdWRlICJTbWFydERhc2hib2FyZC9OYW1lZFNlbmRhYmxlLmgiDQorI2luY2x1ZGUgIm5ldHdvcmt0YWJsZXMvTmV0d29ya1RhYmxlLmgiDQorI2luY2x1ZGUgIm5ldHdvcmt0YWJsZXMyL3R5cGUvTnVtYmVyQXJyYXkuaCINCisjaW5jbHVkZSAibmV0d29ya3RhYmxlczIvdHlwZS9TdHJpbmdBcnJheS5oIg0KKyNpbmNsdWRlICJTbWFydERhc2hib2FyZC9TbWFydERhc2hib2FyZC5oIg0KKyNpbmNsdWRlIDxsaXN0Pg0KKyNpbmNsdWRlIDxtYXA+DQorI2luY2x1ZGUgPHNldD4NCisjaW5jbHVkZSA8dmVjdG9yPg0KKw0KK2NsYXNzIEJ1dHRvblNjaGVkdWxlcjsNCitjbGFzcyBTdWJzeXN0ZW07DQorDQorY2xhc3MgU2NoZWR1bGVyIDogcHVibGljIEVycm9yQmFzZSwgcHVibGljIE5hbWVkU2VuZGFibGUNCit7DQorcHVibGljOg0KKwlzdGF0aWMgU2NoZWR1bGVyICpHZXRJbnN0YW5jZSgpOw0KKw0KKwl2b2lkIEFkZENvbW1hbmQoQ29tbWFuZCogY29tbWFuZCk7DQorCXZvaWQgQWRkQnV0dG9uKEJ1dHRvblNjaGVkdWxlciogYnV0dG9uKTsNCisJdm9pZCBSZWdpc3RlclN1YnN5c3RlbShTdWJzeXN0ZW0gKnN1YnN5c3RlbSk7DQorCXZvaWQgUnVuKCk7CQ0KKwl2b2lkIFJlbW92ZShDb21tYW5kICpjb21tYW5kKTsNCisJdm9pZCBSZW1vdmVBbGwoKTsNCisJdm9pZCBTZXRFbmFibGVkKGJvb2wgZW5hYmxlZCk7DQorCQ0KKwl2b2lkIFVwZGF0ZVRhYmxlKCk7DQorCXN0ZDo6c3RyaW5nIEdldFNtYXJ0RGFzaGJvYXJkVHlwZSgpOw0KKwl2b2lkIEluaXRUYWJsZShJVGFibGUgKnN1YlRhYmxlKTsNCisJSVRhYmxlICogR2V0VGFibGUoKTsNCisJc3RkOjpzdHJpbmcgR2V0TmFtZSgpOw0KKwlzdGQ6OnN0cmluZyBHZXRUeXBlKCk7DQorDQorcHJpdmF0ZToNCisJU2NoZWR1bGVyKCk7DQorCXZpcnR1YWwgflNjaGVkdWxlcigpOw0KKw0KKwl2b2lkIFByb2Nlc3NDb21tYW5kQWRkaXRpb24oQ29tbWFuZCAqY29tbWFuZCk7DQorDQorCXN0YXRpYyBTY2hlZHVsZXIgKl9pbnN0YW5jZTsNCisJQ29tbWFuZDo6U3Vic3lzdGVtU2V0IG1fc3Vic3lzdGVtczsNCisJU0VNX0lEIG1fYnV0dG9uc0xvY2s7DQorCXR5cGVkZWYgc3RkOjp2ZWN0b3I8QnV0dG9uU2NoZWR1bGVyICo+IEJ1dHRvblZlY3RvcjsNCisJQnV0dG9uVmVjdG9yIG1fYnV0dG9uczsNCisJdHlwZWRlZiBzdGQ6OnZlY3RvcjxDb21tYW5kICo+IENvbW1hbmRWZWN0b3I7DQorCVNFTV9JRCBtX2FkZGl0aW9uc0xvY2s7DQorCUNvbW1hbmRWZWN0b3IgbV9hZGRpdGlvbnM7DQorCXR5cGVkZWYgc3RkOjpzZXQ8Q29tbWFuZCAqPiBDb21tYW5kU2V0Ow0KKwlDb21tYW5kU2V0IG1fY29tbWFuZHM7DQorCWJvb2wgbV9hZGRpbmc7DQorCWJvb2wgbV9lbmFibGVkOw0KKwlTdHJpbmdBcnJheSAqY29tbWFuZHM7DQorCU51bWJlckFycmF5ICppZHM7DQorCU51bWJlckFycmF5ICp0b0NhbmNlbDsNCisJSVRhYmxlICptX3RhYmxlOw0KK307DQorI2VuZGlmDQorDQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvQ29tbWFuZHMvU3RhcnRDb21tYW5kLmNwcCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0NvbW1hbmRzL1N0YXJ0Q29tbWFuZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWUxZTlkZgotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0NvbW1hbmRzL1N0YXJ0Q29tbWFuZC5jcHAKQEAgLTAsMCArMSwzNSBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBDb3B5cmlnaHQgKGMpIEZJUlNUIDIwMTEuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCQkJCQkJCSAgKi8NCisvKiBPcGVuIFNvdXJjZSBTb2Z0d2FyZSAtIG1heSBiZSBtb2RpZmllZCBhbmQgc2hhcmVkIGJ5IEZSQyB0ZWFtcy4gVGhlIGNvZGUgICAqLw0KKy8qIG11c3QgYmUgYWNjb21wYW5pZWQgYnkgdGhlIEZJUlNUIEJTRCBsaWNlbnNlIGZpbGUgaW4gJChXSU5EX0JBU0UpL1dQSUxpYi4gICovDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisjaW5jbHVkZSAiQ29tbWFuZHMvU3RhcnRDb21tYW5kLmgiDQorDQorU3RhcnRDb21tYW5kOjpTdGFydENvbW1hbmQoQ29tbWFuZCAqY29tbWFuZFRvU3RhcnQpIDoNCisJQ29tbWFuZCgiU3RhcnRDb21tYW5kIikNCit7DQorCW1fY29tbWFuZFRvRm9yayA9IGNvbW1hbmRUb1N0YXJ0Ow0KK30NCisNCit2b2lkIFN0YXJ0Q29tbWFuZDo6SW5pdGlhbGl6ZSgpDQorew0KKwltX2NvbW1hbmRUb0ZvcmstPlN0YXJ0KCk7DQorfQ0KKw0KK3ZvaWQgU3RhcnRDb21tYW5kOjpFeGVjdXRlKCkNCit7DQorfQ0KKw0KK3ZvaWQgU3RhcnRDb21tYW5kOjpFbmQoKQ0KK3sNCit9DQorDQordm9pZCBTdGFydENvbW1hbmQ6OkludGVycnVwdGVkKCkNCit7DQorfQ0KKw0KK2Jvb2wgU3RhcnRDb21tYW5kOjpJc0ZpbmlzaGVkKCkNCit7DQorICAgIHJldHVybiB0cnVlOw0KK30NCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9Db21tYW5kcy9TdGFydENvbW1hbmQuaCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0NvbW1hbmRzL1N0YXJ0Q29tbWFuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlOWNmNzIKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9Db21tYW5kcy9TdGFydENvbW1hbmQuaApAQCAtMCwwICsxLDI5IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy8qIENvcHlyaWdodCAoYykgRklSU1QgMjAxMS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4JCQkJCQkJICAqLw0KKy8qIE9wZW4gU291cmNlIFNvZnR3YXJlIC0gbWF5IGJlIG1vZGlmaWVkIGFuZCBzaGFyZWQgYnkgRlJDIHRlYW1zLiBUaGUgY29kZSAgICovDQorLyogbXVzdCBiZSBhY2NvbXBhbmllZCBieSB0aGUgRklSU1QgQlNEIGxpY2Vuc2UgZmlsZSBpbiAkKFdJTkRfQkFTRSkvV1BJTGliLiAgKi8NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKyNpZm5kZWYgX19TVEFSVF9DT01NQU5EX0hfXw0KKyNkZWZpbmUgX19TVEFSVF9DT01NQU5EX0hfXw0KKw0KKyNpbmNsdWRlICJDb21tYW5kcy9Db21tYW5kLmgiDQorDQorY2xhc3MgU3RhcnRDb21tYW5kIDogcHVibGljIENvbW1hbmQNCit7DQorcHVibGljOg0KKwlTdGFydENvbW1hbmQoQ29tbWFuZCAqY29tbWFuZFRvU3RhcnQpOw0KKwl2aXJ0dWFsIH5TdGFydENvbW1hbmQoKSB7fQ0KKw0KK3Byb3RlY3RlZDoNCisJdmlydHVhbCB2b2lkIEluaXRpYWxpemUoKTsNCisJdmlydHVhbCB2b2lkIEV4ZWN1dGUoKTsNCisJdmlydHVhbCBib29sIElzRmluaXNoZWQoKTsNCisJdmlydHVhbCB2b2lkIEVuZCgpOw0KKwl2aXJ0dWFsIHZvaWQgSW50ZXJydXB0ZWQoKTsNCisNCitwcml2YXRlOg0KKwlDb21tYW5kICptX2NvbW1hbmRUb0Zvcms7DQorfTsNCisNCisjZW5kaWYNCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9Db21tYW5kcy9TdWJzeXN0ZW0uY3BwIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvQ29tbWFuZHMvU3Vic3lzdGVtLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZmQ1NTljCi0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvQ29tbWFuZHMvU3Vic3lzdGVtLmNwcApAQCAtMCwwICsxLDE3NCBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBDb3B5cmlnaHQgKGMpIEZJUlNUIDIwMTEuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCQkJCQkJCSAgKi8NCisvKiBPcGVuIFNvdXJjZSBTb2Z0d2FyZSAtIG1heSBiZSBtb2RpZmllZCBhbmQgc2hhcmVkIGJ5IEZSQyB0ZWFtcy4gVGhlIGNvZGUgICAqLw0KKy8qIG11c3QgYmUgYWNjb21wYW5pZWQgYnkgdGhlIEZJUlNUIEJTRCBsaWNlbnNlIGZpbGUgaW4gJChXSU5EX0JBU0UpL1dQSUxpYi4gICovDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisjaW5jbHVkZSAiQ29tbWFuZHMvU3Vic3lzdGVtLmgiDQorDQorI2luY2x1ZGUgIkNvbW1hbmRzL0NvbW1hbmQuaCINCisjaW5jbHVkZSAiQ29tbWFuZHMvU2NoZWR1bGVyLmgiDQorI2luY2x1ZGUgIldQSUVycm9ycy5oIg0KKw0KKy8qKg0KKyAqIENyZWF0ZXMgYSBzdWJzeXN0ZW0gd2l0aCB0aGUgZ2l2ZW4gbmFtZQ0KKyAqIEBwYXJhbSBuYW1lIHRoZSBuYW1lIG9mIHRoZSBzdWJzeXN0ZW0NCisgKi8NCitTdWJzeXN0ZW06OlN1YnN5c3RlbShjb25zdCBjaGFyICpuYW1lKSA6DQorCW1fY3VycmVudENvbW1hbmQoTlVMTCksDQorCW1fZGVmYXVsdENvbW1hbmQoTlVMTCksDQorCW1faW5pdGlhbGl6ZWREZWZhdWx0Q29tbWFuZChmYWxzZSkNCit7DQorCW1fbmFtZSA9IG5hbWU7DQorCVNjaGVkdWxlcjo6R2V0SW5zdGFuY2UoKS0+UmVnaXN0ZXJTdWJzeXN0ZW0odGhpcyk7DQorCW1fdGFibGUgPSBOVUxMOw0KK30NCisvKioNCisgKiBJbml0aWFsaXplIHRoZSBkZWZhdWx0IGNvbW1hbmQgZm9yIHRoaXMgc3Vic3lzdGVtDQorICogVGhpcyBpcyBtZWFudCB0byBiZSB0aGUgcGxhY2UgdG8gY2FsbCBTZXREZWZhdWx0Q29tbWFuZCBpbiBhIHN1YnN5c3RlbSBhbmQgd2lsbCBiZSBjYWxsZWQNCisgKiBvbiBhbGwgdGhlIHN1YnN5c3RlbXMgYnkgdGhlIENvbW1hbmRCYXNlIG1ldGhvZCBiZWZvcmUgdGhlIHByb2dyYW0gc3RhcnRzIHJ1bm5pbmcgYnkgdXNpbmcNCisgKiB0aGUgbGlzdCBvZiBhbGwgcmVnaXN0ZXJlZCBTdWJzeXN0ZW1zIGluc2lkZSB0aGUgU2NoZWR1bGVyLg0KKyAqIA0KKyAqIFRoaXMgc2hvdWxkIGJlIG92ZXJyaWRkZW4gYnkgYSBTdWJzeXN0ZW0gdGhhdCBoYXMgYSBkZWZhdWx0IENvbW1hbmQNCisgKi8NCit2b2lkIFN1YnN5c3RlbTo6SW5pdERlZmF1bHRDb21tYW5kKCkgew0KKw0KK30NCisNCisvKioNCisgKiBTZXRzIHRoZSBkZWZhdWx0IGNvbW1hbmQuICBJZiB0aGlzIGlzIG5vdCBjYWxsZWQgb3IgaXMgY2FsbGVkIHdpdGggbnVsbCwNCisgKiB0aGVuIHRoZXJlIHdpbGwgYmUgbm8gZGVmYXVsdCBjb21tYW5kIGZvciB0aGUgc3Vic3lzdGVtLg0KKyAqDQorICogPHA+PGI+V0FSTklORzo8L2I+IFRoaXMgc2hvdWxkIDxiPk5PVDwvYj4gYmUgY2FsbGVkIGluIGEgY29uc3RydWN0b3IgaWYgdGhlIHN1YnN5c3RlbSBpcyBhDQorICogc2luZ2xldG9uLjwvcD4NCisgKg0KKyAqIEBwYXJhbSBjb21tYW5kIHRoZSBkZWZhdWx0IGNvbW1hbmQgKG9yIG51bGwgaWYgdGhlcmUgc2hvdWxkIGJlIG5vbmUpDQorICovDQordm9pZCBTdWJzeXN0ZW06OlNldERlZmF1bHRDb21tYW5kKENvbW1hbmQgKmNvbW1hbmQpDQorew0KKwlpZiAoY29tbWFuZCA9PSBOVUxMKQ0KKwl7DQorCQltX2RlZmF1bHRDb21tYW5kID0gTlVMTDsNCisJfQ0KKwllbHNlDQorCXsNCisJCWJvb2wgZm91bmQgPSBmYWxzZTsNCisJCUNvbW1hbmQ6OlN1YnN5c3RlbVNldCByZXF1aXJlbWVudHMgPSBjb21tYW5kLT5HZXRSZXF1aXJlbWVudHMoKTsNCisJCUNvbW1hbmQ6OlN1YnN5c3RlbVNldDo6aXRlcmF0b3IgaXRlciA9IHJlcXVpcmVtZW50cy5iZWdpbigpOw0KKwkJZm9yICg7IGl0ZXIgIT0gcmVxdWlyZW1lbnRzLmVuZCgpOyBpdGVyKyspDQorCQl7DQorCQkJaWYgKCppdGVyID09IHRoaXMpDQorCQkJew0KKwkJCQlmb3VuZCA9IHRydWU7DQorCQkJCWJyZWFrOw0KKwkJCX0NCisJCX0NCisNCisJCWlmICghZm91bmQpDQorCQl7DQorCQkJd3BpX3NldFdQSUVycm9yV2l0aENvbnRleHQoQ29tbWFuZElsbGVnYWxVc2UsICJBIGRlZmF1bHQgY29tbWFuZCBtdXN0IHJlcXVpcmUgdGhlIHN1YnN5c3RlbSIpOw0KKwkJCXJldHVybjsNCisJCX0NCisJCQ0KKwkJbV9kZWZhdWx0Q29tbWFuZCA9IGNvbW1hbmQ7DQorCX0NCisJaWYgKG1fdGFibGUgIT0gTlVMTCkNCisJew0KKwkJaWYgKG1fZGVmYXVsdENvbW1hbmQgIT0gTlVMTCkNCisJCXsNCisJCQltX3RhYmxlLT5QdXRCb29sZWFuKCJoYXNEZWZhdWx0IiwgdHJ1ZSk7DQorCQkJbV90YWJsZS0+UHV0U3RyaW5nKCJkZWZhdWx0IiwgbV9kZWZhdWx0Q29tbWFuZC0+R2V0TmFtZSgpKTsNCisJCX0NCisJCWVsc2UNCisJCXsNCisJCQltX3RhYmxlLT5QdXRCb29sZWFuKCJoYXNEZWZhdWx0IiwgZmFsc2UpOw0KKwkJfQ0KKwl9DQorfQ0KKw0KKy8qKg0KKyAqIFJldHVybnMgdGhlIGRlZmF1bHQgY29tbWFuZCAob3IgbnVsbCBpZiB0aGVyZSBpcyBub25lKS4NCisgKiBAcmV0dXJuIHRoZSBkZWZhdWx0IGNvbW1hbmQNCisgKi8NCitDb21tYW5kICpTdWJzeXN0ZW06OkdldERlZmF1bHRDb21tYW5kKCkNCit7DQorCWlmICghbV9pbml0aWFsaXplZERlZmF1bHRDb21tYW5kKSB7DQorCQltX2luaXRpYWxpemVkRGVmYXVsdENvbW1hbmQgPSB0cnVlOw0KKwkJSW5pdERlZmF1bHRDb21tYW5kKCk7DQorCX0NCisJcmV0dXJuIG1fZGVmYXVsdENvbW1hbmQ7DQorfQ0KKw0KKy8qKg0KKyAqIFNldHMgdGhlIGN1cnJlbnQgY29tbWFuZA0KKyAqIEBwYXJhbSBjb21tYW5kIHRoZSBuZXcgY3VycmVudCBjb21tYW5kDQorICovDQordm9pZCBTdWJzeXN0ZW06OlNldEN1cnJlbnRDb21tYW5kKENvbW1hbmQgKmNvbW1hbmQpDQorew0KKwltX2N1cnJlbnRDb21tYW5kID0gY29tbWFuZDsNCit9DQorDQorLyoqDQorICogUmV0dXJucyB0aGUgY29tbWFuZCB3aGljaCBjdXJyZW50bHkgY2xhaW1zIHRoaXMgc3Vic3lzdGVtLg0KKyAqIEByZXR1cm4gdGhlIGNvbW1hbmQgd2hpY2ggY3VycmVudGx5IGNsYWltcyB0aGlzIHN1YnN5c3RlbQ0KKyAqLw0KK0NvbW1hbmQgKlN1YnN5c3RlbTo6R2V0Q3VycmVudENvbW1hbmQoKQ0KK3sNCisJcmV0dXJuIG1fY3VycmVudENvbW1hbmQ7DQorfQ0KKw0KKy8qKg0KKyAqIENhbGwgdGhpcyB0byBhbGVydCBTdWJzeXN0ZW0gdGhhdCB0aGUgY3VycmVudCBjb21tYW5kIGlzIGFjdHVhbGx5IHRoZSBjb21tYW5kLg0KKyAqIFNvbWV0aW1lcywgdGhlIHtAbGluayBTdWJzeXN0ZW19IGlzIHRvbGQgdGhhdCBpdCBoYXMgbm8gY29tbWFuZCB3aGlsZSB0aGUge0BsaW5rIFNjaGVkdWxlcn0NCisgKiBpcyBnb2luZyB0aHJvdWdoIHRoZSBsb29wLCBvbmx5IHRvIGJlIHNvb24gYWZ0ZXIgZ2l2ZW4gYSBuZXcgb25lLiAgVGhpcyB3aWxsIGF2b2lkIHRoYXQgc2l0dWF0aW9uLg0KKyAqLw0KK3ZvaWQgU3Vic3lzdGVtOjpDb25maXJtQ29tbWFuZCgpDQorew0KKwlpZiAobV90YWJsZSAhPSBOVUxMKQ0KKwl7DQorCQlpZiAobV9jdXJyZW50Q29tbWFuZCAhPSBOVUxMKQ0KKwkJew0KKwkJCW1fdGFibGUtPlB1dEJvb2xlYW4oImhhc0NvbW1hbmQiLCB0cnVlKTsNCisJCQltX3RhYmxlLT5QdXRTdHJpbmcoImNvbW1hbmQiLCBtX2N1cnJlbnRDb21tYW5kLT5HZXROYW1lKCkpOw0KKwkJfQ0KKwkJZWxzZQ0KKwkJew0KKwkJCW1fdGFibGUtPlB1dEJvb2xlYW4oImhhc0NvbW1hbmQiLCBmYWxzZSk7DQorCQl9DQorCX0NCit9DQorDQorDQorDQorc3RkOjpzdHJpbmcgU3Vic3lzdGVtOjpHZXROYW1lKCkNCit7DQorCXJldHVybiBtX25hbWU7DQorfQ0KKw0KK3N0ZDo6c3RyaW5nIFN1YnN5c3RlbTo6R2V0U21hcnREYXNoYm9hcmRUeXBlKCkNCit7DQorCXJldHVybiAiU3Vic3lzdGVtIjsNCit9DQorDQordm9pZCBTdWJzeXN0ZW06OkluaXRUYWJsZShJVGFibGUqIHRhYmxlKQ0KK3sNCisgICAgbV90YWJsZSA9IHRhYmxlOw0KKyAgICBpZihtX3RhYmxlIT1OVUxMKXsNCisgICAgICAgIGlmIChtX2RlZmF1bHRDb21tYW5kICE9IE5VTEwpIHsNCisgICAgICAgIAltX3RhYmxlLT5QdXRCb29sZWFuKCJoYXNEZWZhdWx0IiwgdHJ1ZSk7DQorICAgICAgICAJbV90YWJsZS0+UHV0U3RyaW5nKCJkZWZhdWx0IiwgbV9kZWZhdWx0Q29tbWFuZC0+R2V0TmFtZSgpKTsNCisgICAgICAgIH0gZWxzZSB7DQorICAgICAgICAJbV90YWJsZS0+UHV0Qm9vbGVhbigiaGFzRGVmYXVsdCIsIGZhbHNlKTsNCisgICAgICAgIH0NCisgICAgICAgIGlmIChtX2N1cnJlbnRDb21tYW5kICE9IE5VTEwpIHsNCisgICAgICAgIAltX3RhYmxlLT5QdXRCb29sZWFuKCJoYXNDb21tYW5kIiwgdHJ1ZSk7DQorICAgICAgICAgICAgbV90YWJsZS0+UHV0U3RyaW5nKCJjb21tYW5kIiwgbV9jdXJyZW50Q29tbWFuZC0+R2V0TmFtZSgpKTsNCisgICAgICAgIH0gZWxzZSB7DQorICAgICAgICAJbV90YWJsZS0+UHV0Qm9vbGVhbigiaGFzQ29tbWFuZCIsIGZhbHNlKTsNCisgICAgICAgIH0NCisgICAgfQ0KK30NCisNCitJVGFibGUqIFN1YnN5c3RlbTo6R2V0VGFibGUoKXsNCisJcmV0dXJuIG1fdGFibGU7DQorfQ0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0NvbW1hbmRzL1N1YnN5c3RlbS5oIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvQ29tbWFuZHMvU3Vic3lzdGVtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjA0NjE2ZAotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0NvbW1hbmRzL1N1YnN5c3RlbS5oCkBAIC0wLDAgKzEsNDcgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorLyogQ29weXJpZ2h0IChjKSBGSVJTVCAyMDExLiBBbGwgUmlnaHRzIFJlc2VydmVkLgkJCQkJCQkgICovDQorLyogT3BlbiBTb3VyY2UgU29mdHdhcmUgLSBtYXkgYmUgbW9kaWZpZWQgYW5kIHNoYXJlZCBieSBGUkMgdGVhbXMuIFRoZSBjb2RlICAgKi8NCisvKiBtdXN0IGJlIGFjY29tcGFuaWVkIGJ5IHRoZSBGSVJTVCBCU0QgbGljZW5zZSBmaWxlIGluICQoV0lORF9CQVNFKS9XUElMaWIuICAqLw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorI2lmbmRlZiBfX1NVQlNZU1RFTV9IX18NCisjZGVmaW5lIF9fU1VCU1lTVEVNX0hfXw0KKw0KKyNpbmNsdWRlICJFcnJvckJhc2UuaCINCisjaW5jbHVkZSAiU21hcnREYXNoYm9hcmQvTmFtZWRTZW5kYWJsZS5oIg0KKyNpbmNsdWRlIDxzdHJpbmc+DQorDQorDQorY2xhc3MgQ29tbWFuZDsNCisNCitjbGFzcyBTdWJzeXN0ZW0gOiBwdWJsaWMgRXJyb3JCYXNlLCBwdWJsaWMgTmFtZWRTZW5kYWJsZQ0KK3sNCisJZnJpZW5kIGNsYXNzIFNjaGVkdWxlcjsNCitwdWJsaWM6DQorCVN1YnN5c3RlbShjb25zdCBjaGFyICpuYW1lKTsNCisJdmlydHVhbCB+U3Vic3lzdGVtKCkge30NCisNCisJdm9pZCBTZXREZWZhdWx0Q29tbWFuZChDb21tYW5kICpjb21tYW5kKTsNCisJQ29tbWFuZCAqR2V0RGVmYXVsdENvbW1hbmQoKTsNCisJdm9pZCBTZXRDdXJyZW50Q29tbWFuZChDb21tYW5kICpjb21tYW5kKTsNCisJQ29tbWFuZCAqR2V0Q3VycmVudENvbW1hbmQoKTsNCisJdmlydHVhbCB2b2lkIEluaXREZWZhdWx0Q29tbWFuZCgpOw0KKwkNCitwcml2YXRlOg0KKwl2b2lkIENvbmZpcm1Db21tYW5kKCk7DQorDQorCUNvbW1hbmQgKm1fY3VycmVudENvbW1hbmQ7DQorCUNvbW1hbmQgKm1fZGVmYXVsdENvbW1hbmQ7DQorCXN0ZDo6c3RyaW5nIG1fbmFtZTsNCisJYm9vbCBtX2luaXRpYWxpemVkRGVmYXVsdENvbW1hbmQ7DQorDQorcHVibGljOg0KKwl2aXJ0dWFsIHN0ZDo6c3RyaW5nIEdldE5hbWUoKTsNCisJdmlydHVhbCB2b2lkIEluaXRUYWJsZShJVGFibGUqIHRhYmxlKTsNCisJdmlydHVhbCBJVGFibGUqIEdldFRhYmxlKCk7DQorCXZpcnR1YWwgc3RkOjpzdHJpbmcgR2V0U21hcnREYXNoYm9hcmRUeXBlKCk7DQorcHJvdGVjdGVkOg0KKwlJVGFibGUqIG1fdGFibGU7DQorfTsNCisNCisjZW5kaWYNCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9Db21tYW5kcy9XYWl0Q29tbWFuZC5jcHAgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9Db21tYW5kcy9XYWl0Q29tbWFuZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjI3NjM2MwotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0NvbW1hbmRzL1dhaXRDb21tYW5kLmNwcApAQCAtMCwwICsxLDM5IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy8qIENvcHlyaWdodCAoYykgRklSU1QgMjAxMS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4JCQkJCQkJICAqLw0KKy8qIE9wZW4gU291cmNlIFNvZnR3YXJlIC0gbWF5IGJlIG1vZGlmaWVkIGFuZCBzaGFyZWQgYnkgRlJDIHRlYW1zLiBUaGUgY29kZSAgICovDQorLyogbXVzdCBiZSBhY2NvbXBhbmllZCBieSB0aGUgRklSU1QgQlNEIGxpY2Vuc2UgZmlsZSBpbiAkKFdJTkRfQkFTRSkvV1BJTGliLiAgKi8NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKyNpbmNsdWRlICJDb21tYW5kcy9XYWl0Q29tbWFuZC5oIg0KKyNpbmNsdWRlIDxzc3RyZWFtPg0KKw0KK1dhaXRDb21tYW5kOjpXYWl0Q29tbWFuZChkb3VibGUgdGltZW91dCkgOg0KKwlDb21tYW5kKCgoc3RkOjpzdHJpbmdzdHJlYW0mKShzdGQ6OnN0cmluZ3N0cmVhbSgiV2FpdCgiKSA8PCB0aW1lb3V0IDw8ICIpIikpLnN0cigpLmNfc3RyKCksIHRpbWVvdXQpDQorew0KK30NCisNCitXYWl0Q29tbWFuZDo6V2FpdENvbW1hbmQoY29uc3QgY2hhciAqbmFtZSwgZG91YmxlIHRpbWVvdXQpIDoNCisJQ29tbWFuZChuYW1lLCB0aW1lb3V0KQ0KK3sNCit9DQorDQordm9pZCBXYWl0Q29tbWFuZDo6SW5pdGlhbGl6ZSgpDQorew0KK30NCisNCit2b2lkIFdhaXRDb21tYW5kOjpFeGVjdXRlKCkNCit7DQorfQ0KKw0KK2Jvb2wgV2FpdENvbW1hbmQ6OklzRmluaXNoZWQoKQ0KK3sNCisgICAgcmV0dXJuIElzVGltZWRPdXQoKTsNCit9DQorDQordm9pZCBXYWl0Q29tbWFuZDo6RW5kKCkNCit7DQorfQ0KKw0KK3ZvaWQgV2FpdENvbW1hbmQ6OkludGVycnVwdGVkKCkNCit7DQorfQ0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0NvbW1hbmRzL1dhaXRDb21tYW5kLmggYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9Db21tYW5kcy9XYWl0Q29tbWFuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhOWJjYTgKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9Db21tYW5kcy9XYWl0Q29tbWFuZC5oCkBAIC0wLDAgKzEsMjcgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorLyogQ29weXJpZ2h0IChjKSBGSVJTVCAyMDExLiBBbGwgUmlnaHRzIFJlc2VydmVkLgkJCQkJCQkgICovDQorLyogT3BlbiBTb3VyY2UgU29mdHdhcmUgLSBtYXkgYmUgbW9kaWZpZWQgYW5kIHNoYXJlZCBieSBGUkMgdGVhbXMuIFRoZSBjb2RlICAgKi8NCisvKiBtdXN0IGJlIGFjY29tcGFuaWVkIGJ5IHRoZSBGSVJTVCBCU0QgbGljZW5zZSBmaWxlIGluICQoV0lORF9CQVNFKS9XUElMaWIuICAqLw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorI2lmbmRlZiBfX1dBSVRfQ09NTUFORF9IX18NCisjZGVmaW5lIF9fV0FJVF9DT01NQU5EX0hfXw0KKw0KKyNpbmNsdWRlICJDb21tYW5kcy9Db21tYW5kLmgiDQorDQorY2xhc3MgV2FpdENvbW1hbmQgOiBwdWJsaWMgQ29tbWFuZA0KK3sNCitwdWJsaWM6DQorCVdhaXRDb21tYW5kKGRvdWJsZSB0aW1lb3V0KTsNCisJV2FpdENvbW1hbmQoY29uc3QgY2hhciAqbmFtZSwgZG91YmxlIHRpbWVvdXQpOw0KKwl2aXJ0dWFsIH5XYWl0Q29tbWFuZCgpIHt9DQorDQorcHJvdGVjdGVkOg0KKwl2aXJ0dWFsIHZvaWQgSW5pdGlhbGl6ZSgpOw0KKwl2aXJ0dWFsIHZvaWQgRXhlY3V0ZSgpOw0KKwl2aXJ0dWFsIGJvb2wgSXNGaW5pc2hlZCgpOw0KKwl2aXJ0dWFsIHZvaWQgRW5kKCk7DQorCXZpcnR1YWwgdm9pZCBJbnRlcnJ1cHRlZCgpOwkNCit9Ow0KKw0KKyNlbmRpZg0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0NvbW1hbmRzL1dhaXRGb3JDaGlsZHJlbi5jcHAgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9Db21tYW5kcy9XYWl0Rm9yQ2hpbGRyZW4uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3ZDAzYjMKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9Db21tYW5kcy9XYWl0Rm9yQ2hpbGRyZW4uY3BwCkBAIC0wLDAgKzEsMzkgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorLyogQ29weXJpZ2h0IChjKSBGSVJTVCAyMDExLiBBbGwgUmlnaHRzIFJlc2VydmVkLgkJCQkJCQkgICovDQorLyogT3BlbiBTb3VyY2UgU29mdHdhcmUgLSBtYXkgYmUgbW9kaWZpZWQgYW5kIHNoYXJlZCBieSBGUkMgdGVhbXMuIFRoZSBjb2RlICAgKi8NCisvKiBtdXN0IGJlIGFjY29tcGFuaWVkIGJ5IHRoZSBGSVJTVCBCU0QgbGljZW5zZSBmaWxlIGluICQoV0lORF9CQVNFKS9XUElMaWIuICAqLw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorI2luY2x1ZGUgIkNvbW1hbmRzL1dhaXRGb3JDaGlsZHJlbi5oIg0KKyNpbmNsdWRlICJDb21tYW5kcy9Db21tYW5kR3JvdXAuaCINCisNCitXYWl0Rm9yQ2hpbGRyZW46OldhaXRGb3JDaGlsZHJlbihkb3VibGUgdGltZW91dCkgOg0KKwlDb21tYW5kKCJXYWl0Rm9yQ2hpbGRyZW4iLCB0aW1lb3V0KQ0KK3sJDQorfQ0KKw0KK1dhaXRGb3JDaGlsZHJlbjo6V2FpdEZvckNoaWxkcmVuKGNvbnN0IGNoYXIgKm5hbWUsIGRvdWJsZSB0aW1lb3V0KSA6DQorCUNvbW1hbmQobmFtZSwgdGltZW91dCkNCit7DQorfQ0KKw0KK3ZvaWQgV2FpdEZvckNoaWxkcmVuOjpJbml0aWFsaXplKCkNCit7DQorfQ0KKw0KK3ZvaWQgV2FpdEZvckNoaWxkcmVuOjpFeGVjdXRlKCkNCit7DQorfQ0KKw0KK3ZvaWQgV2FpdEZvckNoaWxkcmVuOjpFbmQoKQ0KK3sNCit9DQorDQordm9pZCBXYWl0Rm9yQ2hpbGRyZW46OkludGVycnVwdGVkKCkNCit7DQorfQ0KKw0KK2Jvb2wgV2FpdEZvckNoaWxkcmVuOjpJc0ZpbmlzaGVkKCkNCit7DQorICAgIHJldHVybiBHZXRHcm91cCgpID09IE5VTEwgfHwgR2V0R3JvdXAoKS0+R2V0U2l6ZSgpID09IDA7DQorfQ0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0NvbW1hbmRzL1dhaXRGb3JDaGlsZHJlbi5oIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvQ29tbWFuZHMvV2FpdEZvckNoaWxkcmVuLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQ2N2QyYQotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0NvbW1hbmRzL1dhaXRGb3JDaGlsZHJlbi5oCkBAIC0wLDAgKzEsMjcgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorLyogQ29weXJpZ2h0IChjKSBGSVJTVCAyMDExLiBBbGwgUmlnaHRzIFJlc2VydmVkLgkJCQkJCQkgICovDQorLyogT3BlbiBTb3VyY2UgU29mdHdhcmUgLSBtYXkgYmUgbW9kaWZpZWQgYW5kIHNoYXJlZCBieSBGUkMgdGVhbXMuIFRoZSBjb2RlICAgKi8NCisvKiBtdXN0IGJlIGFjY29tcGFuaWVkIGJ5IHRoZSBGSVJTVCBCU0QgbGljZW5zZSBmaWxlIGluICQoV0lORF9CQVNFKS9XUElMaWIuICAqLw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorI2lmbmRlZiBfX1dBSVRfRk9SX0NISUxEUkVOX0hfXw0KKyNkZWZpbmUgX19XQUlUX0ZPUl9DSElMRFJFTl9IX18NCisNCisjaW5jbHVkZSAiQ29tbWFuZHMvQ29tbWFuZC5oIg0KKw0KK2NsYXNzIFdhaXRGb3JDaGlsZHJlbiA6IHB1YmxpYyBDb21tYW5kDQorew0KK3B1YmxpYzoNCisJV2FpdEZvckNoaWxkcmVuKGRvdWJsZSB0aW1lb3V0KTsNCisJV2FpdEZvckNoaWxkcmVuKGNvbnN0IGNoYXIgKm5hbWUsIGRvdWJsZSB0aW1lb3V0KTsNCisJdmlydHVhbCB+V2FpdEZvckNoaWxkcmVuKCkge30NCisNCitwcm90ZWN0ZWQ6DQorCXZpcnR1YWwgdm9pZCBJbml0aWFsaXplKCk7DQorCXZpcnR1YWwgdm9pZCBFeGVjdXRlKCk7DQorCXZpcnR1YWwgYm9vbCBJc0ZpbmlzaGVkKCk7DQorCXZpcnR1YWwgdm9pZCBFbmQoKTsNCisJdmlydHVhbCB2b2lkIEludGVycnVwdGVkKCk7CQ0KK307DQorDQorI2VuZGlmDQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvQ29tbWFuZHMvV2FpdFVudGlsQ29tbWFuZC5jcHAgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9Db21tYW5kcy9XYWl0VW50aWxDb21tYW5kLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTZiMzI5Ci0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvQ29tbWFuZHMvV2FpdFVudGlsQ29tbWFuZC5jcHAKQEAgLTAsMCArMSw1MSBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBDb3B5cmlnaHQgKGMpIEZJUlNUIDIwMTEuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCQkJCQkJCSAgKi8NCisvKiBPcGVuIFNvdXJjZSBTb2Z0d2FyZSAtIG1heSBiZSBtb2RpZmllZCBhbmQgc2hhcmVkIGJ5IEZSQyB0ZWFtcy4gVGhlIGNvZGUgICAqLw0KKy8qIG11c3QgYmUgYWNjb21wYW5pZWQgYnkgdGhlIEZJUlNUIEJTRCBsaWNlbnNlIGZpbGUgaW4gJChXSU5EX0JBU0UpL1dQSUxpYi4gICovDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisjaW5jbHVkZSAiQ29tbWFuZHMvV2FpdFVudGlsQ29tbWFuZC5oIg0KKyNpbmNsdWRlICJEcml2ZXJTdGF0aW9uLmgiDQorI2luY2x1ZGUgIlRpbWVyLmgiDQorDQorLyoqDQorICogQSB7QGxpbmsgV2FpdENvbW1hbmR9IHdpbGwgd2FpdCB1bnRpbCBhIGNlcnRhaW4gbWF0Y2ggdGltZSBiZWZvcmUgZmluaXNoaW5nLg0KKyAqIFRoaXMgd2lsbCB3YWl0IHVudGlsIHRoZSBnYW1lIGNsb2NrIHJlYWNoZXMgc29tZSB2YWx1ZSwgdGhlbiBjb250aW51ZSB0byB0aGUNCisgKiBuZXh0IGNvbW1hbmQuDQorICogQHNlZSBDb21tYW5kR3JvdXANCisgKi8NCitXYWl0VW50aWxDb21tYW5kOjpXYWl0VW50aWxDb21tYW5kKGRvdWJsZSB0aW1lKSA6DQorCUNvbW1hbmQoIldhaXRVbnRpbENvbW1hbmQiLCB0aW1lKQ0KK3sNCisgICAgbV90aW1lID0gdGltZTsNCit9DQorDQorV2FpdFVudGlsQ29tbWFuZDo6V2FpdFVudGlsQ29tbWFuZChjb25zdCBjaGFyICpuYW1lLCBkb3VibGUgdGltZSkgOg0KKwlDb21tYW5kKG5hbWUsIHRpbWUpDQorew0KKyAgICBtX3RpbWUgPSB0aW1lOw0KK30NCisNCit2b2lkIFdhaXRVbnRpbENvbW1hbmQ6OkluaXRpYWxpemUoKQ0KK3sNCit9DQorDQordm9pZCBXYWl0VW50aWxDb21tYW5kOjpFeGVjdXRlKCkNCit7DQorfQ0KKw0KKy8qKg0KKyAqIENoZWNrIGlmIHdlJ3ZlIHJlYWNoZWQgdGhlIGFjdHVhbCBmaW5pc2ggdGltZS4NCisgKi8NCitib29sIFdhaXRVbnRpbENvbW1hbmQ6OklzRmluaXNoZWQoKQ0KK3sNCisgICAgcmV0dXJuIERyaXZlclN0YXRpb246OkdldEluc3RhbmNlKCktPkdldE1hdGNoVGltZSgpID49IG1fdGltZTsNCit9DQorDQordm9pZCBXYWl0VW50aWxDb21tYW5kOjpFbmQoKQ0KK3sNCit9DQorDQordm9pZCBXYWl0VW50aWxDb21tYW5kOjpJbnRlcnJ1cHRlZCgpDQorew0KK30NCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9Db21tYW5kcy9XYWl0VW50aWxDb21tYW5kLmggYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9Db21tYW5kcy9XYWl0VW50aWxDb21tYW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTYyNDcwNQotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0NvbW1hbmRzL1dhaXRVbnRpbENvbW1hbmQuaApAQCAtMCwwICsxLDMwIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy8qIENvcHlyaWdodCAoYykgRklSU1QgMjAxMS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4JCQkJCQkJICAqLw0KKy8qIE9wZW4gU291cmNlIFNvZnR3YXJlIC0gbWF5IGJlIG1vZGlmaWVkIGFuZCBzaGFyZWQgYnkgRlJDIHRlYW1zLiBUaGUgY29kZSAgICovDQorLyogbXVzdCBiZSBhY2NvbXBhbmllZCBieSB0aGUgRklSU1QgQlNEIGxpY2Vuc2UgZmlsZSBpbiAkKFdJTkRfQkFTRSkvV1BJTGliLiAgKi8NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKyNpZm5kZWYgX19XQUlUX1VOVElMX0NPTU1BTkRfSF9fDQorI2RlZmluZSBfX1dBSVRfVU5USUxfQ09NTUFORF9IX18NCisNCisjaW5jbHVkZSAiQ29tbWFuZHMvQ29tbWFuZC5oIg0KKw0KK2NsYXNzIFdhaXRVbnRpbENvbW1hbmQgOiBwdWJsaWMgQ29tbWFuZA0KK3sNCitwdWJsaWM6DQorCVdhaXRVbnRpbENvbW1hbmQoZG91YmxlIHRpbWUpOw0KKwlXYWl0VW50aWxDb21tYW5kKGNvbnN0IGNoYXIgKm5hbWUsIGRvdWJsZSB0aW1lKTsNCisJdmlydHVhbCB+V2FpdFVudGlsQ29tbWFuZCgpIHt9DQorDQorcHJvdGVjdGVkOg0KKwl2aXJ0dWFsIHZvaWQgSW5pdGlhbGl6ZSgpOw0KKwl2aXJ0dWFsIHZvaWQgRXhlY3V0ZSgpOw0KKwl2aXJ0dWFsIGJvb2wgSXNGaW5pc2hlZCgpOw0KKwl2aXJ0dWFsIHZvaWQgRW5kKCk7DQorCXZpcnR1YWwgdm9pZCBJbnRlcnJ1cHRlZCgpOwkNCisNCitwcml2YXRlOg0KKwlkb3VibGUgbV90aW1lOw0KK307DQorDQorI2VuZGlmDQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvQ29tcHJlc3Nvci5jcHAgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9Db21wcmVzc29yLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzYwYzAyCi0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvQ29tcHJlc3Nvci5jcHAKQEAgLTAsMCArMSwxOTQgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorLyogQ29weXJpZ2h0IChjKSBGSVJTVCAyMDA4LiBBbGwgUmlnaHRzIFJlc2VydmVkLgkJCQkJCQkgICovDQorLyogT3BlbiBTb3VyY2UgU29mdHdhcmUgLSBtYXkgYmUgbW9kaWZpZWQgYW5kIHNoYXJlZCBieSBGUkMgdGVhbXMuIFRoZSBjb2RlICAgKi8NCisvKiBtdXN0IGJlIGFjY29tcGFuaWVkIGJ5IHRoZSBGSVJTVCBCU0QgbGljZW5zZSBmaWxlIGluICQoV0lORF9CQVNFKS9XUElMaWIuICAqLw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorI2luY2x1ZGUgIkNvbXByZXNzb3IuaCINCisjaW5jbHVkZSAiRGlnaXRhbElucHV0LmgiDQorI2luY2x1ZGUgIk5ldHdvcmtDb21tdW5pY2F0aW9uL1VzYWdlUmVwb3J0aW5nLmgiDQorI2luY2x1ZGUgIlRpbWVyLmgiDQorI2luY2x1ZGUgIldQSUVycm9ycy5oIg0KKw0KKy8qKg0KKyAqIEludGVybmFsIHRhc2suDQorICogDQorICogVGFzayB3aGljaCBjaGVja3MgdGhlIGNvbXByZXNzb3IgcHJlc3N1cmUgc3dpdGNoIGFuZCBvcGVyYXRlcyB0aGUgcmVsYXkgYXMgbmVjZXNzYXJ5DQorICogZGVwZW5kaW5nIG9uIHRoZSBwcmVzc3VyZS4NCisgKiANCisgKiBEbyBub3QgY2FsbCB0aGlzIGZ1bmN0aW9uIGRpcmVjdGx5Lg0KKyAqLw0KK3N0YXRpYyB2b2lkIENvbXByZXNzb3JDaGVja2VyKENvbXByZXNzb3IgKmMpDQorew0KKwl3aGlsZSAoMSkNCisJew0KKwkJaWYgKGMtPkVuYWJsZWQoKSkNCisJCXsNCisJCQljLT5TZXRSZWxheVZhbHVlKCBjLT5HZXRQcmVzc3VyZVN3aXRjaFZhbHVlKCkgPT0gMCA/IFJlbGF5OjprT24gOiBSZWxheTo6a09mZiApOw0KKwkJfQ0KKwkJZWxzZQ0KKwkJew0KKwkJCWMtPlNldFJlbGF5VmFsdWUoUmVsYXk6OmtPZmYpOw0KKwkJfQ0KKwkJV2FpdCgwLjUpOw0KKwl9DQorfQ0KKw0KKy8qKg0KKyAqIEluaXRpYWxpemUgdGhlIENvbXByZXNzb3Igb2JqZWN0Lg0KKyAqIFRoaXMgbWV0aG9kIGlzIHRoZSBjb21tb24gaW5pdGlhbGl6YXRpb24gY29kZSBmb3IgYWxsIHRoZSBjb25zdHJ1Y3RvcnMgZm9yIHRoZSBDb21wcmVzc29yDQorICogb2JqZWN0LiBJdCB0YWtlcyB0aGUgcmVsYXkgY2hhbm5lbCBhbmQgcHJlc3N1cmUgc3dpdGNoIGNoYW5uZWwgYW5kIHNwYXducyBhIHRhc2sgdGhhdCBwb2xscyB0aGUNCisgKiBjb21wcmVzc29yIGFuZCBzZW5zb3IuDQorICogDQorICogWW91IE1VU1Qgc3RhcnQgdGhlIGNvbXByZXNzb3IgYnkgY2FsbGluZyB0aGUgU3RhcnQoKSBtZXRob2QuDQorICovDQordm9pZCBDb21wcmVzc29yOjpJbml0Q29tcHJlc3NvcihVSU5UOCBwcmVzc3VyZVN3aXRjaE1vZHVsZU51bWJlciwNCisJCVVJTlQzMiBwcmVzc3VyZVN3aXRjaENoYW5uZWwsDQorCQlVSU5UOCBjb21wcmVzc3NvclJlbGF5TW9kdWxlTnVtYmVyLA0KKwkJVUlOVDMyIGNvbXByZXNzb3JSZWxheUNoYW5uZWwpDQorew0KKwltX2VuYWJsZWQgPSBmYWxzZTsNCisJbV9wcmVzc3VyZVN3aXRjaCA9IG5ldyBEaWdpdGFsSW5wdXQocHJlc3N1cmVTd2l0Y2hNb2R1bGVOdW1iZXIsIHByZXNzdXJlU3dpdGNoQ2hhbm5lbCk7DQorCW1fcmVsYXkgPSBuZXcgUmVsYXkoY29tcHJlc3Nzb3JSZWxheU1vZHVsZU51bWJlciwgY29tcHJlc3NvclJlbGF5Q2hhbm5lbCwgUmVsYXk6OmtGb3J3YXJkT25seSk7DQorDQorCW5Vc2FnZVJlcG9ydGluZzo6cmVwb3J0KG5Vc2FnZVJlcG9ydGluZzo6a1Jlc291cmNlVHlwZV9Db21wcmVzc29yLCAwKTsNCisNCisJaWYgKCFtX3Rhc2suU3RhcnQoKElOVDMyKXRoaXMpKQ0KKwl7DQorCQl3cGlfc2V0V1BJRXJyb3IoQ29tcHJlc3NvclRhc2tFcnJvcik7DQorCX0NCit9DQorDQorLyoqDQorICogQ29tcHJlc3NvciBjb25zdHJ1Y3Rvci4NCisgKiBHaXZlbiBhIGZ1bGx5IHNwZWNpZmllZCByZWxheSBjaGFubmVsIGFuZCBwcmVzc3VyZSBzd2l0Y2ggY2hhbm5lbCwgaW5pdGlhbGl6ZSB0aGUgQ29tcHJlc3NvciBvYmplY3QuDQorICogDQorICogWW91IE1VU1Qgc3RhcnQgdGhlIGNvbXByZXNzb3IgYnkgY2FsbGluZyB0aGUgU3RhcnQoKSBtZXRob2QuDQorICogDQorICogQHBhcmFtIHByZXNzdXJlU3dpdGNoTW9kdWxlTnVtYmVyIFRoZSBkaWdpdGFsIG1vZHVsZSB0aGF0IHRoZSBwcmVzc3VyZSBzd2l0Y2ggaXMgYXR0YWNoZWQgdG8uDQorICogQHBhcmFtIHByZXNzdXJlU3dpdGNoQ2hhbm5lbCBUaGUgR1BJTyBjaGFubmVsIHRoYXQgdGhlIHByZXNzdXJlIHN3aXRjaCBpcyBhdHRhY2hlZCB0by4NCisgKiBAcGFyYW0gY29tcHJlc3Nzb3JSZWxheU1vZHVsZU51bWJlciBUaGUgZGlnaXRhbCBtb2R1bGUgdGhhdCB0aGUgY29tcHJlc3NvciByZWxheSBpcyBhdHRhY2hlZCB0by4NCisgKiBAcGFyYW0gY29tcHJlc3NvclJlbGF5Q2hhbm5lbCBUaGUgcmVsYXkgY2hhbm5lbCB0aGF0IHRoZSBjb21wcmVzc29yIHJlbGF5IGlzIGF0dGFjaGVkIHRvLg0KKyAqLw0KK0NvbXByZXNzb3I6OkNvbXByZXNzb3IoVUlOVDggcHJlc3N1cmVTd2l0Y2hNb2R1bGVOdW1iZXIsDQorCQlVSU5UMzIgcHJlc3N1cmVTd2l0Y2hDaGFubmVsLA0KKwkJVUlOVDggY29tcHJlc3Nzb3JSZWxheU1vZHVsZU51bWJlciwNCisJCVVJTlQzMiBjb21wcmVzc29yUmVsYXlDaGFubmVsKQ0KKwk6IG1fdGFzayAoIkNvbXByZXNzb3IiLCAoRlVOQ1BUUilDb21wcmVzc29yQ2hlY2tlcikNCit7DQorCUluaXRDb21wcmVzc29yKHByZXNzdXJlU3dpdGNoTW9kdWxlTnVtYmVyLA0KKwkJcHJlc3N1cmVTd2l0Y2hDaGFubmVsLA0KKwkJY29tcHJlc3Nzb3JSZWxheU1vZHVsZU51bWJlciwNCisJCWNvbXByZXNzb3JSZWxheUNoYW5uZWwpOw0KK30NCisNCisvKioNCisgKiBDb21wcmVzc29yIGNvbnN0cnVjdG9yLg0KKyAqIEdpdmVuIGEgcmVsYXkgY2hhbm5lbCBhbmQgcHJlc3N1cmUgc3dpdGNoIGNoYW5uZWwgKGJvdGggaW4gdGhlIGRlZmF1bHQgZGlnaXRhbCBtb2R1bGUpLCBpbml0aWFsaXplDQorICogdGhlIENvbXByZXNzb3Igb2JqZWN0Lg0KKyAqIA0KKyAqIFlvdSBNVVNUIHN0YXJ0IHRoZSBjb21wcmVzc29yIGJ5IGNhbGxpbmcgdGhlIFN0YXJ0KCkgbWV0aG9kLg0KKyAqIA0KKyAqIEBwYXJhbSBwcmVzc3VyZVN3aXRjaENoYW5uZWwgVGhlIEdQSU8gY2hhbm5lbCB0aGF0IHRoZSBwcmVzc3VyZSBzd2l0Y2ggaXMgYXR0YWNoZWQgdG8uDQorICogQHBhcmFtIGNvbXByZXNzb3JSZWxheUNoYW5uZWwgVGhlIHJlbGF5IGNoYW5uZWwgdGhhdCB0aGUgY29tcHJlc3NvciByZWxheSBpcyBhdHRhY2hlZCB0by4NCisgKi8NCitDb21wcmVzc29yOjpDb21wcmVzc29yKFVJTlQzMiBwcmVzc3VyZVN3aXRjaENoYW5uZWwsIFVJTlQzMiBjb21wcmVzc29yUmVsYXlDaGFubmVsKQ0KKwk6IG1fdGFzayAoIkNvbXByZXNzb3IiLCAoRlVOQ1BUUilDb21wcmVzc29yQ2hlY2tlcikNCit7DQorCUluaXRDb21wcmVzc29yKEdldERlZmF1bHREaWdpdGFsTW9kdWxlKCksDQorCQkJcHJlc3N1cmVTd2l0Y2hDaGFubmVsLA0KKwkJCUdldERlZmF1bHREaWdpdGFsTW9kdWxlKCksDQorCQkJY29tcHJlc3NvclJlbGF5Q2hhbm5lbCk7DQorfQ0KKw0KKy8qKg0KKyAqIERlbGV0ZSB0aGUgQ29tcHJlc3NvciBvYmplY3QuDQorICogRGVsZXRlIHRoZSBhbGxvY2F0ZWQgcmVzb3VyY2VzIGZvciB0aGUgY29tcHJlc3NvciBhbmQga2lsbCB0aGUgY29tcHJlc3NvciB0YXNrIHRoYXQgaXMgcG9sbGluZw0KKyAqIHRoZSBwcmVzc3VyZSBzd2l0Y2guDQorICovDQorQ29tcHJlc3Nvcjo6fkNvbXByZXNzb3IoKQ0KK3sNCisJZGVsZXRlIG1fcHJlc3N1cmVTd2l0Y2g7DQorCWRlbGV0ZSBtX3JlbGF5Ow0KK30NCisNCisvKioNCisgKiBPcGVyYXRlIHRoZSByZWxheSBmb3IgdGhlIGNvbXByZXNzb3IuDQorICogQ2hhbmdlIHRoZSB2YWx1ZSBvZiB0aGUgcmVsYXkgb3V0cHV0IHRoYXQgaXMgY29ubmVjdGVkIHRvIHRoZSBjb21wcmVzc29yIG1vdG9yLg0KKyAqIFRoaXMgaXMgb25seSBpbnRlbmRlZCB0byBiZSBjYWxsZWQgYnkgdGhlIGludGVybmFsIHBvbGxpbmcgdGhyZWFkLg0KKyAqLw0KK3ZvaWQgQ29tcHJlc3Nvcjo6U2V0UmVsYXlWYWx1ZShSZWxheTo6VmFsdWUgcmVsYXlWYWx1ZSkNCit7DQorCW1fcmVsYXktPlNldChyZWxheVZhbHVlKTsNCit9DQorDQorLyoqDQorICogR2V0IHRoZSBwcmVzc3VyZSBzd2l0Y2ggdmFsdWUuDQorICogUmVhZCB0aGUgcHJlc3N1cmUgc3dpdGNoIGRpZ2l0YWwgaW5wdXQuDQorICogDQorICogQHJldHVybiBUaGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgcHJlc3N1cmUgc3dpdGNoLg0KKyAqLw0KK1VJTlQzMiBDb21wcmVzc29yOjpHZXRQcmVzc3VyZVN3aXRjaFZhbHVlKCkNCit7DQorCXJldHVybiBtX3ByZXNzdXJlU3dpdGNoLT5HZXQoKTsNCit9DQorDQorLyoqDQorICogU3RhcnQgdGhlIGNvbXByZXNzb3IuDQorICogVGhpcyBtZXRob2Qgd2lsbCBhbGxvdyB0aGUgcG9sbGluZyBsb29wIHRvIGFjdHVhbGx5IG9wZXJhdGUgdGhlIGNvbXByZXNzb3IuIFRoZQ0KKyAqIGlzIHN0b3BwZWQgYnkgZGVmYXVsdCBhbmQgd29uJ3Qgb3BlcmF0ZSB1bnRpbCBzdGFydGluZyBpdC4NCisgKi8NCit2b2lkIENvbXByZXNzb3I6OlN0YXJ0KCkNCit7DQorCW1fZW5hYmxlZCA9IHRydWU7DQorfQ0KKw0KKy8qKg0KKyAqIFN0b3AgdGhlIGNvbXByZXNzb3IuDQorICogVGhpcyBtZXRob2Qgd2lsbCBzdG9wIHRoZSBjb21wcmVzc29yIGZyb20gdHVybmluZyBvbi4NCisgKi8NCit2b2lkIENvbXByZXNzb3I6OlN0b3AoKQ0KK3sNCisJbV9lbmFibGVkID0gZmFsc2U7DQorfQ0KKw0KKy8qKg0KKyAqIEdldCB0aGUgc3RhdGUgb2YgdGhlIGVuYWJsZWQgZmxhZy4NCisgKiBSZXR1cm4gdGhlIHN0YXRlIG9mIHRoZSBlbmFibGVkIGZsYWcgZm9yIHRoZSBjb21wcmVzc29yIGFuZCBwcmVzc3VyZSBzd2l0Y2gNCisgKiBjb21iaW5hdGlvbi4NCisgKiANCisgKiBAcmV0dXJuIFRoZSBzdGF0ZSBvZiB0aGUgY29tcHJlc3NvciB0aHJlYWQncyBlbmFibGUgZmxhZy4NCisgKi8NCitib29sIENvbXByZXNzb3I6OkVuYWJsZWQoKQ0KK3sNCisJcmV0dXJuIG1fZW5hYmxlZDsNCit9DQorDQordm9pZCBDb21wcmVzc29yOjpVcGRhdGVUYWJsZSgpIHsNCisJaWYgKG1fdGFibGUgIT0gTlVMTCkgew0KKwkJbV90YWJsZS0+UHV0Qm9vbGVhbigiRW5hYmxlZCIsIG1fZW5hYmxlZCk7DQorCQltX3RhYmxlLT5QdXRCb29sZWFuKCJQcmVzc3VyZSBzd2l0Y2giLCBHZXRQcmVzc3VyZVN3aXRjaFZhbHVlKCkpOw0KKwl9DQorfQ0KKw0KK3ZvaWQgQ29tcHJlc3Nvcjo6U3RhcnRMaXZlV2luZG93TW9kZSgpIHsNCisJDQorfQ0KKw0KK3ZvaWQgQ29tcHJlc3Nvcjo6U3RvcExpdmVXaW5kb3dNb2RlKCkgew0KKwkNCit9DQorDQorc3RkOjpzdHJpbmcgQ29tcHJlc3Nvcjo6R2V0U21hcnREYXNoYm9hcmRUeXBlKCkgew0KKwlyZXR1cm4gIkNvbXByZXNzb3IiOw0KK30NCisNCit2b2lkIENvbXByZXNzb3I6OkluaXRUYWJsZShJVGFibGUgKnN1YlRhYmxlKSB7DQorCW1fdGFibGUgPSBzdWJUYWJsZTsNCisJVXBkYXRlVGFibGUoKTsNCit9DQorDQorSVRhYmxlICogQ29tcHJlc3Nvcjo6R2V0VGFibGUoKSB7DQorCXJldHVybiBtX3RhYmxlOw0KK30NCisNCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9Db21wcmVzc29yLmggYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9Db21wcmVzc29yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWYxYTI2YQotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0NvbXByZXNzb3IuaApAQCAtMCwwICsxLDYwIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy8qIENvcHlyaWdodCAoYykgRklSU1QgMjAwOC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4JCQkJCQkJICAqLw0KKy8qIE9wZW4gU291cmNlIFNvZnR3YXJlIC0gbWF5IGJlIG1vZGlmaWVkIGFuZCBzaGFyZWQgYnkgRlJDIHRlYW1zLiBUaGUgY29kZSAgICovDQorLyogbXVzdCBiZSBhY2NvbXBhbmllZCBieSB0aGUgRklSU1QgQlNEIGxpY2Vuc2UgZmlsZSBpbiAkKFdJTkRfQkFTRSkvV1BJTGliLiAgKi8NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKyNpZm5kZWYgQ09NUFJFU1NPUl9IXw0KKyNkZWZpbmUgQ09NUFJFU1NPUl9IXw0KKw0KKyNkZWZpbmUgQ09NUFJFU1NPUl9QUklPUklUWSA5MA0KKw0KKyNpbmNsdWRlICJTZW5zb3JCYXNlLmgiDQorI2luY2x1ZGUgIlJlbGF5LmgiDQorI2luY2x1ZGUgIlRhc2suaCINCisjaW5jbHVkZSAiTGl2ZVdpbmRvdy9MaXZlV2luZG93U2VuZGFibGUuaCINCisNCitjbGFzcyBEaWdpdGFsSW5wdXQ7DQorDQorLyoqDQorICogQ29tcHJlc3NvciBvYmplY3QuDQorICogVGhlIENvbXByZXNzb3Igb2JqZWN0IGlzIGRlc2lnbmVkIHRvIGhhbmRsZSB0aGUgb3BlcmF0aW9uIG9mIHRoZSBjb21wcmVzc29yLCBwcmVzc3VyZSBzZW5zb3IgYW5kDQorICogcmVsYXkgZm9yIGEgRklSU1Qgcm9ib3QgcG5ldW1hdGljcyBzeXN0ZW0uIFRoZSBDb21wcmVzc29yIG9iamVjdCBzdGFydHMgYSB0YXNrIHdoaWNoIHJ1bnMgaW4gdGhlDQorICogYmFja3JvdW5kIGFuZCBwZXJpb2RpY2FsbHkgcG9sbHMgdGhlIHByZXNzdXJlIHNlbnNvciBhbmQgb3BlcmF0ZXMgdGhlIHJlbGF5IHRoYXQgY29udHJvbHMgdGhlDQorICogY29tcHJlc3Nvci4NCisgKi8gDQorY2xhc3MgQ29tcHJlc3NvcjogcHVibGljIFNlbnNvckJhc2UsIHB1YmxpYyBMaXZlV2luZG93U2VuZGFibGUNCit7DQorcHVibGljOg0KKwlDb21wcmVzc29yKFVJTlQzMiBwcmVzc3VyZVN3aXRjaENoYW5uZWwsIFVJTlQzMiBjb21wcmVzc29yUmVsYXlDaGFubmVsKTsNCisJQ29tcHJlc3NvcihVSU5UOCBwcmVzc3VyZVN3aXRjaE1vZHVsZU51bWJlciwgVUlOVDMyIHByZXNzdXJlU3dpdGNoQ2hhbm5lbCwNCisJCQlVSU5UOCBjb21wcmVzc3NvclJlbGF5TW9kdWxlTnVtYmVyLCBVSU5UMzIgY29tcHJlc3NvclJlbGF5Q2hhbm5lbCk7DQorCX5Db21wcmVzc29yKCk7DQorDQorCXZvaWQgU3RhcnQoKTsNCisJdm9pZCBTdG9wKCk7DQorCWJvb2wgRW5hYmxlZCgpOw0KKwlVSU5UMzIgR2V0UHJlc3N1cmVTd2l0Y2hWYWx1ZSgpOw0KKwl2b2lkIFNldFJlbGF5VmFsdWUoUmVsYXk6OlZhbHVlIHJlbGF5VmFsdWUpOw0KKwkNCisJdm9pZCBVcGRhdGVUYWJsZSgpOw0KKwl2b2lkIFN0YXJ0TGl2ZVdpbmRvd01vZGUoKTsNCisJdm9pZCBTdG9wTGl2ZVdpbmRvd01vZGUoKTsNCisJc3RkOjpzdHJpbmcgR2V0U21hcnREYXNoYm9hcmRUeXBlKCk7DQorCXZvaWQgSW5pdFRhYmxlKElUYWJsZSAqc3ViVGFibGUpOw0KKwlJVGFibGUgKiBHZXRUYWJsZSgpOw0KKw0KK3ByaXZhdGU6DQorCXZvaWQgSW5pdENvbXByZXNzb3IoVUlOVDggcHJlc3N1cmVTd2l0Y2hNb2R1bGVOdW1iZXIsIFVJTlQzMiBwcmVzc3VyZVN3aXRjaENoYW5uZWwsDQorCQkJCVVJTlQ4IGNvbXByZXNzc29yUmVsYXlNb2R1bGVOdW1iZXIsIFVJTlQzMiBjb21wcmVzc29yUmVsYXlDaGFubmVsKTsNCisNCisJRGlnaXRhbElucHV0ICptX3ByZXNzdXJlU3dpdGNoOw0KKwlSZWxheSAqbV9yZWxheTsNCisJYm9vbCBtX2VuYWJsZWQ7DQorCVRhc2sgbV90YXNrOw0KKwkNCisJSVRhYmxlICptX3RhYmxlOw0KK307DQorDQorI2VuZGlmDQorDQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvQ29udHJvbGxlci5oIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvQ29udHJvbGxlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5M2M1MmEKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9Db250cm9sbGVyLmgKQEAgLTAsMCArMSwzNSBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBDb3B5cmlnaHQgKGMpIEZJUlNUIDIwMDguIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCQkJCQkJCSAgKi8NCisvKiBPcGVuIFNvdXJjZSBTb2Z0d2FyZSAtIG1heSBiZSBtb2RpZmllZCBhbmQgc2hhcmVkIGJ5IEZSQyB0ZWFtcy4gVGhlIGNvZGUgICAqLw0KKy8qIG11c3QgYmUgYWNjb21wYW5pZWQgYnkgdGhlIEZJUlNUIEJTRCBsaWNlbnNlIGZpbGUgaW4gJChXSU5EX0JBU0UpL1dQSUxpYi4gICovDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisjaWZuZGVmIENPTlRST0xMRVJfSA0KKyNkZWZpbmUgQ09OVFJPTExFUl9IDQorDQorI2luY2x1ZGUgPHZ4V29ya3MuaD4NCisNCisvKioNCisgKiBJbnRlcmZhY2UgZm9yIENvbnRyb2xsZXJzDQorICogQ29tbW9uIGludGVyZmFjZSBmb3IgY29udHJvbGxlcnMuIENvbnRyb2xsZXJzIHJ1biBjb250cm9sIGxvb3BzLCB0aGUgbW9zdCBjb21tb24NCisgKiBhcmUgUElEIGNvbnRyb2xsZXJzIGFuZCB0aGVpciB2YXJpYW50cywgYnV0IHRoaXMgaW5jbHVkZXMgYW55dGhpbmcgdGhhdCBpcyBjb250cm9sbGluZw0KKyAqIGFuIGFjdHVhdG9yIGluIGEgc2VwYXJhdGUgdGhyZWFkLg0KKyAqLw0KK2NsYXNzIENvbnRyb2xsZXINCit7DQorcHVibGljOg0KKwl2aXJ0dWFsIH5Db250cm9sbGVyKCkge307DQorCQ0KKwkvKioNCisJICogQWxsb3dzIHRoZSBjb250cm9sIGxvb3AgdG8gcnVuDQorCSAqLw0KKwl2aXJ0dWFsIHZvaWQgRW5hYmxlKCkgPSAwOw0KKwkNCisJLyoqIA0KKwkgKiBTdG9wcyB0aGUgY29udHJvbCBsb29wIGZyb20gcnVubmluZyB1bnRpbCBleHBsaWNpdGx5IHJlLWVuYWJsZWQgYnkgY2FsbGluZyBlbmFibGUoKQ0KKwkgKi8NCisJdmlydHVhbCB2b2lkIERpc2FibGUoKSA9IDA7DQorfTsNCisNCisjZW5kaWYNCisNCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9Db3VudGVyLmNwcCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0NvdW50ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4YjNhZGUKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9Db3VudGVyLmNwcApAQCAtMCwwICsxLDY5NiBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBDb3B5cmlnaHQgKGMpIEZJUlNUIDIwMDguIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCQkJCQkJCSAgKi8NCisvKiBPcGVuIFNvdXJjZSBTb2Z0d2FyZSAtIG1heSBiZSBtb2RpZmllZCBhbmQgc2hhcmVkIGJ5IEZSQyB0ZWFtcy4gVGhlIGNvZGUgICAqLw0KKy8qIG11c3QgYmUgYWNjb21wYW5pZWQgYnkgdGhlIEZJUlNUIEJTRCBsaWNlbnNlIGZpbGUgaW4gJChXSU5EX0JBU0UpL1dQSUxpYi4gICovDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisjaW5jbHVkZSAiQ291bnRlci5oIg0KKyNpbmNsdWRlICJBbmFsb2dUcmlnZ2VyLmgiDQorI2luY2x1ZGUgIkRpZ2l0YWxJbnB1dC5oIg0KKyNpbmNsdWRlICJOZXR3b3JrQ29tbXVuaWNhdGlvbi9Vc2FnZVJlcG9ydGluZy5oIg0KKyNpbmNsdWRlICJSZXNvdXJjZS5oIg0KKyNpbmNsdWRlICJXUElFcnJvcnMuaCINCisNCitzdGF0aWMgUmVzb3VyY2UgKmNvdW50ZXJzID0gTlVMTDsNCisNCisvKioNCisgKiBDcmVhdGUgYW4gaW5zdGFuY2Ugb2YgYSBjb3VudGVyIG9iamVjdC4NCisgKiBUaGlzIGNyZWF0ZXMgYSBDaGlwT2JqZWN0IGNvdW50ZXIgYW5kIGluaXRpYWxpemVzIHN0YXR1cyB2YXJpYWJsZXMgYXBwcm9wcmlhdGVseQ0KKyAqLw0KK3ZvaWQgQ291bnRlcjo6SW5pdENvdW50ZXIoTW9kZSBtb2RlKQ0KK3sNCisJUmVzb3VyY2U6OkNyZWF0ZVJlc291cmNlT2JqZWN0KCZjb3VudGVycywgdENvdW50ZXI6OmtOdW1TeXN0ZW1zKTsNCisJVUlOVDMyIGluZGV4ID0gY291bnRlcnMtPkFsbG9jYXRlKCJDb3VudGVyIik7DQorCWlmIChpbmRleCA9PSB+MHVsKQ0KKwl7DQorCQlDbG9uZUVycm9yKGNvdW50ZXJzKTsNCisJCXJldHVybjsNCisJfQ0KKwltX2luZGV4ID0gaW5kZXg7DQorCXRSaW9TdGF0dXNDb2RlIGxvY2FsU3RhdHVzID0gTmlGcGdhX1N0YXR1c19TdWNjZXNzOw0KKwltX2NvdW50ZXIgPSB0Q291bnRlcjo6Y3JlYXRlKG1faW5kZXgsICZsb2NhbFN0YXR1cyk7DQorCW1fY291bnRlci0+d3JpdGVDb25maWdfTW9kZShtb2RlLCAmbG9jYWxTdGF0dXMpOw0KKwltX3VwU291cmNlID0gTlVMTDsNCisJbV9kb3duU291cmNlID0gTlVMTDsNCisJbV9hbGxvY2F0ZWRVcFNvdXJjZSA9IGZhbHNlOw0KKwltX2FsbG9jYXRlZERvd25Tb3VyY2UgPSBmYWxzZTsNCisJbV9jb3VudGVyLT53cml0ZVRpbWVyQ29uZmlnX0F2ZXJhZ2VTaXplKDEsICZsb2NhbFN0YXR1cyk7DQorCXdwaV9zZXRFcnJvcihsb2NhbFN0YXR1cyk7DQorDQorCW5Vc2FnZVJlcG9ydGluZzo6cmVwb3J0KG5Vc2FnZVJlcG9ydGluZzo6a1Jlc291cmNlVHlwZV9Db3VudGVyLCBpbmRleCwgbW9kZSk7DQorfQ0KKw0KKy8qKg0KKyAqIENyZWF0ZSBhbiBpbnN0YW5jZSBvZiBhIGNvdW50ZXIgd2hlcmUgbm8gc291cmNlcyBhcmUgc2VsZWN0ZWQuDQorICogVGhlbiB0aGV5IGFsbCBtdXN0IGJlIHNlbGVjdGVkIGJ5IGNhbGxpbmcgZnVuY3Rpb25zIHRvIHNwZWNpZnkgdGhlIHVwc291cmNlIGFuZCB0aGUgZG93bnNvdXJjZQ0KKyAqIGluZGVwZW5kZW50bHkuDQorICovDQorQ291bnRlcjo6Q291bnRlcigpIDoNCisJbV91cFNvdXJjZShOVUxMKSwNCisJbV9kb3duU291cmNlKE5VTEwpLA0KKwltX2NvdW50ZXIoTlVMTCkNCit7DQorCUluaXRDb3VudGVyKCk7DQorfQ0KKw0KKy8qKg0KKyAqIENyZWF0ZSBhbiBpbnN0YW5jZSBvZiBhIGNvdW50ZXIgZnJvbSBhIERpZ2l0YWwgSW5wdXQuDQorICogVGhpcyBpcyB1c2VkIGlmIGFuIGV4aXN0aW5nIGRpZ2l0YWwgaW5wdXQgaXMgdG8gYmUgc2hhcmVkIGJ5IG11bHRpcGxlIG90aGVyIG9iamVjdHMgc3VjaA0KKyAqIGFzIGVuY29kZXJzLg0KKyAqLw0KK0NvdW50ZXI6OkNvdW50ZXIoRGlnaXRhbFNvdXJjZSAqc291cmNlKSA6DQorCW1fdXBTb3VyY2UoTlVMTCksDQorCW1fZG93blNvdXJjZShOVUxMKSwNCisJbV9jb3VudGVyKE5VTEwpDQorew0KKwlJbml0Q291bnRlcigpOw0KKwlTZXRVcFNvdXJjZShzb3VyY2UpOw0KKwlDbGVhckRvd25Tb3VyY2UoKTsNCit9DQorDQorQ291bnRlcjo6Q291bnRlcihEaWdpdGFsU291cmNlICZzb3VyY2UpIDoNCisJbV91cFNvdXJjZShOVUxMKSwNCisJbV9kb3duU291cmNlKE5VTEwpLA0KKwltX2NvdW50ZXIoTlVMTCkNCit7DQorCUluaXRDb3VudGVyKCk7DQorCVNldFVwU291cmNlKCZzb3VyY2UpOw0KKwlDbGVhckRvd25Tb3VyY2UoKTsNCit9DQorDQorLyoqDQorICogQ3JlYXRlIGFuIGluc3RhbmNlIG9mIGEgQ291bnRlciBvYmplY3QuDQorICogQ3JlYXRlIGFuIHVwLUNvdW50ZXIgaW5zdGFuY2UgZ2l2ZW4gYSBjaGFubmVsLiBUaGUgZGVmYXVsdCBkaWdpdGFsIG1vZHVsZSBpcyBhc3N1bWVkLg0KKyAqLw0KK0NvdW50ZXI6OkNvdW50ZXIoVUlOVDMyIGNoYW5uZWwpIDoNCisJbV91cFNvdXJjZShOVUxMKSwNCisJbV9kb3duU291cmNlKE5VTEwpLA0KKwltX2NvdW50ZXIoTlVMTCkNCit7DQorCUluaXRDb3VudGVyKCk7DQorCVNldFVwU291cmNlKGNoYW5uZWwpOw0KKwlDbGVhckRvd25Tb3VyY2UoKTsNCit9DQorDQorLyoqDQorICogQ3JlYXRlIGFuIGluc3RhbmNlIG9mIGEgQ291bnRlciBvYmplY3QuDQorICogQ3JlYXRlIGFuIGluc3RhbmNlIG9mIGFuIHVwLUNvdW50ZXIgZ2l2ZW4gYSBkaWdpdGFsIG1vZHVsZSBhbmQgYSBjaGFubmVsLg0KKyAqIEBwYXJhbSBtb2R1bGVOdW1iZXIgVGhlIGRpZ2l0YWwgbW9kdWxlICgxIG9yIDIpLg0KKyAqIEBwYXJhbSBjaGFubmVsIFRoZSBjaGFubmVsIGluIHRoZSBkaWdpdGFsIG1vZHVsZQ0KKyAqLw0KK0NvdW50ZXI6OkNvdW50ZXIoVUlOVDggbW9kdWxlTnVtYmVyLCBVSU5UMzIgY2hhbm5lbCkgOg0KKwltX3VwU291cmNlKE5VTEwpLA0KKwltX2Rvd25Tb3VyY2UoTlVMTCksDQorCW1fY291bnRlcihOVUxMKQ0KK3sNCisJSW5pdENvdW50ZXIoKTsNCisJU2V0VXBTb3VyY2UobW9kdWxlTnVtYmVyLCBjaGFubmVsKTsNCisJQ2xlYXJEb3duU291cmNlKCk7DQorfQ0KKw0KKy8qKg0KKyAqIENyZWF0ZSBhbiBpbnN0YW5jZSBvZiBhIENvdW50ZXIgb2JqZWN0Lg0KKyAqIENyZWF0ZSBhbiBpbnN0YW5jZSBvZiBhIHNpbXBsZSB1cC1Db3VudGVyIGdpdmVuIGFuIGFuYWxvZyB0cmlnZ2VyLg0KKyAqIFVzZSB0aGUgdHJpZ2dlciBzdGF0ZSBvdXRwdXQgZnJvbSB0aGUgYW5hbG9nIHRyaWdnZXIuDQorICovDQorQ291bnRlcjo6Q291bnRlcihBbmFsb2dUcmlnZ2VyICp0cmlnZ2VyKSA6DQorCW1fdXBTb3VyY2UoTlVMTCksDQorCW1fZG93blNvdXJjZShOVUxMKSwNCisJbV9jb3VudGVyKE5VTEwpDQorew0KKwlJbml0Q291bnRlcigpOw0KKwlTZXRVcFNvdXJjZSh0cmlnZ2VyLT5DcmVhdGVPdXRwdXQoQW5hbG9nVHJpZ2dlck91dHB1dDo6a1N0YXRlKSk7DQorCUNsZWFyRG93blNvdXJjZSgpOw0KKwltX2FsbG9jYXRlZFVwU291cmNlID0gdHJ1ZTsNCit9DQorDQorQ291bnRlcjo6Q291bnRlcihBbmFsb2dUcmlnZ2VyICZ0cmlnZ2VyKSA6DQorCW1fdXBTb3VyY2UoTlVMTCksDQorCW1fZG93blNvdXJjZShOVUxMKSwNCisJbV9jb3VudGVyKE5VTEwpDQorew0KKwlJbml0Q291bnRlcigpOw0KKwlTZXRVcFNvdXJjZSh0cmlnZ2VyLkNyZWF0ZU91dHB1dChBbmFsb2dUcmlnZ2VyT3V0cHV0OjprU3RhdGUpKTsNCisJQ2xlYXJEb3duU291cmNlKCk7DQorCW1fYWxsb2NhdGVkVXBTb3VyY2UgPSB0cnVlOw0KK30NCisNCitDb3VudGVyOjpDb3VudGVyKEVuY29kaW5nVHlwZSBlbmNvZGluZ1R5cGUsIERpZ2l0YWxTb3VyY2UgKnVwU291cmNlLCBEaWdpdGFsU291cmNlICpkb3duU291cmNlLCBib29sIGludmVydGVkKSA6DQorCW1fdXBTb3VyY2UoTlVMTCksDQorCW1fZG93blNvdXJjZShOVUxMKSwNCisJbV9jb3VudGVyKE5VTEwpDQorew0KKwlpZiAoZW5jb2RpbmdUeXBlICE9IGsxWCAmJiBlbmNvZGluZ1R5cGUgIT0gazJYKQ0KKwl7DQorCQl3cGlfc2V0V1BJRXJyb3JXaXRoQ29udGV4dChQYXJhbWV0ZXJPdXRPZlJhbmdlLCAiQ291bnRlciBvbmx5IHN1cHBvcnRzIDFYIGFuZCAyWCBxdWFkcmF0dXJlIGRlY29kaW5nLiIpOw0KKwkJcmV0dXJuOw0KKwl9DQorCUluaXRDb3VudGVyKGtFeHRlcm5hbERpcmVjdGlvbik7DQorCVNldFVwU291cmNlKHVwU291cmNlKTsNCisJU2V0RG93blNvdXJjZShkb3duU291cmNlKTsNCisJdFJpb1N0YXR1c0NvZGUgbG9jYWxTdGF0dXMgPSBOaUZwZ2FfU3RhdHVzX1N1Y2Nlc3M7DQorDQorCWlmIChlbmNvZGluZ1R5cGUgPT0gazFYKQ0KKwl7DQorCQlTZXRVcFNvdXJjZUVkZ2UodHJ1ZSwgZmFsc2UpOw0KKwkJbV9jb3VudGVyLT53cml0ZVRpbWVyQ29uZmlnX0F2ZXJhZ2VTaXplKDEsICZsb2NhbFN0YXR1cyk7DQorCX0NCisJZWxzZQ0KKwl7DQorCQlTZXRVcFNvdXJjZUVkZ2UodHJ1ZSwgdHJ1ZSk7DQorCQltX2NvdW50ZXItPndyaXRlVGltZXJDb25maWdfQXZlcmFnZVNpemUoMiwgJmxvY2FsU3RhdHVzKTsNCisJfQ0KKw0KKwl3cGlfc2V0RXJyb3IobG9jYWxTdGF0dXMpOw0KKwlTZXREb3duU291cmNlRWRnZShpbnZlcnRlZCwgdHJ1ZSk7DQorfQ0KKw0KKy8qKg0KKyAqIERlbGV0ZSB0aGUgQ291bnRlciBvYmplY3QuDQorICovDQorQ291bnRlcjo6fkNvdW50ZXIoKQ0KK3sNCisJU2V0VXBkYXRlV2hlbkVtcHR5KHRydWUpOw0KKwlpZiAobV9hbGxvY2F0ZWRVcFNvdXJjZSkNCisJew0KKwkJZGVsZXRlIG1fdXBTb3VyY2U7DQorCQltX3VwU291cmNlID0gTlVMTDsNCisJfQ0KKwlpZiAobV9hbGxvY2F0ZWREb3duU291cmNlKQ0KKwl7DQorCQlkZWxldGUgbV9kb3duU291cmNlOw0KKwkJbV9kb3duU291cmNlID0gTlVMTDsNCisJfQ0KKwlkZWxldGUgbV9jb3VudGVyOw0KKwltX2NvdW50ZXIgPSBOVUxMOw0KKwljb3VudGVycy0+RnJlZShtX2luZGV4KTsNCit9DQorDQorLyoqDQorICogU2V0IHRoZSB1cCBzb3VyY2UgZm9yIHRoZSBjb3VudGVyIGFzIGRpZ2l0YWwgaW5wdXQgY2hhbm5lbCBhbmQgc2xvdC4NCisgKg0KKyAqIEBwYXJhbSBtb2R1bGVOdW1iZXIgVGhlIGRpZ2l0YWwgbW9kdWxlICgxIG9yIDIpLg0KKyAqIEBwYXJhbSBjaGFubmVsIFRoZSBkaWdpdGFsIGNoYW5uZWwgKDEuLjE0KS4NCisgKi8NCit2b2lkIENvdW50ZXI6OlNldFVwU291cmNlKFVJTlQ4IG1vZHVsZU51bWJlciwgVUlOVDMyIGNoYW5uZWwpDQorew0KKwlpZiAoU3RhdHVzSXNGYXRhbCgpKSByZXR1cm47DQorCVNldFVwU291cmNlKG5ldyBEaWdpdGFsSW5wdXQobW9kdWxlTnVtYmVyLCBjaGFubmVsKSk7DQorCW1fYWxsb2NhdGVkVXBTb3VyY2UgPSB0cnVlOw0KK30NCisNCisvKioNCisgKiBTZXQgdGhlIHVwc291cmNlIGZvciB0aGUgY291bnRlciBhcyBhIGRpZ2l0YWwgaW5wdXQgY2hhbm5lbC4NCisgKiBUaGUgc2xvdCB3aWxsIGJlIHRoZSBkZWZhdWx0IGRpZ2l0YWwgbW9kdWxlIHNsb3QuDQorICovDQordm9pZCBDb3VudGVyOjpTZXRVcFNvdXJjZShVSU5UMzIgY2hhbm5lbCkNCit7DQorCWlmIChTdGF0dXNJc0ZhdGFsKCkpIHJldHVybjsNCisJU2V0VXBTb3VyY2UoR2V0RGVmYXVsdERpZ2l0YWxNb2R1bGUoKSwgY2hhbm5lbCk7DQorCW1fYWxsb2NhdGVkVXBTb3VyY2UgPSB0cnVlOw0KK30NCisNCisvKioNCisgKiBTZXQgdGhlIHVwIGNvdW50aW5nIHNvdXJjZSB0byBiZSBhbiBhbmFsb2cgdHJpZ2dlci4NCisgKiBAcGFyYW0gYW5hbG9nVHJpZ2dlciBUaGUgYW5hbG9nIHRyaWdnZXIgb2JqZWN0IHRoYXQgaXMgdXNlZCBmb3IgdGhlIFVwIFNvdXJjZQ0KKyAqIEBwYXJhbSB0cmlnZ2VyVHlwZSBUaGUgYW5hbG9nIHRyaWdnZXIgb3V0cHV0IHRoYXQgd2lsbCB0cmlnZ2VyIHRoZSBjb3VudGVyLg0KKyAqLw0KK3ZvaWQgQ291bnRlcjo6U2V0VXBTb3VyY2UoQW5hbG9nVHJpZ2dlciAqYW5hbG9nVHJpZ2dlciwgQW5hbG9nVHJpZ2dlck91dHB1dDo6VHlwZSB0cmlnZ2VyVHlwZSkNCit7DQorCWlmIChTdGF0dXNJc0ZhdGFsKCkpIHJldHVybjsNCisJU2V0VXBTb3VyY2UoYW5hbG9nVHJpZ2dlci0+Q3JlYXRlT3V0cHV0KHRyaWdnZXJUeXBlKSk7DQorCW1fYWxsb2NhdGVkVXBTb3VyY2UgPSB0cnVlOw0KK30NCisNCisvKioNCisgKiBTZXQgdGhlIHVwIGNvdW50aW5nIHNvdXJjZSB0byBiZSBhbiBhbmFsb2cgdHJpZ2dlci4NCisgKiBAcGFyYW0gYW5hbG9nVHJpZ2dlciBUaGUgYW5hbG9nIHRyaWdnZXIgb2JqZWN0IHRoYXQgaXMgdXNlZCBmb3IgdGhlIFVwIFNvdXJjZQ0KKyAqIEBwYXJhbSB0cmlnZ2VyVHlwZSBUaGUgYW5hbG9nIHRyaWdnZXIgb3V0cHV0IHRoYXQgd2lsbCB0cmlnZ2VyIHRoZSBjb3VudGVyLg0KKyAqLw0KK3ZvaWQgQ291bnRlcjo6U2V0VXBTb3VyY2UoQW5hbG9nVHJpZ2dlciAmYW5hbG9nVHJpZ2dlciwgQW5hbG9nVHJpZ2dlck91dHB1dDo6VHlwZSB0cmlnZ2VyVHlwZSkNCit7DQorCVNldFVwU291cmNlKCZhbmFsb2dUcmlnZ2VyLCB0cmlnZ2VyVHlwZSk7DQorfQ0KKw0KKy8qKg0KKyAqIFNldCB0aGUgc291cmNlIG9iamVjdCB0aGF0IGNhdXNlcyB0aGUgY291bnRlciB0byBjb3VudCB1cC4NCisgKiBTZXQgdGhlIHVwIGNvdW50aW5nIERpZ2l0YWxTb3VyY2UuDQorICovDQordm9pZCBDb3VudGVyOjpTZXRVcFNvdXJjZShEaWdpdGFsU291cmNlICpzb3VyY2UpDQorew0KKwlpZiAoU3RhdHVzSXNGYXRhbCgpKSByZXR1cm47DQorCWlmIChtX2FsbG9jYXRlZFVwU291cmNlKQ0KKwl7DQorCQlkZWxldGUgbV91cFNvdXJjZTsNCisJCW1fdXBTb3VyY2UgPSBOVUxMOw0KKwkJbV9hbGxvY2F0ZWRVcFNvdXJjZSA9IGZhbHNlOw0KKwl9DQorCW1fdXBTb3VyY2UgPSBzb3VyY2U7DQorCWlmIChtX3VwU291cmNlLT5TdGF0dXNJc0ZhdGFsKCkpDQorCXsNCisJCUNsb25lRXJyb3IobV91cFNvdXJjZSk7DQorCX0NCisJZWxzZQ0KKwl7DQorCQl0UmlvU3RhdHVzQ29kZSBsb2NhbFN0YXR1cyA9IE5pRnBnYV9TdGF0dXNfU3VjY2VzczsNCisJCW1fY291bnRlci0+d3JpdGVDb25maWdfVXBTb3VyY2VfTW9kdWxlKHNvdXJjZS0+R2V0TW9kdWxlRm9yUm91dGluZygpLCAmbG9jYWxTdGF0dXMpOw0KKwkJbV9jb3VudGVyLT53cml0ZUNvbmZpZ19VcFNvdXJjZV9DaGFubmVsKHNvdXJjZS0+R2V0Q2hhbm5lbEZvclJvdXRpbmcoKSwgJmxvY2FsU3RhdHVzKTsNCisJCW1fY291bnRlci0+d3JpdGVDb25maWdfVXBTb3VyY2VfQW5hbG9nVHJpZ2dlcihzb3VyY2UtPkdldEFuYWxvZ1RyaWdnZXJGb3JSb3V0aW5nKCksICZsb2NhbFN0YXR1cyk7DQorCQ0KKwkJaWYobV9jb3VudGVyLT5yZWFkQ29uZmlnX01vZGUoJmxvY2FsU3RhdHVzKSA9PSBrVHdvUHVsc2UgfHwNCisJCQkJbV9jb3VudGVyLT5yZWFkQ29uZmlnX01vZGUoJmxvY2FsU3RhdHVzKSA9PSBrRXh0ZXJuYWxEaXJlY3Rpb24pDQorCQl7DQorCQkJU2V0VXBTb3VyY2VFZGdlKHRydWUsIGZhbHNlKTsNCisJCX0NCisJCW1fY291bnRlci0+c3Ryb2JlUmVzZXQoJmxvY2FsU3RhdHVzKTsNCisJCXdwaV9zZXRFcnJvcihsb2NhbFN0YXR1cyk7DQorCX0NCit9DQorDQorLyoqDQorICogU2V0IHRoZSBzb3VyY2Ugb2JqZWN0IHRoYXQgY2F1c2VzIHRoZSBjb3VudGVyIHRvIGNvdW50IHVwLg0KKyAqIFNldCB0aGUgdXAgY291bnRpbmcgRGlnaXRhbFNvdXJjZS4NCisgKi8NCit2b2lkIENvdW50ZXI6OlNldFVwU291cmNlKERpZ2l0YWxTb3VyY2UgJnNvdXJjZSkNCit7DQorCVNldFVwU291cmNlKCZzb3VyY2UpOw0KK30NCisNCisvKioNCisgKiBTZXQgdGhlIGVkZ2Ugc2Vuc2l0aXZpdHkgb24gYW4gdXAgY291bnRpbmcgc291cmNlLg0KKyAqIFNldCB0aGUgdXAgc291cmNlIHRvIGVpdGhlciBkZXRlY3QgcmlzaW5nIGVkZ2VzIG9yIGZhbGxpbmcgZWRnZXMuDQorICovDQordm9pZCBDb3VudGVyOjpTZXRVcFNvdXJjZUVkZ2UoYm9vbCByaXNpbmdFZGdlLCBib29sIGZhbGxpbmdFZGdlKQ0KK3sNCisJaWYgKFN0YXR1c0lzRmF0YWwoKSkgcmV0dXJuOw0KKwlpZiAobV91cFNvdXJjZSA9PSBOVUxMKQ0KKwl7DQorCQl3cGlfc2V0V1BJRXJyb3JXaXRoQ29udGV4dChOdWxsUGFyYW1ldGVyLCAiTXVzdCBzZXQgbm9uLU5VTEwgVXBTb3VyY2UgYmVmb3JlIHNldHRpbmcgVXBTb3VyY2VFZGdlIik7DQorCX0NCisJdFJpb1N0YXR1c0NvZGUgbG9jYWxTdGF0dXMgPSBOaUZwZ2FfU3RhdHVzX1N1Y2Nlc3M7DQorCW1fY291bnRlci0+d3JpdGVDb25maWdfVXBSaXNpbmdFZGdlKHJpc2luZ0VkZ2UsICZsb2NhbFN0YXR1cyk7DQorCW1fY291bnRlci0+d3JpdGVDb25maWdfVXBGYWxsaW5nRWRnZShmYWxsaW5nRWRnZSwgJmxvY2FsU3RhdHVzKTsNCisJd3BpX3NldEVycm9yKGxvY2FsU3RhdHVzKTsNCit9DQorDQorLyoqDQorICogRGlzYWJsZSB0aGUgdXAgY291bnRpbmcgc291cmNlIHRvIHRoZSBjb3VudGVyLg0KKyAqLw0KK3ZvaWQgQ291bnRlcjo6Q2xlYXJVcFNvdXJjZSgpDQorew0KKwlpZiAoU3RhdHVzSXNGYXRhbCgpKSByZXR1cm47DQorCWlmIChtX2FsbG9jYXRlZFVwU291cmNlKQ0KKwl7DQorCQlkZWxldGUgbV91cFNvdXJjZTsNCisJCW1fdXBTb3VyY2UgPSBOVUxMOw0KKwkJbV9hbGxvY2F0ZWRVcFNvdXJjZSA9IGZhbHNlOw0KKwl9DQorCXRSaW9TdGF0dXNDb2RlIGxvY2FsU3RhdHVzID0gTmlGcGdhX1N0YXR1c19TdWNjZXNzOw0KKwlib29sIHN0YXRlID0gbV9jb3VudGVyLT5yZWFkQ29uZmlnX0VuYWJsZSgmbG9jYWxTdGF0dXMpOw0KKwltX2NvdW50ZXItPndyaXRlQ29uZmlnX0VuYWJsZShmYWxzZSwgJmxvY2FsU3RhdHVzKTsNCisJbV9jb3VudGVyLT53cml0ZUNvbmZpZ19VcEZhbGxpbmdFZGdlKGZhbHNlLCAmbG9jYWxTdGF0dXMpOw0KKwltX2NvdW50ZXItPndyaXRlQ29uZmlnX1VwUmlzaW5nRWRnZShmYWxzZSwgJmxvY2FsU3RhdHVzKTsNCisJLy8gSW5kZXggMCBvZiBkaWdpdGFsIGlzIGFsd2F5cyAwLg0KKwltX2NvdW50ZXItPndyaXRlQ29uZmlnX1VwU291cmNlX0NoYW5uZWwoMCwgJmxvY2FsU3RhdHVzKTsNCisJbV9jb3VudGVyLT53cml0ZUNvbmZpZ19VcFNvdXJjZV9BbmFsb2dUcmlnZ2VyKGZhbHNlLCAmbG9jYWxTdGF0dXMpOw0KKwltX2NvdW50ZXItPndyaXRlQ29uZmlnX0VuYWJsZShzdGF0ZSwgJmxvY2FsU3RhdHVzKTsNCisJd3BpX3NldEVycm9yKGxvY2FsU3RhdHVzKTsNCit9DQorDQorLyoqDQorICogU2V0IHRoZSBkb3duIGNvdW50aW5nIHNvdXJjZSB0byBiZSBhIGRpZ2l0YWwgaW5wdXQgY2hhbm5lbC4NCisgKiBUaGUgc2xvdCB3aWxsIGJlIHNldCB0byB0aGUgZGVmYXVsdCBkaWdpdGFsIG1vZHVsZSBzbG90Lg0KKyAqLw0KK3ZvaWQgQ291bnRlcjo6U2V0RG93blNvdXJjZShVSU5UMzIgY2hhbm5lbCkNCit7DQorCWlmIChTdGF0dXNJc0ZhdGFsKCkpIHJldHVybjsNCisJU2V0RG93blNvdXJjZShuZXcgRGlnaXRhbElucHV0KGNoYW5uZWwpKTsNCisJbV9hbGxvY2F0ZWREb3duU291cmNlID0gdHJ1ZTsNCit9DQorDQorLyoqDQorICogU2V0IHRoZSBkb3duIGNvdW50aW5nIHNvdXJjZSB0byBiZSBhIGRpZ2l0YWwgaW5wdXQgc2xvdCBhbmQgY2hhbm5lbC4NCisgKg0KKyAqIEBwYXJhbSBtb2R1bGVOdW1iZXIgVGhlIGRpZ2l0YWwgbW9kdWxlICgxIG9yIDIpLg0KKyAqIEBwYXJhbSBjaGFubmVsIFRoZSBkaWdpdGFsIGNoYW5uZWwgKDEuLjE0KS4NCisgKi8NCit2b2lkIENvdW50ZXI6OlNldERvd25Tb3VyY2UoVUlOVDggbW9kdWxlTnVtYmVyLCBVSU5UMzIgY2hhbm5lbCkNCit7DQorCWlmIChTdGF0dXNJc0ZhdGFsKCkpIHJldHVybjsNCisJU2V0RG93blNvdXJjZShuZXcgRGlnaXRhbElucHV0KG1vZHVsZU51bWJlciwgY2hhbm5lbCkpOw0KKwltX2FsbG9jYXRlZERvd25Tb3VyY2UgPSB0cnVlOw0KK30NCisNCisvKioNCisgKiBTZXQgdGhlIGRvd24gY291bnRpbmcgc291cmNlIHRvIGJlIGFuIGFuYWxvZyB0cmlnZ2VyLg0KKyAqIEBwYXJhbSBhbmFsb2dUcmlnZ2VyIFRoZSBhbmFsb2cgdHJpZ2dlciBvYmplY3QgdGhhdCBpcyB1c2VkIGZvciB0aGUgRG93biBTb3VyY2UNCisgKiBAcGFyYW0gdHJpZ2dlclR5cGUgVGhlIGFuYWxvZyB0cmlnZ2VyIG91dHB1dCB0aGF0IHdpbGwgdHJpZ2dlciB0aGUgY291bnRlci4NCisgKi8NCit2b2lkIENvdW50ZXI6OlNldERvd25Tb3VyY2UoQW5hbG9nVHJpZ2dlciAqYW5hbG9nVHJpZ2dlciwgQW5hbG9nVHJpZ2dlck91dHB1dDo6VHlwZSB0cmlnZ2VyVHlwZSkNCit7DQorCWlmIChTdGF0dXNJc0ZhdGFsKCkpIHJldHVybjsNCisJU2V0RG93blNvdXJjZShhbmFsb2dUcmlnZ2VyLT5DcmVhdGVPdXRwdXQodHJpZ2dlclR5cGUpKTsNCisJbV9hbGxvY2F0ZWREb3duU291cmNlID0gdHJ1ZTsNCit9DQorDQorLyoqDQorICogU2V0IHRoZSBkb3duIGNvdW50aW5nIHNvdXJjZSB0byBiZSBhbiBhbmFsb2cgdHJpZ2dlci4NCisgKiBAcGFyYW0gYW5hbG9nVHJpZ2dlciBUaGUgYW5hbG9nIHRyaWdnZXIgb2JqZWN0IHRoYXQgaXMgdXNlZCBmb3IgdGhlIERvd24gU291cmNlDQorICogQHBhcmFtIHRyaWdnZXJUeXBlIFRoZSBhbmFsb2cgdHJpZ2dlciBvdXRwdXQgdGhhdCB3aWxsIHRyaWdnZXIgdGhlIGNvdW50ZXIuDQorICovDQordm9pZCBDb3VudGVyOjpTZXREb3duU291cmNlKEFuYWxvZ1RyaWdnZXIgJmFuYWxvZ1RyaWdnZXIsIEFuYWxvZ1RyaWdnZXJPdXRwdXQ6OlR5cGUgdHJpZ2dlclR5cGUpDQorew0KKwlTZXREb3duU291cmNlKCZhbmFsb2dUcmlnZ2VyLCB0cmlnZ2VyVHlwZSk7DQorfQ0KKw0KKy8qKg0KKyAqIFNldCB0aGUgc291cmNlIG9iamVjdCB0aGF0IGNhdXNlcyB0aGUgY291bnRlciB0byBjb3VudCBkb3duLg0KKyAqIFNldCB0aGUgZG93biBjb3VudGluZyBEaWdpdGFsU291cmNlLg0KKyAqLw0KK3ZvaWQgQ291bnRlcjo6U2V0RG93blNvdXJjZShEaWdpdGFsU291cmNlICpzb3VyY2UpDQorew0KKwlpZiAoU3RhdHVzSXNGYXRhbCgpKSByZXR1cm47DQorCWlmIChtX2FsbG9jYXRlZERvd25Tb3VyY2UpDQorCXsNCisJCWRlbGV0ZSBtX2Rvd25Tb3VyY2U7DQorCQltX2Rvd25Tb3VyY2UgPSBOVUxMOw0KKwkJbV9hbGxvY2F0ZWREb3duU291cmNlID0gZmFsc2U7DQorCX0NCisJbV9kb3duU291cmNlID0gc291cmNlOw0KKwlpZiAobV9kb3duU291cmNlLT5TdGF0dXNJc0ZhdGFsKCkpDQorCXsNCisJCUNsb25lRXJyb3IobV9kb3duU291cmNlKTsNCisJfQ0KKwllbHNlDQorCXsNCisJCXRSaW9TdGF0dXNDb2RlIGxvY2FsU3RhdHVzID0gTmlGcGdhX1N0YXR1c19TdWNjZXNzOw0KKwkJdW5zaWduZWQgY2hhciBtb2RlID0gbV9jb3VudGVyLT5yZWFkQ29uZmlnX01vZGUoJmxvY2FsU3RhdHVzKTsNCisJCWlmIChtb2RlICE9IGtUd29QdWxzZSAmJiBtb2RlICE9IGtFeHRlcm5hbERpcmVjdGlvbikNCisJCXsNCisJCQl3cGlfc2V0V1BJRXJyb3JXaXRoQ29udGV4dChQYXJhbWV0ZXJPdXRPZlJhbmdlLCAiQ291bnRlciBvbmx5IHN1cHBvcnRzIERvd25Tb3VyY2UgaW4gVHdvUHVsc2UgYW5kIEV4dGVybmFsRGlyZWN0aW9uIG1vZGVzLiIpOw0KKwkJCXJldHVybjsNCisJCX0NCisJCW1fY291bnRlci0+d3JpdGVDb25maWdfRG93blNvdXJjZV9Nb2R1bGUoc291cmNlLT5HZXRNb2R1bGVGb3JSb3V0aW5nKCksICZsb2NhbFN0YXR1cyk7DQorCQltX2NvdW50ZXItPndyaXRlQ29uZmlnX0Rvd25Tb3VyY2VfQ2hhbm5lbChzb3VyY2UtPkdldENoYW5uZWxGb3JSb3V0aW5nKCksICZsb2NhbFN0YXR1cyk7DQorCQltX2NvdW50ZXItPndyaXRlQ29uZmlnX0Rvd25Tb3VyY2VfQW5hbG9nVHJpZ2dlcihzb3VyY2UtPkdldEFuYWxvZ1RyaWdnZXJGb3JSb3V0aW5nKCksICZsb2NhbFN0YXR1cyk7DQorCQ0KKwkJU2V0RG93blNvdXJjZUVkZ2UodHJ1ZSwgZmFsc2UpOw0KKwkJbV9jb3VudGVyLT5zdHJvYmVSZXNldCgmbG9jYWxTdGF0dXMpOw0KKwkJd3BpX3NldEVycm9yKGxvY2FsU3RhdHVzKTsNCisJfQ0KK30NCisNCisvKioNCisgKiBTZXQgdGhlIHNvdXJjZSBvYmplY3QgdGhhdCBjYXVzZXMgdGhlIGNvdW50ZXIgdG8gY291bnQgZG93bi4NCisgKiBTZXQgdGhlIGRvd24gY291bnRpbmcgRGlnaXRhbFNvdXJjZS4NCisgKi8NCit2b2lkIENvdW50ZXI6OlNldERvd25Tb3VyY2UoRGlnaXRhbFNvdXJjZSAmc291cmNlKQ0KK3sNCisJU2V0RG93blNvdXJjZSgmc291cmNlKTsNCit9DQorDQorLyoqDQorICogU2V0IHRoZSBlZGdlIHNlbnNpdGl2aXR5IG9uIGEgZG93biBjb3VudGluZyBzb3VyY2UuDQorICogU2V0IHRoZSBkb3duIHNvdXJjZSB0byBlaXRoZXIgZGV0ZWN0IHJpc2luZyBlZGdlcyBvciBmYWxsaW5nIGVkZ2VzLg0KKyAqLw0KK3ZvaWQgQ291bnRlcjo6U2V0RG93blNvdXJjZUVkZ2UoYm9vbCByaXNpbmdFZGdlLCBib29sIGZhbGxpbmdFZGdlKQ0KK3sNCisJaWYgKFN0YXR1c0lzRmF0YWwoKSkgcmV0dXJuOw0KKwlpZiAobV9kb3duU291cmNlID09IE5VTEwpDQorCXsNCisJCXdwaV9zZXRXUElFcnJvcldpdGhDb250ZXh0KE51bGxQYXJhbWV0ZXIsICJNdXN0IHNldCBub24tTlVMTCBEb3duU291cmNlIGJlZm9yZSBzZXR0aW5nIERvd25Tb3VyY2VFZGdlIik7DQorCX0NCisJdFJpb1N0YXR1c0NvZGUgbG9jYWxTdGF0dXMgPSBOaUZwZ2FfU3RhdHVzX1N1Y2Nlc3M7DQorCW1fY291bnRlci0+d3JpdGVDb25maWdfRG93blJpc2luZ0VkZ2UocmlzaW5nRWRnZSwgJmxvY2FsU3RhdHVzKTsNCisJbV9jb3VudGVyLT53cml0ZUNvbmZpZ19Eb3duRmFsbGluZ0VkZ2UoZmFsbGluZ0VkZ2UsICZsb2NhbFN0YXR1cyk7DQorCXdwaV9zZXRFcnJvcihsb2NhbFN0YXR1cyk7DQorfQ0KKw0KKy8qKg0KKyAqIERpc2FibGUgdGhlIGRvd24gY291bnRpbmcgc291cmNlIHRvIHRoZSBjb3VudGVyLg0KKyAqLw0KK3ZvaWQgQ291bnRlcjo6Q2xlYXJEb3duU291cmNlKCkNCit7DQorCWlmIChTdGF0dXNJc0ZhdGFsKCkpIHJldHVybjsNCisJaWYgKG1fYWxsb2NhdGVkRG93blNvdXJjZSkNCisJew0KKwkJZGVsZXRlIG1fZG93blNvdXJjZTsNCisJCW1fZG93blNvdXJjZSA9IE5VTEw7DQorCQltX2FsbG9jYXRlZERvd25Tb3VyY2UgPSBmYWxzZTsNCisJfQ0KKwl0UmlvU3RhdHVzQ29kZSBsb2NhbFN0YXR1cyA9IE5pRnBnYV9TdGF0dXNfU3VjY2VzczsNCisJYm9vbCBzdGF0ZSA9IG1fY291bnRlci0+cmVhZENvbmZpZ19FbmFibGUoJmxvY2FsU3RhdHVzKTsNCisJbV9jb3VudGVyLT53cml0ZUNvbmZpZ19FbmFibGUoZmFsc2UsICZsb2NhbFN0YXR1cyk7DQorCW1fY291bnRlci0+d3JpdGVDb25maWdfRG93bkZhbGxpbmdFZGdlKGZhbHNlLCAmbG9jYWxTdGF0dXMpOw0KKwltX2NvdW50ZXItPndyaXRlQ29uZmlnX0Rvd25SaXNpbmdFZGdlKGZhbHNlLCAmbG9jYWxTdGF0dXMpOw0KKwkvLyBJbmRleCAwIG9mIGRpZ2l0YWwgaXMgYWx3YXlzIDAuDQorCW1fY291bnRlci0+d3JpdGVDb25maWdfRG93blNvdXJjZV9DaGFubmVsKDAsICZsb2NhbFN0YXR1cyk7DQorCW1fY291bnRlci0+d3JpdGVDb25maWdfRG93blNvdXJjZV9BbmFsb2dUcmlnZ2VyKGZhbHNlLCAmbG9jYWxTdGF0dXMpOw0KKwltX2NvdW50ZXItPndyaXRlQ29uZmlnX0VuYWJsZShzdGF0ZSwgJmxvY2FsU3RhdHVzKTsNCisJd3BpX3NldEVycm9yKGxvY2FsU3RhdHVzKTsNCit9DQorDQorLyoqDQorICogU2V0IHN0YW5kYXJkIHVwIC8gZG93biBjb3VudGluZyBtb2RlIG9uIHRoaXMgY291bnRlci4NCisgKiBVcCBhbmQgZG93biBjb3VudHMgYXJlIHNvdXJjZWQgaW5kZXBlbmRlbnRseSBmcm9tIHR3byBpbnB1dHMuDQorICovDQordm9pZCBDb3VudGVyOjpTZXRVcERvd25Db3VudGVyTW9kZSgpDQorew0KKwlpZiAoU3RhdHVzSXNGYXRhbCgpKSByZXR1cm47DQorCXRSaW9TdGF0dXNDb2RlIGxvY2FsU3RhdHVzID0gTmlGcGdhX1N0YXR1c19TdWNjZXNzOw0KKwltX2NvdW50ZXItPndyaXRlQ29uZmlnX01vZGUoa1R3b1B1bHNlLCAmbG9jYWxTdGF0dXMpOw0KKwl3cGlfc2V0RXJyb3IobG9jYWxTdGF0dXMpOw0KK30NCisNCisvKioNCisgKiBTZXQgZXh0ZXJuYWwgZGlyZWN0aW9uIG1vZGUgb24gdGhpcyBjb3VudGVyLg0KKyAqIENvdW50cyBhcmUgc291cmNlZCBvbiB0aGUgVXAgY291bnRlciBpbnB1dC4NCisgKiBUaGUgRG93biBjb3VudGVyIGlucHV0IHJlcHJlc2VudHMgdGhlIGRpcmVjdGlvbiB0byBjb3VudC4NCisgKi8NCit2b2lkIENvdW50ZXI6OlNldEV4dGVybmFsRGlyZWN0aW9uTW9kZSgpDQorew0KKwlpZiAoU3RhdHVzSXNGYXRhbCgpKSByZXR1cm47DQorCXRSaW9TdGF0dXNDb2RlIGxvY2FsU3RhdHVzID0gTmlGcGdhX1N0YXR1c19TdWNjZXNzOw0KKwltX2NvdW50ZXItPndyaXRlQ29uZmlnX01vZGUoa0V4dGVybmFsRGlyZWN0aW9uLCAmbG9jYWxTdGF0dXMpOw0KKwl3cGlfc2V0RXJyb3IobG9jYWxTdGF0dXMpOw0KK30NCisNCisvKioNCisgKiBTZXQgU2VtaS1wZXJpb2QgbW9kZSBvbiB0aGlzIGNvdW50ZXIuDQorICogQ291bnRzIHVwIG9uIGJvdGggcmlzaW5nIGFuZCBmYWxsaW5nIGVkZ2VzLiANCisgKi8NCit2b2lkIENvdW50ZXI6OlNldFNlbWlQZXJpb2RNb2RlKGJvb2wgaGlnaFNlbWlQZXJpb2QpDQorew0KKwlpZiAoU3RhdHVzSXNGYXRhbCgpKSByZXR1cm47DQorCXRSaW9TdGF0dXNDb2RlIGxvY2FsU3RhdHVzID0gTmlGcGdhX1N0YXR1c19TdWNjZXNzOw0KKwltX2NvdW50ZXItPndyaXRlQ29uZmlnX01vZGUoa1NlbWlwZXJpb2QsICZsb2NhbFN0YXR1cyk7DQorCW1fY291bnRlci0+d3JpdGVDb25maWdfVXBSaXNpbmdFZGdlKGhpZ2hTZW1pUGVyaW9kLCAmbG9jYWxTdGF0dXMpOw0KKwlTZXRVcGRhdGVXaGVuRW1wdHkoZmFsc2UpOw0KKwl3cGlfc2V0RXJyb3IobG9jYWxTdGF0dXMpOw0KK30NCisNCisvKioNCisgKiBDb25maWd1cmUgdGhlIGNvdW50ZXIgdG8gY291bnQgaW4gdXAgb3IgZG93biBiYXNlZCBvbiB0aGUgbGVuZ3RoIG9mIHRoZSBpbnB1dCBwdWxzZS4NCisgKiBUaGlzIG1vZGUgaXMgbW9zdCB1c2VmdWwgZm9yIGRpcmVjdGlvbiBzZW5zaXRpdmUgZ2VhciB0b290aCBzZW5zb3JzLg0KKyAqIEBwYXJhbSB0aHJlc2hvbGQgVGhlIHB1bHNlIGxlbmd0aCBiZXlvbmQgd2hpY2ggdGhlIGNvdW50ZXIgY291bnRzIHRoZSBvcHBvc2l0ZSBkaXJlY3Rpb24uICBVbml0cyBhcmUgc2Vjb25kcy4NCisgKi8NCit2b2lkIENvdW50ZXI6OlNldFB1bHNlTGVuZ3RoTW9kZShmbG9hdCB0aHJlc2hvbGQpDQorew0KKwlpZiAoU3RhdHVzSXNGYXRhbCgpKSByZXR1cm47DQorCXRSaW9TdGF0dXNDb2RlIGxvY2FsU3RhdHVzID0gTmlGcGdhX1N0YXR1c19TdWNjZXNzOw0KKwltX2NvdW50ZXItPndyaXRlQ29uZmlnX01vZGUoa1B1bHNlTGVuZ3RoLCAmbG9jYWxTdGF0dXMpOw0KKwltX2NvdW50ZXItPndyaXRlQ29uZmlnX1B1bHNlTGVuZ3RoVGhyZXNob2xkKChVSU5UMzIpKHRocmVzaG9sZCAqIDEuMGU2KSAqIGtTeXN0ZW1DbG9ja1RpY2tzUGVyTWljcm9zZWNvbmQsICZsb2NhbFN0YXR1cyk7DQorCXdwaV9zZXRFcnJvcihsb2NhbFN0YXR1cyk7DQorfQ0KKw0KKy8qKg0KKyAqIFN0YXJ0IHRoZSBDb3VudGVyIGNvdW50aW5nLg0KKyAqIFRoaXMgZW5hYmxlcyB0aGUgY291bnRlciBhbmQgaXQgc3RhcnRzIGFjY3VtdWxhdGluZyBjb3VudHMgZnJvbSB0aGUgYXNzb2NpYXRlZA0KKyAqIGlucHV0IGNoYW5uZWwuIFRoZSBjb3VudGVyIHZhbHVlIGlzIG5vdCByZXNldCBvbiBzdGFydGluZywgYW5kIHN0aWxsIGhhcyB0aGUgcHJldmlvdXMgdmFsdWUuDQorICovDQordm9pZCBDb3VudGVyOjpTdGFydCgpDQorew0KKwlpZiAoU3RhdHVzSXNGYXRhbCgpKSByZXR1cm47DQorCXRSaW9TdGF0dXNDb2RlIGxvY2FsU3RhdHVzID0gTmlGcGdhX1N0YXR1c19TdWNjZXNzOw0KKwltX2NvdW50ZXItPndyaXRlQ29uZmlnX0VuYWJsZSgxLCAmbG9jYWxTdGF0dXMpOw0KKwl3cGlfc2V0RXJyb3IobG9jYWxTdGF0dXMpOw0KK30NCisNCisvKioNCisgKiBSZWFkIHRoZSBjdXJyZW50IGNvdW50ZXIgdmFsdWUuDQorICogUmVhZCB0aGUgdmFsdWUgYXQgdGhpcyBpbnN0YW50LiBJdCBtYXkgc3RpbGwgYmUgcnVubmluZywgc28gaXQgcmVmbGVjdHMgdGhlIGN1cnJlbnQgdmFsdWUuIE5leHQNCisgKiB0aW1lIGl0IGlzIHJlYWQsIGl0IG1pZ2h0IGhhdmUgYSBkaWZmZXJlbnQgdmFsdWUuDQorICovDQorSU5UMzIgQ291bnRlcjo6R2V0KCkNCit7DQorCWlmIChTdGF0dXNJc0ZhdGFsKCkpIHJldHVybiAwOw0KKwl0UmlvU3RhdHVzQ29kZSBsb2NhbFN0YXR1cyA9IE5pRnBnYV9TdGF0dXNfU3VjY2VzczsNCisJSU5UMzIgdmFsdWUgPSBtX2NvdW50ZXItPnJlYWRPdXRwdXRfVmFsdWUoJmxvY2FsU3RhdHVzKTsNCisJd3BpX3NldEVycm9yKGxvY2FsU3RhdHVzKTsNCisJcmV0dXJuIHZhbHVlOw0KK30NCisNCisvKioNCisgKiBSZXNldCB0aGUgQ291bnRlciB0byB6ZXJvLg0KKyAqIFNldCB0aGUgY291bnRlciB2YWx1ZSB0byB6ZXJvLiBUaGlzIGRvZXNuJ3QgZWZmZWN0IHRoZSBydW5uaW5nIHN0YXRlIG9mIHRoZSBjb3VudGVyLCBqdXN0IHNldHMNCisgKiB0aGUgY3VycmVudCB2YWx1ZSB0byB6ZXJvLg0KKyAqLw0KK3ZvaWQgQ291bnRlcjo6UmVzZXQoKQ0KK3sNCisJaWYgKFN0YXR1c0lzRmF0YWwoKSkgcmV0dXJuOw0KKwl0UmlvU3RhdHVzQ29kZSBsb2NhbFN0YXR1cyA9IE5pRnBnYV9TdGF0dXNfU3VjY2VzczsNCisJbV9jb3VudGVyLT5zdHJvYmVSZXNldCgmbG9jYWxTdGF0dXMpOw0KKwl3cGlfc2V0RXJyb3IobG9jYWxTdGF0dXMpOw0KK30NCisNCisvKioNCisgKiBTdG9wIHRoZSBDb3VudGVyLg0KKyAqIFN0b3BzIHRoZSBjb3VudGluZyBidXQgZG9lc24ndCBlZmZlY3QgdGhlIGN1cnJlbnQgdmFsdWUuDQorICovDQordm9pZCBDb3VudGVyOjpTdG9wKCkNCit7DQorCWlmIChTdGF0dXNJc0ZhdGFsKCkpIHJldHVybjsNCisJdFJpb1N0YXR1c0NvZGUgbG9jYWxTdGF0dXMgPSBOaUZwZ2FfU3RhdHVzX1N1Y2Nlc3M7DQorCW1fY291bnRlci0+d3JpdGVDb25maWdfRW5hYmxlKDAsICZsb2NhbFN0YXR1cyk7DQorCXdwaV9zZXRFcnJvcihsb2NhbFN0YXR1cyk7DQorfQ0KKw0KKy8qDQorICogR2V0IHRoZSBQZXJpb2Qgb2YgdGhlIG1vc3QgcmVjZW50IGNvdW50Lg0KKyAqIFJldHVybnMgdGhlIHRpbWUgaW50ZXJ2YWwgb2YgdGhlIG1vc3QgcmVjZW50IGNvdW50LiBUaGlzIGNhbiBiZSB1c2VkIGZvciB2ZWxvY2l0eSBjYWxjdWxhdGlvbnMNCisgKiB0byBkZXRlcm1pbmUgc2hhZnQgc3BlZWQuDQorICogQHJldHVybnMgVGhlIHBlcmlvZCBvZiB0aGUgbGFzdCB0d28gcHVsc2VzIGluIHVuaXRzIG9mIHNlY29uZHMuDQorICovDQorZG91YmxlIENvdW50ZXI6OkdldFBlcmlvZCgpDQorew0KKwlpZiAoU3RhdHVzSXNGYXRhbCgpKSByZXR1cm4gMC4wOw0KKwl0UmlvU3RhdHVzQ29kZSBsb2NhbFN0YXR1cyA9IE5pRnBnYV9TdGF0dXNfU3VjY2VzczsNCisJdENvdW50ZXI6OnRUaW1lck91dHB1dCBvdXRwdXQgPSBtX2NvdW50ZXItPnJlYWRUaW1lck91dHB1dCgmbG9jYWxTdGF0dXMpOw0KKwlkb3VibGUgcGVyaW9kOw0KKwlpZiAob3V0cHV0LlN0YWxsZWQpDQorCXsNCisJCS8vIFJldHVybiBpbmZpbml0eQ0KKwkJZG91YmxlIHplcm8gPSAwLjA7DQorCQlwZXJpb2QgPSAxLjAgLyB6ZXJvOw0KKwl9DQorCWVsc2UNCisJew0KKwkJLy8gb3V0cHV0LlBlcmlvZCBpcyBhIGZpeGVkIHBvaW50IG51bWJlciB0aGF0IGNvdW50cyBieSAyICgyNCBiaXRzLCAyNSBpbnRlZ2VyIGJpdHMpDQorCQlwZXJpb2QgPSAoZG91YmxlKShvdXRwdXQuUGVyaW9kIDw8IDEpIC8gKGRvdWJsZSlvdXRwdXQuQ291bnQ7DQorCX0NCisJd3BpX3NldEVycm9yKGxvY2FsU3RhdHVzKTsNCisJcmV0dXJuIHBlcmlvZCAqIDEuMGUtNjsNCit9DQorDQorLyoqDQorICogU2V0IHRoZSBtYXhpbXVtIHBlcmlvZCB3aGVyZSB0aGUgZGV2aWNlIGlzIHN0aWxsIGNvbnNpZGVyZWQgIm1vdmluZyIuDQorICogU2V0cyB0aGUgbWF4aW11bSBwZXJpb2Qgd2hlcmUgdGhlIGRldmljZSBpcyBjb25zaWRlcmVkIG1vdmluZy4gVGhpcyB2YWx1ZSBpcyB1c2VkIHRvIGRldGVybWluZQ0KKyAqIHRoZSAic3RvcHBlZCIgc3RhdGUgb2YgdGhlIGNvdW50ZXIgdXNpbmcgdGhlIEdldFN0b3BwZWQgbWV0aG9kLg0KKyAqIEBwYXJhbSBtYXhQZXJpb2QgVGhlIG1heGltdW0gcGVyaW9kIHdoZXJlIHRoZSBjb3VudGVkIGRldmljZSBpcyBjb25zaWRlcmVkIG1vdmluZyBpbg0KKyAqIHNlY29uZHMuDQorICovDQordm9pZCBDb3VudGVyOjpTZXRNYXhQZXJpb2QoZG91YmxlIG1heFBlcmlvZCkNCit7DQorCWlmIChTdGF0dXNJc0ZhdGFsKCkpIHJldHVybjsNCisJdFJpb1N0YXR1c0NvZGUgbG9jYWxTdGF0dXMgPSBOaUZwZ2FfU3RhdHVzX1N1Y2Nlc3M7DQorCW1fY291bnRlci0+d3JpdGVUaW1lckNvbmZpZ19TdGFsbFBlcmlvZCgoVUlOVDMyKShtYXhQZXJpb2QgKiAxLjBlNiksICZsb2NhbFN0YXR1cyk7DQorCXdwaV9zZXRFcnJvcihsb2NhbFN0YXR1cyk7DQorfQ0KKw0KKy8qKg0KKyAqIFNlbGVjdCB3aGV0aGVyIHlvdSB3YW50IHRvIGNvbnRpbnVlIHVwZGF0aW5nIHRoZSBldmVudCB0aW1lciBvdXRwdXQgd2hlbiB0aGVyZSBhcmUgbm8gc2FtcGxlcyBjYXB0dXJlZC4NCisgKiBUaGUgb3V0cHV0IG9mIHRoZSBldmVudCB0aW1lciBoYXMgYSBidWZmZXIgb2YgcGVyaW9kcyB0aGF0IGFyZSBhdmVyYWdlZCBhbmQgcG9zdGVkIHRvDQorICogYSByZWdpc3RlciBvbiB0aGUgRlBHQS4gIFdoZW4gdGhlIHRpbWVyIGRldGVjdHMgdGhhdCB0aGUgZXZlbnQgc291cmNlIGhhcyBzdG9wcGVkDQorICogKGJhc2VkIG9uIHRoZSBNYXhQZXJpb2QpIHRoZSBidWZmZXIgb2Ygc2FtcGxlcyB0byBiZSBhdmVyYWdlZCBpcyBlbXB0aWVkLiAgSWYgeW91DQorICogZW5hYmxlIHRoZSB1cGRhdGUgd2hlbiBlbXB0eSwgeW91IHdpbGwgYmUgbm90aWZpZWQgb2YgdGhlIHN0b3BwZWQgc291cmNlIGFuZCB0aGUgZXZlbnQNCisgKiB0aW1lIHdpbGwgcmVwb3J0IDAgc2FtcGxlcy4gIElmIHlvdSBkaXNhYmxlIHVwZGF0ZSB3aGVuIGVtcHR5LCB0aGUgbW9zdCByZWNlbnQgYXZlcmFnZQ0KKyAqIHdpbGwgcmVtYWluIG9uIHRoZSBvdXRwdXQgdW50aWwgYSBuZXcgc2FtcGxlIGlzIGFjcXVpcmVkLiAgWW91IHdpbGwgbmV2ZXIgc2VlIDAgc2FtcGxlcw0KKyAqIG91dHB1dCAoZXhjZXB0IHdoZW4gdGhlcmUgaGF2ZSBiZWVuIG5vIGV2ZW50cyBzaW5jZSBhbiBGUEdBIHJlc2V0KSBhbmQgeW91IHdpbGwgbGlrZWx5IG5vdA0KKyAqIHNlZSB0aGUgc3RvcHBlZCBiaXQgYmVjb21lIHRydWUgKHNpbmNlIGl0IGlzIHVwZGF0ZWQgYXQgdGhlIGVuZCBvZiBhbiBhdmVyYWdlIGFuZCB0aGVyZSBhcmUNCisgKiBubyBzYW1wbGVzIHRvIGF2ZXJhZ2UpLg0KKyAqLw0KK3ZvaWQgQ291bnRlcjo6U2V0VXBkYXRlV2hlbkVtcHR5KGJvb2wgZW5hYmxlZCkNCit7DQorCWlmIChTdGF0dXNJc0ZhdGFsKCkpIHJldHVybjsNCisJdFJpb1N0YXR1c0NvZGUgbG9jYWxTdGF0dXMgPSBOaUZwZ2FfU3RhdHVzX1N1Y2Nlc3M7DQorCW1fY291bnRlci0+d3JpdGVUaW1lckNvbmZpZ19VcGRhdGVXaGVuRW1wdHkoZW5hYmxlZCwgJmxvY2FsU3RhdHVzKTsNCisJd3BpX3NldEVycm9yKGxvY2FsU3RhdHVzKTsNCit9DQorDQorLyoqDQorICogRGV0ZXJtaW5lIGlmIHRoZSBjbG9jayBpcyBzdG9wcGVkLg0KKyAqIERldGVybWluZSBpZiB0aGUgY2xvY2tlZCBpbnB1dCBpcyBzdG9wcGVkIGJhc2VkIG9uIHRoZSBNYXhQZXJpb2QgdmFsdWUgc2V0IHVzaW5nIHRoZQ0KKyAqIFNldE1heFBlcmlvZCBtZXRob2QuIElmIHRoZSBjbG9jayBleGNlZWRzIHRoZSBNYXhQZXJpb2QsIHRoZW4gdGhlIGRldmljZSAoYW5kIGNvdW50ZXIpIGFyZQ0KKyAqIGFzc3VtZWQgdG8gYmUgc3RvcHBlZCBhbmQgaXQgcmV0dXJucyB0cnVlLg0KKyAqIEByZXR1cm4gUmV0dXJucyB0cnVlIGlmIHRoZSBtb3N0IHJlY2VudCBjb3VudGVyIHBlcmlvZCBleGNlZWRzIHRoZSBNYXhQZXJpb2QgdmFsdWUgc2V0IGJ5DQorICogU2V0TWF4UGVyaW9kLg0KKyAqLw0KK2Jvb2wgQ291bnRlcjo6R2V0U3RvcHBlZCgpDQorew0KKwlpZiAoU3RhdHVzSXNGYXRhbCgpKSByZXR1cm4gZmFsc2U7DQorCXRSaW9TdGF0dXNDb2RlIGxvY2FsU3RhdHVzID0gTmlGcGdhX1N0YXR1c19TdWNjZXNzOw0KKwlyZXR1cm4gbV9jb3VudGVyLT5yZWFkVGltZXJPdXRwdXRfU3RhbGxlZCgmbG9jYWxTdGF0dXMpOw0KKwl3cGlfc2V0RXJyb3IobG9jYWxTdGF0dXMpOw0KK30NCisNCisvKioNCisgKiBUaGUgbGFzdCBkaXJlY3Rpb24gdGhlIGNvdW50ZXIgdmFsdWUgY2hhbmdlZC4NCisgKiBAcmV0dXJuIFRoZSBsYXN0IGRpcmVjdGlvbiB0aGUgY291bnRlciB2YWx1ZSBjaGFuZ2VkLg0KKyAqLw0KK2Jvb2wgQ291bnRlcjo6R2V0RGlyZWN0aW9uKCkNCit7DQorCWlmIChTdGF0dXNJc0ZhdGFsKCkpIHJldHVybiBmYWxzZTsNCisJdFJpb1N0YXR1c0NvZGUgbG9jYWxTdGF0dXMgPSBOaUZwZ2FfU3RhdHVzX1N1Y2Nlc3M7DQorCWJvb2wgdmFsdWUgPSBtX2NvdW50ZXItPnJlYWRPdXRwdXRfRGlyZWN0aW9uKCZsb2NhbFN0YXR1cyk7DQorCXdwaV9zZXRFcnJvcihsb2NhbFN0YXR1cyk7DQorCXJldHVybiB2YWx1ZTsNCit9DQorDQorLyoqDQorICogU2V0IHRoZSBDb3VudGVyIHRvIHJldHVybiByZXZlcnNlZCBzZW5zaW5nIG9uIHRoZSBkaXJlY3Rpb24uDQorICogVGhpcyBhbGxvd3MgY291bnRlcnMgdG8gY2hhbmdlIHRoZSBkaXJlY3Rpb24gdGhleSBhcmUgY291bnRpbmcgaW4gdGhlIGNhc2Ugb2YgMVggYW5kIDJYDQorICogcXVhZHJhdHVyZSBlbmNvZGluZyBvbmx5LiBBbnkgb3RoZXIgY291bnRlciBtb2RlIGlzbid0IHN1cHBvcnRlZC4NCisgKiBAcGFyYW0gcmV2ZXJzZURpcmVjdGlvbiB0cnVlIGlmIHRoZSB2YWx1ZSBjb3VudGVkIHNob3VsZCBiZSBuZWdhdGVkLg0KKyAqLw0KK3ZvaWQgQ291bnRlcjo6U2V0UmV2ZXJzZURpcmVjdGlvbihib29sIHJldmVyc2VEaXJlY3Rpb24pDQorew0KKwlpZiAoU3RhdHVzSXNGYXRhbCgpKSByZXR1cm47DQorCXRSaW9TdGF0dXNDb2RlIGxvY2FsU3RhdHVzID0gTmlGcGdhX1N0YXR1c19TdWNjZXNzOw0KKwlpZiAobV9jb3VudGVyLT5yZWFkQ29uZmlnX01vZGUoJmxvY2FsU3RhdHVzKSA9PSBrRXh0ZXJuYWxEaXJlY3Rpb24pDQorCXsNCisJCWlmIChyZXZlcnNlRGlyZWN0aW9uKQ0KKwkJCVNldERvd25Tb3VyY2VFZGdlKHRydWUsIHRydWUpOw0KKwkJZWxzZQ0KKwkJCVNldERvd25Tb3VyY2VFZGdlKGZhbHNlLCB0cnVlKTsNCisJfQ0KKwl3cGlfc2V0RXJyb3IobG9jYWxTdGF0dXMpOw0KK30NCisNCisNCit2b2lkIENvdW50ZXI6OlVwZGF0ZVRhYmxlKCkgew0KKwlpZiAobV90YWJsZSAhPSBOVUxMKSB7DQorCQltX3RhYmxlLT5QdXROdW1iZXIoIlZhbHVlIiwgR2V0KCkpOw0KKwl9DQorfQ0KKw0KK3ZvaWQgQ291bnRlcjo6U3RhcnRMaXZlV2luZG93TW9kZSgpIHsNCisJDQorfQ0KKw0KK3ZvaWQgQ291bnRlcjo6U3RvcExpdmVXaW5kb3dNb2RlKCkgew0KKwkNCit9DQorDQorc3RkOjpzdHJpbmcgQ291bnRlcjo6R2V0U21hcnREYXNoYm9hcmRUeXBlKCkgew0KKwlyZXR1cm4gIkNvdW50ZXIiOw0KK30NCisNCit2b2lkIENvdW50ZXI6OkluaXRUYWJsZShJVGFibGUgKnN1YlRhYmxlKSB7DQorCW1fdGFibGUgPSBzdWJUYWJsZTsNCisJVXBkYXRlVGFibGUoKTsNCit9DQorDQorSVRhYmxlICogQ291bnRlcjo6R2V0VGFibGUoKSB7DQorCXJldHVybiBtX3RhYmxlOw0KK30NCisNCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9Db3VudGVyLmggYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9Db3VudGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTY1YjhjNQotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0NvdW50ZXIuaApAQCAtMCwwICsxLDk0IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy8qIENvcHlyaWdodCAoYykgRklSU1QgMjAwOC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4JCQkJCQkJICAqLw0KKy8qIE9wZW4gU291cmNlIFNvZnR3YXJlIC0gbWF5IGJlIG1vZGlmaWVkIGFuZCBzaGFyZWQgYnkgRlJDIHRlYW1zLiBUaGUgY29kZSAgICovDQorLyogbXVzdCBiZSBhY2NvbXBhbmllZCBieSB0aGUgRklSU1QgQlNEIGxpY2Vuc2UgZmlsZSBpbiAkKFdJTkRfQkFTRSkvV1BJTGliLiAgKi8NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKyNpZm5kZWYgQ1BQQ09VTlRFUl9IXw0KKyNkZWZpbmUgQ1BQQ09VTlRFUl9IXw0KKw0KKyNpbmNsdWRlICJBbmFsb2dUcmlnZ2VyT3V0cHV0LmgiDQorI2luY2x1ZGUgIkNvdW50ZXJCYXNlLmgiDQorI2luY2x1ZGUgIlNlbnNvckJhc2UuaCINCisjaW5jbHVkZSAiTGl2ZVdpbmRvdy9MaXZlV2luZG93U2VuZGFibGUuaCINCisNCisvKioNCisgKiBDbGFzcyBmb3IgY291bnRpbmcgdGhlIG51bWJlciBvZiB0aWNrcyBvbiBhIGRpZ2l0YWwgaW5wdXQgY2hhbm5lbC4NCisgKiBUaGlzIGlzIGEgZ2VuZXJhbCBwdXJwb3NlIGNsYXNzIGZvciBjb3VudGluZyByZXBldGl0aXZlIGV2ZW50cy4gSXQgY2FuIHJldHVybiB0aGUgbnVtYmVyDQorICogb2YgY291bnRzLCB0aGUgcGVyaW9kIG9mIHRoZSBtb3N0IHJlY2VudCBjeWNsZSwgYW5kIGRldGVjdCB3aGVuIHRoZSBzaWduYWwgYmVpbmcgY291bnRlZA0KKyAqIGhhcyBzdG9wcGVkIGJ5IHN1cHBseWluZyBhIG1heGltdW0gY3ljbGUgdGltZS4NCisgKi8NCitjbGFzcyBDb3VudGVyIDogcHVibGljIFNlbnNvckJhc2UsIHB1YmxpYyBDb3VudGVyQmFzZSwgcHVibGljIExpdmVXaW5kb3dTZW5kYWJsZQ0KK3sNCitwdWJsaWM6DQorCXR5cGVkZWYgZW51bSB7a1R3b1B1bHNlPTAsIGtTZW1pcGVyaW9kPTEsIGtQdWxzZUxlbmd0aD0yLCBrRXh0ZXJuYWxEaXJlY3Rpb249M30gTW9kZTsNCisNCisJQ291bnRlcigpOw0KKwlleHBsaWNpdCBDb3VudGVyKFVJTlQzMiBjaGFubmVsKTsNCisJQ291bnRlcihVSU5UOCBtb2R1bGVOdW1iZXIsIFVJTlQzMiBjaGFubmVsKTsNCisJZXhwbGljaXQgQ291bnRlcihEaWdpdGFsU291cmNlICpzb3VyY2UpOw0KKwlleHBsaWNpdCBDb3VudGVyKERpZ2l0YWxTb3VyY2UgJnNvdXJjZSk7DQorCWV4cGxpY2l0IENvdW50ZXIoQW5hbG9nVHJpZ2dlciAqdHJpZ2dlcik7DQorCWV4cGxpY2l0IENvdW50ZXIoQW5hbG9nVHJpZ2dlciAmdHJpZ2dlcik7DQorCUNvdW50ZXIoRW5jb2RpbmdUeXBlIGVuY29kaW5nVHlwZSwgRGlnaXRhbFNvdXJjZSAqdXBTb3VyY2UsIERpZ2l0YWxTb3VyY2UgKmRvd25Tb3VyY2UsIGJvb2wgaW52ZXJ0ZWQpOw0KKwl2aXJ0dWFsIH5Db3VudGVyKCk7DQorDQorCXZvaWQgU2V0VXBTb3VyY2UoVUlOVDMyIGNoYW5uZWwpOw0KKwl2b2lkIFNldFVwU291cmNlKFVJTlQ4IG1vZHVsZU51bWJlciwgVUlOVDMyIGNoYW5uZWwpOw0KKwl2b2lkIFNldFVwU291cmNlKEFuYWxvZ1RyaWdnZXIgKmFuYWxvZ1RyaWdnZXIsIEFuYWxvZ1RyaWdnZXJPdXRwdXQ6OlR5cGUgdHJpZ2dlclR5cGUpOw0KKwl2b2lkIFNldFVwU291cmNlKEFuYWxvZ1RyaWdnZXIgJmFuYWxvZ1RyaWdnZXIsIEFuYWxvZ1RyaWdnZXJPdXRwdXQ6OlR5cGUgdHJpZ2dlclR5cGUpOw0KKwl2b2lkIFNldFVwU291cmNlKERpZ2l0YWxTb3VyY2UgKnNvdXJjZSk7DQorCXZvaWQgU2V0VXBTb3VyY2UoRGlnaXRhbFNvdXJjZSAmc291cmNlKTsNCisJdm9pZCBTZXRVcFNvdXJjZUVkZ2UoYm9vbCByaXNpbmdFZGdlLCBib29sIGZhbGxpbmdFZGdlKTsNCisJdm9pZCBDbGVhclVwU291cmNlKCk7DQorDQorCXZvaWQgU2V0RG93blNvdXJjZShVSU5UMzIgY2hhbm5lbCk7DQorCXZvaWQgU2V0RG93blNvdXJjZShVSU5UOCBtb2R1bGVOdW1iZXIsIFVJTlQzMiBjaGFubmVsKTsNCisJdm9pZCBTZXREb3duU291cmNlKEFuYWxvZ1RyaWdnZXIgKmFuYWxvZ1RyaWdnZXIsIEFuYWxvZ1RyaWdnZXJPdXRwdXQ6OlR5cGUgdHJpZ2dlclR5cGUpOw0KKwl2b2lkIFNldERvd25Tb3VyY2UoQW5hbG9nVHJpZ2dlciAmYW5hbG9nVHJpZ2dlciwgQW5hbG9nVHJpZ2dlck91dHB1dDo6VHlwZSB0cmlnZ2VyVHlwZSk7DQorCXZvaWQgU2V0RG93blNvdXJjZShEaWdpdGFsU291cmNlICpzb3VyY2UpOw0KKwl2b2lkIFNldERvd25Tb3VyY2UoRGlnaXRhbFNvdXJjZSAmc291cmNlKTsNCisJdm9pZCBTZXREb3duU291cmNlRWRnZShib29sIHJpc2luZ0VkZ2UsIGJvb2wgZmFsbGluZ0VkZ2UpOw0KKwl2b2lkIENsZWFyRG93blNvdXJjZSgpOw0KKw0KKwl2b2lkIFNldFVwRG93bkNvdW50ZXJNb2RlKCk7DQorCXZvaWQgU2V0RXh0ZXJuYWxEaXJlY3Rpb25Nb2RlKCk7DQorCXZvaWQgU2V0U2VtaVBlcmlvZE1vZGUoYm9vbCBoaWdoU2VtaVBlcmlvZCk7DQorCXZvaWQgU2V0UHVsc2VMZW5ndGhNb2RlKGZsb2F0IHRocmVzaG9sZCk7DQorDQorCXZvaWQgU2V0UmV2ZXJzZURpcmVjdGlvbihib29sIHJldmVyc2VEaXJlY3Rpb24pOw0KKw0KKwkvLyBDb3VudGVyQmFzZSBpbnRlcmZhY2UNCisJdm9pZCBTdGFydCgpOw0KKwlJTlQzMiBHZXQoKTsNCisJdm9pZCBSZXNldCgpOw0KKwl2b2lkIFN0b3AoKTsNCisJZG91YmxlIEdldFBlcmlvZCgpOw0KKwl2b2lkIFNldE1heFBlcmlvZChkb3VibGUgbWF4UGVyaW9kKTsNCisJdm9pZCBTZXRVcGRhdGVXaGVuRW1wdHkoYm9vbCBlbmFibGVkKTsNCisJYm9vbCBHZXRTdG9wcGVkKCk7DQorCWJvb2wgR2V0RGlyZWN0aW9uKCk7DQorCVVJTlQzMiBHZXRJbmRleCgpIHtyZXR1cm4gbV9pbmRleDt9DQorCQ0KKwkNCisJdm9pZCBVcGRhdGVUYWJsZSgpOw0KKwl2b2lkIFN0YXJ0TGl2ZVdpbmRvd01vZGUoKTsNCisJdm9pZCBTdG9wTGl2ZVdpbmRvd01vZGUoKTsNCisJdmlydHVhbCBzdGQ6OnN0cmluZyBHZXRTbWFydERhc2hib2FyZFR5cGUoKTsNCisJdm9pZCBJbml0VGFibGUoSVRhYmxlICpzdWJUYWJsZSk7DQorCUlUYWJsZSAqIEdldFRhYmxlKCk7DQorDQorcHJpdmF0ZToNCisJdm9pZCBJbml0Q291bnRlcihNb2RlIG1vZGUgPSBrVHdvUHVsc2UpOw0KKw0KKwlEaWdpdGFsU291cmNlICptX3VwU291cmNlOwkJLy8vPCBXaGF0IG1ha2VzIHRoZSBjb3VudGVyIGNvdW50IHVwLg0KKwlEaWdpdGFsU291cmNlICptX2Rvd25Tb3VyY2U7CS8vLzwgV2hhdCBtYWtlcyB0aGUgY291bnRlciBjb3VudCBkb3duLg0KKwlib29sIG1fYWxsb2NhdGVkVXBTb3VyY2U7CQkvLy88IFdhcyB0aGUgdXBTb3VyY2UgYWxsb2NhdGVkIGxvY2FsbHk/DQorCWJvb2wgbV9hbGxvY2F0ZWREb3duU291cmNlOwkvLy88IFdhcyB0aGUgZG93blNvdXJjZSBhbGxvY2F0ZWQgbG9jYWxseT8NCisJdENvdW50ZXIgKm1fY291bnRlcjsJCQkJLy8vPCBUaGUgRlBHQSBjb3VudGVyIG9iamVjdC4NCisJVUlOVDMyIG1faW5kZXg7CQkJCQkvLy88IFRoZSBpbmRleCBvZiB0aGlzIGNvdW50ZXIuDQorCQ0KKwlJVGFibGUgKm1fdGFibGU7DQorfTsNCisNCisjZW5kaWYNCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9Db3VudGVyQmFzZS5oIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvQ291bnRlckJhc2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45M2UxZGE1Ci0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvQ291bnRlckJhc2UuaApAQCAtMCwwICsxLDMxIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy8qIENvcHlyaWdodCAoYykgRklSU1QgMjAwOC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4JCQkJCQkJICAqLw0KKy8qIE9wZW4gU291cmNlIFNvZnR3YXJlIC0gbWF5IGJlIG1vZGlmaWVkIGFuZCBzaGFyZWQgYnkgRlJDIHRlYW1zLiBUaGUgY29kZSAgICovDQorLyogbXVzdCBiZSBhY2NvbXBhbmllZCBieSB0aGUgRklSU1QgQlNEIGxpY2Vuc2UgZmlsZSBpbiAkKFdJTkRfQkFTRSkvV1BJTGliLiAgKi8NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKyNpZm5kZWYgQ1BQQ09VTlRFUl9CQVNFX0hfDQorI2RlZmluZSBDUFBDT1VOVEVSX0JBU0VfSF8NCisNCisvKioNCisgKiBJbnRlcmZhY2UgZm9yIGNvdW50aW5nIHRoZSBudW1iZXIgb2YgdGlja3Mgb24gYSBkaWdpdGFsIGlucHV0IGNoYW5uZWwuDQorICogRW5jb2RlcnMsIEdlYXIgdG9vdGggc2Vuc29ycywgYW5kIGNvdW50ZXJzIHNob3VsZCBhbGwgc3ViY2xhc3MgdGhpcyBzbyBpdCBjYW4gYmUgdXNlZCB0bw0KKyAqIGJ1aWxkIG1vcmUgYWR2YW5jZWQgY2xhc3NlcyBmb3IgY29udHJvbCBhbmQgZHJpdmluZy4NCisgKi8NCitjbGFzcyBDb3VudGVyQmFzZQ0KK3sNCitwdWJsaWM6DQorCXR5cGVkZWYgZW51bSB7azFYLCBrMlgsIGs0WH0gRW5jb2RpbmdUeXBlOw0KKw0KKwl2aXJ0dWFsIH5Db3VudGVyQmFzZSgpIHt9DQorCXZpcnR1YWwgdm9pZCBTdGFydCgpID0gMDsNCisJdmlydHVhbCBJTlQzMiBHZXQoKSA9IDA7DQorCXZpcnR1YWwgdm9pZCBSZXNldCgpID0gMDsNCisJdmlydHVhbCB2b2lkIFN0b3AoKSA9IDA7DQorCXZpcnR1YWwgZG91YmxlIEdldFBlcmlvZCgpID0gMDsNCisJdmlydHVhbCB2b2lkIFNldE1heFBlcmlvZChkb3VibGUgbWF4UGVyaW9kKSA9IDA7DQorCXZpcnR1YWwgYm9vbCBHZXRTdG9wcGVkKCkgPSAwOw0KKwl2aXJ0dWFsIGJvb2wgR2V0RGlyZWN0aW9uKCkgPSAwOw0KK307DQorDQorI2VuZGlmDQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvRGFzaGJvYXJkLmNwcCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0Rhc2hib2FyZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2EzZDc3OAotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0Rhc2hib2FyZC5jcHAKQEAgLTAsMCArMSwzOTkgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorLyogQ29weXJpZ2h0IChjKSBGSVJTVCAyMDA4LiBBbGwgUmlnaHRzIFJlc2VydmVkLgkJCQkJCQkgICovDQorLyogT3BlbiBTb3VyY2UgU29mdHdhcmUgLSBtYXkgYmUgbW9kaWZpZWQgYW5kIHNoYXJlZCBieSBGUkMgdGVhbXMuIFRoZSBjb2RlICAgKi8NCisvKiBtdXN0IGJlIGFjY29tcGFuaWVkIGJ5IHRoZSBGSVJTVCBCU0QgbGljZW5zZSBmaWxlIGluICQoV0lORF9CQVNFKS9XUElMaWIuICAqLw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorI2luY2x1ZGUgIkRhc2hib2FyZC5oIg0KKyNpbmNsdWRlICJEcml2ZXJTdGF0aW9uLmgiDQorI2luY2x1ZGUgIk5ldHdvcmtDb21tdW5pY2F0aW9uL1VzYWdlUmVwb3J0aW5nLmgiDQorI2luY2x1ZGUgIlN5bmNocm9uaXplZC5oIg0KKyNpbmNsdWRlICJXUElFcnJvcnMuaCINCisjaW5jbHVkZSA8c3RyTGliLmg+DQorDQorY29uc3QgSU5UMzIgRGFzaGJvYXJkOjprTWF4RGFzaGJvYXJkRGF0YVNpemU7DQorDQorLyoqDQorICogRGFzaGJvYXJkIGNvbnRydWN0b3IuDQorICogDQorICogVGhpcyBpcyBvbmx5IGNhbGxlZCBvbmNlIHdoZW4gdGhlIERyaXZlclN0YXRpb24gY29uc3RydWN0b3IgaXMgY2FsbGVkLg0KKyAqLw0KK0Rhc2hib2FyZDo6RGFzaGJvYXJkKFNFTV9JRCBzdGF0dXNEYXRhU2VtKQ0KKwk6IG1fdXNlclN0YXR1c0RhdGEgKE5VTEwpDQorCSwgbV91c2VyU3RhdHVzRGF0YVNpemUgKDApDQorCSwgbV9sb2NhbEJ1ZmZlciAoTlVMTCkNCisJLCBtX2xvY2FsUHJpbnRCdWZmZXIgKE5VTEwpDQorCSwgbV9wYWNrUHRyIChOVUxMKQ0KKwksIG1fcHJpbnRTZW1hcGhvcmUgKDApDQorCSwgbV9zdGF0dXNEYXRhU2VtYXBob3JlIChzdGF0dXNEYXRhU2VtKQ0KK3sNCisJbV91c2VyU3RhdHVzRGF0YSA9IG5ldyBjaGFyW2tNYXhEYXNoYm9hcmREYXRhU2l6ZV07DQorCW1fbG9jYWxCdWZmZXIgPSBuZXcgY2hhcltrTWF4RGFzaGJvYXJkRGF0YVNpemVdOw0KKwltX2xvY2FsUHJpbnRCdWZmZXIgPSBuZXcgY2hhcltrTWF4RGFzaGJvYXJkRGF0YVNpemUgKiAyXTsNCisJbV9sb2NhbFByaW50QnVmZmVyWzBdID0gMDsNCisJbV9wYWNrUHRyID0gbV9sb2NhbEJ1ZmZlcjsNCisJbV9wcmludFNlbWFwaG9yZSA9IHNlbU1DcmVhdGUoU0VNX1FfUFJJT1JJVFkgfCBTRU1fREVMRVRFX1NBRkUgfCBTRU1fSU5WRVJTSU9OX1NBRkUpOw0KK30NCisNCisvKioNCisgKiBEYXNoYm9hcmQgZGVzdHJ1Y3Rvci4NCisgKiANCisgKiBDYWxsZWQgb25seSB3aGVuIHRoZSBEcml2ZXJTdGF0aW9uIGNsYXNzIGlzIGRlc3Ryb3llZC4NCisgKi8NCitEYXNoYm9hcmQ6On5EYXNoYm9hcmQoKQ0KK3sNCisJc2VtRGVsZXRlKG1fcHJpbnRTZW1hcGhvcmUpOw0KKwltX3BhY2tQdHIgPSBOVUxMOw0KKwlkZWxldGUgW10gbV9sb2NhbFByaW50QnVmZmVyOw0KKwltX2xvY2FsUHJpbnRCdWZmZXIgPSBOVUxMOw0KKwlkZWxldGUgW10gbV9sb2NhbEJ1ZmZlcjsNCisJbV9sb2NhbEJ1ZmZlciA9IE5VTEw7DQorCWRlbGV0ZSBbXSBtX3VzZXJTdGF0dXNEYXRhOw0KKwltX3VzZXJTdGF0dXNEYXRhID0gTlVMTDsNCit9DQorDQorLyoqDQorICogUGFjayBhIHNpZ25lZCA4LWJpdCBpbnQgaW50byB0aGUgZGFzaGJvYXJkIGRhdGEgc3RydWN0dXJlLg0KKyAqIEBwYXJhbSB2YWx1ZSBEYXRhIHRvIGJlIHBhY2tlZCBpbnRvIHRoZSBzdHJ1Y3R1cmUuDQorICovDQordm9pZCBEYXNoYm9hcmQ6OkFkZEk4KElOVDggdmFsdWUpDQorew0KKwlpZiAoIVZhbGlkYXRlQWRkKHNpemVvZihJTlQ4KSkpIHJldHVybjsNCisJbWVtY3B5KG1fcGFja1B0ciwgKGNoYXIqKSZ2YWx1ZSwgc2l6ZW9mKHZhbHVlKSk7DQorCW1fcGFja1B0ciArPSBzaXplb2YodmFsdWUpOw0KKwlBZGRlZEVsZW1lbnQoa0k4KTsNCit9DQorDQorLyoqDQorICogUGFjayBhIHNpZ25lZCAxNi1iaXQgaW50IGludG8gdGhlIGRhc2hib2FyZCBkYXRhIHN0cnVjdHVyZS4NCisgKiBAcGFyYW0gdmFsdWUgRGF0YSB0byBiZSBwYWNrZWQgaW50byB0aGUgc3RydWN0dXJlLg0KKyAqLw0KK3ZvaWQgRGFzaGJvYXJkOjpBZGRJMTYoSU5UMTYgdmFsdWUpDQorew0KKwlpZiAoIVZhbGlkYXRlQWRkKHNpemVvZihJTlQxNikpKSByZXR1cm47DQorCW1lbWNweShtX3BhY2tQdHIsIChjaGFyKikmdmFsdWUsIHNpemVvZih2YWx1ZSkpOw0KKwltX3BhY2tQdHIgKz0gc2l6ZW9mKHZhbHVlKTsNCisJQWRkZWRFbGVtZW50KGtJMTYpOw0KK30NCisNCisvKioNCisgKiBQYWNrIGEgc2lnbmVkIDMyLWJpdCBpbnQgaW50byB0aGUgZGFzaGJvYXJkIGRhdGEgc3RydWN0dXJlLg0KKyAqIEBwYXJhbSB2YWx1ZSBEYXRhIHRvIGJlIHBhY2tlZCBpbnRvIHRoZSBzdHJ1Y3R1cmUuDQorICovDQordm9pZCBEYXNoYm9hcmQ6OkFkZEkzMihJTlQzMiB2YWx1ZSkNCit7DQorCWlmICghVmFsaWRhdGVBZGQoc2l6ZW9mKElOVDMyKSkpIHJldHVybjsNCisJbWVtY3B5KG1fcGFja1B0ciwgKGNoYXIqKSZ2YWx1ZSwgc2l6ZW9mKHZhbHVlKSk7DQorCW1fcGFja1B0ciArPSBzaXplb2YodmFsdWUpOw0KKwlBZGRlZEVsZW1lbnQoa0kzMik7DQorfQ0KKw0KKy8qKg0KKyAqIFBhY2sgYW4gdW5zaWduZWQgOC1iaXQgaW50IGludG8gdGhlIGRhc2hib2FyZCBkYXRhIHN0cnVjdHVyZS4NCisgKiBAcGFyYW0gdmFsdWUgRGF0YSB0byBiZSBwYWNrZWQgaW50byB0aGUgc3RydWN0dXJlLg0KKyAqLw0KK3ZvaWQgRGFzaGJvYXJkOjpBZGRVOChVSU5UOCB2YWx1ZSkNCit7DQorCWlmICghVmFsaWRhdGVBZGQoc2l6ZW9mKFVJTlQ4KSkpIHJldHVybjsNCisJbWVtY3B5KG1fcGFja1B0ciwgKGNoYXIqKSZ2YWx1ZSwgc2l6ZW9mKHZhbHVlKSk7DQorCW1fcGFja1B0ciArPSBzaXplb2YodmFsdWUpOw0KKwlBZGRlZEVsZW1lbnQoa1U4KTsNCit9DQorDQorLyoqDQorICogUGFjayBhbiB1bnNpZ25lZCAxNi1iaXQgaW50IGludG8gdGhlIGRhc2hib2FyZCBkYXRhIHN0cnVjdHVyZS4NCisgKiBAcGFyYW0gdmFsdWUgRGF0YSB0byBiZSBwYWNrZWQgaW50byB0aGUgc3RydWN0dXJlLg0KKyAqLw0KK3ZvaWQgRGFzaGJvYXJkOjpBZGRVMTYoVUlOVDE2IHZhbHVlKQ0KK3sNCisJaWYgKCFWYWxpZGF0ZUFkZChzaXplb2YoVUlOVDE2KSkpIHJldHVybjsNCisJbWVtY3B5KG1fcGFja1B0ciwgKGNoYXIqKSZ2YWx1ZSwgc2l6ZW9mKHZhbHVlKSk7DQorCW1fcGFja1B0ciArPSBzaXplb2YodmFsdWUpOw0KKwlBZGRlZEVsZW1lbnQoa1UxNik7DQorfQ0KKw0KKy8qKg0KKyAqIFBhY2sgYW4gdW5zaWduZWQgMzItYml0IGludCBpbnRvIHRoZSBkYXNoYm9hcmQgZGF0YSBzdHJ1Y3R1cmUuDQorICogQHBhcmFtIHZhbHVlIERhdGEgdG8gYmUgcGFja2VkIGludG8gdGhlIHN0cnVjdHVyZS4NCisgKi8NCit2b2lkIERhc2hib2FyZDo6QWRkVTMyKFVJTlQzMiB2YWx1ZSkNCit7DQorCWlmICghVmFsaWRhdGVBZGQoc2l6ZW9mKFVJTlQzMikpKSByZXR1cm47DQorCW1lbWNweShtX3BhY2tQdHIsIChjaGFyKikmdmFsdWUsIHNpemVvZih2YWx1ZSkpOw0KKwltX3BhY2tQdHIgKz0gc2l6ZW9mKHZhbHVlKTsNCisJQWRkZWRFbGVtZW50KGtVMzIpOw0KK30NCisNCisvKioNCisgKiBQYWNrIGEgMzItYml0IGZsb2F0aW5nIHBvaW50IG51bWJlciBpbnRvIHRoZSBkYXNoYm9hcmQgZGF0YSBzdHJ1Y3R1cmUuDQorICogQHBhcmFtIHZhbHVlIERhdGEgdG8gYmUgcGFja2VkIGludG8gdGhlIHN0cnVjdHVyZS4NCisgKi8NCit2b2lkIERhc2hib2FyZDo6QWRkRmxvYXQoZmxvYXQgdmFsdWUpDQorew0KKwlpZiAoIVZhbGlkYXRlQWRkKHNpemVvZihmbG9hdCkpKSByZXR1cm47DQorCW1lbWNweShtX3BhY2tQdHIsIChjaGFyKikmdmFsdWUsIHNpemVvZih2YWx1ZSkpOw0KKwltX3BhY2tQdHIgKz0gc2l6ZW9mKHZhbHVlKTsNCisJQWRkZWRFbGVtZW50KGtGbG9hdCk7DQorfQ0KKw0KKy8qKg0KKyAqIFBhY2sgYSA2NC1iaXQgZmxvYXRpbmcgcG9pbnQgbnVtYmVyIGludG8gdGhlIGRhc2hib2FyZCBkYXRhIHN0cnVjdHVyZS4NCisgKiBAcGFyYW0gdmFsdWUgRGF0YSB0byBiZSBwYWNrZWQgaW50byB0aGUgc3RydWN0dXJlLg0KKyAqLw0KK3ZvaWQgRGFzaGJvYXJkOjpBZGREb3VibGUoZG91YmxlIHZhbHVlKQ0KK3sNCisJaWYgKCFWYWxpZGF0ZUFkZChzaXplb2YoZG91YmxlKSkpIHJldHVybjsNCisJbWVtY3B5KG1fcGFja1B0ciwgKGNoYXIqKSZ2YWx1ZSwgc2l6ZW9mKHZhbHVlKSk7DQorCW1fcGFja1B0ciArPSBzaXplb2YodmFsdWUpOw0KKwlBZGRlZEVsZW1lbnQoa0RvdWJsZSk7DQorfQ0KKw0KKy8qKg0KKyAqIFBhY2sgYSBib29sZWFuIGludG8gdGhlIGRhc2hib2FyZCBkYXRhIHN0cnVjdHVyZS4NCisgKiBAcGFyYW0gdmFsdWUgRGF0YSB0byBiZSBwYWNrZWQgaW50byB0aGUgc3RydWN0dXJlLg0KKyAqLw0KK3ZvaWQgRGFzaGJvYXJkOjpBZGRCb29sZWFuKGJvb2wgdmFsdWUpDQorew0KKwlpZiAoIVZhbGlkYXRlQWRkKHNpemVvZihjaGFyKSkpIHJldHVybjsNCisJKm1fcGFja1B0ciA9IHZhbHVlID8gMSA6IDA7DQorCW1fcGFja1B0ciArPSBzaXplb2YoY2hhcik7CQ0KKwlBZGRlZEVsZW1lbnQoa0Jvb2xlYW4pOw0KK30NCisNCisvKioNCisgKiBQYWNrIGEgTlVMTC10ZXJtaW5hdGVkIHN0cmluZyBvZiA4LWJpdCBjaGFyYWN0ZXJzIGludG8gdGhlIGRhc2hib2FyZCBkYXRhIHN0cnVjdHVyZS4NCisgKiBAcGFyYW0gdmFsdWUgRGF0YSB0byBiZSBwYWNrZWQgaW50byB0aGUgc3RydWN0dXJlLg0KKyAqLw0KK3ZvaWQgRGFzaGJvYXJkOjpBZGRTdHJpbmcoY2hhciogdmFsdWUpDQorew0KKwlBZGRTdHJpbmcodmFsdWUsIHN0cmxlbih2YWx1ZSkpOw0KK30NCisNCisvKioNCisgKiBQYWNrIGEgc3RyaW5nIG9mIDgtYml0IGNoYXJhY3RlcnMgb2Ygc3BlY2lmaWVkIGxlbmd0aCBpbnRvIHRoZSBkYXNoYm9hcmQgZGF0YSBzdHJ1Y3R1cmUuDQorICogQHBhcmFtIHZhbHVlIERhdGEgdG8gYmUgcGFja2VkIGludG8gdGhlIHN0cnVjdHVyZS4NCisgKiBAcGFyYW0gbGVuZ3RoIFRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gdGhlIHN0cmluZyB0byBwYWNrLg0KKyAqLw0KK3ZvaWQgRGFzaGJvYXJkOjpBZGRTdHJpbmcoY2hhciogdmFsdWUsIElOVDMyIGxlbmd0aCkNCit7DQorCWlmICghVmFsaWRhdGVBZGQobGVuZ3RoICsgc2l6ZW9mKGxlbmd0aCkpKSByZXR1cm47DQorCW1lbWNweShtX3BhY2tQdHIsIChjaGFyKikmbGVuZ3RoLCBzaXplb2YobGVuZ3RoKSk7DQorCW1fcGFja1B0ciArPSBzaXplb2YobGVuZ3RoKTsNCisJbWVtY3B5KG1fcGFja1B0ciwgdmFsdWUsIGxlbmd0aCk7DQorCW1fcGFja1B0ciArPSBsZW5ndGg7DQorCUFkZGVkRWxlbWVudChrU3RyaW5nKTsNCit9DQorDQorLyoqDQorICogU3RhcnQgYW4gYXJyYXkgaW4gdGhlIHBhY2tlZCBkYXNoYm9hcmQgZGF0YSBzdHJ1Y3R1cmUuDQorICogDQorICogQWZ0ZXIgY2FsbGluZyBBZGRBcnJheSgpLCBjYWxsIHRoZSBhcHByb3ByaWF0ZSBBZGQgbWV0aG9kIGZvciBlYWNoIGVsZW1lbnQgb2YgdGhlIGFycmF5Lg0KKyAqIE1ha2Ugc3VyZSB5b3UgY2FsbCB0aGUgc2FtZSBhZGQgZWFjaCB0aW1lLiAgQW4gYXJyYXkgbXVzdCBjb250YWluIGVsZW1lbnRzIG9mIHRoZSBzYW1lIHR5cGUuDQorICogWW91IGNhbiB1c2UgY2x1c3RlcnMgaW5zaWRlIG9mIGFycmF5cyB0byBtYWtlIGVhY2ggZWxlbWVudCBvZiB0aGUgYXJyYXkgY29udGFpbiBhIHN0cnVjdHVyZSBvZiB2YWx1ZXMuDQorICogWW91IGNhbiBhbHNvIG5lc3QgYXJyYXlzIGluc2lkZSBvZiBvdGhlciBhcnJheXMuDQorICogRXZlcnkgY2FsbCB0byBBZGRBcnJheSgpIG11c3QgaGF2ZSBhIG1hdGNoaW5nIGNhbGwgdG8gRmluYWxpemVBcnJheSgpLg0KKyAqLw0KK3ZvaWQgRGFzaGJvYXJkOjpBZGRBcnJheSgpDQorew0KKwlpZiAoIVZhbGlkYXRlQWRkKHNpemVvZihJTlQzMikpKSByZXR1cm47DQorCW1fY29tcGxleFR5cGVTdGFjay5wdXNoKGtBcnJheSk7DQorCW1fYXJyYXlFbGVtZW50Q291bnQucHVzaF9iYWNrKDApOw0KKwltX2FycmF5U2l6ZVB0ci5wdXNoX2JhY2soKElOVDMyKiltX3BhY2tQdHIpOw0KKwltX3BhY2tQdHIgKz0gc2l6ZW9mKElOVDMyKTsNCit9DQorDQorLyoqDQorICogSW5kaWNhdGUgdGhlIGVuZCBvZiBhbiBhcnJheSBwYWNrZWQgaW50byB0aGUgZGFzaGJvYXJkIGRhdGEgc3RydWN0dXJlLg0KKyAqIA0KKyAqIEFmdGVyIHBhY2tpbmcgZGF0YSBpbnRvIHRoZSBhcnJheSwgY2FsbCBGaW5hbGl6ZUFycmF5KCkuDQorICogRXZlcnkgY2FsbCB0byBBZGRBcnJheSgpIG11c3QgaGF2ZSBhIG1hdGNoaW5nIGNhbGwgdG8gRmluYWxpemVBcnJheSgpLg0KKyAqLw0KK3ZvaWQgRGFzaGJvYXJkOjpGaW5hbGl6ZUFycmF5KCkNCit7DQorCWlmIChtX2NvbXBsZXhUeXBlU3RhY2sudG9wKCkgIT0ga0FycmF5KQ0KKwl7DQorCQl3cGlfc2V0V1BJRXJyb3IoTWlzbWF0Y2hlZENvbXBsZXhUeXBlQ2xvc2UpOw0KKwkJcmV0dXJuOw0KKwl9DQorCW1fY29tcGxleFR5cGVTdGFjay5wb3AoKTsNCisJKihtX2FycmF5U2l6ZVB0ci5iYWNrKCkpID0gbV9hcnJheUVsZW1lbnRDb3VudC5iYWNrKCk7DQorCW1fYXJyYXlTaXplUHRyLnBvcF9iYWNrKCk7DQorCWlmIChtX2FycmF5RWxlbWVudENvdW50LmJhY2soKSAhPSAwKQ0KKwl7DQorCQltX2V4cGVjdGVkQXJyYXlFbGVtZW50VHlwZS5wb3BfYmFjaygpOw0KKwl9DQorCW1fYXJyYXlFbGVtZW50Q291bnQucG9wX2JhY2soKTsNCisJQWRkZWRFbGVtZW50KGtPdGhlcik7DQorfQ0KKw0KKy8qKg0KKyAqIFN0YXJ0IGEgY2x1c3RlciBpbiB0aGUgcGFja2VkIGRhc2hib2FyZCBkYXRhIHN0cnVjdHVyZS4NCisgKiANCisgKiBBZnRlciBjYWxsaW5nIEFkZENsdXN0ZXIoKSwgY2FsbCB0aGUgYXBwcm9wcmlhdGUgQWRkIG1ldGhvZCBmb3IgZWFjaCBlbGVtZW50IG9mIHRoZSBjbHVzdGVyLg0KKyAqIFlvdSBjYW4gdXNlIGNsdXN0ZXJzIGluc2lkZSBvZiBhcnJheXMgdG8gbWFrZSBlYWNoIGVsZW1lbnQgb2YgdGhlIGFycmF5IGNvbnRhaW4gYSBzdHJ1Y3R1cmUgb2YgdmFsdWVzLg0KKyAqIEV2ZXJ5IGNhbGwgdG8gQWRkQ2x1c3RlcigpIG11c3QgaGF2ZSBhIG1hdGNoaW5nIGNhbGwgdG8gRmluYWxpemVDbHVzdGVyKCkuDQorICovDQordm9pZCBEYXNoYm9hcmQ6OkFkZENsdXN0ZXIoKQ0KK3sNCisJbV9jb21wbGV4VHlwZVN0YWNrLnB1c2goa0NsdXN0ZXIpOw0KK30NCisNCisvKioNCisgKiBJbmRpY2F0ZSB0aGUgZW5kIG9mIGEgY2x1c3RlciBwYWNrZWQgaW50byB0aGUgZGFzaGJvYXJkIGRhdGEgc3RydWN0dXJlLg0KKyAqIA0KKyAqIEFmdGVyIHBhY2tpbmcgZGF0YSBpbnRvIHRoZSBjbHVzdGVyLCBjYWxsIEZpbmFsaXplQ2x1c3RlcigpLg0KKyAqIEV2ZXJ5IGNhbGwgdG8gQWRkQ2x1c3RlcigpIG11c3QgaGF2ZSBhIG1hdGNoaW5nIGNhbGwgdG8gRmluYWxpemVDbHVzdGVyKCkuDQorICovDQordm9pZCBEYXNoYm9hcmQ6OkZpbmFsaXplQ2x1c3RlcigpDQorew0KKwlpZiAobV9jb21wbGV4VHlwZVN0YWNrLnRvcCgpICE9IGtDbHVzdGVyKQ0KKwl7DQorCQl3cGlfc2V0V1BJRXJyb3IoTWlzbWF0Y2hlZENvbXBsZXhUeXBlQ2xvc2UpOw0KKwkJcmV0dXJuOw0KKwl9DQorCW1fY29tcGxleFR5cGVTdGFjay5wb3AoKTsNCisJQWRkZWRFbGVtZW50KGtPdGhlcik7DQorfQ0KKw0KKy8qKg0KKyAqIFByaW50IGEgc3RyaW5nIHRvIHRoZSBVc2VyRGF0YSB0ZXh0IG9uIHRoZSBEYXNoYm9hcmQuDQorICogDQorICogVGhpcyB3aWxsIGFkZCB0ZXh0IHRvIHRoZSBidWZmZXIgdG8gc2VuZCB0byB0aGUgZGFzaGJvYXJkLg0KKyAqIFlvdSBtdXN0IGNhbGwgRmluYWxpemUoKSBwZXJpb2RpY2FsbHkgdG8gYWN0dWFsbHkgc2VuZCB0aGUgYnVmZmVyIHRvIHRoZSBkYXNoYm9hcmQgaWYgeW91IGFyZSBub3QgdXNpbmcgdGhlIHBhY2tlZCBkYXNoYm9hcmQgZGF0YS4NCisgKi8NCit2b2lkIERhc2hib2FyZDo6UHJpbnRmKGNvbnN0IGNoYXIgKndyaXRlRm10LCAuLi4pDQorew0KKwl2YV9saXN0IGFyZ3M7DQorCUlOVDMyIHNpemU7DQorDQorCS8vIENoZWNrIGlmIHRoZSBidWZmZXIgaGFzIGFscmVhZHkgYmVlbiB1c2VkIGZvciBwYWNraW5nLg0KKwlpZiAobV9wYWNrUHRyICE9IG1fbG9jYWxCdWZmZXIpDQorCXsNCisJCXdwaV9zZXRXUElFcnJvcihEYXNoYm9hcmREYXRhQ29sbGlzaW9uKTsNCisJCXJldHVybjsNCisJfQ0KKwl2YV9zdGFydCAoYXJncywgd3JpdGVGbXQpOw0KKwl7DQorCQlTeW5jaHJvbml6ZWQgc3luYyhtX3ByaW50U2VtYXBob3JlKTsNCisJCXZzcHJpbnRmKG1fbG9jYWxQcmludEJ1ZmZlciArIHN0cmxlbihtX2xvY2FsUHJpbnRCdWZmZXIpLCB3cml0ZUZtdCwgYXJncyk7DQorCQlzaXplID0gc3RybGVuKG1fbG9jYWxQcmludEJ1ZmZlcik7DQorCX0NCisJaWYgKHNpemUgPiBrTWF4RGFzaGJvYXJkRGF0YVNpemUpDQorCXsNCisJCXdwaV9zZXRXUElFcnJvcihEYXNoYm9hcmREYXRhT3ZlcmZsb3cpOw0KKwl9DQorDQorCXZhX2VuZCAoYXJncyk7DQorfQ0KKw0KKy8qKg0KKyAqIEluZGljYXRlIHRoYXQgdGhlIHBhY2tpbmcgaXMgY29tcGxldGUgYW5kIGNvbW1pdCB0aGUgYnVmZmVyIHRvIHRoZSBEcml2ZXJTdGF0aW9uLg0KKyAqIA0KKyAqIFRoZSBwYWNraW5nIG9mIHRoZSBkYXNoYm9hcmQgcGFja2V0IGlzIGNvbXBsZXRlLg0KKyAqIElmIHlvdSBhcmUgbm90IHVzaW5nIHRoZSBwYWNrZWQgZGFzaGJvYXJkIGRhdGEsIHlvdSBjYW4gY2FsbCBGaW5hbGl6ZSgpIHRvIGNvbW1pdCB0aGUgUHJpbnRmKCkgYnVmZmVyIGFuZCB0aGUgZXJyb3Igc3RyaW5nIGJ1ZmZlci4NCisgKiBJbiBlZmZlY3QsIHlvdSBhcmUgcGFja2luZyBhbiBlbXB0eSBzdHJ1Y3R1cmUuDQorICogUHJlcGFyZXMgYSBwYWNrZXQgdG8gZ28gdG8gdGhlIGRhc2hib2FyZC4uLg0KKyAqIEByZXR1cm4gVGhlIHRvdGFsIHNpemUgb2YgdGhlIGRhdGEgcGFja2VkIGludG8gdGhlIHVzZXJEYXRhIGZpZWxkIG9mIHRoZSBzdGF0dXMgcGFja2V0Lg0KKyAqLw0KK0lOVDMyIERhc2hib2FyZDo6RmluYWxpemUoKQ0KK3sNCisJaWYgKCFtX2NvbXBsZXhUeXBlU3RhY2suZW1wdHkoKSkNCisJew0KKwkJd3BpX3NldFdQSUVycm9yKE1pc21hdGNoZWRDb21wbGV4VHlwZUNsb3NlKTsNCisJCXJldHVybiAwOw0KKwl9DQorDQorCXN0YXRpYyBib29sIHJlcG9ydGVkID0gZmFsc2U7DQorCWlmICghcmVwb3J0ZWQpDQorCXsNCisJCW5Vc2FnZVJlcG9ydGluZzo6cmVwb3J0KG5Vc2FnZVJlcG9ydGluZzo6a1Jlc291cmNlVHlwZV9EYXNoYm9hcmQsIDApOw0KKwkJcmVwb3J0ZWQgPSB0cnVlOw0KKwl9DQorDQorCVN5bmNocm9uaXplZCBzeW5jKG1fc3RhdHVzRGF0YVNlbWFwaG9yZSk7DQorDQorCS8vIFNlcXVlbmNlIG51bWJlcg0KKwlEcml2ZXJTdGF0aW9uOjpHZXRJbnN0YW5jZSgpLT5JbmNyZW1lbnRVcGRhdGVOdW1iZXIoKTsNCisNCisJLy8gUGFja2VkIERhc2hib2FyZCBEYXRhDQorCW1fdXNlclN0YXR1c0RhdGFTaXplID0gbV9wYWNrUHRyIC0gbV9sb2NhbEJ1ZmZlcjsNCisJbWVtY3B5KG1fdXNlclN0YXR1c0RhdGEsIG1fbG9jYWxCdWZmZXIsIG1fdXNlclN0YXR1c0RhdGFTaXplKTsNCisJbV9wYWNrUHRyID0gbV9sb2NhbEJ1ZmZlcjsNCisNCisJcmV0dXJuIG1fdXNlclN0YXR1c0RhdGFTaXplOw0KK30NCisNCisvKioNCisgKiBDYWxsZWQgYnkgdGhlIERyaXZlclN0YXRpb24gY2xhc3MgdG8gcmV0cmlldmUgYnVmZmVycywgc2l6ZXMsIGV0Yy4gZm9yIHdyaXRpbmcNCisgKiAgIHRvIHRoZSBOZXR3b3JrQ29tbXVuaWNhdGlvbiB0YXNrLg0KKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoaWxlIGhvbGRpbmcgdGhlIG1fc3RhdHVzRGF0YVNlbWFwaG9yZS4NCisgKi8NCit2b2lkIERhc2hib2FyZDo6R2V0U3RhdHVzQnVmZmVyKGNoYXIgKip1c2VyU3RhdHVzRGF0YSwgSU5UMzIqIHVzZXJTdGF0dXNEYXRhU2l6ZSkNCit7DQorCS8vIFVzZXIgcHJpbnRlZCBzdHJpbmdzDQorCWlmIChtX2xvY2FsUHJpbnRCdWZmZXJbMF0gIT0gMCkNCisJew0KKwkJLy8gU2VxdWVuY2UgbnVtYmVyDQorCQlEcml2ZXJTdGF0aW9uOjpHZXRJbnN0YW5jZSgpLT5JbmNyZW1lbnRVcGRhdGVOdW1iZXIoKTsNCisNCisJCUlOVDMyIHByaW50U2l6ZTsNCisJCVN5bmNocm9uaXplZCBzeW5jUHJpbnQobV9wcmludFNlbWFwaG9yZSk7DQorCQlwcmludFNpemUgPSBzdHJsZW4obV9sb2NhbFByaW50QnVmZmVyKTsNCisJCW1fdXNlclN0YXR1c0RhdGFTaXplID0gcHJpbnRTaXplOw0KKwkJbWVtY3B5KG1fdXNlclN0YXR1c0RhdGEsIG1fbG9jYWxQcmludEJ1ZmZlciwgbV91c2VyU3RhdHVzRGF0YVNpemUpOw0KKwkJbV9sb2NhbFByaW50QnVmZmVyWzBdID0gMDsNCisJfQ0KKw0KKwkqdXNlclN0YXR1c0RhdGEgPSBtX3VzZXJTdGF0dXNEYXRhOw0KKwkqdXNlclN0YXR1c0RhdGFTaXplID0gbV91c2VyU3RhdHVzRGF0YVNpemU7DQorfQ0KKw0KKy8qKg0KKyAqIFZhbGlkYXRlIHRoYXQgdGhlIGRhdGEgYmVpbmcgcGFja2VkIHdpbGwgZml0IGluIHRoZSBidWZmZXIuDQorICovDQorYm9vbCBEYXNoYm9hcmQ6OlZhbGlkYXRlQWRkKElOVDMyIHNpemUpDQorew0KKwlpZiAoKG1fcGFja1B0ciAtIG1fbG9jYWxCdWZmZXIpICsgc2l6ZSA+IGtNYXhEYXNoYm9hcmREYXRhU2l6ZSkNCisJew0KKwkJd3BpX3NldFdQSUVycm9yKERhc2hib2FyZERhdGFPdmVyZmxvdyk7DQorCQlyZXR1cm4gZmFsc2U7DQorCX0NCisJLy8gTWFrZSBzdXJlIHByaW50ZiBpcyBub3QgYmVpbmcgdXNlZCBhdCB0aGUgc2FtZSB0aW1lLg0KKwlpZiAobV9sb2NhbFByaW50QnVmZmVyWzBdICE9IDApDQorCXsNCisJCXdwaV9zZXRXUElFcnJvcihEYXNoYm9hcmREYXRhQ29sbGlzaW9uKTsNCisJCXJldHVybiBmYWxzZTsNCisJfQ0KKwlyZXR1cm4gdHJ1ZTsNCit9DQorDQorLyoqDQorICogQ2hlY2sgZm9yIGNvbnNpc3RlbnQgdHlwZXMgd2hlbiBhZGRpbmcgZWxlbWVudHMgdG8gYW4gYXJyYXkgYW5kIGtlZXAgdHJhY2sgb2YgdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgYXJyYXkuDQorICovDQordm9pZCBEYXNoYm9hcmQ6OkFkZGVkRWxlbWVudChUeXBlIHR5cGUpDQorew0KKwlpZihJc0FycmF5Um9vdCgpKQ0KKwl7DQorCQlpZiAobV9hcnJheUVsZW1lbnRDb3VudC5iYWNrKCkgPT0gMCkNCisJCXsNCisJCQltX2V4cGVjdGVkQXJyYXlFbGVtZW50VHlwZS5wdXNoX2JhY2sodHlwZSk7DQorCQl9DQorCQllbHNlDQorCQl7DQorCQkJaWYgKHR5cGUgIT0gbV9leHBlY3RlZEFycmF5RWxlbWVudFR5cGUuYmFjaygpKQ0KKwkJCXsNCisJCQkJd3BpX3NldFdQSUVycm9yKEluY29uc2lzdGVudEFycmF5VmFsdWVBZGRlZCk7DQorCQkJfQ0KKwkJfQ0KKwkJbV9hcnJheUVsZW1lbnRDb3VudC5iYWNrKCkgPSBtX2FycmF5RWxlbWVudENvdW50LmJhY2soKSArIDE7DQorCX0NCit9DQorDQorLyoqDQorICogSWYgdGhlIHRvcCBvZiB0aGUgdHlwZSBzdGFjayBhbiBhcnJheT8NCisgKi8NCitib29sIERhc2hib2FyZDo6SXNBcnJheVJvb3QoKQ0KK3sNCisJcmV0dXJuICFtX2NvbXBsZXhUeXBlU3RhY2suZW1wdHkoKSAmJiBtX2NvbXBsZXhUeXBlU3RhY2sudG9wKCkgPT0ga0FycmF5Ow0KK30NCisNCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9EYXNoYm9hcmQuaCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0Rhc2hib2FyZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4NTU3OWUKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9EYXNoYm9hcmQuaApAQCAtMCwwICsxLDc1IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy8qIENvcHlyaWdodCAoYykgRklSU1QgMjAwOC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4JCQkJCQkJICAqLw0KKy8qIE9wZW4gU291cmNlIFNvZnR3YXJlIC0gbWF5IGJlIG1vZGlmaWVkIGFuZCBzaGFyZWQgYnkgRlJDIHRlYW1zLiBUaGUgY29kZSAgICovDQorLyogbXVzdCBiZSBhY2NvbXBhbmllZCBieSB0aGUgRklSU1QgQlNEIGxpY2Vuc2UgZmlsZSBpbiAkKFdJTkRfQkFTRSkvV1BJTGliLiAgKi8NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKyNpZm5kZWYgX19EQVNIQk9BUkRfSF9fDQorI2RlZmluZSBfX0RBU0hCT0FSRF9IX18NCisNCisjaW5jbHVkZSAiRGFzaGJvYXJkQmFzZS5oIg0KKyNpbmNsdWRlICJOZXR3b3JrQ29tbXVuaWNhdGlvbi9GUkNDb21tLmgiDQorI2luY2x1ZGUgPHN0YWNrPg0KKyNpbmNsdWRlIDx2ZWN0b3I+DQorI2luY2x1ZGUgPHZ4V29ya3MuaD4NCisNCisvKioNCisgKiBQYWNrIGRhdGEgaW50byB0aGUgInVzZXIgZGF0YSIgZmllbGQgdGhhdCBnZXRzIHNlbnQgdG8gdGhlIGRhc2hib2FyZCBsYXB0b3ANCisgKiB2aWEgdGhlIGRyaXZlciBzdGF0aW9uLg0KKyAqLw0KK2NsYXNzIERhc2hib2FyZCA6IHB1YmxpYyBEYXNoYm9hcmRCYXNlDQorew0KK3B1YmxpYzoNCisJZXhwbGljaXQgRGFzaGJvYXJkKFNFTV9JRCBzdGF0dXNEYXRhU2VtYXBob3JlKTsNCisJdmlydHVhbCB+RGFzaGJvYXJkKCk7DQorDQorCWVudW0gVHlwZSB7a0k4LCBrSTE2LCBrSTMyLCBrVTgsIGtVMTYsIGtVMzIsIGtGbG9hdCwga0RvdWJsZSwga0Jvb2xlYW4sIGtTdHJpbmcsIGtPdGhlcn07DQorCWVudW0gQ29tcGxleFR5cGUge2tBcnJheSwga0NsdXN0ZXJ9Ow0KKw0KKwl2b2lkIEFkZEk4KElOVDggdmFsdWUpOw0KKwl2b2lkIEFkZEkxNihJTlQxNiB2YWx1ZSk7DQorCXZvaWQgQWRkSTMyKElOVDMyIHZhbHVlKTsNCisJdm9pZCBBZGRVOChVSU5UOCB2YWx1ZSk7DQorCXZvaWQgQWRkVTE2KFVJTlQxNiB2YWx1ZSk7DQorCXZvaWQgQWRkVTMyKFVJTlQzMiB2YWx1ZSk7DQorCXZvaWQgQWRkRmxvYXQoZmxvYXQgdmFsdWUpOw0KKwl2b2lkIEFkZERvdWJsZShkb3VibGUgdmFsdWUpOw0KKwl2b2lkIEFkZEJvb2xlYW4oYm9vbCB2YWx1ZSk7DQorCXZvaWQgQWRkU3RyaW5nKGNoYXIqIHZhbHVlKTsNCisJdm9pZCBBZGRTdHJpbmcoY2hhciogdmFsdWUsIElOVDMyIGxlbmd0aCk7DQorDQorCXZvaWQgQWRkQXJyYXkoKTsNCisJdm9pZCBGaW5hbGl6ZUFycmF5KCk7DQorCXZvaWQgQWRkQ2x1c3RlcigpOw0KKwl2b2lkIEZpbmFsaXplQ2x1c3RlcigpOw0KKw0KKwl2b2lkIFByaW50Zihjb25zdCBjaGFyICp3cml0ZUZtdCwgLi4uKTsNCisNCisJSU5UMzIgRmluYWxpemUoKTsNCisJdm9pZCBHZXRTdGF0dXNCdWZmZXIoY2hhcioqIHVzZXJTdGF0dXNEYXRhLCBJTlQzMiogdXNlclN0YXR1c0RhdGFTaXplKTsNCisJdm9pZCBGbHVzaCgpIHt9DQorcHJpdmF0ZToNCisJc3RhdGljIGNvbnN0IElOVDMyIGtNYXhEYXNoYm9hcmREYXRhU2l6ZSA9IFVTRVJfU1RBVFVTX0RBVEFfU0laRSAtIHNpemVvZihVSU5UMzIpICogMyAtIHNpemVvZihVSU5UOCk7IC8vIDEzIGJ5dGVzIG5lZWRlZCBmb3IgMyBzaXplIHBhcmFtZXRlcnMgYW5kIHRoZSBzZXF1ZW5jZSBudW1iZXINCisNCisJLy8gVXNhZ2UgR3VpZGVsaW5lcy4uLg0KKwlESVNBTExPV19DT1BZX0FORF9BU1NJR04oRGFzaGJvYXJkKTsNCisNCisJYm9vbCBWYWxpZGF0ZUFkZChJTlQzMiBzaXplKTsNCisJdm9pZCBBZGRlZEVsZW1lbnQoVHlwZSB0eXBlKTsNCisJYm9vbCBJc0FycmF5Um9vdCgpOw0KKw0KKwljaGFyICptX3VzZXJTdGF0dXNEYXRhOw0KKwlJTlQzMiBtX3VzZXJTdGF0dXNEYXRhU2l6ZTsNCisJY2hhciAqbV9sb2NhbEJ1ZmZlcjsNCisJY2hhciAqbV9sb2NhbFByaW50QnVmZmVyOw0KKwljaGFyICptX3BhY2tQdHI7DQorCXN0ZDo6dmVjdG9yPFR5cGU+IG1fZXhwZWN0ZWRBcnJheUVsZW1lbnRUeXBlOw0KKwlzdGQ6OnZlY3RvcjxJTlQzMj4gbV9hcnJheUVsZW1lbnRDb3VudDsNCisJc3RkOjp2ZWN0b3I8SU5UMzIqPiBtX2FycmF5U2l6ZVB0cjsNCisJc3RkOjpzdGFjazxDb21wbGV4VHlwZT4gbV9jb21wbGV4VHlwZVN0YWNrOw0KKwlTRU1fSUQgbV9wcmludFNlbWFwaG9yZTsNCisJU0VNX0lEIG1fc3RhdHVzRGF0YVNlbWFwaG9yZTsNCit9Ow0KKw0KKyNlbmRpZg0KKw0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0Rhc2hib2FyZEJhc2UuaCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0Rhc2hib2FyZEJhc2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTcwY2NkCi0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvRGFzaGJvYXJkQmFzZS5oCkBAIC0wLDAgKzEsMjQgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorLyogQ29weXJpZ2h0IChjKSBGSVJTVCAyMDA4LiBBbGwgUmlnaHRzIFJlc2VydmVkLgkJCQkJCQkgICovDQorLyogT3BlbiBTb3VyY2UgU29mdHdhcmUgLSBtYXkgYmUgbW9kaWZpZWQgYW5kIHNoYXJlZCBieSBGUkMgdGVhbXMuIFRoZSBjb2RlICAgKi8NCisvKiBtdXN0IGJlIGFjY29tcGFuaWVkIGJ5IHRoZSBGSVJTVCBCU0QgbGljZW5zZSBmaWxlIGluICQoV0lORF9CQVNFKS9XUElMaWIuICAqLw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorI2lmbmRlZiBfX0RBU0hCT0FSREJBU0VfSF9fDQorI2RlZmluZSBfX0RBU0hCT0FSREJBU0VfSF9fDQorDQorI2luY2x1ZGUgPHZ4V29ya3MuaD4NCisjaW5jbHVkZSAiRXJyb3JCYXNlLmgiDQorDQorY2xhc3MgRGFzaGJvYXJkQmFzZSA6IHB1YmxpYyBFcnJvckJhc2Ugew0KK3B1YmxpYzoNCisJdmlydHVhbCB2b2lkIEdldFN0YXR1c0J1ZmZlcihjaGFyKiogdXNlclN0YXR1c0RhdGEsIElOVDMyKiB1c2VyU3RhdHVzRGF0YVNpemUpID0gMDsNCisJdmlydHVhbCB2b2lkIEZsdXNoKCkgPSAwOw0KKwl2aXJ0dWFsIH5EYXNoYm9hcmRCYXNlKCkge30NCitwcm90ZWN0ZWQ6DQorCURhc2hib2FyZEJhc2UoKSB7fQ0KK3ByaXZhdGU6DQorCURJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihEYXNoYm9hcmRCYXNlKTsNCit9Ow0KKw0KKyNlbmRpZg0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0RpZ2l0YWxJbnB1dC5jcHAgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9EaWdpdGFsSW5wdXQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1YzU1NjYKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9EaWdpdGFsSW5wdXQuY3BwCkBAIC0wLDAgKzEsMjI3IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy8qIENvcHlyaWdodCAoYykgRklSU1QgMjAwOC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4JCQkJCQkJICAqLw0KKy8qIE9wZW4gU291cmNlIFNvZnR3YXJlIC0gbWF5IGJlIG1vZGlmaWVkIGFuZCBzaGFyZWQgYnkgRlJDIHRlYW1zLiBUaGUgY29kZSAgICovDQorLyogbXVzdCBiZSBhY2NvbXBhbmllZCBieSB0aGUgRklSU1QgQlNEIGxpY2Vuc2UgZmlsZSBpbiAkKFdJTkRfQkFTRSkvV1BJTGliLiAgKi8NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKyNpbmNsdWRlICJEaWdpdGFsSW5wdXQuaCINCisjaW5jbHVkZSAiRGlnaXRhbE1vZHVsZS5oIg0KKyNpbmNsdWRlICJOZXR3b3JrQ29tbXVuaWNhdGlvbi9Vc2FnZVJlcG9ydGluZy5oIg0KKyNpbmNsdWRlICJSZXNvdXJjZS5oIg0KKyNpbmNsdWRlICJXUElFcnJvcnMuaCINCisNCisvLyBUT0RPOiBUaGlzIGlzIG5vdCBhIGdvb2QgcGxhY2UgZm9yIHRoaXMuLi4NCitSZXNvdXJjZSAqaW50ZXJydXB0c1Jlc291cmNlID0gTlVMTDsNCisNCisvKioNCisgKiBDcmVhdGUgYW4gaW5zdGFuY2Ugb2YgYSBEaWdpdGFsSW5wdXQuDQorICogQ3JlYXRlcyBhIGRpZ2l0YWwgaW5wdXQgZ2l2ZW4gYSBzbG90IGFuZCBjaGFubmVsLiBDb21tb24gY3JlYXRpb24gcm91dGluZQ0KKyAqIGZvciBhbGwgY29uc3RydWN0b3JzLg0KKyAqLw0KK3ZvaWQgRGlnaXRhbElucHV0OjpJbml0RGlnaXRhbElucHV0KFVJTlQ4IG1vZHVsZU51bWJlciwgVUlOVDMyIGNoYW5uZWwpDQorew0KKwljaGFyIGJ1Zls2NF07DQorCVJlc291cmNlOjpDcmVhdGVSZXNvdXJjZU9iamVjdCgmaW50ZXJydXB0c1Jlc291cmNlLCB0SW50ZXJydXB0OjprTnVtU3lzdGVtcyk7DQorCWlmICghQ2hlY2tEaWdpdGFsTW9kdWxlKG1vZHVsZU51bWJlcikpDQorCXsNCisJCXNucHJpbnRmKGJ1ZiwgNjQsICJEaWdpdGFsIE1vZHVsZSAlZCIsIG1vZHVsZU51bWJlcik7DQorCQl3cGlfc2V0V1BJRXJyb3JXaXRoQ29udGV4dChNb2R1bGVJbmRleE91dE9mUmFuZ2UsIGJ1Zik7DQorCQlyZXR1cm47DQorCX0NCisJaWYgKCFDaGVja0RpZ2l0YWxDaGFubmVsKGNoYW5uZWwpKQ0KKwl7DQorCQlzbnByaW50ZihidWYsIDY0LCAiRGlnaXRhbCBDaGFubmVsICVkIiwgY2hhbm5lbCk7DQorCQl3cGlfc2V0V1BJRXJyb3JXaXRoQ29udGV4dChDaGFubmVsSW5kZXhPdXRPZlJhbmdlLCBidWYpOw0KKwkJcmV0dXJuOw0KKwl9DQorCW1fY2hhbm5lbCA9IGNoYW5uZWw7DQorCW1fbW9kdWxlID0gRGlnaXRhbE1vZHVsZTo6R2V0SW5zdGFuY2UobW9kdWxlTnVtYmVyKTsNCisJbV9tb2R1bGUtPkFsbG9jYXRlRElPKGNoYW5uZWwsIHRydWUpOw0KKw0KKwluVXNhZ2VSZXBvcnRpbmc6OnJlcG9ydChuVXNhZ2VSZXBvcnRpbmc6OmtSZXNvdXJjZVR5cGVfRGlnaXRhbElucHV0LCBjaGFubmVsLCBtb2R1bGVOdW1iZXIgLSAxKTsNCit9DQorDQorLyoqDQorICogQ3JlYXRlIGFuIGluc3RhbmNlIG9mIGEgRGlnaXRhbCBJbnB1dCBjbGFzcy4NCisgKiBDcmVhdGVzIGEgZGlnaXRhbCBpbnB1dCBnaXZlbiBhIGNoYW5uZWwgYW5kIHVzZXMgdGhlIGRlZmF1bHQgbW9kdWxlLg0KKyAqDQorICogQHBhcmFtIGNoYW5uZWwgVGhlIGRpZ2l0YWwgY2hhbm5lbCAoMS4uMTQpLg0KKyAqLw0KK0RpZ2l0YWxJbnB1dDo6RGlnaXRhbElucHV0KFVJTlQzMiBjaGFubmVsKQ0KK3sNCisJSW5pdERpZ2l0YWxJbnB1dChHZXREZWZhdWx0RGlnaXRhbE1vZHVsZSgpLCBjaGFubmVsKTsNCit9DQorDQorLyoqDQorICogQ3JlYXRlIGFuIGluc3RhbmNlIG9mIGEgRGlnaXRhbCBJbnB1dCBjbGFzcy4NCisgKiBDcmVhdGVzIGEgZGlnaXRhbCBpbnB1dCBnaXZlbiBhbiBjaGFubmVsIGFuZCBtb2R1bGUuDQorICoNCisgKiBAcGFyYW0gbW9kdWxlTnVtYmVyIFRoZSBkaWdpdGFsIG1vZHVsZSAoMSBvciAyKS4NCisgKiBAcGFyYW0gY2hhbm5lbCBUaGUgZGlnaXRhbCBjaGFubmVsICgxLi4xNCkuDQorICovDQorRGlnaXRhbElucHV0OjpEaWdpdGFsSW5wdXQoVUlOVDggbW9kdWxlTnVtYmVyLCBVSU5UMzIgY2hhbm5lbCkNCit7DQorCUluaXREaWdpdGFsSW5wdXQobW9kdWxlTnVtYmVyLCBjaGFubmVsKTsNCit9DQorDQorLyoqDQorICogRnJlZSByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBEaWdpdGFsIElucHV0IGNsYXNzLg0KKyAqLw0KK0RpZ2l0YWxJbnB1dDo6fkRpZ2l0YWxJbnB1dCgpDQorew0KKwlpZiAoU3RhdHVzSXNGYXRhbCgpKSByZXR1cm47DQorCWlmIChtX21hbmFnZXIgIT0gTlVMTCkNCisJew0KKwkJZGVsZXRlIG1fbWFuYWdlcjsNCisJCWRlbGV0ZSBtX2ludGVycnVwdDsNCisJCWludGVycnVwdHNSZXNvdXJjZS0+RnJlZShtX2ludGVycnVwdEluZGV4KTsNCisJfQ0KKwltX21vZHVsZS0+RnJlZURJTyhtX2NoYW5uZWwpOw0KK30NCisNCisvKg0KKyAqIEdldCB0aGUgdmFsdWUgZnJvbSBhIGRpZ2l0YWwgaW5wdXQgY2hhbm5lbC4NCisgKiBSZXRyaWV2ZSB0aGUgdmFsdWUgb2YgYSBzaW5nbGUgZGlnaXRhbCBpbnB1dCBjaGFubmVsIGZyb20gdGhlIEZQR0EuDQorICovDQorVUlOVDMyIERpZ2l0YWxJbnB1dDo6R2V0KCkNCit7DQorCWlmIChTdGF0dXNJc0ZhdGFsKCkpIHJldHVybiAwOw0KKwlyZXR1cm4gbV9tb2R1bGUtPkdldERJTyhtX2NoYW5uZWwpOw0KK30NCisNCisvKioNCisgKiBAcmV0dXJuIFRoZSBHUElPIGNoYW5uZWwgbnVtYmVyIHRoYXQgdGhpcyBvYmplY3QgcmVwcmVzZW50cy4NCisgKi8NCitVSU5UMzIgRGlnaXRhbElucHV0OjpHZXRDaGFubmVsKCkNCit7DQorCXJldHVybiBtX2NoYW5uZWw7DQorfQ0KKw0KKy8qKg0KKyAqIEByZXR1cm4gVGhlIHZhbHVlIHRvIGJlIHdyaXR0ZW4gdG8gdGhlIGNoYW5uZWwgZmllbGQgb2YgYSByb3V0aW5nIG11eC4NCisgKi8NCitVSU5UMzIgRGlnaXRhbElucHV0OjpHZXRDaGFubmVsRm9yUm91dGluZygpDQorew0KKwlyZXR1cm4gRGlnaXRhbE1vZHVsZTo6UmVtYXBEaWdpdGFsQ2hhbm5lbChHZXRDaGFubmVsKCkgLSAxKTsNCit9DQorDQorLyoqDQorICogQHJldHVybiBUaGUgdmFsdWUgdG8gYmUgd3JpdHRlbiB0byB0aGUgbW9kdWxlIGZpZWxkIG9mIGEgcm91dGluZyBtdXguDQorICovDQorVUlOVDMyIERpZ2l0YWxJbnB1dDo6R2V0TW9kdWxlRm9yUm91dGluZygpDQorew0KKwlpZiAoU3RhdHVzSXNGYXRhbCgpKSByZXR1cm4gMDsNCisJcmV0dXJuIG1fbW9kdWxlLT5HZXROdW1iZXIoKSAtIDE7DQorfQ0KKw0KKy8qKg0KKyAqIEByZXR1cm4gVGhlIHZhbHVlIHRvIGJlIHdyaXR0ZW4gdG8gdGhlIGFuYWxvZyB0cmlnZ2VyIGZpZWxkIG9mIGEgcm91dGluZyBtdXguDQorICovDQorYm9vbCBEaWdpdGFsSW5wdXQ6OkdldEFuYWxvZ1RyaWdnZXJGb3JSb3V0aW5nKCkNCit7DQorCXJldHVybiBmYWxzZTsNCit9DQorDQorLyoqDQorICogUmVxdWVzdCBpbnRlcnJ1cHRzIGFzeW5jaHJvbm91c2x5IG9uIHRoaXMgZGlnaXRhbCBpbnB1dC4NCisgKiBAcGFyYW0gaGFuZGxlciBUaGUgYWRkcmVzcyBvZiB0aGUgaW50ZXJydXB0IGhhbmRsZXIgZnVuY3Rpb24gb2YgdHlwZSB0SW50ZXJydXB0SGFuZGxlciB0aGF0DQorICogd2lsbCBiZSBjYWxsZWQgd2hlbmV2ZXIgdGhlcmUgaXMgYW4gaW50ZXJydXB0IG9uIHRoZSBkaWdpdGlhbCBpbnB1dCBwb3J0Lg0KKyAqIFJlcXVlc3QgaW50ZXJydXB0cyBpbiBzeW5jaHJvbnVzIG1vZGUgd2hlcmUgdGhlIHVzZXIgcHJvZ3JhbSBpbnRlcnJ1cHQgaGFuZGxlciB3aWxsIGJlDQorICogY2FsbGVkIHdoZW4gYW4gaW50ZXJydXB0IG9jY3Vycy4NCisgKiBUaGUgZGVmYXVsdCBpcyBpbnRlcnJ1cHQgb24gcmlzaW5nIGVkZ2VzIG9ubHkuDQorICovDQordm9pZCBEaWdpdGFsSW5wdXQ6OlJlcXVlc3RJbnRlcnJ1cHRzKHRJbnRlcnJ1cHRIYW5kbGVyIGhhbmRsZXIsIHZvaWQgKnBhcmFtKQ0KK3sNCisJaWYgKFN0YXR1c0lzRmF0YWwoKSkgcmV0dXJuOw0KKwlVSU5UMzIgaW5kZXggPSBpbnRlcnJ1cHRzUmVzb3VyY2UtPkFsbG9jYXRlKCJBc3luYyBJbnRlcnJ1cHQiKTsNCisJaWYgKGluZGV4ID09IH4wdWwpDQorCXsNCisJCUNsb25lRXJyb3IoaW50ZXJydXB0c1Jlc291cmNlKTsNCisJCXJldHVybjsNCisJfQ0KKwltX2ludGVycnVwdEluZGV4ID0gaW5kZXg7DQorDQorCSAvLyBDcmVhdGVzIGEgbWFuYWdlciB0b28NCisJQWxsb2NhdGVJbnRlcnJ1cHRzKGZhbHNlKTsNCisNCisJdFJpb1N0YXR1c0NvZGUgbG9jYWxTdGF0dXMgPSBOaUZwZ2FfU3RhdHVzX1N1Y2Nlc3M7DQorCW1faW50ZXJydXB0LT53cml0ZUNvbmZpZ19XYWl0Rm9yQWNrKGZhbHNlLCAmbG9jYWxTdGF0dXMpOw0KKwltX2ludGVycnVwdC0+d3JpdGVDb25maWdfU291cmNlX0FuYWxvZ1RyaWdnZXIoR2V0QW5hbG9nVHJpZ2dlckZvclJvdXRpbmcoKSwgJmxvY2FsU3RhdHVzKTsNCisJbV9pbnRlcnJ1cHQtPndyaXRlQ29uZmlnX1NvdXJjZV9DaGFubmVsKEdldENoYW5uZWxGb3JSb3V0aW5nKCksICZsb2NhbFN0YXR1cyk7DQorCW1faW50ZXJydXB0LT53cml0ZUNvbmZpZ19Tb3VyY2VfTW9kdWxlKEdldE1vZHVsZUZvclJvdXRpbmcoKSwgJmxvY2FsU3RhdHVzKTsNCisJU2V0VXBTb3VyY2VFZGdlKHRydWUsIGZhbHNlKTsNCisNCisJbV9tYW5hZ2VyLT5yZWdpc3RlckhhbmRsZXIoaGFuZGxlciwgcGFyYW0sICZsb2NhbFN0YXR1cyk7DQorCXdwaV9zZXRFcnJvcihsb2NhbFN0YXR1cyk7DQorfQ0KKw0KKy8qKg0KKyAqIFJlcXVlc3QgaW50ZXJydXB0cyBzeW5jaHJvbm91c2x5IG9uIHRoaXMgZGlnaXRhbCBpbnB1dC4NCisgKiBSZXF1ZXN0IGludGVycnVwdHMgaW4gc3luY2hyb251cyBtb2RlIHdoZXJlIHRoZSB1c2VyIHByb2dyYW0gd2lsbCBoYXZlIHRvIGV4cGxpY2l0bHkNCisgKiB3YWl0IGZvciB0aGUgaW50ZXJydXB0IHRvIG9jY3VyLg0KKyAqIFRoZSBkZWZhdWx0IGlzIGludGVycnVwdCBvbiByaXNpbmcgZWRnZXMgb25seS4NCisgKi8NCit2b2lkIERpZ2l0YWxJbnB1dDo6UmVxdWVzdEludGVycnVwdHMoKQ0KK3sNCisJaWYgKFN0YXR1c0lzRmF0YWwoKSkgcmV0dXJuOw0KKwlVSU5UMzIgaW5kZXggPSBpbnRlcnJ1cHRzUmVzb3VyY2UtPkFsbG9jYXRlKCJTeW5jIEludGVycnVwdCIpOw0KKwlpZiAoaW5kZXggPT0gfjB1bCkNCisJew0KKwkJQ2xvbmVFcnJvcihpbnRlcnJ1cHRzUmVzb3VyY2UpOw0KKwkJcmV0dXJuOw0KKwl9DQorCW1faW50ZXJydXB0SW5kZXggPSBpbmRleDsNCisNCisJQWxsb2NhdGVJbnRlcnJ1cHRzKHRydWUpOw0KKw0KKwl0UmlvU3RhdHVzQ29kZSBsb2NhbFN0YXR1cyA9IE5pRnBnYV9TdGF0dXNfU3VjY2VzczsNCisJbV9pbnRlcnJ1cHQtPndyaXRlQ29uZmlnX1NvdXJjZV9BbmFsb2dUcmlnZ2VyKEdldEFuYWxvZ1RyaWdnZXJGb3JSb3V0aW5nKCksICZsb2NhbFN0YXR1cyk7DQorCW1faW50ZXJydXB0LT53cml0ZUNvbmZpZ19Tb3VyY2VfQ2hhbm5lbChHZXRDaGFubmVsRm9yUm91dGluZygpLCAmbG9jYWxTdGF0dXMpOw0KKwltX2ludGVycnVwdC0+d3JpdGVDb25maWdfU291cmNlX01vZHVsZShHZXRNb2R1bGVGb3JSb3V0aW5nKCksICZsb2NhbFN0YXR1cyk7DQorCVNldFVwU291cmNlRWRnZSh0cnVlLCBmYWxzZSk7DQorCXdwaV9zZXRFcnJvcihsb2NhbFN0YXR1cyk7DQorfQ0KKw0KK3ZvaWQgRGlnaXRhbElucHV0OjpTZXRVcFNvdXJjZUVkZ2UoYm9vbCByaXNpbmdFZGdlLCBib29sIGZhbGxpbmdFZGdlKQ0KK3sNCisJaWYgKFN0YXR1c0lzRmF0YWwoKSkgcmV0dXJuOw0KKwlpZiAobV9pbnRlcnJ1cHQgPT0gTlVMTCkNCisJew0KKwkJd3BpX3NldFdQSUVycm9yV2l0aENvbnRleHQoTnVsbFBhcmFtZXRlciwgIllvdSBtdXN0IGNhbGwgUmVxdWVzdEludGVycnVwdHMgYmVmb3JlIFNldFVwU291cmNlRWRnZSIpOw0KKwkJcmV0dXJuOw0KKwl9DQorCXRSaW9TdGF0dXNDb2RlIGxvY2FsU3RhdHVzID0gTmlGcGdhX1N0YXR1c19TdWNjZXNzOw0KKwlpZiAobV9pbnRlcnJ1cHQgIT0gTlVMTCkNCisJew0KKwkJbV9pbnRlcnJ1cHQtPndyaXRlQ29uZmlnX1Jpc2luZ0VkZ2UocmlzaW5nRWRnZSwgJmxvY2FsU3RhdHVzKTsNCisJCW1faW50ZXJydXB0LT53cml0ZUNvbmZpZ19GYWxsaW5nRWRnZShmYWxsaW5nRWRnZSwgJmxvY2FsU3RhdHVzKTsNCisJfQ0KKwl3cGlfc2V0RXJyb3IobG9jYWxTdGF0dXMpOw0KK30NCisNCit2b2lkIERpZ2l0YWxJbnB1dDo6VXBkYXRlVGFibGUoKSB7DQorCWlmIChtX3RhYmxlICE9IE5VTEwpIHsNCisJCW1fdGFibGUtPlB1dEJvb2xlYW4oIlZhbHVlIiwgR2V0KCkpOw0KKwl9DQorfQ0KKw0KK3ZvaWQgRGlnaXRhbElucHV0OjpTdGFydExpdmVXaW5kb3dNb2RlKCkgew0KKwkNCit9DQorDQordm9pZCBEaWdpdGFsSW5wdXQ6OlN0b3BMaXZlV2luZG93TW9kZSgpIHsNCisJDQorfQ0KKw0KK3N0ZDo6c3RyaW5nIERpZ2l0YWxJbnB1dDo6R2V0U21hcnREYXNoYm9hcmRUeXBlKCkgew0KKwlyZXR1cm4gIkRpZ2l0YWxJbnB1dCI7DQorfQ0KKw0KK3ZvaWQgRGlnaXRhbElucHV0OjpJbml0VGFibGUoSVRhYmxlICpzdWJUYWJsZSkgew0KKwltX3RhYmxlID0gc3ViVGFibGU7DQorCVVwZGF0ZVRhYmxlKCk7DQorfQ0KKw0KK0lUYWJsZSAqIERpZ2l0YWxJbnB1dDo6R2V0VGFibGUoKSB7DQorCXJldHVybiBtX3RhYmxlOw0KK30NCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9EaWdpdGFsSW5wdXQuaCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0RpZ2l0YWxJbnB1dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmM2YyNWYKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9EaWdpdGFsSW5wdXQuaApAQCAtMCwwICsxLDU3IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy8qIENvcHlyaWdodCAoYykgRklSU1QgMjAwOC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4JCQkJCQkJICAqLw0KKy8qIE9wZW4gU291cmNlIFNvZnR3YXJlIC0gbWF5IGJlIG1vZGlmaWVkIGFuZCBzaGFyZWQgYnkgRlJDIHRlYW1zLiBUaGUgY29kZSAgICovDQorLyogbXVzdCBiZSBhY2NvbXBhbmllZCBieSB0aGUgRklSU1QgQlNEIGxpY2Vuc2UgZmlsZSBpbiAkKFdJTkRfQkFTRSkvV1BJTGliLiAgKi8NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKyNpZm5kZWYgRElHSVRBTF9JTlBVVF9IXw0KKyNkZWZpbmUgRElHSVRBTF9JTlBVVF9IXw0KKw0KK2NsYXNzIERpZ2l0YWxNb2R1bGU7DQorDQorI2luY2x1ZGUgIkRpZ2l0YWxTb3VyY2UuaCINCisjaW5jbHVkZSAiTGl2ZVdpbmRvdy9MaXZlV2luZG93U2VuZGFibGUuaCINCisNCisvKioNCisgKiBDbGFzcyB0byByZWFkIGEgZGlnaXRhbCBpbnB1dC4NCisgKiBUaGlzIGNsYXNzIHdpbGwgcmVhZCBkaWdpdGFsIGlucHV0cyBhbmQgcmV0dXJuIHRoZSBjdXJyZW50IHZhbHVlIG9uIHRoZSBjaGFubmVsLiBPdGhlciBkZXZpY2VzDQorICogc3VjaCBhcyBlbmNvZGVycywgZ2VhciB0b290aCBzZW5zb3JzLCBldGMuIHRoYXQgYXJlIGltcGxlbWVudGVkIGVsc2V3aGVyZSB3aWxsIGF1dG9tYXRpY2FsbHkNCisgKiBhbGxvY2F0ZSBkaWdpdGFsIGlucHV0cyBhbmQgb3V0cHV0cyBhcyByZXF1aXJlZC4gVGhpcyBjbGFzcyBpcyBvbmx5IGZvciBkZXZpY2VzIGxpa2Ugc3dpdGNoZXMNCisgKiBldGMuIHRoYXQgYXJlbid0IGltcGxlbWVudGVkIGFueXdoZXJlIGVsc2UuDQorICovDQorY2xhc3MgRGlnaXRhbElucHV0IDogcHVibGljIERpZ2l0YWxTb3VyY2UsIHB1YmxpYyBMaXZlV2luZG93U2VuZGFibGUgew0KK3B1YmxpYzoNCisJZXhwbGljaXQgRGlnaXRhbElucHV0KFVJTlQzMiBjaGFubmVsKTsNCisJRGlnaXRhbElucHV0KFVJTlQ4IG1vZHVsZU51bWJlciwgVUlOVDMyIGNoYW5uZWwpOw0KKwl2aXJ0dWFsIH5EaWdpdGFsSW5wdXQoKTsNCisJVUlOVDMyIEdldCgpOw0KKwlVSU5UMzIgR2V0Q2hhbm5lbCgpOw0KKw0KKwkvLyBEaWdpdGFsIFNvdXJjZSBJbnRlcmZhY2UNCisJdmlydHVhbCBVSU5UMzIgR2V0Q2hhbm5lbEZvclJvdXRpbmcoKTsNCisJdmlydHVhbCBVSU5UMzIgR2V0TW9kdWxlRm9yUm91dGluZygpOw0KKwl2aXJ0dWFsIGJvb2wgR2V0QW5hbG9nVHJpZ2dlckZvclJvdXRpbmcoKTsNCisJDQorCS8vIEludGVycnVwdGFibGUgSW50ZXJmYWNlDQorCXZpcnR1YWwgdm9pZCBSZXF1ZXN0SW50ZXJydXB0cyh0SW50ZXJydXB0SGFuZGxlciBoYW5kbGVyLCB2b2lkICpwYXJhbT1OVUxMKTsgLy8vPCBBc3luY2hyb251cyBoYW5kbGVyIHZlcnNpb24uDQorCXZpcnR1YWwgdm9pZCBSZXF1ZXN0SW50ZXJydXB0cygpOwkJLy8vPCBTeW5jaHJvbnVzIFdhaXQgdmVyc2lvbi4NCisJdm9pZCBTZXRVcFNvdXJjZUVkZ2UoYm9vbCByaXNpbmdFZGdlLCBib29sIGZhbGxpbmdFZGdlKTsNCisNCisJdm9pZCBVcGRhdGVUYWJsZSgpOw0KKwl2b2lkIFN0YXJ0TGl2ZVdpbmRvd01vZGUoKTsNCisJdm9pZCBTdG9wTGl2ZVdpbmRvd01vZGUoKTsNCisJc3RkOjpzdHJpbmcgR2V0U21hcnREYXNoYm9hcmRUeXBlKCk7DQorCXZvaWQgSW5pdFRhYmxlKElUYWJsZSAqc3ViVGFibGUpOw0KKwlJVGFibGUgKiBHZXRUYWJsZSgpOw0KKw0KK3ByaXZhdGU6DQorCXZvaWQgSW5pdERpZ2l0YWxJbnB1dChVSU5UOCBtb2R1bGVOdW1iZXIsIFVJTlQzMiBjaGFubmVsKTsNCisJVUlOVDMyIG1fY2hhbm5lbDsNCisJRGlnaXRhbE1vZHVsZSAqbV9tb2R1bGU7DQorCWJvb2wgbV9sYXN0VmFsdWU7DQorCQ0KKwlJVGFibGUgKm1fdGFibGU7DQorfTsNCisNCisjZW5kaWYNCisNCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9EaWdpdGFsTW9kdWxlLmNwcCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0RpZ2l0YWxNb2R1bGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmMGJmODAKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9EaWdpdGFsTW9kdWxlLmNwcApAQCAtMCwwICsxLDUzMCBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBDb3B5cmlnaHQgKGMpIEZJUlNUIDIwMDguIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCQkJCQkJCSAgKi8NCisvKiBPcGVuIFNvdXJjZSBTb2Z0d2FyZSAtIG1heSBiZSBtb2RpZmllZCBhbmQgc2hhcmVkIGJ5IEZSQyB0ZWFtcy4gVGhlIGNvZGUgICAqLw0KKy8qIG11c3QgYmUgYWNjb21wYW5pZWQgYnkgdGhlIEZJUlNUIEJTRCBsaWNlbnNlIGZpbGUgaW4gJChXSU5EX0JBU0UpL1dQSUxpYi4gICovDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisjaW5jbHVkZSAiRGlnaXRhbE1vZHVsZS5oIg0KKyNpbmNsdWRlICJJMkMuaCINCisjaW5jbHVkZSAiUFdNLmgiDQorI2luY2x1ZGUgIlJlc291cmNlLmgiDQorI2luY2x1ZGUgIlN5bmNocm9uaXplZC5oIg0KKyNpbmNsdWRlICJXUElFcnJvcnMuaCINCisjaW5jbHVkZSA8bWF0aC5oPg0KKyNpbmNsdWRlIDx0YXNrTGliLmg+DQorDQorc3RhdGljIFJlc291cmNlICpESU9DaGFubmVscyA9IE5VTEw7DQorc3RhdGljIFJlc291cmNlICpET19QV01HZW5lcmF0b3JzW3RESU86OmtOdW1TeXN0ZW1zXSA9IHtOVUxMfTsNCisNCisvKioNCisgKiBHZXQgYW4gaW5zdGFuY2Ugb2YgYW4gRGlnaXRhbCBNb2R1bGUuDQorICogU2luZ2xldG9uIGRpZ2l0YWwgbW9kdWxlIGNyZWF0aW9uIHdoZXJlIGEgbW9kdWxlIGlzIGFsbG9jYXRlZCBvbiB0aGUgZmlyc3QgdXNlDQorICogYW5kIHRoZSBzYW1lIG1vZHVsZSBpcyByZXR1cm5lZCBvbiBzdWJzZXF1ZW50IHVzZXMuDQorICoNCisgKiBAcGFyYW0gbW9kdWxlTnVtYmVyIFRoZSBkaWdpdGFsIG1vZHVsZSB0byBnZXQgKDEgb3IgMikuDQorICovDQorRGlnaXRhbE1vZHVsZSogRGlnaXRhbE1vZHVsZTo6R2V0SW5zdGFuY2UoVUlOVDggbW9kdWxlTnVtYmVyKQ0KK3sNCisJaWYgKENoZWNrRGlnaXRhbE1vZHVsZShtb2R1bGVOdW1iZXIpKQ0KKwl7DQorCQlyZXR1cm4gKERpZ2l0YWxNb2R1bGUgKilHZXRNb2R1bGUobkxvYWRPdXQ6OmtNb2R1bGVUeXBlX0RpZ2l0YWwsIG1vZHVsZU51bWJlcik7DQorCX0NCisNCisJLy8gSWYgdGhpcyB3YXNuJ3QgY2F1Z2h0IGJlZm9yZSBub3csIG1ha2Ugc3VyZSB3ZSBzYXkgd2hhdCdzIHdyb25nIGJlZm9yZSB3ZSBjcmFzaA0KKwljaGFyIGJ1Zls2NF07DQorCXNucHJpbnRmKGJ1ZiwgNjQsICJEaWdpdGFsIE1vZHVsZSAlZCIsIG1vZHVsZU51bWJlcik7DQorCXdwaV9zZXRHbG9iYWxXUElFcnJvcldpdGhDb250ZXh0KE1vZHVsZUluZGV4T3V0T2ZSYW5nZSwgYnVmKTsNCisNCisJcmV0dXJuIE5VTEw7DQorfQ0KKw0KKy8qKg0KKyAqIENyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiBhbiBkaWdpdGFsIG1vZHVsZS4NCisgKiBDcmVhdGUgYW4gaW5zdGFuY2Ugb2YgdGhlIGRpZ2l0YWwgbW9kdWxlIG9iamVjdC4gSW5pdGlhbGl6ZSBhbGwgdGhlIHBhcmFtZXRlcnMNCisgKiB0byByZWFzb25hYmxlIHZhbHVlcyBvbiBzdGFydC4NCisgKiBTZXR0aW5nIGEgZ2xvYmFsIHZhbHVlIG9uIGFuIGRpZ2l0YWwgbW9kdWxlIGNhbiBiZSBkb25lIG9ubHkgb25jZSB1bmxlc3Mgc3Vic2VxdWVudA0KKyAqIHZhbHVlcyBhcmUgc2V0IHRoZSBwcmV2aW91c2x5IHNldCB2YWx1ZS4NCisgKiBEaWdpdGFsIG1vZHVsZXMgYXJlIGEgc2luZ2xldG9uLCBzbyB0aGUgY29uc3RydWN0b3IgaXMgbmV2ZXIgY2FsbGVkIG91dHNpZGUgb2YgdGhpcyBjbGFzcy4NCisgKg0KKyAqIEBwYXJhbSBtb2R1bGVOdW1iZXIgVGhlIGRpZ2l0YWwgbW9kdWxlIHRvIGNyZWF0ZSAoMSBvciAyKS4NCisgKi8NCitEaWdpdGFsTW9kdWxlOjpEaWdpdGFsTW9kdWxlKFVJTlQ4IG1vZHVsZU51bWJlcikNCisJOiBNb2R1bGUobkxvYWRPdXQ6OmtNb2R1bGVUeXBlX0RpZ2l0YWwsIG1vZHVsZU51bWJlcikNCisJLCBtX2ZwZ2FESU8gKE5VTEwpDQorew0KKwlSZXNvdXJjZTo6Q3JlYXRlUmVzb3VyY2VPYmplY3QoJkRJT0NoYW5uZWxzLCB0RElPOjprTnVtU3lzdGVtcyAqIGtEaWdpdGFsQ2hhbm5lbHMpOw0KKwlSZXNvdXJjZTo6Q3JlYXRlUmVzb3VyY2VPYmplY3QoJkRPX1BXTUdlbmVyYXRvcnNbbV9tb2R1bGVOdW1iZXIgLSAxXSwgdERJTzo6a051bURPX1BXTUR1dHlDeWNsZUVsZW1lbnRzKTsNCisJdFJpb1N0YXR1c0NvZGUgbG9jYWxTdGF0dXMgPSBOaUZwZ2FfU3RhdHVzX1N1Y2Nlc3M7DQorCW1fZnBnYURJTyA9IHRESU86OmNyZWF0ZShtX21vZHVsZU51bWJlciAtIDEsICZsb2NhbFN0YXR1cyk7DQorCXdwaV9zZXRFcnJvcihsb2NhbFN0YXR1cyk7DQorDQorCS8vIE1ha2Ugc3VyZSB0aGF0IHRoZSA5NDAzIElPTm9kZSBoYXMgaGFkIGEgY2hhbmNlIHRvIGluaXRpYWxpemUgYmVmb3JlIGNvbnRpbnVpbmcuDQorCXdoaWxlKG1fZnBnYURJTy0+cmVhZExvb3BUaW1pbmcoJmxvY2FsU3RhdHVzKSA9PSAwKSB0YXNrRGVsYXkoMSk7DQorCWlmIChtX2ZwZ2FESU8tPnJlYWRMb29wVGltaW5nKCZsb2NhbFN0YXR1cykgIT0ga0V4cGVjdGVkTG9vcFRpbWluZykNCisJew0KKwkJY2hhciBlcnJbMTI4XTsNCisJCXNwcmludGYoZXJyLCAiRElPIExvb3BUaW1pbmc6ICVkLCBleHBlY3Rpbmc6ICVkXG4iLCBtX2ZwZ2FESU8tPnJlYWRMb29wVGltaW5nKCZsb2NhbFN0YXR1cyksIGtFeHBlY3RlZExvb3BUaW1pbmcpOw0KKwkJd3BpX3NldFdQSUVycm9yV2l0aENvbnRleHQoTG9vcFRpbWluZ0Vycm9yLCBlcnIpOw0KKwl9DQorCW1fZnBnYURJTy0+d3JpdGVQV01Db25maWdfUGVyaW9kKFBXTTo6a0RlZmF1bHRQd21QZXJpb2QsICZsb2NhbFN0YXR1cyk7DQorCW1fZnBnYURJTy0+d3JpdGVQV01Db25maWdfTWluSGlnaChQV006OmtEZWZhdWx0TWluUHdtSGlnaCwgJmxvY2FsU3RhdHVzKTsNCisNCisJLy8gRW5zdXJlIHRoYXQgUFdNIG91dHB1dCB2YWx1ZXMgYXJlIHNldCB0byBPRkYNCisJZm9yIChVSU5UMzIgcHdtX2luZGV4ID0gMTsgcHdtX2luZGV4IDw9IGtQd21DaGFubmVsczsgcHdtX2luZGV4KyspDQorCXsNCisJCVNldFBXTShwd21faW5kZXgsIFBXTTo6a1B3bURpc2FibGVkKTsNCisJCVNldFBXTVBlcmlvZFNjYWxlKHB3bV9pbmRleCwgMyk7IC8vIFNldCBhbGwgdG8gNHggYnkgZGVmYXVsdC4NCisJfQ0KKw0KKwkvLyBUdXJuIG9mZiBhbGwgcmVsYXkgb3V0cHV0cy4NCisJbV9mcGdhRElPLT53cml0ZVNsb3dWYWx1ZV9SZWxheUZ3ZCgwLCAmbG9jYWxTdGF0dXMpOw0KKwltX2ZwZ2FESU8tPndyaXRlU2xvd1ZhbHVlX1JlbGF5UmV2KDAsICZsb2NhbFN0YXR1cyk7DQorCXdwaV9zZXRFcnJvcihsb2NhbFN0YXR1cyk7DQorDQorCS8vIENyZWF0ZSBhIHNlbWFwaG9yZSB0byBwcm90ZWN0IGNoYW5nZXMgdG8gdGhlIGRpZ2l0YWwgb3V0cHV0IHZhbHVlcw0KKwltX2RpZ2l0YWxTZW1hcGhvcmUgPSBzZW1NQ3JlYXRlKFNFTV9RX1BSSU9SSVRZIHwgU0VNX0RFTEVURV9TQUZFIHwgU0VNX0lOVkVSU0lPTl9TQUZFKTsNCisNCisJLy8gQ3JlYXRlIGEgc2VtYXBob3JlIHRvIHByb3RlY3QgY2hhbmdlcyB0byB0aGUgcmVsYXkgdmFsdWVzDQorCW1fcmVsYXlTZW1hcGhvcmUgPSBzZW1NQ3JlYXRlKFNFTV9RX1BSSU9SSVRZIHwgU0VNX0RFTEVURV9TQUZFIHwgU0VNX0lOVkVSU0lPTl9TQUZFKTsNCisNCisJLy8gQ3JlYXRlIGEgc2VtYXBob3JlIHRvIHByb3RlY3QgY2hhbmdlcyB0byB0aGUgRE8gUFdNIGNvbmZpZw0KKwltX2RvUHdtU2VtYXBob3JlID0gc2VtTUNyZWF0ZShTRU1fUV9QUklPUklUWSB8IFNFTV9ERUxFVEVfU0FGRSB8IFNFTV9JTlZFUlNJT05fU0FGRSk7DQorDQorCUFkZFRvU2luZ2xldG9uTGlzdCgpOw0KK30NCisNCitEaWdpdGFsTW9kdWxlOjp+RGlnaXRhbE1vZHVsZSgpDQorew0KKwlzZW1EZWxldGUobV9kb1B3bVNlbWFwaG9yZSk7DQorCW1fZG9Qd21TZW1hcGhvcmUgPSBOVUxMOw0KKwlzZW1EZWxldGUobV9yZWxheVNlbWFwaG9yZSk7DQorCW1fcmVsYXlTZW1hcGhvcmUgPSBOVUxMOw0KKwlzZW1EZWxldGUobV9kaWdpdGFsU2VtYXBob3JlKTsNCisJbV9kaWdpdGFsU2VtYXBob3JlID0gTlVMTDsNCisJZGVsZXRlIG1fZnBnYURJTzsNCit9DQorDQorLyoqDQorICogU2V0IGEgUFdNIGNoYW5uZWwgdG8gdGhlIGRlc2lyZWQgdmFsdWUuIFRoZSB2YWx1ZXMgcmFuZ2UgZnJvbSAwIHRvIDI1NSBhbmQgdGhlIHBlcmlvZCBpcyBjb250cm9sbGVkDQorICogYnkgdGhlIFBXTSBQZXJpb2QgYW5kIE1pbkhpZ2ggcmVnaXN0ZXJzLg0KKyAqIA0KKyAqIEBwYXJhbSBjaGFubmVsIFRoZSBQV00gY2hhbm5lbCB0byBzZXQuDQorICogQHBhcmFtIHZhbHVlIFRoZSBQV00gdmFsdWUgdG8gc2V0Lg0KKyAqLw0KK3ZvaWQgRGlnaXRhbE1vZHVsZTo6U2V0UFdNKFVJTlQzMiBjaGFubmVsLCBVSU5UOCB2YWx1ZSkNCit7DQorCUNoZWNrUFdNQ2hhbm5lbChjaGFubmVsKTsNCisJdFJpb1N0YXR1c0NvZGUgbG9jYWxTdGF0dXMgPSBOaUZwZ2FfU3RhdHVzX1N1Y2Nlc3M7DQorCW1fZnBnYURJTy0+d3JpdGVQV01WYWx1ZShjaGFubmVsIC0gMSwgdmFsdWUsICZsb2NhbFN0YXR1cyk7DQorCXdwaV9zZXRFcnJvcihsb2NhbFN0YXR1cyk7DQorfQ0KKw0KKy8qKg0KKyAqIEdldCBhIHZhbHVlIGZyb20gYSBQV00gY2hhbm5lbC4gVGhlIHZhbHVlcyByYW5nZSBmcm9tIDAgdG8gMjU1Lg0KKyAqIA0KKyAqIEBwYXJhbSBjaGFubmVsIFRoZSBQV00gY2hhbm5lbCB0byByZWFkIGZyb20uDQorICogQHJldHVybiBUaGUgcmF3IFBXTSB2YWx1ZS4NCisgKi8NCitVSU5UOCBEaWdpdGFsTW9kdWxlOjpHZXRQV00oVUlOVDMyIGNoYW5uZWwpDQorew0KKwlDaGVja1BXTUNoYW5uZWwoY2hhbm5lbCk7DQorCXRSaW9TdGF0dXNDb2RlIGxvY2FsU3RhdHVzID0gTmlGcGdhX1N0YXR1c19TdWNjZXNzOw0KKwlyZXR1cm4gbV9mcGdhRElPLT5yZWFkUFdNVmFsdWUoY2hhbm5lbCAtIDEsICZsb2NhbFN0YXR1cyk7DQorCXdwaV9zZXRFcnJvcihsb2NhbFN0YXR1cyk7DQorfQ0KKw0KKy8qKg0KKyAqIFNldCBob3cgaG93IG9mdGVuIHRoZSBQV00gc2lnbmFsIGlzIHNxdWVsY2hlZCwgdGh1cyBzY2FsaW5nIHRoZSBwZXJpb2QuDQorICogDQorICogQHBhcmFtIGNoYW5uZWwgVGhlIFBXTSBjaGFubmVsIHRvIGNvbmZpZ3VyZS4NCisgKiBAcGFyYW0gc3F1ZWxjaE1hc2sgVGhlIDItYml0IG1hc2sgb2Ygb3V0cHV0cyB0byBzcXVlbGNoLg0KKyAqLw0KK3ZvaWQgRGlnaXRhbE1vZHVsZTo6U2V0UFdNUGVyaW9kU2NhbGUoVUlOVDMyIGNoYW5uZWwsIFVJTlQzMiBzcXVlbGNoTWFzaykNCit7DQorCUNoZWNrUFdNQ2hhbm5lbChjaGFubmVsKTsNCisJdFJpb1N0YXR1c0NvZGUgbG9jYWxTdGF0dXMgPSBOaUZwZ2FfU3RhdHVzX1N1Y2Nlc3M7DQorCW1fZnBnYURJTy0+d3JpdGVQV01QZXJpb2RTY2FsZShjaGFubmVsIC0gMSwgc3F1ZWxjaE1hc2ssICZsb2NhbFN0YXR1cyk7DQorCXdwaV9zZXRFcnJvcihsb2NhbFN0YXR1cyk7DQorfQ0KKw0KKy8qKg0KKyAqIFNldCB0aGUgc3RhdGUgb2YgYSByZWxheS4NCisgKiBTZXQgdGhlIHN0YXRlIG9mIGEgcmVsYXkgb3V0cHV0IHRvIGJlIGZvcndhcmQuIFJlbGF5cyBoYXZlIHR3byBvdXRwdXRzIGFuZCBlYWNoIGlzDQorICogaW5kZXBlbmRlbnRseSBzZXQgdG8gMHYgb3IgMTJ2Lg0KKyAqLw0KK3ZvaWQgRGlnaXRhbE1vZHVsZTo6U2V0UmVsYXlGb3J3YXJkKFVJTlQzMiBjaGFubmVsLCBib29sIG9uKQ0KK3sNCisJdFJpb1N0YXR1c0NvZGUgbG9jYWxTdGF0dXMgPSBOaUZwZ2FfU3RhdHVzX1N1Y2Nlc3M7DQorCUNoZWNrUmVsYXlDaGFubmVsKGNoYW5uZWwpOw0KKwl7DQorCQlTeW5jaHJvbml6ZWQgc3luYyhtX3JlbGF5U2VtYXBob3JlKTsNCisJCVVJTlQ4IGZvcndhcmRSZWxheXMgPSBtX2ZwZ2FESU8tPnJlYWRTbG93VmFsdWVfUmVsYXlGd2QoJmxvY2FsU3RhdHVzKTsNCisJCWlmIChvbikNCisJCQlmb3J3YXJkUmVsYXlzIHw9IDEgPDwgKGNoYW5uZWwgLSAxKTsNCisJCWVsc2UNCisJCQlmb3J3YXJkUmVsYXlzICY9IH4oMSA8PCAoY2hhbm5lbCAtIDEpKTsNCisJCW1fZnBnYURJTy0+d3JpdGVTbG93VmFsdWVfUmVsYXlGd2QoZm9yd2FyZFJlbGF5cywgJmxvY2FsU3RhdHVzKTsNCisJfQ0KKwl3cGlfc2V0RXJyb3IobG9jYWxTdGF0dXMpOw0KK30NCisNCisvKioNCisgKiBTZXQgdGhlIHN0YXRlIG9mIGEgcmVsYXkuDQorICogU2V0IHRoZSBzdGF0ZSBvZiBhIHJlbGF5IG91dHB1dCB0byBiZSByZXZlcnNlLiBSZWxheXMgaGF2ZSB0d28gb3V0cHV0cyBhbmQgZWFjaCBpcw0KKyAqIGluZGVwZW5kZW50bHkgc2V0IHRvIDB2IG9yIDEydi4NCisgKi8NCit2b2lkIERpZ2l0YWxNb2R1bGU6OlNldFJlbGF5UmV2ZXJzZShVSU5UMzIgY2hhbm5lbCwgYm9vbCBvbikNCit7DQorCXRSaW9TdGF0dXNDb2RlIGxvY2FsU3RhdHVzID0gTmlGcGdhX1N0YXR1c19TdWNjZXNzOw0KKwlDaGVja1JlbGF5Q2hhbm5lbChjaGFubmVsKTsNCisJew0KKwkJU3luY2hyb25pemVkIHN5bmMobV9yZWxheVNlbWFwaG9yZSk7DQorCQlVSU5UOCByZXZlcnNlUmVsYXlzID0gbV9mcGdhRElPLT5yZWFkU2xvd1ZhbHVlX1JlbGF5UmV2KCZsb2NhbFN0YXR1cyk7DQorCQlpZiAob24pDQorCQkJcmV2ZXJzZVJlbGF5cyB8PSAxIDw8IChjaGFubmVsIC0gMSk7DQorCQllbHNlDQorCQkJcmV2ZXJzZVJlbGF5cyAmPSB+KDEgPDwgKGNoYW5uZWwgLSAxKSk7DQorCQltX2ZwZ2FESU8tPndyaXRlU2xvd1ZhbHVlX1JlbGF5UmV2KHJldmVyc2VSZWxheXMsICZsb2NhbFN0YXR1cyk7DQorCX0NCisJd3BpX3NldEVycm9yKGxvY2FsU3RhdHVzKTsNCit9DQorDQorLyoqDQorICogR2V0IHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBmb3J3YXJkIHJlbGF5IGNoYW5uZWwNCisgKi8NCitib29sIERpZ2l0YWxNb2R1bGU6OkdldFJlbGF5Rm9yd2FyZChVSU5UMzIgY2hhbm5lbCkNCit7DQorCXRSaW9TdGF0dXNDb2RlIGxvY2FsU3RhdHVzID0gTmlGcGdhX1N0YXR1c19TdWNjZXNzOw0KKwlVSU5UOCBmb3J3YXJkUmVsYXlzID0gbV9mcGdhRElPLT5yZWFkU2xvd1ZhbHVlX1JlbGF5RndkKCZsb2NhbFN0YXR1cyk7DQorCXdwaV9zZXRFcnJvcihsb2NhbFN0YXR1cyk7DQorCXJldHVybiAoZm9yd2FyZFJlbGF5cyAmICgxIDw8IChjaGFubmVsIC0gMSkpKSAhPSAwOw0KK30NCisNCisvKioNCisgKiBHZXQgdGhlIGN1cnJlbnQgc3RhdGUgb2YgYWxsIG9mIHRoZSBmb3J3YXJkIHJlbGF5IGNoYW5uZWxzIG9uIHRoaXMgbW9kdWxlLg0KKyAqLw0KK1VJTlQ4IERpZ2l0YWxNb2R1bGU6OkdldFJlbGF5Rm9yd2FyZCgpDQorew0KKwl0UmlvU3RhdHVzQ29kZSBsb2NhbFN0YXR1cyA9IE5pRnBnYV9TdGF0dXNfU3VjY2VzczsNCisJVUlOVDggZm9yd2FyZFJlbGF5cyA9IG1fZnBnYURJTy0+cmVhZFNsb3dWYWx1ZV9SZWxheUZ3ZCgmbG9jYWxTdGF0dXMpOw0KKwl3cGlfc2V0RXJyb3IobG9jYWxTdGF0dXMpOw0KKwlyZXR1cm4gZm9yd2FyZFJlbGF5czsNCit9DQorDQorLyoqDQorICogR2V0IHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSByZXZlcnNlIHJlbGF5IGNoYW5uZWwNCisgKi8NCitib29sIERpZ2l0YWxNb2R1bGU6OkdldFJlbGF5UmV2ZXJzZShVSU5UMzIgY2hhbm5lbCkNCit7DQorCXRSaW9TdGF0dXNDb2RlIGxvY2FsU3RhdHVzID0gTmlGcGdhX1N0YXR1c19TdWNjZXNzOw0KKwlVSU5UOCByZXZlcnNlUmVsYXlzID0gbV9mcGdhRElPLT5yZWFkU2xvd1ZhbHVlX1JlbGF5UmV2KCZsb2NhbFN0YXR1cyk7DQorCXdwaV9zZXRFcnJvcihsb2NhbFN0YXR1cyk7DQorCXJldHVybiAocmV2ZXJzZVJlbGF5cyAmICgxIDw8IChjaGFubmVsIC0gMSkpKSAhPSAwOw0KKwkNCit9DQorDQorLyoqDQorICogR2V0IHRoZSBjdXJyZW50IHN0YXRlIG9mIGFsbCBvZiB0aGUgcmV2ZXJzZSByZWxheSBjaGFubmVscyBvbiB0aGlzIG1vZHVsZS4NCisgKi8NCitVSU5UOCBEaWdpdGFsTW9kdWxlOjpHZXRSZWxheVJldmVyc2UoKQ0KK3sNCisJdFJpb1N0YXR1c0NvZGUgbG9jYWxTdGF0dXMgPSBOaUZwZ2FfU3RhdHVzX1N1Y2Nlc3M7DQorCVVJTlQ4IHJldmVyc2VSZWxheXMgPSBtX2ZwZ2FESU8tPnJlYWRTbG93VmFsdWVfUmVsYXlSZXYoJmxvY2FsU3RhdHVzKTsNCisJd3BpX3NldEVycm9yKGxvY2FsU3RhdHVzKTsNCisJcmV0dXJuIHJldmVyc2VSZWxheXM7CQ0KK30NCisNCisNCisvKioNCisgKiBBbGxvY2F0ZSBEaWdpdGFsIEkvTyBjaGFubmVscy4NCisgKiBBbGxvY2F0ZSBjaGFubmVscyBzbyB0aGF0IHRoZXkgYXJlIG5vdCBhY2NpZGVudGx5IHJldXNlZC4gQWxzbyB0aGUgZGlyZWN0aW9uIGlzIHNldCBhdCB0aGUNCisgKiB0aW1lIG9mIHRoZSBhbGxvY2F0aW9uLg0KKyAqIA0KKyAqIEBwYXJhbSBjaGFubmVsIFRoZSBEaWdpdGFsIEkvTyBjaGFubmVsDQorICogQHBhcmFtIGlucHV0IElmIHRydWUgb3BlbiBhcyBpbnB1dDsgaWYgZmFsc2Ugb3BlbiBhcyBvdXRwdXQNCisgKiBAcmV0dXJuIFdhcyBzdWNjZXNzZnVsbHkgYWxsb2NhdGVkDQorICovDQorYm9vbCBEaWdpdGFsTW9kdWxlOjpBbGxvY2F0ZURJTyhVSU5UMzIgY2hhbm5lbCwgYm9vbCBpbnB1dCkNCit7DQorCWNoYXIgYnVmWzY0XTsNCisJc25wcmludGYoYnVmLCA2NCwgIkRJTyAlZCAoTW9kdWxlICVkKSIsIGNoYW5uZWwsIG1fbW9kdWxlTnVtYmVyKTsNCisJaWYgKERJT0NoYW5uZWxzLT5BbGxvY2F0ZShrRGlnaXRhbENoYW5uZWxzICogKG1fbW9kdWxlTnVtYmVyIC0gMSkgKyBjaGFubmVsIC0gMSwgYnVmKSA9PSB+MHVsKSByZXR1cm4gZmFsc2U7DQorCXRSaW9TdGF0dXNDb2RlIGxvY2FsU3RhdHVzID0gTmlGcGdhX1N0YXR1c19TdWNjZXNzOw0KKwl7DQorCQlTeW5jaHJvbml6ZWQgc3luYyhtX2RpZ2l0YWxTZW1hcGhvcmUpOw0KKwkJVUlOVDMyIGJpdFRvU2V0ID0gMSA8PCAoUmVtYXBEaWdpdGFsQ2hhbm5lbChjaGFubmVsIC0gMSkpOw0KKwkJVUlOVDMyIG91dHB1dEVuYWJsZSA9IG1fZnBnYURJTy0+cmVhZE91dHB1dEVuYWJsZSgmbG9jYWxTdGF0dXMpOw0KKwkJVUlOVDMyIG91dHB1dEVuYWJsZVZhbHVlOw0KKwkJaWYgKGlucHV0KQ0KKwkJew0KKwkJCW91dHB1dEVuYWJsZVZhbHVlID0gb3V0cHV0RW5hYmxlICYgKH5iaXRUb1NldCk7IC8vIGNsZWFyIHRoZSBiaXQgZm9yIHJlYWQNCisJCX0NCisJCWVsc2UNCisJCXsNCisJCQlvdXRwdXRFbmFibGVWYWx1ZSA9IG91dHB1dEVuYWJsZSB8IGJpdFRvU2V0OyAvLyBzZXQgdGhlIGJpdCBmb3Igd3JpdGUNCisJCX0NCisJCW1fZnBnYURJTy0+d3JpdGVPdXRwdXRFbmFibGUob3V0cHV0RW5hYmxlVmFsdWUsICZsb2NhbFN0YXR1cyk7DQorCX0NCisJd3BpX3NldEVycm9yKGxvY2FsU3RhdHVzKTsNCisJcmV0dXJuIHRydWU7DQorfQ0KKw0KKy8qKg0KKyAqIEZyZWUgdGhlIHJlc291cmNlIGFzc29jaWF0ZWQgd2l0aCBhIGRpZ2l0YWwgSS9PIGNoYW5uZWwuDQorICogDQorICogQHBhcmFtIGNoYW5uZWwgVGhlIERpZ2l0YWwgSS9PIGNoYW5uZWwgdG8gZnJlZQ0KKyAqLw0KK3ZvaWQgRGlnaXRhbE1vZHVsZTo6RnJlZURJTyhVSU5UMzIgY2hhbm5lbCkNCit7DQorCURJT0NoYW5uZWxzLT5GcmVlKGtEaWdpdGFsQ2hhbm5lbHMgKiAobV9tb2R1bGVOdW1iZXIgLSAxKSArIGNoYW5uZWwgLSAxKTsNCit9DQorDQorLyoqDQorICogV3JpdGUgYSBkaWdpdGFsIEkvTyBiaXQgdG8gdGhlIEZQR0EuDQorICogU2V0IGEgc2luZ2xlIHZhbHVlIG9uIGEgZGlnaXRhbCBJL08gY2hhbm5lbC4NCisgKiANCisgKiBAcGFyYW0gY2hhbm5lbCBUaGUgRGlnaXRhbCBJL08gY2hhbm5lbA0KKyAqIEBwYXJhbSB2YWx1ZSBUaGUgc3RhdGUgdG8gc2V0IHRoZSBkaWdpdGFsIGNoYW5uZWwgKGlmIGl0IGlzIGNvbmZpZ3VyZWQgYXMgYW4gb3V0cHV0KQ0KKyAqLw0KK3ZvaWQgRGlnaXRhbE1vZHVsZTo6U2V0RElPKFVJTlQzMiBjaGFubmVsLCBzaG9ydCB2YWx1ZSkNCit7DQorCWlmICh2YWx1ZSAhPSAwICYmIHZhbHVlICE9IDEpDQorCXsNCisJCXdwaV9zZXRXUElFcnJvcihOb25CaW5hcnlEaWdpdGFsVmFsdWUpOw0KKwkJaWYgKHZhbHVlICE9IDApDQorCQkJdmFsdWUgPSAxOw0KKwl9DQorCXRSaW9TdGF0dXNDb2RlIGxvY2FsU3RhdHVzID0gTmlGcGdhX1N0YXR1c19TdWNjZXNzOw0KKwl7DQorCQlTeW5jaHJvbml6ZWQgc3luYyhtX2RpZ2l0YWxTZW1hcGhvcmUpOw0KKwkJVUlOVDE2IGN1cnJlbnRESU8gPSBtX2ZwZ2FESU8tPnJlYWRETygmbG9jYWxTdGF0dXMpOw0KKwkJaWYodmFsdWUgPT0gMCkNCisJCXsNCisJCQljdXJyZW50RElPID0gY3VycmVudERJTyAmIH4oMSA8PCBSZW1hcERpZ2l0YWxDaGFubmVsKGNoYW5uZWwgLSAxKSk7DQorCQl9DQorCQllbHNlIGlmICh2YWx1ZSA9PSAxKQ0KKwkJew0KKwkJCWN1cnJlbnRESU8gPSBjdXJyZW50RElPIHwgKDEgPDwgUmVtYXBEaWdpdGFsQ2hhbm5lbChjaGFubmVsIC0gMSkpOw0KKwkJfSANCisJCW1fZnBnYURJTy0+d3JpdGVETyhjdXJyZW50RElPLCAmbG9jYWxTdGF0dXMpOw0KKwl9DQorCXdwaV9zZXRFcnJvcihsb2NhbFN0YXR1cyk7DQorfQ0KKw0KKy8qKg0KKyAqIFJlYWQgYSBkaWdpdGFsIEkvTyBiaXQgZnJvbSB0aGUgRlBHQS4NCisgKiBHZXQgYSBzaW5nbGUgdmFsdWUgZnJvbSBhIGRpZ2l0YWwgSS9PIGNoYW5uZWwuDQorICogDQorICogQHBhcmFtIGNoYW5uZWwgVGhlIGRpZ2l0YWwgSS9PIGNoYW5uZWwNCisgKiBAcmV0dXJuIFRoZSBzdGF0ZSBvZiB0aGUgc3BlY2lmaWVkIGNoYW5uZWwNCisgKi8NCitib29sIERpZ2l0YWxNb2R1bGU6OkdldERJTyhVSU5UMzIgY2hhbm5lbCkNCit7DQorCXRSaW9TdGF0dXNDb2RlIGxvY2FsU3RhdHVzID0gTmlGcGdhX1N0YXR1c19TdWNjZXNzOw0KKwlVSU5UMzIgY3VycmVudERJTyA9IG1fZnBnYURJTy0+cmVhZERJKCZsb2NhbFN0YXR1cyk7DQorCXdwaV9zZXRFcnJvcihsb2NhbFN0YXR1cyk7DQorDQorCS8vU2hpZnQgMDAwMDAwMDEgb3ZlciBjaGFubmVsLTEgcGxhY2VzLg0KKwkvL0FORCBpdCBhZ2FpbnN0IHRoZSBjdXJyZW50RElPDQorCS8vaWYgaXQgPT0gMCwgdGhlbiByZXR1cm4gZmFsc2UNCisJLy9lbHNlIHJldHVybiB0cnVlDQorCXJldHVybiAoKGN1cnJlbnRESU8gPj4gUmVtYXBEaWdpdGFsQ2hhbm5lbChjaGFubmVsIC0gMSkpICYgMSkgIT0gMDsNCit9DQorDQorLyoqDQorICogUmVhZCB0aGUgc3RhdGUgb2YgYWxsIHRoZSBEaWdpdGFsIEkvTyBsaW5lcyBmcm9tIHRoZSBGUEdBDQorICogVGhlc2UgYXJlIG5vdCByZW1hcHBlZCB0byBsb2dpY2FsIG9yZGVyLiAgVGhleSBhcmUgc3RpbGwgaW4gaGFyZHdhcmUgb3JkZXIuDQorICovDQorVUlOVDE2IERpZ2l0YWxNb2R1bGU6OkdldERJTygpDQorew0KKwl0UmlvU3RhdHVzQ29kZSBsb2NhbFN0YXR1cyA9IE5pRnBnYV9TdGF0dXNfU3VjY2VzczsNCisJVUlOVDMyIGN1cnJlbnRESU8gPSBtX2ZwZ2FESU8tPnJlYWRESSgmbG9jYWxTdGF0dXMpOw0KKwl3cGlfc2V0RXJyb3IobG9jYWxTdGF0dXMpOw0KKwlyZXR1cm4gY3VycmVudERJTzsNCit9DQorDQorLyoqDQorICogUmVhZCB0aGUgZGlyZWN0aW9uIG9mIGEgdGhlIERpZ2l0YWwgSS9PIGxpbmVzDQorICogQSAxIGJpdCBtZWFucyBvdXRwdXQgYW5kIGEgMCBiaXQgbWVhbnMgaW5wdXQuDQorICogDQorICogQHBhcmFtIGNoYW5uZWwgVGhlIGRpZ2l0YWwgSS9PIGNoYW5uZWwNCisgKiBAcmV0dXJuIFRoZSBkaXJlY3Rpb24gb2YgdGhlIHNwZWNpZmllZCBjaGFubmVsDQorICovDQorYm9vbCBEaWdpdGFsTW9kdWxlOjpHZXRESU9EaXJlY3Rpb24oVUlOVDMyIGNoYW5uZWwpDQorew0KKwl0UmlvU3RhdHVzQ29kZSBsb2NhbFN0YXR1cyA9IE5pRnBnYV9TdGF0dXNfU3VjY2VzczsNCisJVUlOVDMyIGN1cnJlbnRPdXRwdXRFbmFibGUgPSBtX2ZwZ2FESU8tPnJlYWRPdXRwdXRFbmFibGUoJmxvY2FsU3RhdHVzKTsNCisJd3BpX3NldEVycm9yKGxvY2FsU3RhdHVzKTsNCisJDQorCS8vU2hpZnQgMDAwMDAwMDEgb3ZlciBjaGFubmVsLTEgcGxhY2VzLg0KKwkvL0FORCBpdCBhZ2FpbnN0IHRoZSBjdXJyZW50T3V0cHV0RW5hYmxlDQorCS8vaWYgaXQgPT0gMCwgdGhlbiByZXR1cm4gZmFsc2UNCisJLy9lbHNlIHJldHVybiB0cnVlDQorCXJldHVybiAoKGN1cnJlbnRPdXRwdXRFbmFibGUgPj4gUmVtYXBEaWdpdGFsQ2hhbm5lbChjaGFubmVsIC0gMSkpICYgMSkgIT0gMDsNCit9DQorDQorLyoqDQorICogUmVhZCB0aGUgZGlyZWN0aW9uIG9mIGFsbCB0aGUgRGlnaXRhbCBJL08gbGluZXMgZnJvbSB0aGUgRlBHQQ0KKyAqIEEgMSBiaXQgbWVhbnMgb3V0cHV0IGFuZCBhIDAgYml0IG1lYW5zIGlucHV0Lg0KKyAqIFRoZXNlIGFyZSBub3QgcmVtYXBwZWQgdG8gbG9naWNhbCBvcmRlci4gIFRoZXkgYXJlIHN0aWxsIGluIGhhcmR3YXJlIG9yZGVyLg0KKyAqLw0KK1VJTlQxNiBEaWdpdGFsTW9kdWxlOjpHZXRESU9EaXJlY3Rpb24oKQ0KK3sNCisJdFJpb1N0YXR1c0NvZGUgbG9jYWxTdGF0dXMgPSBOaUZwZ2FfU3RhdHVzX1N1Y2Nlc3M7DQorCVVJTlQzMiBjdXJyZW50T3V0cHV0RW5hYmxlID0gbV9mcGdhRElPLT5yZWFkT3V0cHV0RW5hYmxlKCZsb2NhbFN0YXR1cyk7DQorCXdwaV9zZXRFcnJvcihsb2NhbFN0YXR1cyk7DQorCXJldHVybiBjdXJyZW50T3V0cHV0RW5hYmxlOw0KK30NCisNCisvKioNCisgKiBHZW5lcmF0ZSBhIHNpbmdsZSBwdWxzZS4NCisgKiBXcml0ZSBhIHB1bHNlIHRvIHRoZSBzcGVjaWZpZWQgZGlnaXRhbCBvdXRwdXQgY2hhbm5lbC4gVGhlcmUgY2FuIG9ubHkgYmUgYSBzaW5nbGUgcHVsc2UgZ29pbmcgYXQgYW55IHRpbWUuDQorICogDQorICogQHBhcmFtIGNoYW5uZWwgVGhlIERpZ2l0YWwgT3V0cHV0IGNoYW5uZWwgdGhhdCB0aGUgcHVsc2Ugc2hvdWxkIGJlIG91dHB1dCBvbg0KKyAqIEBwYXJhbSBwdWxzZUxlbmd0aCBUaGUgYWN0aXZlIGxlbmd0aCBvZiB0aGUgcHVsc2UgKGluIHNlY29uZHMpDQorICovDQordm9pZCBEaWdpdGFsTW9kdWxlOjpQdWxzZShVSU5UMzIgY2hhbm5lbCwgZmxvYXQgcHVsc2VMZW5ndGgpDQorew0KKwlVSU5UMTYgbWFzayA9IDEgPDwgUmVtYXBEaWdpdGFsQ2hhbm5lbChjaGFubmVsIC0gMSk7DQorCXRSaW9TdGF0dXNDb2RlIGxvY2FsU3RhdHVzID0gTmlGcGdhX1N0YXR1c19TdWNjZXNzOw0KKwltX2ZwZ2FESU8tPndyaXRlUHVsc2VMZW5ndGgoKFVJTlQ4KSgxLjBlOSAqIHB1bHNlTGVuZ3RoIC8gKG1fZnBnYURJTy0+cmVhZExvb3BUaW1pbmcoJmxvY2FsU3RhdHVzKSAqIDI1KSksICZsb2NhbFN0YXR1cyk7DQorCW1fZnBnYURJTy0+d3JpdGVQdWxzZShtYXNrLCAmbG9jYWxTdGF0dXMpOw0KKwl3cGlfc2V0RXJyb3IobG9jYWxTdGF0dXMpOw0KK30NCisNCisvKioNCisgKiBDaGVjayBhIERJTyBsaW5lIHRvIHNlZSBpZiBpdCBpcyBjdXJyZW50bHkgZ2VuZXJhdGluZyBhIHB1bHNlLg0KKyAqIA0KKyAqIEByZXR1cm4gQSBwdWxzZSBpcyBpbiBwcm9ncmVzcw0KKyAqLw0KK2Jvb2wgRGlnaXRhbE1vZHVsZTo6SXNQdWxzaW5nKFVJTlQzMiBjaGFubmVsKQ0KK3sNCisJVUlOVDE2IG1hc2sgPSAxIDw8IFJlbWFwRGlnaXRhbENoYW5uZWwoY2hhbm5lbCAtIDEpOw0KKwl0UmlvU3RhdHVzQ29kZSBsb2NhbFN0YXR1cyA9IE5pRnBnYV9TdGF0dXNfU3VjY2VzczsNCisJVUlOVDE2IHB1bHNlUmVnaXN0ZXIgPSBtX2ZwZ2FESU8tPnJlYWRQdWxzZSgmbG9jYWxTdGF0dXMpOw0KKwl3cGlfc2V0RXJyb3IobG9jYWxTdGF0dXMpOw0KKwlyZXR1cm4gKHB1bHNlUmVnaXN0ZXIgJiBtYXNrKSAhPSAwOw0KK30NCisNCisvKioNCisgKiBDaGVjayBpZiBhbnkgRElPIGxpbmUgaXMgY3VycmVudGx5IGdlbmVyYXRpbmcgYSBwdWxzZS4NCisgKiANCisgKiBAcmV0dXJuIEEgcHVsc2Ugb24gc29tZSBsaW5lIGlzIGluIHByb2dyZXNzDQorICovDQorYm9vbCBEaWdpdGFsTW9kdWxlOjpJc1B1bHNpbmcoKQ0KK3sNCisJdFJpb1N0YXR1c0NvZGUgbG9jYWxTdGF0dXMgPSBOaUZwZ2FfU3RhdHVzX1N1Y2Nlc3M7DQorCVVJTlQxNiBwdWxzZVJlZ2lzdGVyID0gbV9mcGdhRElPLT5yZWFkUHVsc2UoJmxvY2FsU3RhdHVzKTsNCisJd3BpX3NldEVycm9yKGxvY2FsU3RhdHVzKTsNCisJcmV0dXJuIHB1bHNlUmVnaXN0ZXIgIT0gMDsNCit9DQorDQorLyoqDQorICogQWxsb2NhdGUgYSBETyBQV00gR2VuZXJhdG9yLg0KKyAqIEFsbG9jYXRlIFBXTSBnZW5lcmF0b3JzIHNvIHRoYXQgdGhleSBhcmUgbm90IGFjY2lkZW50bHkgcmV1c2VkLg0KKyAqIA0KKyAqIEByZXR1cm4gUFdNIEdlbmVyYXRvciByZWZudW0NCisgKi8NCitVSU5UMzIgRGlnaXRhbE1vZHVsZTo6QWxsb2NhdGVET19QV00oKQ0KK3sNCisJY2hhciBidWZbNjRdOw0KKwlzbnByaW50ZihidWYsIDY0LCAiRE9fUFdNIChNb2R1bGU6ICVkKSIsIG1fbW9kdWxlTnVtYmVyKTsNCisJcmV0dXJuIERPX1BXTUdlbmVyYXRvcnNbKG1fbW9kdWxlTnVtYmVyIC0gMSldLT5BbGxvY2F0ZShidWYpOw0KK30NCisNCisvKioNCisgKiBGcmVlIHRoZSByZXNvdXJjZSBhc3NvY2lhdGVkIHdpdGggYSBETyBQV00gZ2VuZXJhdG9yLg0KKyAqIA0KKyAqIEBwYXJhbSBwd21HZW5lcmF0b3IgVGhlIHB3bUdlbiB0byBmcmVlIHRoYXQgd2FzIGFsbG9jYXRlZCB3aXRoIEFsbG9jYXRlRE9fUFdNKCkNCisgKi8NCit2b2lkIERpZ2l0YWxNb2R1bGU6OkZyZWVET19QV00oVUlOVDMyIHB3bUdlbmVyYXRvcikNCit7DQorCWlmIChwd21HZW5lcmF0b3IgPT0gfjB1bCkgcmV0dXJuOw0KKwlET19QV01HZW5lcmF0b3JzWyhtX21vZHVsZU51bWJlciAtIDEpXS0+RnJlZShwd21HZW5lcmF0b3IpOw0KK30NCisNCisvKioNCisgKiBDaGFuZ2UgdGhlIGZyZXF1ZW5jeSBvZiB0aGUgRE8gUFdNIGdlbmVyYXRvci4NCisgKiANCisgKiBUaGUgdmFsaWQgcmFuZ2UgaXMgZnJvbSAwLjYgSHogdG8gMTkga0h6LiAgVGhlIGZyZXF1ZW5jeSByZXNvbHV0aW9uIGlzIGxvZ2FyaXRobWljLg0KKyAqIA0KKyAqIEBwYXJhbSByYXRlIFRoZSBmcmVxdWVuY3kgdG8gb3V0cHV0IGFsbCBkaWdpdGFsIG91dHB1dCBQV00gc2lnbmFscyBvbiB0aGlzIG1vZHVsZS4NCisgKi8NCit2b2lkIERpZ2l0YWxNb2R1bGU6OlNldERPX1BXTVJhdGUoZmxvYXQgcmF0ZSkNCit7DQorCS8vIEN1cnJlbnRseSByb3VuZGluZyBpbiB0aGUgbG9nIHJhdGUgZG9tYWluLi4uIGhlYXZ5IHdlaWdodCB0b3dhcmQgcGlja2luZyBhIGhpZ2hlciBmcmVxLg0KKwkvLyBUT0RPOiBSb3VuZCBpbiB0aGUgbGluZWFyIHJhdGUgZG9tYWluLg0KKwl0UmlvU3RhdHVzQ29kZSBsb2NhbFN0YXR1cyA9IE5pRnBnYV9TdGF0dXNfU3VjY2VzczsNCisJVUlOVDggcHdtUGVyaW9kUG93ZXIgPSAoVUlOVDgpKGxvZygxLjAgLyAobV9mcGdhRElPLT5yZWFkTG9vcFRpbWluZygmbG9jYWxTdGF0dXMpICogMC4yNUUtNiAqIHJhdGUpKS9sb2coMi4wKSArIDAuNSk7DQorCW1fZnBnYURJTy0+d3JpdGVET19QV01Db25maWdfUGVyaW9kUG93ZXIocHdtUGVyaW9kUG93ZXIsICZsb2NhbFN0YXR1cyk7DQorCXdwaV9zZXRFcnJvcihsb2NhbFN0YXR1cyk7DQorfQ0KKw0KKy8qKg0KKyAqIENvbmZpZ3VyZSB3aGljaCBETyBjaGFubmVsIHRoZSBQV00gc2lnYW5sIGlzIG91dHB1dCBvbg0KKyAqIA0KKyAqIEBwYXJhbSBwd21HZW5lcmF0b3IgVGhlIGdlbmVyYXRvciBpbmRleCByZXNlcnZlZCBieSBBbGxvY2F0ZURPX1BXTSgpDQorICogQHBhcmFtIGNoYW5uZWwgVGhlIERpZ2l0YWwgT3V0cHV0IGNoYW5uZWwgdG8gb3V0cHV0IG9uDQorICovDQordm9pZCBEaWdpdGFsTW9kdWxlOjpTZXRET19QV01PdXRwdXRDaGFubmVsKFVJTlQzMiBwd21HZW5lcmF0b3IsIFVJTlQzMiBjaGFubmVsKQ0KK3sNCisJaWYgKHB3bUdlbmVyYXRvciA9PSB+MHVsKSByZXR1cm47DQorCXRSaW9TdGF0dXNDb2RlIGxvY2FsU3RhdHVzID0gTmlGcGdhX1N0YXR1c19TdWNjZXNzOw0KKwlzd2l0Y2gocHdtR2VuZXJhdG9yKQ0KKwl7DQorCWNhc2UgMDoNCisJCW1fZnBnYURJTy0+d3JpdGVET19QV01Db25maWdfT3V0cHV0U2VsZWN0XzAoUmVtYXBEaWdpdGFsQ2hhbm5lbChjaGFubmVsIC0gMSksICZsb2NhbFN0YXR1cyk7DQorCQlicmVhazsNCisJY2FzZSAxOg0KKwkJbV9mcGdhRElPLT53cml0ZURPX1BXTUNvbmZpZ19PdXRwdXRTZWxlY3RfMShSZW1hcERpZ2l0YWxDaGFubmVsKGNoYW5uZWwgLSAxKSwgJmxvY2FsU3RhdHVzKTsNCisJCWJyZWFrOw0KKwljYXNlIDI6DQorCQltX2ZwZ2FESU8tPndyaXRlRE9fUFdNQ29uZmlnX091dHB1dFNlbGVjdF8yKFJlbWFwRGlnaXRhbENoYW5uZWwoY2hhbm5lbCAtIDEpLCAmbG9jYWxTdGF0dXMpOw0KKwkJYnJlYWs7DQorCWNhc2UgMzoNCisJCW1fZnBnYURJTy0+d3JpdGVET19QV01Db25maWdfT3V0cHV0U2VsZWN0XzMoUmVtYXBEaWdpdGFsQ2hhbm5lbChjaGFubmVsIC0gMSksICZsb2NhbFN0YXR1cyk7DQorCQlicmVhazsNCisJfQ0KKwl3cGlfc2V0RXJyb3IobG9jYWxTdGF0dXMpOw0KK30NCisNCisvKioNCisgKiBDb25maWd1cmUgdGhlIGR1dHktY3ljbGUgb2YgdGhlIFBXTSBnZW5lcmF0b3INCisgKiANCisgKiBAcGFyYW0gcHdtR2VuZXJhdG9yIFRoZSBnZW5lcmF0b3IgaW5kZXggcmVzZXJ2ZWQgYnkgQWxsb2NhdGVET19QV00oKQ0KKyAqIEBwYXJhbSBkdXR5Q3ljbGUgVGhlIHBlcmNlbnQgZHV0eSBjeWNsZSB0byBvdXRwdXQgWzAuLjFdLg0KKyAqLw0KK3ZvaWQgRGlnaXRhbE1vZHVsZTo6U2V0RE9fUFdNRHV0eUN5Y2xlKFVJTlQzMiBwd21HZW5lcmF0b3IsIGZsb2F0IGR1dHlDeWNsZSkNCit7DQorCWlmIChwd21HZW5lcmF0b3IgPT0gfjB1bCkgcmV0dXJuOw0KKwlpZiAoZHV0eUN5Y2xlID4gMS4wKSBkdXR5Q3ljbGUgPSAxLjA7DQorCWlmIChkdXR5Q3ljbGUgPCAwLjApIGR1dHlDeWNsZSA9IDAuMDsNCisJZmxvYXQgcmF3RHV0eUN5Y2xlID0gMjU2LjAgKiBkdXR5Q3ljbGU7DQorCWlmIChyYXdEdXR5Q3ljbGUgPiAyNTUuNSkgcmF3RHV0eUN5Y2xlID0gMjU1LjU7DQorCXRSaW9TdGF0dXNDb2RlIGxvY2FsU3RhdHVzID0gTmlGcGdhX1N0YXR1c19TdWNjZXNzOw0KKwl7DQorCQlTeW5jaHJvbml6ZWQgc3luYyhtX2RvUHdtU2VtYXBob3JlKTsNCisJCVVJTlQ4IHB3bVBlcmlvZFBvd2VyID0gbV9mcGdhRElPLT5yZWFkRE9fUFdNQ29uZmlnX1BlcmlvZFBvd2VyKCZsb2NhbFN0YXR1cyk7DQorCQlpZiAocHdtUGVyaW9kUG93ZXIgPCA0KQ0KKwkJew0KKwkJCS8vIFRoZSByZXNvbHV0aW9uIG9mIHRoZSBkdXR5IGN5Y2xlIGRyb3BzIGNsb3NlIHRvIHRoZSBoaWdoZXN0IGZyZXF1ZW5jaWVzLg0KKwkJCXJhd0R1dHlDeWNsZSA9IHJhd0R1dHlDeWNsZSAvIHBvdygyLjAsIDQgLSBwd21QZXJpb2RQb3dlcik7DQorCQl9DQorCQltX2ZwZ2FESU8tPndyaXRlRE9fUFdNRHV0eUN5Y2xlKHB3bUdlbmVyYXRvciwgKFVJTlQ4KXJhd0R1dHlDeWNsZSwgJmxvY2FsU3RhdHVzKTsNCisJfQ0KKwl3cGlfc2V0RXJyb3IobG9jYWxTdGF0dXMpOw0KK30NCisNCisvKioNCisgKiBSZXR1cm4gYSBwb2ludGVyIHRvIGFuIEkyQyBvYmplY3QgZm9yIHRoaXMgZGlnaXRhbCBtb2R1bGUNCisgKiBUaGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBkZWxldGluZyB0aGUgcG9pbnRlci4NCisgKiANCisgKiBAcGFyYW0gYWRkcmVzcyBUaGUgYWRkcmVzcyBvZiB0aGUgZGV2aWNlIG9uIHRoZSBJMkMgYnVzDQorICogQHJldHVybiBBIHBvaW50ZXIgdG8gYW4gSTJDIG9iamVjdCB0byB0YWxrIHRvIHRoZSBkZXZpY2UgYXQgYWRkcmVzcw0KKyAqLw0KK0kyQyogRGlnaXRhbE1vZHVsZTo6R2V0STJDKFVJTlQzMiBhZGRyZXNzKQ0KK3sNCisJcmV0dXJuIG5ldyBJMkModGhpcywgYWRkcmVzcyk7DQorfQ0KKw0KKw0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0RpZ2l0YWxNb2R1bGUuaCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0RpZ2l0YWxNb2R1bGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZWIxMjMxCi0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvRGlnaXRhbE1vZHVsZS5oCkBAIC0wLDAgKzEsNjYgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorLyogQ29weXJpZ2h0IChjKSBGSVJTVCAyMDA4LiBBbGwgUmlnaHRzIFJlc2VydmVkLgkJCQkJCQkgICovDQorLyogT3BlbiBTb3VyY2UgU29mdHdhcmUgLSBtYXkgYmUgbW9kaWZpZWQgYW5kIHNoYXJlZCBieSBGUkMgdGVhbXMuIFRoZSBjb2RlICAgKi8NCisvKiBtdXN0IGJlIGFjY29tcGFuaWVkIGJ5IHRoZSBGSVJTVCBCU0QgbGljZW5zZSBmaWxlIGluICQoV0lORF9CQVNFKS9XUElMaWIuICAqLw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorI2lmbmRlZiBESUdJVEFMX01PRFVMRV9IXw0KKyNkZWZpbmUgRElHSVRBTF9NT0RVTEVfSF8NCisNCisjaW5jbHVkZSAiTW9kdWxlLmgiDQorI2luY2x1ZGUgIkNoaXBPYmplY3QuaCINCisNCitjbGFzcyBJMkM7DQorDQorY29uc3QgVUlOVDMyIGtFeHBlY3RlZExvb3BUaW1pbmcgPSAyNjA7DQorDQorY2xhc3MgRGlnaXRhbE1vZHVsZTogcHVibGljIE1vZHVsZQ0KK3sNCisJZnJpZW5kIGNsYXNzIEkyQzsNCisJZnJpZW5kIGNsYXNzIE1vZHVsZTsNCisNCitwcm90ZWN0ZWQ6DQorCWV4cGxpY2l0IERpZ2l0YWxNb2R1bGUoVUlOVDggbW9kdWxlTnVtYmVyKTsNCisJdmlydHVhbCB+RGlnaXRhbE1vZHVsZSgpOw0KKw0KK3B1YmxpYzoNCisJdm9pZCBTZXRQV00oVUlOVDMyIGNoYW5uZWwsIFVJTlQ4IHZhbHVlKTsNCisJVUlOVDggR2V0UFdNKFVJTlQzMiBjaGFubmVsKTsNCisJdm9pZCBTZXRQV01QZXJpb2RTY2FsZShVSU5UMzIgY2hhbm5lbCwgVUlOVDMyIHNxdWVsY2hNYXNrKTsNCisJdm9pZCBTZXRSZWxheUZvcndhcmQoVUlOVDMyIGNoYW5uZWwsIGJvb2wgb24pOw0KKwl2b2lkIFNldFJlbGF5UmV2ZXJzZShVSU5UMzIgY2hhbm5lbCwgYm9vbCBvbik7DQorCWJvb2wgR2V0UmVsYXlGb3J3YXJkKFVJTlQzMiBjaGFubmVsKTsNCisJVUlOVDggR2V0UmVsYXlGb3J3YXJkKCk7DQorCWJvb2wgR2V0UmVsYXlSZXZlcnNlKFVJTlQzMiBjaGFubmVsKTsNCisJVUlOVDggR2V0UmVsYXlSZXZlcnNlKCk7DQorCWJvb2wgQWxsb2NhdGVESU8oVUlOVDMyIGNoYW5uZWwsIGJvb2wgaW5wdXQpOw0KKwl2b2lkIEZyZWVESU8oVUlOVDMyIGNoYW5uZWwpOw0KKwl2b2lkIFNldERJTyhVSU5UMzIgY2hhbm5lbCwgc2hvcnQgdmFsdWUpOw0KKwlib29sIEdldERJTyhVSU5UMzIgY2hhbm5lbCk7DQorCVVJTlQxNiBHZXRESU8oKTsNCisJYm9vbCBHZXRESU9EaXJlY3Rpb24oVUlOVDMyIGNoYW5uZWwpOw0KKwlVSU5UMTYgR2V0RElPRGlyZWN0aW9uKCk7DQorCXZvaWQgUHVsc2UoVUlOVDMyIGNoYW5uZWwsIGZsb2F0IHB1bHNlTGVuZ3RoKTsNCisJYm9vbCBJc1B1bHNpbmcoVUlOVDMyIGNoYW5uZWwpOw0KKwlib29sIElzUHVsc2luZygpOw0KKwlVSU5UMzIgQWxsb2NhdGVET19QV00oKTsNCisJdm9pZCBGcmVlRE9fUFdNKFVJTlQzMiBwd21HZW5lcmF0b3IpOw0KKwl2b2lkIFNldERPX1BXTVJhdGUoZmxvYXQgcmF0ZSk7DQorCXZvaWQgU2V0RE9fUFdNRHV0eUN5Y2xlKFVJTlQzMiBwd21HZW5lcmF0b3IsIGZsb2F0IGR1dHlDeWNsZSk7DQorCXZvaWQgU2V0RE9fUFdNT3V0cHV0Q2hhbm5lbChVSU5UMzIgcHdtR2VuZXJhdG9yLCBVSU5UMzIgY2hhbm5lbCk7DQorDQorCUkyQyogR2V0STJDKFVJTlQzMiBhZGRyZXNzKTsNCisNCisJc3RhdGljIERpZ2l0YWxNb2R1bGUqIEdldEluc3RhbmNlKFVJTlQ4IG1vZHVsZU51bWJlcik7DQorCXN0YXRpYyBVSU5UOCBSZW1hcERpZ2l0YWxDaGFubmVsKFVJTlQzMiBjaGFubmVsKSB7IHJldHVybiAxNSAtIGNoYW5uZWw7IH07IC8vIFRPRE86IE5lZWQgY2hhbm5lbCB2YWxpZGF0aW9uDQorCXN0YXRpYyBVSU5UOCBVbm1hcERpZ2l0YWxDaGFubmVsKFVJTlQzMiBjaGFubmVsKSB7IHJldHVybiAxNSAtIGNoYW5uZWw7IH07IC8vIFRPRE86IE5lZWQgY2hhbm5lbCB2YWxpZGF0aW9uDQorDQorcHJpdmF0ZToNCisJU0VNX0lEIG1fZGlnaXRhbFNlbWFwaG9yZTsNCisJU0VNX0lEIG1fcmVsYXlTZW1hcGhvcmU7DQorCVNFTV9JRCBtX2RvUHdtU2VtYXBob3JlOw0KKwl0RElPICptX2ZwZ2FESU87DQorfTsNCisNCisjZW5kaWYNCisNCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9EaWdpdGFsT3V0cHV0LmNwcCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0RpZ2l0YWxPdXRwdXQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3NWIyNjQKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9EaWdpdGFsT3V0cHV0LmNwcApAQCAtMCwwICsxLDMxMSBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBDb3B5cmlnaHQgKGMpIEZJUlNUIDIwMDguIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCQkJCQkJCSAgKi8NCisvKiBPcGVuIFNvdXJjZSBTb2Z0d2FyZSAtIG1heSBiZSBtb2RpZmllZCBhbmQgc2hhcmVkIGJ5IEZSQyB0ZWFtcy4gVGhlIGNvZGUgICAqLw0KKy8qIG11c3QgYmUgYWNjb21wYW5pZWQgYnkgdGhlIEZJUlNUIEJTRCBsaWNlbnNlIGZpbGUgaW4gJChXSU5EX0JBU0UpL1dQSUxpYi4gICovDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisjaW5jbHVkZSAiRGlnaXRhbE91dHB1dC5oIg0KKyNpbmNsdWRlICJEaWdpdGFsTW9kdWxlLmgiDQorI2luY2x1ZGUgIk5ldHdvcmtDb21tdW5pY2F0aW9uL1VzYWdlUmVwb3J0aW5nLmgiDQorI2luY2x1ZGUgIlJlc291cmNlLmgiDQorI2luY2x1ZGUgIldQSUVycm9ycy5oIg0KKw0KK2V4dGVybiBSZXNvdXJjZSAqaW50ZXJydXB0c1Jlc291cmNlOw0KKw0KKy8qKg0KKyAqIENyZWF0ZSBhbiBpbnN0YW5jZSBvZiBhIERpZ2l0YWxPdXRwdXQuDQorICogQ3JlYXRlcyBhIGRpZ2l0YWwgb3V0cHV0IGdpdmVuIGEgc2xvdCBhbmQgY2hhbm5lbC4gQ29tbW9uIGNyZWF0aW9uIHJvdXRpbmUNCisgKiBmb3IgYWxsIGNvbnN0cnVjdG9ycy4NCisgKi8NCit2b2lkIERpZ2l0YWxPdXRwdXQ6OkluaXREaWdpdGFsT3V0cHV0KFVJTlQ4IG1vZHVsZU51bWJlciwgVUlOVDMyIGNoYW5uZWwpDQorew0KKwljaGFyIGJ1Zls2NF07DQorCWlmICghQ2hlY2tEaWdpdGFsTW9kdWxlKG1vZHVsZU51bWJlcikpDQorCXsNCisJCXNucHJpbnRmKGJ1ZiwgNjQsICJEaWdpdGFsIE1vZHVsZSAlZCIsIG1vZHVsZU51bWJlcik7DQorCQl3cGlfc2V0V1BJRXJyb3JXaXRoQ29udGV4dChNb2R1bGVJbmRleE91dE9mUmFuZ2UsIGJ1Zik7DQorCQlyZXR1cm47DQorCX0NCisJaWYgKCFDaGVja0RpZ2l0YWxDaGFubmVsKGNoYW5uZWwpKQ0KKwl7DQorCQlzbnByaW50ZihidWYsIDY0LCAiRGlnaXRhbCBDaGFubmVsICVkIiwgY2hhbm5lbCk7DQorCQl3cGlfc2V0V1BJRXJyb3JXaXRoQ29udGV4dChDaGFubmVsSW5kZXhPdXRPZlJhbmdlLCBidWYpOw0KKwkJcmV0dXJuOw0KKwl9DQorCW1fY2hhbm5lbCA9IGNoYW5uZWw7DQorCW1fcHdtR2VuZXJhdG9yID0gfjB1bDsNCisJbV9tb2R1bGUgPSBEaWdpdGFsTW9kdWxlOjpHZXRJbnN0YW5jZShtb2R1bGVOdW1iZXIpOw0KKwltX21vZHVsZS0+QWxsb2NhdGVESU8obV9jaGFubmVsLCBmYWxzZSk7DQorDQorCW5Vc2FnZVJlcG9ydGluZzo6cmVwb3J0KG5Vc2FnZVJlcG9ydGluZzo6a1Jlc291cmNlVHlwZV9EaWdpdGFsT3V0cHV0LCBjaGFubmVsLCBtb2R1bGVOdW1iZXIgLSAxKTsNCit9DQorDQorLyoqDQorICogQ3JlYXRlIGFuIGluc3RhbmNlIG9mIGEgZGlnaXRhbCBvdXRwdXQuDQorICogQ3JlYXRlIGEgZGlnaXRhbCBvdXRwdXQgZ2l2ZW4gYSBjaGFubmVsLiBUaGUgZGVmYXVsdCBtb2R1bGUgaXMgdXNlZC4NCisgKg0KKyAqIEBwYXJhbSBjaGFubmVsIFRoZSBkaWdpdGFsIGNoYW5uZWwgKDEuLjE0KS4NCisgKi8NCitEaWdpdGFsT3V0cHV0OjpEaWdpdGFsT3V0cHV0KFVJTlQzMiBjaGFubmVsKQ0KK3sNCisJSW5pdERpZ2l0YWxPdXRwdXQoR2V0RGVmYXVsdERpZ2l0YWxNb2R1bGUoKSwgY2hhbm5lbCk7DQorfQ0KKw0KKy8qKg0KKyAqIENyZWF0ZSBhbiBpbnN0YW5jZSBvZiBhIGRpZ2l0YWwgb3V0cHV0Lg0KKyAqIENyZWF0ZSBhbiBpbnN0YW5jZSBvZiBhIGRpZ2l0YWwgb3V0cHV0IGdpdmVuIGEgbW9kdWxlIG51bWJlciBhbmQgY2hhbm5lbC4NCisgKg0KKyAqIEBwYXJhbSBtb2R1bGVOdW1iZXIgVGhlIGRpZ2l0YWwgbW9kdWxlICgxIG9yIDIpLg0KKyAqIEBwYXJhbSBjaGFubmVsIFRoZSBkaWdpdGFsIGNoYW5uZWwgKDEuLjE0KS4NCisgKi8NCitEaWdpdGFsT3V0cHV0OjpEaWdpdGFsT3V0cHV0KFVJTlQ4IG1vZHVsZU51bWJlciwgVUlOVDMyIGNoYW5uZWwpDQorew0KKwlJbml0RGlnaXRhbE91dHB1dChtb2R1bGVOdW1iZXIsIGNoYW5uZWwpOw0KK30NCisNCisvKioNCisgKiBGcmVlIHRoZSByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIGEgZGlnaXRhbCBvdXRwdXQuDQorICovDQorRGlnaXRhbE91dHB1dDo6fkRpZ2l0YWxPdXRwdXQoKQ0KK3sNCisJaWYgKFN0YXR1c0lzRmF0YWwoKSkgcmV0dXJuOw0KKwkvLyBEaXNhYmxlIHRoZSBQV00gaW4gY2FzZSBpdCB3YXMgcnVubmluZy4NCisJRGlzYWJsZVBXTSgpOw0KKwltX21vZHVsZS0+RnJlZURJTyhtX2NoYW5uZWwpOw0KK30NCisNCisvKioNCisgKiBTZXQgdGhlIHZhbHVlIG9mIGEgZGlnaXRhbCBvdXRwdXQuDQorICogU2V0IHRoZSB2YWx1ZSBvZiBhIGRpZ2l0YWwgb3V0cHV0IHRvIGVpdGhlciBvbmUgKHRydWUpIG9yIHplcm8gKGZhbHNlKS4NCisgKi8NCit2b2lkIERpZ2l0YWxPdXRwdXQ6OlNldChVSU5UMzIgdmFsdWUpDQorew0KKwlpZiAoU3RhdHVzSXNGYXRhbCgpKSByZXR1cm47DQorCW1fbW9kdWxlLT5TZXRESU8obV9jaGFubmVsLCB2YWx1ZSk7DQorfQ0KKw0KKy8qKg0KKyAqIEByZXR1cm4gVGhlIEdQSU8gY2hhbm5lbCBudW1iZXIgdGhhdCB0aGlzIG9iamVjdCByZXByZXNlbnRzLg0KKyAqLw0KK1VJTlQzMiBEaWdpdGFsT3V0cHV0OjpHZXRDaGFubmVsKCkNCit7DQorCXJldHVybiBtX2NoYW5uZWw7DQorfQ0KKw0KKy8qKg0KKyAqIE91dHB1dCBhIHNpbmdsZSBwdWxzZSBvbiB0aGUgZGlnaXRhbCBvdXRwdXQgbGluZS4NCisgKiBTZW5kIGEgc2luZ2xlIHB1bHNlIG9uIHRoZSBkaWdpdGFsIG91dHB1dCBsaW5lIHdoZXJlIHRoZSBwdWxzZSBkaXJhdGlvbiBpcyBzcGVjaWZpZWQgaW4gc2Vjb25kcy4NCisgKiBNYXhpbXVtIHB1bHNlIGxlbmd0aCBpcyAwLjAwMTYgc2Vjb25kcy4NCisgKiBAcGFyYW0gbGVuZ3RoIFRoZSBwdWxzZWxlbmd0aCBpbiBzZWNvbmRzDQorICovDQordm9pZCBEaWdpdGFsT3V0cHV0OjpQdWxzZShmbG9hdCBsZW5ndGgpDQorew0KKwlpZiAoU3RhdHVzSXNGYXRhbCgpKSByZXR1cm47DQorCW1fbW9kdWxlLT5QdWxzZShtX2NoYW5uZWwsIGxlbmd0aCk7DQorfQ0KKw0KKy8qKg0KKyAqIERldGVybWluZSBpZiB0aGUgcHVsc2UgaXMgc3RpbGwgZ29pbmcuDQorICogRGV0ZXJtaW5lIGlmIGEgcHJldmlvdXNseSBzdGFydGVkIHB1bHNlIGlzIHN0aWxsIGdvaW5nLg0KKyAqLw0KK2Jvb2wgRGlnaXRhbE91dHB1dDo6SXNQdWxzaW5nKCkNCit7DQorCWlmIChTdGF0dXNJc0ZhdGFsKCkpIHJldHVybiBmYWxzZTsNCisJcmV0dXJuIG1fbW9kdWxlLT5Jc1B1bHNpbmcobV9jaGFubmVsKTsNCit9DQorDQorLyoqDQorICogQ2hhbmdlIHRoZSBQV00gZnJlcXVlbmN5IG9mIHRoZSBQV00gb3V0cHV0IG9uIGEgRGlnaXRhbCBPdXRwdXQgbGluZS4NCisgKiANCisgKiBUaGUgdmFsaWQgcmFuZ2UgaXMgZnJvbSAwLjYgSHogdG8gMTkga0h6LiAgVGhlIGZyZXF1ZW5jeSByZXNvbHV0aW9uIGlzIGxvZ2FyaXRobWljLg0KKyAqIA0KKyAqIFRoZXJlIGlzIG9ubHkgb25lIFBXTSBmcmVxdWVuY3kgcGVyIGRpZ2l0YWwgbW9kdWxlLg0KKyAqIA0KKyAqIEBwYXJhbSByYXRlIFRoZSBmcmVxdWVuY3kgdG8gb3V0cHV0IGFsbCBkaWdpdGFsIG91dHB1dCBQV00gc2lnbmFscyBvbiB0aGlzIG1vZHVsZS4NCisgKi8NCit2b2lkIERpZ2l0YWxPdXRwdXQ6OlNldFBXTVJhdGUoZmxvYXQgcmF0ZSkNCit7DQorCWlmIChTdGF0dXNJc0ZhdGFsKCkpIHJldHVybjsNCisJbV9tb2R1bGUtPlNldERPX1BXTVJhdGUocmF0ZSk7DQorfQ0KKw0KKy8qKg0KKyAqIEVuYWJsZSBhIFBXTSBPdXRwdXQgb24gdGhpcyBsaW5lLg0KKyAqIA0KKyAqIEFsbG9jYXRlIG9uZSBvZiB0aGUgNCBETyBQV00gZ2VuZXJhdG9yIHJlc291cmNlcyBmcm9tIHRoaXMgbW9kdWxlLg0KKyAqIA0KKyAqIFN1cHBseSB0aGUgaW5pdGlhbCBkdXR5LWN5Y2xlIHRvIG91dHB1dCBzbyBhcyB0byBhdm9pZCBhIGdsaXRjaCB3aGVuIGZpcnN0IHN0YXJ0aW5nLg0KKyAqIA0KKyAqIFRoZSByZXNvbHV0aW9uIG9mIHRoZSBkdXR5IGN5Y2xlIGlzIDgtYml0IGZvciBsb3cgZnJlcXVlbmNpZXMgKDFrSHogb3IgbGVzcykNCisgKiBidXQgaXMgcmVkdWNlZCB0aGUgaGlnaGVyIHRoZSBmcmVxdWVuY3kgb2YgdGhlIFBXTSBzaWduYWwgaXMuDQorICogDQorICogQHBhcmFtIGluaXRpYWxEdXR5Q3ljbGUgVGhlIGR1dHktY3ljbGUgdG8gc3RhcnQgZ2VuZXJhdGluZy4gWzAuLjFdDQorICovDQordm9pZCBEaWdpdGFsT3V0cHV0OjpFbmFibGVQV00oZmxvYXQgaW5pdGlhbER1dHlDeWNsZSkNCit7DQorCWlmIChTdGF0dXNJc0ZhdGFsKCkpIHJldHVybjsNCisJaWYgKG1fcHdtR2VuZXJhdG9yICE9IH4wdWwpIHJldHVybjsNCisJbV9wd21HZW5lcmF0b3IgPSBtX21vZHVsZS0+QWxsb2NhdGVET19QV00oKTsNCisJbV9tb2R1bGUtPlNldERPX1BXTUR1dHlDeWNsZShtX3B3bUdlbmVyYXRvciwgaW5pdGlhbER1dHlDeWNsZSk7DQorCW1fbW9kdWxlLT5TZXRET19QV01PdXRwdXRDaGFubmVsKG1fcHdtR2VuZXJhdG9yLCBtX2NoYW5uZWwpOw0KK30NCisNCisvKioNCisgKiBDaGFuZ2UgdGhpcyBsaW5lIGZyb20gYSBQV00gb3V0cHV0IGJhY2sgdG8gYSBzdGF0aWMgRGlnaXRhbCBPdXRwdXQgbGluZS4NCisgKiANCisgKiBGcmVlIHVwIG9uZSBvZiB0aGUgNCBETyBQV00gZ2VuZXJhdG9yIHJlc291cmNlcyB0aGF0IHdlcmUgaW4gdXNlLg0KKyAqLw0KK3ZvaWQgRGlnaXRhbE91dHB1dDo6RGlzYWJsZVBXTSgpDQorew0KKwlpZiAoU3RhdHVzSXNGYXRhbCgpKSByZXR1cm47DQorCS8vIERpc2FibGUgdGhlIG91dHB1dCBieSByb3V0aW5nIHRvIGEgZGVhZCBiaXQuDQorCW1fbW9kdWxlLT5TZXRET19QV01PdXRwdXRDaGFubmVsKG1fcHdtR2VuZXJhdG9yLCBrRGlnaXRhbENoYW5uZWxzKTsNCisJbV9tb2R1bGUtPkZyZWVET19QV00obV9wd21HZW5lcmF0b3IpOw0KKwltX3B3bUdlbmVyYXRvciA9IH4wdWw7DQorfQ0KKw0KKy8qKg0KKyAqIENoYW5nZSB0aGUgZHV0eS1jeWNsZSB0aGF0IGlzIGJlaW5nIGdlbmVyYXRlZCBvbiB0aGUgbGluZS4NCisgKiANCisgKiBUaGUgcmVzb2x1dGlvbiBvZiB0aGUgZHV0eSBjeWNsZSBpcyA4LWJpdCBmb3IgbG93IGZyZXF1ZW5jaWVzICgxa0h6IG9yIGxlc3MpDQorICogYnV0IGlzIHJlZHVjZWQgdGhlIGhpZ2hlciB0aGUgZnJlcXVlbmN5IG9mIHRoZSBQV00gc2lnbmFsIGlzLg0KKyAqIA0KKyAqIEBwYXJhbSBkdXR5Q3ljbGUgVGhlIGR1dHktY3ljbGUgdG8gY2hhbmdlIHRvLiBbMC4uMV0NCisgKi8NCit2b2lkIERpZ2l0YWxPdXRwdXQ6OlVwZGF0ZUR1dHlDeWNsZShmbG9hdCBkdXR5Q3ljbGUpDQorew0KKwlpZiAoU3RhdHVzSXNGYXRhbCgpKSByZXR1cm47DQorCW1fbW9kdWxlLT5TZXRET19QV01EdXR5Q3ljbGUobV9wd21HZW5lcmF0b3IsIGR1dHlDeWNsZSk7DQorfQ0KKw0KKy8qKg0KKyAqIEByZXR1cm4gVGhlIHZhbHVlIHRvIGJlIHdyaXR0ZW4gdG8gdGhlIGNoYW5uZWwgZmllbGQgb2YgYSByb3V0aW5nIG11eC4NCisgKi8NCitVSU5UMzIgRGlnaXRhbE91dHB1dDo6R2V0Q2hhbm5lbEZvclJvdXRpbmcoKQ0KK3sNCisJcmV0dXJuIERpZ2l0YWxNb2R1bGU6OlJlbWFwRGlnaXRhbENoYW5uZWwoR2V0Q2hhbm5lbCgpIC0gMSk7DQorfQ0KKw0KKy8qKg0KKyAqIEByZXR1cm4gVGhlIHZhbHVlIHRvIGJlIHdyaXR0ZW4gdG8gdGhlIG1vZHVsZSBmaWVsZCBvZiBhIHJvdXRpbmcgbXV4Lg0KKyAqLw0KK1VJTlQzMiBEaWdpdGFsT3V0cHV0OjpHZXRNb2R1bGVGb3JSb3V0aW5nKCkNCit7DQorCWlmIChTdGF0dXNJc0ZhdGFsKCkpIHJldHVybiAwOw0KKwlyZXR1cm4gbV9tb2R1bGUtPkdldE51bWJlcigpIC0gMTsNCit9DQorDQorLyoqDQorICogQHJldHVybiBUaGUgdmFsdWUgdG8gYmUgd3JpdHRlbiB0byB0aGUgYW5hbG9nIHRyaWdnZXIgZmllbGQgb2YgYSByb3V0aW5nIG11eC4NCisgKi8NCitib29sIERpZ2l0YWxPdXRwdXQ6OkdldEFuYWxvZ1RyaWdnZXJGb3JSb3V0aW5nKCkNCit7DQorCXJldHVybiBmYWxzZTsNCit9DQorDQorLyoqDQorICogUmVxdWVzdCBpbnRlcnJ1cHRzIGFzeW5jaHJvbm91c2x5IG9uIHRoaXMgZGlnaXRhbCBvdXRwdXQuDQorICogQHBhcmFtIGhhbmRsZXIgVGhlIGFkZHJlc3Mgb2YgdGhlIGludGVycnVwdCBoYW5kbGVyIGZ1bmN0aW9uIG9mIHR5cGUgdEludGVycnVwdEhhbmRsZXIgdGhhdA0KKyAqIHdpbGwgYmUgY2FsbGVkIHdoZW5ldmVyIHRoZXJlIGlzIGFuIGludGVycnVwdCBvbiB0aGUgZGlnaXRpYWwgb3V0cHV0IHBvcnQuDQorICogUmVxdWVzdCBpbnRlcnJ1cHRzIGluIHN5bmNocm9udXMgbW9kZSB3aGVyZSB0aGUgdXNlciBwcm9ncmFtIGludGVycnVwdCBoYW5kbGVyIHdpbGwgYmUNCisgKiBjYWxsZWQgd2hlbiBhbiBpbnRlcnJ1cHQgb2NjdXJzLg0KKyAqIFRoZSBkZWZhdWx0IGlzIGludGVycnVwdCBvbiByaXNpbmcgZWRnZXMgb25seS4NCisgKi8NCit2b2lkIERpZ2l0YWxPdXRwdXQ6OlJlcXVlc3RJbnRlcnJ1cHRzKHRJbnRlcnJ1cHRIYW5kbGVyIGhhbmRsZXIsIHZvaWQgKnBhcmFtKQ0KK3sNCisJaWYgKFN0YXR1c0lzRmF0YWwoKSkgcmV0dXJuOw0KKwlVSU5UMzIgaW5kZXggPSBpbnRlcnJ1cHRzUmVzb3VyY2UtPkFsbG9jYXRlKCJTeW5jIEludGVycnVwdCIpOw0KKwlpZiAoaW5kZXggPT0gfjB1bCkNCisJew0KKwkJQ2xvbmVFcnJvcihpbnRlcnJ1cHRzUmVzb3VyY2UpOw0KKwkJcmV0dXJuOw0KKwl9DQorCW1faW50ZXJydXB0SW5kZXggPSBpbmRleDsNCisNCisJLy8gQ3JlYXRlcyBhIG1hbmFnZXIgdG9vDQorCUFsbG9jYXRlSW50ZXJydXB0cyhmYWxzZSk7DQorDQorCXRSaW9TdGF0dXNDb2RlIGxvY2FsU3RhdHVzID0gTmlGcGdhX1N0YXR1c19TdWNjZXNzOw0KKwltX2ludGVycnVwdC0+d3JpdGVDb25maWdfV2FpdEZvckFjayhmYWxzZSwgJmxvY2FsU3RhdHVzKTsNCisJbV9pbnRlcnJ1cHQtPndyaXRlQ29uZmlnX1NvdXJjZV9BbmFsb2dUcmlnZ2VyKEdldEFuYWxvZ1RyaWdnZXJGb3JSb3V0aW5nKCksICZsb2NhbFN0YXR1cyk7DQorCW1faW50ZXJydXB0LT53cml0ZUNvbmZpZ19Tb3VyY2VfQ2hhbm5lbChHZXRDaGFubmVsRm9yUm91dGluZygpLCAmbG9jYWxTdGF0dXMpOw0KKwltX2ludGVycnVwdC0+d3JpdGVDb25maWdfU291cmNlX01vZHVsZShHZXRNb2R1bGVGb3JSb3V0aW5nKCksICZsb2NhbFN0YXR1cyk7DQorCVNldFVwU291cmNlRWRnZSh0cnVlLCBmYWxzZSk7DQorDQorCW1fbWFuYWdlci0+cmVnaXN0ZXJIYW5kbGVyKGhhbmRsZXIsIHBhcmFtLCAmbG9jYWxTdGF0dXMpOw0KKwl3cGlfc2V0RXJyb3IobG9jYWxTdGF0dXMpOw0KK30NCisNCisvKioNCisgKiBSZXF1ZXN0IGludGVycnVwdHMgc3luY2hyb25vdXNseSBvbiB0aGlzIGRpZ2l0YWwgb3V0cHV0Lg0KKyAqIFJlcXVlc3QgaW50ZXJydXB0cyBpbiBzeW5jaHJvbnVzIG1vZGUgd2hlcmUgdGhlIHVzZXIgcHJvZ3JhbSB3aWxsIGhhdmUgdG8gZXhwbGljaXRseQ0KKyAqIHdhaXQgZm9yIHRoZSBpbnRlcnJ1cHQgdG8gb2NjdXIuDQorICogVGhlIGRlZmF1bHQgaXMgaW50ZXJydXB0IG9uIHJpc2luZyBlZGdlcyBvbmx5Lg0KKyAqLw0KK3ZvaWQgRGlnaXRhbE91dHB1dDo6UmVxdWVzdEludGVycnVwdHMoKQ0KK3sNCisJaWYgKFN0YXR1c0lzRmF0YWwoKSkgcmV0dXJuOw0KKwlVSU5UMzIgaW5kZXggPSBpbnRlcnJ1cHRzUmVzb3VyY2UtPkFsbG9jYXRlKCJTeW5jIEludGVycnVwdCIpOw0KKwlpZiAoaW5kZXggPT0gfjB1bCkNCisJew0KKwkJQ2xvbmVFcnJvcihpbnRlcnJ1cHRzUmVzb3VyY2UpOw0KKwkJcmV0dXJuOw0KKwl9DQorCW1faW50ZXJydXB0SW5kZXggPSBpbmRleDsNCisNCisJQWxsb2NhdGVJbnRlcnJ1cHRzKHRydWUpOw0KKw0KKwl0UmlvU3RhdHVzQ29kZSBsb2NhbFN0YXR1cyA9IE5pRnBnYV9TdGF0dXNfU3VjY2VzczsNCisJbV9pbnRlcnJ1cHQtPndyaXRlQ29uZmlnX1NvdXJjZV9BbmFsb2dUcmlnZ2VyKEdldEFuYWxvZ1RyaWdnZXJGb3JSb3V0aW5nKCksICZsb2NhbFN0YXR1cyk7DQorCW1faW50ZXJydXB0LT53cml0ZUNvbmZpZ19Tb3VyY2VfQ2hhbm5lbChHZXRDaGFubmVsRm9yUm91dGluZygpLCAmbG9jYWxTdGF0dXMpOw0KKwltX2ludGVycnVwdC0+d3JpdGVDb25maWdfU291cmNlX01vZHVsZShHZXRNb2R1bGVGb3JSb3V0aW5nKCksICZsb2NhbFN0YXR1cyk7DQorCVNldFVwU291cmNlRWRnZSh0cnVlLCBmYWxzZSk7DQorCXdwaV9zZXRFcnJvcihsb2NhbFN0YXR1cyk7DQorfQ0KKw0KK3ZvaWQgRGlnaXRhbE91dHB1dDo6U2V0VXBTb3VyY2VFZGdlKGJvb2wgcmlzaW5nRWRnZSwgYm9vbCBmYWxsaW5nRWRnZSkNCit7DQorCWlmIChTdGF0dXNJc0ZhdGFsKCkpIHJldHVybjsNCisJaWYgKG1faW50ZXJydXB0ID09IE5VTEwpDQorCXsNCisJCXdwaV9zZXRXUElFcnJvcldpdGhDb250ZXh0KE51bGxQYXJhbWV0ZXIsICJZb3UgbXVzdCBjYWxsIFJlcXVlc3RJbnRlcnJ1cHRzIGJlZm9yZSBTZXRVcFNvdXJjZUVkZ2UiKTsNCisJCXJldHVybjsNCisJfQ0KKwl0UmlvU3RhdHVzQ29kZSBsb2NhbFN0YXR1cyA9IE5pRnBnYV9TdGF0dXNfU3VjY2VzczsNCisJaWYgKG1faW50ZXJydXB0ICE9IE5VTEwpDQorCXsNCisJCW1faW50ZXJydXB0LT53cml0ZUNvbmZpZ19SaXNpbmdFZGdlKHJpc2luZ0VkZ2UsICZsb2NhbFN0YXR1cyk7DQorCQltX2ludGVycnVwdC0+d3JpdGVDb25maWdfRmFsbGluZ0VkZ2UoZmFsbGluZ0VkZ2UsICZsb2NhbFN0YXR1cyk7DQorCX0NCisJd3BpX3NldEVycm9yKGxvY2FsU3RhdHVzKTsNCit9DQorDQordm9pZCBEaWdpdGFsT3V0cHV0OjpWYWx1ZUNoYW5nZWQoSVRhYmxlKiBzb3VyY2UsIGNvbnN0IHN0ZDo6c3RyaW5nJiBrZXksIEVudHJ5VmFsdWUgdmFsdWUsIGJvb2wgaXNOZXcpIHsNCisJU2V0KHZhbHVlLmIpOw0KK30NCisNCit2b2lkIERpZ2l0YWxPdXRwdXQ6OlVwZGF0ZVRhYmxlKCkgew0KK30NCisNCit2b2lkIERpZ2l0YWxPdXRwdXQ6OlN0YXJ0TGl2ZVdpbmRvd01vZGUoKSB7DQorCW1fdGFibGUtPkFkZFRhYmxlTGlzdGVuZXIoIlZhbHVlIiwgdGhpcywgdHJ1ZSk7DQorfQ0KKw0KK3ZvaWQgRGlnaXRhbE91dHB1dDo6U3RvcExpdmVXaW5kb3dNb2RlKCkgew0KKwltX3RhYmxlLT5SZW1vdmVUYWJsZUxpc3RlbmVyKHRoaXMpOw0KK30NCisNCitzdGQ6OnN0cmluZyBEaWdpdGFsT3V0cHV0OjpHZXRTbWFydERhc2hib2FyZFR5cGUoKSB7DQorCXJldHVybiAiRGlnaXRhbCBPdXRwdXQiOw0KK30NCisNCit2b2lkIERpZ2l0YWxPdXRwdXQ6OkluaXRUYWJsZShJVGFibGUgKnN1YlRhYmxlKSB7DQorCW1fdGFibGUgPSBzdWJUYWJsZTsNCisJVXBkYXRlVGFibGUoKTsNCit9DQorDQorSVRhYmxlICogRGlnaXRhbE91dHB1dDo6R2V0VGFibGUoKSB7DQorCXJldHVybiBtX3RhYmxlOw0KK30NCisNCisNCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9EaWdpdGFsT3V0cHV0LmggYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9EaWdpdGFsT3V0cHV0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGExOTNjNwotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0RpZ2l0YWxPdXRwdXQuaApAQCAtMCwwICsxLDYzIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy8qIENvcHlyaWdodCAoYykgRklSU1QgMjAwOC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4JCQkJCQkJICAqLw0KKy8qIE9wZW4gU291cmNlIFNvZnR3YXJlIC0gbWF5IGJlIG1vZGlmaWVkIGFuZCBzaGFyZWQgYnkgRlJDIHRlYW1zLiBUaGUgY29kZSAgICovDQorLyogbXVzdCBiZSBhY2NvbXBhbmllZCBieSB0aGUgRklSU1QgQlNEIGxpY2Vuc2UgZmlsZSBpbiAkKFdJTkRfQkFTRSkvV1BJTGliLiAgKi8NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKyNpZm5kZWYgRElHSVRBTF9PVVRQVVRfSF8NCisjZGVmaW5lIERJR0lUQUxfT1VUUFVUX0hfDQorDQorI2luY2x1ZGUgIkRpZ2l0YWxTb3VyY2UuaCINCisjaW5jbHVkZSAiTGl2ZVdpbmRvdy9MaXZlV2luZG93U2VuZGFibGUuaCINCisjaW5jbHVkZSAidGFibGVzL0lUYWJsZUxpc3RlbmVyLmgiDQorDQorY2xhc3MgRGlnaXRhbE1vZHVsZTsNCisNCisvKioNCisgKiBDbGFzcyB0byB3cml0ZSB0byBkaWdpdGFsIG91dHB1dHMuDQorICogV3JpdGUgdmFsdWVzIHRvIHRoZSBkaWdpdGFsIG91dHB1dCBjaGFubmVscy4gT3RoZXIgZGV2aWNlcyBpbXBsZW1lbnRlZCBlbHNld2hlcmUgd2lsbCBhbGxvY2F0ZQ0KKyAqIGNoYW5uZWxzIGF1dG9tYXRpY2FsbHkgc28gZm9yIHRob3NlIGRldmljZXMgaXQgc2hvdWxkbid0IGJlIGRvbmUgaGVyZS4NCisgKi8NCitjbGFzcyBEaWdpdGFsT3V0cHV0IDogcHVibGljIERpZ2l0YWxTb3VyY2UsIHB1YmxpYyBJVGFibGVMaXN0ZW5lciwgcHVibGljIExpdmVXaW5kb3dTZW5kYWJsZQ0KK3sNCitwdWJsaWM6DQorCWV4cGxpY2l0IERpZ2l0YWxPdXRwdXQoVUlOVDMyIGNoYW5uZWwpOw0KKwlEaWdpdGFsT3V0cHV0KFVJTlQ4IG1vZHVsZU51bWJlciwgVUlOVDMyIGNoYW5uZWwpOw0KKwl2aXJ0dWFsIH5EaWdpdGFsT3V0cHV0KCk7DQorCXZvaWQgU2V0KFVJTlQzMiB2YWx1ZSk7DQorCVVJTlQzMiBHZXRDaGFubmVsKCk7DQorCXZvaWQgUHVsc2UoZmxvYXQgbGVuZ3RoKTsNCisJYm9vbCBJc1B1bHNpbmcoKTsNCisJdm9pZCBTZXRQV01SYXRlKGZsb2F0IHJhdGUpOw0KKwl2b2lkIEVuYWJsZVBXTShmbG9hdCBpbml0aWFsRHV0eUN5Y2xlKTsNCisJdm9pZCBEaXNhYmxlUFdNKCk7DQorCXZvaWQgVXBkYXRlRHV0eUN5Y2xlKGZsb2F0IGR1dHlDeWNsZSk7DQorDQorCS8vIERpZ2l0YWwgU291cmNlIEludGVyZmFjZQ0KKwl2aXJ0dWFsIFVJTlQzMiBHZXRDaGFubmVsRm9yUm91dGluZygpOw0KKwl2aXJ0dWFsIFVJTlQzMiBHZXRNb2R1bGVGb3JSb3V0aW5nKCk7DQorCXZpcnR1YWwgYm9vbCBHZXRBbmFsb2dUcmlnZ2VyRm9yUm91dGluZygpOw0KKwl2aXJ0dWFsIHZvaWQgUmVxdWVzdEludGVycnVwdHModEludGVycnVwdEhhbmRsZXIgaGFuZGxlciwgdm9pZCAqcGFyYW0pOw0KKwl2aXJ0dWFsIHZvaWQgUmVxdWVzdEludGVycnVwdHMoKTsNCisNCisJdm9pZCBTZXRVcFNvdXJjZUVkZ2UoYm9vbCByaXNpbmdFZGdlLCBib29sIGZhbGxpbmdFZGdlKTsNCisJDQorCXZpcnR1YWwgdm9pZCBWYWx1ZUNoYW5nZWQoSVRhYmxlKiBzb3VyY2UsIGNvbnN0IHN0ZDo6c3RyaW5nJiBrZXksIEVudHJ5VmFsdWUgdmFsdWUsIGJvb2wgaXNOZXcpOw0KKwl2b2lkIFVwZGF0ZVRhYmxlKCk7DQorCXZvaWQgU3RhcnRMaXZlV2luZG93TW9kZSgpOw0KKwl2b2lkIFN0b3BMaXZlV2luZG93TW9kZSgpOw0KKwlzdGQ6OnN0cmluZyBHZXRTbWFydERhc2hib2FyZFR5cGUoKTsNCisJdm9pZCBJbml0VGFibGUoSVRhYmxlICpzdWJUYWJsZSk7DQorCUlUYWJsZSAqIEdldFRhYmxlKCk7DQorDQorcHJpdmF0ZToNCisJdm9pZCBJbml0RGlnaXRhbE91dHB1dChVSU5UOCBtb2R1bGVOdW1iZXIsIFVJTlQzMiBjaGFubmVsKTsNCisNCisJVUlOVDMyIG1fY2hhbm5lbDsNCisJVUlOVDMyIG1fcHdtR2VuZXJhdG9yOw0KKwlEaWdpdGFsTW9kdWxlICptX21vZHVsZTsNCisJDQorCUlUYWJsZSAqbV90YWJsZTsNCit9Ow0KKw0KKyNlbmRpZg0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0RpZ2l0YWxTb3VyY2UuY3BwIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvRGlnaXRhbFNvdXJjZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDA4M2Y1YwotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0RpZ2l0YWxTb3VyY2UuY3BwCkBAIC0wLDAgKzEsMTQgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorLyogQ29weXJpZ2h0IChjKSBGSVJTVCAyMDA4LiBBbGwgUmlnaHRzIFJlc2VydmVkLgkJCQkJCQkgICovDQorLyogT3BlbiBTb3VyY2UgU29mdHdhcmUgLSBtYXkgYmUgbW9kaWZpZWQgYW5kIHNoYXJlZCBieSBGUkMgdGVhbXMuIFRoZSBjb2RlICAgKi8NCisvKiBtdXN0IGJlIGFjY29tcGFuaWVkIGJ5IHRoZSBGSVJTVCBCU0QgbGljZW5zZSBmaWxlIGluICQoV0lORF9CQVNFKS9XUElMaWIuICAqLw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorI2luY2x1ZGUgIkRpZ2l0YWxTb3VyY2UuaCINCisNCisvKioNCisgKiBEaWdpdGFsU291cmNlIGRlc3RydWN0b3IuDQorICovDQorRGlnaXRhbFNvdXJjZTo6fkRpZ2l0YWxTb3VyY2UoKQ0KK3sNCit9DQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvRGlnaXRhbFNvdXJjZS5oIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvRGlnaXRhbFNvdXJjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlYTI5NjMKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9EaWdpdGFsU291cmNlLmgKQEAgLTAsMCArMSwzMSBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBDb3B5cmlnaHQgKGMpIEZJUlNUIDIwMDguIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCQkJCQkJCSAgKi8NCisvKiBPcGVuIFNvdXJjZSBTb2Z0d2FyZSAtIG1heSBiZSBtb2RpZmllZCBhbmQgc2hhcmVkIGJ5IEZSQyB0ZWFtcy4gVGhlIGNvZGUgICAqLw0KKy8qIG11c3QgYmUgYWNjb21wYW5pZWQgYnkgdGhlIEZJUlNUIEJTRCBsaWNlbnNlIGZpbGUgaW4gJChXSU5EX0JBU0UpL1dQSUxpYi4gICovDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisjaWZuZGVmIERJR0lUQUxfU09VUkNFX0gNCisjZGVmaW5lIERJR0lUQUxfU09VUkNFX0gNCisNCisjaW5jbHVkZSAiSW50ZXJydXB0YWJsZVNlbnNvckJhc2UuaCINCisNCisvKioNCisgKiBEaWdpdGFsU291cmNlIEludGVyZmFjZS4NCisgKiBUaGUgRGlnaXRhbFNvdXJjZSByZXByZXNlbnRzIGFsbCB0aGUgcG9zc2libGUgaW5wdXRzIGZvciBhIGNvdW50ZXIgb3IgYSBxdWFkcmF0dXJlIGVuY29kZXIuIFRoZSBzb3VyY2UgbWF5IGJlDQorICogZWl0aGVyIGEgZGlnaXRhbCBpbnB1dCBvciBhbiBhbmFsb2cgaW5wdXQuIElmIHRoZSBjYWxsZXIganVzdCBwcm92aWRlcyBhIGNoYW5uZWwsIHRoZW4gYSBkaWdpdGFsIGlucHV0IHdpbGwgYmUNCisgKiBjb25zdHJ1Y3RlZCBhbmQgZnJlZWQgd2hlbiBmaW5pc2hlZCBmb3IgdGhlIHNvdXJjZS4gVGhlIHNvdXJjZSBjYW4gZWl0aGVyIGJlIGEgZGlnaXRhbCBpbnB1dCBvciBhbmFsb2cgdHJpZ2dlcg0KKyAqIGJ1dCBub3QgYm90aC4NCisgKi8NCitjbGFzcyBEaWdpdGFsU291cmNlOiBwdWJsaWMgSW50ZXJydXB0YWJsZVNlbnNvckJhc2UNCit7DQorcHVibGljOg0KKwl2aXJ0dWFsIH5EaWdpdGFsU291cmNlKCk7DQorCXZpcnR1YWwgVUlOVDMyIEdldENoYW5uZWxGb3JSb3V0aW5nKCkgPSAwOw0KKwl2aXJ0dWFsIFVJTlQzMiBHZXRNb2R1bGVGb3JSb3V0aW5nKCkgPSAwOw0KKwl2aXJ0dWFsIGJvb2wgR2V0QW5hbG9nVHJpZ2dlckZvclJvdXRpbmcoKSA9IDA7DQorCXZpcnR1YWwgdm9pZCBSZXF1ZXN0SW50ZXJydXB0cyh0SW50ZXJydXB0SGFuZGxlciBoYW5kbGVyLCB2b2lkICpwYXJhbSkgPSAwOw0KKwl2aXJ0dWFsIHZvaWQgUmVxdWVzdEludGVycnVwdHMoKSA9IDA7DQorfTsNCisNCisjZW5kaWYNCisNCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9Eb3VibGVTb2xlbm9pZC5jcHAgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9Eb3VibGVTb2xlbm9pZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjVhNDhjZQotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0RvdWJsZVNvbGVub2lkLmNwcApAQCAtMCwwICsxLDE4MSBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBDb3B5cmlnaHQgKGMpIEZJUlNUIDIwMDguIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCQkJCQkJCSAgKi8NCisvKiBPcGVuIFNvdXJjZSBTb2Z0d2FyZSAtIG1heSBiZSBtb2RpZmllZCBhbmQgc2hhcmVkIGJ5IEZSQyB0ZWFtcy4gVGhlIGNvZGUgICAqLw0KKy8qIG11c3QgYmUgYWNjb21wYW5pZWQgYnkgdGhlIEZJUlNUIEJTRCBsaWNlbnNlIGZpbGUgaW4gJChXSU5EX0JBU0UpL1dQSUxpYi4gICovDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisjaW5jbHVkZSAiRG91YmxlU29sZW5vaWQuaCINCisjaW5jbHVkZSAiTmV0d29ya0NvbW11bmljYXRpb24vVXNhZ2VSZXBvcnRpbmcuaCINCisjaW5jbHVkZSAiV1BJRXJyb3JzLmgiDQorI2luY2x1ZGUgPHN0cmluZy5oPg0KKyNpbmNsdWRlICJMaXZlV2luZG93L0xpdmVXaW5kb3cuaCINCisNCisvKioNCisgKiBDb21tb24gZnVuY3Rpb24gdG8gaW1wbGVtZW50IGNvbnN0cnVjdG9yIGJlaGF2aW9yLg0KKyAqLw0KK3ZvaWQgRG91YmxlU29sZW5vaWQ6OkluaXRTb2xlbm9pZCgpDQorew0KKwljaGFyIGJ1Zls2NF07DQorCWlmICghQ2hlY2tTb2xlbm9pZE1vZHVsZShtX21vZHVsZU51bWJlcikpDQorCXsNCisJCXNucHJpbnRmKGJ1ZiwgNjQsICJTb2xlbm9pZCBNb2R1bGUgJWQiLCBtX21vZHVsZU51bWJlcik7DQorCQl3cGlfc2V0V1BJRXJyb3JXaXRoQ29udGV4dChNb2R1bGVJbmRleE91dE9mUmFuZ2UsIGJ1Zik7DQorCQlyZXR1cm47DQorCX0NCisJaWYgKCFDaGVja1NvbGVub2lkQ2hhbm5lbChtX2ZvcndhcmRDaGFubmVsKSkNCisJew0KKwkJc25wcmludGYoYnVmLCA2NCwgIlNvbGVub2lkIENoYW5uZWwgJWQiLCBtX2ZvcndhcmRDaGFubmVsKTsNCisJCXdwaV9zZXRXUElFcnJvcldpdGhDb250ZXh0KENoYW5uZWxJbmRleE91dE9mUmFuZ2UsIGJ1Zik7DQorCQlyZXR1cm47DQorCX0NCisJaWYgKCFDaGVja1NvbGVub2lkQ2hhbm5lbChtX3JldmVyc2VDaGFubmVsKSkNCisJew0KKwkJc25wcmludGYoYnVmLCA2NCwgIlNvbGVub2lkIENoYW5uZWwgJWQiLCBtX3JldmVyc2VDaGFubmVsKTsNCisJCXdwaV9zZXRXUElFcnJvcldpdGhDb250ZXh0KENoYW5uZWxJbmRleE91dE9mUmFuZ2UsIGJ1Zik7DQorCQlyZXR1cm47DQorCX0NCisJUmVzb3VyY2U6OkNyZWF0ZVJlc291cmNlT2JqZWN0KCZtX2FsbG9jYXRlZCwgdFNvbGVub2lkOjprTnVtRE83XzBFbGVtZW50cyAqIGtTb2xlbm9pZENoYW5uZWxzKTsNCisNCisJc25wcmludGYoYnVmLCA2NCwgIlNvbGVub2lkICVkIChNb2R1bGUgJWQpIiwgbV9mb3J3YXJkQ2hhbm5lbCwgbV9tb2R1bGVOdW1iZXIpOw0KKwlpZiAobV9hbGxvY2F0ZWQtPkFsbG9jYXRlKChtX21vZHVsZU51bWJlciAtIDEpICoga1NvbGVub2lkQ2hhbm5lbHMgKyBtX2ZvcndhcmRDaGFubmVsIC0gMSwgYnVmKSA9PSB+MHVsKQ0KKwl7DQorCQlDbG9uZUVycm9yKG1fYWxsb2NhdGVkKTsNCisJCXJldHVybjsNCisJfQ0KKwlzbnByaW50ZihidWYsIDY0LCAiU29sZW5vaWQgJWQgKE1vZHVsZSAlZCkiLCBtX3JldmVyc2VDaGFubmVsLCBtX21vZHVsZU51bWJlcik7DQorCWlmIChtX2FsbG9jYXRlZC0+QWxsb2NhdGUoKG1fbW9kdWxlTnVtYmVyIC0gMSkgKiBrU29sZW5vaWRDaGFubmVscyArIG1fcmV2ZXJzZUNoYW5uZWwgLSAxLCBidWYpID09IH4wdWwpDQorCXsNCisJCUNsb25lRXJyb3IobV9hbGxvY2F0ZWQpOw0KKwkJcmV0dXJuOw0KKwl9DQorCW1fZm9yd2FyZE1hc2sgPSAxIDw8IChtX2ZvcndhcmRDaGFubmVsIC0gMSk7DQorCW1fcmV2ZXJzZU1hc2sgPSAxIDw8IChtX3JldmVyc2VDaGFubmVsIC0gMSk7DQorDQorCW5Vc2FnZVJlcG9ydGluZzo6cmVwb3J0KG5Vc2FnZVJlcG9ydGluZzo6a1Jlc291cmNlVHlwZV9Tb2xlbm9pZCwgbV9mb3J3YXJkQ2hhbm5lbCwgbV9tb2R1bGVOdW1iZXIgLSAxKTsNCisJblVzYWdlUmVwb3J0aW5nOjpyZXBvcnQoblVzYWdlUmVwb3J0aW5nOjprUmVzb3VyY2VUeXBlX1NvbGVub2lkLCBtX3JldmVyc2VDaGFubmVsLCBtX21vZHVsZU51bWJlciAtIDEpOw0KKwlMaXZlV2luZG93OjpHZXRJbnN0YW5jZSgpLT5BZGRTZW5zb3IoIkRvdWJsZVNvbGVub2lkIiwgbV9tb2R1bGVOdW1iZXIsIG1fZm9yd2FyZENoYW5uZWwsIHRoaXMpOw0KK30NCisNCisvKioNCisgKiBDb25zdHJ1Y3Rvci4NCisgKiANCisgKiBAcGFyYW0gZm9yd2FyZENoYW5uZWwgVGhlIGZvcndhcmQgY2hhbm5lbCBvbiB0aGUgbW9kdWxlIHRvIGNvbnRyb2wuDQorICogQHBhcmFtIHJldmVyc2VDaGFubmVsIFRoZSByZXZlcnNlIGNoYW5uZWwgb24gdGhlIG1vZHVsZSB0byBjb250cm9sLg0KKyAqLw0KK0RvdWJsZVNvbGVub2lkOjpEb3VibGVTb2xlbm9pZChVSU5UMzIgZm9yd2FyZENoYW5uZWwsIFVJTlQzMiByZXZlcnNlQ2hhbm5lbCkNCisJOiBTb2xlbm9pZEJhc2UgKEdldERlZmF1bHRTb2xlbm9pZE1vZHVsZSgpKQ0KKwksIG1fZm9yd2FyZENoYW5uZWwgKGZvcndhcmRDaGFubmVsKQ0KKwksIG1fcmV2ZXJzZUNoYW5uZWwgKHJldmVyc2VDaGFubmVsKQ0KK3sNCisJSW5pdFNvbGVub2lkKCk7DQorfQ0KKw0KKy8qKg0KKyAqIENvbnN0cnVjdG9yLg0KKyAqIA0KKyAqIEBwYXJhbSBtb2R1bGVOdW1iZXIgVGhlIHNvbGVub2lkIG1vZHVsZSAoMSBvciAyKS4NCisgKiBAcGFyYW0gZm9yd2FyZENoYW5uZWwgVGhlIGZvcndhcmQgY2hhbm5lbCBvbiB0aGUgbW9kdWxlIHRvIGNvbnRyb2wuDQorICogQHBhcmFtIHJldmVyc2VDaGFubmVsIFRoZSByZXZlcnNlIGNoYW5uZWwgb24gdGhlIG1vZHVsZSB0byBjb250cm9sLg0KKyAqLw0KK0RvdWJsZVNvbGVub2lkOjpEb3VibGVTb2xlbm9pZChVSU5UOCBtb2R1bGVOdW1iZXIsIFVJTlQzMiBmb3J3YXJkQ2hhbm5lbCwgVUlOVDMyIHJldmVyc2VDaGFubmVsKQ0KKwk6IFNvbGVub2lkQmFzZSAobW9kdWxlTnVtYmVyKQ0KKwksIG1fZm9yd2FyZENoYW5uZWwgKGZvcndhcmRDaGFubmVsKQ0KKwksIG1fcmV2ZXJzZUNoYW5uZWwgKHJldmVyc2VDaGFubmVsKQ0KK3sNCisJSW5pdFNvbGVub2lkKCk7DQorfQ0KKw0KKy8qKg0KKyAqIERlc3RydWN0b3IuDQorICovDQorRG91YmxlU29sZW5vaWQ6On5Eb3VibGVTb2xlbm9pZCgpDQorew0KKwlpZiAoQ2hlY2tTb2xlbm9pZE1vZHVsZShtX21vZHVsZU51bWJlcikpDQorCXsNCisJCW1fYWxsb2NhdGVkLT5GcmVlKChtX21vZHVsZU51bWJlciAtIDEpICoga1NvbGVub2lkQ2hhbm5lbHMgKyBtX2ZvcndhcmRDaGFubmVsIC0gMSk7DQorCQltX2FsbG9jYXRlZC0+RnJlZSgobV9tb2R1bGVOdW1iZXIgLSAxKSAqIGtTb2xlbm9pZENoYW5uZWxzICsgbV9yZXZlcnNlQ2hhbm5lbCAtIDEpOw0KKwl9DQorfQ0KKw0KKy8qKg0KKyAqIFNldCB0aGUgdmFsdWUgb2YgYSBzb2xlbm9pZC4NCisgKiANCisgKiBAcGFyYW0gdmFsdWUgTW92ZSB0aGUgc29sZW5vaWQgdG8gZm9yd2FyZCwgcmV2ZXJzZSwgb3IgZG9uJ3QgbW92ZSBpdC4NCisgKi8NCit2b2lkIERvdWJsZVNvbGVub2lkOjpTZXQoVmFsdWUgdmFsdWUpDQorew0KKwlpZiAoU3RhdHVzSXNGYXRhbCgpKSByZXR1cm47DQorCVVJTlQ4IHJhd1ZhbHVlID0gMHgwMDsNCisNCisJc3dpdGNoKHZhbHVlKQ0KKwl7DQorCWNhc2Uga09mZjoNCisJCXJhd1ZhbHVlID0gMHgwMDsNCisJCWJyZWFrOw0KKwljYXNlIGtGb3J3YXJkOg0KKwkJcmF3VmFsdWUgPSBtX2ZvcndhcmRNYXNrOw0KKwkJYnJlYWs7DQorCWNhc2Uga1JldmVyc2U6DQorCQlyYXdWYWx1ZSA9IG1fcmV2ZXJzZU1hc2s7DQorCQlicmVhazsNCisJfQ0KKw0KKwlTb2xlbm9pZEJhc2U6OlNldChyYXdWYWx1ZSwgbV9mb3J3YXJkTWFzayB8IG1fcmV2ZXJzZU1hc2spOw0KK30NCisNCisvKioNCisgKiBSZWFkIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBzb2xlbm9pZC4NCisgKiANCisgKiBAcmV0dXJuIFRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBzb2xlbm9pZC4NCisgKi8NCitEb3VibGVTb2xlbm9pZDo6VmFsdWUgRG91YmxlU29sZW5vaWQ6OkdldCgpDQorew0KKwlpZiAoU3RhdHVzSXNGYXRhbCgpKSByZXR1cm4ga09mZjsNCisJVUlOVDggdmFsdWUgPSBHZXRBbGwoKTsNCisNCisJaWYgKHZhbHVlICYgbV9mb3J3YXJkTWFzaykgcmV0dXJuIGtGb3J3YXJkOw0KKwlpZiAodmFsdWUgJiBtX3JldmVyc2VNYXNrKSByZXR1cm4ga1JldmVyc2U7DQorCXJldHVybiBrT2ZmOw0KK30NCisNCisNCisNCisNCit2b2lkIERvdWJsZVNvbGVub2lkOjpWYWx1ZUNoYW5nZWQoSVRhYmxlKiBzb3VyY2UsIGNvbnN0IHN0ZDo6c3RyaW5nJiBrZXksIEVudHJ5VmFsdWUgdmFsdWUsIGJvb2wgaXNOZXcpIHsNCisJVmFsdWUgbHZhbHVlID0ga09mZjsNCisJaWYgKHN0cmNtcCgoY2hhciopdmFsdWUucHRyLCAiRm9yd2FyZCIpID09IDApDQorCQlsdmFsdWUgPSBrRm9yd2FyZDsNCisJZWxzZSBpZiAoc3RyY21wKChjaGFyKil2YWx1ZS5wdHIsICJSZXZlcnNlIikgPT0gMCkNCisJCWx2YWx1ZSA9IGtSZXZlcnNlOw0KKwlTZXQobHZhbHVlKTsNCit9DQorDQordm9pZCBEb3VibGVTb2xlbm9pZDo6VXBkYXRlVGFibGUoKSB7DQorCWlmIChtX3RhYmxlICE9IE5VTEwpIHsNCisJCW1fdGFibGUtPlB1dFN0cmluZygiVmFsdWUiLCAoR2V0KCkgPT0ga0ZvcndhcmQgPyAiRm9yd2FyZCIgOiAoR2V0KCkgPT0ga1JldmVyc2UgPyAiUmV2ZXJzZSIgOiAiT2ZmIikpKTsNCisJfQ0KK30NCisNCit2b2lkIERvdWJsZVNvbGVub2lkOjpTdGFydExpdmVXaW5kb3dNb2RlKCkgew0KKwlTZXQoa09mZik7DQorCW1fdGFibGUtPkFkZFRhYmxlTGlzdGVuZXIoIlZhbHVlIiwgdGhpcywgdHJ1ZSk7DQorfQ0KKw0KK3ZvaWQgRG91YmxlU29sZW5vaWQ6OlN0b3BMaXZlV2luZG93TW9kZSgpIHsNCisJU2V0KGtPZmYpOw0KKwltX3RhYmxlLT5SZW1vdmVUYWJsZUxpc3RlbmVyKHRoaXMpOw0KK30NCisNCitzdGQ6OnN0cmluZyBEb3VibGVTb2xlbm9pZDo6R2V0U21hcnREYXNoYm9hcmRUeXBlKCkgew0KKwlyZXR1cm4gIkRvdWJsZSBTb2xlbm9pZCI7DQorfQ0KKw0KK3ZvaWQgRG91YmxlU29sZW5vaWQ6OkluaXRUYWJsZShJVGFibGUgKnN1YlRhYmxlKSB7DQorCW1fdGFibGUgPSBzdWJUYWJsZTsNCisJVXBkYXRlVGFibGUoKTsNCit9DQorDQorSVRhYmxlICogRG91YmxlU29sZW5vaWQ6OkdldFRhYmxlKCkgew0KKwlyZXR1cm4gbV90YWJsZTsNCit9DQorDQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvRG91YmxlU29sZW5vaWQuaCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0RvdWJsZVNvbGVub2lkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZThiM2Y4YwotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0RvdWJsZVNvbGVub2lkLmgKQEAgLTAsMCArMSw1MSBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBDb3B5cmlnaHQgKGMpIEZJUlNUIDIwMDguIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCQkJCQkJCSAgKi8NCisvKiBPcGVuIFNvdXJjZSBTb2Z0d2FyZSAtIG1heSBiZSBtb2RpZmllZCBhbmQgc2hhcmVkIGJ5IEZSQyB0ZWFtcy4gVGhlIGNvZGUgICAqLw0KKy8qIG11c3QgYmUgYWNjb21wYW5pZWQgYnkgdGhlIEZJUlNUIEJTRCBsaWNlbnNlIGZpbGUgaW4gJChXSU5EX0JBU0UpL1dQSUxpYi4gICovDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisjaWZuZGVmIERPVUJMRV9TT0xFTk9JRF9IXw0KKyNkZWZpbmUgRE9VQkxFX1NPTEVOT0lEX0hfDQorDQorI2luY2x1ZGUgIlNvbGVub2lkQmFzZS5oIg0KKyNpbmNsdWRlICJMaXZlV2luZG93L0xpdmVXaW5kb3dTZW5kYWJsZS5oIg0KKyNpbmNsdWRlICJ0YWJsZXMvSVRhYmxlTGlzdGVuZXIuaCINCisNCisNCisvKioNCisgKiBEb3VibGVTb2xlbm9pZCBjbGFzcyBmb3IgcnVubmluZyAyIGNoYW5uZWxzIG9mIGhpZ2ggdm9sdGFnZSBEaWdpdGFsIE91dHB1dA0KKyAqICg5NDcyIG1vZHVsZSkuDQorICogDQorICogVGhlIERvdWJsZVNvbGVub2lkIGNsYXNzIGlzIHR5cGljYWxseSB1c2VkIGZvciBwbmV1bWF0aWNzIHNvbGVub2lkcyB0aGF0DQorICogaGF2ZSB0d28gcG9zaXRpb25zIGNvbnRyb2xsZWQgYnkgdHdvIHNlcGFyYXRlIGNoYW5uZWxzLg0KKyAqLw0KK2NsYXNzIERvdWJsZVNvbGVub2lkIDogcHVibGljIFNvbGVub2lkQmFzZSwgcHVibGljIExpdmVXaW5kb3dTZW5kYWJsZSwgcHVibGljIElUYWJsZUxpc3RlbmVyIHsNCitwdWJsaWM6DQorCXR5cGVkZWYgZW51bSB7a09mZiwga0ZvcndhcmQsIGtSZXZlcnNlfSBWYWx1ZTsNCisNCisJZXhwbGljaXQgRG91YmxlU29sZW5vaWQoVUlOVDMyIGZvcndhcmRDaGFubmVsLCBVSU5UMzIgcmV2ZXJzZUNoYW5uZWwpOw0KKwlEb3VibGVTb2xlbm9pZChVSU5UOCBtb2R1bGVOdW1iZXIsIFVJTlQzMiBmb3J3YXJkQ2hhbm5lbCwgVUlOVDMyIHJldmVyc2VDaGFubmVsKTsNCisJdmlydHVhbCB+RG91YmxlU29sZW5vaWQoKTsNCisJdmlydHVhbCB2b2lkIFNldChWYWx1ZSB2YWx1ZSk7DQorCXZpcnR1YWwgVmFsdWUgR2V0KCk7DQorCQ0KKwl2b2lkIFZhbHVlQ2hhbmdlZChJVGFibGUqIHNvdXJjZSwgY29uc3Qgc3RkOjpzdHJpbmcmIGtleSwgRW50cnlWYWx1ZSB2YWx1ZSwgYm9vbCBpc05ldyk7DQorCXZvaWQgVXBkYXRlVGFibGUoKTsNCisJdm9pZCBTdGFydExpdmVXaW5kb3dNb2RlKCk7DQorCXZvaWQgU3RvcExpdmVXaW5kb3dNb2RlKCk7DQorCXN0ZDo6c3RyaW5nIEdldFNtYXJ0RGFzaGJvYXJkVHlwZSgpOw0KKwl2b2lkIEluaXRUYWJsZShJVGFibGUgKnN1YlRhYmxlKTsNCisJSVRhYmxlICogR2V0VGFibGUoKTsNCisNCitwcml2YXRlOg0KKwl2aXJ0dWFsIHZvaWQgSW5pdFNvbGVub2lkKCk7DQorDQorCVVJTlQzMiBtX2ZvcndhcmRDaGFubmVsOyAvLy88IFRoZSBmb3J3YXJkIGNoYW5uZWwgb24gdGhlIG1vZHVsZSB0byBjb250cm9sLg0KKwlVSU5UMzIgbV9yZXZlcnNlQ2hhbm5lbDsgLy8vPCBUaGUgcmV2ZXJzZSBjaGFubmVsIG9uIHRoZSBtb2R1bGUgdG8gY29udHJvbC4NCisJVUlOVDggbV9mb3J3YXJkTWFzazsgLy8vPCBUaGUgbWFzayBmb3IgdGhlIGZvcndhcmQgY2hhbm5lbC4NCisJVUlOVDggbV9yZXZlcnNlTWFzazsgLy8vPCBUaGUgbWFzayBmb3IgdGhlIHJldmVyc2UgY2hhbm5lbC4NCisJDQorCUlUYWJsZSAqbV90YWJsZTsNCit9Ow0KKw0KKyNlbmRpZg0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0RyaXZlclN0YXRpb24uY3BwIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvRHJpdmVyU3RhdGlvbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQ2OWFiMQotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0RyaXZlclN0YXRpb24uY3BwCkBAIC0wLDAgKzEsNTA2IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy8qIENvcHlyaWdodCAoYykgRklSU1QgMjAwOC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4JCQkJCQkJICAqLw0KKy8qIE9wZW4gU291cmNlIFNvZnR3YXJlIC0gbWF5IGJlIG1vZGlmaWVkIGFuZCBzaGFyZWQgYnkgRlJDIHRlYW1zLiBUaGUgY29kZSAgICovDQorLyogbXVzdCBiZSBhY2NvbXBhbmllZCBieSB0aGUgRklSU1QgQlNEIGxpY2Vuc2UgZmlsZSBpbiAkKFdJTkRfQkFTRSkvV1BJTGliLiAgKi8NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKyNpbmNsdWRlICJEcml2ZXJTdGF0aW9uLmgiDQorI2luY2x1ZGUgIkFuYWxvZ0NoYW5uZWwuaCINCisjaW5jbHVkZSAiU3luY2hyb25pemVkLmgiDQorI2luY2x1ZGUgIlRpbWVyLmgiDQorI2luY2x1ZGUgIk5ldHdvcmtDb21tdW5pY2F0aW9uL0ZSQ0NvbW0uaCINCisjaW5jbHVkZSAiTmV0d29ya0NvbW11bmljYXRpb24vVXNhZ2VSZXBvcnRpbmcuaCINCisjaW5jbHVkZSAiTW90b3JTYWZldHlIZWxwZXIuaCINCisjaW5jbHVkZSAiVXRpbGl0eS5oIg0KKyNpbmNsdWRlICJXUElFcnJvcnMuaCINCisjaW5jbHVkZSA8c3RyTGliLmg+DQorDQorY29uc3QgVUlOVDMyIERyaXZlclN0YXRpb246OmtCYXR0ZXJ5TW9kdWxlTnVtYmVyOw0KK2NvbnN0IFVJTlQzMiBEcml2ZXJTdGF0aW9uOjprQmF0dGVyeUNoYW5uZWw7DQorY29uc3QgVUlOVDMyIERyaXZlclN0YXRpb246OmtKb3lzdGlja1BvcnRzOw0KK2NvbnN0IFVJTlQzMiBEcml2ZXJTdGF0aW9uOjprSm95c3RpY2tBeGVzOw0KK2NvbnN0IGZsb2F0IERyaXZlclN0YXRpb246OmtVcGRhdGVQZXJpb2Q7DQorRHJpdmVyU3RhdGlvbiogRHJpdmVyU3RhdGlvbjo6bV9pbnN0YW5jZSA9IE5VTEw7DQorVUlOVDggRHJpdmVyU3RhdGlvbjo6bV91cGRhdGVOdW1iZXIgPSAwOw0KKw0KKy8qKg0KKyAqIERyaXZlclN0YXRpb24gY29udHJ1Y3Rvci4NCisgKiANCisgKiBUaGlzIGlzIG9ubHkgY2FsbGVkIG9uY2UgdGhlIGZpcnN0IHRpbWUgR2V0SW5zdGFuY2UoKSBpcyBjYWxsZWQNCisgKi8NCitEcml2ZXJTdGF0aW9uOjpEcml2ZXJTdGF0aW9uKCkNCisJOiBtX2NvbnRyb2xEYXRhIChOVUxMKQ0KKwksIG1fZGlnaXRhbE91dCAoMCkNCisJLCBtX2JhdHRlcnlDaGFubmVsIChOVUxMKQ0KKwksIG1fc3RhdHVzRGF0YVNlbWFwaG9yZSAoc2VtTUNyZWF0ZShTRU1fUV9QUklPUklUWSB8IFNFTV9ERUxFVEVfU0FGRSB8IFNFTV9JTlZFUlNJT05fU0FGRSkpDQorCSwgbV90YXNrICgiRHJpdmVyU3RhdGlvbiIsIChGVU5DUFRSKURyaXZlclN0YXRpb246OkluaXRUYXNrKQ0KKwksIG1fZGFzaGJvYXJkSGlnaChtX3N0YXR1c0RhdGFTZW1hcGhvcmUpDQorCSwgbV9kYXNoYm9hcmRMb3cobV9zdGF0dXNEYXRhU2VtYXBob3JlKQ0KKwksIG1fZGFzaGJvYXJkSW5Vc2VIaWdoKCZtX2Rhc2hib2FyZEhpZ2gpDQorCSwgbV9kYXNoYm9hcmRJblVzZUxvdygmbV9kYXNoYm9hcmRMb3cpDQorCSwgbV9uZXdDb250cm9sRGF0YSgwKQ0KKwksIG1fcGFja2V0RGF0YUF2YWlsYWJsZVNlbSAoMCkNCisJLCBtX2VuaGFuY2VkSU8oKQ0KKwksIG1fd2FpdEZvckRhdGFTZW0oMCkNCisJLCBtX2FwcHJveE1hdGNoVGltZU9mZnNldCgtMS4wKQ0KKwksIG1fdXNlckluRGlzYWJsZWQoZmFsc2UpDQorCSwgbV91c2VySW5BdXRvbm9tb3VzKGZhbHNlKQ0KKwksIG1fdXNlckluVGVsZW9wKGZhbHNlKQ0KKwksIG1fdXNlckluVGVzdChmYWxzZSkNCit7DQorCS8vIENyZWF0ZSBhIG5ldyBzZW1hcGhvcmUNCisJbV9wYWNrZXREYXRhQXZhaWxhYmxlU2VtID0gc2VtQkNyZWF0ZSAoU0VNX1FfUFJJT1JJVFksIFNFTV9FTVBUWSk7DQorCW1fbmV3Q29udHJvbERhdGEgPSBzZW1CQ3JlYXRlIChTRU1fUV9GSUZPLCBTRU1fRU1QVFkpOw0KKw0KKwkvLyBSZWdpc3RlciB0aGF0IHNlbWFwaG9yZSB3aXRoIHRoZSBuZXR3b3JrIGNvbW11bmljYXRpb25zIHRhc2suDQorCS8vIEl0IHdpbGwgc2lnbmFsIHdoZW4gbmV3IHBhY2tldCBkYXRhIGlzIGF2YWlsYWJsZS4gDQorCXNldE5ld0RhdGFTZW0obV9wYWNrZXREYXRhQXZhaWxhYmxlU2VtKTsNCisNCisJbV93YWl0Rm9yRGF0YVNlbSA9IHNlbUJDcmVhdGUgKFNFTV9RX1BSSU9SSVRZLCBTRU1fRU1QVFkpOw0KKw0KKwltX2NvbnRyb2xEYXRhID0gbmV3IEZSQ0NvbW1vbkNvbnRyb2xEYXRhOw0KKw0KKwkvLyBpbml0aWFsaXplIHBhY2tldCBudW1iZXIgYW5kIGNvbnRyb2wgd29yZHMgdG8gemVybzsNCisJbV9jb250cm9sRGF0YS0+cGFja2V0SW5kZXggPSAwOw0KKwltX2NvbnRyb2xEYXRhLT5jb250cm9sID0gMDsNCisNCisJLy8gc2V0IGFsbCBqb3lzdGljayBheGlzIHZhbHVlcyB0byBuZXV0cmFsOyBidXR0b25zIHRvIE9GRg0KKwltX2NvbnRyb2xEYXRhLT5zdGljazBBeGlzMSA9IG1fY29udHJvbERhdGEtPnN0aWNrMEF4aXMyID0gbV9jb250cm9sRGF0YS0+c3RpY2swQXhpczMgPSAwOw0KKwltX2NvbnRyb2xEYXRhLT5zdGljazFBeGlzMSA9IG1fY29udHJvbERhdGEtPnN0aWNrMUF4aXMyID0gbV9jb250cm9sRGF0YS0+c3RpY2sxQXhpczMgPSAwOw0KKwltX2NvbnRyb2xEYXRhLT5zdGljazJBeGlzMSA9IG1fY29udHJvbERhdGEtPnN0aWNrMkF4aXMyID0gbV9jb250cm9sRGF0YS0+c3RpY2syQXhpczMgPSAwOw0KKwltX2NvbnRyb2xEYXRhLT5zdGljazNBeGlzMSA9IG1fY29udHJvbERhdGEtPnN0aWNrM0F4aXMyID0gbV9jb250cm9sRGF0YS0+c3RpY2szQXhpczMgPSAwOw0KKwltX2NvbnRyb2xEYXRhLT5zdGljazBBeGlzNCA9IG1fY29udHJvbERhdGEtPnN0aWNrMEF4aXM1ID0gbV9jb250cm9sRGF0YS0+c3RpY2swQXhpczYgPSAwOw0KKwltX2NvbnRyb2xEYXRhLT5zdGljazFBeGlzNCA9IG1fY29udHJvbERhdGEtPnN0aWNrMUF4aXM1ID0gbV9jb250cm9sRGF0YS0+c3RpY2sxQXhpczYgPSAwOw0KKwltX2NvbnRyb2xEYXRhLT5zdGljazJBeGlzNCA9IG1fY29udHJvbERhdGEtPnN0aWNrMkF4aXM1ID0gbV9jb250cm9sRGF0YS0+c3RpY2syQXhpczYgPSAwOw0KKwltX2NvbnRyb2xEYXRhLT5zdGljazNBeGlzNCA9IG1fY29udHJvbERhdGEtPnN0aWNrM0F4aXM1ID0gbV9jb250cm9sRGF0YS0+c3RpY2szQXhpczYgPSAwOw0KKwltX2NvbnRyb2xEYXRhLT5zdGljazBCdXR0b25zID0gMDsNCisJbV9jb250cm9sRGF0YS0+c3RpY2sxQnV0dG9ucyA9IDA7DQorCW1fY29udHJvbERhdGEtPnN0aWNrMkJ1dHRvbnMgPSAwOw0KKwltX2NvbnRyb2xEYXRhLT5zdGljazNCdXR0b25zID0gMDsNCisNCisJLy8gaW5pdGlhbGl6ZSB0aGUgYW5hbG9nIGFuZCBkaWdpdGFsIGRhdGEuDQorCW1fY29udHJvbERhdGEtPmFuYWxvZzEgPSAwOw0KKwltX2NvbnRyb2xEYXRhLT5hbmFsb2cyID0gMDsNCisJbV9jb250cm9sRGF0YS0+YW5hbG9nMyA9IDA7DQorCW1fY29udHJvbERhdGEtPmFuYWxvZzQgPSAwOw0KKwltX2NvbnRyb2xEYXRhLT5kc0RpZ2l0YWxJbiA9IDA7DQorDQorCW1fYmF0dGVyeUNoYW5uZWwgPSBuZXcgQW5hbG9nQ2hhbm5lbChrQmF0dGVyeU1vZHVsZU51bWJlciwga0JhdHRlcnlDaGFubmVsKTsNCisNCisJQWRkVG9TaW5nbGV0b25MaXN0KCk7DQorDQorCWlmICghbV90YXNrLlN0YXJ0KChJTlQzMil0aGlzKSkNCisJew0KKwkJd3BpX3NldFdQSUVycm9yKERyaXZlclN0YXRpb25UYXNrRXJyb3IpOw0KKwl9DQorfQ0KKw0KK0RyaXZlclN0YXRpb246On5Ecml2ZXJTdGF0aW9uKCkNCit7DQorCW1fdGFzay5TdG9wKCk7DQorCXNlbURlbGV0ZShtX3N0YXR1c0RhdGFTZW1hcGhvcmUpOw0KKwlkZWxldGUgbV9iYXR0ZXJ5Q2hhbm5lbDsNCisJZGVsZXRlIG1fY29udHJvbERhdGE7DQorCW1faW5zdGFuY2UgPSBOVUxMOw0KKwlzZW1EZWxldGUobV93YWl0Rm9yRGF0YVNlbSk7DQorCS8vIFVucmVnaXN0ZXIgb3VyIHNlbWFwaG9yZS4NCisJc2V0TmV3RGF0YVNlbSgwKTsNCisJc2VtRGVsZXRlKG1fcGFja2V0RGF0YUF2YWlsYWJsZVNlbSk7DQorfQ0KKw0KK3ZvaWQgRHJpdmVyU3RhdGlvbjo6SW5pdFRhc2soRHJpdmVyU3RhdGlvbiAqZHMpDQorew0KKwlkcy0+UnVuKCk7DQorfQ0KKw0KK3ZvaWQgRHJpdmVyU3RhdGlvbjo6UnVuKCkNCit7DQorCWludCBwZXJpb2QgPSAwOw0KKwl3aGlsZSAodHJ1ZSkNCisJew0KKwkJc2VtVGFrZShtX3BhY2tldERhdGFBdmFpbGFibGVTZW0sIFdBSVRfRk9SRVZFUik7DQorCQlTZXREYXRhKCk7DQorCQltX2VuaGFuY2VkSU8uVXBkYXRlRGF0YSgpOw0KKwkJR2V0RGF0YSgpOw0KKwkJc2VtRmx1c2gobV93YWl0Rm9yRGF0YVNlbSk7DQorCQlpZiAoKytwZXJpb2QgPj0gNCkNCisJCXsNCisJCQlNb3RvclNhZmV0eUhlbHBlcjo6Q2hlY2tNb3RvcnMoKTsNCisJCQlwZXJpb2QgPSAwOw0KKwkJfQ0KKwkJaWYgKG1fdXNlckluRGlzYWJsZWQpDQorCQkJRlJDX05ldHdvcmtDb21tdW5pY2F0aW9uX29ic2VydmVVc2VyUHJvZ3JhbURpc2FibGVkKCk7DQorCQlpZiAobV91c2VySW5BdXRvbm9tb3VzKQ0KKwkJCUZSQ19OZXR3b3JrQ29tbXVuaWNhdGlvbl9vYnNlcnZlVXNlclByb2dyYW1BdXRvbm9tb3VzKCk7DQorICAgICAgICBpZiAobV91c2VySW5UZWxlb3ApDQorICAgICAgICAgICAgRlJDX05ldHdvcmtDb21tdW5pY2F0aW9uX29ic2VydmVVc2VyUHJvZ3JhbVRlbGVvcCgpOw0KKyAgICAgICAgaWYgKG1fdXNlckluVGVzdCkNCisgICAgICAgICAgICBGUkNfTmV0d29ya0NvbW11bmljYXRpb25fb2JzZXJ2ZVVzZXJQcm9ncmFtVGVzdCgpOw0KKwl9DQorfQ0KKw0KKy8qKg0KKyAqIFJldHVybiBhIHBvaW50ZXIgdG8gdGhlIHNpbmdsZXRvbiBEcml2ZXJTdGF0aW9uLg0KKyAqLw0KK0RyaXZlclN0YXRpb24qIERyaXZlclN0YXRpb246OkdldEluc3RhbmNlKCkNCit7DQorCWlmIChtX2luc3RhbmNlID09IE5VTEwpDQorCXsNCisJCW1faW5zdGFuY2UgPSBuZXcgRHJpdmVyU3RhdGlvbigpOw0KKwl9DQorCXJldHVybiBtX2luc3RhbmNlOw0KK30NCisNCisvKioNCisgKiBDb3B5IGRhdGEgZnJvbSB0aGUgRFMgdGFzayBmb3IgdGhlIHVzZXIuDQorICogSWYgbm8gbmV3IGRhdGEgZXhpc3RzLCBpdCB3aWxsIGp1c3QgYmUgcmV0dXJuZWQsIG90aGVyd2lzZQ0KKyAqIHRoZSBkYXRhIHdpbGwgYmUgY29waWVkIGZyb20gdGhlIERTIHBvbGxpbmcgbG9vcC4NCisgKi8NCit2b2lkIERyaXZlclN0YXRpb246OkdldERhdGEoKQ0KK3sNCisJc3RhdGljIGJvb2wgbGFzdEVuYWJsZWQgPSBmYWxzZTsNCisJZ2V0Q29tbW9uQ29udHJvbERhdGEobV9jb250cm9sRGF0YSwgV0FJVF9GT1JFVkVSKTsNCisJaWYgKCFsYXN0RW5hYmxlZCAmJiBJc0VuYWJsZWQoKSkgDQorCXsNCisJCS8vIElmIHN0YXJ0aW5nIHRlbGVvcCwgYXNzdW1lIHRoYXQgYXV0b25vbW91cyBqdXN0IHRvb2sgdXAgMTUgc2Vjb25kcw0KKwkJaWYgKElzQXV0b25vbW91cygpKQ0KKwkJCW1fYXBwcm94TWF0Y2hUaW1lT2Zmc2V0ID0gVGltZXI6OkdldEZQR0FUaW1lc3RhbXAoKTsNCisJCWVsc2UNCisJCQltX2FwcHJveE1hdGNoVGltZU9mZnNldCA9IFRpbWVyOjpHZXRGUEdBVGltZXN0YW1wKCkgLSAxNS4wOw0KKwl9DQorCWVsc2UgaWYgKGxhc3RFbmFibGVkICYmICFJc0VuYWJsZWQoKSkNCisJew0KKwkJbV9hcHByb3hNYXRjaFRpbWVPZmZzZXQgPSAtMS4wOw0KKwl9DQorCWxhc3RFbmFibGVkID0gSXNFbmFibGVkKCk7DQorCXNlbUdpdmUobV9uZXdDb250cm9sRGF0YSk7DQorfQ0KKw0KKy8qKg0KKyAqIENvcHkgc3RhdHVzIGRhdGEgZnJvbSB0aGUgRFMgdGFzayBmb3IgdGhlIHVzZXIuDQorICovDQordm9pZCBEcml2ZXJTdGF0aW9uOjpTZXREYXRhKCkNCit7DQorCWNoYXIgKnVzZXJTdGF0dXNEYXRhSGlnaDsNCisJSU5UMzIgdXNlclN0YXR1c0RhdGFIaWdoU2l6ZTsNCisJY2hhciAqdXNlclN0YXR1c0RhdGFMb3c7DQorCUlOVDMyIHVzZXJTdGF0dXNEYXRhTG93U2l6ZTsNCisNCisJU3luY2hyb25pemVkIHN5bmMobV9zdGF0dXNEYXRhU2VtYXBob3JlKTsNCisNCisJbV9kYXNoYm9hcmRJblVzZUhpZ2gtPkdldFN0YXR1c0J1ZmZlcigmdXNlclN0YXR1c0RhdGFIaWdoLCAmdXNlclN0YXR1c0RhdGFIaWdoU2l6ZSk7DQorCW1fZGFzaGJvYXJkSW5Vc2VMb3ctPkdldFN0YXR1c0J1ZmZlcigmdXNlclN0YXR1c0RhdGFMb3csICZ1c2VyU3RhdHVzRGF0YUxvd1NpemUpOw0KKwlzZXRTdGF0dXNEYXRhKEdldEJhdHRlcnlWb2x0YWdlKCksIG1fZGlnaXRhbE91dCwgbV91cGRhdGVOdW1iZXIsDQorCQl1c2VyU3RhdHVzRGF0YUhpZ2gsIHVzZXJTdGF0dXNEYXRhSGlnaFNpemUsIHVzZXJTdGF0dXNEYXRhTG93LCB1c2VyU3RhdHVzRGF0YUxvd1NpemUsIFdBSVRfRk9SRVZFUik7DQorCQ0KKwltX2Rhc2hib2FyZEluVXNlSGlnaC0+Rmx1c2goKTsNCisJbV9kYXNoYm9hcmRJblVzZUxvdy0+Rmx1c2goKTsNCit9DQorDQorLyoqDQorICogUmVhZCB0aGUgYmF0dGVyeSB2b2x0YWdlIGZyb20gdGhlIHNwZWNpZmllZCBBbmFsb2dDaGFubmVsLg0KKyAqIA0KKyAqIFRoaXMgYWNjZXNzb3IgYXNzdW1lcyB0aGF0IHRoZSBiYXR0ZXJ5IHZvbHRhZ2UgaXMgYmVpbmcgbWVhc3VyZWQNCisgKiB0aHJvdWdoIHRoZSB2b2x0YWdlIGRpdmlkZXIgb24gYW4gYW5hbG9nIGJyZWFrb3V0Lg0KKyAqIA0KKyAqIEByZXR1cm4gVGhlIGJhdHRlcnkgdm9sdGFnZS4NCisgKi8NCitmbG9hdCBEcml2ZXJTdGF0aW9uOjpHZXRCYXR0ZXJ5Vm9sdGFnZSgpDQorew0KKwlpZiAobV9iYXR0ZXJ5Q2hhbm5lbCA9PSBOVUxMKQ0KKwkJd3BpX3NldFdQSUVycm9yKE51bGxQYXJhbWV0ZXIpOw0KKw0KKwkvLyBUaGUgQW5hbG9nIGJ1bXBlciBoYXMgYSB2b2x0YWdlIGRpdmlkZXIgb24gdGhlIGJhdHRlcnkgc291cmNlLg0KKwkvLyBWYmF0dCAqLS0vXC9cL1wtLSogVnNhbXBsZSAqLS0vXC9cL1wtLSogR25kDQorCS8vICAgICAgICAgNjgwIE9obXMgICAgICAgICAgICAxMDAwIE9obXMNCisJcmV0dXJuIG1fYmF0dGVyeUNoYW5uZWwtPkdldEF2ZXJhZ2VWb2x0YWdlKCkgKiAoMTY4MC4wIC8gMTAwMC4wKTsNCit9DQorDQorLyoqDQorICogR2V0IHRoZSB2YWx1ZSBvZiB0aGUgYXhpcyBvbiBhIGpveXN0aWNrLg0KKyAqIFRoaXMgZGVwZW5kcyBvbiB0aGUgbWFwcGluZyBvZiB0aGUgam95c3RpY2sgY29ubmVjdGVkIHRvIHRoZSBzcGVjaWZpZWQgcG9ydC4NCisgKiANCisgKiBAcGFyYW0gc3RpY2sgVGhlIGpveXN0aWNrIHRvIHJlYWQuDQorICogQHBhcmFtIGF4aXMgVGhlIGFuYWxvZyBheGlzIHZhbHVlIHRvIHJlYWQgZnJvbSB0aGUgam95c3RpY2suDQorICogQHJldHVybiBUaGUgdmFsdWUgb2YgdGhlIGF4aXMgb24gdGhlIGpveXN0aWNrLg0KKyAqLw0KK2Zsb2F0IERyaXZlclN0YXRpb246OkdldFN0aWNrQXhpcyhVSU5UMzIgc3RpY2ssIFVJTlQzMiBheGlzKQ0KK3sNCisJaWYgKGF4aXMgPCAxIHx8IGF4aXMgPiBrSm95c3RpY2tBeGVzKQ0KKwl7DQorCQl3cGlfc2V0V1BJRXJyb3IoQmFkSm95c3RpY2tBeGlzKTsNCisJCXJldHVybiAwLjA7DQorCX0NCisNCisJSU5UOCB2YWx1ZTsNCisJc3dpdGNoIChzdGljaykNCisJew0KKwkJY2FzZSAxOg0KKwkJCXZhbHVlID0gbV9jb250cm9sRGF0YS0+c3RpY2swQXhlc1theGlzLTFdOw0KKwkJCWJyZWFrOw0KKwkJY2FzZSAyOg0KKwkJCXZhbHVlID0gbV9jb250cm9sRGF0YS0+c3RpY2sxQXhlc1theGlzLTFdOw0KKwkJCWJyZWFrOw0KKwkJY2FzZSAzOg0KKwkJCXZhbHVlID0gbV9jb250cm9sRGF0YS0+c3RpY2syQXhlc1theGlzLTFdOw0KKwkJCWJyZWFrOw0KKwkJY2FzZSA0Og0KKwkJCXZhbHVlID0gbV9jb250cm9sRGF0YS0+c3RpY2szQXhlc1theGlzLTFdOw0KKwkJCWJyZWFrOw0KKwkJZGVmYXVsdDoNCisJCQl3cGlfc2V0V1BJRXJyb3IoQmFkSm95c3RpY2tJbmRleCk7DQorCQkJcmV0dXJuIDAuMDsNCisJfQ0KKwkNCisJZmxvYXQgcmVzdWx0Ow0KKwlpZiAodmFsdWUgPCAwKQ0KKwkJcmVzdWx0ID0gKChmbG9hdCkgdmFsdWUpIC8gMTI4LjA7DQorCWVsc2UNCisJCXJlc3VsdCA9ICgoZmxvYXQpIHZhbHVlKSAvIDEyNy4wOw0KKwl3cGlfYXNzZXJ0KHJlc3VsdCA8PSAxLjAgJiYgcmVzdWx0ID49IC0xLjApOw0KKwlpZiAocmVzdWx0ID4gMS4wKQ0KKwkJcmVzdWx0ID0gMS4wOw0KKwllbHNlIGlmIChyZXN1bHQgPCAtMS4wKQ0KKwkJcmVzdWx0ID0gLTEuMDsNCisJcmV0dXJuIHJlc3VsdDsNCit9DQorDQorLyoqDQorICogVGhlIHN0YXRlIG9mIHRoZSBidXR0b25zIG9uIHRoZSBqb3lzdGljay4NCisgKiAxMiBidXR0b25zICg0IG1zYiBhcmUgdW51c2VkKSBmcm9tIHRoZSBqb3lzdGljay4NCisgKiANCisgKiBAcGFyYW0gc3RpY2sgVGhlIGpveXN0aWNrIHRvIHJlYWQuDQorICogQHJldHVybiBUaGUgc3RhdGUgb2YgdGhlIGJ1dHRvbnMgb24gdGhlIGpveXN0aWNrLg0KKyAqLw0KK3Nob3J0IERyaXZlclN0YXRpb246OkdldFN0aWNrQnV0dG9ucyhVSU5UMzIgc3RpY2spDQorew0KKwlpZiAoc3RpY2sgPCAxIHx8IHN0aWNrID4gNCkNCisJCXdwaV9zZXRXUElFcnJvcldpdGhDb250ZXh0KFBhcmFtZXRlck91dE9mUmFuZ2UsICJzdGljayBtdXN0IGJlIGJldHdlZW4gMSBhbmQgNCIpOw0KKw0KKwlzd2l0Y2ggKHN0aWNrKQ0KKwl7DQorCWNhc2UgMToNCisJCXJldHVybiBtX2NvbnRyb2xEYXRhLT5zdGljazBCdXR0b25zOw0KKwljYXNlIDI6DQorCQlyZXR1cm4gbV9jb250cm9sRGF0YS0+c3RpY2sxQnV0dG9uczsNCisJY2FzZSAzOg0KKwkJcmV0dXJuIG1fY29udHJvbERhdGEtPnN0aWNrMkJ1dHRvbnM7DQorCWNhc2UgNDoNCisJCXJldHVybiBtX2NvbnRyb2xEYXRhLT5zdGljazNCdXR0b25zOw0KKwl9DQorCXJldHVybiAwOw0KK30NCisNCisvLyA1ViBkaXZpZGVkIGJ5IDEwIGJpdHMNCisjZGVmaW5lIGtEU0FuYWxvZ0luU2NhbGluZyAoKGZsb2F0KSg1LjAgLyAxMDIzLjApKQ0KKw0KKy8qKg0KKyAqIEdldCBhbiBhbmFsb2cgdm9sdGFnZSBmcm9tIHRoZSBEcml2ZXIgU3RhdGlvbi4NCisgKiBUaGUgYW5hbG9nIHZhbHVlcyBhcmUgcmV0dXJuZWQgYXMgdm9sdGFnZSB2YWx1ZXMgZm9yIHRoZSBEcml2ZXIgU3RhdGlvbiBhbmFsb2cgaW5wdXRzLg0KKyAqIFRoZXNlIGlucHV0cyBhcmUgdHlwaWNhbGx5IHVzZWQgZm9yIGFkdmFuY2VkIG9wZXJhdG9yIGludGVyZmFjZXMgY29uc2lzdGluZyBvZiBwb3RlbnRpb21ldGVycw0KKyAqIG9yIHJlc2lzdG9yIG5ldHdvcmtzIHJlcHJlc2VudGluZyB2YWx1ZXMgb24gYSByb3Rhcnkgc3dpdGNoLg0KKyAqIA0KKyAqIEBwYXJhbSBjaGFubmVsIFRoZSBhbmFsb2cgaW5wdXQgY2hhbm5lbCBvbiB0aGUgZHJpdmVyIHN0YXRpb24gdG8gcmVhZCBmcm9tLiBWYWxpZCByYW5nZSBpcyAxIC0gNC4NCisgKiBAcmV0dXJuIFRoZSBhbmFsb2cgdm9sdGFnZSBvbiB0aGUgaW5wdXQuDQorICovDQorZmxvYXQgRHJpdmVyU3RhdGlvbjo6R2V0QW5hbG9nSW4oVUlOVDMyIGNoYW5uZWwpDQorew0KKwlpZiAoY2hhbm5lbCA8IDEgfHwgY2hhbm5lbCA+IDQpDQorCQl3cGlfc2V0V1BJRXJyb3JXaXRoQ29udGV4dChQYXJhbWV0ZXJPdXRPZlJhbmdlLCAiY2hhbm5lbCBtdXN0IGJlIGJldHdlZW4gMSBhbmQgNCIpOw0KKw0KKwlzdGF0aWMgVUlOVDggcmVwb3J0ZWRfbWFzayA9IDA7DQorCWlmICghKHJlcG9ydGVkX21hc2sgJiAoMSA+PiBjaGFubmVsKSkpDQorCXsNCisJCW5Vc2FnZVJlcG9ydGluZzo6cmVwb3J0KG5Vc2FnZVJlcG9ydGluZzo6a1Jlc291cmNlVHlwZV9Ecml2ZXJTdGF0aW9uQ0lPLCBjaGFubmVsLCBuVXNhZ2VSZXBvcnRpbmc6OmtEcml2ZXJTdGF0aW9uQ0lPX0FuYWxvZyk7DQorCQlyZXBvcnRlZF9tYXNrIHw9ICgxID4+IGNoYW5uZWwpOw0KKwl9DQorDQorCXN3aXRjaCAoY2hhbm5lbCkNCisJew0KKwljYXNlIDE6DQorCQlyZXR1cm4ga0RTQW5hbG9nSW5TY2FsaW5nICogbV9jb250cm9sRGF0YS0+YW5hbG9nMTsNCisJY2FzZSAyOg0KKwkJcmV0dXJuIGtEU0FuYWxvZ0luU2NhbGluZyAqIG1fY29udHJvbERhdGEtPmFuYWxvZzI7DQorCWNhc2UgMzoNCisJCXJldHVybiBrRFNBbmFsb2dJblNjYWxpbmcgKiBtX2NvbnRyb2xEYXRhLT5hbmFsb2czOw0KKwljYXNlIDQ6DQorCQlyZXR1cm4ga0RTQW5hbG9nSW5TY2FsaW5nICogbV9jb250cm9sRGF0YS0+YW5hbG9nNDsNCisJfQ0KKwlyZXR1cm4gMC4wOw0KK30NCisNCisvKioNCisgKiBHZXQgdmFsdWVzIGZyb20gdGhlIGRpZ2l0YWwgaW5wdXRzIG9uIHRoZSBEcml2ZXIgU3RhdGlvbi4NCisgKiBSZXR1cm4gZGlnaXRhbCB2YWx1ZXMgZnJvbSB0aGUgRHJpdmVycyBTdGF0aW9uLiBUaGVzZSB2YWx1ZXMgYXJlIHR5cGljYWxseSB1c2VkIGZvciBidXR0b25zDQorICogYW5kIHN3aXRjaGVzIG9uIGFkdmFuY2VkIG9wZXJhdG9yIGludGVyZmFjZXMuDQorICogQHBhcmFtIGNoYW5uZWwgVGhlIGRpZ2l0YWwgaW5wdXQgdG8gZ2V0LiBWYWxpZCByYW5nZSBpcyAxIC0gOC4NCisgKi8NCitib29sIERyaXZlclN0YXRpb246OkdldERpZ2l0YWxJbihVSU5UMzIgY2hhbm5lbCkNCit7DQorCWlmIChjaGFubmVsIDwgMSB8fCBjaGFubmVsID4gOCkNCisJCXdwaV9zZXRXUElFcnJvcldpdGhDb250ZXh0KFBhcmFtZXRlck91dE9mUmFuZ2UsICJjaGFubmVsIG11c3QgYmUgYmV0d2VlbiAxIGFuZCA4Iik7DQorDQorCXN0YXRpYyBVSU5UOCByZXBvcnRlZF9tYXNrID0gMDsNCisJaWYgKCEocmVwb3J0ZWRfbWFzayAmICgxID4+IGNoYW5uZWwpKSkNCisJew0KKwkJblVzYWdlUmVwb3J0aW5nOjpyZXBvcnQoblVzYWdlUmVwb3J0aW5nOjprUmVzb3VyY2VUeXBlX0RyaXZlclN0YXRpb25DSU8sIGNoYW5uZWwsIG5Vc2FnZVJlcG9ydGluZzo6a0RyaXZlclN0YXRpb25DSU9fRGlnaXRhbEluKTsNCisJCXJlcG9ydGVkX21hc2sgfD0gKDEgPj4gY2hhbm5lbCk7DQorCX0NCisNCisJcmV0dXJuICgobV9jb250cm9sRGF0YS0+ZHNEaWdpdGFsSW4gPj4gKGNoYW5uZWwtMSkpICYgMHgxKSA/IHRydWUgOiBmYWxzZTsNCit9DQorDQorLyoqDQorICogU2V0IGEgdmFsdWUgZm9yIHRoZSBkaWdpdGFsIG91dHB1dHMgb24gdGhlIERyaXZlciBTdGF0aW9uLg0KKyAqIA0KKyAqIENvbnRyb2wgZGlnaXRhbCBvdXRwdXRzIG9uIHRoZSBEcml2ZXJzIFN0YXRpb24uIFRoZXNlIHZhbHVlcyBhcmUgdHlwaWNhbGx5IHVzZWQgZm9yDQorICogZ2l2aW5nIGZlZWRiYWNrIG9uIGEgY3VzdG9tIG9wZXJhdG9yIHN0YXRpb24gc3VjaCBhcyBMRURzLg0KKyAqIA0KKyAqIEBwYXJhbSBjaGFubmVsIFRoZSBkaWdpdGFsIG91dHB1dCB0byBzZXQuIFZhbGlkIHJhbmdlIGlzIDEgLSA4Lg0KKyAqIEBwYXJhbSB2YWx1ZSBUaGUgc3RhdGUgdG8gc2V0IHRoZSBkaWdpdGFsIG91dHB1dC4NCisgKi8NCit2b2lkIERyaXZlclN0YXRpb246OlNldERpZ2l0YWxPdXQoVUlOVDMyIGNoYW5uZWwsIGJvb2wgdmFsdWUpIA0KK3sNCisJaWYgKGNoYW5uZWwgPCAxIHx8IGNoYW5uZWwgPiA4KQ0KKwkJd3BpX3NldFdQSUVycm9yV2l0aENvbnRleHQoUGFyYW1ldGVyT3V0T2ZSYW5nZSwgImNoYW5uZWwgbXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDgiKTsNCisNCisJc3RhdGljIFVJTlQ4IHJlcG9ydGVkX21hc2sgPSAwOw0KKwlpZiAoIShyZXBvcnRlZF9tYXNrICYgKDEgPj4gY2hhbm5lbCkpKQ0KKwl7DQorCQluVXNhZ2VSZXBvcnRpbmc6OnJlcG9ydChuVXNhZ2VSZXBvcnRpbmc6OmtSZXNvdXJjZVR5cGVfRHJpdmVyU3RhdGlvbkNJTywgY2hhbm5lbCwgblVzYWdlUmVwb3J0aW5nOjprRHJpdmVyU3RhdGlvbkNJT19EaWdpdGFsT3V0KTsNCisJCXJlcG9ydGVkX21hc2sgfD0gKDEgPj4gY2hhbm5lbCk7DQorCX0NCisNCisJbV9kaWdpdGFsT3V0ICY9IH4oMHgxIDw8IChjaGFubmVsLTEpKTsNCisJbV9kaWdpdGFsT3V0IHw9ICgoVUlOVDgpdmFsdWUgPDwgKGNoYW5uZWwtMSkpOw0KK30NCisNCisvKioNCisgKiBHZXQgYSB2YWx1ZSB0aGF0IHdhcyBzZXQgZm9yIHRoZSBkaWdpdGFsIG91dHB1dHMgb24gdGhlIERyaXZlciBTdGF0aW9uLg0KKyAqIEBwYXJhbSBjaGFubmVsIFRoZSBkaWdpdGFsIG91cHV0IHRvIG1vbml0b3IuIFZhbGlkIHJhbmdlIGlzIDEgdGhyb3VnaCA4Lg0KKyAqIEByZXR1cm4gQSBkaWdpdGFsIHZhbHVlIGJlaW5nIG91dHB1dCBvbiB0aGUgRHJpdmVycyBTdGF0aW9uLg0KKyAqLw0KK2Jvb2wgRHJpdmVyU3RhdGlvbjo6R2V0RGlnaXRhbE91dChVSU5UMzIgY2hhbm5lbCkgDQorew0KKwlpZiAoY2hhbm5lbCA8IDEgfHwgY2hhbm5lbCA+IDgpDQorCQl3cGlfc2V0V1BJRXJyb3JXaXRoQ29udGV4dChQYXJhbWV0ZXJPdXRPZlJhbmdlLCAiY2hhbm5lbCBtdXN0IGJlIGJldHdlZW4gMSBhbmQgOCIpOw0KKw0KKwlyZXR1cm4gKChtX2RpZ2l0YWxPdXQgPj4gKGNoYW5uZWwtMSkpICYgMHgxKSA/IHRydWUgOiBmYWxzZTs7DQorfQ0KKw0KK2Jvb2wgRHJpdmVyU3RhdGlvbjo6SXNFbmFibGVkKCkNCit7DQorCXJldHVybiBtX2NvbnRyb2xEYXRhLT5lbmFibGVkOw0KK30NCisNCitib29sIERyaXZlclN0YXRpb246OklzRGlzYWJsZWQoKQ0KK3sNCisJcmV0dXJuICFtX2NvbnRyb2xEYXRhLT5lbmFibGVkOw0KK30NCisNCitib29sIERyaXZlclN0YXRpb246OklzQXV0b25vbW91cygpDQorew0KKwlyZXR1cm4gbV9jb250cm9sRGF0YS0+YXV0b25vbW91czsNCit9DQorDQorYm9vbCBEcml2ZXJTdGF0aW9uOjpJc09wZXJhdG9yQ29udHJvbCgpDQorew0KKwlyZXR1cm4gIShtX2NvbnRyb2xEYXRhLT5hdXRvbm9tb3VzIHx8IG1fY29udHJvbERhdGEtPnRlc3QpOw0KK30NCisNCitib29sIERyaXZlclN0YXRpb246OklzVGVzdCgpDQorew0KKwlyZXR1cm4gbV9jb250cm9sRGF0YS0+dGVzdDsNCit9DQorDQorLyoqDQorICogSGFzIGEgbmV3IGNvbnRyb2wgcGFja2V0IGZyb20gdGhlIGRyaXZlciBzdGF0aW9uIGFycml2ZWQgc2luY2UgdGhlIGxhc3QgdGltZSB0aGlzIGZ1bmN0aW9uIHdhcyBjYWxsZWQ/DQorICogV2FybmluZzogSWYgeW91IGNhbGwgdGhpcyBmdW5jdGlvbiBmcm9tIG1vcmUgdGhhbiBvbmUgcGxhY2UgYXQgdGhlIHNhbWUgdGltZSwNCisgKiB5b3Ugd2lsbCBub3QgZ2V0IHRoZSBnZXQgdGhlIGludGVuZGVkIGJlaGF2aW9yDQorICogQHJldHVybiBUcnVlIGlmIHRoZSBjb250cm9sIGRhdGEgaGFzIGJlZW4gdXBkYXRlZCBzaW5jZSB0aGUgbGFzdCBjYWxsLg0KKyAqLw0KK2Jvb2wgRHJpdmVyU3RhdGlvbjo6SXNOZXdDb250cm9sRGF0YSgpDQorew0KKwlyZXR1cm4gc2VtVGFrZShtX25ld0NvbnRyb2xEYXRhLCBOT19XQUlUKSA9PSAwOw0KK30NCisNCisvKioNCisgKiBJcyB0aGUgZHJpdmVyIHN0YXRpb24gYXR0YWNoZWQgdG8gYSBGaWVsZCBNYW5hZ2VtZW50IFN5c3RlbT8NCisgKiBOb3RlOiBUaGlzIGRvZXMgbm90IHdvcmsgd2l0aCB0aGUgQmx1ZSBEUy4NCisgKiBAcmV0dXJuIFRydWUgaWYgdGhlIHJvYm90IGlzIGNvbXBldGluZyBvbiBhIGZpZWxkIGJlaW5nIGNvbnRyb2xsZWQgYnkgYSBGaWVsZCBNYW5hZ2VtZW50IFN5c3RlbQ0KKyAqLw0KK2Jvb2wgRHJpdmVyU3RhdGlvbjo6SXNGTVNBdHRhY2hlZCgpDQorew0KKwlyZXR1cm4gbV9jb250cm9sRGF0YS0+Zm1zQXR0YWNoZWQ7DQorfQ0KKw0KKy8qKg0KKyAqIFJldHVybiB0aGUgRFMgcGFja2V0IG51bWJlci4NCisgKiBUaGUgcGFja2V0IG51bWJlciBpcyB0aGUgaW5kZXggb2YgdGhpcyBzZXQgb2YgZGF0YSByZXR1cm5lZCBieSB0aGUgZHJpdmVyIHN0YXRpb24uDQorICogRWFjaCB0aW1lIG5ldyBkYXRhIGlzIHJlY2VpdmVkLCB0aGUgcGFja2V0IG51bWJlciAoaW5jbHVkZWQgd2l0aCB0aGUgc2VudCBkYXRhKSBpcyByZXR1cm5lZC4NCisgKiBAcmV0dXJuIFRoZSBkcml2ZXIgc3RhdGlvbiBwYWNrZXQgbnVtYmVyDQorICovDQorVUlOVDMyIERyaXZlclN0YXRpb246OkdldFBhY2tldE51bWJlcigpDQorew0KKwlyZXR1cm4gbV9jb250cm9sRGF0YS0+cGFja2V0SW5kZXg7DQorfQ0KKw0KKy8qKg0KKyAqIFJldHVybiB0aGUgYWxsaWFuY2UgdGhhdCB0aGUgZHJpdmVyIHN0YXRpb24gc2F5cyBpdCBpcyBvbi4NCisgKiBUaGlzIGNvdWxkIHJldHVybiBrUmVkIG9yIGtCbHVlDQorICogQHJldHVybiBUaGUgQWxsaWFuY2UgZW51bQ0KKyAqLw0KK0RyaXZlclN0YXRpb246OkFsbGlhbmNlIERyaXZlclN0YXRpb246OkdldEFsbGlhbmNlKCkNCit7DQorCWlmIChtX2NvbnRyb2xEYXRhLT5kc0lEX0FsbGlhbmNlID09ICdSJykgcmV0dXJuIGtSZWQ7DQorCWlmIChtX2NvbnRyb2xEYXRhLT5kc0lEX0FsbGlhbmNlID09ICdCJykgcmV0dXJuIGtCbHVlOw0KKwl3cGlfYXNzZXJ0KGZhbHNlKTsNCisJcmV0dXJuIGtJbnZhbGlkOw0KK30NCisNCisvKioNCisgKiBSZXR1cm4gdGhlIGRyaXZlciBzdGF0aW9uIGxvY2F0aW9uIG9uIHRoZSBmaWVsZA0KKyAqIFRoaXMgY291bGQgcmV0dXJuIDEsIDIsIG9yIDMNCisgKiBAcmV0dXJuIFRoZSBsb2NhdGlvbiBvZiB0aGUgZHJpdmVyIHN0YXRpb24NCisgKi8NCitVSU5UMzIgRHJpdmVyU3RhdGlvbjo6R2V0TG9jYXRpb24oKQ0KK3sNCisJd3BpX2Fzc2VydCAoKG1fY29udHJvbERhdGEtPmRzSURfUG9zaXRpb24gPj0gJzEnKSAmJiAobV9jb250cm9sRGF0YS0+ZHNJRF9Qb3NpdGlvbiA8PSAnMycpKTsNCisJcmV0dXJuIG1fY29udHJvbERhdGEtPmRzSURfUG9zaXRpb24gLSAnMCc7DQorfQ0KKw0KKy8qKg0KKyAqIFdhaXQgdW50aWwgYSBuZXcgcGFja2V0IGNvbWVzIGZyb20gdGhlIGRyaXZlciBzdGF0aW9uDQorICogVGhpcyBibG9ja3Mgb24gYSBzZW1hcGhvcmUsIHNvIHRoZSB3YWl0aW5nIGlzIGVmZmljaWVudC4NCisgKiBUaGlzIGlzIGEgZ29vZCB3YXkgdG8gZGVsYXkgcHJvY2Vzc2luZyB1bnRpbCB0aGVyZSBpcyBuZXcgZHJpdmVyIHN0YXRpb24gZGF0YSB0byBhY3Qgb24NCisgKi8NCit2b2lkIERyaXZlclN0YXRpb246OldhaXRGb3JEYXRhKCkNCit7DQorCXNlbVRha2UobV93YWl0Rm9yRGF0YVNlbSwgV0FJVF9GT1JFVkVSKTsNCit9DQorDQorLyoqDQorICogUmV0dXJuIHRoZSBhcHByb3hpbWF0ZSBtYXRjaCB0aW1lDQorICogVGhlIEZNUyBkb2VzIG5vdCBjdXJyZW50bHkgc2VuZCB0aGUgb2ZmaWNpYWwgbWF0Y2ggdGltZSB0byB0aGUgcm9ib3RzDQorICogVGhpcyByZXR1cm5zIHRoZSB0aW1lIHNpbmNlIHRoZSBlbmFibGUgc2lnbmFsIHNlbnQgZnJvbSB0aGUgRHJpdmVyIFN0YXRpb24NCisgKiBBdCB0aGUgYmVnaW5uaW5nIG9mIGF1dG9ub21vdXMsIHRoZSB0aW1lIGlzIHJlc2V0IHRvIDAuMCBzZWNvbmRzDQorICogQXQgdGhlIGJlZ2lubmluZyBvZiB0ZWxlb3AsIHRoZSB0aW1lIGlzIHJlc2V0IHRvICsxNS4wIHNlY29uZHMNCisgKiBJZiB0aGUgcm9ib3QgaXMgZGlzYWJsZWQsIHRoaXMgcmV0dXJucyAwLjAgc2Vjb25kcw0KKyAqIFdhcm5pbmc6IFRoaXMgaXMgbm90IGFuIG9mZmljaWFsIHRpbWUgKHNvIGl0IGNhbm5vdCBiZSB1c2VkIHRvIGFyZ3VlIHdpdGggcmVmZXJlZXMpDQorICogQHJldHVybiBNYXRjaCB0aW1lIGluIHNlY29uZHMgc2luY2UgdGhlIGJlZ2lubmluZyBvZiBhdXRvbm9tb3VzDQorICovDQorZG91YmxlIERyaXZlclN0YXRpb246OkdldE1hdGNoVGltZSgpDQorew0KKwlpZiAobV9hcHByb3hNYXRjaFRpbWVPZmZzZXQgPCAwLjApDQorCQlyZXR1cm4gMC4wOw0KKwlyZXR1cm4gVGltZXI6OkdldEZQR0FUaW1lc3RhbXAoKSAtIG1fYXBwcm94TWF0Y2hUaW1lT2Zmc2V0Ow0KK30NCisNCisvKioNCisgKiBSZXR1cm4gdGhlIHRlYW0gbnVtYmVyIHRoYXQgdGhlIERyaXZlciBTdGF0aW9uIGlzIGNvbmZpZ3VyZWQgZm9yDQorICogQHJldHVybiBUaGUgdGVhbSBudW1iZXINCisgKi8NCitVSU5UMTYgRHJpdmVyU3RhdGlvbjo6R2V0VGVhbU51bWJlcigpDQorew0KKwlyZXR1cm4gbV9jb250cm9sRGF0YS0+dGVhbUlEOw0KK30NCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9Ecml2ZXJTdGF0aW9uLmggYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9Ecml2ZXJTdGF0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzE3ZjhkMQotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0RyaXZlclN0YXRpb24uaApAQCAtMCwwICsxLDEzMyBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBDb3B5cmlnaHQgKGMpIEZJUlNUIDIwMDguIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCQkJCQkJCSAgKi8NCisvKiBPcGVuIFNvdXJjZSBTb2Z0d2FyZSAtIG1heSBiZSBtb2RpZmllZCBhbmQgc2hhcmVkIGJ5IEZSQyB0ZWFtcy4gVGhlIGNvZGUgICAqLw0KKy8qIG11c3QgYmUgYWNjb21wYW5pZWQgYnkgdGhlIEZJUlNUIEJTRCBsaWNlbnNlIGZpbGUgaW4gJChXSU5EX0JBU0UpL1dQSUxpYi4gICovDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisjaWZuZGVmIF9fRFJJVkVSX1NUQVRJT05fSF9fDQorI2RlZmluZSBfX0RSSVZFUl9TVEFUSU9OX0hfXw0KKw0KKyNpbmNsdWRlICJEYXNoYm9hcmQuaCINCisjaW5jbHVkZSAiRHJpdmVyU3RhdGlvbkVuaGFuY2VkSU8uaCINCisjaW5jbHVkZSAiU2Vuc29yQmFzZS5oIg0KKyNpbmNsdWRlICJUYXNrLmgiDQorDQorc3RydWN0IEZSQ0NvbW1vbkNvbnRyb2xEYXRhOw0KK2NsYXNzIEFuYWxvZ0NoYW5uZWw7DQorDQorLyoqDQorICogUHJvdmlkZSBhY2Nlc3MgdG8gdGhlIG5ldHdvcmsgY29tbXVuaWNhdGlvbiBkYXRhIHRvIC8gZnJvbSB0aGUgRHJpdmVyIFN0YXRpb24uDQorICovDQorY2xhc3MgRHJpdmVyU3RhdGlvbiA6IHB1YmxpYyBTZW5zb3JCYXNlDQorew0KK3B1YmxpYzoNCisJZW51bSBBbGxpYW5jZSB7a1JlZCwga0JsdWUsIGtJbnZhbGlkfTsNCisNCisJdmlydHVhbCB+RHJpdmVyU3RhdGlvbigpOw0KKwlzdGF0aWMgRHJpdmVyU3RhdGlvbiAqR2V0SW5zdGFuY2UoKTsNCisNCisJc3RhdGljIGNvbnN0IFVJTlQzMiBrQmF0dGVyeU1vZHVsZU51bWJlciA9IDE7DQorCXN0YXRpYyBjb25zdCBVSU5UMzIga0JhdHRlcnlDaGFubmVsID0gODsNCisJc3RhdGljIGNvbnN0IFVJTlQzMiBrSm95c3RpY2tQb3J0cyA9IDQ7DQorCXN0YXRpYyBjb25zdCBVSU5UMzIga0pveXN0aWNrQXhlcyA9IDY7DQorDQorCWZsb2F0IEdldFN0aWNrQXhpcyhVSU5UMzIgc3RpY2ssIFVJTlQzMiBheGlzKTsNCisJc2hvcnQgR2V0U3RpY2tCdXR0b25zKFVJTlQzMiBzdGljayk7DQorDQorCWZsb2F0IEdldEFuYWxvZ0luKFVJTlQzMiBjaGFubmVsKTsNCisJYm9vbCBHZXREaWdpdGFsSW4oVUlOVDMyIGNoYW5uZWwpOw0KKwl2b2lkIFNldERpZ2l0YWxPdXQoVUlOVDMyIGNoYW5uZWwsIGJvb2wgdmFsdWUpOw0KKwlib29sIEdldERpZ2l0YWxPdXQoVUlOVDMyIGNoYW5uZWwpOw0KKw0KKwlib29sIElzRW5hYmxlZCgpOw0KKwlib29sIElzRGlzYWJsZWQoKTsNCisgICAgYm9vbCBJc0F1dG9ub21vdXMoKTsNCisJYm9vbCBJc09wZXJhdG9yQ29udHJvbCgpOw0KKyAgICBib29sIElzVGVzdCgpOw0KKwlib29sIElzTmV3Q29udHJvbERhdGEoKTsNCisJYm9vbCBJc0ZNU0F0dGFjaGVkKCk7DQorDQorCVVJTlQzMiBHZXRQYWNrZXROdW1iZXIoKTsNCisJQWxsaWFuY2UgR2V0QWxsaWFuY2UoKTsNCisJVUlOVDMyIEdldExvY2F0aW9uKCk7DQorCXZvaWQgV2FpdEZvckRhdGEoKTsNCisJZG91YmxlIEdldE1hdGNoVGltZSgpOw0KKwlmbG9hdCBHZXRCYXR0ZXJ5Vm9sdGFnZSgpOw0KKwlVSU5UMTYgR2V0VGVhbU51bWJlcigpOw0KKw0KKwkvLyBHZXQgdGhlIGRlZmF1bHQgZGFzaGJvYXJkIHBhY2tlcnMuIFRoZXNlIGluc3RhbmNlcyBzdGF5IGFyb3VuZCBldmVuIGFmdGVyDQorCS8vIGEgY2FsbCB0byBTZXRIaWdofExvd1ByaW9yaXR5RGFzaGJvYXJkUGFja2VyVG9Vc2UoKSBjaGFuZ2VzIHdoaWNoIHBhY2tlcg0KKwkvLyBpcyBpbiB1c2UuIFlvdSBjYW4gcmVzdG9yZSB0aGUgZGVmYXVsdCBoaWdoIHByaW9yaXR5IHBhY2tlciBieSBjYWxsaW5nDQorCS8vIFNldEhpZ2hQcmlvcml0eURhc2hib2FyZFBhY2tlclRvVXNlKCZHZXRIaWdoUHJpb3JpdHlEYXNoYm9hcmRQYWNrZXIoKSkuDQorCURhc2hib2FyZCYgR2V0SGlnaFByaW9yaXR5RGFzaGJvYXJkUGFja2VyKCkgeyByZXR1cm4gbV9kYXNoYm9hcmRIaWdoOyB9DQorCURhc2hib2FyZCYgR2V0TG93UHJpb3JpdHlEYXNoYm9hcmRQYWNrZXIoKSB7IHJldHVybiBtX2Rhc2hib2FyZExvdzsgfQ0KKw0KKwkvLyBHZXQvc2V0IHRoZSBkYXNoYm9hcmQgcGFja2VycyB0byB1c2UuIFRoaXMgY2FuIHNpZGVsaW5lIG9yIHJlc3RvcmUgdGhlDQorCS8vIGRlZmF1bHQgcGFja2Vycy4gSW5pdGlhbGl6aW5nIFNtYXJ0RGFzaGJvYXJkIGNoYW5nZXMgdGhlIGhpZ2ggcHJpb3JpdHkNCisJLy8gcGFja2VyIGluIHVzZSBzbyBiZXdhcmUgdGhhdCB0aGUgZGVmYXVsdCBwYWNrZXIgd2lsbCB0aGVuIGJlIGlkbGUuIFRoZXNlDQorCS8vIG1ldGhvZHMgc3VwcG9ydCBhbnkga2luZCBvZiBEYXNoYm9hcmRCYXNlLCBlLmcuIGEgRGFzaGJvYXJkIG9yIGENCisJLy8gU21hcnREYXNoYm9hcmQuDQorCURhc2hib2FyZEJhc2UqIEdldEhpZ2hQcmlvcml0eURhc2hib2FyZFBhY2tlckluVXNlKCkgeyByZXR1cm4gbV9kYXNoYm9hcmRJblVzZUhpZ2g7IH0NCisJRGFzaGJvYXJkQmFzZSogR2V0TG93UHJpb3JpdHlEYXNoYm9hcmRQYWNrZXJJblVzZSgpIHsgcmV0dXJuIG1fZGFzaGJvYXJkSW5Vc2VMb3c7IH0NCisJdm9pZCBTZXRIaWdoUHJpb3JpdHlEYXNoYm9hcmRQYWNrZXJUb1VzZShEYXNoYm9hcmRCYXNlKiBkYikgeyBtX2Rhc2hib2FyZEluVXNlSGlnaCA9IGRiOyB9DQorCXZvaWQgU2V0TG93UHJpb3JpdHlEYXNoYm9hcmRQYWNrZXJUb1VzZShEYXNoYm9hcmRCYXNlKiBkYikgeyBtX2Rhc2hib2FyZEluVXNlTG93ID0gZGI7IH0NCisNCisJRHJpdmVyU3RhdGlvbkVuaGFuY2VkSU8mIEdldEVuaGFuY2VkSU8oKSB7IHJldHVybiBtX2VuaGFuY2VkSU87IH0NCisNCisJdm9pZCBJbmNyZW1lbnRVcGRhdGVOdW1iZXIoKSB7IG1fdXBkYXRlTnVtYmVyKys7IH0NCisJU0VNX0lEIEdldFVzZXJTdGF0dXNEYXRhU2VtKCkgeyByZXR1cm4gbV9zdGF0dXNEYXRhU2VtYXBob3JlOyB9DQorDQorCS8qKiBPbmx5IHRvIGJlIHVzZWQgdG8gdGVsbCB0aGUgRHJpdmVyIFN0YXRpb24gd2hhdCBjb2RlIHlvdSBjbGFpbSB0byBiZSBleGVjdXRpbmcNCisJICogICBmb3IgZGlhZ25vc3RpYyBwdXJwb3NlcyBvbmx5DQorCSAqIEBwYXJhbSBlbnRlcmluZyBJZiB0cnVlLCBzdGFydGluZyBkaXNhYmxlZCBjb2RlOyBpZiBmYWxzZSwgbGVhdmluZyBkaXNhYmxlZCBjb2RlICovDQorCXZvaWQgSW5EaXNhYmxlZChib29sIGVudGVyaW5nKSB7bV91c2VySW5EaXNhYmxlZD1lbnRlcmluZzt9DQorCS8qKiBPbmx5IHRvIGJlIHVzZWQgdG8gdGVsbCB0aGUgRHJpdmVyIFN0YXRpb24gd2hhdCBjb2RlIHlvdSBjbGFpbSB0byBiZSBleGVjdXRpbmcNCisJICogICBmb3IgZGlhZ25vc3RpYyBwdXJwb3NlcyBvbmx5DQorCSAqIEBwYXJhbSBlbnRlcmluZyBJZiB0cnVlLCBzdGFydGluZyBhdXRvbm9tb3VzIGNvZGU7IGlmIGZhbHNlLCBsZWF2aW5nIGF1dG9ub21vdXMgY29kZSAqLw0KKwl2b2lkIEluQXV0b25vbW91cyhib29sIGVudGVyaW5nKSB7bV91c2VySW5BdXRvbm9tb3VzPWVudGVyaW5nO30NCisgICAgLyoqIE9ubHkgdG8gYmUgdXNlZCB0byB0ZWxsIHRoZSBEcml2ZXIgU3RhdGlvbiB3aGF0IGNvZGUgeW91IGNsYWltIHRvIGJlIGV4ZWN1dGluZw0KKyAgICAgKiAgIGZvciBkaWFnbm9zdGljIHB1cnBvc2VzIG9ubHkNCisgICAgICogQHBhcmFtIGVudGVyaW5nIElmIHRydWUsIHN0YXJ0aW5nIHRlbGVvcCBjb2RlOyBpZiBmYWxzZSwgbGVhdmluZyB0ZWxlb3AgY29kZSAqLw0KKyAgICB2b2lkIEluT3BlcmF0b3JDb250cm9sKGJvb2wgZW50ZXJpbmcpIHttX3VzZXJJblRlbGVvcD1lbnRlcmluZzt9DQorICAgIC8qKiBPbmx5IHRvIGJlIHVzZWQgdG8gdGVsbCB0aGUgRHJpdmVyIFN0YXRpb24gd2hhdCBjb2RlIHlvdSBjbGFpbSB0byBiZSBleGVjdXRpbmcNCisgICAgICogICBmb3IgZGlhZ25vc3RpYyBwdXJwb3NlcyBvbmx5DQorICAgICAqIEBwYXJhbSBlbnRlcmluZyBJZiB0cnVlLCBzdGFydGluZyB0ZXN0IGNvZGU7IGlmIGZhbHNlLCBsZWF2aW5nIHRlc3QgY29kZSAqLw0KKyAgICB2b2lkIEluVGVzdChib29sIGVudGVyaW5nKSB7bV91c2VySW5UZXN0PWVudGVyaW5nO30NCisNCitwcm90ZWN0ZWQ6DQorCURyaXZlclN0YXRpb24oKTsNCisNCisJdm9pZCBHZXREYXRhKCk7DQorCXZvaWQgU2V0RGF0YSgpOw0KKw0KK3ByaXZhdGU6DQorCXN0YXRpYyB2b2lkIEluaXRUYXNrKERyaXZlclN0YXRpb24gKmRzKTsNCisJc3RhdGljIERyaXZlclN0YXRpb24gKm1faW5zdGFuY2U7DQorCXN0YXRpYyBVSU5UOCBtX3VwZGF0ZU51bWJlcjsNCisJLy8vPCBUT0RPOiBHZXQgcmlkIG9mIHRoaXMgYW5kIHVzZSB0aGUgc2VtYXBob3JlIHNpZ25hbGluZw0KKwlzdGF0aWMgY29uc3QgZmxvYXQga1VwZGF0ZVBlcmlvZCA9IDAuMDI7DQorDQorCXZvaWQgUnVuKCk7DQorDQorCXN0cnVjdCBGUkNDb21tb25Db250cm9sRGF0YSAqbV9jb250cm9sRGF0YTsNCisJVUlOVDggbV9kaWdpdGFsT3V0Ow0KKwlBbmFsb2dDaGFubmVsICptX2JhdHRlcnlDaGFubmVsOw0KKwlTRU1fSUQgbV9zdGF0dXNEYXRhU2VtYXBob3JlOw0KKwlUYXNrIG1fdGFzazsNCisJRGFzaGJvYXJkIG1fZGFzaGJvYXJkSGlnaDsgIC8vIHRoZSBkZWZhdWx0IGRhc2hib2FyZCBwYWNrZXJzDQorCURhc2hib2FyZCBtX2Rhc2hib2FyZExvdzsNCisJRGFzaGJvYXJkQmFzZSogbV9kYXNoYm9hcmRJblVzZUhpZ2g7ICAvLyB0aGUgY3VycmVudCBkYXNoYm9hcmQgcGFja2VycyBpbiB1c2UNCisJRGFzaGJvYXJkQmFzZSogbV9kYXNoYm9hcmRJblVzZUxvdzsNCisJU0VNX0lEIG1fbmV3Q29udHJvbERhdGE7DQorCVNFTV9JRCBtX3BhY2tldERhdGFBdmFpbGFibGVTZW07DQorCURyaXZlclN0YXRpb25FbmhhbmNlZElPIG1fZW5oYW5jZWRJTzsNCisJU0VNX0lEIG1fd2FpdEZvckRhdGFTZW07DQorCWRvdWJsZSBtX2FwcHJveE1hdGNoVGltZU9mZnNldDsNCisJYm9vbCBtX3VzZXJJbkRpc2FibGVkOw0KKwlib29sIG1fdXNlckluQXV0b25vbW91czsNCisgICAgYm9vbCBtX3VzZXJJblRlbGVvcDsNCisgICAgYm9vbCBtX3VzZXJJblRlc3Q7DQorfTsNCisNCisjZW5kaWYNCisNCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9Ecml2ZXJTdGF0aW9uRW5oYW5jZWRJTy5jcHAgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9Ecml2ZXJTdGF0aW9uRW5oYW5jZWRJTy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDAwY2Y4NgotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0RyaXZlclN0YXRpb25FbmhhbmNlZElPLmNwcApAQCAtMCwwICsxLDk5NSBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBDb3B5cmlnaHQgKGMpIEZJUlNUIDIwMDguIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCQkJCQkJCSAgKi8NCisvKiBPcGVuIFNvdXJjZSBTb2Z0d2FyZSAtIG1heSBiZSBtb2RpZmllZCBhbmQgc2hhcmVkIGJ5IEZSQyB0ZWFtcy4gVGhlIGNvZGUgICAqLw0KKy8qIG11c3QgYmUgYWNjb21wYW5pZWQgYnkgdGhlIEZJUlNUIEJTRCBsaWNlbnNlIGZpbGUgaW4gJChXSU5EX0JBU0UpL1dQSUxpYi4gICovDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisjaW5jbHVkZSAiRHJpdmVyU3RhdGlvbkVuaGFuY2VkSU8uaCINCisjaW5jbHVkZSAiTmV0d29ya0NvbW11bmljYXRpb24vVXNhZ2VSZXBvcnRpbmcuaCINCisjaW5jbHVkZSAiU3luY2hyb25pemVkLmgiDQorI2luY2x1ZGUgIldQSUVycm9ycy5oIg0KKyNpbmNsdWRlIDxzdHJMaWIuaD4NCisNCisvKioNCisgKiBEcml2ZXJTdGF0aW9uRW5oYW5jZWRJTyBjb250cnVjdG9yLg0KKyAqIA0KKyAqIFRoaXMgaXMgb25seSBjYWxsZWQgb25jZSB3aGVuIHRoZSBEcml2ZXJTdGF0aW9uIGNvbnN0cnVjdG9yIGlzIGNhbGxlZC4NCisgKi8NCitEcml2ZXJTdGF0aW9uRW5oYW5jZWRJTzo6RHJpdmVyU3RhdGlvbkVuaGFuY2VkSU8oKQ0KKwk6IG1faW5wdXRWYWxpZCAoZmFsc2UpDQorCSwgbV9vdXRwdXRWYWxpZCAoZmFsc2UpDQorCSwgbV9jb25maWdDaGFuZ2VkIChmYWxzZSkNCisJLCBtX3JlcXVlc3RFbmhhbmNlZEVuYWJsZSAoZmFsc2UpDQorew0KKwliemVybygoY2hhciopJm1faW5wdXREYXRhLCBzaXplb2YobV9pbnB1dERhdGEpKTsNCisJYnplcm8oKGNoYXIqKSZtX291dHB1dERhdGEsIHNpemVvZihtX291dHB1dERhdGEpKTsNCisJbV9vdXRwdXREYXRhLnNpemUgPSBzaXplb2YobV9vdXRwdXREYXRhKSAtIDE7DQorCW1fb3V0cHV0RGF0YS5pZCA9IGtPdXRwdXRCbG9ja0lEOw0KKwkvLyBFeHBlY3RlZCB0byBiZSBhY3RpdmUgbG93LCBzbyBpbml0aWFsaXplIGluYWN0aXZlLg0KKwltX291dHB1dERhdGEuZGF0YS5maXhlZF9kaWdpdGFsX291dCA9IDB4MzsNCisJbV9pbnB1dERhdGFTZW1hcGhvcmUgPSBzZW1NQ3JlYXRlKFNFTV9RX1BSSU9SSVRZIHwgU0VNX0RFTEVURV9TQUZFIHwgU0VNX0lOVkVSU0lPTl9TQUZFKTsNCisJbV9vdXRwdXREYXRhU2VtYXBob3JlID0gc2VtTUNyZWF0ZShTRU1fUV9QUklPUklUWSB8IFNFTV9ERUxFVEVfU0FGRSB8IFNFTV9JTlZFUlNJT05fU0FGRSk7DQorCW1fZW5jb2Rlck9mZnNldHNbMF0gPSAwOw0KKwltX2VuY29kZXJPZmZzZXRzWzFdID0gMDsNCit9DQorDQorLyoqDQorICogRHJpdmVyU3RhdGlvbkVuaGFuY2VkSU8gZGVzdHJ1Y3Rvci4NCisgKiANCisgKiBDYWxsZWQgb25seSB3aGVuIHRoZSBEcml2ZXJTdGF0aW9uIGNsYXNzIGlzIGRlc3Ryb3llZC4NCisgKi8NCitEcml2ZXJTdGF0aW9uRW5oYW5jZWRJTzo6fkRyaXZlclN0YXRpb25FbmhhbmNlZElPKCkNCit7DQorCXNlbURlbGV0ZShtX291dHB1dERhdGFTZW1hcGhvcmUpOw0KKwlzZW1EZWxldGUobV9pbnB1dERhdGFTZW1hcGhvcmUpOw0KK30NCisNCisvKioNCisgKiBDYWxsZWQgYnkgdGhlIERyaXZlclN0YXRpb24gY2xhc3Mgd2hlbiBkYXRhIGlzIGF2YWlsYWJsZS4NCisgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgc2V0IGFueSBtb2RpZmllZCBjb25maWd1cmF0aW9uIC8gb3V0cHV0LA0KKyAqIHRoZW4gcmVhZCB0aGUgaW5wdXQgYW5kIGNvbmZpZ3VyYXRpb24gZnJvbSB0aGUgSU8uDQorICovDQordm9pZCBEcml2ZXJTdGF0aW9uRW5oYW5jZWRJTzo6VXBkYXRlRGF0YSgpDQorew0KKwlJTlQzMiByZXRWYWw7DQorCXsNCisJCXN0YXR1c19ibG9ja190IHRlbXBPdXRwdXREYXRhOw0KKwkJU3luY2hyb25pemVkIHN5bmMobV9vdXRwdXREYXRhU2VtYXBob3JlKTsNCisJCWlmIChtX291dHB1dFZhbGlkIHx8IG1fY29uZmlnQ2hhbmdlZCB8fCBtX3JlcXVlc3RFbmhhbmNlZEVuYWJsZSkNCisJCXsNCisJCQltX291dHB1dERhdGEuZmxhZ3MgPSBrU3RhdHVzVmFsaWQ7DQorCQkJaWYgKG1fcmVxdWVzdEVuaGFuY2VkRW5hYmxlKQ0KKwkJCXsNCisJCQkJLy8gU29tZW9uZSBjYWxsZWQgb25lIG9mIHRoZSBnZXQgY29uZmlnIEFQSXMsIGJ1dCB3ZSBhcmUgbm90IGluIGVuaGFuY2VkIG1vZGUuDQorCQkJCW1fb3V0cHV0RGF0YS5mbGFncyB8PSBrRm9yY2VFbmhhbmNlZE1vZGU7DQorCQkJfQ0KKwkJCWlmIChtX2NvbmZpZ0NoYW5nZWQpDQorCQkJew0KKwkJCQlpZiAoIW1fb3V0cHV0VmFsaWQpDQorCQkJCXsNCisJCQkJCS8vIFNvbWVvbmUgY2FsbGVkIG9uZSBvZiB0aGUgc2V0IGNvbmZpZyBBUElzLCBidXQgd2UgYXJlIG5vdCBpbiBlbmhhbmNlZCBtb2RlLg0KKwkJCQkJbV9vdXRwdXREYXRhLmZsYWdzIHw9IGtGb3JjZUVuaGFuY2VkTW9kZTsNCisJCQkJfQ0KKwkJCQltX291dHB1dERhdGEuZmxhZ3MgfD0ga1N0YXR1c0NvbmZpZ0NoYW5nZWQ7DQorCQkJfQ0KKwkJCW92ZXJyaWRlSU9Db25maWcoKGNoYXIqKSZtX291dHB1dERhdGEsIDUpOw0KKwkJfQ0KKwkJcmV0VmFsID0gZ2V0RHluYW1pY0NvbnRyb2xEYXRhKGtPdXRwdXRCbG9ja0lELCAoY2hhciopJnRlbXBPdXRwdXREYXRhLCBzaXplb2Yoc3RhdHVzX2Jsb2NrX3QpLCA1KTsNCisJCWlmIChyZXRWYWwgPT0gMCkNCisJCXsNCisJCQlpZiAobV9vdXRwdXRWYWxpZCkNCisJCQl7DQorCQkJCWlmIChtX2NvbmZpZ0NoYW5nZWQpDQorCQkJCXsNCisJCQkJCS8vIElmIG91ciBjb25maWcgY2hhbmdlIG1hZGUgdGhlIHJvdW5kIHRyaXAgdGhlbiBjbGVhciB0aGUgZmxhZy4NCisJCQkJCWlmIChJc0NvbmZpZ0VxdWFsKHRlbXBPdXRwdXREYXRhLCBtX291dHB1dERhdGEpKQ0KKwkJCQkJew0KKwkJCQkJCW1fY29uZmlnQ2hhbmdlZCA9IGZhbHNlOw0KKwkJCQkJfQ0KKwkJCQl9DQorCQkJCWVsc2UNCisJCQkJew0KKwkJCQkJLy8gVE9ETzogVGhpcyB3b24ndCB3b3JrIHVudGlsIGFydGYxMTI4IGlzIGZpeGVkDQorCQkJCQkvL2lmICh0ZW1wT3V0cHV0RGF0YS5mbGFncyAmIGtTdGF0dXNDb25maWdDaGFuZ2VkKQ0KKwkJCQkJew0KKwkJCQkJCS8vIENvbmZpZ3VyYXRpb24gd2FzIHVwZGF0ZWQgb24gdGhlIERTLCBzbyB1cGRhdGUgb3VyIGxvY2FsIGNhY2hlLg0KKwkJCQkJCU1lcmdlQ29uZmlnSW50b091dHB1dCh0ZW1wT3V0cHV0RGF0YSwgbV9vdXRwdXREYXRhKTsNCisJCQkJCX0NCisJCQkJfQ0KKwkJCX0NCisJCQllbHNlDQorCQkJew0KKwkJCQkvLyBJbml0aWFsaXplIHRoZSBsb2NhbCBjYWNoZS4NCisJCQkJTWVyZ2VDb25maWdJbnRvT3V0cHV0KHRlbXBPdXRwdXREYXRhLCBtX291dHB1dERhdGEpOw0KKwkJCX0NCisJCQltX3JlcXVlc3RFbmhhbmNlZEVuYWJsZSA9IGZhbHNlOw0KKwkJCW1fb3V0cHV0VmFsaWQgPSB0cnVlOw0KKwkJfQ0KKwkJZWxzZQ0KKwkJew0KKwkJCW1fb3V0cHV0VmFsaWQgPSBmYWxzZTsNCisJCQltX2lucHV0VmFsaWQgPSBmYWxzZTsNCisJCX0NCisJfQ0KKwl7DQorCQlTeW5jaHJvbml6ZWQgc3luYyhtX2lucHV0RGF0YVNlbWFwaG9yZSk7DQorCQljb250cm9sX2Jsb2NrX3QgdGVtcElucHV0RGF0YTsNCisJCXJldFZhbCA9IGdldER5bmFtaWNDb250cm9sRGF0YShrSW5wdXRCbG9ja0lELCAoY2hhciopJnRlbXBJbnB1dERhdGEsIHNpemVvZihjb250cm9sX2Jsb2NrX3QpLCA1KTsNCisJCWlmIChyZXRWYWwgPT0gMCAmJiB0ZW1wSW5wdXREYXRhLmRhdGEuYXBpX3ZlcnNpb24gPT0ga1N1cHBvcnRlZEFQSVZlcnNpb24pDQorCQl7DQorCQkJbV9pbnB1dERhdGEgPSB0ZW1wSW5wdXREYXRhOw0KKwkJCW1faW5wdXRWYWxpZCA9IHRydWU7DQorCQl9DQorCQllbHNlDQorCQl7DQorCQkJbV9vdXRwdXRWYWxpZCA9IGZhbHNlOw0KKwkJCW1faW5wdXRWYWxpZCA9IGZhbHNlOw0KKwkJfQ0KKwl9DQorfQ0KKw0KKy8qKg0KKyAqIE1lcmdlIHRoZSBjb25maWcgcG9ydGlvbiBvZiB0aGUgRFMgb3V0cHV0IGJsb2NrIGludG8gdGhlIGxvY2FsIGNhY2hlLg0KKyAqLw0KK3ZvaWQgRHJpdmVyU3RhdGlvbkVuaGFuY2VkSU86Ok1lcmdlQ29uZmlnSW50b091dHB1dChjb25zdCBzdGF0dXNfYmxvY2tfdCAmZHNPdXRwdXRCbG9jaywgc3RhdHVzX2Jsb2NrX3QgJmxvY2FsQ2FjaGUpDQorew0KKwlsb2NhbENhY2hlLmRhdGEuZGlnaXRhbCA9IChsb2NhbENhY2hlLmRhdGEuZGlnaXRhbCAmIGRzT3V0cHV0QmxvY2suZGF0YS5kaWdpdGFsX29lKSB8DQorCQkoZHNPdXRwdXRCbG9jay5kYXRhLmRpZ2l0YWwgJiB+ZHNPdXRwdXRCbG9jay5kYXRhLmRpZ2l0YWxfb2UpOw0KKwlsb2NhbENhY2hlLmRhdGEuZGlnaXRhbF9vZSA9IGRzT3V0cHV0QmxvY2suZGF0YS5kaWdpdGFsX29lOw0KKwlsb2NhbENhY2hlLmRhdGEuZGlnaXRhbF9wZSA9IGRzT3V0cHV0QmxvY2suZGF0YS5kaWdpdGFsX3BlOw0KKwlsb2NhbENhY2hlLmRhdGEucHdtX3BlcmlvZFswXSA9IGRzT3V0cHV0QmxvY2suZGF0YS5wd21fcGVyaW9kWzBdOw0KKwlsb2NhbENhY2hlLmRhdGEucHdtX3BlcmlvZFsxXSA9IGRzT3V0cHV0QmxvY2suZGF0YS5wd21fcGVyaW9kWzFdOw0KKwlsb2NhbENhY2hlLmRhdGEuZW5hYmxlcyA9IGRzT3V0cHV0QmxvY2suZGF0YS5lbmFibGVzOw0KK30NCisNCisvKioNCisgKiBDb21wYXJlIHRoZSBjb25maWcgcG9ydGlvbiBvZiB0aGUgb3V0cHV0IGJsb2Nrcy4NCisgKi8NCitib29sIERyaXZlclN0YXRpb25FbmhhbmNlZElPOjpJc0NvbmZpZ0VxdWFsKGNvbnN0IHN0YXR1c19ibG9ja190ICZkc091dHB1dEJsb2NrLCBjb25zdCBzdGF0dXNfYmxvY2tfdCAmbG9jYWxDYWNoZSkNCit7DQorCWlmIChsb2NhbENhY2hlLmRhdGEuZGlnaXRhbF9vZSAhPSBkc091dHB1dEJsb2NrLmRhdGEuZGlnaXRhbF9vZSkgcmV0dXJuIGZhbHNlOw0KKwlpZiAoKGxvY2FsQ2FjaGUuZGF0YS5kaWdpdGFsICYgfmRzT3V0cHV0QmxvY2suZGF0YS5kaWdpdGFsKSAhPQ0KKwkJKGRzT3V0cHV0QmxvY2suZGF0YS5kaWdpdGFsICYgfmRzT3V0cHV0QmxvY2suZGF0YS5kaWdpdGFsKSkgcmV0dXJuIGZhbHNlOw0KKwlpZiAobG9jYWxDYWNoZS5kYXRhLmRpZ2l0YWxfcGUgIT0gZHNPdXRwdXRCbG9jay5kYXRhLmRpZ2l0YWxfcGUpIHJldHVybiBmYWxzZTsNCisJaWYgKGxvY2FsQ2FjaGUuZGF0YS5wd21fcGVyaW9kWzBdICE9IGRzT3V0cHV0QmxvY2suZGF0YS5wd21fcGVyaW9kWzBdKSByZXR1cm4gZmFsc2U7DQorCWlmIChsb2NhbENhY2hlLmRhdGEucHdtX3BlcmlvZFsxXSAhPSBkc091dHB1dEJsb2NrLmRhdGEucHdtX3BlcmlvZFsxXSkgcmV0dXJuIGZhbHNlOw0KKwlpZiAobG9jYWxDYWNoZS5kYXRhLmVuYWJsZXMgIT0gZHNPdXRwdXRCbG9jay5kYXRhLmVuYWJsZXMpIHJldHVybiBmYWxzZTsNCisJcmV0dXJuIHRydWU7DQorfQ0KKw0KKy8qKg0KKyAqIFF1ZXJ5IGFuIGFjY2VsZXJvbWV0ZXIgY2hhbm5lbCBvbiB0aGUgRFMgSU8uDQorICogDQorICogQHBhcmFtIGNoYW5uZWwgVGhlIGNoYW5uZWwgbnVtYmVyIHRvIHJlYWQuDQorICogQHJldHVybiBUaGUgY3VycmVudCBhY2NlbGVyYXRpb24gb24gdGhlIGNoYW5uZWwgaW4gR3MuDQorICovDQorZG91YmxlIERyaXZlclN0YXRpb25FbmhhbmNlZElPOjpHZXRBY2NlbGVyYXRpb24odEFjY2VsQ2hhbm5lbCBjaGFubmVsKQ0KK3sNCisJaWYgKGNoYW5uZWwgPCAxIHx8IGNoYW5uZWwgPiAyKQ0KKwl7DQorCQl3cGlfc2V0V1BJRXJyb3JXaXRoQ29udGV4dChQYXJhbWV0ZXJPdXRPZlJhbmdlLCAiY2hhbm5lbCBtdXN0IGJlIGJldHdlZW4gMSBhbmQgMiIpOw0KKwkJcmV0dXJuIDAuMDsNCisJfQ0KKwlpZiAoIW1faW5wdXRWYWxpZCkNCisJew0KKwkJd3BpX3NldFdQSUVycm9yKEVuaGFuY2VkSU9NaXNzaW5nKTsNCisJCXJldHVybiAwLjA7DQorCX0NCisNCisJc3RhdGljIFVJTlQ4IHJlcG9ydGVkX21hc2sgPSAwOw0KKwlpZiAoIShyZXBvcnRlZF9tYXNrICYgKDEgPj4gY2hhbm5lbCkpKQ0KKwl7DQorCQluVXNhZ2VSZXBvcnRpbmc6OnJlcG9ydChuVXNhZ2VSZXBvcnRpbmc6OmtSZXNvdXJjZVR5cGVfRHJpdmVyU3RhdGlvbkVJTywgY2hhbm5lbCwgblVzYWdlUmVwb3J0aW5nOjprRHJpdmVyU3RhdGlvbkVJT19BY2NlbGVyYXRpb24pOw0KKwkJcmVwb3J0ZWRfbWFzayB8PSAoMSA+PiBjaGFubmVsKTsNCisJfQ0KKw0KKwlTeW5jaHJvbml6ZWQgc3luYyhtX2lucHV0RGF0YVNlbWFwaG9yZSk7DQorCXJldHVybiAobV9pbnB1dERhdGEuZGF0YS5hY2NlbFtjaGFubmVsXSAtIGtBY2NlbE9mZnNldCkgLyBrQWNjZWxTY2FsZTsNCit9DQorDQorLyoqDQorICogUXVlcnkgYW4gYW5hbG9nIGlucHV0IGNoYW5uZWwgb24gdGhlIERTIElPLg0KKyAqIA0KKyAqIEBwYXJhbSBjaGFubmVsIFRoZSBjaGFubmVsIG51bWJlciB0byByZWFkLiBbMSw4XQ0KKyAqIEByZXR1cm4gVGhlIGFuYWxvZyBpbnB1dCB2b2x0YWdlIGZvciB0aGUgY2hhbm5lbC4NCisgKi8NCitkb3VibGUgRHJpdmVyU3RhdGlvbkVuaGFuY2VkSU86OkdldEFuYWxvZ0luKFVJTlQzMiBjaGFubmVsKQ0KK3sNCisJLy8gMy4zViBpcyB0aGUgYW5hbG9nIHJlZmVyZW5jZSB2b2x0YWdlDQorCXJldHVybiBHZXRBbmFsb2dJblJhdGlvKGNoYW5uZWwpICoga0FuYWxvZ0lucHV0UmVmZXJlbmNlOw0KK30NCisNCisvKioNCisgKiBRdWVyeSBhbiBhbmFsb2cgaW5wdXQgY2hhbm5lbCBvbiB0aGUgRFMgSU8gaW4gcmF0aW9tZXRyaWMgZm9ybS4NCisgKiANCisgKiBAcGFyYW0gY2hhbm5lbCBUaGUgY2hhbm5lbCBudW1iZXIgdG8gcmVhZC4gWzEsOF0NCisgKiBAcmV0dXJuIFRoZSBhbmFsb2cgaW5wdXQgcGVyY2VudGFnZSBmb3IgdGhlIGNoYW5uZWwuDQorICovDQorZG91YmxlIERyaXZlclN0YXRpb25FbmhhbmNlZElPOjpHZXRBbmFsb2dJblJhdGlvKFVJTlQzMiBjaGFubmVsKQ0KK3sNCisJaWYgKGNoYW5uZWwgPCAxIHx8IGNoYW5uZWwgPiA4KQ0KKwl7DQorCQl3cGlfc2V0V1BJRXJyb3JXaXRoQ29udGV4dChQYXJhbWV0ZXJPdXRPZlJhbmdlLCAiY2hhbm5lbCBtdXN0IGJlIGJldHdlZW4gMSBhbmQgOCIpOw0KKwkJcmV0dXJuIDAuMDsNCisJfQ0KKwlpZiAoIW1faW5wdXRWYWxpZCkNCisJew0KKwkJd3BpX3NldFdQSUVycm9yKEVuaGFuY2VkSU9NaXNzaW5nKTsNCisJCXJldHVybiAwLjA7DQorCX0NCisNCisJc3RhdGljIFVJTlQxNiByZXBvcnRlZF9tYXNrID0gMDsNCisJaWYgKCEocmVwb3J0ZWRfbWFzayAmICgxID4+IGNoYW5uZWwpKSkNCisJew0KKwkJblVzYWdlUmVwb3J0aW5nOjpyZXBvcnQoblVzYWdlUmVwb3J0aW5nOjprUmVzb3VyY2VUeXBlX0RyaXZlclN0YXRpb25FSU8sIGNoYW5uZWwsIG5Vc2FnZVJlcG9ydGluZzo6a0RyaXZlclN0YXRpb25FSU9fQW5hbG9nSW4pOw0KKwkJcmVwb3J0ZWRfbWFzayB8PSAoMSA+PiBjaGFubmVsKTsNCisJfQ0KKw0KKwlTeW5jaHJvbml6ZWQgc3luYyhtX2lucHV0RGF0YVNlbWFwaG9yZSk7DQorCXJldHVybiBtX2lucHV0RGF0YS5kYXRhLmFuYWxvZ1tjaGFubmVsLTFdIC8ga0FuYWxvZ0lucHV0UmVzb2x1dGlvbjsNCit9DQorDQorLyoqDQorICogUXVlcnkgdGhlIHZvbHRhZ2UgY3VycmVudGx5IGJlaW5nIG91dHB1dC4NCisgKiANCisgKiBBTzEgaXMgcGluIDExIG9uIHRoZSB0b3AgY29ubmVjdG9yIChQMikuDQorICogQU8yIGlzIHBpbiAxMiBvbiB0aGUgdG9wIGNvbm5lY3RvciAoUDIpLg0KKyAqIA0KKyAqIEBwYXJhbSBjaGFubmVsIFRoZSBhbmFsb2cgb3V0cHV0IGNoYW5uZWwgb24gdGhlIERTIElPLiBbMSwyXQ0KKyAqIEByZXR1cm4gVGhlIHZvbHRhZ2UgYmVpbmcgb3V0cHV0IG9uIHRoZSBjaGFubmVsLg0KKyAqLw0KK2RvdWJsZSBEcml2ZXJTdGF0aW9uRW5oYW5jZWRJTzo6R2V0QW5hbG9nT3V0KFVJTlQzMiBjaGFubmVsKQ0KK3sNCisJaWYgKGNoYW5uZWwgPCAxIHx8IGNoYW5uZWwgPiAyKQ0KKwl7DQorCQl3cGlfc2V0V1BJRXJyb3JXaXRoQ29udGV4dChQYXJhbWV0ZXJPdXRPZlJhbmdlLCAiY2hhbm5lbCBtdXN0IGJlIGJldHdlZW4gMSBhbmQgMiIpOw0KKwkJcmV0dXJuIDAuMDsNCisJfQ0KKwlpZiAoIW1fb3V0cHV0VmFsaWQpDQorCXsNCisJCXdwaV9zZXRXUElFcnJvcihFbmhhbmNlZElPTWlzc2luZyk7DQorCQlyZXR1cm4gMC4wOw0KKwl9DQorDQorCVN5bmNocm9uaXplZCBzeW5jKG1fb3V0cHV0RGF0YVNlbWFwaG9yZSk7DQorCXJldHVybiBtX291dHB1dERhdGEuZGF0YS5kYWNbY2hhbm5lbC0xXSAqIGtBbmFsb2dPdXRwdXRSZWZlcmVuY2UgLyBrQW5hbG9nT3V0cHV0UmVzb2x1dGlvbjsNCit9DQorDQorLyoqDQorICogU2V0IHRoZSBhbmFsb2cgb3V0cHV0IHZvbHRhZ2UuDQorICogDQorICogQU8xIGlzIHBpbiAxMSBvbiB0aGUgdG9wIGNvbm5lY3RvciAoUDIpLg0KKyAqIEFPMiBpcyBwaW4gMTIgb24gdGhlIHRvcCBjb25uZWN0b3IgKFAyKS4NCisgKiBBTzEgaXMgdGhlIHJlZmVyZW5jZSB2b2x0YWdlIGZvciB0aGUgMiBhbmFsb2cgY29tcGFyYXRvcnMgb24gRElPMTUgYW5kIERJTzE2Lg0KKyAqIA0KKyAqIFRoZSBvdXRwdXQgcmFuZ2UgaXMgMFYgdG8gNFYsIGhvd2V2ZXIgZHVlIHRvIHRoZSBzdXBwbHkgdm9sdGFnZSBkb24ndCBleHBlY3QgbW9yZSB0aGFuIGFib3V0IDNWLg0KKyAqIEN1cnJlbnQgc3VwcGx5IGNhcGFiaWxpdHkgaXMgb25seSAxMDB1QS4NCisgKiANCisgKiBAcGFyYW0gY2hhbm5lbCBUaGUgYW5hbG9nIG91dHB1dCBjaGFubmVsIG9uIHRoZSBEUyBJTy4gWzEsMl0NCisgKiBAcGFyYW0gdmFsdWUgVGhlIHZvbHRhZ2UgdG8gb3V0cHV0IG9uIHRoZSBjaGFubmVsLg0KKyAqLw0KK3ZvaWQgRHJpdmVyU3RhdGlvbkVuaGFuY2VkSU86OlNldEFuYWxvZ091dChVSU5UMzIgY2hhbm5lbCwgZG91YmxlIHZhbHVlKQ0KK3sNCisJaWYgKGNoYW5uZWwgPCAxIHx8IGNoYW5uZWwgPiAyKQ0KKwl7DQorCQl3cGlfc2V0V1BJRXJyb3JXaXRoQ29udGV4dChQYXJhbWV0ZXJPdXRPZlJhbmdlLCAiY2hhbm5lbCBtdXN0IGJlIGJldHdlZW4gMSBhbmQgMiIpOw0KKwkJcmV0dXJuOw0KKwl9DQorCWlmICghbV9vdXRwdXRWYWxpZCkNCisJew0KKwkJd3BpX3NldFdQSUVycm9yKEVuaGFuY2VkSU9NaXNzaW5nKTsNCisJCXJldHVybjsNCisJfQ0KKwlpZiAodmFsdWUgPCAwLjApIHZhbHVlID0gMC4wOw0KKwlpZiAodmFsdWUgPiBrQW5hbG9nT3V0cHV0UmVmZXJlbmNlKSB2YWx1ZSA9IGtBbmFsb2dPdXRwdXRSZWZlcmVuY2U7DQorDQorCXN0YXRpYyBVSU5UOCByZXBvcnRlZF9tYXNrID0gMDsNCisJaWYgKCEocmVwb3J0ZWRfbWFzayAmICgxID4+IGNoYW5uZWwpKSkNCisJew0KKwkJblVzYWdlUmVwb3J0aW5nOjpyZXBvcnQoblVzYWdlUmVwb3J0aW5nOjprUmVzb3VyY2VUeXBlX0RyaXZlclN0YXRpb25FSU8sIGNoYW5uZWwsIG5Vc2FnZVJlcG9ydGluZzo6a0RyaXZlclN0YXRpb25FSU9fQW5hbG9nT3V0KTsNCisJCXJlcG9ydGVkX21hc2sgfD0gKDEgPj4gY2hhbm5lbCk7DQorCX0NCisNCisJU3luY2hyb25pemVkIHN5bmMobV9vdXRwdXREYXRhU2VtYXBob3JlKTsNCisJbV9vdXRwdXREYXRhLmRhdGEuZGFjW2NoYW5uZWwtMV0gPSAoVUlOVDgpKHZhbHVlIC8ga0FuYWxvZ091dHB1dFJlZmVyZW5jZSAqIGtBbmFsb2dPdXRwdXRSZXNvbHV0aW9uKTsNCit9DQorDQorLyoqDQorICogR2V0IHRoZSBzdGF0ZSBvZiBhIGJ1dHRvbiBvbiB0aGUgSU8gYm9hcmQuDQorICogDQorICogQnV0dG9uMSBpcyB0aGUgcGh5c2ljYWwgYnV0dG9uICJTMSIuDQorICogQnV0dG9uMiBpcyBwaW4gNCBvbiB0aGUgdG9wIGNvbm5lY3RvciAoUDIpLg0KKyAqIEJ1dHRvbjMgaXMgcGluIDYgb24gdGhlIHRvcCBjb25uZWN0b3IgKFAyKS4NCisgKiBCdXR0b240IGlzIHBpbiA4IG9uIHRoZSB0b3AgY29ubmVjdG9yIChQMikuDQorICogQnV0dG9uNSBpcyBwaW4gMTAgb24gdGhlIHRvcCBjb25uZWN0b3IgKFAyKS4NCisgKiBCdXR0b242IGlzIHBpbiA3IG9uIHRoZSB0b3AgY29ubmVjdG9yIChQMikuDQorICogDQorICogQnV0dG9uMiB0aHJvdWdoIEJ1dHRvbjYgYXJlIENhcGFjaXRpdmUgU2Vuc2UgYnV0dG9ucy4NCisgKiANCisgKiBAcGFyYW0gY2hhbm5lbCBUaGUgYnV0dG9uIGNoYW5uZWwgdG8gcmVhZC4gWzEsNl0NCisgKiBAcmV0dXJuIFRoZSBzdGF0ZSBvZiB0aGUgc2VsZWN0ZWQgYnV0dG9uLg0KKyAqLw0KK2Jvb2wgRHJpdmVyU3RhdGlvbkVuaGFuY2VkSU86OkdldEJ1dHRvbihVSU5UMzIgY2hhbm5lbCkNCit7DQorCWlmIChjaGFubmVsIDwgMSB8fCBjaGFubmVsID4gNikNCisJew0KKwkJd3BpX3NldFdQSUVycm9yV2l0aENvbnRleHQoUGFyYW1ldGVyT3V0T2ZSYW5nZSwgImNoYW5uZWwgbXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDYiKTsNCisJCXJldHVybiBmYWxzZTsNCisJfQ0KKw0KKwlzdGF0aWMgVUlOVDggcmVwb3J0ZWRfbWFzayA9IDA7DQorCWlmICghKHJlcG9ydGVkX21hc2sgJiAoMSA+PiBjaGFubmVsKSkpDQorCXsNCisJCW5Vc2FnZVJlcG9ydGluZzo6cmVwb3J0KG5Vc2FnZVJlcG9ydGluZzo6a1Jlc291cmNlVHlwZV9Ecml2ZXJTdGF0aW9uRUlPLCBjaGFubmVsLCBuVXNhZ2VSZXBvcnRpbmc6OmtEcml2ZXJTdGF0aW9uRUlPX0J1dHRvbik7DQorCQlyZXBvcnRlZF9tYXNrIHw9ICgxID4+IGNoYW5uZWwpOw0KKwl9DQorDQorCXJldHVybiAoKEdldEJ1dHRvbnMoKSA+PiAoY2hhbm5lbC0xKSkgJiAxKSAhPSAwOw0KK30NCisNCisvKioNCisgKiBHZXQgdGhlIHN0YXRlIG9mIGFsbCB0aGUgYnV0dG9uIGNoYW5uZWxzLg0KKyAqIA0KKyAqIEByZXR1cm4gVGhlIHN0YXRlIG9mIHRoZSA2IGJ1dHRvbiBjaGFubmVscyBpbiB0aGUgNiBsc2Igb2YgdGhlIHJldHVybmVkIGJ5dGUuDQorICovDQorVUlOVDggRHJpdmVyU3RhdGlvbkVuaGFuY2VkSU86OkdldEJ1dHRvbnMoKQ0KK3sNCisJaWYgKCFtX2lucHV0VmFsaWQpDQorCXsNCisJCXdwaV9zZXRXUElFcnJvcihFbmhhbmNlZElPTWlzc2luZyk7DQorCQlyZXR1cm4gMDsNCisJfQ0KKwluVXNhZ2VSZXBvcnRpbmc6OnJlcG9ydChuVXNhZ2VSZXBvcnRpbmc6OmtSZXNvdXJjZVR5cGVfRHJpdmVyU3RhdGlvbkVJTywgMCwgblVzYWdlUmVwb3J0aW5nOjprRHJpdmVyU3RhdGlvbkVJT19CdXR0b24pOw0KKwlTeW5jaHJvbml6ZWQgc3luYyhtX2lucHV0RGF0YVNlbWFwaG9yZSk7DQorCXJldHVybiBtX2lucHV0RGF0YS5kYXRhLmJ1dHRvbnM7DQorfQ0KKw0KKy8qKg0KKyAqIFNldCB0aGUgc3RhdGUgb2YgYW4gTEVEIG9uIHRoZSBJTyBib2FyZC4NCisgKiANCisgKiBAcGFyYW0gY2hhbm5lbCBUaGUgTEVEIGNoYW5uZWwgdG8gc2V0LiBbMSw4XQ0KKyAqIEBwYXJhbSB2YWx1ZSBUcnVlIHRvIHR1cm4gdGhlIExFRCBvbi4NCisgKi8NCit2b2lkIERyaXZlclN0YXRpb25FbmhhbmNlZElPOjpTZXRMRUQoVUlOVDMyIGNoYW5uZWwsIGJvb2wgdmFsdWUpDQorew0KKwlpZiAoY2hhbm5lbCA8IDEgfHwgY2hhbm5lbCA+IDgpDQorCXsNCisJCXdwaV9zZXRXUElFcnJvcldpdGhDb250ZXh0KFBhcmFtZXRlck91dE9mUmFuZ2UsICJjaGFubmVsIG11c3QgYmUgYmV0d2VlbiAxIGFuZCA4Iik7DQorCQlyZXR1cm47DQorCX0NCisJaWYgKCFtX291dHB1dFZhbGlkKQ0KKwl7DQorCQl3cGlfc2V0V1BJRXJyb3IoRW5oYW5jZWRJT01pc3NpbmcpOw0KKwkJcmV0dXJuOw0KKwl9DQorDQorCXN0YXRpYyBVSU5UMTYgcmVwb3J0ZWRfbWFzayA9IDA7DQorCWlmICghKHJlcG9ydGVkX21hc2sgJiAoMSA+PiBjaGFubmVsKSkpDQorCXsNCisJCW5Vc2FnZVJlcG9ydGluZzo6cmVwb3J0KG5Vc2FnZVJlcG9ydGluZzo6a1Jlc291cmNlVHlwZV9Ecml2ZXJTdGF0aW9uRUlPLCBjaGFubmVsLCBuVXNhZ2VSZXBvcnRpbmc6OmtEcml2ZXJTdGF0aW9uRUlPX0xFRCk7DQorCQlyZXBvcnRlZF9tYXNrIHw9ICgxID4+IGNoYW5uZWwpOw0KKwl9DQorDQorCVVJTlQ4IGxlZHM7DQorCVN5bmNocm9uaXplZCBzeW5jKG1fb3V0cHV0RGF0YVNlbWFwaG9yZSk7DQorCWxlZHMgPSBtX291dHB1dERhdGEuZGF0YS5sZWRzOw0KKw0KKwlsZWRzICY9IH4oMSA8PCAoY2hhbm5lbC0xKSk7DQorCWlmICh2YWx1ZSkgbGVkcyB8PSAxIDw8IChjaGFubmVsLTEpOw0KKw0KKwltX291dHB1dERhdGEuZGF0YS5sZWRzID0gbGVkczsNCit9DQorDQorLyoqDQorICogU2V0IHRoZSBzdGF0ZSBvZiBhbGwgOCBMRURzIG9uIHRoZSBJTyBib2FyZC4NCisgKiANCisgKiBAcGFyYW0gdmFsdWUgVGhlIHN0YXRlIG9mIGVhY2ggTEVELiAgTEVEMSBpcyBsc2IgYW5kIExFRDggaXMgbXNiLg0KKyAqLw0KK3ZvaWQgRHJpdmVyU3RhdGlvbkVuaGFuY2VkSU86OlNldExFRHMoVUlOVDggdmFsdWUpDQorew0KKwlpZiAoIW1fb3V0cHV0VmFsaWQpDQorCXsNCisJCXdwaV9zZXRXUElFcnJvcihFbmhhbmNlZElPTWlzc2luZyk7DQorCQlyZXR1cm47DQorCX0NCisJblVzYWdlUmVwb3J0aW5nOjpyZXBvcnQoblVzYWdlUmVwb3J0aW5nOjprUmVzb3VyY2VUeXBlX0RyaXZlclN0YXRpb25FSU8sIDAsIG5Vc2FnZVJlcG9ydGluZzo6a0RyaXZlclN0YXRpb25FSU9fTEVEKTsNCisJU3luY2hyb25pemVkIHN5bmMobV9vdXRwdXREYXRhU2VtYXBob3JlKTsNCisJbV9vdXRwdXREYXRhLmRhdGEubGVkcyA9IHZhbHVlOw0KK30NCisNCisvKioNCisgKiBHZXQgdGhlIGN1cnJlbnQgc3RhdGUgb2YgYSBESU8gY2hhbm5lbCByZWdhcmRsZXNzIG9mIG1vZGUuDQorICogDQorICogQHBhcmFtIGNoYW5uZWwgVGhlIERJTyBjaGFubmVsIHRvIHJlYWQuIFsxLDE2XQ0KKyAqIEByZXR1cm4gVGhlIHN0YXRlIG9mIHRoZSBzZWxlY3RlZCBkaWdpdGFsIGxpbmUuDQorICovDQorYm9vbCBEcml2ZXJTdGF0aW9uRW5oYW5jZWRJTzo6R2V0RGlnaXRhbChVSU5UMzIgY2hhbm5lbCkNCit7DQorCWlmIChjaGFubmVsIDwgMSB8fCBjaGFubmVsID4gMTYpDQorCXsNCisJCXdwaV9zZXRXUElFcnJvcldpdGhDb250ZXh0KFBhcmFtZXRlck91dE9mUmFuZ2UsICJjaGFubmVsIG11c3QgYmUgYmV0d2VlbiAxIGFuZCAxNiIpOw0KKwkJcmV0dXJuIGZhbHNlOw0KKwl9DQorDQorCXN0YXRpYyBVSU5UMzIgcmVwb3J0ZWRfbWFzayA9IDA7DQorCWlmICghKHJlcG9ydGVkX21hc2sgJiAoMSA+PiBjaGFubmVsKSkpDQorCXsNCisJCW5Vc2FnZVJlcG9ydGluZzo6cmVwb3J0KG5Vc2FnZVJlcG9ydGluZzo6a1Jlc291cmNlVHlwZV9Ecml2ZXJTdGF0aW9uRUlPLCBjaGFubmVsLCBuVXNhZ2VSZXBvcnRpbmc6OmtEcml2ZXJTdGF0aW9uRUlPX0RpZ2l0YWxJbik7DQorCQlyZXBvcnRlZF9tYXNrIHw9ICgxID4+IGNoYW5uZWwpOw0KKwl9DQorDQorCXJldHVybiAoKEdldERpZ2l0YWxzKCkgPj4gKGNoYW5uZWwtMSkpICYgMSkgIT0gMDsNCit9DQorDQorLyoqDQorICogR2V0IHRoZSBzdGF0ZSBvZiBhbGwgMTYgRElPIGxpbmVzIHJlZ2FyZGxlc3Mgb2YgbW9kZS4NCisgKiANCisgKiBAcmV0dXJuIFRoZSBzdGF0ZSBvZiBhbGwgRElPIGxpbmVzLiBESU8xIGlzIGxzYiBhbmQgRElPMTYgaXMgbXNiLg0KKyAqLw0KK1VJTlQxNiBEcml2ZXJTdGF0aW9uRW5oYW5jZWRJTzo6R2V0RGlnaXRhbHMoKQ0KK3sNCisJaWYgKCFtX2lucHV0VmFsaWQpDQorCXsNCisJCXdwaV9zZXRXUElFcnJvcihFbmhhbmNlZElPTWlzc2luZyk7DQorCQlyZXR1cm4gMDsNCisJfQ0KKwluVXNhZ2VSZXBvcnRpbmc6OnJlcG9ydChuVXNhZ2VSZXBvcnRpbmc6OmtSZXNvdXJjZVR5cGVfRHJpdmVyU3RhdGlvbkVJTywgMCwgblVzYWdlUmVwb3J0aW5nOjprRHJpdmVyU3RhdGlvbkVJT19EaWdpdGFsSW4pOw0KKwlTeW5jaHJvbml6ZWQgc3luYyhtX2lucHV0RGF0YVNlbWFwaG9yZSk7DQorCXJldHVybiBtX2lucHV0RGF0YS5kYXRhLmRpZ2l0YWw7DQorfQ0KKw0KKy8qKg0KKyAqIFNldCB0aGUgc3RhdGUgb2YgYSBESU8gbGluZSB0aGF0IGlzIGNvbmZpZ3VyZWQgZm9yIGRpZ2l0YWwgb3V0cHV0Lg0KKyAqIA0KKyAqIEBwYXJhbSBjaGFubmVsIFRoZSBESU8gY2hhbm5lbCB0byBzZXQuIFsxLDE2XQ0KKyAqIEBwYXJhbSB2YWx1ZSBUaGUgc3RhdGUgdG8gc2V0IHRoZSBzZWxlY3RlZCBjaGFubmVsIHRvLg0KKyAqLw0KK3ZvaWQgRHJpdmVyU3RhdGlvbkVuaGFuY2VkSU86OlNldERpZ2l0YWxPdXRwdXQoVUlOVDMyIGNoYW5uZWwsIGJvb2wgdmFsdWUpDQorew0KKwlpZiAoY2hhbm5lbCA8IDEgfHwgY2hhbm5lbCA+IDE2KQ0KKwl7DQorCQl3cGlfc2V0V1BJRXJyb3JXaXRoQ29udGV4dChQYXJhbWV0ZXJPdXRPZlJhbmdlLCAiY2hhbm5lbCBtdXN0IGJlIGJldHdlZW4gMSBhbmQgMTYiKTsNCisJCXJldHVybjsNCisJfQ0KKwlpZiAoIW1fb3V0cHV0VmFsaWQpDQorCXsNCisJCXdwaV9zZXRXUElFcnJvcihFbmhhbmNlZElPTWlzc2luZyk7DQorCQlyZXR1cm47DQorCX0NCisNCisJc3RhdGljIFVJTlQzMiByZXBvcnRlZF9tYXNrID0gMDsNCisJaWYgKCEocmVwb3J0ZWRfbWFzayAmICgxID4+IGNoYW5uZWwpKSkNCisJew0KKwkJblVzYWdlUmVwb3J0aW5nOjpyZXBvcnQoblVzYWdlUmVwb3J0aW5nOjprUmVzb3VyY2VUeXBlX0RyaXZlclN0YXRpb25FSU8sIGNoYW5uZWwsIG5Vc2FnZVJlcG9ydGluZzo6a0RyaXZlclN0YXRpb25FSU9fRGlnaXRhbE91dCk7DQorCQlyZXBvcnRlZF9tYXNrIHw9ICgxID4+IGNoYW5uZWwpOw0KKwl9DQorDQorCVVJTlQxNiBkaWdpdGFsOw0KKwlTeW5jaHJvbml6ZWQgc3luYyhtX291dHB1dERhdGFTZW1hcGhvcmUpOw0KKw0KKwlpZiAobV9vdXRwdXREYXRhLmRhdGEuZGlnaXRhbF9vZSAmICgxIDw8IChjaGFubmVsLTEpKSkNCisJew0KKwkJZGlnaXRhbCA9IG1fb3V0cHV0RGF0YS5kYXRhLmRpZ2l0YWw7DQorCQ0KKwkJZGlnaXRhbCAmPSB+KDEgPDwgKGNoYW5uZWwtMSkpOw0KKwkJaWYgKHZhbHVlKSBkaWdpdGFsIHw9IDEgPDwgKGNoYW5uZWwtMSk7DQorCQ0KKwkJbV9vdXRwdXREYXRhLmRhdGEuZGlnaXRhbCA9IGRpZ2l0YWw7DQorCX0NCisJZWxzZQ0KKwl7DQorCQl3cGlfc2V0V1BJRXJyb3IoTGluZU5vdE91dHB1dCk7DQorCX0NCit9DQorDQorLyoqDQorICogR2V0IHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24gZm9yIGEgRElPIGxpbmUuDQorICogDQorICogVGhpcyBoYXMgdGhlIHNpZGUgZWZmZWN0IG9mIGZvcmNpbmcgdGhlIERyaXZlciBTdGF0aW9uIHRvIHN3aXRjaCB0byBFbmhhbmNlZCBtb2RlIGlmIGl0J3Mgbm90IHdoZW4gY2FsbGVkLg0KKyAqIElmIEVuaGFuY2VkIG1vZGUgaXMgbm90IGVuYWJsZWQgd2hlbiB0aGlzIGlzIGNhbGxlZCwgaXQgd2lsbCByZXR1cm4ga1Vua25vd24uDQorICogDQorICogQHBhcmFtIGNoYW5uZWwgVGhlIERJTyBjaGFubmVsIGNvbmZpZyB0byBnZXQuIFsxLDE2XQ0KKyAqIEByZXR1cm4gVGhlIGNvbmZpZ3VyZWQgbW9kZSBmb3IgdGhlIERJTyBsaW5lLg0KKyAqLw0KK0RyaXZlclN0YXRpb25FbmhhbmNlZElPOjp0RGlnaXRhbENvbmZpZyBEcml2ZXJTdGF0aW9uRW5oYW5jZWRJTzo6R2V0RGlnaXRhbENvbmZpZyhVSU5UMzIgY2hhbm5lbCkNCit7DQorCWlmIChjaGFubmVsIDwgMSB8fCBjaGFubmVsID4gMTYpDQorCXsNCisJCXdwaV9zZXRXUElFcnJvcldpdGhDb250ZXh0KFBhcmFtZXRlck91dE9mUmFuZ2UsICJjaGFubmVsIG11c3QgYmUgYmV0d2VlbiAxIGFuZCAxNiIpOw0KKwkJcmV0dXJuIGtVbmtub3duOw0KKwl9DQorCWlmICghbV9vdXRwdXRWYWxpZCkNCisJew0KKwkJbV9yZXF1ZXN0RW5oYW5jZWRFbmFibGUgPSB0cnVlOw0KKwkJd3BpX3NldFdQSUVycm9yKEVuaGFuY2VkSU9NaXNzaW5nKTsNCisJCXJldHVybiBrVW5rbm93bjsNCisJfQ0KKwlTeW5jaHJvbml6ZWQgc3luYyhtX291dHB1dERhdGFTZW1hcGhvcmUpOw0KKwlpZiAoKGNoYW5uZWwgPj0gMSkgJiYgKGNoYW5uZWwgPD0gNCkpDQorCXsNCisJCWlmIChtX291dHB1dERhdGEuZGF0YS5wd21fZW5hYmxlICYgKDEgPDwgKGNoYW5uZWwgLSAxKSkpDQorCQl7DQorCQkJcmV0dXJuIGtQV007DQorCQl9DQorCX0NCisJaWYgKChjaGFubmVsID49IDE1KSAmJiAoY2hhbm5lbCA8PSAxNikpDQorCXsNCisJCWlmIChtX291dHB1dERhdGEuZGF0YS5jb21wYXJhdG9yX2VuYWJsZSAmICgxIDw8IChjaGFubmVsIC0gMTUpKSkNCisJCXsNCisJCQlyZXR1cm4ga0FuYWxvZ0NvbXBhcmF0b3I7DQorCQl9DQorCX0NCisJaWYgKG1fb3V0cHV0RGF0YS5kYXRhLmRpZ2l0YWxfb2UgJiAoMSA8PCAoY2hhbm5lbCAtIDEpKSkNCisJew0KKwkJcmV0dXJuIGtPdXRwdXQ7DQorCX0NCisJaWYgKCEobV9vdXRwdXREYXRhLmRhdGEuZGlnaXRhbF9wZSAmICgxIDw8IChjaGFubmVsIC0gMSkpKSkNCisJew0KKwkJcmV0dXJuIGtJbnB1dEZsb2F0aW5nOw0KKwl9DQorCWlmIChtX291dHB1dERhdGEuZGF0YS5kaWdpdGFsICYgKDEgPDwgKGNoYW5uZWwgLSAxKSkpDQorCXsNCisJCXJldHVybiBrSW5wdXRQdWxsVXA7DQorCX0NCisJZWxzZQ0KKwl7DQorCQlyZXR1cm4ga0lucHV0UHVsbERvd247DQorCX0NCit9DQorDQorLyoqDQorICogT3ZlcnJpZGUgdGhlIERTJ3MgY29uZmlndXJhdGlvbiBvZiBhIERJTyBsaW5lLg0KKyAqIA0KKyAqIElmIGNvbmZpZ3VyZWQgdG8ga0lucHV0RmxvYXRpbmcsIHRoZSBzZWxlY3RlZCBESU8gbGluZSB3aWxsIGJlIHRyaS1zdGF0ZWQgd2l0aCBubyBpbnRlcm5hbCBwdWxsIHJlc2lzdG9yLg0KKyAqIA0KKyAqIElmIGNvbmZpZ3VyZWQgdG8ga0lucHV0UHVsbFVwLCB0aGUgc2VsZWN0ZWQgRElPIGxpbmUgd2lsbCBiZSB0cmktc3RhdGVkIHdpdGggYSA1ay1PaG0gaW50ZXJuYWwgcHVsbC11cCByZXNpc3RvciBlbmFibGVkLg0KKyAqIA0KKyAqIElmIGNvbmZpZ3VyZWQgdG8ga0lucHV0UHVsbERvd24sIHRoZSBzZWxlY3RlZCBESU8gbGluZSB3aWxsIGJlIHRyaS1zdGF0ZWQgd2l0aCBhIDVrLU9obSBpbnRlcm5hbCBwdWxsLWRvd24gcmVzaXN0b3IgZW5hYmxlZC4NCisgKiANCisgKiBJZiBjb25maWd1cmVkIHRvIGtPdXRwdXQsIHRoZSBzZWxlY3RlZCBESU8gbGluZSB3aWxsIGFjdGl2ZWx5IGRyaXZlIHRvIDBWIG9yIFZkZGlvIChzcGVjaWZpZWQgYnkgSjEgYW5kIEo0KS4NCisgKiBESU8xIHRocm91Z2ggRElPMTIsIERJTzE1LCBhbmQgRElPMTYgY2FuIHNvdXJjZSA0bUEgYW5kIGNhbiBzaW5rIDhtQS4NCisgKiBESU8xMiBhbmQgRElPMTMgY2FuIHNvdXJjZSA0bUEgYW5kIGNhbiBzaW5rIDI1bUEuDQorICogDQorICogSW4gYWRkaXRpb24gdG8gdGhlIGNvbW1vbiBjb25maWd1cmF0aW9ucywgRElPMSB0aHJvdWdoIERJTzQgY2FuIGJlIGNvbmZpZ3VyZWQgdG8ga1BXTSB0byBlbmFibGUgUFdNIG91dHB1dC4NCisgKiANCisgKiBJbiBhZGRpdGlvbiB0byB0aGUgY29tbW9uIGNvbmZpZ3VyYXRpb25zLCBESU8xNSBhbmQgRElPMTYgY2FuIGJlIGNvbmZpZ3VyZWQgdG8ga0FuYWxvZ0NvbXBhcmF0b3IgdG8gZW5hYmxlDQorICogYW5hbG9nIGNvbXBhcmF0b3JzIG9uIHRob3NlIDIgRElPIGxpbmVzLiAgV2hlbiBlbmFibGVkLCB0aGUgbGluZXMgYXJlIHRyaS1zdGF0ZWQgYW5kIHdpbGwgYWNjZXB0IGFuYWxvZyB2b2x0YWdlcw0KKyAqIGJldHdlZW4gMFYgYW5kIDMuM1YuICBJZiB0aGUgaW5wdXQgdm9sdGFnZSBpcyBncmVhdGVyIHRoYW4gdGhlIHZvbHRhZ2Ugb3V0cHV0IGJ5IEFPMSwgdGhlIERJTyB3aWxsIHJlYWQgYXMgdHJ1ZSwNCisgKiBpZiBsZXNzIHRoZW4gZmFsc2UuDQorICogDQorICogQHBhcmFtIGNoYW5uZWwgVGhlIERJTyBsaW5lIHRvIGNvbmZpZ3VyZS4gWzEsMTZdDQorICogQHBhcmFtIGNvbmZpZyBUaGUgbW9kZSB0byBwdXQgdGhlIERJTyBsaW5lIGluLg0KKyAqLw0KK3ZvaWQgRHJpdmVyU3RhdGlvbkVuaGFuY2VkSU86OlNldERpZ2l0YWxDb25maWcoVUlOVDMyIGNoYW5uZWwsIHREaWdpdGFsQ29uZmlnIGNvbmZpZykNCit7DQorCWlmIChjaGFubmVsIDwgMSB8fCBjaGFubmVsID4gMTYpDQorCXsNCisJCXdwaV9zZXRXUElFcnJvcldpdGhDb250ZXh0KFBhcmFtZXRlck91dE9mUmFuZ2UsICJjaGFubmVsIG11c3QgYmUgYmV0d2VlbiAxIGFuZCAxNiIpOw0KKwkJcmV0dXJuOw0KKwl9DQorCWlmIChjb25maWcgPT0ga1BXTSAmJiAoY2hhbm5lbCA8IDEgfHwgY2hhbm5lbCA+IDQpKQ0KKwl7DQorCQl3cGlfc2V0V1BJRXJyb3JXaXRoQ29udGV4dChQYXJhbWV0ZXJPdXRPZlJhbmdlLCAiY2hhbm5lbCBpbiBQV00gbW9kZSBtdXN0IGJlIGJldHdlZW4gMSBhbmQgNCIpOw0KKwkJcmV0dXJuOw0KKwl9DQorCWlmIChjb25maWcgPT0ga0FuYWxvZ0NvbXBhcmF0b3IgJiYgKGNoYW5uZWwgPCAxNSB8fCBjaGFubmVsID4gMTYpKQ0KKwl7DQorCQl3cGlfc2V0V1BJRXJyb3JXaXRoQ29udGV4dChQYXJhbWV0ZXJPdXRPZlJhbmdlLCAiY2hhbm5lbCBpbiBBbmFsb2cgQ29tcGFyYXRvciBtb2RlIG11c3QgYmUgYmV0d2VlbiAxNSBhbmQgMTYiKTsNCisJCXJldHVybjsNCisJfQ0KKw0KKwlTeW5jaHJvbml6ZWQgc3luYyhtX291dHB1dERhdGFTZW1hcGhvcmUpOw0KKwltX2NvbmZpZ0NoYW5nZWQgPSB0cnVlOw0KKw0KKwlpZiAoKGNoYW5uZWwgPj0gMSkgJiYgKGNoYW5uZWwgPD0gNCkpDQorCXsNCisJCWlmIChjb25maWcgPT0ga1BXTSkNCisJCXsNCisJCQltX291dHB1dERhdGEuZGF0YS5wd21fZW5hYmxlIHw9IDEgPDwgKGNoYW5uZWwgLSAxKTsNCisJCQltX291dHB1dERhdGEuZGF0YS5kaWdpdGFsICY9IH4oMSA8PCAoY2hhbm5lbCAtIDEpKTsNCisJCQltX291dHB1dERhdGEuZGF0YS5kaWdpdGFsX29lIHw9IDEgPDwgKGNoYW5uZWwgLSAxKTsNCisJCQltX291dHB1dERhdGEuZGF0YS5kaWdpdGFsX3BlICY9IH4oMSA8PCAoY2hhbm5lbCAtIDEpKTsNCisJCQlyZXR1cm47DQorCQl9DQorCQllbHNlDQorCQl7DQorCQkJbV9vdXRwdXREYXRhLmRhdGEucHdtX2VuYWJsZSAmPSB+KDEgPDwgKGNoYW5uZWwgLSAxKSk7DQorCQl9DQorCX0NCisJZWxzZSBpZiAoKGNoYW5uZWwgPj0gMTUpICYmIChjaGFubmVsIDw9IDE2KSkNCisJew0KKwkJaWYgKGNvbmZpZyA9PSBrQW5hbG9nQ29tcGFyYXRvcikNCisJCXsNCisJCQltX291dHB1dERhdGEuZGF0YS5jb21wYXJhdG9yX2VuYWJsZSB8PSAxIDw8IChjaGFubmVsIC0gMTUpOw0KKwkJCW1fb3V0cHV0RGF0YS5kYXRhLmRpZ2l0YWwgJj0gfigxIDw8IChjaGFubmVsIC0gMSkpOw0KKwkJCW1fb3V0cHV0RGF0YS5kYXRhLmRpZ2l0YWxfb2UgJj0gfigxIDw8IChjaGFubmVsIC0gMSkpOw0KKwkJCW1fb3V0cHV0RGF0YS5kYXRhLmRpZ2l0YWxfcGUgJj0gfigxIDw8IChjaGFubmVsIC0gMSkpOw0KKwkJCXJldHVybjsNCisJCX0NCisJCWVsc2UNCisJCXsNCisJCQltX291dHB1dERhdGEuZGF0YS5jb21wYXJhdG9yX2VuYWJsZSAmPSB+KDEgPDwgKGNoYW5uZWwgLSAxNSkpOw0KKwkJfQ0KKwl9DQorCWlmIChjb25maWcgPT0ga0lucHV0RmxvYXRpbmcpDQorCXsNCisJCW1fb3V0cHV0RGF0YS5kYXRhLmRpZ2l0YWwgJj0gfigxIDw8IChjaGFubmVsIC0gMSkpOw0KKwkJbV9vdXRwdXREYXRhLmRhdGEuZGlnaXRhbF9vZSAmPSB+KDEgPDwgKGNoYW5uZWwgLSAxKSk7DQorCQltX291dHB1dERhdGEuZGF0YS5kaWdpdGFsX3BlICY9IH4oMSA8PCAoY2hhbm5lbCAtIDEpKTsNCisJfQ0KKwllbHNlIGlmIChjb25maWcgPT0ga0lucHV0UHVsbFVwKQ0KKwl7DQorCQltX291dHB1dERhdGEuZGF0YS5kaWdpdGFsIHw9IDEgPDwgKGNoYW5uZWwgLSAxKTsNCisJCW1fb3V0cHV0RGF0YS5kYXRhLmRpZ2l0YWxfb2UgJj0gfigxIDw8IChjaGFubmVsIC0gMSkpOw0KKwkJbV9vdXRwdXREYXRhLmRhdGEuZGlnaXRhbF9wZSB8PSAxIDw8IChjaGFubmVsIC0gMSk7DQorCX0NCisJZWxzZSBpZiAoY29uZmlnID09IGtJbnB1dFB1bGxEb3duKQ0KKwl7DQorCQltX291dHB1dERhdGEuZGF0YS5kaWdpdGFsICY9IH4oMSA8PCAoY2hhbm5lbCAtIDEpKTsNCisJCW1fb3V0cHV0RGF0YS5kYXRhLmRpZ2l0YWxfb2UgJj0gfigxIDw8IChjaGFubmVsIC0gMSkpOw0KKwkJbV9vdXRwdXREYXRhLmRhdGEuZGlnaXRhbF9wZSB8PSAxIDw8IChjaGFubmVsIC0gMSk7DQorCX0NCisJZWxzZSBpZiAoY29uZmlnID09IGtPdXRwdXQpDQorCXsNCisJCW1fb3V0cHV0RGF0YS5kYXRhLmRpZ2l0YWxfb2UgfD0gMSA8PCAoY2hhbm5lbCAtIDEpOw0KKwkJbV9vdXRwdXREYXRhLmRhdGEuZGlnaXRhbF9wZSAmPSB+KDEgPDwgKGNoYW5uZWwgLSAxKSk7DQorCX0NCisJZWxzZQ0KKwl7DQorCQkvLyBTb21ldGhpbmcgd2VudCB3cm9uZy4NCisJfQ0KK30NCisNCisvKioNCisgKiBHZXQgdGhlIHBlcmlvZCBvZiBhIFBXTSBnZW5lcmF0b3IuDQorICogDQorICogVGhpcyBoYXMgdGhlIHNpZGUgZWZmZWN0IG9mIGZvcmNpbmcgdGhlIERyaXZlciBTdGF0aW9uIHRvIHN3aXRjaCB0byBFbmhhbmNlZCBtb2RlIGlmIGl0J3Mgbm90IHdoZW4gY2FsbGVkLg0KKyAqIElmIEVuaGFuY2VkIG1vZGUgaXMgbm90IGVuYWJsZWQgd2hlbiB0aGlzIGlzIGNhbGxlZCwgaXQgd2lsbCByZXR1cm4gMC4NCisgKiANCisgKiBAcGFyYW0gY2hhbm5lbHMgU2VsZWN0IHRoZSBnZW5lcmF0b3IgYnkgc3BlY2lmeWluZyB0aGUgdHdvIGNoYW5uZWxzIHRvIHdoaWNoIGl0IGlzIGNvbm5lY3RlZC4NCisgKiBAcmV0dXJuIFRoZSBwZXJpb2Qgb2YgdGhlIFBXTSBnZW5lcmF0b3IgaW4gc2Vjb25kcy4NCisgKi8NCitkb3VibGUgRHJpdmVyU3RhdGlvbkVuaGFuY2VkSU86OkdldFBXTVBlcmlvZCh0UFdNUGVyaW9kQ2hhbm5lbHMgY2hhbm5lbHMpDQorew0KKwlpZiAoY2hhbm5lbHMgPCBrUFdNQ2hhbm5lbHMxYW5kMiB8fCBjaGFubmVscyA+IGtQV01DaGFubmVsczNhbmQ0KQ0KKwl7DQorCQl3cGlfc2V0V1BJRXJyb3JXaXRoQ29udGV4dChQYXJhbWV0ZXJPdXRPZlJhbmdlLCAiY2hhbm5lbHMgbXVzdCBiZSBrUFdNQ2hhbm5lbHMxYW5kMiBvciBrUFdNQ2hhbm5lbHMzYW5kNCIpOw0KKwkJcmV0dXJuIDAuMDsNCisJfQ0KKwlpZiAoIW1fb3V0cHV0VmFsaWQpDQorCXsNCisJCW1fcmVxdWVzdEVuaGFuY2VkRW5hYmxlID0gdHJ1ZTsNCisJCXdwaV9zZXRXUElFcnJvcihFbmhhbmNlZElPTWlzc2luZyk7DQorCQlyZXR1cm4gMC4wOw0KKwl9DQorDQorCVN5bmNocm9uaXplZCBzeW5jKG1fb3V0cHV0RGF0YVNlbWFwaG9yZSk7DQorCXJldHVybiBtX291dHB1dERhdGEuZGF0YS5wd21fcGVyaW9kW2NoYW5uZWxzXSAvIDI0MDAwMDAwLjA7DQorfQ0KKw0KKy8qKg0KKyAqIFNldCB0aGUgcGVyaW9kIG9mIGEgUFdNIGdlbmVyYXRvci4NCisgKiANCisgKiBUaGVyZSBhcmUgMiBQV00gZ2VuZXJhdG9ycyBvbiB0aGUgSU8gYm9hcmQuICBPbmUgY2FuIGdlbmVyYXRlIFBXTSBzaWduYWxzIG9uIERJTzEgYW5kIERJTzIsDQorICogdGhlIG90aGVyIG9uIERJTzMgYW5kIERJTzQuICBFYWNoIGdlbmVyYXRvciBoYXMgb25lIGNvdW50ZXIgYW5kIHR3byBjb21wYXJlIHJlZ2lzdGVycy4gIEFzIHN1Y2gsDQorICogZWFjaCBwYWlyIG9mIFBXTSBvdXRwdXRzIHNoYXJlIHRoZSBvdXRwdXQgcGVyaW9kIGJ1dCBoYXZlIGluZGVwZW5kZW50IGR1dHkgY3ljbGVzLg0KKyAqIA0KKyAqIEBwYXJhbSBjaGFubmVscyBTZWxlY3QgdGhlIGdlbmVyYXRvciBieSBzcGVjaWZ5aW5nIHRoZSB0d28gY2hhbm5lbHMgdG8gd2hpY2ggaXQgaXMgY29ubmVjdGVkLg0KKyAqIEBwYXJhbSBwZXJpb2QgVGhlIHBlcmlvZCBvZiB0aGUgUFdNIGdlbmVyYXRvciBpbiBzZWNvbmRzLiBbMC4wLDAuMDAyNzMxXQ0KKyAqLw0KK3ZvaWQgRHJpdmVyU3RhdGlvbkVuaGFuY2VkSU86OlNldFBXTVBlcmlvZCh0UFdNUGVyaW9kQ2hhbm5lbHMgY2hhbm5lbHMsIGRvdWJsZSBwZXJpb2QpDQorew0KKwlpZiAoY2hhbm5lbHMgPCBrUFdNQ2hhbm5lbHMxYW5kMiB8fCBjaGFubmVscyA+IGtQV01DaGFubmVsczNhbmQ0KQ0KKwl7DQorCQl3cGlfc2V0V1BJRXJyb3JXaXRoQ29udGV4dChQYXJhbWV0ZXJPdXRPZlJhbmdlLCAiY2hhbm5lbHMgbXVzdCBiZSBrUFdNQ2hhbm5lbHMxYW5kMiBvciBrUFdNQ2hhbm5lbHMzYW5kNCIpOw0KKwkJcmV0dXJuOw0KKwl9DQorDQorCS8vIENvbnZlcnQgdG8gdGlja3MgYmFzZWQgb24gdGhlIElPIGJvYXJkJ3MgMjRNSHogY2xvY2sNCisJZG91YmxlIHRpY2tzID0gcGVyaW9kICogMjQwMDAwMDAuMDsNCisJLy8gTGltaXQgdGhlIHJhbmdlIG9mIHRoZSB0aWNrcy4uLiB3YXJuIGlmIHRvbyBiaWcuDQorCWlmICh0aWNrcyA+IDY1NTM0LjApIA0KKwl7DQorCQl3cGlfc2V0V1BJRXJyb3IoRW5oYW5jZWRJT1BXTVBlcmlvZE91dE9mUmFuZ2UpOw0KKwkJdGlja3MgPSA2NTUzNC4wOw0KKwl9DQorCWVsc2UgaWYgKHRpY2tzIDwgMC4wKSB0aWNrcyA9IDAuMDsNCisJLy8gUHJlc2VydmUgdGhlIGR1dHkgY3ljbGVzLg0KKwlkb3VibGUgZHV0eUN5Y2xlc1syXTsNCisJZHV0eUN5Y2xlc1swXSA9IEdldFBXTU91dHB1dCgoY2hhbm5lbHMgPDwgMSkgKyAxKTsNCisJZHV0eUN5Y2xlc1sxXSA9IEdldFBXTU91dHB1dCgoY2hhbm5lbHMgPDwgMSkgKyAyKTsNCisJew0KKwkJU3luY2hyb25pemVkIHN5bmMobV9vdXRwdXREYXRhU2VtYXBob3JlKTsNCisJCS8vIFVwZGF0ZSB0aGUgcGVyaW9kDQorCQltX291dHB1dERhdGEuZGF0YS5wd21fcGVyaW9kW2NoYW5uZWxzXSA9IChVSU5UMTYpdGlja3M7DQorCQltX2NvbmZpZ0NoYW5nZWQgPSB0cnVlOw0KKwl9DQorCS8vIFJlc3RvcmUgdGhlIGR1dHkgY3ljbGVzDQorCVNldFBXTU91dHB1dCgoY2hhbm5lbHMgPDwgMSkgKyAxLCBkdXR5Q3ljbGVzWzBdKTsNCisJU2V0UFdNT3V0cHV0KChjaGFubmVscyA8PCAxKSArIDIsIGR1dHlDeWNsZXNbMV0pOw0KK30NCisNCisvKioNCisgKiBHZXQgdGhlIHN0YXRlIGJlaW5nIG91dHB1dCBvbiBhIGZpeGVkIGRpZ2l0YWwgb3V0cHV0Lg0KKyAqIA0KKyAqIEBwYXJhbSBjaGFubmVsIFRoZSBGaXhlZERPIGxpbmUgdG8gZ2V0LiBbMSwyXQ0KKyAqIEByZXR1cm4gVGhlIHN0YXRlIG9mIHRoZSBGaXhlZERPIGxpbmUuDQorICovDQorYm9vbCBEcml2ZXJTdGF0aW9uRW5oYW5jZWRJTzo6R2V0Rml4ZWREaWdpdGFsT3V0cHV0KFVJTlQzMiBjaGFubmVsKQ0KK3sNCisJaWYgKGNoYW5uZWwgPCAxIHx8IGNoYW5uZWwgPiAyKQ0KKwl7DQorCQl3cGlfc2V0V1BJRXJyb3JXaXRoQ29udGV4dChQYXJhbWV0ZXJPdXRPZlJhbmdlLCAiY2hhbm5lbCBtdXN0IGJlIGJldHdlZW4gMSBhbmQgMiIpOw0KKwkJcmV0dXJuIDA7DQorCX0NCisJaWYgKCFtX291dHB1dFZhbGlkKQ0KKwl7DQorCQl3cGlfc2V0V1BJRXJyb3IoRW5oYW5jZWRJT01pc3NpbmcpOw0KKwkJcmV0dXJuIDA7DQorCX0NCisNCisJU3luY2hyb25pemVkIHN5bmMobV9vdXRwdXREYXRhU2VtYXBob3JlKTsNCisJcmV0dXJuICgobV9vdXRwdXREYXRhLmRhdGEuZml4ZWRfZGlnaXRhbF9vdXQgPj4gKGNoYW5uZWwtMSkpICYgMSkgIT0gMDsNCit9DQorDQorLyoqDQorICogU2V0IHRoZSBzdGF0ZSB0byBvdXRwdXQgb24gYSBGaXhlZCBIaWdoIEN1cnJlbnQgRGlnaXRhbCBPdXRwdXQgbGluZS4NCisgKiANCisgKiBGaXhlZERPMSBpcyBwaW4gNSBvbiB0aGUgdG9wIGNvbm5lY3RvciAoUDIpLg0KKyAqIEZpeGVkRE8yIGlzIHBpbiAzIG9uIHRoZSB0b3AgY29ubmVjdG9yIChQMikuDQorICogDQorICogVGhlIEZpeGVkRE8gbGluZXMgYWx3YXlzIG91dHB1dCAwViBhbmQgMy4zViByZWdhcmRsZXNzIG9mIEoxIGFuZCBKNC4NCisgKiBUaGV5IGNhbiBzb3VyY2UgNG1BIGFuZCBjYW4gc2luayAyNW1BLiAgQmVjYXVzZSBvZiB0aGlzLCB0aGV5IGFyZSBleHBlY3RlZCB0byBiZSB1c2VkDQorICogaW4gYW4gYWN0aXZlIGxvdyBjb25maWd1cmF0aW9uLCBzdWNoIGFzIGNvbm5lY3RpbmcgdG8gdGhlIGNhdGhvZGUgb2YgYSBicmlnaHQgTEVELg0KKyAqIEJlY2F1c2UgdGhleSBhcmUgZXhwZWN0ZWQgdG8gYmUgYWN0aXZlIGxvdywgdGhleSBkZWZhdWx0IHRvIHRydWUuDQorICogDQorICogQHBhcmFtIGNoYW5uZWwgVGhlIEZpeGVkRE8gY2hhbm5lbCB0byBzZXQuDQorICogQHBhcmFtIHZhbHVlIFRoZSBzdGF0ZSB0byBzZXQgdGhlIEZpeGVkRE8uDQorICovDQordm9pZCBEcml2ZXJTdGF0aW9uRW5oYW5jZWRJTzo6U2V0Rml4ZWREaWdpdGFsT3V0cHV0KFVJTlQzMiBjaGFubmVsLCBib29sIHZhbHVlKQ0KK3sNCisJaWYgKGNoYW5uZWwgPCAxIHx8IGNoYW5uZWwgPiAyKQ0KKwl7DQorCQl3cGlfc2V0V1BJRXJyb3JXaXRoQ29udGV4dChQYXJhbWV0ZXJPdXRPZlJhbmdlLCAiY2hhbm5lbCBtdXN0IGJlIGJldHdlZW4gMSBhbmQgMiIpOw0KKwkJcmV0dXJuOw0KKwl9DQorCWlmICghbV9vdXRwdXRWYWxpZCkNCisJew0KKwkJd3BpX3NldFdQSUVycm9yKEVuaGFuY2VkSU9NaXNzaW5nKTsNCisJCXJldHVybjsNCisJfQ0KKw0KKwlzdGF0aWMgVUlOVDggcmVwb3J0ZWRfbWFzayA9IDA7DQorCWlmICghKHJlcG9ydGVkX21hc2sgJiAoMSA+PiBjaGFubmVsKSkpDQorCXsNCisJCW5Vc2FnZVJlcG9ydGluZzo6cmVwb3J0KG5Vc2FnZVJlcG9ydGluZzo6a1Jlc291cmNlVHlwZV9Ecml2ZXJTdGF0aW9uRUlPLCBjaGFubmVsLCBuVXNhZ2VSZXBvcnRpbmc6OmtEcml2ZXJTdGF0aW9uRUlPX0ZpeGVkRGlnaXRhbE91dCk7DQorCQlyZXBvcnRlZF9tYXNrIHw9ICgxID4+IGNoYW5uZWwpOw0KKwl9DQorDQorCVVJTlQ4IGRpZ2l0YWw7DQorCVN5bmNocm9uaXplZCBzeW5jKG1fb3V0cHV0RGF0YVNlbWFwaG9yZSk7DQorCWRpZ2l0YWwgPSBtX291dHB1dERhdGEuZGF0YS5maXhlZF9kaWdpdGFsX291dDsNCisNCisJZGlnaXRhbCAmPSB+KDEgPDwgKGNoYW5uZWwtMSkpOw0KKwlpZiAodmFsdWUpIGRpZ2l0YWwgfD0gMSA8PCAoY2hhbm5lbC0xKTsNCisNCisJbV9vdXRwdXREYXRhLmRhdGEuZml4ZWRfZGlnaXRhbF9vdXQgPSBkaWdpdGFsOw0KK30NCisNCisvKioNCisgKiBHZXQgdGhlIHBvc2l0aW9uIG9mIGEgcXVhZHJhdHVyZSBlbmNvZGVyLg0KKyAqIA0KKyAqIFRoZXJlIGFyZSB0d28gc2lnbmVkIDE2LWJpdCA0WCBxdWFkcmF0dXJlIGRlY29kZXJzIG9uIHRoZSBJTyBib2FyZC4gIFRoZXNlIGRlY29kZXJzIGFyZSBhbHdheXMgbW9uaXRvcmluZw0KKyAqIHRoZSBzdGF0ZSBvZiB0aGUgbGluZXMgYXNzaWduZWQgdG8gdGhlbSwgYnV0IHRoZXNlIGxpbmVzIGRvIG5vdCBoYXZlIHRvIGJlIHVzZWQgZm9yIGVuY29kZXJzLg0KKyAqIA0KKyAqIEVuY29kZXIxIHVzZXMgRElPNCBmb3IgIkEiLCBESU82IGZvciAiQiIsIGFuZCBESU84IGZvciAiSW5kZXgiLg0KKyAqIEVuY29kZXIyIHVzZXMgRElPNSBmb3IgIkEiLCBESU83IGZvciAiQiIsIGFuZCBESU85IGZvciAiSW5kZXgiLg0KKyAqIA0KKyAqIFRoZSBpbmRleCBmdW5jdGlvbmFsaXR5IGNhbiBiZSBlbmFibGVkIG9yIGRpc2FibGVkIHVzaW5nIFNldEVuY29kZXJJbmRleEVuYWJsZSgpLg0KKyAqIA0KKyAqIEBwYXJhbSBlbmNvZGVyTnVtYmVyIFRoZSBxdWFkcmF0dXJlIGVuY29kZXIgdG8gYWNjZXNzLiBbMSwyXQ0KKyAqIEByZXR1cm4gVGhlIGN1cnJlbnQgcG9zaXRpb24gb2YgdGhlIHF1YWRyYXR1cmUgZW5jb2Rlci4NCisgKi8NCitJTlQxNiBEcml2ZXJTdGF0aW9uRW5oYW5jZWRJTzo6R2V0RW5jb2RlcihVSU5UMzIgZW5jb2Rlck51bWJlcikNCit7DQorCWlmIChlbmNvZGVyTnVtYmVyIDwgMSB8fCBlbmNvZGVyTnVtYmVyID4gMikNCisJew0KKwkJd3BpX3NldFdQSUVycm9yV2l0aENvbnRleHQoUGFyYW1ldGVyT3V0T2ZSYW5nZSwgImVuY29kZXJOdW1iZXIgbXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDIiKTsNCisJCXJldHVybiAwOw0KKwl9DQorCWlmICghbV9pbnB1dFZhbGlkKQ0KKwl7DQorCQl3cGlfc2V0V1BJRXJyb3IoRW5oYW5jZWRJT01pc3NpbmcpOw0KKwkJcmV0dXJuIDA7DQorCX0NCisNCisJc3RhdGljIFVJTlQ4IHJlcG9ydGVkX21hc2sgPSAwOw0KKwlpZiAoIShyZXBvcnRlZF9tYXNrICYgKDEgPj4gZW5jb2Rlck51bWJlcikpKQ0KKwl7DQorCQluVXNhZ2VSZXBvcnRpbmc6OnJlcG9ydChuVXNhZ2VSZXBvcnRpbmc6OmtSZXNvdXJjZVR5cGVfRHJpdmVyU3RhdGlvbkVJTywgZW5jb2Rlck51bWJlciwgblVzYWdlUmVwb3J0aW5nOjprRHJpdmVyU3RhdGlvbkVJT19FbmNvZGVyKTsNCisJCXJlcG9ydGVkX21hc2sgfD0gKDEgPj4gZW5jb2Rlck51bWJlcik7DQorCX0NCisNCisJU3luY2hyb25pemVkIHN5bmMobV9pbnB1dERhdGFTZW1hcGhvcmUpOw0KKwlyZXR1cm4gbV9pbnB1dERhdGEuZGF0YS5xdWFkW2VuY29kZXJOdW1iZXIgLSAxXSAtIG1fZW5jb2Rlck9mZnNldHNbZW5jb2Rlck51bWJlciAtIDFdOw0KK30NCisNCisvKioNCisgKiBSZXNldCB0aGUgcG9zaXRpb24gb2YgYW4gZW5jb2RlciB0byAwLg0KKyAqIA0KKyAqIFRoaXMgc2ltcGx5IHN0b3JlcyBhbiBvZmZzZXQgbG9jYWxseS4gIEl0IGRvZXMgbm90IHJlc2V0IHRoZSBoYXJkd2FyZSBjb3VudGVyIG9uIHRoZSBJTyBib2FyZC4NCisgKiBJZiB5b3UgdXNlIHRoaXMgbWV0aG9kIHdpdGggSW5kZXggZW5hYmxlZCwgeW91IG1heSBnZXQgdW5leHBlY3RlZCByZXN1bHRzLg0KKyAqIA0KKyAqIEBwYXJhbSBlbmNvZGVyTnVtYmVyIFRoZSBxdWFkcmF0dXJlIGVuY29kZXIgdG8gcmVzZXQuIFsxLDJdDQorICovDQordm9pZCBEcml2ZXJTdGF0aW9uRW5oYW5jZWRJTzo6UmVzZXRFbmNvZGVyKFVJTlQzMiBlbmNvZGVyTnVtYmVyKQ0KK3sNCisJaWYgKGVuY29kZXJOdW1iZXIgPCAxIHx8IGVuY29kZXJOdW1iZXIgPiAyKQ0KKwl7DQorCQl3cGlfc2V0V1BJRXJyb3JXaXRoQ29udGV4dChQYXJhbWV0ZXJPdXRPZlJhbmdlLCAiZW5jb2Rlck51bWJlciBtdXN0IGJlIGJldHdlZW4gMSBhbmQgMiIpOw0KKwkJcmV0dXJuOw0KKwl9DQorCWlmICghbV9pbnB1dFZhbGlkKQ0KKwl7DQorCQl3cGlfc2V0V1BJRXJyb3IoRW5oYW5jZWRJT01pc3NpbmcpOw0KKwkJcmV0dXJuOw0KKwl9DQorDQorCVN5bmNocm9uaXplZCBzeW5jKG1faW5wdXREYXRhU2VtYXBob3JlKTsNCisJbV9lbmNvZGVyT2Zmc2V0c1tlbmNvZGVyTnVtYmVyIC0gMV0gPSBtX2lucHV0RGF0YS5kYXRhLnF1YWRbZW5jb2Rlck51bWJlciAtIDFdOw0KK30NCisNCisvKioNCisgKiBHZXQgdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiBvZiBhIHF1YWRyYXR1cmUgZW5jb2RlciBpbmRleCBjaGFubmVsLg0KKyAqIA0KKyAqIFRoaXMgaGFzIHRoZSBzaWRlIGVmZmVjdCBvZiBmb3JjaW5nIHRoZSBEcml2ZXIgU3RhdGlvbiB0byBzd2l0Y2ggdG8gRW5oYW5jZWQgbW9kZSBpZiBpdCdzIG5vdCB3aGVuIGNhbGxlZC4NCisgKiBJZiBFbmhhbmNlZCBtb2RlIGlzIG5vdCBlbmFibGVkIHdoZW4gdGhpcyBpcyBjYWxsZWQsIGl0IHdpbGwgcmV0dXJuIGZhbHNlLg0KKyAqIA0KKyAqIEBwYXJhbSBlbmNvZGVyTnVtYmVyIFRoZSBxdWFkcmF0dXJlIGVuY29kZXIuIFsxLDJdDQorICogQHJldHVybiBJcyB0aGUgaW5kZXggY2hhbm5lbCBvZiB0aGUgZW5jb2RlciBlbmFibGVkLg0KKyAqLw0KK2Jvb2wgRHJpdmVyU3RhdGlvbkVuaGFuY2VkSU86OkdldEVuY29kZXJJbmRleEVuYWJsZShVSU5UMzIgZW5jb2Rlck51bWJlcikNCit7DQorCWlmIChlbmNvZGVyTnVtYmVyIDwgMSB8fCBlbmNvZGVyTnVtYmVyID4gMikNCisJew0KKwkJd3BpX3NldFdQSUVycm9yV2l0aENvbnRleHQoUGFyYW1ldGVyT3V0T2ZSYW5nZSwgImVuY29kZXJOdW1iZXIgbXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDIiKTsNCisJCXJldHVybiBmYWxzZTsNCisJfQ0KKwlpZiAoIW1fb3V0cHV0VmFsaWQpDQorCXsNCisJCW1fcmVxdWVzdEVuaGFuY2VkRW5hYmxlID0gdHJ1ZTsNCisJCXdwaV9zZXRXUElFcnJvcihFbmhhbmNlZElPTWlzc2luZyk7DQorCQlyZXR1cm4gZmFsc2U7DQorCX0NCisNCisJU3luY2hyb25pemVkIHN5bmMobV9vdXRwdXREYXRhU2VtYXBob3JlKTsNCisJcmV0dXJuICgobV9vdXRwdXREYXRhLmRhdGEucXVhZF9pbmRleF9lbmFibGUgPj4gKGVuY29kZXJOdW1iZXIgLSAxKSkgJiAxKSAhPSAwOw0KK30NCisNCisvKioNCisgKiBFbmFibGUgb3IgZGlzYWJsZSB0aGUgaW5kZXggY2hhbm5lbCBvZiBhIHF1YWRyYXR1cmUgZW5jb2Rlci4NCisgKiANCisgKiBUaGUgcXVhZHJhdHVyZSBkZWNvZGVycyBvbiB0aGUgSU8gYm9hcmQgc3VwcG9ydCBhbiBhY3RpdmUtbG93IGluZGV4IGlucHV0Lg0KKyAqIA0KKyAqIEVuY29kZXIxIHVzZXMgRElPOCBmb3IgIkluZGV4Ii4NCisgKiBFbmNvZGVyMiB1c2VzIERJTzkgZm9yICJJbmRleCIuDQorICogDQorICogV2hlbiBlbmFibGVkLCB0aGUgZGVjb2RlcidzIGNvdW50ZXIgd2lsbCBiZSByZXNldCB0byAwIHdoZW4gQSwgQiwgYW5kIEluZGV4IGFyZSBhbGwgbG93Lg0KKyAqIA0KKyAqIEBwYXJhbSBlbmNvZGVyTnVtYmVyIFRoZSBxdWFkcmF0dXJlIGVuY29kZXIuIFsxLDJdDQorICogQHBhcmFtIGVuYWJsZSBJZiB0cnVlLCByZXNldCB0aGUgZW5jb2RlciBpbiBhbiBpbmRleCBjb25kaXRpb24uDQorICovDQordm9pZCBEcml2ZXJTdGF0aW9uRW5oYW5jZWRJTzo6U2V0RW5jb2RlckluZGV4RW5hYmxlKFVJTlQzMiBlbmNvZGVyTnVtYmVyLCBib29sIGVuYWJsZSkNCit7DQorCWlmIChlbmNvZGVyTnVtYmVyIDwgMSB8fCBlbmNvZGVyTnVtYmVyID4gMikNCisJew0KKwkJd3BpX3NldFdQSUVycm9yV2l0aENvbnRleHQoUGFyYW1ldGVyT3V0T2ZSYW5nZSwgImVuY29kZXJOdW1iZXIgbXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDIiKTsNCisJCXJldHVybjsNCisJfQ0KKw0KKwlTeW5jaHJvbml6ZWQgc3luYyhtX291dHB1dERhdGFTZW1hcGhvcmUpOw0KKwltX291dHB1dERhdGEuZGF0YS5xdWFkX2luZGV4X2VuYWJsZSAmPSB+KDEgPDwgKGVuY29kZXJOdW1iZXIgLSAxKSk7DQorCWlmIChlbmFibGUpIG1fb3V0cHV0RGF0YS5kYXRhLnF1YWRfaW5kZXhfZW5hYmxlIHw9IDEgPDwgKGVuY29kZXJOdW1iZXIgLSAxKTsNCisJbV9jb25maWdDaGFuZ2VkID0gdHJ1ZTsNCit9DQorDQorLyoqDQorICogR2V0IHRoZSB2YWx1ZSBvZiB0aGUgQ2FwYWNpdGl2ZSBTZW5zZSB0b3VjaCBzbGlkZXIuDQorICogDQorICogQHJldHVybiBWYWx1ZSBiZXR3ZWVuIDAuMCAodG93YXJkIGNlbnRlciBvZiBib2FyZCkgYW5kIDEuMCAodG93YXJkIGVkZ2Ugb2YgYm9hcmQpLiAgLTEuMCBtZWFucyBubyB0b3VjaCBkZXRlY3RlZC4NCisgKi8NCitkb3VibGUgRHJpdmVyU3RhdGlvbkVuaGFuY2VkSU86OkdldFRvdWNoU2xpZGVyKCkNCit7DQorCWlmICghbV9pbnB1dFZhbGlkKQ0KKwl7DQorCQl3cGlfc2V0V1BJRXJyb3IoRW5oYW5jZWRJT01pc3NpbmcpOw0KKwkJcmV0dXJuIDAuMDsNCisJfQ0KKw0KKwluVXNhZ2VSZXBvcnRpbmc6OnJlcG9ydChuVXNhZ2VSZXBvcnRpbmc6OmtSZXNvdXJjZVR5cGVfRHJpdmVyU3RhdGlvbkVJTywgMSwgblVzYWdlUmVwb3J0aW5nOjprRHJpdmVyU3RhdGlvbkVJT19Ub3VjaFNsaWRlcik7DQorDQorCVN5bmNocm9uaXplZCBzeW5jKG1faW5wdXREYXRhU2VtYXBob3JlKTsNCisJVUlOVDggdmFsdWUgPSBtX2lucHV0RGF0YS5kYXRhLmNhcHNlbnNlX3NsaWRlcjsNCisJcmV0dXJuIHZhbHVlID09IDI1NSA/IC0xLjAgOiB2YWx1ZSAvIDI1NC4wOw0KK30NCisNCisvKioNCisgKiBHZXQgdGhlIHBlcmNlbnQgZHV0eS1jeWNsZSB0aGF0IHRoZSBQV00gZ2VuZXJhdG9yIGNoYW5uZWwgaXMgY29uZmlndXJlZCB0byBvdXRwdXQuDQorICogDQorICogQHBhcmFtIGNoYW5uZWwgVGhlIERJTyBsaW5lJ3MgUFdNIGdlbmVyYXRvciB0byBnZXQgdGhlIGR1dHktY3ljbGUgZnJvbS4gWzEsNF0NCisgKiBAcmV0dXJuIFRoZSBwZXJjZW50IGR1dHktY3ljbGUgYmVpbmcgb3V0cHV0IChpZiB0aGUgRElPIGxpbmUgaXMgY29uZmlndXJlZCBmb3IgUFdNKS4gWzAuMCwxLjBdDQorICovDQorZG91YmxlIERyaXZlclN0YXRpb25FbmhhbmNlZElPOjpHZXRQV01PdXRwdXQoVUlOVDMyIGNoYW5uZWwpDQorew0KKwlpZiAoY2hhbm5lbCA8IDEgfHwgY2hhbm5lbCA+IDQpDQorCXsNCisJCXdwaV9zZXRXUElFcnJvcldpdGhDb250ZXh0KFBhcmFtZXRlck91dE9mUmFuZ2UsICJjaGFubmVsIG11c3QgYmUgYmV0d2VlbiAxIGFuZCA0Iik7DQorCQlyZXR1cm4gMC4wOw0KKwl9DQorCWlmICghbV9vdXRwdXRWYWxpZCkNCisJew0KKwkJd3BpX3NldFdQSUVycm9yKEVuaGFuY2VkSU9NaXNzaW5nKTsNCisJCXJldHVybiAwLjA7DQorCX0NCisNCisJU3luY2hyb25pemVkIHN5bmMobV9vdXRwdXREYXRhU2VtYXBob3JlKTsNCisJcmV0dXJuIChkb3VibGUpbV9vdXRwdXREYXRhLmRhdGEucHdtX2NvbXBhcmVbY2hhbm5lbCAtIDFdIC8gKGRvdWJsZSltX291dHB1dERhdGEuZGF0YS5wd21fcGVyaW9kWyhjaGFubmVsIC0gMSkgPj4gMV07DQorfQ0KKw0KKy8qKg0KKyAqIFNldCB0aGUgcGVyY2VudCBkdXR5LWN5Y2xlIHRvIG91dHB1dCBvbiBhIFBXTSBlbmFibGVkIERJTyBsaW5lLg0KKyAqIA0KKyAqIERJTzEgdGhyb3VnaCBESU80IGhhdmUgdGhlIGFiaWxpdHkgdG8gb3V0cHV0IGEgUFdNIHNpZ25hbC4gIFRoZSBwZXJpb2Qgb2YgdGhlDQorICogc2lnbmFsIGNhbiBiZSBjb25maWd1cmVkIGluIHBhaXJzIHVzaW5nIFNldFBXTVBlcmlvZCgpLg0KKyAqIA0KKyAqIEBwYXJhbSBjaGFubmVsIFRoZSBESU8gbGluZSdzIFBXTSBnZW5lcmF0b3IgdG8gc2V0LiBbMSw0XQ0KKyAqIEBwYXJhbSB2YWx1ZSBUaGUgcGVyY2VudCBkdXR5LWN5Y2xlIHRvIG91dHB1dCBmcm9tIHRoZSBQV00gZ2VuZXJhdG9yLiBbMC4wLDEuMF0NCisgKi8NCit2b2lkIERyaXZlclN0YXRpb25FbmhhbmNlZElPOjpTZXRQV01PdXRwdXQoVUlOVDMyIGNoYW5uZWwsIGRvdWJsZSB2YWx1ZSkNCit7DQorCWlmIChjaGFubmVsIDwgMSB8fCBjaGFubmVsID4gNCkNCisJew0KKwkJd3BpX3NldFdQSUVycm9yV2l0aENvbnRleHQoUGFyYW1ldGVyT3V0T2ZSYW5nZSwgImNoYW5uZWwgbXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDQiKTsNCisJCXJldHVybjsNCisJfQ0KKwlpZiAoIW1fb3V0cHV0VmFsaWQpDQorCXsNCisJCXdwaV9zZXRXUElFcnJvcihFbmhhbmNlZElPTWlzc2luZyk7DQorCQlyZXR1cm47DQorCX0NCisNCisJc3RhdGljIFVJTlQ4IHJlcG9ydGVkX21hc2sgPSAwOw0KKwlpZiAoIShyZXBvcnRlZF9tYXNrICYgKDEgPj4gY2hhbm5lbCkpKQ0KKwl7DQorCQluVXNhZ2VSZXBvcnRpbmc6OnJlcG9ydChuVXNhZ2VSZXBvcnRpbmc6OmtSZXNvdXJjZVR5cGVfRHJpdmVyU3RhdGlvbkVJTywgY2hhbm5lbCwgblVzYWdlUmVwb3J0aW5nOjprRHJpdmVyU3RhdGlvbkVJT19QV00pOw0KKwkJcmVwb3J0ZWRfbWFzayB8PSAoMSA+PiBjaGFubmVsKTsNCisJfQ0KKw0KKwlpZiAodmFsdWUgPiAxLjApIHZhbHVlID0gMS4wOw0KKwllbHNlIGlmICh2YWx1ZSA8IDAuMCkgdmFsdWUgPSAwLjA7DQorCVN5bmNocm9uaXplZCBzeW5jKG1fb3V0cHV0RGF0YVNlbWFwaG9yZSk7DQorCW1fb3V0cHV0RGF0YS5kYXRhLnB3bV9jb21wYXJlW2NoYW5uZWwgLSAxXSA9IChVSU5UMTYpKHZhbHVlICogKGRvdWJsZSltX291dHB1dERhdGEuZGF0YS5wd21fcGVyaW9kWyhjaGFubmVsIC0gMSkgPj4gMV0pOw0KK30NCisNCisvKioNCisgKiBHZXQgdGhlIGZpcm13YXJlIHZlcnNpb24gcnVubmluZyBvbiB0aGUgSU8gYm9hcmQuDQorICogDQorICogVGhpcyBhbHNvIGhhcyB0aGUgc2lkZSBlZmZlY3Qgb2YgZm9yY2luZyB0aGUgZHJpdmVyIHN0YXRpb24gdG8gc3dpdGNoIHRvIEVuaGFuY2VkIG1vZGUgaWYgaXQgaXMgbm90Lg0KKyAqIElmIHlvdSBwbGFuIHRvIHN3aXRjaCBiZXR3ZWVuIERyaXZlciBTdGF0aW9ucyB3aXRoIHVua25vd24gSU8gY29uZmlndXJhdGlvbnMsIHlvdSBjYW4gY2FsbCB0aGlzDQorICogdW50aWwgaXQgcmV0dXJucyBhIG5vbi0wIHZlcnNpb24gdG8gZW5zdXJlIHRoYXQgdGhpcyBBUEkgaXMgYWNjZXNzaWJsZSBiZWZvcmUgcHJvY2VlZGluZy4NCisgKiANCisgKiBAcmV0dXJuIFRoZSB2ZXJzaW9uIG9mIHRoZSBmaXJtd2FyZSBydW5uaW5nIG9uIHRoZSBJTyBib2FyZC4gIDAgaWYgdGhlIGJvYXJkIGlzIG5vdCBhdHRhY2hlZCBvciBub3QgaW4gRW5oYW5jZWQgbW9kZS4NCisgKi8NCitVSU5UOCBEcml2ZXJTdGF0aW9uRW5oYW5jZWRJTzo6R2V0RmlybXdhcmVWZXJzaW9uKCkNCit7DQorCWlmICghbV9pbnB1dFZhbGlkKQ0KKwl7DQorCQltX3JlcXVlc3RFbmhhbmNlZEVuYWJsZSA9IHRydWU7DQorCQl3cGlfc2V0V1BJRXJyb3IoRW5oYW5jZWRJT01pc3NpbmcpOw0KKwkJcmV0dXJuIDA7DQorCX0NCisNCisJU3luY2hyb25pemVkIHN5bmMobV9pbnB1dERhdGFTZW1hcGhvcmUpOw0KKwlyZXR1cm4gbV9pbnB1dERhdGEuZGF0YS5md192ZXJzaW9uOw0KK30NCisNCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9Ecml2ZXJTdGF0aW9uRW5oYW5jZWRJTy5oIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvRHJpdmVyU3RhdGlvbkVuaGFuY2VkSU8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTkxZjg0Ci0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvRHJpdmVyU3RhdGlvbkVuaGFuY2VkSU8uaApAQCAtMCwwICsxLDE1MSBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBDb3B5cmlnaHQgKGMpIEZJUlNUIDIwMDguIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCQkJCQkJCSAgKi8NCisvKiBPcGVuIFNvdXJjZSBTb2Z0d2FyZSAtIG1heSBiZSBtb2RpZmllZCBhbmQgc2hhcmVkIGJ5IEZSQyB0ZWFtcy4gVGhlIGNvZGUgICAqLw0KKy8qIG11c3QgYmUgYWNjb21wYW5pZWQgYnkgdGhlIEZJUlNUIEJTRCBsaWNlbnNlIGZpbGUgaW4gJChXSU5EX0JBU0UpL1dQSUxpYi4gICovDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisjaWZuZGVmIF9fRFJJVkVSX1NUQVRJT05fRU5IQU5DRURfSU9fSF9fDQorI2RlZmluZSBfX0RSSVZFUl9TVEFUSU9OX0VOSEFOQ0VEX0lPX0hfXw0KKw0KKyNpbmNsdWRlICJFcnJvckJhc2UuaCINCisjaW5jbHVkZSAiTmV0d29ya0NvbW11bmljYXRpb24vRlJDQ29tbS5oIg0KKyNpbmNsdWRlIDxzdGFjaz4NCisjaW5jbHVkZSA8dmVjdG9yPg0KKyNpbmNsdWRlIDx2eFdvcmtzLmg+DQorDQorI2RlZmluZSBrQW5hbG9nSW5wdXRSZXNvbHV0aW9uICgoZG91YmxlKSgoMTw8MTQpLTEpKQ0KKyNkZWZpbmUga0FuYWxvZ0lucHV0UmVmZXJlbmNlIDMuMw0KKyNkZWZpbmUga0FuYWxvZ091dHB1dFJlc29sdXRpb24gKChkb3VibGUpKCgxPDw4KS0xKSkNCisjZGVmaW5lIGtBbmFsb2dPdXRwdXRSZWZlcmVuY2UgNC4wDQorI2RlZmluZSBrQWNjZWxPZmZzZXQgODMwMA0KKyNkZWZpbmUga0FjY2VsU2NhbGUgMzMwMC4wDQorI2RlZmluZSBrU3VwcG9ydGVkQVBJVmVyc2lvbiAxDQorDQorLyoqDQorICogSW50ZXJhY3Qgd2l0aCB0aGUgbW9yZSBjb21wbGV0ZSBJL08gYXZhaWxhYmxlIGZyb20gdGhlIA0KKyAqIG5ld2VzdCBkcml2ZXIgc3RhdGlvbi4gIEdldCBhIHJlZmVyZW5jZSB0byBhbiBvYmplY3QNCisgKiBvZiB0aGlzIHR5cGUgYnkgY2FsbGluZyBHZXRFbmhhbmNlZElPKCkgb24gdGhlIERyaXZlclN0YXRpb24gb2JqZWN0Lg0KKyAqLw0KK2NsYXNzIERyaXZlclN0YXRpb25FbmhhbmNlZElPIDogcHVibGljIEVycm9yQmFzZQ0KK3sNCisJLy8gQ2FuIG9ubHkgYmUgY29uc3RydWN0ZWQgYnkgdGhlIERyaXZlclN0YXRpb24gY2xhc3MuDQorCWZyaWVuZCBjbGFzcyBEcml2ZXJTdGF0aW9uOw0KKw0KKyNwcmFnbWEgcGFjayhwdXNoLDEpDQorCS8vIEJFR0lOOiBEZWZpbml0aW9ucyBmcm9tIHRoZSBDeXByZXNzIGZpcm13YXJlDQorCXR5cGVkZWYgc3RydWN0DQorCXsNCisJCVVJTlQxNiBkaWdpdGFsOw0KKwkJVUlOVDE2IGRpZ2l0YWxfb2U7DQorCQlVSU5UMTYgZGlnaXRhbF9wZTsNCisJCVVJTlQxNiBwd21fY29tcGFyZVs0XTsNCisJCVVJTlQxNiBwd21fcGVyaW9kWzJdOw0KKwkJVUlOVDggZGFjWzJdOw0KKwkJVUlOVDggbGVkczsNCisJCXVuaW9uDQorCQl7DQorCQkJc3RydWN0DQorCQkJew0KKwkJCQkvLyBCaXRzIGFyZSBpbnZlcnRlZCBmcm9tIGN5cHJlc3MgZncgYmVjYXVzZSBvZiBiaWctZW5kaWFuIQ0KKwkJCQlVSU5UOCBwd21fZW5hYmxlIDogNDsNCisJCQkJVUlOVDggY29tcGFyYXRvcl9lbmFibGUgOiAyOw0KKwkJCQlVSU5UOCBxdWFkX2luZGV4X2VuYWJsZSA6IDI7DQorCQkJfTsNCisJCQlVSU5UOCBlbmFibGVzOw0KKwkJfTsNCisJCVVJTlQ4IGZpeGVkX2RpZ2l0YWxfb3V0Ow0KKwl9IG91dHB1dF90OyAgLy9kYXRhIHRvIElPICgyMyBieXRlcykNCisNCisJdHlwZWRlZiBzdHJ1Y3QNCisJew0KKwkJVUlOVDggYXBpX3ZlcnNpb247DQorCQlVSU5UOCBmd192ZXJzaW9uOw0KKwkJSU5UMTYgYW5hbG9nWzhdOw0KKwkJVUlOVDE2IGRpZ2l0YWw7DQorCQlJTlQxNiBhY2NlbFszXTsNCisJCUlOVDE2IHF1YWRbMl07DQorCQlVSU5UOCBidXR0b25zOw0KKwkJVUlOVDggY2Fwc2Vuc2Vfc2xpZGVyOw0KKwkJVUlOVDggY2Fwc2Vuc2VfcHJveGltaXR5Ow0KKwl9IGlucHV0X3Q7CS8vZGF0YSBmcm9tIElPICgzMyBieXRlcykNCisJLy8gRU5EOiBEZWZpbml0aW9ucyBmcm9tIHRoZSBDeXByZXNzIGZpcm13YXJlDQorDQorCS8vIER5bmFtaWMgYmxvY2sgZGVmaW5pdGlvbnMNCisJdHlwZWRlZiBzdHJ1Y3QNCisJew0KKwkJVUlOVDggc2l6ZTsgLy8gTXVzdCBiZSAyNSAoc2l6ZSByZW1haW5pbmcgaW4gdGhlIGJsb2NrIG5vdCBjb3VudGluZyB0aGUgc2l6ZSB2YXJpYWJsZSkNCisJCVVJTlQ4IGlkOyAvLyBNdXN0IGJlIDE4DQorCQlvdXRwdXRfdCBkYXRhOw0KKwkJVUlOVDggZmxhZ3M7DQorCX0gc3RhdHVzX2Jsb2NrX3Q7DQorDQorCXR5cGVkZWYgc3RydWN0DQorCXsNCisJCVVJTlQ4IHNpemU7IC8vIE11c3QgYmUgMzQNCisJCVVJTlQ4IGlkOyAvLyBNdXN0IGJlIDE3DQorCQlpbnB1dF90IGRhdGE7DQorCX0gY29udHJvbF9ibG9ja190Ow0KKyNwcmFnbWEgcGFjayhwb3ApDQorDQorCWVudW0gdEJsb2NrSUQNCisJew0KKwkJa0lucHV0QmxvY2tJRCA9IGtGUkNfTmV0d29ya0NvbW11bmljYXRpb25fRHluYW1pY1R5cGVfRFNFbmhhbmNlZElPX0lucHV0LA0KKwkJa091dHB1dEJsb2NrSUQgPSBrRlJDX05ldHdvcmtDb21tdW5pY2F0aW9uX0R5bmFtaWNUeXBlX0RTRW5oYW5jZWRJT19PdXRwdXQsDQorCX07DQorCWVudW0gdFN0YXR1c0ZsYWdzIHtrU3RhdHVzVmFsaWQgPSAweDAxLCBrU3RhdHVzQ29uZmlnQ2hhbmdlZCA9IDB4MDIsIGtGb3JjZUVuaGFuY2VkTW9kZSA9IDB4MDR9Ow0KKw0KK3B1YmxpYzoNCisJZW51bSB0RGlnaXRhbENvbmZpZyB7a1Vua25vd24sIGtJbnB1dEZsb2F0aW5nLCBrSW5wdXRQdWxsVXAsIGtJbnB1dFB1bGxEb3duLCBrT3V0cHV0LCBrUFdNLCBrQW5hbG9nQ29tcGFyYXRvcn07DQorCWVudW0gdEFjY2VsQ2hhbm5lbCB7a0FjY2VsWCA9IDAsIGtBY2NlbFkgPSAxLCBrQWNjZWxaID0gMn07DQorCWVudW0gdFBXTVBlcmlvZENoYW5uZWxzIHtrUFdNQ2hhbm5lbHMxYW5kMiwga1BXTUNoYW5uZWxzM2FuZDR9Ow0KKw0KKwlkb3VibGUgR2V0QWNjZWxlcmF0aW9uKHRBY2NlbENoYW5uZWwgY2hhbm5lbCk7DQorCWRvdWJsZSBHZXRBbmFsb2dJbihVSU5UMzIgY2hhbm5lbCk7DQorCWRvdWJsZSBHZXRBbmFsb2dJblJhdGlvKFVJTlQzMiBjaGFubmVsKTsNCisJZG91YmxlIEdldEFuYWxvZ091dChVSU5UMzIgY2hhbm5lbCk7DQorCXZvaWQgU2V0QW5hbG9nT3V0KFVJTlQzMiBjaGFubmVsLCBkb3VibGUgdmFsdWUpOw0KKwlib29sIEdldEJ1dHRvbihVSU5UMzIgY2hhbm5lbCk7DQorCVVJTlQ4IEdldEJ1dHRvbnMoKTsNCisJdm9pZCBTZXRMRUQoVUlOVDMyIGNoYW5uZWwsIGJvb2wgdmFsdWUpOw0KKwl2b2lkIFNldExFRHMoVUlOVDggdmFsdWUpOw0KKwlib29sIEdldERpZ2l0YWwoVUlOVDMyIGNoYW5uZWwpOw0KKwlVSU5UMTYgR2V0RGlnaXRhbHMoKTsNCisJdm9pZCBTZXREaWdpdGFsT3V0cHV0KFVJTlQzMiBjaGFubmVsLCBib29sIHZhbHVlKTsNCisJdERpZ2l0YWxDb25maWcgR2V0RGlnaXRhbENvbmZpZyhVSU5UMzIgY2hhbm5lbCk7DQorCXZvaWQgU2V0RGlnaXRhbENvbmZpZyhVSU5UMzIgY2hhbm5lbCwgdERpZ2l0YWxDb25maWcgY29uZmlnKTsNCisJZG91YmxlIEdldFBXTVBlcmlvZCh0UFdNUGVyaW9kQ2hhbm5lbHMgY2hhbm5lbHMpOw0KKwl2b2lkIFNldFBXTVBlcmlvZCh0UFdNUGVyaW9kQ2hhbm5lbHMgY2hhbm5lbHMsIGRvdWJsZSBwZXJpb2QpOw0KKwlib29sIEdldEZpeGVkRGlnaXRhbE91dHB1dChVSU5UMzIgY2hhbm5lbCk7DQorCXZvaWQgU2V0Rml4ZWREaWdpdGFsT3V0cHV0KFVJTlQzMiBjaGFubmVsLCBib29sIHZhbHVlKTsNCisJSU5UMTYgR2V0RW5jb2RlcihVSU5UMzIgZW5jb2Rlck51bWJlcik7DQorCXZvaWQgUmVzZXRFbmNvZGVyKFVJTlQzMiBlbmNvZGVyTnVtYmVyKTsNCisJYm9vbCBHZXRFbmNvZGVySW5kZXhFbmFibGUoVUlOVDMyIGVuY29kZXJOdW1iZXIpOw0KKwl2b2lkIFNldEVuY29kZXJJbmRleEVuYWJsZShVSU5UMzIgZW5jb2Rlck51bWJlciwgYm9vbCBlbmFibGUpOw0KKwlkb3VibGUgR2V0VG91Y2hTbGlkZXIoKTsNCisJZG91YmxlIEdldFBXTU91dHB1dChVSU5UMzIgY2hhbm5lbCk7DQorCXZvaWQgU2V0UFdNT3V0cHV0KFVJTlQzMiBjaGFubmVsLCBkb3VibGUgdmFsdWUpOw0KKwlVSU5UOCBHZXRGaXJtd2FyZVZlcnNpb24oKTsNCisNCitwcml2YXRlOg0KKwlEcml2ZXJTdGF0aW9uRW5oYW5jZWRJTygpOw0KKwl2aXJ0dWFsIH5Ecml2ZXJTdGF0aW9uRW5oYW5jZWRJTygpOw0KKwl2b2lkIFVwZGF0ZURhdGEoKTsNCisJdm9pZCBNZXJnZUNvbmZpZ0ludG9PdXRwdXQoY29uc3Qgc3RhdHVzX2Jsb2NrX3QgJmRzT3V0cHV0QmxvY2ssIHN0YXR1c19ibG9ja190ICZsb2NhbENhY2hlKTsNCisJYm9vbCBJc0NvbmZpZ0VxdWFsKGNvbnN0IHN0YXR1c19ibG9ja190ICZkc091dHB1dEJsb2NrLCBjb25zdCBzdGF0dXNfYmxvY2tfdCAmbG9jYWxDYWNoZSk7DQorDQorCS8vIFVzYWdlIEd1aWRlbGluZXMuLi4NCisJRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKERyaXZlclN0YXRpb25FbmhhbmNlZElPKTsNCisNCisJY29udHJvbF9ibG9ja190IG1faW5wdXREYXRhOw0KKwlzdGF0dXNfYmxvY2tfdCBtX291dHB1dERhdGE7DQorCVNFTV9JRCBtX2lucHV0RGF0YVNlbWFwaG9yZTsNCisJU0VNX0lEIG1fb3V0cHV0RGF0YVNlbWFwaG9yZTsNCisJYm9vbCBtX2lucHV0VmFsaWQ7DQorCWJvb2wgbV9vdXRwdXRWYWxpZDsNCisJYm9vbCBtX2NvbmZpZ0NoYW5nZWQ7DQorCWJvb2wgbV9yZXF1ZXN0RW5oYW5jZWRFbmFibGU7DQorCUlOVDE2IG1fZW5jb2Rlck9mZnNldHNbMl07DQorfTsNCisNCisjZW5kaWYNCisNCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9Ecml2ZXJTdGF0aW9uTENELmNwcCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0RyaXZlclN0YXRpb25MQ0QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmODRlZjgKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9Ecml2ZXJTdGF0aW9uTENELmNwcApAQCAtMCwwICsxLDE2NSBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBDb3B5cmlnaHQgKGMpIEZJUlNUIDIwMDguIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCQkJCQkJCSAgKi8NCisvKiBPcGVuIFNvdXJjZSBTb2Z0d2FyZSAtIG1heSBiZSBtb2RpZmllZCBhbmQgc2hhcmVkIGJ5IEZSQyB0ZWFtcy4gVGhlIGNvZGUgICAqLw0KKy8qIG11c3QgYmUgYWNjb21wYW5pZWQgYnkgdGhlIEZJUlNUIEJTRCBsaWNlbnNlIGZpbGUgaW4gJChXSU5EX0JBU0UpL1dQSUxpYi4gICovDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisjaW5jbHVkZSAiRHJpdmVyU3RhdGlvbkxDRC5oIg0KKyNpbmNsdWRlICJOZXR3b3JrQ29tbXVuaWNhdGlvbi9GUkNDb21tLmgiDQorI2luY2x1ZGUgIk5ldHdvcmtDb21tdW5pY2F0aW9uL1VzYWdlUmVwb3J0aW5nLmgiDQorI2luY2x1ZGUgIlN5bmNocm9uaXplZC5oIg0KKyNpbmNsdWRlICJXUElFcnJvcnMuaCINCisjaW5jbHVkZSA8c3RyTGliLmg+DQorDQorY29uc3QgVUlOVDMyIERyaXZlclN0YXRpb25MQ0Q6OmtTeW5jVGltZW91dF9tczsNCitjb25zdCBVSU5UMTYgRHJpdmVyU3RhdGlvbkxDRDo6a0Z1bGxEaXNwbGF5VGV4dENvbW1hbmQ7DQorY29uc3QgSU5UMzIgRHJpdmVyU3RhdGlvbkxDRDo6a0xpbmVMZW5ndGg7DQorY29uc3QgSU5UMzIgRHJpdmVyU3RhdGlvbkxDRDo6a051bUxpbmVzOw0KK0RyaXZlclN0YXRpb25MQ0QqIERyaXZlclN0YXRpb25MQ0Q6Om1faW5zdGFuY2UgPSBOVUxMOw0KKw0KKy8qKg0KKyAqIERyaXZlclN0YXRpb25MQ0QgY29udHJ1Y3Rvci4NCisgKiANCisgKiBUaGlzIGlzIG9ubHkgY2FsbGVkIG9uY2UgdGhlIGZpcnN0IHRpbWUgR2V0SW5zdGFuY2UoKSBpcyBjYWxsZWQNCisgKi8NCitEcml2ZXJTdGF0aW9uTENEOjpEcml2ZXJTdGF0aW9uTENEKCkNCisJOiBtX3RleHRCdWZmZXIgKE5VTEwpDQorCSwgbV90ZXh0QnVmZmVyU2VtYXBob3JlIChOVUxMKQ0KK3sNCisJbV90ZXh0QnVmZmVyID0gbmV3IGNoYXJbVVNFUl9EU19MQ0RfREFUQV9TSVpFXTsNCisJbWVtc2V0KG1fdGV4dEJ1ZmZlciwgJyAnLCBVU0VSX0RTX0xDRF9EQVRBX1NJWkUpOw0KKw0KKwkqKChVSU5UMTYgKiltX3RleHRCdWZmZXIpID0ga0Z1bGxEaXNwbGF5VGV4dENvbW1hbmQ7DQorDQorCW1fdGV4dEJ1ZmZlclNlbWFwaG9yZSA9IHNlbU1DcmVhdGUoU0VNX0RFTEVURV9TQUZFKTsNCisNCisJblVzYWdlUmVwb3J0aW5nOjpyZXBvcnQoblVzYWdlUmVwb3J0aW5nOjprUmVzb3VyY2VUeXBlX0RyaXZlclN0YXRpb25MQ0QsIDApOw0KKw0KKwlBZGRUb1NpbmdsZXRvbkxpc3QoKTsNCit9DQorDQorRHJpdmVyU3RhdGlvbkxDRDo6fkRyaXZlclN0YXRpb25MQ0QoKQ0KK3sNCisJc2VtRGVsZXRlKG1fdGV4dEJ1ZmZlclNlbWFwaG9yZSk7DQorCWRlbGV0ZSBbXSBtX3RleHRCdWZmZXI7DQorCW1faW5zdGFuY2UgPSBOVUxMOw0KK30NCisNCisvKioNCisgKiBSZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBzaW5nbGV0b24gRHJpdmVyU3RhdGlvbkxDRC4NCisgKi8NCitEcml2ZXJTdGF0aW9uTENEKiBEcml2ZXJTdGF0aW9uTENEOjpHZXRJbnN0YW5jZSgpDQorew0KKwlpZiAobV9pbnN0YW5jZSA9PSBOVUxMKQ0KKwl7DQorCQltX2luc3RhbmNlID0gbmV3IERyaXZlclN0YXRpb25MQ0QoKTsNCisJfQ0KKwlyZXR1cm4gbV9pbnN0YW5jZTsNCit9DQorDQorLyoqDQorICogU2VuZCB0aGUgdGV4dCBkYXRhIHRvIHRoZSBEcml2ZXIgU3RhdGlvbi4NCisgKi8NCit2b2lkIERyaXZlclN0YXRpb25MQ0Q6OlVwZGF0ZUxDRCgpDQorew0KKwlTeW5jaHJvbml6ZWQgc3luYyhtX3RleHRCdWZmZXJTZW1hcGhvcmUpOw0KKwlzZXRVc2VyRHNMY2REYXRhKG1fdGV4dEJ1ZmZlciwgVVNFUl9EU19MQ0RfREFUQV9TSVpFLCBrU3luY1RpbWVvdXRfbXMpOw0KK30NCisNCisvKioNCisgKiBQcmludCBmb3JtYXR0ZWQgdGV4dCB0byB0aGUgRHJpdmVyIFN0YXRpb24gTENEIHRleHQgYnVmZXIuDQorICogDQorICogVXNlIFVwZGF0ZUxDRCgpIHBlcmlvZGljYWxseSB0byBhY3R1YWxseSBzZW5kIHRoZSB0ZXh0IHRvIHRoZSBEcml2ZXIgU3RhdGlvbi4NCisgKiANCisgKiBAcGFyYW0gbGluZSBUaGUgbGluZSBvbiB0aGUgTENEIHRvIHByaW50IHRvLg0KKyAqIEBwYXJhbSBzdGFydGluZ0NvbHVtbiBUaGUgY29sdW1uIHRvIHN0YXJ0IHByaW50aW5nIHRvLiAgVGhpcyBpcyBhIDEtYmFzZWQgbnVtYmVyLg0KKyAqIEBwYXJhbSB3cml0ZUZtdCBUaGUgcHJpbnRmIGZvcm1hdCBzdHJpbmcgZGVzY3JpYmluZyBob3cgdG8gcHJpbnQuDQorICovDQordm9pZCBEcml2ZXJTdGF0aW9uTENEOjpQcmludGYoTGluZSBsaW5lLCBJTlQzMiBzdGFydGluZ0NvbHVtbiwgY29uc3QgY2hhciAqd3JpdGVGbXQsIC4uLikNCit7DQorCXZhX2xpc3QgYXJnczsNCisJdmFfc3RhcnQgKGFyZ3MsIHdyaXRlRm10KTsNCisJVlByaW50ZihsaW5lLCBzdGFydGluZ0NvbHVtbiwgd3JpdGVGbXQsIGFyZ3MpOw0KKwl2YV9lbmQgKGFyZ3MpOw0KK30NCisNCit2b2lkIERyaXZlclN0YXRpb25MQ0Q6OlZQcmludGYoTGluZSBsaW5lLCBJTlQzMiBzdGFydGluZ0NvbHVtbiwgY29uc3QgY2hhciAqd3JpdGVGbXQsIHZhX2xpc3QgYXJncykNCit7DQorCVVJTlQzMiBzdGFydCA9IHN0YXJ0aW5nQ29sdW1uIC0gMTsNCisJSU5UMzIgbWF4TGVuZ3RoID0ga0xpbmVMZW5ndGggLSBzdGFydDsNCisJY2hhciBsaW5lQnVmZmVyW2tMaW5lTGVuZ3RoICsgMV07DQorDQorCWlmIChzdGFydGluZ0NvbHVtbiA8IDEgfHwgc3RhcnRpbmdDb2x1bW4gPiBrTGluZUxlbmd0aCkNCisJew0KKwkJd3BpX3NldFdQSUVycm9yV2l0aENvbnRleHQoUGFyYW1ldGVyT3V0T2ZSYW5nZSwgInN0YXJ0aW5nQ29sdW1uIik7DQorCQlyZXR1cm47DQorCX0NCisNCisJaWYgKGxpbmUgPCBrTWFpbl9MaW5lNiB8fCBsaW5lID4ga1VzZXJfTGluZTYpDQorCXsNCisJCXdwaV9zZXRXUElFcnJvcldpdGhDb250ZXh0KFBhcmFtZXRlck91dE9mUmFuZ2UsICJsaW5lIik7DQorCQlyZXR1cm47DQorCX0NCisNCisJew0KKwkJU3luY2hyb25pemVkIHN5bmMobV90ZXh0QnVmZmVyU2VtYXBob3JlKTsNCisJCS8vIHNucHJpbnRmIGFwcGVuZHMgTlVMTCB0byBpdHMgb3V0cHV0LiAgVGhlcmVmb3JlIHdlIGNhbid0IHdyaXRlIGRpcmVjdGx5IHRvIHRoZSBidWZmZXIuDQorCQlJTlQzMiBsZW5ndGggPSB2c25wcmludGYobGluZUJ1ZmZlciwga0xpbmVMZW5ndGggKyAxLCB3cml0ZUZtdCwgYXJncyk7DQorCQlpZiAobGVuZ3RoIDwgMCkgbGVuZ3RoID0ga0xpbmVMZW5ndGg7DQorDQorCQltZW1jcHkobV90ZXh0QnVmZmVyICsgc3RhcnQgKyBsaW5lICoga0xpbmVMZW5ndGggKyBzaXplb2YoVUlOVDE2KSwgbGluZUJ1ZmZlciwgc3RkOjptaW4obWF4TGVuZ3RoLGxlbmd0aCkpOw0KKwl9DQorfQ0KKw0KKy8qKg0KKyAqIFByaW50IGZvcm1hdHRlZCB0ZXh0IHRvIHRoZSBEcml2ZXIgU3RhdGlvbiBMQ0QgdGV4dCBidWZlci4gVGhpcyBmdW5jdGlvbiANCisgKiBwYWRzIHRoZSBsaW5lIHdpdGggZW1wdHkgc3BhY2VzLiANCisgKiANCisgKiBVc2UgVXBkYXRlTENEKCkgcGVyaW9kaWNhbGx5IHRvIGFjdHVhbGx5IHNlbmQgdGhlIHRleHQgdG8gdGhlIERyaXZlciBTdGF0aW9uLg0KKyAqIA0KKyAqIEBwYXJhbSBsaW5lIFRoZSBsaW5lIG9uIHRoZSBMQ0QgdG8gcHJpbnQgdG8uDQorICogQHBhcmFtIHdyaXRlRm10IFRoZSBwcmludGYgZm9ybWF0IHN0cmluZyBkZXNjcmliaW5nIGhvdyB0byBwcmludC4NCisgKi8NCit2b2lkIERyaXZlclN0YXRpb25MQ0Q6OlByaW50ZkxpbmUoTGluZSBsaW5lLCBjb25zdCBjaGFyICp3cml0ZUZtdCwgLi4uKQ0KK3sNCisJdmFfbGlzdCBhcmdzOw0KKwl2YV9zdGFydCAoYXJncywgd3JpdGVGbXQpOw0KKwlWUHJpbnRmTGluZShsaW5lLCB3cml0ZUZtdCwgYXJncyk7DQorCXZhX2VuZCAoYXJncyk7DQorfQ0KKw0KK3ZvaWQgRHJpdmVyU3RhdGlvbkxDRDo6VlByaW50ZkxpbmUoTGluZSBsaW5lLCBjb25zdCBjaGFyICp3cml0ZUZtdCwgdmFfbGlzdCBhcmdzKQ0KK3sNCisJY2hhciBsaW5lQnVmZmVyW2tMaW5lTGVuZ3RoICsgMV07DQorDQorCWlmIChsaW5lIDwga01haW5fTGluZTYgfHwgbGluZSA+IGtVc2VyX0xpbmU2KQ0KKwl7DQorCQl3cGlfc2V0V1BJRXJyb3JXaXRoQ29udGV4dChQYXJhbWV0ZXJPdXRPZlJhbmdlLCAibGluZSIpOw0KKwkJcmV0dXJuOw0KKwl9DQorDQorCXsNCisJCVN5bmNocm9uaXplZCBzeW5jKG1fdGV4dEJ1ZmZlclNlbWFwaG9yZSk7DQorCQkvLyBzbnByaW50ZiBhcHBlbmRzIE5VTEwgdG8gaXRzIG91dHB1dC4gIFRoZXJlZm9yZSB3ZSBjYW4ndCB3cml0ZSBkaXJlY3RseSB0byB0aGUgYnVmZmVyLg0KKwkJSU5UMzIgbGVuZ3RoID0gc3RkOjptaW4odnNucHJpbnRmKGxpbmVCdWZmZXIsIGtMaW5lTGVuZ3RoICsgMSwgd3JpdGVGbXQsIGFyZ3MpLCBrTGluZUxlbmd0aCk7DQorCQlpZiAobGVuZ3RoIDwgMCkgbGVuZ3RoID0ga0xpbmVMZW5ndGg7DQorDQorCQkvLyBGaWxsIHRoZSByZXN0IG9mIHRoZSBidWZmZXINCisJCWlmIChsZW5ndGggPCBrTGluZUxlbmd0aCkNCisJCXsNCisJCQltZW1zZXQobGluZUJ1ZmZlciArIGxlbmd0aCwgJyAnLCBrTGluZUxlbmd0aCAtIGxlbmd0aCk7DQorCQl9DQorCQkNCisJCW1lbWNweShtX3RleHRCdWZmZXIgKyBsaW5lICoga0xpbmVMZW5ndGggKyBzaXplb2YoVUlOVDE2KSwgbGluZUJ1ZmZlciwga0xpbmVMZW5ndGgpOw0KKwl9DQorfQ0KKw0KKy8qKg0KKyAqICBDbGVhciBhbGwgbGluZXMgb24gdGhlIExDRC4NCisgKi8NCit2b2lkIERyaXZlclN0YXRpb25MQ0Q6OkNsZWFyKCkNCit7DQorCVN5bmNocm9uaXplZCBzeW5jKG1fdGV4dEJ1ZmZlclNlbWFwaG9yZSk7DQorCW1lbXNldChtX3RleHRCdWZmZXIgKyBzaXplb2YoVUlOVDE2KSwgJyAnLCBrTGluZUxlbmd0aCprTnVtTGluZXMpOw0KK30NCisNCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9Ecml2ZXJTdGF0aW9uTENELmggYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9Ecml2ZXJTdGF0aW9uTENELmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDdmOWVlOQotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0RyaXZlclN0YXRpb25MQ0QuaApAQCAtMCwwICsxLDUyIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy8qIENvcHlyaWdodCAoYykgRklSU1QgMjAwOC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4JCQkJCQkJICAqLw0KKy8qIE9wZW4gU291cmNlIFNvZnR3YXJlIC0gbWF5IGJlIG1vZGlmaWVkIGFuZCBzaGFyZWQgYnkgRlJDIHRlYW1zLiBUaGUgY29kZSAgICovDQorLyogbXVzdCBiZSBhY2NvbXBhbmllZCBieSB0aGUgRklSU1QgQlNEIGxpY2Vuc2UgZmlsZSBpbiAkKFdJTkRfQkFTRSkvV1BJTGliLiAgKi8NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKyNpZm5kZWYgX19EUklWRVJfU1RBVElPTl9MQ0RfSF9fDQorI2RlZmluZSBfX0RSSVZFUl9TVEFUSU9OX0xDRF9IX18NCisNCisjaW5jbHVkZSAiU2Vuc29yQmFzZS5oIg0KKw0KKy8qKg0KKyAqIFByb3ZpZGUgYWNjZXNzIHRvICJMQ0QiIG9uIHRoZSBEcml2ZXIgU3RhdGlvbi4NCisgKiBUaGlzIGlzIHRoZSBNZXNzYWdlcyBib3ggb24gdGhlIERTIE9wZXJhdGlvbiB0YWIuDQorICogDQorICogQnVmZmVyIHRoZSBwcmludGVkIGRhdGEgbG9jYWxseSBhbmQgdGhlbiBzZW5kIGl0DQorICogd2hlbiBVcGRhdGVMQ0QgaXMgY2FsbGVkLg0KKyAqLw0KK2NsYXNzIERyaXZlclN0YXRpb25MQ0QgOiBwdWJsaWMgU2Vuc29yQmFzZQ0KK3sNCitwdWJsaWM6DQorCXN0YXRpYyBjb25zdCBVSU5UMzIga1N5bmNUaW1lb3V0X21zID0gMjA7DQorCXN0YXRpYyBjb25zdCBVSU5UMTYga0Z1bGxEaXNwbGF5VGV4dENvbW1hbmQgPSAweDlGRkY7DQorCXN0YXRpYyBjb25zdCBJTlQzMiBrTGluZUxlbmd0aCA9IDIxOw0KKwlzdGF0aWMgY29uc3QgSU5UMzIga051bUxpbmVzID0gNjsNCisJZW51bSBMaW5lIHtrTWFpbl9MaW5lNj0wLCBrVXNlcl9MaW5lMT0wLCBrVXNlcl9MaW5lMj0xLCBrVXNlcl9MaW5lMz0yLCBrVXNlcl9MaW5lND0zLCBrVXNlcl9MaW5lNT00LCBrVXNlcl9MaW5lNj01fTsNCisNCisJdmlydHVhbCB+RHJpdmVyU3RhdGlvbkxDRCgpOw0KKwlzdGF0aWMgRHJpdmVyU3RhdGlvbkxDRCAqR2V0SW5zdGFuY2UoKTsNCisNCisJdm9pZCBVcGRhdGVMQ0QoKTsNCisJdm9pZCBQcmludGYoTGluZSBsaW5lLCBJTlQzMiBzdGFydGluZ0NvbHVtbiwgY29uc3QgY2hhciAqd3JpdGVGbXQsIC4uLik7DQorCXZvaWQgVlByaW50ZihMaW5lIGxpbmUsIElOVDMyIHN0YXJ0aW5nQ29sdW1uLCBjb25zdCBjaGFyICp3cml0ZUZtdCwgdmFfbGlzdCBhcmdzKTsNCisJdm9pZCBQcmludGZMaW5lKExpbmUgbGluZSwgY29uc3QgY2hhciAqd3JpdGVGbXQsIC4uLik7DQorCXZvaWQgVlByaW50ZkxpbmUoTGluZSBsaW5lLCBjb25zdCBjaGFyICp3cml0ZUZtdCwgdmFfbGlzdCBhcmdzKTsNCisgDQorCXZvaWQgQ2xlYXIoKTsNCisNCitwcm90ZWN0ZWQ6DQorCURyaXZlclN0YXRpb25MQ0QoKTsNCisNCitwcml2YXRlOg0KKwlzdGF0aWMgdm9pZCBJbml0VGFzayhEcml2ZXJTdGF0aW9uTENEICpkcyk7DQorCXN0YXRpYyBEcml2ZXJTdGF0aW9uTENEICptX2luc3RhbmNlOw0KKwlESVNBTExPV19DT1BZX0FORF9BU1NJR04oRHJpdmVyU3RhdGlvbkxDRCk7DQorDQorCWNoYXIgKm1fdGV4dEJ1ZmZlcjsNCisJU0VNX0lEIG1fdGV4dEJ1ZmZlclNlbWFwaG9yZTsNCit9Ow0KKw0KKyNlbmRpZg0KKw0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0VuY29kZXIuY3BwIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvRW5jb2Rlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQ2ZGY0YgotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0VuY29kZXIuY3BwCkBAIC0wLDAgKzEsNTQ4IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy8qIENvcHlyaWdodCAoYykgRklSU1QgMjAwOC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4JCQkJCQkJICAqLw0KKy8qIE9wZW4gU291cmNlIFNvZnR3YXJlIC0gbWF5IGJlIG1vZGlmaWVkIGFuZCBzaGFyZWQgYnkgRlJDIHRlYW1zLiBUaGUgY29kZSAgICovDQorLyogbXVzdCBiZSBhY2NvbXBhbmllZCBieSB0aGUgRklSU1QgQlNEIGxpY2Vuc2UgZmlsZSBpbiAkKFdJTkRfQkFTRSkvV1BJTGliLiAgKi8NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKyNpbmNsdWRlICJFbmNvZGVyLmgiDQorI2luY2x1ZGUgIkRpZ2l0YWxJbnB1dC5oIg0KKyNpbmNsdWRlICJOZXR3b3JrQ29tbXVuaWNhdGlvbi9Vc2FnZVJlcG9ydGluZy5oIg0KKyNpbmNsdWRlICJSZXNvdXJjZS5oIg0KKyNpbmNsdWRlICJXUElFcnJvcnMuaCINCisjaW5jbHVkZSAiTGl2ZVdpbmRvdy9MaXZlV2luZG93LmgiDQorDQorc3RhdGljIFJlc291cmNlICpxdWFkRW5jb2RlcnMgPSBOVUxMOw0KKw0KKy8qKg0KKyAqIENvbW1vbiBpbml0aWFsaXphdGlvbiBjb2RlIGZvciBFbmNvZGVycy4NCisgKiBUaGlzIGNvZGUgYWxsb2NhdGVzIHJlc291cmNlcyBmb3IgRW5jb2RlcnMgYW5kIGlzIGNvbW1vbiB0byBhbGwgY29uc3RydWN0b3JzLg0KKyAqIEBwYXJhbSByZXZlcnNlRGlyZWN0aW9uIElmIHRydWUsIGNvdW50cyBkb3duIGluc3RlYWQgb2YgdXAgKHRoaXMgaXMgYWxsIHJlbGF0aXZlKQ0KKyAqIEBwYXJhbSBlbmNvZGluZ1R5cGUgZWl0aGVyIGsxWCwgazJYLCBvciBrNFggdG8gaW5kaWNhdGUgMVgsIDJYIG9yIDRYIGRlY29kaW5nLiBJZiA0WCBpcw0KKyAqIHNlbGVjdGVkLCB0aGVuIGFuIGVuY29kZXIgRlBHQSBvYmplY3QgaXMgdXNlZCBhbmQgdGhlIHJldHVybmVkIGNvdW50cyB3aWxsIGJlIDR4IHRoZSBlbmNvZGVyDQorICogc3BlYydkIHZhbHVlIHNpbmNlIGFsbCByaXNpbmcgYW5kIGZhbGxpbmcgZWRnZXMgYXJlIGNvdW50ZWQuIElmIDFYIG9yIDJYIGFyZSBzZWxlY3RlZCB0aGVuDQorICogYSBjb3VudGVyIG9iamVjdCB3aWxsIGJlIHVzZWQgYW5kIHRoZSByZXR1cm5lZCB2YWx1ZSB3aWxsIGVpdGhlciBleGFjdGx5IG1hdGNoIHRoZSBzcGVjJ2QgY291bnQNCisgKiBvciBiZSBkb3VibGUgKDJ4KSB0aGUgc3BlYydkIGNvdW50Lg0KKyAqLw0KK3ZvaWQgRW5jb2Rlcjo6SW5pdEVuY29kZXIoYm9vbCByZXZlcnNlRGlyZWN0aW9uLCBFbmNvZGluZ1R5cGUgZW5jb2RpbmdUeXBlKQ0KK3sNCisJbV9lbmNvZGluZ1R5cGUgPSBlbmNvZGluZ1R5cGU7DQorCXRSaW9TdGF0dXNDb2RlIGxvY2FsU3RhdHVzID0gTmlGcGdhX1N0YXR1c19TdWNjZXNzOw0KKwlzd2l0Y2ggKGVuY29kaW5nVHlwZSkNCisJew0KKwljYXNlIGs0WDoNCisJCVJlc291cmNlOjpDcmVhdGVSZXNvdXJjZU9iamVjdCgmcXVhZEVuY29kZXJzLCB0RW5jb2Rlcjo6a051bVN5c3RlbXMpOw0KKwkJVUlOVDMyIGluZGV4ID0gcXVhZEVuY29kZXJzLT5BbGxvY2F0ZSgiNFggRW5jb2RlciIpOw0KKwkJaWYgKGluZGV4ID09IH4wdWwpDQorCQl7DQorCQkJQ2xvbmVFcnJvcihxdWFkRW5jb2RlcnMpOw0KKwkJCXJldHVybjsNCisJCX0NCisJCWlmIChtX2FTb3VyY2UtPlN0YXR1c0lzRmF0YWwoKSkNCisJCXsNCisJCQlDbG9uZUVycm9yKG1fYVNvdXJjZSk7DQorCQkJcmV0dXJuOw0KKwkJfQ0KKwkJaWYgKG1fYlNvdXJjZS0+U3RhdHVzSXNGYXRhbCgpKQ0KKwkJew0KKwkJCUNsb25lRXJyb3IobV9iU291cmNlKTsNCisJCQlyZXR1cm47DQorCQl9DQorCQltX2luZGV4ID0gaW5kZXg7DQorCQltX2VuY29kZXIgPSB0RW5jb2Rlcjo6Y3JlYXRlKG1faW5kZXgsICZsb2NhbFN0YXR1cyk7DQorCQltX2VuY29kZXItPndyaXRlQ29uZmlnX0FTb3VyY2VfTW9kdWxlKG1fYVNvdXJjZS0+R2V0TW9kdWxlRm9yUm91dGluZygpLCAmbG9jYWxTdGF0dXMpOw0KKwkJbV9lbmNvZGVyLT53cml0ZUNvbmZpZ19BU291cmNlX0NoYW5uZWwobV9hU291cmNlLT5HZXRDaGFubmVsRm9yUm91dGluZygpLCAmbG9jYWxTdGF0dXMpOw0KKwkJbV9lbmNvZGVyLT53cml0ZUNvbmZpZ19BU291cmNlX0FuYWxvZ1RyaWdnZXIobV9hU291cmNlLT5HZXRBbmFsb2dUcmlnZ2VyRm9yUm91dGluZygpLCAmbG9jYWxTdGF0dXMpOw0KKwkJbV9lbmNvZGVyLT53cml0ZUNvbmZpZ19CU291cmNlX01vZHVsZShtX2JTb3VyY2UtPkdldE1vZHVsZUZvclJvdXRpbmcoKSwgJmxvY2FsU3RhdHVzKTsNCisJCW1fZW5jb2Rlci0+d3JpdGVDb25maWdfQlNvdXJjZV9DaGFubmVsKG1fYlNvdXJjZS0+R2V0Q2hhbm5lbEZvclJvdXRpbmcoKSwgJmxvY2FsU3RhdHVzKTsNCisJCW1fZW5jb2Rlci0+d3JpdGVDb25maWdfQlNvdXJjZV9BbmFsb2dUcmlnZ2VyKG1fYlNvdXJjZS0+R2V0QW5hbG9nVHJpZ2dlckZvclJvdXRpbmcoKSwgJmxvY2FsU3RhdHVzKTsNCisJCW1fZW5jb2Rlci0+c3Ryb2JlUmVzZXQoJmxvY2FsU3RhdHVzKTsNCisJCW1fZW5jb2Rlci0+d3JpdGVDb25maWdfUmV2ZXJzZShyZXZlcnNlRGlyZWN0aW9uLCAmbG9jYWxTdGF0dXMpOw0KKwkJbV9lbmNvZGVyLT53cml0ZVRpbWVyQ29uZmlnX0F2ZXJhZ2VTaXplKDQsICZsb2NhbFN0YXR1cyk7DQorCQltX2NvdW50ZXIgPSBOVUxMOw0KKwkJYnJlYWs7DQorCWNhc2UgazFYOg0KKwljYXNlIGsyWDoNCisJCW1fY291bnRlciA9IG5ldyBDb3VudGVyKG1fZW5jb2RpbmdUeXBlLCBtX2FTb3VyY2UsIG1fYlNvdXJjZSwgcmV2ZXJzZURpcmVjdGlvbik7DQorCQltX2luZGV4ID0gbV9jb3VudGVyLT5HZXRJbmRleCgpOw0KKwkJYnJlYWs7DQorCX0NCisJbV9kaXN0YW5jZVBlclB1bHNlID0gMS4wOw0KKwltX3BpZFNvdXJjZSA9IGtEaXN0YW5jZTsNCisJd3BpX3NldEVycm9yKGxvY2FsU3RhdHVzKTsNCisNCisJblVzYWdlUmVwb3J0aW5nOjpyZXBvcnQoblVzYWdlUmVwb3J0aW5nOjprUmVzb3VyY2VUeXBlX0VuY29kZXIsIG1faW5kZXgsIGVuY29kaW5nVHlwZSk7DQorCUxpdmVXaW5kb3c6OkdldEluc3RhbmNlKCktPkFkZFNlbnNvcigiRW5jb2RlciIsIG1fYVNvdXJjZS0+R2V0TW9kdWxlRm9yUm91dGluZygpLCBtX2FTb3VyY2UtPkdldENoYW5uZWxGb3JSb3V0aW5nKCksIHRoaXMpOw0KK30NCisNCisvKioNCisgKiBFbmNvZGVyIGNvbnN0cnVjdG9yLg0KKyAqIENvbnN0cnVjdCBhIEVuY29kZXIgZ2l2ZW4gYSBhbmQgYiBtb2R1bGVzIGFuZCBjaGFubmVscyBmdWxseSBzcGVjaWZpZWQuDQorICogQHBhcmFtIGFNb2R1bGVOdW1iZXIgVGhlIGEgY2hhbm5lbCBkaWdpdGFsIGlucHV0IG1vZHVsZS4NCisgKiBAcGFyYW0gYUNoYW5uZWwgVGhlIGEgY2hhbm5lbCBkaWdpdGFsIGlucHV0IGNoYW5uZWwuDQorICogQHBhcmFtIGJNb2R1bGVOdW1iZXIgVGhlIGIgY2hhbm5lbCBkaWdpdGFsIGlucHV0IG1vZHVsZS4NCisgKiBAcGFyYW0gYkNoYW5uZWwgVGhlIGIgY2hhbm5lbCBkaWdpdGFsIGlucHV0IGNoYW5uZWwuDQorICogQHBhcmFtIHJldmVyc2VEaXJlY3Rpb24gcmVwcmVzZW50cyB0aGUgb3JpZW50YXRpb24gb2YgdGhlIGVuY29kZXIgYW5kIGludmVydHMgdGhlIG91dHB1dCB2YWx1ZXMNCisgKiBpZiBuZWNlc3Nhcnkgc28gZm9yd2FyZCByZXByZXNlbnRzIHBvc2l0aXZlIHZhbHVlcy4NCisgKiBAcGFyYW0gZW5jb2RpbmdUeXBlIGVpdGhlciBrMVgsIGsyWCwgb3IgazRYIHRvIGluZGljYXRlIDFYLCAyWCBvciA0WCBkZWNvZGluZy4gSWYgNFggaXMNCisgKiBzZWxlY3RlZCwgdGhlbiBhbiBlbmNvZGVyIEZQR0Egb2JqZWN0IGlzIHVzZWQgYW5kIHRoZSByZXR1cm5lZCBjb3VudHMgd2lsbCBiZSA0eCB0aGUgZW5jb2Rlcg0KKyAqIHNwZWMnZCB2YWx1ZSBzaW5jZSBhbGwgcmlzaW5nIGFuZCBmYWxsaW5nIGVkZ2VzIGFyZSBjb3VudGVkLiBJZiAxWCBvciAyWCBhcmUgc2VsZWN0ZWQgdGhlbg0KKyAqIGEgY291bnRlciBvYmplY3Qgd2lsbCBiZSB1c2VkIGFuZCB0aGUgcmV0dXJuZWQgdmFsdWUgd2lsbCBlaXRoZXIgZXhhY3RseSBtYXRjaCB0aGUgc3BlYydkIGNvdW50DQorICogb3IgYmUgZG91YmxlICgyeCkgdGhlIHNwZWMnZCBjb3VudC4NCisgKi8NCitFbmNvZGVyOjpFbmNvZGVyKFVJTlQ4IGFNb2R1bGVOdW1iZXIsIFVJTlQzMiBhQ2hhbm5lbCwNCisJCQkJCQlVSU5UOCBiTW9kdWxlTnVtYmVyLCBVSU5UMzIgYkNoYW5uZWwsDQorCQkJCQkJYm9vbCByZXZlcnNlRGlyZWN0aW9uLCBFbmNvZGluZ1R5cGUgZW5jb2RpbmdUeXBlKSA6DQorCW1fZW5jb2RlcihOVUxMKSwNCisJbV9jb3VudGVyKE5VTEwpDQorew0KKwltX2FTb3VyY2UgPSBuZXcgRGlnaXRhbElucHV0KGFNb2R1bGVOdW1iZXIsIGFDaGFubmVsKTsNCisJbV9iU291cmNlID0gbmV3IERpZ2l0YWxJbnB1dChiTW9kdWxlTnVtYmVyLCBiQ2hhbm5lbCk7DQorCUluaXRFbmNvZGVyKHJldmVyc2VEaXJlY3Rpb24sIGVuY29kaW5nVHlwZSk7DQorCW1fYWxsb2NhdGVkQVNvdXJjZSA9IHRydWU7DQorCW1fYWxsb2NhdGVkQlNvdXJjZSA9IHRydWU7DQorfQ0KKw0KKy8qKg0KKyAqIEVuY29kZXIgY29uc3RydWN0b3IuDQorICogQ29uc3RydWN0IGEgRW5jb2RlciBnaXZlbiBhIGFuZCBiIGNoYW5uZWxzIGFzc3VtaW5nIHRoZSBkZWZhdWx0IG1vZHVsZS4NCisgKiBAcGFyYW0gYUNoYW5uZWwgVGhlIGEgY2hhbm5lbCBkaWdpdGFsIGlucHV0IGNoYW5uZWwuDQorICogQHBhcmFtIGJDaGFubmVsIFRoZSBiIGNoYW5uZWwgZGlnaXRhbCBpbnB1dCBjaGFubmVsLg0KKyAqIEBwYXJhbSByZXZlcnNlRGlyZWN0aW9uIHJlcHJlc2VudHMgdGhlIG9yaWVudGF0aW9uIG9mIHRoZSBlbmNvZGVyIGFuZCBpbnZlcnRzIHRoZSBvdXRwdXQgdmFsdWVzDQorICogaWYgbmVjZXNzYXJ5IHNvIGZvcndhcmQgcmVwcmVzZW50cyBwb3NpdGl2ZSB2YWx1ZXMuDQorICogQHBhcmFtIGVuY29kaW5nVHlwZSBlaXRoZXIgazFYLCBrMlgsIG9yIGs0WCB0byBpbmRpY2F0ZSAxWCwgMlggb3IgNFggZGVjb2RpbmcuIElmIDRYIGlzDQorICogc2VsZWN0ZWQsIHRoZW4gYW4gZW5jb2RlciBGUEdBIG9iamVjdCBpcyB1c2VkIGFuZCB0aGUgcmV0dXJuZWQgY291bnRzIHdpbGwgYmUgNHggdGhlIGVuY29kZXINCisgKiBzcGVjJ2QgdmFsdWUgc2luY2UgYWxsIHJpc2luZyBhbmQgZmFsbGluZyBlZGdlcyBhcmUgY291bnRlZC4gSWYgMVggb3IgMlggYXJlIHNlbGVjdGVkIHRoZW4NCisgKiBhIGNvdW50ZXIgb2JqZWN0IHdpbGwgYmUgdXNlZCBhbmQgdGhlIHJldHVybmVkIHZhbHVlIHdpbGwgZWl0aGVyIGV4YWN0bHkgbWF0Y2ggdGhlIHNwZWMnZCBjb3VudA0KKyAqIG9yIGJlIGRvdWJsZSAoMngpIHRoZSBzcGVjJ2QgY291bnQuDQorICovDQorRW5jb2Rlcjo6RW5jb2RlcihVSU5UMzIgYUNoYW5uZWwsIFVJTlQzMiBiQ2hhbm5lbCwgYm9vbCByZXZlcnNlRGlyZWN0aW9uLCBFbmNvZGluZ1R5cGUgZW5jb2RpbmdUeXBlKSA6DQorCW1fZW5jb2RlcihOVUxMKSwNCisJbV9jb3VudGVyKE5VTEwpDQorew0KKwltX2FTb3VyY2UgPSBuZXcgRGlnaXRhbElucHV0KGFDaGFubmVsKTsNCisJbV9iU291cmNlID0gbmV3IERpZ2l0YWxJbnB1dChiQ2hhbm5lbCk7DQorCUluaXRFbmNvZGVyKHJldmVyc2VEaXJlY3Rpb24sIGVuY29kaW5nVHlwZSk7DQorCW1fYWxsb2NhdGVkQVNvdXJjZSA9IHRydWU7DQorCW1fYWxsb2NhdGVkQlNvdXJjZSA9IHRydWU7DQorfQ0KKw0KKy8qKg0KKyAqIEVuY29kZXIgY29uc3RydWN0b3IuDQorICogQ29uc3RydWN0IGEgRW5jb2RlciBnaXZlbiBhIGFuZCBiIGNoYW5uZWxzIGFzIGRpZ2l0YWwgaW5wdXRzLiBUaGlzIGlzIHVzZWQgaW4gdGhlIGNhc2UNCisgKiB3aGVyZSB0aGUgZGlnaXRhbCBpbnB1dHMgYXJlIHNoYXJlZC4gVGhlIEVuY29kZXIgY2xhc3Mgd2lsbCBub3QgYWxsb2NhdGUgdGhlIGRpZ2l0YWwgaW5wdXRzDQorICogYW5kIGFzc3VtZSB0aGF0IHRoZXkgYWxyZWFkeSBhcmUgY291bnRlZC4NCisgKiBAcGFyYW0gYVNvdXJjZSBUaGUgc291cmNlIHRoYXQgc2hvdWxkIGJlIHVzZWQgZm9yIHRoZSBhIGNoYW5uZWwuDQorICogQHBhcmFtIGJTb3VyY2UgdGhlIHNvdXJjZSB0aGF0IHNob3VsZCBiZSB1c2VkIGZvciB0aGUgYiBjaGFubmVsLg0KKyAqIEBwYXJhbSByZXZlcnNlRGlyZWN0aW9uIHJlcHJlc2VudHMgdGhlIG9yaWVudGF0aW9uIG9mIHRoZSBlbmNvZGVyIGFuZCBpbnZlcnRzIHRoZSBvdXRwdXQgdmFsdWVzDQorICogaWYgbmVjZXNzYXJ5IHNvIGZvcndhcmQgcmVwcmVzZW50cyBwb3NpdGl2ZSB2YWx1ZXMuDQorICogQHBhcmFtIGVuY29kaW5nVHlwZSBlaXRoZXIgazFYLCBrMlgsIG9yIGs0WCB0byBpbmRpY2F0ZSAxWCwgMlggb3IgNFggZGVjb2RpbmcuIElmIDRYIGlzDQorICogc2VsZWN0ZWQsIHRoZW4gYW4gZW5jb2RlciBGUEdBIG9iamVjdCBpcyB1c2VkIGFuZCB0aGUgcmV0dXJuZWQgY291bnRzIHdpbGwgYmUgNHggdGhlIGVuY29kZXINCisgKiBzcGVjJ2QgdmFsdWUgc2luY2UgYWxsIHJpc2luZyBhbmQgZmFsbGluZyBlZGdlcyBhcmUgY291bnRlZC4gSWYgMVggb3IgMlggYXJlIHNlbGVjdGVkIHRoZW4NCisgKiBhIGNvdW50ZXIgb2JqZWN0IHdpbGwgYmUgdXNlZCBhbmQgdGhlIHJldHVybmVkIHZhbHVlIHdpbGwgZWl0aGVyIGV4YWN0bHkgbWF0Y2ggdGhlIHNwZWMnZCBjb3VudA0KKyAqIG9yIGJlIGRvdWJsZSAoMngpIHRoZSBzcGVjJ2QgY291bnQuDQorICovDQorRW5jb2Rlcjo6RW5jb2RlcihEaWdpdGFsU291cmNlICphU291cmNlLCBEaWdpdGFsU291cmNlICpiU291cmNlLCBib29sIHJldmVyc2VEaXJlY3Rpb24sIEVuY29kaW5nVHlwZSBlbmNvZGluZ1R5cGUpIDoNCisJbV9lbmNvZGVyKE5VTEwpLA0KKwltX2NvdW50ZXIoTlVMTCkNCit7DQorCW1fYVNvdXJjZSA9IGFTb3VyY2U7DQorCW1fYlNvdXJjZSA9IGJTb3VyY2U7DQorCW1fYWxsb2NhdGVkQVNvdXJjZSA9IGZhbHNlOw0KKwltX2FsbG9jYXRlZEJTb3VyY2UgPSBmYWxzZTsNCisJaWYgKG1fYVNvdXJjZSA9PSBOVUxMIHx8IG1fYlNvdXJjZSA9PSBOVUxMKQ0KKwkJd3BpX3NldFdQSUVycm9yKE51bGxQYXJhbWV0ZXIpOw0KKwllbHNlDQorCQlJbml0RW5jb2RlcihyZXZlcnNlRGlyZWN0aW9uLCBlbmNvZGluZ1R5cGUpOw0KK30NCisNCisvKioNCisgKiBFbmNvZGVyIGNvbnN0cnVjdG9yLg0KKyAqIENvbnN0cnVjdCBhIEVuY29kZXIgZ2l2ZW4gYSBhbmQgYiBjaGFubmVscyBhcyBkaWdpdGFsIGlucHV0cy4gVGhpcyBpcyB1c2VkIGluIHRoZSBjYXNlDQorICogd2hlcmUgdGhlIGRpZ2l0YWwgaW5wdXRzIGFyZSBzaGFyZWQuIFRoZSBFbmNvZGVyIGNsYXNzIHdpbGwgbm90IGFsbG9jYXRlIHRoZSBkaWdpdGFsIGlucHV0cw0KKyAqIGFuZCBhc3N1bWUgdGhhdCB0aGV5IGFscmVhZHkgYXJlIGNvdW50ZWQuDQorICogQHBhcmFtIGFTb3VyY2UgVGhlIHNvdXJjZSB0aGF0IHNob3VsZCBiZSB1c2VkIGZvciB0aGUgYSBjaGFubmVsLg0KKyAqIEBwYXJhbSBiU291cmNlIHRoZSBzb3VyY2UgdGhhdCBzaG91bGQgYmUgdXNlZCBmb3IgdGhlIGIgY2hhbm5lbC4NCisgKiBAcGFyYW0gcmV2ZXJzZURpcmVjdGlvbiByZXByZXNlbnRzIHRoZSBvcmllbnRhdGlvbiBvZiB0aGUgZW5jb2RlciBhbmQgaW52ZXJ0cyB0aGUgb3V0cHV0IHZhbHVlcw0KKyAqIGlmIG5lY2Vzc2FyeSBzbyBmb3J3YXJkIHJlcHJlc2VudHMgcG9zaXRpdmUgdmFsdWVzLg0KKyAqIEBwYXJhbSBlbmNvZGluZ1R5cGUgZWl0aGVyIGsxWCwgazJYLCBvciBrNFggdG8gaW5kaWNhdGUgMVgsIDJYIG9yIDRYIGRlY29kaW5nLiBJZiA0WCBpcw0KKyAqIHNlbGVjdGVkLCB0aGVuIGFuIGVuY29kZXIgRlBHQSBvYmplY3QgaXMgdXNlZCBhbmQgdGhlIHJldHVybmVkIGNvdW50cyB3aWxsIGJlIDR4IHRoZSBlbmNvZGVyDQorICogc3BlYydkIHZhbHVlIHNpbmNlIGFsbCByaXNpbmcgYW5kIGZhbGxpbmcgZWRnZXMgYXJlIGNvdW50ZWQuIElmIDFYIG9yIDJYIGFyZSBzZWxlY3RlZCB0aGVuDQorICogYSBjb3VudGVyIG9iamVjdCB3aWxsIGJlIHVzZWQgYW5kIHRoZSByZXR1cm5lZCB2YWx1ZSB3aWxsIGVpdGhlciBleGFjdGx5IG1hdGNoIHRoZSBzcGVjJ2QgY291bnQNCisgKiBvciBiZSBkb3VibGUgKDJ4KSB0aGUgc3BlYydkIGNvdW50Lg0KKyAqLw0KK0VuY29kZXI6OkVuY29kZXIoRGlnaXRhbFNvdXJjZSAmYVNvdXJjZSwgRGlnaXRhbFNvdXJjZSAmYlNvdXJjZSwgYm9vbCByZXZlcnNlRGlyZWN0aW9uLCBFbmNvZGluZ1R5cGUgZW5jb2RpbmdUeXBlKSA6DQorCW1fZW5jb2RlcihOVUxMKSwNCisJbV9jb3VudGVyKE5VTEwpDQorew0KKwltX2FTb3VyY2UgPSAmYVNvdXJjZTsNCisJbV9iU291cmNlID0gJmJTb3VyY2U7DQorCW1fYWxsb2NhdGVkQVNvdXJjZSA9IGZhbHNlOw0KKwltX2FsbG9jYXRlZEJTb3VyY2UgPSBmYWxzZTsNCisJSW5pdEVuY29kZXIocmV2ZXJzZURpcmVjdGlvbiwgZW5jb2RpbmdUeXBlKTsNCit9DQorDQorLyoqDQorICogRnJlZSB0aGUgcmVzb3VyY2VzIGZvciBhbiBFbmNvZGVyLg0KKyAqIEZyZWVzIHRoZSBGUEdBIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggYW4gRW5jb2Rlci4NCisgKi8NCitFbmNvZGVyOjp+RW5jb2RlcigpDQorew0KKwlpZiAobV9hbGxvY2F0ZWRBU291cmNlKSBkZWxldGUgbV9hU291cmNlOw0KKwlpZiAobV9hbGxvY2F0ZWRCU291cmNlKSBkZWxldGUgbV9iU291cmNlOw0KKwlpZiAobV9jb3VudGVyKQ0KKwl7DQorCQlkZWxldGUgbV9jb3VudGVyOw0KKwl9DQorCWVsc2UNCisJew0KKwkJcXVhZEVuY29kZXJzLT5GcmVlKG1faW5kZXgpOw0KKwkJZGVsZXRlIG1fZW5jb2RlcjsNCisJfQ0KK30NCisNCisvKioNCisgKiBTdGFydCB0aGUgRW5jb2Rlci4NCisgKiBTdGFydHMgY291bnRpbmcgcHVsc2VzIG9uIHRoZSBFbmNvZGVyIGRldmljZS4NCisgKi8NCit2b2lkIEVuY29kZXI6OlN0YXJ0KCkNCit7DQorCWlmIChTdGF0dXNJc0ZhdGFsKCkpIHJldHVybjsNCisJaWYgKG1fY291bnRlcikNCisJCW1fY291bnRlci0+U3RhcnQoKTsNCisJZWxzZQ0KKwl7DQorCQl0UmlvU3RhdHVzQ29kZSBsb2NhbFN0YXR1cyA9IE5pRnBnYV9TdGF0dXNfU3VjY2VzczsNCisJCW1fZW5jb2Rlci0+d3JpdGVDb25maWdfRW5hYmxlKDEsICZsb2NhbFN0YXR1cyk7DQorCQl3cGlfc2V0RXJyb3IobG9jYWxTdGF0dXMpOw0KKwl9DQorfQ0KKw0KKy8qKg0KKyAqIFN0b3BzIGNvdW50aW5nIHB1bHNlcyBvbiB0aGUgRW5jb2RlciBkZXZpY2UuIFRoZSB2YWx1ZSBpcyBub3QgY2hhbmdlZC4NCisgKi8NCit2b2lkIEVuY29kZXI6OlN0b3AoKQ0KK3sNCisJaWYgKFN0YXR1c0lzRmF0YWwoKSkgcmV0dXJuOw0KKwlpZiAobV9jb3VudGVyKQ0KKwkJbV9jb3VudGVyLT5TdG9wKCk7DQorCWVsc2UNCisJew0KKwkJdFJpb1N0YXR1c0NvZGUgbG9jYWxTdGF0dXMgPSBOaUZwZ2FfU3RhdHVzX1N1Y2Nlc3M7DQorCQltX2VuY29kZXItPndyaXRlQ29uZmlnX0VuYWJsZSgwLCAmbG9jYWxTdGF0dXMpOw0KKwkJd3BpX3NldEVycm9yKGxvY2FsU3RhdHVzKTsNCisJfQ0KK30NCisNCisvKioNCisgKiBHZXRzIHRoZSByYXcgdmFsdWUgZnJvbSB0aGUgZW5jb2Rlci4NCisgKiBUaGUgcmF3IHZhbHVlIGlzIHRoZSBhY3R1YWwgY291bnQgdW5zY2FsZWQgYnkgdGhlIDF4LCAyeCwgb3IgNHggc2NhbGUNCisgKiBmYWN0b3IuDQorICogQHJldHVybiBDdXJyZW50IHJhdyBjb3VudCBmcm9tIHRoZSBlbmNvZGVyDQorICovDQorSU5UMzIgRW5jb2Rlcjo6R2V0UmF3KCkNCit7DQorCWlmIChTdGF0dXNJc0ZhdGFsKCkpIHJldHVybiAwOw0KKwlJTlQzMiB2YWx1ZTsNCisJaWYgKG1fY291bnRlcikNCisJCXZhbHVlID0gbV9jb3VudGVyLT5HZXQoKTsNCisJZWxzZQ0KKwl7DQorCQl0UmlvU3RhdHVzQ29kZSBsb2NhbFN0YXR1cyA9IE5pRnBnYV9TdGF0dXNfU3VjY2VzczsNCisJCXZhbHVlID0gbV9lbmNvZGVyLT5yZWFkT3V0cHV0X1ZhbHVlKCZsb2NhbFN0YXR1cyk7DQorCQl3cGlfc2V0RXJyb3IobG9jYWxTdGF0dXMpOw0KKwl9DQorCXJldHVybiB2YWx1ZTsNCit9DQorDQorLyoqDQorICogR2V0cyB0aGUgY3VycmVudCBjb3VudC4NCisgKiBSZXR1cm5zIHRoZSBjdXJyZW50IGNvdW50IG9uIHRoZSBFbmNvZGVyLg0KKyAqIFRoaXMgbWV0aG9kIGNvbXBlbnNhdGVzIGZvciB0aGUgZGVjb2RpbmcgdHlwZS4NCisgKiANCisgKiBAcmV0dXJuIEN1cnJlbnQgY291bnQgZnJvbSB0aGUgRW5jb2RlciBhZGp1c3RlZCBmb3IgdGhlIDF4LCAyeCwgb3IgNHggc2NhbGUgZmFjdG9yLg0KKyAqLw0KK0lOVDMyIEVuY29kZXI6OkdldCgpDQorew0KKwlpZiAoU3RhdHVzSXNGYXRhbCgpKSByZXR1cm4gMDsNCisJcmV0dXJuIChJTlQzMikgKEdldFJhdygpICogRGVjb2RpbmdTY2FsZUZhY3RvcigpKTsNCit9DQorDQorLyoqDQorICogUmVzZXQgdGhlIEVuY29kZXIgZGlzdGFuY2UgdG8gemVyby4NCisgKiBSZXNldHMgdGhlIGN1cnJlbnQgY291bnQgdG8gemVybyBvbiB0aGUgZW5jb2Rlci4NCisgKi8NCit2b2lkIEVuY29kZXI6OlJlc2V0KCkNCit7DQorCWlmIChTdGF0dXNJc0ZhdGFsKCkpIHJldHVybjsNCisJaWYgKG1fY291bnRlcikNCisJCW1fY291bnRlci0+UmVzZXQoKTsNCisJZWxzZQ0KKwl7DQorCQl0UmlvU3RhdHVzQ29kZSBsb2NhbFN0YXR1cyA9IE5pRnBnYV9TdGF0dXNfU3VjY2VzczsNCisJCW1fZW5jb2Rlci0+c3Ryb2JlUmVzZXQoJmxvY2FsU3RhdHVzKTsNCisJCXdwaV9zZXRFcnJvcihsb2NhbFN0YXR1cyk7DQorCX0NCit9DQorDQorLyoqDQorICogUmV0dXJucyB0aGUgcGVyaW9kIG9mIHRoZSBtb3N0IHJlY2VudCBwdWxzZS4NCisgKiBSZXR1cm5zIHRoZSBwZXJpb2Qgb2YgdGhlIG1vc3QgcmVjZW50IEVuY29kZXIgcHVsc2UgaW4gc2Vjb25kcy4NCisgKiBUaGlzIG1ldGhvZCBjb21wZW5zdGF0ZXMgZm9yIHRoZSBkZWNvZGluZyB0eXBlLg0KKyAqIA0KKyAqIEBkZXByZWNhdGVkIFVzZSBHZXRSYXRlKCkgaW4gZmF2b3Igb2YgdGhpcyBtZXRob2QuICBUaGlzIHJldHVybnMgdW5zY2FsZWQgcGVyaW9kcyBhbmQgR2V0UmF0ZSgpIHNjYWxlcyB1c2luZyB2YWx1ZSBmcm9tIFNldERpc3RhbmNlUGVyUHVsc2UoKS4NCisgKg0KKyAqIEByZXR1cm4gUGVyaW9kIGluIHNlY29uZHMgb2YgdGhlIG1vc3QgcmVjZW50IHB1bHNlLg0KKyAqLw0KK2RvdWJsZSBFbmNvZGVyOjpHZXRQZXJpb2QoKQ0KK3sNCisJaWYgKFN0YXR1c0lzRmF0YWwoKSkgcmV0dXJuIDAuMDsNCisJZG91YmxlIG1lYXN1cmVkUGVyaW9kOw0KKwlpZiAobV9jb3VudGVyKQ0KKwl7DQorCQltZWFzdXJlZFBlcmlvZCA9IG1fY291bnRlci0+R2V0UGVyaW9kKCk7DQorCX0NCisJZWxzZQ0KKwl7DQorCQl0UmlvU3RhdHVzQ29kZSBsb2NhbFN0YXR1cyA9IE5pRnBnYV9TdGF0dXNfU3VjY2VzczsNCisJCXRFbmNvZGVyOjp0VGltZXJPdXRwdXQgb3V0cHV0ID0gbV9lbmNvZGVyLT5yZWFkVGltZXJPdXRwdXQoJmxvY2FsU3RhdHVzKTsNCisJCWRvdWJsZSB2YWx1ZTsNCisJCWlmIChvdXRwdXQuU3RhbGxlZCkNCisJCXsNCisJCQkvLyBSZXR1cm4gaW5maW5pdHkNCisJCQlkb3VibGUgemVybyA9IDAuMDsNCisJCQl2YWx1ZSA9IDEuMCAvIHplcm87DQorCQl9DQorCQllbHNlDQorCQl7DQorCQkJLy8gb3V0cHV0LlBlcmlvZCBpcyBhIGZpeGVkIHBvaW50IG51bWJlciB0aGF0IGNvdW50cyBieSAyICgyNCBiaXRzLCAyNSBpbnRlZ2VyIGJpdHMpDQorCQkJdmFsdWUgPSAoZG91YmxlKShvdXRwdXQuUGVyaW9kIDw8IDEpIC8gKGRvdWJsZSlvdXRwdXQuQ291bnQ7DQorCQl9DQorCQl3cGlfc2V0RXJyb3IobG9jYWxTdGF0dXMpOw0KKwkJbWVhc3VyZWRQZXJpb2QgPSB2YWx1ZSAqIDEuMGUtNjsNCisJfQ0KKwlyZXR1cm4gbWVhc3VyZWRQZXJpb2QgLyBEZWNvZGluZ1NjYWxlRmFjdG9yKCk7DQorfQ0KKw0KKy8qKg0KKyAqIFNldHMgdGhlIG1heGltdW0gcGVyaW9kIGZvciBzdG9wcGVkIGRldGVjdGlvbi4NCisgKiBTZXRzIHRoZSB2YWx1ZSB0aGF0IHJlcHJlc2VudHMgdGhlIG1heGltdW0gcGVyaW9kIG9mIHRoZSBFbmNvZGVyIGJlZm9yZSBpdCB3aWxsIGFzc3VtZQ0KKyAqIHRoYXQgdGhlIGF0dGFjaGVkIGRldmljZSBpcyBzdG9wcGVkLiBUaGlzIHRpbWVvdXQgYWxsb3dzIHVzZXJzIHRvIGRldGVybWluZSBpZiB0aGUgd2hlZWxzIG9yDQorICogb3RoZXIgc2hhZnQgaGFzIHN0b3BwZWQgcm90YXRpbmcuDQorICogVGhpcyBtZXRob2QgY29tcGVuc2F0ZXMgZm9yIHRoZSBkZWNvZGluZyB0eXBlLg0KKyAqIA0KKyAqIEBkZXByZWNhdGVkIFVzZSBTZXRNaW5SYXRlKCkgaW4gZmF2b3Igb2YgdGhpcyBtZXRob2QuICBUaGlzIHRha2VzIHVuc2NhbGVkIHBlcmlvZHMgYW5kIFNldE1pblJhdGUoKSBzY2FsZXMgdXNpbmcgdmFsdWUgZnJvbSBTZXREaXN0YW5jZVBlclB1bHNlKCkuDQorICogDQorICogQHBhcmFtIG1heFBlcmlvZCBUaGUgbWF4aW11bSB0aW1lIGJldHdlZW4gcmlzaW5nIGFuZCBmYWxsaW5nIGVkZ2VzIGJlZm9yZSB0aGUgRlBHQSB3aWxsDQorICogcmVwb3J0IHRoZSBkZXZpY2Ugc3RvcHBlZC4gVGhpcyBpcyBleHByZXNzZWQgaW4gc2Vjb25kcy4NCisgKi8NCit2b2lkIEVuY29kZXI6OlNldE1heFBlcmlvZChkb3VibGUgbWF4UGVyaW9kKQ0KK3sNCisJaWYgKFN0YXR1c0lzRmF0YWwoKSkgcmV0dXJuOw0KKwlpZiAobV9jb3VudGVyKQ0KKwl7DQorCQltX2NvdW50ZXItPlNldE1heFBlcmlvZChtYXhQZXJpb2QgKiBEZWNvZGluZ1NjYWxlRmFjdG9yKCkpOw0KKwl9DQorCWVsc2UNCisJew0KKwkJdFJpb1N0YXR1c0NvZGUgbG9jYWxTdGF0dXMgPSBOaUZwZ2FfU3RhdHVzX1N1Y2Nlc3M7DQorCQltX2VuY29kZXItPndyaXRlVGltZXJDb25maWdfU3RhbGxQZXJpb2QoKFVJTlQzMikobWF4UGVyaW9kICogMS4wZTYgKiBEZWNvZGluZ1NjYWxlRmFjdG9yKCkpLCAmbG9jYWxTdGF0dXMpOw0KKwkJd3BpX3NldEVycm9yKGxvY2FsU3RhdHVzKTsNCisJfQ0KK30NCisNCisvKioNCisgKiBEZXRlcm1pbmUgaWYgdGhlIGVuY29kZXIgaXMgc3RvcHBlZC4NCisgKiBVc2luZyB0aGUgTWF4UGVyaW9kIHZhbHVlLCBhIGJvb2xlYW4gaXMgcmV0dXJuZWQgdGhhdCBpcyB0cnVlIGlmIHRoZSBlbmNvZGVyIGlzIGNvbnNpZGVyZWQNCisgKiBzdG9wcGVkIGFuZCBmYWxzZSBpZiBpdCBpcyBzdGlsbCBtb3ZpbmcuIEEgc3RvcHBlZCBlbmNvZGVyIGlzIG9uZSB3aGVyZSB0aGUgbW9zdCByZWNlbnQgcHVsc2UNCisgKiB3aWR0aCBleGNlZWRzIHRoZSBNYXhQZXJpb2QuDQorICogQHJldHVybiBUcnVlIGlmIHRoZSBlbmNvZGVyIGlzIGNvbnNpZGVyZWQgc3RvcHBlZC4NCisgKi8NCitib29sIEVuY29kZXI6OkdldFN0b3BwZWQoKQ0KK3sNCisJaWYgKFN0YXR1c0lzRmF0YWwoKSkgcmV0dXJuIHRydWU7DQorCWlmIChtX2NvdW50ZXIpDQorCXsNCisJCXJldHVybiBtX2NvdW50ZXItPkdldFN0b3BwZWQoKTsNCisJfQ0KKwllbHNlDQorCXsNCisJCXRSaW9TdGF0dXNDb2RlIGxvY2FsU3RhdHVzID0gTmlGcGdhX1N0YXR1c19TdWNjZXNzOw0KKwkJYm9vbCB2YWx1ZSA9IG1fZW5jb2Rlci0+cmVhZFRpbWVyT3V0cHV0X1N0YWxsZWQoJmxvY2FsU3RhdHVzKSAhPSAwOw0KKwkJd3BpX3NldEVycm9yKGxvY2FsU3RhdHVzKTsNCisJCXJldHVybiB2YWx1ZTsNCisJfQ0KK30NCisNCisvKioNCisgKiBUaGUgbGFzdCBkaXJlY3Rpb24gdGhlIGVuY29kZXIgdmFsdWUgY2hhbmdlZC4NCisgKiBAcmV0dXJuIFRoZSBsYXN0IGRpcmVjdGlvbiB0aGUgZW5jb2RlciB2YWx1ZSBjaGFuZ2VkLg0KKyAqLw0KK2Jvb2wgRW5jb2Rlcjo6R2V0RGlyZWN0aW9uKCkNCit7DQorCWlmIChTdGF0dXNJc0ZhdGFsKCkpIHJldHVybiBmYWxzZTsNCisJaWYgKG1fY291bnRlcikNCisJew0KKwkJcmV0dXJuIG1fY291bnRlci0+R2V0RGlyZWN0aW9uKCk7DQorCX0NCisJZWxzZQ0KKwl7DQorCQl0UmlvU3RhdHVzQ29kZSBsb2NhbFN0YXR1cyA9IE5pRnBnYV9TdGF0dXNfU3VjY2VzczsNCisJCWJvb2wgdmFsdWUgPSBtX2VuY29kZXItPnJlYWRPdXRwdXRfRGlyZWN0aW9uKCZsb2NhbFN0YXR1cyk7DQorCQl3cGlfc2V0RXJyb3IobG9jYWxTdGF0dXMpOw0KKwkJcmV0dXJuIHZhbHVlOw0KKwl9DQorfQ0KKw0KKy8qKg0KKyAqIFRoZSBzY2FsZSBuZWVkZWQgdG8gY29udmVydCBhIHJhdyBjb3VudGVyIHZhbHVlIGludG8gYSBudW1iZXIgb2YgZW5jb2RlciBwdWxzZXMuDQorICovDQorZG91YmxlIEVuY29kZXI6OkRlY29kaW5nU2NhbGVGYWN0b3IoKQ0KK3sNCisJaWYgKFN0YXR1c0lzRmF0YWwoKSkgcmV0dXJuIDAuMDsNCisJc3dpdGNoIChtX2VuY29kaW5nVHlwZSkNCisJew0KKwljYXNlIGsxWDoNCisJCXJldHVybiAxLjA7DQorCWNhc2UgazJYOg0KKwkJcmV0dXJuIDAuNTsNCisJY2FzZSBrNFg6DQorCQlyZXR1cm4gMC4yNTsNCisJZGVmYXVsdDoNCisJCXJldHVybiAwLjA7DQorCX0JDQorfQ0KKw0KKy8qKg0KKyAqIEdldCB0aGUgZGlzdGFuY2UgdGhlIHJvYm90IGhhcyBkcml2ZW4gc2luY2UgdGhlIGxhc3QgcmVzZXQuDQorICogDQorICogQHJldHVybiBUaGUgZGlzdGFuY2UgZHJpdmVuIHNpbmNlIHRoZSBsYXN0IHJlc2V0IGFzIHNjYWxlZCBieSB0aGUgdmFsdWUgZnJvbSBTZXREaXN0YW5jZVBlclB1bHNlKCkuDQorICovDQorZG91YmxlIEVuY29kZXI6OkdldERpc3RhbmNlKCkNCit7DQorCWlmIChTdGF0dXNJc0ZhdGFsKCkpIHJldHVybiAwLjA7DQorCXJldHVybiBHZXRSYXcoKSAqIERlY29kaW5nU2NhbGVGYWN0b3IoKSAqIG1fZGlzdGFuY2VQZXJQdWxzZTsNCit9DQorDQorLyoqDQorICogR2V0IHRoZSBjdXJyZW50IHJhdGUgb2YgdGhlIGVuY29kZXIuDQorICogVW5pdHMgYXJlIGRpc3RhbmNlIHBlciBzZWNvbmQgYXMgc2NhbGVkIGJ5IHRoZSB2YWx1ZSBmcm9tIFNldERpc3RhbmNlUGVyUHVsc2UoKS4NCisgKiANCisgKiBAcmV0dXJuIFRoZSBjdXJyZW50IHJhdGUgb2YgdGhlIGVuY29kZXIuDQorICovDQorZG91YmxlIEVuY29kZXI6OkdldFJhdGUoKQ0KK3sNCisJaWYgKFN0YXR1c0lzRmF0YWwoKSkgcmV0dXJuIDAuMDsNCisJcmV0dXJuIChtX2Rpc3RhbmNlUGVyUHVsc2UgLyBHZXRQZXJpb2QoKSk7DQorfQ0KKw0KKy8qKg0KKyAqIFNldCB0aGUgbWluaW11bSByYXRlIG9mIHRoZSBkZXZpY2UgYmVmb3JlIHRoZSBoYXJkd2FyZSByZXBvcnRzIGl0IHN0b3BwZWQuDQorICogDQorICogQHBhcmFtIG1pblJhdGUgVGhlIG1pbmltdW0gcmF0ZS4gIFRoZSB1bml0cyBhcmUgaW4gZGlzdGFuY2UgcGVyIHNlY29uZCBhcyBzY2FsZWQgYnkgdGhlIHZhbHVlIGZyb20gU2V0RGlzdGFuY2VQZXJQdWxzZSgpLg0KKyAqLw0KK3ZvaWQgRW5jb2Rlcjo6U2V0TWluUmF0ZShkb3VibGUgbWluUmF0ZSkNCit7DQorCWlmIChTdGF0dXNJc0ZhdGFsKCkpIHJldHVybjsNCisJU2V0TWF4UGVyaW9kKG1fZGlzdGFuY2VQZXJQdWxzZSAvIG1pblJhdGUpOw0KK30NCisNCisvKioNCisgKiBTZXQgdGhlIGRpc3RhbmNlIHBlciBwdWxzZSBmb3IgdGhpcyBlbmNvZGVyLg0KKyAqIFRoaXMgc2V0cyB0aGUgbXVsdGlwbGllciB1c2VkIHRvIGRldGVybWluZSB0aGUgZGlzdGFuY2UgZHJpdmVuIGJhc2VkIG9uIHRoZSBjb3VudCB2YWx1ZQ0KKyAqIGZyb20gdGhlIGVuY29kZXIuDQorICogRG8gbm90IGluY2x1ZGUgdGhlIGRlY29kaW5nIHR5cGUgaW4gdGhpcyBzY2FsZS4gIFRoZSBsaWJyYXJ5IGFscmVhZHkgY29tcGVuc2F0ZXMgZm9yIHRoZSBkZWNvZGluZyB0eXBlLg0KKyAqIFNldCB0aGlzIHZhbHVlIGJhc2VkIG9uIHRoZSBlbmNvZGVyJ3MgcmF0ZWQgUHVsc2VzIHBlciBSZXZvbHV0aW9uIGFuZA0KKyAqIGZhY3RvciBpbiBnZWFyaW5nIHJlZHVjdGlvbnMgZm9sbG93aW5nIHRoZSBlbmNvZGVyIHNoYWZ0Lg0KKyAqIFRoaXMgZGlzdGFuY2UgY2FuIGJlIGluIGFueSB1bml0cyB5b3UgbGlrZSwgbGluZWFyIG9yIGFuZ3VsYXIuDQorICogDQorICogQHBhcmFtIGRpc3RhbmNlUGVyUHVsc2UgVGhlIHNjYWxlIGZhY3RvciB0aGF0IHdpbGwgYmUgdXNlZCB0byBjb252ZXJ0IHB1bHNlcyB0byB1c2VmdWwgdW5pdHMuDQorICovDQordm9pZCBFbmNvZGVyOjpTZXREaXN0YW5jZVBlclB1bHNlKGRvdWJsZSBkaXN0YW5jZVBlclB1bHNlKQ0KK3sNCisJaWYgKFN0YXR1c0lzRmF0YWwoKSkgcmV0dXJuOw0KKwltX2Rpc3RhbmNlUGVyUHVsc2UgPSBkaXN0YW5jZVBlclB1bHNlOw0KK30NCisNCisvKioNCisgKiBTZXQgdGhlIGRpcmVjdGlvbiBzZW5zaW5nIGZvciB0aGlzIGVuY29kZXIuDQorICogVGhpcyBzZXRzIHRoZSBkaXJlY3Rpb24gc2Vuc2luZyBvbiB0aGUgZW5jb2RlciBzbyB0aGF0IGl0IGNvdWxkIGNvdW50IGluIHRoZSBjb3JyZWN0DQorICogc29mdHdhcmUgZGlyZWN0aW9uIHJlZ2FyZGxlc3Mgb2YgdGhlIG1vdW50aW5nLg0KKyAqIEBwYXJhbSByZXZlcnNlRGlyZWN0aW9uIHRydWUgaWYgdGhlIGVuY29kZXIgZGlyZWN0aW9uIHNob3VsZCBiZSByZXZlcnNlZA0KKyAqLw0KK3ZvaWQgRW5jb2Rlcjo6U2V0UmV2ZXJzZURpcmVjdGlvbihib29sIHJldmVyc2VEaXJlY3Rpb24pDQorew0KKwlpZiAoU3RhdHVzSXNGYXRhbCgpKSByZXR1cm47DQorCWlmIChtX2NvdW50ZXIpDQorCXsNCisJCW1fY291bnRlci0+U2V0UmV2ZXJzZURpcmVjdGlvbihyZXZlcnNlRGlyZWN0aW9uKTsNCisJfQ0KKwllbHNlDQorCXsNCisJCXRSaW9TdGF0dXNDb2RlIGxvY2FsU3RhdHVzID0gTmlGcGdhX1N0YXR1c19TdWNjZXNzOw0KKwkJbV9lbmNvZGVyLT53cml0ZUNvbmZpZ19SZXZlcnNlKHJldmVyc2VEaXJlY3Rpb24sICZsb2NhbFN0YXR1cyk7DQorCQl3cGlfc2V0RXJyb3IobG9jYWxTdGF0dXMpOw0KKwl9DQorfQ0KKw0KKy8qKg0KKyAqIFNldCB3aGljaCBwYXJhbWV0ZXIgb2YgdGhlIGVuY29kZXIgeW91IGFyZSB1c2luZyBhcyBhIHByb2Nlc3MgY29udHJvbCB2YXJpYWJsZS4NCisgKiANCisgKiBAcGFyYW0gcGlkU291cmNlIEFuIGVudW0gdG8gc2VsZWN0IHRoZSBwYXJhbWV0ZXIuDQorICovDQordm9pZCBFbmNvZGVyOjpTZXRQSURTb3VyY2VQYXJhbWV0ZXIoUElEU291cmNlUGFyYW1ldGVyIHBpZFNvdXJjZSkNCit7DQorCWlmIChTdGF0dXNJc0ZhdGFsKCkpIHJldHVybjsNCisJbV9waWRTb3VyY2UgPSBwaWRTb3VyY2U7DQorfQ0KKw0KKy8qKg0KKyAqIEltcGxlbWVudCB0aGUgUElEU291cmNlIGludGVyZmFjZS4NCisgKiANCisgKiBAcmV0dXJuIFRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBzZWxlY3RlZCBzb3VyY2UgcGFyYW1ldGVyLg0KKyAqLw0KK2RvdWJsZSBFbmNvZGVyOjpQSURHZXQoKQ0KK3sNCisJaWYgKFN0YXR1c0lzRmF0YWwoKSkgcmV0dXJuIDAuMDsNCisJc3dpdGNoIChtX3BpZFNvdXJjZSkNCisJew0KKwljYXNlIGtEaXN0YW5jZToNCisJCXJldHVybiBHZXREaXN0YW5jZSgpOw0KKwljYXNlIGtSYXRlOg0KKwkJcmV0dXJuIEdldFJhdGUoKTsNCisJZGVmYXVsdDoNCisJCXJldHVybiAwLjA7DQorCX0NCit9DQorDQordm9pZCBFbmNvZGVyOjpVcGRhdGVUYWJsZSgpIHsNCisJaWYgKG1fdGFibGUgIT0gTlVMTCkgew0KKyAgICAgICAgbV90YWJsZS0+UHV0TnVtYmVyKCJTcGVlZCIsIEdldFJhdGUoKSk7DQorICAgICAgICBtX3RhYmxlLT5QdXROdW1iZXIoIkRpc3RhbmNlIiwgR2V0RGlzdGFuY2UoKSk7DQorICAgICAgICBtX3RhYmxlLT5QdXROdW1iZXIoIkRpc3RhbmNlIHBlciBUaWNrIiwgbV9kaXN0YW5jZVBlclB1bHNlKTsNCisJfQ0KK30NCisNCit2b2lkIEVuY29kZXI6OlN0YXJ0TGl2ZVdpbmRvd01vZGUoKSB7DQorCQ0KK30NCisNCit2b2lkIEVuY29kZXI6OlN0b3BMaXZlV2luZG93TW9kZSgpIHsNCisJDQorfQ0KKw0KK3N0ZDo6c3RyaW5nIEVuY29kZXI6OkdldFNtYXJ0RGFzaGJvYXJkVHlwZSgpIHsNCisJaWYgKG1fZW5jb2RpbmdUeXBlID09IGs0WCkNCisJCXJldHVybiAiUXVhZHJhdHVyZSBFbmNvZGVyIjsNCisJZWxzZQ0KKwkJcmV0dXJuICJFbmNvZGVyIjsNCit9DQorDQordm9pZCBFbmNvZGVyOjpJbml0VGFibGUoSVRhYmxlICpzdWJUYWJsZSkgew0KKwltX3RhYmxlID0gc3ViVGFibGU7DQorCVVwZGF0ZVRhYmxlKCk7DQorfQ0KKw0KK0lUYWJsZSAqIEVuY29kZXI6OkdldFRhYmxlKCkgew0KKwlyZXR1cm4gbV90YWJsZTsNCit9DQorDQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvRW5jb2Rlci5oIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvRW5jb2Rlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiM2M3NGMKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9FbmNvZGVyLmgKQEAgLTAsMCArMSw4NCBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBDb3B5cmlnaHQgKGMpIEZJUlNUIDIwMDguIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCQkJCQkJCSAgKi8NCisvKiBPcGVuIFNvdXJjZSBTb2Z0d2FyZSAtIG1heSBiZSBtb2RpZmllZCBhbmQgc2hhcmVkIGJ5IEZSQyB0ZWFtcy4gVGhlIGNvZGUgICAqLw0KKy8qIG11c3QgYmUgYWNjb21wYW5pZWQgYnkgdGhlIEZJUlNUIEJTRCBsaWNlbnNlIGZpbGUgaW4gJChXSU5EX0JBU0UpL1dQSUxpYi4gICovDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisjaWZuZGVmIFFVQURfRU5DT0RFUl9IXw0KKyNkZWZpbmUgUVVBRF9FTkNPREVSX0hfDQorDQorI2luY2x1ZGUgIkNoaXBPYmplY3QuaCINCisjaW5jbHVkZSAiQ291bnRlckJhc2UuaCINCisjaW5jbHVkZSAiU2Vuc29yQmFzZS5oIg0KKyNpbmNsdWRlICJDb3VudGVyLmgiDQorI2luY2x1ZGUgIlBJRFNvdXJjZS5oIg0KKyNpbmNsdWRlICJMaXZlV2luZG93L0xpdmVXaW5kb3dTZW5kYWJsZS5oIg0KKw0KK2NsYXNzIERpZ2l0YWxTb3VyY2U7DQorDQorLyoqDQorICogQ2xhc3MgdG8gcmVhZCBxdWFkIGVuY29kZXJzLg0KKyAqIFF1YWRyYXR1cmUgZW5jb2RlcnMgYXJlIGRldmljZXMgdGhhdCBjb3VudCBzaGFmdCByb3RhdGlvbiBhbmQgY2FuIHNlbnNlIGRpcmVjdGlvbi4gVGhlIG91dHB1dCBvZg0KKyAqIHRoZSBRdWFkRW5jb2RlciBjbGFzcyBpcyBhbiBpbnRlZ2VyIHRoYXQgY2FuIGNvdW50IGVpdGhlciB1cCBvciBkb3duLCBhbmQgY2FuIGdvIG5lZ2F0aXZlIGZvcg0KKyAqIHJldmVyc2UgZGlyZWN0aW9uIGNvdW50aW5nLiBXaGVuIGNyZWF0aW5nIFF1YWRFbmNvZGVycywgYSBkaXJlY3Rpb24gaXMgc3VwcGxpZWQgdGhhdCBjaGFuZ2VzIHRoZQ0KKyAqIHNlbnNlIG9mIHRoZSBvdXRwdXQgdG8gbWFrZSBjb2RlIG1vcmUgcmVhZGFibGUgaWYgdGhlIGVuY29kZXIgaXMgbW91bnRlZCBzdWNoIHRoYXQgZm9yd2FyZCBtb3ZlbWVudA0KKyAqIGdlbmVyYXRlcyBuZWdhdGl2ZSB2YWx1ZXMuIFF1YWRyYXR1cmUgZW5jb2RlcnMgaGF2ZSB0d28gZGlnaXRhbCBvdXRwdXRzLCBhbiBBIENoYW5uZWwgYW5kIGEgQiBDaGFubmVsDQorICogdGhhdCBhcmUgb3V0IG9mIHBoYXNlIHdpdGggZWFjaCBvdGhlciB0byBhbGxvdyB0aGUgRlBHQSB0byBkbyBkaXJlY3Rpb24gc2Vuc2luZy4gDQorICovDQorY2xhc3MgRW5jb2RlcjogcHVibGljIFNlbnNvckJhc2UsIHB1YmxpYyBDb3VudGVyQmFzZSwgcHVibGljIFBJRFNvdXJjZSwgcHVibGljIExpdmVXaW5kb3dTZW5kYWJsZQ0KK3sNCitwdWJsaWM6DQorCXR5cGVkZWYgZW51bSB7a0Rpc3RhbmNlLCBrUmF0ZX0gUElEU291cmNlUGFyYW1ldGVyOw0KKw0KKwlFbmNvZGVyKFVJTlQzMiBhQ2hhbm5lbCwgVUlOVDMyIGJDaGFubmVsLCBib29sIHJldmVyc2VEaXJlY3Rpb249ZmFsc2UsIEVuY29kaW5nVHlwZSBlbmNvZGluZ1R5cGUgPSBrNFgpOw0KKwlFbmNvZGVyKFVJTlQ4IGFNb2R1bGVOdW1iZXIsIFVJTlQzMiBhQ2hhbm5lbCwgVUlOVDggYk1vZHVsZU51bWJlciwgVUlOVDMyIF9iQ2hhbm5lbCwgYm9vbCByZXZlcnNlRGlyZWN0aW9uPWZhbHNlLCBFbmNvZGluZ1R5cGUgZW5jb2RpbmdUeXBlID0gazRYKTsNCisJRW5jb2RlcihEaWdpdGFsU291cmNlICphU291cmNlLCBEaWdpdGFsU291cmNlICpiU291cmNlLCBib29sIHJldmVyc2VEaXJlY3Rpb249ZmFsc2UsIEVuY29kaW5nVHlwZSBlbmNvZGluZ1R5cGUgPSBrNFgpOw0KKwlFbmNvZGVyKERpZ2l0YWxTb3VyY2UgJmFTb3VyY2UsIERpZ2l0YWxTb3VyY2UgJmJTb3VyY2UsIGJvb2wgcmV2ZXJzZURpcmVjdGlvbj1mYWxzZSwgRW5jb2RpbmdUeXBlIGVuY29kaW5nVHlwZSA9IGs0WCk7DQorCXZpcnR1YWwgfkVuY29kZXIoKTsNCisNCisJLy8gQ291bnRlckJhc2UgaW50ZXJmYWNlDQorCXZvaWQgU3RhcnQoKTsNCisJSU5UMzIgR2V0KCk7DQorCUlOVDMyIEdldFJhdygpOw0KKwl2b2lkIFJlc2V0KCk7DQorCXZvaWQgU3RvcCgpOw0KKwlkb3VibGUgR2V0UGVyaW9kKCk7DQorCXZvaWQgU2V0TWF4UGVyaW9kKGRvdWJsZSBtYXhQZXJpb2QpOw0KKwlib29sIEdldFN0b3BwZWQoKTsNCisJYm9vbCBHZXREaXJlY3Rpb24oKTsNCisJZG91YmxlIEdldERpc3RhbmNlKCk7DQorCWRvdWJsZSBHZXRSYXRlKCk7DQorCXZvaWQgU2V0TWluUmF0ZShkb3VibGUgbWluUmF0ZSk7DQorCXZvaWQgU2V0RGlzdGFuY2VQZXJQdWxzZShkb3VibGUgZGlzdGFuY2VQZXJQdWxzZSk7DQorCXZvaWQgU2V0UmV2ZXJzZURpcmVjdGlvbihib29sIHJldmVyc2VEaXJlY3Rpb24pOw0KKw0KKwl2b2lkIFNldFBJRFNvdXJjZVBhcmFtZXRlcihQSURTb3VyY2VQYXJhbWV0ZXIgcGlkU291cmNlKTsNCisJZG91YmxlIFBJREdldCgpOw0KKwkNCisJdm9pZCBVcGRhdGVUYWJsZSgpOw0KKwl2b2lkIFN0YXJ0TGl2ZVdpbmRvd01vZGUoKTsNCisJdm9pZCBTdG9wTGl2ZVdpbmRvd01vZGUoKTsNCisJc3RkOjpzdHJpbmcgR2V0U21hcnREYXNoYm9hcmRUeXBlKCk7DQorCXZvaWQgSW5pdFRhYmxlKElUYWJsZSAqc3ViVGFibGUpOw0KKwlJVGFibGUgKiBHZXRUYWJsZSgpOw0KKw0KK3ByaXZhdGU6DQorCXZvaWQgSW5pdEVuY29kZXIoYm9vbCBfcmV2ZXJzZURpcmVjdGlvbiwgRW5jb2RpbmdUeXBlIGVuY29kaW5nVHlwZSk7DQorCWRvdWJsZSBEZWNvZGluZ1NjYWxlRmFjdG9yKCk7DQorDQorCURpZ2l0YWxTb3VyY2UgKm1fYVNvdXJjZTsJCS8vIHRoZSBBIHBoYXNlIG9mIHRoZSBxdWFkIGVuY29kZXINCisJRGlnaXRhbFNvdXJjZSAqbV9iU291cmNlOwkJLy8gdGhlIEIgcGhhc2Ugb2YgdGhlIHF1YWQgZW5jb2Rlcg0KKwlib29sIG1fYWxsb2NhdGVkQVNvdXJjZTsJCS8vIHdhcyB0aGUgQSBzb3VyY2UgYWxsb2NhdGVkIGxvY2FsbHk/DQorCWJvb2wgbV9hbGxvY2F0ZWRCU291cmNlOwkJLy8gd2FzIHRoZSBCIHNvdXJjZSBhbGxvY2F0ZWQgbG9jYWxseT8NCisJdEVuY29kZXIqIG1fZW5jb2RlcjsNCisJVUlOVDggbV9pbmRleDsNCisJZG91YmxlIG1fZGlzdGFuY2VQZXJQdWxzZTsJCS8vIGRpc3RhbmNlIG9mIHRyYXZlbCBmb3IgZWFjaCBlbmNvZGVyIHRpY2sNCisJQ291bnRlciAqbV9jb3VudGVyOwkJCQkvLyBDb3VudGVyIG9iamVjdCBmb3IgMXggYW5kIDJ4IGVuY29kaW5nDQorCUVuY29kaW5nVHlwZSBtX2VuY29kaW5nVHlwZTsJLy8gRW5jb2RpbmcgdHlwZQ0KKwlQSURTb3VyY2VQYXJhbWV0ZXIgbV9waWRTb3VyY2U7Ly8gRW5jb2RlciBwYXJhbWV0ZXIgdGhhdCBzb3VyY2VzIGEgUElEIGNvbnRyb2xsZXINCisJDQorCUlUYWJsZSAqbV90YWJsZTsNCit9Ow0KKw0KKyNlbmRpZg0KKw0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0Vycm9yLmNwcCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0Vycm9yLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Y2VjYzk0Ci0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvRXJyb3IuY3BwCkBAIC0wLDAgKzEsMTIyIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy8qIENvcHlyaWdodCAoYykgRklSU1QgMjAwOC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4JCQkJCQkJICAqLw0KKy8qIE9wZW4gU291cmNlIFNvZnR3YXJlIC0gbWF5IGJlIG1vZGlmaWVkIGFuZCBzaGFyZWQgYnkgRlJDIHRlYW1zLiBUaGUgY29kZSAgICovDQorLyogbXVzdCBiZSBhY2NvbXBhbmllZCBieSB0aGUgRklSU1QgQlNEIGxpY2Vuc2UgZmlsZSBpbiAkKFdJTkRfQkFTRSkvV1BJTGliLiAgKi8NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKyNpbmNsdWRlICJFcnJvci5oIg0KKw0KKyNpbmNsdWRlIDx0YXNrTGliLmg+DQorDQorI2luY2x1ZGUgIk5ldHdvcmtDb21tdW5pY2F0aW9uL0ZSQ0NvbW0uaCINCisjaW5jbHVkZSAiVGltZXIuaCINCisjaW5jbHVkZSAiVXRpbGl0eS5oIg0KKw0KK2Jvb2wgRXJyb3I6Om1fc3RhY2tUcmFjZUVuYWJsZWQgPSBmYWxzZTsNCitib29sIEVycm9yOjptX3N1c3BlbmRPbkVycm9yRW5hYmxlZCA9IGZhbHNlOw0KKw0KK0Vycm9yOjpFcnJvcigpDQorCTogbV9jb2RlKDApDQorCSwgbV9saW5lTnVtYmVyKDApDQorCSwgbV9vcmlnaW5hdGluZ09iamVjdChOVUxMKQ0KKwksIG1fdGltZXN0YW1wICgwLjApDQore30NCisNCitFcnJvcjo6fkVycm9yKCkNCit7fQ0KKw0KK3ZvaWQgRXJyb3I6OkNsb25lKEVycm9yICZlcnJvcikNCit7DQorCW1fY29kZSA9IGVycm9yLm1fY29kZTsNCisJbV9tZXNzYWdlID0gZXJyb3IubV9tZXNzYWdlOw0KKwltX2ZpbGVuYW1lID0gZXJyb3IubV9maWxlbmFtZTsNCisJbV9mdW5jdGlvbiA9IGVycm9yLm1fZnVuY3Rpb247DQorCW1fbGluZU51bWJlciA9IGVycm9yLm1fbGluZU51bWJlcjsNCisJbV9vcmlnaW5hdGluZ09iamVjdCA9IGVycm9yLm1fb3JpZ2luYXRpbmdPYmplY3Q7DQorCW1fdGltZXN0YW1wID0gZXJyb3IubV90aW1lc3RhbXA7DQorfQ0KKw0KK0Vycm9yOjpDb2RlIEVycm9yOjpHZXRDb2RlKCkgY29uc3QNCit7CXJldHVybiBtX2NvZGU7ICB9DQorDQorY29uc3QgY2hhciAqIEVycm9yOjpHZXRNZXNzYWdlKCkgY29uc3QNCit7CXJldHVybiBtX21lc3NhZ2UuY19zdHIoKTsgIH0NCisNCitjb25zdCBjaGFyICogRXJyb3I6OkdldEZpbGVuYW1lKCkgY29uc3QNCit7CXJldHVybiBtX2ZpbGVuYW1lLmNfc3RyKCk7ICB9DQorDQorY29uc3QgY2hhciAqIEVycm9yOjpHZXRGdW5jdGlvbigpIGNvbnN0DQorewlyZXR1cm4gbV9mdW5jdGlvbi5jX3N0cigpOyAgfQ0KKw0KK1VJTlQzMiBFcnJvcjo6R2V0TGluZU51bWJlcigpIGNvbnN0DQorewlyZXR1cm4gbV9saW5lTnVtYmVyOyAgfQ0KKw0KK2NvbnN0IEVycm9yQmFzZSogRXJyb3I6OkdldE9yaWdpbmF0aW5nT2JqZWN0KCkgY29uc3QNCit7CXJldHVybiBtX29yaWdpbmF0aW5nT2JqZWN0OyAgfQ0KKw0KK2RvdWJsZSBFcnJvcjo6R2V0VGltZSgpIGNvbnN0DQorewlyZXR1cm4gbV90aW1lc3RhbXA7ICB9DQorDQordm9pZCBFcnJvcjo6U2V0KENvZGUgY29kZSwgY29uc3QgY2hhciogY29udGV4dE1lc3NhZ2UsIGNvbnN0IGNoYXIqIGZpbGVuYW1lLCBjb25zdCBjaGFyKiBmdW5jdGlvbiwgVUlOVDMyIGxpbmVOdW1iZXIsIGNvbnN0IEVycm9yQmFzZSogb3JpZ2luYXRpbmdPYmplY3QpDQorew0KKwltX2NvZGUgPSBjb2RlOw0KKwltX21lc3NhZ2UgPSBjb250ZXh0TWVzc2FnZTsNCisJbV9maWxlbmFtZSA9IGZpbGVuYW1lOw0KKwltX2Z1bmN0aW9uID0gZnVuY3Rpb247DQorCW1fbGluZU51bWJlciA9IGxpbmVOdW1iZXI7DQorCW1fb3JpZ2luYXRpbmdPYmplY3QgPSBvcmlnaW5hdGluZ09iamVjdDsNCisJbV90aW1lc3RhbXAgPSBHZXRUaW1lKCk7DQorDQorCVJlcG9ydCgpOw0KKw0KKwlpZiAobV9zdXNwZW5kT25FcnJvckVuYWJsZWQpIHRhc2tTdXNwZW5kKDApOw0KK30NCisNCit2b2lkIEVycm9yOjpSZXBvcnQoKQ0KK3sNCisJLy8gRXJyb3Igc3RyaW5nIGJ1ZmZlcnMNCisJY2hhciAqZXJyb3IgPSBuZXcgY2hhclsyNTZdOw0KKwljaGFyICplcnJvcl93aXRoX2NvZGUgPSBuZXcgY2hhclsyNTZdOw0KKw0KKwkvLyBCdWlsZCBlcnJvciBzdHJpbmdzDQorCWlmIChtX2NvZGUgIT0gLTEpDQorCXsNCisJCXNucHJpbnRmKGVycm9yLCAyNTYsICIlczogc3RhdHVzID0gJWQgKDB4JTA4WCkgJXMgLi4uaW4gJXMoKSBpbiAlcyBhdCBsaW5lICVkXG4iLA0KKwkJCQltX2NvZGUgPCAwID8gIkVSUk9SIiA6ICJXQVJOSU5HIiwgKElOVDMyKW1fY29kZSwgKFVJTlQzMiltX2NvZGUsIG1fbWVzc2FnZS5jX3N0cigpLA0KKwkJCQltX2Z1bmN0aW9uLmNfc3RyKCksIG1fZmlsZW5hbWUuY19zdHIoKSwgbV9saW5lTnVtYmVyKTsNCisJCXNwcmludGYoZXJyb3Jfd2l0aF9jb2RlLCI8Q29kZT4lZCAlcyIsIChJTlQzMiltX2NvZGUsIGVycm9yKTsNCisJfSBlbHNlIHsNCisJCXNucHJpbnRmKGVycm9yLCAyNTYsICJFUlJPUjogJXMgLi4uaW4gJXMoKSBpbiAlcyBhdCBsaW5lICVkXG4iLCBtX21lc3NhZ2UuY19zdHIoKSwNCisJCQkJbV9mdW5jdGlvbi5jX3N0cigpLCBtX2ZpbGVuYW1lLmNfc3RyKCksIG1fbGluZU51bWJlcik7DQorCQlzdHJjcHkoZXJyb3Jfd2l0aF9jb2RlLCBlcnJvcik7DQorCX0NCisJLy8gVE9ETzogQWRkIGxvZ2dpbmcgdG8gZGlzaw0KKw0KKwkvLyBTZW5kIHRvIHRoZSBEcml2ZXJTdGF0aW9uDQorCXNldEVycm9yRGF0YShlcnJvcl93aXRoX2NvZGUsIHN0cmxlbihlcnJvcl93aXRoX2NvZGUpLCAxMDApOw0KKw0KKwlkZWxldGUgW10gZXJyb3Jfd2l0aF9jb2RlOw0KKw0KKwkvLyBQcmludCB0byBjb25zb2xlDQorCXByaW50ZigiXG5cbj4+Pj4lcyIsIGVycm9yKTsNCisNCisJZGVsZXRlIFtdIGVycm9yOw0KKw0KKwlpZiAobV9zdGFja1RyYWNlRW5hYmxlZCkNCisJew0KKwkJcHJpbnRmKCItLS0tLS0tLS0tLTxTdGFjayBUcmFjZT4tLS0tLS0tLS0tLS0tLS0tXG4iKTsNCisJCXdwaV9zZWxmVHJhY2UoKTsNCisJfQ0KK30NCisNCit2b2lkIEVycm9yOjpDbGVhcigpDQorew0KKwltX2NvZGUgPSAwOw0KKwltX21lc3NhZ2UgPSAiIjsNCisJbV9maWxlbmFtZSA9ICIiOw0KKwltX2Z1bmN0aW9uID0gIiI7DQorCW1fbGluZU51bWJlciA9IDA7DQorCW1fb3JpZ2luYXRpbmdPYmplY3QgPSBOVUxMOw0KKwltX3RpbWVzdGFtcCA9IDAuMDsNCit9DQorDQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvRXJyb3IuaCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0Vycm9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzRiMTNlYgotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0Vycm9yLmgKQEAgLTAsMCArMSw1OSBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBDb3B5cmlnaHQgKGMpIEZJUlNUIDIwMDguIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCQkJCQkJCSAgKi8NCisvKiBPcGVuIFNvdXJjZSBTb2Z0d2FyZSAtIG1heSBiZSBtb2RpZmllZCBhbmQgc2hhcmVkIGJ5IEZSQyB0ZWFtcy4gVGhlIGNvZGUgICAqLw0KKy8qIG11c3QgYmUgYWNjb21wYW5pZWQgYnkgdGhlIEZJUlNUIEJTRCBsaWNlbnNlIGZpbGUgaW4gJChXSU5EX0JBU0UpL1dQSUxpYi4gICovDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisjaWZuZGVmIF9FUlJPUl9IDQorI2RlZmluZSBfRVJST1JfSA0KKw0KKyNpbmNsdWRlICJCYXNlLmgiDQorI2luY2x1ZGUgIkNoaXBPYmplY3QvTmlSaW8uaCINCisjaW5jbHVkZSA8c3RyaW5nPg0KKyNpbmNsdWRlIDx2eFdvcmtzLmg+DQorDQorLy8gIEZvcndhcmQgZGVjbGFyYXRpb25zDQorY2xhc3MgRXJyb3JCYXNlOw0KKw0KKy8qKg0KKyAqIEVycm9yIG9iamVjdCByZXByZXNlbnRzIGEgbGlicmFyeSBlcnJvci4NCisgKi8NCitjbGFzcyBFcnJvcg0KK3sNCitwdWJsaWM6DQorCXR5cGVkZWYgdFJpb1N0YXR1c0NvZGUgQ29kZTsNCisNCisJRXJyb3IoKTsNCisJfkVycm9yKCk7DQorCXZvaWQgQ2xvbmUoRXJyb3IgJmVycm9yKTsNCisJQ29kZSBHZXRDb2RlKCkgY29uc3Q7DQorCWNvbnN0IGNoYXIgKkdldE1lc3NhZ2UoKSBjb25zdDsNCisJY29uc3QgY2hhciAqR2V0RmlsZW5hbWUoKSBjb25zdDsNCisJY29uc3QgY2hhciAqR2V0RnVuY3Rpb24oKSBjb25zdDsNCisJVUlOVDMyIEdldExpbmVOdW1iZXIoKSBjb25zdDsNCisJY29uc3QgRXJyb3JCYXNlKiBHZXRPcmlnaW5hdGluZ09iamVjdCgpIGNvbnN0Ow0KKwlkb3VibGUgR2V0VGltZSgpIGNvbnN0Ow0KKwl2b2lkIENsZWFyKCk7DQorCXZvaWQgU2V0KENvZGUgY29kZSwgY29uc3QgY2hhciogY29udGV4dE1lc3NhZ2UsIGNvbnN0IGNoYXIqIGZpbGVuYW1lLA0KKwkJY29uc3QgY2hhciAqZnVuY3Rpb24sIFVJTlQzMiBsaW5lTnVtYmVyLCBjb25zdCBFcnJvckJhc2UqIG9yaWdpbmF0aW5nT2JqZWN0KTsNCisJc3RhdGljIHZvaWQgRW5hYmxlU3RhY2tUcmFjZShib29sIGVuYWJsZSkgeyBtX3N0YWNrVHJhY2VFbmFibGVkPWVuYWJsZTsgfQ0KKwlzdGF0aWMgdm9pZCBFbmFibGVTdXNwZW5kT25FcnJvcihib29sIGVuYWJsZSkgeyBtX3N1c3BlbmRPbkVycm9yRW5hYmxlZD1lbmFibGU7IH0NCisNCitwcml2YXRlOg0KKwl2b2lkIFJlcG9ydCgpOw0KKw0KKwlDb2RlIG1fY29kZTsNCisJc3RkOjpzdHJpbmcgbV9tZXNzYWdlOw0KKwlzdGQ6OnN0cmluZyBtX2ZpbGVuYW1lOw0KKwlzdGQ6OnN0cmluZyBtX2Z1bmN0aW9uOw0KKwlVSU5UMzIgbV9saW5lTnVtYmVyOw0KKwljb25zdCBFcnJvckJhc2UqIG1fb3JpZ2luYXRpbmdPYmplY3Q7DQorCWRvdWJsZSBtX3RpbWVzdGFtcDsNCisNCisJc3RhdGljIGJvb2wgbV9zdGFja1RyYWNlRW5hYmxlZDsNCisJc3RhdGljIGJvb2wgbV9zdXNwZW5kT25FcnJvckVuYWJsZWQ7DQorCURJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihFcnJvcik7DQorfTsNCisNCisjZW5kaWYNCisNCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9FcnJvckJhc2UuY3BwIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvRXJyb3JCYXNlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTU4MmFkCi0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvRXJyb3JCYXNlLmNwcApAQCAtMCwwICsxLDIxNSBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBDb3B5cmlnaHQgKGMpIEZJUlNUIDIwMDguIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCQkJCQkJCSAgKi8NCisvKiBPcGVuIFNvdXJjZSBTb2Z0d2FyZSAtIG1heSBiZSBtb2RpZmllZCBhbmQgc2hhcmVkIGJ5IEZSQyB0ZWFtcy4gVGhlIGNvZGUgICAqLw0KKy8qIG11c3QgYmUgYWNjb21wYW5pZWQgYnkgdGhlIEZJUlNUIEJTRCBsaWNlbnNlIGZpbGUgaW4gJChXSU5EX0JBU0UpL1dQSUxpYi4gICovDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisjaW5jbHVkZSAiRXJyb3JCYXNlLmgiDQorI2luY2x1ZGUgIlN5bmNocm9uaXplZC5oIg0KKyNpbmNsdWRlICJuaXZpc2lvbi5oIg0KKyNkZWZpbmUgV1BJX0VSUk9SU19ERUZJTkVfU1RSSU5HUw0KKyNpbmNsdWRlICJXUElFcnJvcnMuaCINCisNCisjaW5jbHVkZSA8ZXJybm9MaWIuaD4NCisjaW5jbHVkZSA8c3ltTGliLmg+DQorI2luY2x1ZGUgPHN5c1N5bVRibC5oPg0KKw0KK1NFTV9JRCBFcnJvckJhc2U6Ol9nbG9iYWxFcnJvck11dGV4ID0gc2VtTUNyZWF0ZShTRU1fUV9QUklPUklUWSB8IFNFTV9ERUxFVEVfU0FGRSB8IFNFTV9JTlZFUlNJT05fU0FGRSk7DQorRXJyb3IgRXJyb3JCYXNlOjpfZ2xvYmFsRXJyb3I7DQorLyoqDQorICogQGJyaWVmIEluaXRpYWxpemUgdGhlIGluc3RhbmNlIHN0YXR1cyB0byAwIGZvciBub3cuDQorICovDQorRXJyb3JCYXNlOjpFcnJvckJhc2UoKQ0KK3t9DQorDQorRXJyb3JCYXNlOjp+RXJyb3JCYXNlKCkNCit7fQ0KKw0KKy8qKg0KKyAqIEBicmllZiBSZXRyaWV2ZSB0aGUgY3VycmVudCBlcnJvci4NCisgKiBHZXQgdGhlIGN1cnJlbnQgZXJyb3IgaW5mb3JtYXRpb24gYXNzb2NpYXRlZCB3aXRoIHRoaXMgc2Vuc29yLg0KKyAqLw0KK0Vycm9yJiBFcnJvckJhc2U6OkdldEVycm9yKCkNCit7DQorCXJldHVybiBtX2Vycm9yOw0KK30NCisNCitjb25zdCBFcnJvciYgRXJyb3JCYXNlOjpHZXRFcnJvcigpIGNvbnN0DQorew0KKwlyZXR1cm4gbV9lcnJvcjsNCit9DQorDQorLyoqDQorICogQGJyaWVmIENsZWFyIHRoZSBjdXJyZW50IGVycm9yIGluZm9ybWF0aW9uIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHNlbnNvci4NCisgKi8NCit2b2lkIEVycm9yQmFzZTo6Q2xlYXJFcnJvcigpIGNvbnN0DQorew0KKwltX2Vycm9yLkNsZWFyKCk7DQorfQ0KKw0KKy8qKg0KKyAqIEBicmllZiBTZXQgZXJyb3IgaW5mb3JtYXRpb24gYXNzb2NpYXRlZCB3aXRoIGEgQyBsaWJyYXJ5IGNhbGwgdGhhdCBzZXQgYW4gZXJyb3IgdG8gdGhlICJlcnJubyIgZ2xvYmFsIHZhcmlhYmxlLg0KKyAqIA0KKyAqIEBwYXJhbSBjb250ZXh0TWVzc2FnZSBBIGN1c3RvbSBtZXNzYWdlIGZyb20gdGhlIGNvZGUgdGhhdCBzZXQgdGhlIGVycm9yLg0KKyAqIEBwYXJhbSBmaWxlbmFtZSBGaWxlbmFtZSBvZiB0aGUgZXJyb3Igc291cmNlDQorICogQHBhcmFtIGZ1bmN0aW9uIEZ1bmN0aW9uIG9mIHRoZSBlcnJvciBzb3VyY2UNCisgKiBAcGFyYW0gbGluZU51bWJlciBMaW5lIG51bWJlciBvZiB0aGUgZXJyb3Igc291cmNlDQorICovDQordm9pZCBFcnJvckJhc2U6OlNldEVycm5vRXJyb3IoY29uc3QgY2hhciAqY29udGV4dE1lc3NhZ2UsDQorCQljb25zdCBjaGFyKiBmaWxlbmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb24sIFVJTlQzMiBsaW5lTnVtYmVyKSBjb25zdA0KK3sNCisJY2hhciBlcnJbMjU2XTsNCisJaW50IGVyck5vID0gZXJybm9HZXQoKTsNCisJaWYgKGVyck5vID09IDApDQorCXsNCisJCXNwcmludGYoZXJyLCAiT0s6ICVzIiwgY29udGV4dE1lc3NhZ2UpOw0KKwl9DQorCWVsc2UNCisJew0KKwkJY2hhciAqc3RhdE5hbWUgPSBuZXcgY2hhcltNQVhfU1lTX1NZTV9MRU4gKyAxXTsNCisJCWludCBwdmFsOw0KKwkJU1lNX1RZUEUgcHR5cGU7DQorCQlzeW1GaW5kQnlWYWx1ZShzdGF0U3ltVGJsLCBlcnJObywgc3RhdE5hbWUsICZwdmFsLCAmcHR5cGUpOw0KKwkJaWYgKHB2YWwgIT0gZXJyTm8pDQorCQkJc25wcmludGYoZXJyLCAyNTYsICJVbmtub3duIGVycm5vIDB4JTA4WDogJXMiLCBlcnJObywgY29udGV4dE1lc3NhZ2UpOw0KKwkJZWxzZQ0KKwkJCXNucHJpbnRmKGVyciwgMjU2LCAiJXMgKDB4JTA4WCk6ICVzIiwgc3RhdE5hbWUsIGVyck5vLCBjb250ZXh0TWVzc2FnZSk7DQorCQlkZWxldGUgW10gc3RhdE5hbWU7DQorCX0NCisNCisJLy8gIFNldCB0aGUgY3VycmVudCBlcnJvciBpbmZvcm1hdGlvbiBmb3IgdGhpcyBvYmplY3QuDQorCW1fZXJyb3IuU2V0KC0xLCBlcnIsIGZpbGVuYW1lLCBmdW5jdGlvbiwgbGluZU51bWJlciwgdGhpcyk7DQorDQorCS8vIFVwZGF0ZSB0aGUgZ2xvYmFsIGVycm9yIGlmIHRoZXJlIGlzIG5vdCBvbmUgYWxyZWFkeSBzZXQuDQorCVN5bmNocm9uaXplZCBtdXRleChfZ2xvYmFsRXJyb3JNdXRleCk7DQorCWlmIChfZ2xvYmFsRXJyb3IuR2V0Q29kZSgpID09IDApIHsNCisJCV9nbG9iYWxFcnJvci5DbG9uZShtX2Vycm9yKTsNCisJfQ0KK30NCisNCisvKioNCisgKiBAYnJpZWYgU2V0IHRoZSBjdXJyZW50IGVycm9yIGluZm9ybWF0aW9uIGFzc29jaWF0ZWQgZnJvbSB0aGUgbml2aXNpb24gSW1hcSBBUEkuDQorICogDQorICogQHBhcmFtIHN1Y2Nlc3MgVGhlIHJldHVybiBmcm9tIHRoZSBmdW5jdGlvbg0KKyAqIEBwYXJhbSBjb250ZXh0TWVzc2FnZSBBIGN1c3RvbSBtZXNzYWdlIGZyb20gdGhlIGNvZGUgdGhhdCBzZXQgdGhlIGVycm9yLg0KKyAqIEBwYXJhbSBmaWxlbmFtZSBGaWxlbmFtZSBvZiB0aGUgZXJyb3Igc291cmNlDQorICogQHBhcmFtIGZ1bmN0aW9uIEZ1bmN0aW9uIG9mIHRoZSBlcnJvciBzb3VyY2UNCisgKiBAcGFyYW0gbGluZU51bWJlciBMaW5lIG51bWJlciBvZiB0aGUgZXJyb3Igc291cmNlDQorICovDQordm9pZCBFcnJvckJhc2U6OlNldEltYXFFcnJvcihpbnQgc3VjY2VzcywgY29uc3QgY2hhciAqY29udGV4dE1lc3NhZ2UsIGNvbnN0IGNoYXIqIGZpbGVuYW1lLCBjb25zdCBjaGFyKiBmdW5jdGlvbiwgVUlOVDMyIGxpbmVOdW1iZXIpIGNvbnN0DQorew0KKwkvLyAgSWYgdGhlcmUgd2FzIGFuIGVycm9yDQorCWlmIChzdWNjZXNzIDw9IDApIHsNCisJCWNoYXIgZXJyWzI1Nl07DQorCQlzcHJpbnRmKGVyciwgIiVzOiAlcyIsIGNvbnRleHRNZXNzYWdlLCBpbWFxR2V0RXJyb3JUZXh0KGltYXFHZXRMYXN0RXJyb3IoKSkpOw0KKw0KKwkJLy8gIFNldCB0aGUgY3VycmVudCBlcnJvciBpbmZvcm1hdGlvbiBmb3IgdGhpcyBvYmplY3QuDQorCQltX2Vycm9yLlNldChpbWFxR2V0TGFzdEVycm9yKCksIGVyciwgZmlsZW5hbWUsIGZ1bmN0aW9uLCBsaW5lTnVtYmVyLCB0aGlzKTsNCisNCisJCS8vIFVwZGF0ZSB0aGUgZ2xvYmFsIGVycm9yIGlmIHRoZXJlIGlzIG5vdCBvbmUgYWxyZWFkeSBzZXQuDQorCQlTeW5jaHJvbml6ZWQgbXV0ZXgoX2dsb2JhbEVycm9yTXV0ZXgpOw0KKwkJaWYgKF9nbG9iYWxFcnJvci5HZXRDb2RlKCkgPT0gMCkgew0KKwkJCV9nbG9iYWxFcnJvci5DbG9uZShtX2Vycm9yKTsNCisJCX0NCisJfQ0KK30NCisNCisvKioNCisgKiBAYnJpZWYgU2V0IHRoZSBjdXJyZW50IGVycm9yIGluZm9ybWF0aW9uIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHNlbnNvci4NCisgKiANCisgKiBAcGFyYW0gY29kZSBUaGUgZXJyb3IgY29kZQ0KKyAqIEBwYXJhbSBjb250ZXh0TWVzc2FnZSBBIGN1c3RvbSBtZXNzYWdlIGZyb20gdGhlIGNvZGUgdGhhdCBzZXQgdGhlIGVycm9yLg0KKyAqIEBwYXJhbSBmaWxlbmFtZSBGaWxlbmFtZSBvZiB0aGUgZXJyb3Igc291cmNlDQorICogQHBhcmFtIGZ1bmN0aW9uIEZ1bmN0aW9uIG9mIHRoZSBlcnJvciBzb3VyY2UNCisgKiBAcGFyYW0gbGluZU51bWJlciBMaW5lIG51bWJlciBvZiB0aGUgZXJyb3Igc291cmNlDQorICovDQordm9pZCBFcnJvckJhc2U6OlNldEVycm9yKEVycm9yOjpDb2RlIGNvZGUsIGNvbnN0IGNoYXIgKmNvbnRleHRNZXNzYWdlLA0KKwkJY29uc3QgY2hhciogZmlsZW5hbWUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uLCBVSU5UMzIgbGluZU51bWJlcikgY29uc3QNCit7DQorCS8vICBJZiB0aGVyZSB3YXMgYW4gZXJyb3INCisJaWYgKGNvZGUgIT0gMCkgew0KKwkJLy8gIFNldCB0aGUgY3VycmVudCBlcnJvciBpbmZvcm1hdGlvbiBmb3IgdGhpcyBvYmplY3QuDQorCQltX2Vycm9yLlNldChjb2RlLCBjb250ZXh0TWVzc2FnZSwgZmlsZW5hbWUsIGZ1bmN0aW9uLCBsaW5lTnVtYmVyLCB0aGlzKTsNCisNCisJCS8vIFVwZGF0ZSB0aGUgZ2xvYmFsIGVycm9yIGlmIHRoZXJlIGlzIG5vdCBvbmUgYWxyZWFkeSBzZXQuDQorCQlTeW5jaHJvbml6ZWQgbXV0ZXgoX2dsb2JhbEVycm9yTXV0ZXgpOw0KKwkJaWYgKF9nbG9iYWxFcnJvci5HZXRDb2RlKCkgPT0gMCkgew0KKwkJCV9nbG9iYWxFcnJvci5DbG9uZShtX2Vycm9yKTsNCisJCX0NCisJfQ0KK30NCisNCisvKioNCisgKiBAYnJpZWYgU2V0IHRoZSBjdXJyZW50IGVycm9yIGluZm9ybWF0aW9uIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHNlbnNvci4NCisgKiANCisgKiBAcGFyYW0gZXJyb3JNZXNzYWdlIFRoZSBlcnJvciBtZXNzYWdlIGZyb20gV1BJRXJyb3JzLmgNCisgKiBAcGFyYW0gY29udGV4dE1lc3NhZ2UgQSBjdXN0b20gbWVzc2FnZSBmcm9tIHRoZSBjb2RlIHRoYXQgc2V0IHRoZSBlcnJvci4NCisgKiBAcGFyYW0gZmlsZW5hbWUgRmlsZW5hbWUgb2YgdGhlIGVycm9yIHNvdXJjZQ0KKyAqIEBwYXJhbSBmdW5jdGlvbiBGdW5jdGlvbiBvZiB0aGUgZXJyb3Igc291cmNlDQorICogQHBhcmFtIGxpbmVOdW1iZXIgTGluZSBudW1iZXIgb2YgdGhlIGVycm9yIHNvdXJjZQ0KKyAqLw0KK3ZvaWQgRXJyb3JCYXNlOjpTZXRXUElFcnJvcihjb25zdCBjaGFyICplcnJvck1lc3NhZ2UsIGNvbnN0IGNoYXIgKmNvbnRleHRNZXNzYWdlLA0KKwkJY29uc3QgY2hhciogZmlsZW5hbWUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uLCBVSU5UMzIgbGluZU51bWJlcikgY29uc3QNCit7DQorCWNoYXIgZXJyWzI1Nl07DQorCXNwcmludGYoZXJyLCAiJXM6ICVzIiwgZXJyb3JNZXNzYWdlLCBjb250ZXh0TWVzc2FnZSk7DQorDQorCS8vICBTZXQgdGhlIGN1cnJlbnQgZXJyb3IgaW5mb3JtYXRpb24gZm9yIHRoaXMgb2JqZWN0Lg0KKwltX2Vycm9yLlNldCgtMSwgZXJyLCBmaWxlbmFtZSwgZnVuY3Rpb24sIGxpbmVOdW1iZXIsIHRoaXMpOw0KKw0KKwkvLyBVcGRhdGUgdGhlIGdsb2JhbCBlcnJvciBpZiB0aGVyZSBpcyBub3Qgb25lIGFscmVhZHkgc2V0Lg0KKwlTeW5jaHJvbml6ZWQgbXV0ZXgoX2dsb2JhbEVycm9yTXV0ZXgpOw0KKwlpZiAoX2dsb2JhbEVycm9yLkdldENvZGUoKSA9PSAwKSB7DQorCQlfZ2xvYmFsRXJyb3IuQ2xvbmUobV9lcnJvcik7DQorCX0NCit9DQorDQordm9pZCBFcnJvckJhc2U6OkNsb25lRXJyb3IoRXJyb3JCYXNlICpyaHMpIGNvbnN0DQorew0KKwltX2Vycm9yLkNsb25lKHJocy0+R2V0RXJyb3IoKSk7DQorfQ0KKw0KKy8qKg0KK0BicmllZiBDaGVjayBpZiB0aGUgY3VycmVudCBlcnJvciBjb2RlIHJlcHJlc2VudHMgYSBmYXRhbCBlcnJvci4NCisgIA0KK0ByZXR1cm4gdHJ1ZSBpZiB0aGUgY3VycmVudCBlcnJvciBpcyBmYXRhbC4NCisqLw0KK2Jvb2wgRXJyb3JCYXNlOjpTdGF0dXNJc0ZhdGFsKCkgY29uc3QNCit7DQorCXJldHVybiBtX2Vycm9yLkdldENvZGUoKSA8IDA7DQorfQ0KKw0KK3ZvaWQgRXJyb3JCYXNlOjpTZXRHbG9iYWxFcnJvcihFcnJvcjo6Q29kZSBjb2RlLCBjb25zdCBjaGFyICpjb250ZXh0TWVzc2FnZSwNCisJCWNvbnN0IGNoYXIqIGZpbGVuYW1lLCBjb25zdCBjaGFyKiBmdW5jdGlvbiwgVUlOVDMyIGxpbmVOdW1iZXIpDQorew0KKwkvLyAgSWYgdGhlcmUgd2FzIGFuIGVycm9yDQorCWlmIChjb2RlICE9IDApIHsNCisJCVN5bmNocm9uaXplZCBtdXRleChfZ2xvYmFsRXJyb3JNdXRleCk7DQorDQorCQkvLyAgU2V0IHRoZSBjdXJyZW50IGVycm9yIGluZm9ybWF0aW9uIGZvciB0aGlzIG9iamVjdC4NCisJCV9nbG9iYWxFcnJvci5TZXQoY29kZSwgY29udGV4dE1lc3NhZ2UsIGZpbGVuYW1lLCBmdW5jdGlvbiwgbGluZU51bWJlciwgTlVMTCk7DQorCX0NCit9DQorDQordm9pZCBFcnJvckJhc2U6OlNldEdsb2JhbFdQSUVycm9yKGNvbnN0IGNoYXIgKmVycm9yTWVzc2FnZSwgY29uc3QgY2hhciAqY29udGV4dE1lc3NhZ2UsDQorICAgICAgICBjb25zdCBjaGFyKiBmaWxlbmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb24sIFVJTlQzMiBsaW5lTnVtYmVyKQ0KK3sNCisJY2hhciBlcnJbMjU2XTsNCisJc3ByaW50ZihlcnIsICIlczogJXMiLCBlcnJvck1lc3NhZ2UsIGNvbnRleHRNZXNzYWdlKTsNCisNCisJU3luY2hyb25pemVkIG11dGV4KF9nbG9iYWxFcnJvck11dGV4KTsNCisJaWYgKF9nbG9iYWxFcnJvci5HZXRDb2RlKCkgIT0gMCkgew0KKwkJX2dsb2JhbEVycm9yLkNsZWFyKCk7DQorCX0NCisJX2dsb2JhbEVycm9yLlNldCgtMSwgZXJyLCBmaWxlbmFtZSwgZnVuY3Rpb24sIGxpbmVOdW1iZXIsIE5VTEwpOw0KK30NCisNCisvKioNCisgICogUmV0cmlldmUgdGhlIGN1cnJlbnQgZ2xvYmFsIGVycm9yLiAgICANCisqLw0KK0Vycm9yJiBFcnJvckJhc2U6OkdldEdsb2JhbEVycm9yKCkNCit7DQorCVN5bmNocm9uaXplZCBtdXRleChfZ2xvYmFsRXJyb3JNdXRleCk7DQorCXJldHVybiBfZ2xvYmFsRXJyb3I7DQorfQ0KKw0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0Vycm9yQmFzZS5oIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvRXJyb3JCYXNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDRiNDk3NQotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0Vycm9yQmFzZS5oCkBAIC0wLDAgKzEsNzAgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorLyogQ29weXJpZ2h0IChjKSBGSVJTVCAyMDA4LiBBbGwgUmlnaHRzIFJlc2VydmVkLgkJCQkJCQkgICovDQorLyogT3BlbiBTb3VyY2UgU29mdHdhcmUgLSBtYXkgYmUgbW9kaWZpZWQgYW5kIHNoYXJlZCBieSBGUkMgdGVhbXMuIFRoZSBjb2RlICAgKi8NCisvKiBtdXN0IGJlIGFjY29tcGFuaWVkIGJ5IHRoZSBGSVJTVCBCU0QgbGljZW5zZSBmaWxlIGluICQoV0lORF9CQVNFKS9XUElMaWIuICAqLw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorI2lmbmRlZiBfRVJST1JfQkFTRV9IDQorI2RlZmluZSBfRVJST1JfQkFTRV9IDQorDQorI2luY2x1ZGUgIkJhc2UuaCINCisjaW5jbHVkZSAiQ2hpcE9iamVjdC9OaVJpby5oIg0KKyNpbmNsdWRlICJFcnJvci5oIg0KKyNpbmNsdWRlIDxzZW1MaWIuaD4NCisjaW5jbHVkZSA8dnhXb3Jrcy5oPg0KKw0KKyNkZWZpbmUgd3BpX3NldEVycm5vRXJyb3JXaXRoQ29udGV4dChjb250ZXh0KSAgICh0aGlzLT5TZXRFcnJub0Vycm9yKChjb250ZXh0KSwgX19GSUxFX18sIF9fRlVOQ1RJT05fXywgX19MSU5FX18pKQ0KKyNkZWZpbmUgd3BpX3NldEVycm5vRXJyb3IoKSAgICh3cGlfc2V0RXJybm9FcnJvcldpdGhDb250ZXh0KCIiKSkNCisjZGVmaW5lIHdwaV9zZXRJbWFxRXJyb3JXaXRoQ29udGV4dChjb2RlLCBjb250ZXh0KSAgICh0aGlzLT5TZXRJbWFxRXJyb3IoKGNvZGUpLCAoY29udGV4dCksIF9fRklMRV9fLCBfX0ZVTkNUSU9OX18sIF9fTElORV9fKSkNCisjZGVmaW5lIHdwaV9zZXRFcnJvcldpdGhDb250ZXh0KGNvZGUsIGNvbnRleHQpICAgKHRoaXMtPlNldEVycm9yKChjb2RlKSwgKGNvbnRleHQpLCBfX0ZJTEVfXywgX19GVU5DVElPTl9fLCBfX0xJTkVfXykpDQorI2RlZmluZSB3cGlfc2V0RXJyb3IoY29kZSkgICAod3BpX3NldEVycm9yV2l0aENvbnRleHQoY29kZSwgIiIpKQ0KKyNkZWZpbmUgd3BpX3NldFN0YXRpY0Vycm9yV2l0aENvbnRleHQob2JqZWN0LCBjb2RlLCBjb250ZXh0KSAgIChvYmplY3QtPlNldEVycm9yKChjb2RlKSwgKGNvbnRleHQpLCBfX0ZJTEVfXywgX19GVU5DVElPTl9fLCBfX0xJTkVfXykpDQorI2RlZmluZSB3cGlfc2V0U3RhdGljRXJyb3Iob2JqZWN0LCBjb2RlKSAgICh3cGlfc2V0U3RhdGljRXJyb3JXaXRoQ29udGV4dChvYmplY3QsIGNvZGUsICIiKSkNCisjZGVmaW5lIHdwaV9zZXRHbG9iYWxFcnJvcldpdGhDb250ZXh0KGNvZGUsIGNvbnRleHQpICAgKEVycm9yQmFzZTo6U2V0R2xvYmFsRXJyb3IoKGNvZGUpLCAoY29udGV4dCksIF9fRklMRV9fLCBfX0ZVTkNUSU9OX18sIF9fTElORV9fKSkNCisjZGVmaW5lIHdwaV9zZXRHbG9iYWxFcnJvcihjb2RlKSAgICh3cGlfc2V0R2xvYmFsRXJyb3JXaXRoQ29udGV4dChjb2RlLCAiIikpDQorI2RlZmluZSB3cGlfc2V0V1BJRXJyb3JXaXRoQ29udGV4dChlcnJvciwgY29udGV4dCkgICAodGhpcy0+U2V0V1BJRXJyb3IoKHdwaV9lcnJvcl9zXyMjZXJyb3IpLCAoY29udGV4dCksIF9fRklMRV9fLCBfX0ZVTkNUSU9OX18sIF9fTElORV9fKSkNCisjZGVmaW5lIHdwaV9zZXRXUElFcnJvcihlcnJvcikgICAod3BpX3NldFdQSUVycm9yV2l0aENvbnRleHQoZXJyb3IsICIiKSkNCisjZGVmaW5lIHdwaV9zZXRTdGF0aWNXUElFcnJvcldpdGhDb250ZXh0KG9iamVjdCwgZXJyb3IsIGNvbnRleHQpICAgKG9iamVjdC0+U2V0V1BJRXJyb3IoKHdwaV9lcnJvcl9zXyMjZXJyb3IpLCAoY29udGV4dCksIF9fRklMRV9fLCBfX0ZVTkNUSU9OX18sIF9fTElORV9fKSkNCisjZGVmaW5lIHdwaV9zZXRTdGF0aWNXUElFcnJvcihvYmplY3QsIGVycm9yKSAgICh3cGlfc2V0U3RhdGljV1BJRXJyb3JXaXRoQ29udGV4dChvYmplY3QsIGVycm9yLCAiIikpDQorI2RlZmluZSB3cGlfc2V0R2xvYmFsV1BJRXJyb3JXaXRoQ29udGV4dChlcnJvciwgY29udGV4dCkgICAoRXJyb3JCYXNlOjpTZXRHbG9iYWxXUElFcnJvcigod3BpX2Vycm9yX3NfIyNlcnJvciksIChjb250ZXh0KSwgX19GSUxFX18sIF9fRlVOQ1RJT05fXywgX19MSU5FX18pKQ0KKyNkZWZpbmUgd3BpX3NldEdsb2JhbFdQSUVycm9yKGVycm9yKSAgICh3cGlfc2V0R2xvYmFsV1BJRXJyb3JXaXRoQ29udGV4dChlcnJvciwgIiIpKQ0KKw0KKy8qKg0KKyAqIEJhc2UgY2xhc3MgZm9yIG1vc3Qgb2JqZWN0cy4NCisgKiBFcnJvckJhc2UgaXMgdGhlIGJhc2UgY2xhc3MgZm9yIG1vc3Qgb2JqZWN0cyBzaW5jZSBpdCBob2xkcyB0aGUgZ2VuZXJhdGVkIGVycm9yDQorICogZm9yIHRoYXQgb2JqZWN0LiBJbiBhZGRpdGlvbiwgdGhlcmUgaXMgYSBzaW5nbGUgaW5zdGFuY2Ugb2YgYSBnbG9iYWwgZXJyb3Igb2JqZWN0DQorICovDQorY2xhc3MgRXJyb3JCYXNlDQorew0KKy8vVE9ETzogQ29uc2lkZXIgaW5pdGlhbGl6aW5nIGluc3RhbmNlIHZhcmlhYmxlcyBhbmQgY2xlYW51cCBpbiBkZXN0cnVjdG9yDQorcHVibGljOg0KKwl2aXJ0dWFsIH5FcnJvckJhc2UoKTsNCisJdmlydHVhbCBFcnJvciYgR2V0RXJyb3IoKTsNCisJdmlydHVhbCBjb25zdCBFcnJvciYgR2V0RXJyb3IoKSBjb25zdDsNCisJdmlydHVhbCB2b2lkIFNldEVycm5vRXJyb3IoY29uc3QgY2hhciAqY29udGV4dE1lc3NhZ2UsDQorCQljb25zdCBjaGFyKiBmaWxlbmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb24sIFVJTlQzMiBsaW5lTnVtYmVyKSBjb25zdDsNCisJdmlydHVhbCB2b2lkIFNldEltYXFFcnJvcihpbnQgc3VjY2VzcywgY29uc3QgY2hhciAqY29udGV4dE1lc3NhZ2UsDQorICAgICAgICBjb25zdCBjaGFyKiBmaWxlbmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb24sIFVJTlQzMiBsaW5lTnVtYmVyKSBjb25zdDsNCisJdmlydHVhbCB2b2lkIFNldEVycm9yKEVycm9yOjpDb2RlIGNvZGUsIGNvbnN0IGNoYXIgKmNvbnRleHRNZXNzYWdlLA0KKwkJY29uc3QgY2hhciogZmlsZW5hbWUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uLCBVSU5UMzIgbGluZU51bWJlcikgY29uc3Q7DQorCXZpcnR1YWwgdm9pZCBTZXRXUElFcnJvcihjb25zdCBjaGFyICplcnJvck1lc3NhZ2UsIGNvbnN0IGNoYXIgKmNvbnRleHRNZXNzYWdlLA0KKwkJY29uc3QgY2hhciogZmlsZW5hbWUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uLCBVSU5UMzIgbGluZU51bWJlcikgY29uc3Q7DQorCXZpcnR1YWwgdm9pZCBDbG9uZUVycm9yKEVycm9yQmFzZSAqcmhzKSBjb25zdDsNCisJdmlydHVhbCB2b2lkIENsZWFyRXJyb3IoKSBjb25zdDsNCisJdmlydHVhbCBib29sIFN0YXR1c0lzRmF0YWwoKSBjb25zdDsNCisJc3RhdGljIHZvaWQgU2V0R2xvYmFsRXJyb3IoRXJyb3I6OkNvZGUgY29kZSwgY29uc3QgY2hhciAqY29udGV4dE1lc3NhZ2UsDQorCQljb25zdCBjaGFyKiBmaWxlbmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb24sIFVJTlQzMiBsaW5lTnVtYmVyKTsNCisJc3RhdGljIHZvaWQgU2V0R2xvYmFsV1BJRXJyb3IoY29uc3QgY2hhciAqZXJyb3JNZXNzYWdlLCBjb25zdCBjaGFyICpjb250ZXh0TWVzc2FnZSwNCisJCWNvbnN0IGNoYXIqIGZpbGVuYW1lLCBjb25zdCBjaGFyKiBmdW5jdGlvbiwgVUlOVDMyIGxpbmVOdW1iZXIpOw0KKwlzdGF0aWMgRXJyb3ImIEdldEdsb2JhbEVycm9yKCk7DQorcHJvdGVjdGVkOg0KKwltdXRhYmxlIEVycm9yIG1fZXJyb3I7DQorCS8vIFRPRE86IFJlcGxhY2UgZ2xvYmFsRXJyb3Igd2l0aCBhIGdsb2JhbCBsaXN0IG9mIGFsbCBlcnJvcnMuDQorCXN0YXRpYyBTRU1fSUQgX2dsb2JhbEVycm9yTXV0ZXg7DQorCXN0YXRpYyBFcnJvciBfZ2xvYmFsRXJyb3I7DQorCUVycm9yQmFzZSgpOw0KK3ByaXZhdGU6DQorCURJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihFcnJvckJhc2UpOw0KK307DQorDQorI2VuZGlmDQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvR2VhclRvb3RoLmNwcCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0dlYXJUb290aC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGZhYzljMgotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0dlYXJUb290aC5jcHAKQEAgLTAsMCArMSw4MCBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBDb3B5cmlnaHQgKGMpIEZJUlNUIDIwMDguIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCQkJCQkJCSAgKi8NCisvKiBPcGVuIFNvdXJjZSBTb2Z0d2FyZSAtIG1heSBiZSBtb2RpZmllZCBhbmQgc2hhcmVkIGJ5IEZSQyB0ZWFtcy4gVGhlIGNvZGUgICAqLw0KKy8qIG11c3QgYmUgYWNjb21wYW5pZWQgYnkgdGhlIEZJUlNUIEJTRCBsaWNlbnNlIGZpbGUgaW4gJChXSU5EX0JBU0UpL1dQSUxpYi4gICovDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisjaW5jbHVkZSAiR2VhclRvb3RoLmgiDQorI2luY2x1ZGUgIkxpdmVXaW5kb3cvTGl2ZVdpbmRvdy5oIg0KKw0KK2NvbnN0IGRvdWJsZSBHZWFyVG9vdGg6OmtHZWFyVG9vdGhUaHJlc2hvbGQ7DQorDQorLyoqDQorICogQ29tbW9uIGNvZGUgY2FsbGVkIGJ5IHRoZSBjb25zdHJ1Y3RvcnMuDQorICovDQordm9pZCBHZWFyVG9vdGg6OkVuYWJsZURpcmVjdGlvblNlbnNpbmcoYm9vbCBkaXJlY3Rpb25TZW5zaXRpdmUpDQorew0KKwlpZiAoZGlyZWN0aW9uU2Vuc2l0aXZlKQ0KKwl7DQorCQlTZXRQdWxzZUxlbmd0aE1vZGUoa0dlYXJUb290aFRocmVzaG9sZCk7DQorCX0NCit9DQorDQorLyoqDQorICogQ29uc3RydWN0IGEgR2VhclRvb3RoIHNlbnNvciBnaXZlbiBhIGNoYW5uZWwuDQorICogDQorICogVGhlIGRlZmF1bHQgbW9kdWxlIGlzIGFzc3VtZWQuDQorICogDQorICogQHBhcmFtIGNoYW5uZWwgVGhlIEdQSU8gY2hhbm5lbCBvbiB0aGUgZGlnaXRhbCBtb2R1bGUgdGhhdCB0aGUgc2Vuc29yIGlzIGNvbm5lY3RlZCB0by4NCisgKiBAcGFyYW0gZGlyZWN0aW9uU2Vuc2l0aXZlIEVuYWJsZSB0aGUgcHVsc2UgbGVuZ3RoIGRlY29kaW5nIGluIGhhcmR3YXJlIHRvIHNwZWNpZnkgY291bnQgZGlyZWN0aW9uLg0KKyAqLw0KK0dlYXJUb290aDo6R2VhclRvb3RoKFVJTlQzMiBjaGFubmVsLCBib29sIGRpcmVjdGlvblNlbnNpdGl2ZSkNCisJOiBDb3VudGVyKGNoYW5uZWwpDQorew0KKwlFbmFibGVEaXJlY3Rpb25TZW5zaW5nKGRpcmVjdGlvblNlbnNpdGl2ZSk7DQorfQ0KKw0KKy8qKg0KKyAqIENvbnN0cnVjdCBhIEdlYXJUb290aCBzZW5zb3IgZ2l2ZW4gYSBjaGFubmVsIGFuZCBtb2R1bGUuDQorICogDQorICogQHBhcmFtIG1vZHVsZU51bWJlciBUaGUgZGlnaXRhbCBtb2R1bGUgKDEgb3IgMikuDQorICogQHBhcmFtIGNoYW5uZWwgVGhlIEdQSU8gY2hhbm5lbCBvbiB0aGUgZGlnaXRhbCBtb2R1bGUgdGhhdCB0aGUgc2Vuc29yIGlzIGNvbm5lY3RlZCB0by4NCisgKiBAcGFyYW0gZGlyZWN0aW9uU2Vuc2l0aXZlIEVuYWJsZSB0aGUgcHVsc2UgbGVuZ3RoIGRlY29kaW5nIGluIGhhcmR3YXJlIHRvIHNwZWNpZnkgY291bnQgZGlyZWN0aW9uLg0KKyAqLw0KK0dlYXJUb290aDo6R2VhclRvb3RoKFVJTlQ4IG1vZHVsZU51bWJlciwgVUlOVDMyIGNoYW5uZWwsIGJvb2wgZGlyZWN0aW9uU2Vuc2l0aXZlKQ0KKwk6IENvdW50ZXIobW9kdWxlTnVtYmVyLCBjaGFubmVsKQ0KK3sNCisJRW5hYmxlRGlyZWN0aW9uU2Vuc2luZyhkaXJlY3Rpb25TZW5zaXRpdmUpOw0KKwlMaXZlV2luZG93OjpHZXRJbnN0YW5jZSgpLT5BZGRTZW5zb3IoIkdlYXJUb290aCIsIG1vZHVsZU51bWJlciwgY2hhbm5lbCwgdGhpcyk7DQorfQ0KKw0KKy8qKg0KKyAqIENvbnN0cnVjdCBhIEdlYXJUb290aCBzZW5zb3IgZ2l2ZW4gYSBkaWdpdGFsIGlucHV0Lg0KKyAqIFRoaXMgc2hvdWxkIGJlIHVzZWQgd2hlbiBzaGFyaW5nIGRpZ2lhbCBpbnB1dHMuDQorICogDQorICogQHBhcmFtIHNvdXJjZSBBbiBvYmplY3QgdGhhdCBmdWxseSBkZXNjaWJlcyB0aGUgaW5wdXQgdGhhdCB0aGUgc2Vuc29yIGlzIGNvbm5lY3RlZCB0by4NCisgKiBAcGFyYW0gZGlyZWN0aW9uU2Vuc2l0aXZlIEVuYWJsZSB0aGUgcHVsc2UgbGVuZ3RoIGRlY29kaW5nIGluIGhhcmR3YXJlIHRvIHNwZWNpZnkgY291bnQgZGlyZWN0aW9uLg0KKyAqLw0KK0dlYXJUb290aDo6R2VhclRvb3RoKERpZ2l0YWxTb3VyY2UgKnNvdXJjZSwgYm9vbCBkaXJlY3Rpb25TZW5zaXRpdmUpDQorCTogQ291bnRlcihzb3VyY2UpDQorew0KKwlFbmFibGVEaXJlY3Rpb25TZW5zaW5nKGRpcmVjdGlvblNlbnNpdGl2ZSk7DQorfQ0KKw0KK0dlYXJUb290aDo6R2VhclRvb3RoKERpZ2l0YWxTb3VyY2UgJnNvdXJjZSwgYm9vbCBkaXJlY3Rpb25TZW5zaXRpdmUpOiBDb3VudGVyKHNvdXJjZSkNCit7DQorCUVuYWJsZURpcmVjdGlvblNlbnNpbmcoZGlyZWN0aW9uU2Vuc2l0aXZlKTsNCit9DQorDQorLyoqDQorICogRnJlZSB0aGUgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCBhIGdlYXIgdG9vdGggc2Vuc29yLg0KKyAqLw0KK0dlYXJUb290aDo6fkdlYXJUb290aCgpDQorew0KK30NCisNCisNCitzdGQ6OnN0cmluZyBHZWFyVG9vdGg6OkdldFNtYXJ0RGFzaGJvYXJkVHlwZSgpIHsNCisJcmV0dXJuICJHZWFyVG9vdGgiOw0KK30NCisNCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9HZWFyVG9vdGguaCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0dlYXJUb290aC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyYjc1N2MKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9HZWFyVG9vdGguaApAQCAtMCwwICsxLDM0IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy8qIENvcHlyaWdodCAoYykgRklSU1QgMjAwOC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4JCQkJCQkJICAqLw0KKy8qIE9wZW4gU291cmNlIFNvZnR3YXJlIC0gbWF5IGJlIG1vZGlmaWVkIGFuZCBzaGFyZWQgYnkgRlJDIHRlYW1zLiBUaGUgY29kZSAgICovDQorLyogbXVzdCBiZSBhY2NvbXBhbmllZCBieSB0aGUgRklSU1QgQlNEIGxpY2Vuc2UgZmlsZSBpbiAkKFdJTkRfQkFTRSkvV1BJTGliLiAgKi8NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKyNpZm5kZWYgR0VBUl9UT09USF9IXw0KKyNkZWZpbmUgR0VBUl9UT09USF9IXw0KKw0KKyNpbmNsdWRlICJDb3VudGVyLmgiDQorDQorLyoqDQorICogQWxpYXMgZm9yIGNvdW50ZXIgY2xhc3MuDQorICogSW1wbGVtZW50IHRoZSBnZWFyIHRvb3RoIHNlbnNvciBzdXBwbGllZCBieSBGSVJTVC4gQ3VycmVudGx5IHRoZXJlIGlzIG5vIHJldmVyc2Ugc2Vuc2luZyBvbg0KKyAqIHRoZSBnZWFyIHRvb3RoIHNlbnNvciwgYnV0IGluIGZ1dHVyZSB2ZXJzaW9ucyB3ZSBtaWdodCBpbXBsZW1lbnQgdGhlIG5lY2Vzc2FyeSB0aW1pbmcgaW4gdGhlDQorICogRlBHQSB0byBzZW5zZSBkaXJlY3Rpb24uDQorICovDQorY2xhc3MgR2VhclRvb3RoIDogcHVibGljIENvdW50ZXINCit7DQorcHVibGljOg0KKwkvLy8gNTUgdVNlYyBmb3IgdGhyZXNob2xkDQorCXN0YXRpYyBjb25zdCBkb3VibGUga0dlYXJUb290aFRocmVzaG9sZCA9IDU1ZS02Ow0KKwlHZWFyVG9vdGgoVUlOVDMyIGNoYW5uZWwsIGJvb2wgZGlyZWN0aW9uU2Vuc2l0aXZlID0gZmFsc2UpOw0KKwlHZWFyVG9vdGgoVUlOVDggbW9kdWxlTnVtYmVyLCBVSU5UMzIgY2hhbm5lbCwgYm9vbCBkaXJlY3Rpb25TZW5zaXRpdmUgPSBmYWxzZSk7DQorCUdlYXJUb290aChEaWdpdGFsU291cmNlICpzb3VyY2UsIGJvb2wgZGlyZWN0aW9uU2Vuc2l0aXZlID0gZmFsc2UpOw0KKwlHZWFyVG9vdGgoRGlnaXRhbFNvdXJjZSAmc291cmNlLCBib29sIGRpcmVjdGlvblNlbnNpdGl2ZSA9IGZhbHNlKTsNCisJdmlydHVhbCB+R2VhclRvb3RoKCk7DQorCXZvaWQgRW5hYmxlRGlyZWN0aW9uU2Vuc2luZyhib29sIGRpcmVjdGlvblNlbnNpdGl2ZSk7DQorCQ0KKwl2aXJ0dWFsIHN0ZDo6c3RyaW5nIEdldFNtYXJ0RGFzaGJvYXJkVHlwZSgpOw0KK307DQorDQorDQorI2VuZGlmDQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvR2VuZXJpY0hJRC5oIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvR2VuZXJpY0hJRC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkNDUzMDgKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9HZW5lcmljSElELmgKQEAgLTAsMCArMSwzOCBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBDb3B5cmlnaHQgKGMpIEZJUlNUIDIwMDguIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCQkJCQkJCSAgKi8NCisvKiBPcGVuIFNvdXJjZSBTb2Z0d2FyZSAtIG1heSBiZSBtb2RpZmllZCBhbmQgc2hhcmVkIGJ5IEZSQyB0ZWFtcy4gVGhlIGNvZGUgICAqLw0KKy8qIG11c3QgYmUgYWNjb21wYW5pZWQgYnkgdGhlIEZJUlNUIEJTRCBsaWNlbnNlIGZpbGUgaW4gJChXSU5EX0JBU0UpL1dQSUxpYi4gICovDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisjaWZuZGVmIEdFTkVSSUNfSElEX0gNCisjZGVmaW5lIEdFTkVSSUNfSElEX0gNCisNCisjaW5jbHVkZSA8dnhXb3Jrcy5oPg0KKw0KKy8qKiBHZW5lcmljSElEIEludGVyZmFjZQ0KKyAqLw0KK2NsYXNzIEdlbmVyaWNISUQNCit7DQorcHVibGljOg0KKwl0eXBlZGVmIGVudW0gew0KKwkJa0xlZnRIYW5kID0gMCwNCisJCWtSaWdodEhhbmQgPSAxDQorCX0gSm95c3RpY2tIYW5kOw0KKw0KKwl2aXJ0dWFsIH5HZW5lcmljSElEKCkge30NCisNCisJdmlydHVhbCBmbG9hdCBHZXRYKEpveXN0aWNrSGFuZCBoYW5kID0ga1JpZ2h0SGFuZCkgPSAwOw0KKwl2aXJ0dWFsIGZsb2F0IEdldFkoSm95c3RpY2tIYW5kIGhhbmQgPSBrUmlnaHRIYW5kKSA9IDA7DQorCXZpcnR1YWwgZmxvYXQgR2V0WigpID0gMDsNCisJdmlydHVhbCBmbG9hdCBHZXRUd2lzdCgpID0gMDsNCisJdmlydHVhbCBmbG9hdCBHZXRUaHJvdHRsZSgpID0gMDsNCisJdmlydHVhbCBmbG9hdCBHZXRSYXdBeGlzKFVJTlQzMiBheGlzKSA9IDA7DQorDQorCXZpcnR1YWwgYm9vbCBHZXRUcmlnZ2VyKEpveXN0aWNrSGFuZCBoYW5kID0ga1JpZ2h0SGFuZCkgPSAwOw0KKwl2aXJ0dWFsIGJvb2wgR2V0VG9wKEpveXN0aWNrSGFuZCBoYW5kID0ga1JpZ2h0SGFuZCkgPSAwOw0KKwl2aXJ0dWFsIGJvb2wgR2V0QnVtcGVyKEpveXN0aWNrSGFuZCBoYW5kID0ga1JpZ2h0SGFuZCkgPSAwOw0KKwl2aXJ0dWFsIGJvb2wgR2V0UmF3QnV0dG9uKFVJTlQzMiBidXR0b24pID0gMDsNCit9Ow0KKw0KKyNlbmRpZg0KKw0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0d5cm8uY3BwIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvR3lyby5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmY1NWU1OAotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0d5cm8uY3BwCkBAIC0wLDAgKzEsMjE3IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy8qIENvcHlyaWdodCAoYykgRklSU1QgMjAwOC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4JCQkJCQkJICAqLw0KKy8qIE9wZW4gU291cmNlIFNvZnR3YXJlIC0gbWF5IGJlIG1vZGlmaWVkIGFuZCBzaGFyZWQgYnkgRlJDIHRlYW1zLiBUaGUgY29kZSAgICovDQorLyogbXVzdCBiZSBhY2NvbXBhbmllZCBieSB0aGUgRklSU1QgQlNEIGxpY2Vuc2UgZmlsZSBpbiAkKFdJTkRfQkFTRSkvV1BJTGliLiAgKi8NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKyNpbmNsdWRlICJHeXJvLmgiDQorI2luY2x1ZGUgIkFuYWxvZ0NoYW5uZWwuaCINCisjaW5jbHVkZSAiQW5hbG9nTW9kdWxlLmgiDQorI2luY2x1ZGUgIk5ldHdvcmtDb21tdW5pY2F0aW9uL1VzYWdlUmVwb3J0aW5nLmgiDQorI2luY2x1ZGUgIlRpbWVyLmgiDQorI2luY2x1ZGUgIldQSUVycm9ycy5oIg0KKyNpbmNsdWRlICJMaXZlV2luZG93L0xpdmVXaW5kb3cuaCINCisNCitjb25zdCBVSU5UMzIgR3lybzo6a092ZXJzYW1wbGVCaXRzOw0KK2NvbnN0IFVJTlQzMiBHeXJvOjprQXZlcmFnZUJpdHM7DQorY29uc3QgZmxvYXQgR3lybzo6a1NhbXBsZXNQZXJTZWNvbmQ7DQorY29uc3QgZmxvYXQgR3lybzo6a0NhbGlicmF0aW9uU2FtcGxlVGltZTsNCitjb25zdCBmbG9hdCBHeXJvOjprRGVmYXVsdFZvbHRzUGVyRGVncmVlUGVyU2Vjb25kOw0KKw0KKy8qKg0KKyAqIEluaXRpYWxpemUgdGhlIGd5cm8uDQorICogQ2FsaWJyYXRlIHRoZSBneXJvIGJ5IHJ1bm5pbmcgZm9yIGEgbnVtYmVyIG9mIHNhbXBsZXMgYW5kIGNvbXB1dGluZyB0aGUgY2VudGVyIHZhbHVlIGZvciB0aGlzDQorICogcGFydC4gVGhlbiB1c2UgdGhlIGNlbnRlciB2YWx1ZSBhcyB0aGUgQWNjdW11bGF0b3IgY2VudGVyIHZhbHVlIGZvciBzdWJzZXF1ZW50IG1lYXN1cmVtZW50cy4NCisgKiBJdCdzIGltcG9ydGFudCB0byBtYWtlIHN1cmUgdGhhdCB0aGUgcm9ib3QgaXMgbm90IG1vdmluZyB3aGlsZSB0aGUgY2VudGVyaW5nIGNhbGN1bGF0aW9ucyBhcmUNCisgKiBpbiBwcm9ncmVzcywgdGhpcyBpcyB0eXBpY2FsbHkgZG9uZSB3aGVuIHRoZSByb2JvdCBpcyBmaXJzdCB0dXJuZWQgb24gd2hpbGUgaXQncyBzaXR0aW5nIGF0DQorICogcmVzdCBiZWZvcmUgdGhlIGNvbXBldGl0aW9uIHN0YXJ0cy4NCisgKi8NCit2b2lkIEd5cm86OkluaXRHeXJvKCkNCit7DQorCWlmICghbV9hbmFsb2ctPklzQWNjdW11bGF0b3JDaGFubmVsKCkpDQorCXsNCisJCXdwaV9zZXRXUElFcnJvcldpdGhDb250ZXh0KFBhcmFtZXRlck91dE9mUmFuZ2UsDQorCQkJCSJtb2R1bGVOdW1iZXIgYW5kL29yIGNoYW5uZWwgKG11c3QgYmUgYWNjdW11bGF0b3IgY2hhbm5lbCkiKTsNCisJCWlmIChtX2NoYW5uZWxBbGxvY2F0ZWQpDQorCQl7DQorCQkJZGVsZXRlIG1fYW5hbG9nOw0KKwkJCW1fYW5hbG9nID0gTlVMTDsNCisJCX0NCisJCXJldHVybjsNCisJfQ0KKw0KKwltX3ZvbHRzUGVyRGVncmVlUGVyU2Vjb25kID0ga0RlZmF1bHRWb2x0c1BlckRlZ3JlZVBlclNlY29uZDsNCisJbV9hbmFsb2ctPlNldEF2ZXJhZ2VCaXRzKGtBdmVyYWdlQml0cyk7DQorCW1fYW5hbG9nLT5TZXRPdmVyc2FtcGxlQml0cyhrT3ZlcnNhbXBsZUJpdHMpOw0KKwlmbG9hdCBzYW1wbGVSYXRlID0ga1NhbXBsZXNQZXJTZWNvbmQgKiANCisJCSgxIDw8IChrQXZlcmFnZUJpdHMgKyBrT3ZlcnNhbXBsZUJpdHMpKTsNCisJbV9hbmFsb2ctPkdldE1vZHVsZSgpLT5TZXRTYW1wbGVSYXRlKHNhbXBsZVJhdGUpOw0KKwlXYWl0KDEuMCk7DQorDQorCW1fYW5hbG9nLT5Jbml0QWNjdW11bGF0b3IoKTsNCisJV2FpdChrQ2FsaWJyYXRpb25TYW1wbGVUaW1lKTsNCisNCisJSU5UNjQgdmFsdWU7DQorCVVJTlQzMiBjb3VudDsNCisJbV9hbmFsb2ctPkdldEFjY3VtdWxhdG9yT3V0cHV0KCZ2YWx1ZSwgJmNvdW50KTsNCisNCisJVUlOVDMyIGNlbnRlciA9IChVSU5UMzIpKChmbG9hdCl2YWx1ZSAvIChmbG9hdCljb3VudCArIC41KTsNCisNCisJbV9vZmZzZXQgPSAoKGZsb2F0KXZhbHVlIC8gKGZsb2F0KWNvdW50KSAtIChmbG9hdCljZW50ZXI7DQorDQorCW1fYW5hbG9nLT5TZXRBY2N1bXVsYXRvckNlbnRlcihjZW50ZXIpOw0KKwltX2FuYWxvZy0+U2V0QWNjdW11bGF0b3JEZWFkYmFuZCgwKTsgLy8vPCBUT0RPOiBjb21wdXRlIC8gcGFyYW1ldGVyaXplIHRoaXMNCisJbV9hbmFsb2ctPlJlc2V0QWNjdW11bGF0b3IoKTsNCisNCisJblVzYWdlUmVwb3J0aW5nOjpyZXBvcnQoblVzYWdlUmVwb3J0aW5nOjprUmVzb3VyY2VUeXBlX0d5cm8sIG1fYW5hbG9nLT5HZXRDaGFubmVsKCksIG1fYW5hbG9nLT5HZXRNb2R1bGVOdW1iZXIoKSAtIDEpOw0KKwlMaXZlV2luZG93OjpHZXRJbnN0YW5jZSgpLT5BZGRTZW5zb3IoIkd5cm8iLCBtX2FuYWxvZy0+R2V0TW9kdWxlTnVtYmVyKCksIG1fYW5hbG9nLT5HZXRDaGFubmVsKCksIHRoaXMpOw0KK30NCisNCisvKioNCisgKiBHeXJvIGNvbnN0cnVjdG9yIGdpdmVuIGEgc2xvdCBhbmQgYSBjaGFubmVsLg0KKyAqIA0KKyAqIEBwYXJhbSBtb2R1bGVOdW1iZXIgVGhlIGFuYWxvZyBtb2R1bGUgdGhlIGd5cm8gaXMgY29ubmVjdGVkIHRvICgxKS4NCisgKiBAcGFyYW0gY2hhbm5lbCBUaGUgYW5hbG9nIGNoYW5uZWwgdGhlIGd5cm8gaXMgY29ubmVjdGVkIHRvICgxIG9yIDIpLg0KKyAqLw0KK0d5cm86Okd5cm8oVUlOVDggbW9kdWxlTnVtYmVyLCBVSU5UMzIgY2hhbm5lbCkNCit7DQorCW1fYW5hbG9nID0gbmV3IEFuYWxvZ0NoYW5uZWwobW9kdWxlTnVtYmVyLCBjaGFubmVsKTsNCisJbV9jaGFubmVsQWxsb2NhdGVkID0gdHJ1ZTsNCisJSW5pdEd5cm8oKTsNCit9DQorDQorLyoqDQorICogR3lybyBjb25zdHJ1Y3RvciB3aXRoIG9ubHkgYSBjaGFubmVsLg0KKyAqIA0KKyAqIFVzZSB0aGUgZGVmYXVsdCBhbmFsb2cgbW9kdWxlIHNsb3QuDQorICogDQorICogQHBhcmFtIGNoYW5uZWwgVGhlIGFuYWxvZyBjaGFubmVsIHRoZSBneXJvIGlzIGNvbm5lY3RlZCB0by4NCisgKi8NCitHeXJvOjpHeXJvKFVJTlQzMiBjaGFubmVsKQ0KK3sNCisJbV9hbmFsb2cgPSBuZXcgQW5hbG9nQ2hhbm5lbChjaGFubmVsKTsNCisJbV9jaGFubmVsQWxsb2NhdGVkID0gdHJ1ZTsNCisJSW5pdEd5cm8oKTsNCit9DQorDQorLyoqDQorICogR3lybyBjb25zdHJ1Y3RvciB3aXRoIGEgcHJlY3JlYXRlZCBhbmFsb2cgY2hhbm5lbCBvYmplY3QuDQorICogVXNlIHRoaXMgY29uc3RydWN0b3Igd2hlbiB0aGUgYW5hbG9nIGNoYW5uZWwgbmVlZHMgdG8gYmUgc2hhcmVkLiBUaGVyZQ0KKyAqIGlzIG5vIHJlZmVyZW5jZSBjb3VudGluZyB3aGVuIGFuIEFuYWxvZ0NoYW5uZWwgaXMgcGFzc2VkIHRvIHRoZSBneXJvLg0KKyAqIEBwYXJhbSBjaGFubmVsIFRoZSBBbmFsb2dDaGFubmVsIG9iamVjdCB0aGF0IHRoZSBneXJvIGlzIGNvbm5lY3RlZCB0by4NCisgKi8NCitHeXJvOjpHeXJvKEFuYWxvZ0NoYW5uZWwgKmNoYW5uZWwpDQorew0KKwltX2FuYWxvZyA9IGNoYW5uZWw7DQorCW1fY2hhbm5lbEFsbG9jYXRlZCA9IGZhbHNlOw0KKwlpZiAoY2hhbm5lbCA9PSBOVUxMKQ0KKwl7DQorCQl3cGlfc2V0V1BJRXJyb3IoTnVsbFBhcmFtZXRlcik7DQorCX0NCisJZWxzZQ0KKwl7DQorCQlJbml0R3lybygpOw0KKwl9DQorfQ0KKw0KK0d5cm86Okd5cm8oQW5hbG9nQ2hhbm5lbCAmY2hhbm5lbCkNCit7DQorCW1fYW5hbG9nID0gJmNoYW5uZWw7DQorCW1fY2hhbm5lbEFsbG9jYXRlZCA9IGZhbHNlOw0KKwlJbml0R3lybygpOw0KK30NCisNCisvKioNCisgKiBSZXNldCB0aGUgZ3lyby4NCisgKiBSZXNldHMgdGhlIGd5cm8gdG8gYSBoZWFkaW5nIG9mIHplcm8uIFRoaXMgY2FuIGJlIHVzZWQgaWYgdGhlcmUgaXMgc2lnbmlmaWNhbnQNCisgKiBkcmlmdCBpbiB0aGUgZ3lybyBhbmQgaXQgbmVlZHMgdG8gYmUgcmVjYWxpYnJhdGVkIGFmdGVyIGl0IGhhcyBiZWVuIHJ1bm5pbmcuDQorICovDQordm9pZCBHeXJvOjpSZXNldCgpDQorew0KKwltX2FuYWxvZy0+UmVzZXRBY2N1bXVsYXRvcigpOw0KK30NCisNCisvKioNCisgKiBEZWxldGUgKGZyZWUpIHRoZSBhY2N1bXVsYXRvciBhbmQgdGhlIGFuYWxvZyBjb21wb25lbnRzIHVzZWQgZm9yIHRoZSBneXJvLg0KKyAqLw0KK0d5cm86On5HeXJvKCkNCit7DQorCWlmIChtX2NoYW5uZWxBbGxvY2F0ZWQpDQorCQlkZWxldGUgbV9hbmFsb2c7DQorfQ0KKw0KKy8qKg0KKyAqIFJldHVybiB0aGUgYWN0dWFsIGFuZ2xlIGluIGRlZ3JlZXMgdGhhdCB0aGUgcm9ib3QgaXMgY3VycmVudGx5IGZhY2luZy4NCisgKiANCisgKiBUaGUgYW5nbGUgaXMgYmFzZWQgb24gdGhlIGN1cnJlbnQgYWNjdW11bGF0b3IgdmFsdWUgY29ycmVjdGVkIGJ5IHRoZSBvdmVyc2FtcGxpbmcgcmF0ZSwgdGhlDQorICogZ3lybyB0eXBlIGFuZCB0aGUgQS9EIGNhbGlicmF0aW9uIHZhbHVlcy4NCisgKiBUaGUgYW5nbGUgaXMgY29udGludW91cywgdGhhdCBpcyBjYW4gZ28gYmV5b25kIDM2MCBkZWdyZWVzLiBUaGlzIG1ha2UgYWxnb3JpdGhtcyB0aGF0IHdvdWxkbid0DQorICogd2FudCB0byBzZWUgYSBkaXNjb250aW51aXR5IGluIHRoZSBneXJvIG91dHB1dCBhcyBpdCBzd2VlcHMgcGFzdCAwIG9uIHRoZSBzZWNvbmQgdGltZSBhcm91bmQuDQorICogDQorICogQHJldHVybiB0aGUgY3VycmVudCBoZWFkaW5nIG9mIHRoZSByb2JvdCBpbiBkZWdyZWVzLiBUaGlzIGhlYWRpbmcgaXMgYmFzZWQgb24gaW50ZWdyYXRpb24NCisgKiBvZiB0aGUgcmV0dXJuZWQgcmF0ZSBmcm9tIHRoZSBneXJvLg0KKyAqLw0KK2Zsb2F0IEd5cm86OkdldEFuZ2xlKCB2b2lkICkNCit7DQorCUlOVDY0IHJhd1ZhbHVlOw0KKwlVSU5UMzIgY291bnQ7DQorCW1fYW5hbG9nLT5HZXRBY2N1bXVsYXRvck91dHB1dCgmcmF3VmFsdWUsICZjb3VudCk7DQorDQorCUlOVDY0IHZhbHVlID0gcmF3VmFsdWUgLSAoSU5UNjQpKChmbG9hdCljb3VudCAqIG1fb2Zmc2V0KTsNCisNCisJZG91YmxlIHNjYWxlZFZhbHVlID0gdmFsdWUgKiAxZS05ICogKGRvdWJsZSltX2FuYWxvZy0+R2V0TFNCV2VpZ2h0KCkgKiAoZG91YmxlKSgxIDw8IG1fYW5hbG9nLT5HZXRBdmVyYWdlQml0cygpKSAvDQorCQkobV9hbmFsb2ctPkdldE1vZHVsZSgpLT5HZXRTYW1wbGVSYXRlKCkgKiBtX3ZvbHRzUGVyRGVncmVlUGVyU2Vjb25kKTsNCisNCisJcmV0dXJuIChmbG9hdClzY2FsZWRWYWx1ZTsNCit9DQorDQorDQorLyoqDQorICogU2V0IHRoZSBneXJvIHR5cGUgYmFzZWQgb24gdGhlIHNlbnNpdGl2aXR5Lg0KKyAqIFRoaXMgdGFrZXMgdGhlIG51bWJlciBvZiB2b2x0cy9kZWdyZWUvc2Vjb25kIHNlbnNpdGl2aXR5IG9mIHRoZSBneXJvIGFuZCB1c2VzIGl0IGluIHN1YnNlcXVlbnQNCisgKiBjYWxjdWxhdGlvbnMgdG8gYWxsb3cgdGhlIGNvZGUgdG8gd29yayB3aXRoIG11bHRpcGxlIGd5cm9zLg0KKyAqIA0KKyAqIEBwYXJhbSB2b2x0c1BlckRlZ3JlZVBlclNlY29uZCBUaGUgdHlwZSBvZiBneXJvIHNwZWNpZmllZCBhcyB0aGUgdm9sdGFnZSB0aGF0IHJlcHJlc2VudHMgb25lIGRlZ3JlZS9zZWNvbmQuDQorICovDQordm9pZCBHeXJvOjpTZXRTZW5zaXRpdml0eSggZmxvYXQgdm9sdHNQZXJEZWdyZWVQZXJTZWNvbmQgKQ0KK3sNCisJbV92b2x0c1BlckRlZ3JlZVBlclNlY29uZCA9IHZvbHRzUGVyRGVncmVlUGVyU2Vjb25kOw0KK30NCisNCisvKioNCisgKiBHZXQgdGhlIGFuZ2xlIGluIGRlZ3JlZXMgZm9yIHRoZSBQSURTb3VyY2UgYmFzZSBvYmplY3QuDQorICogDQorICogQHJldHVybiBUaGUgYW5nbGUgaW4gZGVncmVlcy4NCisgKi8NCitkb3VibGUgR3lybzo6UElER2V0KCkNCit7DQorCXJldHVybiBHZXRBbmdsZSgpOw0KK30NCisNCit2b2lkIEd5cm86OlVwZGF0ZVRhYmxlKCkgew0KKwlpZiAobV90YWJsZSAhPSBOVUxMKSB7DQorCQltX3RhYmxlLT5QdXROdW1iZXIoIlZhbHVlIiwgR2V0QW5nbGUoKSk7DQorCX0NCit9DQorDQordm9pZCBHeXJvOjpTdGFydExpdmVXaW5kb3dNb2RlKCkgew0KKwkNCit9DQorDQordm9pZCBHeXJvOjpTdG9wTGl2ZVdpbmRvd01vZGUoKSB7DQorCQ0KK30NCisNCitzdGQ6OnN0cmluZyBHeXJvOjpHZXRTbWFydERhc2hib2FyZFR5cGUoKSB7DQorCXJldHVybiAiR3lybyI7DQorfQ0KKw0KK3ZvaWQgR3lybzo6SW5pdFRhYmxlKElUYWJsZSAqc3ViVGFibGUpIHsNCisJbV90YWJsZSA9IHN1YlRhYmxlOw0KKwlVcGRhdGVUYWJsZSgpOw0KK30NCisNCitJVGFibGUgKiBHeXJvOjpHZXRUYWJsZSgpIHsNCisJcmV0dXJuIG1fdGFibGU7DQorfQ0KKw0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0d5cm8uaCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0d5cm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMTA2YTk4Ci0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvR3lyby5oCkBAIC0wLDAgKzEsNjUgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorLyogQ29weXJpZ2h0IChjKSBGSVJTVCAyMDA4LiBBbGwgUmlnaHRzIFJlc2VydmVkLgkJCQkJCQkgICovDQorLyogT3BlbiBTb3VyY2UgU29mdHdhcmUgLSBtYXkgYmUgbW9kaWZpZWQgYW5kIHNoYXJlZCBieSBGUkMgdGVhbXMuIFRoZSBjb2RlICAgKi8NCisvKiBtdXN0IGJlIGFjY29tcGFuaWVkIGJ5IHRoZSBGSVJTVCBCU0QgbGljZW5zZSBmaWxlIGluICQoV0lORF9CQVNFKS9XUElMaWIuICAqLw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorI2lmbmRlZiBHWVJPX0hfDQorI2RlZmluZSBHWVJPX0hfDQorDQorI2luY2x1ZGUgIlNlbnNvckJhc2UuaCINCisjaW5jbHVkZSAiUElEU291cmNlLmgiDQorI2luY2x1ZGUgIkxpdmVXaW5kb3cvTGl2ZVdpbmRvd1NlbmRhYmxlLmgiDQorDQorY2xhc3MgQW5hbG9nQ2hhbm5lbDsNCitjbGFzcyBBbmFsb2dNb2R1bGU7DQorDQorLyoqDQorICogVXNlIGEgcmF0ZSBneXJvIHRvIHJldHVybiB0aGUgcm9ib3RzIGhlYWRpbmcgcmVsYXRpdmUgdG8gYSBzdGFydGluZyBwb3NpdGlvbi4NCisgKiBUaGUgR3lybyBjbGFzcyB0cmFja3MgdGhlIHJvYm90cyBoZWFkaW5nIGJhc2VkIG9uIHRoZSBzdGFydGluZyBwb3NpdGlvbi4gQXMgdGhlIHJvYm90DQorICogcm90YXRlcyB0aGUgbmV3IGhlYWRpbmcgaXMgY29tcHV0ZWQgYnkgaW50ZWdyYXRpbmcgdGhlIHJhdGUgb2Ygcm90YXRpb24gcmV0dXJuZWQNCisgKiBieSB0aGUgc2Vuc29yLiBXaGVuIHRoZSBjbGFzcyBpcyBpbnN0YW50aWF0ZWQsIGl0IGRvZXMgYSBzaG9ydCBjYWxpYnJhdGlvbiByb3V0aW5lDQorICogd2hlcmUgaXQgc2FtcGxlcyB0aGUgZ3lybyB3aGlsZSBhdCByZXN0IHRvIGRldGVybWluZSB0aGUgZGVmYXVsdCBvZmZzZXQuIFRoaXMgaXMNCisgKiBzdWJ0cmFjdGVkIGZyb20gZWFjaCBzYW1wbGUgdG8gZGV0ZXJtaW5lIHRoZSBoZWFkaW5nLiBUaGlzIGd5cm8gY2xhc3MgbXVzdCBiZSB1c2VkIA0KKyAqIHdpdGggYSBjaGFubmVsIHRoYXQgaXMgYXNzaWduZWQgb25lIG9mIHRoZSBBbmFsb2cgYWNjdW11bGF0b3JzIGZyb20gdGhlIEZQR0EuIFNlZQ0KKyAqIEFuYWxvZ0NoYW5uZWwgZm9yIHRoZSBjdXJyZW50IGFjY3VtdWxhdG9yIGFzc2lnbm1lbnRzLg0KKyAqLw0KK2NsYXNzIEd5cm8gOiBwdWJsaWMgU2Vuc29yQmFzZSwgcHVibGljIFBJRFNvdXJjZSwgcHVibGljIExpdmVXaW5kb3dTZW5kYWJsZQ0KK3sNCitwdWJsaWM6DQorCXN0YXRpYyBjb25zdCBVSU5UMzIga092ZXJzYW1wbGVCaXRzID0gMTA7DQorCXN0YXRpYyBjb25zdCBVSU5UMzIga0F2ZXJhZ2VCaXRzID0gMDsNCisJc3RhdGljIGNvbnN0IGZsb2F0IGtTYW1wbGVzUGVyU2Vjb25kID0gNTAuMDsNCisJc3RhdGljIGNvbnN0IGZsb2F0IGtDYWxpYnJhdGlvblNhbXBsZVRpbWUgPSA1LjA7DQorCXN0YXRpYyBjb25zdCBmbG9hdCBrRGVmYXVsdFZvbHRzUGVyRGVncmVlUGVyU2Vjb25kID0gMC4wMDc7DQorDQorCUd5cm8oVUlOVDggbW9kdWxlTnVtYmVyLCBVSU5UMzIgY2hhbm5lbCk7DQorCWV4cGxpY2l0IEd5cm8oVUlOVDMyIGNoYW5uZWwpOw0KKwlleHBsaWNpdCBHeXJvKEFuYWxvZ0NoYW5uZWwgKmNoYW5uZWwpOw0KKwlleHBsaWNpdCBHeXJvKEFuYWxvZ0NoYW5uZWwgJmNoYW5uZWwpOw0KKwl2aXJ0dWFsIH5HeXJvKCk7DQorCXZpcnR1YWwgZmxvYXQgR2V0QW5nbGUoKTsNCisJdm9pZCBTZXRTZW5zaXRpdml0eShmbG9hdCB2b2x0c1BlckRlZ3JlZVBlclNlY29uZCk7DQorCXZpcnR1YWwgdm9pZCBSZXNldCgpOw0KKw0KKwkvLyBQSURTb3VyY2UgaW50ZXJmYWNlDQorCWRvdWJsZSBQSURHZXQoKTsNCisJDQorCXZvaWQgVXBkYXRlVGFibGUoKTsNCisJdm9pZCBTdGFydExpdmVXaW5kb3dNb2RlKCk7DQorCXZvaWQgU3RvcExpdmVXaW5kb3dNb2RlKCk7DQorCXN0ZDo6c3RyaW5nIEdldFNtYXJ0RGFzaGJvYXJkVHlwZSgpOw0KKwl2b2lkIEluaXRUYWJsZShJVGFibGUgKnN1YlRhYmxlKTsNCisJSVRhYmxlICogR2V0VGFibGUoKTsNCisNCitwcml2YXRlOg0KKwl2b2lkIEluaXRHeXJvKCk7DQorDQorCUFuYWxvZ0NoYW5uZWwgKm1fYW5hbG9nOw0KKwlmbG9hdCBtX3ZvbHRzUGVyRGVncmVlUGVyU2Vjb25kOw0KKwlmbG9hdCBtX29mZnNldDsNCisJYm9vbCBtX2NoYW5uZWxBbGxvY2F0ZWQ7DQorCQ0KKwlJVGFibGUgKm1fdGFibGU7DQorfTsNCisjZW5kaWYNCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9IaVRlY2huaWNDb2xvclNlbnNvci5jcHAgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9IaVRlY2huaWNDb2xvclNlbnNvci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDRkNzBmZAotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0hpVGVjaG5pY0NvbG9yU2Vuc29yLmNwcApAQCAtMCwwICsxLDM4MCBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBDb3B5cmlnaHQgKGMpIEZJUlNUIDIwMDguIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCQkJCQkJCSAgKi8NCisvKiBPcGVuIFNvdXJjZSBTb2Z0d2FyZSAtIG1heSBiZSBtb2RpZmllZCBhbmQgc2hhcmVkIGJ5IEZSQyB0ZWFtcy4gVGhlIGNvZGUgICAqLw0KKy8qIG11c3QgYmUgYWNjb21wYW5pZWQgYnkgdGhlIEZJUlNUIEJTRCBsaWNlbnNlIGZpbGUgaW4gJChXSU5EX0JBU0UpL1dQSUxpYi4gICovDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisjaW5jbHVkZSAiSGlUZWNobmljQ29sb3JTZW5zb3IuaCINCisjaW5jbHVkZSAiRGlnaXRhbE1vZHVsZS5oIg0KKyNpbmNsdWRlICJJMkMuaCINCisjaW5jbHVkZSAiTmV0d29ya0NvbW11bmljYXRpb24vVXNhZ2VSZXBvcnRpbmcuaCINCisjaW5jbHVkZSAiV1BJRXJyb3JzLmgiDQorDQorY29uc3QgVUlOVDggSGlUZWNobmljQ29sb3JTZW5zb3I6OmtBZGRyZXNzOw0KK2NvbnN0IFVJTlQ4IEhpVGVjaG5pY0NvbG9yU2Vuc29yOjprTWFudWZhY3R1cmVyQmFzZVJlZ2lzdGVyOw0KK2NvbnN0IFVJTlQ4IEhpVGVjaG5pY0NvbG9yU2Vuc29yOjprTWFudWZhY3R1cmVyU2l6ZTsNCitjb25zdCBVSU5UOCBIaVRlY2huaWNDb2xvclNlbnNvcjo6a1NlbnNvclR5cGVCYXNlUmVnaXN0ZXI7DQorY29uc3QgVUlOVDggSGlUZWNobmljQ29sb3JTZW5zb3I6OmtTZW5zb3JUeXBlU2l6ZTsNCitjb25zdCBVSU5UOCBIaVRlY2huaWNDb2xvclNlbnNvcjo6a01vZGVSZWdpc3RlcjsNCitjb25zdCBVSU5UOCBIaVRlY2huaWNDb2xvclNlbnNvcjo6a0NvbG9yUmVnaXN0ZXI7DQorY29uc3QgVUlOVDggSGlUZWNobmljQ29sb3JTZW5zb3I6OmtSZWRSZWdpc3RlcjsNCitjb25zdCBVSU5UOCBIaVRlY2huaWNDb2xvclNlbnNvcjo6a0dyZWVuUmVnaXN0ZXI7DQorY29uc3QgVUlOVDggSGlUZWNobmljQ29sb3JTZW5zb3I6OmtCbHVlUmVnaXN0ZXI7DQorY29uc3QgVUlOVDggSGlUZWNobmljQ29sb3JTZW5zb3I6OmtSYXdSZWRSZWdpc3RlcjsNCitjb25zdCBVSU5UOCBIaVRlY2huaWNDb2xvclNlbnNvcjo6a1Jhd0dyZWVuUmVnaXN0ZXI7DQorY29uc3QgVUlOVDggSGlUZWNobmljQ29sb3JTZW5zb3I6OmtSYXdCbHVlUmVnaXN0ZXI7DQorDQorLyoqDQorICogQ29uc3RydWN0b3IuDQorICogDQorICogQHBhcmFtIG1vZHVsZU51bWJlciBUaGUgZGlnaXRhbCBtb2R1bGUgdGhhdCB0aGUgc2Vuc29yIGlzIHBsdWdnZWQgaW50byAoMSBvciAyKS4NCisgKi8NCitIaVRlY2huaWNDb2xvclNlbnNvcjo6SGlUZWNobmljQ29sb3JTZW5zb3IoVUlOVDggbW9kdWxlTnVtYmVyKQ0KKwk6IG1faTJjIChOVUxMKQ0KK3sNCisJRGlnaXRhbE1vZHVsZSAqbW9kdWxlID0gRGlnaXRhbE1vZHVsZTo6R2V0SW5zdGFuY2UobW9kdWxlTnVtYmVyKTsNCisJbV9tb2RlID0ga0FjdGl2ZTsNCisJDQorCWlmIChtb2R1bGUpDQorCXsNCisJCW1faTJjID0gbW9kdWxlLT5HZXRJMkMoa0FkZHJlc3MpOw0KKwkNCisJCS8vIFZlcmlmeSBTZW5zb3INCisJCWNvbnN0IFVJTlQ4IGtFeHBlY3RlZE1hbnVmYWN0dXJlcltdID0gIkhpVGVjaG5jIjsNCisJCWNvbnN0IFVJTlQ4IGtFeHBlY3RlZFNlbnNvclR5cGVbXSA9ICJDb2xvclBEICI7DQorCQlpZiAoICEgbV9pMmMtPlZlcmlmeVNlbnNvcihrTWFudWZhY3R1cmVyQmFzZVJlZ2lzdGVyLCBrTWFudWZhY3R1cmVyU2l6ZSwga0V4cGVjdGVkTWFudWZhY3R1cmVyKSApDQorCQl7DQorCQkJd3BpX3NldFdQSUVycm9yKENvbXBhc3NNYW51ZmFjdHVyZXJFcnJvcik7DQorCQkJcmV0dXJuOw0KKwkJfQ0KKwkJaWYgKCAhIG1faTJjLT5WZXJpZnlTZW5zb3Ioa1NlbnNvclR5cGVCYXNlUmVnaXN0ZXIsIGtTZW5zb3JUeXBlU2l6ZSwga0V4cGVjdGVkU2Vuc29yVHlwZSkgKQ0KKwkJew0KKwkJCXdwaV9zZXRXUElFcnJvcihDb21wYXNzVHlwZUVycm9yKTsNCisJCX0NCisJCQ0KKwkJblVzYWdlUmVwb3J0aW5nOjpyZXBvcnQoblVzYWdlUmVwb3J0aW5nOjprUmVzb3VyY2VUeXBlX0hpVGVjaG5pY0NvbG9yU2Vuc29yLCBtb2R1bGVOdW1iZXIgLSAxKTsNCisJfQ0KK30NCisNCisvKioNCisgKiBEZXN0cnVjdG9yLg0KKyAqLw0KK0hpVGVjaG5pY0NvbG9yU2Vuc29yOjp+SGlUZWNobmljQ29sb3JTZW5zb3IoKQ0KK3sNCisJZGVsZXRlIG1faTJjOw0KKwltX2kyYyA9IE5VTEw7DQorfQ0KKw0KKy8qKg0KKyAqIEdldCB0aGUgZXN0aW1hdGVkIGNvbG9yLg0KKyAqDQorICogR2V0cyBhIGNvbG9yIGVzdGltYXRlIGZyb20gdGhlIHNlbnNvciBjb3JyZXNwb25kaW5nIHRvIHRoZQ0KKyAqIHRhYmxlIGZvdW5kIHdpdGggdGhlIHNlbnNvciBvciBhdCB0aGUgZm9sbG93aW5nIHNpdGU6DQorICogaHR0cDovL3d3dy5oaXRlY2huaWMuY29tL2NnaS1iaW4vY29tbWVyY2UuY2dpP3ByZWFkZD1hY3Rpb24ma2V5PU5DTzEwMzgNCisgKg0KKyAqIEByZXR1cm4gVGhlIGVzdGltYXRlZCBjb2xvci4NCisgKi8NCitVSU5UOCBIaVRlY2huaWNDb2xvclNlbnNvcjo6R2V0Q29sb3IoKQ0KK3sNCisJVUlOVDggY29sb3IgPSAwOw0KKwkNCisJaWYobV9tb2RlICE9IGtBY3RpdmUpDQorCXsNCisJCVNldE1vZGUoa0FjdGl2ZSk7DQorCX0NCisJaWYgKG1faTJjKQ0KKwl7DQorCQltX2kyYy0+UmVhZChrQ29sb3JSZWdpc3Rlciwgc2l6ZW9mKGNvbG9yKSwgJmNvbG9yKTsNCisJfQ0KKwlyZXR1cm4gY29sb3I7DQorfQ0KKw0KKy8qKg0KKyAqIEdldCB0aGUgUmVkIHZhbHVlLg0KKyAqDQorICogR2V0cyB0aGUgKDAtMjU1KSByZWQgdmFsdWUgZnJvbSB0aGUgc2Vuc29yLg0KKyAqIA0KKyAqIFRoZSBzZW5zb3IgbXVzdCBiZSBpbiBhY3RpdmUgbW9kZSB0byBhY2Nlc3MgdGhlIHJlZ3VsYXIgUkdCIGRhdGENCisgKiBpZiB0aGUgc2Vuc29yIGlzIG5vdCBpbiBhY3RpdmUgbW9kZSwgaXQgd2lsbCBiZSBwbGFjZWQgaW50byBhY3RpdmUNCisgKiBtb2RlIGJ5IHRoaXMgbWV0aG9kLg0KKyAqDQorICogQHJldHVybiBUaGUgUmVkIHNlbnNvciB2YWx1ZS4NCisgKi8NCitVSU5UOCBIaVRlY2huaWNDb2xvclNlbnNvcjo6R2V0UmVkKCkNCit7DQorCVVJTlQ4IHJlZCA9IDA7DQorCQ0KKwlpZihtX21vZGUgIT0ga0FjdGl2ZSkNCisJew0KKwkJU2V0TW9kZShrQWN0aXZlKTsNCisJfQ0KKwlpZiAobV9pMmMpDQorCXsNCisJCW1faTJjLT5SZWFkKGtSZWRSZWdpc3Rlciwgc2l6ZW9mKHJlZCksICZyZWQpOw0KKwl9DQorCXJldHVybiByZWQ7DQorfQ0KKw0KKy8qKg0KKyAqIEdldCB0aGUgR3JlZW4gdmFsdWUuDQorICoNCisgKiBHZXRzIHRoZSgwLTI1NSkgZ3JlZW4gdmFsdWUgZnJvbSB0aGUgc2Vuc29yLg0KKyAqIA0KKyAqIFRoZSBzZW5zb3IgbXVzdCBiZSBpbiBhY3RpdmUgbW9kZSB0byBhY2Nlc3MgdGhlIHJlZ3VsYXIgUkdCIGRhdGENCisgKiBpZiB0aGUgc2Vuc29yIGlzIG5vdCBpbiBhY3RpdmUgbW9kZSwgaXQgd2lsbCBiZSBwbGFjZWQgaW50byBhY3RpdmUNCisgKiBtb2RlIGJ5IHRoaXMgbWV0aG9kLg0KKyAqIA0KKyAqIEByZXR1cm4gVGhlIEdyZWVuIHNlbnNvciB2YWx1ZS4NCisgKi8NCitVSU5UOCBIaVRlY2huaWNDb2xvclNlbnNvcjo6R2V0R3JlZW4oKQ0KK3sNCisJVUlOVDggZ3JlZW4gPSAwOw0KKwkNCisJaWYobV9tb2RlICE9IGtBY3RpdmUpDQorCXsNCisJCVNldE1vZGUoa0FjdGl2ZSk7DQorCX0NCisJaWYgKG1faTJjKQ0KKwl7DQorCQltX2kyYy0+UmVhZChrR3JlZW5SZWdpc3Rlciwgc2l6ZW9mKGdyZWVuKSwgJmdyZWVuKTsNCisJfQ0KKwlyZXR1cm4gZ3JlZW47DQorfQ0KKw0KKy8qKg0KKyAqIEdldCB0aGUgQmx1ZSB2YWx1ZS4NCisgKg0KKyAqIEdldHMgdGhlIHJhdyAoMC0yNTUpIGJsdWUgdmFsdWUgZnJvbSB0aGUgc2Vuc29yLg0KKyAqIA0KKyAqIFRoZSBzZW5zb3IgbXVzdCBiZSBpbiBhY3RpdmUgbW9kZSB0byBhY2Nlc3MgdGhlIHJlZ3VsYXIgUkdCIGRhdGENCisgKiBpZiB0aGUgc2Vuc29yIGlzIG5vdCBpbiBhY3RpdmUgbW9kZSwgaXQgd2lsbCBiZSBwbGFjZWQgaW50byBhY3RpdmUNCisgKiBtb2RlIGJ5IHRoaXMgbWV0aG9kLg0KKyAqIA0KKyAqIEByZXR1cm4gVGhlIEJsdWUgc2Vuc29yIHZhbHVlLg0KKyAqLw0KK1VJTlQ4IEhpVGVjaG5pY0NvbG9yU2Vuc29yOjpHZXRCbHVlKCkNCit7DQorCVVJTlQ4IGJsdWUgPSAwOw0KKwkNCisJaWYobV9tb2RlICE9IGtBY3RpdmUpDQorCXsNCisJCVNldE1vZGUoa0FjdGl2ZSk7DQorCX0NCisJaWYgKG1faTJjKQ0KKwl7DQorCQltX2kyYy0+UmVhZChrQmx1ZVJlZ2lzdGVyLCBzaXplb2YoYmx1ZSksICZibHVlKTsNCisJfQ0KKwlyZXR1cm4gYmx1ZTsNCit9DQorDQorLyoqDQorICogR2V0IHRoZSB2YWx1ZSBvZiBhbGwgdGhyZWUgY29sb3JzIGZyb20gYSBzaW5nbGUgc2Vuc29yIHJlYWRpbmcuDQorICogVXNpbmcgdGhpcyBtZXRob2QgZW5zdXJlcyB0aGF0IGFsbCB0aHJlZSB2YWx1ZXMgY29tZSBmcm9tIHRoZQ0KKyAqIHNhbWUgc2Vuc29yIHJlYWRpbmcsIHVzaW5nIHRoZSBpbmRpdmlkdWFsIGNvbG9yIG1ldGhvZHMgcHJvdmlkZXMNCisgKiBubyBzdWNoIGd1YXJhbnRlZS4NCisgKiANCisgKiBUaGUgc2Vuc29yIG11c3QgYmUgaW4gYWN0aXZlIG1vZGUgdG8gYWNjZXNzIHRoZSByZWd1bGFyIFJHQiBkYXRhLg0KKyAqIElmIHRoZSBzZW5zb3IgaXMgbm90IGluIGFjdGl2ZSBtb2RlLCBpdCB3aWxsIGJlIHBsYWNlZCBpbnRvIGFjdGl2ZQ0KKyAqIG1vZGUgYnkgdGhpcyBtZXRob2QuDQorICogDQorICogQHJldHVybiBSR0Igb2JqZWN0IHdpdGggdGhlIHRocmVlIGNvbG9yIHZhbHVlcw0KKyAqLw0KK0hpVGVjaG5pY0NvbG9yU2Vuc29yOjpSR0IgSGlUZWNobmljQ29sb3JTZW5zb3I6OkdldFJHQigpDQorew0KKwlVSU5UOCBjb2xvcnNbM10gPSB7MCwwLDB9Ow0KKwlSR0IgcmVzdWx0Ow0KKwkNCisJaWYobV9tb2RlICE9IGtBY3RpdmUpDQorCXsNCisJCVNldE1vZGUoa0FjdGl2ZSk7DQorCX0NCisJaWYobV9pMmMpDQorCXsNCisJCW1faTJjLT5SZWFkKGtSYXdSZWRSZWdpc3Rlciwgc2l6ZW9mKGNvbG9ycyksIChVSU5UOCopJmNvbG9ycyk7DQorCX0NCisJDQorCXJlc3VsdC5yZWQgPSBjb2xvcnNbMF07DQorCXJlc3VsdC5ncmVlbiA9IGNvbG9yc1sxXTsNCisJcmVzdWx0LmJsdWUgPSBjb2xvcnNbMl07DQorCQ0KKwlyZXR1cm4gcmVzdWx0Ow0KK30NCisNCisvKioNCisgKiBHZXQgdGhlIFJhdyBSZWQgdmFsdWUuDQorICoNCisgKiBHZXRzIHRoZSAoMC02NTUzNikgcmF3IHJlZCB2YWx1ZSBmcm9tIHRoZSBzZW5zb3IuDQorICogDQorICogVGhlIHNlbnNvciBtdXN0IGJlIGluIHJhdyBvciBwYXNzaXZlIG1vZGUgdG8gYWNjZXNzIHRoZSByZWd1bGFyIFJHQiBkYXRhDQorICogaWYgdGhlIHNlbnNvciBpcyBub3QgaW4gcmF3IG9yIHBhc3NpdmUgbW9kZSwgaXQgd2lsbCBiZSBwbGFjZWQgaW50byByYXcNCisgKiBtb2RlIGJ5IHRoaXMgbWV0aG9kLg0KKyAqDQorICogQHJldHVybiBUaGUgUmF3IFJlZCBzZW5zb3IgdmFsdWUuDQorICovDQorVUlOVDE2IEhpVGVjaG5pY0NvbG9yU2Vuc29yOjpHZXRSYXdSZWQoKQ0KK3sNCisJVUlOVDE2IHJhd1JlZCA9IDA7DQorCQ0KKwlpZihtX21vZGUgPT0ga0FjdGl2ZSkNCisJew0KKwkJU2V0TW9kZShrUmF3KTsNCisJfQ0KKwlpZiAobV9pMmMpDQorCXsNCisJCW1faTJjLT5SZWFkKGtSYXdSZWRSZWdpc3Rlciwgc2l6ZW9mKHJhd1JlZCksIChVSU5UOCAqKSZyYXdSZWQpOw0KKwl9DQorCXJldHVybiByYXdSZWQ7DQorfQ0KKw0KKy8qKg0KKyAgICogR2V0IHRoZSBSYXcgR3JlZW4gdmFsdWUuDQorICAgKg0KKyAgICogR2V0cyB0aGUgKDAtNjU1MzYpIHJhdyBncmVlbiB2YWx1ZSBmcm9tIHRoZSBzZW5zb3IuDQorICAgKiANCisgICAqIFRoZSBzZW5zb3IgbXVzdCBiZSBpbiByYXcgb3IgcGFzc2l2ZSBtb2RlIHRvIGFjY2VzcyB0aGUgcmVndWxhciBSR0IgZGF0YQ0KKyAgICogaWYgdGhlIHNlbnNvciBpcyBub3QgaW4gcmF3IG9yIHBhc3NpdmUgbW9kZSwgaXQgd2lsbCBiZSBwbGFjZWQgaW50byByYXcNCisgICAqIG1vZGUgYnkgdGhpcyBtZXRob2QuDQorICAgKg0KKyAgICogQHJldHVybiBUaGUgUmF3IEdyZWVuIHNlbnNvciB2YWx1ZS4NCisgICAqLw0KK1VJTlQxNiBIaVRlY2huaWNDb2xvclNlbnNvcjo6R2V0UmF3R3JlZW4oKQ0KK3sNCisJVUlOVDE2IHJhd0dyZWVuID0gMDsNCisJDQorCWlmKG1fbW9kZSA9PSBrQWN0aXZlKQ0KKwl7DQorCQlTZXRNb2RlKGtSYXcpOw0KKwl9DQorCWlmIChtX2kyYykNCisJew0KKwkJbV9pMmMtPlJlYWQoa1Jhd0dyZWVuUmVnaXN0ZXIsIHNpemVvZihyYXdHcmVlbiksIChVSU5UOCAqKSZyYXdHcmVlbik7DQorCX0NCisJcmV0dXJuIHJhd0dyZWVuOw0KK30NCisNCisvKioNCisgKiBHZXQgdGhlIFJhdyBCbHVlIHZhbHVlLg0KKyAqDQorICogR2V0cyB0aGUgKDAtNjU1MzYpIHJhdyBibHVlIHZhbHVlIGZyb20gdGhlIHNlbnNvci4NCisgKiANCisgKiBUaGUgc2Vuc29yIG11c3QgYmUgaW4gcmF3IG9yIHBhc3NpdmUgbW9kZSB0byBhY2Nlc3MgdGhlIHJlZ3VsYXIgUkdCIGRhdGENCisgKiBpZiB0aGUgc2Vuc29yIGlzIG5vdCBpbiByYXcgb3IgcGFzc2l2ZSBtb2RlLCBpdCB3aWxsIGJlIHBsYWNlZCBpbnRvIHJhdw0KKyAqIG1vZGUgYnkgdGhpcyBtZXRob2QuDQorICoNCisgKiBAcmV0dXJuIFRoZSBSYXcgQmx1ZSBzZW5zb3IgdmFsdWUuDQorICovDQorVUlOVDE2IEhpVGVjaG5pY0NvbG9yU2Vuc29yOjpHZXRSYXdCbHVlKCkNCit7DQorCVVJTlQxNiByYXdCbHVlID0gMDsNCisJDQorCWlmKG1fbW9kZSA9PSBrQWN0aXZlKQ0KKwl7DQorCQlTZXRNb2RlKGtSYXcpOw0KKwl9DQorCWlmIChtX2kyYykNCisJew0KKwkJbV9pMmMtPlJlYWQoa1Jhd0JsdWVSZWdpc3Rlciwgc2l6ZW9mKHJhd0JsdWUpLCAoVUlOVDggKikmcmF3Qmx1ZSk7DQorCX0NCisJcmV0dXJuIHJhd0JsdWU7DQorfQ0KKw0KKy8qKg0KKyAqIEdldCB0aGUgcmF3IHZhbHVlIG9mIGFsbCB0aHJlZSBjb2xvcnMgZnJvbSBhIHNpbmdsZSBzZW5zb3IgcmVhZGluZy4NCisgKiBVc2luZyB0aGlzIG1ldGhvZCBlbnN1cmVzIHRoYXQgYWxsIHRocmVlIHZhbHVlcyBjb21lIGZyb20gdGhlDQorICogc2FtZSBzZW5zb3IgcmVhZGluZywgdXNpbmcgdGhlIGluZGl2aWR1YWwgY29sb3IgbWV0aG9kcyBwcm92aWRlcw0KKyAqIG5vIHN1Y2ggZ3VhcmFudGVlLg0KKyAqDQorICogR2V0cyB0aGUgKDAtNjU1MzYpIHJhdyBjb2xvciB2YWx1ZXMgZnJvbSB0aGUgc2Vuc29yLg0KKyAqIA0KKyAqIFRoZSBzZW5zb3IgbXVzdCBiZSBpbiByYXcgb3IgcGFzc2l2ZSBtb2RlIHRvIGFjY2VzcyB0aGUgcmVndWxhciBSR0IgZGF0YQ0KKyAqIGlmIHRoZSBzZW5zb3IgaXMgbm90IGluIHJhdyBvciBwYXNzaXZlIG1vZGUsIGl0IHdpbGwgYmUgcGxhY2VkIGludG8gcmF3DQorICogbW9kZSBieSB0aGlzIG1ldGhvZC4NCisgKg0KKyAqIEByZXR1cm4gQW4gUkdCIG9iamVjdCB3aXRoIHRoZSByYXcgc2Vuc29yIHZhbHVlcy4NCisgKi8NCitIaVRlY2huaWNDb2xvclNlbnNvcjo6UkdCIEhpVGVjaG5pY0NvbG9yU2Vuc29yOjpHZXRSYXdSR0IoKQ0KK3sNCisJVUlOVDggY29sb3JzWzZdID0gezAsMCwwLDAsMCwwfTsNCisJUkdCIHJlc3VsdDsNCisJDQorCWlmKG1fbW9kZSAhPSBrQWN0aXZlKQ0KKwl7DQorCQlTZXRNb2RlKGtBY3RpdmUpOw0KKwl9DQorCWlmKG1faTJjKQ0KKwl7DQorCQltX2kyYy0+UmVhZChrUmVkUmVnaXN0ZXIsIHNpemVvZihjb2xvcnMpLCAoVUlOVDgqKSZjb2xvcnMpOw0KKwl9DQorCQ0KKwlyZXN1bHQucmVkID0gKGNvbG9yc1swXTw8OCkgKyBjb2xvcnNbMV07DQorCXJlc3VsdC5ncmVlbiA9IChjb2xvcnNbMl08PDgpICsgY29sb3JzWzNdOw0KKwlyZXN1bHQuYmx1ZSA9IChjb2xvcnNbNF08PDgpICsgY29sb3JzWzVdOw0KKwkNCisJcmV0dXJuIHJlc3VsdDsNCit9DQorDQorLyoqDQorICogU2V0IHRoZSBNb2RlIG9mIHRoZSBjb2xvciBzZW5zb3INCisgKiBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIHNldCB0aGUgY29sb3Igc2Vuc29yIHRvIG9uZSBvZiB0aGUgdGhyZWUgbW9kZXMsDQorICogYWN0aXZlLCBwYXNzaXZlIG9yIHJhdy4gVGhlIHNlbnNvciBkZWZhdWx0cyB0byBhY3RpdmUgbW9kZSB3aGljaCB1c2VzIHRoZQ0KKyAqIGludGVybmFsIExFRCBhbmQgcmV0dXJucyBhbiBpbnRlcnByZXRlZCBjb2xvciB2YWx1ZSBhbmQgMyA4LWJpdCBSR0IgY2hhbm5lbA0KKyAqIHZhbHVlcy4gUmF3IG1vZGUgdXNlcyB0aGUgaW50ZXJuYWwgTEVEIGFuZCByZXR1cm5zIDMgMTYtYml0IFJHQiBjaGFubmVsIHZhbHVlcy4NCisgKiBQYXNzaXZlIG1vZGUgZGlzYWJsZXMgdGhlIGludGVybmFsIExFRCBhbmQgcmV0dXJucyAzIDE2LWJpdCBSR0IgY2hhbm5lbCB2YWx1ZXMuDQorICogQHBhcmFtIG1vZGUgVGhlIG1vZGUgdG8gc2V0DQorICovDQordm9pZCBIaVRlY2huaWNDb2xvclNlbnNvcjo6U2V0TW9kZSh0Q29sb3JNb2RlIG1vZGUpDQorew0KKwlpZihtX2kyYykNCisJew0KKwkJbV9pMmMtPldyaXRlKGtNb2RlUmVnaXN0ZXIsIChVSU5UOCltb2RlKTsNCisJfQ0KK30NCisNCisvKg0KKyAqIExpdmUgV2luZG93IGNvZGUsIG9ubHkgZG9lcyBhbnl0aGluZyBpZiBsaXZlIHdpbmRvdyBpcyBhY3RpdmF0ZWQuDQorICovDQorc3RkOjpzdHJpbmcgSGlUZWNobmljQ29sb3JTZW5zb3I6OkdldFR5cGUoKQ0KK3sNCisgICAgcmV0dXJuICJDb21wYXNzIjsNCit9DQorDQorLyoqDQorICoge0Bpbmhlcml0RG9jfQ0KKyAqLw0KK3ZvaWQgSGlUZWNobmljQ29sb3JTZW5zb3I6OkluaXRUYWJsZShJVGFibGUgKnN1YnRhYmxlKSB7DQorICAgIG1fdGFibGUgPSBzdWJ0YWJsZTsNCisgICAgVXBkYXRlVGFibGUoKTsNCit9DQorDQorLyoqDQorICoge0Bpbmhlcml0RG9jfQ0KKyAqLw0KK3ZvaWQgSGlUZWNobmljQ29sb3JTZW5zb3I6OlVwZGF0ZVRhYmxlKCkgew0KKyAgICBpZiAobV90YWJsZSAhPSBOVUxMKSB7DQorICAgICAgICBtX3RhYmxlLT5QdXROdW1iZXIoIlZhbHVlIiwgR2V0Q29sb3IoKSk7DQorICAgIH0NCit9DQorDQorLyoqDQorICoge0Bpbmhlcml0RG9jfQ0KKyAqLw0KK0lUYWJsZSogSGlUZWNobmljQ29sb3JTZW5zb3I6OkdldFRhYmxlKCkNCit7DQorICAgIHJldHVybiBtX3RhYmxlOw0KK30NCisNCisvKioNCisgKiB7QGluaGVyaXREb2N9DQorICovDQordm9pZCBIaVRlY2huaWNDb2xvclNlbnNvcjo6U3RhcnRMaXZlV2luZG93TW9kZSgpDQorew0KKwkNCit9DQorDQorLyoqDQorICoge0Bpbmhlcml0RG9jfQ0KKyAqLw0KK3ZvaWQgSGlUZWNobmljQ29sb3JTZW5zb3I6OlN0b3BMaXZlV2luZG93TW9kZSgpDQorew0KKwkNCit9DQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvSGlUZWNobmljQ29sb3JTZW5zb3IuaCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0hpVGVjaG5pY0NvbG9yU2Vuc29yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2RhZTE4MAotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0hpVGVjaG5pY0NvbG9yU2Vuc29yLmgKQEAgLTAsMCArMSw3OCBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBDb3B5cmlnaHQgKGMpIEZJUlNUIDIwMDguIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCQkJCQkJCSAgKi8NCisvKiBPcGVuIFNvdXJjZSBTb2Z0d2FyZSAtIG1heSBiZSBtb2RpZmllZCBhbmQgc2hhcmVkIGJ5IEZSQyB0ZWFtcy4gVGhlIGNvZGUgICAqLw0KKy8qIG11c3QgYmUgYWNjb21wYW5pZWQgYnkgdGhlIEZJUlNUIEJTRCBsaWNlbnNlIGZpbGUgaW4gJChXSU5EX0JBU0UpL1dQSUxpYi4gICovDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisjaWZuZGVmIF9fSGlUZWNobmljQ29sb3JTZW5zb3JfaF9fDQorI2RlZmluZSBfX0hpVGVjaG5pY0NvbG9yU2Vuc29yX2hfXw0KKw0KKyNpbmNsdWRlICJTZW5zb3JCYXNlLmgiDQorI2luY2x1ZGUgIkxpdmVXaW5kb3cvTGl2ZVdpbmRvd1NlbmRhYmxlLmgiDQorDQorY2xhc3MgSTJDOw0KKw0KKy8qKg0KKyAqIEhpVGVjaG5pYyBOWFQgQ29sb3IgU2Vuc29yLg0KKyAqDQorICogVGhpcyBjbGFzcyBhbGxvd3MgYWNjZXNzIHRvIGEgSGlUZWNobmljIE5YVCBDb2xvciBTZW5zb3Igb24gYW4gSTJDIGJ1cy4NCisgKiBUaGVzZSBzZW5zb3JzIGRvIG5vdCBhbGxvdyBjaGFuZ2luZyBhZGRyZXNzZXMgc28geW91IGNhbm5vdCBoYXZlIG1vcmUNCisgKiB0aGFuIG9uZSBvbiBhIHNpbmdsZSBidXMuDQorICoNCisgKiBEZXRhaWxzIG9uIHRoZSBzZW5zb3IgY2FuIGJlIGZvdW5kIGhlcmU6DQorICogICBodHRwOi8vd3d3LmhpdGVjaG5pYy5jb20vaW5kZXguaHRtbD9sYW5nPWVuLXVzJnRhcmdldD1kMTcuaHRtbA0KKyAqDQorICovDQorY2xhc3MgSGlUZWNobmljQ29sb3JTZW5zb3IgOiBwdWJsaWMgU2Vuc29yQmFzZQ0KK3sNCitwdWJsaWM6DQorCWVudW0gdENvbG9yTW9kZSB7a0FjdGl2ZSA9IDAsIGtQYXNzaXZlID0gMSwga1JhdyA9IDN9Ow0KKwl0eXBlZGVmIHN0cnVjdHsNCisJCVVJTlQxNiByZWQ7DQorCQlVSU5UMTYgYmx1ZTsNCisJCVVJTlQxNiBncmVlbjsNCisJfVJHQjsNCisJZXhwbGljaXQgSGlUZWNobmljQ29sb3JTZW5zb3IoVUlOVDggbW9kdWxlTnVtYmVyKTsNCisJdmlydHVhbCB+SGlUZWNobmljQ29sb3JTZW5zb3IoKTsNCisJVUlOVDggR2V0Q29sb3IoKTsNCisJVUlOVDggR2V0UmVkKCk7DQorCVVJTlQ4IEdldEdyZWVuKCk7DQorCVVJTlQ4IEdldEJsdWUoKTsNCisJUkdCIEdldFJHQigpOw0KKwlVSU5UMTYgR2V0UmF3UmVkKCk7DQorCVVJTlQxNiBHZXRSYXdHcmVlbigpOw0KKwlVSU5UMTYgR2V0UmF3Qmx1ZSgpOw0KKwlSR0IgR2V0UmF3UkdCKCk7DQorCXZvaWQgU2V0TW9kZSh0Q29sb3JNb2RlIG1vZGUpOw0KKwkNCisJDQorCS8vTGl2ZVdpbmRvd1NlbmRhYmxlIGludGVyZmFjZQ0KKwl2aXJ0dWFsIHN0ZDo6c3RyaW5nIEdldFR5cGUoKTsNCisJdmlydHVhbCB2b2lkIEluaXRUYWJsZShJVGFibGUgKnN1YnRhYmxlKTsNCisJdmlydHVhbCB2b2lkIFVwZGF0ZVRhYmxlKCk7DQorCXZpcnR1YWwgSVRhYmxlKiBHZXRUYWJsZSgpOw0KKwl2aXJ0dWFsIHZvaWQgU3RhcnRMaXZlV2luZG93TW9kZSgpOw0KKwl2aXJ0dWFsIHZvaWQgU3RvcExpdmVXaW5kb3dNb2RlKCk7IA0KKw0KK3ByaXZhdGU6DQorCXN0YXRpYyBjb25zdCBVSU5UOCBrQWRkcmVzcyA9IDB4MDI7DQorCXN0YXRpYyBjb25zdCBVSU5UOCBrTWFudWZhY3R1cmVyQmFzZVJlZ2lzdGVyID0gMHgwODsNCisJc3RhdGljIGNvbnN0IFVJTlQ4IGtNYW51ZmFjdHVyZXJTaXplID0gMHgwODsNCisJc3RhdGljIGNvbnN0IFVJTlQ4IGtTZW5zb3JUeXBlQmFzZVJlZ2lzdGVyID0gMHgxMDsNCisJc3RhdGljIGNvbnN0IFVJTlQ4IGtTZW5zb3JUeXBlU2l6ZSA9IDB4MDg7DQorCXN0YXRpYyBjb25zdCBVSU5UOCBrTW9kZVJlZ2lzdGVyID0gMHg0MTsNCisJc3RhdGljIGNvbnN0IFVJTlQ4IGtDb2xvclJlZ2lzdGVyID0gMHg0MjsNCisJc3RhdGljIGNvbnN0IFVJTlQ4IGtSZWRSZWdpc3RlciA9IDB4NDM7DQorCXN0YXRpYyBjb25zdCBVSU5UOCBrR3JlZW5SZWdpc3RlciA9IDB4NDQ7DQorCXN0YXRpYyBjb25zdCBVSU5UOCBrQmx1ZVJlZ2lzdGVyID0gMHg0NTsNCisJc3RhdGljIGNvbnN0IFVJTlQ4IGtSYXdSZWRSZWdpc3RlciA9IDB4NDM7DQorCXN0YXRpYyBjb25zdCBVSU5UOCBrUmF3R3JlZW5SZWdpc3RlciA9IDB4NDU7DQorCXN0YXRpYyBjb25zdCBVSU5UOCBrUmF3Qmx1ZVJlZ2lzdGVyID0gMHg0NzsNCisJDQorCWludCBtX21vZGU7DQorCUkyQyogbV9pMmM7DQorCUlUYWJsZSAqbV90YWJsZTsNCit9Ow0KKw0KKyNlbmRpZg0KKw0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0hpVGVjaG5pY0NvbXBhc3MuY3BwIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvSGlUZWNobmljQ29tcGFzcy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2MzNTNiMwotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0hpVGVjaG5pY0NvbXBhc3MuY3BwCkBAIC0wLDAgKzEsMTA3IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy8qIENvcHlyaWdodCAoYykgRklSU1QgMjAwOC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4JCQkJCQkJICAqLw0KKy8qIE9wZW4gU291cmNlIFNvZnR3YXJlIC0gbWF5IGJlIG1vZGlmaWVkIGFuZCBzaGFyZWQgYnkgRlJDIHRlYW1zLiBUaGUgY29kZSAgICovDQorLyogbXVzdCBiZSBhY2NvbXBhbmllZCBieSB0aGUgRklSU1QgQlNEIGxpY2Vuc2UgZmlsZSBpbiAkKFdJTkRfQkFTRSkvV1BJTGliLiAgKi8NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKyNpbmNsdWRlICJIaVRlY2huaWNDb21wYXNzLmgiDQorI2luY2x1ZGUgIkRpZ2l0YWxNb2R1bGUuaCINCisjaW5jbHVkZSAiSTJDLmgiDQorI2luY2x1ZGUgIk5ldHdvcmtDb21tdW5pY2F0aW9uL1VzYWdlUmVwb3J0aW5nLmgiDQorI2luY2x1ZGUgIldQSUVycm9ycy5oIg0KKyNpbmNsdWRlICJMaXZlV2luZG93L0xpdmVXaW5kb3cuaCINCisNCitjb25zdCBVSU5UOCBIaVRlY2huaWNDb21wYXNzOjprQWRkcmVzczsNCitjb25zdCBVSU5UOCBIaVRlY2huaWNDb21wYXNzOjprTWFudWZhY3R1cmVyQmFzZVJlZ2lzdGVyOw0KK2NvbnN0IFVJTlQ4IEhpVGVjaG5pY0NvbXBhc3M6OmtNYW51ZmFjdHVyZXJTaXplOw0KK2NvbnN0IFVJTlQ4IEhpVGVjaG5pY0NvbXBhc3M6OmtTZW5zb3JUeXBlQmFzZVJlZ2lzdGVyOw0KK2NvbnN0IFVJTlQ4IEhpVGVjaG5pY0NvbXBhc3M6OmtTZW5zb3JUeXBlU2l6ZTsNCitjb25zdCBVSU5UOCBIaVRlY2huaWNDb21wYXNzOjprSGVhZGluZ1JlZ2lzdGVyOw0KKw0KKy8qKg0KKyAqIENvbnN0cnVjdG9yLg0KKyAqIA0KKyAqIEBwYXJhbSBtb2R1bGVOdW1iZXIgVGhlIGRpZ2l0YWwgbW9kdWxlIHRoYXQgdGhlIHNlbnNvciBpcyBwbHVnZ2VkIGludG8gKDEgb3IgMikuDQorICovDQorSGlUZWNobmljQ29tcGFzczo6SGlUZWNobmljQ29tcGFzcyhVSU5UOCBtb2R1bGVOdW1iZXIpDQorCTogbV9pMmMgKE5VTEwpDQorew0KKwlEaWdpdGFsTW9kdWxlICptb2R1bGUgPSBEaWdpdGFsTW9kdWxlOjpHZXRJbnN0YW5jZShtb2R1bGVOdW1iZXIpOw0KKwlpZiAobW9kdWxlKQ0KKwl7DQorCQltX2kyYyA9IG1vZHVsZS0+R2V0STJDKGtBZGRyZXNzKTsNCisJDQorCQkvLyBWZXJpZnkgU2Vuc29yDQorCQljb25zdCBVSU5UOCBrRXhwZWN0ZWRNYW51ZmFjdHVyZXJbXSA9ICJIaVRlY2huYyI7DQorCQljb25zdCBVSU5UOCBrRXhwZWN0ZWRTZW5zb3JUeXBlW10gPSAiQ29tcGFzcyAiOw0KKwkJaWYgKCAhIG1faTJjLT5WZXJpZnlTZW5zb3Ioa01hbnVmYWN0dXJlckJhc2VSZWdpc3Rlciwga01hbnVmYWN0dXJlclNpemUsIGtFeHBlY3RlZE1hbnVmYWN0dXJlcikgKQ0KKwkJew0KKwkJCXdwaV9zZXRXUElFcnJvcihDb21wYXNzTWFudWZhY3R1cmVyRXJyb3IpOw0KKwkJCXJldHVybjsNCisJCX0NCisJCWlmICggISBtX2kyYy0+VmVyaWZ5U2Vuc29yKGtTZW5zb3JUeXBlQmFzZVJlZ2lzdGVyLCBrU2Vuc29yVHlwZVNpemUsIGtFeHBlY3RlZFNlbnNvclR5cGUpICkNCisJCXsNCisJCQl3cGlfc2V0V1BJRXJyb3IoQ29tcGFzc1R5cGVFcnJvcik7DQorCQl9DQorDQorCQluVXNhZ2VSZXBvcnRpbmc6OnJlcG9ydChuVXNhZ2VSZXBvcnRpbmc6OmtSZXNvdXJjZVR5cGVfSGlUZWNobmljQ29tcGFzcywgbW9kdWxlTnVtYmVyIC0gMSk7DQorCQlMaXZlV2luZG93OjpHZXRJbnN0YW5jZSgpLT5BZGRTZW5zb3IoIkhpVGVjaG5pY0NvbXBhc3MiLCBtb2R1bGVOdW1iZXIsIDAsIHRoaXMpOw0KKwl9DQorfQ0KKw0KKy8qKg0KKyAqIERlc3RydWN0b3IuDQorICovDQorSGlUZWNobmljQ29tcGFzczo6fkhpVGVjaG5pY0NvbXBhc3MoKQ0KK3sNCisJZGVsZXRlIG1faTJjOw0KKwltX2kyYyA9IE5VTEw7DQorfQ0KKw0KKy8qKg0KKyAqIEdldCB0aGUgY29tcGFzcyBhbmdsZSBpbiBkZWdyZWVzLg0KKyAqIA0KKyAqIFRoZSByZXNvbHV0aW9uIG9mIHRoaXMgcmVhZGluZyBpcyAxIGRlZ3JlZS4NCisgKiANCisgKiBAcmV0dXJuIEFuZ2xlIG9mIHRoZSBjb21wYXNzIGluIGRlZ3JlZXMuDQorICovDQorZmxvYXQgSGlUZWNobmljQ29tcGFzczo6R2V0QW5nbGUoKQ0KK3sNCisJVUlOVDE2IGhlYWRpbmcgPSAwOw0KKwlpZiAobV9pMmMpDQorCXsNCisJCW1faTJjLT5SZWFkKGtIZWFkaW5nUmVnaXN0ZXIsIHNpemVvZihoZWFkaW5nKSwgKFVJTlQ4ICopJmhlYWRpbmcpOw0KKw0KKwkJLy8gU2Vuc29yIGlzIGxpdHRsZSBlbmRpYW4uLi4gc3dhcCBieXRlcw0KKwkJaGVhZGluZyA9IChoZWFkaW5nID4+IDgpIHwgKGhlYWRpbmcgPDwgOCk7DQorCX0NCisJcmV0dXJuIChmbG9hdCloZWFkaW5nOw0KK30NCisNCit2b2lkIEhpVGVjaG5pY0NvbXBhc3M6OlVwZGF0ZVRhYmxlKCkgew0KKwlpZiAobV90YWJsZSAhPSBOVUxMKSB7DQorCQltX3RhYmxlLT5QdXROdW1iZXIoIlZhbHVlIiwgR2V0QW5nbGUoKSk7DQorCX0NCit9DQorDQordm9pZCBIaVRlY2huaWNDb21wYXNzOjpTdGFydExpdmVXaW5kb3dNb2RlKCkgew0KKwkNCit9DQorDQordm9pZCBIaVRlY2huaWNDb21wYXNzOjpTdG9wTGl2ZVdpbmRvd01vZGUoKSB7DQorCQ0KK30NCisNCitzdGQ6OnN0cmluZyBIaVRlY2huaWNDb21wYXNzOjpHZXRTbWFydERhc2hib2FyZFR5cGUoKSB7DQorCXJldHVybiAiSGlUZWNobmljQ29tcGFzcyI7DQorfQ0KKw0KK3ZvaWQgSGlUZWNobmljQ29tcGFzczo6SW5pdFRhYmxlKElUYWJsZSAqc3ViVGFibGUpIHsNCisJbV90YWJsZSA9IHN1YlRhYmxlOw0KKwlVcGRhdGVUYWJsZSgpOw0KK30NCisNCitJVGFibGUgKiBIaVRlY2huaWNDb21wYXNzOjpHZXRUYWJsZSgpIHsNCisJcmV0dXJuIG1fdGFibGU7DQorfQ0KKw0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0hpVGVjaG5pY0NvbXBhc3MuaCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0hpVGVjaG5pY0NvbXBhc3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYmI4MTk3Ci0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvSGlUZWNobmljQ29tcGFzcy5oCkBAIC0wLDAgKzEsNTUgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorLyogQ29weXJpZ2h0IChjKSBGSVJTVCAyMDA4LiBBbGwgUmlnaHRzIFJlc2VydmVkLgkJCQkJCQkgICovDQorLyogT3BlbiBTb3VyY2UgU29mdHdhcmUgLSBtYXkgYmUgbW9kaWZpZWQgYW5kIHNoYXJlZCBieSBGUkMgdGVhbXMuIFRoZSBjb2RlICAgKi8NCisvKiBtdXN0IGJlIGFjY29tcGFuaWVkIGJ5IHRoZSBGSVJTVCBCU0QgbGljZW5zZSBmaWxlIGluICQoV0lORF9CQVNFKS9XUElMaWIuICAqLw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorI2lmbmRlZiBfX0hpVGVjaG5pY0NvbXBhc3NfaF9fDQorI2RlZmluZSBfX0hpVGVjaG5pY0NvbXBhc3NfaF9fDQorDQorI2luY2x1ZGUgIlNlbnNvckJhc2UuaCINCisjaW5jbHVkZSAiTGl2ZVdpbmRvdy9MaXZlV2luZG93U2VuZGFibGUuaCINCisNCitjbGFzcyBJMkM7DQorDQorLyoqDQorICogSGlUZWNobmljIE5YVCBDb21wYXNzLg0KKyAqIA0KKyAqIFRoaXMgY2xhc3MgYWxvd3MgYWNjZXNzIHRvIGEgSGlUZWNobmljIE5YVCBDb21wYXNzIG9uIGFuIEkyQyBidXMuDQorICogVGhlc2Ugc2Vuc29ycyB0byBub3QgYWxsb3cgY2hhbmdpbmcgYWRkcmVzc2VzIHNvIHlvdSBjYW5ub3QgaGF2ZSBtb3JlDQorICogICB0aGFuIG9uZSBvbiBhIHNpbmdsZSBidXMuDQorICogDQorICogRGV0YWlscyBvbiB0aGUgc2Vuc29yIGNhbiBiZSBmb3VuZCBoZXJlOg0KKyAqICAgaHR0cDovL3d3dy5oaXRlY2huaWMuY29tL2luZGV4Lmh0bWw/bGFuZz1lbi11cyZ0YXJnZXQ9ZDE3Lmh0bWwNCisgKiANCisgKiBAdG9kbyBJbXBsZW1lbnQgYSBjYWxpYnJhdGlvbiBtZXRob2QgZm9yIHRoZSBzZW5zb3IuDQorICovDQorY2xhc3MgSGlUZWNobmljQ29tcGFzcyA6IHB1YmxpYyBTZW5zb3JCYXNlLCBwdWJsaWMgTGl2ZVdpbmRvd1NlbmRhYmxlDQorew0KK3B1YmxpYzoNCisJZXhwbGljaXQgSGlUZWNobmljQ29tcGFzcyhVSU5UOCBtb2R1bGVOdW1iZXIpOw0KKwl2aXJ0dWFsIH5IaVRlY2huaWNDb21wYXNzKCk7DQorCWZsb2F0IEdldEFuZ2xlKCk7DQorCQ0KKwl2b2lkIFVwZGF0ZVRhYmxlKCk7DQorCXZvaWQgU3RhcnRMaXZlV2luZG93TW9kZSgpOw0KKwl2b2lkIFN0b3BMaXZlV2luZG93TW9kZSgpOw0KKwlzdGQ6OnN0cmluZyBHZXRTbWFydERhc2hib2FyZFR5cGUoKTsNCisJdm9pZCBJbml0VGFibGUoSVRhYmxlICpzdWJUYWJsZSk7DQorCUlUYWJsZSAqIEdldFRhYmxlKCk7DQorDQorcHJpdmF0ZToNCisJc3RhdGljIGNvbnN0IFVJTlQ4IGtBZGRyZXNzID0gMHgwMjsNCisJc3RhdGljIGNvbnN0IFVJTlQ4IGtNYW51ZmFjdHVyZXJCYXNlUmVnaXN0ZXIgPSAweDA4Ow0KKwlzdGF0aWMgY29uc3QgVUlOVDgga01hbnVmYWN0dXJlclNpemUgPSAweDA4Ow0KKwlzdGF0aWMgY29uc3QgVUlOVDgga1NlbnNvclR5cGVCYXNlUmVnaXN0ZXIgPSAweDEwOw0KKwlzdGF0aWMgY29uc3QgVUlOVDgga1NlbnNvclR5cGVTaXplID0gMHgwODsNCisJc3RhdGljIGNvbnN0IFVJTlQ4IGtIZWFkaW5nUmVnaXN0ZXIgPSAweDQ0Ow0KKw0KKwlJMkMqIG1faTJjOw0KKwkNCisJSVRhYmxlICptX3RhYmxlOw0KK307DQorDQorI2VuZGlmDQorDQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvSTJDLmNwcCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0kyQy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2EwYjhjZQotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0kyQy5jcHAKQEAgLTAsMCArMSwyMzYgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorLyogQ29weXJpZ2h0IChjKSBGSVJTVCAyMDA4LiBBbGwgUmlnaHRzIFJlc2VydmVkLgkJCQkJCQkgICovDQorLyogT3BlbiBTb3VyY2UgU29mdHdhcmUgLSBtYXkgYmUgbW9kaWZpZWQgYW5kIHNoYXJlZCBieSBGUkMgdGVhbXMuIFRoZSBjb2RlICAgKi8NCisvKiBtdXN0IGJlIGFjY29tcGFuaWVkIGJ5IHRoZSBGSVJTVCBCU0QgbGljZW5zZSBmaWxlIGluICQoV0lORF9CQVNFKS9XUElMaWIuICAqLw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorI2luY2x1ZGUgIkkyQy5oIg0KKyNpbmNsdWRlICJEaWdpdGFsTW9kdWxlLmgiDQorI2luY2x1ZGUgIk5ldHdvcmtDb21tdW5pY2F0aW9uL1VzYWdlUmVwb3J0aW5nLmgiDQorI2luY2x1ZGUgIlN5bmNocm9uaXplZC5oIg0KKyNpbmNsdWRlICJXUElFcnJvcnMuaCINCisjaW5jbHVkZSA8dGFza0xpYi5oPg0KKw0KK1NFTV9JRCBJMkM6Om1fc2VtYXBob3JlID0gTlVMTDsNCitVSU5UMzIgSTJDOjptX29iakNvdW50ID0gMDsNCisNCisvKioNCisgKiBDb25zdHJ1Y3Rvci4NCisgKiANCisgKiBAcGFyYW0gbW9kdWxlIFRoZSBEaWdpdGFsIE1vZHVsZSB0byB3aGljaCB0aGUgZGV2aWNlIGlzIGNvbm5ldGVkLg0KKyAqIEBwYXJhbSBkZXZpY2VBZGRyZXNzIFRoZSBhZGRyZXNzIG9mIHRoZSBkZXZpY2Ugb24gdGhlIEkyQyBidXMuDQorICovDQorSTJDOjpJMkMoRGlnaXRhbE1vZHVsZSAqbW9kdWxlLCBVSU5UOCBkZXZpY2VBZGRyZXNzKQ0KKwk6IG1fbW9kdWxlIChtb2R1bGUpDQorCSwgbV9kZXZpY2VBZGRyZXNzIChkZXZpY2VBZGRyZXNzKQ0KKwksIG1fY29tcGF0aWJpbGl0eU1vZGUgKGZhbHNlKQ0KK3sNCisJaWYgKG1fc2VtYXBob3JlID09IE5VTEwpDQorCXsNCisJCW1fc2VtYXBob3JlID0gc2VtTUNyZWF0ZShTRU1fUV9QUklPUklUWSB8IFNFTV9ERUxFVEVfU0FGRSB8IFNFTV9JTlZFUlNJT05fU0FGRSk7DQorCX0NCisJbV9vYmpDb3VudCsrOw0KKw0KKwluVXNhZ2VSZXBvcnRpbmc6OnJlcG9ydChuVXNhZ2VSZXBvcnRpbmc6OmtSZXNvdXJjZVR5cGVfSTJDLCBkZXZpY2VBZGRyZXNzLCBtb2R1bGUtPkdldE51bWJlcigpIC0gMSk7DQorfQ0KKw0KKy8qKg0KKyAqIERlc3RydWN0b3IuDQorICovDQorSTJDOjp+STJDKCkNCit7DQorCW1fb2JqQ291bnQtLTsNCisJaWYgKG1fb2JqQ291bnQgPD0gMCkNCisJew0KKwkJc2VtRGVsZXRlKG1fc2VtYXBob3JlKTsNCisJCW1fc2VtYXBob3JlID0gTlVMTDsNCisJfQ0KK30NCisNCisvKioNCisgKiBHZW5lcmljIHRyYW5zYWN0aW9uLg0KKyAqIA0KKyAqIFRoaXMgaXMgYSBsb3dlci1sZXZlbCBpbnRlcmZhY2UgdG8gdGhlIEkyQyBoYXJkd2FyZSBnaXZpbmcgeW91IG1vcmUgY29udHJvbCBvdmVyIGVhY2ggdHJhbnNhY3Rpb24uDQorICogDQorICogQHBhcmFtIGRhdGFUb1NlbmQgQnVmZmVyIG9mIGRhdGEgdG8gc2VuZCBhcyBwYXJ0IG9mIHRoZSB0cmFuc2FjdGlvbi4NCisgKiBAcGFyYW0gc2VuZFNpemUgTnVtYmVyIG9mIGJ5dGVzIHRvIHNlbmQgYXMgcGFydCBvZiB0aGUgdHJhbnNhY3Rpb24uIFswLi42XQ0KKyAqIEBwYXJhbSBkYXRhUmVjZWl2ZWQgQnVmZmVyIHRvIHJlYWQgZGF0YSBpbnRvLg0KKyAqIEBwYXJhbSByZWNlaXZlU2l6ZSBOdW1iZXIgb2YgYnl0ZWQgdG8gcmVhZCBmcm9tIHRoZSBkZXZpY2UuIFswLi43XQ0KKyAqIEByZXR1cm4gVHJhbnNmZXIgQWJvcnRlZC4uLiBmYWxzZSBmb3Igc3VjY2VzcywgdHJ1ZSBmb3IgYWJvcnRlZC4NCisgKi8NCitib29sIEkyQzo6VHJhbnNhY3Rpb24oVUlOVDggKmRhdGFUb1NlbmQsIFVJTlQ4IHNlbmRTaXplLCBVSU5UOCAqZGF0YVJlY2VpdmVkLCBVSU5UOCByZWNlaXZlU2l6ZSkNCit7DQorCWlmIChzZW5kU2l6ZSA+IDYpDQorCXsNCisJCXdwaV9zZXRXUElFcnJvcldpdGhDb250ZXh0KFBhcmFtZXRlck91dE9mUmFuZ2UsICJzZW5kU2l6ZSIpOw0KKwkJcmV0dXJuIHRydWU7DQorCX0NCisJaWYgKHJlY2VpdmVTaXplID4gNykNCisJew0KKwkJd3BpX3NldFdQSUVycm9yV2l0aENvbnRleHQoUGFyYW1ldGVyT3V0T2ZSYW5nZSwgInJlY2VpdmVTaXplIik7DQorCQlyZXR1cm4gdHJ1ZTsNCisJfQ0KKw0KKwlVSU5UMzIgZGF0YT0wOw0KKwlVSU5UMzIgZGF0YUhpZ2g9MDsNCisJVUlOVDMyIGk7DQorCWZvcihpPTA7IGk8c2VuZFNpemUgJiYgaTxzaXplb2YoZGF0YSk7IGkrKykNCisJew0KKwkJZGF0YSB8PSAoVUlOVDMyKWRhdGFUb1NlbmRbaV0gPDwgKDgqaSk7DQorCX0NCisJZm9yKDsgaTxzZW5kU2l6ZTsgaSsrKQ0KKwl7DQorCQlkYXRhSGlnaCB8PSAoVUlOVDMyKWRhdGFUb1NlbmRbaV0gPDwgKDgqKGktc2l6ZW9mKGRhdGEpKSk7DQorCX0NCisNCisJYm9vbCBhYm9ydGVkID0gdHJ1ZTsNCisJdFJpb1N0YXR1c0NvZGUgbG9jYWxTdGF0dXMgPSBOaUZwZ2FfU3RhdHVzX1N1Y2Nlc3M7DQorCXsNCisJCVN5bmNocm9uaXplZCBzeW5jKG1fc2VtYXBob3JlKTsNCisJCW1fbW9kdWxlLT5tX2ZwZ2FESU8tPndyaXRlSTJDQ29uZmlnX0FkZHJlc3MobV9kZXZpY2VBZGRyZXNzLCAmbG9jYWxTdGF0dXMpOw0KKwkJbV9tb2R1bGUtPm1fZnBnYURJTy0+d3JpdGVJMkNDb25maWdfQnl0ZXNUb1dyaXRlKHNlbmRTaXplLCAmbG9jYWxTdGF0dXMpOw0KKwkJbV9tb2R1bGUtPm1fZnBnYURJTy0+d3JpdGVJMkNDb25maWdfQnl0ZXNUb1JlYWQocmVjZWl2ZVNpemUsICZsb2NhbFN0YXR1cyk7DQorCQlpZiAoc2VuZFNpemUgPiAwKSBtX21vZHVsZS0+bV9mcGdhRElPLT53cml0ZUkyQ0RhdGFUb1NlbmQoZGF0YSwgJmxvY2FsU3RhdHVzKTsNCisJCWlmIChzZW5kU2l6ZSA+IHNpemVvZihkYXRhKSkgbV9tb2R1bGUtPm1fZnBnYURJTy0+d3JpdGVJMkNDb25maWdfRGF0YVRvU2VuZEhpZ2goZGF0YUhpZ2gsICZsb2NhbFN0YXR1cyk7DQorCQltX21vZHVsZS0+bV9mcGdhRElPLT53cml0ZUkyQ0NvbmZpZ19CaXR3aXNlSGFuZHNoYWtlKG1fY29tcGF0aWJpbGl0eU1vZGUsICZsb2NhbFN0YXR1cyk7DQorCQlVSU5UOCB0cmFuc2FjdGlvbiA9IG1fbW9kdWxlLT5tX2ZwZ2FESU8tPnJlYWRJMkNTdGF0dXNfVHJhbnNhY3Rpb24oJmxvY2FsU3RhdHVzKTsNCisJCW1fbW9kdWxlLT5tX2ZwZ2FESU8tPnN0cm9iZUkyQ1N0YXJ0KCZsb2NhbFN0YXR1cyk7DQorCQl3aGlsZSh0cmFuc2FjdGlvbiA9PSBtX21vZHVsZS0+bV9mcGdhRElPLT5yZWFkSTJDU3RhdHVzX1RyYW5zYWN0aW9uKCZsb2NhbFN0YXR1cykpIHRhc2tEZWxheSgxKTsNCisJCXdoaWxlKCFtX21vZHVsZS0+bV9mcGdhRElPLT5yZWFkSTJDU3RhdHVzX0RvbmUoJmxvY2FsU3RhdHVzKSkgdGFza0RlbGF5KDEpOw0KKwkJYWJvcnRlZCA9IG1fbW9kdWxlLT5tX2ZwZ2FESU8tPnJlYWRJMkNTdGF0dXNfQWJvcnRlZCgmbG9jYWxTdGF0dXMpOw0KKwkJaWYgKHJlY2VpdmVTaXplID4gMCkgZGF0YSA9IG1fbW9kdWxlLT5tX2ZwZ2FESU8tPnJlYWRJMkNEYXRhUmVjZWl2ZWQoJmxvY2FsU3RhdHVzKTsNCisJCWlmIChyZWNlaXZlU2l6ZSA+IHNpemVvZihkYXRhKSkgZGF0YUhpZ2ggPSBtX21vZHVsZS0+bV9mcGdhRElPLT5yZWFkSTJDU3RhdHVzX0RhdGFSZWNlaXZlZEhpZ2goJmxvY2FsU3RhdHVzKTsNCisJfQ0KKwl3cGlfc2V0RXJyb3IobG9jYWxTdGF0dXMpOw0KKw0KKwlmb3IoaT0wOyBpPHJlY2VpdmVTaXplICYmIGk8c2l6ZW9mKGRhdGEpOyBpKyspDQorCXsNCisJCWRhdGFSZWNlaXZlZFtpXSA9IChkYXRhID4+ICg4KmkpKSAmIDB4RkY7DQorCX0NCisJZm9yKDsgaTxyZWNlaXZlU2l6ZTsgaSsrKQ0KKwl7DQorCQlkYXRhUmVjZWl2ZWRbaV0gPSAoZGF0YUhpZ2ggPj4gKDgqKGktc2l6ZW9mKGRhdGEpKSkpICYgMHhGRjsNCisJfQ0KKwlyZXR1cm4gYWJvcnRlZDsNCit9DQorDQorLyoqDQorICogQXR0ZW1wdCB0byBhZGRyZXNzIGEgZGV2aWNlIG9uIHRoZSBJMkMgYnVzLg0KKyAqIA0KKyAqIFRoaXMgYWxsb3dzIHlvdSB0byBmaWd1cmUgb3V0IGlmIHRoZXJlIGlzIGEgZGV2aWNlIG9uIHRoZSBJMkMgYnVzIHRoYXQNCisgKiByZXNwb25kcyB0byB0aGUgYWRkcmVzcyBzcGVjaWZpZWQgaW4gdGhlIGNvbnN0cnVjdG9yLg0KKyAqIA0KKyAqIEByZXR1cm4gVHJhbnNmZXIgQWJvcnRlZC4uLiBmYWxzZSBmb3Igc3VjY2VzcywgdHJ1ZSBmb3IgYWJvcnRlZC4NCisgKi8NCitib29sIEkyQzo6QWRkcmVzc09ubHkoKQ0KK3sNCisJcmV0dXJuIFRyYW5zYWN0aW9uKE5VTEwsIDAsIE5VTEwsIDApOw0KK30NCisNCisvKioNCisgKiBFeGVjdXRlIGEgd3JpdGUgdHJhbnNhY3Rpb24gd2l0aCB0aGUgZGV2aWNlLg0KKyAqIA0KKyAqIFdyaXRlIGEgc2luZ2xlIGJ5dGUgdG8gYSByZWdpc3RlciBvbiBhIGRldmljZSBhbmQgd2FpdCB1bnRpbCB0aGUNCisgKiAgIHRyYW5zYWN0aW9uIGlzIGNvbXBsZXRlLg0KKyAqIA0KKyAqIEBwYXJhbSByZWdpc3RlckFkZHJlc3MgVGhlIGFkZHJlc3Mgb2YgdGhlIHJlZ2lzdGVyIG9uIHRoZSBkZXZpY2UgdG8gYmUgd3JpdHRlbi4NCisgKiBAcGFyYW0gZGF0YSBUaGUgYnl0ZSB0byB3cml0ZSB0byB0aGUgcmVnaXN0ZXIgb24gdGhlIGRldmljZS4NCisgKiBAcmV0dXJuIFRyYW5zZmVyIEFib3J0ZWQuLi4gZmFsc2UgZm9yIHN1Y2Nlc3MsIHRydWUgZm9yIGFib3J0ZWQuDQorICovDQorYm9vbCBJMkM6OldyaXRlKFVJTlQ4IHJlZ2lzdGVyQWRkcmVzcywgVUlOVDggZGF0YSkNCit7DQorCVVJTlQ4IGJ1ZmZlclsyXTsNCisJYnVmZmVyWzBdID0gcmVnaXN0ZXJBZGRyZXNzOw0KKwlidWZmZXJbMV0gPSBkYXRhOw0KKwlyZXR1cm4gVHJhbnNhY3Rpb24oYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwgTlVMTCwgMCk7DQorfQ0KKw0KKy8qKg0KKyAqIEV4ZWN1dGUgYSByZWFkIHRyYW5zYWN0aW9uIHdpdGggdGhlIGRldmljZS4NCisgKiANCisgKiBSZWFkIDEgdG8gNyBieXRlcyBmcm9tIGEgZGV2aWNlLg0KKyAqIE1vc3QgSTJDIGRldmljZXMgd2lsbCBhdXRvLWluY3JlbWVudCB0aGUgcmVnaXN0ZXIgcG9pbnRlciBpbnRlcm5hbGx5DQorICogICBhbGxvd2luZyB5b3UgdG8gcmVhZCB1cCB0byA3IGNvbnNlY3V0aXZlIHJlZ2lzdGVycyBvbiBhIGRldmljZSBpbiBhDQorICogICBzaW5nbGUgdHJhbnNhY3Rpb24uDQorICogDQorICogQHBhcmFtIHJlZ2lzdGVyQWRkcmVzcyBUaGUgcmVnaXN0ZXIgdG8gcmVhZCBmaXJzdCBpbiB0aGUgdHJhbnNhY3Rpb24uDQorICogQHBhcmFtIGNvdW50IFRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gcmVhZCBpbiB0aGUgdHJhbnNhY3Rpb24uIFsxLi43XQ0KKyAqIEBwYXJhbSBidWZmZXIgQSBwb2ludGVyIHRvIHRoZSBhcnJheSBvZiBieXRlcyB0byBzdG9yZSB0aGUgZGF0YSByZWFkIGZyb20gdGhlIGRldmljZS4NCisgKiBAcmV0dXJuIFRyYW5zZmVyIEFib3J0ZWQuLi4gZmFsc2UgZm9yIHN1Y2Nlc3MsIHRydWUgZm9yIGFib3J0ZWQuDQorICovDQorYm9vbCBJMkM6OlJlYWQoVUlOVDggcmVnaXN0ZXJBZGRyZXNzLCBVSU5UOCBjb3VudCwgVUlOVDggKmJ1ZmZlcikNCit7DQorCWlmIChjb3VudCA8IDEgfHwgY291bnQgPiA3KQ0KKwl7DQorCQl3cGlfc2V0V1BJRXJyb3JXaXRoQ29udGV4dChQYXJhbWV0ZXJPdXRPZlJhbmdlLCAiY291bnQiKTsNCisJCXJldHVybiB0cnVlOw0KKwl9DQorCWlmIChidWZmZXIgPT0gTlVMTCkNCisJew0KKwkJd3BpX3NldFdQSUVycm9yV2l0aENvbnRleHQoTnVsbFBhcmFtZXRlciwgImJ1ZmZlciIpOw0KKwkJcmV0dXJuIHRydWU7DQorCX0NCisNCisJcmV0dXJuIFRyYW5zYWN0aW9uKCZyZWdpc3RlckFkZHJlc3MsIHNpemVvZihyZWdpc3RlckFkZHJlc3MpLCBidWZmZXIsIGNvdW50KTsNCit9DQorDQorLyoqDQorICogU2VuZCBhIGJyb2FkY2FzdCB3cml0ZSB0byBhbGwgZGV2aWNlcyBvbiB0aGUgSTJDIGJ1cy4NCisgKiANCisgKiBUaGlzIGlzIG5vdCBjdXJyZW50bHkgaW1wbGVtZW50ZWQhDQorICogDQorICogQHBhcmFtIHJlZ2lzdGVyQWRkcmVzcyBUaGUgcmVnaXN0ZXIgdG8gd3JpdGUgb24gYWxsIGRldmljZXMgb24gdGhlIGJ1cy4NCisgKiBAcGFyYW0gZGF0YSBUaGUgdmFsdWUgdG8gd3JpdGUgdG8gdGhlIGRldmljZXMuDQorICovDQordm9pZCBJMkM6OkJyb2FkY2FzdChVSU5UOCByZWdpc3RlckFkZHJlc3MsIFVJTlQ4IGRhdGEpDQorew0KK30NCisNCisvKioNCisgKiBTZXRDb21wYXRpYmlsaXR5TW9kZQ0KKyAqIA0KKyAqIEVuYWJsZXMgYml0d2lzZSBjbG9jayBza2V3aW5nIGRldGVjdGlvbi4gIFRoaXMgd2lsbCByZWR1Y2UgdGhlIEkyQyBpbnRlcmZhY2Ugc3BlZWQsDQorICogYnV0IHdpbGwgYWxsb3cgeW91IHRvIGNvbW11bmljYXRlIHdpdGggZGV2aWNlcyB0aGF0IHNrZXcgdGhlIGNsb2NrIGF0IGFibm9ybWFsIHRpbWVzLg0KKyAqDQorICogQHBhcmFtIGVuYWJsZSBFbmFibGUgY29tcGF0aWJpbGl0eSBtb2RlIGZvciB0aGlzIHNlbnNvciBvciBub3QuDQorICovDQordm9pZCBJMkM6OlNldENvbXBhdGliaWxpdHlNb2RlKGJvb2wgZW5hYmxlKQ0KK3sNCisJbV9jb21wYXRpYmlsaXR5TW9kZSA9IGVuYWJsZTsNCisNCisJY29uc3QgY2hhciAqY20gPSBOVUxMOw0KKwlpZiAobV9jb21wYXRpYmlsaXR5TW9kZSkgY20gPSAiQyI7DQorCW5Vc2FnZVJlcG9ydGluZzo6cmVwb3J0KG5Vc2FnZVJlcG9ydGluZzo6a1Jlc291cmNlVHlwZV9JMkMsIG1fZGV2aWNlQWRkcmVzcywgbV9tb2R1bGUtPkdldE51bWJlcigpIC0gMSwgY20pOw0KK30NCisNCisvKioNCisgKiBWZXJpZnkgdGhhdCBhIGRldmljZSdzIHJlZ2lzdGVycyBjb250YWluIGV4cGVjdGVkIHZhbHVlcy4NCisgKiANCisgKiBNb3N0IGRldmljZXMgd2lsbCBoYXZlIGEgc2V0IG9mIHJlZ2lzdGVycyB0aGF0IGNvbnRhaW4gYSBrbm93biB2YWx1ZSB0aGF0DQorICogICBjYW4gYmUgdXNlZCB0byBpZGVudGlmeSB0aGVtLiAgVGhpcyBhbGxvd3MgYW4gSTJDIGRldmljZSBkcml2ZXIgdG8gZWFzaWx5DQorICogICB2ZXJpZnkgdGhhdCB0aGUgZGV2aWNlIGNvbnRhaW5zIHRoZSBleHBlY3RlZCB2YWx1ZS4NCisgKiANCisgKiBAcHJlIFRoZSBkZXZpY2UgbXVzdCBzdXBwb3J0IGFuZCBiZSBjb25maWd1cmVkIHRvIHVzZSByZWdpc3RlciBhdXRvLWluY3JlbWVudC4NCisgKiANCisgKiBAcGFyYW0gcmVnaXN0ZXJBZGRyZXNzIFRoZSBiYXNlIHJlZ2lzdGVyIHRvIHN0YXJ0IHJlYWRpbmcgZnJvbSB0aGUgZGV2aWNlLg0KKyAqIEBwYXJhbSBjb3VudCBUaGUgc2l6ZSBvZiB0aGUgZmllbGQgdG8gYmUgdmVyaWZpZWQuDQorICogQHBhcmFtIGV4cGVjdGVkIEEgYnVmZmVyIGNvbnRhaW5pbmcgdGhlIHZhbHVlcyBleHBlY3RlZCBmcm9tIHRoZSBkZXZpY2UuDQorICovDQorYm9vbCBJMkM6OlZlcmlmeVNlbnNvcihVSU5UOCByZWdpc3RlckFkZHJlc3MsIFVJTlQ4IGNvdW50LCBjb25zdCBVSU5UOCAqZXhwZWN0ZWQpDQorew0KKwkvLyBUT0RPOiBNYWtlIHVzZSBvZiBhbGwgNyByZWFkIGJ5dGVzDQorCVVJTlQ4IGRldmljZURhdGFbNF07DQorCWZvciAoVUlOVDggaT0wLCBjdXJSZWdpc3RlckFkZHJlc3MgPSByZWdpc3RlckFkZHJlc3M7IGkgPCBjb3VudDsgaSs9NCwgY3VyUmVnaXN0ZXJBZGRyZXNzKz00KQ0KKwl7DQorCQlVSU5UOCB0b1JlYWQgPSBjb3VudCAtIGkgPCA0ID8gY291bnQgLSBpIDogNDsNCisJCS8vIFJlYWQgdGhlIGNodW5rIG9mIGRhdGEuICBSZXR1cm4gZmFsc2UgaWYgdGhlIHNlbnNvciBkb2VzIG5vdCByZXNwb25kLg0KKwkJaWYgKFJlYWQoY3VyUmVnaXN0ZXJBZGRyZXNzLCB0b1JlYWQsIGRldmljZURhdGEpKSByZXR1cm4gZmFsc2U7DQorDQorCQlmb3IgKFVJTlQ4IGo9MDsgajx0b1JlYWQ7IGorKykNCisJCXsNCisJCQlpZihkZXZpY2VEYXRhW2pdICE9IGV4cGVjdGVkW2kgKyBqXSkgcmV0dXJuIGZhbHNlOw0KKwkJfQ0KKwl9DQorCXJldHVybiB0cnVlOw0KK30NCisNCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9JMkMuaCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0kyQy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkNDgzNjQKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9JMkMuaApAQCAtMCwwICsxLDQ3IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy8qIENvcHlyaWdodCAoYykgRklSU1QgMjAwOC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4JCQkJCQkJICAqLw0KKy8qIE9wZW4gU291cmNlIFNvZnR3YXJlIC0gbWF5IGJlIG1vZGlmaWVkIGFuZCBzaGFyZWQgYnkgRlJDIHRlYW1zLiBUaGUgY29kZSAgICovDQorLyogbXVzdCBiZSBhY2NvbXBhbmllZCBieSB0aGUgRklSU1QgQlNEIGxpY2Vuc2UgZmlsZSBpbiAkKFdJTkRfQkFTRSkvV1BJTGliLiAgKi8NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKyNpZm5kZWYgSTJDX0gNCisjZGVmaW5lIEkyQ19IDQorDQorI2luY2x1ZGUgIlNlbnNvckJhc2UuaCINCisNCitjbGFzcyBEaWdpdGFsTW9kdWxlOw0KKw0KKy8qKg0KKyAqIEkyQyBidXMgaW50ZXJmYWNlIGNsYXNzLg0KKyAqIA0KKyAqIFRoaXMgY2xhc3MgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCBieSBzZW5zb3IgKGFuZCBvdGhlciBJMkMgZGV2aWNlKSBkcml2ZXJzLg0KKyAqIEl0IHByb2JhYmx5IHNob3VsZCBub3QgYmUgdXNlZCBkaXJlY3RseS4NCisgKiANCisgKiBJdCBpcyBjb25zdHJ1Y3RlZCBieSBjYWxsaW5nIERpZ2l0YWxNb2R1bGU6OkdldEkyQygpIG9uIGEgRGlnaXRhbE1vZHVsZSBvYmplY3QuDQorICovDQorY2xhc3MgSTJDIDogU2Vuc29yQmFzZQ0KK3sNCisJZnJpZW5kIGNsYXNzIERpZ2l0YWxNb2R1bGU7DQorcHVibGljOg0KKwl2aXJ0dWFsIH5JMkMoKTsNCisJYm9vbCBUcmFuc2FjdGlvbihVSU5UOCAqZGF0YVRvU2VuZCwgVUlOVDggc2VuZFNpemUsIFVJTlQ4ICpkYXRhUmVjZWl2ZWQsIFVJTlQ4IHJlY2VpdmVTaXplKTsNCisJYm9vbCBBZGRyZXNzT25seSgpOw0KKwlib29sIFdyaXRlKFVJTlQ4IHJlZ2lzdGVyQWRkcmVzcywgVUlOVDggZGF0YSk7DQorCWJvb2wgUmVhZChVSU5UOCByZWdpc3RlckFkZHJlc3MsIFVJTlQ4IGNvdW50LCBVSU5UOCAqZGF0YSk7DQorCXZvaWQgQnJvYWRjYXN0KFVJTlQ4IHJlZ2lzdGVyQWRkcmVzcywgVUlOVDggZGF0YSk7DQorCXZvaWQgU2V0Q29tcGF0aWJpbGl0eU1vZGUoYm9vbCBlbmFibGUpOw0KKw0KKwlib29sIFZlcmlmeVNlbnNvcihVSU5UOCByZWdpc3RlckFkZHJlc3MsIFVJTlQ4IGNvdW50LCBjb25zdCBVSU5UOCAqZXhwZWN0ZWQpOw0KK3ByaXZhdGU6DQorCXN0YXRpYyBTRU1fSUQgbV9zZW1hcGhvcmU7DQorCXN0YXRpYyBVSU5UMzIgbV9vYmpDb3VudDsNCisNCisJSTJDKERpZ2l0YWxNb2R1bGUgKm1vZHVsZSwgVUlOVDggZGV2aWNlQWRkcmVzcyk7DQorDQorCURpZ2l0YWxNb2R1bGUgKm1fbW9kdWxlOw0KKwlVSU5UOCBtX2RldmljZUFkZHJlc3M7DQorCWJvb2wgbV9jb21wYXRpYmlsaXR5TW9kZTsNCit9Ow0KKw0KKyNlbmRpZg0KKw0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0ludGVycnVwdGFibGVTZW5zb3JCYXNlLmNwcCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0ludGVycnVwdGFibGVTZW5zb3JCYXNlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODE4OTU3Ci0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvSW50ZXJydXB0YWJsZVNlbnNvckJhc2UuY3BwCkBAIC0wLDAgKzEsOTggQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorLyogQ29weXJpZ2h0IChjKSBGSVJTVCAyMDA4LiBBbGwgUmlnaHRzIFJlc2VydmVkLgkJCQkJCQkgICovDQorLyogT3BlbiBTb3VyY2UgU29mdHdhcmUgLSBtYXkgYmUgbW9kaWZpZWQgYW5kIHNoYXJlZCBieSBGUkMgdGVhbXMuIFRoZSBjb2RlICAgKi8NCisvKiBtdXN0IGJlIGFjY29tcGFuaWVkIGJ5IHRoZSBGSVJTVCBCU0QgbGljZW5zZSBmaWxlIGluICQoV0lORF9CQVNFKS9XUElMaWIuICAqLw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorI2luY2x1ZGUgIkludGVycnVwdGFibGVTZW5zb3JCYXNlLmgiDQorI2luY2x1ZGUgIlV0aWxpdHkuaCINCisNCitJbnRlcnJ1cHRhYmxlU2Vuc29yQmFzZTo6SW50ZXJydXB0YWJsZVNlbnNvckJhc2UoKQ0KK3sNCisJbV9tYW5hZ2VyID0gTlVMTDsNCisJbV9pbnRlcnJ1cHQgPSBOVUxMOw0KK30NCisNCitJbnRlcnJ1cHRhYmxlU2Vuc29yQmFzZTo6fkludGVycnVwdGFibGVTZW5zb3JCYXNlKCkNCit7DQorDQorfQ0KKw0KK3ZvaWQgSW50ZXJydXB0YWJsZVNlbnNvckJhc2U6OkFsbG9jYXRlSW50ZXJydXB0cyhib29sIHdhdGNoZXIpDQorew0KKwl3cGlfYXNzZXJ0KG1faW50ZXJydXB0ID09IE5VTEwpOw0KKwl3cGlfYXNzZXJ0KG1fbWFuYWdlciA9PSBOVUxMKTsNCisJLy8gRXhwZWN0cyB0aGUgY2FsbGluZyBsZWFmIGNsYXNzIHRvIGFsbG9jYXRlIGFuIGludGVycnVwdCBpbmRleC4NCisJdFJpb1N0YXR1c0NvZGUgbG9jYWxTdGF0dXMgPSBOaUZwZ2FfU3RhdHVzX1N1Y2Nlc3M7DQorCW1faW50ZXJydXB0ID0gdEludGVycnVwdDo6Y3JlYXRlKG1faW50ZXJydXB0SW5kZXgsICZsb2NhbFN0YXR1cyk7DQorCW1faW50ZXJydXB0LT53cml0ZUNvbmZpZ19XYWl0Rm9yQWNrKGZhbHNlLCAmbG9jYWxTdGF0dXMpOw0KKwltX21hbmFnZXIgPSBuZXcgdEludGVycnVwdE1hbmFnZXIoMSA8PCBtX2ludGVycnVwdEluZGV4LCB3YXRjaGVyLCAmbG9jYWxTdGF0dXMpOw0KKwl3cGlfc2V0RXJyb3IobG9jYWxTdGF0dXMpOw0KK30NCisNCisvKioNCisgKiBDYW5jZWwgaW50ZXJydXB0cyBvbiB0aGlzIGRldmljZS4NCisgKiBUaGlzIGRlYWxsb2NhdGVzIGFsbCB0aGUgY2hpcG9iamVjdCBzdHJ1Y3R1cmVzIGFuZCBkaXNhYmxlcyBhbnkgaW50ZXJydXB0cy4NCisgKi8NCit2b2lkIEludGVycnVwdGFibGVTZW5zb3JCYXNlOjpDYW5jZWxJbnRlcnJ1cHRzKCkNCit7DQorCXdwaV9hc3NlcnQobV9tYW5hZ2VyICE9IE5VTEwpOw0KKwl3cGlfYXNzZXJ0KG1faW50ZXJydXB0ICE9IE5VTEwpOw0KKwlkZWxldGUgbV9pbnRlcnJ1cHQ7DQorCWRlbGV0ZSBtX21hbmFnZXI7DQorCW1faW50ZXJydXB0ID0gTlVMTDsNCisJbV9tYW5hZ2VyID0gTlVMTDsNCit9DQorDQorLyoqDQorICogSW4gc3luY2hyb25vdXMgbW9kZSwgd2FpdCBmb3IgdGhlIGRlZmluZWQgaW50ZXJydXB0IHRvIG9jY3VyLg0KKyAqIEBwYXJhbSB0aW1lb3V0IFRpbWVvdXQgaW4gc2Vjb25kcw0KKyAqLw0KK3ZvaWQgSW50ZXJydXB0YWJsZVNlbnNvckJhc2U6OldhaXRGb3JJbnRlcnJ1cHQoZmxvYXQgdGltZW91dCkNCit7DQorCXdwaV9hc3NlcnQobV9tYW5hZ2VyICE9IE5VTEwpOw0KKwl3cGlfYXNzZXJ0KG1faW50ZXJydXB0ICE9IE5VTEwpOw0KKwl0UmlvU3RhdHVzQ29kZSBsb2NhbFN0YXR1cyA9IE5pRnBnYV9TdGF0dXNfU3VjY2VzczsNCisJbV9tYW5hZ2VyLT53YXRjaCgoSU5UMzIpKHRpbWVvdXQgKiAxZTMpLCAmbG9jYWxTdGF0dXMpOw0KKwl3cGlfc2V0RXJyb3IobG9jYWxTdGF0dXMpOw0KK30NCisNCisvKioNCisgKiBFbmFibGUgaW50ZXJydXB0cyB0byBvY2N1ciBvbiB0aGlzIGlucHV0Lg0KKyAqIEludGVycnVwdHMgYXJlIGRpc2FibGVkIHdoZW4gdGhlIFJlcXVlc3RJbnRlcnJ1cHQgY2FsbCBpcyBtYWRlLiBUaGlzIGdpdmVzIHRpbWUgdG8gZG8gdGhlDQorICogc2V0dXAgb2YgdGhlIG90aGVyIG9wdGlvbnMgYmVmb3JlIHN0YXJ0aW5nIHRvIGZpZWxkIGludGVycnVwdHMuDQorICovDQordm9pZCBJbnRlcnJ1cHRhYmxlU2Vuc29yQmFzZTo6RW5hYmxlSW50ZXJydXB0cygpDQorew0KKwl3cGlfYXNzZXJ0KG1fbWFuYWdlciAhPSBOVUxMKTsNCisJd3BpX2Fzc2VydChtX2ludGVycnVwdCAhPSBOVUxMKTsNCisJdFJpb1N0YXR1c0NvZGUgbG9jYWxTdGF0dXMgPSBOaUZwZ2FfU3RhdHVzX1N1Y2Nlc3M7DQorCW1fbWFuYWdlci0+ZW5hYmxlKCZsb2NhbFN0YXR1cyk7DQorCXdwaV9zZXRFcnJvcihsb2NhbFN0YXR1cyk7DQorfQ0KKw0KKy8qKg0KKyAqIERpc2FibGUgSW50ZXJydXB0cyB3aXRob3V0IHdpdGhvdXQgZGVhbGxvY2F0aW5nIHN0cnVjdHVyZXMuDQorICovDQordm9pZCBJbnRlcnJ1cHRhYmxlU2Vuc29yQmFzZTo6RGlzYWJsZUludGVycnVwdHMoKQ0KK3sNCisJd3BpX2Fzc2VydChtX21hbmFnZXIgIT0gTlVMTCk7DQorCXdwaV9hc3NlcnQobV9pbnRlcnJ1cHQgIT0gTlVMTCk7DQorCXRSaW9TdGF0dXNDb2RlIGxvY2FsU3RhdHVzID0gTmlGcGdhX1N0YXR1c19TdWNjZXNzOw0KKwltX21hbmFnZXItPmRpc2FibGUoJmxvY2FsU3RhdHVzKTsNCisJd3BpX3NldEVycm9yKGxvY2FsU3RhdHVzKTsNCit9DQorDQorLyoqDQorICogUmV0dXJuIHRoZSB0aW1lc3RhbXAgZm9yIHRoZSBpbnRlcnJ1cHQgdGhhdCBvY2N1cnJlZCBtb3N0IHJlY2VudGx5Lg0KKyAqIFRoaXMgaXMgaW4gdGhlIHNhbWUgdGltZSBkb21haW4gYXMgR2V0Q2xvY2soKS4NCisgKiBAcmV0dXJuIFRpbWVzdGFtcCBpbiBzZWNvbmRzIHNpbmNlIGJvb3QuDQorICovDQorZG91YmxlIEludGVycnVwdGFibGVTZW5zb3JCYXNlOjpSZWFkSW50ZXJydXB0VGltZXN0YW1wKCkNCit7DQorCXdwaV9hc3NlcnQobV9pbnRlcnJ1cHQgIT0gTlVMTCk7DQorCXRSaW9TdGF0dXNDb2RlIGxvY2FsU3RhdHVzID0gTmlGcGdhX1N0YXR1c19TdWNjZXNzOw0KKwlVSU5UMzIgdGltZXN0YW1wID0gbV9pbnRlcnJ1cHQtPnJlYWRUaW1lU3RhbXAoJmxvY2FsU3RhdHVzKTsNCisJd3BpX3NldEVycm9yKGxvY2FsU3RhdHVzKTsNCisJcmV0dXJuIHRpbWVzdGFtcCAqIDFlLTY7DQorfQ0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0ludGVycnVwdGFibGVTZW5zb3JCYXNlLmggYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9JbnRlcnJ1cHRhYmxlU2Vuc29yQmFzZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliZDE2NDMKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9JbnRlcnJ1cHRhYmxlU2Vuc29yQmFzZS5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorLyogQ29weXJpZ2h0IChjKSBGSVJTVCAyMDA4LiBBbGwgUmlnaHRzIFJlc2VydmVkLgkJCQkJCQkgICovDQorLyogT3BlbiBTb3VyY2UgU29mdHdhcmUgLSBtYXkgYmUgbW9kaWZpZWQgYW5kIHNoYXJlZCBieSBGUkMgdGVhbXMuIFRoZSBjb2RlICAgKi8NCisvKiBtdXN0IGJlIGFjY29tcGFuaWVkIGJ5IHRoZSBGSVJTVCBCU0QgbGljZW5zZSBmaWxlIGluICQoV0lORF9CQVNFKS9XUElMaWIuICAqLw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorI2lmbmRlZiBJTlRFUlJVUFRBQkxFX1NFTlNPUkJBU0VfSF8NCisjZGVmaW5lIElOVEVSUlVQVEFCTEVfU0VOU09SQkFTRV9IXw0KKw0KKyNpbmNsdWRlICJDaGlwT2JqZWN0LmgiDQorI2luY2x1ZGUgIlNlbnNvckJhc2UuaCINCisNCitjbGFzcyBJbnRlcnJ1cHRhYmxlU2Vuc29yQmFzZSA6IHB1YmxpYyBTZW5zb3JCYXNlDQorew0KK3B1YmxpYzoNCisJSW50ZXJydXB0YWJsZVNlbnNvckJhc2UoKTsNCisJdmlydHVhbCB+SW50ZXJydXB0YWJsZVNlbnNvckJhc2UoKTsNCisJdmlydHVhbCB2b2lkIFJlcXVlc3RJbnRlcnJ1cHRzKHRJbnRlcnJ1cHRIYW5kbGVyIGhhbmRsZXIsIHZvaWQgKnBhcmFtKSA9IDA7IC8vLzwgQXN5bmNocm9udXMgaGFuZGxlciB2ZXJzaW9uLg0KKwl2aXJ0dWFsIHZvaWQgUmVxdWVzdEludGVycnVwdHMoKSA9IDA7CQkvLy88IFN5bmNocm9udXMgV2FpdCB2ZXJzaW9uLg0KKwl2aXJ0dWFsIHZvaWQgQ2FuY2VsSW50ZXJydXB0cygpOwkJCS8vLzwgRnJlZSB1cCB0aGUgdW5kZXJseWluZyBjaGlwb2JqZWN0IGZ1bmN0aW9ucy4NCisJdmlydHVhbCB2b2lkIFdhaXRGb3JJbnRlcnJ1cHQoZmxvYXQgdGltZW91dCk7IC8vLzwgU3luY2hyb251cyB2ZXJzaW9uLg0KKwl2aXJ0dWFsIHZvaWQgRW5hYmxlSW50ZXJydXB0cygpOwkJCS8vLzwgRW5hYmxlIGludGVycnVwdHMgLSBhZnRlciBmaW5pc2hpbmcgc2V0dXAuDQorCXZpcnR1YWwgdm9pZCBEaXNhYmxlSW50ZXJydXB0cygpOwkJLy8vPCBEaXNhYmxlLCBidXQgZG9uJ3QgZGVhbGxvY2F0ZS4NCisJdmlydHVhbCBkb3VibGUgUmVhZEludGVycnVwdFRpbWVzdGFtcCgpOwkJLy8vPCBSZXR1cm4gdGhlIHRpbWVzdGFtcCBmb3IgdGhlIGludGVycnVwdCB0aGF0IG9jY3VycmVkLg0KK3Byb3RlY3RlZDoNCisJdEludGVycnVwdCAqbV9pbnRlcnJ1cHQ7DQorCXRJbnRlcnJ1cHRNYW5hZ2VyICptX21hbmFnZXI7DQorCVVJTlQzMiBtX2ludGVycnVwdEluZGV4Ow0KKwl2b2lkIEFsbG9jYXRlSW50ZXJydXB0cyhib29sIHdhdGNoZXIpOw0KK307DQorDQorI2VuZGlmDQorDQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvSXRlcmF0aXZlUm9ib3QuY3BwIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvSXRlcmF0aXZlUm9ib3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1ZTBlNGYKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9JdGVyYXRpdmVSb2JvdC5jcHAKQEAgLTAsMCArMSwzMzggQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorLyogQ29weXJpZ2h0IChjKSBGSVJTVCAyMDA4LiBBbGwgUmlnaHRzIFJlc2VydmVkLgkJCQkJCQkgICovDQorLyogT3BlbiBTb3VyY2UgU29mdHdhcmUgLSBtYXkgYmUgbW9kaWZpZWQgYW5kIHNoYXJlZCBieSBGUkMgdGVhbXMuIFRoZSBjb2RlICAgKi8NCisvKiBtdXN0IGJlIGFjY29tcGFuaWVkIGJ5IHRoZSBGSVJTVCBCU0QgbGljZW5zZSBmaWxlIGluICQoV0lORF9CQVNFKS9XUElMaWIuICAqLw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorI2luY2x1ZGUgIkl0ZXJhdGl2ZVJvYm90LmgiDQorDQorI2luY2x1ZGUgIkRyaXZlclN0YXRpb24uaCINCisjaW5jbHVkZSAiTmV0d29ya0NvbW11bmljYXRpb24vVXNhZ2VSZXBvcnRpbmcuaCINCisjaW5jbHVkZSA8dGFza0xpYi5oPg0KKyNpbmNsdWRlICJTbWFydERhc2hib2FyZC9TbWFydERhc2hib2FyZC5oIg0KKyNpbmNsdWRlICJMaXZlV2luZG93L0xpdmVXaW5kb3cuaCINCisjaW5jbHVkZSAibmV0d29ya3RhYmxlcy9OZXR3b3JrVGFibGUuaCINCisNCitjb25zdCBkb3VibGUgSXRlcmF0aXZlUm9ib3Q6OmtEZWZhdWx0UGVyaW9kOw0KKw0KKy8qKg0KKyAqIENvbnN0cnVjdG9yIGZvciBSb2JvdEl0ZXJhdGl2ZUJhc2UNCisgKiANCisgKiBUaGUgY29uc3RydWN0b3IgaW5pdGlhbGl6ZXMgdGhlIGluc3RhbmNlIHZhcmlhYmxlcyBmb3IgdGhlIHJvYm90IHRvIGluZGljYXRlDQorICogdGhlIHN0YXR1cyBvZiBpbml0aWFsaXphdGlvbiBmb3IgZGlzYWJsZWQsIGF1dG9ub21vdXMsIHRlbGVvcCwgYW5kIHRlc3QgY29kZS4NCisgKi8NCitJdGVyYXRpdmVSb2JvdDo6SXRlcmF0aXZlUm9ib3QoKQ0KKwk6IG1fZGlzYWJsZWRJbml0aWFsaXplZCAoZmFsc2UpDQorCSwgbV9hdXRvbm9tb3VzSW5pdGlhbGl6ZWQgKGZhbHNlKQ0KKwksIG1fdGVsZW9wSW5pdGlhbGl6ZWQgKGZhbHNlKQ0KKwksIG1fdGVzdEluaXRpYWxpemVkIChmYWxzZSkNCisJLCBtX3BlcmlvZCAoa0RlZmF1bHRQZXJpb2QpDQorew0KKwltX3dhdGNoZG9nLlNldEVuYWJsZWQoZmFsc2UpOw0KK30NCisNCisvKioNCisgKiBGcmVlIHRoZSByZXNvdXJjZXMgZm9yIGEgUm9ib3RJdGVyYXRpdmVCYXNlIGNsYXNzLg0KKyAqLw0KK0l0ZXJhdGl2ZVJvYm90Ojp+SXRlcmF0aXZlUm9ib3QoKQ0KK3sNCit9DQorDQorLyoqDQorICogU2V0IHRoZSBwZXJpb2QgZm9yIHRoZSBwZXJpb2RpYyBmdW5jdGlvbnMuDQorICogDQorICogQHBhcmFtIHBlcmlvZCBUaGUgcGVyaW9kIG9mIHRoZSBwZXJpb2RpYyBmdW5jdGlvbiBjYWxscy4gIDAuMCBtZWFucyBzeW5jIHRvIGRyaXZlciBzdGF0aW9uIGNvbnRyb2wgZGF0YS4NCisgKi8NCit2b2lkIEl0ZXJhdGl2ZVJvYm90OjpTZXRQZXJpb2QoZG91YmxlIHBlcmlvZCkNCit7DQorCWlmIChwZXJpb2QgPiAwLjApDQorCXsNCisJCS8vIE5vdCBzeW5jaW5nIHdpdGggdGhlIERTLCBzbyBzdGFydCB0aGUgdGltZXIgZm9yIHRoZSBtYWluIGxvb3ANCisJCW1fbWFpbkxvb3BUaW1lci5SZXNldCgpOw0KKwkJbV9tYWluTG9vcFRpbWVyLlN0YXJ0KCk7DQorCX0NCisJZWxzZQ0KKwl7DQorCQkvLyBTeW5jaW5nIHdpdGggdGhlIERTLCBkb24ndCBuZWVkIHRoZSB0aW1lcg0KKwkJbV9tYWluTG9vcFRpbWVyLlN0b3AoKTsNCisJfQ0KKwltX3BlcmlvZCA9IHBlcmlvZDsNCit9DQorDQorLyoqDQorICogR2V0IHRoZSBwZXJpb2QgZm9yIHRoZSBwZXJpb2RpYyBmdW5jdGlvbnMuDQorICogUmV0dXJucyAwLjAgaWYgY29uZmlndXJlZCB0byBzeW5jcm9uaXplIHdpdGggRFMgY29udHJvbCBkYXRhIHBhY2tldHMuDQorICogQHJldHVybiBQZXJpb2Qgb2YgdGhlIHBlcmlvZGljIGZ1bmN0aW9uIGNhbGxzDQorICovDQorZG91YmxlIEl0ZXJhdGl2ZVJvYm90OjpHZXRQZXJpb2QoKQ0KK3sNCisJcmV0dXJuIG1fcGVyaW9kOw0KK30NCisNCisvKioNCisgKiBHZXQgdGhlIG51bWJlciBvZiBsb29wcyBwZXIgc2Vjb25kIGZvciB0aGUgSXRlcmF0aXZlUm9ib3QNCisgKiBAcmV0dXJuIEZyZXF1ZW5jeSBvZiB0aGUgcGVyaW9kaWMgZnVuY3Rpb24gY2FsbHMNCisgKi8NCitkb3VibGUgSXRlcmF0aXZlUm9ib3Q6OkdldExvb3BzUGVyU2VjKCkNCit7DQorCS8vIElmIHN5bmNpbmcgdG8gdGhlIGRyaXZlciBzdGF0aW9uLCB3ZSBkb24ndCBrbm93IHRoZSByYXRlLA0KKwkvLyAgIHNvIGd1ZXNzIHNvbWV0aGluZyBjbG9zZS4NCisJaWYgKG1fcGVyaW9kIDw9IDAuMCkNCisJCXJldHVybiA1MC4wOw0KKwlyZXR1cm4gMS4wIC8gbV9wZXJpb2Q7DQorfQ0KKw0KKy8qKg0KKyAqIFByb3ZpZGUgYW4gYWx0ZXJuYXRlICJtYWluIGxvb3AiIHZpYSBTdGFydENvbXBldGl0aW9uKCkuDQorICogDQorICogVGhpcyBzcGVjaWZpYyBTdGFydENvbXBldGl0aW9uKCkgaW1wbGVtZW50cyAibWFpbiBsb29wIiBiZWhhdmlvciBsaWtlIHRoYXQgb2YgdGhlIEZSQw0KKyAqIGNvbnRyb2wgc3lzdGVtIGluIDIwMDggYW5kIGVhcmxpZXIsIHdpdGggYSBwcmltYXJ5IChzbG93KSBsb29wIHRoYXQgaXMNCisgKiBjYWxsZWQgcGVyaW9kaWNhbGx5LCBhbmQgYSAiZmFzdCBsb29wIiAoYS5rLmEuICJzcGluIGxvb3AiKSB0aGF0IGlzIA0KKyAqIGNhbGxlZCBhcyBmYXN0IGFzIHBvc3NpYmxlIHdpdGggbm8gZGVsYXkgYmV0d2VlbiBjYWxscy4gDQorICovDQordm9pZCBJdGVyYXRpdmVSb2JvdDo6U3RhcnRDb21wZXRpdGlvbigpDQorew0KKwluVXNhZ2VSZXBvcnRpbmc6OnJlcG9ydChuVXNhZ2VSZXBvcnRpbmc6OmtSZXNvdXJjZVR5cGVfRnJhbWV3b3JrLCBuVXNhZ2VSZXBvcnRpbmc6OmtGcmFtZXdvcmtfSXRlcmF0aXZlKTsNCisNCisJTGl2ZVdpbmRvdyAqbHcgPSBMaXZlV2luZG93OjpHZXRJbnN0YW5jZSgpOw0KKwkvLyBmaXJzdCBhbmQgb25lLXRpbWUgaW5pdGlhbGl6YXRpb24NCisJU21hcnREYXNoYm9hcmQ6OmluaXQoKTsNCisJTmV0d29ya1RhYmxlOjpHZXRUYWJsZSgiTGl2ZVdpbmRvdyIpLT5HZXRTdWJUYWJsZSgiflNUQVRVU34iKS0+UHV0Qm9vbGVhbigiTFcgRW5hYmxlZCIsIGZhbHNlKTsNCisJUm9ib3RJbml0KCk7DQorDQorCS8vIGxvb3AgZm9yZXZlciwgY2FsbGluZyB0aGUgYXBwcm9wcmlhdGUgbW9kZS1kZXBlbmRlbnQgZnVuY3Rpb24NCisJbHctPlNldEVuYWJsZWQoZmFsc2UpOw0KKwl3aGlsZSAodHJ1ZSkNCisJew0KKwkJLy8gQ2FsbCB0aGUgYXBwcm9wcmlhdGUgZnVuY3Rpb24gZGVwZW5kaW5nIHVwb24gdGhlIGN1cnJlbnQgcm9ib3QgbW9kZQ0KKwkJaWYgKElzRGlzYWJsZWQoKSkNCisJCXsNCisJCQkvLyBjYWxsIERpc2FibGVkSW5pdCgpIGlmIHdlIGFyZSBub3cganVzdCBlbnRlcmluZyBkaXNhYmxlZCBtb2RlIGZyb20NCisJCQkvLyBlaXRoZXIgYSBkaWZmZXJlbnQgbW9kZSBvciBmcm9tIHBvd2VyLW9uDQorCQkJaWYoIW1fZGlzYWJsZWRJbml0aWFsaXplZCkNCisJCQl7DQorCQkJCWx3LT5TZXRFbmFibGVkKGZhbHNlKTsNCisJCQkJRGlzYWJsZWRJbml0KCk7DQorCQkJCW1fZGlzYWJsZWRJbml0aWFsaXplZCA9IHRydWU7DQorCQkJCS8vIHJlc2V0IHRoZSBpbml0aWFsaXphdGlvbiBmbGFncyBmb3IgdGhlIG90aGVyIG1vZGVzDQorCQkJCW1fYXV0b25vbW91c0luaXRpYWxpemVkID0gZmFsc2U7DQorICAgICAgICAgICAgICAgIG1fdGVsZW9wSW5pdGlhbGl6ZWQgPSBmYWxzZTsNCisgICAgICAgICAgICAgICAgbV90ZXN0SW5pdGlhbGl6ZWQgPSBmYWxzZTsNCisJCQl9DQorCQkJaWYgKE5leHRQZXJpb2RSZWFkeSgpKQ0KKwkJCXsNCisJCQkJRlJDX05ldHdvcmtDb21tdW5pY2F0aW9uX29ic2VydmVVc2VyUHJvZ3JhbURpc2FibGVkKCk7DQorCQkJCURpc2FibGVkUGVyaW9kaWMoKTsNCisJCQl9DQorCQl9DQorCQllbHNlIGlmIChJc0F1dG9ub21vdXMoKSkNCisJCXsNCisJCQkvLyBjYWxsIEF1dG9ub21vdXNJbml0KCkgaWYgd2UgYXJlIG5vdyBqdXN0IGVudGVyaW5nIGF1dG9ub21vdXMgbW9kZSBmcm9tDQorCQkJLy8gZWl0aGVyIGEgZGlmZmVyZW50IG1vZGUgb3IgZnJvbSBwb3dlci1vbg0KKwkJCWlmKCFtX2F1dG9ub21vdXNJbml0aWFsaXplZCkNCisJCQl7DQorCQkJCWx3LT5TZXRFbmFibGVkKGZhbHNlKTsNCisJCQkJQXV0b25vbW91c0luaXQoKTsNCisJCQkJbV9hdXRvbm9tb3VzSW5pdGlhbGl6ZWQgPSB0cnVlOw0KKwkJCQkvLyByZXNldCB0aGUgaW5pdGlhbGl6YXRpb24gZmxhZ3MgZm9yIHRoZSBvdGhlciBtb2Rlcw0KKwkJCQltX2Rpc2FibGVkSW5pdGlhbGl6ZWQgPSBmYWxzZTsNCisgICAgICAgICAgICAgICAgbV90ZWxlb3BJbml0aWFsaXplZCA9IGZhbHNlOw0KKyAgICAgICAgICAgICAgICBtX3Rlc3RJbml0aWFsaXplZCA9IGZhbHNlOw0KKwkJCX0NCisJCQlpZiAoTmV4dFBlcmlvZFJlYWR5KCkpDQorCQkJew0KKwkJCQlGUkNfTmV0d29ya0NvbW11bmljYXRpb25fb2JzZXJ2ZVVzZXJQcm9ncmFtQXV0b25vbW91cygpOw0KKwkJCQlBdXRvbm9tb3VzUGVyaW9kaWMoKTsNCisJCQl9DQorCQl9DQorICAgICAgICBlbHNlIGlmIChJc1Rlc3QoKSkNCisgICAgICAgIHsNCisgICAgICAgICAgICAvLyBjYWxsIFRlc3RJbml0KCkgaWYgd2UgYXJlIG5vdyBqdXN0IGVudGVyaW5nIHRlc3QgbW9kZSBmcm9tDQorICAgICAgICAgICAgLy8gZWl0aGVyIGEgZGlmZmVyZW50IG1vZGUgb3IgZnJvbSBwb3dlci1vbg0KKyAgICAgICAgICAgIGlmKCFtX3Rlc3RJbml0aWFsaXplZCkNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgCWx3LT5TZXRFbmFibGVkKHRydWUpOw0KKyAgICAgICAgICAgICAgICBUZXN0SW5pdCgpOw0KKyAgICAgICAgICAgICAgICBtX3Rlc3RJbml0aWFsaXplZCA9IHRydWU7DQorICAgICAgICAgICAgICAgIC8vIHJlc2V0IHRoZSBpbml0aWFsaXphdGlvbiBmbGFncyBmb3IgdGhlIG90aGVyIG1vZGVzDQorICAgICAgICAgICAgICAgIG1fZGlzYWJsZWRJbml0aWFsaXplZCA9IGZhbHNlOw0KKyAgICAgICAgICAgICAgICBtX2F1dG9ub21vdXNJbml0aWFsaXplZCA9IGZhbHNlOw0KKyAgICAgICAgICAgICAgICBtX3RlbGVvcEluaXRpYWxpemVkID0gZmFsc2U7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIGlmIChOZXh0UGVyaW9kUmVhZHkoKSkNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIEZSQ19OZXR3b3JrQ29tbXVuaWNhdGlvbl9vYnNlcnZlVXNlclByb2dyYW1UZXN0KCk7DQorICAgICAgICAgICAgICAgIFRlc3RQZXJpb2RpYygpOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgIH0NCisJCWVsc2UNCisJCXsNCisJCQkvLyBjYWxsIFRlbGVvcEluaXQoKSBpZiB3ZSBhcmUgbm93IGp1c3QgZW50ZXJpbmcgdGVsZW9wIG1vZGUgZnJvbQ0KKwkJCS8vIGVpdGhlciBhIGRpZmZlcmVudCBtb2RlIG9yIGZyb20gcG93ZXItb24NCisJCQlpZighbV90ZWxlb3BJbml0aWFsaXplZCkNCisJCQl7DQorCQkJCWx3LT5TZXRFbmFibGVkKGZhbHNlKTsNCisJCQkJVGVsZW9wSW5pdCgpOw0KKwkJCQltX3RlbGVvcEluaXRpYWxpemVkID0gdHJ1ZTsNCisJCQkJLy8gcmVzZXQgdGhlIGluaXRpYWxpemF0aW9uIGZsYWdzIGZvciB0aGUgb3RoZXIgbW9kZXMNCisJCQkJbV9kaXNhYmxlZEluaXRpYWxpemVkID0gZmFsc2U7DQorICAgICAgICAgICAgICAgIG1fYXV0b25vbW91c0luaXRpYWxpemVkID0gZmFsc2U7DQorICAgICAgICAgICAgICAgIG1fdGVzdEluaXRpYWxpemVkID0gZmFsc2U7DQorICAgICAgICAgICAgICAgIFNjaGVkdWxlcjo6R2V0SW5zdGFuY2UoKS0+U2V0RW5hYmxlZCh0cnVlKTsNCisJCQl9DQorCQkJaWYgKE5leHRQZXJpb2RSZWFkeSgpKQ0KKwkJCXsNCisJCQkJRlJDX05ldHdvcmtDb21tdW5pY2F0aW9uX29ic2VydmVVc2VyUHJvZ3JhbVRlbGVvcCgpOw0KKwkJCQlUZWxlb3BQZXJpb2RpYygpOw0KKwkJCX0NCisJCX0NCisJCS8vIHdhaXQgZm9yIGRyaXZlciBzdGF0aW9uIGRhdGEgc28gdGhlIGxvb3AgZG9lc24ndCBob2cgdGhlIENQVQ0KKwkJbV9kcy0+V2FpdEZvckRhdGEoKTsNCisJfQkNCit9DQorDQorLyoqDQorICogRGV0ZXJtaW5lIGlmIHRoZSBwZXJpb2RpYyBmdW5jdGlvbnMgc2hvdWxkIGJlIGNhbGxlZC4NCisgKg0KKyAqIElmIG1fcGVyaW9kID4gMC4wLCBjYWxsIHRoZSBwZXJpb2RpYyBmdW5jdGlvbiBldmVyeSBtX3BlcmlvZCBhcyBjb21wYXJlZA0KKyAqIHRvIFRpbWVyLkdldCgpLiAgSWYgbV9wZXJpb2QgPT0gMC4wLCBjYWxsIHRoZSBwZXJpb2RpYyBmdW5jdGlvbnMgd2hlbmV2ZXINCisgKiBhIHBhY2tldCBpcyByZWNlaXZlZCBmcm9tIHRoZSBEcml2ZXIgU3RhdGlvbiwgb3IgYWJvdXQgZXZlcnkgMjBtcy4NCisgKg0KKyAqIEB0b2RvIERlY2lkZSB3aGF0IHRoaXMgc2hvdWxkIGRvIGlmIGl0IHNsaXBzIG1vcmUgdGhhbiBvbmUgY3ljbGUuDQorICovDQorDQorYm9vbCBJdGVyYXRpdmVSb2JvdDo6TmV4dFBlcmlvZFJlYWR5KCkNCit7DQorCWlmIChtX3BlcmlvZCA+IDAuMCkNCisJew0KKwkJcmV0dXJuIG1fbWFpbkxvb3BUaW1lci5IYXNQZXJpb2RQYXNzZWQobV9wZXJpb2QpOw0KKwl9DQorCWVsc2UNCisJew0KKwkJcmV0dXJuIG1fZHMtPklzTmV3Q29udHJvbERhdGEoKTsNCisJfQ0KK30NCisNCisvKioNCisgKiBSb2JvdC13aWRlIGluaXRpYWxpemF0aW9uIGNvZGUgc2hvdWxkIGdvIGhlcmUuDQorICogDQorICogVXNlcnMgc2hvdWxkIG92ZXJyaWRlIHRoaXMgbWV0aG9kIGZvciBkZWZhdWx0IFJvYm90LXdpZGUgaW5pdGlhbGl6YXRpb24gd2hpY2ggd2lsbA0KKyAqIGJlIGNhbGxlZCB3aGVuIHRoZSByb2JvdCBpcyBmaXJzdCBwb3dlcmVkIG9uLiAgSXQgd2lsbCBiZSBjYWxsZWQgZXhhY3RseSAxIHRpbWUuDQorICovDQordm9pZCBJdGVyYXRpdmVSb2JvdDo6Um9ib3RJbml0KCkNCit7DQorCXByaW50ZigiRGVmYXVsdCAlcygpIG1ldGhvZC4uLiBPdmVybG9hZCBtZSFcbiIsIF9fRlVOQ1RJT05fXyk7DQorfQ0KKw0KKy8qKg0KKyAqIEluaXRpYWxpemF0aW9uIGNvZGUgZm9yIGRpc2FibGVkIG1vZGUgc2hvdWxkIGdvIGhlcmUuDQorICogDQorICogVXNlcnMgc2hvdWxkIG92ZXJyaWRlIHRoaXMgbWV0aG9kIGZvciBpbml0aWFsaXphdGlvbiBjb2RlIHdoaWNoIHdpbGwgYmUgY2FsbGVkIGVhY2ggdGltZQ0KKyAqIHRoZSByb2JvdCBlbnRlcnMgZGlzYWJsZWQgbW9kZS4NCisgKi8NCit2b2lkIEl0ZXJhdGl2ZVJvYm90OjpEaXNhYmxlZEluaXQoKQ0KK3sNCisJcHJpbnRmKCJEZWZhdWx0ICVzKCkgbWV0aG9kLi4uIE92ZXJsb2FkIG1lIVxuIiwgX19GVU5DVElPTl9fKTsNCit9DQorDQorLyoqDQorICogSW5pdGlhbGl6YXRpb24gY29kZSBmb3IgYXV0b25vbW91cyBtb2RlIHNob3VsZCBnbyBoZXJlLg0KKyAqIA0KKyAqIFVzZXJzIHNob3VsZCBvdmVycmlkZSB0aGlzIG1ldGhvZCBmb3IgaW5pdGlhbGl6YXRpb24gY29kZSB3aGljaCB3aWxsIGJlIGNhbGxlZCBlYWNoIHRpbWUNCisgKiB0aGUgcm9ib3QgZW50ZXJzIGF1dG9ub21vdXMgbW9kZS4NCisgKi8NCit2b2lkIEl0ZXJhdGl2ZVJvYm90OjpBdXRvbm9tb3VzSW5pdCgpDQorew0KKwlwcmludGYoIkRlZmF1bHQgJXMoKSBtZXRob2QuLi4gT3ZlcmxvYWQgbWUhXG4iLCBfX0ZVTkNUSU9OX18pOw0KK30NCisNCisvKioNCisgKiBJbml0aWFsaXphdGlvbiBjb2RlIGZvciB0ZWxlb3AgbW9kZSBzaG91bGQgZ28gaGVyZS4NCisgKiANCisgKiBVc2VycyBzaG91bGQgb3ZlcnJpZGUgdGhpcyBtZXRob2QgZm9yIGluaXRpYWxpemF0aW9uIGNvZGUgd2hpY2ggd2lsbCBiZSBjYWxsZWQgZWFjaCB0aW1lDQorICogdGhlIHJvYm90IGVudGVycyB0ZWxlb3AgbW9kZS4NCisgKi8NCit2b2lkIEl0ZXJhdGl2ZVJvYm90OjpUZWxlb3BJbml0KCkNCit7DQorICAgIHByaW50ZigiRGVmYXVsdCAlcygpIG1ldGhvZC4uLiBPdmVybG9hZCBtZSFcbiIsIF9fRlVOQ1RJT05fXyk7DQorfQ0KKw0KKy8qKg0KKyAqIEluaXRpYWxpemF0aW9uIGNvZGUgZm9yIHRlc3QgbW9kZSBzaG91bGQgZ28gaGVyZS4NCisgKiANCisgKiBVc2VycyBzaG91bGQgb3ZlcnJpZGUgdGhpcyBtZXRob2QgZm9yIGluaXRpYWxpemF0aW9uIGNvZGUgd2hpY2ggd2lsbCBiZSBjYWxsZWQgZWFjaCB0aW1lDQorICogdGhlIHJvYm90IGVudGVycyB0ZXN0IG1vZGUuDQorICovDQordm9pZCBJdGVyYXRpdmVSb2JvdDo6VGVzdEluaXQoKQ0KK3sNCisgICAgcHJpbnRmKCJEZWZhdWx0ICVzKCkgbWV0aG9kLi4uIE92ZXJsb2FkIG1lIVxuIiwgX19GVU5DVElPTl9fKTsNCit9DQorDQorLyoqDQorICogUGVyaW9kaWMgY29kZSBmb3IgZGlzYWJsZWQgbW9kZSBzaG91bGQgZ28gaGVyZS4NCisgKiANCisgKiBVc2VycyBzaG91bGQgb3ZlcnJpZGUgdGhpcyBtZXRob2QgZm9yIGNvZGUgd2hpY2ggd2lsbCBiZSBjYWxsZWQgcGVyaW9kaWNhbGx5IGF0IGEgcmVndWxhcg0KKyAqIHJhdGUgd2hpbGUgdGhlIHJvYm90IGlzIGluIGRpc2FibGVkIG1vZGUuDQorICovDQordm9pZCBJdGVyYXRpdmVSb2JvdDo6RGlzYWJsZWRQZXJpb2RpYygpDQorew0KKwlzdGF0aWMgYm9vbCBmaXJzdFJ1biA9IHRydWU7DQorCWlmIChmaXJzdFJ1bikNCisJew0KKwkJcHJpbnRmKCJEZWZhdWx0ICVzKCkgbWV0aG9kLi4uIE92ZXJsb2FkIG1lIVxuIiwgX19GVU5DVElPTl9fKTsNCisJCWZpcnN0UnVuID0gZmFsc2U7DQorCX0NCisJdGFza0RlbGF5KDEpOw0KK30NCisNCisvKioNCisgKiBQZXJpb2RpYyBjb2RlIGZvciBhdXRvbm9tb3VzIG1vZGUgc2hvdWxkIGdvIGhlcmUuDQorICoNCisgKiBVc2VycyBzaG91bGQgb3ZlcnJpZGUgdGhpcyBtZXRob2QgZm9yIGNvZGUgd2hpY2ggd2lsbCBiZSBjYWxsZWQgcGVyaW9kaWNhbGx5IGF0IGEgcmVndWxhcg0KKyAqIHJhdGUgd2hpbGUgdGhlIHJvYm90IGlzIGluIGF1dG9ub21vdXMgbW9kZS4NCisgKi8NCit2b2lkIEl0ZXJhdGl2ZVJvYm90OjpBdXRvbm9tb3VzUGVyaW9kaWMoKQ0KK3sNCisJc3RhdGljIGJvb2wgZmlyc3RSdW4gPSB0cnVlOw0KKwlpZiAoZmlyc3RSdW4pDQorCXsNCisJCXByaW50ZigiRGVmYXVsdCAlcygpIG1ldGhvZC4uLiBPdmVybG9hZCBtZSFcbiIsIF9fRlVOQ1RJT05fXyk7DQorCQlmaXJzdFJ1biA9IGZhbHNlOw0KKwl9DQorCXRhc2tEZWxheSgxKTsNCit9DQorDQorLyoqDQorICogUGVyaW9kaWMgY29kZSBmb3IgdGVsZW9wIG1vZGUgc2hvdWxkIGdvIGhlcmUuDQorICoNCisgKiBVc2VycyBzaG91bGQgb3ZlcnJpZGUgdGhpcyBtZXRob2QgZm9yIGNvZGUgd2hpY2ggd2lsbCBiZSBjYWxsZWQgcGVyaW9kaWNhbGx5IGF0IGEgcmVndWxhcg0KKyAqIHJhdGUgd2hpbGUgdGhlIHJvYm90IGlzIGluIHRlbGVvcCBtb2RlLg0KKyAqLw0KK3ZvaWQgSXRlcmF0aXZlUm9ib3Q6OlRlbGVvcFBlcmlvZGljKCkNCit7DQorCXN0YXRpYyBib29sIGZpcnN0UnVuID0gdHJ1ZTsNCisJaWYgKGZpcnN0UnVuKQ0KKwl7DQorCQlwcmludGYoIkRlZmF1bHQgJXMoKSBtZXRob2QuLi4gT3ZlcmxvYWQgbWUhXG4iLCBfX0ZVTkNUSU9OX18pOw0KKwkJZmlyc3RSdW4gPSBmYWxzZTsNCisJfQ0KKwl0YXNrRGVsYXkoMSk7DQorfQ0KKw0KKy8qKg0KKyAqIFBlcmlvZGljIGNvZGUgZm9yIHRlc3QgbW9kZSBzaG91bGQgZ28gaGVyZS4NCisgKg0KKyAqIFVzZXJzIHNob3VsZCBvdmVycmlkZSB0aGlzIG1ldGhvZCBmb3IgY29kZSB3aGljaCB3aWxsIGJlIGNhbGxlZCBwZXJpb2RpY2FsbHkgYXQgYSByZWd1bGFyDQorICogcmF0ZSB3aGlsZSB0aGUgcm9ib3QgaXMgaW4gdGVzdCBtb2RlLg0KKyAqLw0KK3ZvaWQgSXRlcmF0aXZlUm9ib3Q6OlRlc3RQZXJpb2RpYygpDQorew0KKyAgICBzdGF0aWMgYm9vbCBmaXJzdFJ1biA9IHRydWU7DQorICAgIGlmIChmaXJzdFJ1bikNCisgICAgew0KKyAgICAgICAgcHJpbnRmKCJEZWZhdWx0ICVzKCkgbWV0aG9kLi4uIE92ZXJsb2FkIG1lIVxuIiwgX19GVU5DVElPTl9fKTsNCisgICAgICAgIGZpcnN0UnVuID0gZmFsc2U7DQorICAgIH0NCisgICAgdGFza0RlbGF5KDEpOw0KK30NCisNCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9JdGVyYXRpdmVSb2JvdC5oIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvSXRlcmF0aXZlUm9ib3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xM2U2NWRhCi0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvSXRlcmF0aXZlUm9ib3QuaApAQCAtMCwwICsxLDgzIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy8qIENvcHlyaWdodCAoYykgRklSU1QgMjAwOC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4JCQkJCQkJICAqLw0KKy8qIE9wZW4gU291cmNlIFNvZnR3YXJlIC0gbWF5IGJlIG1vZGlmaWVkIGFuZCBzaGFyZWQgYnkgRlJDIHRlYW1zLiBUaGUgY29kZSAgICovDQorLyogbXVzdCBiZSBhY2NvbXBhbmllZCBieSB0aGUgRklSU1QgQlNEIGxpY2Vuc2UgZmlsZSBpbiAkKFdJTkRfQkFTRSkvV1BJTGliLiAgKi8NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKyNpZm5kZWYgUk9CT1RfSVRFUkFUSVZFX0hfDQorI2RlZmluZSBST0JPVF9JVEVSQVRJVkVfSF8NCisNCisjaW5jbHVkZSAiVGltZXIuaCINCisjaW5jbHVkZSAiUm9ib3RCYXNlLmgiDQorDQorLyoqDQorICogSXRlcmF0aXZlUm9ib3QgaW1wbGVtZW50cyBhIHNwZWNpZmljIHR5cGUgb2YgUm9ib3QgUHJvZ3JhbSBmcmFtZXdvcmssIGV4dGVuZGluZyB0aGUgUm9ib3RCYXNlIGNsYXNzLg0KKyAqIA0KKyAqIFRoZSBJdGVyYXRpdmVSb2JvdCBjbGFzcyBpcyBpbnRlbmRlZCB0byBiZSBzdWJjbGFzc2VkIGJ5IGEgdXNlciBjcmVhdGluZyBhIHJvYm90IHByb2dyYW0uDQorICogDQorICogVGhpcyBjbGFzcyBpcyBpbnRlbmRlZCB0byBpbXBsZW1lbnQgdGhlICJvbGQgc3R5bGUiIGRlZmF1bHQgY29kZSwgYnkgcHJvdmlkaW5nDQorICogdGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgd2hpY2ggYXJlIGNhbGxlZCBieSB0aGUgbWFpbiBsb29wLCBTdGFydENvbXBldGl0aW9uKCksIGF0IHRoZSBhcHByb3ByaWF0ZSB0aW1lczoNCisgKiANCisgKiBSb2JvdEluaXQoKSAtLSBwcm92aWRlIGZvciBpbml0aWFsaXphdGlvbiBhdCByb2JvdCBwb3dlci1vbg0KKyAqIA0KKyAqIEluaXQoKSBmdW5jdGlvbnMgLS0gZWFjaCBvZiB0aGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBpcyBjYWxsZWQgb25jZSB3aGVuIHRoZQ0KKyAqICAgICAgICAgICAgICAgICAgICAgYXBwcm9wcmlhdGUgbW9kZSBpcyBlbnRlcmVkOg0KKyAqICAtIERpc2FibGVkSW5pdCgpICAgLS0gY2FsbGVkIG9ubHkgd2hlbiBmaXJzdCBkaXNhYmxlZA0KKyAqICAtIEF1dG9ub21vdXNJbml0KCkgLS0gY2FsbGVkIGVhY2ggYW5kIGV2ZXJ5IHRpbWUgYXV0b25vbW91cyBpcyBlbnRlcmVkIGZyb20gYW5vdGhlciBtb2RlDQorICogIC0gVGVsZW9wSW5pdCgpICAgICAtLSBjYWxsZWQgZWFjaCBhbmQgZXZlcnkgdGltZSB0ZWxlb3AgaXMgZW50ZXJlZCBmcm9tIGFub3RoZXIgbW9kZQ0KKyAqICAtIFRlc3RJbml0KCkgICAgICAgLS0gY2FsbGVkIGVhY2ggYW5kIGV2ZXJ5IHRpbWUgdGVzdCBpcyBlbnRlcmVkIGZyb20gYW5vdGhlciBtb2RlDQorICogDQorICogUGVyaW9kaWMoKSBmdW5jdGlvbnMgLS0gZWFjaCBvZiB0aGVzZSBmdW5jdGlvbnMgaXMgY2FsbGVkIGl0ZXJhdGl2ZWx5IGF0IHRoZQ0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgIGFwcHJvcHJpYXRlIHBlcmlvZGljIHJhdGUgKGFrYSB0aGUgInNsb3cgbG9vcCIpLiAgVGhlIGRlZmF1bHQgcGVyaW9kIG9mDQorICogICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGl0ZXJhdGl2ZSByb2JvdCBpcyBzeW5jZWQgdG8gdGhlIGRyaXZlciBzdGF0aW9uIGNvbnRyb2wgcGFja2V0cywNCisgKiAgICAgICAgICAgICAgICAgICAgICAgICBnaXZpbmcgYSBwZXJpb2RpYyBmcmVxdWVuY3kgb2YgYWJvdXQgNTBIeiAoNTAgdGltZXMgcGVyIHNlY29uZCkuDQorICogICAtIERpc2FibGVkUGVyaW9kaWMoKQ0KKyAqICAgLSBBdXRvbm9tb3VzUGVyaW9kaWMoKQ0KKyAqICAgLSBUZWxlb3BQZXJpb2RpYygpDQorICogICAtIFRlc3RQZXJpb2RpYygpDQorICogDQorICovDQorDQorY2xhc3MgSXRlcmF0aXZlUm9ib3QgOiBwdWJsaWMgUm9ib3RCYXNlIHsNCitwdWJsaWM6DQorCS8qDQorCSAqIFRoZSBkZWZhdWx0IHBlcmlvZCBmb3IgdGhlIHBlcmlvZGljIGZ1bmN0aW9uIGNhbGxzIChzZWNvbmRzKQ0KKwkgKiBTZXR0aW5nIHRoZSBwZXJpb2QgdG8gMC4wIHdpbGwgY2F1c2UgdGhlIHBlcmlvZGljIGZ1bmN0aW9ucyB0byBmb2xsb3cNCisJICogdGhlIERyaXZlciBTdGF0aW9uIHBhY2tldCByYXRlIG9mIGFib3V0IDUwSHouDQorCSAqLw0KKwlzdGF0aWMgY29uc3QgZG91YmxlIGtEZWZhdWx0UGVyaW9kID0gMC4wOw0KKw0KKwl2aXJ0dWFsIHZvaWQgU3RhcnRDb21wZXRpdGlvbigpOw0KKw0KKwl2aXJ0dWFsIHZvaWQgUm9ib3RJbml0KCk7DQorCXZpcnR1YWwgdm9pZCBEaXNhYmxlZEluaXQoKTsNCisJdmlydHVhbCB2b2lkIEF1dG9ub21vdXNJbml0KCk7DQorICAgIHZpcnR1YWwgdm9pZCBUZWxlb3BJbml0KCk7DQorICAgIHZpcnR1YWwgdm9pZCBUZXN0SW5pdCgpOw0KKw0KKwl2aXJ0dWFsIHZvaWQgRGlzYWJsZWRQZXJpb2RpYygpOw0KKwl2aXJ0dWFsIHZvaWQgQXV0b25vbW91c1BlcmlvZGljKCk7DQorICAgIHZpcnR1YWwgdm9pZCBUZWxlb3BQZXJpb2RpYygpOw0KKyAgICB2aXJ0dWFsIHZvaWQgVGVzdFBlcmlvZGljKCk7DQorDQorCXZvaWQgU2V0UGVyaW9kKGRvdWJsZSBwZXJpb2QpOw0KKwlkb3VibGUgR2V0UGVyaW9kKCk7DQorCWRvdWJsZSBHZXRMb29wc1BlclNlYygpOw0KKw0KK3Byb3RlY3RlZDoNCisJdmlydHVhbCB+SXRlcmF0aXZlUm9ib3QoKTsNCisJSXRlcmF0aXZlUm9ib3QoKTsNCisNCitwcml2YXRlOg0KKwlib29sIE5leHRQZXJpb2RSZWFkeSgpOw0KKw0KKwlib29sIG1fZGlzYWJsZWRJbml0aWFsaXplZDsNCisJYm9vbCBtX2F1dG9ub21vdXNJbml0aWFsaXplZDsNCisgICAgYm9vbCBtX3RlbGVvcEluaXRpYWxpemVkOw0KKyAgICBib29sIG1fdGVzdEluaXRpYWxpemVkOw0KKwlkb3VibGUgbV9wZXJpb2Q7DQorCVRpbWVyIG1fbWFpbkxvb3BUaW1lcjsNCit9Ow0KKw0KKyNlbmRpZg0KKw0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0phZ3Vhci5jcHAgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9KYWd1YXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5MmJkOGUKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9KYWd1YXIuY3BwCkBAIC0wLDAgKzEsMTAyIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy8qIENvcHlyaWdodCAoYykgRklSU1QgMjAwOC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4JCQkJCQkJICAqLw0KKy8qIE9wZW4gU291cmNlIFNvZnR3YXJlIC0gbWF5IGJlIG1vZGlmaWVkIGFuZCBzaGFyZWQgYnkgRlJDIHRlYW1zLiBUaGUgY29kZSAgICovDQorLyogbXVzdCBiZSBhY2NvbXBhbmllZCBieSB0aGUgRklSU1QgQlNEIGxpY2Vuc2UgZmlsZSBpbiAkKFdJTkRfQkFTRSkvV1BJTGliLiAgKi8NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKw0KKyNpbmNsdWRlICJKYWd1YXIuaCINCisjaW5jbHVkZSAiTmV0d29ya0NvbW11bmljYXRpb24vVXNhZ2VSZXBvcnRpbmcuaCINCisjaW5jbHVkZSAiRGlnaXRhbE1vZHVsZS5oIg0KKyNpbmNsdWRlICJMaXZlV2luZG93L0xpdmVXaW5kb3cuaCINCisNCisvKioNCisgKiBDb21tb24gaW5pdGlhbGl6YXRpb24gY29kZSBjYWxsZWQgYnkgYWxsIGNvbnN0cnVjdG9ycy4NCisgKi8NCit2b2lkIEphZ3Vhcjo6SW5pdEphZ3VhcigpDQorew0KKwkvKg0KKwkgKiBJbnB1dCBwcm9maWxlIGRlZmluZWQgYnkgTHVtaW5hcnkgTWljcm8uDQorCSAqIA0KKwkgKiBGdWxsIHJldmVyc2UgcmFuZ2VzIGZyb20gMC42NzEzMjVtcyB0byAwLjY5NzIyMTFtcw0KKwkgKiBQcm9wb3J0aW9uYWwgcmV2ZXJzZSByYW5nZXMgZnJvbSAwLjY5NzIyMTFtcyB0byAxLjQ0ODIwNzhtcw0KKwkgKiBOZXV0cmFsIHJhbmdlcyBmcm9tIDEuNDQ4MjA3OG1zIHRvIDEuNTUxNzkyMm1zDQorCSAqIFByb3BvcnRpb25hbCBmb3J3YXJkIHJhbmdlcyBmcm9tIDEuNTUxNzkyMm1zIHRvIDIuMzAyNzc4OW1zDQorCSAqIEZ1bGwgZm9yd2FyZCByYW5nZXMgZnJvbSAyLjMwMjc3ODltcyB0byAyLjMyODY3NW1zDQorCSAqIFRPRE86IGNvbXB1dGUgdGhlIGFwcHJvcHJpYXRlIHZhbHVlcyBiYXNlZCBvbiBkaWdpdGFsIGxvb3AgdGltaW5nDQorCSAqLw0KKwlTZXRCb3VuZHMoMjUxLCAxMzUsIDEyOCwgMTIwLCA0KTsNCisJU2V0UGVyaW9kTXVsdGlwbGllcihrUGVyaW9kTXVsdGlwbGllcl8xWCk7DQorCVNldFJhdyhtX2NlbnRlclB3bSk7DQorDQorCW5Vc2FnZVJlcG9ydGluZzo6cmVwb3J0KG5Vc2FnZVJlcG9ydGluZzo6a1Jlc291cmNlVHlwZV9KYWd1YXIsIEdldENoYW5uZWwoKSwgR2V0TW9kdWxlTnVtYmVyKCkgLSAxKTsNCisJTGl2ZVdpbmRvdzo6R2V0SW5zdGFuY2UoKS0+QWRkQWN0dWF0b3IoIkphZ3VhciIsIEdldE1vZHVsZU51bWJlcigpLCBHZXRDaGFubmVsKCksIHRoaXMpOw0KK30NCisNCisvKioNCisgKiBDb25zdHJ1Y3RvciB0aGF0IGFzc3VtZXMgdGhlIGRlZmF1bHQgZGlnaXRhbCBtb2R1bGUuDQorICogDQorICogQHBhcmFtIGNoYW5uZWwgVGhlIFBXTSBjaGFubmVsIG9uIHRoZSBkaWdpdGFsIG1vZHVsZSB0aGF0IHRoZSBKYWd1YXIgaXMgYXR0YWNoZWQgdG8uDQorICovDQorSmFndWFyOjpKYWd1YXIoVUlOVDMyIGNoYW5uZWwpIDogU2FmZVBXTShjaGFubmVsKQ0KK3sNCisJSW5pdEphZ3VhcigpOw0KK30NCisNCisvKioNCisgKiBDb25zdHJ1Y3RvciB0aGF0IHNwZWNpZmllcyB0aGUgZGlnaXRhbCBtb2R1bGUuDQorICogDQorICogQHBhcmFtIG1vZHVsZU51bWJlciBUaGUgZGlnaXRhbCBtb2R1bGUgKDEgb3IgMikuDQorICogQHBhcmFtIGNoYW5uZWwgVGhlIFBXTSBjaGFubmVsIG9uIHRoZSBkaWdpdGFsIG1vZHVsZSB0aGF0IHRoZSBKYWd1YXIgaXMgYXR0YWNoZWQgdG8uDQorICovDQorSmFndWFyOjpKYWd1YXIoVUlOVDggbW9kdWxlTnVtYmVyLCBVSU5UMzIgY2hhbm5lbCkgOiBTYWZlUFdNKG1vZHVsZU51bWJlciwgY2hhbm5lbCkNCit7DQorCUluaXRKYWd1YXIoKTsNCit9DQorDQorSmFndWFyOjp+SmFndWFyKCkNCit7DQorfQ0KKw0KKy8qKg0KKyAqIFNldCB0aGUgUFdNIHZhbHVlLiAgDQorICogDQorICogVGhlIFBXTSB2YWx1ZSBpcyBzZXQgdXNpbmcgYSByYW5nZSBvZiAtMS4wIHRvIDEuMCwgYXBwcm9wcmlhdGVseQ0KKyAqIHNjYWxpbmcgdGhlIHZhbHVlIGZvciB0aGUgRlBHQS4NCisgKiANCisgKiBAcGFyYW0gc3BlZWQgVGhlIHNwZWVkIHZhbHVlIGJldHdlZW4gLTEuMCBhbmQgMS4wIHRvIHNldC4NCisgKiBAcGFyYW0gc3luY0dyb3VwIFVudXNlZCBpbnRlcmZhY2UuDQorICovDQordm9pZCBKYWd1YXI6OlNldChmbG9hdCBzcGVlZCwgVUlOVDggc3luY0dyb3VwKQ0KK3sNCisJU2V0U3BlZWQoc3BlZWQpOw0KK30NCisNCisvKioNCisgKiBHZXQgdGhlIHJlY2VudGx5IHNldCB2YWx1ZSBvZiB0aGUgUFdNLg0KKyAqIA0KKyAqIEByZXR1cm4gVGhlIG1vc3QgcmVjZW50bHkgc2V0IHZhbHVlIGZvciB0aGUgUFdNIGJldHdlZW4gLTEuMCBhbmQgMS4wLg0KKyAqLw0KK2Zsb2F0IEphZ3Vhcjo6R2V0KCkNCit7DQorCXJldHVybiBHZXRTcGVlZCgpOw0KK30NCisNCisvKioNCisgKiBDb21tb24gaW50ZXJmYWNlIGZvciBkaXNhYmxpbmcgYSBtb3Rvci4NCisgKi8NCit2b2lkIEphZ3Vhcjo6RGlzYWJsZSgpDQorew0KKwlTZXRSYXcoa1B3bURpc2FibGVkKTsNCit9DQorDQorLyoqDQorICogV3JpdGUgb3V0IHRoZSBQSUQgdmFsdWUgYXMgc2VlbiBpbiB0aGUgUElET3V0cHV0IGJhc2Ugb2JqZWN0Lg0KKyAqIA0KKyAqIEBwYXJhbSBvdXRwdXQgV3JpdGUgb3V0IHRoZSBQV00gdmFsdWUgYXMgd2FzIGZvdW5kIGluIHRoZSBQSURDb250cm9sbGVyDQorICovDQordm9pZCBKYWd1YXI6OlBJRFdyaXRlKGZsb2F0IG91dHB1dCkNCit7DQorCVNldChvdXRwdXQpOw0KK30NCisNCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9KYWd1YXIuaCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0phZ3Vhci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiNTdjODkKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9KYWd1YXIuaApAQCAtMCwwICsxLDM0IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy8qIENvcHlyaWdodCAoYykgRklSU1QgMjAwOC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4JCQkJCQkJICAqLw0KKy8qIE9wZW4gU291cmNlIFNvZnR3YXJlIC0gbWF5IGJlIG1vZGlmaWVkIGFuZCBzaGFyZWQgYnkgRlJDIHRlYW1zLiBUaGUgY29kZSAgICovDQorLyogbXVzdCBiZSBhY2NvbXBhbmllZCBieSB0aGUgRklSU1QgQlNEIGxpY2Vuc2UgZmlsZSBpbiAkKFdJTkRfQkFTRSkvV1BJTGliLiAgKi8NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKyNpZm5kZWYgSkFHVUFSX0gNCisjZGVmaW5lIEpBR1VBUl9IDQorDQorI2luY2x1ZGUgIlNhZmVQV00uaCINCisjaW5jbHVkZSAiU3BlZWRDb250cm9sbGVyLmgiDQorI2luY2x1ZGUgIlBJRE91dHB1dC5oIg0KKw0KKy8qKg0KKyAqIEx1bWluYXJ5IE1pY3JvIEphZ3VhciBTcGVlZCBDb250cm9sDQorICovDQorY2xhc3MgSmFndWFyIDogcHVibGljIFNhZmVQV00sIHB1YmxpYyBTcGVlZENvbnRyb2xsZXINCit7DQorcHVibGljOg0KKwlleHBsaWNpdCBKYWd1YXIoVUlOVDMyIGNoYW5uZWwpOw0KKwlKYWd1YXIoVUlOVDggbW9kdWxlTnVtYmVyLCBVSU5UMzIgY2hhbm5lbCk7DQorCXZpcnR1YWwgfkphZ3VhcigpOw0KKwl2aXJ0dWFsIHZvaWQgU2V0KGZsb2F0IHZhbHVlLCBVSU5UOCBzeW5jR3JvdXA9MCk7DQorCXZpcnR1YWwgZmxvYXQgR2V0KCk7DQorCXZpcnR1YWwgdm9pZCBEaXNhYmxlKCk7DQorDQorCXZpcnR1YWwgdm9pZCBQSURXcml0ZShmbG9hdCBvdXRwdXQpOw0KKw0KK3ByaXZhdGU6DQorCXZvaWQgSW5pdEphZ3VhcigpOw0KK307DQorDQorI2VuZGlmDQorDQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvSm95c3RpY2suY3BwIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvSm95c3RpY2suY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjOGY4ZWUKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9Kb3lzdGljay5jcHAKQEAgLTAsMCArMSwzMDIgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorLyogQ29weXJpZ2h0IChjKSBGSVJTVCAyMDA4LiBBbGwgUmlnaHRzIFJlc2VydmVkLgkJCQkJCQkgICovDQorLyogT3BlbiBTb3VyY2UgU29mdHdhcmUgLSBtYXkgYmUgbW9kaWZpZWQgYW5kIHNoYXJlZCBieSBGUkMgdGVhbXMuIFRoZSBjb2RlICAgKi8NCisvKiBtdXN0IGJlIGFjY29tcGFuaWVkIGJ5IHRoZSBGSVJTVCBCU0QgbGljZW5zZSBmaWxlIGluICQoV0lORF9CQVNFKS9XUElMaWIuICAqLw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorI2luY2x1ZGUgIkpveXN0aWNrLmgiDQorI2luY2x1ZGUgIkRyaXZlclN0YXRpb24uaCINCisjaW5jbHVkZSAiTmV0d29ya0NvbW11bmljYXRpb24vVXNhZ2VSZXBvcnRpbmcuaCINCisjaW5jbHVkZSAiV1BJRXJyb3JzLmgiDQorI2luY2x1ZGUgPG1hdGguaD4NCisNCitjb25zdCBVSU5UMzIgSm95c3RpY2s6OmtEZWZhdWx0WEF4aXM7DQorY29uc3QgVUlOVDMyIEpveXN0aWNrOjprRGVmYXVsdFlBeGlzOw0KK2NvbnN0IFVJTlQzMiBKb3lzdGljazo6a0RlZmF1bHRaQXhpczsNCitjb25zdCBVSU5UMzIgSm95c3RpY2s6OmtEZWZhdWx0VHdpc3RBeGlzOw0KK2NvbnN0IFVJTlQzMiBKb3lzdGljazo6a0RlZmF1bHRUaHJvdHRsZUF4aXM7DQorY29uc3QgVUlOVDMyIEpveXN0aWNrOjprRGVmYXVsdFRyaWdnZXJCdXR0b247DQorY29uc3QgVUlOVDMyIEpveXN0aWNrOjprRGVmYXVsdFRvcEJ1dHRvbjsNCitzdGF0aWMgSm95c3RpY2sgKmpveXN0aWNrc1tEcml2ZXJTdGF0aW9uOjprSm95c3RpY2tQb3J0c107DQorc3RhdGljIGJvb2wgam95U3RpY2tzSW5pdGlhbGl6ZWQgPSBmYWxzZTsNCisNCisvKioNCisgKiBDb25zdHJ1Y3QgYW4gaW5zdGFuY2Ugb2YgYSBqb3lzdGljay4NCisgKiBUaGUgam95c3RpY2sgaW5kZXggaXMgdGhlIHVzYiBwb3J0IG9uIHRoZSBkcml2ZXJzIHN0YXRpb24uDQorICogDQorICogQHBhcmFtIHBvcnQgVGhlIHBvcnQgb24gdGhlIGRyaXZlciBzdGF0aW9uIHRoYXQgdGhlIGpveXN0aWNrIGlzIHBsdWdnZWQgaW50by4NCisgKi8NCitKb3lzdGljazo6Sm95c3RpY2soVUlOVDMyIHBvcnQpDQorCTogbV9kcyAoTlVMTCkNCisJLCBtX3BvcnQgKHBvcnQpDQorCSwgbV9heGVzIChOVUxMKQ0KKwksIG1fYnV0dG9ucyAoTlVMTCkNCit7DQorCUluaXRKb3lzdGljayhrTnVtQXhpc1R5cGVzLCBrTnVtQnV0dG9uVHlwZXMpOw0KKw0KKwltX2F4ZXNba1hBeGlzXSA9IGtEZWZhdWx0WEF4aXM7DQorCW1fYXhlc1trWUF4aXNdID0ga0RlZmF1bHRZQXhpczsNCisJbV9heGVzW2taQXhpc10gPSBrRGVmYXVsdFpBeGlzOw0KKwltX2F4ZXNba1R3aXN0QXhpc10gPSBrRGVmYXVsdFR3aXN0QXhpczsNCisJbV9heGVzW2tUaHJvdHRsZUF4aXNdID0ga0RlZmF1bHRUaHJvdHRsZUF4aXM7DQorCQ0KKwltX2J1dHRvbnNba1RyaWdnZXJCdXR0b25dID0ga0RlZmF1bHRUcmlnZ2VyQnV0dG9uOw0KKwltX2J1dHRvbnNba1RvcEJ1dHRvbl0gPSBrRGVmYXVsdFRvcEJ1dHRvbjsNCisNCisJblVzYWdlUmVwb3J0aW5nOjpyZXBvcnQoblVzYWdlUmVwb3J0aW5nOjprUmVzb3VyY2VUeXBlX0pveXN0aWNrLCBwb3J0KTsNCit9DQorDQorLyoqDQorICogVmVyc2lvbiBvZiB0aGUgY29uc3RydWN0b3IgdG8gYmUgY2FsbGVkIGJ5IHN1Yi1jbGFzc2VzLg0KKyAqIA0KKyAqIFRoaXMgY29uc3RydWN0b3IgYWxsb3dzIHRoZSBzdWJjbGFzcyB0byBjb25maWd1cmUgdGhlIG51bWJlciBvZiBjb25zdGFudHMNCisgKiBmb3IgYXhlcyBhbmQgYnV0dG9ucy4NCisgKiANCisgKiBAcGFyYW0gcG9ydCBUaGUgcG9ydCBvbiB0aGUgZHJpdmVyIHN0YXRpb24gdGhhdCB0aGUgam95c3RpY2sgaXMgcGx1Z2dlZCBpbnRvLg0KKyAqIEBwYXJhbSBudW1BeGlzVHlwZXMgVGhlIG51bWJlciBvZiBheGlzIHR5cGVzIGluIHRoZSBlbnVtLg0KKyAqIEBwYXJhbSBudW1CdXR0b25UeXBlcyBUaGUgbnVtYmVyIG9mIGJ1dHRvbiB0eXBlcyBpbiB0aGUgZW51bS4NCisgKi8NCitKb3lzdGljazo6Sm95c3RpY2soVUlOVDMyIHBvcnQsIFVJTlQzMiBudW1BeGlzVHlwZXMsIFVJTlQzMiBudW1CdXR0b25UeXBlcykNCisJOiBtX2RzIChOVUxMKQ0KKwksIG1fcG9ydCAocG9ydCkNCisJLCBtX2F4ZXMgKE5VTEwpDQorCSwgbV9idXR0b25zIChOVUxMKQ0KK3sNCisJSW5pdEpveXN0aWNrKG51bUF4aXNUeXBlcywgbnVtQnV0dG9uVHlwZXMpOw0KK30NCisNCit2b2lkIEpveXN0aWNrOjpJbml0Sm95c3RpY2soVUlOVDMyIG51bUF4aXNUeXBlcywgVUlOVDMyIG51bUJ1dHRvblR5cGVzKQ0KK3sNCisJaWYgKCAham95U3RpY2tzSW5pdGlhbGl6ZWQgKQ0KKwl7DQorCQlmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgRHJpdmVyU3RhdGlvbjo6a0pveXN0aWNrUG9ydHM7IGkrKykNCisJCQlqb3lzdGlja3NbaV0gPSBOVUxMOw0KKwkJam95U3RpY2tzSW5pdGlhbGl6ZWQgPSB0cnVlOw0KKwl9DQorCWpveXN0aWNrc1ttX3BvcnQgLSAxXSA9IHRoaXM7DQorCQ0KKwltX2RzID0gRHJpdmVyU3RhdGlvbjo6R2V0SW5zdGFuY2UoKTsNCisJbV9heGVzID0gbmV3IFVJTlQzMltudW1BeGlzVHlwZXNdOw0KKwltX2J1dHRvbnMgPSBuZXcgVUlOVDMyW251bUJ1dHRvblR5cGVzXTsNCit9DQorDQorSm95c3RpY2sgKiBKb3lzdGljazo6R2V0U3RpY2tGb3JQb3J0KFVJTlQzMiBwb3J0KQ0KK3sNCisJSm95c3RpY2sgKnN0aWNrID0gam95c3RpY2tzW3BvcnQgLSAxXTsNCisJaWYgKHN0aWNrID09IE5VTEwpDQorCXsNCisJCXN0aWNrID0gbmV3IEpveXN0aWNrKHBvcnQpOw0KKwkJam95c3RpY2tzW3BvcnQgLSAxXSA9IHN0aWNrOw0KKwl9DQorCXJldHVybiBzdGljazsNCit9DQorDQorSm95c3RpY2s6On5Kb3lzdGljaygpDQorew0KKwlkZWxldGUgW10gbV9idXR0b25zOw0KKwlkZWxldGUgW10gbV9heGVzOw0KK30NCisNCisvKioNCisgKiBHZXQgdGhlIFggdmFsdWUgb2YgdGhlIGpveXN0aWNrLg0KKyAqIFRoaXMgZGVwZW5kcyBvbiB0aGUgbWFwcGluZyBvZiB0aGUgam95c3RpY2sgY29ubmVjdGVkIHRvIHRoZSBjdXJyZW50IHBvcnQuDQorICovDQorZmxvYXQgSm95c3RpY2s6OkdldFgoSm95c3RpY2tIYW5kIGhhbmQpDQorew0KKwlyZXR1cm4gR2V0UmF3QXhpcyhtX2F4ZXNba1hBeGlzXSk7DQorfQ0KKw0KKy8qKg0KKyAqIEdldCB0aGUgWSB2YWx1ZSBvZiB0aGUgam95c3RpY2suDQorICogVGhpcyBkZXBlbmRzIG9uIHRoZSBtYXBwaW5nIG9mIHRoZSBqb3lzdGljayBjb25uZWN0ZWQgdG8gdGhlIGN1cnJlbnQgcG9ydC4NCisgKi8NCitmbG9hdCBKb3lzdGljazo6R2V0WShKb3lzdGlja0hhbmQgaGFuZCkNCit7DQorCXJldHVybiBHZXRSYXdBeGlzKG1fYXhlc1trWUF4aXNdKTsNCit9DQorDQorLyoqDQorICogR2V0IHRoZSBaIHZhbHVlIG9mIHRoZSBjdXJyZW50IGpveXN0aWNrLg0KKyAqIFRoaXMgZGVwZW5kcyBvbiB0aGUgbWFwcGluZyBvZiB0aGUgam95c3RpY2sgY29ubmVjdGVkIHRvIHRoZSBjdXJyZW50IHBvcnQuDQorICovDQorZmxvYXQgSm95c3RpY2s6OkdldFooKQ0KK3sNCisJcmV0dXJuIEdldFJhd0F4aXMobV9heGVzW2taQXhpc10pOw0KK30NCisNCisvKioNCisgKiBHZXQgdGhlIHR3aXN0IHZhbHVlIG9mIHRoZSBjdXJyZW50IGpveXN0aWNrLg0KKyAqIFRoaXMgZGVwZW5kcyBvbiB0aGUgbWFwcGluZyBvZiB0aGUgam95c3RpY2sgY29ubmVjdGVkIHRvIHRoZSBjdXJyZW50IHBvcnQuDQorICovDQorZmxvYXQgSm95c3RpY2s6OkdldFR3aXN0KCkNCit7DQorCXJldHVybiBHZXRSYXdBeGlzKG1fYXhlc1trVHdpc3RBeGlzXSk7DQorfQ0KKw0KKy8qKg0KKyAqIEdldCB0aGUgdGhyb3R0bGUgdmFsdWUgb2YgdGhlIGN1cnJlbnQgam95c3RpY2suDQorICogVGhpcyBkZXBlbmRzIG9uIHRoZSBtYXBwaW5nIG9mIHRoZSBqb3lzdGljayBjb25uZWN0ZWQgdG8gdGhlIGN1cnJlbnQgcG9ydC4NCisgKi8NCitmbG9hdCBKb3lzdGljazo6R2V0VGhyb3R0bGUoKQ0KK3sNCisJcmV0dXJuIEdldFJhd0F4aXMobV9heGVzW2tUaHJvdHRsZUF4aXNdKTsNCit9DQorDQorLyoqDQorICogR2V0IHRoZSB2YWx1ZSBvZiB0aGUgYXhpcy4NCisgKiANCisgKiBAcGFyYW0gYXhpcyBUaGUgYXhpcyB0byByZWFkIFsxLTZdLg0KKyAqIEByZXR1cm4gVGhlIHZhbHVlIG9mIHRoZSBheGlzLg0KKyAqLw0KK2Zsb2F0IEpveXN0aWNrOjpHZXRSYXdBeGlzKFVJTlQzMiBheGlzKQ0KK3sNCisJcmV0dXJuIG1fZHMtPkdldFN0aWNrQXhpcyhtX3BvcnQsIGF4aXMpOw0KK30NCisNCisvKioNCisgKiBGb3IgdGhlIGN1cnJlbnQgam95c3RpY2ssIHJldHVybiB0aGUgYXhpcyBkZXRlcm1pbmVkIGJ5IHRoZSBhcmd1bWVudC4NCisgKiANCisgKiBUaGlzIGlzIGZvciBjYXNlcyB3aGVyZSB0aGUgam95c3RpY2sgYXhpcyBpcyByZXR1cm5lZCBwcm9ncmFtYXRpY2FsbHksIG90aGVyd2lzZSBvbmUgb2YgdGhlDQorICogcHJldmlvdXMgZnVuY3Rpb25zIHdvdWxkIGJlIHByZWZlcmFibGUgKGZvciBleGFtcGxlIEdldFgoKSkuDQorICogDQorICogQHBhcmFtIGF4aXMgVGhlIGF4aXMgdG8gcmVhZC4NCisgKiBAcmV0dXJuIFRoZSB2YWx1ZSBvZiB0aGUgYXhpcy4NCisgKi8NCitmbG9hdCBKb3lzdGljazo6R2V0QXhpcyhBeGlzVHlwZSBheGlzKQ0KK3sNCisJc3dpdGNoKGF4aXMpDQorCXsNCisJCWNhc2Uga1hBeGlzOiByZXR1cm4gdGhpcy0+R2V0WCgpOw0KKwkJY2FzZSBrWUF4aXM6IHJldHVybiB0aGlzLT5HZXRZKCk7DQorCQljYXNlIGtaQXhpczogcmV0dXJuIHRoaXMtPkdldFooKTsNCisJCWNhc2Uga1R3aXN0QXhpczogcmV0dXJuIHRoaXMtPkdldFR3aXN0KCk7DQorCQljYXNlIGtUaHJvdHRsZUF4aXM6IHJldHVybiB0aGlzLT5HZXRUaHJvdHRsZSgpOw0KKwkJZGVmYXVsdDoNCisJCQl3cGlfc2V0V1BJRXJyb3IoQmFkSm95c3RpY2tBeGlzKTsNCisJCQlyZXR1cm4gMC4wOw0KKwl9DQorfQ0KKw0KKy8qKg0KKyAqIFJlYWQgdGhlIHN0YXRlIG9mIHRoZSB0cmlnZ2VyIG9uIHRoZSBqb3lzdGljay4NCisgKiANCisgKiBMb29rIHVwIHdoaWNoIGJ1dHRvbiBoYXMgYmVlbiBhc3NpZ25lZCB0byB0aGUgdHJpZ2dlciBhbmQgcmVhZCBpdHMgc3RhdGUuDQorICogDQorICogQHBhcmFtIGhhbmQgVGhpcyBwYXJhbWV0ZXIgaXMgaWdub3JlZCBmb3IgdGhlIEpveXN0aWNrIGNsYXNzIGFuZCBpcyBvbmx5IGhlcmUgdG8gY29tcGxldGUgdGhlIEdlbmVyaWNISUQgaW50ZXJmYWNlLg0KKyAqIEByZXR1cm4gVGhlIHN0YXRlIG9mIHRoZSB0cmlnZ2VyLg0KKyAqLw0KK2Jvb2wgSm95c3RpY2s6OkdldFRyaWdnZXIoSm95c3RpY2tIYW5kIGhhbmQpDQorew0KKwlyZXR1cm4gR2V0UmF3QnV0dG9uKG1fYnV0dG9uc1trVHJpZ2dlckJ1dHRvbl0pOw0KK30NCisNCisvKioNCisgKiBSZWFkIHRoZSBzdGF0ZSBvZiB0aGUgdG9wIGJ1dHRvbiBvbiB0aGUgam95c3RpY2suDQorICogDQorICogTG9vayB1cCB3aGljaCBidXR0b24gaGFzIGJlZW4gYXNzaWduZWQgdG8gdGhlIHRvcCBhbmQgcmVhZCBpdHMgc3RhdGUuDQorICogDQorICogQHBhcmFtIGhhbmQgVGhpcyBwYXJhbWV0ZXIgaXMgaWdub3JlZCBmb3IgdGhlIEpveXN0aWNrIGNsYXNzIGFuZCBpcyBvbmx5IGhlcmUgdG8gY29tcGxldGUgdGhlIEdlbmVyaWNISUQgaW50ZXJmYWNlLg0KKyAqIEByZXR1cm4gVGhlIHN0YXRlIG9mIHRoZSB0b3AgYnV0dG9uLg0KKyAqLw0KK2Jvb2wgSm95c3RpY2s6OkdldFRvcChKb3lzdGlja0hhbmQgaGFuZCkNCit7DQorCXJldHVybiBHZXRSYXdCdXR0b24obV9idXR0b25zW2tUb3BCdXR0b25dKTsNCit9DQorDQorLyoqDQorICogVGhpcyBpcyBub3Qgc3VwcG9ydGVkIGZvciB0aGUgSm95c3RpY2suDQorICogVGhpcyBtZXRob2QgaXMgb25seSBoZXJlIHRvIGNvbXBsZXRlIHRoZSBHZW5lcmljSElEIGludGVyZmFjZS4NCisgKi8NCitib29sIEpveXN0aWNrOjpHZXRCdW1wZXIoSm95c3RpY2tIYW5kIGhhbmQpDQorew0KKwkvLyBKb3lzdGlja3MgZG9uJ3QgaGF2ZSBidW1wZXJzLg0KKwlyZXR1cm4gZmFsc2U7DQorfQ0KKw0KKy8qKg0KKyAqIEdldCB0aGUgYnV0dG9uIHZhbHVlIGZvciBidXR0b25zIDEgdGhyb3VnaCAxMi4NCisgKiANCisgKiBUaGUgYnV0dG9ucyBhcmUgcmV0dXJuZWQgaW4gYSBzaW5nbGUgMTYgYml0IHZhbHVlIHdpdGggb25lIGJpdCByZXByZXNlbnRpbmcgdGhlIHN0YXRlDQorICogb2YgZWFjaCBidXR0b24uIFRoZSBhcHByb3ByaWF0ZSBidXR0b24gaXMgcmV0dXJuZWQgYXMgYSBib29sZWFuIHZhbHVlLiANCisgKiANCisgKiBAcGFyYW0gYnV0dG9uIFRoZSBidXR0b24gbnVtYmVyIHRvIGJlIHJlYWQuDQorICogQHJldHVybiBUaGUgc3RhdGUgb2YgdGhlIGJ1dHRvbi4NCisgKiovDQorYm9vbCBKb3lzdGljazo6R2V0UmF3QnV0dG9uKFVJTlQzMiBidXR0b24pDQorew0KKwlyZXR1cm4gKCgweDEgPDwgKGJ1dHRvbi0xKSkgJiBtX2RzLT5HZXRTdGlja0J1dHRvbnMobV9wb3J0KSkgIT0gMDsNCit9DQorDQorLyoqDQorICogR2V0IGJ1dHRvbnMgYmFzZWQgb24gYW4gZW51bWVyYXRlZCB0eXBlLg0KKyAqIA0KKyAqIFRoZSBidXR0b24gdHlwZSB3aWxsIGJlIGxvb2tlZCB1cCBpbiB0aGUgbGlzdCBvZiBidXR0b25zIGFuZCB0aGVuIHJlYWQuDQorICogDQorICogQHBhcmFtIGJ1dHRvbiBUaGUgdHlwZSBvZiBidXR0b24gdG8gcmVhZC4NCisgKiBAcmV0dXJuIFRoZSBzdGF0ZSBvZiB0aGUgYnV0dG9uLg0KKyAqLw0KK2Jvb2wgSm95c3RpY2s6OkdldEJ1dHRvbihCdXR0b25UeXBlIGJ1dHRvbikNCit7DQorCXN3aXRjaCAoYnV0dG9uKQ0KKwl7DQorCWNhc2Uga1RyaWdnZXJCdXR0b246IHJldHVybiBHZXRUcmlnZ2VyKCk7DQorCWNhc2Uga1RvcEJ1dHRvbjogcmV0dXJuIEdldFRvcCgpOw0KKwlkZWZhdWx0Og0KKwkJcmV0dXJuIGZhbHNlOw0KKwl9DQorfQ0KKw0KKy8qKg0KKyAqIEdldCB0aGUgY2hhbm5lbCBjdXJyZW50bHkgYXNzb2NpYXRlZCB3aXRoIHRoZSBzcGVjaWZpZWQgYXhpcy4NCisgKiANCisgKiBAcGFyYW0gYXhpcyBUaGUgYXhpcyB0byBsb29rIHVwIHRoZSBjaGFubmVsIGZvci4NCisgKiBAcmV0dXJuIFRoZSBjaGFubmVsIGZyIHRoZSBheGlzLg0KKyAqLw0KK1VJTlQzMiBKb3lzdGljazo6R2V0QXhpc0NoYW5uZWwoQXhpc1R5cGUgYXhpcykNCit7DQorCXJldHVybiBtX2F4ZXNbYXhpc107DQorfQ0KKw0KKy8qKg0KKyAqIFNldCB0aGUgY2hhbm5lbCBhc3NvY2lhdGVkIHdpdGggYSBzcGVjaWZpZWQgYXhpcy4NCisgKiANCisgKiBAcGFyYW0gYXhpcyBUaGUgYXhpcyB0byBzZXQgdGhlIGNoYW5uZWwgZm9yLg0KKyAqIEBwYXJhbSBjaGFubmVsIFRoZSBjaGFubmVsIHRvIHNldCB0aGUgYXhpcyB0by4NCisgKi8NCit2b2lkIEpveXN0aWNrOjpTZXRBeGlzQ2hhbm5lbChBeGlzVHlwZSBheGlzLCBVSU5UMzIgY2hhbm5lbCkNCit7DQorCW1fYXhlc1theGlzXSA9IGNoYW5uZWw7DQorfQ0KKw0KKy8qKg0KKyAqIEdldCB0aGUgbWFnbml0dWRlIG9mIHRoZSBkaXJlY3Rpb24gdmVjdG9yIGZvcm1lZCBieSB0aGUgam95c3RpY2sncw0KKyAqIGN1cnJlbnQgcG9zaXRpb24gcmVsYXRpdmUgdG8gaXRzIG9yaWdpbg0KKyAqIA0KKyAqIEByZXR1cm4gVGhlIG1hZ25pdHVkZSBvZiB0aGUgZGlyZWN0aW9uIHZlY3Rvcg0KKyAqLw0KK2Zsb2F0IEpveXN0aWNrOjpHZXRNYWduaXR1ZGUoKXsNCisJcmV0dXJuIHNxcnQocG93KEdldFgoKSwyKSArIHBvdyhHZXRZKCksMikgKTsNCit9DQorDQorLyoqDQorICogR2V0IHRoZSBkaXJlY3Rpb24gb2YgdGhlIHZlY3RvciBmb3JtZWQgYnkgdGhlIGpveXN0aWNrIGFuZCBpdHMgb3JpZ2luDQorICogaW4gcmFkaWFucw0KKyAqIA0KKyAqIEByZXR1cm4gVGhlIGRpcmVjdGlvbiBvZiB0aGUgdmVjdG9yIGluIHJhZGlhbnMNCisgKi8NCitmbG9hdCBKb3lzdGljazo6R2V0RGlyZWN0aW9uUmFkaWFucygpew0KKwlyZXR1cm4gYXRhbjIoR2V0WCgpLCAtR2V0WSgpKTsNCit9DQorDQorLyoqDQorICogR2V0IHRoZSBkaXJlY3Rpb24gb2YgdGhlIHZlY3RvciBmb3JtZWQgYnkgdGhlIGpveXN0aWNrIGFuZCBpdHMgb3JpZ2luDQorICogaW4gZGVncmVlcw0KKyAqIA0KKyAqIHVzZXMgYWNvcygtMSkgdG8gcmVwcmVzZW50IFBpIGR1ZSB0byBhYnNlbmNlIG9mIHJlYWRpbHkgYWNjZXNzYWJsZSBQaSANCisgKiBjb25zdGFudCBpbiBDKysNCisgKiANCisgKiBAcmV0dXJuIFRoZSBkaXJlY3Rpb24gb2YgdGhlIHZlY3RvciBpbiBkZWdyZWVzDQorICovDQorZmxvYXQgSm95c3RpY2s6OkdldERpcmVjdGlvbkRlZ3JlZXMoKXsNCisJcmV0dXJuICgxODAvYWNvcygtMSkpKkdldERpcmVjdGlvblJhZGlhbnMoKTsNCit9DQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvSm95c3RpY2suaCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0pveXN0aWNrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDRiOThlZgotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0pveXN0aWNrLmgKQEAgLTAsMCArMSw3NyBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBDb3B5cmlnaHQgKGMpIEZJUlNUIDIwMDguIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCQkJCQkJCSAgKi8NCisvKiBPcGVuIFNvdXJjZSBTb2Z0d2FyZSAtIG1heSBiZSBtb2RpZmllZCBhbmQgc2hhcmVkIGJ5IEZSQyB0ZWFtcy4gVGhlIGNvZGUgICAqLw0KKy8qIG11c3QgYmUgYWNjb21wYW5pZWQgYnkgdGhlIEZJUlNUIEJTRCBsaWNlbnNlIGZpbGUgaW4gJChXSU5EX0JBU0UpL1dQSUxpYi4gICovDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisjaWZuZGVmIEpPWVNUSUNLX0hfDQorI2RlZmluZSBKT1lTVElDS19IXw0KKw0KKyNpbmNsdWRlICJHZW5lcmljSElELmgiDQorI2luY2x1ZGUgIkVycm9yQmFzZS5oIg0KKw0KK2NsYXNzIERyaXZlclN0YXRpb247DQorDQorLyoqDQorICogSGFuZGxlIGlucHV0IGZyb20gc3RhbmRhcmQgSm95c3RpY2tzIGNvbm5lY3RlZCB0byB0aGUgRHJpdmVyIFN0YXRpb24uDQorICogVGhpcyBjbGFzcyBoYW5kbGVzIHN0YW5kYXJkIGlucHV0IHRoYXQgY29tZXMgZnJvbSB0aGUgRHJpdmVyIFN0YXRpb24uIEVhY2ggdGltZSBhIHZhbHVlIGlzIHJlcXVlc3RlZA0KKyAqIHRoZSBtb3N0IHJlY2VudCB2YWx1ZSBpcyByZXR1cm5lZC4gVGhlcmUgaXMgYSBzaW5nbGUgY2xhc3MgaW5zdGFuY2UgZm9yIGVhY2ggam95c3RpY2sgYW5kIHRoZSBtYXBwaW5nDQorICogb2YgcG9ydHMgdG8gaGFyZHdhcmUgYnV0dG9ucyBkZXBlbmRzIG9uIHRoZSBjb2RlIGluIHRoZSBkcml2ZXIgc3RhdGlvbi4NCisgKi8NCitjbGFzcyBKb3lzdGljayA6IHB1YmxpYyBHZW5lcmljSElELCBwdWJsaWMgRXJyb3JCYXNlDQorew0KK3B1YmxpYzoNCisJc3RhdGljIGNvbnN0IFVJTlQzMiBrRGVmYXVsdFhBeGlzID0gMTsNCisJc3RhdGljIGNvbnN0IFVJTlQzMiBrRGVmYXVsdFlBeGlzID0gMjsNCisJc3RhdGljIGNvbnN0IFVJTlQzMiBrRGVmYXVsdFpBeGlzID0gMzsNCisJc3RhdGljIGNvbnN0IFVJTlQzMiBrRGVmYXVsdFR3aXN0QXhpcyA9IDQ7DQorCXN0YXRpYyBjb25zdCBVSU5UMzIga0RlZmF1bHRUaHJvdHRsZUF4aXMgPSAzOw0KKwl0eXBlZGVmIGVudW0NCisJew0KKwkJa1hBeGlzLCBrWUF4aXMsIGtaQXhpcywga1R3aXN0QXhpcywga1Rocm90dGxlQXhpcywga051bUF4aXNUeXBlcw0KKwl9IEF4aXNUeXBlOw0KKwlzdGF0aWMgY29uc3QgVUlOVDMyIGtEZWZhdWx0VHJpZ2dlckJ1dHRvbiA9IDE7DQorCXN0YXRpYyBjb25zdCBVSU5UMzIga0RlZmF1bHRUb3BCdXR0b24gPSAyOw0KKwl0eXBlZGVmIGVudW0NCisJew0KKwkJa1RyaWdnZXJCdXR0b24sIGtUb3BCdXR0b24sIGtOdW1CdXR0b25UeXBlcw0KKwl9IEJ1dHRvblR5cGU7DQorDQorCWV4cGxpY2l0IEpveXN0aWNrKFVJTlQzMiBwb3J0KTsNCisJSm95c3RpY2soVUlOVDMyIHBvcnQsIFVJTlQzMiBudW1BeGlzVHlwZXMsIFVJTlQzMiBudW1CdXR0b25UeXBlcyk7DQorCXZpcnR1YWwgfkpveXN0aWNrKCk7DQorDQorCVVJTlQzMiBHZXRBeGlzQ2hhbm5lbChBeGlzVHlwZSBheGlzKTsNCisJdm9pZCBTZXRBeGlzQ2hhbm5lbChBeGlzVHlwZSBheGlzLCBVSU5UMzIgY2hhbm5lbCk7IA0KKw0KKwl2aXJ0dWFsIGZsb2F0IEdldFgoSm95c3RpY2tIYW5kIGhhbmQgPSBrUmlnaHRIYW5kKTsNCisJdmlydHVhbCBmbG9hdCBHZXRZKEpveXN0aWNrSGFuZCBoYW5kID0ga1JpZ2h0SGFuZCk7DQorCXZpcnR1YWwgZmxvYXQgR2V0WigpOw0KKwl2aXJ0dWFsIGZsb2F0IEdldFR3aXN0KCk7DQorCXZpcnR1YWwgZmxvYXQgR2V0VGhyb3R0bGUoKTsNCisJdmlydHVhbCBmbG9hdCBHZXRBeGlzKEF4aXNUeXBlIGF4aXMpOw0KKwlmbG9hdCBHZXRSYXdBeGlzKFVJTlQzMiBheGlzKTsNCisNCisJdmlydHVhbCBib29sIEdldFRyaWdnZXIoSm95c3RpY2tIYW5kIGhhbmQgPSBrUmlnaHRIYW5kKTsNCisJdmlydHVhbCBib29sIEdldFRvcChKb3lzdGlja0hhbmQgaGFuZCA9IGtSaWdodEhhbmQpOw0KKwl2aXJ0dWFsIGJvb2wgR2V0QnVtcGVyKEpveXN0aWNrSGFuZCBoYW5kID0ga1JpZ2h0SGFuZCk7DQorCXZpcnR1YWwgYm9vbCBHZXRCdXR0b24oQnV0dG9uVHlwZSBidXR0b24pOw0KKwlib29sIEdldFJhd0J1dHRvbihVSU5UMzIgYnV0dG9uKTsNCisJc3RhdGljIEpveXN0aWNrKiBHZXRTdGlja0ZvclBvcnQoVUlOVDMyIHBvcnQpOw0KKwkNCisJdmlydHVhbCBmbG9hdCBHZXRNYWduaXR1ZGUoKTsNCisJdmlydHVhbCBmbG9hdCBHZXREaXJlY3Rpb25SYWRpYW5zKCk7DQorCXZpcnR1YWwgZmxvYXQgR2V0RGlyZWN0aW9uRGVncmVlcygpOw0KKw0KK3ByaXZhdGU6DQorCURJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihKb3lzdGljayk7DQorCXZvaWQgSW5pdEpveXN0aWNrKFVJTlQzMiBudW1BeGlzVHlwZXMsIFVJTlQzMiBudW1CdXR0b25UeXBlcyk7DQorDQorCURyaXZlclN0YXRpb24gKm1fZHM7DQorCVVJTlQzMiBtX3BvcnQ7DQorCVVJTlQzMiAqbV9heGVzOw0KKwlVSU5UMzIgKm1fYnV0dG9uczsNCit9Ow0KKw0KKyNlbmRpZg0KKyANCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9LaW5lY3QuY3BwIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvS2luZWN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjFjOTMxCi0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvS2luZWN0LmNwcApAQCAtMCwwICsxLDE5NSBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBDb3B5cmlnaHQgKGMpIEZJUlNUIDIwMTEuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCQkJCQkJCSAgKi8NCisvKiBPcGVuIFNvdXJjZSBTb2Z0d2FyZSAtIG1heSBiZSBtb2RpZmllZCBhbmQgc2hhcmVkIGJ5IEZSQyB0ZWFtcy4gVGhlIGNvZGUgICAqLw0KKy8qIG11c3QgYmUgYWNjb21wYW5pZWQgYnkgdGhlIEZJUlNUIEJTRCBsaWNlbnNlIGZpbGUgaW4gJChXSU5EX0JBU0UpL1dQSUxpYi4gICovDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisjaW5jbHVkZSAiS2luZWN0LmgiDQorDQorI2luY2x1ZGUgIkRyaXZlclN0YXRpb24uaCINCisjaW5jbHVkZSAiTmV0d29ya0NvbW11bmljYXRpb24vRlJDQ29tbS5oIg0KKyNpbmNsdWRlICJOZXR3b3JrQ29tbXVuaWNhdGlvbi9Vc2FnZVJlcG9ydGluZy5oIg0KKyNpbmNsdWRlICJTa2VsZXRvbi5oIg0KKyNpbmNsdWRlICJTeW5jaHJvbml6ZWQuaCINCisjaW5jbHVkZSAiV1BJRXJyb3JzLmgiDQorDQorI2RlZmluZSBrSGVhZGVyQnVuZGxlSUQga0ZSQ19OZXR3b3JrQ29tbXVuaWNhdGlvbl9EeW5hbWljVHlwZV9LaW5lY3RfSGVhZGVyDQorI2RlZmluZSBrU2tlbGV0b25FeHRyYUJ1bmRsZUlEIGtGUkNfTmV0d29ya0NvbW11bmljYXRpb25fRHluYW1pY1R5cGVfS2luZWN0X0V4dHJhMQ0KKyNkZWZpbmUga1NrZWxldG9uQnVuZGxlSUQga0ZSQ19OZXR3b3JrQ29tbXVuaWNhdGlvbl9EeW5hbWljVHlwZV9LaW5lY3RfVmVydGljZXMxDQorDQorS2luZWN0ICpLaW5lY3Q6Ol9pbnN0YW5jZSA9IE5VTEw7DQorDQorS2luZWN0OjpLaW5lY3QoKSA6DQorCW1fcmVjZW50UGFja2V0TnVtYmVyKDApLA0KKwltX251bWJlck9mUGxheWVycygwKQ0KK3sNCisJQWRkVG9TaW5nbGV0b25MaXN0KCk7DQorCW1fZGF0YUxvY2sgPSBzZW1NQ3JlYXRlKFNFTV9RX1BSSU9SSVRZIHwgU0VNX0lOVkVSU0lPTl9TQUZFIHwgU0VNX0RFTEVURV9TQUZFKTsNCisNCisJblVzYWdlUmVwb3J0aW5nOjpyZXBvcnQoblVzYWdlUmVwb3J0aW5nOjprUmVzb3VyY2VUeXBlX0tpbmVjdCwgMCk7DQorfQ0KKw0KK0tpbmVjdDo6fktpbmVjdCgpDQorew0KKwlzZW1UYWtlKG1fZGF0YUxvY2ssIFdBSVRfRk9SRVZFUik7DQorCXNlbURlbGV0ZShtX2RhdGFMb2NrKTsNCit9DQorDQorLyoqDQorICogR2V0IHRoZSBvbmUgYW5kIG9ubHkgS2luZWN0IG9iamVjdA0KKyAqIEByZXR1cm5zIHBvaW50ZXIgdG8gYSBLaW5lY3QNCisgKi8NCitLaW5lY3QgKktpbmVjdDo6R2V0SW5zdGFuY2UoKQ0KK3sNCisJaWYgKF9pbnN0YW5jZSA9PSBOVUxMKQ0KKwkJX2luc3RhbmNlID0gbmV3IEtpbmVjdCgpOw0KKwlyZXR1cm4gX2luc3RhbmNlOw0KK30NCisNCisvKioNCisgKiBHZXQgdGhlIG51bWJlciBvZiB0cmFja2VkIHBsYXllcnMgb24gdGhlIEtpbmVjdA0KKyAqIEByZXR1cm4gdGhlIG51bWJlciBvZiBwbGF5ZXJzIGJlaW5nIGFjdGl2ZWx5IHRyYWNrZWQNCisgKi8NCitpbnQgS2luZWN0OjpHZXROdW1iZXJPZlBsYXllcnMoKQ0KK3sNCisJVXBkYXRlRGF0YSgpOw0KKwlyZXR1cm4gbV9udW1iZXJPZlBsYXllcnM7DQorfQ0KKw0KKy8qKg0KKyAqIEdldCB0aGUgZmxvb3IgY2xpcCBwbGFuZSBhcyBkZWZpbmVkIGluIHRoZSBLaW5lY3QgU0RLDQorICogQHJldHVybiBUaGUgZmxvb3IgY2xpcCBwbGFuZQ0KKyAqLw0KK0tpbmVjdDo6UG9pbnQ0IEtpbmVjdDo6R2V0Rmxvb3JDbGlwUGxhbmUoKQ0KK3sNCisJVXBkYXRlRGF0YSgpOw0KKwlyZXR1cm4gbV9mbG9vckNsaXBQbGFuZTsNCit9DQorDQorLyoqDQorICogR2V0IHRoZSBncmF2aXR5IG5vcm1hbCBmcm9tIHRoZSBraW5lY3QgYXMgZGVmaW5lZCBpbiB0aGUgS2luZWN0IFNESw0KKyAqIEByZXR1cm4gVGhlIGdyYXZpdHkgbm9ybWFsICh3IGlzIGlnbm9yZWQpDQorICovDQorS2luZWN0OjpQb2ludDQgS2luZWN0OjpHZXRHcmF2aXR5Tm9ybWFsKCkNCit7DQorCVVwZGF0ZURhdGEoKTsNCisJcmV0dXJuIG1fZ3Jhdml0eU5vcm1hbDsNCit9DQorDQorLyoqDQorICogR2V0IHRoZSBza2VsZXRvbiBkYXRhDQorICogUmV0dXJucyB0aGUgZGV0ZWN0ZWQgc2tlbGV0b24gZGF0YSBmcm9tIHRoZSBraW5lY3QgYXMgZGVmaW5lZCBpbiB0aGUgS2luZWN0IFNESw0KKyAqIEBwYXJhbSBza2VsZXRvbkluZGV4IFdoaWNoIG9mIChwb3RlbnRpYWxseSAyKSBza2VsZXRvbnMgdG8gcmV0dXJuLiBUaGlzIGlzIGlnbm9yZWQgaW4gdGhpcyBpbXBsZW1lbnRhdGlvbiBhbmQNCisgKiBvbmx5IGEgc2luZ2xlIHNrZWxldG9uIGlzIHN1cHBvcnRlZCBmb3IgdGhlIEZSQyByZWxlYXNlIGRlZmF1bHQgZ2VzdHVyZSBpbnRlcnByZXRhdGlvbi4NCisgKiBAcmV0dXJuIFRoZSBjdXJyZW50IHZlcnNpb24gb2YgdGhlIHNrZWxldG9uIG9iamVjdC4NCisgKi8NCitTa2VsZXRvbiBLaW5lY3Q6OkdldFNrZWxldG9uKGludCBza2VsZXRvbkluZGV4KQ0KK3sNCisJaWYgKHNrZWxldG9uSW5kZXggPD0gMCB8fCBza2VsZXRvbkluZGV4ID4ga051bVNrZWxldG9ucykNCisJew0KKwkJd3BpX3NldFdQSUVycm9yV2l0aENvbnRleHQoUGFyYW1ldGVyT3V0T2ZSYW5nZSwgIlNrZWxldG9uIGluZGV4IG11c3QgYmUgMSIpOw0KKwkJcmV0dXJuIFNrZWxldG9uKCk7DQorCX0NCisJVXBkYXRlRGF0YSgpOw0KKwlyZXR1cm4gbV9za2VsZXRvbnNbc2tlbGV0b25JbmRleC0xXTsNCit9DQorDQorLyoqDQorICogR2V0IHRoZSBjdXJyZW50IHBvc2l0aW9uIG9mIHRoZSBza2VsZXRvbg0KKyAqIEBwYXJhbSBza2VsZXRvbkluZGV4IHRoZSBza2VsZXRvbiB0byByZWFkIGZyb20NCisgKiBAcmV0dXJuIHRoZSBjdXJyZW50IHBvc2l0aW9uIGFzIGRlZmluZWQgaW4gdGhlIEtpbmVjdCBTREsgKHcgaXMgaWdub3JlZCkNCisgKi8NCitLaW5lY3Q6OlBvaW50NCBLaW5lY3Q6OkdldFBvc2l0aW9uKGludCBza2VsZXRvbkluZGV4KQ0KK3sNCisJaWYgKHNrZWxldG9uSW5kZXggPD0gMCB8fCBza2VsZXRvbkluZGV4ID4ga051bVNrZWxldG9ucykNCisJew0KKwkJd3BpX3NldFdQSUVycm9yV2l0aENvbnRleHQoUGFyYW1ldGVyT3V0T2ZSYW5nZSwgIlNrZWxldG9uIGluZGV4IG11c3QgYmUgMSIpOw0KKwkJcmV0dXJuIFBvaW50NCgpOw0KKwl9DQorCVVwZGF0ZURhdGEoKTsNCisJcmV0dXJuIG1fcG9zaXRpb25bc2tlbGV0b25JbmRleC0xXTsNCit9DQorDQorLyoqDQorICogR2V0IHRoZSBxdWFsaXR5IG9mIHRoZSBza2VsZXRvbi4NCisgKiBRdWFsaXR5IG1hc2tzIGFyZSBkZWZpbmVkIGluIHRoZSBTa2VsZXRvblF1YWxpdHkgZW51bQ0KKyAqIEBwYXJhbSBza2VsZXRvbkluZGV4IHRoZSBza2VsZXRvbiB0byByZWFkIGZyb20NCisgKiBAcmV0dXJuIHRoZSBxdWFsaXR5IHZhbHVlIGFzIGRlZmluZWQgaW4gdGhlIEtpbmVjdCBTREsNCisgKi8NCitVSU5UMzIgS2luZWN0OjpHZXRRdWFsaXR5KGludCBza2VsZXRvbkluZGV4KQ0KK3sNCisJaWYgKHNrZWxldG9uSW5kZXggPD0gMCB8fCBza2VsZXRvbkluZGV4ID4ga051bVNrZWxldG9ucykNCisJew0KKwkJd3BpX3NldFdQSUVycm9yV2l0aENvbnRleHQoUGFyYW1ldGVyT3V0T2ZSYW5nZSwgIlNrZWxldG9uIGluZGV4IG11c3QgYmUgMSIpOw0KKwkJcmV0dXJuIGtDbGlwcGVkUmlnaHQgfCBrQ2xpcHBlZExlZnQgfCBrQ2xpcHBlZFRvcCB8IGtDbGlwcGVkQm90dG9tOw0KKwl9DQorCVVwZGF0ZURhdGEoKTsNCisJcmV0dXJuIG1fcXVhbGl0eVtza2VsZXRvbkluZGV4LTFdOw0KK30NCisNCisvKioNCisgKiBHZXQgdGhlIFRyYWNraW5nU3RhdGUgb2YgdGhlIHNrZWxldG9uLg0KKyAqIFRyYWNraW5nIHN0YXRlcyBhcmUgZGVmaW5lZCBpbiB0aGUgU2tlbGV0b25UcmFja2luZ1N0YXRlIGVudW0NCisgKiBAcGFyYW0gc2tlbGV0b25JbmRleCB0aGUgc2tlbGV0b24gdG8gcmVhZCBmcm9tDQorICogQHJldHVybiB0aGUgdHJhY2tpbmcgc3RhdGUgdmFsdWUgYXMgZGVmaW5lZCBpbiB0aGUgS2luZWN0IFNESw0KKyAqLw0KK0tpbmVjdDo6U2tlbGV0b25UcmFja2luZ1N0YXRlIEtpbmVjdDo6R2V0VHJhY2tpbmdTdGF0ZShpbnQgc2tlbGV0b25JbmRleCkNCit7DQorCWlmIChza2VsZXRvbkluZGV4IDw9IDAgfHwgc2tlbGV0b25JbmRleCA+IGtOdW1Ta2VsZXRvbnMpDQorCXsNCisJCXdwaV9zZXRXUElFcnJvcldpdGhDb250ZXh0KFBhcmFtZXRlck91dE9mUmFuZ2UsICJTa2VsZXRvbiBpbmRleCBtdXN0IGJlIDEiKTsNCisJCXJldHVybiBrTm90VHJhY2tlZDsNCisJfQ0KKwlVcGRhdGVEYXRhKCk7DQorCXJldHVybiBtX3RyYWNraW5nU3RhdGVbc2tlbGV0b25JbmRleC0xXTsNCit9DQorDQorLyoqDQorICogQ2hlY2sgZm9yIGFuIHVwZGF0ZSBvZiBuZXcgZGF0YSBmcm9tIHRoZSBEcml2ZXIgU3RhdGlvbg0KKyAqIFRoaXMgd2lsbCByZWFkIHRoZSBuZXcgdmFsdWVzIGFuZCB1cGRhdGUgdGhlIGRhdGEgc3RydWN0dXJlcyBpbiB0aGlzIGNsYXNzLg0KKyAqLw0KK3ZvaWQgS2luZWN0OjpVcGRhdGVEYXRhKCkNCit7DQorCVN5bmNocm9uaXplZCBzeW5jKG1fZGF0YUxvY2spOw0KKwlVSU5UMzIgcGFja2V0TnVtYmVyID0gRHJpdmVyU3RhdGlvbjo6R2V0SW5zdGFuY2UoKS0+R2V0UGFja2V0TnVtYmVyKCk7DQorCWlmIChtX3JlY2VudFBhY2tldE51bWJlciAhPSBwYWNrZXROdW1iZXIpDQorCXsNCisJCW1fcmVjZW50UGFja2V0TnVtYmVyID0gcGFja2V0TnVtYmVyOw0KKwkJaW50IHJldFZhbCA9IGdldER5bmFtaWNDb250cm9sRGF0YShrSGVhZGVyQnVuZGxlSUQsIG1fcmF3SGVhZGVyLCBzaXplb2YobV9yYXdIZWFkZXIpLCA1KTsNCisJCWlmKHJldFZhbCA9PSAwKQ0KKwkJew0KKwkJCW1fbnVtYmVyT2ZQbGF5ZXJzID0gKGludCltX3Jhd0hlYWRlclsxM107DQorCQkJbWVtY3B5KCZtX2Zsb29yQ2xpcFBsYW5lLngsICZtX3Jhd0hlYWRlclsxOF0sIDQpOw0KKwkJCW1lbWNweSgmbV9mbG9vckNsaXBQbGFuZS55LCAmbV9yYXdIZWFkZXJbMjJdLCA0KTsNCisJCQltZW1jcHkoJm1fZmxvb3JDbGlwUGxhbmUueiwgJm1fcmF3SGVhZGVyWzI2XSwgNCk7DQorCQkJbWVtY3B5KCZtX2Zsb29yQ2xpcFBsYW5lLncsICZtX3Jhd0hlYWRlclszMF0sIDQpOw0KKwkJCW1lbWNweSgmbV9ncmF2aXR5Tm9ybWFsLngsICZtX3Jhd0hlYWRlclszNF0sIDQpOw0KKwkJCW1lbWNweSgmbV9ncmF2aXR5Tm9ybWFsLnksICZtX3Jhd0hlYWRlclszOF0sIDQpOw0KKwkJCW1lbWNweSgmbV9ncmF2aXR5Tm9ybWFsLnosICZtX3Jhd0hlYWRlcls0Ml0sIDQpOw0KKwkJfQ0KKw0KKwkJcmV0VmFsID0gZ2V0RHluYW1pY0NvbnRyb2xEYXRhKGtTa2VsZXRvbkV4dHJhQnVuZGxlSUQsIG1fcmF3U2tlbGV0b25FeHRyYSwgc2l6ZW9mKG1fcmF3U2tlbGV0b25FeHRyYSksIDUpOw0KKwkJaWYocmV0VmFsID09IDApDQorCQl7DQorCQkJbWVtY3B5KCZtX3Bvc2l0aW9uWzBdLngsICZtX3Jhd1NrZWxldG9uRXh0cmFbMjJdLCA0KTsNCisJCQltZW1jcHkoJm1fcG9zaXRpb25bMF0ueSwgJm1fcmF3U2tlbGV0b25FeHRyYVsyNl0sIDQpOw0KKwkJCW1lbWNweSgmbV9wb3NpdGlvblswXS56LCAmbV9yYXdTa2VsZXRvbkV4dHJhWzMwXSwgNCk7DQorCQkJbWVtY3B5KCZtX3F1YWxpdHlbMF0sICZtX3Jhd1NrZWxldG9uRXh0cmFbMzRdLCA0KTsNCisJCQltZW1jcHkoJm1fdHJhY2tpbmdTdGF0ZVswXSwgJm1fcmF3U2tlbGV0b25FeHRyYVszOF0sIDQpOw0KKwkJfQ0KKw0KKwkJcmV0VmFsID0gZ2V0RHluYW1pY0NvbnRyb2xEYXRhKGtTa2VsZXRvbkJ1bmRsZUlELCBtX3Jhd1NrZWxldG9uLCBzaXplb2YobV9yYXdTa2VsZXRvbiksIDUpOw0KKwkJaWYocmV0VmFsID09IDApDQorCQl7DQorCQkJZm9yKGludCBpPTA7IGkgPCBTa2VsZXRvbjo6Sm9pbnRDb3VudDsgaSsrKQ0KKwkJCXsNCisJCQkJbWVtY3B5KCZtX3NrZWxldG9uc1swXS5tX2pvaW50c1tpXS54LCAmbV9yYXdTa2VsZXRvbltpKjEyKzJdLCA0KTsNCisJCQkJbWVtY3B5KCZtX3NrZWxldG9uc1swXS5tX2pvaW50c1tpXS55LCAmbV9yYXdTa2VsZXRvbltpKjEyKzZdLCA0KTsNCisJCQkJbWVtY3B5KCZtX3NrZWxldG9uc1swXS5tX2pvaW50c1tpXS56LCAmbV9yYXdTa2VsZXRvbltpKjEyKzEwXSwgNCk7DQorCQkJCW1fc2tlbGV0b25zWzBdLm1fam9pbnRzW2ldLnRyYWNraW5nU3RhdGUgPSAoU2tlbGV0b246OkpvaW50VHJhY2tpbmdTdGF0ZSltX3Jhd1NrZWxldG9uRXh0cmFbaSsyXTsNCisJCQl9DQorCQl9DQorDQorCQkvLyBUT0RPOiBSZWFkIHNrZWxldG9uICMyDQorCX0NCit9DQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvS2luZWN0LmggYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9LaW5lY3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNTdiZTZiCi0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvS2luZWN0LmgKQEAgLTAsMCArMSw3MyBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBDb3B5cmlnaHQgKGMpIEZJUlNUIDIwMTEuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCQkJCQkJCSAgKi8NCisvKiBPcGVuIFNvdXJjZSBTb2Z0d2FyZSAtIG1heSBiZSBtb2RpZmllZCBhbmQgc2hhcmVkIGJ5IEZSQyB0ZWFtcy4gVGhlIGNvZGUgICAqLw0KKy8qIG11c3QgYmUgYWNjb21wYW5pZWQgYnkgdGhlIEZJUlNUIEJTRCBsaWNlbnNlIGZpbGUgaW4gJChXSU5EX0JBU0UpL1dQSUxpYi4gICovDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisjaWZuZGVmIF9fS0lORUNUX0hfXw0KKyNkZWZpbmUgX19LSU5FQ1RfSF9fDQorDQorI2luY2x1ZGUgIlNlbnNvckJhc2UuaCINCisjaW5jbHVkZSAiU2tlbGV0b24uaCINCisNCisjaW5jbHVkZSA8c2VtTGliLmg+DQorDQorI2RlZmluZSBrTnVtU2tlbGV0b25zIDENCisNCisvKioNCisgKiBIYW5kbGVzIHJhdyBkYXRhIGlucHV0IGZyb20gdGhlIEZSQyBLaW5lY3QgU2VydmVyDQorICogd2hlbiB1c2VkIHdpdGggYSBLaW5lY3QgZGV2aWNlIGNvbm5lY3RlZCB0byB0aGUgRHJpdmVyIFN0YXRpb24uDQorICogRWFjaCB0aW1lIGEgdmFsdWUgaXMgcmVxdWVzdGVkIHRoZSBtb3N0IHJlY2VudCB2YWx1ZSBpcyByZXR1cm5lZC4NCisgKiBTZWUgR2V0dGluZyBTdGFydGVkIHdpdGggTWljcm9zb2Z0IEtpbmVjdCBmb3IgRlJDIGFuZCB0aGUgS2luZWN0DQorICogZm9yIFdpbmRvd3MgU0RLIEFQSSByZWZlcmVuY2UgZm9yIG1vcmUgaW5mb3JtYXRpb24NCisgKi8NCitjbGFzcyBLaW5lY3QgOiBwdWJsaWMgU2Vuc29yQmFzZQ0KK3sNCitwdWJsaWM6DQorCXR5cGVkZWYgZW51bSB7a05vdFRyYWNrZWQsIGtQb3NpdGlvbk9ubHksIGtUcmFja2VkfSBTa2VsZXRvblRyYWNraW5nU3RhdGU7DQorCXR5cGVkZWYgZW51bSB7a0NsaXBwZWRSaWdodCA9IDEsIGtDbGlwcGVkTGVmdCA9IDIsIGtDbGlwcGVkVG9wID0gNCwga0NsaXBwZWRCb3R0b20gPSA4fSBTa2VsZXRvblF1YWxpdHk7DQorCXR5cGVkZWYgc3RydWN0DQorCXsNCisJCWZsb2F0IHg7DQorCQlmbG9hdCB5Ow0KKwkJZmxvYXQgejsNCisJCWZsb2F0IHc7DQorCX0gUG9pbnQ0Ow0KKw0KKwlpbnQgR2V0TnVtYmVyT2ZQbGF5ZXJzKCk7DQorCVBvaW50NCBHZXRGbG9vckNsaXBQbGFuZSgpOw0KKwlQb2ludDQgR2V0R3Jhdml0eU5vcm1hbCgpOw0KKwlTa2VsZXRvbiBHZXRTa2VsZXRvbihpbnQgc2tlbGV0b25JbmRleCA9IDEpOw0KKwlQb2ludDQgR2V0UG9zaXRpb24oaW50IHNrZWxldG9uSW5kZXggPSAxKTsNCisJVUlOVDMyIEdldFF1YWxpdHkoaW50IHNrZWxldG9uSW5kZXggPSAxKTsNCisJU2tlbGV0b25UcmFja2luZ1N0YXRlIEdldFRyYWNraW5nU3RhdGUoaW50IHNrZWxldG9uSW5kZXggPSAxKTsNCisNCisJc3RhdGljIEtpbmVjdCAqR2V0SW5zdGFuY2UoKTsNCisNCitwcml2YXRlOg0KKwlLaW5lY3QoKTsNCisJfktpbmVjdCgpOw0KKwl2b2lkIFVwZGF0ZURhdGEoKTsNCisNCisJRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKEtpbmVjdCk7DQorDQorCVVJTlQzMiBtX3JlY2VudFBhY2tldE51bWJlcjsNCisJU0VNX0lEIG1fZGF0YUxvY2s7DQorCWludCBtX251bWJlck9mUGxheWVyczsNCisJUG9pbnQ0IG1fZmxvb3JDbGlwUGxhbmU7DQorCVBvaW50NCBtX2dyYXZpdHlOb3JtYWw7DQorCVBvaW50NCBtX3Bvc2l0aW9uW2tOdW1Ta2VsZXRvbnNdOw0KKwlVSU5UMzIgbV9xdWFsaXR5W2tOdW1Ta2VsZXRvbnNdOw0KKwlTa2VsZXRvblRyYWNraW5nU3RhdGUgbV90cmFja2luZ1N0YXRlW2tOdW1Ta2VsZXRvbnNdOw0KKwlTa2VsZXRvbiBtX3NrZWxldG9uc1trTnVtU2tlbGV0b25zXTsNCisNCisJLy8gVE9ETzogSW5jbHVkZSBzdHJ1Y3RzIGZvciB0aGlzIGRhdGEgZm9ybWF0ICh3b3VsZCBiZSBjbGVhcmVyIHRoYW4gMTAwIG1hZ2ljIG51bWJlcnMpDQorCWNoYXIgbV9yYXdIZWFkZXJbNDZdOw0KKwljaGFyIG1fcmF3U2tlbGV0b25FeHRyYVs0Ml07DQorCWNoYXIgbV9yYXdTa2VsZXRvblsyNDJdOw0KKw0KKwlzdGF0aWMgS2luZWN0ICpfaW5zdGFuY2U7DQorfTsNCisNCisjZW5kaWYNCisNCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9LaW5lY3RTdGljay5jcHAgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9LaW5lY3RTdGljay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmJlYzJlZgotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0tpbmVjdFN0aWNrLmNwcApAQCAtMCwwICsxLDIwMSBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBDb3B5cmlnaHQgKGMpIEZJUlNUIDIwMTEuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCQkJCQkJCSAgKi8NCisvKiBPcGVuIFNvdXJjZSBTb2Z0d2FyZSAtIG1heSBiZSBtb2RpZmllZCBhbmQgc2hhcmVkIGJ5IEZSQyB0ZWFtcy4gVGhlIGNvZGUgICAqLw0KKy8qIG11c3QgYmUgYWNjb21wYW5pZWQgYnkgdGhlIEZJUlNUIEJTRCBsaWNlbnNlIGZpbGUgaW4gJChXSU5EX0JBU0UpL1dQSUxpYi4gICovDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisjaW5jbHVkZSAiS2luZWN0U3RpY2suaCINCisNCisjaW5jbHVkZSAiRHJpdmVyU3RhdGlvbi5oIg0KKyNpbmNsdWRlICJKb3lzdGljay5oIg0KKyNpbmNsdWRlICJOZXR3b3JrQ29tbXVuaWNhdGlvbi9GUkNDb21tLmgiDQorI2luY2x1ZGUgIk5ldHdvcmtDb21tdW5pY2F0aW9uL1VzYWdlUmVwb3J0aW5nLmgiDQorI2luY2x1ZGUgIlV0aWxpdHkuaCINCisjaW5jbHVkZSAiV1BJRXJyb3JzLmgiDQorDQorVUlOVDMyIEtpbmVjdFN0aWNrOjpfcmVjZW50UGFja2V0TnVtYmVyID0gMDsNCitLaW5lY3RTdGljazo6S2luZWN0U3RpY2tEYXRhIEtpbmVjdFN0aWNrOjpfc3RpY2tzOw0KKw0KKyNkZWZpbmUga0pveXN0aWNrQnVuZGxlSUQga0ZSQ19OZXR3b3JrQ29tbXVuaWNhdGlvbl9EeW5hbWljVHlwZV9LaW5lY3RfSm95c3RpY2sNCisjZGVmaW5lIGtUcmlnZ2VyTWFzayAxDQorI2RlZmluZSBrVG9wTWFzayAyDQorDQorLyoqDQorICogS2luZWN0IGpveXN0aWNrIGNvbnN0cnVjdG9yDQorICogQHBhcmFtIGlkIHZhbHVlIGlzIGVpdGhlciAxIG9yIDIgZm9yIHRoZSBsZWZ0IG9yIHJpZ2h0IGpveXN0aWNrIGRlY29kZWQgZnJvbQ0KKyAqIGdlc3R1cmVzIGludGVycHJldGVkIGJ5IHRoZSBLaW5lY3Qgc2VydmVyIG9uIHRoZSBEcml2ZXIgU3RhdGlvbiBjb21wdXRlci4NCisgKi8NCitLaW5lY3RTdGljazo6S2luZWN0U3RpY2soaW50IGlkKQ0KK3sNCisJaWYgKGlkICE9IDEgJiYgaWQgIT0gMikNCisJew0KKwkJd3BpX3NldFdQSUVycm9yV2l0aENvbnRleHQoUGFyYW1ldGVyT3V0T2ZSYW5nZSwgIktpbmVjdFN0aWNrIElEIG11c3QgYmUgMSBvciAyIik7DQorCQlyZXR1cm47DQorCX0NCisJbV9pZCA9IGlkOw0KKw0KKwluVXNhZ2VSZXBvcnRpbmc6OnJlcG9ydChuVXNhZ2VSZXBvcnRpbmc6OmtSZXNvdXJjZVR5cGVfS2luZWN0U3RpY2ssIGlkKTsNCit9DQorDQorLyoqDQorICogR2V0IHRoZSBYIHZhbHVlIG9mIHRoZSBLaW5lY3RTdGljay4gVGhpcyBheGlzDQorICogaXMgdW5pbXBsZW1lbnRlZCBpbiB0aGUgZGVmYXVsdCBnZXN0dXJlcyBidXQgY2FuDQorICogYmUgcG9wdWxhdGVkIGJ5IHRlYW1zIGVkaXRpbmcgdGhlIEtpbmVjdCBTZXJ2ZXIuDQorICogQHBhcmFtIGhhbmQgVW51c2VkDQorICogQHJldHVybiBUaGUgWCB2YWx1ZSBvZiB0aGUgS2luZWN0U3RpY2sNCisgKi8NCitmbG9hdCBLaW5lY3RTdGljazo6R2V0WChKb3lzdGlja0hhbmQgaGFuZCkNCit7DQorCXJldHVybiBHZXRSYXdBeGlzKEpveXN0aWNrOjprRGVmYXVsdFhBeGlzKTsNCit9DQorDQorLyoqDQorICogR2V0IHRoZSBZIHZhbHVlIG9mIHRoZSBLaW5lY3RTdGljay4gVGhpcyBheGlzDQorICogcmVwcmVzZW50cyBhcm0gYW5nbGUgaW4gdGhlIGRlZmF1bHQgZ2VzdHVyZXMNCisgKiBAcGFyYW0gaGFuZCBVbnVzZWQNCisgKiBAcmV0dXJuIFRoZSBZIHZhbHVlIG9mIHRoZSBLaW5lY3RTdGljaw0KKyAqLw0KK2Zsb2F0IEtpbmVjdFN0aWNrOjpHZXRZKEpveXN0aWNrSGFuZCBoYW5kKQ0KK3sNCisJcmV0dXJuIEdldFJhd0F4aXMoSm95c3RpY2s6OmtEZWZhdWx0WUF4aXMpOw0KK30NCisNCisvKioNCisgKiBHZXQgdGhlIFogdmFsdWUgb2YgdGhlIEtpbmVjdFN0aWNrLiBUaGlzIGF4aXMNCisgKiBpcyB1bmltcGxlbWVudGVkIGluIHRoZSBkZWZhdWx0IGdlc3R1cmVzIGJ1dCBjYW4NCisgKiBiZSBwb3B1bGF0ZWQgYnkgdGVhbXMgZWRpdGluZyB0aGUgS2luZWN0IFNlcnZlci4NCisgKiBAcGFyYW0gaGFuZCBVbnVzZWQNCisgKiBAcmV0dXJuIFRoZSBaIHZhbHVlIG9mIHRoZSBLaW5lY3RTdGljaw0KKyAqLw0KK2Zsb2F0IEtpbmVjdFN0aWNrOjpHZXRaKCkNCit7DQorCXJldHVybiBHZXRSYXdBeGlzKEpveXN0aWNrOjprRGVmYXVsdFpBeGlzKTsNCit9DQorDQorLyoqDQorICogR2V0IHRoZSBUd2lzdCB2YWx1ZSBvZiB0aGUgS2luZWN0U3RpY2suIFRoaXMgYXhpcw0KKyAqIGlzIHVuaW1wbGVtZW50ZWQgaW4gdGhlIGRlZmF1bHQgZ2VzdHVyZXMgYnV0IGNhbg0KKyAqIGJlIHBvcHVsYXRlZCBieSB0ZWFtcyBlZGl0aW5nIHRoZSBLaW5lY3QgU2VydmVyLg0KKyAqIEByZXR1cm4gVGhlIFR3aXN0IHZhbHVlIG9mIHRoZSBLaW5lY3RTdGljaw0KKyAqLw0KK2Zsb2F0IEtpbmVjdFN0aWNrOjpHZXRUd2lzdCgpDQorew0KKwlyZXR1cm4gR2V0UmF3QXhpcyhKb3lzdGljazo6a0RlZmF1bHRUd2lzdEF4aXMpOw0KK30NCisNCisvKioNCisgKiBHZXQgdGhlIFRocm90dGxlIHZhbHVlIG9mIHRoZSBLaW5lY3RTdGljay4gVGhpcyBheGlzDQorICogaXMgdW5pbXBsZW1lbnRlZCBpbiB0aGUgZGVmYXVsdCBnZXN0dXJlcyBidXQgY2FuDQorICogYmUgcG9wdWxhdGVkIGJ5IHRlYW1zIGVkaXRpbmcgdGhlIEtpbmVjdCBTZXJ2ZXIuDQorICogQHJldHVybiBUaGUgVGhyb3R0bGUgdmFsdWUgb2YgdGhlIEtpbmVjdFN0aWNrDQorICovDQorZmxvYXQgS2luZWN0U3RpY2s6OkdldFRocm90dGxlKCkNCit7DQorCXJldHVybiBHZXRSYXdBeGlzKEpveXN0aWNrOjprRGVmYXVsdFRocm90dGxlQXhpcyk7DQorfQ0KKw0KKy8qKg0KKyAqIEdldCB0aGUgdmFsdWUgb2YgdGhlIEtpbmVjdFN0aWNrIGF4aXMuDQorICoNCisgKiBAcGFyYW0gYXhpcyBUaGUgYXhpcyB0byByZWFkIFsxLTZdLg0KKyAqIEByZXR1cm4gVGhlIHZhbHVlIG9mIHRoZSBheGlzDQorICovDQorZmxvYXQgS2luZWN0U3RpY2s6OkdldFJhd0F4aXMoVUlOVDMyIGF4aXMpDQorew0KKwlpZiAoU3RhdHVzSXNGYXRhbCgpKSByZXR1cm4gMC4wOw0KKw0KKwlHZXREYXRhKCk7DQorCWZsb2F0IHZhbHVlID0gQ29udmVydFJhd1RvRmxvYXQoX3N0aWNrcy5mb3JtYXR0ZWQucmF3U3RpY2tzW21faWQgLSAxXS5heGlzW2F4aXMtMV0pOw0KKwlyZXR1cm4gdmFsdWU7DQorfQ0KKw0KKy8qKg0KKyAqIEdldCB0aGUgYnV0dG9uIHZhbHVlIGZvciB0aGUgYnV0dG9uIHNldCBhcyB0aGUgZGVmYXVsdCB0cmlnZ2VyDQorICoNCisgKiBAcGFyYW0gaGFuZCBVbnVzZWQNCisgKiBAcmV0dXJuIFRoZSBzdGF0ZSBvZiB0aGUgYnV0dG9uLg0KKyAqLw0KK2Jvb2wgS2luZWN0U3RpY2s6OkdldFRyaWdnZXIoSm95c3RpY2tIYW5kIGhhbmQpDQorew0KKwlyZXR1cm4gR2V0UmF3QnV0dG9uKGtUcmlnZ2VyTWFzayk7DQorfQ0KKw0KKy8qKg0KKyAqIEdldCB0aGUgYnV0dG9uIHZhbHVlIGZvciB0aGUgYnV0dG9uIHNldCBhcyB0aGUgZGVmYXVsdCB0b3ANCisgKg0KKyAqIEBwYXJhbSBoYW5kIFVudXNlZA0KKyAqIEByZXR1cm4gVGhlIHN0YXRlIG9mIHRoZSBidXR0b24uDQorICovDQorYm9vbCBLaW5lY3RTdGljazo6R2V0VG9wKEpveXN0aWNrSGFuZCBoYW5kKQ0KK3sNCisJcmV0dXJuIEdldFJhd0J1dHRvbihrVG9wTWFzayk7DQorfQ0KKw0KKy8qKg0KKyAqIEdldCB0aGUgYnV0dG9uIHZhbHVlIGZvciB0aGUgYnV0dG9uIHNldCBhcyB0aGUgZGVmYXVsdCBidW1wZXIgKGJ1dHRvbiA0KQ0KKyAqDQorICogQHBhcmFtIGhhbmQgVW51c2VkDQorICogQHJldHVybiBUaGUgc3RhdGUgb2YgdGhlIGJ1dHRvbi4NCisgKi8NCitib29sIEtpbmVjdFN0aWNrOjpHZXRCdW1wZXIoSm95c3RpY2tIYW5kIGhhbmQpDQorew0KKwkvLyBUT0RPOiBTaG91bGQgdGhpcyBldmVuIGJlIGluIEdlbmVyaWNISUQ/ICBJcyA0IGFuIGFwcHJvcHJpYXRlIG1hc2sgdmFsdWUgKGJ1dHRvbiAzKT8NCisJcmV0dXJuIEdldFJhd0J1dHRvbig0KTsNCit9DQorDQorLyoqDQorICogR2V0IHRoZSBidXR0b24gdmFsdWUgZm9yIGJ1dHRvbnMgMSB0aHJvdWdoIDEyLiBUaGUgZGVmYXVsdCBnZXN0dXJlcw0KKyAqIGltcGxlbWVudCBvbmx5IDkgYnV0dG9ucy4NCisgKg0KKyAqIFRoZSBhcHByb3ByaWF0ZSBidXR0b24gaXMgcmV0dXJuZWQgYXMgYSBib29sZWFuIHZhbHVlLg0KKyAqDQorICogQHBhcmFtIGJ1dHRvbiBUaGUgYnV0dG9uIG51bWJlciB0byBiZSByZWFkLg0KKyAqIEByZXR1cm4gVGhlIHN0YXRlIG9mIHRoZSBidXR0b24uDQorICovDQorYm9vbCBLaW5lY3RTdGljazo6R2V0UmF3QnV0dG9uKFVJTlQzMiBidXR0b24pDQorew0KKwlpZiAoU3RhdHVzSXNGYXRhbCgpKSByZXR1cm4gZmFsc2U7DQorDQorCUdldERhdGEoKTsNCisJcmV0dXJuIChfc3RpY2tzLmZvcm1hdHRlZC5yYXdTdGlja3NbbV9pZCAtIDFdLmJ1dHRvbnMgJiAoMSA8PCBidXR0b24pKSAhPSAwOw0KK30NCisNCisvKioNCisgKiBHZXQgZHluYW1pYyBkYXRhIGZyb20gdGhlIGRyaXZlciBzdGF0aW9uIGJ1ZmZlcg0KKyAqLw0KK3ZvaWQgS2luZWN0U3RpY2s6OkdldERhdGEoKQ0KK3sNCisJVUlOVDMyIHBhY2tldE51bWJlciA9IERyaXZlclN0YXRpb246OkdldEluc3RhbmNlKCktPkdldFBhY2tldE51bWJlcigpOw0KKwlpZiAoX3JlY2VudFBhY2tldE51bWJlciAhPSBwYWNrZXROdW1iZXIpDQorCXsNCisJCV9yZWNlbnRQYWNrZXROdW1iZXIgPSBwYWNrZXROdW1iZXI7DQorCQlpbnQgcmV0VmFsID0gZ2V0RHluYW1pY0NvbnRyb2xEYXRhKGtKb3lzdGlja0J1bmRsZUlELCBfc3RpY2tzLmRhdGEsIHNpemVvZihfc3RpY2tzLmRhdGEpLCA1KTsNCisJCWlmIChyZXRWYWwgPT0gMCkNCisJCXsNCisJCQl3cGlfYXNzZXJ0KF9zdGlja3MuZm9ybWF0dGVkLnNpemUgPT0gc2l6ZW9mKF9zdGlja3MuZGF0YSkgLSAxKTsNCisJCX0NCisJfQ0KK30NCisNCisvKioNCisgKiBDb252ZXJ0IGFuIDggYml0IGpveXN0aWNrIHZhbHVlIHRvIGEgZmxvYXRpbmcgcG9pbnQgKC0xLDEpIHZhbHVlDQorICogQHBhcmFtIHZhbHVlIFRoZSA4IGJpdCByYXcgam95c3RpY2sgdmFsdWUgcmV0dXJuZWQgZnJvbSB0aGUgZHJpdmVyIHN0YXRpb24NCisgKi8NCitmbG9hdCBLaW5lY3RTdGljazo6Q29udmVydFJhd1RvRmxvYXQoSU5UOCB2YWx1ZSkNCit7DQorCWZsb2F0IHJlc3VsdDsNCisNCisJaWYgKHZhbHVlIDwgMCkNCisJCXJlc3VsdCA9ICgoZmxvYXQpIHZhbHVlKSAvIDEyOC4wOw0KKwllbHNlDQorCQlyZXN1bHQgPSAoKGZsb2F0KSB2YWx1ZSkgLyAxMjcuMDsNCisNCisJd3BpX2Fzc2VydChyZXN1bHQgPD0gMS4wICYmIHJlc3VsdCA+PSAtMS4wKTsNCisNCisJaWYgKHJlc3VsdCA+IDEuMCkNCisJCXJlc3VsdCA9IDEuMDsNCisJZWxzZSBpZiAocmVzdWx0IDwgLTEuMCkNCisJCXJlc3VsdCA9IC0xLjA7DQorDQorCXJldHVybiByZXN1bHQ7DQorfQ0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0tpbmVjdFN0aWNrLmggYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9LaW5lY3RTdGljay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhOGRhNjUKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9LaW5lY3RTdGljay5oCkBAIC0wLDAgKzEsNjEgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorLyogQ29weXJpZ2h0IChjKSBGSVJTVCAyMDExLiBBbGwgUmlnaHRzIFJlc2VydmVkLgkJCQkJCQkgICovDQorLyogT3BlbiBTb3VyY2UgU29mdHdhcmUgLSBtYXkgYmUgbW9kaWZpZWQgYW5kIHNoYXJlZCBieSBGUkMgdGVhbXMuIFRoZSBjb2RlICAgKi8NCisvKiBtdXN0IGJlIGFjY29tcGFuaWVkIGJ5IHRoZSBGSVJTVCBCU0QgbGljZW5zZSBmaWxlIGluICQoV0lORF9CQVNFKS9XUElMaWIuICAqLw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorI2lmbmRlZiBfX0tJTkVDVF9TVElDS19IX18NCisjZGVmaW5lIF9fS0lORUNUX1NUSUNLX0hfXw0KKw0KKyNpbmNsdWRlICJFcnJvckJhc2UuaCINCisjaW5jbHVkZSAiR2VuZXJpY0hJRC5oIg0KKw0KKy8qKg0KKyAqIEhhbmRsZXMgaW5wdXQgZnJvbSB0aGUgSm95c3RpY2sgZGF0YSBzZW50IGJ5IHRoZSBGUkMgS2luZWN0IFNlcnZlcg0KKyAqIHdoZW4gdXNlZCB3aXRoIGEgS2luZWN0IGRldmljZSBjb25uZWN0ZWQgdG8gdGhlIERyaXZlciBTdGF0aW9uLg0KKyAqIEVhY2ggdGltZSBhIHZhbHVlIGlzIHJlcXVlc3RlZCB0aGUgbW9zdCByZWNlbnQgdmFsdWUgaXMgcmV0dXJuZWQuDQorICogRGVmYXVsdCBnZXN0dXJlcyBlbWJlZGRlZCBpbiB0aGUgRlJDIEtpbmVjdCBTZXJ2ZXIgYXJlIGRlc2NyaWJlZA0KKyAqIGluIHRoZSBkb2N1bWVudCBHZXR0aW5nIFN0YXJ0ZWQgd2l0aCBNaWNyb3NvZnQgS2luZWN0IGZvciBGUkMuDQorICovDQorY2xhc3MgS2luZWN0U3RpY2sgOiBwdWJsaWMgR2VuZXJpY0hJRCwgcHVibGljIEVycm9yQmFzZQ0KK3sNCitwdWJsaWM6DQorCWV4cGxpY2l0IEtpbmVjdFN0aWNrKGludCBpZCk7DQorCXZpcnR1YWwgZmxvYXQgR2V0WChKb3lzdGlja0hhbmQgaGFuZCA9IGtSaWdodEhhbmQpOw0KKwl2aXJ0dWFsIGZsb2F0IEdldFkoSm95c3RpY2tIYW5kIGhhbmQgPSBrUmlnaHRIYW5kKTsNCisJdmlydHVhbCBmbG9hdCBHZXRaKCk7DQorCXZpcnR1YWwgZmxvYXQgR2V0VHdpc3QoKTsNCisJdmlydHVhbCBmbG9hdCBHZXRUaHJvdHRsZSgpOw0KKwl2aXJ0dWFsIGZsb2F0IEdldFJhd0F4aXMoVUlOVDMyIGF4aXMpOw0KKw0KKwl2aXJ0dWFsIGJvb2wgR2V0VHJpZ2dlcihKb3lzdGlja0hhbmQgaGFuZCA9IGtSaWdodEhhbmQpOw0KKwl2aXJ0dWFsIGJvb2wgR2V0VG9wKEpveXN0aWNrSGFuZCBoYW5kID0ga1JpZ2h0SGFuZCk7DQorCXZpcnR1YWwgYm9vbCBHZXRCdW1wZXIoSm95c3RpY2tIYW5kIGhhbmQgPSBrUmlnaHRIYW5kKTsNCisJdmlydHVhbCBib29sIEdldFJhd0J1dHRvbihVSU5UMzIgYnV0dG9uKTsNCisNCitwcml2YXRlOg0KKwl2b2lkIEdldERhdGEoKTsNCisJZmxvYXQgQ29udmVydFJhd1RvRmxvYXQoSU5UOCBjaGFyVmFsdWUpOw0KKw0KKwl0eXBlZGVmIHVuaW9uDQorCXsNCisJCXN0cnVjdA0KKwkJew0KKwkJCVVJTlQ4IHNpemU7DQorCQkJVUlOVDggaWQ7DQorCQkJc3RydWN0DQorCQkJew0KKwkJCQl1bnNpZ25lZCBjaGFyIGF4aXNbNl07DQorCQkJCXVuc2lnbmVkIHNob3J0IGJ1dHRvbnM7DQorCQkJfSByYXdTdGlja3NbMl07DQorCQl9IGZvcm1hdHRlZDsNCisJCWNoYXIgZGF0YVsxOF07DQorCX0gS2luZWN0U3RpY2tEYXRhOw0KKw0KKwlpbnQgbV9pZDsNCisJc3RhdGljIFVJTlQzMiBfcmVjZW50UGFja2V0TnVtYmVyOw0KKwlzdGF0aWMgS2luZWN0U3RpY2tEYXRhIF9zdGlja3M7DQorfTsNCisNCisjZW5kaWYNCisNCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9MaXZlV2luZG93L0xpdmVXaW5kb3cuY3BwIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvTGl2ZVdpbmRvdy9MaXZlV2luZG93LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMjAyYTEwCi0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvTGl2ZVdpbmRvdy9MaXZlV2luZG93LmNwcApAQCAtMCwwICsxLDE4OSBAQAorI2luY2x1ZGUgIkxpdmVXaW5kb3cvTGl2ZVdpbmRvdy5oIg0KKyNpbmNsdWRlICJuZXR3b3JrdGFibGVzL05ldHdvcmtUYWJsZS5oIg0KKyNpbmNsdWRlIDxhbGdvcml0aG0+DQorI2luY2x1ZGUgPHNzdHJlYW0+DQorDQorTGl2ZVdpbmRvdyogTGl2ZVdpbmRvdzo6bV9pbnN0YW5jZSA9IE5VTEw7DQorDQorLyoqDQorICogR2V0IGFuIGluc3RhbmNlIG9mIHRoZSBMaXZlV2luZG93IG1haW4gY2xhc3MNCisgKiBUaGlzIGlzIGEgc2luZ2xldG9uIHRvIGd1YXJhbnRlZSB0aGF0IHRoZXJlIGlzIG9ubHkgYSBzaW5nbGUgaW5zdGFuY2UgcmVnYXJkbGVzcyBvZg0KKyAqIGhvdyBtYW55IHRpbWVzIEdldEluc3RhbmNlIGlzIGNhbGxlZC4NCisgKi8NCitMaXZlV2luZG93ICogTGl2ZVdpbmRvdzo6R2V0SW5zdGFuY2UoKQ0KK3sNCisJaWYgKG1faW5zdGFuY2UgPT0gTlVMTCkNCisJew0KKwkJbV9pbnN0YW5jZSA9IG5ldyBMaXZlV2luZG93KCk7DQorCX0NCisJcmV0dXJuIG1faW5zdGFuY2U7DQorfQ0KKw0KKy8qKg0KKyAqIExpdmVXaW5kb3cgY29uc3RydWN0b3IuDQorICogQWxsb2NhdGUgdGhlIG5lY2Vzc2FyeSB0YWJsZXMuDQorICovDQorTGl2ZVdpbmRvdzo6TGl2ZVdpbmRvdygpDQorew0KKwltX2VuYWJsZWQgPSBmYWxzZTsNCisJbV9saXZlV2luZG93VGFibGUgPSBOZXR3b3JrVGFibGU6OkdldFRhYmxlKCJMaXZlV2luZG93Iik7DQorCW1fc3RhdHVzVGFibGUgPSBtX2xpdmVXaW5kb3dUYWJsZS0+R2V0U3ViVGFibGUoIn5TVEFUVVN+Iik7DQorCW1fc2NoZWR1bGVyID0gU2NoZWR1bGVyOjpHZXRJbnN0YW5jZSgpOw0KK30NCisNCisvKioNCisgKiBDaGFuZ2UgdGhlIGVuYWJsZWQgc3RhdHVzIG9mIExpdmVXaW5kb3cNCisgKiBJZiBpdCBjaGFuZ2VzIHRvIGVuYWJsZWQsIHN0YXJ0IGxpdmV3aW5kb3cgcnVubmluZyBvdGhlcndpc2Ugc3RvcCBpdA0KKyAqLw0KK3ZvaWQgTGl2ZVdpbmRvdzo6U2V0RW5hYmxlZChib29sIGVuYWJsZWQpDQorew0KKwlpZiAobV9lbmFibGVkID09IGVuYWJsZWQpDQorCQlyZXR1cm47DQorCWlmIChlbmFibGVkKQ0KKwl7DQorCQlwcmludGYoIlN0YXJ0aW5nIGxpdmUgd2luZG93IG1vZGVcbiIpOw0KKwkJaWYgKG1fZmlyc3RUaW1lKQ0KKwkJew0KKwkJCUluaXRpYWxpemVMaXZlV2luZG93Q29tcG9uZW50cygpOw0KKwkJCW1fZmlyc3RUaW1lID0gZmFsc2U7DQorCQl9DQorCQltX3NjaGVkdWxlci0+U2V0RW5hYmxlZChmYWxzZSk7DQorCQltX3NjaGVkdWxlci0+UmVtb3ZlQWxsKCk7DQorCQlmb3IgKHN0ZDo6bWFwPExpdmVXaW5kb3dTZW5kYWJsZSAqLCBMaXZlV2luZG93Q29tcG9uZW50Pjo6aXRlcmF0b3IgaXQgPQ0KKwkJCQltX2NvbXBvbmVudHMuYmVnaW4oKTsgaXQgIT0gbV9jb21wb25lbnRzLmVuZCgpOyArK2l0KQ0KKwkJew0KKwkJCWl0LT5maXJzdC0+U3RhcnRMaXZlV2luZG93TW9kZSgpOw0KKwkJfQ0KKwl9DQorCWVsc2UNCisJew0KKwkJcHJpbnRmKCJFbmRpbmcgTGl2ZVdpbmRvdyBtb2RlXG4iKTsNCisJCWZvciAoc3RkOjptYXA8TGl2ZVdpbmRvd1NlbmRhYmxlICosIExpdmVXaW5kb3dDb21wb25lbnQ+OjppdGVyYXRvciBpdCA9DQorCQkJCW1fY29tcG9uZW50cy5iZWdpbigpOyBpdCAhPSBtX2NvbXBvbmVudHMuZW5kKCk7ICsraXQpDQorCQl7DQorCQkJaXQtPmZpcnN0LT5TdG9wTGl2ZVdpbmRvd01vZGUoKTsNCisJCX0NCisJCW1fc2NoZWR1bGVyLT5TZXRFbmFibGVkKHRydWUpOw0KKwl9DQorCW1fZW5hYmxlZCA9IGVuYWJsZWQ7DQorCW1fc3RhdHVzVGFibGUtPlB1dEJvb2xlYW4oIkxXIEVuYWJsZWQiLCBtX2VuYWJsZWQpOw0KK30NCisNCitMaXZlV2luZG93Ojp+TGl2ZVdpbmRvdygpDQorew0KK30NCisNCisvKioNCisgKiBBZGQgYSBTZW5zb3IgYXNzb2NpYXRlZCB3aXRoIHRoZSBzdWJzeXN0ZW0gYW5kIHdpdGggY2FsbCBpdCBieSB0aGUgZ2l2ZW4gbmFtZS4NCisgKiBAcGFyYW0gc3Vic3lzdGVtIFRoZSBzdWJzeXN0ZW0gdGhpcyBjb21wb25lbnQgaXMgcGFydCBvZi4NCisgKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGlzIGNvbXBvbmVudC4NCisgKiBAcGFyYW0gY29tcG9uZW50IEEgTGl2ZVdpbmRvd1NlbmRhYmxlIGNvbXBvbmVudCB0aGF0IHJlcHJlc2VudHMgYSBzZW5zb3IuDQorICovDQordm9pZCBMaXZlV2luZG93OjpBZGRTZW5zb3IoY2hhciAqc3Vic3lzdGVtLCBjaGFyICpuYW1lLA0KKwkJTGl2ZVdpbmRvd1NlbmRhYmxlICpjb21wb25lbnQpDQorew0KKwltX2NvbXBvbmVudHNbY29tcG9uZW50XS5zdWJzeXN0ZW0gPSBzdWJzeXN0ZW07DQorCW1fY29tcG9uZW50c1tjb21wb25lbnRdLm5hbWUgPSBuYW1lOw0KKwltX2NvbXBvbmVudHNbY29tcG9uZW50XS5pc1NlbnNvciA9IHRydWU7DQorfQ0KKw0KKy8qKg0KKyAqIEFkZCBhbiBBY3R1YXRvciBhc3NvY2lhdGVkIHdpdGggdGhlIHN1YnN5c3RlbSBhbmQgd2l0aCBjYWxsIGl0IGJ5IHRoZSBnaXZlbiBuYW1lLg0KKyAqIEBwYXJhbSBzdWJzeXN0ZW0gVGhlIHN1YnN5c3RlbSB0aGlzIGNvbXBvbmVudCBpcyBwYXJ0IG9mLg0KKyAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoaXMgY29tcG9uZW50Lg0KKyAqIEBwYXJhbSBjb21wb25lbnQgQSBMaXZlV2luZG93U2VuZGFibGUgY29tcG9uZW50IHRoYXQgcmVwcmVzZW50cyBhIGFjdHVhdG9yLg0KKyAqLw0KK3ZvaWQgTGl2ZVdpbmRvdzo6QWRkQWN0dWF0b3IoY2hhciAqc3Vic3lzdGVtLCBjaGFyICpuYW1lLA0KKwkJTGl2ZVdpbmRvd1NlbmRhYmxlICpjb21wb25lbnQpDQorew0KKwltX2NvbXBvbmVudHNbY29tcG9uZW50XS5zdWJzeXN0ZW0gPSBzdWJzeXN0ZW07DQorCW1fY29tcG9uZW50c1tjb21wb25lbnRdLm5hbWUgPSBuYW1lOw0KKwltX2NvbXBvbmVudHNbY29tcG9uZW50XS5pc1NlbnNvciA9IGZhbHNlOw0KK30NCisNCisvKioNCisgKiBJTlRFUk5BTA0KKyAqLw0KK3ZvaWQgTGl2ZVdpbmRvdzo6QWRkU2Vuc29yKHN0ZDo6c3RyaW5nIHR5cGUsIGludCBtb2R1bGUsIGludCBjaGFubmVsLCBMaXZlV2luZG93U2VuZGFibGUgKmNvbXBvbmVudCkNCit7DQorCXN0ZDo6b3N0cmluZ3N0cmVhbSBvc3M7DQorCW9zcyA8PCB0eXBlIDw8ICJbIiA8PCBtb2R1bGUgPDwgIiwiIDw8IGNoYW5uZWwgPDwgIl0iOw0KKwlzdGQ6OnN0cmluZyB0eXBlcyhvc3Muc3RyKCkpOw0KKwljaGFyKiBjYyA9IG5ldyBjaGFyW3R5cGVzLnNpemUoKSArIDFdOw0KKwl0eXBlcy5jb3B5KGNjLCB0eXBlcy5zaXplKCkpOw0KKwljY1t0eXBlcy5zaXplKCldPSdcMCc7DQorCUFkZFNlbnNvcigiVW5ncm91cGVkIiwgY2MsIGNvbXBvbmVudCk7DQorCWlmIChzdGQ6OmZpbmQobV9zZW5zb3JzLmJlZ2luKCksIG1fc2Vuc29ycy5lbmQoKSwgY29tcG9uZW50KSA9PSBtX3NlbnNvcnMuZW5kKCkpDQorCQltX3NlbnNvcnMucHVzaF9iYWNrKGNvbXBvbmVudCk7DQorfQ0KKw0KKy8qKg0KKyAqIElOVEVSTkFMDQorICovDQordm9pZCBMaXZlV2luZG93OjpBZGRBY3R1YXRvcihzdGQ6OnN0cmluZyB0eXBlLCBpbnQgbW9kdWxlLCBpbnQgY2hhbm5lbCwgTGl2ZVdpbmRvd1NlbmRhYmxlICpjb21wb25lbnQpDQorew0KKwlzdGQ6Om9zdHJpbmdzdHJlYW0gb3NzOw0KKwlvc3MgPDwgdHlwZSA8PCAiWyIgPDwgbW9kdWxlIDw8ICIsIiA8PCBjaGFubmVsIDw8ICJdIjsNCisJc3RkOjpzdHJpbmcgdHlwZXMob3NzLnN0cigpKTsNCisJY2hhciogY2MgPSBuZXcgY2hhclt0eXBlcy5zaXplKCkgKyAxXTsNCisJdHlwZXMuY29weShjYywgdHlwZXMuc2l6ZSgpKTsNCisJY2NbdHlwZXMuc2l6ZSgpXT0nXDAnOw0KKwlBZGRBY3R1YXRvcigiVW5ncm91cGVkIiwgY2MsIGNvbXBvbmVudCk7DQorfQ0KKw0KKy8qKg0KKyAqIFRlbGwgYWxsIHRoZSBzZW5zb3JzIHRvIHVwZGF0ZSAoc2VuZCkgdGhlaXIgdmFsdWVzDQorICogQWN0dWF0b3JzIGFyZSBoYW5kbGVkIHRocm91Z2ggY2FsbGJhY2tzIG9uIHRoZWlyIHZhbHVlIGNoYW5naW5nIGZyb20gdGhlDQorICogU21hcnREYXNoYm9hcmQgd2lkZ2V0cy4NCisgKi8NCit2b2lkIExpdmVXaW5kb3c6OlVwZGF0ZVZhbHVlcygpDQorew0KKwlmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG1fc2Vuc29ycy5zaXplKCk7IGkrKykNCisJew0KKwkJbV9zZW5zb3JzW2ldLT5VcGRhdGVUYWJsZSgpOw0KKwl9DQorfQ0KKw0KKy8qKg0KKyAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBwZXJpb2RpY2FsbHkgdG8gY2F1c2UgdGhlIHNlbnNvcnMgdG8gc2VuZCBuZXcgdmFsdWVzDQorICogdG8gdGhlIFNtYXJ0RGFzaGJvYXJkLg0KKyAqLw0KK3ZvaWQgTGl2ZVdpbmRvdzo6UnVuKCkNCit7DQorCWlmIChtX2VuYWJsZWQpDQorCXsNCisJCVVwZGF0ZVZhbHVlcygpOw0KKwl9DQorfQ0KKw0KKy8qKg0KKyAqIEluaXRpYWxpemUgYWxsIHRoZSBMaXZlV2luZG93IGVsZW1lbnRzIHRoZSBmaXJzdCB0aW1lIHdlIGVudGVyIExpdmVXaW5kb3cgbW9kZS4NCisgKiBCeSBob2xkaW5nIG9mZiBjcmVhdGluZyB0aGUgTmV0d29ya1RhYmxlIGVudHJpZXMsIGl0IGFsbG93cyB0aGVtIHRvIGJlIHJlZGVmaW5lZA0KKyAqIGJlZm9yZSB0aGUgZmlyc3QgdGltZSBpbiBMaXZlV2luZG93IG1vZGUuIFRoaXMgYWxsb3dzIGRlZmF1bHQgc2Vuc29yIGFuZCBhY3R1YXRvcg0KKyAqIHZhbHVlcyB0byBiZSBjcmVhdGVkIHRoYXQgYXJlIHJlcGxhY2VkIHdpdGggdGhlIGN1c3RvbSBuYW1lcyBmcm9tIHVzZXJzIGNhbGxpbmcNCisgKiBhZGRBY3R1YXRvciBhbmQgYWRkU2Vuc29yLg0KKyAqLw0KK3ZvaWQgTGl2ZVdpbmRvdzo6SW5pdGlhbGl6ZUxpdmVXaW5kb3dDb21wb25lbnRzKCkNCit7DQorCWZvciAoc3RkOjptYXA8TGl2ZVdpbmRvd1NlbmRhYmxlICosIExpdmVXaW5kb3dDb21wb25lbnQ+OjppdGVyYXRvciBpdCA9DQorCQkJbV9jb21wb25lbnRzLmJlZ2luKCk7IGl0ICE9IG1fY29tcG9uZW50cy5lbmQoKTsgKytpdCkNCisJew0KKwkJTGl2ZVdpbmRvd1NlbmRhYmxlICpjb21wb25lbnQgPSBpdC0+Zmlyc3Q7DQorCQlMaXZlV2luZG93Q29tcG9uZW50IGMgPSBpdC0+c2Vjb25kOw0KKwkJc3RkOjpzdHJpbmcgc3Vic3lzdGVtID0gYy5zdWJzeXN0ZW07DQorCQlzdGQ6OnN0cmluZyBuYW1lID0gYy5uYW1lOw0KKwkJbV9saXZlV2luZG93VGFibGUtPkdldFN1YlRhYmxlKHN1YnN5c3RlbSktPlB1dFN0cmluZygiflRZUEV+IiwNCisJCQkJIkxXIFN1YnN5c3RlbSIpOw0KKwkJSVRhYmxlICp0YWJsZSA9IG1fbGl2ZVdpbmRvd1RhYmxlLT5HZXRTdWJUYWJsZShzdWJzeXN0ZW0pLT5HZXRTdWJUYWJsZSgNCisJCQkJbmFtZSk7DQorCQl0YWJsZS0+UHV0U3RyaW5nKCJ+VFlQRX4iLCBjb21wb25lbnQtPkdldFNtYXJ0RGFzaGJvYXJkVHlwZSgpKTsNCisJCXRhYmxlLT5QdXRTdHJpbmcoIk5hbWUiLCBuYW1lKTsNCisJCXRhYmxlLT5QdXRTdHJpbmcoIlN1YnN5c3RlbSIsIHN1YnN5c3RlbSk7DQorCQljb21wb25lbnQtPkluaXRUYWJsZSh0YWJsZSk7DQorCQlpZiAoYy5pc1NlbnNvcikNCisJCXsNCisJCQltX3NlbnNvcnMucHVzaF9iYWNrKGNvbXBvbmVudCk7DQorCQl9DQorCX0NCit9DQorDQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvTGl2ZVdpbmRvdy9MaXZlV2luZG93LmggYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9MaXZlV2luZG93L0xpdmVXaW5kb3cuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZmRkZGY2Ci0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvTGl2ZVdpbmRvdy9MaXZlV2luZG93LmgKQEAgLTAsMCArMSw2NyBAQAorI2lmbmRlZiBfTElWRV9XSU5ET1dfSA0KKyNkZWZpbmUgX0xJVkVfV0lORE9XX0gNCisNCisjaW5jbHVkZSAiTGl2ZVdpbmRvdy9MaXZlV2luZG93U2VuZGFibGUuaCINCisjaW5jbHVkZSAidGFibGVzL0lUYWJsZS5oIg0KKyNpbmNsdWRlICJDb21tYW5kcy9TY2hlZHVsZXIuaCINCisjaW5jbHVkZSA8dmVjdG9yPg0KKyNpbmNsdWRlIDxtYXA+DQorDQorc3RydWN0IExpdmVXaW5kb3dDb21wb25lbnQNCit7DQorCXN0ZDo6c3RyaW5nIHN1YnN5c3RlbTsNCisJc3RkOjpzdHJpbmcgbmFtZTsNCisJYm9vbCBpc1NlbnNvcjsNCisNCisJTGl2ZVdpbmRvd0NvbXBvbmVudCgpDQorCXt9Ly9XVEY/DQorCUxpdmVXaW5kb3dDb21wb25lbnQoc3RkOjpzdHJpbmcgc3Vic3lzdGVtLCBzdGQ6OnN0cmluZyBuYW1lLCBib29sIGlzU2Vuc29yKQ0KKwl7DQorCQl0aGlzLT5zdWJzeXN0ZW0gPSBzdWJzeXN0ZW07DQorCQl0aGlzLT5uYW1lID0gbmFtZTsNCisJCXRoaXMtPmlzU2Vuc29yID0gaXNTZW5zb3I7DQorCX0NCit9Ow0KKw0KKy8qKg0KKyAqIFRoZSBMaXZlV2luZG93IGNsYXNzIGlzIHRoZSBwdWJsaWMgaW50ZXJmYWNlIGZvciBwdXR0aW5nIHNlbnNvcnMgYW5kIGFjdHVhdG9ycw0KKyAqIG9uIHRoZSBMaXZlV2luZG93Lg0KKyAqDQorICogQGF1dGhvciBCcmFkIE1pbGxlcg0KKyAqLw0KK2NsYXNzIExpdmVXaW5kb3cgew0KK3B1YmxpYzoNCisJc3RhdGljIExpdmVXaW5kb3cgKiBHZXRJbnN0YW5jZSgpOw0KKwl2b2lkIFJ1bigpOw0KKwl2b2lkIEFkZFNlbnNvcihjaGFyICpzdWJzeXN0ZW0sIGNoYXIgKm5hbWUsIExpdmVXaW5kb3dTZW5kYWJsZSAqY29tcG9uZW50KTsNCisJdm9pZCBBZGRBY3R1YXRvcihjaGFyICpzdWJzeXN0ZW0sIGNoYXIgKm5hbWUsIExpdmVXaW5kb3dTZW5kYWJsZSAqY29tcG9uZW50KTsNCisJdm9pZCBBZGRTZW5zb3Ioc3RkOjpzdHJpbmcgdHlwZSwgaW50IG1vZHVsZSwgaW50IGNoYW5uZWwsIExpdmVXaW5kb3dTZW5kYWJsZSAqY29tcG9uZW50KTsNCisJdm9pZCBBZGRBY3R1YXRvcihzdGQ6OnN0cmluZyB0eXBlLCBpbnQgbW9kdWxlLCBpbnQgY2hhbm5lbCwgTGl2ZVdpbmRvd1NlbmRhYmxlICpjb21wb25lbnQpOw0KKwkNCisJYm9vbCBJc0VuYWJsZWQoKSB7IHJldHVybiBtX2VuYWJsZWQ7IH0NCisJdm9pZCBTZXRFbmFibGVkKGJvb2wgZW5hYmxlZCk7DQorDQorcHJvdGVjdGVkOg0KKwlMaXZlV2luZG93KCk7DQorCXZpcnR1YWwgfkxpdmVXaW5kb3coKTsNCisNCitwcml2YXRlOg0KKwl2b2lkIFVwZGF0ZVZhbHVlcygpOw0KKwl2b2lkIEluaXRpYWxpemUoKTsNCisJdm9pZCBJbml0aWFsaXplTGl2ZVdpbmRvd0NvbXBvbmVudHMoKTsNCisJDQorCXN0ZDo6dmVjdG9yPExpdmVXaW5kb3dTZW5kYWJsZSAqPiBtX3NlbnNvcnM7DQorCXN0ZDo6bWFwPExpdmVXaW5kb3dTZW5kYWJsZSAqLCBMaXZlV2luZG93Q29tcG9uZW50PiBtX2NvbXBvbmVudHM7DQorCQ0KKwlzdGF0aWMgTGl2ZVdpbmRvdyAqbV9pbnN0YW5jZTsNCisJSVRhYmxlICptX2xpdmVXaW5kb3dUYWJsZTsNCisJSVRhYmxlICptX3N0YXR1c1RhYmxlOw0KKwkNCisJU2NoZWR1bGVyICptX3NjaGVkdWxlcjsNCisJDQorCWJvb2wgbV9lbmFibGVkOw0KKwlib29sIG1fZmlyc3RUaW1lOw0KK307DQorDQorI2VuZGlmDQorDQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvTGl2ZVdpbmRvdy9MaXZlV2luZG93U2VuZGFibGUuaCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0xpdmVXaW5kb3cvTGl2ZVdpbmRvd1NlbmRhYmxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQzMDM5ZgotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0xpdmVXaW5kb3cvTGl2ZVdpbmRvd1NlbmRhYmxlLmgKQEAgLTAsMCArMSw0MCBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBDb3B5cmlnaHQgKGMpIFBhdHJpY2sgUGxlbmVmaXNjaCAyMDEyLiBBbGwgUmlnaHRzIFJlc2VydmVkLgkJCSAgICAgICovDQorLyogT3BlbiBTb3VyY2UgU29mdHdhcmUgLSBtYXkgYmUgbW9kaWZpZWQgYW5kIHNoYXJlZCBieSBGUkMgdGVhbXMuIFRoZSBjb2RlICAgKi8NCisvKiBtdXN0IGJlIGFjY29tcGFuaWVkIGJ5IHRoZSBGSVJTVCBCU0QgbGljZW5zZSBmaWxlIGluICQoV0lORF9CQVNFKS9XUElMaWIuICAqLw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorI2lmbmRlZiBMSVZFV0lORE9XU0VOREFCTEVfSF8NCisjZGVmaW5lIExJVkVXSU5ET1dTRU5EQUJMRV9IXw0KKw0KKyNpbmNsdWRlICJTbWFydERhc2hib2FyZC9TZW5kYWJsZS5oIg0KKw0KKy8qKg0KKyAqIExpdmUgV2luZG93IFNlbmRhYmxlIGlzIGEgc3BlY2lhbCB0eXBlIG9mIG9iamVjdCBzZW5kYWJsZSB0byB0aGUgbGl2ZSB3aW5kb3cuDQorICoNCisgKiBAYXV0aG9yIFBhdHJpY2sgUGxlbmVmaXNjaA0KKyAqLw0KK2NsYXNzIExpdmVXaW5kb3dTZW5kYWJsZTogcHVibGljIFNlbmRhYmxlDQorew0KK3B1YmxpYzoNCisgICAgLyoqDQorICAgICAqIFVwZGF0ZSB0aGUgdGFibGUgZm9yIHRoaXMgc2VuZGFibGUgb2JqZWN0IHdpdGggdGhlIGxhdGVzdA0KKyAgICAgKiB2YWx1ZXMuDQorICAgICAqLw0KKyAgICB2aXJ0dWFsIHZvaWQgVXBkYXRlVGFibGUoKSA9IDA7DQorDQorICAgIC8qKg0KKyAgICAgKiBTdGFydCBoYXZpbmcgdGhpcyBzZW5kYWJsZSBvYmplY3QgYXV0b21hdGljYWxseSByZXNwb25kIHRvDQorICAgICAqIHZhbHVlIGNoYW5nZXMgcmVmbGVjdCB0aGUgdmFsdWUgb24gdGhlIHRhYmxlLg0KKyAgICAgKi8NCisgICAgdmlydHVhbCB2b2lkIFN0YXJ0TGl2ZVdpbmRvd01vZGUoKSA9IDA7DQorDQorICAgIC8qKg0KKyAgICAgKiBTdG9wIGhhdmluZyB0aGlzIHNlbmRhYmxlIG9iamVjdCBhdXRvbWF0aWNhbGx5IHJlc3BvbmQgdG8gdmFsdWUNCisgICAgICogY2hhbmdlcy4NCisgICAgICovDQorICAgIHZpcnR1YWwgdm9pZCBTdG9wTGl2ZVdpbmRvd01vZGUoKSA9IDA7DQorfTsNCisNCisNCisjZW5kaWYgLyogTElWRVdJTkRPV1NFTkRBQkxFX0hfICovDQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvTGl2ZVdpbmRvdy9MaXZlV2luZG93U3RhdHVzTGlzdGVuZXIuY3BwIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvTGl2ZVdpbmRvdy9MaXZlV2luZG93U3RhdHVzTGlzdGVuZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyNTRhN2EKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9MaXZlV2luZG93L0xpdmVXaW5kb3dTdGF0dXNMaXN0ZW5lci5jcHAKQEAgLTAsMCArMSw3IEBACisjaW5jbHVkZSAiTGl2ZVdpbmRvdy9MaXZlV2luZG93U3RhdHVzTGlzdGVuZXIuaCINCisjaW5jbHVkZSAiQ29tbWFuZHMvU2NoZWR1bGVyLmgiDQorDQordm9pZCBWYWx1ZUNoYW5nZWQoSVRhYmxlKiBzb3VyY2UsIGNvbnN0IHN0ZDo6c3RyaW5nJiBrZXksIEVudHJ5VmFsdWUgdmFsdWUsIGJvb2wgaXNOZXcpIHsNCisJDQorfQ0KKw0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL0xpdmVXaW5kb3cvTGl2ZVdpbmRvd1N0YXR1c0xpc3RlbmVyLmggYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9MaXZlV2luZG93L0xpdmVXaW5kb3dTdGF0dXNMaXN0ZW5lci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmMzNmNDEKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9MaXZlV2luZG93L0xpdmVXaW5kb3dTdGF0dXNMaXN0ZW5lci5oCkBAIC0wLDAgKzEsMTIgQEAKKyNpZm5kZWYgX0xJVkVfV0lORE9XX1NUQVRVU19MSVNURU5FUl9IDQorI2RlZmluZSBfTElWRV9XSU5ET1dfU1RBVFVTX0xJU1RFTkVSX0gNCisNCisjaW5jbHVkZSAidGFibGVzL0lUYWJsZS5oIg0KKyNpbmNsdWRlICJ0YWJsZXMvSVRhYmxlTGlzdGVuZXIuaCINCisNCitjbGFzcyBMaXZlV2luZG93U3RhdHVzTGlzdGVuZXIgOiBwdWJsaWMgSVRhYmxlTGlzdGVuZXIgew0KK3B1YmxpYzoNCisJdmlydHVhbCB2b2lkIFZhbHVlQ2hhbmdlZChJVGFibGUqIHNvdXJjZSwgY29uc3Qgc3RkOjpzdHJpbmcmIGtleSwgRW50cnlWYWx1ZSB2YWx1ZSwgYm9vbCBpc05ldyk7DQorfTsNCisNCisjZW5kaWYgDQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvTW9kdWxlLmNwcCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL01vZHVsZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWJhOGMzYQotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL01vZHVsZS5jcHAKQEAgLTAsMCArMSw3NiBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBDb3B5cmlnaHQgKGMpIEZJUlNUIDIwMDguIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCQkJCQkJCSAgKi8NCisvKiBPcGVuIFNvdXJjZSBTb2Z0d2FyZSAtIG1heSBiZSBtb2RpZmllZCBhbmQgc2hhcmVkIGJ5IEZSQyB0ZWFtcy4gVGhlIGNvZGUgICAqLw0KKy8qIG11c3QgYmUgYWNjb21wYW5pZWQgYnkgdGhlIEZJUlNUIEJTRCBsaWNlbnNlIGZpbGUgaW4gJChXSU5EX0JBU0UpL1dQSUxpYi4gICovDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisjaW5jbHVkZSAiTW9kdWxlLmgiDQorI2luY2x1ZGUgIkFuYWxvZ01vZHVsZS5oIg0KKyNpbmNsdWRlICJEaWdpdGFsTW9kdWxlLmgiDQorLy8jaW5jbHVkZSAiU29sZW5vaWRNb2R1bGUuaCINCisNCitNb2R1bGUqIE1vZHVsZTo6bV9tb2R1bGVzW2tNYXhNb2R1bGVzXSA9IHtOVUxMfTsNCisNCisvKioNCisgKiBDb25zdHJ1Y3Rvci4NCisgKiANCisgKiBAcGFyYW0gdHlwZSBUaGUgdHlwZSBvZiBtb2R1bGUgcmVwcmVzZW50ZWQuDQorICogQHBhcmFtIG51bWJlciBUaGUgbW9kdWxlIGluZGV4IHdpdGhpbiB0aGUgbW9kdWxlIHR5cGUuDQorICovDQorTW9kdWxlOjpNb2R1bGUobkxvYWRPdXQ6OnRNb2R1bGVUeXBlIHR5cGUsIFVJTlQ4IG51bWJlcikNCisJOiBtX21vZHVsZVR5cGUgKHR5cGUpDQorCSwgbV9tb2R1bGVOdW1iZXIgKG51bWJlcikNCit7DQorCW1fbW9kdWxlc1tUb0luZGV4KHR5cGUsIG51bWJlcildID0gdGhpczsNCit9DQorDQorLyoqDQorICogRGVzdHJ1Y3Rvci4NCisgKi8NCitNb2R1bGU6On5Nb2R1bGUoKQ0KK3sNCit9DQorDQorLyoqDQorICogU3RhdGljIG1vZHVsZSBzaW5nbGV0b24gZmFjdG9yeS4NCisgKiANCisgKiBAcGFyYW0gdHlwZSBUaGUgdHlwZSBvZiBtb2R1bGUgcmVwcmVzZW50ZWQuDQorICogQHBhcmFtIG51bWJlciBUaGUgbW9kdWxlIGluZGV4IHdpdGhpbiB0aGUgbW9kdWxlIHR5cGUuDQorICovDQorTW9kdWxlKiBNb2R1bGU6OkdldE1vZHVsZShuTG9hZE91dDo6dE1vZHVsZVR5cGUgdHlwZSwgVUlOVDggbnVtYmVyKQ0KK3sNCisJaWYgKG1fbW9kdWxlc1tUb0luZGV4KHR5cGUsIG51bWJlcildID09IE5VTEwpDQorCXsNCisJCXN3aXRjaCh0eXBlKQ0KKwkJew0KKwkJY2FzZSBuTG9hZE91dDo6a01vZHVsZVR5cGVfQW5hbG9nOg0KKwkJCW5ldyBBbmFsb2dNb2R1bGUobnVtYmVyKTsNCisJCQlicmVhazsNCisJCWNhc2UgbkxvYWRPdXQ6OmtNb2R1bGVUeXBlX0RpZ2l0YWw6DQorCQkJbmV3IERpZ2l0YWxNb2R1bGUobnVtYmVyKTsNCisJCQlicmVhazsNCisvKg0KKwkJY2FzZSBuTG9hZE91dDo6a01vZHVsZVR5cGVfU29sZW5vaWQ6DQorCQkJbmV3IFNvbGVub2lkTW9kdWxlKG51bWJlcik7DQorCQkJYnJlYWs7DQorKi8NCisJCWRlZmF1bHQ6DQorCQkgICAgcmV0dXJuIE5VTEw7DQorCQl9DQorCX0NCisJcmV0dXJuIG1fbW9kdWxlc1tUb0luZGV4KHR5cGUsIG51bWJlcildOw0KK30NCisNCisvKioNCisgKiBDcmVhdGUgYW4gaW5kZXggaW50byB0aGUgbV9tb2R1bGVzIGFycmF5IGJhc2VkIG9uIHR5cGUgYW5kIG51bWJlcg0KKyAqIA0KKyAqIEBwYXJhbSB0eXBlIFRoZSB0eXBlIG9mIG1vZHVsZSByZXByZXNlbnRlZC4NCisgKiBAcGFyYW0gbnVtYmVyIFRoZSBtb2R1bGUgaW5kZXggd2l0aGluIHRoZSBtb2R1bGUgdHlwZS4NCisgKiBAcmV0dXJuIFRoZSBpbmRleCBpbnRvIG1fbW9kdWxlcy4NCisgKi8NCitVSU5UOCBNb2R1bGU6OlRvSW5kZXgobkxvYWRPdXQ6OnRNb2R1bGVUeXBlIHR5cGUsIFVJTlQ4IG51bWJlcikNCit7DQorCWlmIChudW1iZXIgPT0gMCB8fCBudW1iZXIgPiBrTWF4TW9kdWxlTnVtYmVyKSByZXR1cm4gMDsNCisJaWYgKHR5cGUgPCBuTG9hZE91dDo6a01vZHVsZVR5cGVfQW5hbG9nIHx8IHR5cGUgPiBuTG9hZE91dDo6a01vZHVsZVR5cGVfU29sZW5vaWQpIHJldHVybiAwOw0KKwlyZXR1cm4gKHR5cGUgKiBrTWF4TW9kdWxlTnVtYmVyKSArIChudW1iZXIgLSAxKTsNCit9DQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvTW9kdWxlLmggYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9Nb2R1bGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOWFmYjI0Ci0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvTW9kdWxlLmgKQEAgLTAsMCArMSwzNCBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBDb3B5cmlnaHQgKGMpIEZJUlNUIDIwMDguIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCQkJCQkJCSAgKi8NCisvKiBPcGVuIFNvdXJjZSBTb2Z0d2FyZSAtIG1heSBiZSBtb2RpZmllZCBhbmQgc2hhcmVkIGJ5IEZSQyB0ZWFtcy4gVGhlIGNvZGUgICAqLw0KKy8qIG11c3QgYmUgYWNjb21wYW5pZWQgYnkgdGhlIEZJUlNUIEJTRCBsaWNlbnNlIGZpbGUgaW4gJChXSU5EX0JBU0UpL1dQSUxpYi4gICovDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisjaWZuZGVmIE1PRFVMRV9IXw0KKyNkZWZpbmUgTU9EVUxFX0hfDQorDQorI2luY2x1ZGUgIlNlbnNvckJhc2UuaCINCisjaW5jbHVkZSAiTmV0d29ya0NvbW11bmljYXRpb24vTG9hZE91dC5oIg0KKw0KKyNkZWZpbmUga01heE1vZHVsZXMJKG5Mb2FkT3V0OjprTW9kdWxlVHlwZV9Tb2xlbm9pZCAqIGtNYXhNb2R1bGVOdW1iZXIgKyAoa01heE1vZHVsZU51bWJlciAtIDEpKQ0KKw0KK2NsYXNzIE1vZHVsZTogcHVibGljIFNlbnNvckJhc2UNCit7DQorcHVibGljOg0KKwluTG9hZE91dDo6dE1vZHVsZVR5cGUgR2V0VHlwZSgpIHtyZXR1cm4gbV9tb2R1bGVUeXBlO30NCisJVUlOVDggR2V0TnVtYmVyKCkge3JldHVybiBtX21vZHVsZU51bWJlcjt9DQorCXN0YXRpYyBNb2R1bGUgKkdldE1vZHVsZShuTG9hZE91dDo6dE1vZHVsZVR5cGUgdHlwZSwgVUlOVDggbnVtYmVyKTsNCisNCitwcm90ZWN0ZWQ6DQorCWV4cGxpY2l0IE1vZHVsZShuTG9hZE91dDo6dE1vZHVsZVR5cGUgdHlwZSwgVUlOVDggbnVtYmVyKTsNCisJdmlydHVhbCB+TW9kdWxlKCk7DQorDQorCW5Mb2FkT3V0Ojp0TW9kdWxlVHlwZSBtX21vZHVsZVR5cGU7IC8vLzwgVGhlIHR5cGUgb2YgbW9kdWxlIHJlcHJlc2VudGVkLg0KKwlVSU5UOCBtX21vZHVsZU51bWJlcjsgLy8vPCBUaGUgbW9kdWxlIGluZGV4IHdpdGhpbiB0aGUgbW9kdWxlIHR5cGUuDQorDQorcHJpdmF0ZToNCisJc3RhdGljIFVJTlQ4IFRvSW5kZXgobkxvYWRPdXQ6OnRNb2R1bGVUeXBlIHR5cGUsIFVJTlQ4IG51bWJlcik7DQorCXN0YXRpYyBNb2R1bGUqIG1fbW9kdWxlc1trTWF4TW9kdWxlc107DQorfTsNCisNCisjZW5kaWYNCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9Nb3RvclNhZmV0eS5oIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvTW90b3JTYWZldHkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NGY3NjAyCi0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvTW90b3JTYWZldHkuaApAQCAtMCwwICsxLDIzIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy8qIENvcHlyaWdodCAoYykgRklSU1QgMjAwOC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4JCQkJCQkJICAqLw0KKy8qIE9wZW4gU291cmNlIFNvZnR3YXJlIC0gbWF5IGJlIG1vZGlmaWVkIGFuZCBzaGFyZWQgYnkgRlJDIHRlYW1zLiBUaGUgY29kZSAgICovDQorLyogbXVzdCBiZSBhY2NvbXBhbmllZCBieSB0aGUgRklSU1QgQlNEIGxpY2Vuc2UgZmlsZSBpbiAkKFdJTkRfQkFTRSkvV1BJTGliLiAgKi8NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKyNpZm5kZWYgX01PVE9SX1NBRkVUWV8NCisjZGVmaW5lIF9NT1RPUl9TQUZFVFlfDQorDQorI2RlZmluZSBERUZBVUxUX1NBRkVUWV9FWFBJUkFUSU9OIDAuMQ0KKw0KK2NsYXNzIE1vdG9yU2FmZXR5IHsNCitwdWJsaWM6DQorCXZpcnR1YWwgdm9pZCBTZXRFeHBpcmF0aW9uKGZsb2F0IHRpbWVvdXQpID0gMDsNCisJdmlydHVhbCBmbG9hdCBHZXRFeHBpcmF0aW9uKCkgPSAwOw0KKwl2aXJ0dWFsIGJvb2wgSXNBbGl2ZSgpID0gMDsNCisJdmlydHVhbCB2b2lkIFN0b3BNb3RvcigpID0gMDsNCisJdmlydHVhbCB2b2lkIFNldFNhZmV0eUVuYWJsZWQoYm9vbCBlbmFibGVkKSA9IDA7DQorCXZpcnR1YWwgYm9vbCBJc1NhZmV0eUVuYWJsZWQoKSA9IDA7DQorCXZpcnR1YWwgdm9pZCBHZXREZXNjcmlwdGlvbihjaGFyICpkZXNjKSA9IDA7DQorfTsNCisNCisjZW5kaWYNCisNCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9Nb3RvclNhZmV0eUhlbHBlci5jcHAgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9Nb3RvclNhZmV0eUhlbHBlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmE5ZTlhZQotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL01vdG9yU2FmZXR5SGVscGVyLmNwcApAQCAtMCwwICsxLDE1NiBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBDb3B5cmlnaHQgKGMpIEZJUlNUIDIwMDguIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCQkJCQkJCSAgKi8NCisvKiBPcGVuIFNvdXJjZSBTb2Z0d2FyZSAtIG1heSBiZSBtb2RpZmllZCBhbmQgc2hhcmVkIGJ5IEZSQyB0ZWFtcy4gVGhlIGNvZGUgICAqLw0KKy8qIG11c3QgYmUgYWNjb21wYW5pZWQgYnkgdGhlIEZJUlNUIEJTRCBsaWNlbnNlIGZpbGUgaW4gJChXSU5EX0JBU0UpL1dQSUxpYi4gICovDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisjaW5jbHVkZSAiTW90b3JTYWZldHlIZWxwZXIuaCINCisNCisjaW5jbHVkZSAiRHJpdmVyU3RhdGlvbi5oIg0KKyNpbmNsdWRlICJNb3RvclNhZmV0eS5oIg0KKyNpbmNsdWRlICJUaW1lci5oIg0KKyNpbmNsdWRlICJXUElFcnJvcnMuaCINCisNCisjaW5jbHVkZSA8c3RkaW8uaD4NCisNCitNb3RvclNhZmV0eUhlbHBlciAqTW90b3JTYWZldHlIZWxwZXI6Om1faGVhZEhlbHBlciA9IE5VTEw7DQorUmVlbnRyYW50U2VtYXBob3JlIE1vdG9yU2FmZXR5SGVscGVyOjptX2xpc3RNdXRleDsNCisNCisvKioNCisgKiBUaGUgY29uc3RydWN0b3IgZm9yIGEgTW90b3JTYWZldHlIZWxwZXIgb2JqZWN0Lg0KKyAqIFRoZSBoZWxwZXIgb2JqZWN0IGlzIGNvbnN0cnVjdGVkIGZvciBldmVyeSBvYmplY3QgdGhhdCB3YW50cyB0byBpbXBsZW1lbnQgdGhlIE1vdG9yDQorICogU2FmZXR5IHByb3RvY29sLiBUaGUgaGVscGVyIG9iamVjdCBoYXMgdGhlIGNvZGUgdG8gYWN0dWFsbHkgZG8gdGhlIHRpbWluZyBhbmQgY2FsbCB0aGUNCisgKiBtb3RvcnMgU3RvcCgpIG1ldGhvZCB3aGVuIHRoZSB0aW1lb3V0IGV4cGlyZXMuIFRoZSBtb3RvciBvYmplY3QgaXMgZXhwZWN0ZWQgdG8gY2FsbCB0aGUNCisgKiBGZWVkKCkgbWV0aG9kIHdoZW5ldmVyIHRoZSBtb3RvcnMgdmFsdWUgaXMgdXBkYXRlZC4NCisgKiBAcGFyYW0gc2FmZU9iamVjdCBhIHBvaW50ZXIgdG8gdGhlIG1vdG9yIG9iamVjdCBpbXBsZW1lbnRpbmcgTW90b3JTYWZldHkuIFRoaXMgaXMgdXNlZA0KKyAqIHRvIGNhbGwgdGhlIFN0b3AoKSBtZXRob2Qgb24gdGhlIG1vdG9yLg0KKyAqLw0KK01vdG9yU2FmZXR5SGVscGVyOjpNb3RvclNhZmV0eUhlbHBlcihNb3RvclNhZmV0eSAqc2FmZU9iamVjdCkNCit7DQorCW1fc2FmZU9iamVjdCA9IHNhZmVPYmplY3Q7DQorCW1fZW5hYmxlZCA9IGZhbHNlOw0KKwltX2V4cGlyYXRpb24gPSBERUZBVUxUX1NBRkVUWV9FWFBJUkFUSU9OOw0KKwltX3N0b3BUaW1lID0gVGltZXI6OkdldEZQR0FUaW1lc3RhbXAoKTsNCisNCisJU3luY2hyb25pemVkIHN5bmMobV9saXN0TXV0ZXgpOw0KKwltX25leHRIZWxwZXIgPSBtX2hlYWRIZWxwZXI7DQorCW1faGVhZEhlbHBlciA9IHRoaXM7DQorfQ0KKw0KKw0KK01vdG9yU2FmZXR5SGVscGVyOjp+TW90b3JTYWZldHlIZWxwZXIoKQ0KK3sNCisJU3luY2hyb25pemVkIHN5bmMobV9saXN0TXV0ZXgpOw0KKwlpZiAobV9oZWFkSGVscGVyID09IHRoaXMpDQorCXsNCisJCW1faGVhZEhlbHBlciA9IG1fbmV4dEhlbHBlcjsNCisJfQ0KKwllbHNlDQorCXsNCisJCU1vdG9yU2FmZXR5SGVscGVyICpwcmV2ID0gTlVMTDsNCisJCU1vdG9yU2FmZXR5SGVscGVyICpjdXIgPSBtX2hlYWRIZWxwZXI7DQorCQl3aGlsZSAoY3VyICE9IHRoaXMgJiYgY3VyICE9IE5VTEwpDQorCQkJcHJldiA9IGN1ciwgY3VyID0gY3VyLT5tX25leHRIZWxwZXI7DQorCQlpZiAoY3VyID09IHRoaXMpDQorCQkJcHJldi0+bV9uZXh0SGVscGVyID0gY3VyLT5tX25leHRIZWxwZXI7DQorCX0NCit9DQorDQorLyoNCisgKiBGZWVkIHRoZSBtb3RvciBzYWZldHkgb2JqZWN0Lg0KKyAqIFJlc2V0cyB0aGUgdGltZXIgb24gdGhpcyBvYmplY3QgdGhhdCBpcyB1c2VkIHRvIGRvIHRoZSB0aW1lb3V0cy4NCisgKi8NCit2b2lkIE1vdG9yU2FmZXR5SGVscGVyOjpGZWVkKCkNCit7DQorCVN5bmNocm9uaXplZCBzeW5jKG1fc3luY011dGV4KTsNCisJbV9zdG9wVGltZSA9IFRpbWVyOjpHZXRGUEdBVGltZXN0YW1wKCkgKyBtX2V4cGlyYXRpb247DQorfQ0KKw0KKy8qDQorICogU2V0IHRoZSBleHBpcmF0aW9uIHRpbWUgZm9yIHRoZSBjb3JyZXNwb25kaW5nIG1vdG9yIHNhZmV0eSBvYmplY3QuDQorICogQHBhcmFtIGV4cGlyYXRpb25UaW1lIFRoZSB0aW1lb3V0IHZhbHVlIGluIHNlY29uZHMuDQorICovDQordm9pZCBNb3RvclNhZmV0eUhlbHBlcjo6U2V0RXhwaXJhdGlvbihmbG9hdCBleHBpcmF0aW9uVGltZSkNCit7DQorCVN5bmNocm9uaXplZCBzeW5jKG1fc3luY011dGV4KTsNCisJbV9leHBpcmF0aW9uID0gZXhwaXJhdGlvblRpbWU7DQorfQ0KKw0KKy8qKg0KKyAqIFJldHJpZXZlIHRoZSB0aW1lb3V0IHZhbHVlIGZvciB0aGUgY29ycmVzcG9uZGluZyBtb3RvciBzYWZldHkgb2JqZWN0Lg0KKyAqIEByZXR1cm5zIHRoZSB0aW1lb3V0IHZhbHVlIGluIHNlY29uZHMuDQorICovDQorZmxvYXQgTW90b3JTYWZldHlIZWxwZXI6OkdldEV4cGlyYXRpb24oKQ0KK3sNCisJU3luY2hyb25pemVkIHN5bmMobV9zeW5jTXV0ZXgpOw0KKwlyZXR1cm4gbV9leHBpcmF0aW9uOw0KK30NCisNCisvKioNCisgKiBEZXRlcm1pbmUgaWYgdGhlIG1vdG9yIGlzIHN0aWxsIG9wZXJhdGluZyBvciBoYXMgdGltZWQgb3V0Lg0KKyAqIEByZXR1cm5zIGEgdHJ1ZSB2YWx1ZSBpZiB0aGUgbW90b3IgaXMgc3RpbGwgb3BlcmF0aW5nIG5vcm1hbGx5IGFuZCBoYXNuJ3QgdGltZWQgb3V0Lg0KKyAqLw0KK2Jvb2wgTW90b3JTYWZldHlIZWxwZXI6OklzQWxpdmUoKQ0KK3sNCisJU3luY2hyb25pemVkIHN5bmMobV9zeW5jTXV0ZXgpOw0KKwlyZXR1cm4gIW1fZW5hYmxlZCB8fCBtX3N0b3BUaW1lID4gVGltZXI6OkdldEZQR0FUaW1lc3RhbXAoKTsNCit9DQorDQorLyoqDQorICogQ2hlY2sgaWYgdGhpcyBtb3RvciBoYXMgZXhjZWVkZWQgaXRzIHRpbWVvdXQuDQorICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIHBlcmlvZGljYWxseSB0byBkZXRlcm1pbmUgaWYgdGhpcyBtb3RvciBoYXMgZXhjZWVkZWQgaXRzIHRpbWVvdXQNCisgKiB2YWx1ZS4gSWYgaXQgaGFzLCB0aGUgc3RvcCBtZXRob2QgaXMgY2FsbGVkLCBhbmQgdGhlIG1vdG9yIGlzIHNodXQgZG93biB1bnRpbCBpdHMgdmFsdWUgaXMNCisgKiB1cGRhdGVkIGFnYWluLg0KKyAqLw0KK3ZvaWQgTW90b3JTYWZldHlIZWxwZXI6OkNoZWNrKCkNCit7DQorCWlmICghbV9lbmFibGVkKSByZXR1cm47DQorCWlmIChEcml2ZXJTdGF0aW9uOjpHZXRJbnN0YW5jZSgpLT5Jc0Rpc2FibGVkKCkpIHJldHVybjsNCisNCisJU3luY2hyb25pemVkIHN5bmMobV9zeW5jTXV0ZXgpOw0KKwlpZiAobV9zdG9wVGltZSA8IFRpbWVyOjpHZXRGUEdBVGltZXN0YW1wKCkpDQorCXsNCisJCWNoYXIgYnVmWzEyOF07DQorCQljaGFyIGRlc2NbNjRdOw0KKwkJbV9zYWZlT2JqZWN0LT5HZXREZXNjcmlwdGlvbihkZXNjKTsNCisJCXNucHJpbnRmKGJ1ZiwgMTI4LCAiJXMuLi4gT3V0cHV0IG5vdCB1cGRhdGVkIG9mdGVuIGVub3VnaC4iLCBkZXNjKTsNCisJCXdwaV9zZXRXUElFcnJvcldpdGhDb250ZXh0KFRpbWVvdXQsIGJ1Zik7DQorCQltX3NhZmVPYmplY3QtPlN0b3BNb3RvcigpOw0KKwl9DQorfQ0KKw0KKy8qKg0KKyAqIEVuYWJsZS9kaXNhYmxlIG1vdG9yIHNhZmV0eSBmb3IgdGhpcyBkZXZpY2UNCisgKiBUdXJuIG9uIGFuZCBvZmYgdGhlIG1vdG9yIHNhZmV0eSBvcHRpb24gZm9yIHRoaXMgUFdNIG9iamVjdC4NCisgKiBAcGFyYW0gZW5hYmxlZCBUcnVlIGlmIG1vdG9yIHNhZmV0eSBpcyBlbmZvcmNlZCBmb3IgdGhpcyBvYmplY3QNCisgKi8NCit2b2lkIE1vdG9yU2FmZXR5SGVscGVyOjpTZXRTYWZldHlFbmFibGVkKGJvb2wgZW5hYmxlZCkNCit7DQorCVN5bmNocm9uaXplZCBzeW5jKG1fc3luY011dGV4KTsNCisJbV9lbmFibGVkID0gZW5hYmxlZDsNCit9DQorDQorLyoqDQorICogUmV0dXJuIHRoZSBzdGF0ZSBvZiB0aGUgbW90b3Igc2FmZXR5IGVuYWJsZWQgZmxhZw0KKyAqIFJldHVybiBpZiB0aGUgbW90b3Igc2FmZXR5IGlzIGN1cnJlbnRseSBlbmFibGVkIGZvciB0aGlzIGRldmljY2UuDQorICogQHJldHVybnMgVHJ1ZSBpZiBtb3RvciBzYWZldHkgaXMgZW5mb3JjZWQgZm9yIHRoaXMgZGV2aWNlDQorICovDQorYm9vbCBNb3RvclNhZmV0eUhlbHBlcjo6SXNTYWZldHlFbmFibGVkKCkNCit7DQorCVN5bmNocm9uaXplZCBzeW5jKG1fc3luY011dGV4KTsNCisJcmV0dXJuIG1fZW5hYmxlZDsNCit9DQorDQorLyoqDQorICogQ2hlY2sgdGhlIG1vdG9ycyB0byBzZWUgaWYgYW55IGhhdmUgdGltZWQgb3V0Lg0KKyAqIFRoaXMgc3RhdGljICBtZXRob2QgaXMgY2FsbGVkIHBlcmlvZGljYWxseSB0byBwb2xsIGFsbCB0aGUgbW90b3JzIGFuZCBzdG9wIGFueSB0aGF0IGhhdmUNCisgKiB0aW1lZCBvdXQuDQorICovDQordm9pZCBNb3RvclNhZmV0eUhlbHBlcjo6Q2hlY2tNb3RvcnMoKQ0KK3sNCisJU3luY2hyb25pemVkIHN5bmMobV9saXN0TXV0ZXgpOw0KKwlmb3IgKE1vdG9yU2FmZXR5SGVscGVyICptc2ggPSBtX2hlYWRIZWxwZXI7IG1zaCAhPSBOVUxMOyBtc2ggPSBtc2gtPm1fbmV4dEhlbHBlcikNCisJew0KKwkJbXNoLT5DaGVjaygpOw0KKwl9DQorfQ0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL01vdG9yU2FmZXR5SGVscGVyLmggYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9Nb3RvclNhZmV0eUhlbHBlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlZTE1YjYKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9Nb3RvclNhZmV0eUhlbHBlci5oCkBAIC0wLDAgKzEsNDAgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorLyogQ29weXJpZ2h0IChjKSBGSVJTVCAyMDA4LiBBbGwgUmlnaHRzIFJlc2VydmVkLgkJCQkJCQkgICovDQorLyogT3BlbiBTb3VyY2UgU29mdHdhcmUgLSBtYXkgYmUgbW9kaWZpZWQgYW5kIHNoYXJlZCBieSBGUkMgdGVhbXMuIFRoZSBjb2RlICAgKi8NCisvKiBtdXN0IGJlIGFjY29tcGFuaWVkIGJ5IHRoZSBGSVJTVCBCU0QgbGljZW5zZSBmaWxlIGluICQoV0lORF9CQVNFKS9XUElMaWIuICAqLw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorI2lmbmRlZiBfX01PVE9SX1NBRkVUWV9IRUxQRVJfXw0KKyNkZWZpbmUgX19NT1RPUl9TQUZFVFlfSEVMUEVSX18NCisNCisjaW5jbHVkZSAiRXJyb3JCYXNlLmgiDQorI2luY2x1ZGUgIlN5bmNocm9uaXplZC5oIg0KKyNpbmNsdWRlIDxzZW1MaWIuaD4NCisNCitjbGFzcyBNb3RvclNhZmV0eTsNCisNCitjbGFzcyBNb3RvclNhZmV0eUhlbHBlciA6IHB1YmxpYyBFcnJvckJhc2UNCit7DQorcHVibGljOg0KKwlNb3RvclNhZmV0eUhlbHBlcihNb3RvclNhZmV0eSAqc2FmZU9iamVjdCk7DQorCX5Nb3RvclNhZmV0eUhlbHBlcigpOw0KKwl2b2lkIEZlZWQoKTsNCisJdm9pZCBTZXRFeHBpcmF0aW9uKGZsb2F0IGV4cGlyYXRpb25UaW1lKTsNCisJZmxvYXQgR2V0RXhwaXJhdGlvbigpOw0KKwlib29sIElzQWxpdmUoKTsNCisJdm9pZCBDaGVjaygpOw0KKwl2b2lkIFNldFNhZmV0eUVuYWJsZWQoYm9vbCBlbmFibGVkKTsNCisJYm9vbCBJc1NhZmV0eUVuYWJsZWQoKTsNCisJc3RhdGljIHZvaWQgQ2hlY2tNb3RvcnMoKTsNCitwcml2YXRlOg0KKwlkb3VibGUgbV9leHBpcmF0aW9uOwkJCS8vIHRoZSBleHBpcmF0aW9uIHRpbWUgZm9yIHRoaXMgb2JqZWN0DQorCWJvb2wgbV9lbmFibGVkOwkJCQkJLy8gdHJ1ZSBpZiBtb3RvciBzYWZldHkgaXMgZW5hYmxlZCBmb3IgdGhpcyBtb3Rvcg0KKwlkb3VibGUgbV9zdG9wVGltZTsgCQkJCS8vIHRoZSBGUEdBIGNsb2NrIHZhbHVlIHdoZW4gdGhpcyBtb3RvciBoYXMgZXhwaXJlZA0KKwlSZWVudHJhbnRTZW1hcGhvcmUgbV9zeW5jTXV0ZXg7CQkJLy8gcHJvdGVjdCBhY2Nlc3NlcyB0byB0aGUgc3RhdGUgZm9yIHRoaXMgb2JqZWN0DQorCU1vdG9yU2FmZXR5ICptX3NhZmVPYmplY3Q7CQkvLyB0aGUgb2JqZWN0IHRoYXQgaXMgdXNpbmcgdGhlIGhlbHBlcg0KKwlNb3RvclNhZmV0eUhlbHBlciAqbV9uZXh0SGVscGVyOyAvLyBuZXh0IG9iamVjdCBpbiB0aGUgbGlzdCBvZiBNb3RvclNhZmV0eUhlbHBlcnMNCisJc3RhdGljIE1vdG9yU2FmZXR5SGVscGVyICptX2hlYWRIZWxwZXI7IC8vIHRoZSBoZWFkIG9mIHRoZSBsaXN0IG9mIE1vdG9yU2FmZXR5SGVscGVyIG9iamVjdHMNCisJc3RhdGljIFJlZW50cmFudFNlbWFwaG9yZSBtX2xpc3RNdXRleDsJLy8gcHJvdGVjdCBhY2Nlc3NlcyB0byB0aGUgbGlzdCBvZiBoZWxwZXJzDQorfTsNCisNCisjZW5kaWYNCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9OZXR3b3JrQ29tbXVuaWNhdGlvbi9BSUNhbGlicmF0aW9uLmggYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9OZXR3b3JrQ29tbXVuaWNhdGlvbi9BSUNhbGlicmF0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmEyMDljMQotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL05ldHdvcmtDb21tdW5pY2F0aW9uL0FJQ2FsaWJyYXRpb24uaApAQCAtMCwwICsxLDE5IEBACisNCisjaWZuZGVmIF9fQUlDYWxpYnJhdGlvbl9oX18NCisjZGVmaW5lIF9fQUlDYWxpYnJhdGlvbl9oX18NCisNCisjaW5jbHVkZSA8dnhXb3Jrcy5oPg0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK2V4dGVybiAiQyINCit7DQorI2VuZGlmDQorDQorCVVJTlQzMiBGUkNfTmV0d29ya0NvbW11bmljYXRpb25fbkFJQ2FsaWJyYXRpb25fZ2V0TFNCV2VpZ2h0KGNvbnN0IFVJTlQzMiBhaVN5c3RlbUluZGV4LCBjb25zdCBVSU5UMzIgY2hhbm5lbCwgSU5UMzIgKnN0YXR1cyk7DQorCUlOVDMyIEZSQ19OZXR3b3JrQ29tbXVuaWNhdGlvbl9uQUlDYWxpYnJhdGlvbl9nZXRPZmZzZXQoY29uc3QgVUlOVDMyIGFpU3lzdGVtSW5kZXgsIGNvbnN0IFVJTlQzMiBjaGFubmVsLCBJTlQzMiAqc3RhdHVzKTsNCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCit9DQorI2VuZGlmDQorDQorI2VuZGlmIC8vIF9fQUlDYWxpYnJhdGlvbl9oX18NCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9OZXR3b3JrQ29tbXVuaWNhdGlvbi9GUkNDb21tLmggYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9OZXR3b3JrQ29tbXVuaWNhdGlvbi9GUkNDb21tLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRkMjg0YQotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL05ldHdvcmtDb21tdW5pY2F0aW9uL0ZSQ0NvbW0uaApAQCAtMCwwICsxLDE4MCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgKiAJCQkJCU5PVElDRQ0KKyAqIA0KKyAqIAlUaGVzZSBhcmUgdGhlIG9ubHkgZXh0ZXJuYWxseSBleHBvc2VkIGZ1bmN0aW9ucyB0byB0aGUNCisgKiAgIE5ldHdvcmtDb21tdW5pY2F0aW9uIGxpYnJhcnkNCisgKiANCisgKiBUaGlzIGlzIGFuIGltcGxlbWVudGF0aW9uIG9mIEZSQyBTcGVjIGZvciBDb21tIFByb3RvY29sDQorICogUmV2aXNpb24gNC41LCBKdW5lIDMwLCAyMDA4DQorICoNCisgKiBDb3B5cmlnaHQgKGMpIE5hdGlvbmFsIEluc3RydW1lbnRzIDIwMDguICBBbGwgUmlnaHRzIFJlc2VydmVkLg0KKyAqIA0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KKyNpZm5kZWYgX19GUkNfQ09NTV9IX18NCisjZGVmaW5lIF9fRlJDX0NPTU1fSF9fDQorDQorI2lmZGVmIFNJTVVMQVRJT04NCisjaW5jbHVkZSA8dnhXb3Jrc19jb21wYXQuaD4NCisjZGVmaW5lIEVYUE9SVF9GVU5DIF9fZGVjbHNwZWMoZGxsZXhwb3J0KSBfX2NkZWNsDQorI2Vsc2UNCisjaW5jbHVkZSA8dnhXb3Jrcy5oPg0KKyNkZWZpbmUgRVhQT1JUX0ZVTkMNCisjZW5kaWYNCisNCisvLyBDb21tYW5kZWVyIHNvbWUgYnl0ZXMgYXQgdGhlIGVuZCBmb3IgYWR2YW5jZWQgSS9PIGZlZWRiYWNrLg0KKyNkZWZpbmUgSU9fQ09ORklHX0RBVEFfU0laRSAzMg0KKyNkZWZpbmUgU1lTX1NUQVRVU19EQVRBX1NJWkUgNDQNCisjZGVmaW5lIFVTRVJfU1RBVFVTX0RBVEFfU0laRSAoOTg0IC0gSU9fQ09ORklHX0RBVEFfU0laRSAtIFNZU19TVEFUVVNfREFUQV9TSVpFKQ0KKyNkZWZpbmUgVVNFUl9EU19MQ0RfREFUQV9TSVpFIDEyOA0KKw0KK3N0cnVjdCBGUkNDb21tb25Db250cm9sRGF0YXsNCisJVUlOVDE2IHBhY2tldEluZGV4Ow0KKwl1bmlvbiB7DQorCQlVSU5UOCBjb250cm9sOw0KKyNpZmRlZiBTSU1VTEFUSU9ODQorCQlzdHJ1Y3Qgew0KKwkJCVVJTlQ4IGNoZWNrVmVyc2lvbnMgOjE7DQorCQkJVUlOVDggdGVzdCA6MTsNCisJCQlVSU5UOCByZXN5bmMgOiAxOw0KKwkJCVVJTlQ4IGZtc0F0dGFjaGVkOjE7DQorCQkJVUlOVDggYXV0b25vbW91cyA6IDE7DQorCQkJVUlOVDggZW5hYmxlZCA6IDE7DQorCQkJVUlOVDggbm90RVN0b3AgOiAxOw0KKwkJCVVJTlQ4IHJlc2V0IDogMTsNCisJCX07DQorI2Vsc2UNCisJCXN0cnVjdCB7DQorCQkJVUlOVDggcmVzZXQgOiAxOw0KKwkJCVVJTlQ4IG5vdEVTdG9wIDogMTsNCisJCQlVSU5UOCBlbmFibGVkIDogMTsNCisJCQlVSU5UOCBhdXRvbm9tb3VzIDogMTsNCisJCQlVSU5UOCBmbXNBdHRhY2hlZDoxOw0KKwkJCVVJTlQ4IHJlc3luYyA6IDE7DQorCQkJVUlOVDggdGVzdCA6MTsNCisJCQlVSU5UOCBjaGVja1ZlcnNpb25zIDoxOw0KKwkJfTsNCisjZW5kaWYNCisJfTsNCisJVUlOVDggZHNEaWdpdGFsSW47DQorCVVJTlQxNiB0ZWFtSUQ7DQorDQorCWNoYXIgZHNJRF9BbGxpYW5jZTsNCisJY2hhciBkc0lEX1Bvc2l0aW9uOw0KKw0KKwl1bmlvbiB7DQorCQlJTlQ4IHN0aWNrMEF4ZXNbNl07DQorCQlzdHJ1Y3Qgew0KKwkJCUlOVDggc3RpY2swQXhpczE7DQorCQkJSU5UOCBzdGljazBBeGlzMjsNCisJCQlJTlQ4IHN0aWNrMEF4aXMzOw0KKwkJCUlOVDggc3RpY2swQXhpczQ7DQorCQkJSU5UOCBzdGljazBBeGlzNTsNCisJCQlJTlQ4IHN0aWNrMEF4aXM2Ow0KKwkJfTsNCisJfTsNCisJVUlOVDE2IHN0aWNrMEJ1dHRvbnM7CQkvLyBMZWZ0LW1vc3QgNCBiaXRzIGFyZSB1bnVzZWQNCisNCisJdW5pb24gew0KKwkJSU5UOCBzdGljazFBeGVzWzZdOw0KKwkJc3RydWN0IHsNCisJCQlJTlQ4IHN0aWNrMUF4aXMxOw0KKwkJCUlOVDggc3RpY2sxQXhpczI7DQorCQkJSU5UOCBzdGljazFBeGlzMzsNCisJCQlJTlQ4IHN0aWNrMUF4aXM0Ow0KKwkJCUlOVDggc3RpY2sxQXhpczU7DQorCQkJSU5UOCBzdGljazFBeGlzNjsNCisJCX07DQorCX07DQorCVVJTlQxNiBzdGljazFCdXR0b25zOwkJLy8gTGVmdC1tb3N0IDQgYml0cyBhcmUgdW51c2VkDQorDQorCXVuaW9uIHsNCisJCUlOVDggc3RpY2syQXhlc1s2XTsNCisJCXN0cnVjdCB7DQorCQkJSU5UOCBzdGljazJBeGlzMTsNCisJCQlJTlQ4IHN0aWNrMkF4aXMyOw0KKwkJCUlOVDggc3RpY2syQXhpczM7DQorCQkJSU5UOCBzdGljazJBeGlzNDsNCisJCQlJTlQ4IHN0aWNrMkF4aXM1Ow0KKwkJCUlOVDggc3RpY2syQXhpczY7DQorCQl9Ow0KKwl9Ow0KKwlVSU5UMTYgc3RpY2syQnV0dG9uczsJCS8vIExlZnQtbW9zdCA0IGJpdHMgYXJlIHVudXNlZA0KKw0KKwl1bmlvbiB7DQorCQlJTlQ4IHN0aWNrM0F4ZXNbNl07DQorCQlzdHJ1Y3Qgew0KKwkJCUlOVDggc3RpY2szQXhpczE7DQorCQkJSU5UOCBzdGljazNBeGlzMjsNCisJCQlJTlQ4IHN0aWNrM0F4aXMzOw0KKwkJCUlOVDggc3RpY2szQXhpczQ7DQorCQkJSU5UOCBzdGljazNBeGlzNTsNCisJCQlJTlQ4IHN0aWNrM0F4aXM2Ow0KKwkJfTsNCisJfTsNCisJVUlOVDE2IHN0aWNrM0J1dHRvbnM7CQkvLyBMZWZ0LW1vc3QgNCBiaXRzIGFyZSB1bnVzZWQNCisNCisJLy9BbmFsb2cgaW5wdXRzIGFyZSAxMCBiaXQgcmlnaHQtanVzdGlmaWVkDQorCVVJTlQxNiBhbmFsb2cxOw0KKwlVSU5UMTYgYW5hbG9nMjsNCisJVUlOVDE2IGFuYWxvZzM7DQorCVVJTlQxNiBhbmFsb2c0Ow0KKw0KKwlVSU5UNjQgY1JJT0NoZWNrc3VtOw0KKwlVSU5UMzIgRlBHQUNoZWNrc3VtMDsNCisJVUlOVDMyIEZQR0FDaGVja3N1bTE7DQorCVVJTlQzMiBGUEdBQ2hlY2tzdW0yOw0KKwlVSU5UMzIgRlBHQUNoZWNrc3VtMzsNCisNCisJY2hhciB2ZXJzaW9uRGF0YVs4XTsNCit9Ow0KKw0KKyNkZWZpbmUga0ZSQ19OZXR3b3JrQ29tbXVuaWNhdGlvbl9EeW5hbWljVHlwZV9EU0VuaGFuY2VkSU9fSW5wdXQgMTcNCisjZGVmaW5lIGtGUkNfTmV0d29ya0NvbW11bmljYXRpb25fRHluYW1pY1R5cGVfRFNFbmhhbmNlZElPX091dHB1dCAxOA0KKyNkZWZpbmUga0ZSQ19OZXR3b3JrQ29tbXVuaWNhdGlvbl9EeW5hbWljVHlwZV9LaW5lY3RfSGVhZGVyIDE5DQorI2RlZmluZSBrRlJDX05ldHdvcmtDb21tdW5pY2F0aW9uX0R5bmFtaWNUeXBlX0tpbmVjdF9FeHRyYTEgMjANCisjZGVmaW5lIGtGUkNfTmV0d29ya0NvbW11bmljYXRpb25fRHluYW1pY1R5cGVfS2luZWN0X1ZlcnRpY2VzMSAyMQ0KKyNkZWZpbmUga0ZSQ19OZXR3b3JrQ29tbXVuaWNhdGlvbl9EeW5hbWljVHlwZV9LaW5lY3RfRXh0cmEyIDIyDQorI2RlZmluZSBrRlJDX05ldHdvcmtDb21tdW5pY2F0aW9uX0R5bmFtaWNUeXBlX0tpbmVjdF9WZXJ0aWNlczIgMjMNCisjZGVmaW5lIGtGUkNfTmV0d29ya0NvbW11bmljYXRpb25fRHluYW1pY1R5cGVfS2luZWN0X0pveXN0aWNrIDI0DQorI2RlZmluZSBrRlJDX05ldHdvcmtDb21tdW5pY2F0aW9uX0R5bmFtaWNUeXBlX0tpbmVjdF9DdXN0b20gMjUNCisNCitleHRlcm4gIkMiIHsNCisjaWZuZGVmIFNJTVVMQVRJT04NCisJdm9pZCBFWFBPUlRfRlVOQyBnZXRGUEdBSGFyZHdhcmVWZXJzaW9uKFVJTlQxNiAqZnBnYVZlcnNpb24sIFVJTlQzMiAqZnBnYVJldmlzaW9uKTsNCisjZW5kaWYNCisJaW50IEVYUE9SVF9GVU5DIGdldENvbW1vbkNvbnRyb2xEYXRhKEZSQ0NvbW1vbkNvbnRyb2xEYXRhICpkYXRhLCBpbnQgd2FpdF9tcyk7DQorCWludCBFWFBPUlRfRlVOQyBnZXRSZWNlbnRDb21tb25Db250cm9sRGF0YShGUkNDb21tb25Db250cm9sRGF0YSAqY29tbW9uRGF0YSwgaW50IHdhaXRfbXMpOw0KKwlpbnQgRVhQT1JUX0ZVTkMgZ2V0UmVjZW50U3RhdHVzRGF0YShVSU5UOCAqYmF0dGVyeUludCwgVUlOVDggKmJhdHRlcnlEZWMsIFVJTlQ4ICpkc0RpZ2l0YWxPdXQsIGludCB3YWl0X21zKTsNCisJaW50IEVYUE9SVF9GVU5DIGdldER5bmFtaWNDb250cm9sRGF0YShVSU5UOCB0eXBlLCBjaGFyICpkeW5hbWljRGF0YSwgSU5UMzIgbWF4TGVuZ3RoLCBpbnQgd2FpdF9tcyk7DQorCWludCBFWFBPUlRfRlVOQyBzZXRTdGF0dXNEYXRhKGZsb2F0IGJhdHRlcnksIFVJTlQ4IGRzRGlnaXRhbE91dCwgVUlOVDggdXBkYXRlTnVtYmVyLA0KKwkJCWNvbnN0IGNoYXIgKnVzZXJEYXRhSGlnaCwgaW50IHVzZXJEYXRhSGlnaExlbmd0aCwNCisJCQljb25zdCBjaGFyICp1c2VyRGF0YUxvdywgaW50IHVzZXJEYXRhTG93TGVuZ3RoLCBpbnQgd2FpdF9tcyk7DQorCWludCBFWFBPUlRfRlVOQyBzZXRTdGF0dXNEYXRhRmxvYXRBc0ludChpbnQgYmF0dGVyeSwgVUlOVDggZHNEaWdpdGFsT3V0LCBVSU5UOCB1cGRhdGVOdW1iZXIsDQorCQkJY29uc3QgY2hhciAqdXNlckRhdGFIaWdoLCBpbnQgdXNlckRhdGFIaWdoTGVuZ3RoLA0KKwkJCWNvbnN0IGNoYXIgKnVzZXJEYXRhTG93LCBpbnQgdXNlckRhdGFMb3dMZW5ndGgsIGludCB3YWl0X21zKTsNCisJaW50IEVYUE9SVF9GVU5DIHNldEVycm9yRGF0YShjb25zdCBjaGFyICplcnJvcnMsIGludCBlcnJvcnNMZW5ndGgsIGludCB3YWl0X21zKTsNCisJaW50IEVYUE9SVF9GVU5DIHNldFVzZXJEc0xjZERhdGEoY29uc3QgY2hhciAqdXNlckRzTGNkRGF0YSwgaW50IHVzZXJEc0xjZERhdGFMZW5ndGgsIGludCB3YWl0X21zKTsNCisJaW50IEVYUE9SVF9GVU5DIG92ZXJyaWRlSU9Db25maWcoY29uc3QgY2hhciAqaW9Db25maWcsIGludCB3YWl0X21zKTsNCisNCisJdm9pZCBFWFBPUlRfRlVOQyBzZXROZXdEYXRhU2VtKFNFTV9JRCk7DQorI2lmbmRlZiBTSU1VTEFUSU9ODQorCXZvaWQgRVhQT1JUX0ZVTkMgc2V0UmVzeW5jU2VtKFNFTV9JRCk7DQorCXZvaWQgRVhQT1JUX0ZVTkMgc2lnbmFsUmVzeW5jQWN0aW9uRG9uZSh2b2lkKTsNCisjZW5kaWYNCisNCisJLy8gdGhpcyBVSU5UMzIgaXMgcmVhbGx5IGEgTFZSZWZOdW0NCisJdm9pZCBFWFBPUlRfRlVOQyBzZXROZXdEYXRhT2NjdXJSZWYoVUlOVDMyIHJlZm51bSk7DQorI2lmbmRlZiBTSU1VTEFUSU9ODQorCXZvaWQgRVhQT1JUX0ZVTkMgc2V0UmVzeW5jT2NjdXJSZWYoVUlOVDMyIHJlZm51bSk7DQorI2VuZGlmDQorDQorCXZvaWQgRVhQT1JUX0ZVTkMgRlJDX05ldHdvcmtDb21tdW5pY2F0aW9uX2dldFZlcnNpb25TdHJpbmcoY2hhciAqdmVyc2lvbik7DQorCXZvaWQgRVhQT1JUX0ZVTkMgRlJDX05ldHdvcmtDb21tdW5pY2F0aW9uX29ic2VydmVVc2VyUHJvZ3JhbVN0YXJ0aW5nKHZvaWQpOw0KKwl2b2lkIEVYUE9SVF9GVU5DIEZSQ19OZXR3b3JrQ29tbXVuaWNhdGlvbl9vYnNlcnZlVXNlclByb2dyYW1EaXNhYmxlZCh2b2lkKTsNCisJdm9pZCBFWFBPUlRfRlVOQyBGUkNfTmV0d29ya0NvbW11bmljYXRpb25fb2JzZXJ2ZVVzZXJQcm9ncmFtQXV0b25vbW91cyh2b2lkKTsNCisJdm9pZCBFWFBPUlRfRlVOQyBGUkNfTmV0d29ya0NvbW11bmljYXRpb25fb2JzZXJ2ZVVzZXJQcm9ncmFtVGVsZW9wKHZvaWQpOw0KKwl2b2lkIEVYUE9SVF9GVU5DIEZSQ19OZXR3b3JrQ29tbXVuaWNhdGlvbl9vYnNlcnZlVXNlclByb2dyYW1UZXN0KHZvaWQpOw0KK307DQorDQorI2VuZGlmDQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvTmV0d29ya0NvbW11bmljYXRpb24vTG9hZE91dC5oIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvTmV0d29ya0NvbW11bmljYXRpb24vTG9hZE91dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzM2RlZTUKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9OZXR3b3JrQ29tbXVuaWNhdGlvbi9Mb2FkT3V0LmgKQEAgLTAsMCArMSwzOSBAQAorDQorI2lmbmRlZiBfX0xvYWRPdXRfaF9fDQorI2RlZmluZSBfX0xvYWRPdXRfaF9fDQorDQorI2RlZmluZSBrTWF4TW9kdWxlTnVtYmVyIDINCituYW1lc3BhY2UgbkxvYWRPdXQNCit7DQorICAgIHR5cGVkZWYgZW51bSB7DQorICAgICAgICBrTW9kdWxlVHlwZV9Vbmtub3duID0gMHgwMCwNCisgICAgICAgIGtNb2R1bGVUeXBlX0FuYWxvZyA9IDB4MDEsDQorICAgICAgICBrTW9kdWxlVHlwZV9EaWdpdGFsID0gMHgwMiwNCisgICAgICAgIGtNb2R1bGVUeXBlX1NvbGVub2lkID0gMHgwMywNCisgICAgfSB0TW9kdWxlVHlwZTsNCisgICAgYm9vbCBnZXRNb2R1bGVQcmVzZW5jZSh0TW9kdWxlVHlwZSBtb2R1bGVUeXBlLCBVSU5UOCBtb2R1bGVOdW1iZXIpOw0KKyAgICB0eXBlZGVmIGVudW0gew0KKyAgICAgICAga1RhcmdldENsYXNzX1Vua25vd24gPSAweDAwLA0KKyAgICAgICAga1RhcmdldENsYXNzX0ZSQzEgPSAweDEwLA0KKyAgICAgICAga1RhcmdldENsYXNzX0ZSQzIgPSAweDIwLA0KKyAgICAgICAga1RhcmdldENsYXNzX0ZSQzJfQW5hbG9nID0ga1RhcmdldENsYXNzX0ZSQzIgfCBrTW9kdWxlVHlwZV9BbmFsb2csDQorICAgICAgICBrVGFyZ2V0Q2xhc3NfRlJDMl9EaWdpdGFsID0ga1RhcmdldENsYXNzX0ZSQzIgfCBrTW9kdWxlVHlwZV9EaWdpdGFsLA0KKyAgICAgICAga1RhcmdldENsYXNzX0ZSQzJfU29sZW5vaWQgPSBrVGFyZ2V0Q2xhc3NfRlJDMiB8IGtNb2R1bGVUeXBlX1NvbGVub2lkLA0KKyAgICAgICAga1RhcmdldENsYXNzX0ZhbWlseU1hc2sgPSAweEYwLA0KKyAgICAgICAga1RhcmdldENsYXNzX01vZHVsZU1hc2sgPSAweDBGLA0KKyAgICB9IHRUYXJnZXRDbGFzczsNCisgICAgdFRhcmdldENsYXNzIGdldFRhcmdldENsYXNzKCk7DQorfQ0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK2V4dGVybiAiQyIgew0KKyNlbmRpZg0KKw0KKyAgICBVSU5UMzIgRlJDX05ldHdvcmtDb21tdW5pY2F0aW9uX25Mb2FkT3V0X2dldE1vZHVsZVByZXNlbmNlKFVJTlQzMiBtb2R1bGVUeXBlLCBVSU5UOCBtb2R1bGVOdW1iZXIpOw0KKyAgICBVSU5UMzIgRlJDX05ldHdvcmtDb21tdW5pY2F0aW9uX25Mb2FkT3V0X2dldFRhcmdldENsYXNzKCk7DQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorfQ0KKyNlbmRpZg0KKw0KKyNlbmRpZiAvLyBfX0xvYWRPdXRfaF9fDQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvTmV0d29ya0NvbW11bmljYXRpb24vTWFrZWZpbGUgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9OZXR3b3JrQ29tbXVuaWNhdGlvbi9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYTA1Yzk2Ci0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvTmV0d29ya0NvbW11bmljYXRpb24vTWFrZWZpbGUKQEAgLTAsMCArMSwyMTg0IEBACisjIFdpbmQgUml2ZXIgV29ya2JlbmNoIGdlbmVyYXRlZCBNYWtlZmlsZS4NCisjIERvIG5vdCBlZGl0ISEhDQorIw0KKyMgVGhlIGZpbGUgIi53cm1ha2VmaWxlIiBpcyB0aGUgdGVtcGxhdGUgdXNlZCBieSB0aGUgV2luZCBSaXZlciBXb3JrYmVuY2ggdG8NCisjIGdlbmVyYXRlIHRoZSBtYWtlZmlsZXMgb2YgdGhpcyBwcm9qZWN0LiBBZGQgdXNlci1zcGVjaWZpYyBidWlsZCB0YXJnZXRzIGFuZA0KKyMgbWFrZSBydWxlcyBvbmx5KCEpIGluIHRoaXMgcHJvamVjdCdzICIud3JtYWtlZmlsZSIgZmlsZS4gVGhlc2Ugd2lsbCB0aGVuIGJlDQorIyBhdXRvbWF0aWNhbGx5IGR1bXBlZCBpbnRvIHRoZSBtYWtlZmlsZXMuDQorDQorV0lORF9IT01FIDo9ICQoc3Vic3QgXCwvLCQoV0lORF9IT01FKSkNCitXSU5EX0JBU0UgOj0gJChzdWJzdCBcLC8sJChXSU5EX0JBU0UpKQ0KK1dJTkRfVVNSIDo9ICQoc3Vic3QgXCwvLCQoV0lORF9VU1IpKQ0KKw0KK2FsbCA6IHByZV9idWlsZCBtYWluX2FsbCBwb3N0X2J1aWxkDQorDQorX2NsZWFuIDo6DQorCUBlY2hvICJtYWtlOiByZW1vdmluZyB0YXJnZXRzIGFuZCBvYmplY3RzIG9mIGBwd2RgIg0KKw0KK1RSQUNFPTANCitUUkFDRU9OPSQoVFJBQ0U6MD1AKQ0KK1RSQUNFX0ZMQUc9JChUUkFDRU9OOjE9KQ0KKw0KK01BS0VGSUxFIDo9IE1ha2VmaWxlDQorDQorQlVJTERfU1BFQyA9IFBQQzYwM2dudQ0KK0RFQlVHX01PREUgPSAxDQorU1JDX0RJUiA6PSAuDQorQlVJTERfUk9PVF9ESVIgOj0gDQorUFJKX1JPT1RfRElSIDo9IEM6L3dpbmRyaXZlci93b3Jrc3BhY2UvV1BJTGliDQorV1NfUk9PVF9ESVIgOj0gQzovd2luZHJpdmVyL3dvcmtzcGFjZQ0KKw0KK0FMTF9CVUlMRF9TUEVDUyA6PSBQUEMzMmRpYWIgUFBDMzJnbnUgUFBDMzJzZmRpYWIgUFBDMzJzZmdudSBcDQorCSBQUEM0MDNkaWFiIFBQQzQwM2dudSBQUEM0MDVkaWFiIFBQQzQwNWdudSBcDQorCSBQUEM0MDVzZmRpYWIgUFBDNDA1c2ZnbnUgUFBDNDQwZGlhYiBQUEM0NDBnbnUgXA0KKwkgUFBDNDQwc2ZkaWFiIFBQQzQ0MHNmZ251IFBQQzYwM2RpYWIgUFBDNjAzZ251IFwNCisJIFBQQzYwNGRpYWIgUFBDNjA0Z251IFBQQzg1WFhkaWFiIFBQQzg1WFhnbnUgXA0KKwkgUFBDODVYWHNmZGlhYiBQUEM4NVhYc2ZnbnUgUFBDODYwc2ZkaWFiIFBQQzg2MHNmZ251IFwNCisJIFNJTUxJTlVYZGlhYiBTSU1MSU5VWGdudSBTSU1OVGRpYWIgU0lNTlRnbnUgXA0KKwkgU0lNU1BBUkNTT0xBUklTZGlhYiBTSU1TUEFSQ1NPTEFSSVNnbnUNCitFTkFCTEVEX0JVSUxEX1NQRUNTIDo9IFBQQzYwM2dudQ0KKw0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDMzJkaWFiKQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitPQkpfRElSIDo9IFBQQzMyZGlhYl9ERUJVRw0KK2Vsc2UNCitPQkpfRElSIDo9IFBQQzMyZGlhYg0KK2VuZGlmDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzMyZ251KQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitPQkpfRElSIDo9IFBQQzMyZ251X0RFQlVHDQorZWxzZQ0KK09CSl9ESVIgOj0gUFBDMzJnbnUNCitlbmRpZg0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEMzMnNmZGlhYikNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorT0JKX0RJUiA6PSBQUEMzMnNmZGlhYl9ERUJVRw0KK2Vsc2UNCitPQkpfRElSIDo9IFBQQzMyc2ZkaWFiDQorZW5kaWYNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDMzJzZmdudSkNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorT0JKX0RJUiA6PSBQUEMzMnNmZ251X0RFQlVHDQorZWxzZQ0KK09CSl9ESVIgOj0gUFBDMzJzZmdudQ0KK2VuZGlmDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzQwM2RpYWIpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK09CSl9ESVIgOj0gUFBDNDAzZGlhYl9ERUJVRw0KK2Vsc2UNCitPQkpfRElSIDo9IFBQQzQwM2RpYWINCitlbmRpZg0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM0MDNnbnUpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK09CSl9ESVIgOj0gUFBDNDAzZ251X0RFQlVHDQorZWxzZQ0KK09CSl9ESVIgOj0gUFBDNDAzZ251DQorZW5kaWYNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNDA1ZGlhYikNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorT0JKX0RJUiA6PSBQUEM0MDVkaWFiX0RFQlVHDQorZWxzZQ0KK09CSl9ESVIgOj0gUFBDNDA1ZGlhYg0KK2VuZGlmDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzQwNWdudSkNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorT0JKX0RJUiA6PSBQUEM0MDVnbnVfREVCVUcNCitlbHNlDQorT0JKX0RJUiA6PSBQUEM0MDVnbnUNCitlbmRpZg0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM0MDVzZmRpYWIpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK09CSl9ESVIgOj0gUFBDNDA1c2ZkaWFiX0RFQlVHDQorZWxzZQ0KK09CSl9ESVIgOj0gUFBDNDA1c2ZkaWFiDQorZW5kaWYNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNDA1c2ZnbnUpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK09CSl9ESVIgOj0gUFBDNDA1c2ZnbnVfREVCVUcNCitlbHNlDQorT0JKX0RJUiA6PSBQUEM0MDVzZmdudQ0KK2VuZGlmDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzQ0MGRpYWIpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK09CSl9ESVIgOj0gUFBDNDQwZGlhYl9ERUJVRw0KK2Vsc2UNCitPQkpfRElSIDo9IFBQQzQ0MGRpYWINCitlbmRpZg0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM0NDBnbnUpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK09CSl9ESVIgOj0gUFBDNDQwZ251X0RFQlVHDQorZWxzZQ0KK09CSl9ESVIgOj0gUFBDNDQwZ251DQorZW5kaWYNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNDQwc2ZkaWFiKQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitPQkpfRElSIDo9IFBQQzQ0MHNmZGlhYl9ERUJVRw0KK2Vsc2UNCitPQkpfRElSIDo9IFBQQzQ0MHNmZGlhYg0KK2VuZGlmDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzQ0MHNmZ251KQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitPQkpfRElSIDo9IFBQQzQ0MHNmZ251X0RFQlVHDQorZWxzZQ0KK09CSl9ESVIgOj0gUFBDNDQwc2ZnbnUNCitlbmRpZg0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM2MDNkaWFiKQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitPQkpfRElSIDo9IFBQQzYwM2RpYWJfREVCVUcNCitlbHNlDQorT0JKX0RJUiA6PSBQUEM2MDNkaWFiDQorZW5kaWYNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNjAzZ251KQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitPQkpfRElSIDo9IFBQQzYwM2dudV9ERUJVRw0KK2Vsc2UNCitPQkpfRElSIDo9IFBQQzYwM2dudQ0KK2VuZGlmDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzYwNGRpYWIpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK09CSl9ESVIgOj0gUFBDNjA0ZGlhYl9ERUJVRw0KK2Vsc2UNCitPQkpfRElSIDo9IFBQQzYwNGRpYWINCitlbmRpZg0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM2MDRnbnUpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK09CSl9ESVIgOj0gUFBDNjA0Z251X0RFQlVHDQorZWxzZQ0KK09CSl9ESVIgOj0gUFBDNjA0Z251DQorZW5kaWYNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDODVYWGRpYWIpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK09CSl9ESVIgOj0gUFBDODVYWGRpYWJfREVCVUcNCitlbHNlDQorT0JKX0RJUiA6PSBQUEM4NVhYZGlhYg0KK2VuZGlmDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzg1WFhnbnUpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK09CSl9ESVIgOj0gUFBDODVYWGdudV9ERUJVRw0KK2Vsc2UNCitPQkpfRElSIDo9IFBQQzg1WFhnbnUNCitlbmRpZg0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM4NVhYc2ZkaWFiKQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitPQkpfRElSIDo9IFBQQzg1WFhzZmRpYWJfREVCVUcNCitlbHNlDQorT0JKX0RJUiA6PSBQUEM4NVhYc2ZkaWFiDQorZW5kaWYNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDODVYWHNmZ251KQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitPQkpfRElSIDo9IFBQQzg1WFhzZmdudV9ERUJVRw0KK2Vsc2UNCitPQkpfRElSIDo9IFBQQzg1WFhzZmdudQ0KK2VuZGlmDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzg2MHNmZGlhYikNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorT0JKX0RJUiA6PSBQUEM4NjBzZmRpYWJfREVCVUcNCitlbHNlDQorT0JKX0RJUiA6PSBQUEM4NjBzZmRpYWINCitlbmRpZg0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM4NjBzZmdudSkNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorT0JKX0RJUiA6PSBQUEM4NjBzZmdudV9ERUJVRw0KK2Vsc2UNCitPQkpfRElSIDo9IFBQQzg2MHNmZ251DQorZW5kaWYNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksU0lNTElOVVhkaWFiKQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitPQkpfRElSIDo9IFNJTUxJTlVYZGlhYl9ERUJVRw0KK2Vsc2UNCitPQkpfRElSIDo9IFNJTUxJTlVYZGlhYg0KK2VuZGlmDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFNJTUxJTlVYZ251KQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitPQkpfRElSIDo9IFNJTUxJTlVYZ251X0RFQlVHDQorZWxzZQ0KK09CSl9ESVIgOj0gU0lNTElOVVhnbnUNCitlbmRpZg0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxTSU1OVGRpYWIpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK09CSl9ESVIgOj0gU0lNTlRkaWFiX0RFQlVHDQorZWxzZQ0KK09CSl9ESVIgOj0gU0lNTlRkaWFiDQorZW5kaWYNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksU0lNTlRnbnUpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK09CSl9ESVIgOj0gU0lNTlRnbnVfREVCVUcNCitlbHNlDQorT0JKX0RJUiA6PSBTSU1OVGdudQ0KK2VuZGlmDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFNJTVNQQVJDU09MQVJJU2RpYWIpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK09CSl9ESVIgOj0gU0lNU1BBUkNTT0xBUklTZGlhYl9ERUJVRw0KK2Vsc2UNCitPQkpfRElSIDo9IFNJTVNQQVJDU09MQVJJU2RpYWINCitlbmRpZg0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxTSU1TUEFSQ1NPTEFSSVNnbnUpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK09CSl9ESVIgOj0gU0lNU1BBUkNTT0xBUklTZ251X0RFQlVHDQorZWxzZQ0KK09CSl9ESVIgOj0gU0lNU1BBUkNTT0xBUklTZ251DQorZW5kaWYNCitlbmRpZg0KKw0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDMzJkaWFiKQ0KK1NVQkRJUlMgOj0NCitPQkpFQ1RTIDo9DQorDQorUFJPSkVDVF9UQVJHRVRTIDo9ICQoT0JKRUNUUykNCisNCitTVUJfT0JKRUNUUyA6PQ0KK1NVQl9UQVJHRVRTIDo9DQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzMyZ251KQ0KK1NVQkRJUlMgOj0NCitPQkpFQ1RTIDo9DQorDQorUFJPSkVDVF9UQVJHRVRTIDo9ICQoT0JKRUNUUykNCisNCitTVUJfT0JKRUNUUyA6PQ0KK1NVQl9UQVJHRVRTIDo9DQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzMyc2ZkaWFiKQ0KK1NVQkRJUlMgOj0NCitPQkpFQ1RTIDo9DQorDQorUFJPSkVDVF9UQVJHRVRTIDo9ICQoT0JKRUNUUykNCisNCitTVUJfT0JKRUNUUyA6PQ0KK1NVQl9UQVJHRVRTIDo9DQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzMyc2ZnbnUpDQorU1VCRElSUyA6PQ0KK09CSkVDVFMgOj0NCisNCitQUk9KRUNUX1RBUkdFVFMgOj0gJChPQkpFQ1RTKQ0KKw0KK1NVQl9PQkpFQ1RTIDo9DQorU1VCX1RBUkdFVFMgOj0NCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNDAzZGlhYikNCitTVUJESVJTIDo9DQorT0JKRUNUUyA6PQ0KKw0KK1BST0pFQ1RfVEFSR0VUUyA6PSAkKE9CSkVDVFMpDQorDQorU1VCX09CSkVDVFMgOj0NCitTVUJfVEFSR0VUUyA6PQ0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM0MDNnbnUpDQorU1VCRElSUyA6PQ0KK09CSkVDVFMgOj0NCisNCitQUk9KRUNUX1RBUkdFVFMgOj0gJChPQkpFQ1RTKQ0KKw0KK1NVQl9PQkpFQ1RTIDo9DQorU1VCX1RBUkdFVFMgOj0NCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNDA1ZGlhYikNCitTVUJESVJTIDo9DQorT0JKRUNUUyA6PQ0KKw0KK1BST0pFQ1RfVEFSR0VUUyA6PSAkKE9CSkVDVFMpDQorDQorU1VCX09CSkVDVFMgOj0NCitTVUJfVEFSR0VUUyA6PQ0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM0MDVnbnUpDQorU1VCRElSUyA6PQ0KK09CSkVDVFMgOj0NCisNCitQUk9KRUNUX1RBUkdFVFMgOj0gJChPQkpFQ1RTKQ0KKw0KK1NVQl9PQkpFQ1RTIDo9DQorU1VCX1RBUkdFVFMgOj0NCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNDA1c2ZkaWFiKQ0KK1NVQkRJUlMgOj0NCitPQkpFQ1RTIDo9DQorDQorUFJPSkVDVF9UQVJHRVRTIDo9ICQoT0JKRUNUUykNCisNCitTVUJfT0JKRUNUUyA6PQ0KK1NVQl9UQVJHRVRTIDo9DQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzQwNXNmZ251KQ0KK1NVQkRJUlMgOj0NCitPQkpFQ1RTIDo9DQorDQorUFJPSkVDVF9UQVJHRVRTIDo9ICQoT0JKRUNUUykNCisNCitTVUJfT0JKRUNUUyA6PQ0KK1NVQl9UQVJHRVRTIDo9DQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzQ0MGRpYWIpDQorU1VCRElSUyA6PQ0KK09CSkVDVFMgOj0NCisNCitQUk9KRUNUX1RBUkdFVFMgOj0gJChPQkpFQ1RTKQ0KKw0KK1NVQl9PQkpFQ1RTIDo9DQorU1VCX1RBUkdFVFMgOj0NCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNDQwZ251KQ0KK1NVQkRJUlMgOj0NCitPQkpFQ1RTIDo9DQorDQorUFJPSkVDVF9UQVJHRVRTIDo9ICQoT0JKRUNUUykNCisNCitTVUJfT0JKRUNUUyA6PQ0KK1NVQl9UQVJHRVRTIDo9DQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzQ0MHNmZGlhYikNCitTVUJESVJTIDo9DQorT0JKRUNUUyA6PQ0KKw0KK1BST0pFQ1RfVEFSR0VUUyA6PSAkKE9CSkVDVFMpDQorDQorU1VCX09CSkVDVFMgOj0NCitTVUJfVEFSR0VUUyA6PQ0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM0NDBzZmdudSkNCitTVUJESVJTIDo9DQorT0JKRUNUUyA6PQ0KKw0KK1BST0pFQ1RfVEFSR0VUUyA6PSAkKE9CSkVDVFMpDQorDQorU1VCX09CSkVDVFMgOj0NCitTVUJfVEFSR0VUUyA6PQ0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM2MDNkaWFiKQ0KK1NVQkRJUlMgOj0NCitPQkpFQ1RTIDo9DQorDQorUFJPSkVDVF9UQVJHRVRTIDo9ICQoT0JKRUNUUykNCisNCitTVUJfT0JKRUNUUyA6PQ0KK1NVQl9UQVJHRVRTIDo9DQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzYwM2dudSkNCitTVUJESVJTIDo9DQorT0JKRUNUUyA6PQ0KKw0KK1BST0pFQ1RfVEFSR0VUUyA6PSAkKE9CSkVDVFMpDQorDQorU1VCX09CSkVDVFMgOj0NCitTVUJfVEFSR0VUUyA6PQ0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM2MDRkaWFiKQ0KK1NVQkRJUlMgOj0NCitPQkpFQ1RTIDo9DQorDQorUFJPSkVDVF9UQVJHRVRTIDo9ICQoT0JKRUNUUykNCisNCitTVUJfT0JKRUNUUyA6PQ0KK1NVQl9UQVJHRVRTIDo9DQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzYwNGdudSkNCitTVUJESVJTIDo9DQorT0JKRUNUUyA6PQ0KKw0KK1BST0pFQ1RfVEFSR0VUUyA6PSAkKE9CSkVDVFMpDQorDQorU1VCX09CSkVDVFMgOj0NCitTVUJfVEFSR0VUUyA6PQ0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM4NVhYZGlhYikNCitTVUJESVJTIDo9DQorT0JKRUNUUyA6PQ0KKw0KK1BST0pFQ1RfVEFSR0VUUyA6PSAkKE9CSkVDVFMpDQorDQorU1VCX09CSkVDVFMgOj0NCitTVUJfVEFSR0VUUyA6PQ0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM4NVhYZ251KQ0KK1NVQkRJUlMgOj0NCitPQkpFQ1RTIDo9DQorDQorUFJPSkVDVF9UQVJHRVRTIDo9ICQoT0JKRUNUUykNCisNCitTVUJfT0JKRUNUUyA6PQ0KK1NVQl9UQVJHRVRTIDo9DQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzg1WFhzZmRpYWIpDQorU1VCRElSUyA6PQ0KK09CSkVDVFMgOj0NCisNCitQUk9KRUNUX1RBUkdFVFMgOj0gJChPQkpFQ1RTKQ0KKw0KK1NVQl9PQkpFQ1RTIDo9DQorU1VCX1RBUkdFVFMgOj0NCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDODVYWHNmZ251KQ0KK1NVQkRJUlMgOj0NCitPQkpFQ1RTIDo9DQorDQorUFJPSkVDVF9UQVJHRVRTIDo9ICQoT0JKRUNUUykNCisNCitTVUJfT0JKRUNUUyA6PQ0KK1NVQl9UQVJHRVRTIDo9DQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzg2MHNmZGlhYikNCitTVUJESVJTIDo9DQorT0JKRUNUUyA6PQ0KKw0KK1BST0pFQ1RfVEFSR0VUUyA6PSAkKE9CSkVDVFMpDQorDQorU1VCX09CSkVDVFMgOj0NCitTVUJfVEFSR0VUUyA6PQ0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM4NjBzZmdudSkNCitTVUJESVJTIDo9DQorT0JKRUNUUyA6PQ0KKw0KK1BST0pFQ1RfVEFSR0VUUyA6PSAkKE9CSkVDVFMpDQorDQorU1VCX09CSkVDVFMgOj0NCitTVUJfVEFSR0VUUyA6PQ0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxTSU1MSU5VWGRpYWIpDQorU1VCRElSUyA6PQ0KK09CSkVDVFMgOj0NCisNCitQUk9KRUNUX1RBUkdFVFMgOj0gJChPQkpFQ1RTKQ0KKw0KK1NVQl9PQkpFQ1RTIDo9DQorU1VCX1RBUkdFVFMgOj0NCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksU0lNTElOVVhnbnUpDQorU1VCRElSUyA6PQ0KK09CSkVDVFMgOj0NCisNCitQUk9KRUNUX1RBUkdFVFMgOj0gJChPQkpFQ1RTKQ0KKw0KK1NVQl9PQkpFQ1RTIDo9DQorU1VCX1RBUkdFVFMgOj0NCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksU0lNTlRkaWFiKQ0KK1NVQkRJUlMgOj0NCitPQkpFQ1RTIDo9DQorDQorUFJPSkVDVF9UQVJHRVRTIDo9ICQoT0JKRUNUUykNCisNCitTVUJfT0JKRUNUUyA6PQ0KK1NVQl9UQVJHRVRTIDo9DQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFNJTU5UZ251KQ0KK1NVQkRJUlMgOj0NCitPQkpFQ1RTIDo9DQorDQorUFJPSkVDVF9UQVJHRVRTIDo9ICQoT0JKRUNUUykNCisNCitTVUJfT0JKRUNUUyA6PQ0KK1NVQl9UQVJHRVRTIDo9DQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFNJTVNQQVJDU09MQVJJU2RpYWIpDQorU1VCRElSUyA6PQ0KK09CSkVDVFMgOj0NCisNCitQUk9KRUNUX1RBUkdFVFMgOj0gJChPQkpFQ1RTKQ0KKw0KK1NVQl9PQkpFQ1RTIDo9DQorU1VCX1RBUkdFVFMgOj0NCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksU0lNU1BBUkNTT0xBUklTZ251KQ0KK1NVQkRJUlMgOj0NCitPQkpFQ1RTIDo9DQorDQorUFJPSkVDVF9UQVJHRVRTIDo9ICQoT0JKRUNUUykNCisNCitTVUJfT0JKRUNUUyA6PQ0KK1NVQl9UQVJHRVRTIDo9DQorZW5kaWYNCisNCitQUk9KRUNUX1RZUEUgPSBES00NCitERUZJTkVTID0gDQorRVhQQU5EX0RCRyA9IDANCisNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzMyZGlhYikNCitWWF9DUFVfRkFNSUxZID0gcHBjDQorQ1BVID0gUFBDMzINCitUT09MX0ZBTUlMWSA9IGRpYWINCitUT09MID0gZGlhYg0KK1RPT0xfUEFUSCA9IA0KK0NDX0FSQ0hfU1BFQyA9IC10UFBDRkg6dnh3b3JrczYzIC1Yc3Rtdy1zbG93IC1EUFBDMzJfZnA2MHgNCitMSUJQQVRIID0gDQorTElCUyA9IA0KKw0KK0lERV9JTkNMVURFUyA9IC1JJChXSU5EX0JBU0UpL3RhcmdldC9oIC1JJChXSU5EX0JBU0UpL3RhcmdldC9oL3dybi9jb3JlaXAgDQorDQorSURFX0xJQlJBUklFUyA9IA0KK2VuZGlmDQorDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEMzMmdudSkNCitWWF9DUFVfRkFNSUxZID0gcHBjDQorQ1BVID0gUFBDMzINCitUT09MX0ZBTUlMWSA9IGdudQ0KK1RPT0wgPSBnbnUNCitUT09MX1BBVEggPSANCitDQ19BUkNIX1NQRUMgPSAtbWhhcmQtZmxvYXQgLW1zdHJpY3QtYWxpZ24gLW1uby1pbXBsaWNpdC1mcCAtRFBQQzMyX2ZwNjB4DQorTElCUEFUSCA9IA0KK0xJQlMgPSANCisNCitJREVfSU5DTFVERVMgPSAtSSQoV0lORF9CQVNFKS90YXJnZXQvaCAtSSQoV0lORF9CQVNFKS90YXJnZXQvaC93cm4vY29yZWlwIA0KKw0KK0lERV9MSUJSQVJJRVMgPSANCitlbmRpZg0KKw0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDMzJzZmRpYWIpDQorVlhfQ1BVX0ZBTUlMWSA9IHBwYw0KK0NQVSA9IFBQQzMyDQorVE9PTF9GQU1JTFkgPSBkaWFiDQorVE9PTCA9IHNmZGlhYg0KK1RPT0xfUEFUSCA9IA0KK0NDX0FSQ0hfU1BFQyA9IC10UFBDRlM6dnh3b3JrczYzDQorTElCUEFUSCA9IA0KK0xJQlMgPSANCisNCitJREVfSU5DTFVERVMgPSAtSSQoV0lORF9CQVNFKS90YXJnZXQvaCAtSSQoV0lORF9CQVNFKS90YXJnZXQvaC93cm4vY29yZWlwIA0KKw0KK0lERV9MSUJSQVJJRVMgPSANCitlbmRpZg0KKw0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDMzJzZmdudSkNCitWWF9DUFVfRkFNSUxZID0gcHBjDQorQ1BVID0gUFBDMzINCitUT09MX0ZBTUlMWSA9IGdudQ0KK1RPT0wgPSBzZmdudQ0KK1RPT0xfUEFUSCA9IA0KK0NDX0FSQ0hfU1BFQyA9IC1tc29mdC1mbG9hdCAtbXN0cmljdC1hbGlnbg0KK0xJQlBBVEggPSANCitMSUJTID0gDQorDQorSURFX0lOQ0xVREVTID0gLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2ggLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2gvd3JuL2NvcmVpcCANCisNCitJREVfTElCUkFSSUVTID0gDQorZW5kaWYNCisNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzQwM2RpYWIpDQorVlhfQ1BVX0ZBTUlMWSA9IHBwYw0KK0NQVSA9IFBQQzQwMw0KK1RPT0xfRkFNSUxZID0gZGlhYg0KK1RPT0wgPSBkaWFiDQorVE9PTF9QQVRIID0gDQorQ0NfQVJDSF9TUEVDID0gLXRQUEM0MDNGUzp2eHdvcmtzNjMNCitMSUJQQVRIID0gDQorTElCUyA9IA0KKw0KK0lERV9JTkNMVURFUyA9IC1JJChXSU5EX0JBU0UpL3RhcmdldC9oIC1JJChXSU5EX0JBU0UpL3RhcmdldC9oL3dybi9jb3JlaXAgDQorDQorSURFX0xJQlJBUklFUyA9IA0KK2VuZGlmDQorDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM0MDNnbnUpDQorVlhfQ1BVX0ZBTUlMWSA9IHBwYw0KK0NQVSA9IFBQQzQwMw0KK1RPT0xfRkFNSUxZID0gZ251DQorVE9PTCA9IGdudQ0KK1RPT0xfUEFUSCA9IA0KK0NDX0FSQ0hfU1BFQyA9IC1tY3B1PTQwMyAtbXN0cmljdC1hbGlnbiAtbXNvZnQtZmxvYXQNCitMSUJQQVRIID0gDQorTElCUyA9IA0KKw0KK0lERV9JTkNMVURFUyA9IC1JJChXSU5EX0JBU0UpL3RhcmdldC9oIC1JJChXSU5EX0JBU0UpL3RhcmdldC9oL3dybi9jb3JlaXAgDQorDQorSURFX0xJQlJBUklFUyA9IA0KK2VuZGlmDQorDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM0MDVkaWFiKQ0KK1ZYX0NQVV9GQU1JTFkgPSBwcGMNCitDUFUgPSBQUEM0MDUNCitUT09MX0ZBTUlMWSA9IGRpYWINCitUT09MID0gZGlhYg0KK1RPT0xfUEFUSCA9IA0KK0NDX0FSQ0hfU1BFQyA9IC10UFBDNDA1RlM6dnh3b3JrczYzDQorTElCUEFUSCA9IA0KK0xJQlMgPSANCisNCitJREVfSU5DTFVERVMgPSAtSSQoV0lORF9CQVNFKS90YXJnZXQvaCAtSSQoV0lORF9CQVNFKS90YXJnZXQvaC93cm4vY29yZWlwIA0KKw0KK0lERV9MSUJSQVJJRVMgPSANCitlbmRpZg0KKw0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNDA1Z251KQ0KK1ZYX0NQVV9GQU1JTFkgPSBwcGMNCitDUFUgPSBQUEM0MDUNCitUT09MX0ZBTUlMWSA9IGdudQ0KK1RPT0wgPSBnbnUNCitUT09MX1BBVEggPSANCitDQ19BUkNIX1NQRUMgPSAtbWNwdT00MDUgLW1zdHJpY3QtYWxpZ24gLW1zb2Z0LWZsb2F0DQorTElCUEFUSCA9IA0KK0xJQlMgPSANCisNCitJREVfSU5DTFVERVMgPSAtSSQoV0lORF9CQVNFKS90YXJnZXQvaCAtSSQoV0lORF9CQVNFKS90YXJnZXQvaC93cm4vY29yZWlwIA0KKw0KK0lERV9MSUJSQVJJRVMgPSANCitlbmRpZg0KKw0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNDA1c2ZkaWFiKQ0KK1ZYX0NQVV9GQU1JTFkgPSBwcGMNCitDUFUgPSBQUEM0MDUNCitUT09MX0ZBTUlMWSA9IGRpYWINCitUT09MID0gc2ZkaWFiDQorVE9PTF9QQVRIID0gDQorQ0NfQVJDSF9TUEVDID0gLXRQUEM0MDVGUzp2eHdvcmtzNjMNCitMSUJQQVRIID0gDQorTElCUyA9IA0KKw0KK0lERV9JTkNMVURFUyA9IC1JJChXSU5EX0JBU0UpL3RhcmdldC9oIC1JJChXSU5EX0JBU0UpL3RhcmdldC9oL3dybi9jb3JlaXAgDQorDQorSURFX0xJQlJBUklFUyA9IA0KK2VuZGlmDQorDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM0MDVzZmdudSkNCitWWF9DUFVfRkFNSUxZID0gcHBjDQorQ1BVID0gUFBDNDA1DQorVE9PTF9GQU1JTFkgPSBnbnUNCitUT09MID0gc2ZnbnUNCitUT09MX1BBVEggPSANCitDQ19BUkNIX1NQRUMgPSAtbWNwdT00MDUgLW1zdHJpY3QtYWxpZ24gLW1zb2Z0LWZsb2F0DQorTElCUEFUSCA9IA0KK0xJQlMgPSANCisNCitJREVfSU5DTFVERVMgPSAtSSQoV0lORF9CQVNFKS90YXJnZXQvaCAtSSQoV0lORF9CQVNFKS90YXJnZXQvaC93cm4vY29yZWlwIA0KKw0KK0lERV9MSUJSQVJJRVMgPSANCitlbmRpZg0KKw0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNDQwZGlhYikNCitWWF9DUFVfRkFNSUxZID0gcHBjDQorQ1BVID0gUFBDNDQwDQorVE9PTF9GQU1JTFkgPSBkaWFiDQorVE9PTCA9IGRpYWINCitUT09MX1BBVEggPSANCitDQ19BUkNIX1NQRUMgPSAtdFBQQzQ0MEZIOnZ4d29ya3M2Mw0KK0xJQlBBVEggPSANCitMSUJTID0gDQorDQorSURFX0lOQ0xVREVTID0gLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2ggLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2gvd3JuL2NvcmVpcCANCisNCitJREVfTElCUkFSSUVTID0gDQorZW5kaWYNCisNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzQ0MGdudSkNCitWWF9DUFVfRkFNSUxZID0gcHBjDQorQ1BVID0gUFBDNDQwDQorVE9PTF9GQU1JTFkgPSBnbnUNCitUT09MID0gZ251DQorVE9PTF9QQVRIID0gDQorQ0NfQVJDSF9TUEVDID0gLW1jcHU9NDQwIC1tc3RyaWN0LWFsaWduIC1tc29mdC1mbG9hdA0KK0xJQlBBVEggPSANCitMSUJTID0gDQorDQorSURFX0lOQ0xVREVTID0gLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2ggLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2gvd3JuL2NvcmVpcCANCisNCitJREVfTElCUkFSSUVTID0gDQorZW5kaWYNCisNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzQ0MHNmZGlhYikNCitWWF9DUFVfRkFNSUxZID0gcHBjDQorQ1BVID0gUFBDNDQwDQorVE9PTF9GQU1JTFkgPSBkaWFiDQorVE9PTCA9IHNmZGlhYg0KK1RPT0xfUEFUSCA9IA0KK0NDX0FSQ0hfU1BFQyA9IC10UFBDNDQwRlM6dnh3b3JrczYzDQorTElCUEFUSCA9IA0KK0xJQlMgPSANCisNCitJREVfSU5DTFVERVMgPSAtSSQoV0lORF9CQVNFKS90YXJnZXQvaCAtSSQoV0lORF9CQVNFKS90YXJnZXQvaC93cm4vY29yZWlwIA0KKw0KK0lERV9MSUJSQVJJRVMgPSANCitlbmRpZg0KKw0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNDQwc2ZnbnUpDQorVlhfQ1BVX0ZBTUlMWSA9IHBwYw0KK0NQVSA9IFBQQzQ0MA0KK1RPT0xfRkFNSUxZID0gZ251DQorVE9PTCA9IHNmZ251DQorVE9PTF9QQVRIID0gDQorQ0NfQVJDSF9TUEVDID0gLW1jcHU9NDQwIC1tc3RyaWN0LWFsaWduIC1tc29mdC1mbG9hdA0KK0xJQlBBVEggPSANCitMSUJTID0gDQorDQorSURFX0lOQ0xVREVTID0gLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2ggLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2gvd3JuL2NvcmVpcCANCisNCitJREVfTElCUkFSSUVTID0gDQorZW5kaWYNCisNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzYwM2RpYWIpDQorVlhfQ1BVX0ZBTUlMWSA9IHBwYw0KK0NQVSA9IFBQQzYwMw0KK1RPT0xfRkFNSUxZID0gZGlhYg0KK1RPT0wgPSBkaWFiDQorVE9PTF9QQVRIID0gDQorQ0NfQVJDSF9TUEVDID0gLXRQUEM2MDNGSDp2eHdvcmtzNjMNCitMSUJQQVRIID0gDQorTElCUyA9IA0KKw0KK0lERV9JTkNMVURFUyA9IC1JJChXSU5EX0JBU0UpL3RhcmdldC9oIC1JJChXSU5EX0JBU0UpL3RhcmdldC9oL3dybi9jb3JlaXAgDQorDQorSURFX0xJQlJBUklFUyA9IA0KK2VuZGlmDQorDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM2MDNnbnUpDQorVlhfQ1BVX0ZBTUlMWSA9IHBwYw0KK0NQVSA9IFBQQzYwMw0KK1RPT0xfRkFNSUxZID0gZ251DQorVE9PTCA9IGdudQ0KK1RPT0xfUEFUSCA9IA0KK0NDX0FSQ0hfU1BFQyA9IC1tY3B1PTYwMyAtbXN0cmljdC1hbGlnbiAtbW5vLWltcGxpY2l0LWZwIC1tbG9uZ2NhbGwNCitMSUJQQVRIID0gDQorTElCUyA9IA0KKw0KK0lERV9JTkNMVURFUyA9IC1JLi4gLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2ggLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2gvd3JuL2NvcmVpcCANCisNCitJREVfTElCUkFSSUVTID0gDQorZW5kaWYNCisNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzYwNGRpYWIpDQorVlhfQ1BVX0ZBTUlMWSA9IHBwYw0KK0NQVSA9IFBQQzYwNA0KK1RPT0xfRkFNSUxZID0gZGlhYg0KK1RPT0wgPSBkaWFiDQorVE9PTF9QQVRIID0gDQorQ0NfQVJDSF9TUEVDID0gLXRQUEM2MDRGSDp2eHdvcmtzNjMNCitMSUJQQVRIID0gDQorTElCUyA9IA0KKw0KK0lERV9JTkNMVURFUyA9IC1JJChXSU5EX0JBU0UpL3RhcmdldC9oIC1JJChXSU5EX0JBU0UpL3RhcmdldC9oL3dybi9jb3JlaXAgDQorDQorSURFX0xJQlJBUklFUyA9IA0KK2VuZGlmDQorDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM2MDRnbnUpDQorVlhfQ1BVX0ZBTUlMWSA9IHBwYw0KK0NQVSA9IFBQQzYwNA0KK1RPT0xfRkFNSUxZID0gZ251DQorVE9PTCA9IGdudQ0KK1RPT0xfUEFUSCA9IA0KK0NDX0FSQ0hfU1BFQyA9IC1tY3B1PTYwNCAtbXN0cmljdC1hbGlnbiAtbW5vLWltcGxpY2l0LWZwDQorTElCUEFUSCA9IA0KK0xJQlMgPSANCisNCitJREVfSU5DTFVERVMgPSAtSSQoV0lORF9CQVNFKS90YXJnZXQvaCAtSSQoV0lORF9CQVNFKS90YXJnZXQvaC93cm4vY29yZWlwIA0KKw0KK0lERV9MSUJSQVJJRVMgPSANCitlbmRpZg0KKw0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDODVYWGRpYWIpDQorVlhfQ1BVX0ZBTUlMWSA9IHBwYw0KK0NQVSA9IFBQQzg1WFgNCitUT09MX0ZBTUlMWSA9IGRpYWINCitUT09MID0gZGlhYg0KK1RPT0xfUEFUSCA9IA0KK0NDX0FSQ0hfU1BFQyA9IC10UFBDRTUwMEZTOnZ4d29ya3M2Mw0KK0xJQlBBVEggPSANCitMSUJTID0gDQorDQorSURFX0lOQ0xVREVTID0gLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2ggLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2gvd3JuL2NvcmVpcCANCisNCitJREVfTElCUkFSSUVTID0gDQorZW5kaWYNCisNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzg1WFhnbnUpDQorVlhfQ1BVX0ZBTUlMWSA9IHBwYw0KK0NQVSA9IFBQQzg1WFgNCitUT09MX0ZBTUlMWSA9IGdudQ0KK1RPT0wgPSBnbnUNCitUT09MX1BBVEggPSANCitDQ19BUkNIX1NQRUMgPSAtbWNwdT04NTQwIC1tc3RyaWN0LWFsaWduIC1tc29mdC1mbG9hdCAtbWFiaT1uby1zcGUNCitMSUJQQVRIID0gDQorTElCUyA9IA0KKw0KK0lERV9JTkNMVURFUyA9IC1JJChXSU5EX0JBU0UpL3RhcmdldC9oIC1JJChXSU5EX0JBU0UpL3RhcmdldC9oL3dybi9jb3JlaXAgDQorDQorSURFX0xJQlJBUklFUyA9IA0KK2VuZGlmDQorDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM4NVhYc2ZkaWFiKQ0KK1ZYX0NQVV9GQU1JTFkgPSBwcGMNCitDUFUgPSBQUEM4NVhYDQorVE9PTF9GQU1JTFkgPSBkaWFiDQorVE9PTCA9IHNmZGlhYg0KK1RPT0xfUEFUSCA9IA0KK0NDX0FSQ0hfU1BFQyA9IC10UFBDRTUwMEZTOnZ4d29ya3M2Mw0KK0xJQlBBVEggPSANCitMSUJTID0gDQorDQorSURFX0lOQ0xVREVTID0gLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2ggLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2gvd3JuL2NvcmVpcCANCisNCitJREVfTElCUkFSSUVTID0gDQorZW5kaWYNCisNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzg1WFhzZmdudSkNCitWWF9DUFVfRkFNSUxZID0gcHBjDQorQ1BVID0gUFBDODVYWA0KK1RPT0xfRkFNSUxZID0gZ251DQorVE9PTCA9IHNmZ251DQorVE9PTF9QQVRIID0gDQorQ0NfQVJDSF9TUEVDID0gLW1jcHU9ODU0MCAtbXN0cmljdC1hbGlnbiAtbXNvZnQtZmxvYXQgLW1hYmk9bm8tc3BlDQorTElCUEFUSCA9IA0KK0xJQlMgPSANCisNCitJREVfSU5DTFVERVMgPSAtSSQoV0lORF9CQVNFKS90YXJnZXQvaCAtSSQoV0lORF9CQVNFKS90YXJnZXQvaC93cm4vY29yZWlwIA0KKw0KK0lERV9MSUJSQVJJRVMgPSANCitlbmRpZg0KKw0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDODYwc2ZkaWFiKQ0KK1ZYX0NQVV9GQU1JTFkgPSBwcGMNCitDUFUgPSBQUEM4NjANCitUT09MX0ZBTUlMWSA9IGRpYWINCitUT09MID0gc2ZkaWFiDQorVE9PTF9QQVRIID0gDQorQ0NfQVJDSF9TUEVDID0gLXRQUEM4NjBGUzp2eHdvcmtzNjMNCitMSUJQQVRIID0gDQorTElCUyA9IA0KKw0KK0lERV9JTkNMVURFUyA9IC1JJChXSU5EX0JBU0UpL3RhcmdldC9oIC1JJChXSU5EX0JBU0UpL3RhcmdldC9oL3dybi9jb3JlaXAgDQorDQorSURFX0xJQlJBUklFUyA9IA0KK2VuZGlmDQorDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM4NjBzZmdudSkNCitWWF9DUFVfRkFNSUxZID0gcHBjDQorQ1BVID0gUFBDODYwDQorVE9PTF9GQU1JTFkgPSBnbnUNCitUT09MID0gc2ZnbnUNCitUT09MX1BBVEggPSANCitDQ19BUkNIX1NQRUMgPSAtbWNwdT04NjAgLW1zdHJpY3QtYWxpZ24gLW1zb2Z0LWZsb2F0DQorTElCUEFUSCA9IA0KK0xJQlMgPSANCisNCitJREVfSU5DTFVERVMgPSAtSSQoV0lORF9CQVNFKS90YXJnZXQvaCAtSSQoV0lORF9CQVNFKS90YXJnZXQvaC93cm4vY29yZWlwIA0KKw0KK0lERV9MSUJSQVJJRVMgPSANCitlbmRpZg0KKw0KK2lmZXEgKCQoQlVJTERfU1BFQyksU0lNTElOVVhkaWFiKQ0KK1ZYX0NQVV9GQU1JTFkgPSBzaW1saW51eA0KK0NQVSA9IFNJTUxJTlVYDQorVE9PTF9GQU1JTFkgPSBkaWFiDQorVE9PTCA9IGRpYWINCitUT09MX1BBVEggPSANCitDQ19BUkNIX1NQRUMgPSAtdFg4NkxIOnZ4d29ya3M2Mw0KK0xJQlBBVEggPSANCitMSUJTID0gDQorDQorSURFX0lOQ0xVREVTID0gLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2ggLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2gvd3JuL2NvcmVpcCANCisNCitJREVfTElCUkFSSUVTID0gDQorZW5kaWYNCisNCitpZmVxICgkKEJVSUxEX1NQRUMpLFNJTUxJTlVYZ251KQ0KK1ZYX0NQVV9GQU1JTFkgPSBzaW1saW51eA0KK0NQVSA9IFNJTUxJTlVYDQorVE9PTF9GQU1JTFkgPSBnbnUNCitUT09MID0gZ251DQorVE9PTF9QQVRIID0gDQorQ0NfQVJDSF9TUEVDID0gLW10dW5lPWk0ODYgLW1hcmNoPWk0ODYNCitMSUJQQVRIID0gDQorTElCUyA9IA0KKw0KK0lERV9JTkNMVURFUyA9IC1JJChXSU5EX0JBU0UpL3RhcmdldC9oIC1JJChXSU5EX0JBU0UpL3RhcmdldC9oL3dybi9jb3JlaXAgDQorDQorSURFX0xJQlJBUklFUyA9IA0KK2VuZGlmDQorDQoraWZlcSAoJChCVUlMRF9TUEVDKSxTSU1OVGRpYWIpDQorVlhfQ1BVX0ZBTUlMWSA9IHNpbXBjDQorQ1BVID0gU0lNTlQNCitUT09MX0ZBTUlMWSA9IGRpYWINCitUT09MID0gZGlhYg0KK1RPT0xfUEFUSCA9IA0KK0NDX0FSQ0hfU1BFQyA9IC10WDg2TEg6dnh3b3JrczYzDQorTElCUEFUSCA9IA0KK0xJQlMgPSANCisNCitJREVfSU5DTFVERVMgPSAtSSQoV0lORF9CQVNFKS90YXJnZXQvaCAtSSQoV0lORF9CQVNFKS90YXJnZXQvaC93cm4vY29yZWlwIA0KKw0KK0lERV9MSUJSQVJJRVMgPSANCitlbmRpZg0KKw0KK2lmZXEgKCQoQlVJTERfU1BFQyksU0lNTlRnbnUpDQorVlhfQ1BVX0ZBTUlMWSA9IHNpbXBjDQorQ1BVID0gU0lNTlQNCitUT09MX0ZBTUlMWSA9IGdudQ0KK1RPT0wgPSBnbnUNCitUT09MX1BBVEggPSANCitDQ19BUkNIX1NQRUMgPSAtbXR1bmU9aTQ4NiAtbWFyY2g9aTQ4Ng0KK0xJQlBBVEggPSANCitMSUJTID0gDQorDQorSURFX0lOQ0xVREVTID0gLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2ggLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2gvd3JuL2NvcmVpcCANCisNCitJREVfTElCUkFSSUVTID0gDQorZW5kaWYNCisNCitpZmVxICgkKEJVSUxEX1NQRUMpLFNJTVNQQVJDU09MQVJJU2RpYWIpDQorVlhfQ1BVX0ZBTUlMWSA9IHNpbXNvDQorQ1BVID0gU0lNU1BBUkNTT0xBUklTDQorVE9PTF9GQU1JTFkgPSBkaWFiDQorVE9PTCA9IGRpYWINCitUT09MX1BBVEggPSANCitDQ19BUkNIX1NQRUMgPSAtdFNQQVJDRkg6dnh3b3JrczYzDQorTElCUEFUSCA9IA0KK0xJQlMgPSANCisNCitJREVfSU5DTFVERVMgPSAtSSQoV0lORF9CQVNFKS90YXJnZXQvaCAtSSQoV0lORF9CQVNFKS90YXJnZXQvaC93cm4vY29yZWlwIA0KKw0KK0lERV9MSUJSQVJJRVMgPSANCitlbmRpZg0KKw0KK2lmZXEgKCQoQlVJTERfU1BFQyksU0lNU1BBUkNTT0xBUklTZ251KQ0KK1ZYX0NQVV9GQU1JTFkgPSBzaW1zbw0KK0NQVSA9IFNJTVNQQVJDU09MQVJJUw0KK1RPT0xfRkFNSUxZID0gZ251DQorVE9PTCA9IGdudQ0KK1RPT0xfUEFUSCA9IA0KK0NDX0FSQ0hfU1BFQyA9IA0KK0xJQlBBVEggPSANCitMSUJTID0gDQorDQorSURFX0lOQ0xVREVTID0gLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2ggLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2gvd3JuL2NvcmVpcCANCisNCitJREVfTElCUkFSSUVTID0gDQorZW5kaWYNCisNCisNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzMyZGlhYikNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19DLUNvbXBpbGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19DLUNvbXBpbGVyID0gLVhPIC1Yc2l6ZS1vcHQNCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0NGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEMzMmdudSkNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19DLUNvbXBpbGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19DLUNvbXBpbGVyID0gLU8yIC1mc3RyZW5ndGgtcmVkdWNlIC1mbm8tYnVpbHRpbg0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuYw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpICAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0NGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEMzMnNmZGlhYikNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19DLUNvbXBpbGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19DLUNvbXBpbGVyID0gLVhPIC1Yc2l6ZS1vcHQNCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhzdHN3LXNsb3cgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0NGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEMzMnNmZ251KQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0MtQ29tcGlsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0MtQ29tcGlsZXIgPSAtTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluDQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgIC1XYWxsICAtTUQgLU1QICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzQwM2RpYWIpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQy1Db21waWxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQy1Db21waWxlciA9IC1YTyAtWHNpemUtb3B0DQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNDAzZ251KQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0MtQ29tcGlsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0MtQ29tcGlsZXIgPSAtTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluDQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgIC1XYWxsICAtTUQgLU1QICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzQwNWRpYWIpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQy1Db21waWxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQy1Db21waWxlciA9IC1YTyAtWHNpemUtb3B0DQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNDA1Z251KQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0MtQ29tcGlsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0MtQ29tcGlsZXIgPSAtTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluDQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgIC1XYWxsICAtTUQgLU1QICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzQwNXNmZGlhYikNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19DLUNvbXBpbGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19DLUNvbXBpbGVyID0gLVhPIC1Yc2l6ZS1vcHQNCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0NGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM0MDVzZmdudSkNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19DLUNvbXBpbGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19DLUNvbXBpbGVyID0gLU8yIC1mc3RyZW5ndGgtcmVkdWNlIC1mbm8tYnVpbHRpbg0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuYw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpICAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0NGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM0NDBkaWFiKQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0MtQ29tcGlsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0MtQ29tcGlsZXIgPSAtWE8gLVhzaXplLW9wdA0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuYw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MtQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzQ0MGdudSkNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19DLUNvbXBpbGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19DLUNvbXBpbGVyID0gLU8yIC1mc3RyZW5ndGgtcmVkdWNlIC1mbm8tYnVpbHRpbg0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuYw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpICAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0NGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM0NDBzZmRpYWIpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQy1Db21waWxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQy1Db21waWxlciA9IC1YTyAtWHNpemUtb3B0DQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNDQwc2ZnbnUpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQy1Db21waWxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQy1Db21waWxlciA9IC1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4NCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MtQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNjAzZGlhYikNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19DLUNvbXBpbGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19DLUNvbXBpbGVyID0gLVhPIC1Yc2l6ZS1vcHQNCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0NGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM2MDNnbnUpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQy1Db21waWxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQy1Db21waWxlciA9IC1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4NCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MtQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNjA0ZGlhYikNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19DLUNvbXBpbGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19DLUNvbXBpbGVyID0gLVhPIC1Yc2l6ZS1vcHQNCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0NGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM2MDRnbnUpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQy1Db21waWxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQy1Db21waWxlciA9IC1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4NCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MtQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDODVYWGRpYWIpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQy1Db21waWxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQy1Db21waWxlciA9IC1YTyAtWHNpemUtb3B0DQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDODVYWGdudSkNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19DLUNvbXBpbGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19DLUNvbXBpbGVyID0gLU8yIC1mc3RyZW5ndGgtcmVkdWNlIC1mbm8tYnVpbHRpbg0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuYw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpICAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0NGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM4NVhYc2ZkaWFiKQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0MtQ29tcGlsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0MtQ29tcGlsZXIgPSAtWE8gLVhzaXplLW9wdA0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuYw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MtQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzg1WFhzZmdudSkNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19DLUNvbXBpbGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19DLUNvbXBpbGVyID0gLU8yIC1mc3RyZW5ndGgtcmVkdWNlIC1mbm8tYnVpbHRpbg0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuYw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpICAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0NGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM4NjBzZmRpYWIpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQy1Db21waWxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQy1Db21waWxlciA9IC1YTyAtWHNpemUtb3B0DQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDODYwc2ZnbnUpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQy1Db21waWxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQy1Db21waWxlciA9IC1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4NCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MtQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksU0lNTElOVVhkaWFiKQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0MtQ29tcGlsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0MtQ29tcGlsZXIgPSAtWE8gLVhzaXplLW9wdA0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuYw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MtQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFNJTUxJTlVYZ251KQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0MtQ29tcGlsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0MtQ29tcGlsZXIgPSAtTzIgLW5vc3RkbGliIC1mbm8tYnVpbHRpbiAtZm5vLWRlZmVyLXBvcA0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuYw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BlbnRpdW0gJChERUJVR0ZMQUdTX0MtQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksU0lNTlRkaWFiKQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0MtQ29tcGlsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0MtQ29tcGlsZXIgPSAtWE8gLVhzaXplLW9wdA0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuYw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MtQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFNJTU5UZ251KQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0MtQ29tcGlsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0MtQ29tcGlsZXIgPSAtTzIgLW5vc3RkbGliIC1mbm8tYnVpbHRpbiAtZm5vLWRlZmVyLXBvcA0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuYw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BlbnRpdW0gJChERUJVR0ZMQUdTX0MtQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksU0lNU1BBUkNTT0xBUklTZGlhYikNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19DLUNvbXBpbGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19DLUNvbXBpbGVyID0gLVhPIC1Yc2l6ZS1vcHQNCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0NGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxTSU1TUEFSQ1NPTEFSSVNnbnUpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQy1Db21waWxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQy1Db21waWxlciA9IC1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4NCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NzcGFyYyAkKERFQlVHRkxBR1NfQy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpICAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0NGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEMzMmRpYWIpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQysrLUNvbXBpbGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19DKystQ29tcGlsZXIgPSAtWE8gLVhzaXplLW9wdA0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY3BwDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuQw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmN4eA0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmNjDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzMyZ251KQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0MrKy1Db21waWxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQysrLUNvbXBpbGVyID0gLU8yIC1mc3RyZW5ndGgtcmVkdWNlIC1mbm8tYnVpbHRpbg0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY3BwDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuQw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmN4eA0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmNjDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzMyc2ZkaWFiKQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0MrKy1Db21waWxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQysrLUNvbXBpbGVyID0gLVhPIC1Yc2l6ZS1vcHQNCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmNwcA0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1Yc3Rzdy1zbG93IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLkMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWHN0c3ctc2xvdyAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jeHgNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWHN0c3ctc2xvdyAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jYw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1Yc3Rzdy1zbG93IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEMzMnNmZ251KQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0MrKy1Db21waWxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQysrLUNvbXBpbGVyID0gLU8yIC1mc3RyZW5ndGgtcmVkdWNlIC1mbm8tYnVpbHRpbg0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY3BwDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuQw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmN4eA0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmNjDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzQwM2RpYWIpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQysrLUNvbXBpbGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19DKystQ29tcGlsZXIgPSAtWE8gLVhzaXplLW9wdA0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY3BwDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuQw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmN4eA0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmNjDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzQwM2dudSkNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19DKystQ29tcGlsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0MrKy1Db21waWxlciA9IC1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4NCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmNwcA0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLkMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jeHgNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jYw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM0MDVkaWFiKQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0MrKy1Db21waWxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQysrLUNvbXBpbGVyID0gLVhPIC1Yc2l6ZS1vcHQNCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmNwcA0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLkMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jeHgNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jYw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM0MDVnbnUpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQysrLUNvbXBpbGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19DKystQ29tcGlsZXIgPSAtTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluDQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jcHANCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5DDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY3h4DQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY2MNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNDA1c2ZkaWFiKQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0MrKy1Db21waWxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQysrLUNvbXBpbGVyID0gLVhPIC1Yc2l6ZS1vcHQNCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmNwcA0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLkMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jeHgNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jYw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM0MDVzZmdudSkNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19DKystQ29tcGlsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0MrKy1Db21waWxlciA9IC1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4NCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmNwcA0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLkMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jeHgNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jYw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM0NDBkaWFiKQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0MrKy1Db21waWxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQysrLUNvbXBpbGVyID0gLVhPIC1Yc2l6ZS1vcHQNCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmNwcA0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLkMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jeHgNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jYw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM0NDBnbnUpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQysrLUNvbXBpbGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19DKystQ29tcGlsZXIgPSAtTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluDQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jcHANCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5DDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY3h4DQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY2MNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNDQwc2ZkaWFiKQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0MrKy1Db21waWxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQysrLUNvbXBpbGVyID0gLVhPIC1Yc2l6ZS1vcHQNCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmNwcA0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLkMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jeHgNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jYw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM0NDBzZmdudSkNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19DKystQ29tcGlsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0MrKy1Db21waWxlciA9IC1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4NCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmNwcA0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLkMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jeHgNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jYw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM2MDNkaWFiKQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0MrKy1Db21waWxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQysrLUNvbXBpbGVyID0gLVhPIC1Yc2l6ZS1vcHQNCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmNwcA0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLkMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jeHgNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jYw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM2MDNnbnUpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQysrLUNvbXBpbGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19DKystQ29tcGlsZXIgPSAtTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluDQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jcHANCisJJChUUkFDRV9GTEFHKSAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgLUQnU1ZOX1JFVj0iJChzaGVsbCBzdm52ZXJzaW9uIC1uIC4uKSInICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuQw0KKwkkKFRSQUNFX0ZMQUcpICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAtRCdTVk5fUkVWPSIkKHNoZWxsIHN2bnZlcnNpb24gLW4gLi4pIicgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jeHgNCisJJChUUkFDRV9GTEFHKSAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgLUQnU1ZOX1JFVj0iJChzaGVsbCBzdm52ZXJzaW9uIC1uIC4uKSInICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY2MNCisJJChUUkFDRV9GTEFHKSAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgLUQnU1ZOX1JFVj0iJChzaGVsbCBzdm52ZXJzaW9uIC1uIC4uKSInICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzYwNGRpYWIpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQysrLUNvbXBpbGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19DKystQ29tcGlsZXIgPSAtWE8gLVhzaXplLW9wdA0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY3BwDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuQw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmN4eA0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmNjDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzYwNGdudSkNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19DKystQ29tcGlsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0MrKy1Db21waWxlciA9IC1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4NCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmNwcA0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLkMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jeHgNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jYw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM4NVhYZGlhYikNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19DKystQ29tcGlsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0MrKy1Db21waWxlciA9IC1YTyAtWHNpemUtb3B0DQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jcHANCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5DDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY3h4DQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY2MNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDODVYWGdudSkNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19DKystQ29tcGlsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0MrKy1Db21waWxlciA9IC1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4NCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmNwcA0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLkMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jeHgNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jYw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM4NVhYc2ZkaWFiKQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0MrKy1Db21waWxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQysrLUNvbXBpbGVyID0gLVhPIC1Yc2l6ZS1vcHQNCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmNwcA0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLkMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jeHgNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jYw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM4NVhYc2ZnbnUpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQysrLUNvbXBpbGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19DKystQ29tcGlsZXIgPSAtTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluDQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jcHANCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5DDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY3h4DQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY2MNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDODYwc2ZkaWFiKQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0MrKy1Db21waWxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQysrLUNvbXBpbGVyID0gLVhPIC1Yc2l6ZS1vcHQNCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmNwcA0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLkMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jeHgNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jYw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM4NjBzZmdudSkNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19DKystQ29tcGlsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0MrKy1Db21waWxlciA9IC1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4NCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmNwcA0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLkMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jeHgNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jYw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxTSU1MSU5VWGRpYWIpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQysrLUNvbXBpbGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19DKystQ29tcGlsZXIgPSAtWE8gLVhzaXplLW9wdA0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY3BwDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuQw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmN4eA0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmNjDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFNJTUxJTlVYZ251KQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0MrKy1Db21waWxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQysrLUNvbXBpbGVyID0gLU8yIC1ub3N0ZGxpYiAtZm5vLWJ1aWx0aW4gLWZuby1kZWZlci1wb3ANCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmNwcA0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BlbnRpdW0gJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5DDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcGVudGl1bSAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmN4eA0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BlbnRpdW0gJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jYw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BlbnRpdW0gJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksU0lNTlRkaWFiKQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0MrKy1Db21waWxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQysrLUNvbXBpbGVyID0gLVhPIC1Yc2l6ZS1vcHQNCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmNwcA0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLkMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jeHgNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jYw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxTSU1OVGdudSkNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19DKystQ29tcGlsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0MrKy1Db21waWxlciA9IC1PMiAtbm9zdGRsaWIgLWZuby1idWlsdGluIC1mbm8tZGVmZXItcG9wDQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jcHANCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwZW50aXVtICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuQw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BlbnRpdW0gJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jeHgNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwZW50aXVtICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY2MNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwZW50aXVtICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFNJTVNQQVJDU09MQVJJU2RpYWIpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQysrLUNvbXBpbGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19DKystQ29tcGlsZXIgPSAtWE8gLVhzaXplLW9wdA0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY3BwDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuQw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmN4eA0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmNjDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFNJTVNQQVJDU09MQVJJU2dudSkNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19DKystQ29tcGlsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0MrKy1Db21waWxlciA9IC1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4NCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmNwcA0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3NwYXJjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuQw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3NwYXJjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY3h4DQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjc3BhcmMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jYw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3NwYXJjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzMyZGlhYikNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19Bc3NlbWJsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0Fzc2VtYmxlciA9IC1YTyAtWHNpemUtb3B0DQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5zDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQXNzZW1ibGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhwcmVwcm9jZXNzLWFzc2VtYmx5IC1YY3BwLW5vLXNwYWNlICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDMzJnbnUpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQXNzZW1ibGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19Bc3NlbWJsZXIgPSAtTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluDQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5zDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19Bc3NlbWJsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAgIC14YXNzZW1ibGVyLXdpdGgtY3BwIC1NRCAtTVAgJChBRERFRF9DRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDMzJzZmRpYWIpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQXNzZW1ibGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19Bc3NlbWJsZXIgPSAtWE8gLVhzaXplLW9wdA0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUucw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0Fzc2VtYmxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1Yc3Rzdy1zbG93IC1YcHJlcHJvY2Vzcy1hc3NlbWJseSAtWGNwcC1uby1zcGFjZSAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzMyc2ZnbnUpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQXNzZW1ibGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19Bc3NlbWJsZXIgPSAtTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluDQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5zDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19Bc3NlbWJsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAgIC14YXNzZW1ibGVyLXdpdGgtY3BwIC1NRCAtTVAgJChBRERFRF9DRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNDAzZGlhYikNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19Bc3NlbWJsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0Fzc2VtYmxlciA9IC1YTyAtWHNpemUtb3B0DQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5zDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQXNzZW1ibGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhwcmVwcm9jZXNzLWFzc2VtYmx5IC1YY3BwLW5vLXNwYWNlICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNDAzZ251KQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0Fzc2VtYmxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQXNzZW1ibGVyID0gLU8yIC1mc3RyZW5ndGgtcmVkdWNlIC1mbm8tYnVpbHRpbg0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUucw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQXNzZW1ibGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgICAteGFzc2VtYmxlci13aXRoLWNwcCAtTUQgLU1QICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzQwNWRpYWIpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQXNzZW1ibGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19Bc3NlbWJsZXIgPSAtWE8gLVhzaXplLW9wdA0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUucw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0Fzc2VtYmxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YcHJlcHJvY2Vzcy1hc3NlbWJseSAtWGNwcC1uby1zcGFjZSAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzQwNWdudSkNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19Bc3NlbWJsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0Fzc2VtYmxlciA9IC1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4NCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLnMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0Fzc2VtYmxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpICAgLXhhc3NlbWJsZXItd2l0aC1jcHAgLU1EIC1NUCAkKEFEREVEX0NGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM0MDVzZmRpYWIpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQXNzZW1ibGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19Bc3NlbWJsZXIgPSAtWE8gLVhzaXplLW9wdA0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUucw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0Fzc2VtYmxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YcHJlcHJvY2Vzcy1hc3NlbWJseSAtWGNwcC1uby1zcGFjZSAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzQwNXNmZ251KQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0Fzc2VtYmxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQXNzZW1ibGVyID0gLU8yIC1mc3RyZW5ndGgtcmVkdWNlIC1mbm8tYnVpbHRpbg0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUucw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQXNzZW1ibGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgICAteGFzc2VtYmxlci13aXRoLWNwcCAtTUQgLU1QICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzQ0MGRpYWIpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQXNzZW1ibGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19Bc3NlbWJsZXIgPSAtWE8gLVhzaXplLW9wdA0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUucw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0Fzc2VtYmxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YcHJlcHJvY2Vzcy1hc3NlbWJseSAtWGNwcC1uby1zcGFjZSAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzQ0MGdudSkNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19Bc3NlbWJsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0Fzc2VtYmxlciA9IC1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4NCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLnMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0Fzc2VtYmxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpICAgLXhhc3NlbWJsZXItd2l0aC1jcHAgLU1EIC1NUCAkKEFEREVEX0NGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM0NDBzZmRpYWIpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQXNzZW1ibGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19Bc3NlbWJsZXIgPSAtWE8gLVhzaXplLW9wdA0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUucw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0Fzc2VtYmxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YcHJlcHJvY2Vzcy1hc3NlbWJseSAtWGNwcC1uby1zcGFjZSAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzQ0MHNmZ251KQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0Fzc2VtYmxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQXNzZW1ibGVyID0gLU8yIC1mc3RyZW5ndGgtcmVkdWNlIC1mbm8tYnVpbHRpbg0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUucw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQXNzZW1ibGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgICAteGFzc2VtYmxlci13aXRoLWNwcCAtTUQgLU1QICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzYwM2RpYWIpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQXNzZW1ibGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19Bc3NlbWJsZXIgPSAtWE8gLVhzaXplLW9wdA0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUucw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0Fzc2VtYmxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YcHJlcHJvY2Vzcy1hc3NlbWJseSAtWGNwcC1uby1zcGFjZSAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzYwM2dudSkNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19Bc3NlbWJsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0Fzc2VtYmxlciA9IC1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4NCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLnMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0Fzc2VtYmxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpICAgLXhhc3NlbWJsZXItd2l0aC1jcHAgLU1EIC1NUCAkKEFEREVEX0NGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM2MDRkaWFiKQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0Fzc2VtYmxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQXNzZW1ibGVyID0gLVhPIC1Yc2l6ZS1vcHQNCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLnMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19Bc3NlbWJsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWHByZXByb2Nlc3MtYXNzZW1ibHkgLVhjcHAtbm8tc3BhY2UgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0NGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM2MDRnbnUpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQXNzZW1ibGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19Bc3NlbWJsZXIgPSAtTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluDQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5zDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19Bc3NlbWJsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAgIC14YXNzZW1ibGVyLXdpdGgtY3BwIC1NRCAtTVAgJChBRERFRF9DRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDODVYWGRpYWIpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQXNzZW1ibGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19Bc3NlbWJsZXIgPSAtWE8gLVhzaXplLW9wdA0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUucw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0Fzc2VtYmxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YcHJlcHJvY2Vzcy1hc3NlbWJseSAtWGNwcC1uby1zcGFjZSAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzg1WFhnbnUpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQXNzZW1ibGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19Bc3NlbWJsZXIgPSAtTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluDQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5zDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19Bc3NlbWJsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAgIC14YXNzZW1ibGVyLXdpdGgtY3BwIC1NRCAtTVAgJChBRERFRF9DRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDODVYWHNmZGlhYikNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19Bc3NlbWJsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0Fzc2VtYmxlciA9IC1YTyAtWHNpemUtb3B0DQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5zDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQXNzZW1ibGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhwcmVwcm9jZXNzLWFzc2VtYmx5IC1YY3BwLW5vLXNwYWNlICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDODVYWHNmZ251KQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0Fzc2VtYmxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQXNzZW1ibGVyID0gLU8yIC1mc3RyZW5ndGgtcmVkdWNlIC1mbm8tYnVpbHRpbg0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUucw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQXNzZW1ibGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgICAteGFzc2VtYmxlci13aXRoLWNwcCAtTUQgLU1QICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzg2MHNmZGlhYikNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19Bc3NlbWJsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0Fzc2VtYmxlciA9IC1YTyAtWHNpemUtb3B0DQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5zDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQXNzZW1ibGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhwcmVwcm9jZXNzLWFzc2VtYmx5IC1YY3BwLW5vLXNwYWNlICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDODYwc2ZnbnUpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQXNzZW1ibGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19Bc3NlbWJsZXIgPSAtTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluDQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5zDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19Bc3NlbWJsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAgIC14YXNzZW1ibGVyLXdpdGgtY3BwIC1NRCAtTVAgJChBRERFRF9DRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksU0lNTElOVVhkaWFiKQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0Fzc2VtYmxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQXNzZW1ibGVyID0gLVhPIC1Yc2l6ZS1vcHQNCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLnMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19Bc3NlbWJsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWHByZXByb2Nlc3MtYXNzZW1ibHkgLVhjcHAtbm8tc3BhY2UgLVdhLC1YbW5lbS1taXQgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFNJTUxJTlVYZ251KQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0Fzc2VtYmxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQXNzZW1ibGVyID0gLU8yIC1ub3N0ZGxpYiAtZm5vLWJ1aWx0aW4gLWZuby1kZWZlci1wb3ANCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLnMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwZW50aXVtICQoREVCVUdGTEFHU19Bc3NlbWJsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAgIC14YXNzZW1ibGVyLXdpdGgtY3BwIC1NRCAtTVAgJChBRERFRF9DRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksU0lNTlRkaWFiKQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0Fzc2VtYmxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQXNzZW1ibGVyID0gLVhPIC1Yc2l6ZS1vcHQNCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLnMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19Bc3NlbWJsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWHByZXByb2Nlc3MtYXNzZW1ibHkgLVhjcHAtbm8tc3BhY2UgLVdhLC1YbW5lbS1taXQgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFNJTU5UZ251KQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0Fzc2VtYmxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQXNzZW1ibGVyID0gLU8yIC1ub3N0ZGxpYiAtZm5vLWJ1aWx0aW4gLWZuby1kZWZlci1wb3ANCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLnMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwZW50aXVtICQoREVCVUdGTEFHU19Bc3NlbWJsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAgIC14YXNzZW1ibGVyLXdpdGgtY3BwIC1NRCAtTVAgJChBRERFRF9DRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksU0lNU1BBUkNTT0xBUklTZGlhYikNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19Bc3NlbWJsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0Fzc2VtYmxlciA9IC1YTyAtWHNpemUtb3B0DQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5zDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQXNzZW1ibGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhwcmVwcm9jZXNzLWFzc2VtYmx5IC1YY3BwLW5vLXNwYWNlICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksU0lNU1BBUkNTT0xBUklTZ251KQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0Fzc2VtYmxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQXNzZW1ibGVyID0gLU8yIC1mc3RyZW5ndGgtcmVkdWNlIC1mbm8tYnVpbHRpbg0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUucw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3NwYXJjICQoREVCVUdGTEFHU19Bc3NlbWJsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAgIC14YXNzZW1ibGVyLXdpdGgtY3BwIC1NRCAtTVAgJChBRERFRF9DRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KKw0KKw0KKw0KKw0KKw0KKy1pbmNsdWRlICQoUFJKX1JPT1RfRElSKS8qLm1ha2VmaWxlDQorDQorLWluY2x1ZGUgKi5tYWtlZmlsZQ0KKw0KK21haW5fYWxsIDogZXh0ZXJuYWxfYnVpbGQgJChQUk9KRUNUX1RBUkdFVFMpDQorCUBlY2hvICJtYWtlOiBidWlsdCB0YXJnZXRzIG9mIGBwd2RgIg0KKw0KKyMgZW50cnkgcG9pbnQgZm9yIGV4dGVuZGluZyB0aGUgYnVpbGQNCitleHRlcm5hbF9idWlsZCA6Og0KKwlAZWNobyAiIg0KKw0KKyMgbWFpbiBlbnRyeSBwb2ludCBmb3IgcHJlIHByb2Nlc3NpbmcgcHJpb3IgdG8gdGhlIGJ1aWxkDQorcHJlX2J1aWxkIDo6ICQoUFJFX0JVSUxEX1NURVApIGdlbmVyYXRlX3NvdXJjZXMNCisJQGVjaG8gIiINCisNCisjIGVudHJ5IHBvaW50IGZvciBnZW5lcmF0aW5nIHNvdXJjZXMgcHJpb3IgdG8gdGhlIGJ1aWxkDQorZ2VuZXJhdGVfc291cmNlcyA6Og0KKwlAZWNobyAiIg0KKw0KKyMgbWFpbiBlbnRyeSBwb2ludCBmb3IgcG9zdCBwcm9jZXNzaW5nIGFmdGVyIHRoZSBidWlsZA0KK3Bvc3RfYnVpbGQgOjogJChQT1NUX0JVSUxEX1NURVApIGRlcGxveV9vdXRwdXQNCisJQGVjaG8gIiINCisNCisjIGVudHJ5IHBvaW50IGZvciBkZXBsb3lpbmcgb3V0cHV0IGFmdGVyIHRoZSBidWlsZA0KK2RlcGxveV9vdXRwdXQgOjoNCisJQGVjaG8gIiINCisNCitjbGVhbiA6OiBleHRlcm5hbF9jbGVhbiAkKENMRUFOX1NURVApIF9jbGVhbg0KKw0KKyMgZW50cnkgcG9pbnQgZm9yIGV4dGVuZGluZyB0aGUgYnVpbGQgY2xlYW4NCitleHRlcm5hbF9jbGVhbiA6Og0KKwlAZWNobyAiIg0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL05ldHdvcmtDb21tdW5pY2F0aW9uL1VzYWdlUmVwb3J0aW5nLmggYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9OZXR3b3JrQ29tbXVuaWNhdGlvbi9Vc2FnZVJlcG9ydGluZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0ZjUxZTkKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9OZXR3b3JrQ29tbXVuaWNhdGlvbi9Vc2FnZVJlcG9ydGluZy5oCkBAIC0wLDAgKzEsMTM1IEBACisNCisjaWZuZGVmIF9fVXNhZ2VSZXBvcnRpbmdfaF9fDQorI2RlZmluZSBfX1VzYWdlUmVwb3J0aW5nX2hfXw0KKw0KKyNpZmRlZiBTSU1VTEFUSU9ODQorI2luY2x1ZGUgPHZ4V29ya3NfY29tcGF0Lmg+DQorI2RlZmluZSBFWFBPUlRfRlVOQyBfX2RlY2xzcGVjKGRsbGV4cG9ydCkgX19jZGVjbA0KKyNlbHNlDQorI2luY2x1ZGUgPHZ4V29ya3MuaD4NCisjZGVmaW5lIEVYUE9SVF9GVU5DDQorI2VuZGlmDQorDQorI2RlZmluZSBrVXNhZ2VSZXBvcnRpbmdfdmVyc2lvbiAxDQorDQorbmFtZXNwYWNlIG5Vc2FnZVJlcG9ydGluZw0KK3sNCisgICAgdHlwZWRlZiBlbnVtDQorICAgIHsNCisgICAgICAgIGtSZXNvdXJjZVR5cGVfQ29udHJvbGxlciwNCisgICAgICAgIGtSZXNvdXJjZVR5cGVfTW9kdWxlLA0KKyAgICAgICAga1Jlc291cmNlVHlwZV9MYW5ndWFnZSwNCisgICAgICAgIGtSZXNvdXJjZVR5cGVfQ0FOUGx1Z2luLA0KKyAgICAgICAga1Jlc291cmNlVHlwZV9BY2NlbGVyb21ldGVyLA0KKyAgICAgICAga1Jlc291cmNlVHlwZV9BRFhMMzQ1LA0KKyAgICAgICAga1Jlc291cmNlVHlwZV9BbmFsb2dDaGFubmVsLA0KKyAgICAgICAga1Jlc291cmNlVHlwZV9BbmFsb2dUcmlnZ2VyLA0KKyAgICAgICAga1Jlc291cmNlVHlwZV9BbmFsb2dUcmlnZ2VyT3V0cHV0LA0KKyAgICAgICAga1Jlc291cmNlVHlwZV9DQU5KYWd1YXIsDQorICAgICAgICBrUmVzb3VyY2VUeXBlX0NvbXByZXNzb3IsDQorICAgICAgICBrUmVzb3VyY2VUeXBlX0NvdW50ZXIsDQorICAgICAgICBrUmVzb3VyY2VUeXBlX0Rhc2hib2FyZCwNCisgICAgICAgIGtSZXNvdXJjZVR5cGVfRGlnaXRhbElucHV0LA0KKyAgICAgICAga1Jlc291cmNlVHlwZV9EaWdpdGFsT3V0cHV0LA0KKyAgICAgICAga1Jlc291cmNlVHlwZV9Ecml2ZXJTdGF0aW9uQ0lPLA0KKyAgICAgICAga1Jlc291cmNlVHlwZV9Ecml2ZXJTdGF0aW9uRUlPLA0KKyAgICAgICAga1Jlc291cmNlVHlwZV9Ecml2ZXJTdGF0aW9uTENELA0KKyAgICAgICAga1Jlc291cmNlVHlwZV9FbmNvZGVyLA0KKyAgICAgICAga1Jlc291cmNlVHlwZV9HZWFyVG9vdGgsDQorICAgICAgICBrUmVzb3VyY2VUeXBlX0d5cm8sDQorICAgICAgICBrUmVzb3VyY2VUeXBlX0kyQywNCisgICAgICAgIGtSZXNvdXJjZVR5cGVfRnJhbWV3b3JrLA0KKyAgICAgICAga1Jlc291cmNlVHlwZV9KYWd1YXIsDQorICAgICAgICBrUmVzb3VyY2VUeXBlX0pveXN0aWNrLA0KKyAgICAgICAga1Jlc291cmNlVHlwZV9LaW5lY3QsDQorICAgICAgICBrUmVzb3VyY2VUeXBlX0tpbmVjdFN0aWNrLA0KKyAgICAgICAga1Jlc291cmNlVHlwZV9QSURDb250cm9sbGVyLA0KKyAgICAgICAga1Jlc291cmNlVHlwZV9QcmVmZXJlbmNlcywNCisgICAgICAgIGtSZXNvdXJjZVR5cGVfUFdNLA0KKyAgICAgICAga1Jlc291cmNlVHlwZV9SZWxheSwNCisgICAgICAgIGtSZXNvdXJjZVR5cGVfUm9ib3REcml2ZSwNCisgICAgICAgIGtSZXNvdXJjZVR5cGVfU2VyaWFsUG9ydCwNCisgICAgICAgIGtSZXNvdXJjZVR5cGVfU2Vydm8sDQorICAgICAgICBrUmVzb3VyY2VUeXBlX1NvbGVub2lkLA0KKyAgICAgICAga1Jlc291cmNlVHlwZV9TUEksDQorICAgICAgICBrUmVzb3VyY2VUeXBlX1Rhc2ssDQorICAgICAgICBrUmVzb3VyY2VUeXBlX1VsdHJhc29uaWMsDQorICAgICAgICBrUmVzb3VyY2VUeXBlX1ZpY3RvciwNCisgICAgICAgIGtSZXNvdXJjZVR5cGVfQnV0dG9uLA0KKyAgICAgICAga1Jlc291cmNlVHlwZV9Db21tYW5kLA0KKyAgICAgICAga1Jlc291cmNlVHlwZV9BeGlzQ2FtZXJhLA0KKyAgICAgICAga1Jlc291cmNlVHlwZV9QQ1ZpZGVvU2VydmVyLA0KKyAgICAgICAga1Jlc291cmNlVHlwZV9TbWFydERhc2hib2FyZCwNCisgICAgICAgIGtSZXNvdXJjZVR5cGVfVGFsb24sDQorICAgICAgICBrUmVzb3VyY2VUeXBlX0hpVGVjaG5pY0NvbG9yU2Vuc29yLA0KKyAgICAgICAga1Jlc291cmNlVHlwZV9IaVRlY2huaWNBY2NlbCwNCisgICAgICAgIGtSZXNvdXJjZVR5cGVfSGlUZWNobmljQ29tcGFzcywNCisgICAgICAgIGtSZXNvdXJjZVR5cGVfU1JGMDgsDQorICAgIH0gdFJlc291cmNlVHlwZTsNCisNCisgICAgdHlwZWRlZiBlbnVtDQorICAgIHsNCisgICAgICAgIGtMYW5ndWFnZV9MYWJWSUVXID0gMSwNCisgICAgICAgIGtMYW5ndWFnZV9DUGx1c1BsdXMgPSAyLA0KKyAgICAgICAga0xhbmd1YWdlX0phdmEgPSAzLA0KKyAgICAgICAga0xhbmd1YWdlX1B5dGhvbiA9IDQsDQorDQorICAgICAgICBrQ0FOUGx1Z2luX0JsYWNrSmFnQnJpZGdlID0gMSwNCisgICAgICAgIGtDQU5QbHVnaW5fMkNBTiA9IDIsDQorDQorICAgICAgICBrRnJhbWV3b3JrX0l0ZXJhdGl2ZSA9IDEsDQorICAgICAgICBrRnJhbWV3b3JrX1NpbXBsZSA9IDIsDQorDQorICAgICAgICBrUm9ib3REcml2ZV9BcmNhZGVTdGFuZGFyZCA9IDEsDQorICAgICAgICBrUm9ib3REcml2ZV9BcmNhZGVCdXR0b25TcGluID0gMiwNCisgICAgICAgIGtSb2JvdERyaXZlX0FyY2FkZVJhdGlvQ3VydmUgPSAzLA0KKyAgICAgICAga1JvYm90RHJpdmVfVGFuayA9IDQsDQorICAgICAgICBrUm9ib3REcml2ZV9NZWNhbnVtUG9sYXIgPSA1LA0KKyAgICAgICAga1JvYm90RHJpdmVfTWVjYW51bUNhcnRlc2lhbiA9IDYsDQorDQorICAgICAgICBrRHJpdmVyU3RhdGlvbkNJT19BbmFsb2cgPSAxLA0KKyAgICAgICAga0RyaXZlclN0YXRpb25DSU9fRGlnaXRhbEluID0gMiwNCisgICAgICAgIGtEcml2ZXJTdGF0aW9uQ0lPX0RpZ2l0YWxPdXQgPSAzLA0KKw0KKyAgICAgICAga0RyaXZlclN0YXRpb25FSU9fQWNjZWxlcmF0aW9uID0gMSwNCisgICAgICAgIGtEcml2ZXJTdGF0aW9uRUlPX0FuYWxvZ0luID0gMiwNCisgICAgICAgIGtEcml2ZXJTdGF0aW9uRUlPX0FuYWxvZ091dCA9IDMsDQorICAgICAgICBrRHJpdmVyU3RhdGlvbkVJT19CdXR0b24gPSA0LA0KKyAgICAgICAga0RyaXZlclN0YXRpb25FSU9fTEVEID0gNSwNCisgICAgICAgIGtEcml2ZXJTdGF0aW9uRUlPX0RpZ2l0YWxJbiA9IDYsDQorICAgICAgICBrRHJpdmVyU3RhdGlvbkVJT19EaWdpdGFsT3V0ID0gNywNCisgICAgICAgIGtEcml2ZXJTdGF0aW9uRUlPX0ZpeGVkRGlnaXRhbE91dCA9IDgsDQorICAgICAgICBrRHJpdmVyU3RhdGlvbkVJT19QV00gPSA5LA0KKyAgICAgICAga0RyaXZlclN0YXRpb25FSU9fRW5jb2RlciA9IDEwLA0KKyAgICAgICAga0RyaXZlclN0YXRpb25FSU9fVG91Y2hTbGlkZXIgPSAxMSwNCisNCisgICAgICAgIGtBRFhMMzQ1X1NQSSA9IDEsDQorICAgICAgICBrQURYTDM0NV9JMkMgPSAyLA0KKw0KKyAgICAgICAga0NvbW1hbmRfU2NoZWR1bGVyID0gMSwNCisNCisgICAgICAgIGtTbWFydERhc2hib2FyZF9JbnN0YW5jZSA9IDEsDQorICAgIH0gdEluc3RhbmNlczsNCisNCisgICAgLyoqDQorICAgICAqIFJlcG9ydCB0aGUgdXNhZ2Ugb2YgYSByZXNvdXJjZSBvZiBpbnRlcmVzdC4NCisgICAgICogDQorICAgICAqIEBwYXJhbSByZXNvdXJjZSBvbmUgb2YgdGhlIHZhbHVlcyBpbiB0aGUgdFJlc291cmNlVHlwZSBhYm92ZSAobWF4IHZhbHVlIDUxKS4NCisgICAgICogQHBhcmFtIGluc3RhbmNlTnVtYmVyIGFuIGluZGV4IHRoYXQgaWRlbnRpZmllcyB0aGUgcmVzb3VyY2UgaW5zdGFuY2UuDQorICAgICAqIEBwYXJhbSBjb250ZXh0IGFuIG9wdGlvbmFsIGFkZGl0aW9uYWwgY29udGV4dCBudW1iZXIgZm9yIHNvbWUgY2FzZXMgKHN1Y2ggYXMgbW9kdWxlIG51bWJlcikuICBTZXQgdG8gMCB0byBvbWl0Lg0KKyAgICAgKiBAcGFyYW0gZmVhdHVyZSBhIHN0cmluZyB0byBiZSBpbmNsdWRlZCBkZXNjcmliaW5nIGZlYXR1cmVzIGluIHVzZSBvbiBhIHNwZWNpZmljIHJlc291cmNlLiAgU2V0dGluZyB0aGUgc2FtZSByZXNvdXJjZSBtb3JlIHRoYW4gb25jZSBhbGxvd3MgeW91IHRvIGNoYW5nZSB0aGUgZmVhdHVyZSBzdHJpbmcuDQorICAgICAqLw0KKyAgICBVSU5UMzIgRVhQT1JUX0ZVTkMgcmVwb3J0KHRSZXNvdXJjZVR5cGUgcmVzb3VyY2UsIFVJTlQ4IGluc3RhbmNlTnVtYmVyLCBVSU5UOCBjb250ZXh0ID0gMCwgY29uc3QgY2hhciAqZmVhdHVyZSA9IE5VTEwpOw0KK30NCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCitleHRlcm4gIkMiIHsNCisjZW5kaWYNCisNCisgICAgVUlOVDMyIEVYUE9SVF9GVU5DIEZSQ19OZXR3b3JrQ29tbXVuaWNhdGlvbl9uVXNhZ2VSZXBvcnRpbmdfcmVwb3J0KFVJTlQ4IHJlc291cmNlLCBVSU5UOCBpbnN0YW5jZU51bWJlciwgVUlOVDggY29udGV4dCwgY29uc3QgY2hhciAqZmVhdHVyZSk7DQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorfQ0KKyNlbmRpZg0KKw0KKyNlbmRpZiAvLyBfX1VzYWdlUmVwb3J0aW5nX2hfXw0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL05ldHdvcmtDb21tdW5pY2F0aW9uL3N5bU1vZHVsZUxpbmsuaCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL05ldHdvcmtDb21tdW5pY2F0aW9uL3N5bU1vZHVsZUxpbmsuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYWE2MjIyCi0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvTmV0d29ya0NvbW11bmljYXRpb24vc3ltTW9kdWxlTGluay5oCkBAIC0wLDAgKzEsMjEgQEAKKyNpZm5kZWYgX19TWU1fTU9EVUxFX0xJTktfSF9fDQorI2RlZmluZSBfX1NZTV9NT0RVTEVfTElOS19IX18NCisNCisjaW5jbHVkZSA8dnhXb3Jrcy5oPg0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK2V4dGVybiAiQyIgew0KKyNlbmRpZg0KKw0KK2V4dGVybiBTVEFUVVMgICAgbW9kdWxlTmFtZUZpbmRCeVN5bWJvbE5hbWUNCisgICAgKA0KKyAgICAgICAgY29uc3QgY2hhciAqICAgIHN5bWJvbCwgICAgICAgIC8qIHN5bWJvbCBuYW1lIHRvIGxvb2sgZm9yICovDQorICAgICAgICBjaGFyICogbW9kdWxlICAgICAgICAvKiB3aGVyZSB0byByZXR1cm4gbW9kdWxlIG5hbWUgKi8NCisgICAgKTsNCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCit9DQorI2VuZGlmDQorDQorI2VuZGlmDQorDQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvTm90aWZpZXIuY3BwIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvTm90aWZpZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwNDlmNWYKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9Ob3RpZmllci5jcHAKQEAgLTAsMCArMSwyNzMgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorLyogQ29weXJpZ2h0IChjKSBGSVJTVCAyMDA4LiBBbGwgUmlnaHRzIFJlc2VydmVkLgkJCQkJCQkgICovDQorLyogT3BlbiBTb3VyY2UgU29mdHdhcmUgLSBtYXkgYmUgbW9kaWZpZWQgYW5kIHNoYXJlZCBieSBGUkMgdGVhbXMuIFRoZSBjb2RlICAgKi8NCisvKiBtdXN0IGJlIGFjY29tcGFuaWVkIGJ5IHRoZSBGSVJTVCBCU0QgbGljZW5zZSBmaWxlIGluICQoV0lORF9CQVNFKS9XUElMaWIuICAqLw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorI2luY2x1ZGUgIk5vdGlmaWVyLmgiDQorI2luY2x1ZGUgIlRpbWVyLmgiDQorI2luY2x1ZGUgIlV0aWxpdHkuaCINCisjaW5jbHVkZSAiV1BJRXJyb3JzLmgiDQorDQorY29uc3QgVUlOVDMyIE5vdGlmaWVyOjprVGltZXJJbnRlcnJ1cHROdW1iZXI7DQorTm90aWZpZXIgKk5vdGlmaWVyOjp0aW1lclF1ZXVlSGVhZCA9IE5VTEw7DQorUmVlbnRyYW50U2VtYXBob3JlIE5vdGlmaWVyOjpxdWV1ZVNlbWFwaG9yZTsNCit0QWxhcm0gKk5vdGlmaWVyOjp0YWxhcm0gPSBOVUxMOw0KK3RJbnRlcnJ1cHRNYW5hZ2VyICpOb3RpZmllcjo6bWFuYWdlciA9IE5VTEw7DQoraW50IE5vdGlmaWVyOjpyZWZjb3VudCA9IDA7DQorDQorLyoqDQorICogQ3JlYXRlIGEgTm90aWZpZXIgZm9yIHRpbWVyIGV2ZW50IG5vdGlmaWNhdGlvbi4NCisgKiBAcGFyYW0gaGFuZGxlciBUaGUgaGFuZGxlciBpcyBjYWxsZWQgYXQgdGhlIG5vdGlmaWNhdGlvbiB0aW1lIHdoaWNoIGlzIHNldA0KKyAqIHVzaW5nIFN0YXJ0U2luZ2xlIG9yIFN0YXJ0UGVyaW9kaWMuDQorICovDQorTm90aWZpZXI6Ok5vdGlmaWVyKFRpbWVyRXZlbnRIYW5kbGVyIGhhbmRsZXIsIHZvaWQgKnBhcmFtKQ0KK3sNCisJaWYgKGhhbmRsZXIgPT0gTlVMTCkNCisJCXdwaV9zZXRXUElFcnJvcldpdGhDb250ZXh0KE51bGxQYXJhbWV0ZXIsICJoYW5kbGVyIG11c3Qgbm90IGJlIE5VTEwiKTsNCisJbV9oYW5kbGVyID0gaGFuZGxlcjsNCisJbV9wYXJhbSA9IHBhcmFtOw0KKwltX3BlcmlvZGljID0gZmFsc2U7DQorCW1fZXhwaXJhdGlvblRpbWUgPSAwOw0KKwltX3BlcmlvZCA9IDA7DQorCW1fbmV4dEV2ZW50ID0gTlVMTDsNCisJbV9xdWV1ZWQgPSBmYWxzZTsNCisJbV9oYW5kbGVyU2VtYXBob3JlID0gc2VtQkNyZWF0ZShTRU1fUV9QUklPUklUWSwgU0VNX0ZVTEwpOw0KKwl0UmlvU3RhdHVzQ29kZSBsb2NhbFN0YXR1cyA9IE5pRnBnYV9TdGF0dXNfU3VjY2VzczsNCisJew0KKwkJU3luY2hyb25pemVkIHN5bmMocXVldWVTZW1hcGhvcmUpOw0KKwkJLy8gZG8gdGhlIGZpcnN0IHRpbWUgaW50aWFsaXphdGlvbiBvZiBzdGF0aWMgdmFyaWFibGVzDQorCQlpZiAocmVmY291bnQgPT0gMCkNCisJCXsNCisJCQltYW5hZ2VyID0gbmV3IHRJbnRlcnJ1cHRNYW5hZ2VyKDEgPDwga1RpbWVySW50ZXJydXB0TnVtYmVyLCBmYWxzZSwgJmxvY2FsU3RhdHVzKTsNCisJCQltYW5hZ2VyLT5yZWdpc3RlckhhbmRsZXIoUHJvY2Vzc1F1ZXVlLCBOVUxMLCAmbG9jYWxTdGF0dXMpOw0KKwkJCW1hbmFnZXItPmVuYWJsZSgmbG9jYWxTdGF0dXMpOw0KKwkJCXRhbGFybSA9IHRBbGFybTo6Y3JlYXRlKCZsb2NhbFN0YXR1cyk7DQorCQl9DQorCQlyZWZjb3VudCsrOw0KKwl9DQorCXdwaV9zZXRFcnJvcihsb2NhbFN0YXR1cyk7DQorfQ0KKw0KKy8qKg0KKyAqIEZyZWUgdGhlIHJlc291cmNlcyBmb3IgYSB0aW1lciBldmVudC4NCisgKiBBbGwgcmVzb3VyY2VzIHdpbGwgYmUgZnJlZWQgYW5kIHRoZSB0aW1lciBldmVudCB3aWxsIGJlIHJlbW92ZWQgZnJvbSB0aGUNCisgKiBxdWV1ZSBpZiBuZWNlc3NhcnkuDQorICovDQorTm90aWZpZXI6On5Ob3RpZmllcigpDQorew0KKwl0UmlvU3RhdHVzQ29kZSBsb2NhbFN0YXR1cyA9IE5pRnBnYV9TdGF0dXNfU3VjY2VzczsNCisJew0KKwkJU3luY2hyb25pemVkIHN5bmMocXVldWVTZW1hcGhvcmUpOw0KKwkJRGVsZXRlRnJvbVF1ZXVlKCk7DQorDQorCQkvLyBEZWxldGUgdGhlIHN0YXRpYyB2YXJpYWJsZXMgd2hlbiB0aGUgbGFzdCBvbmUgaXMgZ29pbmcgYXdheQ0KKwkJaWYgKCEoLS1yZWZjb3VudCkpDQorCQl7DQorCQkJdGFsYXJtLT53cml0ZUVuYWJsZShmYWxzZSwgJmxvY2FsU3RhdHVzKTsNCisJCQlkZWxldGUgdGFsYXJtOw0KKwkJCXRhbGFybSA9IE5VTEw7DQorCQkJbWFuYWdlci0+ZGlzYWJsZSgmbG9jYWxTdGF0dXMpOw0KKwkJCWRlbGV0ZSBtYW5hZ2VyOw0KKwkJCW1hbmFnZXIgPSBOVUxMOw0KKwkJfQ0KKwl9DQorCXdwaV9zZXRFcnJvcihsb2NhbFN0YXR1cyk7DQorDQorCS8vIEFjcXVpcmUgdGhlIHNlbWFwaG9yZTsgdGhpcyBtYWtlcyBjZXJ0YWluIHRoYXQgdGhlIGhhbmRsZXIgaXMgDQorCS8vIG5vdCBiZWluZyBleGVjdXRlZCBieSB0aGUgaW50ZXJydXB0IG1hbmFnZXIuDQorCXNlbVRha2UobV9oYW5kbGVyU2VtYXBob3JlLCBXQUlUX0ZPUkVWRVIpOw0KKwkvLyBEZWxldGUgd2hpbGUgaG9sZGluZyB0aGUgc2VtYXBob3JlIHNvIHRoZXJlIGNhbiBiZSBubyByYWNlLg0KKwlzZW1EZWxldGUobV9oYW5kbGVyU2VtYXBob3JlKTsNCit9DQorDQorLyoqDQorICogVXBkYXRlIHRoZSBhbGFybSBoYXJkd2FyZSB0byByZWZsZWN0IHRoZSBjdXJyZW50IGZpcnN0IGVsZW1lbnQgaW4gdGhlIHF1ZXVlLg0KKyAqIENvbXB1dGUgdGhlIHRpbWUgdGhlIG5leHQgYWxhcm0gc2hvdWxkIG9jY3VyIGJhc2VkIG9uIHRoZSBjdXJyZW50IHRpbWUgYW5kIHRoZQ0KKyAqIHBlcmlvZCBmb3IgdGhlIGZpcnN0IGVsZW1lbnQgaW4gdGhlIHRpbWVyIHF1ZXVlLg0KKyAqIFdBUk5JTkc6IHRoaXMgbWV0aG9kIGRvZXMgbm90IGRvIHN5bmNocm9uaXphdGlvbiEgSXQgbXVzdCBiZSBjYWxsZWQgZnJvbSBzb21ld2hlcmUNCisgKiB0aGF0IGlzIHRha2luZyBjYXJlIG9mIHN5bmNocm9uaXppbmcgYWNjZXNzIHRvIHRoZSBxdWV1ZS4NCisgKi8NCit2b2lkIE5vdGlmaWVyOjpVcGRhdGVBbGFybSgpDQorew0KKwlpZiAodGltZXJRdWV1ZUhlYWQgIT0gTlVMTCkNCisJew0KKwkJdFJpb1N0YXR1c0NvZGUgbG9jYWxTdGF0dXMgPSBOaUZwZ2FfU3RhdHVzX1N1Y2Nlc3M7DQorCQkvLyB3cml0ZSB0aGUgZmlyc3QgaXRlbSBpbiB0aGUgcXVldWUgaW50byB0aGUgdHJpZ2dlciB0aW1lDQorCQl0YWxhcm0tPndyaXRlVHJpZ2dlclRpbWUoKFVJTlQzMikodGltZXJRdWV1ZUhlYWQtPm1fZXhwaXJhdGlvblRpbWUgKiAxZTYpLCAmbG9jYWxTdGF0dXMpOw0KKwkJLy8gRW5hYmxlIHRoZSBhbGFybS4gIFRoZSBoYXJkd2FyZSBkaXNhYmxlcyBpdHNlbGYgYWZ0ZXIgZWFjaCBhbGFybS4NCisJCXRhbGFybS0+d3JpdGVFbmFibGUodHJ1ZSwgJmxvY2FsU3RhdHVzKTsNCisJCXdwaV9zZXRTdGF0aWNFcnJvcih0aW1lclF1ZXVlSGVhZCwgbG9jYWxTdGF0dXMpOw0KKwl9DQorfQ0KKw0KKy8qKg0KKyAqIFByb2Nlc3NRdWV1ZSBpcyBjYWxsZWQgd2hlbmV2ZXIgdGhlcmUgaXMgYSB0aW1lciBpbnRlcnJ1cHQuDQorICogV2UgbmVlZCB0byB3YWtlIHVwIGFuZCBwcm9jZXNzIHRoZSBjdXJyZW50IHRvcCBpdGVtIGluIHRoZSB0aW1lciBxdWV1ZSBhcyBsb25nDQorICogYXMgaXRzIHNjaGVkdWxlZCB0aW1lIGlzIGFmdGVyIHRoZSBjdXJyZW50IHRpbWUuIFRoZW4gdGhlIGl0ZW0gaXMgcmVtb3ZlZCBvciANCisgKiByZXNjaGVkdWxlZCAocmVwZXRpdGl2ZSBldmVudHMpIGluIHRoZSBxdWV1ZS4NCisgKi8NCit2b2lkIE5vdGlmaWVyOjpQcm9jZXNzUXVldWUodWludDMyX3QgbWFzaywgdm9pZCAqcGFyYW1zKQ0KK3sNCisJTm90aWZpZXIgKmN1cnJlbnQ7DQorCXdoaWxlICh0cnVlKQkJCQkvLyBrZWVwIHByb2Nlc3NpbmcgcGFzdCBldmVudHMgdW50aWwgbm8gbW9yZQ0KKwl7DQorCQl7DQorCQkJU3luY2hyb25pemVkIHN5bmMocXVldWVTZW1hcGhvcmUpOw0KKwkJCWRvdWJsZSBjdXJyZW50VGltZSA9IEdldENsb2NrKCk7DQorCQkJY3VycmVudCA9IHRpbWVyUXVldWVIZWFkOw0KKwkJCWlmIChjdXJyZW50ID09IE5VTEwgfHwgY3VycmVudC0+bV9leHBpcmF0aW9uVGltZSA+IGN1cnJlbnRUaW1lKQ0KKwkJCXsNCisJCQkJYnJlYWs7CQkvLyBubyBtb3JlIHRpbWVyIGV2ZW50cyB0byBwcm9jZXNzDQorCQkJfQ0KKwkJCS8vIG5lZWQgdG8gcHJvY2VzcyB0aGlzIGVudHJ5DQorCQkJdGltZXJRdWV1ZUhlYWQgPSBjdXJyZW50LT5tX25leHRFdmVudDsNCisJCQlpZiAoY3VycmVudC0+bV9wZXJpb2RpYykNCisJCQl7DQorCQkJCS8vIGlmIHBlcmlvZGljLCByZXF1ZXVlIHRoZSBldmVudA0KKwkJCQkvLyBjb21wdXRlIHdoZW4gdG8gcHV0IGludG8gcXVldWUNCisJCQkJY3VycmVudC0+SW5zZXJ0SW5RdWV1ZSh0cnVlKTsNCisJCQl9DQorCQkJZWxzZQ0KKwkJCXsNCisJCQkJLy8gbm90IHBlcmlvZGljOyByZW1vdmVkIGZyb20gcXVldWUNCisJCQkJY3VycmVudC0+bV9xdWV1ZWQgPSBmYWxzZTsNCisJCQl9DQorCQkJLy8gVGFrZSBoYW5kbGVyIHNlbWFwaG9yZSB3aGlsZSBob2xkaW5nIHF1ZXVlIHNlbWFwaG9yZSB0byBtYWtlIHN1cmUNCisJCQkvLyAgdGhlIGhhbmRsZXIgd2lsbCBleGVjdXRlIHRvIGNvbXBsZXRpb24gaW4gY2FzZSB3ZSBhcmUgYmVpbmcgZGVsZXRlZC4NCisJCQlzZW1UYWtlKGN1cnJlbnQtPm1faGFuZGxlclNlbWFwaG9yZSwgV0FJVF9GT1JFVkVSKTsNCisJCX0NCisNCisJCWN1cnJlbnQtPm1faGFuZGxlcihjdXJyZW50LT5tX3BhcmFtKTsJLy8gY2FsbCB0aGUgZXZlbnQgaGFuZGxlcg0KKwkJc2VtR2l2ZShjdXJyZW50LT5tX2hhbmRsZXJTZW1hcGhvcmUpOw0KKwl9DQorCS8vIHJlc2NoZWR1bGUgdGhlIGZpcnN0IGl0ZW0gaW4gdGhlIHF1ZXVlDQorCVN5bmNocm9uaXplZCBzeW5jKHF1ZXVlU2VtYXBob3JlKTsNCisJVXBkYXRlQWxhcm0oKTsNCit9DQorDQorLyoqDQorICogSW5zZXJ0IHRoaXMgTm90aWZpZXIgaW50byB0aGUgdGltZXIgcXVldWUgaW4gcmlnaHQgcGxhY2UuDQorICogV0FSTklORzogdGhpcyBtZXRob2QgZG9lcyBub3QgZG8gc3luY2hyb25pemF0aW9uISBJdCBtdXN0IGJlIGNhbGxlZCBmcm9tIHNvbWV3aGVyZQ0KKyAqIHRoYXQgaXMgdGFraW5nIGNhcmUgb2Ygc3luY2hyb25pemluZyBhY2Nlc3MgdG8gdGhlIHF1ZXVlLg0KKyAqIEBwYXJhbSByZXNjaGVkdWxlIElmIGZhbHNlLCB0aGUgc2NoZWR1bGVkIGFsYXJtIGlzIGJhc2VkIG9uIHRoZSBjdXJlbnQgdGltZSBhbmQgVXBkYXRlQWxhcm0NCisgKiBtZXRob2QgaXMgY2FsbGVkIHdoaWNoIHdpbGwgZW5hYmxlIHRoZSBhbGFybSBpZiBuZWNlc3NhcnkuDQorICogSWYgdHJ1ZSwgdXBkYXRlIHRoZSB0aW1lIGJ5IGFkZGluZyB0aGUgcGVyaW9kIChubyBkcmlmdCkgd2hlbiByZXNjaGVkdWxlZCBwZXJpb2RpYyBmcm9tIFByb2Nlc3NRdWV1ZS4NCisgKiBUaGlzIGVuc3VyZXMgdGhhdCB0aGUgcHVibGljIG1ldGhvZHMgb25seSB1cGRhdGUgdGhlIHF1ZXVlIGFmdGVyIGZpbmlzaGluZyBpbnNlcnRpbmcuDQorICovDQordm9pZCBOb3RpZmllcjo6SW5zZXJ0SW5RdWV1ZShib29sIHJlc2NoZWR1bGUpDQorew0KKwlpZiAocmVzY2hlZHVsZSkNCisJew0KKwkJbV9leHBpcmF0aW9uVGltZSArPSBtX3BlcmlvZDsNCisJfQ0KKwllbHNlDQorCXsNCisJCW1fZXhwaXJhdGlvblRpbWUgPSBHZXRDbG9jaygpICsgbV9wZXJpb2Q7DQorCX0NCisJaWYgKHRpbWVyUXVldWVIZWFkID09IE5VTEwgfHwgdGltZXJRdWV1ZUhlYWQtPm1fZXhwaXJhdGlvblRpbWUgPj0gdGhpcy0+bV9leHBpcmF0aW9uVGltZSkNCisJew0KKwkJLy8gdGhlIHF1ZXVlIGlzIGVtcHR5IG9yIGdyZWF0ZXIgdGhhbiB0aGUgbmV3IGVudHJ5DQorCQkvLyB0aGUgbmV3IGVudHJ5IGJlY29tZXMgdGhlIGZpcnN0IGVsZW1lbnQNCisJCXRoaXMtPm1fbmV4dEV2ZW50ID0gdGltZXJRdWV1ZUhlYWQ7DQorCQl0aW1lclF1ZXVlSGVhZCA9IHRoaXM7DQorCQlpZiAoIXJlc2NoZWR1bGUpDQorCQl7DQorCQkJLy8gc2luY2UgdGhlIGZpcnN0IGVsZW1lbnQgY2hhbmdlZCwgdXBkYXRlIGFsYXJtLCB1bmxlc3Mgd2UgYWxyZWFkeSBwbGFuIHRvDQorCQkJVXBkYXRlQWxhcm0oKTsNCisJCX0NCisJfQ0KKwllbHNlDQorCXsNCisJCWZvciAoTm90aWZpZXIgKipucHAgPSAmKHRpbWVyUXVldWVIZWFkLT5tX25leHRFdmVudCk7IDsgbnBwID0gJigqbnBwKS0+bV9uZXh0RXZlbnQpDQorCQl7DQorCQkJTm90aWZpZXIgKm4gPSAqbnBwOw0KKwkJCWlmIChuID09IE5VTEwgfHwgbi0+bV9leHBpcmF0aW9uVGltZSA+IHRoaXMtPm1fZXhwaXJhdGlvblRpbWUpDQorCQkJew0KKwkJCQkqbnBwID0gdGhpczsNCisJCQkJdGhpcy0+bV9uZXh0RXZlbnQgPSBuOw0KKwkJCQlicmVhazsNCisJCQl9DQorCQl9DQorCX0NCisJbV9xdWV1ZWQgPSB0cnVlOw0KK30NCisNCisvKioNCisgKiBEZWxldGUgdGhpcyBOb3RpZmllciBmcm9tIHRoZSB0aW1lciBxdWV1ZS4NCisgKiBXQVJOSU5HOiB0aGlzIG1ldGhvZCBkb2VzIG5vdCBkbyBzeW5jaHJvbml6YXRpb24hIEl0IG11c3QgYmUgY2FsbGVkIGZyb20gc29tZXdoZXJlDQorICogdGhhdCBpcyB0YWtpbmcgY2FyZSBvZiBzeW5jaHJvbml6aW5nIGFjY2VzcyB0byB0aGUgcXVldWUuDQorICogUmVtb3ZlIHRoaXMgTm90aWZpZXIgZnJvbSB0aGUgdGltZXIgcXVldWUgYW5kIGFkanVzdCB0aGUgbmV4dCBpbnRlcnJ1cHQgdGltZSB0byByZWZsZWN0DQorICogdGhlIGN1cnJlbnQgdG9wIG9mIHRoZSBxdWV1ZS4NCisgKi8NCit2b2lkIE5vdGlmaWVyOjpEZWxldGVGcm9tUXVldWUoKQ0KK3sNCisJaWYgKG1fcXVldWVkKQ0KKwl7DQorCQltX3F1ZXVlZCA9IGZhbHNlOw0KKwkJd3BpX2Fzc2VydCh0aW1lclF1ZXVlSGVhZCAhPSBOVUxMKTsNCisJCWlmICh0aW1lclF1ZXVlSGVhZCA9PSB0aGlzKQ0KKwkJew0KKwkJCS8vIHJlbW92ZSB0aGUgZmlyc3QgaXRlbSBpbiB0aGUgbGlzdCAtIHVwZGF0ZSB0aGUgYWxhcm0NCisJCQl0aW1lclF1ZXVlSGVhZCA9IHRoaXMtPm1fbmV4dEV2ZW50Ow0KKwkJCVVwZGF0ZUFsYXJtKCk7DQorCQl9DQorCQllbHNlDQorCQl7DQorCQkJZm9yIChOb3RpZmllciAqbiA9IHRpbWVyUXVldWVIZWFkOyBuICE9IE5VTEw7IG4gPSBuLT5tX25leHRFdmVudCkNCisJCQl7DQorCQkJCWlmIChuLT5tX25leHRFdmVudCA9PSB0aGlzKQ0KKwkJCQl7DQorCQkJCQkvLyB0aGlzIGVsZW1lbnQgaXMgdGhlIG5leHQgZWxlbWVudCBmcm9tICpuIGZyb20gdGhlIHF1ZXVlDQorCQkJCQluLT5tX25leHRFdmVudCA9IHRoaXMtPm1fbmV4dEV2ZW50OwkvLyBwb2ludCBhcm91bmQgdGhpcyBvbmUNCisJCQkJfQ0KKwkJCX0NCisJCX0NCisJfQ0KK30NCisNCisvKioNCisgKiBSZWdpc3RlciBmb3Igc2luZ2xlIGV2ZW50IG5vdGlmaWNhdGlvbi4NCisgKiBBIHRpbWVyIGV2ZW50IGlzIHF1ZXVlZCBmb3IgYSBzaW5nbGUgZXZlbnQgYWZ0ZXIgdGhlIHNwZWNpZmllZCBkZWxheS4NCisgKiBAcGFyYW0gZGVsYXkgU2Vjb25kcyB0byB3YWl0IGJlZm9yZSB0aGUgaGFuZGxlciBpcyBjYWxsZWQuDQorICovDQordm9pZCBOb3RpZmllcjo6U3RhcnRTaW5nbGUoZG91YmxlIGRlbGF5KQ0KK3sNCisJU3luY2hyb25pemVkIHN5bmMocXVldWVTZW1hcGhvcmUpOw0KKwltX3BlcmlvZGljID0gZmFsc2U7DQorCW1fcGVyaW9kID0gZGVsYXk7DQorCURlbGV0ZUZyb21RdWV1ZSgpOw0KKwlJbnNlcnRJblF1ZXVlKGZhbHNlKTsNCit9DQorDQorLyoqDQorICogUmVnaXN0ZXIgZm9yIHBlcmlvZGljIGV2ZW50IG5vdGlmaWNhdGlvbi4NCisgKiBBIHRpbWVyIGV2ZW50IGlzIHF1ZXVlZCBmb3IgcGVyaW9kaWMgZXZlbnQgbm90aWZpY2F0aW9uLiBFYWNoIHRpbWUgdGhlIGludGVycnVwdA0KKyAqIG9jY3VycywgdGhlIGV2ZW50IHdpbGwgYmUgaW1tZWRpYXRlbHkgcmVxdWV1ZWQgZm9yIHRoZSBzYW1lIHRpbWUgaW50ZXJ2YWwuDQorICogQHBhcmFtIHBlcmlvZCBQZXJpb2QgaW4gc2Vjb25kcyB0byBjYWxsIHRoZSBoYW5kbGVyIHN0YXJ0aW5nIG9uZSBwZXJpb2QgYWZ0ZXIgdGhlIGNhbGwgdG8gdGhpcyBtZXRob2QuDQorICovDQordm9pZCBOb3RpZmllcjo6U3RhcnRQZXJpb2RpYyhkb3VibGUgcGVyaW9kKQ0KK3sNCisJU3luY2hyb25pemVkIHN5bmMocXVldWVTZW1hcGhvcmUpOw0KKwltX3BlcmlvZGljID0gdHJ1ZTsNCisJbV9wZXJpb2QgPSBwZXJpb2Q7DQorCURlbGV0ZUZyb21RdWV1ZSgpOw0KKwlJbnNlcnRJblF1ZXVlKGZhbHNlKTsNCit9DQorDQorLyoqDQorICogU3RvcCB0aW1lciBldmVudHMgZnJvbSBvY2N1cmluZy4NCisgKiBTdG9wIGFueSByZXBlYXRpbmcgdGltZXIgZXZlbnRzIGZyb20gb2NjdXJpbmcuIFRoaXMgd2lsbCBhbHNvIHJlbW92ZSBhbnkgc2luZ2xlDQorICogbm90aWZpY2F0aW9uIGV2ZW50cyBmcm9tIHRoZSBxdWV1ZS4NCisgKiBJZiBhIHRpbWVyLWJhc2VkIGNhbGwgdG8gdGhlIHJlZ2lzdGVyZWQgaGFuZGxlciBpcyBpbiBwcm9ncmVzcywgdGhpcyBmdW5jdGlvbiB3aWxsDQorICogYmxvY2sgdW50aWwgdGhlIGhhbmRsZXIgY2FsbCBpcyBjb21wbGV0ZS4NCisgKi8NCit2b2lkIE5vdGlmaWVyOjpTdG9wKCkNCit7DQorCXsNCisJCVN5bmNocm9uaXplZCBzeW5jKHF1ZXVlU2VtYXBob3JlKTsNCisJCURlbGV0ZUZyb21RdWV1ZSgpOw0KKwl9DQorCS8vIFdhaXQgZm9yIGEgY3VycmVudGx5IGV4ZWN1dGluZyBoYW5kbGVyIHRvIGNvbXBsZXRlIGJlZm9yZSByZXR1cm5pbmcgZnJvbSBTdG9wKCkNCisJU3luY2hyb25pemVkIHN5bmMobV9oYW5kbGVyU2VtYXBob3JlKTsNCit9DQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvTm90aWZpZXIuaCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL05vdGlmaWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzZjMDZiNQotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL05vdGlmaWVyLmgKQEAgLTAsMCArMSw0NyBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBDb3B5cmlnaHQgKGMpIEZJUlNUIDIwMDguIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCQkJCQkJCSAgKi8NCisvKiBPcGVuIFNvdXJjZSBTb2Z0d2FyZSAtIG1heSBiZSBtb2RpZmllZCBhbmQgc2hhcmVkIGJ5IEZSQyB0ZWFtcy4gVGhlIGNvZGUgICAqLw0KKy8qIG11c3QgYmUgYWNjb21wYW5pZWQgYnkgdGhlIEZJUlNUIEJTRCBsaWNlbnNlIGZpbGUgaW4gJChXSU5EX0JBU0UpL1dQSUxpYi4gICovDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisjaWZuZGVmIE5PVElGSUVSX0gNCisjZGVmaW5lIE5PVElGSUVSX0gNCisNCisjaW5jbHVkZSAiQ2hpcE9iamVjdC5oIg0KKyNpbmNsdWRlICJFcnJvckJhc2UuaCINCisjaW5jbHVkZSAiU3luY2hyb25pemVkLmgiDQorDQordHlwZWRlZiB2b2lkICgqVGltZXJFdmVudEhhbmRsZXIpKHZvaWQgKnBhcmFtKTsNCisNCitjbGFzcyBOb3RpZmllciA6IHB1YmxpYyBFcnJvckJhc2UNCit7DQorcHVibGljOg0KKwlOb3RpZmllcihUaW1lckV2ZW50SGFuZGxlciBoYW5kbGVyLCB2b2lkICpwYXJhbSA9IE5VTEwpOw0KKwl2aXJ0dWFsIH5Ob3RpZmllcigpOw0KKwl2b2lkIFN0YXJ0U2luZ2xlKGRvdWJsZSBkZWxheSk7DQorCXZvaWQgU3RhcnRQZXJpb2RpYyhkb3VibGUgcGVyaW9kKTsNCisJdm9pZCBTdG9wKCk7DQorcHJpdmF0ZToNCisJc3RhdGljIE5vdGlmaWVyICp0aW1lclF1ZXVlSGVhZDsNCisJc3RhdGljIFJlZW50cmFudFNlbWFwaG9yZSBxdWV1ZVNlbWFwaG9yZTsNCisJc3RhdGljIHRBbGFybSAqdGFsYXJtOw0KKwlzdGF0aWMgdEludGVycnVwdE1hbmFnZXIgKm1hbmFnZXI7DQorCXN0YXRpYyBpbnQgcmVmY291bnQ7DQorDQorCXN0YXRpYyBjb25zdCBVSU5UMzIga1RpbWVySW50ZXJydXB0TnVtYmVyID0gMjg7DQorCXN0YXRpYyB2b2lkIFByb2Nlc3NRdWV1ZSh1aW50MzJfdCBtYXNrLCB2b2lkICpwYXJhbXMpOyAvLyBwcm9jZXNzIHRoZSB0aW1lciBxdWV1ZSBvbiBhIHRpbWVyIGV2ZW50DQorCXN0YXRpYyB2b2lkIFVwZGF0ZUFsYXJtKCk7CQkJLy8gdXBkYXRlIHRoZSBGUEdBIGFsYXJtIHNpbmNlIHRoZSBxdWV1ZSBoYXMgY2hhbmdlZA0KKwl2b2lkIEluc2VydEluUXVldWUoYm9vbCByZXNjaGVkdWxlKTsJLy8gaW5zZXJ0IHRoaXMgTm90aWZpZXIgaW4gdGhlIHRpbWVyIHF1ZXVlDQorCXZvaWQgRGVsZXRlRnJvbVF1ZXVlKCk7CQkJCS8vIGRlbGV0ZSB0aGlzIE5vdGlmaWVyIGZyb20gdGhlIHRpbWVyIHF1ZXVlDQorCVRpbWVyRXZlbnRIYW5kbGVyIG1faGFuZGxlcjsJCQkvLyBhZGRyZXNzIG9mIHRoZSBoYW5kbGVyDQorCXZvaWQgKm1fcGFyYW07CQkJCQkJCS8vIGEgcGFyYW1ldGVyIHRvIHBhc3MgdG8gdGhlIGhhbmRsZXINCisJZG91YmxlIG1fcGVyaW9kOwkJCQkJCS8vIHRoZSByZWxhdGl2ZSB0aW1lIChlaXRoZXIgcGVyaW9kaWMgb3Igc2luZ2xlKQ0KKwlkb3VibGUgbV9leHBpcmF0aW9uVGltZTsJCQkJLy8gYWJzb2x1dGUgZXhwaXJhdGlvbiB0aW1lIGZvciB0aGUgY3VycmVudCBldmVudA0KKwlOb3RpZmllciAqbV9uZXh0RXZlbnQ7CQkJCQkvLyBuZXh0IE5vZmlmaWVyIGV2ZW50DQorCWJvb2wgbV9wZXJpb2RpYzsJCQkJCQkvLyB0cnVlIGlmIHRoaXMgaXMgYSBwZXJpb2RpYyBldmVudA0KKwlib29sIG1fcXVldWVkOwkJCQkJCQkvLyBpbmRpY2F0ZXMgaWYgdGhpcyBlbnRyeSBpcyBxdWV1ZWQNCisJU0VNX0lEIG1faGFuZGxlclNlbWFwaG9yZTsJCQkJLy8gaGVsZCBieSBpbnRlcnJ1cHQgbWFuYWdlciB0YXNrIHdoaWxlIGhhbmRsZXIgY2FsbCBpcyBpbiBwcm9ncmVzcyANCisJRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKE5vdGlmaWVyKTsNCit9Ow0KKw0KKyNlbmRpZg0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL1BJRENvbnRyb2xsZXIuY3BwIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvUElEQ29udHJvbGxlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDUyNzBmZQotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL1BJRENvbnRyb2xsZXIuY3BwCkBAIC0wLDAgKzEsNjEzIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy8qIENvcHlyaWdodCAoYykgRklSU1QgMjAwOC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4JCQkJCQkJICAqLw0KKy8qIE9wZW4gU291cmNlIFNvZnR3YXJlIC0gbWF5IGJlIG1vZGlmaWVkIGFuZCBzaGFyZWQgYnkgRlJDIHRlYW1zLiBUaGUgY29kZSAgICovDQorLyogbXVzdCBiZSBhY2NvbXBhbmllZCBieSB0aGUgRklSU1QgQlNEIGxpY2Vuc2UgZmlsZSBpbiAkKFdJTkRfQkFTRSkvV1BJTGliLiAgKi8NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKyNpbmNsdWRlICJQSURDb250cm9sbGVyLmgiDQorI2luY2x1ZGUgIk5ldHdvcmtDb21tdW5pY2F0aW9uL1VzYWdlUmVwb3J0aW5nLmgiDQorI2luY2x1ZGUgIk5vdGlmaWVyLmgiDQorI2luY2x1ZGUgIlBJRFNvdXJjZS5oIg0KKyNpbmNsdWRlICJQSURPdXRwdXQuaCINCisjaW5jbHVkZSA8bWF0aC5oPg0KKyNpbmNsdWRlICJTeW5jaHJvbml6ZWQuaCINCisNCitzdGF0aWMgY29uc3QgY2hhciAqa1AgPSAicCI7DQorc3RhdGljIGNvbnN0IGNoYXIgKmtJID0gImkiOw0KK3N0YXRpYyBjb25zdCBjaGFyICprRCA9ICJkIjsNCitzdGF0aWMgY29uc3QgY2hhciAqa0YgPSAiZiI7DQorc3RhdGljIGNvbnN0IGNoYXIgKmtTZXRwb2ludCA9ICJzZXRwb2ludCI7DQorc3RhdGljIGNvbnN0IGNoYXIgKmtFbmFibGVkID0gImVuYWJsZWQiOw0KKw0KKw0KKy8qKg0KKyAqIEFsbG9jYXRlIGEgUElEIG9iamVjdCB3aXRoIHRoZSBnaXZlbiBjb25zdGFudHMgZm9yIFAsIEksIEQNCisgKiBAcGFyYW0gS3AgdGhlIHByb3BvcnRpb25hbCBjb2VmZmljaWVudA0KKyAqIEBwYXJhbSBLaSB0aGUgaW50ZWdyYWwgY29lZmZpY2llbnQNCisgKiBAcGFyYW0gS2QgdGhlIGRlcml2YXRpdmUgY29lZmZpY2llbnQNCisgKiBAcGFyYW0gc291cmNlIFRoZSBQSURTb3VyY2Ugb2JqZWN0IHRoYXQgaXMgdXNlZCB0byBnZXQgdmFsdWVzDQorICogQHBhcmFtIG91dHB1dCBUaGUgUElET3V0cHV0IG9iamVjdCB0aGF0IGlzIHNldCB0byB0aGUgb3V0cHV0IHZhbHVlDQorICogQHBhcmFtIHBlcmlvZCB0aGUgbG9vcCB0aW1lIGZvciBkb2luZyBjYWxjdWxhdGlvbnMuIFRoaXMgcGFydGljdWxhcmx5IGVmZmVjdHMgY2FsY3VsYXRpb25zIG9mIHRoZQ0KKyAqIGludGVncmFsIGFuZCBkaWZmZXJlbnRhbCB0ZXJtcy4gVGhlIGRlZmF1bHQgaXMgNTBtcy4NCisgKi8NCitQSURDb250cm9sbGVyOjpQSURDb250cm9sbGVyKGZsb2F0IEtwLCBmbG9hdCBLaSwgZmxvYXQgS2QsDQorCQkJCQkJCQlQSURTb3VyY2UgKnNvdXJjZSwgUElET3V0cHV0ICpvdXRwdXQsDQorCQkJCQkJCQlmbG9hdCBwZXJpb2QpIDoNCisJbV9zZW1hcGhvcmUgKDApDQorew0KKwlJbml0aWFsaXplKEtwLCBLaSwgS2QsIDAuMGYsIHNvdXJjZSwgb3V0cHV0LCBwZXJpb2QpOw0KK30NCisNCisvKioNCisgKiBBbGxvY2F0ZSBhIFBJRCBvYmplY3Qgd2l0aCB0aGUgZ2l2ZW4gY29uc3RhbnRzIGZvciBQLCBJLCBEDQorICogQHBhcmFtIEtwIHRoZSBwcm9wb3J0aW9uYWwgY29lZmZpY2llbnQNCisgKiBAcGFyYW0gS2kgdGhlIGludGVncmFsIGNvZWZmaWNpZW50DQorICogQHBhcmFtIEtkIHRoZSBkZXJpdmF0aXZlIGNvZWZmaWNpZW50DQorICogQHBhcmFtIHNvdXJjZSBUaGUgUElEU291cmNlIG9iamVjdCB0aGF0IGlzIHVzZWQgdG8gZ2V0IHZhbHVlcw0KKyAqIEBwYXJhbSBvdXRwdXQgVGhlIFBJRE91dHB1dCBvYmplY3QgdGhhdCBpcyBzZXQgdG8gdGhlIG91dHB1dCB2YWx1ZQ0KKyAqIEBwYXJhbSBwZXJpb2QgdGhlIGxvb3AgdGltZSBmb3IgZG9pbmcgY2FsY3VsYXRpb25zLiBUaGlzIHBhcnRpY3VsYXJseSBlZmZlY3RzIGNhbGN1bGF0aW9ucyBvZiB0aGUNCisgKiBpbnRlZ3JhbCBhbmQgZGlmZmVyZW50YWwgdGVybXMuIFRoZSBkZWZhdWx0IGlzIDUwbXMuDQorICovDQorUElEQ29udHJvbGxlcjo6UElEQ29udHJvbGxlcihmbG9hdCBLcCwgZmxvYXQgS2ksIGZsb2F0IEtkLCBmbG9hdCBLZiwNCisJCQkJCQkJCVBJRFNvdXJjZSAqc291cmNlLCBQSURPdXRwdXQgKm91dHB1dCwNCisJCQkJCQkJCWZsb2F0IHBlcmlvZCkgOg0KKwltX3NlbWFwaG9yZSAoMCkNCit7DQorCUluaXRpYWxpemUoS3AsIEtpLCBLZCwgS2YsIHNvdXJjZSwgb3V0cHV0LCBwZXJpb2QpOw0KK30NCisNCisNCit2b2lkIFBJRENvbnRyb2xsZXI6OkluaXRpYWxpemUoZmxvYXQgS3AsIGZsb2F0IEtpLCBmbG9hdCBLZCwgZmxvYXQgS2YsDQorCQkJCQkJCQlQSURTb3VyY2UgKnNvdXJjZSwgUElET3V0cHV0ICpvdXRwdXQsDQorCQkJCQkJCQlmbG9hdCBwZXJpb2QpDQorew0KKwltX3RhYmxlID0gTlVMTDsNCisJDQorCW1fc2VtYXBob3JlID0gc2VtTUNyZWF0ZShTRU1fUV9QUklPUklUWSk7DQorDQorCW1fY29udHJvbExvb3AgPSBuZXcgTm90aWZpZXIoUElEQ29udHJvbGxlcjo6Q2FsbENhbGN1bGF0ZSwgdGhpcyk7DQorDQorCW1fUCA9IEtwOw0KKwltX0kgPSBLaTsNCisJbV9EID0gS2Q7DQorCW1fRiA9IEtmOw0KKwkNCisJbV9tYXhpbXVtT3V0cHV0ID0gMS4wOw0KKwltX21pbmltdW1PdXRwdXQgPSAtMS4wOw0KKw0KKwltX21heGltdW1JbnB1dCA9IDA7DQorCW1fbWluaW11bUlucHV0ID0gMDsNCisNCisJbV9jb250aW51b3VzID0gZmFsc2U7DQorCW1fZW5hYmxlZCA9IGZhbHNlOw0KKwltX3NldHBvaW50ID0gMDsNCisNCisJbV9wcmV2RXJyb3IgPSAwOw0KKwltX3RvdGFsRXJyb3IgPSAwOw0KKwltX3RvbGVyYW5jZSA9IC4wNTsNCisNCisJbV9yZXN1bHQgPSAwOw0KKw0KKwltX3BpZElucHV0ID0gc291cmNlOw0KKwltX3BpZE91dHB1dCA9IG91dHB1dDsNCisJbV9wZXJpb2QgPSBwZXJpb2Q7DQorDQorCW1fY29udHJvbExvb3AtPlN0YXJ0UGVyaW9kaWMobV9wZXJpb2QpOw0KKw0KKwlzdGF0aWMgSU5UMzIgaW5zdGFuY2VzID0gMDsNCisJaW5zdGFuY2VzKys7DQorCW5Vc2FnZVJlcG9ydGluZzo6cmVwb3J0KG5Vc2FnZVJlcG9ydGluZzo6a1Jlc291cmNlVHlwZV9QSURDb250cm9sbGVyLCBpbnN0YW5jZXMpOw0KKwkNCisJbV90b2xlcmFuY2VUeXBlID0ga05vVG9sZXJhbmNlOw0KK30NCisNCisvKioNCisgKiBGcmVlIHRoZSBQSUQgb2JqZWN0DQorICovDQorUElEQ29udHJvbGxlcjo6flBJRENvbnRyb2xsZXIoKQ0KK3sNCisJc2VtRmx1c2gobV9zZW1hcGhvcmUpOw0KKwlkZWxldGUgbV9jb250cm9sTG9vcDsNCit9DQorDQorLyoqDQorICogQ2FsbCB0aGUgQ2FsY3VsYXRlIG1ldGhvZCBhcyBhIG5vbi1zdGF0aWMgbWV0aG9kLiBUaGlzIGF2b2lkcyBoYXZpbmcgdG8gcHJlcGVuZA0KKyAqIGFsbCBsb2NhbCB2YXJpYWJsZXMgaW4gdGhhdCBtZXRob2Qgd2l0aCB0aGUgY2xhc3MgcG9pbnRlci4gVGhpcyB3YXkgdGhlICJ0aGlzIg0KKyAqIHBvaW50ZXIgd2lsbCBiZSBzZXQgdXAgYW5kIGNsYXNzIHZhcmlhYmxlcyBjYW4gYmUgY2FsbGVkIG1vcmUgZWFzaWx5Lg0KKyAqIFRoaXMgbWV0aG9kIGlzIHN0YXRpYyBhbmQgY2FsbGVkIGJ5IHRoZSBOb3RpZmllciBjbGFzcy4NCisgKiBAcGFyYW0gY29udHJvbGxlciB0aGUgYWRkcmVzcyBvZiB0aGUgUElEIGNvbnRyb2xsZXIgb2JqZWN0IHRvIHVzZSBpbiB0aGUgYmFja2dyb3VuZCBsb29wDQorICovDQordm9pZCBQSURDb250cm9sbGVyOjpDYWxsQ2FsY3VsYXRlKHZvaWQgKmNvbnRyb2xsZXIpDQorew0KKwlQSURDb250cm9sbGVyICpjb250cm9sID0gKFBJRENvbnRyb2xsZXIqKSBjb250cm9sbGVyOw0KKwljb250cm9sLT5DYWxjdWxhdGUoKTsNCit9DQorDQorIC8qKg0KKyAgKiBSZWFkIHRoZSBpbnB1dCwgY2FsY3VsYXRlIHRoZSBvdXRwdXQgYWNjb3JkaW5nbHksIGFuZCB3cml0ZSB0byB0aGUgb3V0cHV0Lg0KKyAgKiBUaGlzIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBieSB0aGUgTm90aWZpZXIgaW5kaXJlY3RseSB0aHJvdWdoIENhbGxDYWxjdWxhdGUNCisgICogYW5kIGlzIGNyZWF0ZWQgZHVyaW5nIGluaXRpYWxpemF0aW9uLg0KKyAgKi8JDQordm9pZCBQSURDb250cm9sbGVyOjpDYWxjdWxhdGUoKQ0KK3sNCisJYm9vbCBlbmFibGVkOw0KKwlQSURTb3VyY2UgKnBpZElucHV0Ow0KKw0KKwlDUklUSUNBTF9SRUdJT04obV9zZW1hcGhvcmUpDQorCXsNCisJCWlmIChtX3BpZElucHV0ID09IDApIHJldHVybjsNCisJCWlmIChtX3BpZE91dHB1dCA9PSAwKSByZXR1cm47DQorCQllbmFibGVkID0gbV9lbmFibGVkOw0KKwkJcGlkSW5wdXQgPSBtX3BpZElucHV0Ow0KKwl9DQorCUVORF9SRUdJT047DQorDQorCWlmIChlbmFibGVkKQ0KKwl7DQorCQlmbG9hdCBpbnB1dCA9IHBpZElucHV0LT5QSURHZXQoKTsNCisJCWZsb2F0IHJlc3VsdDsNCisJCVBJRE91dHB1dCAqcGlkT3V0cHV0Ow0KKw0KKwkJew0KKwkJCVN5bmNocm9uaXplZCBzeW5jKG1fc2VtYXBob3JlKTsNCisJCQltX2Vycm9yID0gbV9zZXRwb2ludCAtIGlucHV0Ow0KKwkJCWlmIChtX2NvbnRpbnVvdXMpDQorCQkJew0KKwkJCQlpZiAoZmFicyhtX2Vycm9yKSA+IChtX21heGltdW1JbnB1dCAtIG1fbWluaW11bUlucHV0KSAvIDIpDQorCQkJCXsNCisJCQkJCWlmIChtX2Vycm9yID4gMCkNCisJCQkJCXsNCisJCQkJCQltX2Vycm9yID0gbV9lcnJvciAtIG1fbWF4aW11bUlucHV0ICsgbV9taW5pbXVtSW5wdXQ7DQorCQkJCQl9DQorCQkJCQllbHNlDQorCQkJCQl7DQorCQkJCQkJbV9lcnJvciA9IG1fZXJyb3IgKyBtX21heGltdW1JbnB1dCAtIG1fbWluaW11bUlucHV0Ow0KKwkJCQkJfQ0KKwkJCQl9DQorCQkJfQ0KKwkJCQ0KKwkJCWlmKG1fSSAhPSAwKQ0KKwkJCXsNCisJCQkJZG91YmxlIHBvdGVudGlhbElHYWluID0gKG1fdG90YWxFcnJvciArIG1fZXJyb3IpICogbV9JOw0KKwkJCQlpZiAocG90ZW50aWFsSUdhaW4gPCBtX21heGltdW1PdXRwdXQpDQorCQkJCXsNCisJCQkJCWlmIChwb3RlbnRpYWxJR2FpbiA+IG1fbWluaW11bU91dHB1dCkNCisJCQkJCQltX3RvdGFsRXJyb3IgKz0gbV9lcnJvcjsNCisJCQkJCWVsc2UNCisJCQkJCQltX3RvdGFsRXJyb3IgPSBtX21pbmltdW1PdXRwdXQgLyBtX0k7DQorCQkJCX0NCisJCQkJZWxzZQ0KKwkJCQl7DQorCQkJCQltX3RvdGFsRXJyb3IgPSBtX21heGltdW1PdXRwdXQgLyBtX0k7DQorCQkJCX0NCisJCQl9DQorDQorCQkJbV9yZXN1bHQgPSBtX1AgKiBtX2Vycm9yICsgbV9JICogbV90b3RhbEVycm9yICsgbV9EICogKG1fZXJyb3IgLSBtX3ByZXZFcnJvcikgKyBtX3NldHBvaW50ICogbV9GOw0KKwkJCW1fcHJldkVycm9yID0gbV9lcnJvcjsNCisNCisJCQlpZiAobV9yZXN1bHQgPiBtX21heGltdW1PdXRwdXQpIG1fcmVzdWx0ID0gbV9tYXhpbXVtT3V0cHV0Ow0KKwkJCWVsc2UgaWYgKG1fcmVzdWx0IDwgbV9taW5pbXVtT3V0cHV0KSBtX3Jlc3VsdCA9IG1fbWluaW11bU91dHB1dDsNCisNCisJCQlwaWRPdXRwdXQgPSBtX3BpZE91dHB1dDsNCisJCQlyZXN1bHQgPSBtX3Jlc3VsdDsNCisJCX0NCisNCisJCXBpZE91dHB1dC0+UElEV3JpdGUocmVzdWx0KTsNCisJfQ0KK30NCisNCisvKioNCisgKiBTZXQgdGhlIFBJRCBDb250cm9sbGVyIGdhaW4gcGFyYW1ldGVycy4NCisgKiBTZXQgdGhlIHByb3BvcnRpb25hbCwgaW50ZWdyYWwsIGFuZCBkaWZmZXJlbnRpYWwgY29lZmZpY2llbnRzLg0KKyAqIEBwYXJhbSBwIFByb3BvcnRpb25hbCBjb2VmZmljaWVudA0KKyAqIEBwYXJhbSBpIEludGVncmFsIGNvZWZmaWNpZW50DQorICogQHBhcmFtIGQgRGlmZmVyZW50aWFsIGNvZWZmaWNpZW50DQorICovDQordm9pZCBQSURDb250cm9sbGVyOjpTZXRQSUQoZmxvYXQgcCwgZmxvYXQgaSwgZmxvYXQgZCkNCit7DQorCUNSSVRJQ0FMX1JFR0lPTihtX3NlbWFwaG9yZSkNCisJew0KKwkJbV9QID0gcDsNCisJCW1fSSA9IGk7DQorCQltX0QgPSBkOw0KKwl9DQorCUVORF9SRUdJT047DQorDQorCWlmIChtX3RhYmxlICE9IE5VTEwpIHsNCisJCW1fdGFibGUtPlB1dE51bWJlcigicCIsIG1fUCk7DQorCQltX3RhYmxlLT5QdXROdW1iZXIoImkiLCBtX0kpOw0KKwkJbV90YWJsZS0+UHV0TnVtYmVyKCJkIiwgbV9EKTsNCisJfQ0KK30NCisNCisvKioNCisgKiBTZXQgdGhlIFBJRCBDb250cm9sbGVyIGdhaW4gcGFyYW1ldGVycy4NCisgKiBTZXQgdGhlIHByb3BvcnRpb25hbCwgaW50ZWdyYWwsIGFuZCBkaWZmZXJlbnRpYWwgY29lZmZpY2llbnRzLg0KKyAqIEBwYXJhbSBwIFByb3BvcnRpb25hbCBjb2VmZmljaWVudA0KKyAqIEBwYXJhbSBpIEludGVncmFsIGNvZWZmaWNpZW50DQorICogQHBhcmFtIGQgRGlmZmVyZW50aWFsIGNvZWZmaWNpZW50DQorICogQHBhcmFtIGYgRmVlZCBmb3J3YXJkIGNvZWZmaWNpZW50DQorICovDQordm9pZCBQSURDb250cm9sbGVyOjpTZXRQSUQoZmxvYXQgcCwgZmxvYXQgaSwgZmxvYXQgZCwgZmxvYXQgZikNCit7DQorCUNSSVRJQ0FMX1JFR0lPTihtX3NlbWFwaG9yZSkNCisJew0KKwkJbV9QID0gcDsNCisJCW1fSSA9IGk7DQorCQltX0QgPSBkOw0KKwkJbV9GID0gZjsNCisJfQ0KKwlFTkRfUkVHSU9OOw0KKw0KKwlpZiAobV90YWJsZSAhPSBOVUxMKSB7DQorCQltX3RhYmxlLT5QdXROdW1iZXIoInAiLCBtX1ApOw0KKwkJbV90YWJsZS0+UHV0TnVtYmVyKCJpIiwgbV9JKTsNCisJCW1fdGFibGUtPlB1dE51bWJlcigiZCIsIG1fRCk7DQorCQltX3RhYmxlLT5QdXROdW1iZXIoImYiLCBtX0YpOw0KKwl9DQorfQ0KKw0KKy8qKg0KKyAqIEdldCB0aGUgUHJvcG9ydGlvbmFsIGNvZWZmaWNpZW50DQorICogQHJldHVybiBwcm9wb3J0aW9uYWwgY29lZmZpY2llbnQNCisgKi8NCitmbG9hdCBQSURDb250cm9sbGVyOjpHZXRQKCkNCit7DQorCUNSSVRJQ0FMX1JFR0lPTihtX3NlbWFwaG9yZSkNCisJew0KKwkJcmV0dXJuIG1fUDsNCisJfQ0KKwlFTkRfUkVHSU9OOw0KK30NCisNCisvKioNCisgKiBHZXQgdGhlIEludGVncmFsIGNvZWZmaWNpZW50DQorICogQHJldHVybiBpbnRlZ3JhbCBjb2VmZmljaWVudA0KKyAqLw0KK2Zsb2F0IFBJRENvbnRyb2xsZXI6OkdldEkoKQ0KK3sNCisJQ1JJVElDQUxfUkVHSU9OKG1fc2VtYXBob3JlKQ0KKwl7DQorCQlyZXR1cm4gbV9JOw0KKwl9DQorCUVORF9SRUdJT047DQorfQ0KKw0KKy8qKg0KKyAqIEdldCB0aGUgRGlmZmVyZW50aWFsIGNvZWZmaWNpZW50DQorICogQHJldHVybiBkaWZmZXJlbnRpYWwgY29lZmZpY2llbnQNCisgKi8NCitmbG9hdCBQSURDb250cm9sbGVyOjpHZXREKCkNCit7DQorCUNSSVRJQ0FMX1JFR0lPTihtX3NlbWFwaG9yZSkNCisJew0KKwkJcmV0dXJuIG1fRDsNCisJfQ0KKwlFTkRfUkVHSU9OOw0KK30NCisNCisvKioNCisgKiBHZXQgdGhlIEZlZWQgZm9yd2FyZCBjb2VmZmljaWVudA0KKyAqIEByZXR1cm4gRmVlZCBmb3J3YXJkIGNvZWZmaWNpZW50DQorICovDQorZmxvYXQgUElEQ29udHJvbGxlcjo6R2V0RigpDQorew0KKwlDUklUSUNBTF9SRUdJT04obV9zZW1hcGhvcmUpDQorCXsNCisJCXJldHVybiBtX0Y7DQorCX0NCisJRU5EX1JFR0lPTjsNCit9DQorDQorLyoqDQorICogUmV0dXJuIHRoZSBjdXJyZW50IFBJRCByZXN1bHQNCisgKiBUaGlzIGlzIGFsd2F5cyBjZW50ZXJlZCBvbiB6ZXJvIGFuZCBjb25zdHJhaW5lZCB0aGUgdGhlIG1heCBhbmQgbWluIG91dHMNCisgKiBAcmV0dXJuIHRoZSBsYXRlc3QgY2FsY3VsYXRlZCBvdXRwdXQNCisgKi8NCitmbG9hdCBQSURDb250cm9sbGVyOjpHZXQoKQ0KK3sNCisJZmxvYXQgcmVzdWx0Ow0KKwlDUklUSUNBTF9SRUdJT04obV9zZW1hcGhvcmUpDQorCXsNCisJCXJlc3VsdCA9IG1fcmVzdWx0Ow0KKwl9DQorCUVORF9SRUdJT047DQorCXJldHVybiByZXN1bHQ7DQorfQ0KKw0KKy8qKg0KKyAqICBTZXQgdGhlIFBJRCBjb250cm9sbGVyIHRvIGNvbnNpZGVyIHRoZSBpbnB1dCB0byBiZSBjb250aW51b3VzLA0KKyAqICBSYXRoZXIgdGhlbiB1c2luZyB0aGUgbWF4IGFuZCBtaW4gaW4gYXMgY29uc3RyYWludHMsIGl0IGNvbnNpZGVycyB0aGVtIHRvDQorICogIGJlIHRoZSBzYW1lIHBvaW50IGFuZCBhdXRvbWF0aWNhbGx5IGNhbGN1bGF0ZXMgdGhlIHNob3J0ZXN0IHJvdXRlIHRvDQorICogIHRoZSBzZXRwb2ludC4NCisgKiBAcGFyYW0gY29udGludW91cyBTZXQgdG8gdHJ1ZSB0dXJucyBvbiBjb250aW51b3VzLCBmYWxzZSB0dXJucyBvZmYgY29udGludW91cw0KKyAqLw0KK3ZvaWQgUElEQ29udHJvbGxlcjo6U2V0Q29udGludW91cyhib29sIGNvbnRpbnVvdXMpDQorew0KKwlDUklUSUNBTF9SRUdJT04obV9zZW1hcGhvcmUpDQorCXsNCisJCW1fY29udGludW91cyA9IGNvbnRpbnVvdXM7DQorCX0NCisJRU5EX1JFR0lPTjsNCisNCit9DQorDQorLyoqDQorICogU2V0cyB0aGUgbWF4aW11bSBhbmQgbWluaW11bSB2YWx1ZXMgZXhwZWN0ZWQgZnJvbSB0aGUgaW5wdXQuDQorICogDQorICogQHBhcmFtIG1pbmltdW1JbnB1dCB0aGUgbWluaW11bSB2YWx1ZSBleHBlY3RlZCBmcm9tIHRoZSBpbnB1dA0KKyAqIEBwYXJhbSBtYXhpbXVtSW5wdXQgdGhlIG1heGltdW0gdmFsdWUgZXhwZWN0ZWQgZnJvbSB0aGUgb3V0cHV0DQorICovDQordm9pZCBQSURDb250cm9sbGVyOjpTZXRJbnB1dFJhbmdlKGZsb2F0IG1pbmltdW1JbnB1dCwgZmxvYXQgbWF4aW11bUlucHV0KQ0KK3sNCisJQ1JJVElDQUxfUkVHSU9OKG1fc2VtYXBob3JlKQ0KKwl7DQorCQltX21pbmltdW1JbnB1dCA9IG1pbmltdW1JbnB1dDsNCisJCW1fbWF4aW11bUlucHV0ID0gbWF4aW11bUlucHV0OwkNCisJfQ0KKwlFTkRfUkVHSU9OOw0KKw0KKwlTZXRTZXRwb2ludChtX3NldHBvaW50KTsNCit9DQorDQorLyoqDQorICogU2V0cyB0aGUgbWluaW11bSBhbmQgbWF4aW11bSB2YWx1ZXMgdG8gd3JpdGUuDQorICogDQorICogQHBhcmFtIG1pbmltdW1PdXRwdXQgdGhlIG1pbmltdW0gdmFsdWUgdG8gd3JpdGUgdG8gdGhlIG91dHB1dA0KKyAqIEBwYXJhbSBtYXhpbXVtT3V0cHV0IHRoZSBtYXhpbXVtIHZhbHVlIHRvIHdyaXRlIHRvIHRoZSBvdXRwdXQNCisgKi8NCit2b2lkIFBJRENvbnRyb2xsZXI6OlNldE91dHB1dFJhbmdlKGZsb2F0IG1pbmltdW1PdXRwdXQsIGZsb2F0IG1heGltdW1PdXRwdXQpDQorew0KKwlDUklUSUNBTF9SRUdJT04obV9zZW1hcGhvcmUpDQorCXsNCisJCW1fbWluaW11bU91dHB1dCA9IG1pbmltdW1PdXRwdXQ7DQorCQltX21heGltdW1PdXRwdXQgPSBtYXhpbXVtT3V0cHV0Ow0KKwl9DQorCUVORF9SRUdJT047DQorfQ0KKw0KKy8qKg0KKyAqIFNldCB0aGUgc2V0cG9pbnQgZm9yIHRoZSBQSURDb250cm9sbGVyDQorICogQHBhcmFtIHNldHBvaW50IHRoZSBkZXNpcmVkIHNldHBvaW50DQorICovDQordm9pZCBQSURDb250cm9sbGVyOjpTZXRTZXRwb2ludChmbG9hdCBzZXRwb2ludCkNCit7DQorCUNSSVRJQ0FMX1JFR0lPTihtX3NlbWFwaG9yZSkNCisJew0KKwkJaWYgKG1fbWF4aW11bUlucHV0ID4gbV9taW5pbXVtSW5wdXQpDQorCQl7DQorCQkJaWYgKHNldHBvaW50ID4gbV9tYXhpbXVtSW5wdXQpDQorCQkJCW1fc2V0cG9pbnQgPSBtX21heGltdW1JbnB1dDsNCisJCQllbHNlIGlmIChzZXRwb2ludCA8IG1fbWluaW11bUlucHV0KQ0KKwkJCQltX3NldHBvaW50ID0gbV9taW5pbXVtSW5wdXQ7DQorCQkJZWxzZQ0KKwkJCQltX3NldHBvaW50ID0gc2V0cG9pbnQ7DQorCQl9DQorCQllbHNlDQorCQl7DQorCQkJbV9zZXRwb2ludCA9IHNldHBvaW50Ow0KKwkJfQ0KKwl9DQorCUVORF9SRUdJT047CQ0KKwkNCisJaWYgKG1fdGFibGUgIT0gTlVMTCkgew0KKwkJbV90YWJsZS0+UHV0TnVtYmVyKCJzZXRwb2ludCIsIG1fc2V0cG9pbnQpOw0KKwl9DQorfQ0KKw0KKy8qKg0KKyAqIFJldHVybnMgdGhlIGN1cnJlbnQgc2V0cG9pbnQgb2YgdGhlIFBJRENvbnRyb2xsZXINCisgKiBAcmV0dXJuIHRoZSBjdXJyZW50IHNldHBvaW50DQorICovDQorZmxvYXQgUElEQ29udHJvbGxlcjo6R2V0U2V0cG9pbnQoKQ0KK3sNCisJZmxvYXQgc2V0cG9pbnQ7DQorCUNSSVRJQ0FMX1JFR0lPTihtX3NlbWFwaG9yZSkNCisJew0KKwkJc2V0cG9pbnQgPSBtX3NldHBvaW50Ow0KKwl9DQorCUVORF9SRUdJT047DQorCXJldHVybiBzZXRwb2ludDsNCit9DQorDQorLyoqDQorICogUmV0cnVucyB0aGUgY3VycmVudCBkaWZmZXJlbmNlIG9mIHRoZSBpbnB1dCBmcm9tIHRoZSBzZXRwb2ludA0KKyAqIEByZXR1cm4gdGhlIGN1cnJlbnQgZXJyb3INCisgKi8NCitmbG9hdCBQSURDb250cm9sbGVyOjpHZXRFcnJvcigpDQorew0KKwlmbG9hdCBlcnJvcjsNCisJQ1JJVElDQUxfUkVHSU9OKG1fc2VtYXBob3JlKQ0KKwl7DQorCQllcnJvciA9IG1fc2V0cG9pbnQgLSBtX3BpZElucHV0LT5QSURHZXQoKTsNCisJfQ0KKwlFTkRfUkVHSU9OOw0KKwlyZXR1cm4gZXJyb3I7DQorfQ0KKw0KKy8qDQorICogU2V0IHRoZSBwZXJjZW50YWdlIGVycm9yIHdoaWNoIGlzIGNvbnNpZGVyZWQgdG9sZXJhYmxlIGZvciB1c2Ugd2l0aA0KKyAqIE9uVGFyZ2V0Lg0KKyAqIEBwYXJhbSBwZXJjZW50YWdlIGVycm9yIHdoaWNoIGlzIHRvbGVyYWJsZQ0KKyAqLw0KK3ZvaWQgUElEQ29udHJvbGxlcjo6U2V0VG9sZXJhbmNlKGZsb2F0IHBlcmNlbnQpDQorew0KKwlDUklUSUNBTF9SRUdJT04obV9zZW1hcGhvcmUpDQorCXsNCisJCW1fdG9sZXJhbmNlVHlwZSA9IGtQZXJjZW50VG9sZXJhbmNlOw0KKwkJbV90b2xlcmFuY2UgPSBwZXJjZW50Ow0KKwl9DQorCUVORF9SRUdJT047DQorfQ0KKw0KKy8qDQorICogU2V0IHRoZSBwZXJjZW50YWdlIGVycm9yIHdoaWNoIGlzIGNvbnNpZGVyZWQgdG9sZXJhYmxlIGZvciB1c2Ugd2l0aA0KKyAqIE9uVGFyZ2V0Lg0KKyAqIEBwYXJhbSBwZXJjZW50YWdlIGVycm9yIHdoaWNoIGlzIHRvbGVyYWJsZQ0KKyAqLw0KK3ZvaWQgUElEQ29udHJvbGxlcjo6U2V0UGVyY2VudFRvbGVyYW5jZShmbG9hdCBwZXJjZW50KQ0KK3sNCisJQ1JJVElDQUxfUkVHSU9OKG1fc2VtYXBob3JlKQ0KKwl7DQorCQltX3RvbGVyYW5jZVR5cGUgPSBrUGVyY2VudFRvbGVyYW5jZTsNCisJCW1fdG9sZXJhbmNlID0gcGVyY2VudDsNCisJfQ0KKwlFTkRfUkVHSU9OOw0KK30NCisNCisvKg0KKyAqIFNldCB0aGUgYWJzb2x1dGUgZXJyb3Igd2hpY2ggaXMgY29uc2lkZXJlZCB0b2xlcmFibGUgZm9yIHVzZSB3aXRoDQorICogT25UYXJnZXQuDQorICogQHBhcmFtIHBlcmNlbnRhZ2UgZXJyb3Igd2hpY2ggaXMgdG9sZXJhYmxlDQorICovDQordm9pZCBQSURDb250cm9sbGVyOjpTZXRBYnNvbHV0ZVRvbGVyYW5jZShmbG9hdCBhYnNUb2xlcmFuY2UpDQorew0KKwlDUklUSUNBTF9SRUdJT04obV9zZW1hcGhvcmUpDQorCXsNCisJCW1fdG9sZXJhbmNlVHlwZSA9IGtBYnNvbHV0ZVRvbGVyYW5jZTsNCisJCW1fdG9sZXJhbmNlID0gYWJzVG9sZXJhbmNlOw0KKwl9DQorCUVORF9SRUdJT047DQorfQ0KKw0KKy8qDQorICogUmV0dXJuIHRydWUgaWYgdGhlIGVycm9yIGlzIHdpdGhpbiB0aGUgcGVyY2VudGFnZSBvZiB0aGUgdG90YWwgaW5wdXQgcmFuZ2UsDQorICogZGV0ZXJtaW5lZCBieSBTZXRUb2xlcmFuY2UuIFRoaXMgYXNzc3VtZXMgdGhhdCB0aGUgbWF4aW11bSBhbmQgbWluaW11bSBpbnB1dA0KKyAqIHdlcmUgc2V0IHVzaW5nIFNldElucHV0Lg0KKyAqIEN1cnJlbnRseSB0aGlzIGp1c3QgcmVwb3J0cyBvbiB0YXJnZXQgYXMgdGhlIGFjdHVhbCB2YWx1ZSBwYXNzZXMgdGhyb3VnaCB0aGUgc2V0cG9pbnQuDQorICogSWRlYWxseSBpdCBzaG91bGQgYmUgYmFzZWQgb24gYmVpbmcgd2l0aGluIHRoZSB0b2xlcmFuY2UgZm9yIHNvbWUgcGVyaW9kIG9mIHRpbWUuDQorICovDQorYm9vbCBQSURDb250cm9sbGVyOjpPblRhcmdldCgpDQorew0KKwlib29sIHRlbXA7DQorCUNSSVRJQ0FMX1JFR0lPTihtX3NlbWFwaG9yZSkNCisJew0KKwkJc3dpdGNoIChtX3RvbGVyYW5jZVR5cGUpIHsNCisJCWNhc2Uga1BlcmNlbnRUb2xlcmFuY2U6DQorCQkJdGVtcCA9IGZhYnMoR2V0RXJyb3IoKSkgPCAobV90b2xlcmFuY2UgLyAxMDAgKiAobV9tYXhpbXVtSW5wdXQgLSBtX21pbmltdW1JbnB1dCkpOw0KKwkJCWJyZWFrOw0KKwkJY2FzZSBrQWJzb2x1dGVUb2xlcmFuY2U6DQorCQkJdGVtcCA9IGZhYnMoR2V0RXJyb3IoKSkgPCBtX3RvbGVyYW5jZTsNCisJCQlicmVhazsNCisJCS8vVE9ETzogdGhpcyBjYXNlIG5lZWRzIGFuIGVycm9yDQorCQljYXNlIGtOb1RvbGVyYW5jZToNCisJCQl0ZW1wID0gZmFsc2U7DQorCQl9DQorCX0NCisJRU5EX1JFR0lPTjsNCisJcmV0dXJuIHRlbXA7DQorfQ0KKw0KKy8qKg0KKyAqIEJlZ2luIHJ1bm5pbmcgdGhlIFBJRENvbnRyb2xsZXINCisgKi8NCit2b2lkIFBJRENvbnRyb2xsZXI6OkVuYWJsZSgpDQorew0KKwlDUklUSUNBTF9SRUdJT04obV9zZW1hcGhvcmUpDQorCXsJCQkNCisJCW1fZW5hYmxlZCA9IHRydWU7DQorCX0NCisJRU5EX1JFR0lPTjsJDQorCQ0KKwlpZiAobV90YWJsZSAhPSBOVUxMKSB7DQorCQltX3RhYmxlLT5QdXRCb29sZWFuKCJlbmFibGVkIiwgdHJ1ZSk7DQorCX0NCit9DQorDQorLyoqDQorICogU3RvcCBydW5uaW5nIHRoZSBQSURDb250cm9sbGVyLCB0aGlzIHNldHMgdGhlIG91dHB1dCB0byB6ZXJvIGJlZm9yZSBzdG9wcGluZy4NCisgKi8NCit2b2lkIFBJRENvbnRyb2xsZXI6OkRpc2FibGUoKQ0KK3sNCisJQ1JJVElDQUxfUkVHSU9OKG1fc2VtYXBob3JlKQ0KKwl7DQorCQltX3BpZE91dHB1dC0+UElEV3JpdGUoMCk7DQorCQltX2VuYWJsZWQgPSBmYWxzZTsNCisJfQ0KKwlFTkRfUkVHSU9OOw0KKwkNCisJaWYgKG1fdGFibGUgIT0gTlVMTCkgew0KKwkJbV90YWJsZS0+UHV0Qm9vbGVhbigiZW5hYmxlZCIsIGZhbHNlKTsNCisJfQ0KK30NCisNCisvKioNCisgKiBSZXR1cm4gdHJ1ZSBpZiBQSURDb250cm9sbGVyIGlzIGVuYWJsZWQuDQorICovDQorYm9vbCBQSURDb250cm9sbGVyOjpJc0VuYWJsZWQoKQ0KK3sNCisJYm9vbCBlbmFibGVkOw0KKwlDUklUSUNBTF9SRUdJT04obV9zZW1hcGhvcmUpDQorCXsNCisJCWVuYWJsZWQgPSBtX2VuYWJsZWQ7DQorCX0NCisJRU5EX1JFR0lPTjsNCisJcmV0dXJuIGVuYWJsZWQ7DQorfQ0KKw0KKy8qKg0KKyAqIFJlc2V0IHRoZSBwcmV2aW91cyBlcnJvciwsIHRoZSBpbnRlZ3JhbCB0ZXJtLCBhbmQgZGlzYWJsZSB0aGUgY29udHJvbGxlci4NCisgKi8NCit2b2lkIFBJRENvbnRyb2xsZXI6OlJlc2V0KCkNCit7DQorCURpc2FibGUoKTsNCisNCisJQ1JJVElDQUxfUkVHSU9OKG1fc2VtYXBob3JlKQ0KKwl7DQorCQltX3ByZXZFcnJvciA9IDA7DQorCQltX3RvdGFsRXJyb3IgPSAwOw0KKwkJbV9yZXN1bHQgPSAwOw0KKwl9DQorCUVORF9SRUdJT047DQorfQ0KKw0KK3N0ZDo6c3RyaW5nIFBJRENvbnRyb2xsZXI6OkdldFNtYXJ0RGFzaGJvYXJkVHlwZSgpew0KKwlyZXR1cm4gIlBJRENvbnRyb2xsZXIiOw0KK30NCisNCit2b2lkIFBJRENvbnRyb2xsZXI6OkluaXRUYWJsZShJVGFibGUqIHRhYmxlKXsNCisJaWYobV90YWJsZSE9TlVMTCkNCisJCW1fdGFibGUtPlJlbW92ZVRhYmxlTGlzdGVuZXIodGhpcyk7DQorCW1fdGFibGUgPSB0YWJsZTsNCisJaWYobV90YWJsZSE9TlVMTCl7DQorCQltX3RhYmxlLT5QdXROdW1iZXIoa1AsIEdldFAoKSk7DQorCQltX3RhYmxlLT5QdXROdW1iZXIoa0ksIEdldEkoKSk7DQorCQltX3RhYmxlLT5QdXROdW1iZXIoa0QsIEdldEQoKSk7DQorCQltX3RhYmxlLT5QdXROdW1iZXIoa0YsIEdldEYoKSk7DQorCQltX3RhYmxlLT5QdXROdW1iZXIoa1NldHBvaW50LCBHZXRTZXRwb2ludCgpKTsNCisJCW1fdGFibGUtPlB1dEJvb2xlYW4oa0VuYWJsZWQsIElzRW5hYmxlZCgpKTsNCisJCW1fdGFibGUtPkFkZFRhYmxlTGlzdGVuZXIodGhpcywgZmFsc2UpOw0KKwl9DQorfQ0KKw0KK0lUYWJsZSogUElEQ29udHJvbGxlcjo6R2V0VGFibGUoKXsNCisJcmV0dXJuIG1fdGFibGU7DQorfQ0KKw0KK3ZvaWQgUElEQ29udHJvbGxlcjo6VmFsdWVDaGFuZ2VkKElUYWJsZSogc291cmNlLCBjb25zdCBzdGQ6OnN0cmluZyYga2V5LCBFbnRyeVZhbHVlIHZhbHVlLCBib29sIGlzTmV3KXsNCisJaWYgKGtleT09a1AgfHwga2V5PT1rSSB8fCBrZXk9PWtEIHx8IGtleT09a0YpIHsNCisJCWlmIChtX1AgIT0gbV90YWJsZS0+R2V0TnVtYmVyKGtQKSB8fCBtX0kgIT0gbV90YWJsZS0+R2V0TnVtYmVyKGtJKSB8fCBtX0QgIT0gbV90YWJsZS0+R2V0TnVtYmVyKGtEKSB8fCBtX0YgIT0gbV90YWJsZS0+R2V0TnVtYmVyKGtGKSAgKSB7DQorCQkJU2V0UElEKG1fdGFibGUtPkdldE51bWJlcihrUCwgMC4wKSwgbV90YWJsZS0+R2V0TnVtYmVyKGtJLCAwLjApLCBtX3RhYmxlLT5HZXROdW1iZXIoa0QsIDAuMCksIG1fdGFibGUtPkdldE51bWJlcihrRiwgMC4wKSk7DQorCQl9DQorCX0gZWxzZSBpZiAoa2V5PT1rU2V0cG9pbnQgJiYgbV9zZXRwb2ludCAhPSB2YWx1ZS5mKSB7DQorCQlTZXRTZXRwb2ludCh2YWx1ZS5mKTsNCisJfSBlbHNlIGlmIChrZXk9PWtFbmFibGVkICYmIG1fZW5hYmxlZCAhPSB2YWx1ZS5iKSB7DQorCQlpZiAodmFsdWUuYikgew0KKwkJCUVuYWJsZSgpOw0KKwkJfSBlbHNlIHsNCisJCQlEaXNhYmxlKCk7DQorCQl9DQorCX0NCit9DQorDQordm9pZCBQSURDb250cm9sbGVyOjpVcGRhdGVUYWJsZSgpIHsNCisJDQorfQ0KKw0KK3ZvaWQgUElEQ29udHJvbGxlcjo6U3RhcnRMaXZlV2luZG93TW9kZSgpIHsNCisJRGlzYWJsZSgpOw0KK30NCisNCit2b2lkIFBJRENvbnRyb2xsZXI6OlN0b3BMaXZlV2luZG93TW9kZSgpIHsNCisJDQorfQ0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL1BJRENvbnRyb2xsZXIuaCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL1BJRENvbnRyb2xsZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMmExOTZlCi0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvUElEQ29udHJvbGxlci5oCkBAIC0wLDAgKzEsMTA5IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy8qIENvcHlyaWdodCAoYykgRklSU1QgMjAwOC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4JCQkJCQkJICAqLw0KKy8qIE9wZW4gU291cmNlIFNvZnR3YXJlIC0gbWF5IGJlIG1vZGlmaWVkIGFuZCBzaGFyZWQgYnkgRlJDIHRlYW1zLiBUaGUgY29kZSAgICovDQorLyogbXVzdCBiZSBhY2NvbXBhbmllZCBieSB0aGUgRklSU1QgQlNEIGxpY2Vuc2UgZmlsZSBpbiAkKFdJTkRfQkFTRSkvV1BJTGliLiAgKi8NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKyNpZm5kZWYgUElEQ09OVFJPTExFUl9IXw0KKyNkZWZpbmUgUElEQ09OVFJPTExFUl9IXw0KKw0KKyNpbmNsdWRlICJCYXNlLmgiDQorI2luY2x1ZGUgInNlbUxpYi5oIg0KKyNpbmNsdWRlICJDb250cm9sbGVyLmgiDQorI2luY2x1ZGUgIkxpdmVXaW5kb3cvTGl2ZVdpbmRvdy5oIg0KKw0KK2NsYXNzIFBJRE91dHB1dDsNCitjbGFzcyBQSURTb3VyY2U7DQorY2xhc3MgTm90aWZpZXI7DQorDQorLyoqDQorICogQ2xhc3MgaW1wbGVtZW50cyBhIFBJRCBDb250cm9sIExvb3AuDQorICogDQorICogQ3JlYXRlcyBhIHNlcGFyYXRlIHRocmVhZCB3aGljaCByZWFkcyB0aGUgZ2l2ZW4gUElEU291cmNlIGFuZCB0YWtlcw0KKyAqIGNhcmUgb2YgdGhlIGludGVncmFsIGNhbGN1bGF0aW9ucywgYXMgd2VsbCBhcyB3cml0aW5nIHRoZSBnaXZlbg0KKyAqIFBJRE91dHB1dA0KKyAqLw0KK2NsYXNzIFBJRENvbnRyb2xsZXIgOiBwdWJsaWMgTGl2ZVdpbmRvd1NlbmRhYmxlLCBwdWJsaWMgQ29udHJvbGxlciwgcHVibGljIElUYWJsZUxpc3RlbmVyDQorew0KK3B1YmxpYzoNCisJUElEQ29udHJvbGxlcihmbG9hdCBwLCBmbG9hdCBpLCBmbG9hdCBkLA0KKwkJCQkJUElEU291cmNlICpzb3VyY2UsIFBJRE91dHB1dCAqb3V0cHV0LA0KKwkJCQkJZmxvYXQgcGVyaW9kID0gMC4wNSk7DQorCVBJRENvbnRyb2xsZXIoZmxvYXQgcCwgZmxvYXQgaSwgZmxvYXQgZCwgZmxvYXQgZiwNCisJCQkJCVBJRFNvdXJjZSAqc291cmNlLCBQSURPdXRwdXQgKm91dHB1dCwNCisJCQkJCWZsb2F0IHBlcmlvZCA9IDAuMDUpOw0KKwl2aXJ0dWFsIH5QSURDb250cm9sbGVyKCk7DQorCXZpcnR1YWwgZmxvYXQgR2V0KCk7DQorCXZpcnR1YWwgdm9pZCBTZXRDb250aW51b3VzKGJvb2wgY29udGludW91cyA9IHRydWUpOw0KKwl2aXJ0dWFsIHZvaWQgU2V0SW5wdXRSYW5nZShmbG9hdCBtaW5pbXVtSW5wdXQsIGZsb2F0IG1heGltdW1JbnB1dCk7DQorCXZpcnR1YWwgdm9pZCBTZXRPdXRwdXRSYW5nZShmbG9hdCBtaW1pbXVtT3V0cHV0LCBmbG9hdCBtYXhpbXVtT3V0cHV0KTsNCisJdmlydHVhbCB2b2lkIFNldFBJRChmbG9hdCBwLCBmbG9hdCBpLCBmbG9hdCBkKTsNCisJdmlydHVhbCB2b2lkIFNldFBJRChmbG9hdCBwLCBmbG9hdCBpLCBmbG9hdCBkLCBmbG9hdCBmKTsNCisJdmlydHVhbCBmbG9hdCBHZXRQKCk7DQorCXZpcnR1YWwgZmxvYXQgR2V0SSgpOw0KKwl2aXJ0dWFsIGZsb2F0IEdldEQoKTsNCisJdmlydHVhbCBmbG9hdCBHZXRGKCk7DQorCQ0KKwl2aXJ0dWFsIHZvaWQgU2V0U2V0cG9pbnQoZmxvYXQgc2V0cG9pbnQpOw0KKwl2aXJ0dWFsIGZsb2F0IEdldFNldHBvaW50KCk7DQorDQorCXZpcnR1YWwgZmxvYXQgR2V0RXJyb3IoKTsNCisJDQorCXZpcnR1YWwgdm9pZCBTZXRUb2xlcmFuY2UoZmxvYXQgcGVyY2VudCk7DQorCXZpcnR1YWwgdm9pZCBTZXRBYnNvbHV0ZVRvbGVyYW5jZShmbG9hdCBhYnNWYWx1ZSk7DQorCXZpcnR1YWwgdm9pZCBTZXRQZXJjZW50VG9sZXJhbmNlKGZsb2F0IHBlcmNlbnRWYWx1ZSk7DQorCXZpcnR1YWwgYm9vbCBPblRhcmdldCgpOw0KKwkNCisJdmlydHVhbCB2b2lkIEVuYWJsZSgpOw0KKwl2aXJ0dWFsIHZvaWQgRGlzYWJsZSgpOw0KKwl2aXJ0dWFsIGJvb2wgSXNFbmFibGVkKCk7DQorCQ0KKwl2aXJ0dWFsIHZvaWQgUmVzZXQoKTsNCisJDQorCXZpcnR1YWwgdm9pZCBJbml0VGFibGUoSVRhYmxlKiB0YWJsZSk7DQorDQorcHJpdmF0ZToNCisJZmxvYXQgbV9QOwkJCS8vIGZhY3RvciBmb3IgInByb3BvcnRpb25hbCIgY29udHJvbA0KKwlmbG9hdCBtX0k7CQkJLy8gZmFjdG9yIGZvciAiaW50ZWdyYWwiIGNvbnRyb2wNCisJZmxvYXQgbV9EOwkJCS8vIGZhY3RvciBmb3IgImRlcml2YXRpdmUiIGNvbnRyb2wNCisJZmxvYXQgbV9GOwkJCS8vIGZhY3RvciBmb3IgImZlZWQgZm9yd2FyZCIgY29udHJvbA0KKwlmbG9hdCBtX21heGltdW1PdXRwdXQ7CS8vIHxtYXhpbXVtIG91dHB1dHwNCisJZmxvYXQgbV9taW5pbXVtT3V0cHV0OwkvLyB8bWluaW11bSBvdXRwdXR8DQorCWZsb2F0IG1fbWF4aW11bUlucHV0OwkJLy8gbWF4aW11bSBpbnB1dCAtIGxpbWl0IHNldHBvaW50IHRvIHRoaXMNCisJZmxvYXQgbV9taW5pbXVtSW5wdXQ7CQkvLyBtaW5pbXVtIGlucHV0IC0gbGltaXQgc2V0cG9pbnQgdG8gdGhpcw0KKwlib29sIG1fY29udGludW91czsJLy8gZG8gdGhlIGVuZHBvaW50cyB3cmFwIGFyb3VuZD8gZWcuIEFic29sdXRlIGVuY29kZXINCisJYm9vbCBtX2VuYWJsZWQ7IAkJCS8vaXMgdGhlIHBpZCBjb250cm9sbGVyIGVuYWJsZWQNCisJZmxvYXQgbV9wcmV2RXJyb3I7CS8vIHRoZSBwcmlvciBzZW5zb3IgaW5wdXQgKHVzZWQgdG8gY29tcHV0ZSB2ZWxvY2l0eSkNCisJZG91YmxlIG1fdG90YWxFcnJvcjsgLy90aGUgc3VtIG9mIHRoZSBlcnJvcnMgZm9yIHVzZSBpbiB0aGUgaW50ZWdyYWwgY2FsYw0KKwllbnVtIHtrQWJzb2x1dGVUb2xlcmFuY2UsIGtQZXJjZW50VG9sZXJhbmNlLCBrTm9Ub2xlcmFuY2V9IG1fdG9sZXJhbmNlVHlwZTsNCisJZmxvYXQgbV90b2xlcmFuY2U7CS8vdGhlIHBlcmNldGFnZSBvciBhYnNvbHV0ZSBlcnJvciB0aGF0IGlzIGNvbnNpZGVyZWQgb24gdGFyZ2V0DQorCWZsb2F0IG1fc2V0cG9pbnQ7DQorCWZsb2F0IG1fZXJyb3I7DQorCWZsb2F0IG1fcmVzdWx0Ow0KKwlmbG9hdCBtX3BlcmlvZDsNCisJDQorCVNFTV9JRCBtX3NlbWFwaG9yZTsNCisJDQorCVBJRFNvdXJjZSAqbV9waWRJbnB1dDsNCisJUElET3V0cHV0ICptX3BpZE91dHB1dDsNCisJTm90aWZpZXIgKm1fY29udHJvbExvb3A7DQorDQorCXZvaWQgSW5pdGlhbGl6ZShmbG9hdCBwLCBmbG9hdCBpLCBmbG9hdCBkLCBmbG9hdCBmLA0KKwkJCQkJUElEU291cmNlICpzb3VyY2UsIFBJRE91dHB1dCAqb3V0cHV0LA0KKwkJCQkJZmxvYXQgcGVyaW9kID0gMC4wNSk7DQorCXN0YXRpYyB2b2lkIENhbGxDYWxjdWxhdGUodm9pZCAqY29udHJvbGxlcik7DQorCXZvaWQgQ2FsY3VsYXRlKCk7DQorCQ0KKwl2aXJ0dWFsIElUYWJsZSogR2V0VGFibGUoKTsNCisJdmlydHVhbCBzdGQ6OnN0cmluZyBHZXRTbWFydERhc2hib2FyZFR5cGUoKTsNCisJdmlydHVhbCB2b2lkIFZhbHVlQ2hhbmdlZChJVGFibGUqIHNvdXJjZSwgY29uc3Qgc3RkOjpzdHJpbmcmIGtleSwgRW50cnlWYWx1ZSB2YWx1ZSwgYm9vbCBpc05ldyk7DQorCXZpcnR1YWwgdm9pZCBVcGRhdGVUYWJsZSgpOw0KKwl2aXJ0dWFsIHZvaWQgU3RhcnRMaXZlV2luZG93TW9kZSgpOw0KKwl2aXJ0dWFsIHZvaWQgU3RvcExpdmVXaW5kb3dNb2RlKCk7DQorcHJvdGVjdGVkOg0KKwlJVGFibGUqIG1fdGFibGU7DQorDQorCURJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihQSURDb250cm9sbGVyKTsNCit9Ow0KKw0KKyNlbmRpZg0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL1BJRE91dHB1dC5oIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvUElET3V0cHV0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmZkMDNjZQotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL1BJRE91dHB1dC5oCkBAIC0wLDAgKzEsMjQgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorLyogQ29weXJpZ2h0IChjKSBGSVJTVCAyMDA4LiBBbGwgUmlnaHRzIFJlc2VydmVkLgkJCQkJCQkgICovDQorLyogT3BlbiBTb3VyY2UgU29mdHdhcmUgLSBtYXkgYmUgbW9kaWZpZWQgYW5kIHNoYXJlZCBieSBGUkMgdGVhbXMuIFRoZSBjb2RlICAgKi8NCisvKiBtdXN0IGJlIGFjY29tcGFuaWVkIGJ5IHRoZSBGSVJTVCBCU0QgbGljZW5zZSBmaWxlIGluICQoV0lORF9CQVNFKS9XUElMaWIuICAqLw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorI2lmbmRlZiBQSURfT1VUUFVUX0gNCisjZGVmaW5lIFBJRF9PVVRQVVRfSA0KKw0KKyNpbmNsdWRlICJCYXNlLmgiDQorDQorLyoqDQorICogUElET3V0cHV0IGludGVyZmFjZSBpcyBhIGdlbmVyaWMgb3V0cHV0IGZvciB0aGUgUElEIGNsYXNzLg0KKyAqIFBXTXMgdXNlIHRoaXMgY2xhc3MuDQorICogVXNlcnMgaW1wbGVtZW50IHRoaXMgaW50ZXJmYWNlIHRvIGFsbG93IGZvciBhIFBJRENvbnRyb2xsZXIgdG8gDQorICogcmVhZCBkaXJlY3RseSBmcm9tIHRoZSBpbnB1dHMNCisgKi8NCitjbGFzcyBQSURPdXRwdXQNCit7DQorcHVibGljOg0KKwl2aXJ0dWFsIHZvaWQgUElEV3JpdGUoZmxvYXQgb3V0cHV0KSA9IDA7DQorfTsNCisNCisjZW5kaWYNCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9QSURTb3VyY2UuaCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL1BJRFNvdXJjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0ZDY3ODAKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9QSURTb3VyY2UuaApAQCAtMCwwICsxLDIxIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy8qIENvcHlyaWdodCAoYykgRklSU1QgMjAwOC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4JCQkJCQkJICAqLw0KKy8qIE9wZW4gU291cmNlIFNvZnR3YXJlIC0gbWF5IGJlIG1vZGlmaWVkIGFuZCBzaGFyZWQgYnkgRlJDIHRlYW1zLiBUaGUgY29kZSAgICovDQorLyogbXVzdCBiZSBhY2NvbXBhbmllZCBieSB0aGUgRklSU1QgQlNEIGxpY2Vuc2UgZmlsZSBpbiAkKFdJTkRfQkFTRSkvV1BJTGliLiAgKi8NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKyNpZm5kZWYgUElEX1NPVVJDRV9IDQorI2RlZmluZSBQSURfU09VUkNFX0gNCisNCisvKioNCisgKiBQSURTb3VyY2UgaW50ZXJmYWNlIGlzIGEgZ2VuZXJpYyBzZW5zb3Igc291cmNlIGZvciB0aGUgUElEIGNsYXNzLg0KKyAqIEFsbCBzZW5zb3JzIHRoYXQgY2FuIGJlIHVzZWQgd2l0aCB0aGUgUElEIGNsYXNzIHdpbGwgaW1wbGVtZW50IHRoZSBQSURTb3VyY2UgdGhhdA0KKyAqIHJldHVybnMgYSBzdGFuZGFyZCB2YWx1ZSB0aGF0IHdpbGwgYmUgdXNlZCBpbiB0aGUgUElEIGNvZGUuDQorICovDQorY2xhc3MgUElEU291cmNlDQorew0KK3B1YmxpYzoNCisJdmlydHVhbCBkb3VibGUgUElER2V0KCkgPSAwOw0KK307DQorDQorI2VuZGlmDQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvUFBDNjAzZ251L01ha2VmaWxlIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvUFBDNjAzZ251L01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxMDQ3MDAKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9QUEM2MDNnbnUvTWFrZWZpbGUKQEAgLTAsMCArMSwxMDc2IEBACisjIFdpbmQgUml2ZXIgV29ya2JlbmNoIGdlbmVyYXRlZCBNYWtlZmlsZS4NCisjIERvIG5vdCBlZGl0ISEhDQorIw0KKyMgVGhlIGZpbGUgIi53cm1ha2VmaWxlIiBpcyB0aGUgdGVtcGxhdGUgdXNlZCBieSB0aGUgV2luZCBSaXZlciBXb3JrYmVuY2ggdG8NCisjIGdlbmVyYXRlIHRoZSBtYWtlZmlsZXMgb2YgdGhpcyBwcm9qZWN0LiBBZGQgdXNlci1zcGVjaWZpYyBidWlsZCB0YXJnZXRzIGFuZA0KKyMgbWFrZSBydWxlcyBvbmx5KCEpIGluIHRoaXMgcHJvamVjdCdzICIud3JtYWtlZmlsZSIgZmlsZS4gVGhlc2Ugd2lsbCB0aGVuIGJlDQorIyBhdXRvbWF0aWNhbGx5IGR1bXBlZCBpbnRvIHRoZSBtYWtlZmlsZXMuDQorDQorV0lORF9IT01FIDo9ICQoc3Vic3QgXCwvLCQoV0lORF9IT01FKSkNCitXSU5EX0JBU0UgOj0gJChzdWJzdCBcLC8sJChXSU5EX0JBU0UpKQ0KK1dJTkRfVVNSIDo9ICQoc3Vic3QgXCwvLCQoV0lORF9VU1IpKQ0KKw0KK2FsbCA6IHByZV9idWlsZCBtYWluX2FsbCBwb3N0X2J1aWxkDQorDQorX2NsZWFuIDo6DQorCUBlY2hvICJtYWtlOiByZW1vdmluZyB0YXJnZXRzIGFuZCBvYmplY3RzIG9mIGBwd2RgIg0KKw0KK1RSQUNFPTANCitUUkFDRU9OPSQoVFJBQ0U6MD1AKQ0KK1RSQUNFX0ZMQUc9JChUUkFDRU9OOjE9KQ0KKw0KK01BS0VGSUxFIDo9IE1ha2VmaWxlDQorDQorRkxFWElCTEVfQlVJTEQgOj0gMQ0KKw0KK0JVSUxEX1NQRUMgPSBQUEM2MDNnbnUNCitERUJVR19NT0RFID0gMQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitNT0RFX0RJUiA6PSBEZWJ1Zw0KK2Vsc2UNCitNT0RFX0RJUiA6PSBOb25EZWJ1Zw0KK2VuZGlmDQorT0JKX0RJUiA6PSAuDQorV1NfUk9PVF9ESVIgOj0gQzovV2luZFJpdmVyL3dvcmtzcGFjZQ0KK1BSSl9ST09UX0RJUiA6PSAkKFdTX1JPT1RfRElSKS9XUElMaWINCisNCisNCisNCisjR2xvYmFsIEJ1aWxkIE1hY3Jvcw0KK1BST0pFQ1RfVFlQRSA9IERLTQ0KK0RFRklORVMgPSANCitFWFBBTkRfREJHID0gMA0KKw0KKw0KKyNCdWlsZFNwZWMgc3BlY2lmaWMgQnVpbGQgTWFjcm9zDQorVlhfQ1BVX0ZBTUlMWSA9IHBwYw0KK0NQVSA9IFBQQzYwMw0KK1RPT0xfRkFNSUxZID0gZ251DQorVE9PTCA9IGdudQ0KK1RPT0xfUEFUSCA9IA0KK0NDX0FSQ0hfU1BFQyA9IC1tY3B1PTYwMyAtbXN0cmljdC1hbGlnbiAtbW5vLWltcGxpY2l0LWZwIC1tbG9uZ2NhbGwNCitMSUJQQVRIID0gDQorTElCUyA9IA0KKw0KK0lERV9JTkNMVURFUyA9IC1JLi4gLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2ggLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2gvd3JuL2NvcmVpcCANCisNCitJREVfTElCUkFSSUVTID0gDQorDQorSURFX0RFRklORVMgPSANCisNCisNCisNCisjQnVpbGRUb29sIGZsYWdzDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQy1Db21waWxlciA9IC1nDQorREVCVUdGTEFHU19DKystQ29tcGlsZXIgPSAtZw0KK0RFQlVHRkxBR1NfTGlua2VyID0gLWcNCitERUJVR0ZMQUdTX1BhcnRpYWwtSW1hZ2UtTGlua2VyID0gDQorREVCVUdGTEFHU19MaWJyYXJpYW4gPSANCitERUJVR0ZMQUdTX0Fzc2VtYmxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQy1Db21waWxlciA9IC1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4NCitERUJVR0ZMQUdTX0MrKy1Db21waWxlciA9IC1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4NCitERUJVR0ZMQUdTX0xpbmtlciA9IC1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4NCitERUJVR0ZMQUdTX1BhcnRpYWwtSW1hZ2UtTGlua2VyID0gDQorREVCVUdGTEFHU19MaWJyYXJpYW4gPSANCitERUJVR0ZMQUdTX0Fzc2VtYmxlciA9IC1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4NCitlbmRpZg0KKw0KKw0KKyNQcm9qZWN0IFRhcmdldHMNCitQUk9KRUNUX1RBUkdFVFMgPSBXUElMaWIvJChNT0RFX0RJUikvV1BJTGliLmEgXA0KKwkgSmF2YUNhbWVyYUxpYi8kKE1PREVfRElSKS9KYXZhQ2FtZXJhTGliLmENCisNCisNCisjUnVsZXMNCisNCisjIFdQSUxpYg0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitXUElMaWIvJChNT0RFX0RJUikvJSA6IERFQlVHRkxBR1NfQy1Db21waWxlciA9IC1nDQorV1BJTGliLyQoTU9ERV9ESVIpLyUgOiBERUJVR0ZMQUdTX0MrKy1Db21waWxlciA9IC1nDQorV1BJTGliLyQoTU9ERV9ESVIpLyUgOiBERUJVR0ZMQUdTX0xpbmtlciA9IC1nDQorV1BJTGliLyQoTU9ERV9ESVIpLyUgOiBERUJVR0ZMQUdTX1BhcnRpYWwtSW1hZ2UtTGlua2VyID0gDQorV1BJTGliLyQoTU9ERV9ESVIpLyUgOiBERUJVR0ZMQUdTX0xpYnJhcmlhbiA9IA0KK1dQSUxpYi8kKE1PREVfRElSKS8lIDogREVCVUdGTEFHU19Bc3NlbWJsZXIgPSAtZw0KK2Vsc2UNCitXUElMaWIvJChNT0RFX0RJUikvJSA6IERFQlVHRkxBR1NfQy1Db21waWxlciA9IC1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4NCitXUElMaWIvJChNT0RFX0RJUikvJSA6IERFQlVHRkxBR1NfQysrLUNvbXBpbGVyID0gLU8yIC1mc3RyZW5ndGgtcmVkdWNlIC1mbm8tYnVpbHRpbg0KK1dQSUxpYi8kKE1PREVfRElSKS8lIDogREVCVUdGTEFHU19MaW5rZXIgPSAtTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluDQorV1BJTGliLyQoTU9ERV9ESVIpLyUgOiBERUJVR0ZMQUdTX1BhcnRpYWwtSW1hZ2UtTGlua2VyID0gDQorV1BJTGliLyQoTU9ERV9ESVIpLyUgOiBERUJVR0ZMQUdTX0xpYnJhcmlhbiA9IA0KK1dQSUxpYi8kKE1PREVfRElSKS8lIDogREVCVUdGTEFHU19Bc3NlbWJsZXIgPSAtTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluDQorZW5kaWYNCitXUElMaWIvJChNT0RFX0RJUikvJSA6IElERV9JTkNMVURFUyA9IC1JLi4gLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2ggLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2gvd3JuL2NvcmVpcCANCitXUElMaWIvJChNT0RFX0RJUikvJSA6IElERV9MSUJSQVJJRVMgPSANCitXUElMaWIvJChNT0RFX0RJUikvJSA6IElERV9ERUZJTkVTID0gDQorV1BJTGliLyQoTU9ERV9ESVIpLyUgOiBQUk9KRUNUX1RZUEUgPSBES00NCitXUElMaWIvJChNT0RFX0RJUikvJSA6IERFRklORVMgPSANCitXUElMaWIvJChNT0RFX0RJUikvJSA6IEVYUEFORF9EQkcgPSAwDQorV1BJTGliLyQoTU9ERV9ESVIpLyUgOiBWWF9DUFVfRkFNSUxZID0gcHBjDQorV1BJTGliLyQoTU9ERV9ESVIpLyUgOiBDUFUgPSBQUEM2MDMNCitXUElMaWIvJChNT0RFX0RJUikvJSA6IFRPT0xfRkFNSUxZID0gZ251DQorV1BJTGliLyQoTU9ERV9ESVIpLyUgOiBUT09MID0gZ251DQorV1BJTGliLyQoTU9ERV9ESVIpLyUgOiBUT09MX1BBVEggPSANCitXUElMaWIvJChNT0RFX0RJUikvJSA6IENDX0FSQ0hfU1BFQyA9IC1tY3B1PTYwMyAtbXN0cmljdC1hbGlnbiAtbW5vLWltcGxpY2l0LWZwIC1tbG9uZ2NhbGwNCitXUElMaWIvJChNT0RFX0RJUikvJSA6IExJQlBBVEggPSANCitXUElMaWIvJChNT0RFX0RJUikvJSA6IExJQlMgPSANCitXUElMaWIvJChNT0RFX0RJUikvJSA6IE9CSl9ESVIgOj0gV1BJTGliLyQoTU9ERV9ESVIpDQorDQorV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL0FEWEwzNDVfSTJDLm8gOiAkKFBSSl9ST09UX0RJUikvQURYTDM0NV9JMkMuY3BwICQoRk9SQ0VfRklMRV9CVUlMRCkNCisJJChUUkFDRV9GTEFHKWlmIFsgISAtZCAiYGRpcm5hbWUgIiRAImAiIF07IHRoZW4gbWtkaXIgLXAgImBkaXJuYW1lICIkQCJgIjsgZmk7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAtRCdTVk5fUkVWPSIkKHNoZWxsIHN2bnZlcnNpb24gLW4gLi4pIicgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCisNCitXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvQURYTDM0NV9TUEkubyA6ICQoUFJKX1JPT1RfRElSKS9BRFhMMzQ1X1NQSS5jcHAgJChGT1JDRV9GSUxFX0JVSUxEKQ0KKwkkKFRSQUNFX0ZMQUcpaWYgWyAhIC1kICJgZGlybmFtZSAiJEAiYCIgXTsgdGhlbiBta2RpciAtcCAiYGRpcm5hbWUgIiRAImAiOyBmaTsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMIC1EJ1NWTl9SRVY9IiQoc2hlbGwgc3ZudmVyc2lvbiAtbiAuLikiJyAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKw0KK1dQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9BY2NlbGVyb21ldGVyLm8gOiAkKFBSSl9ST09UX0RJUikvQWNjZWxlcm9tZXRlci5jcHAgJChGT1JDRV9GSUxFX0JVSUxEKQ0KKwkkKFRSQUNFX0ZMQUcpaWYgWyAhIC1kICJgZGlybmFtZSAiJEAiYCIgXTsgdGhlbiBta2RpciAtcCAiYGRpcm5hbWUgIiRAImAiOyBmaTsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMIC1EJ1NWTl9SRVY9IiQoc2hlbGwgc3ZudmVyc2lvbiAtbiAuLikiJyAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKw0KK1dQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9BbmFsb2dDaGFubmVsLm8gOiAkKFBSSl9ST09UX0RJUikvQW5hbG9nQ2hhbm5lbC5jcHAgJChGT1JDRV9GSUxFX0JVSUxEKQ0KKwkkKFRSQUNFX0ZMQUcpaWYgWyAhIC1kICJgZGlybmFtZSAiJEAiYCIgXTsgdGhlbiBta2RpciAtcCAiYGRpcm5hbWUgIiRAImAiOyBmaTsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMIC1EJ1NWTl9SRVY9IiQoc2hlbGwgc3ZudmVyc2lvbiAtbiAuLikiJyAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKw0KK1dQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9BbmFsb2dNb2R1bGUubyA6ICQoUFJKX1JPT1RfRElSKS9BbmFsb2dNb2R1bGUuY3BwICQoRk9SQ0VfRklMRV9CVUlMRCkNCisJJChUUkFDRV9GTEFHKWlmIFsgISAtZCAiYGRpcm5hbWUgIiRAImAiIF07IHRoZW4gbWtkaXIgLXAgImBkaXJuYW1lICIkQCJgIjsgZmk7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAtRCdTVk5fUkVWPSIkKHNoZWxsIHN2bnZlcnNpb24gLW4gLi4pIicgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCisNCitXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvQW5hbG9nVHJpZ2dlci5vIDogJChQUkpfUk9PVF9ESVIpL0FuYWxvZ1RyaWdnZXIuY3BwICQoRk9SQ0VfRklMRV9CVUlMRCkNCisJJChUUkFDRV9GTEFHKWlmIFsgISAtZCAiYGRpcm5hbWUgIiRAImAiIF07IHRoZW4gbWtkaXIgLXAgImBkaXJuYW1lICIkQCJgIjsgZmk7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAtRCdTVk5fUkVWPSIkKHNoZWxsIHN2bnZlcnNpb24gLW4gLi4pIicgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCisNCitXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvQW5hbG9nVHJpZ2dlck91dHB1dC5vIDogJChQUkpfUk9PVF9ESVIpL0FuYWxvZ1RyaWdnZXJPdXRwdXQuY3BwICQoRk9SQ0VfRklMRV9CVUlMRCkNCisJJChUUkFDRV9GTEFHKWlmIFsgISAtZCAiYGRpcm5hbWUgIiRAImAiIF07IHRoZW4gbWtkaXIgLXAgImBkaXJuYW1lICIkQCJgIjsgZmk7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAtRCdTVk5fUkVWPSIkKHNoZWxsIHN2bnZlcnNpb24gLW4gLi4pIicgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCisNCitXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvQnV0dG9ucy9BbmFsb2dJT0J1dHRvbi5vIDogJChQUkpfUk9PVF9ESVIpL0J1dHRvbnMvQW5hbG9nSU9CdXR0b24uY3BwICQoRk9SQ0VfRklMRV9CVUlMRCkNCisJJChUUkFDRV9GTEFHKWlmIFsgISAtZCAiYGRpcm5hbWUgIiRAImAiIF07IHRoZW4gbWtkaXIgLXAgImBkaXJuYW1lICIkQCJgIjsgZmk7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAtRCdTVk5fUkVWPSIkKHNoZWxsIHN2bnZlcnNpb24gLW4gLi4pIicgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCisNCitXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvQnV0dG9ucy9CdXR0b24ubyA6ICQoUFJKX1JPT1RfRElSKS9CdXR0b25zL0J1dHRvbi5jcHAgJChGT1JDRV9GSUxFX0JVSUxEKQ0KKwkkKFRSQUNFX0ZMQUcpaWYgWyAhIC1kICJgZGlybmFtZSAiJEAiYCIgXTsgdGhlbiBta2RpciAtcCAiYGRpcm5hbWUgIiRAImAiOyBmaTsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMIC1EJ1NWTl9SRVY9IiQoc2hlbGwgc3ZudmVyc2lvbiAtbiAuLikiJyAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKw0KK1dQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9CdXR0b25zL0J1dHRvblNjaGVkdWxlci5vIDogJChQUkpfUk9PVF9ESVIpL0J1dHRvbnMvQnV0dG9uU2NoZWR1bGVyLmNwcCAkKEZPUkNFX0ZJTEVfQlVJTEQpDQorCSQoVFJBQ0VfRkxBRylpZiBbICEgLWQgImBkaXJuYW1lICIkQCJgIiBdOyB0aGVuIG1rZGlyIC1wICJgZGlybmFtZSAiJEAiYCI7IGZpOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgLUQnU1ZOX1JFVj0iJChzaGVsbCBzdm52ZXJzaW9uIC1uIC4uKSInICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorDQorV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL0J1dHRvbnMvRGlnaXRhbElPQnV0dG9uLm8gOiAkKFBSSl9ST09UX0RJUikvQnV0dG9ucy9EaWdpdGFsSU9CdXR0b24uY3BwICQoRk9SQ0VfRklMRV9CVUlMRCkNCisJJChUUkFDRV9GTEFHKWlmIFsgISAtZCAiYGRpcm5hbWUgIiRAImAiIF07IHRoZW4gbWtkaXIgLXAgImBkaXJuYW1lICIkQCJgIjsgZmk7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAtRCdTVk5fUkVWPSIkKHNoZWxsIHN2bnZlcnNpb24gLW4gLi4pIicgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCisNCitXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvQnV0dG9ucy9IZWxkQnV0dG9uU2NoZWR1bGVyLm8gOiAkKFBSSl9ST09UX0RJUikvQnV0dG9ucy9IZWxkQnV0dG9uU2NoZWR1bGVyLmNwcCAkKEZPUkNFX0ZJTEVfQlVJTEQpDQorCSQoVFJBQ0VfRkxBRylpZiBbICEgLWQgImBkaXJuYW1lICIkQCJgIiBdOyB0aGVuIG1rZGlyIC1wICJgZGlybmFtZSAiJEAiYCI7IGZpOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgLUQnU1ZOX1JFVj0iJChzaGVsbCBzdm52ZXJzaW9uIC1uIC4uKSInICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorDQorV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL0J1dHRvbnMvSW50ZXJuYWxCdXR0b24ubyA6ICQoUFJKX1JPT1RfRElSKS9CdXR0b25zL0ludGVybmFsQnV0dG9uLmNwcCAkKEZPUkNFX0ZJTEVfQlVJTEQpDQorCSQoVFJBQ0VfRkxBRylpZiBbICEgLWQgImBkaXJuYW1lICIkQCJgIiBdOyB0aGVuIG1rZGlyIC1wICJgZGlybmFtZSAiJEAiYCI7IGZpOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgLUQnU1ZOX1JFVj0iJChzaGVsbCBzdm52ZXJzaW9uIC1uIC4uKSInICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorDQorV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL0J1dHRvbnMvSm95c3RpY2tCdXR0b24ubyA6ICQoUFJKX1JPT1RfRElSKS9CdXR0b25zL0pveXN0aWNrQnV0dG9uLmNwcCAkKEZPUkNFX0ZJTEVfQlVJTEQpDQorCSQoVFJBQ0VfRkxBRylpZiBbICEgLWQgImBkaXJuYW1lICIkQCJgIiBdOyB0aGVuIG1rZGlyIC1wICJgZGlybmFtZSAiJEAiYCI7IGZpOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgLUQnU1ZOX1JFVj0iJChzaGVsbCBzdm52ZXJzaW9uIC1uIC4uKSInICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorDQorV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL0J1dHRvbnMvTmV0d29ya0J1dHRvbi5vIDogJChQUkpfUk9PVF9ESVIpL0J1dHRvbnMvTmV0d29ya0J1dHRvbi5jcHAgJChGT1JDRV9GSUxFX0JVSUxEKQ0KKwkkKFRSQUNFX0ZMQUcpaWYgWyAhIC1kICJgZGlybmFtZSAiJEAiYCIgXTsgdGhlbiBta2RpciAtcCAiYGRpcm5hbWUgIiRAImAiOyBmaTsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMIC1EJ1NWTl9SRVY9IiQoc2hlbGwgc3ZudmVyc2lvbiAtbiAuLikiJyAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKw0KK1dQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9CdXR0b25zL1ByZXNzZWRCdXR0b25TY2hlZHVsZXIubyA6ICQoUFJKX1JPT1RfRElSKS9CdXR0b25zL1ByZXNzZWRCdXR0b25TY2hlZHVsZXIuY3BwICQoRk9SQ0VfRklMRV9CVUlMRCkNCisJJChUUkFDRV9GTEFHKWlmIFsgISAtZCAiYGRpcm5hbWUgIiRAImAiIF07IHRoZW4gbWtkaXIgLXAgImBkaXJuYW1lICIkQCJgIjsgZmk7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAtRCdTVk5fUkVWPSIkKHNoZWxsIHN2bnZlcnNpb24gLW4gLi4pIicgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCisNCitXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvQnV0dG9ucy9SZWxlYXNlZEJ1dHRvblNjaGVkdWxlci5vIDogJChQUkpfUk9PVF9ESVIpL0J1dHRvbnMvUmVsZWFzZWRCdXR0b25TY2hlZHVsZXIuY3BwICQoRk9SQ0VfRklMRV9CVUlMRCkNCisJJChUUkFDRV9GTEFHKWlmIFsgISAtZCAiYGRpcm5hbWUgIiRAImAiIF07IHRoZW4gbWtkaXIgLXAgImBkaXJuYW1lICIkQCJgIjsgZmk7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAtRCdTVk5fUkVWPSIkKHNoZWxsIHN2bnZlcnNpb24gLW4gLi4pIicgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCisNCitXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvQnV0dG9ucy9UcmlnZ2VyLm8gOiAkKFBSSl9ST09UX0RJUikvQnV0dG9ucy9UcmlnZ2VyLmNwcCAkKEZPUkNFX0ZJTEVfQlVJTEQpDQorCSQoVFJBQ0VfRkxBRylpZiBbICEgLWQgImBkaXJuYW1lICIkQCJgIiBdOyB0aGVuIG1rZGlyIC1wICJgZGlybmFtZSAiJEAiYCI7IGZpOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgLUQnU1ZOX1JFVj0iJChzaGVsbCBzdm52ZXJzaW9uIC1uIC4uKSInICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorDQorV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL0NBTkphZ3Vhci5vIDogJChQUkpfUk9PVF9ESVIpL0NBTkphZ3Vhci5jcHAgJChGT1JDRV9GSUxFX0JVSUxEKQ0KKwkkKFRSQUNFX0ZMQUcpaWYgWyAhIC1kICJgZGlybmFtZSAiJEAiYCIgXTsgdGhlbiBta2RpciAtcCAiYGRpcm5hbWUgIiRAImAiOyBmaTsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMIC1EJ1NWTl9SRVY9IiQoc2hlbGwgc3ZudmVyc2lvbiAtbiAuLikiJyAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKw0KK1dQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9Db21tYW5kcy9Db21tYW5kLm8gOiAkKFBSSl9ST09UX0RJUikvQ29tbWFuZHMvQ29tbWFuZC5jcHAgJChGT1JDRV9GSUxFX0JVSUxEKQ0KKwkkKFRSQUNFX0ZMQUcpaWYgWyAhIC1kICJgZGlybmFtZSAiJEAiYCIgXTsgdGhlbiBta2RpciAtcCAiYGRpcm5hbWUgIiRAImAiOyBmaTsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMIC1EJ1NWTl9SRVY9IiQoc2hlbGwgc3ZudmVyc2lvbiAtbiAuLikiJyAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKw0KK1dQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9Db21tYW5kcy9Db21tYW5kR3JvdXAubyA6ICQoUFJKX1JPT1RfRElSKS9Db21tYW5kcy9Db21tYW5kR3JvdXAuY3BwICQoRk9SQ0VfRklMRV9CVUlMRCkNCisJJChUUkFDRV9GTEFHKWlmIFsgISAtZCAiYGRpcm5hbWUgIiRAImAiIF07IHRoZW4gbWtkaXIgLXAgImBkaXJuYW1lICIkQCJgIjsgZmk7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAtRCdTVk5fUkVWPSIkKHNoZWxsIHN2bnZlcnNpb24gLW4gLi4pIicgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCisNCitXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvQ29tbWFuZHMvQ29tbWFuZEdyb3VwRW50cnkubyA6ICQoUFJKX1JPT1RfRElSKS9Db21tYW5kcy9Db21tYW5kR3JvdXBFbnRyeS5jcHAgJChGT1JDRV9GSUxFX0JVSUxEKQ0KKwkkKFRSQUNFX0ZMQUcpaWYgWyAhIC1kICJgZGlybmFtZSAiJEAiYCIgXTsgdGhlbiBta2RpciAtcCAiYGRpcm5hbWUgIiRAImAiOyBmaTsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMIC1EJ1NWTl9SRVY9IiQoc2hlbGwgc3ZudmVyc2lvbiAtbiAuLikiJyAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKw0KK1dQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9Db21tYW5kcy9QSURDb21tYW5kLm8gOiAkKFBSSl9ST09UX0RJUikvQ29tbWFuZHMvUElEQ29tbWFuZC5jcHAgJChGT1JDRV9GSUxFX0JVSUxEKQ0KKwkkKFRSQUNFX0ZMQUcpaWYgWyAhIC1kICJgZGlybmFtZSAiJEAiYCIgXTsgdGhlbiBta2RpciAtcCAiYGRpcm5hbWUgIiRAImAiOyBmaTsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMIC1EJ1NWTl9SRVY9IiQoc2hlbGwgc3ZudmVyc2lvbiAtbiAuLikiJyAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKw0KK1dQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9Db21tYW5kcy9QSURTdWJzeXN0ZW0ubyA6ICQoUFJKX1JPT1RfRElSKS9Db21tYW5kcy9QSURTdWJzeXN0ZW0uY3BwICQoRk9SQ0VfRklMRV9CVUlMRCkNCisJJChUUkFDRV9GTEFHKWlmIFsgISAtZCAiYGRpcm5hbWUgIiRAImAiIF07IHRoZW4gbWtkaXIgLXAgImBkaXJuYW1lICIkQCJgIjsgZmk7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAtRCdTVk5fUkVWPSIkKHNoZWxsIHN2bnZlcnNpb24gLW4gLi4pIicgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCisNCitXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvQ29tbWFuZHMvUHJpbnRDb21tYW5kLm8gOiAkKFBSSl9ST09UX0RJUikvQ29tbWFuZHMvUHJpbnRDb21tYW5kLmNwcCAkKEZPUkNFX0ZJTEVfQlVJTEQpDQorCSQoVFJBQ0VfRkxBRylpZiBbICEgLWQgImBkaXJuYW1lICIkQCJgIiBdOyB0aGVuIG1rZGlyIC1wICJgZGlybmFtZSAiJEAiYCI7IGZpOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgLUQnU1ZOX1JFVj0iJChzaGVsbCBzdm52ZXJzaW9uIC1uIC4uKSInICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorDQorV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL0NvbW1hbmRzL1NjaGVkdWxlci5vIDogJChQUkpfUk9PVF9ESVIpL0NvbW1hbmRzL1NjaGVkdWxlci5jcHAgJChGT1JDRV9GSUxFX0JVSUxEKQ0KKwkkKFRSQUNFX0ZMQUcpaWYgWyAhIC1kICJgZGlybmFtZSAiJEAiYCIgXTsgdGhlbiBta2RpciAtcCAiYGRpcm5hbWUgIiRAImAiOyBmaTsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMIC1EJ1NWTl9SRVY9IiQoc2hlbGwgc3ZudmVyc2lvbiAtbiAuLikiJyAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKw0KK1dQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9Db21tYW5kcy9TdGFydENvbW1hbmQubyA6ICQoUFJKX1JPT1RfRElSKS9Db21tYW5kcy9TdGFydENvbW1hbmQuY3BwICQoRk9SQ0VfRklMRV9CVUlMRCkNCisJJChUUkFDRV9GTEFHKWlmIFsgISAtZCAiYGRpcm5hbWUgIiRAImAiIF07IHRoZW4gbWtkaXIgLXAgImBkaXJuYW1lICIkQCJgIjsgZmk7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAtRCdTVk5fUkVWPSIkKHNoZWxsIHN2bnZlcnNpb24gLW4gLi4pIicgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCisNCitXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvQ29tbWFuZHMvU3Vic3lzdGVtLm8gOiAkKFBSSl9ST09UX0RJUikvQ29tbWFuZHMvU3Vic3lzdGVtLmNwcCAkKEZPUkNFX0ZJTEVfQlVJTEQpDQorCSQoVFJBQ0VfRkxBRylpZiBbICEgLWQgImBkaXJuYW1lICIkQCJgIiBdOyB0aGVuIG1rZGlyIC1wICJgZGlybmFtZSAiJEAiYCI7IGZpOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgLUQnU1ZOX1JFVj0iJChzaGVsbCBzdm52ZXJzaW9uIC1uIC4uKSInICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorDQorV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL0NvbW1hbmRzL1dhaXRDb21tYW5kLm8gOiAkKFBSSl9ST09UX0RJUikvQ29tbWFuZHMvV2FpdENvbW1hbmQuY3BwICQoRk9SQ0VfRklMRV9CVUlMRCkNCisJJChUUkFDRV9GTEFHKWlmIFsgISAtZCAiYGRpcm5hbWUgIiRAImAiIF07IHRoZW4gbWtkaXIgLXAgImBkaXJuYW1lICIkQCJgIjsgZmk7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAtRCdTVk5fUkVWPSIkKHNoZWxsIHN2bnZlcnNpb24gLW4gLi4pIicgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCisNCitXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvQ29tbWFuZHMvV2FpdEZvckNoaWxkcmVuLm8gOiAkKFBSSl9ST09UX0RJUikvQ29tbWFuZHMvV2FpdEZvckNoaWxkcmVuLmNwcCAkKEZPUkNFX0ZJTEVfQlVJTEQpDQorCSQoVFJBQ0VfRkxBRylpZiBbICEgLWQgImBkaXJuYW1lICIkQCJgIiBdOyB0aGVuIG1rZGlyIC1wICJgZGlybmFtZSAiJEAiYCI7IGZpOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgLUQnU1ZOX1JFVj0iJChzaGVsbCBzdm52ZXJzaW9uIC1uIC4uKSInICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorDQorV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL0NvbW1hbmRzL1dhaXRVbnRpbENvbW1hbmQubyA6ICQoUFJKX1JPT1RfRElSKS9Db21tYW5kcy9XYWl0VW50aWxDb21tYW5kLmNwcCAkKEZPUkNFX0ZJTEVfQlVJTEQpDQorCSQoVFJBQ0VfRkxBRylpZiBbICEgLWQgImBkaXJuYW1lICIkQCJgIiBdOyB0aGVuIG1rZGlyIC1wICJgZGlybmFtZSAiJEAiYCI7IGZpOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgLUQnU1ZOX1JFVj0iJChzaGVsbCBzdm52ZXJzaW9uIC1uIC4uKSInICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorDQorV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL0NvbXByZXNzb3IubyA6ICQoUFJKX1JPT1RfRElSKS9Db21wcmVzc29yLmNwcCAkKEZPUkNFX0ZJTEVfQlVJTEQpDQorCSQoVFJBQ0VfRkxBRylpZiBbICEgLWQgImBkaXJuYW1lICIkQCJgIiBdOyB0aGVuIG1rZGlyIC1wICJgZGlybmFtZSAiJEAiYCI7IGZpOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgLUQnU1ZOX1JFVj0iJChzaGVsbCBzdm52ZXJzaW9uIC1uIC4uKSInICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorDQorV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL0NvdW50ZXIubyA6ICQoUFJKX1JPT1RfRElSKS9Db3VudGVyLmNwcCAkKEZPUkNFX0ZJTEVfQlVJTEQpDQorCSQoVFJBQ0VfRkxBRylpZiBbICEgLWQgImBkaXJuYW1lICIkQCJgIiBdOyB0aGVuIG1rZGlyIC1wICJgZGlybmFtZSAiJEAiYCI7IGZpOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgLUQnU1ZOX1JFVj0iJChzaGVsbCBzdm52ZXJzaW9uIC1uIC4uKSInICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorDQorV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL0Rhc2hib2FyZC5vIDogJChQUkpfUk9PVF9ESVIpL0Rhc2hib2FyZC5jcHAgJChGT1JDRV9GSUxFX0JVSUxEKQ0KKwkkKFRSQUNFX0ZMQUcpaWYgWyAhIC1kICJgZGlybmFtZSAiJEAiYCIgXTsgdGhlbiBta2RpciAtcCAiYGRpcm5hbWUgIiRAImAiOyBmaTsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMIC1EJ1NWTl9SRVY9IiQoc2hlbGwgc3ZudmVyc2lvbiAtbiAuLikiJyAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKw0KK1dQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9EaWdpdGFsSW5wdXQubyA6ICQoUFJKX1JPT1RfRElSKS9EaWdpdGFsSW5wdXQuY3BwICQoRk9SQ0VfRklMRV9CVUlMRCkNCisJJChUUkFDRV9GTEFHKWlmIFsgISAtZCAiYGRpcm5hbWUgIiRAImAiIF07IHRoZW4gbWtkaXIgLXAgImBkaXJuYW1lICIkQCJgIjsgZmk7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAtRCdTVk5fUkVWPSIkKHNoZWxsIHN2bnZlcnNpb24gLW4gLi4pIicgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCisNCitXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvRGlnaXRhbE1vZHVsZS5vIDogJChQUkpfUk9PVF9ESVIpL0RpZ2l0YWxNb2R1bGUuY3BwICQoRk9SQ0VfRklMRV9CVUlMRCkNCisJJChUUkFDRV9GTEFHKWlmIFsgISAtZCAiYGRpcm5hbWUgIiRAImAiIF07IHRoZW4gbWtkaXIgLXAgImBkaXJuYW1lICIkQCJgIjsgZmk7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAtRCdTVk5fUkVWPSIkKHNoZWxsIHN2bnZlcnNpb24gLW4gLi4pIicgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCisNCitXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvRGlnaXRhbE91dHB1dC5vIDogJChQUkpfUk9PVF9ESVIpL0RpZ2l0YWxPdXRwdXQuY3BwICQoRk9SQ0VfRklMRV9CVUlMRCkNCisJJChUUkFDRV9GTEFHKWlmIFsgISAtZCAiYGRpcm5hbWUgIiRAImAiIF07IHRoZW4gbWtkaXIgLXAgImBkaXJuYW1lICIkQCJgIjsgZmk7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAtRCdTVk5fUkVWPSIkKHNoZWxsIHN2bnZlcnNpb24gLW4gLi4pIicgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCisNCitXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvRGlnaXRhbFNvdXJjZS5vIDogJChQUkpfUk9PVF9ESVIpL0RpZ2l0YWxTb3VyY2UuY3BwICQoRk9SQ0VfRklMRV9CVUlMRCkNCisJJChUUkFDRV9GTEFHKWlmIFsgISAtZCAiYGRpcm5hbWUgIiRAImAiIF07IHRoZW4gbWtkaXIgLXAgImBkaXJuYW1lICIkQCJgIjsgZmk7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAtRCdTVk5fUkVWPSIkKHNoZWxsIHN2bnZlcnNpb24gLW4gLi4pIicgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCisNCitXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvRG91YmxlU29sZW5vaWQubyA6ICQoUFJKX1JPT1RfRElSKS9Eb3VibGVTb2xlbm9pZC5jcHAgJChGT1JDRV9GSUxFX0JVSUxEKQ0KKwkkKFRSQUNFX0ZMQUcpaWYgWyAhIC1kICJgZGlybmFtZSAiJEAiYCIgXTsgdGhlbiBta2RpciAtcCAiYGRpcm5hbWUgIiRAImAiOyBmaTsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMIC1EJ1NWTl9SRVY9IiQoc2hlbGwgc3ZudmVyc2lvbiAtbiAuLikiJyAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKw0KK1dQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9Ecml2ZXJTdGF0aW9uLm8gOiAkKFBSSl9ST09UX0RJUikvRHJpdmVyU3RhdGlvbi5jcHAgJChGT1JDRV9GSUxFX0JVSUxEKQ0KKwkkKFRSQUNFX0ZMQUcpaWYgWyAhIC1kICJgZGlybmFtZSAiJEAiYCIgXTsgdGhlbiBta2RpciAtcCAiYGRpcm5hbWUgIiRAImAiOyBmaTsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMIC1EJ1NWTl9SRVY9IiQoc2hlbGwgc3ZudmVyc2lvbiAtbiAuLikiJyAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKw0KK1dQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9Ecml2ZXJTdGF0aW9uRW5oYW5jZWRJTy5vIDogJChQUkpfUk9PVF9ESVIpL0RyaXZlclN0YXRpb25FbmhhbmNlZElPLmNwcCAkKEZPUkNFX0ZJTEVfQlVJTEQpDQorCSQoVFJBQ0VfRkxBRylpZiBbICEgLWQgImBkaXJuYW1lICIkQCJgIiBdOyB0aGVuIG1rZGlyIC1wICJgZGlybmFtZSAiJEAiYCI7IGZpOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgLUQnU1ZOX1JFVj0iJChzaGVsbCBzdm52ZXJzaW9uIC1uIC4uKSInICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorDQorV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL0RyaXZlclN0YXRpb25MQ0QubyA6ICQoUFJKX1JPT1RfRElSKS9Ecml2ZXJTdGF0aW9uTENELmNwcCAkKEZPUkNFX0ZJTEVfQlVJTEQpDQorCSQoVFJBQ0VfRkxBRylpZiBbICEgLWQgImBkaXJuYW1lICIkQCJgIiBdOyB0aGVuIG1rZGlyIC1wICJgZGlybmFtZSAiJEAiYCI7IGZpOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgLUQnU1ZOX1JFVj0iJChzaGVsbCBzdm52ZXJzaW9uIC1uIC4uKSInICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorDQorV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL0VuY29kZXIubyA6ICQoUFJKX1JPT1RfRElSKS9FbmNvZGVyLmNwcCAkKEZPUkNFX0ZJTEVfQlVJTEQpDQorCSQoVFJBQ0VfRkxBRylpZiBbICEgLWQgImBkaXJuYW1lICIkQCJgIiBdOyB0aGVuIG1rZGlyIC1wICJgZGlybmFtZSAiJEAiYCI7IGZpOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgLUQnU1ZOX1JFVj0iJChzaGVsbCBzdm52ZXJzaW9uIC1uIC4uKSInICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorDQorV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL0Vycm9yLm8gOiAkKFBSSl9ST09UX0RJUikvRXJyb3IuY3BwICQoRk9SQ0VfRklMRV9CVUlMRCkNCisJJChUUkFDRV9GTEFHKWlmIFsgISAtZCAiYGRpcm5hbWUgIiRAImAiIF07IHRoZW4gbWtkaXIgLXAgImBkaXJuYW1lICIkQCJgIjsgZmk7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAtRCdTVk5fUkVWPSIkKHNoZWxsIHN2bnZlcnNpb24gLW4gLi4pIicgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCisNCitXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvRXJyb3JCYXNlLm8gOiAkKFBSSl9ST09UX0RJUikvRXJyb3JCYXNlLmNwcCAkKEZPUkNFX0ZJTEVfQlVJTEQpDQorCSQoVFJBQ0VfRkxBRylpZiBbICEgLWQgImBkaXJuYW1lICIkQCJgIiBdOyB0aGVuIG1rZGlyIC1wICJgZGlybmFtZSAiJEAiYCI7IGZpOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgLUQnU1ZOX1JFVj0iJChzaGVsbCBzdm52ZXJzaW9uIC1uIC4uKSInICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorDQorV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL0dlYXJUb290aC5vIDogJChQUkpfUk9PVF9ESVIpL0dlYXJUb290aC5jcHAgJChGT1JDRV9GSUxFX0JVSUxEKQ0KKwkkKFRSQUNFX0ZMQUcpaWYgWyAhIC1kICJgZGlybmFtZSAiJEAiYCIgXTsgdGhlbiBta2RpciAtcCAiYGRpcm5hbWUgIiRAImAiOyBmaTsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMIC1EJ1NWTl9SRVY9IiQoc2hlbGwgc3ZudmVyc2lvbiAtbiAuLikiJyAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKw0KK1dQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9HeXJvLm8gOiAkKFBSSl9ST09UX0RJUikvR3lyby5jcHAgJChGT1JDRV9GSUxFX0JVSUxEKQ0KKwkkKFRSQUNFX0ZMQUcpaWYgWyAhIC1kICJgZGlybmFtZSAiJEAiYCIgXTsgdGhlbiBta2RpciAtcCAiYGRpcm5hbWUgIiRAImAiOyBmaTsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMIC1EJ1NWTl9SRVY9IiQoc2hlbGwgc3ZudmVyc2lvbiAtbiAuLikiJyAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKw0KK1dQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9IaVRlY2huaWNDb21wYXNzLm8gOiAkKFBSSl9ST09UX0RJUikvSGlUZWNobmljQ29tcGFzcy5jcHAgJChGT1JDRV9GSUxFX0JVSUxEKQ0KKwkkKFRSQUNFX0ZMQUcpaWYgWyAhIC1kICJgZGlybmFtZSAiJEAiYCIgXTsgdGhlbiBta2RpciAtcCAiYGRpcm5hbWUgIiRAImAiOyBmaTsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMIC1EJ1NWTl9SRVY9IiQoc2hlbGwgc3ZudmVyc2lvbiAtbiAuLikiJyAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKw0KK1dQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9JMkMubyA6ICQoUFJKX1JPT1RfRElSKS9JMkMuY3BwICQoRk9SQ0VfRklMRV9CVUlMRCkNCisJJChUUkFDRV9GTEFHKWlmIFsgISAtZCAiYGRpcm5hbWUgIiRAImAiIF07IHRoZW4gbWtkaXIgLXAgImBkaXJuYW1lICIkQCJgIjsgZmk7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAtRCdTVk5fUkVWPSIkKHNoZWxsIHN2bnZlcnNpb24gLW4gLi4pIicgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCisNCitXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvSW50ZXJydXB0YWJsZVNlbnNvckJhc2UubyA6ICQoUFJKX1JPT1RfRElSKS9JbnRlcnJ1cHRhYmxlU2Vuc29yQmFzZS5jcHAgJChGT1JDRV9GSUxFX0JVSUxEKQ0KKwkkKFRSQUNFX0ZMQUcpaWYgWyAhIC1kICJgZGlybmFtZSAiJEAiYCIgXTsgdGhlbiBta2RpciAtcCAiYGRpcm5hbWUgIiRAImAiOyBmaTsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMIC1EJ1NWTl9SRVY9IiQoc2hlbGwgc3ZudmVyc2lvbiAtbiAuLikiJyAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKw0KK1dQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9JdGVyYXRpdmVSb2JvdC5vIDogJChQUkpfUk9PVF9ESVIpL0l0ZXJhdGl2ZVJvYm90LmNwcCAkKEZPUkNFX0ZJTEVfQlVJTEQpDQorCSQoVFJBQ0VfRkxBRylpZiBbICEgLWQgImBkaXJuYW1lICIkQCJgIiBdOyB0aGVuIG1rZGlyIC1wICJgZGlybmFtZSAiJEAiYCI7IGZpOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgLUQnU1ZOX1JFVj0iJChzaGVsbCBzdm52ZXJzaW9uIC1uIC4uKSInICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorDQorV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL0phZ3Vhci5vIDogJChQUkpfUk9PVF9ESVIpL0phZ3Vhci5jcHAgJChGT1JDRV9GSUxFX0JVSUxEKQ0KKwkkKFRSQUNFX0ZMQUcpaWYgWyAhIC1kICJgZGlybmFtZSAiJEAiYCIgXTsgdGhlbiBta2RpciAtcCAiYGRpcm5hbWUgIiRAImAiOyBmaTsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMIC1EJ1NWTl9SRVY9IiQoc2hlbGwgc3ZudmVyc2lvbiAtbiAuLikiJyAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKw0KK1dQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9Kb3lzdGljay5vIDogJChQUkpfUk9PVF9ESVIpL0pveXN0aWNrLmNwcCAkKEZPUkNFX0ZJTEVfQlVJTEQpDQorCSQoVFJBQ0VfRkxBRylpZiBbICEgLWQgImBkaXJuYW1lICIkQCJgIiBdOyB0aGVuIG1rZGlyIC1wICJgZGlybmFtZSAiJEAiYCI7IGZpOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgLUQnU1ZOX1JFVj0iJChzaGVsbCBzdm52ZXJzaW9uIC1uIC4uKSInICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorDQorV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL0tpbmVjdC5vIDogJChQUkpfUk9PVF9ESVIpL0tpbmVjdC5jcHAgJChGT1JDRV9GSUxFX0JVSUxEKQ0KKwkkKFRSQUNFX0ZMQUcpaWYgWyAhIC1kICJgZGlybmFtZSAiJEAiYCIgXTsgdGhlbiBta2RpciAtcCAiYGRpcm5hbWUgIiRAImAiOyBmaTsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMIC1EJ1NWTl9SRVY9IiQoc2hlbGwgc3ZudmVyc2lvbiAtbiAuLikiJyAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKw0KK1dQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9LaW5lY3RTdGljay5vIDogJChQUkpfUk9PVF9ESVIpL0tpbmVjdFN0aWNrLmNwcCAkKEZPUkNFX0ZJTEVfQlVJTEQpDQorCSQoVFJBQ0VfRkxBRylpZiBbICEgLWQgImBkaXJuYW1lICIkQCJgIiBdOyB0aGVuIG1rZGlyIC1wICJgZGlybmFtZSAiJEAiYCI7IGZpOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgLUQnU1ZOX1JFVj0iJChzaGVsbCBzdm52ZXJzaW9uIC1uIC4uKSInICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorDQorV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL0xpdmVXaW5kb3cvTGl2ZVdpbmRvdy5vIDogJChQUkpfUk9PVF9ESVIpL0xpdmVXaW5kb3cvTGl2ZVdpbmRvdy5jcHAgJChGT1JDRV9GSUxFX0JVSUxEKQ0KKwkkKFRSQUNFX0ZMQUcpaWYgWyAhIC1kICJgZGlybmFtZSAiJEAiYCIgXTsgdGhlbiBta2RpciAtcCAiYGRpcm5hbWUgIiRAImAiOyBmaTsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMIC1EJ1NWTl9SRVY9IiQoc2hlbGwgc3ZudmVyc2lvbiAtbiAuLikiJyAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKw0KK1dQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9MaXZlV2luZG93L0xpdmVXaW5kb3dTdGF0dXNMaXN0ZW5lci5vIDogJChQUkpfUk9PVF9ESVIpL0xpdmVXaW5kb3cvTGl2ZVdpbmRvd1N0YXR1c0xpc3RlbmVyLmNwcCAkKEZPUkNFX0ZJTEVfQlVJTEQpDQorCSQoVFJBQ0VfRkxBRylpZiBbICEgLWQgImBkaXJuYW1lICIkQCJgIiBdOyB0aGVuIG1rZGlyIC1wICJgZGlybmFtZSAiJEAiYCI7IGZpOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgLUQnU1ZOX1JFVj0iJChzaGVsbCBzdm52ZXJzaW9uIC1uIC4uKSInICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorDQorV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL01vZHVsZS5vIDogJChQUkpfUk9PVF9ESVIpL01vZHVsZS5jcHAgJChGT1JDRV9GSUxFX0JVSUxEKQ0KKwkkKFRSQUNFX0ZMQUcpaWYgWyAhIC1kICJgZGlybmFtZSAiJEAiYCIgXTsgdGhlbiBta2RpciAtcCAiYGRpcm5hbWUgIiRAImAiOyBmaTsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMIC1EJ1NWTl9SRVY9IiQoc2hlbGwgc3ZudmVyc2lvbiAtbiAuLikiJyAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKw0KK1dQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9Nb3RvclNhZmV0eUhlbHBlci5vIDogJChQUkpfUk9PVF9ESVIpL01vdG9yU2FmZXR5SGVscGVyLmNwcCAkKEZPUkNFX0ZJTEVfQlVJTEQpDQorCSQoVFJBQ0VfRkxBRylpZiBbICEgLWQgImBkaXJuYW1lICIkQCJgIiBdOyB0aGVuIG1rZGlyIC1wICJgZGlybmFtZSAiJEAiYCI7IGZpOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgLUQnU1ZOX1JFVj0iJChzaGVsbCBzdm52ZXJzaW9uIC1uIC4uKSInICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorDQorV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL05vdGlmaWVyLm8gOiAkKFBSSl9ST09UX0RJUikvTm90aWZpZXIuY3BwICQoRk9SQ0VfRklMRV9CVUlMRCkNCisJJChUUkFDRV9GTEFHKWlmIFsgISAtZCAiYGRpcm5hbWUgIiRAImAiIF07IHRoZW4gbWtkaXIgLXAgImBkaXJuYW1lICIkQCJgIjsgZmk7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAtRCdTVk5fUkVWPSIkKHNoZWxsIHN2bnZlcnNpb24gLW4gLi4pIicgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCisNCitXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvUElEQ29udHJvbGxlci5vIDogJChQUkpfUk9PVF9ESVIpL1BJRENvbnRyb2xsZXIuY3BwICQoRk9SQ0VfRklMRV9CVUlMRCkNCisJJChUUkFDRV9GTEFHKWlmIFsgISAtZCAiYGRpcm5hbWUgIiRAImAiIF07IHRoZW4gbWtkaXIgLXAgImBkaXJuYW1lICIkQCJgIjsgZmk7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAtRCdTVk5fUkVWPSIkKHNoZWxsIHN2bnZlcnNpb24gLW4gLi4pIicgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCisNCitXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvUFdNLm8gOiAkKFBSSl9ST09UX0RJUikvUFdNLmNwcCAkKEZPUkNFX0ZJTEVfQlVJTEQpDQorCSQoVFJBQ0VfRkxBRylpZiBbICEgLWQgImBkaXJuYW1lICIkQCJgIiBdOyB0aGVuIG1rZGlyIC1wICJgZGlybmFtZSAiJEAiYCI7IGZpOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgLUQnU1ZOX1JFVj0iJChzaGVsbCBzdm52ZXJzaW9uIC1uIC4uKSInICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorDQorV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL1ByZWZlcmVuY2VzLm8gOiAkKFBSSl9ST09UX0RJUikvUHJlZmVyZW5jZXMuY3BwICQoRk9SQ0VfRklMRV9CVUlMRCkNCisJJChUUkFDRV9GTEFHKWlmIFsgISAtZCAiYGRpcm5hbWUgIiRAImAiIF07IHRoZW4gbWtkaXIgLXAgImBkaXJuYW1lICIkQCJgIjsgZmk7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAtRCdTVk5fUkVWPSIkKHNoZWxsIHN2bnZlcnNpb24gLW4gLi4pIicgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCisNCitXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvUmVsYXkubyA6ICQoUFJKX1JPT1RfRElSKS9SZWxheS5jcHAgJChGT1JDRV9GSUxFX0JVSUxEKQ0KKwkkKFRSQUNFX0ZMQUcpaWYgWyAhIC1kICJgZGlybmFtZSAiJEAiYCIgXTsgdGhlbiBta2RpciAtcCAiYGRpcm5hbWUgIiRAImAiOyBmaTsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMIC1EJ1NWTl9SRVY9IiQoc2hlbGwgc3ZudmVyc2lvbiAtbiAuLikiJyAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKw0KK1dQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9SZXNvdXJjZS5vIDogJChQUkpfUk9PVF9ESVIpL1Jlc291cmNlLmNwcCAkKEZPUkNFX0ZJTEVfQlVJTEQpDQorCSQoVFJBQ0VfRkxBRylpZiBbICEgLWQgImBkaXJuYW1lICIkQCJgIiBdOyB0aGVuIG1rZGlyIC1wICJgZGlybmFtZSAiJEAiYCI7IGZpOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgLUQnU1ZOX1JFVj0iJChzaGVsbCBzdm52ZXJzaW9uIC1uIC4uKSInICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorDQorV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL1JvYm90QmFzZS5vIDogJChQUkpfUk9PVF9ESVIpL1JvYm90QmFzZS5jcHAgJChGT1JDRV9GSUxFX0JVSUxEKQ0KKwkkKFRSQUNFX0ZMQUcpaWYgWyAhIC1kICJgZGlybmFtZSAiJEAiYCIgXTsgdGhlbiBta2RpciAtcCAiYGRpcm5hbWUgIiRAImAiOyBmaTsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMIC1EJ1NWTl9SRVY9IiQoc2hlbGwgc3ZudmVyc2lvbiAtbiAuLikiJyAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKw0KK1dQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9Sb2JvdERyaXZlLm8gOiAkKFBSSl9ST09UX0RJUikvUm9ib3REcml2ZS5jcHAgJChGT1JDRV9GSUxFX0JVSUxEKQ0KKwkkKFRSQUNFX0ZMQUcpaWYgWyAhIC1kICJgZGlybmFtZSAiJEAiYCIgXTsgdGhlbiBta2RpciAtcCAiYGRpcm5hbWUgIiRAImAiOyBmaTsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMIC1EJ1NWTl9SRVY9IiQoc2hlbGwgc3ZudmVyc2lvbiAtbiAuLikiJyAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKw0KK1dQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9TUEkubyA6ICQoUFJKX1JPT1RfRElSKS9TUEkuY3BwICQoRk9SQ0VfRklMRV9CVUlMRCkNCisJJChUUkFDRV9GTEFHKWlmIFsgISAtZCAiYGRpcm5hbWUgIiRAImAiIF07IHRoZW4gbWtkaXIgLXAgImBkaXJuYW1lICIkQCJgIjsgZmk7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAtRCdTVk5fUkVWPSIkKHNoZWxsIHN2bnZlcnNpb24gLW4gLi4pIicgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCisNCitXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvU2FmZVBXTS5vIDogJChQUkpfUk9PVF9ESVIpL1NhZmVQV00uY3BwICQoRk9SQ0VfRklMRV9CVUlMRCkNCisJJChUUkFDRV9GTEFHKWlmIFsgISAtZCAiYGRpcm5hbWUgIiRAImAiIF07IHRoZW4gbWtkaXIgLXAgImBkaXJuYW1lICIkQCJgIjsgZmk7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAtRCdTVk5fUkVWPSIkKHNoZWxsIHN2bnZlcnNpb24gLW4gLi4pIicgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCisNCitXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvU2Vuc29yQmFzZS5vIDogJChQUkpfUk9PVF9ESVIpL1NlbnNvckJhc2UuY3BwICQoRk9SQ0VfRklMRV9CVUlMRCkNCisJJChUUkFDRV9GTEFHKWlmIFsgISAtZCAiYGRpcm5hbWUgIiRAImAiIF07IHRoZW4gbWtkaXIgLXAgImBkaXJuYW1lICIkQCJgIjsgZmk7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAtRCdTVk5fUkVWPSIkKHNoZWxsIHN2bnZlcnNpb24gLW4gLi4pIicgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCisNCitXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvU2VyaWFsUG9ydC5vIDogJChQUkpfUk9PVF9ESVIpL1NlcmlhbFBvcnQuY3BwICQoRk9SQ0VfRklMRV9CVUlMRCkNCisJJChUUkFDRV9GTEFHKWlmIFsgISAtZCAiYGRpcm5hbWUgIiRAImAiIF07IHRoZW4gbWtkaXIgLXAgImBkaXJuYW1lICIkQCJgIjsgZmk7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAtRCdTVk5fUkVWPSIkKHNoZWxsIHN2bnZlcnNpb24gLW4gLi4pIicgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCisNCitXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvU2Vydm8ubyA6ICQoUFJKX1JPT1RfRElSKS9TZXJ2by5jcHAgJChGT1JDRV9GSUxFX0JVSUxEKQ0KKwkkKFRSQUNFX0ZMQUcpaWYgWyAhIC1kICJgZGlybmFtZSAiJEAiYCIgXTsgdGhlbiBta2RpciAtcCAiYGRpcm5hbWUgIiRAImAiOyBmaTsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMIC1EJ1NWTl9SRVY9IiQoc2hlbGwgc3ZudmVyc2lvbiAtbiAuLikiJyAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKw0KK1dQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9TaW1wbGVSb2JvdC5vIDogJChQUkpfUk9PVF9ESVIpL1NpbXBsZVJvYm90LmNwcCAkKEZPUkNFX0ZJTEVfQlVJTEQpDQorCSQoVFJBQ0VfRkxBRylpZiBbICEgLWQgImBkaXJuYW1lICIkQCJgIiBdOyB0aGVuIG1rZGlyIC1wICJgZGlybmFtZSAiJEAiYCI7IGZpOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgLUQnU1ZOX1JFVj0iJChzaGVsbCBzdm52ZXJzaW9uIC1uIC4uKSInICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorDQorV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL1NtYXJ0RGFzaGJvYXJkL1NlbmRhYmxlQ2hvb3Nlci5vIDogJChQUkpfUk9PVF9ESVIpL1NtYXJ0RGFzaGJvYXJkL1NlbmRhYmxlQ2hvb3Nlci5jcHAgJChGT1JDRV9GSUxFX0JVSUxEKQ0KKwkkKFRSQUNFX0ZMQUcpaWYgWyAhIC1kICJgZGlybmFtZSAiJEAiYCIgXTsgdGhlbiBta2RpciAtcCAiYGRpcm5hbWUgIiRAImAiOyBmaTsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMIC1EJ1NWTl9SRVY9IiQoc2hlbGwgc3ZudmVyc2lvbiAtbiAuLikiJyAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKw0KK1dQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9TbWFydERhc2hib2FyZC9TbWFydERhc2hib2FyZC5vIDogJChQUkpfUk9PVF9ESVIpL1NtYXJ0RGFzaGJvYXJkL1NtYXJ0RGFzaGJvYXJkLmNwcCAkKEZPUkNFX0ZJTEVfQlVJTEQpDQorCSQoVFJBQ0VfRkxBRylpZiBbICEgLWQgImBkaXJuYW1lICIkQCJgIiBdOyB0aGVuIG1rZGlyIC1wICJgZGlybmFtZSAiJEAiYCI7IGZpOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgLUQnU1ZOX1JFVj0iJChzaGVsbCBzdm52ZXJzaW9uIC1uIC4uKSInICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorDQorV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL1NvbGVub2lkLm8gOiAkKFBSSl9ST09UX0RJUikvU29sZW5vaWQuY3BwICQoRk9SQ0VfRklMRV9CVUlMRCkNCisJJChUUkFDRV9GTEFHKWlmIFsgISAtZCAiYGRpcm5hbWUgIiRAImAiIF07IHRoZW4gbWtkaXIgLXAgImBkaXJuYW1lICIkQCJgIjsgZmk7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAtRCdTVk5fUkVWPSIkKHNoZWxsIHN2bnZlcnNpb24gLW4gLi4pIicgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCisNCitXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvU29sZW5vaWRCYXNlLm8gOiAkKFBSSl9ST09UX0RJUikvU29sZW5vaWRCYXNlLmNwcCAkKEZPUkNFX0ZJTEVfQlVJTEQpDQorCSQoVFJBQ0VfRkxBRylpZiBbICEgLWQgImBkaXJuYW1lICIkQCJgIiBdOyB0aGVuIG1rZGlyIC1wICJgZGlybmFtZSAiJEAiYCI7IGZpOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgLUQnU1ZOX1JFVj0iJChzaGVsbCBzdm52ZXJzaW9uIC1uIC4uKSInICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorDQorV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL1N5bmNocm9uaXplZC5vIDogJChQUkpfUk9PVF9ESVIpL1N5bmNocm9uaXplZC5jcHAgJChGT1JDRV9GSUxFX0JVSUxEKQ0KKwkkKFRSQUNFX0ZMQUcpaWYgWyAhIC1kICJgZGlybmFtZSAiJEAiYCIgXTsgdGhlbiBta2RpciAtcCAiYGRpcm5hbWUgIiRAImAiOyBmaTsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMIC1EJ1NWTl9SRVY9IiQoc2hlbGwgc3ZudmVyc2lvbiAtbiAuLikiJyAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKw0KK1dQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9UYWxvbi5vIDogJChQUkpfUk9PVF9ESVIpL1RhbG9uLmNwcCAkKEZPUkNFX0ZJTEVfQlVJTEQpDQorCSQoVFJBQ0VfRkxBRylpZiBbICEgLWQgImBkaXJuYW1lICIkQCJgIiBdOyB0aGVuIG1rZGlyIC1wICJgZGlybmFtZSAiJEAiYCI7IGZpOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgLUQnU1ZOX1JFVj0iJChzaGVsbCBzdm52ZXJzaW9uIC1uIC4uKSInICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorDQorV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL1Rhc2subyA6ICQoUFJKX1JPT1RfRElSKS9UYXNrLmNwcCAkKEZPUkNFX0ZJTEVfQlVJTEQpDQorCSQoVFJBQ0VfRkxBRylpZiBbICEgLWQgImBkaXJuYW1lICIkQCJgIiBdOyB0aGVuIG1rZGlyIC1wICJgZGlybmFtZSAiJEAiYCI7IGZpOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgLUQnU1ZOX1JFVj0iJChzaGVsbCBzdm52ZXJzaW9uIC1uIC4uKSInICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorDQorV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL1RpbWVyLm8gOiAkKFBSSl9ST09UX0RJUikvVGltZXIuY3BwICQoRk9SQ0VfRklMRV9CVUlMRCkNCisJJChUUkFDRV9GTEFHKWlmIFsgISAtZCAiYGRpcm5hbWUgIiRAImAiIF07IHRoZW4gbWtkaXIgLXAgImBkaXJuYW1lICIkQCJgIjsgZmk7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAtRCdTVk5fUkVWPSIkKHNoZWxsIHN2bnZlcnNpb24gLW4gLi4pIicgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCisNCitXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvVWx0cmFzb25pYy5vIDogJChQUkpfUk9PVF9ESVIpL1VsdHJhc29uaWMuY3BwICQoRk9SQ0VfRklMRV9CVUlMRCkNCisJJChUUkFDRV9GTEFHKWlmIFsgISAtZCAiYGRpcm5hbWUgIiRAImAiIF07IHRoZW4gbWtkaXIgLXAgImBkaXJuYW1lICIkQCJgIjsgZmk7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAtRCdTVk5fUkVWPSIkKHNoZWxsIHN2bnZlcnNpb24gLW4gLi4pIicgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCisNCitXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvVXRpbGl0eS5vIDogJChQUkpfUk9PVF9ESVIpL1V0aWxpdHkuY3BwICQoRk9SQ0VfRklMRV9CVUlMRCkNCisJJChUUkFDRV9GTEFHKWlmIFsgISAtZCAiYGRpcm5hbWUgIiRAImAiIF07IHRoZW4gbWtkaXIgLXAgImBkaXJuYW1lICIkQCJgIjsgZmk7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAtRCdTVk5fUkVWPSIkKHNoZWxsIHN2bnZlcnNpb24gLW4gLi4pIicgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCisNCitXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvVmljdG9yLm8gOiAkKFBSSl9ST09UX0RJUikvVmljdG9yLmNwcCAkKEZPUkNFX0ZJTEVfQlVJTEQpDQorCSQoVFJBQ0VfRkxBRylpZiBbICEgLWQgImBkaXJuYW1lICIkQCJgIiBdOyB0aGVuIG1rZGlyIC1wICJgZGlybmFtZSAiJEAiYCI7IGZpOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgLUQnU1ZOX1JFVj0iJChzaGVsbCBzdm52ZXJzaW9uIC1uIC4uKSInICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorDQorV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL1Zpc2lvbi9BeGlzQ2FtZXJhLm8gOiAkKFBSSl9ST09UX0RJUikvVmlzaW9uL0F4aXNDYW1lcmEuY3BwICQoRk9SQ0VfRklMRV9CVUlMRCkNCisJJChUUkFDRV9GTEFHKWlmIFsgISAtZCAiYGRpcm5hbWUgIiRAImAiIF07IHRoZW4gbWtkaXIgLXAgImBkaXJuYW1lICIkQCJgIjsgZmk7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAtRCdTVk5fUkVWPSIkKHNoZWxsIHN2bnZlcnNpb24gLW4gLi4pIicgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCisNCitXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvVmlzaW9uL0F4aXNDYW1lcmFQYXJhbXMubyA6ICQoUFJKX1JPT1RfRElSKS9WaXNpb24vQXhpc0NhbWVyYVBhcmFtcy5jcHAgJChGT1JDRV9GSUxFX0JVSUxEKQ0KKwkkKFRSQUNFX0ZMQUcpaWYgWyAhIC1kICJgZGlybmFtZSAiJEAiYCIgXTsgdGhlbiBta2RpciAtcCAiYGRpcm5hbWUgIiRAImAiOyBmaTsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMIC1EJ1NWTl9SRVY9IiQoc2hlbGwgc3ZudmVyc2lvbiAtbiAuLikiJyAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKw0KK1dQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9WaXNpb24vQmluYXJ5SW1hZ2UubyA6ICQoUFJKX1JPT1RfRElSKS9WaXNpb24vQmluYXJ5SW1hZ2UuY3BwICQoRk9SQ0VfRklMRV9CVUlMRCkNCisJJChUUkFDRV9GTEFHKWlmIFsgISAtZCAiYGRpcm5hbWUgIiRAImAiIF07IHRoZW4gbWtkaXIgLXAgImBkaXJuYW1lICIkQCJgIjsgZmk7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAtRCdTVk5fUkVWPSIkKHNoZWxsIHN2bnZlcnNpb24gLW4gLi4pIicgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCisNCitXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvVmlzaW9uL0NvbG9ySW1hZ2UubyA6ICQoUFJKX1JPT1RfRElSKS9WaXNpb24vQ29sb3JJbWFnZS5jcHAgJChGT1JDRV9GSUxFX0JVSUxEKQ0KKwkkKFRSQUNFX0ZMQUcpaWYgWyAhIC1kICJgZGlybmFtZSAiJEAiYCIgXTsgdGhlbiBta2RpciAtcCAiYGRpcm5hbWUgIiRAImAiOyBmaTsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMIC1EJ1NWTl9SRVY9IiQoc2hlbGwgc3ZudmVyc2lvbiAtbiAuLikiJyAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKw0KK1dQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9WaXNpb24vRW51bUNhbWVyYVBhcmFtZXRlci5vIDogJChQUkpfUk9PVF9ESVIpL1Zpc2lvbi9FbnVtQ2FtZXJhUGFyYW1ldGVyLmNwcCAkKEZPUkNFX0ZJTEVfQlVJTEQpDQorCSQoVFJBQ0VfRkxBRylpZiBbICEgLWQgImBkaXJuYW1lICIkQCJgIiBdOyB0aGVuIG1rZGlyIC1wICJgZGlybmFtZSAiJEAiYCI7IGZpOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgLUQnU1ZOX1JFVj0iJChzaGVsbCBzdm52ZXJzaW9uIC1uIC4uKSInICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorDQorV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL1Zpc2lvbi9IU0xJbWFnZS5vIDogJChQUkpfUk9PVF9ESVIpL1Zpc2lvbi9IU0xJbWFnZS5jcHAgJChGT1JDRV9GSUxFX0JVSUxEKQ0KKwkkKFRSQUNFX0ZMQUcpaWYgWyAhIC1kICJgZGlybmFtZSAiJEAiYCIgXTsgdGhlbiBta2RpciAtcCAiYGRpcm5hbWUgIiRAImAiOyBmaTsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMIC1EJ1NWTl9SRVY9IiQoc2hlbGwgc3ZudmVyc2lvbiAtbiAuLikiJyAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKw0KK1dQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9WaXNpb24vSW1hZ2VCYXNlLm8gOiAkKFBSSl9ST09UX0RJUikvVmlzaW9uL0ltYWdlQmFzZS5jcHAgJChGT1JDRV9GSUxFX0JVSUxEKQ0KKwkkKFRSQUNFX0ZMQUcpaWYgWyAhIC1kICJgZGlybmFtZSAiJEAiYCIgXTsgdGhlbiBta2RpciAtcCAiYGRpcm5hbWUgIiRAImAiOyBmaTsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMIC1EJ1NWTl9SRVY9IiQoc2hlbGwgc3ZudmVyc2lvbiAtbiAuLikiJyAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKw0KK1dQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9WaXNpb24vSW50Q2FtZXJhUGFyYW1ldGVyLm8gOiAkKFBSSl9ST09UX0RJUikvVmlzaW9uL0ludENhbWVyYVBhcmFtZXRlci5jcHAgJChGT1JDRV9GSUxFX0JVSUxEKQ0KKwkkKFRSQUNFX0ZMQUcpaWYgWyAhIC1kICJgZGlybmFtZSAiJEAiYCIgXTsgdGhlbiBta2RpciAtcCAiYGRpcm5hbWUgIiRAImAiOyBmaTsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMIC1EJ1NWTl9SRVY9IiQoc2hlbGwgc3ZudmVyc2lvbiAtbiAuLikiJyAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKw0KK1dQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9WaXNpb24vTW9ub0ltYWdlLm8gOiAkKFBSSl9ST09UX0RJUikvVmlzaW9uL01vbm9JbWFnZS5jcHAgJChGT1JDRV9GSUxFX0JVSUxEKQ0KKwkkKFRSQUNFX0ZMQUcpaWYgWyAhIC1kICJgZGlybmFtZSAiJEAiYCIgXTsgdGhlbiBta2RpciAtcCAiYGRpcm5hbWUgIiRAImAiOyBmaTsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMIC1EJ1NWTl9SRVY9IiQoc2hlbGwgc3ZudmVyc2lvbiAtbiAuLikiJyAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKw0KK1dQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9WaXNpb24vUENWaWRlb1NlcnZlci5vIDogJChQUkpfUk9PVF9ESVIpL1Zpc2lvbi9QQ1ZpZGVvU2VydmVyLmNwcCAkKEZPUkNFX0ZJTEVfQlVJTEQpDQorCSQoVFJBQ0VfRkxBRylpZiBbICEgLWQgImBkaXJuYW1lICIkQCJgIiBdOyB0aGVuIG1rZGlyIC1wICJgZGlybmFtZSAiJEAiYCI7IGZpOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgLUQnU1ZOX1JFVj0iJChzaGVsbCBzdm52ZXJzaW9uIC1uIC4uKSInICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorDQorV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL1Zpc2lvbi9SR0JJbWFnZS5vIDogJChQUkpfUk9PVF9ESVIpL1Zpc2lvbi9SR0JJbWFnZS5jcHAgJChGT1JDRV9GSUxFX0JVSUxEKQ0KKwkkKFRSQUNFX0ZMQUcpaWYgWyAhIC1kICJgZGlybmFtZSAiJEAiYCIgXTsgdGhlbiBta2RpciAtcCAiYGRpcm5hbWUgIiRAImAiOyBmaTsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMIC1EJ1NWTl9SRVY9IiQoc2hlbGwgc3ZudmVyc2lvbiAtbiAuLikiJyAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKw0KK1dQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9WaXNpb24vVGhyZXNob2xkLm8gOiAkKFBSSl9ST09UX0RJUikvVmlzaW9uL1RocmVzaG9sZC5jcHAgJChGT1JDRV9GSUxFX0JVSUxEKQ0KKwkkKFRSQUNFX0ZMQUcpaWYgWyAhIC1kICJgZGlybmFtZSAiJEAiYCIgXTsgdGhlbiBta2RpciAtcCAiYGRpcm5hbWUgIiRAImAiOyBmaTsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMIC1EJ1NWTl9SRVY9IiQoc2hlbGwgc3ZudmVyc2lvbiAtbiAuLikiJyAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKw0KK1dQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9WaXNpb24yMDA5L0F4aXNDYW1lcmEubyA6ICQoUFJKX1JPT1RfRElSKS9WaXNpb24yMDA5L0F4aXNDYW1lcmEuY3BwICQoRk9SQ0VfRklMRV9CVUlMRCkNCisJJChUUkFDRV9GTEFHKWlmIFsgISAtZCAiYGRpcm5hbWUgIiRAImAiIF07IHRoZW4gbWtkaXIgLXAgImBkaXJuYW1lICIkQCJgIjsgZmk7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAtRCdTVk5fUkVWPSIkKHNoZWxsIHN2bnZlcnNpb24gLW4gLi4pIicgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCisNCitXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvVmlzaW9uMjAwOS9CYWVVdGlsaXRpZXMubyA6ICQoUFJKX1JPT1RfRElSKS9WaXNpb24yMDA5L0JhZVV0aWxpdGllcy5jcHAgJChGT1JDRV9GSUxFX0JVSUxEKQ0KKwkkKFRSQUNFX0ZMQUcpaWYgWyAhIC1kICJgZGlybmFtZSAiJEAiYCIgXTsgdGhlbiBta2RpciAtcCAiYGRpcm5hbWUgIiRAImAiOyBmaTsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMIC1EJ1NWTl9SRVY9IiQoc2hlbGwgc3ZudmVyc2lvbiAtbiAuLikiJyAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKw0KK1dQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9WaXNpb24yMDA5L0ZyY0Vycm9yLm8gOiAkKFBSSl9ST09UX0RJUikvVmlzaW9uMjAwOS9GcmNFcnJvci5jcHAgJChGT1JDRV9GSUxFX0JVSUxEKQ0KKwkkKFRSQUNFX0ZMQUcpaWYgWyAhIC1kICJgZGlybmFtZSAiJEAiYCIgXTsgdGhlbiBta2RpciAtcCAiYGRpcm5hbWUgIiRAImAiOyBmaTsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMIC1EJ1NWTl9SRVY9IiQoc2hlbGwgc3ZudmVyc2lvbiAtbiAuLikiJyAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKw0KK1dQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9WaXNpb24yMDA5L1RyYWNrQVBJLm8gOiAkKFBSSl9ST09UX0RJUikvVmlzaW9uMjAwOS9UcmFja0FQSS5jcHAgJChGT1JDRV9GSUxFX0JVSUxEKQ0KKwkkKFRSQUNFX0ZMQUcpaWYgWyAhIC1kICJgZGlybmFtZSAiJEAiYCIgXTsgdGhlbiBta2RpciAtcCAiYGRpcm5hbWUgIiRAImAiOyBmaTsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMIC1EJ1NWTl9SRVY9IiQoc2hlbGwgc3ZudmVyc2lvbiAtbiAuLikiJyAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKw0KK1dQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9WaXNpb24yMDA5L1Zpc2lvbkFQSS5vIDogJChQUkpfUk9PVF9ESVIpL1Zpc2lvbjIwMDkvVmlzaW9uQVBJLmNwcCAkKEZPUkNFX0ZJTEVfQlVJTEQpDQorCSQoVFJBQ0VfRkxBRylpZiBbICEgLWQgImBkaXJuYW1lICIkQCJgIiBdOyB0aGVuIG1rZGlyIC1wICJgZGlybmFtZSAiJEAiYCI7IGZpOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgLUQnU1ZOX1JFVj0iJChzaGVsbCBzdm52ZXJzaW9uIC1uIC4uKSInICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorDQorV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL1dhdGNoZG9nLm8gOiAkKFBSSl9ST09UX0RJUikvV2F0Y2hkb2cuY3BwICQoRk9SQ0VfRklMRV9CVUlMRCkNCisJJChUUkFDRV9GTEFHKWlmIFsgISAtZCAiYGRpcm5hbWUgIiRAImAiIF07IHRoZW4gbWtkaXIgLXAgImBkaXJuYW1lICIkQCJgIjsgZmk7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAtRCdTVk5fUkVWPSIkKHNoZWxsIHN2bnZlcnNpb24gLW4gLi4pIicgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCisNCitXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvbmV0d29ya3RhYmxlcy9OZXR3b3JrVGFibGUubyA6ICQoUFJKX1JPT1RfRElSKS9uZXR3b3JrdGFibGVzL05ldHdvcmtUYWJsZS5jcHAgJChGT1JDRV9GSUxFX0JVSUxEKQ0KKwkkKFRSQUNFX0ZMQUcpaWYgWyAhIC1kICJgZGlybmFtZSAiJEAiYCIgXTsgdGhlbiBta2RpciAtcCAiYGRpcm5hbWUgIiRAImAiOyBmaTsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMIC1EJ1NWTl9SRVY9IiQoc2hlbGwgc3ZudmVyc2lvbiAtbiAuLikiJyAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKw0KK1dQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9uZXR3b3JrdGFibGVzL05ldHdvcmtUYWJsZUNvbm5lY3Rpb25MaXN0ZW5lckFkYXB0ZXIubyA6ICQoUFJKX1JPT1RfRElSKS9uZXR3b3JrdGFibGVzL05ldHdvcmtUYWJsZUNvbm5lY3Rpb25MaXN0ZW5lckFkYXB0ZXIuY3BwICQoRk9SQ0VfRklMRV9CVUlMRCkNCisJJChUUkFDRV9GTEFHKWlmIFsgISAtZCAiYGRpcm5hbWUgIiRAImAiIF07IHRoZW4gbWtkaXIgLXAgImBkaXJuYW1lICIkQCJgIjsgZmk7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAtRCdTVk5fUkVWPSIkKHNoZWxsIHN2bnZlcnNpb24gLW4gLi4pIicgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCisNCitXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvbmV0d29ya3RhYmxlcy9OZXR3b3JrVGFibGVLZXlMaXN0ZW5lckFkYXB0ZXIubyA6ICQoUFJKX1JPT1RfRElSKS9uZXR3b3JrdGFibGVzL05ldHdvcmtUYWJsZUtleUxpc3RlbmVyQWRhcHRlci5jcHAgJChGT1JDRV9GSUxFX0JVSUxEKQ0KKwkkKFRSQUNFX0ZMQUcpaWYgWyAhIC1kICJgZGlybmFtZSAiJEAiYCIgXTsgdGhlbiBta2RpciAtcCAiYGRpcm5hbWUgIiRAImAiOyBmaTsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMIC1EJ1NWTl9SRVY9IiQoc2hlbGwgc3ZudmVyc2lvbiAtbiAuLikiJyAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKw0KK1dQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9uZXR3b3JrdGFibGVzL05ldHdvcmtUYWJsZUxpc3RlbmVyQWRhcHRlci5vIDogJChQUkpfUk9PVF9ESVIpL25ldHdvcmt0YWJsZXMvTmV0d29ya1RhYmxlTGlzdGVuZXJBZGFwdGVyLmNwcCAkKEZPUkNFX0ZJTEVfQlVJTEQpDQorCSQoVFJBQ0VfRkxBRylpZiBbICEgLWQgImBkaXJuYW1lICIkQCJgIiBdOyB0aGVuIG1rZGlyIC1wICJgZGlybmFtZSAiJEAiYCI7IGZpOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgLUQnU1ZOX1JFVj0iJChzaGVsbCBzdm52ZXJzaW9uIC1uIC4uKSInICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorDQorV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL25ldHdvcmt0YWJsZXMvTmV0d29ya1RhYmxlTW9kZS5vIDogJChQUkpfUk9PVF9ESVIpL25ldHdvcmt0YWJsZXMvTmV0d29ya1RhYmxlTW9kZS5jcHAgJChGT1JDRV9GSUxFX0JVSUxEKQ0KKwkkKFRSQUNFX0ZMQUcpaWYgWyAhIC1kICJgZGlybmFtZSAiJEAiYCIgXTsgdGhlbiBta2RpciAtcCAiYGRpcm5hbWUgIiRAImAiOyBmaTsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMIC1EJ1NWTl9SRVY9IiQoc2hlbGwgc3ZudmVyc2lvbiAtbiAuLikiJyAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKw0KK1dQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9uZXR3b3JrdGFibGVzL05ldHdvcmtUYWJsZVByb3ZpZGVyLm8gOiAkKFBSSl9ST09UX0RJUikvbmV0d29ya3RhYmxlcy9OZXR3b3JrVGFibGVQcm92aWRlci5jcHAgJChGT1JDRV9GSUxFX0JVSUxEKQ0KKwkkKFRSQUNFX0ZMQUcpaWYgWyAhIC1kICJgZGlybmFtZSAiJEAiYCIgXTsgdGhlbiBta2RpciAtcCAiYGRpcm5hbWUgIiRAImAiOyBmaTsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMIC1EJ1NWTl9SRVY9IiQoc2hlbGwgc3ZudmVyc2lvbiAtbiAuLikiJyAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKw0KK1dQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9uZXR3b3JrdGFibGVzL05ldHdvcmtUYWJsZVN1Ykxpc3RlbmVyQWRhcHRlci5vIDogJChQUkpfUk9PVF9ESVIpL25ldHdvcmt0YWJsZXMvTmV0d29ya1RhYmxlU3ViTGlzdGVuZXJBZGFwdGVyLmNwcCAkKEZPUkNFX0ZJTEVfQlVJTEQpDQorCSQoVFJBQ0VfRkxBRylpZiBbICEgLWQgImBkaXJuYW1lICIkQCJgIiBdOyB0aGVuIG1rZGlyIC1wICJgZGlybmFtZSAiJEAiYCI7IGZpOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgLUQnU1ZOX1JFVj0iJChzaGVsbCBzdm52ZXJzaW9uIC1uIC4uKSInICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorDQorV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL25ldHdvcmt0YWJsZXMyL0Fic3RyYWN0TmV0d29ya1RhYmxlRW50cnlTdG9yZS5vIDogJChQUkpfUk9PVF9ESVIpL25ldHdvcmt0YWJsZXMyL0Fic3RyYWN0TmV0d29ya1RhYmxlRW50cnlTdG9yZS5jcHAgJChGT1JDRV9GSUxFX0JVSUxEKQ0KKwkkKFRSQUNFX0ZMQUcpaWYgWyAhIC1kICJgZGlybmFtZSAiJEAiYCIgXTsgdGhlbiBta2RpciAtcCAiYGRpcm5hbWUgIiRAImAiOyBmaTsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMIC1EJ1NWTl9SRVY9IiQoc2hlbGwgc3ZudmVyc2lvbiAtbiAuLikiJyAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKw0KK1dQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9uZXR3b3JrdGFibGVzMi9OZXR3b3JrVGFibGVFbnRyeS5vIDogJChQUkpfUk9PVF9ESVIpL25ldHdvcmt0YWJsZXMyL05ldHdvcmtUYWJsZUVudHJ5LmNwcCAkKEZPUkNFX0ZJTEVfQlVJTEQpDQorCSQoVFJBQ0VfRkxBRylpZiBbICEgLWQgImBkaXJuYW1lICIkQCJgIiBdOyB0aGVuIG1rZGlyIC1wICJgZGlybmFtZSAiJEAiYCI7IGZpOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgLUQnU1ZOX1JFVj0iJChzaGVsbCBzdm52ZXJzaW9uIC1uIC4uKSInICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorDQorV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL25ldHdvcmt0YWJsZXMyL05ldHdvcmtUYWJsZU5vZGUubyA6ICQoUFJKX1JPT1RfRElSKS9uZXR3b3JrdGFibGVzMi9OZXR3b3JrVGFibGVOb2RlLmNwcCAkKEZPUkNFX0ZJTEVfQlVJTEQpDQorCSQoVFJBQ0VfRkxBRylpZiBbICEgLWQgImBkaXJuYW1lICIkQCJgIiBdOyB0aGVuIG1rZGlyIC1wICJgZGlybmFtZSAiJEAiYCI7IGZpOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgLUQnU1ZOX1JFVj0iJChzaGVsbCBzdm52ZXJzaW9uIC1uIC4uKSInICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorDQorV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL25ldHdvcmt0YWJsZXMyL091dGdvaW5nRW50cnlSZWNpZXZlci5vIDogJChQUkpfUk9PVF9ESVIpL25ldHdvcmt0YWJsZXMyL091dGdvaW5nRW50cnlSZWNpZXZlci5jcHAgJChGT1JDRV9GSUxFX0JVSUxEKQ0KKwkkKFRSQUNFX0ZMQUcpaWYgWyAhIC1kICJgZGlybmFtZSAiJEAiYCIgXTsgdGhlbiBta2RpciAtcCAiYGRpcm5hbWUgIiRAImAiOyBmaTsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMIC1EJ1NWTl9SRVY9IiQoc2hlbGwgc3ZudmVyc2lvbiAtbiAuLikiJyAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKw0KK1dQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9uZXR3b3JrdGFibGVzMi9UYWJsZUtleUV4aXN0c1dpdGhEaWZmZXJlbnRUeXBlRXhjZXB0aW9uLm8gOiAkKFBSSl9ST09UX0RJUikvbmV0d29ya3RhYmxlczIvVGFibGVLZXlFeGlzdHNXaXRoRGlmZmVyZW50VHlwZUV4Y2VwdGlvbi5jcHAgJChGT1JDRV9GSUxFX0JVSUxEKQ0KKwkkKFRSQUNFX0ZMQUcpaWYgWyAhIC1kICJgZGlybmFtZSAiJEAiYCIgXTsgdGhlbiBta2RpciAtcCAiYGRpcm5hbWUgIiRAImAiOyBmaTsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMIC1EJ1NWTl9SRVY9IiQoc2hlbGwgc3ZudmVyc2lvbiAtbiAuLikiJyAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKw0KK1dQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9uZXR3b3JrdGFibGVzMi9UcmFuc2FjdGlvbkRpcnRpZXIubyA6ICQoUFJKX1JPT1RfRElSKS9uZXR3b3JrdGFibGVzMi9UcmFuc2FjdGlvbkRpcnRpZXIuY3BwICQoRk9SQ0VfRklMRV9CVUlMRCkNCisJJChUUkFDRV9GTEFHKWlmIFsgISAtZCAiYGRpcm5hbWUgIiRAImAiIF07IHRoZW4gbWtkaXIgLXAgImBkaXJuYW1lICIkQCJgIjsgZmk7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAtRCdTVk5fUkVWPSIkKHNoZWxsIHN2bnZlcnNpb24gLW4gLi4pIicgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCisNCitXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvbmV0d29ya3RhYmxlczIvV3JpdGVNYW5hZ2VyLm8gOiAkKFBSSl9ST09UX0RJUikvbmV0d29ya3RhYmxlczIvV3JpdGVNYW5hZ2VyLmNwcCAkKEZPUkNFX0ZJTEVfQlVJTEQpDQorCSQoVFJBQ0VfRkxBRylpZiBbICEgLWQgImBkaXJuYW1lICIkQCJgIiBdOyB0aGVuIG1rZGlyIC1wICJgZGlybmFtZSAiJEAiYCI7IGZpOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgLUQnU1ZOX1JFVj0iJChzaGVsbCBzdm52ZXJzaW9uIC1uIC4uKSInICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorDQorV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL25ldHdvcmt0YWJsZXMyL2NsaWVudC9DbGllbnRDb25uZWN0aW9uQWRhcHRlci5vIDogJChQUkpfUk9PVF9ESVIpL25ldHdvcmt0YWJsZXMyL2NsaWVudC9DbGllbnRDb25uZWN0aW9uQWRhcHRlci5jcHAgJChGT1JDRV9GSUxFX0JVSUxEKQ0KKwkkKFRSQUNFX0ZMQUcpaWYgWyAhIC1kICJgZGlybmFtZSAiJEAiYCIgXTsgdGhlbiBta2RpciAtcCAiYGRpcm5hbWUgIiRAImAiOyBmaTsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMIC1EJ1NWTl9SRVY9IiQoc2hlbGwgc3ZudmVyc2lvbiAtbiAuLikiJyAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKw0KK1dQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9uZXR3b3JrdGFibGVzMi9jbGllbnQvQ2xpZW50Q29ubmVjdGlvblN0YXRlLm8gOiAkKFBSSl9ST09UX0RJUikvbmV0d29ya3RhYmxlczIvY2xpZW50L0NsaWVudENvbm5lY3Rpb25TdGF0ZS5jcHAgJChGT1JDRV9GSUxFX0JVSUxEKQ0KKwkkKFRSQUNFX0ZMQUcpaWYgWyAhIC1kICJgZGlybmFtZSAiJEAiYCIgXTsgdGhlbiBta2RpciAtcCAiYGRpcm5hbWUgIiRAImAiOyBmaTsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMIC1EJ1NWTl9SRVY9IiQoc2hlbGwgc3ZudmVyc2lvbiAtbiAuLikiJyAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKw0KK1dQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9uZXR3b3JrdGFibGVzMi9jbGllbnQvQ2xpZW50TmV0d29ya1RhYmxlRW50cnlTdG9yZS5vIDogJChQUkpfUk9PVF9ESVIpL25ldHdvcmt0YWJsZXMyL2NsaWVudC9DbGllbnROZXR3b3JrVGFibGVFbnRyeVN0b3JlLmNwcCAkKEZPUkNFX0ZJTEVfQlVJTEQpDQorCSQoVFJBQ0VfRkxBRylpZiBbICEgLWQgImBkaXJuYW1lICIkQCJgIiBdOyB0aGVuIG1rZGlyIC1wICJgZGlybmFtZSAiJEAiYCI7IGZpOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgLUQnU1ZOX1JFVj0iJChzaGVsbCBzdm52ZXJzaW9uIC1uIC4uKSInICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorDQorV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL25ldHdvcmt0YWJsZXMyL2NsaWVudC9OZXR3b3JrVGFibGVDbGllbnQubyA6ICQoUFJKX1JPT1RfRElSKS9uZXR3b3JrdGFibGVzMi9jbGllbnQvTmV0d29ya1RhYmxlQ2xpZW50LmNwcCAkKEZPUkNFX0ZJTEVfQlVJTEQpDQorCSQoVFJBQ0VfRkxBRylpZiBbICEgLWQgImBkaXJuYW1lICIkQCJgIiBdOyB0aGVuIG1rZGlyIC1wICJgZGlybmFtZSAiJEAiYCI7IGZpOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgLUQnU1ZOX1JFVj0iJChzaGVsbCBzdm52ZXJzaW9uIC1uIC4uKSInICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorDQorV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL25ldHdvcmt0YWJsZXMyL2Nvbm5lY3Rpb24vQmFkTWVzc2FnZUV4Y2VwdGlvbi5vIDogJChQUkpfUk9PVF9ESVIpL25ldHdvcmt0YWJsZXMyL2Nvbm5lY3Rpb24vQmFkTWVzc2FnZUV4Y2VwdGlvbi5jcHAgJChGT1JDRV9GSUxFX0JVSUxEKQ0KKwkkKFRSQUNFX0ZMQUcpaWYgWyAhIC1kICJgZGlybmFtZSAiJEAiYCIgXTsgdGhlbiBta2RpciAtcCAiYGRpcm5hbWUgIiRAImAiOyBmaTsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMIC1EJ1NWTl9SRVY9IiQoc2hlbGwgc3ZudmVyc2lvbiAtbiAuLikiJyAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKw0KK1dQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9uZXR3b3JrdGFibGVzMi9jb25uZWN0aW9uL0Nvbm5lY3Rpb25Nb25pdG9yVGhyZWFkLm8gOiAkKFBSSl9ST09UX0RJUikvbmV0d29ya3RhYmxlczIvY29ubmVjdGlvbi9Db25uZWN0aW9uTW9uaXRvclRocmVhZC5jcHAgJChGT1JDRV9GSUxFX0JVSUxEKQ0KKwkkKFRSQUNFX0ZMQUcpaWYgWyAhIC1kICJgZGlybmFtZSAiJEAiYCIgXTsgdGhlbiBta2RpciAtcCAiYGRpcm5hbWUgIiRAImAiOyBmaTsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMIC1EJ1NWTl9SRVY9IiQoc2hlbGwgc3ZudmVyc2lvbiAtbiAuLikiJyAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKw0KK1dQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9uZXR3b3JrdGFibGVzMi9jb25uZWN0aW9uL0RhdGFJT1N0cmVhbS5vIDogJChQUkpfUk9PVF9ESVIpL25ldHdvcmt0YWJsZXMyL2Nvbm5lY3Rpb24vRGF0YUlPU3RyZWFtLmNwcCAkKEZPUkNFX0ZJTEVfQlVJTEQpDQorCSQoVFJBQ0VfRkxBRylpZiBbICEgLWQgImBkaXJuYW1lICIkQCJgIiBdOyB0aGVuIG1rZGlyIC1wICJgZGlybmFtZSAiJEAiYCI7IGZpOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgLUQnU1ZOX1JFVj0iJChzaGVsbCBzdm52ZXJzaW9uIC1uIC4uKSInICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorDQorV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL25ldHdvcmt0YWJsZXMyL2Nvbm5lY3Rpb24vTmV0d29ya1RhYmxlQ29ubmVjdGlvbi5vIDogJChQUkpfUk9PVF9ESVIpL25ldHdvcmt0YWJsZXMyL2Nvbm5lY3Rpb24vTmV0d29ya1RhYmxlQ29ubmVjdGlvbi5jcHAgJChGT1JDRV9GSUxFX0JVSUxEKQ0KKwkkKFRSQUNFX0ZMQUcpaWYgWyAhIC1kICJgZGlybmFtZSAiJEAiYCIgXTsgdGhlbiBta2RpciAtcCAiYGRpcm5hbWUgIiRAImAiOyBmaTsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMIC1EJ1NWTl9SRVY9IiQoc2hlbGwgc3ZudmVyc2lvbiAtbiAuLikiJyAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKw0KK1dQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9uZXR3b3JrdGFibGVzMi9zZXJ2ZXIvTmV0d29ya1RhYmxlU2VydmVyLm8gOiAkKFBSSl9ST09UX0RJUikvbmV0d29ya3RhYmxlczIvc2VydmVyL05ldHdvcmtUYWJsZVNlcnZlci5jcHAgJChGT1JDRV9GSUxFX0JVSUxEKQ0KKwkkKFRSQUNFX0ZMQUcpaWYgWyAhIC1kICJgZGlybmFtZSAiJEAiYCIgXTsgdGhlbiBta2RpciAtcCAiYGRpcm5hbWUgIiRAImAiOyBmaTsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMIC1EJ1NWTl9SRVY9IiQoc2hlbGwgc3ZudmVyc2lvbiAtbiAuLikiJyAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKw0KK1dQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9uZXR3b3JrdGFibGVzMi9zZXJ2ZXIvU2VydmVyQ29ubmVjdGlvbkFkYXB0ZXIubyA6ICQoUFJKX1JPT1RfRElSKS9uZXR3b3JrdGFibGVzMi9zZXJ2ZXIvU2VydmVyQ29ubmVjdGlvbkFkYXB0ZXIuY3BwICQoRk9SQ0VfRklMRV9CVUlMRCkNCisJJChUUkFDRV9GTEFHKWlmIFsgISAtZCAiYGRpcm5hbWUgIiRAImAiIF07IHRoZW4gbWtkaXIgLXAgImBkaXJuYW1lICIkQCJgIjsgZmk7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAtRCdTVk5fUkVWPSIkKHNoZWxsIHN2bnZlcnNpb24gLW4gLi4pIicgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCisNCitXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvbmV0d29ya3RhYmxlczIvc2VydmVyL1NlcnZlckNvbm5lY3Rpb25MaXN0Lm8gOiAkKFBSSl9ST09UX0RJUikvbmV0d29ya3RhYmxlczIvc2VydmVyL1NlcnZlckNvbm5lY3Rpb25MaXN0LmNwcCAkKEZPUkNFX0ZJTEVfQlVJTEQpDQorCSQoVFJBQ0VfRkxBRylpZiBbICEgLWQgImBkaXJuYW1lICIkQCJgIiBdOyB0aGVuIG1rZGlyIC1wICJgZGlybmFtZSAiJEAiYCI7IGZpOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgLUQnU1ZOX1JFVj0iJChzaGVsbCBzdm52ZXJzaW9uIC1uIC4uKSInICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorDQorV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL25ldHdvcmt0YWJsZXMyL3NlcnZlci9TZXJ2ZXJDb25uZWN0aW9uU3RhdGUubyA6ICQoUFJKX1JPT1RfRElSKS9uZXR3b3JrdGFibGVzMi9zZXJ2ZXIvU2VydmVyQ29ubmVjdGlvblN0YXRlLmNwcCAkKEZPUkNFX0ZJTEVfQlVJTEQpDQorCSQoVFJBQ0VfRkxBRylpZiBbICEgLWQgImBkaXJuYW1lICIkQCJgIiBdOyB0aGVuIG1rZGlyIC1wICJgZGlybmFtZSAiJEAiYCI7IGZpOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgLUQnU1ZOX1JFVj0iJChzaGVsbCBzdm52ZXJzaW9uIC1uIC4uKSInICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorDQorV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL25ldHdvcmt0YWJsZXMyL3NlcnZlci9TZXJ2ZXJJbmNvbWluZ1N0cmVhbU1vbml0b3IubyA6ICQoUFJKX1JPT1RfRElSKS9uZXR3b3JrdGFibGVzMi9zZXJ2ZXIvU2VydmVySW5jb21pbmdTdHJlYW1Nb25pdG9yLmNwcCAkKEZPUkNFX0ZJTEVfQlVJTEQpDQorCSQoVFJBQ0VfRkxBRylpZiBbICEgLWQgImBkaXJuYW1lICIkQCJgIiBdOyB0aGVuIG1rZGlyIC1wICJgZGlybmFtZSAiJEAiYCI7IGZpOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgLUQnU1ZOX1JFVj0iJChzaGVsbCBzdm52ZXJzaW9uIC1uIC4uKSInICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorDQorV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL25ldHdvcmt0YWJsZXMyL3NlcnZlci9TZXJ2ZXJOZXR3b3JrVGFibGVFbnRyeVN0b3JlLm8gOiAkKFBSSl9ST09UX0RJUikvbmV0d29ya3RhYmxlczIvc2VydmVyL1NlcnZlck5ldHdvcmtUYWJsZUVudHJ5U3RvcmUuY3BwICQoRk9SQ0VfRklMRV9CVUlMRCkNCisJJChUUkFDRV9GTEFHKWlmIFsgISAtZCAiYGRpcm5hbWUgIiRAImAiIF07IHRoZW4gbWtkaXIgLXAgImBkaXJuYW1lICIkQCJgIjsgZmk7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAtRCdTVk5fUkVWPSIkKHNoZWxsIHN2bnZlcnNpb24gLW4gLi4pIicgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCisNCitXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvbmV0d29ya3RhYmxlczIvc3RyZWFtL0ZESU9TdHJlYW0ubyA6ICQoUFJKX1JPT1RfRElSKS9uZXR3b3JrdGFibGVzMi9zdHJlYW0vRkRJT1N0cmVhbS5jcHAgJChGT1JDRV9GSUxFX0JVSUxEKQ0KKwkkKFRSQUNFX0ZMQUcpaWYgWyAhIC1kICJgZGlybmFtZSAiJEAiYCIgXTsgdGhlbiBta2RpciAtcCAiYGRpcm5hbWUgIiRAImAiOyBmaTsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMIC1EJ1NWTl9SRVY9IiQoc2hlbGwgc3ZudmVyc2lvbiAtbiAuLikiJyAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKw0KK1dQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9uZXR3b3JrdGFibGVzMi9zdHJlYW0vU29ja2V0U2VydmVyU3RyZWFtUHJvdmlkZXIubyA6ICQoUFJKX1JPT1RfRElSKS9uZXR3b3JrdGFibGVzMi9zdHJlYW0vU29ja2V0U2VydmVyU3RyZWFtUHJvdmlkZXIuY3BwICQoRk9SQ0VfRklMRV9CVUlMRCkNCisJJChUUkFDRV9GTEFHKWlmIFsgISAtZCAiYGRpcm5hbWUgIiRAImAiIF07IHRoZW4gbWtkaXIgLXAgImBkaXJuYW1lICIkQCJgIjsgZmk7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAtRCdTVk5fUkVWPSIkKHNoZWxsIHN2bnZlcnNpb24gLW4gLi4pIicgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCisNCitXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvbmV0d29ya3RhYmxlczIvc3RyZWFtL1NvY2tldFN0cmVhbUZhY3RvcnkubyA6ICQoUFJKX1JPT1RfRElSKS9uZXR3b3JrdGFibGVzMi9zdHJlYW0vU29ja2V0U3RyZWFtRmFjdG9yeS5jcHAgJChGT1JDRV9GSUxFX0JVSUxEKQ0KKwkkKFRSQUNFX0ZMQUcpaWYgWyAhIC1kICJgZGlybmFtZSAiJEAiYCIgXTsgdGhlbiBta2RpciAtcCAiYGRpcm5hbWUgIiRAImAiOyBmaTsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMIC1EJ1NWTl9SRVY9IiQoc2hlbGwgc3ZudmVyc2lvbiAtbiAuLikiJyAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKw0KK1dQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9uZXR3b3JrdGFibGVzMi9zdHJlYW0vU29ja2V0U3RyZWFtcy5vIDogJChQUkpfUk9PVF9ESVIpL25ldHdvcmt0YWJsZXMyL3N0cmVhbS9Tb2NrZXRTdHJlYW1zLmNwcCAkKEZPUkNFX0ZJTEVfQlVJTEQpDQorCSQoVFJBQ0VfRkxBRylpZiBbICEgLWQgImBkaXJuYW1lICIkQCJgIiBdOyB0aGVuIG1rZGlyIC1wICJgZGlybmFtZSAiJEAiYCI7IGZpOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgLUQnU1ZOX1JFVj0iJChzaGVsbCBzdm52ZXJzaW9uIC1uIC4uKSInICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorDQorV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL25ldHdvcmt0YWJsZXMyL3RocmVhZC9EZWZhdWx0VGhyZWFkTWFuZ2VyLm8gOiAkKFBSSl9ST09UX0RJUikvbmV0d29ya3RhYmxlczIvdGhyZWFkL0RlZmF1bHRUaHJlYWRNYW5nZXIuY3BwICQoRk9SQ0VfRklMRV9CVUlMRCkNCisJJChUUkFDRV9GTEFHKWlmIFsgISAtZCAiYGRpcm5hbWUgIiRAImAiIF07IHRoZW4gbWtkaXIgLXAgImBkaXJuYW1lICIkQCJgIjsgZmk7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAtRCdTVk5fUkVWPSIkKHNoZWxsIHN2bnZlcnNpb24gLW4gLi4pIicgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCisNCitXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvbmV0d29ya3RhYmxlczIvdHlwZS9BcnJheURhdGEubyA6ICQoUFJKX1JPT1RfRElSKS9uZXR3b3JrdGFibGVzMi90eXBlL0FycmF5RGF0YS5jcHAgJChGT1JDRV9GSUxFX0JVSUxEKQ0KKwkkKFRSQUNFX0ZMQUcpaWYgWyAhIC1kICJgZGlybmFtZSAiJEAiYCIgXTsgdGhlbiBta2RpciAtcCAiYGRpcm5hbWUgIiRAImAiOyBmaTsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMIC1EJ1NWTl9SRVY9IiQoc2hlbGwgc3ZudmVyc2lvbiAtbiAuLikiJyAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKw0KK1dQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9uZXR3b3JrdGFibGVzMi90eXBlL0FycmF5RW50cnlUeXBlLm8gOiAkKFBSSl9ST09UX0RJUikvbmV0d29ya3RhYmxlczIvdHlwZS9BcnJheUVudHJ5VHlwZS5jcHAgJChGT1JDRV9GSUxFX0JVSUxEKQ0KKwkkKFRSQUNFX0ZMQUcpaWYgWyAhIC1kICJgZGlybmFtZSAiJEAiYCIgXTsgdGhlbiBta2RpciAtcCAiYGRpcm5hbWUgIiRAImAiOyBmaTsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMIC1EJ1NWTl9SRVY9IiQoc2hlbGwgc3ZudmVyc2lvbiAtbiAuLikiJyAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKw0KK1dQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9uZXR3b3JrdGFibGVzMi90eXBlL0Jvb2xlYW5BcnJheS5vIDogJChQUkpfUk9PVF9ESVIpL25ldHdvcmt0YWJsZXMyL3R5cGUvQm9vbGVhbkFycmF5LmNwcCAkKEZPUkNFX0ZJTEVfQlVJTEQpDQorCSQoVFJBQ0VfRkxBRylpZiBbICEgLWQgImBkaXJuYW1lICIkQCJgIiBdOyB0aGVuIG1rZGlyIC1wICJgZGlybmFtZSAiJEAiYCI7IGZpOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgLUQnU1ZOX1JFVj0iJChzaGVsbCBzdm52ZXJzaW9uIC1uIC4uKSInICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorDQorV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL25ldHdvcmt0YWJsZXMyL3R5cGUvQ29tcGxleERhdGEubyA6ICQoUFJKX1JPT1RfRElSKS9uZXR3b3JrdGFibGVzMi90eXBlL0NvbXBsZXhEYXRhLmNwcCAkKEZPUkNFX0ZJTEVfQlVJTEQpDQorCSQoVFJBQ0VfRkxBRylpZiBbICEgLWQgImBkaXJuYW1lICIkQCJgIiBdOyB0aGVuIG1rZGlyIC1wICJgZGlybmFtZSAiJEAiYCI7IGZpOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgLUQnU1ZOX1JFVj0iJChzaGVsbCBzdm52ZXJzaW9uIC1uIC4uKSInICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorDQorV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL25ldHdvcmt0YWJsZXMyL3R5cGUvQ29tcGxleEVudHJ5VHlwZS5vIDogJChQUkpfUk9PVF9ESVIpL25ldHdvcmt0YWJsZXMyL3R5cGUvQ29tcGxleEVudHJ5VHlwZS5jcHAgJChGT1JDRV9GSUxFX0JVSUxEKQ0KKwkkKFRSQUNFX0ZMQUcpaWYgWyAhIC1kICJgZGlybmFtZSAiJEAiYCIgXTsgdGhlbiBta2RpciAtcCAiYGRpcm5hbWUgIiRAImAiOyBmaTsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMIC1EJ1NWTl9SRVY9IiQoc2hlbGwgc3ZudmVyc2lvbiAtbiAuLikiJyAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKw0KK1dQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9uZXR3b3JrdGFibGVzMi90eXBlL0RlZmF1bHRFbnRyeVR5cGVzLm8gOiAkKFBSSl9ST09UX0RJUikvbmV0d29ya3RhYmxlczIvdHlwZS9EZWZhdWx0RW50cnlUeXBlcy5jcHAgJChGT1JDRV9GSUxFX0JVSUxEKQ0KKwkkKFRSQUNFX0ZMQUcpaWYgWyAhIC1kICJgZGlybmFtZSAiJEAiYCIgXTsgdGhlbiBta2RpciAtcCAiYGRpcm5hbWUgIiRAImAiOyBmaTsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMIC1EJ1NWTl9SRVY9IiQoc2hlbGwgc3ZudmVyc2lvbiAtbiAuLikiJyAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKw0KK1dQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9uZXR3b3JrdGFibGVzMi90eXBlL05ldHdvcmtUYWJsZUVudHJ5VHlwZS5vIDogJChQUkpfUk9PVF9ESVIpL25ldHdvcmt0YWJsZXMyL3R5cGUvTmV0d29ya1RhYmxlRW50cnlUeXBlLmNwcCAkKEZPUkNFX0ZJTEVfQlVJTEQpDQorCSQoVFJBQ0VfRkxBRylpZiBbICEgLWQgImBkaXJuYW1lICIkQCJgIiBdOyB0aGVuIG1rZGlyIC1wICJgZGlybmFtZSAiJEAiYCI7IGZpOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgLUQnU1ZOX1JFVj0iJChzaGVsbCBzdm52ZXJzaW9uIC1uIC4uKSInICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorDQorV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL25ldHdvcmt0YWJsZXMyL3R5cGUvTmV0d29ya1RhYmxlRW50cnlUeXBlTWFuYWdlci5vIDogJChQUkpfUk9PVF9ESVIpL25ldHdvcmt0YWJsZXMyL3R5cGUvTmV0d29ya1RhYmxlRW50cnlUeXBlTWFuYWdlci5jcHAgJChGT1JDRV9GSUxFX0JVSUxEKQ0KKwkkKFRSQUNFX0ZMQUcpaWYgWyAhIC1kICJgZGlybmFtZSAiJEAiYCIgXTsgdGhlbiBta2RpciAtcCAiYGRpcm5hbWUgIiRAImAiOyBmaTsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMIC1EJ1NWTl9SRVY9IiQoc2hlbGwgc3ZudmVyc2lvbiAtbiAuLikiJyAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKw0KK1dQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9uZXR3b3JrdGFibGVzMi90eXBlL051bWJlckFycmF5Lm8gOiAkKFBSSl9ST09UX0RJUikvbmV0d29ya3RhYmxlczIvdHlwZS9OdW1iZXJBcnJheS5jcHAgJChGT1JDRV9GSUxFX0JVSUxEKQ0KKwkkKFRSQUNFX0ZMQUcpaWYgWyAhIC1kICJgZGlybmFtZSAiJEAiYCIgXTsgdGhlbiBta2RpciAtcCAiYGRpcm5hbWUgIiRAImAiOyBmaTsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMIC1EJ1NWTl9SRVY9IiQoc2hlbGwgc3ZudmVyc2lvbiAtbiAuLikiJyAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKw0KK1dQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9uZXR3b3JrdGFibGVzMi90eXBlL1N0cmluZ0FycmF5Lm8gOiAkKFBSSl9ST09UX0RJUikvbmV0d29ya3RhYmxlczIvdHlwZS9TdHJpbmdBcnJheS5jcHAgJChGT1JDRV9GSUxFX0JVSUxEKQ0KKwkkKFRSQUNFX0ZMQUcpaWYgWyAhIC1kICJgZGlybmFtZSAiJEAiYCIgXTsgdGhlbiBta2RpciAtcCAiYGRpcm5hbWUgIiRAImAiOyBmaTsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMIC1EJ1NWTl9SRVY9IiQoc2hlbGwgc3ZudmVyc2lvbiAtbiAuLikiJyAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKw0KK1dQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9uZXR3b3JrdGFibGVzMi91dGlsL0VPRkV4Y2VwdGlvbi5vIDogJChQUkpfUk9PVF9ESVIpL25ldHdvcmt0YWJsZXMyL3V0aWwvRU9GRXhjZXB0aW9uLmNwcCAkKEZPUkNFX0ZJTEVfQlVJTEQpDQorCSQoVFJBQ0VfRkxBRylpZiBbICEgLWQgImBkaXJuYW1lICIkQCJgIiBdOyB0aGVuIG1rZGlyIC1wICJgZGlybmFtZSAiJEAiYCI7IGZpOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgLUQnU1ZOX1JFVj0iJChzaGVsbCBzdm52ZXJzaW9uIC1uIC4uKSInICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorDQorV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL25ldHdvcmt0YWJsZXMyL3V0aWwvSU9FeGNlcHRpb24ubyA6ICQoUFJKX1JPT1RfRElSKS9uZXR3b3JrdGFibGVzMi91dGlsL0lPRXhjZXB0aW9uLmNwcCAkKEZPUkNFX0ZJTEVfQlVJTEQpDQorCSQoVFJBQ0VfRkxBRylpZiBbICEgLWQgImBkaXJuYW1lICIkQCJgIiBdOyB0aGVuIG1rZGlyIC1wICJgZGlybmFtZSAiJEAiYCI7IGZpOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgLUQnU1ZOX1JFVj0iJChzaGVsbCBzdm52ZXJzaW9uIC1uIC4uKSInICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorDQorV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL25ldHdvcmt0YWJsZXMyL3V0aWwvSWxsZWdhbFN0YXRlRXhjZXB0aW9uLm8gOiAkKFBSSl9ST09UX0RJUikvbmV0d29ya3RhYmxlczIvdXRpbC9JbGxlZ2FsU3RhdGVFeGNlcHRpb24uY3BwICQoRk9SQ0VfRklMRV9CVUlMRCkNCisJJChUUkFDRV9GTEFHKWlmIFsgISAtZCAiYGRpcm5hbWUgIiRAImAiIF07IHRoZW4gbWtkaXIgLXAgImBkaXJuYW1lICIkQCJgIjsgZmk7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAtRCdTVk5fUkVWPSIkKHNoZWxsIHN2bnZlcnNpb24gLW4gLi4pIicgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCisNCitXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvbmV0d29ya3RhYmxlczIvdXRpbC9TdHJpbmdDYWNoZS5vIDogJChQUkpfUk9PVF9ESVIpL25ldHdvcmt0YWJsZXMyL3V0aWwvU3RyaW5nQ2FjaGUuY3BwICQoRk9SQ0VfRklMRV9CVUlMRCkNCisJJChUUkFDRV9GTEFHKWlmIFsgISAtZCAiYGRpcm5hbWUgIiRAImAiIF07IHRoZW4gbWtkaXIgLXAgImBkaXJuYW1lICIkQCJgIjsgZmk7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAtRCdTVk5fUkVWPSIkKHNoZWxsIHN2bnZlcnNpb24gLW4gLi4pIicgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCisNCitXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvbmV0d29ya3RhYmxlczIvdXRpbC9TeXN0ZW0ubyA6ICQoUFJKX1JPT1RfRElSKS9uZXR3b3JrdGFibGVzMi91dGlsL1N5c3RlbS5jcHAgJChGT1JDRV9GSUxFX0JVSUxEKQ0KKwkkKFRSQUNFX0ZMQUcpaWYgWyAhIC1kICJgZGlybmFtZSAiJEAiYCIgXTsgdGhlbiBta2RpciAtcCAiYGRpcm5hbWUgIiRAImAiOyBmaTsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMIC1EJ1NWTl9SRVY9IiQoc2hlbGwgc3ZudmVyc2lvbiAtbiAuLikiJyAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKw0KK1dQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi90YWJsZXMvVGFibGVLZXlOb3REZWZpbmVkRXhjZXB0aW9uLm8gOiAkKFBSSl9ST09UX0RJUikvdGFibGVzL1RhYmxlS2V5Tm90RGVmaW5lZEV4Y2VwdGlvbi5jcHAgJChGT1JDRV9GSUxFX0JVSUxEKQ0KKwkkKFRSQUNFX0ZMQUcpaWYgWyAhIC1kICJgZGlybmFtZSAiJEAiYCIgXTsgdGhlbiBta2RpciAtcCAiYGRpcm5hbWUgIiRAImAiOyBmaTsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMIC1EJ1NWTl9SRVY9IiQoc2hlbGwgc3ZudmVyc2lvbiAtbiAuLikiJyAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKw0KK09CSkVDVFNfV1BJTGliID0gV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL0FEWEwzNDVfSTJDLm8gXA0KKwkgV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL0FEWEwzNDVfU1BJLm8gXA0KKwkgV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL0FjY2VsZXJvbWV0ZXIubyBcDQorCSBXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvQW5hbG9nQ2hhbm5lbC5vIFwNCisJIFdQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9BbmFsb2dNb2R1bGUubyBcDQorCSBXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvQW5hbG9nVHJpZ2dlci5vIFwNCisJIFdQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9BbmFsb2dUcmlnZ2VyT3V0cHV0Lm8gXA0KKwkgV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL0J1dHRvbnMvQW5hbG9nSU9CdXR0b24ubyBcDQorCSBXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvQnV0dG9ucy9CdXR0b24ubyBcDQorCSBXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvQnV0dG9ucy9CdXR0b25TY2hlZHVsZXIubyBcDQorCSBXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvQnV0dG9ucy9EaWdpdGFsSU9CdXR0b24ubyBcDQorCSBXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvQnV0dG9ucy9IZWxkQnV0dG9uU2NoZWR1bGVyLm8gXA0KKwkgV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL0J1dHRvbnMvSW50ZXJuYWxCdXR0b24ubyBcDQorCSBXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvQnV0dG9ucy9Kb3lzdGlja0J1dHRvbi5vIFwNCisJIFdQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9CdXR0b25zL05ldHdvcmtCdXR0b24ubyBcDQorCSBXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvQnV0dG9ucy9QcmVzc2VkQnV0dG9uU2NoZWR1bGVyLm8gXA0KKwkgV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL0J1dHRvbnMvUmVsZWFzZWRCdXR0b25TY2hlZHVsZXIubyBcDQorCSBXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvQnV0dG9ucy9UcmlnZ2VyLm8gXA0KKwkgV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL0NBTkphZ3Vhci5vIFwNCisJIFdQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9Db21tYW5kcy9Db21tYW5kLm8gXA0KKwkgV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL0NvbW1hbmRzL0NvbW1hbmRHcm91cC5vIFwNCisJIFdQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9Db21tYW5kcy9Db21tYW5kR3JvdXBFbnRyeS5vIFwNCisJIFdQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9Db21tYW5kcy9QSURDb21tYW5kLm8gXA0KKwkgV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL0NvbW1hbmRzL1BJRFN1YnN5c3RlbS5vIFwNCisJIFdQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9Db21tYW5kcy9QcmludENvbW1hbmQubyBcDQorCSBXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvQ29tbWFuZHMvU2NoZWR1bGVyLm8gXA0KKwkgV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL0NvbW1hbmRzL1N0YXJ0Q29tbWFuZC5vIFwNCisJIFdQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9Db21tYW5kcy9TdWJzeXN0ZW0ubyBcDQorCSBXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvQ29tbWFuZHMvV2FpdENvbW1hbmQubyBcDQorCSBXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvQ29tbWFuZHMvV2FpdEZvckNoaWxkcmVuLm8gXA0KKwkgV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL0NvbW1hbmRzL1dhaXRVbnRpbENvbW1hbmQubyBcDQorCSBXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvQ29tcHJlc3Nvci5vIFwNCisJIFdQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9Db3VudGVyLm8gXA0KKwkgV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL0Rhc2hib2FyZC5vIFwNCisJIFdQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9EaWdpdGFsSW5wdXQubyBcDQorCSBXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvRGlnaXRhbE1vZHVsZS5vIFwNCisJIFdQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9EaWdpdGFsT3V0cHV0Lm8gXA0KKwkgV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL0RpZ2l0YWxTb3VyY2UubyBcDQorCSBXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvRG91YmxlU29sZW5vaWQubyBcDQorCSBXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvRHJpdmVyU3RhdGlvbi5vIFwNCisJIFdQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9Ecml2ZXJTdGF0aW9uRW5oYW5jZWRJTy5vIFwNCisJIFdQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9Ecml2ZXJTdGF0aW9uTENELm8gXA0KKwkgV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL0VuY29kZXIubyBcDQorCSBXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvRXJyb3IubyBcDQorCSBXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvRXJyb3JCYXNlLm8gXA0KKwkgV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL0dlYXJUb290aC5vIFwNCisJIFdQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9HeXJvLm8gXA0KKwkgV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL0hpVGVjaG5pY0NvbXBhc3MubyBcDQorCSBXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvSTJDLm8gXA0KKwkgV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL0ludGVycnVwdGFibGVTZW5zb3JCYXNlLm8gXA0KKwkgV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL0l0ZXJhdGl2ZVJvYm90Lm8gXA0KKwkgV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL0phZ3Vhci5vIFwNCisJIFdQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9Kb3lzdGljay5vIFwNCisJIFdQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9LaW5lY3QubyBcDQorCSBXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvS2luZWN0U3RpY2subyBcDQorCSBXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvTGl2ZVdpbmRvdy9MaXZlV2luZG93Lm8gXA0KKwkgV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL0xpdmVXaW5kb3cvTGl2ZVdpbmRvd1N0YXR1c0xpc3RlbmVyLm8gXA0KKwkgV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL01vZHVsZS5vIFwNCisJIFdQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9Nb3RvclNhZmV0eUhlbHBlci5vIFwNCisJIFdQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9Ob3RpZmllci5vIFwNCisJIFdQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9QSURDb250cm9sbGVyLm8gXA0KKwkgV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL1BXTS5vIFwNCisJIFdQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9QcmVmZXJlbmNlcy5vIFwNCisJIFdQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9SZWxheS5vIFwNCisJIFdQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9SZXNvdXJjZS5vIFwNCisJIFdQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9Sb2JvdEJhc2UubyBcDQorCSBXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvUm9ib3REcml2ZS5vIFwNCisJIFdQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9TUEkubyBcDQorCSBXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvU2FmZVBXTS5vIFwNCisJIFdQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9TZW5zb3JCYXNlLm8gXA0KKwkgV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL1NlcmlhbFBvcnQubyBcDQorCSBXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvU2Vydm8ubyBcDQorCSBXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvU2ltcGxlUm9ib3QubyBcDQorCSBXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvU21hcnREYXNoYm9hcmQvU2VuZGFibGVDaG9vc2VyLm8gXA0KKwkgV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL1NtYXJ0RGFzaGJvYXJkL1NtYXJ0RGFzaGJvYXJkLm8gXA0KKwkgV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL1NvbGVub2lkLm8gXA0KKwkgV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL1NvbGVub2lkQmFzZS5vIFwNCisJIFdQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9TeW5jaHJvbml6ZWQubyBcDQorCSBXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvVGFsb24ubyBcDQorCSBXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvVGFzay5vIFwNCisJIFdQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9UaW1lci5vIFwNCisJIFdQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9VbHRyYXNvbmljLm8gXA0KKwkgV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL1V0aWxpdHkubyBcDQorCSBXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvVmljdG9yLm8gXA0KKwkgV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL1Zpc2lvbi9BeGlzQ2FtZXJhLm8gXA0KKwkgV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL1Zpc2lvbi9BeGlzQ2FtZXJhUGFyYW1zLm8gXA0KKwkgV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL1Zpc2lvbi9CaW5hcnlJbWFnZS5vIFwNCisJIFdQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9WaXNpb24vQ29sb3JJbWFnZS5vIFwNCisJIFdQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9WaXNpb24vRW51bUNhbWVyYVBhcmFtZXRlci5vIFwNCisJIFdQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9WaXNpb24vSFNMSW1hZ2UubyBcDQorCSBXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvVmlzaW9uL0ltYWdlQmFzZS5vIFwNCisJIFdQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9WaXNpb24vSW50Q2FtZXJhUGFyYW1ldGVyLm8gXA0KKwkgV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL1Zpc2lvbi9Nb25vSW1hZ2UubyBcDQorCSBXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvVmlzaW9uL1BDVmlkZW9TZXJ2ZXIubyBcDQorCSBXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvVmlzaW9uL1JHQkltYWdlLm8gXA0KKwkgV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL1Zpc2lvbi9UaHJlc2hvbGQubyBcDQorCSBXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvVmlzaW9uMjAwOS9BeGlzQ2FtZXJhLm8gXA0KKwkgV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL1Zpc2lvbjIwMDkvQmFlVXRpbGl0aWVzLm8gXA0KKwkgV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL1Zpc2lvbjIwMDkvRnJjRXJyb3IubyBcDQorCSBXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvVmlzaW9uMjAwOS9UcmFja0FQSS5vIFwNCisJIFdQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9WaXNpb24yMDA5L1Zpc2lvbkFQSS5vIFwNCisJIFdQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9XYXRjaGRvZy5vIFwNCisJIFdQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9uZXR3b3JrdGFibGVzL05ldHdvcmtUYWJsZS5vIFwNCisJIFdQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9uZXR3b3JrdGFibGVzL05ldHdvcmtUYWJsZUNvbm5lY3Rpb25MaXN0ZW5lckFkYXB0ZXIubyBcDQorCSBXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvbmV0d29ya3RhYmxlcy9OZXR3b3JrVGFibGVLZXlMaXN0ZW5lckFkYXB0ZXIubyBcDQorCSBXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvbmV0d29ya3RhYmxlcy9OZXR3b3JrVGFibGVMaXN0ZW5lckFkYXB0ZXIubyBcDQorCSBXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvbmV0d29ya3RhYmxlcy9OZXR3b3JrVGFibGVNb2RlLm8gXA0KKwkgV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL25ldHdvcmt0YWJsZXMvTmV0d29ya1RhYmxlUHJvdmlkZXIubyBcDQorCSBXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvbmV0d29ya3RhYmxlcy9OZXR3b3JrVGFibGVTdWJMaXN0ZW5lckFkYXB0ZXIubyBcDQorCSBXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvbmV0d29ya3RhYmxlczIvQWJzdHJhY3ROZXR3b3JrVGFibGVFbnRyeVN0b3JlLm8gXA0KKwkgV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL25ldHdvcmt0YWJsZXMyL05ldHdvcmtUYWJsZUVudHJ5Lm8gXA0KKwkgV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL25ldHdvcmt0YWJsZXMyL05ldHdvcmtUYWJsZU5vZGUubyBcDQorCSBXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvbmV0d29ya3RhYmxlczIvT3V0Z29pbmdFbnRyeVJlY2lldmVyLm8gXA0KKwkgV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL25ldHdvcmt0YWJsZXMyL1RhYmxlS2V5RXhpc3RzV2l0aERpZmZlcmVudFR5cGVFeGNlcHRpb24ubyBcDQorCSBXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvbmV0d29ya3RhYmxlczIvVHJhbnNhY3Rpb25EaXJ0aWVyLm8gXA0KKwkgV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL25ldHdvcmt0YWJsZXMyL1dyaXRlTWFuYWdlci5vIFwNCisJIFdQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9uZXR3b3JrdGFibGVzMi9jbGllbnQvQ2xpZW50Q29ubmVjdGlvbkFkYXB0ZXIubyBcDQorCSBXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvbmV0d29ya3RhYmxlczIvY2xpZW50L0NsaWVudENvbm5lY3Rpb25TdGF0ZS5vIFwNCisJIFdQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9uZXR3b3JrdGFibGVzMi9jbGllbnQvQ2xpZW50TmV0d29ya1RhYmxlRW50cnlTdG9yZS5vIFwNCisJIFdQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9uZXR3b3JrdGFibGVzMi9jbGllbnQvTmV0d29ya1RhYmxlQ2xpZW50Lm8gXA0KKwkgV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL25ldHdvcmt0YWJsZXMyL2Nvbm5lY3Rpb24vQmFkTWVzc2FnZUV4Y2VwdGlvbi5vIFwNCisJIFdQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9uZXR3b3JrdGFibGVzMi9jb25uZWN0aW9uL0Nvbm5lY3Rpb25Nb25pdG9yVGhyZWFkLm8gXA0KKwkgV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL25ldHdvcmt0YWJsZXMyL2Nvbm5lY3Rpb24vRGF0YUlPU3RyZWFtLm8gXA0KKwkgV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL25ldHdvcmt0YWJsZXMyL2Nvbm5lY3Rpb24vTmV0d29ya1RhYmxlQ29ubmVjdGlvbi5vIFwNCisJIFdQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9uZXR3b3JrdGFibGVzMi9zZXJ2ZXIvTmV0d29ya1RhYmxlU2VydmVyLm8gXA0KKwkgV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL25ldHdvcmt0YWJsZXMyL3NlcnZlci9TZXJ2ZXJDb25uZWN0aW9uQWRhcHRlci5vIFwNCisJIFdQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9uZXR3b3JrdGFibGVzMi9zZXJ2ZXIvU2VydmVyQ29ubmVjdGlvbkxpc3QubyBcDQorCSBXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvbmV0d29ya3RhYmxlczIvc2VydmVyL1NlcnZlckNvbm5lY3Rpb25TdGF0ZS5vIFwNCisJIFdQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9uZXR3b3JrdGFibGVzMi9zZXJ2ZXIvU2VydmVySW5jb21pbmdTdHJlYW1Nb25pdG9yLm8gXA0KKwkgV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL25ldHdvcmt0YWJsZXMyL3NlcnZlci9TZXJ2ZXJOZXR3b3JrVGFibGVFbnRyeVN0b3JlLm8gXA0KKwkgV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL25ldHdvcmt0YWJsZXMyL3N0cmVhbS9GRElPU3RyZWFtLm8gXA0KKwkgV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL25ldHdvcmt0YWJsZXMyL3N0cmVhbS9Tb2NrZXRTZXJ2ZXJTdHJlYW1Qcm92aWRlci5vIFwNCisJIFdQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9uZXR3b3JrdGFibGVzMi9zdHJlYW0vU29ja2V0U3RyZWFtRmFjdG9yeS5vIFwNCisJIFdQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9uZXR3b3JrdGFibGVzMi9zdHJlYW0vU29ja2V0U3RyZWFtcy5vIFwNCisJIFdQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9uZXR3b3JrdGFibGVzMi90aHJlYWQvRGVmYXVsdFRocmVhZE1hbmdlci5vIFwNCisJIFdQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9uZXR3b3JrdGFibGVzMi90eXBlL0FycmF5RGF0YS5vIFwNCisJIFdQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9uZXR3b3JrdGFibGVzMi90eXBlL0FycmF5RW50cnlUeXBlLm8gXA0KKwkgV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL25ldHdvcmt0YWJsZXMyL3R5cGUvQm9vbGVhbkFycmF5Lm8gXA0KKwkgV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL25ldHdvcmt0YWJsZXMyL3R5cGUvQ29tcGxleERhdGEubyBcDQorCSBXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvbmV0d29ya3RhYmxlczIvdHlwZS9Db21wbGV4RW50cnlUeXBlLm8gXA0KKwkgV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL25ldHdvcmt0YWJsZXMyL3R5cGUvRGVmYXVsdEVudHJ5VHlwZXMubyBcDQorCSBXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvbmV0d29ya3RhYmxlczIvdHlwZS9OZXR3b3JrVGFibGVFbnRyeVR5cGUubyBcDQorCSBXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvbmV0d29ya3RhYmxlczIvdHlwZS9OZXR3b3JrVGFibGVFbnRyeVR5cGVNYW5hZ2VyLm8gXA0KKwkgV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL25ldHdvcmt0YWJsZXMyL3R5cGUvTnVtYmVyQXJyYXkubyBcDQorCSBXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvbmV0d29ya3RhYmxlczIvdHlwZS9TdHJpbmdBcnJheS5vIFwNCisJIFdQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9uZXR3b3JrdGFibGVzMi91dGlsL0VPRkV4Y2VwdGlvbi5vIFwNCisJIFdQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9uZXR3b3JrdGFibGVzMi91dGlsL0lPRXhjZXB0aW9uLm8gXA0KKwkgV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL25ldHdvcmt0YWJsZXMyL3V0aWwvSWxsZWdhbFN0YXRlRXhjZXB0aW9uLm8gXA0KKwkgV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL25ldHdvcmt0YWJsZXMyL3V0aWwvU3RyaW5nQ2FjaGUubyBcDQorCSBXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvbmV0d29ya3RhYmxlczIvdXRpbC9TeXN0ZW0ubyBcDQorCSBXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvdGFibGVzL1RhYmxlS2V5Tm90RGVmaW5lZEV4Y2VwdGlvbi5vDQorDQorV1BJTGliLyQoTU9ERV9ESVIpL1dQSUxpYi5hIDogJChPQkpFQ1RTX1dQSUxpYikNCisJJChUUkFDRV9GTEFHKWlmIFsgISAtZCAiYGRpcm5hbWUgIiRAImAiIF07IHRoZW4gbWtkaXIgLXAgImBkaXJuYW1lICIkQCJgIjsgZmk7ZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClhcnBwYyBjcnVzICIkQCIgJChPQkpFQ1RTX1dQSUxpYikNCisNCitXUElMaWIvJChNT0RFX0RJUikvV1BJTGliX2NvbXBpbGVfZmlsZSA6ICQoRklMRSkgOw0KKw0KK19jbGVhbiA6OiBXUElMaWIvJChNT0RFX0RJUikvV1BJTGliX2NsZWFuDQorDQorV1BJTGliLyQoTU9ERV9ESVIpL1dQSUxpYl9jbGVhbiA6IA0KKwkkKFRSQUNFX0ZMQUcpaWYgWyAtZCAiV1BJTGliIiBdOyB0aGVuIGNkICJXUElMaWIiOyBybSAtcmYgJChNT0RFX0RJUik7IGZpDQorDQorDQorIyBKYXZhQ2FtZXJhTGliDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0phdmFDYW1lcmFMaWIvJChNT0RFX0RJUikvJSA6IERFQlVHRkxBR1NfQy1Db21waWxlciA9IC1nDQorSmF2YUNhbWVyYUxpYi8kKE1PREVfRElSKS8lIDogREVCVUdGTEFHU19DKystQ29tcGlsZXIgPSAtZw0KK0phdmFDYW1lcmFMaWIvJChNT0RFX0RJUikvJSA6IERFQlVHRkxBR1NfTGlua2VyID0gLWcNCitKYXZhQ2FtZXJhTGliLyQoTU9ERV9ESVIpLyUgOiBERUJVR0ZMQUdTX1BhcnRpYWwtSW1hZ2UtTGlua2VyID0gDQorSmF2YUNhbWVyYUxpYi8kKE1PREVfRElSKS8lIDogREVCVUdGTEFHU19MaWJyYXJpYW4gPSANCitKYXZhQ2FtZXJhTGliLyQoTU9ERV9ESVIpLyUgOiBERUJVR0ZMQUdTX0Fzc2VtYmxlciA9IC1nDQorZWxzZQ0KK0phdmFDYW1lcmFMaWIvJChNT0RFX0RJUikvJSA6IERFQlVHRkxBR1NfQy1Db21waWxlciA9IC1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4NCitKYXZhQ2FtZXJhTGliLyQoTU9ERV9ESVIpLyUgOiBERUJVR0ZMQUdTX0MrKy1Db21waWxlciA9IC1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4NCitKYXZhQ2FtZXJhTGliLyQoTU9ERV9ESVIpLyUgOiBERUJVR0ZMQUdTX0xpbmtlciA9IC1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4NCitKYXZhQ2FtZXJhTGliLyQoTU9ERV9ESVIpLyUgOiBERUJVR0ZMQUdTX1BhcnRpYWwtSW1hZ2UtTGlua2VyID0gDQorSmF2YUNhbWVyYUxpYi8kKE1PREVfRElSKS8lIDogREVCVUdGTEFHU19MaWJyYXJpYW4gPSANCitKYXZhQ2FtZXJhTGliLyQoTU9ERV9ESVIpLyUgOiBERUJVR0ZMQUdTX0Fzc2VtYmxlciA9IC1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4NCitlbmRpZg0KK0phdmFDYW1lcmFMaWIvJChNT0RFX0RJUikvJSA6IElERV9JTkNMVURFUyA9IC1JLi4gLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2ggLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2gvd3JuL2NvcmVpcCANCitKYXZhQ2FtZXJhTGliLyQoTU9ERV9ESVIpLyUgOiBJREVfTElCUkFSSUVTID0gDQorSmF2YUNhbWVyYUxpYi8kKE1PREVfRElSKS8lIDogSURFX0RFRklORVMgPSANCitKYXZhQ2FtZXJhTGliLyQoTU9ERV9ESVIpLyUgOiBQUk9KRUNUX1RZUEUgPSBES00NCitKYXZhQ2FtZXJhTGliLyQoTU9ERV9ESVIpLyUgOiBERUZJTkVTID0gDQorSmF2YUNhbWVyYUxpYi8kKE1PREVfRElSKS8lIDogRVhQQU5EX0RCRyA9IDANCitKYXZhQ2FtZXJhTGliLyQoTU9ERV9ESVIpLyUgOiBWWF9DUFVfRkFNSUxZID0gcHBjDQorSmF2YUNhbWVyYUxpYi8kKE1PREVfRElSKS8lIDogQ1BVID0gUFBDNjAzDQorSmF2YUNhbWVyYUxpYi8kKE1PREVfRElSKS8lIDogVE9PTF9GQU1JTFkgPSBnbnUNCitKYXZhQ2FtZXJhTGliLyQoTU9ERV9ESVIpLyUgOiBUT09MID0gZ251DQorSmF2YUNhbWVyYUxpYi8kKE1PREVfRElSKS8lIDogVE9PTF9QQVRIID0gDQorSmF2YUNhbWVyYUxpYi8kKE1PREVfRElSKS8lIDogQ0NfQVJDSF9TUEVDID0gLW1jcHU9NjAzIC1tc3RyaWN0LWFsaWduIC1tbm8taW1wbGljaXQtZnAgLW1sb25nY2FsbA0KK0phdmFDYW1lcmFMaWIvJChNT0RFX0RJUikvJSA6IExJQlBBVEggPSANCitKYXZhQ2FtZXJhTGliLyQoTU9ERV9ESVIpLyUgOiBMSUJTID0gDQorSmF2YUNhbWVyYUxpYi8kKE1PREVfRElSKS8lIDogT0JKX0RJUiA6PSBKYXZhQ2FtZXJhTGliLyQoTU9ERV9ESVIpDQorDQorSmF2YUNhbWVyYUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1BDVmlkZW9TZXJ2ZXIubyA6ICQoUFJKX1JPT1RfRElSKS9WaXNpb24vUENWaWRlb1NlcnZlci5jcHAgJChGT1JDRV9GSUxFX0JVSUxEKQ0KKwkkKFRSQUNFX0ZMQUcpaWYgWyAhIC1kICJgZGlybmFtZSAiJEAiYCIgXTsgdGhlbiBta2RpciAtcCAiYGRpcm5hbWUgIiRAImAiOyBmaTsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtREpBVkFfQ0FNRVJBX0xJQj0xIC1EX1dSU19LRVJORUwgLUQnU1ZOX1JFVj0iJChzaGVsbCBzdm52ZXJzaW9uIC1uIC4uKSInICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorDQorSmF2YUNhbWVyYUxpYi8kKE1PREVfRElSKS9PYmplY3RzL0F4aXNDYW1lcmEubyA6ICQoUFJKX1JPT1RfRElSKS9WaXNpb24vQXhpc0NhbWVyYS5jcHAgJChGT1JDRV9GSUxFX0JVSUxEKQ0KKwkkKFRSQUNFX0ZMQUcpaWYgWyAhIC1kICJgZGlybmFtZSAiJEAiYCIgXTsgdGhlbiBta2RpciAtcCAiYGRpcm5hbWUgIiRAImAiOyBmaTsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtREpBVkFfQ0FNRVJBX0xJQj0xIC1EX1dSU19LRVJORUwgLUQnU1ZOX1JFVj0iJChzaGVsbCBzdm52ZXJzaW9uIC1uIC4uKSInICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorDQorSmF2YUNhbWVyYUxpYi8kKE1PREVfRElSKS9PYmplY3RzL0F4aXNDYW1lcmFQYXJhbXMubyA6ICQoUFJKX1JPT1RfRElSKS9WaXNpb24vQXhpc0NhbWVyYVBhcmFtcy5jcHAgJChGT1JDRV9GSUxFX0JVSUxEKQ0KKwkkKFRSQUNFX0ZMQUcpaWYgWyAhIC1kICJgZGlybmFtZSAiJEAiYCIgXTsgdGhlbiBta2RpciAtcCAiYGRpcm5hbWUgIiRAImAiOyBmaTsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtREpBVkFfQ0FNRVJBX0xJQj0xIC1EX1dSU19LRVJORUwgLUQnU1ZOX1JFVj0iJChzaGVsbCBzdm52ZXJzaW9uIC1uIC4uKSInICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorDQorSmF2YUNhbWVyYUxpYi8kKE1PREVfRElSKS9PYmplY3RzL0VudW1DYW1lcmFQYXJhbWV0ZXIubyA6ICQoUFJKX1JPT1RfRElSKS9WaXNpb24vRW51bUNhbWVyYVBhcmFtZXRlci5jcHAgJChGT1JDRV9GSUxFX0JVSUxEKQ0KKwkkKFRSQUNFX0ZMQUcpaWYgWyAhIC1kICJgZGlybmFtZSAiJEAiYCIgXTsgdGhlbiBta2RpciAtcCAiYGRpcm5hbWUgIiRAImAiOyBmaTsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtREpBVkFfQ0FNRVJBX0xJQj0xIC1EX1dSU19LRVJORUwgLUQnU1ZOX1JFVj0iJChzaGVsbCBzdm52ZXJzaW9uIC1uIC4uKSInICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorDQorSmF2YUNhbWVyYUxpYi8kKE1PREVfRElSKS9PYmplY3RzL0ludENhbWVyYVBhcmFtZXRlci5vIDogJChQUkpfUk9PVF9ESVIpL1Zpc2lvbi9JbnRDYW1lcmFQYXJhbWV0ZXIuY3BwICQoRk9SQ0VfRklMRV9CVUlMRCkNCisJJChUUkFDRV9GTEFHKWlmIFsgISAtZCAiYGRpcm5hbWUgIiRAImAiIF07IHRoZW4gbWtkaXIgLXAgImBkaXJuYW1lICIkQCJgIjsgZmk7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURKQVZBX0NBTUVSQV9MSUI9MSAtRF9XUlNfS0VSTkVMIC1EJ1NWTl9SRVY9IiQoc2hlbGwgc3ZudmVyc2lvbiAtbiAuLikiJyAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKw0KK0phdmFDYW1lcmFMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9FcnJvci5vIDogJChQUkpfUk9PVF9ESVIpL0Vycm9yLmNwcCAkKEZPUkNFX0ZJTEVfQlVJTEQpDQorCSQoVFJBQ0VfRkxBRylpZiBbICEgLWQgImBkaXJuYW1lICIkQCJgIiBdOyB0aGVuIG1rZGlyIC1wICJgZGlybmFtZSAiJEAiYCI7IGZpOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1ESkFWQV9DQU1FUkFfTElCPTEgLURfV1JTX0tFUk5FTCAtRCdTVk5fUkVWPSIkKHNoZWxsIHN2bnZlcnNpb24gLW4gLi4pIicgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCisNCitKYXZhQ2FtZXJhTGliLyQoTU9ERV9ESVIpL09iamVjdHMvRXJyb3JCYXNlLm8gOiAkKFBSSl9ST09UX0RJUikvRXJyb3JCYXNlLmNwcCAkKEZPUkNFX0ZJTEVfQlVJTEQpDQorCSQoVFJBQ0VfRkxBRylpZiBbICEgLWQgImBkaXJuYW1lICIkQCJgIiBdOyB0aGVuIG1rZGlyIC1wICJgZGlybmFtZSAiJEAiYCI7IGZpOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1ESkFWQV9DQU1FUkFfTElCPTEgLURfV1JTX0tFUk5FTCAtRCdTVk5fUkVWPSIkKHNoZWxsIHN2bnZlcnNpb24gLW4gLi4pIicgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCisNCitKYXZhQ2FtZXJhTGliLyQoTU9ERV9ESVIpL09iamVjdHMvVGFzay5vIDogJChQUkpfUk9PVF9ESVIpL1Rhc2suY3BwICQoRk9SQ0VfRklMRV9CVUlMRCkNCisJJChUUkFDRV9GTEFHKWlmIFsgISAtZCAiYGRpcm5hbWUgIiRAImAiIF07IHRoZW4gbWtkaXIgLXAgImBkaXJuYW1lICIkQCJgIjsgZmk7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURKQVZBX0NBTUVSQV9MSUI9MSAtRF9XUlNfS0VSTkVMIC1EJ1NWTl9SRVY9IiQoc2hlbGwgc3ZudmVyc2lvbiAtbiAuLikiJyAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKw0KK0phdmFDYW1lcmFMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9UaW1lci5vIDogJChQUkpfUk9PVF9ESVIpL1RpbWVyLmNwcCAkKEZPUkNFX0ZJTEVfQlVJTEQpDQorCSQoVFJBQ0VfRkxBRylpZiBbICEgLWQgImBkaXJuYW1lICIkQCJgIiBdOyB0aGVuIG1rZGlyIC1wICJgZGlybmFtZSAiJEAiYCI7IGZpOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1ESkFWQV9DQU1FUkFfTElCPTEgLURfV1JTX0tFUk5FTCAtRCdTVk5fUkVWPSIkKHNoZWxsIHN2bnZlcnNpb24gLW4gLi4pIicgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCisNCitKYXZhQ2FtZXJhTGliLyQoTU9ERV9ESVIpL09iamVjdHMvU3luY2hyb25pemVkLm8gOiAkKFBSSl9ST09UX0RJUikvU3luY2hyb25pemVkLmNwcCAkKEZPUkNFX0ZJTEVfQlVJTEQpDQorCSQoVFJBQ0VfRkxBRylpZiBbICEgLWQgImBkaXJuYW1lICIkQCJgIiBdOyB0aGVuIG1rZGlyIC1wICJgZGlybmFtZSAiJEAiYCI7IGZpOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1ESkFWQV9DQU1FUkFfTElCPTEgLURfV1JTX0tFUk5FTCAtRCdTVk5fUkVWPSIkKHNoZWxsIHN2bnZlcnNpb24gLW4gLi4pIicgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCisNCitKYXZhQ2FtZXJhTGliLyQoTU9ERV9ESVIpL09iamVjdHMvVXRpbGl0eS5vIDogJChQUkpfUk9PVF9ESVIpL1V0aWxpdHkuY3BwICQoRk9SQ0VfRklMRV9CVUlMRCkNCisJJChUUkFDRV9GTEFHKWlmIFsgISAtZCAiYGRpcm5hbWUgIiRAImAiIF07IHRoZW4gbWtkaXIgLXAgImBkaXJuYW1lICIkQCJgIjsgZmk7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURKQVZBX0NBTUVSQV9MSUI9MSAtRF9XUlNfS0VSTkVMIC1EJ1NWTl9SRVY9IiQoc2hlbGwgc3ZudmVyc2lvbiAtbiAuLikiJyAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKw0KK09CSkVDVFNfSmF2YUNhbWVyYUxpYiA9IEphdmFDYW1lcmFMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9QQ1ZpZGVvU2VydmVyLm8gXA0KKwkgSmF2YUNhbWVyYUxpYi8kKE1PREVfRElSKS9PYmplY3RzL0F4aXNDYW1lcmEubyBcDQorCSBKYXZhQ2FtZXJhTGliLyQoTU9ERV9ESVIpL09iamVjdHMvQXhpc0NhbWVyYVBhcmFtcy5vIFwNCisJIEphdmFDYW1lcmFMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9FbnVtQ2FtZXJhUGFyYW1ldGVyLm8gXA0KKwkgSmF2YUNhbWVyYUxpYi8kKE1PREVfRElSKS9PYmplY3RzL0ludENhbWVyYVBhcmFtZXRlci5vIFwNCisJIEphdmFDYW1lcmFMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9FcnJvci5vIFwNCisJIEphdmFDYW1lcmFMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9FcnJvckJhc2UubyBcDQorCSBKYXZhQ2FtZXJhTGliLyQoTU9ERV9ESVIpL09iamVjdHMvVGFzay5vIFwNCisJIEphdmFDYW1lcmFMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9UaW1lci5vIFwNCisJIEphdmFDYW1lcmFMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9TeW5jaHJvbml6ZWQubyBcDQorCSBKYXZhQ2FtZXJhTGliLyQoTU9ERV9ESVIpL09iamVjdHMvVXRpbGl0eS5vDQorDQorSmF2YUNhbWVyYUxpYi8kKE1PREVfRElSKS9KYXZhQ2FtZXJhTGliLmEgOiAkKE9CSkVDVFNfSmF2YUNhbWVyYUxpYikNCisJJChUUkFDRV9GTEFHKWlmIFsgISAtZCAiYGRpcm5hbWUgIiRAImAiIF07IHRoZW4gbWtkaXIgLXAgImBkaXJuYW1lICIkQCJgIjsgZmk7ZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClhcnBwYyBjcnVzICIkQCIgJChPQkpFQ1RTX0phdmFDYW1lcmFMaWIpDQorDQorSmF2YUNhbWVyYUxpYi8kKE1PREVfRElSKS9KYXZhQ2FtZXJhTGliX2NvbXBpbGVfZmlsZSA6ICQoRklMRSkgOw0KKw0KK19jbGVhbiA6OiBKYXZhQ2FtZXJhTGliLyQoTU9ERV9ESVIpL0phdmFDYW1lcmFMaWJfY2xlYW4NCisNCitKYXZhQ2FtZXJhTGliLyQoTU9ERV9ESVIpL0phdmFDYW1lcmFMaWJfY2xlYW4gOiANCisJJChUUkFDRV9GTEFHKWlmIFsgLWQgIkphdmFDYW1lcmFMaWIiIF07IHRoZW4gY2QgIkphdmFDYW1lcmFMaWIiOyBybSAtcmYgJChNT0RFX0RJUik7IGZpDQorDQorZm9yY2UgOiANCisNCitERVBfRklMRVMgOj0gV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL0FEWEwzNDVfSTJDLmQgV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL0FEWEwzNDVfU1BJLmQgV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL0FjY2VsZXJvbWV0ZXIuZCBcDQorCSBXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvQW5hbG9nQ2hhbm5lbC5kIFdQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9BbmFsb2dNb2R1bGUuZCBXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvQW5hbG9nVHJpZ2dlci5kIFwNCisJIFdQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9BbmFsb2dUcmlnZ2VyT3V0cHV0LmQgV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL0J1dHRvbnMvQW5hbG9nSU9CdXR0b24uZCBXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvQnV0dG9ucy9CdXR0b24uZCBcDQorCSBXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvQnV0dG9ucy9CdXR0b25TY2hlZHVsZXIuZCBXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvQnV0dG9ucy9EaWdpdGFsSU9CdXR0b24uZCBXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvQnV0dG9ucy9IZWxkQnV0dG9uU2NoZWR1bGVyLmQgXA0KKwkgV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL0J1dHRvbnMvSW50ZXJuYWxCdXR0b24uZCBXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvQnV0dG9ucy9Kb3lzdGlja0J1dHRvbi5kIFdQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9CdXR0b25zL05ldHdvcmtCdXR0b24uZCBcDQorCSBXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvQnV0dG9ucy9QcmVzc2VkQnV0dG9uU2NoZWR1bGVyLmQgV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL0J1dHRvbnMvUmVsZWFzZWRCdXR0b25TY2hlZHVsZXIuZCBXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvQnV0dG9ucy9UcmlnZ2VyLmQgXA0KKwkgV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL0NBTkphZ3Vhci5kIFdQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9Db21tYW5kcy9Db21tYW5kLmQgV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL0NvbW1hbmRzL0NvbW1hbmRHcm91cC5kIFwNCisJIFdQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9Db21tYW5kcy9Db21tYW5kR3JvdXBFbnRyeS5kIFdQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9Db21tYW5kcy9QSURDb21tYW5kLmQgV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL0NvbW1hbmRzL1BJRFN1YnN5c3RlbS5kIFwNCisJIFdQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9Db21tYW5kcy9QcmludENvbW1hbmQuZCBXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvQ29tbWFuZHMvU2NoZWR1bGVyLmQgV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL0NvbW1hbmRzL1N0YXJ0Q29tbWFuZC5kIFwNCisJIFdQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9Db21tYW5kcy9TdWJzeXN0ZW0uZCBXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvQ29tbWFuZHMvV2FpdENvbW1hbmQuZCBXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvQ29tbWFuZHMvV2FpdEZvckNoaWxkcmVuLmQgXA0KKwkgV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL0NvbW1hbmRzL1dhaXRVbnRpbENvbW1hbmQuZCBXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvQ29tcHJlc3Nvci5kIFdQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9Db3VudGVyLmQgXA0KKwkgV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL0Rhc2hib2FyZC5kIFdQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9EaWdpdGFsSW5wdXQuZCBXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvRGlnaXRhbE1vZHVsZS5kIFwNCisJIFdQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9EaWdpdGFsT3V0cHV0LmQgV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL0RpZ2l0YWxTb3VyY2UuZCBXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvRG91YmxlU29sZW5vaWQuZCBcDQorCSBXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvRHJpdmVyU3RhdGlvbi5kIFdQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9Ecml2ZXJTdGF0aW9uRW5oYW5jZWRJTy5kIFdQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9Ecml2ZXJTdGF0aW9uTENELmQgXA0KKwkgV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL0VuY29kZXIuZCBXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvRXJyb3IuZCBXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvRXJyb3JCYXNlLmQgXA0KKwkgV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL0dlYXJUb290aC5kIFdQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9HeXJvLmQgV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL0hpVGVjaG5pY0NvbXBhc3MuZCBcDQorCSBXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvSTJDLmQgV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL0ludGVycnVwdGFibGVTZW5zb3JCYXNlLmQgV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL0l0ZXJhdGl2ZVJvYm90LmQgXA0KKwkgV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL0phZ3Vhci5kIFdQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9Kb3lzdGljay5kIFdQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9LaW5lY3QuZCBcDQorCSBXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvS2luZWN0U3RpY2suZCBXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvTGl2ZVdpbmRvdy9MaXZlV2luZG93LmQgV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL0xpdmVXaW5kb3cvTGl2ZVdpbmRvd1N0YXR1c0xpc3RlbmVyLmQgXA0KKwkgV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL01vZHVsZS5kIFdQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9Nb3RvclNhZmV0eUhlbHBlci5kIFdQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9Ob3RpZmllci5kIFwNCisJIFdQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9QSURDb250cm9sbGVyLmQgV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL1BXTS5kIFdQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9QcmVmZXJlbmNlcy5kIFwNCisJIFdQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9SZWxheS5kIFdQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9SZXNvdXJjZS5kIFdQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9Sb2JvdEJhc2UuZCBcDQorCSBXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvUm9ib3REcml2ZS5kIFdQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9TUEkuZCBXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvU2FmZVBXTS5kIFwNCisJIFdQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9TZW5zb3JCYXNlLmQgV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL1NlcmlhbFBvcnQuZCBXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvU2Vydm8uZCBcDQorCSBXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvU2ltcGxlUm9ib3QuZCBXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvU21hcnREYXNoYm9hcmQvU2VuZGFibGVDaG9vc2VyLmQgV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL1NtYXJ0RGFzaGJvYXJkL1NtYXJ0RGFzaGJvYXJkLmQgXA0KKwkgV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL1NvbGVub2lkLmQgV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL1NvbGVub2lkQmFzZS5kIFdQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9TeW5jaHJvbml6ZWQuZCBcDQorCSBXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvVGFsb24uZCBXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvVGFzay5kIFdQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9UaW1lci5kIFwNCisJIFdQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9VbHRyYXNvbmljLmQgV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL1V0aWxpdHkuZCBXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvVmljdG9yLmQgXA0KKwkgV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL1Zpc2lvbi9BeGlzQ2FtZXJhLmQgV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL1Zpc2lvbi9BeGlzQ2FtZXJhUGFyYW1zLmQgV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL1Zpc2lvbi9CaW5hcnlJbWFnZS5kIFwNCisJIFdQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9WaXNpb24vQ29sb3JJbWFnZS5kIFdQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9WaXNpb24vRW51bUNhbWVyYVBhcmFtZXRlci5kIFdQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9WaXNpb24vSFNMSW1hZ2UuZCBcDQorCSBXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvVmlzaW9uL0ltYWdlQmFzZS5kIFdQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9WaXNpb24vSW50Q2FtZXJhUGFyYW1ldGVyLmQgV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL1Zpc2lvbi9Nb25vSW1hZ2UuZCBcDQorCSBXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvVmlzaW9uL1BDVmlkZW9TZXJ2ZXIuZCBXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvVmlzaW9uL1JHQkltYWdlLmQgV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL1Zpc2lvbi9UaHJlc2hvbGQuZCBcDQorCSBXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvVmlzaW9uMjAwOS9BeGlzQ2FtZXJhLmQgV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL1Zpc2lvbjIwMDkvQmFlVXRpbGl0aWVzLmQgV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL1Zpc2lvbjIwMDkvRnJjRXJyb3IuZCBcDQorCSBXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvVmlzaW9uMjAwOS9UcmFja0FQSS5kIFdQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9WaXNpb24yMDA5L1Zpc2lvbkFQSS5kIFdQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9XYXRjaGRvZy5kIFwNCisJIFdQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9uZXR3b3JrdGFibGVzL05ldHdvcmtUYWJsZS5kIFdQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9uZXR3b3JrdGFibGVzL05ldHdvcmtUYWJsZUNvbm5lY3Rpb25MaXN0ZW5lckFkYXB0ZXIuZCBXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvbmV0d29ya3RhYmxlcy9OZXR3b3JrVGFibGVLZXlMaXN0ZW5lckFkYXB0ZXIuZCBcDQorCSBXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvbmV0d29ya3RhYmxlcy9OZXR3b3JrVGFibGVMaXN0ZW5lckFkYXB0ZXIuZCBXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvbmV0d29ya3RhYmxlcy9OZXR3b3JrVGFibGVNb2RlLmQgV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL25ldHdvcmt0YWJsZXMvTmV0d29ya1RhYmxlUHJvdmlkZXIuZCBcDQorCSBXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvbmV0d29ya3RhYmxlcy9OZXR3b3JrVGFibGVTdWJMaXN0ZW5lckFkYXB0ZXIuZCBXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvbmV0d29ya3RhYmxlczIvQWJzdHJhY3ROZXR3b3JrVGFibGVFbnRyeVN0b3JlLmQgV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL25ldHdvcmt0YWJsZXMyL05ldHdvcmtUYWJsZUVudHJ5LmQgXA0KKwkgV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL25ldHdvcmt0YWJsZXMyL05ldHdvcmtUYWJsZU5vZGUuZCBXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvbmV0d29ya3RhYmxlczIvT3V0Z29pbmdFbnRyeVJlY2lldmVyLmQgV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL25ldHdvcmt0YWJsZXMyL1RhYmxlS2V5RXhpc3RzV2l0aERpZmZlcmVudFR5cGVFeGNlcHRpb24uZCBcDQorCSBXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvbmV0d29ya3RhYmxlczIvVHJhbnNhY3Rpb25EaXJ0aWVyLmQgV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL25ldHdvcmt0YWJsZXMyL1dyaXRlTWFuYWdlci5kIFdQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9uZXR3b3JrdGFibGVzMi9jbGllbnQvQ2xpZW50Q29ubmVjdGlvbkFkYXB0ZXIuZCBcDQorCSBXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvbmV0d29ya3RhYmxlczIvY2xpZW50L0NsaWVudENvbm5lY3Rpb25TdGF0ZS5kIFdQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9uZXR3b3JrdGFibGVzMi9jbGllbnQvQ2xpZW50TmV0d29ya1RhYmxlRW50cnlTdG9yZS5kIFdQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9uZXR3b3JrdGFibGVzMi9jbGllbnQvTmV0d29ya1RhYmxlQ2xpZW50LmQgXA0KKwkgV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL25ldHdvcmt0YWJsZXMyL2Nvbm5lY3Rpb24vQmFkTWVzc2FnZUV4Y2VwdGlvbi5kIFdQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9uZXR3b3JrdGFibGVzMi9jb25uZWN0aW9uL0Nvbm5lY3Rpb25Nb25pdG9yVGhyZWFkLmQgV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL25ldHdvcmt0YWJsZXMyL2Nvbm5lY3Rpb24vRGF0YUlPU3RyZWFtLmQgXA0KKwkgV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL25ldHdvcmt0YWJsZXMyL2Nvbm5lY3Rpb24vTmV0d29ya1RhYmxlQ29ubmVjdGlvbi5kIFdQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9uZXR3b3JrdGFibGVzMi9zZXJ2ZXIvTmV0d29ya1RhYmxlU2VydmVyLmQgV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL25ldHdvcmt0YWJsZXMyL3NlcnZlci9TZXJ2ZXJDb25uZWN0aW9uQWRhcHRlci5kIFwNCisJIFdQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9uZXR3b3JrdGFibGVzMi9zZXJ2ZXIvU2VydmVyQ29ubmVjdGlvbkxpc3QuZCBXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvbmV0d29ya3RhYmxlczIvc2VydmVyL1NlcnZlckNvbm5lY3Rpb25TdGF0ZS5kIFdQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9uZXR3b3JrdGFibGVzMi9zZXJ2ZXIvU2VydmVySW5jb21pbmdTdHJlYW1Nb25pdG9yLmQgXA0KKwkgV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL25ldHdvcmt0YWJsZXMyL3NlcnZlci9TZXJ2ZXJOZXR3b3JrVGFibGVFbnRyeVN0b3JlLmQgV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL25ldHdvcmt0YWJsZXMyL3N0cmVhbS9GRElPU3RyZWFtLmQgV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL25ldHdvcmt0YWJsZXMyL3N0cmVhbS9Tb2NrZXRTZXJ2ZXJTdHJlYW1Qcm92aWRlci5kIFwNCisJIFdQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9uZXR3b3JrdGFibGVzMi9zdHJlYW0vU29ja2V0U3RyZWFtRmFjdG9yeS5kIFdQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9uZXR3b3JrdGFibGVzMi9zdHJlYW0vU29ja2V0U3RyZWFtcy5kIFdQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9uZXR3b3JrdGFibGVzMi90aHJlYWQvRGVmYXVsdFRocmVhZE1hbmdlci5kIFwNCisJIFdQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9uZXR3b3JrdGFibGVzMi90eXBlL0FycmF5RGF0YS5kIFdQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9uZXR3b3JrdGFibGVzMi90eXBlL0FycmF5RW50cnlUeXBlLmQgV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL25ldHdvcmt0YWJsZXMyL3R5cGUvQm9vbGVhbkFycmF5LmQgXA0KKwkgV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL25ldHdvcmt0YWJsZXMyL3R5cGUvQ29tcGxleERhdGEuZCBXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvbmV0d29ya3RhYmxlczIvdHlwZS9Db21wbGV4RW50cnlUeXBlLmQgV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL25ldHdvcmt0YWJsZXMyL3R5cGUvRGVmYXVsdEVudHJ5VHlwZXMuZCBcDQorCSBXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvbmV0d29ya3RhYmxlczIvdHlwZS9OZXR3b3JrVGFibGVFbnRyeVR5cGUuZCBXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvbmV0d29ya3RhYmxlczIvdHlwZS9OZXR3b3JrVGFibGVFbnRyeVR5cGVNYW5hZ2VyLmQgV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL25ldHdvcmt0YWJsZXMyL3R5cGUvTnVtYmVyQXJyYXkuZCBcDQorCSBXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvbmV0d29ya3RhYmxlczIvdHlwZS9TdHJpbmdBcnJheS5kIFdQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9uZXR3b3JrdGFibGVzMi91dGlsL0VPRkV4Y2VwdGlvbi5kIFdQSUxpYi8kKE1PREVfRElSKS9PYmplY3RzL1dQSUxpYi9uZXR3b3JrdGFibGVzMi91dGlsL0lPRXhjZXB0aW9uLmQgXA0KKwkgV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL25ldHdvcmt0YWJsZXMyL3V0aWwvSWxsZWdhbFN0YXRlRXhjZXB0aW9uLmQgV1BJTGliLyQoTU9ERV9ESVIpL09iamVjdHMvV1BJTGliL25ldHdvcmt0YWJsZXMyL3V0aWwvU3RyaW5nQ2FjaGUuZCBXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvbmV0d29ya3RhYmxlczIvdXRpbC9TeXN0ZW0uZCBcDQorCSBXUElMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9XUElMaWIvdGFibGVzL1RhYmxlS2V5Tm90RGVmaW5lZEV4Y2VwdGlvbi5kIEphdmFDYW1lcmFMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9QQ1ZpZGVvU2VydmVyLmQgSmF2YUNhbWVyYUxpYi8kKE1PREVfRElSKS9PYmplY3RzL0F4aXNDYW1lcmEuZCBcDQorCSBKYXZhQ2FtZXJhTGliLyQoTU9ERV9ESVIpL09iamVjdHMvQXhpc0NhbWVyYVBhcmFtcy5kIEphdmFDYW1lcmFMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9FbnVtQ2FtZXJhUGFyYW1ldGVyLmQgSmF2YUNhbWVyYUxpYi8kKE1PREVfRElSKS9PYmplY3RzL0ludENhbWVyYVBhcmFtZXRlci5kIFwNCisJIEphdmFDYW1lcmFMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9FcnJvci5kIEphdmFDYW1lcmFMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9FcnJvckJhc2UuZCBKYXZhQ2FtZXJhTGliLyQoTU9ERV9ESVIpL09iamVjdHMvVGFzay5kIFwNCisJIEphdmFDYW1lcmFMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9UaW1lci5kIEphdmFDYW1lcmFMaWIvJChNT0RFX0RJUikvT2JqZWN0cy9TeW5jaHJvbml6ZWQuZCBKYXZhQ2FtZXJhTGliLyQoTU9ERV9ESVIpL09iamVjdHMvVXRpbGl0eS5kDQorLWluY2x1ZGUgJChERVBfRklMRVMpDQorDQorDQorDQorLWluY2x1ZGUgJChQUkpfUk9PVF9ESVIpLyoubWFrZWZpbGUNCisNCistaW5jbHVkZSAqLm1ha2VmaWxlDQorDQorbWFpbl9hbGwgOiBleHRlcm5hbF9idWlsZCAkKFBST0pFQ1RfVEFSR0VUUykNCisJQGVjaG8gIm1ha2U6IGJ1aWx0IHRhcmdldHMgb2YgYHB3ZGAiDQorDQorIyBlbnRyeSBwb2ludCBmb3IgZXh0ZW5kaW5nIHRoZSBidWlsZA0KK2V4dGVybmFsX2J1aWxkIDo6DQorCUBlY2hvICIiDQorDQorIyBtYWluIGVudHJ5IHBvaW50IGZvciBwcmUgcHJvY2Vzc2luZyBwcmlvciB0byB0aGUgYnVpbGQNCitwcmVfYnVpbGQgOjogJChQUkVfQlVJTERfU1RFUCkgZ2VuZXJhdGVfc291cmNlcw0KKwlAZWNobyAiIg0KKw0KKyMgZW50cnkgcG9pbnQgZm9yIGdlbmVyYXRpbmcgc291cmNlcyBwcmlvciB0byB0aGUgYnVpbGQNCitnZW5lcmF0ZV9zb3VyY2VzIDo6DQorCUBlY2hvICIiDQorDQorIyBtYWluIGVudHJ5IHBvaW50IGZvciBwb3N0IHByb2Nlc3NpbmcgYWZ0ZXIgdGhlIGJ1aWxkDQorcG9zdF9idWlsZCA6OiAkKFBPU1RfQlVJTERfU1RFUCkgZGVwbG95X291dHB1dA0KKwlAZWNobyAiIg0KKw0KKyMgZW50cnkgcG9pbnQgZm9yIGRlcGxveWluZyBvdXRwdXQgYWZ0ZXIgdGhlIGJ1aWxkDQorZGVwbG95X291dHB1dCA6Og0KKwlAZWNobyAiIg0KKw0KK2NsZWFuIDo6IGV4dGVybmFsX2NsZWFuICQoQ0xFQU5fU1RFUCkgX2NsZWFuDQorDQorIyBlbnRyeSBwb2ludCBmb3IgZXh0ZW5kaW5nIHRoZSBidWlsZCBjbGVhbg0KK2V4dGVybmFsX2NsZWFuIDo6DQorCUBlY2hvICIiDQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvUFdNLmNwcCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL1BXTS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWRmNTkzOAotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL1BXTS5jcHAKQEAgLTAsMCArMSwzNjggQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorLyogQ29weXJpZ2h0IChjKSBGSVJTVCAyMDA4LiBBbGwgUmlnaHRzIFJlc2VydmVkLgkJCQkJCQkgICovDQorLyogT3BlbiBTb3VyY2UgU29mdHdhcmUgLSBtYXkgYmUgbW9kaWZpZWQgYW5kIHNoYXJlZCBieSBGUkMgdGVhbXMuIFRoZSBjb2RlICAgKi8NCisvKiBtdXN0IGJlIGFjY29tcGFuaWVkIGJ5IHRoZSBGSVJTVCBCU0QgbGljZW5zZSBmaWxlIGluICQoV0lORF9CQVNFKS9XUElMaWIuICAqLw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorI2luY2x1ZGUgIlBXTS5oIg0KKw0KKyNpbmNsdWRlICJEaWdpdGFsTW9kdWxlLmgiDQorI2luY2x1ZGUgIk5ldHdvcmtDb21tdW5pY2F0aW9uL1VzYWdlUmVwb3J0aW5nLmgiDQorI2luY2x1ZGUgIlJlc291cmNlLmgiDQorI2luY2x1ZGUgIlV0aWxpdHkuaCINCisjaW5jbHVkZSAiV1BJRXJyb3JzLmgiDQorDQorY29uc3QgVUlOVDMyIFBXTTo6a0RlZmF1bHRQd21QZXJpb2Q7DQorY29uc3QgVUlOVDMyIFBXTTo6a0RlZmF1bHRNaW5Qd21IaWdoOw0KK2NvbnN0IElOVDMyIFBXTTo6a1B3bURpc2FibGVkOw0KK3N0YXRpYyBSZXNvdXJjZSAqYWxsb2NhdGVkID0gTlVMTDsNCisNCisvKioNCisgKiBJbml0aWFsaXplIFBXTXMgZ2l2ZW4gYW4gbW9kdWxlIGFuZCBjaGFubmVsLg0KKyAqIA0KKyAqIFRoaXMgbWV0aG9kIGlzIHByaXZhdGUgYW5kIGlzIHRoZSBjb21tb24gcGF0aCBmb3IgYWxsIHRoZSBjb25zdHJ1Y3RvcnMgZm9yIGNyZWF0aW5nIFBXTQ0KKyAqIGluc3RhbmNlcy4gQ2hlY2tzIG1vZHVsZSBhbmQgY2hhbm5lbCB2YWx1ZSByYW5nZXMgYW5kIGFsbG9jYXRlcyB0aGUgYXBwcm9wcmlhdGUgY2hhbm5lbC4NCisgKiBUaGUgYWxsb2NhdGlvbiBpcyBvbmx5IGRvbmUgdG8gaGVscCB1c2VycyBlbnN1cmUgdGhhdCB0aGV5IGRvbid0IGRvdWJsZSBhc3NpZ24gY2hhbm5lbHMuDQorICovDQordm9pZCBQV006OkluaXRQV00oVUlOVDggbW9kdWxlTnVtYmVyLCBVSU5UMzIgY2hhbm5lbCkNCit7DQorCWNoYXIgYnVmWzY0XTsNCisJUmVzb3VyY2U6OkNyZWF0ZVJlc291cmNlT2JqZWN0KCZhbGxvY2F0ZWQsIHRESU86OmtOdW1TeXN0ZW1zICoga1B3bUNoYW5uZWxzKTsNCisJaWYgKCFDaGVja1BXTU1vZHVsZShtb2R1bGVOdW1iZXIpKQ0KKwl7DQorCQlzbnByaW50ZihidWYsIDY0LCAiRGlnaXRhbCBNb2R1bGUgJWQiLCBtb2R1bGVOdW1iZXIpOw0KKwkJd3BpX3NldFdQSUVycm9yV2l0aENvbnRleHQoTW9kdWxlSW5kZXhPdXRPZlJhbmdlLCBidWYpOw0KKwkJcmV0dXJuOw0KKwl9DQorCWlmICghQ2hlY2tQV01DaGFubmVsKGNoYW5uZWwpKQ0KKwl7DQorCQlzbnByaW50ZihidWYsIDY0LCAiUFdNIENoYW5uZWwgJWQiLCBjaGFubmVsKTsNCisJCXdwaV9zZXRXUElFcnJvcldpdGhDb250ZXh0KENoYW5uZWxJbmRleE91dE9mUmFuZ2UsIGJ1Zik7DQorCQlyZXR1cm47DQorCX0NCisNCisJc25wcmludGYoYnVmLCA2NCwgIlBXTSAlZCAoTW9kdWxlOiAlZCkiLCBjaGFubmVsLCBtb2R1bGVOdW1iZXIpOw0KKwlpZiAoYWxsb2NhdGVkLT5BbGxvY2F0ZSgobW9kdWxlTnVtYmVyIC0gMSkgKiBrUHdtQ2hhbm5lbHMgKyBjaGFubmVsIC0gMSwgYnVmKSA9PSB+MHVsKQ0KKwl7DQorCQlDbG9uZUVycm9yKGFsbG9jYXRlZCk7DQorCQlyZXR1cm47DQorCX0NCisJbV9jaGFubmVsID0gY2hhbm5lbDsNCisJbV9tb2R1bGUgPSBEaWdpdGFsTW9kdWxlOjpHZXRJbnN0YW5jZShtb2R1bGVOdW1iZXIpOw0KKwltX21vZHVsZS0+U2V0UFdNKG1fY2hhbm5lbCwga1B3bURpc2FibGVkKTsNCisJbV9lbGltaW5hdGVEZWFkYmFuZCA9IGZhbHNlOw0KKw0KKwluVXNhZ2VSZXBvcnRpbmc6OnJlcG9ydChuVXNhZ2VSZXBvcnRpbmc6OmtSZXNvdXJjZVR5cGVfUFdNLCBjaGFubmVsLCBtb2R1bGVOdW1iZXIgLSAxKTsNCit9DQorDQorLyoqDQorICogQWxsb2NhdGUgYSBQV00gZ2l2ZW4gYSBtb2R1bGUgYW5kIGNoYW5uZWwuDQorICogQWxsb2NhdGUgYSBQV00gdXNpbmcgYSBtb2R1bGUgYW5kIGNoYW5uZWwgbnVtYmVyLg0KKyAqIA0KKyAqIEBwYXJhbSBtb2R1bGVOdW1iZXIgVGhlIGRpZ2l0YWwgbW9kdWxlICgxIG9yIDIpLg0KKyAqIEBwYXJhbSBjaGFubmVsIFRoZSBQV00gY2hhbm5lbCBvbiB0aGUgZGlnaXRhbCBtb2R1bGUgKDEuLjEwKS4NCisgKi8NCitQV006OlBXTShVSU5UOCBtb2R1bGVOdW1iZXIsIFVJTlQzMiBjaGFubmVsKQ0KKwk6IG1fbW9kdWxlKE5VTEwpDQorew0KKwlJbml0UFdNKG1vZHVsZU51bWJlciwgY2hhbm5lbCk7DQorfQ0KKw0KKy8qKg0KKyAqIEFsbG9jYXRlIGEgUFdNIGluIHRoZSBkZWZhdWx0IG1vZHVsZSBnaXZlbiBhIGNoYW5uZWwuDQorICogDQorICogVXNpbmcgYSBkZWZhdWx0IG1vZHVsZSBhbGxvY2F0ZSBhIFBXTSBnaXZlbiB0aGUgY2hhbm5lbCBudW1iZXIuICBUaGUgZGVmYXVsdCBtb2R1bGUgaXMgdGhlIGZpcnN0DQorICogc2xvdCBudW1lcmljYWxseSBpbiB0aGUgY1JJTyBjaGFzc2lzLg0KKyAqIA0KKyAqIEBwYXJhbSBjaGFubmVsIFRoZSBQV00gY2hhbm5lbCBvbiB0aGUgZGlnaXRhbCBtb2R1bGUuDQorICovDQorUFdNOjpQV00oVUlOVDMyIGNoYW5uZWwpDQorCTogbV9tb2R1bGUoTlVMTCkNCit7DQorCUluaXRQV00oR2V0RGVmYXVsdERpZ2l0YWxNb2R1bGUoKSwgY2hhbm5lbCk7DQorfQ0KKw0KKy8qKg0KKyAqIEZyZWUgdGhlIFBXTSBjaGFubmVsLg0KKyAqIA0KKyAqIEZyZWUgdGhlIHJlc291cmNlIGFzc29jaWF0ZWQgd2l0aCB0aGUgUFdNIGNoYW5uZWwgYW5kIHNldCB0aGUgdmFsdWUgdG8gMC4NCisgKi8NCitQV006On5QV00oKQ0KK3sNCisJaWYgKG1fbW9kdWxlKQ0KKwl7DQorCQltX21vZHVsZS0+U2V0UFdNKG1fY2hhbm5lbCwga1B3bURpc2FibGVkKTsNCisJCWFsbG9jYXRlZC0+RnJlZSgobV9tb2R1bGUtPkdldE51bWJlcigpIC0gMSkgKiBrUHdtQ2hhbm5lbHMgKyBtX2NoYW5uZWwgLSAxKTsNCisJfQ0KK30NCisNCisvKioNCisgKiBPcHRpb25hbGx5IGVsaW1pbmF0ZSB0aGUgZGVhZGJhbmQgZnJvbSBhIHNwZWVkIGNvbnRyb2xsZXIuDQorICogQHBhcmFtIGVsaW1pbmF0ZURlYWRiYW5kIElmIHRydWUsIHNldCB0aGUgbW90b3IgY3VydmUgb24gdGhlIEphZ3VhciB0byBlbGltaW5hdGUNCisgKiB0aGUgZGVhZGJhbmQgaW4gdGhlIG1pZGRsZSBvZiB0aGUgcmFuZ2UuIE90aGVyd2lzZSwga2VlcCB0aGUgZnVsbCByYW5nZSB3aXRob3V0DQorICogbW9kaWZ5aW5nIGFueSB2YWx1ZXMuDQorICovDQordm9pZCBQV006OkVuYWJsZURlYWRiYW5kRWxpbWluYXRpb24oYm9vbCBlbGltaW5hdGVEZWFkYmFuZCkNCit7DQorCWlmIChTdGF0dXNJc0ZhdGFsKCkpIHJldHVybjsNCisJbV9lbGltaW5hdGVEZWFkYmFuZCA9IGVsaW1pbmF0ZURlYWRiYW5kOw0KK30NCisNCisvKioNCisgKiBTZXQgdGhlIGJvdW5kcyBvbiB0aGUgUFdNIHZhbHVlcy4NCisgKiBUaGlzIHNldHMgdGhlIGJvdW5kcyBvbiB0aGUgUFdNIHZhbHVlcyBmb3IgYSBwYXJ0aWN1bGFyIGVhY2ggdHlwZSBvZiBjb250cm9sbGVyLiBUaGUgdmFsdWVzDQorICogZGV0ZXJtaW5lIHRoZSB1cHBlciBhbmQgbG93ZXIgc3BlZWRzIGFzIHdlbGwgYXMgdGhlIGRlYWRiYW5kIGJyYWNrZXQuDQorICogQHBhcmFtIG1heCBUaGUgTWluaW11bSBwd20gdmFsdWUNCisgKiBAcGFyYW0gZGVhZGJhbmRNYXggVGhlIGhpZ2ggZW5kIG9mIHRoZSBkZWFkYmFuZCByYW5nZQ0KKyAqIEBwYXJhbSBjZW50ZXIgVGhlIGNlbnRlciBzcGVlZCAob2ZmKQ0KKyAqIEBwYXJhbSBkZWFkYmFuZE1pbiBUaGUgbG93IGVuZCBvZiB0aGUgZGVhZGJhbmQgcmFuZ2UNCisgKiBAcGFyYW0gbWluIFRoZSBtaW5pbXVtIHB3bSB2YWx1ZQ0KKyAqLw0KK3ZvaWQgUFdNOjpTZXRCb3VuZHMoSU5UMzIgbWF4LCBJTlQzMiBkZWFkYmFuZE1heCwgSU5UMzIgY2VudGVyLCBJTlQzMiBkZWFkYmFuZE1pbiwgSU5UMzIgbWluKQ0KK3sNCisJaWYgKFN0YXR1c0lzRmF0YWwoKSkgcmV0dXJuOw0KKwltX21heFB3bSA9IG1heDsNCisJbV9kZWFkYmFuZE1heFB3bSA9IGRlYWRiYW5kTWF4Ow0KKwltX2NlbnRlclB3bSA9IGNlbnRlcjsNCisJbV9kZWFkYmFuZE1pblB3bSA9IGRlYWRiYW5kTWluOw0KKwltX21pblB3bSA9IG1pbjsNCit9DQorDQorVUlOVDMyIFBXTTo6R2V0TW9kdWxlTnVtYmVyKCkNCit7DQorCXJldHVybiBtX21vZHVsZS0+R2V0TnVtYmVyKCk7DQorfQ0KKw0KKy8qKg0KKyAqIFNldCB0aGUgUFdNIHZhbHVlIGJhc2VkIG9uIGEgcG9zaXRpb24uDQorICogDQorICogVGhpcyBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIGJ5IHNlcnZvcy4NCisgKiANCisgKiBAcHJlIFNldE1heFBvc2l0aXZlUHdtKCkgY2FsbGVkLg0KKyAqIEBwcmUgU2V0TWluTmVnYXRpdmVQd20oKSBjYWxsZWQuDQorICogDQorICogQHBhcmFtIHBvcyBUaGUgcG9zaXRpb24gdG8gc2V0IHRoZSBzZXJ2byBiZXR3ZWVuIDAuMCBhbmQgMS4wLg0KKyAqLw0KK3ZvaWQgUFdNOjpTZXRQb3NpdGlvbihmbG9hdCBwb3MpDQorew0KKwlpZiAoU3RhdHVzSXNGYXRhbCgpKSByZXR1cm47DQorCWlmIChwb3MgPCAwLjApDQorCXsNCisJCXBvcyA9IDAuMDsNCisJfQ0KKwllbHNlIGlmIChwb3MgPiAxLjApDQorCXsNCisJCXBvcyA9IDEuMDsNCisJfQ0KKw0KKwlJTlQzMiByYXdWYWx1ZTsNCisJLy8gbm90ZSwgbmVlZCB0byBwZXJmb3JtIHRoZSBtdWx0aXBsaWNhdGlvbiBiZWxvdyBhcyBmbG9hdGluZyBwb2ludCBiZWZvcmUgY29udmVydGluZyB0byBpbnQNCisJcmF3VmFsdWUgPSAoSU5UMzIpKCAocG9zICogKGZsb2F0KSBHZXRGdWxsUmFuZ2VTY2FsZUZhY3RvcigpKSArIEdldE1pbk5lZ2F0aXZlUHdtKCkpOw0KKw0KKwl3cGlfYXNzZXJ0KChyYXdWYWx1ZSA+PSBHZXRNaW5OZWdhdGl2ZVB3bSgpKSAmJiAocmF3VmFsdWUgPD0gR2V0TWF4UG9zaXRpdmVQd20oKSkpOw0KKwl3cGlfYXNzZXJ0KHJhd1ZhbHVlICE9IGtQd21EaXNhYmxlZCk7DQorDQorCS8vIHNlbmQgdGhlIGNvbXB1dGVkIHB3bSB2YWx1ZSB0byB0aGUgRlBHQQ0KKwlTZXRSYXcoKFVJTlQ4KXJhd1ZhbHVlKTsNCit9DQorDQorLyoqDQorICogR2V0IHRoZSBQV00gdmFsdWUgaW4gdGVybXMgb2YgYSBwb3NpdGlvbi4NCisgKiANCisgKiBUaGlzIGlzIGludGVuZGVkIHRvIGJlIHVzZWQgYnkgc2Vydm9zLg0KKyAqIA0KKyAqIEBwcmUgU2V0TWF4UG9zaXRpdmVQd20oKSBjYWxsZWQuDQorICogQHByZSBTZXRNaW5OZWdhdGl2ZVB3bSgpIGNhbGxlZC4NCisgKiANCisgKiBAcmV0dXJuIFRoZSBwb3NpdGlvbiB0aGUgc2Vydm8gaXMgc2V0IHRvIGJldHdlZW4gMC4wIGFuZCAxLjAuDQorICovDQorZmxvYXQgUFdNOjpHZXRQb3NpdGlvbigpDQorew0KKwlpZiAoU3RhdHVzSXNGYXRhbCgpKSByZXR1cm4gMC4wOw0KKwlJTlQzMiB2YWx1ZSA9IEdldFJhdygpOw0KKwlpZiAodmFsdWUgPCBHZXRNaW5OZWdhdGl2ZVB3bSgpKQ0KKwl7DQorCQlyZXR1cm4gMC4wOw0KKwl9DQorCWVsc2UgaWYgKHZhbHVlID4gR2V0TWF4UG9zaXRpdmVQd20oKSkNCisJew0KKwkJcmV0dXJuIDEuMDsNCisJfQ0KKwllbHNlDQorCXsNCisJCXJldHVybiAoZmxvYXQpKHZhbHVlIC0gR2V0TWluTmVnYXRpdmVQd20oKSkgLyAoZmxvYXQpR2V0RnVsbFJhbmdlU2NhbGVGYWN0b3IoKTsNCisJfQ0KK30NCisNCisvKioNCisgKiBTZXQgdGhlIFBXTSB2YWx1ZSBiYXNlZCBvbiBhIHNwZWVkLg0KKyAqIA0KKyAqIFRoaXMgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCBieSBzcGVlZCBjb250cm9sbGVycy4NCisgKiANCisgKiBAcHJlIFNldE1heFBvc2l0aXZlUHdtKCkgY2FsbGVkLg0KKyAqIEBwcmUgU2V0TWluUG9zaXRpdmVQd20oKSBjYWxsZWQuDQorICogQHByZSBTZXRDZW50ZXJQd20oKSBjYWxsZWQuDQorICogQHByZSBTZXRNYXhOZWdhdGl2ZVB3bSgpIGNhbGxlZC4NCisgKiBAcHJlIFNldE1pbk5lZ2F0aXZlUHdtKCkgY2FsbGVkLg0KKyAqIA0KKyAqIEBwYXJhbSBzcGVlZCBUaGUgc3BlZWQgdG8gc2V0IHRoZSBzcGVlZCBjb250cm9sbGVyIGJldHdlZW4gLTEuMCBhbmQgMS4wLg0KKyAqLw0KK3ZvaWQgUFdNOjpTZXRTcGVlZChmbG9hdCBzcGVlZCkNCit7DQorCWlmIChTdGF0dXNJc0ZhdGFsKCkpIHJldHVybjsNCisJLy8gY2xhbXAgc3BlZWQgdG8gYmUgaW4gdGhlIHJhbmdlIDEuMCA+PSBzcGVlZCA+PSAtMS4wDQorCWlmIChzcGVlZCA8IC0xLjApDQorCXsNCisJCXNwZWVkID0gLTEuMDsNCisJfQ0KKwllbHNlIGlmIChzcGVlZCA+IDEuMCkNCisJew0KKwkJc3BlZWQgPSAxLjA7DQorCX0NCisNCisJLy8gY2FsY3VsYXRlIHRoZSBkZXNpcmVkIG91dHB1dCBwd20gdmFsdWUgYnkgc2NhbGluZyB0aGUgc3BlZWQgYXBwcm9wcmlhdGVseQ0KKwlJTlQzMiByYXdWYWx1ZTsNCisJaWYgKHNwZWVkID09IDAuMCkNCisJew0KKwkJcmF3VmFsdWUgPSBHZXRDZW50ZXJQd20oKTsNCisJfQ0KKwllbHNlIGlmIChzcGVlZCA+IDAuMCkNCisJew0KKwkJcmF3VmFsdWUgPSAoSU5UMzIpKHNwZWVkICogKChmbG9hdClHZXRQb3NpdGl2ZVNjYWxlRmFjdG9yKCkpICsNCisJCQkJCQkJCQkoKGZsb2F0KSBHZXRNaW5Qb3NpdGl2ZVB3bSgpKSArIDAuNSk7DQorCX0NCisJZWxzZQ0KKwl7DQorCQlyYXdWYWx1ZSA9IChJTlQzMikoc3BlZWQgKiAoKGZsb2F0KUdldE5lZ2F0aXZlU2NhbGVGYWN0b3IoKSkgKw0KKwkJCQkJCQkJCSgoZmxvYXQpIEdldE1heE5lZ2F0aXZlUHdtKCkpICsgMC41KTsNCisJfQ0KKw0KKwkvLyB0aGUgYWJvdmUgc2hvdWxkIHJlc3VsdCBpbiBhIHB3bV92YWx1ZSBpbiB0aGUgdmFsaWQgcmFuZ2UNCisJd3BpX2Fzc2VydCgocmF3VmFsdWUgPj0gR2V0TWluTmVnYXRpdmVQd20oKSkgJiYgKHJhd1ZhbHVlIDw9IEdldE1heFBvc2l0aXZlUHdtKCkpKTsNCisJd3BpX2Fzc2VydChyYXdWYWx1ZSAhPSBrUHdtRGlzYWJsZWQpOw0KKw0KKwkvLyBzZW5kIHRoZSBjb21wdXRlZCBwd20gdmFsdWUgdG8gdGhlIEZQR0ENCisJU2V0UmF3KChVSU5UOClyYXdWYWx1ZSk7DQorfQ0KKw0KKy8qKg0KKyAqIEdldCB0aGUgUFdNIHZhbHVlIGluIHRlcm1zIG9mIHNwZWVkLg0KKyAqIA0KKyAqIFRoaXMgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCBieSBzcGVlZCBjb250cm9sbGVycy4NCisgKiANCisgKiBAcHJlIFNldE1heFBvc2l0aXZlUHdtKCkgY2FsbGVkLg0KKyAqIEBwcmUgU2V0TWluUG9zaXRpdmVQd20oKSBjYWxsZWQuDQorICogQHByZSBTZXRNYXhOZWdhdGl2ZVB3bSgpIGNhbGxlZC4NCisgKiBAcHJlIFNldE1pbk5lZ2F0aXZlUHdtKCkgY2FsbGVkLg0KKyAqIA0KKyAqIEByZXR1cm4gVGhlIG1vc3QgcmVjZW50bHkgc2V0IHNwZWVkIGJldHdlZW4gLTEuMCBhbmQgMS4wLg0KKyAqLw0KK2Zsb2F0IFBXTTo6R2V0U3BlZWQoKQ0KK3sNCisJaWYgKFN0YXR1c0lzRmF0YWwoKSkgcmV0dXJuIDAuMDsNCisJSU5UMzIgdmFsdWUgPSBHZXRSYXcoKTsNCisJaWYgKHZhbHVlID4gR2V0TWF4UG9zaXRpdmVQd20oKSkNCisJew0KKwkJcmV0dXJuIDEuMDsNCisJfQ0KKwllbHNlIGlmICh2YWx1ZSA8IEdldE1pbk5lZ2F0aXZlUHdtKCkpDQorCXsNCisJCXJldHVybiAtMS4wOw0KKwl9DQorCWVsc2UgaWYgKHZhbHVlID4gR2V0TWluUG9zaXRpdmVQd20oKSkNCisJew0KKwkJcmV0dXJuIChmbG9hdCkodmFsdWUgLSBHZXRNaW5Qb3NpdGl2ZVB3bSgpKSAvIChmbG9hdClHZXRQb3NpdGl2ZVNjYWxlRmFjdG9yKCk7DQorCX0NCisJZWxzZSBpZiAodmFsdWUgPCBHZXRNYXhOZWdhdGl2ZVB3bSgpKQ0KKwl7DQorCQlyZXR1cm4gKGZsb2F0KSh2YWx1ZSAtIEdldE1heE5lZ2F0aXZlUHdtKCkpIC8gKGZsb2F0KUdldE5lZ2F0aXZlU2NhbGVGYWN0b3IoKTsNCisJfQ0KKwllbHNlDQorCXsNCisJCXJldHVybiAwLjA7DQorCX0NCit9DQorDQorLyoqDQorICogU2V0IHRoZSBQV00gdmFsdWUgZGlyZWN0bHkgdG8gdGhlIGhhcmR3YXJlLg0KKyAqIA0KKyAqIFdyaXRlIGEgcmF3IHZhbHVlIHRvIGEgUFdNIGNoYW5uZWwuDQorICogDQorICogQHBhcmFtIHZhbHVlIFJhdyBQV00gdmFsdWUuICBSYW5nZSAwIC0gMjU1Lg0KKyAqLw0KK3ZvaWQgUFdNOjpTZXRSYXcoVUlOVDggdmFsdWUpDQorew0KKwlpZiAoU3RhdHVzSXNGYXRhbCgpKSByZXR1cm47DQorCW1fbW9kdWxlLT5TZXRQV00obV9jaGFubmVsLCB2YWx1ZSk7DQorfQ0KKw0KKy8qKg0KKyAqIEdldCB0aGUgUFdNIHZhbHVlIGRpcmVjdGx5IGZyb20gdGhlIGhhcmR3YXJlLg0KKyAqIA0KKyAqIFJlYWQgYSByYXcgdmFsdWUgZnJvbSBhIFBXTSBjaGFubmVsLg0KKyAqIA0KKyAqIEByZXR1cm4gUmF3IFBXTSBjb250cm9sIHZhbHVlLiAgUmFuZ2U6IDAgLSAyNTUuDQorICovDQorVUlOVDggUFdNOjpHZXRSYXcoKQ0KK3sNCisJaWYgKFN0YXR1c0lzRmF0YWwoKSkgcmV0dXJuIDA7DQorCXJldHVybiBtX21vZHVsZS0+R2V0UFdNKG1fY2hhbm5lbCk7DQorfQ0KKw0KKy8qKg0KKyAqIFNsb3cgZG93biB0aGUgUFdNIHNpZ25hbCBmb3Igb2xkIGRldmljZXMuDQorICogDQorICogQHBhcmFtIG11bHQgVGhlIHBlcmlvZCBtdWx0aXBsaWVyIHRvIGFwcGx5IHRvIHRoaXMgY2hhbm5lbA0KKyAqLw0KK3ZvaWQgUFdNOjpTZXRQZXJpb2RNdWx0aXBsaWVyKFBlcmlvZE11bHRpcGxpZXIgbXVsdCkNCit7DQorCWlmIChTdGF0dXNJc0ZhdGFsKCkpIHJldHVybjsNCisJc3dpdGNoKG11bHQpDQorCXsNCisJY2FzZSBrUGVyaW9kTXVsdGlwbGllcl80WDoNCisJCW1fbW9kdWxlLT5TZXRQV01QZXJpb2RTY2FsZShtX2NoYW5uZWwsIDMpOyAvLyBTcXVlbGNoIDMgb3V0IG9mIDQgb3V0cHV0cw0KKwkJYnJlYWs7DQorCWNhc2Uga1BlcmlvZE11bHRpcGxpZXJfMlg6DQorCQltX21vZHVsZS0+U2V0UFdNUGVyaW9kU2NhbGUobV9jaGFubmVsLCAxKTsgLy8gU3F1ZWxjaCAxIG91dCBvZiAyIG91dHB1dHMNCisJCWJyZWFrOw0KKwljYXNlIGtQZXJpb2RNdWx0aXBsaWVyXzFYOg0KKwkJbV9tb2R1bGUtPlNldFBXTVBlcmlvZFNjYWxlKG1fY2hhbm5lbCwgMCk7IC8vIERvbid0IHNxdWVsY2ggYW55IG91dHB1dHMNCisJCWJyZWFrOw0KKwlkZWZhdWx0Og0KKwkJd3BpX2Fzc2VydChmYWxzZSk7DQorCX0NCit9DQorDQorDQordm9pZCBQV006OlZhbHVlQ2hhbmdlZChJVGFibGUqIHNvdXJjZSwgY29uc3Qgc3RkOjpzdHJpbmcmIGtleSwgRW50cnlWYWx1ZSB2YWx1ZSwgYm9vbCBpc05ldykgew0KKwlTZXRTcGVlZCh2YWx1ZS5mKTsNCit9DQorDQordm9pZCBQV006OlVwZGF0ZVRhYmxlKCkgew0KKwlpZiAobV90YWJsZSAhPSBOVUxMKSB7DQorCQltX3RhYmxlLT5QdXROdW1iZXIoIlZhbHVlIiwgR2V0U3BlZWQoKSk7DQorCX0NCit9DQorDQordm9pZCBQV006OlN0YXJ0TGl2ZVdpbmRvd01vZGUoKSB7DQorCW1fdGFibGUtPkFkZFRhYmxlTGlzdGVuZXIoIlZhbHVlIiwgdGhpcywgdHJ1ZSk7DQorfQ0KKw0KK3ZvaWQgUFdNOjpTdG9wTGl2ZVdpbmRvd01vZGUoKSB7DQorCVNldFNwZWVkKDApOw0KKwltX3RhYmxlLT5SZW1vdmVUYWJsZUxpc3RlbmVyKHRoaXMpOw0KK30NCisNCitzdGQ6OnN0cmluZyBQV006OkdldFNtYXJ0RGFzaGJvYXJkVHlwZSgpIHsNCisJcmV0dXJuICJTcGVlZCBDb250cm9sbGVyIjsNCit9DQorDQordm9pZCBQV006OkluaXRUYWJsZShJVGFibGUgKnN1YlRhYmxlKSB7DQorCW1fdGFibGUgPSBzdWJUYWJsZTsNCisJVXBkYXRlVGFibGUoKTsNCit9DQorDQorSVRhYmxlICogUFdNOjpHZXRUYWJsZSgpIHsNCisJcmV0dXJuIG1fdGFibGU7DQorfQ0KKw0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL1BXTS5oIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvUFdNLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjA1YzZhMQotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL1BXTS5oCkBAIC0wLDAgKzEsMTE3IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy8qIENvcHlyaWdodCAoYykgRklSU1QgMjAwOC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4JCQkJCQkJICAqLw0KKy8qIE9wZW4gU291cmNlIFNvZnR3YXJlIC0gbWF5IGJlIG1vZGlmaWVkIGFuZCBzaGFyZWQgYnkgRlJDIHRlYW1zLiBUaGUgY29kZSAgICovDQorLyogbXVzdCBiZSBhY2NvbXBhbmllZCBieSB0aGUgRklSU1QgQlNEIGxpY2Vuc2UgZmlsZSBpbiAkKFdJTkRfQkFTRSkvV1BJTGliLiAgKi8NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKyNpZm5kZWYgUFdNX0hfDQorI2RlZmluZSBQV01fSF8NCisNCisjaW5jbHVkZSAiU2Vuc29yQmFzZS5oIg0KKyNpbmNsdWRlICJMaXZlV2luZG93L0xpdmVXaW5kb3dTZW5kYWJsZS5oIg0KKyNpbmNsdWRlICJ0YWJsZXMvSVRhYmxlTGlzdGVuZXIuaCINCisNCitjbGFzcyBEaWdpdGFsTW9kdWxlOw0KKw0KKy8qKg0KKyAqIENsYXNzIGltcGxlbWVudHMgdGhlIFBXTSBnZW5lcmF0aW9uIGluIHRoZSBGUEdBLg0KKyAqIA0KKyAqIFRoZSB2YWx1ZXMgc3VwcGxpZWQgYXMgYXJndW1lbnRzIGZvciBQV00gb3V0cHV0cyByYW5nZSBmcm9tIC0xLjAgdG8gMS4wLiBUaGV5IGFyZSBtYXBwZWQNCisgKiB0byB0aGUgaGFyZHdhcmUgZGVwZW5kZW50IHZhbHVlcywgaW4gdGhpcyBjYXNlIDAtMjU1IGZvciB0aGUgRlBHQS4NCisgKiBDaGFuZ2VzIGFyZSBpbW1lZGlhdGVseSBzZW50IHRvIHRoZSBGUEdBLCBhbmQgdGhlIHVwZGF0ZSBvY2N1cnMgYXQgdGhlIG5leHQNCisgKiBGUEdBIGN5Y2xlLiBUaGVyZSBpcyBubyBkZWxheS4NCisgKiANCisgKiBBcyBvZiByZXZpc2lvbiAwLjEuMTAgb2YgdGhlIEZQR0EsIHRoZSBGUEdBIGludGVycHJldHMgdGhlIDAtMjU1IHZhbHVlcyBhcyBmb2xsb3dzOg0KKyAqICAgLSAyNTUgPSBmdWxsICJmb3J3YXJkIg0KKyAqICAgLSAyNTQgdG8gMTI5ID0gbGluZWFyIHNjYWxpbmcgZnJvbSAiZnVsbCBmb3J3YXJkIiB0byAiY2VudGVyIg0KKyAqICAgLSAxMjggPSBjZW50ZXIgdmFsdWUNCisgKiAgIC0gMTI3IHRvIDIgPSBsaW5lYXIgc2NhbGluZyBmcm9tICJjZW50ZXIiIHRvICJmdWxsIHJldmVyc2UiDQorICogICAtIDEgPSBmdWxsICJyZXZlcnNlIg0KKyAqICAgLSAwID0gZGlzYWJsZWQgKGkuZS4gUFdNIG91dHB1dCBpcyBoZWxkIGxvdykNCisgKi8NCitjbGFzcyBQV00gOiBwdWJsaWMgU2Vuc29yQmFzZSwgcHVibGljIElUYWJsZUxpc3RlbmVyLCBwdWJsaWMgTGl2ZVdpbmRvd1NlbmRhYmxlDQorew0KKwlmcmllbmQgY2xhc3MgRGlnaXRhbE1vZHVsZTsNCitwdWJsaWM6DQorCXR5cGVkZWYgZW51bSB7a1BlcmlvZE11bHRpcGxpZXJfMVggPSAxLCBrUGVyaW9kTXVsdGlwbGllcl8yWCA9IDIsIGtQZXJpb2RNdWx0aXBsaWVyXzRYID0gNH0gUGVyaW9kTXVsdGlwbGllcjsNCisNCisJZXhwbGljaXQgUFdNKFVJTlQzMiBjaGFubmVsKTsNCisJUFdNKFVJTlQ4IG1vZHVsZU51bWJlciwgVUlOVDMyIGNoYW5uZWwpOw0KKwl2aXJ0dWFsIH5QV00oKTsNCisJdmlydHVhbCB2b2lkIFNldFJhdyhVSU5UOCB2YWx1ZSk7DQorCXZpcnR1YWwgVUlOVDggR2V0UmF3KCk7DQorCXZvaWQgU2V0UGVyaW9kTXVsdGlwbGllcihQZXJpb2RNdWx0aXBsaWVyIG11bHQpOw0KKwl2b2lkIEVuYWJsZURlYWRiYW5kRWxpbWluYXRpb24oYm9vbCBlbGltaW5hdGVEZWFkYmFuZCk7DQorCXZvaWQgU2V0Qm91bmRzKElOVDMyIG1heCwgSU5UMzIgZGVhZGJhbmRNYXgsIElOVDMyIGNlbnRlciwgSU5UMzIgZGVhZGJhbmRNaW4sIElOVDMyIG1pbik7DQorCVVJTlQzMiBHZXRDaGFubmVsKCkge3JldHVybiBtX2NoYW5uZWw7fQ0KKwlVSU5UMzIgR2V0TW9kdWxlTnVtYmVyKCk7DQorDQorcHJvdGVjdGVkOg0KKwkvKioNCisJICoga0RlZmF1bHRQd21QZXJpb2QgaXMgInRpY2tzIiB3aGVyZSBlYWNoIHRpY2sgaXMgNi41MjV1cw0KKwkgKiANCisJICogLSAyMG1zIHBlcmlvZHMgKDUwIEh6KSBhcmUgdGhlICJzYWZlc3QiIHNldHRpbmcgaW4gdGhhdCB0aGlzIHdvcmtzIGZvciBhbGwgZGV2aWNlcw0KKwkgKiAtIDIwbXMgcGVyaW9kcyBzZWVtIHRvIGJlIGRlc2lyYWJsZSBmb3IgVmV4IE1vdG9ycw0KKwkgKiAtIDIwbXMgcGVyaW9kcyBhcmUgdGhlIHNwZWNpZmllZCBwZXJpb2QgZm9yIEhTLTMyMkhEIHNlcnZvcywgYnV0IHdvcmsgcmVsaWFibHkgZG93bg0KKwkgKiAgICAgIHRvIDEwLjAgbXM7IHN0YXJ0aW5nIGF0IGFib3V0IDguNW1zLCB0aGUgc2Vydm8gc29tZXRpbWVzIGh1bXMgYW5kIGdldCBob3Q7DQorCSAqICAgICAgYnkgNS4wbXMgdGhlIGh1bSBpcyBuZWFybHkgY29udGludW91cw0KKwkgKiAtIDEwbXMgcGVyaW9kcyB3b3JrIHdlbGwgZm9yIFZpY3RvciA4ODQNCisJICogLSA1bXMgcGVyaW9kcyBhbGxvd3MgaGlnaGVyIHVwZGF0ZSByYXRlcyBmb3IgTHVtaW5hcnkgTWljcm8gSmFndWFyIHNwZWVkIGNvbnRyb2xsZXJzLg0KKwkgKiAgICAgIER1ZSB0byB0aGUgc2hpcHBpbmcgZmlybXdhcmUgb24gdGhlIEphZ3Vhciwgd2UgY2FuJ3QgcnVuIHRoZSB1cGRhdGUgcGVyaW9kIGxlc3MNCisJICogICAgICB0aGFuIDUuMDUgbXMuDQorCSAqIA0KKwkgKiBrRGVmYXVsdFB3bVBlcmlvZCBpcyB0aGUgMXggcGVyaW9kICg1LjA1IG1zKS4gIEluIGhhcmR3YXJlLCB0aGUgcGVyaW9kIHNjYWxpbmcgaXMgaW1wbGVtZW50ZWQgYXMgYW4NCisJICogb3V0cHV0IHNxdWVsY2ggdG8gZ2V0IGxvbmdlciBwZXJpb2RzIGZvciBvbGQgZGV2aWNlcy4NCisJICogDQorCSAqIFNldCB0byA1LjA1IG1zIHBlcmlvZCAvIDYuNTI1dXMgY2xvY2sgPSA3NzQNCisJICovDQorCXN0YXRpYyBjb25zdCBVSU5UMzIga0RlZmF1bHRQd21QZXJpb2QgPSA3NzQ7DQorDQorCS8qKg0KKwkgKiBrRGVmYXVsdE1pblB3bUhpZ2ggaXMgInRpY2tzIiB3aGVyZSBlYWNoIHRpY2sgaXMgNi41MjV1cw0KKwkgKiANCisJICogLSBUaGVyZSBhcmUgMTI4IHB3bSB2YWx1ZXMgbGVzcyB0aGFuIHRoZSBjZW50ZXIsIHNvLi4uDQorCSAqIC0gVGhlIG1pbmltdW0gb3V0cHV0IHB1bHNlIGxlbmd0aCBpcyAxLjVtcyAtIDEyOCAqIDYuNTI1dXMgPSAwLjY2NW1zDQorCSAqIC0gMC42NjVtcyAvIDYuNTI1dXMgcGVyIHRpY2sgPSAxMDINCisJICovDQorCXN0YXRpYyBjb25zdCBVSU5UMzIga0RlZmF1bHRNaW5Qd21IaWdoID0gMTAyOw0KKw0KKwlzdGF0aWMgY29uc3QgSU5UMzIga1B3bURpc2FibGVkID0gMDsNCisNCisJdmlydHVhbCB2b2lkIFNldFBvc2l0aW9uKGZsb2F0IHBvcyk7DQorCXZpcnR1YWwgZmxvYXQgR2V0UG9zaXRpb24oKTsNCisJdmlydHVhbCB2b2lkIFNldFNwZWVkKGZsb2F0IHNwZWVkKTsNCisJdmlydHVhbCBmbG9hdCBHZXRTcGVlZCgpOw0KKw0KKwlib29sIG1fZWxpbWluYXRlRGVhZGJhbmQ7DQorCUlOVDMyIG1fbWF4UHdtOw0KKwlJTlQzMiBtX2RlYWRiYW5kTWF4UHdtOw0KKwlJTlQzMiBtX2NlbnRlclB3bTsNCisJSU5UMzIgbV9kZWFkYmFuZE1pblB3bTsNCisJSU5UMzIgbV9taW5Qd207DQorCQ0KKwl2b2lkIFZhbHVlQ2hhbmdlZChJVGFibGUqIHNvdXJjZSwgY29uc3Qgc3RkOjpzdHJpbmcmIGtleSwgRW50cnlWYWx1ZSB2YWx1ZSwgYm9vbCBpc05ldyk7DQorCXZvaWQgVXBkYXRlVGFibGUoKTsNCisJdm9pZCBTdGFydExpdmVXaW5kb3dNb2RlKCk7DQorCXZvaWQgU3RvcExpdmVXaW5kb3dNb2RlKCk7DQorCXN0ZDo6c3RyaW5nIEdldFNtYXJ0RGFzaGJvYXJkVHlwZSgpOw0KKwl2b2lkIEluaXRUYWJsZShJVGFibGUgKnN1YlRhYmxlKTsNCisJSVRhYmxlICogR2V0VGFibGUoKTsNCisJDQorCUlUYWJsZSAqbV90YWJsZTsNCisNCitwcml2YXRlOg0KKwl2b2lkIEluaXRQV00oVUlOVDggbW9kdWxlTnVtYmVyLCBVSU5UMzIgY2hhbm5lbCk7DQorCVVJTlQzMiBtX2NoYW5uZWw7DQorCURpZ2l0YWxNb2R1bGUgKm1fbW9kdWxlOw0KKwlJTlQzMiBHZXRNYXhQb3NpdGl2ZVB3bSgpIHsgcmV0dXJuIG1fbWF4UHdtOyB9Ow0KKwlJTlQzMiBHZXRNaW5Qb3NpdGl2ZVB3bSgpIHsgcmV0dXJuIG1fZWxpbWluYXRlRGVhZGJhbmQgPyBtX2RlYWRiYW5kTWF4UHdtIDogbV9jZW50ZXJQd20gKyAxOyB9Ow0KKwlJTlQzMiBHZXRDZW50ZXJQd20oKSB7IHJldHVybiBtX2NlbnRlclB3bTsgfTsNCisJSU5UMzIgR2V0TWF4TmVnYXRpdmVQd20oKSB7IHJldHVybiBtX2VsaW1pbmF0ZURlYWRiYW5kID8gbV9kZWFkYmFuZE1pblB3bSA6IG1fY2VudGVyUHdtIC0gMTsgfTsNCisJSU5UMzIgR2V0TWluTmVnYXRpdmVQd20oKSB7IHJldHVybiBtX21pblB3bTsgfTsNCisJSU5UMzIgR2V0UG9zaXRpdmVTY2FsZUZhY3RvcigpIHtyZXR1cm4gR2V0TWF4UG9zaXRpdmVQd20oKSAtIEdldE1pblBvc2l0aXZlUHdtKCk7fSAvLy88IFRoZSBzY2FsZSBmb3IgcG9zaXRpdmUgc3BlZWRzLg0KKwlJTlQzMiBHZXROZWdhdGl2ZVNjYWxlRmFjdG9yKCkge3JldHVybiBHZXRNYXhOZWdhdGl2ZVB3bSgpIC0gR2V0TWluTmVnYXRpdmVQd20oKTt9IC8vLzwgVGhlIHNjYWxlIGZvciBuZWdhdGl2ZSBzcGVlZHMuDQorCUlOVDMyIEdldEZ1bGxSYW5nZVNjYWxlRmFjdG9yKCkge3JldHVybiBHZXRNYXhQb3NpdGl2ZVB3bSgpIC0gR2V0TWluTmVnYXRpdmVQd20oKTt9IC8vLzwgVGhlIHNjYWxlIGZvciBwb3NpdGlvbnMuDQorfTsNCisNCisjZW5kaWYNCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9QcmVmZXJlbmNlcy5jcHAgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9QcmVmZXJlbmNlcy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzk0OGQ5ZgotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL1ByZWZlcmVuY2VzLmNwcApAQCAtMCwwICsxLDYyMCBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBDb3B5cmlnaHQgKGMpIEZJUlNUIDIwMTEuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCQkJCQkJCSAgKi8NCisvKiBPcGVuIFNvdXJjZSBTb2Z0d2FyZSAtIG1heSBiZSBtb2RpZmllZCBhbmQgc2hhcmVkIGJ5IEZSQyB0ZWFtcy4gVGhlIGNvZGUgICAqLw0KKy8qIG11c3QgYmUgYWNjb21wYW5pZWQgYnkgdGhlIEZJUlNUIEJTRCBsaWNlbnNlIGZpbGUgaW4gJChXSU5EX0JBU0UpL1dQSUxpYi4gICovDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisjaW5jbHVkZSAiUHJlZmVyZW5jZXMuaCINCisNCisjaW5jbHVkZSAiTmV0d29ya0NvbW11bmljYXRpb24vVXNhZ2VSZXBvcnRpbmcuaCINCisjaW5jbHVkZSAiU3luY2hyb25pemVkLmgiDQorI2luY2x1ZGUgIldQSUVycm9ycy5oIg0KKw0KKyNpbmNsdWRlIDxzdGRpby5oPg0KKyNpbmNsdWRlIDxhbGdvcml0aG0+DQorDQorLyoqIFByaXZhdGUgTkkgZnVuY3Rpb24gbmVlZGVkIHRvIHdyaXRlIHRvIHRoZSBWeFdvcmtzIHRhcmdldCAqLw0KK2V4dGVybiAiQyIgaW50IFByaXZfU2V0V3JpdGVGaWxlQWxsb3dlZChVSU5UMzIgZW5hYmxlKTsgDQorDQorLyoqIFRoZSBQcmVmZXJlbmNlcyB0YWJsZSBuYW1lICovDQorc3RhdGljIGNvbnN0IGNoYXIgKmtUYWJsZU5hbWUgPSAiUHJlZmVyZW5jZXMiOw0KKy8qKiBUaGUgdmFsdWUgb2YgdGhlIHNhdmUgZmllbGQgKi8NCitzdGF0aWMgY29uc3QgY2hhciAqa1NhdmVGaWVsZCA9ICJ+UyBBIFYgRX4iOw0KKy8qKiBUaGUgZmlsZSB0byBzYXZlIHRvICovDQorc3RhdGljIGNvbnN0IGNoYXIgKmtGaWxlTmFtZSA9ICIvYy93cGlsaWItcHJlZmVyZW5jZXMuaW5pIjsNCisvKiogVGhlIGNoYXJhY3RlcnMgdG8gcHV0IGJldHdlZW4gYSBmaWVsZCBhbmQgdmFsdWUgKi8NCitzdGF0aWMgY29uc3QgY2hhciAqa1ZhbHVlUHJlZml4ID0gIj1cIiI7DQorLyoqIFRoZSBjaGFyYWN0ZXJzIHRvIHB1dCBhZnRlciB0aGUgdmFsdWUgKi8NCitzdGF0aWMgY29uc3QgY2hhciAqa1ZhbHVlU3VmZml4ID0gIlwiXG4iOw0KKy8qKiBUaGUgc2luZ2xldG9uIGluc3RhbmNlICovDQorUHJlZmVyZW5jZXMgKlByZWZlcmVuY2VzOjpfaW5zdGFuY2UgPSBOVUxMOw0KKw0KK1ByZWZlcmVuY2VzOjpQcmVmZXJlbmNlcygpIDoNCisJbV9maWxlTG9jayhOVUxMKSwNCisJbV9maWxlT3BTdGFydGVkKE5VTEwpLA0KKwltX3RhYmxlTG9jayhOVUxMKSwNCisJbV9yZWFkVGFzaygiUHJlZmVyZW5jZXNSZWFkVGFzayIsIChGVU5DUFRSKVByZWZlcmVuY2VzOjpJbml0UmVhZFRhc2spLA0KKwltX3dyaXRlVGFzaygiUHJlZmVyZW5jZXNXcml0ZVRhc2siLCAoRlVOQ1BUUilQcmVmZXJlbmNlczo6SW5pdFdyaXRlVGFzaykNCit7DQorCW1fZmlsZUxvY2sgPSBzZW1NQ3JlYXRlKFNFTV9RX1BSSU9SSVRZIHwgU0VNX0lOVkVSU0lPTl9TQUZFIHwgU0VNX0RFTEVURV9TQUZFKTsNCisJbV9maWxlT3BTdGFydGVkID0gc2VtQkNyZWF0ZSAoU0VNX1FfUFJJT1JJVFksIFNFTV9FTVBUWSk7DQorCW1fdGFibGVMb2NrID0gc2VtTUNyZWF0ZShTRU1fUV9QUklPUklUWSB8IFNFTV9JTlZFUlNJT05fU0FGRSB8IFNFTV9ERUxFVEVfU0FGRSk7DQorDQorCVN5bmNocm9uaXplZCBzeW5jKG1fZmlsZUxvY2spOw0KKwltX3JlYWRUYXNrLlN0YXJ0KChVSU5UMzIpdGhpcyk7DQorCXNlbVRha2UobV9maWxlT3BTdGFydGVkLCBXQUlUX0ZPUkVWRVIpOw0KKw0KKwlOZXR3b3JrVGFibGU6OkdldFRhYmxlKGtUYWJsZU5hbWUpLT5QdXRCb29sZWFuKGtTYXZlRmllbGQsIGZhbHNlKTsNCisJTmV0d29ya1RhYmxlOjpHZXRUYWJsZShrVGFibGVOYW1lKS0+QWRkVGFibGVMaXN0ZW5lcih0aGlzKTsNCisNCisJblVzYWdlUmVwb3J0aW5nOjpyZXBvcnQoblVzYWdlUmVwb3J0aW5nOjprUmVzb3VyY2VUeXBlX1ByZWZlcmVuY2VzLCAwKTsNCit9DQorDQorUHJlZmVyZW5jZXM6On5QcmVmZXJlbmNlcygpDQorew0KKwlzZW1UYWtlKG1fdGFibGVMb2NrLCBXQUlUX0ZPUkVWRVIpOw0KKwlzZW1EZWxldGUobV90YWJsZUxvY2spOw0KKwlzZW1UYWtlKG1fZmlsZUxvY2ssIFdBSVRfRk9SRVZFUik7DQorCXNlbURlbGV0ZShtX2ZpbGVPcFN0YXJ0ZWQpOw0KKwlzZW1EZWxldGUobV9maWxlTG9jayk7DQorfQ0KKw0KKy8qKg0KKyAqIEdldCB0aGUgb25lIGFuZCBvbmx5IHtAbGluayBQcmVmZXJlbmNlc30gb2JqZWN0DQorICogQHJldHVybiBwb2ludGVyIHRvIHRoZSB7QGxpbmsgUHJlZmVyZW5jZXN9DQorICovDQorUHJlZmVyZW5jZXMgKlByZWZlcmVuY2VzOjpHZXRJbnN0YW5jZSgpDQorew0KKwlpZiAoX2luc3RhbmNlID09IE5VTEwpDQorCQlfaW5zdGFuY2UgPSBuZXcgUHJlZmVyZW5jZXM7DQorCXJldHVybiBfaW5zdGFuY2U7DQorfQ0KKw0KKy8qKg0KKyAqIFJldHVybnMgYSB2ZWN0b3Igb2YgYWxsIHRoZSBrZXlzDQorICogQHJldHVybiBhIHZlY3RvciBvZiB0aGUga2V5cw0KKyAqLw0KK3N0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBQcmVmZXJlbmNlczo6R2V0S2V5cygpDQorew0KKwlyZXR1cm4gbV9rZXlzOw0KK30NCisNCisvKioNCisgKiBSZXR1cm5zIHRoZSBzdHJpbmcgYXQgdGhlIGdpdmVuIGtleS4gIElmIHRoaXMgdGFibGUgZG9lcyBub3QgaGF2ZSBhIHZhbHVlDQorICogZm9yIHRoYXQgcG9zaXRpb24sIHRoZW4gdGhlIGdpdmVuIGRlZmF1bHRWYWx1ZSB3aWxsIGJlIHJldHVybmVkLg0KKyAqIEBwYXJhbSBrZXkgdGhlIGtleQ0KKyAqIEBwYXJhbSBkZWZhdWx0VmFsdWUgdGhlIHZhbHVlIHRvIHJldHVybiBpZiBub25lIGV4aXN0cyBpbiB0aGUgdGFibGUNCisgKiBAcmV0dXJuIGVpdGhlciB0aGUgdmFsdWUgaW4gdGhlIHRhYmxlLCBvciB0aGUgZGVmYXVsdFZhbHVlDQorICovDQorc3RkOjpzdHJpbmcgUHJlZmVyZW5jZXM6OkdldFN0cmluZyhjb25zdCBjaGFyICprZXksIGNvbnN0IGNoYXIgKmRlZmF1bHRWYWx1ZSkNCit7DQorCXN0ZDo6c3RyaW5nIHZhbHVlID0gR2V0KGtleSk7DQorCXJldHVybiB2YWx1ZS5lbXB0eSgpID8gZGVmYXVsdFZhbHVlIDogdmFsdWU7DQorfQ0KKw0KKy8qKg0KKyAqIFJldHVybnMgdGhlIHN0cmluZyBhdCB0aGUgZ2l2ZW4ga2V5LiAgSWYgdGhpcyB0YWJsZSBkb2VzIG5vdCBoYXZlIGEgdmFsdWUNCisgKiBmb3IgdGhhdCBwb3NpdGlvbiwgdGhlbiB0aGUgZ2l2ZW4gZGVmYXVsdFZhbHVlIHdpbGwgYmUgcmV0dXJuZWQuDQorICogQHBhcmFtIGtleSB0aGUga2V5DQorICogQHBhcmFtIHZhbHVlIHRoZSBidWZmZXIgdG8gY29weSB0aGUgdmFsdWUgaW50bw0KKyAqIEBwYXJhbSB2YWx1ZVNpemUgdGhlIHNpemUgb2YgdmFsdWUNCisgKiBAcGFyYW0gZGVmYXVsdFZhbHVlIHRoZSB2YWx1ZSB0byByZXR1cm4gaWYgbm9uZSBleGlzdHMgaW4gdGhlIHRhYmxlDQorICogQHJldHVybiBUaGUgc2l6ZSBvZiB0aGUgcmV0dXJuZWQgc3RyaW5nDQorICovDQoraW50IFByZWZlcmVuY2VzOjpHZXRTdHJpbmcoY29uc3QgY2hhciAqa2V5LCBjaGFyICp2YWx1ZSwgaW50IHZhbHVlU2l6ZSwgY29uc3QgY2hhciAqZGVmYXVsdFZhbHVlKQ0KK3sNCisJc3RkOjpzdHJpbmcgc3RyaW5nVmFsdWUgPSBHZXRTdHJpbmcoa2V5LCBkZWZhdWx0VmFsdWUpOw0KKwlzdHJpbmdWYWx1ZS5jb3B5KHZhbHVlLCB2YWx1ZVNpemUpOw0KKwlyZXR1cm4gc3RyaW5nVmFsdWUuc2l6ZSgpOw0KK30NCisNCisvKioNCisgKiBSZXR1cm5zIHRoZSBpbnQgYXQgdGhlIGdpdmVuIGtleS4gIElmIHRoaXMgdGFibGUgZG9lcyBub3QgaGF2ZSBhIHZhbHVlDQorICogZm9yIHRoYXQgcG9zaXRpb24sIHRoZW4gdGhlIGdpdmVuIGRlZmF1bHRWYWx1ZSB2YWx1ZSB3aWxsIGJlIHJldHVybmVkLg0KKyAqIEBwYXJhbSBrZXkgdGhlIGtleQ0KKyAqIEBwYXJhbSBkZWZhdWx0VmFsdWUgdGhlIHZhbHVlIHRvIHJldHVybiBpZiBub25lIGV4aXN0cyBpbiB0aGUgdGFibGUNCisgKiBAcmV0dXJuIGVpdGhlciB0aGUgdmFsdWUgaW4gdGhlIHRhYmxlLCBvciB0aGUgZGVmYXVsdFZhbHVlDQorICovDQoraW50IFByZWZlcmVuY2VzOjpHZXRJbnQoY29uc3QgY2hhciAqa2V5LCBpbnQgZGVmYXVsdFZhbHVlKQ0KK3sNCisJc3RkOjpzdHJpbmcgdmFsdWUgPSBHZXQoa2V5KTsNCisJaWYgKHZhbHVlLmVtcHR5KCkpDQorCQlyZXR1cm4gZGVmYXVsdFZhbHVlOw0KKw0KKwlyZXR1cm4gc3RydG9sKHZhbHVlLmNfc3RyKCksIE5VTEwsIDApOw0KK30NCisNCisvKioNCisgKiBSZXR1cm5zIHRoZSBkb3VibGUgYXQgdGhlIGdpdmVuIGtleS4gIElmIHRoaXMgdGFibGUgZG9lcyBub3QgaGF2ZSBhIHZhbHVlDQorICogZm9yIHRoYXQgcG9zaXRpb24sIHRoZW4gdGhlIGdpdmVuIGRlZmF1bHRWYWx1ZSB2YWx1ZSB3aWxsIGJlIHJldHVybmVkLg0KKyAqIEBwYXJhbSBrZXkgdGhlIGtleQ0KKyAqIEBwYXJhbSBkZWZhdWx0VmFsdWUgdGhlIHZhbHVlIHRvIHJldHVybiBpZiBub25lIGV4aXN0cyBpbiB0aGUgdGFibGUNCisgKiBAcmV0dXJuIGVpdGhlciB0aGUgdmFsdWUgaW4gdGhlIHRhYmxlLCBvciB0aGUgZGVmYXVsdFZhbHVlDQorICovDQorZG91YmxlIFByZWZlcmVuY2VzOjpHZXREb3VibGUoY29uc3QgY2hhciAqa2V5LCBkb3VibGUgZGVmYXVsdFZhbHVlKQ0KK3sNCisJc3RkOjpzdHJpbmcgdmFsdWUgPSBHZXQoa2V5KTsNCisJaWYgKHZhbHVlLmVtcHR5KCkpDQorCQlyZXR1cm4gZGVmYXVsdFZhbHVlOw0KKw0KKwlyZXR1cm4gc3RydG9kKHZhbHVlLmNfc3RyKCksIE5VTEwpOw0KK30NCisNCisvKioNCisgKiBSZXR1cm5zIHRoZSBmbG9hdCBhdCB0aGUgZ2l2ZW4ga2V5LiAgSWYgdGhpcyB0YWJsZSBkb2VzIG5vdCBoYXZlIGEgdmFsdWUNCisgKiBmb3IgdGhhdCBwb3NpdGlvbiwgdGhlbiB0aGUgZ2l2ZW4gZGVmYXVsdFZhbHVlIHZhbHVlIHdpbGwgYmUgcmV0dXJuZWQuDQorICogQHBhcmFtIGtleSB0aGUga2V5DQorICogQHBhcmFtIGRlZmF1bHRWYWx1ZSB0aGUgdmFsdWUgdG8gcmV0dXJuIGlmIG5vbmUgZXhpc3RzIGluIHRoZSB0YWJsZQ0KKyAqIEByZXR1cm4gZWl0aGVyIHRoZSB2YWx1ZSBpbiB0aGUgdGFibGUsIG9yIHRoZSBkZWZhdWx0VmFsdWUNCisgKi8NCitmbG9hdCBQcmVmZXJlbmNlczo6R2V0RmxvYXQoY29uc3QgY2hhciAqa2V5LCBmbG9hdCBkZWZhdWx0VmFsdWUpDQorew0KKwlzdGQ6OnN0cmluZyB2YWx1ZSA9IEdldChrZXkpOw0KKwlpZiAodmFsdWUuZW1wdHkoKSkNCisJCXJldHVybiBkZWZhdWx0VmFsdWU7DQorDQorCXJldHVybiBzdHJ0b2QodmFsdWUuY19zdHIoKSwgTlVMTCk7DQorfQ0KKw0KKy8qKg0KKyAqIFJldHVybnMgdGhlIGJvb2xlYW4gYXQgdGhlIGdpdmVuIGtleS4gIElmIHRoaXMgdGFibGUgZG9lcyBub3QgaGF2ZSBhIHZhbHVlDQorICogZm9yIHRoYXQgcG9zaXRpb24sIHRoZW4gdGhlIGdpdmVuIGRlZmF1bHRWYWx1ZSB2YWx1ZSB3aWxsIGJlIHJldHVybmVkLg0KKyAqIEBwYXJhbSBrZXkgdGhlIGtleQ0KKyAqIEBwYXJhbSBkZWZhdWx0VmFsdWUgdGhlIHZhbHVlIHRvIHJldHVybiBpZiBub25lIGV4aXN0cyBpbiB0aGUgdGFibGUNCisgKiBAcmV0dXJuIGVpdGhlciB0aGUgdmFsdWUgaW4gdGhlIHRhYmxlLCBvciB0aGUgZGVmYXVsdFZhbHVlDQorICovDQorYm9vbCBQcmVmZXJlbmNlczo6R2V0Qm9vbGVhbihjb25zdCBjaGFyICprZXksIGJvb2wgZGVmYXVsdFZhbHVlKQ0KK3sNCisJc3RkOjpzdHJpbmcgdmFsdWUgPSBHZXQoa2V5KTsNCisJaWYgKHZhbHVlLmVtcHR5KCkpDQorCQlyZXR1cm4gZGVmYXVsdFZhbHVlOw0KKw0KKwlpZiAodmFsdWUuY29tcGFyZSgidHJ1ZSIpID09IDApDQorCQlyZXR1cm4gdHJ1ZTsNCisJZWxzZSBpZiAodmFsdWUuY29tcGFyZSgiZmFsc2UiKSA9PSAwKQ0KKwkJcmV0dXJuIGZhbHNlOw0KKw0KKwl3cGlfc2V0V1BJRXJyb3JXaXRoQ29udGV4dChQYXJhbWV0ZXJPdXRPZlJhbmdlLCAiQm9vbGVhbiB2YWx1ZSBkb2VzIG5vdCBjb250YWluIFwidHJ1ZVwiIG9yIFwiZmFsc2VcIiIpOw0KKwlyZXR1cm4gZmFsc2U7DQorfQ0KKw0KKy8qKg0KKyAqIFJldHVybnMgdGhlIGxvbmcgKElOVDY0KSBhdCB0aGUgZ2l2ZW4ga2V5LiAgSWYgdGhpcyB0YWJsZSBkb2VzIG5vdCBoYXZlIGEgdmFsdWUNCisgKiBmb3IgdGhhdCBwb3NpdGlvbiwgdGhlbiB0aGUgZ2l2ZW4gZGVmYXVsdFZhbHVlIHZhbHVlIHdpbGwgYmUgcmV0dXJuZWQuDQorICogQHBhcmFtIGtleSB0aGUga2V5DQorICogQHBhcmFtIGRlZmF1bHRWYWx1ZSB0aGUgdmFsdWUgdG8gcmV0dXJuIGlmIG5vbmUgZXhpc3RzIGluIHRoZSB0YWJsZQ0KKyAqIEByZXR1cm4gZWl0aGVyIHRoZSB2YWx1ZSBpbiB0aGUgdGFibGUsIG9yIHRoZSBkZWZhdWx0VmFsdWUNCisgKi8NCitJTlQ2NCBQcmVmZXJlbmNlczo6R2V0TG9uZyhjb25zdCBjaGFyICprZXksIElOVDY0IGRlZmF1bHRWYWx1ZSkNCit7DQorCXN0ZDo6c3RyaW5nIHZhbHVlID0gR2V0KGtleSk7DQorCWlmICh2YWx1ZS5lbXB0eSgpKQ0KKwkJcmV0dXJuIGRlZmF1bHRWYWx1ZTsNCisNCisJLy8gVW1tbS4uLiBub3QgYXZhaWxhYmxlIGluIG91ciBWeFdvcmtzLi4uDQorCS8vcmV0dXJuIHN0cnRvbGwodmFsdWUuY19zdHIoKSwgTlVMTCwgMCk7DQorCUlOVDY0IGludFZhbDsNCisJc3NjYW5mKHZhbHVlLmNfc3RyKCksICIlbGxkIiwgJmludFZhbCk7DQorCXJldHVybiBpbnRWYWw7DQorfQ0KKw0KKy8qKg0KKyAqIFB1dHMgdGhlIGdpdmVuIHN0cmluZyBpbnRvIHRoZSBwcmVmZXJlbmNlcyB0YWJsZS4NCisgKg0KKyAqIDxwPlRoZSB2YWx1ZSBtYXkgbm90IGhhdmUgcXVvdGF0aW9uIG1hcmtzLCBub3IgbWF5IHRoZSBrZXkNCisgKiBoYXZlIGFueSB3aGl0ZXNwYWNlIG5vciBhbiBlcXVhbHMgc2lnbjwvcD4NCisgKg0KKyAqIDxwPlRoaXMgd2lsbCA8Yj5OT1Q8L2I+IHNhdmUgdGhlIHZhbHVlIHRvIG1lbW9yeSBiZXR3ZWVuIHBvd2VyIGN5Y2xlcywNCisgKiB0byBkbyB0aGF0IHlvdSBtdXN0IGNhbGwge0BsaW5rIFByZWZlcmVuY2VzI1NhdmUoKSBTYXZlKCl9ICh3aGljaCBtdXN0IGJlIHVzZWQgd2l0aCBjYXJlKS4NCisgKiBhdCBzb21lIHBvaW50IGFmdGVyIGNhbGxpbmcgdGhpcy48L3A+DQorICogQHBhcmFtIGtleSB0aGUga2V5DQorICogQHBhcmFtIHZhbHVlIHRoZSB2YWx1ZQ0KKyAqLw0KK3ZvaWQgUHJlZmVyZW5jZXM6OlB1dFN0cmluZyhjb25zdCBjaGFyICprZXksIGNvbnN0IGNoYXIgKnZhbHVlKQ0KK3sNCisJaWYgKHZhbHVlID09IE5VTEwpDQorCXsNCisJCXdwaV9zZXRXUElFcnJvcldpdGhDb250ZXh0KE51bGxQYXJhbWV0ZXIsICJ2YWx1ZSIpOw0KKwkJcmV0dXJuOw0KKwl9DQorCWlmIChzdGQ6OnN0cmluZyh2YWx1ZSkuZmluZF9maXJzdF9vZigiXCIiKSAhPSBzdGQ6OnN0cmluZzo6bnBvcykNCisJew0KKwkJd3BpX3NldFdQSUVycm9yV2l0aENvbnRleHQoUGFyYW1ldGVyT3V0T2ZSYW5nZSwgInZhbHVlIGNvbnRhaW5zIGlsbGVnYWwgY2hhcmFjdGVycyIpOw0KKwkJcmV0dXJuOw0KKwl9DQorCVB1dChrZXksIHZhbHVlKTsNCit9DQorDQorLyoqDQorICogUHV0cyB0aGUgZ2l2ZW4gaW50IGludG8gdGhlIHByZWZlcmVuY2VzIHRhYmxlLg0KKyAqDQorICogPHA+VGhlIGtleSBtYXkgbm90IGhhdmUgYW55IHdoaXRlc3BhY2Ugbm9yIGFuIGVxdWFscyBzaWduPC9wPg0KKyAqDQorICogPHA+VGhpcyB3aWxsIDxiPk5PVDwvYj4gc2F2ZSB0aGUgdmFsdWUgdG8gbWVtb3J5IGJldHdlZW4gcG93ZXIgY3ljbGVzLA0KKyAqIHRvIGRvIHRoYXQgeW91IG11c3QgY2FsbCB7QGxpbmsgUHJlZmVyZW5jZXMjU2F2ZSgpIFNhdmUoKX0gKHdoaWNoIG11c3QgYmUgdXNlZCB3aXRoIGNhcmUpDQorICogYXQgc29tZSBwb2ludCBhZnRlciBjYWxsaW5nIHRoaXMuPC9wPg0KKyAqIEBwYXJhbSBrZXkgdGhlIGtleQ0KKyAqIEBwYXJhbSB2YWx1ZSB0aGUgdmFsdWUNCisgKi8NCit2b2lkIFByZWZlcmVuY2VzOjpQdXRJbnQoY29uc3QgY2hhciAqa2V5LCBpbnQgdmFsdWUpDQorew0KKwljaGFyIGJ1ZlszMl07DQorCXNucHJpbnRmKGJ1ZiwgMzIsICIlZCIsIHZhbHVlKTsNCisJUHV0KGtleSwgYnVmKTsNCit9DQorDQorLyoqDQorICogUHV0cyB0aGUgZ2l2ZW4gZG91YmxlIGludG8gdGhlIHByZWZlcmVuY2VzIHRhYmxlLg0KKyAqDQorICogPHA+VGhlIGtleSBtYXkgbm90IGhhdmUgYW55IHdoaXRlc3BhY2Ugbm9yIGFuIGVxdWFscyBzaWduPC9wPg0KKyAqDQorICogPHA+VGhpcyB3aWxsIDxiPk5PVDwvYj4gc2F2ZSB0aGUgdmFsdWUgdG8gbWVtb3J5IGJldHdlZW4gcG93ZXIgY3ljbGVzLA0KKyAqIHRvIGRvIHRoYXQgeW91IG11c3QgY2FsbCB7QGxpbmsgUHJlZmVyZW5jZXMjU2F2ZSgpIFNhdmUoKX0gKHdoaWNoIG11c3QgYmUgdXNlZCB3aXRoIGNhcmUpDQorICogYXQgc29tZSBwb2ludCBhZnRlciBjYWxsaW5nIHRoaXMuPC9wPg0KKyAqIEBwYXJhbSBrZXkgdGhlIGtleQ0KKyAqIEBwYXJhbSB2YWx1ZSB0aGUgdmFsdWUNCisgKi8NCit2b2lkIFByZWZlcmVuY2VzOjpQdXREb3VibGUoY29uc3QgY2hhciAqa2V5LCBkb3VibGUgdmFsdWUpDQorew0KKwljaGFyIGJ1ZlszMl07DQorCXNucHJpbnRmKGJ1ZiwgMzIsICIlZiIsIHZhbHVlKTsNCisJUHV0KGtleSwgYnVmKTsNCit9DQorDQorLyoqDQorICogUHV0cyB0aGUgZ2l2ZW4gZmxvYXQgaW50byB0aGUgcHJlZmVyZW5jZXMgdGFibGUuDQorICoNCisgKiA8cD5UaGUga2V5IG1heSBub3QgaGF2ZSBhbnkgd2hpdGVzcGFjZSBub3IgYW4gZXF1YWxzIHNpZ248L3A+DQorICoNCisgKiA8cD5UaGlzIHdpbGwgPGI+Tk9UPC9iPiBzYXZlIHRoZSB2YWx1ZSB0byBtZW1vcnkgYmV0d2VlbiBwb3dlciBjeWNsZXMsDQorICogdG8gZG8gdGhhdCB5b3UgbXVzdCBjYWxsIHtAbGluayBQcmVmZXJlbmNlcyNTYXZlKCkgU2F2ZSgpfSAod2hpY2ggbXVzdCBiZSB1c2VkIHdpdGggY2FyZSkNCisgKiBhdCBzb21lIHBvaW50IGFmdGVyIGNhbGxpbmcgdGhpcy48L3A+DQorICogQHBhcmFtIGtleSB0aGUga2V5DQorICogQHBhcmFtIHZhbHVlIHRoZSB2YWx1ZQ0KKyAqLw0KK3ZvaWQgUHJlZmVyZW5jZXM6OlB1dEZsb2F0KGNvbnN0IGNoYXIgKmtleSwgZmxvYXQgdmFsdWUpDQorew0KKwljaGFyIGJ1ZlszMl07DQorCXNucHJpbnRmKGJ1ZiwgMzIsICIlZiIsIHZhbHVlKTsNCisJUHV0KGtleSwgYnVmKTsNCit9DQorDQorLyoqDQorICogUHV0cyB0aGUgZ2l2ZW4gYm9vbGVhbiBpbnRvIHRoZSBwcmVmZXJlbmNlcyB0YWJsZS4NCisgKg0KKyAqIDxwPlRoZSBrZXkgbWF5IG5vdCBoYXZlIGFueSB3aGl0ZXNwYWNlIG5vciBhbiBlcXVhbHMgc2lnbjwvcD4NCisgKg0KKyAqIDxwPlRoaXMgd2lsbCA8Yj5OT1Q8L2I+IHNhdmUgdGhlIHZhbHVlIHRvIG1lbW9yeSBiZXR3ZWVuIHBvd2VyIGN5Y2xlcywNCisgKiB0byBkbyB0aGF0IHlvdSBtdXN0IGNhbGwge0BsaW5rIFByZWZlcmVuY2VzI1NhdmUoKSBTYXZlKCl9ICh3aGljaCBtdXN0IGJlIHVzZWQgd2l0aCBjYXJlKQ0KKyAqIGF0IHNvbWUgcG9pbnQgYWZ0ZXIgY2FsbGluZyB0aGlzLjwvcD4NCisgKiBAcGFyYW0ga2V5IHRoZSBrZXkNCisgKiBAcGFyYW0gdmFsdWUgdGhlIHZhbHVlDQorICovDQordm9pZCBQcmVmZXJlbmNlczo6UHV0Qm9vbGVhbihjb25zdCBjaGFyICprZXksIGJvb2wgdmFsdWUpDQorew0KKwlQdXQoa2V5LCB2YWx1ZSA/ICJ0cnVlIiA6ICJmYWxzZSIpOw0KK30NCisNCisvKioNCisgKiBQdXRzIHRoZSBnaXZlbiBsb25nIChJTlQ2NCkgaW50byB0aGUgcHJlZmVyZW5jZXMgdGFibGUuDQorICoNCisgKiA8cD5UaGUga2V5IG1heSBub3QgaGF2ZSBhbnkgd2hpdGVzcGFjZSBub3IgYW4gZXF1YWxzIHNpZ248L3A+DQorICoNCisgKiA8cD5UaGlzIHdpbGwgPGI+Tk9UPC9iPiBzYXZlIHRoZSB2YWx1ZSB0byBtZW1vcnkgYmV0d2VlbiBwb3dlciBjeWNsZXMsDQorICogdG8gZG8gdGhhdCB5b3UgbXVzdCBjYWxsIHtAbGluayBQcmVmZXJlbmNlcyNTYXZlKCkgU2F2ZSgpfSAod2hpY2ggbXVzdCBiZSB1c2VkIHdpdGggY2FyZSkNCisgKiBhdCBzb21lIHBvaW50IGFmdGVyIGNhbGxpbmcgdGhpcy48L3A+DQorICogQHBhcmFtIGtleSB0aGUga2V5DQorICogQHBhcmFtIHZhbHVlIHRoZSB2YWx1ZQ0KKyAqLw0KK3ZvaWQgUHJlZmVyZW5jZXM6OlB1dExvbmcoY29uc3QgY2hhciAqa2V5LCBJTlQ2NCB2YWx1ZSkNCit7DQorCWNoYXIgYnVmWzMyXTsNCisJc25wcmludGYoYnVmLCAzMiwgIiVsbGQiLCB2YWx1ZSk7DQorCVB1dChrZXksIGJ1Zik7DQorfQ0KKw0KKy8qKg0KKyAqIFNhdmVzIHRoZSBwcmVmZXJlbmNlcyB0byBhIGZpbGUgb24gdGhlIGNSSU8uDQorICoNCisgKiA8cD5UaGlzIHNob3VsZCA8Yj5OT1Q8L2I+IGJlIGNhbGxlZCBvZnRlbi4NCisgKiBUb28gbWFueSB3cml0ZXMgY2FuIGRhbWFnZSB0aGUgY1JJTydzIGZsYXNoIG1lbW9yeS4NCisgKiBXaGlsZSBpdCBpcyBvayB0byBzYXZlIG9uY2Ugb3IgdHdpY2UgYSBtYXRjaCwgdGhpcyBzaG91bGQgbmV2ZXINCisgKiBiZSBjYWxsZWQgZXZlcnkgcnVuIG9mIHtAbGluayBJdGVyYXRpdmVSb2JvdCNUZWxlb3BQZXJpb2RpYygpfSwgZXRjLjwvcD4NCisgKg0KKyAqIDxwPlRoZSBhY3R1YWwgd3JpdGluZyBvZiB0aGUgZmlsZSBpcyBkb25lIGluIGEgc2VwYXJhdGUgdGhyZWFkLg0KKyAqIEhvd2V2ZXIsIGFueSBjYWxsIHRvIGEgZ2V0IG9yIHB1dCBtZXRob2Qgd2lsbCB3YWl0IHVudGlsIHRoZSB0YWJsZSBpcyBmdWxseSBzYXZlZCBiZWZvcmUgY29udGludWluZy48L3A+DQorICovDQordm9pZCBQcmVmZXJlbmNlczo6U2F2ZSgpDQorew0KKwlTeW5jaHJvbml6ZWQgc3luYyhtX2ZpbGVMb2NrKTsNCisJbV93cml0ZVRhc2suU3RhcnQoKFVJTlQzMil0aGlzKTsNCisJc2VtVGFrZShtX2ZpbGVPcFN0YXJ0ZWQsIFdBSVRfRk9SRVZFUik7DQorfQ0KKw0KKy8qKg0KKyAqIFJldHVybnMgd2hldGhlciBvciBub3QgdGhlcmUgaXMgYSBrZXkgd2l0aCB0aGUgZ2l2ZW4gbmFtZS4NCisgKiBAcGFyYW0ga2V5IHRoZSBrZXkNCisgKiBAcmV0dXJuIGlmIHRoZXJlIGlzIGEgdmFsdWUgYXQgdGhlIGdpdmVuIGtleQ0KKyAqLw0KK2Jvb2wgUHJlZmVyZW5jZXM6OkNvbnRhaW5zS2V5KGNvbnN0IGNoYXIgKmtleSkNCit7DQorCXJldHVybiAhR2V0KGtleSkuZW1wdHkoKTsNCit9DQorDQorLyoqDQorICogUmVtb3ZlIGEgcHJlZmVyZW5jZQ0KKyAqIEBwYXJhbSBrZXkgdGhlIGtleQ0KKyAqLw0KK3ZvaWQgUHJlZmVyZW5jZXM6OlJlbW92ZShjb25zdCBjaGFyICprZXkpDQorew0KKwltX3ZhbHVlcy5lcmFzZShzdGQ6OnN0cmluZyhrZXkpKTsNCisJc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+OjppdGVyYXRvciBpdCA9IG1fa2V5cy5iZWdpbigpOw0KKwlmb3IgKDsgaXQgIT0gbV9rZXlzLmVuZCgpOyBpdCsrKQ0KKwl7DQorCQlpZiAoaXQtPmNvbXBhcmUoa2V5KSA9PSAwKQ0KKwkJew0KKwkJCW1fa2V5cy5lcmFzZShpdCk7DQorCQkJYnJlYWs7DQorCQl9DQorCX0NCit9DQorDQorLyoqDQorICogUmV0dXJucyB0aGUgdmFsdWUgYXQgdGhlIGdpdmVuIGtleS4NCisgKiBAcGFyYW0ga2V5IHRoZSBrZXkNCisgKiBAcmV0dXJuIHRoZSB2YWx1ZSAob3IgZW1wdHkgaWYgbm9uZSBleGlzdHMpDQorICovDQorc3RkOjpzdHJpbmcgUHJlZmVyZW5jZXM6OkdldChjb25zdCBjaGFyICprZXkpDQorew0KKwlTeW5jaHJvbml6ZWQgc3luYyhtX3RhYmxlTG9jayk7DQorCWlmIChrZXkgPT0gTlVMTCkNCisJew0KKwkJd3BpX3NldFdQSUVycm9yV2l0aENvbnRleHQoTnVsbFBhcmFtZXRlciwgImtleSIpOw0KKwkJcmV0dXJuIHN0ZDo6c3RyaW5nKCIiKTsNCisJfQ0KKwlyZXR1cm4gbV92YWx1ZXNbc3RkOjpzdHJpbmcoa2V5KV07DQorfQ0KKw0KKy8qKg0KKyAqIFB1dHMgdGhlIGdpdmVuIHZhbHVlIGludG8gdGhlIGdpdmVuIGtleSBwb3NpdGlvbg0KKyAqIEBwYXJhbSBrZXkgdGhlIGtleQ0KKyAqIEBwYXJhbSB2YWx1ZSB0aGUgdmFsdWUNCisgKi8NCit2b2lkIFByZWZlcmVuY2VzOjpQdXQoY29uc3QgY2hhciAqa2V5LCBzdGQ6OnN0cmluZyB2YWx1ZSkNCit7DQorCVN5bmNocm9uaXplZCBzeW5jKG1fdGFibGVMb2NrKTsNCisJaWYgKGtleSA9PSBOVUxMKQ0KKwl7DQorCQl3cGlfc2V0V1BJRXJyb3JXaXRoQ29udGV4dChOdWxsUGFyYW1ldGVyLCAia2V5Iik7DQorCQlyZXR1cm47DQorCX0NCisNCisJaWYgKHN0ZDo6c3RyaW5nKGtleSkuZmluZF9maXJzdF9vZigiPVxuXHIgXHRcIiIpICE9IHN0ZDo6c3RyaW5nOjpucG9zKQ0KKwl7DQorCQl3cGlfc2V0V1BJRXJyb3JXaXRoQ29udGV4dChQYXJhbWV0ZXJPdXRPZlJhbmdlLCAia2V5IGNvbnRhaW5zIGlsbGVnYWwgY2hhcmFjdGVycyIpOw0KKwkJcmV0dXJuOw0KKwl9DQorDQorCXN0ZDo6cGFpcjxTdHJpbmdNYXA6Oml0ZXJhdG9yLCBib29sPiByZXQgPQ0KKwkJbV92YWx1ZXMuaW5zZXJ0KFN0cmluZ01hcDo6dmFsdWVfdHlwZShrZXksIHZhbHVlKSk7DQorCWlmIChyZXQuc2Vjb25kKQ0KKwkJbV9rZXlzLnB1c2hfYmFjayhrZXkpOw0KKwllbHNlDQorCQlyZXQuZmlyc3QtPnNlY29uZCA9IHZhbHVlOw0KKw0KKwlOZXR3b3JrVGFibGU6OkdldFRhYmxlKGtUYWJsZU5hbWUpLT5QdXRTdHJpbmcoa2V5LCB2YWx1ZSk7DQorfQ0KKw0KKy8qKg0KKyAqIFRoZSBpbnRlcm5hbCBtZXRob2QgdG8gcmVhZCBmcm9tIGEgZmlsZS4NCisgKiBUaGlzIHdpbGwgYmUgY2FsbGVkIGluIGl0cyBvd24gdGhyZWFkIHdoZW4gdGhlIHByZWZlcmVuY2VzIHNpbmdsZXRvbiBpcw0KKyAqIGZpcnN0IGNyZWF0ZWQuDQorICovDQordm9pZCBQcmVmZXJlbmNlczo6UmVhZFRhc2tSdW4oKQ0KK3sNCisJU3luY2hyb25pemVkIHN5bmMobV90YWJsZUxvY2spOw0KKwlzZW1HaXZlKG1fZmlsZU9wU3RhcnRlZCk7DQorDQorCXN0ZDo6c3RyaW5nIGNvbW1lbnQ7DQorDQorCUZJTEUgKmZpbGUgPSBOVUxMOw0KKwlmaWxlID0gZm9wZW4oa0ZpbGVOYW1lLCAiciIpOw0KKw0KKwlpZiAoZmlsZSAhPSBOVUxMKQ0KKwl7DQorCQlzdGQ6OnN0cmluZyBidWZmZXI7DQorCQl3aGlsZSAodHJ1ZSkNCisJCXsNCisJCQljaGFyIHZhbHVlOw0KKwkJCWRvDQorCQkJew0KKwkJCQl2YWx1ZSA9IGZnZXRjKGZpbGUpOw0KKwkJCX0gd2hpbGUgKHZhbHVlID09ICcgJyB8fCB2YWx1ZSA9PSAnXHQnKTsNCisNCisJCQlpZiAodmFsdWUgPT0gJ1xuJyB8fCB2YWx1ZSA9PSAnOycpDQorCQkJew0KKwkJCQlpZiAodmFsdWUgPT0gJ1xuJykNCisJCQkJew0KKwkJCQkJY29tbWVudCArPSAiXG4iOw0KKwkJCQl9DQorCQkJCWVsc2UNCisJCQkJew0KKwkJCQkJYnVmZmVyLmNsZWFyKCk7DQorCQkJCQlmb3IgKDsgdmFsdWUgIT0gJ1xuJyAmJiAhZmVvZihmaWxlKTsgdmFsdWUgPSBmZ2V0YyhmaWxlKSkNCisJCQkJCQlidWZmZXIgKz0gdmFsdWU7DQorCQkJCQlidWZmZXIgKz0gJ1xuJzsNCisJCQkJCWNvbW1lbnQgKz0gYnVmZmVyOw0KKwkJCQl9DQorCQkJfQ0KKwkJCWVsc2UgaWYgKHZhbHVlID09ICdbJykNCisJCQl7DQorCQkJCS8vIEZpbmQgdGhlIGVuZCBvZiB0aGUgc2VjdGlvbiBhbmQgdGhlIG5ldyBsaW5lIGFmdGVyIGl0IGFuZCB0aHJvdyBpdCBhd2F5DQorCQkJCWZvciAoOyB2YWx1ZSAhPSAnXScgJiYgIWZlb2YoZmlsZSk7IHZhbHVlID0gZmdldGMoZmlsZSkpOw0KKwkJCQlmb3IgKDsgdmFsdWUgIT0gJ1xuJyAmJiAhZmVvZihmaWxlKTsgdmFsdWUgPSBmZ2V0YyhmaWxlKSk7DQorCQkJfQ0KKwkJCWVsc2UNCisJCQl7DQorCQkJCWJ1ZmZlci5jbGVhcigpOw0KKwkJCQlmb3IgKDsgdmFsdWUgIT0gJz0nICYmICFmZW9mKGZpbGUpOyApDQorCQkJCXsNCisJCQkJCWJ1ZmZlciArPSB2YWx1ZTsNCisJCQkJCWRvDQorCQkJCQl7DQorCQkJCQkJdmFsdWUgPSBmZ2V0YyhmaWxlKTsNCisJCQkJCX0gd2hpbGUgKHZhbHVlID09ICcgJyB8fCB2YWx1ZSA9PSAnXHQnKTsNCisJCQkJfQ0KKwkJCQlzdGQ6OnN0cmluZyBuYW1lID0gYnVmZmVyOw0KKwkJCQlidWZmZXIuY2xlYXIoKTsNCisNCisJCQkJYm9vbCBzaG91bGRCcmVhayA9IGZhbHNlOw0KKw0KKwkJCQlkbw0KKwkJCQl7DQorCQkJCQl2YWx1ZSA9IGZnZXRjKGZpbGUpOw0KKwkJCQl9IHdoaWxlICh2YWx1ZSA9PSAnICcgfHwgdmFsdWUgPT0gJ1x0Jyk7DQorDQorCQkJCWlmICh2YWx1ZSA9PSAnIicpDQorCQkJCXsNCisJCQkJCWZvciAodmFsdWUgPSBmZ2V0YyhmaWxlKTsgdmFsdWUgIT0gJyInICYmICFmZW9mKGZpbGUpOyB2YWx1ZSA9IGZnZXRjKGZpbGUpKQ0KKwkJCQkJCWJ1ZmZlciArPSB2YWx1ZTsNCisNCisJCQkJCS8vIENsZWFyIHRoZSBsaW5lDQorCQkJCQl3aGlsZSAoZmdldGMoZmlsZSkgIT0gJ1xuJyAmJiAhZmVvZihmaWxlKSk7DQorCQkJCX0NCisJCQkJZWxzZQ0KKwkJCQl7DQorCQkJCQlmb3IgKDsgdmFsdWUgIT0gJ1xuJyAmJiAhZmVvZihmaWxlKTspDQorCQkJCQl7DQorCQkJCQkJYnVmZmVyICs9IHZhbHVlOw0KKwkJCQkJCWRvDQorCQkJCQkJew0KKwkJCQkJCQl2YWx1ZSA9IGZnZXRjKGZpbGUpOw0KKwkJCQkJCX0gd2hpbGUgKHZhbHVlID09ICcgJyB8fCB2YWx1ZSA9PSAnXHQnKTsNCisJCQkJCX0NCisJCQkJCWlmIChmZW9mKGZpbGUpKQ0KKwkJCQkJCXNob3VsZEJyZWFrID0gdHJ1ZTsNCisJCQkJfQ0KKw0KKwkJCQlzdGQ6OnN0cmluZyB2YWx1ZSA9IGJ1ZmZlcjsNCisNCisJCQkJaWYgKCFuYW1lLmVtcHR5KCkgJiYgIXZhbHVlLmVtcHR5KCkpDQorCQkJCXsNCisJCQkJCW1fa2V5cy5wdXNoX2JhY2sobmFtZSk7DQorCQkJCQltX3ZhbHVlcy5pbnNlcnQoc3RkOjpwYWlyPHN0ZDo6c3RyaW5nLCBzdGQ6OnN0cmluZz4obmFtZSwgdmFsdWUpKTsNCisJCQkJCS8vTmV0d29ya1RhYmxlOjpHZXRUYWJsZShrVGFibGVOYW1lKS0+UHV0U3RyaW5nKG5hbWUsIHZhbHVlKTsNCisNCisJCQkJCWlmICghY29tbWVudC5lbXB0eSgpKQ0KKwkJCQkJew0KKwkJCQkJCW1fY29tbWVudHMuaW5zZXJ0KHN0ZDo6cGFpcjxzdGQ6OnN0cmluZywgc3RkOjpzdHJpbmc+KG5hbWUsIGNvbW1lbnQpKTsNCisJCQkJCQljb21tZW50LmNsZWFyKCk7DQorCQkJCQl9DQorCQkJCX0NCisNCisJCQkJaWYgKHNob3VsZEJyZWFrKQ0KKwkJCQkJYnJlYWs7DQorCQkJfQ0KKwkJfQ0KKwl9DQorCWVsc2UNCisJew0KKwkJd3BpX3NldFdQSUVycm9yV2l0aENvbnRleHQoTm9BdmFpbGFibGVSZXNvdXJjZXMsICJGYWlsZWQgdG8gb3BlbiBwcmVmZXJlbmNlcyBmaWxlLiIpOw0KKwl9DQorDQorCWlmIChmaWxlICE9IE5VTEwpDQorCQlmY2xvc2UoZmlsZSk7DQorDQorCWlmICghY29tbWVudC5lbXB0eSgpKQ0KKwkJbV9lbmRDb21tZW50ID0gY29tbWVudDsNCit9DQorDQorLyoqDQorICogSW50ZXJuYWwgbWV0aG9kIHRoYXQgYWN0dWFsbHkgd3JpdGVzIHRoZSB0YWJsZSB0byBhIGZpbGUuDQorICogVGhpcyBpcyBjYWxsZWQgaW4gaXRzIG93biB0aHJlYWQgd2hlbiB7QGxpbmsgUHJlZmVyZW5jZXMjU2F2ZSgpIFNhdmUoKX0gaXMgY2FsbGVkLg0KKyAqLw0KK3ZvaWQgUHJlZmVyZW5jZXM6OldyaXRlVGFza1J1bigpDQorew0KKwlTeW5jaHJvbml6ZWQgc3luYyhtX3RhYmxlTG9jayk7DQorCXNlbUdpdmUobV9maWxlT3BTdGFydGVkKTsNCisNCisJRklMRSAqZmlsZSA9IE5VTEw7DQorCVByaXZfU2V0V3JpdGVGaWxlQWxsb3dlZCgxKTsNCisJZmlsZSA9IGZvcGVuKGtGaWxlTmFtZSwgInciKTsNCisNCisJZnB1dHMoIltQcmVmZXJlbmNlc11cbiIsIGZpbGUpOw0KKwlzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz46Oml0ZXJhdG9yIGl0ID0gbV9rZXlzLmJlZ2luKCk7DQorCWZvciAoOyBpdCAhPSBtX2tleXMuZW5kKCk7IGl0KyspDQorCXsNCisJCXN0ZDo6c3RyaW5nIGtleSA9ICppdDsNCisJCXN0ZDo6c3RyaW5nIHZhbHVlID0gbV92YWx1ZXNba2V5XTsNCisJCXN0ZDo6c3RyaW5nIGNvbW1lbnQgPSBtX2NvbW1lbnRzW2tleV07DQorDQorCQlpZiAoIWNvbW1lbnQuZW1wdHkoKSkNCisJCQlmcHV0cyhjb21tZW50LmNfc3RyKCksIGZpbGUpOw0KKw0KKwkJZnB1dHMoa2V5LmNfc3RyKCksIGZpbGUpOw0KKwkJZnB1dHMoa1ZhbHVlUHJlZml4LCBmaWxlKTsNCisJCWZwdXRzKHZhbHVlLmNfc3RyKCksIGZpbGUpOw0KKwkJZnB1dHMoa1ZhbHVlU3VmZml4LCBmaWxlKTsNCisJfQ0KKw0KKwlpZiAoIW1fZW5kQ29tbWVudC5lbXB0eSgpKQ0KKwkJZnB1dHMobV9lbmRDb21tZW50LmNfc3RyKCksIGZpbGUpOw0KKw0KKwlpZiAoZmlsZSAhPSBOVUxMKQ0KKwkJZmNsb3NlKGZpbGUpOw0KKw0KKwlOZXR3b3JrVGFibGU6OkdldFRhYmxlKGtUYWJsZU5hbWUpLT5QdXRCb29sZWFuKGtTYXZlRmllbGQsIGZhbHNlKTsNCit9DQorDQorc3RhdGljIGJvb2wgaXNLZXlBY2NlcHRhYmxlKGNvbnN0IHN0ZDo6c3RyaW5nJiB2YWx1ZSkgew0KKyAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHZhbHVlLmxlbmd0aCgpOyBpKyspIHsNCisgICAgICAgIGNoYXIgbGV0dGVyID0gdmFsdWUuYXQoaSk7DQorICAgICAgICBzd2l0Y2ggKGxldHRlcikgew0KKyAgICAgICAgICAgIGNhc2UgJz0nOg0KKyAgICAgICAgICAgIGNhc2UgJ1xuJzoNCisgICAgICAgICAgICBjYXNlICdccic6DQorICAgICAgICAgICAgY2FzZSAnICc6DQorICAgICAgICAgICAgY2FzZSAnXHQnOg0KKyAgICAgICAgICAgIAlyZXR1cm4gZmFsc2U7DQorICAgICAgICB9DQorICAgIH0NCisgICAgcmV0dXJuIHRydWU7DQorfQ0KK3ZvaWQgUHJlZmVyZW5jZXM6OlZhbHVlQ2hhbmdlZChJVGFibGUqIHRhYmxlLCBjb25zdCBzdGQ6OnN0cmluZyYga2V5LCBFbnRyeVZhbHVlIHZhbHVlLCBib29sIGlzTmV3KQ0KK3sNCisJaWYgKGtleT09a1NhdmVGaWVsZCkNCisJew0KKwkJaWYgKHRhYmxlLT5HZXRCb29sZWFuKGtTYXZlRmllbGQsIGZhbHNlKSkNCisJCQlTYXZlKCk7DQorCX0NCisJZWxzZQ0KKwl7DQorCQlTeW5jaHJvbml6ZWQgc3luYyhtX3RhYmxlTG9jayk7DQorDQorCQlpZiAoIWlzS2V5QWNjZXB0YWJsZShrZXkpIHx8IHRhYmxlLT5HZXRTdHJpbmcoa2V5LCAiIikuZmluZCgnIicpIT1zdGQ6OnN0cmluZzo6bnBvcykNCisJCXsNCisJCQlpZihtX3ZhbHVlcy5maW5kKGtleSkgIT0gbV92YWx1ZXMuZW5kKCkpew0KKwkJCQltX3ZhbHVlcy5lcmFzZShrZXkpOw0KKwkJCQlzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz46Oml0ZXJhdG9yIGl0ID0gbV9rZXlzLmJlZ2luKCk7DQorCQkJCWZvciAoOyBpdCAhPSBtX2tleXMuZW5kKCk7IGl0KyspDQorCQkJCXsNCisJCQkJCWlmIChrZXk9PSppdCkNCisJCQkJCXsNCisJCQkJCQltX2tleXMuZXJhc2UoaXQpOw0KKwkJCQkJCWJyZWFrOw0KKwkJCQkJfQ0KKwkJCQl9DQorCQkJCXRhYmxlLT5QdXRTdHJpbmcoa2V5LCAiXCIiKTsNCisJCQl9DQorCQl9DQorCQllbHNlDQorCQl7DQorCQkJc3RkOjpwYWlyPFN0cmluZ01hcDo6aXRlcmF0b3IsIGJvb2w+IHJldCA9DQorCQkJCW1fdmFsdWVzLmluc2VydChTdHJpbmdNYXA6OnZhbHVlX3R5cGUoa2V5LCB0YWJsZS0+R2V0U3RyaW5nKGtleSwgIiIpKSk7DQorCQkJaWYgKHJldC5zZWNvbmQpDQorCQkJCW1fa2V5cy5wdXNoX2JhY2soa2V5KTsNCisJCQllbHNlDQorCQkJCXJldC5maXJzdC0+c2Vjb25kID0gdGFibGUtPkdldFN0cmluZyhrZXksICIiKTsNCisJCX0NCisJfQ0KK30NCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9QcmVmZXJlbmNlcy5oIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvUHJlZmVyZW5jZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDE5NjdmCi0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvUHJlZmVyZW5jZXMuaApAQCAtMCwwICsxLDk0IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy8qIENvcHlyaWdodCAoYykgRklSU1QgMjAxMS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4JCQkJCQkJICAqLw0KKy8qIE9wZW4gU291cmNlIFNvZnR3YXJlIC0gbWF5IGJlIG1vZGlmaWVkIGFuZCBzaGFyZWQgYnkgRlJDIHRlYW1zLiBUaGUgY29kZSAgICovDQorLyogbXVzdCBiZSBhY2NvbXBhbmllZCBieSB0aGUgRklSU1QgQlNEIGxpY2Vuc2UgZmlsZSBpbiAkKFdJTkRfQkFTRSkvV1BJTGliLiAgKi8NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKyNpZm5kZWYgX19QUkVGRVJFTkNFU19IX18NCisjZGVmaW5lIF9fUFJFRkVSRU5DRVNfSF9fDQorDQorI2luY2x1ZGUgIkVycm9yQmFzZS5oIg0KKyNpbmNsdWRlICJUYXNrLmgiDQorI2luY2x1ZGUgPG1hcD4NCisjaW5jbHVkZSA8c2VtTGliLmg+DQorI2luY2x1ZGUgPHN0cmluZz4NCisjaW5jbHVkZSA8dmVjdG9yPg0KKyNpbmNsdWRlICJ0YWJsZXMvSVRhYmxlTGlzdGVuZXIuaCINCisjaW5jbHVkZSAibmV0d29ya3RhYmxlcy9OZXR3b3JrVGFibGUuaCINCisNCisvKioNCisgKiBUaGUgcHJlZmVyZW5jZXMgY2xhc3MgcHJvdmlkZXMgYSByZWxhdGl2ZWx5IHNpbXBsZSB3YXkgdG8gc2F2ZSBpbXBvcnRhbnQgdmFsdWVzIHRvDQorICogdGhlIGNSSU8gdG8gYWNjZXNzIHRoZSBuZXh0IHRpbWUgdGhlIGNSSU8gaXMgYm9vdGVkLg0KKyAqDQorICogPHA+VGhpcyBjbGFzcyBsb2FkcyBhbmQgc2F2ZXMgZnJvbSBhIGZpbGUNCisgKiBpbnNpZGUgdGhlIGNSSU8uICBUaGUgdXNlciBjYW4gbm90IGFjY2VzcyB0aGUgZmlsZSBkaXJlY3RseSwgYnV0IG1heSBtb2RpZnkgdmFsdWVzIGF0IHNwZWNpZmljDQorICogZmllbGRzIHdoaWNoIHdpbGwgdGhlbiBiZSBzYXZlZCB0byB0aGUgZmlsZSB3aGVuIHtAbGluayBQcmVmZXJlbmNlcyNTYXZlKCkgU2F2ZSgpfSBpcyBjYWxsZWQuPC9wPg0KKyAqDQorICogPHA+VGhpcyBjbGFzcyBpcyB0aHJlYWQgc2FmZS48L3A+DQorICoNCisgKiA8cD5UaGlzIHdpbGwgYWxzbyBpbnRlcmFjdCB3aXRoIHtAbGluayBOZXR3b3JrVGFibGV9IGJ5IGNyZWF0aW5nIGEgdGFibGUgY2FsbGVkICJQcmVmZXJlbmNlcyIgd2l0aCBhbGwgdGhlDQorICoga2V5LXZhbHVlIHBhaXJzLiAgVG8gc2F2ZSB1c2luZyB7QGxpbmsgTmV0d29ya1RhYmxlfSwgc2ltcGx5IHNldCB0aGUgYm9vbGVhbiBhdCBwb3NpdGlvbiAiflMgQSBWIEV+IiB0byB0cnVlLg0KKyAqIEFsc28sIGlmIHRoZSB2YWx1ZSBvZiBhbnkgdmFyaWFibGUgaXMgIiBpbiB0aGUge0BsaW5rIE5ldHdvcmtUYWJsZX0sIHRoZW4gdGhhdCByZXByZXNlbnRzIG5vbi1leGlzdGVuY2UgaW4gdGhlDQorICoge0BsaW5rIFByZWZlcmVuY2VzfSB0YWJsZTwvcD4NCisgKi8NCitjbGFzcyBQcmVmZXJlbmNlcyA6IHB1YmxpYyBFcnJvckJhc2UsIHB1YmxpYyBJVGFibGVMaXN0ZW5lcg0KK3sNCitwdWJsaWM6DQorCXN0YXRpYyBQcmVmZXJlbmNlcyAqR2V0SW5zdGFuY2UoKTsNCisNCisJc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IEdldEtleXMoKTsNCisJc3RkOjpzdHJpbmcgR2V0U3RyaW5nKGNvbnN0IGNoYXIgKmtleSwgY29uc3QgY2hhciAqZGVmYXVsdFZhbHVlID0gIiIpOw0KKwlpbnQgR2V0U3RyaW5nKGNvbnN0IGNoYXIgKmtleSwgY2hhciAqdmFsdWUsIGludCB2YWx1ZVNpemUsIGNvbnN0IGNoYXIgKmRlZmF1bHRWYWx1ZSA9ICIiKTsNCisJaW50IEdldEludChjb25zdCBjaGFyICprZXksIGludCBkZWZhdWx0VmFsdWUgPSAwKTsNCisJZG91YmxlIEdldERvdWJsZShjb25zdCBjaGFyICprZXksIGRvdWJsZSBkZWZhdWx0VmFsdWUgPSAwLjApOw0KKwlmbG9hdCBHZXRGbG9hdChjb25zdCBjaGFyICprZXksIGZsb2F0IGRlZmF1bHRWYWx1ZSA9IDAuMCk7DQorCWJvb2wgR2V0Qm9vbGVhbihjb25zdCBjaGFyICprZXksIGJvb2wgZGVmYXVsdFZhbHVlID0gZmFsc2UpOw0KKwlJTlQ2NCBHZXRMb25nKGNvbnN0IGNoYXIgKmtleSwgSU5UNjQgZGVmYXVsdFZhbHVlID0gMCk7DQorCXZvaWQgUHV0U3RyaW5nKGNvbnN0IGNoYXIgKmtleSwgY29uc3QgY2hhciAqdmFsdWUpOw0KKwl2b2lkIFB1dEludChjb25zdCBjaGFyICprZXksIGludCB2YWx1ZSk7DQorCXZvaWQgUHV0RG91YmxlKGNvbnN0IGNoYXIgKmtleSwgZG91YmxlIHZhbHVlKTsNCisJdm9pZCBQdXRGbG9hdChjb25zdCBjaGFyICprZXksIGZsb2F0IHZhbHVlKTsNCisJdm9pZCBQdXRCb29sZWFuKGNvbnN0IGNoYXIgKmtleSwgYm9vbCB2YWx1ZSk7DQorCXZvaWQgUHV0TG9uZyhjb25zdCBjaGFyICprZXksIElOVDY0IHZhbHVlKTsNCisJdm9pZCBTYXZlKCk7DQorCWJvb2wgQ29udGFpbnNLZXkoY29uc3QgY2hhciAqa2V5KTsNCisJdm9pZCBSZW1vdmUoY29uc3QgY2hhciAqa2V5KTsNCisJDQorCXZvaWQgVmFsdWVDaGFuZ2VkKElUYWJsZSogc291cmNlLCBjb25zdCBzdGQ6OnN0cmluZyYga2V5LCBFbnRyeVZhbHVlIHZhbHVlLCBib29sIGlzTmV3KTsNCisNCitwcm90ZWN0ZWQ6DQorCVByZWZlcmVuY2VzKCk7DQorCXZpcnR1YWwgflByZWZlcmVuY2VzKCk7DQorDQorcHJpdmF0ZToNCisJc3RkOjpzdHJpbmcgR2V0KGNvbnN0IGNoYXIgKmtleSk7DQorCXZvaWQgUHV0KGNvbnN0IGNoYXIgKmtleSwgc3RkOjpzdHJpbmcgdmFsdWUpOw0KKw0KKwl2b2lkIFJlYWRUYXNrUnVuKCk7DQorCXZvaWQgV3JpdGVUYXNrUnVuKCk7DQorDQorCXN0YXRpYyBpbnQgSW5pdFJlYWRUYXNrKFByZWZlcmVuY2VzICpvYmopIHtvYmotPlJlYWRUYXNrUnVuKCk7cmV0dXJuIDA7fQ0KKwlzdGF0aWMgaW50IEluaXRXcml0ZVRhc2soUHJlZmVyZW5jZXMgKm9iaikge29iai0+V3JpdGVUYXNrUnVuKCk7cmV0dXJuIDA7fQ0KKw0KKwlzdGF0aWMgUHJlZmVyZW5jZXMgKl9pbnN0YW5jZTsNCisNCisJLyoqIFRoZSBzZW1hcGhvcmUgZm9yIGFjY2Vzc2luZyB0aGUgZmlsZSAqLw0KKwlTRU1fSUQgbV9maWxlTG9jazsNCisJLyoqIFRoZSBzZW1hcGhvcmUgZm9yIGJlZ2lubmluZyByZWFkcyBhbmQgd3JpdGVzIHRvIHRoZSBmaWxlICovDQorCVNFTV9JRCBtX2ZpbGVPcFN0YXJ0ZWQ7DQorCS8qKiBUaGUgc2VtYXBob3JlIGZvciByZWFkaW5nIGZyb20gdGhlIHRhYmxlICovDQorCVNFTV9JRCBtX3RhYmxlTG9jazsNCisJdHlwZWRlZiBzdGQ6Om1hcDxzdGQ6OnN0cmluZywgc3RkOjpzdHJpbmc+IFN0cmluZ01hcDsNCisJLyoqIFRoZSBhY3R1YWwgdmFsdWVzIChTdHJpbmctPlN0cmluZykgKi8NCisJU3RyaW5nTWFwIG1fdmFsdWVzOw0KKwkvKiogVGhlIGtleXMgaW4gdGhlIG9yZGVyIHRoZXkgd2VyZSByZWFkIGZyb20gdGhlIGZpbGUgKi8NCisJc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IG1fa2V5czsNCisJLyoqIFRoZSBjb21tZW50cyB0aGF0IHdlcmUgaW4gdGhlIGZpbGUgc29ydGVkIGJ5IHdoaWNoIGtleSB0aGV5IGFwcGVhcmVkIG92ZXIgKFN0cmluZy0+Q29tbWVudCkgKi8NCisJU3RyaW5nTWFwIG1fY29tbWVudHM7DQorCS8qKiBUaGUgY29tbWVudCBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlICovDQorCXN0ZDo6c3RyaW5nIG1fZW5kQ29tbWVudDsNCisJVGFzayBtX3JlYWRUYXNrOw0KKwlUYXNrIG1fd3JpdGVUYXNrOw0KK307DQorDQorI2VuZGlmDQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvUmVsYXkuY3BwIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvUmVsYXkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwMmNkMzEKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9SZWxheS5jcHAKQEAgLTAsMCArMSwyNjcgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorLyogQ29weXJpZ2h0IChjKSBGSVJTVCAyMDA4LiBBbGwgUmlnaHRzIFJlc2VydmVkLgkJCQkJCQkgICovDQorLyogT3BlbiBTb3VyY2UgU29mdHdhcmUgLSBtYXkgYmUgbW9kaWZpZWQgYW5kIHNoYXJlZCBieSBGUkMgdGVhbXMuIFRoZSBjb2RlICAgKi8NCisvKiBtdXN0IGJlIGFjY29tcGFuaWVkIGJ5IHRoZSBGSVJTVCBCU0QgbGljZW5zZSBmaWxlIGluICQoV0lORF9CQVNFKS9XUElMaWIuICAqLw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorI2luY2x1ZGUgIlJlbGF5LmgiDQorDQorI2luY2x1ZGUgIkRpZ2l0YWxNb2R1bGUuaCINCisjaW5jbHVkZSAiTmV0d29ya0NvbW11bmljYXRpb24vVXNhZ2VSZXBvcnRpbmcuaCINCisjaW5jbHVkZSAiUmVzb3VyY2UuaCINCisjaW5jbHVkZSAiV1BJRXJyb3JzLmgiDQorI2luY2x1ZGUgIkxpdmVXaW5kb3cvTGl2ZVdpbmRvdy5oIg0KKw0KKy8vIEFsbG9jYXRlIGVhY2ggZGlyZWN0aW9uIHNlcGFyYXRlbHkuDQorc3RhdGljIFJlc291cmNlICpyZWxheUNoYW5uZWxzID0gTlVMTDsNCisNCisvKioNCisgKiBDb21tb24gcmVsYXkgaW50aXRpYWxpemF0aW9uIG1ldGhvZGUuDQorICogVGhpcyBjb2RlIGlzIGNvbW1vbiB0byBhbGwgUmVsYXkgY29uc3RydWN0b3JzIGFuZCBpbml0aWFsaXplcyB0aGUgcmVsYXkgYW5kIHJlc2VydmVzDQorICogYWxsIHJlc291cmNlcyB0aGF0IG5lZWQgdG8gYmUgbG9ja2VkLiBJbml0aWFsbHkgdGhlIHJlbGF5IGlzIHNldCB0byBib3RoIGxpbmVzIGF0IDB2Lg0KKyAqIEBwYXJhbSBzbG90IFRoZSBtb2R1bGUgc2xvdCBudW1iZXIgdGhpcyByZWxheSBpcyBjb25uZWN0ZWQgdG8uDQorICogDQorICogQHBhcmFtIG1vZHVsZU51bWJlciBUaGUgZGlnaXRhbCBtb2R1bGUgdGhpcyByZWxheSBpcyBjb25uZWN0ZWQgdG8gKDEgb3IgMikuDQorICovDQordm9pZCBSZWxheTo6SW5pdFJlbGF5IChVSU5UOCBtb2R1bGVOdW1iZXIpDQorew0KKwljaGFyIGJ1Zls2NF07DQorCVJlc291cmNlOjpDcmVhdGVSZXNvdXJjZU9iamVjdCgmcmVsYXlDaGFubmVscywgdERJTzo6a051bVN5c3RlbXMgKiBrUmVsYXlDaGFubmVscyAqIDIpOw0KKwlpZiAoIVNlbnNvckJhc2U6OkNoZWNrUmVsYXlNb2R1bGUobW9kdWxlTnVtYmVyKSkNCisJew0KKwkJc25wcmludGYoYnVmLCA2NCwgIkRpZ2l0YWwgTW9kdWxlICVkIiwgbW9kdWxlTnVtYmVyKTsNCisJCXdwaV9zZXRXUElFcnJvcldpdGhDb250ZXh0KE1vZHVsZUluZGV4T3V0T2ZSYW5nZSwgYnVmKTsNCisJCXJldHVybjsNCisJfQ0KKwlpZiAoIVNlbnNvckJhc2U6OkNoZWNrUmVsYXlDaGFubmVsKG1fY2hhbm5lbCkpDQorCXsNCisJCXNucHJpbnRmKGJ1ZiwgNjQsICJSZWxheSBDaGFubmVsICVkIiwgbV9jaGFubmVsKTsNCisJCXdwaV9zZXRXUElFcnJvcldpdGhDb250ZXh0KENoYW5uZWxJbmRleE91dE9mUmFuZ2UsIGJ1Zik7DQorCQlyZXR1cm47DQorCX0NCisNCisJaWYgKG1fZGlyZWN0aW9uID09IGtCb3RoRGlyZWN0aW9ucyB8fCBtX2RpcmVjdGlvbiA9PSBrRm9yd2FyZE9ubHkpDQorCXsNCisJCXNucHJpbnRmKGJ1ZiwgNjQsICJGb3J3YXJkIFJlbGF5ICVkIChNb2R1bGU6ICVkKSIsIG1fY2hhbm5lbCwgbW9kdWxlTnVtYmVyKTsNCisJCWlmIChyZWxheUNoYW5uZWxzLT5BbGxvY2F0ZSgoKG1vZHVsZU51bWJlciAtIDEpICoga1JlbGF5Q2hhbm5lbHMgKyBtX2NoYW5uZWwgLSAxKSAqIDIsIGJ1ZikgPT0gfjB1bCkNCisJCXsNCisJCQlDbG9uZUVycm9yKHJlbGF5Q2hhbm5lbHMpOw0KKwkJCXJldHVybjsNCisJCX0NCisNCisJCW5Vc2FnZVJlcG9ydGluZzo6cmVwb3J0KG5Vc2FnZVJlcG9ydGluZzo6a1Jlc291cmNlVHlwZV9SZWxheSwgbV9jaGFubmVsLCBtb2R1bGVOdW1iZXIgLSAxKTsNCisJfQ0KKwlpZiAobV9kaXJlY3Rpb24gPT0ga0JvdGhEaXJlY3Rpb25zIHx8IG1fZGlyZWN0aW9uID09IGtSZXZlcnNlT25seSkNCisJew0KKwkJc25wcmludGYoYnVmLCA2NCwgIlJldmVyc2UgUmVsYXkgJWQgKE1vZHVsZTogJWQpIiwgbV9jaGFubmVsLCBtb2R1bGVOdW1iZXIpOw0KKwkJaWYgKHJlbGF5Q2hhbm5lbHMtPkFsbG9jYXRlKCgobW9kdWxlTnVtYmVyIC0gMSkgKiBrUmVsYXlDaGFubmVscyArIG1fY2hhbm5lbCAtIDEpICogMiArIDEsIGJ1ZikgPT0gfjB1bCkNCisJCXsNCisJCQlDbG9uZUVycm9yKHJlbGF5Q2hhbm5lbHMpOw0KKwkJCXJldHVybjsNCisJCX0NCisNCisJCW5Vc2FnZVJlcG9ydGluZzo6cmVwb3J0KG5Vc2FnZVJlcG9ydGluZzo6a1Jlc291cmNlVHlwZV9SZWxheSwgbV9jaGFubmVsICsgMTI4LCBtb2R1bGVOdW1iZXIgLSAxKTsNCisJfQ0KKwltX21vZHVsZSA9IERpZ2l0YWxNb2R1bGU6OkdldEluc3RhbmNlKG1vZHVsZU51bWJlcik7DQorCW1fbW9kdWxlLT5TZXRSZWxheUZvcndhcmQobV9jaGFubmVsLCBmYWxzZSk7DQorCW1fbW9kdWxlLT5TZXRSZWxheVJldmVyc2UobV9jaGFubmVsLCBmYWxzZSk7DQorCUxpdmVXaW5kb3c6OkdldEluc3RhbmNlKCktPkFkZEFjdHVhdG9yKCJSZWxheSIsIG1vZHVsZU51bWJlciwgbV9jaGFubmVsLCB0aGlzKTsNCit9DQorDQorLyoqDQorICogUmVsYXkgY29uc3RydWN0b3IgZ2l2ZW4gdGhlIG1vZHVsZSBhbmQgdGhlIGNoYW5uZWwuDQorICogDQorICogQHBhcmFtIG1vZHVsZU51bWJlciBUaGUgZGlnaXRhbCBtb2R1bGUgdGhpcyByZWxheSBpcyBjb25uZWN0ZWQgdG8gKDEgb3IgMikuDQorICogQHBhcmFtIGNoYW5uZWwgVGhlIGNoYW5uZWwgbnVtYmVyIHdpdGhpbiB0aGUgbW9kdWxlIGZvciB0aGlzIHJlbGF5Lg0KKyAqIEBwYXJhbSBkaXJlY3Rpb24gVGhlIGRpcmVjdGlvbiB0aGF0IHRoZSBSZWxheSBvYmplY3Qgd2lsbCBjb250cm9sLg0KKyAqLw0KK1JlbGF5OjpSZWxheShVSU5UOCBtb2R1bGVOdW1iZXIsIFVJTlQzMiBjaGFubmVsLCBSZWxheTo6RGlyZWN0aW9uIGRpcmVjdGlvbikNCisJOiBtX2NoYW5uZWwgKGNoYW5uZWwpDQorCSwgbV9kaXJlY3Rpb24gKGRpcmVjdGlvbikNCit7DQorCUluaXRSZWxheShtb2R1bGVOdW1iZXIpOw0KK30NCisNCisvKioNCisgKiBSZWxheSBjb25zdHJ1Y3RvciBnaXZlbiBhIGNoYW5uZWwgb25seSB3aGVyZSB0aGUgZGVmYXVsdCBkaWdpdGFsIG1vZHVsZSBpcyB1c2VkLg0KKyAqIEBwYXJhbSBjaGFubmVsIFRoZSBjaGFubmVsIG51bWJlciB3aXRoaW4gdGhlIGRlZmF1bHQgbW9kdWxlIGZvciB0aGlzIHJlbGF5Lg0KKyAqIEBwYXJhbSBkaXJlY3Rpb24gVGhlIGRpcmVjdGlvbiB0aGF0IHRoZSBSZWxheSBvYmplY3Qgd2lsbCBjb250cm9sLg0KKyAqLw0KK1JlbGF5OjpSZWxheShVSU5UMzIgY2hhbm5lbCwgUmVsYXk6OkRpcmVjdGlvbiBkaXJlY3Rpb24pDQorCTogbV9jaGFubmVsIChjaGFubmVsKQ0KKwksIG1fZGlyZWN0aW9uIChkaXJlY3Rpb24pDQorew0KKwlJbml0UmVsYXkoR2V0RGVmYXVsdERpZ2l0YWxNb2R1bGUoKSk7DQorfQ0KKw0KKy8qKg0KKyAqIEZyZWUgdGhlIHJlc291cmNlIGFzc29jaWF0ZWQgd2l0aCBhIHJlbGF5Lg0KKyAqIFRoZSByZWxheSBjaGFubmVscyBhcmUgc2V0IHRvIGZyZWUgYW5kIHRoZSByZWxheSBvdXRwdXQgaXMgdHVybmVkIG9mZi4NCisgKi8NCitSZWxheTo6flJlbGF5KCkNCit7DQorCW1fbW9kdWxlLT5TZXRSZWxheUZvcndhcmQobV9jaGFubmVsLCBmYWxzZSk7DQorCW1fbW9kdWxlLT5TZXRSZWxheVJldmVyc2UobV9jaGFubmVsLCBmYWxzZSk7DQorDQorCWlmIChtX2RpcmVjdGlvbiA9PSBrQm90aERpcmVjdGlvbnMgfHwgbV9kaXJlY3Rpb24gPT0ga0ZvcndhcmRPbmx5KQ0KKwl7DQorCQlyZWxheUNoYW5uZWxzLT5GcmVlKCgobV9tb2R1bGUtPkdldE51bWJlcigpIC0gMSkgKiBrUmVsYXlDaGFubmVscyArIG1fY2hhbm5lbCAtIDEpICogMik7DQorCX0NCisJaWYgKG1fZGlyZWN0aW9uID09IGtCb3RoRGlyZWN0aW9ucyB8fCBtX2RpcmVjdGlvbiA9PSBrUmV2ZXJzZU9ubHkpDQorCXsNCisJCXJlbGF5Q2hhbm5lbHMtPkZyZWUoKChtX21vZHVsZS0+R2V0TnVtYmVyKCkgLSAxKSAqIGtSZWxheUNoYW5uZWxzICsgbV9jaGFubmVsIC0gMSkgKiAyICsgMSk7DQorCX0NCit9DQorDQorLyoqDQorICogU2V0IHRoZSByZWxheSBzdGF0ZS4NCisgKiANCisgKiBWYWxpZCB2YWx1ZXMgZGVwZW5kIG9uIHdoaWNoIGRpcmVjdGlvbnMgb2YgdGhlIHJlbGF5IGFyZSBjb250cm9sbGVkIGJ5IHRoZSBvYmplY3QuDQorICogDQorICogV2hlbiBzZXQgdG8ga0JvdGhEaXJlY3Rpb25zLCB0aGUgcmVsYXkgY2FuIGJlIGFueSBvZiB0aGUgZm91ciBzdGF0ZXM6DQorICogICAgMHYtMHYsIDB2LTEydiwgMTJ2LTB2LCAxMnYtMTJ2DQorICogDQorICogV2hlbiBzZXQgdG8ga0ZvcndhcmRPbmx5IG9yIGtSZXZlcnNlT25seSwgeW91IGNhbiBzcGVjaWZ5IHRoZSBjb25zdGFudCBmb3IgdGhlDQorICogICAgZGlyZWN0aW9uIG9yIHlvdSBjYW4gc2ltcGx5IHNwZWNpZnkga09mZiBhbmQga09uLiAgVXNpbmcgb25seSBrT2ZmIGFuZCBrT24gaXMNCisgKiAgICByZWNvbW1lbmRlZC4NCisgKiANCisgKiBAcGFyYW0gdmFsdWUgVGhlIHN0YXRlIHRvIHNldCB0aGUgcmVsYXkuDQorICovDQordm9pZCBSZWxheTo6U2V0KFJlbGF5OjpWYWx1ZSB2YWx1ZSkNCit7DQorCWlmIChTdGF0dXNJc0ZhdGFsKCkpIHJldHVybjsNCisJc3dpdGNoICh2YWx1ZSkNCisJew0KKwljYXNlIGtPZmY6DQorCQlpZiAobV9kaXJlY3Rpb24gPT0ga0JvdGhEaXJlY3Rpb25zIHx8IG1fZGlyZWN0aW9uID09IGtGb3J3YXJkT25seSkNCisJCXsNCisJCQltX21vZHVsZS0+U2V0UmVsYXlGb3J3YXJkKG1fY2hhbm5lbCwgZmFsc2UpOw0KKwkJfQ0KKwkJaWYgKG1fZGlyZWN0aW9uID09IGtCb3RoRGlyZWN0aW9ucyB8fCBtX2RpcmVjdGlvbiA9PSBrUmV2ZXJzZU9ubHkpDQorCQl7DQorCQkJbV9tb2R1bGUtPlNldFJlbGF5UmV2ZXJzZShtX2NoYW5uZWwsIGZhbHNlKTsNCisJCX0NCisJCWJyZWFrOw0KKwljYXNlIGtPbjoNCisJCWlmIChtX2RpcmVjdGlvbiA9PSBrQm90aERpcmVjdGlvbnMgfHwgbV9kaXJlY3Rpb24gPT0ga0ZvcndhcmRPbmx5KQ0KKwkJew0KKwkJCW1fbW9kdWxlLT5TZXRSZWxheUZvcndhcmQobV9jaGFubmVsLCB0cnVlKTsNCisJCX0NCisJCWlmIChtX2RpcmVjdGlvbiA9PSBrQm90aERpcmVjdGlvbnMgfHwgbV9kaXJlY3Rpb24gPT0ga1JldmVyc2VPbmx5KQ0KKwkJew0KKwkJCW1fbW9kdWxlLT5TZXRSZWxheVJldmVyc2UobV9jaGFubmVsLCB0cnVlKTsNCisJCX0NCisJCWJyZWFrOw0KKwljYXNlIGtGb3J3YXJkOg0KKwkJaWYgKG1fZGlyZWN0aW9uID09IGtSZXZlcnNlT25seSkNCisJCXsNCisJCQl3cGlfc2V0V1BJRXJyb3IoSW5jb21wYXRpYmxlTW9kZSk7DQorCQkJYnJlYWs7DQorCQl9DQorCQlpZiAobV9kaXJlY3Rpb24gPT0ga0JvdGhEaXJlY3Rpb25zIHx8IG1fZGlyZWN0aW9uID09IGtGb3J3YXJkT25seSkNCisJCXsNCisJCQltX21vZHVsZS0+U2V0UmVsYXlGb3J3YXJkKG1fY2hhbm5lbCwgdHJ1ZSk7DQorCQl9DQorCQlpZiAobV9kaXJlY3Rpb24gPT0ga0JvdGhEaXJlY3Rpb25zKQ0KKwkJew0KKwkJCW1fbW9kdWxlLT5TZXRSZWxheVJldmVyc2UobV9jaGFubmVsLCBmYWxzZSk7DQorCQl9DQorCQlicmVhazsNCisJY2FzZSBrUmV2ZXJzZToNCisJCWlmIChtX2RpcmVjdGlvbiA9PSBrRm9yd2FyZE9ubHkpDQorCQl7DQorCQkJd3BpX3NldFdQSUVycm9yKEluY29tcGF0aWJsZU1vZGUpOw0KKwkJCWJyZWFrOw0KKwkJfQ0KKwkJaWYgKG1fZGlyZWN0aW9uID09IGtCb3RoRGlyZWN0aW9ucykNCisJCXsNCisJCQltX21vZHVsZS0+U2V0UmVsYXlGb3J3YXJkKG1fY2hhbm5lbCwgZmFsc2UpOw0KKwkJfQ0KKwkJaWYgKG1fZGlyZWN0aW9uID09IGtCb3RoRGlyZWN0aW9ucyB8fCBtX2RpcmVjdGlvbiA9PSBrUmV2ZXJzZU9ubHkpDQorCQl7DQorCQkJbV9tb2R1bGUtPlNldFJlbGF5UmV2ZXJzZShtX2NoYW5uZWwsIHRydWUpOw0KKwkJfQ0KKwkJYnJlYWs7DQorCX0NCit9DQorDQorLyoqDQorICogR2V0IHRoZSBSZWxheSBTdGF0ZQ0KKyAqIA0KKyAqIEdldHMgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIHJlbGF5Lg0KKyAqIA0KKyAqIFdoZW4gc2V0IHRvIGtGb3J3YXJkT25seSBvciBrUmV2ZXJzZU9ubHksIHZhbHVlIGlzIHJldHVybmVkIGFzIGtPbi9rT2ZmIG5vdA0KKyAqIGtGb3J3YXJkL2tSZXZlcnNlIChwZXIgdGhlIHJlY29tbWVuZGF0aW9uIGluIFNldCkNCisgKiANCisgKiBAcmV0dXJuIFRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSByZWxheSBhcyBhIFJlbGF5OjpWYWx1ZQ0KKyAqLw0KK1JlbGF5OjpWYWx1ZSBSZWxheTo6R2V0KCkgew0KKyAgIGlmKG1fbW9kdWxlLT5HZXRSZWxheUZvcndhcmQobV9jaGFubmVsKSkgew0KKwkgICBpZihtX21vZHVsZS0+R2V0UmVsYXlSZXZlcnNlKG1fY2hhbm5lbCkpIHsNCisJCSAgIHJldHVybiBrT247DQorCSAgIH0gZWxzZSB7DQorCQkgICBpZihtX2RpcmVjdGlvbiA9PSBrRm9yd2FyZE9ubHkpIHsNCisJCQkgICByZXR1cm4ga09uOw0KKwkJICAgfSBlbHNlIHsNCisJCSAgIHJldHVybiBrRm9yd2FyZDsNCisJCSAgIH0NCisJICAgfQ0KKyAgIH0gZWxzZSB7DQorCSAgIGlmKG1fbW9kdWxlLT5HZXRSZWxheVJldmVyc2UobV9jaGFubmVsKSkgew0KKwkJICAgaWYobV9kaXJlY3Rpb24gPT0ga1JldmVyc2VPbmx5KSB7DQorCQkJICAgcmV0dXJuIGtPbjsNCisJCSAgIH0gZWxzZSB7DQorCQkgICByZXR1cm4ga1JldmVyc2U7DQorCQkgICB9DQorCSAgIH0gZWxzZSB7DQorCQkgICByZXR1cm4ga09mZjsNCisJICAgfQ0KKyAgIH0gICAgICAgIA0KK30NCisNCit2b2lkIFJlbGF5OjpWYWx1ZUNoYW5nZWQoSVRhYmxlKiBzb3VyY2UsIGNvbnN0IHN0ZDo6c3RyaW5nJiBrZXksIEVudHJ5VmFsdWUgdmFsdWUsIGJvb2wgaXNOZXcpIHsNCisJc3RkOjpzdHJpbmcgKnZhbCA9IChzdGQ6OnN0cmluZyAqKSB2YWx1ZS5wdHI7DQorCWlmICgqdmFsID09ICJPZmYiKSBTZXQoa09mZik7DQorCWVsc2UgaWYgKCp2YWwgPT0gIkZvcndhcmQiKSBTZXQoa0ZvcndhcmQpOw0KKwllbHNlIGlmICgqdmFsID09ICJSZXZlcnNlIikgU2V0KGtSZXZlcnNlKTsNCit9DQorDQordm9pZCBSZWxheTo6VXBkYXRlVGFibGUoKSB7DQorCWlmKG1fdGFibGUgIT0gTlVMTCl7DQorCQlpZiAoR2V0KCkgPT0ga09uKSB7DQorCQkJbV90YWJsZS0+UHV0U3RyaW5nKCJWYWx1ZSIsICJPbiIpOw0KKwkJfQ0KKwkJZWxzZSBpZiAoR2V0KCkgPT0ga0ZvcndhcmQpIHsNCisJCQltX3RhYmxlLT5QdXRTdHJpbmcoIlZhbHVlIiwgIkZvcndhcmQiKTsNCisJCX0NCisJCWVsc2UgaWYgKEdldCgpID09IGtSZXZlcnNlKSB7DQorCQkJbV90YWJsZS0+UHV0U3RyaW5nKCJWYWx1ZSIsICJSZXZlcnNlIik7DQorCQl9DQorCQllbHNlIHsNCisJCQltX3RhYmxlLT5QdXRTdHJpbmcoIlZhbHVlIiwgIk9mZiIpOw0KKwkJfQ0KKwl9DQorfQ0KKw0KK3ZvaWQgUmVsYXk6OlN0YXJ0TGl2ZVdpbmRvd01vZGUoKSB7DQorCW1fdGFibGUtPkFkZFRhYmxlTGlzdGVuZXIoIlZhbHVlIiwgdGhpcywgdHJ1ZSk7DQorfQ0KKw0KK3ZvaWQgUmVsYXk6OlN0b3BMaXZlV2luZG93TW9kZSgpIHsNCisJbV90YWJsZS0+UmVtb3ZlVGFibGVMaXN0ZW5lcih0aGlzKTsNCit9DQorDQorc3RkOjpzdHJpbmcgUmVsYXk6OkdldFNtYXJ0RGFzaGJvYXJkVHlwZSgpIHsNCisJcmV0dXJuICJSZWxheSI7DQorfQ0KKw0KK3ZvaWQgUmVsYXk6OkluaXRUYWJsZShJVGFibGUgKnN1YlRhYmxlKSB7DQorCW1fdGFibGUgPSBzdWJUYWJsZTsNCisJVXBkYXRlVGFibGUoKTsNCit9DQorDQorSVRhYmxlICogUmVsYXk6OkdldFRhYmxlKCkgew0KKwlyZXR1cm4gbV90YWJsZTsNCit9DQorDQorDQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvUmVsYXkuaCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL1JlbGF5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWE2NzA4YQotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL1JlbGF5LmgKQEAgLTAsMCArMSw1NiBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBDb3B5cmlnaHQgKGMpIEZJUlNUIDIwMDguIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCQkJCQkJCSAgKi8NCisvKiBPcGVuIFNvdXJjZSBTb2Z0d2FyZSAtIG1heSBiZSBtb2RpZmllZCBhbmQgc2hhcmVkIGJ5IEZSQyB0ZWFtcy4gVGhlIGNvZGUgICAqLw0KKy8qIG11c3QgYmUgYWNjb21wYW5pZWQgYnkgdGhlIEZJUlNUIEJTRCBsaWNlbnNlIGZpbGUgaW4gJChXSU5EX0JBU0UpL1dQSUxpYi4gICovDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisjaWZuZGVmIFJFTEFZX0hfDQorI2RlZmluZSBSRUxBWV9IXw0KKw0KKyNpbmNsdWRlICJTZW5zb3JCYXNlLmgiDQorI2luY2x1ZGUgInRhYmxlcy9JVGFibGVMaXN0ZW5lci5oIg0KKyNpbmNsdWRlICJMaXZlV2luZG93L0xpdmVXaW5kb3dTZW5kYWJsZS5oIg0KKyNpbmNsdWRlICJ0YWJsZXMvSVRhYmxlLmgiDQorDQorY2xhc3MgRGlnaXRhbE1vZHVsZTsNCisNCisvKioNCisgKiBDbGFzcyBmb3IgU3Bpa2Ugc3R5bGUgcmVsYXkgb3V0cHV0cy4NCisgKiBSZWxheXMgYXJlIGludGVuZGVkIHRvIGJlIGNvbm5lY3RlZCB0byBzcGlrZXMgb3Igc2ltaWxhciByZWxheXMuIFRoZSByZWxheSBjaGFubmVscyBjb250cm9scw0KKyAqIGEgcGFpciBvZiBwaW5zIHRoYXQgYXJlIGVpdGhlciBib3RoIG9mZiwgb25lIG9uLCB0aGUgb3RoZXIgb24sIG9yIGJvdGggb24uIFRoaXMgdHJhbnNsYXRlcyBpbnRvDQorICogdHdvIHNwaWtlIG91dHB1dHMgYXQgMHYsIG9uZSBhdCAxMnYgYW5kIG9uZSBhdCAwdiwgb25lIGF0IDB2IGFuZCB0aGUgb3RoZXIgYXQgMTJ2LCBvciB0d28gDQorICogc3Bpa2Ugb3V0cHV0cyBhdCAxMlYuIFRoaXMgYWxsb3dzIG9mZiwgZnVsbCBmb3J3YXJkLCBvciBmdWxsIHJldmVyc2UgY29udHJvbCBvZiBtb3RvcnMgd2l0aG91dA0KKyAqIHZhcmlhYmxlIHNwZWVkLiAgSXQgYWxzbyBhbGxvd3MgdGhlIHR3byBjaGFubmVscyAoZm9yd2FyZCBhbmQgcmV2ZXJzZSkgdG8gYmUgdXNlZCBpbmRlcGVuZGVudGx5DQorICogZm9yIHNvbWV0aGluZyB0aGF0IGRvZXMgbm90IGNhcmUgYWJvdXQgdm9sdGFnZSBwb2xhdGlyeSAobGlrZSBhIHNvbGVub2lkKS4NCisgKi8NCitjbGFzcyBSZWxheSA6IHB1YmxpYyBTZW5zb3JCYXNlLCBwdWJsaWMgSVRhYmxlTGlzdGVuZXIsIHB1YmxpYyBMaXZlV2luZG93U2VuZGFibGUgew0KK3B1YmxpYzoNCisJdHlwZWRlZiBlbnVtIHtrT2ZmLCBrT24sIGtGb3J3YXJkLCBrUmV2ZXJzZX0gVmFsdWU7DQorCXR5cGVkZWYgZW51bSB7a0JvdGhEaXJlY3Rpb25zLCBrRm9yd2FyZE9ubHksIGtSZXZlcnNlT25seX0gRGlyZWN0aW9uOw0KKw0KKwlSZWxheShVSU5UMzIgY2hhbm5lbCwgRGlyZWN0aW9uIGRpcmVjdGlvbiA9IGtCb3RoRGlyZWN0aW9ucyk7DQorCVJlbGF5KFVJTlQ4IG1vZHVsZU51bWJlciwgVUlOVDMyIGNoYW5uZWwsIERpcmVjdGlvbiBkaXJlY3Rpb24gPSBrQm90aERpcmVjdGlvbnMpOw0KKwl2aXJ0dWFsIH5SZWxheSgpOw0KKw0KKwl2b2lkIFNldChWYWx1ZSB2YWx1ZSk7DQorCVZhbHVlIEdldCgpOw0KKwkNCisJdm9pZCBWYWx1ZUNoYW5nZWQoSVRhYmxlKiBzb3VyY2UsIGNvbnN0IHN0ZDo6c3RyaW5nJiBrZXksIEVudHJ5VmFsdWUgdmFsdWUsIGJvb2wgaXNOZXcpOw0KKwl2b2lkIFVwZGF0ZVRhYmxlKCk7DQorCXZvaWQgU3RhcnRMaXZlV2luZG93TW9kZSgpOw0KKwl2b2lkIFN0b3BMaXZlV2luZG93TW9kZSgpOw0KKwlzdGQ6OnN0cmluZyBHZXRTbWFydERhc2hib2FyZFR5cGUoKTsNCisJdm9pZCBJbml0VGFibGUoSVRhYmxlICpzdWJUYWJsZSk7DQorCUlUYWJsZSAqIEdldFRhYmxlKCk7DQorCQ0KKwlJVGFibGUgKm1fdGFibGU7DQorDQorcHJpdmF0ZToNCisJdm9pZCBJbml0UmVsYXkoVUlOVDggbW9kdWxlTnVtYmVyKTsNCisNCisJVUlOVDMyIG1fY2hhbm5lbDsNCisJRGlyZWN0aW9uIG1fZGlyZWN0aW9uOw0KKwlEaWdpdGFsTW9kdWxlICptX21vZHVsZTsNCit9Ow0KKw0KKyNlbmRpZg0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL1Jlc291cmNlLmNwcCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL1Jlc291cmNlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NzVmM2I2Ci0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvUmVzb3VyY2UuY3BwCkBAIC0wLDAgKzEsMTIwIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy8qIENvcHlyaWdodCAoYykgRklSU1QgMjAwOC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4JCQkJCQkJICAqLw0KKy8qIE9wZW4gU291cmNlIFNvZnR3YXJlIC0gbWF5IGJlIG1vZGlmaWVkIGFuZCBzaGFyZWQgYnkgRlJDIHRlYW1zLiBUaGUgY29kZSAgICovDQorLyogbXVzdCBiZSBhY2NvbXBhbmllZCBieSB0aGUgRklSU1QgQlNEIGxpY2Vuc2UgZmlsZSBpbiAkKFdJTkRfQkFTRSkvV1BJTGliLiAgKi8NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKyNpbmNsdWRlICJSZXNvdXJjZS5oIg0KKyNpbmNsdWRlICJXUElFcnJvcnMuaCINCisjaW5jbHVkZSAiRXJyb3JCYXNlLmgiDQorDQorUmVlbnRyYW50U2VtYXBob3JlIFJlc291cmNlOjptX2NyZWF0ZUxvY2s7DQorDQorLyoqDQorICogQWxsb2NhdGUgc3RvcmFnZSBmb3IgYSBuZXcgaW5zdGFuY2Ugb2YgUmVzb3VyY2UuDQorICogQWxsb2NhdGUgYSBib29sIGFycmF5IG9mIHZhbHVlcyB0aGF0IHdpbGwgZ2V0IGluaXRpYWxpemVkIHRvIGluZGljYXRlIHRoYXQgbm8gcmVzb3VyY2VzDQorICogaGF2ZSBiZWVuIGFsbG9jYXRlZCB5ZXQuIFRoZSBpbmRpY2llcyBvZiB0aGUgcmVzb3VyY2VzIGFyZSBbMCAuLiBlbGVtZW50cyAtIDFdLg0KKyAqLw0KK1Jlc291cmNlOjpSZXNvdXJjZShVSU5UMzIgZWxlbWVudHMpDQorew0KKwlTeW5jaHJvbml6ZWQgc3luYyhtX2NyZWF0ZUxvY2spOw0KKwltX3NpemUgPSBlbGVtZW50czsNCisJbV9pc0FsbG9jYXRlZCA9IG5ldyBib29sW21fc2l6ZV07DQorCWZvciAoVUlOVDMyIGk9MDsgaSA8IG1fc2l6ZTsgaSsrKQ0KKwl7DQorCQltX2lzQWxsb2NhdGVkW2ldID0gZmFsc2U7DQorCX0NCit9DQorDQorLyoqDQorICogRmFjdG9yeSBtZXRob2QgdG8gY3JlYXRlIGEgUmVzb3VyY2UgYWxsb2NhdGlvbi10cmFja2VyICppZiogbmVlZGVkLg0KKyAqDQorICogQHBhcmFtIHIgLS0gYWRkcmVzcyBvZiB0aGUgY2FsbGVyJ3MgUmVzb3VyY2UgcG9pbnRlci4gSWYgKnIgPT0gTlVMTCwgdGhpcw0KKyAqICAgIHdpbGwgY29uc3RydWN0IGEgUmVzb3VyY2UgYW5kIG1ha2UgKnIgcG9pbnQgdG8gaXQuIElmICpyICE9IE5VTEwsIGkuZS4NCisgKiAgICB0aGUgY2FsbGVyIGFscmVhZHkgaGFzIGEgUmVzb3VyY2UgaW5zdGFuY2UsIHRoaXMgd29uJ3QgZG8gYW55dGhpbmcuDQorICogQHBhcmFtIGVsZW1lbnRzIC0tIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgZm9yIHRoaXMgUmVzb3VyY2UgYWxsb2NhdG9yIHRvDQorICogICAgdHJhY2ssIHRoYXQgaXMsIGl0IHdpbGwgYWxsb2NhdGUgcmVzb3VyY2UgbnVtYmVycyBpbiB0aGUgcmFuZ2UNCisgKiAgICBbMCAuLiBlbGVtZW50cyAtIDFdLg0KKyAqLw0KKy8qc3RhdGljKi8gdm9pZCBSZXNvdXJjZTo6Q3JlYXRlUmVzb3VyY2VPYmplY3QoUmVzb3VyY2UgKipyLCBVSU5UMzIgZWxlbWVudHMpDQorew0KKwlTeW5jaHJvbml6ZWQgc3luYyhtX2NyZWF0ZUxvY2spOw0KKwlpZiAoKnIgPT0gTlVMTCkNCisJew0KKwkJKnIgPSBuZXcgUmVzb3VyY2UoZWxlbWVudHMpOw0KKwl9DQorfQ0KKw0KKy8qKg0KKyAqIERlbGV0ZSB0aGUgYWxsb2NhdGVkIGFycmF5IG9yIHJlc291cmNlcy4NCisgKiBUaGlzIGhhcHBlbnMgd2hlbiB0aGUgbW9kdWxlIGlzIHVubG9hZGVkIChwcm92aWRlZCBpdCB3YXMgc3RhdGljYWxseSBhbGxvY2F0ZWQpLg0KKyAqLw0KK1Jlc291cmNlOjp+UmVzb3VyY2UoKQ0KK3sNCisJZGVsZXRlW10gbV9pc0FsbG9jYXRlZDsNCit9DQorDQorLyoqDQorICogQWxsb2NhdGUgYSByZXNvdXJjZS4NCisgKiBXaGVuIGEgcmVzb3VyY2UgaXMgcmVxdWVzdGVkLCBtYXJrIGl0IGFsbG9jYXRlZC4gSW4gdGhpcyBjYXNlLCBhIGZyZWUgcmVzb3VyY2UgdmFsdWUNCisgKiB3aXRoaW4gdGhlIHJhbmdlIGlzIGxvY2F0ZWQgYW5kIHJldHVybmVkIGFmdGVyIGl0IGlzIG1hcmtlZCBhbGxvY2F0ZWQuDQorICovDQorVUlOVDMyIFJlc291cmNlOjpBbGxvY2F0ZShjb25zdCBjaGFyICpyZXNvdXJjZURlc2MpDQorew0KKwlTeW5jaHJvbml6ZWQgc3luYyhtX2FsbG9jYXRlTG9jayk7DQorCWZvciAoVUlOVDMyIGk9MDsgaSA8IG1fc2l6ZTsgaSsrKQ0KKwl7DQorCQlpZiAoIW1faXNBbGxvY2F0ZWRbaV0pDQorCQl7DQorCQkJbV9pc0FsbG9jYXRlZFtpXSA9IHRydWU7DQorCQkJcmV0dXJuIGk7DQorCQl9DQorCX0NCisJd3BpX3NldFdQSUVycm9yV2l0aENvbnRleHQoTm9BdmFpbGFibGVSZXNvdXJjZXMsIHJlc291cmNlRGVzYyk7DQorCXJldHVybiB+MHVsOw0KK30NCisNCisvKioNCisgKiBBbGxvY2F0ZSBhIHNwZWNpZmljIHJlc291cmNlIHZhbHVlLg0KKyAqIFRoZSB1c2VyIHJlcXVlc3RzIGEgc3BlY2lmaWMgcmVzb3VyY2UgdmFsdWUsIGkuZS4gY2hhbm5lbCBudW1iZXIgYW5kIGl0IGlzIHZlcmlmaWVkDQorICogdW5hbGxvY2F0ZWQsIHRoZW4gcmV0dXJuZWQuDQorICovDQorVUlOVDMyIFJlc291cmNlOjpBbGxvY2F0ZShVSU5UMzIgaW5kZXgsIGNvbnN0IGNoYXIgKnJlc291cmNlRGVzYykNCit7DQorCVN5bmNocm9uaXplZCBzeW5jKG1fYWxsb2NhdGVMb2NrKTsNCisJaWYgKGluZGV4ID49IG1fc2l6ZSkNCisJew0KKwkJd3BpX3NldFdQSUVycm9yV2l0aENvbnRleHQoQ2hhbm5lbEluZGV4T3V0T2ZSYW5nZSwgcmVzb3VyY2VEZXNjKTsNCisJCXJldHVybiB+MHVsOw0KKwl9DQorCWlmICggbV9pc0FsbG9jYXRlZFtpbmRleF0gKQ0KKwl7DQorCQl3cGlfc2V0V1BJRXJyb3JXaXRoQ29udGV4dChSZXNvdXJjZUFscmVhZHlBbGxvY2F0ZWQsIHJlc291cmNlRGVzYyk7DQorCQlyZXR1cm4gfjB1bDsNCisJfQ0KKwltX2lzQWxsb2NhdGVkW2luZGV4XSA9IHRydWU7DQorCXJldHVybiBpbmRleDsNCit9DQorDQorDQorLyoqDQorICogRnJlZSBhbiBhbGxvY2F0ZWQgcmVzb3VyY2UuDQorICogQWZ0ZXIgYSByZXNvdXJjZSBpcyBubyBsb25nZXIgbmVlZGVkLCBmb3IgZXhhbXBsZSBhIGRlc3RydWN0b3IgaXMgY2FsbGVkIGZvciBhIGNoYW5uZWwgYXNzaWdubWVudA0KKyAqIGNsYXNzLCBGcmVlIHdpbGwgcmVsZWFzZSB0aGUgcmVzb3VyY2UgdmFsdWUgc28gaXQgY2FuIGJlIHJldXNlZCBzb21ld2hlcmUgZWxzZSBpbiB0aGUgcHJvZ3JhbS4NCisgKi8NCit2b2lkIFJlc291cmNlOjpGcmVlKFVJTlQzMiBpbmRleCkNCit7DQorCVN5bmNocm9uaXplZCBzeW5jKG1fYWxsb2NhdGVMb2NrKTsNCisJaWYgKGluZGV4ID09IH4wdWwpIHJldHVybjsNCisJaWYgKGluZGV4ID49IG1fc2l6ZSkNCisJew0KKwkJd3BpX3NldFdQSUVycm9yKE5vdEFsbG9jYXRlZCk7DQorCQlyZXR1cm47DQorCX0NCisJaWYgKCFtX2lzQWxsb2NhdGVkW2luZGV4XSkNCisJew0KKwkJd3BpX3NldFdQSUVycm9yKE5vdEFsbG9jYXRlZCk7DQorCQlyZXR1cm47DQorCX0NCisJbV9pc0FsbG9jYXRlZFtpbmRleF0gPSBmYWxzZTsNCit9DQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvUmVzb3VyY2UuaCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL1Jlc291cmNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDM4YmE1ZgotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL1Jlc291cmNlLmgKQEAgLTAsMCArMSw0NCBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBDb3B5cmlnaHQgKGMpIEZJUlNUIDIwMDguIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCQkJCQkJCSAgKi8NCisvKiBPcGVuIFNvdXJjZSBTb2Z0d2FyZSAtIG1heSBiZSBtb2RpZmllZCBhbmQgc2hhcmVkIGJ5IEZSQyB0ZWFtcy4gVGhlIGNvZGUgICAqLw0KKy8qIG11c3QgYmUgYWNjb21wYW5pZWQgYnkgdGhlIEZJUlNUIEJTRCBsaWNlbnNlIGZpbGUgaW4gJChXSU5EX0JBU0UpL1dQSUxpYi4gICovDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisjaWZuZGVmIFJFU09VUkNFX0hfDQorI2RlZmluZSBSRVNPVVJDRV9IXw0KKw0KKyNpbmNsdWRlICJFcnJvckJhc2UuaCINCisjaW5jbHVkZSAiU3luY2hyb25pemVkLmgiDQorI2luY2x1ZGUgPHZ4V29ya3MuaD4NCisNCisvKioNCisgKiBUaGUgUmVzb3VyY2UgY2xhc3MgaXMgYSBjb252ZW5pZW50IHdheSB0byB0cmFjayBhbGxvY2F0ZWQgcmVzb3VyY2VzLg0KKyAqIEl0IHRyYWNrcyB0aGVtIGFzIGluZGljaWVzIGluIHRoZSByYW5nZSBbMCAuLiBlbGVtZW50cyAtIDFdLg0KKyAqIEUuZy4gdGhlIGxpYnJhcnkgdXNlcyB0aGlzIHRvIHRyYWNrIGhhcmR3YXJlIGNoYW5uZWwgYWxsb2NhdGlvbi4NCisgKg0KKyAqIFRoZSBSZXNvdXJjZSBjbGFzcyBkb2VzIG5vdCBhbGxvY2F0ZSB0aGUgaGFyZHdhcmUgY2hhbm5lbHMgb3Igb3RoZXINCisgKiByZXNvdXJjZXM7IGl0IGp1c3QgdHJhY2tzIHdoaWNoIGluZGljZXMgd2VyZSBtYXJrZWQgaW4gdXNlIGJ5DQorICogQWxsb2NhdGUgYW5kIG5vdCB5ZXQgZnJlZWQgYnkgRnJlZS4NCisgKi8NCitjbGFzcyBSZXNvdXJjZSA6IHB1YmxpYyBFcnJvckJhc2UNCit7DQorcHVibGljOg0KKwl2aXJ0dWFsIH5SZXNvdXJjZSgpOw0KKwlzdGF0aWMgdm9pZCBDcmVhdGVSZXNvdXJjZU9iamVjdChSZXNvdXJjZSAqKnIsIFVJTlQzMiBlbGVtZW50cyk7DQorCVVJTlQzMiBBbGxvY2F0ZShjb25zdCBjaGFyICpyZXNvdXJjZURlc2MpOw0KKwlVSU5UMzIgQWxsb2NhdGUoVUlOVDMyIGluZGV4LCBjb25zdCBjaGFyICpyZXNvdXJjZURlc2MpOw0KKwl2b2lkIEZyZWUoVUlOVDMyIGluZGV4KTsNCisNCitwcml2YXRlOg0KKwlleHBsaWNpdCBSZXNvdXJjZShVSU5UMzIgc2l6ZSk7DQorDQorCWJvb2wgKm1faXNBbGxvY2F0ZWQ7DQorCVJlZW50cmFudFNlbWFwaG9yZSBtX2FsbG9jYXRlTG9jazsNCisJVUlOVDMyIG1fc2l6ZTsNCisNCisJc3RhdGljIFJlZW50cmFudFNlbWFwaG9yZSBtX2NyZWF0ZUxvY2s7DQorDQorCURJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihSZXNvdXJjZSk7DQorfTsNCisNCisjZW5kaWYNCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9Sb2JvdEJhc2UuY3BwIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvUm9ib3RCYXNlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMmQ5ZDM1Ci0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvUm9ib3RCYXNlLmNwcApAQCAtMCwwICsxLDIxNCBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBDb3B5cmlnaHQgKGMpIEZJUlNUIDIwMDguIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCQkJCQkJCSAgKi8NCisvKiBPcGVuIFNvdXJjZSBTb2Z0d2FyZSAtIG1heSBiZSBtb2RpZmllZCBhbmQgc2hhcmVkIGJ5IEZSQyB0ZWFtcy4gVGhlIGNvZGUgICAqLw0KKy8qIG11c3QgYmUgYWNjb21wYW5pZWQgYnkgdGhlIEZJUlNUIEJTRCBsaWNlbnNlIGZpbGUgaW4gJChXSU5EX0JBU0UpL1dQSUxpYi4gICovDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisjaW5jbHVkZSAiUm9ib3RCYXNlLmgiDQorDQorI2luY2x1ZGUgIkRyaXZlclN0YXRpb24uaCINCisjaW5jbHVkZSAiTmV0d29ya0NvbW11bmljYXRpb24vRlJDQ29tbS5oIg0KKyNpbmNsdWRlICJOZXR3b3JrQ29tbXVuaWNhdGlvbi9zeW1Nb2R1bGVMaW5rLmgiDQorI2luY2x1ZGUgIk5ldHdvcmtDb21tdW5pY2F0aW9uL1VzYWdlUmVwb3J0aW5nLmgiDQorI2luY2x1ZGUgIlV0aWxpdHkuaCINCisjaW5jbHVkZSA8bW9kdWxlTGliLmg+DQorI2luY2x1ZGUgPHRhc2tMaWIuaD4NCisjaW5jbHVkZSA8dW5sZExpYi5oPg0KKw0KK1JvYm90QmFzZSogUm9ib3RCYXNlOjptX2luc3RhbmNlID0gTlVMTDsNCisNCit2b2lkIFJvYm90QmFzZTo6c2V0SW5zdGFuY2UoUm9ib3RCYXNlKiByb2JvdCkNCit7DQorCXdwaV9hc3NlcnQobV9pbnN0YW5jZSA9PSBOVUxMKTsNCisJbV9pbnN0YW5jZSA9IHJvYm90Ow0KK30NCisNCitSb2JvdEJhc2UgJlJvYm90QmFzZTo6Z2V0SW5zdGFuY2UoKQ0KK3sNCisJcmV0dXJuICptX2luc3RhbmNlOw0KK30NCisNCisvKioNCisgKiBDb25zdHJ1Y3RvciBmb3IgYSBnZW5lcmljIHJvYm90IHByb2dyYW0uDQorICogVXNlciBjb2RlIHNob3VsZCBiZSBwbGFjZWQgaW4gdGhlIGNvbnN0dWN0b3IgdGhhdCBydW5zIGJlZm9yZSB0aGUgQXV0b25vbW91cyBvciBPcGVyYXRvcg0KKyAqIENvbnRyb2wgcGVyaW9kIHN0YXJ0cy4gVGhlIGNvbnN0cnVjdG9yIHdpbGwgcnVuIHRvIGNvbXBsZXRpb24gYmVmb3JlIEF1dG9ub21vdXMgaXMgZW50ZXJlZC4NCisgKiANCisgKiBUaGlzIG11c3QgYmUgdXNlZCB0byBlbnN1cmUgdGhhdCB0aGUgY29tbXVuaWNhdGlvbnMgY29kZSBzdGFydHMuIEluIHRoZSBmdXR1cmUgaXQgd291bGQgYmUNCisgKiBuaWNlIHRvIHB1dCB0aGlzIGNvZGUgaW50byBpdCdzIG93biB0YXNrIHRoYXQgbG9hZHMgb24gYm9vdCBzbyBlbnN1cmUgdGhhdCBpdCBydW5zLg0KKyAqLw0KK1JvYm90QmFzZTo6Um9ib3RCYXNlKCkNCisJOiBtX3Rhc2sgKE5VTEwpDQorCSwgbV9kcyAoTlVMTCkNCit7DQorCW1fZHMgPSBEcml2ZXJTdGF0aW9uOjpHZXRJbnN0YW5jZSgpOw0KK30NCisNCisvKioNCisgKiBGcmVlIHRoZSByZXNvdXJjZXMgZm9yIGEgUm9ib3RCYXNlIGNsYXNzLg0KKyAqIFRoaXMgaW5jbHVkZXMgZGVsZXRpbmcgYWxsIGNsYXNzZXMgdGhhdCBtaWdodCBoYXZlIGJlZW4gYWxsb2NhdGVkIGFzIFNpbmdsZXRvbnMgdG8gdGhleQ0KKyAqIHdvdWxkIG5ldmVyIGJlIGRlbGV0ZWQgZXhjZXB0IGhlcmUuDQorICovDQorUm9ib3RCYXNlOjp+Um9ib3RCYXNlKCkNCit7DQorCVNlbnNvckJhc2U6OkRlbGV0ZVNpbmdsZXRvbnMoKTsNCisJZGVsZXRlIG1fdGFzazsNCisJbV90YXNrID0gTlVMTDsNCisJbV9pbnN0YW5jZSA9IE5VTEw7DQorfQ0KKw0KKy8qKg0KKyAqIENoZWNrIG9uIHRoZSBvdmVyYWxsIHN0YXR1cyBvZiB0aGUgc3lzdGVtLg0KKyAqIA0KKyAqIEByZXR1cm4gSXMgdGhlIHN5c3RlbSBhY3RpdmUgKGkuZS4gUFdNIG1vdG9yIG91dHB1dHMsIGV0Yy4gZW5hYmxlZCk/DQorICovDQorYm9vbCBSb2JvdEJhc2U6OklzU3lzdGVtQWN0aXZlKCkNCit7DQorCXJldHVybiBtX3dhdGNoZG9nLklzU3lzdGVtQWN0aXZlKCk7DQorfQ0KKw0KKy8qKg0KKyAqIFJldHVybiB0aGUgaW5zdGFuY2Ugb2YgdGhlIFdhdGNoZG9nIHRpbWVyLg0KKyAqIEdldCB0aGUgd2F0Y2hkb2cgdGltZXIgc28gdGhlIHVzZXIgcHJvZ3JhbSBjYW4gZWl0aGVyIGRpc2FibGUgaXQgb3IgZmVlZCBpdCB3aGVuDQorICogbmVjZXNzYXJ5Lg0KKyAqLw0KK1dhdGNoZG9nICZSb2JvdEJhc2U6OkdldFdhdGNoZG9nKCkNCit7DQorCXJldHVybiBtX3dhdGNoZG9nOw0KK30NCisNCisvKioNCisgKiBEZXRlcm1pbmUgaWYgdGhlIFJvYm90IGlzIGN1cnJlbnRseSBlbmFibGVkLg0KKyAqIEByZXR1cm4gVHJ1ZSBpZiB0aGUgUm9ib3QgaXMgY3VycmVudGx5IGVuYWJsZWQgYnkgdGhlIGZpZWxkIGNvbnRyb2xzLg0KKyAqLw0KK2Jvb2wgUm9ib3RCYXNlOjpJc0VuYWJsZWQoKQ0KK3sNCisJcmV0dXJuIG1fZHMtPklzRW5hYmxlZCgpOw0KK30NCisNCisvKioNCisgKiBEZXRlcm1pbmUgaWYgdGhlIFJvYm90IGlzIGN1cnJlbnRseSBkaXNhYmxlZC4NCisgKiBAcmV0dXJuIFRydWUgaWYgdGhlIFJvYm90IGlzIGN1cnJlbnRseSBkaXNhYmxlZCBieSB0aGUgZmllbGQgY29udHJvbHMuDQorICovDQorYm9vbCBSb2JvdEJhc2U6OklzRGlzYWJsZWQoKQ0KK3sNCisJcmV0dXJuIG1fZHMtPklzRGlzYWJsZWQoKTsNCit9DQorDQorLyoqDQorICogRGV0ZXJtaW5lIGlmIHRoZSByb2JvdCBpcyBjdXJyZW50bHkgaW4gQXV0bm9tb3VzIG1vZGUuDQorICogQHJldHVybiBUcnVlIGlmIHRoZSByb2JvdCBpcyBjdXJyZW50bHkgb3BlcmF0aW5nIEF1dG9ub21vdXNseSBhcyBkZXRlcm1pbmVkIGJ5IHRoZSBmaWVsZCBjb250cm9scy4NCisgKi8NCitib29sIFJvYm90QmFzZTo6SXNBdXRvbm9tb3VzKCkNCit7DQorCXJldHVybiBtX2RzLT5Jc0F1dG9ub21vdXMoKTsNCit9DQorDQorLyoqDQorICogRGV0ZXJtaW5lIGlmIHRoZSByb2JvdCBpcyBjdXJyZW50bHkgaW4gT3BlcmF0b3IgQ29udHJvbCBtb2RlLg0KKyAqIEByZXR1cm4gVHJ1ZSBpZiB0aGUgcm9ib3QgaXMgY3VycmVudGx5IG9wZXJhdGluZyBpbiBUZWxlLU9wIG1vZGUgYXMgZGV0ZXJtaW5lZCBieSB0aGUgZmllbGQgY29udHJvbHMuDQorICovDQorYm9vbCBSb2JvdEJhc2U6OklzT3BlcmF0b3JDb250cm9sKCkNCit7DQorCXJldHVybiBtX2RzLT5Jc09wZXJhdG9yQ29udHJvbCgpOw0KK30NCisNCisvKioNCisgKiBEZXRlcm1pbmUgaWYgdGhlIHJvYm90IGlzIGN1cnJlbnRseSBpbiBUZXN0IG1vZGUuDQorICogQHJldHVybiBUcnVlIGlmIHRoZSByb2JvdCBpcyBjdXJyZW50bHkgcnVubmluZyB0ZXN0cyBhcyBkZXRlcm1pbmVkIGJ5IHRoZSBmaWVsZCBjb250cm9scy4NCisgKi8NCitib29sIFJvYm90QmFzZTo6SXNUZXN0KCkNCit7DQorICAgIHJldHVybiBtX2RzLT5Jc1Rlc3QoKTsNCit9DQorDQorLyoqDQorICogSW5kaWNhdGVzIGlmIG5ldyBkYXRhIGlzIGF2YWlsYWJsZSBmcm9tIHRoZSBkcml2ZXIgc3RhdGlvbi4NCisgKiBAcmV0dXJuIEhhcyBuZXcgZGF0YSBhcnJpdmVkIG92ZXIgdGhlIG5ldHdvcmsgc2luY2UgdGhlIGxhc3QgdGltZSB0aGlzIGZ1bmN0aW9uIHdhcyBjYWxsZWQ/DQorICovDQorYm9vbCBSb2JvdEJhc2U6OklzTmV3RGF0YUF2YWlsYWJsZSgpDQorew0KKwlyZXR1cm4gbV9kcy0+SXNOZXdDb250cm9sRGF0YSgpOw0KK30NCisNCisvKioNCisgKiBTdGF0aWMgaW50ZXJmYWNlIHRoYXQgd2lsbCBzdGFydCB0aGUgY29tcGV0aXRpb24gaW4gdGhlIG5ldyB0YXNrLg0KKyAqLw0KK3ZvaWQgUm9ib3RCYXNlOjpyb2JvdFRhc2soRlVOQ1BUUiBmYWN0b3J5LCBUYXNrICp0YXNrKQ0KK3sNCisJUm9ib3RCYXNlOjpzZXRJbnN0YW5jZSgoUm9ib3RCYXNlKilmYWN0b3J5KCkpOw0KKwlSb2JvdEJhc2U6OmdldEluc3RhbmNlKCkubV90YXNrID0gdGFzazsNCisJUm9ib3RCYXNlOjpnZXRJbnN0YW5jZSgpLlN0YXJ0Q29tcGV0aXRpb24oKTsNCit9DQorDQorLyoqDQorICogDQorICogU3RhcnQgdGhlIHJvYm90IGNvZGUuDQorICogVGhpcyBmdW5jdGlvbiBzdGFydHMgdGhlIHJvYm90IGNvZGUgcnVubmluZyBieSBzcGF3bmluZyBhIHRhc2suIEN1cnJlbnRseSB0YXNrcyBzZWVtZWQgdG8gYmUNCisgKiBzdGFydGVkIGJ5IExWUlQgd2l0aG91dCBzZXR0aW5nIHRoZSBWWF9GUF9UQVNLIGZsYWcgc28gZmxvYXRpbmcgcG9pbnQgY29udGV4dCBpcyBub3Qgc2F2ZWQgb24NCisgKiBpbnRlcnJ1cHRzLiBUaGVyZWZvcmUgdGhlIHByb2dyYW0gZXhwZXJpZW5jZXMgaGFyZCB0byBkZWJ1ZyBhbmQgdW5wcmVkaWN0YWJsZSByZXN1bHRzLiBTbyB0aGUNCisgKiBMVlJUIGNvZGUgc3RhcnRzIHRoaXMgZnVuY3Rpb24sIGFuZCBpdCwgaW4gdHVybiwgc3RhcnRzIHRoZSBhY3R1YWwgdXNlciBwcm9ncmFtLg0KKyAqLw0KK3ZvaWQgUm9ib3RCYXNlOjpzdGFydFJvYm90VGFzayhGVU5DUFRSIGZhY3RvcnkpDQorew0KKyNpZmRlZiBTVk5fUkVWDQorCWlmIChzdHJsZW4oU1ZOX1JFVikpDQorCXsNCisJCXByaW50ZigiV1BJTGliIHdhcyBjb21waWxlZCBmcm9tIFNWTiByZXZpc2lvbiAlc1xuIiwgU1ZOX1JFVik7DQorCX0NCisJZWxzZQ0KKwl7DQorCQlwcmludGYoIldQSUxpYiB3YXMgY29tcGlsZWQgZnJvbSBhIGxvY2F0aW9uIHRoYXQgaXMgbm90IHNvdXJjZSBjb250cm9sbGVkLlxuIik7DQorCX0NCisjZWxzZQ0KKwlwcmludGYoIldQSUxpYiB3YXMgY29tcGlsZWQgd2l0aG91dCAtRCdTVk5fUkVWPW5ubm4nXG4iKTsNCisjZW5kaWYNCisNCisJLy8gQ2hlY2sgZm9yIHN0YXJ0dXAgY29kZSBhbHJlYWR5IHJ1bm5pbmcNCisJSU5UMzIgb2xkSWQgPSB0YXNrTmFtZVRvSWQoIkZSQ19Sb2JvdFRhc2siKTsNCisJaWYgKG9sZElkICE9IEVSUk9SKQ0KKwl7DQorCQkvLyBGaW5kIHRoZSBzdGFydHVwIGNvZGUgbW9kdWxlLg0KKwkJY2hhciBtb2R1bGVOYW1lWzI1Nl07DQorCQltb2R1bGVOYW1lRmluZEJ5U3ltYm9sTmFtZSgiRlJDX1VzZXJQcm9ncmFtX1N0YXJ0dXBMaWJyYXJ5SW5pdCIsIG1vZHVsZU5hbWUpOw0KKwkJTU9EVUxFX0lEIHN0YXJ0dXBNb2RJZCA9IG1vZHVsZUZpbmRCeU5hbWUobW9kdWxlTmFtZSk7DQorCQlpZiAoc3RhcnR1cE1vZElkICE9IE5VTEwpDQorCQl7DQorCQkJLy8gUmVtb3ZlIHRoZSBzdGFydHVwIGNvZGUuDQorCQkJdW5sZEJ5TW9kdWxlSWQoc3RhcnR1cE1vZElkLCAwKTsNCisJCQlwcmludGYoIiEhISAgIEVycm9yOiBEZWZhdWx0IGNvZGUgd2FzIHN0aWxsIHJ1bm5pbmcuLi4gSXQgd2FzIHVubG9hZGVkIGZvciB5b3UuLi4gUGxlYXNlIHRyeSBhZ2Fpbi5cbiIpOw0KKwkJCXJldHVybjsNCisJCX0NCisJCS8vIFRoaXMgY2FzZSBzaG91bGQgbm8gbG9uZ2VyIGdldCBoaXQuDQorCQlwcmludGYoIiEhISAgIEVycm9yOiBPdGhlciByb2JvdCBjb2RlIGlzIHN0aWxsIHJ1bm5pbmcuLi4gVW5sb2FkIGl0IGFuZCB0aGVuIHRyeSBhZ2Fpbi5cbiIpOw0KKwkJcmV0dXJuOw0KKwl9DQorDQorCS8vIExldCB0aGUgZnJhbWV3b3JrIGtub3cgdGhhdCB3ZSBhcmUgc3RhcnRpbmcgYSBuZXcgdXNlciBwcm9ncmFtIHNvIHRoZSBEcml2ZXIgU3RhdGlvbiBjYW4gZGlzYWJsZS4NCisJRlJDX05ldHdvcmtDb21tdW5pY2F0aW9uX29ic2VydmVVc2VyUHJvZ3JhbVN0YXJ0aW5nKCk7DQorDQorCS8vIExldCB0aGUgVXNhZ2UgUmVwb3J0aW5nIGZyYW1ld29yayBrbm93IHRoYXQgdGhlcmUgaXMgYSBDKysgcHJvZ3JhbSBydW5uaW5nDQorCW5Vc2FnZVJlcG9ydGluZzo6cmVwb3J0KG5Vc2FnZVJlcG9ydGluZzo6a1Jlc291cmNlVHlwZV9MYW5ndWFnZSwgblVzYWdlUmVwb3J0aW5nOjprTGFuZ3VhZ2VfQ1BsdXNQbHVzKTsNCisNCisJLy8gU3RhcnQgcm9ib3QgdGFzaw0KKwkvLyBUaGlzIGlzIGRvbmUgdG8gZW5zdXJlIHRoYXQgdGhlIEMrKyByb2JvdCB0YXNrIGlzIHNwYXduZWQgd2l0aCB0aGUgZmxvYXRpbmcgcG9pbnQNCisJLy8gY29udGV4dCBzYXZlIHBhcmFtZXRlci4NCisJVGFzayAqdGFzayA9IG5ldyBUYXNrKCJSb2JvdFRhc2siLCAoRlVOQ1BUUilSb2JvdEJhc2U6OnJvYm90VGFzaywgVGFzazo6a0RlZmF1bHRQcmlvcml0eSwgNjQwMDApOw0KKwl0YXNrLT5TdGFydCgoSU5UMzIpZmFjdG9yeSwgKElOVDMyKXRhc2spOw0KK30NCisNCisvKioNCisgKiBUaGlzIGNsYXNzIGV4aXN0cyBmb3IgdGhlIHNvbGUgcHVycG9zZSBvZiBnZXR0aW5nIGl0cyBkZXN0cnVjdG9yIGNhbGxlZCB3aGVuIHRoZSBtb2R1bGUgdW5sb2Fkcy4NCisgKiBCZWZvcmUgdGhlIG1vZHVsZSBpcyBkb25lIHVubG9hZGluZywgd2UgbmVlZCB0byBkZWxldGUgdGhlIFJvYm90QmFzZSBkZXJpdmVkIHNpbmdsZXRvbi4gIFRoaXMgc2hvdWxkIGRlbGV0ZQ0KKyAqIHRoZSBvdGhlciByZW1haW5pbmcgc2luZ2xldG9ucyB0aGF0IHdlcmUgcmVnaXN0ZXJlZC4gIFRoaXMgc2hvdWxkIGFsc28gc3RvcCBhbGwgdGFza3MgdGhhdCBhcmUgdXNpbmcNCisgKiB0aGUgVGFzayBjbGFzcy4NCisgKi8NCitjbGFzcyBSb2JvdERlbGV0ZXINCit7DQorcHVibGljOg0KKwlSb2JvdERlbGV0ZXIoKSB7fQ0KKwl+Um9ib3REZWxldGVyKCkNCisJew0KKwkJZGVsZXRlICZSb2JvdEJhc2U6OmdldEluc3RhbmNlKCk7DQorCX0NCit9Ow0KK3N0YXRpYyBSb2JvdERlbGV0ZXIgZ19yb2JvdERlbGV0ZXI7DQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvUm9ib3RCYXNlLmggYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9Sb2JvdEJhc2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZDkzNTg1Ci0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvUm9ib3RCYXNlLmgKQEAgLTAsMCArMSw2OSBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBDb3B5cmlnaHQgKGMpIEZJUlNUIDIwMDguIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCQkJCQkJCSAgKi8NCisvKiBPcGVuIFNvdXJjZSBTb2Z0d2FyZSAtIG1heSBiZSBtb2RpZmllZCBhbmQgc2hhcmVkIGJ5IEZSQyB0ZWFtcy4gVGhlIGNvZGUgICAqLw0KKy8qIG11c3QgYmUgYWNjb21wYW5pZWQgYnkgdGhlIEZJUlNUIEJTRCBsaWNlbnNlIGZpbGUgaW4gJChXSU5EX0JBU0UpL1dQSUxpYi4gICovDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisjaWZuZGVmIFJPQk9UX0hfDQorI2RlZmluZSBST0JPVF9IXw0KKw0KKyNpbmNsdWRlICJCYXNlLmgiDQorI2luY2x1ZGUgIlRhc2suaCINCisjaW5jbHVkZSAiV2F0Y2hkb2cuaCINCisNCitjbGFzcyBEcml2ZXJTdGF0aW9uOw0KKw0KKyNkZWZpbmUgU1RBUlRfUk9CT1RfQ0xBU1MoX0NsYXNzTmFtZV8pIFwNCisJUm9ib3RCYXNlICpGUkNfdXNlckNsYXNzRmFjdG9yeSgpIFwNCisJeyBcDQorCQlyZXR1cm4gbmV3IF9DbGFzc05hbWVfKCk7IFwNCisJfSBcDQorCWV4dGVybiAiQyIgeyBcDQorCQlJTlQzMiBGUkNfVXNlclByb2dyYW1fU3RhcnR1cExpYnJhcnlJbml0KCkgXA0KKwkJeyBcDQorCQkJUm9ib3RCYXNlOjpzdGFydFJvYm90VGFzaygoRlVOQ1BUUilGUkNfdXNlckNsYXNzRmFjdG9yeSk7IFwNCisJCQlyZXR1cm4gMDsgXA0KKwkJfSBcDQorCX0NCisNCisvKioNCisgKiBJbXBsZW1lbnQgYSBSb2JvdCBQcm9ncmFtIGZyYW1ld29yay4NCisgKiBUaGUgUm9ib3RCYXNlIGNsYXNzIGlzIGludGVuZGVkIHRvIGJlIHN1YmNsYXNzZWQgYnkgYSB1c2VyIGNyZWF0aW5nIGEgcm9ib3QgcHJvZ3JhbS4NCisgKiBPdmVycmlkZGVuIEF1dG9ub21vdXMoKSBhbmQgT3BlcmF0b3JDb250cm9sKCkgbWV0aG9kcyBhcmUgY2FsbGVkIGF0IHRoZSBhcHByb3ByaWF0ZSB0aW1lDQorICogYXMgdGhlIG1hdGNoIHByb2NlZWRzLiBJbiB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiwgdGhlIEF1dG9ub21vdXMgY29kZSB3aWxsIHJ1biB0bw0KKyAqIGNvbXBsZXRpb24gYmVmb3JlIHRoZSBPcGVyYXRvckNvbnRyb2wgY29kZSBjb3VsZCBzdGFydC4gSW4gdGhlIGZ1dHVyZSB0aGUgQXV0b25vbW91cyBjb2RlDQorICogbWlnaHQgYmUgc3Bhd25lZCBhcyBhIHRhc2ssIHRoZW4ga2lsbGVkIGF0IHRoZSBlbmQgb2YgdGhlIEF1dG9ub21vdXMgcGVyaW9kLg0KKyAqLw0KK2NsYXNzIFJvYm90QmFzZSB7DQorCWZyaWVuZCBjbGFzcyBSb2JvdERlbGV0ZXI7DQorcHVibGljOg0KKwlzdGF0aWMgUm9ib3RCYXNlICZnZXRJbnN0YW5jZSgpOw0KKwlzdGF0aWMgdm9pZCBzZXRJbnN0YW5jZShSb2JvdEJhc2UqIHJvYm90KTsNCisNCisJYm9vbCBJc0VuYWJsZWQoKTsNCisJYm9vbCBJc0Rpc2FibGVkKCk7DQorCWJvb2wgSXNBdXRvbm9tb3VzKCk7DQorCWJvb2wgSXNPcGVyYXRvckNvbnRyb2woKTsNCisgICAgYm9vbCBJc1Rlc3QoKTsNCisJYm9vbCBJc1N5c3RlbUFjdGl2ZSgpOw0KKwlib29sIElzTmV3RGF0YUF2YWlsYWJsZSgpOw0KKwlXYXRjaGRvZyAmR2V0V2F0Y2hkb2coKTsNCisJc3RhdGljIHZvaWQgc3RhcnRSb2JvdFRhc2soRlVOQ1BUUiBmYWN0b3J5KTsNCisJc3RhdGljIHZvaWQgcm9ib3RUYXNrKEZVTkNQVFIgZmFjdG9yeSwgVGFzayAqdGFzayk7DQorDQorcHJvdGVjdGVkOg0KKwl2aXJ0dWFsIH5Sb2JvdEJhc2UoKTsNCisJdmlydHVhbCB2b2lkIFN0YXJ0Q29tcGV0aXRpb24oKSA9IDA7DQorCVJvYm90QmFzZSgpOw0KKw0KKwlUYXNrICptX3Rhc2s7DQorCVdhdGNoZG9nIG1fd2F0Y2hkb2c7DQorCURyaXZlclN0YXRpb24gKm1fZHM7DQorDQorcHJpdmF0ZToNCisJc3RhdGljIFJvYm90QmFzZSAqbV9pbnN0YW5jZTsNCisJRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFJvYm90QmFzZSk7DQorfTsNCisNCisjZW5kaWYNCisNCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9Sb2JvdERyaXZlLmNwcCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL1JvYm90RHJpdmUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0NzFiNDIKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9Sb2JvdERyaXZlLmNwcApAQCAtMCwwICsxLDczNyBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBDb3B5cmlnaHQgKGMpIEZJUlNUIDIwMDguIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCQkJCQkJCSAgKi8NCisvKiBPcGVuIFNvdXJjZSBTb2Z0d2FyZSAtIG1heSBiZSBtb2RpZmllZCBhbmQgc2hhcmVkIGJ5IEZSQyB0ZWFtcy4gVGhlIGNvZGUgICAqLw0KKy8qIG11c3QgYmUgYWNjb21wYW5pZWQgYnkgdGhlIEZJUlNUIEJTRCBsaWNlbnNlIGZpbGUgaW4gJChXSU5EX0JBU0UpL1dQSUxpYi4gICovDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisjaW5jbHVkZSAiUm9ib3REcml2ZS5oIg0KKw0KKyNpbmNsdWRlICJDQU5KYWd1YXIuaCINCisjaW5jbHVkZSAiR2VuZXJpY0hJRC5oIg0KKyNpbmNsdWRlICJKb3lzdGljay5oIg0KKyNpbmNsdWRlICJKYWd1YXIuaCINCisjaW5jbHVkZSAiTmV0d29ya0NvbW11bmljYXRpb24vVXNhZ2VSZXBvcnRpbmcuaCINCisjaW5jbHVkZSAiVXRpbGl0eS5oIg0KKyNpbmNsdWRlICJXUElFcnJvcnMuaCINCisjaW5jbHVkZSA8bWF0aC5oPg0KKw0KKyNkZWZpbmUgbWF4KHgsIHkpICgoKHgpID4gKHkpKSA/ICh4KSA6ICh5KSkNCisNCitjb25zdCBJTlQzMiBSb2JvdERyaXZlOjprTWF4TnVtYmVyT2ZNb3RvcnM7DQorDQorLyoNCisgKiBEcml2aW5nIGZ1bmN0aW9ucw0KKyAqIFRoZXNlIGZ1bmN0aW9ucyBwcm92aWRlIGFuIGludGVyZmFjZSB0byBtdWx0aXBsZSBtb3RvcnMgdGhhdCBpcyB1c2VkIGZvciBDIHByb2dyYW1taW5nDQorICogVGhlIERyaXZlKHNwZWVkLCBkaXJlY3Rpb24pIGZ1bmN0aW9uIGlzIHRoZSBtYWluIHBhcnQgb2YgdGhlIHNldCB0aGF0IG1ha2VzIGl0IGVhc3kNCisgKiB0byBzZXQgc3BlZWRzIGFuZCBkaXJlY3Rpb24gaW5kZXBlbmRlbnRseSBpbiBvbmUgY2FsbC4NCisgKi8NCisNCisvKioNCisgKiBDb21tb24gZnVuY3Rpb24gdG8gaW5pdGlhbGl6ZSBhbGwgdGhlIHJvYm90IGRyaXZlIGNvbnN0cnVjdG9ycy4NCisgKiBDcmVhdGUgYSBtb3RvciBzYWZldHkgb2JqZWN0ICh0aGUgcmVhbCByZWFzb24gZm9yIHRoZSBjb21tb24gY29kZSkgYW5kDQorICogaW5pdGlhbGl6ZSBhbGwgdGhlIG1vdG9yIGFzc2lnbm1lbnRzLiBUaGUgZGVmYXVsdCB0aW1lb3V0IGlzIHNldCBmb3IgdGhlIHJvYm90IGRyaXZlLg0KKyAqLw0KK3ZvaWQgUm9ib3REcml2ZTo6SW5pdFJvYm90RHJpdmUoKSB7DQorCW1fZnJvbnRMZWZ0TW90b3IgPSBOVUxMOw0KKwltX2Zyb250UmlnaHRNb3RvciA9IE5VTEw7DQorCW1fcmVhclJpZ2h0TW90b3IgPSBOVUxMOw0KKwltX3JlYXJMZWZ0TW90b3IgPSBOVUxMOw0KKwltX3NlbnNpdGl2aXR5ID0gMC41Ow0KKwltX21heE91dHB1dCA9IDEuMDsNCisJbV9zYWZldHlIZWxwZXIgPSBuZXcgTW90b3JTYWZldHlIZWxwZXIodGhpcyk7DQorCW1fc2FmZXR5SGVscGVyLT5TZXRTYWZldHlFbmFibGVkKHRydWUpOw0KK30NCisNCisvKiogQ29uc3RydWN0b3IgZm9yIFJvYm90RHJpdmUgd2l0aCAyIG1vdG9ycyBzcGVjaWZpZWQgd2l0aCBjaGFubmVsIG51bWJlcnMuDQorICogU2V0IHVwIHBhcmFtZXRlcnMgZm9yIGEgdHdvIHdoZWVsIGRyaXZlIHN5c3RlbSB3aGVyZSB0aGUNCisgKiBsZWZ0IGFuZCByaWdodCBtb3RvciBwd20gY2hhbm5lbHMgYXJlIHNwZWNpZmllZCBpbiB0aGUgY2FsbC4NCisgKiBUaGlzIGNhbGwgYXNzdW1lcyBKYWd1YXJzIGZvciBjb250cm9sbGluZyB0aGUgbW90b3JzLg0KKyAqIEBwYXJhbSBsZWZ0TW90b3JDaGFubmVsIFRoZSBQV00gY2hhbm5lbCBudW1iZXIgb24gdGhlIGRlZmF1bHQgZGlnaXRhbCBtb2R1bGUgdGhhdCBkcml2ZXMgdGhlIGxlZnQgbW90b3IuDQorICogQHBhcmFtIHJpZ2h0TW90b3JDaGFubmVsIFRoZSBQV00gY2hhbm5lbCBudW1iZXIgb24gdGhlIGRlZmF1bHQgZGlnaXRhbCBtb2R1bGUgdGhhdCBkcml2ZXMgdGhlIHJpZ2h0IG1vdG9yLg0KKyAqLw0KK1JvYm90RHJpdmU6OlJvYm90RHJpdmUoVUlOVDMyIGxlZnRNb3RvckNoYW5uZWwsIFVJTlQzMiByaWdodE1vdG9yQ2hhbm5lbCkNCit7DQorCUluaXRSb2JvdERyaXZlKCk7DQorCW1fcmVhckxlZnRNb3RvciA9IG5ldyBKYWd1YXIobGVmdE1vdG9yQ2hhbm5lbCk7DQorCW1fcmVhclJpZ2h0TW90b3IgPSBuZXcgSmFndWFyKHJpZ2h0TW90b3JDaGFubmVsKTsNCisJZm9yIChJTlQzMiBpPTA7IGkgPCBrTWF4TnVtYmVyT2ZNb3RvcnM7IGkrKykNCisJew0KKwkJbV9pbnZlcnRlZE1vdG9yc1tpXSA9IDE7DQorCX0NCisJU2V0TGVmdFJpZ2h0TW90b3JPdXRwdXRzKDAuMCwgMC4wKTsNCisJbV9kZWxldGVTcGVlZENvbnRyb2xsZXJzID0gdHJ1ZTsNCit9DQorDQorLyoqDQorICogQ29uc3RydWN0b3IgZm9yIFJvYm90RHJpdmUgd2l0aCA0IG1vdG9ycyBzcGVjaWZpZWQgd2l0aCBjaGFubmVsIG51bWJlcnMuDQorICogU2V0IHVwIHBhcmFtZXRlcnMgZm9yIGEgZm91ciB3aGVlbCBkcml2ZSBzeXN0ZW0gd2hlcmUgYWxsIGZvdXIgbW90b3INCisgKiBwd20gY2hhbm5lbHMgYXJlIHNwZWNpZmllZCBpbiB0aGUgY2FsbC4NCisgKiBUaGlzIGNhbGwgYXNzdW1lcyBKYWd1YXJzIGZvciBjb250cm9sbGluZyB0aGUgbW90b3JzLg0KKyAqIEBwYXJhbSBmcm9udExlZnRNb3RvciBGcm9udCBsZWZ0IG1vdG9yIGNoYW5uZWwgbnVtYmVyIG9uIHRoZSBkZWZhdWx0IGRpZ2l0YWwgbW9kdWxlDQorICogQHBhcmFtIHJlYXJMZWZ0TW90b3IgUmVhciBMZWZ0IG1vdG9yIGNoYW5uZWwgbnVtYmVyIG9uIHRoZSBkZWZhdWx0IGRpZ2l0YWwgbW9kdWxlDQorICogQHBhcmFtIGZyb250UmlnaHRNb3RvciBGcm9udCByaWdodCBtb3RvciBjaGFubmVsIG51bWJlciBvbiB0aGUgZGVmYXVsdCBkaWdpdGFsIG1vZHVsZQ0KKyAqIEBwYXJhbSByZWFyUmlnaHRNb3RvciBSZWFyIFJpZ2h0IG1vdG9yIGNoYW5uZWwgbnVtYmVyIG9uIHRoZSBkZWZhdWx0IGRpZ2l0YWwgbW9kdWxlDQorICovDQorUm9ib3REcml2ZTo6Um9ib3REcml2ZShVSU5UMzIgZnJvbnRMZWZ0TW90b3IsIFVJTlQzMiByZWFyTGVmdE1vdG9yLA0KKwkJVUlOVDMyIGZyb250UmlnaHRNb3RvciwgVUlOVDMyIHJlYXJSaWdodE1vdG9yKQ0KK3sNCisJSW5pdFJvYm90RHJpdmUoKTsNCisJbV9yZWFyTGVmdE1vdG9yID0gbmV3IEphZ3VhcihyZWFyTGVmdE1vdG9yKTsNCisJbV9yZWFyUmlnaHRNb3RvciA9IG5ldyBKYWd1YXIocmVhclJpZ2h0TW90b3IpOw0KKwltX2Zyb250TGVmdE1vdG9yID0gbmV3IEphZ3Vhcihmcm9udExlZnRNb3Rvcik7DQorCW1fZnJvbnRSaWdodE1vdG9yID0gbmV3IEphZ3Vhcihmcm9udFJpZ2h0TW90b3IpOw0KKwlmb3IgKElOVDMyIGk9MDsgaSA8IGtNYXhOdW1iZXJPZk1vdG9yczsgaSsrKQ0KKwl7DQorCQltX2ludmVydGVkTW90b3JzW2ldID0gMTsNCisJfQ0KKwlTZXRMZWZ0UmlnaHRNb3Rvck91dHB1dHMoMC4wLCAwLjApOw0KKwltX2RlbGV0ZVNwZWVkQ29udHJvbGxlcnMgPSB0cnVlOw0KK30NCisNCisvKioNCisgKiBDb25zdHJ1Y3RvciBmb3IgUm9ib3REcml2ZSB3aXRoIDIgbW90b3JzIHNwZWNpZmllZCBhcyBTcGVlZENvbnRyb2xsZXIgb2JqZWN0cy4NCisgKiBUaGUgU3BlZWRDb250cm9sbGVyIHZlcnNpb24gb2YgdGhlIGNvbnN0cnVjdG9yIGVuYWJsZXMgcHJvZ3JhbXMgdG8gdXNlIHRoZSBSb2JvdERyaXZlIGNsYXNzZXMgd2l0aA0KKyAqIHN1YmNsYXNzZXMgb2YgdGhlIFNwZWVkQ29udHJvbGxlciBvYmplY3RzLCBmb3IgZXhhbXBsZSwgdmVyc2lvbnMgd2l0aCByYW1waW5nIG9yIHJlc2hhcGluZyBvZg0KKyAqIHRoZSBjdXJ2ZSB0byBzdWl0IG1vdG9yIGJpYXMgb3IgZGVhZGJhbmQgZWxpbWluYXRpb24uDQorICogQHBhcmFtIGxlZnRNb3RvciBUaGUgbGVmdCBTcGVlZENvbnRyb2xsZXIgb2JqZWN0IHVzZWQgdG8gZHJpdmUgdGhlIHJvYm90Lg0KKyAqIEBwYXJhbSByaWdodE1vdG9yIHRoZSByaWdodCBTcGVlZENvbnRyb2xsZXIgb2JqZWN0IHVzZWQgdG8gZHJpdmUgdGhlIHJvYm90Lg0KKyAqLw0KK1JvYm90RHJpdmU6OlJvYm90RHJpdmUoU3BlZWRDb250cm9sbGVyICpsZWZ0TW90b3IsIFNwZWVkQ29udHJvbGxlciAqcmlnaHRNb3RvcikNCit7DQorCUluaXRSb2JvdERyaXZlKCk7DQorCWlmIChsZWZ0TW90b3IgPT0gTlVMTCB8fCByaWdodE1vdG9yID09IE5VTEwpDQorCXsNCisJCXdwaV9zZXRXUElFcnJvcihOdWxsUGFyYW1ldGVyKTsNCisJCW1fcmVhckxlZnRNb3RvciA9IG1fcmVhclJpZ2h0TW90b3IgPSBOVUxMOw0KKwkJcmV0dXJuOw0KKwl9DQorCW1fcmVhckxlZnRNb3RvciA9IGxlZnRNb3RvcjsNCisJbV9yZWFyUmlnaHRNb3RvciA9IHJpZ2h0TW90b3I7DQorCWZvciAoSU5UMzIgaT0wOyBpIDwga01heE51bWJlck9mTW90b3JzOyBpKyspDQorCXsNCisJCW1faW52ZXJ0ZWRNb3RvcnNbaV0gPSAxOw0KKwl9DQorCW1fZGVsZXRlU3BlZWRDb250cm9sbGVycyA9IGZhbHNlOw0KK30NCisNCitSb2JvdERyaXZlOjpSb2JvdERyaXZlKFNwZWVkQ29udHJvbGxlciAmbGVmdE1vdG9yLCBTcGVlZENvbnRyb2xsZXIgJnJpZ2h0TW90b3IpDQorew0KKwlJbml0Um9ib3REcml2ZSgpOw0KKwltX3JlYXJMZWZ0TW90b3IgPSAmbGVmdE1vdG9yOw0KKwltX3JlYXJSaWdodE1vdG9yID0gJnJpZ2h0TW90b3I7DQorCWZvciAoSU5UMzIgaT0wOyBpIDwga01heE51bWJlck9mTW90b3JzOyBpKyspDQorCXsNCisJCW1faW52ZXJ0ZWRNb3RvcnNbaV0gPSAxOw0KKwl9DQorCW1fZGVsZXRlU3BlZWRDb250cm9sbGVycyA9IGZhbHNlOw0KK30NCisNCisvKioNCisgKiBDb25zdHJ1Y3RvciBmb3IgUm9ib3REcml2ZSB3aXRoIDQgbW90b3JzIHNwZWNpZmllZCBhcyBTcGVlZENvbnRyb2xsZXIgb2JqZWN0cy4NCisgKiBTcGVlZCBjb250cm9sbGVyIGlucHV0IHZlcnNpb24gb2YgUm9ib3REcml2ZSAoc2VlIHByZXZpb3VzIGNvbW1lbnRzKS4NCisgKiBAcGFyYW0gcmVhckxlZnRNb3RvciBUaGUgYmFjayBsZWZ0IFNwZWVkQ29udHJvbGxlciBvYmplY3QgdXNlZCB0byBkcml2ZSB0aGUgcm9ib3QuDQorICogQHBhcmFtIGZyb250TGVmdE1vdG9yIFRoZSBmcm9udCBsZWZ0IFNwZWVkQ29udHJvbGxlciBvYmplY3QgdXNlZCB0byBkcml2ZSB0aGUgcm9ib3QNCisgKiBAcGFyYW0gcmVhclJpZ2h0TW90b3IgVGhlIGJhY2sgcmlnaHQgU3BlZWRDb250cm9sbGVyIG9iamVjdCB1c2VkIHRvIGRyaXZlIHRoZSByb2JvdC4NCisgKiBAcGFyYW0gZnJvbnRSaWdodE1vdG9yIFRoZSBmcm9udCByaWdodCBTcGVlZENvbnRyb2xsZXIgb2JqZWN0IHVzZWQgdG8gZHJpdmUgdGhlIHJvYm90Lg0KKyAqLw0KK1JvYm90RHJpdmU6OlJvYm90RHJpdmUoU3BlZWRDb250cm9sbGVyICpmcm9udExlZnRNb3RvciwgU3BlZWRDb250cm9sbGVyICpyZWFyTGVmdE1vdG9yLA0KKwkJCQkJCVNwZWVkQ29udHJvbGxlciAqZnJvbnRSaWdodE1vdG9yLCBTcGVlZENvbnRyb2xsZXIgKnJlYXJSaWdodE1vdG9yKQ0KK3sNCisJSW5pdFJvYm90RHJpdmUoKTsNCisJaWYgKGZyb250TGVmdE1vdG9yID09IE5VTEwgfHwgcmVhckxlZnRNb3RvciA9PSBOVUxMIHx8IGZyb250UmlnaHRNb3RvciA9PSBOVUxMIHx8IHJlYXJSaWdodE1vdG9yID09IE5VTEwpDQorCXsNCisJCXdwaV9zZXRXUElFcnJvcihOdWxsUGFyYW1ldGVyKTsNCisJCXJldHVybjsNCisJfQ0KKwltX2Zyb250TGVmdE1vdG9yID0gZnJvbnRMZWZ0TW90b3I7DQorCW1fcmVhckxlZnRNb3RvciA9IHJlYXJMZWZ0TW90b3I7DQorCW1fZnJvbnRSaWdodE1vdG9yID0gZnJvbnRSaWdodE1vdG9yOw0KKwltX3JlYXJSaWdodE1vdG9yID0gcmVhclJpZ2h0TW90b3I7DQorCWZvciAoSU5UMzIgaT0wOyBpIDwga01heE51bWJlck9mTW90b3JzOyBpKyspDQorCXsNCisJCW1faW52ZXJ0ZWRNb3RvcnNbaV0gPSAxOw0KKwl9DQorCW1fZGVsZXRlU3BlZWRDb250cm9sbGVycyA9IGZhbHNlOw0KK30NCisNCitSb2JvdERyaXZlOjpSb2JvdERyaXZlKFNwZWVkQ29udHJvbGxlciAmZnJvbnRMZWZ0TW90b3IsIFNwZWVkQ29udHJvbGxlciAmcmVhckxlZnRNb3RvciwNCisJCQkJCQlTcGVlZENvbnRyb2xsZXIgJmZyb250UmlnaHRNb3RvciwgU3BlZWRDb250cm9sbGVyICZyZWFyUmlnaHRNb3RvcikNCit7DQorCUluaXRSb2JvdERyaXZlKCk7DQorCW1fZnJvbnRMZWZ0TW90b3IgPSAmZnJvbnRMZWZ0TW90b3I7DQorCW1fcmVhckxlZnRNb3RvciA9ICZyZWFyTGVmdE1vdG9yOw0KKwltX2Zyb250UmlnaHRNb3RvciA9ICZmcm9udFJpZ2h0TW90b3I7DQorCW1fcmVhclJpZ2h0TW90b3IgPSAmcmVhclJpZ2h0TW90b3I7DQorCWZvciAoSU5UMzIgaT0wOyBpIDwga01heE51bWJlck9mTW90b3JzOyBpKyspDQorCXsNCisJCW1faW52ZXJ0ZWRNb3RvcnNbaV0gPSAxOw0KKwl9DQorCW1fZGVsZXRlU3BlZWRDb250cm9sbGVycyA9IGZhbHNlOw0KK30NCisNCisvKioNCisgKiBSb2JvdERyaXZlIGRlc3RydWN0b3IuDQorICogRGVsZXRlcyBtb3RvciBvYmplY3RzIHRoYXQgd2VyZSBub3QgcGFzc2VkIGluIGFuZCBjcmVhdGVkIGludGVybmFsbHkgb25seS4NCisgKiovDQorUm9ib3REcml2ZTo6flJvYm90RHJpdmUoKQ0KK3sNCisJaWYgKG1fZGVsZXRlU3BlZWRDb250cm9sbGVycykNCisJew0KKwkJZGVsZXRlIG1fZnJvbnRMZWZ0TW90b3I7DQorCQlkZWxldGUgbV9yZWFyTGVmdE1vdG9yOw0KKwkJZGVsZXRlIG1fZnJvbnRSaWdodE1vdG9yOw0KKwkJZGVsZXRlIG1fcmVhclJpZ2h0TW90b3I7DQorCX0NCisJZGVsZXRlIG1fc2FmZXR5SGVscGVyOw0KK30NCisNCisvKioNCisgKiBEcml2ZSB0aGUgbW90b3JzIGF0ICJzcGVlZCIgYW5kICJjdXJ2ZSIuDQorICoNCisgKiBUaGUgc3BlZWQgYW5kIGN1cnZlIGFyZSAtMS4wIHRvICsxLjAgdmFsdWVzIHdoZXJlIDAuMCByZXByZXNlbnRzIHN0b3BwZWQgYW5kDQorICogbm90IHR1cm5pbmcuIFRoZSBhbGdvcml0aG0gZm9yIGFkZGluZyBpbiB0aGUgZGlyZWN0aW9uIGF0dGVtcHRzIHRvIHByb3ZpZGUgYSBjb25zdGFudA0KKyAqIHR1cm4gcmFkaXVzIGZvciBkaWZmZXJpbmcgc3BlZWRzLg0KKyAqDQorICogVGhpcyBmdW5jdGlvbiB3aWxsIG1vc3QgbGlrZWx5IGJlIHVzZWQgaW4gYW4gYXV0b25vbW91cyByb3V0aW5lLg0KKyAqDQorICogQHBhcmFtIG91dHB1dE1hZ25pdHVkZSBUaGUgZm9yd2FyZCBjb21wb25lbnQgb2YgdGhlIG91dHB1dCBtYWduaXR1ZGUgdG8gc2VuZCB0byB0aGUgbW90b3JzLg0KKyAqIEBwYXJhbSBjdXJ2ZSBUaGUgcmF0ZSBvZiB0dXJuLCBjb25zdGFudCBmb3IgZGlmZmVyZW50IGZvcndhcmQgc3BlZWRzLg0KKyAqLw0KK3ZvaWQgUm9ib3REcml2ZTo6RHJpdmUoZmxvYXQgb3V0cHV0TWFnbml0dWRlLCBmbG9hdCBjdXJ2ZSkNCit7DQorCWZsb2F0IGxlZnRPdXRwdXQsIHJpZ2h0T3V0cHV0Ow0KKwlzdGF0aWMgYm9vbCByZXBvcnRlZCA9IGZhbHNlOw0KKwlpZiAoIXJlcG9ydGVkKQ0KKwl7DQorCQluVXNhZ2VSZXBvcnRpbmc6OnJlcG9ydChuVXNhZ2VSZXBvcnRpbmc6OmtSZXNvdXJjZVR5cGVfUm9ib3REcml2ZSwgR2V0TnVtTW90b3JzKCksIG5Vc2FnZVJlcG9ydGluZzo6a1JvYm90RHJpdmVfQXJjYWRlUmF0aW9DdXJ2ZSk7DQorCQlyZXBvcnRlZCA9IHRydWU7DQorCX0NCisNCisJaWYgKGN1cnZlIDwgMCkNCisJew0KKwkJZmxvYXQgdmFsdWUgPSBsb2coLWN1cnZlKTsNCisJCWZsb2F0IHJhdGlvID0gKHZhbHVlIC0gbV9zZW5zaXRpdml0eSkvKHZhbHVlICsgbV9zZW5zaXRpdml0eSk7DQorCQlpZiAocmF0aW8gPT0gMCkgcmF0aW8gPS4wMDAwMDAwMDAxOw0KKwkJbGVmdE91dHB1dCA9IG91dHB1dE1hZ25pdHVkZSAvIHJhdGlvOw0KKwkJcmlnaHRPdXRwdXQgPSBvdXRwdXRNYWduaXR1ZGU7DQorCX0NCisJZWxzZSBpZiAoY3VydmUgPiAwKQ0KKwl7DQorCQlmbG9hdCB2YWx1ZSA9IGxvZyhjdXJ2ZSk7DQorCQlmbG9hdCByYXRpbyA9ICh2YWx1ZSAtIG1fc2Vuc2l0aXZpdHkpLyh2YWx1ZSArIG1fc2Vuc2l0aXZpdHkpOw0KKwkJaWYgKHJhdGlvID09IDApIHJhdGlvID0uMDAwMDAwMDAwMTsNCisJCWxlZnRPdXRwdXQgPSBvdXRwdXRNYWduaXR1ZGU7DQorCQlyaWdodE91dHB1dCA9IG91dHB1dE1hZ25pdHVkZSAvIHJhdGlvOw0KKwl9DQorCWVsc2UNCisJew0KKwkJbGVmdE91dHB1dCA9IG91dHB1dE1hZ25pdHVkZTsNCisJCXJpZ2h0T3V0cHV0ID0gb3V0cHV0TWFnbml0dWRlOw0KKwl9DQorCVNldExlZnRSaWdodE1vdG9yT3V0cHV0cyhsZWZ0T3V0cHV0LCByaWdodE91dHB1dCk7DQorfQ0KKw0KKy8qKg0KKyAqIFByb3ZpZGUgdGFuayBzdGVlcmluZyB1c2luZyB0aGUgc3RvcmVkIHJvYm90IGNvbmZpZ3VyYXRpb24uDQorICogRHJpdmUgdGhlIHJvYm90IHVzaW5nIHR3byBqb3lzdGljayBpbnB1dHMuIFRoZSBZLWF4aXMgd2lsbCBiZSBzZWxlY3RlZCBmcm9tDQorICogZWFjaCBKb3lzdGljayBvYmplY3QuDQorICogQHBhcmFtIGxlZnRTdGljayBUaGUgam95c3RpY2sgdG8gY29udHJvbCB0aGUgbGVmdCBzaWRlIG9mIHRoZSByb2JvdC4NCisgKiBAcGFyYW0gcmlnaHRTdGljayBUaGUgam95c3RpY2sgdG8gY29udHJvbCB0aGUgcmlnaHQgc2lkZSBvZiB0aGUgcm9ib3QuDQorICovDQordm9pZCBSb2JvdERyaXZlOjpUYW5rRHJpdmUoR2VuZXJpY0hJRCAqbGVmdFN0aWNrLCBHZW5lcmljSElEICpyaWdodFN0aWNrLCBib29sIHNxdWFyZWRJbnB1dHMpDQorew0KKwlpZiAobGVmdFN0aWNrID09IE5VTEwgfHwgcmlnaHRTdGljayA9PSBOVUxMKQ0KKwl7DQorCQl3cGlfc2V0V1BJRXJyb3IoTnVsbFBhcmFtZXRlcik7DQorCQlyZXR1cm47DQorCX0NCisJVGFua0RyaXZlKGxlZnRTdGljay0+R2V0WSgpLCByaWdodFN0aWNrLT5HZXRZKCksIHNxdWFyZWRJbnB1dHMpOw0KK30NCisNCit2b2lkIFJvYm90RHJpdmU6OlRhbmtEcml2ZShHZW5lcmljSElEICZsZWZ0U3RpY2ssIEdlbmVyaWNISUQgJnJpZ2h0U3RpY2ssIGJvb2wgc3F1YXJlZElucHV0cykNCit7DQorCVRhbmtEcml2ZShsZWZ0U3RpY2suR2V0WSgpLCByaWdodFN0aWNrLkdldFkoKSwgc3F1YXJlZElucHV0cyk7DQorfQ0KKw0KKy8qKg0KKyAqIFByb3ZpZGUgdGFuayBzdGVlcmluZyB1c2luZyB0aGUgc3RvcmVkIHJvYm90IGNvbmZpZ3VyYXRpb24uDQorICogVGhpcyBmdW5jdGlvbiBsZXRzIHlvdSBwaWNrIHRoZSBheGlzIHRvIGJlIHVzZWQgb24gZWFjaCBKb3lzdGljayBvYmplY3QgZm9yIHRoZSBsZWZ0DQorICogYW5kIHJpZ2h0IHNpZGVzIG9mIHRoZSByb2JvdC4NCisgKiBAcGFyYW0gbGVmdFN0aWNrIFRoZSBKb3lzdGljayBvYmplY3QgdG8gdXNlIGZvciB0aGUgbGVmdCBzaWRlIG9mIHRoZSByb2JvdC4NCisgKiBAcGFyYW0gbGVmdEF4aXMgVGhlIGF4aXMgdG8gc2VsZWN0IG9uIHRoZSBsZWZ0IHNpZGUgSm95c3RpY2sgb2JqZWN0Lg0KKyAqIEBwYXJhbSByaWdodFN0aWNrIFRoZSBKb3lzdGljayBvYmplY3QgdG8gdXNlIGZvciB0aGUgcmlnaHQgc2lkZSBvZiB0aGUgcm9ib3QuDQorICogQHBhcmFtIHJpZ2h0QXhpcyBUaGUgYXhpcyB0byBzZWxlY3Qgb24gdGhlIHJpZ2h0IHNpZGUgSm95c3RpY2sgb2JqZWN0Lg0KKyAqLw0KK3ZvaWQgUm9ib3REcml2ZTo6VGFua0RyaXZlKEdlbmVyaWNISUQgKmxlZnRTdGljaywgVUlOVDMyIGxlZnRBeGlzLA0KKwkJR2VuZXJpY0hJRCAqcmlnaHRTdGljaywgVUlOVDMyIHJpZ2h0QXhpcywgYm9vbCBzcXVhcmVkSW5wdXRzKQ0KK3sNCisJaWYgKGxlZnRTdGljayA9PSBOVUxMIHx8IHJpZ2h0U3RpY2sgPT0gTlVMTCkNCisJew0KKwkJd3BpX3NldFdQSUVycm9yKE51bGxQYXJhbWV0ZXIpOw0KKwkJcmV0dXJuOw0KKwl9DQorCVRhbmtEcml2ZShsZWZ0U3RpY2stPkdldFJhd0F4aXMobGVmdEF4aXMpLCByaWdodFN0aWNrLT5HZXRSYXdBeGlzKHJpZ2h0QXhpcyksIHNxdWFyZWRJbnB1dHMpOw0KK30NCisNCit2b2lkIFJvYm90RHJpdmU6OlRhbmtEcml2ZShHZW5lcmljSElEICZsZWZ0U3RpY2ssIFVJTlQzMiBsZWZ0QXhpcywNCisJCUdlbmVyaWNISUQgJnJpZ2h0U3RpY2ssIFVJTlQzMiByaWdodEF4aXMsIGJvb2wgc3F1YXJlZElucHV0cykNCit7DQorCVRhbmtEcml2ZShsZWZ0U3RpY2suR2V0UmF3QXhpcyhsZWZ0QXhpcyksIHJpZ2h0U3RpY2suR2V0UmF3QXhpcyhyaWdodEF4aXMpLCBzcXVhcmVkSW5wdXRzKTsNCit9DQorDQorDQorLyoqDQorICogUHJvdmlkZSB0YW5rIHN0ZWVyaW5nIHVzaW5nIHRoZSBzdG9yZWQgcm9ib3QgY29uZmlndXJhdGlvbi4NCisgKiBUaGlzIGZ1bmN0aW9uIGxldHMgeW91IGRpcmVjdGx5IHByb3ZpZGUgam95c3RpY2sgdmFsdWVzIGZyb20gYW55IHNvdXJjZS4NCisgKiBAcGFyYW0gbGVmdFZhbHVlIFRoZSB2YWx1ZSBvZiB0aGUgbGVmdCBzdGljay4NCisgKiBAcGFyYW0gcmlnaHRWYWx1ZSBUaGUgdmFsdWUgb2YgdGhlIHJpZ2h0IHN0aWNrLg0KKyAqLw0KK3ZvaWQgUm9ib3REcml2ZTo6VGFua0RyaXZlKGZsb2F0IGxlZnRWYWx1ZSwgZmxvYXQgcmlnaHRWYWx1ZSwgYm9vbCBzcXVhcmVkSW5wdXRzKQ0KK3sNCisJc3RhdGljIGJvb2wgcmVwb3J0ZWQgPSBmYWxzZTsNCisJaWYgKCFyZXBvcnRlZCkNCisJew0KKwkJblVzYWdlUmVwb3J0aW5nOjpyZXBvcnQoblVzYWdlUmVwb3J0aW5nOjprUmVzb3VyY2VUeXBlX1JvYm90RHJpdmUsIEdldE51bU1vdG9ycygpLCBuVXNhZ2VSZXBvcnRpbmc6OmtSb2JvdERyaXZlX1RhbmspOw0KKwkJcmVwb3J0ZWQgPSB0cnVlOw0KKwl9DQorDQorCS8vIHNxdWFyZSB0aGUgaW5wdXRzICh3aGlsZSBwcmVzZXJ2aW5nIHRoZSBzaWduKSB0byBpbmNyZWFzZSBmaW5lIGNvbnRyb2wgd2hpbGUgcGVybWl0dGluZyBmdWxsIHBvd2VyDQorCWxlZnRWYWx1ZSA9IExpbWl0KGxlZnRWYWx1ZSk7DQorCXJpZ2h0VmFsdWUgPSBMaW1pdChyaWdodFZhbHVlKTsNCisJaWYoc3F1YXJlZElucHV0cykNCisJew0KKwkJaWYgKGxlZnRWYWx1ZSA+PSAwLjApDQorCQl7DQorCQkJbGVmdFZhbHVlID0gKGxlZnRWYWx1ZSAqIGxlZnRWYWx1ZSk7DQorCQl9DQorCQllbHNlDQorCQl7DQorCQkJbGVmdFZhbHVlID0gLShsZWZ0VmFsdWUgKiBsZWZ0VmFsdWUpOw0KKwkJfQ0KKwkJaWYgKHJpZ2h0VmFsdWUgPj0gMC4wKQ0KKwkJew0KKwkJCXJpZ2h0VmFsdWUgPSAocmlnaHRWYWx1ZSAqIHJpZ2h0VmFsdWUpOw0KKwkJfQ0KKwkJZWxzZQ0KKwkJew0KKwkJCXJpZ2h0VmFsdWUgPSAtKHJpZ2h0VmFsdWUgKiByaWdodFZhbHVlKTsNCisJCX0NCisJfQ0KKw0KKwlTZXRMZWZ0UmlnaHRNb3Rvck91dHB1dHMobGVmdFZhbHVlLCByaWdodFZhbHVlKTsNCit9DQorDQorLyoqDQorICogQXJjYWRlIGRyaXZlIGltcGxlbWVudHMgc2luZ2xlIHN0aWNrIGRyaXZpbmcuDQorICogR2l2ZW4gYSBzaW5nbGUgSm95c3RpY2ssIHRoZSBjbGFzcyBhc3N1bWVzIHRoZSBZIGF4aXMgZm9yIHRoZSBtb3ZlIHZhbHVlIGFuZCB0aGUgWCBheGlzDQorICogZm9yIHRoZSByb3RhdGUgdmFsdWUuDQorICogKFNob3VsZCBhZGQgbW9yZSBpbmZvcm1hdGlvbiBoZXJlIHJlZ2FyZGluZyB0aGUgd2F5IHRoYXQgYXJjYWRlIGRyaXZlIHdvcmtzLikNCisgKiBAcGFyYW0gc3RpY2sgVGhlIGpveXN0aWNrIHRvIHVzZSBmb3IgQXJjYWRlIHNpbmdsZS1zdGljayBkcml2aW5nLiBUaGUgWS1heGlzIHdpbGwgYmUgc2VsZWN0ZWQNCisgKiBmb3IgZm9yd2FyZHMvYmFja3dhcmRzIGFuZCB0aGUgWC1heGlzIHdpbGwgYmUgc2VsZWN0ZWQgZm9yIHJvdGF0aW9uIHJhdGUuDQorICogQHBhcmFtIHNxdWFyZWRJbnB1dHMgSWYgdHJ1ZSwgdGhlIHNlbnNpdGl2aXR5IHdpbGwgYmUgaW5jcmVhc2VkIGZvciBzbWFsbCB2YWx1ZXMNCisgKi8NCit2b2lkIFJvYm90RHJpdmU6OkFyY2FkZURyaXZlKEdlbmVyaWNISUQgKnN0aWNrLCBib29sIHNxdWFyZWRJbnB1dHMpDQorew0KKwkvLyBzaW1wbHkgY2FsbCB0aGUgZnVsbC1mZWF0dXJlZCBBcmNhZGVEcml2ZSB3aXRoIHRoZSBhcHByb3ByaWF0ZSB2YWx1ZXMNCisJQXJjYWRlRHJpdmUoc3RpY2stPkdldFkoKSwgc3RpY2stPkdldFgoKSwgc3F1YXJlZElucHV0cyk7DQorfQ0KKw0KKy8qKg0KKyAqIEFyY2FkZSBkcml2ZSBpbXBsZW1lbnRzIHNpbmdsZSBzdGljayBkcml2aW5nLg0KKyAqIEdpdmVuIGEgc2luZ2xlIEpveXN0aWNrLCB0aGUgY2xhc3MgYXNzdW1lcyB0aGUgWSBheGlzIGZvciB0aGUgbW92ZSB2YWx1ZSBhbmQgdGhlIFggYXhpcw0KKyAqIGZvciB0aGUgcm90YXRlIHZhbHVlLg0KKyAqIChTaG91bGQgYWRkIG1vcmUgaW5mb3JtYXRpb24gaGVyZSByZWdhcmRpbmcgdGhlIHdheSB0aGF0IGFyY2FkZSBkcml2ZSB3b3Jrcy4pDQorICogQHBhcmFtIHN0aWNrIFRoZSBqb3lzdGljayB0byB1c2UgZm9yIEFyY2FkZSBzaW5nbGUtc3RpY2sgZHJpdmluZy4gVGhlIFktYXhpcyB3aWxsIGJlIHNlbGVjdGVkDQorICogZm9yIGZvcndhcmRzL2JhY2t3YXJkcyBhbmQgdGhlIFgtYXhpcyB3aWxsIGJlIHNlbGVjdGVkIGZvciByb3RhdGlvbiByYXRlLg0KKyAqIEBwYXJhbSBzcXVhcmVkSW5wdXRzIElmIHRydWUsIHRoZSBzZW5zaXRpdml0eSB3aWxsIGJlIGluY3JlYXNlZCBmb3Igc21hbGwgdmFsdWVzDQorICovDQordm9pZCBSb2JvdERyaXZlOjpBcmNhZGVEcml2ZShHZW5lcmljSElEICZzdGljaywgYm9vbCBzcXVhcmVkSW5wdXRzKQ0KK3sNCisJLy8gc2ltcGx5IGNhbGwgdGhlIGZ1bGwtZmVhdHVyZWQgQXJjYWRlRHJpdmUgd2l0aCB0aGUgYXBwcm9wcmlhdGUgdmFsdWVzDQorCUFyY2FkZURyaXZlKHN0aWNrLkdldFkoKSwgc3RpY2suR2V0WCgpLCBzcXVhcmVkSW5wdXRzKTsNCit9DQorDQorLyoqDQorICogQXJjYWRlIGRyaXZlIGltcGxlbWVudHMgc2luZ2xlIHN0aWNrIGRyaXZpbmcuDQorICogR2l2ZW4gdHdvIGpveXN0aWNrIGluc3RhbmNlcyBhbmQgdHdvIGF4aXMsIGNvbXB1dGUgdGhlIHZhbHVlcyB0byBzZW5kIHRvIGVpdGhlciB0d28NCisgKiBvciBmb3VyIG1vdG9ycy4NCisgKiBAcGFyYW0gbW92ZVN0aWNrIFRoZSBKb3lzdGljayBvYmplY3QgdGhhdCByZXByZXNlbnRzIHRoZSBmb3J3YXJkL2JhY2t3YXJkIGRpcmVjdGlvbg0KKyAqIEBwYXJhbSBtb3ZlQXhpcyBUaGUgYXhpcyBvbiB0aGUgbW92ZVN0aWNrIG9iamVjdCB0byB1c2UgZm9yIGZvd2FyZHMvYmFja3dhcmRzICh0eXBpY2FsbHkgWV9BWElTKQ0KKyAqIEBwYXJhbSByb3RhdGVTdGljayBUaGUgSm95c3RpY2sgb2JqZWN0IHRoYXQgcmVwcmVzZW50cyB0aGUgcm90YXRpb24gdmFsdWUNCisgKiBAcGFyYW0gcm90YXRlQXhpcyBUaGUgYXhpcyBvbiB0aGUgcm90YXRpb24gb2JqZWN0IHRvIHVzZSBmb3IgdGhlIHJvdGF0ZSByaWdodC9sZWZ0ICh0eXBpY2FsbHkgWF9BWElTKQ0KKyAqIEBwYXJhbSBzcXVhcmVkSW5wdXRzIFNldHRpbmcgdGhpcyBwYXJhbWV0ZXIgdG8gdHJ1ZSBpbmNyZWFzZXMgdGhlIHNlbnNpdGl2aXR5IGF0IGxvd2VyIHNwZWVkcw0KKyAqLw0KK3ZvaWQgUm9ib3REcml2ZTo6QXJjYWRlRHJpdmUoR2VuZXJpY0hJRCogbW92ZVN0aWNrLCBVSU5UMzIgbW92ZUF4aXMsDQorCQkJCQkJCQlHZW5lcmljSElEKiByb3RhdGVTdGljaywgVUlOVDMyIHJvdGF0ZUF4aXMsDQorCQkJCQkJCQlib29sIHNxdWFyZWRJbnB1dHMpDQorew0KKwlmbG9hdCBtb3ZlVmFsdWUgPSBtb3ZlU3RpY2stPkdldFJhd0F4aXMobW92ZUF4aXMpOw0KKwlmbG9hdCByb3RhdGVWYWx1ZSA9IHJvdGF0ZVN0aWNrLT5HZXRSYXdBeGlzKHJvdGF0ZUF4aXMpOw0KKw0KKwlBcmNhZGVEcml2ZShtb3ZlVmFsdWUsIHJvdGF0ZVZhbHVlLCBzcXVhcmVkSW5wdXRzKTsNCit9DQorDQorLyoqDQorICogQXJjYWRlIGRyaXZlIGltcGxlbWVudHMgc2luZ2xlIHN0aWNrIGRyaXZpbmcuDQorICogR2l2ZW4gdHdvIGpveXN0aWNrIGluc3RhbmNlcyBhbmQgdHdvIGF4aXMsIGNvbXB1dGUgdGhlIHZhbHVlcyB0byBzZW5kIHRvIGVpdGhlciB0d28NCisgKiBvciBmb3VyIG1vdG9ycy4NCisgKiBAcGFyYW0gbW92ZVN0aWNrIFRoZSBKb3lzdGljayBvYmplY3QgdGhhdCByZXByZXNlbnRzIHRoZSBmb3J3YXJkL2JhY2t3YXJkIGRpcmVjdGlvbg0KKyAqIEBwYXJhbSBtb3ZlQXhpcyBUaGUgYXhpcyBvbiB0aGUgbW92ZVN0aWNrIG9iamVjdCB0byB1c2UgZm9yIGZvd2FyZHMvYmFja3dhcmRzICh0eXBpY2FsbHkgWV9BWElTKQ0KKyAqIEBwYXJhbSByb3RhdGVTdGljayBUaGUgSm95c3RpY2sgb2JqZWN0IHRoYXQgcmVwcmVzZW50cyB0aGUgcm90YXRpb24gdmFsdWUNCisgKiBAcGFyYW0gcm90YXRlQXhpcyBUaGUgYXhpcyBvbiB0aGUgcm90YXRpb24gb2JqZWN0IHRvIHVzZSBmb3IgdGhlIHJvdGF0ZSByaWdodC9sZWZ0ICh0eXBpY2FsbHkgWF9BWElTKQ0KKyAqIEBwYXJhbSBzcXVhcmVkSW5wdXRzIFNldHRpbmcgdGhpcyBwYXJhbWV0ZXIgdG8gdHJ1ZSBpbmNyZWFzZXMgdGhlIHNlbnNpdGl2aXR5IGF0IGxvd2VyIHNwZWVkcw0KKyAqLw0KKw0KK3ZvaWQgUm9ib3REcml2ZTo6QXJjYWRlRHJpdmUoR2VuZXJpY0hJRCAmbW92ZVN0aWNrLCBVSU5UMzIgbW92ZUF4aXMsDQorCQkJCQkJCQlHZW5lcmljSElEICZyb3RhdGVTdGljaywgVUlOVDMyIHJvdGF0ZUF4aXMsDQorCQkJCQkJCQlib29sIHNxdWFyZWRJbnB1dHMpDQorew0KKwlmbG9hdCBtb3ZlVmFsdWUgPSBtb3ZlU3RpY2suR2V0UmF3QXhpcyhtb3ZlQXhpcyk7DQorCWZsb2F0IHJvdGF0ZVZhbHVlID0gcm90YXRlU3RpY2suR2V0UmF3QXhpcyhyb3RhdGVBeGlzKTsNCisNCisJQXJjYWRlRHJpdmUobW92ZVZhbHVlLCByb3RhdGVWYWx1ZSwgc3F1YXJlZElucHV0cyk7DQorfQ0KKw0KKy8qKg0KKyAqIEFyY2FkZSBkcml2ZSBpbXBsZW1lbnRzIHNpbmdsZSBzdGljayBkcml2aW5nLg0KKyAqIFRoaXMgZnVuY3Rpb24gbGV0cyB5b3UgZGlyZWN0bHkgcHJvdmlkZSBqb3lzdGljayB2YWx1ZXMgZnJvbSBhbnkgc291cmNlLg0KKyAqIEBwYXJhbSBtb3ZlVmFsdWUgVGhlIHZhbHVlIHRvIHVzZSBmb3IgZm93YXJkcy9iYWNrd2FyZHMNCisgKiBAcGFyYW0gcm90YXRlVmFsdWUgVGhlIHZhbHVlIHRvIHVzZSBmb3IgdGhlIHJvdGF0ZSByaWdodC9sZWZ0DQorICogQHBhcmFtIHNxdWFyZWRJbnB1dHMgSWYgc2V0LCBpbmNyZWFzZXMgdGhlIHNlbnNpdGl2aXR5IGF0IGxvdyBzcGVlZHMNCisgKi8NCit2b2lkIFJvYm90RHJpdmU6OkFyY2FkZURyaXZlKGZsb2F0IG1vdmVWYWx1ZSwgZmxvYXQgcm90YXRlVmFsdWUsIGJvb2wgc3F1YXJlZElucHV0cykNCit7DQorCXN0YXRpYyBib29sIHJlcG9ydGVkID0gZmFsc2U7DQorCWlmICghcmVwb3J0ZWQpDQorCXsNCisJCW5Vc2FnZVJlcG9ydGluZzo6cmVwb3J0KG5Vc2FnZVJlcG9ydGluZzo6a1Jlc291cmNlVHlwZV9Sb2JvdERyaXZlLCBHZXROdW1Nb3RvcnMoKSwgblVzYWdlUmVwb3J0aW5nOjprUm9ib3REcml2ZV9BcmNhZGVTdGFuZGFyZCk7DQorCQlyZXBvcnRlZCA9IHRydWU7DQorCX0NCisNCisJLy8gbG9jYWwgdmFyaWFibGVzIHRvIGhvbGQgdGhlIGNvbXB1dGVkIFBXTSB2YWx1ZXMgZm9yIHRoZSBtb3RvcnMNCisJZmxvYXQgbGVmdE1vdG9yT3V0cHV0Ow0KKwlmbG9hdCByaWdodE1vdG9yT3V0cHV0Ow0KKw0KKwltb3ZlVmFsdWUgPSBMaW1pdChtb3ZlVmFsdWUpOw0KKwlyb3RhdGVWYWx1ZSA9IExpbWl0KHJvdGF0ZVZhbHVlKTsNCisNCisJaWYgKHNxdWFyZWRJbnB1dHMpDQorCXsNCisJCS8vIHNxdWFyZSB0aGUgaW5wdXRzICh3aGlsZSBwcmVzZXJ2aW5nIHRoZSBzaWduKSB0byBpbmNyZWFzZSBmaW5lIGNvbnRyb2wgd2hpbGUgcGVybWl0dGluZyBmdWxsIHBvd2VyDQorCQlpZiAobW92ZVZhbHVlID49IDAuMCkNCisJCXsNCisJCQltb3ZlVmFsdWUgPSAobW92ZVZhbHVlICogbW92ZVZhbHVlKTsNCisJCX0NCisJCWVsc2UNCisJCXsNCisJCQltb3ZlVmFsdWUgPSAtKG1vdmVWYWx1ZSAqIG1vdmVWYWx1ZSk7DQorCQl9DQorCQlpZiAocm90YXRlVmFsdWUgPj0gMC4wKQ0KKwkJew0KKwkJCXJvdGF0ZVZhbHVlID0gKHJvdGF0ZVZhbHVlICogcm90YXRlVmFsdWUpOw0KKwkJfQ0KKwkJZWxzZQ0KKwkJew0KKwkJCXJvdGF0ZVZhbHVlID0gLShyb3RhdGVWYWx1ZSAqIHJvdGF0ZVZhbHVlKTsNCisJCX0NCisJfQ0KKw0KKwlpZiAobW92ZVZhbHVlID4gMC4wKQ0KKwl7DQorCQlpZiAocm90YXRlVmFsdWUgPiAwLjApDQorCQl7DQorCQkJbGVmdE1vdG9yT3V0cHV0ID0gbW92ZVZhbHVlIC0gcm90YXRlVmFsdWU7DQorCQkJcmlnaHRNb3Rvck91dHB1dCA9IG1heChtb3ZlVmFsdWUsIHJvdGF0ZVZhbHVlKTsNCisJCX0NCisJCWVsc2UNCisJCXsNCisJCQlsZWZ0TW90b3JPdXRwdXQgPSBtYXgobW92ZVZhbHVlLCAtcm90YXRlVmFsdWUpOw0KKwkJCXJpZ2h0TW90b3JPdXRwdXQgPSBtb3ZlVmFsdWUgKyByb3RhdGVWYWx1ZTsNCisJCX0NCisJfQ0KKwllbHNlDQorCXsNCisJCWlmIChyb3RhdGVWYWx1ZSA+IDAuMCkNCisJCXsNCisJCQlsZWZ0TW90b3JPdXRwdXQgPSAtIG1heCgtbW92ZVZhbHVlLCByb3RhdGVWYWx1ZSk7DQorCQkJcmlnaHRNb3Rvck91dHB1dCA9IG1vdmVWYWx1ZSArIHJvdGF0ZVZhbHVlOw0KKwkJfQ0KKwkJZWxzZQ0KKwkJew0KKwkJCWxlZnRNb3Rvck91dHB1dCA9IG1vdmVWYWx1ZSAtIHJvdGF0ZVZhbHVlOw0KKwkJCXJpZ2h0TW90b3JPdXRwdXQgPSAtIG1heCgtbW92ZVZhbHVlLCAtcm90YXRlVmFsdWUpOw0KKwkJfQ0KKwl9DQorCVNldExlZnRSaWdodE1vdG9yT3V0cHV0cyhsZWZ0TW90b3JPdXRwdXQsIHJpZ2h0TW90b3JPdXRwdXQpOw0KK30NCisNCisvKioNCisgKiBEcml2ZSBtZXRob2QgZm9yIE1lY2FudW0gd2hlZWxlZCByb2JvdHMuDQorICoNCisgKiBBIG1ldGhvZCBmb3IgZHJpdmluZyB3aXRoIE1lY2FudW0gd2hlZWxlZCByb2JvdHMuIFRoZXJlIGFyZSA0IHdoZWVscw0KKyAqIG9uIHRoZSByb2JvdCwgYXJyYW5nZWQgc28gdGhhdCB0aGUgZnJvbnQgYW5kIGJhY2sgd2hlZWxzIGFyZSB0b2VkIGluIDQ1IGRlZ3JlZXMuDQorICogV2hlbiBsb29raW5nIGF0IHRoZSB3aGVlbHMgZnJvbSB0aGUgdG9wLCB0aGUgcm9sbGVyIGF4bGVzIHNob3VsZCBmb3JtIGFuIFggYWNyb3NzIHRoZSByb2JvdC4NCisgKiANCisgKiBUaGlzIGlzIGRlc2lnbmVkIHRvIGJlIGRpcmVjdGx5IGRyaXZlbiBieSBqb3lzdGljayBheGVzLg0KKyAqDQorICogQHBhcmFtIHggVGhlIHNwZWVkIHRoYXQgdGhlIHJvYm90IHNob3VsZCBkcml2ZSBpbiB0aGUgWCBkaXJlY3Rpb24uIFstMS4wLi4xLjBdDQorICogQHBhcmFtIHkgVGhlIHNwZWVkIHRoYXQgdGhlIHJvYm90IHNob3VsZCBkcml2ZSBpbiB0aGUgWSBkaXJlY3Rpb24uDQorICogVGhpcyBpbnB1dCBpcyBpbnZlcnRlZCB0byBtYXRjaCB0aGUgZm9yd2FyZCA9PSAtMS4wIHRoYXQgam95c3RpY2tzIHByb2R1Y2UuIFstMS4wLi4xLjBdDQorICogQHBhcmFtIHJvdGF0aW9uIFRoZSByYXRlIG9mIHJvdGF0aW9uIGZvciB0aGUgcm9ib3QgdGhhdCBpcyBjb21wbGV0ZWx5IGluZGVwZW5kZW50IG9mDQorICogdGhlIHRyYW5zbGF0aW9uLiBbLTEuMC4uMS4wXQ0KKyAqIEBwYXJhbSBneXJvQW5nbGUgVGhlIGN1cnJlbnQgYW5nbGUgcmVhZGluZyBmcm9tIHRoZSBneXJvLiAgVXNlIHRoaXMgdG8gaW1wbGVtZW50IGZpZWxkLW9yaWVudGVkIGNvbnRyb2xzLg0KKyAqLw0KK3ZvaWQgUm9ib3REcml2ZTo6TWVjYW51bURyaXZlX0NhcnRlc2lhbihmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCByb3RhdGlvbiwgZmxvYXQgZ3lyb0FuZ2xlKQ0KK3sNCisJc3RhdGljIGJvb2wgcmVwb3J0ZWQgPSBmYWxzZTsNCisJaWYgKCFyZXBvcnRlZCkNCisJew0KKwkJblVzYWdlUmVwb3J0aW5nOjpyZXBvcnQoblVzYWdlUmVwb3J0aW5nOjprUmVzb3VyY2VUeXBlX1JvYm90RHJpdmUsIEdldE51bU1vdG9ycygpLCBuVXNhZ2VSZXBvcnRpbmc6OmtSb2JvdERyaXZlX01lY2FudW1DYXJ0ZXNpYW4pOw0KKwkJcmVwb3J0ZWQgPSB0cnVlOw0KKwl9DQorDQorCWRvdWJsZSB4SW4gPSB4Ow0KKwlkb3VibGUgeUluID0geTsNCisJLy8gTmVnYXRlIHkgZm9yIHRoZSBqb3lzdGljay4NCisJeUluID0gLXlJbjsNCisJLy8gQ29tcGVuc3RhdGUgZm9yIGd5cm8gYW5nbGUuDQorCVJvdGF0ZVZlY3Rvcih4SW4sIHlJbiwgZ3lyb0FuZ2xlKTsNCisNCisJZG91YmxlIHdoZWVsU3BlZWRzW2tNYXhOdW1iZXJPZk1vdG9yc107DQorCXdoZWVsU3BlZWRzW2tGcm9udExlZnRNb3Rvcl0gPSB4SW4gKyB5SW4gKyByb3RhdGlvbjsNCisJd2hlZWxTcGVlZHNba0Zyb250UmlnaHRNb3Rvcl0gPSAteEluICsgeUluIC0gcm90YXRpb247DQorCXdoZWVsU3BlZWRzW2tSZWFyTGVmdE1vdG9yXSA9IC14SW4gKyB5SW4gKyByb3RhdGlvbjsNCisJd2hlZWxTcGVlZHNba1JlYXJSaWdodE1vdG9yXSA9IHhJbiArIHlJbiAtIHJvdGF0aW9uOw0KKw0KKwlOb3JtYWxpemUod2hlZWxTcGVlZHMpOw0KKw0KKwlVSU5UOCBzeW5jR3JvdXAgPSAweDgwOw0KKw0KKwltX2Zyb250TGVmdE1vdG9yLT5TZXQod2hlZWxTcGVlZHNba0Zyb250TGVmdE1vdG9yXSAqIG1faW52ZXJ0ZWRNb3RvcnNba0Zyb250TGVmdE1vdG9yXSAqIG1fbWF4T3V0cHV0LCBzeW5jR3JvdXApOw0KKwltX2Zyb250UmlnaHRNb3Rvci0+U2V0KHdoZWVsU3BlZWRzW2tGcm9udFJpZ2h0TW90b3JdICogbV9pbnZlcnRlZE1vdG9yc1trRnJvbnRSaWdodE1vdG9yXSAqIG1fbWF4T3V0cHV0LCBzeW5jR3JvdXApOw0KKwltX3JlYXJMZWZ0TW90b3ItPlNldCh3aGVlbFNwZWVkc1trUmVhckxlZnRNb3Rvcl0gKiBtX2ludmVydGVkTW90b3JzW2tSZWFyTGVmdE1vdG9yXSAqIG1fbWF4T3V0cHV0LCBzeW5jR3JvdXApOw0KKwltX3JlYXJSaWdodE1vdG9yLT5TZXQod2hlZWxTcGVlZHNba1JlYXJSaWdodE1vdG9yXSAqIG1faW52ZXJ0ZWRNb3RvcnNba1JlYXJSaWdodE1vdG9yXSAqIG1fbWF4T3V0cHV0LCBzeW5jR3JvdXApOw0KKw0KKwlDQU5KYWd1YXI6OlVwZGF0ZVN5bmNHcm91cChzeW5jR3JvdXApOw0KKwkNCisJbV9zYWZldHlIZWxwZXItPkZlZWQoKTsNCit9DQorDQorLyoqDQorICogRHJpdmUgbWV0aG9kIGZvciBNZWNhbnVtIHdoZWVsZWQgcm9ib3RzLg0KKyAqDQorICogQSBtZXRob2QgZm9yIGRyaXZpbmcgd2l0aCBNZWNhbnVtIHdoZWVsZWQgcm9ib3RzLiBUaGVyZSBhcmUgNCB3aGVlbHMNCisgKiBvbiB0aGUgcm9ib3QsIGFycmFuZ2VkIHNvIHRoYXQgdGhlIGZyb250IGFuZCBiYWNrIHdoZWVscyBhcmUgdG9lZCBpbiA0NSBkZWdyZWVzLg0KKyAqIFdoZW4gbG9va2luZyBhdCB0aGUgd2hlZWxzIGZyb20gdGhlIHRvcCwgdGhlIHJvbGxlciBheGxlcyBzaG91bGQgZm9ybSBhbiBYIGFjcm9zcyB0aGUgcm9ib3QuDQorICoNCisgKiBAcGFyYW0gbWFnbml0dWRlIFRoZSBzcGVlZCB0aGF0IHRoZSByb2JvdCBzaG91bGQgZHJpdmUgaW4gYSBnaXZlbiBkaXJlY3Rpb24uIFstMS4wLi4xLjBdDQorICogQHBhcmFtIGRpcmVjdGlvbiBUaGUgZGlyZWN0aW9uIHRoZSByb2JvdCBzaG91bGQgZHJpdmUgaW4gZGVncmVlcy4gVGhlIGRpcmVjdGlvbiBhbmQgbWFnaW5pdHV0ZSBhcmUNCisgKiBpbmRlcGVuZGVudCBvZiB0aGUgcm90YXRpb24gcmF0ZS4NCisgKiBAcGFyYW0gcm90YXRpb24gVGhlIHJhdGUgb2Ygcm90YXRpb24gZm9yIHRoZSByb2JvdCB0aGF0IGlzIGNvbXBsZXRlbHkgaW5kZXBlbmRlbnQgb2YNCisgKiB0aGUgbWFnbml0dXRlIG9yIGRpcmVjdGlvbi4gWy0xLjAuLjEuMF0NCisgKi8NCit2b2lkIFJvYm90RHJpdmU6Ok1lY2FudW1Ecml2ZV9Qb2xhcihmbG9hdCBtYWduaXR1ZGUsIGZsb2F0IGRpcmVjdGlvbiwgZmxvYXQgcm90YXRpb24pDQorew0KKwlzdGF0aWMgYm9vbCByZXBvcnRlZCA9IGZhbHNlOw0KKwlpZiAoIXJlcG9ydGVkKQ0KKwl7DQorCQluVXNhZ2VSZXBvcnRpbmc6OnJlcG9ydChuVXNhZ2VSZXBvcnRpbmc6OmtSZXNvdXJjZVR5cGVfUm9ib3REcml2ZSwgR2V0TnVtTW90b3JzKCksIG5Vc2FnZVJlcG9ydGluZzo6a1JvYm90RHJpdmVfTWVjYW51bVBvbGFyKTsNCisJCXJlcG9ydGVkID0gdHJ1ZTsNCisJfQ0KKw0KKwkvLyBOb3JtYWxpemVkIGZvciBmdWxsIHBvd2VyIGFsb25nIHRoZSBDYXJ0ZXNpYW4gYXhlcy4NCisJbWFnbml0dWRlID0gTGltaXQobWFnbml0dWRlKSAqIHNxcnQoMi4wKTsNCisJLy8gVGhlIHJvbGxlcnMgYXJlIGF0IDQ1IGRlZ3JlZSBhbmdsZXMuDQorCWRvdWJsZSBkaXJJblJhZCA9IChkaXJlY3Rpb24gKyA0NS4wKSAqIDMuMTQxNTkgLyAxODAuMDsNCisJZG91YmxlIGNvc0QgPSBjb3MoZGlySW5SYWQpOw0KKwlkb3VibGUgc2luRCA9IHNpbihkaXJJblJhZCk7DQorDQorCWRvdWJsZSB3aGVlbFNwZWVkc1trTWF4TnVtYmVyT2ZNb3RvcnNdOw0KKwl3aGVlbFNwZWVkc1trRnJvbnRMZWZ0TW90b3JdID0gc2luRCAqIG1hZ25pdHVkZSArIHJvdGF0aW9uOw0KKwl3aGVlbFNwZWVkc1trRnJvbnRSaWdodE1vdG9yXSA9IGNvc0QgKiBtYWduaXR1ZGUgLSByb3RhdGlvbjsNCisJd2hlZWxTcGVlZHNba1JlYXJMZWZ0TW90b3JdID0gY29zRCAqIG1hZ25pdHVkZSArIHJvdGF0aW9uOw0KKwl3aGVlbFNwZWVkc1trUmVhclJpZ2h0TW90b3JdID0gc2luRCAqIG1hZ25pdHVkZSAtIHJvdGF0aW9uOw0KKw0KKwlOb3JtYWxpemUod2hlZWxTcGVlZHMpOw0KKw0KKwlVSU5UOCBzeW5jR3JvdXAgPSAweDgwOw0KKw0KKwltX2Zyb250TGVmdE1vdG9yLT5TZXQod2hlZWxTcGVlZHNba0Zyb250TGVmdE1vdG9yXSAqIG1faW52ZXJ0ZWRNb3RvcnNba0Zyb250TGVmdE1vdG9yXSAqIG1fbWF4T3V0cHV0LCBzeW5jR3JvdXApOw0KKwltX2Zyb250UmlnaHRNb3Rvci0+U2V0KHdoZWVsU3BlZWRzW2tGcm9udFJpZ2h0TW90b3JdICogbV9pbnZlcnRlZE1vdG9yc1trRnJvbnRSaWdodE1vdG9yXSAqIG1fbWF4T3V0cHV0LCBzeW5jR3JvdXApOw0KKwltX3JlYXJMZWZ0TW90b3ItPlNldCh3aGVlbFNwZWVkc1trUmVhckxlZnRNb3Rvcl0gKiBtX2ludmVydGVkTW90b3JzW2tSZWFyTGVmdE1vdG9yXSAqIG1fbWF4T3V0cHV0LCBzeW5jR3JvdXApOw0KKwltX3JlYXJSaWdodE1vdG9yLT5TZXQod2hlZWxTcGVlZHNba1JlYXJSaWdodE1vdG9yXSAqIG1faW52ZXJ0ZWRNb3RvcnNba1JlYXJSaWdodE1vdG9yXSAqIG1fbWF4T3V0cHV0LCBzeW5jR3JvdXApOw0KKw0KKwlDQU5KYWd1YXI6OlVwZGF0ZVN5bmNHcm91cChzeW5jR3JvdXApOw0KKwkNCisJbV9zYWZldHlIZWxwZXItPkZlZWQoKTsNCit9DQorDQorLyoqDQorICogSG9sb25vbWljIERyaXZlIG1ldGhvZCBmb3IgTWVjYW51bSB3aGVlbGVkIHJvYm90cy4NCisgKg0KKyAqIFRoaXMgaXMgYW4gYWxpYXMgdG8gTWVjYW51bURyaXZlX1BvbGFyKCkgZm9yIGJhY2t3YXJkIGNvbXBhdGFiaWxpdHkNCisgKg0KKyAqIEBwYXJhbSBtYWduaXR1ZGUgVGhlIHNwZWVkIHRoYXQgdGhlIHJvYm90IHNob3VsZCBkcml2ZSBpbiBhIGdpdmVuIGRpcmVjdGlvbi4gIFstMS4wLi4xLjBdDQorICogQHBhcmFtIGRpcmVjdGlvbiBUaGUgZGlyZWN0aW9uIHRoZSByb2JvdCBzaG91bGQgZHJpdmUuIFRoZSBkaXJlY3Rpb24gYW5kIG1hZ2luaXR1dGUgYXJlDQorICogaW5kZXBlbmRlbnQgb2YgdGhlIHJvdGF0aW9uIHJhdGUuDQorICogQHBhcmFtIHJvdGF0aW9uIFRoZSByYXRlIG9mIHJvdGF0aW9uIGZvciB0aGUgcm9ib3QgdGhhdCBpcyBjb21wbGV0ZWx5IGluZGVwZW5kZW50IG9mDQorICogdGhlIG1hZ25pdHV0ZSBvciBkaXJlY3Rpb24uICBbLTEuMC4uMS4wXQ0KKyAqLw0KK3ZvaWQgUm9ib3REcml2ZTo6SG9sb25vbWljRHJpdmUoZmxvYXQgbWFnbml0dWRlLCBmbG9hdCBkaXJlY3Rpb24sIGZsb2F0IHJvdGF0aW9uKQ0KK3sNCisJTWVjYW51bURyaXZlX1BvbGFyKG1hZ25pdHVkZSwgZGlyZWN0aW9uLCByb3RhdGlvbik7DQorfQ0KKw0KKy8qKiBTZXQgdGhlIHNwZWVkIG9mIHRoZSByaWdodCBhbmQgbGVmdCBtb3RvcnMuDQorICogVGhpcyBpcyB1c2VkIG9uY2UgYW4gYXBwcm9wcmlhdGUgZHJpdmUgc2V0dXAgZnVuY3Rpb24gaXMgY2FsbGVkIHN1Y2ggYXMNCisgKiBUd29XaGVlbERyaXZlKCkuIFRoZSBtb3RvcnMgYXJlIHNldCB0byAibGVmdE91dHB1dCIgYW5kICJyaWdodE91dHB1dCINCisgKiBhbmQgaW5jbHVkZXMgZmxpcHBpbmcgdGhlIGRpcmVjdGlvbiBvZiBvbmUgc2lkZSBmb3Igb3Bwb3NpbmcgbW90b3JzLg0KKyAqIEBwYXJhbSBsZWZ0T3V0cHV0IFRoZSBzcGVlZCB0byBzZW5kIHRvIHRoZSBsZWZ0IHNpZGUgb2YgdGhlIHJvYm90Lg0KKyAqIEBwYXJhbSByaWdodE91dHB1dCBUaGUgc3BlZWQgdG8gc2VuZCB0byB0aGUgcmlnaHQgc2lkZSBvZiB0aGUgcm9ib3QuDQorICovDQordm9pZCBSb2JvdERyaXZlOjpTZXRMZWZ0UmlnaHRNb3Rvck91dHB1dHMoZmxvYXQgbGVmdE91dHB1dCwgZmxvYXQgcmlnaHRPdXRwdXQpDQorew0KKwl3cGlfYXNzZXJ0KG1fcmVhckxlZnRNb3RvciAhPSBOVUxMICYmIG1fcmVhclJpZ2h0TW90b3IgIT0gTlVMTCk7DQorDQorCVVJTlQ4IHN5bmNHcm91cCA9IDB4ODA7DQorDQorCWlmIChtX2Zyb250TGVmdE1vdG9yICE9IE5VTEwpDQorCQltX2Zyb250TGVmdE1vdG9yLT5TZXQoTGltaXQobGVmdE91dHB1dCkgKiBtX2ludmVydGVkTW90b3JzW2tGcm9udExlZnRNb3Rvcl0gKiBtX21heE91dHB1dCwgc3luY0dyb3VwKTsNCisJbV9yZWFyTGVmdE1vdG9yLT5TZXQoTGltaXQobGVmdE91dHB1dCkgKiBtX2ludmVydGVkTW90b3JzW2tSZWFyTGVmdE1vdG9yXSAqIG1fbWF4T3V0cHV0LCBzeW5jR3JvdXApOw0KKw0KKwlpZiAobV9mcm9udFJpZ2h0TW90b3IgIT0gTlVMTCkNCisJCW1fZnJvbnRSaWdodE1vdG9yLT5TZXQoLUxpbWl0KHJpZ2h0T3V0cHV0KSAqIG1faW52ZXJ0ZWRNb3RvcnNba0Zyb250UmlnaHRNb3Rvcl0gKiBtX21heE91dHB1dCwgc3luY0dyb3VwKTsNCisJbV9yZWFyUmlnaHRNb3Rvci0+U2V0KC1MaW1pdChyaWdodE91dHB1dCkgKiBtX2ludmVydGVkTW90b3JzW2tSZWFyUmlnaHRNb3Rvcl0gKiBtX21heE91dHB1dCwgc3luY0dyb3VwKTsNCisNCisJQ0FOSmFndWFyOjpVcGRhdGVTeW5jR3JvdXAoc3luY0dyb3VwKTsNCisNCisJbV9zYWZldHlIZWxwZXItPkZlZWQoKTsNCit9DQorDQorLyoqDQorICogTGltaXQgbW90b3IgdmFsdWVzIHRvIHRoZSAtMS4wIHRvICsxLjAgcmFuZ2UuDQorICovDQorZmxvYXQgUm9ib3REcml2ZTo6TGltaXQoZmxvYXQgbnVtKQ0KK3sNCisJaWYgKG51bSA+IDEuMCkNCisJew0KKwkJcmV0dXJuIDEuMDsNCisJfQ0KKwlpZiAobnVtIDwgLTEuMCkNCisJew0KKwkJcmV0dXJuIC0xLjA7DQorCX0NCisJcmV0dXJuIG51bTsNCit9DQorDQorLyoqDQorICogTm9ybWFsaXplIGFsbCB3aGVlbCBzcGVlZHMgaWYgdGhlIG1hZ25pdHVkZSBvZiBhbnkgd2hlZWwgaXMgZ3JlYXRlciB0aGFuIDEuMC4NCisgKi8NCit2b2lkIFJvYm90RHJpdmU6Ok5vcm1hbGl6ZShkb3VibGUgKndoZWVsU3BlZWRzKQ0KK3sNCisJZG91YmxlIG1heE1hZ25pdHVkZSA9IGZhYnMod2hlZWxTcGVlZHNbMF0pOw0KKwlJTlQzMiBpOw0KKwlmb3IgKGk9MTsgaTxrTWF4TnVtYmVyT2ZNb3RvcnM7IGkrKykNCisJew0KKwkJZG91YmxlIHRlbXAgPSBmYWJzKHdoZWVsU3BlZWRzW2ldKTsNCisJCWlmIChtYXhNYWduaXR1ZGUgPCB0ZW1wKSBtYXhNYWduaXR1ZGUgPSB0ZW1wOw0KKwl9DQorCWlmIChtYXhNYWduaXR1ZGUgPiAxLjApDQorCXsNCisJCWZvciAoaT0wOyBpPGtNYXhOdW1iZXJPZk1vdG9yczsgaSsrKQ0KKwkJew0KKwkJCXdoZWVsU3BlZWRzW2ldID0gd2hlZWxTcGVlZHNbaV0gLyBtYXhNYWduaXR1ZGU7DQorCQl9DQorCX0NCit9DQorDQorLyoqDQorICogUm90YXRlIGEgdmVjdG9yIGluIENhcnRlc2lhbiBzcGFjZS4NCisgKi8NCit2b2lkIFJvYm90RHJpdmU6OlJvdGF0ZVZlY3Rvcihkb3VibGUgJngsIGRvdWJsZSAmeSwgZG91YmxlIGFuZ2xlKQ0KK3sNCisJZG91YmxlIGNvc0EgPSBjb3MoYW5nbGUgKiAoMy4xNDE1OSAvIDE4MC4wKSk7DQorCWRvdWJsZSBzaW5BID0gc2luKGFuZ2xlICogKDMuMTQxNTkgLyAxODAuMCkpOw0KKwlkb3VibGUgeE91dCA9IHggKiBjb3NBIC0geSAqIHNpbkE7DQorCWRvdWJsZSB5T3V0ID0geCAqIHNpbkEgKyB5ICogY29zQTsNCisJeCA9IHhPdXQ7DQorCXkgPSB5T3V0Ow0KK30NCisNCisvKg0KKyAqIEludmVydCBhIG1vdG9yIGRpcmVjdGlvbi4NCisgKiBUaGlzIGlzIHVzZWQgd2hlbiBhIG1vdG9yIHNob3VsZCBydW4gaW4gdGhlIG9wcG9zaXRlIGRpcmVjdGlvbiBhcyB0aGUgZHJpdmUNCisgKiBjb2RlIHdvdWxkIG5vcm1hbGx5IHJ1biBpdC4gTW90b3JzIHRoYXQgYXJlIGRpcmVjdCBkcml2ZSB3b3VsZCBiZSBpbnZlcnRlZCwgdGhlDQorICogRHJpdmUgY29kZSBhc3N1bWVzIHRoYXQgdGhlIG1vdG9ycyBhcmUgZ2VhcmVkIHdpdGggb25lIHJldmVyc2FsLg0KKyAqIEBwYXJhbSBtb3RvciBUaGUgbW90b3IgaW5kZXggdG8gaW52ZXJ0Lg0KKyAqIEBwYXJhbSBpc0ludmVydGVkIFRydWUgaWYgdGhlIG1vdG9yIHNob3VsZCBiZSBpbnZlcnRlZCB3aGVuIG9wZXJhdGVkLg0KKyAqLw0KK3ZvaWQgUm9ib3REcml2ZTo6U2V0SW52ZXJ0ZWRNb3RvcihNb3RvclR5cGUgbW90b3IsIGJvb2wgaXNJbnZlcnRlZCkNCit7DQorCWlmIChtb3RvciA8IDAgfHwgbW90b3IgPiAzKQ0KKwl7DQorCQl3cGlfc2V0V1BJRXJyb3IoSW52YWxpZE1vdG9ySW5kZXgpOw0KKwkJcmV0dXJuOw0KKwl9DQorCW1faW52ZXJ0ZWRNb3RvcnNbbW90b3JdID0gaXNJbnZlcnRlZCA/IC0xIDogMTsNCit9DQorDQorLyoqDQorICogU2V0IHRoZSB0dXJuaW5nIHNlbnNpdGl2aXR5Lg0KKyAqIA0KKyAqIFRoaXMgb25seSBpbXBhY3RzIHRoZSBEcml2ZSgpIGVudHJ5LXBvaW50Lg0KKyAqIEBwYXJhbSBzZW5zaXRpdml0eSBFZmZlY3RpdmVseSBzZXRzIHRoZSB0dXJuaW5nIHNlbnNpdGl2aXR5IChvciB0dXJuIHJhZGl1cyBmb3IgYSBnaXZlbiB2YWx1ZSkNCisgKi8NCit2b2lkIFJvYm90RHJpdmU6OlNldFNlbnNpdGl2aXR5KGZsb2F0IHNlbnNpdGl2aXR5KQ0KK3sNCisJbV9zZW5zaXRpdml0eSA9IHNlbnNpdGl2aXR5Ow0KK30NCisNCisvKioNCisgKiBDb25maWd1cmUgdGhlIHNjYWxpbmcgZmFjdG9yIGZvciB1c2luZyBSb2JvdERyaXZlIHdpdGggbW90b3IgY29udHJvbGxlcnMgaW4gYSBtb2RlIG90aGVyIHRoYW4gUGVyY2VudFZidXMuDQorICogQHBhcmFtIG1heE91dHB1dCBNdWx0aXBsaWVkIHdpdGggdGhlIG91dHB1dCBwZXJjZW50YWdlIGNvbXB1dGVkIGJ5IHRoZSBkcml2ZSBmdW5jdGlvbnMuDQorICovDQordm9pZCBSb2JvdERyaXZlOjpTZXRNYXhPdXRwdXQoZG91YmxlIG1heE91dHB1dCkNCit7DQorCW1fbWF4T3V0cHV0ID0gbWF4T3V0cHV0Ow0KK30NCisNCisNCisNCit2b2lkIFJvYm90RHJpdmU6OlNldEV4cGlyYXRpb24oZmxvYXQgdGltZW91dCkNCit7DQorCW1fc2FmZXR5SGVscGVyLT5TZXRFeHBpcmF0aW9uKHRpbWVvdXQpOw0KK30NCisNCitmbG9hdCBSb2JvdERyaXZlOjpHZXRFeHBpcmF0aW9uKCkNCit7DQorCXJldHVybiBtX3NhZmV0eUhlbHBlci0+R2V0RXhwaXJhdGlvbigpOw0KK30NCisNCitib29sIFJvYm90RHJpdmU6OklzQWxpdmUoKQ0KK3sNCisJcmV0dXJuIG1fc2FmZXR5SGVscGVyLT5Jc0FsaXZlKCk7DQorfQ0KKw0KK2Jvb2wgUm9ib3REcml2ZTo6SXNTYWZldHlFbmFibGVkKCkNCit7DQorCXJldHVybiBtX3NhZmV0eUhlbHBlci0+SXNTYWZldHlFbmFibGVkKCk7DQorfQ0KKw0KK3ZvaWQgUm9ib3REcml2ZTo6U2V0U2FmZXR5RW5hYmxlZChib29sIGVuYWJsZWQpDQorew0KKwltX3NhZmV0eUhlbHBlci0+U2V0U2FmZXR5RW5hYmxlZChlbmFibGVkKTsNCit9DQorDQordm9pZCBSb2JvdERyaXZlOjpHZXREZXNjcmlwdGlvbihjaGFyICpkZXNjKQ0KK3sNCisJc3ByaW50ZihkZXNjLCAiUm9ib3REcml2ZSIpOw0KK30NCisNCit2b2lkIFJvYm90RHJpdmU6OlN0b3BNb3RvcigpDQorew0KKwlpZiAobV9mcm9udExlZnRNb3RvciAhPSBOVUxMKSBtX2Zyb250TGVmdE1vdG9yLT5EaXNhYmxlKCk7DQorCWlmIChtX2Zyb250UmlnaHRNb3RvciAhPSBOVUxMKSBtX2Zyb250UmlnaHRNb3Rvci0+RGlzYWJsZSgpOw0KKwlpZiAobV9yZWFyTGVmdE1vdG9yICE9IE5VTEwpIG1fcmVhckxlZnRNb3Rvci0+RGlzYWJsZSgpOw0KKwlpZiAobV9yZWFyUmlnaHRNb3RvciAhPSBOVUxMKSBtX3JlYXJSaWdodE1vdG9yLT5EaXNhYmxlKCk7DQorfQ0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL1JvYm90RHJpdmUuaCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL1JvYm90RHJpdmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZDljM2UxCi0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvUm9ib3REcml2ZS5oCkBAIC0wLDAgKzEsMTA4IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy8qIENvcHlyaWdodCAoYykgRklSU1QgMjAwOC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4JCQkJCQkJICAqLw0KKy8qIE9wZW4gU291cmNlIFNvZnR3YXJlIC0gbWF5IGJlIG1vZGlmaWVkIGFuZCBzaGFyZWQgYnkgRlJDIHRlYW1zLiBUaGUgY29kZSAgICovDQorLyogbXVzdCBiZSBhY2NvbXBhbmllZCBieSB0aGUgRklSU1QgQlNEIGxpY2Vuc2UgZmlsZSBpbiAkKFdJTkRfQkFTRSkvV1BJTGliLiAgKi8NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKyNpZm5kZWYgUk9CT1REUklWRV9IXw0KKyNkZWZpbmUgUk9CT1REUklWRV9IXw0KKw0KKyNpbmNsdWRlICJFcnJvckJhc2UuaCINCisjaW5jbHVkZSA8c3RkbGliLmg+DQorI2luY2x1ZGUgPHZ4V29ya3MuaD4NCisjaW5jbHVkZSAiTW90b3JTYWZldHkuaCINCisjaW5jbHVkZSAiTW90b3JTYWZldHlIZWxwZXIuaCINCisNCitjbGFzcyBTcGVlZENvbnRyb2xsZXI7DQorY2xhc3MgR2VuZXJpY0hJRDsNCisNCisvKioNCisgKiBVdGlsaXR5IGNsYXNzIGZvciBoYW5kbGluZyBSb2JvdCBkcml2ZSBiYXNlZCBvbiBhIGRlZmluaXRpb24gb2YgdGhlIG1vdG9yIGNvbmZpZ3VyYXRpb24uDQorICogVGhlIHJvYm90IGRyaXZlIGNsYXNzIGhhbmRsZXMgYmFzaWMgZHJpdmluZyBmb3IgYSByb2JvdC4gQ3VycmVudGx5LCAyIGFuZCA0IG1vdG9yIHN0YW5kYXJkDQorICogZHJpdmUgdHJhaW5zIGFyZSBzdXBwb3J0ZWQuIEluIHRoZSBmdXR1cmUgb3RoZXIgZHJpdmUgdHlwZXMgbGlrZSBzd2VydmUgYW5kIG1lY2NhbnVtIG1pZ2h0DQorICogYmUgaW1wbGVtZW50ZWQuIE1vdG9yIGNoYW5uZWwgbnVtYmVycyBhcmUgcGFzc2VkIHN1cHBsaWVkIG9uIGNyZWF0aW9uIG9mIHRoZSBjbGFzcy4gVGhvc2UgYXJlDQorICogdXNlZCBmb3IgZWl0aGVyIHRoZSBEcml2ZSBmdW5jdGlvbiAoaW50ZW5kZWQgZm9yIGhhbmQgY3JlYXRlZCBkcml2ZSBjb2RlLCBzdWNoIGFzIGF1dG9ub21vdXMpDQorICogb3Igd2l0aCB0aGUgVGFuay9BcmNhZGUgZnVuY3Rpb25zIGludGVuZGVkIHRvIGJlIHVzZWQgZm9yIE9wZXJhdG9yIENvbnRyb2wgZHJpdmluZy4NCisgKi8NCitjbGFzcyBSb2JvdERyaXZlOiBwdWJsaWMgTW90b3JTYWZldHksIHB1YmxpYyBFcnJvckJhc2UNCit7DQorcHVibGljOg0KKwl0eXBlZGVmIGVudW0NCisJew0KKwkJa0Zyb250TGVmdE1vdG9yID0gMCwNCisJCWtGcm9udFJpZ2h0TW90b3IgPSAxLA0KKwkJa1JlYXJMZWZ0TW90b3IgPSAyLA0KKwkJa1JlYXJSaWdodE1vdG9yID0gMw0KKwl9IE1vdG9yVHlwZTsNCisNCisJUm9ib3REcml2ZShVSU5UMzIgbGVmdE1vdG9yQ2hhbm5lbCwgVUlOVDMyIHJpZ2h0TW90b3JDaGFubmVsKTsNCisJUm9ib3REcml2ZShVSU5UMzIgZnJvbnRMZWZ0TW90b3JDaGFubmVsLCBVSU5UMzIgcmVhckxlZnRNb3RvckNoYW5uZWwsDQorCQkJCVVJTlQzMiBmcm9udFJpZ2h0TW90b3JDaGFubmVsLCBVSU5UMzIgcmVhclJpZ2h0TW90b3JDaGFubmVsKTsNCisJUm9ib3REcml2ZShTcGVlZENvbnRyb2xsZXIgKmxlZnRNb3RvciwgU3BlZWRDb250cm9sbGVyICpyaWdodE1vdG9yKTsNCisJUm9ib3REcml2ZShTcGVlZENvbnRyb2xsZXIgJmxlZnRNb3RvciwgU3BlZWRDb250cm9sbGVyICZyaWdodE1vdG9yKTsNCisJUm9ib3REcml2ZShTcGVlZENvbnRyb2xsZXIgKmZyb250TGVmdE1vdG9yLCBTcGVlZENvbnRyb2xsZXIgKnJlYXJMZWZ0TW90b3IsDQorCQkJCVNwZWVkQ29udHJvbGxlciAqZnJvbnRSaWdodE1vdG9yLCBTcGVlZENvbnRyb2xsZXIgKnJlYXJSaWdodE1vdG9yKTsNCisJUm9ib3REcml2ZShTcGVlZENvbnRyb2xsZXIgJmZyb250TGVmdE1vdG9yLCBTcGVlZENvbnRyb2xsZXIgJnJlYXJMZWZ0TW90b3IsDQorCQkJCVNwZWVkQ29udHJvbGxlciAmZnJvbnRSaWdodE1vdG9yLCBTcGVlZENvbnRyb2xsZXIgJnJlYXJSaWdodE1vdG9yKTsNCisJdmlydHVhbCB+Um9ib3REcml2ZSgpOw0KKw0KKwl2b2lkIERyaXZlKGZsb2F0IG91dHB1dE1hZ25pdHVkZSwgZmxvYXQgY3VydmUpOw0KKwl2b2lkIFRhbmtEcml2ZShHZW5lcmljSElEICpsZWZ0U3RpY2ssIEdlbmVyaWNISUQgKnJpZ2h0U3RpY2ssIGJvb2wgc3F1YXJlZElucHV0cyA9IHRydWUpOw0KKwl2b2lkIFRhbmtEcml2ZShHZW5lcmljSElEICZsZWZ0U3RpY2ssIEdlbmVyaWNISUQgJnJpZ2h0U3RpY2ssIGJvb2wgc3F1YXJlZElucHV0cyA9IHRydWUpOw0KKwl2b2lkIFRhbmtEcml2ZShHZW5lcmljSElEICpsZWZ0U3RpY2ssIFVJTlQzMiBsZWZ0QXhpcywgR2VuZXJpY0hJRCAqcmlnaHRTdGljaywgVUlOVDMyIHJpZ2h0QXhpcywgYm9vbCBzcXVhcmVkSW5wdXRzID0gdHJ1ZSk7DQorCXZvaWQgVGFua0RyaXZlKEdlbmVyaWNISUQgJmxlZnRTdGljaywgVUlOVDMyIGxlZnRBeGlzLCBHZW5lcmljSElEICZyaWdodFN0aWNrLCBVSU5UMzIgcmlnaHRBeGlzLCBib29sIHNxdWFyZWRJbnB1dHMgPSB0cnVlKTsNCisJdm9pZCBUYW5rRHJpdmUoZmxvYXQgbGVmdFZhbHVlLCBmbG9hdCByaWdodFZhbHVlLCBib29sIHNxdWFyZWRJbnB1dHMgPSB0cnVlKTsNCisJdm9pZCBBcmNhZGVEcml2ZShHZW5lcmljSElEICpzdGljaywgYm9vbCBzcXVhcmVkSW5wdXRzID0gdHJ1ZSk7DQorCXZvaWQgQXJjYWRlRHJpdmUoR2VuZXJpY0hJRCAmc3RpY2ssIGJvb2wgc3F1YXJlZElucHV0cyA9IHRydWUpOw0KKwl2b2lkIEFyY2FkZURyaXZlKEdlbmVyaWNISUQgKm1vdmVTdGljaywgVUlOVDMyIG1vdmVDaGFubmVsLCBHZW5lcmljSElEICpyb3RhdGVTdGljaywgVUlOVDMyIHJvdGF0ZUNoYW5uZWwsIGJvb2wgc3F1YXJlZElucHV0cyA9IHRydWUpOw0KKwl2b2lkIEFyY2FkZURyaXZlKEdlbmVyaWNISUQgJm1vdmVTdGljaywgVUlOVDMyIG1vdmVDaGFubmVsLCBHZW5lcmljSElEICZyb3RhdGVTdGljaywgVUlOVDMyIHJvdGF0ZUNoYW5uZWwsIGJvb2wgc3F1YXJlZElucHV0cyA9IHRydWUpOw0KKwl2b2lkIEFyY2FkZURyaXZlKGZsb2F0IG1vdmVWYWx1ZSwgZmxvYXQgcm90YXRlVmFsdWUsIGJvb2wgc3F1YXJlZElucHV0cyA9IHRydWUpOw0KKwl2b2lkIE1lY2FudW1Ecml2ZV9DYXJ0ZXNpYW4oZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgcm90YXRpb24sIGZsb2F0IGd5cm9BbmdsZSA9IDAuMCk7DQorCXZvaWQgTWVjYW51bURyaXZlX1BvbGFyKGZsb2F0IG1hZ25pdHVkZSwgZmxvYXQgZGlyZWN0aW9uLCBmbG9hdCByb3RhdGlvbik7DQorCXZvaWQgSG9sb25vbWljRHJpdmUoZmxvYXQgbWFnbml0dWRlLCBmbG9hdCBkaXJlY3Rpb24sIGZsb2F0IHJvdGF0aW9uKTsNCisJdmlydHVhbCB2b2lkIFNldExlZnRSaWdodE1vdG9yT3V0cHV0cyhmbG9hdCBsZWZ0T3V0cHV0LCBmbG9hdCByaWdodE91dHB1dCk7DQorCXZvaWQgU2V0SW52ZXJ0ZWRNb3RvcihNb3RvclR5cGUgbW90b3IsIGJvb2wgaXNJbnZlcnRlZCk7DQorCXZvaWQgU2V0U2Vuc2l0aXZpdHkoZmxvYXQgc2Vuc2l0aXZpdHkpOw0KKwl2b2lkIFNldE1heE91dHB1dChkb3VibGUgbWF4T3V0cHV0KTsNCisNCisJdm9pZCBTZXRFeHBpcmF0aW9uKGZsb2F0IHRpbWVvdXQpOw0KKwlmbG9hdCBHZXRFeHBpcmF0aW9uKCk7DQorCWJvb2wgSXNBbGl2ZSgpOw0KKwl2b2lkIFN0b3BNb3RvcigpOw0KKwlib29sIElzU2FmZXR5RW5hYmxlZCgpOw0KKwl2b2lkIFNldFNhZmV0eUVuYWJsZWQoYm9vbCBlbmFibGVkKTsNCisJdm9pZCBHZXREZXNjcmlwdGlvbihjaGFyICpkZXNjKTsNCisNCitwcm90ZWN0ZWQ6DQorCXZvaWQgSW5pdFJvYm90RHJpdmUoKTsNCisJZmxvYXQgTGltaXQoZmxvYXQgbnVtKTsNCisJdm9pZCBOb3JtYWxpemUoZG91YmxlICp3aGVlbFNwZWVkcyk7DQorCXZvaWQgUm90YXRlVmVjdG9yKGRvdWJsZSAmeCwgZG91YmxlICZ5LCBkb3VibGUgYW5nbGUpOw0KKw0KKwlzdGF0aWMgY29uc3QgSU5UMzIga01heE51bWJlck9mTW90b3JzID0gNDsNCisNCisJSU5UMzIgbV9pbnZlcnRlZE1vdG9yc1trTWF4TnVtYmVyT2ZNb3RvcnNdOw0KKwlmbG9hdCBtX3NlbnNpdGl2aXR5Ow0KKwlkb3VibGUgbV9tYXhPdXRwdXQ7DQorCWJvb2wgbV9kZWxldGVTcGVlZENvbnRyb2xsZXJzOw0KKwlTcGVlZENvbnRyb2xsZXIgKm1fZnJvbnRMZWZ0TW90b3I7DQorCVNwZWVkQ29udHJvbGxlciAqbV9mcm9udFJpZ2h0TW90b3I7DQorCVNwZWVkQ29udHJvbGxlciAqbV9yZWFyTGVmdE1vdG9yOw0KKwlTcGVlZENvbnRyb2xsZXIgKm1fcmVhclJpZ2h0TW90b3I7DQorCU1vdG9yU2FmZXR5SGVscGVyICptX3NhZmV0eUhlbHBlcjsNCisJDQorcHJpdmF0ZToNCisJSU5UMzIgR2V0TnVtTW90b3JzKCkNCisJew0KKwkJaW50IG1vdG9ycyA9IDA7DQorCQlpZiAobV9mcm9udExlZnRNb3RvcikgbW90b3JzKys7DQorCQlpZiAobV9mcm9udFJpZ2h0TW90b3IpIG1vdG9ycysrOw0KKwkJaWYgKG1fcmVhckxlZnRNb3RvcikgbW90b3JzKys7DQorCQlpZiAobV9yZWFyUmlnaHRNb3RvcikgbW90b3JzKys7DQorCQlyZXR1cm4gbW90b3JzOw0KKwl9DQorCURJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihSb2JvdERyaXZlKTsNCit9Ow0KKw0KKyNlbmRpZg0KKw0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL1NQSS5jcHAgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9TUEkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyMmMwN2RjCi0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvU1BJLmNwcApAQCAtMCwwICsxLDUyOCBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBDb3B5cmlnaHQgKGMpIEZJUlNUIDIwMDguIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCQkJCQkJCSAgKi8NCisvKiBPcGVuIFNvdXJjZSBTb2Z0d2FyZSAtIG1heSBiZSBtb2RpZmllZCBhbmQgc2hhcmVkIGJ5IEZSQyB0ZWFtcy4gVGhlIGNvZGUgICAqLw0KKy8qIG11c3QgYmUgYWNjb21wYW5pZWQgYnkgdGhlIEZJUlNUIEJTRCBsaWNlbnNlIGZpbGUgaW4gJChXSU5EX0JBU0UpL1dQSUxpYi4gICovDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisjaW5jbHVkZSAiU1BJLmgiDQorDQorI2luY2x1ZGUgIkNoaXBPYmplY3QvdFNQSS5oIg0KKyNpbmNsdWRlICJEaWdpdGFsSW5wdXQuaCINCisjaW5jbHVkZSAiRGlnaXRhbE91dHB1dC5oIg0KKyNpbmNsdWRlICJOZXR3b3JrQ29tbXVuaWNhdGlvbi9Vc2FnZVJlcG9ydGluZy5oIg0KKyNpbmNsdWRlICJTeW5jaHJvbml6ZWQuaCINCisjaW5jbHVkZSAiV1BJRXJyb3JzLmgiDQorDQorI2luY2x1ZGUgPG1hdGguaD4NCisjaW5jbHVkZSA8dXNyTGliLmg+DQorDQorU0VNX0lEIFNQSTo6bV9zZW1hcGhvcmUgPSBOVUxMOw0KKw0KKy8qKg0KKyAqIENvbnN0cnVjdG9yIGZvciBpbnB1dCBhbmQgb3V0cHV0Lg0KKyAqDQorICogQHBhcmFtIGNsawlUaGUgZGlnaXRhbCBvdXRwdXQgZm9yIHRoZSBjbG9jayBzaWduYWwuDQorICogQHBhcmFtIG1vc2kJVGhlIGRpZ2l0YWwgb3V0cHV0IGZvciB0aGUgd3JpdHRlbiBkYXRhIHRvIHRoZSBzbGF2ZQ0KKyAqCQkJCShtYXN0ZXItb3V0IHNsYXZlLWluKS4NCisgKiBAcGFyYW0gbWlzbwlUaGUgZGlnaXRhbCBpbnB1dCBmb3IgdGhlIGlucHV0IGRhdGEgZnJvbSB0aGUgc2xhdmUNCisgKgkJCQkobWFzdGVyLWluIHNsYXZlLW91dCkuDQorICovDQorU1BJOjpTUEkoRGlnaXRhbE91dHB1dCAmY2xrLCBEaWdpdGFsT3V0cHV0ICZtb3NpLCBEaWdpdGFsSW5wdXQgJm1pc28pDQorew0KKwlJbml0KCZjbGssICZtb3NpLCAmbWlzbyk7DQorfQ0KKw0KKy8qKg0KKyAqIENvbnN0cnVjdG9yIGZvciBpbnB1dCBhbmQgb3V0cHV0Lg0KKyAqDQorICogQHBhcmFtIGNsawlUaGUgZGlnaXRhbCBvdXRwdXQgZm9yIHRoZSBjbG9jayBzaWduYWwuDQorICogQHBhcmFtIG1vc2kJVGhlIGRpZ2l0YWwgb3V0cHV0IGZvciB0aGUgd3JpdHRlbiBkYXRhIHRvIHRoZSBzbGF2ZQ0KKyAqCQkJCShtYXN0ZXItb3V0IHNsYXZlLWluKS4NCisgKiBAcGFyYW0gbWlzbwlUaGUgZGlnaXRhbCBpbnB1dCBmb3IgdGhlIGlucHV0IGRhdGEgZnJvbSB0aGUgc2xhdmUNCisgKgkJCQkobWFzdGVyLWluIHNsYXZlLW91dCkuDQorICovDQorU1BJOjpTUEkoRGlnaXRhbE91dHB1dCAqY2xrLCBEaWdpdGFsT3V0cHV0ICptb3NpLCBEaWdpdGFsSW5wdXQgKm1pc28pDQorew0KKwlJbml0KGNsaywgbW9zaSwgbWlzbyk7DQorfQ0KKw0KKy8qKg0KKyAqIENvbnN0cnVjdG9yIGZvciBvdXRwdXQgb25seS4NCisgKg0KKyAqIEBwYXJhbSBjbGsJVGhlIGRpZ2l0YWwgb3V0cHV0IGZvciB0aGUgY2xvY2sgc2lnbmFsLg0KKyAqIEBwYXJhbSBtb3NpCVRoZSBkaWdpdGFsIG91dHB1dCBmb3IgdGhlIHdyaXR0ZW4gZGF0YSB0byB0aGUgc2xhdmUNCisgKgkJCQkobWFzdGVyLW91dCBzbGF2ZS1pbikuDQorICovDQorU1BJOjpTUEkoRGlnaXRhbE91dHB1dCAmY2xrLCBEaWdpdGFsT3V0cHV0ICZtb3NpKQ0KK3sNCisJSW5pdCgmY2xrLCAmbW9zaSwgTlVMTCk7DQorfQ0KKw0KKy8qKg0KKyAqIENvbnN0cnVjdG9yIGZvciBvdXRwdXQgb25seS4NCisgKg0KKyAqIEBwYXJhbSBjbGsJVGhlIGRpZ2l0YWwgb3V0cHV0IGZvciB0aGUgY2xvY2sgc2lnbmFsLg0KKyAqIEBwYXJhbSBtb3NpCVRoZSBkaWdpdGFsIG91dHB1dCBmb3IgdGhlIHdyaXR0ZW4gZGF0YSB0byB0aGUgc2xhdmUNCisgKgkJCQkobWFzdGVyLW91dCBzbGF2ZS1pbikuDQorICovDQorU1BJOjpTUEkoRGlnaXRhbE91dHB1dCAqY2xrLCBEaWdpdGFsT3V0cHV0ICptb3NpKQ0KK3sNCisJSW5pdChjbGssIG1vc2ksIE5VTEwpOw0KK30NCisNCisvKioNCisgKiBDb25zdHJ1Y3RvciBmb3IgaW5wdXQgb25seS4NCisgKg0KKyAqIEBwYXJhbSBjbGsJVGhlIGRpZ2l0YWwgb3V0cHV0IGZvciB0aGUgY2xvY2sgc2lnbmFsLg0KKyAqIEBwYXJhbSBtaXNvCVRoZSBkaWdpdGFsIGlucHV0IGZvciB0aGUgaW5wdXQgZGF0YSBmcm9tIHRoZSBzbGF2ZQ0KKyAqCQkJCShtYXN0ZXItaW4gc2xhdmUtb3V0KS4NCisgKi8NCitTUEk6OlNQSShEaWdpdGFsT3V0cHV0ICZjbGssIERpZ2l0YWxJbnB1dCAmbWlzbykNCit7DQorCUluaXQoJmNsaywgTlVMTCwgJm1pc28pOw0KK30NCisNCisvKioNCisgKiBDb25zdHJ1Y3RvciBmb3IgaW5wdXQgb25seS4NCisgKg0KKyAqIEBwYXJhbSBjbGsJVGhlIGRpZ2l0YWwgb3V0cHV0IGZvciB0aGUgY2xvY2sgc2lnbmFsLg0KKyAqIEBwYXJhbSBtaXNvCVRoZSBkaWdpdGFsIGlucHV0IGZvciB0aGUgaW5wdXQgZGF0YSBmcm9tIHRoZSBzbGF2ZQ0KKyAqCQkJCShtYXN0ZXItaW4gc2xhdmUtb3V0KS4NCisgKi8NCitTUEk6OlNQSShEaWdpdGFsT3V0cHV0ICpjbGssIERpZ2l0YWxJbnB1dCAqbWlzbykNCit7DQorCUluaXQoY2xrLCBOVUxMLCBtaXNvKTsNCit9DQorDQorLyoqDQorICogRGVzdHJ1Y3Rvci4NCisgKi8NCitTUEk6On5TUEkoKQ0KK3sNCisJZGVsZXRlIG1fc3BpOw0KK30NCisNCisvKioNCisgKiBJbml0aWFsaXplIFNQSSBjaGFubmVsIGNvbmZpZ3VyYXRpb24uDQorICoNCisgKiBAcGFyYW0gY2xrCVRoZSBkaWdpdGFsIG91dHB1dCBmb3IgdGhlIGNsb2NrIHNpZ25hbC4NCisgKiBAcGFyYW0gbW9zaQlUaGUgZGlnaXRhbCBvdXRwdXQgZm9yIHRoZSB3cml0dGVuIGRhdGEgdG8gdGhlIHNsYXZlDQorICoJCQkJKG1hc3Rlci1vdXQgc2xhdmUtaW4pLg0KKyAqIEBwYXJhbSBtaXNvCVRoZSBkaWdpdGFsIGlucHV0IGZvciB0aGUgaW5wdXQgZGF0YSBmcm9tIHRoZSBzbGF2ZQ0KKyAqCQkJCShtYXN0ZXItaW4gc2xhdmUtb3V0KS4NCisgKi8NCit2b2lkIFNQSTo6SW5pdChEaWdpdGFsT3V0cHV0ICpjbGssIERpZ2l0YWxPdXRwdXQgKm1vc2ksIERpZ2l0YWxJbnB1dCAqbWlzbykNCit7DQorCWlmIChtX3NlbWFwaG9yZSA9PSBOVUxMKQ0KKwl7DQorCQltX3NlbWFwaG9yZSA9IHNlbU1DcmVhdGUoU0VNX1FfUFJJT1JJVFkgfCBTRU1fREVMRVRFX1NBRkUgfCBTRU1fSU5WRVJTSU9OX1NBRkUpOw0KKwl9DQorDQorCXRSaW9TdGF0dXNDb2RlIGxvY2FsU3RhdHVzID0gTmlGcGdhX1N0YXR1c19TdWNjZXNzOw0KKwltX3NwaSA9IHRTUEk6OmNyZWF0ZSgmbG9jYWxTdGF0dXMpOw0KKwl3cGlfc2V0RXJyb3IobG9jYWxTdGF0dXMpOw0KKw0KKwltX2NvbmZpZy5CdXNCaXRXaWR0aCA9IDg7DQorCW1fY29uZmlnLkNsb2NrSGFsZlBlcmlvZERlbGF5ID0gMDsNCisJbV9jb25maWcuTVNCZmlyc3QgPSAwOw0KKwltX2NvbmZpZy5EYXRhT25GYWxsaW5nID0gMDsNCisJbV9jb25maWcuTGF0Y2hGaXJzdCA9IDA7DQorCW1fY29uZmlnLkxhdGNoTGFzdCA9IDA7DQorCW1fY29uZmlnLkZyYW1lUG9sYXJpdHkgPSAwOw0KKwltX2NvbmZpZy5Xcml0ZU9ubHkgPSBtaXNvID8gMCA6IDE7DQorCW1fY29uZmlnLkNsb2NrUG9sYXJpdHkgPSAwOw0KKw0KKwltX2NoYW5uZWxzLlNDTEtfQ2hhbm5lbCA9IGNsay0+R2V0Q2hhbm5lbEZvclJvdXRpbmcoKTsNCisJbV9jaGFubmVscy5TQ0xLX01vZHVsZSA9IGNsay0+R2V0TW9kdWxlRm9yUm91dGluZygpOw0KKwltX2NoYW5uZWxzLlNTX0NoYW5uZWwgPSAwOw0KKwltX2NoYW5uZWxzLlNTX01vZHVsZSA9IDA7DQorDQorCWlmIChtb3NpKQ0KKwl7DQorCQltX2NoYW5uZWxzLk1PU0lfQ2hhbm5lbCA9IG1vc2ktPkdldENoYW5uZWxGb3JSb3V0aW5nKCk7DQorCQltX2NoYW5uZWxzLk1PU0lfTW9kdWxlID0gbW9zaS0+R2V0TW9kdWxlRm9yUm91dGluZygpOw0KKwl9DQorCWVsc2UNCisJew0KKwkJbV9jaGFubmVscy5NT1NJX0NoYW5uZWwgPSAwOw0KKwkJbV9jaGFubmVscy5NT1NJX01vZHVsZSA9IDA7DQorCX0NCisNCisJaWYgKG1pc28pDQorCXsNCisJCW1fY2hhbm5lbHMuTUlTT19DaGFubmVsID0gbWlzby0+R2V0Q2hhbm5lbEZvclJvdXRpbmcoKTsNCisJCW1fY2hhbm5lbHMuTUlTT19Nb2R1bGUgPSBtaXNvLT5HZXRNb2R1bGVGb3JSb3V0aW5nKCk7DQorCX0NCisJZWxzZQ0KKwl7DQorCQltX2NoYW5uZWxzLk1JU09fQ2hhbm5lbCA9IDA7DQorCQltX2NoYW5uZWxzLk1JU09fTW9kdWxlID0gMDsNCisJfQ0KKw0KKwltX3NzID0gTlVMTDsNCisNCisJc3RhdGljIElOVDMyIGluc3RhbmNlcyA9IDA7DQorCWluc3RhbmNlcysrOw0KKwluVXNhZ2VSZXBvcnRpbmc6OnJlcG9ydChuVXNhZ2VSZXBvcnRpbmc6OmtSZXNvdXJjZVR5cGVfU1BJLCBpbnN0YW5jZXMpOw0KK30NCisNCisvKioNCisgKiBDb25maWd1cmUgdGhlIG51bWJlciBvZiBiaXRzIGZyb20gZWFjaCB3b3JkIHRoYXQgdGhlIHNsYXZlIHRyYW5zbWl0cw0KKyAqIG9yIHJlY2VpdmVzLg0KKyAqDQorICogQHBhcmFtIGJpdHMJVGhlIG51bWJlciBvZiBiaXRzIGluIG9uZSBmcmFtZSAoMSB0byAzMiBiaXRzKS4NCisgKi8NCit2b2lkIFNQSTo6U2V0Qml0c1BlcldvcmQoVUlOVDMyIGJpdHMpDQorew0KKwltX2NvbmZpZy5CdXNCaXRXaWR0aCA9IGJpdHM7DQorfQ0KKw0KKy8qKg0KKyAqIEdldCB0aGUgbnVtYmVyIG9mIGJpdHMgZnJvbSBlYWNoIHdvcmQgdGhhdCB0aGUgc2xhdmUgdHJhbnNtaXRzDQorICogb3IgcmVjZWl2ZXMuDQorICoNCisgKiBAcmV0dXJuIFRoZSBudW1iZXIgb2YgYml0cyBpbiBvbmUgZnJhbWUgKDEgdG8gMzIgYml0cykuDQorICovDQorVUlOVDMyIFNQSTo6R2V0Qml0c1BlcldvcmQoKQ0KK3sNCisJcmV0dXJuIG1fY29uZmlnLkJ1c0JpdFdpZHRoOw0KK30NCisNCisvKioNCisgKiBDb25maWd1cmUgdGhlIHJhdGUgb2YgdGhlIGdlbmVyYXRlZCBjbG9jayBzaWduYWwuDQorICogVGhlIGRlZmF1bHQgYW5kIG1heGltdW0gdmFsdWUgaXMgNzYsNjI4LjQgSHouDQorICoNCisgKiBAcGFyYW0gaHoJVGhlIGNsb2NrIHJhdGUgaW4gSGVydHouDQorICovDQordm9pZCBTUEk6OlNldENsb2NrUmF0ZShkb3VibGUgaHopDQorew0KKwlpbnQgZGVsYXkgPSAwOw0KKwkvLyBUT0RPOiBjb21wdXRlIHRoZSBhcHByb3ByaWF0ZSB2YWx1ZXMgYmFzZWQgb24gZGlnaXRhbCBsb29wIHRpbWluZw0KKwlpZiAoaHogPD0gNzY2MjguNCkNCisJew0KKwkJZG91YmxlIHYgPSAoMS4wL2h6KS8xLjMwNWUtNTsNCisJCWludCBpbnR2ID0gKGludCl2Ow0KKwkJaWYgKHYtaW50diA+IDAuNSkNCisJCQlkZWxheSA9IGludHY7DQorCQllbHNlDQorCQkJZGVsYXkgPSBpbnR2LTE7DQorCX0NCisJaWYgKGRlbGF5ID4gMjU1KQ0KKwl7DQorCQl3cGlfc2V0V1BJRXJyb3IoU1BJQ2xvY2tSYXRlVG9vTG93KTsNCisJCWRlbGF5ID0gMjU1Ow0KKwl9DQorCW1fY29uZmlnLkNsb2NrSGFsZlBlcmlvZERlbGF5ID0gZGVsYXk7DQorfQ0KKw0KKy8qKg0KKyAqIENvbmZpZ3VyZSB0aGUgb3JkZXIgdGhhdCBiaXRzIGFyZSBzZW50IGFuZCByZWNlaXZlZCBvbiB0aGUgd2lyZQ0KKyAqIHRvIGJlIG1vc3Qgc2lnbmlmaWNhbnQgYml0IGZpcnN0Lg0KKyAqLw0KK3ZvaWQgU1BJOjpTZXRNU0JGaXJzdCgpDQorew0KKwltX2NvbmZpZy5NU0JmaXJzdCA9IDE7DQorfQ0KKw0KKy8qKg0KKyAqIENvbmZpZ3VyZSB0aGUgb3JkZXIgdGhhdCBiaXRzIGFyZSBzZW50IGFuZCByZWNlaXZlZCBvbiB0aGUgd2lyZQ0KKyAqIHRvIGJlIGxlYXN0IHNpZ25pZmljYW50IGJpdCBmaXJzdC4NCisgKi8NCit2b2lkIFNQSTo6U2V0TFNCRmlyc3QoKQ0KK3sNCisJbV9jb25maWcuTVNCZmlyc3QgPSAwOw0KK30NCisNCisvKioNCisgKiBDb25maWd1cmUgdGhhdCB0aGUgZGF0YSBpcyBzdGFibGUgb24gdGhlIGZhbGxpbmcgZWRnZSBhbmQgdGhlIGRhdGENCisgKiBjaGFuZ2VzIG9uIHRoZSByaXNpbmcgZWRnZS4NCisgKi8NCit2b2lkIFNQSTo6U2V0U2FtcGxlRGF0YU9uRmFsbGluZygpDQorew0KKwltX2NvbmZpZy5EYXRhT25GYWxsaW5nID0gMTsNCit9DQorDQorLyoqDQorICogQ29uZmlndXJlIHRoYXQgdGhlIGRhdGEgaXMgc3RhYmxlIG9uIHRoZSByaXNpbmcgZWRnZSBhbmQgdGhlIGRhdGENCisgKiBjaGFuZ2VzIG9uIHRoZSBmYWxsaW5nIGVkZ2UuDQorICovDQordm9pZCBTUEk6OlNldFNhbXBsZURhdGFPblJpc2luZygpDQorew0KKwltX2NvbmZpZy5EYXRhT25GYWxsaW5nID0gMDsNCit9DQorDQorLyoqDQorICogQ29uZmlndXJlIHRoZSBzbGF2ZSBzZWxlY3QgbGluZSBiZWhhdmlvci4NCisgKg0KKyAqIEBwYXJhbSBzcyBzbGF2ZSBzZWxlY3QgZGlnaXRhbCBvdXRwdXQuDQorICogQHBhcmFtIG1vZGUgRnJhbWUgbW9kZToNCisgKgkJCSAgIGtDaGlwU2VsZWN0OiBhY3RpdmUgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgZnJhbWUuDQorICoJCQkgICBrUHJlTGF0Y2hQdWxzZTogcHVsc2VzIGJlZm9yZSB0aGUgdHJhbnNmZXIgb2YgZWFjaCBmcmFtZS4NCisgKgkJCSAgIGtQb3N0TGF0Y2hQdWxzZTogcHVsc2VzIGFmdGVyIHRoZSB0cmFuc2ZlciBvZiBlYWNoIGZyYW1lLg0KKyAqCQkJICAga1ByZUFuZFBvc3RMYXRjaFB1bHNlOiBwdWxzZXMgYmVmb3JlIGFuZCBhZnRlciBlYWNoIGZyYW1lLg0KKyAqIEBwYXJhbSBhY3RpdmVMb3cgVHJ1ZSBpZiBzbGF2ZSBzZWxlY3QgbGluZSBpcyBhY3RpdmUgbG93Lg0KKyAqLw0KK3ZvaWQgU1BJOjpTZXRTbGF2ZVNlbGVjdChEaWdpdGFsT3V0cHV0ICpzcywgdEZyYW1lTW9kZSBtb2RlLCBib29sIGFjdGl2ZUxvdykNCit7DQorCWlmIChzcykNCisJew0KKwkJbV9jaGFubmVscy5TU19DaGFubmVsID0gc3MtPkdldENoYW5uZWxGb3JSb3V0aW5nKCk7DQorCQltX2NoYW5uZWxzLlNTX01vZHVsZSA9IHNzLT5HZXRNb2R1bGVGb3JSb3V0aW5nKCk7DQorCX0NCisJZWxzZQ0KKwl7DQorCQltX2NoYW5uZWxzLlNTX0NoYW5uZWwgPSAwOw0KKwkJbV9jaGFubmVscy5TU19Nb2R1bGUgPSAwOw0KKwl9DQorCW1fc3MgPSBzczsNCisNCisJc3dpdGNoIChtb2RlKQ0KKwl7DQorCQljYXNlIGtDaGlwU2VsZWN0Og0KKwkJCW1fY29uZmlnLkxhdGNoRmlyc3QgPSAwOw0KKwkJCW1fY29uZmlnLkxhdGNoTGFzdCA9IDA7DQorCQkJYnJlYWs7DQorCQljYXNlIGtQcmVMYXRjaFB1bHNlOg0KKwkJCW1fY29uZmlnLkxhdGNoRmlyc3QgPSAxOw0KKwkJCW1fY29uZmlnLkxhdGNoTGFzdCA9IDA7DQorCQkJYnJlYWs7DQorCQljYXNlIGtQb3N0TGF0Y2hQdWxzZToNCisJCQltX2NvbmZpZy5MYXRjaEZpcnN0ID0gMDsNCisJCQltX2NvbmZpZy5MYXRjaExhc3QgPSAxOw0KKwkJCWJyZWFrOw0KKwkJY2FzZSBrUHJlQW5kUG9zdExhdGNoUHVsc2U6DQorCQkJbV9jb25maWcuTGF0Y2hGaXJzdCA9IDE7DQorCQkJbV9jb25maWcuTGF0Y2hMYXN0ID0gMTsNCisJCQlicmVhazsNCisJfQ0KKw0KKwltX2NvbmZpZy5GcmFtZVBvbGFyaXR5ID0gYWN0aXZlTG93ID8gMSA6IDA7DQorfQ0KKw0KKy8qKg0KKyAqIENvbmZpZ3VyZSB0aGUgc2xhdmUgc2VsZWN0IGxpbmUgYmVoYXZpb3IuDQorICoNCisgKiBAcGFyYW0gc3Mgc2xhdmUgc2VsZWN0IGRpZ2l0YWwgb3V0cHV0Lg0KKyAqIEBwYXJhbSBtb2RlIEZyYW1lIG1vZGU6DQorICoJCQkgICBrQ2hpcFNlbGVjdDogYWN0aXZlIGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGZyYW1lLg0KKyAqCQkJICAga1ByZUxhdGNoUHVsc2U6IHB1bHNlcyBiZWZvcmUgdGhlIHRyYW5zZmVyIG9mIGVhY2ggZnJhbWUuDQorICoJCQkgICBrUG9zdExhdGNoUHVsc2U6IHB1bHNlcyBhZnRlciB0aGUgdHJhbnNmZXIgb2YgZWFjaCBmcmFtZS4NCisgKgkJCSAgIGtQcmVBbmRQb3N0TGF0Y2hQdWxzZTogcHVsc2VzIGJlZm9yZSBhbmQgYWZ0ZXIgZWFjaCBmcmFtZS4NCisgKiBAcGFyYW0gYWN0aXZlTG93IFRydWUgaWYgc2xhdmUgc2VsZWN0IGxpbmUgaXMgYWN0aXZlIGxvdy4NCisgKi8NCit2b2lkIFNQSTo6U2V0U2xhdmVTZWxlY3QoRGlnaXRhbE91dHB1dCAmc3MsIHRGcmFtZU1vZGUgbW9kZSwgYm9vbCBhY3RpdmVMb3cpDQorew0KKwlTZXRTbGF2ZVNlbGVjdCgmc3MsIG1vZGUsIGFjdGl2ZUxvdyk7DQorfQ0KKw0KKy8qKg0KKyAqIEdldCB0aGUgc2xhdmUgc2VsZWN0IGxpbmUgYmVoYXZpb3IuDQorICoNCisgKiBAcGFyYW0gbW9kZSBGcmFtZSBtb2RlOg0KKyAqCQkJICAga0NoaXBTZWxlY3Q6IGFjdGl2ZSBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBmcmFtZS4NCisgKgkJCSAgIGtQcmVMYXRjaFB1bHNlOiBwdWxzZXMgYmVmb3JlIHRoZSB0cmFuc2ZlciBvZiBlYWNoIGZyYW1lLg0KKyAqCQkJICAga1Bvc3RMYXRjaFB1bHNlOiBwdWxzZXMgYWZ0ZXIgdGhlIHRyYW5zZmVyIG9mIGVhY2ggZnJhbWUuDQorICoJCQkgICBrUHJlQW5kUG9zdExhdGNoUHVsc2U6IHB1bHNlcyBiZWZvcmUgYW5kIGFmdGVyIGVhY2ggZnJhbWUuDQorICogQHBhcmFtIGFjdGl2ZUxvdyBUcnVlIGlmIHNsYXZlIHNlbGVjdCBsaW5lIGlzIGFjdGl2ZSBsb3cuDQorICogQHJldHVybiBUaGUgc2xhdmUgc2VsZWN0IGRpZ2l0YWwgb3V0cHV0Lg0KKyAqLw0KK0RpZ2l0YWxPdXRwdXQgKlNQSTo6R2V0U2xhdmVTZWxlY3QodEZyYW1lTW9kZSAqbW9kZSwgYm9vbCAqYWN0aXZlTG93KQ0KK3sNCisJaWYgKG1vZGUgIT0gTlVMTCkNCisJew0KKwkJKm1vZGUgPSAodEZyYW1lTW9kZSkgKG1fY29uZmlnLkxhdGNoRmlyc3QgfCAobV9jb25maWcuTGF0Y2hMYXN0IDw8IDEpKTsNCisJfQ0KKwlpZiAoYWN0aXZlTG93ICE9IE5VTEwpDQorCXsNCisJCSphY3RpdmVMb3cgPSBtX2NvbmZpZy5GcmFtZVBvbGFyaXR5ICE9IDA7DQorCX0NCisJcmV0dXJuIG1fc3M7DQorfQ0KKw0KKy8qKg0KKyAqIENvbmZpZ3VyZSB0aGUgY2xvY2sgb3V0cHV0IGxpbmUgdG8gYmUgYWN0aXZlIGxvdy4NCisgKiBUaGlzIGlzIHNvbWV0aW1lcyBjYWxsZWQgY2xvY2sgcG9sYXJpdHkgaGlnaC4NCisgKi8NCit2b2lkIFNQSTo6U2V0Q2xvY2tBY3RpdmVMb3coKQ0KK3sNCisJbV9jb25maWcuQ2xvY2tQb2xhcml0eSA9IDE7DQorfQ0KKw0KKy8qKg0KKyAqIENvbmZpZ3VyZSB0aGUgY2xvY2sgb3V0cHV0IGxpbmUgdG8gYmUgYWN0aXZlIGhpZ2guDQorICogVGhpcyBpcyBzb21ldGltZXMgY2FsbGVkIGNsb2NrIHBvbGFyaXR5IGxvdy4NCisgKi8NCit2b2lkIFNQSTo6U2V0Q2xvY2tBY3RpdmVIaWdoKCkNCit7DQorCW1fY29uZmlnLkNsb2NrUG9sYXJpdHkgPSAwOw0KK30NCisNCisvKioNCisgKiBBcHBseSBjb25maWd1cmF0aW9uIHNldHRpbmdzIGFuZCByZXNldCB0aGUgU1BJIGxvZ2ljLg0KKyAqLw0KK3ZvaWQgU1BJOjpBcHBseUNvbmZpZygpDQorew0KKwlTeW5jaHJvbml6ZWQgc3luYyhtX3NlbWFwaG9yZSk7DQorDQorCXRSaW9TdGF0dXNDb2RlIGxvY2FsU3RhdHVzID0gTmlGcGdhX1N0YXR1c19TdWNjZXNzOw0KKwltX3NwaS0+d3JpdGVDb25maWcobV9jb25maWcsICZsb2NhbFN0YXR1cyk7DQorCW1fc3BpLT53cml0ZUNoYW5uZWxzKG1fY2hhbm5lbHMsICZsb2NhbFN0YXR1cyk7DQorCW1fc3BpLT5zdHJvYmVSZXNldCgmbG9jYWxTdGF0dXMpOw0KKwl3cGlfc2V0RXJyb3IobG9jYWxTdGF0dXMpOw0KK30NCisNCisvKioNCisgKiBHZXQgdGhlIG51bWJlciBvZiB3b3JkcyB0aGF0IGNhbiBjdXJyZW50bHkgYmUgc3RvcmVkIGJlZm9yZSBiZWluZw0KKyAqIHRyYW5zbWl0dGVkIHRvIHRoZSBkZXZpY2UuDQorICoNCisgKiBAcmV0dXJuIFRoZSBudW1iZXIgb2Ygd29yZHMgYXZhaWxhYmxlIHRvIGJlIHdyaXR0ZW4uDQorICovDQorVUlOVDE2IFNQSTo6R2V0T3V0cHV0RklGT0F2YWlsYWJsZSgpDQorew0KKwl0UmlvU3RhdHVzQ29kZSBsb2NhbFN0YXR1cyA9IE5pRnBnYV9TdGF0dXNfU3VjY2VzczsNCisJVUlOVDE2IHJlc3VsdCA9IG1fc3BpLT5yZWFkQXZhaWxhYmxlVG9Mb2FkKCZsb2NhbFN0YXR1cyk7DQorCXdwaV9zZXRFcnJvcihsb2NhbFN0YXR1cyk7DQorCXJldHVybiByZXN1bHQ7DQorfQ0KKw0KKy8qKg0KKyAqIEdldCB0aGUgbnVtYmVyIG9mIHdvcmRzIHJlY2VpdmVkIGFuZCBjdXJyZW50bHkgYXZhaWxhYmxlIHRvIGJlIHJlYWQgZnJvbQ0KKyAqIHRoZSByZWNlaXZlIEZJRk8uDQorICoNCisgKiBAcmV0dXJuIFRoZSBudW1iZXIgb2Ygd29yZHMgYXZhaWxhYmxlIHRvIHJlYWQuDQorICovDQorVUlOVDE2IFNQSTo6R2V0TnVtUmVjZWl2ZWQoKQ0KK3sNCisJdFJpb1N0YXR1c0NvZGUgbG9jYWxTdGF0dXMgPSBOaUZwZ2FfU3RhdHVzX1N1Y2Nlc3M7DQorCVVJTlQxNiByZXN1bHQgPSBtX3NwaS0+cmVhZFJlY2VpdmVkRWxlbWVudHMoJmxvY2FsU3RhdHVzKTsNCisJd3BpX3NldEVycm9yKGxvY2FsU3RhdHVzKTsNCisJcmV0dXJuIHJlc3VsdDsNCit9DQorDQorLyoqDQorICogSGF2ZSBhbGwgcGVuZGluZyB0cmFuc2ZlcnMgY29tcGxldGVkPw0KKyAqDQorICogQHJldHVybiBUcnVlIGlmIG5vIHRyYW5zZmVycyBhcmUgcGVuZGluZy4NCisgKi8NCitib29sIFNQSTo6SXNEb25lKCkNCit7DQorCXRSaW9TdGF0dXNDb2RlIGxvY2FsU3RhdHVzID0gTmlGcGdhX1N0YXR1c19TdWNjZXNzOw0KKwlib29sIHJlc3VsdCA9IG1fc3BpLT5yZWFkU3RhdHVzX0lkbGUoJmxvY2FsU3RhdHVzKTsNCisJd3BpX3NldEVycm9yKGxvY2FsU3RhdHVzKTsNCisJcmV0dXJuIHJlc3VsdDsNCit9DQorDQorLyoqDQorICogRGV0ZXJtaW5lIGlmIHRoZSByZWNlaXZlIEZJRk8gd2FzIGZ1bGwgd2hlbiBhdHRlbXB0aW5nIHRvIGFkZCBuZXcgZGF0YSBhdA0KKyAqIGVuZCBvZiBhIHRyYW5zZmVyLg0KKyAqDQorICogQHJldHVybiBUcnVlIGlmIHRoZSByZWNlaXZlIEZJRk8gb3ZlcmZsb3dlZC4NCisgKi8NCitib29sIFNQSTo6SGFkUmVjZWl2ZU92ZXJmbG93KCkNCit7DQorCXRSaW9TdGF0dXNDb2RlIGxvY2FsU3RhdHVzID0gTmlGcGdhX1N0YXR1c19TdWNjZXNzOw0KKwlib29sIHJlc3VsdCA9IG1fc3BpLT5yZWFkU3RhdHVzX1JlY2VpdmVkRGF0YU92ZXJmbG93KCZsb2NhbFN0YXR1cyk7DQorCXdwaV9zZXRFcnJvcihsb2NhbFN0YXR1cyk7DQorCXJldHVybiByZXN1bHQ7DQorfQ0KKw0KKy8qKg0KKyAqIFdyaXRlIGEgd29yZCB0byB0aGUgc2xhdmUgZGV2aWNlLiAgQmxvY2tzIHVudGlsIHRoZXJlIGlzIHNwYWNlIGluIHRoZQ0KKyAqIG91dHB1dCBGSUZPLg0KKyAqDQorICogSWYgbm90IHJ1bm5pbmcgaW4gb3V0cHV0IG9ubHkgbW9kZSwgYWxzbyBzYXZlcyB0aGUgZGF0YSByZWNlaXZlZA0KKyAqIG9uIHRoZSBNSVNPIGlucHV0IGR1cmluZyB0aGUgdHJhbnNmZXIgaW50byB0aGUgcmVjZWl2ZSBGSUZPLg0KKyAqLw0KK3ZvaWQgU1BJOjpXcml0ZShVSU5UMzIgZGF0YSkNCit7DQorCWlmIChtX2NoYW5uZWxzLk1PU0lfQ2hhbm5lbCA9PSAwICYmIG1fY2hhbm5lbHMuTU9TSV9Nb2R1bGUgPT0gMCkNCisJew0KKwkJd3BpX3NldFdQSUVycm9yKFNQSVdyaXRlTm9NT1NJKTsNCisJCXJldHVybjsNCisJfQ0KKw0KKwlTeW5jaHJvbml6ZWQgc3luYyhtX3NlbWFwaG9yZSk7DQorDQorCXdoaWxlIChHZXRPdXRwdXRGSUZPQXZhaWxhYmxlKCkgPT0gMCkNCisJCXRhc2tEZWxheShOT19XQUlUKTsNCisNCisJdFJpb1N0YXR1c0NvZGUgbG9jYWxTdGF0dXMgPSBOaUZwZ2FfU3RhdHVzX1N1Y2Nlc3M7DQorCW1fc3BpLT53cml0ZURhdGFUb0xvYWQoZGF0YSwgJmxvY2FsU3RhdHVzKTsNCisJbV9zcGktPnN0cm9iZUxvYWQoJmxvY2FsU3RhdHVzKTsNCisJd3BpX3NldEVycm9yKGxvY2FsU3RhdHVzKTsNCit9DQorDQorLyoqDQorICogUmVhZCBhIHdvcmQgZnJvbSB0aGUgcmVjZWl2ZSBGSUZPLg0KKyAqDQorICogV2FpdHMgZm9yIHRoZSBjdXJyZW50IHRyYW5zZmVyIHRvIGNvbXBsZXRlIGlmIHRoZSByZWNlaXZlIEZJRk8gaXMgZW1wdHkuDQorICoNCisgKiBJZiB0aGUgcmVjZWl2ZSBGSUZPIGlzIGVtcHR5LCB0aGVyZSBpcyBubyBhY3RpdmUgdHJhbnNmZXIsIGFuZCBpbml0aWF0ZQ0KKyAqIGlzIGZhbHNlLCBlcnJvcnMuDQorICoNCisgKiBAcGFyYW0gaW5pdGlhdGUJSWYgdHJ1ZSwgdGhpcyBmdW5jdGlvbiBwdXNoZXMgIjAiIGludG8gdGhlDQorICoJCQkJICAgIHRyYW5zbWl0IGJ1ZmZlciBhbmQgaW5pdGlhdGVzIGEgdHJhbnNmZXIuDQorICoJCQkJICAgIElmIGZhbHNlLCB0aGlzIGZ1bmN0aW9uIGFzc3VtZXMgdGhhdCBkYXRhIGlzDQorICoJCQkJICAgIGFscmVhZHkgaW4gdGhlIHJlY2VpdmUgRklGTyBmcm9tIGEgcHJldmlvdXMgd3JpdGUuDQorICovDQorVUlOVDMyIFNQSTo6UmVhZChib29sIGluaXRpYXRlKQ0KK3sNCisJaWYgKG1fY2hhbm5lbHMuTUlTT19DaGFubmVsID09IDAgJiYgbV9jaGFubmVscy5NSVNPX01vZHVsZSA9PSAwKQ0KKwl7DQorCQl3cGlfc2V0V1BJRXJyb3IoU1BJUmVhZE5vTUlTTyk7DQorCQlyZXR1cm4gMDsNCisJfQ0KKw0KKwl0UmlvU3RhdHVzQ29kZSBsb2NhbFN0YXR1cyA9IE5pRnBnYV9TdGF0dXNfU3VjY2VzczsNCisJVUlOVDMyIGRhdGE7DQorCXsNCisJCVN5bmNocm9uaXplZCBzeW5jKG1fc2VtYXBob3JlKTsNCisNCisJCWlmIChpbml0aWF0ZSkNCisJCXsNCisJCQltX3NwaS0+d3JpdGVEYXRhVG9Mb2FkKDAsICZsb2NhbFN0YXR1cyk7DQorCQkJbV9zcGktPnN0cm9iZUxvYWQoJmxvY2FsU3RhdHVzKTsNCisJCX0NCisNCisJCS8vIERvIHdlIGhhdmUgYW55dGhpbmcgcmVhZHkgdG8gcmVhZD8NCisJCWlmIChHZXROdW1SZWNlaXZlZCgpID09IDApDQorCQl7DQorCQkJaWYgKCFpbml0aWF0ZSAmJiBJc0RvbmUoKSAmJiBHZXRPdXRwdXRGSUZPQXZhaWxhYmxlKCkgPT0ga1RyYW5zbWl0RklGT0RlcHRoKQ0KKwkJCXsNCisJCQkJLy8gTm90aGluZyB0byByZWFkOiBlcnJvciBvdXQNCisJCQkJd3BpX3NldFdQSUVycm9yKFNQSVJlYWROb0RhdGEpOw0KKwkJCQlyZXR1cm4gMDsNCisJCQl9DQorDQorCQkJLy8gV2FpdCBmb3IgdGhlIHRyYW5zYWN0aW9uIHRvIGNvbXBsZXRlDQorCQkJd2hpbGUgKEdldE51bVJlY2VpdmVkKCkgPT0gMCkNCisJCQkJdGFza0RlbGF5KE5PX1dBSVQpOw0KKwkJfQ0KKw0KKwkJbV9zcGktPnN0cm9iZVJlYWRSZWNlaXZlZERhdGEoJmxvY2FsU3RhdHVzKTsNCisJCWRhdGEgPSBtX3NwaS0+cmVhZFJlY2VpdmVkRGF0YSgmbG9jYWxTdGF0dXMpOw0KKwl9DQorCXdwaV9zZXRFcnJvcihsb2NhbFN0YXR1cyk7DQorDQorCXJldHVybiBkYXRhOw0KK30NCisNCisvKioNCisgKiBTdG9wIGFueSB0cmFuc2ZlciBpbiBwcm9ncmVzcyBhbmQgZW1wdHkgdGhlIHRyYW5zbWl0IEZJRk8uDQorICovDQordm9pZCBTUEk6OlJlc2V0KCkNCit7DQorCXRSaW9TdGF0dXNDb2RlIGxvY2FsU3RhdHVzID0gTmlGcGdhX1N0YXR1c19TdWNjZXNzOw0KKwltX3NwaS0+c3Ryb2JlUmVzZXQoJmxvY2FsU3RhdHVzKTsNCisJd3BpX3NldEVycm9yKGxvY2FsU3RhdHVzKTsNCit9DQorDQorLyoqDQorICogRW1wdHkgdGhlIHJlY2VpdmUgRklGTy4NCisgKi8NCit2b2lkIFNQSTo6Q2xlYXJSZWNlaXZlZERhdGEoKQ0KK3sNCisJdFJpb1N0YXR1c0NvZGUgbG9jYWxTdGF0dXMgPSBOaUZwZ2FfU3RhdHVzX1N1Y2Nlc3M7DQorCW1fc3BpLT5zdHJvYmVDbGVhclJlY2VpdmVkRGF0YSgmbG9jYWxTdGF0dXMpOw0KKwl3cGlfc2V0RXJyb3IobG9jYWxTdGF0dXMpOw0KK30NCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9TUEkuaCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL1NQSS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjODliYmMKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9TUEkuaApAQCAtMCwwICsxLDgzIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy8qIENvcHlyaWdodCAoYykgRklSU1QgMjAwOC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4JCQkJCQkJICAqLw0KKy8qIE9wZW4gU291cmNlIFNvZnR3YXJlIC0gbWF5IGJlIG1vZGlmaWVkIGFuZCBzaGFyZWQgYnkgRlJDIHRlYW1zLiBUaGUgY29kZSAgICovDQorLyogbXVzdCBiZSBhY2NvbXBhbmllZCBieSB0aGUgRklSU1QgQlNEIGxpY2Vuc2UgZmlsZSBpbiAkKFdJTkRfQkFTRSkvV1BJTGliLiAgKi8NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKyNpZm5kZWYgX19TUElfSF9fDQorI2RlZmluZSBfX1NQSV9IX18NCisNCisjaW5jbHVkZSAiQ2hpcE9iamVjdC5oIg0KKyNpbmNsdWRlICJTZW5zb3JCYXNlLmgiDQorDQorY2xhc3MgRGlnaXRhbE91dHB1dDsNCitjbGFzcyBEaWdpdGFsSW5wdXQ7DQorDQorLyoqDQorICogU1BJIGJ1cyBpbnRlcmZhY2UgY2xhc3MuDQorICoNCisgKiBUaGlzIGNsYXNzIGlzIGludGVuZGVkIHRvIGJlIHVzZWQgYnkgc2Vuc29yIChhbmQgb3RoZXIgU1BJIGRldmljZSkgZHJpdmVycy4NCisgKiBJdCBwcm9iYWJseSBzaG91bGQgbm90IGJlIHVzZWQgZGlyZWN0bHkuDQorICoNCisgKiBUaGUgRlBHQSBvbmx5IHN1cHBvcnRzIGEgc2luZ2xlIFNQSSBpbnRlcmZhY2UuDQorICovDQorY2xhc3MgU1BJIDogcHVibGljIFNlbnNvckJhc2UNCit7DQorcHVibGljOg0KKwllbnVtIHRGcmFtZU1vZGUge2tDaGlwU2VsZWN0LCBrUHJlTGF0Y2hQdWxzZSwga1Bvc3RMYXRjaFB1bHNlLCBrUHJlQW5kUG9zdExhdGNoUHVsc2V9Ow0KKwllbnVtIHRTUElDb25zdGFudHMge2tSZWNlaXZlRklGT0RlcHRoPTUxMiwga1RyYW5zbWl0RklGT0RlcHRoPTUxMn07DQorDQorCVNQSShEaWdpdGFsT3V0cHV0ICZjbGssIERpZ2l0YWxPdXRwdXQgJm1vc2ksIERpZ2l0YWxJbnB1dCAmbWlzbyk7DQorCVNQSShEaWdpdGFsT3V0cHV0ICpjbGssIERpZ2l0YWxPdXRwdXQgKm1vc2ksIERpZ2l0YWxJbnB1dCAqbWlzbyk7DQorCVNQSShEaWdpdGFsT3V0cHV0ICZjbGssIERpZ2l0YWxPdXRwdXQgJm1vc2kpOw0KKwlTUEkoRGlnaXRhbE91dHB1dCAqY2xrLCBEaWdpdGFsT3V0cHV0ICptb3NpKTsNCisJU1BJKERpZ2l0YWxPdXRwdXQgJmNsaywgRGlnaXRhbElucHV0ICZtaXNvKTsNCisJU1BJKERpZ2l0YWxPdXRwdXQgKmNsaywgRGlnaXRhbElucHV0ICptaXNvKTsNCisJdmlydHVhbCB+U1BJKCk7DQorDQorCXZvaWQgU2V0Qml0c1BlcldvcmQoVUlOVDMyIGJpdHMpOw0KKwlVSU5UMzIgR2V0Qml0c1BlcldvcmQoKTsNCisJdm9pZCBTZXRDbG9ja1JhdGUoZG91YmxlIGh6KTsNCisNCisJdm9pZCBTZXRNU0JGaXJzdCgpOw0KKwl2b2lkIFNldExTQkZpcnN0KCk7DQorDQorCXZvaWQgU2V0U2FtcGxlRGF0YU9uRmFsbGluZygpOw0KKwl2b2lkIFNldFNhbXBsZURhdGFPblJpc2luZygpOw0KKw0KKwl2b2lkIFNldFNsYXZlU2VsZWN0KERpZ2l0YWxPdXRwdXQgKnNzLCB0RnJhbWVNb2RlIG1vZGU9a0NoaXBTZWxlY3QsIGJvb2wgYWN0aXZlTG93PWZhbHNlKTsNCisJdm9pZCBTZXRTbGF2ZVNlbGVjdChEaWdpdGFsT3V0cHV0ICZzcywgdEZyYW1lTW9kZSBtb2RlPWtDaGlwU2VsZWN0LCBib29sIGFjdGl2ZUxvdz1mYWxzZSk7DQorCURpZ2l0YWxPdXRwdXQgKkdldFNsYXZlU2VsZWN0KHRGcmFtZU1vZGUgKm1vZGU9TlVMTCwgYm9vbCAqYWN0aXZlTG93PU5VTEwpOw0KKw0KKwl2b2lkIFNldENsb2NrQWN0aXZlTG93KCk7DQorCXZvaWQgU2V0Q2xvY2tBY3RpdmVIaWdoKCk7DQorDQorCXZpcnR1YWwgdm9pZCBBcHBseUNvbmZpZygpOw0KKw0KKwl2aXJ0dWFsIFVJTlQxNiBHZXRPdXRwdXRGSUZPQXZhaWxhYmxlKCk7DQorCXZpcnR1YWwgVUlOVDE2IEdldE51bVJlY2VpdmVkKCk7DQorDQorCXZpcnR1YWwgYm9vbCBJc0RvbmUoKTsNCisJYm9vbCBIYWRSZWNlaXZlT3ZlcmZsb3coKTsNCisNCisJdmlydHVhbCB2b2lkIFdyaXRlKFVJTlQzMiBkYXRhKTsNCisJdmlydHVhbCBVSU5UMzIgUmVhZChib29sIGluaXRpYXRlID0gZmFsc2UpOw0KKw0KKwl2aXJ0dWFsIHZvaWQgUmVzZXQoKTsNCisJdmlydHVhbCB2b2lkIENsZWFyUmVjZWl2ZWREYXRhKCk7DQorDQorcHJvdGVjdGVkOg0KKwlzdGF0aWMgU0VNX0lEIG1fc2VtYXBob3JlOw0KKw0KKwl0U1BJKiBtX3NwaTsNCisJdFNQSTo6dENvbmZpZyBtX2NvbmZpZzsNCisJdFNQSTo6dENoYW5uZWxzIG1fY2hhbm5lbHM7DQorCURpZ2l0YWxPdXRwdXQgKm1fc3M7DQorDQorcHJpdmF0ZToNCisJdm9pZCBJbml0KERpZ2l0YWxPdXRwdXQgKmNsaywgRGlnaXRhbE91dHB1dCAqbW9zaSwgRGlnaXRhbElucHV0ICptaXNvKTsNCisNCisJRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFNQSSk7DQorfTsNCisNCisjZW5kaWYNCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9TYWZlUFdNLmNwcCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL1NhZmVQV00uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4NDRhYmMKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9TYWZlUFdNLmNwcApAQCAtMCwwICsxLDExNyBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBDb3B5cmlnaHQgKGMpIEZJUlNUIDIwMDguIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCQkJCQkJCSAgKi8NCisvKiBPcGVuIFNvdXJjZSBTb2Z0d2FyZSAtIG1heSBiZSBtb2RpZmllZCBhbmQgc2hhcmVkIGJ5IEZSQyB0ZWFtcy4gVGhlIGNvZGUgICAqLw0KKy8qIG11c3QgYmUgYWNjb21wYW5pZWQgYnkgdGhlIEZJUlNUIEJTRCBsaWNlbnNlIGZpbGUgaW4gJChXSU5EX0JBU0UpL1dQSUxpYi4gICovDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisjaW5jbHVkZSAiU2FmZVBXTS5oIg0KKw0KKyNpbmNsdWRlICJNb3RvclNhZmV0eUhlbHBlci5oIg0KKw0KKy8qKg0KKyAqIEluaXRpYWxpemUgYSBTYWZlUFdNIG9iamVjdCBieSBzZXR0aW5nIGRlZmF1bHRzDQorICovDQordm9pZCBTYWZlUFdNOjpJbml0U2FmZVBXTSgpDQorew0KKwltX3NhZmV0eUhlbHBlciA9IG5ldyBNb3RvclNhZmV0eUhlbHBlcih0aGlzKTsNCisJbV9zYWZldHlIZWxwZXItPlNldFNhZmV0eUVuYWJsZWQoZmFsc2UpOw0KK30NCisNCisvKioNCisgKiBDb25zdHJ1Y3RvciBmb3IgYSBTYWZlUFdNIG9iamVjdCB0YWtpbmcgYSBjaGFubmVsIG51bWJlcg0KKyAqIEBwYXJhbSBjaGFubmVsIFRoZSBjaGFubmVsIG51bWJlciB0byBiZSB1c2VkIGZvciB0aGUgdW5kZXJseWluZyBQV00gb2JqZWN0DQorICovDQorU2FmZVBXTTo6U2FmZVBXTShVSU5UMzIgY2hhbm5lbCk6IFBXTShjaGFubmVsKQ0KK3sNCisJSW5pdFNhZmVQV00oKTsNCit9DQorDQorLyoqDQorICogQ29uc3RydWN0b3IgZm9yIGEgU2FmZVBXTSBvYmplY3QgdGFraW5nIGNoYW5uZWwgYW5kIHNsb3QgbnVtYmVycy4NCisgKiBAcGFyYW0gbW9kdWxlTnVtYmVyIFRoZSBkaWdpdGFsIG1vZHVsZSAoMSBvciAyKS4NCisgKiBAcGFyYW0gY2hhbm5lbCBUaGUgUFdNIGNoYW5uZWwgbnVtYmVyIG9uIHRoZSBtb2R1bGUgKDEuLjEwKS4NCisgKi8NCitTYWZlUFdNOjpTYWZlUFdNKFVJTlQ4IG1vZHVsZU51bWJlciwgVUlOVDMyIGNoYW5uZWwpOiBQV00obW9kdWxlTnVtYmVyLCBjaGFubmVsKQ0KK3sNCisJSW5pdFNhZmVQV00oKTsNCit9DQorDQorU2FmZVBXTTo6flNhZmVQV00oKQ0KK3sNCisJZGVsZXRlIG1fc2FmZXR5SGVscGVyOw0KK30NCisNCisvKg0KKyAqIFNldCB0aGUgZXhwaXJhdGlvbiB0aW1lIGZvciB0aGUgUFdNIG9iamVjdA0KKyAqIEBwYXJhbSB0aW1lb3V0IFRoZSB0aW1lb3V0IChpbiBzZWNvbmRzKSBmb3IgdGhpcyBtb3RvciBvYmplY3QNCisgKi8NCit2b2lkIFNhZmVQV006OlNldEV4cGlyYXRpb24oZmxvYXQgdGltZW91dCkNCit7DQorCW1fc2FmZXR5SGVscGVyLT5TZXRFeHBpcmF0aW9uKHRpbWVvdXQpOw0KK30NCisNCisvKioNCisgKiBSZXR1cm4gdGhlIGV4cGlyYXRpb24gdGltZSBmb3IgdGhlIFBXTSBvYmplY3QuDQorICogQHJldHVybnMgVGhlIGV4cGlyYXRpb24gdGltZSB2YWx1ZS4NCisgKi8NCitmbG9hdCBTYWZlUFdNOjpHZXRFeHBpcmF0aW9uKCkNCit7DQorCXJldHVybiBtX3NhZmV0eUhlbHBlci0+R2V0RXhwaXJhdGlvbigpOw0KK30NCisNCisvKioNCisgKiBDaGVjayBpZiB0aGUgUFdNIG9iamVjdCBpcyBjdXJyZW50bHkgYWxpdmUgb3Igc3RvcHBlZCBkdWUgdG8gYSB0aW1lb3V0Lg0KKyAqIEByZXR1cm5zIGEgYm9vbCB2YWx1ZSB0aGF0IGlzIHRydWUgaWYgdGhlIG1vdG9yIGhhcyBOT1QgdGltZWQgb3V0IGFuZCBzaG91bGQgc3RpbGwNCisgKiBiZSBydW5uaW5nLg0KKyAqLw0KK2Jvb2wgU2FmZVBXTTo6SXNBbGl2ZSgpDQorew0KKwlyZXR1cm4gbV9zYWZldHlIZWxwZXItPklzQWxpdmUoKTsNCit9DQorDQorLyoqDQorICogU3RvcCB0aGUgbW90b3IgYXNzb2NpYXRlZCB3aXRoIHRoaXMgUFdNIG9iamVjdC4NCisgKiBUaGlzIGlzIGNhbGxlZCBieSB0aGUgTW90b3JTYWZldHlIZWxwZXIgb2JqZWN0IHdoZW4gaXQgaGFzIGEgdGltZW91dCBmb3IgdGhpcyBQV00gYW5kIG5lZWRzIHRvDQorICogc3RvcCBpdCBmcm9tIHJ1bm5pbmcuDQorICovDQordm9pZCBTYWZlUFdNOjpTdG9wTW90b3IoKQ0KK3sNCisJU2V0UmF3KGtQd21EaXNhYmxlZCk7DQorfQ0KKw0KKy8qKg0KKyAqIEVuYWJsZS9kaXNhYmxlIG1vdG9yIHNhZmV0eSBmb3IgdGhpcyBkZXZpY2UNCisgKiBUdXJuIG9uIGFuZCBvZmYgdGhlIG1vdG9yIHNhZmV0eSBvcHRpb24gZm9yIHRoaXMgUFdNIG9iamVjdC4NCisgKiBAcGFyYW0gZW5hYmxlZCBUcnVlIGlmIG1vdG9yIHNhZmV0eSBpcyBlbmZvcmNlZCBmb3IgdGhpcyBvYmplY3QNCisgKi8NCit2b2lkIFNhZmVQV006OlNldFNhZmV0eUVuYWJsZWQoYm9vbCBlbmFibGVkKQ0KK3sNCisJbV9zYWZldHlIZWxwZXItPlNldFNhZmV0eUVuYWJsZWQoZW5hYmxlZCk7DQorfQ0KKw0KKy8qKg0KKyAqIENoZWNrIGlmIG1vdG9yIHNhZmV0eSBpcyBlbmFibGVkIGZvciB0aGlzIG9iamVjdA0KKyAqIEByZXR1cm5zIFRydWUgaWYgbW90b3Igc2FmZXR5IGlzIGVuZm9yY2VkIGZvciB0aGlzIG9iamVjdA0KKyAqLw0KK2Jvb2wgU2FmZVBXTTo6SXNTYWZldHlFbmFibGVkKCkNCit7DQorCXJldHVybiBtX3NhZmV0eUhlbHBlci0+SXNTYWZldHlFbmFibGVkKCk7DQorfQ0KKw0KK3ZvaWQgU2FmZVBXTTo6R2V0RGVzY3JpcHRpb24oY2hhciAqZGVzYykNCit7DQorCXNwcmludGYoZGVzYywgIlBXTSAlZCBvbiBtb2R1bGUgJWQiLCBHZXRDaGFubmVsKCksIEdldE1vZHVsZU51bWJlcigpKTsNCit9DQorDQorLyoqDQorICogRmVlZCB0aGUgTW90b3JTYWZldHkgdGltZXIgd2hlbiBzZXR0aW5nIHRoZSBzcGVlZC4NCisgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIHN1YmNsYXNzIG1vdG9yIHdoZW5ldmVyIGl0IHVwZGF0ZXMgaXRzIHNwZWVkLCB0aGVyZWJ5IHJlc2V0aW5nDQorICogdGhlIHRpbWVvdXQgdmFsdWUuDQorICogQHBhcmFtIHNwZWVkIFZhbHVlIHRvIHBhc3MgdG8gdGhlIFBXTSBjbGFzcw0KKyAqLw0KK3ZvaWQgU2FmZVBXTTo6U2V0U3BlZWQoZmxvYXQgc3BlZWQpDQorew0KKwlQV006OlNldFNwZWVkKHNwZWVkKTsNCisJbV9zYWZldHlIZWxwZXItPkZlZWQoKTsNCit9DQorDQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvU2FmZVBXTS5oIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvU2FmZVBXTS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyNDEwYzIKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9TYWZlUFdNLmgKQEAgLTAsMCArMSw0MyBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBDb3B5cmlnaHQgKGMpIEZJUlNUIDIwMDguIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCQkJCQkJCSAgKi8NCisvKiBPcGVuIFNvdXJjZSBTb2Z0d2FyZSAtIG1heSBiZSBtb2RpZmllZCBhbmQgc2hhcmVkIGJ5IEZSQyB0ZWFtcy4gVGhlIGNvZGUgICAqLw0KKy8qIG11c3QgYmUgYWNjb21wYW5pZWQgYnkgdGhlIEZJUlNUIEJTRCBsaWNlbnNlIGZpbGUgaW4gJChXSU5EX0JBU0UpL1dQSUxpYi4gICovDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisjaWZuZGVmIF9fU0FGRV9QV01fXw0KKyNkZWZpbmUgX19TQUZFX1BXTV9fDQorDQorI2luY2x1ZGUgIk1vdG9yU2FmZXR5LmgiDQorI2luY2x1ZGUgIlBXTS5oIg0KKw0KK2NsYXNzIE1vdG9yU2FmZXR5SGVscGVyOw0KKw0KKy8qKg0KKyAqIEEgc2FmZSB2ZXJzaW9uIG9mIHRoZSBQV00gY2xhc3MuDQorICogSXQgaXMgc2FmZSBiZWNhdXNlIGl0IGltcGxlbWVudHMgdGhlIE1vdG9yU2FmZXR5IGludGVyZmFjZSB0aGF0IHByb3ZpZGVzIHRpbWVvdXRzDQorICogaW4gdGhlIGV2ZW50IHRoYXQgdGhlIG1vdG9yIHZhbHVlIGlzIG5vdCB1cGRhdGVkIGJlZm9yZSB0aGUgZXhwaXJhdGlvbiB0aW1lLg0KKyAqIFRoaXMgZGVsZWdhdGVzIHRoZSBhY3R1YWwgd29yayB0byBhIE1vdG9yU2FmZXR5SGVscGVyIG9iamVjdCB0aGF0IGlzIHVzZWQgZm9yIGFsbA0KKyAqIG9iamVjdHMgdGhhdCBpbXBsZW1lbnQgTW90b3JTYWZldHkuDQorICovDQorY2xhc3MgU2FmZVBXTTogcHVibGljIFBXTSwgcHVibGljIE1vdG9yU2FmZXR5DQorew0KK3B1YmxpYzoNCisJZXhwbGljaXQgU2FmZVBXTShVSU5UMzIgY2hhbm5lbCk7DQorCVNhZmVQV00oVUlOVDggbW9kdWxlTnVtYmVyLCBVSU5UMzIgY2hhbm5lbCk7DQorCX5TYWZlUFdNKCk7DQorDQorCXZvaWQgU2V0RXhwaXJhdGlvbihmbG9hdCB0aW1lb3V0KTsNCisJZmxvYXQgR2V0RXhwaXJhdGlvbigpOw0KKwlib29sIElzQWxpdmUoKTsNCisJdm9pZCBTdG9wTW90b3IoKTsNCisJYm9vbCBJc1NhZmV0eUVuYWJsZWQoKTsNCisJdm9pZCBTZXRTYWZldHlFbmFibGVkKGJvb2wgZW5hYmxlZCk7DQorCXZvaWQgR2V0RGVzY3JpcHRpb24oY2hhciAqZGVzYyk7DQorDQorCXZpcnR1YWwgdm9pZCBTZXRTcGVlZChmbG9hdCBzcGVlZCk7DQorcHJpdmF0ZToNCisJdm9pZCBJbml0U2FmZVBXTSgpOw0KKwlNb3RvclNhZmV0eUhlbHBlciAqbV9zYWZldHlIZWxwZXI7DQorfTsNCisNCisjZW5kaWYNCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9TY3JpcHRzL0NvcHlXUElMaWJUb1VwZGF0ZURpcmVjdG9yeS5jbWQgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9TY3JpcHRzL0NvcHlXUElMaWJUb1VwZGF0ZURpcmVjdG9yeS5jbWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGZlMzBlMAotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL1NjcmlwdHMvQ29weVdQSUxpYlRvVXBkYXRlRGlyZWN0b3J5LmNtZApAQCAtMCwwICsxLDgzIEBACityZW0gY2QgQzpcV2luZFJpdmVyXHdvcmtzcGFjZVxXb3JrYmVuY2hVcGRhdGUNCitjZCAuLlwuLlxXb3JrYmVuY2hVcGRhdGUNCisNCisNCitta2RpciB2eHdvcmtzLTYuM1x0YXJnZXRcaFxXUElMaWJcQnV0dG9ucw0KK21rZGlyIHZ4d29ya3MtNi4zXHRhcmdldFxoXFdQSUxpYlxDQU4NCitta2RpciB2eHdvcmtzLTYuM1x0YXJnZXRcaFxXUElMaWJcQ2hpcE9iamVjdA0KK21rZGlyIHZ4d29ya3MtNi4zXHRhcmdldFxoXFdQSUxpYlxDSW50ZXJmYWNlcw0KK21rZGlyIHZ4d29ya3MtNi4zXHRhcmdldFxoXFdQSUxpYlxDb21tYW5kcw0KK21rZGlyIHZ4d29ya3MtNi4zXHRhcmdldFxoXFdQSUxpYlxOZXR3b3JrQ29tbXVuaWNhdGlvbg0KK21rZGlyIHZ4d29ya3MtNi4zXHRhcmdldFxoXFdQSUxpYlxTbWFydERhc2hib2FyZA0KK21rZGlyIHZ4d29ya3MtNi4zXHRhcmdldFxoXFdQSUxpYlx2aXNhDQorbWtkaXIgdnh3b3Jrcy02LjNcdGFyZ2V0XGhcV1BJTGliXFZpc2lvbg0KK21rZGlyIHZ4d29ya3MtNi4zXHRhcmdldFxoXFdQSUxpYlxWaXNpb24yMDA5DQorDQorbWtkaXIgdnh3b3Jrcy02LjNcdGFyZ2V0XGhcV1BJTGliXExpdmVXaW5kb3cNCitta2RpciB2eHdvcmtzLTYuM1x0YXJnZXRcaFxXUElMaWJcbmV0d29ya3RhYmxlcw0KK21rZGlyIHZ4d29ya3MtNi4zXHRhcmdldFxoXFdQSUxpYlx0YWJsZXMNCitta2RpciB2eHdvcmtzLTYuM1x0YXJnZXRcaFxXUElMaWJcbmV0d29ya3RhYmxlczINCitta2RpciB2eHdvcmtzLTYuM1x0YXJnZXRcaFxXUElMaWJcbmV0d29ya3RhYmxlczJcY2xpZW50DQorbWtkaXIgdnh3b3Jrcy02LjNcdGFyZ2V0XGhcV1BJTGliXG5ldHdvcmt0YWJsZXMyXGNvbm5lY3Rpb24NCitta2RpciB2eHdvcmtzLTYuM1x0YXJnZXRcaFxXUElMaWJcbmV0d29ya3RhYmxlczJcc2VydmVyDQorbWtkaXIgdnh3b3Jrcy02LjNcdGFyZ2V0XGhcV1BJTGliXG5ldHdvcmt0YWJsZXMyXHN0cmVhbQ0KK21rZGlyIHZ4d29ya3MtNi4zXHRhcmdldFxoXFdQSUxpYlxuZXR3b3JrdGFibGVzMlx0aHJlYWQNCitta2RpciB2eHdvcmtzLTYuM1x0YXJnZXRcaFxXUElMaWJcbmV0d29ya3RhYmxlczJcdHlwZQ0KK21rZGlyIHZ4d29ya3MtNi4zXHRhcmdldFxoXFdQSUxpYlxuZXR3b3JrdGFibGVzMlx1dGlsDQorDQorDQorZGVsIHZ4d29ya3MtNi4zXHRhcmdldFxoXFdQSWxpYlwqLmgNCitkZWwgdnh3b3Jrcy02LjNcdGFyZ2V0XGhcV1BJbGliXEJ1dHRvbnNcKi5oDQorZGVsIHZ4d29ya3MtNi4zXHRhcmdldFxoXFdQSWxpYlxDQU5cKi5oDQorZGVsIHZ4d29ya3MtNi4zXHRhcmdldFxoXFdQSWxpYlxDaGlwT2JqZWN0XCouaA0KK2RlbCB2eHdvcmtzLTYuM1x0YXJnZXRcaFxXUElsaWJcQ0ludGVyZmFjZXNcKi5oDQorZGVsIHZ4d29ya3MtNi4zXHRhcmdldFxoXFdQSWxpYlxDb21tYW5kc1wqLmgNCitkZWwgdnh3b3Jrcy02LjNcdGFyZ2V0XGhcV1BJbGliXE5ldHdvcmtDb21tdW5pY2F0aW9uXCouaA0KK2RlbCB2eHdvcmtzLTYuM1x0YXJnZXRcaFxXUElsaWJcU21hcnREYXNoYm9hcmRcKi5oDQorZGVsIHZ4d29ya3MtNi4zXHRhcmdldFxoXFdQSWxpYlx2aXNhXCouaA0KK2RlbCB2eHdvcmtzLTYuM1x0YXJnZXRcaFxXUElsaWJcVmlzaW9uXCouaA0KK2RlbCB2eHdvcmtzLTYuM1x0YXJnZXRcaFxXUElsaWJcVmlzaW9uMjAwOVwqLmgNCisNCitkZWwgdnh3b3Jrcy02LjNcdGFyZ2V0XGhcV1BJbGliXExpdmVXaW5kb3dcKi5oDQorZGVsIHZ4d29ya3MtNi4zXHRhcmdldFxoXFdQSWxpYlxuZXR3b3JrdGFibGVzXCouaA0KK2RlbCB2eHdvcmtzLTYuM1x0YXJnZXRcaFxXUElsaWJcdGFibGVzXCouaA0KK2RlbCB2eHdvcmtzLTYuM1x0YXJnZXRcaFxXUElsaWJcbmV0d29ya3RhYmxlczJcKi5oDQorZGVsIHZ4d29ya3MtNi4zXHRhcmdldFxoXFdQSWxpYlxuZXR3b3JrdGFibGVzMlxjbGllbnRcKi5oDQorZGVsIHZ4d29ya3MtNi4zXHRhcmdldFxoXFdQSWxpYlxuZXR3b3JrdGFibGVzMlxjb25uZWN0aW9uXCouaA0KK2RlbCB2eHdvcmtzLTYuM1x0YXJnZXRcaFxXUElsaWJcbmV0d29ya3RhYmxlczJcc2VydmVyXCouaA0KK2RlbCB2eHdvcmtzLTYuM1x0YXJnZXRcaFxXUElsaWJcbmV0d29ya3RhYmxlczJcc3RyZWFtXCouaA0KK2RlbCB2eHdvcmtzLTYuM1x0YXJnZXRcaFxXUElsaWJcbmV0d29ya3RhYmxlczJcdGhyZWFkXCouaA0KK2RlbCB2eHdvcmtzLTYuM1x0YXJnZXRcaFxXUElsaWJcbmV0d29ya3RhYmxlczJcdHlwZVwqLmgNCitkZWwgdnh3b3Jrcy02LjNcdGFyZ2V0XGhcV1BJbGliXG5ldHdvcmt0YWJsZXMyXHV0aWxcKi5oDQorDQorZGVsIHZ4d29ya3MtNi4zXHRhcmdldFxsaWJcV1BJTGliLmENCisNCisNCitjb3B5IEM6XFdpbmRSaXZlclx3b3Jrc3BhY2VcV1BJTGliXCouaCB2eHdvcmtzLTYuM1x0YXJnZXRcaFxXUElMaWINCitjb3B5IEM6XFdpbmRSaXZlclx3b3Jrc3BhY2VcV1BJTGliXEJ1dHRvbnNcKi5oIHZ4d29ya3MtNi4zXHRhcmdldFxoXFdQSUxpYlxCdXR0b25zDQorY29weSBDOlxXaW5kUml2ZXJcd29ya3NwYWNlXFdQSUxpYlxDQU5cKi5oIHZ4d29ya3MtNi4zXHRhcmdldFxoXFdQSUxpYlxDQU4NCitjb3B5IEM6XFdpbmRSaXZlclx3b3Jrc3BhY2VcV1BJTGliXENoaXBPYmplY3RcKi5oIHZ4d29ya3MtNi4zXHRhcmdldFxoXFdQSUxpYlxDaGlwT2JqZWN0DQorY29weSBDOlxXaW5kUml2ZXJcd29ya3NwYWNlXFdQSUxpYlxDSW50ZXJmYWNlc1wqLmggdnh3b3Jrcy02LjNcdGFyZ2V0XGhcV1BJTGliXENJbnRlcmZhY2VzDQorY29weSBDOlxXaW5kUml2ZXJcd29ya3NwYWNlXFdQSUxpYlxDb21tYW5kc1wqLmggdnh3b3Jrcy02LjNcdGFyZ2V0XGhcV1BJTGliXENvbW1hbmRzDQorY29weSBDOlxXaW5kUml2ZXJcd29ya3NwYWNlXFdQSUxpYlxOZXR3b3JrQ29tbXVuaWNhdGlvblwqLmggdnh3b3Jrcy02LjNcdGFyZ2V0XGhcV1BJTGliXE5ldHdvcmtDb21tdW5pY2F0aW9uDQorY29weSBDOlxXaW5kUml2ZXJcd29ya3NwYWNlXFdQSUxpYlxTbWFydERhc2hib2FyZFwqLmggdnh3b3Jrcy02LjNcdGFyZ2V0XGhcV1BJTGliXFNtYXJ0RGFzaGJvYXJkDQorY29weSBDOlxXaW5kUml2ZXJcd29ya3NwYWNlXFdQSUxpYlx2aXNhXCouaCB2eHdvcmtzLTYuM1x0YXJnZXRcaFxXUElMaWJcdmlzYQ0KK2NvcHkgQzpcV2luZFJpdmVyXHdvcmtzcGFjZVxXUElMaWJcVmlzaW9uXCouaCB2eHdvcmtzLTYuM1x0YXJnZXRcaFxXUElMaWJcVmlzaW9uDQorY29weSBDOlxXaW5kUml2ZXJcd29ya3NwYWNlXFdQSUxpYlxWaXNpb24yMDA5XCouaCB2eHdvcmtzLTYuM1x0YXJnZXRcaFxXUElMaWJcVmlzaW9uMjAwOQ0KKw0KK2NvcHkgQzpcV2luZFJpdmVyXHdvcmtzcGFjZVxXUElMaWJcTGl2ZVdpbmRvd1wqLmggdnh3b3Jrcy02LjNcdGFyZ2V0XGhcV1BJTGliXExpdmVXaW5kb3cNCitjb3B5IEM6XFdpbmRSaXZlclx3b3Jrc3BhY2VcV1BJTGliXG5ldHdvcmt0YWJsZXNcKi5oIHZ4d29ya3MtNi4zXHRhcmdldFxoXFdQSUxpYlxuZXR3b3JrdGFibGVzDQorY29weSBDOlxXaW5kUml2ZXJcd29ya3NwYWNlXFdQSUxpYlx0YWJsZXNcKi5oIHZ4d29ya3MtNi4zXHRhcmdldFxoXFdQSUxpYlx0YWJsZXMNCitjb3B5IEM6XFdpbmRSaXZlclx3b3Jrc3BhY2VcV1BJTGliXG5ldHdvcmt0YWJsZXMyXCouaCB2eHdvcmtzLTYuM1x0YXJnZXRcaFxXUElMaWJcbmV0d29ya3RhYmxlczINCitjb3B5IEM6XFdpbmRSaXZlclx3b3Jrc3BhY2VcV1BJTGliXG5ldHdvcmt0YWJsZXMyXGNsaWVudFwqLmggdnh3b3Jrcy02LjNcdGFyZ2V0XGhcV1BJTGliXG5ldHdvcmt0YWJsZXMyXGNsaWVudA0KK2NvcHkgQzpcV2luZFJpdmVyXHdvcmtzcGFjZVxXUElMaWJcbmV0d29ya3RhYmxlczJcY29ubmVjdGlvblwqLmggdnh3b3Jrcy02LjNcdGFyZ2V0XGhcV1BJTGliXG5ldHdvcmt0YWJsZXMyXGNvbm5lY3Rpb24NCitjb3B5IEM6XFdpbmRSaXZlclx3b3Jrc3BhY2VcV1BJTGliXG5ldHdvcmt0YWJsZXMyXHNlcnZlclwqLmggdnh3b3Jrcy02LjNcdGFyZ2V0XGhcV1BJTGliXG5ldHdvcmt0YWJsZXMyXHNlcnZlcg0KK2NvcHkgQzpcV2luZFJpdmVyXHdvcmtzcGFjZVxXUElMaWJcbmV0d29ya3RhYmxlczJcc3RyZWFtXCouaCB2eHdvcmtzLTYuM1x0YXJnZXRcaFxXUElMaWJcbmV0d29ya3RhYmxlczJcc3RyZWFtDQorY29weSBDOlxXaW5kUml2ZXJcd29ya3NwYWNlXFdQSUxpYlxuZXR3b3JrdGFibGVzMlx0aHJlYWRcKi5oIHZ4d29ya3MtNi4zXHRhcmdldFxoXFdQSUxpYlxuZXR3b3JrdGFibGVzMlx0aHJlYWQNCitjb3B5IEM6XFdpbmRSaXZlclx3b3Jrc3BhY2VcV1BJTGliXG5ldHdvcmt0YWJsZXMyXHR5cGVcKi5oIHZ4d29ya3MtNi4zXHRhcmdldFxoXFdQSUxpYlxuZXR3b3JrdGFibGVzMlx0eXBlDQorY29weSBDOlxXaW5kUml2ZXJcd29ya3NwYWNlXFdQSUxpYlxuZXR3b3JrdGFibGVzMlx1dGlsXCouaCB2eHdvcmtzLTYuM1x0YXJnZXRcaFxXUElMaWJcbmV0d29ya3RhYmxlczJcdXRpbA0KKw0KKw0KK2NvcHkgQzpcV2luZFJpdmVyXHdvcmtzcGFjZVxXUElMaWJcUFBDNjAzZ251XFdQSUxpYlxEZWJ1Z1xXUElMaWIuYSB2eHdvcmtzLTYuM1x0YXJnZXRcbGliDQorDQorY2QgQzpcV2luZFJpdmVyXHdvcmtzcGFjZVxXUElMaWJcU2NyaXB0cw0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL1NjcmlwdHMvTWFrZWZpbGUgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9TY3JpcHRzL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhMDVjOTYKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9TY3JpcHRzL01ha2VmaWxlCkBAIC0wLDAgKzEsMjE4NCBAQAorIyBXaW5kIFJpdmVyIFdvcmtiZW5jaCBnZW5lcmF0ZWQgTWFrZWZpbGUuDQorIyBEbyBub3QgZWRpdCEhIQ0KKyMNCisjIFRoZSBmaWxlICIud3JtYWtlZmlsZSIgaXMgdGhlIHRlbXBsYXRlIHVzZWQgYnkgdGhlIFdpbmQgUml2ZXIgV29ya2JlbmNoIHRvDQorIyBnZW5lcmF0ZSB0aGUgbWFrZWZpbGVzIG9mIHRoaXMgcHJvamVjdC4gQWRkIHVzZXItc3BlY2lmaWMgYnVpbGQgdGFyZ2V0cyBhbmQNCisjIG1ha2UgcnVsZXMgb25seSghKSBpbiB0aGlzIHByb2plY3QncyAiLndybWFrZWZpbGUiIGZpbGUuIFRoZXNlIHdpbGwgdGhlbiBiZQ0KKyMgYXV0b21hdGljYWxseSBkdW1wZWQgaW50byB0aGUgbWFrZWZpbGVzLg0KKw0KK1dJTkRfSE9NRSA6PSAkKHN1YnN0IFwsLywkKFdJTkRfSE9NRSkpDQorV0lORF9CQVNFIDo9ICQoc3Vic3QgXCwvLCQoV0lORF9CQVNFKSkNCitXSU5EX1VTUiA6PSAkKHN1YnN0IFwsLywkKFdJTkRfVVNSKSkNCisNCithbGwgOiBwcmVfYnVpbGQgbWFpbl9hbGwgcG9zdF9idWlsZA0KKw0KK19jbGVhbiA6Og0KKwlAZWNobyAibWFrZTogcmVtb3ZpbmcgdGFyZ2V0cyBhbmQgb2JqZWN0cyBvZiBgcHdkYCINCisNCitUUkFDRT0wDQorVFJBQ0VPTj0kKFRSQUNFOjA9QCkNCitUUkFDRV9GTEFHPSQoVFJBQ0VPTjoxPSkNCisNCitNQUtFRklMRSA6PSBNYWtlZmlsZQ0KKw0KK0JVSUxEX1NQRUMgPSBQUEM2MDNnbnUNCitERUJVR19NT0RFID0gMQ0KK1NSQ19ESVIgOj0gLg0KK0JVSUxEX1JPT1RfRElSIDo9IA0KK1BSSl9ST09UX0RJUiA6PSBDOi93aW5kcml2ZXIvd29ya3NwYWNlL1dQSUxpYg0KK1dTX1JPT1RfRElSIDo9IEM6L3dpbmRyaXZlci93b3Jrc3BhY2UNCisNCitBTExfQlVJTERfU1BFQ1MgOj0gUFBDMzJkaWFiIFBQQzMyZ251IFBQQzMyc2ZkaWFiIFBQQzMyc2ZnbnUgXA0KKwkgUFBDNDAzZGlhYiBQUEM0MDNnbnUgUFBDNDA1ZGlhYiBQUEM0MDVnbnUgXA0KKwkgUFBDNDA1c2ZkaWFiIFBQQzQwNXNmZ251IFBQQzQ0MGRpYWIgUFBDNDQwZ251IFwNCisJIFBQQzQ0MHNmZGlhYiBQUEM0NDBzZmdudSBQUEM2MDNkaWFiIFBQQzYwM2dudSBcDQorCSBQUEM2MDRkaWFiIFBQQzYwNGdudSBQUEM4NVhYZGlhYiBQUEM4NVhYZ251IFwNCisJIFBQQzg1WFhzZmRpYWIgUFBDODVYWHNmZ251IFBQQzg2MHNmZGlhYiBQUEM4NjBzZmdudSBcDQorCSBTSU1MSU5VWGRpYWIgU0lNTElOVVhnbnUgU0lNTlRkaWFiIFNJTU5UZ251IFwNCisJIFNJTVNQQVJDU09MQVJJU2RpYWIgU0lNU1BBUkNTT0xBUklTZ251DQorRU5BQkxFRF9CVUlMRF9TUEVDUyA6PSBQUEM2MDNnbnUNCisNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzMyZGlhYikNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorT0JKX0RJUiA6PSBQUEMzMmRpYWJfREVCVUcNCitlbHNlDQorT0JKX0RJUiA6PSBQUEMzMmRpYWINCitlbmRpZg0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEMzMmdudSkNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorT0JKX0RJUiA6PSBQUEMzMmdudV9ERUJVRw0KK2Vsc2UNCitPQkpfRElSIDo9IFBQQzMyZ251DQorZW5kaWYNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDMzJzZmRpYWIpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK09CSl9ESVIgOj0gUFBDMzJzZmRpYWJfREVCVUcNCitlbHNlDQorT0JKX0RJUiA6PSBQUEMzMnNmZGlhYg0KK2VuZGlmDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzMyc2ZnbnUpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK09CSl9ESVIgOj0gUFBDMzJzZmdudV9ERUJVRw0KK2Vsc2UNCitPQkpfRElSIDo9IFBQQzMyc2ZnbnUNCitlbmRpZg0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM0MDNkaWFiKQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitPQkpfRElSIDo9IFBQQzQwM2RpYWJfREVCVUcNCitlbHNlDQorT0JKX0RJUiA6PSBQUEM0MDNkaWFiDQorZW5kaWYNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNDAzZ251KQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitPQkpfRElSIDo9IFBQQzQwM2dudV9ERUJVRw0KK2Vsc2UNCitPQkpfRElSIDo9IFBQQzQwM2dudQ0KK2VuZGlmDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzQwNWRpYWIpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK09CSl9ESVIgOj0gUFBDNDA1ZGlhYl9ERUJVRw0KK2Vsc2UNCitPQkpfRElSIDo9IFBQQzQwNWRpYWINCitlbmRpZg0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM0MDVnbnUpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK09CSl9ESVIgOj0gUFBDNDA1Z251X0RFQlVHDQorZWxzZQ0KK09CSl9ESVIgOj0gUFBDNDA1Z251DQorZW5kaWYNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNDA1c2ZkaWFiKQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitPQkpfRElSIDo9IFBQQzQwNXNmZGlhYl9ERUJVRw0KK2Vsc2UNCitPQkpfRElSIDo9IFBQQzQwNXNmZGlhYg0KK2VuZGlmDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzQwNXNmZ251KQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitPQkpfRElSIDo9IFBQQzQwNXNmZ251X0RFQlVHDQorZWxzZQ0KK09CSl9ESVIgOj0gUFBDNDA1c2ZnbnUNCitlbmRpZg0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM0NDBkaWFiKQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitPQkpfRElSIDo9IFBQQzQ0MGRpYWJfREVCVUcNCitlbHNlDQorT0JKX0RJUiA6PSBQUEM0NDBkaWFiDQorZW5kaWYNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNDQwZ251KQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitPQkpfRElSIDo9IFBQQzQ0MGdudV9ERUJVRw0KK2Vsc2UNCitPQkpfRElSIDo9IFBQQzQ0MGdudQ0KK2VuZGlmDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzQ0MHNmZGlhYikNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorT0JKX0RJUiA6PSBQUEM0NDBzZmRpYWJfREVCVUcNCitlbHNlDQorT0JKX0RJUiA6PSBQUEM0NDBzZmRpYWINCitlbmRpZg0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM0NDBzZmdudSkNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorT0JKX0RJUiA6PSBQUEM0NDBzZmdudV9ERUJVRw0KK2Vsc2UNCitPQkpfRElSIDo9IFBQQzQ0MHNmZ251DQorZW5kaWYNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNjAzZGlhYikNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorT0JKX0RJUiA6PSBQUEM2MDNkaWFiX0RFQlVHDQorZWxzZQ0KK09CSl9ESVIgOj0gUFBDNjAzZGlhYg0KK2VuZGlmDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzYwM2dudSkNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorT0JKX0RJUiA6PSBQUEM2MDNnbnVfREVCVUcNCitlbHNlDQorT0JKX0RJUiA6PSBQUEM2MDNnbnUNCitlbmRpZg0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM2MDRkaWFiKQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitPQkpfRElSIDo9IFBQQzYwNGRpYWJfREVCVUcNCitlbHNlDQorT0JKX0RJUiA6PSBQUEM2MDRkaWFiDQorZW5kaWYNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNjA0Z251KQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitPQkpfRElSIDo9IFBQQzYwNGdudV9ERUJVRw0KK2Vsc2UNCitPQkpfRElSIDo9IFBQQzYwNGdudQ0KK2VuZGlmDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzg1WFhkaWFiKQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitPQkpfRElSIDo9IFBQQzg1WFhkaWFiX0RFQlVHDQorZWxzZQ0KK09CSl9ESVIgOj0gUFBDODVYWGRpYWINCitlbmRpZg0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM4NVhYZ251KQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitPQkpfRElSIDo9IFBQQzg1WFhnbnVfREVCVUcNCitlbHNlDQorT0JKX0RJUiA6PSBQUEM4NVhYZ251DQorZW5kaWYNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDODVYWHNmZGlhYikNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorT0JKX0RJUiA6PSBQUEM4NVhYc2ZkaWFiX0RFQlVHDQorZWxzZQ0KK09CSl9ESVIgOj0gUFBDODVYWHNmZGlhYg0KK2VuZGlmDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzg1WFhzZmdudSkNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorT0JKX0RJUiA6PSBQUEM4NVhYc2ZnbnVfREVCVUcNCitlbHNlDQorT0JKX0RJUiA6PSBQUEM4NVhYc2ZnbnUNCitlbmRpZg0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM4NjBzZmRpYWIpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK09CSl9ESVIgOj0gUFBDODYwc2ZkaWFiX0RFQlVHDQorZWxzZQ0KK09CSl9ESVIgOj0gUFBDODYwc2ZkaWFiDQorZW5kaWYNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDODYwc2ZnbnUpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK09CSl9ESVIgOj0gUFBDODYwc2ZnbnVfREVCVUcNCitlbHNlDQorT0JKX0RJUiA6PSBQUEM4NjBzZmdudQ0KK2VuZGlmDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFNJTUxJTlVYZGlhYikNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorT0JKX0RJUiA6PSBTSU1MSU5VWGRpYWJfREVCVUcNCitlbHNlDQorT0JKX0RJUiA6PSBTSU1MSU5VWGRpYWINCitlbmRpZg0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxTSU1MSU5VWGdudSkNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorT0JKX0RJUiA6PSBTSU1MSU5VWGdudV9ERUJVRw0KK2Vsc2UNCitPQkpfRElSIDo9IFNJTUxJTlVYZ251DQorZW5kaWYNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksU0lNTlRkaWFiKQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitPQkpfRElSIDo9IFNJTU5UZGlhYl9ERUJVRw0KK2Vsc2UNCitPQkpfRElSIDo9IFNJTU5UZGlhYg0KK2VuZGlmDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFNJTU5UZ251KQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitPQkpfRElSIDo9IFNJTU5UZ251X0RFQlVHDQorZWxzZQ0KK09CSl9ESVIgOj0gU0lNTlRnbnUNCitlbmRpZg0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxTSU1TUEFSQ1NPTEFSSVNkaWFiKQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitPQkpfRElSIDo9IFNJTVNQQVJDU09MQVJJU2RpYWJfREVCVUcNCitlbHNlDQorT0JKX0RJUiA6PSBTSU1TUEFSQ1NPTEFSSVNkaWFiDQorZW5kaWYNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksU0lNU1BBUkNTT0xBUklTZ251KQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitPQkpfRElSIDo9IFNJTVNQQVJDU09MQVJJU2dudV9ERUJVRw0KK2Vsc2UNCitPQkpfRElSIDo9IFNJTVNQQVJDU09MQVJJU2dudQ0KK2VuZGlmDQorZW5kaWYNCisNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzMyZGlhYikNCitTVUJESVJTIDo9DQorT0JKRUNUUyA6PQ0KKw0KK1BST0pFQ1RfVEFSR0VUUyA6PSAkKE9CSkVDVFMpDQorDQorU1VCX09CSkVDVFMgOj0NCitTVUJfVEFSR0VUUyA6PQ0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEMzMmdudSkNCitTVUJESVJTIDo9DQorT0JKRUNUUyA6PQ0KKw0KK1BST0pFQ1RfVEFSR0VUUyA6PSAkKE9CSkVDVFMpDQorDQorU1VCX09CSkVDVFMgOj0NCitTVUJfVEFSR0VUUyA6PQ0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEMzMnNmZGlhYikNCitTVUJESVJTIDo9DQorT0JKRUNUUyA6PQ0KKw0KK1BST0pFQ1RfVEFSR0VUUyA6PSAkKE9CSkVDVFMpDQorDQorU1VCX09CSkVDVFMgOj0NCitTVUJfVEFSR0VUUyA6PQ0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEMzMnNmZ251KQ0KK1NVQkRJUlMgOj0NCitPQkpFQ1RTIDo9DQorDQorUFJPSkVDVF9UQVJHRVRTIDo9ICQoT0JKRUNUUykNCisNCitTVUJfT0JKRUNUUyA6PQ0KK1NVQl9UQVJHRVRTIDo9DQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzQwM2RpYWIpDQorU1VCRElSUyA6PQ0KK09CSkVDVFMgOj0NCisNCitQUk9KRUNUX1RBUkdFVFMgOj0gJChPQkpFQ1RTKQ0KKw0KK1NVQl9PQkpFQ1RTIDo9DQorU1VCX1RBUkdFVFMgOj0NCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNDAzZ251KQ0KK1NVQkRJUlMgOj0NCitPQkpFQ1RTIDo9DQorDQorUFJPSkVDVF9UQVJHRVRTIDo9ICQoT0JKRUNUUykNCisNCitTVUJfT0JKRUNUUyA6PQ0KK1NVQl9UQVJHRVRTIDo9DQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzQwNWRpYWIpDQorU1VCRElSUyA6PQ0KK09CSkVDVFMgOj0NCisNCitQUk9KRUNUX1RBUkdFVFMgOj0gJChPQkpFQ1RTKQ0KKw0KK1NVQl9PQkpFQ1RTIDo9DQorU1VCX1RBUkdFVFMgOj0NCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNDA1Z251KQ0KK1NVQkRJUlMgOj0NCitPQkpFQ1RTIDo9DQorDQorUFJPSkVDVF9UQVJHRVRTIDo9ICQoT0JKRUNUUykNCisNCitTVUJfT0JKRUNUUyA6PQ0KK1NVQl9UQVJHRVRTIDo9DQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzQwNXNmZGlhYikNCitTVUJESVJTIDo9DQorT0JKRUNUUyA6PQ0KKw0KK1BST0pFQ1RfVEFSR0VUUyA6PSAkKE9CSkVDVFMpDQorDQorU1VCX09CSkVDVFMgOj0NCitTVUJfVEFSR0VUUyA6PQ0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM0MDVzZmdudSkNCitTVUJESVJTIDo9DQorT0JKRUNUUyA6PQ0KKw0KK1BST0pFQ1RfVEFSR0VUUyA6PSAkKE9CSkVDVFMpDQorDQorU1VCX09CSkVDVFMgOj0NCitTVUJfVEFSR0VUUyA6PQ0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM0NDBkaWFiKQ0KK1NVQkRJUlMgOj0NCitPQkpFQ1RTIDo9DQorDQorUFJPSkVDVF9UQVJHRVRTIDo9ICQoT0JKRUNUUykNCisNCitTVUJfT0JKRUNUUyA6PQ0KK1NVQl9UQVJHRVRTIDo9DQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzQ0MGdudSkNCitTVUJESVJTIDo9DQorT0JKRUNUUyA6PQ0KKw0KK1BST0pFQ1RfVEFSR0VUUyA6PSAkKE9CSkVDVFMpDQorDQorU1VCX09CSkVDVFMgOj0NCitTVUJfVEFSR0VUUyA6PQ0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM0NDBzZmRpYWIpDQorU1VCRElSUyA6PQ0KK09CSkVDVFMgOj0NCisNCitQUk9KRUNUX1RBUkdFVFMgOj0gJChPQkpFQ1RTKQ0KKw0KK1NVQl9PQkpFQ1RTIDo9DQorU1VCX1RBUkdFVFMgOj0NCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNDQwc2ZnbnUpDQorU1VCRElSUyA6PQ0KK09CSkVDVFMgOj0NCisNCitQUk9KRUNUX1RBUkdFVFMgOj0gJChPQkpFQ1RTKQ0KKw0KK1NVQl9PQkpFQ1RTIDo9DQorU1VCX1RBUkdFVFMgOj0NCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNjAzZGlhYikNCitTVUJESVJTIDo9DQorT0JKRUNUUyA6PQ0KKw0KK1BST0pFQ1RfVEFSR0VUUyA6PSAkKE9CSkVDVFMpDQorDQorU1VCX09CSkVDVFMgOj0NCitTVUJfVEFSR0VUUyA6PQ0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM2MDNnbnUpDQorU1VCRElSUyA6PQ0KK09CSkVDVFMgOj0NCisNCitQUk9KRUNUX1RBUkdFVFMgOj0gJChPQkpFQ1RTKQ0KKw0KK1NVQl9PQkpFQ1RTIDo9DQorU1VCX1RBUkdFVFMgOj0NCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNjA0ZGlhYikNCitTVUJESVJTIDo9DQorT0JKRUNUUyA6PQ0KKw0KK1BST0pFQ1RfVEFSR0VUUyA6PSAkKE9CSkVDVFMpDQorDQorU1VCX09CSkVDVFMgOj0NCitTVUJfVEFSR0VUUyA6PQ0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM2MDRnbnUpDQorU1VCRElSUyA6PQ0KK09CSkVDVFMgOj0NCisNCitQUk9KRUNUX1RBUkdFVFMgOj0gJChPQkpFQ1RTKQ0KKw0KK1NVQl9PQkpFQ1RTIDo9DQorU1VCX1RBUkdFVFMgOj0NCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDODVYWGRpYWIpDQorU1VCRElSUyA6PQ0KK09CSkVDVFMgOj0NCisNCitQUk9KRUNUX1RBUkdFVFMgOj0gJChPQkpFQ1RTKQ0KKw0KK1NVQl9PQkpFQ1RTIDo9DQorU1VCX1RBUkdFVFMgOj0NCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDODVYWGdudSkNCitTVUJESVJTIDo9DQorT0JKRUNUUyA6PQ0KKw0KK1BST0pFQ1RfVEFSR0VUUyA6PSAkKE9CSkVDVFMpDQorDQorU1VCX09CSkVDVFMgOj0NCitTVUJfVEFSR0VUUyA6PQ0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM4NVhYc2ZkaWFiKQ0KK1NVQkRJUlMgOj0NCitPQkpFQ1RTIDo9DQorDQorUFJPSkVDVF9UQVJHRVRTIDo9ICQoT0JKRUNUUykNCisNCitTVUJfT0JKRUNUUyA6PQ0KK1NVQl9UQVJHRVRTIDo9DQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzg1WFhzZmdudSkNCitTVUJESVJTIDo9DQorT0JKRUNUUyA6PQ0KKw0KK1BST0pFQ1RfVEFSR0VUUyA6PSAkKE9CSkVDVFMpDQorDQorU1VCX09CSkVDVFMgOj0NCitTVUJfVEFSR0VUUyA6PQ0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM4NjBzZmRpYWIpDQorU1VCRElSUyA6PQ0KK09CSkVDVFMgOj0NCisNCitQUk9KRUNUX1RBUkdFVFMgOj0gJChPQkpFQ1RTKQ0KKw0KK1NVQl9PQkpFQ1RTIDo9DQorU1VCX1RBUkdFVFMgOj0NCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDODYwc2ZnbnUpDQorU1VCRElSUyA6PQ0KK09CSkVDVFMgOj0NCisNCitQUk9KRUNUX1RBUkdFVFMgOj0gJChPQkpFQ1RTKQ0KKw0KK1NVQl9PQkpFQ1RTIDo9DQorU1VCX1RBUkdFVFMgOj0NCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksU0lNTElOVVhkaWFiKQ0KK1NVQkRJUlMgOj0NCitPQkpFQ1RTIDo9DQorDQorUFJPSkVDVF9UQVJHRVRTIDo9ICQoT0JKRUNUUykNCisNCitTVUJfT0JKRUNUUyA6PQ0KK1NVQl9UQVJHRVRTIDo9DQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFNJTUxJTlVYZ251KQ0KK1NVQkRJUlMgOj0NCitPQkpFQ1RTIDo9DQorDQorUFJPSkVDVF9UQVJHRVRTIDo9ICQoT0JKRUNUUykNCisNCitTVUJfT0JKRUNUUyA6PQ0KK1NVQl9UQVJHRVRTIDo9DQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFNJTU5UZGlhYikNCitTVUJESVJTIDo9DQorT0JKRUNUUyA6PQ0KKw0KK1BST0pFQ1RfVEFSR0VUUyA6PSAkKE9CSkVDVFMpDQorDQorU1VCX09CSkVDVFMgOj0NCitTVUJfVEFSR0VUUyA6PQ0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxTSU1OVGdudSkNCitTVUJESVJTIDo9DQorT0JKRUNUUyA6PQ0KKw0KK1BST0pFQ1RfVEFSR0VUUyA6PSAkKE9CSkVDVFMpDQorDQorU1VCX09CSkVDVFMgOj0NCitTVUJfVEFSR0VUUyA6PQ0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxTSU1TUEFSQ1NPTEFSSVNkaWFiKQ0KK1NVQkRJUlMgOj0NCitPQkpFQ1RTIDo9DQorDQorUFJPSkVDVF9UQVJHRVRTIDo9ICQoT0JKRUNUUykNCisNCitTVUJfT0JKRUNUUyA6PQ0KK1NVQl9UQVJHRVRTIDo9DQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFNJTVNQQVJDU09MQVJJU2dudSkNCitTVUJESVJTIDo9DQorT0JKRUNUUyA6PQ0KKw0KK1BST0pFQ1RfVEFSR0VUUyA6PSAkKE9CSkVDVFMpDQorDQorU1VCX09CSkVDVFMgOj0NCitTVUJfVEFSR0VUUyA6PQ0KK2VuZGlmDQorDQorUFJPSkVDVF9UWVBFID0gREtNDQorREVGSU5FUyA9IA0KK0VYUEFORF9EQkcgPSAwDQorDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEMzMmRpYWIpDQorVlhfQ1BVX0ZBTUlMWSA9IHBwYw0KK0NQVSA9IFBQQzMyDQorVE9PTF9GQU1JTFkgPSBkaWFiDQorVE9PTCA9IGRpYWINCitUT09MX1BBVEggPSANCitDQ19BUkNIX1NQRUMgPSAtdFBQQ0ZIOnZ4d29ya3M2MyAtWHN0bXctc2xvdyAtRFBQQzMyX2ZwNjB4DQorTElCUEFUSCA9IA0KK0xJQlMgPSANCisNCitJREVfSU5DTFVERVMgPSAtSSQoV0lORF9CQVNFKS90YXJnZXQvaCAtSSQoV0lORF9CQVNFKS90YXJnZXQvaC93cm4vY29yZWlwIA0KKw0KK0lERV9MSUJSQVJJRVMgPSANCitlbmRpZg0KKw0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDMzJnbnUpDQorVlhfQ1BVX0ZBTUlMWSA9IHBwYw0KK0NQVSA9IFBQQzMyDQorVE9PTF9GQU1JTFkgPSBnbnUNCitUT09MID0gZ251DQorVE9PTF9QQVRIID0gDQorQ0NfQVJDSF9TUEVDID0gLW1oYXJkLWZsb2F0IC1tc3RyaWN0LWFsaWduIC1tbm8taW1wbGljaXQtZnAgLURQUEMzMl9mcDYweA0KK0xJQlBBVEggPSANCitMSUJTID0gDQorDQorSURFX0lOQ0xVREVTID0gLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2ggLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2gvd3JuL2NvcmVpcCANCisNCitJREVfTElCUkFSSUVTID0gDQorZW5kaWYNCisNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzMyc2ZkaWFiKQ0KK1ZYX0NQVV9GQU1JTFkgPSBwcGMNCitDUFUgPSBQUEMzMg0KK1RPT0xfRkFNSUxZID0gZGlhYg0KK1RPT0wgPSBzZmRpYWINCitUT09MX1BBVEggPSANCitDQ19BUkNIX1NQRUMgPSAtdFBQQ0ZTOnZ4d29ya3M2Mw0KK0xJQlBBVEggPSANCitMSUJTID0gDQorDQorSURFX0lOQ0xVREVTID0gLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2ggLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2gvd3JuL2NvcmVpcCANCisNCitJREVfTElCUkFSSUVTID0gDQorZW5kaWYNCisNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzMyc2ZnbnUpDQorVlhfQ1BVX0ZBTUlMWSA9IHBwYw0KK0NQVSA9IFBQQzMyDQorVE9PTF9GQU1JTFkgPSBnbnUNCitUT09MID0gc2ZnbnUNCitUT09MX1BBVEggPSANCitDQ19BUkNIX1NQRUMgPSAtbXNvZnQtZmxvYXQgLW1zdHJpY3QtYWxpZ24NCitMSUJQQVRIID0gDQorTElCUyA9IA0KKw0KK0lERV9JTkNMVURFUyA9IC1JJChXSU5EX0JBU0UpL3RhcmdldC9oIC1JJChXSU5EX0JBU0UpL3RhcmdldC9oL3dybi9jb3JlaXAgDQorDQorSURFX0xJQlJBUklFUyA9IA0KK2VuZGlmDQorDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM0MDNkaWFiKQ0KK1ZYX0NQVV9GQU1JTFkgPSBwcGMNCitDUFUgPSBQUEM0MDMNCitUT09MX0ZBTUlMWSA9IGRpYWINCitUT09MID0gZGlhYg0KK1RPT0xfUEFUSCA9IA0KK0NDX0FSQ0hfU1BFQyA9IC10UFBDNDAzRlM6dnh3b3JrczYzDQorTElCUEFUSCA9IA0KK0xJQlMgPSANCisNCitJREVfSU5DTFVERVMgPSAtSSQoV0lORF9CQVNFKS90YXJnZXQvaCAtSSQoV0lORF9CQVNFKS90YXJnZXQvaC93cm4vY29yZWlwIA0KKw0KK0lERV9MSUJSQVJJRVMgPSANCitlbmRpZg0KKw0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNDAzZ251KQ0KK1ZYX0NQVV9GQU1JTFkgPSBwcGMNCitDUFUgPSBQUEM0MDMNCitUT09MX0ZBTUlMWSA9IGdudQ0KK1RPT0wgPSBnbnUNCitUT09MX1BBVEggPSANCitDQ19BUkNIX1NQRUMgPSAtbWNwdT00MDMgLW1zdHJpY3QtYWxpZ24gLW1zb2Z0LWZsb2F0DQorTElCUEFUSCA9IA0KK0xJQlMgPSANCisNCitJREVfSU5DTFVERVMgPSAtSSQoV0lORF9CQVNFKS90YXJnZXQvaCAtSSQoV0lORF9CQVNFKS90YXJnZXQvaC93cm4vY29yZWlwIA0KKw0KK0lERV9MSUJSQVJJRVMgPSANCitlbmRpZg0KKw0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNDA1ZGlhYikNCitWWF9DUFVfRkFNSUxZID0gcHBjDQorQ1BVID0gUFBDNDA1DQorVE9PTF9GQU1JTFkgPSBkaWFiDQorVE9PTCA9IGRpYWINCitUT09MX1BBVEggPSANCitDQ19BUkNIX1NQRUMgPSAtdFBQQzQwNUZTOnZ4d29ya3M2Mw0KK0xJQlBBVEggPSANCitMSUJTID0gDQorDQorSURFX0lOQ0xVREVTID0gLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2ggLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2gvd3JuL2NvcmVpcCANCisNCitJREVfTElCUkFSSUVTID0gDQorZW5kaWYNCisNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzQwNWdudSkNCitWWF9DUFVfRkFNSUxZID0gcHBjDQorQ1BVID0gUFBDNDA1DQorVE9PTF9GQU1JTFkgPSBnbnUNCitUT09MID0gZ251DQorVE9PTF9QQVRIID0gDQorQ0NfQVJDSF9TUEVDID0gLW1jcHU9NDA1IC1tc3RyaWN0LWFsaWduIC1tc29mdC1mbG9hdA0KK0xJQlBBVEggPSANCitMSUJTID0gDQorDQorSURFX0lOQ0xVREVTID0gLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2ggLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2gvd3JuL2NvcmVpcCANCisNCitJREVfTElCUkFSSUVTID0gDQorZW5kaWYNCisNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzQwNXNmZGlhYikNCitWWF9DUFVfRkFNSUxZID0gcHBjDQorQ1BVID0gUFBDNDA1DQorVE9PTF9GQU1JTFkgPSBkaWFiDQorVE9PTCA9IHNmZGlhYg0KK1RPT0xfUEFUSCA9IA0KK0NDX0FSQ0hfU1BFQyA9IC10UFBDNDA1RlM6dnh3b3JrczYzDQorTElCUEFUSCA9IA0KK0xJQlMgPSANCisNCitJREVfSU5DTFVERVMgPSAtSSQoV0lORF9CQVNFKS90YXJnZXQvaCAtSSQoV0lORF9CQVNFKS90YXJnZXQvaC93cm4vY29yZWlwIA0KKw0KK0lERV9MSUJSQVJJRVMgPSANCitlbmRpZg0KKw0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNDA1c2ZnbnUpDQorVlhfQ1BVX0ZBTUlMWSA9IHBwYw0KK0NQVSA9IFBQQzQwNQ0KK1RPT0xfRkFNSUxZID0gZ251DQorVE9PTCA9IHNmZ251DQorVE9PTF9QQVRIID0gDQorQ0NfQVJDSF9TUEVDID0gLW1jcHU9NDA1IC1tc3RyaWN0LWFsaWduIC1tc29mdC1mbG9hdA0KK0xJQlBBVEggPSANCitMSUJTID0gDQorDQorSURFX0lOQ0xVREVTID0gLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2ggLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2gvd3JuL2NvcmVpcCANCisNCitJREVfTElCUkFSSUVTID0gDQorZW5kaWYNCisNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzQ0MGRpYWIpDQorVlhfQ1BVX0ZBTUlMWSA9IHBwYw0KK0NQVSA9IFBQQzQ0MA0KK1RPT0xfRkFNSUxZID0gZGlhYg0KK1RPT0wgPSBkaWFiDQorVE9PTF9QQVRIID0gDQorQ0NfQVJDSF9TUEVDID0gLXRQUEM0NDBGSDp2eHdvcmtzNjMNCitMSUJQQVRIID0gDQorTElCUyA9IA0KKw0KK0lERV9JTkNMVURFUyA9IC1JJChXSU5EX0JBU0UpL3RhcmdldC9oIC1JJChXSU5EX0JBU0UpL3RhcmdldC9oL3dybi9jb3JlaXAgDQorDQorSURFX0xJQlJBUklFUyA9IA0KK2VuZGlmDQorDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM0NDBnbnUpDQorVlhfQ1BVX0ZBTUlMWSA9IHBwYw0KK0NQVSA9IFBQQzQ0MA0KK1RPT0xfRkFNSUxZID0gZ251DQorVE9PTCA9IGdudQ0KK1RPT0xfUEFUSCA9IA0KK0NDX0FSQ0hfU1BFQyA9IC1tY3B1PTQ0MCAtbXN0cmljdC1hbGlnbiAtbXNvZnQtZmxvYXQNCitMSUJQQVRIID0gDQorTElCUyA9IA0KKw0KK0lERV9JTkNMVURFUyA9IC1JJChXSU5EX0JBU0UpL3RhcmdldC9oIC1JJChXSU5EX0JBU0UpL3RhcmdldC9oL3dybi9jb3JlaXAgDQorDQorSURFX0xJQlJBUklFUyA9IA0KK2VuZGlmDQorDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM0NDBzZmRpYWIpDQorVlhfQ1BVX0ZBTUlMWSA9IHBwYw0KK0NQVSA9IFBQQzQ0MA0KK1RPT0xfRkFNSUxZID0gZGlhYg0KK1RPT0wgPSBzZmRpYWINCitUT09MX1BBVEggPSANCitDQ19BUkNIX1NQRUMgPSAtdFBQQzQ0MEZTOnZ4d29ya3M2Mw0KK0xJQlBBVEggPSANCitMSUJTID0gDQorDQorSURFX0lOQ0xVREVTID0gLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2ggLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2gvd3JuL2NvcmVpcCANCisNCitJREVfTElCUkFSSUVTID0gDQorZW5kaWYNCisNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzQ0MHNmZ251KQ0KK1ZYX0NQVV9GQU1JTFkgPSBwcGMNCitDUFUgPSBQUEM0NDANCitUT09MX0ZBTUlMWSA9IGdudQ0KK1RPT0wgPSBzZmdudQ0KK1RPT0xfUEFUSCA9IA0KK0NDX0FSQ0hfU1BFQyA9IC1tY3B1PTQ0MCAtbXN0cmljdC1hbGlnbiAtbXNvZnQtZmxvYXQNCitMSUJQQVRIID0gDQorTElCUyA9IA0KKw0KK0lERV9JTkNMVURFUyA9IC1JJChXSU5EX0JBU0UpL3RhcmdldC9oIC1JJChXSU5EX0JBU0UpL3RhcmdldC9oL3dybi9jb3JlaXAgDQorDQorSURFX0xJQlJBUklFUyA9IA0KK2VuZGlmDQorDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM2MDNkaWFiKQ0KK1ZYX0NQVV9GQU1JTFkgPSBwcGMNCitDUFUgPSBQUEM2MDMNCitUT09MX0ZBTUlMWSA9IGRpYWINCitUT09MID0gZGlhYg0KK1RPT0xfUEFUSCA9IA0KK0NDX0FSQ0hfU1BFQyA9IC10UFBDNjAzRkg6dnh3b3JrczYzDQorTElCUEFUSCA9IA0KK0xJQlMgPSANCisNCitJREVfSU5DTFVERVMgPSAtSSQoV0lORF9CQVNFKS90YXJnZXQvaCAtSSQoV0lORF9CQVNFKS90YXJnZXQvaC93cm4vY29yZWlwIA0KKw0KK0lERV9MSUJSQVJJRVMgPSANCitlbmRpZg0KKw0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNjAzZ251KQ0KK1ZYX0NQVV9GQU1JTFkgPSBwcGMNCitDUFUgPSBQUEM2MDMNCitUT09MX0ZBTUlMWSA9IGdudQ0KK1RPT0wgPSBnbnUNCitUT09MX1BBVEggPSANCitDQ19BUkNIX1NQRUMgPSAtbWNwdT02MDMgLW1zdHJpY3QtYWxpZ24gLW1uby1pbXBsaWNpdC1mcCAtbWxvbmdjYWxsDQorTElCUEFUSCA9IA0KK0xJQlMgPSANCisNCitJREVfSU5DTFVERVMgPSAtSS4uIC1JJChXSU5EX0JBU0UpL3RhcmdldC9oIC1JJChXSU5EX0JBU0UpL3RhcmdldC9oL3dybi9jb3JlaXAgDQorDQorSURFX0xJQlJBUklFUyA9IA0KK2VuZGlmDQorDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM2MDRkaWFiKQ0KK1ZYX0NQVV9GQU1JTFkgPSBwcGMNCitDUFUgPSBQUEM2MDQNCitUT09MX0ZBTUlMWSA9IGRpYWINCitUT09MID0gZGlhYg0KK1RPT0xfUEFUSCA9IA0KK0NDX0FSQ0hfU1BFQyA9IC10UFBDNjA0Rkg6dnh3b3JrczYzDQorTElCUEFUSCA9IA0KK0xJQlMgPSANCisNCitJREVfSU5DTFVERVMgPSAtSSQoV0lORF9CQVNFKS90YXJnZXQvaCAtSSQoV0lORF9CQVNFKS90YXJnZXQvaC93cm4vY29yZWlwIA0KKw0KK0lERV9MSUJSQVJJRVMgPSANCitlbmRpZg0KKw0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNjA0Z251KQ0KK1ZYX0NQVV9GQU1JTFkgPSBwcGMNCitDUFUgPSBQUEM2MDQNCitUT09MX0ZBTUlMWSA9IGdudQ0KK1RPT0wgPSBnbnUNCitUT09MX1BBVEggPSANCitDQ19BUkNIX1NQRUMgPSAtbWNwdT02MDQgLW1zdHJpY3QtYWxpZ24gLW1uby1pbXBsaWNpdC1mcA0KK0xJQlBBVEggPSANCitMSUJTID0gDQorDQorSURFX0lOQ0xVREVTID0gLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2ggLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2gvd3JuL2NvcmVpcCANCisNCitJREVfTElCUkFSSUVTID0gDQorZW5kaWYNCisNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzg1WFhkaWFiKQ0KK1ZYX0NQVV9GQU1JTFkgPSBwcGMNCitDUFUgPSBQUEM4NVhYDQorVE9PTF9GQU1JTFkgPSBkaWFiDQorVE9PTCA9IGRpYWINCitUT09MX1BBVEggPSANCitDQ19BUkNIX1NQRUMgPSAtdFBQQ0U1MDBGUzp2eHdvcmtzNjMNCitMSUJQQVRIID0gDQorTElCUyA9IA0KKw0KK0lERV9JTkNMVURFUyA9IC1JJChXSU5EX0JBU0UpL3RhcmdldC9oIC1JJChXSU5EX0JBU0UpL3RhcmdldC9oL3dybi9jb3JlaXAgDQorDQorSURFX0xJQlJBUklFUyA9IA0KK2VuZGlmDQorDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM4NVhYZ251KQ0KK1ZYX0NQVV9GQU1JTFkgPSBwcGMNCitDUFUgPSBQUEM4NVhYDQorVE9PTF9GQU1JTFkgPSBnbnUNCitUT09MID0gZ251DQorVE9PTF9QQVRIID0gDQorQ0NfQVJDSF9TUEVDID0gLW1jcHU9ODU0MCAtbXN0cmljdC1hbGlnbiAtbXNvZnQtZmxvYXQgLW1hYmk9bm8tc3BlDQorTElCUEFUSCA9IA0KK0xJQlMgPSANCisNCitJREVfSU5DTFVERVMgPSAtSSQoV0lORF9CQVNFKS90YXJnZXQvaCAtSSQoV0lORF9CQVNFKS90YXJnZXQvaC93cm4vY29yZWlwIA0KKw0KK0lERV9MSUJSQVJJRVMgPSANCitlbmRpZg0KKw0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDODVYWHNmZGlhYikNCitWWF9DUFVfRkFNSUxZID0gcHBjDQorQ1BVID0gUFBDODVYWA0KK1RPT0xfRkFNSUxZID0gZGlhYg0KK1RPT0wgPSBzZmRpYWINCitUT09MX1BBVEggPSANCitDQ19BUkNIX1NQRUMgPSAtdFBQQ0U1MDBGUzp2eHdvcmtzNjMNCitMSUJQQVRIID0gDQorTElCUyA9IA0KKw0KK0lERV9JTkNMVURFUyA9IC1JJChXSU5EX0JBU0UpL3RhcmdldC9oIC1JJChXSU5EX0JBU0UpL3RhcmdldC9oL3dybi9jb3JlaXAgDQorDQorSURFX0xJQlJBUklFUyA9IA0KK2VuZGlmDQorDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM4NVhYc2ZnbnUpDQorVlhfQ1BVX0ZBTUlMWSA9IHBwYw0KK0NQVSA9IFBQQzg1WFgNCitUT09MX0ZBTUlMWSA9IGdudQ0KK1RPT0wgPSBzZmdudQ0KK1RPT0xfUEFUSCA9IA0KK0NDX0FSQ0hfU1BFQyA9IC1tY3B1PTg1NDAgLW1zdHJpY3QtYWxpZ24gLW1zb2Z0LWZsb2F0IC1tYWJpPW5vLXNwZQ0KK0xJQlBBVEggPSANCitMSUJTID0gDQorDQorSURFX0lOQ0xVREVTID0gLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2ggLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2gvd3JuL2NvcmVpcCANCisNCitJREVfTElCUkFSSUVTID0gDQorZW5kaWYNCisNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzg2MHNmZGlhYikNCitWWF9DUFVfRkFNSUxZID0gcHBjDQorQ1BVID0gUFBDODYwDQorVE9PTF9GQU1JTFkgPSBkaWFiDQorVE9PTCA9IHNmZGlhYg0KK1RPT0xfUEFUSCA9IA0KK0NDX0FSQ0hfU1BFQyA9IC10UFBDODYwRlM6dnh3b3JrczYzDQorTElCUEFUSCA9IA0KK0xJQlMgPSANCisNCitJREVfSU5DTFVERVMgPSAtSSQoV0lORF9CQVNFKS90YXJnZXQvaCAtSSQoV0lORF9CQVNFKS90YXJnZXQvaC93cm4vY29yZWlwIA0KKw0KK0lERV9MSUJSQVJJRVMgPSANCitlbmRpZg0KKw0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDODYwc2ZnbnUpDQorVlhfQ1BVX0ZBTUlMWSA9IHBwYw0KK0NQVSA9IFBQQzg2MA0KK1RPT0xfRkFNSUxZID0gZ251DQorVE9PTCA9IHNmZ251DQorVE9PTF9QQVRIID0gDQorQ0NfQVJDSF9TUEVDID0gLW1jcHU9ODYwIC1tc3RyaWN0LWFsaWduIC1tc29mdC1mbG9hdA0KK0xJQlBBVEggPSANCitMSUJTID0gDQorDQorSURFX0lOQ0xVREVTID0gLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2ggLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2gvd3JuL2NvcmVpcCANCisNCitJREVfTElCUkFSSUVTID0gDQorZW5kaWYNCisNCitpZmVxICgkKEJVSUxEX1NQRUMpLFNJTUxJTlVYZGlhYikNCitWWF9DUFVfRkFNSUxZID0gc2ltbGludXgNCitDUFUgPSBTSU1MSU5VWA0KK1RPT0xfRkFNSUxZID0gZGlhYg0KK1RPT0wgPSBkaWFiDQorVE9PTF9QQVRIID0gDQorQ0NfQVJDSF9TUEVDID0gLXRYODZMSDp2eHdvcmtzNjMNCitMSUJQQVRIID0gDQorTElCUyA9IA0KKw0KK0lERV9JTkNMVURFUyA9IC1JJChXSU5EX0JBU0UpL3RhcmdldC9oIC1JJChXSU5EX0JBU0UpL3RhcmdldC9oL3dybi9jb3JlaXAgDQorDQorSURFX0xJQlJBUklFUyA9IA0KK2VuZGlmDQorDQoraWZlcSAoJChCVUlMRF9TUEVDKSxTSU1MSU5VWGdudSkNCitWWF9DUFVfRkFNSUxZID0gc2ltbGludXgNCitDUFUgPSBTSU1MSU5VWA0KK1RPT0xfRkFNSUxZID0gZ251DQorVE9PTCA9IGdudQ0KK1RPT0xfUEFUSCA9IA0KK0NDX0FSQ0hfU1BFQyA9IC1tdHVuZT1pNDg2IC1tYXJjaD1pNDg2DQorTElCUEFUSCA9IA0KK0xJQlMgPSANCisNCitJREVfSU5DTFVERVMgPSAtSSQoV0lORF9CQVNFKS90YXJnZXQvaCAtSSQoV0lORF9CQVNFKS90YXJnZXQvaC93cm4vY29yZWlwIA0KKw0KK0lERV9MSUJSQVJJRVMgPSANCitlbmRpZg0KKw0KK2lmZXEgKCQoQlVJTERfU1BFQyksU0lNTlRkaWFiKQ0KK1ZYX0NQVV9GQU1JTFkgPSBzaW1wYw0KK0NQVSA9IFNJTU5UDQorVE9PTF9GQU1JTFkgPSBkaWFiDQorVE9PTCA9IGRpYWINCitUT09MX1BBVEggPSANCitDQ19BUkNIX1NQRUMgPSAtdFg4NkxIOnZ4d29ya3M2Mw0KK0xJQlBBVEggPSANCitMSUJTID0gDQorDQorSURFX0lOQ0xVREVTID0gLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2ggLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2gvd3JuL2NvcmVpcCANCisNCitJREVfTElCUkFSSUVTID0gDQorZW5kaWYNCisNCitpZmVxICgkKEJVSUxEX1NQRUMpLFNJTU5UZ251KQ0KK1ZYX0NQVV9GQU1JTFkgPSBzaW1wYw0KK0NQVSA9IFNJTU5UDQorVE9PTF9GQU1JTFkgPSBnbnUNCitUT09MID0gZ251DQorVE9PTF9QQVRIID0gDQorQ0NfQVJDSF9TUEVDID0gLW10dW5lPWk0ODYgLW1hcmNoPWk0ODYNCitMSUJQQVRIID0gDQorTElCUyA9IA0KKw0KK0lERV9JTkNMVURFUyA9IC1JJChXSU5EX0JBU0UpL3RhcmdldC9oIC1JJChXSU5EX0JBU0UpL3RhcmdldC9oL3dybi9jb3JlaXAgDQorDQorSURFX0xJQlJBUklFUyA9IA0KK2VuZGlmDQorDQoraWZlcSAoJChCVUlMRF9TUEVDKSxTSU1TUEFSQ1NPTEFSSVNkaWFiKQ0KK1ZYX0NQVV9GQU1JTFkgPSBzaW1zbw0KK0NQVSA9IFNJTVNQQVJDU09MQVJJUw0KK1RPT0xfRkFNSUxZID0gZGlhYg0KK1RPT0wgPSBkaWFiDQorVE9PTF9QQVRIID0gDQorQ0NfQVJDSF9TUEVDID0gLXRTUEFSQ0ZIOnZ4d29ya3M2Mw0KK0xJQlBBVEggPSANCitMSUJTID0gDQorDQorSURFX0lOQ0xVREVTID0gLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2ggLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2gvd3JuL2NvcmVpcCANCisNCitJREVfTElCUkFSSUVTID0gDQorZW5kaWYNCisNCitpZmVxICgkKEJVSUxEX1NQRUMpLFNJTVNQQVJDU09MQVJJU2dudSkNCitWWF9DUFVfRkFNSUxZID0gc2ltc28NCitDUFUgPSBTSU1TUEFSQ1NPTEFSSVMNCitUT09MX0ZBTUlMWSA9IGdudQ0KK1RPT0wgPSBnbnUNCitUT09MX1BBVEggPSANCitDQ19BUkNIX1NQRUMgPSANCitMSUJQQVRIID0gDQorTElCUyA9IA0KKw0KK0lERV9JTkNMVURFUyA9IC1JJChXSU5EX0JBU0UpL3RhcmdldC9oIC1JJChXSU5EX0JBU0UpL3RhcmdldC9oL3dybi9jb3JlaXAgDQorDQorSURFX0xJQlJBUklFUyA9IA0KK2VuZGlmDQorDQorDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEMzMmRpYWIpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQy1Db21waWxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQy1Db21waWxlciA9IC1YTyAtWHNpemUtb3B0DQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDMzJnbnUpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQy1Db21waWxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQy1Db21waWxlciA9IC1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4NCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MtQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDMzJzZmRpYWIpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQy1Db21waWxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQy1Db21waWxlciA9IC1YTyAtWHNpemUtb3B0DQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1Yc3Rzdy1zbG93IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDMzJzZmdudSkNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19DLUNvbXBpbGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19DLUNvbXBpbGVyID0gLU8yIC1mc3RyZW5ndGgtcmVkdWNlIC1mbm8tYnVpbHRpbg0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuYw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpICAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0NGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM0MDNkaWFiKQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0MtQ29tcGlsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0MtQ29tcGlsZXIgPSAtWE8gLVhzaXplLW9wdA0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuYw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MtQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzQwM2dudSkNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19DLUNvbXBpbGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19DLUNvbXBpbGVyID0gLU8yIC1mc3RyZW5ndGgtcmVkdWNlIC1mbm8tYnVpbHRpbg0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuYw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpICAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0NGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM0MDVkaWFiKQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0MtQ29tcGlsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0MtQ29tcGlsZXIgPSAtWE8gLVhzaXplLW9wdA0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuYw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MtQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzQwNWdudSkNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19DLUNvbXBpbGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19DLUNvbXBpbGVyID0gLU8yIC1mc3RyZW5ndGgtcmVkdWNlIC1mbm8tYnVpbHRpbg0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuYw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpICAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0NGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM0MDVzZmRpYWIpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQy1Db21waWxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQy1Db21waWxlciA9IC1YTyAtWHNpemUtb3B0DQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNDA1c2ZnbnUpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQy1Db21waWxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQy1Db21waWxlciA9IC1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4NCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MtQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNDQwZGlhYikNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19DLUNvbXBpbGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19DLUNvbXBpbGVyID0gLVhPIC1Yc2l6ZS1vcHQNCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0NGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM0NDBnbnUpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQy1Db21waWxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQy1Db21waWxlciA9IC1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4NCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MtQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNDQwc2ZkaWFiKQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0MtQ29tcGlsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0MtQ29tcGlsZXIgPSAtWE8gLVhzaXplLW9wdA0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuYw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MtQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzQ0MHNmZ251KQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0MtQ29tcGlsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0MtQ29tcGlsZXIgPSAtTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluDQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgIC1XYWxsICAtTUQgLU1QICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzYwM2RpYWIpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQy1Db21waWxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQy1Db21waWxlciA9IC1YTyAtWHNpemUtb3B0DQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNjAzZ251KQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0MtQ29tcGlsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0MtQ29tcGlsZXIgPSAtTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluDQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgIC1XYWxsICAtTUQgLU1QICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzYwNGRpYWIpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQy1Db21waWxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQy1Db21waWxlciA9IC1YTyAtWHNpemUtb3B0DQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNjA0Z251KQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0MtQ29tcGlsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0MtQ29tcGlsZXIgPSAtTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluDQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgIC1XYWxsICAtTUQgLU1QICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzg1WFhkaWFiKQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0MtQ29tcGlsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0MtQ29tcGlsZXIgPSAtWE8gLVhzaXplLW9wdA0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuYw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MtQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzg1WFhnbnUpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQy1Db21waWxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQy1Db21waWxlciA9IC1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4NCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MtQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDODVYWHNmZGlhYikNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19DLUNvbXBpbGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19DLUNvbXBpbGVyID0gLVhPIC1Yc2l6ZS1vcHQNCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0NGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM4NVhYc2ZnbnUpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQy1Db21waWxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQy1Db21waWxlciA9IC1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4NCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MtQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDODYwc2ZkaWFiKQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0MtQ29tcGlsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0MtQ29tcGlsZXIgPSAtWE8gLVhzaXplLW9wdA0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuYw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MtQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzg2MHNmZ251KQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0MtQ29tcGlsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0MtQ29tcGlsZXIgPSAtTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluDQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgIC1XYWxsICAtTUQgLU1QICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFNJTUxJTlVYZGlhYikNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19DLUNvbXBpbGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19DLUNvbXBpbGVyID0gLVhPIC1Yc2l6ZS1vcHQNCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0NGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxTSU1MSU5VWGdudSkNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19DLUNvbXBpbGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19DLUNvbXBpbGVyID0gLU8yIC1ub3N0ZGxpYiAtZm5vLWJ1aWx0aW4gLWZuby1kZWZlci1wb3ANCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwZW50aXVtICQoREVCVUdGTEFHU19DLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgIC1XYWxsICAtTUQgLU1QICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFNJTU5UZGlhYikNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19DLUNvbXBpbGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19DLUNvbXBpbGVyID0gLVhPIC1Yc2l6ZS1vcHQNCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0NGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxTSU1OVGdudSkNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19DLUNvbXBpbGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19DLUNvbXBpbGVyID0gLU8yIC1ub3N0ZGxpYiAtZm5vLWJ1aWx0aW4gLWZuby1kZWZlci1wb3ANCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwZW50aXVtICQoREVCVUdGTEFHU19DLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgIC1XYWxsICAtTUQgLU1QICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFNJTVNQQVJDU09MQVJJU2RpYWIpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQy1Db21waWxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQy1Db21waWxlciA9IC1YTyAtWHNpemUtb3B0DQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksU0lNU1BBUkNTT0xBUklTZ251KQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0MtQ29tcGlsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0MtQ29tcGlsZXIgPSAtTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluDQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjc3BhcmMgJChERUJVR0ZMQUdTX0MtQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDMzJkaWFiKQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0MrKy1Db21waWxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQysrLUNvbXBpbGVyID0gLVhPIC1Yc2l6ZS1vcHQNCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmNwcA0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLkMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jeHgNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jYw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEMzMmdudSkNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19DKystQ29tcGlsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0MrKy1Db21waWxlciA9IC1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4NCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmNwcA0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLkMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jeHgNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jYw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEMzMnNmZGlhYikNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19DKystQ29tcGlsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0MrKy1Db21waWxlciA9IC1YTyAtWHNpemUtb3B0DQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jcHANCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWHN0c3ctc2xvdyAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5DDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhzdHN3LXNsb3cgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY3h4DQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhzdHN3LXNsb3cgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY2MNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWHN0c3ctc2xvdyAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDMzJzZmdudSkNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19DKystQ29tcGlsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0MrKy1Db21waWxlciA9IC1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4NCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmNwcA0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLkMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jeHgNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jYw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM0MDNkaWFiKQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0MrKy1Db21waWxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQysrLUNvbXBpbGVyID0gLVhPIC1Yc2l6ZS1vcHQNCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmNwcA0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLkMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jeHgNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jYw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM0MDNnbnUpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQysrLUNvbXBpbGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19DKystQ29tcGlsZXIgPSAtTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluDQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jcHANCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5DDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY3h4DQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY2MNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNDA1ZGlhYikNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19DKystQ29tcGlsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0MrKy1Db21waWxlciA9IC1YTyAtWHNpemUtb3B0DQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jcHANCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5DDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY3h4DQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY2MNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNDA1Z251KQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0MrKy1Db21waWxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQysrLUNvbXBpbGVyID0gLU8yIC1mc3RyZW5ndGgtcmVkdWNlIC1mbm8tYnVpbHRpbg0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY3BwDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuQw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmN4eA0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmNjDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzQwNXNmZGlhYikNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19DKystQ29tcGlsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0MrKy1Db21waWxlciA9IC1YTyAtWHNpemUtb3B0DQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jcHANCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5DDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY3h4DQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY2MNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNDA1c2ZnbnUpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQysrLUNvbXBpbGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19DKystQ29tcGlsZXIgPSAtTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluDQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jcHANCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5DDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY3h4DQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY2MNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNDQwZGlhYikNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19DKystQ29tcGlsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0MrKy1Db21waWxlciA9IC1YTyAtWHNpemUtb3B0DQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jcHANCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5DDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY3h4DQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY2MNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNDQwZ251KQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0MrKy1Db21waWxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQysrLUNvbXBpbGVyID0gLU8yIC1mc3RyZW5ndGgtcmVkdWNlIC1mbm8tYnVpbHRpbg0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY3BwDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuQw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmN4eA0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmNjDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzQ0MHNmZGlhYikNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19DKystQ29tcGlsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0MrKy1Db21waWxlciA9IC1YTyAtWHNpemUtb3B0DQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jcHANCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5DDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY3h4DQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY2MNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNDQwc2ZnbnUpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQysrLUNvbXBpbGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19DKystQ29tcGlsZXIgPSAtTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluDQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jcHANCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5DDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY3h4DQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY2MNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNjAzZGlhYikNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19DKystQ29tcGlsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0MrKy1Db21waWxlciA9IC1YTyAtWHNpemUtb3B0DQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jcHANCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5DDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY3h4DQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY2MNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNjAzZ251KQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0MrKy1Db21waWxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQysrLUNvbXBpbGVyID0gLU8yIC1mc3RyZW5ndGgtcmVkdWNlIC1mbm8tYnVpbHRpbg0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY3BwDQorCSQoVFJBQ0VfRkxBRykgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMIC1EJ1NWTl9SRVY9IiQoc2hlbGwgc3ZudmVyc2lvbiAtbiAuLikiJyAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLkMNCisJJChUUkFDRV9GTEFHKSAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgLUQnU1ZOX1JFVj0iJChzaGVsbCBzdm52ZXJzaW9uIC1uIC4uKSInICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY3h4DQorCSQoVFJBQ0VfRkxBRykgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMIC1EJ1NWTl9SRVY9IiQoc2hlbGwgc3ZudmVyc2lvbiAtbiAuLikiJyAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmNjDQorCSQoVFJBQ0VfRkxBRykgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMIC1EJ1NWTl9SRVY9IiQoc2hlbGwgc3ZudmVyc2lvbiAtbiAuLikiJyAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM2MDRkaWFiKQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0MrKy1Db21waWxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQysrLUNvbXBpbGVyID0gLVhPIC1Yc2l6ZS1vcHQNCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmNwcA0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLkMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jeHgNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jYw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM2MDRnbnUpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQysrLUNvbXBpbGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19DKystQ29tcGlsZXIgPSAtTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluDQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jcHANCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5DDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY3h4DQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY2MNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDODVYWGRpYWIpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQysrLUNvbXBpbGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19DKystQ29tcGlsZXIgPSAtWE8gLVhzaXplLW9wdA0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY3BwDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuQw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmN4eA0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmNjDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzg1WFhnbnUpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQysrLUNvbXBpbGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19DKystQ29tcGlsZXIgPSAtTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluDQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jcHANCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5DDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY3h4DQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY2MNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDODVYWHNmZGlhYikNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19DKystQ29tcGlsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0MrKy1Db21waWxlciA9IC1YTyAtWHNpemUtb3B0DQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jcHANCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5DDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY3h4DQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY2MNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDODVYWHNmZ251KQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0MrKy1Db21waWxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQysrLUNvbXBpbGVyID0gLU8yIC1mc3RyZW5ndGgtcmVkdWNlIC1mbm8tYnVpbHRpbg0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY3BwDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuQw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmN4eA0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmNjDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzg2MHNmZGlhYikNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19DKystQ29tcGlsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0MrKy1Db21waWxlciA9IC1YTyAtWHNpemUtb3B0DQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jcHANCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5DDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY3h4DQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY2MNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDODYwc2ZnbnUpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQysrLUNvbXBpbGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19DKystQ29tcGlsZXIgPSAtTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluDQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jcHANCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5DDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY3h4DQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY2MNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksU0lNTElOVVhkaWFiKQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0MrKy1Db21waWxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQysrLUNvbXBpbGVyID0gLVhPIC1Yc2l6ZS1vcHQNCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmNwcA0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLkMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jeHgNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jYw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxTSU1MSU5VWGdudSkNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19DKystQ29tcGlsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0MrKy1Db21waWxlciA9IC1PMiAtbm9zdGRsaWIgLWZuby1idWlsdGluIC1mbm8tZGVmZXItcG9wDQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jcHANCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwZW50aXVtICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuQw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BlbnRpdW0gJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jeHgNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwZW50aXVtICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY2MNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwZW50aXVtICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFNJTU5UZGlhYikNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19DKystQ29tcGlsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0MrKy1Db21waWxlciA9IC1YTyAtWHNpemUtb3B0DQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jcHANCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5DDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY3h4DQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY2MNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksU0lNTlRnbnUpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQysrLUNvbXBpbGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19DKystQ29tcGlsZXIgPSAtTzIgLW5vc3RkbGliIC1mbm8tYnVpbHRpbiAtZm5vLWRlZmVyLXBvcA0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY3BwDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcGVudGl1bSAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLkMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwZW50aXVtICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY3h4DQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcGVudGl1bSAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmNjDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcGVudGl1bSAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxTSU1TUEFSQ1NPTEFSSVNkaWFiKQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0MrKy1Db21waWxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQysrLUNvbXBpbGVyID0gLVhPIC1Yc2l6ZS1vcHQNCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmNwcA0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLkMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jeHgNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jYw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxTSU1TUEFSQ1NPTEFSSVNnbnUpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQysrLUNvbXBpbGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19DKystQ29tcGlsZXIgPSAtTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluDQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jcHANCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NzcGFyYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLkMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NzcGFyYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmN4eA0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3NwYXJjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY2MNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NzcGFyYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEMzMmRpYWIpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQXNzZW1ibGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19Bc3NlbWJsZXIgPSAtWE8gLVhzaXplLW9wdA0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUucw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0Fzc2VtYmxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YcHJlcHJvY2Vzcy1hc3NlbWJseSAtWGNwcC1uby1zcGFjZSAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzMyZ251KQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0Fzc2VtYmxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQXNzZW1ibGVyID0gLU8yIC1mc3RyZW5ndGgtcmVkdWNlIC1mbm8tYnVpbHRpbg0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUucw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQXNzZW1ibGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgICAteGFzc2VtYmxlci13aXRoLWNwcCAtTUQgLU1QICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzMyc2ZkaWFiKQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0Fzc2VtYmxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQXNzZW1ibGVyID0gLVhPIC1Yc2l6ZS1vcHQNCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLnMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19Bc3NlbWJsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWHN0c3ctc2xvdyAtWHByZXByb2Nlc3MtYXNzZW1ibHkgLVhjcHAtbm8tc3BhY2UgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0NGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEMzMnNmZ251KQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0Fzc2VtYmxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQXNzZW1ibGVyID0gLU8yIC1mc3RyZW5ndGgtcmVkdWNlIC1mbm8tYnVpbHRpbg0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUucw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQXNzZW1ibGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgICAteGFzc2VtYmxlci13aXRoLWNwcCAtTUQgLU1QICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzQwM2RpYWIpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQXNzZW1ibGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19Bc3NlbWJsZXIgPSAtWE8gLVhzaXplLW9wdA0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUucw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0Fzc2VtYmxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YcHJlcHJvY2Vzcy1hc3NlbWJseSAtWGNwcC1uby1zcGFjZSAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzQwM2dudSkNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19Bc3NlbWJsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0Fzc2VtYmxlciA9IC1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4NCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLnMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0Fzc2VtYmxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpICAgLXhhc3NlbWJsZXItd2l0aC1jcHAgLU1EIC1NUCAkKEFEREVEX0NGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM0MDVkaWFiKQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0Fzc2VtYmxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQXNzZW1ibGVyID0gLVhPIC1Yc2l6ZS1vcHQNCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLnMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19Bc3NlbWJsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWHByZXByb2Nlc3MtYXNzZW1ibHkgLVhjcHAtbm8tc3BhY2UgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0NGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM0MDVnbnUpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQXNzZW1ibGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19Bc3NlbWJsZXIgPSAtTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluDQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5zDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19Bc3NlbWJsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAgIC14YXNzZW1ibGVyLXdpdGgtY3BwIC1NRCAtTVAgJChBRERFRF9DRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNDA1c2ZkaWFiKQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0Fzc2VtYmxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQXNzZW1ibGVyID0gLVhPIC1Yc2l6ZS1vcHQNCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLnMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19Bc3NlbWJsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWHByZXByb2Nlc3MtYXNzZW1ibHkgLVhjcHAtbm8tc3BhY2UgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0NGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM0MDVzZmdudSkNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19Bc3NlbWJsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0Fzc2VtYmxlciA9IC1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4NCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLnMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0Fzc2VtYmxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpICAgLXhhc3NlbWJsZXItd2l0aC1jcHAgLU1EIC1NUCAkKEFEREVEX0NGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM0NDBkaWFiKQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0Fzc2VtYmxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQXNzZW1ibGVyID0gLVhPIC1Yc2l6ZS1vcHQNCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLnMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19Bc3NlbWJsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWHByZXByb2Nlc3MtYXNzZW1ibHkgLVhjcHAtbm8tc3BhY2UgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0NGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM0NDBnbnUpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQXNzZW1ibGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19Bc3NlbWJsZXIgPSAtTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluDQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5zDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19Bc3NlbWJsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAgIC14YXNzZW1ibGVyLXdpdGgtY3BwIC1NRCAtTVAgJChBRERFRF9DRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNDQwc2ZkaWFiKQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0Fzc2VtYmxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQXNzZW1ibGVyID0gLVhPIC1Yc2l6ZS1vcHQNCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLnMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19Bc3NlbWJsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWHByZXByb2Nlc3MtYXNzZW1ibHkgLVhjcHAtbm8tc3BhY2UgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0NGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM0NDBzZmdudSkNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19Bc3NlbWJsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0Fzc2VtYmxlciA9IC1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4NCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLnMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0Fzc2VtYmxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpICAgLXhhc3NlbWJsZXItd2l0aC1jcHAgLU1EIC1NUCAkKEFEREVEX0NGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM2MDNkaWFiKQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0Fzc2VtYmxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQXNzZW1ibGVyID0gLVhPIC1Yc2l6ZS1vcHQNCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLnMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19Bc3NlbWJsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWHByZXByb2Nlc3MtYXNzZW1ibHkgLVhjcHAtbm8tc3BhY2UgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0NGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM2MDNnbnUpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQXNzZW1ibGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19Bc3NlbWJsZXIgPSAtTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluDQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5zDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19Bc3NlbWJsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAgIC14YXNzZW1ibGVyLXdpdGgtY3BwIC1NRCAtTVAgJChBRERFRF9DRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNjA0ZGlhYikNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19Bc3NlbWJsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0Fzc2VtYmxlciA9IC1YTyAtWHNpemUtb3B0DQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5zDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQXNzZW1ibGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhwcmVwcm9jZXNzLWFzc2VtYmx5IC1YY3BwLW5vLXNwYWNlICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNjA0Z251KQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0Fzc2VtYmxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQXNzZW1ibGVyID0gLU8yIC1mc3RyZW5ndGgtcmVkdWNlIC1mbm8tYnVpbHRpbg0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUucw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQXNzZW1ibGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgICAteGFzc2VtYmxlci13aXRoLWNwcCAtTUQgLU1QICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzg1WFhkaWFiKQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0Fzc2VtYmxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQXNzZW1ibGVyID0gLVhPIC1Yc2l6ZS1vcHQNCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLnMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19Bc3NlbWJsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWHByZXByb2Nlc3MtYXNzZW1ibHkgLVhjcHAtbm8tc3BhY2UgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0NGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM4NVhYZ251KQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0Fzc2VtYmxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQXNzZW1ibGVyID0gLU8yIC1mc3RyZW5ndGgtcmVkdWNlIC1mbm8tYnVpbHRpbg0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUucw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQXNzZW1ibGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgICAteGFzc2VtYmxlci13aXRoLWNwcCAtTUQgLU1QICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzg1WFhzZmRpYWIpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQXNzZW1ibGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19Bc3NlbWJsZXIgPSAtWE8gLVhzaXplLW9wdA0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUucw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0Fzc2VtYmxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YcHJlcHJvY2Vzcy1hc3NlbWJseSAtWGNwcC1uby1zcGFjZSAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzg1WFhzZmdudSkNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19Bc3NlbWJsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0Fzc2VtYmxlciA9IC1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4NCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLnMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0Fzc2VtYmxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpICAgLXhhc3NlbWJsZXItd2l0aC1jcHAgLU1EIC1NUCAkKEFEREVEX0NGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM4NjBzZmRpYWIpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQXNzZW1ibGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19Bc3NlbWJsZXIgPSAtWE8gLVhzaXplLW9wdA0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUucw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0Fzc2VtYmxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YcHJlcHJvY2Vzcy1hc3NlbWJseSAtWGNwcC1uby1zcGFjZSAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzg2MHNmZ251KQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0Fzc2VtYmxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQXNzZW1ibGVyID0gLU8yIC1mc3RyZW5ndGgtcmVkdWNlIC1mbm8tYnVpbHRpbg0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUucw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQXNzZW1ibGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgICAteGFzc2VtYmxlci13aXRoLWNwcCAtTUQgLU1QICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFNJTUxJTlVYZGlhYikNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19Bc3NlbWJsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0Fzc2VtYmxlciA9IC1YTyAtWHNpemUtb3B0DQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5zDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQXNzZW1ibGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhwcmVwcm9jZXNzLWFzc2VtYmx5IC1YY3BwLW5vLXNwYWNlIC1XYSwtWG1uZW0tbWl0IC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0NGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxTSU1MSU5VWGdudSkNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19Bc3NlbWJsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0Fzc2VtYmxlciA9IC1PMiAtbm9zdGRsaWIgLWZuby1idWlsdGluIC1mbm8tZGVmZXItcG9wDQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5zDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcGVudGl1bSAkKERFQlVHRkxBR1NfQXNzZW1ibGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgICAteGFzc2VtYmxlci13aXRoLWNwcCAtTUQgLU1QICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFNJTU5UZGlhYikNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19Bc3NlbWJsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0Fzc2VtYmxlciA9IC1YTyAtWHNpemUtb3B0DQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5zDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQXNzZW1ibGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhwcmVwcm9jZXNzLWFzc2VtYmx5IC1YY3BwLW5vLXNwYWNlIC1XYSwtWG1uZW0tbWl0IC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0NGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxTSU1OVGdudSkNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19Bc3NlbWJsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0Fzc2VtYmxlciA9IC1PMiAtbm9zdGRsaWIgLWZuby1idWlsdGluIC1mbm8tZGVmZXItcG9wDQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5zDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcGVudGl1bSAkKERFQlVHRkxBR1NfQXNzZW1ibGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgICAteGFzc2VtYmxlci13aXRoLWNwcCAtTUQgLU1QICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFNJTVNQQVJDU09MQVJJU2RpYWIpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQXNzZW1ibGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19Bc3NlbWJsZXIgPSAtWE8gLVhzaXplLW9wdA0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUucw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0Fzc2VtYmxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YcHJlcHJvY2Vzcy1hc3NlbWJseSAtWGNwcC1uby1zcGFjZSAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFNJTVNQQVJDU09MQVJJU2dudSkNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19Bc3NlbWJsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0Fzc2VtYmxlciA9IC1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4NCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLnMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NzcGFyYyAkKERFQlVHRkxBR1NfQXNzZW1ibGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgICAteGFzc2VtYmxlci13aXRoLWNwcCAtTUQgLU1QICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCisNCisNCisNCisNCisNCistaW5jbHVkZSAkKFBSSl9ST09UX0RJUikvKi5tYWtlZmlsZQ0KKw0KKy1pbmNsdWRlICoubWFrZWZpbGUNCisNCittYWluX2FsbCA6IGV4dGVybmFsX2J1aWxkICQoUFJPSkVDVF9UQVJHRVRTKQ0KKwlAZWNobyAibWFrZTogYnVpbHQgdGFyZ2V0cyBvZiBgcHdkYCINCisNCisjIGVudHJ5IHBvaW50IGZvciBleHRlbmRpbmcgdGhlIGJ1aWxkDQorZXh0ZXJuYWxfYnVpbGQgOjoNCisJQGVjaG8gIiINCisNCisjIG1haW4gZW50cnkgcG9pbnQgZm9yIHByZSBwcm9jZXNzaW5nIHByaW9yIHRvIHRoZSBidWlsZA0KK3ByZV9idWlsZCA6OiAkKFBSRV9CVUlMRF9TVEVQKSBnZW5lcmF0ZV9zb3VyY2VzDQorCUBlY2hvICIiDQorDQorIyBlbnRyeSBwb2ludCBmb3IgZ2VuZXJhdGluZyBzb3VyY2VzIHByaW9yIHRvIHRoZSBidWlsZA0KK2dlbmVyYXRlX3NvdXJjZXMgOjoNCisJQGVjaG8gIiINCisNCisjIG1haW4gZW50cnkgcG9pbnQgZm9yIHBvc3QgcHJvY2Vzc2luZyBhZnRlciB0aGUgYnVpbGQNCitwb3N0X2J1aWxkIDo6ICQoUE9TVF9CVUlMRF9TVEVQKSBkZXBsb3lfb3V0cHV0DQorCUBlY2hvICIiDQorDQorIyBlbnRyeSBwb2ludCBmb3IgZGVwbG95aW5nIG91dHB1dCBhZnRlciB0aGUgYnVpbGQNCitkZXBsb3lfb3V0cHV0IDo6DQorCUBlY2hvICIiDQorDQorY2xlYW4gOjogZXh0ZXJuYWxfY2xlYW4gJChDTEVBTl9TVEVQKSBfY2xlYW4NCisNCisjIGVudHJ5IHBvaW50IGZvciBleHRlbmRpbmcgdGhlIGJ1aWxkIGNsZWFuDQorZXh0ZXJuYWxfY2xlYW4gOjoNCisJQGVjaG8gIiINCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9TY3JpcHRzL3VwZGF0ZUJ1aWx0SW5MaWJyYXJ5LmNtZCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL1NjcmlwdHMvdXBkYXRlQnVpbHRJbkxpYnJhcnkuY21kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1MTA3ZTQKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9TY3JpcHRzL3VwZGF0ZUJ1aWx0SW5MaWJyYXJ5LmNtZApAQCAtMCwwICsxLDYxIEBACitjZCBDOlxXaW5kUml2ZXJcdnh3b3Jrcy02LjNcdGFyZ2V0DQorDQorcmQgL3MgL3EgaFxXUElMaWINCisNCitta2RpciBoXFdQSUxpYg0KK21rZGlyIGhcV1BJTGliXEJ1dHRvbnMNCitta2RpciBoXFdQSUxpYlxDQU4NCitta2RpciBoXFdQSUxpYlxDaGlwT2JqZWN0DQorbWtkaXIgaFxXUElMaWJcQ0ludGVyZmFjZXMNCitta2RpciBoXFdQSUxpYlxDb21tYW5kcw0KK21rZGlyIGhcV1BJTGliXE5ldHdvcmtDb21tdW5pY2F0aW9uDQorbWtkaXIgaFxXUElMaWJcU21hcnREYXNoYm9hcmQNCitta2RpciBoXFdQSUxpYlx2aXNhDQorbWtkaXIgaFxXUElMaWJcVmlzaW9uDQorbWtkaXIgaFxXUElMaWJcVmlzaW9uMjAwOQ0KKw0KK21rZGlyIGhcV1BJTGliXExpdmVXaW5kb3cNCitta2RpciBoXFdQSUxpYlxuZXR3b3JrdGFibGVzDQorbWtkaXIgaFxXUElMaWJcdGFibGVzDQorbWtkaXIgaFxXUElMaWJcbmV0d29ya3RhYmxlczINCitta2RpciBoXFdQSUxpYlxuZXR3b3JrdGFibGVzMlxjbGllbnQNCitta2RpciBoXFdQSUxpYlxuZXR3b3JrdGFibGVzMlxjb25uZWN0aW9uDQorbWtkaXIgaFxXUElMaWJcbmV0d29ya3RhYmxlczJcc2VydmVyDQorbWtkaXIgaFxXUElMaWJcbmV0d29ya3RhYmxlczJcc3RyZWFtDQorbWtkaXIgaFxXUElMaWJcbmV0d29ya3RhYmxlczJcdGhyZWFkDQorbWtkaXIgaFxXUElMaWJcbmV0d29ya3RhYmxlczJcdHlwZQ0KK21rZGlyIGhcV1BJTGliXG5ldHdvcmt0YWJsZXMyXHV0aWwNCisNCisNCisNCitjb3B5IGM6XFdpbmRSaXZlclx3b3Jrc3BhY2VcV1BJTGliXCouaCBoXFdQSUxpYg0KK2NvcHkgYzpcV2luZFJpdmVyXHdvcmtzcGFjZVxXUElMaWJcQnV0dG9uc1wqLmggaFxXUElMaWJcQnV0dG9ucw0KK2NvcHkgYzpcV2luZFJpdmVyXHdvcmtzcGFjZVxXUElMaWJcQ0FOXCouaCBoXFdQSUxpYlxDQU4NCitjb3B5IGM6XFdpbmRSaXZlclx3b3Jrc3BhY2VcV1BJTGliXENoaXBPYmplY3RcKi5oIGhcV1BJTGliXENoaXBPYmplY3QNCitjb3B5IEM6XFdpbmRSaXZlclx3b3Jrc3BhY2VcV1BJTGliXENJbnRlcmZhY2VzXCouaCBoXFdQSUxpYlxDSW50ZXJmYWNlcw0KK2NvcHkgQzpcV2luZFJpdmVyXHdvcmtzcGFjZVxXUElMaWJcQ29tbWFuZHNcKi5oIGhcV1BJTGliXENvbW1hbmRzDQorY29weSBDOlxXaW5kUml2ZXJcd29ya3NwYWNlXFdQSUxpYlxOZXR3b3JrQ29tbXVuaWNhdGlvblwqLmggaFxXUElMaWJcTmV0d29ya0NvbW11bmljYXRpb24NCitjb3B5IEM6XFdpbmRSaXZlclx3b3Jrc3BhY2VcV1BJTGliXFNtYXJ0RGFzaGJvYXJkXCouaCBoXFdQSUxpYlxTbWFydERhc2hib2FyZA0KK2NvcHkgYzpcV2luZFJpdmVyXHdvcmtzcGFjZVxXUElMaWJcdmlzYVwqLmggaFxXUElMaWJcdmlzYQ0KK2NvcHkgYzpcV2luZFJpdmVyXHdvcmtzcGFjZVxXUElMaWJcVmlzaW9uXCouaCBoXFdQSUxpYlxWaXNpb24NCitjb3B5IGM6XFdpbmRSaXZlclx3b3Jrc3BhY2VcV1BJTGliXFZpc2lvbjIwMDlcKi5oIGhcV1BJTGliXFZpc2lvbjIwMDkNCisNCitjb3B5IEM6XFdpbmRSaXZlclx3b3Jrc3BhY2VcV1BJTGliXExpdmVXaW5kb3dcKi5oIGhcV1BJTGliXExpdmVXaW5kb3cNCitjb3B5IEM6XFdpbmRSaXZlclx3b3Jrc3BhY2VcV1BJTGliXG5ldHdvcmt0YWJsZXNcKi5oIGhcV1BJTGliXG5ldHdvcmt0YWJsZXMNCitjb3B5IEM6XFdpbmRSaXZlclx3b3Jrc3BhY2VcV1BJTGliXHRhYmxlc1wqLmggaFxXUElMaWJcdGFibGVzDQorY29weSBDOlxXaW5kUml2ZXJcd29ya3NwYWNlXFdQSUxpYlxuZXR3b3JrdGFibGVzMlwqLmggaFxXUElMaWJcbmV0d29ya3RhYmxlczINCitjb3B5IEM6XFdpbmRSaXZlclx3b3Jrc3BhY2VcV1BJTGliXG5ldHdvcmt0YWJsZXMyXGNsaWVudFwqLmggaFxXUElMaWJcbmV0d29ya3RhYmxlczJcY2xpZW50DQorY29weSBDOlxXaW5kUml2ZXJcd29ya3NwYWNlXFdQSUxpYlxuZXR3b3JrdGFibGVzMlxjb25uZWN0aW9uXCouaCBoXFdQSUxpYlxuZXR3b3JrdGFibGVzMlxjb25uZWN0aW9uDQorY29weSBDOlxXaW5kUml2ZXJcd29ya3NwYWNlXFdQSUxpYlxuZXR3b3JrdGFibGVzMlxzZXJ2ZXJcKi5oIGhcV1BJTGliXG5ldHdvcmt0YWJsZXMyXHNlcnZlcg0KK2NvcHkgQzpcV2luZFJpdmVyXHdvcmtzcGFjZVxXUElMaWJcbmV0d29ya3RhYmxlczJcc3RyZWFtXCouaCBoXFdQSUxpYlxuZXR3b3JrdGFibGVzMlxzdHJlYW0NCitjb3B5IEM6XFdpbmRSaXZlclx3b3Jrc3BhY2VcV1BJTGliXG5ldHdvcmt0YWJsZXMyXHRocmVhZFwqLmggaFxXUElMaWJcbmV0d29ya3RhYmxlczJcdGhyZWFkDQorY29weSBDOlxXaW5kUml2ZXJcd29ya3NwYWNlXFdQSUxpYlxuZXR3b3JrdGFibGVzMlx0eXBlXCouaCBoXFdQSUxpYlxuZXR3b3JrdGFibGVzMlx0eXBlDQorY29weSBDOlxXaW5kUml2ZXJcd29ya3NwYWNlXFdQSUxpYlxuZXR3b3JrdGFibGVzMlx1dGlsXCouaCBoXFdQSUxpYlxuZXR3b3JrdGFibGVzMlx1dGlsDQorDQorDQorDQorY29weSBDOlxXaW5kUml2ZXJcd29ya3NwYWNlXFdQSUxpYlxQUEM2MDNnbnVcV1BJTGliXERlYnVnXFdQSUxpYi5hIGxpYg0KKw0KK3JlbSBjb3B5IGM6XFdpbmRSaXZlclx3b3Jrc3BhY2VcV29ya2JlbmNoVXBkYXRlXGZyY18yMCouemlwIGM6XFdpbmRSaXZlclxXUElMaWJcY1JJT19JbWFnZXMNCisNCitjZCBcV2luZFJpdmVyXHdvcmtzcGFjZVxXUElMaWJcU2NyaXB0cw0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL1NlbnNvckJhc2UuY3BwIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvU2Vuc29yQmFzZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmEwOTAyMwotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL1NlbnNvckJhc2UuY3BwCkBAIC0wLDAgKzEsMTkyIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy8qIENvcHlyaWdodCAoYykgRklSU1QgMjAwOC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4JCQkJCQkJICAqLw0KKy8qIE9wZW4gU291cmNlIFNvZnR3YXJlIC0gbWF5IGJlIG1vZGlmaWVkIGFuZCBzaGFyZWQgYnkgRlJDIHRlYW1zLiBUaGUgY29kZSAgICovDQorLyogbXVzdCBiZSBhY2NvbXBhbmllZCBieSB0aGUgRklSU1QgQlNEIGxpY2Vuc2UgZmlsZSBpbiAkKFdJTkRfQkFTRSkvV1BJTGliLiAgKi8NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKyNpbmNsdWRlICJTZW5zb3JCYXNlLmgiDQorDQorI2luY2x1ZGUgIk5ldHdvcmtDb21tdW5pY2F0aW9uL0xvYWRPdXQuaCINCisjaW5jbHVkZSAiV1BJRXJyb3JzLmgiDQorDQorY29uc3QgVUlOVDMyIFNlbnNvckJhc2U6OmtTeXN0ZW1DbG9ja1RpY2tzUGVyTWljcm9zZWNvbmQ7DQorY29uc3QgVUlOVDMyIFNlbnNvckJhc2U6OmtEaWdpdGFsQ2hhbm5lbHM7DQorY29uc3QgVUlOVDMyIFNlbnNvckJhc2U6OmtBbmFsb2dDaGFubmVsczsNCitjb25zdCBVSU5UMzIgU2Vuc29yQmFzZTo6a0FuYWxvZ01vZHVsZXM7DQorY29uc3QgVUlOVDMyIFNlbnNvckJhc2U6OmtEaWdpdGFsTW9kdWxlczsNCitjb25zdCBVSU5UMzIgU2Vuc29yQmFzZTo6a1NvbGVub2lkQ2hhbm5lbHM7DQorY29uc3QgVUlOVDMyIFNlbnNvckJhc2U6OmtTb2xlbm9pZE1vZHVsZXM7DQorY29uc3QgVUlOVDMyIFNlbnNvckJhc2U6OmtQd21DaGFubmVsczsNCitjb25zdCBVSU5UMzIgU2Vuc29yQmFzZTo6a1JlbGF5Q2hhbm5lbHM7DQorY29uc3QgVUlOVDMyIFNlbnNvckJhc2U6OmtDaGFzc2lzU2xvdHM7DQorU2Vuc29yQmFzZSAqU2Vuc29yQmFzZTo6bV9zaW5nbGV0b25MaXN0ID0gTlVMTDsNCisNCisvKioNCisgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBzZW5zb3IgYmFzZSBhbmQgZ2V0cyBhbiBGUEdBIGhhbmRsZQ0KKyAqLw0KK1NlbnNvckJhc2U6OlNlbnNvckJhc2UoKQ0KK3sNCit9DQorDQorLyoqDQorICogRnJlZXMgdGhlIHJlc291cmNlcyBmb3IgYSBTZW5zb3JCYXNlLg0KKyAqLw0KK1NlbnNvckJhc2U6On5TZW5zb3JCYXNlKCkNCit7DQorfQ0KKw0KKy8qKg0KKyAqIEFkZCBzZW5zb3IgdG8gdGhlIHNpbmdsZXRvbiBsaXN0Lg0KKyAqIEFkZCB0aGlzIHNlbnNvciB0byB0aGUgbGlzdCBvZiBzaW5nbGV0b25zIHRoYXQgbmVlZCB0byBiZSBkZWxldGVkIHdoZW4NCisgKiB0aGUgcm9ib3QgcHJvZ3JhbSBleGl0cy4gRWFjaCBvZiB0aGUgc2Vuc29ycyBvbiB0aGlzIGxpc3QgYXJlIHNpbmdsZXRvbnMsDQorICogdGhhdCBpcyB0aGV5IGFyZW4ndCBhbGxvY2F0ZWQgZGlyZWN0bHkgd2l0aCBuZXcsIGJ1dCBpbnN0ZWFkIGFyZSBhbGxvY2F0ZWQNCisgKiBieSB0aGUgc3RhdGljIEdldEluc3RhbmNlIG1ldGhvZC4gQXMgYSByZXN1bHQsIHRoZXkgYXJlIG5ldmVyIGRlbGV0ZWQgd2hlbg0KKyAqIHRoZSBwcm9ncmFtIGV4aXRzLiBDb25zZXF1ZW50bHkgdGhlc2Ugc2Vuc29ycyBtYXkgc3RpbGwgYmUgaG9sZGluZyBvbnRvDQorICogcmVzb3VyY2VzIGFuZCBuZWVkIHRvIGhhdmUgdGhlaXIgZGVzdHJ1Y3RvcnMgY2FsbGVkIGF0IHRoZSBlbmQgb2YgdGhlIHByb2dyYW0uDQorICovDQordm9pZCBTZW5zb3JCYXNlOjpBZGRUb1NpbmdsZXRvbkxpc3QoKQ0KK3sNCisJbV9uZXh0U2luZ2xldG9uID0gbV9zaW5nbGV0b25MaXN0Ow0KKwltX3NpbmdsZXRvbkxpc3QgPSB0aGlzOw0KK30NCisNCisvKioNCisgKiBEZWxldGUgYWxsIHRoZSBzaW5nbGV0b24gY2xhc3NlcyBvbiB0aGUgbGlzdC4NCisgKiBBbGwgdGhlIGNsYXNzZXMgdGhhdCB3ZXJlIGFsbG9jYXRlZCBhcyBzaW5nbGV0b25zIG5lZWQgdG8gYmUgZGVsZXRlZCBzbw0KKyAqIHRoZWlyIHJlc291cmNlcyBjYW4gYmUgZnJlZWQuDQorICovDQordm9pZCBTZW5zb3JCYXNlOjpEZWxldGVTaW5nbGV0b25zKCkNCit7DQorCWZvciAoU2Vuc29yQmFzZSAqbmV4dCA9IG1fc2luZ2xldG9uTGlzdDsgbmV4dCAhPSBOVUxMOykNCisJew0KKwkJU2Vuc29yQmFzZSAqdG1wID0gbmV4dDsNCisJCW5leHQgPSBuZXh0LT5tX25leHRTaW5nbGV0b247DQorCQlkZWxldGUgdG1wOw0KKwl9DQorCW1fc2luZ2xldG9uTGlzdCA9IE5VTEw7DQorfQ0KKw0KKy8qKg0KKyAqIENoZWNrIHRoYXQgdGhlIGFuYWxvZyBtb2R1bGUgbnVtYmVyIGlzIHZhbGlkLg0KKyAqIA0KKyAqIEByZXR1cm4gQW5hbG9nIG1vZHVsZSBpcyB2YWxpZCBhbmQgcHJlc2VudA0KKyAqLw0KK2Jvb2wgU2Vuc29yQmFzZTo6Q2hlY2tBbmFsb2dNb2R1bGUoVUlOVDggbW9kdWxlTnVtYmVyKQ0KK3sNCisJaWYgKG5Mb2FkT3V0OjpnZXRNb2R1bGVQcmVzZW5jZShuTG9hZE91dDo6a01vZHVsZVR5cGVfQW5hbG9nLCBtb2R1bGVOdW1iZXIgLSAxKSkNCisJCXJldHVybiB0cnVlOw0KKwlyZXR1cm4gZmFsc2U7DQorfQ0KKw0KKy8qKg0KKyAqIENoZWNrIHRoYXQgdGhlIGRpZ2l0YWwgbW9kdWxlIG51bWJlciBpcyB2YWxpZC4NCisgKiANCisgKiBAcmV0dXJuIERpZ2l0YWwgbW9kdWxlIGlzIHZhbGlkIGFuZCBwcmVzZW50DQorICovDQorYm9vbCBTZW5zb3JCYXNlOjpDaGVja0RpZ2l0YWxNb2R1bGUoVUlOVDggbW9kdWxlTnVtYmVyKQ0KK3sNCisJaWYgKG5Mb2FkT3V0OjpnZXRNb2R1bGVQcmVzZW5jZShuTG9hZE91dDo6a01vZHVsZVR5cGVfRGlnaXRhbCwgbW9kdWxlTnVtYmVyIC0gMSkpDQorCQlyZXR1cm4gdHJ1ZTsNCisJcmV0dXJuIGZhbHNlOw0KK30NCisNCisvKioNCisgKiBDaGVjayB0aGF0IHRoZSBkaWdpdGFsIG1vZHVsZSBudW1iZXIgaXMgdmFsaWQuDQorICogDQorICogQHJldHVybiBEaWdpdGFsIG1vZHVsZSBpcyB2YWxpZCBhbmQgcHJlc2VudA0KKyAqLw0KK2Jvb2wgU2Vuc29yQmFzZTo6Q2hlY2tQV01Nb2R1bGUoVUlOVDggbW9kdWxlTnVtYmVyKQ0KK3sNCisJcmV0dXJuIENoZWNrRGlnaXRhbE1vZHVsZShtb2R1bGVOdW1iZXIpOw0KK30NCisNCisvKioNCisgKiBDaGVjayB0aGF0IHRoZSBkaWdpdGFsIG1vZHVsZSBudW1iZXIgaXMgdmFsaWQuDQorICogDQorICogQHJldHVybiBEaWdpdGFsIG1vZHVsZSBpcyB2YWxpZCBhbmQgcHJlc2VudA0KKyAqLw0KK2Jvb2wgU2Vuc29yQmFzZTo6Q2hlY2tSZWxheU1vZHVsZShVSU5UOCBtb2R1bGVOdW1iZXIpDQorew0KKwlyZXR1cm4gQ2hlY2tEaWdpdGFsTW9kdWxlKG1vZHVsZU51bWJlcik7DQorfQ0KKw0KKy8qKg0KKyAqIENoZWNrIHRoYXQgdGhlIHNvbGVub2lkIG1vZHVsZSBudW1iZXIgaXMgdmFsaWQuDQorICogDQorICogQHJldHVybiBTb2xlbm9pZCBtb2R1bGUgaXMgdmFsaWQgYW5kIHByZXNlbnQNCisgKi8NCitib29sIFNlbnNvckJhc2U6OkNoZWNrU29sZW5vaWRNb2R1bGUoVUlOVDggbW9kdWxlTnVtYmVyKQ0KK3sNCisJaWYgKG5Mb2FkT3V0OjpnZXRNb2R1bGVQcmVzZW5jZShuTG9hZE91dDo6a01vZHVsZVR5cGVfU29sZW5vaWQsIG1vZHVsZU51bWJlciAtIDEpKQ0KKwkJcmV0dXJuIHRydWU7DQorCXJldHVybiBmYWxzZTsNCit9DQorDQorLyoqDQorICogQ2hlY2sgdGhhdCB0aGUgZGlnaXRhbCBjaGFubmVsIG51bWJlciBpcyB2YWxpZC4NCisgKiBWZXJpZnkgdGhhdCB0aGUgY2hhbm5lbCBudW1iZXIgaXMgb25lIG9mIHRoZSBsZWdhbCBjaGFubmVsIG51bWJlcnMuIENoYW5uZWwgbnVtYmVycyBhcmUNCisgKiAxLWJhc2VkLg0KKyAqIA0KKyAqIEByZXR1cm4gRGlnaXRhbCBjaGFubmVsIGlzIHZhbGlkDQorICovDQorYm9vbCBTZW5zb3JCYXNlOjpDaGVja0RpZ2l0YWxDaGFubmVsKFVJTlQzMiBjaGFubmVsKQ0KK3sNCisJaWYgKGNoYW5uZWwgPiAwICYmIGNoYW5uZWwgPD0ga0RpZ2l0YWxDaGFubmVscykNCisJCXJldHVybiB0cnVlOw0KKwlyZXR1cm4gZmFsc2U7DQorfQ0KKw0KKy8qKg0KKyAqIENoZWNrIHRoYXQgdGhlIGRpZ2l0YWwgY2hhbm5lbCBudW1iZXIgaXMgdmFsaWQuDQorICogVmVyaWZ5IHRoYXQgdGhlIGNoYW5uZWwgbnVtYmVyIGlzIG9uZSBvZiB0aGUgbGVnYWwgY2hhbm5lbCBudW1iZXJzLiBDaGFubmVsIG51bWJlcnMgYXJlDQorICogMS1iYXNlZC4NCisgKiANCisgKiBAcmV0dXJuIFJlbGF5IGNoYW5uZWwgaXMgdmFsaWQNCisgKi8NCitib29sIFNlbnNvckJhc2U6OkNoZWNrUmVsYXlDaGFubmVsKFVJTlQzMiBjaGFubmVsKQ0KK3sNCisJaWYgKGNoYW5uZWwgPiAwICYmIGNoYW5uZWwgPD0ga1JlbGF5Q2hhbm5lbHMpDQorCQlyZXR1cm4gdHJ1ZTsNCisJcmV0dXJuIGZhbHNlOw0KK30NCisNCisvKioNCisgKiBDaGVjayB0aGF0IHRoZSBkaWdpdGFsIGNoYW5uZWwgbnVtYmVyIGlzIHZhbGlkLg0KKyAqIFZlcmlmeSB0aGF0IHRoZSBjaGFubmVsIG51bWJlciBpcyBvbmUgb2YgdGhlIGxlZ2FsIGNoYW5uZWwgbnVtYmVycy4gQ2hhbm5lbCBudW1iZXJzIGFyZQ0KKyAqIDEtYmFzZWQuDQorICogDQorICogQHJldHVybiBQV00gY2hhbm5lbCBpcyB2YWxpZA0KKyAqLw0KK2Jvb2wgU2Vuc29yQmFzZTo6Q2hlY2tQV01DaGFubmVsKFVJTlQzMiBjaGFubmVsKQ0KK3sNCisJaWYgKGNoYW5uZWwgPiAwICYmIGNoYW5uZWwgPD0ga1B3bUNoYW5uZWxzKQ0KKwkJcmV0dXJuIHRydWU7DQorCXJldHVybiBmYWxzZTsNCit9DQorDQorLyoqDQorICogQ2hlY2sgdGhhdCB0aGUgYW5hbG9nIGNoYW5uZWwgbnVtYmVyIGlzIHZhbHVlLg0KKyAqIFZlcmlmeSB0aGF0IHRoZSBhbmFsb2cgY2hhbm5lbCBudW1iZXIgaXMgb25lIG9mIHRoZSBsZWdhbCBjaGFubmVsIG51bWJlcnMuIENoYW5uZWwgbnVtYmVycw0KKyAqIGFyZSAxLWJhc2VkLg0KKyAqIA0KKyAqIEByZXR1cm4gQW5hbG9nIGNoYW5uZWwgaXMgdmFsaWQNCisgKi8NCitib29sIFNlbnNvckJhc2U6OkNoZWNrQW5hbG9nQ2hhbm5lbChVSU5UMzIgY2hhbm5lbCkNCit7DQorCWlmIChjaGFubmVsID4gMCAmJiBjaGFubmVsIDw9IGtBbmFsb2dDaGFubmVscykNCisJCXJldHVybiB0cnVlOw0KKwlyZXR1cm4gZmFsc2U7DQorfQ0KKw0KKy8qKg0KKyAqIFZlcmlmeSB0aGF0IHRoZSBzb2xlbm9pZCBjaGFubmVsIG51bWJlciBpcyB3aXRoaW4gbGltaXRzLg0KKyAqIA0KKyAqIEByZXR1cm4gU29sZW5vaWQgY2hhbm5lbCBpcyB2YWxpZA0KKyAqLw0KK2Jvb2wgU2Vuc29yQmFzZTo6Q2hlY2tTb2xlbm9pZENoYW5uZWwoVUlOVDMyIGNoYW5uZWwpDQorew0KKwlpZiAoY2hhbm5lbCA+IDAgJiYgY2hhbm5lbCA8PSBrU29sZW5vaWRDaGFubmVscykNCisJCXJldHVybiB0cnVlOw0KKwlyZXR1cm4gZmFsc2U7DQorfQ0KKw0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL1NlbnNvckJhc2UuaCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL1NlbnNvckJhc2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNWZlZWQ2Ci0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvU2Vuc29yQmFzZS5oCkBAIC0wLDAgKzEsNTkgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorLyogQ29weXJpZ2h0IChjKSBGSVJTVCAyMDA4LiBBbGwgUmlnaHRzIFJlc2VydmVkLgkJCQkJCQkgICovDQorLyogT3BlbiBTb3VyY2UgU29mdHdhcmUgLSBtYXkgYmUgbW9kaWZpZWQgYW5kIHNoYXJlZCBieSBGUkMgdGVhbXMuIFRoZSBjb2RlICAgKi8NCisvKiBtdXN0IGJlIGFjY29tcGFuaWVkIGJ5IHRoZSBGSVJTVCBCU0QgbGljZW5zZSBmaWxlIGluICQoV0lORF9CQVNFKS9XUElMaWIuICAqLw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorI2lmbmRlZiBTRU5TT1JCQVNFX0hfDQorI2RlZmluZSBTRU5TT1JCQVNFX0hfDQorDQorI2luY2x1ZGUgIkNoaXBPYmplY3QvTmlSaW8uaCINCisjaW5jbHVkZSAiRXJyb3JCYXNlLmgiDQorI2luY2x1ZGUgPHN0ZGlvLmg+DQorI2luY2x1ZGUgIkJhc2UuaCINCisNCisvKioNCisgKiBCYXNlIGNsYXNzIGZvciBhbGwgc2Vuc29ycy4NCisgKiBTdG9yZXMgbW9zdCByZWNlbnQgc3RhdHVzIGluZm9ybWF0aW9uIGFzIHdlbGwgYXMgY29udGFpbmluZyB1dGlsaXR5IGZ1bmN0aW9ucyBmb3IgY2hlY2tpbmcNCisgKiBjaGFubmVscyBhbmQgZXJyb3IgcHJvY2Vzc2luZy4NCisgKi8NCitjbGFzcyBTZW5zb3JCYXNlOiBwdWJsaWMgRXJyb3JCYXNlIHsNCitwdWJsaWM6DQorCVNlbnNvckJhc2UoKTsNCisJdmlydHVhbCB+U2Vuc29yQmFzZSgpOw0KKwlzdGF0aWMgdm9pZCBEZWxldGVTaW5nbGV0b25zKCk7DQorCXN0YXRpYyBVSU5UMzIgR2V0RGVmYXVsdEFuYWxvZ01vZHVsZSgpIHsgcmV0dXJuIDE7IH0NCisJc3RhdGljIFVJTlQzMiBHZXREZWZhdWx0RGlnaXRhbE1vZHVsZSgpIHsgcmV0dXJuIDE7IH0NCisJc3RhdGljIFVJTlQzMiBHZXREZWZhdWx0U29sZW5vaWRNb2R1bGUoKSB7IHJldHVybiAxOyB9DQorCXN0YXRpYyBib29sIENoZWNrQW5hbG9nTW9kdWxlKFVJTlQ4IG1vZHVsZU51bWJlcik7DQorCXN0YXRpYyBib29sIENoZWNrRGlnaXRhbE1vZHVsZShVSU5UOCBtb2R1bGVOdW1iZXIpOw0KKwlzdGF0aWMgYm9vbCBDaGVja1BXTU1vZHVsZShVSU5UOCBtb2R1bGVOdW1iZXIpOw0KKwlzdGF0aWMgYm9vbCBDaGVja1JlbGF5TW9kdWxlKFVJTlQ4IG1vZHVsZU51bWJlcik7DQorCXN0YXRpYyBib29sIENoZWNrU29sZW5vaWRNb2R1bGUoVUlOVDggbW9kdWxlTnVtYmVyKTsNCisJc3RhdGljIGJvb2wgQ2hlY2tEaWdpdGFsQ2hhbm5lbChVSU5UMzIgY2hhbm5lbCk7DQorCXN0YXRpYyBib29sIENoZWNrUmVsYXlDaGFubmVsKFVJTlQzMiBjaGFubmVsKTsNCisJc3RhdGljIGJvb2wgQ2hlY2tQV01DaGFubmVsKFVJTlQzMiBjaGFubmVsKTsNCisJc3RhdGljIGJvb2wgQ2hlY2tBbmFsb2dDaGFubmVsKFVJTlQzMiBjaGFubmVsKTsNCisJc3RhdGljIGJvb2wgQ2hlY2tTb2xlbm9pZENoYW5uZWwoVUlOVDMyIGNoYW5uZWwpOw0KKw0KKwlzdGF0aWMgY29uc3QgVUlOVDMyIGtTeXN0ZW1DbG9ja1RpY2tzUGVyTWljcm9zZWNvbmQgPSA0MDsNCisJc3RhdGljIGNvbnN0IFVJTlQzMiBrRGlnaXRhbENoYW5uZWxzID0gMTQ7DQorCXN0YXRpYyBjb25zdCBVSU5UMzIga0FuYWxvZ0NoYW5uZWxzID0gODsNCisJc3RhdGljIGNvbnN0IFVJTlQzMiBrQW5hbG9nTW9kdWxlcyA9IDI7DQorCXN0YXRpYyBjb25zdCBVSU5UMzIga0RpZ2l0YWxNb2R1bGVzID0gMjsNCisJc3RhdGljIGNvbnN0IFVJTlQzMiBrU29sZW5vaWRDaGFubmVscyA9IDg7DQorCXN0YXRpYyBjb25zdCBVSU5UMzIga1NvbGVub2lkTW9kdWxlcyA9IDI7DQorCXN0YXRpYyBjb25zdCBVSU5UMzIga1B3bUNoYW5uZWxzID0gMTA7DQorCXN0YXRpYyBjb25zdCBVSU5UMzIga1JlbGF5Q2hhbm5lbHMgPSA4Ow0KKwlzdGF0aWMgY29uc3QgVUlOVDMyIGtDaGFzc2lzU2xvdHMgPSA4Ow0KK3Byb3RlY3RlZDoNCisJdm9pZCBBZGRUb1NpbmdsZXRvbkxpc3QoKTsNCisNCitwcml2YXRlOg0KKwlESVNBTExPV19DT1BZX0FORF9BU1NJR04oU2Vuc29yQmFzZSk7DQorCXN0YXRpYyBTZW5zb3JCYXNlICptX3NpbmdsZXRvbkxpc3Q7DQorCVNlbnNvckJhc2UgKm1fbmV4dFNpbmdsZXRvbjsNCit9Ow0KKw0KKw0KKyNlbmRpZg0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL1NlcmlhbFBvcnQuY3BwIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvU2VyaWFsUG9ydC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDAzODliYQotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL1NlcmlhbFBvcnQuY3BwCkBAIC0wLDAgKzEsMzMxIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy8qIENvcHlyaWdodCAoYykgRklSU1QgMjAwOC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4JCQkJCQkJICAqLw0KKy8qIE9wZW4gU291cmNlIFNvZnR3YXJlIC0gbWF5IGJlIG1vZGlmaWVkIGFuZCBzaGFyZWQgYnkgRlJDIHRlYW1zLiBUaGUgY29kZSAgICovDQorLyogbXVzdCBiZSBhY2NvbXBhbmllZCBieSB0aGUgRklSU1QgQlNEIGxpY2Vuc2UgZmlsZSBpbiAkKFdJTkRfQkFTRSkvV1BJTGliLiAgKi8NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKyNpbmNsdWRlICJTZXJpYWxQb3J0LmgiDQorDQorI2luY2x1ZGUgIk5ldHdvcmtDb21tdW5pY2F0aW9uL1VzYWdlUmVwb3J0aW5nLmgiDQorI2luY2x1ZGUgInZpc2EvdmlzYS5oIg0KKw0KKy8vc3RhdGljIFZpU3RhdHVzIF9WSV9GVU5DSCBpb0NvbXBsZXRlSGFuZGxlciAoVmlTZXNzaW9uIHZpLCBWaUV2ZW50VHlwZSBldmVudFR5cGUsIFZpRXZlbnQgZXZlbnQsIFZpQWRkciB1c2VySGFuZGxlKTsNCisNCisvKioNCisgKiBDcmVhdGUgYW4gaW5zdGFuY2Ugb2YgYSBTZXJpYWwgUG9ydCBjbGFzcy4NCisgKiANCisgKiBAcGFyYW0gYmF1ZFJhdGUgVGhlIGJhdWQgcmF0ZSB0byBjb25maWd1cmUgdGhlIHNlcmlhbCBwb3J0LiAgVGhlIGNSSU8tOTA3NCBzdXBwb3J0cyB1cCB0byAyMzA0MDAgQmF1ZC4NCisgKiBAcGFyYW0gZGF0YUJpdHMgVGhlIG51bWJlciBvZiBkYXRhIGJpdHMgcGVyIHRyYW5zZmVyLiAgVmFsaWQgdmFsdWVzIGFyZSBiZXR3ZWVuIDUgYW5kIDggYml0cy4NCisgKiBAcGFyYW0gcGFyaXR5IFNlbGVjdCB0aGUgdHlwZSBvZiBwYXJpdHkgY2hlY2tpbmcgdG8gdXNlLg0KKyAqIEBwYXJhbSBzdG9wQml0cyBUaGUgbnVtYmVyIG9mIHN0b3AgYml0cyB0byB1c2UgYXMgZGVmaW5lZCBieSB0aGUgZW51bSBTdG9wQml0cy4NCisgKi8NCitTZXJpYWxQb3J0OjpTZXJpYWxQb3J0KFVJTlQzMiBiYXVkUmF0ZSwgVUlOVDggZGF0YUJpdHMsIFNlcmlhbFBvcnQ6OlBhcml0eSBwYXJpdHksIFNlcmlhbFBvcnQ6OlN0b3BCaXRzIHN0b3BCaXRzKQ0KKwk6IG1fcmVzb3VyY2VNYW5hZ2VySGFuZGxlICgwKQ0KKwksIG1fcG9ydEhhbmRsZSAoMCkNCisJLCBtX2NvbnNvbGVNb2RlRW5hYmxlZCAoZmFsc2UpDQorew0KKwlWaVN0YXR1cyBsb2NhbFN0YXR1cyA9IFZJX1NVQ0NFU1M7DQorCWxvY2FsU3RhdHVzID0gdmlPcGVuRGVmYXVsdFJNKChWaVNlc3Npb24qKSZtX3Jlc291cmNlTWFuYWdlckhhbmRsZSk7DQorCXdwaV9zZXRFcnJvcihsb2NhbFN0YXR1cyk7DQorDQorCWxvY2FsU3RhdHVzID0gdmlPcGVuKG1fcmVzb3VyY2VNYW5hZ2VySGFuZGxlLCAiQVNSTDE6OklOU1RSIiwgVklfTlVMTCwgVklfTlVMTCwgKFZpU2Vzc2lvbiopJm1fcG9ydEhhbmRsZSk7DQorCXdwaV9zZXRFcnJvcihsb2NhbFN0YXR1cyk7DQorCWlmIChsb2NhbFN0YXR1cyAhPSAwKQ0KKwl7DQorCQltX2NvbnNvbGVNb2RlRW5hYmxlZCA9IHRydWU7DQorCQlyZXR1cm47DQorCX0NCisNCisJbG9jYWxTdGF0dXMgPSB2aVNldEF0dHJpYnV0ZShtX3BvcnRIYW5kbGUsIFZJX0FUVFJfQVNSTF9CQVVELCBiYXVkUmF0ZSk7DQorCXdwaV9zZXRFcnJvcihsb2NhbFN0YXR1cyk7DQorCWxvY2FsU3RhdHVzID0gdmlTZXRBdHRyaWJ1dGUobV9wb3J0SGFuZGxlLCBWSV9BVFRSX0FTUkxfREFUQV9CSVRTLCBkYXRhQml0cyk7DQorCXdwaV9zZXRFcnJvcihsb2NhbFN0YXR1cyk7DQorCWxvY2FsU3RhdHVzID0gdmlTZXRBdHRyaWJ1dGUobV9wb3J0SGFuZGxlLCBWSV9BVFRSX0FTUkxfUEFSSVRZLCBwYXJpdHkpOw0KKwl3cGlfc2V0RXJyb3IobG9jYWxTdGF0dXMpOw0KKwlsb2NhbFN0YXR1cyA9IHZpU2V0QXR0cmlidXRlKG1fcG9ydEhhbmRsZSwgVklfQVRUUl9BU1JMX1NUT1BfQklUUywgc3RvcEJpdHMpOw0KKwl3cGlfc2V0RXJyb3IobG9jYWxTdGF0dXMpOw0KKw0KKwkvLyBTZXQgdGhlIGRlZmF1bHQgdGltZW91dCB0byA1IHNlY29uZHMuDQorCVNldFRpbWVvdXQoNS4wZik7DQorDQorCS8vIERvbid0IHdhaXQgdW50aWwgdGhlIGJ1ZmZlciBpcyBmdWxsIHRvIHRyYW5zbWl0Lg0KKwlTZXRXcml0ZUJ1ZmZlck1vZGUoa0ZsdXNoT25BY2Nlc3MpOw0KKw0KKwlFbmFibGVUZXJtaW5hdGlvbigpOw0KKw0KKwkvL3ZpSW5zdGFsbEhhbmRsZXIobV9wb3J0SGFuZGxlLCBWSV9FVkVOVF9JT19DT01QTEVUSU9OLCBpb0NvbXBsZXRlSGFuZGxlciwgdGhpcyk7DQorCS8vdmlFbmFibGVFdmVudChtX3BvcnRIYW5kbGUsIFZJX0VWRU5UX0lPX0NPTVBMRVRJT04sIFZJX0hORExSLCBWSV9OVUxMKTsNCisNCisJblVzYWdlUmVwb3J0aW5nOjpyZXBvcnQoblVzYWdlUmVwb3J0aW5nOjprUmVzb3VyY2VUeXBlX1NlcmlhbFBvcnQsIDApOw0KK30NCisNCisvKioNCisgKiBEZXN0cnVjdG9yLg0KKyAqLw0KK1NlcmlhbFBvcnQ6On5TZXJpYWxQb3J0KCkNCit7DQorCWlmICghbV9jb25zb2xlTW9kZUVuYWJsZWQpDQorCXsNCisJCS8vdmlVbmluc3RhbGxIYW5kbGVyKG1fcG9ydEhhbmRsZSwgVklfRVZFTlRfSU9fQ09NUExFVElPTiwgaW9Db21wbGV0ZUhhbmRsZXIsIHRoaXMpOw0KKwkJdmlDbG9zZShtX3BvcnRIYW5kbGUpOw0KKwl9DQorCXZpQ2xvc2UobV9yZXNvdXJjZU1hbmFnZXJIYW5kbGUpOw0KK30NCisNCisvKioNCisgKiBTZXQgdGhlIHR5cGUgb2YgZmxvdyBjb250cm9sIHRvIGVuYWJsZSBvbiB0aGlzIHBvcnQuDQorICogDQorICogQnkgZGVmYXVsdCwgZmxvdyBjb250cm9sIGlzIGRpc2FibGVkLg0KKyAqLw0KK3ZvaWQgU2VyaWFsUG9ydDo6U2V0Rmxvd0NvbnRyb2woU2VyaWFsUG9ydDo6Rmxvd0NvbnRyb2wgZmxvd0NvbnRyb2wpDQorew0KKwlpZiAoIW1fY29uc29sZU1vZGVFbmFibGVkKQ0KKwl7DQorCQlWaVN0YXR1cyBsb2NhbFN0YXR1cyA9IHZpU2V0QXR0cmlidXRlIChtX3BvcnRIYW5kbGUsIFZJX0FUVFJfQVNSTF9GTE9XX0NOVFJMLCBmbG93Q29udHJvbCk7DQorCQl3cGlfc2V0RXJyb3IobG9jYWxTdGF0dXMpOw0KKwl9DQorfQ0KKw0KKy8qKg0KKyAqIEVuYWJsZSB0ZXJtaW5hdGlvbiBhbmQgc3BlY2lmeSB0aGUgdGVybWluYXRpb24gY2hhcmFjdGVyLg0KKyAqIA0KKyAqIFRlcm1pbmF0aW9uIGlzIGN1cnJlbnRseSBvbmx5IGltcGxlbWVudGVkIGZvciByZWNlaXZlLg0KKyAqIFdoZW4gdGhlIHRoZSB0ZXJtaW5hdG9yIGlzIHJlY2lldmVkLCB0aGUgUmVhZCgpIG9yIFNjYW5mKCkgd2lsbCByZXR1cm4NCisgKiAgIGZld2VyIGJ5dGVzIHRoYW4gcmVxdWVzdGVkLCBzdG9wcGluZyBhZnRlciB0aGUgdGVybWluYXRvci4NCisgKiANCisgKiBAcGFyYW0gdGVybWluYXRvciBUaGUgY2hhcmFjdGVyIHRvIHVzZSBmb3IgdGVybWluYXRpb24uDQorICovDQordm9pZCBTZXJpYWxQb3J0OjpFbmFibGVUZXJtaW5hdGlvbihjaGFyIHRlcm1pbmF0b3IpDQorew0KKwlpZiAoIW1fY29uc29sZU1vZGVFbmFibGVkKQ0KKwl7DQorCQl2aVNldEF0dHJpYnV0ZShtX3BvcnRIYW5kbGUsIFZJX0FUVFJfVEVSTUNIQVJfRU4sIFZJX1RSVUUpOyANCisJCXZpU2V0QXR0cmlidXRlKG1fcG9ydEhhbmRsZSwgVklfQVRUUl9URVJNQ0hBUiwgdGVybWluYXRvcik7DQorCQl2aVNldEF0dHJpYnV0ZShtX3BvcnRIYW5kbGUsIFZJX0FUVFJfQVNSTF9FTkRfSU4sIFZJX0FTUkxfRU5EX1RFUk1DSEFSKTsNCisJfQ0KK30NCisNCisvKioNCisgKiBEaXNhYmxlIHRlcm1pbmF0aW9uIGJlaGF2aW9yLg0KKyAqLw0KK3ZvaWQgU2VyaWFsUG9ydDo6RGlzYWJsZVRlcm1pbmF0aW9uKCkNCit7DQorCWlmICghbV9jb25zb2xlTW9kZUVuYWJsZWQpDQorCXsNCisJCXZpU2V0QXR0cmlidXRlKG1fcG9ydEhhbmRsZSwgVklfQVRUUl9URVJNQ0hBUl9FTiwgVklfRkFMU0UpOyANCisJCXZpU2V0QXR0cmlidXRlKG1fcG9ydEhhbmRsZSwgVklfQVRUUl9BU1JMX0VORF9JTiwgVklfQVNSTF9FTkRfTk9ORSk7DQorCX0NCit9DQorDQorLyoqDQorICogR2V0IHRoZSBudW1iZXIgb2YgYnl0ZXMgY3VycmVudGx5IGF2YWlsYWJsZSB0byByZWFkIGZyb20gdGhlIHNlcmlhbCBwb3J0Lg0KKyAqIA0KKyAqIEByZXR1cm4gVGhlIG51bWJlciBvZiBieXRlcyBhdmFpbGFibGUgdG8gcmVhZC4NCisgKi8NCitJTlQzMiBTZXJpYWxQb3J0OjpHZXRCeXRlc1JlY2VpdmVkKCkNCit7DQorCUlOVDMyIGJ5dGVzID0gMDsNCisJaWYgKCFtX2NvbnNvbGVNb2RlRW5hYmxlZCkNCisJew0KKwkJVmlTdGF0dXMgbG9jYWxTdGF0dXMgPSB2aUdldEF0dHJpYnV0ZShtX3BvcnRIYW5kbGUsIFZJX0FUVFJfQVNSTF9BVkFJTF9OVU0sICZieXRlcyk7DQorCQl3cGlfc2V0RXJyb3IobG9jYWxTdGF0dXMpOw0KKwl9DQorCXJldHVybiBieXRlczsNCit9DQorDQorLyoqDQorICogT3V0cHV0IGZvcm1hdHRlZCB0ZXh0IHRvIHRoZSBzZXJpYWwgcG9ydC4NCisgKiANCisgKiBAYnVnIEFsbCBwb2ludGVyLWJhc2VkIHBhcmFtZXRlcnMgc2VlbSB0byByZXR1cm4gYW4gZXJyb3IuDQorICogDQorICogQHBhcmFtIHdyaXRlRm10IEEgc3RyaW5nIHRoYXQgZGVmaW5lcyB0aGUgZm9ybWF0IG9mIHRoZSBvdXRwdXQuDQorICovDQordm9pZCBTZXJpYWxQb3J0OjpQcmludGYoY29uc3QgY2hhciAqd3JpdGVGbXQsIC4uLikNCit7DQorCWlmICghbV9jb25zb2xlTW9kZUVuYWJsZWQpDQorCXsNCisJCXZhX2xpc3QgYXJnczsNCisJCXZhX3N0YXJ0IChhcmdzLCB3cml0ZUZtdCk7DQorCQlWaVN0YXR1cyBsb2NhbFN0YXR1cyA9IHZpVlByaW50ZihtX3BvcnRIYW5kbGUsIChWaVN0cmluZyl3cml0ZUZtdCwgYXJncyk7DQorCQl2YV9lbmQgKGFyZ3MpOw0KKwkJd3BpX3NldEVycm9yKGxvY2FsU3RhdHVzKTsNCisJfQ0KK30NCisNCisvKioNCisgKiBJbnB1dCBmb3JtYXR0ZWQgdGV4dCBmcm9tIHRoZSBzZXJpYWwgcG9ydC4NCisgKiANCisgKiBAYnVnIEFsbCBwb2ludGVyLWJhc2VkIHBhcmFtZXRlcnMgc2VlbSB0byByZXR1cm4gYW4gZXJyb3IuDQorICogDQorICogQHBhcmFtIHJlYWRGbXQgQSBzdHJpbmcgdGhhdCBkZWZpbmVzIHRoZSBmb3JtYXQgb2YgdGhlIGlucHV0Lg0KKyAqLw0KK3ZvaWQgU2VyaWFsUG9ydDo6U2NhbmYoY29uc3QgY2hhciAqcmVhZEZtdCwgLi4uKQ0KK3sNCisJaWYgKCFtX2NvbnNvbGVNb2RlRW5hYmxlZCkNCisJew0KKwkJdmFfbGlzdCBhcmdzOw0KKwkJdmFfc3RhcnQgKGFyZ3MsIHJlYWRGbXQpOw0KKwkJVmlTdGF0dXMgbG9jYWxTdGF0dXMgPSB2aVZTY2FuZihtX3BvcnRIYW5kbGUsIChWaVN0cmluZylyZWFkRm10LCBhcmdzKTsNCisJCXZhX2VuZCAoYXJncyk7DQorCQl3cGlfc2V0RXJyb3IobG9jYWxTdGF0dXMpOw0KKwl9DQorfQ0KKw0KKy8qKg0KKyAqIFJlYWQgcmF3IGJ5dGVzIG91dCBvZiB0aGUgYnVmZmVyLg0KKyAqIA0KKyAqIEBwYXJhbSBidWZmZXIgUG9pbnRlciB0byB0aGUgYnVmZmVyIHRvIHN0b3JlIHRoZSBieXRlcyBpbi4NCisgKiBAcGFyYW0gY291bnQgVGhlIG1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIHRvIHJlYWQuDQorICogQHJldHVybiBUaGUgbnVtYmVyIG9mIGJ5dGVzIGFjdHVhbGx5IHJlYWQgaW50byB0aGUgYnVmZmVyLg0KKyAqLyANCitVSU5UMzIgU2VyaWFsUG9ydDo6UmVhZChjaGFyICpidWZmZXIsIElOVDMyIGNvdW50KQ0KK3sNCisJVUlOVDMyIHJldENvdW50ID0gMDsNCisJaWYgKCFtX2NvbnNvbGVNb2RlRW5hYmxlZCkNCisJew0KKwkJVmlTdGF0dXMgbG9jYWxTdGF0dXMgPSB2aUJ1ZlJlYWQobV9wb3J0SGFuZGxlLCAoVmlQQnVmKWJ1ZmZlciwgY291bnQsIChWaVBVSW50MzIpJnJldENvdW50KTsNCisJCXN3aXRjaCAobG9jYWxTdGF0dXMpDQorCQl7DQorCQljYXNlIFZJX1NVQ0NFU1NfVEVSTV9DSEFSOg0KKwkJY2FzZSBWSV9TVUNDRVNTX01BWF9DTlQ6DQorCQljYXNlIFZJX0VSUk9SX1RNTzogLy8gVGltZW91dA0KKwkJCWJyZWFrOw0KKwkJZGVmYXVsdDoNCisJCQl3cGlfc2V0RXJyb3IobG9jYWxTdGF0dXMpOw0KKwkJfQ0KKwl9DQorCXJldHVybiByZXRDb3VudDsNCit9DQorDQorLyoqDQorICogV3JpdGUgcmF3IGJ5dGVzIHRvIHRoZSBidWZmZXIuDQorICogDQorICogQHBhcmFtIGJ1ZmZlciBQb2ludGVyIHRvIHRoZSBidWZmZXIgdG8gcmVhZCB0aGUgYnl0ZXMgZnJvbS4NCisgKiBAcGFyYW0gY291bnQgVGhlIG1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIHRvIHdyaXRlLg0KKyAqIEByZXR1cm4gVGhlIG51bWJlciBvZiBieXRlcyBhY3R1YWxseSB3cml0dGVuIGludG8gdGhlIHBvcnQuDQorICovIA0KK1VJTlQzMiBTZXJpYWxQb3J0OjpXcml0ZShjb25zdCBjaGFyICpidWZmZXIsIElOVDMyIGNvdW50KQ0KK3sNCisJVUlOVDMyIHJldENvdW50ID0gMDsNCisJaWYgKCFtX2NvbnNvbGVNb2RlRW5hYmxlZCkNCisJew0KKwkJVmlTdGF0dXMgbG9jYWxTdGF0dXMgPSB2aUJ1ZldyaXRlKG1fcG9ydEhhbmRsZSwgKFZpUEJ1ZilidWZmZXIsIGNvdW50LCAoVmlQVUludDMyKSZyZXRDb3VudCk7DQorCQl3cGlfc2V0RXJyb3IobG9jYWxTdGF0dXMpOw0KKwl9DQorCXJldHVybiByZXRDb3VudDsNCit9DQorDQorLyoqDQorICogQ29uZmlndXJlIHRoZSB0aW1lb3V0IG9mIHRoZSBzZXJpYWwgcG9ydC4NCisgKiANCisgKiBUaGlzIGRlZmluZXMgdGhlIHRpbWVvdXQgZm9yIHRyYW5zYWN0aW9ucyB3aXRoIHRoZSBoYXJkd2FyZS4NCisgKiBJdCB3aWxsIGFmZmVjdCByZWFkcyBhbmQgdmVyeSBsYXJnZSB3cml0ZXMuDQorICogDQorICogQHBhcmFtIHRpbWVvdXQgVGhlIG51bWJlciBvZiBzZWNvbmRzIHRvIHRvIHdhaXQgZm9yIEkvTy4NCisgKi8NCit2b2lkIFNlcmlhbFBvcnQ6OlNldFRpbWVvdXQoZmxvYXQgdGltZW91dCkNCit7DQorCWlmICghbV9jb25zb2xlTW9kZUVuYWJsZWQpDQorCXsNCisJCVZpU3RhdHVzIGxvY2FsU3RhdHVzID0gdmlTZXRBdHRyaWJ1dGUobV9wb3J0SGFuZGxlLCBWSV9BVFRSX1RNT19WQUxVRSwgKFVJTlQzMikodGltZW91dCAqIDFlMykpOw0KKwkJd3BpX3NldEVycm9yKGxvY2FsU3RhdHVzKTsNCisJfQ0KK30NCisNCisvKioNCisgKiBTcGVjaWZ5IHRoZSBzaXplIG9mIHRoZSBpbnB1dCBidWZmZXIuDQorICogDQorICogU3BlY2lmeSB0aGUgYW1vdW50IG9mIGRhdGEgdGhhdCBjYW4gYmUgc3RvcmVkIGJlZm9yZSBkYXRhDQorICogZnJvbSB0aGUgZGV2aWNlIGlzIHJldHVybmVkIHRvIFJlYWQgb3IgU2NhbmYuICBJZiB5b3Ugd2FudA0KKyAqIGRhdGEgdGhhdCBpcyByZWNpZXZlZCB0byBiZSByZXR1cm5lZCBpbW1lZGlhdGVseSwgc2V0IHRoaXMgdG8gMS4NCisgKiANCisgKiBJdCB0aGUgYnVmZmVyIGlzIG5vdCBmaWxsZWQgYmVmb3JlIHRoZSByZWFkIHRpbWVvdXQgZXhwaXJlcywgYWxsDQorICogZGF0YSB0aGF0IGhhcyBiZWVuIHJlY2VpdmVkIHNvIGZhciB3aWxsIGJlIHJldHVybmVkLg0KKyAqIA0KKyAqIEBwYXJhbSBzaXplIFRoZSByZWFkIGJ1ZmZlciBzaXplLg0KKyAqLw0KK3ZvaWQgU2VyaWFsUG9ydDo6U2V0UmVhZEJ1ZmZlclNpemUoVUlOVDMyIHNpemUpDQorew0KKwlpZiAoIW1fY29uc29sZU1vZGVFbmFibGVkKQ0KKwl7DQorCQlWaVN0YXR1cyBsb2NhbFN0YXR1cyA9IHZpU2V0QnVmKG1fcG9ydEhhbmRsZSwgVklfUkVBRF9CVUYsIHNpemUpOw0KKwkJd3BpX3NldEVycm9yKGxvY2FsU3RhdHVzKTsNCisJfQ0KK30NCisNCisvKioNCisgKiBTcGVjaWZ5IHRoZSBzaXplIG9mIHRoZSBvdXRwdXQgYnVmZmVyLg0KKyAqIA0KKyAqIFNwZWNpZnkgdGhlIGFtb3VudCBvZiBkYXRhIHRoYXQgY2FuIGJlIHN0b3JlZCBiZWZvcmUgYmVpbmcNCisgKiB0cmFuc21pdHRlZCB0byB0aGUgZGV2aWNlLg0KKyAqIA0KKyAqIEBwYXJhbSBzaXplIFRoZSB3cml0ZSBidWZmZXIgc2l6ZS4NCisgKi8NCit2b2lkIFNlcmlhbFBvcnQ6OlNldFdyaXRlQnVmZmVyU2l6ZShVSU5UMzIgc2l6ZSkNCit7DQorCWlmICghbV9jb25zb2xlTW9kZUVuYWJsZWQpDQorCXsNCisJCVZpU3RhdHVzIGxvY2FsU3RhdHVzID0gdmlTZXRCdWYobV9wb3J0SGFuZGxlLCBWSV9XUklURV9CVUYsIHNpemUpOw0KKwkJd3BpX3NldEVycm9yKGxvY2FsU3RhdHVzKTsNCisJfQ0KK30NCisNCisvKioNCisgKiBTcGVjaWZ5IHRoZSBmbHVzaGluZyBiZWhhdmlvciBvZiB0aGUgb3V0cHV0IGJ1ZmZlci4NCisgKiANCisgKiBXaGVuIHNldCB0byBrRmx1c2hPbkFjY2VzcywgZGF0YSBpcyBzeW5jaHJvbm91c2x5IHdyaXR0ZW4gdG8gdGhlIHNlcmlhbCBwb3J0DQorICogICBhZnRlciBlYWNoIGNhbGwgdG8gZWl0aGVyIFByaW50ZigpIG9yIFdyaXRlKCkuDQorICogDQorICogV2hlbiBzZXQgdG8ga0ZsdXNoV2hlbkZ1bGwsIGRhdGEgd2lsbCBvbmx5IGJlIHdyaXR0ZW4gdG8gdGhlIHNlcmlhbCBwb3J0IHdoZW4NCisgKiAgIHRoZSBidWZmZXIgaXMgZnVsbCBvciB3aGVuIEZsdXNoKCkgaXMgY2FsbGVkLg0KKyAqIA0KKyAqIEBwYXJhbSBtb2RlIFRoZSB3cml0ZSBidWZmZXIgbW9kZS4NCisgKi8NCit2b2lkIFNlcmlhbFBvcnQ6OlNldFdyaXRlQnVmZmVyTW9kZShTZXJpYWxQb3J0OjpXcml0ZUJ1ZmZlck1vZGUgbW9kZSkNCit7DQorCWlmICghbV9jb25zb2xlTW9kZUVuYWJsZWQpDQorCXsNCisJCVZpU3RhdHVzIGxvY2FsU3RhdHVzID0gdmlTZXRBdHRyaWJ1dGUobV9wb3J0SGFuZGxlLCBWSV9BVFRSX1dSX0JVRl9PUEVSX01PREUsIG1vZGUpOw0KKwkJd3BpX3NldEVycm9yKGxvY2FsU3RhdHVzKTsNCisJfQ0KK30NCisNCisvKioNCisgKiBGb3JjZSB0aGUgb3V0cHV0IGJ1ZmZlciB0byBiZSB3cml0dGVuIHRvIHRoZSBwb3J0Lg0KKyAqIA0KKyAqIFRoaXMgaXMgdXNlZCB3aGVuIFNldFdyaXRlQnVmZmVyTW9kZSgpIGlzIHNldCB0byBrRmx1c2hXaGVuRnVsbCB0byBmb3JjZSBhDQorICogZmx1c2ggYmVmb3JlIHRoZSBidWZmZXIgaXMgZnVsbC4NCisgKi8NCit2b2lkIFNlcmlhbFBvcnQ6OkZsdXNoKCkNCit7DQorCWlmICghbV9jb25zb2xlTW9kZUVuYWJsZWQpDQorCXsNCisJCVZpU3RhdHVzIGxvY2FsU3RhdHVzID0gdmlGbHVzaChtX3BvcnRIYW5kbGUsIFZJX1dSSVRFX0JVRik7DQorCQl3cGlfc2V0RXJyb3IobG9jYWxTdGF0dXMpOw0KKwl9DQorfQ0KKw0KKy8qKg0KKyAqIFJlc2V0IHRoZSBzZXJpYWwgcG9ydCBkcml2ZXIgdG8gYSBrbm93biBzdGF0ZS4NCisgKiANCisgKiBFbXB0eSB0aGUgdHJhbnNtaXQgYW5kIHJlY2VpdmUgYnVmZmVycyBpbiB0aGUgZGV2aWNlIGFuZCBmb3JtYXR0ZWQgSS9PLg0KKyAqLw0KK3ZvaWQgU2VyaWFsUG9ydDo6UmVzZXQoKQ0KK3sNCisJaWYgKCFtX2NvbnNvbGVNb2RlRW5hYmxlZCkNCisJew0KKwkJVmlTdGF0dXMgbG9jYWxTdGF0dXMgPSB2aUNsZWFyKG1fcG9ydEhhbmRsZSk7DQorCQl3cGlfc2V0RXJyb3IobG9jYWxTdGF0dXMpOw0KKwl9DQorfQ0KKw0KKy8vdm9pZCBTZXJpYWxQb3J0OjpfaW50ZXJuYWxIYW5kbGVyKFVJTlQzMiBwb3J0LCBVSU5UMzIgZXZlbnRUeXBlLCBVSU5UMzIgZXZlbnQpDQorLy97DQorLy99DQorDQorLy9WaVN0YXR1cyBfVklfRlVOQ0ggaW9Db21wbGV0ZUhhbmRsZXIgKFZpU2Vzc2lvbiB2aSwgVmlFdmVudFR5cGUgZXZlbnRUeXBlLCBWaUV2ZW50IGV2ZW50LCBWaUFkZHIgdXNlckhhbmRsZSkNCisvL3sNCisvLwkoKFNlcmlhbFBvcnQqKSB1c2VySGFuZGxlKS0+X2ludGVybmFsSGFuZGxlcih2aSwgZXZlbnRUeXBlLCBldmVudCk7DQorLy8JcmV0dXJuIFZJX1NVQ0NFU1M7DQorLy99DQorDQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvU2VyaWFsUG9ydC5oIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvU2VyaWFsUG9ydC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5Mjc3MWUKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9TZXJpYWxQb3J0LmgKQEAgLTAsMCArMSw2MSBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBDb3B5cmlnaHQgKGMpIEZJUlNUIDIwMDguIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCQkJCQkJCSAgKi8NCisvKiBPcGVuIFNvdXJjZSBTb2Z0d2FyZSAtIG1heSBiZSBtb2RpZmllZCBhbmQgc2hhcmVkIGJ5IEZSQyB0ZWFtcy4gVGhlIGNvZGUgICAqLw0KKy8qIG11c3QgYmUgYWNjb21wYW5pZWQgYnkgdGhlIEZJUlNUIEJTRCBsaWNlbnNlIGZpbGUgaW4gJChXSU5EX0JBU0UpL1dQSUxpYi4gICovDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisjaWZuZGVmIF9fU2VyaWFsUG9ydF9oX18NCisjZGVmaW5lIF9fU2VyaWFsUG9ydF9oX18NCisNCisjaW5jbHVkZSAiRXJyb3JCYXNlLmgiDQorI2luY2x1ZGUgPHZ4V29ya3MuaD4NCisNCisvKioNCisgKiBEcml2ZXIgZm9yIHRoZSBSUy0yMzIgc2VyaWFsIHBvcnQgb24gdGhlIGNSSU8uDQorICogDQorICogVGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gdXNlcyB0aGUgVklTQSBmb3JtYXR0ZWQgSS9PIG1vZGUuICBUaGlzIG1lYW5zIHRoYXQNCisgKiAgIGFsbCB0cmFmZmljIGdvZXMgdGhyb3VnaCB0aGUgZm9tYXR0ZWQgYnVmZmVycy4gIFRoaXMgYWxsb3dzIHRoZSBpbnRlcm1pbmdsZWQNCisgKiAgIHVzZSBvZiBQcmludGYoKSwgU2NhbmYoKSwgYW5kIHRoZSByYXcgYnVmZmVyIGFjY2Vzc29ycyBSZWFkKCkgYW5kIFdyaXRlKCkuDQorICogDQorICogTW9yZSBpbmZvcm1hdGlvbiBjYW4gYmUgZm91bmQgaW4gdGhlIE5JLVZJU0EgVXNlciBNYW51YWwgaGVyZToNCisgKiAgIGh0dHA6Ly93d3cubmkuY29tL3BkZi9tYW51YWxzLzM3MDQyM2EucGRmDQorICogYW5kIHRoZSBOSS1WSVNBIFByb2dyYW1tZXIncyBSZWZlcmVuY2UgTWFudWFsIGhlcmU6DQorICogICBodHRwOi8vd3d3Lm5pLmNvbS9wZGYvbWFudWFscy8zNzAxMzJjLnBkZg0KKyAqLw0KK2NsYXNzIFNlcmlhbFBvcnQgOiBwdWJsaWMgRXJyb3JCYXNlDQorew0KK3B1YmxpYzoNCisJdHlwZWRlZiBlbnVtIHtrUGFyaXR5X05vbmU9MCwga1Bhcml0eV9PZGQ9MSwga1Bhcml0eV9FdmVuPTIsIGtQYXJpdHlfTWFyaz0zLCBrUGFyaXR5X1NwYWNlPTR9IFBhcml0eTsNCisJdHlwZWRlZiBlbnVtIHtrU3RvcEJpdHNfT25lPTEwLCBrU3RvcEJpdHNfT25lUG9pbnRGaXZlPTE1LCBrU3RvcEJpdHNfVHdvPTIwfSBTdG9wQml0czsNCisJdHlwZWRlZiBlbnVtIHtrRmxvd0NvbnRyb2xfTm9uZT0wLCBrRmxvd0NvbnRyb2xfWG9uWG9mZj0xLCBrRmxvd0NvbnRyb2xfUnRzQ3RzPTIsIGtGbG93Q29udHJvbF9EdHJEc3I9NH0gRmxvd0NvbnRyb2w7DQorCXR5cGVkZWYgZW51bSB7a0ZsdXNoT25BY2Nlc3M9MSwga0ZsdXNoV2hlbkZ1bGw9Mn0gV3JpdGVCdWZmZXJNb2RlOw0KKw0KKwlTZXJpYWxQb3J0KFVJTlQzMiBiYXVkUmF0ZSwgVUlOVDggZGF0YUJpdHMgPSA4LCBQYXJpdHkgcGFyaXR5ID0ga1Bhcml0eV9Ob25lLCBTdG9wQml0cyBzdG9wQml0cyA9IGtTdG9wQml0c19PbmUpOw0KKwl+U2VyaWFsUG9ydCgpOw0KKwl2b2lkIFNldEZsb3dDb250cm9sKEZsb3dDb250cm9sIGZsb3dDb250cm9sKTsNCisJdm9pZCBFbmFibGVUZXJtaW5hdGlvbihjaGFyIHRlcm1pbmF0b3IgPSAnXG4nKTsNCisJdm9pZCBEaXNhYmxlVGVybWluYXRpb24oKTsNCisJSU5UMzIgR2V0Qnl0ZXNSZWNlaXZlZCgpOw0KKwl2b2lkIFByaW50Zihjb25zdCBjaGFyICp3cml0ZUZtdCwgLi4uKTsNCisJdm9pZCBTY2FuZihjb25zdCBjaGFyICpyZWFkRm10LCAuLi4pOw0KKwlVSU5UMzIgUmVhZChjaGFyICpidWZmZXIsIElOVDMyIGNvdW50KTsNCisJVUlOVDMyIFdyaXRlKGNvbnN0IGNoYXIgKmJ1ZmZlciwgSU5UMzIgY291bnQpOw0KKwl2b2lkIFNldFRpbWVvdXQoZmxvYXQgdGltZW91dCk7DQorCXZvaWQgU2V0UmVhZEJ1ZmZlclNpemUoVUlOVDMyIHNpemUpOw0KKwl2b2lkIFNldFdyaXRlQnVmZmVyU2l6ZShVSU5UMzIgc2l6ZSk7DQorCXZvaWQgU2V0V3JpdGVCdWZmZXJNb2RlKFdyaXRlQnVmZmVyTW9kZSBtb2RlKTsNCisJdm9pZCBGbHVzaCgpOw0KKwl2b2lkIFJlc2V0KCk7DQorDQorCS8qDQorCSAqIERvIG5vdCBjYWxsIG1lIQ0KKwkgKi8NCisJLy92b2lkIF9pbnRlcm5hbEhhbmRsZXIoVUlOVDMyIHBvcnQsIFVJTlQzMiBldmVudFR5cGUsIFVJTlQzMiBldmVudCk7DQorcHJpdmF0ZToNCisJVUlOVDMyIG1fcmVzb3VyY2VNYW5hZ2VySGFuZGxlOw0KKwlVSU5UMzIgbV9wb3J0SGFuZGxlOw0KKwlib29sIG1fY29uc29sZU1vZGVFbmFibGVkOw0KKwlESVNBTExPV19DT1BZX0FORF9BU1NJR04oU2VyaWFsUG9ydCk7DQorfTsNCisNCisjZW5kaWYNCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9TZXJ2by5jcHAgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9TZXJ2by5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGFjYjBkNwotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL1NlcnZvLmNwcApAQCAtMCwwICsxLDE1NyBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBDb3B5cmlnaHQgKGMpIEZJUlNUIDIwMDguIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCQkJCQkJCSAgKi8NCisvKiBPcGVuIFNvdXJjZSBTb2Z0d2FyZSAtIG1heSBiZSBtb2RpZmllZCBhbmQgc2hhcmVkIGJ5IEZSQyB0ZWFtcy4gVGhlIGNvZGUgICAqLw0KKy8qIG11c3QgYmUgYWNjb21wYW5pZWQgYnkgdGhlIEZJUlNUIEJTRCBsaWNlbnNlIGZpbGUgaW4gJChXSU5EX0JBU0UpL1dQSUxpYi4gICovDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisjaW5jbHVkZSAiU2Vydm8uaCINCisNCisjaW5jbHVkZSAiTmV0d29ya0NvbW11bmljYXRpb24vVXNhZ2VSZXBvcnRpbmcuaCINCisjaW5jbHVkZSAiTGl2ZVdpbmRvdy9MaXZlV2luZG93LmgiDQorDQorY29uc3QgZmxvYXQgU2Vydm86OmtNYXhTZXJ2b0FuZ2xlOw0KK2NvbnN0IGZsb2F0IFNlcnZvOjprTWluU2Vydm9BbmdsZTsNCisNCisvKioNCisgKiBDb21tb24gaW5pdGlhbGl6YXRpb24gY29kZSBjYWxsZWQgYnkgYWxsIGNvbnN0cnVjdG9ycy4NCisgKg0KKyAqIEluaXRTZXJ2bygpIGFzc2lnbnMgZGVmYXVsdHMgZm9yIHRoZSBwZXJpb2QgbXVsdGlwbGllciBmb3IgdGhlIHNlcnZvIFBXTSBjb250cm9sIHNpZ25hbCwgYXMNCisgKiB3ZWxsIGFzIHRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIFBXTSB2YWx1ZXMgc3VwcG9ydGVkIGJ5IHRoZSBzZXJ2by4NCisgKi8NCit2b2lkIFNlcnZvOjpJbml0U2Vydm8oKQ0KK3sNCisJLy8gVE9ETzogY29tcHV0ZSB0aGUgYXBwcm9wcmlhdGUgdmFsdWVzIGJhc2VkIG9uIGRpZ2l0YWwgbG9vcCB0aW1pbmcNCisJU2V0Qm91bmRzKDI0NSwgMCwgMCwgMCwgMTEpOw0KKwlTZXRQZXJpb2RNdWx0aXBsaWVyKGtQZXJpb2RNdWx0aXBsaWVyXzRYKTsNCisNCisNCisJTGl2ZVdpbmRvdzo6R2V0SW5zdGFuY2UoKS0+QWRkQWN0dWF0b3IoIlNlcnZvIiwgR2V0TW9kdWxlTnVtYmVyKCksIEdldENoYW5uZWwoKSwgdGhpcyk7DQorCW5Vc2FnZVJlcG9ydGluZzo6cmVwb3J0KG5Vc2FnZVJlcG9ydGluZzo6a1Jlc291cmNlVHlwZV9TZXJ2bywgR2V0Q2hhbm5lbCgpLCBHZXRNb2R1bGVOdW1iZXIoKSAtIDEpOw0KK30NCisNCisvKioNCisgKiBDb25zdHJ1Y3RvciB0aGF0IGFzc3VtZXMgdGhlIGRlZmF1bHQgZGlnaXRhbCBtb2R1bGUuDQorICoNCisgKiBAcGFyYW0gY2hhbm5lbCBUaGUgUFdNIGNoYW5uZWwgb24gdGhlIGRpZ2l0YWwgbW9kdWxlIHRvIHdoaWNoIHRoZSBzZXJ2byBpcyBhdHRhY2hlZC4NCisgKi8NCitTZXJ2bzo6U2Vydm8oVUlOVDMyIGNoYW5uZWwpIDogU2FmZVBXTShjaGFubmVsKQ0KK3sNCisJSW5pdFNlcnZvKCk7DQorfQ0KKw0KKy8qKg0KKyAqIENvbnN0cnVjdG9yIHRoYXQgc3BlY2lmaWVzIHRoZSBkaWdpdGFsIG1vZHVsZS4NCisgKg0KKyAqIEBwYXJhbSBtb2R1bGVOdW1iZXIgVGhlIGRpZ2l0YWwgbW9kdWxlICgxIG9yIDIpLg0KKyAqIEBwYXJhbSBjaGFubmVsIFRoZSBQV00gY2hhbm5lbCBvbiB0aGUgZGlnaXRhbCBtb2R1bGUgdG8gd2hpY2ggdGhlIHNlcnZvIGlzIGF0dGFjaGVkICgxLi4xMCkuDQorICovDQorU2Vydm86OlNlcnZvKFVJTlQ4IG1vZHVsZU51bWJlciwgVUlOVDMyIGNoYW5uZWwpIDogU2FmZVBXTShtb2R1bGVOdW1iZXIsIGNoYW5uZWwpDQorew0KKwlJbml0U2Vydm8oKTsNCit9DQorDQorU2Vydm86On5TZXJ2bygpDQorew0KK30NCisNCisvKioNCisgKiBTZXQgdGhlIHNlcnZvIHBvc2l0aW9uLg0KKyAqDQorICogU2Vydm8gdmFsdWVzIHJhbmdlIGZyb20gMC4wIHRvIDEuMCBjb3JyZXNwb25kaW5nIHRvIHRoZSByYW5nZSBvZiBmdWxsIGxlZnQgdG8gZnVsbCByaWdodC4NCisgKg0KKyAqIEBwYXJhbSB2YWx1ZSBQb3NpdGlvbiBmcm9tIDAuMCB0byAxLjAuDQorICovDQordm9pZCBTZXJ2bzo6U2V0KGZsb2F0IHZhbHVlKQ0KK3sNCisJU2V0UG9zaXRpb24odmFsdWUpOw0KK30NCisNCisvKioNCisgKiBTZXQgdGhlIHNlcnZvIHRvIG9mZmxpbmUuDQorICogDQorICogU2V0IHRoZSBzZXJ2byByYXcgdmFsdWUgdG8gMCAodW5kcml2ZW4pDQorICovDQordm9pZCBTZXJ2bzo6U2V0T2ZmbGluZSgpIHsNCisJU2V0UmF3KDApOw0KK30NCisNCisvKioNCisgKiBHZXQgdGhlIHNlcnZvIHBvc2l0aW9uLg0KKyAqDQorICogU2Vydm8gdmFsdWVzIHJhbmdlIGZyb20gMC4wIHRvIDEuMCBjb3JyZXNwb25kaW5nIHRvIHRoZSByYW5nZSBvZiBmdWxsIGxlZnQgdG8gZnVsbCByaWdodC4NCisgKg0KKyAqIEByZXR1cm4gUG9zaXRpb24gZnJvbSAwLjAgdG8gMS4wLg0KKyAqLw0KK2Zsb2F0IFNlcnZvOjpHZXQoKQ0KK3sNCisJcmV0dXJuIEdldFBvc2l0aW9uKCk7DQorfQ0KKw0KKy8qKg0KKyAqIFNldCB0aGUgc2Vydm8gYW5nbGUuDQorICoNCisgKiBBc3N1bWUgdGhhdCB0aGUgc2Vydm8gYW5nbGUgaXMgbGluZWFyIHdpdGggcmVzcGVjdCB0byB0aGUgUFdNIHZhbHVlIChiaWcgYXNzdW1wdGlvbiwgbmVlZCB0byB0ZXN0KS4NCisgKg0KKyAqIFNlcnZvIGFuZ2xlcyB0aGF0IGFyZSBvdXQgb2YgdGhlIHN1cHBvcnRlZCByYW5nZSBvZiB0aGUgc2Vydm8gc2ltcGx5ICJzYXR1cmF0ZSIgaW4gdGhhdCBkaXJlY3Rpb24NCisgKiBJbiBvdGhlciB3b3JkcywgaWYgdGhlIHNlcnZvIGhhcyBhIHJhbmdlIG9mIChYIGRlZ3JlZXMgdG8gWSBkZWdyZWVzKSB0aGFuIGFuZ2xlcyBvZiBsZXNzIHRoYW4gWA0KKyAqIHJlc3VsdCBpbiBhbiBhbmdsZSBvZiBYIGJlaW5nIHNldCBhbmQgYW5nbGVzIG9mIG1vcmUgdGhhbiBZIGRlZ3JlZXMgcmVzdWx0IGluIGFuIGFuZ2xlIG9mIFkgYmVpbmcgc2V0Lg0KKyAqDQorICogQHBhcmFtIGRlZ3JlZXMgVGhlIGFuZ2xlIGluIGRlZ3JlZXMgdG8gc2V0IHRoZSBzZXJ2by4NCisgKi8NCit2b2lkIFNlcnZvOjpTZXRBbmdsZShmbG9hdCBkZWdyZWVzKQ0KK3sNCisJaWYgKGRlZ3JlZXMgPCBrTWluU2Vydm9BbmdsZSkNCisJew0KKwkJZGVncmVlcyA9IGtNaW5TZXJ2b0FuZ2xlOw0KKwl9DQorCWVsc2UgaWYgKGRlZ3JlZXMgPiBrTWF4U2Vydm9BbmdsZSkNCisJew0KKwkJZGVncmVlcyA9IGtNYXhTZXJ2b0FuZ2xlOw0KKwl9DQorDQorCVNldFBvc2l0aW9uKCgoZmxvYXQpIChkZWdyZWVzIC0ga01pblNlcnZvQW5nbGUpKSAvIEdldFNlcnZvQW5nbGVSYW5nZSgpKTsNCit9DQorDQorLyoqDQorICogR2V0IHRoZSBzZXJ2byBhbmdsZS4NCisgKg0KKyAqIEFzc3VtZSB0aGF0IHRoZSBzZXJ2byBhbmdsZSBpcyBsaW5lYXIgd2l0aCByZXNwZWN0IHRvIHRoZSBQV00gdmFsdWUgKGJpZyBhc3N1bXB0aW9uLCBuZWVkIHRvIHRlc3QpLg0KKyAqIEByZXR1cm4gVGhlIGFuZ2xlIGluIGRlZ3JlZXMgdG8gd2hpY2ggdGhlIHNlcnZvIGlzIHNldC4NCisgKi8NCitmbG9hdCBTZXJ2bzo6R2V0QW5nbGUoKQ0KK3sNCisJcmV0dXJuIChmbG9hdClHZXRQb3NpdGlvbigpICogR2V0U2Vydm9BbmdsZVJhbmdlKCkgKyBrTWluU2Vydm9BbmdsZTsNCit9DQorDQordm9pZCBTZXJ2bzo6VmFsdWVDaGFuZ2VkKElUYWJsZSogc291cmNlLCBjb25zdCBzdGQ6OnN0cmluZyYga2V5LCBFbnRyeVZhbHVlIHZhbHVlLCBib29sIGlzTmV3KSB7DQorCVNldCh2YWx1ZS5mKTsNCit9DQorDQordm9pZCBTZXJ2bzo6VXBkYXRlVGFibGUoKSB7DQorCWlmIChtX3RhYmxlICE9IE5VTEwpIHsNCisJCW1fdGFibGUtPlB1dE51bWJlcigiVmFsdWUiLCBHZXQoKSk7DQorCX0NCit9DQorDQordm9pZCBTZXJ2bzo6U3RhcnRMaXZlV2luZG93TW9kZSgpIHsNCisJbV90YWJsZS0+QWRkVGFibGVMaXN0ZW5lcigiVmFsdWUiLCB0aGlzLCB0cnVlKTsNCit9DQorDQordm9pZCBTZXJ2bzo6U3RvcExpdmVXaW5kb3dNb2RlKCkgew0KKwltX3RhYmxlLT5SZW1vdmVUYWJsZUxpc3RlbmVyKHRoaXMpOw0KK30NCisNCitzdGQ6OnN0cmluZyBTZXJ2bzo6R2V0U21hcnREYXNoYm9hcmRUeXBlKCkgew0KKwlyZXR1cm4gIlNlcnZvIjsNCit9DQorDQordm9pZCBTZXJ2bzo6SW5pdFRhYmxlKElUYWJsZSAqc3ViVGFibGUpIHsNCisJbV90YWJsZSA9IHN1YlRhYmxlOw0KKwlVcGRhdGVUYWJsZSgpOw0KK30NCisNCitJVGFibGUgKiBTZXJ2bzo6R2V0VGFibGUoKSB7DQorCXJldHVybiBtX3RhYmxlOw0KK30NCisNCisNCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9TZXJ2by5oIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvU2Vydm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZWMxNTg5Ci0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvU2Vydm8uaApAQCAtMCwwICsxLDUyIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy8qIENvcHlyaWdodCAoYykgRklSU1QgMjAwOC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4JCQkJCQkJICAqLw0KKy8qIE9wZW4gU291cmNlIFNvZnR3YXJlIC0gbWF5IGJlIG1vZGlmaWVkIGFuZCBzaGFyZWQgYnkgRlJDIHRlYW1zLiBUaGUgY29kZSAgICovDQorLyogbXVzdCBiZSBhY2NvbXBhbmllZCBieSB0aGUgRklSU1QgQlNEIGxpY2Vuc2UgZmlsZSBpbiAkKFdJTkRfQkFTRSkvV1BJTGliLiAgKi8NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKyNpZm5kZWYgU0VSVk9fSA0KKyNkZWZpbmUgU0VSVk9fSA0KKw0KKyNpbmNsdWRlICJTYWZlUFdNLmgiDQorI2luY2x1ZGUgIlNwZWVkQ29udHJvbGxlci5oIg0KKw0KKy8qKg0KKyAqIFN0YW5kYXJkIGhvYmJ5IHN0eWxlIHNlcnZvLg0KKyAqIA0KKyAqIFRoZSByYW5nZSBwYXJhbWV0ZXJzIGRlZmF1bHQgdG8gdGhlIGFwcHJvcHJpYXRlIHZhbHVlcyBmb3IgdGhlIEhpdGVjIEhTLTMyMkhEIHNlcnZvIHByb3ZpZGVkDQorICogaW4gdGhlIEZJUlNUIEtpdCBvZiBQYXJ0cyBpbiAyMDA4Lg0KKyAqLw0KK2NsYXNzIFNlcnZvIDogcHVibGljIFNhZmVQV00NCit7DQorcHVibGljOg0KKwlleHBsaWNpdCBTZXJ2byhVSU5UMzIgY2hhbm5lbCk7DQorCVNlcnZvKFVJTlQ4IG1vZHVsZU51bWJlciwgVUlOVDMyIGNoYW5uZWwpOw0KKwl2aXJ0dWFsIH5TZXJ2bygpOw0KKwl2b2lkIFNldChmbG9hdCB2YWx1ZSk7DQorCXZvaWQgU2V0T2ZmbGluZSgpOw0KKwlmbG9hdCBHZXQoKTsNCisJdm9pZCBTZXRBbmdsZShmbG9hdCBhbmdsZSk7DQorCWZsb2F0IEdldEFuZ2xlKCk7DQorCXN0YXRpYyBmbG9hdCBHZXRNYXhBbmdsZSgpIHsgcmV0dXJuIGtNYXhTZXJ2b0FuZ2xlOyB9Ow0KKwlzdGF0aWMgZmxvYXQgR2V0TWluQW5nbGUoKSB7IHJldHVybiBrTWluU2Vydm9BbmdsZTsgfTsNCisJDQorCXZvaWQgVmFsdWVDaGFuZ2VkKElUYWJsZSogc291cmNlLCBjb25zdCBzdGQ6OnN0cmluZyYga2V5LCBFbnRyeVZhbHVlIHZhbHVlLCBib29sIGlzTmV3KTsNCisJdm9pZCBVcGRhdGVUYWJsZSgpOw0KKwl2b2lkIFN0YXJ0TGl2ZVdpbmRvd01vZGUoKTsNCisJdm9pZCBTdG9wTGl2ZVdpbmRvd01vZGUoKTsNCisJc3RkOjpzdHJpbmcgR2V0U21hcnREYXNoYm9hcmRUeXBlKCk7DQorCXZvaWQgSW5pdFRhYmxlKElUYWJsZSAqc3ViVGFibGUpOw0KKwlJVGFibGUgKiBHZXRUYWJsZSgpOw0KKwkNCisJSVRhYmxlICptX3RhYmxlOw0KKw0KK3ByaXZhdGU6DQorCXZvaWQgSW5pdFNlcnZvKCk7DQorCWZsb2F0IEdldFNlcnZvQW5nbGVSYW5nZSgpIHtyZXR1cm4ga01heFNlcnZvQW5nbGUgLSBrTWluU2Vydm9BbmdsZTt9DQorDQorCXN0YXRpYyBjb25zdCBmbG9hdCBrTWF4U2Vydm9BbmdsZSA9IDE3MC4wOw0KKwlzdGF0aWMgY29uc3QgZmxvYXQga01pblNlcnZvQW5nbGUgPSAwLjA7DQorfTsNCisNCisjZW5kaWYNCisNCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9TaW1wbGVSb2JvdC5jcHAgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9TaW1wbGVSb2JvdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2JlN2Y4YQotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL1NpbXBsZVJvYm90LmNwcApAQCAtMCwwICsxLDE1MiBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBDb3B5cmlnaHQgKGMpIEZJUlNUIDIwMDguIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCQkJCQkJCSAgKi8NCisvKiBPcGVuIFNvdXJjZSBTb2Z0d2FyZSAtIG1heSBiZSBtb2RpZmllZCBhbmQgc2hhcmVkIGJ5IEZSQyB0ZWFtcy4gVGhlIGNvZGUgICAqLw0KKy8qIG11c3QgYmUgYWNjb21wYW5pZWQgYnkgdGhlIEZJUlNUIEJTRCBsaWNlbnNlIGZpbGUgaW4gJChXSU5EX0JBU0UpL1dQSUxpYi4gICovDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisjaW5jbHVkZSAiU2ltcGxlUm9ib3QuaCINCisNCisjaW5jbHVkZSAiRHJpdmVyU3RhdGlvbi5oIg0KKyNpbmNsdWRlICJOZXR3b3JrQ29tbXVuaWNhdGlvbi9Vc2FnZVJlcG9ydGluZy5oIg0KKyNpbmNsdWRlICJUaW1lci5oIg0KKyNpbmNsdWRlICJTbWFydERhc2hib2FyZC9TbWFydERhc2hib2FyZC5oIg0KKyNpbmNsdWRlICJMaXZlV2luZG93L0xpdmVXaW5kb3cuaCINCisjaW5jbHVkZSAibmV0d29ya3RhYmxlcy9OZXR3b3JrVGFibGUuaCINCisNCitTaW1wbGVSb2JvdDo6U2ltcGxlUm9ib3QoKQ0KKwk6IG1fcm9ib3RNYWluT3ZlcnJpZGRlbiAodHJ1ZSkNCit7DQorCW1fd2F0Y2hkb2cuU2V0RW5hYmxlZChmYWxzZSk7DQorfQ0KKw0KKy8qKg0KKyAqIFJvYm90LXdpZGUgaW5pdGlhbGl6YXRpb24gY29kZSBzaG91bGQgZ28gaGVyZS4NCisgKiANCisgKiBQcm9ncmFtbWVycyBzaG91bGQgb3ZlcnJpZGUgdGhpcyBtZXRob2QgZm9yIGRlZmF1bHQgUm9ib3Qtd2lkZSBpbml0aWFsaXphdGlvbiB3aGljaCB3aWxsDQorICogYmUgY2FsbGVkIGVhY2ggdGltZSB0aGUgcm9ib3QgZW50ZXJzIHRoZSBkaXNhYmxlZCBzdGF0ZS4NCisgKi8NCit2b2lkIFNpbXBsZVJvYm90OjpSb2JvdEluaXQoKQ0KK3sNCisJcHJpbnRmKCJEZWZhdWx0ICVzKCkgbWV0aG9kLi4uIE92ZXJyaWRlIG1lIVxuIiwgX19GVU5DVElPTl9fKTsNCit9DQorDQorLyoqDQorICogRGlzYWJsZWQgc2hvdWxkIGdvIGhlcmUuDQorICogUHJvZ3JhbW1lcnMgc2hvdWxkIG92ZXJyaWRlIHRoaXMgbWV0aG9kIHRvIHJ1biBjb2RlIHRoYXQgc2hvdWxkIHJ1biB3aGlsZSB0aGUgZmllbGQgaXMNCisgKiBkaXNhYmxlZC4NCisgKi8NCit2b2lkIFNpbXBsZVJvYm90OjpEaXNhYmxlZCgpDQorew0KKwlwcmludGYoIkRlZmF1bHQgJXMoKSBtZXRob2QuLi4gT3ZlcnJpZGUgbWUhXG4iLCBfX0ZVTkNUSU9OX18pOw0KK30NCisNCisvKioNCisgKiBBdXRvbm9tb3VzIHNob3VsZCBnbyBoZXJlLg0KKyAqIFByb2dyYW1tZXJzIHNob3VsZCBvdmVycmlkZSB0aGlzIG1ldGhvZCB0byBydW4gY29kZSB0aGF0IHNob3VsZCBydW4gd2hpbGUgdGhlIGZpZWxkIGlzDQorICogaW4gdGhlIGF1dG9ub21vdXMgcGVyaW9kLiBUaGlzIHdpbGwgYmUgY2FsbGVkIG9uY2UgZWFjaCB0aW1lIHRoZSByb2JvdCBlbnRlcnMgdGhlDQorICogYXV0b25vbW91cyBzdGF0ZS4NCisgKi8NCit2b2lkIFNpbXBsZVJvYm90OjpBdXRvbm9tb3VzKCkNCit7DQorCXByaW50ZigiRGVmYXVsdCAlcygpIG1ldGhvZC4uLiBPdmVycmlkZSBtZSFcbiIsIF9fRlVOQ1RJT05fXyk7DQorfQ0KKw0KKy8qKg0KKyAqIE9wZXJhdG9yIGNvbnRyb2wgKHRlbGUtb3BlcmF0ZWQpIGNvZGUgc2hvdWxkIGdvIGhlcmUuDQorICogUHJvZ3JhbW1lcnMgc2hvdWxkIG92ZXJyaWRlIHRoaXMgbWV0aG9kIHRvIHJ1biBjb2RlIHRoYXQgc2hvdWxkIHJ1biB3aGlsZSB0aGUgZmllbGQgaXMNCisgKiBpbiB0aGUgT3BlcmF0b3IgQ29udHJvbCAodGVsZS1vcGVyYXRlZCkgcGVyaW9kLiBUaGlzIGlzIGNhbGxlZCBvbmNlIGVhY2ggdGltZSB0aGUgcm9ib3QNCisgKiBlbnRlcnMgdGhlIHRlbGVvcCBzdGF0ZS4NCisgKi8NCit2b2lkIFNpbXBsZVJvYm90OjpPcGVyYXRvckNvbnRyb2woKQ0KK3sNCisJcHJpbnRmKCJEZWZhdWx0ICVzKCkgbWV0aG9kLi4uIE92ZXJyaWRlIG1lIVxuIiwgX19GVU5DVElPTl9fKTsNCit9DQorDQorLyoqDQorICogVGVzdCBwcm9ncmFtIHNob3VsZCBnbyBoZXJlLg0KKyAqIFByb2dyYW1tZXJzIHNob3VsZCBvdmVycmlkZSB0aGlzIG1ldGhvZCB0byBydW4gY29kZSB0aGF0IGV4ZWN1dGVzIHdoaWxlIHRoZSByb2JvdCBpcw0KKyAqIGluIHRlc3QgbW9kZS4gVGhpcyB3aWxsIGJlIGNhbGxlZCBvbmNlIHdoZW5ldmVyIHRoZSByb2JvdCBlbnRlcnMgdGVzdCBtb2RlDQorICovDQordm9pZCBTaW1wbGVSb2JvdDo6VGVzdCgpDQorew0KKwlwcmludGYoIkRlZmF1bHQgJXMoKSBtZXRob2QuLi4gT3ZlcnJpZGUgbWUhXG4iLCBfX0ZVTkNUSU9OX18pOw0KK30NCisNCisvKioNCisgKiBSb2JvdCBtYWluIHByb2dyYW0gZm9yIGZyZWUtZm9ybSBwcm9ncmFtcy4NCisgKiANCisgKiBUaGlzIHNob3VsZCBiZSBvdmVycmlkZGVuIGJ5IHVzZXIgc3ViY2xhc3NlcyBpZiB0aGUgaW50ZW50IGlzIHRvIG5vdCB1c2UgdGhlIEF1dG9ub21vdXMoKSBhbmQNCisgKiBPcGVyYXRvckNvbnRyb2woKSBtZXRob2RzLiBJbiB0aGF0IGNhc2UsIHRoZSBwcm9ncmFtIGlzIHJlc3BvbnNpYmxlIGZvciBzZW5zaW5nIHdoZW4gdG8gcnVuDQorICogdGhlIGF1dG9ub21vdXMgYW5kIG9wZXJhdG9yIGNvbnRyb2wgZnVuY3Rpb25zIGluIHRoZWlyIHByb2dyYW0uDQorICogDQorICogVGhpcyBtZXRob2Qgd2lsbCBiZSBjYWxsZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIGNvbnN0cnVjdG9yIGlzIGNhbGxlZC4gSWYgaXQgaGFzIG5vdCBiZWVuDQorICogb3ZlcnJpZGRlbiBieSBhIHVzZXIgc3ViY2xhc3MgKGkuZS4gdGhlIGRlZmF1bHQgdmVyc2lvbiBydW5zKSwgdGhlbiB0aGUgQXV0b25vbW91cygpIGFuZA0KKyAqIE9wZXJhdG9yQ29udHJvbCgpIG1ldGhvZHMgd2lsbCBiZSBjYWxsZWQuDQorICovDQordm9pZCBTaW1wbGVSb2JvdDo6Um9ib3RNYWluKCkNCit7DQorCW1fcm9ib3RNYWluT3ZlcnJpZGRlbiA9IGZhbHNlOw0KK30NCisNCisvKioNCisgKiBTdGFydCBhIGNvbXBldGl0aW9uLg0KKyAqIFRoaXMgY29kZSBuZWVkcyB0byB0cmFjayB0aGUgb3JkZXIgb2YgdGhlIGZpZWxkIHN0YXJ0aW5nIHRvIGVuc3VyZSB0aGF0IGV2ZXJ5dGhpbmcgaGFwcGVucw0KKyAqIGluIHRoZSByaWdodCBvcmRlci4gUmVwZWF0ZWRseSBydW4gdGhlIGNvcnJlY3QgbWV0aG9kLCBlaXRoZXIgQXV0b25vbW91cyBvciBPcGVyYXRvckNvbnRyb2wNCisgKiBvciBUZXN0IHdoZW4gdGhlIHJvYm90IGlzIGVuYWJsZWQuIEFmdGVyIHJ1bm5pbmcgdGhlIGNvcnJlY3QgbWV0aG9kLCB3YWl0IGZvciBzb21lIHN0YXRlIHRvDQorICogY2hhbmdlLCBlaXRoZXIgdGhlIG90aGVyIG1vZGUgc3RhcnRzIG9yIHRoZSByb2JvdCBpcyBkaXNhYmxlZC4gVGhlbiBnbyBiYWNrIGFuZCB3YWl0IGZvciB0aGUNCisgKiByb2JvdCB0byBiZSBlbmFibGVkIGFnYWluLg0KKyAqLw0KK3ZvaWQgU2ltcGxlUm9ib3Q6OlN0YXJ0Q29tcGV0aXRpb24oKQ0KK3sNCisJTGl2ZVdpbmRvdyAqbHcgPSBMaXZlV2luZG93OjpHZXRJbnN0YW5jZSgpOw0KKw0KKwluVXNhZ2VSZXBvcnRpbmc6OnJlcG9ydChuVXNhZ2VSZXBvcnRpbmc6OmtSZXNvdXJjZVR5cGVfRnJhbWV3b3JrLCBuVXNhZ2VSZXBvcnRpbmc6OmtGcmFtZXdvcmtfU2ltcGxlKTsNCisNCisJU21hcnREYXNoYm9hcmQ6OmluaXQoKTsNCisJTmV0d29ya1RhYmxlOjpHZXRUYWJsZSgiTGl2ZVdpbmRvdyIpLT5HZXRTdWJUYWJsZSgiflNUQVRVU34iKS0+UHV0Qm9vbGVhbigiTFcgRW5hYmxlZCIsIGZhbHNlKTsNCisNCisJUm9ib3RNYWluKCk7DQorCQ0KKwlpZiAoIW1fcm9ib3RNYWluT3ZlcnJpZGRlbikNCisJew0KKwkJLy8gZmlyc3QgYW5kIG9uZS10aW1lIGluaXRpYWxpemF0aW9uDQorCQkNCisJCWx3LT5TZXRFbmFibGVkKGZhbHNlKTsNCisJCQ0KKwkJUm9ib3RJbml0KCk7DQorDQorCQl3aGlsZSAodHJ1ZSkNCisJCXsNCisJCQlpZiAoSXNEaXNhYmxlZCgpKQ0KKwkJCXsNCisJCQkJbV9kcy0+SW5EaXNhYmxlZCh0cnVlKTsNCisJCQkJRGlzYWJsZWQoKTsNCisJCQkJbV9kcy0+SW5EaXNhYmxlZChmYWxzZSk7DQorCQkJCXdoaWxlIChJc0Rpc2FibGVkKCkpIG1fZHMtPldhaXRGb3JEYXRhKCk7DQorCQkJfQ0KKwkJCWVsc2UgaWYgKElzQXV0b25vbW91cygpKQ0KKwkJCXsNCisJCQkJbV9kcy0+SW5BdXRvbm9tb3VzKHRydWUpOw0KKwkJCQlBdXRvbm9tb3VzKCk7DQorCQkJCW1fZHMtPkluQXV0b25vbW91cyhmYWxzZSk7DQorCQkJCXdoaWxlIChJc0F1dG9ub21vdXMoKSAmJiBJc0VuYWJsZWQoKSkgbV9kcy0+V2FpdEZvckRhdGEoKTsNCisJCQl9DQorICAgICAgICAgICAgZWxzZSBpZiAoSXNUZXN0KCkpDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgIAlsdy0+U2V0RW5hYmxlZCh0cnVlKTsNCisgICAgICAgICAgICAgICAgbV9kcy0+SW5UZXN0KHRydWUpOw0KKyAgICAgICAgICAgICAgICBUZXN0KCk7DQorICAgICAgICAgICAgICAgIG1fZHMtPkluVGVzdChmYWxzZSk7DQorICAgICAgICAgICAgICAgIHdoaWxlIChJc1Rlc3QoKSAmJiBJc0VuYWJsZWQoKSkgbV9kcy0+V2FpdEZvckRhdGEoKTsNCisgICAgICAgICAgICAgICAgbHctPlNldEVuYWJsZWQoZmFsc2UpOw0KKyAgICAgICAgICAgIH0NCisJCQllbHNlDQorCQkJew0KKwkJCQltX2RzLT5Jbk9wZXJhdG9yQ29udHJvbCh0cnVlKTsNCisJCQkJT3BlcmF0b3JDb250cm9sKCk7DQorCQkJCW1fZHMtPkluT3BlcmF0b3JDb250cm9sKGZhbHNlKTsNCisJCQkJd2hpbGUgKElzT3BlcmF0b3JDb250cm9sKCkgJiYgSXNFbmFibGVkKCkpIG1fZHMtPldhaXRGb3JEYXRhKCk7DQorCQkJfQ0KKwkJfQ0KKwl9DQorfQ0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL1NpbXBsZVJvYm90LmggYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9TaW1wbGVSb2JvdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjNzBjYmQKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9TaW1wbGVSb2JvdC5oCkBAIC0wLDAgKzEsMzIgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorLyogQ29weXJpZ2h0IChjKSBGSVJTVCAyMDA4LiBBbGwgUmlnaHRzIFJlc2VydmVkLgkJCQkJCQkgICovDQorLyogT3BlbiBTb3VyY2UgU29mdHdhcmUgLSBtYXkgYmUgbW9kaWZpZWQgYW5kIHNoYXJlZCBieSBGUkMgdGVhbXMuIFRoZSBjb2RlICAgKi8NCisvKiBtdXN0IGJlIGFjY29tcGFuaWVkIGJ5IHRoZSBGSVJTVCBCU0QgbGljZW5zZSBmaWxlIGluICQoV0lORF9CQVNFKS9XUElMaWIuICAqLw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorI2lmbmRlZiBTSU1QTEVfUk9CT1RfSA0KKyNkZWZpbmUgU0lNUExFX1JPQk9UX0gNCisNCisjaW5jbHVkZSAiUm9ib3RCYXNlLmgiDQorDQorLyoqDQorICogQHRvZG8gSWYgdGhpcyBpcyBnb2luZyB0byBsYXN0IHVudGlsIHJlbGVhc2UsIGl0IG5lZWRzIGEgYmV0dGVyIG5hbWUuDQorICovDQorY2xhc3MgU2ltcGxlUm9ib3Q6IHB1YmxpYyBSb2JvdEJhc2UNCit7DQorcHVibGljOg0KKwlTaW1wbGVSb2JvdCgpOw0KKwl2aXJ0dWFsIH5TaW1wbGVSb2JvdCgpIHt9DQorCXZpcnR1YWwgdm9pZCBSb2JvdEluaXQoKTsNCisJdmlydHVhbCB2b2lkIERpc2FibGVkKCk7DQorCXZpcnR1YWwgdm9pZCBBdXRvbm9tb3VzKCk7DQorICAgIHZpcnR1YWwgdm9pZCBPcGVyYXRvckNvbnRyb2woKTsNCisgICAgdmlydHVhbCB2b2lkIFRlc3QoKTsNCisJdmlydHVhbCB2b2lkIFJvYm90TWFpbigpOw0KKwl2b2lkIFN0YXJ0Q29tcGV0aXRpb24oKTsNCisNCitwcml2YXRlOg0KKwlib29sIG1fcm9ib3RNYWluT3ZlcnJpZGRlbjsNCit9Ow0KKw0KKyNlbmRpZg0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL1NrZWxldG9uLmggYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9Ta2VsZXRvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5ZTkyMzQKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9Ta2VsZXRvbi5oCkBAIC0wLDAgKzEsODEgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorLyogQ29weXJpZ2h0IChjKSBGSVJTVCAyMDExLiBBbGwgUmlnaHRzIFJlc2VydmVkLgkJCQkJCQkgICovDQorLyogT3BlbiBTb3VyY2UgU29mdHdhcmUgLSBtYXkgYmUgbW9kaWZpZWQgYW5kIHNoYXJlZCBieSBGUkMgdGVhbXMuIFRoZSBjb2RlICAgKi8NCisvKiBtdXN0IGJlIGFjY29tcGFuaWVkIGJ5IHRoZSBGSVJTVCBCU0QgbGljZW5zZSBmaWxlIGluICQoV0lORF9CQVNFKS9XUElMaWIuICAqLw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorI2lmbmRlZiBfX1NLRUxFVE9OX0hfXw0KKyNkZWZpbmUgX19TS0VMRVRPTl9IX18NCisNCisvKioNCisgKiBSZXByZXNlbnRzIFNrZWxldG9uIGRhdGEgZnJvbSBhIEtpbmVjdCBkZXZpY2UgY29ubmVjdGVkIHRvIHRoZSANCisgKiBEcml2ZXIgU3RhdGlvbi4gU2VlIEdldHRpbmcgU3RhcnRlZCB3aXRoIE1pY3Jvc29mdCBLaW5lY3QgZm9yIA0KKyAqIEZSQyBhbmQgdGhlIEtpbmVjdCBmb3IgV2luZG93cyBTREsgQVBJIHJlZmVyZW5jZSBmb3IgbW9yZSBpbmZvcm1hdGlvbg0KKyAqLw0KK2NsYXNzIFNrZWxldG9uDQorew0KKwlmcmllbmQgY2xhc3MgS2luZWN0Ow0KK3B1YmxpYzoNCisJdHlwZWRlZiBlbnVtDQorCXsNCisJCUhpcENlbnRlciA9IDAsDQorCQlTcGluZSA9IDEsDQorCQlTaG91bGRlckNlbnRlciA9IDIsDQorCQlIZWFkID0gMywNCisJCVNob3VsZGVyTGVmdCA9IDQsDQorCQlFbGJvd0xlZnQgPSA1LA0KKwkJV3Jpc3RMZWZ0ID0gNiwNCisJCUhhbmRMZWZ0ID0gNywNCisJCVNob3VsZGVyUmlnaHQgPSA4LA0KKwkJRWxib3dSaWdodCA9IDksDQorCQlXcmlzdFJpZ2h0ID0gMTAsDQorCQlIYW5kUmlnaHQgPSAxMSwNCisJCUhpcExlZnQgPSAxMiwNCisJCUtuZWVMZWZ0ID0gMTMsDQorCQlBbmtsZUxlZnQgPSAxNCwNCisJCUZvb3RMZWZ0ID0gMTUsDQorCQlIaXBSaWdodCA9IDE2LA0KKwkJS25lZVJpZ2h0ID0gMTcsDQorCQlBbmtsZVJpZ2h0ID0gMTgsDQorCQlGb290UmlnaHQgPSAxOSwNCisJCUpvaW50Q291bnQgPSAyMA0KKwl9IEpvaW50VHlwZXM7DQorDQorCXR5cGVkZWYgZW51bSB7a05vdFRyYWNrZWQsIGtJbmZlcnJlZCwga1RyYWNrZWR9IEpvaW50VHJhY2tpbmdTdGF0ZTsNCisNCisJdHlwZWRlZiBzdHJ1Y3QNCisJew0KKwkJZmxvYXQgeDsNCisJCWZsb2F0IHk7DQorCQlmbG9hdCB6Ow0KKwkJSm9pbnRUcmFja2luZ1N0YXRlIHRyYWNraW5nU3RhdGU7DQorCX0gSm9pbnQ7DQorDQorCUpvaW50IEdldEhhbmRSaWdodCgpIHsgcmV0dXJuIG1fam9pbnRzW0hhbmRSaWdodF07IH0NCisJSm9pbnQgR2V0SGFuZExlZnQoKSB7IHJldHVybiBtX2pvaW50c1tIYW5kTGVmdF07IH0NCisJSm9pbnQgR2V0V3Jpc3RSaWdodCgpIHsgcmV0dXJuIG1fam9pbnRzW1dyaXN0UmlnaHRdOyB9DQorCUpvaW50IEdldFdyaXN0TGVmdCgpIHsgcmV0dXJuIG1fam9pbnRzW1dyaXN0TGVmdF07IH0NCisJSm9pbnQgR2V0RWxib3dMZWZ0KCkgeyByZXR1cm4gbV9qb2ludHNbRWxib3dMZWZ0XTsgfQ0KKwlKb2ludCBHZXRFbGJvd1JpZ2h0KCkgeyByZXR1cm4gbV9qb2ludHNbRWxib3dSaWdodF07IH0NCisJSm9pbnQgR2V0U2hvdWxkZXJMZWZ0KCkgeyByZXR1cm4gbV9qb2ludHNbU2hvdWxkZXJMZWZ0XTsgfQ0KKwlKb2ludCBHZXRTaG91bGRlclJpZ2h0KCkgeyByZXR1cm4gbV9qb2ludHNbU2hvdWxkZXJSaWdodF07IH0NCisJSm9pbnQgR2V0U2hvdWxkZXJDZW50ZXIoKSB7IHJldHVybiBtX2pvaW50c1tTaG91bGRlckNlbnRlcl07IH0NCisJSm9pbnQgR2V0SGVhZCgpIHsgcmV0dXJuIG1fam9pbnRzW0hlYWRdOyB9DQorCUpvaW50IEdldFNwaW5lKCkgeyByZXR1cm4gbV9qb2ludHNbU3BpbmVdOyB9DQorCUpvaW50IEdldEhpcENlbnRlcigpIHsgcmV0dXJuIG1fam9pbnRzW0hpcENlbnRlcl07IH0NCisJSm9pbnQgR2V0SGlwUmlnaHQoKSB7IHJldHVybiBtX2pvaW50c1tIaXBSaWdodF07IH0NCisJSm9pbnQgR2V0SGlwTGVmdCgpIHsgcmV0dXJuIG1fam9pbnRzW0hpcExlZnRdOyB9DQorCUpvaW50IEdldEtuZWVMZWZ0KCkgeyByZXR1cm4gbV9qb2ludHNbS25lZUxlZnRdOyB9DQorCUpvaW50IEdldEtuZWVSaWdodCgpIHsgcmV0dXJuIG1fam9pbnRzW0tuZWVSaWdodF07IH0NCisJSm9pbnQgR2V0QW5rbGVMZWZ0KCkgeyByZXR1cm4gbV9qb2ludHNbQW5rbGVMZWZ0XTsgfQ0KKwlKb2ludCBHZXRBbmtsZVJpZ2h0KCkgeyByZXR1cm4gbV9qb2ludHNbQW5rbGVSaWdodF07IH0NCisJSm9pbnQgR2V0Rm9vdExlZnQoKSB7IHJldHVybiBtX2pvaW50c1tGb290TGVmdF07IH0NCisJSm9pbnQgR2V0Rm9vdFJpZ2h0KCkgeyByZXR1cm4gbV9qb2ludHNbRm9vdFJpZ2h0XTsgfQ0KKwlKb2ludCBHZXRKb2ludFZhbHVlKEpvaW50VHlwZXMgaW5kZXgpIHsgcmV0dXJuIG1fam9pbnRzW2luZGV4XTsgfQ0KKw0KK3ByaXZhdGU6DQorCUpvaW50IG1fam9pbnRzWzIwXTsNCit9Ow0KKw0KKyNlbmRpZg0KKw0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL1NtYXJ0RGFzaGJvYXJkL05hbWVkU2VuZGFibGUuaCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL1NtYXJ0RGFzaGJvYXJkL05hbWVkU2VuZGFibGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MjMwZWZhCi0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvU21hcnREYXNoYm9hcmQvTmFtZWRTZW5kYWJsZS5oCkBAIC0wLDAgKzEsMjkgQEAKKy8qDQorICogTmFtZWRTZW5kYWJsZS5oDQorICoNCisgKiAgQ3JlYXRlZCBvbjogT2N0IDE5LCAyMDEyDQorICogICAgICBBdXRob3I6IE1pdGNoZWxsIFdpbGxzDQorICovDQorDQorI2lmbmRlZiBOQU1FRFNFTkRBQkxFX0hfDQorI2RlZmluZSBOQU1FRFNFTkRBQkxFX0hfDQorDQorDQorI2luY2x1ZGUgPHN0cmluZz4NCisjaW5jbHVkZSAiU21hcnREYXNoYm9hcmQvU2VuZGFibGUuaCINCisNCisvKioNCisgKiBUaGUgaW50ZXJmYWNlIGZvciBzZW5kYWJsZSBvYmplY3RzIHRoYXQgZ2l2ZXMgdGhlIHNlbmRhYmxlIGEgZGVmYXVsdCBuYW1lIGluIHRoZSBTbWFydCBEYXNoYm9hcmQNCisgKiANCisgKi8NCitjbGFzcyBOYW1lZFNlbmRhYmxlIDogcHVibGljIFNlbmRhYmxlDQorew0KK3B1YmxpYzoNCisNCisgICAgLyoqDQorICAgICAqIEByZXR1cm4gdGhlIG5hbWUgb2YgdGhlIHN1YnRhYmxlIG9mIFNtYXJ0RGFzaGJvYXJkIHRoYXQgdGhlIFNlbmRhYmxlIG9iamVjdCB3aWxsIHVzZQ0KKyAgICAgKi8NCisJdmlydHVhbCBzdGQ6OnN0cmluZyBHZXROYW1lKCkgPSAwOw0KK307DQorDQorI2VuZGlmIC8qIE5BTUVEU0VOREFCTEVfSF8gKi8NCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9TbWFydERhc2hib2FyZC9TZW5kYWJsZS5oIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvU21hcnREYXNoYm9hcmQvU2VuZGFibGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTMyMmI4Ci0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvU21hcnREYXNoYm9hcmQvU2VuZGFibGUuaApAQCAtMCwwICsxLDMzIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy8qIENvcHlyaWdodCAoYykgRklSU1QgMjAxMS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4JCQkJCQkJICAqLw0KKy8qIE9wZW4gU291cmNlIFNvZnR3YXJlIC0gbWF5IGJlIG1vZGlmaWVkIGFuZCBzaGFyZWQgYnkgRlJDIHRlYW1zLiBUaGUgY29kZSAgICovDQorLyogbXVzdCBiZSBhY2NvbXBhbmllZCBieSB0aGUgRklSU1QgQlNEIGxpY2Vuc2UgZmlsZSBpbiAkKFdJTkRfQkFTRSkvV1BJTGliLiAgKi8NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKyNpZm5kZWYgX19TTUFSVF9EQVNIQk9BUkRfREFUQV9fDQorI2RlZmluZSBfX1NNQVJUX0RBU0hCT0FSRF9EQVRBX18NCisNCisjaW5jbHVkZSA8c3RyaW5nPg0KKyNpbmNsdWRlICJ0YWJsZXMvSVRhYmxlLmgiDQorDQorY2xhc3MgU2VuZGFibGUNCit7DQorcHVibGljOg0KKwkvKioNCisJICogSW5pdGlhbGl6ZXMgYSB0YWJsZSBmb3IgdGhpcyBzZW5kYWJsZSBvYmplY3QuDQorCSAqIEBwYXJhbSBzdWJ0YWJsZSBUaGUgdGFibGUgdG8gcHV0IHRoZSB2YWx1ZXMgaW4uDQorCSAqLw0KKwl2aXJ0dWFsIHZvaWQgSW5pdFRhYmxlKElUYWJsZSogc3VidGFibGUpID0gMDsNCisNCisJLyoqDQorCSAqIEByZXR1cm4gdGhlIHRhYmxlIHRoYXQgaXMgY3VycmVudGx5IGFzc29jaWF0ZWQgd2l0aCB0aGUgc2VuZGFibGUNCisJICovDQorCXZpcnR1YWwgSVRhYmxlKiBHZXRUYWJsZSgpID0gMDsNCisNCisJLyoqDQorCSAqIEByZXR1cm4gdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgbmFtZWQgZGF0YSB0eXBlIHRoYXQgd2lsbCBiZSB1c2VkIGJ5IHRoZSBzbWFydCBkYXNoYm9hcmQgZm9yIHRoaXMgc2VuZGFibGUNCisJICovDQorCXZpcnR1YWwgc3RkOjpzdHJpbmcgR2V0U21hcnREYXNoYm9hcmRUeXBlKCkgPSAwOw0KK307DQorDQorI2VuZGlmDQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvU21hcnREYXNoYm9hcmQvU2VuZGFibGVDaG9vc2VyLmNwcCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL1NtYXJ0RGFzaGJvYXJkL1NlbmRhYmxlQ2hvb3Nlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjE5OGJlYQotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL1NtYXJ0RGFzaGJvYXJkL1NlbmRhYmxlQ2hvb3Nlci5jcHAKQEAgLTAsMCArMSw3OCBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBDb3B5cmlnaHQgKGMpIEZJUlNUIDIwMTEuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCQkJCQkJCSAgKi8NCisvKiBPcGVuIFNvdXJjZSBTb2Z0d2FyZSAtIG1heSBiZSBtb2RpZmllZCBhbmQgc2hhcmVkIGJ5IEZSQyB0ZWFtcy4gVGhlIGNvZGUgICAqLw0KKy8qIG11c3QgYmUgYWNjb21wYW5pZWQgYnkgdGhlIEZJUlNUIEJTRCBsaWNlbnNlIGZpbGUgaW4gJChXSU5EX0JBU0UpL1dQSUxpYi4gICovDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisjaW5jbHVkZSAiU21hcnREYXNoYm9hcmQvU2VuZGFibGVDaG9vc2VyLmgiDQorI2luY2x1ZGUgIm5ldHdvcmt0YWJsZXMyL3R5cGUvU3RyaW5nQXJyYXkuaCINCisNCisjaW5jbHVkZSA8c3RkaW8uaD4NCisNCitzdGF0aWMgY29uc3QgY2hhciAqa0RlZmF1bHQgPSAiZGVmYXVsdCI7DQorc3RhdGljIGNvbnN0IGNoYXIgKmtPcHRpb25zID0gIm9wdGlvbnMiOw0KK3N0YXRpYyBjb25zdCBjaGFyICprU2VsZWN0ZWQgPSAic2VsZWN0ZWQiOw0KKw0KK1NlbmRhYmxlQ2hvb3Nlcjo6U2VuZGFibGVDaG9vc2VyKCkNCit7DQorCW1fZGVmYXVsdENob2ljZSA9ICIiOw0KK30NCisNCisvKioNCisgKiBBZGRzIHRoZSBnaXZlbiBvYmplY3QgdG8gdGhlIGxpc3Qgb2Ygb3B0aW9ucy4gIE9uIHRoZSB7QGxpbmsgU21hcnREYXNoYm9hcmR9IG9uIHRoZSBkZXNrdG9wLA0KKyAqIHRoZSBvYmplY3Qgd2lsbCBhcHBlYXIgYXMgdGhlIGdpdmVuIG5hbWUuDQorICogQHBhcmFtIG5hbWUgdGhlIG5hbWUgb2YgdGhlIG9wdGlvbg0KKyAqIEBwYXJhbSBvYmplY3QgdGhlIG9wdGlvbg0KKyAqLw0KK3ZvaWQgU2VuZGFibGVDaG9vc2VyOjpBZGRPYmplY3QoY29uc3QgY2hhciAqbmFtZSwgdm9pZCAqb2JqZWN0KQ0KK3sNCisJbV9jaG9pY2VzW25hbWVdID0gb2JqZWN0Ow0KK30NCisNCisvKioNCisgKiBBZGQgdGhlIGdpdmVuIG9iamVjdCB0byB0aGUgbGlzdCBvZiBvcHRpb25zIGFuZCBtYXJrcyBpdCBhcyB0aGUgZGVmYXVsdC4NCisgKiBGdW5jdGlvbmFsbHksIHRoaXMgaXMgdmVyeSBjbG9zZSB0byB7QGxpbmsgU2VuZGFibGVDaG9vc2VyI0FkZE9iamVjdChjb25zdCBjaGFyICpuYW1lLCB2b2lkICpvYmplY3QpIEFkZE9iamVjdCguLi4pfQ0KKyAqIGV4Y2VwdCB0aGF0IGl0IHdpbGwgdXNlIHRoaXMgYXMgdGhlIGRlZmF1bHQgb3B0aW9uIGlmIG5vbmUgb3RoZXIgaXMgZXhwbGljaXRseSBzZWxlY3RlZC4NCisgKiBAcGFyYW0gbmFtZSB0aGUgbmFtZSBvZiB0aGUgb3B0aW9uDQorICogQHBhcmFtIG9iamVjdCB0aGUgb3B0aW9uDQorICovDQordm9pZCBTZW5kYWJsZUNob29zZXI6OkFkZERlZmF1bHQoY29uc3QgY2hhciAqbmFtZSwgdm9pZCAqb2JqZWN0KQ0KK3sNCisJbV9kZWZhdWx0Q2hvaWNlID0gbmFtZTsNCisJQWRkT2JqZWN0KG5hbWUsIG9iamVjdCk7DQorfQ0KKw0KKy8qKg0KKyAqIFJldHVybnMgdGhlIHNlbGVjdGVkIG9wdGlvbi4gIElmIHRoZXJlIGlzIG5vbmUgc2VsZWN0ZWQsIGl0IHdpbGwgcmV0dXJuIHRoZSBkZWZhdWx0LiAgSWYgdGhlcmUgaXMgbm9uZSBzZWxlY3RlZA0KKyAqIGFuZCBubyBkZWZhdWx0LCB0aGVuIGl0IHdpbGwgcmV0dXJuIHtAY29kZSBOVUxMfS4NCisgKiBAcmV0dXJuIHRoZSBvcHRpb24gc2VsZWN0ZWQNCisgKi8NCit2b2lkICpTZW5kYWJsZUNob29zZXI6OkdldFNlbGVjdGVkKCkNCit7DQorCXN0ZDo6c3RyaW5nIHNlbGVjdGVkID0gbV90YWJsZS0+R2V0U3RyaW5nKGtTZWxlY3RlZCwgbV9kZWZhdWx0Q2hvaWNlKTsNCisJaWYgKHNlbGVjdGVkID09ICIiKQ0KKwkJcmV0dXJuIE5VTEw7DQorCWVsc2UNCisJCXJldHVybiBtX2Nob2ljZXNbc2VsZWN0ZWRdOw0KK30NCisNCit2b2lkIFNlbmRhYmxlQ2hvb3Nlcjo6SW5pdFRhYmxlKElUYWJsZSogc3VidGFibGUpIHsNCisJU3RyaW5nQXJyYXkga2V5czsNCisJbV90YWJsZSA9IHN1YnRhYmxlOw0KKwlpZiAobV90YWJsZSAhPSBOVUxMKSB7DQorCQlzdGQ6Om1hcDxzdGQ6OnN0cmluZywgdm9pZCAqPjo6aXRlcmF0b3IgaXRlcjsNCisJCWZvciAoaXRlciA9IG1fY2hvaWNlcy5iZWdpbigpOyBpdGVyICE9IG1fY2hvaWNlcy5lbmQoKTsgaXRlcisrKSB7DQorCQkJa2V5cy5hZGQoaXRlci0+Zmlyc3QpOw0KKwkJfQ0KKwkJbV90YWJsZS0+UHV0VmFsdWUoa09wdGlvbnMsIGtleXMpOw0KKwkJbV90YWJsZS0+UHV0U3RyaW5nKGtEZWZhdWx0LCBtX2RlZmF1bHRDaG9pY2UpOw0KKwl9DQorfQ0KKw0KK0lUYWJsZSogU2VuZGFibGVDaG9vc2VyOjpHZXRUYWJsZSgpIHsNCisJcmV0dXJuIG1fdGFibGU7DQorfQ0KKw0KK3N0ZDo6c3RyaW5nIFNlbmRhYmxlQ2hvb3Nlcjo6R2V0U21hcnREYXNoYm9hcmRUeXBlKCkgew0KKwlyZXR1cm4gIlN0cmluZyBDaG9vc2VyIjsNCit9DQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvU21hcnREYXNoYm9hcmQvU2VuZGFibGVDaG9vc2VyLmggYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9TbWFydERhc2hib2FyZC9TZW5kYWJsZUNob29zZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTQxYTIxCi0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvU21hcnREYXNoYm9hcmQvU2VuZGFibGVDaG9vc2VyLmgKQEAgLTAsMCArMSw0NyBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBDb3B5cmlnaHQgKGMpIEZJUlNUIDIwMTEuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCQkJCQkJCSAgKi8NCisvKiBPcGVuIFNvdXJjZSBTb2Z0d2FyZSAtIG1heSBiZSBtb2RpZmllZCBhbmQgc2hhcmVkIGJ5IEZSQyB0ZWFtcy4gVGhlIGNvZGUgICAqLw0KKy8qIG11c3QgYmUgYWNjb21wYW5pZWQgYnkgdGhlIEZJUlNUIEJTRCBsaWNlbnNlIGZpbGUgaW4gJChXSU5EX0JBU0UpL1dQSUxpYi4gICovDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisjaWZuZGVmIF9fU0VOREFCTEVfQ0hPT1NFUl9IX18NCisjZGVmaW5lIF9fU0VOREFCTEVfQ0hPT1NFUl9IX18NCisNCisjaW5jbHVkZSAiU21hcnREYXNoYm9hcmQvU2VuZGFibGUuaCINCisjaW5jbHVkZSAidGFibGVzL0lUYWJsZS5oIg0KKyNpbmNsdWRlIDxtYXA+DQorI2luY2x1ZGUgPHN0cmluZz4NCisNCisvKioNCisgKiBUaGUge0BsaW5rIFNlbmRhYmxlQ2hvb3Nlcn0gY2xhc3MgaXMgYSB1c2VmdWwgdG9vbCBmb3IgcHJlc2VudGluZyBhIHNlbGVjdGlvbiBvZiBvcHRpb25zDQorICogdG8gdGhlIHtAbGluayBTbWFydERhc2hib2FyZH0uDQorICoNCisgKiA8cD5Gb3IgaW5zdGFuY2UsIHlvdSBtYXkgd2lzaCB0byBiZSBhYmxlIHRvIHNlbGVjdCBiZXR3ZWVuIG11bHRpcGxlIGF1dG9ub21vdXMgbW9kZXMuDQorICogWW91IGNhbiBkbyB0aGlzIGJ5IHB1dHRpbmcgZXZlcnkgcG9zc2libGUge0BsaW5rIENvbW1hbmR9IHlvdSB3YW50IHRvIHJ1biBhcyBhbiBhdXRvbm9tb3VzIGludG8NCisgKiBhIHtAbGluayBTZW5kYWJsZUNob29zZXJ9IGFuZCB0aGVuIHB1dCBpdCBpbnRvIHRoZSB7QGxpbmsgU21hcnREYXNoYm9hcmR9IHRvIGhhdmUgYSBsaXN0IG9mIG9wdGlvbnMNCisgKiBhcHBlYXIgb24gdGhlIGxhcHRvcC4gIE9uY2UgYXV0b25vbW91cyBzdGFydHMsIHNpbXBseSBhc2sgdGhlIHtAbGluayBTZW5kYWJsZUNob29zZXJ9IHdoYXQgdGhlIHNlbGVjdGVkDQorICogdmFsdWUgaXMuPC9wPg0KKyAqDQorICogQHNlZSBTbWFydERhc2hib2FyZA0KKyAqLw0KK2NsYXNzIFNlbmRhYmxlQ2hvb3NlciA6IHB1YmxpYyBTZW5kYWJsZQ0KK3sNCitwdWJsaWM6DQorCVNlbmRhYmxlQ2hvb3NlcigpOw0KKwl2aXJ0dWFsIH5TZW5kYWJsZUNob29zZXIoKSB7fTsNCisNCisJdm9pZCBBZGRPYmplY3QoY29uc3QgY2hhciAqbmFtZSwgdm9pZCAqb2JqZWN0KTsNCisJdm9pZCBBZGREZWZhdWx0KGNvbnN0IGNoYXIgKm5hbWUsIHZvaWQgKm9iamVjdCk7DQorCXZvaWQgKkdldFNlbGVjdGVkKCk7DQorDQorCXZpcnR1YWwgdm9pZCBJbml0VGFibGUoSVRhYmxlKiBzdWJ0YWJsZSk7DQorCXZpcnR1YWwgSVRhYmxlKiBHZXRUYWJsZSgpOw0KKwl2aXJ0dWFsIHN0ZDo6c3RyaW5nIEdldFNtYXJ0RGFzaGJvYXJkVHlwZSgpOw0KKw0KK3ByaXZhdGU6DQorCXN0ZDo6c3RyaW5nIG1fZGVmYXVsdENob2ljZTsNCisJc3RkOjptYXA8c3RkOjpzdHJpbmcsIHZvaWQgKj4gbV9jaG9pY2VzOw0KKwlJVGFibGUgKm1fdGFibGU7DQorfTsNCisNCisjZW5kaWYNCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9TbWFydERhc2hib2FyZC9TbWFydERhc2hib2FyZC5jcHAgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9TbWFydERhc2hib2FyZC9TbWFydERhc2hib2FyZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmMxYzNlMQotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL1NtYXJ0RGFzaGJvYXJkL1NtYXJ0RGFzaGJvYXJkLmNwcApAQCAtMCwwICsxLDE3OSBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBDb3B5cmlnaHQgKGMpIEZJUlNUIDIwMTEuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCQkJCQkJCSAgKi8NCisvKiBPcGVuIFNvdXJjZSBTb2Z0d2FyZSAtIG1heSBiZSBtb2RpZmllZCBhbmQgc2hhcmVkIGJ5IEZSQyB0ZWFtcy4gVGhlIGNvZGUgICAqLw0KKy8qIG11c3QgYmUgYWNjb21wYW5pZWQgYnkgdGhlIEZJUlNUIEJTRCBsaWNlbnNlIGZpbGUgaW4gJChXSU5EX0JBU0UpL1dQSUxpYi4gICovDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisjaW5jbHVkZSAiU21hcnREYXNoYm9hcmQvU21hcnREYXNoYm9hcmQuaCINCisNCisjaW5jbHVkZSAiTmV0d29ya0NvbW11bmljYXRpb24vVXNhZ2VSZXBvcnRpbmcuaCINCisjaW5jbHVkZSAiTmFtZWRTZW5kYWJsZS5oIg0KKyNpbmNsdWRlICJXUElFcnJvcnMuaCINCisjaW5jbHVkZSAibmV0d29ya3RhYmxlcy9OZXR3b3JrVGFibGUuaCINCisNCitJVGFibGUqIFNtYXJ0RGFzaGJvYXJkOjptX3RhYmxlID0gTlVMTDsNCitzdGQ6Om1hcDxJVGFibGUgKiwgU2VuZGFibGUgKj4gU21hcnREYXNoYm9hcmQ6Om1fdGFibGVzVG9EYXRhOw0KKw0KK3ZvaWQgU21hcnREYXNoYm9hcmQ6OmluaXQoKXsNCisJbV90YWJsZSA9IE5ldHdvcmtUYWJsZTo6R2V0VGFibGUoIlNtYXJ0RGFzaGJvYXJkIik7DQorfQ0KKw0KKy8vVE9ETyB1c2FnZSByZXBvcnRpbmcNCisNCisvKioNCisgKiBNYXBzIHRoZSBzcGVjaWZpZWQga2V5IHRvIHRoZSBzcGVjaWZpZWQgdmFsdWUgaW4gdGhpcyB0YWJsZS4NCisgKiBUaGUga2V5IGNhbiBub3QgYmUgTlVMTC4NCisgKiBUaGUgdmFsdWUgY2FuIGJlIHJldHJpZXZlZCBieSBjYWxsaW5nIHRoZSBnZXQgbWV0aG9kIHdpdGggYSBrZXkgdGhhdCBpcyBlcXVhbCB0byB0aGUgb3JpZ2luYWwga2V5Lg0KKyAqIEBwYXJhbSBrZXlOYW1lIHRoZSBrZXkNCisgKiBAcGFyYW0gdmFsdWUgdGhlIHZhbHVlDQorICovDQordm9pZCBTbWFydERhc2hib2FyZDo6UHV0RGF0YShzdGQ6OnN0cmluZyBrZXksIFNlbmRhYmxlICpkYXRhKQ0KK3sNCisJaWYgKGRhdGEgPT0gTlVMTCkNCisJew0KKwkJLy9UT0RPIHdwaV9zZXRXUElFcnJvcldpdGhDb250ZXh0KE51bGxQYXJhbWV0ZXIsICJ2YWx1ZSIpOw0KKwkJcmV0dXJuOw0KKwl9DQorICAgIElUYWJsZSogZGF0YVRhYmxlID0gbV90YWJsZS0+R2V0U3ViVGFibGUoa2V5KTsNCisgICAgZGF0YVRhYmxlLT5QdXRTdHJpbmcoIn5UWVBFfiIsIGRhdGEtPkdldFNtYXJ0RGFzaGJvYXJkVHlwZSgpKTsNCisgICAgZGF0YS0+SW5pdFRhYmxlKGRhdGFUYWJsZSk7DQorICAgIG1fdGFibGVzVG9EYXRhW2RhdGFUYWJsZV0gPSBkYXRhOw0KK30NCisNCisvKioNCisgKiBNYXBzIHRoZSBzcGVjaWZpZWQga2V5ICh3aGVyZSB0aGUga2V5IGlzIHRoZSBuYW1lIG9mIHRoZSB7QGxpbmsgU21hcnREYXNoYm9hcmROYW1lZERhdGF9DQorICogdG8gdGhlIHNwZWNpZmllZCB2YWx1ZSBpbiB0aGlzIHRhYmxlLg0KKyAqIFRoZSB2YWx1ZSBjYW4gYmUgcmV0cmlldmVkIGJ5IGNhbGxpbmcgdGhlIGdldCBtZXRob2Qgd2l0aCBhIGtleSB0aGF0IGlzIGVxdWFsIHRvIHRoZSBvcmlnaW5hbCBrZXkuDQorICogQHBhcmFtIHZhbHVlIHRoZSB2YWx1ZQ0KKyAqLw0KK3ZvaWQgU21hcnREYXNoYm9hcmQ6OlB1dERhdGEoTmFtZWRTZW5kYWJsZSAqdmFsdWUpDQorew0KKwlpZiAodmFsdWUgPT0gTlVMTCkNCisJew0KKwkJLy9UT0RPIHdwaV9zZXRXUElFcnJvcldpdGhDb250ZXh0KE51bGxQYXJhbWV0ZXIsICJ2YWx1ZSIpOw0KKwkJcmV0dXJuOw0KKwl9DQorCVB1dERhdGEodmFsdWUtPkdldE5hbWUoKSwgdmFsdWUpOw0KK30NCisNCisvKioNCisgKiBSZXR1cm5zIHRoZSB2YWx1ZSBhdCB0aGUgc3BlY2lmaWVkIGtleS4NCisgKiBAcGFyYW0ga2V5TmFtZSB0aGUga2V5DQorICogQHJldHVybiB0aGUgdmFsdWUNCisgKi8NCisvL1RPRE8gU2VuZGFibGUgKlNtYXJ0RGFzaGJvYXJkOjpHZXREYXRhKHN0ZDo6c3RyaW5nIGtleSkNCisvKnsNCisJSVRhYmxlKiBzdWJ0YWJsZSA9IG1fdGFibGUtPkdldFN1YlRhYmxlKGtleU5hbWUpOw0KKwlTZW5kYWJsZSAqZGF0YSA9IG1fdGFibGVzVG9EYXRhW3N1YnRhYmxlXTsNCisJaWYgKGRhdGEgPT0gTlVMTCkNCisJew0KKwkJd3BpX3NldFdQSUVycm9yV2l0aENvbnRleHQoU21hcnREYXNoYm9hcmRNaXNzaW5nS2V5LCBrZXlOYW1lKTsNCisJCXJldHVybiBOVUxMOw0KKwl9DQorICAgIHJldHVybiBkYXRhOw0KK30qLw0KKw0KKy8qKg0KKyAqIE1hcHMgdGhlIHNwZWNpZmllZCBrZXkgdG8gdGhlIHNwZWNpZmllZCBjb21wbGV4IHZhbHVlIChzdWNoIGFzIGFuIGFycmF5KSBpbiB0aGlzIHRhYmxlLg0KKyAqIFRoZSBrZXkgY2FuIG5vdCBiZSBOVUxMLg0KKyAqIFRoZSB2YWx1ZSBjYW4gYmUgcmV0cmlldmVkIGJ5IGNhbGxpbmcgdGhlIFJldHJpZXZlVmFsdWUgbWV0aG9kIHdpdGggYSBrZXkgdGhhdCBpcyBlcXVhbCB0byB0aGUgb3JpZ2luYWwga2V5Lg0KKyAqIEBwYXJhbSBrZXlOYW1lIHRoZSBrZXkNCisgKiBAcGFyYW0gdmFsdWUgdGhlIHZhbHVlDQorICovDQordm9pZCBTbWFydERhc2hib2FyZDo6UHV0VmFsdWUoc3RkOjpzdHJpbmcga2V5TmFtZSwgQ29tcGxleERhdGEmIHZhbHVlKQ0KK3sNCisJbV90YWJsZS0+UHV0VmFsdWUoa2V5TmFtZSwgdmFsdWUpOw0KK30NCisNCisvKioNCisgKiBSZXRyaWV2ZXMgdGhlIGNvbXBsZXggdmFsdWUgKHN1Y2ggYXMgYW4gYXJyYXkpIGluIHRoaXMgdGFibGUgaW50byB0aGUgY29tcGxleCBkYXRhIG9iamVjdA0KKyAqIFRoZSBrZXkgY2FuIG5vdCBiZSBOVUxMLg0KKyAqIEBwYXJhbSBrZXlOYW1lIHRoZSBrZXkNCisgKiBAcGFyYW0gdmFsdWUgdGhlIG9iamVjdCB0byByZXRyaWV2ZSB0aGUgdmFsdWUgaW50bw0KKyAqLw0KK3ZvaWQgU21hcnREYXNoYm9hcmQ6OlJldHJpZXZlVmFsdWUoc3RkOjpzdHJpbmcga2V5TmFtZSwgQ29tcGxleERhdGEmIHZhbHVlKQ0KK3sNCisJbV90YWJsZS0+UmV0cmlldmVWYWx1ZShrZXlOYW1lLCB2YWx1ZSk7DQorfQ0KKw0KKy8qKg0KKyAqIE1hcHMgdGhlIHNwZWNpZmllZCBrZXkgdG8gdGhlIHNwZWNpZmllZCB2YWx1ZSBpbiB0aGlzIHRhYmxlLg0KKyAqIFRoZSBrZXkgY2FuIG5vdCBiZSBOVUxMLg0KKyAqIFRoZSB2YWx1ZSBjYW4gYmUgcmV0cmlldmVkIGJ5IGNhbGxpbmcgdGhlIGdldCBtZXRob2Qgd2l0aCBhIGtleSB0aGF0IGlzIGVxdWFsIHRvIHRoZSBvcmlnaW5hbCBrZXkuDQorICogQHBhcmFtIGtleU5hbWUgdGhlIGtleQ0KKyAqIEBwYXJhbSB2YWx1ZSB0aGUgdmFsdWUNCisgKi8NCit2b2lkIFNtYXJ0RGFzaGJvYXJkOjpQdXRCb29sZWFuKHN0ZDo6c3RyaW5nIGtleU5hbWUsIGJvb2wgdmFsdWUpDQorew0KKwltX3RhYmxlLT5QdXRCb29sZWFuKGtleU5hbWUsIHZhbHVlKTsNCit9DQorDQorLyoqDQorICogUmV0dXJucyB0aGUgdmFsdWUgYXQgdGhlIHNwZWNpZmllZCBrZXkuDQorICogQHBhcmFtIGtleU5hbWUgdGhlIGtleQ0KKyAqIEByZXR1cm4gdGhlIHZhbHVlDQorICovDQorYm9vbCBTbWFydERhc2hib2FyZDo6R2V0Qm9vbGVhbihzdGQ6OnN0cmluZyBrZXlOYW1lKQ0KK3sNCisJcmV0dXJuIG1fdGFibGUtPkdldEJvb2xlYW4oa2V5TmFtZSk7DQorfQ0KKw0KKy8qKg0KKyAqIE1hcHMgdGhlIHNwZWNpZmllZCBrZXkgdG8gdGhlIHNwZWNpZmllZCB2YWx1ZSBpbiB0aGlzIHRhYmxlLg0KKyAqIFRoZSBrZXkgY2FuIG5vdCBiZSBOVUxMLg0KKyAqIFRoZSB2YWx1ZSBjYW4gYmUgcmV0cmlldmVkIGJ5IGNhbGxpbmcgdGhlIGdldCBtZXRob2Qgd2l0aCBhIGtleSB0aGF0IGlzIGVxdWFsIHRvIHRoZSBvcmlnaW5hbCBrZXkuDQorICogQHBhcmFtIGtleU5hbWUgdGhlIGtleQ0KKyAqIEBwYXJhbSB2YWx1ZSB0aGUgdmFsdWUNCisgKi8NCit2b2lkIFNtYXJ0RGFzaGJvYXJkOjpQdXROdW1iZXIoc3RkOjpzdHJpbmcga2V5TmFtZSwgZG91YmxlIHZhbHVlKXsNCisJbV90YWJsZS0+UHV0TnVtYmVyKGtleU5hbWUsIHZhbHVlKTsNCit9DQorDQorLyoqDQorICogUmV0dXJucyB0aGUgdmFsdWUgYXQgdGhlIHNwZWNpZmllZCBrZXkuDQorICogQHBhcmFtIGtleU5hbWUgdGhlIGtleQ0KKyAqIEByZXR1cm4gdGhlIHZhbHVlDQorICovDQorZG91YmxlIFNtYXJ0RGFzaGJvYXJkOjpHZXROdW1iZXIoc3RkOjpzdHJpbmcga2V5TmFtZSkNCit7DQorCXJldHVybiBtX3RhYmxlLT5HZXROdW1iZXIoa2V5TmFtZSk7DQorfQ0KKw0KKy8qKg0KKyAqIE1hcHMgdGhlIHNwZWNpZmllZCBrZXkgdG8gdGhlIHNwZWNpZmllZCB2YWx1ZSBpbiB0aGlzIHRhYmxlLg0KKyAqIE5laXRoZXIgdGhlIGtleSBub3IgdGhlIHZhbHVlIGNhbiBiZSBOVUxMLg0KKyAqIFRoZSB2YWx1ZSBjYW4gYmUgcmV0cmlldmVkIGJ5IGNhbGxpbmcgdGhlIGdldCBtZXRob2Qgd2l0aCBhIGtleSB0aGF0IGlzIGVxdWFsIHRvIHRoZSBvcmlnaW5hbCBrZXkuDQorICogQHBhcmFtIGtleU5hbWUgdGhlIGtleQ0KKyAqIEBwYXJhbSB2YWx1ZSB0aGUgdmFsdWUNCisgKi8NCit2b2lkIFNtYXJ0RGFzaGJvYXJkOjpQdXRTdHJpbmcoc3RkOjpzdHJpbmcga2V5TmFtZSwgc3RkOjpzdHJpbmcgdmFsdWUpDQorew0KKwltX3RhYmxlLT5QdXRTdHJpbmcoa2V5TmFtZSwgdmFsdWUpOw0KK30NCisNCisvKioNCisgKiBSZXR1cm5zIHRoZSB2YWx1ZSBhdCB0aGUgc3BlY2lmaWVkIGtleS4NCisgKiBAcGFyYW0ga2V5TmFtZSB0aGUga2V5DQorICogQHBhcmFtIHZhbHVlIHRoZSBidWZmZXIgdG8gZmlsbCB3aXRoIHRoZSB2YWx1ZQ0KKyAqIEBwYXJhbSB2YWx1ZUxlbiB0aGUgc2l6ZSBvZiB0aGUgYnVmZmVyIHBvaW50ZWQgdG8gYnkgdmFsdWUNCisgKiBAcmV0dXJuIHRoZSBsZW5ndGggb2YgdGhlIHN0cmluZw0KKyAqLw0KK2ludCBTbWFydERhc2hib2FyZDo6R2V0U3RyaW5nKHN0ZDo6c3RyaW5nIGtleU5hbWUsIGNoYXIgKm91dEJ1ZmZlciwgdW5zaWduZWQgaW50IGJ1ZmZlckxlbil7DQorCXN0ZDo6c3RyaW5nIHZhbHVlID0gbV90YWJsZS0+R2V0U3RyaW5nKGtleU5hbWUpOw0KKwl1bnNpZ25lZCBpbnQgaTsNCisJZm9yKGkgPSAwOyBpPGJ1ZmZlckxlbi0xJiZpPHZhbHVlLmxlbmd0aCgpOyArK2kpDQorCQlvdXRCdWZmZXJbaV0gPSAoY2hhcil2YWx1ZS5hdChpKTsNCisJb3V0QnVmZmVyW2ldID0gJ1wwJzsNCisJcmV0dXJuIGk7DQorfQ0KKw0KKw0KKy8qKg0KKyAqIFJldHVybnMgdGhlIHZhbHVlIGF0IHRoZSBzcGVjaWZpZWQga2V5Lg0KKyAqIEBwYXJhbSBrZXlOYW1lIHRoZSBrZXkNCisgKiBAcmV0dXJuIHRoZSB2YWx1ZQ0KKyAqLw0KK3N0ZDo6c3RyaW5nIFNtYXJ0RGFzaGJvYXJkOjpHZXRTdHJpbmcoc3RkOjpzdHJpbmcga2V5TmFtZSkNCit7DQorCXJldHVybiBtX3RhYmxlLT5HZXRTdHJpbmcoa2V5TmFtZSk7DQorfQ0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL1NtYXJ0RGFzaGJvYXJkL1NtYXJ0RGFzaGJvYXJkLmggYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9TbWFydERhc2hib2FyZC9TbWFydERhc2hib2FyZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlNmM2ZmEKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9TbWFydERhc2hib2FyZC9TbWFydERhc2hib2FyZC5oCkBAIC0wLDAgKzEsNTUgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorLyogQ29weXJpZ2h0IChjKSBGSVJTVCAyMDExLiBBbGwgUmlnaHRzIFJlc2VydmVkLgkJCQkJCQkgICovDQorLyogT3BlbiBTb3VyY2UgU29mdHdhcmUgLSBtYXkgYmUgbW9kaWZpZWQgYW5kIHNoYXJlZCBieSBGUkMgdGVhbXMuIFRoZSBjb2RlICAgKi8NCisvKiBtdXN0IGJlIGFjY29tcGFuaWVkIGJ5IHRoZSBGSVJTVCBCU0QgbGljZW5zZSBmaWxlIGluICQoV0lORF9CQVNFKS9XUElMaWIuICAqLw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorI2lmbmRlZiBfX1NNQVJUX0RBU0hCT0FSRF9IX18NCisjZGVmaW5lIF9fU01BUlRfREFTSEJPQVJEX0hfXw0KKw0KKyNpbmNsdWRlICJTZW5zb3JCYXNlLmgiDQorI2luY2x1ZGUgPG1hcD4NCisjaW5jbHVkZSA8c3RyaW5nPg0KKyNpbmNsdWRlICJTbWFydERhc2hib2FyZC9TZW5kYWJsZS5oIg0KKyNpbmNsdWRlICJTbWFydERhc2hib2FyZC9OYW1lZFNlbmRhYmxlLmgiDQorI2luY2x1ZGUgInRhYmxlcy9JVGFibGUuaCINCisNCisNCitjbGFzcyBTbWFydERhc2hib2FyZCA6IHB1YmxpYyBTZW5zb3JCYXNlDQorew0KK3B1YmxpYzoNCisJc3RhdGljIHZvaWQgaW5pdCgpOw0KKwkNCisJc3RhdGljIHZvaWQgUHV0RGF0YShzdGQ6OnN0cmluZyBrZXksIFNlbmRhYmxlICpkYXRhKTsNCisJc3RhdGljIHZvaWQgUHV0RGF0YShOYW1lZFNlbmRhYmxlICp2YWx1ZSk7DQorCS8vc3RhdGljIFNlbmRhYmxlKiBHZXREYXRhKHN0ZDo6c3RyaW5nIGtleU5hbWUpOw0KKwkNCisJc3RhdGljIHZvaWQgUHV0Qm9vbGVhbihzdGQ6OnN0cmluZyBrZXlOYW1lLCBib29sIHZhbHVlKTsNCisJc3RhdGljIGJvb2wgR2V0Qm9vbGVhbihzdGQ6OnN0cmluZyBrZXlOYW1lKTsNCisJDQorCXN0YXRpYyB2b2lkIFB1dE51bWJlcihzdGQ6OnN0cmluZyBrZXlOYW1lLCBkb3VibGUgdmFsdWUpOw0KKwlzdGF0aWMgZG91YmxlIEdldE51bWJlcihzdGQ6OnN0cmluZyBrZXlOYW1lKTsNCisJDQorCXN0YXRpYyB2b2lkIFB1dFN0cmluZyhzdGQ6OnN0cmluZyBrZXlOYW1lLCBzdGQ6OnN0cmluZyB2YWx1ZSk7DQorCXN0YXRpYyBpbnQgR2V0U3RyaW5nKHN0ZDo6c3RyaW5nIGtleU5hbWUsIGNoYXIgKnZhbHVlLCB1bnNpZ25lZCBpbnQgdmFsdWVMZW4pOw0KKwlzdGF0aWMgc3RkOjpzdHJpbmcgR2V0U3RyaW5nKHN0ZDo6c3RyaW5nIGtleU5hbWUpOw0KKwkNCisJc3RhdGljIHZvaWQgUHV0VmFsdWUoc3RkOjpzdHJpbmcga2V5TmFtZSwgQ29tcGxleERhdGEmIHZhbHVlKTsNCisJc3RhdGljIHZvaWQgUmV0cmlldmVWYWx1ZShzdGQ6OnN0cmluZyBrZXlOYW1lLCBDb21wbGV4RGF0YSYgdmFsdWUpOw0KK3ByaXZhdGU6DQorCVNtYXJ0RGFzaGJvYXJkKCk7DQorCXZpcnR1YWwgflNtYXJ0RGFzaGJvYXJkKCk7DQorCURJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihTbWFydERhc2hib2FyZCk7DQorDQorCS8qKiBUaGUge0BsaW5rIE5ldHdvcmtUYWJsZX0gdXNlZCBieSB7QGxpbmsgU21hcnREYXNoYm9hcmR9ICovDQorCXN0YXRpYyBJVGFibGUqIG1fdGFibGU7DQorCQ0KKwkvKiogDQorCSAqIEEgbWFwIGxpbmtpbmcgdGFibGVzIGluIHRoZSBTbWFydERhc2hib2FyZCB0byB0aGUge0BsaW5rIFNtYXJ0RGFzaGJvYXJkRGF0YX0gb2JqZWN0cw0KKwkgKiB0aGV5IGNhbWUgZnJvbS4NCisJICovDQorCXN0YXRpYyBzdGQ6Om1hcDxJVGFibGUgKiwgU2VuZGFibGUgKj4gbV90YWJsZXNUb0RhdGE7DQorfTsNCisNCisjZW5kaWYNCisNCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9Tb2xlbm9pZC5jcHAgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9Tb2xlbm9pZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDk4YTk2OQotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL1NvbGVub2lkLmNwcApAQCAtMCwwICsxLDEzOCBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBDb3B5cmlnaHQgKGMpIEZJUlNUIDIwMDguIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCQkJCQkJCSAgKi8NCisvKiBPcGVuIFNvdXJjZSBTb2Z0d2FyZSAtIG1heSBiZSBtb2RpZmllZCBhbmQgc2hhcmVkIGJ5IEZSQyB0ZWFtcy4gVGhlIGNvZGUgICAqLw0KKy8qIG11c3QgYmUgYWNjb21wYW5pZWQgYnkgdGhlIEZJUlNUIEJTRCBsaWNlbnNlIGZpbGUgaW4gJChXSU5EX0JBU0UpL1dQSUxpYi4gICovDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisjaW5jbHVkZSAiU29sZW5vaWQuaCINCisjaW5jbHVkZSAiTmV0d29ya0NvbW11bmljYXRpb24vVXNhZ2VSZXBvcnRpbmcuaCINCisjaW5jbHVkZSAiV1BJRXJyb3JzLmgiDQorI2luY2x1ZGUgIkxpdmVXaW5kb3cvTGl2ZVdpbmRvdy5oIg0KKw0KKy8qKg0KKyAqIENvbW1vbiBmdW5jdGlvbiB0byBpbXBsZW1lbnQgY29uc3RydWN0b3IgYmVoYXZpb3IuDQorICovDQordm9pZCBTb2xlbm9pZDo6SW5pdFNvbGVub2lkKCkNCit7DQorCWNoYXIgYnVmWzY0XTsNCisJaWYgKCFDaGVja1NvbGVub2lkTW9kdWxlKG1fbW9kdWxlTnVtYmVyKSkNCisJew0KKwkJc25wcmludGYoYnVmLCA2NCwgIlNvbGVub2lkIE1vZHVsZSAlZCIsIG1fbW9kdWxlTnVtYmVyKTsNCisJCXdwaV9zZXRXUElFcnJvcldpdGhDb250ZXh0KE1vZHVsZUluZGV4T3V0T2ZSYW5nZSwgYnVmKTsNCisJCXJldHVybjsNCisJfQ0KKwlpZiAoIUNoZWNrU29sZW5vaWRDaGFubmVsKG1fY2hhbm5lbCkpDQorCXsNCisJCXNucHJpbnRmKGJ1ZiwgNjQsICJTb2xlbm9pZCBDaGFubmVsICVkIiwgbV9jaGFubmVsKTsNCisJCXdwaV9zZXRXUElFcnJvcldpdGhDb250ZXh0KENoYW5uZWxJbmRleE91dE9mUmFuZ2UsIGJ1Zik7DQorCQlyZXR1cm47DQorCX0NCisJUmVzb3VyY2U6OkNyZWF0ZVJlc291cmNlT2JqZWN0KCZtX2FsbG9jYXRlZCwgdFNvbGVub2lkOjprTnVtRE83XzBFbGVtZW50cyAqIGtTb2xlbm9pZENoYW5uZWxzKTsNCisNCisJc25wcmludGYoYnVmLCA2NCwgIlNvbGVub2lkICVkIChNb2R1bGU6ICVkKSIsIG1fY2hhbm5lbCwgbV9tb2R1bGVOdW1iZXIpOw0KKwlpZiAobV9hbGxvY2F0ZWQtPkFsbG9jYXRlKChtX21vZHVsZU51bWJlciAtIDEpICoga1NvbGVub2lkQ2hhbm5lbHMgKyBtX2NoYW5uZWwgLSAxLCBidWYpID09IH4wdWwpDQorCXsNCisJCUNsb25lRXJyb3IobV9hbGxvY2F0ZWQpOw0KKwkJcmV0dXJuOw0KKwl9DQorDQorCUxpdmVXaW5kb3c6OkdldEluc3RhbmNlKCktPkFkZEFjdHVhdG9yKCJTb2xlbm9pZCIsIG1fbW9kdWxlTnVtYmVyLCBtX2NoYW5uZWwsIHRoaXMpOw0KKwluVXNhZ2VSZXBvcnRpbmc6OnJlcG9ydChuVXNhZ2VSZXBvcnRpbmc6OmtSZXNvdXJjZVR5cGVfU29sZW5vaWQsIG1fY2hhbm5lbCwgbV9tb2R1bGVOdW1iZXIgLSAxKTsNCit9DQorDQorLyoqDQorICogQ29uc3RydWN0b3IuDQorICogDQorICogQHBhcmFtIGNoYW5uZWwgVGhlIGNoYW5uZWwgb24gdGhlIHNvbGVub2lkIG1vZHVsZSB0byBjb250cm9sICgxLi44KS4NCisgKi8NCitTb2xlbm9pZDo6U29sZW5vaWQoVUlOVDMyIGNoYW5uZWwpDQorCTogU29sZW5vaWRCYXNlIChHZXREZWZhdWx0U29sZW5vaWRNb2R1bGUoKSkNCisJLCBtX2NoYW5uZWwgKGNoYW5uZWwpDQorew0KKwlJbml0U29sZW5vaWQoKTsNCit9DQorDQorLyoqDQorICogQ29uc3RydWN0b3IuDQorICogDQorICogQHBhcmFtIG1vZHVsZU51bWJlciBUaGUgc29sZW5vaWQgbW9kdWxlICgxIG9yIDIpLg0KKyAqIEBwYXJhbSBjaGFubmVsIFRoZSBjaGFubmVsIG9uIHRoZSBzb2xlbm9pZCBtb2R1bGUgdG8gY29udHJvbCAoMS4uOCkuDQorICovDQorU29sZW5vaWQ6OlNvbGVub2lkKFVJTlQ4IG1vZHVsZU51bWJlciwgVUlOVDMyIGNoYW5uZWwpDQorCTogU29sZW5vaWRCYXNlIChtb2R1bGVOdW1iZXIpDQorCSwgbV9jaGFubmVsIChjaGFubmVsKQ0KK3sNCisJSW5pdFNvbGVub2lkKCk7DQorfQ0KKw0KKy8qKg0KKyAqIERlc3RydWN0b3IuDQorICovDQorU29sZW5vaWQ6On5Tb2xlbm9pZCgpDQorew0KKwlpZiAoQ2hlY2tTb2xlbm9pZE1vZHVsZShtX21vZHVsZU51bWJlcikpDQorCXsNCisJCW1fYWxsb2NhdGVkLT5GcmVlKChtX21vZHVsZU51bWJlciAtIDEpICoga1NvbGVub2lkQ2hhbm5lbHMgKyBtX2NoYW5uZWwgLSAxKTsNCisJfQ0KK30NCisNCisvKioNCisgKiBTZXQgdGhlIHZhbHVlIG9mIGEgc29sZW5vaWQuDQorICogDQorICogQHBhcmFtIG9uIFR1cm4gdGhlIHNvbGVub2lkIG91dHB1dCBvZmYgb3Igb24uDQorICovDQordm9pZCBTb2xlbm9pZDo6U2V0KGJvb2wgb24pDQorew0KKwlpZiAoU3RhdHVzSXNGYXRhbCgpKSByZXR1cm47DQorCVVJTlQ4IHZhbHVlID0gb24gPyAweEZGIDogMHgwMDsNCisJVUlOVDggbWFzayA9IDEgPDwgKG1fY2hhbm5lbCAtIDEpOw0KKw0KKwlTb2xlbm9pZEJhc2U6OlNldCh2YWx1ZSwgbWFzayk7DQorfQ0KKw0KKy8qKg0KKyAqIFJlYWQgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIHNvbGVub2lkLg0KKyAqIA0KKyAqIEByZXR1cm4gVGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIHNvbGVub2lkLg0KKyAqLw0KK2Jvb2wgU29sZW5vaWQ6OkdldCgpDQorew0KKwlpZiAoU3RhdHVzSXNGYXRhbCgpKSByZXR1cm4gZmFsc2U7DQorCVVJTlQ4IHZhbHVlID0gR2V0QWxsKCkgJiAoIDEgPDwgKG1fY2hhbm5lbCAtIDEpKTsNCisJcmV0dXJuICh2YWx1ZSAhPSAwKTsNCit9DQorDQorDQordm9pZCBTb2xlbm9pZDo6VmFsdWVDaGFuZ2VkKElUYWJsZSogc291cmNlLCBjb25zdCBzdGQ6OnN0cmluZyYga2V5LCBFbnRyeVZhbHVlIHZhbHVlLCBib29sIGlzTmV3KSB7DQorCVNldCh2YWx1ZS5iKTsNCit9DQorDQordm9pZCBTb2xlbm9pZDo6VXBkYXRlVGFibGUoKSB7DQorCWlmIChtX3RhYmxlICE9IE5VTEwpIHsNCisJCW1fdGFibGUtPlB1dEJvb2xlYW4oIlZhbHVlIiwgR2V0KCkpOw0KKwl9DQorfQ0KKw0KK3ZvaWQgU29sZW5vaWQ6OlN0YXJ0TGl2ZVdpbmRvd01vZGUoKSB7DQorCVNldChmYWxzZSk7DQorCW1fdGFibGUtPkFkZFRhYmxlTGlzdGVuZXIoIlZhbHVlIiwgdGhpcywgdHJ1ZSk7DQorfQ0KKw0KK3ZvaWQgU29sZW5vaWQ6OlN0b3BMaXZlV2luZG93TW9kZSgpIHsNCisJU2V0KGZhbHNlKTsNCisJbV90YWJsZS0+UmVtb3ZlVGFibGVMaXN0ZW5lcih0aGlzKTsNCit9DQorDQorc3RkOjpzdHJpbmcgU29sZW5vaWQ6OkdldFNtYXJ0RGFzaGJvYXJkVHlwZSgpIHsNCisJcmV0dXJuICJTb2xlbm9pZCI7DQorfQ0KKw0KK3ZvaWQgU29sZW5vaWQ6OkluaXRUYWJsZShJVGFibGUgKnN1YlRhYmxlKSB7DQorCW1fdGFibGUgPSBzdWJUYWJsZTsNCisJVXBkYXRlVGFibGUoKTsNCit9DQorDQorSVRhYmxlICogU29sZW5vaWQ6OkdldFRhYmxlKCkgew0KKwlyZXR1cm4gbV90YWJsZTsNCit9DQorDQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvU29sZW5vaWQuaCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL1NvbGVub2lkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2ZhZmI3MwotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL1NvbGVub2lkLmgKQEAgLTAsMCArMSw0NiBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBDb3B5cmlnaHQgKGMpIEZJUlNUIDIwMDguIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCQkJCQkJCSAgKi8NCisvKiBPcGVuIFNvdXJjZSBTb2Z0d2FyZSAtIG1heSBiZSBtb2RpZmllZCBhbmQgc2hhcmVkIGJ5IEZSQyB0ZWFtcy4gVGhlIGNvZGUgICAqLw0KKy8qIG11c3QgYmUgYWNjb21wYW5pZWQgYnkgdGhlIEZJUlNUIEJTRCBsaWNlbnNlIGZpbGUgaW4gJChXSU5EX0JBU0UpL1dQSUxpYi4gICovDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisjaWZuZGVmIFNPTEVOT0lEX0hfDQorI2RlZmluZSBTT0xFTk9JRF9IXw0KKw0KKyNpbmNsdWRlICJTb2xlbm9pZEJhc2UuaCINCisjaW5jbHVkZSAiTGl2ZVdpbmRvdy9MaXZlV2luZG93U2VuZGFibGUuaCINCisjaW5jbHVkZSAidGFibGVzL0lUYWJsZUxpc3RlbmVyLmgiDQorDQorDQorLyoqDQorICogU29sZW5vaWQgY2xhc3MgZm9yIHJ1bm5pbmcgaGlnaCB2b2x0YWdlIERpZ2l0YWwgT3V0cHV0ICg5NDcyIG1vZHVsZSkuDQorICogDQorICogVGhlIFNvbGVub2lkIGNsYXNzIGlzIHR5cGljYWxseSB1c2VkIGZvciBwbmV1bWF0aWNzIHNvbGVub2lkcywgYnV0IGNvdWxkIGJlIHVzZWQNCisgKiBmb3IgYW55IGRldmljZSB3aXRoaW4gdGhlIGN1cnJlbnQgc3BlYyBvZiB0aGUgOTQ3MiBtb2R1bGUuDQorICovDQorY2xhc3MgU29sZW5vaWQgOiBwdWJsaWMgU29sZW5vaWRCYXNlLCBwdWJsaWMgTGl2ZVdpbmRvd1NlbmRhYmxlLCBwdWJsaWMgSVRhYmxlTGlzdGVuZXIgew0KK3B1YmxpYzoNCisJZXhwbGljaXQgU29sZW5vaWQoVUlOVDMyIGNoYW5uZWwpOw0KKwlTb2xlbm9pZChVSU5UOCBtb2R1bGVOdW1iZXIsIFVJTlQzMiBjaGFubmVsKTsNCisJdmlydHVhbCB+U29sZW5vaWQoKTsNCisJdmlydHVhbCB2b2lkIFNldChib29sIG9uKTsNCisJdmlydHVhbCBib29sIEdldCgpOw0KKwkNCit2b2lkIFZhbHVlQ2hhbmdlZChJVGFibGUqIHNvdXJjZSwgY29uc3Qgc3RkOjpzdHJpbmcmIGtleSwgRW50cnlWYWx1ZSB2YWx1ZSwgYm9vbCBpc05ldyk7DQorCXZvaWQgVXBkYXRlVGFibGUoKTsNCisJdm9pZCBTdGFydExpdmVXaW5kb3dNb2RlKCk7DQorCXZvaWQgU3RvcExpdmVXaW5kb3dNb2RlKCk7DQorCXN0ZDo6c3RyaW5nIEdldFNtYXJ0RGFzaGJvYXJkVHlwZSgpOw0KKwl2b2lkIEluaXRUYWJsZShJVGFibGUgKnN1YlRhYmxlKTsNCisJSVRhYmxlICogR2V0VGFibGUoKTsNCisNCisNCitwcml2YXRlOg0KKwl2b2lkIEluaXRTb2xlbm9pZCgpOw0KKw0KKwlVSU5UMzIgbV9jaGFubmVsOyAvLy88IFRoZSBjaGFubmVsIG9uIHRoZSBtb2R1bGUgdG8gY29udHJvbC4NCisJDQorCUlUYWJsZSAqbV90YWJsZTsNCit9Ow0KKw0KKyNlbmRpZg0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL1NvbGVub2lkQmFzZS5jcHAgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9Tb2xlbm9pZEJhc2UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhODc1MDUKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9Tb2xlbm9pZEJhc2UuY3BwCkBAIC0wLDAgKzEsODggQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorLyogQ29weXJpZ2h0IChjKSBGSVJTVCAyMDA4LiBBbGwgUmlnaHRzIFJlc2VydmVkLgkJCQkJCQkgICovDQorLyogT3BlbiBTb3VyY2UgU29mdHdhcmUgLSBtYXkgYmUgbW9kaWZpZWQgYW5kIHNoYXJlZCBieSBGUkMgdGVhbXMuIFRoZSBjb2RlICAgKi8NCisvKiBtdXN0IGJlIGFjY29tcGFuaWVkIGJ5IHRoZSBGSVJTVCBCU0QgbGljZW5zZSBmaWxlIGluICQoV0lORF9CQVNFKS9XUElMaWIuICAqLw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorI2luY2x1ZGUgIlNvbGVub2lkQmFzZS5oIg0KKw0KKy8vIE5lZWRzIHRvIGJlIGdsb2JhbCBzaW5jZSB0aGUgcHJvdGVjdGVkIHJlc291cmNlIHNwYW5zIGFsbCBTb2xlbm9pZCBvYmplY3RzLg0KK1JlZW50cmFudFNlbWFwaG9yZSBTb2xlbm9pZEJhc2U6Om1fc2VtYXBob3JlOw0KK1Jlc291cmNlICpTb2xlbm9pZEJhc2U6Om1fYWxsb2NhdGVkID0gTlVMTDsNCisNCit0U29sZW5vaWQgKlNvbGVub2lkQmFzZTo6bV9mcGdhU29sZW5vaWRNb2R1bGUgPSBOVUxMOw0KK1VJTlQzMiBTb2xlbm9pZEJhc2U6Om1fcmVmQ291bnQgPSAwOw0KKw0KKw0KKy8qKg0KKyAqIENvbnN0cnVjdG9yDQorICogDQorICogQHBhcmFtIG1vZHVsZU51bWJlciBUaGUgc29sZW5vaWQgbW9kdWxlICgxIG9yIDIpLg0KKyAqLw0KK1NvbGVub2lkQmFzZTo6U29sZW5vaWRCYXNlKFVJTlQ4IG1vZHVsZU51bWJlcikNCisJOiBtX21vZHVsZU51bWJlciAobW9kdWxlTnVtYmVyKQ0KK3sNCisJU3luY2hyb25pemVkIHN5bmMobV9zZW1hcGhvcmUpOw0KKwltX3JlZkNvdW50Kys7DQorCWlmIChtX3JlZkNvdW50ID09IDEpDQorCXsNCisJCXRSaW9TdGF0dXNDb2RlIGxvY2FsU3RhdHVzID0gTmlGcGdhX1N0YXR1c19TdWNjZXNzOw0KKwkJbV9mcGdhU29sZW5vaWRNb2R1bGUgPSB0U29sZW5vaWQ6OmNyZWF0ZSgmbG9jYWxTdGF0dXMpOw0KKwkJd3BpX3NldEVycm9yKGxvY2FsU3RhdHVzKTsNCisJfQ0KK30NCisNCisvKioNCisgKiBEZXN0cnVjdG9yLg0KKyAqLw0KK1NvbGVub2lkQmFzZTo6flNvbGVub2lkQmFzZSgpDQorew0KKwlTeW5jaHJvbml6ZWQgc3luYyhtX3NlbWFwaG9yZSk7DQorCWlmIChDaGVja1NvbGVub2lkTW9kdWxlKG1fbW9kdWxlTnVtYmVyKSkNCisJew0KKwkJaWYgKG1fcmVmQ291bnQgPT0gMSkNCisJCXsNCisJCQlkZWxldGUgbV9mcGdhU29sZW5vaWRNb2R1bGU7DQorCQkJbV9mcGdhU29sZW5vaWRNb2R1bGUgPSBOVUxMOw0KKwkJfQ0KKwkJbV9yZWZDb3VudC0tOw0KKwl9DQorfQ0KKw0KKy8qKg0KKyAqIFNldCB0aGUgdmFsdWUgb2YgYSBzb2xlbm9pZC4NCisgKiANCisgKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIHlvdSB3YW50IHRvIHNldCBvbiB0aGUgbW9kdWxlLg0KKyAqIEBwYXJhbSBtYXNrIFRoZSBjaGFubmVscyB5b3Ugd2FudCB0byBiZSBhZmZlY3RlZC4NCisgKi8NCit2b2lkIFNvbGVub2lkQmFzZTo6U2V0KFVJTlQ4IHZhbHVlLCBVSU5UOCBtYXNrKQ0KK3sNCisJdFJpb1N0YXR1c0NvZGUgbG9jYWxTdGF0dXMgPSBOaUZwZ2FfU3RhdHVzX1N1Y2Nlc3M7DQorCWlmIChDaGVja1NvbGVub2lkTW9kdWxlKG1fbW9kdWxlTnVtYmVyKSkNCisJew0KKwkJU3luY2hyb25pemVkIHN5bmMobV9zZW1hcGhvcmUpOw0KKwkJVUlOVDggY3VycmVudFZhbHVlID0gbV9mcGdhU29sZW5vaWRNb2R1bGUtPnJlYWRETzdfMChtX21vZHVsZU51bWJlciAtIDEsICZsb2NhbFN0YXR1cyk7DQorCQkvLyBaZXJvIG91dCB0aGUgdmFsdWVzIHRvIGNoYW5nZQ0KKwkJY3VycmVudFZhbHVlID0gY3VycmVudFZhbHVlICYgfm1hc2s7DQorCQljdXJyZW50VmFsdWUgPSBjdXJyZW50VmFsdWUgfCAodmFsdWUgJiBtYXNrKTsNCisJCW1fZnBnYVNvbGVub2lkTW9kdWxlLT53cml0ZURPN18wKG1fbW9kdWxlTnVtYmVyIC0gMSwgY3VycmVudFZhbHVlLCAmbG9jYWxTdGF0dXMpOw0KKwl9DQorCXdwaV9zZXRFcnJvcihsb2NhbFN0YXR1cyk7DQorfQ0KKw0KKy8qKg0KKyAqIFJlYWQgYWxsIDggc29sZW5vaWRzIGFzIGEgc2luZ2xlIGJ5dGUNCisgKiANCisgKiBAcmV0dXJuIFRoZSBjdXJyZW50IHZhbHVlIG9mIGFsbCA4IHNvbGVub2lkcyBvbiB0aGUgbW9kdWxlLg0KKyAqLw0KK1VJTlQ4IFNvbGVub2lkQmFzZTo6R2V0QWxsKCkNCit7DQorCWlmIChDaGVja1NvbGVub2lkTW9kdWxlKG1fbW9kdWxlTnVtYmVyKSkNCisJew0KKwkJdFJpb1N0YXR1c0NvZGUgbG9jYWxTdGF0dXMgPSBOaUZwZ2FfU3RhdHVzX1N1Y2Nlc3M7DQorCQlVSU5UOCBzb2xlbm9pZHMgPSBtX2ZwZ2FTb2xlbm9pZE1vZHVsZS0+cmVhZERPN18wKG1fbW9kdWxlTnVtYmVyIC0gMSwgJmxvY2FsU3RhdHVzKTsNCisJCXdwaV9zZXRFcnJvcihsb2NhbFN0YXR1cyk7DQorCQlyZXR1cm4gc29sZW5vaWRzOw0KKwl9DQorCXJldHVybiAwOw0KK30NCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9Tb2xlbm9pZEJhc2UuaCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL1NvbGVub2lkQmFzZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0YzMyMmMKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9Tb2xlbm9pZEJhc2UuaApAQCAtMCwwICsxLDM4IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy8qIENvcHlyaWdodCAoYykgRklSU1QgMjAwOC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4JCQkJCQkJICAqLw0KKy8qIE9wZW4gU291cmNlIFNvZnR3YXJlIC0gbWF5IGJlIG1vZGlmaWVkIGFuZCBzaGFyZWQgYnkgRlJDIHRlYW1zLiBUaGUgY29kZSAgICovDQorLyogbXVzdCBiZSBhY2NvbXBhbmllZCBieSB0aGUgRklSU1QgQlNEIGxpY2Vuc2UgZmlsZSBpbiAkKFdJTkRfQkFTRSkvV1BJTGliLiAgKi8NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKyNpZm5kZWYgU09MRU5PSURfQkFTRV9IXw0KKyNkZWZpbmUgU09MRU5PSURfQkFTRV9IXw0KKw0KKyNpbmNsdWRlICJSZXNvdXJjZS5oIg0KKyNpbmNsdWRlICJTZW5zb3JCYXNlLmgiDQorI2luY2x1ZGUgIkNoaXBPYmplY3QuaCINCisjaW5jbHVkZSAiU3luY2hyb25pemVkLmgiDQorDQorLyoqDQorICogU29sZW5vaWRCYXNlIGNsYXNzIGlzIHRoZSBjb21tb24gYmFzZSBjbGFzcyBmb3IgdGhlIFNvbGVub2lkIGFuZA0KKyAqIERvdWJsZVNvbGVub2lkIGNsYXNzZXMuDQorICovDQorY2xhc3MgU29sZW5vaWRCYXNlIDogcHVibGljIFNlbnNvckJhc2Ugew0KK3B1YmxpYzoNCisJdmlydHVhbCB+U29sZW5vaWRCYXNlKCk7DQorCVVJTlQ4IEdldEFsbCgpOw0KKw0KK3Byb3RlY3RlZDoNCisJZXhwbGljaXQgU29sZW5vaWRCYXNlKFVJTlQ4IG1vZHVsZU51bWJlcik7DQorCXZvaWQgU2V0KFVJTlQ4IHZhbHVlLCBVSU5UOCBtYXNrKTsNCisJdmlydHVhbCB2b2lkIEluaXRTb2xlbm9pZCgpID0gMDsNCisNCisJVUlOVDMyIG1fbW9kdWxlTnVtYmVyOyAvLy88IFNsb3QgbnVtYmVyIHdoZXJlIHRoZSBtb2R1bGUgaXMgcGx1Z2dlZCBpbnRvIHRoZSBjaGFzc2lzLg0KKwlzdGF0aWMgUmVzb3VyY2UgKm1fYWxsb2NhdGVkOw0KKw0KK3ByaXZhdGU6DQorCXN0YXRpYyB0U29sZW5vaWQgKm1fZnBnYVNvbGVub2lkTW9kdWxlOyAvLy88IEZQR0EgU29sZW5vaWQgTW9kdWxlIG9iamVjdC4NCisJc3RhdGljIFVJTlQzMiBtX3JlZkNvdW50OyAvLy88IFJlZmVyZW5jZSBjb3VudCBmb3IgdGhlIGNoaXAgb2JqZWN0Lg0KKwlzdGF0aWMgUmVlbnRyYW50U2VtYXBob3JlIG1fc2VtYXBob3JlOw0KK307DQorDQorI2VuZGlmDQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvU3BlZWRDb250cm9sbGVyLmggYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9TcGVlZENvbnRyb2xsZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZTJlOWRkCi0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvU3BlZWRDb250cm9sbGVyLmgKQEAgLTAsMCArMSw0MCBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBDb3B5cmlnaHQgKGMpIEZJUlNUIDIwMDguIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCQkJCQkJCSAgKi8NCisvKiBPcGVuIFNvdXJjZSBTb2Z0d2FyZSAtIG1heSBiZSBtb2RpZmllZCBhbmQgc2hhcmVkIGJ5IEZSQyB0ZWFtcy4gVGhlIGNvZGUgICAqLw0KKy8qIG11c3QgYmUgYWNjb21wYW5pZWQgYnkgdGhlIEZJUlNUIEJTRCBsaWNlbnNlIGZpbGUgaW4gJChXSU5EX0JBU0UpL1dQSUxpYi4gICovDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisjaWZuZGVmIFNQRUVEX0NPTlRST0xMRVJfSA0KKyNkZWZpbmUgU1BFRURfQ09OVFJPTExFUl9IDQorDQorI2luY2x1ZGUgPHZ4V29ya3MuaD4NCisjaW5jbHVkZSAiUElET3V0cHV0LmgiDQorDQorLyoqDQorICogSW50ZXJmYWNlIGZvciBzcGVlZCBjb250cm9sbGluZyBkZXZpY2VzLg0KKyAqLw0KK2NsYXNzIFNwZWVkQ29udHJvbGxlciA6IHB1YmxpYyBQSURPdXRwdXQNCit7DQorcHVibGljOg0KKwl2aXJ0dWFsIH5TcGVlZENvbnRyb2xsZXIoKSB7fTsNCisJLyoqDQorCSAqIENvbW1vbiBpbnRlcmZhY2UgZm9yIHNldHRpbmcgdGhlIHNwZWVkIG9mIGEgc3BlZWQgY29udHJvbGxlci4NCisJICogDQorCSAqIEBwYXJhbSBzcGVlZCBUaGUgc3BlZWQgdG8gc2V0LiAgVmFsdWUgc2hvdWxkIGJlIGJldHdlZW4gLTEuMCBhbmQgMS4wLg0KKwkgKiBAcGFyYW0gc3luY0dyb3VwIFRoZSB1cGRhdGUgZ3JvdXAgdG8gYWRkIHRoaXMgU2V0KCkgdG8sIHBlbmRpbmcgVXBkYXRlU3luY0dyb3VwKCkuICBJZiAwLCB1cGRhdGUgaW1tZWRpYXRlbHkuDQorCSAqLw0KKwl2aXJ0dWFsIHZvaWQgU2V0KGZsb2F0IHNwZWVkLCBVSU5UOCBzeW5jR3JvdXA9MCkgPSAwOw0KKwkvKioNCisJICogQ29tbW9uIGludGVyZmFjZSBmb3IgZ2V0dGluZyB0aGUgY3VycmVudCBzZXQgc3BlZWQgb2YgYSBzcGVlZCBjb250cm9sbGVyLg0KKwkgKiANCisJICogQHJldHVybiBUaGUgY3VycmVudCBzZXQgc3BlZWQuICBWYWx1ZSBpcyBiZXR3ZWVuIC0xLjAgYW5kIDEuMC4NCisJICovDQorCXZpcnR1YWwgZmxvYXQgR2V0KCkgPSAwOw0KKwkvKioNCisJICogQ29tbW9uIGludGVyZmFjZSBmb3IgZGlzYWJsaW5nIGEgbW90b3IuDQorCSAqLw0KKwl2aXJ0dWFsIHZvaWQgRGlzYWJsZSgpID0gMDsNCit9Ow0KKw0KKyNlbmRpZg0KKw0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL1N5bmNocm9uaXplZC5jcHAgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9TeW5jaHJvbml6ZWQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwNDM4NzEKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9TeW5jaHJvbml6ZWQuY3BwCkBAIC0wLDAgKzEsMzUgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorLyogQ29weXJpZ2h0IChjKSBGSVJTVCAyMDA4LiBBbGwgUmlnaHRzIFJlc2VydmVkLgkJCQkJCQkgICovDQorLyogT3BlbiBTb3VyY2UgU29mdHdhcmUgLSBtYXkgYmUgbW9kaWZpZWQgYW5kIHNoYXJlZCBieSBGUkMgdGVhbXMuIFRoZSBjb2RlICAgKi8NCisvKiBtdXN0IGJlIGFjY29tcGFuaWVkIGJ5IHRoZSBGSVJTVCBCU0QgbGljZW5zZSBmaWxlIGluICQoV0lORF9CQVNFKS9XUElMaWIuICAqLw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorI2luY2x1ZGUgIlN5bmNocm9uaXplZC5oIg0KKw0KKy8qKg0KKyAqIFN5bmNocm9uaXplZCBjbGFzcyBkZWFscyB3aXRoIGNyaXRpY2FsIHJlZ2lvbnMuDQorICogRGVjbGFyZSBhIFN5bmNocm9uaXplZCBvYmplY3QgYXQgdGhlIGJlZ2lubmluZyBvZiBhIGJsb2NrLiBUaGF0IHdpbGwgdGFrZSB0aGUgc2VtYXBob3JlLg0KKyAqIFdoZW4gdGhlIGNvZGUgZXhpdHMgZnJvbSB0aGUgYmxvY2sgaXQgd2lsbCBjYWxsIHRoZSBkZXN0cnVjdG9yIHdoaWNoIHdpbGwgZ2l2ZSB0aGUgc2VtYXBob3JlLg0KKyAqIFRoaXMgZW5zdXJlcyB0aGF0IG5vIG1hdHRlciBob3cgdGhlIGJsb2NrIGlzIGV4aXRlZCwgdGhlIHNlbWFwaG9yZSB3aWxsIGFsd2F5cyBiZSByZWxlYXNlZC4NCisgKiBVc2UgdGhlIENSSVRJQ0FMX1JFR0lPTihTRU1fSUQpIGFuZCBFTkRfUkVHSU9OIG1hY3JvcyB0byBtYWtlIHRoZSBjb2RlIGxvb2sgY2xlYW5lciAoc2VlIGhlYWRlciBmaWxlKQ0KKyAqIEBwYXJhbSBzZW1hcGhvcmUgVGhlIHNlbWFwaG9yZSBjb250cm9sbGluZyB0aGlzIGNyaXRpY2FsIHJlZ2lvbi4NCisgKi8NCitTeW5jaHJvbml6ZWQ6OlN5bmNocm9uaXplZChTRU1fSUQgc2VtYXBob3JlKQ0KK3sNCisJbV9zZW1hcGhvcmUgPSBzZW1hcGhvcmU7DQorCXNlbVRha2UobV9zZW1hcGhvcmUsIFdBSVRfRk9SRVZFUik7DQorfQ0KKw0KK1N5bmNocm9uaXplZDo6U3luY2hyb25pemVkKFJlZW50cmFudFNlbWFwaG9yZSYgc2VtYXBob3JlKQ0KK3sNCisJbV9zZW1hcGhvcmUgPSBzZW1hcGhvcmUubV9zZW1hcGhvcmU7DQorCXNlbVRha2UobV9zZW1hcGhvcmUsIFdBSVRfRk9SRVZFUik7DQorfQ0KKw0KKy8qKg0KKyAqIFRoaXMgZGVzdHJ1Y3RvciB1bmxvY2tzIHRoZSBzZW1hcGhvcmUuDQorICovDQorU3luY2hyb25pemVkOjp+U3luY2hyb25pemVkKCkNCit7DQorCXNlbUdpdmUobV9zZW1hcGhvcmUpOw0KK30NCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9TeW5jaHJvbml6ZWQuaCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL1N5bmNocm9uaXplZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyMDBjYzUKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9TeW5jaHJvbml6ZWQuaApAQCAtMCwwICsxLDk0IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy8qIENvcHlyaWdodCAoYykgRklSU1QgMjAwOC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4JCQkJCQkJICAqLw0KKy8qIE9wZW4gU291cmNlIFNvZnR3YXJlIC0gbWF5IGJlIG1vZGlmaWVkIGFuZCBzaGFyZWQgYnkgRlJDIHRlYW1zLiBUaGUgY29kZSAgICovDQorLyogbXVzdCBiZSBhY2NvbXBhbmllZCBieSB0aGUgRklSU1QgQlNEIGxpY2Vuc2UgZmlsZSBpbiAkKFdJTkRfQkFTRSkvV1BJTGliLiAgKi8NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKyNpZm5kZWYgU1lOQ0hST05JWkVEX0gNCisjZGVmaW5lIFNZTkNIUk9OSVpFRF9IDQorDQorI2luY2x1ZGUgPHNlbUxpYi5oPg0KKw0KKyNpbmNsdWRlICJCYXNlLmgiDQorDQorI2RlZmluZSBDUklUSUNBTF9SRUdJT04ocykgeyBTeW5jaHJvbml6ZWQgX3N5bmMocyk7DQorI2RlZmluZSBFTkRfUkVHSU9OIH0NCisNCitjbGFzcyBTeW5jaHJvbml6ZWQ7DQorDQorLyoqDQorICogV3JhcCBhIHZ4V29ya3Mgc2VtYXBob3JlIChTRU1fSUQpIGZvciBlYXNpZXIgdXNlIGluIEMrKy4gRm9yIGEgc3RhdGljDQorICogaW5zdGFuY2UsIHRoZSBjb25zdHJ1Y3RvciBydW5zIGF0IHByb2dyYW0gbG9hZCB0aW1lIGJlZm9yZSBtYWluKCkgY2FuIHNwYXduDQorICogYW55IHRhc2tzLiBVc2UgdGhhdCB0byBmaXggcmFjZSBjb25kaXRpb25zIGluIHNldHVwIGNvZGUuDQorICoNCisgKiBUaGlzIHVzZXMgYSBzZW1NIHNlbWFwaG9yZSB3aGljaCBpcyAicmVlbnRyYW50IiBpbiB0aGUgc2Vuc2UgdGhhdCB0aGUgb3duaW5nDQorICogdGFzayBjYW4gInRha2UiIHRoZSBzZW1hcGhvcmUgbW9yZSB0aGFuIG9uY2UuIEl0IHdpbGwgbmVlZCB0byAiZ2l2ZSIgdGhlDQorICogc2VtYXBob3JlIHRoZSBzYW1lIG51bWJlciBvZiB0aW1lcyB0byB1bmxvY2sgaXQuDQorICoNCisgKiBUaGlzIGNsYXNzIGlzIHNhZmUgdG8gdXNlIGluIHN0YXRpYyB2YXJpYWJsZXMgYmVjYXVzZSBpdCBkb2VzIG5vdCBkZXBlbmQgb24NCisgKiBhbnkgb3RoZXIgQysrIHN0YXRpYyBjb25zdHJ1Y3RvcnMgb3IgZGVzdHJ1Y3RvcnMuDQorICovDQorY2xhc3MgUmVlbnRyYW50U2VtYXBob3JlDQorew0KK3B1YmxpYzoNCisJZXhwbGljaXQgUmVlbnRyYW50U2VtYXBob3JlKCkgew0KKwkJbV9zZW1hcGhvcmUgPSBzZW1NQ3JlYXRlKFNFTV9RX1BSSU9SSVRZIHwgU0VNX0RFTEVURV9TQUZFKTsNCisJfQ0KKwl+UmVlbnRyYW50U2VtYXBob3JlKCkgew0KKwkJc2VtRGVsZXRlKG1fc2VtYXBob3JlKTsNCisJfQ0KKw0KKwkvKioNCisJICogTG9jayB0aGUgc2VtYXBob3JlLCBibG9ja2luZyB1bnRpbCBpdCdzIGF2YWlsYWJsZS4NCisJICogQHJldHVybiAwIGZvciBzdWNjZXNzLCAtMSBmb3IgZXJyb3IuIElmIC0xLCB0aGUgZXJyb3Igd2lsbCBiZSBpbiBlcnJuby4NCisJICovDQorCWludCB0YWtlKCkgew0KKwkJcmV0dXJuIHNlbVRha2UobV9zZW1hcGhvcmUsIFdBSVRfRk9SRVZFUik7DQorCX0NCisNCisJLyoqDQorCSAqIFVubG9jayB0aGUgc2VtYXBob3JlLg0KKwkgKiBAcmV0dXJuIDAgZm9yIHN1Y2Nlc3MsIC0xIGZvciBlcnJvci4gSWYgLTEsIHRoZSBlcnJvciB3aWxsIGJlIGluIGVycm5vLg0KKwkgKi8NCisJaW50IGdpdmUoKSB7DQorCQlyZXR1cm4gc2VtR2l2ZShtX3NlbWFwaG9yZSk7DQorCX0NCisNCitwcml2YXRlOg0KKwlTRU1fSUQgbV9zZW1hcGhvcmU7DQorDQorCWZyaWVuZCBjbGFzcyBTeW5jaHJvbml6ZWQ7DQorCURJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihSZWVudHJhbnRTZW1hcGhvcmUpOw0KK307DQorDQorLyoqDQorICogUHJvdmlkZSBlYXN5IHN1cHBvcnQgZm9yIGNyaXRpY2FsIHJlZ2lvbnMuDQorICoNCisgKiBBIGNyaXRpY2FsIHJlZ2lvbiBpcyBhbiBhcmVhIG9mIGNvZGUgdGhhdCBpcyBhbHdheXMgZXhlY3V0ZWQgdW5kZXIgbXV0dWFsIGV4Y2x1c2lvbi4gT25seQ0KKyAqIG9uZSB0YXNrIGNhbiBiZSBleGVjdXRpbmcgdGhpcyBjb2RlIGF0IGFueSB0aW1lLiBUaGUgaWRlYSBpcyB0aGF0IGNvZGUgdGhhdCBtYW5pcHVsYXRlcyBkYXRhDQorICogdGhhdCBpcyBzaGFyZWQgYmV0d2VlbiB0d28gb3IgbW9yZSB0YXNrcyBoYXMgdG8gYmUgcHJldmVudGVkIGZyb20gZXhlY3V0aW5nIGF0IHRoZSBzYW1lIHRpbWUNCisgKiBvdGhlcndpc2UgYSByYWNlIGNvbmRpdGlvbiBpcyBwb3NzaWJsZSB3aGVuIGJvdGggdGFza3MgdHJ5IHRvIHVwZGF0ZSB0aGUgZGF0YS4gVHlwaWNhbGx5DQorICogc2VtYXBob3JlcyBhcmUgdXNlZCB0byBlbnN1cmUgb25seSBzaW5nbGUgdGFzayBhY2Nlc3MgdG8gdGhlIGRhdGEuDQorICoNCisgKiBTeW5jaHJvbml6ZWQgb2JqZWN0cyBhcmUgYSBzaW1wbGUgd3JhcHBlciBhcm91bmQgc2VtYXBob3JlcyB0byBoZWxwIGVuc3VyZQ0KKyAqIHRoYXQgc2VtYXBob3JlcyBhcmUgYWx3YXlzIHVubG9ja2VkIChzZW1HaXZlKSBhZnRlciBsb2NraW5nIChzZW1UYWtlKS4NCisgKg0KKyAqIFlvdSBhbGxvY2F0ZSBhIFN5bmNocm9uaXplZCBhcyBhIGxvY2FsIHZhcmlhYmxlLCAqbm90KiBvbiB0aGUgaGVhcC4gVGhhdA0KKyAqIG1ha2VzIGl0IGEgInN0YWNrIG9iamVjdCIgd2hvc2UgZGVzdHJ1Y3RvciBydW5zIGF1dG9tYXRpY2FsbHkgd2hlbiBpdCBnb2VzDQorICogb3V0IG9mIHNjb3BlLiBFLmcuDQorICoNCisgKiAgIHsgU3luY2hyb25pemVkIF9zeW5jKGFSZWVudHJhbnRTZW1hcGhvcmUpOyAuLi4gY3JpdGljYWwgcmVnaW9uIC4uLiB9DQorICovDQorY2xhc3MgU3luY2hyb25pemVkDQorew0KK3B1YmxpYzoNCisJZXhwbGljaXQgU3luY2hyb25pemVkKFNFTV9JRCk7DQorCWV4cGxpY2l0IFN5bmNocm9uaXplZChSZWVudHJhbnRTZW1hcGhvcmUmKTsNCisJdmlydHVhbCB+U3luY2hyb25pemVkKCk7DQorcHJpdmF0ZToNCisJU0VNX0lEIG1fc2VtYXBob3JlOw0KKw0KKwlESVNBTExPV19DT1BZX0FORF9BU1NJR04oU3luY2hyb25pemVkKTsNCit9Ow0KKw0KKyNlbmRpZg0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL1RhbG9uLmNwcCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL1RhbG9uLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NWMyZThkCi0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvVGFsb24uY3BwCkBAIC0wLDAgKzEsMTA0IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy8qIENvcHlyaWdodCAoYykgRklSU1QgMjAwOC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4JCQkJCQkJICAqLw0KKy8qIE9wZW4gU291cmNlIFNvZnR3YXJlIC0gbWF5IGJlIG1vZGlmaWVkIGFuZCBzaGFyZWQgYnkgRlJDIHRlYW1zLiBUaGUgY29kZSAgICovDQorLyogbXVzdCBiZSBhY2NvbXBhbmllZCBieSB0aGUgRklSU1QgQlNEIGxpY2Vuc2UgZmlsZSBpbiAkKFdJTkRfQkFTRSkvV1BJTGliLiAgKi8NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKyNpbmNsdWRlICJUYWxvbi5oIg0KKw0KKyNpbmNsdWRlICJEaWdpdGFsTW9kdWxlLmgiDQorI2luY2x1ZGUgIk5ldHdvcmtDb21tdW5pY2F0aW9uL1VzYWdlUmVwb3J0aW5nLmgiDQorI2luY2x1ZGUgIkxpdmVXaW5kb3cvTGl2ZVdpbmRvdy5oIg0KKw0KKy8qKg0KKyAqIENvbW1vbiBpbml0aWFsaXphdGlvbiBjb2RlIGNhbGxlZCBieSBhbGwgY29uc3RydWN0b3JzLg0KKyAqDQorICogTm90ZSB0aGF0IHRoZSBUYWxvbiB1c2VzIHRoZSBmb2xsb3dpbmcgYm91bmRzIGZvciBQV00gdmFsdWVzLiBUaGVzZSB2YWx1ZXMgc2hvdWxkIHdvcmsgcmVhc29uYWJseSB3ZWxsIGZvcg0KKyAqIG1vc3QgY29udHJvbGxlcnMsIGJ1dCBpZiB1c2VycyBleHBlcmllbmNlIGlzc3VlcyBzdWNoIGFzIGFzeW1tZXRyaWMgYmVoYXZpb3IgYXJvdW5kDQorICogdGhlIGRlYWRiYW5kIG9yIGluYWJpbGl0eSB0byBzYXR1cmF0ZSB0aGUgY29udHJvbGxlciBpbiBlaXRoZXIgZGlyZWN0aW9uLCBjYWxpYnJhdGlvbiBpcyByZWNvbW1lbmRlZC4NCisgKiBUaGUgY2FsaWJyYXRpb24gcHJvY2VkdXJlIGNhbiBiZSBmb3VuZCBpbiB0aGUgVGFsb24gVXNlciBNYW51YWwgYXZhaWxhYmxlIGZyb20gQ1RSRS4NCisgKiANCisgKiAgIC0gMjExID0gZnVsbCAiZm9yd2FyZCINCisgKiAgIC0gMTMzID0gdGhlICJoaWdoIGVuZCIgb2YgdGhlIGRlYWRiYW5kIHJhbmdlDQorICogICAtIDEyOSA9IGNlbnRlciBvZiB0aGUgZGVhZGJhbmQgcmFuZ2UgKG9mZikNCisgKiAgIC0gMTI1ID0gdGhlICJsb3cgZW5kIiBvZiB0aGUgZGVhZGJhbmQgcmFuZ2UNCisgKiAgIC0gNDkgPSBmdWxsICJyZXZlcnNlIg0KKyAqLw0KK3ZvaWQgVGFsb246OkluaXRUYWxvbigpIHsNCisJLy8gVE9ETzogY29tcHV0ZSB0aGUgYXBwcm9wcmlhdGUgdmFsdWVzIGJhc2VkIG9uIGRpZ2l0YWwgbG9vcCB0aW1pbmcNCisJU2V0Qm91bmRzKDIxMSwgMTMzLCAxMjksIDEyNSwgNDkpOw0KKwlTZXRQZXJpb2RNdWx0aXBsaWVyKGtQZXJpb2RNdWx0aXBsaWVyXzJYKTsNCisJU2V0UmF3KG1fY2VudGVyUHdtKTsNCisNCisJLy8gVE9ETzogQWRkIFRhbG9uIHRvIFVzYWdlIFJlcG9ydGluZw0KKwluVXNhZ2VSZXBvcnRpbmc6OnJlcG9ydChuVXNhZ2VSZXBvcnRpbmc6OmtSZXNvdXJjZVR5cGVfVGFsb24sIEdldENoYW5uZWwoKSwgR2V0TW9kdWxlTnVtYmVyKCkgLSAxKTsNCisJTGl2ZVdpbmRvdzo6R2V0SW5zdGFuY2UoKS0+QWRkQWN0dWF0b3IoIlRhbG9uIiwgR2V0TW9kdWxlTnVtYmVyKCksIEdldENoYW5uZWwoKSwgdGhpcyk7DQorfQ0KKw0KKy8qKg0KKyAqIENvbnN0cnVjdG9yIHRoYXQgYXNzdW1lcyB0aGUgZGVmYXVsdCBkaWdpdGFsIG1vZHVsZS4NCisgKiANCisgKiBAcGFyYW0gY2hhbm5lbCBUaGUgUFdNIGNoYW5uZWwgb24gdGhlIGRpZ2l0YWwgbW9kdWxlIHRoYXQgdGhlIFRhbG9uIGlzIGF0dGFjaGVkIHRvLg0KKyAqLw0KK1RhbG9uOjpUYWxvbihVSU5UMzIgY2hhbm5lbCkgOiBTYWZlUFdNKGNoYW5uZWwpDQorew0KKwlJbml0VGFsb24oKTsNCit9DQorDQorLyoqDQorICogQ29uc3RydWN0b3IgdGhhdCBzcGVjaWZpZXMgdGhlIGRpZ2l0YWwgbW9kdWxlLg0KKyAqIA0KKyAqIEBwYXJhbSBtb2R1bGVOdW1iZXIgVGhlIGRpZ2l0YWwgbW9kdWxlICgxIG9yIDIpLg0KKyAqIEBwYXJhbSBjaGFubmVsIFRoZSBQV00gY2hhbm5lbCBvbiB0aGUgZGlnaXRhbCBtb2R1bGUgdGhhdCB0aGUgVGFsb24gaXMgYXR0YWNoZWQgdG8gKDEuLjEwKS4NCisgKi8NCitUYWxvbjo6VGFsb24oVUlOVDggbW9kdWxlTnVtYmVyLCBVSU5UMzIgY2hhbm5lbCkgOiBTYWZlUFdNKG1vZHVsZU51bWJlciwgY2hhbm5lbCkNCit7DQorCUluaXRUYWxvbigpOw0KK30NCisNCitUYWxvbjo6flRhbG9uKCkNCit7DQorfQ0KKw0KKy8qKg0KKyAqIFNldCB0aGUgUFdNIHZhbHVlLiAgDQorICogDQorICogVGhlIFBXTSB2YWx1ZSBpcyBzZXQgdXNpbmcgYSByYW5nZSBvZiAtMS4wIHRvIDEuMCwgYXBwcm9wcmlhdGVseQ0KKyAqIHNjYWxpbmcgdGhlIHZhbHVlIGZvciB0aGUgRlBHQS4NCisgKiANCisgKiBAcGFyYW0gc3BlZWQgVGhlIHNwZWVkIHZhbHVlIGJldHdlZW4gLTEuMCBhbmQgMS4wIHRvIHNldC4NCisgKiBAcGFyYW0gc3luY0dyb3VwIFVudXNlZCBpbnRlcmZhY2UuDQorICovDQordm9pZCBUYWxvbjo6U2V0KGZsb2F0IHNwZWVkLCBVSU5UOCBzeW5jR3JvdXApDQorew0KKwlTZXRTcGVlZChzcGVlZCk7DQorfQ0KKw0KKy8qKg0KKyAqIEdldCB0aGUgcmVjZW50bHkgc2V0IHZhbHVlIG9mIHRoZSBQV00uDQorICogDQorICogQHJldHVybiBUaGUgbW9zdCByZWNlbnRseSBzZXQgdmFsdWUgZm9yIHRoZSBQV00gYmV0d2VlbiAtMS4wIGFuZCAxLjAuDQorICovDQorZmxvYXQgVGFsb246OkdldCgpDQorew0KKwlyZXR1cm4gR2V0U3BlZWQoKTsNCit9DQorDQorLyoqDQorICogQ29tbW9uIGludGVyZmFjZSBmb3IgZGlzYWJsaW5nIGEgbW90b3IuDQorICovDQordm9pZCBUYWxvbjo6RGlzYWJsZSgpDQorew0KKwlTZXRSYXcoa1B3bURpc2FibGVkKTsNCit9DQorDQorLyoqDQorICogV3JpdGUgb3V0IHRoZSBQSUQgdmFsdWUgYXMgc2VlbiBpbiB0aGUgUElET3V0cHV0IGJhc2Ugb2JqZWN0Lg0KKyAqIA0KKyAqIEBwYXJhbSBvdXRwdXQgV3JpdGUgb3V0IHRoZSBQV00gdmFsdWUgYXMgd2FzIGZvdW5kIGluIHRoZSBQSURDb250cm9sbGVyDQorICovDQordm9pZCBUYWxvbjo6UElEV3JpdGUoZmxvYXQgb3V0cHV0KSANCit7DQorCVNldChvdXRwdXQpOw0KK30NCisNCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9UYWxvbi5oIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvVGFsb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZDJhZGUyCi0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvVGFsb24uaApAQCAtMCwwICsxLDM0IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy8qIENvcHlyaWdodCAoYykgRklSU1QgMjAwOC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4JCQkJCQkJICAqLw0KKy8qIE9wZW4gU291cmNlIFNvZnR3YXJlIC0gbWF5IGJlIG1vZGlmaWVkIGFuZCBzaGFyZWQgYnkgRlJDIHRlYW1zLiBUaGUgY29kZSAgICovDQorLyogbXVzdCBiZSBhY2NvbXBhbmllZCBieSB0aGUgRklSU1QgQlNEIGxpY2Vuc2UgZmlsZSBpbiAkKFdJTkRfQkFTRSkvV1BJTGliLiAgKi8NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKyNpZm5kZWYgVGFsb25fSA0KKyNkZWZpbmUgVGFsb25fSA0KKw0KKyNpbmNsdWRlICJTYWZlUFdNLmgiDQorI2luY2x1ZGUgIlNwZWVkQ29udHJvbGxlci5oIg0KKyNpbmNsdWRlICJQSURPdXRwdXQuaCINCisNCisvKioNCisgKiBDVFJFIFRhbG9uIFNwZWVkIENvbnRyb2xsZXINCisgKi8NCitjbGFzcyBUYWxvbiA6IHB1YmxpYyBTYWZlUFdNLCBwdWJsaWMgU3BlZWRDb250cm9sbGVyDQorew0KK3B1YmxpYzoNCisJZXhwbGljaXQgVGFsb24oVUlOVDMyIGNoYW5uZWwpOw0KKwlUYWxvbihVSU5UOCBtb2R1bGVOdW1iZXIsIFVJTlQzMiBjaGFubmVsKTsNCisJdmlydHVhbCB+VGFsb24oKTsNCisJdmlydHVhbCB2b2lkIFNldChmbG9hdCB2YWx1ZSwgVUlOVDggc3luY0dyb3VwPTApOw0KKwl2aXJ0dWFsIGZsb2F0IEdldCgpOw0KKwl2aXJ0dWFsIHZvaWQgRGlzYWJsZSgpOw0KKw0KKwl2aXJ0dWFsIHZvaWQgUElEV3JpdGUoZmxvYXQgb3V0cHV0KTsNCisNCitwcml2YXRlOg0KKwl2b2lkIEluaXRUYWxvbigpOw0KK307DQorDQorI2VuZGlmDQorDQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvVGFzay5jcHAgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9UYXNrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOGU1ZDA1Ci0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvVGFzay5jcHAKQEAgLTAsMCArMSwyMTYgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorLyogQ29weXJpZ2h0IChjKSBGSVJTVCAyMDA4LiBBbGwgUmlnaHRzIFJlc2VydmVkLgkJCQkJCQkgICovDQorLyogT3BlbiBTb3VyY2UgU29mdHdhcmUgLSBtYXkgYmUgbW9kaWZpZWQgYW5kIHNoYXJlZCBieSBGUkMgdGVhbXMuIFRoZSBjb2RlICAgKi8NCisvKiBtdXN0IGJlIGFjY29tcGFuaWVkIGJ5IHRoZSBGSVJTVCBCU0QgbGljZW5zZSBmaWxlIGluICQoV0lORF9CQVNFKS9XUElMaWIuICAqLw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorI2luY2x1ZGUgIlRhc2suaCINCisNCisjaW5jbHVkZSAiTmV0d29ya0NvbW11bmljYXRpb24vVXNhZ2VSZXBvcnRpbmcuaCINCisjaW5jbHVkZSAiV1BJRXJyb3JzLmgiDQorI2luY2x1ZGUgPGVycm5vTGliLmg+DQorI2luY2x1ZGUgPHN0cmluZy5oPg0KKyNpbmNsdWRlIDx0YXNrTGliLmg+DQorI2luY2x1ZGUgPHVzckxpYi5oPg0KKw0KK2NvbnN0IFVJTlQzMiBUYXNrOjprRGVmYXVsdFByaW9yaXR5Ow0KK2NvbnN0IElOVDMyIFRhc2s6OmtJbnZhbGlkVGFza0lEOw0KKw0KKy8qKg0KKyAqIENyZWF0ZSBidXQgZG9uJ3QgbGF1bmNoIGEgdGFzay4NCisgKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgdGFzay4gICJGUkNfIiB3aWxsIGJlIHByZXBlbmRlZCB0byB0aGUgdGFzayBuYW1lLg0KKyAqIEBwYXJhbSBmdW5jdGlvbiBUaGUgYWRkcmVzcyBvZiB0aGUgZnVuY3Rpb24gdG8gcnVuIGFzIHRoZSBuZXcgdGFzay4NCisgKiBAcGFyYW0gcHJpb3JpdHkgVGhlIFZ4V29ya3MgcHJpb3JpdHkgZm9yIHRoZSB0YXNrLg0KKyAqIEBwYXJhbSBzdGFja1NpemUgVGhlIHNpemUgb2YgdGhlIHN0YWNrIGZvciB0aGUgdGFzaw0KKyAqLw0KK1Rhc2s6OlRhc2soY29uc3QgY2hhciogbmFtZSwgRlVOQ1BUUiBmdW5jdGlvbiwgSU5UMzIgcHJpb3JpdHksIFVJTlQzMiBzdGFja1NpemUpDQorew0KKwltX3Rhc2tJRCA9IGtJbnZhbGlkVGFza0lEOw0KKwltX2Z1bmN0aW9uID0gZnVuY3Rpb247DQorCW1fcHJpb3JpdHkgPSBwcmlvcml0eTsNCisJbV9zdGFja1NpemUgPSBzdGFja1NpemU7DQorCW1fdGFza05hbWUgPSBuZXcgY2hhcltzdHJsZW4obmFtZSkgKyA1XTsNCisJc3RyY3B5KG1fdGFza05hbWUsICJGUkNfIik7DQorCXN0cmNweShtX3Rhc2tOYW1lKzQsIG5hbWUpOw0KKw0KKwlzdGF0aWMgSU5UMzIgaW5zdGFuY2VzID0gMDsNCisJaW5zdGFuY2VzKys7DQorCW5Vc2FnZVJlcG9ydGluZzo6cmVwb3J0KG5Vc2FnZVJlcG9ydGluZzo6a1Jlc291cmNlVHlwZV9UYXNrLCBpbnN0YW5jZXMsIDAsIG1fdGFza05hbWUpOw0KK30NCisNCitUYXNrOjp+VGFzaygpDQorew0KKwlpZiAobV90YXNrSUQgIT0ga0ludmFsaWRUYXNrSUQpIFN0b3AoKTsNCisJZGVsZXRlIFtdIG1fdGFza05hbWU7DQorCW1fdGFza05hbWUgPSBOVUxMOw0KK30NCisNCisvKioNCisgKiBTdGFydHMgdGhpcyB0YXNrLg0KKyAqIElmIGl0IGlzIGFscmVhZHkgcnVubmluZyBvciB1bmFibGUgdG8gc3RhcnQsIGl0IGZhaWxzIGFuZCByZXR1cm5zIGZhbHNlLg0KKyAqLw0KK2Jvb2wgVGFzazo6U3RhcnQoVUlOVDMyIGFyZzAsIFVJTlQzMiBhcmcxLCBVSU5UMzIgYXJnMiwgVUlOVDMyIGFyZzMsIFVJTlQzMiBhcmc0LCANCisJCVVJTlQzMiBhcmc1LCBVSU5UMzIgYXJnNiwgVUlOVDMyIGFyZzcsIFVJTlQzMiBhcmc4LCBVSU5UMzIgYXJnOSkNCit7DQorCW1fdGFza0lEID0gdGFza1NwYXduKG1fdGFza05hbWUsDQorCQkJCQkJbV9wcmlvcml0eSwNCisJCQkJCQlWWF9GUF9UQVNLLAkJCQkJCQkvLyBvcHRpb25zDQorCQkJCQkJbV9zdGFja1NpemUsCQkJCQkJLy8gc3RhY2sgc2l6ZQ0KKwkJCQkJCW1fZnVuY3Rpb24sCQkJCQkJCS8vIGZ1bmN0aW9uIHRvIHN0YXJ0DQorCQkJCQkJYXJnMCwgYXJnMSwgYXJnMiwgYXJnMywgYXJnNCwJLy8gcGFyYW1ldGVyIDEgLSBwb2ludGVyIHRvIHRoaXMgY2xhc3MNCisJCQkJCQlhcmc1LCBhcmc2LCBhcmc3LCBhcmc4LCBhcmc5KTsvLyBhZGRpdGlvbmFsIHVudXNlZCBwYXJhbWV0ZXJzDQorCWJvb2wgb2sgPSBIYW5kbGVFcnJvcihtX3Rhc2tJRCk7DQorCWlmICghb2spIG1fdGFza0lEID0ga0ludmFsaWRUYXNrSUQ7DQorCXJldHVybiBvazsNCit9DQorDQorLyoqDQorICogUmVzdGFydHMgYSBydW5uaW5nIHRhc2suDQorICogSWYgdGhlIHRhc2sgaXNuJ3Qgc3RhcnRlZCwgaXQgc3RhcnRzIGl0Lg0KKyAqIEByZXR1cm4gZmFsc2UgaWYgdGhlIHRhc2sgaXMgcnVubmluZyBhbmQgd2UgYXJlIHVuYWJsZSB0byBraWxsIHRoZSBwcmV2aW91cyBpbnN0YW5jZQ0KKyAqLw0KK2Jvb2wgVGFzazo6UmVzdGFydCgpDQorew0KKwlyZXR1cm4gSGFuZGxlRXJyb3IodGFza1Jlc3RhcnQobV90YXNrSUQpKTsNCit9DQorDQorLyoqDQorICogS2lsbHMgdGhlIHJ1bm5pbmcgdGFzay4NCisgKiBAcmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3MgZmFsc2UgaWYgdGhlIHRhc2sgZG9lc24ndCBleGlzdCBvciB3ZSBhcmUgdW5hYmxlIHRvIGtpbGwgaXQuDQorICovDQorYm9vbCBUYXNrOjpTdG9wKCkNCit7DQorCWJvb2wgb2sgPSB0cnVlOw0KKwlpZiAoVmVyaWZ5KCkpDQorCXsNCisJCW9rID0gSGFuZGxlRXJyb3IodGFza0RlbGV0ZShtX3Rhc2tJRCkpOw0KKwl9DQorCW1fdGFza0lEID0ga0ludmFsaWRUYXNrSUQ7DQorCXJldHVybiBvazsNCit9DQorDQorLyoqDQorICogUmV0dXJucyB0cnVlIGlmIHRoZSB0YXNrIGlzIHJlYWR5IHRvIGV4ZWN1dGUgKGkuZS4gbm90IHN1c3BlbmRlZCwgZGVsYXllZCwgb3IgYmxvY2tlZCkuDQorICogQHJldHVybiB0cnVlIGlmIHJlYWR5LCBmYWxzZSBpZiBub3QgcmVhZHkuDQorICovDQorYm9vbCBUYXNrOjpJc1JlYWR5KCkNCit7DQorCXJldHVybiB0YXNrSXNSZWFkeShtX3Rhc2tJRCk7DQorfQ0KKw0KKy8qKg0KKyAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgdGFzayB3YXMgZXhwbGljaXRseSBzdXNwZW5kZWQgYnkgY2FsbGluZyBTdXNwZW5kKCkNCisgKiBAcmV0dXJuIHRydWUgaWYgc3VzcGVuZGVkLCBmYWxzZSBpZiBub3Qgc3VzcGVuZGVkLg0KKyAqLw0KK2Jvb2wgVGFzazo6SXNTdXNwZW5kZWQoKQ0KK3sNCisJcmV0dXJuIHRhc2tJc1N1c3BlbmRlZChtX3Rhc2tJRCk7DQorfQ0KKw0KKy8qKg0KKyAqIFBhdXNlcyBhIHJ1bm5pbmcgdGFzay4NCisgKiBSZXR1cm5zIHRydWUgb24gc3VjY2VzcywgZmFsc2UgaWYgdW5hYmxlIHRvIHBhdXNlIG9yIHRoZSB0YXNrIGlzbid0IHJ1bm5pbmcuDQorICovDQorYm9vbCBUYXNrOjpTdXNwZW5kKCkNCit7DQorCXJldHVybiBIYW5kbGVFcnJvcih0YXNrU3VzcGVuZChtX3Rhc2tJRCkpOw0KK30NCisNCisvKioNCisgKiBSZXN1bWVzIGEgcGF1c2VkIHRhc2suDQorICogUmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3MsIGZhbHNlIGlmIHVuYWJsZSB0byByZXN1bWUgb3IgaWYgdGhlIHRhc2sgaXNuJ3QgcnVubmluZy9wYXVzZWQuDQorICovDQorYm9vbCBUYXNrOjpSZXN1bWUoKQ0KK3sNCisJcmV0dXJuIEhhbmRsZUVycm9yKHRhc2tSZXN1bWUobV90YXNrSUQpKTsNCit9DQorDQorLyoqDQorICogVmVyaWZpZXMgYSB0YXNrIHN0aWxsIGV4aXN0cy4NCisgKiBAcmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3MuDQorICovDQorYm9vbCBUYXNrOjpWZXJpZnkoKQ0KK3sNCisJcmV0dXJuIHRhc2tJZFZlcmlmeShtX3Rhc2tJRCkgPT0gT0s7DQorfQ0KKw0KKy8qKg0KKyAqIEdldHMgdGhlIHByaW9yaXR5IG9mIGEgdGFzay4NCisgKiBAcmV0dXJucyB0YXNrIHByaW9yaXR5IG9yIDAgaWYgYW4gZXJyb3Igb2NjdXJlZA0KKyAqLw0KK0lOVDMyIFRhc2s6OkdldFByaW9yaXR5KCkNCit7DQorCWlmIChIYW5kbGVFcnJvcih0YXNrUHJpb3JpdHlHZXQobV90YXNrSUQsICZtX3ByaW9yaXR5KSkpDQorCQlyZXR1cm4gbV9wcmlvcml0eTsNCisJZWxzZQ0KKwkJcmV0dXJuIDA7DQorfQ0KKw0KKy8qKg0KKyAqIFRoaXMgcm91dGluZSBjaGFuZ2VzIGEgdGFzaydzIHByaW9yaXR5IHRvIGEgc3BlY2lmaWVkIHByaW9yaXR5Lg0KKyAqIFByaW9yaXRpZXMgcmFuZ2UgZnJvbSAwLCB0aGUgaGlnaGVzdCBwcmlvcml0eSwgdG8gMjU1LCB0aGUgbG93ZXN0IHByaW9yaXR5Lg0KKyAqIERlZmF1bHQgdGFzayBwcmlvcml0eSBpcyAxMDAuDQorICogQHBhcmFtIHByaW9yaXR5IFRoZSBwcmlvcml0eSB0aGUgdGFzayBzaG91bGQgcnVuIGF0Lg0KKyAqIEByZXR1cm5zIHRydWUgb24gc3VjY2Vzcy4NCisgKi8NCitib29sIFRhc2s6OlNldFByaW9yaXR5KElOVDMyIHByaW9yaXR5KQ0KK3sNCisJbV9wcmlvcml0eSA9IHByaW9yaXR5Ow0KKwlyZXR1cm4gSGFuZGxlRXJyb3IodGFza1ByaW9yaXR5U2V0KG1fdGFza0lELCBtX3ByaW9yaXR5KSk7DQorfQ0KKw0KKy8qKg0KKyAqIFJldHVybnMgdGhlIG5hbWUgb2YgdGhlIHRhc2suDQorICogQHJldHVybnMgUG9pbnRlciB0byB0aGUgbmFtZSBvZiB0aGUgdGFzayBvciBOVUxMIGlmIG5vdCBhbGxvY2F0ZWQNCisgKi8NCitjb25zdCBjaGFyKiBUYXNrOjpHZXROYW1lKCkNCit7DQorCXJldHVybiBtX3Rhc2tOYW1lOw0KK30NCisNCisvKioNCisgKiBHZXQgdGhlIElEIG9mIGEgdGFzaw0KKyAqIEByZXR1cm5zIFRhc2sgSUQgb2YgdGhpcyB0YXNrLiAgVGFzazo6a0ludmFsaWRUYXNrSUQgKC0xKSBpZiB0aGUgdGFzayBoYXMgbm90IGJlZW4gc3RhcnRlZCBvciBoYXMgYWxyZWFkeSBleGl0ZWQuDQorICovDQorSU5UMzIgVGFzazo6R2V0SUQoKQ0KK3sNCisJaWYgKFZlcmlmeSgpKQ0KKwkJcmV0dXJuIG1fdGFza0lEOw0KKwlyZXR1cm4ga0ludmFsaWRUYXNrSUQ7DQorfQ0KKw0KKy8qKg0KKyAqIEhhbmRsZXMgZXJyb3JzIGdlbmVyYXRlZCBieSB0YXNrIHJlbGF0ZWQgY29kZS4NCisgKi8NCitib29sIFRhc2s6OkhhbmRsZUVycm9yKFNUQVRVUyByZXN1bHRzKQ0KK3sNCisJaWYgKHJlc3VsdHMgIT0gRVJST1IpIHJldHVybiB0cnVlOw0KKwlzd2l0Y2goZXJybm9HZXQoKSkNCisJew0KKwljYXNlIFNfb2JqTGliX09CSl9JRF9FUlJPUjoNCisJCXdwaV9zZXRXUElFcnJvcldpdGhDb250ZXh0KFRhc2tJREVycm9yLCBtX3Rhc2tOYW1lKTsNCisJCWJyZWFrOw0KKwkJDQorCWNhc2UgU19vYmpMaWJfT0JKX0RFTEVURUQ6DQorCQl3cGlfc2V0V1BJRXJyb3JXaXRoQ29udGV4dChUYXNrRGVsZXRlZEVycm9yLCBtX3Rhc2tOYW1lKTsNCisJCWJyZWFrOw0KKwkJDQorCWNhc2UgU190YXNrTGliX0lMTEVHQUxfT1BUSU9OUzoNCisJCXdwaV9zZXRXUElFcnJvcldpdGhDb250ZXh0KFRhc2tPcHRpb25zRXJyb3IsIG1fdGFza05hbWUpOw0KKwkJYnJlYWs7DQorCQkNCisJY2FzZSBTX21lbUxpYl9OT1RfRU5PVUdIX01FTU9SWToNCisJCXdwaV9zZXRXUElFcnJvcldpdGhDb250ZXh0KFRhc2tNZW1vcnlFcnJvciwgbV90YXNrTmFtZSk7DQorCQlicmVhazsNCisJCQ0KKwljYXNlIFNfdGFza0xpYl9JTExFR0FMX1BSSU9SSVRZOg0KKwkJd3BpX3NldFdQSUVycm9yV2l0aENvbnRleHQoVGFza1ByaW9yaXR5RXJyb3IsIG1fdGFza05hbWUpOw0KKwkJYnJlYWs7DQorDQorCWRlZmF1bHQ6DQorCQlwcmludEVycm5vKGVycm5vR2V0KCkpOw0KKwkJd3BpX3NldFdQSUVycm9yV2l0aENvbnRleHQoVGFza0Vycm9yLCBtX3Rhc2tOYW1lKTsNCisJfQ0KKwlyZXR1cm4gZmFsc2U7DQorfQ0KKw0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL1Rhc2suaCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL1Rhc2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZDc3MGVhCi0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvVGFzay5oCkBAIC0wLDAgKzEsNTQgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorLyogQ29weXJpZ2h0IChjKSBGSVJTVCAyMDA4LiBBbGwgUmlnaHRzIFJlc2VydmVkLgkJCQkJCQkgICovDQorLyogT3BlbiBTb3VyY2UgU29mdHdhcmUgLSBtYXkgYmUgbW9kaWZpZWQgYW5kIHNoYXJlZCBieSBGUkMgdGVhbXMuIFRoZSBjb2RlICAgKi8NCisvKiBtdXN0IGJlIGFjY29tcGFuaWVkIGJ5IHRoZSBGSVJTVCBCU0QgbGljZW5zZSBmaWxlIGluICQoV0lORF9CQVNFKS9XUElMaWIuICAqLw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorI2lmbmRlZiBfX1RBU0tfSF9fDQorI2RlZmluZSBfX1RBU0tfSF9fDQorDQorI2luY2x1ZGUgIkVycm9yQmFzZS5oIg0KKyNpbmNsdWRlIDx2eFdvcmtzLmg+DQorDQorLyoqDQorICogV1BJIHRhc2sgaXMgYSB3cmFwcGVyIGZvciB0aGUgbmF0aXZlIFRhc2sgb2JqZWN0Lg0KKyAqIEFsbCBXUElMaWIgdGFza3MgYXJlIG1hbmFnZWQgYnkgYSBzdGF0aWMgdGFzayBtYW5hZ2VyIGZvciBzaW1wbGlmaWVkIGNsZWFudXAuDQorICoqLw0KK2NsYXNzIFRhc2sgOiBwdWJsaWMgRXJyb3JCYXNlDQorew0KK3B1YmxpYzoNCisJc3RhdGljIGNvbnN0IFVJTlQzMiBrRGVmYXVsdFByaW9yaXR5ID0gMTAxOw0KKwlzdGF0aWMgY29uc3QgSU5UMzIga0ludmFsaWRUYXNrSUQgPSAtMTsNCisNCisJVGFzayhjb25zdCBjaGFyKiBuYW1lLCBGVU5DUFRSIGZ1bmN0aW9uLCBJTlQzMiBwcmlvcml0eSA9IGtEZWZhdWx0UHJpb3JpdHksIFVJTlQzMiBzdGFja1NpemUgPSAyMDAwMCk7DQorCXZpcnR1YWwgflRhc2soKTsNCisNCisJYm9vbCBTdGFydChVSU5UMzIgYXJnMCA9IDAsIFVJTlQzMiBhcmcxID0gMCwgVUlOVDMyIGFyZzIgPSAwLCBVSU5UMzIgYXJnMyA9IDAsIFVJTlQzMiBhcmc0ID0gMCwgDQorCQkJVUlOVDMyIGFyZzUgPSAwLCBVSU5UMzIgYXJnNiA9IDAsIFVJTlQzMiBhcmc3ID0gMCwgVUlOVDMyIGFyZzggPSAwLCBVSU5UMzIgYXJnOSA9IDApOw0KKwlib29sIFJlc3RhcnQoKTsNCisJYm9vbCBTdG9wKCk7DQorDQorCWJvb2wgSXNSZWFkeSgpOw0KKwlib29sIElzU3VzcGVuZGVkKCk7DQorDQorCWJvb2wgU3VzcGVuZCgpOw0KKwlib29sIFJlc3VtZSgpOw0KKw0KKwlib29sIFZlcmlmeSgpOw0KKw0KKwlJTlQzMiBHZXRQcmlvcml0eSgpOw0KKwlib29sIFNldFByaW9yaXR5KElOVDMyIHByaW9yaXR5KTsNCisJY29uc3QgY2hhciogR2V0TmFtZSgpOw0KKwlJTlQzMiBHZXRJRCgpOw0KKw0KK3ByaXZhdGU6DQorCUZVTkNQVFIgbV9mdW5jdGlvbjsNCisJY2hhciogbV90YXNrTmFtZTsNCisJSU5UMzIgbV90YXNrSUQ7DQorCVVJTlQzMiBtX3N0YWNrU2l6ZTsNCisJSU5UMzIgbV9wcmlvcml0eTsNCisJYm9vbCBIYW5kbGVFcnJvcihTVEFUVVMgcmVzdWx0cyk7DQorCURJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUYXNrKTsNCit9Ow0KKw0KKyNlbmRpZiAvLyBfX1RBU0tfSF9fDQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvVGltZXIuY3BwIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvVGltZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkNTgwODgKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9UaW1lci5jcHAKQEAgLTAsMCArMSwyMDMgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorLyogQ29weXJpZ2h0IChjKSBGSVJTVCAyMDA4LiBBbGwgUmlnaHRzIFJlc2VydmVkLgkJCQkJCQkgICovDQorLyogT3BlbiBTb3VyY2UgU29mdHdhcmUgLSBtYXkgYmUgbW9kaWZpZWQgYW5kIHNoYXJlZCBieSBGUkMgdGVhbXMuIFRoZSBjb2RlICAgKi8NCisvKiBtdXN0IGJlIGFjY29tcGFuaWVkIGJ5IHRoZSBGSVJTVCBCU0QgbGljZW5zZSBmaWxlIGluICQoV0lORF9CQVNFKS9XUElMaWIuICAqLw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorI2luY2x1ZGUgIlRpbWVyLmgiDQorDQorI2luY2x1ZGUgPHN5c0xpYi5oPiAvLyBmb3Igc3lzQ2xrUmF0ZUdldA0KKyNpbmNsdWRlIDx0aW1lLmg+DQorI2luY2x1ZGUgPHVzckxpYi5oPiAvLyBmb3IgdGFza0RlbGF5DQorDQorI2luY2x1ZGUgIlN5bmNocm9uaXplZC5oIg0KKyNpbmNsdWRlICJVdGlsaXR5LmgiDQorDQorLyoqDQorICogUGF1c2UgdGhlIHRhc2sgZm9yIGEgc3BlY2lmaWVkIHRpbWUuDQorICogDQorICogUGF1c2UgdGhlIGV4ZWN1dGlvbiBvZiB0aGUgcHJvZ3JhbSBmb3IgYSBzcGVjaWZpZWQgcGVyaW9kIG9mIHRpbWUgZ2l2ZW4gaW4gc2Vjb25kcy4NCisgKiBNb3RvcnMgd2lsbCBjb250aW51ZSB0byBydW4gYXQgdGhlaXIgbGFzdCBhc3NpZ25lZCB2YWx1ZXMsIGFuZCBzZW5zb3JzIHdpbGwgY29udGludWUgdG8NCisgKiB1cGRhdGUuIE9ubHkgdGhlIHRhc2sgY29udGFpbmluZyB0aGUgd2FpdCB3aWxsIHBhdXNlIHVudGlsIHRoZSB3YWl0IHRpbWUgaXMgZXhwaXJlZC4NCisgKiANCisgKiBAcGFyYW0gc2Vjb25kcyBMZW5ndGggb2YgdGltZSB0byBwYXVzZSwgaW4gc2Vjb25kcy4NCisgKi8NCit2b2lkIFdhaXQoZG91YmxlIHNlY29uZHMpDQorew0KKwlpZiAoc2Vjb25kcyA8IDAuMCkgcmV0dXJuOw0KKwl0YXNrRGVsYXkoKElOVDMyKSgoZG91YmxlKXN5c0Nsa1JhdGVHZXQoKSAqIHNlY29uZHMpKTsNCit9DQorDQorLyoNCisgKiBSZXR1cm4gdGhlIEZQR0Egc3lzdGVtIGNsb2NrIHRpbWUgaW4gc2Vjb25kcy4NCisgKiBUaGlzIGlzIGRlcHJlY2F0ZWQgYW5kIGp1c3QgZm9yd2FyZHMgdG8gVGltZXI6OkdldEZQR0FUaW1lc3RhbXAoKS4NCisgKiBAcmV0dXJucyBSb2JvdCBydW5uaW5nIHRpbWUgaW4gc2Vjb25kcy4NCisgKi8NCitkb3VibGUgR2V0Q2xvY2soKQ0KK3sNCisJcmV0dXJuIFRpbWVyOjpHZXRGUEdBVGltZXN0YW1wKCk7DQorfQ0KKw0KKy8qKg0KKyAqIEBicmllZiBHaXZlcyByZWFsLXRpbWUgY2xvY2sgc3lzdGVtIHRpbWUgd2l0aCBuYW5vc2Vjb25kIHJlc29sdXRpb24NCisgKiBAcmV0dXJuIFRoZSB0aW1lLCBqdXN0IGluIGNhc2UgeW91IHdhbnQgdGhlIHJvYm90IHRvIHN0YXJ0IGF1dG9ub21vdXMgYXQgOHBtIG9uIFNhdHVyZGF5Lg0KKyovDQorZG91YmxlIEdldFRpbWUoKSAgDQorew0KKwlzdHJ1Y3QgdGltZXNwZWMgdHA7DQorCQ0KKwljbG9ja19nZXR0aW1lKENMT0NLX1JFQUxUSU1FLCZ0cCk7DQorCWRvdWJsZSByZWFsVGltZSA9IChkb3VibGUpdHAudHZfc2VjICsgKGRvdWJsZSkoKGRvdWJsZSl0cC50dl9uc2VjKjFlLTkpOw0KKwkNCisJcmV0dXJuIChyZWFsVGltZSk7DQorfQ0KKw0KKy8qKg0KKyAqIENyZWF0ZSBhIG5ldyB0aW1lciBvYmplY3QuDQorICogDQorICogQ3JlYXRlIGEgbmV3IHRpbWVyIG9iamVjdCBhbmQgcmVzZXQgdGhlIHRpbWUgdG8gemVyby4gVGhlIHRpbWVyIGlzIGluaXRpYWxseSBub3QgcnVubmluZyBhbmQNCisgKiBtdXN0IGJlIHN0YXJ0ZWQuDQorICovDQorVGltZXI6OlRpbWVyKCkNCisJOiBtX3N0YXJ0VGltZSAoMC4wKQ0KKwksIG1fYWNjdW11bGF0ZWRUaW1lICgwLjApDQorCSwgbV9ydW5uaW5nIChmYWxzZSkNCisJLCBtX3NlbWFwaG9yZSAoMCkNCit7DQorCS8vQ3JlYXRlcyBhIHNlbWFwaG9yZSB0byBjb250cm9sIGFjY2VzcyB0byBjcml0aWNhbCByZWdpb25zLg0KKwkvL0luaXRpYWxseSAnb3BlbicNCisJbV9zZW1hcGhvcmUgPSBzZW1NQ3JlYXRlKFNFTV9RX1BSSU9SSVRZIHwgU0VNX0RFTEVURV9TQUZFIHwgU0VNX0lOVkVSU0lPTl9TQUZFKTsNCisJUmVzZXQoKTsNCit9DQorDQorVGltZXI6On5UaW1lcigpDQorew0KKwlzZW1EZWxldGUobV9zZW1hcGhvcmUpOw0KK30NCisNCisvKioNCisgKiBHZXQgdGhlIGN1cnJlbnQgdGltZSBmcm9tIHRoZSB0aW1lci4gSWYgdGhlIGNsb2NrIGlzIHJ1bm5pbmcgaXQgaXMgZGVyaXZlZCBmcm9tDQorICogdGhlIGN1cnJlbnQgc3lzdGVtIGNsb2NrIHRoZSBzdGFydCB0aW1lIHN0b3JlZCBpbiB0aGUgdGltZXIgY2xhc3MuIElmIHRoZSBjbG9jaw0KKyAqIGlzIG5vdCBydW5uaW5nLCB0aGVuIHJldHVybiB0aGUgdGltZSB3aGVuIGl0IHdhcyBsYXN0IHN0b3BwZWQuDQorICogDQorICogQHJldHVybiB1bnNpZ25lZCBDdXJyZW50IHRpbWUgdmFsdWUgZm9yIHRoaXMgdGltZXIgaW4gc2Vjb25kcw0KKyAqLw0KK2RvdWJsZSBUaW1lcjo6R2V0KCkNCit7DQorCWRvdWJsZSByZXN1bHQ7DQorCWRvdWJsZSBjdXJyZW50VGltZSA9IEdldEZQR0FUaW1lc3RhbXAoKTsNCisNCisJU3luY2hyb25pemVkIHN5bmMobV9zZW1hcGhvcmUpOw0KKwlpZihtX3J1bm5pbmcpDQorCXsNCisJCS8vIFRoaXMgbWF0aCB3b24ndCB3b3JrIGlmIHRoZSB0aW1lciByb2xsZWQgb3ZlciAoNzEgbWludXRlcyBhZnRlciBib290KS4NCisJCS8vIFRPRE86IENoZWNrIGZvciBpdCBhbmQgY29tcGVuc2F0ZS4NCisJCXJlc3VsdCA9IChjdXJyZW50VGltZSAtIG1fc3RhcnRUaW1lKSArIG1fYWNjdW11bGF0ZWRUaW1lOw0KKwl9DQorCWVsc2UNCisJew0KKwkJcmVzdWx0ID0gbV9hY2N1bXVsYXRlZFRpbWU7DQorCX0NCisNCisJcmV0dXJuIHJlc3VsdDsNCit9DQorDQorLyoqDQorICogUmVzZXQgdGhlIHRpbWVyIGJ5IHNldHRpbmcgdGhlIHRpbWUgdG8gMC4NCisgKiANCisgKiBNYWtlIHRoZSB0aW1lciBzdGFydFRpbWUgdGhlIGN1cnJlbnQgdGltZSBzbyBuZXcgcmVxdWVzdHMgd2lsbCBiZSByZWxhdGl2ZSB0byBub3cNCisgKi8NCit2b2lkIFRpbWVyOjpSZXNldCgpDQorew0KKwlTeW5jaHJvbml6ZWQgc3luYyhtX3NlbWFwaG9yZSk7DQorCW1fYWNjdW11bGF0ZWRUaW1lID0gMDsNCisJbV9zdGFydFRpbWUgPSBHZXRGUEdBVGltZXN0YW1wKCk7DQorfQ0KKw0KKy8qKg0KKyAqIFN0YXJ0IHRoZSB0aW1lciBydW5uaW5nLg0KKyAqIEp1c3Qgc2V0IHRoZSBydW5uaW5nIGZsYWcgdG8gdHJ1ZSBpbmRpY2F0aW5nIHRoYXQgYWxsIHRpbWUgcmVxdWVzdHMgc2hvdWxkIGJlDQorICogcmVsYXRpdmUgdG8gdGhlIHN5c3RlbSBjbG9jay4NCisgKi8NCit2b2lkIFRpbWVyOjpTdGFydCgpDQorew0KKwlTeW5jaHJvbml6ZWQgc3luYyhtX3NlbWFwaG9yZSk7DQorCWlmICghbV9ydW5uaW5nKQ0KKwl7DQorCQltX3N0YXJ0VGltZSA9IEdldEZQR0FUaW1lc3RhbXAoKTsNCisJCW1fcnVubmluZyA9IHRydWU7DQorCX0NCit9DQorDQorLyoqDQorICogU3RvcCB0aGUgdGltZXIuDQorICogVGhpcyBjb21wdXRlcyB0aGUgdGltZSBhcyBvZiBub3cgYW5kIGNsZWFycyB0aGUgcnVubmluZyBmbGFnLCBjYXVzaW5nIGFsbA0KKyAqIHN1YnNlcXVlbnQgdGltZSByZXF1ZXN0cyB0byBiZSByZWFkIGZyb20gdGhlIGFjY3VtdWxhdGVkIHRpbWUgcmF0aGVyIHRoYW4NCisgKiBsb29raW5nIGF0IHRoZSBzeXN0ZW0gY2xvY2suDQorICovDQordm9pZCBUaW1lcjo6U3RvcCgpDQorew0KKwlkb3VibGUgdGVtcCA9IEdldCgpOw0KKw0KKwlTeW5jaHJvbml6ZWQgc3luYyhtX3NlbWFwaG9yZSk7DQorCWlmIChtX3J1bm5pbmcpDQorCXsNCisJCW1fYWNjdW11bGF0ZWRUaW1lICs9IHRlbXA7CQ0KKwkJbV9ydW5uaW5nID0gZmFsc2U7DQorCX0NCit9DQorDQorLyoqDQorICogQ2hlY2sgaWYgdGhlIHBlcmlvZCBzcGVjaWZpZWQgaGFzIHBhc3NlZCBhbmQgaWYgaXQgaGFzLCBhZHZhbmNlIHRoZSBzdGFydA0KKyAqIHRpbWUgYnkgdGhhdCBwZXJpb2QuIFRoaXMgaXMgdXNlZnVsIHRvIGRlY2lkZSBpZiBpdCdzIHRpbWUgdG8gZG8gcGVyaW9kaWMNCisgKiB3b3JrIHdpdGhvdXQgZHJpZnRpbmcgbGF0ZXIgYnkgdGhlIHRpbWUgaXQgdG9vayB0byBnZXQgYXJvdW5kIHRvIGNoZWNraW5nLg0KKyAqDQorICogQHBhcmFtIHBlcmlvZCBUaGUgcGVyaW9kIHRvIGNoZWNrIGZvciAoaW4gc2Vjb25kcykuDQorICogQHJldHVybiBJZiB0aGUgcGVyaW9kIGhhcyBwYXNzZWQuDQorICovDQorYm9vbCBUaW1lcjo6SGFzUGVyaW9kUGFzc2VkKGRvdWJsZSBwZXJpb2QpDQorew0KKwlpZiAoR2V0KCkgPiBwZXJpb2QpDQorCXsNCisJCVN5bmNocm9uaXplZCBzeW5jKG1fc2VtYXBob3JlKTsNCisJCS8vIEFkdmFuY2UgdGhlIHN0YXJ0IHRpbWUgYnkgdGhlIHBlcmlvZC4NCisJCS8vIERvbid0IHNldCBpdCB0byB0aGUgY3VycmVudCB0aW1lLi4uIHdlIHdhbnQgdG8gYXZvaWQgZHJpZnQuDQorCQltX3N0YXJ0VGltZSArPSBwZXJpb2Q7DQorCQlyZXR1cm4gdHJ1ZTsNCisJfQ0KKwlyZXR1cm4gZmFsc2U7DQorfQ0KKw0KKy8qDQorICogUmV0dXJuIHRoZSBGUEdBIHN5c3RlbSBjbG9jayB0aW1lIGluIHNlY29uZHMuDQorICogDQorICogUmV0dXJuIHRoZSB0aW1lIGZyb20gdGhlIEZQR0EgaGFyZHdhcmUgY2xvY2sgaW4gc2Vjb25kcyBzaW5jZSB0aGUgRlBHQQ0KKyAqIHN0YXJ0ZWQuDQorICogUm9sbHMgb3ZlciBhZnRlciA3MSBtaW51dGVzLg0KKyAqIEByZXR1cm5zIFJvYm90IHJ1bm5pbmcgdGltZSBpbiBzZWNvbmRzLg0KKyAqLw0KK2RvdWJsZSBUaW1lcjo6R2V0RlBHQVRpbWVzdGFtcCgpDQorew0KKwkvLyBGUEdBIHJldHVybnMgdGhlIHRpbWVzdGFtcCBpbiBtaWNyb3NlY29uZHMNCisJLy8gQ2FsbCB0aGUgaGVscGVyIEdldEZQR0FUaW1lKCkgaW4gVXRpbGl0eS5jcHANCisJcmV0dXJuIEdldEZQR0FUaW1lKCkgKiAxLjBlLTY7DQorfQ0KKw0KKy8vIEludGVybmFsIGZ1bmN0aW9uIHRoYXQgcmVhZHMgdGhlIFBQQyB0aW1lc3RhbXAgY291bnRlci4NCitleHRlcm4gIkMiDQorew0KKwlVSU5UMzIgbmlUaW1lc3RhbXAzMih2b2lkKTsNCisJVUlOVDY0IG5pVGltZXN0YW1wNjQodm9pZCk7DQorfQ0KKw0KKy8qDQorICogUmV0dXJuIHRoZSBQb3dlclBDIHRpbWVzdGFtcCBzaW5jZSBib290IGluIHNlY29uZHMuDQorICogDQorICogVGhpcyBpcyBsb3dlciBvdmVyaGVhZCB0aGFuIEdldEZQR0FUaW1lc3RhbXAoKSBidXQgbm90IHN5bmNocm9uaXplZCB3aXRoIG90aGVyIEZQR0EgdGltZXN0YW1wcy4NCisgKiBAcmV0dXJucyBSb2JvdCBydW5uaW5nIHRpbWUgaW4gc2Vjb25kcy4NCisgKi8NCitkb3VibGUgVGltZXI6OkdldFBQQ1RpbWVzdGFtcCgpDQorew0KKwkvLyBQUEMgc3lzdGVtIGNsb2NrIGlzIDMzTUh6DQorCXJldHVybiBuaVRpbWVzdGFtcDY0KCkgLyAzMy4wZTY7DQorfQ0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL1RpbWVyLmggYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9UaW1lci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmMTU1NzIKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9UaW1lci5oCkBAIC0wLDAgKzEsNDkgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorLyogQ29weXJpZ2h0IChjKSBGSVJTVCAyMDA4LiBBbGwgUmlnaHRzIFJlc2VydmVkLgkJCQkJCQkgICovDQorLyogT3BlbiBTb3VyY2UgU29mdHdhcmUgLSBtYXkgYmUgbW9kaWZpZWQgYW5kIHNoYXJlZCBieSBGUkMgdGVhbXMuIFRoZSBjb2RlICAgKi8NCisvKiBtdXN0IGJlIGFjY29tcGFuaWVkIGJ5IHRoZSBGSVJTVCBCU0QgbGljZW5zZSBmaWxlIGluICQoV0lORF9CQVNFKS9XUElMaWIuICAqLw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorI2lmbmRlZiBUSU1FUl9IXw0KKyNkZWZpbmUgVElNRVJfSF8NCisNCisjaW5jbHVkZSAic2VtTGliLmgiDQorI2luY2x1ZGUgIkJhc2UuaCINCisNCit0eXBlZGVmIHZvaWQgKCpUaW1lckludGVycnVwdEhhbmRsZXIpKHZvaWQgKnBhcmFtKTsNCisNCit2b2lkIFdhaXQoZG91YmxlIHNlY29uZHMpOw0KK2RvdWJsZSBHZXRDbG9jaygpOw0KK2RvdWJsZSBHZXRUaW1lKCk7DQorDQorDQorLyoqDQorICogVGltZXIgb2JqZWN0cyBtZWFzdXJlIGFjY3VtdWxhdGVkIHRpbWUgaW4gc2Vjb25kcy4NCisgKiBUaGUgdGltZXIgb2JqZWN0IGZ1bmN0aW9ucyBsaWtlIGEgc3RvcHdhdGNoLiBJdCBjYW4gYmUgc3RhcnRlZCwgc3RvcHBlZCwgYW5kIGNsZWFyZWQuIFdoZW4gdGhlDQorICogdGltZXIgaXMgcnVubmluZyBpdHMgdmFsdWUgY291bnRzIHVwIGluIHNlY29uZHMuIFdoZW4gc3RvcHBlZCwgdGhlIHRpbWVyIGhvbGRzIHRoZSBjdXJyZW50DQorICogdmFsdWUuIFRoZSBpbXBsZW1lbnRhdGlvbiBzaW1wbHkgcmVjb3JkcyB0aGUgdGltZSB3aGVuIHN0YXJ0ZWQgYW5kIHN1YnRyYWN0cyB0aGUgY3VycmVudCB0aW1lDQorICogd2hlbmV2ZXIgdGhlIHZhbHVlIGlzIHJlcXVlc3RlZC4NCisgKi8NCitjbGFzcyBUaW1lcg0KK3sNCitwdWJsaWM6DQorCVRpbWVyKCk7DQorCXZpcnR1YWwgflRpbWVyKCk7DQorCWRvdWJsZSBHZXQoKTsNCisJdm9pZCBSZXNldCgpOw0KKwl2b2lkIFN0YXJ0KCk7DQorCXZvaWQgU3RvcCgpOw0KKwlib29sIEhhc1BlcmlvZFBhc3NlZChkb3VibGUgcGVyaW9kKTsNCisNCisJc3RhdGljIGRvdWJsZSBHZXRGUEdBVGltZXN0YW1wKCk7DQorCXN0YXRpYyBkb3VibGUgR2V0UFBDVGltZXN0YW1wKCk7DQorDQorcHJpdmF0ZToNCisJZG91YmxlIG1fc3RhcnRUaW1lOw0KKwlkb3VibGUgbV9hY2N1bXVsYXRlZFRpbWU7DQorCWJvb2wgbV9ydW5uaW5nOw0KKwlTRU1fSUQgbV9zZW1hcGhvcmU7DQorCURJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUaW1lcik7DQorfTsNCisNCisjZW5kaWYNCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9VbHRyYXNvbmljLmNwcCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL1VsdHJhc29uaWMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4YjM5OTEKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9VbHRyYXNvbmljLmNwcApAQCAtMCwwICsxLDM2MCBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBDb3B5cmlnaHQgKGMpIEZJUlNUIDIwMDguIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCQkJCQkJCSAgKi8NCisvKiBPcGVuIFNvdXJjZSBTb2Z0d2FyZSAtIG1heSBiZSBtb2RpZmllZCBhbmQgc2hhcmVkIGJ5IEZSQyB0ZWFtcy4gVGhlIGNvZGUgICAqLw0KKy8qIG11c3QgYmUgYWNjb21wYW5pZWQgYnkgdGhlIEZJUlNUIEJTRCBsaWNlbnNlIGZpbGUgaW4gJChXSU5EX0JBU0UpL1dQSUxpYi4gICovDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisjaW5jbHVkZSAiVWx0cmFzb25pYy5oIg0KKw0KKyNpbmNsdWRlICJDb3VudGVyLmgiDQorI2luY2x1ZGUgIkRpZ2l0YWxJbnB1dC5oIg0KKyNpbmNsdWRlICJEaWdpdGFsT3V0cHV0LmgiDQorI2luY2x1ZGUgIk5ldHdvcmtDb21tdW5pY2F0aW9uL1VzYWdlUmVwb3J0aW5nLmgiDQorI2luY2x1ZGUgIlRpbWVyLmgiDQorI2luY2x1ZGUgIlV0aWxpdHkuaCINCisjaW5jbHVkZSAiV1BJRXJyb3JzLmgiDQorI2luY2x1ZGUgIkxpdmVXaW5kb3cvTGl2ZVdpbmRvdy5oIg0KKw0KK2NvbnN0IGRvdWJsZSBVbHRyYXNvbmljOjprUGluZ1RpbWU7CS8vLzwgVGltZSAoc2VjKSBmb3IgdGhlIHBpbmcgdHJpZ2dlciBwdWxzZS4NCitjb25zdCBVSU5UMzIgVWx0cmFzb25pYzo6a1ByaW9yaXR5OwkvLy88IFByaW9yaXR5IHRoYXQgdGhlIHVsdHJhc29uaWMgcm91bmQgcm9iaW4gdGFzayBydW5zLg0KK2NvbnN0IGRvdWJsZSBVbHRyYXNvbmljOjprTWF4VWx0cmFzb25pY1RpbWU7CS8vLzwgTWF4IHRpbWUgKG1zKSBiZXR3ZWVuIHJlYWRpbmdzLg0KK2NvbnN0IGRvdWJsZSBVbHRyYXNvbmljOjprU3BlZWRPZlNvdW5kSW5jaGVzUGVyU2VjOw0KK1Rhc2sgVWx0cmFzb25pYzo6bV90YXNrKCJVbHRyYXNvbmljQ2hlY2tlciIsIChGVU5DUFRSKVVsdHJhc29uaWNDaGVja2VyKTsgLy8gdGFzayBkb2luZyB0aGUgcm91bmQtcm9iaW4gYXV0b21hdGljIHNlbnNpbmcNCitVbHRyYXNvbmljICpVbHRyYXNvbmljOjptX2ZpcnN0U2Vuc29yID0gTlVMTDsgLy8gaGVhZCBvZiB0aGUgdWx0cmFzb25pYyBzZW5zb3IgbGlzdA0KK2Jvb2wgVWx0cmFzb25pYzo6bV9hdXRvbWF0aWNFbmFibGVkID0gZmFsc2U7IC8vIGF1dG9tYXRpYyByb3VuZCByb2JpbiBtb2RlDQorU0VNX0lEIFVsdHJhc29uaWM6Om1fc2VtYXBob3JlID0gMDsNCisNCisvKioNCisgKiBCYWNrZ3JvdW5kIHRhc2sgdGhhdCBnb2VzIHRocm91Z2ggdGhlIGxpc3Qgb2YgdWx0cmFzb25pYyBzZW5zb3JzIGFuZCBwaW5ncyBlYWNoIG9uZSBpbiB0dXJuLiBUaGUgY291bnRlcg0KKyAqIGlzIGNvbmZpZ3VyZWQgdG8gcmVhZCB0aGUgdGltaW5nIG9mIHRoZSByZXR1cm5lZCBlY2hvIHB1bHNlLg0KKyAqIA0KKyAqIERBTkdFUiBXSUxMIFJPQklOU09OLCBEQU5HRVIgV0lMTCBST0JJTlNPTjoNCisgKiBUaGlzIGNvZGUgcnVucyBhcyBhIHRhc2sgYW5kIGFzc3VtZXMgdGhhdCBub25lIG9mIHRoZSB1bHRyYXNvbmljIHNlbnNvcnMgd2lsbCBjaGFuZ2Ugd2hpbGUgaXQncw0KKyAqIHJ1bm5pbmcuIElmIG9uZSBkb2VzLCB0aGVuIHRoaXMgd2lsbCBjZXJ0YWlubHkgYnJlYWsuIE1ha2Ugc3VyZSB0byBkaXNhYmxlIGF1dG9tYXRpYyBtb2RlIGJlZm9yZSBjaGFuZ2luZw0KKyAqIGFueXRoaW5nIHdpdGggdGhlIHNlbnNvcnMhIQ0KKyAqLw0KK3ZvaWQgVWx0cmFzb25pYzo6VWx0cmFzb25pY0NoZWNrZXIoKQ0KK3sNCisJVWx0cmFzb25pYyAqdSA9IE5VTEw7DQorCXdoaWxlIChtX2F1dG9tYXRpY0VuYWJsZWQpDQorCXsNCisJCWlmICh1ID09IE5VTEwpIHUgPSBtX2ZpcnN0U2Vuc29yOw0KKwkJaWYgKHUgPT0gTlVMTCkgcmV0dXJuOw0KKwkJaWYgKHUtPklzRW5hYmxlZCgpKQ0KKwkJCXUtPm1fcGluZ0NoYW5uZWwtPlB1bHNlKGtQaW5nVGltZSk7CS8vIGRvIHRoZSBwaW5nDQorCQl1ID0gdS0+bV9uZXh0U2Vuc29yOw0KKwkJV2FpdCgwLjEpOwkJCQkJCQkvLyB3YWl0IGZvciBwaW5nIHRvIHJldHVybg0KKwl9DQorfQ0KKw0KKy8qKg0KKyAqIEluaXRpYWxpemUgdGhlIFVsdHJhc29uaWMgU2Vuc29yLg0KKyAqIFRoaXMgaXMgdGhlIGNvbW1vbiBjb2RlIHRoYXQgaW5pdGlhbGl6ZXMgdGhlIHVsdHJhc29uaWMgc2Vuc29yIGdpdmVuIHRoYXQgdGhlcmUNCisgKiBhcmUgdHdvIGRpZ2l0YWwgSS9PIGNoYW5uZWxzIGFsbG9jYXRlZC4gSWYgdGhlIHN5c3RlbSB3YXMgcnVubmluZyBpbiBhdXRvbWF0aWMgbW9kZSAocm91bmQgcm9iaW4pDQorICogd2hlbiB0aGUgbmV3IHNlbnNvciBpcyBhZGRlZCwgaXQgaXMgc3RvcHBlZCwgdGhlIHNlbnNvciBpcyBhZGRlZCwgdGhlbiBhdXRvbWF0aWMgbW9kZSBpcw0KKyAqIHJlc3RvcmVkLg0KKyAqLw0KK3ZvaWQgVWx0cmFzb25pYzo6SW5pdGlhbGl6ZSgpDQorew0KKwlib29sIG9yaWdpbmFsTW9kZSA9IG1fYXV0b21hdGljRW5hYmxlZDsNCisJaWYgKG1fc2VtYXBob3JlID09IDApIG1fc2VtYXBob3JlID0gc2VtQkNyZWF0ZShTRU1fUV9QUklPUklUWSwgU0VNX0ZVTEwpOw0KKwlTZXRBdXRvbWF0aWNNb2RlKGZhbHNlKTsgLy8ga2lsbCB0YXNrIHdoZW4gYWRkaW5nIGEgbmV3IHNlbnNvcg0KKwlzZW1UYWtlKG1fc2VtYXBob3JlLCBXQUlUX0ZPUkVWRVIpOyAvLyBsaW5rIHRoaXMgaW5zdGFuY2Ugb24gdGhlIGxpc3QNCisJew0KKwkJbV9uZXh0U2Vuc29yID0gbV9maXJzdFNlbnNvcjsNCisJCW1fZmlyc3RTZW5zb3IgPSB0aGlzOw0KKwl9DQorCXNlbUdpdmUobV9zZW1hcGhvcmUpOw0KKw0KKwltX2NvdW50ZXIgPSBuZXcgQ291bnRlcihtX2VjaG9DaGFubmVsKTsgLy8gc2V0IHVwIGNvdW50ZXIgZm9yIHRoaXMgc2Vuc29yDQorCW1fY291bnRlci0+U2V0TWF4UGVyaW9kKDEuMCk7DQorCW1fY291bnRlci0+U2V0U2VtaVBlcmlvZE1vZGUodHJ1ZSk7DQorCW1fY291bnRlci0+UmVzZXQoKTsNCisJbV9jb3VudGVyLT5TdGFydCgpOw0KKwltX2VuYWJsZWQgPSB0cnVlOyAvLyBtYWtlIGl0IGF2YWlsYWJsZSBmb3Igcm91bmQgcm9iaW4gc2NoZWR1bGluZw0KKwlTZXRBdXRvbWF0aWNNb2RlKG9yaWdpbmFsTW9kZSk7DQorDQorCXN0YXRpYyBpbnQgaW5zdGFuY2VzID0gMDsNCisJaW5zdGFuY2VzKys7DQorCW5Vc2FnZVJlcG9ydGluZzo6cmVwb3J0KG5Vc2FnZVJlcG9ydGluZzo6a1Jlc291cmNlVHlwZV9VbHRyYXNvbmljLCBpbnN0YW5jZXMpOw0KKwlMaXZlV2luZG93OjpHZXRJbnN0YW5jZSgpLT5BZGRTZW5zb3IoIlVsdHJhc29uaWMiLCBtX2VjaG9DaGFubmVsLT5HZXRNb2R1bGVGb3JSb3V0aW5nKCksIG1fZWNob0NoYW5uZWwtPkdldENoYW5uZWwoKSwgdGhpcyk7DQorfQ0KKw0KKy8qKg0KKyAqIENyZWF0ZSBhbiBpbnN0YW5jZSBvZiB0aGUgVWx0cmFzb25pYyBTZW5zb3IgdXNpbmcgdGhlIGRlZmF1bHQgbW9kdWxlLg0KKyAqIFRoaXMgaXMgZGVzaWduZWQgdG8gc3VwY2hhbm5lbCB0aGUgRGF2ZW50ZWNoIFNSRjA0IGFuZCBWZXggdWx0cmFzb25pYyBzZW5zb3JzLiBUaGlzDQorICogY29uc3RydWN0b3IgYXNzdW1lcyB0aGF0IGJvdGggZGlnaXRhbCBJL08gY2hhbm5lbHMgYXJlIGluIHRoZSBkZWZhdWx0IGRpZ2l0YWwgbW9kdWxlLg0KKyAqIEBwYXJhbSBwaW5nQ2hhbm5lbCBUaGUgZGlnaXRhbCBvdXRwdXQgY2hhbm5lbCB0aGF0IHNlbmRzIHRoZSBwdWxzZSB0byBpbml0aWF0ZSB0aGUgc2Vuc29yIHNlbmRpbmcNCisgKiB0aGUgcGluZy4NCisgKiBAcGFyYW0gZWNob0NoYW5uZWwgVGhlIGRpZ2l0YWwgaW5wdXQgY2hhbm5lbCB0aGF0IHJlY2VpdmVzIHRoZSBlY2hvLiBUaGUgbGVuZ3RoIG9mIHRpbWUgdGhhdCB0aGUNCisgKiBlY2hvIGlzIGhpZ2ggcmVwcmVzZW50cyB0aGUgcm91bmQgdHJpcCB0aW1lIG9mIHRoZSBwaW5nLCBhbmQgdGhlIGRpc3RhbmNlLg0KKyAqIEBwYXJhbSB1bml0cyBUaGUgdW5pdHMgcmV0dXJuZWQgaW4gZWl0aGVyIGtJbmNoZXMgb3Iga01pbGxpTWV0ZXJzDQorICovDQorVWx0cmFzb25pYzo6VWx0cmFzb25pYyhVSU5UMzIgcGluZ0NoYW5uZWwsIFVJTlQzMiBlY2hvQ2hhbm5lbCwgRGlzdGFuY2VVbml0IHVuaXRzKQ0KK3sNCisJbV9waW5nQ2hhbm5lbCA9IG5ldyBEaWdpdGFsT3V0cHV0KHBpbmdDaGFubmVsKTsNCisJbV9lY2hvQ2hhbm5lbCA9IG5ldyBEaWdpdGFsSW5wdXQoZWNob0NoYW5uZWwpOw0KKwltX2FsbG9jYXRlZENoYW5uZWxzID0gdHJ1ZTsNCisJbV91bml0cyA9IHVuaXRzOw0KKwlJbml0aWFsaXplKCk7DQorfQ0KKw0KKy8qKg0KKyAqIENyZWF0ZSBhbiBpbnN0YW5jZSBvZiBhbiBVbHRyYXNvbmljIFNlbnNvciBmcm9tIGEgRGlnaXRhbElucHV0IGZvciB0aGUgZWNobyBjaGFubmVsIGFuZCBhIERpZ2l0YWxPdXRwdXQNCisgKiBmb3IgdGhlIHBpbmcgY2hhbm5lbC4NCisgKiBAcGFyYW0gcGluZ0NoYW5uZWwgVGhlIGRpZ2l0YWwgb3V0cHV0IG9iamVjdCB0aGF0IHN0YXJ0cyB0aGUgc2Vuc29yIGRvaW5nIGEgcGluZy4gUmVxdWlyZXMgYSAxMHVTIHB1bHNlIHRvIHN0YXJ0Lg0KKyAqIEBwYXJhbSBlY2hvQ2hhbm5lbCBUaGUgZGlnaXRhbCBpbnB1dCBvYmplY3QgdGhhdCB0aW1lcyB0aGUgcmV0dXJuIHB1bHNlIHRvIGRldGVybWluZSB0aGUgcmFuZ2UuDQorICogQHBhcmFtIHVuaXRzIFRoZSB1bml0cyByZXR1cm5lZCBpbiBlaXRoZXIga0luY2hlcyBvciBrTWlsbGlNZXRlcnMNCisgKi8NCitVbHRyYXNvbmljOjpVbHRyYXNvbmljKERpZ2l0YWxPdXRwdXQgKnBpbmdDaGFubmVsLCBEaWdpdGFsSW5wdXQgKmVjaG9DaGFubmVsLCBEaXN0YW5jZVVuaXQgdW5pdHMpDQorew0KKwlpZiAocGluZ0NoYW5uZWwgPT0gTlVMTCB8fCBlY2hvQ2hhbm5lbCA9PSBOVUxMKQ0KKwl7DQorCQl3cGlfc2V0V1BJRXJyb3IoTnVsbFBhcmFtZXRlcik7DQorCQlyZXR1cm47DQorCX0NCisJbV9hbGxvY2F0ZWRDaGFubmVscyA9IGZhbHNlOw0KKwltX3BpbmdDaGFubmVsID0gcGluZ0NoYW5uZWw7DQorCW1fZWNob0NoYW5uZWwgPSBlY2hvQ2hhbm5lbDsNCisJbV91bml0cyA9IHVuaXRzOw0KKwlJbml0aWFsaXplKCk7DQorfQ0KKw0KKy8qKg0KKyAqIENyZWF0ZSBhbiBpbnN0YW5jZSBvZiBhbiBVbHRyYXNvbmljIFNlbnNvciBmcm9tIGEgRGlnaXRhbElucHV0IGZvciB0aGUgZWNobyBjaGFubmVsIGFuZCBhIERpZ2l0YWxPdXRwdXQNCisgKiBmb3IgdGhlIHBpbmcgY2hhbm5lbC4NCisgKiBAcGFyYW0gcGluZ0NoYW5uZWwgVGhlIGRpZ2l0YWwgb3V0cHV0IG9iamVjdCB0aGF0IHN0YXJ0cyB0aGUgc2Vuc29yIGRvaW5nIGEgcGluZy4gUmVxdWlyZXMgYSAxMHVTIHB1bHNlIHRvIHN0YXJ0Lg0KKyAqIEBwYXJhbSBlY2hvQ2hhbm5lbCBUaGUgZGlnaXRhbCBpbnB1dCBvYmplY3QgdGhhdCB0aW1lcyB0aGUgcmV0dXJuIHB1bHNlIHRvIGRldGVybWluZSB0aGUgcmFuZ2UuDQorICogQHBhcmFtIHVuaXRzIFRoZSB1bml0cyByZXR1cm5lZCBpbiBlaXRoZXIga0luY2hlcyBvciBrTWlsbGlNZXRlcnMNCisgKi8NCitVbHRyYXNvbmljOjpVbHRyYXNvbmljKERpZ2l0YWxPdXRwdXQgJnBpbmdDaGFubmVsLCBEaWdpdGFsSW5wdXQgJmVjaG9DaGFubmVsLCBEaXN0YW5jZVVuaXQgdW5pdHMpDQorew0KKwltX2FsbG9jYXRlZENoYW5uZWxzID0gZmFsc2U7DQorCW1fcGluZ0NoYW5uZWwgPSAmcGluZ0NoYW5uZWw7DQorCW1fZWNob0NoYW5uZWwgPSAmZWNob0NoYW5uZWw7DQorCW1fdW5pdHMgPSB1bml0czsNCisJSW5pdGlhbGl6ZSgpOw0KK30NCisNCisvKioNCisgKiBDcmVhdGUgYW4gaW5zdGFuY2Ugb2YgdGhlIFVsdHJhc29uaWMgc2Vuc29yIHVzaW5nIHNwZWNpZmllZCBtb2R1bGVzLg0KKyAqIFRoaXMgaXMgZGVzaWduZWQgdG8gc3VwY2hhbm5lbCB0aGUgRGF2ZW50ZWNoIFNSRjA0IGFuZCBWZXggdWx0cmFzb25pYyBzZW5zb3JzLiBUaGlzDQorICogY29uc3RydWN0b3JzIHRha2VzIHRoZSBjaGFubmVsIGFuZCBtb2R1bGUgc2xvdCBmb3IgZWFjaCBvZiB0aGUgcmVxdWlyZWQgZGlnaXRhbCBJL08gY2hhbm5lbHMuDQorICogQHBhcmFtIHBpbmdNb2R1bGVOdW1iZXIgVGhlIGRpZ2l0YWwgbW9kdWxlIHRoYXQgdGhlIHBpbmdDaGFubmVsIGlzIG9uLg0KKyAqIEBwYXJhbSBwaW5nQ2hhbm5lbCBUaGUgZGlnaXRhbCBvdXRwdXQgY2hhbm5lbCB0aGF0IHNlbmRzIHRoZSBwdWxzZSB0byBpbml0aWF0ZSB0aGUgc2Vuc29yDQorICogc2VuZGluZyB0aGUgcGluZy4NCisgKiBAcGFyYW0gZWNob01vZHVsZU51bWJlciBUaGUgZGlnaXRhbCBtb2R1bGUgdGhhdCB0aGUgZWNob0NoYW5uZWwgaXMgb24uDQorICogQHBhcmFtIGVjaG9DaGFubmVsIFRoZSBkaWdpdGFsIGlucHV0IGNoYW5uZWwgdGhhdCByZWNlaXZlcyB0aGUgZWNoby4gVGhlIGxlbmd0aCBvZiB0aW1lDQorICogdGhhdCB0aGUgZWNobyBpcyBoaWdoIHJlcHJlc2VudHMgdGhlIHJvdW5kIHRyaXAgdGltZSBvZiB0aGUgcGluZywgYW5kIHRoZSBkaXN0YW5jZS4NCisgKiBAcGFyYW0gdW5pdHMgVGhlIHVuaXRzIHJldHVybmVkIGluIGVpdGhlciBrSW5jaGVzIG9yIGtNaWxsaU1ldGVycw0KKyAqLw0KK1VsdHJhc29uaWM6OlVsdHJhc29uaWMoVUlOVDggcGluZ01vZHVsZU51bWJlciwgVUlOVDMyIHBpbmdDaGFubmVsLA0KKwkJVUlOVDggZWNob01vZHVsZU51bWJlciwgVUlOVDMyIGVjaG9DaGFubmVsLCBEaXN0YW5jZVVuaXQgdW5pdHMpDQorew0KKwltX3BpbmdDaGFubmVsID0gbmV3IERpZ2l0YWxPdXRwdXQocGluZ01vZHVsZU51bWJlciwgcGluZ0NoYW5uZWwpOw0KKwltX2VjaG9DaGFubmVsID0gbmV3IERpZ2l0YWxJbnB1dChlY2hvTW9kdWxlTnVtYmVyLCBlY2hvQ2hhbm5lbCk7DQorCW1fYWxsb2NhdGVkQ2hhbm5lbHMgPSB0cnVlOw0KKwltX3VuaXRzID0gdW5pdHM7DQorCUluaXRpYWxpemUoKTsNCit9DQorDQorLyoqDQorICogRGVzdHJ1Y3RvciBmb3IgdGhlIHVsdHJhc29uaWMgc2Vuc29yLg0KKyAqIERlbGV0ZSB0aGUgaW5zdGFuY2Ugb2YgdGhlIHVsdHJhc29uaWMgc2Vuc29yIGJ5IGZyZWVpbmcgdGhlIGFsbG9jYXRlZCBkaWdpdGFsIGNoYW5uZWxzLg0KKyAqIElmIHRoZSBzeXN0ZW0gd2FzIGluIGF1dG9tYXRpYyBtb2RlIChyb3VuZCByb2JpbiksIHRoZW4gaXQgaXMgc3RvcHBlZCwgdGhlbiBzdGFydGVkIGFnYWluDQorICogYWZ0ZXIgdGhpcyBzZW5zb3IgaXMgcmVtb3ZlZCAocHJvdmlkZWQgdGhpcyB3YXNuJ3QgdGhlIGxhc3Qgc2Vuc29yKS4NCisgKi8NCitVbHRyYXNvbmljOjp+VWx0cmFzb25pYygpDQorew0KKwlib29sIHdhc0F1dG9tYXRpY01vZGUgPSBtX2F1dG9tYXRpY0VuYWJsZWQ7DQorCVNldEF1dG9tYXRpY01vZGUoZmFsc2UpOw0KKwlpZiAobV9hbGxvY2F0ZWRDaGFubmVscykNCisJew0KKwkJZGVsZXRlIG1fcGluZ0NoYW5uZWw7DQorCQlkZWxldGUgbV9lY2hvQ2hhbm5lbDsNCisJfQ0KKwl3cGlfYXNzZXJ0KG1fZmlyc3RTZW5zb3IgIT0gTlVMTCk7DQorDQorCXNlbVRha2UobV9zZW1hcGhvcmUsIFdBSVRfRk9SRVZFUik7DQorCXsNCisJCWlmICh0aGlzID09IG1fZmlyc3RTZW5zb3IpDQorCQl7DQorCQkJbV9maXJzdFNlbnNvciA9IG1fbmV4dFNlbnNvcjsNCisJCQlpZiAobV9maXJzdFNlbnNvciA9PSBOVUxMKQ0KKwkJCXsNCisJCQkJU2V0QXV0b21hdGljTW9kZShmYWxzZSk7DQorCQkJfQ0KKwkJfQ0KKwkJZWxzZQ0KKwkJew0KKwkJCXdwaV9hc3NlcnQobV9maXJzdFNlbnNvci0+bV9uZXh0U2Vuc29yICE9IE5VTEwpOw0KKwkJCWZvciAoVWx0cmFzb25pYyAqcyA9IG1fZmlyc3RTZW5zb3I7IHMgIT0gTlVMTDsgcyA9IHMtPm1fbmV4dFNlbnNvcikNCisJCQl7DQorCQkJCWlmICh0aGlzID09IHMtPm1fbmV4dFNlbnNvcikNCisJCQkJew0KKwkJCQkJcy0+bV9uZXh0U2Vuc29yID0gcy0+bV9uZXh0U2Vuc29yLT5tX25leHRTZW5zb3I7DQorCQkJCQlicmVhazsNCisJCQkJfQ0KKwkJCX0NCisJCX0NCisJfQ0KKwlzZW1HaXZlKG1fc2VtYXBob3JlKTsNCisJaWYgKG1fZmlyc3RTZW5zb3IgIT0gTlVMTCAmJiB3YXNBdXRvbWF0aWNNb2RlKQ0KKwkJU2V0QXV0b21hdGljTW9kZSh0cnVlKTsNCit9DQorDQorLyoqDQorICogVHVybiBBdXRvbWF0aWMgbW9kZSBvbi9vZmYuDQorICogV2hlbiBpbiBBdXRvbWF0aWMgbW9kZSwgYWxsIHNlbnNvcnMgd2lsbCBmaXJlIGluIHJvdW5kIHJvYmluLCB3YWl0aW5nIGEgc2V0DQorICogdGltZSBiZXR3ZWVuIGVhY2ggc2Vuc29yLg0KKyAqIEBwYXJhbSBlbmFibGluZyBTZXQgdG8gdHJ1ZSBpZiByb3VuZCByb2JpbiBzY2hlZHVsaW5nIHNob3VsZCBzdGFydCBmb3IgYWxsIHRoZSB1bHRyYXNvbmljIHNlbnNvcnMuIFRoaXMNCisgKiBzY2hlZHVsaW5nIG1ldGhvZCBhc3N1cmVzIHRoYXQgdGhlIHNlbnNvcnMgYXJlIG5vbi1pbnRlcmZlcmluZyBiZWNhdXNlIG5vIHR3byBzZW5zb3JzIGZpcmUgYXQgdGhlIHNhbWUgdGltZS4NCisgKiBJZiBhbm90aGVyIHNjaGVkdWxpbmcgYWxnb3JpdGhtIGlzIHByZWZmZXJlZCwgaXQgY2FuIGJlIGltcGxlbWVudGVkIGJ5IHBpbmdpbmcgdGhlIHNlbnNvcnMgbWFudWFsbHkgYW5kIHdhaXRpbmcNCisgKiBmb3IgdGhlIHJlc3VsdHMgdG8gY29tZSBiYWNrLg0KKyAqLw0KK3ZvaWQgVWx0cmFzb25pYzo6U2V0QXV0b21hdGljTW9kZShib29sIGVuYWJsaW5nKQ0KK3sNCisJaWYgKGVuYWJsaW5nID09IG1fYXV0b21hdGljRW5hYmxlZCkNCisJCXJldHVybjsgLy8gaWdub3JlIHRoZSBjYXNlIG9mIG5vIGNoYW5nZQ0KKw0KKwltX2F1dG9tYXRpY0VuYWJsZWQgPSBlbmFibGluZzsNCisJaWYgKGVuYWJsaW5nKQ0KKwl7DQorCQkvLyBlbmFibGluZyBhdXRvbWF0aWMgbW9kZS4NCisJCS8vIENsZWFyIGFsbCB0aGUgY291bnRlcnMgc28gbm8gZGF0YSBpcyB2YWxpZA0KKwkJZm9yIChVbHRyYXNvbmljICp1ID0gbV9maXJzdFNlbnNvcjsgdSAhPSBOVUxMOyB1ID0gdS0+bV9uZXh0U2Vuc29yKQ0KKwkJew0KKwkJCXUtPm1fY291bnRlci0+UmVzZXQoKTsNCisJCX0NCisJCS8vIFN0YXJ0IHJvdW5kIHJvYmluIHRhc2sNCisJCXdwaV9hc3NlcnQobV90YXNrLlZlcmlmeSgpID09IGZhbHNlKTsJLy8gc2hvdWxkIGJlIGZhbHNlIHNpbmNlIHdhcyBwcmV2aW91c2x5IGRpc2FibGVkDQorCQltX3Rhc2suU3RhcnQoKTsNCisJfQ0KKwllbHNlDQorCXsNCisJCS8vIGRpc2FibGluZyBhdXRvbWF0aWMgbW9kZS4gV2FpdCBmb3IgYmFja2dyb3VuZCB0YXNrIHRvIHN0b3AgcnVubmluZy4NCisJCXdoaWxlIChtX3Rhc2suVmVyaWZ5KCkpDQorCQkJV2FpdCgwLjE1KTsJLy8ganVzdCBhIGxpdHRsZSBsb25nZXIgdGhhbiB0aGUgcGluZyB0aW1lIGZvciByb3VuZC1yb2JpbiB0byBzdG9wDQorDQorCQkvLyBjbGVhciBhbGwgdGhlIGNvdW50ZXJzIChkYXRhIG5vdyBpbnZhbGlkKSBzaW5jZSBhdXRvbWF0aWMgbW9kZSBpcyBzdG9wcGVkDQorCQlmb3IgKFVsdHJhc29uaWMgKnUgPSBtX2ZpcnN0U2Vuc29yOyB1ICE9IE5VTEw7IHUgPSB1LT5tX25leHRTZW5zb3IpDQorCQl7DQorCQkJdS0+bV9jb3VudGVyLT5SZXNldCgpOw0KKwkJfQ0KKwkJbV90YXNrLlN0b3AoKTsNCisJfQ0KK30NCisNCisvKioNCisgKiBTaW5nbGUgcGluZyB0byB1bHRyYXNvbmljIHNlbnNvci4NCisgKiBTZW5kIG91dCBhIHNpbmdsZSBwaW5nIHRvIHRoZSB1bHRyYXNvbmljIHNlbnNvci4gVGhpcyBvbmx5IHdvcmtzIGlmIGF1dG9tYXRpYyAocm91bmQgcm9iaW4pDQorICogbW9kZSBpcyBkaXNhYmxlZC4gQSBzaW5nbGUgcGluZyBpcyBzZW50IG91dCwgYW5kIHRoZSBjb3VudGVyIHNob3VsZCBjb3VudCB0aGUgc2VtaS1wZXJpb2QNCisgKiB3aGVuIGl0IGNvbWVzIGluLiBUaGUgY291bnRlciBpcyByZXNldCB0byBtYWtlIHRoZSBjdXJyZW50IHZhbHVlIGludmFsaWQuDQorICovDQordm9pZCBVbHRyYXNvbmljOjpQaW5nKCkNCit7DQorCS8vIFRPRE86IEVpdGhlciBhc3NlcnQgb3IgZGlzYWJsZSwgbm90IGJvdGguDQorCXdwaV9hc3NlcnQoIW1fYXV0b21hdGljRW5hYmxlZCk7DQorCVNldEF1dG9tYXRpY01vZGUoZmFsc2UpOyAvLyB0dXJuIG9mZiBhdXRvbWF0aWMgcm91bmQgcm9iaW4gaWYgcGluZ2luZyBzaW5nbGUgc2Vuc29yDQorCW1fY291bnRlci0+UmVzZXQoKTsgLy8gcmVzZXQgdGhlIGNvdW50ZXIgdG8gemVybyAoaW52YWxpZCBkYXRhIG5vdykNCisJbV9waW5nQ2hhbm5lbC0+UHVsc2Uoa1BpbmdUaW1lKTsgLy8gZG8gdGhlIHBpbmcgdG8gc3RhcnQgZ2V0dGluZyBhIHNpbmdsZSByYW5nZQ0KK30NCisNCisvKioNCisgKiBDaGVjayBpZiB0aGVyZSBpcyBhIHZhbGlkIHJhbmdlIG1lYXN1cmVtZW50Lg0KKyAqIFRoZSByYW5nZXMgYXJlIGFjY3VtdWxhdGVkIGluIGEgY291bnRlciB0aGF0IHdpbGwgaW5jcmVtZW50IG9uIGVhY2ggZWRnZSBvZiB0aGUgZWNobyAocmV0dXJuKQ0KKyAqIHNpZ25hbC4gSWYgdGhlIGNvdW50IGlzIG5vdCBhdCBsZWFzdCAyLCB0aGVuIHRoZSByYW5nZSBoYXMgbm90IHlldCBiZWVuIG1lYXN1cmVkLCBhbmQgaXMgaW52YWxpZC4NCisgKi8NCitib29sIFVsdHJhc29uaWM6OklzUmFuZ2VWYWxpZCgpDQorew0KKwlyZXR1cm4gbV9jb3VudGVyLT5HZXQoKSA+IDE7DQorfQ0KKw0KKy8qKg0KKyAqIEdldCB0aGUgcmFuZ2UgaW4gaW5jaGVzIGZyb20gdGhlIHVsdHJhc29uaWMgc2Vuc29yLg0KKyAqIEByZXR1cm4gZG91YmxlIFJhbmdlIGluIGluY2hlcyBvZiB0aGUgdGFyZ2V0IHJldHVybmVkIGZyb20gdGhlIHVsdHJhc29uaWMgc2Vuc29yLiBJZiB0aGVyZSBpcw0KKyAqIG5vIHZhbGlkIHZhbHVlIHlldCwgaS5lLiBhdCBsZWFzdCBvbmUgbWVhc3VyZW1lbnQgaGFzbid0IGNvbXBsZXRlZCwgdGhlbiByZXR1cm4gMC4NCisgKi8NCitkb3VibGUgVWx0cmFzb25pYzo6R2V0UmFuZ2VJbmNoZXMoKQ0KK3sNCisJaWYgKElzUmFuZ2VWYWxpZCgpKQ0KKwkJcmV0dXJuIG1fY291bnRlci0+R2V0UGVyaW9kKCkgKiBrU3BlZWRPZlNvdW5kSW5jaGVzUGVyU2VjIC8gMi4wOw0KKwllbHNlDQorCQlyZXR1cm4gMDsNCit9DQorDQorLyoqDQorICogR2V0IHRoZSByYW5nZSBpbiBtaWxsaW1ldGVycyBmcm9tIHRoZSB1bHRyYXNvbmljIHNlbnNvci4NCisgKiBAcmV0dXJuIGRvdWJsZSBSYW5nZSBpbiBtaWxsaW1ldGVycyBvZiB0aGUgdGFyZ2V0IHJldHVybmVkIGJ5IHRoZSB1bHRyYXNvbmljIHNlbnNvci4NCisgKiBJZiB0aGVyZSBpcyBubyB2YWxpZCB2YWx1ZSB5ZXQsIGkuZS4gYXQgbGVhc3Qgb25lIG1lYXN1cmVtZW50IGhhc24ndCBjb21wbHRlZCwgdGhlbiByZXR1cm4gMC4NCisgKi8NCitkb3VibGUgVWx0cmFzb25pYzo6R2V0UmFuZ2VNTSgpDQorew0KKwlyZXR1cm4gR2V0UmFuZ2VJbmNoZXMoKSAqIDI1LjQ7DQorfQ0KKw0KKy8qKg0KKyAqIEdldCB0aGUgcmFuZ2UgaW4gdGhlIGN1cnJlbnQgRGlzdGFuY2VVbml0IGZvciB0aGUgUElEU291cmNlIGJhc2Ugb2JqZWN0Lg0KKyAqIA0KKyAqIEByZXR1cm4gVGhlIHJhbmdlIGluIERpc3RhbmNlVW5pdA0KKyAqLw0KK2RvdWJsZSBVbHRyYXNvbmljOjpQSURHZXQoKQ0KK3sNCisJc3dpdGNoKG1fdW5pdHMpIA0KKwl7DQorCWNhc2UgVWx0cmFzb25pYzo6a0luY2hlczoNCisJCXJldHVybiBHZXRSYW5nZUluY2hlcygpOw0KKwljYXNlIFVsdHJhc29uaWM6OmtNaWxsaU1ldGVyczoNCisJCXJldHVybiBHZXRSYW5nZU1NKCk7DQorCWRlZmF1bHQ6DQorCQlyZXR1cm4gMC4wOw0KKwl9DQorfQ0KKw0KKy8qKg0KKyAqIFNldCB0aGUgY3VycmVudCBEaXN0YW5jZVVuaXQgdGhhdCBzaG91bGQgYmUgdXNlZCBmb3IgdGhlIFBJRFNvdXJjZSBiYXNlIG9iamVjdC4NCisgKiANCisgKiBAcGFyYW0gdW5pdHMgVGhlIERpc3RhbmNlVW5pdCB0aGF0IHNob3VsZCBiZSB1c2VkLg0KKyAqLw0KK3ZvaWQgVWx0cmFzb25pYzo6U2V0RGlzdGFuY2VVbml0cyhEaXN0YW5jZVVuaXQgdW5pdHMpDQorew0KKwltX3VuaXRzID0gdW5pdHM7DQorfQ0KKw0KKy8qKg0KKyAqIEdldCB0aGUgY3VycmVudCBEaXN0YW5jZVVuaXQgdGhhdCBpcyB1c2VkIGZvciB0aGUgUElEU291cmNlIGJhc2Ugb2JqZWN0Lg0KKyAqIA0KKyAqIEByZXR1cm4gVGhlIHR5cGUgb2YgRGlzdGFuY2VVbml0IHRoYXQgaXMgYmVpbmcgdXNlZC4NCisgKi8NCitVbHRyYXNvbmljOjpEaXN0YW5jZVVuaXQgVWx0cmFzb25pYzo6R2V0RGlzdGFuY2VVbml0cygpDQorew0KKwlyZXR1cm4gbV91bml0czsNCit9DQorDQordm9pZCBVbHRyYXNvbmljOjpVcGRhdGVUYWJsZSgpIHsNCisJaWYgKG1fdGFibGUgIT0gTlVMTCkgew0KKwkJbV90YWJsZS0+UHV0TnVtYmVyKCJWYWx1ZSIsIEdldFJhbmdlSW5jaGVzKCkpOw0KKwl9DQorfQ0KKw0KK3ZvaWQgVWx0cmFzb25pYzo6U3RhcnRMaXZlV2luZG93TW9kZSgpIHsNCisJDQorfQ0KKw0KK3ZvaWQgVWx0cmFzb25pYzo6U3RvcExpdmVXaW5kb3dNb2RlKCkgew0KKwkNCit9DQorDQorc3RkOjpzdHJpbmcgVWx0cmFzb25pYzo6R2V0U21hcnREYXNoYm9hcmRUeXBlKCkgew0KKwlyZXR1cm4gIlVsdHJhc29uaWMiOw0KK30NCisNCit2b2lkIFVsdHJhc29uaWM6OkluaXRUYWJsZShJVGFibGUgKnN1YlRhYmxlKSB7DQorCW1fdGFibGUgPSBzdWJUYWJsZTsNCisJVXBkYXRlVGFibGUoKTsNCit9DQorDQorSVRhYmxlICogVWx0cmFzb25pYzo6R2V0VGFibGUoKSB7DQorCXJldHVybiBtX3RhYmxlOw0KK30NCisNCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9VbHRyYXNvbmljLmggYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9VbHRyYXNvbmljLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjdjNjY3YQotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL1VsdHJhc29uaWMuaApAQCAtMCwwICsxLDkwIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy8qIENvcHlyaWdodCAoYykgRklSU1QgMjAwOC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4JCQkJCQkJICAqLw0KKy8qIE9wZW4gU291cmNlIFNvZnR3YXJlIC0gbWF5IGJlIG1vZGlmaWVkIGFuZCBzaGFyZWQgYnkgRlJDIHRlYW1zLiBUaGUgY29kZSAgICovDQorLyogbXVzdCBiZSBhY2NvbXBhbmllZCBieSB0aGUgRklSU1QgQlNEIGxpY2Vuc2UgZmlsZSBpbiAkKFdJTkRfQkFTRSkvV1BJTGliLiAgKi8NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKyNpZm5kZWYgVUxUUkFTT05JQ19IXw0KKyNkZWZpbmUgVUxUUkFTT05JQ19IXw0KKw0KKyNpbmNsdWRlICJTZW5zb3JCYXNlLmgiDQorI2luY2x1ZGUgIlRhc2suaCINCisjaW5jbHVkZSAiUElEU291cmNlLmgiDQorI2luY2x1ZGUgIkxpdmVXaW5kb3cvTGl2ZVdpbmRvd1NlbmRhYmxlLmgiDQorDQorY2xhc3MgQ291bnRlcjsNCitjbGFzcyBEaWdpdGFsSW5wdXQ7DQorY2xhc3MgRGlnaXRhbE91dHB1dDsNCisNCisvKioNCisgKiBVbHRyYXNvbmljIHJhbmdlZmluZGVyIGNsYXNzLg0KKyAqIFRoZSBVbHRyYXNvbmljIHJhbmdlZmluZGVyIG1lYXN1cmVzIGFic29sdXRlIGRpc3RhbmNlIGJhc2VkIG9uIHRoZSByb3VuZC10cmlwIHRpbWUNCisgKiBvZiBhIHBpbmcgZ2VuZXJhdGVkIGJ5IHRoZSBjb250cm9sbGVyLiBUaGVzZSBzZW5zb3JzIHVzZSB0d28gdHJhbnNkdWNlcnMsIGEgc3BlYWtlciBhbmQNCisgKiBhIG1pY3JvcGhvbmUgYm90aCB0dW5lZCB0byB0aGUgdWx0cmFzb25pYyByYW5nZS4gQSBjb21tb24gdWx0cmFzb25pYyBzZW5zb3IsIHRoZSBEYXZlbnRlY2ggU1JGMDQNCisgKiByZXF1aXJlcyBhIHNob3J0IHB1bHNlIHRvIGJlIGdlbmVyYXRlZCBvbiBhIGRpZ2l0YWwgY2hhbm5lbC4gVGhpcyBjYXVzZXMgdGhlIGNoaXJwIHRvIGJlDQorICogZW1taXR0ZWQuIEEgc2Vjb25kIGxpbmUgYmVjb21lcyBoaWdoIGFzIHRoZSBwaW5nIGlzIHRyYW5zbWl0dGVkIGFuZCBnb2VzIGxvdyB3aGVuDQorICogdGhlIGVjaG8gaXMgcmVjZWl2ZWQuIFRoZSB0aW1lIHRoYXQgdGhlIGxpbmUgaXMgaGlnaCBkZXRlcm1pbmVzIHRoZSByb3VuZCB0cmlwIGRpc3RhbmNlDQorICogKHRpbWUgb2YgZmxpZ2h0KS4NCisgKi8NCitjbGFzcyBVbHRyYXNvbmljOiBwdWJsaWMgU2Vuc29yQmFzZSwgcHVibGljIFBJRFNvdXJjZSwgcHVibGljIExpdmVXaW5kb3dTZW5kYWJsZQ0KK3sNCitwdWJsaWM6DQorCXR5cGVkZWYgZW51bSB7DQorCQlrSW5jaGVzID0gMCwNCisJCWtNaWxsaU1ldGVycyA9IDENCisJfSBEaXN0YW5jZVVuaXQ7DQorCQ0KKwlVbHRyYXNvbmljKERpZ2l0YWxPdXRwdXQgKnBpbmdDaGFubmVsLCBEaWdpdGFsSW5wdXQgKmVjaG9DaGFubmVsLCBEaXN0YW5jZVVuaXQgdW5pdHMgPSBrSW5jaGVzKTsNCisJVWx0cmFzb25pYyhEaWdpdGFsT3V0cHV0ICZwaW5nQ2hhbm5lbCwgRGlnaXRhbElucHV0ICZlY2hvQ2hhbm5lbCwgRGlzdGFuY2VVbml0IHVuaXRzID0ga0luY2hlcyk7DQorCVVsdHJhc29uaWMoVUlOVDMyIHBpbmdDaGFubmVsLCBVSU5UMzIgZWNob0NoYW5uZWwsIERpc3RhbmNlVW5pdCB1bml0cyA9IGtJbmNoZXMpOw0KKwlVbHRyYXNvbmljKFVJTlQ4IHBpbmdNb2R1bGVOdW1iZXIsIFVJTlQzMiBwaW5nQ2hhbm5lbCwNCisJCQkJCQkJVUlOVDggZWNob01vZHVsZU51bWJlciwgVUlOVDMyIGVjaG9DaGFubmVsLCBEaXN0YW5jZVVuaXQgdW5pdHMgPSBrSW5jaGVzKTsNCisJdmlydHVhbCB+VWx0cmFzb25pYygpOw0KKw0KKwl2b2lkIFBpbmcoKTsNCisJYm9vbCBJc1JhbmdlVmFsaWQoKTsNCisJc3RhdGljIHZvaWQgU2V0QXV0b21hdGljTW9kZShib29sIGVuYWJsaW5nKTsNCisJZG91YmxlIEdldFJhbmdlSW5jaGVzKCk7DQorCWRvdWJsZSBHZXRSYW5nZU1NKCk7DQorCWJvb2wgSXNFbmFibGVkKCkgeyByZXR1cm4gbV9lbmFibGVkOyB9DQorCXZvaWQgU2V0RW5hYmxlZChib29sIGVuYWJsZSkgeyBtX2VuYWJsZWQgPSBlbmFibGU7IH0NCisJDQorCWRvdWJsZSBQSURHZXQoKTsNCisJdm9pZCBTZXREaXN0YW5jZVVuaXRzKERpc3RhbmNlVW5pdCB1bml0cyk7DQorCURpc3RhbmNlVW5pdCBHZXREaXN0YW5jZVVuaXRzKCk7DQorDQorCXZvaWQgVXBkYXRlVGFibGUoKTsNCisJdm9pZCBTdGFydExpdmVXaW5kb3dNb2RlKCk7DQorCXZvaWQgU3RvcExpdmVXaW5kb3dNb2RlKCk7DQorCXN0ZDo6c3RyaW5nIEdldFNtYXJ0RGFzaGJvYXJkVHlwZSgpOw0KKwl2b2lkIEluaXRUYWJsZShJVGFibGUgKnN1YlRhYmxlKTsNCisJSVRhYmxlICogR2V0VGFibGUoKTsNCisNCitwcml2YXRlOg0KKwl2b2lkIEluaXRpYWxpemUoKTsNCisNCisJc3RhdGljIHZvaWQgVWx0cmFzb25pY0NoZWNrZXIoKTsNCisNCisJc3RhdGljIGNvbnN0IGRvdWJsZSBrUGluZ1RpbWUgPSAxMCAqIDFlLTY7CS8vLzwgVGltZSAoc2VjKSBmb3IgdGhlIHBpbmcgdHJpZ2dlciBwdWxzZS4NCisJc3RhdGljIGNvbnN0IFVJTlQzMiBrUHJpb3JpdHkgPSA5MDsJLy8vPCBQcmlvcml0eSB0aGF0IHRoZSB1bHRyYXNvbmljIHJvdW5kIHJvYmluIHRhc2sgcnVucy4NCisJc3RhdGljIGNvbnN0IGRvdWJsZSBrTWF4VWx0cmFzb25pY1RpbWUgPSAwLjE7CS8vLzwgTWF4IHRpbWUgKG1zKSBiZXR3ZWVuIHJlYWRpbmdzLg0KKwlzdGF0aWMgY29uc3QgZG91YmxlIGtTcGVlZE9mU291bmRJbmNoZXNQZXJTZWMgPSAxMTMwLjAgKiAxMi4wOw0KKw0KKwlzdGF0aWMgVGFzayBtX3Rhc2s7IC8vIHRhc2sgZG9pbmcgdGhlIHJvdW5kLXJvYmluIGF1dG9tYXRpYyBzZW5zaW5nDQorCXN0YXRpYyBVbHRyYXNvbmljICptX2ZpcnN0U2Vuc29yOyAvLyBoZWFkIG9mIHRoZSB1bHRyYXNvbmljIHNlbnNvciBsaXN0DQorCXN0YXRpYyBib29sIG1fYXV0b21hdGljRW5hYmxlZDsgLy8gYXV0b21hdGljIHJvdW5kIHJvYmluIG1vZGUNCisJc3RhdGljIFNFTV9JRCBtX3NlbWFwaG9yZTsgLy8gc3luY2hyb25pemUgYWNjZXNzIHRvIHRoZSBsaXN0IG9mIHNlbnNvcnMNCisNCisJRGlnaXRhbElucHV0ICptX2VjaG9DaGFubmVsOw0KKwlEaWdpdGFsT3V0cHV0ICptX3BpbmdDaGFubmVsOw0KKwlib29sIG1fYWxsb2NhdGVkQ2hhbm5lbHM7DQorCWJvb2wgbV9lbmFibGVkOw0KKwlDb3VudGVyICptX2NvdW50ZXI7DQorCVVsdHJhc29uaWMgKm1fbmV4dFNlbnNvcjsNCisJRGlzdGFuY2VVbml0IG1fdW5pdHM7DQorCQ0KKwlJVGFibGUgKm1fdGFibGU7DQorfTsNCisNCisjZW5kaWYNCisNCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9VdGlsaXR5LmNwcCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL1V0aWxpdHkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1ZjcyNGQzCi0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvVXRpbGl0eS5jcHAKQEAgLTAsMCArMSw0MzggQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorLyogQ29weXJpZ2h0IChjKSBGSVJTVCAyMDA4LiBBbGwgUmlnaHRzIFJlc2VydmVkLgkJCQkJCQkgICovDQorLyogT3BlbiBTb3VyY2UgU29mdHdhcmUgLSBtYXkgYmUgbW9kaWZpZWQgYW5kIHNoYXJlZCBieSBGUkMgdGVhbXMuIFRoZSBjb2RlICAgKi8NCisvKiBtdXN0IGJlIGFjY29tcGFuaWVkIGJ5IHRoZSBGSVJTVCBCU0QgbGljZW5zZSBmaWxlIGluICQoV0lORF9CQVNFKS9XUElMaWIuICAqLw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorI2luY2x1ZGUgIlV0aWxpdHkuaCINCisNCisjaW5jbHVkZSAiTmV0d29ya0NvbW11bmljYXRpb24vRlJDQ29tbS5oIg0KKyNpbmNsdWRlICJDaGlwT2JqZWN0LmgiDQorI2luY2x1ZGUgIlRhc2suaCINCisjaW5jbHVkZSA8ZGJnTGliLmg+DQorI2luY2x1ZGUgPHN0ZGlvLmg+DQorI2luY2x1ZGUgPHN5c1N5bVRibC5oPg0KKyNpbmNsdWRlICJuaXZpc2lvbi5oIg0KKw0KKyNkZWZpbmUgREJHX0RFTUFOR0xFX1BSSU5UX0xFTiAyNTYgIC8qIE51bSBjaGFycyBvZiBkZW1hbmdsZWQgbmFtZXMgdG8gcHJpbnQgKi8NCisNCitleHRlcm4gIkMiDQorew0KKwlleHRlcm4gY2hhciAqIGNwbHVzRGVtYW5nbGUgKGNoYXIgKnNvdXJjZSwgY2hhciAqZGVzdCwgSU5UMzIgbik7DQorfQ0KKw0KK2NoYXIgKndwaV9nZXRMYWJlbChVSU5UIGFkZHIsIElOVDMyICpmb3VuZCkNCit7DQorCUlOVDMyIHBWYWw7DQorCVNZTV9UWVBFIHBUeXBlOw0KKwljaGFyIG5hbWVbTUFYX1NZU19TWU1fTEVOICsgMV07DQorCXN0YXRpYyBjaGFyIGxhYmVsW0RCR19ERU1BTkdMRV9QUklOVF9MRU4gKyAxICsgMTFdOw0KKwliemVybyhsYWJlbCwgREJHX0RFTUFOR0xFX1BSSU5UX0xFTiArIDEgKyAxMSk7DQorDQorCWlmIChzeW1GaW5kQnlWYWx1ZShzeXNTeW1UYmwsIGFkZHIsIG5hbWUsICZwVmFsLCAmcFR5cGUpID09IE9LKQ0KKwl7DQorCQljcGx1c0RlbWFuZ2xlKG5hbWUsIGxhYmVsLCBzaXplb2YobGFiZWwpIC0gMTEpOw0KKwkJaWYgKChVSU5UKXBWYWwgIT0gYWRkcikNCisJCXsNCisJCQlzcHJpbnRmKCZsYWJlbFtzdHJsZW4obGFiZWwpXSwgIisweCUwNHgiLCBhZGRyLXBWYWwpOw0KKwkJCWlmIChmb3VuZCkgKmZvdW5kID0gMjsNCisJCX0NCisJCWVsc2UNCisJCXsNCisJCQlpZiAoZm91bmQpICpmb3VuZCA9IDE7DQorCQl9DQorCX0NCisJZWxzZQ0KKwl7DQorCQlzcHJpbnRmKGxhYmVsLCAiMHglMDR4IiwgYWRkcik7DQorCQlpZiAoZm91bmQpICpmb3VuZCA9IDA7DQorCX0NCisNCisJcmV0dXJuIGxhYmVsOw0KK30NCisvKg0KK3N0YXRpYyB2b2lkIHdwaVRyYWNlUHJpbnQoSU5TVFIgKmNhbGxlciwgSU5UMzIgZnVuYywgSU5UMzIgbmFyZ3MsIElOVDMyICphcmdzLCBJTlQzMiB0YXNrSWQsIEJPT0wgaXNLZXJuZWxBZHJzKQ0KK3sNCisJY2hhciBidWYgW01BWF9TWVNfU1lNX0xFTiAqIDJdOw0KKwlJTlQzMiBpeDsNCisJSU5UMzIgbGVuID0gMDsNCisJbGVuICs9IHNwcmludGYgKCZidWYgW2xlbl0sICIlcyA8JSMwMTB4PjogIiwgd3BpX2dldExhYmVsKChVSU5UKWNhbGxlciksIChJTlQzMiljYWxsZXIpOw0KKwlsZW4gKz0gc3ByaW50ZiAoJmJ1ZiBbbGVuXSwgIiVzIDwlIzAxMHg+ICgiLCB3cGlfZ2V0TGFiZWwoKFVJTlQpZnVuYyksIGZ1bmMpOw0KKwlmb3IgKGl4ID0gMDsgaXggPCBuYXJnczsgaXgrKykNCisJew0KKwkJaWYgKGl4ICE9IDApDQorCQkJbGVuICs9IHNwcmludGYgKCZidWYgW2xlbl0sICIsICIpOw0KKwkJbGVuICs9IHNwcmludGYgKCZidWYgW2xlbl0sICIlI3giLCBhcmdzIFtpeF0pOw0KKwl9DQorCWxlbiArPSBzcHJpbnRmICgmYnVmIFtsZW5dLCAiKVxuIik7DQorDQorCXByaW50ZihidWYpOw0KK30NCisqLw0KK3N0YXRpYyB2b2lkIHdwaUNsZWFuVHJhY2VQcmludChJTlNUUiAqY2FsbGVyLCBJTlQzMiBmdW5jLCBJTlQzMiBuYXJncywgSU5UMzIgKmFyZ3MsIElOVDMyIHRhc2tJZCwgQk9PTCBpc0tlcm5lbEFkcnMpDQorew0KKwljaGFyIGJ1ZiBbTUFYX1NZU19TWU1fTEVOXTsNCisJSU5UMzIgaXg7DQorCUlOVDMyIGxlbiA9IDA7DQorCUlOVDMyIG5hbWVGb3VuZCA9IDA7DQorCUlOVDMyIHBhcmFtcyA9IDA7DQorCUlOVDMyIHRvdGFsbmFyZ3MgPSBuYXJnczsNCisJY2hhciAqZnVuY05hbWUgPSB3cGlfZ2V0TGFiZWwoKFVJTlQpZnVuYywgJm5hbWVGb3VuZCk7DQorCS8vIElnbm9yZSBuYW1lcyB0aGF0IGFyZSBub3QgZXhhY3Qgc3ltYm9sIGFkZHJlc3MgbWF0Y2hlcy4NCisJaWYgKG5hbWVGb3VuZCAhPSAxKSByZXR1cm47DQorDQorCS8vIElnbm9yZSBpbnRlcm5hbCBmdW5jdGlvbiBuYW1lIG1hdGNoZXMuDQorCWlmIChzdHJuY21wKGZ1bmNOYW1lLCAid3BpX2Fzc2VydCIsIDEwKSA9PSAwKSByZXR1cm47DQorCWlmIChzdHJuY21wKGZ1bmNOYW1lLCAid3BpX2ZhdGFsIiwgOSkgPT0gMCkgcmV0dXJuOw0KKwlpZiAoc3RybmNtcChmdW5jTmFtZSwgIndwaV9zZWxmVHJhY2UiLCAxMykgPT0gMCkgcmV0dXJuOw0KKwlpZiAoc3RybmNtcChmdW5jTmFtZSwgIkVycm9yOjpTZXQiLCAxMCkgPT0gMCkgcmV0dXJuOw0KKwlpZiAoc3RybmNtcChmdW5jTmFtZSwgIkVycm9yQmFzZTo6U2V0RXJyb3IiLCAxOSkgPT0gMCkgcmV0dXJuOw0KKwlpZiAoc3RybmNtcChmdW5jTmFtZSwgIkVycm9yOjpSZXBvcnQiLCAxMykgPT0gMCkgcmV0dXJuOw0KKw0KKwkvLyBGaW5kIHRoZSBudW1iZXIgb2YgYXJndW1lbnRzIGluIHRoZSBuYW1lIHN0cmluZy4NCisJY2hhciAqc3RhcnQgPSBzdHJjaHIoZnVuY05hbWUsICcoJyk7DQorCWNoYXIgKmVuZCA9IHN0cnJjaHIoZnVuY05hbWUsICcpJyk7DQorCWlmIChzdGFydCArIDEgIT0gZW5kICYmIHN0YXJ0ICE9IE5VTEwpDQorCXsNCisJCWRvDQorCQl7DQorCQkJcGFyYW1zKys7DQorCQkJaWYoc3RybmNtcChzdGFydCsxLCAiYm9vbCIsIDQpID09IDAgfHwgc3RybmNtcChzdGFydCsyLCAiYm9vbCIsIDQpID09IDApDQorCQkJew0KKwkJCQl0b3RhbG5hcmdzKys7DQorCQkJfQ0KKwkJCXN0YXJ0ID0gc3RyY2hyKHN0YXJ0ICsgMSwgJywnKTsNCisJCX0NCisJCXdoaWxlKHN0YXJ0IDwgZW5kICYmIHN0YXJ0ICE9IE5VTEwpOw0KKwl9DQorCWNoYXIgKmZ1bmNOYW1lRW5kID0gc3RyY2hyKGZ1bmNOYW1lLCAnKCcpOw0KKwkqZnVuY05hbWVFbmQgPSAwOw0KKwlsZW4gKz0gc3ByaW50ZiAoJmJ1ZiBbbGVuXSwgZnVuY05hbWUpOw0KKw0KKwkvLyBJZiB0aGlzIGlzIGEgbWVtYmVyIGZ1bmN0aW9uLCBwcmludCBvdXQgdGhlIHRoaXMgcG9pbnRlciB2YWx1ZS4NCisJaWYgKHRvdGFsbmFyZ3MgLSBwYXJhbXMgPT0gMSkNCisJew0KKwkJbGVuICs9IHNwcmludGYgKCZidWYgW2xlbl0sICI8dGhpcz0lI3g+IiwgYXJncyBbMF0pOw0KKwl9DQorDQorCS8vIFByaW50IG91dCB0aGUgYXJndW1lbnQgdmFsdWVzLg0KKwlsZW4gKz0gc3ByaW50ZiAoJmJ1ZiBbbGVuXSwgIigiKTsNCisJZm9yIChpeCA9IHRvdGFsbmFyZ3MgLSBwYXJhbXM7IGl4IDwgbmFyZ3M7IGl4KyspDQorCXsNCisJCWlmIChpeCAhPSB0b3RhbG5hcmdzIC0gcGFyYW1zKQ0KKwkJCWxlbiArPSBzcHJpbnRmICgmYnVmIFtsZW5dLCAiLCAiKTsNCisJCWxlbiArPSBzcHJpbnRmICgmYnVmIFtsZW5dLCAiJSN4IiwgYXJncyBbaXhdKTsNCisJfQ0KKwlsZW4gKz0gc3ByaW50ZiAoJmJ1ZiBbbGVuXSwgIilcbiIpOw0KKw0KKwlwcmludGYoYnVmKTsNCit9DQorDQorZXh0ZXJuICJDIg0KK3sNCisJZXh0ZXJuIHZvaWQgdHJjU3RhY2soUkVHX1NFVCogcFJlZ3MsIEZVTkNQVFIgcHJpbnRSdG4sIElOVDMyIHRpZCk7DQorfQ0KKw0KK3N0YXRpYyBJTlQzMiB3cGlTdGFja1Rhc2soSU5UMzIgdGFza0lkKQ0KK3sNCisJdGFza0RlbGF5KDEpOw0KKwkvL3R0KHRhc2tJZCk7DQorDQorCVJFR19TRVQgcmVnczsNCisJdGFza1JlZ3NHZXQodGFza0lkLCAmcmVncyk7DQorCXRyY1N0YWNrKCZyZWdzLCAoRlVOQ1BUUikgd3BpQ2xlYW5UcmFjZVByaW50LCB0YXNrSWQpOw0KKwlwcmludGYoIlxuIik7DQorDQorCS8vIFRoZSB0YXNrIHNob3VsZCBiZSByZXN1bWVkIGJlY2F1c2UgaXQgaGFkIHRvIGJlIHN1c3BlbmRlZCB0byBnZXQgdGhlIHN0YWNrIHRyYWNlLg0KKwl0YXNrUmVzdW1lKHRhc2tJZCk7DQorCXJldHVybiAwOw0KK30NCisNCit2b2lkIHdwaV9zZWxmVHJhY2UoKQ0KK3sNCisJSU5UMzIgcHJpb3JpdHk9MTAwOw0KKwl0YXNrUHJpb3JpdHlHZXQoMCwgJnByaW9yaXR5KTsNCisJLy8gTG93ZXIgcHJpb3JpdHkgdGhhbiB0aGUgY2FsbGluZyB0YXNrLg0KKwlUYXNrIHRyYWNlVGFzaygiU3RhY2tUcmFjZSIsIChGVU5DUFRSKXdwaVN0YWNrVGFzaywgcHJpb3JpdHkgKyAxKTsNCisJdHJhY2VUYXNrLlN0YXJ0KHRhc2tJZFNlbGYoKSk7DQorDQorCS8vIFRhc2sgdG8gYmUgdHJhY2VkIG11c3QgYmUgc3VzcGVuZGVkIGZvciB0aGUgc3RhY2sgdHJhY2UgdG8gd29yay4NCisJdGFza1N1c3BlbmQoMCk7DQorfQ0KKw0KK3N0YXRpYyBib29sIHN0YWNrVHJhY2VFbmFibGVkID0gZmFsc2U7DQorc3RhdGljIGJvb2wgc3VzcGVuZE9uQXNzZXJ0RW5hYmxlZCA9IGZhbHNlOw0KKw0KKy8qKg0KKyAqIEVuYWJsZSBTdGFjayB0cmFjZSBhZnRlciBhc3NlcnRzLg0KKyAqLw0KK3ZvaWQgd3BpX3N0YWNrVHJhY2VPbkFzc2VydEVuYWJsZShib29sIGVuYWJsZWQpDQorew0KKwlzdGFja1RyYWNlRW5hYmxlZCA9IGVuYWJsZWQ7DQorfQ0KKw0KKy8qKg0KKyAqIEVuYWJsZSBzdXNwZW5kIG9uIGFzc3NlcnQuDQorICogSWYgZW5hYmxlZCwgdGhlIHVzZXIgdGFzayB3aWxsIGJlIHN1c3BlbmRlZCB3aGVuZXZlciBhbiBhc3NlcnQgZmFpbHMuIFRoaXMNCisgKiB3aWxsIGFsbG93IHRoZSB1c2VyIHRvIGF0dGFjaCB0byB0aGUgdGFzayB3aXRoIHRoZSBkZWJ1Z2dlciBhbmQgZXhhbWluZSB2YXJpYWJsZXMNCisgKiBhcm91bmQgdGhlIGZhaWx1cmUuDQorICovDQordm9pZCB3cGlfc3VzcGVuZE9uQXNzZXJ0RW5hYmxlZChib29sIGVuYWJsZWQpDQorew0KKwlzdXNwZW5kT25Bc3NlcnRFbmFibGVkID0gZW5hYmxlZDsNCit9DQorDQorc3RhdGljIHZvaWQgd3BpX2hhbmRsZVRyYWNpbmcoKQ0KK3sNCisJaWYgKHN0YWNrVHJhY2VFbmFibGVkKQ0KKwl7DQorCQlwcmludGYoIlxuLS0tLS0tLS0tLS08U3RhY2sgVHJhY2U+LS0tLS0tLS0tLS0tLS0tLVxuIik7DQorCQl3cGlfc2VsZlRyYWNlKCk7DQorCX0NCisJcHJpbnRmKCJcbiIpOw0KK30NCisNCisvKioNCisgKiBBc3NlcnQgaW1wbGVtZW50YXRpb24uDQorICogVGhpcyBhbGxvd3MgYnJlYWtwb2ludHMgdG8gYmUgc2V0IG9uIGFuIGFzc2VydC4NCisgKiBUaGUgdXNlcnMgZG9uJ3QgY2FsbCB0aGlzLCBidXQgaW5zdGVhZCB1c2UgdGhlIHdwaV9hc3NlcnQgbWFjcm9zIGluIFV0aWxpdHkuaC4NCisgKi8NCitib29sIHdwaV9hc3NlcnRfaW1wbChib29sIGNvbmRpdGlvblZhbHVlLCANCisJCQkJCSBjb25zdCBjaGFyICpjb25kaXRpb25UZXh0LA0KKwkJCQkJIGNvbnN0IGNoYXIgKm1lc3NhZ2UsDQorCQkJCQkgY29uc3QgY2hhciAqZmlsZU5hbWUsDQorCQkJCQkgVUlOVDMyIGxpbmVOdW1iZXIsIA0KKwkJCQkJIGNvbnN0IGNoYXIgKmZ1bmNOYW1lKQ0KK3sNCisJaWYgKCFjb25kaXRpb25WYWx1ZSkNCisJeyAgIA0KKwkJLy8gRXJyb3Igc3RyaW5nIGJ1ZmZlcg0KKwkJY2hhciBlcnJvclsyNTZdOw0KKwkJCQkNCisJCS8vIElmIGFuIGVycm9yIG1lc3NhZ2Ugd2FzIHNwZWNpZmllZCwgaW5jbHVkZSBpdA0KKwkJLy8gQnVpbGQgZXJyb3Igc3RyaW5nDQorCQlpZihtZXNzYWdlICE9IE5VTEwpIHsNCisJCQlzcHJpbnRmKGVycm9yLCAiQXNzZXJ0aW9uIGZhaWxlZDogXCIlc1wiLCBcIiVzXCIgZmFpbGVkIGluICVzKCkgaW4gJXMgYXQgbGluZSAlZFxuIiwgDQorCQkJCQkJCSBtZXNzYWdlLCBjb25kaXRpb25UZXh0LCBmdW5jTmFtZSwgZmlsZU5hbWUsIGxpbmVOdW1iZXIpOw0KKwkJfSBlbHNlIHsNCisJCQlzcHJpbnRmKGVycm9yLCAiQXNzZXJ0aW9uIGZhaWxlZDogXCIlc1wiIGluICVzKCkgaW4gJXMgYXQgbGluZSAlZFxuIiwgDQorCQkJCQkJCSBjb25kaXRpb25UZXh0LCBmdW5jTmFtZSwgZmlsZU5hbWUsIGxpbmVOdW1iZXIpOw0KKwkJfQ0KKwkJDQorCQkvLyBQcmludCB0byBjb25zb2xlIGFuZCBzZW5kIHRvIHJlbW90ZSBkYXNoYm9hcmQNCisJCXByaW50ZigiXG5cbj4+Pj4lcyIsIGVycm9yKTsNCisJCXNldEVycm9yRGF0YShlcnJvciwgc3RybGVuKGVycm9yKSwgMTAwKTsNCisJCQ0KKwkJd3BpX2hhbmRsZVRyYWNpbmcoKTsNCisJCWlmIChzdXNwZW5kT25Bc3NlcnRFbmFibGVkKSB0YXNrU3VzcGVuZCgwKTsNCisJfQ0KKwlyZXR1cm4gY29uZGl0aW9uVmFsdWU7DQorfQ0KKw0KKy8qKg0KKyAqIENvbW1vbiBlcnJvciByb3V0aW5lcyBmb3Igd3BpX2Fzc2VydEVxdWFsX2ltcGwgYW5kIHdwaV9hc3NlcnROb3RFcXVhbF9pbXBsDQorICogVGhpcyBzaG91bGQgbm90IGJlIGNhbGxlZCBkaXJlY3RseTsgaXQgc2hvdWxkIG9ubHkgYmUgdXNlZCBieSB3cGlfYXNzZXJ0RXF1YWxfaW1wbA0KKyAqIGFuZCB3cGlfYXNzZXJ0Tm90RXF1YWxfaW1wbC4NCisgKi8NCit2b2lkIHdwaV9hc3NlcnRFcXVhbF9jb21tb25faW1wbChpbnQgdmFsdWVBLA0KKwkJCQkJIAkgICAgICAgICBpbnQgdmFsdWVCLA0KKwkJCQkJIAkgICAgICAgICBjb25zdCBjaGFyICplcXVhbGl0eVR5cGUsDQorCQkJCQkJICAgICAgICAgY29uc3QgY2hhciAqbWVzc2FnZSwNCisJCQkJCQkgICAgICAgICBjb25zdCBjaGFyICpmaWxlTmFtZSwNCisJCQkJCQkgICAgICAgICBVSU5UMzIgbGluZU51bWJlciwgDQorCQkJCQkJICAgICAgICAgY29uc3QgY2hhciAqZnVuY05hbWUpDQorew0KKwkvLyBFcnJvciBzdHJpbmcgYnVmZmVyDQorCWNoYXIgZXJyb3JbMjU2XTsNCisJCQkNCisJLy8gSWYgYW4gZXJyb3IgbWVzc2FnZSB3YXMgc3BlY2lmaWVkLCBpbmNsdWRlIGl0DQorCS8vIEJ1aWxkIGVycm9yIHN0cmluZw0KKwlpZihtZXNzYWdlICE9IE5VTEwpIHsNCisJCXNwcmludGYoZXJyb3IsICJBc3NlcnRpb24gZmFpbGVkOiBcIiVzXCIsIFwiJWRcIiAlcyBcIiVkXCIgaW4gJXMoKSBpbiAlcyBhdCBsaW5lICVkXG4iLCANCisJCQkJCQkgbWVzc2FnZSwgdmFsdWVBLCBlcXVhbGl0eVR5cGUsIHZhbHVlQiwgZnVuY05hbWUsIGZpbGVOYW1lLCBsaW5lTnVtYmVyKTsNCisJfSBlbHNlIHsNCisJCXNwcmludGYoZXJyb3IsICJBc3NlcnRpb24gZmFpbGVkOiBcIiVkXCIgJXMgXCIlZFwiIGluICVzKCkgaW4gJXMgYXQgbGluZSAlZFxuIiwgDQorCQkJCQkJIHZhbHVlQSwgZXF1YWxpdHlUeXBlLCB2YWx1ZUIsIGZ1bmNOYW1lLCBmaWxlTmFtZSwgbGluZU51bWJlcik7DQorCX0NCisJDQorCS8vIFByaW50IHRvIGNvbnNvbGUgYW5kIHNlbmQgdG8gcmVtb3RlIGRhc2hib2FyZA0KKwlwcmludGYoIlxuXG4+Pj4+JXMiLCBlcnJvcik7DQorCXNldEVycm9yRGF0YShlcnJvciwgc3RybGVuKGVycm9yKSwgMTAwKTsNCisJDQorCXdwaV9oYW5kbGVUcmFjaW5nKCk7DQorCWlmIChzdXNwZW5kT25Bc3NlcnRFbmFibGVkKSB0YXNrU3VzcGVuZCgwKTsNCit9DQorDQorLyoqDQorICogQXNzZXJ0IGVxdWFsIGltcGxlbWVudGF0aW9uLg0KKyAqIFRoaXMgZGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSB0d28gZ2l2ZW4gaW50ZWdlcnMgYXJlIGVxdWFsLiBJZiBub3QsDQorICogdGhlIHZhbHVlIG9mIGVhY2ggaXMgcHJpbnRlZCBhbG9uZyB3aXRoIGFuIG9wdGlvbmFsIG1lc3NhZ2Ugc3RyaW5nLg0KKyAqIFRoZSB1c2VycyBkb24ndCBjYWxsIHRoaXMsIGJ1dCBpbnN0ZWFkIHVzZSB0aGUgd3BpX2Fzc2VydEVxdWFsIG1hY3JvcyBpbiBVdGlsaXR5LmguDQorICovDQorYm9vbCB3cGlfYXNzZXJ0RXF1YWxfaW1wbChpbnQgdmFsdWVBLA0KKwkJCQkJIAkgIGludCB2YWx1ZUIsDQorCQkJCQkJICBjb25zdCBjaGFyICptZXNzYWdlLA0KKwkJCQkJCSAgY29uc3QgY2hhciAqZmlsZU5hbWUsDQorCQkJCQkJICBVSU5UMzIgbGluZU51bWJlciwgDQorCQkJCQkJICBjb25zdCBjaGFyICpmdW5jTmFtZSkNCit7DQorCWlmKCEodmFsdWVBID09IHZhbHVlQikpDQorCXsNCisJCXdwaV9hc3NlcnRFcXVhbF9jb21tb25faW1wbCh2YWx1ZUEsIHZhbHVlQiwgIiE9IiwgbWVzc2FnZSwgZmlsZU5hbWUsIGxpbmVOdW1iZXIsIGZ1bmNOYW1lKTsNCisJfQ0KKwlyZXR1cm4gdmFsdWVBID09IHZhbHVlQjsNCit9DQorDQorLyoqDQorICogQXNzZXJ0IG5vdCBlcXVhbCBpbXBsZW1lbnRhdGlvbi4NCisgKiBUaGlzIGRldGVybWluZXMgd2hldGhlciB0aGUgdHdvIGdpdmVuIGludGVnZXJzIGFyZSBlcXVhbC4gSWYgc28sDQorICogdGhlIHZhbHVlIG9mIGVhY2ggaXMgcHJpbnRlZCBhbG9uZyB3aXRoIGFuIG9wdGlvbmFsIG1lc3NhZ2Ugc3RyaW5nLg0KKyAqIFRoZSB1c2VycyBkb24ndCBjYWxsIHRoaXMsIGJ1dCBpbnN0ZWFkIHVzZSB0aGUgd3BpX2Fzc2VydE5vdEVxdWFsIG1hY3JvcyBpbiBVdGlsaXR5LmguDQorICovDQorYm9vbCB3cGlfYXNzZXJ0Tm90RXF1YWxfaW1wbChpbnQgdmFsdWVBLA0KKwkJCQkJIAkgICAgIGludCB2YWx1ZUIsDQorCQkJCQkJICAgICBjb25zdCBjaGFyICptZXNzYWdlLA0KKwkJCQkJCSAgICAgY29uc3QgY2hhciAqZmlsZU5hbWUsDQorCQkJCQkJICAgICBVSU5UMzIgbGluZU51bWJlciwgDQorCQkJCQkJICAgICBjb25zdCBjaGFyICpmdW5jTmFtZSkNCit7DQorCWlmKCEodmFsdWVBICE9IHZhbHVlQikpDQorCXsNCisJCXdwaV9hc3NlcnRFcXVhbF9jb21tb25faW1wbCh2YWx1ZUEsIHZhbHVlQiwgIj09IiwgbWVzc2FnZSwgZmlsZU5hbWUsIGxpbmVOdW1iZXIsIGZ1bmNOYW1lKTsNCisJfQ0KKwlyZXR1cm4gdmFsdWVBICE9IHZhbHVlQjsNCit9DQorDQorDQorLyoqDQorICogUmV0dXJuIHRoZSBGUEdBIFZlcnNpb24gbnVtYmVyLg0KKyAqIEZvciBub3csIGV4cGVjdCB0aGlzIHRvIGJlIGNvbXBldGl0aW9uIHllYXIuDQorICogQHJldHVybiBGUEdBIFZlcnNpb24gbnVtYmVyLg0KKyAqLw0KK1VJTlQxNiBHZXRGUEdBVmVyc2lvbigpDQorew0KKwl0UmlvU3RhdHVzQ29kZSBzdGF0dXMgPSAwOw0KKwl0R2xvYmFsICpnbG9iYWwgPSB0R2xvYmFsOjpjcmVhdGUoJnN0YXR1cyk7DQorCVVJTlQxNiB2ZXJzaW9uID0gZ2xvYmFsLT5yZWFkVmVyc2lvbigmc3RhdHVzKTsNCisJZGVsZXRlIGdsb2JhbDsNCisJd3BpX3NldEdsb2JhbEVycm9yKHN0YXR1cyk7DQorCXJldHVybiB2ZXJzaW9uOw0KK30NCisNCisvKioNCisgKiBSZXR1cm4gdGhlIEZQR0EgUmV2aXNpb24gbnVtYmVyLg0KKyAqIFRoZSBmb3JtYXQgb2YgdGhlIHJldmlzaW9uIGlzIDMgbnVtYmVycy4NCisgKiBUaGUgMTIgbW9zdCBzaWduaWZpY2FudCBiaXRzIGFyZSB0aGUgTWFqb3IgUmV2aXNpb24uDQorICogdGhlIG5leHQgOCBiaXRzIGFyZSB0aGUgTWlub3IgUmV2aXNpb24uDQorICogVGhlIDEyIGxlYXN0IHNpZ25pZmljYW50IGJpdHMgYXJlIHRoZSBCdWlsZCBOdW1iZXIuDQorICogQHJldHVybiBGUEdBIFJldmlzaW9uIG51bWJlci4NCisgKi8NCitVSU5UMzIgR2V0RlBHQVJldmlzaW9uKCkNCit7DQorCXRSaW9TdGF0dXNDb2RlIHN0YXR1cyA9IDA7DQorCXRHbG9iYWwgKmdsb2JhbCA9IHRHbG9iYWw6OmNyZWF0ZSgmc3RhdHVzKTsNCisJVUlOVDMyIHJldmlzaW9uID0gZ2xvYmFsLT5yZWFkUmV2aXNpb24oJnN0YXR1cyk7DQorCWRlbGV0ZSBnbG9iYWw7DQorCXdwaV9zZXRHbG9iYWxFcnJvcihzdGF0dXMpOw0KKwlyZXR1cm4gcmV2aXNpb247DQorfQ0KKw0KKy8qKg0KKyAqIFJlYWQgdGhlIG1pY3Jvc2Vjb25kLXJlc29sdXRpb24gdGltZXIgb24gdGhlIEZQR0EuDQorICogDQorICogQHJldHVybiBUaGUgY3VycmVudCB0aW1lIGluIG1pY3Jvc2Vjb25kcyBhY2NvcmRpbmcgdG8gdGhlIEZQR0EgKHNpbmNlIEZQR0EgcmVzZXQpLg0KKyAqLw0KK1VJTlQzMiBHZXRGUEdBVGltZSgpDQorew0KKwl0UmlvU3RhdHVzQ29kZSBzdGF0dXMgPSAwOw0KKwl0R2xvYmFsICpnbG9iYWwgPSB0R2xvYmFsOjpjcmVhdGUoJnN0YXR1cyk7DQorCVVJTlQzMiB0aW1lID0gZ2xvYmFsLT5yZWFkTG9jYWxUaW1lKCZzdGF0dXMpOw0KKwlkZWxldGUgZ2xvYmFsOw0KKwl3cGlfc2V0R2xvYmFsRXJyb3Ioc3RhdHVzKTsNCisJcmV0dXJuIHRpbWU7DQorfQ0KKw0KKy8vIFJUIGhhcmR3YXJlIGFjY2VzcyBmdW5jdGlvbnMgZXhwb3J0ZWQgZnJvbSBuaV9lbWIub3V0DQorZXh0ZXJuICJDIg0KK3sNCisJSU5UMzIgVXNlclN3aXRjaElucHV0KElOVDMyIG5Td2l0Y2gpOw0KKwlJTlQzMiBMZWRJbnB1dChJTlQzMiBsZWQpOw0KKwlJTlQzMiBMZWRPdXRwdXQoSU5UMzIgbGVkLCBJTlQzMiB2YWx1ZSk7DQorfQ0KKw0KKy8qKg0KKyAqIFJlYWQgdGhlIHZhbHVlIG9mIHRoZSBVU0VSMSBESVAgc3dpdGNoIG9uIHRoZSBjUklPLg0KKyAqLw0KK0lOVDMyIEdldFJJT1VzZXJTd2l0Y2goKQ0KK3sNCisJSU5UMzIgc3dpdGNoVmFsdWUgPSBVc2VyU3dpdGNoSW5wdXQoMCk7DQorCXdwaV9hc3NlcnQoc3dpdGNoVmFsdWUgPj0gMCk7DQorCXJldHVybiBzd2l0Y2hWYWx1ZSA+IDA7DQorfQ0KKw0KKy8qKg0KKyAqIFNldCB0aGUgc3RhdGUgb2YgdGhlIFVTRVIxIHN0YXR1cyBMRUQgb24gdGhlIGNSSU8uDQorICovDQordm9pZCBTZXRSSU9Vc2VyTEVEKFVJTlQzMiBzdGF0ZSkNCit7DQorCUxlZE91dHB1dCgwLCBzdGF0ZSA+IDApOw0KK30NCisNCisvKioNCisgKiBHZXQgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIFVTRVIxIHN0YXR1cyBMRUQgb24gdGhlIGNSSU8uDQorICogQHJldHVybiBUaGUgY3VyZW50IHN0YXRlIG9mIHRoZSBVU0VSMSBMRUQuDQorICovDQorSU5UMzIgR2V0UklPVXNlckxFRCgpDQorew0KKwlyZXR1cm4gTGVkSW5wdXQoMCk7DQorfQ0KKw0KKy8qKg0KKyAqIFRvZ2dsZSB0aGUgc3RhdGUgb2YgdGhlIFVTRVIxIHN0YXR1cyBMRUQgb24gdGhlIGNSSU8uDQorICogQHJldHVybiBUaGUgbmV3IHN0YXRlIG9mIHRoZSBVU0VSMSBMRUQuDQorICovDQorSU5UMzIgVG9nZ2xlUklPVXNlckxFRCgpDQorew0KKwlJTlQzMiBsZWRTdGF0ZSA9ICFHZXRSSU9Vc2VyTEVEKCk7DQorCVNldFJJT1VzZXJMRUQobGVkU3RhdGUpOw0KKwlyZXR1cm4gbGVkU3RhdGU7DQorfQ0KKw0KKy8qKg0KKyAqIFNldCB0aGUgc3RhdGUgb2YgdGhlIEZQR0Egc3RhdHVzIExFRCBvbiB0aGUgY1JJTy4NCisgKi8NCit2b2lkIFNldFJJT19GUEdBX0xFRChVSU5UMzIgc3RhdGUpDQorew0KKwl0UmlvU3RhdHVzQ29kZSBzdGF0dXMgPSAwOw0KKwl0R2xvYmFsICpnbG9iYWwgPSB0R2xvYmFsOjpjcmVhdGUoJnN0YXR1cyk7DQorCWdsb2JhbC0+d3JpdGVGUEdBX0xFRChzdGF0ZSwgJnN0YXR1cyk7DQorCXdwaV9zZXRHbG9iYWxFcnJvcihzdGF0dXMpOw0KKwlkZWxldGUgZ2xvYmFsOw0KK30NCisNCisvKioNCisgKiBHZXQgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIEZQR0Egc3RhdHVzIExFRCBvbiB0aGUgY1JJTy4NCisgKiBAcmV0dXJuIFRoZSBjdXJlbnQgc3RhdGUgb2YgdGhlIEZQR0EgTEVELg0KKyAqLw0KK0lOVDMyIEdldFJJT19GUEdBX0xFRCgpDQorew0KKwl0UmlvU3RhdHVzQ29kZSBzdGF0dXMgPSAwOw0KKwl0R2xvYmFsICpnbG9iYWwgPSB0R2xvYmFsOjpjcmVhdGUoJnN0YXR1cyk7DQorCWJvb2wgbGVkVmFsdWUgPSBnbG9iYWwtPnJlYWRGUEdBX0xFRCgmc3RhdHVzKTsNCisJd3BpX3NldEdsb2JhbEVycm9yKHN0YXR1cyk7DQorCWRlbGV0ZSBnbG9iYWw7DQorCXJldHVybiBsZWRWYWx1ZTsNCit9DQorDQorLyoqDQorICogVG9nZ2xlIHRoZSBzdGF0ZSBvZiB0aGUgRlBHQSBzdGF0dXMgTEVEIG9uIHRoZSBjUklPLg0KKyAqIEByZXR1cm4gVGhlIG5ldyBzdGF0ZSBvZiB0aGUgRlBHQSBMRUQuDQorICovDQorSU5UMzIgVG9nZ2xlUklPX0ZQR0FfTEVEKCkNCit7DQorCUlOVDMyIGxlZFN0YXRlID0gIUdldFJJT19GUEdBX0xFRCgpOw0KKwlTZXRSSU9fRlBHQV9MRUQobGVkU3RhdGUpOw0KKwlyZXR1cm4gbGVkU3RhdGU7DQorfQ0KKw0KKw0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL1V0aWxpdHkuaCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL1V0aWxpdHkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOGY5YjU5Ci0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvVXRpbGl0eS5oCkBAIC0wLDAgKzEsNDEgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBDb3B5cmlnaHQgKGMpIEZJUlNUIDIwMDguIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCQkJCQkJCSAqLw0KKy8qIE9wZW4gU291cmNlIFNvZnR3YXJlIC0gbWF5IGJlIG1vZGlmaWVkIGFuZCBzaGFyZWQgYnkgRlJDIHRlYW1zLiBUaGUgY29kZSAgKi8NCisvKiBtdXN0IGJlIGFjY29tcGFuaWVkIGJ5IHRoZSBGSVJTVCBCU0QgbGljZW5zZSBmaWxlIGluICQoV0lORF9CQVNFKS9XUElMaWIuICovDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKyNpZm5kZWYgVVRJTElUWV9IXw0KKyNkZWZpbmUgVVRJTElUWV9IXw0KKw0KKyNpbmNsdWRlIDx0YXNrTGliLmg+DQorDQorI2RlZmluZSB3cGlfYXNzZXJ0KGNvbmRpdGlvbikgd3BpX2Fzc2VydF9pbXBsKGNvbmRpdGlvbiwgI2NvbmRpdGlvbiwgTlVMTCwgX19GSUxFX18sIF9fTElORV9fLCBfX0ZVTkNUSU9OX18pDQorI2RlZmluZSB3cGlfYXNzZXJ0V2l0aE1lc3NhZ2UoY29uZGl0aW9uLCBtZXNzYWdlKSB3cGlfYXNzZXJ0X2ltcGwoY29uZGl0aW9uLCAjY29uZGl0aW9uLCBtZXNzYWdlLCBfX0ZJTEVfXywgX19MSU5FX18sIF9fRlVOQ1RJT05fXykNCisNCisjZGVmaW5lIHdwaV9hc3NlcnRFcXVhbChhLCBiKSB3cGlfYXNzZXJ0RXF1YWxfaW1wbChhLCBiLCBOVUxMLCBfX0ZJTEVfXywgX19MSU5FX18sIF9fRlVOQ1RJT05fXykNCisjZGVmaW5lIHdwaV9hc3NlcnRFcXVhbFdpdGhNZXNzYWdlKGEsIGIsIG1lc3NhZ2UpIHdwaV9hc3NlcnRFcXVhbF9pbXBsKGEsIGIsIG1lc3NhZ2UsIF9fRklMRV9fLCBfX0xJTkVfXywgX19GVU5DVElPTl9fKQ0KKw0KKyNkZWZpbmUgd3BpX2Fzc2VydE5vdEVxdWFsKGEsIGIpIHdwaV9hc3NlcnROb3RFcXVhbF9pbXBsKGEsIGIsIE5VTEwsIF9fRklMRV9fLCBfX0xJTkVfXywgX19GVU5DVElPTl9fKQ0KKyNkZWZpbmUgd3BpX2Fzc2VydE5vdEVxdWFsV2l0aE1lc3NhZ2UoYSwgYiwgbWVzc2FnZSkgd3BpX2Fzc2VydE5vdEVxdWFsX2ltcGwoYSwgYiwgbWVzc2FnZSwgX19GSUxFX18sIF9fTElORV9fLCBfX0ZVTkNUSU9OX18pDQorDQorYm9vbCB3cGlfYXNzZXJ0X2ltcGwoYm9vbCBjb25kaXRpb25WYWx1ZSwgY29uc3QgY2hhciAqY29uZGl0aW9uVGV4dCwgY29uc3QgY2hhciAqbWVzc2FnZSwgY29uc3QgY2hhciAqZmlsZU5hbWUsIFVJTlQzMiBsaW5lTnVtYmVyLCBjb25zdCBjaGFyICpmdW5jTmFtZSk7DQorYm9vbCB3cGlfYXNzZXJ0RXF1YWxfaW1wbChpbnQgdmFsdWVBLCBpbnQgdmFsdWVCLCBjb25zdCBjaGFyICptZXNzYWdlLCBjb25zdCBjaGFyICpmaWxlTmFtZSxVSU5UMzIgbGluZU51bWJlciwgY29uc3QgY2hhciAqZnVuY05hbWUpOw0KK2Jvb2wgd3BpX2Fzc2VydE5vdEVxdWFsX2ltcGwoaW50IHZhbHVlQSwgaW50IHZhbHVlQiwgY29uc3QgY2hhciAqbWVzc2FnZSwgY29uc3QgY2hhciAqZmlsZU5hbWUsVUlOVDMyIGxpbmVOdW1iZXIsIGNvbnN0IGNoYXIgKmZ1bmNOYW1lKTsNCisNCitjaGFyICp3cGlfZ2V0TGFiZWwoVUlOVCBhZGRyLCBJTlQzMiAqZm91bmQgPSBOVUxMKTsNCit2b2lkIHdwaV9zZWxmVHJhY2UoKTsNCit2b2lkIHdwaV9zdXNwZW5kT25Bc3NlcnRFbmFibGVkKGJvb2wgZW5hYmxlZCk7DQordm9pZCB3cGlfc3RhY2tUcmFjZU9uQXNzZXJ0RW5hYmxlKGJvb2wgZW5hYmxlZCk7DQorDQorVUlOVDE2IEdldEZQR0FWZXJzaW9uKCk7DQorVUlOVDMyIEdldEZQR0FSZXZpc2lvbigpOw0KK1VJTlQzMiBHZXRGUEdBVGltZSgpOw0KK0lOVDMyIEdldFJJT1VzZXJTd2l0Y2goKTsNCit2b2lkIFNldFJJT1VzZXJMRUQoVUlOVDMyIHN0YXRlKTsNCitJTlQzMiBHZXRSSU9Vc2VyTEVEKCk7DQorSU5UMzIgVG9nZ2xlUklPVXNlckxFRCgpOw0KK3ZvaWQgU2V0UklPX0ZQR0FfTEVEKFVJTlQzMiBzdGF0ZSk7DQorSU5UMzIgR2V0UklPX0ZQR0FfTEVEKCk7DQorSU5UMzIgVG9nZ2xlUklPX0ZQR0FfTEVEKCk7DQorDQorI2VuZGlmIC8vIFVUSUxJVFlfSF8NCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9WaWN0b3IuY3BwIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvVmljdG9yLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDM0NzY5Ci0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvVmljdG9yLmNwcApAQCAtMCwwICsxLDEwNCBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBDb3B5cmlnaHQgKGMpIEZJUlNUIDIwMDguIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCQkJCQkJCSAgKi8NCisvKiBPcGVuIFNvdXJjZSBTb2Z0d2FyZSAtIG1heSBiZSBtb2RpZmllZCBhbmQgc2hhcmVkIGJ5IEZSQyB0ZWFtcy4gVGhlIGNvZGUgICAqLw0KKy8qIG11c3QgYmUgYWNjb21wYW5pZWQgYnkgdGhlIEZJUlNUIEJTRCBsaWNlbnNlIGZpbGUgaW4gJChXSU5EX0JBU0UpL1dQSUxpYi4gICovDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisjaW5jbHVkZSAiVmljdG9yLmgiDQorDQorI2luY2x1ZGUgIkRpZ2l0YWxNb2R1bGUuaCINCisjaW5jbHVkZSAiTmV0d29ya0NvbW11bmljYXRpb24vVXNhZ2VSZXBvcnRpbmcuaCINCisjaW5jbHVkZSAiTGl2ZVdpbmRvdy9MaXZlV2luZG93LmgiDQorDQorLyoqDQorICogQ29tbW9uIGluaXRpYWxpemF0aW9uIGNvZGUgY2FsbGVkIGJ5IGFsbCBjb25zdHJ1Y3RvcnMuDQorICoNCisgKiBOb3RlIHRoYXQgdGhlIFZpY3RvciB1c2VzIHRoZSBmb2xsb3dpbmcgYm91bmRzIGZvciBQV00gdmFsdWVzLiAgVGhlc2UgdmFsdWVzIHdlcmUgZGV0ZXJtaW5lZA0KKyAqIGVtcGlyaWNhbGx5IGFuZCBvcHRpbWl6ZWQgZm9yIHRoZSBWaWN0b3IgODg4LiBUaGVzZSB2YWx1ZXMgc2hvdWxkIHdvcmsgcmVhc29uYWJseSB3ZWxsIGZvcg0KKyAqIFZpY3RvciA4ODQgY29udHJvbGxlcnMgYXMgd2VsbCBidXQgaWYgdXNlcnMgZXhwZXJpZW5jZSBpc3N1ZXMgc3VjaCBhcyBhc3ltbWV0cmljIGJlaGF2aW9yIGFyb3VuZA0KKyAqIHRoZSBkZWFkYmFuZCBvciBpbmFiaWxpdHkgdG8gc2F0dXJhdGUgdGhlIGNvbnRyb2xsZXIgaW4gZWl0aGVyIGRpcmVjdGlvbiwgY2FsaWJyYXRpb24gaXMgcmVjb21tZW5kZWQuDQorICogVGhlIGNhbGlicmF0aW9uIHByb2NlZHVyZSBjYW4gYmUgZm91bmQgaW4gdGhlIFZpY3RvciA4ODQgVXNlciBNYW51YWwgYXZhaWxhYmxlIGZyb20gSUZJLg0KKyAqIA0KKyAqICAgLSAyMDYgPSBmdWxsICJmb3J3YXJkIg0KKyAqICAgLSAxMzEgPSB0aGUgImhpZ2ggZW5kIiBvZiB0aGUgZGVhZGJhbmQgcmFuZ2UNCisgKiAgIC0gMTI4ID0gY2VudGVyIG9mIHRoZSBkZWFkYmFuZCByYW5nZSAob2ZmKQ0KKyAqICAgLSAxMjUgPSB0aGUgImxvdyBlbmQiIG9mIHRoZSBkZWFkYmFuZCByYW5nZQ0KKyAqICAgLSA1NiA9IGZ1bGwgInJldmVyc2UiDQorICovDQordm9pZCBWaWN0b3I6OkluaXRWaWN0b3IoKSB7DQorCS8vIFRPRE86IGNvbXB1dGUgdGhlIGFwcHJvcHJpYXRlIHZhbHVlcyBiYXNlZCBvbiBkaWdpdGFsIGxvb3AgdGltaW5nDQorCVNldEJvdW5kcygyMDYsIDEzMSwgMTI4LCAxMjUsIDU2KTsNCisJU2V0UGVyaW9kTXVsdGlwbGllcihrUGVyaW9kTXVsdGlwbGllcl8yWCk7DQorCVNldFJhdyhtX2NlbnRlclB3bSk7DQorDQorCUxpdmVXaW5kb3c6OkdldEluc3RhbmNlKCktPkFkZEFjdHVhdG9yKCJWaWN0b3IiLCBHZXRNb2R1bGVOdW1iZXIoKSwgR2V0Q2hhbm5lbCgpLCB0aGlzKTsNCisJblVzYWdlUmVwb3J0aW5nOjpyZXBvcnQoblVzYWdlUmVwb3J0aW5nOjprUmVzb3VyY2VUeXBlX1ZpY3RvciwgR2V0Q2hhbm5lbCgpLCBHZXRNb2R1bGVOdW1iZXIoKSAtIDEpOw0KK30NCisNCisvKioNCisgKiBDb25zdHJ1Y3RvciB0aGF0IGFzc3VtZXMgdGhlIGRlZmF1bHQgZGlnaXRhbCBtb2R1bGUuDQorICogDQorICogQHBhcmFtIGNoYW5uZWwgVGhlIFBXTSBjaGFubmVsIG9uIHRoZSBkaWdpdGFsIG1vZHVsZSB0aGF0IHRoZSBWaWN0b3IgaXMgYXR0YWNoZWQgdG8uDQorICovDQorVmljdG9yOjpWaWN0b3IoVUlOVDMyIGNoYW5uZWwpIDogU2FmZVBXTShjaGFubmVsKQ0KK3sNCisJSW5pdFZpY3RvcigpOw0KK30NCisNCisvKioNCisgKiBDb25zdHJ1Y3RvciB0aGF0IHNwZWNpZmllcyB0aGUgZGlnaXRhbCBtb2R1bGUuDQorICogDQorICogQHBhcmFtIG1vZHVsZU51bWJlciBUaGUgZGlnaXRhbCBtb2R1bGUgKDEgb3IgMikuDQorICogQHBhcmFtIGNoYW5uZWwgVGhlIFBXTSBjaGFubmVsIG9uIHRoZSBkaWdpdGFsIG1vZHVsZSB0aGF0IHRoZSBWaWN0b3IgaXMgYXR0YWNoZWQgdG8gKDEuLjEwKS4NCisgKi8NCitWaWN0b3I6OlZpY3RvcihVSU5UOCBtb2R1bGVOdW1iZXIsIFVJTlQzMiBjaGFubmVsKSA6IFNhZmVQV00obW9kdWxlTnVtYmVyLCBjaGFubmVsKQ0KK3sNCisJSW5pdFZpY3RvcigpOw0KK30NCisNCitWaWN0b3I6On5WaWN0b3IoKQ0KK3sNCit9DQorDQorLyoqDQorICogU2V0IHRoZSBQV00gdmFsdWUuICANCisgKiANCisgKiBUaGUgUFdNIHZhbHVlIGlzIHNldCB1c2luZyBhIHJhbmdlIG9mIC0xLjAgdG8gMS4wLCBhcHByb3ByaWF0ZWx5DQorICogc2NhbGluZyB0aGUgdmFsdWUgZm9yIHRoZSBGUEdBLg0KKyAqIA0KKyAqIEBwYXJhbSBzcGVlZCBUaGUgc3BlZWQgdmFsdWUgYmV0d2VlbiAtMS4wIGFuZCAxLjAgdG8gc2V0Lg0KKyAqIEBwYXJhbSBzeW5jR3JvdXAgVW51c2VkIGludGVyZmFjZS4NCisgKi8NCit2b2lkIFZpY3Rvcjo6U2V0KGZsb2F0IHNwZWVkLCBVSU5UOCBzeW5jR3JvdXApDQorew0KKwlTZXRTcGVlZChzcGVlZCk7DQorfQ0KKw0KKy8qKg0KKyAqIEdldCB0aGUgcmVjZW50bHkgc2V0IHZhbHVlIG9mIHRoZSBQV00uDQorICogDQorICogQHJldHVybiBUaGUgbW9zdCByZWNlbnRseSBzZXQgdmFsdWUgZm9yIHRoZSBQV00gYmV0d2VlbiAtMS4wIGFuZCAxLjAuDQorICovDQorZmxvYXQgVmljdG9yOjpHZXQoKQ0KK3sNCisJcmV0dXJuIEdldFNwZWVkKCk7DQorfQ0KKw0KKy8qKg0KKyAqIENvbW1vbiBpbnRlcmZhY2UgZm9yIGRpc2FibGluZyBhIG1vdG9yLg0KKyAqLw0KK3ZvaWQgVmljdG9yOjpEaXNhYmxlKCkNCit7DQorCVNldFJhdyhrUHdtRGlzYWJsZWQpOw0KK30NCisNCisvKioNCisgKiBXcml0ZSBvdXQgdGhlIFBJRCB2YWx1ZSBhcyBzZWVuIGluIHRoZSBQSURPdXRwdXQgYmFzZSBvYmplY3QuDQorICogDQorICogQHBhcmFtIG91dHB1dCBXcml0ZSBvdXQgdGhlIFBXTSB2YWx1ZSBhcyB3YXMgZm91bmQgaW4gdGhlIFBJRENvbnRyb2xsZXINCisgKi8NCit2b2lkIFZpY3Rvcjo6UElEV3JpdGUoZmxvYXQgb3V0cHV0KSANCit7DQorCVNldChvdXRwdXQpOw0KK30NCisNCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9WaWN0b3IuaCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL1ZpY3Rvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1OGFiYjUKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9WaWN0b3IuaApAQCAtMCwwICsxLDM0IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy8qIENvcHlyaWdodCAoYykgRklSU1QgMjAwOC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4JCQkJCQkJICAqLw0KKy8qIE9wZW4gU291cmNlIFNvZnR3YXJlIC0gbWF5IGJlIG1vZGlmaWVkIGFuZCBzaGFyZWQgYnkgRlJDIHRlYW1zLiBUaGUgY29kZSAgICovDQorLyogbXVzdCBiZSBhY2NvbXBhbmllZCBieSB0aGUgRklSU1QgQlNEIGxpY2Vuc2UgZmlsZSBpbiAkKFdJTkRfQkFTRSkvV1BJTGliLiAgKi8NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKyNpZm5kZWYgVklDVE9SX0gNCisjZGVmaW5lIFZJQ1RPUl9IDQorDQorI2luY2x1ZGUgIlNhZmVQV00uaCINCisjaW5jbHVkZSAiU3BlZWRDb250cm9sbGVyLmgiDQorI2luY2x1ZGUgIlBJRE91dHB1dC5oIg0KKw0KKy8qKg0KKyAqIElGSSBWaWN0b3IgU3BlZWQgQ29udHJvbGxlcg0KKyAqLw0KK2NsYXNzIFZpY3RvciA6IHB1YmxpYyBTYWZlUFdNLCBwdWJsaWMgU3BlZWRDb250cm9sbGVyDQorew0KK3B1YmxpYzoNCisJZXhwbGljaXQgVmljdG9yKFVJTlQzMiBjaGFubmVsKTsNCisJVmljdG9yKFVJTlQ4IG1vZHVsZU51bWJlciwgVUlOVDMyIGNoYW5uZWwpOw0KKwl2aXJ0dWFsIH5WaWN0b3IoKTsNCisJdmlydHVhbCB2b2lkIFNldChmbG9hdCB2YWx1ZSwgVUlOVDggc3luY0dyb3VwPTApOw0KKwl2aXJ0dWFsIGZsb2F0IEdldCgpOw0KKwl2aXJ0dWFsIHZvaWQgRGlzYWJsZSgpOw0KKw0KKwl2aXJ0dWFsIHZvaWQgUElEV3JpdGUoZmxvYXQgb3V0cHV0KTsNCisNCitwcml2YXRlOg0KKwl2b2lkIEluaXRWaWN0b3IoKTsNCit9Ow0KKw0KKyNlbmRpZg0KKw0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL1Zpc2lvbi9BeGlzQ2FtZXJhLmNwcCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL1Zpc2lvbi9BeGlzQ2FtZXJhLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNGFhNGIzCi0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvVmlzaW9uL0F4aXNDYW1lcmEuY3BwCkBAIC0wLDAgKzEsNTAxIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy8qIENvcHlyaWdodCAoYykgRklSU1QgMjAwOC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4JCQkJCQkJICAqLw0KKy8qIE9wZW4gU291cmNlIFNvZnR3YXJlIC0gbWF5IGJlIG1vZGlmaWVkIGFuZCBzaGFyZWQgYnkgRlJDIHRlYW1zLiBUaGUgY29kZSAgICovDQorLyogbXVzdCBiZSBhY2NvbXBhbmllZCBieSB0aGUgRklSU1QgQlNEIGxpY2Vuc2UgZmlsZSBpbiAkKFdJTkRfQkFTRSkvV1BJTGliLiAgKi8NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKyNpbmNsdWRlICJWaXNpb24vQXhpc0NhbWVyYS5oIg0KKw0KKyNpbmNsdWRlIDxzdHJpbmcuaD4NCisjaW5jbHVkZSAiTmV0d29ya0NvbW11bmljYXRpb24vVXNhZ2VSZXBvcnRpbmcuaCINCisjaW5jbHVkZSAiU3luY2hyb25pemVkLmgiDQorI2luY2x1ZGUgIlZpc2lvbi9QQ1ZpZGVvU2VydmVyLmgiDQorI2luY2x1ZGUgIldQSUVycm9ycy5oIg0KKw0KKy8qKiBQcml2YXRlIE5JIGZ1bmN0aW9uIHRvIGRlY29kZSBKUEVHICovDQorSU1BUV9GVU5DIGludCBQcml2X1JlYWRKUEVHU3RyaW5nX0MoSW1hZ2UqIF9pbWFnZSwgY29uc3QgdW5zaWduZWQgY2hhciogX3N0cmluZywgVUlOVDMyIF9zdHJpbmdMZW5ndGgpOw0KKw0KKy8vIE1heCBwYWNrZXQgd2l0aG91dCBqdW1ibyBmcmFtZXMgaXMgMTUwMC4uLiBhZGQgMzYgYmVjYXVzZT8/DQorI2RlZmluZSBrTWF4UGFja2V0U2l6ZSAxNTM2DQorI2RlZmluZSBrSW1hZ2VCdWZmZXJBbGxvY2F0aW9uSW5jcmVtZW50IDEwMDANCisNCitBeGlzQ2FtZXJhICpBeGlzQ2FtZXJhOjpfaW5zdGFuY2UgPSBOVUxMOw0KKw0KKy8qKg0KKyAqIEF4aXNDYW1lcmEgY29uc3RydWN0b3INCisgKi8NCitBeGlzQ2FtZXJhOjpBeGlzQ2FtZXJhKGNvbnN0IGNoYXIgKmlwQWRkcmVzcykNCisJOiBBeGlzQ2FtZXJhUGFyYW1zKGlwQWRkcmVzcykNCisJLCBtX2NhbWVyYVNvY2tldChFUlJPUikNCisJLCBtX3Byb3RlY3RlZEltYWdlQnVmZmVyKE5VTEwpDQorCSwgbV9wcm90ZWN0ZWRJbWFnZUJ1ZmZlckxlbmd0aCgwKQ0KKwksIG1fcHJvdGVjdGVkSW1hZ2VTaXplKDApDQorCSwgbV9wcm90ZWN0ZWRJbWFnZVNlbShOVUxMKQ0KKwksIG1fZnJlc2hJbWFnZShmYWxzZSkNCisJLCBtX2ltYWdlU3RyZWFtVGFzaygiY2FtZXJhVGFzayIsIChGVU5DUFRSKXNfSW1hZ2VTdHJlYW1UYXNrRnVuY3Rpb24pDQorCSwgbV92aWRlb1NlcnZlcihOVUxMKQ0KK3sNCisJbV9wcm90ZWN0ZWRJbWFnZVNlbSA9IHNlbU1DcmVhdGUoU0VNX1FfUFJJT1JJVFkgfCBTRU1fSU5WRVJTSU9OX1NBRkUgfCBTRU1fREVMRVRFX1NBRkUpOw0KKw0KKyNpZiBKQVZBX0NBTUVSQV9MSUIgIT0gMQ0KKwluVXNhZ2VSZXBvcnRpbmc6OnJlcG9ydChuVXNhZ2VSZXBvcnRpbmc6OmtSZXNvdXJjZVR5cGVfQXhpc0NhbWVyYSwgaXBBZGRyZXNzID09IE5VTEwgPyAxIDogMik7DQorI2VuZGlmDQorDQorCWlmICghU3RhdHVzSXNGYXRhbCgpKQ0KKwkJbV9pbWFnZVN0cmVhbVRhc2suU3RhcnQoKGludCl0aGlzKTsgDQorfQ0KKw0KKy8qKg0KKyAqIERlc3RydWN0b3INCisgKi8NCitBeGlzQ2FtZXJhOjp+QXhpc0NhbWVyYSgpDQorew0KKwlkZWxldGUgbV92aWRlb1NlcnZlcjsNCisJbV92aWRlb1NlcnZlciA9IE5VTEw7DQorDQorCW1faW1hZ2VTdHJlYW1UYXNrLlN0b3AoKTsNCisJY2xvc2UobV9jYW1lcmFTb2NrZXQpOw0KKw0KKwlTZW1TZXRfdDo6aXRlcmF0b3IgaXQgPSBtX25ld0ltYWdlU2VtU2V0LmJlZ2luKCk7DQorCVNlbVNldF90OjppdGVyYXRvciBlbmQgPSBtX25ld0ltYWdlU2VtU2V0LmVuZCgpOw0KKwlmb3IgKDtpdCAhPSBlbmQ7IGl0KyspDQorCXsNCisJCXNlbURlbGV0ZSgqaXQpOw0KKwl9DQorCW1fbmV3SW1hZ2VTZW1TZXQuY2xlYXIoKTsNCisNCisJc2VtRGVsZXRlKG1fcHJvdGVjdGVkSW1hZ2VTZW0pOw0KK30NCisNCisvKioNCisgKiBHZXQgYSBwb2ludGVyIHRvIHRoZSBBeGlzQ2FtZXJhIG9iamVjdCwgaWYgdGhlIG9iamVjdCBkb2VzIG5vdCBleGlzdCwgY3JlYXRlIGl0DQorICogVG8gdXNlIHRoZSBjYW1lcmEgb24gcG9ydCAyIG9mIGEgY1JJTy1GUkMsIHBhc3MgIjE5Mi4xNjguMC45MCIgdG8gdGhlIGZpcnN0IEdldEluc3RhbmNlIGNhbGwuDQorICogQHJldHVybiByZWZlcmVuY2UgdG8gQXhpc0NhbWVyYSBvYmplY3QNCisgKi8NCitBeGlzQ2FtZXJhICZBeGlzQ2FtZXJhOjpHZXRJbnN0YW5jZShjb25zdCBjaGFyICpjYW1lcmFJUCkNCit7DQorCWlmIChOVUxMID09IF9pbnN0YW5jZSkNCisJew0KKwkJX2luc3RhbmNlID0gbmV3IEF4aXNDYW1lcmEoY2FtZXJhSVApOw0KKw0KKwkJX2luc3RhbmNlLT5tX3ZpZGVvU2VydmVyID0gbmV3IFBDVmlkZW9TZXJ2ZXIoKTsNCisJfQ0KKw0KKwlyZXR1cm4gKl9pbnN0YW5jZTsNCit9DQorDQorLyoqDQorICogQ2FsbGVkIGJ5IEphdmEgdG8gZGVsZXRlIHRoZSBjYW1lcmEuLi4gaG93IHRob3VnaHRmdWwNCisgKi8NCit2b2lkIEF4aXNDYW1lcmE6OkRlbGV0ZUluc3RhbmNlKCkNCit7DQorCWRlbGV0ZSBfaW5zdGFuY2U7DQorCV9pbnN0YW5jZSA9IE5VTEw7DQorfQ0KKw0KKy8qKg0KKyAqIFJldHVybiB0cnVlIGlmIHRoZSBsYXRlc3QgaW1hZ2UgZnJvbSB0aGUgY2FtZXJhIGhhcyBub3QgYmVlbiByZXRyaWV2ZWQgYnkgY2FsbGluZyBHZXRJbWFnZSgpIHlldC4NCisgKiBAcmV0dXJuIHRydWUgaWYgdGhlIGltYWdlIGhhcyBub3QgYmVlbiByZXRyaWV2ZWQgeWV0Lg0KKyAqLw0KK2Jvb2wgQXhpc0NhbWVyYTo6SXNGcmVzaEltYWdlKCkNCit7DQorCXJldHVybiBtX2ZyZXNoSW1hZ2U7DQorfQ0KKw0KKy8qKg0KKyAqIEdldCB0aGUgc2VtYXBob3JlIHRvIGJlIHVzZWQgdG8gc3luY2hyb25pemUgaW1hZ2UgYWNjZXNzIHdpdGggY2FtZXJhIGFjcXVpc2l0aW9uDQorICoNCisgKiBDYWxsIHNlbVRha2Ugb24gdGhlIHJldHVybmVkIHNlbWFwaG9yZSB0byBibG9jayB1bnRpbCBhIG5ldyBpbWFnZSBpcyBhY3F1aXJlZC4NCisgKg0KKyAqIFRoZSBzZW1hcGhvcmUgaXMgb3duZWQgYnkgdGhlIEF4aXNDYW1lcmEgY2xhc3MgYW5kIHdpbGwgYmUgZGVsZXRlZCB3aGVuIHRoZSBjbGFzcyBpcyBkZXN0cm95ZWQuDQorICogQHJldHVybiBBIHNlbWFwaG9yZSB0byBub3RpZnkgd2hlbiBuZXcgaW1hZ2UgaXMgcmVjZWl2ZWQNCisgKi8NCitTRU1fSUQgQXhpc0NhbWVyYTo6R2V0TmV3SW1hZ2VTZW0oKQ0KK3sNCisJU0VNX0lEIHNlbSA9IHNlbUJDcmVhdGUgKFNFTV9RX1BSSU9SSVRZLCBTRU1fRU1QVFkpOw0KKwltX25ld0ltYWdlU2VtU2V0Lmluc2VydChzZW0pOw0KKwlyZXR1cm4gc2VtOw0KK30NCisNCisvKioNCisgKiBHZXQgYW4gaW1hZ2UgZnJvbSB0aGUgY2FtZXJhIGFuZCBzdG9yZSBpdCBpbiB0aGUgcHJvdmlkZWQgaW1hZ2UuDQorICogQHBhcmFtIGltYWdlIFRoZSBpbWFxIGltYWdlIHRvIHN0b3JlIHRoZSByZXN1bHQgaW4uIFRoaXMgbXVzdCBiZSBhbiBIU0wgb3IgUkdCIGltYWdlDQorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgSmF2YS4NCisgKiBAcmV0dXJuIDEgdXBvbiBzdWNjZXNzLCB6ZXJvIG9uIGEgZmFpbHVyZQ0KKyAqLw0KK2ludCBBeGlzQ2FtZXJhOjpHZXRJbWFnZShJbWFnZSogaW1hcUltYWdlKQ0KK3sNCisJaWYgKG1fcHJvdGVjdGVkSW1hZ2VCdWZmZXIgPT0gTlVMTCkNCisJCXJldHVybiAwOw0KKwlTeW5jaHJvbml6ZWQgc3luYyhtX3Byb3RlY3RlZEltYWdlU2VtKTsNCisJUHJpdl9SZWFkSlBFR1N0cmluZ19DKGltYXFJbWFnZSwNCisJCSh1bnNpZ25lZCBjaGFyKiltX3Byb3RlY3RlZEltYWdlQnVmZmVyLCBtX3Byb3RlY3RlZEltYWdlU2l6ZSk7DQorCW1fZnJlc2hJbWFnZSA9IGZhbHNlOw0KKwlyZXR1cm4gMTsNCit9DQorDQorI2lmIEpBVkFfQ0FNRVJBX0xJQiAhPSAxDQorLyoqDQorICogR2V0IGFuIGltYWdlIGZyb20gdGhlIGNhbWVyYSBhbmQgc3RvcmUgaXQgaW4gdGhlIHByb3ZpZGVkIGltYWdlLg0KKyAqIEBwYXJhbSBpbWFnZSBUaGUgaW1hZ2UgdG8gc3RvcmUgdGhlIHJlc3VsdCBpbi4gVGhpcyBtdXN0IGJlIGFuIEhTTCBvciBSR0IgaW1hZ2UNCisgKiBAcmV0dXJuIDEgdXBvbiBzdWNjZXNzLCB6ZXJvIG9uIGEgZmFpbHVyZQ0KKyAqLw0KK2ludCBBeGlzQ2FtZXJhOjpHZXRJbWFnZShDb2xvckltYWdlKiBpbWFnZSkNCit7DQorCXJldHVybiBHZXRJbWFnZShpbWFnZS0+R2V0SW1hcUltYWdlKCkpOw0KK30NCisNCisvKioNCisgKiBJbnN0YW50aWF0ZSBhIG5ldyBpbWFnZSBvYmplY3QgYW5kIGZpbGwgaXQgd2l0aCB0aGUgbGF0ZXN0IGltYWdlIGZyb20gdGhlIGNhbWVyYS4NCisgKg0KKyAqIFRoZSByZXR1cm5lZCBwb2ludGVyIGlzIG93bmVkIGJ5IHRoZSBjYWxsZXIgYW5kIGlzIHRoZWlyIHJlc3BvbnNpYmlsaXR5IHRvIGRlbGV0ZS4NCisgKiBAcmV0dXJuIGEgcG9pbnRlciB0byBhbiBIU0xJbWFnZSBvYmplY3QNCisgKi8NCitIU0xJbWFnZSogQXhpc0NhbWVyYTo6R2V0SW1hZ2UoKQ0KK3sNCisJSFNMSW1hZ2UgKmltYWdlID0gbmV3IEhTTEltYWdlKCk7DQorCUdldEltYWdlKGltYWdlKTsNCisJcmV0dXJuIGltYWdlOw0KK30NCisjZW5kaWYNCisNCisvKioNCisgKiBDb3B5IGFuIGltYWdlIGludG8gYW4gZXhpc3RpbmcgYnVmZmVyLg0KKyAqIFRoaXMgY29waWVzIGFuIGltYWdlIGludG8gYW4gZXhpc3RpbmcgYnVmZmVyIHJhdGhlciB0aGFuIGNyZWF0aW5nIGEgbmV3IGltYWdlDQorICogaW4gbWVtb3J5LiBUaGF0IHdheSBhIG5ldyBpbWFnZSBpcyBvbmx5IGFsbG9jYXRlZCB3aGVuIHRoZSBpbWFnZSBiZWluZyBjb3BpZWQgaXMNCisgKiBsYXJnZXIgdGhhbiB0aGUgZGVzdGluYXRpb24uDQorICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBQQ1ZpZGVvU2VydmVyIGNsYXNzLg0KKyAqIEBwYXJhbSBpbWFnZURhdGEgVGhlIGRlc3RpbmF0aW9uIGltYWdlLg0KKyAqIEBwYXJhbSBudW1CeXRlcyBUaGUgc2l6ZSBvZiB0aGUgZGVzdGluYXRpb24gaW1hZ2UuDQorICogQHJldHVybiAwIGlmIGZhaWxlZCAobm8gc291cmNlIGltYWdlIG9yIG5vIG1lbW9yeSksIDEgaWYgc3VjY2Vzcy4NCisgKi8NCitpbnQgQXhpc0NhbWVyYTo6Q29weUpQRUcoY2hhciAqKmRlc3RJbWFnZSwgaW50ICZkZXN0SW1hZ2VTaXplLCBpbnQgJmRlc3RJbWFnZUJ1ZmZlclNpemUpDQorew0KKwlTeW5jaHJvbml6ZWQgc3luYyhtX3Byb3RlY3RlZEltYWdlU2VtKTsNCisJaWYgKGRlc3RJbWFnZSA9PSBOVUxMKQ0KKwkJd3BpX3NldFdQSUVycm9yV2l0aENvbnRleHQoTnVsbFBhcmFtZXRlciwgImRlc3RJbWFnZSBtdXN0IG5vdCBiZSBOVUxMIik7DQorDQorCWlmIChtX3Byb3RlY3RlZEltYWdlQnVmZmVyID09IE5VTEwgfHwgbV9wcm90ZWN0ZWRJbWFnZVNpemUgPD0gMCkNCisJCXJldHVybiAwOyAvLyBpZiBubyBzb3VyY2UgaW1hZ2UNCisNCisJaWYgKGRlc3RJbWFnZUJ1ZmZlclNpemUgPCBtX3Byb3RlY3RlZEltYWdlU2l6ZSkgLy8gaWYgY3VycmVudCBkZXN0aW5hdGlvbiBidWZmZXIgdG9vIHNtYWxsDQorCXsNCisJCWlmICgqZGVzdEltYWdlICE9IE5VTEwpIGRlbGV0ZSBbXSAqZGVzdEltYWdlOw0KKwkJZGVzdEltYWdlQnVmZmVyU2l6ZSA9IG1fcHJvdGVjdGVkSW1hZ2VTaXplICsga0ltYWdlQnVmZmVyQWxsb2NhdGlvbkluY3JlbWVudDsNCisJCSpkZXN0SW1hZ2UgPSBuZXcgY2hhcltkZXN0SW1hZ2VCdWZmZXJTaXplXTsNCisJCWlmICgqZGVzdEltYWdlID09IE5VTEwpIHJldHVybiAwOw0KKwl9DQorCS8vIGNvcHkgdGhpcyBpbWFnZSBpbnRvIGRlc3RpbmF0aW9uIGJ1ZmZlcg0KKwlpZiAoKmRlc3RJbWFnZSA9PSBOVUxMKQ0KKwl7DQorCQl3cGlfc2V0V1BJRXJyb3JXaXRoQ29udGV4dChOdWxsUGFyYW1ldGVyLCAiKmRlc3RJbWFnZSBtdXN0IG5vdCBiZSBOVUxMIik7DQorCX0NCisJLy8gVE9ETzogSXMgdGhpcyBjb3B5IHJlYWx5IG5lY2Vzc2FyeS4uLiBwZXJoYXBzIHdlIGNhbiBzaW1wbHkgdHJhbnNtaXQgd2hpbGUgaG9sZGluZyB0aGUgcHJvdGVjdGVkIGJ1ZmZlcg0KKwltZW1jcHkoKmRlc3RJbWFnZSwgbV9wcm90ZWN0ZWRJbWFnZUJ1ZmZlciwgbV9wcm90ZWN0ZWRJbWFnZVNpemUpOw0KKwlkZXN0SW1hZ2VTaXplID0gbV9wcm90ZWN0ZWRJbWFnZVNpemU7DQorCXJldHVybiAxOw0KK30NCisNCisvKioNCisgKiBTdGF0aWMgaW50ZXJmYWNlIHRoYXQgd2lsbCBjYXVzZSBhbiBpbnN0YW50aWF0aW9uIGlmIG5lY2Vzc2FyeS4NCisgKiBUaGlzIHN0YXRpYyBzdHViIGlzIGRpcmVjdGx5IHNwYXduZWQgYXMgYSB0YXNrIHRvIHJlYWQgaW1hZ2VzIGZyb20gdGhlIGNhbWVyYS4NCisgKi8NCitpbnQgQXhpc0NhbWVyYTo6c19JbWFnZVN0cmVhbVRhc2tGdW5jdGlvbihBeGlzQ2FtZXJhICp0aGlzUHRyKQ0KK3sNCisJcmV0dXJuIHRoaXNQdHItPkltYWdlU3RyZWFtVGFza0Z1bmN0aW9uKCk7DQorfQ0KKw0KKy8qKg0KKyAqIFRhc2sgc3Bhd25lZCBieSBBeGlzQ2FtZXJhIGNvbnN0cnVjdG9yIHRvIHJlY2VpdmUgaW1hZ2VzIGZyb20gY2FtDQorICogSWYgc2V0TmV3SW1hZ2VTZW0gaGFzIGJlZW4gY2FsbGVkLCB0aGlzIGZ1bmN0aW9uIGRvZXMgYSBzZW1HaXZlIG9uIGVhY2ggbmV3IGltYWdlDQorICogSW1hZ2VzIGNhbiBiZSBhY2Nlc3NlZCBieSBjYWxsaW5nIGdldEltYWdlKCkNCisgKi8NCitpbnQgQXhpc0NhbWVyYTo6SW1hZ2VTdHJlYW1UYXNrRnVuY3Rpb24oKQ0KK3sNCisJLy8gTG9vcCBvbiB0cnlpbmcgdG8gc2V0dXAgdGhlIGNhbWVyYSBjb25uZWN0aW9uLiBUaGlzIGhhcHBlbnMgaW4gYSBiYWNrZ3JvdW5kDQorCS8vIHRocmVhZCBzbyBpdCBzaG91bGRuJ3QgZWZmZWN0IHRoZSBvcGVyYXRpb24gb2YgdXNlciBwcm9ncmFtcy4NCisJd2hpbGUgKDEpDQorCXsNCisJCWNvbnN0IGNoYXIgKnJlcXVlc3RTdHJpbmcgPSAiR0VUIC9tanBnL3ZpZGVvLm1qcGcgSFRUUC8xLjFcblwNCitVc2VyLUFnZW50OiBIVFRQU3RyZWFtQ2xpZW50XG5cDQorQ29ubmVjdGlvbjogS2VlcC1BbGl2ZVxuXA0KK0NhY2hlLUNvbnRyb2w6IG5vLWNhY2hlXG5cDQorQXV0aG9yaXphdGlvbjogQmFzaWMgUmxKRE9rWlNRdz09XG5cbiI7DQorCQlzZW1UYWtlKG1fc29ja2V0UG9zc2Vzc2lvblNlbSwgV0FJVF9GT1JFVkVSKTsNCisJCW1fY2FtZXJhU29ja2V0ID0gQ3JlYXRlQ2FtZXJhU29ja2V0KHJlcXVlc3RTdHJpbmcpOw0KKwkJaWYgKG1fY2FtZXJhU29ja2V0ID09IEVSUk9SKQ0KKwkJew0KKwkJCS8vIERvbid0IGhhbW1lciB0aGUgY2FtZXJhIGlmIGl0IGlzbid0IHJlYWR5Lg0KKwkJCXNlbUdpdmUobV9zb2NrZXRQb3NzZXNzaW9uU2VtKTsNCisJCQl0YXNrRGVsYXkoMTAwMCk7DQorCQl9DQorCQllbHNlDQorCQl7DQorCQkJUmVhZEltYWdlc0Zyb21DYW1lcmEoKTsNCisJCX0NCisJfQ0KK30NCisNCisvKioNCisgKiBUaGlzIGZ1bmN0aW9uIGFjdHVhbGx5IHJlYWRzIHRoZSBpbWFnZXMgZnJvbSB0aGUgY2FtZXJhLg0KKyAqLw0KK2ludCBBeGlzQ2FtZXJhOjpSZWFkSW1hZ2VzRnJvbUNhbWVyYSgpDQorew0KKwljaGFyICppbWdCdWZmZXIgPSBOVUxMOw0KKwlpbnQgaW1nQnVmZmVyTGVuZ3RoID0gMDsNCisJLy9JbmZpbml0ZSBsb29wLCB0YXNrIGRlbGV0aW9uIGhhbmRsZWQgYnkgdGFza0RlbGV0ZUhvb2sNCisJLy8gU29ja2V0IGNsZWFudXAgaGFuZGxlZCBieSBkZXN0cnVjdG9yDQorDQorCS8vIFRPRE86IHRoZXNlIHJlY3YgY2FsbHMgbXVzdCBiZSBub24tYmxvY2tpbmcuIE90aGVyd2lzZSBpZiB0aGUgY2FtZXJhDQorCS8vIGZhaWxzIGR1cmluZyBhIHJlYWQsIHRoZSBjb2RlIGhhbmdzIGFuZCBuZXZlciByZXRyaWVzIHdoZW4gdGhlIGNhbWVyYSBjb21lcw0KKwkvLyBiYWNrIHVwLg0KKw0KKwlpbnQgY291bnRlciA9IDI7DQorCXdoaWxlICgxKQ0KKwl7DQorCQljaGFyIGluaXRpYWxSZWFkQnVmZmVyW2tNYXhQYWNrZXRTaXplXSA9ICIiOw0KKwkJY2hhciBpbnRlcm1lZGlhdGVCdWZmZXJbMV07DQorCQljaGFyICp0cmFpbGluZ1B0ciA9IGluaXRpYWxSZWFkQnVmZmVyOw0KKwkJaW50IHRyYWlsaW5nQ291bnRlciA9IDA7DQorCQl3aGlsZSAoY291bnRlcikNCisJCXsNCisJCQkvLyBUT0RPOiBmaXggbWUuLi4gdGhpcyBjYW5ub3QgYmUgdGhlIG1vc3QgZWZmaWNpZW50IHdheSB0byBhcHByb2FjaCB0aGlzLCByZWFkaW5nIG9uZSBieXRlIGF0IGEgdGltZS4NCisJCQlpZihyZWN2KG1fY2FtZXJhU29ja2V0LCBpbnRlcm1lZGlhdGVCdWZmZXIsIDEsIDApID09IEVSUk9SKQ0KKwkJCXsNCisJCQkJd3BpX3NldEVycm5vRXJyb3JXaXRoQ29udGV4dCgiRmFpbGVkIHRvIHJlYWQgaW1hZ2UgaGVhZGVyIik7DQorCQkJCWNsb3NlIChtX2NhbWVyYVNvY2tldCk7DQorCQkJCXJldHVybiBFUlJPUjsNCisJCQl9DQorCQkJc3RybmNhdChpbml0aWFsUmVhZEJ1ZmZlciwgaW50ZXJtZWRpYXRlQnVmZmVyLCAxKTsNCisJCQkvLyB0cmFpbGluZ0NvdW50ZXIgZW5zdXJlcyB0aGF0IHdlIHN0YXJ0IGxvb2tpbmcgZm9yIHRoZSA0IGJ5dGUgc3RyaW5nIGFmdGVyDQorCQkJLy8gdGhlcmUgaXMgYXQgbGVhc3QgNCBieXRlcyB0b3RhbC4gS2luZCBvZiBvYnNjdXJlLg0KKwkJCS8vIGxvb2sgZm9yIDIgYmxhbmsgbGluZXMgKFxyXG4pDQorCQkJaWYgKE5VTEwgIT0gc3Ryc3RyKHRyYWlsaW5nUHRyLCAiXHJcblxyXG4iKSkNCisJCQl7DQorCQkJCS0tY291bnRlcjsNCisJCQl9DQorCQkJaWYgKCsrdHJhaWxpbmdDb3VudGVyID49IDQpDQorCQkJew0KKwkJCQl0cmFpbGluZ1B0cisrOw0KKwkJCX0NCisJCX0NCisJCWNvdW50ZXIgPSAxOw0KKwkJY2hhciAqY29udGVudExlbmd0aCA9IHN0cnN0cihpbml0aWFsUmVhZEJ1ZmZlciwgIkNvbnRlbnQtTGVuZ3RoOiAiKTsNCisJCWlmIChjb250ZW50TGVuZ3RoID09IE5VTEwpDQorCQl7DQorCQkJd3BpX3NldFdQSUVycm9yV2l0aENvbnRleHQoSW5jb21wYXRpYmxlTW9kZSwgIk5vIGNvbnRlbnQtbGVuZ3RoIHRva2VuIGZvdW5kIGluIHBhY2tldCIpOw0KKwkJCWNsb3NlKG1fY2FtZXJhU29ja2V0KTsNCisJCQlyZXR1cm4gRVJST1I7DQorCQl9DQorCQljb250ZW50TGVuZ3RoID0gY29udGVudExlbmd0aCArIDE2OyAvLyBza2lwIHBhc3QgImNvbnRlbnQgbGVuZ3RoIg0KKwkJaW50IHJlYWRMZW5ndGggPSBhdG9sKGNvbnRlbnRMZW5ndGgpOyAvLyBnZXQgdGhlIGltYWdlIGJ5dGUgY291bnQNCisNCisJCS8vIE1ha2Ugc3VyZSBidWZmZXIgaXMgbGFyZ2UgZW5vdWdoDQorCQlpZiAoaW1nQnVmZmVyTGVuZ3RoIDwgcmVhZExlbmd0aCkNCisJCXsNCisJCQlpZiAoaW1nQnVmZmVyKSBkZWxldGVbXSBpbWdCdWZmZXI7DQorCQkJaW1nQnVmZmVyTGVuZ3RoID0gcmVhZExlbmd0aCArIGtJbWFnZUJ1ZmZlckFsbG9jYXRpb25JbmNyZW1lbnQ7DQorCQkJaW1nQnVmZmVyID0gbmV3IGNoYXJbaW1nQnVmZmVyTGVuZ3RoXTsNCisJCQlpZiAoaW1nQnVmZmVyID09IE5VTEwpDQorCQkJew0KKwkJCQlpbWdCdWZmZXJMZW5ndGggPSAwOw0KKwkJCQljb250aW51ZTsNCisJCQl9DQorCQl9DQorDQorCQkvLyBSZWFkIHRoZSBpbWFnZSBkYXRhIGZvciAiQ29udGVudC1MZW5ndGgiIGJ5dGVzDQorCQlpbnQgYnl0ZXNSZWFkID0gMDsNCisJCWludCByZW1haW5pbmcgPSByZWFkTGVuZ3RoOw0KKwkJd2hpbGUoYnl0ZXNSZWFkIDwgcmVhZExlbmd0aCkNCisJCXsNCisJCQlpbnQgYnl0ZXNUaGlzUmVjdiA9IHJlY3YobV9jYW1lcmFTb2NrZXQsICZpbWdCdWZmZXJbYnl0ZXNSZWFkXSwgcmVtYWluaW5nLCAwKTsNCisJCQlieXRlc1JlYWQgKz0gYnl0ZXNUaGlzUmVjdjsNCisJCQlyZW1haW5pbmcgLT0gYnl0ZXNUaGlzUmVjdjsNCisJCX0NCisJCS8vIFVwZGF0ZSBpbWFnZQ0KKwkJVXBkYXRlUHVibGljSW1hZ2VGcm9tQ2FtZXJhKGltZ0J1ZmZlciwgcmVhZExlbmd0aCk7DQorCQlpZiAoc2VtVGFrZShtX3BhcmFtQ2hhbmdlZFNlbSwgTk9fV0FJVCkgPT0gT0spDQorCQl7DQorCQkJLy8gcGFyYW1zIG5lZWQgdG8gYmUgdXBkYXRlZDogY2xvc2UgdGhlIHZpZGVvIHN0cmVhbTsgcmVsZWFzZSB0aGUgY2FtZXJhLg0KKwkJCWNsb3NlKG1fY2FtZXJhU29ja2V0KTsNCisJCQlzZW1HaXZlKG1fc29ja2V0UG9zc2Vzc2lvblNlbSk7DQorCQkJcmV0dXJuIDA7DQorCQl9DQorCX0NCit9DQorDQorLyoqDQorICogQ29weSB0aGUgaW1hZ2UgZnJvbSBwcml2YXRlIGJ1ZmZlciB0byBzaGFyZWQgYnVmZmVyLg0KKyAqIEBwYXJhbSBpbWdCdWZmZXIgVGhlIGJ1ZmZlciBjb250YWluaW5nIHRoZSBpbWFnZQ0KKyAqIEBwYXJhbSBidWZMZW5ndGggVGhlIGxlbmd0aCBvZiB0aGUgaW1hZ2UNCisgKi8NCit2b2lkIEF4aXNDYW1lcmE6OlVwZGF0ZVB1YmxpY0ltYWdlRnJvbUNhbWVyYShjaGFyICppbWdCdWZmZXIsIGludCBpbWdTaXplKQ0KK3sNCisJew0KKwkJU3luY2hyb25pemVkIHN5bmMobV9wcm90ZWN0ZWRJbWFnZVNlbSk7DQorDQorCQkvLyBBZGp1c3QgdGhlIGJ1ZmZlciBzaXplIGlmIGN1cnJlbnQgZGVzdGluYXRpb24gYnVmZmVyIGlzIHRvbyBzbWFsbC4NCisJCWlmIChtX3Byb3RlY3RlZEltYWdlQnVmZmVyTGVuZ3RoIDwgaW1nU2l6ZSkNCisJCXsNCisJCQlpZiAobV9wcm90ZWN0ZWRJbWFnZUJ1ZmZlciAhPSBOVUxMKSBkZWxldGUgW10gbV9wcm90ZWN0ZWRJbWFnZUJ1ZmZlcjsNCisJCQltX3Byb3RlY3RlZEltYWdlQnVmZmVyTGVuZ3RoID0gaW1nU2l6ZSArIGtJbWFnZUJ1ZmZlckFsbG9jYXRpb25JbmNyZW1lbnQ7DQorCQkJbV9wcm90ZWN0ZWRJbWFnZUJ1ZmZlciA9IG5ldyBjaGFyW21fcHJvdGVjdGVkSW1hZ2VCdWZmZXJMZW5ndGhdOw0KKwkJCWlmIChtX3Byb3RlY3RlZEltYWdlQnVmZmVyID09IE5VTEwpDQorCQkJew0KKwkJCQltX3Byb3RlY3RlZEltYWdlQnVmZmVyTGVuZ3RoID0gMDsNCisJCQkJcmV0dXJuOw0KKwkJCX0NCisJCX0NCisNCisJCW1lbWNweShtX3Byb3RlY3RlZEltYWdlQnVmZmVyLCBpbWdCdWZmZXIsIGltZ1NpemUpOw0KKwkJbV9wcm90ZWN0ZWRJbWFnZVNpemUgPSBpbWdTaXplOw0KKwl9DQorDQorCW1fZnJlc2hJbWFnZSA9IHRydWU7DQorCS8vIE5vdGlmeSBldmVyeW9uZSB3aG8gaXMgaW50ZXJlc3RlZC4NCisJU2VtU2V0X3Q6Oml0ZXJhdG9yIGl0ID0gbV9uZXdJbWFnZVNlbVNldC5iZWdpbigpOw0KKwlTZW1TZXRfdDo6aXRlcmF0b3IgZW5kID0gbV9uZXdJbWFnZVNlbVNldC5lbmQoKTsNCisJZm9yICg7aXQgIT0gZW5kOyBpdCsrKQ0KKwl7DQorCQlzZW1HaXZlKCppdCk7DQorCX0NCit9DQorDQorLyoqDQorICogSW1wbGVtZW50IHRoZSBwdXJlIHZpcnR1YWwgaW50ZXJmYWNlIHNvIHRoYXQgd2hlbiBwYXJhbWV0ZXIgY2hhbmdlcyByZXF1aXJlIGEgcmVzdGFydCwgdGhlIGltYWdlIHRhc2sgY2FuIGJlIGJvdW5jZWQuDQorICovDQordm9pZCBBeGlzQ2FtZXJhOjpSZXN0YXJ0Q2FtZXJhVGFzaygpDQorew0KKwltX2ltYWdlU3RyZWFtVGFzay5TdG9wKCk7DQorCW1faW1hZ2VTdHJlYW1UYXNrLlN0YXJ0KChpbnQpdGhpcyk7DQorfQ0KKw0KKyNpZiBKQVZBX0NBTUVSQV9MSUIgPT0gMQ0KKw0KKy8vIEMgYmluZGluZ3MgdXNlZCBieSBKYXZhDQorLy8gVGhlc2UgbmVlZCB0byBzdGF5IGFzIGlzIG9yIEphdmEgaGFzIHRvIGNoYW5nZQ0KKw0KK3ZvaWQgQXhpc0NhbWVyYVN0YXJ0KGNvbnN0IGNoYXIgKklQQWRkcmVzcykNCit7DQorI2lmZGVmIFNWTl9SRVYNCisJaWYgKHN0cmxlbihTVk5fUkVWKSkNCisJew0KKwkJcHJpbnRmKCJKYXZhQ2FtZXJhTGliIHdhcyBjb21waWxlZCBmcm9tIFNWTiByZXZpc2lvbiAlc1xuIiwgU1ZOX1JFVik7DQorCX0NCisJZWxzZQ0KKwl7DQorCQlwcmludGYoIkphdmFDYW1lcmFMaWIgd2FzIGNvbXBpbGVkIGZyb20gYSBsb2NhdGlvbiB0aGF0IGlzIG5vdCBzb3VyY2UgY29udHJvbGxlZC5cbiIpOw0KKwl9DQorI2Vsc2UNCisJcHJpbnRmKCJKYXZhQ2FtZXJhTGliIHdhcyBjb21waWxlZCB3aXRob3V0IC1EJ1NWTl9SRVY9bm5ubidcbiIpOw0KKyNlbmRpZg0KKwlBeGlzQ2FtZXJhOjpHZXRJbnN0YW5jZShJUEFkZHJlc3MpOw0KK30NCisNCitpbnQgQXhpc0NhbWVyYUdldEltYWdlIChJbWFnZSogaW1hZ2UpDQorew0KKwlyZXR1cm4gQXhpc0NhbWVyYTo6R2V0SW5zdGFuY2UoKS5HZXRJbWFnZShpbWFnZSk7DQorfQ0KKw0KK3ZvaWQgQXhpc0NhbWVyYVdyaXRlQnJpZ2h0bmVzcyhpbnQgYnJpZ2h0bmVzcykNCit7DQorCUF4aXNDYW1lcmE6OkdldEluc3RhbmNlKCkuV3JpdGVCcmlnaHRuZXNzKGJyaWdodG5lc3MpOw0KK30NCisNCitpbnQgQXhpc0NhbWVyYUdldEJyaWdodG5lc3MoKQ0KK3sNCisJcmV0dXJuIEF4aXNDYW1lcmE6OkdldEluc3RhbmNlKCkuR2V0QnJpZ2h0bmVzcygpOw0KK30NCisNCit2b2lkIEF4aXNDYW1lcmFXcml0ZVdoaXRlQmFsYW5jZShBeGlzQ2FtZXJhUGFyYW1zOjpXaGl0ZUJhbGFuY2VfdCB3aGl0ZUJhbGFuY2UpDQorew0KKwlBeGlzQ2FtZXJhOjpHZXRJbnN0YW5jZSgpLldyaXRlV2hpdGVCYWxhbmNlKHdoaXRlQmFsYW5jZSk7DQorfQ0KKw0KK0F4aXNDYW1lcmFQYXJhbXM6OldoaXRlQmFsYW5jZV90IEF4aXNDYW1lcmFHZXRXaGl0ZUJhbGFuY2UoKQ0KK3sNCisJcmV0dXJuIEF4aXNDYW1lcmE6OkdldEluc3RhbmNlKCkuR2V0V2hpdGVCYWxhbmNlKCk7DQorfQ0KKw0KK3ZvaWQgQXhpc0NhbWVyYVdyaXRlQ29sb3JMZXZlbChpbnQgY29sb3JMZXZlbCkNCit7DQorCUF4aXNDYW1lcmE6OkdldEluc3RhbmNlKCkuV3JpdGVDb2xvckxldmVsKGNvbG9yTGV2ZWwpOw0KK30NCisNCitpbnQgQXhpc0NhbWVyYUdldENvbG9yTGV2ZWwoKQ0KK3sNCisJcmV0dXJuIEF4aXNDYW1lcmE6OkdldEluc3RhbmNlKCkuR2V0Q29sb3JMZXZlbCgpOw0KK30NCisNCit2b2lkIEF4aXNDYW1lcmFXcml0ZUV4cG9zdXJlQ29udHJvbChBeGlzQ2FtZXJhUGFyYW1zOjpFeHBvc3VyZV90IGV4cG9zdXJlKQ0KK3sNCisJQXhpc0NhbWVyYTo6R2V0SW5zdGFuY2UoKS5Xcml0ZUV4cG9zdXJlQ29udHJvbChleHBvc3VyZSk7DQorfQ0KKw0KK0F4aXNDYW1lcmFQYXJhbXM6OkV4cG9zdXJlX3QgQXhpc0NhbWVyYUdldEV4cG9zdXJlQ29udHJvbCgpDQorew0KKwlyZXR1cm4gQXhpc0NhbWVyYTo6R2V0SW5zdGFuY2UoKS5HZXRFeHBvc3VyZUNvbnRyb2woKTsNCit9DQorDQordm9pZCBBeGlzQ2FtZXJhV3JpdGVFeHBvc3VyZVByaW9yaXR5KGludCBleHBvc3VyZSkNCit7DQorCUF4aXNDYW1lcmE6OkdldEluc3RhbmNlKCkuV3JpdGVFeHBvc3VyZVByaW9yaXR5KGV4cG9zdXJlKTsNCit9DQorDQoraW50IEF4aXNDYW1lcmFHZXRFeHBvc3VyZVByaW9yaXR5KCkNCit7DQorCXJldHVybiBBeGlzQ2FtZXJhOjpHZXRJbnN0YW5jZSgpLkdldEV4cG9zdXJlUHJpb3JpdHkoKTsNCit9DQorDQordm9pZCBBeGlzQ2FtZXJhV3JpdGVNYXhGUFMoaW50IG1heEZQUykNCit7DQorCUF4aXNDYW1lcmE6OkdldEluc3RhbmNlKCkuV3JpdGVNYXhGUFMobWF4RlBTKTsNCit9DQorDQoraW50IEF4aXNDYW1lcmFHZXRNYXhGUFMoKQ0KK3sNCisJcmV0dXJuIEF4aXNDYW1lcmE6OkdldEluc3RhbmNlKCkuR2V0TWF4RlBTKCk7DQorfQ0KKw0KK3ZvaWQgQXhpc0NhbWVyYVdyaXRlUmVzb2x1dGlvbihBeGlzQ2FtZXJhUGFyYW1zOjpSZXNvbHV0aW9uX3QgcmVzb2x1dGlvbikNCit7DQorCUF4aXNDYW1lcmE6OkdldEluc3RhbmNlKCkuV3JpdGVSZXNvbHV0aW9uKHJlc29sdXRpb24pOw0KK30NCisNCitBeGlzQ2FtZXJhUGFyYW1zOjpSZXNvbHV0aW9uX3QgQXhpc0NhbWVyYUdldFJlc29sdXRpb24oKQ0KK3sNCisJcmV0dXJuIEF4aXNDYW1lcmE6OkdldEluc3RhbmNlKCkuR2V0UmVzb2x1dGlvbigpOw0KK30NCisNCit2b2lkIEF4aXNDYW1lcmFXcml0ZUNvbXByZXNzaW9uKGludCBjb21wcmVzc2lvbikNCit7DQorCUF4aXNDYW1lcmE6OkdldEluc3RhbmNlKCkuV3JpdGVDb21wcmVzc2lvbihjb21wcmVzc2lvbik7DQorfQ0KKw0KK2ludCBBeGlzQ2FtZXJhR2V0Q29tcHJlc3Npb24oKQ0KK3sNCisJcmV0dXJuIEF4aXNDYW1lcmE6OkdldEluc3RhbmNlKCkuR2V0Q29tcHJlc3Npb24oKTsNCit9DQorDQordm9pZCBBeGlzQ2FtZXJhV3JpdGVSb3RhdGlvbihBeGlzQ2FtZXJhUGFyYW1zOjpSb3RhdGlvbl90IHJvdGF0aW9uKQ0KK3sNCisJQXhpc0NhbWVyYTo6R2V0SW5zdGFuY2UoKS5Xcml0ZVJvdGF0aW9uKHJvdGF0aW9uKTsNCit9DQorDQorQXhpc0NhbWVyYVBhcmFtczo6Um90YXRpb25fdCBBeGlzQ2FtZXJhR2V0Um90YXRpb24oKQ0KK3sNCisJcmV0dXJuIEF4aXNDYW1lcmE6OkdldEluc3RhbmNlKCkuR2V0Um90YXRpb24oKTsNCit9DQorDQordm9pZCBBeGlzQ2FtZXJhRGVsZXRlSW5zdGFuY2UoKQ0KK3sNCisJQXhpc0NhbWVyYTo6RGVsZXRlSW5zdGFuY2UoKTsNCit9DQorDQoraW50IEF4aXNDYW1lcmFGcmVzaEltYWdlKCkNCit7DQorCXJldHVybiBBeGlzQ2FtZXJhOjpHZXRJbnN0YW5jZSgpLklzRnJlc2hJbWFnZSgpOw0KK30NCisNCisjZW5kaWYgLy8gSkFWQV9DQU1FUkFfTElCID09IDENCisNCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9WaXNpb24vQXhpc0NhbWVyYS5oIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvVmlzaW9uL0F4aXNDYW1lcmEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTg4OWI3Ci0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvVmlzaW9uL0F4aXNDYW1lcmEuaApAQCAtMCwwICsxLDExNCBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBDb3B5cmlnaHQgKGMpIEZJUlNUIDIwMDguIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCQkJCQkJCSAgKi8NCisvKiBPcGVuIFNvdXJjZSBTb2Z0d2FyZSAtIG1heSBiZSBtb2RpZmllZCBhbmQgc2hhcmVkIGJ5IEZSQyB0ZWFtcy4gVGhlIGNvZGUgICAqLw0KKy8qIG11c3QgYmUgYWNjb21wYW5pZWQgYnkgdGhlIEZJUlNUIEJTRCBsaWNlbnNlIGZpbGUgaW4gJChXSU5EX0JBU0UpL1dQSUxpYi4gICovDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisjaWZuZGVmIF9fQVhJU19DQU1FUkFfSF9fDQorI2RlZmluZSBfX0FYSVNfQ0FNRVJBX0hfXw0KKw0KKyNpbmNsdWRlIDx0YXNrTGliLmg+DQorI2luY2x1ZGUgPHZ4V29ya3MuaD4gDQorI2luY2x1ZGUgPHNvY2tMaWIuaD4gDQorI2luY2x1ZGUgPGluZXRMaWIuaD4NCisNCisjaW5jbHVkZSAiVmlzaW9uL0F4aXNDYW1lcmFQYXJhbXMuaCINCisjaWYgSkFWQV9DQU1FUkFfTElCICE9IDENCisjaW5jbHVkZSAiVmlzaW9uL0NvbG9ySW1hZ2UuaCINCisjaW5jbHVkZSAiVmlzaW9uL0hTTEltYWdlLmgiDQorI2VuZGlmDQorI2luY2x1ZGUgIm5pdmlzaW9uLmgiDQorI2luY2x1ZGUgPHNldD4NCisjaW5jbHVkZSAiVGFzay5oIg0KKw0KK2NsYXNzIFBDVmlkZW9TZXJ2ZXI7DQorDQorLyoqDQorICogQXhpc0NhbWVyYSBjbGFzcy4NCisgKiBUaGlzIGNsYXNzIGhhbmRsZXMgZXZlcnl0aGluZyBhYm91dCB0aGUgQXhpcyAyMDYgRlJDIENhbWVyYS4NCisgKiBJdCBzdGFydHMgdXAgMiB0YXNrcyBlYWNoIHVzaW5nIGEgZGlmZmVyZW50IGNvbm5lY3Rpb24gdG8gdGhlIGNhbWVyYToNCisgKiAtIGltYWdlIHJlYWRpbmcgdGFzayB0aGF0IHJlYWRzIGltYWdlcyByZXBlYXRlZGx5IGZyb20gdGhlIGNhbWVyYQ0KKyAqIC0gcGFyYW1ldGVyIGhhbmRsZXIgdGFzayBpbiB0aGUgYmFzZSBjbGFzcyB0aGF0IG1vbml0b3JzIGZvciBjaGFuZ2VzIHRvDQorICogICAgIHBhcmFtZXRlcnMgYW5kIHVwZGF0ZXMgdGhlIGNhbWVyYQ0KKyAqLw0KK2NsYXNzIEF4aXNDYW1lcmEgOiBwdWJsaWMgQXhpc0NhbWVyYVBhcmFtcw0KK3sNCitwcml2YXRlOg0KKwlleHBsaWNpdCBBeGlzQ2FtZXJhKGNvbnN0IGNoYXIgKmNhbWVyYUlQKTsNCitwdWJsaWM6DQorCXZpcnR1YWwgfkF4aXNDYW1lcmEoKTsNCisJc3RhdGljIEF4aXNDYW1lcmEmIEdldEluc3RhbmNlKGNvbnN0IGNoYXIgKmNhbWVyYUlQID0gTlVMTCk7DQorCXN0YXRpYyB2b2lkIERlbGV0ZUluc3RhbmNlKCk7DQorDQorCWJvb2wgSXNGcmVzaEltYWdlKCk7DQorCVNFTV9JRCBHZXROZXdJbWFnZVNlbSgpOw0KKw0KKwlpbnQgR2V0SW1hZ2UoSW1hZ2UgKmltYXFJbWFnZSk7DQorI2lmIEpBVkFfQ0FNRVJBX0xJQiAhPSAxDQorCWludCBHZXRJbWFnZShDb2xvckltYWdlICppbWFnZSk7DQorCUhTTEltYWdlICpHZXRJbWFnZSgpOw0KKyNlbmRpZg0KKw0KKwlpbnQgQ29weUpQRUcoY2hhciAqKmRlc3RJbWFnZSwgaW50ICZkZXN0SW1hZ2VTaXplLCBpbnQgJmRlc3RJbWFnZUJ1ZmZlclNpemUpOw0KKw0KK3ByaXZhdGU6DQorCXN0YXRpYyBpbnQgc19JbWFnZVN0cmVhbVRhc2tGdW5jdGlvbihBeGlzQ2FtZXJhICp0aGlzUHRyKTsNCisJaW50IEltYWdlU3RyZWFtVGFza0Z1bmN0aW9uKCk7DQorDQorCWludCBSZWFkSW1hZ2VzRnJvbUNhbWVyYSgpOw0KKwl2b2lkIFVwZGF0ZVB1YmxpY0ltYWdlRnJvbUNhbWVyYShjaGFyICppbWdCdWZmZXIsIGludCBpbWdTaXplKTsNCisNCisJdmlydHVhbCB2b2lkIFJlc3RhcnRDYW1lcmFUYXNrKCk7DQorDQorCXN0YXRpYyBBeGlzQ2FtZXJhICpfaW5zdGFuY2U7DQorCWludCBtX2NhbWVyYVNvY2tldDsNCisJdHlwZWRlZiBzdGQ6OnNldDxTRU1fSUQ+IFNlbVNldF90Ow0KKwlTZW1TZXRfdCBtX25ld0ltYWdlU2VtU2V0Ow0KKw0KKwljaGFyKiBtX3Byb3RlY3RlZEltYWdlQnVmZmVyOw0KKwlpbnQgbV9wcm90ZWN0ZWRJbWFnZUJ1ZmZlckxlbmd0aDsNCisJaW50IG1fcHJvdGVjdGVkSW1hZ2VTaXplOw0KKwlTRU1fSUQgbV9wcm90ZWN0ZWRJbWFnZVNlbTsNCisJYm9vbCBtX2ZyZXNoSW1hZ2U7DQorDQorCVRhc2sgbV9pbWFnZVN0cmVhbVRhc2s7DQorDQorCVBDVmlkZW9TZXJ2ZXIgKm1fdmlkZW9TZXJ2ZXI7DQorfTsNCisNCisjaWYgSkFWQV9DQU1FUkFfTElCID09IDENCisjaWZkZWYgX19jcGx1c3BsdXMNCitleHRlcm4gIkMiIHsNCisjZW5kaWYNCisJdm9pZCBBeGlzQ2FtZXJhU3RhcnQoY29uc3QgY2hhciAqSVBBZGRyZXNzKTsNCisJaW50IEF4aXNDYW1lcmFHZXRJbWFnZShJbWFnZSAqaW1hZ2UpOw0KKwl2b2lkIEF4aXNDYW1lcmFEZWxldGVJbnN0YW5jZSgpOw0KKwlpbnQgQXhpc0NhbWVyYUZyZXNoSW1hZ2UoKTsNCisNCisJLy8gTWlkLXN0cmVhbSBnZXRzICYgd3JpdGVzDQorCXZvaWQgQXhpc0NhbWVyYVdyaXRlQnJpZ2h0bmVzcyhpbnQgYnJpZ2h0bmVzcyk7DQorCWludCBBeGlzQ2FtZXJhR2V0QnJpZ2h0bmVzcygpOw0KKwl2b2lkIEF4aXNDYW1lcmFXcml0ZVdoaXRlQmFsYW5jZShBeGlzQ2FtZXJhUGFyYW1zOjpXaGl0ZUJhbGFuY2VfdCB3aGl0ZUJhbGFuY2UpOw0KKwlBeGlzQ2FtZXJhUGFyYW1zOjpXaGl0ZUJhbGFuY2VfdCBBeGlzQ2FtZXJhR2V0V2hpdGVCYWxhbmNlKCk7DQorCXZvaWQgQXhpc0NhbWVyYVdyaXRlQ29sb3JMZXZlbChpbnQgY29sb3JMZXZlbCk7DQorCWludCBBeGlzQ2FtZXJhR2V0Q29sb3JMZXZlbCgpOw0KKwl2b2lkIEF4aXNDYW1lcmFXcml0ZUV4cG9zdXJlQ29udHJvbChBeGlzQ2FtZXJhUGFyYW1zOjpFeHBvc3VyZV90IGV4cG9zdXJlKTsNCisJQXhpc0NhbWVyYVBhcmFtczo6RXhwb3N1cmVfdCBBeGlzQ2FtZXJhR2V0RXhwb3N1cmVDb250cm9sKCk7DQorCXZvaWQgQXhpc0NhbWVyYVdyaXRlRXhwb3N1cmVQcmlvcml0eShpbnQgZXhwb3N1cmVQcmlvcml0eSk7DQorCWludCBBeGlzQ2FtZXJhR2V0RXhwb3N1cmVQcmlvcml0eSgpOw0KKwl2b2lkIEF4aXNDYW1lcmFXcml0ZU1heEZQUyhpbnQgbWF4RlBTKTsNCisJaW50IEF4aXNDYW1lcmFHZXRNYXhGUFMoKTsNCisNCisJLy8gTmV3LVN0cmVhbSBnZXRzICYgd3JpdGVzDQorCXZvaWQgQXhpc0NhbWVyYVdyaXRlUmVzb2x1dGlvbihBeGlzQ2FtZXJhUGFyYW1zOjpSZXNvbHV0aW9uX3QgcmVzb2x1dGlvbik7DQorCUF4aXNDYW1lcmFQYXJhbXM6OlJlc29sdXRpb25fdCBBeGlzQ2FtZXJhR2V0UmVzb2x1dGlvbigpOw0KKwl2b2lkIEF4aXNDYW1lcmFXcml0ZUNvbXByZXNzaW9uKGludCBjb21wcmVzc2lvbik7DQorCWludCBBeGlzQ2FtZXJhR2V0Q29tcHJlc3Npb24oKTsNCisJdm9pZCBBeGlzQ2FtZXJhV3JpdGVSb3RhdGlvbihBeGlzQ2FtZXJhUGFyYW1zOjpSb3RhdGlvbl90IHJvdGF0aW9uKTsNCisJQXhpc0NhbWVyYVBhcmFtczo6Um90YXRpb25fdCBBeGlzQ2FtZXJhR2V0Um90YXRpb24oKTsNCisjaWZkZWYgX19jcGx1c3BsdXMNCit9DQorI2VuZGlmDQorI2VuZGlmIC8vIEpBVkFfQ0FNRVJBX0xJQiA9PSAxDQorDQorI2VuZGlmDQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvVmlzaW9uL0F4aXNDYW1lcmFQYXJhbXMuY3BwIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvVmlzaW9uL0F4aXNDYW1lcmFQYXJhbXMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkNDI5ZTQKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9WaXNpb24vQXhpc0NhbWVyYVBhcmFtcy5jcHAKQEAgLTAsMCArMSw0NjkgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorLyogQ29weXJpZ2h0IChjKSBGSVJTVCAyMDA4LiBBbGwgUmlnaHRzIFJlc2VydmVkLgkJCQkJCQkgICovDQorLyogT3BlbiBTb3VyY2UgU29mdHdhcmUgLSBtYXkgYmUgbW9kaWZpZWQgYW5kIHNoYXJlZCBieSBGUkMgdGVhbXMuIFRoZSBjb2RlICAgKi8NCisvKiBtdXN0IGJlIGFjY29tcGFuaWVkIGJ5IHRoZSBGSVJTVCBCU0QgbGljZW5zZSBmaWxlIGluICQoV0lORF9CQVNFKS9XUElMaWIuICAqLw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorI2luY2x1ZGUgIlZpc2lvbi9BeGlzQ2FtZXJhUGFyYW1zLmgiDQorDQorI2luY2x1ZGUgIlZpc2lvbi9BeGlzQ2FtZXJhLmgiDQorI2luY2x1ZGUgPGluZXRMaWIuaD4NCisjaW5jbHVkZSAicGNyZS5oIg0KKyNpbmNsdWRlIDxzb2NrTGliLmg+DQorI2luY2x1ZGUgPHN0cmluZy5oPg0KKyNpbmNsdWRlICJTeW5jaHJvbml6ZWQuaCINCisjaW5jbHVkZSAiVGltZXIuaCINCisjaW5jbHVkZSAiVXRpbGl0eS5oIg0KKyNpbmNsdWRlICJXUElFcnJvcnMuaCINCisNCisjaWYgSkFWQV9DQU1FUkFfTElCICE9IDENCisjaW5jbHVkZSAiRHJpdmVyU3RhdGlvbi5oIg0KKyNlbmRpZg0KKw0KK3N0YXRpYyBjb25zdCBjaGFyICpjb25zdCBrUm90YXRpb25DaG9pY2VzW10gPSB7IjAiLCAiMTgwIn07DQorc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IGtSZXNvbHV0aW9uQ2hvaWNlc1tdID0geyI2NDB4NDgwIiwgIjY0MHgzNjAiLCAiMzIweDI0MCIsICIxNjB4MTIwIn07DQorc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IGtFeHBvc3VyZUNvbnRyb2xDaG9pY2VzW10gPSB7ICJhdXRvbWF0aWMiLCAiaG9sZCIsICJmbGlja2VyZnJlZTUwIiwgImZsaWNrZXJmcmVlNjAiIH07DQorc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IGtXaGl0ZUJhbGFuY2VDaG9pY2VzW10gPSB7ICJhdXRvIiwgImhvbGR3YiIsICJmaXhlZF9vdXRkb29yMSIsDQorCQkiZml4ZWRfb3V0ZG9vcjIiLCAiZml4ZWRfaW5kb29yIiwgImZpeGVkX2ZsdW9yMSIsICJmaXhlZF9mbHVvcjIiIH07DQorDQorLyoqDQorICogQXhpc0NhbWVyYSBjb25zdHJ1Y3Rvcg0KKyAqLw0KK0F4aXNDYW1lcmFQYXJhbXM6OkF4aXNDYW1lcmFQYXJhbXMoY29uc3QgY2hhciogaXBBZGRyZXNzKQ0KKwk6IG1fcGFyYW1UYXNrKCJwYXJhbVRhc2siLCAoRlVOQ1BUUikgc19QYXJhbVRhc2tGdW5jdGlvbikNCisJLCBtX3BhcmFtQ2hhbmdlZFNlbSAoTlVMTCkNCisJLCBtX3NvY2tldFBvc3Nlc3Npb25TZW0gKE5VTEwpDQorCSwgbV9icmlnaHRuZXNzUGFyYW0gKE5VTEwpDQorCSwgbV9jb21wcmVzc2lvblBhcmFtIChOVUxMKQ0KKwksIG1fZXhwb3N1cmVQcmlvcml0eVBhcmFtIChOVUxMKQ0KKwksIG1fY29sb3JMZXZlbFBhcmFtIChOVUxMKQ0KKwksIG1fbWF4RlBTUGFyYW0gKE5VTEwpDQorCSwgbV9yb3RhdGlvblBhcmFtIChOVUxMKQ0KKwksIG1fcmVzb2x1dGlvblBhcmFtIChOVUxMKQ0KKwksIG1fZXhwb3N1cmVDb250cm9sUGFyYW0gKE5VTEwpDQorCSwgbV93aGl0ZUJhbGFuY2VQYXJhbSAoTlVMTCkNCit7DQorCWlmIChpcEFkZHJlc3MgPT0gTlVMTCB8fCBzdHJsZW4oaXBBZGRyZXNzKSA9PSAwKQ0KKwl7DQorI2lmIEpBVkFfQ0FNRVJBX0xJQiA9PSAxDQorCQl3cGlfc2V0V1BJRXJyb3JXaXRoQ29udGV4dChQYXJhbWV0ZXJPdXRPZlJhbmdlLCAiSVAgQWRkcmVzcyBtdXN0IGJlIHNwZWNpZmllZCIpOw0KKwkJcmV0dXJuOw0KKyNlbHNlDQorCQlEcml2ZXJTdGF0aW9uICpkcyA9IERyaXZlclN0YXRpb246OkdldEluc3RhbmNlKCk7DQorCQlkcy0+V2FpdEZvckRhdGEoKTsNCisJCVVJTlQxNiB0ZWFtTnVtYmVyID0gZHMtPkdldFRlYW1OdW1iZXIoKTsNCisJCWNoYXIgY2FtZXJhSVBbMTZdOw0KKwkJc25wcmludGYoY2FtZXJhSVAsIDE2LCAiMTAuJWQuJWQuMTEiLCB0ZWFtTnVtYmVyIC8gMTAwLCB0ZWFtTnVtYmVyICUgMTAwKTsNCisJCW1faXBBZGRyZXNzID0gaW5ldF9hZGRyKGNhbWVyYUlQKTsNCisjZW5kaWYNCisJfQ0KKwllbHNlDQorCXsNCisJCW1faXBBZGRyZXNzID0gaW5ldF9hZGRyKChjaGFyKilpcEFkZHJlc3MpOw0KKwl9DQorDQorCWlmIChtX2lwQWRkcmVzcyA9PSAodV9sb25nKUVSUk9SKQ0KKwl7DQorCQl3cGlfc2V0RXJybm9FcnJvcigpOw0KKwkJcmV0dXJuOw0KKwl9DQorDQorCW1fYnJpZ2h0bmVzc1BhcmFtID0gbmV3IEludENhbWVyYVBhcmFtZXRlcigiSW1hZ2VTb3VyY2UuSTAuU2Vuc29yLkJyaWdodG5lc3M9JWkiLA0KKwkJCSJyb290LkltYWdlU291cmNlLkkwLlNlbnNvci5CcmlnaHRuZXNzPSguKikiLCBmYWxzZSk7DQorCW1fcGFyYW1ldGVycy5wdXNoX2JhY2sobV9icmlnaHRuZXNzUGFyYW0pOw0KKwltX2NvbG9yTGV2ZWxQYXJhbSA9IG5ldyBJbnRDYW1lcmFQYXJhbWV0ZXIoIkltYWdlU291cmNlLkkwLlNlbnNvci5Db2xvckxldmVsPSVpIiwNCisJCQkicm9vdC5JbWFnZVNvdXJjZS5JMC5TZW5zb3IuQ29sb3JMZXZlbD0oLiopIiwgZmFsc2UpOw0KKwltX3BhcmFtZXRlcnMucHVzaF9iYWNrKG1fY29sb3JMZXZlbFBhcmFtKTsNCisJbV9leHBvc3VyZVByaW9yaXR5UGFyYW0gPSBuZXcgSW50Q2FtZXJhUGFyYW1ldGVyKCJJbWFnZVNvdXJjZS5JMC5TZW5zb3IuZXhwb3N1cmVQcmlvcml0eT0laSIsDQorCQkJInJvb3QuSW1hZ2VTb3VyY2UuSTAuU2Vuc29yLkV4cG9zdXJlUHJpb3JpdHk9KC4qKSIsIGZhbHNlKTsNCisJbV9wYXJhbWV0ZXJzLnB1c2hfYmFjayhtX2V4cG9zdXJlUHJpb3JpdHlQYXJhbSk7DQorCW1fY29tcHJlc3Npb25QYXJhbSA9IG5ldyBJbnRDYW1lcmFQYXJhbWV0ZXIoIkltYWdlLkkwLkFwcGVhcmFuY2UuQ29tcHJlc3Npb249JWkiLA0KKwkJCSJyb290LkltYWdlLkkwLkFwcGVhcmFuY2UuQ29tcHJlc3Npb249KC4qKSIsIHRydWUpOw0KKwltX3BhcmFtZXRlcnMucHVzaF9iYWNrKG1fY29tcHJlc3Npb25QYXJhbSk7DQorCW1fbWF4RlBTUGFyYW0gPSBuZXcgSW50Q2FtZXJhUGFyYW1ldGVyKCJJbWFnZS5JMC5TdHJlYW0uRlBTPSVpIiwNCisJCQkicm9vdC5JbWFnZS5JMC5TdHJlYW0uRlBTPSguKikiLCBmYWxzZSk7DQorCW1fcGFyYW1ldGVycy5wdXNoX2JhY2sobV9tYXhGUFNQYXJhbSk7DQorCW1fcm90YXRpb25QYXJhbSA9IG5ldyBFbnVtQ2FtZXJhUGFyYW1ldGVyKCJJbWFnZS5JMC5BcHBlYXJhbmNlLlJvdGF0aW9uPSVzIiwNCisJCQkicm9vdC5JbWFnZS5JMC5BcHBlYXJhbmNlLlJvdGF0aW9uPSguKikiLCB0cnVlLCBrUm90YXRpb25DaG9pY2VzLCBzaXplb2Yoa1JvdGF0aW9uQ2hvaWNlcykvc2l6ZW9mKGtSb3RhdGlvbkNob2ljZXNbMF0pKTsNCisJbV9wYXJhbWV0ZXJzLnB1c2hfYmFjayhtX3JvdGF0aW9uUGFyYW0pOw0KKwltX3Jlc29sdXRpb25QYXJhbSA9IG5ldyBFbnVtQ2FtZXJhUGFyYW1ldGVyKCJJbWFnZS5JMC5BcHBlYXJhbmNlLlJlc29sdXRpb249JXMiLA0KKwkJCSJyb290LkltYWdlLkkwLkFwcGVhcmFuY2UuUmVzb2x1dGlvbj0oLiopIiwgdHJ1ZSwga1Jlc29sdXRpb25DaG9pY2VzLCBzaXplb2Yoa1Jlc29sdXRpb25DaG9pY2VzKS9zaXplb2Yoa1Jlc29sdXRpb25DaG9pY2VzWzBdKSk7DQorCW1fcGFyYW1ldGVycy5wdXNoX2JhY2sobV9yZXNvbHV0aW9uUGFyYW0pOw0KKwltX2V4cG9zdXJlQ29udHJvbFBhcmFtID0gbmV3IEVudW1DYW1lcmFQYXJhbWV0ZXIoIkltYWdlU291cmNlLkkwLlNlbnNvci5FeHBvc3VyZT0lcyIsDQorCQkJInJvb3QuSW1hZ2VTb3VyY2UuSTAuU2Vuc29yLkV4cG9zdXJlPSguKikiLCBmYWxzZSwga0V4cG9zdXJlQ29udHJvbENob2ljZXMsIHNpemVvZihrRXhwb3N1cmVDb250cm9sQ2hvaWNlcykvc2l6ZW9mKGtFeHBvc3VyZUNvbnRyb2xDaG9pY2VzWzBdKSk7DQorCW1fcGFyYW1ldGVycy5wdXNoX2JhY2sobV9leHBvc3VyZUNvbnRyb2xQYXJhbSk7DQorCW1fd2hpdGVCYWxhbmNlUGFyYW0gPSBuZXcgRW51bUNhbWVyYVBhcmFtZXRlcigiSW1hZ2VTb3VyY2UuSU8uU2Vuc29yLldoaXRlQmFsYW5jZT0lcyIsDQorCQkJInJvb3QuSW1hZ2VTb3VyY2UuSTAuU2Vuc29yLldoaXRlQmFsYW5jZT0oLiopIiwgZmFsc2UsIGtXaGl0ZUJhbGFuY2VDaG9pY2VzLCBzaXplb2Yoa1doaXRlQmFsYW5jZUNob2ljZXMpL3NpemVvZihrV2hpdGVCYWxhbmNlQ2hvaWNlc1swXSkpOw0KKwltX3BhcmFtZXRlcnMucHVzaF9iYWNrKG1fd2hpdGVCYWxhbmNlUGFyYW0pOw0KKw0KKwltX3BhcmFtQ2hhbmdlZFNlbSA9IHNlbUJDcmVhdGUgKFNFTV9RX1BSSU9SSVRZLCBTRU1fRU1QVFkpOw0KKwltX3NvY2tldFBvc3Nlc3Npb25TZW0gPSBzZW1CQ3JlYXRlIChTRU1fUV9QUklPUklUWSwgU0VNX0ZVTEwpOw0KKw0KKwltX3BhcmFtVGFzay5TdGFydCgoaW50KXRoaXMpOw0KK30NCisNCisvKioNCisgKiBEZXN0cnVjdG9yDQorICovDQorQXhpc0NhbWVyYVBhcmFtczo6fkF4aXNDYW1lcmFQYXJhbXMoKQ0KK3sNCisJbV9wYXJhbVRhc2suU3RvcCgpOw0KKw0KKwlzZW1EZWxldGUobV9zb2NrZXRQb3NzZXNzaW9uU2VtKTsNCisJc2VtRGVsZXRlKG1fcGFyYW1DaGFuZ2VkU2VtKTsNCisNCisJZGVsZXRlIG1fd2hpdGVCYWxhbmNlUGFyYW07DQorCWRlbGV0ZSBtX2V4cG9zdXJlQ29udHJvbFBhcmFtOw0KKwlkZWxldGUgbV9yZXNvbHV0aW9uUGFyYW07DQorCWRlbGV0ZSBtX3JvdGF0aW9uUGFyYW07DQorCWRlbGV0ZSBtX21heEZQU1BhcmFtOw0KKwlkZWxldGUgbV9jb21wcmVzc2lvblBhcmFtOw0KKwlkZWxldGUgbV9leHBvc3VyZVByaW9yaXR5UGFyYW07DQorCWRlbGV0ZSBtX2NvbG9yTGV2ZWxQYXJhbTsNCisJZGVsZXRlIG1fYnJpZ2h0bmVzc1BhcmFtOw0KK30NCisNCisvKioNCisgKiBTdGF0aWMgZnVuY3Rpb24gdG8gc3RhcnQgdGhlIHBhcmFtZXRlciB1cGRhdGluZyB0YXNrDQorICovDQoraW50IEF4aXNDYW1lcmFQYXJhbXM6OnNfUGFyYW1UYXNrRnVuY3Rpb24oQXhpc0NhbWVyYVBhcmFtcyogdGhpc1B0cikNCit7DQorCXJldHVybiB0aGlzUHRyLT5QYXJhbVRhc2tGdW5jdGlvbigpOw0KK30NCisNCisvKioNCisgKiBNYWluIGxvb3Agb2YgdGhlIHBhcmFtZXRlciB0YXNrLg0KKyAqIFRoaXMgbG9vcCBydW5zIGNvbnRpbnVvdXNseSBjaGVja2luZyBwYXJhbWV0ZXJzIGZyb20gdGhlIGNhbWVyYSBmb3INCisgKiBwb3N0ZWQgY2hhbmdlcyBhbmQgdXBkYXRpbmcgdGhlbSBpZiBuZWNlc3NhcnkuDQorICovDQorLy8gVE9ETzogbmVlZCB0byBzeW5jaHJvbml6ZSB0aGUgYWN0dWFsIHNldHRpbmcgb2YgcGFyYW1ldGVycyAodGhlIGFzc2lnbm1lbnQgc3RhdGVtZW50KQ0KK2ludCBBeGlzQ2FtZXJhUGFyYW1zOjpQYXJhbVRhc2tGdW5jdGlvbigpDQorew0KKwlzdGF0aWMgYm9vbCBmaXJzdFRpbWUgPSB0cnVlOw0KKw0KKwl3aGlsZSAodHJ1ZSkNCisJew0KKwkJc2VtVGFrZShtX3NvY2tldFBvc3Nlc3Npb25TZW0sIFdBSVRfRk9SRVZFUik7DQorCQlpZiAoZmlyc3RUaW1lKQ0KKwkJew0KKwkJCXdoaWxlIChSZWFkQ2FtUGFyYW1zKCkgPT0gMCk7DQorCQkJZmlyc3RUaW1lID0gZmFsc2U7DQorCQl9DQorCQlib29sIHJlc3RhcnRSZXF1aXJlZCA9IGZhbHNlOw0KKw0KKwkJUGFyYW1ldGVyVmVjdG9yX3Q6Oml0ZXJhdG9yIGl0ID0gbV9wYXJhbWV0ZXJzLmJlZ2luKCk7DQorCQlQYXJhbWV0ZXJWZWN0b3JfdDo6aXRlcmF0b3IgZW5kID0gbV9wYXJhbWV0ZXJzLmVuZCgpOw0KKwkJZm9yKDsgaXQgIT0gZW5kOyBpdCsrKQ0KKwkJew0KKwkJCWJvb2wgY2hhbmdlZCA9IGZhbHNlOw0KKwkJCWNoYXIgcGFyYW1bMTUwXTsNCisJCQlyZXN0YXJ0UmVxdWlyZWQgfD0gKCppdCktPkNoZWNrQ2hhbmdlZChjaGFuZ2VkLCBwYXJhbSk7DQorCQkJaWYgKGNoYW5nZWQpDQorCQkJew0KKwkJCQlVcGRhdGVDYW1QYXJhbShwYXJhbSk7DQorCQkJfQ0KKwkJfQ0KKwkJaWYgKHJlc3RhcnRSZXF1aXJlZCkNCisJCXsNCisJCQlSZXN0YXJ0Q2FtZXJhVGFzaygpOw0KKwkJfQ0KKwkJc2VtR2l2ZShtX3NvY2tldFBvc3Nlc3Npb25TZW0pOw0KKwl9DQorCXJldHVybiAwOw0KK30NCisNCisvKioNCisgKiBXcml0ZSB0aGUgYnJpZ2h0bmVzcyB2YWx1ZSB0byB0aGUgY2FtZXJhLg0KKyAqIEBwYXJhbSBicmlnaHRuZXNzIHZhbGlkIHZhbHVlcyAwIC4uIDEwMA0KKyAqLw0KK3ZvaWQgQXhpc0NhbWVyYVBhcmFtczo6V3JpdGVCcmlnaHRuZXNzKGludCBicmlnaHRuZXNzKQ0KK3sNCisJbV9icmlnaHRuZXNzUGFyYW0tPlNldFZhbHVlKGJyaWdodG5lc3MpOw0KKwlzZW1HaXZlKG1fcGFyYW1DaGFuZ2VkU2VtKTsNCit9DQorDQorLyoqDQorICogR2V0IHRoZSBicmlnaHRuZXNzIHZhbHVlLg0KKyAqIEByZXR1cm4gQnJpZ2h0bmVzcyB2YWx1ZSBmcm9tIHRoZSBjYW1lcmEuDQorICovDQoraW50IEF4aXNDYW1lcmFQYXJhbXM6OkdldEJyaWdodG5lc3MoKQ0KK3sNCisJcmV0dXJuIG1fYnJpZ2h0bmVzc1BhcmFtLT5HZXRWYWx1ZSgpOw0KK30NCisNCisvKioNCisgKiBTZXQgdGhlIHdoaXRlIGJhbGFuY2UgdmFsdWUuDQorICogQHBhcmFtIHdoaXRlQmFsYW5jZSBWYWxpZCB2YWx1ZXMgZnJvbSB0aGUgV2hpdGVCYWxhbmNlX3QgZW51bS4NCisgKi8NCit2b2lkIEF4aXNDYW1lcmFQYXJhbXM6OldyaXRlV2hpdGVCYWxhbmNlKFdoaXRlQmFsYW5jZV90IHdoaXRlQmFsYW5jZSkNCit7DQorCW1fd2hpdGVCYWxhbmNlUGFyYW0tPlNldFZhbHVlKHdoaXRlQmFsYW5jZSk7DQorCXNlbUdpdmUobV9wYXJhbUNoYW5nZWRTZW0pOw0KK30NCisNCisvKioNCisgKiBSZXRyaWV2ZSB0aGUgY3VycmVudCB3aGl0ZSBiYWxhbmNlIHBhcmFtZXRlci4NCisgKiBAcmV0dXJuIFRoZSB3aGl0ZSBiYWxhbmNlIHZhbHVlLg0KKyAqLw0KK0F4aXNDYW1lcmFQYXJhbXM6OldoaXRlQmFsYW5jZV90IEF4aXNDYW1lcmFQYXJhbXM6OkdldFdoaXRlQmFsYW5jZSgpDQorew0KKwlyZXR1cm4gKFdoaXRlQmFsYW5jZV90KSBtX3doaXRlQmFsYW5jZVBhcmFtLT5HZXRWYWx1ZSgpOw0KK30NCisNCisvKioNCisgKiBXcml0ZSB0aGUgY29sb3IgbGV2ZWwgdG8gdGhlIGNhbWVyYS4NCisgKiBAcGFyYW0gY29sb3JMZXZlbCB2YWxpZCB2YWx1ZXMgYXJlIDAgLi4gMTAwDQorICovDQordm9pZCBBeGlzQ2FtZXJhUGFyYW1zOjpXcml0ZUNvbG9yTGV2ZWwoaW50IGNvbG9yTGV2ZWwpDQorew0KKwltX2NvbG9yTGV2ZWxQYXJhbS0+U2V0VmFsdWUoY29sb3JMZXZlbCk7DQorCXNlbUdpdmUobV9wYXJhbUNoYW5nZWRTZW0pOw0KK30NCisNCisvKioNCisgKiBSZXRyaWV2ZSB0aGUgY29sb3IgbGV2ZWwgZnJvbSB0aGUgY2FtZXJhLg0KKyAqIEBSZXR1cm5zIHRoZSBjYW1lcmEgY29sb3IgbGV2ZWwuDQorICovDQoraW50IEF4aXNDYW1lcmFQYXJhbXM6OkdldENvbG9yTGV2ZWwoKQ0KK3sNCisJcmV0dXJuIG1fY29sb3JMZXZlbFBhcmFtLT5HZXRWYWx1ZSgpOw0KK30NCisNCisvKioNCisgKiBXcml0ZSB0aGUgZXhwb3N1cmUgY29udHJvbCB2YWx1ZSB0byB0aGUgY2FtZXJhLg0KKyAqIEBwYXJhbSBleHBvc3VyZUNvbnRyb2wgQSBtb2RlIHRvIHdyaXRlIGluIHRoZSBFeHBvc3VyZV90IGVudW0uDQorICovDQordm9pZCBBeGlzQ2FtZXJhUGFyYW1zOjpXcml0ZUV4cG9zdXJlQ29udHJvbChFeHBvc3VyZV90IGV4cG9zdXJlQ29udHJvbCkNCit7DQorCW1fZXhwb3N1cmVDb250cm9sUGFyYW0tPlNldFZhbHVlKGV4cG9zdXJlQ29udHJvbCk7DQorCXNlbUdpdmUobV9wYXJhbUNoYW5nZWRTZW0pOw0KK30NCisNCisvKioNCisgKiBHZXQgdGhlIGV4cG9zdXJlIHZhbHVlIGZyb20gdGhlIGNhbWVyYS4NCisgKiBAcmV0dXJucyB0aGUgZXhwb3N1cmUgdmFsdWUgZnJvbSB0aGUgY2FtZXJhLg0KKyAqLw0KK0F4aXNDYW1lcmFQYXJhbXM6OkV4cG9zdXJlX3QgQXhpc0NhbWVyYVBhcmFtczo6R2V0RXhwb3N1cmVDb250cm9sKCkNCit7DQorCXJldHVybiAoRXhwb3N1cmVfdCkgbV9leHBvc3VyZUNvbnRyb2xQYXJhbS0+R2V0VmFsdWUoKTsNCit9DQorDQorLyoqDQorICogV3JpdGUgcmVzb2x1dGlvbiB2YWx1ZSB0byBjYW1lcmEuDQorICogQHBhcmFtIHJlc29sdXRpb24gVGhlIGNhbWVyYSByZXNvbHV0aW9uIHZhbHVlIHRvIHdyaXRlIHRvIHRoZSBjYW1lcmEuICBVc2UgdGhlIFJlc29sdXRpb25fdCBlbnVtLg0KKyAqLw0KK3ZvaWQgQXhpc0NhbWVyYVBhcmFtczo6V3JpdGVSZXNvbHV0aW9uKFJlc29sdXRpb25fdCByZXNvbHV0aW9uKQ0KK3sNCisJbV9yZXNvbHV0aW9uUGFyYW0tPlNldFZhbHVlKHJlc29sdXRpb24pOw0KKwlzZW1HaXZlKG1fcGFyYW1DaGFuZ2VkU2VtKTsNCit9DQorDQorLyoqDQorICogR2V0IHRoZSByZXNvbHV0aW9uIHZhbHVlIGZyb20gdGhlIGNhbWVyYS4NCisgKiBAcmV0dXJucyByZXN1bHRpb24gdmFsdWUgZm9yIHRoZSBjYW1lcmEuDQorICovDQorQXhpc0NhbWVyYVBhcmFtczo6UmVzb2x1dGlvbl90IEF4aXNDYW1lcmFQYXJhbXM6OkdldFJlc29sdXRpb24oKQ0KK3sNCisJcmV0dXJuIChSZXNvbHV0aW9uX3QpIG1fcmVzb2x1dGlvblBhcmFtLT5HZXRWYWx1ZSgpOw0KK30NCisNCisvKioNCisgKiBXcml0ZSB0aGUgZXhwb3NyZSBwcmlvcml0eSB2YWx1ZSB0byB0aGUgY2FtZXJhLg0KKyAqIEBwYXJhbSBleHBvc3VyZVByaW9yaXR5IFZhbGlkIHZhbHVlcyBhcmUgMCwgNTAsIDEwMC4NCisgKiAwID0gUHJpb3JpdGl6ZSBpbWFnZSBxdWFsaXR5DQorICogNTAgPSBOb25lDQorICogMTAwID0gUHJpb3JpdGl6ZSBmcmFtZSByYXRlDQorICovDQordm9pZCBBeGlzQ2FtZXJhUGFyYW1zOjpXcml0ZUV4cG9zdXJlUHJpb3JpdHkoaW50IGV4cG9zdXJlUHJpb3JpdHkpDQorew0KKwltX2V4cG9zdXJlUHJpb3JpdHlQYXJhbS0+U2V0VmFsdWUoZXhwb3N1cmVQcmlvcml0eSk7DQorCXNlbUdpdmUobV9wYXJhbUNoYW5nZWRTZW0pOw0KK30NCisNCitpbnQgQXhpc0NhbWVyYVBhcmFtczo6R2V0RXhwb3N1cmVQcmlvcml0eSgpDQorew0KKwlyZXR1cm4gbV9leHBvc3VyZVByaW9yaXR5UGFyYW0tPkdldFZhbHVlKCk7DQorfQ0KKw0KKy8qKg0KKyAqIFdyaXRlIHRoZSByb3RhdGlvbiB2YWx1ZSB0byB0aGUgY2FtZXJhLg0KKyAqIElmIHlvdSBtb3VudCB5b3VyIGNhbWVyYSB1cHNpZGUgZG93biwgdXNlIHRoaXMgdG8gYWRqdXN0IHRoZSBpbWFnZSBmb3IgeW91Lg0KKyAqIEBwYXJhbSByb3RhdGlvbiBUaGUgaW1hZ2UgZnJvbSB0aGUgUm90YXRpb25fdCBlbnVtIGluIEF4aXNDYW1lcmFQYXJhbXMgKGtSb3RhdGlvbl8wIG9yIGtSb3RhdGlvbl8xODApDQorICovDQordm9pZCBBeGlzQ2FtZXJhUGFyYW1zOjpXcml0ZVJvdGF0aW9uKFJvdGF0aW9uX3Qgcm90YXRpb24pDQorew0KKwltX3JvdGF0aW9uUGFyYW0tPlNldFZhbHVlKHJvdGF0aW9uKTsNCisJc2VtR2l2ZShtX3BhcmFtQ2hhbmdlZFNlbSk7DQorfQ0KKw0KKy8qKg0KKyAqIEdldCB0aGUgcm90YXRpb24gdmFsdWUgZnJvbSB0aGUgY2FtZXJhLg0KKyAqIEByZXR1cm4gVGhlIHJvdGF0aW9uIHZhbHVlIGZyb20gdGhlIGNhbWVyYSAoUm90YXRpb25fdCkuDQorICovDQorQXhpc0NhbWVyYVBhcmFtczo6Um90YXRpb25fdCBBeGlzQ2FtZXJhUGFyYW1zOjpHZXRSb3RhdGlvbigpDQorew0KKwlyZXR1cm4gKFJvdGF0aW9uX3QpIG1fcm90YXRpb25QYXJhbS0+R2V0VmFsdWUoKTsNCit9DQorDQorLyoqDQorICogV3JpdGUgdGhlIGNvbXByZXNzaW9uIHZhbHVlIHRvIHRoZSBjYW1lcmEuDQorICogQHBhcmFtIGNvbXByZXNzaW9uIFZhbHVlcyBiZXR3ZWVuIDAgYW5kIDEwMC4NCisgKi8NCisNCit2b2lkIEF4aXNDYW1lcmFQYXJhbXM6OldyaXRlQ29tcHJlc3Npb24oaW50IGNvbXByZXNzaW9uKQ0KK3sNCisJbV9jb21wcmVzc2lvblBhcmFtLT5TZXRWYWx1ZShjb21wcmVzc2lvbik7DQorCXNlbUdpdmUobV9wYXJhbUNoYW5nZWRTZW0pOw0KK30NCisNCisvKioNCisgKiBHZXQgdGhlIGNvbXByZXNzaW9uIHZhbHVlIGZyb20gdGhlIGNhbWVyYS4NCisgKiBAcmV0dXJuIFRoZSBjYWNoZWQgY29tcHJlc3Npb24gdmFsdWUgZnJvbSB0aGUgY2FtZXJhLg0KKyAqLw0KK2ludCBBeGlzQ2FtZXJhUGFyYW1zOjpHZXRDb21wcmVzc2lvbigpDQorew0KKwlyZXR1cm4gbV9jb21wcmVzc2lvblBhcmFtLT5HZXRWYWx1ZSgpOw0KK30NCisNCisvKioNCisgKiBXcml0ZSB0aGUgbWF4aW11bSBmcmFtZXMgcGVyIHNlY29uZCB0aGF0IHRoZSBjYW1lcmEgc2hvdWxkIHNlbmQNCisgKiBXcml0ZSAwIHRvIHNlbmQgYXMgbWFueSBhcyBwb3NzaWJsZS4NCisgKiBAcGFyYW0gbWF4RlBTIFRoZSBudW1iZXIgb2YgZnJhbWVzIHRoZSBjYW1lcmEgc2hvdWxkIHNlbmQgaW4gYSBzZWNvbmQsIGV4cG9zdXJlIHBlcm1pdHRpbmcuDQorICovDQordm9pZCBBeGlzQ2FtZXJhUGFyYW1zOjpXcml0ZU1heEZQUyhpbnQgbWF4RlBTKQ0KK3sNCisJbV9tYXhGUFNQYXJhbS0+U2V0VmFsdWUobWF4RlBTKTsNCisJc2VtR2l2ZShtX3BhcmFtQ2hhbmdlZFNlbSk7DQorfQ0KKw0KKy8qKg0KKyAqIEdldCB0aGUgbWF4IG51bWJlciBvZiBmcmFtZXMgcGVyIHNlY29uZCB0aGF0IHRoZSBjYW1lcmEgd2lsbCBzZW5kDQorICogQHJldHVybiBNYXhpbXVtIGZyYW1lcyBwZXIgc2Vjb25kLg0KKyAqLw0KK2ludCBBeGlzQ2FtZXJhUGFyYW1zOjpHZXRNYXhGUFMoKQ0KK3sNCisJcmV0dXJuIG1fbWF4RlBTUGFyYW0tPkdldFZhbHVlKCk7DQorfQ0KKw0KKy8qKg0KKyAqIFVwZGF0ZSBhIGNhbWVyYSBwYXJhbWV0ZXIuDQorICogV3JpdGUgYSBjYW1lcmEgcGFyYW1ldGVyIHRvIHRoZSBjYW1lcmEgd2hlbiBpdCBoYXMgYmVuZSBjaGFuZ2VkLg0KKyAqIEBwYXJhbSBwYXJhbSB0aGUgc3RyaW5nIHRvIGluc2VydCBpbnRvIHRoZSBodHRwIHJlcXVlc3QuDQorICogQHJldHVybnMgMCBpZiBpdCBmYWlsZWQsIG90aGVyd2lzZSBub256ZXJvLg0KKyAqLw0KK2ludCBBeGlzQ2FtZXJhUGFyYW1zOjpVcGRhdGVDYW1QYXJhbShjb25zdCBjaGFyKiBwYXJhbSkNCit7DQorCWNoYXIgKnJlcXVlc3RTdHJpbmcgPQ0KKwkJIkdFVCAvYXhpcy1jZ2kvYWRtaW4vcGFyYW0uY2dpP2FjdGlvbj11cGRhdGUmJXMgSFRUUC8xLjFcblwNCitVc2VyLUFnZW50OiBIVFRQU3RyZWFtQ2xpZW50XG5cDQorQ29ubmVjdGlvbjogS2VlcC1BbGl2ZVxuXA0KK0NhY2hlLUNvbnRyb2w6IG5vLWNhY2hlXG5cDQorQXV0aG9yaXphdGlvbjogQmFzaWMgUmxKRE9rWlNRdz09XG5cbiI7DQorCWNoYXIgY29tcGxldGVkUmVxdWVzdFsxMDI0XTsNCisJc3ByaW50Zihjb21wbGV0ZWRSZXF1ZXN0LCByZXF1ZXN0U3RyaW5nLCBwYXJhbSk7DQorCS8vIFNlbmQgcmVxdWVzdA0KKwlpbnQgY2FtU29ja2V0ID0gQ3JlYXRlQ2FtZXJhU29ja2V0KGNvbXBsZXRlZFJlcXVlc3QpOw0KKwlpZiAoY2FtU29ja2V0ID09IEVSUk9SKQ0KKwl7DQorCQlwcmludGYoIlVwZGF0ZUNhbVBhcmFtIGZhaWxlZDogJXNcbiIsIHBhcmFtKTsNCisJCXJldHVybiAwOw0KKwl9DQorCWNsb3NlKGNhbVNvY2tldCk7DQorCXJldHVybiAxOw0KK30NCisNCisvKioNCisgKiBSZWFkIHRoZSBmdWxsIHBhcmFtIGxpc3QgZnJvbSBjYW1lcmEsIHVzZSByZWd1bGFyIGV4cHJlc3Npb25zIHRvIGZpbmQgdGhlIGJpdHMgd2UgY2FyZSBhYm91dA0KKyAqIGFzc2lnbiB2YWx1ZXMgdG8gbWVtYmVyIHZhcmlhYmxlcy4NCisgKi8NCitpbnQgQXhpc0NhbWVyYVBhcmFtczo6UmVhZENhbVBhcmFtcygpDQorew0KKwljaGFyICogcmVxdWVzdFN0cmluZyA9DQorCQkiR0VUIC9heGlzLWNnaS9hZG1pbi9wYXJhbS5jZ2k/YWN0aW9uPWxpc3QgSFRUUC8xLjFcblwNCitVc2VyLUFnZW50OiBIVFRQU3RyZWFtQ2xpZW50XG5cDQorQ29ubmVjdGlvbjogS2VlcC1BbGl2ZVxuXA0KK0NhY2hlLUNvbnRyb2w6IG5vLWNhY2hlXG5cDQorQXV0aG9yaXphdGlvbjogQmFzaWMgUmxKRE9rWlNRdz09XG5cbiI7DQorDQorCWludCBjYW1Tb2NrZXQgPSBDcmVhdGVDYW1lcmFTb2NrZXQocmVxdWVzdFN0cmluZyk7DQorCWlmIChjYW1Tb2NrZXQgPT0gRVJST1IpDQorCXsNCisJCXJldHVybiAwOw0KKwl9DQorCS8vIEFsbG9jYXRlIG9uIHRoZSBoZWFwIHNpbmNlIGl0IGlzIHZlcnkgbGFyZ2UgYW5kIG9ubHkgbmVlZGVkIG9uY2UNCisJY2hhciAqcmVhZEJ1ZmZlciA9IG5ldyBjaGFyWzI3MDAwXTsNCisJaW50IHRvdGFsUmVhZCA9IDA7DQorCXdoaWxlICgxKQ0KKwl7DQorCQl3cGlfYXNzZXJ0KHRvdGFsUmVhZCA8IDI2MDAwKTsNCisJCWludCBieXRlc1JlYWQgPSByZWN2KGNhbVNvY2tldCwgJnJlYWRCdWZmZXJbdG90YWxSZWFkXSwgMTAwMCwgMCk7DQorCQlpZiAoYnl0ZXNSZWFkID09IEVSUk9SKQ0KKwkJew0KKwkJCXdwaV9zZXRFcnJub0Vycm9yV2l0aENvbnRleHQoIkZhaWxlZCB0byByZWFkIGltYWdlIGhlYWRlciIpOw0KKwkJCWNsb3NlKGNhbVNvY2tldCk7DQorCQkJcmV0dXJuIDA7DQorCQl9DQorCQllbHNlIGlmIChieXRlc1JlYWQgPD0gMCkNCisJCXsNCisJCQlicmVhazsNCisJCX0NCisJCXRvdGFsUmVhZCArPSBieXRlc1JlYWQ7DQorCX0NCisJcmVhZEJ1ZmZlclt0b3RhbFJlYWRdID0gJ1wwJzsNCisNCisJUGFyYW1ldGVyVmVjdG9yX3Q6Oml0ZXJhdG9yIGl0ID0gbV9wYXJhbWV0ZXJzLmJlZ2luKCk7DQorCVBhcmFtZXRlclZlY3Rvcl90OjppdGVyYXRvciBlbmQgPSBtX3BhcmFtZXRlcnMuZW5kKCk7DQorCWZvcig7IGl0ICE9IGVuZDsgaXQrKykNCisJew0KKwkJKCppdCktPkdldFBhcmFtRnJvbVN0cmluZyhyZWFkQnVmZmVyLCB0b3RhbFJlYWQpOw0KKwl9DQorCWNsb3NlKGNhbVNvY2tldCk7DQorCWRlbGV0ZSBbXSByZWFkQnVmZmVyOw0KKwlyZXR1cm4gMTsNCit9DQorDQorLyoNCisgKiBDcmVhdGUgYSBzb2NrZXQgY29ubmVjdGVkIHRvIGNhbWVyYQ0KKyAqIFVzZWQgdG8gY3JlYXRlIGEgY29ubmVjdGlvbiB0byB0aGUgY2FtZXJhIGJ5IGJvdGggQXhpc0NhbWVyYVBhcmFtcyBhbmQgQXhpc0NhbWVyYS4NCisgKiBAcGFyYW0gcmVxdWVzdFN0cmluZyBUaGUgaW5pdGlhbCByZXF1ZXN0IHN0cmluZyB0byBzZW5kIHVwb24gc3VjY2Vzc2Z1bCBjb25uZWN0aW9uLg0KKyAqIEByZXR1cm4gRVJST1IgaWYgZmFpbGVkLCBzb2NrZXQgaGFuZGxlIGlmIHN1Y2Nlc3NmdWwuDQorICovDQoraW50IEF4aXNDYW1lcmFQYXJhbXM6OkNyZWF0ZUNhbWVyYVNvY2tldChjb25zdCBjaGFyICpyZXF1ZXN0U3RyaW5nKQ0KK3sNCisJaW50IHNvY2tBZGRyU2l6ZTsNCisJc3RydWN0IHNvY2thZGRyX2luIHNlcnZlckFkZHI7DQorCWludCBjYW1Tb2NrZXQ7DQorCS8qIGNyZWF0ZSBzb2NrZXQgKi8NCisJaWYgKChjYW1Tb2NrZXQgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19TVFJFQU0sIDApKSA9PSBFUlJPUikNCisJew0KKwkJd3BpX3NldEVycm5vRXJyb3JXaXRoQ29udGV4dCgiRmFpbGVkIHRvIGNyZWF0ZSB0aGUgY2FtZXJhIHNvY2tldCIpOw0KKwkJcmV0dXJuIEVSUk9SOw0KKwl9DQorDQorCXNvY2tBZGRyU2l6ZSA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOw0KKwliemVybygoY2hhciAqKSAmc2VydmVyQWRkciwgc29ja0FkZHJTaXplKTsNCisJc2VydmVyQWRkci5zaW5fZmFtaWx5ID0gQUZfSU5FVDsNCisJc2VydmVyQWRkci5zaW5fbGVuID0gKHVfY2hhcikgc29ja0FkZHJTaXplOw0KKwlzZXJ2ZXJBZGRyLnNpbl9wb3J0ID0gaHRvbnMoODApOw0KKw0KKwlzZXJ2ZXJBZGRyLnNpbl9hZGRyLnNfYWRkciA9IG1faXBBZGRyZXNzOw0KKw0KKwkvKiBjb25uZWN0IHRvIHNlcnZlciAqLw0KKwlzdHJ1Y3QgdGltZXZhbCBjb25uZWN0VGltZW91dDsNCisJY29ubmVjdFRpbWVvdXQudHZfc2VjID0gNTsNCisJY29ubmVjdFRpbWVvdXQudHZfdXNlYyA9IDA7DQorCWlmIChjb25uZWN0V2l0aFRpbWVvdXQoY2FtU29ja2V0LCAoc3RydWN0IHNvY2thZGRyICopICZzZXJ2ZXJBZGRyLCBzb2NrQWRkclNpemUsICZjb25uZWN0VGltZW91dCkgPT0gRVJST1IpDQorCXsNCisJCXdwaV9zZXRFcnJub0Vycm9yV2l0aENvbnRleHQoIkZhaWxlZCB0byBjb25uZWN0IHRvIHRoZSBjYW1lcmEiKTsNCisJCWNsb3NlKGNhbVNvY2tldCk7DQorCQlyZXR1cm4gRVJST1I7DQorCX0NCisJaW50IHNlbnQgPSBzZW5kKGNhbVNvY2tldCwgcmVxdWVzdFN0cmluZywgc3RybGVuKHJlcXVlc3RTdHJpbmcpLCAwKTsNCisJaWYgKHNlbnQgPT0gRVJST1IpDQorCXsNCisJCXdwaV9zZXRFcnJub0Vycm9yV2l0aENvbnRleHQoIkZhaWxlZCB0byBzZW5kIGEgcmVxdWVzdCB0byB0aGUgY2FtZXJhIik7DQorCQljbG9zZShjYW1Tb2NrZXQpOw0KKwkJcmV0dXJuIEVSUk9SOw0KKwl9DQorCXJldHVybiBjYW1Tb2NrZXQ7DQorfQ0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL1Zpc2lvbi9BeGlzQ2FtZXJhUGFyYW1zLmggYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9WaXNpb24vQXhpc0NhbWVyYVBhcmFtcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1ODE2ZWUKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9WaXNpb24vQXhpc0NhbWVyYVBhcmFtcy5oCkBAIC0wLDAgKzEsOTAgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorLyogQ29weXJpZ2h0IChjKSBGSVJTVCAyMDA4LiBBbGwgUmlnaHRzIFJlc2VydmVkLgkJCQkJCQkgICovDQorLyogT3BlbiBTb3VyY2UgU29mdHdhcmUgLSBtYXkgYmUgbW9kaWZpZWQgYW5kIHNoYXJlZCBieSBGUkMgdGVhbXMuIFRoZSBjb2RlICAgKi8NCisvKiBtdXN0IGJlIGFjY29tcGFuaWVkIGJ5IHRoZSBGSVJTVCBCU0QgbGljZW5zZSBmaWxlIGluICQoV0lORF9CQVNFKS9XUElMaWIuICAqLw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorI2lmbmRlZiBfX0FYSVNfQ0FNRVJBX1BBUkFNU19IX18NCisjZGVmaW5lIF9fQVhJU19DQU1FUkFfUEFSQU1TX0hfXw0KKw0KKyNpbmNsdWRlICJFbnVtQ2FtZXJhUGFyYW1ldGVyLmgiDQorI2luY2x1ZGUgIkVycm9yQmFzZS5oIg0KKyNpbmNsdWRlICJJbnRDYW1lcmFQYXJhbWV0ZXIuaCINCisjaW5jbHVkZSAiVGFzay5oIg0KKyNpbmNsdWRlIDx2ZWN0b3I+DQorDQorLyoqDQorICogQXhpc0NhbWVyYVBhcmFtcyBjbGFzcy4NCisgKiBUaGlzIGNsYXNzIGhhbmRsZXMgcGFyYW1ldGVyIGNvbmZpZ3VyYXRpb24gdGhlIEF4aXMgMjA2IEV0aGVybmV0IENhbWVyYS4NCisgKiBJdCBzdGFydHMgdXAgYSB0YXNrcyB3aXRoIGFuIGluZGVwZW5kZW50IGNvbm5lY3Rpb24gdG8gdGhlIGNhbWVyYSB0aGF0IG1vbml0b3JzDQorICogZm9yIGNoYW5nZXMgdG8gcGFyYW1ldGVycyBhbmQgdXBkYXRlcyB0aGUgY2FtZXJhLg0KKyAqIEl0IGlzIG9ubHkgc2VwYXJhdGUgZnJvbSBBeGlzQ2FtZXJhIHRvIGlzb2xhdGUgdGhlIHBhcmFtZXRlciBjb2RlIGZyb20gdGhlIGltYWdlIHN0cmVhbWluZyBjb2RlLg0KKyAqLw0KK2NsYXNzIEF4aXNDYW1lcmFQYXJhbXMgOiBwdWJsaWMgRXJyb3JCYXNlDQorew0KK3B1YmxpYzoNCisJdHlwZWRlZiBlbnVtIEV4cG9zdXJlX3Qge2tFeHBvc3VyZV9BdXRvbWF0aWMsIGtFeHBvc3VyZV9Ib2xkLCBrRXhwb3N1cmVfRmxpY2tlckZyZWU1MEh6LCBrRXhwb3N1cmVfRmxpY2tlckZyZWU2MEh6fTsNCisJdHlwZWRlZiBlbnVtIFdoaXRlQmFsYW5jZV90IHtrV2hpdGVCYWxhbmNlX0F1dG9tYXRpYywga1doaXRlQmFsYW5jZV9Ib2xkLCBrV2hpdGVCYWxhbmNlX0ZpeGVkT3V0ZG9vcjEsIGtXaGl0ZUJhbGFuY2VfRml4ZWRPdXRkb29yMiwga1doaXRlQmFsYW5jZV9GaXhlZEluZG9vciwga1doaXRlQmFsYW5jZV9GaXhlZEZsb3VyZXNjZW50MSwga1doaXRlQmFsYW5jZV9GaXhlZEZsb3VyZXNjZW50Mn07DQorCXR5cGVkZWYgZW51bSBSZXNvbHV0aW9uX3Qge2tSZXNvbHV0aW9uXzY0MHg0ODAsIGtSZXNvbHV0aW9uXzY0MHgzNjAsIGtSZXNvbHV0aW9uXzMyMHgyNDAsIGtSZXNvbHV0aW9uXzE2MHgxMjB9Ow0KKwl0eXBlZGVmIGVudW0gUm90YXRpb25fdCB7a1JvdGF0aW9uXzAsIGtSb3RhdGlvbl8xODB9Ow0KKw0KK3Byb3RlY3RlZDoNCisJQXhpc0NhbWVyYVBhcmFtcyhjb25zdCBjaGFyKiBpcEFkZHJlc3MpOw0KKwl2aXJ0dWFsIH5BeGlzQ2FtZXJhUGFyYW1zKCk7DQorDQorcHVibGljOg0KKwkvLyBNaWQtc3RyZWFtIGdldHMgJiB3cml0ZXMNCisJdm9pZCBXcml0ZUJyaWdodG5lc3MoaW50KTsNCisJaW50IEdldEJyaWdodG5lc3MoKTsNCisJdm9pZCBXcml0ZVdoaXRlQmFsYW5jZShXaGl0ZUJhbGFuY2VfdCB3aGl0ZUJhbGFuY2UpOw0KKwlXaGl0ZUJhbGFuY2VfdCBHZXRXaGl0ZUJhbGFuY2UoKTsNCisJdm9pZCBXcml0ZUNvbG9yTGV2ZWwoaW50KTsNCisJaW50IEdldENvbG9yTGV2ZWwoKTsNCisJdm9pZCBXcml0ZUV4cG9zdXJlQ29udHJvbChFeHBvc3VyZV90KTsNCisJRXhwb3N1cmVfdCBHZXRFeHBvc3VyZUNvbnRyb2woKTsNCisJdm9pZCBXcml0ZUV4cG9zdXJlUHJpb3JpdHkoaW50KTsNCisJaW50IEdldEV4cG9zdXJlUHJpb3JpdHkoKTsNCisJdm9pZCBXcml0ZU1heEZQUyhpbnQpOw0KKwlpbnQgR2V0TWF4RlBTKCk7DQorDQorCS8vIE5ldy1TdHJlYW0gZ2V0cyAmIHdyaXRlcyAoaS5lLiByZXF1aXJlIHJlc3RhcnQpDQorCXZvaWQgV3JpdGVSZXNvbHV0aW9uKFJlc29sdXRpb25fdCk7DQorCVJlc29sdXRpb25fdCBHZXRSZXNvbHV0aW9uKCk7DQorCXZvaWQgV3JpdGVDb21wcmVzc2lvbihpbnQpOw0KKwlpbnQgR2V0Q29tcHJlc3Npb24oKTsNCisJdm9pZCBXcml0ZVJvdGF0aW9uKFJvdGF0aW9uX3QpOw0KKwlSb3RhdGlvbl90IEdldFJvdGF0aW9uKCk7DQorDQorcHJvdGVjdGVkOg0KKwl2aXJ0dWFsIHZvaWQgUmVzdGFydENhbWVyYVRhc2soKSA9IDA7DQorCWludCBDcmVhdGVDYW1lcmFTb2NrZXQoY29uc3QgY2hhciAqcmVxdWVzdFN0cmluZyk7DQorDQorCXN0YXRpYyBpbnQgc19QYXJhbVRhc2tGdW5jdGlvbihBeGlzQ2FtZXJhUGFyYW1zKiB0aGlzUHRyKTsNCisJaW50IFBhcmFtVGFza0Z1bmN0aW9uKCk7DQorDQorCWludCBVcGRhdGVDYW1QYXJhbShjb25zdCBjaGFyICpwYXJhbSk7DQorCWludCBSZWFkQ2FtUGFyYW1zKCk7DQorDQorCVRhc2sgbV9wYXJhbVRhc2s7DQorCVVJTlQzMiBtX2lwQWRkcmVzczsgLy8gSVB2NA0KKwlTRU1fSUQgbV9wYXJhbUNoYW5nZWRTZW07DQorCVNFTV9JRCBtX3NvY2tldFBvc3Nlc3Npb25TZW07DQorDQorCS8vQ2FtZXJhIFByb3BlcnRpZXMNCisJSW50Q2FtZXJhUGFyYW1ldGVyICptX2JyaWdodG5lc3NQYXJhbTsNCisJSW50Q2FtZXJhUGFyYW1ldGVyICptX2NvbXByZXNzaW9uUGFyYW07DQorCUludENhbWVyYVBhcmFtZXRlciAqbV9leHBvc3VyZVByaW9yaXR5UGFyYW07DQorCUludENhbWVyYVBhcmFtZXRlciAqbV9jb2xvckxldmVsUGFyYW07DQorCUludENhbWVyYVBhcmFtZXRlciAqbV9tYXhGUFNQYXJhbTsNCisJRW51bUNhbWVyYVBhcmFtZXRlciAqbV9yb3RhdGlvblBhcmFtOw0KKwlFbnVtQ2FtZXJhUGFyYW1ldGVyICptX3Jlc29sdXRpb25QYXJhbTsNCisJRW51bUNhbWVyYVBhcmFtZXRlciAqbV9leHBvc3VyZUNvbnRyb2xQYXJhbTsNCisJRW51bUNhbWVyYVBhcmFtZXRlciAqbV93aGl0ZUJhbGFuY2VQYXJhbTsNCisNCisJLy8gQSB2ZWN0b3IgdG8gYWNjZXNzIGFsbCBwcm9wZXJ0aWVzIHNpbXBseS4NCisJdHlwZWRlZiBzdGQ6OnZlY3RvcjxJbnRDYW1lcmFQYXJhbWV0ZXIqPiBQYXJhbWV0ZXJWZWN0b3JfdDsNCisJUGFyYW1ldGVyVmVjdG9yX3QgbV9wYXJhbWV0ZXJzOw0KK307DQorDQorDQorI2VuZGlmDQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvVmlzaW9uL0JpbmFyeUltYWdlLmNwcCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL1Zpc2lvbi9CaW5hcnlJbWFnZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODNkMzdjNgotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL1Zpc2lvbi9CaW5hcnlJbWFnZS5jcHAKQEAgLTAsMCArMSwyMjIgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorLyogQ29weXJpZ2h0IChjKSBGSVJTVCAyMDA4LiBBbGwgUmlnaHRzIFJlc2VydmVkLgkJCQkJCQkgICovDQorLyogT3BlbiBTb3VyY2UgU29mdHdhcmUgLSBtYXkgYmUgbW9kaWZpZWQgYW5kIHNoYXJlZCBieSBGUkMgdGVhbXMuIFRoZSBjb2RlICAgKi8NCisvKiBtdXN0IGJlIGFjY29tcGFuaWVkIGJ5IHRoZSBGSVJTVCBCU0QgbGljZW5zZSBmaWxlIGluICQoV0lORF9CQVNFKS9XUElMaWIuICAqLw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorI2luY2x1ZGUgIkJpbmFyeUltYWdlLmgiDQorI2luY2x1ZGUgIldQSUVycm9ycy5oIg0KKw0KKy8qKiBQcml2YXRlIE5JIGZ1bmN0aW9uIG5lZWRlZCB0byB3cml0ZSB0byB0aGUgVnhXb3JrcyB0YXJnZXQgKi8NCitJTUFRX0ZVTkMgaW50IFByaXZfU2V0V3JpdGVGaWxlQWxsb3dlZChVSU5UMzIgZW5hYmxlKTsgDQorDQorQmluYXJ5SW1hZ2U6OkJpbmFyeUltYWdlKCkgOiBNb25vSW1hZ2UoKQ0KK3sNCit9DQorDQorQmluYXJ5SW1hZ2U6On5CaW5hcnlJbWFnZSgpDQorew0KK30NCisNCisvKioNCisgKiBHZXQgdGhlbiBudW1iZXIgb2YgcGFydGljbGVzIGZvciB0aGUgaW1hZ2UuDQorICogQHJldHVybnMgdGhlIG51bWJlciBvZiBwYXJ0aWNsZXMgZm91bmQgZm9yIHRoZSBpbWFnZS4NCisgKi8NCitpbnQgQmluYXJ5SW1hZ2U6OkdldE51bWJlclBhcnRpY2xlcygpDQorew0KKwlpbnQgbnVtUGFydGljbGVzID0gMDsNCisJaW50IHN1Y2Nlc3MgPSBpbWFxQ291bnRQYXJ0aWNsZXMobV9pbWFxSW1hZ2UsIDEsICZudW1QYXJ0aWNsZXMpOw0KKwl3cGlfc2V0SW1hcUVycm9yV2l0aENvbnRleHQoc3VjY2VzcywgIkVycm9yIGNvdW50aW5nIHBhcnRpY2xlcyIpOw0KKwlyZXR1cm4gbnVtUGFydGljbGVzOw0KK30NCisNCisvKioNCisgKiBHZXQgYSBzaW5nbGUgcGFydGljbGUgYW5hbHlzaXMgcmVwb3J0Lg0KKyAqIEdldCBvbmUgKG9mIHBvc3NpYmx5IG1hbnkpIHBhcnRpY2xlIGFuYWx5c2lzIHJlcG9ydHMgZm9yIGFuIGltYWdlLg0KKyAqIEBwYXJhbSBwYXJ0aWNsZU51bWJlciBXaGljaCBwYXJ0aWNsZSBhbmFseXNpcyByZXBvcnQgdG8gcmV0dXJuLg0KKyAqIEByZXR1cm5zIHRoZSBzZWxlY3RlZCBwYXJ0aWNsZSBhbmFseXNpcyByZXBvcnQNCisgKi8NCitQYXJ0aWNsZUFuYWx5c2lzUmVwb3J0IEJpbmFyeUltYWdlOjpHZXRQYXJ0aWNsZUFuYWx5c2lzUmVwb3J0KGludCBwYXJ0aWNsZU51bWJlcikNCit7DQorCVBhcnRpY2xlQW5hbHlzaXNSZXBvcnQgcGFyOw0KKwlHZXRQYXJ0aWNsZUFuYWx5c2lzUmVwb3J0KHBhcnRpY2xlTnVtYmVyLCAmcGFyKTsNCisJcmV0dXJuIHBhcjsNCit9DQorDQorLyoqDQorICogR2V0IGEgc2luZ2xlIHBhcnRpY2xlIGFuYWx5c2lzIHJlcG9ydC4NCisgKiBHZXQgb25lIChvZiBwb3NzaWJseSBtYW55KSBwYXJ0aWNsZSBhbmFseXNpcyByZXBvcnRzIGZvciBhbiBpbWFnZS4NCisgKiBUaGlzIHZlcnNpb24gY291bGQgYmUgbW9yZSBlZmZpY2llbnQgd2hlbiBjb3B5aW5nIG1hbnkgcmVwb3J0cy4NCisgKiBAcGFyYW0gcGFydGljbGVOdW1iZXIgV2hpY2ggcGFydGljbGUgYW5hbHlzaXMgcmVwb3J0IHRvIHJldHVybi4NCisgKiBAcGFyYW0gcGFyIHRoZSBzZWxlY3RlZCBwYXJ0aWNsZSBhbmFseXNpcyByZXBvcnQNCisgKi8NCit2b2lkIEJpbmFyeUltYWdlOjpHZXRQYXJ0aWNsZUFuYWx5c2lzUmVwb3J0KGludCBwYXJ0aWNsZU51bWJlciwgUGFydGljbGVBbmFseXNpc1JlcG9ydCAqcGFyKQ0KK3sNCisJaW50IHN1Y2Nlc3M7DQorCWludCBudW1QYXJ0aWNsZXMgPSAwOw0KKw0KKwlzdWNjZXNzID0gaW1hcUdldEltYWdlU2l6ZShtX2ltYXFJbWFnZSwgJnBhci0+aW1hZ2VXaWR0aCwgJnBhci0+aW1hZ2VIZWlnaHQpOw0KKwl3cGlfc2V0SW1hcUVycm9yV2l0aENvbnRleHQoc3VjY2VzcywgIkVycm9yIGdldHRpbmcgaW1hZ2Ugc2l6ZSIpOw0KKwlpZiAoU3RhdHVzSXNGYXRhbCgpKQ0KKwkJcmV0dXJuOw0KKw0KKwlzdWNjZXNzID0gaW1hcUNvdW50UGFydGljbGVzKG1faW1hcUltYWdlLCAxLCAmbnVtUGFydGljbGVzKTsNCisJd3BpX3NldEltYXFFcnJvcldpdGhDb250ZXh0KHN1Y2Nlc3MsICJFcnJvciBjb3VudGluZyBwYXJ0aWNsZXMiKTsNCisJaWYgKFN0YXR1c0lzRmF0YWwoKSkNCisJCXJldHVybjsNCisNCisJaWYgKHBhcnRpY2xlTnVtYmVyID49IG51bVBhcnRpY2xlcykNCisJew0KKwkJd3BpX3NldFdQSUVycm9yV2l0aENvbnRleHQoUGFyYW1ldGVyT3V0T2ZSYW5nZSwgInBhcnRpY2xlTnVtYmVyIik7DQorCQlyZXR1cm47DQorCX0NCisNCisJcGFyLT5wYXJ0aWNsZUluZGV4ID0gcGFydGljbGVOdW1iZXI7DQorCS8vIERvbid0IGJvdGhlciBtZWFzdXJpbmcgdGhlIHJlc3Qgb2YgdGhlIHBhcnRpY2xlIGlmIG9uZSBmYWlscw0KKwlib29sIGdvb2QgPSBQYXJ0aWNsZU1lYXN1cmVtZW50KHBhcnRpY2xlTnVtYmVyLCBJTUFRX01UX0NFTlRFUl9PRl9NQVNTX1gsICZwYXItPmNlbnRlcl9tYXNzX3gpOw0KKwlnb29kID0gZ29vZCAmJiBQYXJ0aWNsZU1lYXN1cmVtZW50KHBhcnRpY2xlTnVtYmVyLCBJTUFRX01UX0NFTlRFUl9PRl9NQVNTX1ksICZwYXItPmNlbnRlcl9tYXNzX3kpOw0KKwlnb29kID0gZ29vZCAmJiBQYXJ0aWNsZU1lYXN1cmVtZW50KHBhcnRpY2xlTnVtYmVyLCBJTUFRX01UX0FSRUEsICZwYXItPnBhcnRpY2xlQXJlYSk7DQorCWdvb2QgPSBnb29kICYmIFBhcnRpY2xlTWVhc3VyZW1lbnQocGFydGljbGVOdW1iZXIsIElNQVFfTVRfQk9VTkRJTkdfUkVDVF9UT1AsICZwYXItPmJvdW5kaW5nUmVjdC50b3ApOw0KKwlnb29kID0gZ29vZCAmJiBQYXJ0aWNsZU1lYXN1cmVtZW50KHBhcnRpY2xlTnVtYmVyLCBJTUFRX01UX0JPVU5ESU5HX1JFQ1RfTEVGVCwgJnBhci0+Ym91bmRpbmdSZWN0LmxlZnQpOw0KKwlnb29kID0gZ29vZCAmJiBQYXJ0aWNsZU1lYXN1cmVtZW50KHBhcnRpY2xlTnVtYmVyLCBJTUFRX01UX0JPVU5ESU5HX1JFQ1RfSEVJR0hULCAmcGFyLT5ib3VuZGluZ1JlY3QuaGVpZ2h0KTsNCisJZ29vZCA9IGdvb2QgJiYgUGFydGljbGVNZWFzdXJlbWVudChwYXJ0aWNsZU51bWJlciwgSU1BUV9NVF9CT1VORElOR19SRUNUX1dJRFRILCAmcGFyLT5ib3VuZGluZ1JlY3Qud2lkdGgpOw0KKwlnb29kID0gZ29vZCAmJiBQYXJ0aWNsZU1lYXN1cmVtZW50KHBhcnRpY2xlTnVtYmVyLCBJTUFRX01UX0FSRUFfQllfSU1BR0VfQVJFQSwgJnBhci0+cGFydGljbGVUb0ltYWdlUGVyY2VudCk7DQorCWdvb2QgPSBnb29kICYmIFBhcnRpY2xlTWVhc3VyZW1lbnQocGFydGljbGVOdW1iZXIsIElNQVFfTVRfQVJFQV9CWV9QQVJUSUNMRV9BTkRfSE9MRVNfQVJFQSwgJnBhci0+cGFydGljbGVRdWFsaXR5KTsNCisNCisJaWYgKGdvb2QpDQorCXsNCisJCS8qIG5vcm1hbGl6ZWQgcG9zaXRpb24gKC0xIHRvIDEpICovDQorCQlwYXItPmNlbnRlcl9tYXNzX3hfbm9ybWFsaXplZCA9IE5vcm1hbGl6ZUZyb21SYW5nZShwYXItPmNlbnRlcl9tYXNzX3gsIHBhci0+aW1hZ2VXaWR0aCk7DQorCQlwYXItPmNlbnRlcl9tYXNzX3lfbm9ybWFsaXplZCA9IE5vcm1hbGl6ZUZyb21SYW5nZShwYXItPmNlbnRlcl9tYXNzX3ksIHBhci0+aW1hZ2VIZWlnaHQpOw0KKwl9DQorfQ0KKw0KKw0KKy8qKg0KKyAqIEdldCBhbiBvcmRlcmVkIHZlY3RvciBvZiBwYXJ0aWNsZXMgZm9yIHRoZSBpbWFnZS4NCisgKiBDcmVhdGUgYSB2ZWN0b3Igb2YgcGFydGljbGUgYW5hbHlzaXMgcmVwb3J0cyBzb3J0ZWQgYnkgc2l6ZSBmb3IgYW4gaW1hZ2UuDQorICogVGhlIHZlY3RvciBjb250YWlucyB0aGUgYWN0dWFsIHJlcG9ydCBzdHJ1Y3R1cmVzLg0KKyAqIEByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgdmVjdG9yIG9mIHBhcnRpY2xlIGFuYWx5c2lzIHJlcG9ydHMuIFRoZSBjYWxsZXIgbXVzdCBkZWxldGUgdGhlDQorICogdmVjdG9yIHdoZW4gZmluaXNoZWQgdXNpbmcgaXQuDQorICovDQordmVjdG9yPFBhcnRpY2xlQW5hbHlzaXNSZXBvcnQ+KiBCaW5hcnlJbWFnZTo6R2V0T3JkZXJlZFBhcnRpY2xlQW5hbHlzaXNSZXBvcnRzKCkNCit7DQorCXZlY3RvcjxQYXJ0aWNsZUFuYWx5c2lzUmVwb3J0PiogcGFydGljbGVzID0gbmV3IHZlY3RvcjxQYXJ0aWNsZUFuYWx5c2lzUmVwb3J0PjsNCisJaW50IHBhcnRpY2xlQ291bnQgPSBHZXROdW1iZXJQYXJ0aWNsZXMoKTsNCisJZm9yKGludCBwYXJ0aWNsZUluZGV4ID0gMDsgcGFydGljbGVJbmRleCA8IHBhcnRpY2xlQ291bnQ7IHBhcnRpY2xlSW5kZXgrKykNCisJew0KKwkJcGFydGljbGVzLT5wdXNoX2JhY2soR2V0UGFydGljbGVBbmFseXNpc1JlcG9ydChwYXJ0aWNsZUluZGV4KSk7DQorCX0NCisJLy8gVE9ETzogVGhpcyBpcyBwcmV0dHkgaW5lZmZpY2llbnQgc2luY2UgZWFjaCBjb21wYXJlIGluIHRoZSBzb3J0IGNvcGllcw0KKwkvLyAgIGJvdGggcmVwb3J0cyBiZWluZyBjb21wYXJlZC4uLiBkbyBpdCBtYW51YWxseSBpbnN0ZWFkLi4uIHdoaWxlIHdlJ3JlDQorCS8vICAgYXQgaXQsIHdlIHNob3VsZCBwcm92aWRlIGEgdmVyc2lvbiB0aGF0IGFsbG93cyBhIHByZWFsbG9jYXRlZCBidWZmZXIgb2YNCisJLy8gICBQYXJ0aWNsZUFuYWx5c2lzUmVwb3J0IHN0cnVjdHVyZXMNCisJc29ydChwYXJ0aWNsZXMtPmJlZ2luKCksIHBhcnRpY2xlcy0+ZW5kKCksIENvbXBhcmVQYXJ0aWNsZVNpemVzKTsNCisJcmV0dXJuIHBhcnRpY2xlczsNCit9DQorDQorLyoqDQorICogV3JpdGUgYSBiaW5hcnkgaW1hZ2UgdG8gZmxhc2guDQorICogV3JpdGVzIHRoZSBiaW5hcnkgaW1hZ2UgdG8gZmxhc2ggb24gdGhlIGNSSU8gZm9yIGxhdGVyIGluc3BlY3Rpb24uDQorICogQHBhcmFtIGZpbGVOYW1lIHRoZSBuYW1lIG9mIHRoZSBpbWFnZSBmaWxlIHdyaXR0ZW4gdG8gdGhlIGZsYXNoLg0KKyAqLw0KK3ZvaWQgQmluYXJ5SW1hZ2U6OldyaXRlKGNvbnN0IGNoYXIgKmZpbGVOYW1lKQ0KK3sNCisJUkdCVmFsdWUgY29sb3JUYWJsZVsyNTZdOw0KKwlQcml2X1NldFdyaXRlRmlsZUFsbG93ZWQoMSk7DQorCW1lbXNldChjb2xvclRhYmxlLCAwLCBzaXplb2YoY29sb3JUYWJsZSkpOw0KKwljb2xvclRhYmxlWzBdLlIgPSAwOw0KKwljb2xvclRhYmxlWzFdLlIgPSAyNTU7DQorCWNvbG9yVGFibGVbMF0uRyA9IGNvbG9yVGFibGVbMV0uRyA9IDA7DQorCWNvbG9yVGFibGVbMF0uQiA9IGNvbG9yVGFibGVbMV0uQiA9IDA7DQorCWNvbG9yVGFibGVbMF0uYWxwaGEgPSBjb2xvclRhYmxlWzFdLmFscGhhID0gMDsNCisJaW1hcVdyaXRlRmlsZShtX2ltYXFJbWFnZSwgZmlsZU5hbWUsIGNvbG9yVGFibGUpOw0KK30NCisNCisvKioNCisgKiBNZWFzdXJlIGEgc2luZ2xlIHBhcmFtZXRlciBmb3IgYW4gaW1hZ2UuDQorICogR2V0IHRoZSBtZWFzdXJlbWVudCBmb3IgYSBzaW5nbGUgcGFyYW1ldGVyIGFib3V0IGFuIGltYWdlIGJ5IGNhbGxpbmcgdGhlIGltYXFNZWFzdXJlUGFydGljbGUNCisgKiBmdW5jdGlvbiBmb3IgdGhlIHNlbGVjdGVkIHBhcmFtZXRlci4NCisgKiBAcGFyYW0gcGFydGljbGVOdW1iZXIgd2hpY2ggcGFydGljbGUgaW4gdGhlIHNldCBvZiBwYXJ0aWNsZXMNCisgKiBAcGFyYW0gd2hhdFRvTWVhc3VyZSB0aGUgaW1hcSBNZWFzdXJlbWVudFR5cGUgKHdoYXQgdG8gbWVhc3VyZSkNCisgKiBAcGFyYW0gcmVzdWx0IHRoZSB2YWx1ZSBvZiB0aGUgbWVhc3VyZW1lbnQNCisgKiBAcmV0dXJucyBmYWxzZSBvbiBmYWlsdXJlLCB0cnVlIG9uIHN1Y2Nlc3MNCisgKi8NCitib29sIEJpbmFyeUltYWdlOjpQYXJ0aWNsZU1lYXN1cmVtZW50KGludCBwYXJ0aWNsZU51bWJlciwgTWVhc3VyZW1lbnRUeXBlIHdoYXRUb01lYXN1cmUsIGludCAqcmVzdWx0KQ0KK3sNCisJZG91YmxlIHJlc3VsdERvdWJsZTsNCisJYm9vbCBzdWNjZXNzID0gUGFydGljbGVNZWFzdXJlbWVudChwYXJ0aWNsZU51bWJlciwgd2hhdFRvTWVhc3VyZSwgJnJlc3VsdERvdWJsZSk7DQorCSpyZXN1bHQgPSAoaW50KXJlc3VsdERvdWJsZTsNCisJcmV0dXJuIHN1Y2Nlc3M7DQorfQ0KKw0KKy8qKg0KKyAqIE1lYXN1cmUgYSBzaW5nbGUgcGFyYW1ldGVyIGZvciBhbiBpbWFnZS4NCisgKiBHZXQgdGhlIG1lYXN1cmVtZW50IGZvciBhIHNpbmdsZSBwYXJhbWV0ZXIgYWJvdXQgYW4gaW1hZ2UgYnkgY2FsbGluZyB0aGUgaW1hcU1lYXN1cmVQYXJ0aWNsZQ0KKyAqIGZ1bmN0aW9uIGZvciB0aGUgc2VsZWN0ZWQgcGFyYW1ldGVyLg0KKyAqIEBwYXJhbSBwYXJ0aWNsZU51bWJlciB3aGljaCBwYXJ0aWNsZSBpbiB0aGUgc2V0IG9mIHBhcnRpY2xlcw0KKyAqIEBwYXJhbSB3aGF0VG9NZWFzdXJlIHRoZSBpbWFxIE1lYXN1cmVtZW50VHlwZSAod2hhdCB0byBtZWFzdXJlKQ0KKyAqIEBwYXJhbSByZXN1bHQgdGhlIHZhbHVlIG9mIHRoZSBtZWFzdXJlbWVudA0KKyAqIEByZXR1cm5zIHRydWUgb24gZmFpbHVyZSwgZmFsc2Ugb24gc3VjY2Vzcw0KKyAqLw0KK2Jvb2wgQmluYXJ5SW1hZ2U6OlBhcnRpY2xlTWVhc3VyZW1lbnQoaW50IHBhcnRpY2xlTnVtYmVyLCBNZWFzdXJlbWVudFR5cGUgd2hhdFRvTWVhc3VyZSwgZG91YmxlICpyZXN1bHQpDQorew0KKwlpbnQgc3VjY2VzczsNCisJc3VjY2VzcyA9IGltYXFNZWFzdXJlUGFydGljbGUobV9pbWFxSW1hZ2UsIHBhcnRpY2xlTnVtYmVyLCAwLCB3aGF0VG9NZWFzdXJlLCByZXN1bHQpOw0KKwl3cGlfc2V0SW1hcUVycm9yV2l0aENvbnRleHQoc3VjY2VzcywgIkVycm9yIG1lYXN1cmluZyBwYXJ0aWNsZSIpOw0KKwlyZXR1cm4gIVN0YXR1c0lzRmF0YWwoKTsNCit9DQorDQorLy9Ob3JtYWxpemVzIHRvIFstMSwxXQ0KK2RvdWJsZSBCaW5hcnlJbWFnZTo6Tm9ybWFsaXplRnJvbVJhbmdlKGRvdWJsZSBwb3NpdGlvbiwgaW50IHJhbmdlKQ0KK3sNCisJcmV0dXJuIChwb3NpdGlvbiAqIDIuMCAvIChkb3VibGUpcmFuZ2UpIC0gMS4wOw0KK30NCisNCisvKioNCisgKiBUaGUgY29tcGFyZSBoZWxwZXIgZnVuY3Rpb24gZm9yIHNvcnQuDQorICogVGhpcyBmdW5jdGlvbiBjb21wYXJlcyB0d28gcGFydGljbGUgYW5hbHlzaXMgcmVwb3J0cyBhcyBhIGhlbHBlciBmb3IgdGhlIHNvcnQgZnVuY3Rpb24uDQorICogQHBhcmFtIHBhcnRpY2xlMSBUaGUgZmlyc3QgcGFydGljbGUgdG8gY29tcGFyZQ0KKyAqIEBwYXJhbSBwYXJ0aWNsZTIgdGhlIHNlY29uZCBwYXJ0aWNsZSB0byBjb21wYXJlDQorICogQHJldHVybnMgdHJ1ZSBpZiBwYXJ0aWNsZTEgaXMgZ3JlYXRlciB0aGFuIHBhcnRpY2xlMg0KKyAqLw0KK2Jvb2wgQmluYXJ5SW1hZ2U6OkNvbXBhcmVQYXJ0aWNsZVNpemVzKFBhcnRpY2xlQW5hbHlzaXNSZXBvcnQgcGFydGljbGUxLCBQYXJ0aWNsZUFuYWx5c2lzUmVwb3J0IHBhcnRpY2xlMikNCit7DQorCS8vd2Ugd2FudCBkZXNjZW5kaW5nIHNvcnQgb3JkZXINCisJcmV0dXJuIHBhcnRpY2xlMS5wYXJ0aWNsZVRvSW1hZ2VQZXJjZW50ID4gcGFydGljbGUyLnBhcnRpY2xlVG9JbWFnZVBlcmNlbnQ7DQorfQ0KKw0KK0JpbmFyeUltYWdlICpCaW5hcnlJbWFnZTo6UmVtb3ZlU21hbGxPYmplY3RzKGJvb2wgY29ubmVjdGl2aXR5OCwgaW50IGVyb3Npb25zKQ0KK3sNCisJQmluYXJ5SW1hZ2UgKnJlc3VsdCA9IG5ldyBCaW5hcnlJbWFnZSgpOw0KKwlpbnQgc3VjY2VzcyA9IGltYXFTaXplRmlsdGVyKHJlc3VsdC0+R2V0SW1hcUltYWdlKCksIG1faW1hcUltYWdlLCBjb25uZWN0aXZpdHk4LCBlcm9zaW9ucywgSU1BUV9LRUVQX0xBUkdFLCBOVUxMKTsNCisJd3BpX3NldEltYXFFcnJvcldpdGhDb250ZXh0KHN1Y2Nlc3MsICJFcnJvciBpbiBSZW1vdmVTbWFsbE9iamVjdHMiKTsNCisJcmV0dXJuIHJlc3VsdDsNCit9DQorDQorQmluYXJ5SW1hZ2UgKkJpbmFyeUltYWdlOjpSZW1vdmVMYXJnZU9iamVjdHMoYm9vbCBjb25uZWN0aXZpdHk4LCBpbnQgZXJvc2lvbnMpDQorew0KKwlCaW5hcnlJbWFnZSAqcmVzdWx0ID0gbmV3IEJpbmFyeUltYWdlKCk7DQorCWludCBzdWNjZXNzID0gaW1hcVNpemVGaWx0ZXIocmVzdWx0LT5HZXRJbWFxSW1hZ2UoKSwgbV9pbWFxSW1hZ2UsIGNvbm5lY3Rpdml0eTgsIGVyb3Npb25zLCBJTUFRX0tFRVBfU01BTEwsIE5VTEwpOw0KKwl3cGlfc2V0SW1hcUVycm9yV2l0aENvbnRleHQoc3VjY2VzcywgIkVycm9yIGluIFJlbW92ZUxhcmdlT2JqZWN0cyIpOw0KKwlyZXR1cm4gcmVzdWx0Ow0KK30NCisNCitCaW5hcnlJbWFnZSAqQmluYXJ5SW1hZ2U6OkNvbnZleEh1bGwoYm9vbCBjb25uZWN0aXZpdHk4KQ0KK3sNCisJQmluYXJ5SW1hZ2UgKnJlc3VsdCA9IG5ldyBCaW5hcnlJbWFnZSgpOw0KKwlpbnQgc3VjY2VzcyA9IGltYXFDb252ZXhIdWxsKHJlc3VsdC0+R2V0SW1hcUltYWdlKCksIG1faW1hcUltYWdlLCBjb25uZWN0aXZpdHk4KTsNCisJd3BpX3NldEltYXFFcnJvcldpdGhDb250ZXh0KHN1Y2Nlc3MsICJFcnJvciBpbiBjb252ZXggaHVsbCBvcGVyYXRpb24iKTsNCisJcmV0dXJuIHJlc3VsdDsNCit9DQorDQorQmluYXJ5SW1hZ2UgKkJpbmFyeUltYWdlOjpQYXJ0aWNsZUZpbHRlcihQYXJ0aWNsZUZpbHRlckNyaXRlcmlhMiAqY3JpdGVyaWEsIGludCBjcml0ZXJpYUNvdW50KQ0KK3sNCisJQmluYXJ5SW1hZ2UgKnJlc3VsdCA9IG5ldyBCaW5hcnlJbWFnZSgpOw0KKwlpbnQgbnVtUGFydGljbGVzOw0KKwlQYXJ0aWNsZUZpbHRlck9wdGlvbnMyIGZpbHRlck9wdGlvbnMgPSB7MCwgMCwgMCwgMX07DQorCWludCBzdWNjZXNzID0gaW1hcVBhcnRpY2xlRmlsdGVyNChyZXN1bHQtPkdldEltYXFJbWFnZSgpLCBtX2ltYXFJbWFnZSwgY3JpdGVyaWEsIGNyaXRlcmlhQ291bnQsICZmaWx0ZXJPcHRpb25zLCBOVUxMLCAmbnVtUGFydGljbGVzKTsNCisJd3BpX3NldEltYXFFcnJvcldpdGhDb250ZXh0KHN1Y2Nlc3MsICJFcnJvciBpbiBwYXJ0aWNsZSBmaWx0ZXIgb3BlcmF0aW9uIik7DQorCXJldHVybiByZXN1bHQ7DQorfQ0KKw0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL1Zpc2lvbi9CaW5hcnlJbWFnZS5oIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvVmlzaW9uL0JpbmFyeUltYWdlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjcxZjg2YQotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL1Zpc2lvbi9CaW5hcnlJbWFnZS5oCkBAIC0wLDAgKzEsNDIgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorLyogQ29weXJpZ2h0IChjKSBGSVJTVCAyMDA4LiBBbGwgUmlnaHRzIFJlc2VydmVkLgkJCQkJCQkgICovDQorLyogT3BlbiBTb3VyY2UgU29mdHdhcmUgLSBtYXkgYmUgbW9kaWZpZWQgYW5kIHNoYXJlZCBieSBGUkMgdGVhbXMuIFRoZSBjb2RlICAgKi8NCisvKiBtdXN0IGJlIGFjY29tcGFuaWVkIGJ5IHRoZSBGSVJTVCBCU0QgbGljZW5zZSBmaWxlIGluICQoV0lORF9CQVNFKS9XUElMaWIuICAqLw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorI2lmbmRlZiBfX0JJTkFSWV9JTUFHRV9IX18NCisjZGVmaW5lIF9fQklOQVJZX0lNQUdFX0hfXw0KKw0KKyNpbmNsdWRlICJNb25vSW1hZ2UuaCINCisvKioNCisgKiBJbmNsdWRlZCBmb3IgUGFydGljbGVBbmFseXNpc1JlcG9ydCBkZWZpbml0aW9uDQorICogVE9ETzogRWxpbWluYXRlIHRoaXMgZGVwZW5kZW5jeSEgDQorICovDQorI2luY2x1ZGUgIlZpc2lvbjIwMDkvVmlzaW9uQVBJLmgiDQorDQorI2luY2x1ZGUgPHZlY3Rvcj4NCisjaW5jbHVkZSA8YWxnb3JpdGhtPg0KK3VzaW5nIG5hbWVzcGFjZSBzdGQ7DQorDQorY2xhc3MgQmluYXJ5SW1hZ2UgOiBwdWJsaWMgTW9ub0ltYWdlDQorew0KK3B1YmxpYzoNCisJQmluYXJ5SW1hZ2UoKTsNCisJdmlydHVhbCB+QmluYXJ5SW1hZ2UoKTsNCisJaW50IEdldE51bWJlclBhcnRpY2xlcygpOw0KKwlQYXJ0aWNsZUFuYWx5c2lzUmVwb3J0IEdldFBhcnRpY2xlQW5hbHlzaXNSZXBvcnQoaW50IHBhcnRpY2xlTnVtYmVyKTsNCisJdm9pZCBHZXRQYXJ0aWNsZUFuYWx5c2lzUmVwb3J0KGludCBwYXJ0aWNsZU51bWJlciwgUGFydGljbGVBbmFseXNpc1JlcG9ydCAqcGFyKTsNCisJdmVjdG9yPFBhcnRpY2xlQW5hbHlzaXNSZXBvcnQ+KiBHZXRPcmRlcmVkUGFydGljbGVBbmFseXNpc1JlcG9ydHMoKTsNCisJQmluYXJ5SW1hZ2UgKlJlbW92ZVNtYWxsT2JqZWN0cyhib29sIGNvbm5lY3Rpdml0eTgsIGludCBlcm9zaW9ucyk7DQorCUJpbmFyeUltYWdlICpSZW1vdmVMYXJnZU9iamVjdHMoYm9vbCBjb25uZWN0aXZpdHk4LCBpbnQgZXJvc2lvbnMpOw0KKwlCaW5hcnlJbWFnZSAqQ29udmV4SHVsbChib29sIGNvbm5lY3Rpdml0eTgpOw0KKwlCaW5hcnlJbWFnZSAqUGFydGljbGVGaWx0ZXIoUGFydGljbGVGaWx0ZXJDcml0ZXJpYTIgKmNyaXRlcmlhLCBpbnQgY3JpdGVyaWFDb3VudCk7DQorCXZpcnR1YWwgdm9pZCBXcml0ZShjb25zdCBjaGFyICpmaWxlTmFtZSk7DQorcHJpdmF0ZToNCisJYm9vbCBQYXJ0aWNsZU1lYXN1cmVtZW50KGludCBwYXJ0aWNsZU51bWJlciwgTWVhc3VyZW1lbnRUeXBlIHdoYXRUb01lYXN1cmUsIGludCAqcmVzdWx0KTsNCisJYm9vbCBQYXJ0aWNsZU1lYXN1cmVtZW50KGludCBwYXJ0aWNsZU51bWJlciwgTWVhc3VyZW1lbnRUeXBlIHdoYXRUb01lYXN1cmUsIGRvdWJsZSAqcmVzdWx0KTsNCisJc3RhdGljIGRvdWJsZSBOb3JtYWxpemVGcm9tUmFuZ2UoZG91YmxlIHBvc2l0aW9uLCBpbnQgcmFuZ2UpOw0KKwlzdGF0aWMgYm9vbCBDb21wYXJlUGFydGljbGVTaXplcyhQYXJ0aWNsZUFuYWx5c2lzUmVwb3J0IHBhcnRpY2xlMSwgUGFydGljbGVBbmFseXNpc1JlcG9ydCBwYXJ0aWNsZTIpOw0KK307DQorDQorI2VuZGlmDQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvVmlzaW9uL0NvbG9ySW1hZ2UuY3BwIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvVmlzaW9uL0NvbG9ySW1hZ2UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzMjRiYjUKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9WaXNpb24vQ29sb3JJbWFnZS5jcHAKQEAgLTAsMCArMSw0NjUgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorLyogQ29weXJpZ2h0IChjKSBGSVJTVCAyMDA4LiBBbGwgUmlnaHRzIFJlc2VydmVkLgkJCQkJCQkgICovDQorLyogT3BlbiBTb3VyY2UgU29mdHdhcmUgLSBtYXkgYmUgbW9kaWZpZWQgYW5kIHNoYXJlZCBieSBGUkMgdGVhbXMuIFRoZSBjb2RlICAgKi8NCisvKiBtdXN0IGJlIGFjY29tcGFuaWVkIGJ5IHRoZSBGSVJTVCBCU0QgbGljZW5zZSBmaWxlIGluICQoV0lORF9CQVNFKS9XUElMaWIuICAqLw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorI2luY2x1ZGUgIkNvbG9ySW1hZ2UuaCINCisNCisjaW5jbHVkZSAiV1BJRXJyb3JzLmgiDQorDQorQ29sb3JJbWFnZTo6Q29sb3JJbWFnZShJbWFnZVR5cGUgdHlwZSkgOiBJbWFnZUJhc2UodHlwZSkNCit7DQorfQ0KKw0KK0NvbG9ySW1hZ2U6On5Db2xvckltYWdlKCkNCit7DQorfQ0KKw0KKy8qKg0KKyAqIFBlcmZvcm0gYSB0aHJlc2hvbGQgb3BlcmF0aW9uIG9uIGEgQ29sb3JJbWFnZS4NCisgKiBQZXJmb3JtIGEgdGhyZXNob2xkIG9wZXJhdGlvbiBvbiBhIENvbG9ySW1hZ2UgdXNpbmcgdGhlIENvbG9yTW9kZSBzdXBwbGllZA0KKyAqIGFzIGEgcGFyYW1ldGVyLg0KKyAqIEBwYXJhbSBjb2xvck1vZGUgVGhlIHR5cGUgb2YgY29sb3JzcGFjZSB0aGlzIG9wZXJhdGlvbiBzaG91bGQgYmUgcGVyZm9ybWVkIGluDQorICogQHJldHVybnMgYSBwb2ludGVyIHRvIGEgYmluYXJ5IGltYWdlDQorICovDQorQmluYXJ5SW1hZ2UgKkNvbG9ySW1hZ2U6OkNvbXB1dGVUaHJlc2hvbGQoQ29sb3JNb2RlIGNvbG9yTW9kZSwNCisJCWludCBsb3cxLCBpbnQgaGlnaDEsDQorCQlpbnQgbG93MiwgaW50IGhpZ2gyLA0KKwkJaW50IGxvdzMsIGludCBoaWdoMykNCit7DQorCUJpbmFyeUltYWdlICpyZXN1bHQgPSBuZXcgQmluYXJ5SW1hZ2UoKTsNCisJUmFuZ2UgcmFuZ2UxID0ge2xvdzEsIGhpZ2gxfSwNCisJCXJhbmdlMiA9IHtsb3cyLCBoaWdoMn0sDQorCQlyYW5nZTMgPSB7bG93MywgaGlnaDN9Ow0KKwkNCisJaW50IHN1Y2Nlc3MgPSBpbWFxQ29sb3JUaHJlc2hvbGQocmVzdWx0LT5HZXRJbWFxSW1hZ2UoKSwgbV9pbWFxSW1hZ2UsIDEsIGNvbG9yTW9kZSwgJnJhbmdlMSwgJnJhbmdlMiwgJnJhbmdlMyk7DQorCXdwaV9zZXRJbWFxRXJyb3JXaXRoQ29udGV4dChzdWNjZXNzLCAiSW1hcVRocmVzaG9sZCBlcnJvciIpOw0KKwlyZXR1cm4gcmVzdWx0Ow0KK30NCisNCisvKioNCisgKiBQZXJmb3JtIGEgdGhyZXNob2xkIGluIFJHQiBzcGFjZS4NCisgKiBAcGFyYW0gcmVkTG93IFJlZCBsb3cgdmFsdWUNCisgKiBAcGFyYW0gcmVkSGlnaCBSZWQgaGlnaCB2YWx1ZQ0KKyAqIEBwYXJhbSBncmVlbkxvdyBHcmVlbiBsb3cgdmFsdWUNCisgKiBAcGFyYW0gZ3JlZW5IaWdoIEdyZWVuIGhpZ2ggdmFsdWUNCisgKiBAcGFyYW0gYmx1ZUxvdyBCbHVlIGxvdyB2YWx1ZQ0KKyAqIEBwYXJhbSBibHVlSGlnaCBCbHVlIGhpZ2ggdmFsdWUNCisgKiBAcmV0dXJucyBBIHBvaW50ZXIgdG8gYSBCaW5hcnlJbWFnZSB0aGF0IHJlcHJlc2VudHMgdGhlIHJlc3VsdCBvZiB0aGUgdGhyZXNob2xkIG9wZXJhdGlvbi4NCisgKi8NCitCaW5hcnlJbWFnZSAqQ29sb3JJbWFnZTo6VGhyZXNob2xkUkdCKGludCByZWRMb3csIGludCByZWRIaWdoLCBpbnQgZ3JlZW5Mb3csIGludCBncmVlbkhpZ2gsIGludCBibHVlTG93LCBpbnQgYmx1ZUhpZ2gpDQorew0KKwlyZXR1cm4gQ29tcHV0ZVRocmVzaG9sZChJTUFRX1JHQiwgcmVkTG93LCByZWRIaWdoLCBncmVlbkxvdywgZ3JlZW5IaWdoLCBibHVlTG93LCBibHVlSGlnaCk7DQorfQ0KKw0KKy8qKg0KKyAqIFBlcmZvcm0gYSB0aHJlc2hvbGQgaW4gUkdCIHNwYWNlLg0KKyAqIEBwYXJhbSB0aHJlc2hvbGQgYSByZWZlcmVuY2UgdG8gdGhlIFRocmVzaG9sZCBvYmplY3QgdG8gdXNlLg0KKyAqIEByZXR1cm5zIEEgcG9pbnRlciB0byBhIEJpbmFyeUltYWdlIHRoYXQgcmVwcmVzZW50cyB0aGUgcmVzdWx0IG9mIHRoZSB0aHJlc2hvbGQgb3BlcmF0aW9uLg0KKyAqLw0KK0JpbmFyeUltYWdlICpDb2xvckltYWdlOjpUaHJlc2hvbGRSR0IoVGhyZXNob2xkICZ0KQ0KK3sNCisJcmV0dXJuIENvbXB1dGVUaHJlc2hvbGQoSU1BUV9SR0IsIHQucGxhbmUxTG93LCB0LnBsYW5lMUhpZ2gsDQorCQkJCQkJCQl0LnBsYW5lMkxvdywgdC5wbGFuZTJIaWdoLA0KKwkJCQkJCQkJdC5wbGFuZTNMb3csIHQucGxhbmUzSGlnaCk7DQorfQ0KKw0KKy8qKg0KKyAqIFBlcmZvcm0gYSB0aHJlc2hvbGQgaW4gSFNMIHNwYWNlLg0KKyAqIEBwYXJhbSBodWVMb3cgTG93IHZhbHVlIGZvciBodWUNCisgKiBAcGFyYW0gaHVlSGlnaCBIaWdoIHZhbHVlIGZvciBodWUNCisgKiBAcGFyYW0gc2F0dXJhdGlvbkxvdyBMb3cgdmFsdWUgZm9yIHNhdHVyYXRpb24NCisgKiBAcGFyYW0gc2F0dXJhdGlvbkhpZ2ggSGlnaCB2YWx1ZSBmb3Igc2F0dXJhdGlvbg0KKyAqIEBwYXJhbSBsdW1pbmVuY2VMb3cgTG93IHZhbHVlIGZvciBsdW1pbmVuY2UNCisgKiBAcGFyYW0gbHVtaW5lbmNlSGlnaCBIaWdoIHZhbHVlIGZvciBsdW1pbmVuY2UNCisgKiBAcmV0dXJucyBhIHBvaW50ZXIgdG8gYSBCaW5hcnlJbWFnZSB0aGF0IHJlcHJlc2VudHMgdGhlIHJlc3VsdCBvZiB0aGUgdGhyZXNob2xkIG9wZXJhdGlvbi4NCisgKi8NCitCaW5hcnlJbWFnZSAqQ29sb3JJbWFnZTo6VGhyZXNob2xkSFNMKGludCBodWVMb3csIGludCBodWVIaWdoLCBpbnQgc2F0dXJhdGlvbkxvdywgaW50IHNhdHVyYXRpb25IaWdoLCBpbnQgbHVtaW5lbmNlTG93LCBpbnQgbHVtaW5lbmNlSGlnaCkNCit7DQorCXJldHVybiBDb21wdXRlVGhyZXNob2xkKElNQVFfSFNMLCBodWVMb3csIGh1ZUhpZ2gsIHNhdHVyYXRpb25Mb3csIHNhdHVyYXRpb25IaWdoLCBsdW1pbmVuY2VMb3csIGx1bWluZW5jZUhpZ2gpOw0KK30NCisNCisvKioNCisgKiBQZXJmb3JtIGEgdGhyZXNob2xkIGluIEhTTCBzcGFjZS4NCisgKiBAcGFyYW0gdGhyZXNob2xkIGEgcmVmZXJlbmNlIHRvIHRoZSBUaHJlc2hvbGQgb2JqZWN0IHRvIHVzZS4NCisgKiBAcmV0dXJucyBBIHBvaW50ZXIgdG8gYSBCaW5hcnlJbWFnZSB0aGF0IHJlcHJlc2VudHMgdGhlIHJlc3VsdCBvZiB0aGUgdGhyZXNob2xkIG9wZXJhdGlvbi4NCisgKi8NCitCaW5hcnlJbWFnZSAqQ29sb3JJbWFnZTo6VGhyZXNob2xkSFNMKFRocmVzaG9sZCAmdCkNCit7DQorCXJldHVybiBDb21wdXRlVGhyZXNob2xkKElNQVFfSFNMLCB0LnBsYW5lMUxvdywgdC5wbGFuZTFIaWdoLA0KKwkJCQkJCQkJdC5wbGFuZTJMb3csIHQucGxhbmUySGlnaCwNCisJCQkJCQkJCXQucGxhbmUzTG93LCB0LnBsYW5lM0hpZ2gpOw0KK30NCisNCisvKioNCisgKiBQZXJmb3JtIGEgdGhyZXNob2xkIGluIEhTViBzcGFjZS4NCisgKiBAcGFyYW0gaHVlTG93IExvdyB2YWx1ZSBmb3IgaHVlDQorICogQHBhcmFtIGh1ZUhpZ2ggSGlnaCB2YWx1ZSBmb3IgaHVlDQorICogQHBhcmFtIHNhdHVyYXRpb25Mb3cgTG93IHZhbHVlIGZvciBzYXR1cmF0aW9uDQorICogQHBhcmFtIHNhdHVyYXRpb25IaWdoIEhpZ2ggdmFsdWUgZm9yIHNhdHVyYXRpb24NCisgKiBAcGFyYW0gdmFsdWVMb3cgTG93IHZhbHVlDQorICogQHBhcmFtIHZhbHVlSGlnaCBIaWdoIHZhbHVlDQorICogQHJldHVybnMgYSBwb2ludGVyIHRvIGEgQmluYXJ5SW1hZ2UgdGhhdCByZXByZXNlbnRzIHRoZSByZXN1bHQgb2YgdGhlIHRocmVzaG9sZCBvcGVyYXRpb24uDQorICovDQorQmluYXJ5SW1hZ2UgKkNvbG9ySW1hZ2U6OlRocmVzaG9sZEhTVihpbnQgaHVlTG93LCBpbnQgaHVlSGlnaCwgaW50IHNhdHVyYXRpb25Mb3csIGludCBzYXR1cmF0aW9uSGlnaCwgaW50IHZhbHVlTG93LCBpbnQgdmFsdWVIaWdoKQ0KK3sNCisJcmV0dXJuIENvbXB1dGVUaHJlc2hvbGQoSU1BUV9IU1YsIGh1ZUxvdywgaHVlSGlnaCwgc2F0dXJhdGlvbkxvdywgc2F0dXJhdGlvbkhpZ2gsIHZhbHVlTG93LCB2YWx1ZUhpZ2gpOw0KK30NCisNCisvKioNCisgKiBQZXJmb3JtIGEgdGhyZXNob2xkIGluIEhTViBzcGFjZS4NCisgKiBAcGFyYW0gdGhyZXNob2xkIGEgcmVmZXJlbmNlIHRvIHRoZSBUaHJlc2hvbGQgb2JqZWN0IHRvIHVzZS4NCisgKiBAcmV0dXJucyBBIHBvaW50ZXIgdG8gYSBCaW5hcnlJbWFnZSB0aGF0IHJlcHJlc2VudHMgdGhlIHJlc3VsdCBvZiB0aGUgdGhyZXNob2xkIG9wZXJhdGlvbi4NCisgKi8NCitCaW5hcnlJbWFnZSAqQ29sb3JJbWFnZTo6VGhyZXNob2xkSFNWKFRocmVzaG9sZCAmdCkNCit7DQorCXJldHVybiBDb21wdXRlVGhyZXNob2xkKElNQVFfSFNWLCB0LnBsYW5lMUxvdywgdC5wbGFuZTFIaWdoLA0KKwkJCQkJCQkJdC5wbGFuZTJMb3csIHQucGxhbmUySGlnaCwNCisJCQkJCQkJCXQucGxhbmUzTG93LCB0LnBsYW5lM0hpZ2gpOw0KK30NCisNCisvKioNCisgKiBQZXJmb3JtIGEgdGhyZXNob2xkIGluIEhTSSBzcGFjZS4NCisgKiBAcGFyYW0gaHVlTG93IExvdyB2YWx1ZSBmb3IgaHVlDQorICogQHBhcmFtIGh1ZUhpZ2ggSGlnaCB2YWx1ZSBmb3IgaHVlDQorICogQHBhcmFtIHNhdHVyYXRpb25Mb3cgTG93IHZhbHVlIGZvciBzYXR1cmF0aW9uDQorICogQHBhcmFtIHNhdHVyYXRpb25IaWdoIEhpZ2ggdmFsdWUgZm9yIHNhdHVyYXRpb24NCisgKiBAcGFyYW0gdmFsdWVMb3cgTG93IGludGVuc2l0eQ0KKyAqIEBwYXJhbSB2YWx1ZUhpZ2ggSGlnaCBpbnRlbnNpdHkNCisgKiBAcmV0dXJucyBhIHBvaW50ZXIgdG8gYSBCaW5hcnlJbWFnZSB0aGF0IHJlcHJlc2VudHMgdGhlIHJlc3VsdCBvZiB0aGUgdGhyZXNob2xkIG9wZXJhdGlvbi4NCisgKi8NCitCaW5hcnlJbWFnZSAqQ29sb3JJbWFnZTo6VGhyZXNob2xkSFNJKGludCBodWVMb3csIGludCBodWVIaWdoLCBpbnQgc2F0dXJhdGlvbkxvdywgaW50IHNhdHVyYXRpb25IaWdoLCBpbnQgaW50ZW5zaXR5TG93LCBpbnQgaW50ZW5zaXR5SGlnaCkNCit7DQorCXJldHVybiBDb21wdXRlVGhyZXNob2xkKElNQVFfSFNJLCBodWVMb3csIGh1ZUhpZ2gsIHNhdHVyYXRpb25Mb3csIHNhdHVyYXRpb25IaWdoLCBpbnRlbnNpdHlMb3csIGludGVuc2l0eUhpZ2gpOw0KK30NCisNCisvKioNCisgKiBQZXJmb3JtIGEgdGhyZXNob2xkIGluIEhTSSBzcGFjZS4NCisgKiBAcGFyYW0gdGhyZXNob2xkIGEgcmVmZXJlbmNlIHRvIHRoZSBUaHJlc2hvbGQgb2JqZWN0IHRvIHVzZS4NCisgKiBAcmV0dXJucyBBIHBvaW50ZXIgdG8gYSBCaW5hcnlJbWFnZSB0aGF0IHJlcHJlc2VudHMgdGhlIHJlc3VsdCBvZiB0aGUgdGhyZXNob2xkIG9wZXJhdGlvbi4NCisgKi8NCitCaW5hcnlJbWFnZSAqQ29sb3JJbWFnZTo6VGhyZXNob2xkSFNJKFRocmVzaG9sZCAmdCkNCit7DQorCXJldHVybiBDb21wdXRlVGhyZXNob2xkKElNQVFfSFNJLCB0LnBsYW5lMUxvdywgdC5wbGFuZTFIaWdoLA0KKwkJCQkJCQkJdC5wbGFuZTJMb3csIHQucGxhbmUySGlnaCwNCisJCQkJCQkJCXQucGxhbmUzTG93LCB0LnBsYW5lM0hpZ2gpOw0KK30NCisNCisvKioNCisgKiBFeHRyYWN0IGEgY29sb3IgcGxhbmUgZnJvbSB0aGUgaW1hZ2UNCisgKiBAcGFyYW0gbW9kZSBUaGUgQ29sb3JNb2RlIHRvIHVzZSBmb3IgdGhlIHBsYW5lIGV4dHJhY3Rpb24NCisgKiBAcGFyYW0gcGxhbmVOdW1iZXIgV2hpY2ggcGxhbmUgaXMgdG8gYmUgZXh0cmFjdGVkDQorICogQHJldHVybnMgQSBwb2ludGVyIHRvIGEgTW9ub0ltYWdlIHRoYXQgcmVwcmVzZW50cyB0aGUgZXh0cmFjdGVkIHBsYW5lLg0KKyAqLw0KK01vbm9JbWFnZSAqQ29sb3JJbWFnZTo6RXh0cmFjdENvbG9yUGxhbmUoQ29sb3JNb2RlIG1vZGUsIGludCBwbGFuZU51bWJlcikNCit7DQorCU1vbm9JbWFnZSAqcmVzdWx0ID0gbmV3IE1vbm9JbWFnZSgpOw0KKwlpZiAobV9pbWFxSW1hZ2UgPT0gTlVMTCkNCisJCXdwaV9zZXRXUElFcnJvcihOdWxsUGFyYW1ldGVyKTsNCisJaW50IHN1Y2Nlc3MgPSBpbWFxRXh0cmFjdENvbG9yUGxhbmVzKG1faW1hcUltYWdlLCANCisJCQkJCQkJCQkJIG1vZGUsIA0KKwkJCQkJCQkJCQkgKHBsYW5lTnVtYmVyID09IDEpID8gcmVzdWx0LT5HZXRJbWFxSW1hZ2UoKSA6IE5VTEwsIA0KKwkJCQkJCQkJCQkgKHBsYW5lTnVtYmVyID09IDIpID8gcmVzdWx0LT5HZXRJbWFxSW1hZ2UoKSA6IE5VTEwsIA0KKwkJCQkJCQkJCQkgKHBsYW5lTnVtYmVyID09IDMpID8gcmVzdWx0LT5HZXRJbWFxSW1hZ2UoKSA6IE5VTEwpOw0KKwl3cGlfc2V0SW1hcUVycm9yV2l0aENvbnRleHQoc3VjY2VzcywgIkltYXEgRXh0cmFjdENvbG9yUGxhbmVzIGZhaWxlZCIpOw0KKwlyZXR1cm4gcmVzdWx0Ow0KK30NCisNCisvKg0KKyAqIEV4dHJhY3QgdGhlIGZpcnN0IGNvbG9yIHBsYW5lIGZvciBhbiBpbWFnZS4NCisgKiBAcGFyYW0gbW9kZSBUaGUgY29sb3IgbW9kZSBpbiB3aGljaCB0byBvcGVyYXRlDQorICogQHJldHVybnMgYSBwb2ludGVyIHRvIGEgTW9ub0ltYWdlIHRoYXQgaXMgdGhlIGV4dHJhY3RlZCBwbGFuZS4NCisgKi8NCitNb25vSW1hZ2UgKkNvbG9ySW1hZ2U6OkV4dHJhY3RGaXJzdENvbG9yUGxhbmUoQ29sb3JNb2RlIG1vZGUpDQorew0KKwlyZXR1cm4gRXh0cmFjdENvbG9yUGxhbmUobW9kZSwgMSk7DQorfQ0KKw0KKy8qDQorICogRXh0cmFjdCB0aGUgc2Vjb25kIGNvbG9yIHBsYW5lIGZvciBhbiBpbWFnZS4NCisgKiBAcGFyYW0gbW9kZSBUaGUgY29sb3IgbW9kZSBpbiB3aGljaCB0byBvcGVyYXRlDQorICogQHJldHVybnMgYSBwb2ludGVyIHRvIGEgTW9ub0ltYWdlIHRoYXQgaXMgdGhlIGV4dHJhY3RlZCBwbGFuZS4NCisgKi8NCitNb25vSW1hZ2UgKkNvbG9ySW1hZ2U6OkV4dHJhY3RTZWNvbmRDb2xvclBsYW5lKENvbG9yTW9kZSBtb2RlKQ0KK3sNCisJcmV0dXJuIEV4dHJhY3RDb2xvclBsYW5lKG1vZGUsIDIpOw0KK30NCisNCisvKg0KKyAqIEV4dHJhY3QgdGhlIHRoaXJkIGNvbG9yIHBsYW5lIGZvciBhbiBpbWFnZS4NCisgKiBAcGFyYW0gbW9kZSBUaGUgY29sb3IgbW9kZSBpbiB3aGljaCB0byBvcGVyYXRlDQorICogQHJldHVybnMgYSBwb2ludGVyIHRvIGEgTW9ub0ltYWdlIHRoYXQgaXMgdGhlIGV4dHJhY3RlZCBwbGFuZS4NCisgKi8NCitNb25vSW1hZ2UgKkNvbG9ySW1hZ2U6OkV4dHJhY3RUaGlyZENvbG9yUGxhbmUoQ29sb3JNb2RlIG1vZGUpDQorew0KKwlyZXR1cm4gRXh0cmFjdENvbG9yUGxhbmUobW9kZSwgMyk7DQorfQ0KKw0KKy8qDQorICogRXh0cmFjdCB0aGUgcmVkIHBsYW5lIGZyb20gYW4gUkdCIGltYWdlLg0KKyAqIEByZXR1cm5zIGEgcG9pbnRlciB0byBhIE1vbm9JbWFnZSB0aGF0IGlzIHRoZSBleHRyYWNlZCBwbGFuZS4NCisgKi8NCitNb25vSW1hZ2UgKkNvbG9ySW1hZ2U6OkdldFJlZFBsYW5lKCkNCit7DQorCXJldHVybiBFeHRyYWN0Rmlyc3RDb2xvclBsYW5lKElNQVFfUkdCKTsNCit9DQorDQorLyoNCisgKiBFeHRyYWN0IHRoZSBncmVlbiBwbGFuZSBmcm9tIGFuIFJHQiBpbWFnZS4NCisgKiBAcmV0dXJucyBhIHBvaW50ZXIgdG8gYSBNb25vSW1hZ2UgdGhhdCBpcyB0aGUgZXh0cmFjZWQgcGxhbmUuDQorICovDQorTW9ub0ltYWdlICpDb2xvckltYWdlOjpHZXRHcmVlblBsYW5lKCkNCit7DQorICAgIHJldHVybiBFeHRyYWN0U2Vjb25kQ29sb3JQbGFuZShJTUFRX1JHQik7DQorfQ0KKw0KKy8qDQorICogRXh0cmFjdCB0aGUgYmx1ZSBwbGFuZSBmcm9tIGFuIFJHQiBpbWFnZS4NCisgKiBAcmV0dXJucyBhIHBvaW50ZXIgdG8gYSBNb25vSW1hZ2UgdGhhdCBpcyB0aGUgZXh0cmFjZWQgcGxhbmUuDQorICovDQorTW9ub0ltYWdlICpDb2xvckltYWdlOjpHZXRCbHVlUGxhbmUoKQ0KK3sNCisgICAgcmV0dXJuIEV4dHJhY3RUaGlyZENvbG9yUGxhbmUoSU1BUV9SR0IpOw0KK30NCisNCisvKg0KKyAqIEV4dHJhY3QgdGhlIEh1ZSBwbGFuZSBmcm9tIGFuIEhTTCBpbWFnZS4NCisgKiBAcmV0dXJucyBhIHBvaW50ZXIgdG8gYSBNb25vSW1hZ2UgdGhhdCBpcyB0aGUgZXh0cmFjZWQgcGxhbmUuDQorICovDQorTW9ub0ltYWdlICpDb2xvckltYWdlOjpHZXRIU0xIdWVQbGFuZSgpDQorew0KKwlyZXR1cm4gRXh0cmFjdEZpcnN0Q29sb3JQbGFuZShJTUFRX0hTTCk7DQorfQ0KKw0KKy8qDQorICogRXh0cmFjdCB0aGUgSHVlIHBsYW5lIGZyb20gYW4gSFNWIGltYWdlLg0KKyAqIEByZXR1cm5zIGEgcG9pbnRlciB0byBhIE1vbm9JbWFnZSB0aGF0IGlzIHRoZSBleHRyYWNlZCBwbGFuZS4NCisgKi8NCitNb25vSW1hZ2UgKkNvbG9ySW1hZ2U6OkdldEhTVkh1ZVBsYW5lKCkNCit7DQorCXJldHVybiBFeHRyYWN0Rmlyc3RDb2xvclBsYW5lKElNQVFfSFNWKTsNCit9DQorDQorLyoNCisgKiBFeHRyYWN0IHRoZSBIdWUgcGxhbmUgZnJvbSBhbiBIU0kgaW1hZ2UuDQorICogQHJldHVybnMgYSBwb2ludGVyIHRvIGEgTW9ub0ltYWdlIHRoYXQgaXMgdGhlIGV4dHJhY2VkIHBsYW5lLg0KKyAqLw0KK01vbm9JbWFnZSAqQ29sb3JJbWFnZTo6R2V0SFNJSHVlUGxhbmUoKQ0KK3sNCisJcmV0dXJuIEV4dHJhY3RGaXJzdENvbG9yUGxhbmUoSU1BUV9IU0kpOw0KK30NCisNCisvKg0KKyAqIEV4dHJhY3QgdGhlIEx1bWluYW5jZSBwbGFuZSBmcm9tIGFuIEhTTCBpbWFnZS4NCisgKiBAcmV0dXJucyBhIHBvaW50ZXIgdG8gYSBNb25vSW1hZ2UgdGhhdCBpcyB0aGUgZXh0cmFjZWQgcGxhbmUuDQorICovDQorTW9ub0ltYWdlICpDb2xvckltYWdlOjpHZXRMdW1pbmFuY2VQbGFuZSgpDQorew0KKwlyZXR1cm4gRXh0cmFjdFRoaXJkQ29sb3JQbGFuZShJTUFRX0hTTCk7DQorfQ0KKw0KKy8qDQorICogRXh0cmFjdCB0aGUgVmFsdWUgcGxhbmUgZnJvbSBhbiBIU1YgaW1hZ2UuDQorICogQHJldHVybnMgYSBwb2ludGVyIHRvIGEgTW9ub0ltYWdlIHRoYXQgaXMgdGhlIGV4dHJhY2VkIHBsYW5lLg0KKyAqLw0KK01vbm9JbWFnZSAqQ29sb3JJbWFnZTo6R2V0VmFsdWVQbGFuZSgpDQorew0KKwlyZXR1cm4gRXh0cmFjdFRoaXJkQ29sb3JQbGFuZShJTUFRX0hTVik7DQorfQ0KKw0KKy8qDQorICogRXh0cmFjdCB0aGUgSW50ZW5zaXR5IHBsYW5lIGZyb20gYW4gSFNJIGltYWdlLg0KKyAqIEByZXR1cm5zIGEgcG9pbnRlciB0byBhIE1vbm9JbWFnZSB0aGF0IGlzIHRoZSBleHRyYWNlZCBwbGFuZS4NCisgKi8NCitNb25vSW1hZ2UgKkNvbG9ySW1hZ2U6OkdldEludGVuc2l0eVBsYW5lKCkNCit7DQorCXJldHVybiBFeHRyYWN0VGhpcmRDb2xvclBsYW5lKElNQVFfSFNJKTsNCit9DQorDQorLyoqDQorICogUmVwbGFjZSBhIHBsYW5lIGluIHRoZSBDb2xvckltYWdlIHdpdGggYSBNb25vSW1hZ2UNCisgKiBSZXBsYWNlcyBhIHNpbmdsZSBwbGFuZSBpbiB0aGUgaW1hZ2Ugd2l0aCBhIE1vbm9JbWFnZQ0KKyAqIEBwYXJhbSBtb2RlIFRoZSBDb2xvck1vZGUgaW4gd2hpY2ggdG8gb3BlcmF0ZQ0KKyAqIEBwYXJhbSBwbGFuZSBUaGUgcG9pbnRlciB0byB0aGUgcmVwbGFjZW1lbnQgcGxhbmUgYXMgYSBNb25vSW1hZ2UNCisgKiBAcGFyYW0gcGxhbmVOdW1iZXIgVGhlIHBsYW5lIG51bWJlciAoMSwgMiwgMykgdG8gcmVwbGFjZQ0KKyAqLw0KK3ZvaWQgQ29sb3JJbWFnZTo6UmVwbGFjZVBsYW5lKENvbG9yTW9kZSBtb2RlLCBNb25vSW1hZ2UgKnBsYW5lLCBpbnQgcGxhbmVOdW1iZXIpIHsNCisJaW50IHN1Y2Nlc3MgPSBpbWFxUmVwbGFjZUNvbG9yUGxhbmVzKG1faW1hcUltYWdlLCANCisJCQkJCQkJCQkJIChjb25zdCBJbWFnZSopIG1faW1hcUltYWdlLCANCisJCQkJCQkJCQkgICAgIG1vZGUsIA0KKwkJCQkJCQkJCSAgICAgKHBsYW5lTnVtYmVyID09IDEpID8gcGxhbmUtPkdldEltYXFJbWFnZSgpIDogTlVMTCwgDQorCQkJCQkJCQkJICAgICAocGxhbmVOdW1iZXIgPT0gMikgPyBwbGFuZS0+R2V0SW1hcUltYWdlKCkgOiBOVUxMLCANCisJCQkJCQkJCQkgICAgIChwbGFuZU51bWJlciA9PSAzKSA/IHBsYW5lLT5HZXRJbWFxSW1hZ2UoKSA6IE5VTEwpOw0KKwl3cGlfc2V0SW1hcUVycm9yV2l0aENvbnRleHQoc3VjY2VzcywgIkltYXEgUmVwbGFjZUNvbG9yUGxhbmVzIGZhaWxlZCIpOw0KK30NCisNCisvKioNCisgKiBSZXBsYWNlIHRoZSBmaXJzdCBjb2xvciBwbGFuZSB3aXRoIGEgTW9ub0ltYWdlLg0KKyAqIEBwYXJhbSBtb2RlIFRoZSBjb2xvciBtb2RlIGluIHdoaWNoIHRvIG9wZXJhdGUuDQorICogQHBhcmFtIHBsYW5lIEEgcG9pbnRlciB0byBhIE1vbm9JbWFnZSB0aGF0IHdpbGwgcmVwbGFjZSB0aGUgc3BlY2lmaWVkIGNvbG9yIHBsYW5lLg0KKyAqLw0KK3ZvaWQgQ29sb3JJbWFnZTo6UmVwbGFjZUZpcnN0Q29sb3JQbGFuZShDb2xvck1vZGUgbW9kZSwgTW9ub0ltYWdlICpwbGFuZSkNCit7DQorCVJlcGxhY2VQbGFuZShtb2RlLCBwbGFuZSwgMSk7DQorfQ0KKw0KKy8qKg0KKyAqIFJlcGxhY2UgdGhlIHNlY29uZCBjb2xvciBwbGFuZSB3aXRoIGEgTW9ub0ltYWdlLg0KKyAqIEBwYXJhbSBtb2RlIFRoZSBjb2xvciBtb2RlIGluIHdoaWNoIHRvIG9wZXJhdGUuDQorICogQHBhcmFtIHBsYW5lIEEgcG9pbnRlciB0byBhIE1vbm9JbWFnZSB0aGF0IHdpbGwgcmVwbGFjZSB0aGUgc3BlY2lmaWVkIGNvbG9yIHBsYW5lLg0KKyAqLw0KK3ZvaWQgQ29sb3JJbWFnZTo6UmVwbGFjZVNlY29uZENvbG9yUGxhbmUoQ29sb3JNb2RlIG1vZGUsIE1vbm9JbWFnZSAqcGxhbmUpDQorew0KKwlSZXBsYWNlUGxhbmUobW9kZSwgcGxhbmUsIDIpOw0KK30NCisNCisvKioNCisgKiBSZXBsYWNlIHRoZSB0aGlyZCBjb2xvciBwbGFuZSB3aXRoIGEgTW9ub0ltYWdlLg0KKyAqIEBwYXJhbSBtb2RlIFRoZSBjb2xvciBtb2RlIGluIHdoaWNoIHRvIG9wZXJhdGUuDQorICogQHBhcmFtIHBsYW5lIEEgcG9pbnRlciB0byBhIE1vbm9JbWFnZSB0aGF0IHdpbGwgcmVwbGFjZSB0aGUgc3BlY2lmaWVkIGNvbG9yIHBsYW5lLg0KKyAqLw0KK3ZvaWQgQ29sb3JJbWFnZTo6UmVwbGFjZVRoaXJkQ29sb3JQbGFuZShDb2xvck1vZGUgbW9kZSwgTW9ub0ltYWdlICpwbGFuZSkNCit7IA0KKwlSZXBsYWNlUGxhbmUobW9kZSwgcGxhbmUsIDMpOw0KK30NCisNCisvKioNCisgKiBSZXBsYWNlIHRoZSByZWQgY29sb3IgcGxhbmUgd2l0aCBhIE1vbm9JbWFnZS4NCisgKiBAcGFyYW0gbW9kZSBUaGUgY29sb3IgbW9kZSBpbiB3aGljaCB0byBvcGVyYXRlLg0KKyAqIEBwYXJhbSBwbGFuZSBBIHBvaW50ZXIgdG8gYSBNb25vSW1hZ2UgdGhhdCB3aWxsIHJlcGxhY2UgdGhlIHNwZWNpZmllZCBjb2xvciBwbGFuZS4NCisgKi8NCit2b2lkIENvbG9ySW1hZ2U6OlJlcGxhY2VSZWRQbGFuZShNb25vSW1hZ2UgKnBsYW5lKQ0KK3sNCisJUmVwbGFjZUZpcnN0Q29sb3JQbGFuZShJTUFRX1JHQiwgcGxhbmUpOw0KK30NCisNCisvKioNCisgKiBSZXBsYWNlIHRoZSBncmVlbiBjb2xvciBwbGFuZSB3aXRoIGEgTW9ub0ltYWdlLg0KKyAqIEBwYXJhbSBtb2RlIFRoZSBjb2xvciBtb2RlIGluIHdoaWNoIHRvIG9wZXJhdGUuDQorICogQHBhcmFtIHBsYW5lIEEgcG9pbnRlciB0byBhIE1vbm9JbWFnZSB0aGF0IHdpbGwgcmVwbGFjZSB0aGUgc3BlY2lmaWVkIGNvbG9yIHBsYW5lLg0KKyAqLw0KK3ZvaWQgQ29sb3JJbWFnZTo6UmVwbGFjZUdyZWVuUGxhbmUoTW9ub0ltYWdlICpwbGFuZSkNCit7DQorCVJlcGxhY2VTZWNvbmRDb2xvclBsYW5lKElNQVFfUkdCLCBwbGFuZSk7DQorfQ0KKw0KKy8qKg0KKyAqIFJlcGxhY2UgdGhlIGJsdWUgY29sb3IgcGxhbmUgd2l0aCBhIE1vbm9JbWFnZS4NCisgKiBAcGFyYW0gbW9kZSBUaGUgY29sb3IgbW9kZSBpbiB3aGljaCB0byBvcGVyYXRlLg0KKyAqIEBwYXJhbSBwbGFuZSBBIHBvaW50ZXIgdG8gYSBNb25vSW1hZ2UgdGhhdCB3aWxsIHJlcGxhY2UgdGhlIHNwZWNpZmllZCBjb2xvciBwbGFuZS4NCisgKi8NCit2b2lkIENvbG9ySW1hZ2U6OlJlcGxhY2VCbHVlUGxhbmUoTW9ub0ltYWdlICpwbGFuZSkNCit7DQorCVJlcGxhY2VUaGlyZENvbG9yUGxhbmUoSU1BUV9SR0IsIHBsYW5lKTsNCit9DQorDQorDQorLyoqDQorICogUmVwbGFjZSB0aGUgSHVlIGNvbG9yIHBsYW5lIGluIGEgSFNMIGltYWdlIHdpdGggYSBNb25vSW1hZ2UuDQorICogQHBhcmFtIG1vZGUgVGhlIGNvbG9yIG1vZGUgaW4gd2hpY2ggdG8gb3BlcmF0ZS4NCisgKiBAcGFyYW0gcGxhbmUgQSBwb2ludGVyIHRvIGEgTW9ub0ltYWdlIHRoYXQgd2lsbCByZXBsYWNlIHRoZSBzcGVjaWZpZWQgY29sb3IgcGxhbmUuDQorICovDQordm9pZCBDb2xvckltYWdlOjpSZXBsYWNlSFNMSHVlUGxhbmUoTW9ub0ltYWdlICpwbGFuZSkNCit7DQorCXJldHVybiBSZXBsYWNlRmlyc3RDb2xvclBsYW5lKElNQVFfSFNMLCBwbGFuZSk7DQorfQ0KKw0KKy8qKg0KKyAqIFJlcGxhY2UgdGhlIEh1ZSBjb2xvciBwbGFuZSBpbiBhIEhTViBpbWFnZSB3aXRoIGEgTW9ub0ltYWdlLg0KKyAqIEBwYXJhbSBtb2RlIFRoZSBjb2xvciBtb2RlIGluIHdoaWNoIHRvIG9wZXJhdGUuDQorICogQHBhcmFtIHBsYW5lIEEgcG9pbnRlciB0byBhIE1vbm9JbWFnZSB0aGF0IHdpbGwgcmVwbGFjZSB0aGUgc3BlY2lmaWVkIGNvbG9yIHBsYW5lLg0KKyAqLw0KK3ZvaWQgQ29sb3JJbWFnZTo6UmVwbGFjZUhTVkh1ZVBsYW5lKE1vbm9JbWFnZSAqcGxhbmUpDQorew0KKwlyZXR1cm4gUmVwbGFjZUZpcnN0Q29sb3JQbGFuZShJTUFRX0hTViwgcGxhbmUpOw0KK30NCisNCisvKioNCisgKiBSZXBsYWNlIHRoZSBmaXJzdCBIdWUgcGxhbmUgaW4gYSBIU0kgaW1hZ2Ugd2l0aCBhIE1vbm9JbWFnZS4NCisgKiBAcGFyYW0gbW9kZSBUaGUgY29sb3IgbW9kZSBpbiB3aGljaCB0byBvcGVyYXRlLg0KKyAqIEBwYXJhbSBwbGFuZSBBIHBvaW50ZXIgdG8gYSBNb25vSW1hZ2UgdGhhdCB3aWxsIHJlcGxhY2UgdGhlIHNwZWNpZmllZCBjb2xvciBwbGFuZS4NCisgKi8NCit2b2lkIENvbG9ySW1hZ2U6OlJlcGxhY2VIU0lIdWVQbGFuZShNb25vSW1hZ2UgKnBsYW5lKQ0KK3sNCisJcmV0dXJuIFJlcGxhY2VGaXJzdENvbG9yUGxhbmUoSU1BUV9IU0ksIHBsYW5lKTsNCit9DQorDQorLyoqDQorICogUmVwbGFjZSB0aGUgU2F0dXJhdGlvbiBjb2xvciBwbGFuZSBpbiBhbiBIU0wgaW1hZ2Ugd2l0aCBhIE1vbm9JbWFnZS4NCisgKiBAcGFyYW0gbW9kZSBUaGUgY29sb3IgbW9kZSBpbiB3aGljaCB0byBvcGVyYXRlLg0KKyAqIEBwYXJhbSBwbGFuZSBBIHBvaW50ZXIgdG8gYSBNb25vSW1hZ2UgdGhhdCB3aWxsIHJlcGxhY2UgdGhlIHNwZWNpZmllZCBjb2xvciBwbGFuZS4NCisgKi8NCit2b2lkIENvbG9ySW1hZ2U6OlJlcGxhY2VIU0xTYXR1cmF0aW9uUGxhbmUoTW9ub0ltYWdlICpwbGFuZSkNCit7DQorCXJldHVybiBSZXBsYWNlU2Vjb25kQ29sb3JQbGFuZShJTUFRX0hTTCwgcGxhbmUpOw0KK30NCisNCisvKioNCisgKiBSZXBsYWNlIHRoZSBTYXR1cmF0aW9uIGNvbG9yIHBsYW5lIGluIGEgSFNWIGltYWdlIHdpdGggYSBNb25vSW1hZ2UuDQorICogQHBhcmFtIG1vZGUgVGhlIGNvbG9yIG1vZGUgaW4gd2hpY2ggdG8gb3BlcmF0ZS4NCisgKiBAcGFyYW0gcGxhbmUgQSBwb2ludGVyIHRvIGEgTW9ub0ltYWdlIHRoYXQgd2lsbCByZXBsYWNlIHRoZSBzcGVjaWZpZWQgY29sb3IgcGxhbmUuDQorICovDQordm9pZCBDb2xvckltYWdlOjpSZXBsYWNlSFNWU2F0dXJhdGlvblBsYW5lKE1vbm9JbWFnZSAqcGxhbmUpDQorew0KKwlyZXR1cm4gUmVwbGFjZVNlY29uZENvbG9yUGxhbmUoSU1BUV9IU1YsIHBsYW5lKTsNCit9DQorDQorLyoqDQorICogUmVwbGFjZSB0aGUgU2F0dXJhdGlvbiBjb2xvciBwbGFuZSBpbiBhIEhTSSBpbWFnZSB3aXRoIGEgTW9ub0ltYWdlLg0KKyAqIEBwYXJhbSBtb2RlIFRoZSBjb2xvciBtb2RlIGluIHdoaWNoIHRvIG9wZXJhdGUuDQorICogQHBhcmFtIHBsYW5lIEEgcG9pbnRlciB0byBhIE1vbm9JbWFnZSB0aGF0IHdpbGwgcmVwbGFjZSB0aGUgc3BlY2lmaWVkIGNvbG9yIHBsYW5lLg0KKyAqLw0KK3ZvaWQgQ29sb3JJbWFnZTo6UmVwbGFjZUhTSVNhdHVyYXRpb25QbGFuZShNb25vSW1hZ2UgKnBsYW5lKQ0KK3sNCisJcmV0dXJuIFJlcGxhY2VTZWNvbmRDb2xvclBsYW5lKElNQVFfSFNJLCBwbGFuZSk7DQorfQ0KKw0KKy8qKg0KKyAqIFJlcGxhY2UgdGhlIEx1bWluYW5jZSBjb2xvciBwbGFuZSBpbiBhbiBIU0wgaW1hZ2Ugd2l0aCBhIE1vbm9JbWFnZS4NCisgKiBAcGFyYW0gbW9kZSBUaGUgY29sb3IgbW9kZSBpbiB3aGljaCB0byBvcGVyYXRlLg0KKyAqIEBwYXJhbSBwbGFuZSBBIHBvaW50ZXIgdG8gYSBNb25vSW1hZ2UgdGhhdCB3aWxsIHJlcGxhY2UgdGhlIHNwZWNpZmllZCBjb2xvciBwbGFuZS4NCisgKi8NCit2b2lkIENvbG9ySW1hZ2U6OlJlcGxhY2VMdW1pbmFuY2VQbGFuZShNb25vSW1hZ2UgKnBsYW5lKQ0KK3sNCisJcmV0dXJuIFJlcGxhY2VUaGlyZENvbG9yUGxhbmUoSU1BUV9IU0wsIHBsYW5lKTsNCit9DQorDQorLyoqDQorICogUmVwbGFjZSB0aGUgVmFsdWUgY29sb3IgcGxhbmUgaW4gYW4gSFNWIHdpdGggYSBNb25vSW1hZ2UuDQorICogQHBhcmFtIG1vZGUgVGhlIGNvbG9yIG1vZGUgaW4gd2hpY2ggdG8gb3BlcmF0ZS4NCisgKiBAcGFyYW0gcGxhbmUgQSBwb2ludGVyIHRvIGEgTW9ub0ltYWdlIHRoYXQgd2lsbCByZXBsYWNlIHRoZSBzcGVjaWZpZWQgY29sb3IgcGxhbmUuDQorICovDQordm9pZCBDb2xvckltYWdlOjpSZXBsYWNlVmFsdWVQbGFuZShNb25vSW1hZ2UgKnBsYW5lKQ0KK3sNCisJcmV0dXJuIFJlcGxhY2VUaGlyZENvbG9yUGxhbmUoSU1BUV9IU1YsIHBsYW5lKTsNCit9DQorDQorLyoqDQorICogUmVwbGFjZSB0aGUgSW50ZW5zaXR5IGNvbG9yIHBsYW5lIGluIGEgSFNJIGltYWdlIHdpdGggYSBNb25vSW1hZ2UuDQorICogQHBhcmFtIG1vZGUgVGhlIGNvbG9yIG1vZGUgaW4gd2hpY2ggdG8gb3BlcmF0ZS4NCisgKiBAcGFyYW0gcGxhbmUgQSBwb2ludGVyIHRvIGEgTW9ub0ltYWdlIHRoYXQgd2lsbCByZXBsYWNlIHRoZSBzcGVjaWZpZWQgY29sb3IgcGxhbmUuDQorICovDQordm9pZCBDb2xvckltYWdlOjpSZXBsYWNlSW50ZW5zaXR5UGxhbmUoTW9ub0ltYWdlICpwbGFuZSkNCit7DQorCXJldHVybiBSZXBsYWNlVGhpcmRDb2xvclBsYW5lKElNQVFfSFNJLCBwbGFuZSk7DQorfQ0KKw0KKy8vVE9ETzogZnJjQ29sb3JFcXVhbGl6ZShJbWFnZSogZGVzdCwgY29uc3QgSW1hZ2UqIHNvdXJjZSwgaW50IGNvbG9yRXF1YWxpemF0aW9uKSBuZWVkcyB0byBiZSBtb2RpZmllZA0KKy8vVGhlIGNvbG9yRXF1YWxpemF0aW9uIHBhcmFtZXRlciBpcyBkaXNjYXJkZWQgYW5kIGlzIHNldCB0byBUUlVFIGluIHRoZSBjYWxsIHRvIGltYXFDb2xvckVxdWFsaXplLg0KK3ZvaWQgQ29sb3JJbWFnZTo6RXF1YWxpemUoYm9vbCBhbGxQbGFuZXMpDQorew0KKwkvLyBOb3RlIHRoYXQgdGhpcyBjYWxsIHVzZXMgTkktZGVmaW5lZCBUUlVFIGFuZCBGQUxTRQ0KKwlpbnQgc3VjY2VzcyA9IGltYXFDb2xvckVxdWFsaXplKG1faW1hcUltYWdlLCAoY29uc3QgSW1hZ2UqKSBtX2ltYXFJbWFnZSwgKGFsbFBsYW5lcykgPyBUUlVFIDogRkFMU0UpOw0KKwl3cGlfc2V0SW1hcUVycm9yV2l0aENvbnRleHQoc3VjY2VzcywgIkltYXEgQ29sb3JFcXVhbGl6ZSBlcnJvciIpOw0KK30NCisNCit2b2lkIENvbG9ySW1hZ2U6OkNvbG9yRXF1YWxpemUoKQ0KK3sNCisJRXF1YWxpemUodHJ1ZSk7DQorfQ0KKw0KK3ZvaWQgQ29sb3JJbWFnZTo6THVtaW5hbmNlRXF1YWxpemUoKQ0KK3sNCisJRXF1YWxpemUoZmFsc2UpOw0KK30NCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9WaXNpb24vQ29sb3JJbWFnZS5oIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvVmlzaW9uL0NvbG9ySW1hZ2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZWJmNzdlCi0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvVmlzaW9uL0NvbG9ySW1hZ2UuaApAQCAtMCwwICsxLDY4IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy8qIENvcHlyaWdodCAoYykgRklSU1QgMjAwOC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4JCQkJCQkJICAqLw0KKy8qIE9wZW4gU291cmNlIFNvZnR3YXJlIC0gbWF5IGJlIG1vZGlmaWVkIGFuZCBzaGFyZWQgYnkgRlJDIHRlYW1zLiBUaGUgY29kZSAgICovDQorLyogbXVzdCBiZSBhY2NvbXBhbmllZCBieSB0aGUgRklSU1QgQlNEIGxpY2Vuc2UgZmlsZSBpbiAkKFdJTkRfQkFTRSkvV1BJTGliLiAgKi8NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKyNpZm5kZWYgX19DT0xPUl9JTUFHRV9IX18NCisjZGVmaW5lIF9fQ09MT1JfSU1BR0VfSF9fDQorDQorI2luY2x1ZGUgIkltYWdlQmFzZS5oIg0KKyNpbmNsdWRlICJCaW5hcnlJbWFnZS5oIg0KKyNpbmNsdWRlICJUaHJlc2hvbGQuaCINCisNCitjbGFzcyBDb2xvckltYWdlIDogcHVibGljIEltYWdlQmFzZQ0KK3sNCitwdWJsaWM6DQorCUNvbG9ySW1hZ2UoSW1hZ2VUeXBlIHR5cGUpOw0KKwl2aXJ0dWFsIH5Db2xvckltYWdlKCk7DQorCUJpbmFyeUltYWdlICpUaHJlc2hvbGRSR0IoaW50IHJlZExvdywgaW50IHJlZEhpZ2gsIGludCBncmVlbkxvdywgaW50IGdyZWVuSGlnaCwgaW50IGJsdWVMb3csIGludCBibHVlSGlnaCk7DQorCUJpbmFyeUltYWdlICpUaHJlc2hvbGRIU0woaW50IGh1ZUxvdywgaW50IGh1ZUhpZ2gsIGludCBzYXR1cmF0aW9uTG93LCBpbnQgc2F0dXJhdGlvbkhpZ2gsIGludCBsdW1pbmVuY2VMb3csIGludCBsdW1pbmVuY2VIaWdoKTsNCisJQmluYXJ5SW1hZ2UgKlRocmVzaG9sZEhTVihpbnQgaHVlTG93LCBpbnQgaHVlSGlnaCwgaW50IHNhdHVyYXRpb25Mb3csIGludCBzYXR1cmF0aW9uSGlnaCwgaW50IHZhbHVlSGlnaCwgaW50IHZhbHVlTG93KTsNCisJQmluYXJ5SW1hZ2UgKlRocmVzaG9sZEhTSShpbnQgaHVlTG93LCBpbnQgaHVlSGlnaCwgaW50IHNhdHVyYXRpb25Mb3csIGludCBzYXR1cmF0aW9uSGlnaCwgaW50IGludGVuc2l0eUxvdywgaW50IGludGVuc2l0eUhpZ2gpOw0KKwlCaW5hcnlJbWFnZSAqVGhyZXNob2xkUkdCKFRocmVzaG9sZCAmdGhyZXNob2xkKTsNCisJQmluYXJ5SW1hZ2UgKlRocmVzaG9sZEhTTChUaHJlc2hvbGQgJnRocmVzaG9sZCk7DQorCUJpbmFyeUltYWdlICpUaHJlc2hvbGRIU1YoVGhyZXNob2xkICZ0aHJlc2hvbGQpOw0KKwlCaW5hcnlJbWFnZSAqVGhyZXNob2xkSFNJKFRocmVzaG9sZCAmdGhyZXNob2xkKTsNCisJTW9ub0ltYWdlICpHZXRSZWRQbGFuZSgpOw0KKwlNb25vSW1hZ2UgKkdldEdyZWVuUGxhbmUoKTsNCisJTW9ub0ltYWdlICpHZXRCbHVlUGxhbmUoKTsNCisJTW9ub0ltYWdlICpHZXRIU0xIdWVQbGFuZSgpOw0KKwlNb25vSW1hZ2UgKkdldEhTVkh1ZVBsYW5lKCk7DQorCU1vbm9JbWFnZSAqR2V0SFNJSHVlUGxhbmUoKTsNCisJTW9ub0ltYWdlICpHZXRIU0xTYXR1cmF0aW9uUGxhbmUoKTsNCisJTW9ub0ltYWdlICpHZXRIU1ZTYXR1cmF0aW9uUGxhbmUoKTsNCisJTW9ub0ltYWdlICpHZXRIU0lTYXR1cmF0aW9uUGxhbmUoKTsNCisJTW9ub0ltYWdlICpHZXRMdW1pbmFuY2VQbGFuZSgpOw0KKwlNb25vSW1hZ2UgKkdldFZhbHVlUGxhbmUoKTsNCisJTW9ub0ltYWdlICpHZXRJbnRlbnNpdHlQbGFuZSgpOw0KKwl2b2lkIFJlcGxhY2VSZWRQbGFuZShNb25vSW1hZ2UgKnBsYW5lKTsNCisJdm9pZCBSZXBsYWNlR3JlZW5QbGFuZShNb25vSW1hZ2UgKnBsYW5lKTsNCisJdm9pZCBSZXBsYWNlQmx1ZVBsYW5lKE1vbm9JbWFnZSAqcGxhbmUpOw0KKwl2b2lkIFJlcGxhY2VIU0xIdWVQbGFuZShNb25vSW1hZ2UgKnBsYW5lKTsNCisJdm9pZCBSZXBsYWNlSFNWSHVlUGxhbmUoTW9ub0ltYWdlICpwbGFuZSk7DQorCXZvaWQgUmVwbGFjZUhTSUh1ZVBsYW5lKE1vbm9JbWFnZSAqcGxhbmUpOw0KKwl2b2lkIFJlcGxhY2VIU0xTYXR1cmF0aW9uUGxhbmUoTW9ub0ltYWdlICpwbGFuZSk7DQorCXZvaWQgUmVwbGFjZUhTVlNhdHVyYXRpb25QbGFuZShNb25vSW1hZ2UgKnBsYW5lKTsNCisJdm9pZCBSZXBsYWNlSFNJU2F0dXJhdGlvblBsYW5lKE1vbm9JbWFnZSAqcGxhbmUpOw0KKwl2b2lkIFJlcGxhY2VMdW1pbmFuY2VQbGFuZShNb25vSW1hZ2UgKnBsYW5lKTsNCisJdm9pZCBSZXBsYWNlVmFsdWVQbGFuZShNb25vSW1hZ2UgKnBsYW5lKTsNCisJdm9pZCBSZXBsYWNlSW50ZW5zaXR5UGxhbmUoTW9ub0ltYWdlICpwbGFuZSk7DQorCXZvaWQgQ29sb3JFcXVhbGl6ZSgpOw0KKwl2b2lkIEx1bWluYW5jZUVxdWFsaXplKCk7DQorCQ0KK3ByaXZhdGU6DQorCUJpbmFyeUltYWdlICpDb21wdXRlVGhyZXNob2xkKENvbG9yTW9kZSBjb2xvck1vZGUsIGludCBsb3cxLCBpbnQgaGlnaDEsIGludCBsb3cyLCBpbnQgaGlnaDIsIGludCBsb3czLCBpbnQgaGlnaDMpOw0KKwl2b2lkIEVxdWFsaXplKGJvb2wgYWxsUGxhbmVzKTsNCisJTW9ub0ltYWdlICogRXh0cmFjdENvbG9yUGxhbmUoQ29sb3JNb2RlIG1vZGUsIGludCBwbGFuZU51bWJlcik7DQorCU1vbm9JbWFnZSAqIEV4dHJhY3RGaXJzdENvbG9yUGxhbmUoQ29sb3JNb2RlIG1vZGUpOw0KKwlNb25vSW1hZ2UgKiBFeHRyYWN0U2Vjb25kQ29sb3JQbGFuZShDb2xvck1vZGUgbW9kZSk7DQorCU1vbm9JbWFnZSAqIEV4dHJhY3RUaGlyZENvbG9yUGxhbmUoQ29sb3JNb2RlIG1vZGUpOw0KKwl2b2lkIFJlcGxhY2VQbGFuZShDb2xvck1vZGUgbW9kZSwgTW9ub0ltYWdlICpwbGFuZSwgaW50IHBsYW5lTnVtYmVyKTsNCisJdm9pZCBSZXBsYWNlRmlyc3RDb2xvclBsYW5lKENvbG9yTW9kZSBtb2RlLCBNb25vSW1hZ2UgKnBsYW5lKTsNCisJdm9pZCBSZXBsYWNlU2Vjb25kQ29sb3JQbGFuZShDb2xvck1vZGUgbW9kZSwgTW9ub0ltYWdlICpwbGFuZSk7DQorCXZvaWQgUmVwbGFjZVRoaXJkQ29sb3JQbGFuZShDb2xvck1vZGUgbW9kZSwgTW9ub0ltYWdlICpwbGFuZSk7DQorfTsNCisNCisjZW5kaWYNCisNCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9WaXNpb24vRW51bUNhbWVyYVBhcmFtZXRlci5jcHAgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9WaXNpb24vRW51bUNhbWVyYVBhcmFtZXRlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2RmNWZiYgotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL1Zpc2lvbi9FbnVtQ2FtZXJhUGFyYW1ldGVyLmNwcApAQCAtMCwwICsxLDY3IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy8qIENvcHlyaWdodCAoYykgRklSU1QgMjAwOC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4JCQkJCQkJICAqLw0KKy8qIE9wZW4gU291cmNlIFNvZnR3YXJlIC0gbWF5IGJlIG1vZGlmaWVkIGFuZCBzaGFyZWQgYnkgRlJDIHRlYW1zLiBUaGUgY29kZSAgICovDQorLyogbXVzdCBiZSBhY2NvbXBhbmllZCBieSB0aGUgRklSU1QgQlNEIGxpY2Vuc2UgZmlsZSBpbiAkKFdJTkRfQkFTRSkvV1BJTGliLiAgKi8NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKyNpbmNsdWRlICJFbnVtQ2FtZXJhUGFyYW1ldGVyLmgiDQorI2luY2x1ZGUgPHN0ZGlvLmg+DQorI2luY2x1ZGUgPHN0cmluZy5oPg0KKw0KKy8qKg0KKyAqIENvbnN0cnVjdG9yIGZvciBhbiBlbnVtZXJhdGlvbiBjYW1lcmEgcGFyYW1ldGVyLg0KKyAqIEVudW1lcmF0aW9uIGNhbWVyYSBwYXJhbWV0ZXJzIGhhdmUgbGlzdHMgb2YgdmFsdWUgY2hvaWNlcyBhbmQgc3RyaW5ncyB0aGF0IGdvDQorICogd2l0aCB0aGVtLiBUaGVyZSBhcmUgYWxzbyBDKysgZW51bWVyYXRpb25zIHRvIGdvIGFsb25nIHdpdGggdGhlbS4NCisgKiBAcGFyYW0gc2V0U3RyaW5nIFRoZSBzdHJpbmcgZm9yIGFuIEhUVFAgcmVxdWVzdCB0byBzZXQgdGhlIHZhbHVlLg0KKyAqIEBwYXJhbSBnZXRTdHJpbmcgVGhlIHN0cmluZyBmb3IgYW4gSFRUUCByZXF1ZXN0IHRvIGdldCB0aGUgdmFsdWUuDQorICogQHBhcmFtIGNob2ljZXMgQW4gYXJyYXkgb2Ygc3RyaW5ncyBvZiB0aGUgcGFyYW1ldGVyIGNob2ljZXMgc2V0IGluIHRoZSBodHRwIHN0cmluZ3MuDQorICogQHBhcmFtIG51bUNob2ljZXMgVGhlIG51bWJlciBvZiBjaG9pY2VzIGluIHRoZSBlbnVtZXJhdGlvbiBzZXQuDQorICovDQorRW51bUNhbWVyYVBhcmFtZXRlcjo6RW51bUNhbWVyYVBhcmFtZXRlcihjb25zdCBjaGFyICpzZXRTdHJpbmcsIGNvbnN0IGNoYXIgKmdldFN0cmluZywgYm9vbCByZXF1aXJlc1Jlc3RhcnQsDQorCQkJCQkJCQkJCQkJCWNvbnN0IGNoYXIgKmNvbnN0KmNob2ljZXMsIGludCBudW1DaG9pY2VzKQ0KKwk6IEludENhbWVyYVBhcmFtZXRlcihzZXRTdHJpbmcsIGdldFN0cmluZywgcmVxdWlyZXNSZXN0YXJ0KQ0KK3sNCisJbV9lbnVtVmFsdWVzID0gY2hvaWNlczsNCisJbV9udW1DaG9pY2VzID0gbnVtQ2hvaWNlczsNCit9DQorDQorLyoNCisgKiBDaGVjayBpZiBhbiBlbnVtZXJhdGlvbiBjYW1lcmEgcGFyYW1ldGVyIGhhcyBjaGFuZ2VkLg0KKyAqIENoZWNrIGlmIHRoZSBwYXJhbWV0ZXIgaGFzIGNoYW5nZWQgYW5kIHVwZGF0ZSB0aGUgY2FtZXJhIGlmIGl0IGhhcy4gVGhpcyBpcyBjYWxsZWQNCisgKiBmcm9tIGEgbG9vcCBpbiB0aGUgcGFyYW1ldGVyIGNoZWNrZXIgdGFzay4NCisgKiBAcmV0dXJucyB0cnVlIGlmIHRoZSBjYW1lcmEgbmVlZHMgdG8gcmVzdGFydA0KKyAqLw0KK2Jvb2wgRW51bUNhbWVyYVBhcmFtZXRlcjo6Q2hlY2tDaGFuZ2VkKGJvb2wgJmNoYW5nZWQsIGNoYXIgKnBhcmFtKQ0KK3sNCisJY2hhbmdlZCA9IG1fY2hhbmdlZDsNCisJaWYgKG1fY2hhbmdlZCkNCisJew0KKwkJbV9jaGFuZ2VkID0gZmFsc2U7DQorCQlzcHJpbnRmKHBhcmFtLCBtX3NldFN0cmluZywgbV9lbnVtVmFsdWVzW21fdmFsdWVdKTsNCisJCXJldHVybiBtX3JlcXVpcmVzUmVzdGFydDsNCisJfQ0KKwlyZXR1cm4gZmFsc2U7DQorfQ0KKw0KKy8qKg0KKyAqIEV4dHJhY3QgdGhlIHBhcmFtZXRlciB2YWx1ZSBmcm9tIGEgc3RyaW5nLg0KKyAqIEV4dHJhY3QgdGhlIHBhcmFtZXRlciB2YWx1ZSBmcm9tIHRoZSBjYW1lcmEgc3RhdHVzIG1lc3NhZ2UuDQorICogQHBhcmFtIHN0cmluZyBUaGUgc3RyaW5nIHJldHVybmVkIGZyb20gdGhlIGNhbWVyYS4NCisgKiBAcGFyYW0gbGVuZ3RoIFRoZSBsZW5ndGggb2YgdGhlIHN0cmluZyBmcm9tIHRoZSBjYW1lcmEuDQorICovDQordm9pZCBFbnVtQ2FtZXJhUGFyYW1ldGVyOjpHZXRQYXJhbUZyb21TdHJpbmcoY29uc3QgY2hhciAqc3RyaW5nLCBpbnQgc3RyaW5nTGVuZ3RoKQ0KK3sNCisJY2hhciByZXN1bHRTdHJpbmdbNTBdOw0KKwlpZiAoU2VhcmNoRm9yUGFyYW0obV9nZXRTdHJpbmcsIHN0cmluZywgc3RyaW5nTGVuZ3RoLCByZXN1bHRTdHJpbmcpIDwgMCkgcmV0dXJuOw0KKwlmb3IgKGludCBpID0gMDsgaSA8IG1fbnVtQ2hvaWNlczsgaSsrKQ0KKwl7DQorCQlpZiAoc3RyY21wKHJlc3VsdFN0cmluZywgbV9lbnVtVmFsdWVzW2ldKSA9PSAwKQ0KKwkJew0KKwkJCWlmICghbV9jaGFuZ2VkKQkgIC8vIGRvbid0IGNoYW5nZSBwYXJhbWV0ZXIgdGhhdCdzIGJlZW4gc2V0IGluIGNvZGUNCisJCQl7DQorCQkJCW1fdmFsdWUgPSBpOw0KKwkJCX0NCisJCX0NCisJfQ0KK30NCisNCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9WaXNpb24vRW51bUNhbWVyYVBhcmFtZXRlci5oIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvVmlzaW9uL0VudW1DYW1lcmFQYXJhbWV0ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjljM2ZkCi0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvVmlzaW9uL0VudW1DYW1lcmFQYXJhbWV0ZXIuaApAQCAtMCwwICsxLDI4IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy8qIENvcHlyaWdodCAoYykgRklSU1QgMjAwOC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4JCQkJCQkJICAqLw0KKy8qIE9wZW4gU291cmNlIFNvZnR3YXJlIC0gbWF5IGJlIG1vZGlmaWVkIGFuZCBzaGFyZWQgYnkgRlJDIHRlYW1zLiBUaGUgY29kZSAgICovDQorLyogbXVzdCBiZSBhY2NvbXBhbmllZCBieSB0aGUgRklSU1QgQlNEIGxpY2Vuc2UgZmlsZSBpbiAkKFdJTkRfQkFTRSkvV1BJTGliLiAgKi8NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKyNpZm5kZWYgX19FTlVNX0NBTUVSQV9QQVJBTUVURVJfSF9fDQorI2RlZmluZSBfX0VOVU1fQ0FNRVJBX1BBUkFNRVRFUl9IX18NCisNCisjaW5jbHVkZSAiSW50Q2FtZXJhUGFyYW1ldGVyLmgiDQorDQorLyoqDQorICogRW51bWVyYXRlZCBjYW1lcmEgcGFyYW1ldGVyLg0KKyAqIFRoaXMgY2xhc3MgcmVwcmVzZW50cyBhIGNhbWVyYSBwYXJhbWV0ZXIgdGhhdCB0YWtlcyBhbiBlbnVtZXJhdGVkIHR5cGUgZm9yIGEgdmFsdWUuDQorICovDQorY2xhc3MgRW51bUNhbWVyYVBhcmFtZXRlcjogcHVibGljIEludENhbWVyYVBhcmFtZXRlcg0KK3sNCitwcml2YXRlOg0KKwljb25zdCBjaGFyICpjb25zdCptX2VudW1WYWx1ZXM7DQorCWludCBtX251bUNob2ljZXM7DQorDQorcHVibGljOg0KKwlFbnVtQ2FtZXJhUGFyYW1ldGVyKGNvbnN0IGNoYXIgKnNldFN0cmluZywgY29uc3QgY2hhciAqZ2V0U3RyaW5nLCBib29sIHJlcXVpcmVzUmVzdGFydCwgY29uc3QgY2hhciAqY29uc3QqY2hvaWNlcywgaW50IG51bUNob2ljZXMpOw0KKwl2aXJ0dWFsIGJvb2wgQ2hlY2tDaGFuZ2VkKGJvb2wgJmNoYW5nZWQsIGNoYXIgKnBhcmFtKTsNCisJdmlydHVhbCB2b2lkIEdldFBhcmFtRnJvbVN0cmluZyhjb25zdCBjaGFyICpzdHJpbmcsIGludCBzdHJpbmdMZW5ndGgpOw0KK307DQorDQorI2VuZGlmDQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvVmlzaW9uL0hTTEltYWdlLmNwcCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL1Zpc2lvbi9IU0xJbWFnZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzcwYmNmMAotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL1Zpc2lvbi9IU0xJbWFnZS5jcHAKQEAgLTAsMCArMSwyOCBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBDb3B5cmlnaHQgKGMpIEZJUlNUIDIwMDguIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCQkJCQkJCSAgKi8NCisvKiBPcGVuIFNvdXJjZSBTb2Z0d2FyZSAtIG1heSBiZSBtb2RpZmllZCBhbmQgc2hhcmVkIGJ5IEZSQyB0ZWFtcy4gVGhlIGNvZGUgICAqLw0KKy8qIG11c3QgYmUgYWNjb21wYW5pZWQgYnkgdGhlIEZJUlNUIEJTRCBsaWNlbnNlIGZpbGUgaW4gJChXSU5EX0JBU0UpL1dQSUxpYi4gICovDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisjaW5jbHVkZSAiSFNMSW1hZ2UuaCINCisNCisvKioNCisgKiBDcmVhdGUgYSBuZXcgaW1hZ2UgdGhhdCB1c2VzIHRoZSBIdWUsIFNhdHVyYXRpb24sIGFuZCBMdW1pbmFuY2UgcGxhbmVzLg0KKyAqLw0KK0hTTEltYWdlOjpIU0xJbWFnZSgpIDogQ29sb3JJbWFnZShJTUFRX0lNQUdFX0hTTCkNCit7DQorfQ0KKw0KKy8qKg0KKyAqIENyZWF0ZSBhIG5ldyBpbWFnZSBieSBsb2FkaW5nIGEgZmlsZS4NCisgKiBAcGFyYW0gZmlsZU5hbWUgVGhlIHBhdGggb2YgdGhlIGZpbGUgdG8gbG9hZC4NCisgKi8NCitIU0xJbWFnZTo6SFNMSW1hZ2UoY29uc3QgY2hhciAqZmlsZU5hbWUpIDogQ29sb3JJbWFnZShJTUFRX0lNQUdFX0hTTCkNCit7DQorCWludCBzdWNjZXNzID0gaW1hcVJlYWRGaWxlKG1faW1hcUltYWdlLCBmaWxlTmFtZSwgTlVMTCwgTlVMTCk7DQorCXdwaV9zZXRJbWFxRXJyb3JXaXRoQ29udGV4dChzdWNjZXNzLCAiSW1hcSBSZWFkRmlsZSBlcnJvciIpOw0KK30NCisNCitIU0xJbWFnZTo6fkhTTEltYWdlKCkNCit7DQorfQ0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL1Zpc2lvbi9IU0xJbWFnZS5oIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvVmlzaW9uL0hTTEltYWdlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmQ1MDYxMAotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL1Zpc2lvbi9IU0xJbWFnZS5oCkBAIC0wLDAgKzEsMjQgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorLyogQ29weXJpZ2h0IChjKSBGSVJTVCAyMDA4LiBBbGwgUmlnaHRzIFJlc2VydmVkLgkJCQkJCQkgICovDQorLyogT3BlbiBTb3VyY2UgU29mdHdhcmUgLSBtYXkgYmUgbW9kaWZpZWQgYW5kIHNoYXJlZCBieSBGUkMgdGVhbXMuIFRoZSBjb2RlICAgKi8NCisvKiBtdXN0IGJlIGFjY29tcGFuaWVkIGJ5IHRoZSBGSVJTVCBCU0QgbGljZW5zZSBmaWxlIGluICQoV0lORF9CQVNFKS9XUElMaWIuICAqLw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorI2lmbmRlZiBfX0hTTF9JTUFHRV9IX18NCisjZGVmaW5lIF9fSFNMX0lNQUdFX0hfXw0KKw0KKyNpbmNsdWRlICJDb2xvckltYWdlLmgiDQorDQorLyoqDQorICogQSBjb2xvciBpbWFnZSByZXByZXNlbnRlZCBpbiBIU0wgY29sb3Igc3BhY2UgYXQgMyBieXRlcyBwZXIgcGl4ZWwuDQorICovDQorY2xhc3MgSFNMSW1hZ2UgOiBwdWJsaWMgQ29sb3JJbWFnZQ0KK3sNCitwdWJsaWM6DQorICAgIEhTTEltYWdlKCk7DQorICAgIEhTTEltYWdlKGNvbnN0IGNoYXIgKmZpbGVOYW1lKTsNCisgICAgdmlydHVhbCB+SFNMSW1hZ2UoKTsNCit9Ow0KKw0KKyNlbmRpZg0KKw0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL1Zpc2lvbi9JbWFnZUJhc2UuY3BwIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvVmlzaW9uL0ltYWdlQmFzZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjhhMjcyMQotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL1Zpc2lvbi9JbWFnZUJhc2UuY3BwCkBAIC0wLDAgKzEsNzcgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorLyogQ29weXJpZ2h0IChjKSBGSVJTVCAyMDA4LiBBbGwgUmlnaHRzIFJlc2VydmVkLgkJCQkJCQkgICovDQorLyogT3BlbiBTb3VyY2UgU29mdHdhcmUgLSBtYXkgYmUgbW9kaWZpZWQgYW5kIHNoYXJlZCBieSBGUkMgdGVhbXMuIFRoZSBjb2RlICAgKi8NCisvKiBtdXN0IGJlIGFjY29tcGFuaWVkIGJ5IHRoZSBGSVJTVCBCU0QgbGljZW5zZSBmaWxlIGluICQoV0lORF9CQVNFKS9XUElMaWIuICAqLw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorI2luY2x1ZGUgIkltYWdlQmFzZS5oIg0KKyNpbmNsdWRlICJuaXZpc2lvbi5oIg0KKw0KKy8qKiBQcml2YXRlIE5JIGZ1bmN0aW9uIG5lZWRlZCB0byB3cml0ZSB0byB0aGUgVnhXb3JrcyB0YXJnZXQgKi8NCitJTUFRX0ZVTkMgaW50IFByaXZfU2V0V3JpdGVGaWxlQWxsb3dlZChVSU5UMzIgZW5hYmxlKTsgDQorDQorLyoqDQorICogQ3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIGFuIEltYWdlQmFzZS4NCisgKiBJbWFnZWJhc2UgaXMgdGhlIGJhc2Ugb2YgYWxsIHRoZSBvdGhlciBpbWFnZSBjbGFzc2VzLiBUaGUgY29uc3RydWN0b3INCisgKiBjcmVhdGVzIGFueSB0eXBlIG9mIGltYWdlIGFuZCBzdG9yZXMgdGhlIHBvaW50ZXIgdG8gaXQgaW4gdGhlIGNsYXNzLg0KKyAqIEBwYXJhbSB0eXBlIFRoZSB0eXBlIG9mIGltYWdlIHRvIGNyZWF0ZQ0KKyAqLw0KK0ltYWdlQmFzZTo6SW1hZ2VCYXNlKEltYWdlVHlwZSB0eXBlKQ0KK3sNCisJbV9pbWFxSW1hZ2UgPSBpbWFxQ3JlYXRlSW1hZ2UodHlwZSwgREVGQVVMVF9CT1JERVJfU0laRSk7DQorfQ0KKw0KKy8qKg0KKyAqIEZyZWVzIG1lbW9yeSBhc3NvY2lhdGVkIHdpdGggYW4gSW1hZ2VCYXNlLg0KKyAqIERlc3RydWN0b3IgZnJlZXMgdGhlIGltYXEgaW1hZ2UgYWxsb2NhdGVkIHdpdGggdGhlIGNsYXNzLg0KKyAqLw0KK0ltYWdlQmFzZTo6fkltYWdlQmFzZSgpDQorew0KKwlpZihtX2ltYXFJbWFnZSkNCisJCWltYXFEaXNwb3NlKG1faW1hcUltYWdlKTsNCit9DQorDQorLyoqDQorICogV3JpdGVzIGFuIGltYWdlIHRvIGEgZmlsZSB3aXRoIHRoZSBnaXZlbiBmaWxlbmFtZS4NCisgKiBXcml0ZSB0aGUgaW1hZ2UgdG8gYSBmaWxlIGluIHRoZSBmbGFzaCBvbiB0aGUgY1JJTy4NCisgKiBAcGFyYW0gZmlsZU5hbWUgVGhlIG5hbWUgb2YgdGhlIGZpbGUgdG8gd3JpdGUNCisgKi8NCit2b2lkIEltYWdlQmFzZTo6V3JpdGUoY29uc3QgY2hhciAqZmlsZU5hbWUpDQorew0KKwlQcml2X1NldFdyaXRlRmlsZUFsbG93ZWQoMSk7DQorCWludCBzdWNjZXNzID0gaW1hcVdyaXRlRmlsZShtX2ltYXFJbWFnZSwgZmlsZU5hbWUsIE5VTEwpOw0KKwl3cGlfc2V0SW1hcUVycm9yV2l0aENvbnRleHQoc3VjY2VzcywgIkltYXEgSW1hZ2Ugd3JpdGVGaWxlIGVycm9yIik7DQorfQ0KKw0KKy8qKg0KKyAqIEdldHMgdGhlIGhlaWdodCBvZiBhbiBpbWFnZS4NCisgKiBAcmV0dXJuIFRoZSBoZWlnaHQgb2YgdGhlIGltYWdlIGluIHBpeGVscy4NCisgKi8NCitpbnQgSW1hZ2VCYXNlOjpHZXRIZWlnaHQoKQ0KK3sNCisJaW50IGhlaWdodDsNCisJaW1hcUdldEltYWdlU2l6ZShtX2ltYXFJbWFnZSwgTlVMTCwgJmhlaWdodCk7DQorCXJldHVybiBoZWlnaHQ7DQorfQ0KKw0KKy8qKg0KKyAqIEdldHMgdGhlIHdpZHRoIG9mIGFuIGltYWdlLg0KKyAqIEByZXR1cm4gVGhlIHdpZHRoIG9mIHRoZSBpbWFnZSBpbiBwaXhlbHMuDQorICovDQoraW50IEltYWdlQmFzZTo6R2V0V2lkdGgoKQ0KK3sNCisJaW50IHdpZHRoOw0KKwlpbWFxR2V0SW1hZ2VTaXplKG1faW1hcUltYWdlLCAmd2lkdGgsIE5VTEwpOw0KKwlyZXR1cm4gd2lkdGg7DQorfQ0KKw0KKy8qKg0KKyAqIEFjY2VzcyB0aGUgaW50ZXJuYWwgSU1BUSBJbWFnZSBkYXRhIHN0cnVjdHVyZS4NCisgKiANCisgKiBAcmV0dXJuIEEgcG9pbnRlciB0byB0aGUgaW50ZXJuYWwgSU1BUSBJbWFnZSBkYXRhIHN0cnVjdHVyZS4NCisgKi8NCitJbWFnZSAqSW1hZ2VCYXNlOjpHZXRJbWFxSW1hZ2UoKQ0KK3sNCisJcmV0dXJuIG1faW1hcUltYWdlOw0KK30NCisNCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9WaXNpb24vSW1hZ2VCYXNlLmggYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9WaXNpb24vSW1hZ2VCYXNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOThiZWE2NwotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL1Zpc2lvbi9JbWFnZUJhc2UuaApAQCAtMCwwICsxLDI5IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy8qIENvcHlyaWdodCAoYykgRklSU1QgMjAwOC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4JCQkJCQkJICAqLw0KKy8qIE9wZW4gU291cmNlIFNvZnR3YXJlIC0gbWF5IGJlIG1vZGlmaWVkIGFuZCBzaGFyZWQgYnkgRlJDIHRlYW1zLiBUaGUgY29kZSAgICovDQorLyogbXVzdCBiZSBhY2NvbXBhbmllZCBieSB0aGUgRklSU1QgQlNEIGxpY2Vuc2UgZmlsZSBpbiAkKFdJTkRfQkFTRSkvV1BJTGliLiAgKi8NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKyNpZm5kZWYgX19JTUFHRV9CQVNFX0hfXw0KKyNkZWZpbmUgX19JTUFHRV9CQVNFX0hfXw0KKw0KKyNpbmNsdWRlIDxzdGRpby5oPg0KKyNpbmNsdWRlICJuaXZpc2lvbi5oIg0KKyNpbmNsdWRlICJFcnJvckJhc2UuaCINCisNCisjZGVmaW5lIERFRkFVTFRfQk9SREVSX1NJWkUgMw0KKw0KK2NsYXNzIEltYWdlQmFzZSA6IHB1YmxpYyBFcnJvckJhc2UNCit7DQorcHVibGljOg0KKwlJbWFnZUJhc2UoSW1hZ2VUeXBlIHR5cGUpOw0KKwl2aXJ0dWFsIH5JbWFnZUJhc2UoKTsNCisJdmlydHVhbCB2b2lkIFdyaXRlKGNvbnN0IGNoYXIgKmZpbGVOYW1lKTsNCisJaW50IEdldEhlaWdodCgpOw0KKwlpbnQgR2V0V2lkdGgoKTsNCisJSW1hZ2UgKkdldEltYXFJbWFnZSgpOw0KK3Byb3RlY3RlZDoNCisJSW1hZ2UgKm1faW1hcUltYWdlOw0KK307DQorDQorI2VuZGlmDQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvVmlzaW9uL0ludENhbWVyYVBhcmFtZXRlci5jcHAgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9WaXNpb24vSW50Q2FtZXJhUGFyYW1ldGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzllZjljCi0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvVmlzaW9uL0ludENhbWVyYVBhcmFtZXRlci5jcHAKQEAgLTAsMCArMSwxMTEgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorLyogQ29weXJpZ2h0IChjKSBGSVJTVCAyMDA4LiBBbGwgUmlnaHRzIFJlc2VydmVkLgkJCQkJCQkgICovDQorLyogT3BlbiBTb3VyY2UgU29mdHdhcmUgLSBtYXkgYmUgbW9kaWZpZWQgYW5kIHNoYXJlZCBieSBGUkMgdGVhbXMuIFRoZSBjb2RlICAgKi8NCisvKiBtdXN0IGJlIGFjY29tcGFuaWVkIGJ5IHRoZSBGSVJTVCBCU0QgbGljZW5zZSBmaWxlIGluICQoV0lORF9CQVNFKS9XUElMaWIuICAqLw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorI2luY2x1ZGUgIkludENhbWVyYVBhcmFtZXRlci5oIg0KKyNpbmNsdWRlICJwY3JlLmgiDQorI2luY2x1ZGUgPHN0ZGlvLmg+DQorI2luY2x1ZGUgPHN0cmluZy5oPg0KKw0KKy8qKg0KKyAqIENvbnN0cnVjdG9yIGZvciBhbiBpbnRlZ2VyIGNhbWVyYSBwYXJhbWV0ZXIuDQorICogQHBhcmFtIHNldFN0cmluZyBUaGUgc3RyaW5nIHRvIHNldCBhIHZhbHVlIGluIHRoZSBIVFRQIHJlcXVlc3QNCisgKiBAcGFyYW0gZ2V0U3RyaW5nIFRoZSBzdHJpbmcgdG8gcmV0cmlldmUgYSB2YWx1ZSBpbiB0aGUgSFRUUCByZXF1ZXN0DQorICovDQorSW50Q2FtZXJhUGFyYW1ldGVyOjpJbnRDYW1lcmFQYXJhbWV0ZXIoY29uc3QgY2hhciAqc2V0U3RyaW5nLCBjb25zdCBjaGFyICpnZXRTdHJpbmcsIGJvb2wgcmVxdWlyZXNSZXN0YXJ0KQ0KK3sNCisJbV9jaGFuZ2VkID0gZmFsc2U7DQorCW1fdmFsdWUgPSAwOw0KKwltX3NldFN0cmluZyA9IHNldFN0cmluZzsNCisJbV9nZXRTdHJpbmcgPSBnZXRTdHJpbmc7DQorCW1fcmVxdWlyZXNSZXN0YXJ0ID0gcmVxdWlyZXNSZXN0YXJ0Ow0KK30NCisNCisvKioNCisgKiBHZXQgYSB2YWx1ZSBmb3IgYSBjYW1lcmEgcGFyYW1ldGVyLg0KKyAqIEByZXR1cm5zIFRoZSBjYW1lcmEgcGFyYW1ldGVyIGNhY2hlZCB2YWx1ZWQuDQorICovDQoraW50IEludENhbWVyYVBhcmFtZXRlcjo6R2V0VmFsdWUoKQ0KK3sNCisJcmV0dXJuIG1fdmFsdWU7DQorfQ0KKw0KKy8qKg0KKyAqIFNldCBhIHZhbHVlIGZvciBhIGNhbWVyYSBwYXJhbWV0ZXIuDQorICogTWFyayB0aGUgdmFsdWUgZm9yIGNoYW5nZS4gVGhlIHZhbHVlIHdpbGwgYmUgdXBkYXRlZCBpbiB0aGUgcGFyYW1ldGVyDQorICogY2hhbmdlIGxvb3AuDQorICovDQordm9pZCBJbnRDYW1lcmFQYXJhbWV0ZXI6OlNldFZhbHVlKGludCB2YWx1ZSkNCit7DQorCW1fdmFsdWUgPSB2YWx1ZTsNCisJbV9jaGFuZ2VkID0gdHJ1ZTsNCit9DQorDQorLyoqDQorICogQ2hlY2sgaWYgYSBwYXJhbWV0ZXIgaGFzIGNoYW5nZWQgYW5kIHVwZGF0ZS4NCisgKiBDaGVjayBpZiBhIHBhcmFtZXRlciBoYXMgY2hhbmdlZCBhbmQgc2VuZCB0aGUgdXBkYXRlIHN0cmluZyBpZiBpdA0KKyAqIGhhcyBjaGFuZ2VkLiBUaGlzIGlzIGNhbGxlZCBmcm9tIHRoZSBsb29wIGluIHRoZSBwYXJhbWV0ZXIgdGFzayBsb29wLg0KKyAqIEByZXR1cm5zIHRydWUgaWYgdGhlIGNhbWVyYSBuZWVkcyB0byByZXN0YXJ0DQorICovDQorYm9vbCBJbnRDYW1lcmFQYXJhbWV0ZXI6OkNoZWNrQ2hhbmdlZChib29sICZjaGFuZ2VkLCBjaGFyICpwYXJhbSkNCit7DQorCWNoYW5nZWQgPSBtX2NoYW5nZWQ7DQorCWlmIChtX2NoYW5nZWQpDQorCXsNCisJCXNwcmludGYocGFyYW0sIG1fc2V0U3RyaW5nLCBtX3ZhbHVlKTsNCisJCW1fY2hhbmdlZCA9IGZhbHNlOw0KKwkJcmV0dXJuIG1fcmVxdWlyZXNSZXN0YXJ0Ow0KKwl9DQorCXJldHVybiBmYWxzZTsNCit9DQorDQorLyoqDQorICogR2V0IGEgcGFyYW1ldGVyIHZhbHVlIGZyb20gdGhlIHN0cmluZy4NCisgKiBHZXQgYSBwYXJhbWV0ZXIgdmFsdWUgZnJvbSB0aGUgY2FtZXJhIHN0YXR1cyBzdHJpbmcuIElmIGl0IGhhcyBiZWVuIGNoYW5nZWQNCisgKiBiZWVuIGNoYW5nZWQgYnkgdGhlIHByb2dyYW0sIHRoZW4gZG9uJ3QgdXBkYXRlIGl0LiBQcm9ncmFtIHZhbHVlcyBoYXZlDQorICogcHJlY2VkZW5jZSBvdmVyIHRob3NlIHdyaXR0ZW4gaW4gdGhlIGNhbWVyYS4NCisgKi8NCit2b2lkIEludENhbWVyYVBhcmFtZXRlcjo6R2V0UGFyYW1Gcm9tU3RyaW5nKGNvbnN0IGNoYXIgKnN0cmluZywgaW50IHN0cmluZ0xlbmd0aCkNCit7DQorCWNoYXIgcmVzdWx0U3RyaW5nWzE1MF07DQorCWlmIChTZWFyY2hGb3JQYXJhbShtX2dldFN0cmluZywgc3RyaW5nLCBzdHJpbmdMZW5ndGgsIHJlc3VsdFN0cmluZykgPj0gMCkNCisJewkNCisJCWlmICghbV9jaGFuZ2VkKSBtX3ZhbHVlID0gYXRvaShyZXN1bHRTdHJpbmcpOw0KKwl9DQorfQ0KKw0KKy8qKg0KKyAqIEBwYXJhbSBwYXR0ZXJuOiB0aGUgcmVndWxhciBleHByZXNzaW9uDQorICogQHBhcmFtIHNlYXJjaFN0cmluZyB0aGUgdGV4dCB0byBzZWFyY2gNCisgKiBAcGFyYW0gc2VhcmNoU3RyaW5nTGVuIHRoZSBsZW5ndGggb2Ygc2VhcmNoU3RyaW5nDQorICogQHBhcmFtIHJlc3VsdCBidWZmZXIgdG8gcHV0IHJlc3VsdGluZyB0ZXh0IGludG8sIG11c3QgYmUgcHJlLWFsbG9jYXRlZA0KKyAqLw0KK2ludCBJbnRDYW1lcmFQYXJhbWV0ZXI6OlNlYXJjaEZvclBhcmFtKGNvbnN0IGNoYXIgKnBhdHRlcm4sIGNvbnN0IGNoYXIgKnNlYXJjaFN0cmluZywgaW50IHNlYXJjaFN0cmluZ0xlbiwgY2hhciAqcmVzdWx0KQ0KK3sNCisJaW50IHZlY3RvckxlbiA9IDEwOw0KKwlpbnQgcmVzdWx0VmVjdG9yW3ZlY3Rvckxlbl07DQorCWNvbnN0IGNoYXIgKmVycm9yOw0KKwlpbnQgZXJyb2Zmc2V0Ow0KKwlwY3JlICpjb21waWxlZFBhdHRlcm4gPSBwY3JlX2NvbXBpbGUoDQorCQkJcGF0dGVybiwgLy8icm9vdC5JbWFnZS5JMC5BcHBlYXJhbmNlLlJlc29sdXRpb249KC4qKSIsIA0KKwkJCVBDUkVfQ0FTRUxFU1MsIA0KKwkJCSZlcnJvciwgLy8gZm9yIGVycm9yIG1lc3NhZ2UgDQorCQkJJmVycm9mZnNldCwgLy8gZm9yIGVycm9yIG9mZnNldCANCisJCQlOVUxMKTsgLy8gdXNlIGRlZmF1bHQgY2hhcmFjdGVyIHRhYmxlcyANCisJaW50IHJjOw0KKwlyYyA9IHBjcmVfZXhlYyhjb21waWxlZFBhdHRlcm4sIA0KKwkJCQkJTlVMTCwgDQorCQkJCQlzZWFyY2hTdHJpbmcsIA0KKwkJCQkJc2VhcmNoU3RyaW5nTGVuLCANCisJCQkJCTAsIA0KKwkJCQkJMCwgDQorCQkJCQlyZXN1bHRWZWN0b3IsCQkvL2xvY2F0aW9ucyBvZiBzdWJtYXRjaGVzIA0KKwkJCQkJdmVjdG9yTGVuKTsJCQkvL3NpemUgb2Ygb3ZlY3Rvcg0KKwlpbnQgbGVuZ3RoID0gcmVzdWx0VmVjdG9yWzNdIC0gcmVzdWx0VmVjdG9yWzJdOw0KKwltZW1jcHkocmVzdWx0LCAmc2VhcmNoU3RyaW5nW3Jlc3VsdFZlY3RvclsyXV0sIGxlbmd0aCk7DQorCXJlc3VsdFtsZW5ndGhdID0gJ1wwJzsNCisJcmV0dXJuIHJjOw0KK30NCisNCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9WaXNpb24vSW50Q2FtZXJhUGFyYW1ldGVyLmggYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9WaXNpb24vSW50Q2FtZXJhUGFyYW1ldGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmIyZGRjNAotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL1Zpc2lvbi9JbnRDYW1lcmFQYXJhbWV0ZXIuaApAQCAtMCwwICsxLDM1IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy8qIENvcHlyaWdodCAoYykgRklSU1QgMjAwOC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4JCQkJCQkJICAqLw0KKy8qIE9wZW4gU291cmNlIFNvZnR3YXJlIC0gbWF5IGJlIG1vZGlmaWVkIGFuZCBzaGFyZWQgYnkgRlJDIHRlYW1zLiBUaGUgY29kZSAgICovDQorLyogbXVzdCBiZSBhY2NvbXBhbmllZCBieSB0aGUgRklSU1QgQlNEIGxpY2Vuc2UgZmlsZSBpbiAkKFdJTkRfQkFTRSkvV1BJTGliLiAgKi8NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKyNpZm5kZWYgX19JTlRfQ0FNRVJBX1BBUkFNRVRFUl9IX18NCisjZGVmaW5lIF9fSU5UX0NBTUVSQV9QQVJBTUVURVJfSF9fDQorDQorI2luY2x1ZGUgPHZ4V29ya3MuaD4NCisNCisvKioNCisgKiBJbnRlZ2VyIGNhbWVyYSBwYXJhbWV0ZXIuDQorICogVGhpcyBjbGFzcyByZXByZXNlbnRzIGEgY2FtZXJhIHBhcmFtZXRlciB0aGF0IHRha2VzIGFuIGludGVnZXIgdmFsdWUuDQorICovDQorY2xhc3MgSW50Q2FtZXJhUGFyYW1ldGVyDQorew0KK3Byb3RlY3RlZDoNCisJY29uc3QgY2hhciAqbV9zZXRTdHJpbmc7DQorCWNvbnN0IGNoYXIgKm1fZ2V0U3RyaW5nOw0KKwlib29sIG1fY2hhbmdlZDsNCisJYm9vbCBtX3JlcXVpcmVzUmVzdGFydDsNCisJaW50IG1fdmFsdWU7CQkJLy8gcGFyYW1ldGVyIHZhbHVlDQorDQorCWludCBTZWFyY2hGb3JQYXJhbShjb25zdCBjaGFyICpwYXR0ZXJuLCBjb25zdCBjaGFyICpzZWFyY2hTdHJpbmcsIGludCBzZWFyY2hTdHJpbmdMZW4sIGNoYXIgKnJlc3VsdCk7DQorDQorcHVibGljOg0KKwlJbnRDYW1lcmFQYXJhbWV0ZXIoY29uc3QgY2hhciAqc2V0U3RyaW5nLCBjb25zdCBjaGFyICpnZXRTdHJpbmcsIGJvb2wgcmVxdWlyZXNSZXN0YXJ0KTsNCisJaW50IEdldFZhbHVlKCk7DQorCXZvaWQgU2V0VmFsdWUoaW50IHZhbHVlKTsNCisJdmlydHVhbCBib29sIENoZWNrQ2hhbmdlZChib29sICZjaGFuZ2VkLCBjaGFyICpwYXJhbSk7DQorCXZpcnR1YWwgdm9pZCBHZXRQYXJhbUZyb21TdHJpbmcoY29uc3QgY2hhciAqc3RyaW5nLCBpbnQgc3RyaW5nTGVuZ3RoKTsNCit9Ow0KKw0KKyNlbmRpZg0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL1Zpc2lvbi9Nb25vSW1hZ2UuY3BwIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvVmlzaW9uL01vbm9JbWFnZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2RhYWVkMQotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL1Zpc2lvbi9Nb25vSW1hZ2UuY3BwCkBAIC0wLDAgKzEsNTMgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorLyogQ29weXJpZ2h0IChjKSBGSVJTVCAyMDA4LiBBbGwgUmlnaHRzIFJlc2VydmVkLgkJCQkJCQkgICovDQorLyogT3BlbiBTb3VyY2UgU29mdHdhcmUgLSBtYXkgYmUgbW9kaWZpZWQgYW5kIHNoYXJlZCBieSBGUkMgdGVhbXMuIFRoZSBjb2RlICAgKi8NCisvKiBtdXN0IGJlIGFjY29tcGFuaWVkIGJ5IHRoZSBGSVJTVCBCU0QgbGljZW5zZSBmaWxlIGluICQoV0lORF9CQVNFKS9XUElMaWIuICAqLw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorI2luY2x1ZGUgIk1vbm9JbWFnZS5oIg0KKyNpbmNsdWRlICJuaXZpc2lvbi5oIg0KKw0KK01vbm9JbWFnZTo6TW9ub0ltYWdlKCkgOiBJbWFnZUJhc2UoSU1BUV9JTUFHRV9VOCkNCit7DQorfQ0KKw0KK01vbm9JbWFnZTo6fk1vbm9JbWFnZSgpDQorew0KK30NCisNCisvKioNCisgKiBMb29rIGZvciBlbGxpcHNlcyBpbiBhbiBpbWFnZS4NCisgKiBHaXZlbiBzb21lIGlucHV0IHBhcmFtZXRlcnMsIGxvb2sgZm9yIGFueSBudW1iZXIgb2YgZWxsaXBzZXMgaW4gYW4gaW1hZ2UuDQorICogQHBhcmFtIGVsbGlwc2VEZXNjcmlwdG9yIEVsbGlwc2UgZGVzY3JpcHRvcg0KKyAqIEBwYXJhbSBjdXJ2ZU9wdGlvbnMgQ3VydmUgb3B0aW9ucw0KKyAqIEBwYXJhbSBzaGFwZURldGVjdGlvbk9wdGlvbnMgU2hhcGUgZGV0ZWN0aW9uIG9wdGlvbnMNCisgKiBAcGFyYW0gcm9pIFJlZ2lvbiBvZiBJbnRlcmVzdA0KKyAqIEByZXR1cm5zIGEgdmVjdG9yIG9mIEVsbGlwc2VNYXRjaCBzdHJ1Y3R1cmVzICgwIGxlbmd0aCB2ZWN0b3Igb24gbm8gbWF0Y2gpDQorICovDQordmVjdG9yPEVsbGlwc2VNYXRjaD4gKiBNb25vSW1hZ2U6OkRldGVjdEVsbGlwc2VzKA0KKwkJRWxsaXBzZURlc2NyaXB0b3IgKmVsbGlwc2VEZXNjcmlwdG9yLCBDdXJ2ZU9wdGlvbnMgKmN1cnZlT3B0aW9ucywNCisJCVNoYXBlRGV0ZWN0aW9uT3B0aW9ucyAqc2hhcGVEZXRlY3Rpb25PcHRpb25zLCBST0kgKnJvaSkNCit7DQorCWludCBudW1iZXJPZk1hdGNoZXM7DQorCUVsbGlwc2VNYXRjaCAqZSA9IGltYXFEZXRlY3RFbGxpcHNlcyhtX2ltYXFJbWFnZSwgZWxsaXBzZURlc2NyaXB0b3IsDQorCQkJCQkJCQkJCWN1cnZlT3B0aW9ucywgc2hhcGVEZXRlY3Rpb25PcHRpb25zLCByb2ksICZudW1iZXJPZk1hdGNoZXMpOw0KKwl2ZWN0b3I8RWxsaXBzZU1hdGNoPiAqZWxsaXBzZXMgPSBuZXcgdmVjdG9yPEVsbGlwc2VNYXRjaD47DQorCWlmIChlID09IE5VTEwpDQorCXsNCisJCXJldHVybiBlbGxpcHNlczsNCisJfQ0KKwlmb3IgKGludCBpID0gMDsgaSA8IG51bWJlck9mTWF0Y2hlczsgaSsrKQ0KKwl7DQorCQllbGxpcHNlcy0+cHVzaF9iYWNrKGVbaV0pOw0KKwl9DQorCWltYXFEaXNwb3NlKGUpOw0KKwlyZXR1cm4gZWxsaXBzZXM7DQorfQ0KKw0KK3ZlY3RvcjxFbGxpcHNlTWF0Y2g+ICogTW9ub0ltYWdlOjpEZXRlY3RFbGxpcHNlcygNCisJCUVsbGlwc2VEZXNjcmlwdG9yICplbGxpcHNlRGVzY3JpcHRvcikNCit7DQorCXZlY3RvcjxFbGxpcHNlTWF0Y2g+ICplbGxpcHNlcyA9IERldGVjdEVsbGlwc2VzKGVsbGlwc2VEZXNjcmlwdG9yLCBOVUxMLA0KKwkJCU5VTEwsIE5VTEwpOw0KKwlyZXR1cm4gZWxsaXBzZXM7DQorfQ0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL1Zpc2lvbi9Nb25vSW1hZ2UuaCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL1Zpc2lvbi9Nb25vSW1hZ2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NzFkZDZjCi0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvVmlzaW9uL01vbm9JbWFnZS5oCkBAIC0wLDAgKzEsMjkgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorLyogQ29weXJpZ2h0IChjKSBGSVJTVCAyMDA4LiBBbGwgUmlnaHRzIFJlc2VydmVkLgkJCQkJCQkgICovDQorLyogT3BlbiBTb3VyY2UgU29mdHdhcmUgLSBtYXkgYmUgbW9kaWZpZWQgYW5kIHNoYXJlZCBieSBGUkMgdGVhbXMuIFRoZSBjb2RlICAgKi8NCisvKiBtdXN0IGJlIGFjY29tcGFuaWVkIGJ5IHRoZSBGSVJTVCBCU0QgbGljZW5zZSBmaWxlIGluICQoV0lORF9CQVNFKS9XUElMaWIuICAqLw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorI2lmbmRlZiBfX01PTk9fSU1BR0VfSF9fDQorI2RlZmluZSBfX01PTk9fSU1BR0VfSF9fDQorDQorI2luY2x1ZGUgIkltYWdlQmFzZS5oIg0KKw0KKyNpbmNsdWRlIDx2ZWN0b3I+DQorDQordXNpbmcgbmFtZXNwYWNlIHN0ZDsNCisNCitjbGFzcyBNb25vSW1hZ2UgOiBwdWJsaWMgSW1hZ2VCYXNlDQorew0KK3B1YmxpYzoNCisJTW9ub0ltYWdlKCk7DQorCXZpcnR1YWwgfk1vbm9JbWFnZSgpOw0KKw0KKwl2ZWN0b3I8RWxsaXBzZU1hdGNoPiAqIERldGVjdEVsbGlwc2VzKEVsbGlwc2VEZXNjcmlwdG9yICplbGxpcHNlRGVzY3JpcHRvciwNCisJCQkJCUN1cnZlT3B0aW9ucyAqY3VydmVPcHRpb25zLA0KKwkJCQkJU2hhcGVEZXRlY3Rpb25PcHRpb25zICpzaGFwZURldGVjdGlvbk9wdGlvbnMsDQorCQkJCQlST0kgKnJvaSk7DQorCXZlY3RvcjxFbGxpcHNlTWF0Y2g+ICogRGV0ZWN0RWxsaXBzZXMoRWxsaXBzZURlc2NyaXB0b3IgKmVsbGlwc2VEZXNjcmlwdG9yKTsNCit9Ow0KKw0KKyNlbmRpZg0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL1Zpc2lvbi9QQ1ZpZGVvU2VydmVyLmNwcCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL1Zpc2lvbi9QQ1ZpZGVvU2VydmVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMjIxMjhkCi0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvVmlzaW9uL1BDVmlkZW9TZXJ2ZXIuY3BwCkBAIC0wLDAgKzEsMjgxIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy8qIENvcHlyaWdodCAoYykgRklSU1QgMjAwOC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4JCQkJCQkJICAqLw0KKy8qIE9wZW4gU291cmNlIFNvZnR3YXJlIC0gbWF5IGJlIG1vZGlmaWVkIGFuZCBzaGFyZWQgYnkgRlJDIHRlYW1zLiBUaGUgY29kZSAgICovDQorLyogbXVzdCBiZSBhY2NvbXBhbmllZCBieSB0aGUgRklSU1QgQlNEIGxpY2Vuc2UgZmlsZSBpbiAkKFdJTkRfQkFTRSkvV1BJTGliLiAgKi8NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKyNpbmNsdWRlIDx2eFdvcmtzLmg+DQorDQorI2luY2x1ZGUgIlBDVmlkZW9TZXJ2ZXIuaCINCisNCisjaW5jbHVkZSA8ZXJybm9MaWIuaD4NCisjaW5jbHVkZSA8aG9zdExpYi5oPg0KKyNpbmNsdWRlIDxpbmV0TGliLmg+DQorI2luY2x1ZGUgPHNvY2tMaWIuaD4NCisNCisjaW5jbHVkZSAiTmV0d29ya0NvbW11bmljYXRpb24vVXNhZ2VSZXBvcnRpbmcuaCINCisjaW5jbHVkZSAiVGFzay5oIg0KKyNpbmNsdWRlICJUaW1lci5oIg0KKyNpbmNsdWRlICJWaXNpb24vQXhpc0NhbWVyYS5oIg0KKyNpbmNsdWRlICJXUElFcnJvcnMuaCINCisNCisvKioNCisgKiBAYnJpZWYgSW1wbGVtZW50cyBhbiBvYmplY3QgdGhhdCBhdXRvbWF0aWNhbGx5IGRvZXMgYSBjbG9zZSBvbiBhDQorICogY2FtZXJhIHNvY2tldCBvbiBkZXN0cnVjdGlvbi4NCisgKi8NCitjbGFzcyBTY29wZWRTb2NrZXQgew0KK3B1YmxpYzoNCisJU2NvcGVkU29ja2V0KGludCBjYW1Tb2NrKQ0KKwkJOiBtX2NhbVNvY2soY2FtU29jaykNCisJew0KKwl9DQorDQorCX5TY29wZWRTb2NrZXQoKSB7DQorCQlpZiAobV9jYW1Tb2NrICE9IEVSUk9SKSB7DQorCQkJY2xvc2UobV9jYW1Tb2NrKTsNCisJCX0NCisJfQ0KKwkvLyBDYXN0IHRvIGludCBhbGxvd3MgeW91IHRvIHBhc3MgdGhpcyB0byBhbnkgZnVuY3Rpb24gdGhhdA0KKwkvLyB0YWtlcyB0aGUgc29ja2V0IGFzIGFuIGludC4NCisJb3BlcmF0b3IgaW50KCkgY29uc3Qgew0KKwkJcmV0dXJuIG1fY2FtU29jazsNCisJfQ0KKw0KK3ByaXZhdGU6DQorCWludCBtX2NhbVNvY2s7DQorfTsNCisNCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisvLyBQQ1ZpZGVvU2VydmVyDQorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorDQorLyoqDQorICogQGJyaWVmIENvbnN0cnVjdG9yLg0KKyAqLw0KK1BDVmlkZW9TZXJ2ZXI6OlBDVmlkZW9TZXJ2ZXIoKQ0KKwk6IG1fc2VydmVyVGFzaygiUENWaWRlb1NlcnZlciIsIChGVU5DUFRSKXNfU2VydmVyVGFzaykNCisJLCBtX25ld0ltYWdlU2VtIChOVUxMKQ0KKwksIG1fc3RvcFNlcnZlciAoZmFsc2UpDQorew0KKwlBeGlzQ2FtZXJhICZjYW0gPSBBeGlzQ2FtZXJhOjpHZXRJbnN0YW5jZSgpOw0KKwltX25ld0ltYWdlU2VtID0gY2FtLkdldE5ld0ltYWdlU2VtKCk7DQorCWlmICghY2FtLlN0YXR1c0lzRmF0YWwoKSkNCisJew0KKwkJU3RhcnRTZXJ2ZXJUYXNrKCk7DQorCX0NCisJZWxzZQ0KKwl7DQorCQlDbG9uZUVycm9yKCZjYW0pOw0KKwl9DQorfQ0KKw0KKy8qKg0KKyAqIEBicmllZiBEZXN0cnVjdG9yLg0KKyAqIFN0b3Agc2VydmluZyBpbWFnZXMgYW5kIGRlc3Ryb3kgdGhpcyBjbGFzcy4NCisgKi8NCitQQ1ZpZGVvU2VydmVyOjp+UENWaWRlb1NlcnZlcigpDQorew0KKwkvLyBTdG9wIHRoZSBpbWFnZXMgdG8gUEMgc2VydmVyLg0KKwlTdG9wKCk7DQorCS8vIENsZWFyIHRoZSBlcnJvciBzbyB0aGF0IHlvdSBjYW4gdXNlIHRoaXMgb2JqZWN0IHRvIG1ha2UgYSBjb25uZWN0aW9uIHRvDQorCS8vIHRoZSBWSURFT19UT19QQ19QT1JUIHRvIHN0b3AgdGhlIEltYWdlVG9QQ1NlcnZlciBpZiBpdCBpcyB3YWl0aW5nIHRvDQorCS8vIGFjY2VwdCBjb25uZWN0aW9ucyBmcm9tIGEgUEMuDQorCUNsZWFyRXJyb3IoKTsNCisJLy8gT3BlbiBhIHNvY2tldC4NCisJaW50IGNhbVNvY2sgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19TVFJFQU0sIDApOw0KKwlpZiAoY2FtU29jayA9PSBFUlJPUikNCisJew0KKwkJd3BpX3NldEVycm5vRXJyb3IoKTsNCisJCXJldHVybjsNCisJfQ0KKwlTY29wZWRTb2NrZXQgc2NvcGVkQ2FtU29jayhjYW1Tb2NrKTsNCisJLy8gSWYgc3VjY2Vzc2Z1bA0KKwlpZiAoIVN0YXR1c0lzRmF0YWwoKSkNCisJew0KKwkJLy8gIENyZWF0ZSBhIGNvbm5lY3Rpb24gdG8gdGhlIGxvY2FsaG9zdC4NCisJCXN0cnVjdCBzb2NrYWRkcl9pbiBzZWxmQWRkcjsNCisJCWludCBzb2NrQWRkclNpemUgPSBzaXplb2Yoc2VsZkFkZHIpOw0KKwkJYnplcm8gKChjaGFyICopICZzZWxmQWRkciwgc29ja0FkZHJTaXplKTsNCisJCXNlbGZBZGRyLnNpbl9mYW1pbHkgPSBBRl9JTkVUOw0KKwkJc2VsZkFkZHIuc2luX2xlbiA9ICh1X2NoYXIpIHNvY2tBZGRyU2l6ZTsNCisJCXNlbGZBZGRyLnNpbl9wb3J0ID0gaHRvbnMgKFZJREVPX1RPX1BDX1BPUlQpOw0KKw0KKwkJaWYgKCggKGludCkoc2VsZkFkZHIuc2luX2FkZHIuc19hZGRyID0gaW5ldF9hZGRyIChjb25zdF9jYXN0PGNoYXIqPigibG9jYWxob3N0IikpICkgIT0gRVJST1IpIHx8DQorCQkJKCAoaW50KShzZWxmQWRkci5zaW5fYWRkci5zX2FkZHIgPSBob3N0R2V0QnlOYW1lIChjb25zdF9jYXN0PGNoYXIqPigibG9jYWxob3N0IikpICkgIT0gRVJST1IpKQ0KKwkJew0KKwkJCXN0cnVjdCB0aW1ldmFsIGNvbm5lY3RUaW1lb3V0Ow0KKwkJCWNvbm5lY3RUaW1lb3V0LnR2X3NlYyA9IDE7DQorCQkJY29ubmVjdFRpbWVvdXQudHZfdXNlYyA9IDA7DQorCQkJY29ubmVjdFdpdGhUaW1lb3V0KGNhbVNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKikgJnNlbGZBZGRyLCBzb2NrQWRkclNpemUsICZjb25uZWN0VGltZW91dCk7DQorCQl9DQorCX0NCit9DQorDQorLyoqDQorICogU3RhcnQgdGhlIHRhc2sgdGhhdCBpcyByZXNwb25zaWJsZSBmb3Igc2VuZGluZyBpbWFnZXMgdG8gdGhlIFBDLg0KKyAqLw0KK2ludCBQQ1ZpZGVvU2VydmVyOjpTdGFydFNlcnZlclRhc2soKQ0KK3sNCisJaWYgKFN0YXR1c0lzRmF0YWwoKSkNCisJew0KKwkJcmV0dXJuIC0xOw0KKwl9DQorCWludCBpZCA9IDA7DQorCW1fc3RvcFNlcnZlciA9IGZhbHNlOw0KKwkvLyBDaGVjayBmb3IgcHJpb3IgY29weSBvZiBydW5uaW5nIHRhc2sNCisJaW50IG9sZElkID0gdGFza05hbWVUb0lkKChjaGFyKiltX3NlcnZlclRhc2suR2V0TmFtZSgpKTsNCisJaWYob2xkSWQgIT0gRVJST1IpDQorCXsNCisJCS8vIFRPRE86IFJlcG9ydCBlcnJvci4gWW91IGFyZSBpbiBhIGJhZCBzdGF0ZS4NCisJCXRhc2tEZWxldGUob2xkSWQpOw0KKwl9DQorDQorCS8vIHNwYXduIHZpZGVvIHNlcnZlciB0YXNrDQorCS8vIHRoaXMgaXMgZG9uZSB0byBlbnN1cmUgdGhhdCB0aGUgdGFzayBpcyBzcGF3bmVkIHdpdGggdGhlDQorCS8vIGZsb2F0aW5nIHBvaW50IGNvbnRleHQgc2F2ZSBwYXJhbWV0ZXIuDQorCWJvb2wgc3RhcnRlZCA9IG1fc2VydmVyVGFzay5TdGFydCgoaW50KXRoaXMpOw0KKw0KKwlpZCA9IG1fc2VydmVyVGFzay5HZXRJRCgpOw0KKw0KKwlpZiAoIXN0YXJ0ZWQpDQorCXsNCisJCXdwaV9zZXRXUElFcnJvcihUYXNrRXJyb3IpOw0KKwkJcmV0dXJuIGlkOw0KKwl9DQorCXRhc2tEZWxheSgxKTsNCisJcmV0dXJuIGlkOw0KK30NCisNCisvKioNCisgKiBAYnJpZWYgU3RhcnQgc2VuZGluZyBpbWFnZXMgdG8gdGhlIFBDLg0KKyAqLw0KK3ZvaWQgUENWaWRlb1NlcnZlcjo6U3RhcnQoKQ0KK3sNCisJU3RhcnRTZXJ2ZXJUYXNrKCk7DQorfQ0KKw0KKy8qKg0KKyAqIEBicmllZiBTdG9wIHNlbmRpbmcgaW1hZ2VzIHRvIHRoZSBQQy4NCisgKi8NCit2b2lkIFBDVmlkZW9TZXJ2ZXI6OlN0b3AoKQ0KK3sNCisJbV9zdG9wU2VydmVyID0gdHJ1ZTsNCit9DQorDQorLyoqDQorICogU3RhdGljIHN0dWIgZm9yIGtpY2tpbmcgb2ZmIHRoZSBzZXJ2ZXIgdGFzaw0KKyAqLw0KK2ludCBQQ1ZpZGVvU2VydmVyOjpzX1NlcnZlclRhc2soUENWaWRlb1NlcnZlciAqdGhpc1B0cikNCit7DQorCXJldHVybiB0aGlzUHRyLT5TZXJ2ZXJUYXNrKCk7DQorfQ0KKw0KKy8qKg0KKyAqIEBicmllZiBJbml0aWFsaXplIHRoZSBzb2NrZXQgYW5kIHNlcnZlIGltYWdlcyB0byB0aGUgUEMuDQorICogVGhpcyBpcyB0aGUgdGFzayB0aGF0IHNlcnZlcyBpbWFnZXMgdG8gdGhlIFBDIGluIGEgbG9vcC4gVGhpcyBydW5zDQorICogYXMgYSBzZXBhcmF0ZSB0YXNrLg0KKyAqLw0KK2ludCBQQ1ZpZGVvU2VydmVyOjpTZXJ2ZXJUYXNrKCkNCit7DQorCS8qIFNldHVwIHRvIFBDIHNvY2tldHMgKi8NCisJc3RydWN0IHNvY2thZGRyX2luIHNlcnZlckFkZHI7DQorCWludCBzb2NrQWRkclNpemUgPSBzaXplb2Yoc2VydmVyQWRkcik7DQorCWludCBwY1NvY2sgPSBFUlJPUjsNCisJYnplcm8gKChjaGFyICopICZzZXJ2ZXJBZGRyLCBzb2NrQWRkclNpemUpOw0KKwlzZXJ2ZXJBZGRyLnNpbl9sZW4gPSAodV9jaGFyKSBzb2NrQWRkclNpemU7DQorCXNlcnZlckFkZHIuc2luX2ZhbWlseSA9IEFGX0lORVQ7DQorCXNlcnZlckFkZHIuc2luX3BvcnQgPSBodG9ucyAoVklERU9fVE9fUENfUE9SVCk7DQorCXNlcnZlckFkZHIuc2luX2FkZHIuc19hZGRyID0gaHRvbmwgKElOQUREUl9BTlkpOw0KKw0KKwlpbnQgc3VjY2VzczsNCisJd2hpbGUgKHRydWUpDQorCXsNCisJCXRhc2tTYWZlKCk7DQorCQkvLyBDcmVhdGUgdGhlIHNvY2tldC4NCisJCWlmICgocGNTb2NrID0gc29ja2V0IChBRl9JTkVULCBTT0NLX1NUUkVBTSwgMCkpID09IEVSUk9SKQ0KKwkJew0KKwkJCXdwaV9zZXRFcnJub0Vycm9yV2l0aENvbnRleHQoIkZhaWxlZCB0byBjcmVhdGUgdGhlIFBDVmlkZW9TZXJ2ZXIgc29ja2V0Iik7DQorCQkJY29udGludWU7DQorCQl9DQorCQkvLyBTZXQgdGhlIFRDUCBzb2NrZXQgc28gdGhhdCBpdCBjYW4gYmUgcmV1c2VkIGlmIGl0IGlzIGluIHRoZSB3YWl0IHN0YXRlLg0KKwkJaW50IHJldXNlQWRkciA9IDE7DQorCQlzZXRzb2Nrb3B0KHBjU29jaywgU09MX1NPQ0tFVCwgU09fUkVVU0VBRERSLCByZWludGVycHJldF9jYXN0PGNoYXIqPigmcmV1c2VBZGRyKSwgc2l6ZW9mKHJldXNlQWRkcikpOw0KKwkJLy8gQmluZCBzb2NrZXQgdG8gbG9jYWwgYWRkcmVzcy4NCisJCWlmIChiaW5kIChwY1NvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKikgJnNlcnZlckFkZHIsIHNvY2tBZGRyU2l6ZSkgPT0gRVJST1IpDQorCQl7DQorCQkJd3BpX3NldEVycm5vRXJyb3JXaXRoQ29udGV4dCgiRmFpbGVkIHRvIGJpbmQgdGhlIFBDVmlkZW9TZXJ2ZXIgcG9ydCIpOw0KKwkJCWNsb3NlIChwY1NvY2spOw0KKwkJCWNvbnRpbnVlOw0KKwkJfQ0KKwkJLy8gQ3JlYXRlIHF1ZXVlIGZvciBjbGllbnQgY29ubmVjdGlvbiByZXF1ZXN0cy4NCisJCWlmIChsaXN0ZW4gKHBjU29jaywgMSkgPT0gRVJST1IpDQorCQl7DQorCQkJd3BpX3NldEVycm5vRXJyb3JXaXRoQ29udGV4dCgiRmFpbGVkIHRvIGxpc3RlbiBvbiB0aGUgUENWaWRlb1NlcnZlciBwb3J0Iik7DQorCQkJY2xvc2UgKHBjU29jayk7DQorCQkJY29udGludWU7DQorCQl9DQorDQorCQlzdHJ1Y3Qgc29ja2FkZHJfaW4gY2xpZW50QWRkcjsNCisJCWludCBjbGllbnRBZGRyU2l6ZTsNCisJCWludCBuZXdQQ1NvY2sgPSBhY2NlcHQgKHBjU29jaywgcmVpbnRlcnByZXRfY2FzdDxzb2NrYWRkcio+KCZjbGllbnRBZGRyKSwgJmNsaWVudEFkZHJTaXplKTsNCisJCWlmIChuZXdQQ1NvY2sgID09IEVSUk9SKQ0KKwkJew0KKwkJCWNsb3NlKHBjU29jayk7DQorCQkJY29udGludWU7DQorCQl9DQorCQkvL1RPRE86IGNoZWNrIGNhbWVyYSBlcnJvcg0KKw0KKwkJLy8gUmVwb3J0IHVzYWdlIHdoZW4gdGhlcmUgaXMgYWN0dWFsbHkgYSBjb25uZWN0aW9uLg0KKwkJblVzYWdlUmVwb3J0aW5nOjpyZXBvcnQoblVzYWdlUmVwb3J0aW5nOjprUmVzb3VyY2VUeXBlX1BDVmlkZW9TZXJ2ZXIsIDApOw0KKw0KKwkJaW50IG51bUJ5dGVzID0gMDsNCisJCWludCBpbWFnZURhdGFTaXplID0gMDsNCisJCWNoYXIqIGltYWdlRGF0YSA9IE5VTEw7DQorDQorCQl3aGlsZSghbV9zdG9wU2VydmVyKQ0KKwkJew0KKwkJCXN1Y2Nlc3MgPSBzZW1UYWtlKG1fbmV3SW1hZ2VTZW0sIDEwMDApOw0KKwkJCWlmIChzdWNjZXNzID09IEVSUk9SKQ0KKwkJCXsNCisJCQkJLy8gSWYgdGhlIHNlbVRha2UgdGltZWQgb3V0LCB0aGVyZSBhcmUgbm8gbmV3IGltYWdlcyBmcm9tIHRoZSBjYW1lcmEuDQorCQkJCWNvbnRpbnVlOw0KKwkJCX0NCisJCQlzdWNjZXNzID0gQXhpc0NhbWVyYTo6R2V0SW5zdGFuY2UoKS5Db3B5SlBFRygmaW1hZ2VEYXRhLCBudW1CeXRlcywgaW1hZ2VEYXRhU2l6ZSk7DQorCQkJaWYgKCFzdWNjZXNzKQ0KKwkJCXsNCisJCQkJLy8gTm8gcG9pbnQgaW4gcnVubmluZyB0b28gZmFzdCAtDQorCQkJCVdhaXQoMS4wKTsNCisJCQkJLy8gSWYgY2FtZXJhIGlzIG5vdCBpbml0aWFsemVkIHlvdSB3aWxsIGdldCBmYWlsdXJlIGFuZA0KKwkJCQkvLyB0aGUgdGltZXN0YW1wIGlzIGludmFsaWQuIFJlc2V0IHRoaXMgdmFsdWUgYW5kIHRyeSBhZ2Fpbi4NCisJCQkJY29udGludWU7DQorCQkJfQ0KKw0KKwkJCS8vIFdyaXRlIGhlYWRlciB0byBQQw0KKwkJCXN0YXRpYyBjb25zdCBjaGFyIGhlYWRlcls0XT17MSwwLDAsMH07DQorCQkJaW50IGhlYWRlclNlbmQgPSB3cml0ZShuZXdQQ1NvY2ssIGNvbnN0X2Nhc3Q8Y2hhcio+KGhlYWRlciksIDQpOw0KKw0KKwkJCS8vIFdyaXRlIGltYWdlIGxlbmd0aCB0byBQQw0KKwkJCWludCBsZW5ndGhTZW5kID0gd3JpdGUobmV3UENTb2NrLCByZWludGVycHJldF9jYXN0PGNoYXIqPigmbnVtQnl0ZXMpLCA0KTsNCisNCisJCQkvLyBXcml0ZSBpbWFnZSB0byBQQw0KKwkJCWludCBzZW50ID0gd3JpdGUgKG5ld1BDU29jaywgaW1hZ2VEYXRhLCBudW1CeXRlcyk7DQorDQorCQkJLy8gVGhlIFBDIHByb2JhYmx5IGNsb3NlZCBjb25uZWN0aW9uLiBHZXQgb3V0IG9mIGhlcmUNCisJCQkvLyBhbmQgdHJ5IGxpc3RlbmluZyBhZ2Fpbi4NCisJCQlpZiAoaGVhZGVyU2VuZCA9PSBFUlJPUiB8fCBsZW5ndGhTZW5kID09IEVSUk9SIHx8IHNlbnQgPT0gRVJST1IpDQorCQkJew0KKwkJCQlicmVhazsNCisJCQl9DQorCQl9DQorCQkvLyBDbGVhbiB1cA0KKwkJZGVsZXRlIFtdIGltYWdlRGF0YTsNCisJCWNsb3NlIChuZXdQQ1NvY2spOw0KKwkJbmV3UENTb2NrID0gRVJST1I7DQorCQljbG9zZSAocGNTb2NrKTsNCisJCXBjU29jayA9IEVSUk9SOw0KKwkJdGFza1Vuc2FmZSgpOw0KKwkJV2FpdCgwLjEpOw0KKwl9DQorCXJldHVybiAoT0spOw0KK30NCisNCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9WaXNpb24vUENWaWRlb1NlcnZlci5oIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvVmlzaW9uL1BDVmlkZW9TZXJ2ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjBhNmYzCi0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvVmlzaW9uL1BDVmlkZW9TZXJ2ZXIuaApAQCAtMCwwICsxLDM5IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy8qIENvcHlyaWdodCAoYykgRklSU1QgMjAwOC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4JCQkJCQkJICAqLw0KKy8qIE9wZW4gU291cmNlIFNvZnR3YXJlIC0gbWF5IGJlIG1vZGlmaWVkIGFuZCBzaGFyZWQgYnkgRlJDIHRlYW1zLiBUaGUgY29kZSAgICovDQorLyogbXVzdCBiZSBhY2NvbXBhbmllZCBieSB0aGUgRklSU1QgQlNEIGxpY2Vuc2UgZmlsZSBpbiAkKFdJTkRfQkFTRSkvV1BJTGliLiAgKi8NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKyNpZm5kZWYgX19QQ19WSURFT19TRVJWRVJfSF9fDQorI2RlZmluZSBfX1BDX1ZJREVPX1NFUlZFUl9IX18NCisNCisjaW5jbHVkZSAiVGFzay5oIg0KKyNpbmNsdWRlIDxzZW1MaWIuaD4NCisNCisvKiogcG9ydCBmb3Igc2VuZGluZyB2aWRlbyB0byBsYXB0b3AgKi8NCisjZGVmaW5lIFZJREVPX1RPX1BDX1BPUlQgMTE4MA0KKw0KKy8qKg0KKyAqIENsYXNzIHRoZSBzZXJ2ZXMgaW1hZ2VzIHRvIHRoZSBQQy4NCisgKi8NCitjbGFzcyBQQ1ZpZGVvU2VydmVyIDogcHVibGljIEVycm9yQmFzZSB7DQorDQorcHVibGljOg0KKwlQQ1ZpZGVvU2VydmVyKCk7DQorCX5QQ1ZpZGVvU2VydmVyKCk7DQorCXVuc2lnbmVkIGludCBSZWxlYXNlKCk7DQorCXZvaWQgU3RhcnQoKTsNCisJdm9pZCBTdG9wKCk7DQorDQorcHJpdmF0ZToNCisJc3RhdGljIGludCBzX1NlcnZlclRhc2soUENWaWRlb1NlcnZlciAqdGhpc1B0cik7DQorCWludCBTZXJ2ZXJUYXNrKCk7DQorCWludCBTdGFydFNlcnZlclRhc2soKTsNCisNCisJVGFzayBtX3NlcnZlclRhc2s7DQorCVNFTV9JRCBtX25ld0ltYWdlU2VtOw0KKwlib29sIG1fc3RvcFNlcnZlcjsNCit9Ow0KKw0KKyNlbmRpZg0KKw0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL1Zpc2lvbi9SR0JJbWFnZS5jcHAgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9WaXNpb24vUkdCSW1hZ2UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjY2E5NWQKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9WaXNpb24vUkdCSW1hZ2UuY3BwCkBAIC0wLDAgKzEsMjggQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorLyogQ29weXJpZ2h0IChjKSBGSVJTVCAyMDA4LiBBbGwgUmlnaHRzIFJlc2VydmVkLgkJCQkJCQkgICovDQorLyogT3BlbiBTb3VyY2UgU29mdHdhcmUgLSBtYXkgYmUgbW9kaWZpZWQgYW5kIHNoYXJlZCBieSBGUkMgdGVhbXMuIFRoZSBjb2RlICAgKi8NCisvKiBtdXN0IGJlIGFjY29tcGFuaWVkIGJ5IHRoZSBGSVJTVCBCU0QgbGljZW5zZSBmaWxlIGluICQoV0lORF9CQVNFKS9XUElMaWIuICAqLw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorI2luY2x1ZGUgIlJHQkltYWdlLmgiDQorDQorLyoqDQorICogQ3JlYXRlIGEgbmV3IGltYWdlIHRoYXQgdXNlcyBSZWQsIEdyZWVuLCBhbmQgQmx1ZSBwbGFuZXMuDQorICovDQorUkdCSW1hZ2U6OlJHQkltYWdlKCkgOiBDb2xvckltYWdlKElNQVFfSU1BR0VfUkdCKQ0KK3sNCit9DQorDQorLyoqDQorICogQ3JlYXRlIGEgbmV3IGltYWdlIGJ5IGxvYWRpbmcgYSBmaWxlLg0KKyAqIEBwYXJhbSBmaWxlTmFtZSBUaGUgcGF0aCBvZiB0aGUgZmlsZSB0byBsb2FkLg0KKyAqLw0KK1JHQkltYWdlOjpSR0JJbWFnZShjb25zdCBjaGFyICpmaWxlTmFtZSkgOiBDb2xvckltYWdlKElNQVFfSU1BR0VfUkdCKQ0KK3sNCisJaW50IHN1Y2Nlc3MgPSBpbWFxUmVhZEZpbGUobV9pbWFxSW1hZ2UsIGZpbGVOYW1lLCBOVUxMLCBOVUxMKTsNCisJd3BpX3NldEltYXFFcnJvcldpdGhDb250ZXh0KHN1Y2Nlc3MsICJJbWFxIFJlYWRGaWxlIGVycm9yIik7DQorfQ0KKw0KK1JHQkltYWdlOjp+UkdCSW1hZ2UoKQ0KK3sNCit9DQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvVmlzaW9uL1JHQkltYWdlLmggYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9WaXNpb24vUkdCSW1hZ2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTc3ZTIyCi0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvVmlzaW9uL1JHQkltYWdlLmgKQEAgLTAsMCArMSwyMyBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBDb3B5cmlnaHQgKGMpIEZJUlNUIDIwMDguIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCQkJCQkJCSAgKi8NCisvKiBPcGVuIFNvdXJjZSBTb2Z0d2FyZSAtIG1heSBiZSBtb2RpZmllZCBhbmQgc2hhcmVkIGJ5IEZSQyB0ZWFtcy4gVGhlIGNvZGUgICAqLw0KKy8qIG11c3QgYmUgYWNjb21wYW5pZWQgYnkgdGhlIEZJUlNUIEJTRCBsaWNlbnNlIGZpbGUgaW4gJChXSU5EX0JBU0UpL1dQSUxpYi4gICovDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisjaWZuZGVmIF9fUkdCX0lNQUdFX0hfXw0KKyNkZWZpbmUgX19SR0JfSU1BR0VfSF9fDQorDQorI2luY2x1ZGUgIkNvbG9ySW1hZ2UuaCINCisNCisvKioNCisgKiBBIGNvbG9yIGltYWdlIHJlcHJlc2VudGVkIGluIFJHQiBjb2xvciBzcGFjZSBhdCAzIGJ5dGVzIHBlciBwaXhlbC4NCisgKi8NCitjbGFzcyBSR0JJbWFnZSA6IHB1YmxpYyBDb2xvckltYWdlDQorew0KK3B1YmxpYzoNCisgICAgUkdCSW1hZ2UoKTsNCisgICAgUkdCSW1hZ2UoY29uc3QgY2hhciAqZmlsZU5hbWUpOw0KKyAgICB2aXJ0dWFsIH5SR0JJbWFnZSgpOw0KK307DQorDQorI2VuZGlmDQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvVmlzaW9uL1RocmVzaG9sZC5jcHAgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9WaXNpb24vVGhyZXNob2xkLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZGNkODJmCi0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvVmlzaW9uL1RocmVzaG9sZC5jcHAKQEAgLTAsMCArMSwxOCBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBDb3B5cmlnaHQgKGMpIEZJUlNUIDIwMDguIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCQkJCQkJCSAgKi8NCisvKiBPcGVuIFNvdXJjZSBTb2Z0d2FyZSAtIG1heSBiZSBtb2RpZmllZCBhbmQgc2hhcmVkIGJ5IEZSQyB0ZWFtcy4gVGhlIGNvZGUgICAqLw0KKy8qIG11c3QgYmUgYWNjb21wYW5pZWQgYnkgdGhlIEZJUlNUIEJTRCBsaWNlbnNlIGZpbGUgaW4gJChXSU5EX0JBU0UpL1dQSUxpYi4gICovDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisjaW5jbHVkZSAiVGhyZXNob2xkLmgiDQorDQorVGhyZXNob2xkOjpUaHJlc2hvbGQoaW50IG5ld19wbGFuZTFMb3csIGludCBuZXdfcGxhbmUxSGlnaCwgaW50IG5ld19wbGFuZTJMb3csDQorCQlpbnQgbmV3X3BsYW5lMkhpZ2gsIGludCBuZXdfcGxhbmUzTG93LCBpbnQgbmV3X3BsYW5lM0hpZ2gpDQorew0KKwlwbGFuZTFMb3cgPSBuZXdfcGxhbmUxTG93Ow0KKwlwbGFuZTFIaWdoID0gbmV3X3BsYW5lMUhpZ2g7DQorCXBsYW5lMkxvdyA9IG5ld19wbGFuZTJMb3c7DQorCXBsYW5lMkhpZ2ggPSBuZXdfcGxhbmUySGlnaDsNCisJcGxhbmUzTG93ID0gbmV3X3BsYW5lM0xvdzsNCisJcGxhbmUzSGlnaCA9IG5ld19wbGFuZTNIaWdoOw0KK30NCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9WaXNpb24vVGhyZXNob2xkLmggYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9WaXNpb24vVGhyZXNob2xkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmFmMjcxOAotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL1Zpc2lvbi9UaHJlc2hvbGQuaApAQCAtMCwwICsxLDMwIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy8qIENvcHlyaWdodCAoYykgRklSU1QgMjAwOC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4JCQkJCQkJICAqLw0KKy8qIE9wZW4gU291cmNlIFNvZnR3YXJlIC0gbWF5IGJlIG1vZGlmaWVkIGFuZCBzaGFyZWQgYnkgRlJDIHRlYW1zLiBUaGUgY29kZSAgICovDQorLyogbXVzdCBiZSBhY2NvbXBhbmllZCBieSB0aGUgRklSU1QgQlNEIGxpY2Vuc2UgZmlsZSBpbiAkKFdJTkRfQkFTRSkvV1BJTGliLiAgKi8NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKyNpZm5kZWYgX19USFJFU0hPTERfSF9fDQorI2RlZmluZSBfX1RIUkVTSE9MRF9IX18NCisNCisvKioNCisgKiBDb2xvciB0aHJlc2hvbGQgdmFsdWVzLg0KKyAqIFRoaXMgb2JqZWN0IHJlcHJlc250cyB0aGUgdGhyZXNob2xkIHZhbHVlcyBmb3IgYW55IHR5cGUgb2YgY29sb3Igb2JqZWN0DQorICogdGhhdCBpcyB1c2VkIGluIGEgdGhyZXNoaG9sZCBvcGVyYXRpb24uIEl0IHNpbXBsaWZpZXMgcGFzc2luZyB2YWx1ZXMNCisgKiBhcm91bmQgaW4gYSBwcm9ncmFtIGZvciBjb2xvciBkZXRlY3Rpb24uDQorICovDQorY2xhc3MgVGhyZXNob2xkIA0KK3sNCitwdWJsaWM6DQorCWludCBwbGFuZTFMb3c7DQorCWludCBwbGFuZTFIaWdoOw0KKwlpbnQgcGxhbmUyTG93Ow0KKwlpbnQgcGxhbmUySGlnaDsNCisJaW50IHBsYW5lM0xvdzsNCisJaW50IHBsYW5lM0hpZ2g7DQorCVRocmVzaG9sZChpbnQgcGxhbmUxTG93LCBpbnQgcGxhbmUxSGlnaCwNCisJCWludCBwbGFuZTJMb3csIGludCBwbGFuZTJIaWdoLA0KKwkJaW50IHBsYW5lM0xvdywgaW50IHBsYW5lM0hpZ2gpOw0KK307DQorDQorI2VuZGlmDQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvVmlzaW9uMjAwOS9BeGlzQ2FtZXJhLmNwcCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL1Zpc2lvbjIwMDkvQXhpc0NhbWVyYS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDNmZTg1NwotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL1Zpc2lvbjIwMDkvQXhpc0NhbWVyYS5jcHAKQEAgLTAsMCArMSwxMDIxIEBACisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisqICBQcm9qZWN0ICAgCQk6IEZJUlNUIE1vdG9yIENvbnRyb2xsZXINCisqICBGaWxlIE5hbWUgIAkJOiBBeGlzQ2FtZXJhLmNwcCAgICAgICAgDQorKiAgQ29udHJpYnV0b3JzIAk6IFRELCBFTEYsIEpERywgU1ZLDQorKiAgQ3JlYXRpb24gRGF0ZSAJOiBKdWx5IDI5LCAyMDA4DQorKiAgUmV2aXNpb24gSGlzdG9yeQk6IFNvdXJjZSBjb2RlICYgcmV2aXNpb24gaGlzdG9yeSBtYWludGFpbmVkIGF0IHNvdXJjZWZvcmdlLldQSS5lZHUgICAgDQorKiAgRmlsZSBEZXNjcmlwdGlvbgk6IEF4aXMgY2FtZXJhIGFjY2VzcyBmb3IgdGhlIEZJUlNUIFZpc2lvbiBBUEkNCisqICAgICAgVGhlIGNhbWVyYSB0YXNrIHJ1bnMgYXMgYW4gaW5kZXBlbmRlbnQgdGhyZWFkIA0KKyovICAgIA0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorLyogICAgICAgIENvcHlyaWdodCAoYykgRklSU1QgMjAwOC4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgKi8NCisvKiAgT3BlbiBTb3VyY2UgU29mdHdhcmUgLSBtYXkgYmUgbW9kaWZpZWQgYW5kIHNoYXJlZCBieSBGUkMgdGVhbXMuIFRoZSBjb2RlICAqLw0KKy8qICBtdXN0IGJlIGFjY29tcGFuaWVkIGJ5IHRoZSBGSVJTVCBCU0QgbGljZW5zZSBmaWxlIGluICQoV0lORF9CQVNFKS9XUElMaWIuICovDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8gICAgICAgICAgICAgICAgICAgDQorDQorDQorI2luY2x1ZGUgInNvY2tMaWIuaCIgDQorI2luY2x1ZGUgInZ4V29ya3MuaCIgDQorDQorI2luY2x1ZGUgImVycm5vLmgiDQorI2luY2x1ZGUgImZpb0xpYi5oIg0KKyNpbmNsdWRlICJob3N0TGliLmgiIA0KKyNpbmNsdWRlICJpbmV0TGliLmgiIA0KKyNpbmNsdWRlICJzaWduYWwuaCINCisjaW5jbHVkZSAic2lnTGliLmgiCQkvLyBmb3Igc2lnbmFsDQorI2luY2x1ZGUgPHN0cmluZz4NCisjaW5jbHVkZSAidGltZS5oIg0KKyNpbmNsdWRlICJ1c3JMaWIuaCINCisNCisjaW5jbHVkZSAiQXhpc0NhbWVyYS5oIiANCisjaW5jbHVkZSAiQmFlVXRpbGl0aWVzLmgiDQorI2luY2x1ZGUgIkZyY0Vycm9yLmgiDQorI2luY2x1ZGUgIlRhc2suaCINCisjaW5jbHVkZSAiVGltZXIuaCINCisjaW5jbHVkZSAiVmlzaW9uQVBJLmgiDQorDQorLyoqIHBhY2tldCBzaXplICovDQorI2RlZmluZSBERUZBVUxUX1BBQ0tFVF9TSVpFIDUxMg0KKw0KKy8qKiBQcml2YXRlIE5JIGZ1bmN0aW9uIHRvIGRlY29kZSBKUEVHICovIA0KK0lNQVFfRlVOQyBpbnQgUHJpdl9SZWFkSlBFR1N0cmluZ19DKEltYWdlKiBfaW1hZ2UsIGNvbnN0IHVuc2lnbmVkIGNoYXIqIF9zdHJpbmcsIFVJTlQzMiBfc3RyaW5nTGVuZ3RoKTsgDQorDQorLy8gVG8gbG9jYWxseSBlbmFibGUgZGVidWcgcHJpbnRpbmc6IHNldCBBeGlzQ2FtZXJhX2RlYnVnRmxhZyB0byBhIDEsIHRvIGRpc2FibGUgc2V0IHRvIDANCitpbnQgQXhpc0NhbWVyYV9kZWJ1Z0ZsYWcgPSAwOw0KKyNkZWZpbmUgRFBSSU5URiBpZihBeGlzQ2FtZXJhX2RlYnVnRmxhZylkcHJpbnRmDQorDQorLyoqIEBicmllZiBDYW1lcmEgZGF0YSB0byBiZSBhY2Nlc3NlZCBnbG9iYWxseSAqLw0KK3N0cnVjdCB7DQorCWludCByZWFkZXJQSUQ7IC8vIFNldCB0byB0YXNrSUQgZm9yIHNpZ25hbGluZw0KKwlpbnQgaW5kZXg7IC8qIC0xLDAsMSAqLw0KKwlpbnQJYWNxdWlyZTsgLyogMDpTVE9QIENBTUVSQTsgMTpTVEFSVCBDQU1FUkEgKi8NCisJaW50IGNhbWVyYVJlYWR5OyAgLyogMDogQ0FNRVJBIE5PVCBJTklUSUFMSVpFRDsgMTogQ0FNRVJBIElOSVRJQUxJWkVEICovDQorCWludAlkZWNvZGU7IC8qIDA6ZGlzYWJsZSBkZWNvZGluZzsgMTplbmFibGUgZGVjb2RpbmcgdG8gSFNMIEltYWdlICovDQorCXN0cnVjdCB7DQorCQkvLw0KKwkJLy8gVG8gZmluZCB0aGUgbGF0ZXN0IGltYWdlIHRpbWVzdGFtcCwgYWNjZXNzOg0KKwkJLy8gZ2xvYmFsQ2FtZXJhLmRhdGFbZ2xvYmFsQ2FtZXJhLmluZGV4XS50aW1lc3RhbXANCisJCS8vDQorCQlkb3VibGUgdGltZXN0YW1wOyAgICAgICAvLyB3aGVuIGltYWdlIHdhcyB0YWtlbg0KKwkJY2hhcioJY2FtZXJhSW1hZ2U7ICAgIC8vIGpwZWcgaW1hZ2Ugc3RyaW5nDQorCQlpbnQgY2FtZXJhSW1hZ2VTaXplOyAgICAvLyBpbWFnZSBzaXplDQorCQlJbWFnZSogZGVjb2RlZEltYWdlOyAgICAvLyBpbWFnZSBkZWNvZGVkIHRvIE5JIEltYWdlIG9iamVjdA0KKwkJaW50IGRlY29kZWRJbWFnZVNpemU7ICAgLy8gc2l6ZSBvZiBkZWNvZGVkIGltYWdlDQorCX1kYXRhWzJdOw0KKwlpbnQgY2FtZXJhTWV0cmljc1tDQU1fTlVNX01FVFJJQ1NdOw0KK31nbG9iYWxDYW1lcmE7DQorDQorLyogcnVuIGZsYWcgKi8NCitzdGF0aWMgc2hvcnQgY29udCA9IDA7DQorDQorLyoqDQorICogQGJyaWVmIEdldCB0aGUgbW9zdCByZWNlbnQgY2FtZXJhIGltYWdlLg0KKyAqIFN1cHBvcnRzIElNQVFfSU1BR0VfUkdCIGFuZCBJTUFRX0lNQUdFX0hTTC4NCisgKiBAcGFyYW0gaW1hZ2UgSW1hZ2UgdG8gcmV0dXJuIHRvOyBpbWFnZSBtdXN0IGhhdmUgYmVlbiBmaXJzdCBjcmVhdGVkIHVzaW5nIGZyY0NyZWF0ZUltYWdlLiANCisgKiBXaGVuIHlvdSBhcmUgZG9uZSwgdXNlIGZyY0Rpc3Bvc2UuDQorICogQHBhcmFtIHRpbWVzdGFtcCBUaW1lc3RhbXAgdG8gcmV0dXJuOyB3aWxsIHJlY29yZCB0aGUgdGltZSBhdCB3aGljaCB0aGUgaW1hZ2Ugd2FzIHN0b3JlZC4NCisgKiBAcGFyYW0gbGFzdEltYWdlVGltZXN0YW1wIElucHV0IC0gdGltZXN0YW1wIG9mIGxhc3QgaW1hZ2U7IHByZXZlbnRzIHNlcnZpbmcgb2Ygc3RhbGUgaW1hZ2VzDQorICogQHJldHVybiAwIGlzIGZhaWx1cmUsIDEgaXMgc3VjY2Vzcw0KKyAqIEBzYSBmcmNDcmVhdGVJbWFnZSgpLCBmcmNEaXNwb3NlKCkNCisgKi8NCitpbnQgR2V0SW1hZ2VCbG9ja2luZyhJbWFnZSogaW1hZ2UsIGRvdWJsZSAqdGltZXN0YW1wLCBkb3VibGUgbGFzdEltYWdlVGltZXN0YW1wKQ0KK3sNCisJY2hhciBmdW5jTmFtZVtdPSJHZXRJbWFnZUJsb2NraW5nIjsNCisJaW50IHN1Y2Nlc3M7DQorCWRvdWJsZSBzdGFydFRpbWUgPSBHZXRUaW1lKCk7DQorCQ0KKwl3aGlsZSAoMSkNCisJew0KKwkJc3VjY2VzcyA9IEdldEltYWdlKGltYWdlLCB0aW1lc3RhbXApOw0KKwkJaWYgKCFzdWNjZXNzKSByZXR1cm4gKHN1Y2Nlc3MpOw0KKwkJDQorCQlpZiAoKnRpbWVzdGFtcCA+IGxhc3RJbWFnZVRpbWVzdGFtcCkNCisJCQlyZXR1cm4gKDEpOyAvLyBHT09EIElNQUdFIFJFVFVSTkVEDQorDQorCQlpZiAoR2V0VGltZSgpID4gKHN0YXJ0VGltZSArIE1BWF9CTE9DS0lOR19USU1FX1NFQykpDQorCQl7DQorCQkJaW1hcVNldEVycm9yKEVSUl9DQU1FUkFfQkxPQ0tJTkdfVElNRU9VVCwgZnVuY05hbWUpOw0KKwkJCWdsb2JhbENhbWVyYS5jYW1lcmFNZXRyaWNzW0NBTV9CTE9DS0lOR19USU1FT1VUXSsrOw0KKwkJCXJldHVybiAoMCk7IC8vIE5PIElNQUdFIEFWQUlMQUJMRSBXSVRISU4gc3BlY2lmaWVkIHRpbWUNCisJCX0NCisJCWdsb2JhbENhbWVyYS5jYW1lcmFNZXRyaWNzW0NBTV9CTE9DS0lOR19DT1VOVF0rKzsNCisJCXRhc2tEZWxheSAoMSk7DQorCX0NCit9DQorDQorLyoqDQorICogQGJyaWVmIFZlcmlmaWVzIHRoYXQgdGhlIGNhbWVyYSBpcyBpbml0aWFsaXplZA0KKyAqIEByZXR1cm4gMCBmb3IgZmFpbHVyZSwgMSBmb3Igc3VjY2Vzcw0KKyAqLw0KK2ludCBDYW1lcmFJbml0aWFsaXplZCgpDQorew0KKwljaGFyIGZ1bmNOYW1lW109IkNhbWVyYUluaXRpYWxpemVkIjsNCisJaW50IHN1Y2Nlc3MgPSAwOw0KKwkvKiBjaGVjayB0byBzZWUgaWYgY2FtZXJhIGlzIGluaXRpYWxpemVkICovDQorCWlmICghZ2xvYmFsQ2FtZXJhLmNhbWVyYVJlYWR5KSAgew0KKwkJaW1hcVNldEVycm9yKEVSUl9DQU1FUkFfTk9UX0lOSVRJQUxJWkVELCBmdW5jTmFtZSk7DQorCQlEUFJJTlRGIChMT0dfREVCVUcsICJDYW1lcmEgcmVxdWVzdCBiZWZvcmUgY2FtZXJhIGlzIGluaXRpYWxpemVkIik7DQorCQlnbG9iYWxDYW1lcmEuY2FtZXJhTWV0cmljc1tDQU1fR0VUSU1BR0VfQkVGT1JFX0lOSVRdKys7DQorCQlnbG9iYWxDYW1lcmEuY2FtZXJhTWV0cmljc1tDQU1fR0VUSU1BR0VfRkFJTFVSRV0rKzsNCisJCXJldHVybiBzdWNjZXNzOw0KKwl9DQorCQ0KKwlpZiAoZ2xvYmFsQ2FtZXJhLmluZGV4ID09IC0xKXsNCisJCWltYXFTZXRFcnJvcihFUlJfQ0FNRVJBX05PX0JVRkZFUl9BVkFJTEFCTEUsIGZ1bmNOYW1lKTsNCisJCURQUklOVEYgKExPR19ERUJVRywgIk5vIGNhbWVyYSBpbWFnZSBhdmFpbGFibGUiKTsNCisJCWdsb2JhbENhbWVyYS5jYW1lcmFNZXRyaWNzW0NBTV9HRVRJTUFHRV9CRUZPUkVfQVZBSUxBQkxFXSsrOw0KKwkJZ2xvYmFsQ2FtZXJhLmNhbWVyYU1ldHJpY3NbQ0FNX0dFVElNQUdFX0ZBSUxVUkVdKys7DQorCQlyZXR1cm4gc3VjY2VzczsNCisJfQ0KKwlyZXR1cm4gMTsNCit9DQorDQorLyoqDQorICogQGJyaWVmIEdldHMgdGhlIG1vc3QgcmVjZW50IGNhbWVyYSBpbWFnZSwgYXMgbG9uZyBhcyBpdCBpcyBub3Qgc3RhbGUuDQorICogU3VwcG9ydGVkIGltYWdlIHR5cGVzOiBJTUFRX0lNQUdFX1JHQiwgSU1BUV9JTUFHRV9IU0wNCisgKiBAcGFyYW0gaW1hZ2UgSW1hZ2UgdG8gcmV0dXJuLCBtdXN0IGhhdmUgZmlyc3QgYmVlbiBjcmVhdGVkIHdpdGggZnJjQ3JlYXRlSW1hZ2Ugb3IgaW1hcUNyZWF0ZS4gDQorICogV2hlbiB5b3UgZmluaXNoIHdpdGggdGhlIGltYWdlLCBjYWxsIGZyY0Rpc3Bvc2UoKSB0byBkaXNwb3NlIG9mIGl0Lg0KKyAqIEBwYXJhbSB0aW1lc3RhbXAgUmV0dXJuZWQgdGltZXN0YW1wIG9mIHdoZW4gdGhlIGltYWdlIHdhcyB0YWtlbiBmcm9tIHRoZSBjYW1lcmENCisgKiBAcmV0dXJuIGZhaWx1cmUgPSAwLCBzdWNjZXNzID0gMQ0KKyAqLw0KK2ludCBHZXRJbWFnZShJbWFnZSogaW1hZ2UsIGRvdWJsZSAqdGltZXN0YW1wKQ0KK3sNCisJY2hhciBmdW5jTmFtZVtdPSJHZXRJbWFnZSI7DQorCWludCBzdWNjZXNzID0gMDsNCisJaW50IHJlYWRJbmRleDsNCisJaW50CXJlYWRDb3VudCA9IDEwOw0KKwlkb3VibGUgY3VycmVudFRpbWUgPSB0aW1lKE5VTEwpOw0KKwlkb3VibGUgY3VycmVudEltYWdlVGltZXN0YW1wOw0KKw0KKwkvKiBjaGVjayB0byBzZWUgaWYgY2FtZXJhIGlzIGluaXRpYWxpemVkICovDQorCQ0KKwlpZiAoIUNhbWVyYUluaXRpYWxpemVkKCkpIHtyZXR1cm4gc3VjY2Vzczt9DQorCQ0KKwkvKiB0cnkgcmVhZENvdW50IHRpbWVzIHRvIGdldCBhbiBpbWFnZSAqLw0KKwl3aGlsZSAocmVhZENvdW50KSB7DQorCQlyZWFkSW5kZXggPSBnbG9iYWxDYW1lcmEuaW5kZXg7DQorCQlpZiAoIWltYXFEdXBsaWNhdGUoaW1hZ2UsIGdsb2JhbENhbWVyYS5kYXRhW3JlYWRJbmRleF0uZGVjb2RlZEltYWdlKSkgew0KKwkJCWludCBlcnJvckNvZGUgPSBHZXRMYXN0VmlzaW9uRXJyb3IoKTsgDQorCQkJRFBSSU5URiAoTE9HX0RFQlVHLCJFcnJvciBkdXBsaWNhdGluZyBpbWFnZT0gJWkgICVzICIsIGVycm9yQ29kZSwgR2V0VmlzaW9uRXJyb3JUZXh0KGVycm9yQ29kZSkpOwkJCQ0KKwkJfQ0KKwkJLy8gc2F2ZSB0aGUgdGltZXN0YW1wIHRvIGNoZWNrIGJlZm9yZSByZXR1cm5pbmcNCisJCWN1cnJlbnRJbWFnZVRpbWVzdGFtcCA9IGdsb2JhbENhbWVyYS5kYXRhW3JlYWRJbmRleF0udGltZXN0YW1wOw0KKwkJDQorCQkvLyBtYWtlIHN1cmUgdGhpcyBidWZmZXIgaXMgbm90IGJlaW5nIHdyaXR0ZW4gdG8gbm93DQorCQlpZiAocmVhZEluZGV4ID09IGdsb2JhbENhbWVyYS5pbmRleCkgYnJlYWs7DQorCQlyZWFkQ291bnQtLTsNCisJfQ0KKwkNCisJLyogd2VyZSB3ZSBzdWNjZXNzZnVsID8gKi8NCisJaWYgKHJlYWRDb3VudCl7DQorCQlzdWNjZXNzID0gMTsNCisJCWlmICh0aW1lc3RhbXAgIT0gTlVMTCkNCisJCQkgICp0aW1lc3RhbXAgPSBjdXJyZW50SW1hZ2VUaW1lc3RhbXA7IC8vIFJldHVybiBpbWFnZSB0aW1lc3RhbXAJICANCisJfSBlbHNlew0KKwkJZ2xvYmFsQ2FtZXJhLmNhbWVyYU1ldHJpY3NbQ0FNX0dFVElNQUdFX0ZBSUxVUkVdKys7DQorCX0NCisJDQorCS8qIEVuc3VyZSB0aGUgYnVmZmVyZWQgaW1hZ2UgaXMgbm90IHRvbyBvbGQgLSBzZXQgdGhpcyAic3RhbGUgdGltZSIgYWJvdmUgKi8NCisJaWYgKGN1cnJlbnRUaW1lID4gZ2xvYmFsQ2FtZXJhLmRhdGFbZ2xvYmFsQ2FtZXJhLmluZGV4XS50aW1lc3RhbXAgKyBDQU1FUkFfSU1BR0VfU1RBTEVfVElNRV9TRUMpew0KKwkJRFBSSU5URiAoTE9HX0NSSVRJQ0FMLCAiU1RBTEUgY2FtZXJhIGltYWdlIChUSElTIENPVUxEIEJFIEEgQkFEIElNQUdFKSIpOw0KKwkJaW1hcVNldEVycm9yKEVSUl9DQU1FUkFfU1RBTEVfSU1BR0UsIGZ1bmNOYW1lKTsNCisJCWdsb2JhbENhbWVyYS5jYW1lcmFNZXRyaWNzW0NBTV9TVEFMRV9JTUFHRV0rKzsNCisJCWdsb2JhbENhbWVyYS5jYW1lcmFNZXRyaWNzW0NBTV9HRVRJTUFHRV9GQUlMVVJFXSsrOw0KKwkJc3VjY2VzcyA9IDA7DQorCX0NCisJZ2xvYmFsQ2FtZXJhLmNhbWVyYU1ldHJpY3NbQ0FNX0dFVElNQUdFX1NVQ0NFU1NdKys7DQorCXJldHVybiBzdWNjZXNzOw0KK30NCisNCisvKioNCisgKiBAYnJpZWYgTWV0aG9kIHRvIGdldCBhIHJhdyBpbWFnZSBmcm9tIHRoZSBidWZmZXINCisgKiBAcGFyYW0gaW1hZ2VEYXRhIHJldHVybmVkIGltYWdlIGRhdGENCisgKiBAcGFyYW0gbnVtQnl0ZXMgcmV0dXJuZWQgbnVtYmVyIG9mIGJ5dGVzIGluIGJ1ZmZlcg0KKyAqIEBwYXJhbSBjdXJyZW50SW1hZ2VUaW1lc3RhbXAgcmV0dXJuZWQgYnVmZmVyIHRpbWUgb2YgaW1hZ2UgZGF0YQ0KKyAqIEByZXR1cm4gMCBpZiBmYWlsdXJlOyAxIGlmIHN1Y2Nlc3MNCisgKi8NCitpbnQgR2V0SW1hZ2VEYXRhKGNoYXIqKiBpbWFnZURhdGEsIGludCogbnVtQnl0ZXMsIGRvdWJsZSogY3VycmVudEltYWdlVGltZXN0YW1wKQ0KK3sNCisJaW50IHN1Y2Nlc3MgPSAwOw0KKwlpbnQgcmVhZEluZGV4Ow0KKwlpbnQJcmVhZENvdW50ID0gMTA7DQorCWludCBjYW1lcmFJbWFnZVNpemU7DQorCWNoYXIgKmNhbWVyYUltYWdlU3RyaW5nOw0KKw0KKwkvKiBjaGVjayB0byBzZWUgaWYgY2FtZXJhIGlzIGluaXRpYWxpemVkICovDQorCQkJDQorCWlmICghQ2FtZXJhSW5pdGlhbGl6ZWQoKSkge3JldHVybiBzdWNjZXNzO30NCisJCQkNCisJLyogdHJ5IHJlYWRDb3VudCB0aW1lcyB0byBnZXQgYW4gaW1hZ2UgKi8NCisJd2hpbGUgKHJlYWRDb3VudCkgew0KKwkJcmVhZEluZGV4ID0gZ2xvYmFsQ2FtZXJhLmluZGV4Ow0KKwkJY2FtZXJhSW1hZ2VTaXplID0gZ2xvYmFsQ2FtZXJhLmRhdGFbcmVhZEluZGV4XS5jYW1lcmFJbWFnZVNpemU7DQorCQkvL2NhbWVyYUltYWdlU3RyaW5nID0gKEltYWdlICopIG1hbGxvYyhjYW1lcmFJbWFnZVNpemUpOw0KKwkJY2FtZXJhSW1hZ2VTdHJpbmcgPSBuZXcgY2hhcltjYW1lcmFJbWFnZVNpemVdOw0KKwkJaWYgKE5VTEwgPT0gY2FtZXJhSW1hZ2VTdHJpbmcpIHsNCisJCQkJCURQUklOVEYgKExPR19ERUJVRywgIlVuYWJsZSB0byBhbGxvY2F0ZSBjYW1lcmFJbWFnZSIpOw0KKwkJCQkJZ2xvYmFsQ2FtZXJhLmNhbWVyYU1ldHJpY3NbQ0FNX0dFVElNQUdFX0ZBSUxVUkVdKys7DQorCQkJCQlyZXR1cm4gc3VjY2VzczsNCisJCX0NCisJCW1lbWNweSAoY2FtZXJhSW1hZ2VTdHJpbmcsIGdsb2JhbENhbWVyYS5kYXRhW3JlYWRJbmRleF0uY2FtZXJhSW1hZ2UsIGNhbWVyYUltYWdlU2l6ZSk7DQorCQkqY3VycmVudEltYWdlVGltZXN0YW1wID0gZ2xvYmFsQ2FtZXJhLmRhdGFbcmVhZEluZGV4XS50aW1lc3RhbXA7DQorCQkvLyBtYWtlIHN1cmUgdGhpcyBidWZmZXIgaXMgbm90IGJlaW5nIHdyaXR0ZW4gdG8gbm93DQorCQlpZiAocmVhZEluZGV4ID09IGdsb2JhbENhbWVyYS5pbmRleCkgYnJlYWs7DQorCQlmcmVlIChjYW1lcmFJbWFnZVN0cmluZyk7DQorCQlyZWFkQ291bnQtLTsNCisJfQ0KKwlpZiAocmVhZENvdW50KXsNCisJCSppbWFnZURhdGEgPSBjYW1lcmFJbWFnZVN0cmluZzsNCisJCSpudW1CeXRlcyA9IGNhbWVyYUltYWdlU2l6ZTsNCisJCXJldHVybiAxOw0KKwl9CQkNCisJcmV0dXJuIChPSyk7DQorfQ0KKw0KKy8qKg0KKyAqIEBicmllZiBCbG9ja2luZyBjYWxsIHRvIGdldCBpbWFnZXMgZm9yIFBDLg0KKyAqIFRoaXMgc2hvdWxkIGJlIGNhbGxlZCBmcm9tIGEgc2VwYXJhdGUgdGFzayB0byBtYWludGFpbiBjYW1lcmEgcmVhZCBwZXJmb3JtYW5jZS4gDQorICogSXQgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCBmb3Igc2VuZGluZyByYXcgKHVuZGVjb2RlZCkgaW1hZ2UgZGF0YSB0byB0aGUgUEMuDQorICogQHBhcmFtIGltYWdlRGF0YSBpbWFnZSBkYXRhIHRvIHJldHVybg0KKyAqIEBwYXJhbSBudW1CeXRlcyBudW1iZXIgb2YgYnl0ZXMgaW4gYnVmZmVyDQorICogQHBhcmFtIHRpbWVzdGFtcCB0aW1lc3RhbXAgb2YgYnVmZmVyIHJldHVybmVkDQorICogQHBhcmFtIGxhc3RJbWFnZVRpbWVzdGFtcCBidWZmZXIgdGltZSBvZiBsYXN0IGltYWdlIGRhdGEgc2VudCB0byBQQw0KKyAqIEByZXR1cm4gMCBpZiBmYWlsdXJlOyAxIGlmIHN1Y2Nlc3MNCisgKi8NCitpbnQgR2V0SW1hZ2VEYXRhQmxvY2tpbmcoY2hhcioqIGltYWdlRGF0YSwgaW50KiBudW1CeXRlcywgZG91YmxlKiB0aW1lc3RhbXAsIGRvdWJsZSBsYXN0SW1hZ2VUaW1lc3RhbXApDQorew0KKw0KKwljaGFyIGZ1bmNOYW1lW109IkdldEltYWdlRGF0YUJsb2NraW5nIjsNCisJaW50IHN1Y2Nlc3M7DQorCWRvdWJsZSBzdGFydFRpbWUgPSBHZXRUaW1lKCk7DQorCQ0KKyAgICAqaW1hZ2VEYXRhID0gTlVMTDsNCisJd2hpbGUgKDEpDQorCXsNCisJCXN1Y2Nlc3MgPSBHZXRJbWFnZURhdGEoaW1hZ2VEYXRhLCBudW1CeXRlcywgdGltZXN0YW1wKTsNCisJCWlmICghc3VjY2VzcykgcmV0dXJuIChzdWNjZXNzKTsNCisJCQ0KKwkJaWYgKCp0aW1lc3RhbXAgPiBsYXN0SW1hZ2VUaW1lc3RhbXApDQorCQkJcmV0dXJuICgxKTsgLy8gR09PRCBJTUFHRSBEQVRBIFJFVFVSTkVEDQorDQorICAgICAgICBkZWxldGUgKmltYWdlRGF0YTsNCisgICAgICAgICppbWFnZURhdGEgPSBOVUxMOw0KKw0KKwkJaWYgKEdldFRpbWUoKSA+IChzdGFydFRpbWUgKyBNQVhfQkxPQ0tJTkdfVElNRV9TRUMpKQ0KKwkJew0KKwkJCWltYXFTZXRFcnJvcihFUlJfQ0FNRVJBX0JMT0NLSU5HX1RJTUVPVVQsIGZ1bmNOYW1lKTsNCisJCQlyZXR1cm4gKDApOyAvLyBOTyBJTUFHRSBBVkFJTEFCTEUgV0lUSElOIHNwZWNpZmllZCB0aW1lDQorCQl9DQorCQlnbG9iYWxDYW1lcmEuY2FtZXJhTWV0cmljc1tDQU1fQkxPQ0tJTkdfQ09VTlRdKys7DQorCQl0YXNrRGVsYXkgKDEpOw0KKwl9DQorfQ0KKw0KKy8qKg0KKyAqIEBicmllZiBBY2Nlc3NvciBmb3IgY2FtZXJhIGluc3RydW1lbnRhdGlvbiBkYXRhDQorICogQHBhcmFtIHRoZSBjb3VudGVyIHF1ZXJpZWQNCisgKiBAcmV0dXJuIHRoZSBjb3VudGVyIHZhbHVlDQorICovDQoraW50IEdldENhbWVyYU1ldHJpYyhGcmN2Q2FtZXJhTWV0cmljIG1ldHJpYykNCit7CXJldHVybiBnbG9iYWxDYW1lcmEuY2FtZXJhTWV0cmljc1ttZXRyaWNdOyAgfQ0KKw0KKy8qKg0KKyAqIEBicmllZiBDbG9zZSBzb2NrZXQgJiByZXBvcnQgZXJyb3INCisgKiBAcGFyYW0gZXJyc3RyaW5nIFN0cmluZyB0byBwcmludA0KKyAqIEBwYXJhbSBzb2NrZXQgU29ja2V0IHRvIGNsb3NlDQorICogQHJldHVybiBlcnJvcg0KKyAqLw0KK2ludCBDYW1lcmFDbG9zZVNvY2tldChjaGFyICplcnJzdHJpbmcsIGludCBzb2NrZXQpDQorew0KKwlEUFJJTlRGIChMT0dfQ1JJVElDQUwsICJDbG9zaW5nIHNvY2tldCAtIENBTUVSQSBFUlJPUjogJXMiLCBlcnJzdHJpbmcgKTsNCisJY2xvc2UgKHNvY2tldCk7DQorCXJldHVybiAoRVJST1IpOw0KK30NCisNCisNCisvKioNCisgKiBAYnJpZWYgUmVhZHMgb25lIGxpbmUgZnJvbSB0aGUgVENQIHN0cmVhbS4NCisgKiBAcGFyYW0gY2FtU29jayAgICAgICAgIFRoZSBzb2NrZXQuDQorICogQHBhcmFtIGJ1ZmZlciAgICAgICAgICBBIGJ1ZmZlciB3aXRoIGJ1ZlNpemUgYWxsb2NhdGVkIGZvciBpdC4gDQorICogICAgICAgICAgICAgICAgICAgICAgICBPbiByZXR1cm4sIGJ1ZlNpemUtMSBhbW91bnQgb2YgZGF0YSBvciBkYXRhIHVwdG8gZmlyc3QgbGluZSBlbmRpbmcNCisgKiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWNoZXZlciBpcyBzbWFsbGVyLCBudWxsIHRlcm1pbmF0ZWQuDQorICogQHBhcmFtIGJ1ZlNpemUgICAgICAgICBUaGUgc2l6ZSBvZiBidWZmZXIuDQorICogQHBhcmFtIHN0cmlwTGluZUVuZGluZyBJZiB0cnVlLCBzdHJpcHMgdGhlIGxpbmUgZW5kaW5nIGNoYWN0ZXJzIGZyb20gdGhlIGJ1ZmZlciBiZWZvcmUgcmV0dXJuLg0KKyAqIEByZXR1cm4gMCBpZiBmYWlsdXJlOyAxIGlmIHN1Y2Nlc3MNCisqLw0KK3N0YXRpYyBpbnQgQ2FtZXJhUmVhZExpbmUoaW50IGNhbVNvY2ssIGNoYXIqIGJ1ZmZlciwgaW50IGJ1ZlNpemUsIGJvb2wgc3RyaXBMaW5lRW5kaW5nKSB7DQorCWNoYXIgZnVuY05hbWVbXT0iQ2FtZXJhUmVhZExpbmUiOw0KKyAgICAvLyBOZWVkIGF0IGxlYXN0IDMgYnl0ZXMgaW4gdGhlIGJ1ZmZlciB0byBwdWxsIHRoaXMgb2ZmLg0KKwlpZiAoYnVmU2l6ZSA8IDMpIHsNCisJCWltYXFTZXRFcnJvcihFUlJfQ0FNRVJBX0ZBSUxVUkUsIGZ1bmNOYW1lKTsNCisJCXJldHVybiAwOw0KKwl9DQorICAgIC8vICBSZWR1Y2Ugc2l6ZSBieSAxIHRvIGFsbG93IGZvciBudWxsIHRlcm1pbmF0b3IuDQorICAgIC0tYnVmU2l6ZTsNCisgICAgLy8gIFJlYWQgdXB0byBidWZTaXplIGNoYXJhY3RlcnMuDQorICAgIGZvciAoaW50IGk9MDtpIDwgYnVmU2l6ZTsrK2ksICsrYnVmZmVyKSB7DQorICAgICAgICAvLyAgUmVhZCBvbmUgY2hhcmFjdGVyLg0KKyAgICAgICAgaWYgKHJlYWQgKGNhbVNvY2ssIGJ1ZmZlciwgMSkgPD0gMCkgew0KKyAgICAJCWltYXFTZXRFcnJvcihFUlJfQ0FNRVJBX0ZBSUxVUkUsIGZ1bmNOYW1lKTsNCisgICAgICAgICAgICByZXR1cm4gMDsNCisgICAgICAgIH0NCisgICAgICAgIC8vICBMaW5lIGVuZGluZ3MgY2FuIGJlICJcclxuIiBvciBqdXN0ICJcbiIuIFNvIGFsd2F5cyANCisgICAgICAgIC8vICBsb29rIGZvciBhICJcbiIuIElmIHlvdSBnb3QganVzdCBhICJcbiIgYW5kIA0KKyAgICAgICAgLy8gIHN0cmlwTGluZUVuZGluZyBpcyBmYWxzZSwgdGhlbiBjb252ZXJ0IGl0IGludG8gYSBcclxuDQorICAgICAgICAvLyAgYmVjYXVzZSBjYWxsZXJzIGV4cGVjdCBhIFxyXG4uDQorICAgICAgICAvLyAgSWYgdGhlIGNvbWJpbmF0aW9uIG9mIHRoZSBwcmV2aW91cyBjaGFyYWN0ZXIgYW5kIHRoZSBjdXJyZW50IGNoYXJhY3Rlcg0KKyAgICAgICAgLy8gIGlzICJcclxuIiwgdGhlIGxpbmUgZW5kaW5nDQorICAgICAgICBpZiAoKmJ1ZmZlcj09J1xuJykgew0KKyAgICAgICAgICAgIC8vICBJZiBhc2tlZCB0byBzdHJpcCB0aGUgbGluZSBlbmRpbmcsIHRoZW4gc2V0IHRoZSBidWZmZXIgdG8gdGhlIHByZXZpb3VzIA0KKyAgICAgICAgICAgIC8vICBjaGFyYWN0ZXIuDQorICAgICAgICAgICAgaWYgKHN0cmlwTGluZUVuZGluZykgew0KKyAgICAgICAgICAgICAgICBpZiAoaSA+IDAgJiYgKihidWZmZXItMSk9PSdccicpIHsNCisgICAgICAgICAgICAgICAgICAgIC0tYnVmZmVyOw0KKyAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIGVsc2Ugew0KKyAgICAgICAgICAgICAgICAvLyAgSWYgdGhlIHByZXZpb3VzIGNoYXJhY3RlciB3YXMgbm90IGEgJ1xyJywgDQorICAgICAgICAgICAgICAgIGlmIChpID09IDAgfHwgKihidWZmZXItMSkhPSdccicpIHsNCisgICAgICAgICAgICAgICAgICAgIC8vICBNYWtlIHRoZSBjdXJyZW50IGNoYXJhY3RlciBhICdccicuDQorICAgICAgICAgICAgICAgICAgICAqYnVmZmVyID0gJ1xyJzsNCisgICAgICAgICAgICAgICAgICAgIC8vICBJZiBzcGFjZSBwZXJtaXRzLCBhZGQgYmFjayB0aGUgJ1xuJy4NCisgICAgICAgICAgICAgICAgICAgIGlmIChpIDwgYnVmU2l6ZS0xKSB7DQorICAgICAgICAgICAgICAgICAgICAgICAgKytidWZmZXI7DQorICAgICAgICAgICAgICAgICAgICAgICAgKmJ1ZmZlciA9ICdcbic7DQorICAgICAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgLy8gIFNldCB0aGUgYnVmZmVyIHBhc3QgdGhlIGN1cnJlbnQgY2hhcmFjdGVyICgnXG4nKQ0KKyAgICAgICAgICAgICAgICArK2J1ZmZlcjsNCisgICAgICAgICAgICB9DQorICAgICAgICAgICAgYnJlYWs7DQorICAgICAgICB9DQorICAgIH0NCisgICAgLy8gIE51bGwgdGVybWluYXRlLg0KKyAgICAqYnVmZmVyID0gJ1wwJzsNCisgICAgcmV0dXJuIDE7DQorfQ0KKw0KKy8qKg0KK0BicmllZiBTa2lwcyByZWFkIGRhdGEgdW50aWwgdGhlIGZpcnN0IGVtcHR5IGxpbmUuDQorDQorQHBhcmFtIGNhbVNvY2sgQW4gb3BlbiB0Y3Agc29ja2V0IHRvIHRoZSBjYW1lcmEgdG8gcmVhZCB0aGUgZGF0YSBmcm9tLg0KK0ByZXR1cm4gc3VjZXNzIDAgaWYgZmFpbHVyZTsgMSBpZiBzdWNjZXNzDQorKi8NCitzdGF0aWMgaW50IENhbWVyYVNraXBVbnRpbEVtcHR5TGluZShpbnQgY2FtU29jaykgew0KKyAgICBjaGFyIGJ1ZmZlclsxMDI0XTsNCisgICAgaW50IHN1Y2Nlc3MgPSAwOw0KKyAgICB3aGlsZSgxKSB7DQorICAgICAgICBzdWNjZXNzID0gQ2FtZXJhUmVhZExpbmUoY2FtU29jaywgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwgdHJ1ZSk7DQorICAgICAgICBpZiAoKmJ1ZmZlciA9PSAnXDAnKSB7DQorICAgICAgICAgICAgcmV0dXJuIHN1Y2Nlc3M7DQorICAgICAgICB9DQorICAgIH0NCisgICAgcmV0dXJuIHN1Y2Nlc3M7DQorfQ0KKw0KKy8qKg0KK0BicmllZiBPcGVucyBhIHNvY2tldC4NCisNCitJc3N1ZXMgdGhlIGdpdmVuIGh0dHAgcmVxdWVzdCB3aXRoIHRoZSByZXF1aXJlZCBhZGRlZCBpbmZvcm1hdGlvbiANCithbmQgYXV0aGVudGljYXRpb24uIEl0ICBjeWNsZXMgdGhyb3VnaCBhbiBhcnJheSBvZiBwcmVkZXRlcm1pbmVkIA0KK2VuY3J5cHRlZCB1c2VybmFtZSwgcGFzc3dvcmQgY29tYmluYXRpb25zIHRoYXQgd2UgZXhwZWN0IHRoZSB1c2VycyANCit0byBoYXZlIGF0IGFueSBwb2ludCBpbiB0aW1lLiBJZiBub25lIG9mIHRoZSB1c2VybmFtZSwgcGFzc3dvcmQgDQorY29tYmluYXRpb25zIHdvcmssIGl0IG91dHB1dHMgYSAiVW5rbm93biB1c2VyIG9yIHBhc3N3b3JkIiBlcnJvci4NCitJZiB0aGUgcmVxdWVzdCBzdWNjZWVkcywgaXQgcmV0dXJucyB0aGUgc29ja2V0IG51bWJlci4NCisNCitAcGFyYW0gc2VydmVyTmFtZSBUaGUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGhvc3QgZnJvbSB3aGljaCB0aGlzIHJlcXVlc3Qgb3JpZ2luYXRlcw0KK0BwYXJhbSByZXF1ZXN0ICAgVGhlIHJlcXVlc3QgdG8gc2VuZCB0byB0aGUgY2FtZXJhIG5vdCBpbmNsdWRpbmcgYm9pbGVycGxhdGUgb3IgDQorICAgICAgICAgICAgICAgICBhdXRoZW50aWNhdGlvbi4gVGhpcyBpcyB1c3VhbGx5IGluIHRoZSBmb3JtIG9mICJHRVQgPHN0cmluZz4iDQorQHJldHVybiBpbnQgLSBmYWlsdXJlID0gRVJST1I7IHN1Y2Nlc3MgPSBzb2NrZXQgbnVtYmVyOyAgICAgDQorKi8NCitzdGF0aWMgaW50IENhbWVyYU9wZW5Tb2NrZXRBbmRJc3N1ZUF1dGhvcml6ZWRSZXF1ZXN0KGNvbnN0IGNoYXIqIHNlcnZlck5hbWUsIGNvbnN0IGNoYXIqIHJlcXVlc3QpIA0KK3sNCisgICAgY2hhciBmdW5jTmFtZVtdPSJjYW1lcmFPcGVuU29ja2V0QW5kSXNzdWVBdXRob3JpemVkUmVxdWVzdCI7DQorCQ0KKwlzdHJ1Y3Qgc29ja2FkZHJfaW4gY2FtZXJhQWRkcjsNCisJaW50IHNvY2tBZGRyU2l6ZTsgIA0KKwlpbnQgY2FtU29jayA9IEVSUk9SOyAgICANCisNCisgICAgLy8gVGhlIGNhbWVyYSBpcyBleHBlY3RlZCB0byBoYXZlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHVzZXJuYW1lLCBwYXNzd29yZCBjb21iaW5hdGlvbnMuDQorICAgIC8vIFRoaXMgcm91dGluZSB3aWxsIHJldHVybiBhbiBlcnJvciBpZiBpdCBkb2VzIG5vdCBmaW5kIG9uZSBvZiB0aGVzZS4NCisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGF1dGhlbnRpY2F0aW9uU3RyaW5nc1tdID0gew0KKyAgICAgICAgIlJsSkRPa1pTUXc9PSIsICAgICAvKiBGUkMsIEZSQyAqLw0KKyAgICAgICAgImNtOXZkRHB3WVhOeiIsICAgICAvKiByb290LCBhZG1pbiovDQorICAgICAgICAiY205dmREcGhaRzFwYmc9PSIgIC8qIHJvb3QsIHBhc3MqLw0KKyAgICB9Ow0KKw0KKyAgICBzdGF0aWMgY29uc3QgaW50IG51bUF1dGhlbnRpY2F0aW9uU3RyaW5ncyA9IHNpemVvZihhdXRoZW50aWNhdGlvblN0cmluZ3MpL3NpemVvZihhdXRoZW50aWNhdGlvblN0cmluZ3NbMF0pOw0KKwkNCisJc3RhdGljIGNvbnN0IGNoYXIgKnJlcXVlc3RUZW1wbGF0ZSA9ICIlcyAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhUVFAvMS4xXG4iICAgICAgICAgICAgICAgICAgICAgICBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVXNlci1BZ2VudDogSFRUUFN0cmVhbUNsaWVudFxuIiAgIFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDb25uZWN0aW9uOiBLZWVwLUFsaXZlXG4iICAgICAgICAgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNhY2hlLUNvbnRyb2w6IG5vLWNhY2hlXG4iICAgICAgICBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQXV0aG9yaXphdGlvbjogQmFzaWMgJXNcblxuIjsNCisNCisJaW50IGkgPSAwOw0KKyAgICBmb3IgKDtpIDwgbnVtQXV0aGVudGljYXRpb25TdHJpbmdzOysraSkgew0KKyAgICAgICAgY2hhciBidWZmZXJbMTAyNF07DQorDQorICAgICAgICBzcHJpbnRmKGJ1ZmZlciwgcmVxdWVzdFRlbXBsYXRlLCByZXF1ZXN0LCBhdXRoZW50aWNhdGlvblN0cmluZ3NbaV0pOw0KKw0KKyAgICAgICAgLyogY3JlYXRlIGNhbWVyYSBzb2NrZXQgKi8NCisgICAgICAgIC8vRFBSSU5URiAoTE9HX0RFQlVHLCAiY3JlYXRpbmcgY2FtU29jayIgKTsgDQorICAgICAgICBpZiAoKGNhbVNvY2sgPSBzb2NrZXQgKEFGX0lORVQsIFNPQ0tfU1RSRUFNLCAwKSkgPT0gRVJST1IpIHsNCisgICAgCQlpbWFxU2V0RXJyb3IoRVJSX0NBTUVSQV9TT0NLRVRfQ1JFQVRFX0ZBSUxFRCwgZnVuY05hbWUpOw0KKyAgICAJCXBlcnJvcigiRmFpbGVkIHRvIGNyZWF0ZSBzb2NrZXQiKTsNCisgICAgCQlyZXR1cm4gKEVSUk9SKTsNCisgICAgICAgIH0NCisNCisgICAgICAgIHNvY2tBZGRyU2l6ZSA9IHNpemVvZiAoc3RydWN0IHNvY2thZGRyX2luKTsNCisgICAgICAgIGJ6ZXJvICgoY2hhciAqKSAmY2FtZXJhQWRkciwgc29ja0FkZHJTaXplKTsNCisgICAgICAgIGNhbWVyYUFkZHIuc2luX2ZhbWlseSA9IEFGX0lORVQ7DQorICAgICAgICBjYW1lcmFBZGRyLnNpbl9sZW4gPSAodV9jaGFyKSBzb2NrQWRkclNpemU7DQorICAgICAgICBjYW1lcmFBZGRyLnNpbl9wb3J0ID0gaHRvbnMgKENBTUVSQV9QT1JUKTsNCisNCisgICAgICAgIGlmICgoIChpbnQpKGNhbWVyYUFkZHIuc2luX2FkZHIuc19hZGRyID0gaW5ldF9hZGRyIChjb25zdF9jYXN0PGNoYXIqPihzZXJ2ZXJOYW1lKSkgKSA9PSBFUlJPUikgJiYNCisgICAgICAgICAgICAoIChpbnQpKGNhbWVyYUFkZHIuc2luX2FkZHIuc19hZGRyID0gaG9zdEdldEJ5TmFtZSAoY29uc3RfY2FzdDxjaGFyKj4oc2VydmVyTmFtZSkpICkgPT0gRVJST1IpKSANCisgICAgICAgIHsNCisgICAgCQlpbWFxU2V0RXJyb3IoRVJSX0NBTUVSQV9DT05ORUNUX0ZBSUxFRCwgZnVuY05hbWUpOw0KKyAgICAgICAgICAgIHJldHVybiBDYW1lcmFDbG9zZVNvY2tldCgiRmFpbGVkIHRvIGdldCBJUCwgY2hlY2sgaG9zdG5hbWUgb3IgSVAiLCBjYW1Tb2NrKTsNCisgICAgICAgIH0NCisNCisgICAgICAgIC8vRFBSSU5URiAoTE9HX0lORk8sICJjb25uZWN0aW5nIGNhbVNvY2siICk7IA0KKyAgICAgICAgaWYgKGNvbm5lY3QgKGNhbVNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKikgJmNhbWVyYUFkZHIsIHNvY2tBZGRyU2l6ZSkgPT0gRVJST1IpIAl7DQorICAgIAkJaW1hcVNldEVycm9yKEVSUl9DQU1FUkFfQ09OTkVDVF9GQUlMRUQsIGZ1bmNOYW1lKTsNCisgICAgICAgICAgICByZXR1cm4gQ2FtZXJhQ2xvc2VTb2NrZXQoIkZhaWxlZCB0byBjb25uZWN0IHRvIGNhbWVyYSAtIGNoZWNrIG5ldHdvciIsIGNhbVNvY2spOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgLy9EUFJJTlRGIChMT0dfREVCVUcsICJ3cml0aW5nIEdFVCByZXF1ZXN0IHRvIGNhbVNvY2siICk7IA0KKyAgICAgICAgaWYgKHdyaXRlIChjYW1Tb2NrLCBidWZmZXIsIHN0cmxlbihidWZmZXIpICkgPT0gRVJST1IpIHsNCisgICAgCQlpbWFxU2V0RXJyb3IoRVJSX0NBTUVSQV9DT05ORUNUX0ZBSUxFRCwgZnVuY05hbWUpOw0KKyAgICAgICAgICAgIHJldHVybiBDYW1lcmFDbG9zZVNvY2tldCgiRmFpbGVkIHRvIHNlbmQgR0VUIHJlcXVlc3QiLCBjYW1Tb2NrKTsNCisgICAgICAgIH0NCisNCisgICAgICAgIC8vICBSZWFkIG9uZSBsaW5lIHdpdGggdGhlIGxpbmUgZW5kaW5nIHJlbW92ZWQuDQorICAgICAgICBpZiAoIUNhbWVyYVJlYWRMaW5lKGNhbVNvY2ssIGJ1ZmZlciwgMTAyNCwgdHJ1ZSkpIHsNCisgICAgICAgICAgICByZXR1cm4gQ2FtZXJhQ2xvc2VTb2NrZXQoIkJhZCByZXNwb25zZSB0byBHRVQgcmVxdWVzdCIsIGNhbVNvY2spOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgLy8gIENoZWNrIGlmIHRoZSByZXNwb25zZSBpcyBvZiB0aGUgZm9ybWF0IEhUVFAvPHZlcnNpb24+IDIwMCBPSy4NCisgICAgICAgIGZsb2F0IGRpc2NhcmQ7DQorICAgICAgICBpZiAoc3NjYW5mKGJ1ZmZlciwgIkhUVFAvJWYgMjAwIE9LIiwgJmRpc2NhcmQpID09IDEpIHsNCisgICAgICAgICAgICBicmVhazsNCisgICAgICAgIH0NCisNCisgICAgICAgIC8vICBXZSBoYXZlIHRvIGNsb3NlIHRoZSBjb25uZWN0aW9uIGJlY2F1c2UgaW4gdGhlIGNhc2Ugb2YgZmFpbHVyZQ0KKyAgICAgICAgLy8gIHRoZSBzZXJ2ZXIgY2xvc2VzIHRoZSBjb25uZWN0aW9uLg0KKyAgICAgICAgY2xvc2UoY2FtU29jayk7DQorICAgIH0NCisgICAgLy8gIElmIG5vbmUgb2YgdGhlIGF0dGVtcHRzIHdlcmUgc3VjY2Vzc2Z1bCwgdGhlbiBsZXQgdGhlIGNhbGxlciBrbm93Lg0KKyAgICBpZiAobnVtQXV0aGVudGljYXRpb25TdHJpbmdzID09IGkpIHsNCisJCWltYXFTZXRFcnJvcihFUlJfQ0FNRVJBX0FVVEhPUklaQVRJT05fRkFJTEVELCBmdW5jTmFtZSk7DQorICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkV4cGVjdGVkIHVzZXJuYW1lL3Bhc3N3b3JkIGNvbWJpbmF0aW9uIG5vdCBmb3VuZCBvbiBjYW1lcmEiKTsNCisgICAgICAgIHJldHVybiBFUlJPUjsNCisgICAgfQ0KKyAgICByZXR1cm4gY2FtU29jazsNCit9DQorDQorDQorLyoqDQorICogQGJyaWVmIFNlbmRzIGEgY29uZmlndXJhdGlvbiBtZXNzYWdlIHRvIHRoZSBjYW1lcmENCisgKiBAcGFyYW0gY29uZmlnU3RyaW5nIGNvbmZpZ3VyYXRpb24gbWVzc2FnZSB0byB0aGUgY2FtZXJhDQorICogQHJldHVybiBzdWNjZXNzOiAwPWZhaWx1cmU7IDE9c3VjY2Vzcw0KKyAqLw0KK2ludCBDb25maWd1cmVDYW1lcmEoY2hhciAqY29uZmlnU3RyaW5nKXsNCisJY2hhciBmdW5jTmFtZVtdPSJDb25maWd1cmVDYW1lcmEiOw0KKwljaGFyICpzZXJ2ZXJOYW1lID0gIjE5Mi4xNjguMC45MCI7CQkvKiBjYW1lcmEgQCAqLyANCisJaW50IHN1Y2Nlc3MgPSAwOw0KKwlpbnQgY2FtU29jayA9IDA7ICAgIA0KKwkNCisJLyogR2VuZXJhdGUgY2FtZXJhIGNvbmZpZ3VyYXRpb24gc3RyaW5nICovDQorCWNoYXIgKiBnZXRTdHIxID0gDQorCQkiR0VUIC9heGlzLWNnaS9hZG1pbi9wYXJhbS5jZ2k/YWN0aW9uPXVwZGF0ZSZJbWFnZVNvdXJjZS5JMC5TZW5zb3IuIjsNCisJDQorCWNoYXIgY2FtZXJhUmVxdWVzdFtzdHJsZW4oZ2V0U3RyMSkgKyBzdHJsZW4oY29uZmlnU3RyaW5nKV07DQorICAgIHNwcmludGYgKGNhbWVyYVJlcXVlc3QsICIlcyVzIiwJZ2V0U3RyMSwgY29uZmlnU3RyaW5nKTsNCisJRFBSSU5URihMT0dfREVCVUcsICJjYW1lcmEgY29uZmlndXJhdGlvbiBzdHJpbmc6IFxuJXMiLCBjYW1lcmFSZXF1ZXN0KTsNCisJY2FtU29jayA9IENhbWVyYU9wZW5Tb2NrZXRBbmRJc3N1ZUF1dGhvcml6ZWRSZXF1ZXN0KHNlcnZlck5hbWUsIGNhbWVyYVJlcXVlc3QpOw0KKwlEUFJJTlRGKExPR19ERUJVRywgImNhbWVyYSBzb2NrZXQjID0gJWkiLCBjYW1Tb2NrKTsNCisJDQorICAgIC8vcmVhZCByZXNwb25zZQ0KKyAgICBzdWNjZXNzID0gQ2FtZXJhU2tpcFVudGlsRW1wdHlMaW5lKGNhbVNvY2spOw0KKwkvL0RQUklOVEYoTE9HX0RFQlVHLCAic3VjY2Nlc3MgZnJvbSBDYW1lcmFTa2lwVW50aWxFbXB0eUxpbmU6ICVpIiwgc3VjY2Vzcyk7DQorICAgIGNoYXIgYnVmZmVyWzNdOwkvLyBzZXQgcHJvcGVydHkgLSAzDQorICAgIHN1Y2Nlc3MgPSBDYW1lcmFSZWFkTGluZShjYW1Tb2NrLCBidWZmZXIsIDMsIHRydWUpOw0KKwkvL0RQUklOVEYoTE9HX0RFQlVHLCAic3VjY2Nlc3MgZnJvbSBDYW1lcmFSZWFkTGluZTogJWkiLCBzdWNjZXNzKTsNCisJRFBSSU5URihMT0dfREVCVUcsICJsaW5lIHJlYWQgZnJvbSBjYW1lcmEgXG4lcyIsIGJ1ZmZlcik7DQorICAgIGlmIChzdHJjbXAoYnVmZmVyLCAiT0siKSAhPSAwKSB7DQorCQlpbWFxU2V0RXJyb3IoRVJSX0NBTUVSQV9DT01NQU5EX0ZBSUxVUkUsIGZ1bmNOYW1lKTsNCisJCURQUklOVEYoTE9HX0RFQlVHLCAic2V0dGluZyBFUlJfQ0FNRVJBX0NPTU1BTkRfRkFJTFVSRSAtIE9LIG5vdCBmb3VuZCIpOw0KKyAgICB9DQorCURQUklOVEYgKExPR19JTkZPLCAiXG5Db25maWd1cmVDYW1lcmEgRU5ESU5HICBzdWNjZXNzID0gJWlcbiIsIHN1Y2Nlc3MgKTsJDQorDQorCS8qIGNsZWFuIHVwICovDQorCWNsb3NlIChjYW1Tb2NrKTsNCisJcmV0dXJuICgxKTsNCit9DQorDQorDQorLyoqDQorICogQGJyaWVmIFNlbmRzIGEgcmVxdWVzdCBtZXNzYWdlIHRvIHRoZSBjYW1lcmENCisgKiBAcGFyYW0gY29uZmlnU3RyaW5nIHJlcXVlc3QgbWVzc2FnZSB0byB0aGUgY2FtZXJhDQorICogQHBhcmFtIGNhbWVyYVJlc3BvbnNlIHJlc3BvbnNlIGZyb20gY2FtZXJhDQorICogQHJldHVybiBzdWNjZXNzOiAwPWZhaWx1cmU7IDE9c3VjY2Vzcw0KKyAqLw0KK2ludCBHZXRDYW1lcmFTZXR0aW5nKGNoYXIgKmNvbmZpZ1N0cmluZywgY2hhciAqY2FtZXJhUmVzcG9uc2Upew0KKwljaGFyICpzZXJ2ZXJOYW1lID0gIjE5Mi4xNjguMC45MCI7CQkvKiBjYW1lcmEgQCAqLyANCisJaW50IHN1Y2Nlc3MgPSAwOw0KKwlpbnQgY2FtU29jayA9IDA7ICAgIA0KKwkNCisJLyogR2VuZXJhdGUgY2FtZXJhIHJlcXVlc3Qgc3RyaW5nICovDQorCWNoYXIgKiBnZXRTdHIxID0gDQorCQkiR0VUIC9heGlzLWNnaS9hZG1pbi9wYXJhbS5jZ2k/YWN0aW9uPWxpc3QmZ3JvdXA9SW1hZ2VTb3VyY2UuSTAuU2Vuc29yLiI7DQorCWNoYXIgY2FtZXJhUmVxdWVzdFtzdHJsZW4oZ2V0U3RyMSkgKyBzdHJsZW4oY29uZmlnU3RyaW5nKV07DQorICAgIHNwcmludGYgKGNhbWVyYVJlcXVlc3QsICIlcyVzIiwJZ2V0U3RyMSwgY29uZmlnU3RyaW5nKTsNCisJRFBSSU5URihMT0dfREVCVUcsICJjYW1lcmEgY29uZmlndXJhdGlvbiBzdHJpbmc6IFxuJXMiLCBjYW1lcmFSZXF1ZXN0KTsNCisJY2FtU29jayA9IENhbWVyYU9wZW5Tb2NrZXRBbmRJc3N1ZUF1dGhvcml6ZWRSZXF1ZXN0KHNlcnZlck5hbWUsIGNhbWVyYVJlcXVlc3QpOw0KKwlEUFJJTlRGKExPR19ERUJVRywgInJldHVybiBmcm9tIENhbWVyYU9wZW5Tb2NrZXRBbmRJc3N1ZUF1dGhvcml6ZWRSZXF1ZXN0ICVpIiwgY2FtU29jayk7DQorCQ0KKyAgICAvL3JlYWQgcmVzcG9uc2UNCisgICAgc3VjY2VzcyA9IENhbWVyYVNraXBVbnRpbEVtcHR5TGluZShjYW1Tb2NrKTsNCisgICAgc3VjY2VzcyA9IENhbWVyYVJlYWRMaW5lKGNhbVNvY2ssIGNhbWVyYVJlc3BvbnNlLCAxMDI0LCB0cnVlKTsNCisJRFBSSU5URihMT0dfREVCVUcsICJzdWNjY2VzcyBmcm9tIENhbWVyYVJlYWRMaW5lOiAlaSIsIHN1Y2Nlc3MpOw0KKwlEUFJJTlRGKExPR19ERUJVRywgImxpbmUgcmVhZCBmcm9tIGNhbWVyYSBcbiVzIiwgY2FtZXJhUmVzcG9uc2UpOw0KKwlEUFJJTlRGIChMT0dfSU5GTywgIlxuR2V0Q2FtZXJhU2V0dGluZyBFTkRJTkcgIHN1Y2Nlc3MgPSAlaVxuIiwgc3VjY2VzcyApOwkNCisNCisJLyogY2xlYW4gdXAgKi8NCisJY2xvc2UgKGNhbVNvY2spOw0KKwlyZXR1cm4gKDEpOw0KK30NCisNCisvKioNCisgKiBAYnJpZWYgU2VuZHMgYSByZXF1ZXN0IG1lc3NhZ2UgdG8gdGhlIGNhbWVyYSBmb3IgaW1hZ2UgYXBwZWFyYW5jZSBwcm9wZXJ0eQ0KKyAqIChyZXNvbHV0aW9uLCBjb21wcmVzc2lvbiwgcm90YXRpb24pDQorICogQHBhcmFtIGNvbmZpZ1N0cmluZyByZXF1ZXN0IG1lc3NhZ2UgdG8gdGhlIGNhbWVyYQ0KKyAqIEBwYXJhbSBjYW1lcmFSZXNwb25zZSByZXNwb25zZSBmcm9tIGNhbWVyYQ0KKyAqIEByZXR1cm4gc3VjY2VzczogMD1mYWlsdXJlOyAxPXN1Y2Nlc3MNCisgKi8NCitpbnQgR2V0SW1hZ2VTZXR0aW5nKGNoYXIgKmNvbmZpZ1N0cmluZywgY2hhciAqY2FtZXJhUmVzcG9uc2Upew0KKwljaGFyICpzZXJ2ZXJOYW1lID0gIjE5Mi4xNjguMC45MCI7CQkvKiBjYW1lcmEgQCAqLyANCisJaW50IHN1Y2Nlc3MgPSAwOw0KKwlpbnQgY2FtU29jayA9IDA7ICAgIA0KKwkNCisJLyogR2VuZXJhdGUgY2FtZXJhIHJlcXVlc3Qgc3RyaW5nICovDQorCWNoYXIgKmdldFN0cjEgPSAiR0VUIC9heGlzLWNnaS9hZG1pbi9wYXJhbS5jZ2k/YWN0aW9uPWxpc3QmZ3JvdXA9SW1hZ2UuSTAuQXBwZWFyYW5jZS4iOw0KKwljaGFyIGNhbWVyYVJlcXVlc3Rbc3RybGVuKGdldFN0cjEpICsgc3RybGVuKGNvbmZpZ1N0cmluZyldOw0KKyAgICBzcHJpbnRmIChjYW1lcmFSZXF1ZXN0LCAiJXMlcyIsCWdldFN0cjEsIGNvbmZpZ1N0cmluZyk7DQorCURQUklOVEYoTE9HX0RFQlVHLCAiY2FtZXJhIGNvbmZpZ3VyYXRpb24gc3RyaW5nOiBcbiVzIiwgY2FtZXJhUmVxdWVzdCk7DQorCWNhbVNvY2sgPSBDYW1lcmFPcGVuU29ja2V0QW5kSXNzdWVBdXRob3JpemVkUmVxdWVzdChzZXJ2ZXJOYW1lLCBjYW1lcmFSZXF1ZXN0KTsNCisJRFBSSU5URihMT0dfREVCVUcsICJyZXR1cm4gZnJvbSBDYW1lcmFPcGVuU29ja2V0QW5kSXNzdWVBdXRob3JpemVkUmVxdWVzdCAlaSIsIGNhbVNvY2spOw0KKwkNCisgICAgLy9yZWFkIHJlc3BvbnNlDQorICAgIHN1Y2Nlc3MgPSBDYW1lcmFTa2lwVW50aWxFbXB0eUxpbmUoY2FtU29jayk7DQorICAgIHN1Y2Nlc3MgPSBDYW1lcmFSZWFkTGluZShjYW1Tb2NrLCBjYW1lcmFSZXNwb25zZSwgMTAyNCwgdHJ1ZSk7DQorCURQUklOVEYoTE9HX0RFQlVHLCAic3VjY2Nlc3MgZnJvbSBDYW1lcmFSZWFkTGluZTogJWkiLCBzdWNjZXNzKTsNCisJRFBSSU5URihMT0dfREVCVUcsICJsaW5lIHJlYWQgZnJvbSBjYW1lcmEgXG4lcyIsIGNhbWVyYVJlc3BvbnNlKTsNCisJRFBSSU5URiAoTE9HX0lORk8sICJcbkdldENhbWVyYVNldHRpbmcgRU5ESU5HICBzdWNjZXNzID0gJWlcbiIsIHN1Y2Nlc3MgKTsJDQorDQorCS8qIGNsZWFuIHVwICovDQorCWNsb3NlIChjYW1Tb2NrKTsNCisJcmV0dXJuICgxKTsNCit9DQorDQorDQorI2RlZmluZSBNRUFTVVJFX1NPQ0tFVF9USU1FIDEgICANCisNCisvKioNCisgKiBAYnJpZWYgTWFuYWdlIGFjY2VzcyB0byB0aGUgY2FtZXJhLiBTZXRzIHVwIHNvY2tldHMgYW5kIHJlYWRzIGltYWdlcw0KKyAqIEBwYXJhbSBmcmFtZXMgRnJhbWVzIHBlciBzZWNvbmQgDQorICogQHBhcmFtIGNvbXByZXNzaW9uIENhbWVyYSBpbWFnZSBjb21wcmVzc2lvbiANCisgKiBAcGFyYW0gcmVzb2x1dGlvbiBDYW1lcmEgaW1hZ2Ugc2l6ZSANCisgKiBAcGFyYW0gcm90YXRpb24gQ2FtZXJhIGltYWdlIHJvdGF0aW9uIA0KKyAqIEByZXR1cm4gZXJyb3INCisgKi8NCitpbnQgY2FtZXJhSlBFR1NlcnZlcihpbnQgZnJhbWVzLCBpbnQgY29tcHJlc3Npb24sIEltYWdlUmVzb2x1dGlvbiByZXNvbHV0aW9uLCBJbWFnZVJvdGF0aW9uIHJvdGF0aW9uKQ0KK3sNCisJY2hhciBmdW5jTmFtZVtdPSJjYW1lcmFKUEVHU2VydmVyIjsNCisJY2hhciAqc2VydmVyTmFtZSA9ICIxOTIuMTY4LjAuOTAiOwkJLyogY2FtZXJhIEAgKi8gDQorCWNvbnQgPSAxOw0KKwlpbnQgZXJyb3JDb2RlID0gMDsNCisJaW50IHByaW50Q291bnRlciA9IDA7DQorCWludAl3cml0ZUluZGV4Ow0KKwlpbnQgYXV0aG9yaXplQ291bnQgPSAwOw0KKwlpbnQgYXV0aG9yaXplQ29uZmlybWVkID0gMDsNCisJc3RhdGljIGNvbnN0IGludCBhdXRoZW50aWNhdGlvblN0cmluZ3NDb3VudCA9IDM7DQorICAgIHN0YXRpYyBjb25zdCBjaGFyKiBhdXRoZW50aWNhdGlvblN0cmluZ3NbXSA9IHsNCisgICAgCQkiY205dmREcGhaRzFwYmc9PSIsIC8qIHJvb3QsIGFkbWluKi8NCisgICAgCQkiUmxKRE9rWlNRdz09IiwgICAgIC8qIEZSQywgRlJDICovDQorICAgIAkJImNtOXZkRHB3WVhOej09IiAgICAvKiByb290LCBwYXNzKi8NCisgICAgfTsNCisNCisJRFBSSU5URiAoTE9HX0RFQlVHLCAiY2FtZXJhSlBFR1NlcnZlciIgKTsgDQorCQ0KKwlzdHJ1Y3Qgc29ja2FkZHJfaW4gY2FtZXJhQWRkcjsNCisJaW50IHNvY2tBZGRyU2l6ZTsgIA0KKwlpbnQgY2FtU29jayA9IDA7ICAgIA0KKw0KKwljaGFyIHJlc1N0clsxMF07DQorCXN3aXRjaCAocmVzb2x1dGlvbikgew0KKwkJY2FzZSBrNjQweDQ4MDogeyBzcHJpbnRmKHJlc1N0ciwiNjQweDQ4MCIpOyBicmVhazsgfQ0KKwkJY2FzZSBrMzIweDI0MDogeyBzcHJpbnRmKHJlc1N0ciwiMzIweDI0MCIpOyBicmVhazsgfQ0KKwkJY2FzZSBrMTYweDEyMDogeyBzcHJpbnRmKHJlc1N0ciwiMTYweDEyMCIpOyBicmVhazsgfQ0KKwkJZGVmYXVsdDoge0RQUklOVEYgKExPR19ERUJVRywgImNvZGUgZXJyb3IgLSByZXNvbHV0aW9uIGlucHV0IiApOyBicmVhazsgfQ0KKwl9DQorCQ0KKwkvKiBHZW5lcmF0ZSBjYW1lcmEgaW5pdGlhbGl6YXRpb24gc3RyaW5nICovDQorCS8qIGNoYW5nZWQgcmVzb2x1dGlvbiB0byAxNjB4MTIwIGZyb20gMzIweDI0MCAqLw0KKwkvKiBzdXBwb3J0ZWQgcmVzb2x1dGlvbnMgYXJlOiA2NDB4NDgwLCA2NDB4MzYwLCAzMjB4MjQwLCAxNjB4MTIwICovCQ0KKwljaGFyICogZ2V0U3RyMSA9IA0KKwkiR0VUIC9heGlzLWNnaS9tanBnL3ZpZGVvLmNnaT9zaG93bGVuZ3RoPTEmY2FtZXJhPTEmIjsJDQorCQkNCisJY2hhciBpbnNlcnRTdHJbMTAwXTsNCisJc3ByaW50ZiAoaW5zZXJ0U3RyLCAiZGVzX2Zwcz0laSZjb21wcmVzc2lvbj0laSZyZXNvbHV0aW9uPSVzJnJvdGF0aW9uPSVpIiwgDQorCQkJZnJhbWVzLCBjb21wcmVzc2lvbiwgcmVzU3RyLCAoaW50KXJvdGF0aW9uKTsJDQorCQ0KKwljaGFyICogZ2V0U3RyMiA9ICIgSFRUUC8xLjFcblwNCitVc2VyLUFnZW50OiBIVFRQU3RyZWFtQ2xpZW50XG5cDQorSG9zdDogMTkyLjE1MC4xLjEwMFxuXA0KK0Nvbm5lY3Rpb246IEtlZXAtQWxpdmVcblwNCitDYWNoZS1Db250cm9sOiBuby1jYWNoZVxuXA0KK0F1dGhvcml6YXRpb246IEJhc2ljICVzO1xuXG4iOw0KKw0KKwljaGFyIGdldFN0cltzdHJsZW4oZ2V0U3RyMSkgKyBzdHJsZW4oaW5zZXJ0U3RyKSArIHN0cmxlbihnZXRTdHIyKV07ICAgICAgDQorICAgIHNwcmludGYgKGdldFN0ciwgIiVzOiVzJXMiLAlnZXRTdHIxLCBpbnNlcnRTdHIsIGdldFN0cjIpOw0KKw0KKwlEUFJJTlRGKExPR19ERUJVRywgInJldmlzZWQgY2FtZXJhIHN0cmluZzogXG4lcyIsIGdldFN0cik7DQorCS8qIEFsbG9jYXRpb24gKi8NCisJY2hhciB0ZW1wQnVmZmVyWzEwMjRdOw0KKyAgICANCisJUkVUUlk6DQorCVdhaXQoMC4xKTsgIC8vYnVnIGZpeCAtIGRvbid0IHBlc3RlciBjYW1lcmEgaWYgaXQncyBib290aW5nDQorCXdoaWxlIChnbG9iYWxDYW1lcmEuYWNxdWlyZSA9PSAwKSBXYWl0KDAuMSk7DQorDQorCWlmICghYXV0aG9yaXplQ29uZmlybWVkKXsNCisJICBpZiAoYXV0aG9yaXplQ291bnQgPCBhdXRoZW50aWNhdGlvblN0cmluZ3NDb3VudCl7DQorCSAgICBzcHJpbnRmICh0ZW1wQnVmZmVyLCBnZXRTdHIsIGF1dGhlbnRpY2F0aW9uU3RyaW5nc1thdXRob3JpemVDb3VudF0pOw0KKwkgIH0gZWxzZSB7DQorCQlpbWFxU2V0RXJyb3IoRVJSX0NBTUVSQV9BVVRIT1JJWkFUSU9OX0ZBSUxFRCwgZnVuY05hbWUpOw0KKwkJZnByaW50ZihzdGRlcnIsICJDYW1lcmEgYXV0aG9yaXphdGlvbiBmYWlsZWQgLi4uIEluY29ycmVjdCBwYXNzd29yZCBvbiBjYW1lcmEhISIpOw0KKwkJcmV0dXJuIChFUlJPUik7DQorCSAgfQ0KKwl9DQorDQorCXdoaWxlICgxKQ0KKwl7DQorCSAgZ2xvYmFsQ2FtZXJhLmNhbWVyYU1ldHJpY3NbQ0FNX1NPQ0tFVF9JTklUX0FUVEVNUFRTXSsrOwkgIA0KKw0KKwkgIC8qIGNyZWF0ZSBjYW1lcmEgc29ja2V0ICovDQorCSAgRFBSSU5URiAoTE9HX0RFQlVHLCAiY3JlYXRpbmcgY2FtU29jayIgKTsgDQorCSAgaWYgKChjYW1Tb2NrID0gc29ja2V0IChBRl9JTkVULCBTT0NLX1NUUkVBTSwgMCkpID09IEVSUk9SKSB7CQ0KKwkJaW1hcVNldEVycm9yKEVSUl9DQU1FUkFfU09DS0VUX0NSRUFURV9GQUlMRUQsIGZ1bmNOYW1lKTsNCisJCXBlcnJvcigiRmFpbGVkIHRvIGNyZWF0ZSBzb2NrZXQiKTsNCisJCWNvbnQgPSAwOw0KKwkJcmV0dXJuIChFUlJPUik7DQorCSAgfQ0KKw0KKwkgIHNvY2tBZGRyU2l6ZSA9IHNpemVvZiAoc3RydWN0IHNvY2thZGRyX2luKTsNCisJICBiemVybyAoKGNoYXIgKikgJmNhbWVyYUFkZHIsIHNvY2tBZGRyU2l6ZSk7DQorCSAgY2FtZXJhQWRkci5zaW5fZmFtaWx5ID0gQUZfSU5FVDsNCisJICBjYW1lcmFBZGRyLnNpbl9sZW4gPSAodV9jaGFyKSBzb2NrQWRkclNpemU7DQorCSAgY2FtZXJhQWRkci5zaW5fcG9ydCA9IGh0b25zIChDQU1FUkFfUE9SVCk7DQorDQorCSAgRFBSSU5URiAoTE9HX0RFQlVHLCAiZ2V0dGluZyBJUCIgKTsNCisJICBpZiAoKCAoaW50KShjYW1lcmFBZGRyLnNpbl9hZGRyLnNfYWRkciA9IGluZXRfYWRkciAoc2VydmVyTmFtZSkgKSA9PSBFUlJPUikgJiYNCisJCSggKGludCkoY2FtZXJhQWRkci5zaW5fYWRkci5zX2FkZHIgPSBob3N0R2V0QnlOYW1lIChzZXJ2ZXJOYW1lKSApID09IEVSUk9SKSkgDQorCSAgewkNCisJCSAgQ2FtZXJhQ2xvc2VTb2NrZXQoIkZhaWxlZCB0byBnZXQgSVAsIGNoZWNrIGhvc3RuYW1lIG9yIElQIiwgY2FtU29jayk7DQorCQljb250aW51ZTsNCisJICB9DQorCSAgDQorCSAgRFBSSU5URiAoTE9HX0lORk8sICJBdHRlbXB0aW5nIHRvIGNvbm5lY3QgdG8gY2FtU29jayIgKTsgDQorCSAgaWYgKGNvbm5lY3QgKGNhbVNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKikgJmNhbWVyYUFkZHIsIHNvY2tBZGRyU2l6ZSkgPT0gRVJST1IpIAl7DQorCQlpbWFxU2V0RXJyb3IoRVJSX0NBTUVSQV9DT05ORUNUX0ZBSUxFRCwgZnVuY05hbWUpOw0KKwkJQ2FtZXJhQ2xvc2VTb2NrZXQoIkZhaWxlZCB0byBjb25uZWN0IHRvIGNhbWVyYSAtIGNoZWNrIG5ldHdvcmsiLCBjYW1Tb2NrKTsNCisJCWNvbnRpbnVlOw0KKwkgIH0JICANCisNCisjaWYgTUVBU1VSRV9TT0NLRVRfU0VUVVANCisJICBzb2NrZXRFbmRUaW1lID0gR2V0VGltZSgpOyANCisJICBzZXR1cFRpbWUgPSBzb2NrZXRFbmRUaW1lIC0gc29ja2V0U3RhcnRUaW1lOyANCisJICBwcmludGYoIlxuKioqc29ja2V0IHNldHVwIHRpbWUgPSAlZ1xuIiwgc2V0dXBUaW1lICk7DQorI2VuZGlmCSAgDQorCSAgDQorCSAgZ2xvYmFsQ2FtZXJhLmNhbWVyYU1ldHJpY3NbQ0FNX1NPQ0tFVF9PUEVOXSsrOw0KKwkgIGJyZWFrOw0KKwl9IC8vIGVuZCB3aGlsZSAodHJ5aW5nIHRvIGNvbm5lY3QgdG8gY2FtZXJhKQ0KKw0KKwlEUFJJTlRGIChMT0dfREVCVUcsICJ3cml0aW5nIEdFVCByZXF1ZXN0IHRvIGNhbVNvY2siICk7IA0KKwlpZiAod3JpdGUgKGNhbVNvY2ssIHRlbXBCdWZmZXIgLCBzdHJsZW4odGVtcEJ1ZmZlcikgKSA9PSBFUlJPUikgew0KKwkJcmV0dXJuIENhbWVyYUNsb3NlU29ja2V0KCJGYWlsZWQgdG8gc2VuZCBHRVQgcmVxdWVzdCIsIGNhbVNvY2spOw0KKwl9DQorDQorCS8vRFBSSU5URiAoTE9HX0RFQlVHLCAicmVhZGluZyBoZWFkZXIiICk7IA0KKwkvKiBGaW5kIGNvbnRlbnQtbGVuZ3RoLCB0aGVuIHJlYWQgdGhhdCBtYW55IGJ5dGVzICovDQorCWludCBjb3VudGVyID0gMjsNCisJY2hhciogY29udGVudFN0cmluZyA9ICJDb250ZW50LUxlbmd0aDogIjsNCisJY2hhciogYXV0aG9yaXplU3RyaW5nID0gIjIwMCBPSyI7DQorCQ0KKyNkZWZpbmUgTUVBU1VSRV9USU1FIDANCisjaWYgTUVBU1VSRV9USU1FDQorCS8vdGltaW5nIHBhcmFtZXRlcnMgLSBvbmx5IG1lYXN1cmUgb25lIGF0IHRoZSB0aW1lDQorCWRvdWJsZSBsb29wU3RhcnRUaW1lID0gMC4wOyAvLyBtZWFzdXJpbmcgc3BlZWQgb2YgZXhlY3V0aW9uIGxvb3ANCisJZG91YmxlIGxvb3BFbmRUaW1lID0gMC4wOw0KKwlkb3VibGUgY2FtZXJhU3RhcnRUaW1lID0gMC4wOw0KKwlkb3VibGUgY2FtZXJhRW5kVGltZSA9IDAuMDsNCisJZG91YmxlIHByZXZpb3VzU3RhcnRUaW1lID0gMC4wOw0KKwlpbnQgcGVyZm9ybWFuY2VMb29wQ291bnRlciA9IDA7DQorCWludCBtYXhDb3VudCA9IDMwOw0KKyNlbmRpZg0KKwkNCisJd2hpbGUgKGNvbnQpIHsNCisjaWYgTUVBU1VSRV9USU1FDQorCQlwcmV2aW91c1N0YXJ0VGltZSA9IGxvb3BTdGFydFRpbWU7ICAvLyBmaXJzdCB0aW1lIGlzIGJvZ3VzDQorCQlsb29wU3RhcnRUaW1lID0gR2V0VGltZSgpOyANCisjZW5kaWYJDQorCQkvLyBJZiBjYW1lcmEgaGFzIGJlZW4gdHVybmVkIE9GRiwganVtcCB0byBSRVRSWQ0KKwkJLy9pZiAoZ2xvYmFsQ2FtZXJhLmFjcXVpcmUgPT0gMCkgZ290byBSRVRSWTsNCisJCQ0KKwkJLyogRGV0ZXJtaW5lIHdyaXRlciBpbmRleCAqLw0KKwkJaWYgKGdsb2JhbENhbWVyYS5pbmRleCA9PSAwKQ0KKwkJCXdyaXRlSW5kZXggPSAxOw0KKwkJZWxzZQ0KKwkJCXdyaXRlSW5kZXggPSAwOw0KKwkJDQorCQkvKiByZWFkIGhlYWRlciAqLw0KKwkJLy9UT0RPOiBjaGVjayBmb3IgZXJyb3IgaW4gaGVhZGVyLCBpbmNyZW1lbnQgRVJSX0NBTUVSQV9IRUFERVJfRVJST1INCisJCWNoYXIgaW5pdGlhbFJlYWRCdWZmZXJbREVGQVVMVF9QQUNLRVRfU0laRV0gPSAiIjsNCisJCWNoYXIgaW50ZXJtZWRpYXRlQnVmZmVyWzFdOw0KKwkJY2hhciAqdHJhaWxpbmdQdHIgPSBpbml0aWFsUmVhZEJ1ZmZlcjsNCisJCWludCB0cmFpbGluZ0NvdW50ZXIgPSAwOw0KKwkJDQorDQorI2lmIE1FQVNVUkVfVElNRQ0KKwkJY2FtZXJhU3RhcnRUaW1lID0gR2V0VGltZSgpOyANCisjZW5kaWYJDQorDQorCQl3aGlsZSAoY291bnRlcikgew0KKwkJCWlmIChyZWFkIChjYW1Tb2NrLCBpbnRlcm1lZGlhdGVCdWZmZXIsIDEpIDw9IDApIHsNCisJCQkJQ2FtZXJhQ2xvc2VTb2NrZXQoIkZhaWxlZCB0byByZWFkIGltYWdlIGhlYWRlciIsIGNhbVNvY2spOw0KKwkJCQlnbG9iYWxDYW1lcmEuY2FtZXJhTWV0cmljc1tFUlJfQ0FNRVJBX0hFQURFUl9FUlJPUl0rKzsNCisJCQkJZ290byBSRVRSWTsNCisJCQl9DQorDQorCQkJc3RybmNhdChpbml0aWFsUmVhZEJ1ZmZlciwgaW50ZXJtZWRpYXRlQnVmZmVyLCAxKTsNCisJCQlpZiAoTlVMTCAhPSBzdHJzdHIodHJhaWxpbmdQdHIsICJcclxuXHJcbiIpKSB7DQorDQorCQkJCSAgaWYgKCFhdXRob3JpemVDb25maXJtZWQpew0KKw0KKwkJCQkJICBpZiAoc3Ryc3RyKGluaXRpYWxSZWFkQnVmZmVyLCBhdXRob3JpemVTdHJpbmcpKQ0KKwkJCQkJICB7DQorCQkJCQkJICBhdXRob3JpemVDb25maXJtZWQgPSAxOw0KKwkJCQkJCSAgLyogc2V0IGNhbWVyYSB0byBpbml0aWFsaXplZCAqLw0KKwkJCQkJCSAgZ2xvYmFsQ2FtZXJhLmNhbWVyYVJlYWR5ID0gMTsgDQorCQkJCQkgIH0NCisJCQkJCSAgZWxzZQ0KKwkJCQkJICB7DQorCQkJCQkJICBDYW1lcmFDbG9zZVNvY2tldCgiTm90IGF1dGhvcml6ZWQgdG8gY29ubmVjdCB0byBjYW1lcmEiLCBjYW1Tb2NrKTsNCisJCQkJCQkgIGF1dGhvcml6ZUNvdW50Kys7DQorCQkJCSAgZ290byBSRVRSWTsNCisJCQkJCSAgfQ0KKwkJCQl9DQorCQkJCS0tY291bnRlcjsNCisJCQl9DQorCQkJaWYgKCsrdHJhaWxpbmdDb3VudGVyID49IDQpIHsNCisJCQkJdHJhaWxpbmdQdHIrKzsNCisJCQl9DQorCQl9DQorCQ0KKwkJY291bnRlciA9IDE7DQorCQljaGFyICpjb250ZW50TGVuZ3RoID0gc3Ryc3RyKGluaXRpYWxSZWFkQnVmZmVyLCBjb250ZW50U3RyaW5nKTsNCisJCWlmIChjb250ZW50TGVuZ3RoID09IE5VTEwpIHsNCisJCQlnbG9iYWxDYW1lcmEuY2FtZXJhTWV0cmljc1tFUlJfQ0FNRVJBX0hFQURFUl9FUlJPUl0rKzsNCisJCQlDYW1lcmFDbG9zZVNvY2tldCgiTm8gY29udGVudC1sZW5ndGggdG9rZW4gZm91bmQgaW4gcGFja2V0IiwgY2FtU29jayk7DQorCQkJZ290byBSRVRSWTsNCisJCX0NCisJCS8qIGdldCBsZW5ndGggb2YgaW1hZ2UgY29udGVudCAqLw0KKwkJY29udGVudExlbmd0aCA9IGNvbnRlbnRMZW5ndGggKyBzdHJsZW4oY29udGVudFN0cmluZyk7DQorCQlnbG9iYWxDYW1lcmEuZGF0YVt3cml0ZUluZGV4XS5jYW1lcmFJbWFnZVNpemUgPSBhdG9sIChjb250ZW50TGVuZ3RoKTsNCisJCQ0KKwkJaWYoZ2xvYmFsQ2FtZXJhLmRhdGFbd3JpdGVJbmRleF0uY2FtZXJhSW1hZ2UpDQorCQkJZnJlZShnbG9iYWxDYW1lcmEuZGF0YVt3cml0ZUluZGV4XS5jYW1lcmFJbWFnZSk7DQorCQkvL2dsb2JhbENhbWVyYS5kYXRhW3dyaXRlSW5kZXhdLmNhbWVyYUltYWdlID0gKEltYWdlICopIG1hbGxvYyhnbG9iYWxDYW1lcmEuZGF0YVt3cml0ZUluZGV4XS5jYW1lcmFJbWFnZVNpemUpOw0KKwkJZ2xvYmFsQ2FtZXJhLmRhdGFbd3JpdGVJbmRleF0uY2FtZXJhSW1hZ2UgPSAoY2hhciopbWFsbG9jKGdsb2JhbENhbWVyYS5kYXRhW3dyaXRlSW5kZXhdLmNhbWVyYUltYWdlU2l6ZSk7DQorCQlpZiAoTlVMTCA9PSBnbG9iYWxDYW1lcmEuZGF0YVt3cml0ZUluZGV4XS5jYW1lcmFJbWFnZSkgew0KKwkJCXJldHVybiBDYW1lcmFDbG9zZVNvY2tldCgiRmFpbGVkIHRvIGFsbG9jYXRlIHNwYWNlIGZvciBpbWFnZVN0cmluZyIsIGNhbVNvY2spOw0KKwkJfQ0KKwkJZ2xvYmFsQ2FtZXJhLmNhbWVyYU1ldHJpY3NbQ0FNX0JVRkZFUlNfV1JJVFRFTl0rKzsNCisJCQ0KKwkJLy8NCisJCS8vIFRoaXMgaXMgYSBibG9ja2luZyBjYW1lcmEgcmVhZCBmdW5jdGlvbiwgYW5kIHdpbGwgYmxvY2sgaWYgdGhlIGNhbWVyYQ0KKwkJLy8gaGFzIGJlZW4gZGlzY29ubmVjdGVkIGZyb20gdGhlIGNSSU8uICBJZiBob3dldmVyIHRoZSBjYW1lcmEgaXMNCisJCS8vIFBPV0VSRUQgT0ZGIHdoaWxlIGNvbm5lY3RlZCB0byB0aGUgY1JJTywgdGhpcyBmdW5jdGlvbiBORVZFUiBSRVRVUk5TDQorCQkvLw0KKwkJaW50IGJ5dGVzUmVhZCA9IGZpb1JlYWQgKGNhbVNvY2ssIChjaGFyICopZ2xvYmFsQ2FtZXJhLmRhdGFbd3JpdGVJbmRleF0uY2FtZXJhSW1hZ2UsDQorCQkJCWdsb2JhbENhbWVyYS5kYXRhW3dyaXRlSW5kZXhdLmNhbWVyYUltYWdlU2l6ZSk7DQorDQorI2lmIE1FQVNVUkVfVElNRQ0KKwkJY2FtZXJhRW5kVGltZSA9IEdldFRpbWUoKTsgDQorI2VuZGlmCQ0KKwkJDQorCQkvL0RQUklOVEYgKExPR19ERUJVRywgIkNvbXBsZXRlZCBmaW9SZWFkIGZ1bmN0aW9uIC0gYnl0ZXMgcmVhZDolZCIsIGJ5dGVzUmVhZCk7DQorCQlpZiAoYnl0ZXNSZWFkIDw9IDApIHsNCisJCQlDYW1lcmFDbG9zZVNvY2tldCgiRmFpbGVkIHRvIHJlYWQgaW1hZ2UgZGF0YSIsIGNhbVNvY2spOw0KKwkJCWdvdG8gUkVUUlk7DQorCQl9IGVsc2UgaWYgKGJ5dGVzUmVhZCAhPSBnbG9iYWxDYW1lcmEuZGF0YVt3cml0ZUluZGV4XS5jYW1lcmFJbWFnZVNpemUpew0KKwkJCWZwcmludGYoc3RkZXJyLCAiRVJST1I6IEZhaWxlZCB0byByZWFkIGVudGlyZSBpbWFnZTogcmVhZExlbmd0aCBkb2VzIG5vdCBtYXRjaCBieXRlcyByZWFkIik7DQorCQkJZ2xvYmFsQ2FtZXJhLmNhbWVyYU1ldHJpY3NbQ0FNX0JBRF9JTUFHRV9TSVpFXSsrOw0KKwkJfQ0KKwkJLy8gaWYgZGVjb2RpbmcgdGhlIEpQRUcgdG8gYW4gSFNMIEltYWdlLCBkbyBpdCBoZXJlDQorCQlpZiAoZ2xvYmFsQ2FtZXJhLmRlY29kZSkgew0KKwkJCWlmKGdsb2JhbENhbWVyYS5kYXRhW3dyaXRlSW5kZXhdLmRlY29kZWRJbWFnZSkNCisJCQkJZnJjRGlzcG9zZShnbG9iYWxDYW1lcmEuZGF0YVt3cml0ZUluZGV4XS5kZWNvZGVkSW1hZ2UpOw0KKwkJCWdsb2JhbENhbWVyYS5kYXRhW3dyaXRlSW5kZXhdLmRlY29kZWRJbWFnZSA9IGZyY0NyZWF0ZUltYWdlKElNQVFfSU1BR0VfSFNMKTsNCisJCQlpZiAoISBQcml2X1JlYWRKUEVHU3RyaW5nX0MoZ2xvYmFsQ2FtZXJhLmRhdGFbd3JpdGVJbmRleF0uZGVjb2RlZEltYWdlLCANCisJCQkJCShjb25zdCB1bnNpZ25lZCBjaGFyICopZ2xvYmFsQ2FtZXJhLmRhdGFbd3JpdGVJbmRleF0uY2FtZXJhSW1hZ2UsIA0KKwkJCQkJZ2xvYmFsQ2FtZXJhLmRhdGFbd3JpdGVJbmRleF0uY2FtZXJhSW1hZ2VTaXplKSApIHsNCisJCQkJRFBSSU5URiAoTE9HX0RFQlVHLCAiZmFpbHVyZSBjcmVhdGluZyBJbWFnZSIpOwkJCQ0KKwkJCX0NCisJCX0NCisJCQ0KKwkJLy8gVE9ETzogUmVhY3QgdG8gcGFydGlhbCBpbWFnZQ0KKwkJZ2xvYmFsQ2FtZXJhLmRhdGFbd3JpdGVJbmRleF0udGltZXN0YW1wID0gR2V0VGltZSgpOw0KKwkJZ2xvYmFsQ2FtZXJhLmluZGV4ID0gd3JpdGVJbmRleDsNCisJCQ0KKwkJLyogc2lnbmFsIGEgbGlzdGVuaW5nIHRhc2sgKi8NCisJCWlmIChnbG9iYWxDYW1lcmEucmVhZGVyUElEKSB7DQorCQkJaWYgKHRhc2tLaWxsIChnbG9iYWxDYW1lcmEucmVhZGVyUElELFNJR1VTUjEpID09IE9LKQ0KKwkJCQlEUFJJTlRGIChMT0dfREVCVUcsICJTSUdOQUxJTkcgUElEPSAlaSIsIGdsb2JhbENhbWVyYS5yZWFkZXJQSUQpOw0KKwkJCWVsc2UNCisJCQkJZ2xvYmFsQ2FtZXJhLmNhbWVyYU1ldHJpY3NbQ0FNX1BJRF9TSUdOQUxfRVJSXSsrOw0KKwkJCQlEUFJJTlRGIChMT0dfREVCVUcsICJFUlJPUiBTSUdOQUxJTkcgUElEPSAlaSIsIGdsb2JhbENhbWVyYS5yZWFkZXJQSUQpOw0KKwkJfQ0KKw0KKwkJZ2xvYmFsQ2FtZXJhLmNhbWVyYU1ldHJpY3NbQ0FNX05VTV9JTUFHRV0rKzsJDQorCQlwcmludENvdW50ZXIgKys7DQorCQlpZiAocHJpbnRDb3VudGVyID09IDEwMDApIHsgDQorCQkJRFBSSU5URiAoTE9HX0RFQlVHLCAiaW1hZ2VDb3VudGVyID0gJWkiLCBnbG9iYWxDYW1lcmEuY2FtZXJhTWV0cmljc1tDQU1fTlVNX0lNQUdFXSk7IA0KKwkJCXByaW50Q291bnRlcj0wOyANCisJCX0NCisJCQ0KKwkJdGFza0RlbGF5KDEpOyAgDQorCQkNCisjaWYgTUVBU1VSRV9USU1FDQorCQlsb29wRW5kVGltZSA9IEdldFRpbWUoKTsgDQorCQlwZXJmb3JtYW5jZUxvb3BDb3VudGVyKys7DQorCQlpZiAocGVyZm9ybWFuY2VMb29wQ291bnRlciA8PSBtYXhDb3VudCkgew0KKwkJCURQUklOVEYgKExPR19ERUJVRywgIiVpIERPTkUhISE6IGxvb3AgPSAsJWcsICBjYW1lcmEgPSAsJWcsICBkaWZmZXJlbmNlID0gLCVnLCBsb29wUmF0ZT0gLCVnLCIsDQorCQkJCQlwZXJmb3JtYW5jZUxvb3BDb3VudGVyLCBsb29wRW5kVGltZS1sb29wU3RhcnRUaW1lLCBjYW1lcmFFbmRUaW1lLWNhbWVyYVN0YXJ0VGltZSwgDQorCQkJCQkobG9vcEVuZFRpbWUtbG9vcFN0YXJ0VGltZSkgLSAoY2FtZXJhRW5kVGltZS1jYW1lcmFTdGFydFRpbWUpLA0KKwkJCQkJbG9vcFN0YXJ0VGltZS1wcmV2aW91c1N0YXJ0VGltZSk7CQkJCQkJDQorCQl9DQorI2VuZGlmCQ0KKwl9ICAvKiBlbmQgd2hpbGUgKGNvbnQpICovDQorDQorCS8qIGNsZWFuIHVwICovDQorCWNsb3NlIChjYW1Tb2NrKTsNCisJY29udCA9IDA7DQorCURQUklOVEYgKExPR19JTkZPLCAiXG5KUEVHIFNFUlZFUiBFTkRJTkcgIGVycm9yQ29kZSA9ICVpXG4iLCBlcnJvckNvZGUgKTsNCisJDQorCXJldHVybiAoT0spOw0KK30NCisNCisvKioNCisgKiBAYnJpZWYgU3RhcnQgc2lnbmFsaW5nIGEgdGFzayB3aGVuIG5ldyBpbWFnZXMgYXJlIGF2YWlsYWJsZQ0KKyAqIEBwYXJhbSB0YXNrSUQgbnVtYmVyIGZvciB0YXNrIHRvIGdldCB0aGUgc2lnbmFsDQorICovDQordm9pZCBTdGFydEltYWdlU2lnbmFsKGludCB0YXNrSWQpIC8vIFN0YXJ0IGlzc3VpbmcgYSBTSUdVU1IxIHNpZ25hbCB0byB0aGUgc3BlY2lmaWVkIHRhc2tJZA0KK3sJZ2xvYmFsQ2FtZXJhLnJlYWRlclBJRCA9IHRhc2tJZDsgfQ0KKw0KKy8qKg0KKyAqIEBicmllZiBTdGFydCBzZXJ2aW5nIGltYWdlcw0KKyAqLw0KK3ZvaWQgU3RhcnRJbWFnZUFjcXVpc2l0aW9uKCkNCit7CQ0KKwlnbG9iYWxDYW1lcmEuY2FtZXJhTWV0cmljc1tDQU1fU1RBUlRTXSsrOyAgDQorCWdsb2JhbENhbWVyYS5hY3F1aXJlID0gMTsgDQorCURQUklOVEYoTE9HX0RFQlVHLCAic3RhcnRpbmcgYWNxdWlzaXRpb24iKTsNCit9DQorDQorDQorLyoqDQorICogQGJyaWVmIFN0b3Agc2VydmluZyBpbWFnZXMNCisgKi8NCit2b2lkIFN0b3BJbWFnZUFjcXVpc2l0aW9uKCkNCit7CWdsb2JhbENhbWVyYS5jYW1lcmFNZXRyaWNzW0NBTV9TVE9QU10rKzsgIGdsb2JhbENhbWVyYS5hY3F1aXJlID0gMDsgfQ0KKw0KKw0KKy8qKg0KKyAqIEBicmllZiBUaGlzIGlzIHRoZSByb3V0aW5lIHRoYXQgaXMgcnVuIHdoZW4gdGhlIHRhc2sgaXMgc3Bhd25lZA0KKyAqIEl0IGluaXRpYWxpemVzIHRoZSBjYW1lcmEgd2l0aCB0aGUgaW1hZ2Ugc2V0dGluZ3MgcGFzc2VkIGluLCBhbmQNCisgKiBzdGFydHMgaW1hZ2UgYWNxdWlzaXRpb24uDQorICogQHBhcmFtIGZyYW1lcyBGcmFtZXMgcGVyIHNlY29uZCANCisgKiBAcGFyYW0gY29tcHJlc3Npb24gQ2FtZXJhIGltYWdlIGNvbXByZXNzaW9uIA0KKyAqIEBwYXJhbSByZXNvbHV0aW9uIENhbWVyYSBpbWFnZSBzaXplIA0KKyAqIEBwYXJhbSByb3RhdGlvbiBDYW1lcmEgaW1hZ2Ugcm90YXRpb24gDQorICovDQorc3RhdGljIGludCBpbml0Q2FtZXJhKGludCBmcmFtZXMsIGludCBjb21wcmVzc2lvbiwgSW1hZ2VSZXNvbHV0aW9uIHJlc29sdXRpb24sIEltYWdlUm90YXRpb24gcm90YXRpb24pIA0KK3sNCisJLy9TZXREZWJ1Z0ZsYWcgKCBERUJVR19TQ1JFRU5fQU5EX0ZJTEUgICkgOw0KKwkNCisJRFBSSU5URihMT0dfREVCVUcsICJcbisrKysrIGNhbWVyYSB0YXNrIHN0YXJ0aW5nOiByb3RhdGlvbiA9ICVpIiwgKGludClyb3RhdGlvbik7DQorCWludCBlcnJvckNvZGU7DQorDQorCS8qIEluaXRpYWxpemUgZ2xvYmFsQ2FtZXJhIGFyZWEgDQorCSAqIFNldCBkZWNvZGUgdG8gMSAtIGFsd2F5cyB3YW50IHRvIGRlY29kZSBpbWFnZXMgZm9yIHByb2Nlc3NpbmcgDQorCSAqIElmIE9OTFkgc2VuZGluZyBpbWFnZXMgdG8gdGhlIGRhc2hib2FyZCwgeW91IGNvdWxkIHNldCBpdCB0byAwICovDQorCWJ6ZXJvICgoY2hhciAqKSZnbG9iYWxDYW1lcmEsIHNpemVvZihnbG9iYWxDYW1lcmEpKTsNCisJZ2xvYmFsQ2FtZXJhLmluZGV4ID0gLTE7DQorCWdsb2JhbENhbWVyYS5kZWNvZGUgPSAxOw0KKwkNCisJLyogYWxsb3cgd3JpdGluZyB0byB2eFdvcmtzIHRhcmdldCAqLw0KKwlQcml2X1NldFdyaXRlRmlsZUFsbG93ZWQoMSk7IA0KKwkNCisJLyogc3RhcnQgYWNxdWlzaXRpb24gaW1tZWRpYXRlbHkgKi8NCisJU3RhcnRJbWFnZUFjcXVpc2l0aW9uKCk7DQorCQ0KKwkvKiAgY2FtZXJhSlBFR1NlcnZlciBydW5zIHVudGlsIGNhbWVyYSBpcyBzdG9wcGVkICovDQorCURQUklOVEYgKExPR19ERUJVRywgImNhbGxpbmcgY2FtZXJhSlBFR1NlcnZlciIgKTsgDQorCWVycm9yQ29kZSA9IGNhbWVyYUpQRUdTZXJ2ZXIoZnJhbWVzLCBjb21wcmVzc2lvbiwgcmVzb2x1dGlvbiwgcm90YXRpb24pOwkNCisJRFBSSU5URiAoTE9HX0lORk8sICJlcnJvckNvZGUgZnJvbSBjYW1lcmFKUEVHU2VydmVyID0gJWlcbiIsIGVycm9yQ29kZSApOyANCisJcmV0dXJuIChPSyk7DQorfQ0KKw0KK1Rhc2sgZ19heGlzQ2FtZXJhVGFzaygiQ2FtZXJhIiwgKEZVTkNQVFIpaW5pdENhbWVyYSk7DQorDQorLyoqDQorICogQGJyaWVmIFN0YXJ0IHRoZSBjYW1lcmEgdGFzaw0KKyAqIEBwYXJhbSBmcmFtZXMgRnJhbWVzIHBlciBzZWNvbmQgDQorICogQHBhcmFtIGNvbXByZXNzaW9uIENhbWVyYSBpbWFnZSBjb21wcmVzc2lvbiANCisgKiBAcGFyYW0gcmVzb2x1dGlvbiBDYW1lcmEgaW1hZ2Ugc2l6ZSANCisgKiBAcGFyYW0gcm90YXRpb24gQ2FtZXJhIGltYWdlIHJvdGF0aW9uIChST1RfMCBvciBST1RfMTgwKQ0KKyAqIEByZXR1cm4gVGFza0lEIG9mIGNhbWVyYSB0YXNrLCBvciAtMSBpZiBlcnJvci4NCisgKi8NCitpbnQgU3RhcnRDYW1lcmFUYXNrKCkNCit7DQorCXJldHVybiBTdGFydENhbWVyYVRhc2soMTAsIDAsIGsxNjB4MTIwLCBST1RfMCk7DQorfQ0KK2ludCBTdGFydENhbWVyYVRhc2soaW50IGZyYW1lcywgaW50IGNvbXByZXNzaW9uLCBJbWFnZVJlc29sdXRpb24gcmVzb2x1dGlvbiwgSW1hZ2VSb3RhdGlvbiByb3RhdGlvbikNCit7DQorCWNoYXIgZnVuY05hbWVbXT0ic3RhcnRDYW1lcmFUYXNrIjsNCisJRFBSSU5URihMT0dfREVCVUcsICJzdGFydGluZyBjYW1lcmEiKTsNCisNCisJaW50IGNhbWVyYVRhc2tJRCA9IDA7DQorDQorCS8vcmFuZ2UgY2hlY2sNCisJaWYgKGZyYW1lcyA8IDEpIGZyYW1lcyA9IDE7DQorCWVsc2UgaWYgKGZyYW1lcyA+IDMwKSBmcmFtZXMgPSAzMDsNCisJaWYgKGNvbXByZXNzaW9uIDwgMCkgY29tcHJlc3Npb24gPSAwOwkJDQorCWVsc2UgaWYgKGNvbXByZXNzaW9uID4gMTAwKSBjb21wcmVzc2lvbiA9IDEwMDsNCisNCisJLy8gc3RvcCBhbnkgcHJpb3IgY29weSBvZiBydW5uaW5nIHRhc2sNCisJU3RvcENhbWVyYVRhc2soKTsgDQorDQorCS8vIHNwYXduIGNhbWVyYSB0YXNrDQorCWJvb2wgc3RhcnRlZCA9IGdfYXhpc0NhbWVyYVRhc2suU3RhcnQoZnJhbWVzLCBjb21wcmVzc2lvbiwgcmVzb2x1dGlvbiwgcm90YXRpb24pOw0KKwljYW1lcmFUYXNrSUQgPSBnX2F4aXNDYW1lcmFUYXNrLkdldElEKCk7DQorCURQUklOVEYoTE9HX0RFQlVHLCAic3Bhd25lZCB0YXNrIGlkICVpIiwgY2FtZXJhVGFza0lEKTsNCisNCisJaWYgKCFzdGFydGVkKQl7DQorCQlEUFJJTlRGKExPR19ERUJVRywgImNhbWVyYSB0YXNrIGZhaWxlZCB0byBzdGFydCIpOw0KKwkJaW1hcVNldEVycm9yKEVSUl9DQU1FUkFfVEFTS19TUEFXTl9GQUlMRUQsIGZ1bmNOYW1lKTsNCisJCXJldHVybiAtMTsNCisJfQ0KKwlyZXR1cm4gY2FtZXJhVGFza0lEOw0KK30NCisNCisvKioNCisgKiBAYnJpZWYgU3RvcHMgdGhlIGNhbWVyYSB0YXNrDQorICogQHJldHVybiBUYXNrSUQgb2YgY2FtZXJhIHRhc2sga2lsbGVkLCBvciAtMSBpZiBub25lIHdhcyBydW5uaW5nLg0KKyAqLw0KK2ludCBTdG9wQ2FtZXJhVGFzaygpDQorew0KKyAgICBzdGQ6OnN0cmluZyB0YXNrTmFtZSgiRlJDX0NhbWVyYSIpOyAgICANCisJLy8gY2hlY2sgZm9yIHByaW9yIGNvcHkgb2YgcnVubmluZyB0YXNrDQorCWludCBvbGRUYXNrSUQgPSB0YXNrTmFtZVRvSWQoY29uc3RfY2FzdDxjaGFyKj4odGFza05hbWUuY19zdHIoKSkpOw0KKwlpZihvbGRUYXNrSUQgIT0gRVJST1IpIHsgdGFza0RlbGV0ZShvbGRUYXNrSUQpOyAgfQ0KKwlyZXR1cm4gb2xkVGFza0lEOw0KK30NCisNCisjaWYgMA0KKy8qIGlmIHlvdSB3YW50IHRvIHJ1biB0aGlzIHRhc2sgYnkgaXRzZWxmIHRvIGRlYnVnICANCisgKiBlbmFibGUgdGhpcyBjb2RlIGFuZCBtYWtlIFJ1blByb2dyYW0gdGhlIGVudHJ5IHBvaW50IA0KKyAqLw0KK2V4dGVybiAiQyINCit7DQordm9pZCBSdW5Qcm9ncmFtKCk7DQoraW50IEF4aXNDYW1lcmFfU3RhcnR1cExpYnJhcnlJbml0KCk7DQorfQ0KKy8qKiAqIEBicmllZiBTdGFydCBwb2ludCBvZiB0aGUgcHJvZ3JhbSAqLw0KK3ZvaWQgUnVuUHJvZ3JhbSgpDQorewlTdGFydENhbWVyYVRhc2soKTt9DQorDQorLyoqICogQGJyaWVmIFRoaXMgaXMgdGhlIG1haW4gcHJvZ3JhbSB0aGF0IGlzIHJ1biBieSB0aGUgZGVidWdnZXIgb3IgdGhlIHJvYm90IG9uIGJvb3QuICovDQoraW50IEF4aXNDYW1lcmFfU3RhcnR1cExpYnJhcnlJbml0KCkNCisJewkJUnVuUHJvZ3JhbSgpOwkJcmV0dXJuIDA7CX0NCisNCisjZW5kaWYNCisNCisNCisNCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9WaXNpb24yMDA5L0F4aXNDYW1lcmEuaCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL1Zpc2lvbjIwMDkvQXhpc0NhbWVyYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhNjA2M2EKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9WaXNpb24yMDA5L0F4aXNDYW1lcmEuaApAQCAtMCwwICsxLDkyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisqICBQcm9qZWN0ICAgCQk6IEZJUlNUIE1vdG9yIENvbnRyb2xsZXINCisqICBGaWxlIE5hbWUgIAkJOiBBeGlzQ2FtZXJhLmggICAgICAgICAgDQorKiAgQ29udHJpYnV0b3JzICAgCTogRUxGDQorKiAgQ3JlYXRpb24gRGF0ZSAJOiBBdWd1c3QgMTIsIDIwMDgNCisqICBSZXZpc2lvbiBIaXN0b3J5CTogU291cmNlIGNvZGUgJiByZXZpc2lvbiBoaXN0b3J5IG1haW50YWluZWQgYXQgc291cmNlZm9yZ2UuV1BJLmVkdSAgICANCisqICBGaWxlIERlc2NyaXB0aW9uCTogR2xvYmFsbHkgZGVmaW5lZCB2YWx1ZXMgZm9yIHRoZSBGUkMgQ2FtZXJhIEFQSQ0KKyogDQorKiAgQVBJOiBCZWNhdXNlIG5pdmlzaW9uLmggdXNlcyBDKysgc3R5bGUgY29tbWVudHMsIGFueSBmaWxlIGluY2x1ZGluZyB0aGlzDQorKiAgbXVzdCBiZSBhIC5jcHAgaW5zdGVhZCBvZiAuYy4NCisqIA0KKyovDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiAgICAgICAgQ29weXJpZ2h0IChjKSBGSVJTVCAyMDA4LiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAqLw0KKy8qICBPcGVuIFNvdXJjZSBTb2Z0d2FyZSAtIG1heSBiZSBtb2RpZmllZCBhbmQgc2hhcmVkIGJ5IEZSQyB0ZWFtcy4gVGhlIGNvZGUgICovDQorLyogIG11c3QgYmUgYWNjb21wYW5pZWQgYnkgdGhlIEZJUlNUIEJTRCBsaWNlbnNlIGZpbGUgaW4gJChXSU5EX0JBU0UpL1dQSUxpYi4gKi8NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKyNpZm5kZWYgX19BWElTQ0FNRVJBX0hfXw0KKyNkZWZpbmUgX19BWElTQ0FNRVJBX0hfXw0KKw0KKyNpbmNsdWRlICJuaXZpc2lvbi5oIg0KKw0KKy8qKiBwb3J0IGZvciBjb21tdW5pY2F0aW5nIHdpdGggY2FtZXJhICovDQorI2RlZmluZSBDQU1FUkFfUE9SVCA4MA0KKy8qKiBob3cgb2xkIGFuIGltYWdlIGlzIGJlZm9yZSBpdCdzIGRpc2NhcmRlZCAqLw0KKyNkZWZpbmUgQ0FNRVJBX0lNQUdFX1NUQUxFX1RJTUVfU0VDIDIuMCAgDQorLyoqIHRpbWUgdG8gd2FpdCBmb3IgYSBuZXcgaW1hZ2UgaW4gYmxvY2tpbmcgY2FsbCAqLw0KKyNkZWZpbmUgTUFYX0JMT0NLSU5HX1RJTUVfU0VDIDAuNQ0KKw0KKy8qICBFbnVtZXJhdGVkIFR5cGVzICovDQorLyoqIEBicmllZiBDb3VudGVycyBmb3IgY2FtZXJhIG1ldHJpY3MgKi8NCitlbnVtIEZyY3ZDYW1lcmFNZXRyaWMge0NBTV9TVEFSVFMsIENBTV9TVE9QUywgDQorCUNBTV9OVU1fSU1BR0UsIENBTV9CVUZGRVJTX1dSSVRURU4sIENBTV9CTE9DS0lOR19DT1VOVCwNCisJDQorCUNBTV9TT0NLRVRfT1BFTiwgQ0FNX1NPQ0tFVF9JTklUX0FUVEVNUFRTLCBDQU1fQkxPQ0tJTkdfVElNRU9VVCwNCisJQ0FNX0dFVElNQUdFX1NVQ0NFU1MsIENBTV9HRVRJTUFHRV9GQUlMVVJFLCANCisJDQorCUNBTV9TVEFMRV9JTUFHRSwgQ0FNX0dFVElNQUdFX0JFRk9SRV9JTklULCBDQU1fR0VUSU1BR0VfQkVGT1JFX0FWQUlMQUJMRSwNCisJQ0FNX1JFQURfSlBFR19GQUlMVVJFLCBDQU1fUElEX1NJR05BTF9FUlIsIA0KKwkNCisJQ0FNX0JBRF9JTUFHRV9TSVpFLCBDQU1fSEVBREVSX0VSUk9SfTsNCisNCisjZGVmaW5lIENBTV9OVU1fTUVUUklDUyAxNw0KKw0KKy8qKiBQcml2YXRlIE5JIGZ1bmN0aW9uIG5lZWRlZCB0byB3cml0ZSB0byB0aGUgVnhXb3JrcyB0YXJnZXQgKi8NCitJTUFRX0ZVTkMgaW50IFByaXZfU2V0V3JpdGVGaWxlQWxsb3dlZChVSU5UMzIgZW5hYmxlKTsgDQorDQorLyoqDQorQGJyaWVmIFBvc3NpYmxlIGltYWdlIHNpemVzIHRoYXQgeW91IGNhbiBzZXQgb24gdGhlIGNhbWVyYS4NCisqLw0KK2VudW0gSW1hZ2VSZXNvbHV0aW9uIHsgazY0MHg0ODAsIGszMjB4MjQwLCBrMTYweDEyMCB9Ow0KKw0KKy8qKg0KK0BicmllZiBQb3NzaWJsZSByb3RhdGlvbiB2YWx1ZXMgdGhhdCB5b3UgY2FuIHNldCBvbiB0aGUgY2FtZXJhLg0KKyovDQorZW51bSBJbWFnZVJvdGF0aW9uIHsgUk9UXzAgPSAwLCBST1RfMTgwID0gMTgwIH07DQorDQorDQorDQoraW50IFN0YXJ0Q2FtZXJhVGFzaygpOw0KKw0KK2V4dGVybiAiQyIgew0KKy8qICBJbWFnZSBBY3F1aXNpdGlvbiBmdW5jdGlvbnMgKi8NCisvKiBvYnRhaW5zIGFuIGltYWdlIGZyb20gdGhlIGNhbWVyYSBzZXJ2ZXIgKi8NCitpbnQgR2V0SW1hZ2UoSW1hZ2UqIGNhbWVyYUltYWdlLCBkb3VibGUgKnRpbWVzdGFtcCk7DQoraW50IEdldEltYWdlQmxvY2tpbmcoSW1hZ2UqIGNhbWVyYUltYWdlLCBkb3VibGUgKnRpbWVzdGFtcCwgZG91YmxlIGxhc3RJbWFnZVRpbWVzdGFtcCk7DQorLyogb2J0YWlucyByYXcgaW1hZ2Ugc3RyaW5nIHRvIHNlbmQgdG8gUEMgKi8NCitpbnQgR2V0SW1hZ2VEYXRhKGNoYXIqKiBpbWFnZURhdGEsIGludCogbnVtQnl0ZXMsIGRvdWJsZSogY3VycmVudEltYWdlVGltZXN0YW1wKTsNCitpbnQgR2V0SW1hZ2VEYXRhQmxvY2tpbmcoY2hhcioqIGltYWdlRGF0YSwgaW50KiBudW1CeXRlcywgZG91YmxlKiB0aW1lc3RhbXAsIGRvdWJsZSBsYXN0SW1hZ2VUaW1lc3RhbXApOw0KKw0KKy8qIHN0YXJ0IHRoZSBjYW1lcmEgc2VydmVyICovDQordm9pZCBTdGFydEltYWdlQWNxdWlzaXRpb24oKTsNCit2b2lkIFN0b3BJbWFnZUFjcXVpc2l0aW9uKCk7DQordm9pZCBTdGFydEltYWdlU2lnbmFsKGludCB0YXNrSWQpOw0KKw0KKy8qIHN0YXR1cyAmIG1ldHJpY3MgKi8NCitpbnQgZnJjQ2FtZXJhSW5pdGlhbGl6ZWQoKTsNCitpbnQgR2V0Q2FtZXJhTWV0cmljKEZyY3ZDYW1lcmFNZXRyaWMgbWV0cmljKTsNCisNCisvKiBjYW1lcmEgY29uZmlndXJhdGlvbiAqLw0KK2ludCBDb25maWd1cmVDYW1lcmEoY2hhciAqY29uZmlnU3RyaW5nKTsNCitpbnQgR2V0Q2FtZXJhU2V0dGluZyhjaGFyICpjb25maWdTdHJpbmcsIGNoYXIgKmNhbWVyYVJlc3BvbnNlKTsNCitpbnQgR2V0SW1hZ2VTZXR0aW5nKGNoYXIgKmNvbmZpZ1N0cmluZywgY2hhciAqY2FtZXJhUmVzcG9uc2UpOw0KKw0KKy8qIGNhbWVyYSB0YXNrIGNvbnRyb2wgKi8NCisNCitpbnQgU3RhcnRDYW1lcmFUYXNrKGludCBmcmFtZXMsIGludCBjb21wcmVzc2lvbiwgSW1hZ2VSZXNvbHV0aW9uIHJlc29sdXRpb24sIEltYWdlUm90YXRpb24gcm90YXRpb24pOw0KK2ludCBTdG9wQ2FtZXJhVGFzaygpOw0KK30NCisjZW5kaWYNCisNCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9WaXNpb24yMDA5L0JhZVV0aWxpdGllcy5jcHAgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9WaXNpb24yMDA5L0JhZVV0aWxpdGllcy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDY2ZmJkMwotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL1Zpc2lvbjIwMDkvQmFlVXRpbGl0aWVzLmNwcApAQCAtMCwwICsxLDQwMCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorKiAgUHJvamVjdCAgIAkJOiBGSVJTVCBNb3RvciBDb250cm9sbGVyDQorKiAgRmlsZSBOYW1lICAJCTogQmFlVXRpbGl0aWVzLmNwcCAgICAgICAgDQorKiAgQ29udHJpYnV0b3JzICAgCTogSkRHLCBFTEYsIEVNRg0KKyogIENyZWF0aW9uIERhdGUgCTogSnVseSAyMCwgMjAwOA0KKyogIFJldmlzaW9uIEhpc3RvcnkJOiBTb3VyY2UgY29kZSAmIHJldmlzaW9uIGhpc3RvcnkgbWFpbnRhaW5lZCBhdCBzb3VyY2Vmb3JnZS5XUEkuZWR1ICAgIA0KKyogIEZpbGUgRGVzY3JpcHRpb24JOiBPcGVuIHNvdXJjZSB1dGlsaXR5IGV4dGVuc2lvbnMgZm9yIEZJUlNUIFZpc2lvbiBBUEkuDQorKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiAgICAgICAgQ29weXJpZ2h0IChjKSBGSVJTVCAyMDA4LiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAqLw0KKy8qICBPcGVuIFNvdXJjZSBTb2Z0d2FyZSAtIG1heSBiZSBtb2RpZmllZCBhbmQgc2hhcmVkIGJ5IEZSQyB0ZWFtcy4gVGhlIGNvZGUgICovDQorLyogIG11c3QgYmUgYWNjb21wYW5pZWQgYnkgdGhlIEZJUlNUIEJTRCBsaWNlbnNlIGZpbGUgaW4gJChXSU5EX0JBU0UpL1dQSUxpYi4gKi8NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKyNpbmNsdWRlIDxzdGRpby5oPg0KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4NCisjaW5jbHVkZSA8c3lzL3N0YXQuaD4NCisjaW5jbHVkZSA8dW5pc3RkLmg+DQorI2luY2x1ZGUgPHN0cmluZy5oPg0KKyNpbmNsdWRlIDxtYXRoLmg+DQorI2luY2x1ZGUgPHN0ZGlvTGliLmg+IA0KKyANCisjaW5jbHVkZSAiQmFlVXRpbGl0aWVzLmgiDQorI2luY2x1ZGUgIlNlcnZvLmgiDQorI2luY2x1ZGUgIlRpbWVyLmgiDQorDQorLyoqDQorICogICBVdGlsaXR5IGZ1bmN0aW9ucyANCisgKi8NCisNCisvKioNCisgKiBkZWJ1ZyBvdXRwdXQgZmxhZyBvcHRpb25zOg0KKyAqIERFQlVHX09GRiwgREVCVUdfTU9TVExZX09GRiwgREVCVUdfU0NSRUVOX09OTFksIERFQlVHX0ZJTEVfT05MWSwgREVCVUdfU0NSRUVOX0FORF9GSUxFDQorICovDQorc3RhdGljIERlYnVnT3V0cHV0VHlwZQlkcHJpbnRmRmxhZyA9IERFQlVHX09GRjsgIA0KKw0KKy8qKg0KKyAqIFNldCB0aGUgZGVidWcgZmxhZyB0byBwcmludCB0byBzY3JlZW4sIGZpbGUgb24gY1JJTywgYm90aCBvciBuZWl0aGVyDQorICogQHBhcmFtIHRlbXBTdHJpbmcgVGhlIGZvcm1hdCBzdHJpbmcuDQorICovDQordm9pZCBTZXREZWJ1Z0ZsYWcgKCBEZWJ1Z091dHB1dFR5cGUgZmxhZyAgKSAgDQoreyBkcHJpbnRmRmxhZyA9IGZsYWc7IH0NCisNCisvKioNCisgKiBEZWJ1ZyBwcmludCB0byBhIGZpbGUgYW5kL29yIGEgdGVybWluYWwgd2luZG93Lg0KKyAqIENhbGwgbGlrZSB5b3Ugd291bGQgY2FsbCBwcmludGYuDQorICogU2V0IGZ1bmN0aW9uTmFtZSBpbiB0aGUgZnVuY3Rpb24gaWYgeW91IHdhbnQgdGhlIGNvcnJlY3QgZnVuY3Rpb24gbmFtZSB0byBwcmludCBvdXQuDQorICogVGhlIGZpbGUgbGluZSBudW1iZXIgd2lsbCBhbHNvIGJlIHByaW50ZWQuDQorICogQHBhcmFtIHRlbXBTdHJpbmcgVGhlIGZvcm1hdCBzdHJpbmcuDQorICovDQordm9pZCBkcHJpbnRmICggY2hhciAqIHRlbXBTdHJpbmcsIC4uLiAgKSAgLyogVmFyaWFibGUgYXJndW1lbnQgbGlzdCAqLw0KK3sNCisgIHZhX2xpc3QJYXJnczsJCQkgIC8qIElucHV0IGFyZ3VtZW50IGxpc3QgKi8NCisgIGludAkJbGluZV9udW1iZXI7ICAgICAgLyogTGluZSBudW1iZXIgcGFzc2VkIGluIGFyZ3VtZW50ICovDQorICBpbnQJCXR5cGU7DQorICBjaGFyCQkqZnVuY3Rpb25OYW1lOyAgICAvKiBGb3JtYXQgcGFzc2VkIGluIGFyZ3VtZW50ICovDQorICBjaGFyCQkqZm10OyAgICAgICAgICAgICAvKiBGb3JtYXQgcGFzc2VkIGluIGFyZ3VtZW50ICovDQorICBjaGFyCQl0ZXh0WzUxMl07ICAgCSAgLyogVGV4dCBzdHJpbmcgKi8NCisgIGNoYXIJCW91dHRleHRbNTEyXTsgICAgIC8qIFRleHQgc3RyaW5nICovDQorICBGSUxFCQkqb3V0ZmlsZV9mZDsgICAgICAvKiBPdXRwdXQgZmlsZSBwb2ludGVyICovDQorICBjaGFyCQlmaWxlcGF0aFsxMjhdOyAgICAvKiBUZXh0IHN0cmluZyAqLw0KKyAgaW50CQlmYXRhbEZsYWc9MDsNCisgIGNoYXIJCSpmaWxlbmFtZTsNCisgIGludAkJaW5kZXg7DQorICBpbnQJCXRlbXBTdHJpbmdMZW47DQorDQorICBpZiAoZHByaW50ZkZsYWcgPT0gREVCVUdfT0ZGKSB7IHJldHVybjsgfQ0KKyAgDQorICB2YV9zdGFydCAoYXJncywgdGVtcFN0cmluZyk7DQorICANCisgIHRlbXBTdHJpbmdMZW4gPSBzdHJsZW4odGVtcFN0cmluZyk7DQorICBmaWxlbmFtZSA9IHRlbXBTdHJpbmc7DQorICBmb3IgKGluZGV4PTA7aW5kZXg8dGVtcFN0cmluZ0xlbjtpbmRleCsrKXsNCisJICBpZiAodGVtcFN0cmluZ1tpbmRleF0gPT0gJyAnKSB7DQorCQkgIHByaW50ZiggIkVSUk9SIGluIGRwcmludGY6IG1hbGZvcm1lZCBjYWxsaW5nIHNlcXVlbmNlICglcylcbiIsdGVtcFN0cmluZyk7cmV0dXJuOw0KKwkgIAl9DQorCSAgaWYgKHRlbXBTdHJpbmdbaW5kZXhdID09ICdcXCcgfHwgdGVtcFN0cmluZ1tpbmRleF0gPT0gJy8nKQ0KKwkJICBmaWxlbmFtZSA9IHRlbXBTdHJpbmcgKyBpbmRleCArIDE7DQorICB9DQorICANCisgIC8qIEV4dHJhY3QgZnVuY3Rpb24gbmFtZSAqLw0KKyAgZnVuY3Rpb25OYW1lID0gdmFfYXJnIChhcmdzLCBjaGFyICopOw0KKyANCisgLyogRXh0cmFjdCBsaW5lIG51bWJlciBmcm9tIGFyZ3VtZW50IGxpc3QgKi8NCisgIGxpbmVfbnVtYmVyID0gdmFfYXJnIChhcmdzLCBpbnQpOw0KKw0KKyAvKiBFeHRyYWN0IGluZm9ybWF0aW9uIHR5cGUgZnJvbSBhcmd1bWVudCBsaXN0ICovDQorICB0eXBlID0gdmFfYXJnIChhcmdzLCBpbnQpOw0KKw0KKyAvKiBFeHRyYWN0IGZvcm1hdCBmcm9tIGFyZ3VtZW50IGxpc3QgKi8NCisgIGZtdCA9IHZhX2FyZyAoYXJncywgY2hhciAqKTsNCisNCisgIHZzcHJpbnRmICh0ZXh0LCBmbXQsIGFyZ3MpOw0KKw0KKyAgdmFfZW5kIChhcmdzKTsNCisNCisgIC8qIEZvcm1hdCBvdXRwdXQgc3RhdGVtZW50ICovDQorICBzd2l0Y2ggKHR5cGUpDQorICAgew0KKyAgIGNhc2UgREVCVUdfVFlQRToNCisgICAgIHNwcmludGYgKG91dHRleHQsICJbJXM6JXNAJTA0ZF0gREVCVUcgJXNcbiIsDQorICAgICAgICAgICAgICBmaWxlbmFtZSwgZnVuY3Rpb25OYW1lLCBsaW5lX251bWJlciwgdGV4dCk7DQorICAgICBicmVhazsNCisgICBjYXNlIElORk9fVFlQRToNCisgICAgIHNwcmludGYgKG91dHRleHQsICJbJXM6JXNAJTA0ZF0gSU5GTyAlc1xuIiwNCisgICAgICAgICAgICAgIGZpbGVuYW1lLCBmdW5jdGlvbk5hbWUsIGxpbmVfbnVtYmVyLCB0ZXh0KTsNCisgICAgIGJyZWFrOw0KKyAgIGNhc2UgRVJST1JfVFlQRToNCisgICAgIHNwcmludGYgKG91dHRleHQsICJbJXM6JXNAJTA0ZF0gRVJST1IgJXNcbiIsDQorICAgICAgICAgICAgICBmaWxlbmFtZSwgZnVuY3Rpb25OYW1lLCBsaW5lX251bWJlciwgdGV4dCk7DQorICAgICBicmVhazsNCisgICBjYXNlIENSSVRJQ0FMX1RZUEU6DQorICAgICBzcHJpbnRmIChvdXR0ZXh0LCAiWyVzOiVzQCUwNGRdIENSSVRJQ0FMICVzXG4iLA0KKyAgICAgICAgICAgICAgZmlsZW5hbWUsIGZ1bmN0aW9uTmFtZSwgbGluZV9udW1iZXIsIHRleHQpOw0KKyAgICAgYnJlYWs7DQorICAgY2FzZSBGQVRBTF9UWVBFOg0KKyAgICAgZmF0YWxGbGFnID0gMTsNCisgICAgIHNwcmludGYgKG91dHRleHQsICJbJXM6JXNAJTA0ZF0gRkFUQUwgJXNcbiIsDQorICAgICAgICAgICAgICBmaWxlbmFtZSwgZnVuY3Rpb25OYW1lLCBsaW5lX251bWJlciwgdGV4dCk7DQorICAgICBicmVhazsNCisgICBkZWZhdWx0Og0KKyAgICAgcHJpbnRmKCAiRVJST1IgaW4gZHByaW50ZjogbWFsZm9ybWVkIGNhbGxpbmcgc2VxdWVuY2VcbiIpOw0KKyAgICAgcmV0dXJuOw0KKyAgICAgYnJlYWs7DQorICAgfQ0KKw0KKyAgc3ByaW50ZiAoZmlsZXBhdGgsICIlcy5kZWJ1ZyIsIGZpbGVuYW1lKTsNCisNCisgIC8qIFdyaXRlIG91dHB1dCBzdGF0ZW1lbnQgKi8NCisgIHN3aXRjaCAoZHByaW50ZkZsYWcpDQorICB7DQorICBkZWZhdWx0Og0KKyAgY2FzZSBERUJVR19PRkY6IA0KKyAgCWJyZWFrOw0KKyAgY2FzZSBERUJVR19NT1NUTFlfT0ZGOiANCisgIAlpZiAoZmF0YWxGbGFnKQl7DQorCSAgaWYgKChvdXRmaWxlX2ZkID0gZm9wZW4gKGZpbGVwYXRoLCAiYSsiKSkgIT0gTlVMTCkJICB7DQorCSAgICBmd3JpdGUgKG91dHRleHQsIHNpemVvZiAoY2hhciksIHN0cmxlbiAob3V0dGV4dCksIG91dGZpbGVfZmQpOw0KKwkgICAgZmNsb3NlIChvdXRmaWxlX2ZkKTsNCisJICB9DQorCX0NCisgIAlicmVhazsNCisgIGNhc2UgREVCVUdfU0NSRUVOX09OTFk6IA0KKyAgCXByaW50ZiAoIiVzIiwgb3V0dGV4dCk7DQorICAJYnJlYWs7DQorICBjYXNlIERFQlVHX0ZJTEVfT05MWTogDQorCWlmICgob3V0ZmlsZV9mZCA9IGZvcGVuIChmaWxlcGF0aCwgImErIikpICE9IE5VTEwpCXsNCisJICBmd3JpdGUgKG91dHRleHQsIHNpemVvZiAoY2hhciksIHN0cmxlbiAob3V0dGV4dCksIG91dGZpbGVfZmQpOw0KKwkgIGZjbG9zZSAob3V0ZmlsZV9mZCk7DQorCX0NCisgIAlicmVhazsNCisgIGNhc2UgREVCVUdfU0NSRUVOX0FORF9GSUxFOiAvLyBCT1RIDQorICAJcHJpbnRmICgiJXMiLCBvdXR0ZXh0KTsNCisJaWYgKChvdXRmaWxlX2ZkID0gZm9wZW4gKGZpbGVwYXRoLCAiYSsiKSkgIT0gTlVMTCkJew0KKwkgIGZ3cml0ZSAob3V0dGV4dCwgc2l6ZW9mIChjaGFyKSwgc3RybGVuIChvdXR0ZXh0KSwgb3V0ZmlsZV9mZCk7DQorCSAgZmNsb3NlIChvdXRmaWxlX2ZkKTsNCisJfQ0KKyAgCWJyZWFrOw0KKyAgfQ0KK30NCisNCisvKioNCisgKiBAYnJpZWYgTm9ybWFsaXplcyBhIHZhbHVlIGluIGEgcmFuZ2UsIHVzZWQgZm9yIGRyaXZlIGlucHV0DQorICogQHBhcmFtIHBvc2l0aW9uIFRoZSBwb3NpdGlvbiBpbiB0aGUgcmFuZ2UsIHN0YXJ0aW5nIGF0IDANCisgKiBAcGFyYW0gcmFuZ2UgVGhlIHNpemUgb2YgdGhlIHJhbmdlIHRoYXQgcG9zaXRpb24gaXMgaW4NCisgKiBAcmV0dXJuIFRoZSBub3JtYWxpemVkIHBvc2l0aW9uIGZyb20gLTEgdG8gKzENCisgKi8NCitkb3VibGUgUmFuZ2VUb05vcm1hbGl6ZWQoZG91YmxlIHBvc2l0aW9uLCBpbnQgcmFuZ2Upew0KKwlyZXR1cm4oKChwb3NpdGlvbioyLjApLyhkb3VibGUpcmFuZ2UpLTEuMCk7DQorfQ0KKw0KKy8qKg0KKyAqIEBicmllZiBDb252ZXJ0IGEgbm9ybWFsaXplZCB2YWx1ZSB0byB0aGUgY29ycmVzcG9uZGluZyB2YWx1ZSBpbiBhIHJhbmdlLg0KKyAqIFRoaXMgaXMgdXNlZCB0byBjb252ZXJ0IG5vcm1hbGl6ZWQgdmFsdWVzIHRvIHRoZSBzZXJ2byBjb21tYW5kIHJhbmdlLg0KKyAqIEBwYXJhbSBub3JtYWxpemVkVmFsdWUgVGhlIG5vcm1hbGl6ZWQgdmFsdWUgKGluIHRoZSAtMSB0byArMSByYW5nZSkNCisgKiBAcGFyYW0gbWluUmFuZ2UgVGhlIG1pbmltdW0gb2YgdGhlIHJhbmdlICgwIGlzIGRlZmF1bHQpDQorICogQHBhcmFtIG1heFJhbmdlIFRoZSBtYXhpbXVtIG9mIHRoZSByYW5nZSAoMSBpcyBkZWZhdWx0KQ0KKyAqIEByZXR1cm4gVGhlIHZhbHVlIGluIHRoZSByYW5nZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBpbnB1dCBub3JtYWxpemVkIHZhbHVlDQorICovDQorZmxvYXQgTm9ybWFsaXplVG9SYW5nZShmbG9hdCBub3JtYWxpemVkVmFsdWUsIGZsb2F0IG1pblJhbmdlLCBmbG9hdCBtYXhSYW5nZSkgew0KKwlmbG9hdCByYW5nZSA9IG1heFJhbmdlLW1pblJhbmdlOw0KKwlmbG9hdCB0ZW1wID0gKGZsb2F0KSgobm9ybWFsaXplZFZhbHVlIC8gMi4wKSsgMC41KSpyYW5nZTsNCisJcmV0dXJuICh0ZW1wICsgbWluUmFuZ2UpOw0KK30JDQorZmxvYXQgTm9ybWFsaXplVG9SYW5nZShmbG9hdCBub3JtYWxpemVkVmFsdWUpIHsNCisJcmV0dXJuIChmbG9hdCkoKG5vcm1hbGl6ZWRWYWx1ZSAvIDIuMCkgKyAwLjUpOw0KK30JDQorDQorLyoqDQorICogQGJyaWVmIERpc3BsYXlzIGFuIGFjdGl2aXR5IGluZGljYXRvciB0byBjb25zb2xlLiANCisgKiBDYWxsIHRoaXMgZnVuY3Rpb24gbGlrZSB5b3Ugd291bGQgY2FsbCBwcmludGYuDQorICogQHBhcmFtIGZtdCBUaGUgZm9ybWF0IHN0cmluZw0KKyovDQordm9pZCBTaG93QWN0aXZpdHkgKGNoYXIgKmZtdCwgLi4uKQ0KK3sNCisgIHN0YXRpYyBjaGFyICAgYWN0aXZpdHlfaW5kaWNhdGlvbl9zdHJpbmdbXSA9ICJ8Ly1cXCI7DQorICBzdGF0aWMgaW50ICAgIGFpID0gMzsNCisgIHZhX2xpc3QgICAgICAgYXJnczsNCisgIGNoYXIgICAgICAgICAgdGV4dFsxMDI0XTsNCisNCisgIHZhX3N0YXJ0IChhcmdzLCBmbXQpOw0KKw0KKyAgdnNwcmludGYgKHRleHQsIGZtdCwgYXJncyk7DQorDQorICBhaSA9IGFpID09IDMgPyAwIDogYWkgKyAxOw0KKw0KKyAgcHJpbnRmICgiJWMgJXMgXHIiLCBhY3Rpdml0eV9pbmRpY2F0aW9uX3N0cmluZ1thaV0sIHRleHQpOw0KKyAgZmZsdXNoIChzdGRvdXQpOw0KKw0KKyAgdmFfZW5kIChhcmdzKTsNCit9DQorDQorI2RlZmluZSBQSSAzLjE0MTU5MjY1MzU4OTc5DQorLyoqDQorICogQGJyaWVmIENhbGN1bGF0ZSBzaW5lIHdhdmUgaW5jcmVtZW50cyAoLTEuMCB0byAxLjApLiANCisgKiBUaGUgZmlyc3QgdGltZSB0aGlzIGlzIGNhbGxlZCwgaXQgc2V0cyB1cCB0aGUgdGltZSBpbmNyZW1lbnQuIFN1YnNlcXVlbnQgY2FsbHMNCisgKiB3aWxsIGdpdmUgdmFsdWVzIGFsb25nIHRoZSBzaW5lIHdhdmUgZGVwZW5kaW5nIG9uIGN1cnJlbnQgdGltZS4gSWYgdGhlIHdhdmUgaXMNCisgKiBzdG9wcGVkIGFuZCByZXN0YXJ0ZWQsIGl0IG11c3QgYmUgcmVpbml0aWFsaXplZCB3aXRoIGEgbmV3ICJmaXJzdCBjYWxsIi4NCisgKiANCisgKiBAcGFyYW0gcGVyaW9kIGxlbmd0aCBvZiB0aW1lIHRvIGNvbXBsZXRlIGEgY29tcGxldGUgd2F2ZQ0KKyAqIEBwYXJhbSBzaW5TdGFydCBXaGVyZSB0byBzdGFydCB0aGUgc2luZSB3YXZlICgwLjAgPSAyIHBpLCBwaS8yID0gMS4wLCBldGMuKQ0KKyAqLw0KK2RvdWJsZSBTaW5Qb3NpdGlvbiAoZG91YmxlICpwZXJpb2QsIGRvdWJsZSBzaW5TdGFydCkNCit7DQorICBkb3VibGUgcnRuVmFsOw0KKyAgc3RhdGljIGRvdWJsZSBzaW5lUGVyaW9kPTAuMDsNCisgIHN0YXRpYyBkb3VibGUgdGltZXN0YW1wOw0KKyAgZG91YmxlIHNpbkFyZzsNCisNCisgIC8vMXN0IGNhbGwNCisgIGlmIChwZXJpb2QgIT0gTlVMTCkgew0KKyAgICBzaW5lUGVyaW9kID0gKnBlcmlvZDsNCisJdGltZXN0YW1wID0gR2V0VGltZSgpOw0KKwlyZXR1cm4gMC4wOw0KKyAgfQ0KKw0KKyAgLy9NdWx0aXBseWluZyBieSAyKnBpIHRvIHRoZSB0aW1lIGRpZmZlcmVuY2UgbWFrZXMgc2luZVBlcmlvZCB3b3JrIGlmIGl0J3MgbWVhc3VyZWQgaW4gc2Vjb25kcy4NCisgIC8vQWRkaW5nIHNpblN0YXJ0IHRvIHRoZSBwYXJ0IG11bHRpcGxpZWQgYnkgUEksIGJ1dCBub3QgYnkgMiwgYWxsb3dzIGl0IHRvIHdvcmsgYXMgZGVzY3JpYmVkIGluIHRoZSBjb21tZW50cy4NCisgIHNpbkFyZyA9IFBJICooKDIuMCAqIChHZXRUaW1lKCkgLSB0aW1lc3RhbXApKSArIHNpblN0YXJ0KSAvIHNpbmVQZXJpb2Q7DQorICBydG5WYWwgPSBzaW4gKHNpbkFyZyk7ICANCisgIHJldHVybiAocnRuVmFsKTsNCit9DQorDQorDQorLyoqDQorICogQGJyaWVmIEZpbmQgdGhlIGVsYXBzZWQgdGltZSBzaW5jZSBhIHNwZWNpZmllZCB0aW1lLg0KKyAqIEBwYXJhbSBzdGFydFRpbWUgVGhlIHN0YXJ0aW5nIHRpbWUNCisgKiBAcmV0dXJuIEhvdyBsb25nIGl0IGhhcyBiZWVuIHNpbmNlIHRoZSBzdGFydGluZyB0aW1lDQorICovDQorZG91YmxlIEVsYXBzZWRUaW1lICggZG91YmxlIHN0YXJ0VGltZSApICANCit7DQorCWRvdWJsZSByZWFsVGltZSA9IEdldFRpbWUoKTsJDQorCXJldHVybiAocmVhbFRpbWUtc3RhcnRUaW1lKTsNCit9DQorDQorLyoqDQorICogQGJyaWVmIEluaXRpYWxpemUgcGFuIHBhcmFtZXRlcnMNCisgKiBAcGFyYW0gcGVyaW9kIFRoZSBudW1iZXIgb2Ygc2Vjb25kcyB0byBjb21wbGV0ZSBvbmUgcGFuDQorICovDQordm9pZCBwYW5Jbml0KCkJew0KKwlkb3VibGUgcGVyaW9kID0gMy4wOyAgCS8vIG51bWJlciBvZiBzZWNvbmRzIGZvciBvbmUgY29tcGxldGUgcGFuDQorCVNpblBvc2l0aW9uKCZwZXJpb2QsIDAuMCk7CS8vIGluaXRpYWwgY2FsbCB0byBzZXQgdXAgdGltZQ0KK30NCisNCit2b2lkIHBhbkluaXQoZG91YmxlIHBlcmlvZCkJew0KKwlpZiAocGVyaW9kIDwgMC4wKSBwZXJpb2Q9My4wOw0KKwlTaW5Qb3NpdGlvbigmcGVyaW9kLCAwLjApOwkvLyBpbml0aWFsIGNhbGwgdG8gc2V0IHVwIHRpbWUNCit9DQorDQorLyoqDQorICogQGJyaWVmIE1vdmUgdGhlIGhvcml6b250YWwgc2Vydm8gYmFjayBhbmQgZm9ydGguDQorICogQHBhcmFtIHBhblNlcnZvIFRoZSBzZXJ2byBvYmplY3QgdG8gbW92ZQ0KKyAqIEBwYXJhbSBzaW5TdGFydCBUaGUgcG9zaXRpb24gb24gdGhlIHNpbmUgd2F2ZSB0byBiZWdpbiB0aGUgcGFuDQorICovDQordm9pZCBwYW5Gb3JUYXJnZXQoU2Vydm8gKnBhblNlcnZvKQl7IHBhbkZvclRhcmdldChwYW5TZXJ2bywgMC4wKTsgfQ0KKw0KK3ZvaWQgcGFuRm9yVGFyZ2V0KFNlcnZvICpwYW5TZXJ2bywgZG91YmxlIHNpblN0YXJ0KQl7DQorCWZsb2F0IG5vcm1hbGl6ZWRTaW5Qb3NpdGlvbiA9IChmbG9hdClTaW5Qb3NpdGlvbihOVUxMLCBzaW5TdGFydCk7DQorCWZsb2F0IG5ld1NlcnZvUG9zaXRpb24gPSBOb3JtYWxpemVUb1JhbmdlKG5vcm1hbGl6ZWRTaW5Qb3NpdGlvbik7DQorCXBhblNlcnZvLT5TZXQoIG5ld1NlcnZvUG9zaXRpb24gKTsNCisJLy9TaG93QWN0aXZpdHkgKCJwYW4geDogbm9ybWFsaXplZCAlZiBuZXdTZXJ2b1Bvc2l0aW9uID0gJWYiICwgDQorCS8vCQlub3JtYWxpemVkU2luUG9zaXRpb24sIG5ld1NlcnZvUG9zaXRpb24gKTsNCit9DQorDQorDQorLyoqIEBicmllZiBSZWFkIGEgZmlsZSBhbmQgcmV0dXJuIG5vbi1jb21tZW50IG91dHB1dCBzdHJpbmcgDQorDQorQ2FsbCB0aGUgZmlyc3QgdGltZSB3aXRoIDAgbGluZU51bWJlciB0byBnZXQgdGhlIG51bWJlciBvZiBsaW5lcyB0byByZWFkDQorVGhlbiBjYWxsIHdpdGggZWFjaCBsaW5lTnVtYmVyIHRvIGdldCBvbmUgY2FtZXJhIHBhcmFtZXRlci4gVGhlcmUgc2hvdWxkDQorYmUgb25lIHByb3BlcnR5PXZhbHVlIGVudHJ5IG9uIGVhY2ggbGluZSwgaS5lLiAiZXhwb3N1cmU9YXV0byINCisNCisgKiBAcGFyYW0gaW5wdXRGaWxlIGZpbGVuYW1lIHRvIHJlYWQNCisgKiBAcGFyYW0gb3V0cHV0U3RyaW5nIG9uZSBzdHJpbmcNCisgKiBAcGFyYW0gbGluZU51bWJlciBpZiAwLCByZXR1cm4gbnVtYmVyIG9mIGxpbmVzOyBlbHNlIHJldHVybiB0aGF0IGxpbmUgbnVtYmVyDQorICogQHJldHVybiBpbnQgbnVtYmVyIG9mIGxpbmVzIG9yIC0xIGlmIGVycm9yDQorICoqLw0KK2ludCBwcm9jZXNzRmlsZShjaGFyICppbnB1dEZpbGUsIGNoYXIgKm91dHB1dFN0cmluZywgaW50IGxpbmVOdW1iZXIpDQorew0KKwlGSUxFICppbmZpbGU7DQorCWludCBzdHJpbmdTaXplID0gODA7CQkvLyBtYXggc2l6ZSBvZiBvbmUgbGluZSBpbiBmaWxlIA0KKwljaGFyIGlucHV0U3RyW3N0cmluZ1NpemVdOw0KKwlzdHJ1Y3Qgc3RhdCBmaWxlU3RhdHVzOw0KKwlpbnQgZmlsZVNpemU9MDsNCisJaW50IGxpbmVDb3VudD0wOw0KKwkgIA0KKwlpZiAobGluZU51bWJlciA8IDApDQorCQkgIHJldHVybiAoLTEpOw0KKw0KKwlpZiAoKGluZmlsZSA9IGZvcGVuIChpbnB1dEZpbGUsICJyIikpID09IE5VTEwpIHsNCisJICAgIHByaW50ZiAoIkZhdGFsIGVycm9yIG9wZW5pbmcgZmlsZSAlc1xuIixpbnB1dEZpbGUpOw0KKwkgICAgcmV0dXJuICgwKTsNCisJfQ0KKyAgICBtZW1zZXQgKCZmaWxlU3RhdHVzLCAwLCBzaXplb2YoZmlsZVN0YXR1cykpOw0KKyAgICBpZiAoIXN0YXQoaW5wdXRGaWxlLCAmZmlsZVN0YXR1cykpIHsNCisgICAgICBpZiAoU19JU1JFRyhmaWxlU3RhdHVzLnN0X21vZGUpKSB7DQorICAgICAgICBmaWxlU2l6ZSA9IGZpbGVTdGF0dXMuc3Rfc2l6ZTsNCisgICAgICB9DQorICAgIH0NCisNCisgIHdoaWxlICghZmVvZihpbmZpbGUpKSB7DQorICAgIGlmIChmZ2V0cyAoaW5wdXRTdHIsIHN0cmluZ1NpemUsIGluZmlsZSkgIT0gTlVMTCkgew0KKyAgICAgIC8vIFNraXAgZW1wdHkgbGluZXMNCisgICAgICBpZiAoZW1wdHlTdHJpbmcoaW5wdXRTdHIpKQ0KKyAgICAgICAgY29udGludWU7DQorICAgICAgLy8gU2tpcCBjb21tZW50IGxpbmVzDQorICAgICAgaWYgKGlucHV0U3RyWzBdID09ICcjJyB8fCBpbnB1dFN0clswXSA9PSAnIScpDQorICAgICAgICBjb250aW51ZTsNCisNCisgICAgICBsaW5lQ291bnQrKzsNCisgICAgICBpZiAobGluZU51bWJlciA9PSAwKQ0KKyAgICAgICAgY29udGludWU7DQorICAgICAgZWxzZQ0KKyAgICAgIHsNCisgICAgCSAgaWYgKGxpbmVDb3VudCA9PSBsaW5lTnVtYmVyKQ0KKyAgICAJCSAgYnJlYWs7DQorICAgICAgfQ0KKyAgICB9DQorICB9DQorDQorICAvLyBjbG9zZSBmaWxlIA0KKyAgZmNsb3NlIChpbmZpbGUpOw0KKyAgLy8gaWYgbnVtYmVyIGxpbmVzIHJlcXVlc3RlZCByZXR1cm4gdGhlIGNvdW50DQorICBpZiAobGluZU51bWJlciA9PSAwKQ0KKwkgIHJldHVybiAobGluZUNvdW50KTsNCisgIC8vIGNoZWNrIGZvciBpbnB1dCBvdXQgb2YgcmFuZ2UNCisgIGlmIChsaW5lTnVtYmVyID4gbGluZUNvdW50KQ0KKwkgIHJldHVybiAoLTEpOw0KKyAgLy8gcmV0dXJuIHRoZSBsaW5lIHNlbGVjdGVkDQorICBpZiAobGluZUNvdW50KSB7DQorICAgIHN0cmlwU3RyaW5nKGlucHV0U3RyKTsNCisgICAgc3RyY3B5KG91dHB1dFN0cmluZywgaW5wdXRTdHIpOw0KKyAgICByZXR1cm4obGluZUNvdW50KTsNCisgIH0gDQorICBlbHNlIHsNCisgICAgcmV0dXJuKC0xKTsNCisgIH0NCit9DQorDQorLyoqIElnbm9yZSBlbXB0eSBzdHJpbmcgDQorICogQHBhcmFtIHN0cmluZyB0byBjaGVjayBpZiBlbXB0eQ0KKyAqKi8NCitpbnQgZW1wdHlTdHJpbmcoY2hhciAqc3RyaW5nKQ0KK3sNCisgIGludCBpLGxlbjsNCisNCisgIGlmKHN0cmluZyA9PSBOVUxMKQ0KKyAgICByZXR1cm4oMSk7DQorDQorICBsZW4gPSBzdHJsZW4oc3RyaW5nKTsNCisgIGZvcihpPTA7IGk8bGVuOyBpKyspIHsNCisgICAgLy8gSWdub3JlIHRoZSBmb2xsb3dpbmcgY2hhcmFjdGVycw0KKyAgICBpZiAoc3RyaW5nW2ldID09ICdcbicgfHwgc3RyaW5nW2ldID09ICdccicgfHwNCisgICAgICAgIHN0cmluZ1tpXSA9PSAnXHQnIHx8IHN0cmluZ1tpXSA9PSAnICcpDQorICAgICAgY29udGludWU7DQorICAgIHJldHVybigwKTsNCisgIH0NCisgIHJldHVybigxKTsNCit9DQorDQorLyoqIFJlbW92ZSBzcGVjaWFsIGNoYXJhY3RlcnMgZnJvbSBzdHJpbmcgDQorICogQHBhcmFtIHN0cmluZyB0byBwcm9jZXNzDQorICoqLw0KK3ZvaWQgc3RyaXBTdHJpbmcoY2hhciAqc3RyaW5nKQ0KK3sNCisgIGludCBpLGosbGVuOw0KKw0KKyAgaWYoc3RyaW5nID09IE5VTEwpDQorICAgIHJldHVybjsNCisNCisgIGxlbiA9IHN0cmxlbihzdHJpbmcpOw0KKyAgZm9yKGk9MCxqPTA7IGk8bGVuOyBpKyspIHsNCisgICAgLy8gUmVtb3ZlIHRoZSBmb2xsb3dpbmcgY2hhcmFjdGVycyBmcm9tIHRoZSBzdHJpbmcNCisgICAgaWYgKHN0cmluZ1tpXSA9PSAnXG4nIHx8IHN0cmluZ1tpXSA9PSAnXHInIHx8IHN0cmluZ1tpXSA9PSAnXCInKQ0KKyAgICAgIGNvbnRpbnVlOw0KKyAgICAvLyBDb3B5IGFueXRoaW5nIGVsc2UNCisgICAgc3RyaW5nW2orK10gPSBzdHJpbmdbaV07DQorICB9DQorICBzdHJpbmdbal0gPSAnXDAnOyANCit9DQorDQorDQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvVmlzaW9uMjAwOS9CYWVVdGlsaXRpZXMuaCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL1Zpc2lvbjIwMDkvQmFlVXRpbGl0aWVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODk4YzllNwotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL1Zpc2lvbjIwMDkvQmFlVXRpbGl0aWVzLmgKQEAgLTAsMCArMSw2OCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorKiAgUHJvamVjdCAgIAkJOiBGSVJTVCBNb3RvciBDb250cm9sbGVyDQorKiAgRmlsZSBOYW1lICAJCTogQmFlVXRpbGl0aWVzLmggICAgICAgICAgDQorKiAgQ29udHJpYnV0b3JzICAgCTogSkRHLCBFTEYNCisqICBDcmVhdGlvbiBEYXRlIAk6IEF1Z3VzdCAxMiwgMjAwOA0KKyogIFJldmlzaW9uIEhpc3RvcnkJOiBTb3VyY2UgY29kZSAmIHJldmlzaW9uIGhpc3RvcnkgbWFpbnRhaW5lZCBhdCBzb3VyY2Vmb3JnZS5XUEkuZWR1ICAgICAgDQorKiAgRmlsZSBEZXNjcmlwdGlvbgk6IEdsb2JhbGx5IGRlZmluZWQgdmFsdWVzIGZvciB1dGlsaXRpZXMNCisqLw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorLyogICAgICAgIENvcHlyaWdodCAoYykgRklSU1QgMjAwOC4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgKi8NCisvKiAgICAgT3BlbiBTb3VyY2UgU29mdHdhcmUgLSBtYXkgYmUgbW9kaWZpZWQgYW5kIHNoYXJlZCBieSBGUkMgdGVhbXMuICAgICAgICAqLw0KKy8qICAgTXVzdCBiZSBhY2NvbXBhbmllZCBieSB0aGUgQlNEIGxpY2Vuc2UgZmlsZSBpbiAkKFdJTkRfQkFTRSkvV1BJTGliLiAgICAgICovDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisjaWZuZGVmIF9fQkFFVVRJTElUSUVTX0hfXw0KKyNkZWZpbmUgX19CQUVVVElMSVRJRVNfSF9fDQorDQorLyogIENvbnN0YW50cyAqLw0KKyNkZWZpbmUgTE9HX0RFQlVHICAgIF9fRklMRV9fLF9fRlVOQ1RJT05fXyxfX0xJTkVfXyxERUJVR19UWVBFDQorI2RlZmluZSBMT0dfSU5GTyAgICAgX19GSUxFX18sX19GVU5DVElPTl9fLF9fTElORV9fLElORk9fVFlQRQ0KKyNkZWZpbmUgTE9HX0VSUk9SICAgIF9fRklMRV9fLF9fRlVOQ1RJT05fXyxfX0xJTkVfXyxFUlJPUl9UWVBFDQorI2RlZmluZSBMT0dfQ1JJVElDQUwgX19GSUxFX18sX19GVU5DVElPTl9fLF9fTElORV9fLENSSVRJQ0FMX1RZUEUNCisjZGVmaW5lIExPR19GQVRBTCAgICBfX0ZJTEVfXyxfX0ZVTkNUSU9OX18sX19MSU5FX18sRkFUQUxfVFlQRQ0KKyNkZWZpbmUgTE9HX0RFQlVHICAgIF9fRklMRV9fLF9fRlVOQ1RJT05fXyxfX0xJTkVfXyxERUJVR19UWVBFDQorDQorLyogICBFbnVtZXJhdGVkIFR5cGVzICovDQorDQorLyoqIGRlYnVnIGxldmVscyAqLw0KK2VudW0gZHByaW50X3R5cGUge0RFQlVHX1RZUEUsIElORk9fVFlQRSwgRVJST1JfVFlQRSwgQ1JJVElDQUxfVFlQRSwgRkFUQUxfVFlQRX07DQorDQorLyoqIGRlYnVnIG91dHB1dCBzZXR0aW5nICovDQordHlwZWRlZiBlbnVtIERlYnVnT3V0cHV0VHlwZV9lbnVtIHsgDQorCURFQlVHX09GRiwgREVCVUdfTU9TVExZX09GRiwgREVCVUdfU0NSRUVOX09OTFksIERFQlVHX0ZJTEVfT05MWSwgREVCVUdfU0NSRUVOX0FORF9GSUxFDQorfURlYnVnT3V0cHV0VHlwZTsNCisNCisvKiAgRW51bWVyYXRlZCBUeXBlcyAqLw0KKw0KKy8qIFV0aWxpdHkgZnVuY3Rpb25zICovDQorDQorLyogZGVidWcgKi8NCit2b2lkIFNldERlYnVnRmxhZyAoIERlYnVnT3V0cHV0VHlwZSBmbGFnICApOyANCit2b2lkIGRwcmludGYgKCBjaGFyICogdGVtcFN0cmluZywgLi4uICApOyAgLyogVmFyaWFibGUgYXJndW1lbnQgbGlzdCAqLw0KKw0KKy8qIHNldCBGUkMgcmFuZ2VzIGZvciBkcml2ZSAqLw0KK2RvdWJsZSBSYW5nZVRvTm9ybWFsaXplZChkb3VibGUgcGl4ZWwsIGludCByYW5nZSk7DQorLyogY2hhbmdlIG5vcm1hbGl6ZWQgdmFsdWUgdG8gYW55IHJhbmdlIC0gdXNlZCBmb3Igc2Vydm8gKi8NCitmbG9hdCBOb3JtYWxpemVUb1JhbmdlKGZsb2F0IG5vcm1hbGl6ZWRWYWx1ZSwgZmxvYXQgbWluUmFuZ2UsIGZsb2F0IG1heFJhbmdlKTsNCitmbG9hdCBOb3JtYWxpemVUb1JhbmdlKGZsb2F0IG5vcm1hbGl6ZWRWYWx1ZSk7DQorDQorLyogc3lzdGVtIHV0aWxpdGllcyAqLw0KK3ZvaWQgU2hvd0FjdGl2aXR5IChjaGFyICpmbXQsIC4uLik7DQorZG91YmxlIEVsYXBzZWRUaW1lIChkb3VibGUgc3RhcnRUaW1lKTsNCisNCisvKiBzZXJ2byBwYW5uaW5nIHV0aWxpdGllcyAqLw0KK2NsYXNzIFNlcnZvOw0KK2RvdWJsZSBTaW5Qb3NpdGlvbiAoZG91YmxlICpwZXJpb2QsIGRvdWJsZSBzaW5TdGFydCk7DQordm9pZCBwYW5Jbml0KCk7DQordm9pZCBwYW5Jbml0KGRvdWJsZSBwZXJpb2QpOw0KK3ZvaWQgcGFuRm9yVGFyZ2V0KFNlcnZvICpwYW5TZXJ2byk7DQordm9pZCBwYW5Gb3JUYXJnZXQoU2Vydm8gKnBhblNlcnZvLCBkb3VibGUgc2luU3RhcnQpOw0KKw0KKy8qIGNvbmZpZyBmaWxlIHJlYWQgdXRpbGl0aWVzICovDQoraW50IHByb2Nlc3NGaWxlKGNoYXIgKmlucHV0RmlsZSwgY2hhciAqb3V0cHV0U3RyaW5nLCBpbnQgbGluZU51bWJlcik7DQoraW50IGVtcHR5U3RyaW5nKGNoYXIgKnN0cmluZyk7DQordm9pZCBzdHJpcFN0cmluZyhjaGFyICpzdHJpbmcpOw0KKw0KKyNlbmRpZg0KKw0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL1Zpc2lvbjIwMDkvRnJjRXJyb3IuY3BwIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvVmlzaW9uMjAwOS9GcmNFcnJvci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGMxYzlmNAotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL1Zpc2lvbjIwMDkvRnJjRXJyb3IuY3BwCkBAIC0wLDAgKzEsMTIzNSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorKiAgUHJvamVjdCAgIAkJOiBGSVJTVCBNb3RvciBDb250cm9sbGVyDQorKiAgRmlsZSBOYW1lICAJCTogRnJjRXJyb3IuY3BwICAgICAgICANCisqICBDb250cmlidXRvcnMgICAJOiBKREcsIEVMRg0KKyogIENyZWF0aW9uIERhdGUgCTogSnVseSAyMCwgMjAwOA0KKyogIFJldmlzaW9uIEhpc3RvcnkJOiBTb3VyY2UgY29kZSAmIHJldmlzaW9uIGhpc3RvcnkgbWFpbnRhaW5lZCBhdCBzb3VyY2Vmb3JnZS5XUEkuZWR1ICAgIA0KKyogIEZpbGUgRGVzY3JpcHRpb24JOiBFcnJvciBoYW5kbGluZyBmdW5jdGlvbmFsaXR5IGZvciBDIHJvdXRpbmVzDQorKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiAgICAgICAgQ29weXJpZ2h0IChjKSBGSVJTVCAyMDA4LiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAqLw0KKy8qICBPcGVuIFNvdXJjZSBTb2Z0d2FyZSAtIG1heSBiZSBtb2RpZmllZCBhbmQgc2hhcmVkIGJ5IEZSQyB0ZWFtcy4gVGhlIGNvZGUgICovDQorLyogIG11c3QgYmUgYWNjb21wYW5pZWQgYnkgdGhlIEZJUlNUIEJTRCBsaWNlbnNlIGZpbGUgaW4gJChXSU5EX0JBU0UpL1dQSUxpYi4gKi8NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKyANCisjaW5jbHVkZSAibml2aXNpb24uaCIgDQorI2luY2x1ZGUgIkZyY0Vycm9yLmgiIA0KKw0KKy8qKg0KKyAqIEdldCB0aGUgZXJyb3IgY29kZSByZXR1cm5lZCBmcm9tIHRoZSBOSSBWaXNpb24gbGlicmFyeQ0KKyAqIEByZXR1cm4gVGhlIGxhc3QgZXJyb3IgY29kZS4NCisgKi8NCitpbnQgR2V0TGFzdFZpc2lvbkVycm9yKCkNCit7DQorCS8vaW50IGVycm9yQ29kZSA9IGltYXFHZXRMYXN0VmlzaW9uRXJyb3IoKTsgICAgIC8vIGVycm9yIGNvZGU6IDAgPSBubyBlcnJvcgkNCisJLy9jaGFyKiBlcnJvclRleHQgPSBHZXRWaXNpb25FcnJvclRleHQoZXJyb3JDb2RlKTsNCisJLy9kcHJpbnRmIChMT0dfREVCVUcsICJFcnJvciA9ICVpICAlcyAiLCBlcnJvckNvZGUsIGVycm9yVGV4dCk7DQorCXJldHVybiBpbWFxR2V0TGFzdEVycm9yKCk7DQorfQ0KKwkNCisvKioNCisqIEdldCB0aGUgZXJyb3IgdGV4dCBmb3IgYW4gTkkgVmlzaW9uIGVycm9yIGNvZGUuDQorKiBOb3RlOiBpbWFxR2V0RXJyb3JUZXh0KCkgaXMgbm90IHN1cHBvcnRlZCBvbiByZWFsIHRpbWUgc3lzdGVtLCBzbw0KKyogc28gcmVsZXZhbnQgc3RyaW5ncyBhcmUgaGFyZGNvZGVkIGhlcmUgLSB0aGUgbWFpbnRhaW5lZCB2ZXJzaW9uIGlzDQorKiBpbiB0aGUgTGFiV2luZG93cy9DVkkgaGVscCBmaWxlLg0KKyogQHBhcmFtIGVycm9yQ29kZSBUaGUgZXJyb3IgY29kZSB0byBmaW5kIHRoZSB0ZXh0IGZvci4NCisqIEByZXR1cm4gVGhlIGVycm9yIHRleHQNCisqLw0KK2NoYXIqIEdldFZpc2lvbkVycm9yVGV4dChpbnQgZXJyb3JDb2RlKQ0KK3sNCisJY2hhciogZXJyb3JUZXh0Ow0KKw0KKwlzd2l0Y2ggKGVycm9yQ29kZSkNCisJew0KKwkJZGVmYXVsdDoNCisJCQl7IGVycm9yVGV4dCA9ICJVTktOT1dOX0VSUk9SIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk1MTM4Og0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9PQ1JfUkVHSU9OX1RPT19TTUFMTCI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTEzOToNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfSU1BUV9RUl9ESU1FTlNJT05fSU5WQUxJRCI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTE0MDoNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfT0NSX0NIQVJfUkVQT1JUX0NPUlJVUFRFRCI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTE0MToNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfT0NSX05PX1RFWFRfRk9VTkQiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTUxNDI6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX1FSX0RFVEVDVElPTl9NT0RFTFRZUEUiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTUxNDM6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX1FSX0RFVEVDVElPTl9NT0RFIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk1MTQ0Og0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9RUl9JTlZBTElEX0JBUkNPREUiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTUxNDU6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX1FSX0lOVkFMSURfUkVBRCI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTE0NjoNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfUVJfREVURUNUSU9OX1ZFUlNJT04iO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTUxNDc6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX0JBUkNPREVfUlNTTElNSVRFRCI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTE0ODoNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfT1ZFUkxBWV9HUk9VUF9OT1RfRk9VTkQiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTUxNDk6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX0RVUExJQ0FURV9UUkFOU0ZPUk1fVFlQRSI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTE1MToNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfT0NSX0NPUlJFQ1RJT05fRkFJTEVEIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk1MTU1Og0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9PQ1JfT1JJRU5UX0RFVEVDVF9GQUlMRUQiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTUxNTY6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX09DUl9TS0VXX0RFVEVDVF9GQUlMRUQiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTUxNTg6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX09DUl9JTlZBTElEX0NPTlRSQVNUTU9ERSI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTE1OToNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfT0NSX0lOVkFMSURfVE9MRVJBTkNFIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk1MTYwOg0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9PQ1JfSU5WQUxJRF9NQVhQT0lOVFNJWkUiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTUxNjE6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX09DUl9JTlZBTElEX0NPUlJFQ1RJT05MRVZFTCI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTE2MjoNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfT0NSX0lOVkFMSURfQ09SUkVDVElPTk1PREUiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTUxNjM6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX09DUl9JTlZBTElEX0NIQVJBQ1RFUlBSRUZFUkVOQ0UiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTUxNjQ6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX09DUl9BRERfV09SRF9GQUlMRUQiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTUxNjU6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX09DUl9XVFNfRElSX05PVF9GT1VORCI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTE2NjoNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfT0NSX0JJTl9ESVJfTk9UX0ZPVU5EIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk1MTY3Og0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9PQ1JfSU5WQUxJRF9PVVRQVVRERUxJTUlURVIiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTUxNjg6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX09DUl9JTlZBTElEX0FVVE9DT1JSRUNUSU9OTU9ERSI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTE2OToNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfT0NSX0lOVkFMSURfUkVDT0dOSVRJT05NT0RFIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk1MTcwOg0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9PQ1JfSU5WQUxJRF9DSEFSQUNURVJUWVBFIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk1MTcxOg0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9PQ1JfSU5JX0ZJTEVfTk9UX0ZPVU5EIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk1MTcyOg0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9PQ1JfSU5WQUxJRF9DSEFSQUNURVJTRVQiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTUxNzM6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX09DUl9JTlZBTElEX0xBTkdVQUdFIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk1MTc0Og0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9PQ1JfSU5WQUxJRF9BVVRPT1JJRU5UTU9ERSI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTE3NToNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfT0NSX0JBRF9VU0VSX0RJQ1RJT05BUlkiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTUxNzg6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX09DUl9SRUNPR05JVElPTl9GQUlMRUQiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTUxNzk6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX09DUl9QUkVQUk9DRVNTSU5HX0ZBSUxFRCI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTIwMDoNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfT0NSX0lOVkFMSURfUEFSQU1FVEVSIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk1MjAxOg0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9PQ1JfTE9BRF9MSUJSQVJZIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk1MjAzOg0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9PQ1JfTElCX0lOSVQiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTUyMTA6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX09DUl9DQU5OT1RfTUFUQ0hfVEVYVF9URU1QTEFURSI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTIxMToNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfT0NSX0JBRF9URVhUX1RFTVBMQVRFIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk1MjEyOg0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9PQ1JfVEVNUExBVEVfV1JPTkdfU0laRSI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTIzMzoNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfVEVNUExBVEVfSU1BR0VfVE9PX0xBUkdFIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk1MjM0Og0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9URU1QTEFURV9JTUFHRV9UT09fU01BTEwiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTUyMzU6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX1RFTVBMQVRFX0lNQUdFX0NPTlRSQVNUX1RPT19MT1ciO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTUyMzc6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX1RFTVBMQVRFX0RFU0NSSVBUT1JfU0hJRlRfMSI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTIzODoNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfVEVNUExBVEVfREVTQ1JJUFRPUl9OT1NISUZUIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk1MjM5Og0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9URU1QTEFURV9ERVNDUklQVE9SX1NISUZUIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk1MjQwOg0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9URU1QTEFURV9ERVNDUklQVE9SX1JPVEFUSU9OXzEiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTUyNDE6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX1RFTVBMQVRFX0RFU0NSSVBUT1JfTk9ST1RBVElPTiI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTI0MjoNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfVEVNUExBVEVfREVTQ1JJUFRPUl9ST1RBVElPTiI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTI0MzoNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfVEVNUExBVEVfREVTQ1JJUFRPUl80IjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk1MjQ0Og0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9URU1QTEFURV9ERVNDUklQVE9SXzMiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTUyNDU6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX1RFTVBMQVRFX0RFU0NSSVBUT1JfMiI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTI0NjoNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfVEVNUExBVEVfREVTQ1JJUFRPUl8xIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk1MjQ3Og0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9URU1QTEFURV9ERVNDUklQVE9SIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk1MjQ4Og0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9UT09fTUFOWV9ST1RBVElPTl9BTkdMRV9SQU5HRVMiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTUyNDk6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX1JPVEFUSU9OX0FOR0xFX1JBTkdFX1RPT19MQVJHRSI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTI1MDoNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfTUFUQ0hfU0VUVVBfREFUQSI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTI1MToNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfSU5WQUxJRF9NQVRDSF9NT0RFIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk1MjUyOg0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9MRUFSTl9TRVRVUF9EQVRBIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk1MjUzOg0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9JTlZBTElEX0xFQVJOX01PREUiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTUyNTY6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX0VWRU5fV0lORE9XX1NJWkUiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTUyNTc6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX0lOVkFMSURfRURHRV9ESVIiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTUyNTg6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX0JBRF9GSUxURVJfV0lEVEgiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTUyNjA6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX0hFQVBfVFJBU0hFRCI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTI2MToNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfR0lQX1JBTkdFIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk1MjYyOg0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9MQ0RfQkFEX01BVENIIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk1MjYzOg0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9MQ0RfTk9fU0VHTUVOVFMiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTUyNjU6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX0JBUkNPREUiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTUyNjc6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX0NPTVBMRVhfUk9PVCI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTI2ODoNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfTElORUFSX0NPRUZGIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk1MjY5Og0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9OVUxMX1BPSU5URVIiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTUyNzA6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX0RJVl9CWV9aRVJPIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk1Mjc1Og0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9JTlZBTElEX0JST1dTRVJfSU1BR0UiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTUyNzY6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX0xJTkVTX1BBUkFMTEVMIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk1Mjc3Og0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9CQVJDT0RFX0NIRUNLU1VNIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk1Mjc4Og0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9MQ0RfTk9UX05VTUVSSUMiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTUyNzk6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX1JPSV9OT1RfUE9MWUdPTiI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTI4MDoNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfUk9JX05PVF9SRUNUIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk1MjgxOg0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9JTUFHRV9TTUFMTEVSX1RIQU5fQk9SREVSIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk1MjgyOg0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9DQU5UX0RSQVdfSU5UT19WSUVXRVIiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTUyODM6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX0lOVkFMSURfUkFLRV9ESVJFQ1RJT04iO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTUyODQ6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX0lOVkFMSURfRURHRV9QUk9DRVNTIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk1Mjg1Og0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9JTlZBTElEX1NQT0tFX0RJUkVDVElPTiI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTI4NjoNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfSU5WQUxJRF9DT05DRU5UUklDX1JBS0VfRElSRUNUSU9OIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk1Mjg3Og0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9JTlZBTElEX0xJTkUiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTUyOTA6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX1NIQVBFTUFUQ0hfQkFEVEVNUExBVEUiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTUyOTE6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX1NIQVBFTUFUQ0hfQkFESU1BR0VEQVRBIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk1MjkyOg0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9QT0lOVFNfQVJFX0NPTExJTkVBUiI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTI5MzoNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfQ09OVE9VUklEX05PVF9GT1VORCI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTI5NDoNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfQ09OVE9VUl9JTkRFWF9PVVRfT0ZfUkFOR0UiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTUyOTU6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX0lOVkFMSURfSU5URVJQT0xBVElPTk1FVEhPRF9JTlRFUlBPTEFURVBPSU5UUyI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTI5NjoNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfSU5WQUxJRF9CQVJDT0RFVFlQRSI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTI5NzoNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfSU5WQUxJRF9QQVJUSUNMRUlORk9NT0RFIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk1Mjk4Og0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9DT01QTEVYUExBTkVfTk9UX1JFQUxfT1JfSU1BR0lOQVJZIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk1Mjk5Og0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9JTlZBTElEX0NPTVBMRVhQTEFORSI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTMwMDoNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfSU5WQUxJRF9NRVRFUkFSQ01PREUiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTUzMDE6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX1JPSV9OT1RfMl9MSU5FUyI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTMwMjoNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfSU5WQUxJRF9USFJFU0hPTERNRVRIT0QiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTUzMDM6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX0lOVkFMSURfTlVNX09GX0NMQVNTRVMiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTUzMDQ6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX0lOVkFMSURfTUFUSFRSQU5TRk9STU1FVEhPRCI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTMwNToNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfSU5WQUxJRF9SRUZFUkVOQ0VNT0RFIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk1MzA2Og0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9JTlZBTElEX1RPT0wiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTUzMDc6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX1BSRUNJU0lPTl9OT1RfR1RSX1RIQU5fMCI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTMwODoNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfSU5WQUxJRF9DT0xPUlNFTlNJVElWSVRZIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk1MzA5Og0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9JTlZBTElEX1dJTkRPV19USFJFQURfUE9MSUNZIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk1MzEwOg0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9JTlZBTElEX1BBTEVUVEVfVFlQRSI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTMxMToNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfSU5WQUxJRF9DT0xPUl9TUEVDVFJVTSI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTMxMjoNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfTENEX0NBTElCUkFURSI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTMxMzoNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfV1JJVEVfRklMRV9OT1RfU1VQUE9SVEVEIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk1MzE2Og0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9JTlZBTElEX0tFUk5FTF9DT0RFIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk1MzE3Og0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9VTkRFRl9QT0lOVCI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTMxODoNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfSU5TRl9QT0lOVFMiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTUzMTk6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX0lOVkFMSURfU1VCUElYX1RZUEUiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTUzMjA6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX1RFTVBMQVRFX0VNUFRZIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk1MzIxOg0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9JTlZBTElEX01PUlBIT0xPR1lNRVRIT0QiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTUzMjI6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX0lOVkFMSURfVEVYVEFMSUdOTUVOVCI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTMyMzoNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfSU5WQUxJRF9GT05UQ09MT1IiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTUzMjQ6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX0lOVkFMSURfU0hBUEVNT0RFIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk1MzI1Og0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9JTlZBTElEX0RSQVdNT0RFIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk1MzI2Og0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9JTlZBTElEX0RSQVdNT0RFX0ZPUl9MSU5FIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk1MzI3Og0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9JTlZBTElEX1NDQUxJTkdNT0RFIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk1MzI4Og0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9JTlZBTElEX0lOVEVSUE9MQVRJT05NRVRIT0QiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTUzMjk6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX0lOVkFMSURfT1VUTElORU1FVEhPRCI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTMzMDoNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfSU5WQUxJRF9CT1JERVJfU0laRSI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTMzMToNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfSU5WQUxJRF9CT1JERVJNRVRIT0QiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTUzMzI6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX0lOVkFMSURfQ09NUEFSRUZVTkNUSU9OIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk1MzMzOg0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9JTlZBTElEX1ZFUlRJQ0FMX1RFWFRfQUxJR05NRU5UIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk1MzM0Og0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9JTlZBTElEX0NPTlZFUlNJT05TVFlMRSI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTMzNToNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfRElTUEFUQ0hfU1RBVFVTX0NPTkZMSUNUIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk1MzM2Og0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9VTktOT1dOX0FMR09SSVRITSI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTM0MDoNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfSU5WQUxJRF9TSVpFVFlQRSI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTM0MzoNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfRklMRV9GSUxFTkFNRV9OVUxMIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk1MzQ1Og0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9JTlZBTElEX0ZMSVBBWElTIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk1MzQ2Og0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9JTlZBTElEX0lOVEVSUE9MQVRJT05NRVRIT0RfRk9SX1JPVEFURSI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTM0NzoNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfSU5WQUxJRF8zRERJUkVDVElPTiI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTM0ODoNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfSU5WQUxJRF8zRFBMQU5FIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk1MzQ5Og0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9JTlZBTElEX1NLRUxFVE9OTUVUSE9EIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk1MzUwOg0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9JTlZBTElEX1ZJU0lPTl9JTkZPIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk1MzUxOg0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9JTlZBTElEX1JFQ1QiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTUzNTI6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX0lOVkFMSURfRkVBVFVSRV9NT0RFIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk1MzUzOg0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9JTlZBTElEX1NFQVJDSF9TVFJBVEVHWSI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTM1NDoNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfSU5WQUxJRF9DT0xPUl9XRUlHSFQiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTUzNTU6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX0lOVkFMSURfTlVNX01BVENIRVNfUkVRVUVTVEVEIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk1MzU2Og0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9JTlZBTElEX01JTl9NQVRDSF9TQ09SRSI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTM1NzoNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfSU5WQUxJRF9DT0xPUl9JR05PUkVfTU9ERSI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTM2MDoNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfQ09NUExFWF9QTEFORSI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTM2MToNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfSU5WQUxJRF9TVEVFUE5FU1MiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTUzNjI6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX0lOVkFMSURfV0lEVEgiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTUzNjM6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX0lOVkFMSURfU1VCU0FNUExJTkdfUkFUSU8iO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTUzNjQ6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX0lHTk9SRV9DT0xPUl9TUEVDVFJVTV9TRVQiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTUzNjU6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX0NPTE9SX1RFTVBMQVRFX0RFU0NSSVBUT1JfTk9TUEVDVFJVTSI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTM2NjoNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfQ09MT1JfVEVNUExBVEVfREVTQ1JJUFRPUl9OT1NIQVBFIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk1MzY3Og0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9DT0xPUl9URU1QTEFURV9ERVNDUklQVE9SX1JPVEFUSU9OXzUiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTUzNjg6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX0NPTE9SX1RFTVBMQVRFX0RFU0NSSVBUT1JfUk9UQVRJT05fNCI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTM2OToNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfQ09MT1JfVEVNUExBVEVfREVTQ1JJUFRPUl9ST1RBVElPTl8zIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk1MzcwOg0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9DT0xPUl9URU1QTEFURV9ERVNDUklQVE9SX1JPVEFUSU9OXzIiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTUzNzE6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX0NPTE9SX1RFTVBMQVRFX0RFU0NSSVBUT1JfUk9UQVRJT05fMSI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTM3MjoNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfQ09MT1JfVEVNUExBVEVfREVTQ1JJUFRPUl9OT1JPVEFUSU9OIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk1MzczOg0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9DT0xPUl9URU1QTEFURV9ERVNDUklQVE9SX1JPVEFUSU9OIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk1Mzc0Og0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9DT0xPUl9URU1QTEFURV9ERVNDUklQVE9SX1NISUZUXzIiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTUzNzU6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX0NPTE9SX1RFTVBMQVRFX0RFU0NSSVBUT1JfU0hJRlRfMSI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTM3NjoNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfQ09MT1JfVEVNUExBVEVfREVTQ1JJUFRPUl9OT1NISUZUIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk1Mzc3Og0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9DT0xPUl9URU1QTEFURV9ERVNDUklQVE9SX1NISUZUIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk1Mzc4Og0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9DT0xPUl9URU1QTEFURV9ERVNDUklQVE9SXzYiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTUzNzk6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX0NPTE9SX1RFTVBMQVRFX0RFU0NSSVBUT1JfNSI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTM4MDoNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfQ09MT1JfVEVNUExBVEVfREVTQ1JJUFRPUl80IjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk1MzgxOg0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9DT0xPUl9URU1QTEFURV9ERVNDUklQVE9SXzMiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTUzODI6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX0NPTE9SX1RFTVBMQVRFX0RFU0NSSVBUT1JfMiI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTM4MzoNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfQ09MT1JfVEVNUExBVEVfREVTQ1JJUFRPUl8xIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk1Mzg0Og0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9DT0xPUl9URU1QTEFURV9ERVNDUklQVE9SIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk1Mzg1Og0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9DT0xPUl9ST1RBVElPTl9SRVFVSVJFU19TSEFQRV9GRUFUVVJFIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk1Mzg2Og0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9DT0xPUl9NQVRDSF9TRVRVUF9EQVRBX1NIQVBFIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk1Mzg3Og0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9DT0xPUl9NQVRDSF9TRVRVUF9EQVRBIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk1Mzg4Og0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9DT0xPUl9MRUFSTl9TRVRVUF9EQVRBX1NIQVBFIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk1Mzg5Og0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9DT0xPUl9MRUFSTl9TRVRVUF9EQVRBIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk1MzkwOg0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9DT0xPUl9URU1QTEFURV9JTUFHRV9MVU1JTkFOQ0VfQ09OVFJBU1RfVE9PX0xPVyI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTM5MToNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfQ09MT1JfVEVNUExBVEVfSU1BR0VfSFVFX0NPTlRSQVNUX1RPT19MT1ciO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTUzOTI6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX0NPTE9SX1RFTVBMQVRFX0lNQUdFX1RPT19MQVJHRSI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTM5MzoNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfQ09MT1JfVEVNUExBVEVfSU1BR0VfVE9PX1NNQUxMIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk1Mzk0Og0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9DT0xPUl9TUEVDVFJVTV9NQVNLIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk1Mzk1Og0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9DT0xPUl9JTUFHRV9SRVFVSVJFRCI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTM5NzoNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfQ09NUExFWF9JTUFHRV9SRVFVSVJFRCI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTM5OToNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfTVVMVElDT1JFX0lOVkFMSURfQVJHVU1FTlQiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTU0MDA6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX01VTFRJQ09SRV9PUEVSQVRJT04iO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTU0MDE6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX0lOVkFMSURfTUFUQ0hGQUNUT1IiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTU0MDI6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX0lOVkFMSURfTUFYUE9JTlRTIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk1NDAzOg0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9FWFRSQUlORk9fVkVSU0lPTiI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTQwNDoNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfSU5WQUxJRF9JTlRFUlBPTEFUSU9OTUVUSE9EX0ZPUl9VTldSQVAiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTU0MDU6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX0lOVkFMSURfVEVYVE9SSUVOVEFUSU9OIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk1NDA2Og0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9DT09SRFNZU19OT1RfRk9VTkQiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTU0MDc6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX0lOVkFMSURfQ09OVFJBU1QiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTU0MDg6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX0lOVkFMSURfREVURUNUSU9OX01PREUiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTU0MDk6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX0lOVkFMSURfU1VCUElYRUxfRElWSVNJT05TIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk1NDEwOg0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9JTlZBTElEX0lDT05TX1BFUl9MSU5FIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk1NTQ5Og0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9OSU9DUl9JTlZBTElEX05VTUJFUl9PRl9PQkpFQ1RTX1RPX1ZFUklGWSI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTU1MDoNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfTklPQ1JfSU5WQUxJRF9DSEFSQUNURVJfVkFMVUUiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTU1NTE6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX05JT0NSX1JFTkFNRV9SRUZDSEFSIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk1NTUyOg0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9OSU9DUl9OT1RfQV9WQUxJRF9DSEFSQUNURVJfU0VUIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk1NTUzOg0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9OSU9DUl9JTlZBTElEX01JTl9CT1VORElOR19SRUNUX0hFSUdIVCI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTU1NDoNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfTklPQ1JfSU5WQUxJRF9SRUFEX1JFU09MVVRJT04iO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTU1NTU6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX05JT0NSX0lOVkFMSURfU1BBQ0lOR19SQU5HRSI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTU1NjoNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfTklPQ1JfSU5WQUxJRF9CT1VORElOR19SRUNUX0hFSUdIVF9SQU5HRSI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTU1NzoNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfTklPQ1JfSU5WQUxJRF9CT1VORElOR19SRUNUX1dJRFRIX1JBTkdFIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk1NTU4Og0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9OSU9DUl9JTlZBTElEX0NIQVJBQ1RFUl9TSVpFX1JBTkdFIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk1NTU5Og0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9OSU9DUl9JTlZBTElEX1JFQURfT1BUSU9OIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk1NTYwOg0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9OSU9DUl9JTlZBTElEX09CSkVDVF9JTkRFWCI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTU2MToNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfTklPQ1JfSU5WQUxJRF9OVU1CRVJfT0ZfQ0hBUkFDVEVSUyI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTU2MjoNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfTklPQ1JfQk9PTEVBTl9WQUxVRV9GT1JfU1RSSU5HX0FUVFJJQlVURSI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTU2MzoNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfTklPQ1JfVU5MSUNFTlNFRCI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTU2NDoNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfTklPQ1JfSU5WQUxJRF9QUkVERUZJTkVEX0NIQVJBQ1RFUiI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTU2NToNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfTklPQ1JfTVVTVF9CRV9TSU5HTEVfQ0hBUkFDVEVSIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk1NTY2Og0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9OSU9DUl9CT09MRUFOX1ZBTFVFX0ZPUl9JTlRFR0VSX0FUVFJJQlVURSI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTU2NzoNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfTklPQ1JfU1RSSU5HX1ZBTFVFX0ZPUl9CT09MRUFOX0FUVFJJQlVURSI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTU2ODoNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfTklPQ1JfU1RSSU5HX1ZBTFVFX0ZPUl9JTlRFR0VSX0FUVFJJQlVURSI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTU2OToNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfTklPQ1JfSU5WQUxJRF9BVFRSSUJVVEUiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTU1NzA6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX05JT0NSX0lOVEVHRVJfVkFMVUVfRk9SX0JPT0xFQU5fQVRUUklCVVRFIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk1NTcxOg0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9OSU9DUl9HRVRfT05MWV9BVFRSSUJVVEUiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTU1NzI6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX05JT0NSX0lOVEVHRVJfVkFMVUVfRk9SX1NUUklOR19BVFRSSUJVVEUiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTU1NzM6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX05JT0NSX0lOVkFMSURfQ0hBUkFDVEVSX1NFVF9GSUxFX1ZFUlNJT04iO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTU1NzQ6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX05JT0NSX0NIQVJBQ1RFUl9TRVRfREVTQ1JJUFRJT05fVE9PX0xPTkciO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTU1NzU6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX05JT0NSX0lOVkFMSURfTlVNQkVSX09GX0VST1NJT05TIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk1NTc2Og0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9OSU9DUl9DSEFSQUNURVJfVkFMVUVfVE9PX0xPTkciO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTU1Nzc6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX05JT0NSX0NIQVJBQ1RFUl9WQUxVRV9DQU5OT1RfQkVfRU1QVFlTVFJJTkciO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTU1Nzg6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX05JT0NSX0lOVkFMSURfQ0hBUkFDVEVSX1NFVF9GSUxFIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk1NTc5Og0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9OSU9DUl9JTlZBTElEX0FTUEVDVF9SQVRJTyI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTU4MDoNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfTklPQ1JfSU5WQUxJRF9NSU5fQk9VTkRJTkdfUkVDVF9XSURUSCI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTU4MToNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfTklPQ1JfSU5WQUxJRF9NQVhfVkVSVF9FTEVNRU5UX1NQQUNJTkciO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTU1ODI6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX05JT0NSX0lOVkFMSURfTUFYX0hPUklaX0VMRU1FTlRfU1BBQ0lORyI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTU4MzoNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfTklPQ1JfSU5WQUxJRF9NSU5fQ0hBUl9TUEFDSU5HIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk1NTg0Og0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9OSU9DUl9JTlZBTElEX1RIUkVTSE9MRF9MSU1JVFMiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTU1ODU6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX05JT0NSX0lOVkFMSURfVVBQRVJfVEhSRVNIT0xEX0xJTUlUIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk1NTg2Og0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9OSU9DUl9JTlZBTElEX0xPV0VSX1RIUkVTSE9MRF9MSU1JVCI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTU4NzoNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfTklPQ1JfSU5WQUxJRF9USFJFU0hPTERfUkFOR0UiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTU1ODg6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX05JT0NSX0lOVkFMSURfSElHSF9USFJFU0hPTERfVkFMVUUiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTU1ODk6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX05JT0NSX0lOVkFMSURfTE9XX1RIUkVTSE9MRF9WQUxVRSI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTU5MDoNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfTklPQ1JfSU5WQUxJRF9OVU1CRVJfT0ZfVkFMSURfQ0hBUkFDVEVSX1BPU0lUSU9OUyI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTU5MToNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfTklPQ1JfSU5WQUxJRF9DSEFSQUNURVJfSU5ERVgiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTU1OTI6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX05JT0NSX0lOVkFMSURfUkVBRF9TVFJBVEVHWSI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTU5MzoNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfTklPQ1JfSU5WQUxJRF9OVU1CRVJfT0ZfQkxPQ0tTIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk1NTk0Og0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9OSU9DUl9JTlZBTElEX1NVQlNUSVRVVElPTl9DSEFSQUNURVIiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTU1OTU6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX05JT0NSX0lOVkFMSURfVEhSRVNIT0xEX01PREUiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTU1OTY6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX05JT0NSX0lOVkFMSURfQ0hBUkFDVEVSX1NJWkUiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTU1OTc6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX05JT0NSX05PVF9BX1ZBTElEX1NFU1NJT04iO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTU1OTg6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX05JT0NSX0lOVkFMSURfQUNDRVBUQU5DRV9MRVZFTCI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTYwMDoNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfSU5GT19OT1RfRk9VTkQiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTU2MDE6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX0lOVkFMSURfRURHRV9USFJFU0hPTEQiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTU2MDI6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX0lOVkFMSURfTUlOSU1VTV9DVVJWRV9MRU5HVEgiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTU2MDM6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX0lOVkFMSURfUk9XX1NURVAiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTU2MDQ6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX0lOVkFMSURfQ09MVU1OX1NURVAiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTU2MDU6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX0lOVkFMSURfTUFYSU1VTV9FTkRfUE9JTlRfR0FQIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk1NjA2Og0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9JTlZBTElEX01JTklNVU1fRkVBVFVSRVNfVE9fTUFUQ0giO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTU2MDc6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX0lOVkFMSURfTUFYSU1VTV9GRUFUVVJFU19QRVJfTUFUQ0giO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTU2MDg6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX0lOVkFMSURfU1VCUElYRUxfSVRFUkFUSU9OUyI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTYwOToNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfSU5WQUxJRF9TVUJQSVhFTF9UT0xFUkFOQ0UiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTU2MTA6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX0lOVkFMSURfSU5JVElBTF9NQVRDSF9MSVNUX0xFTkdUSCI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTYxMToNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfSU5WQUxJRF9NSU5JTVVNX1JFQ1RBTkdMRV9ESU1FTlNJT04iO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTU2MTI6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX0lOVkFMSURfTUlOSU1VTV9GRUFUVVJFX1JBRElVUyI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTYxMzoNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfSU5WQUxJRF9NSU5JTVVNX0ZFQVRVUkVfTEVOR1RIIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk1NjE0Og0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9JTlZBTElEX01JTklNVU1fRkVBVFVSRV9BU1BFQ1RfUkFUSU8iO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTU2MTU6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX0lOVkFMSURfTUlOSU1VTV9GRUFUVVJFX1NUUkVOR1RIIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk1NjE2Og0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9JTlZBTElEX0VER0VfRklMVEVSX1NJWkUiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTU2MTc6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX0lOVkFMSURfTlVNQkVSX09GX0ZFQVRVUkVTX1JBTkdFIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk1NjE4Og0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9UT09fTUFOWV9TQ0FMRV9SQU5HRVMiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTU2MTk6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX1RPT19NQU5ZX09DQ0xVU0lPTl9SQU5HRVMiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTU2MjA6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX0lOVkFMSURfQ1VSVkVfRVhUUkFDVElPTl9NT0RFIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk1NjIxOg0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9JTlZBTElEX0xFQVJOX0dFT01FVFJJQ19QQVRURVJOX1NFVFVQX0RBVEEiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTU2MjI6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX0lOVkFMSURfTUFUQ0hfR0VPTUVUUklDX1BBVFRFUk5fU0VUVVBfREFUQSI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTYyMzoNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfSU5WQUxJRF9TQ0FMRV9SQU5HRSI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTYyNDoNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfSU5WQUxJRF9PQ0NMVVNJT05fUkFOR0UiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTU2MjU6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX0lOVkFMSURfTUFUQ0hfQ09OU1RSQUlOVF9UWVBFIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk1NjI2Og0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9OT1RfRU5PVUdIX1RFTVBMQVRFX0ZFQVRVUkVTIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk1NjI3Og0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9OT1RfRU5PVUdIX1RFTVBMQVRFX0ZFQVRVUkVTXzEiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTU2Mjg6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX0lOVkFMSURfR0VPTUVUUklDX01BVENISU5HX1RFTVBMQVRFIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk1NjI5Og0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9JTlZBTElEX01BWElNVU1fUElYRUxfRElTVEFOQ0VfRlJPTV9MSU5FIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk1NjMwOg0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9JTlZBTElEX01BWElNVU1fRkVBVFVSRVNfTEVBUk5FRCI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTYzMToNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfSU5WQUxJRF9NSU5fTUFUQ0hfU0VQQVJBVElPTl9ESVNUQU5DRSI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTYzMjoNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfSU5WQUxJRF9NSU5fTUFUQ0hfU0VQQVJBVElPTl9BTkdMRSI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTYzMzoNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfSU5WQUxJRF9NSU5fTUFUQ0hfU0VQQVJBVElPTl9TQ0FMRSI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTYzNDoNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfSU5WQUxJRF9NQVhfTUFUQ0hfT1ZFUkxBUCI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTYzNToNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfSU5WQUxJRF9TSEFQRV9ERVNDUklQVE9SIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk1NjM2Og0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9ESVJFQ1RYX05PVF9GT1VORCI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTYzNzoNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfSEFSRFdBUkVfRE9FU05UX1NVUFBPUlRfTk9OVEVBUklORyI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTYzODoNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfSU5WQUxJRF9GSUxMX1NUWUxFIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk1NjM5Og0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9JTlZBTElEX0hBVENIX1NUWUxFIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk1NjQwOg0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9UT09fTUFOWV9aT05FUyI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTY0MToNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfRFVQTElDQVRFX0xBQkVMIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk1NjQyOg0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9MQUJFTF9OT1RfRk9VTkQiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTU2NDM6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX0lOVkFMSURfTlVNQkVSX09GX01BVENIX09QVElPTlMiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTU2NDQ6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX0xBQkVMX1RPT19MT05HIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk1NjQ1Og0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9JTlZBTElEX05VTUJFUl9PRl9MQUJFTFMiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTU2NDY6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX05PX1RFTVBMQVRFX1RPX0xFQVJOIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk1NjQ3Og0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9JTlZBTElEX01VTFRJUExFX0dFT01FVFJJQ19URU1QTEFURSI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTY0ODoNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfVEVNUExBVEVfTk9UX0xFQVJORUQiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTU2NDk6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX0lOVkFMSURfR0VPTUVUUklDX0ZFQVRVUkVfVFlQRSI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTY1MDoNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfQ1VSVkVfRVhUUkFDVElPTl9NT0RFX01VU1RfQkVfU0FNRSI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTY1MToNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfRURHRV9GSUxURVJfU0laRV9NVVNUX0JFX1NBTUUiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTU2NTI6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX09QRU5JTkdfTkVXRVJfR0VPTUVUUklDX01BVENISU5HX1RFTVBMQVRFIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk1NjUzOg0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9PUEVOSU5HX05FV0VSX01VTFRJUExFX0dFT01FVFJJQ19URU1QTEFURSI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTY1NDoNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfR1JBRElOR19JTkZPUk1BVElPTl9OT1RfRk9VTkQiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTU2NTU6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX0VOQUJMRV9DQUxJQlJBVElPTl9TVVBQT1JUX01VU1RfQkVfU0FNRSI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTY1NjoNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfU01PT1RIX0NPTlRPVVJTX01VU1RfQkVfU0FNRSI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTcwMDoNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfUkVRVUlSRVNfV0lOMjAwMF9PUl9ORVdFUiI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTcwMToNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfSU5WQUxJRF9NQVRSSVhfU0laRV9SQU5HRSI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTcwMjoNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfSU5WQUxJRF9MRU5HVEgiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTU3MDM6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX0lOVkFMSURfVFlQRV9PRl9GTEFUVEVOIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk1NzA0Og0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9JTlZBTElEX0NPTVBSRVNTSU9OX1RZUEUiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTU3MDU6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX0RBVEFfQ09SUlVQVEVEIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk1NzA2Og0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9BVklfU0VTU0lPTl9BTFJFQURZX09QRU4iO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTU3MDc6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX0FWSV9XUklURV9TRVNTSU9OX1JFUVVJUkVEIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk1NzA4Og0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9BVklfUkVBRF9TRVNTSU9OX1JFUVVJUkVEIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk1NzA5Og0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9BVklfVU5PUEVORURfU0VTU0lPTiI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTcxMDoNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfVE9PX01BTllfUEFSVElDTEVTIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk1NzExOg0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9OT1RfRU5PVUdIX1JFR0lPTlMiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTU3MTI6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX1dST05HX1JFR0lPTl9UWVBFIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk1NzEzOg0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9WQUxVRV9OT1RfSU5fRU5VTSI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTcxNDoNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfSU5WQUxJRF9BWElTX09SSUVOVEFUSU9OIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk1NzE1Og0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9JTlZBTElEX0NBTElCUkFUSU9OX1VOSVQiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTU3MTY6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX0lOVkFMSURfU0NBTElOR19NRVRIT0QiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTU3MTc6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX0lOVkFMSURfUkFOR0UiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTU3MTg6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX0xBQl9WRVJTSU9OIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk1NzE5Og0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9CQURfUk9JX0JPWCI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTcyMDoNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfQkFEX1JPSSI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTcyMToNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfSU5WQUxJRF9CSVRfREVQVEgiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTU3MjI6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX0NMQVNTSUZJRVJfQ0xBU1NJRllfSU1BR0VfV0lUSF9DVVNUT01fU0VTU0lPTiI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTcyMzoNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfQ1VTVE9NREFUQV9LRVlfTk9UX0ZPVU5EIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk1NzI0Og0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9DVVNUT01EQVRBX0lOVkFMSURfU0laRSI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTcyNToNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfREFUQV9WRVJTSU9OIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk1NzI2Og0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9NQVRDSEZBQ1RPUl9PQlNPTEVURSI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTcyNzoNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfVU5TVVBQT1JURURfMkRfQkFSQ09ERV9TRUFSQ0hfTU9ERSI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTcyODoNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfSU5WQUxJRF8yRF9CQVJDT0RFX1NFQVJDSF9NT0RFIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk1NzU0Og0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9UUklHX1RJTUVPVVQiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTU3NTY6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX0RMTF9GVU5DVElPTl9OT1RfRk9VTkQiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTU3NTc6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX0RMTF9OT1RfRk9VTkQiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTU3NTg6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX0JPQVJEX05PVF9PUEVOIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk1NzYwOg0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9CT0FSRF9OT1RfRk9VTkQiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTU3NjI6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX0lOVkFMSURfTklCTEFDS19ERVZJQVRJT05fRkFDVE9SIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk1NzYzOg0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9JTlZBTElEX05PUk1BTElaQVRJT05fTUVUSE9EIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk1NzY2Og0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9ERVBSRUNBVEVEX0ZVTkNUSU9OIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk1NzY3Og0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9JTlZBTElEX0FMSUdOTUVOVCI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTc2ODoNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfSU5WQUxJRF9TQ0FMRSI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTc2OToNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfSU5WQUxJRF9FREdFX1RISUNLTkVTUyI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTc3MDoNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfSU5WQUxJRF9JTlNQRUNUSU9OX1RFTVBMQVRFIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk1NzcxOg0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9PUEVOSU5HX05FV0VSX0lOU1BFQ1RJT05fVEVNUExBVEUiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTU3NzI6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX0lOVkFMSURfUkVHSVNUUkFUSU9OX01FVEhPRCI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTc3MzoNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfTk9fREVTVF9JTUFHRSI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTc3NDoNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfTk9fTEFCRUwiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTU3NzU6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX1JPSV9IQVNfT1BFTl9DT05UT1VSUyI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTc3NjoNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfSU5WQUxJRF9VU0VfT0ZfQ09NUEFDVF9TRVNTSU9OX0ZJTEUiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTU3Nzc6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX0lOQ09NUEFUSUJMRV9DTEFTU0lGSUVSX1RZUEVTIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk1Nzc4Og0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9JTlZBTElEX0tFUk5FTF9TSVpFIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk1Nzc5Og0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9DQU5OT1RfQ09NUEFDVF9VTlRSQUlORUQiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTU3ODA6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX0lOVkFMSURfUEFSVElDTEVfVFlQRSI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTc4MToNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfQ0xBU1NJRklFUl9JTlZBTElEX0VOR0lORV9UWVBFIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk1NzgyOg0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9ERVNDUklQVElPTl9UT09fTE9ORyI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTc4MzoNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfQkFEX1NBTVBMRV9JTkRFWCI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTc4NDoNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfSU5WQUxJRF9MSU1JVFMiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTU3ODU6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX05PX1BBUlRJQ0xFIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk1Nzg2Og0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9JTlZBTElEX1BBUlRJQ0xFX09QVElPTlMiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTU3ODc6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX0lOVkFMSURfQ0xBU1NJRklFUl9UWVBFIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk1Nzg4Og0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9OT19TQU1QTEVTIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk1Nzg5Og0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9PUEVOSU5HX05FV0VSX0NMQVNTSUZJRVJfU0VTU0lPTiI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTc5MDoNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfSU5WQUxJRF9ESVNUQU5DRV9NRVRSSUMiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTU3OTE6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX0NMQVNTSUZJRVJfSU5WQUxJRF9TRVNTSU9OX1RZUEUiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTU3OTI6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX0NMQVNTSUZJRVJfU0VTU0lPTl9OT1RfVFJBSU5FRCI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTc5MzoNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfSU5WQUxJRF9PUEVSQVRJT05fT05fQ09NUEFDVF9TRVNTSU9OX0FUVEVNUFRFRCI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTc5NDoNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfS19UT09fSElHSCI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTc5NToNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfS19UT09fTE9XIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk1Nzk2Og0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9JTlZBTElEX0tOTl9NRVRIT0QiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTU3OTc6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX0lOVkFMSURfQ0xBU1NJRklFUl9TRVNTSU9OIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk1Nzk4Og0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9JTlZBTElEX0NVU1RPTV9TQU1QTEUiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTU3OTk6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX0lOVEVSTkFMIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk1ODAwOg0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9QUk9URUNUSU9OIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk1ODAxOg0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9UT09fTUFOWV9DT05UT1VSUyI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTgzNzoNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfSU5WQUxJRF9DT01QUkVTU0lPTl9SQVRJTyI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTg0MDoNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfQkFEX0lOREVYIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk1ODc1Og0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9CQVJDT0RFX1BIQVJNQUNPREUiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTU4NzY6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX1VOU1VQUE9SVEVEX0NPTE9SX01PREUiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTU4Nzc6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX0NPTE9STU9ERV9SRVFVSVJFU19DSEFOR0VDT0xPUlNQQUNFMiI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTg3ODoNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfUFJPUF9OT0RFX1dSSVRFX05PVF9TVVBQT1JURUQiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTU4Nzk6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX0JBRF9NRUFTVVJFIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk1ODgwOg0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9QQVJUSUNMRSI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTkyMDoNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfTlVNQkVSX0NMQVNTIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk1OTUzOg0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9JTlZBTElEX1dBVkVMRVRfVFJBTlNGT1JNX01PREUiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTU5NTQ6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX0lOVkFMSURfUVVBTlRJWkFUSU9OX1NURVBfU0laRSI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTk1NToNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfSU5WQUxJRF9NQVhfV0FWRUxFVF9UUkFOU0ZPUk1fTEVWRUwiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTU5NTY6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX0lOVkFMSURfUVVBTElUWSI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTk1NzoNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfQVJSQVlfU0laRV9NSVNNQVRDSCI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTk1ODoNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfV0lORE9XX0lEIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk1OTU5Og0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9DUkVBVEVfV0lORE9XIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk1OTYwOg0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9JTklUIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk1OTcxOg0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9JTlZBTElEX09GRlNFVCI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTk3MjoNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfRElSRUNUWF9FTlVNRVJBVEVfRklMVEVSUyI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTk3MzoNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfSlBFRzIwMDBfVU5TVVBQT1JURURfTVVMVElQTEVfTEFZRVJTIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk1OTc0Og0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9VTlNVUFBPUlRFRF9KUEVHMjAwMF9DT0xPUlNQQUNFX01FVEhPRCI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTk3NToNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfQVZJX1RJTUVPVVQiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTU5NzY6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX05VTUJFUl9PRl9QQUxFVFRFX0NPTE9SUyI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTk3NzoNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfQVZJX1ZFUlNJT04iO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTU5Nzg6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX0lOVkFMSURfUEFSVElDTEVfTlVNQkVSIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk1OTc5Og0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9JTlZBTElEX1BBUlRJQ0xFX0lORk8iO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTU5ODA6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX0NPTV9JTklUSUFMSVpFIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk1OTgxOg0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9JTlNVRkZJQ0lFTlRfQlVGRkVSX1NJWkUiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTU5ODI6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX0lOVkFMSURfRlJBTUVTX1BFUl9TRUNPTkQiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTU5ODM6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX0ZJTEVfTk9fU1BBQ0UiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTU5ODQ6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX0ZJTEVfSU5WQUxJRF9EQVRBX1RZUEUiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTU5ODU6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX0ZJTEVfT1BFUkFUSU9OIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk1OTg2Og0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9GSUxFX0ZPUk1BVCI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTk4NzoNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfRklMRV9FT0YiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTU5ODg6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX0ZJTEVfV1JJVEUiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTU5ODk6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX0ZJTEVfUkVBRCI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTk5MDoNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfRklMRV9HRVRfSU5GTyI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTk5MToNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfRklMRV9JTlZBTElEX1RZUEUiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTU5OTI6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX0ZJTEVfUEVSTUlTU0lPTiI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTk5MzoNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfRklMRV9JT19FUlIiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTU5OTQ6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX0ZJTEVfVE9PX01BTllfT1BFTiI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTk5NToNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfRklMRV9OT1RfRk9VTkQiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTU5OTY6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX0ZJTEVfT1BFTiI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NTk5NzoNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfRklMRV9BUkdFUlIiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTU5OTg6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX0ZJTEVfQ09MT1JfVEFCTEUiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTU5OTk6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX0ZJTEVfRklMRV9UWVBFIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk2MDAwOg0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9GSUxFX0ZJTEVfSEVBREVSIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk2MDAxOg0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9UT09fTUFOWV9BVklfU0VTU0lPTlMiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTYwMDI6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX0lOVkFMSURfTElORUdBVUdFTUVUSE9EIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk2MDAzOg0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9BVklfREFUQV9FWENFRURTX0JVRkZFUl9TSVpFIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk2MDA0Og0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9ESVJFQ1RYX0NFUlRJRklDQVRJT05fRkFJTFVSRSI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NjAwNToNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfSU5WQUxJRF9BVklfU0VTU0lPTiI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NjAwNjoNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfRElSRUNUWF9VTktOT1dOX0NPTVBSRVNTSU9OX0ZJTFRFUiI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NjAwNzoNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfRElSRUNUWF9JTkNPTVBBVElCTEVfQ09NUFJFU1NJT05fRklMVEVSIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk2MDA4Og0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9ESVJFQ1RYX05PX0ZJTFRFUiI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NjAwOToNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfRElSRUNUWCI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NjAxMDoNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfSU5WQUxJRF9GUkFNRV9OVU1CRVIiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTYwMTE6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX1JQQ19CSU5EIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk2MDEyOg0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9SUENfRVhFQ1VURSI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NjAxMzoNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfSU5WQUxJRF9WSURFT19NT0RFIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk2MDE0Og0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9JTlZBTElEX1ZJREVPX0JMSVQiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTYwMTU6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX1JQQ19FWEVDVVRFX0lWQiI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NjAxNjoNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfTk9fVklERU9fRFJJVkVSIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk2MDE3Og0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9PUEVOSU5HX05FV0VSX0FJTV9HUkFESU5HX0RBVEEiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTYwMTg6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX0lOVkFMSURfRURHRV9QT0xBUklUWV9TRUFSQ0hfTU9ERSI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NjAxOToNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfSU5WQUxJRF9USFJFU0hPTERfUEVSQ0VOVEFHRSI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NjAyMDoNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfSU5WQUxJRF9HUkFESU5HX01PREUiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTYwMjE6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX0lOVkFMSURfS0VSTkVMX1NJWkVfRk9SX0VER0VfREVURUNUSU9OIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk2MDIyOg0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9JTlZBTElEX1NFQVJDSF9NT0RFX0ZPUl9TVFJBSUdIVF9FREdFIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk2MDIzOg0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9JTlZBTElEX0FOR0xFX1RPTF9GT1JfU1RSQUlHSFRfRURHRSI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NjAyNDoNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfSU5WQUxJRF9NSU5fQ09WRVJBR0VfRk9SX1NUUkFJR0hUX0VER0UiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTYwMjU6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX0lOVkFMSURfQU5HTEVfUkFOR0VfRk9SX1NUUkFJR0hUX0VER0UiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTYwMjY6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX0lOVkFMSURfUFJPQ0VTU19UWVBFX0ZPUl9FREdFX0RFVEVDVElPTiI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NjAzMjoNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfVEVNUExBVEVERVNDUklQVE9SX1JPVEFUSU9OX1NFQVJDSFNUUkFURUdZIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk2MDMzOg0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9URU1QTEFURURFU0NSSVBUT1JfTEVBUk5TRVRVUERBVEEiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTYwMzQ6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX1RFTVBMQVRFSU1BR0VfRURHRUlORk8iO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTYwMzU6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX1RFTVBMQVRFSU1BR0VfTk9DSVJDTEUiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTYwMzY6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX0lOVkFMSURfU0tFTEVUT05NT0RFIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk2MDM3Og0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9USU1FT1VUIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk2MDM4Og0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9GSU5EX0NPT1JEU1lTX01PUkVfVEhBTl9PTkVfRURHRSI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NjAzOToNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfSU9fRVJST1IiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTYwNDA6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX0RSSVZFUiI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NjA0MToNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfSU5WQUxJRF8yRF9CQVJDT0RFX1RZUEUiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTYwNDI6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX0lOVkFMSURfMkRfQkFSQ09ERV9DT05UUkFTVCI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NjA0MzoNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfSU5WQUxJRF8yRF9CQVJDT0RFX0NFTExfU0hBUEUiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTYwNDQ6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX0lOVkFMSURfMkRfQkFSQ09ERV9TSEFQRSI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NjA0NToNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfSU5WQUxJRF8yRF9CQVJDT0RFX1NVQlRZUEUiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTYwNDY6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX0lOVkFMSURfMkRfQkFSQ09ERV9DT05UUkFTVF9GT1JfUk9JIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk2MDQ3Og0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9JTlZBTElEX0xJTkVBUl9BVkVSQUdFX01PREUiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTYwNDg6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX0lOVkFMSURfQ0VMTF9TQU1QTEVfU0laRSI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NjA0OToNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfSU5WQUxJRF9NQVRSSVhfUE9MQVJJVFkiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTYwNTA6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX0lOVkFMSURfRUNDX1RZUEUiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTYwNTE6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX0lOVkFMSURfQ0VMTF9GSUxURVJfTU9ERSI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NjA1MjoNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfSU5WQUxJRF9ERU1PRFVMQVRJT05fTU9ERSI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NjA1MzoNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfSU5WQUxJRF9CT1JERVJfSU5URUdSSVRZIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk2MDU0Og0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9JTlZBTElEX0NFTExfRklMTF9UWVBFIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk2MDU1Og0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9JTlZBTElEX0FTUEVDVF9SQVRJTyI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NjA1NjoNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfSU5WQUxJRF9NQVRSSVhfTUlSUk9SX01PREUiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTYwNTc6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX0lOVkFMSURfU0VBUkNIX1ZFQ1RPUl9XSURUSCI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NjA1ODoNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfSU5WQUxJRF9ST1RBVElPTl9NT0RFIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk2MDU5Og0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9JTlZBTElEX01BWF9JVEVSQVRJT05TIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk2MDYwOg0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9KUEVHMjAwMF9MT1NTTEVTU19XSVRIX0ZMT0FUSU5HX1BPSU5UIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk2MDYxOg0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9JTlZBTElEX1dJTkRPV19TSVpFIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk2MDYyOg0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9JTlZBTElEX1RPTEVSQU5DRSI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NjA2MzoNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfRVhURVJOQUxfQUxJR05NRU5UIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk2MDY0Og0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9FWFRFUk5BTF9OT1RfU1VQUE9SVEVEIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk2MDY1Og0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9DQU5UX1JFU0laRV9FWFRFUk5BTCI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NjA2NjoNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfSU5WQUxJRF9QT0lOVFNZTUJPTCI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NjA2NzoNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfSU1BR0VTX05PVF9ESUZGIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk2MDY4Og0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9JTlZBTElEX0FDVElPTiI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NjA2OToNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfSU5WQUxJRF9DT0xPUl9NT0RFIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk2MDcwOg0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9JTlZBTElEX0ZVTkNUSU9OIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk2MDcxOg0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9JTlZBTElEX1NDQU5fRElSRUNUSU9OIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk2MDcyOg0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9JTlZBTElEX0JPUkRFUiI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NjA3MzoNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfTUFTS19PVVRTSURFX0lNQUdFIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk2MDc0Og0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9JTkNPTVBfU0laRSI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NjA3NToNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfQ09PUkRfU1lTX1NFQ09ORF9BWElTIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk2MDc2Og0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9DT09SRF9TWVNfRklSU1RfQVhJUyI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NjA3NzoNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfSU5DT01QX1RZUEUiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTYwNzk6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX0lOVkFMSURfTUVUQUZJTEVfSEFORExFIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk2MDgwOg0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9JTlZBTElEX0lNQUdFX1RZUEUiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTYwODE6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX0JBRF9QQVNTV09SRCI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NjA4MjoNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfUEFMRVRURV9OT1RfU1VQUE9SVEVEIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk2MDgzOg0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9ST0xMQkFDS19USU1FT1VUIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk2MDg0Og0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9ST0xMQkFDS19ERUxFVEVfVElNRVIiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTYwODU6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX1JPTExCQUNLX0lOSVRfVElNRVIiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTYwODY6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX1JPTExCQUNLX1NUQVJUX1RJTUVSIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk2MDg3Og0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9ST0xMQkFDS19TVE9QX1RJTUVSIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk2MDg4Og0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9ST0xMQkFDS19SRVNJWkUiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTYwODk6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX1JPTExCQUNLX1JFU09VUkNFX1JFSU5JVElBTElaRSI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NjA5MDoNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfUk9MTEJBQ0tfUkVTT1VSQ0VfRU5BQkxFRCI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NjA5MToNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfUk9MTEJBQ0tfUkVTT1VSQ0VfVU5JTklUSUFMSVpFRF9FTkFCTEUiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTYwOTI6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX1JPTExCQUNLX1JFU09VUkNFX05PTl9FTVBUWV9JTklUSUFMSVpFIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk2MDkzOg0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9ST0xMQkFDS19SRVNPVVJDRV9MT0NLRUQiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTYwOTQ6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX1JPTExCQUNLX1JFU09VUkNFX0NBTk5PVF9VTkxPQ0siO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTYwOTU6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX0NBTElCUkFUSU9OX0RVUExJQ0FURV9SRUZFUkVOQ0VfUE9JTlQiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTYwOTY6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX05PVF9BTl9PQkpFQ1QiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTYwOTc6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX0lOVkFMSURfUEFSVElDTEVfUEFSQU1FVEVSX1ZBTFVFIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk2MDk4Og0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9SRVNFUlZFRF9NVVNUX0JFX05VTEwiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTYwOTk6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX0NBTElCUkFUSU9OX0lORk9fU0lNUExFX1RSQU5TRk9STSI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NjEwMDoNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfQ0FMSUJSQVRJT05fSU5GT19QRVJTUEVDVElWRV9QUk9KRUNUSU9OIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk2MTAxOg0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9DQUxJQlJBVElPTl9JTkZPX01JQ1JPX1BMQU5FIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk2MTAyOg0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9DQUxJQlJBVElPTl9JTkZPXzYiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTYxMDM6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX0NBTElCUkFUSU9OX0lORk9fNSI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NjEwNDoNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfQ0FMSUJSQVRJT05fSU5GT180IjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk2MTA1Og0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9DQUxJQlJBVElPTl9JTkZPXzMiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTYxMDY6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX0NBTElCUkFUSU9OX0lORk9fMiI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NjEwNzoNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfQ0FMSUJSQVRJT05fSU5GT18xIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk2MTA4Og0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9DQUxJQlJBVElPTl9FUlJPUk1BUCI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NjEwOToNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfQ0FMSUJSQVRJT05fSU5WQUxJRF9TQ0FMSU5HX0ZBQ1RPUiI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NjExMDoNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfQ0FMSUJSQVRJT05fSU5GT19WRVJTSU9OIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk2MTExOg0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9DQUxJQlJBVElPTl9GQUlMRURfVE9fRklORF9HUklEIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk2MTEyOg0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9JTkNPTVBfTUFUUklYX1NJWkUiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTYxMTM6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX0NBTElCUkFUSU9OX0lNQUdFX1VOQ0FMSUJSQVRFRCI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NjExNDoNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfQ0FMSUJSQVRJT05fSU5WQUxJRF9ST0kiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTYxMTU6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX0NBTElCUkFUSU9OX0lNQUdFX0NPUlJFQ1RFRCI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NjExNjoNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfQ0FMSUJSQVRJT05fSU5TRl9QT0lOVFMiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTYxMTc6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX01BVFJJWF9TSVpFIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk2MTE4Og0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9JTlZBTElEX1NURVBfU0laRSI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NjExOToNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfQ1VTVE9NREFUQV9JTlZBTElEX0tFWSI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NjEyMDoNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfTk9UX0lNQUdFIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk2MTIxOg0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9TQVRVUkFUSU9OX1RIUkVTSE9MRF9PVVRfT0ZfUkFOR0UiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTYxMjI6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX0RSQVdURVhUX0NPTE9SX01VU1RfQkVfR1JBWVNDQUxFIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk2MTIzOg0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9JTlZBTElEX0NBTElCUkFUSU9OX01PREUiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTYxMjQ6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX0lOVkFMSURfQ0FMSUJSQVRJT05fUk9JX01PREUiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTYxMjU6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX0lOVkFMSURfQ09OVFJBU1RfVEhSRVNIT0xEIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk2MTI2Og0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9ST0xMQkFDS19SRVNPVVJDRV9DT05GTElDVF8xIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk2MTI3Og0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9ST0xMQkFDS19SRVNPVVJDRV9DT05GTElDVF8yIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk2MTI4Og0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9ST0xMQkFDS19SRVNPVVJDRV9DT05GTElDVF8zIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk2MTI5Og0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9ST0xMQkFDS19VTkJPVU5ERURfSU5URVJGQUNFIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk2MTMwOg0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9OT1RfUkVDVF9PUl9ST1RBVEVEX1JFQ1QiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTYxMzI6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX01BU0tfTk9UX1RFTVBMQVRFX1NJWkUiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTYxMzM6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX1RIUkVBRF9DT1VMRF9OT1RfSU5JVElBTElaRSI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NjEzNDoNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfVEhSRUFEX0lOSVRJQUxJWklORyI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NjEzNToNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfSU5WQUxJRF9CVVRUT05fTEFCRUwiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTYxMzY6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX0RJUkVDVFhfSU5WQUxJRF9GSUxURVJfUVVBTElUWSI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NjEzNzoNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfRElSRUNUWF9ETExfTk9UX0ZPVU5EIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk2MTM4Og0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9ST0xMQkFDS19OT1RfU1VQUE9SVEVEIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk2MTM5Og0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9ST0xMQkFDS19SRVNPVVJDRV9PVVRfT0ZfTUVNT1JZIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk2MTQwOg0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9CQVJDT0RFX0NPREUxMjhfU0VUIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk2MTQxOg0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9CQVJDT0RFX0NPREUxMjhfRk5DIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk2MTQyOg0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9CQVJDT0RFX0lOVkFMSUQiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTYxNDM6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX0JBUkNPREVfVFlQRSI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NjE0NDoNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfQkFSQ09ERV9DT0RFOTNfU0hJRlQiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTYxNDU6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX0JBUkNPREVfVVBDQSI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NjE0NjoNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfQkFSQ09ERV9NU0kiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTYxNDc6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX0JBUkNPREVfSTI1IjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk2MTQ4Og0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9CQVJDT0RFX0VBTjEzIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk2MTQ5Og0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9CQVJDT0RFX0VBTjgiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTYxNTA6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX0JBUkNPREVfQ09ERTEyOCI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NjE1MToNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfQkFSQ09ERV9DT0RFOTMiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTYxNTI6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX0JBUkNPREVfQ09ERTM5IjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk2MTUzOg0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9CQVJDT0RFX0NPREFCQVIiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTYxNTQ6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX0lNQUdFX1RPT19TTUFMTCI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NjE1NToNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfVU5JTklUIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk2MTU2Og0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9ORUVEX0ZVTExfVkVSU0lPTiI7YnJlYWs7fQ0KKwkJY2FzZSAtMTA3NDM5NjE1NzoNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfVU5SRUdJU1RFUkVEIjticmVhazt9DQorCQljYXNlIC0xMDc0Mzk2MTU4Og0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9NRU1PUllfRVJST1IiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTYxNTk6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX09VVF9PRl9NRU1PUlkiO2JyZWFrO30NCisJCWNhc2UgLTEwNzQzOTYxNjA6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX1NZU1RFTV9FUlJPUiI7YnJlYWs7fQ0KKwkJY2FzZSAwOg0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9TVUNDRVNTIjticmVhazt9DQorCQkvLyBlbmQgTmF0aW9uYWwgSW5zdHJ1bWVudHMgZGVmaW5lZCBlcnJvcnMNCisJCQkNCisJCS8vIGJlZ2luIEJBRSBkZWZpbmVkIGVycm9ycw0KKwkJY2FzZSBFUlJfVklTSU9OX0dFTkVSQUxfRVJST1I6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX1ZJU0lPTl9HRU5FUkFMX0VSUk9SIjticmVhazt9DQorCQljYXNlIEVSUl9DT0xPUl9OT1RfRk9VTkQ6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX0NPTE9SX05PVF9GT1VORCI7YnJlYWs7fQ0KKwkJY2FzZSBFUlJfUEFSVElDTEVfVE9PX1NNQUxMOg0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9QQVJUSUNMRV9UT09fU01BTEwiO2JyZWFrO30NCisJCWNhc2UgRVJSX0NBTUVSQV9GQUlMVVJFOg0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9DQU1FUkFfRkFJTFVSRSI7YnJlYWs7fQ0KKwkJY2FzZSBFUlJfQ0FNRVJBX1NPQ0tFVF9DUkVBVEVfRkFJTEVEOg0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9DQU1FUkFfU09DS0VUX0NSRUFURV9GQUlMRUQiO2JyZWFrO30NCisJCWNhc2UgRVJSX0NBTUVSQV9DT05ORUNUX0ZBSUxFRDoNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfQ0FNRVJBX0NPTk5FQ1RfRkFJTEVEIjticmVhazt9DQorCQljYXNlIEVSUl9DQU1FUkFfU1RBTEVfSU1BR0U6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX0NBTUVSQV9TVEFMRV9JTUFHRSI7YnJlYWs7fQ0KKwkJY2FzZSBFUlJfQ0FNRVJBX05PVF9JTklUSUFMSVpFRDoNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfQ0FNRVJBX05PVF9JTklUSUFMSVpFRCI7YnJlYWs7fQ0KKwkJY2FzZSBFUlJfQ0FNRVJBX05PX0JVRkZFUl9BVkFJTEFCTEU6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX0NBTUVSQV9OT19CVUZGRVJfQVZBSUxBQkxFIjticmVhazt9DQorCQljYXNlIEVSUl9DQU1FUkFfSEVBREVSX0VSUk9SOg0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9DQU1FUkFfSEVBREVSX0VSUk9SIjticmVhazt9DQorCQljYXNlIEVSUl9DQU1FUkFfQkxPQ0tJTkdfVElNRU9VVDoNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfQ0FNRVJBX0JMT0NLSU5HX1RJTUVPVVQiO2JyZWFrO30NCisJCWNhc2UgRVJSX0NBTUVSQV9BVVRIT1JJWkFUSU9OX0ZBSUxFRDoNCisJCQl7IGVycm9yVGV4dCA9ICJFUlJfQ0FNRVJBX0FVVEhPUklaQVRJT05fRkFJTEVEIjticmVhazt9DQorCQljYXNlIEVSUl9DQU1FUkFfVEFTS19TUEFXTl9GQUlMRUQ6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX0NBTUVSQV9UQVNLX1NQQVdOX0ZBSUxFRCI7YnJlYWs7fQ0KKwkJY2FzZSBFUlJfQ0FNRVJBX1RBU0tfSU5QVVRfT1VUX09GX1JBTkdFOg0KKwkJCXsgZXJyb3JUZXh0ID0gIkVSUl9DQU1FUkFfVEFTS19JTlBVVF9PVVRfT0ZfUkFOR0UiO2JyZWFrO30NCisJCWNhc2UgRVJSX0NBTUVSQV9DT01NQU5EX0ZBSUxVUkU6DQorCQkJeyBlcnJvclRleHQgPSAiRVJSX0NBTUVSQV9DT01NQU5EX0ZBSUxVUkUiO2JyZWFrO30NCisJfQ0KKwkNCisJcmV0dXJuIGVycm9yVGV4dDsNCit9DQorDQorDQorDQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvVmlzaW9uMjAwOS9GcmNFcnJvci5oIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvVmlzaW9uMjAwOS9GcmNFcnJvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzMWJmMDMKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9WaXNpb24yMDA5L0ZyY0Vycm9yLmgKQEAgLTAsMCArMSw0MSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorKiAgUHJvamVjdCAgIAkJOiBGSVJTVCBNb3RvciBDb250cm9sbGVyDQorKiAgRmlsZSBOYW1lICAJCTogRnJjRXJyb3IuaCAgICAgICAgICANCisqICBDb250cmlidXRvcnMgICAJOiBKREcsIEVMRg0KKyogIENyZWF0aW9uIERhdGUgCTogQXVndXN0IDEyLCAyMDA4DQorKiAgUmV2aXNpb24gSGlzdG9yeQk6IFNvdXJjZSBjb2RlICYgcmV2aXNpb24gaGlzdG9yeSBtYWludGFpbmVkIGF0IHNvdXJjZWZvcmdlLldQSS5lZHUgICAgICANCisqICBGaWxlIERlc2NyaXB0aW9uCTogRXJyb3IgaGFuZGxpbmcgdmFsdWVzIGZvciBDIHJvdXRpbmVzDQorKi8NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy8qICAgICAgICBDb3B5cmlnaHQgKGMpIEZJUlNUIDIwMDguICBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICovDQorLyogICAgIE9wZW4gU291cmNlIFNvZnR3YXJlIC0gbWF5IGJlIG1vZGlmaWVkIGFuZCBzaGFyZWQgYnkgRlJDIHRlYW1zLiAgICAgICAgKi8NCisvKiAgIE11c3QgYmUgYWNjb21wYW5pZWQgYnkgdGhlIEJTRCBsaWNlbnNlIGZpbGUgaW4gJChXSU5EX0JBU0UpL1dQSUxpYi4gICAgICAqLw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorI2lmbmRlZiBfX0ZSQ0VSUk9SX0hfXw0KKyNkZWZpbmUgX19GUkNFUlJPUl9IX18NCisNCisvKiBFcnJvciBDb2RlcyAqLw0KKyNkZWZpbmUgRVJSX1ZJU0lPTl9HRU5FUkFMX0VSUk9SCQkJMTY2MDAwCS8vIA0KKyNkZWZpbmUgRVJSX0NPTE9SX05PVF9GT1VORAkJCQkJMTY2MTAwCS8vIFRyYWNrQVBJLmNwcA0KKyNkZWZpbmUgRVJSX1BBUlRJQ0xFX1RPT19TTUFMTAkJCQkxNjYxMDEJLy8gVHJhY2tBUEkuY3BwDQorDQorI2RlZmluZSBFUlJfQ0FNRVJBX0ZBSUxVUkUJCQkJCTE2NjIwMAkvLyBBeGlzQ2FtZXJhLmNwcA0KKyNkZWZpbmUgRVJSX0NBTUVSQV9TT0NLRVRfQ1JFQVRFX0ZBSUxFRAkJMTY2MjAxCS8vIEF4aXNDYW1lcmEuY3BwDQorI2RlZmluZSBFUlJfQ0FNRVJBX0NPTk5FQ1RfRkFJTEVECQkJMTY2MjAyCS8vIEF4aXNDYW1lcmEuY3BwDQorI2RlZmluZSBFUlJfQ0FNRVJBX1NUQUxFX0lNQUdFCQkJCTE2NjIwMwkvLyBBeGlzQ2FtZXJhLmNwcA0KKyNkZWZpbmUgRVJSX0NBTUVSQV9OT1RfSU5JVElBTElaRUQJCQkxNjYyMDQJLy8gQXhpc0NhbWVyYS5jcHANCisjZGVmaW5lIEVSUl9DQU1FUkFfTk9fQlVGRkVSX0FWQUlMQUJMRQkJMTY2MjA1CS8vIEF4aXNDYW1lcmEuY3BwDQorI2RlZmluZSBFUlJfQ0FNRVJBX0hFQURFUl9FUlJPUgkJCQkxNjYyMDYJLy8gQXhpc0NhbWVyYS5jcHANCisjZGVmaW5lIEVSUl9DQU1FUkFfQkxPQ0tJTkdfVElNRU9VVAkJCTE2NjIwNwkvLyBBeGlzQ2FtZXJhLmNwcA0KKyNkZWZpbmUgRVJSX0NBTUVSQV9BVVRIT1JJWkFUSU9OX0ZBSUxFRAkJMTY2MjA4CS8vIEF4aXNDYW1lcmEuY3BwDQorI2RlZmluZSBFUlJfQ0FNRVJBX1RBU0tfU1BBV05fRkFJTEVECQkxNjYyMDkJLy8gQXhpc0NhbWVyYS5jcHANCisjZGVmaW5lIEVSUl9DQU1FUkFfVEFTS19JTlBVVF9PVVRfT0ZfUkFOR0UJMTY2MjEwCS8vIEF4aXNDYW1lcmEuY3BwDQorI2RlZmluZSBFUlJfQ0FNRVJBX0NPTU1BTkRfRkFJTFVSRQkJCTE2NjIxMQkvLyBBeGlzQ2FtZXJhLmNwcA0KKw0KKy8qIGVycm9yIGhhbmRsaW5nIGZ1bmN0aW9ucyAqLw0KK2ludCBHZXRMYXN0VmlzaW9uRXJyb3IoKTsNCitjaGFyKiBHZXRWaXNpb25FcnJvclRleHQoaW50IGVycm9yQ29kZSk7DQorDQorI2VuZGlmDQorDQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvVmlzaW9uMjAwOS9UcmFja0FQSS5jcHAgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9WaXNpb24yMDA5L1RyYWNrQVBJLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MWQ0MGJjCi0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvVmlzaW9uMjAwOS9UcmFja0FQSS5jcHAKQEAgLTAsMCArMSw0ODEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyogIFByb2plY3QgICAJCTogRklSU1QgTW90b3IgQ29udHJvbGxlcg0KKyogIEZpbGUgTmFtZSAgCQk6IFRyYWNrQVBJLmNwcCAgICAgICAgDQorKiAgQ29udHJpYnV0b3JzICAgCTogRUxGLCBEV0QNCisqICBDcmVhdGlvbiBEYXRlIAk6IEF1Z3VzdCAxMCwgMjAwOA0KKyogIFJldmlzaW9uIEhpc3RvcnkJOiBTb3VyY2UgY29kZSAmIHJldmlzaW9uIGhpc3RvcnkgbWFpbnRhaW5lZCBhdCBzb3VyY2Vmb3JnZS5XUEkuZWR1ICAgDQorKiAgRmlsZSBEZXNjcmlwdGlvbgk6IFRyYWNraW5nIFJvdXRpbmVzIGZvciBGSVJTVCBWaXNpb24gQVBJDQorKi8gDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiAgICAgICAgQ29weXJpZ2h0IChjKSBGSVJTVCAyMDA4LiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAqLw0KKy8qICBPcGVuIFNvdXJjZSBTb2Z0d2FyZSAtIG1heSBiZSBtb2RpZmllZCBhbmQgc2hhcmVkIGJ5IEZSQyB0ZWFtcy4gVGhlIGNvZGUgICovDQorLyogIG11c3QgYmUgYWNjb21wYW5pZWQgYnkgdGhlIEZJUlNUIEJTRCBsaWNlbnNlIGZpbGUgaW4gJChXSU5EX0JBU0UpL1dQSUxpYi4gKi8NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKyNpbmNsdWRlICJzdHJpbmcuaCINCisjaW5jbHVkZSAidnhXb3Jrcy5oIiANCisNCisjaW5jbHVkZSAiQXhpc0NhbWVyYS5oIiANCisjaW5jbHVkZSAiRnJjRXJyb3IuaCINCisjaW5jbHVkZSAiVHJhY2tBUEkuaCIgDQorI2luY2x1ZGUgIlZpc2lvbkFQSS5oIiANCisNCitpbnQgVHJhY2tBUElfZGVidWdGbGFnID0gMDsNCisjZGVmaW5lIERQUklOVEYgaWYoVHJhY2tBUElfZGVidWdGbGFnKWRwcmludGYNCisNCisvKioNCisqIEBicmllZiBGaW5kIHRoZSBsYXJnZXN0IHBhcnRpY2xlIHRoYXQgbWVldHMgYSBjcml0ZXJpYSANCisqIEBwYXJhbSBiaW5hcnlJbWFnZSBJbWFnZSB0byBpbnNwZWN0DQorKiBAcGFyYW0gcmVjdCBhcmVhIHRvIHNlYXJjaA0KKyogQHJldHVybiAwID0gZXJyb3INCisqLw0KK2Jvb2wgSW5BcmVhKEltYWdlKiBiaW5hcnlJbWFnZSwgaW50IHBhcnRpY2xlSW5kZXgsIFJlY3QgcmVjdCkNCit7IA0KKwlkb3VibGUgcG9zaXRpb247DQorCQ0KKwlpbWFxTWVhc3VyZVBhcnRpY2xlKGJpbmFyeUltYWdlLCBwYXJ0aWNsZUluZGV4LCAwLCANCisJCQlJTUFRX01UX0JPVU5ESU5HX1JFQ1RfTEVGVCwgJnBvc2l0aW9uKTsNCisJaWYgKCBwb3NpdGlvbiA8IChyZWN0LmxlZnQgICAgICAgICAgICAgKSApIHJldHVybiBmYWxzZTsgLy8gb3V0c2lkZSBsZWZ0IG9mIHJlY3RhbmdsZT8NCisJDQorCWltYXFNZWFzdXJlUGFydGljbGUoYmluYXJ5SW1hZ2UsIHBhcnRpY2xlSW5kZXgsIDAsIA0KKwkJCUlNQVFfTVRfQk9VTkRJTkdfUkVDVF9UT1AsICZwb3NpdGlvbik7DQorCWlmICggcG9zaXRpb24gPCAocmVjdC50b3AgICAgICAgICAgICAgICkgKSByZXR1cm4gZmFsc2U7IC8vIG91dHNpZGUgdG9wIG9mIHJlY3RhbmdsZSA/DQorDQorCWltYXFNZWFzdXJlUGFydGljbGUoYmluYXJ5SW1hZ2UsIHBhcnRpY2xlSW5kZXgsIDAsIA0KKwkJCUlNQVFfTVRfQk9VTkRJTkdfUkVDVF9SSUdIVCwgJnBvc2l0aW9uKTsNCisJaWYgKHBvc2l0aW9uID4gKHJlY3QubGVmdCArIHJlY3Qud2lkdGgpICkgcmV0dXJuIGZhbHNlOwkvLyBvdXRzaWRlIHJpZ2h0IG9mIHJlY3RhbmdsZSA/DQorCQ0KKwlpbWFxTWVhc3VyZVBhcnRpY2xlKGJpbmFyeUltYWdlLCBwYXJ0aWNsZUluZGV4LCAwLCANCisJCQlJTUFRX01UX0JPVU5ESU5HX1JFQ1RfQk9UVE9NLCAmcG9zaXRpb24pOw0KKwlpZiAocG9zaXRpb24gPiAocmVjdC50b3AgKyByZWN0LmhlaWdodCkgKSByZXR1cm4gZmFsc2U7IC8vIG91dHNpZGUgYm90dG9tIG9mIHJlY3RhbmdsZSA/CQ0KKw0KKwlEUFJJTlRGKExPR19JTkZPLCAicGFydGljbGUgJWkgaXMgaW4gKCVpICVpKSBoZWlnaHQgJWkgd2lkdGggJWlcbiIsIA0KKwkJCXBhcnRpY2xlSW5kZXgsIHJlY3QubGVmdCwgcmVjdC50b3AsIHJlY3QuaGVpZ2h0LCByZWN0LndpZHRoKTsNCisJcmV0dXJuIHRydWU7IA0KK30NCisNCisvKioNCisqIEBicmllZiBGaW5kIHRoZSBsYXJnZXN0IHBhcnRpY2xlIHRoYXQgbWVldHMgYSBjcml0ZXJpYSANCisqIEBwYXJhbSBiaW5hcnlJbWFnZSBJbWFnZSB0byBpbnNwZWN0DQorKiBAcGFyYW0gbGFyZ2VzdFBhcnRpY2xlSW5kZXggSW5kZXggb2YgdGhlIGxhcmdlc3QgcGFydGljbGUgDQorKiBAcGFyYW0gcmVjdCBhcmVhIHRvIHNlYXJjaA0KKyogQHJldHVybiAwID0gZXJyb3INCisqLw0KK2ludCBHZXRMYXJnZXN0UGFydGljbGUoSW1hZ2UqIGJpbmFyeUltYWdlLCBpbnQqIGxhcmdlc3RQYXJ0aWNsZUluZGV4KQ0KK3sgcmV0dXJuIEdldExhcmdlc3RQYXJ0aWNsZShiaW5hcnlJbWFnZSwgbGFyZ2VzdFBhcnRpY2xlSW5kZXgsIElNQVFfTk9fUkVDVCk7IH0NCisNCitpbnQgR2V0TGFyZ2VzdFBhcnRpY2xlKEltYWdlKiBiaW5hcnlJbWFnZSwgaW50KiBsYXJnZXN0UGFydGljbGVJbmRleCwgUmVjdCByZWN0KQ0KK3sNCisJKmxhcmdlc3RQYXJ0aWNsZUluZGV4ID0gMDsgLy8gcG9pbnRzIHRvIGNhbGxlci1wcm92aWRlZCB2YXJpYWJsZQ0KKwkNCisJLyogZGV0ZXJtaW5lIG51bWJlciBvZiBwYXJ0aWNsZXMgaW4gdGhyZXNob2xkZWQgaW1hZ2UgKi8JDQorCWludCBudW1QYXJ0aWNsZXM7DQorCWludCBzdWNjZXNzID0gZnJjQ291bnRQYXJ0aWNsZXMoYmluYXJ5SW1hZ2UsICZudW1QYXJ0aWNsZXMpOw0KKwlpZiAoICFzdWNjZXNzICkJeyAgcmV0dXJuIHN1Y2Nlc3M7IAl9CQkJDQorCQ0KKwkvKiBpZiBubyBwYXJ0aWNsZXMgZm91bmQgd2UgY2FuIHF1aXQgaGVyZSAqLw0KKwlpZiAobnVtUGFydGljbGVzID09IDApICB7ICByZXR1cm4gMDsgCX0gIC8vIHVuc3VjY2Vzc2Z1bCBpZiB6ZXJvIHBhcnRpY2xlcyBmb3VuZA0KKwkNCisJLy8gZmluZCB0aGUgbGFyZ2VzdCBwYXJ0aWNsZQ0KKwlkb3VibGUgbGFyZ2VzdFBhcnRpY2xlQXJlYSA9IDA7DQorCWRvdWJsZSBwYXJ0aWNsZUFyZWE7DQorCWZvciAoaW50IGkgPSAwOyBpIDwgbnVtUGFydGljbGVzOyArK2kpIHsJCQ0KKwkJc3VjY2VzcyA9IGltYXFNZWFzdXJlUGFydGljbGUoYmluYXJ5SW1hZ2UsIGksIDAsIElNQVFfTVRfQVJFQSwgJnBhcnRpY2xlQXJlYSk7DQorCQlpZiAoICFzdWNjZXNzICkJeyByZXR1cm4gc3VjY2VzczsgfQkJDQorCQlpZiAocGFydGljbGVBcmVhID4gbGFyZ2VzdFBhcnRpY2xlQXJlYSkgCXsNCisJCQkvLyBzZWUgaWYgaXMgaW4gdGhlIHJpZ2h0IGFyZWENCisJCQlpZiAoIEluQXJlYShiaW5hcnlJbWFnZSwgaSwgcmVjdCkgKSB7DQorCQkJCWxhcmdlc3RQYXJ0aWNsZUFyZWEgPSBwYXJ0aWNsZUFyZWE7DQorCQkJCSpsYXJnZXN0UGFydGljbGVJbmRleCA9IGk7ICAvLyByZXR1cm4gaW5kZXggdG8gY2FsbGVyDQorCQkJfQ0KKwkJfQ0KKwl9DQorCQ0KKwlyZXR1cm4gc3VjY2VzczsNCit9DQorDQorLyoqDQorKiBAYnJpZWYgU2VhcmNoIGZvciBhIGNvbG9yLiBTdXBwb3J0cyBJTUFRX0lNQUdFX0hTTC4gDQorKiBAcGFyYW0gY29sb3IgRGVmaW5pdGlvbiBmb3IgdGhlIGh1ZSByYW5nZSANCisqIEBwYXJhbSB0cmFja1JlcG9ydCBWYWx1ZXMgZm9yIHRyYWNraW5nOiBjZW50ZXIgb2YgcGFydGljbGUsIHBhcnRpY2xlIHNpemUsIGNvbG9yDQorKiBAcmV0dXJuIDAgPSBlcnJvcg0KKyovDQoraW50IEZpbmRDb2xvcihGcmNIdWUgY29sb3IsIFBhcnRpY2xlQW5hbHlzaXNSZXBvcnQqIHRyYWNrUmVwb3J0KQ0KK3sNCisJaW50IHN1Y2Nlc3MgPSAwOwkJLy8gcmV0dXJuOiAwID0gZXJyb3INCisJDQorCS8qIHRyYWNrIGNvbG9yICovDQorCS8vIHVzZSBBQ1RJVkVfTElHSFQgb3IgV0hJVEVfTElHSFQgZm9yIGJyaWdodGx5IGxpdCBvYmplY3RzDQorCVRyYWNraW5nVGhyZXNob2xkIHRkID0gR2V0VHJhY2tpbmdEYXRhKGNvbG9yLCBQQVNTSVZFX0xJR0hUKTsNCisNCisJc3VjY2VzcyA9IEZpbmRDb2xvcihJTUFRX0hTTCwgJnRkLmh1ZSwgJnRkLnNhdHVyYXRpb24sICZ0ZC5sdW1pbmFuY2UsIHRyYWNrUmVwb3J0KTsgDQorCWlmICggIXN1Y2Nlc3MgKQl7IA0KKwkJRFBSSU5URiAoTE9HX0lORk8sICJkaWQgbm90IGZpbmQgY29sb3IgLSBlcnJvckNvZGU9ICVpIixHZXRMYXN0VmlzaW9uRXJyb3IoKSk7CQ0KKwkJcmV0dXJuIHN1Y2Nlc3M7DQorCX0NCisNCisJLy9QcmludFJlcG9ydChwYXIpOw0KKwkNCisJLyogc2V0IGFuIGltYWdlIHF1YWxpdHkgcmVzdHJpY3Rpb24gKi8NCisJaWYgKHRyYWNrUmVwb3J0LT5wYXJ0aWNsZVRvSW1hZ2VQZXJjZW50IDwgUEFSVElDTEVfVE9fSU1BR0VfUEVSQ0VOVCkgew0KKwkJaW1hcVNldEVycm9yKEVSUl9QQVJUSUNMRV9UT09fU01BTEwsIF9fRlVOQ1RJT05fXyk7DQorCQlzdWNjZXNzID0gMDsNCisJfQkNCisJcmV0dXJuIHN1Y2Nlc3M7DQorfQ0KKw0KKy8qKg0KKyogQGJyaWVmIFNlYXJjaCBmb3IgYSBjb2xvci4gU3VwcG9ydHMgSU1BUV9JTUFHRV9IU0wuIA0KKyogQHBhcmFtIGh1ZVJhbmdlIFRoZSByYW5nZSBmb3IgdGhlIGZpcnN0IHBsYW5lDQorKiBAcGFyYW0gdHJhY2tSZXBvcnQgVmFsdWVzIGZvciB0cmFja2luZzogY2VudGVyIG9mIHBhcnRpY2xlLCBwYXJ0aWNsZSBzaXplLCBjb2xvcg0KKyogQHJldHVybiAwID0gZXJyb3INCisqLw0KK2ludCBGaW5kQ29sb3IoY29uc3QgUmFuZ2UqIGh1ZVJhbmdlLCBQYXJ0aWNsZUFuYWx5c2lzUmVwb3J0ICp0cmFja1JlcG9ydCkNCit7IHJldHVybiBGaW5kQ29sb3IoaHVlUmFuZ2UsIERFRkFVTFRfU0FUVVJBVElPTl9USFJFU0hPTEQsIHRyYWNrUmVwb3J0KTsgfQ0KKw0KKy8qKg0KKyogQGJyaWVmIFNlYXJjaCBmb3IgYSBjb2xvci4gU3VwcG9ydHMgSU1BUV9JTUFHRV9IU0wuIA0KKyogQHBhcmFtIGh1ZVJhbmdlIFRoZSByYW5nZSBmb3IgdGhlIGZpcnN0IHBsYW5lDQorKiBAcGFyYW0gbWluU2F0dXJhdGlvbiBUaGUgbG93ZXIgcmFuZ2Ugc2F0dXJhdGlvbg0KKyogQHBhcmFtIHRyYWNrUmVwb3J0IFZhbHVlcyBmb3IgdHJhY2tpbmc6IGNlbnRlciBvZiBwYXJ0aWNsZSwgcGFydGljbGUgc2l6ZSwgY29sb3INCisqIEByZXR1cm4gMCA9IGVycm9yDQorKi8NCitpbnQgRmluZENvbG9yKGNvbnN0IFJhbmdlKiBodWVSYW5nZSwgaW50IG1pblNhdHVyYXRpb24sIFBhcnRpY2xlQW5hbHlzaXNSZXBvcnQgKnRyYWNrUmVwb3J0KQ0KK3sNCisJUmFuZ2Ugc2F0UmFuZ2U7DQorCXNhdFJhbmdlLm1pblZhbHVlID0gbWluU2F0dXJhdGlvbjsNCisJc2F0UmFuZ2UubWF4VmFsdWUgPSAyNTU7DQorCVJhbmdlIGx1bVJhbmdlOw0KKwlsdW1SYW5nZS5taW5WYWx1ZSA9IDA7DQorCWx1bVJhbmdlLm1heFZhbHVlID0gMjU1Ow0KKwlDb2xvck1vZGUgY21vZGUgPSBJTUFRX0hTTDsNCisJcmV0dXJuIEZpbmRDb2xvcihjbW9kZSwgaHVlUmFuZ2UsICZzYXRSYW5nZSwgJmx1bVJhbmdlLCB0cmFja1JlcG9ydCk7DQorfQ0KKw0KKy8qKg0KKyogQGJyaWVmIFNlYXJjaCBmb3IgYSBjb2xvci4gU3VwcG9ydHMgSU1BUV9JTUFHRV9IU0wgYW5kIElNQVFfSU1BR0VfUkdCLiANCisqIEBwYXJhbSBtb2RlIENvbG9yIG1vZGUsIGVpdGhlciBJTUFRX0hTTCBvciBJTUFRX1JHQg0KKyogQHBhcmFtIHBsYW5lMVJhbmdlIFRoZSByYW5nZSBmb3IgdGhlIGZpcnN0IHBsYW5lIChodWUgb3IgcmVkKQ0KKyogQHBhcmFtIHBsYW5lMlJhbmdlIFRoZSByYW5nZSBmb3IgdGhlIHNlY29uZCBwbGFuZSAoc2F0dXJhdGlvbiBvciBncmVlbikNCisqIEBwYXJhbSBwbGFuZTNSYW5nZSBUaGUgcmFuZ2UgZm9yIHRoZSB0aGlyZCBwbGFuZSAobHVtaW5hbmNlIG9yIGJsdWUpDQorKiBAcGFyYW0gdHJhY2tSZXBvcnQgVmFsdWVzIGZvciB0cmFja2luZzogY2VudGVyIG9mIHBhcnRpY2xlLCBwYXJ0aWNsZSBzaXplLCBldGMNCisqIEByZXR1cm4gMCA9IGVycm9yDQorKi8NCitpbnQgRmluZENvbG9yKENvbG9yTW9kZSBtb2RlLCBjb25zdCBSYW5nZSogcGxhbmUxUmFuZ2UsIGNvbnN0IFJhbmdlKiBwbGFuZTJSYW5nZSwgDQorCQljb25zdCBSYW5nZSogcGxhbmUzUmFuZ2UsIFBhcnRpY2xlQW5hbHlzaXNSZXBvcnQgKnRyYWNrUmVwb3J0KQ0KK3sNCisJcmV0dXJuIEZpbmRDb2xvcihtb2RlLCBwbGFuZTFSYW5nZSwgcGxhbmUyUmFuZ2UsIHBsYW5lM1JhbmdlLCB0cmFja1JlcG9ydCwgTlVMTCk7DQorfQ0KKw0KKy8qKg0KKyogQGJyaWVmIFNlYXJjaCBmb3IgYSBjb2xvci4gU3VwcG9ydHMgSU1BUV9JTUFHRV9IU0wgYW5kIElNQVFfSU1BR0VfUkdCLiANCisqIEBwYXJhbSBtb2RlIENvbG9yIG1vZGUsIGVpdGhlciBJTUFRX0hTTCBvciBJTUFRX1JHQg0KKyogQHBhcmFtIHBsYW5lMVJhbmdlIFRoZSByYW5nZSBmb3IgdGhlIGZpcnN0IHBsYW5lIChodWUgb3IgcmVkKQ0KKyogQHBhcmFtIHBsYW5lMlJhbmdlIFRoZSByYW5nZSBmb3IgdGhlIHNlY29uZCBwbGFuZSAoc2F0dXJhdGlvbiBvciBncmVlbikNCisqIEBwYXJhbSBwbGFuZTNSYW5nZSBUaGUgcmFuZ2UgZm9yIHRoZSB0aGlyZCBwbGFuZSAobHVtaW5hbmNlIG9yIGJsdWUpDQorKiBAcGFyYW0gdHJhY2tSZXBvcnQgVmFsdWVzIGZvciB0cmFja2luZzogY2VudGVyIG9mIHBhcnRpY2xlLCBwYXJ0aWNsZSBzaXplLCBldGMNCisqIEBwYXJhbSBjb2xvclJlcG9ydCBDb2xvciBjaGFyYWN0YXJpc3RpY3Mgb2YgdGhlIHBhcnRpY2xlDQorKiBAcmV0dXJuIDAgPSBlcnJvcg0KKyovDQoraW50IEZpbmRDb2xvcihDb2xvck1vZGUgbW9kZSwgY29uc3QgUmFuZ2UqIHBsYW5lMVJhbmdlLCBjb25zdCBSYW5nZSogcGxhbmUyUmFuZ2UsIA0KKwkJY29uc3QgUmFuZ2UqIHBsYW5lM1JhbmdlLCBQYXJ0aWNsZUFuYWx5c2lzUmVwb3J0ICp0cmFja1JlcG9ydCwgDQorCQlDb2xvclJlcG9ydCAqY29sb3JSZXBvcnQpDQorew0KKwlyZXR1cm4gRmluZENvbG9yKG1vZGUsIHBsYW5lMVJhbmdlLCBwbGFuZTJSYW5nZSwgcGxhbmUzUmFuZ2UsIHRyYWNrUmVwb3J0LCANCisJCQlOVUxMLCBJTUFRX05PX1JFQ1QpOw0KK30NCisNCisvKioNCisqIEBicmllZiBTZWFyY2ggZm9yIGEgY29sb3IuIFN1cHBvcnRzIElNQVFfSU1BR0VfSFNMIGFuZCBJTUFRX0lNQUdFX1JHQi4gDQorKiBAcGFyYW0gbW9kZSBDb2xvciBtb2RlLCBlaXRoZXIgSU1BUV9IU0wgb3IgSU1BUV9SR0INCisqIEBwYXJhbSBwbGFuZTFSYW5nZSBUaGUgcmFuZ2UgZm9yIHRoZSBmaXJzdCBwbGFuZSAoaHVlIG9yIHJlZCkNCisqIEBwYXJhbSBwbGFuZTJSYW5nZSBUaGUgcmFuZ2UgZm9yIHRoZSBzZWNvbmQgcGxhbmUgKHNhdHVyYXRpb24gb3IgZ3JlZW4pDQorKiBAcGFyYW0gcGxhbmUzUmFuZ2UgVGhlIHJhbmdlIGZvciB0aGUgdGhpcmQgcGxhbmUgKGx1bWluYW5jZSBvciBibHVlKQ0KKyogQHBhcmFtIHRyYWNrUmVwb3J0IFZhbHVlcyBmb3IgdHJhY2tpbmc6IGNlbnRlciBvZiBwYXJ0aWNsZSwgcGFydGljbGUgc2l6ZSwgZXRjDQorKiBAcGFyYW0gY29sb3JSZXBvcnQgQ29sb3IgY2hhcmFjdGFyaXN0aWNzIG9mIHRoZSBwYXJ0aWNsZQ0KKyogQHBhcmFtIHJlY3QgUmVjdGFuZ2xlIHRvIGNvbmZpbmUgc2VhcmNoIHRvDQorKiBAcmV0dXJuIDAgPSBlcnJvcg0KKyovDQoraW50IEZpbmRDb2xvcihDb2xvck1vZGUgbW9kZSwgY29uc3QgUmFuZ2UqIHBsYW5lMVJhbmdlLCBjb25zdCBSYW5nZSogcGxhbmUyUmFuZ2UsIA0KKwkJY29uc3QgUmFuZ2UqIHBsYW5lM1JhbmdlLCBQYXJ0aWNsZUFuYWx5c2lzUmVwb3J0ICp0cmFja1JlcG9ydCwgDQorCQlDb2xvclJlcG9ydCAqY29sb3JSZXBvcnQsIFJlY3QgcmVjdCkNCit7DQorCWludCBlcnJvckNvZGUgPSAwOw0KKwlpbnQgc3VjY2VzcyA9IDA7DQorCQ0KKwkvKiBjcmVhdGUgYW4gaW1hZ2Ugb2JqZWN0ICovDQorCUltYWdlKiBjYW1lcmFJbWFnZSA9IGZyY0NyZWF0ZUltYWdlKElNQVFfSU1BR0VfSFNMKTsNCisJaWYgKCFjYW1lcmFJbWFnZSkgIHsgcmV0dXJuIHN1Y2Nlc3M7IH0NCisJDQorCS8qIGdldCBpbWFnZSBmcm9tIGNhbWVyYSAtIGlmIHRoZSBjYW1lcmEgaGFzIG5vdCBmaW5pc2hlZCBpbml0aWFsaXppbmcsDQorCSAqIHRoaXMgd2lsbCBmYWlsIA0KKwkgKi8NCisJZG91YmxlIGltYWdlVGltZTsNCisJc3VjY2VzcyA9IEdldEltYWdlKGNhbWVyYUltYWdlLCAmaW1hZ2VUaW1lKTsNCisJaWYgKCFzdWNjZXNzKXsNCisJCURQUklOVEYoTE9HX0lORk8sICJObyBjYW1lcmEgSW1hZ2UgYXZhaWxhYmxlIEVycm9yID0gJWkgJXMiLCANCisJCQkJZXJyb3JDb2RlLCBHZXRWaXNpb25FcnJvclRleHQoZXJyb3JDb2RlKSk7DQorCQlmcmNEaXNwb3NlKGNhbWVyYUltYWdlKTsgDQorCQlpbWFxU2V0RXJyb3IoZXJyb3JDb2RlLCBfX0ZVTkNUSU9OX18pOwkvL3Jlc2V0IGVycm9yIGNvZGUgZm9yIHRoZSBjYWxsZXIJDQorCQlyZXR1cm4gc3VjY2VzczsJCQ0KKwl9CQ0KKwkNCisJLyogc2F2ZSBhIGNvcHkgb2YgdGhlIGltYWdlIHRvIGFub3RoZXIgaW1hZ2UgZm9yIGNvbG9yIHRocmVzaG9sZGluZyBsYXRlciAqLw0KKwlJbWFnZSogaGlzdEltYWdlID0gZnJjQ3JlYXRlSW1hZ2UoSU1BUV9JTUFHRV9IU0wpOw0KKwlpZiAoIWhpc3RJbWFnZSkgIHsgZnJjRGlzcG9zZShjYW1lcmFJbWFnZSk7IHJldHVybiBzdWNjZXNzOyB9DQorCXN1Y2Nlc3MgPSBmcmNDb3B5SW1hZ2UoaGlzdEltYWdlLGNhbWVyYUltYWdlKTsNCisJaWYgKCAhc3VjY2VzcyApCXsgDQorCQllcnJvckNvZGUgPSBHZXRMYXN0VmlzaW9uRXJyb3IoKTsgDQorCQlmcmNEaXNwb3NlKF9fRlVOQ1RJT05fXyxjYW1lcmFJbWFnZSxoaXN0SW1hZ2UsTlVMTCk7IA0KKwkJcmV0dXJuIHN1Y2Nlc3M7IA0KKwl9CQ0KKwkNCisJLyogQ29sb3IgdGhyZXNob2xkIHRoZSBpbWFnZSAqLw0KKwlzdWNjZXNzID0gZnJjQ29sb3JUaHJlc2hvbGQoY2FtZXJhSW1hZ2UsIGNhbWVyYUltYWdlLCBtb2RlLCBwbGFuZTFSYW5nZSwgcGxhbmUyUmFuZ2UsIHBsYW5lM1JhbmdlKTsNCisJaWYgKCAhc3VjY2VzcyApCXsgDQorCQllcnJvckNvZGUgPSBHZXRMYXN0VmlzaW9uRXJyb3IoKTsgDQorCQlEUFJJTlRGIChMT0dfREVCVUcsICJFcnJvciA9ICVpICAlcyAiLCBlcnJvckNvZGUsIEdldFZpc2lvbkVycm9yVGV4dChlcnJvckNvZGUpKTsNCisJCWZyY0Rpc3Bvc2UoX19GVU5DVElPTl9fLGNhbWVyYUltYWdlLGhpc3RJbWFnZSxOVUxMKTsgDQorCQlyZXR1cm4gc3VjY2VzczsgDQorCX0JDQorDQorCWludCBsYXJnZXN0UGFydGljbGVJbmRleCA9IDA7DQorCXN1Y2Nlc3MgPSBHZXRMYXJnZXN0UGFydGljbGUoY2FtZXJhSW1hZ2UsICZsYXJnZXN0UGFydGljbGVJbmRleCwgcmVjdCApOw0KKwlpZiAoICFzdWNjZXNzICkJew0KKwkJZXJyb3JDb2RlID0gR2V0TGFzdFZpc2lvbkVycm9yKCk7IA0KKwkJRFBSSU5URiAoTE9HX0RFQlVHLCAiRXJyb3IgYWZ0ZXIgR2V0TGFyZ2VzdFBhcnRpY2xlID0gJWkgICVzICIsIGVycm9yQ29kZSwgR2V0VmlzaW9uRXJyb3JUZXh0KGVycm9yQ29kZSkpOw0KKwkJZnJjRGlzcG9zZShfX0ZVTkNUSU9OX18sY2FtZXJhSW1hZ2UsaGlzdEltYWdlLE5VTEwpOyANCisJCWltYXFTZXRFcnJvcihFUlJfQ09MT1JfTk9UX0ZPVU5ELCBfX0ZVTkNUSU9OX18pOw0KKwkJcmV0dXJuIHN1Y2Nlc3M7IA0KKwl9DQorCURQUklOVEYoTE9HX0lORk8sICJsYXJnZXN0UGFydGljbGVJbmRleCA9ICVpXG4iLCBsYXJnZXN0UGFydGljbGVJbmRleCk7DQorDQorCS8qIFBhcnRpY2xlcyB3ZXJlIGZvdW5kICAqLw0KKwkJLyogDQorCQkgKiBGaWxsIGluIHJlcG9ydCBpbmZvcm1hdGlvbiBmb3IgbGFyZ2VzdCBwYXJ0aWNsZSBmb3VuZA0KKwkJICovDQorCQlzdWNjZXNzID0gZnJjUGFydGljbGVBbmFseXNpcyhjYW1lcmFJbWFnZSwgbGFyZ2VzdFBhcnRpY2xlSW5kZXgsIHRyYWNrUmVwb3J0KTsNCisJCXRyYWNrUmVwb3J0LT5pbWFnZVRpbWVzdGFtcCA9IGltYWdlVGltZTsNCisJCQ0KKwkJLyogY2xlYW4gdXAgKi8NCisJCWlmICghc3VjY2Vzcykge2ZyY0Rpc3Bvc2UoX19GVU5DVElPTl9fLGNhbWVyYUltYWdlLGhpc3RJbWFnZSxOVUxMKTsgcmV0dXJuIHN1Y2Nlc3M7fQ0KKwkJDQorCQkvKiBwYXJ0aWNsZSBjb2xvciBzdGF0aXN0aWNzICovDQorCQkvKiBvbmx5IGlmIGEgY29sb3IgcmVwb3J0IHJlcXVlc3RlZCAqLw0KKwkJaWYgKGNvbG9yUmVwb3J0ICE9IE5VTEwpDQorCQl7DQorCQkJLyogZmlyc3QgZmlsdGVyIG91dCB0aGUgb3RoZXIgcGFydGljbGVzICovDQorCQkJUGFydGljbGVGaWx0ZXJDcml0ZXJpYTIgY3JpdGVyaWE7DQorCQkJUGFydGljbGVGaWx0ZXJPcHRpb25zKiBvcHRpb25zID0gTlVMTDsNCisJCQlSZWN0IHJlY3Q7DQorCQkJaW50IG51bVBhcnRpY2xlczsNCisJCQlzdWNjZXNzID0gZnJjUGFydGljbGVGaWx0ZXIoY2FtZXJhSW1hZ2UsIGNhbWVyYUltYWdlLCAmY3JpdGVyaWEsIDEsIG9wdGlvbnMsIA0KKwkJCQkJcmVjdCwgJm51bVBhcnRpY2xlcyk7DQorCQkJaWYgKCAhc3VjY2VzcyApCXsgDQorCQkJCURQUklOVEYoTE9HX0lORk8sICJmcmNQYXJ0aWNsZUZpbHRlciBlcnJvckNvZGUgJWkiLCBHZXRMYXN0VmlzaW9uRXJyb3IoKSk7IA0KKwkJCX0JDQorCQkJCQkNCisJCQkvKiBoaXN0b2dyYW0gdGhlIG9yaWdpbmFsIGltYWdlIHVzaW5nIHRoZSB0aHJlc2hvbGRlZCBpbWFnZSBhcyBhIG1hc2sgKi8NCisJCQlpbnQgbnVtQ2xhc3NlcyA9IDEwOyAvL2hvdyBtYW55IGNsYXNzZXM/DQorCQkJQ29sb3JIaXN0b2dyYW1SZXBvcnQqIGNocmVwID0gaW1hcUNvbG9ySGlzdG9ncmFtMihoaXN0SW1hZ2UsIG51bUNsYXNzZXMsIElNQVFfSFNMLCANCisJCQkJCQlOVUxMLCBjYW1lcmFJbWFnZSk7DQorCQkJaWYgKGNocmVwID09IE5VTEwpIHsgDQorCQkJCURQUklOVEYoTE9HX0lORk8sICJOVUxMIENvbG9yIEhpc3RvZ3JhbSIpOw0KKwkJCQllcnJvckNvZGUgPSBHZXRMYXN0VmlzaW9uRXJyb3IoKTsgDQorCQkJfSBlbHNlIHsNCisJCQkJY29sb3JSZXBvcnQtPnBhcnRpY2xlSHVlTWF4ID0gY2hyZXAtPnBsYW5lMS5tYXg7DQorCQkJCWNvbG9yUmVwb3J0LT5wYXJ0aWNsZUh1ZU1pbiA9IGNocmVwLT5wbGFuZTEubWluOw0KKwkJCQljb2xvclJlcG9ydC0+cGFydGljbGVIdWVNZWFuID0gY2hyZXAtPnBsYW5lMS5tZWFuOw0KKwkJCQljb2xvclJlcG9ydC0+cGFydGljbGVTYXRNYXggPSBjaHJlcC0+cGxhbmUyLm1heDsNCisJCQkJY29sb3JSZXBvcnQtPnBhcnRpY2xlU2F0TWluICA9IGNocmVwLT5wbGFuZTIubWluOw0KKwkJCQljb2xvclJlcG9ydC0+cGFydGljbGVTYXRNZWFuID0gY2hyZXAtPnBsYW5lMi5tZWFuOw0KKwkJCQljb2xvclJlcG9ydC0+cGFydGljbGVMdW1NYXggPSBjaHJlcC0+cGxhbmUzLm1heDsNCisJCQkJY29sb3JSZXBvcnQtPnBhcnRpY2xlTHVtTWluID0gY2hyZXAtPnBsYW5lMy5taW47DQorCQkJCWNvbG9yUmVwb3J0LT5wYXJ0aWNsZUx1bU1lYW4gPSBjaHJlcC0+cGxhbmUzLm1lYW47DQorCQkJCWNvbG9yUmVwb3J0LT5udW1iZXJQYXJ0aWNsZXNGb3VuZCA9IG51bVBhcnRpY2xlczsNCisJCQkJZnJjRGlzcG9zZShjaHJlcCk7IA0KKwkJCX0NCisJCX0NCisNCisJLyogY2xlYW4gdXAgKi8NCisJZnJjRGlzcG9zZShfX0ZVTkNUSU9OX18sY2FtZXJhSW1hZ2UsaGlzdEltYWdlLE5VTEwpOyANCisJDQorCXJldHVybiBzdWNjZXNzOwkNCit9DQorDQorDQorLyoqDQorICogICBEYXRhIGZ1bmN0aW9ucyBmb3IgdHJhY2tpbmcNCisgKi8NCisNCisNCisvKioNCisgKiBAYnJpZWYgR2V0IGRlZmF1bHQgSFNMIHRyYWNraW5nIHBhcmFtZXRlcnMNCisgKiBOb3RlIHRoZXNlIHBhcmFtZXRlcnMgYXJlIG5vdCBmdWxseSBjaGFyYWN0ZXJpemVkIGF0IHRoaXMgcG9pbnQNCisgKiBHZXQgdGhlc2UgZGVmYXVsdCB2YWx1ZXMgYW5kIG1vZGlmeSB0aGVtIGFzIG5lZWRlZCBmb3IgeW91ciBlbnZpcm9ubWVudA0KKyAqIEBwYXJhbSBodWUgdGFza2VkIGNvbG9yDQorICogQHBhcmFtIGxpZ2h0IHNhdHVyYXRpb24vbHVtaW5hbmNlDQorICovDQorVHJhY2tpbmdUaHJlc2hvbGQgR2V0VHJhY2tpbmdEYXRhKEZyY0h1ZSBodWUsIEZyY0xpZ2h0IGxpZ2h0KQ0KK3sNCisJVHJhY2tpbmdUaHJlc2hvbGQgdHJhY2tpbmdEYXRhOwkNCisJDQorCS8vc2V0IHNhdHVyYXRpb24gJiBsdW1pbmFuY2UJDQorCXN3aXRjaCAobGlnaHQpIHsNCisJCWRlZmF1bHQ6DQorCQljYXNlIEZMVU9SRVNDRU5UOg0KKwkJCXRyYWNraW5nRGF0YS5zYXR1cmF0aW9uLm1pblZhbHVlID0gMTAwOw0KKwkJCXRyYWNraW5nRGF0YS5zYXR1cmF0aW9uLm1heFZhbHVlID0gMjU1Ow0KKwkJCXRyYWNraW5nRGF0YS5sdW1pbmFuY2UubWluVmFsdWUgPSA0MDsNCisJCQl0cmFja2luZ0RhdGEubHVtaW5hbmNlLm1heFZhbHVlID0gMjU1Ow0KKwkJCWlmIChodWUgPT0gR1JFRU4pIHRyYWNraW5nRGF0YS5sdW1pbmFuY2UubWluVmFsdWUgPSAxMDA7DQorCQkJaWYgKGh1ZSA9PSBQSU5LKSB0cmFja2luZ0RhdGEuc2F0dXJhdGlvbi5taW5WYWx1ZSA9IDgwOw0KKwkJCWlmIChodWUgPT0gUElOSykgdHJhY2tpbmdEYXRhLmx1bWluYW5jZS5taW5WYWx1ZSA9IDYwOw0KKwkJCWlmIChodWUgPT0gUElOSykgdHJhY2tpbmdEYXRhLmx1bWluYW5jZS5tYXhWYWx1ZSA9IDE1NTsNCisJCQlicmVhazsNCisJCWNhc2UgUEFTU0lWRV9MSUdIVDoNCisJCQl0cmFja2luZ0RhdGEuc2F0dXJhdGlvbi5taW5WYWx1ZSA9IDUwOw0KKwkJCXRyYWNraW5nRGF0YS5zYXR1cmF0aW9uLm1heFZhbHVlID0gMjU1Ow0KKwkJCXRyYWNraW5nRGF0YS5sdW1pbmFuY2UubWluVmFsdWUgPSAyMDsNCisJCQl0cmFja2luZ0RhdGEubHVtaW5hbmNlLm1heFZhbHVlID0gMjU1Ow0KKwkJCWJyZWFrOw0KKwkJY2FzZSBCUklHSFRfTElHSFQ6DQorCQkJdHJhY2tpbmdEYXRhLnNhdHVyYXRpb24ubWluVmFsdWUgPSAwOw0KKwkJCXRyYWNraW5nRGF0YS5zYXR1cmF0aW9uLm1heFZhbHVlID0gMTAwOw0KKwkJCXRyYWNraW5nRGF0YS5sdW1pbmFuY2UubWluVmFsdWUgPSAxMDA7DQorCQkJdHJhY2tpbmdEYXRhLmx1bWluYW5jZS5tYXhWYWx1ZSA9IDI1NTsNCisJCQlicmVhazsNCisJCWNhc2UgQUNUSVZFX0xJR0hUOg0KKwkJCXRyYWNraW5nRGF0YS5zYXR1cmF0aW9uLm1pblZhbHVlID0gMDsNCisJCQl0cmFja2luZ0RhdGEuc2F0dXJhdGlvbi5tYXhWYWx1ZSA9IDUwOw0KKwkJCXRyYWNraW5nRGF0YS5sdW1pbmFuY2UubWluVmFsdWUgPSAxNTA7DQorCQkJdHJhY2tpbmdEYXRhLmx1bWluYW5jZS5tYXhWYWx1ZSA9IDI1NTsNCisJCQlicmVhazsNCisJCWNhc2UgV0hJVEVfTElHSFQ6DQorCQkJdHJhY2tpbmdEYXRhLnNhdHVyYXRpb24ubWluVmFsdWUgPSAwOw0KKwkJCXRyYWNraW5nRGF0YS5zYXR1cmF0aW9uLm1heFZhbHVlID0gMjA7DQorCQkJdHJhY2tpbmdEYXRhLmx1bWluYW5jZS5taW5WYWx1ZSA9IDIwMDsNCisJCQl0cmFja2luZ0RhdGEubHVtaW5hbmNlLm1heFZhbHVlID0gMjU1Ow0KKwkJCWJyZWFrOw0KKwl9DQorCQ0KKwkvL3NldCBodWUNCisJc3dpdGNoIChodWUpew0KKwlkZWZhdWx0Og0KKwljYXNlIFdISVRFOg0KKwkJc3RyY3B5ICh0cmFja2luZ0RhdGEubmFtZSwgIldISVRFIik7DQorCQl0cmFja2luZ0RhdGEuaHVlLm1pblZhbHVlID0gMDsNCisJCXRyYWNraW5nRGF0YS5odWUubWF4VmFsdWUgPSAyNTU7DQorCQlicmVhazsNCisJY2FzZSBPUkFOR0U6DQorCQlzdHJjcHkgKHRyYWNraW5nRGF0YS5uYW1lLCAiT1JBTkdFIik7DQorCQl0cmFja2luZ0RhdGEuaHVlLm1pblZhbHVlID0gNTsNCisJCXRyYWNraW5nRGF0YS5odWUubWF4VmFsdWUgPSAyNTsNCisJCWJyZWFrOw0KKwljYXNlIFlFTExPVzoNCisJCXN0cmNweSAodHJhY2tpbmdEYXRhLm5hbWUsICJZRUxMT1ciKTsNCisJCXRyYWNraW5nRGF0YS5odWUubWluVmFsdWUgPSAzMDsNCisJCXRyYWNraW5nRGF0YS5odWUubWF4VmFsdWUgPSA1MDsNCisJCWJyZWFrOw0KKwljYXNlIEdSRUVOOg0KKwkJc3RyY3B5ICh0cmFja2luZ0RhdGEubmFtZSwgIkdSRUVOIik7DQorCQlpZiAobGlnaHQgPT0gRkxVT1JFU0NFTlQpIHsNCisJCQl0cmFja2luZ0RhdGEuaHVlLm1pblZhbHVlID0gNjA7DQorCQkJdHJhY2tpbmdEYXRhLmh1ZS5tYXhWYWx1ZSA9IDExMDsNCisJCX0gZWxzZSB7DQorCQkJdHJhY2tpbmdEYXRhLmh1ZS5taW5WYWx1ZSA9IDkwOw0KKwkJCXRyYWNraW5nRGF0YS5odWUubWF4VmFsdWUgPSAxMjU7CQkJDQorCQl9DQorCQlicmVhazsNCisJY2FzZSBCTFVFOg0KKwkJc3RyY3B5ICh0cmFja2luZ0RhdGEubmFtZSwgIkJMVUUiKTsNCisJCXRyYWNraW5nRGF0YS5odWUubWluVmFsdWUgPSAxNDA7DQorCQl0cmFja2luZ0RhdGEuaHVlLm1heFZhbHVlID0gMTcwOw0KKwkJYnJlYWs7DQorCWNhc2UgUFVSUExFOg0KKwkJc3RyY3B5ICh0cmFja2luZ0RhdGEubmFtZSwgIlBVUlBMRSIpOw0KKwkJdHJhY2tpbmdEYXRhLmh1ZS5taW5WYWx1ZSA9IDE4MDsNCisJCXRyYWNraW5nRGF0YS5odWUubWF4VmFsdWUgPSAyMDA7DQorCQlicmVhazsNCisJY2FzZSBQSU5LOg0KKwkJc3RyY3B5ICh0cmFja2luZ0RhdGEubmFtZSwgIlBJTksiKTsNCisJCXRyYWNraW5nRGF0YS5odWUubWluVmFsdWUgPSAyMTA7DQorCQl0cmFja2luZ0RhdGEuaHVlLm1heFZhbHVlID0gMjUwOw0KKwkJYnJlYWs7DQorCWNhc2UgUkVEOg0KKwkJc3RyY3B5ICh0cmFja2luZ0RhdGEubmFtZSwgIlJFRCIpOw0KKwkJdHJhY2tpbmdEYXRhLmh1ZS5taW5WYWx1ZSA9IDI0MDsNCisJCXRyYWNraW5nRGF0YS5odWUubWF4VmFsdWUgPSAyNTU7DQorCQlicmVhazsNCisJfQ0KKyAgcmV0dXJuKHRyYWNraW5nRGF0YSk7DQorfQ0KKw0KKw0KKy8qKg0KKyAqIFByaW50IHBhcnRpY2xlIGFuYWx5c2lzIHJlcG9ydA0KKyAqIEBwYXJhbSBteVJlcG9ydCBSZXBvcnQgdG8gcHJpbnQNCisgKi8NCit2b2lkIFByaW50UmVwb3J0KFBhcnRpY2xlQW5hbHlzaXNSZXBvcnQqIG15UmVwb3J0KQ0KK3sNCisJZHByaW50ZihMT0dfSU5GTywgInBhcnRpY2xlIGFuYWx5c2lzOlxuICAgICVzJWkgICVzJWlcbiAgICAlcyVsZlxuICAgICVzJWkgICVzJWlcbiAgICAlcyVnICAlcyVnXG4gICAgJXMlZ1xuICAgICVzJWkgICVzJWlcbiAgICAlcyVpICAlcyVpXG4iLA0KKwkJCSJpbWFnZUhlaWdodCA9ICIsIG15UmVwb3J0LT5pbWFnZUhlaWdodCwgDQorCQkJImltYWdlV2lkdGggPSAiLCBteVJlcG9ydC0+aW1hZ2VXaWR0aCwgDQorCQkJImltYWdlVGltZXN0YW1wID0gIiwgbXlSZXBvcnQtPmltYWdlVGltZXN0YW1wLCANCisJCQkiY2VudGVyX21hc3NfeCA9ICIsIG15UmVwb3J0LT5jZW50ZXJfbWFzc194LCANCisJCQkiY2VudGVyX21hc3NfeSA9ICIsIG15UmVwb3J0LT5jZW50ZXJfbWFzc195LCANCisJCQkiY2VudGVyX21hc3NfeF9ub3JtYWxpemVkID0gIiwgbXlSZXBvcnQtPmNlbnRlcl9tYXNzX3hfbm9ybWFsaXplZCwgDQorCQkJImNlbnRlcl9tYXNzX3lfbm9ybWFsaXplZCA9ICIsIG15UmVwb3J0LT5jZW50ZXJfbWFzc195X25vcm1hbGl6ZWQsIA0KKwkJCSJwYXJ0aWNsZUFyZWEgPSAiLCBteVJlcG9ydC0+cGFydGljbGVBcmVhLCANCisJCQkiYm91bmRpbmdSZWN0YW5nbGVUb3AgPSAiLCBteVJlcG9ydC0+Ym91bmRpbmdSZWN0LnRvcCwgDQorCQkJImJvdW5kaW5nUmVjdGFuZ2xlTGVmdCA9ICIsIG15UmVwb3J0LT5ib3VuZGluZ1JlY3QubGVmdCwNCisJCQkiYm91bmRpbmdSZWN0YW5nbGVIZWlnaHQgPSAiLCBteVJlcG9ydC0+Ym91bmRpbmdSZWN0LmhlaWdodCwgDQorCQkJImJvdW5kaW5nUmVjdGFuZ2xlV2lkdGggPSAiLCBteVJlcG9ydC0+Ym91bmRpbmdSZWN0LndpZHRoKTsNCisNCisJZHByaW50ZihMT0dfSU5GTywgInF1YWxpdHkgc3RhdGlzdGljczogIFxuICAgICVzJWcgJXMlZyBcbiIsDQorCQkJInBhcnRpY2xlVG9JbWFnZVBlcmNlbnQgPSAiLCBteVJlcG9ydC0+cGFydGljbGVUb0ltYWdlUGVyY2VudCwgDQorCQkJInBhcnRpY2xlUXVhbGl0eSA9ICIsIG15UmVwb3J0LT5wYXJ0aWNsZVF1YWxpdHkpOw0KK30NCisNCisvKioNCisgKiBQcmludCBjb2xvciByZXBvcnQNCisgKiBAcGFyYW0gbXlSZXBvcnQgUmVwb3J0IHRvIHByaW50DQorICovDQordm9pZCBQcmludFJlcG9ydChDb2xvclJlcG9ydCogbXlSZXBvcnQpDQorew0KKwlkcHJpbnRmKExPR19JTkZPLCAicGFydGljbGUgcmFuZ2VzIGZvciAlaSBwYXJ0aWNsZXM6ICAgICAiLA0KKwkJCSJudW1iZXJQYXJ0aWNsZXNGb3VuZCA9ICIsIG15UmVwb3J0LT5udW1iZXJQYXJ0aWNsZXNGb3VuZCk7DQorCTsNCisJZHByaW50ZihMT0dfSU5GTywgIlxuICAgICVzJWYgICVzJWYgICVzJWZcbiAgICAlcyVmICVzJWYgICVzJWZcbiAgICAlcyVmICAlcyVmICAlcyVmXG4gLS0tLS0tLSIsDQorCQkJInBhcnRpY2xlSHVlTWF4ID0gIiwgbXlSZXBvcnQtPnBhcnRpY2xlSHVlTWF4LCANCisJCQkicGFydGljbGVIdWVNaW4gPSAiLCBteVJlcG9ydC0+cGFydGljbGVIdWVNaW4sIA0KKwkJCSJwYXJ0aWNsZUh1ZU1lYW4gPSAiLCBteVJlcG9ydC0+cGFydGljbGVIdWVNZWFuLA0KKwkJCSJwYXJ0aWNsZVNhdE1heCA9ICIsIG15UmVwb3J0LT5wYXJ0aWNsZVNhdE1heCwgDQorCQkJInBhcnRpY2xlU2F0TWluID0gIiwgbXlSZXBvcnQtPnBhcnRpY2xlU2F0TWluLCANCisJCQkicGFydGljbGVTYXRNZWFuID0gIiwgbXlSZXBvcnQtPnBhcnRpY2xlU2F0TWVhbiwNCisJCQkicGFydGljbGVMdW1NYXggPSAiLCBteVJlcG9ydC0+cGFydGljbGVMdW1NYXgsIA0KKwkJCSJwYXJ0aWNsZUx1bU1pbiA9ICIsIG15UmVwb3J0LT5wYXJ0aWNsZUx1bU1pbiwgDQorCQkJInBhcnRpY2xlTHVtTWVhbiA9ICIsIG15UmVwb3J0LT5wYXJ0aWNsZUx1bU1lYW4pOw0KKw0KK30NCisNCisvKioNCisgKiBQcmludCBjb2xvciByZXBvcnQNCisgKiBAcGFyYW0gbXlSZXBvcnQgUmVwb3J0IHRvIHByaW50DQorICovDQordm9pZCBQcmludFJlcG9ydChUcmFja2luZ1RocmVzaG9sZCogbXlSZXBvcnQpDQorew0KKwlkcHJpbnRmKExPR19JTkZPLCAibmFtZSBvZiBjb2xvcjogJXMiLCBteVJlcG9ydC0+bmFtZSk7DQorDQorCWRwcmludGYoTE9HX0lORk8sICJcbiAgICAlcyVpICAlcyVpXG4gICAgJXMlaSAlcyVpXG4gICAgJXMlaSAgJXMlaVxuIC0tLS0tLS0iLA0KKwkJCSJodWVNaW4gPSAiLCBteVJlcG9ydC0+aHVlLm1pblZhbHVlLCANCisJCQkiaHVlTWF4ID0gIiwgbXlSZXBvcnQtPmh1ZS5tYXhWYWx1ZSwgDQorCQkJInNhdE1pbiA9ICIsIG15UmVwb3J0LT5zYXR1cmF0aW9uLm1pblZhbHVlLCANCisJCQkic2F0TWF4ID0gIiwgbXlSZXBvcnQtPnNhdHVyYXRpb24ubWF4VmFsdWUsIA0KKwkJCSJsdW1NaW4gPSAiLCBteVJlcG9ydC0+bHVtaW5hbmNlLm1pblZhbHVlLCANCisJCQkibHVtTWF4ID0gIiwgbXlSZXBvcnQtPmx1bWluYW5jZS5tYXhWYWx1ZSApOw0KKw0KK30NCisNCisNCisNCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9WaXNpb24yMDA5L1RyYWNrQVBJLmggYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9WaXNpb24yMDA5L1RyYWNrQVBJLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQzMTIxNwotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL1Zpc2lvbjIwMDkvVHJhY2tBUEkuaApAQCAtMCwwICsxLDc0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisqICBQcm9qZWN0ICAgCQk6IEZJUlNUIE1vdG9yIENvbnRyb2xsZXINCisqICBGaWxlIE5hbWUgIAkJOiBUcmFja0FQSS5oICAgICAgICAgIA0KKyogIENvbnRyaWJ1dG9ycyAgIAk6IEVMRg0KKyogIENyZWF0aW9uIERhdGUgCTogQXVndXN0IDEyLCAyMDA4DQorKiAgUmV2aXNpb24gSGlzdG9yeQk6IFNvdXJjZSBjb2RlICYgcmV2aXNpb24gaGlzdG9yeSBtYWludGFpbmVkIGF0IHNvdXJjZWZvcmdlLldQSS5lZHUgICAgDQorKiAgRmlsZSBEZXNjcmlwdGlvbgk6IEdsb2JhbGx5IGRlZmluZWQgdmFsdWVzIGZvciB0aGUgRklSU1QgVmlzaW9uIEFQSQ0KKyovDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiAgICAgICAgQ29weXJpZ2h0IChjKSBGSVJTVCAyMDA4LiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAqLw0KKy8qICBPcGVuIFNvdXJjZSBTb2Z0d2FyZSAtIG1heSBiZSBtb2RpZmllZCBhbmQgc2hhcmVkIGJ5IEZSQyB0ZWFtcy4gVGhlIGNvZGUgICovDQorLyogIG11c3QgYmUgYWNjb21wYW5pZWQgYnkgdGhlIEZJUlNUIEJTRCBsaWNlbnNlIGZpbGUgaW4gJChXSU5EX0JBU0UpL1dQSUxpYi4gKi8NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKyNpZm5kZWYgX19UUkFDS0FQSV9IX18NCisjZGVmaW5lIF9fVFJBQ0tBUElfSF9fDQorDQorI2luY2x1ZGUgIlZpc2lvbkFQSS5oIg0KKyNpbmNsdWRlICJCYWVVdGlsaXRpZXMuaCINCisNCisvKiAgQ29uc3RhbnRzICovDQorLyoqIGltYWdlIHF1YWxpdHkgcmVxdWlyZW1lbnQ6IHBhcnRpY2xlIG11c3QgYmUgdGhpcyAlIG9mIHBpeGVscyANCisgKiBGb3IgaW5zdGFuY2UsIGEgMzIweDI0MCBpbWFnZSBoYXMgNzY4MDAgcGl4ZWxzLiBXaXRoIHRoaXMgDQorICogdG9sZXJhbmNlIGF0IC4wMSwgdGhlIGltYWdlIG11c3QgYmUgNzY4IHBpeGVscy4NCisgKiBVc2UgYSBwZXJjZW50YWdlIGluc3RlYWQgb2YgYSBmaXhlZCAjIG9mIHBpeGVscyBzbyBkaWZmZXJlbnQNCisgKiBpbWFnZSBzaXplcyB3aWxsIHdvcmsgdGhlIHNhbWUgd2F5ICovDQorI2RlZmluZSBQQVJUSUNMRV9UT19JTUFHRV9QRVJDRU5UIDAuMDENCisNCisvKiAgU3RydWN0dXJlcyAqLw0KK3R5cGVkZWYgc3RydWN0IFRyYWNraW5nVGhyZXNob2xkX3N0cnVjdCB7DQorCWNoYXIgbmFtZVs2NF07DQorCVJhbmdlIGh1ZTsNCisJUmFuZ2Ugc2F0dXJhdGlvbjsNCisJUmFuZ2UgbHVtaW5hbmNlOw0KK30gVHJhY2tpbmdUaHJlc2hvbGQ7DQorCQkNCisvKiAgRW51bWVyYXRlZCBUeXBlcyAqLw0KKw0KKy8qKiBQcmVkZWZpbmVkIGh1ZXMgKi8NCit0eXBlZGVmIGVudW0gRnJjSHVlX2VudW0geyANCisJLy8gQmFzaWMgY29sb3JzDQorCVJFRCwgR1JFRU4sIEJMVUUsIFlFTExPVywgT1JBTkdFLCBQVVJQTEUsIFdISVRFLCBQSU5LDQorfUZyY0h1ZTsNCisNCisvKiogUHJlZGVmaW5lZCBzYXR1cmF0aW9uIC8gbHVtaW5hbmNlIHNldHRpbmdzICovDQordHlwZWRlZiBlbnVtIEZyY0xpZ2h0X2VudW0geyANCisJUEFTU0lWRV9MSUdIVCwgQlJJR0hUX0xJR0hULCBBQ1RJVkVfTElHSFQsIFdISVRFX0xJR0hULCBGTFVPUkVTQ0VOVA0KK31GcmNMaWdodDsNCisJDQorLyogY29sb3IgdHJhY2tpbmcgc3VwcG9ydCBmdW5jdGlvbnMgKi8NCitUcmFja2luZ1RocmVzaG9sZCBHZXRUcmFja2luZ0RhdGEoRnJjSHVlIGh1ZSwgRnJjTGlnaHQgbGlnaHQpOw0KKw0KK3ZvaWQgUHJpbnRSZXBvcnQoUGFydGljbGVBbmFseXNpc1JlcG9ydCogbXlSZXBvcnQpOw0KK3ZvaWQgUHJpbnRSZXBvcnQoQ29sb3JSZXBvcnQqIG15UmVwb3J0KTsNCit2b2lkIFByaW50UmVwb3J0KFRyYWNraW5nVGhyZXNob2xkKiBteVJlcG9ydCk7DQorDQorLyogIFRyYWNraW5nIGZ1bmN0aW9ucyAqLw0KKw0KKy8qIGZpbmQgYSBjb2xvciBpbiBjdXJyZW50IGNhbWVyYSBpbWFnZSAqLw0KK2Jvb2wgSW5BcmVhKEltYWdlKiBiaW5hcnlJbWFnZSwgaW50IHBhcnRpY2xlSW5kZXgsIFJlY3QgcmVjdCk7DQoraW50IEdldExhcmdlc3RQYXJ0aWNsZShJbWFnZSogYmluYXJ5SW1hZ2UsIGludCogcGFydGljbGVOdW0pOw0KK2ludCBHZXRMYXJnZXN0UGFydGljbGUoSW1hZ2UqIGJpbmFyeUltYWdlLCBpbnQqIHBhcnRpY2xlTnVtLCBSZWN0IHJlY3QpOw0KK2ludCBGaW5kQ29sb3IoRnJjSHVlIGNvbG9yLCBQYXJ0aWNsZUFuYWx5c2lzUmVwb3J0KiB0cmFja1JlcG9ydCk7DQoraW50IEZpbmRDb2xvcihjb25zdCBSYW5nZSogaHVlUmFuZ2UsIFBhcnRpY2xlQW5hbHlzaXNSZXBvcnQgKnRyYWNrUmVwb3J0KTsNCitpbnQgRmluZENvbG9yKGNvbnN0IFJhbmdlKiBodWVSYW5nZSwgaW50IG1pblNhdHVyYXRpb24sIFBhcnRpY2xlQW5hbHlzaXNSZXBvcnQgKnRyYWNrUmVwb3J0KTsNCitpbnQgRmluZENvbG9yKENvbG9yTW9kZSBtb2RlLCBjb25zdCBSYW5nZSogcGxhbmUxUmFuZ2UsIGNvbnN0IFJhbmdlKiBwbGFuZTJSYW5nZSwgDQorCQljb25zdCBSYW5nZSogcGxhbmUzUmFuZ2UsIFBhcnRpY2xlQW5hbHlzaXNSZXBvcnQgKnRyYWNrUmVwb3J0KTsNCitpbnQgRmluZENvbG9yKENvbG9yTW9kZSBtb2RlLCBjb25zdCBSYW5nZSogcGxhbmUxUmFuZ2UsIGNvbnN0IFJhbmdlKiBwbGFuZTJSYW5nZSwgDQorCQljb25zdCBSYW5nZSogcGxhbmUzUmFuZ2UsIFBhcnRpY2xlQW5hbHlzaXNSZXBvcnQgKnRyYWNrUmVwb3J0LCBDb2xvclJlcG9ydCAqY29sb3JSZXBvcnQpOw0KK2ludCBGaW5kQ29sb3IoQ29sb3JNb2RlIG1vZGUsIGNvbnN0IFJhbmdlKiBwbGFuZTFSYW5nZSwgY29uc3QgUmFuZ2UqIHBsYW5lMlJhbmdlLCANCisJCWNvbnN0IFJhbmdlKiBwbGFuZTNSYW5nZSwgUGFydGljbGVBbmFseXNpc1JlcG9ydCAqdHJhY2tSZXBvcnQsIA0KKwkJQ29sb3JSZXBvcnQgKmNvbG9yUmVwb3J0LCBSZWN0IHJlY3QpOw0KKyNlbmRpZg0KKw0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL1Zpc2lvbjIwMDkvVmlzaW9uQVBJLmNwcCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL1Zpc2lvbjIwMDkvVmlzaW9uQVBJLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZTg5Y2QwCi0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvVmlzaW9uMjAwOS9WaXNpb25BUEkuY3BwCkBAIC0wLDAgKzEsNjc2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisqICBQcm9qZWN0ICAgCQk6IEZJUlNUIE1vdG9yIENvbnRyb2xsZXINCisqICBGaWxlIE5hbWUgIAkJOiBWaXNpb25BUEkuY3BwICAgICAgICANCisqICBDb250cmlidXRvcnMgICAJOiBFTEYsIEVNRg0KKyogIENyZWF0aW9uIERhdGUgCTogSnVuZSAyNiwgMjAwOA0KKyogIFJldmlzaW9uIEhpc3RvcnkJOiBTb3VyY2UgY29kZSAmIHJldmlzaW9uIGhpc3RvcnkgbWFpbnRhaW5lZCBhdCBzb3VyY2Vmb3JnZS5XUEkuZWR1ICAgDQorKiAgRmlsZSBEZXNjcmlwdGlvbgk6IEMgUm91dGluZXMgZm9yIEZJUlNUIFZpc2lvbiBBUEkuIE9wZW4gc291cmNlIEFQSSBkZXZlbG9wZWQgDQorKiAgICBieSBCQUUgU3lzdGVtcyB0byBpbnRlcmZhY2Ugd2l0aCB0aGUgTmF0aW9uYWwgSW5zdHJ1bWVudHMgdmlzaW9uIEMgbGlicmFyeQ0KKyogICAgaW4gdGhlIG5pdmlzaW9uLm91dCBtb2R1bGUuIFRoZSBwdWJsaXNoZWQgaW50ZXJmYWNlIHRvIG5pdmlzaW9uLm91dCBpcyBpbg0KKyogICAgdGhlIGhlYWRlciBmaWxlIG5pdmlzaW9uLmggYW5kIGRvY3VtZW50ZWQgaW4gdGhlIE5JVmlzaW9uQ1ZJLmNobSBoZWxwIGZpbGUuDQorKi8gDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiAgICAgICAgQ29weXJpZ2h0IChjKSBGSVJTVCAyMDA4LiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAqLw0KKy8qICBPcGVuIFNvdXJjZSBTb2Z0d2FyZSAtIG1heSBiZSBtb2RpZmllZCBhbmQgc2hhcmVkIGJ5IEZSQyB0ZWFtcy4gVGhlIGNvZGUgICovDQorLyogIG11c3QgYmUgYWNjb21wYW5pZWQgYnkgdGhlIEZJUlNUIEJTRCBsaWNlbnNlIGZpbGUgaW4gJChXSU5EX0JBU0UpL1dQSUxpYi4gKi8NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKyNpbmNsdWRlICJzdGRpb0xpYi5oIiANCisjaW5jbHVkZSAidnhXb3Jrcy5oIiANCisNCisjaW5jbHVkZSAiQmFlVXRpbGl0aWVzLmgiDQorI2luY2x1ZGUgIkZyY0Vycm9yLmgiDQorI2luY2x1ZGUgIlZpc2lvbkFQSS5oIiANCisNCitpbnQgVmlzaW9uQVBJX2RlYnVnRmxhZyA9IDE7DQorI2RlZmluZSBEUFJJTlRGIGlmKFZpc2lvbkFQSV9kZWJ1Z0ZsYWcpZHByaW50Zg0KKw0KKy8qICAgSW1hZ2UgTWFuYWdlbWVudCBmdW5jdGlvbnMgICAgKi8NCisNCisvKioNCisqIEBicmllZiBDcmVhdGUgYW4gaW1hZ2Ugb2JqZWN0DQorKiBTdXBwb3J0cyBJTUFRX0lNQUdFX1U4LCBJTUFRX0lNQUdFX0kxNiwgSU1BUV9JTUFHRV9TR0wsIElNQVFfSU1BR0VfQ09NUExFWCwgSU1BUV9JTUFHRV9SR0IsIElNQVFfSU1BR0VfSFNMLCBJTUFRX0lNQUdFX1JHQl9VNjQgICAgICAgICAgDQorKiBUaGUgYm9yZGVyIHNpemUgaXMgZGVmYXVsdGVkIHRvIDMgc28gdGhhdCBjb252b2x1dGlvbmFsIGFsZ29yaXRobXMgd29yayBhdCB0aGUgZWRnZXMuIA0KKyogV2hlbiB5b3UgYXJlIGZpbmlzaGVkIHdpdGggdGhlIGNyZWF0ZWQgaW1hZ2UsIGRpc3Bvc2Ugb2YgaXQgYnkgY2FsbGluZyBmcmNEaXNwb3NlKCkuIA0KKyogVG8gZ2V0IGV4dGVuZGVkIGVycm9yIGluZm9ybWF0aW9uLCBjYWxsIEdldExhc3RFcnJvcigpLiAgIA0KKyogICAgICAgICAgIA0KKyogQHBhcmFtIHR5cGUgVHlwZSBvZiBpbWFnZSB0byBjcmVhdGUNCisqIEByZXR1cm4gSW1hZ2UqIE9uIHN1Y2Nlc3MsIHRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgY3JlYXRlZCBpbWFnZS4gT24gZmFpbHVyZSwgaXQgcmV0dXJucyBOVUxMLg0KKyovDQorSW1hZ2UqIGZyY0NyZWF0ZUltYWdlKEltYWdlVHlwZSB0eXBlKSB7IHJldHVybiBpbWFxQ3JlYXRlSW1hZ2UodHlwZSwgREVGQVVMVF9CT1JERVJfU0laRSk7IH0NCisNCisvKioNCisqIEBicmllZiBEaXNwb3NlIG9mIG9uZSBvYmplY3QuIFN1cHBvcnRzIGFueSBvYmplY3QgY3JlYXRlZCBvbiB0aGUgaGVhcC4NCisqIA0KKyogQHBhcmFtIG9iamVjdCBvYmplY3QgdG8gZGlzcG9zZSBvZg0KKyogQHJldHVybiBPbiBzdWNjZXNzOiAxLiBPbiBmYWlsdXJlOiAwLiBUbyBnZXQgZXh0ZW5kZWQgZXJyb3IgaW5mb3JtYXRpb24sIGNhbGwgR2V0TGFzdEVycm9yKCkuDQorKi8NCitpbnQgZnJjRGlzcG9zZSh2b2lkKiBvYmplY3QpICB7IHJldHVybiBpbWFxRGlzcG9zZShvYmplY3QpOwl9DQorLyoqDQorKiBAYnJpZWYgRGlzcG9zZSBvZiBhIGxpc3Qgb2Ygb2JqZWN0cy4gU3VwcG9ydHMgYW55IG9iamVjdCBjcmVhdGVkIG9uIHRoZSBoZWFwLg0KKyogDQorKiBAcGFyYW0gZnVuY3Rpb25OYW1lIFRoZSBuYW1lIG9mIHRoZSBmdW5jdGlvbg0KKyogQHBhcmFtIC4uLiBBIGxpc3Qgb2YgcG9pbnRlcnMgdG8gc3RydWN0dXJlcyB0aGF0IG5lZWQgdG8gYmUgZGlzcG9zZWQgb2YuIA0KKyogVGhlIGxhc3QgcG9pbnRlciBpbiB0aGUgbGlzdCBzaG91bGQgYWx3YXlzIGJlIHNldCB0byBOVUxMLg0KKyogDQorKiBAcmV0dXJuIE9uIHN1Y2Nlc3M6IDEuIE9uIGZhaWx1cmU6IDAuIFRvIGdldCBleHRlbmRlZCBlcnJvciBpbmZvcm1hdGlvbiwgY2FsbCBHZXRMYXN0RXJyb3IoKS4NCisqLw0KK2ludCBmcmNEaXNwb3NlKCBjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIC4uLiApIC8qIFZhcmlhYmxlIGFyZ3VtZW50IGxpc3QgKi8NCit7DQorICAgIHZhX2xpc3QgZGlzcG9zYWxQdHJMaXN0OyAgIC8qIElucHV0IGFyZ3VtZW50IGxpc3QgKi8NCisgICAgdm9pZCogZGlzcG9zYWxQdHI7ICAgICAgICAgLyogRm9yIGl0ZXJhdGlvbiAqLw0KKyAgICBpbnQgc3VjY2VzcywgcmV0dXJuVmFsdWUgPSAxOw0KKyAgICANCisgICAgdmFfc3RhcnQoIGRpc3Bvc2FsUHRyTGlzdCwgZnVuY3Rpb25OYW1lICk7ICAvKiBzdGFydCBvZiB2YXJpYWJsZSBsaXN0ICovDQorICAgIGRpc3Bvc2FsUHRyID0gdmFfYXJnKCBkaXNwb3NhbFB0ckxpc3QsIHZvaWQqICk7DQorICAgIHdoaWxlKCBkaXNwb3NhbFB0ciAhPSBOVUxMICkgICAgIHsNCisgICAgCXN1Y2Nlc3MgPSBpbWFxRGlzcG9zZShkaXNwb3NhbFB0cik7DQorICAgICAgICBpZiAoIXN1Y2Nlc3MpIHtyZXR1cm5WYWx1ZSA9IDA7fQ0KKyAgICAgICAgZGlzcG9zYWxQdHIgPSB2YV9hcmcoIGRpc3Bvc2FsUHRyTGlzdCwgdm9pZCogKTsNCisgICAgfQ0KKyAgICByZXR1cm4gcmV0dXJuVmFsdWU7DQorfQ0KKw0KKy8qKg0KKyogQGJyaWVmIENvcHkgYW4gaW1hZ2Ugb2JqZWN0LiANCisqIFN1cHBvcnRzIElNQVFfSU1BR0VfVTgsIElNQVFfSU1BR0VfSTE2LCBJTUFRX0lNQUdFX1NHTCwgSU1BUV9JTUFHRV9SR0IsIElNQVFfSU1BR0VfSFNMLiAgICAgICAgICANCisqIA0KKyogQHBhcmFtIGRlc3QgQ29weSBvZiBpbWFnZS4gT24gZmFpbHVyZSwgZGVzdCBpcyBOVUxMLiBNdXN0IGhhdmUgYWxyZWFkeSBiZWVuIGNyZWF0ZWQgdXNpbmcgZnJjQ3JlYXRlSW1hZ2UoKS4NCisqIFdoZW4geW91IGFyZSBmaW5pc2hlZCB3aXRoIHRoZSBjcmVhdGVkIGltYWdlLCBkaXNwb3NlIG9mIGl0IGJ5IGNhbGxpbmcgZnJjRGlzcG9zZSgpLg0KKyogQHBhcmFtIHNvdXJjZSBJbWFnZSB0byBjb3B5ICAgICAgDQorKiANCisqIEByZXR1cm4gT24gc3VjY2VzczogMS4gT24gZmFpbHVyZTogMC4gVG8gZ2V0IGV4dGVuZGVkIGVycm9yIGluZm9ybWF0aW9uLCBjYWxsIEdldExhc3RFcnJvcigpLg0KKyovDQoraW50IGZyY0NvcHlJbWFnZShJbWFnZSogZGVzdCwgY29uc3QgSW1hZ2UqIHNvdXJjZSkgeyByZXR1cm4gaW1hcUR1cGxpY2F0ZShkZXN0LCBzb3VyY2UpOyAgfQ0KKw0KKy8qKg0KKyogQGJyaWVmIENyb3AgaW1hZ2Ugd2l0aG91dCBjaGFuZ2luZyB0aGUgc2NhbGUuIA0KKyogU3VwcG9ydHMgSU1BUV9JTUFHRV9VOCwgSU1BUV9JTUFHRV9JMTYsIElNQVFfSU1BR0VfU0dMLCBJTUFRX0lNQUdFX1JHQiwgSU1BUV9JTUFHRV9IU0wuDQorKiANCisqIEBwYXJhbSBkZXN0IE1vZGlmaWVkIGltYWdlDQorKiBAcGFyYW0gc291cmNlIEltYWdlIHRvIGNyb3ANCisqIEBwYXJhbSByZWN0IHJlZ2lvbiB0byBwcm9jZXNzLCBvciBJTUFRX05PX1JFQ1QNCisqIA0KKyogQHJldHVybiBPbiBzdWNjZXNzOiAxLiBPbiBmYWlsdXJlOiAwLiBUbyBnZXQgZXh0ZW5kZWQgZXJyb3IgaW5mb3JtYXRpb24sIGNhbGwgR2V0TGFzdEVycm9yKCkuDQorKi8NCitpbnQgZnJjQ3JvcChJbWFnZSogZGVzdCwgY29uc3QgSW1hZ2UqIHNvdXJjZSwgUmVjdCByZWN0KQ0KK3sJDQorCXJldHVybiBpbWFxU2NhbGUoZGVzdCwgc291cmNlLCAxLCAxLCBJTUFRX1NDQUxFX0xBUkdFUiwgcmVjdCk7DQorfQ0KKw0KKw0KKy8qKg0KKyogQGJyaWVmIFNjYWxlcyB0aGUgZW50aXJlIGltYWdlIGxhcmdlciBvciBzbWFsbGVyLiANCisqIFN1cHBvcnRzIElNQVFfSU1BR0VfVTgsIElNQVFfSU1BR0VfSTE2LCBJTUFRX0lNQUdFX1NHTCwgSU1BUV9JTUFHRV9SR0IsIElNQVFfSU1BR0VfSFNMLg0KKyogICAgIA0KKyogQHBhcmFtIGRlc3QgTW9kaWZpZWQgaW1hZ2UNCisqIEBwYXJhbSBzb3VyY2UgSW1hZ2UgdG8gc2NhbGUNCisqIEBwYXJhbSB4U2NhbGUgdGhlIGhvcml6b250YWwgcmVkdWN0aW9uIHJhdGlvDQorKiBAcGFyYW0geVNjYWxlIHRoZSB2ZXJ0aWNhbCByZWR1Y3Rpb24gcmF0aW8gDQorKiBAcGFyYW0gc2NhbGVNb2RlIElNQVFfU0NBTEVfTEFSR0VSIG9yIElNQVFfU0NBTEVfU01BTExFUiAgDQorKiANCisqIEByZXR1cm4gT24gc3VjY2VzczogMS4gT24gZmFpbHVyZTogMC4gVG8gZ2V0IGV4dGVuZGVkIGVycm9yIGluZm9ybWF0aW9uLCBjYWxsIEdldExhc3RFcnJvcigpLg0KKyovDQoraW50IGZyY1NjYWxlKEltYWdlKiBkZXN0LCBjb25zdCBJbWFnZSogc291cmNlLCBpbnQgeFNjYWxlLCBpbnQgeVNjYWxlLCBTY2FsaW5nTW9kZSBzY2FsZU1vZGUpDQorewkNCisJUmVjdCByZWN0ID0gSU1BUV9OT19SRUNUOw0KKwlyZXR1cm4gaW1hcVNjYWxlKGRlc3QsIHNvdXJjZSwgeFNjYWxlLCB5U2NhbGUsIHNjYWxlTW9kZSwgcmVjdCk7CQ0KK30NCisgIA0KKy8qKg0KKyAqIEBicmllZiBDcmVhdGVzIGltYWdlIG9iamVjdCBmcm9tIHRoZSBpbmZvcm1hdGlvbiBpbiBhIGZpbGUuIFRoZSBmaWxlIGNhbiBiZSBpbiBvbmUgb2YgdGhlIGZvbGxvd2luZyBmb3JtYXRzOiANCisgKiBQTkcsIEpQRUcsIEpQRUcyMDAwLCBUSUZGLCBBSVBELCBvciBCTVAuIA0KKyAqIFN1cHBvcnRzIElNQVFfSU1BR0VfVTgsIElNQVFfSU1BR0VfSTE2LCBJTUFRX0lNQUdFX1NHTCwgSU1BUV9JTUFHRV9DT01QTEVYLCBJTUFRX0lNQUdFX1JHQiwgSU1BUV9JTUFHRV9IU0wsIElNQVFfSU1BR0VfUkdCX1U2NC4NCisgKiANCisgKiBAcGFyYW0gaW1hZ2UgSW1hZ2UgcmVhZCBpbg0KKyAqIEBwYXJhbSBmaWxlTmFtZSBGaWxlIHRvIHJlYWQuIENhbm5vdCBiZSBOVUxMDQorICogDQorICogQHJldHVybiBPbiBzdWNjZXNzOiAxLiBPbiBmYWlsdXJlOiAwLiBUbyBnZXQgZXh0ZW5kZWQgZXJyb3IgaW5mb3JtYXRpb24sIGNhbGwgR2V0TGFzdEVycm9yKCkuDQorICovDQorIGludCBmcmNSZWFkSW1hZ2UoSW1hZ2UqIGltYWdlLCBjb25zdCBjaGFyKiBmaWxlTmFtZSkNCisgew0KKwkgcmV0dXJuIGltYXFSZWFkRmlsZShpbWFnZSwgZmlsZU5hbWUsIE5VTEwsIE5VTEwpOw0KKyB9DQorDQorDQorIC8qKg0KKyAqIEBicmllZiBXcml0ZSBpbWFnZSB0byBhIGZpbGUuIA0KKyAqIFN1cHBvcnRzIElNQVFfSU1BR0VfVTgsIElNQVFfSU1BR0VfSTE2LCBJTUFRX0lNQUdFX1NHTCwgSU1BUV9JTUFHRV9DT01QTEVYLCBJTUFRX0lNQUdFX1JHQiwgSU1BUV9JTUFHRV9IU0wsIElNQVFfSU1BR0VfUkdCX1U2NC4NCisgKiANCisgKiBUaGUgZmlsZSB0eXBlIGlzIGRldGVybWluZWQgYnkgdGhlIGV4dGVuc2lvbiwgYXMgZm9sbG93czoNCisgKg0KKyAqCQlFeHRlbnNpb24gCQkJCQlGaWxlIFR5cGUgDQorICoJCWFpcGQgb3IgLmFwZCAJCQkJQUlQRCANCisgKgkJLmJtcCAJCQkJCQlCTVAgDQorICoJCS5qcGcgb3IgLmpwZWcgCQkJCUpQRUcgDQorICoJCS5qcDIgCQkJCQkJSlBFRzIwMDAgDQorICoJCS5wbmcgCQkJCQkJUE5HIA0KKyAqCQkudGlmIG9yIC50aWZmIAkJCQlUSUZGIA0KKyAqIA0KKyAqIA0KKyAqVGhlIGZvbGxvd2luZyBhcmUgdGhlIHN1cHBvcnRlZCBpbWFnZSB0eXBlcyBmb3IgZWFjaCBmaWxlIHR5cGU6DQorICoNCisgKgkJRmlsZSBUeXBlcyAJCQkJCUltYWdlIFR5cGVzIA0KKyAqCQlBSVBEIAkJCQkJCWFsbCBpbWFnZSB0eXBlcyANCisgKgkJQk1QLCBKUEVHIAkJCQkJOC1iaXQsIFJHQiANCisgKgkJUE5HLCBUSUZGLCBKUEVHMjAwMCAJCTgtYml0LCAxNi1iaXQsIFJHQiwgUkdCVTY0IAkJDQorICogCQkJICAgIA0KKyAqIEBwYXJhbSBpbWFnZSBJbWFnZSB0byB3cml0ZQ0KKyAqIEBwYXJhbSBmaWxlTmFtZSBGaWxlIHRvIHJlYWQuIENhbm5vdCBiZSBOVUxMLiBUaGUgZXh0ZW5zaW9uIGRldGVybWluZXMgdGhlIGZpbGUgZm9ybWF0IHRoYXQgaXMgd3JpdHRlbi4NCisgKiANCisgKiBAcmV0dXJuIE9uIHN1Y2Nlc3M6IDEuIE9uIGZhaWx1cmU6IDAuIFRvIGdldCBleHRlbmRlZCBlcnJvciBpbmZvcm1hdGlvbiwgY2FsbCBHZXRMYXN0RXJyb3IoKS4NCisgKi8NCitpbnQgZnJjV3JpdGVJbWFnZShjb25zdCBJbWFnZSogaW1hZ2UsIGNvbnN0IGNoYXIqIGZpbGVOYW1lKQ0KK3sJDQorCVJHQlZhbHVlKiBjb2xvclRhYmxlID0gTlVMTDsNCisJcmV0dXJuIGltYXFXcml0ZUZpbGUoaW1hZ2UsIGZpbGVOYW1lLCBjb2xvclRhYmxlKTsNCit9DQorDQorDQorLyogIE1lYXN1cmUgSW50ZW5zaXR5IGZ1bmN0aW9ucyAqLw0KKw0KKy8qKg0KKyogQGJyaWVmIE1lYXN1cmVzIHRoZSBwaXhlbCBpbnRlbnNpdGllcyBpbiBhIHJlY3RhbmdsZSBvZiBhbiBpbWFnZS4gDQorKiBPdXRwdXRzIGludGVuc2l0eSBiYXNlZCBzdGF0aXN0aWNzIGFib3V0IGFuIGltYWdlIHN1Y2ggYXMgTWF4LCBNaW4sIE1lYW4gYW5kIFN0ZCBEZXYgb2YgcGl4ZWwgdmFsdWUuIA0KKyogU3VwcG9ydHMgSU1BUV9JTUFHRV9VOCwgSU1BUV9JTUFHRV9JMTYsIElNQVFfSU1BR0VfU0dMLg0KKyoNCisqICBQYXJhbWV0ZXIgRGlzY3Vzc2lvbgk6IA0KKyoJCVJlbGV2YW50IHBhcmFtZXRlcnMgb2YgdGhlIEhpc3RvZ3JhbVJlcG9ydCBpbmNsdWRlOg0KKyogCQkJbWluLCBtYXgsIG1lYW4gYW5kIHN0ZERldiAgICAgIA0KKyoJCW1pbi9tYXggl1NldHRpbmcgYm90aCBtaW4gYW5kIG1heCB0byAwIGNhdXNlcyB0aGUgZnVuY3Rpb24gdG8gc2V0IG1pbiB0byAwIA0KKyogCQkJYW5kIHRoZSBtYXggdG8gMjU1IGZvciA4LWJpdCBpbWFnZXMgYW5kIHRvIHRoZSBhY3R1YWwgbWluaW11bSB2YWx1ZSBhbmQNCisqIAkJCW1heGltdW0gdmFsdWUgb2YgdGhlIGltYWdlIGZvciBhbGwgb3RoZXIgaW1hZ2UgdHlwZXMuDQorKgkJbWF4l1NldHRpbmcgYm90aCBtaW4gYW5kIG1heCB0byAwIGNhdXNlcyB0aGUgZnVuY3Rpb24gdG8gc2V0IG1heCB0byAyNTUgDQorKiAJCQlmb3IgOC1iaXQgaW1hZ2VzIGFuZCB0byB0aGUgYWN0dWFsIG1heGltdW0gdmFsdWUgb2YgdGhlIGltYWdlIGZvciANCisqIAkJCWFsbCBvdGhlciBpbWFnZSB0eXBlcy4NCisqDQorKiBAcGFyYW0gaW1hZ2UgSW1hZ2Ugd2hvc2UgaGlzdG9ncmFtIHRoZSBmdW5jdGlvbiBjYWxjdWxhdGVzLg0KKyogQHBhcmFtIG51bUNsYXNzZXMgVGhlIG51bWJlciBvZiBjbGFzc2VzIGludG8gd2hpY2ggdGhlIGZ1bmN0aW9uIHNlcGFyYXRlcyB0aGUgcGl4ZWxzLiANCisqIERldGVybWluZXMgdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgaGlzdG9ncmFtIGFycmF5IHJldHVybmVkDQorKiBAcGFyYW0gbWluIFRoZSBtaW5pbXVtIHBpeGVsIHZhbHVlIHRvIGNvbnNpZGVyIGZvciB0aGUgaGlzdG9ncmFtLiANCisqIFRoZSBmdW5jdGlvbiBkb2VzIG5vdCBjb3VudCBwaXhlbHMgd2l0aCB2YWx1ZXMgbGVzcyB0aGFuIG1pbi4NCisqIEBwYXJhbSBtYXggVGhlIG1heGltdW0gcGl4ZWwgdmFsdWUgdG8gY29uc2lkZXIgZm9yIHRoZSBoaXN0b2dyYW0uIA0KKyogVGhlIGZ1bmN0aW9uIGRvZXMgbm90IGNvdW50IHBpeGVscyB3aXRoIHZhbHVlcyBncmVhdGVyIHRoYW4gbWF4Lg0KKyogQHBhcmFtIHJlY3QgUmVnaW9uIG9mIGludGVyZXN0IGluIHRoZSBpbWFnZS4gSWYgbm90IGluY2x1ZGVkLCB0aGUgZW50aXJlIGltYWdlIGlzIHVzZWQuIA0KKyogQHJldHVybiBPbiBzdWNjZXNzLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgYSByZXBvcnQgZGVzY3JpYmluZyB0aGUgcGl4ZWwgdmFsdWUgY2xhc3NpZmljYXRpb24uICAgIA0KKyogV2hlbiB5b3UgYXJlIGZpbmlzaGVkIHdpdGggdGhlIHJlcG9ydCwgZGlzcG9zZSBvZiBpdCBieSBjYWxsaW5nIGZyY0Rpc3Bvc2UoKS4gDQorKiBPbiBmYWlsdXJlLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgTlVMTC4gVG8gZ2V0IGV4dGVuZGVkIGVycm9yIGluZm9ybWF0aW9uLCBjYWxsIEdldExhc3RFcnJvcigpLiAgICAgICAgICAgIA0KKyogDQorKi8NCitIaXN0b2dyYW1SZXBvcnQqIGZyY0hpc3RvZ3JhbShjb25zdCBJbWFnZSogaW1hZ2UsIGludCBudW1DbGFzc2VzLCBmbG9hdCBtaW4sIGZsb2F0IG1heCkNCit7DQorCVJlY3QgcmVjdCA9IElNQVFfTk9fUkVDVDsNCisJcmV0dXJuIGZyY0hpc3RvZ3JhbShpbWFnZSwgbnVtQ2xhc3NlcywgbWluLCBtYXgsIHJlY3QpOwkJDQorfQ0KK0hpc3RvZ3JhbVJlcG9ydCogZnJjSGlzdG9ncmFtKGNvbnN0IEltYWdlKiBpbWFnZSwgaW50IG51bUNsYXNzZXMsIGZsb2F0IG1pbiwgZmxvYXQgbWF4LCBSZWN0IHJlY3QpDQorew0KKwlpbnQgc3VjY2VzczsgDQorCWludCBmaWxsVmFsdWUgPSAxOw0KKwkNCisJLyogY3JlYXRlIHRoZSByZWdpb24gb2YgaW50ZXJlc3QgKi8NCisJUk9JKiBwUm9pID0gaW1hcUNyZWF0ZVJPSSgpOw0KKwlzdWNjZXNzID0gaW1hcUFkZFJlY3RDb250b3VyKHBSb2ksIHJlY3QpOyANCisJaWYgKCAhc3VjY2VzcyApCXsgR2V0TGFzdFZpc2lvbkVycm9yKCk7IHJldHVybiBOVUxMOyB9CQ0KKw0KKwkvKiBtYWtlIGEgbWFzayBmcm9tIHRoZSBST0kgKi8NCisJSW1hZ2UqIHBNYXNrID0gZnJjQ3JlYXRlSW1hZ2UoSU1BUV9JTUFHRV9VOCk7DQorCXN1Y2Nlc3MgPSBpbWFxUk9JVG9NYXNrKHBNYXNrLCBwUm9pLCBmaWxsVmFsdWUsIE5VTEwsIE5VTEwpOw0KKwlpZiAoICFzdWNjZXNzICkJeyANCisJCUdldExhc3RWaXNpb25FcnJvcigpOyANCisJCWZyY0Rpc3Bvc2UoX19GVU5DVElPTl9fLCBwUm9pLCBOVUxMKTsgDQorCQlyZXR1cm4gTlVMTDsgDQorCX0JDQorCQ0KKwkvKiBnZXQgYSBoaXN0b2dyYW0gcmVwb3J0ICovDQorCUhpc3RvZ3JhbVJlcG9ydCogcEhyID0gTlVMTDsNCisJcEhyID0gaW1hcUhpc3RvZ3JhbShpbWFnZSwgbnVtQ2xhc3NlcywgbWluLCBtYXgsIHBNYXNrKTsgDQorCQ0KKwkvKiBjbGVhbiB1cCAqLw0KKwlmcmNEaXNwb3NlKF9fRlVOQ1RJT05fXywgcFJvaSwgcE1hc2ssIE5VTEwpOyANCisJDQorCXJldHVybiBwSHI7DQorfQ0KKw0KKy8qKg0KKyogQGJyaWVmIENhbGN1bGF0ZXMgdGhlIGhpc3RvZ3JhbSwgb3IgcGl4ZWwgZGlzdHJpYnV0aW9uLCBvZiBhIGNvbG9yIGltYWdlLiANCisqIFN1cHBvcnRzIElNQVFfSU1BR0VfUkdCLCBJTUFRX0lNQUdFX0hTTC4NCisqICAgICAgICAgICAgDQorKiBAcGFyYW0gaW1hZ2UgSW1hZ2Ugd2hvc2UgaGlzdG9ncmFtIHRoZSBmdW5jdGlvbiBjYWxjdWxhdGVzLg0KKyogQHBhcmFtIG51bUNsYXNzZXMgVGhlIG51bWJlciBvZiBjbGFzc2VzIGludG8gd2hpY2ggdGhlIGZ1bmN0aW9uIHNlcGFyYXRlcyB0aGUgcGl4ZWxzLiANCisqIERldGVybWluZXMgdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgaGlzdG9ncmFtIGFycmF5IHJldHVybmVkDQorKiBAcGFyYW0gbW9kZSBUaGUgY29sb3Igc3BhY2UgaW4gd2hpY2ggdG8gcGVyZm9ybSB0aGUgaGlzdG9ncmFtLiBQb3NzaWJsZSB2YWx1ZXMgaW5jbHVkZSBJTUFRX1JHQiBhbmQgSU1BUV9IU0wuIA0KKyogQHBhcmFtIG1hc2sgQW4gb3B0aW9uYWwgbWFzayBpbWFnZS4gVGhpcyBpbWFnZSBtdXN0IGJlIGFuIElNQVFfSU1BR0VfVTggaW1hZ2UuIA0KKyogVGhlIGZ1bmN0aW9uIGNhbGN1bGF0ZXMgdGhlIGhpc3RvZ3JhbSB1c2luZyBvbmx5IHRob3NlIHBpeGVscyBpbiB0aGUgaW1hZ2Ugd2hvc2UgDQorKiBjb3JyZXNwb25kaW5nIHBpeGVscyBpbiB0aGUgbWFzayBhcmUgbm9uLXplcm8uIFNldCB0aGlzIHBhcmFtZXRlciB0byBOVUxMIHRvIGNhbGN1bGF0ZSANCisqIHRoZSBoaXN0b2dyYW0gb2YgdGhlIGVudGlyZSBpbWFnZSwgb3IgdXNlIHRoZSBzaW1wbGlmaWVkIGNhbGwuDQorKiANCisqIEByZXR1cm4gT24gc3VjY2VzcywgdGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgcmVwb3J0IGRlc2NyaWJpbmcgdGhlIGNsYXNzaWZpY2F0aW9uICANCisqIG9mIGVhY2ggcGxhbmUgaW4gYSBIaXN0b2dyYW1SZXBvcnQuIA0KKyogV2hlbiB5b3UgYXJlIGZpbmlzaGVkIHdpdGggdGhlIHJlcG9ydCwgZGlzcG9zZSBvZiBpdCBieSBjYWxsaW5nIGZyY0Rpc3Bvc2UoKS4gDQorKiBPbiBmYWlsdXJlLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgTlVMTC4gIA0KKyogVG8gZ2V0IGV4dGVuZGVkIGVycm9yIGluZm9ybWF0aW9uLCBjYWxsIGltYXFHZXRMYXN0RXJyb3IoKS4gDQorKi8NCitDb2xvckhpc3RvZ3JhbVJlcG9ydCogZnJjQ29sb3JIaXN0b2dyYW0oY29uc3QgSW1hZ2UqIGltYWdlLCBpbnQgbnVtQ2xhc3NlcywgQ29sb3JNb2RlIG1vZGUpDQorewkNCisJcmV0dXJuIGZyY0NvbG9ySGlzdG9ncmFtKGltYWdlLCBudW1DbGFzc2VzLCBtb2RlLCBOVUxMKTsNCit9DQorDQorQ29sb3JIaXN0b2dyYW1SZXBvcnQqIGZyY0NvbG9ySGlzdG9ncmFtKGNvbnN0IEltYWdlKiBpbWFnZSwgaW50IG51bUNsYXNzZXMsIENvbG9yTW9kZSBtb2RlLCBJbWFnZSogbWFzaykNCit7DQorCXJldHVybiBpbWFxQ29sb3JIaXN0b2dyYW0yKChJbWFnZSopaW1hZ2UsIG51bUNsYXNzZXMsIG1vZGUsIE5VTEwsIG1hc2spOw0KK30NCisNCisNCisvKioNCisqIEBicmllZiBNZWFzdXJlcyB0aGUgcGl4ZWwgaW50ZW5zaXRpZXMgaW4gYSByZWN0YW5nbGUgb2YgYW4gaW1hZ2UuIA0KKyogT3V0cHV0cyBpbnRlbnNpdHkgYmFzZWQgc3RhdGlzdGljcyBhYm91dCBhbiBpbWFnZSBzdWNoIGFzIE1heCwgTWluLCBNZWFuIGFuZCBTdGQgRGV2IG9mIHBpeGVsIHZhbHVlLiANCisqIFN1cHBvcnRzIElNQVFfSU1BR0VfVTggKGdyYXlzY2FsZSkgSU1BUV9JTUFHRV9SR0IgKGNvbG9yKSBJTUFRX0lNQUdFX0hTTCAoY29sb3ItSFNMKS4NCisqIA0KKyogQHBhcmFtIGltYWdlIFRoZSBpbWFnZSB3aG9zZSBwaXhlbCB2YWx1ZSB0aGUgZnVuY3Rpb24gcXVlcmllcw0KKyogQHBhcmFtIHBpeGVsIFRoZSBjb29yZGluYXRlcyBvZiB0aGUgcGl4ZWwgdGhhdCB0aGUgZnVuY3Rpb24gcXVlcmllcw0KKyogQHBhcmFtIHZhbHVlIE9uIHJldHVybiwgdGhlIHZhbHVlIG9mIHRoZSBzcGVjaWZpZWQgaW1hZ2UgcGl4ZWwuIFRoaXMgcGFyYW1ldGVyIGNhbm5vdCBiZSBOVUxMLg0KKyogVGhpcyBkYXRhIHN0cnVjdHVyZSBjb250YWlucyBlaXRoZXIgZ3JheXNjYWxlLCBSR0IsIEhTTCwgQ29tcGxleCBvciBSR0JVNjRWYWx1ZSBkZXBlbmRpbmcgb24gdGhlIHR5cGUgb2YgaW1hZ2UuDQorKiBAcmV0dXJuIE9uIHN1Y2Nlc3M6IDEuIE9uIGZhaWx1cmU6IDAuIFRvIGdldCBleHRlbmRlZCBlcnJvciBpbmZvcm1hdGlvbiwgY2FsbCBHZXRMYXN0RXJyb3IoKS4NCisqLw0KK2ludCBmcmNHZXRQaXhlbFZhbHVlKGNvbnN0IEltYWdlKiBpbWFnZSwgUG9pbnQgcGl4ZWwsIFBpeGVsVmFsdWUqIHZhbHVlKQ0KK3sJDQorCXJldHVybiBpbWFxR2V0UGl4ZWwoaW1hZ2UsIHBpeGVsLCB2YWx1ZSk7DQorfQ0KKw0KKw0KKy8qICAgUGFydGljbGUgQW5hbHlzaXMgZnVuY3Rpb25zICovDQorDQorLyoqDQorKiBAYnJpZWYgRmlsdGVycyBwYXJ0aWNsZXMgb3V0IG9mIGFuIGltYWdlIGJhc2VkIG9uIHRoZWlyIG1lYXN1cmVtZW50cy4gDQorKiBTdXBwb3J0cyBJTUFRX0lNQUdFX1U4LCBJTUFRX0lNQUdFX0kxNiwgSU1BUV9JTUFHRV9TR0wuDQorKiANCisqIEBwYXJhbSBkZXN0IFRoZSBkZXN0aW5hdGlvbiBpbWFnZS4gSWYgZGVzdCBpcyB1c2VkLCBpdCBtdXN0IGJlIHRoZSBzYW1lIHNpemUgYXMgdGhlIFNvdXJjZSBpbWFnZS4gSXQgd2lsbCBjb250YWluIG9ubHkgdGhlIGZpbHRlcmVkIHBhcnRpY2xlcy4NCisqIEBwYXJhbSBzb3VyY2UgVGhlIGltYWdlIGNvbnRhaW5pbmcgdGhlIHBhcnRpY2xlcyB0byBmaWx0ZXIuIA0KKyogQHBhcmFtIGNyaXRlcmlhIEFuIGFycmF5IG9mIGNyaXRlcmlhIHRvIGFwcGx5IHRvIHRoZSBwYXJ0aWNsZXMgaW4gdGhlIHNvdXJjZSBpbWFnZS4gVGhpcyBhcnJheSBjYW5ub3QgYmUgTlVMTC4NCisqIFNlZSB0aGUgTklWaXNpb25DVkkuY2htIGhlbHAgZmlsZSBmb3IgZGVmaW5pdGlvbnMgb2YgY3JpdGVyaWEuIA0KKyogQHBhcmFtIGNyaXRlcmlhQ291bnQgVGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgY3JpdGVyaWEgYXJyYXkuDQorKiBAcGFyYW0gb3B0aW9ucyBCaW5hcnkgZmlsdGVyIG9wdGlvbnMsIGluY2x1ZGluZyByZWplY3RNYXRjaGVzLCByZWplY3RCb3JkZXIsIGFuZCBjb25uZWN0aXZpdHk4Lg0KKyogQHBhcmFtIHJlY3QgQXJlYSBvZiBpbWFnZSB0byBmaWx0ZXIuIElmIG9taXR0ZWQsIHRoZSBkZWZhdWx0IGlzIGVudGlyZSBpbWFnZS4NCisqIEBwYXJhbSBudW1QYXJ0aWNsZXMgT24gcmV0dXJuLCB0aGUgbnVtYmVyIG9mIHBhcnRpY2xlcyBsZWZ0IGluIHRoZSBpbWFnZQ0KKyogQHJldHVybiBPbiBzdWNjZXNzOiAxLiBPbiBmYWlsdXJlOiAwLiBUbyBnZXQgZXh0ZW5kZWQgZXJyb3IgaW5mb3JtYXRpb24sIGNhbGwgR2V0TGFzdEVycm9yKCkuDQorKi8NCitpbnQgZnJjUGFydGljbGVGaWx0ZXIoSW1hZ2UqIGRlc3QsIEltYWdlKiBzb3VyY2UsIGNvbnN0IFBhcnRpY2xlRmlsdGVyQ3JpdGVyaWEyKiBjcml0ZXJpYSwgDQorCQlpbnQgY3JpdGVyaWFDb3VudCwgY29uc3QgUGFydGljbGVGaWx0ZXJPcHRpb25zKiBvcHRpb25zLCBpbnQqIG51bVBhcnRpY2xlcykNCit7DQorCVJlY3QgcmVjdCA9IElNQVFfTk9fUkVDVDsNCisJcmV0dXJuIGZyY1BhcnRpY2xlRmlsdGVyKGRlc3QsIHNvdXJjZSwgY3JpdGVyaWEsIGNyaXRlcmlhQ291bnQsIG9wdGlvbnMsIHJlY3QsIG51bVBhcnRpY2xlcyk7DQorfQ0KKw0KK2ludCBmcmNQYXJ0aWNsZUZpbHRlcihJbWFnZSogZGVzdCwgSW1hZ2UqIHNvdXJjZSwgY29uc3QgUGFydGljbGVGaWx0ZXJDcml0ZXJpYTIqIGNyaXRlcmlhLCANCisJCWludCBjcml0ZXJpYUNvdW50LCBjb25zdCBQYXJ0aWNsZUZpbHRlck9wdGlvbnMqIG9wdGlvbnMsIFJlY3QgcmVjdCwgaW50KiBudW1QYXJ0aWNsZXMpDQorew0KKwlST0kqIHJvaSA9IGltYXFDcmVhdGVST0koKTsNCisJaW1hcUFkZFJlY3RDb250b3VyKHJvaSwgcmVjdCk7DQorCXJldHVybiBpbWFxUGFydGljbGVGaWx0ZXIzKGRlc3QsIHNvdXJjZSwgY3JpdGVyaWEsIGNyaXRlcmlhQ291bnQsIG9wdGlvbnMsIHJvaSwgbnVtUGFydGljbGVzKTsNCit9DQorDQorDQorLyoqDQorKiBAYnJpZWYgUGVyZm9ybXMgbW9ycGhvbG9naWNhbCB0cmFuc2Zvcm1hdGlvbnMgb24gYmluYXJ5IGltYWdlcy4gDQorKiBTdXBwb3J0cyBJTUFRX0lNQUdFX1U4LiANCisqDQorKiBAcGFyYW0gZGVzdCBUaGUgZGVzdGluYXRpb24gaW1hZ2UuIFRoZSBib3JkZXIgc2l6ZSBvZiB0aGUgZGVzdGluYXRpb24gaW1hZ2UgaXMgbm90IGltcG9ydGFudC4NCisqIEBwYXJhbSBzb3VyY2UgVGhlIGltYWdlIG9uIHdoaWNoIHRoZSBmdW5jdGlvbiBwZXJmb3JtcyB0aGUgbW9ycGhvbG9naWNhbCBvcGVyYXRpb25zLiBUaGUgY2FsY3VsYXRpb24gDQorKiBtb2RpZmllcyB0aGUgYm9yZGVyIG9mIHRoZSBzb3VyY2UgaW1hZ2UuIFRoZSBib3JkZXIgbXVzdCBiZSBhdCBsZWFzdCBoYWxmIGFzIGxhcmdlIGFzIHRoZSBsYXJnZXIgDQorKiBkaW1lbnNpb24gIG9mIHRoZSBzdHJ1Y3R1cmluZyBlbGVtZW50LiAgVGhlIGNvbm5lY3RlZCBzb3VyY2UgaW1hZ2UgZm9yIGEgbW9ycGhvbG9naWNhbCB0cmFuc2Zvcm1hdGlvbiANCisqIG11c3QgaGF2ZSBiZWVuIGNyZWF0ZWQgd2l0aCBhIGJvcmRlciBjYXBhYmxlIG9mIHN1cHBvcnRpbmcgdGhlIHNpemUgb2YgdGhlIHN0cnVjdHVyaW5nIGVsZW1lbnQuIA0KKyogQSAzIGJ5IDMgc3RydWN0dXJpbmcgZWxlbWVudCByZXF1aXJlcyBhIG1pbmltYWwgYm9yZGVyIG9mIDEsIGEgNSBieSA1IHN0cnVjdHVyaW5nIGVsZW1lbnQgcmVxdWlyZXMgYSBtaW5pbWFsIGJvcmRlciBvZiAyLCBhbmQgc28gb24uDQorKiBAcGFyYW0gbWV0aG9kIFRoZSBtb3JwaG9sb2dpY2FsIHRyYW5zZm9ybSB0byBhcHBseS4gDQorKiBAcGFyYW0gc3RydWN0dXJpbmdFbGVtZW50IFRoZSBzdHJ1Y3R1cmluZyBlbGVtZW50IHVzZWQgaW4gdGhlIG9wZXJhdGlvbi4gT21pdCB0aGlzIHBhcmFtZXRlciBpZiB5b3UgZG8gbm90IHdhbnQgYSBjdXN0b20gc3RydWN0dXJpbmcgZWxlbWVudC4gDQorKiBAcmV0dXJuIE9uIHN1Y2Nlc3M6IDEuIE9uIGZhaWx1cmU6IDAuIFRvIGdldCBleHRlbmRlZCBlcnJvciBpbmZvcm1hdGlvbiwgY2FsbCBHZXRMYXN0RXJyb3IoKS4gDQorKi8NCitpbnQgZnJjTW9ycGhvbG9neShJbWFnZSogZGVzdCwgSW1hZ2UqIHNvdXJjZSwgTW9ycGhvbG9neU1ldGhvZCBtZXRob2QpDQorewkNCisJcmV0dXJuIGltYXFNb3JwaG9sb2d5KGRlc3QsIHNvdXJjZSwgbWV0aG9kLCBOVUxMKTsNCit9DQorDQoraW50IGZyY01vcnBob2xvZ3koSW1hZ2UqIGRlc3QsIEltYWdlKiBzb3VyY2UsIE1vcnBob2xvZ3lNZXRob2QgbWV0aG9kLCBjb25zdCBTdHJ1Y3R1cmluZ0VsZW1lbnQqIHN0cnVjdHVyaW5nRWxlbWVudCkNCit7CQ0KKwlyZXR1cm4gaW1hcU1vcnBob2xvZ3koZGVzdCwgc291cmNlLCBtZXRob2QsIHN0cnVjdHVyaW5nRWxlbWVudCk7IA0KK30NCisNCisvKioNCisqIEBicmllZiBFbGltaW5hdGVzIHBhcnRpY2xlcyB0aGF0IHRvdWNoIHRoZSBib3JkZXIgb2YgdGhlIGltYWdlLiANCisqIFN1cHBvcnRzIElNQVFfSU1BR0VfVTguDQorKg0KKyogQHBhcmFtIGRlc3QgVGhlIGRlc3RpbmF0aW9uIGltYWdlLg0KKyogQHBhcmFtIHNvdXJjZSBUaGUgc291cmNlIGltYWdlLiBJZiB0aGUgaW1hZ2UgaGFzIGEgYm9yZGVyLCB0aGUgZnVuY3Rpb24gc2V0cyBhbGwgYm9yZGVyIHBpeGVsIHZhbHVlcyB0byAwLg0KKyogQHBhcmFtIGNvbm5lY3Rpdml0eTggc3BlY2lmaWVzIHRoZSB0eXBlIG9mIGNvbm5lY3Rpdml0eSB1c2VkIGJ5IHRoZSBhbGdvcml0aG0gZm9yIHBhcnRpY2xlIGRldGVjdGlvbi4gDQorKiBUaGUgY29ubmVjdGl2aXR5IG1vZGUgZGlyZWN0bHkgZGV0ZXJtaW5lcyB3aGV0aGVyIGFuIGFkamFjZW50IHBpeGVsIGJlbG9uZ3MgdG8gdGhlIHNhbWUgcGFydGljbGUgb3IgYSANCisqIGRpZmZlcmVudCBwYXJ0aWNsZS4gU2V0IHRvIFRSVUUgdG8gdXNlIGNvbm5lY3Rpdml0eS04IHRvIGRldGVybWluZSB3aGV0aGVyIHBhcnRpY2xlcyBhcmUgdG91Y2hpbmcgDQorKiBTZXQgdG8gRkFMU0UgdG8gdXNlIGNvbm5lY3Rpdml0eS00IHRvIGRldGVybWluZSB3aGV0aGVyIHBhcnRpY2xlcyBhcmUgdG91Y2hpbmcuIA0KKyogVGhlIGRlZmF1bHQgc2V0dGluZyBmb3IgdGhlIHNpbXBsaWZpZWQgY2FsbCBpcyBUUlVFDQorKiBAcmV0dXJuIE9uIHN1Y2Nlc3M6IDEuIE9uIGZhaWx1cmU6IDAuIFRvIGdldCBleHRlbmRlZCBlcnJvciBpbmZvcm1hdGlvbiwgY2FsbCBHZXRMYXN0RXJyb3IoKS4NCisqLw0KK2ludCBmcmNSZWplY3RCb3JkZXIoSW1hZ2UqIGRlc3QsIEltYWdlKiBzb3VyY2UpDQorewlyZXR1cm4gaW1hcVJlamVjdEJvcmRlcihkZXN0LCBzb3VyY2UsIFRSVUUpOyB9DQorDQoraW50IGZyY1JlamVjdEJvcmRlcihJbWFnZSogZGVzdCwgSW1hZ2UqIHNvdXJjZSwgaW50IGNvbm5lY3Rpdml0eTgpDQorewkNCisJcmV0dXJuIGltYXFSZWplY3RCb3JkZXIoZGVzdCwgc291cmNlLCBjb25uZWN0aXZpdHk4KTsNCit9DQorDQorDQorLyoqDQorKiBAYnJpZWYgQ291bnRzIHRoZSBudW1iZXIgb2YgcGFydGljbGVzIGluIGEgYmluYXJ5IGltYWdlLiANCisqIFN1cHBvcnRzIElNQVFfSU1BR0VfVTgsIElNQVFfSU1BR0VfSTE2LCBJTUFRX0lNQUdFX1NHTC4NCisqIEBwYXJhbSBpbWFnZSBiaW5hcnkgKHRocmVzaG9sZGVkKSBpbWFnZSAJDQorKiBAcGFyYW0gbnVtUGFydGljbGVzIE9uIHJldHVybiwgdGhlIG51bWJlciBvZiBwYXJ0aWNsZXMuDQorKiBAcmV0dXJuIE9uIHN1Y2Nlc3M6IDEuIE9uIGZhaWx1cmU6IDAuIFRvIGdldCBleHRlbmRlZCBlcnJvciBpbmZvcm1hdGlvbiwgY2FsbCBHZXRMYXN0RXJyb3IoKS4gICAgDQorKi8NCitpbnQgZnJjQ291bnRQYXJ0aWNsZXMoSW1hZ2UqIGltYWdlLCBpbnQqIG51bVBhcnRpY2xlcykJCQkJDQorewkNCisJcmV0dXJuIGltYXFDb3VudFBhcnRpY2xlcyhpbWFnZSwgMSwgbnVtUGFydGljbGVzKTsNCit9DQorDQorDQorLyoqDQorKiBAYnJpZWYgQ29uZHVjdCBtZWFzdXJlbWVudHMgZm9yIGEgc2luZ2xlIHBhcnRpY2xlIGluIGFuIGltYWdlcy4gDQorKiBTdXBwb3J0cyBJTUFRX0lNQUdFX1U4LCBJTUFRX0lNQUdFX0kxNiwgSU1BUV9JTUFHRV9TR0wuDQorKiANCisqIEBwYXJhbSBpbWFnZSBpbWFnZSB3aXRoIHRoZSBwYXJ0aWNsZSB0byBhbmFseXplLiBUaGlzIGZ1bmN0aW9uIG1vZGlmaWVzIHRoZSBzb3VyY2UgaW1hZ2UuIA0KKyogSWYgeW91IG5lZWQgdGhlIG9yaWdpbmFsIGltYWdlLCBjcmVhdGUgYSBjb3B5IG9mIHRoZSBpbWFnZSB1c2luZyBmcmNDb3B5KCkgYmVmb3JlIHVzaW5nIHRoaXMgZnVuY3Rpb24uDQorKiBAcGFyYW0gcGFydGljbGVOdW1iZXIgVGhlIG51bWJlciBvZiB0aGUgcGFydGljbGUgdG8gZ2V0IGluZm9ybWF0aW9uIG9uDQorKiBAcGFyYW0gcGFyIG9uIHJldHVybiwgYSBwYXJ0aWNsZSBhbmFseXNpcyByZXBvcnQgY29udGFpbmluZyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcGFydGljbGUuIFRoaXMgc3RydWN0dXJlIG11c3QgYmUgY3JlYXRlZCBieSB0aGUgY2FsbGVyLg0KKyogQHJldHVybiBPbiBzdWNjZXNzOiAxLiBPbiBmYWlsdXJlOiAwLiBUbyBnZXQgZXh0ZW5kZWQgZXJyb3IgaW5mb3JtYXRpb24sIGNhbGwgR2V0TGFzdEVycm9yKCkuDQorKi8NCitpbnQgZnJjUGFydGljbGVBbmFseXNpcyhJbWFnZSogaW1hZ2UsIGludCBwYXJ0aWNsZU51bWJlciwgUGFydGljbGVBbmFseXNpc1JlcG9ydCogcGFyKQkJCQkNCit7DQorCWludCBzdWNjZXNzID0gMDsNCisNCisJLyogaW1hZ2UgaW5mb3JtYXRpb24gKi8NCisJaW50IGhlaWdodCwgd2lkdGg7DQorCWlmICggISBpbWFxR2V0SW1hZ2VTaXplKGltYWdlLCAmd2lkdGgsICZoZWlnaHQpICkgCXsgcmV0dXJuIHN1Y2Nlc3M7IH0JDQorCXBhci0+aW1hZ2VXaWR0aCA9IHdpZHRoOwkNCisJcGFyLT5pbWFnZUhlaWdodCA9IGhlaWdodDsJDQorCXBhci0+cGFydGljbGVJbmRleCA9IHBhcnRpY2xlTnVtYmVyOwkJDQorDQorCS8qIGNlbnRlciBvZiBtYXNzIHBvaW50IG9mIHRoZSBsYXJnZXN0IHBhcnRpY2xlCSovDQorCWRvdWJsZSByZXR1cm5Eb3VibGU7DQorCXN1Y2Nlc3MgPSBpbWFxTWVhc3VyZVBhcnRpY2xlKGltYWdlLCBwYXJ0aWNsZU51bWJlciwgMCwgSU1BUV9NVF9DRU5URVJfT0ZfTUFTU19YLCAmcmV0dXJuRG91YmxlKTsNCisJaWYgKCAhc3VjY2VzcyApCXsgcmV0dXJuIHN1Y2Nlc3M7IH0NCisJcGFyLT5jZW50ZXJfbWFzc194ID0gKGludClyZXR1cm5Eb3VibGU7CQkJCQkJLy8gcGl4ZWwJDQorDQorCXN1Y2Nlc3MgPSBpbWFxTWVhc3VyZVBhcnRpY2xlKGltYWdlLCBwYXJ0aWNsZU51bWJlciwgMCwgSU1BUV9NVF9DRU5URVJfT0ZfTUFTU19ZLCAmcmV0dXJuRG91YmxlKTsJDQorCWlmICggIXN1Y2Nlc3MgKQl7IHJldHVybiBzdWNjZXNzOyB9DQorCXBhci0+Y2VudGVyX21hc3NfeSA9IChpbnQpcmV0dXJuRG91YmxlOwkJCQkJCS8vIHBpeGVsCQkNCisJDQorCS8qIHBhcnRpY2xlIHNpemUgc3RhdGlzdGljcyAqLyANCisJc3VjY2VzcyA9IGltYXFNZWFzdXJlUGFydGljbGUoaW1hZ2UsIHBhcnRpY2xlTnVtYmVyLCAwLCBJTUFRX01UX0FSRUEsICZyZXR1cm5Eb3VibGUpOwkNCisJaWYgKCAhc3VjY2VzcyApCXsgcmV0dXJuIHN1Y2Nlc3M7IH0NCisJcGFyLT5wYXJ0aWNsZUFyZWEgPSByZXR1cm5Eb3VibGU7CQ0KKwkNCisJc3VjY2VzcyA9IGltYXFNZWFzdXJlUGFydGljbGUoaW1hZ2UsIHBhcnRpY2xlTnVtYmVyLCAwLCBJTUFRX01UX0JPVU5ESU5HX1JFQ1RfVE9QLCAmcmV0dXJuRG91YmxlKTsJDQorCWlmICggIXN1Y2Nlc3MgKQl7IHJldHVybiBzdWNjZXNzOyB9DQorCXBhci0+Ym91bmRpbmdSZWN0LnRvcCA9IChpbnQpcmV0dXJuRG91YmxlOw0KKwkNCisJc3VjY2VzcyA9IGltYXFNZWFzdXJlUGFydGljbGUoaW1hZ2UsIHBhcnRpY2xlTnVtYmVyLCAwLCBJTUFRX01UX0JPVU5ESU5HX1JFQ1RfTEVGVCwgJnJldHVybkRvdWJsZSk7CQ0KKwlpZiAoICFzdWNjZXNzICkJeyByZXR1cm4gc3VjY2VzczsgfQ0KKwlwYXItPmJvdW5kaW5nUmVjdC5sZWZ0ID0gKGludClyZXR1cm5Eb3VibGU7DQorCQ0KKwlzdWNjZXNzID0gaW1hcU1lYXN1cmVQYXJ0aWNsZShpbWFnZSwgcGFydGljbGVOdW1iZXIsIDAsIElNQVFfTVRfQk9VTkRJTkdfUkVDVF9IRUlHSFQsICZyZXR1cm5Eb3VibGUpOwkNCisJaWYgKCAhc3VjY2VzcyApCXsgcmV0dXJuIHN1Y2Nlc3M7IH0NCisJcGFyLT5ib3VuZGluZ1JlY3QuaGVpZ2h0ID0gKGludClyZXR1cm5Eb3VibGU7CQ0KKw0KKwlzdWNjZXNzID0gaW1hcU1lYXN1cmVQYXJ0aWNsZShpbWFnZSwgcGFydGljbGVOdW1iZXIsIDAsIElNQVFfTVRfQk9VTkRJTkdfUkVDVF9XSURUSCwgJnJldHVybkRvdWJsZSk7CQ0KKwlpZiAoICFzdWNjZXNzICkJeyByZXR1cm4gc3VjY2VzczsgfQ0KKwlwYXItPmJvdW5kaW5nUmVjdC53aWR0aCA9IChpbnQpcmV0dXJuRG91YmxlOwkNCisJDQorCS8qIHBhcnRpY2xlIHF1YWxpdHkgc3RhdGlzdGljcyAqLyANCisJc3VjY2VzcyA9IGltYXFNZWFzdXJlUGFydGljbGUoaW1hZ2UsIHBhcnRpY2xlTnVtYmVyLCAwLCBJTUFRX01UX0FSRUFfQllfSU1BR0VfQVJFQSwgJnJldHVybkRvdWJsZSk7CQ0KKwlpZiAoICFzdWNjZXNzICkJeyByZXR1cm4gc3VjY2VzczsgfQ0KKwlwYXItPnBhcnRpY2xlVG9JbWFnZVBlcmNlbnQgPSByZXR1cm5Eb3VibGU7DQorDQorCXN1Y2Nlc3MgPSBpbWFxTWVhc3VyZVBhcnRpY2xlKGltYWdlLCBwYXJ0aWNsZU51bWJlciwgMCwgSU1BUV9NVF9BUkVBX0JZX1BBUlRJQ0xFX0FORF9IT0xFU19BUkVBLCAmcmV0dXJuRG91YmxlKTsJDQorCWlmICggIXN1Y2Nlc3MgKQl7IHJldHVybiBzdWNjZXNzOyB9DQorCXBhci0+cGFydGljbGVRdWFsaXR5ID0gcmV0dXJuRG91YmxlOw0KKwkJDQorCS8qIG5vcm1hbGl6ZWQgcG9zaXRpb24gKC0xIHRvIDEpICovDQorCXBhci0+Y2VudGVyX21hc3NfeF9ub3JtYWxpemVkID0gUmFuZ2VUb05vcm1hbGl6ZWQocGFyLT5jZW50ZXJfbWFzc194LCB3aWR0aCk7DQorCXBhci0+Y2VudGVyX21hc3NfeV9ub3JtYWxpemVkID0gUmFuZ2VUb05vcm1hbGl6ZWQocGFyLT5jZW50ZXJfbWFzc195LCBoZWlnaHQpOwkNCisJDQorCXJldHVybiBzdWNjZXNzOw0KK30NCisNCisNCisvKiAgIEltYWdlIEVuaGFuY2VtZW50IGZ1bmN0aW9ucyAqLw0KKw0KKy8qKg0KKyogQGJyaWVmIEltcHJvdmVzIGNvbnRyYXN0IG9uIGEgZ3JheXNjYWxlIGltYWdlLiANCisqIFN1cHBvcnRzIElNQVFfSU1BR0VfVTgsIElNQVFfSU1BR0VfSTE2Lg0KKyogQHBhcmFtIGRlc3QgVGhlIGRlc3RpbmF0aW9uIGltYWdlLg0KKyogQHBhcmFtIHNvdXJjZSBUaGUgaW1hZ2UgdG8gZXF1YWxpemUgDQorKiBAcGFyYW0gbWluIHRoZSBzbWFsbGVzdCB2YWx1ZSB1c2VkIGZvciBwcm9jZXNzaW5nLiBBZnRlciBwcm9jZXNzaW5nLCBhbGwgcGl4ZWwgdmFsdWVzIHRoYXQgYXJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgTWluaW11bSBpbiB0aGUgb3JpZ2luYWwgaW1hZ2UgYXJlIHNldCB0byAwIGZvciBhbiA4LWJpdCBpbWFnZS4gSW4gMTYtYml0IGFuZCBmbG9hdGluZy1wb2ludCBpbWFnZXMsIHRoZXNlIHBpeGVsIHZhbHVlcyBhcmUgc2V0IHRvIHRoZSBzbWFsbGVzdCBwaXhlbCB2YWx1ZSBmb3VuZCBpbiB0aGUgb3JpZ2luYWwgaW1hZ2UuIA0KKyogQHBhcmFtIG1heCB0aGUgbGFyZ2VzdCB2YWx1ZSB1c2VkIGZvciBwcm9jZXNzaW5nLiBBZnRlciBwcm9jZXNzaW5nLCBhbGwgcGl4ZWwgdmFsdWVzIHRoYXQgYXJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB0aGUgTWF4aW11bSBpbiB0aGUgb3JpZ2luYWwgaW1hZ2UgYXJlIHNldCB0byAyNTUgZm9yIGFuIDgtYml0IGltYWdlLiBJbiAxNi1iaXQgYW5kIGZsb2F0aW5nLXBvaW50IGltYWdlcywgdGhlc2UgcGl4ZWwgdmFsdWVzIGFyZSBzZXQgdG8gdGhlIGxhcmdlc3QgcGl4ZWwgdmFsdWUgZm91bmQgaW4gdGhlIG9yaWdpbmFsIGltYWdlLiANCisqIEBwYXJhbSBtYXNrIGFuIDgtYml0IGltYWdlIHRoYXQgc3BlY2lmaWVzIHRoZSByZWdpb24gb2YgdGhlIHNtYWxsIGltYWdlIHRoYXQgd2lsbCBiZSBjb3BpZWQuIE9ubHkgdGhvc2UgcGl4ZWxzIGluIHRoZSBJbWFnZSBTcmMgKFNtYWxsKSBpbWFnZSB0aGF0IGNvcnJlc3BvbmQgdG8gYW4gZXF1aXZhbGVudCBub24temVybyBwaXhlbCBpbiB0aGUgbWFzayBpbWFnZSBhcmUgY29waWVkLiBBbGwgb3RoZXIgcGl4ZWxzIGtlZXAgdGhlaXIgb3JpZ2luYWwgdmFsdWVzLiBUaGUgZW50aXJlIGltYWdlIGlzIHByb2Nlc3NlZCBpZiBJbWFnZSBNYXNrIGlzIE5VTEwgb3IgdGhpcyBwYXJhbWV0ZXIgaXMgb21pdHRlZC4NCisqIEByZXR1cm4gT24gc3VjY2VzczogMS4gT24gZmFpbHVyZTogMC4gVG8gZ2V0IGV4dGVuZGVkIGVycm9yIGluZm9ybWF0aW9uLCBjYWxsIEdldExhc3RFcnJvcigpLg0KKyoNCisqICBvcHRpb24gZGVmYXVsdHM6DQorKiAgICAgICBzZWFyY2hSZWN0ID0gSU1BUV9OT19SRUNUDQorKiAJCW1pbk1hdGNoU2NvcmUgPSBERUZBVUxUX01JTk1BWF9TQ09SRSAoODAwKSAgDQorKi8NCitpbnQgZnJjRXF1YWxpemUoSW1hZ2UqIGRlc3QsIGNvbnN0IEltYWdlKiBzb3VyY2UsIGZsb2F0IG1pbiwgZmxvYXQgbWF4KQ0KK3sJcmV0dXJuIGZyY0VxdWFsaXplKGRlc3QsIHNvdXJjZSwgbWluLCBtYXgsIE5VTEwpOyAgfQ0KKw0KK2ludCBmcmNFcXVhbGl6ZShJbWFnZSogZGVzdCwgY29uc3QgSW1hZ2UqIHNvdXJjZSwgZmxvYXQgbWluLCBmbG9hdCBtYXgsIGNvbnN0IEltYWdlKiBtYXNrKQ0KK3sNCisJcmV0dXJuIGltYXFFcXVhbGl6ZShkZXN0LCBzb3VyY2UsIG1pbiwgbWF4LCBtYXNrKTsNCit9DQorDQorLyoqDQorKiBAYnJpZWYgSW1wcm92ZXMgY29udHJhc3Qgb24gYSBjb2xvciBpbWFnZS4gDQorKiBTdXBwb3J0cyBJTUFRX0lNQUdFX1JHQiwgSU1BUV9JTUFHRV9IU0wNCisqIA0KKyogb3B0aW9uIGRlZmF1bHRzOiBjb2xvckVxdWFsaXphdGlvbiA9IFRSVUUgdG8gZXF1YWxpemUgYWxsIHRocmVlIHBsYW5lcyBvZiB0aGUgaW1hZ2UgICAgICAgICANCisqIEByZXR1cm4gT24gc3VjY2VzczogMS4gT24gZmFpbHVyZTogMC4gVG8gZ2V0IGV4dGVuZGVkIGVycm9yIGluZm9ybWF0aW9uLCBjYWxsIEdldExhc3RFcnJvcigpLiAgICANCisqIEBwYXJhbSBkZXN0IFRoZSBkZXN0aW5hdGlvbiBpbWFnZS4NCisqIEBwYXJhbSBzb3VyY2UgVGhlIGltYWdlIHRvIGVxdWFsaXplIA0KKyogQHBhcmFtIGNvbG9yRXF1YWxpemF0aW9uIFNldCB0aGlzIHBhcmFtZXRlciB0byBUUlVFIHRvIGVxdWFsaXplIGFsbCB0aHJlZSBwbGFuZXMgb2YgdGhlIGltYWdlICh0aGUgZGVmYXVsdCkuIFNldCB0aGlzIHBhcmFtZXRlciB0byBGQUxTRSB0byBlcXVhbGl6ZSBvbmx5IHRoZSBsdW1pbmFuY2UgcGxhbmUuDQorKi8NCitpbnQgZnJjQ29sb3JFcXVhbGl6ZShJbWFnZSogZGVzdCwgY29uc3QgSW1hZ2UqIHNvdXJjZSkNCit7DQorCXJldHVybiBpbWFxQ29sb3JFcXVhbGl6ZShkZXN0LCBzb3VyY2UsIFRSVUUpOw0KK30NCisNCitpbnQgZnJjQ29sb3JFcXVhbGl6ZShJbWFnZSogZGVzdCwgY29uc3QgSW1hZ2UqIHNvdXJjZSwgaW50IGNvbG9yRXF1YWxpemF0aW9uKQ0KK3sNCisJcmV0dXJuIGltYXFDb2xvckVxdWFsaXplKGRlc3QsIHNvdXJjZSwgVFJVRSk7DQorfQ0KKw0KKy8qICAgSW1hZ2UgQ29udmVyc2lvbiBmdW5jdGlvbnMgKi8NCisNCisvKioNCisqIEBicmllZiBBdXRvbWF0aWNhbGx5IHRocmVzaG9sZHMgYSBncmF5c2NhbGUgaW1hZ2UgaW50byBhIGJpbmFyeSBpbWFnZSBmb3IgUGFydGljbGUgQW5hbHlzaXMgYmFzZWQgb24gYSBzbWFydCB0aHJlc2hvbGQuIA0KKyogU3VwcG9ydHMgSU1BUV9JTUFHRV9SR0IsIElNQVFfSU1BR0VfSTE2DQorKiBAcGFyYW0gZGVzdCBUaGUgZGVzdGluYXRpb24gaW1hZ2UuDQorKiBAcGFyYW0gc291cmNlIFRoZSBpbWFnZSB0byB0aHJlc2hvbGQgDQorKiBAcGFyYW0gd2luZG93V2lkdGggVGhlIHdpZHRoIG9mIHRoZSByZWN0YW5ndWxhciB3aW5kb3cgYXJvdW5kIHRoZSBwaXhlbCBvbiB3aGljaCB0aGUgZnVuY3Rpb24NCisqICBwZXJmb3JtcyB0aGUgbG9jYWwgdGhyZXNob2xkLiBUaGlzIG51bWJlciBtdXN0IGJlIGF0IGxlYXN0IDMgYW5kIGNhbm5vdCBiZSBsYXJnZXIgdGhhbiB0aGUgd2lkdGggb2Ygc291cmNlDQorKiBAcGFyYW0gd2luZG93SGVpZ2h0IFRoZSBoZWlnaHQgb2YgdGhlIHJlY3Rhbmd1bGFyIHdpbmRvdyBhcm91bmQgdGhlIHBpeGVsIG9uIHdoaWNoIHRoZSBmdW5jdGlvbiANCisqIHBlcmZvcm1zIHRoZSBsb2NhbCB0aHJlc2hvbGQuIFRoaXMgbnVtYmVyIG11c3QgYmUgYXQgbGVhc3QgMyBhbmQgY2Fubm90IGJlIGxhcmdlciB0aGFuIHRoZSBoZWlnaHQgb2Ygc291cmNlDQorKiBAcGFyYW0gbWV0aG9kIFNwZWNpZmllcyB0aGUgbG9jYWwgdGhyZXNob2xkaW5nIG1ldGhvZCB0aGUgZnVuY3Rpb24gdXNlcy4gVmFsdWUgY2FuIGJlIElNQVFfTklCTEFDSyANCisqICh3aGljaCBjb21wdXRlcyB0aHJlc2hvbGRzIGZvciBlYWNoIHBpeGVsIGJhc2VkIG9uIGl0cyBsb2NhbCBzdGF0aXN0aWNzIHVzaW5nIHRoZSBOaWJsYWNrIGxvY2FsIHRocmVzaG9sZGluZw0KKyogYWxnb3JpdGhtLiksIG9yIElNQVFfQkFDS0dST1VORF9DT1JSRUNUSU9OICh3aGljaCBkb2VzIGJhY2tncm91bmQgY29ycmVjdGlvbiBmaXJzdCB0byBlbGltaW5hdGUgbm9uLXVuaWZvcm0gDQorKiBsaWdodGluZyBlZmZlY3RzLCB0aGVuIHBlcmZvcm1zIHRocmVzaG9sZGluZyB1c2luZyB0aGUgT3RzdSB0aHJlc2hvbGRpbmcgYWxnb3JpdGhtKQ0KKyogQHBhcmFtIGRldmlhdGlvbldlaWdodCBTcGVjaWZpZXMgdGhlIGsgY29uc3RhbnQgdXNlZCBpbiB0aGUgTmlibGFjayBsb2NhbCB0aHJlc2hvbGRpbmcgYWxnb3JpdGhtLCB3aGljaCANCisqIGRldGVybWluZXMgdGhlIHdlaWdodCBhcHBsaWVkIHRvIHRoZSB2YXJpYW5jZSBjYWxjdWxhdGlvbi4gVmFsaWQgayBjb25zdGFudHMgcmFuZ2UgZnJvbSAwIHRvIDEuIFNldHRpbmcgDQorKiB0aGlzIHZhbHVlIHRvIDAgd2lsbCBpbmNyZWFzZSB0aGUgcGVyZm9ybWFuY2Ugb2YgdGhlIGZ1bmN0aW9uIGJlY2F1c2UgdGhlIGZ1bmN0aW9uIHdpbGwgbm90IGNhbGN1bGF0ZSB0aGUgDQorKiB2YXJpYW5jZSBmb3IgYW55IG9mIHRoZSBwaXhlbHMuIFRoZSBmdW5jdGlvbiBpZ25vcmVzIHRoaXMgdmFsdWUgaWYgbWV0aG9kIGlzIG5vdCBzZXQgdG8gSU1BUV9OSUJMQUNLDQorKiBAcGFyYW0gdHlwZSBTcGVjaWZpZXMgdGhlIHR5cGUgb2Ygb2JqZWN0cyBmb3Igd2hpY2ggeW91IHdhbnQgdG8gbG9vay4gVmFsdWVzIGNhbiBiZSBJTUFRX0JSSUdIVF9PQkpFQ1RTIA0KKyogb3IgSU1BUV9EQVJLX09CSkVDVFMuDQorKiBAcGFyYW0gcmVwbGFjZVZhbHVlIFNwZWNpZmllcyB0aGUgcmVwbGFjZW1lbnQgdmFsdWUgdGhlIGZ1bmN0aW9uIHVzZXMgZm9yIHRoZSBwaXhlbHMgb2YgdGhlIGtlcHQgb2JqZWN0cyANCisqIGluIHRoZSBkZXN0aW5hdGlvbiBpbWFnZS4NCisqIEByZXR1cm4gT24gc3VjY2VzczogMS4gT24gZmFpbHVyZTogMC4gVG8gZ2V0IGV4dGVuZGVkIGVycm9yIGluZm9ybWF0aW9uLCBjYWxsIEdldExhc3RFcnJvcigpLg0KKyovDQoraW50IGZyY1NtYXJ0VGhyZXNob2xkKEltYWdlKiBkZXN0LCBjb25zdCBJbWFnZSogc291cmNlLCANCisJCXVuc2lnbmVkIGludCB3aW5kb3dXaWR0aCwgdW5zaWduZWQgaW50IHdpbmRvd0hlaWdodCwgTG9jYWxUaHJlc2hvbGRNZXRob2QgbWV0aG9kLCANCisJCWRvdWJsZSBkZXZpYXRpb25XZWlnaHQsIE9iamVjdFR5cGUgdHlwZSkNCit7DQorCWZsb2F0IHJlcGxhY2VWYWx1ZSA9IDEuMDsNCisJcmV0dXJuIGltYXFMb2NhbFRocmVzaG9sZChkZXN0LCBzb3VyY2UsIHdpbmRvd1dpZHRoLCB3aW5kb3dIZWlnaHQsIG1ldGhvZCwgDQorCQkJZGV2aWF0aW9uV2VpZ2h0LCB0eXBlLCByZXBsYWNlVmFsdWUpOw0KK30NCisNCitpbnQgZnJjU21hcnRUaHJlc2hvbGQoSW1hZ2UqIGRlc3QsIGNvbnN0IEltYWdlKiBzb3VyY2UsIA0KKwkJdW5zaWduZWQgaW50IHdpbmRvd1dpZHRoLCB1bnNpZ25lZCBpbnQgd2luZG93SGVpZ2h0LCBMb2NhbFRocmVzaG9sZE1ldGhvZCBtZXRob2QsIA0KKwkJZG91YmxlIGRldmlhdGlvbldlaWdodCwgT2JqZWN0VHlwZSB0eXBlLCBmbG9hdCByZXBsYWNlVmFsdWUpDQorew0KKwlyZXR1cm4gaW1hcUxvY2FsVGhyZXNob2xkKGRlc3QsIHNvdXJjZSwgd2luZG93V2lkdGgsIHdpbmRvd0hlaWdodCwgbWV0aG9kLCANCisJCQlkZXZpYXRpb25XZWlnaHQsIHR5cGUsIHJlcGxhY2VWYWx1ZSk7DQorfQ0KKw0KKy8qKg0KKyogQGJyaWVmIENvbnZlcnRzIGEgZ3JheXNjYWxlIGltYWdlIHRvIGEgYmluYXJ5IGltYWdlIGZvciBQYXJ0aWNsZSBBbmFseXNpcyBiYXNlZCBvbiBhIGZpeGVkIHRocmVzaG9sZC4gDQorKiBUaGUgZnVuY3Rpb24gc2V0cyBwaXhlbHMgdmFsdWVzIG91dHNpZGUgb2YgdGhlIGdpdmVuIHJhbmdlIHRvIDAuIFRoZSBmdW5jdGlvbiBzZXRzIHBpeGVsIHZhbHVlcyANCisqIHdpdGhpbiB0aGUgcmFuZ2UgdG8gYSBnaXZlbiB2YWx1ZSBvciBsZWF2ZXMgdGhlIHZhbHVlcyB1bmNoYW5nZWQuIA0KKyogVXNlIHRoZSBzaW1wbGlmaWVkIGNhbGwgdG8gbGVhdmUgcGl4ZWwgdmFsdWVzIHVuY2hhbmdlZC4NCisqIFN1cHBvcnRzIElNQVFfSU1BR0VfUkdCLCBJTUFRX0lNQUdFX0kxNi4NCisqIA0KKyogQHBhcmFtIGRlc3QgVGhlIGRlc3RpbmF0aW9uIGltYWdlLg0KKyogQHBhcmFtIHNvdXJjZSBUaGUgaW1hZ2UgdG8gdGhyZXNob2xkIA0KKyogQHBhcmFtIHJhbmdlTWluIFRoZSBsb3dlciBib3VuZGFyeSBvZiB0aGUgcmFuZ2Ugb2YgcGl4ZWwgdmFsdWVzIHRvIGtlZXANCisqIEBwYXJhbSByYW5nZU1heCBUaGUgdXBwZXIgYm91bmRhcnkgb2YgdGhlIHJhbmdlIG9mIHBpeGVsIHZhbHVlcyB0byBrZWVwLg0KKyogDQorKiBAcmV0dXJuIGludCAtIGVycm9yIGNvZGU6IDAgPSBlcnJvci4gVG8gZ2V0IGV4dGVuZGVkIGVycm9yIGluZm9ybWF0aW9uLCBjYWxsIEdldExhc3RFcnJvcigpLg0KKyovDQoraW50IGZyY1NpbXBsZVRocmVzaG9sZChJbWFnZSogZGVzdCwgY29uc3QgSW1hZ2UqIHNvdXJjZSwgZmxvYXQgcmFuZ2VNaW4sIGZsb2F0IHJhbmdlTWF4KQ0KK3sNCisJaW50IG5ld1ZhbHVlID0gMjU1Ow0KKwlyZXR1cm4gZnJjU2ltcGxlVGhyZXNob2xkKGRlc3QsIHNvdXJjZSwgcmFuZ2VNaW4sIHJhbmdlTWF4LCBuZXdWYWx1ZSk7DQorfQ0KKw0KKy8qKg0KKyogQGJyaWVmIENvbnZlcnRzIGEgZ3JheXNjYWxlIGltYWdlIHRvIGEgYmluYXJ5IGltYWdlIGZvciBQYXJ0aWNsZSBBbmFseXNpcyBiYXNlZCBvbiBhIGZpeGVkIHRocmVzaG9sZC4gDQorKiBUaGUgZnVuY3Rpb24gc2V0cyBwaXhlbHMgdmFsdWVzIG91dHNpZGUgb2YgdGhlIGdpdmVuIHJhbmdlIHRvIDAuIFRoZSBmdW5jdGlvbiBzZXRzIA0KKyogcGl4ZWwgdmFsdWVzIHdpdGhpbiB0aGUgcmFuZ2UgdG8gdGhlIGdpdmVuIHZhbHVlLiANCisqIFN1cHBvcnRzIElNQVFfSU1BR0VfUkdCLCBJTUFRX0lNQUdFX0kxNi4NCisqIA0KKyogQHBhcmFtIGRlc3QgVGhlIGRlc3RpbmF0aW9uIGltYWdlLg0KKyogQHBhcmFtIHNvdXJjZSBUaGUgaW1hZ2UgdG8gdGhyZXNob2xkIA0KKyogQHBhcmFtIHJhbmdlTWluIFRoZSBsb3dlciBib3VuZGFyeSBvZiB0aGUgcmFuZ2Ugb2YgcGl4ZWwgdmFsdWVzIHRvIGtlZXANCisqIEBwYXJhbSByYW5nZU1heCBUaGUgdXBwZXIgYm91bmRhcnkgb2YgdGhlIHJhbmdlIG9mIHBpeGVsIHZhbHVlcyB0byBrZWVwLg0KKyogQHBhcmFtIG5ld1ZhbHVlIFRoZSByZXBsYWNlbWVudCB2YWx1ZSBmb3IgcGl4ZWxzIHdpdGhpbiB0aGUgcmFuZ2UuIFVzZSB0aGUgc2ltcGxpZmllZCBjYWxsIHRvIGxlYXZlIHRoZSBwaXhlbCB2YWx1ZXMgdW5jaGFuZ2VkIA0KKyogDQorKiBAcmV0dXJuIGludCAtIGVycm9yIGNvZGU6IDAgPSBlcnJvci4gVG8gZ2V0IGV4dGVuZGVkIGVycm9yIGluZm9ybWF0aW9uLCBjYWxsIEdldExhc3RFcnJvcigpLg0KKyovDQoraW50IGZyY1NpbXBsZVRocmVzaG9sZChJbWFnZSogZGVzdCwgY29uc3QgSW1hZ2UqIHNvdXJjZSwgZmxvYXQgcmFuZ2VNaW4sIGZsb2F0IHJhbmdlTWF4LCBmbG9hdCBuZXdWYWx1ZSkNCit7DQorCWludCB1c2VOZXdWYWx1ZSA9IFRSVUU7DQorCXJldHVybiBpbWFxVGhyZXNob2xkKGRlc3QsIHNvdXJjZSwgcmFuZ2VNaW4sIHJhbmdlTWF4LCB1c2VOZXdWYWx1ZSwgbmV3VmFsdWUpOw0KK30NCisNCisvKioNCisqIEBicmllZiBBcHBsaWVzIGEgdGhyZXNob2xkIHRvIHRoZSBSZWQsIEdyZWVuLCBhbmQgQmx1ZSB2YWx1ZXMgb2YgYSBSR0IgaW1hZ2Ugb3IgdGhlIEh1ZSwgDQorKiBTYXR1cmF0aW9uLCBMdW1pbmFuY2UgdmFsdWVzIGZvciBhIEhTTCBpbWFnZS4gDQorKiBTdXBwb3J0cyBJTUFRX0lNQUdFX1JHQiwgSU1BUV9JTUFHRV9IU0wuDQorKiBUaGlzIHNpbXBsZXIgdmVyc2lvbiBmaWx0ZXJzIGJhc2VkIG9uIGEgaHVlIHJhbmdlIGluIHRoZSBIU0wgbW9kZS4NCisqIA0KKyogQHBhcmFtIGRlc3QgVGhlIGRlc3RpbmF0aW9uIGltYWdlLiBUaGlzIG11c3QgYmUgYSBJTUFRX0lNQUdFX1U4IGltYWdlLg0KKyogQHBhcmFtIHNvdXJjZSBUaGUgaW1hZ2UgdG8gdGhyZXNob2xkIA0KKyogQHBhcmFtIG1vZGUgVGhlIGNvbG9yIHNwYWNlIHRvIHBlcmZvcm0gdGhlIHRocmVzaG9sZCBpbi4gdmFsaWQgdmFsdWVzIGFyZTogSU1BUV9SR0IsIElNQVFfSFNMLg0KKyogQHBhcmFtIHBsYW5lMVJhbmdlIFRoZSBzZWxlY3Rpb24gcmFuZ2UgZm9yIHRoZSBmaXJzdCBwbGFuZSBvZiB0aGUgaW1hZ2UuIFNldCB0aGlzIHBhcmFtZXRlciB0byBOVUxMIHRvIHVzZSBhIHNlbGVjdGlvbiByYW5nZSBmcm9tIDAgdG8gMjU1Lg0KKyogQHBhcmFtIHBsYW5lMlJhbmdlIFRoZSBzZWxlY3Rpb24gcmFuZ2UgZm9yIHRoZSBzZWNvbmQgcGxhbmUgb2YgdGhlIGltYWdlLiBTZXQgdGhpcyBwYXJhbWV0ZXIgdG8gTlVMTCB0byB1c2UgYSBzZWxlY3Rpb24gcmFuZ2UgZnJvbSAwIHRvIDI1NS4NCisqIEBwYXJhbSBwbGFuZTNSYW5nZSBUaGUgc2VsZWN0aW9uIHJhbmdlIGZvciB0aGUgdGhpcmQgcGxhbmUgb2YgdGhlIGltYWdlLiBTZXQgdGhpcyBwYXJhbWV0ZXIgdG8gTlVMTCB0byB1c2UgYSBzZWxlY3Rpb24gcmFuZ2UgZnJvbSAwIHRvIDI1NS4NCisqIA0KKyogQHJldHVybiBPbiBzdWNjZXNzOiAxLiBPbiBmYWlsdXJlOiAwLiBUbyBnZXQgZXh0ZW5kZWQgZXJyb3IgaW5mb3JtYXRpb24sIGNhbGwgR2V0TGFzdEVycm9yKCkuDQorKiAqLw0KK2ludCBmcmNDb2xvclRocmVzaG9sZChJbWFnZSogZGVzdCwgY29uc3QgSW1hZ2UqIHNvdXJjZSwgQ29sb3JNb2RlIG1vZGUsIA0KKwkJY29uc3QgUmFuZ2UqIHBsYW5lMVJhbmdlLCBjb25zdCBSYW5nZSogcGxhbmUyUmFuZ2UsIGNvbnN0IFJhbmdlKiBwbGFuZTNSYW5nZSkNCit7DQorCWludCByZXBsYWNlVmFsdWUgPSAxOw0KKwlyZXR1cm4gaW1hcUNvbG9yVGhyZXNob2xkKGRlc3QsIHNvdXJjZSwgcmVwbGFjZVZhbHVlLCBtb2RlLCBwbGFuZTFSYW5nZSwgcGxhbmUyUmFuZ2UsIHBsYW5lM1JhbmdlKTsNCit9DQorDQorLyoqDQorKiBAYnJpZWYgQXBwbGllcyBhIHRocmVzaG9sZCB0byB0aGUgUmVkLCBHcmVlbiwgYW5kIEJsdWUgdmFsdWVzIG9mIGEgUkdCIGltYWdlIG9yIHRoZSBIdWUsIA0KKyogU2F0dXJhdGlvbiwgTHVtaW5hbmNlIHZhbHVlcyBmb3IgYSBIU0wgaW1hZ2UuIA0KKyogU3VwcG9ydHMgSU1BUV9JTUFHRV9SR0IsIElNQVFfSU1BR0VfSFNMLg0KKyogVGhlIHNpbXBsZXIgdmVyc2lvbiBmaWx0ZXJzIGJhc2VkIG9uIGEgaHVlIHJhbmdlIGluIHRoZSBIU0wgbW9kZS4NCisqIA0KKyogQHBhcmFtIGRlc3QgVGhlIGRlc3RpbmF0aW9uIGltYWdlLiBUaGlzIG11c3QgYmUgYSBJTUFRX0lNQUdFX1U4IGltYWdlLg0KKyogQHBhcmFtIHNvdXJjZSBUaGUgaW1hZ2UgdG8gdGhyZXNob2xkIA0KKyogQHBhcmFtIHJlcGxhY2VWYWx1ZSBWYWx1ZSB0byBhc3NpZ24gdG8gc2VsZWN0ZWQgcGl4ZWxzLiBEZWZhdWx0cyB0byAxIGlmIHNpbXBsaWZpZWQgY2FsbCBpcyB1c2VkLg0KKyogQHBhcmFtIG1vZGUgVGhlIGNvbG9yIHNwYWNlIHRvIHBlcmZvcm0gdGhlIHRocmVzaG9sZCBpbi4gdmFsaWQgdmFsdWVzIGFyZTogSU1BUV9SR0IsIElNQVFfSFNMLg0KKyogQHBhcmFtIHBsYW5lMVJhbmdlIFRoZSBzZWxlY3Rpb24gcmFuZ2UgZm9yIHRoZSBmaXJzdCBwbGFuZSBvZiB0aGUgaW1hZ2UuIFNldCB0aGlzIHBhcmFtZXRlciB0byBOVUxMIHRvIHVzZSBhIHNlbGVjdGlvbiByYW5nZSBmcm9tIDAgdG8gMjU1Lg0KKyogQHBhcmFtIHBsYW5lMlJhbmdlIFRoZSBzZWxlY3Rpb24gcmFuZ2UgZm9yIHRoZSBzZWNvbmQgcGxhbmUgb2YgdGhlIGltYWdlLiBTZXQgdGhpcyBwYXJhbWV0ZXIgdG8gTlVMTCB0byB1c2UgYSBzZWxlY3Rpb24gcmFuZ2UgZnJvbSAwIHRvIDI1NS4NCisqIEBwYXJhbSBwbGFuZTNSYW5nZSBUaGUgc2VsZWN0aW9uIHJhbmdlIGZvciB0aGUgdGhpcmQgcGxhbmUgb2YgdGhlIGltYWdlLiBTZXQgdGhpcyBwYXJhbWV0ZXIgdG8gTlVMTCB0byB1c2UgYSBzZWxlY3Rpb24gcmFuZ2UgZnJvbSAwIHRvIDI1NS4NCisqIA0KKyogQHJldHVybiBPbiBzdWNjZXNzOiAxLiBPbiBmYWlsdXJlOiAwLiBUbyBnZXQgZXh0ZW5kZWQgZXJyb3IgaW5mb3JtYXRpb24sIGNhbGwgR2V0TGFzdEVycm9yKCkuDQorKi8NCitpbnQgZnJjQ29sb3JUaHJlc2hvbGQoSW1hZ2UqIGRlc3QsIGNvbnN0IEltYWdlKiBzb3VyY2UsIGludCByZXBsYWNlVmFsdWUsIENvbG9yTW9kZSBtb2RlLCANCisJCWNvbnN0IFJhbmdlKiBwbGFuZTFSYW5nZSwgY29uc3QgUmFuZ2UqIHBsYW5lMlJhbmdlLCBjb25zdCBSYW5nZSogcGxhbmUzUmFuZ2UpDQorewlyZXR1cm4gaW1hcUNvbG9yVGhyZXNob2xkKGRlc3QsIHNvdXJjZSwgcmVwbGFjZVZhbHVlLCBtb2RlLCBwbGFuZTFSYW5nZSwgcGxhbmUyUmFuZ2UsIHBsYW5lM1JhbmdlKTt9DQorDQorDQorLyoqDQorKiBAYnJpZWYgQSBzaW1wbGVyIHZlcnNpb24gb2YgQ29sb3JUaHJlc2hvbGQgdGhhdCB0aHJlc2hvbGRzIGh1ZSByYW5nZSBpbiB0aGUgSFNMIG1vZGUuIFN1cHBvcnRzIElNQVFfSU1BR0VfUkdCLCBJTUFRX0lNQUdFX0hTTC4NCisqIEBwYXJhbSBkZXN0IFRoZSBkZXN0aW5hdGlvbiBpbWFnZS4NCisqIEBwYXJhbSBzb3VyY2UgVGhlIGltYWdlIHRvIHRocmVzaG9sZCANCisqIEBwYXJhbSBodWVSYW5nZSBUaGUgc2VsZWN0aW9uIHJhbmdlIGZvciB0aGUgaHVlIChjb2xvcikuIA0KKyogQHBhcmFtIG1pblNhdHVyYXRpb24gVGhlIG1pbmltdW0gc2F0dXJhdGlvbiB2YWx1ZSAoMS0yNTUpLiAgSWYgbm90IHVzZWQsIERFRkFVTFRfU0FUVVJBVElPTl9USFJFU0hPTEQgaXMgdGhlIGRlZmF1bHQuDQorKiANCisqIEByZXR1cm4gT24gc3VjY2VzczogMS4gT24gZmFpbHVyZTogMC4gVG8gZ2V0IGV4dGVuZGVkIGVycm9yIGluZm9ybWF0aW9uLCBjYWxsIEdldExhc3RFcnJvcigpLg0KKyovDQoraW50IGZyY0h1ZVRocmVzaG9sZChJbWFnZSogZGVzdCwgY29uc3QgSW1hZ2UqIHNvdXJjZSwgY29uc3QgUmFuZ2UqIGh1ZVJhbmdlKQ0KK3sgcmV0dXJuIGZyY0h1ZVRocmVzaG9sZChkZXN0LCBzb3VyY2UsIGh1ZVJhbmdlLCBERUZBVUxUX1NBVFVSQVRJT05fVEhSRVNIT0xEKTsgfQ0KKw0KK2ludCBmcmNIdWVUaHJlc2hvbGQoSW1hZ2UqIGRlc3QsIGNvbnN0IEltYWdlKiBzb3VyY2UsIGNvbnN0IFJhbmdlKiBodWVSYW5nZSwgaW50IG1pblNhdHVyYXRpb24pDQorew0KKwkvLyBhc3N1bWUgSFNMIG1vZGUNCisJQ29sb3JNb2RlIG1vZGUgPSBJTUFRX0hTTDsgIA0KKwkvLyBTZXQgc2F0dXJhdGlvbiAxMDAgLSAyNTUNCisJUmFuZ2Ugc2F0UmFuZ2U7ICBzYXRSYW5nZS5taW5WYWx1ZSA9IG1pblNhdHVyYXRpb247IHNhdFJhbmdlLm1heFZhbHVlID0gMjU1Ow0KKwkvLyBTZXQgbHVtaW5hbmNlIDEwMCAtIDI1NQ0KKwlSYW5nZSBsdW1SYW5nZTsgIGx1bVJhbmdlLm1pblZhbHVlID0gMTAwOyBsdW1SYW5nZS5tYXhWYWx1ZSA9IDI1NTsNCisJLy8gUmVwbGFjZSBwaXhlbHMgd2l0aCAxIGlmIHBhc3MgdGhyZXNob2xkIGZpbHRlcg0KKwlpbnQgcmVwbGFjZVZhbHVlID0gMTsNCisJcmV0dXJuIGltYXFDb2xvclRocmVzaG9sZChkZXN0LCBzb3VyY2UsIHJlcGxhY2VWYWx1ZSwgbW9kZSwgaHVlUmFuZ2UsICZzYXRSYW5nZSwgJmx1bVJhbmdlKTsNCit9DQorDQorLyoqDQorKiBAYnJpZWYgRXh0cmFjdHMgdGhlIFJlZCwgR3JlZW4sIEJsdWUsIG9yIEh1ZSwgU2F0dXJhdGlvbiBvciBMdW1pbmFuY2UgaW5mb3JtYXRpb24gZnJvbSBhIGNvbG9yIGltYWdlLiANCisqIFN1cHBvcnRzIElNQVFfSU1BR0VfUkdCLCBJTUFRX0lNQUdFX0hTTCwgSU1BUV9JTUFHRV9SR0JfVTY0Lg0KKyogDQorKiBAcGFyYW0gaW1hZ2UgVGhlIHNvdXJjZSBpbWFnZSB0aGF0IHRoZSBmdW5jdGlvbiBleHRyYWN0cyB0aGUgcGxhbmVzIGZyb20uDQorKiBAcGFyYW0gbW9kZSBUaGUgY29sb3Igc3BhY2UgdGhhdCB0aGUgZnVuY3Rpb24gZXh0cmFjdHMgdGhlIHBsYW5lcyBmcm9tLiBWYWxpZCB2YWx1ZXMgYXJlIElNQVFfUkdCLCBJTUFRX0hTTCwgSU1BUV9IU1YsIElNQVFfSFNJLg0KKyogQHBhcmFtIHBsYW5lMSBPbiByZXR1cm4sIHRoZSBmaXJzdCBleHRyYWN0ZWQgcGxhbmUuIFNldCB0aGlzIHBhcmFtZXRlciB0byBOVUxMIGlmIHlvdSBkbyBub3QgbmVlZCB0aGlzIGluZm9ybWF0aW9uLiBSR0ItUmVkLCBIU0wvSFNWL0hTSS1IdWUuDQorKiBAcGFyYW0gcGxhbmUyIE9uIHJldHVybiwgdGhlIHNlY29uZCBleHRyYWN0ZWQgcGxhbmUuIFNldCB0aGlzIHBhcmFtZXRlciB0byBOVUxMIGlmIHlvdSBkbyBub3QgbmVlZCB0aGlzIGluZm9ybWF0aW9uLiBSR0ItR3JlZW4sIEhTTC9IU1YvSFNJLVNhdHVyYXRpb24uDQorKiBAcGFyYW0gcGxhbmUzIE9uIHJldHVybiwgdGhlIHRoaXJkIGV4dHJhY3RlZCBwbGFuZS4gU2V0IHRoaXMgcGFyYW1ldGVyIHRvIE5VTEwgaWYgeW91IGRvIG5vdCBuZWVkIHRoaXMgaW5mb3JtYXRpb24uIFJHQi1CbHVlLCBIU0wtTHVtaW5hbmNlLCBIU1YtVmFsdWUsIEhTSS1JbnRlbnNpdHkuDQorKg0KKyogQHJldHVybiBlcnJvciBjb2RlOiAwID0gZXJyb3IuIFRvIGdldCBleHRlbmRlZCBlcnJvciBpbmZvcm1hdGlvbiwgY2FsbCBHZXRMYXN0RXJyb3IoKS4NCisqLw0KK2ludCBmcmNFeHRyYWN0Q29sb3JQbGFuZXMoY29uc3QgSW1hZ2UqIGltYWdlLCBDb2xvck1vZGUgbW9kZSwgDQorCQlJbWFnZSogcGxhbmUxLCBJbWFnZSogcGxhbmUyLCBJbWFnZSogcGxhbmUzKQ0KK3sJcmV0dXJuIGltYXFFeHRyYWN0Q29sb3JQbGFuZXMoaW1hZ2UsIG1vZGUsIHBsYW5lMSwgcGxhbmUyLCBwbGFuZTMpOyB9DQorDQorLyoqDQorKiBAYnJpZWYgRXh0cmFjdHMgdGhlIEh1ZSBpbmZvcm1hdGlvbiBmcm9tIGEgY29sb3IgaW1hZ2UuIFN1cHBvcnRzIElNQVFfSU1BR0VfUkdCLCBJTUFRX0lNQUdFX0hTTCwgSU1BUV9JTUFHRV9SR0JfVTY0IA0KKyogDQorKiBAcGFyYW0gaW1hZ2UgVGhlIHNvdXJjZSBpbWFnZSB0aGF0IHRoZSBmdW5jdGlvbiBleHRyYWN0cyB0aGUgcGxhbmUgZnJvbS4NCisqIEBwYXJhbSBodWVQbGFuZSBPbiByZXR1cm4sIHRoZSBleHRyYWN0ZWQgaHVlIHBsYW5lLiANCisqIEBwYXJhbSBtaW5TYXR1cmF0aW9uIHRoZSBtaW5pbXVtIHNhdHVyYXRpb24gbGV2ZWwgcmVxdWlyZWQgMC0yNTUgKHRyeSA1MCkgIA0KKyogICAgICAgICAgDQorKiBAcmV0dXJuIE9uIHN1Y2Nlc3M6IDEuIE9uIGZhaWx1cmU6IDAuIFRvIGdldCBleHRlbmRlZCBlcnJvciBpbmZvcm1hdGlvbiwgY2FsbCBHZXRMYXN0RXJyb3IoKS4gICAgIA0KKyovDQoraW50IGZyY0V4dHJhY3RIdWVQbGFuZShjb25zdCBJbWFnZSogaW1hZ2UsIEltYWdlKiBodWVQbGFuZSkNCit7DQorCXJldHVybiBmcmNFeHRyYWN0SHVlUGxhbmUoaW1hZ2UsIGh1ZVBsYW5lLCBERUZBVUxUX1NBVFVSQVRJT05fVEhSRVNIT0xEKTsNCit9DQorDQoraW50IGZyY0V4dHJhY3RIdWVQbGFuZShjb25zdCBJbWFnZSogaW1hZ2UsIEltYWdlKiBodWVQbGFuZSwgaW50IG1pblNhdHVyYXRpb24pDQorew0KKwlyZXR1cm4gZnJjRXh0cmFjdENvbG9yUGxhbmVzKGltYWdlLCBJTUFRX0hTTCwgaHVlUGxhbmUsIE5VTEwsIE5VTEwpOw0KK30NCisNCisNCisNCisNCisNCisNCisNCisNCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9WaXNpb24yMDA5L1Zpc2lvbkFQSS5oIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvVmlzaW9uMjAwOS9WaXNpb25BUEkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Yjk2MjhlCi0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvVmlzaW9uMjAwOS9WaXNpb25BUEkuaApAQCAtMCwwICsxLDE2MyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorKiAgUHJvamVjdCAgIAkJOiBGSVJTVCBNb3RvciBDb250cm9sbGVyDQorKiAgRmlsZSBOYW1lICAJCTogVmlzaW9uQVBJLmggICAgICAgICAgDQorKiAgQ29udHJpYnV0b3JzICAgCTogRUxGLCBKREcsIEFSSywgRU1GDQorKiAgQ3JlYXRpb24gRGF0ZSAJOiBKdW5lIDIyLCAyMDA4DQorKiAgUmV2aXNpb24gSGlzdG9yeQk6IFNvdXJjZSBjb2RlICYgcmV2aXNpb24gaGlzdG9yeSBtYWludGFpbmVkIGF0IHNvdXJjZWZvcmdlLldQSS5lZHUgICAgDQorKiAgRmlsZSBEZXNjcmlwdGlvbgk6IEdsb2JhbGx5IGRlZmluZWQgdmFsdWVzIGZvciB0aGUgRklSU1QgVmlzaW9uIEFQSQ0KKyogDQorKiAgQVBJOiBCZWNhdXNlIG5pdmlzaW9uLmggdXNlcyBDKysgc3R5bGUgY29tbWVudHMsIGFueSBmaWxlIGluY2x1ZGluZyB0aGlzDQorKiAgbXVzdCBiZSBhIC5jcHAgKG5vdCAuYykuDQorKi8NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy8qICAgICAgICBDb3B5cmlnaHQgKGMpIEZJUlNUIDIwMDguICBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICovDQorLyogIE9wZW4gU291cmNlIFNvZnR3YXJlIC0gbWF5IGJlIG1vZGlmaWVkIGFuZCBzaGFyZWQgYnkgRlJDIHRlYW1zLiBUaGUgY29kZSAgKi8NCisvKiAgbXVzdCBiZSBhY2NvbXBhbmllZCBieSB0aGUgRklSU1QgQlNEIGxpY2Vuc2UgZmlsZSBpbiAkKFdJTkRfQkFTRSkvV1BJTGliLiAqLw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorI2lmbmRlZiBfX1ZJU0lPTkFQSV9IX18NCisjZGVmaW5lIF9fVklTSU9OQVBJX0hfXw0KKw0KKyNpbmNsdWRlICJuaXZpc2lvbi5oIiANCisNCisvKiAgIENvbnN0YW50cyAqLw0KKw0KKyNkZWZpbmUgREVGQVVMVF9CT1JERVJfU0laRQkJCQkzCQkvL1Zpc2lvbkFQSS5mcmNDcmVhdGVJbWFnZQ0KKyNkZWZpbmUgREVGQVVMVF9TQVRVUkFUSU9OX1RIUkVTSE9MRAk0MAkJLy9UcmFja0FQSS5GaW5kQ29sb3INCisNCisvKiAgIEZvcndhcmQgRGVjbGFyZSBEYXRhIFN0cnVjdHVyZXMgKi8NCit0eXBlZGVmIHN0cnVjdCBGaW5kRWRnZU9wdGlvbnNfc3RydWN0IEZpbmRFZGdlT3B0aW9uczsNCit0eXBlZGVmIHN0cnVjdCBDaXJjdWxhckVkZ2VSZXBvcnRfc3RydWN0IENpcmN1bGFyRWRnZVJlcG9ydDsNCisNCisvKiAgIERhdGEgU3RydWN0dXJlcyAqLw0KKw0KKy8qKiAgZnJjUGFydGljbGVBbmFseXNpcyByZXR1cm5zIHRoaXMgc3RydWN0dXJlICovDQordHlwZWRlZiBzdHJ1Y3QgUGFydGljbGVBbmFseXNpc1JlcG9ydF9zdHJ1Y3Qgew0KKwlpbnQgCWltYWdlSGVpZ2h0Ow0KKwlpbnQgCWltYWdlV2lkdGg7DQorCWRvdWJsZSAJaW1hZ2VUaW1lc3RhbXA7CQkJCQ0KKwlpbnQJCXBhcnRpY2xlSW5kZXg7CQkJCS8vIHRoZSBwYXJ0aWNsZSBpbmRleCBhbmFseXplZA0KKwkvKiBYLWNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHJlcHJlc2VudGluZyB0aGUgYXZlcmFnZSBwb3NpdGlvbiBvZiB0aGUgDQorCSAqIHRvdGFsIHBhcnRpY2xlIG1hc3MsIGFzc3VtaW5nIGV2ZXJ5IHBvaW50IGluIHRoZSBwYXJ0aWNsZSBoYXMgYSBjb25zdGFudCBkZW5zaXR5ICovDQorCWludCAJY2VudGVyX21hc3NfeDsgIAkJCS8vIE1lYXN1cmVtZW50VHlwZTogSU1BUV9NVF9DRU5URVJfT0ZfTUFTU19YIA0KKwkvKiBZLWNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHJlcHJlc2VudGluZyB0aGUgYXZlcmFnZSBwb3NpdGlvbiBvZiB0aGUgDQorCSAqIHRvdGFsIHBhcnRpY2xlIG1hc3MsIGFzc3VtaW5nIGV2ZXJ5IHBvaW50IGluIHRoZSBwYXJ0aWNsZSBoYXMgYSBjb25zdGFudCBkZW5zaXR5ICovDQorCWludCAJY2VudGVyX21hc3NfeTsgIAkJCS8vIE1lYXN1cmVtZW50VHlwZTogSU1BUV9NVF9DRU5URVJfT0ZfTUFTU19ZIA0KKwlkb3VibGUgCWNlbnRlcl9tYXNzX3hfbm9ybWFsaXplZDsgIAkvL0NlbnRlciBvZiBtYXNzIHggdmFsdWUgbm9ybWFsaXplZCB0byAtMS4wIHRvICsxLjAgcmFuZ2UNCisJZG91YmxlIAljZW50ZXJfbWFzc195X25vcm1hbGl6ZWQ7ICAJLy9DZW50ZXIgb2YgbWFzcyB5IHZhbHVlIG5vcm1hbGl6ZWQgdG8gLTEuMCB0byArMS4wIHJhbmdlDQorCS8qIEFyZWEgb2YgdGhlIHBhcnRpY2xlICovDQorCWRvdWJsZSAJcGFydGljbGVBcmVhOwkJCQkvLyBNZWFzdXJlbWVudFR5cGU6IElNQVFfTVRfQVJFQQ0KKwkvKiBCb3VuZGluZyBSZWN0YW5nbGUgKi8NCisJUmVjdCAJYm91bmRpbmdSZWN0OwkJCQkvLyBsZWZ0L3RvcC93aWR0aC9oZWlnaHQNCisJLyogUGVyY2VudGFnZSBvZiB0aGUgcGFydGljbGUgQXJlYSBjb3ZlcmluZyB0aGUgSW1hZ2UgQXJlYS4gKi8NCisJZG91YmxlIAlwYXJ0aWNsZVRvSW1hZ2VQZXJjZW50OwkJLy8gTWVhc3VyZW1lbnRUeXBlOiBJTUFRX01UX0FSRUFfQllfSU1BR0VfQVJFQQ0KKwkvKiBQZXJjZW50YWdlIG9mIHRoZSBwYXJ0aWNsZSBBcmVhIGluIHJlbGF0aW9uIHRvIGl0cyBQYXJ0aWNsZSBhbmQgSG9sZXMgQXJlYSAqLw0KKwlkb3VibGUgCXBhcnRpY2xlUXVhbGl0eTsJCQkvLyBNZWFzdXJlbWVudFR5cGU6IElNQVFfTVRfQVJFQV9CWV9QQVJUSUNMRV9BTkRfSE9MRVNfQVJFQQ0KK30gUGFydGljbGVBbmFseXNpc1JlcG9ydDsNCisNCisvKiogVHJhY2tpbmcgZnVuY3Rpb25zIHJldHVybiB0aGlzIHN0cnVjdHVyZSAqLw0KK3R5cGVkZWYgc3RydWN0IENvbG9yUmVwb3J0X3N0cnVjdCB7DQorCWludAkJbnVtYmVyUGFydGljbGVzRm91bmQ7CQkJCS8vIE51bWJlciBvZiBwYXJ0aWNsZXMgZm91bmQgZm9yIHRoaXMgY29sb3INCisJaW50IAlsYXJnZXN0UGFydGljbGVOdW1iZXI7CQkJCS8vIFRoZSBwYXJ0aWNsZSBpbmRleCBvZiB0aGUgbGFyZ2VzdCBwYXJ0aWNsZQ0KKwkvKiBDb2xvciBpbmZvcm1hdGlvbiAqLw0KKwlmbG9hdCAJcGFydGljbGVIdWVNYXg7CQkJCS8vIEhpc3RvZ3JhbVJlcG9ydDogaHVlIG1heA0KKwlmbG9hdCAJcGFydGljbGVIdWVNaW47CQkJCS8vIEhpc3RvZ3JhbVJlcG9ydDogaHVlIG1heA0KKwlmbG9hdCAJcGFydGljbGVIdWVNZWFuOwkJCS8vIEhpc3RvZ3JhbVJlcG9ydDogaHVlIG1lYW4NCisJZmxvYXQgCXBhcnRpY2xlU2F0TWF4OwkJCQkvLyBIaXN0b2dyYW1SZXBvcnQ6IHNhdHVyYXRpb24gbWF4DQorCWZsb2F0IAlwYXJ0aWNsZVNhdE1pbjsJCQkJLy8gSGlzdG9ncmFtUmVwb3J0OiBzYXR1cmF0aW9uIG1heA0KKwlmbG9hdCAJcGFydGljbGVTYXRNZWFuOwkJCS8vIEhpc3RvZ3JhbVJlcG9ydDogc2F0dXJhdGlvbiBtZWFuDQorCWZsb2F0IAlwYXJ0aWNsZUx1bU1heDsJCQkJLy8gSGlzdG9ncmFtUmVwb3J0OiBsdW1pbmFuY2UgbWF4DQorCWZsb2F0IAlwYXJ0aWNsZUx1bU1pbjsJCQkJLy8gSGlzdG9ncmFtUmVwb3J0OiBsdW1pbmFuY2UgIG1heA0KKwlmbG9hdCAJcGFydGljbGVMdW1NZWFuOwkJCS8vIEhpc3RvZ3JhbVJlcG9ydDogbHVtaW5hbmNlIG1lYW4NCit9IENvbG9yUmVwb3J0Ow0KKw0KKw0KKy8qICAgSW1hZ2UgTWFuYWdlbWVudCBmdW5jdGlvbnMgKi8NCisNCisvKiBDcmVhdGU6IGNhbGxzIGltYXFDcmVhdGVJbWFnZS4gQm9yZGVyIHNpemUgaXMgc2V0IHRvIHNvbWUgZGVmYXVsdCB2YWx1ZSAqLw0KK0ltYWdlKiBmcmNDcmVhdGVJbWFnZSggSW1hZ2VUeXBlIHR5cGUgKTsNCisNCisvKiBEaXNwb3NlOiBjYWxscyBpbWFxRGlzcG9zZSAqLw0KK2ludCBmcmNEaXNwb3NlKCB2b2lkKiBvYmplY3QgKTsNCitpbnQgZnJjRGlzcG9zZSggY29uc3QgY2hhciogZmlsZW5hbWUsIC4uLiApIDsNCisNCisvKiBDb3B5OiBjYWxscyBpbWFxRHVwbGljYXRlSW1hZ2UgKi8NCitpbnQgZnJjQ29weUltYWdlKCBJbWFnZSogZGVzdCwgY29uc3QgSW1hZ2UqIHNvdXJjZSApOw0KKw0KKy8qIEltYWdlIEV4dHJhY3Rpb246IENyb3A6IGNhbGxzIGltYXFTY2FsZSAqLw0KK2ludCBmcmNDcm9wKCBJbWFnZSogZGVzdCwgY29uc3QgSW1hZ2UqIHNvdXJjZSwgUmVjdCByZWN0ICk7DQorDQorLyogSW1hZ2UgRXh0cmFjdGlvbjogU2NhbGU6IGNhbGxzIGltYXFTY2FsZS4gIFNjYWxlcyBlbnRpcmUgaW1hZ2UgKi8NCitpbnQgZnJjU2NhbGUoSW1hZ2UqIGRlc3QsIGNvbnN0IEltYWdlKiBzb3VyY2UsIGludCB4U2NhbGUsIGludCB5U2NhbGUsIFNjYWxpbmdNb2RlIHNjYWxlTW9kZSApOw0KKw0KKy8qIFJlYWQgSW1hZ2UgOiBjYWxscyBpbWFxUmVhZEZpbGUgKi8NCitpbnQgZnJjUmVhZEltYWdlKCBJbWFnZSogaW1hZ2UsIGNvbnN0IGNoYXIqIGZpbGVOYW1lICk7DQorLyogV3JpdGUgSW1hZ2UgOiBjYWxscyBpbWFxV3JpdGVGaWxlICovDQoraW50IGZyY1dyaXRlSW1hZ2UoIGNvbnN0IEltYWdlKiBpbWFnZSwgY29uc3QgY2hhciogZmlsZU5hbWUpOw0KKw0KKy8qICAgTWVhc3VyZSBJbnRlbnNpdHkgZnVuY3Rpb25zICovDQorDQorLyogSGlzdG9ncmFtOiBjYWxscyBpbWFxSGlzdG9ncmFtICovDQorSGlzdG9ncmFtUmVwb3J0KiBmcmNIaXN0b2dyYW0oIGNvbnN0IEltYWdlKiBpbWFnZSwgaW50IG51bUNsYXNzZXMsIGZsb2F0IG1pbiwgZmxvYXQgbWF4LCBSZWN0IHJlY3QgKTsNCisvKiBDb2xvciBIaXN0b2dyYW06IGNhbGxzIGltYXFDb2xvckhpc3RvZ3JhbTIgKi8NCitDb2xvckhpc3RvZ3JhbVJlcG9ydCogZnJjQ29sb3JIaXN0b2dyYW0oY29uc3QgSW1hZ2UqIGltYWdlLCBpbnQgbnVtQ2xhc3NlcywgQ29sb3JNb2RlIG1vZGUsIEltYWdlKiBtYXNrKTsNCisNCisvKiBHZXQgUGl4ZWwgVmFsdWU6IGNhbGxzIGltYXFHZXRQaXhlbCAqLw0KK2ludCBmcmNHZXRQaXhlbFZhbHVlKCBjb25zdCBJbWFnZSogaW1hZ2UsIFBvaW50IHBpeGVsLCBQaXhlbFZhbHVlKiB2YWx1ZSApOw0KKw0KKy8qICAgUGFydGljbGUgQW5hbHlzaXMgZnVuY3Rpb25zICovDQorDQorLyogUGFydGljbGUgRmlsdGVyOiBjYWxscyBpbWFxUGFydGljbGVGaWx0ZXIzICovDQoraW50IGZyY1BhcnRpY2xlRmlsdGVyKEltYWdlKiBkZXN0LCBJbWFnZSogc291cmNlLCBjb25zdCBQYXJ0aWNsZUZpbHRlckNyaXRlcmlhMiogY3JpdGVyaWEsIA0KKwkJaW50IGNyaXRlcmlhQ291bnQsIGNvbnN0IFBhcnRpY2xlRmlsdGVyT3B0aW9ucyogb3B0aW9ucywgUmVjdCByZWN0LCBpbnQqIG51bVBhcnRpY2xlcyk7DQoraW50IGZyY1BhcnRpY2xlRmlsdGVyKEltYWdlKiBkZXN0LCBJbWFnZSogc291cmNlLCBjb25zdCBQYXJ0aWNsZUZpbHRlckNyaXRlcmlhMiogY3JpdGVyaWEsIA0KKwkJaW50IGNyaXRlcmlhQ291bnQsIGNvbnN0IFBhcnRpY2xlRmlsdGVyT3B0aW9ucyogb3B0aW9ucywgaW50KiBudW1QYXJ0aWNsZXMpOw0KKy8qIE1vcnBob2xvZ3k6IGNhbGxzIGltYXFNb3JwaG9sb2d5ICovDQoraW50IGZyY01vcnBob2xvZ3koSW1hZ2UqIGRlc3QsIEltYWdlKiBzb3VyY2UsIE1vcnBob2xvZ3lNZXRob2QgbWV0aG9kKTsNCitpbnQgZnJjTW9ycGhvbG9neShJbWFnZSogZGVzdCwgSW1hZ2UqIHNvdXJjZSwgTW9ycGhvbG9neU1ldGhvZCBtZXRob2QsIGNvbnN0IFN0cnVjdHVyaW5nRWxlbWVudCogc3RydWN0dXJpbmdFbGVtZW50KTsNCisvKiBSZWplY3QgQm9yZGVyOiBjYWxscyBpbWFxUmVqZWN0Qm9yZGVyICovDQoraW50IGZyY1JlamVjdEJvcmRlcihJbWFnZSogZGVzdCwgSW1hZ2UqIHNvdXJjZSk7DQoraW50IGZyY1JlamVjdEJvcmRlcihJbWFnZSogZGVzdCwgSW1hZ2UqIHNvdXJjZSwgaW50IGNvbm5lY3Rpdml0eTgpOw0KKy8qIENvdW50IFBhcnRpY2xlczogY2FsbHMgaW1hcUNvdW50UGFydGljbGVzICovDQoraW50IGZyY0NvdW50UGFydGljbGVzKEltYWdlKiBpbWFnZSwgaW50KiBudW1QYXJ0aWNsZXMpOw0KKy8qIFBhcnRpY2xlIEFuYWx5c2lzIFJlcG9ydDogY2FsbHMgaW1hcU1lYXN1cmVQYXJ0aWNsZSAqLw0KK2ludCBmcmNQYXJ0aWNsZUFuYWx5c2lzKEltYWdlKiBpbWFnZSwgaW50IHBhcnRpY2xlTnVtYmVyLCBQYXJ0aWNsZUFuYWx5c2lzUmVwb3J0KiBwYXIpOw0KKw0KKy8qICAgSW1hZ2UgRW5oYW5jZW1lbnQgZnVuY3Rpb25zICovDQorDQorLyogRXF1YWxpemU6IGNhbGxzIGltYXFFcXVhbGl6ZSAqLw0KK2ludCBmcmNFcXVhbGl6ZShJbWFnZSogZGVzdCwgY29uc3QgSW1hZ2UqIHNvdXJjZSwgZmxvYXQgbWluLCBmbG9hdCBtYXgpOw0KK2ludCBmcmNFcXVhbGl6ZShJbWFnZSogZGVzdCwgY29uc3QgSW1hZ2UqIHNvdXJjZSwgZmxvYXQgbWluLCBmbG9hdCBtYXgsIGNvbnN0IEltYWdlKiBtYXNrKTsNCisNCisvKiBDb2xvciBFcXVhbGl6ZTogY2FsbHMgaW1hcUNvbG9yRXF1YWxpemUgKi8NCitpbnQgZnJjQ29sb3JFcXVhbGl6ZShJbWFnZSogZGVzdCwgY29uc3QgSW1hZ2UqIHNvdXJjZSk7DQoraW50IGZyY0NvbG9yRXF1YWxpemUoSW1hZ2UqIGRlc3QsIGNvbnN0IEltYWdlKiBzb3VyY2UsIGludCBjb2xvckVxdWFsaXphdGlvbik7DQorDQorLyogICBJbWFnZSBUaHJlc2hvbGRpbmcgJiBDb252ZXJzaW9uIGZ1bmN0aW9ucyAqLw0KKw0KKy8qIFNtYXJ0IFRocmVzaG9sZDogY2FsbHMgaW1hcUxvY2FsVGhyZXNob2xkICovDQoraW50IGZyY1NtYXJ0VGhyZXNob2xkKEltYWdlKiBkZXN0LCBjb25zdCBJbWFnZSogc291cmNlLCB1bnNpZ25lZCBpbnQgd2luZG93V2lkdGgsIHVuc2lnbmVkIGludCB3aW5kb3dIZWlnaHQsIA0KKwkJTG9jYWxUaHJlc2hvbGRNZXRob2QgbWV0aG9kLCBkb3VibGUgZGV2aWF0aW9uV2VpZ2h0LCBPYmplY3RUeXBlIHR5cGUpOw0KK2ludCBmcmNTbWFydFRocmVzaG9sZChJbWFnZSogZGVzdCwgY29uc3QgSW1hZ2UqIHNvdXJjZSwgdW5zaWduZWQgaW50IHdpbmRvd1dpZHRoLCB1bnNpZ25lZCBpbnQgd2luZG93SGVpZ2h0LCANCisJCUxvY2FsVGhyZXNob2xkTWV0aG9kIG1ldGhvZCwgZG91YmxlIGRldmlhdGlvbldlaWdodCwgT2JqZWN0VHlwZSB0eXBlLCBmbG9hdCByZXBsYWNlVmFsdWUpOw0KKw0KKy8qIFNpbXBsZSBUaHJlc2hvbGQ6IGNhbGxzIGltYXFUaHJlc2hvbGQgKi8NCitpbnQgZnJjU2ltcGxlVGhyZXNob2xkKEltYWdlKiBkZXN0LCBjb25zdCBJbWFnZSogc291cmNlLCBmbG9hdCByYW5nZU1pbiwgZmxvYXQgcmFuZ2VNYXgsIGZsb2F0IG5ld1ZhbHVlKTsNCitpbnQgZnJjU2ltcGxlVGhyZXNob2xkKEltYWdlKiBkZXN0LCBjb25zdCBJbWFnZSogc291cmNlLCBmbG9hdCByYW5nZU1pbiwgZmxvYXQgcmFuZ2VNYXgpOw0KKw0KKy8qIENvbG9yL0h1ZSBUaHJlc2hvbGQ6IGNhbGxzIGltYXFDb2xvclRocmVzaG9sZCAqLw0KK2ludCBmcmNDb2xvclRocmVzaG9sZChJbWFnZSogZGVzdCwgY29uc3QgSW1hZ2UqIHNvdXJjZSwgQ29sb3JNb2RlIG1vZGUsIA0KKwkJY29uc3QgUmFuZ2UqIHBsYW5lMVJhbmdlLCBjb25zdCBSYW5nZSogcGxhbmUyUmFuZ2UsIGNvbnN0IFJhbmdlKiBwbGFuZTNSYW5nZSk7DQoraW50IGZyY0NvbG9yVGhyZXNob2xkKEltYWdlKiBkZXN0LCBjb25zdCBJbWFnZSogc291cmNlLCBpbnQgcmVwbGFjZVZhbHVlLCBDb2xvck1vZGUgbW9kZSwgDQorCQljb25zdCBSYW5nZSogcGxhbmUxUmFuZ2UsIGNvbnN0IFJhbmdlKiBwbGFuZTJSYW5nZSwgY29uc3QgUmFuZ2UqIHBsYW5lM1JhbmdlKTsNCitpbnQgZnJjSHVlVGhyZXNob2xkKEltYWdlKiBkZXN0LCBjb25zdCBJbWFnZSogc291cmNlLCBjb25zdCBSYW5nZSogaHVlUmFuZ2UpOw0KK2ludCBmcmNIdWVUaHJlc2hvbGQoSW1hZ2UqIGRlc3QsIGNvbnN0IEltYWdlKiBzb3VyY2UsIGNvbnN0IFJhbmdlKiBodWVSYW5nZSwgaW50IG1pblNhdHVyYXRpb24pOw0KKw0KKy8qIEV4dHJhY3QgQ29sb3JIdWUgUGxhbmU6IGNhbGxzIGltYXFFeHRyYWN0Q29sb3JQbGFuZXMgKi8NCitpbnQgZnJjRXh0cmFjdENvbG9yUGxhbmVzKGNvbnN0IEltYWdlKiBpbWFnZSwgQ29sb3JNb2RlIG1vZGUsIEltYWdlKiBwbGFuZTEsIEltYWdlKiBwbGFuZTIsIEltYWdlKiBwbGFuZTMpOw0KK2ludCBmcmNFeHRyYWN0SHVlUGxhbmUoY29uc3QgSW1hZ2UqIGltYWdlLCBJbWFnZSogaHVlUGxhbmUpOw0KK2ludCBmcmNFeHRyYWN0SHVlUGxhbmUoY29uc3QgSW1hZ2UqIGltYWdlLCBJbWFnZSogaHVlUGxhbmUsIGludCBtaW5TYXR1cmF0aW9uKTsNCisNCisjZW5kaWYNCisNCisNCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9XUElFcnJvcnMuaCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL1dQSUVycm9ycy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllZDI4NmYKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9XUElFcnJvcnMuaApAQCAtMCwwICsxLDc4IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy8qIENvcHlyaWdodCAoYykgRklSU1QgMjAwOC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4JCQkJCQkJICAqLw0KKy8qIE9wZW4gU291cmNlIFNvZnR3YXJlIC0gbWF5IGJlIG1vZGlmaWVkIGFuZCBzaGFyZWQgYnkgRlJDIHRlYW1zLiBUaGUgY29kZSAgICovDQorLyogbXVzdCBiZSBhY2NvbXBhbmllZCBieSB0aGUgRklSU1QgQlNEIGxpY2Vuc2UgZmlsZSBpbiAkKFdJTkRfQkFTRSkvV1BJTGliLiAgKi8NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKyNpZm5kZWYgX19XUElfRVJST1JTX0hfXw0KKyNkZWZpbmUgX19XUElfRVJST1JTX0hfXw0KKw0KKyNpZmRlZiBXUElfRVJST1JTX0RFRklORV9TVFJJTkdTDQorI2RlZmluZSBTKGxhYmVsLCBvZmZzZXQsIG1lc3NhZ2UpIGNvbnN0IGNoYXIgKndwaV9lcnJvcl9zXyMjbGFiZWwgPSBtZXNzYWdlIDsNCisjZWxzZQ0KKyNkZWZpbmUgUyhsYWJlbCwgb2Zmc2V0LCBtZXNzYWdlKSBleHRlcm4gY29uc3QgY2hhciAqd3BpX2Vycm9yX3NfIyNsYWJlbDsNCisjZW5kaWYNCisNCisvKg0KKyAqIEZhdGFsIGVycm9ycw0KKyAqLw0KK1MoTW9kdWxlSW5kZXhPdXRPZlJhbmdlLCAtMSwgIkFsbG9jYXRpbmcgbW9kdWxlIHRoYXQgaXMgb3V0IG9mIHJhbmdlIG9yIG5vdCBmb3VuZCIpOw0KK1MoQ2hhbm5lbEluZGV4T3V0T2ZSYW5nZSwgLTEsICJBbGxvY2F0aW5nIGNoYW5uZWwgdGhhdCBpcyBvdXQgb2YgcmFuZ2UiKTsNCitTKE5vdEFsbG9jYXRlZCwgLTIsICJBdHRlbXB0aW5nIHRvIGZyZWUgdW5hbGxvY2F0ZWQgcmVzb3VyY2UiKTsNCitTKFJlc291cmNlQWxyZWFkeUFsbG9jYXRlZCwgLTMsICJBdHRlbXB0ZWQgdG8gcmV1c2UgYW4gYWxsb2NhdGVkIHJlc291cmNlIik7DQorUyhOb0F2YWlsYWJsZVJlc291cmNlcywgLTQsICJObyBhdmFpbGFibGUgcmVzb3VyY2VzIHRvIGFsbG9jYXRlIik7DQorUyhOdWxsUGFyYW1ldGVyLCAtNSwgIkEgcG9pbnRlciBwYXJhbWV0ZXIgdG8gYSBtZXRob2QgaXMgTlVMTCIpOw0KK1MoVGltZW91dCwgLTYsICJBIHRpbWVvdXQgaGFzIGJlZW4gZXhjZWVkZWQiKTsNCitTKENvbXBhc3NNYW51ZmFjdHVyZXJFcnJvciwgLTcsICJDb21wYXNzIG1hbnVmYWN0dXJlciBkb2Vzbid0IG1hdGNoIEhpVGVjaG5pYyIpOw0KK1MoQ29tcGFzc1R5cGVFcnJvciwgLTgsICJDb21wYXNzIHR5cGUgZG9lc24ndCBtYXRjaCBleHBlY3RlZCB0eXBlIGZvciBIaVRlY2huaWMgY29tcGFzcyIpOw0KK1MoSW5jb21wYXRpYmxlTW9kZSwgLTksICJUaGUgb2JqZWN0IGlzIGluIGFuIGluY29tcGF0aWJsZSBtb2RlIik7DQorUyhBbmFsb2dUcmlnZ2VyTGltaXRPcmRlckVycm9yLCAtMTAsICJBbmFsb2dUcmlnZ2VyIGxpbWl0cyBlcnJvci4gIExvd2VyIGxpbWl0ID4gVXBwZXIgTGltaXQiKTsNCitTKEFuYWxvZ1RyaWdnZXJQdWxzZU91dHB1dEVycm9yLCAtMTEsICJBdHRlbXB0ZWQgdG8gcmVhZCBBbmFsb2dUcmlnZ2VyIHB1bHNlIG91dHB1dC4iKTsNCitTKFRhc2tFcnJvciwgLTEyLCAiVGFzayBjYW4ndCBiZSBzdGFydGVkIik7DQorUyhUYXNrSURFcnJvciwgLTEzLCAiVGFzayBlcnJvcjogSW52YWxpZCBJRC4iKTsNCitTKFRhc2tEZWxldGVkRXJyb3IsIC0xNCwgIlRhc2sgZXJyb3I6IFRhc2sgYWxyZWFkeSBkZWxldGVkLiIpOw0KK1MoVGFza09wdGlvbnNFcnJvciwgLTE1LCAiVGFzayBlcnJvcjogSW52YWxpZCBvcHRpb25zLiIpOw0KK1MoVGFza01lbW9yeUVycm9yLCAtMTYsICJUYXNrIGNhbid0IGJlIHN0YXJ0ZWQgZHVlIHRvIGluc3VmZmljaWVudCBtZW1vcnkuIik7DQorUyhUYXNrUHJpb3JpdHlFcnJvciwgLTE3LCAiVGFzayBlcnJvcjogSW52YWxpZCBwcmlvcml0eSBbMS0yNTVdLiIpOw0KK1MoRHJpdmVVbmluaXRpYWxpemVkLCAtMTgsICJSb2JvdERyaXZlIG5vdCBpbml0aWFsaXplZCBmb3IgdGhlIEMgaW50ZXJmYWNlIik7DQorUyhDb21wcmVzc29yTm9uTWF0Y2hpbmcsIC0xOSwgIkNvbXByZXNzb3Igc2xvdC9jaGFubmVsIGRvZXNuJ3QgbWF0Y2ggcHJldmlvdXMgaW5zdGFuY2UiKTsNCitTKENvbXByZXNzb3JBbHJlYWR5RGVmaW5lZCwgLTIwLCAiQ3JlYXRpbmcgYSBzZWNvbmQgY29tcHJlc3NvciBpbnN0YW5jZSIpOw0KK1MoQ29tcHJlc3NvclVuZGVmaW5lZCwgLTIxLCAiVXNpbmcgY29tcHJlc3NvciBmdW5jdGlvbnMgd2l0aG91dCBkZWZpbmluZyBjb21wcmVzc29yIik7DQorUyhJbmNvbnNpc3RlbnRBcnJheVZhbHVlQWRkZWQsIC0yMiwgIldoZW4gcGFja2luZyBkYXRhIGludG8gYW4gYXJyYXkgdG8gdGhlIGRhc2hib2FyZCwgbm90IGFsbCB2YWx1ZXMgYWRkZWQgd2VyZSBvZiB0aGUgc2FtZSB0eXBlLiIpOw0KK1MoTWlzbWF0Y2hlZENvbXBsZXhUeXBlQ2xvc2UsIC0yMywgIldoZW4gcGFja2luZyBkYXRhIHRvIHRoZSBkYXNoYm9hcmQsIGEgQ2xvc2UgZm9yIGEgY29tcGxleCB0eXBlIHdhcyBjYWxsZWQgd2l0aG91dCBhIG1hdGNoaW5nIE9wZW4uIik7DQorUyhEYXNoYm9hcmREYXRhT3ZlcmZsb3csIC0yNCwgIldoZW4gcGFja2luZyBkYXRhIHRvIHRoZSBkYXNoYm9hcmQsIHRvbyBtdWNoIGRhdGEgd2FzIHBhY2tlZCBhbmQgdGhlIGJ1ZmZlciBvdmVyZmxvd2VkLiIpOw0KK1MoRGFzaGJvYXJkRGF0YUNvbGxpc2lvbiwgLTI1LCAiVGhlIHNhbWUgYnVmZmVyIHdhcyB1c2VkIGZvciBwYWNraW5nIGRhdGEgYW5kIGZvciBwcmludGluZy4iKTsNCitTKEVuaGFuY2VkSU9NaXNzaW5nLCAtMjYsICJJTyBpcyBub3QgYXR0YWNoZWQgb3IgRW5oYW5jZWQgSU8gaXMgbm90IGVuYWJsZWQuIik7DQorUyhMaW5lTm90T3V0cHV0LCAtMjcsICJDYW5ub3QgU2V0RGlnaXRhbE91dHB1dCBmb3IgYSBsaW5lIG5vdCBjb25maWd1cmVkIGZvciBvdXRwdXQuIik7DQorUyhQYXJhbWV0ZXJPdXRPZlJhbmdlLCAtMjgsICJBIHBhcmFtZXRlciBpcyBvdXQgb2YgcmFuZ2UuIik7DQorUyhTUElDbG9ja1JhdGVUb29Mb3csIC0yOSwgIlNQSSBjbG9jayByYXRlIHdhcyBiZWxvdyB0aGUgbWluaW11bSBzdXBwb3J0ZWQiKTsNCitTKEphZ3VhclZlcnNpb25FcnJvciwgLTMwLCAiSmFndWFyIGZpcm13YXJlIHZlcnNpb24gZXJyb3IiKTsNCitTKE5ldHdvcmtUYWJsZXNSZWFkRXJyb3IsIC00MCwgIkVycm9yIHJlYWRpbmcgTmV0d29ya1RhYmxlcyBzb2NrZXQiKTsNCitTKE5ldHdvcmtUYWJsZXNCdWZmZXJGdWxsLCAtNDEsICJCdWZmZXIgZnVsbCB3cml0aW5nIHRvIE5ldHdvcmtUYWJsZXMgc29ja2V0Iik7DQorUyhOZXR3b3JrVGFibGVzV3JvbmdUeXBlLCAtNDIsICJUaGUgd3JvbmcgdHlwZSB3YXMgcmVhZCBmcm9tIHRoZSBOZXR3b3JrVGFibGVzIGVudHJ5Iik7DQorUyhOZXR3b3JrVGFibGVzQ29ycnVwdCwgLTQzLCAiTmV0d29ya1RhYmxlcyBkYXRhIHN0cmVhbSBpcyBjb3JydXB0Iik7DQorUyhTbWFydERhc2hib2FyZE1pc3NpbmdLZXksIC00MywgIlNtYXJ0RGFzaGJvYXJkIGRhdGEgZG9lcyBub3QgZXhpc3QiKTsNCitTKENvbW1hbmRJbGxlZ2FsVXNlLCAtNTAsICJJbGxlZ2FsIHVzZSBvZiBDb21tYW5kIik7DQorDQorLyoNCisgKiBXYXJuaW5ncw0KKyAqLw0KK1MoU2FtcGxlUmF0ZVRvb0hpZ2gsIDEsICJBbmFsb2cgbW9kdWxlIHNhbXBsZSByYXRlIGlzIHRvbyBoaWdoIik7DQorUyhWb2x0YWdlT3V0T2ZSYW5nZSwgMiwgIlZvbHRhZ2UgdG8gY29udmVydCB0byByYXcgdmFsdWUgaXMgb3V0IG9mIHJhbmdlIFstMTA7IDEwXSIpOw0KK1MoQ29tcHJlc3NvclRhc2tFcnJvciwgMywgIkNvbXByZXNzb3IgdGFzayB3b24ndCBzdGFydCIpOw0KK1MoTG9vcFRpbWluZ0Vycm9yLCA0LCAiRGlnaXRhbCBtb2R1bGUgbG9vcCB0aW1pbmcgaXMgbm90IHRoZSBleHBlY3RlZCB2YWx1ZSIpOw0KK1MoTm9uQmluYXJ5RGlnaXRhbFZhbHVlLCA1LCAiRGlnaXRhbCBvdXRwdXQgdmFsdWUgaXMgbm90IDAgb3IgMSIpOw0KK1MoSW5jb3JyZWN0QmF0dGVyeUNoYW5uZWwsIDYsICJCYXR0ZXJ5IG1lYXN1cmVtZW50IGNoYW5uZWwgaXMgbm90IGNvcnJlY3QgdmFsdWUiKTsNCitTKEJhZEpveXN0aWNrSW5kZXgsIDcsICJKb3lzdGljayBpbmRleCBpcyBvdXQgb2YgcmFuZ2UsIHNob3VsZCBiZSAxLTQiKTsNCitTKEJhZEpveXN0aWNrQXhpcywgOCwgIkpveXN0aWNrIGF4aXMgaXMgb3V0IG9mIHJhbmdlIik7DQorUyhJbnZhbGlkTW90b3JJbmRleCwgOSwgIk1vdG9yIGluZGV4IGlzIG91dCBvZiByYW5nZSwgc2hvdWxkIGJlIDAtMyIpOw0KK1MoRHJpdmVyU3RhdGlvblRhc2tFcnJvciwgMTAsICJEcml2ZXIgU3RhdGlvbiB0YXNrIHdvbid0IHN0YXJ0Iik7DQorUyhFbmhhbmNlZElPUFdNUGVyaW9kT3V0T2ZSYW5nZSwgMTEsICJEcml2ZXIgU3RhdGlvbiBFbmhhbmNlZCBJTyBQV00gT3V0cHV0IHBlcmlvZCBvdXQgb2YgcmFuZ2UuIik7DQorUyhTUElXcml0ZU5vTU9TSSwgMTIsICJDYW5ub3Qgd3JpdGUgdG8gU1BJIHBvcnQgd2l0aCBubyBNT1NJIG91dHB1dCIpOw0KK1MoU1BJUmVhZE5vTUlTTywgMTMsICJDYW5ub3QgcmVhZCBmcm9tIFNQSSBwb3J0IHdpdGggbm8gTUlTTyBpbnB1dCIpOw0KK1MoU1BJUmVhZE5vRGF0YSwgMTQsICJObyBkYXRhIGF2YWlsYWJsZSB0byByZWFkIGZyb20gU1BJIik7DQorUyhJbmNvbXBhdGlibGVTdGF0ZSwgMTUsICJJbmNvbXBhdGlibGUgU3RhdGU6IFRoZSBvcGVyYXRpb24gY2Fubm90IGJlIGNvbXBsZXRlZCIpOw0KKw0KKyN1bmRlZiBTDQorDQorI2VuZGlmIC8vIF9fV1BJX0VSUk9SU19IX18NCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9XUElMaWIuaCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL1dQSUxpYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3ZjM5OWQKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9XUElMaWIuaApAQCAtMCwwICsxLDkyIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy8qIENvcHlyaWdodCAoYykgRklSU1QgMjAwOC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4JCQkJCQkJICAqLw0KKy8qIE9wZW4gU291cmNlIFNvZnR3YXJlIC0gbWF5IGJlIG1vZGlmaWVkIGFuZCBzaGFyZWQgYnkgRlJDIHRlYW1zLiBUaGUgY29kZSAgICovDQorLyogbXVzdCBiZSBhY2NvbXBhbmllZCBieSB0aGUgRklSU1QgQlNEIGxpY2Vuc2UgZmlsZSBpbiAkKFdJTkRfQkFTRSkvV1BJTGliLiAgKi8NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKyNpZm5kZWYgV1BJTElCX0hfDQorI2RlZmluZSBXUElMSUJfSF8NCisNCisjaW5jbHVkZSAic3RyaW5nLmgiDQorI2luY2x1ZGUgPGlvc3RyZWFtLmg+DQorDQorI2luY2x1ZGUgIkFjY2VsZXJvbWV0ZXIuaCINCisjaW5jbHVkZSAiQURYTDM0NV9JMkMuaCINCisjaW5jbHVkZSAiQURYTDM0NV9TUEkuaCINCisjaW5jbHVkZSAiQW5hbG9nQ2hhbm5lbC5oIg0KKyNpbmNsdWRlICJBbmFsb2dNb2R1bGUuaCINCisjaW5jbHVkZSAiQW5hbG9nVHJpZ2dlci5oIg0KKyNpbmNsdWRlICJBbmFsb2dUcmlnZ2VyT3V0cHV0LmgiDQorI2luY2x1ZGUgIkJ1dHRvbnMvQW5hbG9nSU9CdXR0b24uaCINCisjaW5jbHVkZSAiQnV0dG9ucy9EaWdpdGFsSU9CdXR0b24uaCINCisjaW5jbHVkZSAiQnV0dG9ucy9JbnRlcm5hbEJ1dHRvbi5oIg0KKyNpbmNsdWRlICJCdXR0b25zL0pveXN0aWNrQnV0dG9uLmgiDQorI2luY2x1ZGUgIkJ1dHRvbnMvTmV0d29ya0J1dHRvbi5oIg0KKyNpbmNsdWRlICJDQU5KYWd1YXIuaCINCisjaW5jbHVkZSAiQ29tbWFuZHMvQ29tbWFuZC5oIg0KKyNpbmNsdWRlICJDb21tYW5kcy9Db21tYW5kR3JvdXAuaCINCisjaW5jbHVkZSAiQ29tbWFuZHMvUElEQ29tbWFuZC5oIg0KKyNpbmNsdWRlICJDb21tYW5kcy9QSURTdWJzeXN0ZW0uaCINCisjaW5jbHVkZSAiQ29tbWFuZHMvUHJpbnRDb21tYW5kLmgiDQorI2luY2x1ZGUgIkNvbW1hbmRzL1NjaGVkdWxlci5oIg0KKyNpbmNsdWRlICJDb21tYW5kcy9TdGFydENvbW1hbmQuaCINCisjaW5jbHVkZSAiQ29tbWFuZHMvU3Vic3lzdGVtLmgiDQorI2luY2x1ZGUgIkNvbW1hbmRzL1dhaXRDb21tYW5kLmgiDQorI2luY2x1ZGUgIkNvbW1hbmRzL1dhaXRGb3JDaGlsZHJlbi5oIg0KKyNpbmNsdWRlICJDb21tYW5kcy9XYWl0VW50aWxDb21tYW5kLmgiDQorI2luY2x1ZGUgIkNvbXByZXNzb3IuaCINCisjaW5jbHVkZSAiQ291bnRlci5oIg0KKyNpbmNsdWRlICJEYXNoYm9hcmQuaCINCisjaW5jbHVkZSAiRGlnaXRhbElucHV0LmgiDQorI2luY2x1ZGUgIkRpZ2l0YWxNb2R1bGUuaCINCisjaW5jbHVkZSAiRGlnaXRhbE91dHB1dC5oIg0KKyNpbmNsdWRlICJEaWdpdGFsU291cmNlLmgiDQorI2luY2x1ZGUgIkRvdWJsZVNvbGVub2lkLmgiDQorI2luY2x1ZGUgIkRyaXZlclN0YXRpb24uaCINCisjaW5jbHVkZSAiRHJpdmVyU3RhdGlvbkVuaGFuY2VkSU8uaCINCisjaW5jbHVkZSAiRHJpdmVyU3RhdGlvbkxDRC5oIg0KKyNpbmNsdWRlICJFbmNvZGVyLmgiDQorI2luY2x1ZGUgIkVycm9yQmFzZS5oIg0KKyNpbmNsdWRlICJHZWFyVG9vdGguaCINCisjaW5jbHVkZSAiR2VuZXJpY0hJRC5oIg0KKyNpbmNsdWRlICJHeXJvLmgiDQorI2luY2x1ZGUgIkhpVGVjaG5pY0NvbXBhc3MuaCINCisjaW5jbHVkZSAiSGlUZWNobmljQ29sb3JTZW5zb3IuaCINCisjaW5jbHVkZSAiSTJDLmgiDQorI2luY2x1ZGUgIkl0ZXJhdGl2ZVJvYm90LmgiDQorI2luY2x1ZGUgIkludGVycnVwdGFibGVTZW5zb3JCYXNlLmgiDQorI2luY2x1ZGUgIkphZ3Vhci5oIg0KKyNpbmNsdWRlICJKb3lzdGljay5oIg0KKyNpbmNsdWRlICJLaW5lY3QuaCINCisjaW5jbHVkZSAiS2luZWN0U3RpY2suaCINCisjaW5jbHVkZSAiTm90aWZpZXIuaCINCisjaW5jbHVkZSAiUElEQ29udHJvbGxlci5oIg0KKyNpbmNsdWRlICJQSURPdXRwdXQuaCINCisjaW5jbHVkZSAiUElEU291cmNlLmgiDQorI2luY2x1ZGUgIlByZWZlcmVuY2VzLmgiDQorI2luY2x1ZGUgIlBXTS5oIg0KKyNpbmNsdWRlICJSZWxheS5oIg0KKyNpbmNsdWRlICJSZXNvdXJjZS5oIg0KKyNpbmNsdWRlICJSb2JvdEJhc2UuaCINCisjaW5jbHVkZSAiUm9ib3REcml2ZS5oIg0KKyNpbmNsdWRlICJTZW5zb3JCYXNlLmgiDQorI2luY2x1ZGUgIlNlcmlhbFBvcnQuaCINCisjaW5jbHVkZSAiU2Vydm8uaCINCisjaW5jbHVkZSAiU2ltcGxlUm9ib3QuaCINCisjaW5jbHVkZSAiU21hcnREYXNoYm9hcmQvU2VuZGFibGVDaG9vc2VyLmgiDQorI2luY2x1ZGUgIlNtYXJ0RGFzaGJvYXJkL1NtYXJ0RGFzaGJvYXJkLmgiDQorI2luY2x1ZGUgIlNvbGVub2lkLmgiDQorI2luY2x1ZGUgIlNwZWVkQ29udHJvbGxlci5oIg0KKyNpbmNsdWRlICJTUEkuaCINCisjaW5jbHVkZSAiU3luY2hyb25pemVkLmgiDQorI2luY2x1ZGUgIlRhbG9uLmgiDQorI2luY2x1ZGUgIlRhc2suaCINCisjaW5jbHVkZSAiVGltZXIuaCINCisjaW5jbHVkZSAiVWx0cmFzb25pYy5oIg0KKyNpbmNsdWRlICJVdGlsaXR5LmgiDQorI2luY2x1ZGUgIlZpY3Rvci5oIg0KKyNpbmNsdWRlICJWaXNpb24vQXhpc0NhbWVyYS5oIg0KKyNpbmNsdWRlICJXYXRjaGRvZy5oIg0KKyNpbmNsdWRlICJXUElFcnJvcnMuaCINCisNCisjZW5kaWYgLypXUElMSUJfSF8qLw0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL1dhdGNoZG9nLmNwcCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL1dhdGNoZG9nLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODEwYTllCi0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvV2F0Y2hkb2cuY3BwCkBAIC0wLDAgKzEsMTcwIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy8qIENvcHlyaWdodCAoYykgRklSU1QgMjAwOC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4JCQkJCQkJICAqLw0KKy8qIE9wZW4gU291cmNlIFNvZnR3YXJlIC0gbWF5IGJlIG1vZGlmaWVkIGFuZCBzaGFyZWQgYnkgRlJDIHRlYW1zLiBUaGUgY29kZSAgICovDQorLyogbXVzdCBiZSBhY2NvbXBhbmllZCBieSB0aGUgRklSU1QgQlNEIGxpY2Vuc2UgZmlsZSBpbiAkKFdJTkRfQkFTRSkvV1BJTGliLiAgKi8NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKyNpbmNsdWRlICJXYXRjaGRvZy5oIg0KKw0KK2NvbnN0IGRvdWJsZSBXYXRjaGRvZzo6a0RlZmF1bHRXYXRjaGRvZ0V4cGlyYXRpb247DQorDQorLyoqDQorICogVGhlIFdhdGNoZG9nIGlzIGJvcm4uDQorICovDQorV2F0Y2hkb2c6OldhdGNoZG9nKCkNCisJOgltX2ZwZ2FXYXRjaERvZyhOVUxMKQ0KK3sNCisJdFJpb1N0YXR1c0NvZGUgbG9jYWxTdGF0dXMgPSBOaUZwZ2FfU3RhdHVzX1N1Y2Nlc3M7DQorCW1fZnBnYVdhdGNoRG9nID0gdFdhdGNoZG9nOjpjcmVhdGUoJmxvY2FsU3RhdHVzKTsNCisJd3BpX3NldEVycm9yKGxvY2FsU3RhdHVzKTsNCisJU2V0RXhwaXJhdGlvbihrRGVmYXVsdFdhdGNoZG9nRXhwaXJhdGlvbik7DQorCVNldEVuYWJsZWQodHJ1ZSk7DQorfQ0KKw0KKy8qKg0KKyAqIFRpbWUgdG8gYnVyeSBoaW0gaW4gdGhlIGJhY2sgeWFyZC4NCisgKi8NCitXYXRjaGRvZzo6fldhdGNoZG9nKCkNCit7DQorCVNldEVuYWJsZWQoZmFsc2UpOw0KKwlkZWxldGUgbV9mcGdhV2F0Y2hEb2c7DQorCW1fZnBnYVdhdGNoRG9nID0gTlVMTDsNCit9DQorDQorLyoqDQorICogVGhyb3cgdGhlIGRvZyBhIGJvbmUuDQorICogDQorICogV2hlbiBldmVyeXRoaW5nIGlzIGdvaW5nIHdlbGwsIHlvdSBmZWVkIHlvdXIgZG9nIHdoZW4geW91IGdldCBob21lLg0KKyAqIExldCdzIGhvcGUgeW91IGRvbid0IGRyaXZlIHlvdXIgY2FyIG9mZiBhIGJyaWRnZSBvbiB0aGUgd2F5IGhvbWUuLi4NCisgKiBZb3VyIGRvZyB3b24ndCBnZXQgZmVkIGFuZCBoZSB3aWxsIHN0YXJ2ZSB0byBkZWF0aC4NCisgKiANCisgKiBCeSB0aGUgd2F5LCBpdCdzIG5vdCBjb29sIHRvIGFzayB0aGUgbmVpZ2hib3IgKHNvbWUgcmFuZG9tIHRhc2spIHRvDQorICogZmVlZCB5b3VyIGRvZyBmb3IgeW91LiAgSGUncyB5b3VyIHJlc3BvbnNpYmlsaXR5IQ0KKyAqIA0KKyAqIEByZXR1cm5zIFJldHVybnMgdGhlIHByZXZpb3VzIHN0YXRlIG9mIHRoZSB3YXRjaGRvZyBiZWZvcmUgZmVlZGluZyBpdC4NCisgKi8NCitib29sIFdhdGNoZG9nOjpGZWVkKCkNCit7DQorCWJvb2wgcHJldmlvdXMgPSBHZXRFbmFibGVkKCk7DQorCXRSaW9TdGF0dXNDb2RlIGxvY2FsU3RhdHVzID0gTmlGcGdhX1N0YXR1c19TdWNjZXNzOw0KKwltX2ZwZ2FXYXRjaERvZy0+c3Ryb2JlRmVlZCgmbG9jYWxTdGF0dXMpOw0KKwl3cGlfc2V0RXJyb3IobG9jYWxTdGF0dXMpOw0KKwlyZXR1cm4gcHJldmlvdXM7DQorfQ0KKw0KKy8qKg0KKyAqIFB1dCB0aGUgd2F0Y2hkb2cgb3V0IG9mIGl0cyBtaXNlcnkuDQorICogDQorICogRG9uJ3Qgd2FpdCBmb3IgeW91ciBkeWluZyByb2JvdCB0byBzdGFydmUgd2hlbiB0aGVyZSBpcyBhIHByb2JsZW0uDQorICogS2lsbCBpdCBxdWlja2x5LCBjbGVhbmx5LCBhbmQgaHVtYW5lbHkuDQorICovDQordm9pZCBXYXRjaGRvZzo6S2lsbCgpDQorew0KKwl0UmlvU3RhdHVzQ29kZSBsb2NhbFN0YXR1cyA9IE5pRnBnYV9TdGF0dXNfU3VjY2VzczsNCisJbV9mcGdhV2F0Y2hEb2ctPnN0cm9iZUtpbGwoJmxvY2FsU3RhdHVzKTsNCisJd3BpX3NldEVycm9yKGxvY2FsU3RhdHVzKTsNCit9DQorDQorLyoqDQorICogUmVhZCBob3cgbG9uZyBpdCBoYXMgYmVlbiBzaW5jZSB0aGUgd2F0Y2hkb2cgd2FzIGxhc3QgZmVkLg0KKyAqIA0KKyAqIEByZXR1cm4gVGhlIG51bWJlciBvZiBzZWNvbmRzIHNpbmNlIGxhc3QgbWVhbC4NCisgKi8NCitkb3VibGUgV2F0Y2hkb2c6OkdldFRpbWVyKCkNCit7DQorCXRSaW9TdGF0dXNDb2RlIGxvY2FsU3RhdHVzID0gTmlGcGdhX1N0YXR1c19TdWNjZXNzOw0KKwlVSU5UMzIgdGltZXIgPSBtX2ZwZ2FXYXRjaERvZy0+cmVhZFRpbWVyKCZsb2NhbFN0YXR1cyk7DQorCXdwaV9zZXRFcnJvcihsb2NhbFN0YXR1cyk7DQorCXJldHVybiB0aW1lciAvIChrU3lzdGVtQ2xvY2tUaWNrc1Blck1pY3Jvc2Vjb25kICogMWU2KTsNCit9DQorDQorLyoqDQorICogUmVhZCB3aGF0IHRoZSBjdXJyZW50IGV4cGlyYXRpb24gaXMuDQorICogDQorICogQHJldHVybiBUaGUgbnVtYmVyIG9mIHNlY29uZHMgYmVmb3JlIHN0YXJ2YXRpb24gZm9sbG93aW5nIGEgbWVhbCAod2F0Y2hkb2cgc3RhcnZlcyBpZiBpdCBkb2Vzbid0IGVhdCB0aGlzIG9mdGVuKS4NCisgKi8NCitkb3VibGUgV2F0Y2hkb2c6OkdldEV4cGlyYXRpb24oKQ0KK3sNCisJdFJpb1N0YXR1c0NvZGUgbG9jYWxTdGF0dXMgPSBOaUZwZ2FfU3RhdHVzX1N1Y2Nlc3M7DQorCVVJTlQzMiBleHBpcmF0aW9uID0gbV9mcGdhV2F0Y2hEb2ctPnJlYWRFeHBpcmF0aW9uKCZsb2NhbFN0YXR1cyk7DQorCXdwaV9zZXRFcnJvcihsb2NhbFN0YXR1cyk7DQorCXJldHVybiBleHBpcmF0aW9uIC8gKGtTeXN0ZW1DbG9ja1RpY2tzUGVyTWljcm9zZWNvbmQgKiAxZTYpOw0KK30NCisNCisvKioNCisgKiBDb25maWd1cmUgaG93IG1hbnkgc2Vjb25kcyB5b3VyIHdhdGNoZG9nIGNhbiBiZSBuZWdsZWN0ZWQgYmVmb3JlIGl0IHN0YXJ2ZXMgdG8gZGVhdGguDQorICogDQorICogQHBhcmFtIGV4cGlyYXRpb24gVGhlIG51bWJlciBvZiBzZWNvbmRzIGJlZm9yZSBzdGFydmF0aW9uIGZvbGxvd2luZyBhIG1lYWwgKHdhdGNoZG9nIHN0YXJ2ZXMgaWYgaXQgZG9lc24ndCBlYXQgdGhpcyBvZnRlbikuDQorICovDQordm9pZCBXYXRjaGRvZzo6U2V0RXhwaXJhdGlvbihkb3VibGUgZXhwaXJhdGlvbikNCit7DQorCXRSaW9TdGF0dXNDb2RlIGxvY2FsU3RhdHVzID0gTmlGcGdhX1N0YXR1c19TdWNjZXNzOw0KKwltX2ZwZ2FXYXRjaERvZy0+d3JpdGVFeHBpcmF0aW9uKChVSU5UMzIpKGV4cGlyYXRpb24gKiAoa1N5c3RlbUNsb2NrVGlja3NQZXJNaWNyb3NlY29uZCAqIDFlNikpLCAmbG9jYWxTdGF0dXMpOw0KKwl3cGlfc2V0RXJyb3IobG9jYWxTdGF0dXMpOw0KK30NCisNCisvKioNCisgKiBGaW5kIG91dCBpZiB0aGUgd2F0Y2hkb2cgaXMgY3VycmVudGx5IGVuYWJsZWQgb3IgZGlzYWJsZWQgKG1vcnRhbCBvciBpbW1vcnRhbCkuDQorICogDQorICogQHJldHVybiBFbmFibGVkIG9yIGRpc2FibGVkLg0KKyAqLw0KK2Jvb2wgV2F0Y2hkb2c6OkdldEVuYWJsZWQoKQ0KK3sNCisJdFJpb1N0YXR1c0NvZGUgbG9jYWxTdGF0dXMgPSBOaUZwZ2FfU3RhdHVzX1N1Y2Nlc3M7DQorCWJvb2wgZW5hYmxlZCA9ICFtX2ZwZ2FXYXRjaERvZy0+cmVhZEltbW9ydGFsKCZsb2NhbFN0YXR1cyk7DQorCXdwaV9zZXRFcnJvcihsb2NhbFN0YXR1cyk7DQorCXJldHVybiBlbmFibGVkOw0KK30NCisNCisvKioNCisgKiBFbmFibGUgb3IgZGlzYWJsZSB0aGUgd2F0Y2hkb2cgdGltZXIuDQorICogDQorICogV2hlbiBlbmFibGVkLCB5b3UgbXVzdCBrZWVwIGZlZWRpbmcgdGhlIHdhdGNoZG9nIHRpbWVyIHRvDQorICoga2VlcCB0aGUgd2F0Y2hkb2cgYWN0aXZlLCBhbmQgaGVuY2UgdGhlIGRhbmdlcm91cyBwYXJ0cyANCisgKiAobW90b3Igb3V0cHV0cywgZXRjLikgY2FuIGtlZXAgZnVuY3Rpb25pbmcuDQorICogV2hlbiBkaXNhYmxlZCwgdGhlIHdhdGNoZG9nIGlzIGltbW9ydGFsIGFuZCB3aWxsIHJlbWFpbiBhY3RpdmUNCisgKiBldmVuIHdpdGhvdXQgYmVpbmcgZmVkLiAgSXQgd2lsbCBhbHNvIGlnbm9yZSBhbnkga2lsbCBjb21tYW5kcw0KKyAqIHdoaWxlIGRpc2FibGVkLg0KKyAqIA0KKyAqIEBwYXJhbSBlbmFibGVkIEVuYWJsZSBvciBkaXNhYmxlIHRoZSB3YXRjaGRvZy4NCisgKi8NCit2b2lkIFdhdGNoZG9nOjpTZXRFbmFibGVkKGJvb2wgZW5hYmxlZCkNCit7DQorCXRSaW9TdGF0dXNDb2RlIGxvY2FsU3RhdHVzID0gTmlGcGdhX1N0YXR1c19TdWNjZXNzOw0KKwltX2ZwZ2FXYXRjaERvZy0+d3JpdGVJbW1vcnRhbCghZW5hYmxlZCwgJmxvY2FsU3RhdHVzKTsNCisJd3BpX3NldEVycm9yKGxvY2FsU3RhdHVzKTsNCit9DQorDQorLyoqDQorICogQ2hlY2sgaW4gb24gdGhlIHdhdGNoZG9nIGFuZCBtYWtlIHN1cmUgaGUncyBzdGlsbCBraWNraW5nLg0KKyAqIA0KKyAqIFRoaXMgaW5kaWNhdGVzIHRoYXQgeW91ciB3YXRjaGRvZyBpcyBhbGxvd2luZyB0aGUgc3lzdGVtIHRvIG9wZXJhdGUuDQorICogSXQgaXMgc3RpbGwgcG9zc2libGUgdGhhdCB0aGUgbmV0d29yayBjb21tdW5pY2F0aW9ucyBpcyBub3QgYWxsb3dpbmcgdGhlDQorICogc3lzdGVtIHRvIHJ1biwgYnV0IHlvdSBjYW4gY2hlY2sgdGhpcyB0byBtYWtlIHN1cmUgaXQncyBub3QgeW91ciBmYXVsdC4NCisgKiBDaGVjayBJc1N5c3RlbUFjdGl2ZSgpIGZvciBvdmVyYWxsIHN5c3RlbSBzdGF0dXMuDQorICogDQorICogSWYgdGhlIHdhdGNoZG9nIGlzIGRpc2FibGVkLCB0aGVuIHlvdXIgd2F0Y2hkb2cgaXMgaW1tb3J0YWwuDQorICogDQorICogQHJldHVybiBJcyB0aGUgd2F0Y2hkb2cgc3RpbGwgYWxpdmU/DQorICovDQorYm9vbCBXYXRjaGRvZzo6SXNBbGl2ZSgpDQorew0KKwl0UmlvU3RhdHVzQ29kZSBsb2NhbFN0YXR1cyA9IE5pRnBnYV9TdGF0dXNfU3VjY2VzczsNCisJYm9vbCBhbGl2ZSA9IG1fZnBnYVdhdGNoRG9nLT5yZWFkU3RhdHVzX0FsaXZlKCZsb2NhbFN0YXR1cyk7DQorCXdwaV9zZXRFcnJvcihsb2NhbFN0YXR1cyk7DQorCXJldHVybiBhbGl2ZTsNCit9DQorDQorLyoqDQorICogQ2hlY2sgb24gdGhlIG92ZXJhbGwgc3RhdHVzIG9mIHRoZSBzeXN0ZW0uDQorICogDQorICogQHJldHVybiBJcyB0aGUgc3lzdGVtIGFjdGl2ZSAoaS5lLiBQV00gbW90b3Igb3V0cHV0cywgZXRjLiBlbmFibGVkKT8NCisgKi8NCitib29sIFdhdGNoZG9nOjpJc1N5c3RlbUFjdGl2ZSgpDQorew0KKwl0UmlvU3RhdHVzQ29kZSBsb2NhbFN0YXR1cyA9IE5pRnBnYV9TdGF0dXNfU3VjY2VzczsNCisJYm9vbCBhbGl2ZSA9IG1fZnBnYVdhdGNoRG9nLT5yZWFkU3RhdHVzX1N5c3RlbUFjdGl2ZSgmbG9jYWxTdGF0dXMpOw0KKwl3cGlfc2V0RXJyb3IobG9jYWxTdGF0dXMpOw0KKwlyZXR1cm4gYWxpdmU7DQorfQ0KKw0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL1dhdGNoZG9nLmggYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9XYXRjaGRvZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyYjVjYWIKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9XYXRjaGRvZy5oCkBAIC0wLDAgKzEsNDcgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorLyogQ29weXJpZ2h0IChjKSBGSVJTVCAyMDA4LiBBbGwgUmlnaHRzIFJlc2VydmVkLgkJCQkJCQkgICovDQorLyogT3BlbiBTb3VyY2UgU29mdHdhcmUgLSBtYXkgYmUgbW9kaWZpZWQgYW5kIHNoYXJlZCBieSBGUkMgdGVhbXMuIFRoZSBjb2RlICAgKi8NCisvKiBtdXN0IGJlIGFjY29tcGFuaWVkIGJ5IHRoZSBGSVJTVCBCU0QgbGljZW5zZSBmaWxlIGluICQoV0lORF9CQVNFKS9XUElMaWIuICAqLw0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorI2lmbmRlZiBXQVRDSERPR19IDQorI2RlZmluZSBXQVRDSERPR19IDQorDQorI2luY2x1ZGUgIkNoaXBPYmplY3QuaCINCisjaW5jbHVkZSAiU2Vuc29yQmFzZS5oIg0KKyNpbmNsdWRlICJCYXNlLmgiDQorDQorLyoqDQorICogV2F0Y2hkb2cgdGltZXIgY2xhc3MuDQorICogVGhlIHdhdGNoZG9nIHRpbWVyIGlzIGRlc2lnbmVkIHRvIGtlZXAgdGhlIHJvYm90cyBzYWZlLiBUaGUgaWRlYSBpcyB0aGF0IHRoZSByb2JvdCBwcm9ncmFtIG11c3QNCisgKiBjb25zdGFudGx5ICJmZWVkIiB0aGUgd2F0Y2hkb2cgb3RoZXJ3aXNlIGl0IHdpbGwgc2h1dCBkb3duIGFsbCB0aGUgbW90b3Igb3V0cHV0cy4gVGhhdCB3YXkgaWYgYQ0KKyAqIHByb2dyYW0gYnJlYWtzLCByYXRoZXIgdGhhbiBoYXZpbmcgdGhlIHJvYm90IGNvbnRpbnVlIHRvIG9wZXJhdGUgYXQgdGhlIGxhc3Qga25vd24gc3BlZWQsIHRoZQ0KKyAqIG1vdG9ycyB3aWxsIGJlIHNodXQgZG93bi4NCisgKiANCisgKiBUaGlzIGlzIHNlcmlvdXMgYnVzaW5lc3MuICBEb24ndCBqdXN0IGRpc2FibGUgdGhlIHdhdGNoZG9nLiAgWW91IGNhbid0IGFmZm9yZCBpdCENCisgKiANCisgKiBodHRwOi8vdGhlZGFpbHl3dGYuY29tL0FydGljbGVzL18weDJmX18weDJmX1RPRE9fMHgzYV9fVW5jb21tZW50X0xhdGVyLmFzcHgNCisgKi8NCitjbGFzcyBXYXRjaGRvZyA6IHB1YmxpYyBTZW5zb3JCYXNlDQorew0KK3B1YmxpYzoNCisJc3RhdGljIGNvbnN0IGRvdWJsZSBrRGVmYXVsdFdhdGNoZG9nRXhwaXJhdGlvbiA9IDAuNTsNCisNCisJV2F0Y2hkb2coKTsNCisJdmlydHVhbCB+V2F0Y2hkb2coKTsNCisJYm9vbCBGZWVkKCk7DQorCXZvaWQgS2lsbCgpOw0KKwlkb3VibGUgR2V0VGltZXIoKTsNCisJZG91YmxlIEdldEV4cGlyYXRpb24oKTsNCisJdm9pZCBTZXRFeHBpcmF0aW9uKGRvdWJsZSBleHBpcmF0aW9uKTsNCisJYm9vbCBHZXRFbmFibGVkKCk7DQorCXZvaWQgU2V0RW5hYmxlZChib29sIGVuYWJsZWQpOw0KKwlib29sIElzQWxpdmUoKTsNCisJYm9vbCBJc1N5c3RlbUFjdGl2ZSgpOw0KKw0KK3ByaXZhdGU6DQorCXRXYXRjaGRvZyAqbV9mcGdhV2F0Y2hEb2c7DQorCURJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihXYXRjaGRvZyk7DQorfTsNCisNCisjZW5kaWYNCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9uZXR3b3JrdGFibGVzL05ldHdvcmtUYWJsZS5jcHAgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9uZXR3b3JrdGFibGVzL05ldHdvcmtUYWJsZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjE0YjU5MAotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL25ldHdvcmt0YWJsZXMvTmV0d29ya1RhYmxlLmNwcApAQCAtMCwwICsxLDMwNSBAQAorI2luY2x1ZGUgPG1hcD4NCisjaW5jbHVkZSAibmV0d29ya3RhYmxlcy9OZXR3b3JrVGFibGUuaCINCisjaW5jbHVkZSA8c3RyaW5nPg0KKyNpbmNsdWRlICJuZXR3b3JrdGFibGVzMi90aHJlYWQvTlRUaHJlYWRNYW5hZ2VyLmgiDQorI2luY2x1ZGUgIm5ldHdvcmt0YWJsZXMyL3RocmVhZC9EZWZhdWx0VGhyZWFkTWFuYWdlci5oIg0KKyNpbmNsdWRlICJuZXR3b3JrdGFibGVzMi9OZXR3b3JrVGFibGVFbnRyeS5oIg0KKyNpbmNsdWRlICJuZXR3b3JrdGFibGVzMi91dGlsL1N0cmluZ0NhY2hlLmgiDQorI2luY2x1ZGUgIm5ldHdvcmt0YWJsZXMvTmV0d29ya1RhYmxlUHJvdmlkZXIuaCINCisjaW5jbHVkZSAibmV0d29ya3RhYmxlcy9OZXR3b3JrVGFibGVNb2RlLmgiDQorI2luY2x1ZGUgIlN5bmNocm9uaXplZC5oIg0KKyNpbmNsdWRlICJ0YWJsZXMvVGFibGVLZXlOb3REZWZpbmVkRXhjZXB0aW9uLmgiDQorI2luY2x1ZGUgIm5ldHdvcmt0YWJsZXMyL3R5cGUvRGVmYXVsdEVudHJ5VHlwZXMuaCINCisjaW5jbHVkZSAidGFibGVzL0lUYWJsZUxpc3RlbmVyLmgiDQorI2luY2x1ZGUgIm5ldHdvcmt0YWJsZXMvTmV0d29ya1RhYmxlQ29ubmVjdGlvbkxpc3RlbmVyQWRhcHRlci5oIg0KKyNpbmNsdWRlICJuZXR3b3JrdGFibGVzL05ldHdvcmtUYWJsZUtleUxpc3RlbmVyQWRhcHRlci5oIg0KKyNpbmNsdWRlICJuZXR3b3JrdGFibGVzL05ldHdvcmtUYWJsZUxpc3RlbmVyQWRhcHRlci5oIg0KKyNpbmNsdWRlICJuZXR3b3JrdGFibGVzL05ldHdvcmtUYWJsZVN1Ykxpc3RlbmVyQWRhcHRlci5oIg0KKw0KKw0KK2NvbnN0IGNoYXIgTmV0d29ya1RhYmxlOjpQQVRIX1NFUEFSQVRPUl9DSEFSID0gJy8nOw0KK2NvbnN0IHN0ZDo6c3RyaW5nIE5ldHdvcmtUYWJsZTo6UEFUSF9TRVBBUkFUT1IoIi8iKTsNCitjb25zdCBpbnQgTmV0d29ya1RhYmxlOjpERUZBVUxUX1BPUlQgPSAxNzM1Ow0KKw0KK0RlZmF1bHRUaHJlYWRNYW5hZ2VyIE5ldHdvcmtUYWJsZTo6dGhyZWFkTWFuYWdlcjsNCitOZXR3b3JrVGFibGVQcm92aWRlciogTmV0d29ya1RhYmxlOjpzdGF0aWNQcm92aWRlciA9IE5VTEw7DQorTmV0d29ya1RhYmxlTW9kZSogTmV0d29ya1RhYmxlOjptb2RlID0gJk5ldHdvcmtUYWJsZU1vZGU6OlNlcnZlcjsNCitpbnQgTmV0d29ya1RhYmxlOjpwb3J0ID0gREVGQVVMVF9QT1JUOw0KK3N0ZDo6c3RyaW5nIE5ldHdvcmtUYWJsZTo6aXBBZGRyZXNzOw0KK1JlZW50cmFudFNlbWFwaG9yZSBOZXR3b3JrVGFibGU6OlNUQVRJQ19MT0NLOw0KKw0KKw0KKw0KKw0KKw0KKw0KK3ZvaWQgTmV0d29ya1RhYmxlOjpDaGVja0luaXQoKXsNCisJeyANCisJCVN5bmNocm9uaXplZCBzeW5jKFNUQVRJQ19MT0NLKTsNCisJCWlmKHN0YXRpY1Byb3ZpZGVyIT1OVUxMKQ0KKwkJCXRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIk5ldHdvcmsgdGFibGVzIGhhcyBhbHJlYWR5IGJlZW4gaW5pdGlhbGl6ZWQiKTsNCisJfQ0KK30NCisNCit2b2lkIE5ldHdvcmtUYWJsZTo6SW5pdGlhbGl6ZSgpIHsNCisJQ2hlY2tJbml0KCk7DQorCXN0YXRpY1Byb3ZpZGVyID0gbmV3IE5ldHdvcmtUYWJsZVByb3ZpZGVyKCoobW9kZS0+Q3JlYXRlTm9kZShpcEFkZHJlc3MuY19zdHIoKSwgcG9ydCwgdGhyZWFkTWFuYWdlcikpKTsNCit9DQorDQordm9pZCBOZXR3b3JrVGFibGU6OlNldFRhYmxlUHJvdmlkZXIoTmV0d29ya1RhYmxlUHJvdmlkZXIqIHByb3ZpZGVyKXsNCisJQ2hlY2tJbml0KCk7DQorCXN0YXRpY1Byb3ZpZGVyID0gcHJvdmlkZXI7DQorfQ0KKw0KK3ZvaWQgTmV0d29ya1RhYmxlOjpTZXRDbGllbnRNb2RlKCl7DQorCUNoZWNrSW5pdCgpOw0KKwltb2RlID0gJk5ldHdvcmtUYWJsZU1vZGU6OlNlcnZlcjsNCit9DQorDQordm9pZCBOZXR3b3JrVGFibGU6OlNldFNlcnZlck1vZGUoKXsNCisJQ2hlY2tJbml0KCk7DQorCW1vZGUgPSAmTmV0d29ya1RhYmxlTW9kZTo6U2VydmVyOw0KK30NCisNCit2b2lkIE5ldHdvcmtUYWJsZTo6U2V0VGVhbShpbnQgdGVhbSl7DQorCWNoYXIgdG1wWzMwXTsNCisJc3ByaW50Zih0bXAsICIlZC4lZC4lZC4lZFxuIiwgMTAsIHRlYW0vMTAwLCB0ZWFtJTEwMCwgMik7DQorCVNldElQQWRkcmVzcyh0bXApOw0KK30NCisNCit2b2lkIE5ldHdvcmtUYWJsZTo6U2V0SVBBZGRyZXNzKGNvbnN0IGNoYXIqIGFkZHJlc3Mpew0KKwlDaGVja0luaXQoKTsNCisJaXBBZGRyZXNzID0gYWRkcmVzczsNCit9DQorDQorTmV0d29ya1RhYmxlKiBOZXR3b3JrVGFibGU6OkdldFRhYmxlKHN0ZDo6c3RyaW5nIGtleSkgew0KKwlpZihzdGF0aWNQcm92aWRlcj09TlVMTCl7DQorCQlJbml0aWFsaXplKCk7DQorCX0NCisJc3RkOjpzdHJpbmcgdG1wKFBBVEhfU0VQQVJBVE9SKTsNCisJdG1wKz1rZXk7DQorCXJldHVybiAoTmV0d29ya1RhYmxlKilzdGF0aWNQcm92aWRlci0+R2V0VGFibGUodG1wKTsNCit9DQorDQorDQorDQorTmV0d29ya1RhYmxlOjpOZXR3b3JrVGFibGUoc3RkOjpzdHJpbmcgX3BhdGgsIE5ldHdvcmtUYWJsZVByb3ZpZGVyJiBfcHJvdmlkZXIpIDoNCisJCXBhdGgoX3BhdGgpLCBlbnRyeUNhY2hlKF9wYXRoKSwgYWJzb2x1dGVLZXlDYWNoZShfcGF0aCksIHByb3ZpZGVyKF9wcm92aWRlciksIG5vZGUocHJvdmlkZXIuR2V0Tm9kZSgpKSB7DQorfQ0KK05ldHdvcmtUYWJsZTo6fk5ldHdvcmtUYWJsZSgpew0KK30NCisNCitib29sIE5ldHdvcmtUYWJsZTo6SXNDb25uZWN0ZWQoKSB7DQorCXJldHVybiBub2RlLklzQ29ubmVjdGVkKCk7DQorfQ0KKw0KK2Jvb2wgTmV0d29ya1RhYmxlOjpJc1NlcnZlcigpIHsNCisJcmV0dXJuIG5vZGUuSXNTZXJ2ZXIoKTsNCit9DQorDQorDQordm9pZCBOZXR3b3JrVGFibGU6OkFkZENvbm5lY3Rpb25MaXN0ZW5lcihJUmVtb3RlQ29ubmVjdGlvbkxpc3RlbmVyKiBsaXN0ZW5lciwgYm9vbCBpbW1lZGlhdGVOb3RpZnkpIHsNCisJbWFwPElSZW1vdGVDb25uZWN0aW9uTGlzdGVuZXIqLCBOZXR3b3JrVGFibGVDb25uZWN0aW9uTGlzdGVuZXJBZGFwdGVyKj46Oml0ZXJhdG9yIGl0ciA9IGNvbm5lY3Rpb25MaXN0ZW5lck1hcC5maW5kKGxpc3RlbmVyKTsNCisJaWYoaXRyICE9IGNvbm5lY3Rpb25MaXN0ZW5lck1hcC5lbmQoKSl7DQorCQl0aHJvdyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIkNhbm5vdCBhZGQgdGhlIHNhbWUgbGlzdGVuZXIgdHdpY2UiKTsNCisJfQ0KKwllbHNlew0KKwkJTmV0d29ya1RhYmxlQ29ubmVjdGlvbkxpc3RlbmVyQWRhcHRlciogYWRhcHRlciA9IG5ldyBOZXR3b3JrVGFibGVDb25uZWN0aW9uTGlzdGVuZXJBZGFwdGVyKHRoaXMsIGxpc3RlbmVyKTsNCisJCWNvbm5lY3Rpb25MaXN0ZW5lck1hcFtsaXN0ZW5lcl0gPSBhZGFwdGVyOw0KKwkJbm9kZS5BZGRDb25uZWN0aW9uTGlzdGVuZXIoYWRhcHRlciwgaW1tZWRpYXRlTm90aWZ5KTsNCisJfQ0KK30NCisNCit2b2lkIE5ldHdvcmtUYWJsZTo6UmVtb3ZlQ29ubmVjdGlvbkxpc3RlbmVyKElSZW1vdGVDb25uZWN0aW9uTGlzdGVuZXIqIGxpc3RlbmVyKSB7DQorCW1hcDxJUmVtb3RlQ29ubmVjdGlvbkxpc3RlbmVyKiwgTmV0d29ya1RhYmxlQ29ubmVjdGlvbkxpc3RlbmVyQWRhcHRlcio+OjppdGVyYXRvciBpdHIgPSBjb25uZWN0aW9uTGlzdGVuZXJNYXAuZmluZChsaXN0ZW5lcik7DQorCWlmKGl0ciAhPSBjb25uZWN0aW9uTGlzdGVuZXJNYXAuZW5kKCkpew0KKwkJbm9kZS5SZW1vdmVDb25uZWN0aW9uTGlzdGVuZXIoaXRyLT5zZWNvbmQpOw0KKwkJZGVsZXRlIGl0ci0+c2Vjb25kOw0KKwkJY29ubmVjdGlvbkxpc3RlbmVyTWFwLmVyYXNlKGl0cik7DQorCX0NCit9DQorDQorDQordm9pZCBOZXR3b3JrVGFibGU6OkFkZFRhYmxlTGlzdGVuZXIoSVRhYmxlTGlzdGVuZXIqIGxpc3RlbmVyKSB7DQorCUFkZFRhYmxlTGlzdGVuZXIobGlzdGVuZXIsIGZhbHNlKTsNCit9DQorDQordm9pZCBOZXR3b3JrVGFibGU6OkFkZFRhYmxlTGlzdGVuZXIoSVRhYmxlTGlzdGVuZXIqIGxpc3RlbmVyLCBib29sIGltbWVkaWF0ZU5vdGlmeSkgew0KKwlzdGQ6OnN0cmluZyB0bXAocGF0aCk7DQorCXRtcCs9UEFUSF9TRVBBUkFUT1I7DQorCU5ldHdvcmtUYWJsZUxpc3RlbmVyQWRhcHRlciogYWRhcHRlciA9IG5ldyBOZXR3b3JrVGFibGVMaXN0ZW5lckFkYXB0ZXIodG1wLCB0aGlzLCBsaXN0ZW5lcik7DQorCWxpc3RlbmVyTWFwLmluc2VydCAoIHBhaXI8SVRhYmxlTGlzdGVuZXIqLElUYWJsZUxpc3RlbmVyKj4obGlzdGVuZXIsIGFkYXB0ZXIpICk7DQorCW5vZGUuQWRkVGFibGVMaXN0ZW5lcihhZGFwdGVyLCBpbW1lZGlhdGVOb3RpZnkpOw0KK30NCit2b2lkIE5ldHdvcmtUYWJsZTo6QWRkVGFibGVMaXN0ZW5lcihzdGQ6OnN0cmluZyBrZXksIElUYWJsZUxpc3RlbmVyKiBsaXN0ZW5lciwgYm9vbCBpbW1lZGlhdGVOb3RpZnkpIHsNCisJTmV0d29ya1RhYmxlS2V5TGlzdGVuZXJBZGFwdGVyKiBhZGFwdGVyID0gbmV3IE5ldHdvcmtUYWJsZUtleUxpc3RlbmVyQWRhcHRlcihrZXksIGFic29sdXRlS2V5Q2FjaGUuR2V0KGtleSksIHRoaXMsIGxpc3RlbmVyKTsNCisJbGlzdGVuZXJNYXAuaW5zZXJ0ICggcGFpcjxJVGFibGVMaXN0ZW5lciosSVRhYmxlTGlzdGVuZXIqPihsaXN0ZW5lciwgYWRhcHRlcikgKTsNCisJbm9kZS5BZGRUYWJsZUxpc3RlbmVyKGFkYXB0ZXIsIGltbWVkaWF0ZU5vdGlmeSk7DQorfQ0KK3ZvaWQgTmV0d29ya1RhYmxlOjpBZGRTdWJUYWJsZUxpc3RlbmVyKElUYWJsZUxpc3RlbmVyKiBsaXN0ZW5lcikgew0KKwlOZXR3b3JrVGFibGVTdWJMaXN0ZW5lckFkYXB0ZXIqIGFkYXB0ZXIgPSBuZXcgTmV0d29ya1RhYmxlU3ViTGlzdGVuZXJBZGFwdGVyKHBhdGgsIHRoaXMsIGxpc3RlbmVyKTsNCisJbGlzdGVuZXJNYXAuaW5zZXJ0ICggcGFpcjxJVGFibGVMaXN0ZW5lciosSVRhYmxlTGlzdGVuZXIqPihsaXN0ZW5lciwgYWRhcHRlcikgKTsNCisJbm9kZS5BZGRUYWJsZUxpc3RlbmVyKGFkYXB0ZXIsIHRydWUpOw0KK30NCisNCit2b2lkIE5ldHdvcmtUYWJsZTo6UmVtb3ZlVGFibGVMaXN0ZW5lcihJVGFibGVMaXN0ZW5lciogbGlzdGVuZXIpIHsNCisJbXVsdGltYXA8SVRhYmxlTGlzdGVuZXIqLElUYWJsZUxpc3RlbmVyKj46Oml0ZXJhdG9yIGl0cjsNCisJcGFpcjxtdWx0aW1hcDxJVGFibGVMaXN0ZW5lciosSVRhYmxlTGlzdGVuZXIqPjo6aXRlcmF0b3IsbXVsdGltYXA8SVRhYmxlTGlzdGVuZXIqLElUYWJsZUxpc3RlbmVyKj46Oml0ZXJhdG9yPiBpdHJzID0gbGlzdGVuZXJNYXAuZXF1YWxfcmFuZ2UobGlzdGVuZXIpOw0KKwlmb3IgKGl0cj1pdHJzLmZpcnN0OyBpdHIhPWl0cnMuc2Vjb25kOyArK2l0cil7DQorCQlub2RlLlJlbW92ZVRhYmxlTGlzdGVuZXIoaXRyLT5zZWNvbmQpOw0KKwkJZGVsZXRlIGl0ci0+c2Vjb25kOw0KKwl9DQorCWxpc3RlbmVyTWFwLmVyYXNlKGl0cnMuZmlyc3QsIGl0cnMuc2Vjb25kKTsNCit9DQorDQorTmV0d29ya1RhYmxlRW50cnkqIE5ldHdvcmtUYWJsZTo6R2V0RW50cnkoc3RkOjpzdHJpbmcga2V5KXsNCisJeyANCisJCVN5bmNocm9uaXplZCBzeW5jKExPQ0spOw0KKwkJcmV0dXJuIGVudHJ5Q2FjaGUuR2V0KGtleSk7DQorCX0NCit9DQorDQorDQorTmV0d29ya1RhYmxlKiBOZXR3b3JrVGFibGU6OkdldFN1YlRhYmxlKHN0ZDo6c3RyaW5nIGtleSkgew0KKwl7IA0KKwkJU3luY2hyb25pemVkIHN5bmMoTE9DSyk7DQorCQlyZXR1cm4gKE5ldHdvcmtUYWJsZSopcHJvdmlkZXIuR2V0VGFibGUoYWJzb2x1dGVLZXlDYWNoZS5HZXQoa2V5KSk7DQorCX0NCit9DQorDQorDQorYm9vbCBOZXR3b3JrVGFibGU6OkNvbnRhaW5zS2V5KHN0ZDo6c3RyaW5nIGtleSkgew0KKwlyZXR1cm4gbm9kZS5Db250YWluc0tleShhYnNvbHV0ZUtleUNhY2hlLkdldChrZXkpKTsNCit9DQorCQ0KK2Jvb2wgTmV0d29ya1RhYmxlOjpDb250YWluc1N1YlRhYmxlKHN0ZDo6c3RyaW5nIGtleSl7DQorICAgICAgICBzdGQ6OnN0cmluZyBzdWJ0YWJsZVByZWZpeChhYnNvbHV0ZUtleUNhY2hlLkdldChrZXkpKTsNCisgICAgICAgIHN1YnRhYmxlUHJlZml4Kz1QQVRIX1NFUEFSQVRPUjsNCisJc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+KiBrZXlzID0gbm9kZS5HZXRFbnRyeVN0b3JlKCkua2V5cygpOw0KKwlmb3IodW5zaWduZWQgaW50IGkgPSAwOyBpPGtleXMtPnNpemUoKTsgKytpKXsNCisJCWlmKGtleXMtPmF0KGkpLmNvbXBhcmUoMCwgc3VidGFibGVQcmVmaXguc2l6ZSgpLCBzdWJ0YWJsZVByZWZpeCk9PTApew0KKwkJCWRlbGV0ZSBrZXlzOw0KKwkJCXJldHVybiB0cnVlOw0KKwkJfQ0KKwl9DQorCWRlbGV0ZSBrZXlzOw0KKwlyZXR1cm4gZmFsc2U7DQorfQ0KKw0KKw0KK3ZvaWQgTmV0d29ya1RhYmxlOjpQdXROdW1iZXIoc3RkOjpzdHJpbmcga2V5LCBkb3VibGUgdmFsdWUpIHsNCisJRW50cnlWYWx1ZSBlVmFsdWU7DQorCWVWYWx1ZS5mID0gdmFsdWU7DQorCVB1dFZhbHVlKGtleSwgJkRlZmF1bHRFbnRyeVR5cGVzOjpET1VCTEUsIGVWYWx1ZSk7DQorfQ0KKw0KKw0KK2RvdWJsZSBOZXR3b3JrVGFibGU6OkdldE51bWJlcihzdGQ6OnN0cmluZyBrZXkpIHsNCisJcmV0dXJuIG5vZGUuR2V0RG91YmxlKGFic29sdXRlS2V5Q2FjaGUuR2V0KGtleSkpOw0KK30NCisNCisNCitkb3VibGUgTmV0d29ya1RhYmxlOjpHZXROdW1iZXIoc3RkOjpzdHJpbmcga2V5LCBkb3VibGUgZGVmYXVsdFZhbHVlKSB7DQorCXRyeSB7DQorCQlyZXR1cm4gbm9kZS5HZXREb3VibGUoYWJzb2x1dGVLZXlDYWNoZS5HZXQoa2V5KSk7DQorCX0gY2F0Y2ggKFRhYmxlS2V5Tm90RGVmaW5lZEV4Y2VwdGlvbiYgZSkgew0KKwkJcmV0dXJuIGRlZmF1bHRWYWx1ZTsNCisJfQ0KK30NCisNCisNCit2b2lkIE5ldHdvcmtUYWJsZTo6UHV0U3RyaW5nKHN0ZDo6c3RyaW5nIGtleSwgc3RkOjpzdHJpbmcgdmFsdWUpIHsNCisJRW50cnlWYWx1ZSBlVmFsdWU7DQorCWVWYWx1ZS5wdHIgPSAmdmFsdWU7DQorCVB1dFZhbHVlKGtleSwgJkRlZmF1bHRFbnRyeVR5cGVzOjpTVFJJTkcsIGVWYWx1ZSk7DQorfQ0KKw0KKw0KK3N0ZDo6c3RyaW5nIE5ldHdvcmtUYWJsZTo6R2V0U3RyaW5nKHN0ZDo6c3RyaW5nIGtleSkgew0KKwlyZXR1cm4gbm9kZS5HZXRTdHJpbmcoYWJzb2x1dGVLZXlDYWNoZS5HZXQoa2V5KSk7DQorfQ0KKw0KKw0KK3N0ZDo6c3RyaW5nIE5ldHdvcmtUYWJsZTo6R2V0U3RyaW5nKHN0ZDo6c3RyaW5nIGtleSwgc3RkOjpzdHJpbmcgZGVmYXVsdFZhbHVlKSB7DQorCXRyeSB7DQorCQlyZXR1cm4gbm9kZS5HZXRTdHJpbmcoYWJzb2x1dGVLZXlDYWNoZS5HZXQoa2V5KSk7DQorCX0gY2F0Y2ggKFRhYmxlS2V5Tm90RGVmaW5lZEV4Y2VwdGlvbiYgZSkgew0KKwkJcmV0dXJuIGRlZmF1bHRWYWx1ZTsNCisJfQ0KK30NCisNCisNCit2b2lkIE5ldHdvcmtUYWJsZTo6UHV0Qm9vbGVhbihzdGQ6OnN0cmluZyBrZXksIGJvb2wgdmFsdWUpIHsNCisJRW50cnlWYWx1ZSBlVmFsdWU7DQorCWVWYWx1ZS5iID0gdmFsdWU7DQorCVB1dFZhbHVlKGtleSwgJkRlZmF1bHRFbnRyeVR5cGVzOjpCT09MRUFOLCBlVmFsdWUpOw0KK30NCisNCisNCitib29sIE5ldHdvcmtUYWJsZTo6R2V0Qm9vbGVhbihzdGQ6OnN0cmluZyBrZXkpIHsNCisJcmV0dXJuIG5vZGUuR2V0Qm9vbGVhbihhYnNvbHV0ZUtleUNhY2hlLkdldChrZXkpKTsNCit9DQorDQorDQorYm9vbCBOZXR3b3JrVGFibGU6OkdldEJvb2xlYW4oc3RkOjpzdHJpbmcga2V5LCBib29sIGRlZmF1bHRWYWx1ZSkgew0KKwl0cnkgew0KKwkJcmV0dXJuIG5vZGUuR2V0Qm9vbGVhbihhYnNvbHV0ZUtleUNhY2hlLkdldChrZXkpKTsNCisJfSBjYXRjaCAoVGFibGVLZXlOb3REZWZpbmVkRXhjZXB0aW9uJiBlKSB7DQorCQlyZXR1cm4gZGVmYXVsdFZhbHVlOw0KKwl9DQorfQ0KKw0KK3ZvaWQgTmV0d29ya1RhYmxlOjpQdXRWYWx1ZShzdGQ6OnN0cmluZyBrZXksIE5ldHdvcmtUYWJsZUVudHJ5VHlwZSogdHlwZSwgRW50cnlWYWx1ZSB2YWx1ZSl7DQorCU5ldHdvcmtUYWJsZUVudHJ5KiBlbnRyeSA9IGVudHJ5Q2FjaGUuR2V0KGtleSk7DQorCWlmKGVudHJ5IT1OVUxMKQ0KKwkJbm9kZS5QdXRWYWx1ZShlbnRyeSwgdmFsdWUpOy8vVE9ETyBwYXNzIHR5cGUgYWxvbmcgb3IgZG8gc29tZSBraW5kIG9mIHR5cGUgY2hlY2sNCisJZWxzZQ0KKwkJbm9kZS5QdXRWYWx1ZShhYnNvbHV0ZUtleUNhY2hlLkdldChrZXkpLCB0eXBlLCB2YWx1ZSk7DQorfQ0KKw0KK3ZvaWQgTmV0d29ya1RhYmxlOjpSZXRyaWV2ZVZhbHVlKHN0ZDo6c3RyaW5nIGtleSwgQ29tcGxleERhdGEmIGV4dGVybmFsVmFsdWUpIHsNCisJbm9kZS5yZXRyaWV2ZVZhbHVlKGFic29sdXRlS2V5Q2FjaGUuR2V0KGtleSksIGV4dGVybmFsVmFsdWUpOw0KK30NCisNCisNCit2b2lkIE5ldHdvcmtUYWJsZTo6UHV0VmFsdWUoc3RkOjpzdHJpbmcga2V5LCBDb21wbGV4RGF0YSYgdmFsdWUpew0KKwlFbnRyeVZhbHVlIGVWYWx1ZTsNCisJZVZhbHVlLnB0ciA9ICZ2YWx1ZTsNCisJUHV0VmFsdWUoa2V5LCAmdmFsdWUuR2V0VHlwZSgpLCBlVmFsdWUpOw0KK30NCisNCisNCitFbnRyeVZhbHVlIE5ldHdvcmtUYWJsZTo6R2V0VmFsdWUoc3RkOjpzdHJpbmcga2V5KSB7DQorCXJldHVybiBub2RlLkdldFZhbHVlKGFic29sdXRlS2V5Q2FjaGUuR2V0KGtleSkpOw0KK30NCisNCitFbnRyeVZhbHVlIE5ldHdvcmtUYWJsZTo6R2V0VmFsdWUoc3RkOjpzdHJpbmcga2V5LCBFbnRyeVZhbHVlIGRlZmF1bHRWYWx1ZSkgew0KKwl0cnkgew0KKwkJcmV0dXJuIG5vZGUuR2V0VmFsdWUoYWJzb2x1dGVLZXlDYWNoZS5HZXQoa2V5KSk7DQorCX0gY2F0Y2goVGFibGVLZXlOb3REZWZpbmVkRXhjZXB0aW9uJiBlKXsNCisJCXJldHVybiBkZWZhdWx0VmFsdWU7DQorCX0NCit9DQorDQorDQorDQorDQorDQorDQorLy9OZXR3b3JrVGFibGVLZXlDYWNoZQ0KK05ldHdvcmtUYWJsZUtleUNhY2hlOjpOZXR3b3JrVGFibGVLZXlDYWNoZShzdGQ6OnN0cmluZyBfcGF0aCk6cGF0aChfcGF0aCl7fQ0KK05ldHdvcmtUYWJsZUtleUNhY2hlOjp+TmV0d29ya1RhYmxlS2V5Q2FjaGUoKXt9DQorc3RkOjpzdHJpbmcgTmV0d29ya1RhYmxlS2V5Q2FjaGU6OkNhbGMoY29uc3Qgc3RkOjpzdHJpbmcmIGtleSl7DQorICBzdGQ6OnN0cmluZyB0bXAocGF0aCk7DQorICB0bXArPU5ldHdvcmtUYWJsZTo6UEFUSF9TRVBBUkFUT1I7DQorICB0bXArPWtleTsNCisgIHJldHVybiB0bXA7DQorfQ0KKy8vRW50cnkgQ2FjaGUNCitFbnRyeUNhY2hlOjpFbnRyeUNhY2hlKHN0ZDo6c3RyaW5nJiBfcGF0aCk6cGF0aChfcGF0aCl7fQ0KK0VudHJ5Q2FjaGU6On5FbnRyeUNhY2hlKCl7fQ0KKw0KK05ldHdvcmtUYWJsZUVudHJ5KiBFbnRyeUNhY2hlOjpHZXQoc3RkOjpzdHJpbmcmIGtleSl7DQorCXJldHVybiBjYWNoZVtrZXldOw0KK30NCisNCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9uZXR3b3JrdGFibGVzL05ldHdvcmtUYWJsZS5oIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvbmV0d29ya3RhYmxlcy9OZXR3b3JrVGFibGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjQ0ZmNkCi0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvbmV0d29ya3RhYmxlcy9OZXR3b3JrVGFibGUuaApAQCAtMCwwICsxLDMzNyBAQAorI2lmbmRlZiBfTkVUV09SS1RBQkxFX0hfDQorI2RlZmluZSBfTkVUV09SS1RBQkxFX0hfDQorDQorY2xhc3MgTmV0d29ya1RhYmxlOw0KK2NsYXNzIE5ldHdvcmtUYWJsZUtleUNhY2hlOw0KK2NsYXNzIEVudHJ5Q2FjaGU7DQorDQorI2luY2x1ZGUgPG1hcD4NCisjaW5jbHVkZSA8c3RyaW5nPg0KKyNpbmNsdWRlICJ0YWJsZXMvSVRhYmxlLmgiDQorI2luY2x1ZGUgInRhYmxlcy9JUmVtb3RlLmgiDQorI2luY2x1ZGUgIm5ldHdvcmt0YWJsZXMyL3RocmVhZC9OVFRocmVhZE1hbmFnZXIuaCINCisjaW5jbHVkZSAibmV0d29ya3RhYmxlczIvTmV0d29ya1RhYmxlRW50cnkuaCINCisjaW5jbHVkZSAibmV0d29ya3RhYmxlczIvdXRpbC9TdHJpbmdDYWNoZS5oIg0KKyNpbmNsdWRlICJuZXR3b3JrdGFibGVzL05ldHdvcmtUYWJsZVByb3ZpZGVyLmgiDQorI2luY2x1ZGUgIm5ldHdvcmt0YWJsZXMvTmV0d29ya1RhYmxlTW9kZS5oIg0KKyNpbmNsdWRlICJuZXR3b3JrdGFibGVzMi90aHJlYWQvRGVmYXVsdFRocmVhZE1hbmFnZXIuaCINCisjaW5jbHVkZSAibmV0d29ya3RhYmxlcy9OZXR3b3JrVGFibGVDb25uZWN0aW9uTGlzdGVuZXJBZGFwdGVyLmgiDQorI2luY2x1ZGUgIm5ldHdvcmt0YWJsZXMvTmV0d29ya1RhYmxlTGlzdGVuZXJBZGFwdGVyLmgiDQorI2luY2x1ZGUgInRhYmxlcy9JUmVtb3RlQ29ubmVjdGlvbkxpc3RlbmVyLmgiDQorDQorDQorDQordXNpbmcgbmFtZXNwYWNlIHN0ZDsNCisNCisNCisNCitjbGFzcyBOZXR3b3JrVGFibGVLZXlDYWNoZTogcHVibGljIFN0cmluZ0NhY2hlew0KK3ByaXZhdGU6DQorCWNvbnN0IHN0ZDo6c3RyaW5nIHBhdGg7DQorDQorcHVibGljOiANCisJTmV0d29ya1RhYmxlS2V5Q2FjaGUoc3RkOjpzdHJpbmcgcGF0aCk7DQorCX5OZXR3b3JrVGFibGVLZXlDYWNoZSgpOw0KKw0KKwlzdGQ6OnN0cmluZyBDYWxjKGNvbnN0IHN0ZDo6c3RyaW5nJiBrZXkpOw0KK307DQorDQorDQorY2xhc3MgRW50cnlDYWNoZSB7DQorcHJpdmF0ZToNCisJbWFwPHN0ZDo6c3RyaW5nLCBOZXR3b3JrVGFibGVFbnRyeSo+IGNhY2hlOw0KKwlzdGQ6OnN0cmluZyYgcGF0aDsNCitwdWJsaWM6DQorCUVudHJ5Q2FjaGUoc3RkOjpzdHJpbmcmIHBhdGgpOw0KKwl+RW50cnlDYWNoZSgpOw0KKwkNCisJTmV0d29ya1RhYmxlRW50cnkqIEdldChzdGQ6OnN0cmluZyYga2V5KTsNCit9Ow0KKw0KKw0KKw0KK2NsYXNzIE5ldHdvcmtUYWJsZSA6IHB1YmxpYyBJVGFibGUsIElSZW1vdGUgew0KKwkNCitwcml2YXRlOg0KKwlzdGF0aWMgRGVmYXVsdFRocmVhZE1hbmFnZXIgdGhyZWFkTWFuYWdlcjsNCisJc3RhdGljIE5ldHdvcmtUYWJsZVByb3ZpZGVyKiBzdGF0aWNQcm92aWRlcjsNCisJc3RhdGljIE5ldHdvcmtUYWJsZU1vZGUqIG1vZGU7DQorCXN0YXRpYyBpbnQgcG9ydDsNCisJc3RhdGljIHN0ZDo6c3RyaW5nIGlwQWRkcmVzczsNCisJc3RhdGljIFJlZW50cmFudFNlbWFwaG9yZSBTVEFUSUNfTE9DSzsNCisJDQorCQ0KKwkNCisJc3RkOjpzdHJpbmcgcGF0aDsNCisJRW50cnlDYWNoZSBlbnRyeUNhY2hlOw0KKwlOZXR3b3JrVGFibGVLZXlDYWNoZSBhYnNvbHV0ZUtleUNhY2hlOw0KKwlOZXR3b3JrVGFibGVQcm92aWRlciYgcHJvdmlkZXI7DQorCU5ldHdvcmtUYWJsZU5vZGUmIG5vZGU7DQorCVJlZW50cmFudFNlbWFwaG9yZSBMT0NLOw0KKwkNCisJDQorCW1hcDxJUmVtb3RlQ29ubmVjdGlvbkxpc3RlbmVyKiwgTmV0d29ya1RhYmxlQ29ubmVjdGlvbkxpc3RlbmVyQWRhcHRlcio+IGNvbm5lY3Rpb25MaXN0ZW5lck1hcDsNCisJbXVsdGltYXA8SVRhYmxlTGlzdGVuZXIqLCBJVGFibGVMaXN0ZW5lcio+IGxpc3RlbmVyTWFwOw0KKwkNCisJc3RhdGljIHZvaWQgQ2hlY2tJbml0KCk7DQorCQ0KKwlOZXR3b3JrVGFibGVFbnRyeSogR2V0RW50cnkoc3RkOjpzdHJpbmcga2V5KTsNCisJDQorcHVibGljOg0KKw0KKwlzdGF0aWMgY29uc3QgY2hhciBQQVRIX1NFUEFSQVRPUl9DSEFSOw0KKwkvKioNCisJICogVGhlIHBhdGggc2VwYXJhdG9yIGZvciBzdWItdGFibGVzIGFuZCBrZXlzDQorCSAqIA0KKwkgKi8NCisJc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIFBBVEhfU0VQQVJBVE9SOw0KKwkvKioNCisJICogVGhlIGRlZmF1bHQgcG9ydCB0aGF0IG5ldHdvcmsgdGFibGVzIG9wZXJhdGVzIG9uDQorCSAqLw0KKwlzdGF0aWMgY29uc3QgaW50IERFRkFVTFRfUE9SVDsNCisJDQorCS8qKg0KKwkgKiBAdGhyb3dzIElPRXhjZXB0aW9uDQorCSAqLw0KKwlzdGF0aWMgdm9pZCBJbml0aWFsaXplKCk7DQorCQ0KKwkvKioNCisJICogc2V0IHRoZSB0YWJsZSBwcm92aWRlciBmb3Igc3RhdGljIG5ldHdvcmsgdGFibGVzIG1ldGhvZHMNCisJICogVGhpcyBtdXN0IGJlIGNhbGxlZCBiZWZvcmUgZ2V0VGFibGUNCisJICovDQorCXN0YXRpYyB2b2lkIFNldFRhYmxlUHJvdmlkZXIoTmV0d29ya1RhYmxlUHJvdmlkZXIqIHByb3ZpZGVyKTsNCisJDQorCS8qKg0KKwkgKiBzZXQgdGhhdCBuZXR3b3JrIHRhYmxlcyBzaG91bGQgYmUgYSBjbGllbnQNCisJICogVGhpcyBtdXN0IGJlIGNhbGxlZCBiZWZvcmUgaW5pdGFsaXplIG9yIEdldFRhYmxlDQorCSAqLw0KKwlzdGF0aWMgdm9pZCBTZXRDbGllbnRNb2RlKCk7DQorCQ0KKwkvKioNCisJICogc2V0IHRoYXQgbmV0d29yayB0YWJsZXMgc2hvdWxkIGJlIGEgc2VydmVyDQorCSAqIFRoaXMgbXVzdCBiZSBjYWxsZWQgYmVmb3JlIGluaXRhbGl6ZSBvciBHZXRUYWJsZQ0KKwkgKi8NCisJc3RhdGljIHZvaWQgU2V0U2VydmVyTW9kZSgpOw0KKwkNCisJLyoqDQorCSAqIHNldCB0aGUgdGVhbSB0aGUgcm9ib3QgaXMgY29uZmlndXJlZCBmb3IgKHRoaXMgd2lsbCBzZXQgdGhlIGlwIGFkZHJlc3MgdGhhdCBuZXR3b3JrIHRhYmxlcyB3aWxsIGNvbm5lY3QgdG8gaW4gY2xpZW50IG1vZGUpDQorCSAqIFRoaXMgbXVzdCBiZSBjYWxsZWQgYmVmb3JlIGluaXRhbGl6ZSBvciBHZXRUYWJsZQ0KKwkgKiBAcGFyYW0gdGVhbSB0aGUgdGVhbSBudW1iZXINCisJICovDQorCXN0YXRpYyB2b2lkIFNldFRlYW0oaW50IHRlYW0pOw0KKwkvKioNCisJICogQHBhcmFtIGFkZHJlc3MgdGhlIGFkcmVzcyB0aGF0IG5ldHdvcmsgdGFibGVzIHdpbGwgY29ubmVjdCB0byBpbiBjbGllbnQgbW9kZQ0KKwkgKi8NCisJc3RhdGljIHZvaWQgU2V0SVBBZGRyZXNzKGNvbnN0IGNoYXIqIGFkZHJlc3MpOw0KKwkvKioNCisJICogR2V0cyB0aGUgdGFibGUgd2l0aCB0aGUgc3BlY2lmaWVkIGtleS4gSWYgdGhlIHRhYmxlIGRvZXMgbm90IGV4aXN0LCBhIG5ldyB0YWJsZSB3aWxsIGJlIGNyZWF0ZWQuPGJyPg0KKwkgKiBUaGlzIHdpbGwgYXV0b21hdGljYWxseSBpbml0aWFsaXplIG5ldHdvcmsgdGFibGVzIGlmIGl0IGhhcyBub3QgYmVlbiBhbHJlYWR5DQorCSAqIA0KKwkgKiBAcGFyYW0ga2V5DQorCSAqICAgICAgICAgICAgdGhlIGtleSBuYW1lDQorCSAqIEByZXR1cm4gdGhlIG5ldHdvcmsgdGFibGUgcmVxdWVzdGVkDQorCSAqLw0KKwlzdGF0aWMgTmV0d29ya1RhYmxlKiBHZXRUYWJsZShzdGQ6OnN0cmluZyBrZXkpOw0KKwkNCisNCisJTmV0d29ya1RhYmxlKHN0ZDo6c3RyaW5nIHBhdGgsIE5ldHdvcmtUYWJsZVByb3ZpZGVyJiBwcm92aWRlcik7DQorCXZpcnR1YWwgfk5ldHdvcmtUYWJsZSgpOw0KKwkNCisJYm9vbCBJc0Nvbm5lY3RlZCgpOw0KKw0KKwlib29sIElzU2VydmVyKCk7DQorCQ0KKwkNCisJDQorCQ0KKwkNCisJDQorCQ0KKwl2b2lkIEFkZENvbm5lY3Rpb25MaXN0ZW5lcihJUmVtb3RlQ29ubmVjdGlvbkxpc3RlbmVyKiBsaXN0ZW5lciwgYm9vbCBpbW1lZGlhdGVOb3RpZnkpOw0KKw0KKwl2b2lkIFJlbW92ZUNvbm5lY3Rpb25MaXN0ZW5lcihJUmVtb3RlQ29ubmVjdGlvbkxpc3RlbmVyKiBsaXN0ZW5lcik7DQorCQ0KKw0KKwl2b2lkIEFkZFRhYmxlTGlzdGVuZXIoSVRhYmxlTGlzdGVuZXIqIGxpc3RlbmVyKTsNCisNCisJDQorCXZvaWQgQWRkVGFibGVMaXN0ZW5lcihJVGFibGVMaXN0ZW5lciogbGlzdGVuZXIsIGJvb2wgaW1tZWRpYXRlTm90aWZ5KTsNCisJdm9pZCBBZGRUYWJsZUxpc3RlbmVyKHN0ZDo6c3RyaW5nIGtleSwgSVRhYmxlTGlzdGVuZXIqIGxpc3RlbmVyLCBib29sIGltbWVkaWF0ZU5vdGlmeSk7DQorCXZvaWQgQWRkU3ViVGFibGVMaXN0ZW5lcihJVGFibGVMaXN0ZW5lciogbGlzdGVuZXIpOw0KKw0KKwl2b2lkIFJlbW92ZVRhYmxlTGlzdGVuZXIoSVRhYmxlTGlzdGVuZXIqIGxpc3RlbmVyKTsNCisJDQorCQ0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdGFibGUgYXQgdGhlIHNwZWNpZmllZCBrZXkuIElmIHRoZXJlIGlzIG5vIHRhYmxlIGF0IHRoZQ0KKwkgKiBzcGVjaWZpZWQga2V5LCBpdCB3aWxsIGNyZWF0ZSBhIG5ldyB0YWJsZQ0KKwkgKiANCisJICogQHBhcmFtIGtleQ0KKwkgKiAgICAgICAgICAgIHRoZSBrZXkgbmFtZQ0KKwkgKiBAcmV0dXJuIHRoZSBuZXR3b3JrdGFibGUgdG8gYmUgcmV0dXJuZWQNCisJICovDQorCU5ldHdvcmtUYWJsZSogR2V0U3ViVGFibGUoc3RkOjpzdHJpbmcga2V5KTsNCisNCisNCisJLyoqDQorCSAqIENoZWNrcyB0aGUgdGFibGUgYW5kIHRlbGxzIGlmIGl0IGNvbnRhaW5zIHRoZSBzcGVjaWZpZWQga2V5DQorCSAqIA0KKwkgKiBAcGFyYW0ga2V5DQorCSAqICAgICAgICAgICAgdGhlIGtleSB0byBiZSBjaGVja2VkDQorCSAqLw0KKwlib29sIENvbnRhaW5zS2V5KHN0ZDo6c3RyaW5nIGtleSk7DQorICAgICAgICANCisJYm9vbCBDb250YWluc1N1YlRhYmxlKHN0ZDo6c3RyaW5nIGtleSk7DQorDQorCS8qKg0KKwkgKiBNYXBzIHRoZSBzcGVjaWZpZWQga2V5IHRvIHRoZSBzcGVjaWZpZWQgdmFsdWUgaW4gdGhpcyB0YWJsZS4gVGhlIGtleSBjYW4NCisJICogbm90IGJlIG51bGwuIFRoZSB2YWx1ZSBjYW4gYmUgcmV0cmlldmVkIGJ5IGNhbGxpbmcgdGhlIGdldCBtZXRob2Qgd2l0aCBhDQorCSAqIGtleSB0aGF0IGlzIGVxdWFsIHRvIHRoZSBvcmlnaW5hbCBrZXkuDQorCSAqIA0KKwkgKiBAcGFyYW0ga2V5DQorCSAqICAgICAgICAgICAgdGhlIGtleQ0KKwkgKiBAcGFyYW0gdmFsdWUNCisJICogICAgICAgICAgICB0aGUgdmFsdWUNCisJICovDQorCXZvaWQgUHV0TnVtYmVyKHN0ZDo6c3RyaW5nIGtleSwgZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIGtleSB0aGF0IHRoZSBuYW1lIG1hcHMgdG8uDQorCSAqIA0KKwkgKiBAcGFyYW0ga2V5DQorCSAqICAgICAgICAgICAgdGhlIGtleSBuYW1lDQorCSAqIEByZXR1cm4gdGhlIGtleQ0KKwkgKiBAdGhyb3dzIFRhYmxlS2V5Tm90RGVmaW5lZEV4Y2VwdGlvbg0KKwkgKiAgICAgICAgICAgICBpZiB0aGUgc3BlY2lmaWVkIGtleSBpcyBudWxsDQorCSAqLw0KKwlkb3VibGUgR2V0TnVtYmVyKHN0ZDo6c3RyaW5nIGtleSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSBrZXkgdGhhdCB0aGUgbmFtZSBtYXBzIHRvLiBJZiB0aGUga2V5IGlzIG51bGwsIGl0IHdpbGwgcmV0dXJuDQorCSAqIHRoZSBkZWZhdWx0IHZhbHVlDQorCSAqIA0KKwkgKiBAcGFyYW0ga2V5DQorCSAqICAgICAgICAgICAgdGhlIGtleSBuYW1lDQorCSAqIEBwYXJhbSBkZWZhdWx0VmFsdWUNCisJICogICAgICAgICAgICB0aGUgZGVmYXVsdCB2YWx1ZSBpZiB0aGUga2V5IGlzIG51bGwNCisJICogQHJldHVybiB0aGUga2V5DQorCSAqLw0KKwlkb3VibGUgR2V0TnVtYmVyKHN0ZDo6c3RyaW5nIGtleSwgZG91YmxlIGRlZmF1bHRWYWx1ZSk7DQorDQorCS8qKg0KKwkgKiBNYXBzIHRoZSBzcGVjaWZpZWQga2V5IHRvIHRoZSBzcGVjaWZpZWQgdmFsdWUgaW4gdGhpcyB0YWJsZS4gVGhlIGtleSBjYW4NCisJICogbm90IGJlIG51bGwuIFRoZSB2YWx1ZSBjYW4gYmUgcmV0cmlldmVkIGJ5IGNhbGxpbmcgdGhlIGdldCBtZXRob2Qgd2l0aCBhDQorCSAqIGtleSB0aGF0IGlzIGVxdWFsIHRvIHRoZSBvcmlnaW5hbCBrZXkuDQorCSAqIA0KKwkgKiBAcGFyYW0ga2V5DQorCSAqICAgICAgICAgICAgdGhlIGtleQ0KKwkgKiBAcGFyYW0gdmFsdWUNCisJICogICAgICAgICAgICB0aGUgdmFsdWUNCisJICovDQorCXZvaWQgUHV0U3RyaW5nKHN0ZDo6c3RyaW5nIGtleSwgc3RkOjpzdHJpbmcgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUga2V5IHRoYXQgdGhlIG5hbWUgbWFwcyB0by4NCisJICogDQorCSAqIEBwYXJhbSBrZXkNCisJICogICAgICAgICAgICB0aGUga2V5IG5hbWUNCisJICogQHJldHVybiB0aGUga2V5DQorCSAqIEB0aHJvd3MgVGFibGVLZXlOb3REZWZpbmVkRXhjZXB0aW9uDQorCSAqICAgICAgICAgICAgIGlmIHRoZSBzcGVjaWZpZWQga2V5IGlzIG51bGwNCisJICovDQorCXN0ZDo6c3RyaW5nIEdldFN0cmluZyhzdGQ6OnN0cmluZyBrZXkpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUga2V5IHRoYXQgdGhlIG5hbWUgbWFwcyB0by4gSWYgdGhlIGtleSBpcyBudWxsLCBpdCB3aWxsIHJldHVybg0KKwkgKiB0aGUgZGVmYXVsdCB2YWx1ZQ0KKwkgKiANCisJICogQHBhcmFtIGtleQ0KKwkgKiAgICAgICAgICAgIHRoZSBrZXkgbmFtZQ0KKwkgKiBAcGFyYW0gZGVmYXVsdFZhbHVlDQorCSAqICAgICAgICAgICAgdGhlIGRlZmF1bHQgdmFsdWUgaWYgdGhlIGtleSBpcyBudWxsDQorCSAqIEByZXR1cm4gdGhlIGtleQ0KKwkgKi8NCisJc3RkOjpzdHJpbmcgR2V0U3RyaW5nKHN0ZDo6c3RyaW5nIGtleSwgc3RkOjpzdHJpbmcgZGVmYXVsdFZhbHVlKTsNCisNCisJLyoqDQorCSAqIE1hcHMgdGhlIHNwZWNpZmllZCBrZXkgdG8gdGhlIHNwZWNpZmllZCB2YWx1ZSBpbiB0aGlzIHRhYmxlLiBUaGUga2V5IGNhbg0KKwkgKiBub3QgYmUgbnVsbC4gVGhlIHZhbHVlIGNhbiBiZSByZXRyaWV2ZWQgYnkgY2FsbGluZyB0aGUgZ2V0IG1ldGhvZCB3aXRoIGENCisJICoga2V5IHRoYXQgaXMgZXF1YWwgdG8gdGhlIG9yaWdpbmFsIGtleS4NCisJICogDQorCSAqIEBwYXJhbSBrZXkNCisJICogICAgICAgICAgICB0aGUga2V5DQorCSAqIEBwYXJhbSB2YWx1ZQ0KKwkgKiAgICAgICAgICAgIHRoZSB2YWx1ZQ0KKwkgKi8NCisJdm9pZCBQdXRCb29sZWFuKHN0ZDo6c3RyaW5nIGtleSwgYm9vbCB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSBrZXkgdGhhdCB0aGUgbmFtZSBtYXBzIHRvLg0KKwkgKiANCisJICogQHBhcmFtIGtleQ0KKwkgKiAgICAgICAgICAgIHRoZSBrZXkgbmFtZQ0KKwkgKiBAcmV0dXJuIHRoZSBrZXkNCisJICogQHRocm93cyBUYWJsZUtleU5vdERlZmluZWRFeGNlcHRpb24NCisJICogICAgICAgICAgICAgaWYgdGhlIHNwZWNpZmllZCBrZXkgaXMgbnVsbA0KKwkgKi8NCisJYm9vbCBHZXRCb29sZWFuKHN0ZDo6c3RyaW5nIGtleSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSBrZXkgdGhhdCB0aGUgbmFtZSBtYXBzIHRvLiBJZiB0aGUga2V5IGlzIG51bGwsIGl0IHdpbGwgcmV0dXJuDQorCSAqIHRoZSBkZWZhdWx0IHZhbHVlDQorCSAqIA0KKwkgKiBAcGFyYW0ga2V5DQorCSAqICAgICAgICAgICAgdGhlIGtleSBuYW1lDQorCSAqIEBwYXJhbSBkZWZhdWx0VmFsdWUNCisJICogICAgICAgICAgICB0aGUgZGVmYXVsdCB2YWx1ZSBpZiB0aGUga2V5IGlzIG51bGwNCisJICogQHJldHVybiB0aGUga2V5DQorCSAqLw0KKwlib29sIEdldEJvb2xlYW4oc3RkOjpzdHJpbmcga2V5LCBib29sIGRlZmF1bHRWYWx1ZSk7DQorCQ0KKw0KKwl2b2lkIFB1dFZhbHVlKHN0ZDo6c3RyaW5nIGtleSwgTmV0d29ya1RhYmxlRW50cnlUeXBlKiB0eXBlLCBFbnRyeVZhbHVlIHZhbHVlKTsNCisJDQorDQorICAgIHZvaWQgUmV0cmlldmVWYWx1ZShzdGQ6OnN0cmluZyBrZXksIENvbXBsZXhEYXRhJiBleHRlcm5hbFZhbHVlKTsNCisgICAgICAgIA0KKwkvKioNCisJICogTWFwcyB0aGUgc3BlY2lmaWVkIGtleSB0byB0aGUgc3BlY2lmaWVkIHZhbHVlIGluIHRoaXMgdGFibGUuIFRoZSBrZXkgY2FuDQorCSAqIG5vdCBiZSBudWxsLiBUaGUgdmFsdWUgY2FuIGJlIHJldHJpZXZlZCBieSBjYWxsaW5nIHRoZSBnZXQgbWV0aG9kIHdpdGggYQ0KKwkgKiBrZXkgdGhhdCBpcyBlcXVhbCB0byB0aGUgb3JpZ2luYWwga2V5Lg0KKwkgKiANCisJICogQHBhcmFtIGtleSB0aGUga2V5IG5hbWUNCisJICogQHBhcmFtIHZhbHVlIHRoZSB2YWx1ZSB0byBiZSBwdXQNCisJICovDQorCXZvaWQgUHV0VmFsdWUoc3RkOjpzdHJpbmcga2V5LCBDb21wbGV4RGF0YSYgdmFsdWUpOw0KKwkNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIGtleSB0aGF0IHRoZSBuYW1lIG1hcHMgdG8uDQorCSAqIE5PVEU6IElmIHRoZSB2YWx1ZSBpcyBhIGRvdWJsZSwgaXQgd2lsbCByZXR1cm4gYSBEb3VibGUgb2JqZWN0LA0KKwkgKiBub3QgYSBwcmltaXRpdmUuICBUbyBnZXQgdGhlIHByaW1pdGl2ZSwgdXNlIEdldERvdWJsZQ0KKwkgKiANCisJICogQHBhcmFtIGtleQ0KKwkgKiAgICAgICAgICAgIHRoZSBrZXkgbmFtZQ0KKwkgKiBAcmV0dXJuIHRoZSBrZXkNCisJICogQHRocm93cyBUYWJsZUtleU5vdERlZmluZWRFeGNlcHRpb24NCisJICogICAgICAgICAgICAgaWYgdGhlIHNwZWNpZmllZCBrZXkgaXMgbnVsbA0KKwkgKi8NCisJRW50cnlWYWx1ZSBHZXRWYWx1ZShzdGQ6OnN0cmluZyBrZXkpOw0KKwkNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIGtleSB0aGF0IHRoZSBuYW1lIG1hcHMgdG8uIElmIHRoZSBrZXkgaXMgbnVsbCwgaXQgd2lsbCByZXR1cm4NCisJICogdGhlIGRlZmF1bHQgdmFsdWUNCisJICogTk9URTogSWYgdGhlIHZhbHVlIGlzIGEgZG91YmxlLCBpdCB3aWxsIHJldHVybiBhIERvdWJsZSBvYmplY3QsDQorCSAqIG5vdCBhIHByaW1pdGl2ZS4gIFRvIGdldCB0aGUgcHJpbWl0aXZlLCB1c2UgR2V0RG91YmxlDQorCSAqIA0KKwkgKiBAcGFyYW0ga2V5DQorCSAqICAgICAgICAgICAgdGhlIGtleSBuYW1lDQorCSAqIEBwYXJhbSBkZWZhdWx0VmFsdWUNCisJICogICAgICAgICAgICB0aGUgZGVmYXVsdCB2YWx1ZSBpZiB0aGUga2V5IGlzIG51bGwNCisJICogQHJldHVybiB0aGUga2V5DQorCSAqLw0KKwkgRW50cnlWYWx1ZSBHZXRWYWx1ZShzdGQ6OnN0cmluZyBrZXksIEVudHJ5VmFsdWUgZGVmYXVsdFZhbHVlKTsNCisNCit9Ow0KKw0KKyNlbmRpZg0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL25ldHdvcmt0YWJsZXMvTmV0d29ya1RhYmxlQ29ubmVjdGlvbkxpc3RlbmVyQWRhcHRlci5jcHAgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9uZXR3b3JrdGFibGVzL05ldHdvcmtUYWJsZUNvbm5lY3Rpb25MaXN0ZW5lckFkYXB0ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjMGM1OGUKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9uZXR3b3JrdGFibGVzL05ldHdvcmtUYWJsZUNvbm5lY3Rpb25MaXN0ZW5lckFkYXB0ZXIuY3BwCkBAIC0wLDAgKzEsMjEgQEAKKy8qDQorICogTmV0d29ya1RhYmxlQ29ubmVjdGlvbkxpc3RlbmVyQWRhcHRlci5jcHANCisgKg0KKyAqICBDcmVhdGVkIG9uOiBPY3QgMTcsIDIwMTINCisgKiAgICAgIEF1dGhvcjogTWl0Y2hlbGwgV2lsbHMNCisgKi8NCisNCisjaW5jbHVkZSAibmV0d29ya3RhYmxlcy9OZXR3b3JrVGFibGVDb25uZWN0aW9uTGlzdGVuZXJBZGFwdGVyLmgiDQorDQorDQorTmV0d29ya1RhYmxlQ29ubmVjdGlvbkxpc3RlbmVyQWRhcHRlcjo6TmV0d29ya1RhYmxlQ29ubmVjdGlvbkxpc3RlbmVyQWRhcHRlcihJUmVtb3RlKiBfdGFyZ2V0U291cmNlLCBJUmVtb3RlQ29ubmVjdGlvbkxpc3RlbmVyKiBfdGFyZ2V0TGlzdGVuZXIpOg0KKwkJCXRhcmdldFNvdXJjZShfdGFyZ2V0U291cmNlKSwgdGFyZ2V0TGlzdGVuZXIoX3RhcmdldExpc3RlbmVyKXt9DQorDQordm9pZCBOZXR3b3JrVGFibGVDb25uZWN0aW9uTGlzdGVuZXJBZGFwdGVyOjpDb25uZWN0ZWQoSVJlbW90ZSogcmVtb3RlKSB7DQorCXRhcmdldExpc3RlbmVyLT5Db25uZWN0ZWQodGFyZ2V0U291cmNlKTsNCit9DQorDQordm9pZCBOZXR3b3JrVGFibGVDb25uZWN0aW9uTGlzdGVuZXJBZGFwdGVyOjpEaXNjb25uZWN0ZWQoSVJlbW90ZSogcmVtb3RlKSB7DQorCXRhcmdldExpc3RlbmVyLT5EaXNjb25uZWN0ZWQodGFyZ2V0U291cmNlKTsNCit9DQorDQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvbmV0d29ya3RhYmxlcy9OZXR3b3JrVGFibGVDb25uZWN0aW9uTGlzdGVuZXJBZGFwdGVyLmggYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9uZXR3b3JrdGFibGVzL05ldHdvcmtUYWJsZUNvbm5lY3Rpb25MaXN0ZW5lckFkYXB0ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hY2M0NTdlCi0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvbmV0d29ya3RhYmxlcy9OZXR3b3JrVGFibGVDb25uZWN0aW9uTGlzdGVuZXJBZGFwdGVyLmgKQEAgLTAsMCArMSwzMCBAQAorLyoNCisgKiBOZXR3b3JrVGFibGVDb25uZWN0aW9uTGlzdGVuZXJBZGFwdGVyLmgNCisgKg0KKyAqICBDcmVhdGVkIG9uOiBPY3QgMTcsIDIwMTINCisgKiAgICAgIEF1dGhvcjogTWl0Y2hlbGwgV2lsbHMNCisgKi8NCisNCisjaWZuZGVmIE5FVFdPUktUQUJMRUNPTk5FQ1RJT05MSVNURU5FUkFEQVBURVJfSF8NCisjZGVmaW5lIE5FVFdPUktUQUJMRUNPTk5FQ1RJT05MSVNURU5FUkFEQVBURVJfSF8NCisNCisNCitjbGFzcyBOZXR3b3JrVGFibGVDb25uZWN0aW9uTGlzdGVuZXJBZGFwdGVyOw0KKw0KKyNpbmNsdWRlICJ0YWJsZXMvSVJlbW90ZS5oIg0KKyNpbmNsdWRlICJ0YWJsZXMvSVJlbW90ZUNvbm5lY3Rpb25MaXN0ZW5lci5oIg0KKw0KKw0KK2NsYXNzIE5ldHdvcmtUYWJsZUNvbm5lY3Rpb25MaXN0ZW5lckFkYXB0ZXIgOiBwdWJsaWMgSVJlbW90ZUNvbm5lY3Rpb25MaXN0ZW5lcnsNCitwcml2YXRlOg0KKwlJUmVtb3RlKiB0YXJnZXRTb3VyY2U7DQorCUlSZW1vdGVDb25uZWN0aW9uTGlzdGVuZXIqIHRhcmdldExpc3RlbmVyOw0KKw0KK3B1YmxpYzoNCisJTmV0d29ya1RhYmxlQ29ubmVjdGlvbkxpc3RlbmVyQWRhcHRlcihJUmVtb3RlKiB0YXJnZXRTb3VyY2UsIElSZW1vdGVDb25uZWN0aW9uTGlzdGVuZXIqIHRhcmdldExpc3RlbmVyKTsNCisJdm9pZCBDb25uZWN0ZWQoSVJlbW90ZSogcmVtb3RlKTsNCisJdm9pZCBEaXNjb25uZWN0ZWQoSVJlbW90ZSogcmVtb3RlKTsNCit9Ow0KKw0KKw0KKyNlbmRpZiAvKiBORVRXT1JLVEFCTEVDT05ORUNUSU9OTElTVEVORVJBREFQVEVSX0hfICovDQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvbmV0d29ya3RhYmxlcy9OZXR3b3JrVGFibGVLZXlMaXN0ZW5lckFkYXB0ZXIuY3BwIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvbmV0d29ya3RhYmxlcy9OZXR3b3JrVGFibGVLZXlMaXN0ZW5lckFkYXB0ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxNjBiYzQKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9uZXR3b3JrdGFibGVzL05ldHdvcmtUYWJsZUtleUxpc3RlbmVyQWRhcHRlci5jcHAKQEAgLTAsMCArMSwyMSBAQAorLyoNCisgKiBOZXR3b3JrVGFibGVLZXlMaXN0ZW5lckFkYXB0ZXIuY3BwDQorICoNCisgKiAgQ3JlYXRlZCBvbjogT2N0IDE3LCAyMDEyDQorICogICAgICBBdXRob3I6IE1pdGNoZWxsIFdpbGxzDQorICovDQorDQorI2luY2x1ZGUgIm5ldHdvcmt0YWJsZXMvTmV0d29ya1RhYmxlS2V5TGlzdGVuZXJBZGFwdGVyLmgiDQorDQorDQorDQorTmV0d29ya1RhYmxlS2V5TGlzdGVuZXJBZGFwdGVyOjpOZXR3b3JrVGFibGVLZXlMaXN0ZW5lckFkYXB0ZXIoc3RkOjpzdHJpbmcgX3JlbGF0aXZlS2V5LCBzdGQ6OnN0cmluZyBfZnVsbEtleSwgTmV0d29ya1RhYmxlKiBfdGFyZ2V0U291cmNlLCBJVGFibGVMaXN0ZW5lciogX3RhcmdldExpc3RlbmVyKToNCisJCXJlbGF0aXZlS2V5KF9yZWxhdGl2ZUtleSksIGZ1bGxLZXkoX2Z1bGxLZXkpLCB0YXJnZXRTb3VyY2UoX3RhcmdldFNvdXJjZSksIHRhcmdldExpc3RlbmVyKF90YXJnZXRMaXN0ZW5lcil7fQ0KKw0KK05ldHdvcmtUYWJsZUtleUxpc3RlbmVyQWRhcHRlcjo6fk5ldHdvcmtUYWJsZUtleUxpc3RlbmVyQWRhcHRlcigpe30NCisNCit2b2lkIE5ldHdvcmtUYWJsZUtleUxpc3RlbmVyQWRhcHRlcjo6VmFsdWVDaGFuZ2VkKElUYWJsZSogc291cmNlLCBjb25zdCBzdGQ6OnN0cmluZyYga2V5LCBFbnRyeVZhbHVlIHZhbHVlLCBib29sIGlzTmV3KSB7DQorCWlmKGtleT09ZnVsbEtleSl7DQorCQl0YXJnZXRMaXN0ZW5lci0+VmFsdWVDaGFuZ2VkKHRhcmdldFNvdXJjZSwgcmVsYXRpdmVLZXksIHZhbHVlLCBpc05ldyk7DQorCX0NCit9DQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvbmV0d29ya3RhYmxlcy9OZXR3b3JrVGFibGVLZXlMaXN0ZW5lckFkYXB0ZXIuaCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL25ldHdvcmt0YWJsZXMvTmV0d29ya1RhYmxlS2V5TGlzdGVuZXJBZGFwdGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2VlMjE0YgotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL25ldHdvcmt0YWJsZXMvTmV0d29ya1RhYmxlS2V5TGlzdGVuZXJBZGFwdGVyLmgKQEAgLTAsMCArMSwzNCBAQAorLyoNCisgKiBOZXR3b3JrVGFibGVLZXlMaXN0ZW5lckFkYXB0ZXIuaA0KKyAqDQorICogIENyZWF0ZWQgb246IE9jdCAxNywgMjAxMg0KKyAqICAgICAgQXV0aG9yOiBNaXRjaGVsbCBXaWxscw0KKyAqLw0KKw0KKyNpZm5kZWYgTkVUV09SS1RBQkxFS0VZTElTVEVORVJBREFQVEVSX0hfDQorI2RlZmluZSBORVRXT1JLVEFCTEVLRVlMSVNURU5FUkFEQVBURVJfSF8NCisNCisNCitjbGFzcyBOZXR3b3JrVGFibGVLZXlMaXN0ZW5lckFkYXB0ZXI7DQorDQorI2luY2x1ZGUgInRhYmxlcy9JVGFibGVMaXN0ZW5lci5oIg0KKyNpbmNsdWRlICJ0YWJsZXMvSVRhYmxlLmgiDQorI2luY2x1ZGUgPHN0cmluZz4NCisjaW5jbHVkZSAibmV0d29ya3RhYmxlcy9OZXR3b3JrVGFibGUuaCINCisNCisNCisNCitjbGFzcyBOZXR3b3JrVGFibGVLZXlMaXN0ZW5lckFkYXB0ZXIgOiBwdWJsaWMgSVRhYmxlTGlzdGVuZXJ7DQorcHJpdmF0ZToNCisJc3RkOjpzdHJpbmcgcmVsYXRpdmVLZXk7DQorCXN0ZDo6c3RyaW5nIGZ1bGxLZXk7DQorCU5ldHdvcmtUYWJsZSogdGFyZ2V0U291cmNlOw0KKwlJVGFibGVMaXN0ZW5lciogdGFyZ2V0TGlzdGVuZXI7DQorcHVibGljOg0KKwlOZXR3b3JrVGFibGVLZXlMaXN0ZW5lckFkYXB0ZXIoc3RkOjpzdHJpbmcgcmVsYXRpdmVLZXksIHN0ZDo6c3RyaW5nIGZ1bGxLZXksIE5ldHdvcmtUYWJsZSogdGFyZ2V0U291cmNlLCBJVGFibGVMaXN0ZW5lciogdGFyZ2V0TGlzdGVuZXIpOw0KKwl2aXJ0dWFsIH5OZXR3b3JrVGFibGVLZXlMaXN0ZW5lckFkYXB0ZXIoKTsNCisgICAgdm9pZCBWYWx1ZUNoYW5nZWQoSVRhYmxlKiBzb3VyY2UsIGNvbnN0IHN0ZDo6c3RyaW5nJiBrZXksIEVudHJ5VmFsdWUgdmFsdWUsIGJvb2wgaXNOZXcpOw0KK307DQorDQorDQorI2VuZGlmIC8qIE5FVFdPUktUQUJMRUtFWUxJU1RFTkVSQURBUFRFUl9IXyAqLw0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL25ldHdvcmt0YWJsZXMvTmV0d29ya1RhYmxlTGlzdGVuZXJBZGFwdGVyLmNwcCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL25ldHdvcmt0YWJsZXMvTmV0d29ya1RhYmxlTGlzdGVuZXJBZGFwdGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjNkYzA2Ci0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvbmV0d29ya3RhYmxlcy9OZXR3b3JrVGFibGVMaXN0ZW5lckFkYXB0ZXIuY3BwCkBAIC0wLDAgKzEsMjYgQEAKKy8qDQorICogTmV0d29ya1RhYmxlTGlzdGVuZXJBZGFwdGVyLmNwcA0KKyAqDQorICogIENyZWF0ZWQgb246IE9jdCAxNywgMjAxMg0KKyAqICAgICAgQXV0aG9yOiBNaXRjaGVsbCBXaWxscw0KKyAqLw0KKw0KKyNpbmNsdWRlICJuZXR3b3JrdGFibGVzL05ldHdvcmtUYWJsZUxpc3RlbmVyQWRhcHRlci5oIg0KKyNpbmNsdWRlICJuZXR3b3JrdGFibGVzL05ldHdvcmtUYWJsZS5oIg0KKw0KKw0KKw0KK05ldHdvcmtUYWJsZUxpc3RlbmVyQWRhcHRlcjo6TmV0d29ya1RhYmxlTGlzdGVuZXJBZGFwdGVyKHN0ZDo6c3RyaW5nIF9wcmVmaXgsIElUYWJsZSogX3RhcmdldFNvdXJjZSwgSVRhYmxlTGlzdGVuZXIqIF90YXJnZXRMaXN0ZW5lcikgOg0KKwlwcmVmaXgoX3ByZWZpeCksIHRhcmdldFNvdXJjZShfdGFyZ2V0U291cmNlKSwgdGFyZ2V0TGlzdGVuZXIoX3RhcmdldExpc3RlbmVyKXt9DQorDQorTmV0d29ya1RhYmxlTGlzdGVuZXJBZGFwdGVyOjp+TmV0d29ya1RhYmxlTGlzdGVuZXJBZGFwdGVyKCl7fQ0KKw0KK3ZvaWQgTmV0d29ya1RhYmxlTGlzdGVuZXJBZGFwdGVyOjpWYWx1ZUNoYW5nZWQoSVRhYmxlKiBzb3VyY2UsIGNvbnN0IHN0ZDo6c3RyaW5nJiBrZXksIEVudHJ5VmFsdWUgdmFsdWUsIGJvb2wgaXNOZXcpIHsvL1RPRE8gdXNlIHN0cmluZyBjYWNoZQ0KKwlpZihrZXkuY29tcGFyZSgwLHByZWZpeC5zaXplKCkscHJlZml4KT09MCl7DQorCQlzdGQ6OnN0cmluZyByZWxhdGl2ZUtleSA9IGtleS5zdWJzdHIocHJlZml4Lmxlbmd0aCgpKTsNCisJCWlmKHN0ZDo6c3RyaW5nOjpucG9zICE9IHJlbGF0aXZlS2V5LmZpbmQoTmV0d29ya1RhYmxlOjpQQVRIX1NFUEFSQVRPUl9DSEFSKSkNCisJCQlyZXR1cm47DQorCQl0YXJnZXRMaXN0ZW5lci0+VmFsdWVDaGFuZ2VkKHRhcmdldFNvdXJjZSwgcmVsYXRpdmVLZXksIHZhbHVlLCBpc05ldyk7DQorCX0NCit9DQorDQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvbmV0d29ya3RhYmxlcy9OZXR3b3JrVGFibGVMaXN0ZW5lckFkYXB0ZXIuaCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL25ldHdvcmt0YWJsZXMvTmV0d29ya1RhYmxlTGlzdGVuZXJBZGFwdGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWI5ODVhOQotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL25ldHdvcmt0YWJsZXMvTmV0d29ya1RhYmxlTGlzdGVuZXJBZGFwdGVyLmgKQEAgLTAsMCArMSwzMCBAQAorLyoNCisgKiBOZXR3b3JrVGFibGVMaXN0ZW5lckFkYXB0ZXIuaA0KKyAqDQorICogIENyZWF0ZWQgb246IE9jdCAxNywgMjAxMg0KKyAqICAgICAgQXV0aG9yOiBNaXRjaGVsbCBXaWxscw0KKyAqLw0KKw0KKyNpZm5kZWYgTkVUV09SS1RBQkxFTElTVEVORVJBREFQVEVSX0hfDQorI2RlZmluZSBORVRXT1JLVEFCTEVMSVNURU5FUkFEQVBURVJfSF8NCisNCitjbGFzcyBOZXR3b3JrVGFibGVMaXN0ZW5lckFkYXB0ZXI7DQorDQorI2luY2x1ZGUgInRhYmxlcy9JVGFibGVMaXN0ZW5lci5oIg0KKyNpbmNsdWRlICJ0YWJsZXMvSVRhYmxlLmgiDQorI2luY2x1ZGUgPHN0cmluZz4NCisNCisNCitjbGFzcyBOZXR3b3JrVGFibGVMaXN0ZW5lckFkYXB0ZXIgOiBwdWJsaWMgSVRhYmxlTGlzdGVuZXJ7DQorcHJpdmF0ZToNCisJc3RkOjpzdHJpbmcgcHJlZml4Ow0KKwlJVGFibGUqIHRhcmdldFNvdXJjZTsNCisJSVRhYmxlTGlzdGVuZXIqIHRhcmdldExpc3RlbmVyOw0KK3B1YmxpYzoNCisJTmV0d29ya1RhYmxlTGlzdGVuZXJBZGFwdGVyKHN0ZDo6c3RyaW5nIHByZWZpeCwgSVRhYmxlKiB0YXJnZXRTb3VyY2UsIElUYWJsZUxpc3RlbmVyKiB0YXJnZXRMaXN0ZW5lcik7DQorCXZpcnR1YWwgfk5ldHdvcmtUYWJsZUxpc3RlbmVyQWRhcHRlcigpOw0KKyAgICB2b2lkIFZhbHVlQ2hhbmdlZChJVGFibGUqIHNvdXJjZSwgY29uc3Qgc3RkOjpzdHJpbmcmIGtleSwgRW50cnlWYWx1ZSB2YWx1ZSwgYm9vbCBpc05ldyk7DQorfTsNCisNCisNCisjZW5kaWYgLyogTkVUV09SS1RBQkxFTElTVEVORVJBREFQVEVSX0hfICovDQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvbmV0d29ya3RhYmxlcy9OZXR3b3JrVGFibGVNb2RlLmNwcCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL25ldHdvcmt0YWJsZXMvTmV0d29ya1RhYmxlTW9kZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTNhY2UzMQotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL25ldHdvcmt0YWJsZXMvTmV0d29ya1RhYmxlTW9kZS5jcHAKQEAgLTAsMCArMSwzMSBAQAorLyoNCisgKiBOZXR3b3JrVGFibGVNb2RlLmNwcA0KKyAqDQorICogIENyZWF0ZWQgb246IE9jdCAxNiwgMjAxMg0KKyAqICAgICAgQXV0aG9yOiBNaXRjaGVsbCBXaWxscw0KKyAqLw0KKw0KKyNpbmNsdWRlIDxzdHJpbmc+DQorI2luY2x1ZGUgIm5ldHdvcmt0YWJsZXMyL3RocmVhZC9OVFRocmVhZE1hbmFnZXIuaCINCisjaW5jbHVkZSAibmV0d29ya3RhYmxlczIvTmV0d29ya1RhYmxlTm9kZS5oIg0KKyNpbmNsdWRlICJuZXR3b3JrdGFibGVzMi9zZXJ2ZXIvTmV0d29ya1RhYmxlU2VydmVyLmgiDQorI2luY2x1ZGUgIm5ldHdvcmt0YWJsZXMyL2NsaWVudC9OZXR3b3JrVGFibGVDbGllbnQuaCINCisjaW5jbHVkZSAibmV0d29ya3RhYmxlczIvc3RyZWFtL1NvY2tldFNlcnZlclN0cmVhbVByb3ZpZGVyLmgiDQorI2luY2x1ZGUgIm5ldHdvcmt0YWJsZXMyL3N0cmVhbS9Tb2NrZXRTdHJlYW1GYWN0b3J5LmgiDQorI2luY2x1ZGUgIm5ldHdvcmt0YWJsZXMvTmV0d29ya1RhYmxlTW9kZS5oIg0KKw0KKw0KK05ldHdvcmtUYWJsZVNlcnZlck1vZGUgTmV0d29ya1RhYmxlTW9kZTo6U2VydmVyOw0KK05ldHdvcmtUYWJsZUNsaWVudE1vZGUgTmV0d29ya1RhYmxlTW9kZTo6Q2xpZW50Ow0KKw0KK05ldHdvcmtUYWJsZVNlcnZlck1vZGU6Ok5ldHdvcmtUYWJsZVNlcnZlck1vZGUoKXt9DQorTmV0d29ya1RhYmxlQ2xpZW50TW9kZTo6TmV0d29ya1RhYmxlQ2xpZW50TW9kZSgpe30NCisNCitOZXR3b3JrVGFibGVOb2RlKiBOZXR3b3JrVGFibGVTZXJ2ZXJNb2RlOjpDcmVhdGVOb2RlKGNvbnN0IGNoYXIqIGlwQWRkcmVzcywgaW50IHBvcnQsIE5UVGhyZWFkTWFuYWdlciYgdGhyZWFkTWFuYWdlcil7DQorCUlPU3RyZWFtUHJvdmlkZXIqIHN0cmVhbVByb3ZpZGVyID0gbmV3IFNvY2tldFNlcnZlclN0cmVhbVByb3ZpZGVyKHBvcnQpOw0KKwlyZXR1cm4gbmV3IE5ldHdvcmtUYWJsZVNlcnZlcigqc3RyZWFtUHJvdmlkZXIsICpuZXcgTmV0d29ya1RhYmxlRW50cnlUeXBlTWFuYWdlcigpLCB0aHJlYWRNYW5hZ2VyKTsNCit9DQorTmV0d29ya1RhYmxlTm9kZSogTmV0d29ya1RhYmxlQ2xpZW50TW9kZTo6Q3JlYXRlTm9kZShjb25zdCBjaGFyKiBpcEFkZHJlc3MsIGludCBwb3J0LCBOVFRocmVhZE1hbmFnZXImIHRocmVhZE1hbmFnZXIpew0KKwlJT1N0cmVhbUZhY3RvcnkqIHN0cmVhbUZhY3RvcnkgPSBuZXcgU29ja2V0U3RyZWFtRmFjdG9yeShpcEFkZHJlc3MsIHBvcnQpOw0KKwlyZXR1cm4gbmV3IE5ldHdvcmtUYWJsZUNsaWVudCgqc3RyZWFtRmFjdG9yeSwgKm5ldyBOZXR3b3JrVGFibGVFbnRyeVR5cGVNYW5hZ2VyKCksIHRocmVhZE1hbmFnZXIpOw0KK30NCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9uZXR3b3JrdGFibGVzL05ldHdvcmtUYWJsZU1vZGUuaCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL25ldHdvcmt0YWJsZXMvTmV0d29ya1RhYmxlTW9kZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxM2NlOGMKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9uZXR3b3JrdGFibGVzL05ldHdvcmtUYWJsZU1vZGUuaApAQCAtMCwwICsxLDUwIEBACisjaWZuZGVmIF9ORVRXT1JLVEFCTEVNT0RFX0hfDQorI2RlZmluZSBfTkVUV09SS1RBQkxFTU9ERV9IXw0KKw0KKw0KK2NsYXNzIE5ldHdvcmtUYWJsZU1vZGU7DQorY2xhc3MgTmV0d29ya1RhYmxlU2VydmVyTW9kZTsNCitjbGFzcyBOZXR3b3JrVGFibGVDbGllbnRNb2RlOw0KKw0KKyNpbmNsdWRlIDxzdHJpbmc+DQorI2luY2x1ZGUgIm5ldHdvcmt0YWJsZXMyL05ldHdvcmtUYWJsZU5vZGUuaCINCisjaW5jbHVkZSAibmV0d29ya3RhYmxlczIvdGhyZWFkL05UVGhyZWFkTWFuYWdlci5oIg0KKw0KKw0KKy8qKg0KKyAqIA0KKyAqIFJlcHJlc2VudHMgYSBkaWZmZXJlbnQgbW9kZXMgdGhhdCBuZXR3b3JrIHRhYmxlcyBjYW4gYmUgY29uZmlndXJlZCBpbg0KKyAqIA0KKyAqIEBhdXRob3IgTWl0Y2hlbGwNCisgKg0KKyAqLw0KK2NsYXNzIE5ldHdvcmtUYWJsZU1vZGUgew0KK3B1YmxpYzoNCisJDQorCS8qKg0KKwkgKiBAcGFyYW0gaXBBZGRyZXNzIHRoZSBJUCBhZGRyZXNzIGNvbmZpZ3VyZWQgYnkgdGhlIHVzZXINCisJICogQHBhcmFtIHBvcnQgdGhlIHBvcnQgY29uZmlndXJlZCBieSB0aGUgdXNlcg0KKwkgKiBAcGFyYW0gdGhyZWFkTWFuYWdlciB0aGUgdGhyZWFkIG1hbmFnZXIgdGhhdCBzaG91bGQgYmUgdXNlZCBmb3IgdGhyZWFkcyBpbiB0aGUgbm9kZQ0KKwkgKiBAcmV0dXJuIGEgbmV3IG5vZGUgdGhhdCBjYW4gYmFjayBhIG5ldHdvcmsgdGFibGUNCisJICogQHRocm93cyBJT0V4Y2VwdGlvbg0KKwkgKi8NCisJdmlydHVhbCBOZXR3b3JrVGFibGVOb2RlKiBDcmVhdGVOb2RlKGNvbnN0IGNoYXIqIGlwQWRkcmVzcywgaW50IHBvcnQsIE5UVGhyZWFkTWFuYWdlciYgdGhyZWFkTWFuYWdlcikgPSAwOw0KKwkNCisJc3RhdGljIE5ldHdvcmtUYWJsZVNlcnZlck1vZGUgU2VydmVyOw0KKwlzdGF0aWMgTmV0d29ya1RhYmxlQ2xpZW50TW9kZSBDbGllbnQ7DQorfTsNCisNCitjbGFzcyBOZXR3b3JrVGFibGVTZXJ2ZXJNb2RlIDogcHVibGljIE5ldHdvcmtUYWJsZU1vZGV7DQorcHVibGljOg0KKwlOZXR3b3JrVGFibGVTZXJ2ZXJNb2RlKCk7DQorCXZpcnR1YWwgTmV0d29ya1RhYmxlTm9kZSogQ3JlYXRlTm9kZShjb25zdCBjaGFyKiBpcEFkZHJlc3MsIGludCBwb3J0LCBOVFRocmVhZE1hbmFnZXImIHRocmVhZE1hbmFnZXIpOw0KK307DQorDQorY2xhc3MgTmV0d29ya1RhYmxlQ2xpZW50TW9kZSA6IHB1YmxpYyBOZXR3b3JrVGFibGVNb2Rlew0KK3B1YmxpYzoNCisJTmV0d29ya1RhYmxlQ2xpZW50TW9kZSgpOw0KKwl2aXJ0dWFsIE5ldHdvcmtUYWJsZU5vZGUqIENyZWF0ZU5vZGUoY29uc3QgY2hhciogaXBBZGRyZXNzLCBpbnQgcG9ydCwgTlRUaHJlYWRNYW5hZ2VyJiB0aHJlYWRNYW5hZ2VyKTsNCit9Ow0KKw0KKw0KKyNlbmRpZg0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL25ldHdvcmt0YWJsZXMvTmV0d29ya1RhYmxlUHJvdmlkZXIuY3BwIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvbmV0d29ya3RhYmxlcy9OZXR3b3JrVGFibGVQcm92aWRlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWViY2I3ZAotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL25ldHdvcmt0YWJsZXMvTmV0d29ya1RhYmxlUHJvdmlkZXIuY3BwCkBAIC0wLDAgKzEsNDIgQEAKKyNpbmNsdWRlIDxtYXA+DQorI2luY2x1ZGUgPHN0cmluZz4NCisNCisjaW5jbHVkZSAidGFibGVzL0lUYWJsZVByb3ZpZGVyLmgiDQorI2luY2x1ZGUgIm5ldHdvcmt0YWJsZXMyL05ldHdvcmtUYWJsZU5vZGUuaCINCisjaW5jbHVkZSAibmV0d29ya3RhYmxlcy9OZXR3b3JrVGFibGUuaCINCisNCisNCisjaW5jbHVkZSAibmV0d29ya3RhYmxlcy9OZXR3b3JrVGFibGVQcm92aWRlci5oIg0KKw0KKw0KKw0KK3VzaW5nIG5hbWVzcGFjZSBzdGQ7DQorDQorCQkNCisNCitOZXR3b3JrVGFibGVQcm92aWRlcjo6TmV0d29ya1RhYmxlUHJvdmlkZXIoTmV0d29ya1RhYmxlTm9kZSYgX25vZGUpIDogbm9kZShfbm9kZSl7fQ0KK05ldHdvcmtUYWJsZVByb3ZpZGVyOjp+TmV0d29ya1RhYmxlUHJvdmlkZXIoKXsNCisgIHdoaWxlKHRhYmxlcy5zaXplKCk+MCl7DQorICAgIG1hcDxzdGQ6OnN0cmluZywgTmV0d29ya1RhYmxlKj46Oml0ZXJhdG9yIGl0ID0gdGFibGVzLmJlZ2luKCk7DQorICAgIGRlbGV0ZSBpdC0+c2Vjb25kOw0KKyAgICB0YWJsZXMuZXJhc2UoaXQpOw0KKyAgfQ0KK30NCisNCitJVGFibGUqIE5ldHdvcmtUYWJsZVByb3ZpZGVyOjpHZXRSb290VGFibGUoKXsNCisJcmV0dXJuIEdldFRhYmxlKCIiKTsNCit9DQorDQorSVRhYmxlKiBOZXR3b3JrVGFibGVQcm92aWRlcjo6R2V0VGFibGUoc3RkOjpzdHJpbmcga2V5KXsNCisJaWYodGFibGVzLmZpbmQoa2V5KSAhPSB0YWJsZXMuZW5kKCkpDQorCXsNCisJCXJldHVybiB0YWJsZXNba2V5XTsNCisJfQ0KKwllbHNlDQorCXsNCisJCU5ldHdvcmtUYWJsZSogdGFibGUgPSBuZXcgTmV0d29ya1RhYmxlKGtleSwgKnRoaXMpOw0KKwkJdGFibGVzW2tleV0gPSB0YWJsZTsNCisJCXJldHVybiB0YWJsZTsNCisJfQ0KK30NCisNCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9uZXR3b3JrdGFibGVzL05ldHdvcmtUYWJsZVByb3ZpZGVyLmggYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9uZXR3b3JrdGFibGVzL05ldHdvcmtUYWJsZVByb3ZpZGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmZiYTM0YgotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL25ldHdvcmt0YWJsZXMvTmV0d29ya1RhYmxlUHJvdmlkZXIuaApAQCAtMCwwICsxLDQ4IEBACisjaWZuZGVmIF9ORVRXT1JLVEFCTEVQUk9WSURFUl9IXw0KKyNkZWZpbmUgX05FVFdPUktUQUJMRVBST1ZJREVSX0hfDQorDQorDQorY2xhc3MgTmV0d29ya1RhYmxlUHJvdmlkZXI7DQorDQorI2luY2x1ZGUgPHN0cmluZz4NCisNCisjaW5jbHVkZSAidGFibGVzL0lUYWJsZVByb3ZpZGVyLmgiDQorI2luY2x1ZGUgIm5ldHdvcmt0YWJsZXMyL05ldHdvcmtUYWJsZU5vZGUuaCINCisjaW5jbHVkZSAibmV0d29ya3RhYmxlcy9OZXR3b3JrVGFibGUuaCINCisNCit1c2luZyBuYW1lc3BhY2Ugc3RkOw0KKw0KK2NsYXNzIE5ldHdvcmtUYWJsZVByb3ZpZGVyIDogcHVibGljIElUYWJsZVByb3ZpZGVyDQorew0KK3ByaXZhdGU6DQorCU5ldHdvcmtUYWJsZU5vZGUmIG5vZGU7DQorCW1hcDxzdGQ6OnN0cmluZywgTmV0d29ya1RhYmxlKj4gdGFibGVzOw0KKw0KKwkvKioNCisJICogQ3JlYXRlIGEgbmV3IE5ldHdvcmtUYWJsZVByb3ZpZGVyIGZvciBhIGdpdmVuIE5ldHdvcmtUYWJsZU5vZGUNCisJICogQHBhcmFtIG5vZGUgdGhlIG5vZGUgdGhhdCBoYW5kbGVzIHRoZSBhY3R1YWwgbmV0d29yayB0YWJsZSANCisJICovDQorcHVibGljOg0KKwlOZXR3b3JrVGFibGVQcm92aWRlcihOZXR3b3JrVGFibGVOb2RlJiBub2RlKTsNCisJdmlydHVhbCB+TmV0d29ya1RhYmxlUHJvdmlkZXIoKTsNCisJDQorCUlUYWJsZSogR2V0Um9vdFRhYmxlKCk7DQorDQorCUlUYWJsZSogR2V0VGFibGUoc3RkOjpzdHJpbmcga2V5KTsNCisNCisJLyoqDQorCSAqIEByZXR1cm4gdGhlIE5ldHdvcmsgVGFibGUgbm9kZSB0aGF0IGJhY2tzIHRoZSBUYWJsZXMgcmV0dXJuZWQgYnkgdGhpcyBwcm92aWRlcg0KKwkgKi8NCisJTmV0d29ya1RhYmxlTm9kZSYgR2V0Tm9kZSgpIHsNCisJCXJldHVybiBub2RlOw0KKwl9Ow0KKw0KKwkvKioNCisJICogY2xvc2UgdGhlIGJhY2tpbmcgbmV0d29yayB0YWJsZSBub2RlDQorCSAqLw0KKwl2b2lkIENsb3NlKCkgew0KKwkJbm9kZS5DbG9zZSgpOw0KKwl9Ow0KK307DQorDQorI2VuZGlmDQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvbmV0d29ya3RhYmxlcy9OZXR3b3JrVGFibGVTdWJMaXN0ZW5lckFkYXB0ZXIuY3BwIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvbmV0d29ya3RhYmxlcy9OZXR3b3JrVGFibGVTdWJMaXN0ZW5lckFkYXB0ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjMjM4NmUKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9uZXR3b3JrdGFibGVzL05ldHdvcmtUYWJsZVN1Ykxpc3RlbmVyQWRhcHRlci5jcHAKQEAgLTAsMCArMSw0MyBAQAorLyoNCisgKiBOZXR3b3JrVGFibGVTdWJMaXN0ZW5lckFkYXB0ZXIuY3BwDQorICoNCisgKiAgQ3JlYXRlZCBvbjogT2N0IDE3LCAyMDEyDQorICogICAgICBBdXRob3I6IE1pdGNoZWxsIFdpbGxzDQorICovDQorDQorI2luY2x1ZGUgIm5ldHdvcmt0YWJsZXMvTmV0d29ya1RhYmxlU3ViTGlzdGVuZXJBZGFwdGVyLmgiDQorDQorDQorDQorCS8qKg0KKwkgKiBDcmVhdGUgYSBuZXcgYWRhcHRlcg0KKwkgKiBAcGFyYW0gcHJlZml4IHRoZSBwcmVmaXggb2YgdGhlIGN1cnJlbnQgdGFibGUNCisJICogQHBhcmFtIHRhcmdldFNvdXJjZSB0aGUgc291cmNlIHRoYXQgZXZlbnRzIHBhc3NlZCB0byB0aGUgdGFyZ2V0IGxpc3RlbmVyIHdpbGwgYXBwZWFyIHRvIGNvbWUgZnJvbQ0KKwkgKiBAcGFyYW0gdGFyZ2V0TGlzdGVuZXIgdGhlIGxpc3RlbmVyIHdoZXJlIGV2ZW50cyBhcmUgZm9yd2FyZGVkIHRvDQorCSAqLw0KK05ldHdvcmtUYWJsZVN1Ykxpc3RlbmVyQWRhcHRlcjo6TmV0d29ya1RhYmxlU3ViTGlzdGVuZXJBZGFwdGVyKHN0ZDo6c3RyaW5nJiBfcHJlZml4LCBOZXR3b3JrVGFibGUqIF90YXJnZXRTb3VyY2UsIElUYWJsZUxpc3RlbmVyKiBfdGFyZ2V0TGlzdGVuZXIpOg0KKwlwcmVmaXgoX3ByZWZpeCksIHRhcmdldFNvdXJjZShfdGFyZ2V0U291cmNlKSwgdGFyZ2V0TGlzdGVuZXIoX3RhcmdldExpc3RlbmVyKXt9DQorDQorTmV0d29ya1RhYmxlU3ViTGlzdGVuZXJBZGFwdGVyOjp+TmV0d29ya1RhYmxlU3ViTGlzdGVuZXJBZGFwdGVyKCl7fQ0KKw0KKwl2b2lkIE5ldHdvcmtUYWJsZVN1Ykxpc3RlbmVyQWRhcHRlcjo6VmFsdWVDaGFuZ2VkKElUYWJsZSogc291cmNlLCBjb25zdCBzdGQ6OnN0cmluZyYga2V5LCBFbnRyeVZhbHVlIHZhbHVlLCBib29sIGlzTmV3KSB7Ly9UT0RPIHVzZSBzdHJpbmcgY2FjaGUNCisgICAgICAgICAgICBpZihrZXkuY29tcGFyZSgwLHByZWZpeC5zaXplKCkscHJlZml4KT09MCl7DQorICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIHJlbGF0aXZlS2V5ID0ga2V5LnN1YnN0cihwcmVmaXgubGVuZ3RoKCkrMSk7DQorICAgICAgICAgICAgICAgIGludCBlbmRTdWJUYWJsZSA9IC0xOy8vVE9ETyBpbXBsZW1lbnQgc3ViIHRhYmxlIGxpc3RlbmluZyBiZXR0ZXINCisgICAgICAgICAgICAgICAgZm9yKHVuc2lnbmVkIGludCBpID0gMDsgaTxyZWxhdGl2ZUtleS5sZW5ndGgoKTsgKytpKXsNCisgICAgICAgICAgICAgICAgICAgIGlmKHJlbGF0aXZlS2V5LmF0KGkpPT1OZXR3b3JrVGFibGU6OlBBVEhfU0VQQVJBVE9SX0NIQVIpey8vaXMgc3ViIHRhYmxlDQorICAgICAgICAgICAgICAgICAgICAgICAgZW5kU3ViVGFibGUgPSBpOw0KKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgIGlmKGVuZFN1YlRhYmxlIT0tMSl7DQorICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBzdWJUYWJsZUtleSA9IHJlbGF0aXZlS2V5LnN1YnN0cigwLCBlbmRTdWJUYWJsZSk7DQorICAgICAgICAgICAgICAgICAgICBpZihub3RpZmllZFRhYmxlcy5maW5kKHN1YlRhYmxlS2V5KT09bm90aWZpZWRUYWJsZXMuZW5kKCkpew0KKyAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlmaWVkVGFibGVzLmluc2VydChzdWJUYWJsZUtleSk7DQorICAgICAgICAgICAgICAgICAgICAgICAgRW50cnlWYWx1ZSBlVmFsdWU7DQorICAgICAgICAgICAgICAgICAgICAgICAgZVZhbHVlLnB0ciA9IHRhcmdldFNvdXJjZS0+R2V0U3ViVGFibGUoc3ViVGFibGVLZXkpOw0KKyAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldExpc3RlbmVyLT5WYWx1ZUNoYW5nZWQodGFyZ2V0U291cmNlLCBzdWJUYWJsZUtleSwgZVZhbHVlLCB0cnVlKTsNCisgICAgICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIH0NCisJfQ0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL25ldHdvcmt0YWJsZXMvTmV0d29ya1RhYmxlU3ViTGlzdGVuZXJBZGFwdGVyLmggYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9uZXR3b3JrdGFibGVzL05ldHdvcmtUYWJsZVN1Ykxpc3RlbmVyQWRhcHRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5ZWRhZDUKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9uZXR3b3JrdGFibGVzL05ldHdvcmtUYWJsZVN1Ykxpc3RlbmVyQWRhcHRlci5oCkBAIC0wLDAgKzEsMzggQEAKKy8qDQorICogTmV0d29ya1RhYmxlU3ViTGlzdGVuZXJBZGFwdGVyLmgNCisgKg0KKyAqICBDcmVhdGVkIG9uOiBPY3QgMTcsIDIwMTINCisgKiAgICAgIEF1dGhvcjogTWl0Y2hlbGwgV2lsbHMNCisgKi8NCisNCisjaWZuZGVmIE5FVFdPUktUQUJMRVNVQkxJU1RFTkVSQURBUFRFUl9IXw0KKyNkZWZpbmUgTkVUV09SS1RBQkxFU1VCTElTVEVORVJBREFQVEVSX0hfDQorDQorDQorY2xhc3MgTmV0d29ya1RhYmxlU3ViTGlzdGVuZXJBZGFwdGVyOw0KKw0KKyNpbmNsdWRlICJ0YWJsZXMvSVRhYmxlTGlzdGVuZXIuaCINCisjaW5jbHVkZSAidGFibGVzL0lUYWJsZS5oIg0KKyNpbmNsdWRlIDxzdHJpbmc+DQorI2luY2x1ZGUgPHNldD4NCisjaW5jbHVkZSAibmV0d29ya3RhYmxlcy9OZXR3b3JrVGFibGUuaCINCisNCisNCit1c2luZyBuYW1lc3BhY2Ugc3RkOw0KKw0KK2NsYXNzIE5ldHdvcmtUYWJsZVN1Ykxpc3RlbmVyQWRhcHRlciA6IHB1YmxpYyBJVGFibGVMaXN0ZW5lcnsNCitwcml2YXRlOg0KKwlzdGQ6OnN0cmluZyYgcHJlZml4Ow0KKwlOZXR3b3JrVGFibGUqIHRhcmdldFNvdXJjZTsNCisJSVRhYmxlTGlzdGVuZXIqIHRhcmdldExpc3RlbmVyOw0KKwlzZXQ8c3RkOjpzdHJpbmc+IG5vdGlmaWVkVGFibGVzOw0KKw0KK3B1YmxpYzoNCisJTmV0d29ya1RhYmxlU3ViTGlzdGVuZXJBZGFwdGVyKHN0ZDo6c3RyaW5nJiBwcmVmaXgsIE5ldHdvcmtUYWJsZSogdGFyZ2V0U291cmNlLCBJVGFibGVMaXN0ZW5lciogdGFyZ2V0TGlzdGVuZXIpOw0KKwl2aXJ0dWFsIH5OZXR3b3JrVGFibGVTdWJMaXN0ZW5lckFkYXB0ZXIoKTsNCisgICAgdm9pZCBWYWx1ZUNoYW5nZWQoSVRhYmxlKiBzb3VyY2UsIGNvbnN0IHN0ZDo6c3RyaW5nJiBrZXksIEVudHJ5VmFsdWUgdmFsdWUsIGJvb2wgaXNOZXcpOw0KK307DQorDQorDQorDQorI2VuZGlmIC8qIE5FVFdPUktUQUJMRVNVQkxJU1RFTkVSQURBUFRFUl9IXyAqLw0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL25ldHdvcmt0YWJsZXMyL0Fic3RyYWN0TmV0d29ya1RhYmxlRW50cnlTdG9yZS5jcHAgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9uZXR3b3JrdGFibGVzMi9BYnN0cmFjdE5ldHdvcmtUYWJsZUVudHJ5U3RvcmUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkMTkzNmQKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9uZXR3b3JrdGFibGVzMi9BYnN0cmFjdE5ldHdvcmtUYWJsZUVudHJ5U3RvcmUuY3BwCkBAIC0wLDAgKzEsMTk3IEBACisvKg0KKyAqIEFic3RyYWN0TmV0d29ya1RhYmxlRW50cnlTdG9yZS5jcHANCisgKg0KKyAqICBDcmVhdGVkIG9uOiBTZXAgMTYsIDIwMTINCisgKiAgICAgIEF1dGhvcjogTWl0Y2hlbGwgV2lsbHMNCisgKi8NCisNCisjaW5jbHVkZSAibmV0d29ya3RhYmxlczIvQWJzdHJhY3ROZXR3b3JrVGFibGVFbnRyeVN0b3JlLmgiDQorI2luY2x1ZGUgIm5ldHdvcmt0YWJsZXMyL1RhYmxlS2V5RXhpc3RzV2l0aERpZmZlcmVudFR5cGVFeGNlcHRpb24uaCINCisjaW5jbHVkZSA8bWFwPg0KKyNpbmNsdWRlIDx2ZWN0b3I+DQorDQorDQorCUFic3RyYWN0TmV0d29ya1RhYmxlRW50cnlTdG9yZTo6QWJzdHJhY3ROZXR3b3JrVGFibGVFbnRyeVN0b3JlKFRhYmxlTGlzdGVuZXJNYW5hZ2VyJiBsc3RuTWFuYWdlcik6IA0KKwkJCWxpc3RlbmVyTWFuYWdlcihsc3RuTWFuYWdlcil7DQorCX0NCisJDQorCUFic3RyYWN0TmV0d29ya1RhYmxlRW50cnlTdG9yZTo6fkFic3RyYWN0TmV0d29ya1RhYmxlRW50cnlTdG9yZSgpew0KKwkJTE9DSy50YWtlKCk7DQorCQlzdGQ6Om1hcDxzdGQ6OnN0cmluZywgTmV0d29ya1RhYmxlRW50cnkqPjo6aXRlcmF0b3IgaXRyOw0KKwkJZm9yKGl0ciA9IG5hbWVkRW50cmllcy5iZWdpbigpOyBpdHIgIT0gbmFtZWRFbnRyaWVzLmVuZCgpOyl7DQorCQkgICAgZGVsZXRlIGl0ci0+c2Vjb25kOw0KKwkJICAgIG5hbWVkRW50cmllcy5lcmFzZShpdHIrKyk7DQorCQl9DQorCX07DQorCQ0KKwkvKioNCisJICogR2V0IGFuIGVudHJ5IGJhc2VkIG9uIGl0J3MgbmFtZQ0KKwkgKiBAcGFyYW0gbmFtZSB0aGUgbmFtZSBvZiB0aGUgZW50cnkgdG8gbG9vayBmb3INCisJICogQHJldHVybiB0aGUgZW50cnkgb3IgbnVsbCBpZiB0aGUgZW50cnkgZG9lcyBub3QgZXhpc3QNCisJICovDQorCU5ldHdvcmtUYWJsZUVudHJ5KiBBYnN0cmFjdE5ldHdvcmtUYWJsZUVudHJ5U3RvcmU6OkdldEVudHJ5KHN0ZDo6c3RyaW5nJiBuYW1lKXsNCisJCXsgDQorCQkJU3luY2hyb25pemVkIHN5bmMoTE9DSyk7DQorCQkJcmV0dXJuIG5hbWVkRW50cmllc1tuYW1lXTsvL1RPRE8gY2hlY2sgZm9yIG5vdCBleGlzdGluZw0KKwkJfQ0KKwl9DQorCQ0KKwlOZXR3b3JrVGFibGVFbnRyeSogQWJzdHJhY3ROZXR3b3JrVGFibGVFbnRyeVN0b3JlOjpHZXRFbnRyeShFbnRyeUlkIGVudHJ5SWQpew0KKwkJeyANCisJCQlTeW5jaHJvbml6ZWQgc3luYyhMT0NLKTsNCisJCQlyZXR1cm4gaWRFbnRyaWVzW2VudHJ5SWRdOy8vVE9ETyBjaGVjayBmb3Igbm90IGV4aXN0aW5nDQorCQl9DQorCX0NCisJDQorCXN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiogQWJzdHJhY3ROZXR3b3JrVGFibGVFbnRyeVN0b3JlOjprZXlzKCl7DQorCQl7IA0KKwkJCVN5bmNocm9uaXplZCBzeW5jKExPQ0spOw0KKwkJCXN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPioga2V5cyA9IG5ldyBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4oKTsNCisJCQlzdGQ6Om1hcDxzdGQ6OnN0cmluZywgTmV0d29ya1RhYmxlRW50cnkqPjo6aXRlcmF0b3IgaXRyOw0KKwkJCQ0KKwkJCWZvcihpdHIgPSBuYW1lZEVudHJpZXMuYmVnaW4oKTsgaXRyICE9IG5hbWVkRW50cmllcy5lbmQoKTsgaXRyKyspDQorCQkJew0KKwkJCQlzdGQ6OnN0cmluZyBrZXkgPSAoKml0cikuZmlyc3Q7DQorCQkJCWtleXMtPnB1c2hfYmFjayhrZXkpOw0KKwkJCX0NCisJCQkNCisJCQlyZXR1cm4gKGtleXMpOw0KKwkJfQ0KKwkJDQorCX0NCisJDQorCS8qKg0KKwkgKiBSZW1vdmUgYWxsIGVudHJpZXMNCisgICAgICAgICAqIE5PVEU6IFRoaXMgbWV0aG9kIHNob3VsZCBub3QgYmUgdXNlZCB3aXRoIGFwcGxpY2F0aW9ucyB3aGljaCBjYWNoZSBlbnRyaWVzIHdoaWNoIHdvdWxkIGxlYWQgdG8gdW5rbm93biByZXN1bHRzDQorICAgICAgICAgKiBUaGlzIG1ldGhvZCBpcyBmb3IgdXNlIGluIHRlc3Rpbmcgb25seQ0KKwkgKi8NCisJdm9pZCBBYnN0cmFjdE5ldHdvcmtUYWJsZUVudHJ5U3RvcmU6OmNsZWFyRW50cmllcygpew0KKwkJeyANCisJCQlTeW5jaHJvbml6ZWQgc3luYyhMT0NLKTsNCisJCQluYW1lZEVudHJpZXMuY2xlYXIoKTsNCisJCQlpZEVudHJpZXMuY2xlYXIoKTsNCisJCX0NCisJfQ0KKwkNCisJLyoqDQorCSAqIGNsZWFyIHRoZSBpZCdzIG9mIGFsbCBlbnRyaWVzDQorCSAqLw0KKwl2b2lkIEFic3RyYWN0TmV0d29ya1RhYmxlRW50cnlTdG9yZTo6Y2xlYXJJZHMoKXsNCisJCXsgDQorCQkJU3luY2hyb25pemVkIHN5bmMoTE9DSyk7DQorCQkJc3RkOjptYXA8c3RkOjpzdHJpbmcsIE5ldHdvcmtUYWJsZUVudHJ5Kj46Oml0ZXJhdG9yIGl0cjsNCisJCQlpZEVudHJpZXMuY2xlYXIoKTsNCisJCQkNCisJCQlmb3IoaXRyID0gbmFtZWRFbnRyaWVzLmJlZ2luKCk7IGl0ciAhPSBuYW1lZEVudHJpZXMuZW5kKCk7IGl0cisrKQ0KKwkJCXsNCisJCQkJKChOZXR3b3JrVGFibGVFbnRyeSopKCppdHIpLnNlY29uZCktPkNsZWFySWQoKTsNCisJCQl9DQorCQl9DQorCX0NCisJDQorCXZvaWQgQWJzdHJhY3ROZXR3b3JrVGFibGVFbnRyeVN0b3JlOjpTZXRPdXRnb2luZ1JlY2VpdmVyKE91dGdvaW5nRW50cnlSZWNlaXZlciogcmVjZWl2ZXIpew0KKwkJb3V0Z29pbmdSZWNlaXZlciA9IHJlY2VpdmVyOw0KKwl9DQorCQ0KKwl2b2lkIEFic3RyYWN0TmV0d29ya1RhYmxlRW50cnlTdG9yZTo6U2V0SW5jb21pbmdSZWNlaXZlcihPdXRnb2luZ0VudHJ5UmVjZWl2ZXIqIHJlY2VpdmVyKXsNCisJCWluY29taW5nUmVjZWl2ZXIgPSByZWNlaXZlcjsNCisJfQ0KKwkNCisJLyoqDQorCSAqIFN0b3JlcyB0aGUgZ2l2ZW4gdmFsdWUgdW5kZXIgdGhlIGdpdmVuIG5hbWUgYW5kIHF1ZXVlcyBpdCBmb3IgDQorCSAqIHRyYW5zbWlzc2lvbiB0byB0aGUgc2VydmVyLg0KKwkgKiANCisJICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgdW5kZXIgd2hpY2ggdG8gc3RvcmUgdGhlIGdpdmVuIHZhbHVlLg0KKwkgKiBAcGFyYW0gdHlwZSBUaGUgdHlwZSBvZiB0aGUgZ2l2ZW4gdmFsdWUuDQorCSAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgdG8gc3RvcmUuDQorCSAqIEB0aHJvd3MgVGFibGVLZXlFeGlzdHNXaXRoRGlmZmVyZW50VHlwZUV4Y2VwdGlvbiBUaHJvd24gaWYgYW4gDQorCSAqICBlbnRyeSBhbHJlYWR5IGV4aXN0cyB3aXRoIHRoZSBnaXZlbiBuYW1lIGFuZCBpcyBvZiBhIGRpZmZlcmVudCB0eXBlLg0KKwkgKi8NCisJdm9pZCBBYnN0cmFjdE5ldHdvcmtUYWJsZUVudHJ5U3RvcmU6OlB1dE91dGdvaW5nKHN0ZDo6c3RyaW5nJiBuYW1lLCBOZXR3b3JrVGFibGVFbnRyeVR5cGUqIHR5cGUsIEVudHJ5VmFsdWUgdmFsdWUpew0KKwkJeyANCisJCQlTeW5jaHJvbml6ZWQgc3luYyhMT0NLKTsNCisJCQlzdGQ6Om1hcDxzdGQ6OnN0cmluZywgTmV0d29ya1RhYmxlRW50cnkqPjo6aXRlcmF0b3IgaW5kZXggPSBuYW1lZEVudHJpZXMuZmluZChuYW1lKTsNCisJCQlOZXR3b3JrVGFibGVFbnRyeSogdGFibGVFbnRyeTsNCisJCQlpZihpbmRleCA9PSBuYW1lZEVudHJpZXMuZW5kKCkgfHwgbmFtZWRFbnRyaWVzW25hbWVdPT1OVUxMKS8vaWYgdGhlIG5hbWUgZG9lcyBub3QgZXhpc3QgaW4gdGhlIGN1cnJlbnQgZW50cmllcw0KKwkJCSAgey8vVE9ETyB3aHkgZG9lc24ndCBmaW5kIGNvcnJlY3RseSBkZXRlY3QgdGhhdCB0aGUgZW50cnkgZG9lcyBub3QgZXhpc3QNCisJCQkJdGFibGVFbnRyeSA9IG5ldyBOZXR3b3JrVGFibGVFbnRyeShuYW1lLCB0eXBlLCB2YWx1ZSk7DQorCQkJCWlmKGFkZEVudHJ5KHRhYmxlRW50cnkpKQ0KKwkJCQl7DQorCQkJCQl0YWJsZUVudHJ5LT5GaXJlTGlzdGVuZXIobGlzdGVuZXJNYW5hZ2VyKTsNCisJCQkJCW91dGdvaW5nUmVjZWl2ZXItPm9mZmVyT3V0Z29pbmdBc3NpZ25tZW50KHRhYmxlRW50cnkpOw0KKwkJCQl9DQorCQkJfQ0KKwkJCWVsc2UNCisJCQl7DQorCQkJCXRhYmxlRW50cnkgPSBuYW1lZEVudHJpZXNbbmFtZV07DQorCQkJCWlmKHRhYmxlRW50cnktPkdldFR5cGUoKS0+aWQgIT0gdHlwZS0+aWQpew0KKwkJCQkJdGhyb3cgVGFibGVLZXlFeGlzdHNXaXRoRGlmZmVyZW50VHlwZUV4Y2VwdGlvbihuYW1lLCB0YWJsZUVudHJ5LT5HZXRUeXBlKCkpOw0KKwkJCQl9DQorCQkJCQ0KKwkJCQlpZih1cGRhdGVFbnRyeSh0YWJsZUVudHJ5LCAoU2VxdWVuY2VOdW1iZXIpKHRhYmxlRW50cnktPkdldFNlcXVlbmNlTnVtYmVyKCkgKyAxKSwgdmFsdWUpKXsNCisJCQkJCW91dGdvaW5nUmVjZWl2ZXItPm9mZmVyT3V0Z29pbmdVcGRhdGUodGFibGVFbnRyeSk7DQorCQkJCX0NCisJCQkJDQorCQkJCXRhYmxlRW50cnktPkZpcmVMaXN0ZW5lcihsaXN0ZW5lck1hbmFnZXIpOw0KKwkJCX0NCisJCX0NCisJfQ0KKwkNCisJdm9pZCBBYnN0cmFjdE5ldHdvcmtUYWJsZUVudHJ5U3RvcmU6OlB1dE91dGdvaW5nKE5ldHdvcmtUYWJsZUVudHJ5KiB0YWJsZUVudHJ5LCBFbnRyeVZhbHVlIHZhbHVlKXsNCisJCXsgDQorCQkJU3luY2hyb25pemVkIHN5bmMoTE9DSyk7DQorCQkJaWYodXBkYXRlRW50cnkodGFibGVFbnRyeSwgKFNlcXVlbmNlTnVtYmVyKSh0YWJsZUVudHJ5LT5HZXRTZXF1ZW5jZU51bWJlcigpICsgMSksIHZhbHVlKSl7DQorCQkJCW91dGdvaW5nUmVjZWl2ZXItPm9mZmVyT3V0Z29pbmdVcGRhdGUodGFibGVFbnRyeSk7DQorCQkJfQ0KKwkJCQ0KKwkJCXRhYmxlRW50cnktPkZpcmVMaXN0ZW5lcihsaXN0ZW5lck1hbmFnZXIpOw0KKwkJfQ0KKwl9DQorCQ0KKwl2b2lkIEFic3RyYWN0TmV0d29ya1RhYmxlRW50cnlTdG9yZTo6b2ZmZXJJbmNvbWluZ0Fzc2lnbm1lbnQoTmV0d29ya1RhYmxlRW50cnkqIGVudHJ5KXsNCisJCXsgDQorCQkJU3luY2hyb25pemVkIHN5bmMoTE9DSyk7DQorCQkJc3RkOjptYXA8c3RkOjpzdHJpbmcsIE5ldHdvcmtUYWJsZUVudHJ5Kj46Oml0ZXJhdG9yIGl0ciA9IG5hbWVkRW50cmllcy5maW5kKGVudHJ5LT5uYW1lKTsNCisJCQlOZXR3b3JrVGFibGVFbnRyeSogdGFibGVFbnRyeTsNCisJCQlpZihhZGRFbnRyeShlbnRyeSkpew0KKwkJCQlpZihpdHIgIT0gbmFtZWRFbnRyaWVzLmVuZCgpKXsNCisJCQkJCXRhYmxlRW50cnkgPSBuYW1lZEVudHJpZXNbZW50cnktPm5hbWVdOw0KKwkJCQl9DQorCQkJCWVsc2V7DQorCQkJCQl0YWJsZUVudHJ5ID0gZW50cnk7DQorCQkJCX0NCisJCQkJDQorCQkJCXRhYmxlRW50cnktPkZpcmVMaXN0ZW5lcihsaXN0ZW5lck1hbmFnZXIpOy8vaWYgd2UgZGlkbnQgaGF2ZSBhIHBvaW50ZXIsIHRoZW4gdGhlIGNvcHkgb2YgdGhlIHZlcnNpb24gaW4gdGhlIGxpc3Qgd291bGQgY2FsbCB0aGlzIG1ldGhvZCwgaG93ZXZlciB3aXRoIHRoZSBwb2ludGVyIHdlIGFyZSB1cGRhdGluZyB0aGUgdmVyc2lvbiBpbiB0aGUgbGlzdA0KKwkJCQlpbmNvbWluZ1JlY2VpdmVyLT5vZmZlck91dGdvaW5nQXNzaWdubWVudCh0YWJsZUVudHJ5KTsNCisJCQl9DQorCQkJZWxzZQ0KKwkJCSAgZGVsZXRlIGVudHJ5Ow0KKwkJfQ0KKwl9DQorCQ0KKwl2b2lkIEFic3RyYWN0TmV0d29ya1RhYmxlRW50cnlTdG9yZTo6b2ZmZXJJbmNvbWluZ1VwZGF0ZShOZXR3b3JrVGFibGVFbnRyeSogZW50cnksIFNlcXVlbmNlTnVtYmVyIHNxdWVuY2VOdW1iZXIsIEVudHJ5VmFsdWUgdmFsdWUpew0KKwkJeyANCisJCQlTeW5jaHJvbml6ZWQgc3luYyhMT0NLKTsNCisJCQlpZih1cGRhdGVFbnRyeShlbnRyeSwgc3F1ZW5jZU51bWJlciwgdmFsdWUpKXsNCisJCQkJZW50cnktPkZpcmVMaXN0ZW5lcihsaXN0ZW5lck1hbmFnZXIpOw0KKwkJCQlpbmNvbWluZ1JlY2VpdmVyLT5vZmZlck91dGdvaW5nVXBkYXRlKGVudHJ5KTsNCisJCQl9DQorCQl9DQorCX0NCisJDQorCS8qKg0KKwkgKiBDYWxsZWQgdG8gc2F5IHRoYXQgYSBsaXN0ZW5lciBzaG91bGQgbm90aWZ5IHRoZSBsaXN0ZW5lciBtYW5hZ2VyIG9mIGFsbCBvZiB0aGUgZW50cmllcw0KKwkgKiBAcGFyYW0gbGlzdGVuZXINCisJICogQHBhcmFtIHRhYmxlIA0KKwkgKi8NCisJdm9pZCBBYnN0cmFjdE5ldHdvcmtUYWJsZUVudHJ5U3RvcmU6Om5vdGlmeUVudHJpZXMoSVRhYmxlKiB0YWJsZSwgSVRhYmxlTGlzdGVuZXIqIGxpc3RlbmVyKXsNCisJCXsgDQorCQkJU3luY2hyb25pemVkIHN5bmMoTE9DSyk7DQorCQkJc3RkOjptYXA8c3RkOjpzdHJpbmcsIE5ldHdvcmtUYWJsZUVudHJ5Kj46Oml0ZXJhdG9yIGl0cjsNCisJCQlmb3IoaXRyID0gbmFtZWRFbnRyaWVzLmJlZ2luKCk7IGl0ciAhPSBuYW1lZEVudHJpZXMuZW5kKCk7IGl0cisrKQ0KKwkJCXsNCisJCQkJTmV0d29ya1RhYmxlRW50cnkqIGVudHJ5ID0gbmFtZWRFbnRyaWVzWygqaXRyKS5maXJzdF07Ly90aGlzIG1heSBzZWVtIG9kZCwgYnV0IGl0cyBzbyB3ZSBnZXQgdGhlIGFkZHJlc3Mgb2YgdGhlIGxpc3QgZWxlbWVudCwgcmF0aGVyIHRoYW4gdGhlIGNvcHkgc3RvcmVkIGluIHRoZSBpdHINCisJCQkJbGlzdGVuZXItPlZhbHVlQ2hhbmdlZCh0YWJsZSwgKCppdHIpLmZpcnN0LCBlbnRyeS0+R2V0VmFsdWUoKSwgdHJ1ZSk7DQorCQkJfQ0KKwkJfQ0KKwl9DQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvbmV0d29ya3RhYmxlczIvQWJzdHJhY3ROZXR3b3JrVGFibGVFbnRyeVN0b3JlLmggYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9uZXR3b3JrdGFibGVzMi9BYnN0cmFjdE5ldHdvcmtUYWJsZUVudHJ5U3RvcmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODE1OTMxCi0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvbmV0d29ya3RhYmxlczIvQWJzdHJhY3ROZXR3b3JrVGFibGVFbnRyeVN0b3JlLmgKQEAgLTAsMCArMSw3OCBAQAorLyoNCisgKiBBYnN0cmFjdE5ldHdvcmtUYWJsZUVudHJ5U3RvcmUuaA0KKyAqDQorICogIENyZWF0ZWQgb246IFNlcCAxNiwgMjAxMg0KKyAqICAgICAgQXV0aG9yOiBNaXRjaGVsbCBXaWxscw0KKyAqLw0KKw0KKyNpZm5kZWYgQUJTVFJBQ1RORVRXT1JLVEFCTEVFTlRSWVNUT1JFX0hfDQorI2RlZmluZSBBQlNUUkFDVE5FVFdPUktUQUJMRUVOVFJZU1RPUkVfSF8NCisNCisNCisNCitjbGFzcyBUYWJsZUxpc3RlbmVyTWFuYWdlcjsNCitjbGFzcyBBYnN0cmFjdE5ldHdvcmtUYWJsZUVudHJ5U3RvcmU7DQorDQorDQorI2luY2x1ZGUgIlN5bmNocm9uaXplZC5oIg0KKyNpbmNsdWRlIDxzdHJpbmc+DQorI2luY2x1ZGUgIk5ldHdvcmtUYWJsZUVudHJ5LmgiDQorI2luY2x1ZGUgIkluY29taW5nRW50cnlSZWNlaXZlci5oIg0KKyNpbmNsdWRlICJPdXRnb2luZ0VudHJ5UmVjZWl2ZXIuaCINCisjaW5jbHVkZSAidHlwZS9OZXR3b3JrVGFibGVFbnRyeVR5cGUuaCINCisjaW5jbHVkZSAidGFibGVzL0lUYWJsZS5oIg0KKyNpbmNsdWRlICJ0YWJsZXMvSVRhYmxlTGlzdGVuZXIuaCINCisjaW5jbHVkZSA8bWFwPg0KKyNpbmNsdWRlIDx2ZWN0b3I+DQorDQorDQorDQorY2xhc3MgVGFibGVMaXN0ZW5lck1hbmFnZXJ7DQorcHVibGljOg0KKwl2aXJ0dWFsIH5UYWJsZUxpc3RlbmVyTWFuYWdlcigpe30NCisJdmlydHVhbCB2b2lkIEZpcmVUYWJsZUxpc3RlbmVycyhzdGQ6OnN0cmluZyYgbmFtZSwgRW50cnlWYWx1ZSB2YWx1ZSwgYm9vbCBpc05ldykgPSAwOw0KK307DQorDQorY2xhc3MgQWJzdHJhY3ROZXR3b3JrVGFibGVFbnRyeVN0b3JlIDogcHVibGljIEluY29taW5nRW50cnlSZWNlaXZlcnsNCitwcm90ZWN0ZWQ6DQorCXN0ZDo6bWFwPEVudHJ5SWQsTmV0d29ya1RhYmxlRW50cnkqPiBpZEVudHJpZXM7DQorCXN0ZDo6bWFwPHN0ZDo6c3RyaW5nLE5ldHdvcmtUYWJsZUVudHJ5Kj4gbmFtZWRFbnRyaWVzOw0KKwlUYWJsZUxpc3RlbmVyTWFuYWdlciYgbGlzdGVuZXJNYW5hZ2VyOw0KKw0KKwlBYnN0cmFjdE5ldHdvcmtUYWJsZUVudHJ5U3RvcmUoVGFibGVMaXN0ZW5lck1hbmFnZXImIGxzdG5NYW5hZ2VyKTsNCisNCisJT3V0Z29pbmdFbnRyeVJlY2VpdmVyKiBvdXRnb2luZ1JlY2VpdmVyOw0KKwlPdXRnb2luZ0VudHJ5UmVjZWl2ZXIqIGluY29taW5nUmVjZWl2ZXI7DQorDQorDQorCQ0KKwl2aXJ0dWFsIGJvb2wgYWRkRW50cnkoTmV0d29ya1RhYmxlRW50cnkqIGVudHJ5KSA9IDA7DQorCXZpcnR1YWwgYm9vbCB1cGRhdGVFbnRyeShOZXR3b3JrVGFibGVFbnRyeSogZW50cnksIFNlcXVlbmNlTnVtYmVyIHNlcXVlbmNlTnVtYmVyLCBFbnRyeVZhbHVlIHZhbHVlKSA9IDA7DQorCQ0KK3B1YmxpYzoNCisJdmlydHVhbCB+QWJzdHJhY3ROZXR3b3JrVGFibGVFbnRyeVN0b3JlKCk7DQorDQorCVJlZW50cmFudFNlbWFwaG9yZSBMT0NLOw0KKwlOZXR3b3JrVGFibGVFbnRyeSogR2V0RW50cnkoRW50cnlJZCBlbnRyeUlkKTsNCisJTmV0d29ya1RhYmxlRW50cnkqIEdldEVudHJ5KHN0ZDo6c3RyaW5nJiBuYW1lKTsNCisNCisJc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+KiBrZXlzKCk7DQorICAgIHZvaWQgY2xlYXJFbnRyaWVzKCk7DQorCXZvaWQgY2xlYXJJZHMoKTsNCisNCisJdm9pZCBTZXRPdXRnb2luZ1JlY2VpdmVyKE91dGdvaW5nRW50cnlSZWNlaXZlciogcmVjZWl2ZXIpOw0KKwl2b2lkIFNldEluY29taW5nUmVjZWl2ZXIoT3V0Z29pbmdFbnRyeVJlY2VpdmVyKiByZWNlaXZlcik7DQorCQ0KKwl2b2lkIFB1dE91dGdvaW5nKHN0ZDo6c3RyaW5nJiBuYW1lLCBOZXR3b3JrVGFibGVFbnRyeVR5cGUqIHR5cGUsIEVudHJ5VmFsdWUgdmFsdWUpOw0KKwl2b2lkIFB1dE91dGdvaW5nKE5ldHdvcmtUYWJsZUVudHJ5KiB0YWJsZUVudHJ5LCBFbnRyeVZhbHVlIHZhbHVlKTsNCisJDQorDQorCXZvaWQgb2ZmZXJJbmNvbWluZ0Fzc2lnbm1lbnQoTmV0d29ya1RhYmxlRW50cnkqIGVudHJ5KTsNCisJdm9pZCBvZmZlckluY29taW5nVXBkYXRlKE5ldHdvcmtUYWJsZUVudHJ5KiBlbnRyeSwgRW50cnlJZCBzZXF1ZW5jZU51bWJlciwgRW50cnlWYWx1ZSB2YWx1ZSk7DQorCQ0KKwl2b2lkIG5vdGlmeUVudHJpZXMoSVRhYmxlKiB0YWJsZSwgSVRhYmxlTGlzdGVuZXIqIGxpc3RlbmVyKTsNCisNCit9Ow0KKw0KKw0KKyNlbmRpZiAvKiBBQlNUUkFDVE5FVFdPUktUQUJMRUVOVFJZU1RPUkVfSF8gKi8NCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9uZXR3b3JrdGFibGVzMi9GbHVzaGFibGVPdXRnb2luZ0VudHJ5UmVjZWl2ZXIuaCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL25ldHdvcmt0YWJsZXMyL0ZsdXNoYWJsZU91dGdvaW5nRW50cnlSZWNlaXZlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjYzcwYjgKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9uZXR3b3JrdGFibGVzMi9GbHVzaGFibGVPdXRnb2luZ0VudHJ5UmVjZWl2ZXIuaApAQCAtMCwwICsxLDI1IEBACisvKg0KKyAqIEZsdXNoYWJsZU91dGdvaW5nRW50cnlSZWNlaXZlci5oDQorICoNCisgKiAgQ3JlYXRlZCBvbjogU2VwIDIyLCAyMDEyDQorICogICAgICBBdXRob3I6IE1pdGNoZWxsIFdpbGxzDQorICovDQorDQorI2lmbmRlZiBGTFVTSEFCTEVPVVRHT0lOR0VOVFJZUkVDRUlWRVJfSF8NCisjZGVmaW5lIEZMVVNIQUJMRU9VVEdPSU5HRU5UUllSRUNFSVZFUl9IXw0KKw0KK2NsYXNzIEZsdXNoYWJsZU91dGdvaW5nRW50cnlSZWNlaXZlcjsNCisNCisjaW5jbHVkZSAiT3V0Z29pbmdFbnRyeVJlY2VpdmVyLmgiDQorDQorY2xhc3MgRmx1c2hhYmxlT3V0Z29pbmdFbnRyeVJlY2VpdmVyIDogcHVibGljIE91dGdvaW5nRW50cnlSZWNlaXZlcg0KK3sNCitwdWJsaWM6DQorCXZpcnR1YWwgfkZsdXNoYWJsZU91dGdvaW5nRW50cnlSZWNlaXZlcigpDQorCXsNCisJfQ0KKwl2aXJ0dWFsIHZvaWQgZmx1c2goKSA9IDA7DQorCXZpcnR1YWwgdm9pZCBlbnN1cmVBbGl2ZSgpID0gMDsNCit9Ow0KKw0KKyNlbmRpZiAvKiBGTFVTSEFCTEVPVVRHT0lOR0VOVFJZUkVDRUlWRVJfSF8gKi8NCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9uZXR3b3JrdGFibGVzMi9JbmNvbWluZ0VudHJ5UmVjZWl2ZXIuaCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL25ldHdvcmt0YWJsZXMyL0luY29taW5nRW50cnlSZWNlaXZlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjNzgwNGMKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9uZXR3b3JrdGFibGVzMi9JbmNvbWluZ0VudHJ5UmVjZWl2ZXIuaApAQCAtMCwwICsxLDI2IEBACisvKg0KKyAqIEluY29taW5nRW50cnlSZWNlaXZlci5oDQorICoNCisgKiAgQ3JlYXRlZCBvbjogU2VwIDE5LCAyMDEyDQorICogICAgICBBdXRob3I6IE1pdGNoZWxsIFdpbGxzDQorICovDQorDQorI2lmbmRlZiBJTkNPTUlOR0VOVFJZUkVDRUlWRVJfSF8NCisjZGVmaW5lIElOQ09NSU5HRU5UUllSRUNFSVZFUl9IXw0KKw0KK2NsYXNzIEluY29taW5nRW50cnlSZWNlaXZlcjsNCisNCisjaW5jbHVkZSAiTmV0d29ya1RhYmxlRW50cnkuaCINCisjaW5jbHVkZSAidGFibGVzL0lUYWJsZS5oIg0KKw0KK2NsYXNzIEluY29taW5nRW50cnlSZWNlaXZlcg0KK3sNCitwdWJsaWM6DQorCXZpcnR1YWwgfkluY29taW5nRW50cnlSZWNlaXZlcigpDQorCXsNCisJfQ0KKwl2aXJ0dWFsIHZvaWQgb2ZmZXJJbmNvbWluZ0Fzc2lnbm1lbnQoTmV0d29ya1RhYmxlRW50cnkqIGVudHJ5KSA9IDA7DQorCXZpcnR1YWwgdm9pZCBvZmZlckluY29taW5nVXBkYXRlKE5ldHdvcmtUYWJsZUVudHJ5KiBlbnRyeSwgU2VxdWVuY2VOdW1iZXIgZW50cnlTZXF1ZW5jZU51bWJlciwgRW50cnlWYWx1ZSB2YWx1ZSkgPSAwOw0KK307DQorDQorI2VuZGlmIC8qIElOQ09NSU5HRU5UUllSRUNFSVZFUl9IXyAqLw0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL25ldHdvcmt0YWJsZXMyL05ldHdvcmtUYWJsZUVudHJ5LmNwcCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL25ldHdvcmt0YWJsZXMyL05ldHdvcmtUYWJsZUVudHJ5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NGQ5ZDRhCi0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvbmV0d29ya3RhYmxlczIvTmV0d29ya1RhYmxlRW50cnkuY3BwCkBAIC0wLDAgKzEsMTIzIEBACisjaW5jbHVkZSAibmV0d29ya3RhYmxlczIvTmV0d29ya1RhYmxlRW50cnkuaCINCisNCisNCisNCitOZXR3b3JrVGFibGVFbnRyeTo6TmV0d29ya1RhYmxlRW50cnkoc3RkOjpzdHJpbmcmIF9uYW1lLCBOZXR3b3JrVGFibGVFbnRyeVR5cGUqIF90eXBlLCBFbnRyeVZhbHVlIF92YWx1ZSkNCisgIDogbmFtZShfbmFtZSksIHR5cGUoX3R5cGUpew0KKwlpZCA9IFVOS05PV05fSUQ7DQorCXNlcXVlbmNlTnVtYmVyID0gMDsNCisJdmFsdWUgPSB0eXBlLT5jb3B5VmFsdWUoX3ZhbHVlKTsNCisJbV9pc05ldyA9IHRydWU7DQorCW1faXNEaXJ0eSA9IGZhbHNlOw0KK30NCisNCitOZXR3b3JrVGFibGVFbnRyeTo6TmV0d29ya1RhYmxlRW50cnkoRW50cnlJZCBfaWQsIHN0ZDo6c3RyaW5nJiBfbmFtZSwgU2VxdWVuY2VOdW1iZXIgX3NlcXVlbmNlTnVtYmVyLCBOZXR3b3JrVGFibGVFbnRyeVR5cGUqIF90eXBlLCBFbnRyeVZhbHVlIF92YWx1ZSkNCisgOm5hbWUoX25hbWUpLCB0eXBlKF90eXBlKXsNCisJaWQgPSBfaWQ7DQorCXNlcXVlbmNlTnVtYmVyID0gX3NlcXVlbmNlTnVtYmVyOw0KKwl2YWx1ZSA9IHR5cGUtPmNvcHlWYWx1ZShfdmFsdWUpOw0KKwltX2lzTmV3ID0gdHJ1ZTsNCisJbV9pc0RpcnR5ID0gZmFsc2U7DQorfQ0KKw0KK05ldHdvcmtUYWJsZUVudHJ5Ojp+TmV0d29ya1RhYmxlRW50cnkoKXsNCisgIHR5cGUtPmRlbGV0ZVZhbHVlKHZhbHVlKTsNCit9DQorDQorRW50cnlJZCBOZXR3b3JrVGFibGVFbnRyeTo6R2V0SWQoKSB7DQorCXJldHVybiBpZDsNCit9DQorDQorRW50cnlWYWx1ZSBOZXR3b3JrVGFibGVFbnRyeTo6R2V0VmFsdWUoKXsNCisJcmV0dXJuIHZhbHVlOw0KK30NCisNCitOZXR3b3JrVGFibGVFbnRyeVR5cGUqIE5ldHdvcmtUYWJsZUVudHJ5OjpHZXRUeXBlKCl7DQorCXJldHVybiB0eXBlOw0KK30NCisNCitib29sIE5ldHdvcmtUYWJsZUVudHJ5OjpQdXRWYWx1ZShTZXF1ZW5jZU51bWJlciBuZXdTZXF1ZW5jZU51bWJlciwgRW50cnlWYWx1ZSBuZXdWYWx1ZSkgew0KKwlpZiggKHNlcXVlbmNlTnVtYmVyIDwgbmV3U2VxdWVuY2VOdW1iZXIgJiYgbmV3U2VxdWVuY2VOdW1iZXIgLSBzZXF1ZW5jZU51bWJlciA8IEhBTEZfT0ZfU0VRVUVOQ0VfTlVNQkVSUykNCisJCQl8fCAoc2VxdWVuY2VOdW1iZXIgPiBuZXdTZXF1ZW5jZU51bWJlciAmJiBzZXF1ZW5jZU51bWJlciAtIG5ld1NlcXVlbmNlTnVtYmVyID4gSEFMRl9PRl9TRVFVRU5DRV9OVU1CRVJTKSApew0KKwkgIEVudHJ5VmFsdWUgbmV3VmFsdWVDb3B5ID0gdHlwZS0+Y29weVZhbHVlKG5ld1ZhbHVlKTsNCisJICB0eXBlLT5kZWxldGVWYWx1ZSh2YWx1ZSk7DQorCSAgdmFsdWUgPSBuZXdWYWx1ZUNvcHk7DQorCSAgc2VxdWVuY2VOdW1iZXIgPSBuZXdTZXF1ZW5jZU51bWJlcjsNCisJICByZXR1cm4gdHJ1ZTsNCisJfQ0KKwlyZXR1cm4gZmFsc2U7DQorfQ0KKy8qKg0KKyAqIGZvcmNlIGEgdmFsdWUgYW5kIG5ldyBzZXF1ZW5jZSBudW1iZXIgdXBvbiBhbiBlbnRyeQ0KKyAqIEBwYXJhbSBuZXdTZXF1ZW5jZU51bWJlcg0KKyAqIEBwYXJhbSBuZXdWYWx1ZQ0KKyAqLw0KK3ZvaWQgTmV0d29ya1RhYmxlRW50cnk6OkZvcmNlUHV0KFNlcXVlbmNlTnVtYmVyIG5ld1NlcXVlbmNlTnVtYmVyLCBFbnRyeVZhbHVlIG5ld1ZhbHVlKSB7DQorICBFbnRyeVZhbHVlIG5ld1ZhbHVlQ29weSA9IHR5cGUtPmNvcHlWYWx1ZShuZXdWYWx1ZSk7DQorICB0eXBlLT5kZWxldGVWYWx1ZSh2YWx1ZSk7DQorICB2YWx1ZSA9IG5ld1ZhbHVlQ29weTsNCisgIHNlcXVlbmNlTnVtYmVyID0gbmV3U2VxdWVuY2VOdW1iZXI7DQorfQ0KKy8qKg0KKyAqIGZvcmNlIGEgdmFsdWUgYW5kIG5ldyBzZXF1ZW5jZSBudW1iZXIgdXBvbiBhbiBlbnRyeSwgV2lsbCBhbHNvIHNldCB0aGUgdHlwZSBvZiB0aGUgZW50cnkNCisgKiBAcGFyYW0gbmV3U2VxdWVuY2VOdW1iZXINCisgKiBAcGFyYW0gdHlwZQ0KKyAqIEBwYXJhbSBuZXdWYWx1ZQ0KKyAqLw0KK3ZvaWQgTmV0d29ya1RhYmxlRW50cnk6OkZvcmNlUHV0KFNlcXVlbmNlTnVtYmVyIG5ld1NlcXVlbmNlTnVtYmVyLCBOZXR3b3JrVGFibGVFbnRyeVR5cGUqIG5ld1R5cGUsIEVudHJ5VmFsdWUgbmV3VmFsdWUpIHsNCisgICAgICAgIHR5cGUtPmRlbGV0ZVZhbHVlKHZhbHVlKTsNCisJdHlwZSA9IG5ld1R5cGU7DQorICAgICAgICB2YWx1ZSA9IG5ld1R5cGUtPmNvcHlWYWx1ZShuZXdWYWx1ZSk7DQorCXNlcXVlbmNlTnVtYmVyID0gbmV3U2VxdWVuY2VOdW1iZXI7DQorfQ0KKw0KKw0KK3ZvaWQgTmV0d29ya1RhYmxlRW50cnk6Ok1ha2VEaXJ0eSgpIHsNCisJbV9pc0RpcnR5ID0gdHJ1ZTsNCit9DQordm9pZCBOZXR3b3JrVGFibGVFbnRyeTo6TWFrZUNsZWFuKCkgew0KKwltX2lzRGlydHkgPSBmYWxzZTsNCit9DQorYm9vbCBOZXR3b3JrVGFibGVFbnRyeTo6SXNEaXJ0eSgpew0KKwlyZXR1cm4gbV9pc0RpcnR5Ow0KK30NCisNCisvKioNCisgKiBTZW5kIHRoZSB2YWx1ZSBvZiB0aGUgZW50cnkgb3ZlciB0aGUgb3V0cHV0IHN0cmVhbQ0KKyAqIEBwYXJhbSBvcw0KKyAqIEB0aHJvd3MgSU9FeGNlcHRpb24NCisgKi8NCit2b2lkIE5ldHdvcmtUYWJsZUVudHJ5OjpTZW5kVmFsdWUoRGF0YUlPU3RyZWFtJiBpb3N0cmVhbSl7DQorCXR5cGUtPnNlbmRWYWx1ZSh2YWx1ZSwgaW9zdHJlYW0pOw0KK30NCisNCisvKioNCisgKiBAcmV0dXJuIHRoZSBjdXJyZW50IHNlcXVlbmNlIG51bWJlciBvZiB0aGUgZW50cnkNCisgKi8NCitTZXF1ZW5jZU51bWJlciBOZXR3b3JrVGFibGVFbnRyeTo6R2V0U2VxdWVuY2VOdW1iZXIoKSB7DQorCXJldHVybiBzZXF1ZW5jZU51bWJlcjsNCit9DQorLyoqDQorICogU2V0cyB0aGUgaWQgb2YgdGhlIGVudHJ5DQorICogQHBhcmFtIGlkIHRoZSBpZCBvZiB0aGUgZW50cnkNCisgKiBAdGhyb3dzIElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiBpZiB0aGUgZW50cnkgYWxyZWFkeSBoYXMgYSBrbm93biBpZA0KKyAqLw0KK3ZvaWQgTmV0d29ya1RhYmxlRW50cnk6OlNldElkKEVudHJ5SWQgX2lkKXsNCisJaWYoaWQhPVVOS05PV05fSUQpDQorCQl0aHJvdyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIkNhbm5vdCBzZXQgdGhlIElkIG9mIGEgdGFibGUgZW50cnkgdGhhdCBhbHJlYWR5IGhhcyBhIHZhbGlkIGlkIik7DQorCWlkID0gX2lkOw0KK30NCisvKioNCisgKiBjbGVhciB0aGUgaWQgb2YgdGhlIGVudHJ5IHRvIHVua25vd24NCisgKi8NCit2b2lkIE5ldHdvcmtUYWJsZUVudHJ5OjpDbGVhcklkKCkgew0KKwlpZCA9IFVOS05PV05fSUQ7DQorfQ0KKw0KK3ZvaWQgTmV0d29ya1RhYmxlRW50cnk6OlNlbmQoTmV0d29ya1RhYmxlQ29ubmVjdGlvbiYgY29ubmVjdGlvbikgew0KKwljb25uZWN0aW9uLnNlbmRFbnRyeUFzc2lnbm1lbnQoKnRoaXMpOw0KK30NCit2b2lkIE5ldHdvcmtUYWJsZUVudHJ5OjpGaXJlTGlzdGVuZXIoVGFibGVMaXN0ZW5lck1hbmFnZXImIGxpc3RlbmVyTWFuYWdlcikgew0KKwlsaXN0ZW5lck1hbmFnZXIuRmlyZVRhYmxlTGlzdGVuZXJzKG5hbWUsIHZhbHVlLCBtX2lzTmV3KTsNCisJbV9pc05ldyA9IGZhbHNlOw0KK30NCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9uZXR3b3JrdGFibGVzMi9OZXR3b3JrVGFibGVFbnRyeS5oIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvbmV0d29ya3RhYmxlczIvTmV0d29ya1RhYmxlRW50cnkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NDJlZmZhCi0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvbmV0d29ya3RhYmxlczIvTmV0d29ya1RhYmxlRW50cnkuaApAQCAtMCwwICsxLDgxIEBACisjaWZuZGVmIE5FVFdPUktUQUJMRUVOVFJZX0hfDQorI2RlZmluZSBORVRXT1JLVEFCTEVFTlRSWV9IXw0KKw0KKyNpbmNsdWRlIDxzdGRsaWIuaD4NCisjaW5jbHVkZSA8c3RkaW8uaD4NCisjaWZuZGVmIF9XUlNfS0VSTkVMDQorI2luY2x1ZGUgPHN0ZGludC5oPg0KKyNlbmRpZg0KKw0KK3R5cGVkZWYgdWludDE2X3QgRW50cnlJZDsNCit0eXBlZGVmIHVpbnQxNl90IFNlcXVlbmNlTnVtYmVyOw0KK2NsYXNzIE5ldHdvcmtUYWJsZUVudHJ5Ow0KKw0KKw0KKyNpbmNsdWRlICJjb25uZWN0aW9uL0RhdGFJT1N0cmVhbS5oIg0KKyNpbmNsdWRlICJjb25uZWN0aW9uL05ldHdvcmtUYWJsZUNvbm5lY3Rpb24uaCINCisjaW5jbHVkZSAidHlwZS9OZXR3b3JrVGFibGVFbnRyeVR5cGUuaCINCisjaW5jbHVkZSAidXRpbC9JbGxlZ2FsU3RhdGVFeGNlcHRpb24uaCINCisjaW5jbHVkZSAiQWJzdHJhY3ROZXR3b3JrVGFibGVFbnRyeVN0b3JlLmgiDQorI2luY2x1ZGUgPHN0cmluZz4NCisjaW5jbHVkZSAidGFibGVzL0lUYWJsZS5oIg0KKw0KKw0KKy8qKg0KKyAqIEFuIGVudHJ5IGluIGEgbmV0d29yayB0YWJsZQ0KKyAqIA0KKyAqIEBhdXRob3IgbXdpbGxzDQorICoNCisgKi8NCitjbGFzcyBOZXR3b3JrVGFibGVFbnRyeSB7DQorCQ0KKw0KK3B1YmxpYzoNCisJLyoqDQorCSAqIHRoZSBpZCB0aGF0IHJlcHJlc2VudHMgdGhhdCBhbiBpZCBpcyB1bmtub3duIGZvciBhbiBlbnRyeQ0KKwkgKi8NCisJc3RhdGljIGNvbnN0IEVudHJ5SWQgVU5LTk9XTl9JRCA9IDB4RkZGRjsNCisJLyoqDQorCSAqIHRoZSBuYW1lIG9mIHRoZSBlbnRyeQ0KKwkgKi8NCisJc3RkOjpzdHJpbmcgbmFtZTsNCisJDQorCU5ldHdvcmtUYWJsZUVudHJ5KHN0ZDo6c3RyaW5nJiBuYW1lLCBOZXR3b3JrVGFibGVFbnRyeVR5cGUqIHR5cGUsIEVudHJ5VmFsdWUgdmFsdWUpOw0KKwlOZXR3b3JrVGFibGVFbnRyeShFbnRyeUlkIGlkLCBzdGQ6OnN0cmluZyYgbmFtZSwgU2VxdWVuY2VOdW1iZXIgc2VxdWVuY2VOdW1iZXIsIE5ldHdvcmtUYWJsZUVudHJ5VHlwZSogdHlwZSwgRW50cnlWYWx1ZSB2YWx1ZSk7DQorCXZpcnR1YWwgfk5ldHdvcmtUYWJsZUVudHJ5KCk7DQorDQorCUVudHJ5SWQgR2V0SWQoKTsNCisJRW50cnlWYWx1ZSBHZXRWYWx1ZSgpOw0KKwlOZXR3b3JrVGFibGVFbnRyeVR5cGUqIEdldFR5cGUoKTsNCisJYm9vbCBQdXRWYWx1ZShTZXF1ZW5jZU51bWJlciBuZXdTZXF1ZW5jZU51bWJlciwgRW50cnlWYWx1ZSBuZXdWYWx1ZSk7DQorCXZvaWQgRm9yY2VQdXQoU2VxdWVuY2VOdW1iZXIgbmV3U2VxdWVuY2VOdW1iZXIsIEVudHJ5VmFsdWUgbmV3VmFsdWUpOw0KKwl2b2lkIEZvcmNlUHV0KFNlcXVlbmNlTnVtYmVyIG5ld1NlcXVlbmNlTnVtYmVyLCBOZXR3b3JrVGFibGVFbnRyeVR5cGUqIHR5cGUsIEVudHJ5VmFsdWUgbmV3VmFsdWUpOw0KKwl2b2lkIE1ha2VEaXJ0eSgpOw0KKwl2b2lkIE1ha2VDbGVhbigpOw0KKwlib29sIElzRGlydHkoKTsNCisJdm9pZCBTZW5kVmFsdWUoRGF0YUlPU3RyZWFtJiBpb3N0cmVhbSk7DQorCVNlcXVlbmNlTnVtYmVyIEdldFNlcXVlbmNlTnVtYmVyKCk7DQorCXZvaWQgU2V0SWQoRW50cnlJZCBpZCk7DQorCXZvaWQgQ2xlYXJJZCgpOw0KKwl2b2lkIFNlbmQoTmV0d29ya1RhYmxlQ29ubmVjdGlvbiYgY29ubmVjdGlvbik7DQorCXZvaWQgRmlyZUxpc3RlbmVyKFRhYmxlTGlzdGVuZXJNYW5hZ2VyJiBsaXN0ZW5lck1hbmFnZXIpOw0KKwkNCitwcml2YXRlOg0KKwlFbnRyeUlkIGlkOw0KKwlTZXF1ZW5jZU51bWJlciBzZXF1ZW5jZU51bWJlcjsNCisJLyoqDQorCSAqIHRoZSB0eXBlIG9mIHRoZSBlbnRyeQ0KKwkgKi8NCisJTmV0d29ya1RhYmxlRW50cnlUeXBlKiB0eXBlOw0KKwlFbnRyeVZhbHVlIHZhbHVlOw0KKwl2b2xhdGlsZSBib29sIG1faXNOZXc7DQorCXZvbGF0aWxlIGJvb2wgbV9pc0RpcnR5Ow0KKw0KKwlzdGF0aWMgY29uc3QgU2VxdWVuY2VOdW1iZXIgSEFMRl9PRl9TRVFVRU5DRV9OVU1CRVJTID0gMzI3Njg7DQorDQorCU5ldHdvcmtUYWJsZUVudHJ5JiBvcGVyYXRvcj0oY29uc3QgTmV0d29ya1RhYmxlRW50cnkmIG90aGVyKTsNCit9Ow0KKw0KKw0KKw0KKyNlbmRpZiAvKiBORVRXT1JLVEFCTEVFTlRSWV9IXyAqLw0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL25ldHdvcmt0YWJsZXMyL05ldHdvcmtUYWJsZU1lc3NhZ2VUeXBlLmggYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9uZXR3b3JrdGFibGVzMi9OZXR3b3JrVGFibGVNZXNzYWdlVHlwZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjNmUzYmUKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9uZXR3b3JrdGFibGVzMi9OZXR3b3JrVGFibGVNZXNzYWdlVHlwZS5oCkBAIC0wLDAgKzEsNDMgQEAKKy8qDQorICogTmV0d29ya1RhYmxlTWVzc2FnZVR5cGUuaA0KKyAqDQorICogIENyZWF0ZWQgb246IFNlcCAyMiwgMjAxMg0KKyAqICAgICAgQXV0aG9yOiBNaXRjaGVsbCBXaWxscw0KKyAqLw0KKw0KKyNpZm5kZWYgTkVUV09SS1RBQkxFTUVTU0FHRVRZUEVfSF8NCisjZGVmaW5lIE5FVFdPUktUQUJMRU1FU1NBR0VUWVBFX0hfDQorDQorDQorDQorLyoqDQorICogVGhlIGRlZmluaXRpb25zIG9mIGFsbCBvZiB0aGUgcHJvdG9jb2wgbWVzc2FnZSB0eXBlcw0KKyAqIA0KKyAqIEBhdXRob3IgbXdpbGxzDQorICoNCisgKi8NCitlbnVtIE5ldHdvcmtUYWJsZU1lc3NhZ2VUeXBlew0KKwkvKioNCisJICogQSBrZWVwIGFsaXZlIG1lc3NhZ2UgdGhhdCB0aGUgY2xpZW50IHNlbmRzDQorCSAqLw0KKwlLRUVQX0FMSVZFID0gMHgwMCwNCisJLyoqDQorCSAqIGEgY2xpZW50IGhlbGxvIG1lc3NhZ2UgdGhhdCBhIGNsaWVudCBzZW5kcw0KKwkgKi8NCisJQ0xJRU5UX0hFTExPID0gMHgwMSwNCisJLyoqDQorCSAqIGEgcHJvdG9jb2wgdmVyc2lvbiB1bnN1cHBvcnRlZCBtZXNzYWdlIHRoYXQgdGhlIHNlcnZlciBzZW5kcyB0byBhIGNsaWVudA0KKwkgKi8NCisJUFJPVE9DT0xfVkVSU0lPTl9VTlNVUFBPUlRFRCA9IDB4MDIsDQorCVNFUlZFUl9IRUxMT19DT01QTEVURSA9IDB4MDMsDQorCS8qKg0KKwkgKiBhbiBlbnRyeSBhc3NpZ25tZW50IG1lc3NhZ2UNCisJICovDQorCUVOVFJZX0FTU0lHTk1FTlQgPSAweDEwLA0KKwkvKioNCisJICogYSBmaWVsZCB1cGRhdGUgbWVzc2FnZQ0KKwkgKi8NCisJRklFTERfVVBEQVRFID0gMHgxMSwNCit9Ow0KKw0KKyNlbmRpZiAvKiBORVRXT1JLVEFCTEVNRVNTQUdFVFlQRV9IXyAqLw0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL25ldHdvcmt0YWJsZXMyL05ldHdvcmtUYWJsZU5vZGUuY3BwIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvbmV0d29ya3RhYmxlczIvTmV0d29ya1RhYmxlTm9kZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjNlOWI4OQotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL25ldHdvcmt0YWJsZXMyL05ldHdvcmtUYWJsZU5vZGUuY3BwCkBAIC0wLDAgKzEsMTY5IEBACisvKg0KKyAqIE5ldHdvcmtUYWJsZU5vZGUuY3BwDQorICoNCisgKiAgQ3JlYXRlZCBvbjogU2VwIDI0LCAyMDEyDQorICogICAgICBBdXRob3I6IE1pdGNoZWxsIFdpbGxzDQorICovDQorDQorI2luY2x1ZGUgIm5ldHdvcmt0YWJsZXMyL05ldHdvcmtUYWJsZU5vZGUuaCINCisjaW5jbHVkZSAibmV0d29ya3RhYmxlczIvVGFibGVLZXlFeGlzdHNXaXRoRGlmZmVyZW50VHlwZUV4Y2VwdGlvbi5oIg0KKyNpbmNsdWRlICJuZXR3b3JrdGFibGVzMi90eXBlL0RlZmF1bHRFbnRyeVR5cGVzLmgiDQorI2luY2x1ZGUgInRhYmxlcy9UYWJsZUtleU5vdERlZmluZWRFeGNlcHRpb24uaCINCisjaW5jbHVkZSA8YWxnb3JpdGhtPg0KKw0KKw0KKw0KK05ldHdvcmtUYWJsZU5vZGU6Ok5ldHdvcmtUYWJsZU5vZGUoQWJzdHJhY3ROZXR3b3JrVGFibGVFbnRyeVN0b3JlJiBfZW50cnlTdG9yZSk6DQorCWVudHJ5U3RvcmUoX2VudHJ5U3RvcmUpew0KK30NCisNCitOZXR3b3JrVGFibGVOb2RlOjp+TmV0d29ya1RhYmxlTm9kZSgpe30NCisNCitBYnN0cmFjdE5ldHdvcmtUYWJsZUVudHJ5U3RvcmUmIE5ldHdvcmtUYWJsZU5vZGU6OkdldEVudHJ5U3RvcmUoKXsNCisJcmV0dXJuIGVudHJ5U3RvcmU7DQorfQ0KKw0KKw0KKw0KK3ZvaWQgTmV0d29ya1RhYmxlTm9kZTo6UHV0Qm9vbGVhbihzdGQ6OnN0cmluZyYgbmFtZSwgYm9vbCB2YWx1ZSl7DQorCUVudHJ5VmFsdWUgZVZhbHVlOw0KKwllVmFsdWUuYiA9IHZhbHVlOw0KKwlQdXRWYWx1ZShuYW1lLCAmRGVmYXVsdEVudHJ5VHlwZXM6OkJPT0xFQU4sIGVWYWx1ZSk7DQorfQ0KK2Jvb2wgTmV0d29ya1RhYmxlTm9kZTo6R2V0Qm9vbGVhbihzdGQ6OnN0cmluZyYgbmFtZSl7DQorCU5ldHdvcmtUYWJsZUVudHJ5KiBlbnRyeSA9IGVudHJ5U3RvcmUuR2V0RW50cnkobmFtZSk7DQorCWlmKGVudHJ5PT1OVUxMKQ0KKwkJdGhyb3cgVGFibGVLZXlOb3REZWZpbmVkRXhjZXB0aW9uKG5hbWUpOw0KKwlyZXR1cm4gZW50cnktPkdldFZhbHVlKCkuYjsNCit9DQorDQordm9pZCBOZXR3b3JrVGFibGVOb2RlOjpQdXREb3VibGUoc3RkOjpzdHJpbmcmIG5hbWUsIGRvdWJsZSB2YWx1ZSl7DQorCUVudHJ5VmFsdWUgZVZhbHVlOw0KKwllVmFsdWUuZiA9IHZhbHVlOw0KKwlQdXRWYWx1ZShuYW1lLCAmRGVmYXVsdEVudHJ5VHlwZXM6OkRPVUJMRSwgZVZhbHVlKTsNCit9DQorZG91YmxlIE5ldHdvcmtUYWJsZU5vZGU6OkdldERvdWJsZShzdGQ6OnN0cmluZyYgbmFtZSl7DQorCU5ldHdvcmtUYWJsZUVudHJ5KiBlbnRyeSA9IGVudHJ5U3RvcmUuR2V0RW50cnkobmFtZSk7DQorCWlmKGVudHJ5PT1OVUxMKQ0KKwkJdGhyb3cgVGFibGVLZXlOb3REZWZpbmVkRXhjZXB0aW9uKG5hbWUpOw0KKwlyZXR1cm4gZW50cnktPkdldFZhbHVlKCkuZjsNCit9DQorDQordm9pZCBOZXR3b3JrVGFibGVOb2RlOjpQdXRTdHJpbmcoc3RkOjpzdHJpbmcmIG5hbWUsIHN0ZDo6c3RyaW5nJiB2YWx1ZSl7DQorCUVudHJ5VmFsdWUgZVZhbHVlOw0KKwllVmFsdWUucHRyID0gJnZhbHVlOw0KKwlQdXRWYWx1ZShuYW1lLCAmRGVmYXVsdEVudHJ5VHlwZXM6OlNUUklORywgZVZhbHVlKTsNCit9DQorc3RkOjpzdHJpbmcmIE5ldHdvcmtUYWJsZU5vZGU6OkdldFN0cmluZyhzdGQ6OnN0cmluZyYgbmFtZSkgew0KKwlOZXR3b3JrVGFibGVFbnRyeSogZW50cnkgPSBlbnRyeVN0b3JlLkdldEVudHJ5KG5hbWUpOw0KKwlpZihlbnRyeT09TlVMTCkNCisJCXRocm93IFRhYmxlS2V5Tm90RGVmaW5lZEV4Y2VwdGlvbihuYW1lKTsNCisJcmV0dXJuICooc3RkOjpzdHJpbmcqKShlbnRyeS0+R2V0VmFsdWUoKS5wdHIpOw0KK30NCisJDQordm9pZCBOZXR3b3JrVGFibGVOb2RlOjpQdXRDb21wbGV4KHN0ZDo6c3RyaW5nJiBuYW1lLCBDb21wbGV4RGF0YSYgdmFsdWUpew0KKwlFbnRyeVZhbHVlIGVWYWx1ZTsNCisJZVZhbHVlLnB0ciA9ICZ2YWx1ZTsNCisJUHV0VmFsdWUobmFtZSwgJnZhbHVlLkdldFR5cGUoKSwgZVZhbHVlKTsNCit9DQorCQ0KK3ZvaWQgTmV0d29ya1RhYmxlTm9kZTo6cmV0cmlldmVWYWx1ZShzdGQ6OnN0cmluZyYgbmFtZSwgQ29tcGxleERhdGEmIGV4dGVybmFsRGF0YSl7DQorCXsgDQorCQlTeW5jaHJvbml6ZWQgc3luYyhlbnRyeVN0b3JlLkxPQ0spOw0KKwkJTmV0d29ya1RhYmxlRW50cnkqIGVudHJ5ID0gZW50cnlTdG9yZS5HZXRFbnRyeShuYW1lKTsNCisJCWlmKGVudHJ5PT1OVUxMKQ0KKwkJCXRocm93IFRhYmxlS2V5Tm90RGVmaW5lZEV4Y2VwdGlvbihuYW1lKTsNCisJCU5ldHdvcmtUYWJsZUVudHJ5VHlwZSogZW50cnlUeXBlID0gZW50cnktPkdldFR5cGUoKTsNCisJCWlmKCFlbnRyeVR5cGUtPmlzQ29tcGxleCgpKQ0KKwkJCXRocm93IFRhYmxlS2V5RXhpc3RzV2l0aERpZmZlcmVudFR5cGVFeGNlcHRpb24obmFtZSwgZW50cnlUeXBlLCAiSXMgbm90IGEgY29tcGxleCBkYXRhIHR5cGUiKTsNCisJCUNvbXBsZXhFbnRyeVR5cGUqIGNvbXBsZXhUeXBlID0gKENvbXBsZXhFbnRyeVR5cGUqKWVudHJ5VHlwZTsNCisJCWNvbXBsZXhUeXBlLT5leHBvcnRWYWx1ZShuYW1lLCBlbnRyeS0+R2V0VmFsdWUoKSwgZXh0ZXJuYWxEYXRhKTsNCisJfQ0KK30NCisNCisNCit2b2lkIE5ldHdvcmtUYWJsZU5vZGU6OlB1dFZhbHVlKHN0ZDo6c3RyaW5nJiBuYW1lLCBOZXR3b3JrVGFibGVFbnRyeVR5cGUqIHR5cGUsIEVudHJ5VmFsdWUgdmFsdWUpew0KKwlpZih0eXBlLT5pc0NvbXBsZXgoKSl7DQorCQl7IA0KKwkJCVN5bmNocm9uaXplZCBzeW5jKGVudHJ5U3RvcmUuTE9DSyk7DQorCQkJQ29tcGxleERhdGEqIGNvbXBsZXhEYXRhID0gKENvbXBsZXhEYXRhKil2YWx1ZS5wdHI7DQorCQkJQ29tcGxleEVudHJ5VHlwZSogZW50cnlUeXBlID0gKENvbXBsZXhFbnRyeVR5cGUqKXR5cGU7DQorCQkJTmV0d29ya1RhYmxlRW50cnkqIGVudHJ5ID0gZW50cnlTdG9yZS5HZXRFbnRyeShuYW1lKTsNCisJCQlpZihlbnRyeSE9TlVMTCkNCisJCQkJZW50cnlTdG9yZS5QdXRPdXRnb2luZyhlbnRyeSwgZW50cnlUeXBlLT5pbnRlcm5hbGl6ZVZhbHVlKGVudHJ5LT5uYW1lLCAqY29tcGxleERhdGEsIGVudHJ5LT5HZXRWYWx1ZSgpKSk7DQorCQkJZWxzZXsNCisJCQkJRW50cnlWYWx1ZSBudWxsVmFsdWUgPSB7MH07DQorCQkJCWVudHJ5U3RvcmUuUHV0T3V0Z29pbmcobmFtZSwgdHlwZSwgZW50cnlUeXBlLT5pbnRlcm5hbGl6ZVZhbHVlKG5hbWUsICpjb21wbGV4RGF0YSwgbnVsbFZhbHVlKSk7DQorCQkJfQ0KKwkJfQ0KKwl9DQorCWVsc2UNCisJCWVudHJ5U3RvcmUuUHV0T3V0Z29pbmcobmFtZSwgdHlwZSwgdmFsdWUpOw0KK30NCisNCit2b2lkIE5ldHdvcmtUYWJsZU5vZGU6OlB1dFZhbHVlKE5ldHdvcmtUYWJsZUVudHJ5KiBlbnRyeSwgRW50cnlWYWx1ZSB2YWx1ZSl7DQorCWlmKGVudHJ5LT5HZXRUeXBlKCktPmlzQ29tcGxleCgpKXsNCisJCXsgDQorCQkJU3luY2hyb25pemVkIHN5bmMoZW50cnlTdG9yZS5MT0NLKTsNCisJCQlDb21wbGV4RW50cnlUeXBlKiBlbnRyeVR5cGUgPSAoQ29tcGxleEVudHJ5VHlwZSopZW50cnktPkdldFR5cGUoKTsNCisJCQkNCisJCQllbnRyeVN0b3JlLlB1dE91dGdvaW5nKGVudHJ5LCBlbnRyeVR5cGUtPmludGVybmFsaXplVmFsdWUoZW50cnktPm5hbWUsICooQ29tcGxleERhdGEqKXZhbHVlLnB0ciwgZW50cnktPkdldFZhbHVlKCkpKTsNCisJCX0NCisJfQ0KKwllbHNlDQorCQllbnRyeVN0b3JlLlB1dE91dGdvaW5nKGVudHJ5LCB2YWx1ZSk7DQorfQ0KKw0KK0VudHJ5VmFsdWUgTmV0d29ya1RhYmxlTm9kZTo6R2V0VmFsdWUoc3RkOjpzdHJpbmcmIG5hbWUpey8vVE9ETyBkb24ndCBhbGxvdyBnZXQgb2YgY29tcGxleCB0eXBlcw0KKwl7IA0KKwkJU3luY2hyb25pemVkIHN5bmMoZW50cnlTdG9yZS5MT0NLKTsNCisJCU5ldHdvcmtUYWJsZUVudHJ5KiBlbnRyeSA9IGVudHJ5U3RvcmUuR2V0RW50cnkobmFtZSk7DQorCQlpZihlbnRyeT09TlVMTCkNCisJCQl0aHJvdyBUYWJsZUtleU5vdERlZmluZWRFeGNlcHRpb24obmFtZSk7DQorCQlyZXR1cm4gZW50cnktPkdldFZhbHVlKCk7DQorCX0NCit9DQorDQorDQorYm9vbCBOZXR3b3JrVGFibGVOb2RlOjpDb250YWluc0tleShzdGQ6OnN0cmluZyYga2V5KXsNCisJcmV0dXJuIGVudHJ5U3RvcmUuR2V0RW50cnkoa2V5KSE9TlVMTDsNCit9DQorDQordm9pZCBOZXR3b3JrVGFibGVOb2RlOjpBZGRDb25uZWN0aW9uTGlzdGVuZXIoSVJlbW90ZUNvbm5lY3Rpb25MaXN0ZW5lciogbGlzdGVuZXIsIGJvb2wgaW1tZWRpYXRlTm90aWZ5KSB7DQorCXJlbW90ZUxpc3RlbmVycy5wdXNoX2JhY2sobGlzdGVuZXIpOw0KKwlpZihJc0Nvbm5lY3RlZCgpKQ0KKwkJbGlzdGVuZXItPkNvbm5lY3RlZCh0aGlzKTsNCisJZWxzZQ0KKwkJbGlzdGVuZXItPkRpc2Nvbm5lY3RlZCh0aGlzKTsNCit9DQordm9pZCBOZXR3b3JrVGFibGVOb2RlOjpSZW1vdmVDb25uZWN0aW9uTGlzdGVuZXIoSVJlbW90ZUNvbm5lY3Rpb25MaXN0ZW5lciogbGlzdGVuZXIpIHsNCisJc3RkOjp2ZWN0b3I8SVJlbW90ZUNvbm5lY3Rpb25MaXN0ZW5lcio+OjppdGVyYXRvciBsaXN0ZW5lclBvc2l0aW9uID0gc3RkOjpmaW5kKHJlbW90ZUxpc3RlbmVycy5iZWdpbigpLCByZW1vdGVMaXN0ZW5lcnMuZW5kKCksIGxpc3RlbmVyKTsNCisJaWYobGlzdGVuZXJQb3NpdGlvbiE9cmVtb3RlTGlzdGVuZXJzLmVuZCgpKQ0KKwkJcmVtb3RlTGlzdGVuZXJzLmVyYXNlKGxpc3RlbmVyUG9zaXRpb24pOw0KK30NCit2b2lkIE5ldHdvcmtUYWJsZU5vZGU6OkZpcmVDb25uZWN0ZWRFdmVudCgpew0KKwlmb3IodW5zaWduZWQgaW50IGkgPSAwOyBpPHJlbW90ZUxpc3RlbmVycy5zaXplKCk7ICsraSkNCisJCXJlbW90ZUxpc3RlbmVycy5hdChpKS0+Q29ubmVjdGVkKHRoaXMpOw0KK30NCit2b2lkIE5ldHdvcmtUYWJsZU5vZGU6OkZpcmVEaXNjb25uZWN0ZWRFdmVudCgpew0KKwlmb3IodW5zaWduZWQgaW50IGkgPSAwOyBpPHJlbW90ZUxpc3RlbmVycy5zaXplKCk7ICsraSkNCisJCXJlbW90ZUxpc3RlbmVycy5hdChpKS0+RGlzY29ubmVjdGVkKHRoaXMpOw0KK30NCisNCisNCit2b2lkIE5ldHdvcmtUYWJsZU5vZGU6OkFkZFRhYmxlTGlzdGVuZXIoSVRhYmxlTGlzdGVuZXIqIGxpc3RlbmVyLCBib29sIGltbWVkaWF0ZU5vdGlmeSkgew0KKwl0YWJsZUxpc3RlbmVycy5wdXNoX2JhY2sobGlzdGVuZXIpOw0KKwlpZihpbW1lZGlhdGVOb3RpZnkpDQorCQllbnRyeVN0b3JlLm5vdGlmeUVudHJpZXMoTlVMTCwgbGlzdGVuZXIpOw0KK30NCit2b2lkIE5ldHdvcmtUYWJsZU5vZGU6OlJlbW92ZVRhYmxlTGlzdGVuZXIoSVRhYmxlTGlzdGVuZXIqIGxpc3RlbmVyKSB7DQorCXN0ZDo6dmVjdG9yPElUYWJsZUxpc3RlbmVyKj46Oml0ZXJhdG9yIGxpc3RlbmVyUG9zaXRpb24gPSBzdGQ6OmZpbmQodGFibGVMaXN0ZW5lcnMuYmVnaW4oKSwgdGFibGVMaXN0ZW5lcnMuZW5kKCksIGxpc3RlbmVyKTsNCisJaWYobGlzdGVuZXJQb3NpdGlvbiE9dGFibGVMaXN0ZW5lcnMuZW5kKCkpDQorCQl0YWJsZUxpc3RlbmVycy5lcmFzZShsaXN0ZW5lclBvc2l0aW9uKTsNCit9DQordm9pZCBOZXR3b3JrVGFibGVOb2RlOjpGaXJlVGFibGVMaXN0ZW5lcnMoc3RkOjpzdHJpbmcmIGtleSwgRW50cnlWYWx1ZSB2YWx1ZSwgYm9vbCBpc05ldyl7DQorCWZvcih1bnNpZ25lZCBpbnQgaSA9IDA7IGk8dGFibGVMaXN0ZW5lcnMuc2l6ZSgpOyArK2kpDQorCQl0YWJsZUxpc3RlbmVycy5hdChpKS0+VmFsdWVDaGFuZ2VkKE5VTEwsIGtleSwgdmFsdWUsIGlzTmV3KTsNCit9DQorDQorDQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvbmV0d29ya3RhYmxlczIvTmV0d29ya1RhYmxlTm9kZS5oIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvbmV0d29ya3RhYmxlczIvTmV0d29ya1RhYmxlTm9kZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzYTFjZWMKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9uZXR3b3JrdGFibGVzMi9OZXR3b3JrVGFibGVOb2RlLmgKQEAgLTAsMCArMSwxMDMgQEAKKy8qDQorICogTmV0d29ya1RhYmxlTm9kZS5oDQorICoNCisgKiAgQ3JlYXRlZCBvbjogU2VwIDI0LCAyMDEyDQorICogICAgICBBdXRob3I6IE1pdGNoZWxsIFdpbGxzDQorICovDQorDQorI2lmbmRlZiBORVRXT1JLVEFCTEVOT0RFX0hfDQorI2RlZmluZSBORVRXT1JLVEFCTEVOT0RFX0hfDQorDQorDQorY2xhc3MgTmV0d29ya1RhYmxlTm9kZTsNCisNCisjaW5jbHVkZSAiQWJzdHJhY3ROZXR3b3JrVGFibGVFbnRyeVN0b3JlLmgiDQorI2luY2x1ZGUgImNsaWVudC9DbGllbnRDb25uZWN0aW9uTGlzdGVuZXJNYW5hZ2VyLmgiDQorI2luY2x1ZGUgInR5cGUvTmV0d29ya1RhYmxlRW50cnlUeXBlLmgiDQorI2luY2x1ZGUgInR5cGUvQ29tcGxleERhdGEuaCINCisjaW5jbHVkZSAidHlwZS9Db21wbGV4RW50cnlUeXBlLmgiDQorI2luY2x1ZGUgInRhYmxlcy9JUmVtb3RlLmgiDQorI2luY2x1ZGUgPHN0cmluZz4NCisjaW5jbHVkZSA8dmVjdG9yPg0KKw0KKw0KKy8qKg0KKyAqIHJlcHJlc2VudHMgYSBub2RlIChlaXRoZXIgYSBjbGllbnQgb3IgYSBzZXJ2ZXIpIGluIGEgbmV0d29yayB0YWJsZXMgMi4wDQorICogPGJyPg0KKyAqIGltcGxlbWVudGVycyBvZiB0aGUgY2xhc3MgbXVzdCBlbnN1cmUgdGhhdCB0aGV5IGNhbGwge0BsaW5rICNpbml0KE5ldHdvcmtUYWJsZVRyYW5zYWN0aW9uUG9vbCwgQWJzdHJhY3ROZXR3b3JrVGFibGVFbnRyeVN0b3JlKX0gYmVmb3JlIGNhbGxpbmcgYW55IG90aGVyIG1ldGhvZHMgb24gdGhpcyBjbGFzcw0KKyAqIA0KKyAqIEBhdXRob3IgTWl0Y2hlbGwNCisgKg0KKyAqLw0KK2NsYXNzIE5ldHdvcmtUYWJsZU5vZGUgOiBwdWJsaWMgVGFibGVMaXN0ZW5lck1hbmFnZXIsIHB1YmxpYyBDbGllbnRDb25uZWN0aW9uTGlzdGVuZXJNYW5hZ2VyLCBwdWJsaWMgSVJlbW90ZXsNCisNCitwcm90ZWN0ZWQ6DQorCUFic3RyYWN0TmV0d29ya1RhYmxlRW50cnlTdG9yZSYgZW50cnlTdG9yZTsNCisJTmV0d29ya1RhYmxlTm9kZShBYnN0cmFjdE5ldHdvcmtUYWJsZUVudHJ5U3RvcmUmIGVudHJ5U3RvcmUpOw0KKwkNCitwdWJsaWM6DQorCS8qKg0KKwkgKiBAcmV0dXJuIHRoZSBlbnRyeSBzdG9yZSB1c2VkIGJ5IHRoaXMgbm9kZQ0KKwkgKi8NCisJQWJzdHJhY3ROZXR3b3JrVGFibGVFbnRyeVN0b3JlJiBHZXRFbnRyeVN0b3JlKCk7DQorCXZpcnR1YWwgfk5ldHdvcmtUYWJsZU5vZGUoKTsNCisNCisJDQorCQ0KKwl2b2lkIFB1dEJvb2xlYW4oc3RkOjpzdHJpbmcmIG5hbWUsIGJvb2wgdmFsdWUpOw0KKwlib29sIEdldEJvb2xlYW4oc3RkOjpzdHJpbmcmIG5hbWUpOw0KKw0KKwl2b2lkIFB1dERvdWJsZShzdGQ6OnN0cmluZyYgbmFtZSwgZG91YmxlIHZhbHVlKTsNCisJZG91YmxlIEdldERvdWJsZShzdGQ6OnN0cmluZyYgbmFtZSk7DQorDQorCXZvaWQgUHV0U3RyaW5nKHN0ZDo6c3RyaW5nJiBuYW1lLCBzdGQ6OnN0cmluZyYgdmFsdWUpOw0KKwlzdGQ6OnN0cmluZyYgR2V0U3RyaW5nKHN0ZDo6c3RyaW5nJiBuYW1lKTsNCisgICAgICAgIA0KKyAgICB2b2lkIFB1dENvbXBsZXgoc3RkOjpzdHJpbmcmIG5hbWUsIENvbXBsZXhEYXRhJiB2YWx1ZSk7DQorICAgICAgICANCisJdm9pZCByZXRyaWV2ZVZhbHVlKHN0ZDo6c3RyaW5nJiBuYW1lLCBDb21wbGV4RGF0YSYgZXh0ZXJuYWxEYXRhKTsNCisJDQorCS8qKg0KKwkgKiBQdXQgYSB2YWx1ZSB3aXRoIGEgc3BlY2lmaWMgbmV0d29yayB0YWJsZSB0eXBlDQorCSAqIEBwYXJhbSBuYW1lIHRoZSBuYW1lIG9mIHRoZSBlbnRyeSB0byBhc3NvY2lhdGUgd2l0aCB0aGUgZ2l2ZW4gdmFsdWUNCisJICogQHBhcmFtIHR5cGUgdGhlIHR5cGUgb2YgdGhlIGVudHJ5DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgYWN0dWFsIHZhbHVlIG9mIHRoZSBlbnRyeQ0KKwkgKi8NCisJdm9pZCBQdXRWYWx1ZShzdGQ6OnN0cmluZyYgbmFtZSwgTmV0d29ya1RhYmxlRW50cnlUeXBlKiB0eXBlLCBFbnRyeVZhbHVlIHZhbHVlKTsNCisJdm9pZCBQdXRWYWx1ZShOZXR3b3JrVGFibGVFbnRyeSogZW50cnksIEVudHJ5VmFsdWUgdmFsdWUpOw0KKwkNCisJRW50cnlWYWx1ZSBHZXRWYWx1ZShzdGQ6OnN0cmluZyYgbmFtZSk7DQorCQ0KKwkNCisJLyoqDQorCSAqIEBwYXJhbSBrZXkgdGhlIGtleSB0byBjaGVjayBmb3IgZXhpc3RlbmNlDQorCSAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgdGFibGUgaGFzIHRoZSBnaXZlbiBrZXkNCisJICovDQorCWJvb2wgQ29udGFpbnNLZXkoc3RkOjpzdHJpbmcmIGtleSk7DQorDQorCS8qKg0KKwkgKiBjbG9zZSBhbGwgbmV0d29ya2luZyBhY3Rpdml0eSByZWxhdGVkIHRvIHRoaXMgbm9kZQ0KKwkgKi8NCisJdmlydHVhbCB2b2lkIENsb3NlKCkgPSAwOw0KKwkNCitwcml2YXRlOg0KKwlzdGQ6OnZlY3RvcjxJUmVtb3RlQ29ubmVjdGlvbkxpc3RlbmVyKj4gcmVtb3RlTGlzdGVuZXJzOw0KK3B1YmxpYzoNCisJdm9pZCBBZGRDb25uZWN0aW9uTGlzdGVuZXIoSVJlbW90ZUNvbm5lY3Rpb25MaXN0ZW5lciogbGlzdGVuZXIsIGJvb2wgaW1tZWRpYXRlTm90aWZ5KTsNCisJdm9pZCBSZW1vdmVDb25uZWN0aW9uTGlzdGVuZXIoSVJlbW90ZUNvbm5lY3Rpb25MaXN0ZW5lciogbGlzdGVuZXIpOw0KKwl2b2lkIEZpcmVDb25uZWN0ZWRFdmVudCgpOw0KKwl2b2lkIEZpcmVEaXNjb25uZWN0ZWRFdmVudCgpOw0KKwkNCisNCitwcml2YXRlOg0KKwlzdGQ6OnZlY3RvcjxJVGFibGVMaXN0ZW5lcio+IHRhYmxlTGlzdGVuZXJzOw0KK3B1YmxpYzoNCisJdm9pZCBBZGRUYWJsZUxpc3RlbmVyKElUYWJsZUxpc3RlbmVyKiBsaXN0ZW5lciwgYm9vbCBpbW1lZGlhdGVOb3RpZnkpOw0KKwl2b2lkIFJlbW92ZVRhYmxlTGlzdGVuZXIoSVRhYmxlTGlzdGVuZXIqIGxpc3RlbmVyKTsNCisJdm9pZCBGaXJlVGFibGVMaXN0ZW5lcnMoc3RkOjpzdHJpbmcmIGtleSwgRW50cnlWYWx1ZSB2YWx1ZSwgYm9vbCBpc05ldyk7DQorfTsNCisNCisNCisNCisNCisjZW5kaWYgLyogTkVUV09SS1RBQkxFTk9ERV9IXyAqLw0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL25ldHdvcmt0YWJsZXMyL091dGdvaW5nRW50cnlSZWNlaXZlci5oIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvbmV0d29ya3RhYmxlczIvT3V0Z29pbmdFbnRyeVJlY2VpdmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2U5MjYxZAotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL25ldHdvcmt0YWJsZXMyL091dGdvaW5nRW50cnlSZWNlaXZlci5oCkBAIC0wLDAgKzEsMzQgQEAKKy8qDQorICogT3V0Z29pbmdFbnRyeVJlY2VpdmVyLmgNCisgKg0KKyAqICBDcmVhdGVkIG9uOiBTZXAgMTksIDIwMTINCisgKiAgICAgIEF1dGhvcjogTWl0Y2hlbGwgV2lsbHMNCisgKi8NCisNCisjaWZuZGVmIE9VVEdPSU5HRU5UUllSRUNFSVZFUl9IXw0KKyNkZWZpbmUgT1VUR09JTkdFTlRSWVJFQ0VJVkVSX0hfDQorDQorY2xhc3MgT3V0Z29pbmdFbnRyeVJlY2VpdmVyOw0KKw0KKyNpbmNsdWRlICJOZXR3b3JrVGFibGVFbnRyeS5oIg0KKw0KK2NsYXNzIE5ldHdvcmtUYWJsZUVudHJ5Ow0KKw0KK2NsYXNzIE91dGdvaW5nRW50cnlSZWNlaXZlcg0KK3sNCitwdWJsaWM6DQorCXZpcnR1YWwgfk91dGdvaW5nRW50cnlSZWNlaXZlcigpDQorCXsNCisJfQ0KKwl2aXJ0dWFsIHZvaWQgb2ZmZXJPdXRnb2luZ0Fzc2lnbm1lbnQoTmV0d29ya1RhYmxlRW50cnkqIGVudHJ5KSA9IDA7DQorCXZpcnR1YWwgdm9pZCBvZmZlck91dGdvaW5nVXBkYXRlKE5ldHdvcmtUYWJsZUVudHJ5KiBlbnRyeSkgPSAwOw0KK307DQorY2xhc3MgT3V0Z29pbmdFbnRyeVJlY2VpdmVyX05VTExfdCA6IHB1YmxpYyBPdXRnb2luZ0VudHJ5UmVjZWl2ZXIgew0KK3B1YmxpYzoNCisJdm9pZCBvZmZlck91dGdvaW5nQXNzaWdubWVudChOZXR3b3JrVGFibGVFbnRyeSogZW50cnkpOw0KKwl2b2lkIG9mZmVyT3V0Z29pbmdVcGRhdGUoTmV0d29ya1RhYmxlRW50cnkqIGVudHJ5KTsNCit9Ow0KKw0KK2V4dGVybiBPdXRnb2luZ0VudHJ5UmVjZWl2ZXJfTlVMTF90IE91dGdvaW5nRW50cnlSZWNlaXZlcl9OVUxMOw0KKw0KKyNlbmRpZiAvKiBPVVRHT0lOR0VOVFJZUkVDRUlWRVJfSF8gKi8NCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9uZXR3b3JrdGFibGVzMi9PdXRnb2luZ0VudHJ5UmVjaWV2ZXIuY3BwIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvbmV0d29ya3RhYmxlczIvT3V0Z29pbmdFbnRyeVJlY2lldmVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYmJiODc4Ci0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvbmV0d29ya3RhYmxlczIvT3V0Z29pbmdFbnRyeVJlY2lldmVyLmNwcApAQCAtMCwwICsxLDEzIEBACisvKg0KKyAqIE91dGdvaW5nRW50cnlSZWNpZXZlci5jcHANCisgKg0KKyAqICBDcmVhdGVkIG9uOiBOb3YgMywgMjAxMg0KKyAqICAgICAgQXV0aG9yOiBNaXRjaGVsbCBXaWxscw0KKyAqLw0KKw0KKyNpbmNsdWRlICJuZXR3b3JrdGFibGVzMi9PdXRnb2luZ0VudHJ5UmVjZWl2ZXIuaCINCisNCitPdXRnb2luZ0VudHJ5UmVjZWl2ZXJfTlVMTF90IE91dGdvaW5nRW50cnlSZWNlaXZlcl9OVUxMOw0KKw0KK3ZvaWQgT3V0Z29pbmdFbnRyeVJlY2VpdmVyX05VTExfdDo6b2ZmZXJPdXRnb2luZ0Fzc2lnbm1lbnQoTmV0d29ya1RhYmxlRW50cnkqIGVudHJ5KXt9Ow0KK3ZvaWQgT3V0Z29pbmdFbnRyeVJlY2VpdmVyX05VTExfdDo6b2ZmZXJPdXRnb2luZ1VwZGF0ZShOZXR3b3JrVGFibGVFbnRyeSogZW50cnkpe307DQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvbmV0d29ya3RhYmxlczIvVGFibGVLZXlFeGlzdHNXaXRoRGlmZmVyZW50VHlwZUV4Y2VwdGlvbi5jcHAgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9uZXR3b3JrdGFibGVzMi9UYWJsZUtleUV4aXN0c1dpdGhEaWZmZXJlbnRUeXBlRXhjZXB0aW9uLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yM2VmMTU3Ci0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvbmV0d29ya3RhYmxlczIvVGFibGVLZXlFeGlzdHNXaXRoRGlmZmVyZW50VHlwZUV4Y2VwdGlvbi5jcHAKQEAgLTAsMCArMSwyMiBAQAorLyoNCisgKiBUYWJsZUtleUV4aXN0c1dpdGhEaWZmZXJlbnRLZXlFeGNlcHRpb24uY3BwDQorICoNCisgKiAgQ3JlYXRlZCBvbjogU2VwIDIyLCAyMDEyDQorICogICAgICBBdXRob3I6IE1pdGNoZWxsIFdpbGxzDQorICovDQorDQorI2luY2x1ZGUgIm5ldHdvcmt0YWJsZXMyL1RhYmxlS2V5RXhpc3RzV2l0aERpZmZlcmVudFR5cGVFeGNlcHRpb24uaCINCisNCisNCisNCitUYWJsZUtleUV4aXN0c1dpdGhEaWZmZXJlbnRUeXBlRXhjZXB0aW9uOjpUYWJsZUtleUV4aXN0c1dpdGhEaWZmZXJlbnRUeXBlRXhjZXB0aW9uKGNvbnN0IHN0ZDo6c3RyaW5nLCBOZXR3b3JrVGFibGVFbnRyeVR5cGUqIGV4aXN0aW5nVHlwZSkgew0KKwkvL1RPRE8gY29uc3RydWN0IHN0cmluZyB0aGlzKGV4aXN0aW5nS2V5LCBleGlzdGluZ1R5cGUsICIiKTsNCit9DQorDQorVGFibGVLZXlFeGlzdHNXaXRoRGlmZmVyZW50VHlwZUV4Y2VwdGlvbjo6VGFibGVLZXlFeGlzdHNXaXRoRGlmZmVyZW50VHlwZUV4Y2VwdGlvbihjb25zdCBzdGQ6OnN0cmluZywgTmV0d29ya1RhYmxlRW50cnlUeXBlKiBleGlzdGluZ1R5cGUsIGNvbnN0IGNoYXIqIG1lc3NhZ2UpIHsNCisJLy9UT0RPIGNvbnN0cnVjdCBzdHJpbmcgc3VwZXIoIklsbGVnYWwgcHV0IC0ga2V5ICciICsgZXhpc3RpbmdLZXkgKyAiJyBleGlzdHMgd2l0aCB0eXBlICciICsgZXhpc3RpbmdUeXBlICsgIicuICIrbWVzc2FnZSk7DQorfQ0KKw0KK1RhYmxlS2V5RXhpc3RzV2l0aERpZmZlcmVudFR5cGVFeGNlcHRpb246On5UYWJsZUtleUV4aXN0c1dpdGhEaWZmZXJlbnRUeXBlRXhjZXB0aW9uKCkgdGhyb3cgKCl7DQorCS8vVE9ETyBkZWxldGUgbWVzc2FnZQ0KK30NCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9uZXR3b3JrdGFibGVzMi9UYWJsZUtleUV4aXN0c1dpdGhEaWZmZXJlbnRUeXBlRXhjZXB0aW9uLmggYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9uZXR3b3JrdGFibGVzMi9UYWJsZUtleUV4aXN0c1dpdGhEaWZmZXJlbnRUeXBlRXhjZXB0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDc2M2Y4OQotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL25ldHdvcmt0YWJsZXMyL1RhYmxlS2V5RXhpc3RzV2l0aERpZmZlcmVudFR5cGVFeGNlcHRpb24uaApAQCAtMCwwICsxLDQ2IEBACisvKg0KKyAqIFRhYmxlS2V5RXhpc3RzV2l0aERpZmZlcmVudFR5cGVFeGNlcHRpb24uaA0KKyAqDQorICogIENyZWF0ZWQgb246IFNlcCAyMiwgMjAxMg0KKyAqICAgICAgQXV0aG9yOiBNaXRjaGVsbCBXaWxscw0KKyAqLw0KKw0KKyNpZm5kZWYgVEFCTEVLRVlFWElTVFNXSVRIRElGRkVSRU5UVFlQRUVYQ0VQVElPTl9IXw0KKyNkZWZpbmUgVEFCTEVLRVlFWElTVFNXSVRIRElGRkVSRU5UVFlQRUVYQ0VQVElPTl9IXw0KKw0KKw0KK2NsYXNzIFRhYmxlS2V5RXhpc3RzV2l0aERpZmZlcmVudFR5cGVFeGNlcHRpb247DQorDQorDQorI2luY2x1ZGUgPGV4Y2VwdGlvbj4NCisjaW5jbHVkZSAibmV0d29ya3RhYmxlczIvdHlwZS9OZXR3b3JrVGFibGVFbnRyeVR5cGUuaCINCisNCisNCisNCisNCisvKioNCisgKiBUaHJvdyB0byBpbmRpY2F0ZSB0aGF0IGFuIGF0dGVtcHQgdG8gcHV0IGRhdGEgdG8gYSB0YWJsZSBpcyBpbGxlZ2FsIGJlY2F1c2UNCisgKiB0aGUgc3BlY2lmaWVkIGtleSBleGlzdHMgd2l0aCBhIGRpZmZlcmVudCBkYXRhIHR5cGUgdGhhbiB0aGUgcHV0IGRhdGEgdHlwZS4NCisgKiANCisgKiBAYXV0aG9yIFBhdWwgTWFsbXN0ZW4gPHBtYWxtc3RlbkBnbWFpbC5jb20+DQorICovDQorY2xhc3MgVGFibGVLZXlFeGlzdHNXaXRoRGlmZmVyZW50VHlwZUV4Y2VwdGlvbiA6IHB1YmxpYyBzdGQ6OmV4Y2VwdGlvbiB7DQorcHVibGljOg0KKyAgICAvKioNCisgICAgICogQ3JlYXRlcyBhIG5ldyBUYWJsZUtleUV4aXN0c1dpdGhEaWZmZXJlbnRUeXBlRXhjZXB0aW9uDQorICAgICAqIA0KKyAgICAgKiBAcGFyYW0gZXhpc3RpbmdLZXkgVGhlIG5hbWUgb2YgdGhlIGtleSB3aGljaCBleGlzdHMuDQorICAgICAqIEBwYXJhbSBleGlzdGluZ1R5cGUgVGhlIHR5cGUgb2YgdGhlIGtleSB3aGljaCBleGlzdHMuDQorICAgICAqLw0KKyAgICBUYWJsZUtleUV4aXN0c1dpdGhEaWZmZXJlbnRUeXBlRXhjZXB0aW9uKGNvbnN0IHN0ZDo6c3RyaW5nIGV4aXN0aW5nS2V5LCBOZXR3b3JrVGFibGVFbnRyeVR5cGUqIGV4aXN0aW5nVHlwZSk7DQorICAgIA0KKyAgICBUYWJsZUtleUV4aXN0c1dpdGhEaWZmZXJlbnRUeXBlRXhjZXB0aW9uKGNvbnN0IHN0ZDo6c3RyaW5nIGV4aXN0aW5nS2V5LCBOZXR3b3JrVGFibGVFbnRyeVR5cGUqIGV4aXN0aW5nVHlwZSwgY29uc3QgY2hhciogbWVzc2FnZSk7DQorDQorICAgIGNvbnN0IGNoYXIqIHdoYXQoKXtyZXR1cm4gIlRhYmxlS2V5RXhpc3RzV2l0aERpZmZlcmVudFR5cGVFeGNlcHRpb24iO307DQorDQorICAgIHZpcnR1YWwgflRhYmxlS2V5RXhpc3RzV2l0aERpZmZlcmVudFR5cGVFeGNlcHRpb24oKSB0aHJvdyAoKTsNCit9Ow0KKw0KKw0KKw0KKyNlbmRpZiAvKiBUQUJMRUtFWUVYSVNUU1dJVEhESUZGRVJFTlRUWVBFRVhDRVBUSU9OX0hfICovDQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvbmV0d29ya3RhYmxlczIvVHJhbnNhY3Rpb25EaXJ0aWVyLmNwcCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL25ldHdvcmt0YWJsZXMyL1RyYW5zYWN0aW9uRGlydGllci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2YxNDliNQotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL25ldHdvcmt0YWJsZXMyL1RyYW5zYWN0aW9uRGlydGllci5jcHAKQEAgLTAsMCArMSwzMyBAQAorLyoNCisgKiBUcmFuc2FjdGlvbkRpcnRpZXIuY3BwDQorICoNCisgKiAgQ3JlYXRlZCBvbjogU2VwIDI0LCAyMDEyDQorICogICAgICBBdXRob3I6IE1pdGNoZWxsIFdpbGxzDQorICovDQorDQorI2luY2x1ZGUgIm5ldHdvcmt0YWJsZXMyL1RyYW5zYWN0aW9uRGlydGllci5oIg0KKw0KKw0KKw0KKwlUcmFuc2FjdGlvbkRpcnRpZXI6OlRyYW5zYWN0aW9uRGlydGllcihPdXRnb2luZ0VudHJ5UmVjZWl2ZXImIF9jb250aW51aW5nUmVjZWl2ZXIpIDogY29udGludWluZ1JlY2VpdmVyKF9jb250aW51aW5nUmVjZWl2ZXIpew0KKwl9DQorDQorDQorDQorCXZvaWQgVHJhbnNhY3Rpb25EaXJ0aWVyOjpvZmZlck91dGdvaW5nQXNzaWdubWVudChOZXR3b3JrVGFibGVFbnRyeSogZW50cnkpIHsNCisJCWlmKGVudHJ5LT5Jc0RpcnR5KCkpDQorCQkJcmV0dXJuOw0KKwkJZW50cnktPk1ha2VEaXJ0eSgpOw0KKwkJY29udGludWluZ1JlY2VpdmVyLm9mZmVyT3V0Z29pbmdBc3NpZ25tZW50KGVudHJ5KTsNCisJfQ0KKw0KKw0KKw0KKw0KKwl2b2lkIFRyYW5zYWN0aW9uRGlydGllcjo6b2ZmZXJPdXRnb2luZ1VwZGF0ZShOZXR3b3JrVGFibGVFbnRyeSogZW50cnkpIHsNCisJCWlmKGVudHJ5LT5Jc0RpcnR5KCkpDQorCQkJcmV0dXJuOw0KKwkJZW50cnktPk1ha2VEaXJ0eSgpOw0KKwkJY29udGludWluZ1JlY2VpdmVyLm9mZmVyT3V0Z29pbmdVcGRhdGUoZW50cnkpOw0KKwl9DQorDQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvbmV0d29ya3RhYmxlczIvVHJhbnNhY3Rpb25EaXJ0aWVyLmggYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9uZXR3b3JrdGFibGVzMi9UcmFuc2FjdGlvbkRpcnRpZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZGY3YmJkCi0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvbmV0d29ya3RhYmxlczIvVHJhbnNhY3Rpb25EaXJ0aWVyLmgKQEAgLTAsMCArMSwzNiBAQAorLyoNCisgKiBUcmFuc2FjdGlvbkRpcnRpZXIuaA0KKyAqDQorICogIENyZWF0ZWQgb246IFNlcCAyNCwgMjAxMg0KKyAqICAgICAgQXV0aG9yOiBNaXRjaGVsbCBXaWxscw0KKyAqLw0KKw0KKyNpZm5kZWYgVFJBTlNBQ1RJT05ESVJUSUVSX0hfDQorI2RlZmluZSBUUkFOU0FDVElPTkRJUlRJRVJfSF8NCisNCisNCitjbGFzcyBUcmFuc2FjdGlvbkRpcnRpZXI7DQorDQorDQorI2luY2x1ZGUgIk91dGdvaW5nRW50cnlSZWNlaXZlci5oIg0KKw0KKw0KKw0KKy8qKg0KKyAqIEEgdHJhbnNhY3Rpb24gcmVjZWl2ZXIgdGhhdCBtYXJrcyBhbGwgVGFibGUgZW50cmllcyBhcyBkaXJ0eSBpbiB0aGUgZW50cnkgc3RvcmUuIEVudHJpZXMgd2lsbCBub3QgYmUgcGFzc2VkIHRvIHRoZSBjb250aW51aW5nIHJlY2VpdmVyIGlmIHRoZXkgYXJlIGFscmVhZHkgZGlydHkNCisgKiANCisgKiBAYXV0aG9yIE1pdGNoZWxsDQorICoNCisgKi8NCitjbGFzcyBUcmFuc2FjdGlvbkRpcnRpZXIgOiBwdWJsaWMgT3V0Z29pbmdFbnRyeVJlY2VpdmVyIHsNCitwcml2YXRlOg0KKwlPdXRnb2luZ0VudHJ5UmVjZWl2ZXImIGNvbnRpbnVpbmdSZWNlaXZlcjsNCisJDQorcHVibGljOg0KKwlUcmFuc2FjdGlvbkRpcnRpZXIoT3V0Z29pbmdFbnRyeVJlY2VpdmVyJiBjb250aW51aW5nUmVjZWl2ZXIpOw0KKwl2b2lkIG9mZmVyT3V0Z29pbmdBc3NpZ25tZW50KE5ldHdvcmtUYWJsZUVudHJ5KiBlbnRyeSk7DQorCXZvaWQgb2ZmZXJPdXRnb2luZ1VwZGF0ZShOZXR3b3JrVGFibGVFbnRyeSogZW50cnkpOw0KKw0KK307DQorDQorI2VuZGlmIC8qIFRSQU5TQUNUSU9ORElSVElFUl9IXyAqLw0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL25ldHdvcmt0YWJsZXMyL1dyaXRlTWFuYWdlci5jcHAgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9uZXR3b3JrdGFibGVzMi9Xcml0ZU1hbmFnZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0MWJkMmQKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9uZXR3b3JrdGFibGVzMi9Xcml0ZU1hbmFnZXIuY3BwCkBAIC0wLDAgKzEsMTI3IEBACisvKg0KKyAqIFdyaXRlTWFuYWdlci5jcHANCisgKg0KKyAqICBDcmVhdGVkIG9uOiBTZXAgMjUsIDIwMTINCisgKiAgICAgIEF1dGhvcjogTWl0Y2hlbGwgV2lsbHMNCisgKi8NCisNCisjaW5jbHVkZSAibmV0d29ya3RhYmxlczIvV3JpdGVNYW5hZ2VyLmgiDQorI2luY2x1ZGUgIm5ldHdvcmt0YWJsZXMyL3V0aWwvU3lzdGVtLmgiDQorI2luY2x1ZGUgPGlvc3RyZWFtPg0KKw0KKw0KKw0KK1dyaXRlTWFuYWdlcjo6V3JpdGVNYW5hZ2VyKEZsdXNoYWJsZU91dGdvaW5nRW50cnlSZWNlaXZlciYgX3JlY2VpdmVyLCBOVFRocmVhZE1hbmFnZXImIF90aHJlYWRNYW5hZ2VyLCBBYnN0cmFjdE5ldHdvcmtUYWJsZUVudHJ5U3RvcmUmIF9lbnRyeVN0b3JlLCB1bnNpZ25lZCBsb25nIF9rZWVwQWxpdmVEZWxheSkNCisJOiByZWNlaXZlcihfcmVjZWl2ZXIpLCB0aHJlYWRNYW5hZ2VyKF90aHJlYWRNYW5hZ2VyKSwgZW50cnlTdG9yZShfZW50cnlTdG9yZSksIGtlZXBBbGl2ZURlbGF5KF9rZWVwQWxpdmVEZWxheSl7DQorCQ0KKwl0aHJlYWQgPSBOVUxMOw0KKwlsYXN0V3JpdGUgPSAwOw0KKwkNCisJaW5jb21pbmdBc3NpZ25tZW50UXVldWUgPSBuZXcgc3RkOjpxdWV1ZTxOZXR3b3JrVGFibGVFbnRyeSo+KCk7DQorCWluY29taW5nVXBkYXRlUXVldWUgPSBuZXcgc3RkOjpxdWV1ZTxOZXR3b3JrVGFibGVFbnRyeSo+KCk7DQorCW91dGdvaW5nQXNzaWdubWVudFF1ZXVlID0gbmV3IHN0ZDo6cXVldWU8TmV0d29ya1RhYmxlRW50cnkqPigpOw0KKwlvdXRnb2luZ1VwZGF0ZVF1ZXVlID0gbmV3IHN0ZDo6cXVldWU8TmV0d29ya1RhYmxlRW50cnkqPigpOw0KK30NCisNCitXcml0ZU1hbmFnZXI6On5Xcml0ZU1hbmFnZXIoKXsNCisJdHJhbnNhY3Rpb25zTG9jay50YWtlKCk7DQorDQorCXN0b3AoKTsNCisJDQorCWRlbGV0ZSBpbmNvbWluZ0Fzc2lnbm1lbnRRdWV1ZTsNCisJZGVsZXRlIGluY29taW5nVXBkYXRlUXVldWU7DQorCWRlbGV0ZSBvdXRnb2luZ0Fzc2lnbm1lbnRRdWV1ZTsNCisJZGVsZXRlIG91dGdvaW5nVXBkYXRlUXVldWU7DQorfQ0KKw0KK3ZvaWQgV3JpdGVNYW5hZ2VyOjpzdGFydCgpew0KKwlpZih0aHJlYWQhPU5VTEwpDQorCQlzdG9wKCk7DQorCWxhc3RXcml0ZSA9IGN1cnJlbnRUaW1lTWlsbGlzKCk7DQorCXRocmVhZCA9IHRocmVhZE1hbmFnZXIubmV3QmxvY2tpbmdQZXJpb2RpY1RocmVhZCh0aGlzLCAiV3JpdGUgTWFuYWdlciBUaHJlYWQiKTsNCit9DQorDQordm9pZCBXcml0ZU1hbmFnZXI6OnN0b3AoKXsNCisgIGlmKHRocmVhZCE9TlVMTCl7DQorICAgIHRocmVhZC0+c3RvcCgpOw0KKyAgICAvL2RlbGV0ZSB0aHJlYWQ7DQorICAgIHRocmVhZCA9IE5VTEw7DQorICB9DQorfQ0KKw0KKw0KK3ZvaWQgV3JpdGVNYW5hZ2VyOjpvZmZlck91dGdvaW5nQXNzaWdubWVudChOZXR3b3JrVGFibGVFbnRyeSogZW50cnkpIHsNCisJeyANCisJCVN5bmNocm9uaXplZCBzeW5jKHRyYW5zYWN0aW9uc0xvY2spOw0KKwkJKChzdGQ6OnF1ZXVlPE5ldHdvcmtUYWJsZUVudHJ5Kj4qKWluY29taW5nQXNzaWdubWVudFF1ZXVlKS0+cHVzaChlbnRyeSk7DQorCQkNCisJCWlmKCgoc3RkOjpxdWV1ZTxOZXR3b3JrVGFibGVFbnRyeSo+KilpbmNvbWluZ0Fzc2lnbm1lbnRRdWV1ZSktPnNpemUoKT49cXVldWVTaXplKXsNCisJCQlydW4oKTsNCisJCQl3cml0ZVdhcm5pbmcoImFzc2lnbm1lbnQgcXVldWUgb3ZlcmZsb3dlZC4gZGVjcmVhc2UgdGhlIHJhdGUgYXQgd2hpY2ggeW91IGNyZWF0ZSBuZXcgZW50cmllcyBvciBpbmNyZWFzZSB0aGUgd3JpdGUgYnVmZmVyIHNpemUiKTsNCisJCX0NCisJfQ0KK30NCisNCisNCit2b2lkIFdyaXRlTWFuYWdlcjo6b2ZmZXJPdXRnb2luZ1VwZGF0ZShOZXR3b3JrVGFibGVFbnRyeSogZW50cnkpIHsNCisJeyANCisJCVN5bmNocm9uaXplZCBzeW5jKHRyYW5zYWN0aW9uc0xvY2spOw0KKwkJKChzdGQ6OnF1ZXVlPE5ldHdvcmtUYWJsZUVudHJ5Kj4qKWluY29taW5nVXBkYXRlUXVldWUpLT5wdXNoKGVudHJ5KTsNCisJCWlmKCgoc3RkOjpxdWV1ZTxOZXR3b3JrVGFibGVFbnRyeSo+KilpbmNvbWluZ1VwZGF0ZVF1ZXVlKS0+c2l6ZSgpPj1xdWV1ZVNpemUpew0KKwkJCXJ1bigpOw0KKwkJCXdyaXRlV2FybmluZygidXBkYXRlIHF1ZXVlIG92ZXJmbG93ZWQuIGRlY3JlYXNlIHRoZSByYXRlIGF0IHdoaWNoIHlvdSB1cGRhdGUgZW50cmllcyBvciBpbmNyZWFzZSB0aGUgd3JpdGUgYnVmZmVyIHNpemUiKTsNCisJCX0NCisJfQ0KK30NCisNCisNCit2b2lkIFdyaXRlTWFuYWdlcjo6cnVuKCkgew0KKwl7DQorCQlTeW5jaHJvbml6ZWQgc3luYyh0cmFuc2FjdGlvbnNMb2NrKTsNCisJCS8vc3dhcCB0aGUgYXNzaWdubWVudCBhbmQgdXBkYXRlIHF1ZXVlDQorCQl2b2xhdGlsZSBzdGQ6OnF1ZXVlPE5ldHdvcmtUYWJsZUVudHJ5Kj4qIHRtcCA9IGluY29taW5nQXNzaWdubWVudFF1ZXVlOw0KKwkJaW5jb21pbmdBc3NpZ25tZW50UXVldWUgPSBvdXRnb2luZ0Fzc2lnbm1lbnRRdWV1ZTsNCisJCW91dGdvaW5nQXNzaWdubWVudFF1ZXVlID0gdG1wOw0KKwkJDQorCQl0bXAgPSBpbmNvbWluZ1VwZGF0ZVF1ZXVlOw0KKwkJaW5jb21pbmdVcGRhdGVRdWV1ZSA9IG91dGdvaW5nVXBkYXRlUXVldWU7DQorCQlvdXRnb2luZ1VwZGF0ZVF1ZXVlID0gdG1wOw0KKwl9DQorCQ0KKwlib29sIHdyb3RlID0gZmFsc2U7DQorCU5ldHdvcmtUYWJsZUVudHJ5KiBlbnRyeTsNCisJDQorCXdoaWxlKCEoKHN0ZDo6cXVldWU8TmV0d29ya1RhYmxlRW50cnkqPiopb3V0Z29pbmdBc3NpZ25tZW50UXVldWUpLT5lbXB0eSgpKXsNCisJCWVudHJ5ID0gKChzdGQ6OnF1ZXVlPE5ldHdvcmtUYWJsZUVudHJ5Kj4qKW91dGdvaW5nQXNzaWdubWVudFF1ZXVlKS0+ZnJvbnQoKTsNCisJCSgoc3RkOjpxdWV1ZTxOZXR3b3JrVGFibGVFbnRyeSo+KilvdXRnb2luZ0Fzc2lnbm1lbnRRdWV1ZSktPnBvcCgpOw0KKwkJew0KKwkJCVN5bmNocm9uaXplZCBzeW5jKGVudHJ5U3RvcmUuTE9DSyk7DQorCQkJZW50cnktPk1ha2VDbGVhbigpOw0KKwkJCXdyb3RlID0gdHJ1ZTsNCisJCQlyZWNlaXZlci5vZmZlck91dGdvaW5nQXNzaWdubWVudChlbnRyeSk7DQorCQl9DQorCX0NCisJDQorCXdoaWxlKCEoKHN0ZDo6cXVldWU8TmV0d29ya1RhYmxlRW50cnkqPiopb3V0Z29pbmdVcGRhdGVRdWV1ZSktPmVtcHR5KCkpew0KKwkJZW50cnkgPSAoKHN0ZDo6cXVldWU8TmV0d29ya1RhYmxlRW50cnkqPiopb3V0Z29pbmdVcGRhdGVRdWV1ZSktPmZyb250KCk7DQorCQkoKHN0ZDo6cXVldWU8TmV0d29ya1RhYmxlRW50cnkqPiopb3V0Z29pbmdVcGRhdGVRdWV1ZSktPnBvcCgpOw0KKwkJeyANCisJCQlTeW5jaHJvbml6ZWQgc3luYyhlbnRyeVN0b3JlLkxPQ0spOw0KKwkJCWVudHJ5LT5NYWtlQ2xlYW4oKTsNCisJCQl3cm90ZSA9IHRydWU7DQorCQkJcmVjZWl2ZXIub2ZmZXJPdXRnb2luZ1VwZGF0ZShlbnRyeSk7DQorCQl9DQorCX0NCisJDQorCQ0KKwkNCisJaWYod3JvdGUpew0KKwkJcmVjZWl2ZXIuZmx1c2goKTsNCisJCWxhc3RXcml0ZSA9IGN1cnJlbnRUaW1lTWlsbGlzKCk7DQorCX0NCisJZWxzZSBpZihjdXJyZW50VGltZU1pbGxpcygpLWxhc3RXcml0ZT5rZWVwQWxpdmVEZWxheSkNCisJCXJlY2VpdmVyLmVuc3VyZUFsaXZlKCk7DQorCQ0KKwlzbGVlcF9tcygyMCk7DQorfQ0KKw0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL25ldHdvcmt0YWJsZXMyL1dyaXRlTWFuYWdlci5oIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvbmV0d29ya3RhYmxlczIvV3JpdGVNYW5hZ2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQ5NWU5ZQotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL25ldHdvcmt0YWJsZXMyL1dyaXRlTWFuYWdlci5oCkBAIC0wLDAgKzEsODcgQEAKKy8qDQorICogV3JpdGVNYW5hZ2VyLmgNCisgKg0KKyAqICBDcmVhdGVkIG9uOiBTZXAgMjUsIDIwMTINCisgKiAgICAgIEF1dGhvcjogTWl0Y2hlbGwgV2lsbHMNCisgKi8NCisNCisjaWZuZGVmIFdSSVRFTUFOQUdFUl9IXw0KKyNkZWZpbmUgV1JJVEVNQU5BR0VSX0hfDQorDQorDQorY2xhc3MgV3JpdGVNYW5hZ2VyOw0KKw0KKw0KKyNpbmNsdWRlICJ0aHJlYWQvUGVyaW9kaWNSdW5uYWJsZS5oIg0KKyNpbmNsdWRlICJPdXRnb2luZ0VudHJ5UmVjZWl2ZXIuaCINCisjaW5jbHVkZSAidGhyZWFkL05UVGhyZWFkLmgiDQorI2luY2x1ZGUgInRocmVhZC9OVFRocmVhZE1hbmFnZXIuaCINCisjaW5jbHVkZSAiRmx1c2hhYmxlT3V0Z29pbmdFbnRyeVJlY2VpdmVyLmgiDQorI2luY2x1ZGUgIk5ldHdvcmtUYWJsZUVudHJ5LmgiDQorI2luY2x1ZGUgPHF1ZXVlPg0KKyNpbmNsdWRlICJTeW5jaHJvbml6ZWQuaCINCisNCisNCisNCisvKioNCisgKiBBIHdyaXRlIG1hbmFnZXIgaXMgYSB7QGxpbmsgSW5jb21pbmdFbnRyeVJlY2VpdmVyfSB0aGF0IGJ1ZmZlcnMgdHJhbnNhY3Rpb25zIGFuZCB0aGVuIGFuZCB0aGVuIGRpc3BhdGNoZXMgdGhlbSB0byBhIGZsdXNoYWJsZSB0cmFuc2FjdGlvbiByZWNlaXZlciB0aGF0IGlzIHBlcmlvZGljYWxseSBvZmZlcmVkIGFsbCBxdWV1ZWQgdHJhbnNhY3Rpb24gYW5kIHRoZW4gZmx1c2hlZA0KKyAqIA0KKyAqIEBhdXRob3IgTWl0Y2hlbGwNCisgKg0KKyAqLw0KK2NsYXNzIFdyaXRlTWFuYWdlciA6IHB1YmxpYyBPdXRnb2luZ0VudHJ5UmVjZWl2ZXIsIHB1YmxpYyBQZXJpb2RpY1J1bm5hYmxlew0KK3ByaXZhdGU6DQorCWNvbnN0IHN0YXRpYyBzaXplX3QgcXVldWVTaXplID0gNTAwOw0KKwkNCisJUmVlbnRyYW50U2VtYXBob3JlIHRyYW5zYWN0aW9uc0xvY2s7DQorCQ0KKwlOVFRocmVhZCogdGhyZWFkOw0KKwkNCisJRmx1c2hhYmxlT3V0Z29pbmdFbnRyeVJlY2VpdmVyJiByZWNlaXZlcjsNCisJTlRUaHJlYWRNYW5hZ2VyJiB0aHJlYWRNYW5hZ2VyOw0KKwlBYnN0cmFjdE5ldHdvcmtUYWJsZUVudHJ5U3RvcmUmIGVudHJ5U3RvcmU7DQorDQorCXVuc2lnbmVkIGxvbmcga2VlcEFsaXZlRGVsYXk7DQorCQ0KKwl2b2xhdGlsZSBzdGQ6OnF1ZXVlPE5ldHdvcmtUYWJsZUVudHJ5Kj4qIGluY29taW5nQXNzaWdubWVudFF1ZXVlOw0KKwl2b2xhdGlsZSBzdGQ6OnF1ZXVlPE5ldHdvcmtUYWJsZUVudHJ5Kj4qIGluY29taW5nVXBkYXRlUXVldWU7DQorCXZvbGF0aWxlIHN0ZDo6cXVldWU8TmV0d29ya1RhYmxlRW50cnkqPiogb3V0Z29pbmdBc3NpZ25tZW50UXVldWU7DQorCXZvbGF0aWxlIHN0ZDo6cXVldWU8TmV0d29ya1RhYmxlRW50cnkqPiogb3V0Z29pbmdVcGRhdGVRdWV1ZTsNCisJDQorCXVuc2lnbmVkIGxvbmcgbGFzdFdyaXRlOw0KKw0KKw0KK3B1YmxpYzoNCisJLyoqDQorCSAqIENyZWF0ZSBhIG5ldyBXcml0ZSBtYW5hZ2VyDQorCSAqIEBwYXJhbSByZWNlaXZlcg0KKwkgKiBAcGFyYW0gdGhyZWFkTWFuYWdlcg0KKwkgKiBAcGFyYW0gdHJhbnNhY3Rpb25Qb29sDQorCSAqIEBwYXJhbSBlbnRyeVN0b3JlDQorCSAqLw0KKwlXcml0ZU1hbmFnZXIoRmx1c2hhYmxlT3V0Z29pbmdFbnRyeVJlY2VpdmVyJiByZWNlaXZlciwgTlRUaHJlYWRNYW5hZ2VyJiB0aHJlYWRNYW5hZ2VyLCBBYnN0cmFjdE5ldHdvcmtUYWJsZUVudHJ5U3RvcmUmIGVudHJ5U3RvcmUsIHVuc2lnbmVkIGxvbmcga2VlcEFsaXZlRGVsYXkpOw0KKwl2aXJ0dWFsIH5Xcml0ZU1hbmFnZXIoKTsNCisJLyoqDQorCSAqIHN0YXJ0IHRoZSB3cml0ZSB0aHJlYWQNCisJICovDQorCXZvaWQgc3RhcnQoKTsNCisJLyoqDQorCSAqIHN0b3AgdGhlIHdyaXRlIHRocmVhZA0KKwkgKi8NCisJdm9pZCBzdG9wKCk7DQorDQorDQorCXZvaWQgb2ZmZXJPdXRnb2luZ0Fzc2lnbm1lbnQoTmV0d29ya1RhYmxlRW50cnkqIGVudHJ5KTsNCisNCisNCisJdm9pZCBvZmZlck91dGdvaW5nVXBkYXRlKE5ldHdvcmtUYWJsZUVudHJ5KiBlbnRyeSk7DQorDQorCQ0KKwkvKioNCisJICogdGhlIHBlcmlvZGljIG1ldGhvZCB0aGF0IHNlbmRzIGFsbCBidWZmZXJlZCB0cmFuc2FjdGlvbnMNCisJICovDQorCXZvaWQgcnVuKCk7DQorDQorfTsNCisNCisjZW5kaWYgLyogV1JJVEVNQU5BR0VSX0hfICovDQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvbmV0d29ya3RhYmxlczIvY2xpZW50L0NsaWVudENvbm5lY3Rpb25BZGFwdGVyLmNwcCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL25ldHdvcmt0YWJsZXMyL2NsaWVudC9DbGllbnRDb25uZWN0aW9uQWRhcHRlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjE1MWE1OAotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL25ldHdvcmt0YWJsZXMyL2NsaWVudC9DbGllbnRDb25uZWN0aW9uQWRhcHRlci5jcHAKQEAgLTAsMCArMSwyMDkgQEAKKy8qDQorICogQ2xpZW50Q29ubmVjdGlvbkFkYXB0ZXIuY3BwDQorICoNCisgKiAgQ3JlYXRlZCBvbjogTm92IDIsIDIwMTINCisgKiAgICAgIEF1dGhvcjogTWl0Y2hlbGwgV2lsbHMNCisgKi8NCisNCisjaW5jbHVkZSAibmV0d29ya3RhYmxlczIvY2xpZW50L0NsaWVudENvbm5lY3Rpb25BZGFwdGVyLmgiDQorI2luY2x1ZGUgIm5ldHdvcmt0YWJsZXMyL2Nvbm5lY3Rpb24vQ29ubmVjdGlvbk1vbml0b3JUaHJlYWQuaCINCisNCit2b2lkIENsaWVudENvbm5lY3Rpb25BZGFwdGVyOjpnb3RvU3RhdGUoQ2xpZW50Q29ubmVjdGlvblN0YXRlKiBuZXdTdGF0ZSl7DQorCXsNCisJCVN5bmNocm9uaXplZCBzeW5jKExPQ0spOw0KKwkJaWYoY29ubmVjdGlvblN0YXRlIT1uZXdTdGF0ZSl7DQorCQkJZnByaW50ZihzdGRvdXQsICIlcCBlbnRlcmVkIGNvbm5lY3Rpb24gc3RhdGU6ICVzXG4iLHRoaXMsIG5ld1N0YXRlLT50b1N0cmluZygpKTsNCisJCQlmZmx1c2goc3Rkb3V0KTsNCisJCQlpZihuZXdTdGF0ZT09JkNsaWVudENvbm5lY3Rpb25TdGF0ZTo6SU5fU1lOQ19XSVRIX1NFUlZFUikNCisJCQkJY29ubmVjdGlvbkxpc3RlbmVyTWFuYWdlci5GaXJlQ29ubmVjdGVkRXZlbnQoKTsNCisJCQlpZihjb25uZWN0aW9uU3RhdGU9PSZDbGllbnRDb25uZWN0aW9uU3RhdGU6OklOX1NZTkNfV0lUSF9TRVJWRVIpDQorCQkJCWNvbm5lY3Rpb25MaXN0ZW5lck1hbmFnZXIuRmlyZURpc2Nvbm5lY3RlZEV2ZW50KCk7DQorCQkJY29ubmVjdGlvblN0YXRlID0gbmV3U3RhdGU7DQorCQl9DQorCX0NCit9DQorLyoqDQorICogQHJldHVybiB0aGUgc3RhdGUgb2YgdGhlIGNvbm5lY3Rpb24NCisgKi8NCitDbGllbnRDb25uZWN0aW9uU3RhdGUqIENsaWVudENvbm5lY3Rpb25BZGFwdGVyOjpnZXRDb25uZWN0aW9uU3RhdGUoKXsNCisJcmV0dXJuIGNvbm5lY3Rpb25TdGF0ZTsNCit9DQorLyoqDQorICogQHJldHVybiBpZiB0aGUgY2xpZW50IGlzIGNvbm5lY3RlZCB0byB0aGUgc2VydmVyDQorICovDQorYm9vbCBDbGllbnRDb25uZWN0aW9uQWRhcHRlcjo6aXNDb25uZWN0ZWQoKSB7DQorCXJldHVybiBnZXRDb25uZWN0aW9uU3RhdGUoKT09JkNsaWVudENvbm5lY3Rpb25TdGF0ZTo6SU5fU1lOQ19XSVRIX1NFUlZFUjsNCit9DQorDQorLyoqDQorICogQ3JlYXRlIGEgbmV3IENsaWVudENvbm5lY3Rpb25BZGFwdGVyDQorICogQHBhcmFtIGVudHJ5U3RvcmUNCisgKiBAcGFyYW0gdGhyZWFkTWFuYWdlcg0KKyAqIEBwYXJhbSBzdHJlYW1GYWN0b3J5DQorICogQHBhcmFtIHRyYW5zYWN0aW9uUG9vbA0KKyAqIEBwYXJhbSBjb25uZWN0aW9uTGlzdGVuZXJNYW5hZ2VyDQorICovDQorQ2xpZW50Q29ubmVjdGlvbkFkYXB0ZXI6OkNsaWVudENvbm5lY3Rpb25BZGFwdGVyKENsaWVudE5ldHdvcmtUYWJsZUVudHJ5U3RvcmUmIF9lbnRyeVN0b3JlLCBOVFRocmVhZE1hbmFnZXImIF90aHJlYWRNYW5hZ2VyLCBJT1N0cmVhbUZhY3RvcnkmIF9zdHJlYW1GYWN0b3J5LCBDbGllbnRDb25uZWN0aW9uTGlzdGVuZXJNYW5hZ2VyJiBfY29ubmVjdGlvbkxpc3RlbmVyTWFuYWdlciwgTmV0d29ya1RhYmxlRW50cnlUeXBlTWFuYWdlciYgX3R5cGVNYW5hZ2VyKToNCisJZW50cnlTdG9yZShfZW50cnlTdG9yZSksDQorCXN0cmVhbUZhY3RvcnkoX3N0cmVhbUZhY3RvcnkpLA0KKwl0aHJlYWRNYW5hZ2VyKF90aHJlYWRNYW5hZ2VyKSwNCisJY29ubmVjdGlvbkxpc3RlbmVyTWFuYWdlcihfY29ubmVjdGlvbkxpc3RlbmVyTWFuYWdlciksDQorCXR5cGVNYW5hZ2VyKF90eXBlTWFuYWdlciksDQorICAgIHJlYWRUaHJlYWQoTlVMTCksDQorICAgIGNvbm5lY3Rpb24oTlVMTCl7DQorCWNvbm5lY3Rpb25TdGF0ZSA9ICZDbGllbnRDb25uZWN0aW9uU3RhdGU6OkRJU0NPTk5FQ1RFRF9GUk9NX1NFUlZFUjsNCit9DQorQ2xpZW50Q29ubmVjdGlvbkFkYXB0ZXI6On5DbGllbnRDb25uZWN0aW9uQWRhcHRlcigpew0KKyAgY2xvc2UoKTsNCit9DQorDQorDQorLyoNCisgKiBDb25uZWN0aW9uIG1hbmFnZW1lbnQNCisgKi8NCisvKioNCisgKiBSZWNvbm5lY3QgdGhlIGNsaWVudCB0byB0aGUgc2VydmVyIChldmVuIGlmIHRoZSBjbGllbnQgaXMgbm90IGN1cnJlbnRseSBjb25uZWN0ZWQpDQorICovDQordm9pZCBDbGllbnRDb25uZWN0aW9uQWRhcHRlcjo6cmVjb25uZWN0KCkgew0KKwl7DQorCQlTeW5jaHJvbml6ZWQgc3luYyhMT0NLKTsNCisJCWNsb3NlKCk7Ly9jbG9zZSB0aGUgZXhpc3Rpbmcgc3RyZWFtIGFuZCBtb25pdG9yIHRocmVhZCBpZiBuZWVkZWQNCisJCXRyeXsNCisJCQlJT1N0cmVhbSogc3RyZWFtID0gc3RyZWFtRmFjdG9yeS5jcmVhdGVTdHJlYW0oKTsNCisJCQlpZihzdHJlYW09PU5VTEwpDQorCQkJCXJldHVybjsNCisJCQljb25uZWN0aW9uID0gbmV3IE5ldHdvcmtUYWJsZUNvbm5lY3Rpb24oc3RyZWFtLCB0eXBlTWFuYWdlcik7DQorCQkJcmVhZFRocmVhZCA9IHRocmVhZE1hbmFnZXIubmV3QmxvY2tpbmdQZXJpb2RpY1RocmVhZChuZXcgQ29ubmVjdGlvbk1vbml0b3JUaHJlYWQoKnRoaXMsICpjb25uZWN0aW9uKSwgIkNsaWVudCBDb25uZWN0aW9uIFJlYWRlciBUaHJlYWQiKTsNCisJCQljb25uZWN0aW9uLT5zZW5kQ2xpZW50SGVsbG8oKTsNCisJCQlnb3RvU3RhdGUoJkNsaWVudENvbm5lY3Rpb25TdGF0ZTo6Q09OTkVDVEVEX1RPX1NFUlZFUik7DQorCQl9IGNhdGNoKElPRXhjZXB0aW9uJiBlKXsNCisJCQljbG9zZSgpOy8vbWFrZSBzdXJlIHRvIGNsZWFuIGV2ZXJ5dGhpbmcgdXAgaWYgd2UgZmFpbCB0byBjb25uZWN0DQorCQl9DQorCX0NCit9DQorDQorLyoqDQorICogQ2xvc2UgdGhlIGNsaWVudCBjb25uZWN0aW9uDQorICovDQordm9pZCBDbGllbnRDb25uZWN0aW9uQWRhcHRlcjo6Y2xvc2UoKSB7DQorCWNsb3NlKCZDbGllbnRDb25uZWN0aW9uU3RhdGU6OkRJU0NPTk5FQ1RFRF9GUk9NX1NFUlZFUik7DQorfQ0KKy8qKg0KKyAqIENsb3NlIHRoZSBjb25uZWN0aW9uIHRvIHRoZSBzZXJ2ZXIgYW5kIGVudGVyIHRoZSBnaXZlbiBzdGF0ZQ0KKyAqIEBwYXJhbSBuZXdTdGF0ZQ0KKyAqLw0KK3ZvaWQgQ2xpZW50Q29ubmVjdGlvbkFkYXB0ZXI6OmNsb3NlKENsaWVudENvbm5lY3Rpb25TdGF0ZSogbmV3U3RhdGUpIHsNCisJew0KKwkJU3luY2hyb25pemVkIHN5bmMoTE9DSyk7DQorCQlnb3RvU3RhdGUobmV3U3RhdGUpOw0KKwkJaWYocmVhZFRocmVhZCE9TlVMTCl7DQorCQkJcmVhZFRocmVhZC0+c3RvcCgpOw0KKwkJCXJlYWRUaHJlYWQgPSBOVUxMOw0KKwkJfQ0KKwkJaWYoY29ubmVjdGlvbiE9TlVMTCl7DQorCQkJY29ubmVjdGlvbi0+Y2xvc2UoKTsNCisJCQljb25uZWN0aW9uID0gTlVMTDsNCisJCX0NCisJCWVudHJ5U3RvcmUuY2xlYXJJZHMoKTsNCisJfQ0KK30NCisNCisNCisNCit2b2lkIENsaWVudENvbm5lY3Rpb25BZGFwdGVyOjpiYWRNZXNzYWdlKEJhZE1lc3NhZ2VFeGNlcHRpb24mIGUpIHsNCisJY2xvc2UobmV3IENsaWVudENvbm5lY3Rpb25TdGF0ZV9FcnJvcihlKSk7DQorfQ0KKw0KK3ZvaWQgQ2xpZW50Q29ubmVjdGlvbkFkYXB0ZXI6OmlvRXhjZXB0aW9uKElPRXhjZXB0aW9uJiBlKSB7DQorCWlmKGNvbm5lY3Rpb25TdGF0ZSE9JkNsaWVudENvbm5lY3Rpb25TdGF0ZTo6RElTQ09OTkVDVEVEX0ZST01fU0VSVkVSKS8vd2lsbCBnZXQgaW8gZXhjZXB0aW9uIHdoZW4gb24gcmVhZCB0aHJlYWQgY29ubmVjdGlvbiBpcyBjbG9zZWQNCisJCXJlY29ubmVjdCgpOw0KKwkvL2dvdG9TdGF0ZShuZXcgQ2xpZW50Q29ubmVjdGlvblN0YXRlLkVycm9yKGUpKTsNCit9DQorDQorTmV0d29ya1RhYmxlRW50cnkqIENsaWVudENvbm5lY3Rpb25BZGFwdGVyOjpHZXRFbnRyeShFbnRyeUlkIGlkKSB7DQorCXJldHVybiBlbnRyeVN0b3JlLkdldEVudHJ5KGlkKTsNCit9DQorDQorDQordm9pZCBDbGllbnRDb25uZWN0aW9uQWRhcHRlcjo6a2VlcEFsaXZlKCkgew0KK30NCisNCit2b2lkIENsaWVudENvbm5lY3Rpb25BZGFwdGVyOjpjbGllbnRIZWxsbyhQcm90b2NvbFZlcnNpb24gcHJvdG9jb2xSZXZpc2lvbikgew0KKwl0aHJvdyBCYWRNZXNzYWdlRXhjZXB0aW9uKCJBIGNsaWVudCBzaG91bGQgbm90IHJlY2VpdmUgYSBjbGllbnQgaGVsbG8gbWVzc2FnZSIpOw0KK30NCisNCit2b2lkIENsaWVudENvbm5lY3Rpb25BZGFwdGVyOjpwcm90b2NvbFZlcnNpb25VbnN1cHBvcnRlZChQcm90b2NvbFZlcnNpb24gcHJvdG9jb2xSZXZpc2lvbikgew0KKwljbG9zZSgpOw0KKwlnb3RvU3RhdGUobmV3IENsaWVudENvbm5lY3Rpb25TdGF0ZV9Qcm90b2NvbFVuc3VwcG90ZWRCeVNlcnZlcihwcm90b2NvbFJldmlzaW9uKSk7DQorfQ0KKw0KK3ZvaWQgQ2xpZW50Q29ubmVjdGlvbkFkYXB0ZXI6OnNlcnZlckhlbGxvQ29tcGxldGUoKSB7DQorCWlmIChjb25uZWN0aW9uU3RhdGU9PSZDbGllbnRDb25uZWN0aW9uU3RhdGU6OkNPTk5FQ1RFRF9UT19TRVJWRVIpIHsNCisJCXRyeSB7DQorCQkJZ290b1N0YXRlKCZDbGllbnRDb25uZWN0aW9uU3RhdGU6OklOX1NZTkNfV0lUSF9TRVJWRVIpOw0KKwkJCWVudHJ5U3RvcmUuc2VuZFVua25vd25FbnRyaWVzKCpjb25uZWN0aW9uKTsNCisJCX0gY2F0Y2ggKElPRXhjZXB0aW9uJiBlKSB7DQorCQkJaW9FeGNlcHRpb24oZSk7DQorCQl9DQorCX0NCisJZWxzZQ0KKwkJdGhyb3cgQmFkTWVzc2FnZUV4Y2VwdGlvbigiQSBjbGllbnQgc2hvdWxkIG9ubHkgcmVjZWl2ZSBhIHNlcnZlciBoZWxsbyBjb21wbGV0ZSBvbmNlIGFuZCBvbmx5IGFmdGVyIGl0IGhhcyBjb25uZWN0ZWQgdG8gdGhlIHNlcnZlciIpOw0KK30NCisNCisNCit2b2lkIENsaWVudENvbm5lY3Rpb25BZGFwdGVyOjpvZmZlckluY29taW5nQXNzaWdubWVudChOZXR3b3JrVGFibGVFbnRyeSogZW50cnkpIHsNCisJZW50cnlTdG9yZS5vZmZlckluY29taW5nQXNzaWdubWVudChlbnRyeSk7DQorfQ0KK3ZvaWQgQ2xpZW50Q29ubmVjdGlvbkFkYXB0ZXI6Om9mZmVySW5jb21pbmdVcGRhdGUoTmV0d29ya1RhYmxlRW50cnkqIGVudHJ5LCBTZXF1ZW5jZU51bWJlciBzZXF1ZW5jZU51bWJlciwgRW50cnlWYWx1ZSB2YWx1ZSkgew0KKwllbnRyeVN0b3JlLm9mZmVySW5jb21pbmdVcGRhdGUoZW50cnksIHNlcXVlbmNlTnVtYmVyLCB2YWx1ZSk7DQorfQ0KKw0KK3ZvaWQgQ2xpZW50Q29ubmVjdGlvbkFkYXB0ZXI6Om9mZmVyT3V0Z29pbmdBc3NpZ25tZW50KE5ldHdvcmtUYWJsZUVudHJ5KiBlbnRyeSkgew0KKwl0cnkgew0KKwkJew0KKwkJCVN5bmNocm9uaXplZCBzeW5jKExPQ0spOw0KKwkJCWlmKGNvbm5lY3Rpb24hPU5VTEwgJiYgY29ubmVjdGlvblN0YXRlPT0mQ2xpZW50Q29ubmVjdGlvblN0YXRlOjpJTl9TWU5DX1dJVEhfU0VSVkVSKQ0KKwkJCQljb25uZWN0aW9uLT5zZW5kRW50cnlBc3NpZ25tZW50KCplbnRyeSk7DQorCQl9DQorCX0gY2F0Y2goSU9FeGNlcHRpb24mIGUpew0KKwkJaW9FeGNlcHRpb24oZSk7DQorCX0NCit9DQorDQordm9pZCBDbGllbnRDb25uZWN0aW9uQWRhcHRlcjo6b2ZmZXJPdXRnb2luZ1VwZGF0ZShOZXR3b3JrVGFibGVFbnRyeSogZW50cnkpIHsNCisJdHJ5IHsNCisJCXsNCisJCQlTeW5jaHJvbml6ZWQgc3luYyhMT0NLKTsNCisJCQlpZihjb25uZWN0aW9uIT1OVUxMICYmIGNvbm5lY3Rpb25TdGF0ZT09JkNsaWVudENvbm5lY3Rpb25TdGF0ZTo6SU5fU1lOQ19XSVRIX1NFUlZFUikNCisJCQkJY29ubmVjdGlvbi0+c2VuZEVudHJ5VXBkYXRlKCplbnRyeSk7DQorCQl9DQorCX0gY2F0Y2goSU9FeGNlcHRpb24mIGUpew0KKwkJaW9FeGNlcHRpb24oZSk7DQorCX0NCit9DQordm9pZCBDbGllbnRDb25uZWN0aW9uQWRhcHRlcjo6Zmx1c2goKSB7DQorCXsNCisJCVN5bmNocm9uaXplZCBzeW5jKExPQ0spOw0KKwkJaWYoY29ubmVjdGlvbiE9TlVMTCkgew0KKwkJCXRyeSB7DQorCQkJCWNvbm5lY3Rpb24tPmZsdXNoKCk7DQorCQkJfSBjYXRjaCAoSU9FeGNlcHRpb24mIGUpIHsNCisJCQkJaW9FeGNlcHRpb24oZSk7DQorCQkJfQ0KKwkJfQ0KKwl9DQorfQ0KK3ZvaWQgQ2xpZW50Q29ubmVjdGlvbkFkYXB0ZXI6OmVuc3VyZUFsaXZlKCkgew0KKwl7DQorCQlTeW5jaHJvbml6ZWQgc3luYyhMT0NLKTsNCisJCWlmKGNvbm5lY3Rpb24hPU5VTEwpIHsNCisJCQl0cnkgew0KKwkJCSAgY29ubmVjdGlvbi0+c2VuZEtlZXBBbGl2ZSgpOw0KKwkJCX0gY2F0Y2ggKElPRXhjZXB0aW9uJiBlKSB7DQorCQkJCWlvRXhjZXB0aW9uKGUpOw0KKwkJCX0NCisJCX0NCisJCWVsc2UNCisJCQlyZWNvbm5lY3QoKTsvL3RyeSB0byByZWNvbm5lY3QgaWYgbm90IGNvbm5lY3RlZA0KKwl9DQorfQ0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL25ldHdvcmt0YWJsZXMyL2NsaWVudC9DbGllbnRDb25uZWN0aW9uQWRhcHRlci5oIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvbmV0d29ya3RhYmxlczIvY2xpZW50L0NsaWVudENvbm5lY3Rpb25BZGFwdGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWFjMWI3MwotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL25ldHdvcmt0YWJsZXMyL2NsaWVudC9DbGllbnRDb25uZWN0aW9uQWRhcHRlci5oCkBAIC0wLDAgKzEsMTE1IEBACisvKg0KKyAqIENsaWVudENvbm5lY3Rpb25BZGFwdGVyLmgNCisgKg0KKyAqICBDcmVhdGVkIG9uOiBOb3YgMiwgMjAxMg0KKyAqICAgICAgQXV0aG9yOiBNaXRjaGVsbCBXaWxscw0KKyAqLw0KKw0KKyNpZm5kZWYgQ0xJRU5UQ09OTkVDVElPTkFEQVBURVJfSF8NCisjZGVmaW5lIENMSUVOVENPTk5FQ1RJT05BREFQVEVSX0hfDQorDQorY2xhc3MgQ2xpZW50Q29ubmVjdGlvbkFkYXB0ZXI7DQorDQorI2luY2x1ZGUgIm5ldHdvcmt0YWJsZXMyL2Nvbm5lY3Rpb24vQ29ubmVjdGlvbkFkYXB0ZXIuaCINCisjaW5jbHVkZSAibmV0d29ya3RhYmxlczIvSW5jb21pbmdFbnRyeVJlY2VpdmVyLmgiDQorI2luY2x1ZGUgIm5ldHdvcmt0YWJsZXMyL0ZsdXNoYWJsZU91dGdvaW5nRW50cnlSZWNlaXZlci5oIg0KKyNpbmNsdWRlICJuZXR3b3JrdGFibGVzMi9jbGllbnQvQ2xpZW50TmV0d29ya1RhYmxlRW50cnlTdG9yZS5oIg0KKyNpbmNsdWRlICJuZXR3b3JrdGFibGVzMi9zdHJlYW0vSU9TdHJlYW1GYWN0b3J5LmgiDQorI2luY2x1ZGUgIm5ldHdvcmt0YWJsZXMyL3RocmVhZC9OVFRocmVhZE1hbmFnZXIuaCINCisjaW5jbHVkZSAibmV0d29ya3RhYmxlczIvdGhyZWFkL05UVGhyZWFkLmgiDQorI2luY2x1ZGUgIm5ldHdvcmt0YWJsZXMyL2NsaWVudC9DbGllbnRDb25uZWN0aW9uU3RhdGUuaCINCisjaW5jbHVkZSAibmV0d29ya3RhYmxlczIvY2xpZW50L0NsaWVudENvbm5lY3Rpb25MaXN0ZW5lck1hbmFnZXIuaCINCisNCisNCisvKioNCisgKiBPYmplY3QgdGhhdCBhZGFwdHMgbWVzc2FnZXMgZnJvbSBhIHNlcnZlcg0KKyAqIA0KKyAqIEBhdXRob3IgTWl0Y2hlbGwNCisgKg0KKyAqLw0KK2NsYXNzIENsaWVudENvbm5lY3Rpb25BZGFwdGVyIDogcHVibGljIENvbm5lY3Rpb25BZGFwdGVyLCBwdWJsaWMgSW5jb21pbmdFbnRyeVJlY2VpdmVyLCBwdWJsaWMgRmx1c2hhYmxlT3V0Z29pbmdFbnRyeVJlY2VpdmVyew0KK3ByaXZhdGU6DQorCUNsaWVudE5ldHdvcmtUYWJsZUVudHJ5U3RvcmUmIGVudHJ5U3RvcmU7DQorCUlPU3RyZWFtRmFjdG9yeSYgc3RyZWFtRmFjdG9yeTsNCisJTlRUaHJlYWRNYW5hZ2VyJiB0aHJlYWRNYW5hZ2VyOw0KKwkNCisJQ2xpZW50Q29ubmVjdGlvblN0YXRlKiBjb25uZWN0aW9uU3RhdGU7DQorCUNsaWVudENvbm5lY3Rpb25MaXN0ZW5lck1hbmFnZXImIGNvbm5lY3Rpb25MaXN0ZW5lck1hbmFnZXI7DQorCVJlZW50cmFudFNlbWFwaG9yZSBMT0NLOw0KKwlOZXR3b3JrVGFibGVFbnRyeVR5cGVNYW5hZ2VyJiB0eXBlTWFuYWdlcjsNCisJTlRUaHJlYWQqIHJlYWRUaHJlYWQ7DQorCU5ldHdvcmtUYWJsZUNvbm5lY3Rpb24qIGNvbm5lY3Rpb247DQorDQorCXZvaWQgZ290b1N0YXRlKENsaWVudENvbm5lY3Rpb25TdGF0ZSogbmV3U3RhdGUpOw0KKwkNCitwdWJsaWM6DQorCS8qKg0KKwkgKiBAcmV0dXJuIHRoZSBzdGF0ZSBvZiB0aGUgY29ubmVjdGlvbg0KKwkgKi8NCisJQ2xpZW50Q29ubmVjdGlvblN0YXRlKiBnZXRDb25uZWN0aW9uU3RhdGUoKTsNCisJLyoqDQorCSAqIEByZXR1cm4gaWYgdGhlIGNsaWVudCBpcyBjb25uZWN0ZWQgdG8gdGhlIHNlcnZlcg0KKwkgKi8NCisJYm9vbCBpc0Nvbm5lY3RlZCgpOw0KKw0KKwkvKioNCisJICogQ3JlYXRlIGEgbmV3IENsaWVudENvbm5lY3Rpb25BZGFwdGVyDQorCSAqIEBwYXJhbSBlbnRyeVN0b3JlDQorCSAqIEBwYXJhbSB0aHJlYWRNYW5hZ2VyDQorCSAqIEBwYXJhbSBzdHJlYW1GYWN0b3J5DQorCSAqIEBwYXJhbSB0cmFuc2FjdGlvblBvb2wNCisJICogQHBhcmFtIGNvbm5lY3Rpb25MaXN0ZW5lck1hbmFnZXINCisJICovDQorCUNsaWVudENvbm5lY3Rpb25BZGFwdGVyKENsaWVudE5ldHdvcmtUYWJsZUVudHJ5U3RvcmUmIGVudHJ5U3RvcmUsIE5UVGhyZWFkTWFuYWdlciYgdGhyZWFkTWFuYWdlciwgSU9TdHJlYW1GYWN0b3J5JiBzdHJlYW1GYWN0b3J5LCBDbGllbnRDb25uZWN0aW9uTGlzdGVuZXJNYW5hZ2VyJiBjb25uZWN0aW9uTGlzdGVuZXJNYW5hZ2VyLCBOZXR3b3JrVGFibGVFbnRyeVR5cGVNYW5hZ2VyJiB0eXBlTWFuYWdlcik7DQorCXZpcnR1YWwgfkNsaWVudENvbm5lY3Rpb25BZGFwdGVyKCk7DQorCQ0KKwkNCisJLyoNCisJICogQ29ubmVjdGlvbiBtYW5hZ2VtZW50DQorCSAqLw0KKwkvKioNCisJICogUmVjb25uZWN0IHRoZSBjbGllbnQgdG8gdGhlIHNlcnZlciAoZXZlbiBpZiB0aGUgY2xpZW50IGlzIG5vdCBjdXJyZW50bHkgY29ubmVjdGVkKQ0KKwkgKi8NCisJdm9pZCByZWNvbm5lY3QoKTsNCisJDQorCS8qKg0KKwkgKiBDbG9zZSB0aGUgY2xpZW50IGNvbm5lY3Rpb24NCisJICovDQorCXZvaWQgY2xvc2UoKTsNCisJLyoqDQorCSAqIENsb3NlIHRoZSBjb25uZWN0aW9uIHRvIHRoZSBzZXJ2ZXIgYW5kIGVudGVyIHRoZSBnaXZlbiBzdGF0ZQ0KKwkgKiBAcGFyYW0gbmV3U3RhdGUNCisJICovDQorCXZvaWQgY2xvc2UoQ2xpZW50Q29ubmVjdGlvblN0YXRlKiBuZXdTdGF0ZSk7DQorCQ0KKwkNCisNCisJdm9pZCBiYWRNZXNzYWdlKEJhZE1lc3NhZ2VFeGNlcHRpb24mIGUpOw0KKw0KKwl2b2lkIGlvRXhjZXB0aW9uKElPRXhjZXB0aW9uJiBlKTsNCisJDQorCU5ldHdvcmtUYWJsZUVudHJ5KiBHZXRFbnRyeShFbnRyeUlkIGlkKTsNCisJDQorCQ0KKwl2b2lkIGtlZXBBbGl2ZSgpOw0KKw0KKwl2b2lkIGNsaWVudEhlbGxvKFByb3RvY29sVmVyc2lvbiBwcm90b2NvbFJldmlzaW9uKTsNCisNCisJdm9pZCBwcm90b2NvbFZlcnNpb25VbnN1cHBvcnRlZChQcm90b2NvbFZlcnNpb24gcHJvdG9jb2xSZXZpc2lvbik7DQorDQorCXZvaWQgc2VydmVySGVsbG9Db21wbGV0ZSgpOw0KKw0KKw0KKwl2b2lkIG9mZmVySW5jb21pbmdBc3NpZ25tZW50KE5ldHdvcmtUYWJsZUVudHJ5KiBlbnRyeSk7DQorCXZvaWQgb2ZmZXJJbmNvbWluZ1VwZGF0ZShOZXR3b3JrVGFibGVFbnRyeSogZW50cnksIFNlcXVlbmNlTnVtYmVyIHNlcXVlbmNlTnVtYmVyLCBFbnRyeVZhbHVlIHZhbHVlKTsNCisNCisJdm9pZCBvZmZlck91dGdvaW5nQXNzaWdubWVudChOZXR3b3JrVGFibGVFbnRyeSogZW50cnkpOw0KKw0KKwl2b2lkIG9mZmVyT3V0Z29pbmdVcGRhdGUoTmV0d29ya1RhYmxlRW50cnkqIGVudHJ5KTsNCisJdm9pZCBmbHVzaCgpOw0KKwl2b2lkIGVuc3VyZUFsaXZlKCk7DQorDQorfTsNCisNCisNCisjZW5kaWYgLyogQ0xJRU5UQ09OTkVDVElPTkFEQVBURVJfSF8gKi8NCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9uZXR3b3JrdGFibGVzMi9jbGllbnQvQ2xpZW50Q29ubmVjdGlvbkxpc3RlbmVyTWFuYWdlci5oIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvbmV0d29ya3RhYmxlczIvY2xpZW50L0NsaWVudENvbm5lY3Rpb25MaXN0ZW5lck1hbmFnZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OGEyMzZiCi0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvbmV0d29ya3RhYmxlczIvY2xpZW50L0NsaWVudENvbm5lY3Rpb25MaXN0ZW5lck1hbmFnZXIuaApAQCAtMCwwICsxLDMzIEBACisvKg0KKyAqIENsaWVudENvbm5lY3Rpb25MaXN0ZW5lck1hbmFnZXIuaA0KKyAqDQorICogIENyZWF0ZWQgb246IFNlcCAyNCwgMjAxMg0KKyAqICAgICAgQXV0aG9yOiBNaXRjaGVsbCBXaWxscw0KKyAqLw0KKw0KKyNpZm5kZWYgQ0xJRU5UQ09OTkVDVElPTkxJU1RFTkVSTUFOQUdFUl9IXw0KKyNkZWZpbmUgQ0xJRU5UQ09OTkVDVElPTkxJU1RFTkVSTUFOQUdFUl9IXw0KKw0KKy8qKg0KKyAqIEFuIG9iamVjdCB0aGF0IG1hbmFnZXMgY29ubmVjdGlvbiBsaXN0ZW5lcnMgYW5kIGZpcmVzIGV2ZW50cyBmb3Igb3RoZXIgbGlzdGVuZXJzDQorICogDQorICogQGF1dGhvciBNaXRjaGVsbA0KKyAqDQorICovDQorY2xhc3MgQ2xpZW50Q29ubmVjdGlvbkxpc3RlbmVyTWFuYWdlcg0KK3sNCitwdWJsaWM6DQorCXZpcnR1YWwgfkNsaWVudENvbm5lY3Rpb25MaXN0ZW5lck1hbmFnZXIoKQ0KKwl7DQorCX0NCisJLyoqDQorCSAqIGNhbGxlZCB3aGVuIHNvbWV0aGluZyBpcyBjb25uZWN0ZWQNCisJICovDQorCXZpcnR1YWwgdm9pZCBGaXJlQ29ubmVjdGVkRXZlbnQoKSA9IDA7DQorCS8qKg0KKwkgKiBjYWxsZWQgd2hlbiBzb21ldGhpbmcgaXMgZGlzY29ubmVjdGVkDQorCSAqLw0KKwl2aXJ0dWFsIHZvaWQgRmlyZURpc2Nvbm5lY3RlZEV2ZW50KCkgPSAwOw0KK307DQorDQorI2VuZGlmIC8qIENMSUVOVENPTk5FQ1RJT05MSVNURU5FUk1BTkFHRVJfSF8gKi8NCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9uZXR3b3JrdGFibGVzMi9jbGllbnQvQ2xpZW50Q29ubmVjdGlvblN0YXRlLmNwcCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL25ldHdvcmt0YWJsZXMyL2NsaWVudC9DbGllbnRDb25uZWN0aW9uU3RhdGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxYTFjNmEKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9uZXR3b3JrdGFibGVzMi9jbGllbnQvQ2xpZW50Q29ubmVjdGlvblN0YXRlLmNwcApAQCAtMCwwICsxLDc3IEBACisvKg0KKyAqIENsaWVudENvbm5lY3Rpb25TdGF0ZS5jcHANCisgKg0KKyAqICBDcmVhdGVkIG9uOiBOb3YgMiwgMjAxMg0KKyAqICAgICAgQXV0aG9yOiBNaXRjaGVsbCBXaWxscw0KKyAqLw0KKyNpbmNsdWRlICJuZXR3b3JrdGFibGVzMi9jbGllbnQvQ2xpZW50Q29ubmVjdGlvblN0YXRlLmgiDQorI2lmbmRlZiBfV1JTX0tFUk5FTA0KKyNpbmNsdWRlIDxzdGRpbnQuaD4NCisjZW5kaWYNCisNCisjaW5jbHVkZSA8c3RkbGliLmg+DQorI2luY2x1ZGUgPG1lbW9yeT4NCisjaW5jbHVkZSA8Y3N0cmluZz4NCisNCisvKioNCisgKiBpbmRpY2F0ZXMgdGhhdCB0aGUgY2xpZW50IGlzIGRpc2Nvbm5lY3RlZCBmcm9tIHRoZSBzZXJ2ZXINCisgKi8NCitDbGllbnRDb25uZWN0aW9uU3RhdGUgQ2xpZW50Q29ubmVjdGlvblN0YXRlOjpESVNDT05ORUNURURfRlJPTV9TRVJWRVIoIkRJU0NPTk5FQ1RFRF9GUk9NX1NFUlZFUiIpOw0KKy8qKg0KKyAqIGluZGljYXRlcyB0aGF0IHRoZSBjbGllbnQgaXMgY29ubmVjdGVkIHRvIHRoZSBzZXJ2ZXIgYnV0IGhhcyBub3QgeWV0IGJlZ3VuIGNvbW11bmljYXRpb24NCisgKi8NCitDbGllbnRDb25uZWN0aW9uU3RhdGUgQ2xpZW50Q29ubmVjdGlvblN0YXRlOjpDT05ORUNURURfVE9fU0VSVkVSKCJDT05ORUNURURfVE9fU0VSVkVSIik7DQorLyoqDQorICogcmVwcmVzZW50cyB0aGF0IHRoZSBjbGllbnQgaGFzIHNlbnQgdGhlIGhlbGxvIHRvIHRoZSBzZXJ2ZXIgYW5kIGlzIHdhaXRpbmcgZm9yIGEgcmVzcG9uc2UNCisgKi8NCitDbGllbnRDb25uZWN0aW9uU3RhdGUgQ2xpZW50Q29ubmVjdGlvblN0YXRlOjpTRU5UX0hFTExPX1RPX1NFUlZFUigiU0VOVF9IRUxMT19UT19TRVJWRVIiKTsNCisvKioNCisgKiByZXByZXNlbnRzIHRoYXQgdGhlIGNsaWVudCBpcyBub3cgaW4gc3luYyB3aXRoIHRoZSBzZXJ2ZXINCisgKi8NCitDbGllbnRDb25uZWN0aW9uU3RhdGUgQ2xpZW50Q29ubmVjdGlvblN0YXRlOjpJTl9TWU5DX1dJVEhfU0VSVkVSKCJJTl9TWU5DX1dJVEhfU0VSVkVSIik7DQorDQorDQorCS8qKg0KKwkgKiBDcmVhdGUgYSBuZXcgcHJvdG9jb2wgdW5zdXBwb3J0ZWQgc3RhdGUNCisJICogQHBhcmFtIHNlcnZlclZlcnNpb24NCisJICovDQorQ2xpZW50Q29ubmVjdGlvblN0YXRlX1Byb3RvY29sVW5zdXBwb3RlZEJ5U2VydmVyOjpDbGllbnRDb25uZWN0aW9uU3RhdGVfUHJvdG9jb2xVbnN1cHBvdGVkQnlTZXJ2ZXIoUHJvdG9jb2xWZXJzaW9uIF9zZXJ2ZXJWZXJzaW9uKToNCisJCUNsaWVudENvbm5lY3Rpb25TdGF0ZSgiUFJPVE9DT0xfVU5TVVBQT1JURURfQllfU0VSVkVSIiksDQorCXNlcnZlclZlcnNpb24oX3NlcnZlclZlcnNpb24pe30NCisvKioNCisgKiBAcmV0dXJuIHRoZSBwcm90b2NvbCB2ZXJzaW9uIHRoYXQgdGhlIHNlcnZlciByZXBvcnRlZCBpdCBzdXBwb3J0cw0KKyAqLw0KK1Byb3RvY29sVmVyc2lvbiBDbGllbnRDb25uZWN0aW9uU3RhdGVfUHJvdG9jb2xVbnN1cHBvdGVkQnlTZXJ2ZXI6OmdldFNlcnZlclZlcnNpb24oKXsNCisJcmV0dXJuIHNlcnZlclZlcnNpb247DQorfQ0KK2NvbnN0IGNoYXIqIENsaWVudENvbm5lY3Rpb25TdGF0ZV9Qcm90b2NvbFVuc3VwcG90ZWRCeVNlcnZlcjo6dG9TdHJpbmcoKXsNCisJcmV0dXJuICJQUk9UT0NPTF9VTlNVUFBPUlRFRF9CWV9TRVJWRVIiOw0KKwkvL3JldHVybiAiUFJPVE9DT0xfVU5TVVBQT1JURURfQllfU0VSVkVSOiBTZXJ2ZXIgVmVyc2lvbjogMHgiK0ludGVnZXIudG9IZXhTdHJpbmcoc2VydmVyVmVyc2lvbik7DQorfQ0KKw0KKy8qKg0KKyAqIENyZWF0ZSBhIG5ldyBlcnJvciBzdGF0ZQ0KKyAqIEBwYXJhbSBlDQorICovDQorQ2xpZW50Q29ubmVjdGlvblN0YXRlX0Vycm9yOjpDbGllbnRDb25uZWN0aW9uU3RhdGVfRXJyb3Ioc3RkOjpleGNlcHRpb24mIF9lKTpDbGllbnRDb25uZWN0aW9uU3RhdGUoIkNMSUVOVF9FUlJPUiIpLGUoX2Upew0KKyAgc3RyY3B5KG1zZywgIkNMSUVOVF9FUlJPUjogIik7DQorICBzdHJjYXQobXNnLCBlLndoYXQoKSk7DQorfQ0KKy8qKg0KKyAqIEByZXR1cm4gdGhlIGV4Y2VwdGlvbiB0aGF0IGNhdXNlZCB0aGUgY2xpZW50IHRvIGVudGVyIGFuIGVycm9yIHN0YXRlDQorICovDQorc3RkOjpleGNlcHRpb24mIENsaWVudENvbm5lY3Rpb25TdGF0ZV9FcnJvcjo6Z2V0RXhjZXB0aW9uKCl7DQorCXJldHVybiBlOw0KK30NCitjb25zdCBjaGFyKiBDbGllbnRDb25uZWN0aW9uU3RhdGVfRXJyb3I6OnRvU3RyaW5nKCl7DQorICByZXR1cm4gbXNnOw0KKyAgLy9yZXR1cm4gIkNMSUVOVF9FUlJPUiI7DQorCS8vcmV0dXJuICJDTElFTlRfRVJST1I6ICIrZS5nZXRDbGFzcygpKyI6ICIrZS5nZXRNZXNzYWdlKCk7DQorfQ0KKw0KK0NsaWVudENvbm5lY3Rpb25TdGF0ZTo6Q2xpZW50Q29ubmVjdGlvblN0YXRlKGNvbnN0IGNoYXIqIF9uYW1lKXsNCisJbmFtZSA9IF9uYW1lOw0KK30NCitjb25zdCBjaGFyKiBDbGllbnRDb25uZWN0aW9uU3RhdGU6OnRvU3RyaW5nKCl7DQorCXJldHVybiBuYW1lOw0KK30NCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9uZXR3b3JrdGFibGVzMi9jbGllbnQvQ2xpZW50Q29ubmVjdGlvblN0YXRlLmggYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9uZXR3b3JrdGFibGVzMi9jbGllbnQvQ2xpZW50Q29ubmVjdGlvblN0YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTgyNmVmNQotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL25ldHdvcmt0YWJsZXMyL2NsaWVudC9DbGllbnRDb25uZWN0aW9uU3RhdGUuaApAQCAtMCwwICsxLDk5IEBACisvKg0KKyAqIENsaWVudENvbm5lY3Rpb25TdGF0ZS5oDQorICoNCisgKiAgQ3JlYXRlZCBvbjogTm92IDIsIDIwMTINCisgKiAgICAgIEF1dGhvcjogTWl0Y2hlbGwgV2lsbHMNCisgKi8NCisNCisjaWZuZGVmIENMSUVOVENPTk5FQ1RJT05TVEFURV9IXw0KKyNkZWZpbmUgQ0xJRU5UQ09OTkVDVElPTlNUQVRFX0hfDQorDQorDQorY2xhc3MgQ2xpZW50Q29ubmVjdGlvblN0YXRlOw0KK2NsYXNzIENsaWVudENvbm5lY3Rpb25TdGF0ZV9FcnJvcjsNCitjbGFzcyBDbGllbnRDb25uZWN0aW9uU3RhdGVfUHJvdG9jb2xVbnN1cHBvdGVkQnlTZXJ2ZXI7DQorDQorI2luY2x1ZGUgPGV4Y2VwdGlvbj4NCisjaW5jbHVkZSAibmV0d29ya3RhYmxlczIvY29ubmVjdGlvbi9OZXR3b3JrVGFibGVDb25uZWN0aW9uLmgiDQorDQorLyoqDQorICogUmVwcmVzZW50cyBhIHN0YXRlIHRoYXQgdGhlIGNsaWVudCBpcyBpbg0KKyAqIA0KKyAqIEBhdXRob3IgTWl0Y2hlbGwNCisgKg0KKyAqLw0KK2NsYXNzIENsaWVudENvbm5lY3Rpb25TdGF0ZSB7DQorcHVibGljOg0KKwkvKioNCisJICogaW5kaWNhdGVzIHRoYXQgdGhlIGNsaWVudCBpcyBkaXNjb25uZWN0ZWQgZnJvbSB0aGUgc2VydmVyDQorCSAqLw0KKwlzdGF0aWMgQ2xpZW50Q29ubmVjdGlvblN0YXRlIERJU0NPTk5FQ1RFRF9GUk9NX1NFUlZFUjsNCisJLyoqDQorCSAqIGluZGljYXRlcyB0aGF0IHRoZSBjbGllbnQgaXMgY29ubmVjdGVkIHRvIHRoZSBzZXJ2ZXIgYnV0IGhhcyBub3QgeWV0IGJlZ3VuIGNvbW11bmljYXRpb24NCisJICovDQorCXN0YXRpYyBDbGllbnRDb25uZWN0aW9uU3RhdGUgQ09OTkVDVEVEX1RPX1NFUlZFUjsNCisJLyoqDQorCSAqIHJlcHJlc2VudHMgdGhhdCB0aGUgY2xpZW50IGhhcyBzZW50IHRoZSBoZWxsbyB0byB0aGUgc2VydmVyIGFuZCBpcyB3YWl0aW5nIGZvciBhIHJlc3BvbnNlDQorCSAqLw0KKwlzdGF0aWMgQ2xpZW50Q29ubmVjdGlvblN0YXRlIFNFTlRfSEVMTE9fVE9fU0VSVkVSOw0KKwkvKioNCisJICogcmVwcmVzZW50cyB0aGF0IHRoZSBjbGllbnQgaXMgbm93IGluIHN5bmMgd2l0aCB0aGUgc2VydmVyDQorCSAqLw0KKwlzdGF0aWMgQ2xpZW50Q29ubmVjdGlvblN0YXRlIElOX1NZTkNfV0lUSF9TRVJWRVI7DQorCQ0KKwkNCitwcml2YXRlOg0KKwljb25zdCBjaGFyKiBuYW1lOw0KK3Byb3RlY3RlZDoNCisJQ2xpZW50Q29ubmVjdGlvblN0YXRlKGNvbnN0IGNoYXIqIG5hbWUpOw0KK3B1YmxpYzoNCisJdmlydHVhbCBjb25zdCBjaGFyKiB0b1N0cmluZygpOw0KK307DQorDQorDQorDQorLyoqDQorICogUmVwcmVzZW50cyB0aGF0IGEgY2xpZW50IHJlY2VpdmVkIGEgbWVzc2FnZSBmcm9tIHRoZSBzZXJ2ZXIgaW5kaWNhdGluZyB0aGF0IHRoZSBjbGllbnQncyBwcm90b2NvbCByZXZpc2lvbiBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBzZXJ2ZXINCisgKiBAYXV0aG9yIE1pdGNoZWxsDQorICoNCisgKi8NCitjbGFzcyBDbGllbnRDb25uZWN0aW9uU3RhdGVfUHJvdG9jb2xVbnN1cHBvdGVkQnlTZXJ2ZXIgOiBwdWJsaWMgQ2xpZW50Q29ubmVjdGlvblN0YXRlew0KK3ByaXZhdGU6DQorCWNvbnN0IFByb3RvY29sVmVyc2lvbiBzZXJ2ZXJWZXJzaW9uOw0KK3B1YmxpYzoNCisJLyoqDQorCSAqIENyZWF0ZSBhIG5ldyBwcm90b2NvbCB1bnN1cHBvcnRlZCBzdGF0ZQ0KKwkgKiBAcGFyYW0gc2VydmVyVmVyc2lvbg0KKwkgKi8NCisJQ2xpZW50Q29ubmVjdGlvblN0YXRlX1Byb3RvY29sVW5zdXBwb3RlZEJ5U2VydmVyKFByb3RvY29sVmVyc2lvbiBzZXJ2ZXJWZXJzaW9uKTsNCisJLyoqDQorCSAqIEByZXR1cm4gdGhlIHByb3RvY29sIHZlcnNpb24gdGhhdCB0aGUgc2VydmVyIHJlcG9ydGVkIGl0IHN1cHBvcnRzDQorCSAqLw0KKwlQcm90b2NvbFZlcnNpb24gZ2V0U2VydmVyVmVyc2lvbigpOw0KKwljb25zdCBjaGFyKiB0b1N0cmluZygpOw0KK307DQorLyoqDQorICogUmVwcmVzZW50cyB0aGF0IHRoZSBjbGllbnQgaXMgaW4gYW4gZXJyb3Igc3RhdGUNCisgKiANCisgKiBAYXV0aG9yIE1pdGNoZWxsDQorICoNCisgKi8NCitjbGFzcyBDbGllbnRDb25uZWN0aW9uU3RhdGVfRXJyb3IgOiBwdWJsaWMgQ2xpZW50Q29ubmVjdGlvblN0YXRlew0KK3ByaXZhdGU6DQorCXN0ZDo6ZXhjZXB0aW9uJiBlOw0KKwljaGFyIG1zZ1sxMDBdOw0KK3B1YmxpYzoNCisJLyoqDQorCSAqIENyZWF0ZSBhIG5ldyBlcnJvciBzdGF0ZQ0KKwkgKiBAcGFyYW0gZQ0KKwkgKi8NCisJQ2xpZW50Q29ubmVjdGlvblN0YXRlX0Vycm9yKHN0ZDo6ZXhjZXB0aW9uJiBlKTsNCisJLyoqDQorCSAqIEByZXR1cm4gdGhlIGV4Y2VwdGlvbiB0aGF0IGNhdXNlZCB0aGUgY2xpZW50IHRvIGVudGVyIGFuIGVycm9yIHN0YXRlDQorCSAqLw0KKwlzdGQ6OmV4Y2VwdGlvbiYgZ2V0RXhjZXB0aW9uKCk7DQorCXZpcnR1YWwgY29uc3QgY2hhciogdG9TdHJpbmcoKTsNCit9Ow0KKw0KKw0KKyNlbmRpZiAvKiBDTElFTlRDT05ORUNUSU9OU1RBVEVfSF8gKi8NCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9uZXR3b3JrdGFibGVzMi9jbGllbnQvQ2xpZW50TmV0d29ya1RhYmxlRW50cnlTdG9yZS5jcHAgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9uZXR3b3JrdGFibGVzMi9jbGllbnQvQ2xpZW50TmV0d29ya1RhYmxlRW50cnlTdG9yZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTRjZmE5NgotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL25ldHdvcmt0YWJsZXMyL2NsaWVudC9DbGllbnROZXR3b3JrVGFibGVFbnRyeVN0b3JlLmNwcApAQCAtMCwwICsxLDcxIEBACisvKg0KKyAqIENsaWVudE5ldHdvcmtUYWJsZUVudHJ5U3RvcmUuY3BwDQorICoNCisgKiAgQ3JlYXRlZCBvbjogTm92IDIsIDIwMTINCisgKiAgICAgIEF1dGhvcjogTWl0Y2hlbGwgV2lsbHMNCisgKi8NCisNCisjaW5jbHVkZSAibmV0d29ya3RhYmxlczIvY2xpZW50L0NsaWVudE5ldHdvcmtUYWJsZUVudHJ5U3RvcmUuaCINCisNCisvKioNCisgKiBDcmVhdGUgYSBuZXcgQ2xpZW50TmV0d29ya1RhYmxlRW50cnlTdG9yZQ0KKyAqIEBwYXJhbSB0cmFuc2FjdGlvblBvb2wNCisgKiBAcGFyYW0gbGlzdGVuZXJNYW5hZ2VyDQorICovDQorQ2xpZW50TmV0d29ya1RhYmxlRW50cnlTdG9yZTo6Q2xpZW50TmV0d29ya1RhYmxlRW50cnlTdG9yZShUYWJsZUxpc3RlbmVyTWFuYWdlciYgbGlzdGVuZXJNYW5hZ2VyKTogQWJzdHJhY3ROZXR3b3JrVGFibGVFbnRyeVN0b3JlKGxpc3RlbmVyTWFuYWdlcikge30NCitDbGllbnROZXR3b3JrVGFibGVFbnRyeVN0b3JlOjp+Q2xpZW50TmV0d29ya1RhYmxlRW50cnlTdG9yZSgpe30NCisNCitib29sIENsaWVudE5ldHdvcmtUYWJsZUVudHJ5U3RvcmU6OmFkZEVudHJ5KE5ldHdvcmtUYWJsZUVudHJ5KiBuZXdFbnRyeSl7DQorCXsNCisJCVN5bmNocm9uaXplZCBzeW5jKExPQ0spOw0KKwkJTmV0d29ya1RhYmxlRW50cnkqIGVudHJ5ID0gKE5ldHdvcmtUYWJsZUVudHJ5KiluYW1lZEVudHJpZXNbbmV3RW50cnktPm5hbWVdOw0KKw0KKwkJaWYoZW50cnkhPU5VTEwpew0KKwkJCWlmKGVudHJ5LT5HZXRJZCgpIT1uZXdFbnRyeS0+R2V0SWQoKSl7DQorCQkJCWlkRW50cmllcy5lcmFzZShlbnRyeS0+R2V0SWQoKSk7DQorCQkJCWlmKG5ld0VudHJ5LT5HZXRJZCgpIT1OZXR3b3JrVGFibGVFbnRyeTo6VU5LTk9XTl9JRCl7DQorCQkJCQllbnRyeS0+U2V0SWQobmV3RW50cnktPkdldElkKCkpOw0KKwkJCQkJaWRFbnRyaWVzW25ld0VudHJ5LT5HZXRJZCgpXSA9IGVudHJ5Ow0KKwkJCQl9DQorCQkJfQ0KKwkJCQ0KKwkJCWVudHJ5LT5Gb3JjZVB1dChuZXdFbnRyeS0+R2V0U2VxdWVuY2VOdW1iZXIoKSwgbmV3RW50cnktPkdldFR5cGUoKSwgbmV3RW50cnktPkdldFZhbHVlKCkpOw0KKwkJfQ0KKwkJZWxzZXsNCisJCQlpZihuZXdFbnRyeS0+R2V0SWQoKSE9TmV0d29ya1RhYmxlRW50cnk6OlVOS05PV05fSUQpDQorCQkJCWlkRW50cmllc1tuZXdFbnRyeS0+R2V0SWQoKV0gPSBuZXdFbnRyeTsNCisJCQluYW1lZEVudHJpZXNbbmV3RW50cnktPm5hbWVdID0gbmV3RW50cnk7DQorCQl9DQorCX0NCisJcmV0dXJuIHRydWU7DQorfQ0KKw0KK2Jvb2wgQ2xpZW50TmV0d29ya1RhYmxlRW50cnlTdG9yZTo6dXBkYXRlRW50cnkoTmV0d29ya1RhYmxlRW50cnkqIGVudHJ5LCBTZXF1ZW5jZU51bWJlciBzZXF1ZW5jZU51bWJlciwgRW50cnlWYWx1ZSB2YWx1ZSkgew0KKwl7IA0KKwkJU3luY2hyb25pemVkIHN5bmMoTE9DSyk7DQorCQllbnRyeS0+Rm9yY2VQdXQoc2VxdWVuY2VOdW1iZXIsIHZhbHVlKTsNCisJCWlmKGVudHJ5LT5HZXRJZCgpPT1OZXR3b3JrVGFibGVFbnRyeTo6VU5LTk9XTl9JRCl7DQorCQkJcmV0dXJuIGZhbHNlOw0KKwkJfQ0KKwkJcmV0dXJuIHRydWU7DQorCX0NCit9DQorDQorLyoqDQorICogU2VuZCBhbGwgdW5rbm93biBlbnRyaWVzIGluIHRoZSBlbnRyeSBzdG9yZSB0byB0aGUgZ2l2ZW4gY29ubmVjdGlvbg0KKyAqIEBwYXJhbSBjb25uZWN0aW9uDQorICogQHRocm93cyBJT0V4Y2VwdGlvbg0KKyAqLw0KK3ZvaWQgQ2xpZW50TmV0d29ya1RhYmxlRW50cnlTdG9yZTo6c2VuZFVua25vd25FbnRyaWVzKE5ldHdvcmtUYWJsZUNvbm5lY3Rpb24mIGNvbm5lY3Rpb24pIHsNCisJeyANCisJCVN5bmNocm9uaXplZCBzeW5jKExPQ0spOw0KKwkJc3RkOjptYXA8c3RkOjpzdHJpbmcsIE5ldHdvcmtUYWJsZUVudHJ5Kj46Oml0ZXJhdG9yIGl0cjsNCisJCWZvcihpdHIgPSBuYW1lZEVudHJpZXMuYmVnaW4oKTsgaXRyICE9IG5hbWVkRW50cmllcy5lbmQoKTsgaXRyKyspDQorCQl7DQorCQkJTmV0d29ya1RhYmxlRW50cnkqIGVudHJ5ID0gKCppdHIpLnNlY29uZDsNCisJCQlpZihlbnRyeS0+R2V0SWQoKT09TmV0d29ya1RhYmxlRW50cnk6OlVOS05PV05fSUQpDQorCQkJCWNvbm5lY3Rpb24uc2VuZEVudHJ5QXNzaWdubWVudCgqZW50cnkpOw0KKwkJfQ0KKwkJY29ubmVjdGlvbi5mbHVzaCgpOw0KKwl9DQorfQ0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL25ldHdvcmt0YWJsZXMyL2NsaWVudC9DbGllbnROZXR3b3JrVGFibGVFbnRyeVN0b3JlLmggYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9uZXR3b3JrdGFibGVzMi9jbGllbnQvQ2xpZW50TmV0d29ya1RhYmxlRW50cnlTdG9yZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3MTY0ZjUKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9uZXR3b3JrdGFibGVzMi9jbGllbnQvQ2xpZW50TmV0d29ya1RhYmxlRW50cnlTdG9yZS5oCkBAIC0wLDAgKzEsNTEgQEAKKy8qDQorICogQ2xpZW50TmV0d29ya1RhYmxlRW50cnlTdG9yZS5oDQorICoNCisgKiAgQ3JlYXRlZCBvbjogTm92IDIsIDIwMTINCisgKiAgICAgIEF1dGhvcjogTWl0Y2hlbGwgV2lsbHMNCisgKi8NCisNCisjaWZuZGVmIENMSUVOVE5FVFdPUktUQUJMRUVOVFJZU1RPUkVfSF8NCisjZGVmaW5lIENMSUVOVE5FVFdPUktUQUJMRUVOVFJZU1RPUkVfSF8NCisNCisNCitjbGFzcyBDbGllbnROZXR3b3JrVGFibGVFbnRyeVN0b3JlOw0KKw0KKw0KKyNpbmNsdWRlICJuZXR3b3JrdGFibGVzMi9BYnN0cmFjdE5ldHdvcmtUYWJsZUVudHJ5U3RvcmUuaCINCisjaW5jbHVkZSAibmV0d29ya3RhYmxlczIvTmV0d29ya1RhYmxlRW50cnkuaCINCisjaW5jbHVkZSAiU3luY2hyb25pemVkLmgiDQorDQorLyoqDQorICogVGhlIGVudHJ5IHN0b3JlIGZvciBhIHtAbGluayBOZXR3b3JrVGFibGVDbGllbnR9DQorICogDQorICogQGF1dGhvciBNaXRjaGVsbA0KKyAqDQorICovDQorY2xhc3MgQ2xpZW50TmV0d29ya1RhYmxlRW50cnlTdG9yZSA6IHB1YmxpYyBBYnN0cmFjdE5ldHdvcmtUYWJsZUVudHJ5U3RvcmV7DQorDQorcHVibGljOg0KKwkvKioNCisJICogQ3JlYXRlIGEgbmV3IENsaWVudE5ldHdvcmtUYWJsZUVudHJ5U3RvcmUNCisJICogQHBhcmFtIHRyYW5zYWN0aW9uUG9vbA0KKwkgKiBAcGFyYW0gbGlzdGVuZXJNYW5hZ2VyDQorCSAqLw0KKwlDbGllbnROZXR3b3JrVGFibGVFbnRyeVN0b3JlKFRhYmxlTGlzdGVuZXJNYW5hZ2VyJiBsaXN0ZW5lck1hbmFnZXIpOw0KKwl2aXJ0dWFsIH5DbGllbnROZXR3b3JrVGFibGVFbnRyeVN0b3JlKCk7DQorCQ0KK3Byb3RlY3RlZDoNCisJYm9vbCBhZGRFbnRyeShOZXR3b3JrVGFibGVFbnRyeSogbmV3RW50cnkpOw0KKwlib29sIHVwZGF0ZUVudHJ5KE5ldHdvcmtUYWJsZUVudHJ5KiBlbnRyeSwgU2VxdWVuY2VOdW1iZXIgc2VxdWVuY2VOdW1iZXIsIEVudHJ5VmFsdWUgdmFsdWUpOw0KKw0KK3B1YmxpYzoNCisJLyoqDQorCSAqIFNlbmQgYWxsIHVua25vd24gZW50cmllcyBpbiB0aGUgZW50cnkgc3RvcmUgdG8gdGhlIGdpdmVuIGNvbm5lY3Rpb24NCisJICogQHBhcmFtIGNvbm5lY3Rpb24NCisJICogQHRocm93cyBJT0V4Y2VwdGlvbg0KKwkgKi8NCisJdm9pZCBzZW5kVW5rbm93bkVudHJpZXMoTmV0d29ya1RhYmxlQ29ubmVjdGlvbiYgY29ubmVjdGlvbik7DQorfTsNCisNCisNCisNCisjZW5kaWYgLyogQ0xJRU5UTkVUV09SS1RBQkxFRU5UUllTVE9SRV9IXyAqLw0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL25ldHdvcmt0YWJsZXMyL2NsaWVudC9OZXR3b3JrVGFibGVDbGllbnQuY3BwIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvbmV0d29ya3RhYmxlczIvY2xpZW50L05ldHdvcmtUYWJsZUNsaWVudC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzRjYjYzNAotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL25ldHdvcmt0YWJsZXMyL2NsaWVudC9OZXR3b3JrVGFibGVDbGllbnQuY3BwCkBAIC0wLDAgKzEsNTAgQEAKKy8qDQorICogTmV0d29ya1RhYmxlQ2xpZW50LmNwcA0KKyAqDQorICogIENyZWF0ZWQgb246IE5vdiAzLCAyMDEyDQorICogICAgICBBdXRob3I6IE1pdGNoZWxsIFdpbGxzDQorICovDQorDQorI2luY2x1ZGUgIm5ldHdvcmt0YWJsZXMyL2NsaWVudC9OZXR3b3JrVGFibGVDbGllbnQuaCINCisjaW5jbHVkZSAibmV0d29ya3RhYmxlczIvVHJhbnNhY3Rpb25EaXJ0aWVyLmgiDQorDQorLyoqDQorICogQ3JlYXRlIGEgbmV3IE5ldHdvcmtUYWJsZSBDbGllbnQNCisgKiBAcGFyYW0gc3RyZWFtRmFjdG9yeQ0KKyAqIEBwYXJhbSB0aHJlYWRNYW5hZ2VyDQorICogQHBhcmFtIHRyYW5zYWN0aW9uUG9vbA0KKyAqLw0KK05ldHdvcmtUYWJsZUNsaWVudDo6TmV0d29ya1RhYmxlQ2xpZW50KElPU3RyZWFtRmFjdG9yeSYgc3RyZWFtRmFjdG9yeSwgTmV0d29ya1RhYmxlRW50cnlUeXBlTWFuYWdlciYgdHlwZU1hbmFnZXIsIE5UVGhyZWFkTWFuYWdlciYgdGhyZWFkTWFuYWdlcik6DQorCU5ldHdvcmtUYWJsZU5vZGUoKm5ldyBDbGllbnROZXR3b3JrVGFibGVFbnRyeVN0b3JlKCp0aGlzKSksDQorCWFkYXB0ZXIoKENsaWVudE5ldHdvcmtUYWJsZUVudHJ5U3RvcmUmKWVudHJ5U3RvcmUsIHRocmVhZE1hbmFnZXIsIHN0cmVhbUZhY3RvcnksICp0aGlzLCB0eXBlTWFuYWdlciksDQorCXdyaXRlTWFuYWdlcihhZGFwdGVyLCB0aHJlYWRNYW5hZ2VyLCBHZXRFbnRyeVN0b3JlKCksIDEwMDApew0KKwkNCisJR2V0RW50cnlTdG9yZSgpLlNldE91dGdvaW5nUmVjZWl2ZXIobmV3IFRyYW5zYWN0aW9uRGlydGllcih3cml0ZU1hbmFnZXIpKTsNCisJR2V0RW50cnlTdG9yZSgpLlNldEluY29taW5nUmVjZWl2ZXIoJk91dGdvaW5nRW50cnlSZWNlaXZlcl9OVUxMKTsNCisJd3JpdGVNYW5hZ2VyLnN0YXJ0KCk7DQorfQ0KK05ldHdvcmtUYWJsZUNsaWVudDo6fk5ldHdvcmtUYWJsZUNsaWVudCgpe30NCisNCisvKioNCisgKiBmb3JjZSB0aGUgY2xpZW50IHRvIGRpc2Nvbm5lY3QgYW5kIHJlY29ubmVjdCB0byB0aGUgc2VydmVyIGFnYWluLiBXaWxsIGNvbm5lY3QgaWYgdGhlIGNsaWVudCBpcyBjdXJyZW50bHkgZGlzY29ubmVjdGVkDQorICovDQordm9pZCBOZXR3b3JrVGFibGVDbGllbnQ6OnJlY29ubmVjdCgpIHsNCisJYWRhcHRlci5yZWNvbm5lY3QoKTsNCit9DQorDQordm9pZCBOZXR3b3JrVGFibGVDbGllbnQ6OkNsb3NlKCkgew0KKwlhZGFwdGVyLmNsb3NlKCk7DQorfQ0KKw0KK3ZvaWQgTmV0d29ya1RhYmxlQ2xpZW50OjpzdG9wKCkgew0KKwl3cml0ZU1hbmFnZXIuc3RvcCgpOw0KKwlDbG9zZSgpOw0KK30NCisNCitib29sIE5ldHdvcmtUYWJsZUNsaWVudDo6SXNDb25uZWN0ZWQoKSB7DQorCXJldHVybiBhZGFwdGVyLmlzQ29ubmVjdGVkKCk7DQorfQ0KKw0KK2Jvb2wgTmV0d29ya1RhYmxlQ2xpZW50OjpJc1NlcnZlcigpIHsNCisJcmV0dXJuIGZhbHNlOw0KK30NCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9uZXR3b3JrdGFibGVzMi9jbGllbnQvTmV0d29ya1RhYmxlQ2xpZW50LmggYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9uZXR3b3JrdGFibGVzMi9jbGllbnQvTmV0d29ya1RhYmxlQ2xpZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTliYzUwMQotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL25ldHdvcmt0YWJsZXMyL2NsaWVudC9OZXR3b3JrVGFibGVDbGllbnQuaApAQCAtMCwwICsxLDU0IEBACisvKg0KKyAqIE5ldHdvcmtUYWJsZUNsaWVudC5oDQorICoNCisgKiAgQ3JlYXRlZCBvbjogTm92IDMsIDIwMTINCisgKiAgICAgIEF1dGhvcjogTWl0Y2hlbGwgV2lsbHMNCisgKi8NCisNCisjaWZuZGVmIE5FVFdPUktUQUJMRUNMSUVOVF9IXw0KKyNkZWZpbmUgTkVUV09SS1RBQkxFQ0xJRU5UX0hfDQorDQorY2xhc3MgTmV0d29ya1RhYmxlQ2xpZW50Ow0KKw0KKyNpbmNsdWRlICJuZXR3b3JrdGFibGVzMi9OZXR3b3JrVGFibGVOb2RlLmgiDQorI2luY2x1ZGUgIm5ldHdvcmt0YWJsZXMyL2NsaWVudC9DbGllbnRDb25uZWN0aW9uQWRhcHRlci5oIg0KKyNpbmNsdWRlICJuZXR3b3JrdGFibGVzMi9Xcml0ZU1hbmFnZXIuaCINCisNCisvKioNCisgKiBBIGNsaWVudCBub2RlIGluIE5ldHdvcmtUYWJsZXMgMi4wDQorICogDQorICogQGF1dGhvciBNaXRjaGVsbA0KKyAqDQorICovDQorY2xhc3MgTmV0d29ya1RhYmxlQ2xpZW50IDogcHVibGljIE5ldHdvcmtUYWJsZU5vZGV7DQorcHJpdmF0ZToNCisJQ2xpZW50Q29ubmVjdGlvbkFkYXB0ZXIgYWRhcHRlcjsNCisJV3JpdGVNYW5hZ2VyIHdyaXRlTWFuYWdlcjsNCisNCitwdWJsaWM6DQorCS8qKg0KKwkgKiBDcmVhdGUgYSBuZXcgTmV0d29ya1RhYmxlIENsaWVudA0KKwkgKiBAcGFyYW0gc3RyZWFtRmFjdG9yeQ0KKwkgKiBAcGFyYW0gdGhyZWFkTWFuYWdlcg0KKwkgKiBAcGFyYW0gdHJhbnNhY3Rpb25Qb29sDQorCSAqLw0KKwlOZXR3b3JrVGFibGVDbGllbnQoSU9TdHJlYW1GYWN0b3J5JiBzdHJlYW1GYWN0b3J5LCBOZXR3b3JrVGFibGVFbnRyeVR5cGVNYW5hZ2VyJiB0eXBlTWFuYWdlciwgTlRUaHJlYWRNYW5hZ2VyJiB0aHJlYWRNYW5hZ2VyKTsNCisJfk5ldHdvcmtUYWJsZUNsaWVudCgpOw0KKw0KKwkvKioNCisJICogZm9yY2UgdGhlIGNsaWVudCB0byBkaXNjb25uZWN0IGFuZCByZWNvbm5lY3QgdG8gdGhlIHNlcnZlciBhZ2Fpbi4gV2lsbCBjb25uZWN0IGlmIHRoZSBjbGllbnQgaXMgY3VycmVudGx5IGRpc2Nvbm5lY3RlZA0KKwkgKi8NCisJdm9pZCByZWNvbm5lY3QoKTsNCisNCisJdm9pZCBDbG9zZSgpOw0KKwkNCisJdm9pZCBzdG9wKCk7DQorDQorCWJvb2wgSXNDb25uZWN0ZWQoKTsNCisNCisJYm9vbCBJc1NlcnZlcigpOw0KKw0KK307DQorDQorDQorI2VuZGlmIC8qIE5FVFdPUktUQUJMRUNMSUVOVF9IXyAqLw0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL25ldHdvcmt0YWJsZXMyL2Nvbm5lY3Rpb24vQmFkTWVzc2FnZUV4Y2VwdGlvbi5jcHAgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9uZXR3b3JrdGFibGVzMi9jb25uZWN0aW9uL0JhZE1lc3NhZ2VFeGNlcHRpb24uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExYTE1NzYKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9uZXR3b3JrdGFibGVzMi9jb25uZWN0aW9uL0JhZE1lc3NhZ2VFeGNlcHRpb24uY3BwCkBAIC0wLDAgKzEsMjMgQEAKKy8qDQorICogQmFkTWVzc2FnZUV4Y2VwdGlvbi5jcHANCisgKg0KKyAqICBDcmVhdGVkIG9uOiBTZXAgMTYsIDIwMTINCisgKiAgICAgIEF1dGhvcjogTWl0Y2hlbGwgV2lsbHMNCisgKi8NCisNCisjaW5jbHVkZSAibmV0d29ya3RhYmxlczIvY29ubmVjdGlvbi9CYWRNZXNzYWdlRXhjZXB0aW9uLmgiDQorDQorQmFkTWVzc2FnZUV4Y2VwdGlvbjo6QmFkTWVzc2FnZUV4Y2VwdGlvbihjb25zdCBjaGFyKiBtc2cpDQorCTogbWVzc2FnZShtc2cpDQorew0KKw0KK30NCisNCitCYWRNZXNzYWdlRXhjZXB0aW9uOjp+QmFkTWVzc2FnZUV4Y2VwdGlvbigpIHRocm93ICgpDQorew0KK30NCisNCitjb25zdCBjaGFyKiBCYWRNZXNzYWdlRXhjZXB0aW9uOjp3aGF0KCkNCit7DQorCXJldHVybiBtZXNzYWdlLmNfc3RyKCk7DQorfQ0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL25ldHdvcmt0YWJsZXMyL2Nvbm5lY3Rpb24vQmFkTWVzc2FnZUV4Y2VwdGlvbi5oIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvbmV0d29ya3RhYmxlczIvY29ubmVjdGlvbi9CYWRNZXNzYWdlRXhjZXB0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOThiOTlmZQotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL25ldHdvcmt0YWJsZXMyL2Nvbm5lY3Rpb24vQmFkTWVzc2FnZUV4Y2VwdGlvbi5oCkBAIC0wLDAgKzEsMjQgQEAKKy8qDQorICogQmFkTWVzc2FnZUV4Y2VwdGlvbi5oDQorICoNCisgKiAgQ3JlYXRlZCBvbjogU2VwIDE2LCAyMDEyDQorICogICAgICBBdXRob3I6IE1pdGNoZWxsIFdpbGxzDQorICovDQorDQorI2lmbmRlZiBCQURNRVNTQUdFRVhDRVBUSU9OX0hfDQorI2RlZmluZSBCQURNRVNTQUdFRVhDRVBUSU9OX0hfDQorDQorI2luY2x1ZGUgPGV4Y2VwdGlvbj4NCisjaW5jbHVkZSA8c3RyaW5nPg0KKw0KK2NsYXNzIEJhZE1lc3NhZ2VFeGNlcHRpb24gOiBwdWJsaWMgc3RkOjpleGNlcHRpb24NCit7DQorcHVibGljOg0KKwlCYWRNZXNzYWdlRXhjZXB0aW9uKGNvbnN0IGNoYXIqIG1lc3NhZ2UpOw0KKwl+QmFkTWVzc2FnZUV4Y2VwdGlvbigpIHRocm93ICgpOw0KKwljb25zdCBjaGFyKiB3aGF0KCk7DQorcHJpdmF0ZToNCisJc3RkOjpzdHJpbmcgbWVzc2FnZTsNCit9Ow0KKw0KKyNlbmRpZiAvKiBCQURNRVNTQUdFRVhDRVBUSU9OX0hfICovDQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvbmV0d29ya3RhYmxlczIvY29ubmVjdGlvbi9Db25uZWN0aW9uQWRhcHRlci5oIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvbmV0d29ya3RhYmxlczIvY29ubmVjdGlvbi9Db25uZWN0aW9uQWRhcHRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhMjEzMDEKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9uZXR3b3JrdGFibGVzMi9jb25uZWN0aW9uL0Nvbm5lY3Rpb25BZGFwdGVyLmgKQEAgLTAsMCArMSw0NSBAQAorLyoNCisgKiBDb25uZWN0aW9uQWRhcHRlci5oDQorICoNCisgKiAgQ3JlYXRlZCBvbjogU2VwIDE2LCAyMDEyDQorICogICAgICBBdXRob3I6IE1pdGNoZWxsIFdpbGxzDQorICovDQorDQorI2lmbmRlZiBDT05ORUNUSU9OQURBUFRFUl9IXw0KKyNkZWZpbmUgQ09OTkVDVElPTkFEQVBURVJfSF8NCisNCitjbGFzcyBDb25uZWN0aW9uQWRhcHRlcjsNCisNCisjaW5jbHVkZSAiLi4vTmV0d29ya1RhYmxlRW50cnkuaCINCisjaW5jbHVkZSAiQmFkTWVzc2FnZUV4Y2VwdGlvbi5oIg0KKyNpbmNsdWRlICJuZXR3b3JrdGFibGVzMi91dGlsL0lPRXhjZXB0aW9uLmgiDQorI2luY2x1ZGUgInRhYmxlcy9JVGFibGUuaCINCisNCitjbGFzcyBDb25uZWN0aW9uQWRhcHRlcg0KK3sNCitwdWJsaWM6DQorCXZpcnR1YWwgfkNvbm5lY3Rpb25BZGFwdGVyKCkNCisJew0KKwl9DQorCXZpcnR1YWwgdm9pZCBrZWVwQWxpdmUoKSA9IDA7DQorCXZpcnR1YWwgdm9pZCBjbGllbnRIZWxsbyhQcm90b2NvbFZlcnNpb24gcHJvdG9jb2xSZXZpc2lvbikgPSAwOw0KKwl2aXJ0dWFsIHZvaWQgc2VydmVySGVsbG9Db21wbGV0ZSgpID0gMDsNCisJdmlydHVhbCB2b2lkIHByb3RvY29sVmVyc2lvblVuc3VwcG9ydGVkKFByb3RvY29sVmVyc2lvbiBwcm90b2NvbFJldmlzaW9uKSA9IDA7DQorCXZpcnR1YWwgdm9pZCBvZmZlckluY29taW5nQXNzaWdubWVudChOZXR3b3JrVGFibGVFbnRyeSogbmV3RW50cnkpID0gMDsNCisJdmlydHVhbCB2b2lkIG9mZmVySW5jb21pbmdVcGRhdGUoTmV0d29ya1RhYmxlRW50cnkqIG5ld0VudHJ5LCBTZXF1ZW5jZU51bWJlciBzZXF1ZW5jZU51bWJlciwgRW50cnlWYWx1ZSB2YWx1ZSkgPSAwOw0KKwl2aXJ0dWFsIE5ldHdvcmtUYWJsZUVudHJ5KiBHZXRFbnRyeShFbnRyeUlkKSA9IDA7DQorDQorCS8qKg0KKwkgKiBjYWxsZWQgaWYgYSBiYWQgbWVzc2FnZSBleGNlcHRpb24gaXMgdGhyb3duDQorCSAqIEBwYXJhbSBlDQorCSAqLw0KKwl2aXJ0dWFsIHZvaWQgYmFkTWVzc2FnZShCYWRNZXNzYWdlRXhjZXB0aW9uJiBlKSA9IDA7DQorDQorCS8qKg0KKwkgKiBjYWxsZWQgaWYgYW4gaW8gZXhjZXB0aW9uIGlzIHRocm93bg0KKwkgKiBAcGFyYW0gZQ0KKwkgKi8NCisJdmlydHVhbCB2b2lkIGlvRXhjZXB0aW9uKElPRXhjZXB0aW9uJiBlKSA9IDA7DQorfTsNCisNCisjZW5kaWYgLyogQ09OTkVDVElPTkFEQVBURVJfSF8gKi8NCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9uZXR3b3JrdGFibGVzMi9jb25uZWN0aW9uL0Nvbm5lY3Rpb25Nb25pdG9yVGhyZWFkLmNwcCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL25ldHdvcmt0YWJsZXMyL2Nvbm5lY3Rpb24vQ29ubmVjdGlvbk1vbml0b3JUaHJlYWQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5MzAxNDkKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9uZXR3b3JrdGFibGVzMi9jb25uZWN0aW9uL0Nvbm5lY3Rpb25Nb25pdG9yVGhyZWFkLmNwcApAQCAtMCwwICsxLDI2IEBACisvKg0KKyAqIENvbm5lY3Rpb25Nb25pdG9yVGhyZWFkLmNwcA0KKyAqDQorICogIENyZWF0ZWQgb246IFNlcCAyMiwgMjAxMg0KKyAqICAgICAgQXV0aG9yOiBNaXRjaGVsbCBXaWxscw0KKyAqLw0KKw0KKyNpbmNsdWRlICJuZXR3b3JrdGFibGVzMi9jb25uZWN0aW9uL0Nvbm5lY3Rpb25Nb25pdG9yVGhyZWFkLmgiDQorI2luY2x1ZGUgIm5ldHdvcmt0YWJsZXMyL2Nvbm5lY3Rpb24vQmFkTWVzc2FnZUV4Y2VwdGlvbi5oIg0KKw0KKw0KK0Nvbm5lY3Rpb25Nb25pdG9yVGhyZWFkOjpDb25uZWN0aW9uTW9uaXRvclRocmVhZChDb25uZWN0aW9uQWRhcHRlciYgX2FkYXB0ZXIsIE5ldHdvcmtUYWJsZUNvbm5lY3Rpb24mIF9jb25uZWN0aW9uKSA6DQorCWFkYXB0ZXIoX2FkYXB0ZXIpLCBjb25uZWN0aW9uKF9jb25uZWN0aW9uKSB7DQorfQ0KKw0KK3ZvaWQgQ29ubmVjdGlvbk1vbml0b3JUaHJlYWQ6OnJ1bigpIHsNCisgIA0KKwl0cnl7DQorCQljb25uZWN0aW9uLnJlYWQoYWRhcHRlcik7DQorCX0gY2F0Y2goQmFkTWVzc2FnZUV4Y2VwdGlvbiYgZSl7DQorCQlhZGFwdGVyLmJhZE1lc3NhZ2UoZSk7DQorCX0gY2F0Y2goSU9FeGNlcHRpb24mIGUpew0KKwkJYWRhcHRlci5pb0V4Y2VwdGlvbihlKTsNCisJfQ0KK30NCisNCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9uZXR3b3JrdGFibGVzMi9jb25uZWN0aW9uL0Nvbm5lY3Rpb25Nb25pdG9yVGhyZWFkLmggYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9uZXR3b3JrdGFibGVzMi9jb25uZWN0aW9uL0Nvbm5lY3Rpb25Nb25pdG9yVGhyZWFkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWVlZDNmNAotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL25ldHdvcmt0YWJsZXMyL2Nvbm5lY3Rpb24vQ29ubmVjdGlvbk1vbml0b3JUaHJlYWQuaApAQCAtMCwwICsxLDQzIEBACisvKg0KKyAqIENvbm5lY3Rpb25Nb25pdG9yVGhyZWFkLmgNCisgKg0KKyAqICBDcmVhdGVkIG9uOiBTZXAgMjIsIDIwMTINCisgKiAgICAgIEF1dGhvcjogTWl0Y2hlbGwgV2lsbHMNCisgKi8NCisNCisjaWZuZGVmIENPTk5FQ1RJT05NT05JVE9SVEhSRUFEX0hfDQorI2RlZmluZSBDT05ORUNUSU9OTU9OSVRPUlRIUkVBRF9IXw0KKw0KKw0KK2NsYXNzIENvbm5lY3Rpb25Nb25pdG9yVGhyZWFkOw0KKw0KKyNpbmNsdWRlICJDb25uZWN0aW9uQWRhcHRlci5oIg0KKyNpbmNsdWRlICJOZXR3b3JrVGFibGVDb25uZWN0aW9uLmgiDQorI2luY2x1ZGUgIi4uL3RocmVhZC9QZXJpb2RpY1J1bm5hYmxlLmgiDQorDQorDQorDQorDQorLyoqDQorICogQSBwZXJpb2RpYyB0aHJlYWQgdGhhdCByZXBlYXRlZGx5IHJlYWRzIGZyb20gYSBjb25uZWN0aW9uDQorICogQGF1dGhvciBNaXRjaGVsbA0KKyAqDQorICovDQorY2xhc3MgQ29ubmVjdGlvbk1vbml0b3JUaHJlYWQgOiBwdWJsaWMgUGVyaW9kaWNSdW5uYWJsZXsNCitwcml2YXRlOg0KKwlDb25uZWN0aW9uQWRhcHRlciYgYWRhcHRlcjsNCisJTmV0d29ya1RhYmxlQ29ubmVjdGlvbiYgY29ubmVjdGlvbjsNCisNCitwdWJsaWM6DQorCS8qKg0KKwkgKiBjcmVhdGUgYSBuZXcgbW9uaXRvciB0aHJlYWQNCisJICogQHBhcmFtIGFkYXB0ZXINCisJICogQHBhcmFtIGNvbm5lY3Rpb24NCisJICovDQorCUNvbm5lY3Rpb25Nb25pdG9yVGhyZWFkKENvbm5lY3Rpb25BZGFwdGVyJiBhZGFwdGVyLCBOZXR3b3JrVGFibGVDb25uZWN0aW9uJiBjb25uZWN0aW9uKTsNCisNCisJdm9pZCBydW4oKTsNCit9Ow0KKw0KKw0KKyNlbmRpZiAvKiBDT05ORUNUSU9OTU9OSVRPUlRIUkVBRF9IXyAqLw0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL25ldHdvcmt0YWJsZXMyL2Nvbm5lY3Rpb24vRGF0YUlPU3RyZWFtLmNwcCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL25ldHdvcmt0YWJsZXMyL2Nvbm5lY3Rpb24vRGF0YUlPU3RyZWFtLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzcyYjU4Ci0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvbmV0d29ya3RhYmxlczIvY29ubmVjdGlvbi9EYXRhSU9TdHJlYW0uY3BwCkBAIC0wLDAgKzEsNjQgQEAKKyNpbmNsdWRlICJuZXR3b3JrdGFibGVzMi9jb25uZWN0aW9uL0RhdGFJT1N0cmVhbS5oIg0KKw0KKy8vVE9ETyByZW1vdmUgdGhpcyB3aGVuIGFsbG9jYSBpcyBzb2x2ZWQNCisjaWZkZWYgV0lOMzINCisjaW5jbHVkZSA8bWFsbG9jLmg+DQorI2VuZGlmDQorDQorRGF0YUlPU3RyZWFtOjpEYXRhSU9TdHJlYW0oSU9TdHJlYW0qIF9pb3N0cmVhbSkgOg0KKwlpb3N0cmVhbSgqX2lvc3RyZWFtKQ0KK3sNCit9DQorRGF0YUlPU3RyZWFtOjp+RGF0YUlPU3RyZWFtKCkNCit7DQorCWNsb3NlKCk7DQorCWRlbGV0ZSAmaW9zdHJlYW07DQorfQ0KK3ZvaWQgRGF0YUlPU3RyZWFtOjpjbG9zZSgpDQorew0KKwlpb3N0cmVhbS5jbG9zZSgpOw0KK30NCisNCit2b2lkIERhdGFJT1N0cmVhbTo6d3JpdGVCeXRlKHVpbnQ4X3QgYikNCit7DQorCWlvc3RyZWFtLndyaXRlKCZiLCAxKTsNCit9DQordm9pZCBEYXRhSU9TdHJlYW06OndyaXRlMkJ5dGVzQkUodWludDE2X3QgcykNCit7DQorCXdyaXRlQnl0ZSgodWludDhfdCkocyA+PiA4KSk7DQorCXdyaXRlQnl0ZSgodWludDhfdClzKTsNCit9DQordm9pZCBEYXRhSU9TdHJlYW06OndyaXRlU3RyaW5nKHN0ZDo6c3RyaW5nJiBzdHIpDQorew0KKwl3cml0ZTJCeXRlc0JFKHN0ci5sZW5ndGgoKSk7DQorCWlvc3RyZWFtLndyaXRlKHN0ci5jX3N0cigpLCBzdHIubGVuZ3RoKCkpOw0KK30NCit2b2lkIERhdGFJT1N0cmVhbTo6Zmx1c2goKQ0KK3sNCisJaW9zdHJlYW0uZmx1c2goKTsNCit9DQordWludDhfdCBEYXRhSU9TdHJlYW06OnJlYWRCeXRlKCkNCit7DQorCXVpbnQ4X3QgdmFsdWU7DQorCWlvc3RyZWFtLnJlYWQoJnZhbHVlLCAxKTsNCisJcmV0dXJuIHZhbHVlOw0KK30NCit1aW50MTZfdCBEYXRhSU9TdHJlYW06OnJlYWQyQnl0ZXNCRSgpDQorew0KKwl1aW50MTZfdCB2YWx1ZTsNCisJdmFsdWUgPSByZWFkQnl0ZSgpPDw4IHwgcmVhZEJ5dGUoKTsNCisJcmV0dXJuIHZhbHVlOw0KK30NCitzdGQ6OnN0cmluZyogRGF0YUlPU3RyZWFtOjpyZWFkU3RyaW5nKCkNCit7DQorCQ0KKwl1bnNpZ25lZCBpbnQgYnl0ZUxlbmd0aCA9IHJlYWQyQnl0ZXNCRSgpOw0KKyNpZm5kZWYgV0lOMzINCisJdWludDhfdCBieXRlc1tieXRlTGVuZ3RoKzFdOy8vRklYTUUgZmlndXJlIG91dCB3aHkgdGhpcyBkb2Vzbid0IHdvcmsgb24gd2luZG93cw0KKyNlbHNlDQorCXVpbnQ4X3QqIGJ5dGVzID0gKHVpbnQ4X3QqKWFsbG9jYShieXRlTGVuZ3RoKzEpOw0KKyNlbmRpZg0KKwlpb3N0cmVhbS5yZWFkKGJ5dGVzLCBieXRlTGVuZ3RoKTsNCisJYnl0ZXNbYnl0ZUxlbmd0aF0gPSAwOw0KKwlyZXR1cm4gbmV3IHN0ZDo6c3RyaW5nKChjaGFyKilieXRlcyk7Ly9GSVhNRSBpbXBsZW1lbnQgVVRGLTggYXdhcmUgdmVyc2lvbg0KK30NCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9uZXR3b3JrdGFibGVzMi9jb25uZWN0aW9uL0RhdGFJT1N0cmVhbS5oIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvbmV0d29ya3RhYmxlczIvY29ubmVjdGlvbi9EYXRhSU9TdHJlYW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hODllMjk5Ci0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvbmV0d29ya3RhYmxlczIvY29ubmVjdGlvbi9EYXRhSU9TdHJlYW0uaApAQCAtMCwwICsxLDQ5IEBACisjaWZuZGVmIERBVEFJT1NUUkVBTV9IXw0KKyNkZWZpbmUgREFUQUlPU1RSRUFNX0hfDQorDQorI2luY2x1ZGUgPHN0ZGxpYi5oPg0KKyNpbmNsdWRlICIuLi9zdHJlYW0vSU9TdHJlYW0uaCINCisjaW5jbHVkZSA8ZXhjZXB0aW9uPg0KKyNpbmNsdWRlIDxzdHJpbmc+DQorDQorI2lmbmRlZiBfV1JTX0tFUk5FTA0KKyNpbmNsdWRlIDxzdGRpbnQuaD4NCisjZW5kaWYNCisNCisjaW5jbHVkZSA8c3RkbGliLmg+DQorI2luY2x1ZGUgPG1lbW9yeT4NCisNCisvL1dpbmRSaXZlciBpcyAzLjQgR0NDLiBSZWNlbnQgR0NDIGNhbiAgZG8gMGIwMTAxMDEwMSBzdHlsZSBmb3JtYXQsIFdSIGNhbm5vdA0KKw0KKyNkZWZpbmUgVE9fSEVYX18obikgMHgjI24jI0xVIC8vIExVIGZvciB1bnNpZ25lZCBsb25nDQorI2RlZmluZSBCSU5BUllfTElURVJBTF9WSUFfSEVYX18obikgKCgobiAmIDB4MDAwMDAwMDFMVSkgPyAxIDogMClcDQorCSsgKChuICYgMHgwMDAwMDAxMExVKSA/IDIgOiAwKSBcDQorCSsgKChuICYgMHgwMDAwMDEwMExVKSA/IDQgOiAwKSBcDQorCSsgKChuICYgMHgwMDAwMTAwMExVKSA/IDggOiAwKSBcDQorCSsgKChuICYgMHgwMDAxMDAwMExVKSA/IDE2IDogMCkgXA0KKwkrICgobiAmIDB4MDAxMDAwMDBMVSkgPyAzMiA6IDApIFwNCisJKyAoKG4gJiAweDAxMDAwMDAwTFUpID8gNjQgOiAwKSBcDQorCSsgKChuICYgMHgxMDAwMDAwMExVKSA/IDEyOCA6IDApKQ0KKwkNCisjZGVmaW5lIGIobikgKCh1bnNpZ25lZCBjaGFyKUJJTkFSWV9MSVRFUkFMX1ZJQV9IRVhfXyhUT19IRVhfXyhuKSkpDQorDQorY2xhc3MgRGF0YUlPU3RyZWFtew0KK3B1YmxpYzoNCisJRGF0YUlPU3RyZWFtKElPU3RyZWFtKiBzdHJlYW0pOw0KKwl2aXJ0dWFsIH5EYXRhSU9TdHJlYW0oKTsNCisJdm9pZCB3cml0ZUJ5dGUodWludDhfdCBiKTsNCisJdm9pZCB3cml0ZTJCeXRlc0JFKHVpbnQxNl90IHMpOw0KKwl2b2lkIHdyaXRlU3RyaW5nKHN0ZDo6c3RyaW5nJiBzdHIpOw0KKwl2b2lkIGZsdXNoKCk7DQorCQ0KKwl1aW50OF90IHJlYWRCeXRlKCk7DQorCXVpbnQxNl90IHJlYWQyQnl0ZXNCRSgpOw0KKwlzdGQ6OnN0cmluZyogcmVhZFN0cmluZygpOw0KKwkNCisJdm9pZCBjbG9zZSgpOw0KKy8vcHJpdmF0ZToNCisJSU9TdHJlYW0mIGlvc3RyZWFtOw0KK307DQorDQorDQorI2VuZGlmDQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvbmV0d29ya3RhYmxlczIvY29ubmVjdGlvbi9OZXR3b3JrVGFibGVDb25uZWN0aW9uLmNwcCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL25ldHdvcmt0YWJsZXMyL2Nvbm5lY3Rpb24vTmV0d29ya1RhYmxlQ29ubmVjdGlvbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDM5MjlkNAotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL25ldHdvcmt0YWJsZXMyL2Nvbm5lY3Rpb24vTmV0d29ya1RhYmxlQ29ubmVjdGlvbi5jcHAKQEAgLTAsMCArMSwxNTYgQEAKKy8qKg0KKyAqIEFuIGFic3RyYWN0aW9uIGZvciB0aGUgTmV0d29ya1RhYmxlIHByb3RvY29sDQorICogDQorICogQGF1dGhvciBtd2lsbHMNCisgKg0KKyAqLw0KKw0KKyNpbmNsdWRlICJuZXR3b3JrdGFibGVzMi9jb25uZWN0aW9uL05ldHdvcmtUYWJsZUNvbm5lY3Rpb24uaCINCisjaW5jbHVkZSAibmV0d29ya3RhYmxlczIvY29ubmVjdGlvbi9CYWRNZXNzYWdlRXhjZXB0aW9uLmgiDQorDQorDQorTmV0d29ya1RhYmxlQ29ubmVjdGlvbjo6TmV0d29ya1RhYmxlQ29ubmVjdGlvbihJT1N0cmVhbSogX2lvU3RyZWFtLCBOZXR3b3JrVGFibGVFbnRyeVR5cGVNYW5hZ2VyJiBfdHlwZU1hbmFnZXIpIDoNCisJaW9TdHJlYW0obmV3IERhdGFJT1N0cmVhbShfaW9TdHJlYW0pKSwgdHlwZU1hbmFnZXIoX3R5cGVNYW5hZ2VyKSB7DQorCWlzVmFsaWQgPSB0cnVlOw0KK30NCitOZXR3b3JrVGFibGVDb25uZWN0aW9uOjp+TmV0d29ya1RhYmxlQ29ubmVjdGlvbigpew0KKwlkZWxldGUgaW9TdHJlYW07DQorfQ0KKw0KK3ZvaWQgTmV0d29ya1RhYmxlQ29ubmVjdGlvbjo6Y2xvc2UoKSB7DQorCXsNCisJCVN5bmNocm9uaXplZCBzeW5jKFdSSVRFX0xPQ0spOw0KKwkJaWYgKGlzVmFsaWQpIHsNCisJCQlpc1ZhbGlkID0gZmFsc2U7DQorCQkJaW9TdHJlYW0tPmNsb3NlKCk7DQorCQl9DQorCX0NCit9DQordm9pZCBOZXR3b3JrVGFibGVDb25uZWN0aW9uOjpmbHVzaCgpIHsNCisJew0KKwkJU3luY2hyb25pemVkIHN5bmMoV1JJVEVfTE9DSyk7DQorCQlpb1N0cmVhbS0+Zmx1c2goKTsNCisJfQ0KK30NCisNCit2b2lkIE5ldHdvcmtUYWJsZUNvbm5lY3Rpb246OnNlbmRNZXNzYWdlSGVhZGVyKA0KKwkJTmV0d29ya1RhYmxlTWVzc2FnZVR5cGUgbWVzc2FnZVR5cGUpIHsNCisJew0KKwkJU3luY2hyb25pemVkIHN5bmMoV1JJVEVfTE9DSyk7DQorCQlpb1N0cmVhbS0+d3JpdGVCeXRlKCh1aW50OF90KSBtZXNzYWdlVHlwZSk7DQorCX0NCit9DQorDQordm9pZCBOZXR3b3JrVGFibGVDb25uZWN0aW9uOjpzZW5kS2VlcEFsaXZlKCkgew0KKwl7DQorCQlTeW5jaHJvbml6ZWQgc3luYyhXUklURV9MT0NLKTsNCisJCXNlbmRNZXNzYWdlSGVhZGVyKEtFRVBfQUxJVkUpOw0KKwkJZmx1c2goKTsNCisJfQ0KK30NCisNCit2b2lkIE5ldHdvcmtUYWJsZUNvbm5lY3Rpb246OnNlbmRDbGllbnRIZWxsbygpIHsNCisJew0KKwkJU3luY2hyb25pemVkIHN5bmMoV1JJVEVfTE9DSyk7DQorCQlzZW5kTWVzc2FnZUhlYWRlcihDTElFTlRfSEVMTE8pOw0KKwkJaW9TdHJlYW0tPndyaXRlMkJ5dGVzQkUoUFJPVE9DT0xfUkVWSVNJT04pOw0KKwkJZmx1c2goKTsNCisJfQ0KK30NCit2b2lkIE5ldHdvcmtUYWJsZUNvbm5lY3Rpb246OnNlbmRTZXJ2ZXJIZWxsb0NvbXBsZXRlKCkgew0KKwl7DQorCQlTeW5jaHJvbml6ZWQgc3luYyhXUklURV9MT0NLKTsNCisJCXNlbmRNZXNzYWdlSGVhZGVyKFNFUlZFUl9IRUxMT19DT01QTEVURSk7DQorCQlmbHVzaCgpOw0KKwl9DQorfQ0KKw0KK3ZvaWQgTmV0d29ya1RhYmxlQ29ubmVjdGlvbjo6c2VuZFByb3RvY29sVmVyc2lvblVuc3VwcG9ydGVkKCkgew0KKwl7DQorCQlTeW5jaHJvbml6ZWQgc3luYyhXUklURV9MT0NLKTsNCisJCXNlbmRNZXNzYWdlSGVhZGVyKFBST1RPQ09MX1ZFUlNJT05fVU5TVVBQT1JURUQpOw0KKwkJaW9TdHJlYW0tPndyaXRlMkJ5dGVzQkUoUFJPVE9DT0xfUkVWSVNJT04pOw0KKwkJZmx1c2goKTsNCisJfQ0KK30NCisNCit2b2lkIE5ldHdvcmtUYWJsZUNvbm5lY3Rpb246OnNlbmRFbnRyeUFzc2lnbm1lbnQoTmV0d29ya1RhYmxlRW50cnkmIGVudHJ5KSB7DQorCXsNCisJCVN5bmNocm9uaXplZCBzeW5jKFdSSVRFX0xPQ0spOw0KKwkJc2VuZE1lc3NhZ2VIZWFkZXIoRU5UUllfQVNTSUdOTUVOVCk7DQorCQlpb1N0cmVhbS0+d3JpdGVTdHJpbmcoZW50cnkubmFtZSk7DQorCQlpb1N0cmVhbS0+d3JpdGVCeXRlKGVudHJ5LkdldFR5cGUoKS0+aWQpOw0KKwkJaW9TdHJlYW0tPndyaXRlMkJ5dGVzQkUoZW50cnkuR2V0SWQoKSk7DQorCQlpb1N0cmVhbS0+d3JpdGUyQnl0ZXNCRShlbnRyeS5HZXRTZXF1ZW5jZU51bWJlcigpKTsNCisJCWVudHJ5LlNlbmRWYWx1ZSgqaW9TdHJlYW0pOw0KKwl9DQorfQ0KKw0KK3ZvaWQgTmV0d29ya1RhYmxlQ29ubmVjdGlvbjo6c2VuZEVudHJ5VXBkYXRlKE5ldHdvcmtUYWJsZUVudHJ5JiBlbnRyeSkgew0KKwl7DQorCQlTeW5jaHJvbml6ZWQgc3luYyhXUklURV9MT0NLKTsNCisJCXNlbmRNZXNzYWdlSGVhZGVyKEZJRUxEX1VQREFURSk7DQorCQlpb1N0cmVhbS0+d3JpdGUyQnl0ZXNCRShlbnRyeS5HZXRJZCgpKTsNCisJCWlvU3RyZWFtLT53cml0ZTJCeXRlc0JFKGVudHJ5LkdldFNlcXVlbmNlTnVtYmVyKCkpOw0KKwkJZW50cnkuU2VuZFZhbHVlKCppb1N0cmVhbSk7DQorCX0NCit9DQorDQordm9pZCBOZXR3b3JrVGFibGVDb25uZWN0aW9uOjpyZWFkKENvbm5lY3Rpb25BZGFwdGVyJiBhZGFwdGVyKSB7DQorCWludCBtZXNzYWdlVHlwZSA9IGlvU3RyZWFtLT5yZWFkQnl0ZSgpOw0KKwlzd2l0Y2ggKG1lc3NhZ2VUeXBlKSB7DQorCWNhc2UgS0VFUF9BTElWRToNCisJCWFkYXB0ZXIua2VlcEFsaXZlKCk7DQorCQlyZXR1cm47DQorCWNhc2UgQ0xJRU5UX0hFTExPOiB7DQorCQl1aW50MTZfdCBwcm90b2NvbFJldmlzaW9uID0gaW9TdHJlYW0tPnJlYWQyQnl0ZXNCRSgpOw0KKwkJYWRhcHRlci5jbGllbnRIZWxsbyhwcm90b2NvbFJldmlzaW9uKTsNCisJCXJldHVybjsNCisJfQ0KKwljYXNlIFNFUlZFUl9IRUxMT19DT01QTEVURTogew0KKwkJYWRhcHRlci5zZXJ2ZXJIZWxsb0NvbXBsZXRlKCk7DQorCQlyZXR1cm47DQorCX0NCisJY2FzZSBQUk9UT0NPTF9WRVJTSU9OX1VOU1VQUE9SVEVEOiB7DQorCQl1aW50MTZfdCBwcm90b2NvbFJldmlzaW9uID0gaW9TdHJlYW0tPnJlYWQyQnl0ZXNCRSgpOw0KKwkJYWRhcHRlci5wcm90b2NvbFZlcnNpb25VbnN1cHBvcnRlZChwcm90b2NvbFJldmlzaW9uKTsNCisJCXJldHVybjsNCisJfQ0KKwljYXNlIEVOVFJZX0FTU0lHTk1FTlQ6IHsNCisJCXN0ZDo6c3RyaW5nKiBlbnRyeU5hbWUgPSBpb1N0cmVhbS0+cmVhZFN0cmluZygpOw0KKwkJVHlwZUlkIHR5cGVJZCA9IGlvU3RyZWFtLT5yZWFkQnl0ZSgpOw0KKwkJTmV0d29ya1RhYmxlRW50cnlUeXBlKiBlbnRyeVR5cGUgPSB0eXBlTWFuYWdlci5HZXRUeXBlKHR5cGVJZCk7DQorCQlpZiAoIWVudHJ5VHlwZSl7DQorCQkJY2hhciBleGNlcHRpb25NZXNzYWdlQnVmZmVyWzUwXTsNCisJCQlzcHJpbnRmIChleGNlcHRpb25NZXNzYWdlQnVmZmVyLCAiVW5rbm93biBkYXRhIHR5cGU6ICUjeCIsIHR5cGVJZCk7DQorCQkJdGhyb3cgQmFkTWVzc2FnZUV4Y2VwdGlvbihleGNlcHRpb25NZXNzYWdlQnVmZmVyKTsNCisJCX0NCisJCUVudHJ5SWQgZW50cnlJZCA9IGlvU3RyZWFtLT5yZWFkMkJ5dGVzQkUoKTsNCisJCVNlcXVlbmNlTnVtYmVyIGVudHJ5U2VxdWVuY2VOdW1iZXIgPSBpb1N0cmVhbS0+cmVhZDJCeXRlc0JFKCk7DQorCQlFbnRyeVZhbHVlIHZhbHVlID0gZW50cnlUeXBlLT5yZWFkVmFsdWUoKmlvU3RyZWFtKTsNCisJCWFkYXB0ZXIub2ZmZXJJbmNvbWluZ0Fzc2lnbm1lbnQobmV3IE5ldHdvcmtUYWJsZUVudHJ5KGVudHJ5SWQsICplbnRyeU5hbWUsIGVudHJ5U2VxdWVuY2VOdW1iZXIsIGVudHJ5VHlwZSwgdmFsdWUpKTsNCisJCWVudHJ5VHlwZS0+ZGVsZXRlVmFsdWUodmFsdWUpOw0KKwkJZGVsZXRlIGVudHJ5TmFtZTsNCisJCXJldHVybjsNCisJfQ0KKwljYXNlIEZJRUxEX1VQREFURTogew0KKwkJRW50cnlJZCBlbnRyeUlkID0gaW9TdHJlYW0tPnJlYWQyQnl0ZXNCRSgpOw0KKwkJU2VxdWVuY2VOdW1iZXIgZW50cnlTZXF1ZW5jZU51bWJlciA9IGlvU3RyZWFtLT5yZWFkMkJ5dGVzQkUoKTsNCisJCU5ldHdvcmtUYWJsZUVudHJ5KiBlbnRyeSA9IGFkYXB0ZXIuR2V0RW50cnkoZW50cnlJZCk7DQorCQlpZiAoIWVudHJ5KXsNCisJCQljaGFyIGV4Y2VwdGlvbk1lc3NhZ2VCdWZmZXJbNTBdOw0KKwkJCXNwcmludGYgKGV4Y2VwdGlvbk1lc3NhZ2VCdWZmZXIsICJSZWNlaXZlZCB1cGRhdGUgZm9yIHVua25vd24gZW50cnkgaWQ6ICVkIiwgZW50cnlJZCk7DQorCQkJdGhyb3cgQmFkTWVzc2FnZUV4Y2VwdGlvbihleGNlcHRpb25NZXNzYWdlQnVmZmVyKTsNCisJCX0NCisJCUVudHJ5VmFsdWUgdmFsdWUgPSBlbnRyeS0+R2V0VHlwZSgpLT5yZWFkVmFsdWUoKmlvU3RyZWFtKTsNCisNCisJCWFkYXB0ZXIub2ZmZXJJbmNvbWluZ1VwZGF0ZShlbnRyeSwgZW50cnlTZXF1ZW5jZU51bWJlciwgdmFsdWUpOw0KKwkJZW50cnktPkdldFR5cGUoKS0+ZGVsZXRlVmFsdWUodmFsdWUpOw0KKwkJcmV0dXJuOw0KKwl9DQorCWRlZmF1bHQ6DQorCQljaGFyIGV4Y2VwdGlvbk1lc3NhZ2VCdWZmZXJbNTBdOw0KKwkJc3ByaW50ZiAoZXhjZXB0aW9uTWVzc2FnZUJ1ZmZlciwgIlVua25vd24gTmV0d29yayBUYWJsZSBNZXNzYWdlIFR5cGU6ICVkIiwgbWVzc2FnZVR5cGUpOw0KKwkJdGhyb3cgQmFkTWVzc2FnZUV4Y2VwdGlvbihleGNlcHRpb25NZXNzYWdlQnVmZmVyKTsNCisJfQ0KK30NCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9uZXR3b3JrdGFibGVzMi9jb25uZWN0aW9uL05ldHdvcmtUYWJsZUNvbm5lY3Rpb24uaCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL25ldHdvcmt0YWJsZXMyL2Nvbm5lY3Rpb24vTmV0d29ya1RhYmxlQ29ubmVjdGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4MjBkMmIKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9uZXR3b3JrdGFibGVzMi9jb25uZWN0aW9uL05ldHdvcmtUYWJsZUNvbm5lY3Rpb24uaApAQCAtMCwwICsxLDU2IEBACisvKioNCisgKiBBbiBhYnN0cmFjdGlvbiBmb3IgdGhlIE5ldHdvcmtUYWJsZSBwcm90b2NvbA0KKyAqIA0KKyAqIEBhdXRob3IgbXdpbGxzDQorICoNCisgKi8NCisNCisNCisjaWZuZGVmIE5FVFdPUktfVEFCTEVfQ09OTkVDVElPTl9IXw0KKyNkZWZpbmUgTkVUV09SS19UQUJMRV9DT05ORUNUSU9OX0hfDQorDQorI2luY2x1ZGUgPHN0ZGlvLmg+DQorI2luY2x1ZGUgPHN0ZGxpYi5oPg0KKyNpbmNsdWRlICJTeW5jaHJvbml6ZWQuaCINCisjaWZuZGVmIF9XUlNfS0VSTkVMDQorI2luY2x1ZGUgPHN0ZGludC5oPg0KKyNlbmRpZg0KKw0KK2NsYXNzIE5ldHdvcmtUYWJsZUNvbm5lY3Rpb247DQordHlwZWRlZiB1aW50MTZfdCBQcm90b2NvbFZlcnNpb247DQorDQorI2luY2x1ZGUgIkRhdGFJT1N0cmVhbS5oIg0KKyNpbmNsdWRlICIuLi9OZXR3b3JrVGFibGVFbnRyeS5oIg0KKyNpbmNsdWRlICIuLi90eXBlL05ldHdvcmtUYWJsZUVudHJ5VHlwZS5oIg0KKyNpbmNsdWRlICIuLi90eXBlL05ldHdvcmtUYWJsZUVudHJ5VHlwZU1hbmFnZXIuaCINCisjaW5jbHVkZSAiQ29ubmVjdGlvbkFkYXB0ZXIuaCINCisjaW5jbHVkZSAiLi4vTmV0d29ya1RhYmxlTWVzc2FnZVR5cGUuaCINCisNCisNCitjbGFzcyBOZXR3b3JrVGFibGVDb25uZWN0aW9uew0KK3B1YmxpYzoNCisJc3RhdGljIGNvbnN0IFByb3RvY29sVmVyc2lvbiBQUk9UT0NPTF9SRVZJU0lPTiA9IDB4MDIwMDsNCisNCisJTmV0d29ya1RhYmxlQ29ubmVjdGlvbihJT1N0cmVhbSogc3RyZWFtLCBOZXR3b3JrVGFibGVFbnRyeVR5cGVNYW5hZ2VyJiB0eXBlTWFuYWdlcik7DQorCX5OZXR3b3JrVGFibGVDb25uZWN0aW9uKCk7DQorCXZvaWQgY2xvc2UoKTsNCisJdm9pZCBmbHVzaCgpOw0KKwl2b2lkIHNlbmRLZWVwQWxpdmUoKTsNCisJdm9pZCBzZW5kQ2xpZW50SGVsbG8oKTsNCisJdm9pZCBzZW5kU2VydmVySGVsbG9Db21wbGV0ZSgpOw0KKwl2b2lkIHNlbmRQcm90b2NvbFZlcnNpb25VbnN1cHBvcnRlZCgpOw0KKwl2b2lkIHNlbmRFbnRyeUFzc2lnbm1lbnQoTmV0d29ya1RhYmxlRW50cnkmIGVudHJ5KTsNCisJdm9pZCBzZW5kRW50cnlVcGRhdGUoTmV0d29ya1RhYmxlRW50cnkmIGVudHJ5KTsNCisJdm9pZCByZWFkKENvbm5lY3Rpb25BZGFwdGVyJiBhZGFwdGVyKTsNCitwcml2YXRlOg0KKwlSZWVudHJhbnRTZW1hcGhvcmUgV1JJVEVfTE9DSzsNCisJRGF0YUlPU3RyZWFtKiBjb25zdCBpb1N0cmVhbTsNCisJTmV0d29ya1RhYmxlRW50cnlUeXBlTWFuYWdlciYgdHlwZU1hbmFnZXI7DQorCWJvb2wgaXNWYWxpZDsNCisNCisJdm9pZCBzZW5kTWVzc2FnZUhlYWRlcihOZXR3b3JrVGFibGVNZXNzYWdlVHlwZSBtZXNzYWdlVHlwZSk7DQorfTsNCisNCisNCisNCisjZW5kaWYNCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9uZXR3b3JrdGFibGVzMi9zZXJ2ZXIvTmV0d29ya1RhYmxlU2VydmVyLmNwcCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL25ldHdvcmt0YWJsZXMyL3NlcnZlci9OZXR3b3JrVGFibGVTZXJ2ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2NmNkNmYKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9uZXR3b3JrdGFibGVzMi9zZXJ2ZXIvTmV0d29ya1RhYmxlU2VydmVyLmNwcApAQCAtMCwwICsxLDU4IEBACisvKg0KKyAqIE5ldHdvcmtUYWJsZVNlcnZlci5jcHANCisgKg0KKyAqICBDcmVhdGVkIG9uOiBTZXAgMjcsIDIwMTINCisgKiAgICAgIEF1dGhvcjogTWl0Y2hlbGwgV2lsbHMNCisgKi8NCisNCisjaW5jbHVkZSAibmV0d29ya3RhYmxlczIvc2VydmVyL05ldHdvcmtUYWJsZVNlcnZlci5oIg0KKyNpbmNsdWRlICJuZXR3b3JrdGFibGVzMi9zZXJ2ZXIvU2VydmVyTmV0d29ya1RhYmxlRW50cnlTdG9yZS5oIg0KKyNpbmNsdWRlIDxpb3N0cmVhbT4NCisjaW5jbHVkZSA8bGltaXRzLmg+DQorDQorTmV0d29ya1RhYmxlU2VydmVyOjpOZXR3b3JrVGFibGVTZXJ2ZXIoSU9TdHJlYW1Qcm92aWRlciYgX3N0cmVhbVByb3ZpZGVyLCBOZXR3b3JrVGFibGVFbnRyeVR5cGVNYW5hZ2VyJiB0eXBlTWFuYWdlciwgTlRUaHJlYWRNYW5hZ2VyJiB0aHJlYWRNYW5hZ2VyKToNCisJCU5ldHdvcmtUYWJsZU5vZGUoKm5ldyBTZXJ2ZXJOZXR3b3JrVGFibGVFbnRyeVN0b3JlKCp0aGlzKSksDQorCQlzdHJlYW1Qcm92aWRlcihfc3RyZWFtUHJvdmlkZXIpLA0KKwkJY29ubmVjdGlvbkxpc3QoKSwNCisJCXdyaXRlTWFuYWdlcihjb25uZWN0aW9uTGlzdCwgdGhyZWFkTWFuYWdlciwgR2V0RW50cnlTdG9yZSgpLCBVTE9OR19NQVgpLA0KKwkJaW5jb21pbmdTdHJlYW1Nb25pdG9yKHN0cmVhbVByb3ZpZGVyLCAoU2VydmVyTmV0d29ya1RhYmxlRW50cnlTdG9yZSYpZW50cnlTdG9yZSwgKnRoaXMsIGNvbm5lY3Rpb25MaXN0LCB0eXBlTWFuYWdlciwgdGhyZWFkTWFuYWdlciksDQorICAgICAgICAgICAgICAgIGNvbnRpbnVpbmdSZWNlaXZlcih3cml0ZU1hbmFnZXIpew0KKwkNCisJR2V0RW50cnlTdG9yZSgpLlNldEluY29taW5nUmVjZWl2ZXIoJmNvbnRpbnVpbmdSZWNlaXZlcik7DQorCUdldEVudHJ5U3RvcmUoKS5TZXRPdXRnb2luZ1JlY2VpdmVyKCZjb250aW51aW5nUmVjZWl2ZXIpOw0KKwkNCisJaW5jb21pbmdTdHJlYW1Nb25pdG9yLnN0YXJ0KCk7DQorCXdyaXRlTWFuYWdlci5zdGFydCgpOw0KK30NCisvKk5ldHdvcmtUYWJsZVNlcnZlcjo6TmV0d29ya1RhYmxlU2VydmVyKElPU3RyZWFtUHJvdmlkZXImIHN0cmVhbVByb3ZpZGVyKXsNCisJdGhpcyhzdHJlYW1Qcm92aWRlciwgbmV3IE5ldHdvcmtUYWJsZUVudHJ5VHlwZU1hbmFnZXIoKSwgbmV3IERlZmF1bHRUaHJlYWRNYW5hZ2VyKCkpOw0KK30qLw0KK05ldHdvcmtUYWJsZVNlcnZlcjo6fk5ldHdvcmtUYWJsZVNlcnZlcigpew0KKwlDbG9zZSgpOw0KKwlkZWxldGUgJmVudHJ5U3RvcmU7DQorfQ0KKw0KK3ZvaWQgTmV0d29ya1RhYmxlU2VydmVyOjpDbG9zZSgpew0KKwl0cnl7DQorCQlpbmNvbWluZ1N0cmVhbU1vbml0b3Iuc3RvcCgpOw0KKwkJd3JpdGVNYW5hZ2VyLnN0b3AoKTsNCisJCWNvbm5lY3Rpb25MaXN0LmNsb3NlQWxsKCk7DQorCQlzdHJlYW1Qcm92aWRlci5jbG9zZSgpOw0KKwl9IGNhdGNoIChjb25zdCBzdGQ6OmV4Y2VwdGlvbiYgZXgpIHsNCisJICAgIC8vVE9ETyBwcmludCBzdGFjayB0cmFjZT8NCisJfQ0KK30NCisNCit2b2lkIE5ldHdvcmtUYWJsZVNlcnZlcjo6T25OZXdDb25uZWN0aW9uKFNlcnZlckNvbm5lY3Rpb25BZGFwdGVyJiBjb25uZWN0aW9uQWRhcHRlcikgew0KKwljb25uZWN0aW9uTGlzdC5hZGQoY29ubmVjdGlvbkFkYXB0ZXIpOw0KK30NCisNCisNCitib29sIE5ldHdvcmtUYWJsZVNlcnZlcjo6SXNDb25uZWN0ZWQoKSB7DQorCXJldHVybiB0cnVlOw0KK30NCisNCisNCitib29sIE5ldHdvcmtUYWJsZVNlcnZlcjo6SXNTZXJ2ZXIoKSB7DQorCXJldHVybiB0cnVlOw0KK30NCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9uZXR3b3JrdGFibGVzMi9zZXJ2ZXIvTmV0d29ya1RhYmxlU2VydmVyLmggYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9uZXR3b3JrdGFibGVzMi9zZXJ2ZXIvTmV0d29ya1RhYmxlU2VydmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWU5NDU2NQotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL25ldHdvcmt0YWJsZXMyL3NlcnZlci9OZXR3b3JrVGFibGVTZXJ2ZXIuaApAQCAtMCwwICsxLDY3IEBACisvKg0KKyAqIE5ldHdvcmtUYWJsZVNlcnZlci5oDQorICoNCisgKiAgQ3JlYXRlZCBvbjogU2VwIDI3LCAyMDEyDQorICogICAgICBBdXRob3I6IE1pdGNoZWxsIFdpbGxzDQorICovDQorDQorI2lmbmRlZiBORVRXT1JLVEFCTEVTRVJWRVJfSF8NCisjZGVmaW5lIE5FVFdPUktUQUJMRVNFUlZFUl9IXw0KKw0KKw0KK2NsYXNzIE5ldHdvcmtUYWJsZVNlcnZlcjsNCisNCisjaW5jbHVkZSAibmV0d29ya3RhYmxlczIvVHJhbnNhY3Rpb25EaXJ0aWVyLmgiDQorI2luY2x1ZGUgIm5ldHdvcmt0YWJsZXMyL05ldHdvcmtUYWJsZU5vZGUuaCINCisjaW5jbHVkZSAiU2VydmVySW5jb21pbmdTdHJlYW1Nb25pdG9yLmgiDQorI2luY2x1ZGUgIlNlcnZlckluY29taW5nQ29ubmVjdGlvbkxpc3RlbmVyLmgiDQorI2luY2x1ZGUgIm5ldHdvcmt0YWJsZXMyL1dyaXRlTWFuYWdlci5oIg0KKyNpbmNsdWRlICJuZXR3b3JrdGFibGVzMi9zdHJlYW0vSU9TdHJlYW1Qcm92aWRlci5oIg0KKyNpbmNsdWRlICJTZXJ2ZXJDb25uZWN0aW9uTGlzdC5oIg0KKw0KKy8qKg0KKyAqIEEgc2VydmVyIG5vZGUgaW4gTmV0d29ya1RhYmxlcyAyLjANCisgKiANCisgKiBAYXV0aG9yIE1pdGNoZWxsDQorICoNCisgKi8NCitjbGFzcyBOZXR3b3JrVGFibGVTZXJ2ZXIgOiBwdWJsaWMgTmV0d29ya1RhYmxlTm9kZSwgcHVibGljIFNlcnZlckluY29taW5nQ29ubmVjdGlvbkxpc3RlbmVyew0KK3ByaXZhdGU6DQorCUlPU3RyZWFtUHJvdmlkZXImIHN0cmVhbVByb3ZpZGVyOw0KKwlTZXJ2ZXJDb25uZWN0aW9uTGlzdCBjb25uZWN0aW9uTGlzdDsNCisJV3JpdGVNYW5hZ2VyIHdyaXRlTWFuYWdlcjsNCisJU2VydmVySW5jb21pbmdTdHJlYW1Nb25pdG9yIGluY29taW5nU3RyZWFtTW9uaXRvcjsNCisJVHJhbnNhY3Rpb25EaXJ0aWVyIGNvbnRpbnVpbmdSZWNlaXZlcjsNCisNCisgIHB1YmxpYzoNCisJLyoqDQorCSAqIENyZWF0ZSBhIE5ldHdvcmtUYWJsZSBTZXJ2ZXINCisJICogDQorCSAqIEBwYXJhbSBzdHJlYW1Qcm92aWRlcg0KKwkgKiBAcGFyYW0gdGhyZWFkTWFuYWdlcg0KKwkgKiBAcGFyYW0gdHJhbnNhY3Rpb25Qb29sDQorCSAqLw0KKwlOZXR3b3JrVGFibGVTZXJ2ZXIoSU9TdHJlYW1Qcm92aWRlciYgc3RyZWFtUHJvdmlkZXIsIE5ldHdvcmtUYWJsZUVudHJ5VHlwZU1hbmFnZXImIHR5cGVNYW5hZ2VyLCBOVFRocmVhZE1hbmFnZXImIHRocmVhZE1hbmFnZXIpOw0KKwl+TmV0d29ya1RhYmxlU2VydmVyKCk7DQorCS8qKg0KKwkgKiBDcmVhdGUgYSBOZXR3b3JrVGFibGUgU2VydmVyDQorCSAqIA0KKwkgKiBAcGFyYW0gc3RyZWFtUHJvdmlkZXINCisJICovDQorCU5ldHdvcmtUYWJsZVNlcnZlcihJT1N0cmVhbVByb3ZpZGVyJiBzdHJlYW1Qcm92aWRlcik7DQorCQ0KKwl2b2lkIENsb3NlKCk7DQorDQorCXZvaWQgT25OZXdDb25uZWN0aW9uKFNlcnZlckNvbm5lY3Rpb25BZGFwdGVyJiBjb25uZWN0aW9uQWRhcHRlcik7DQorDQorCQ0KKwlib29sIElzQ29ubmVjdGVkKCk7DQorDQorCQ0KKwlib29sIElzU2VydmVyKCk7DQorDQorfTsNCisNCisNCisNCisjZW5kaWYgLyogTkVUV09SS1RBQkxFU0VSVkVSX0hfICovDQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvbmV0d29ya3RhYmxlczIvc2VydmVyL1NlcnZlckFkYXB0ZXJNYW5hZ2VyLmggYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9uZXR3b3JrdGFibGVzMi9zZXJ2ZXIvU2VydmVyQWRhcHRlck1hbmFnZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wN2JkYzNiCi0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvbmV0d29ya3RhYmxlczIvc2VydmVyL1NlcnZlckFkYXB0ZXJNYW5hZ2VyLmgKQEAgLTAsMCArMSwzNCBAQAorLyoNCisgKiBTZXJ2ZXJBZGFwdGVyTWFuYWdlci5oDQorICoNCisgKiAgQ3JlYXRlZCBvbjogU2VwIDI2LCAyMDEyDQorICogICAgICBBdXRob3I6IE1pdGNoZWxsIFdpbGxzDQorICovDQorDQorI2lmbmRlZiBTRVJWRVJBREFQVEVSTUFOQUdFUl9IXw0KKyNkZWZpbmUgU0VSVkVSQURBUFRFUk1BTkFHRVJfSF8NCisNCitjbGFzcyBTZXJ2ZXJBZGFwdGVyTWFuYWdlcjsNCisNCisjaW5jbHVkZSAiU2VydmVyQ29ubmVjdGlvbkFkYXB0ZXIuaCINCisNCisvKioNCisgKiBBIGNsYXNzIHRoYXQgbWFuYWdlcyBjb25uZWN0aW9ucyB0byBhIHNlcnZlcg0KKyAqIA0KKyAqIEBhdXRob3IgTWl0Y2hlbGwNCisgKg0KKyAqLw0KK2NsYXNzIFNlcnZlckFkYXB0ZXJNYW5hZ2VyDQorew0KK3B1YmxpYzoNCisJdmlydHVhbCB+U2VydmVyQWRhcHRlck1hbmFnZXIoKQ0KKwl7DQorCX0NCisJLyoqDQorCSAqIENhbGxlZCB3aGVuIGEgY29ubmVjdGlvbiBhZGFwdGVyIGhhcyBiZWVuIGNsb3NlZA0KKwkgKiBAcGFyYW0gY29ubmVjdGlvbkFkYXB0ZXIgdGhlIGFkYXB0ZXIgdGhhdCB3YXMgY2xvc2VkDQorCSAqLw0KKwl2aXJ0dWFsIHZvaWQgY2xvc2UoU2VydmVyQ29ubmVjdGlvbkFkYXB0ZXImIGNvbm5lY3Rpb25BZGFwdGVyLCBib29sIGNsb3NlU3RyZWFtKSA9IDA7DQorfTsNCisNCisjZW5kaWYgLyogU0VSVkVSQURBUFRFUk1BTkFHRVJfSF8gKi8NCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9uZXR3b3JrdGFibGVzMi9zZXJ2ZXIvU2VydmVyQ29ubmVjdGlvbkFkYXB0ZXIuY3BwIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvbmV0d29ya3RhYmxlczIvc2VydmVyL1NlcnZlckNvbm5lY3Rpb25BZGFwdGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDFmYzkxCi0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvbmV0d29ya3RhYmxlczIvc2VydmVyL1NlcnZlckNvbm5lY3Rpb25BZGFwdGVyLmNwcApAQCAtMCwwICsxLDEzMyBAQAorLyoNCisgKiBTZXJ2ZXJDb25uZWN0aW9uQWRhcHRlci5jcHANCisgKg0KKyAqICBDcmVhdGVkIG9uOiBTZXAgMjYsIDIwMTINCisgKiAgICAgIEF1dGhvcjogTWl0Y2hlbGwgV2lsbHMNCisgKi8NCisNCisjaW5jbHVkZSAibmV0d29ya3RhYmxlczIvc2VydmVyL1NlcnZlckNvbm5lY3Rpb25BZGFwdGVyLmgiDQorI2luY2x1ZGUgPHN0ZGlvLmg+DQorDQorDQordm9pZCBTZXJ2ZXJDb25uZWN0aW9uQWRhcHRlcjo6Z290b1N0YXRlKFNlcnZlckNvbm5lY3Rpb25TdGF0ZSogbmV3U3RhdGUpew0KKwlpZihjb25uZWN0aW9uU3RhdGUhPW5ld1N0YXRlKXsNCisJICBmcHJpbnRmKHN0ZG91dCwgIiVwIGVudGVyZWQgY29ubmVjdGlvbiBzdGF0ZTogJXNcbiIsdGhpcywgbmV3U3RhdGUtPnRvU3RyaW5nKCkpOw0KKwkgIGZmbHVzaChzdGRvdXQpOw0KKwkJY29ubmVjdGlvblN0YXRlID0gbmV3U3RhdGU7DQorCX0NCit9DQorDQorU2VydmVyQ29ubmVjdGlvbkFkYXB0ZXI6OlNlcnZlckNvbm5lY3Rpb25BZGFwdGVyKElPU3RyZWFtKiBzdHJlYW0sIFNlcnZlck5ldHdvcmtUYWJsZUVudHJ5U3RvcmUmIF9lbnRyeVN0b3JlLCBJbmNvbWluZ0VudHJ5UmVjZWl2ZXImIF90cmFuc2FjdGlvblJlY2VpdmVyLCBTZXJ2ZXJBZGFwdGVyTWFuYWdlciYgX2FkYXB0ZXJMaXN0ZW5lciwgTmV0d29ya1RhYmxlRW50cnlUeXBlTWFuYWdlciYgdHlwZU1hbmFnZXIsIE5UVGhyZWFkTWFuYWdlciYgdGhyZWFkTWFuYWdlcikgOg0KKwllbnRyeVN0b3JlKF9lbnRyeVN0b3JlKSwgdHJhbnNhY3Rpb25SZWNlaXZlcihfdHJhbnNhY3Rpb25SZWNlaXZlciksIGFkYXB0ZXJMaXN0ZW5lcihfYWRhcHRlckxpc3RlbmVyKSwNCisJY29ubmVjdGlvbihzdHJlYW0sIHR5cGVNYW5hZ2VyKSwgbW9uaXRvclRocmVhZCgqdGhpcywgY29ubmVjdGlvbil7DQorICAgICAgICBjb25uZWN0aW9uU3RhdGUgPSAmU2VydmVyQ29ubmVjdGlvblN0YXRlOjpDTElFTlRfRElTQ09OTkVDVEVEOw0KKwlnb3RvU3RhdGUoJlNlcnZlckNvbm5lY3Rpb25TdGF0ZTo6R09UX0NPTk5FQ1RJT05fRlJPTV9DTElFTlQpOw0KKwlyZWFkVGhyZWFkID0gdGhyZWFkTWFuYWdlci5uZXdCbG9ja2luZ1BlcmlvZGljVGhyZWFkKCZtb25pdG9yVGhyZWFkLCAiU2VydmVyIENvbm5lY3Rpb24gUmVhZGVyIFRocmVhZCIpOw0KK30NCisNCitTZXJ2ZXJDb25uZWN0aW9uQWRhcHRlcjo6flNlcnZlckNvbm5lY3Rpb25BZGFwdGVyKCl7DQorICBkZWxldGUgcmVhZFRocmVhZDsNCit9DQorDQorDQordm9pZCBTZXJ2ZXJDb25uZWN0aW9uQWRhcHRlcjo6YmFkTWVzc2FnZShCYWRNZXNzYWdlRXhjZXB0aW9uJiBlKSB7DQorICBmcHJpbnRmKHN0ZG91dCwgIkJhZCBtZXNzYWdlOiAlc1xuIiwgZS53aGF0KCkpOw0KKyAgZmZsdXNoKHN0ZG91dCk7DQorCWdvdG9TdGF0ZShuZXcgU2VydmVyQ29ubmVjdGlvblN0YXRlX0Vycm9yKGUpKTsNCisJYWRhcHRlckxpc3RlbmVyLmNsb3NlKCp0aGlzLCB0cnVlKTsNCit9DQorDQordm9pZCBTZXJ2ZXJDb25uZWN0aW9uQWRhcHRlcjo6aW9FeGNlcHRpb24oSU9FeGNlcHRpb24mIGUpIHsNCisgIGZwcmludGYoc3Rkb3V0LCAiSU9FeGNlcHRpb24gbWVzc2FnZTogJXNcbiIsIGUud2hhdCgpKTsNCisgIGZmbHVzaChzdGRvdXQpOw0KKwlpZihlLmlzRU9GKCkpDQorCQlnb3RvU3RhdGUoJlNlcnZlckNvbm5lY3Rpb25TdGF0ZTo6Q0xJRU5UX0RJU0NPTk5FQ1RFRCk7DQorCWVsc2UNCisJCWdvdG9TdGF0ZShuZXcgU2VydmVyQ29ubmVjdGlvblN0YXRlX0Vycm9yKGUpKTsNCisJYWRhcHRlckxpc3RlbmVyLmNsb3NlKCp0aGlzLCBmYWxzZSk7DQorfQ0KKw0KKw0KK3ZvaWQgU2VydmVyQ29ubmVjdGlvbkFkYXB0ZXI6OnNodXRkb3duKGJvb2wgY2xvc2VTdHJlYW0pIHsNCisJcmVhZFRocmVhZC0+c3RvcCgpOw0KKwlpZihjbG9zZVN0cmVhbSkNCisJCWNvbm5lY3Rpb24uY2xvc2UoKTsNCit9DQorDQordm9pZCBTZXJ2ZXJDb25uZWN0aW9uQWRhcHRlcjo6a2VlcEFsaXZlKCkgew0KKwkvL2p1c3QgbGV0IGl0IGhhcHBlbg0KK30NCisNCit2b2lkIFNlcnZlckNvbm5lY3Rpb25BZGFwdGVyOjpjbGllbnRIZWxsbyhQcm90b2NvbFZlcnNpb24gcHJvdG9jb2xSZXZpc2lvbikgew0KKwlpZihjb25uZWN0aW9uU3RhdGUhPSZTZXJ2ZXJDb25uZWN0aW9uU3RhdGU6OkdPVF9DT05ORUNUSU9OX0ZST01fQ0xJRU5UKQ0KKwkJdGhyb3cgQmFkTWVzc2FnZUV4Y2VwdGlvbigiQSBzZXJ2ZXIgc2hvdWxkIG5vdCByZWNlaXZlIGEgY2xpZW50IGhlbGxvIGFmdGVyIGl0IGhhcyBhbHJlYWR5IGNvbm5lY3RlZC9lbnRlcmVkIGFuIGVycm9yIHN0YXRlIik7DQorICAgIGlmKHByb3RvY29sUmV2aXNpb24hPU5ldHdvcmtUYWJsZUNvbm5lY3Rpb246OlBST1RPQ09MX1JFVklTSU9OKXsNCisgICAgICAgIGNvbm5lY3Rpb24uc2VuZFByb3RvY29sVmVyc2lvblVuc3VwcG9ydGVkKCk7DQorICAgICAgICB0aHJvdyBCYWRNZXNzYWdlRXhjZXB0aW9uKCJDbGllbnQgQ29ubmVjdGVkIHdpdGggYmFkIHByb3RvY29sIHJldmlzaW9uIik7DQorICAgIH0NCisgICAgZWxzZXsNCisJCWVudHJ5U3RvcmUuc2VuZFNlcnZlckhlbGxvKGNvbm5lY3Rpb24pOw0KKwkJZ290b1N0YXRlKCZTZXJ2ZXJDb25uZWN0aW9uU3RhdGU6OkNPTk5FQ1RFRF9UT19DTElFTlQpOw0KKyAgICB9DQorfQ0KKw0KK3ZvaWQgU2VydmVyQ29ubmVjdGlvbkFkYXB0ZXI6OnByb3RvY29sVmVyc2lvblVuc3VwcG9ydGVkKFByb3RvY29sVmVyc2lvbiBwcm90b2NvbFJldmlzaW9uKSB7DQorCXRocm93IEJhZE1lc3NhZ2VFeGNlcHRpb24oIkEgc2VydmVyIHNob3VsZCBub3QgcmVjZWl2ZSBhIHByb3RvY29sIHZlcnNpb24gdW5zdXBwb3J0ZWQgbWVzc2FnZSIpOw0KK30NCisNCit2b2lkIFNlcnZlckNvbm5lY3Rpb25BZGFwdGVyOjpzZXJ2ZXJIZWxsb0NvbXBsZXRlKCkgew0KKwl0aHJvdyBCYWRNZXNzYWdlRXhjZXB0aW9uKCJBIHNlcnZlciBzaG91bGQgbm90IHJlY2VpdmUgYSBzZXJ2ZXIgaGVsbG8gY29tcGxldGUgbWVzc2FnZSIpOw0KK30NCisNCit2b2lkIFNlcnZlckNvbm5lY3Rpb25BZGFwdGVyOjpvZmZlckluY29taW5nQXNzaWdubWVudChOZXR3b3JrVGFibGVFbnRyeSogZW50cnkpIHsNCisJdHJhbnNhY3Rpb25SZWNlaXZlci5vZmZlckluY29taW5nQXNzaWdubWVudChlbnRyeSk7DQorfQ0KKw0KK3ZvaWQgU2VydmVyQ29ubmVjdGlvbkFkYXB0ZXI6Om9mZmVySW5jb21pbmdVcGRhdGUoTmV0d29ya1RhYmxlRW50cnkqIGVudHJ5LCBTZXF1ZW5jZU51bWJlciBzZXF1ZW5jZU51bWJlciwgRW50cnlWYWx1ZSB2YWx1ZSkgew0KKwl0cmFuc2FjdGlvblJlY2VpdmVyLm9mZmVySW5jb21pbmdVcGRhdGUoZW50cnksIHNlcXVlbmNlTnVtYmVyLCB2YWx1ZSk7DQorfQ0KKw0KK05ldHdvcmtUYWJsZUVudHJ5KiBTZXJ2ZXJDb25uZWN0aW9uQWRhcHRlcjo6R2V0RW50cnkoRW50cnlJZCBpZCkgew0KKwlyZXR1cm4gZW50cnlTdG9yZS5HZXRFbnRyeShpZCk7DQorfQ0KKw0KK3ZvaWQgU2VydmVyQ29ubmVjdGlvbkFkYXB0ZXI6Om9mZmVyT3V0Z29pbmdBc3NpZ25tZW50KE5ldHdvcmtUYWJsZUVudHJ5KiBlbnRyeSkgew0KKwl0cnkgew0KKwkJaWYoY29ubmVjdGlvblN0YXRlPT0mU2VydmVyQ29ubmVjdGlvblN0YXRlOjpDT05ORUNURURfVE9fQ0xJRU5UKQ0KKwkJCWNvbm5lY3Rpb24uc2VuZEVudHJ5QXNzaWdubWVudCgqZW50cnkpOw0KKwl9IGNhdGNoIChJT0V4Y2VwdGlvbiYgZSkgew0KKwkJaW9FeGNlcHRpb24oZSk7DQorCX0NCit9DQordm9pZCBTZXJ2ZXJDb25uZWN0aW9uQWRhcHRlcjo6b2ZmZXJPdXRnb2luZ1VwZGF0ZShOZXR3b3JrVGFibGVFbnRyeSogZW50cnkpIHsNCisJdHJ5IHsNCisJCWlmKGNvbm5lY3Rpb25TdGF0ZT09JlNlcnZlckNvbm5lY3Rpb25TdGF0ZTo6Q09OTkVDVEVEX1RPX0NMSUVOVCkNCisJCQljb25uZWN0aW9uLnNlbmRFbnRyeVVwZGF0ZSgqZW50cnkpOw0KKwl9IGNhdGNoIChJT0V4Y2VwdGlvbiYgZSkgew0KKwkJaW9FeGNlcHRpb24oZSk7DQorCX0NCit9DQorDQorDQordm9pZCBTZXJ2ZXJDb25uZWN0aW9uQWRhcHRlcjo6Zmx1c2goKSB7DQorCXRyeSB7DQorCQljb25uZWN0aW9uLmZsdXNoKCk7DQorCX0gY2F0Y2ggKElPRXhjZXB0aW9uJiBlKSB7DQorCQlpb0V4Y2VwdGlvbihlKTsNCisJfQ0KK30NCisNCisvKioNCisgKiBAcmV0dXJuIHRoZSBzdGF0ZSBvZiB0aGUgY29ubmVjdGlvbg0KKyAqLw0KK1NlcnZlckNvbm5lY3Rpb25TdGF0ZSogU2VydmVyQ29ubmVjdGlvbkFkYXB0ZXI6OmdldENvbm5lY3Rpb25TdGF0ZSgpIHsNCisJcmV0dXJuIGNvbm5lY3Rpb25TdGF0ZTsNCit9DQorDQordm9pZCBTZXJ2ZXJDb25uZWN0aW9uQWRhcHRlcjo6ZW5zdXJlQWxpdmUoKSB7DQorCXRyeSB7DQorCQljb25uZWN0aW9uLnNlbmRLZWVwQWxpdmUoKTsNCisJfSBjYXRjaCAoSU9FeGNlcHRpb24mIGUpIHsNCisJCWlvRXhjZXB0aW9uKGUpOw0KKwl9DQorfQ0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL25ldHdvcmt0YWJsZXMyL3NlcnZlci9TZXJ2ZXJDb25uZWN0aW9uQWRhcHRlci5oIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvbmV0d29ya3RhYmxlczIvc2VydmVyL1NlcnZlckNvbm5lY3Rpb25BZGFwdGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmI3MTZmNwotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL25ldHdvcmt0YWJsZXMyL3NlcnZlci9TZXJ2ZXJDb25uZWN0aW9uQWRhcHRlci5oCkBAIC0wLDAgKzEsMTA3IEBACisvKg0KKyAqIFNlcnZlckNvbm5lY3Rpb25BZGFwdGVyLmgNCisgKg0KKyAqICBDcmVhdGVkIG9uOiBTZXAgMjYsIDIwMTINCisgKiAgICAgIEF1dGhvcjogTWl0Y2hlbGwgV2lsbHMNCisgKi8NCisNCisjaWZuZGVmIFNFUlZFUkNPTk5FQ1RJT05BREFQVEVSX0hfDQorI2RlZmluZSBTRVJWRVJDT05ORUNUSU9OQURBUFRFUl9IXw0KKw0KK2NsYXNzIFNlcnZlckNvbm5lY3Rpb25BZGFwdGVyOw0KKw0KKyNpbmNsdWRlICJuZXR3b3JrdGFibGVzMi9jb25uZWN0aW9uL0Nvbm5lY3Rpb25Nb25pdG9yVGhyZWFkLmgiDQorI2luY2x1ZGUgIm5ldHdvcmt0YWJsZXMyL05ldHdvcmtUYWJsZUVudHJ5LmgiDQorI2luY2x1ZGUgIm5ldHdvcmt0YWJsZXMyL2Nvbm5lY3Rpb24vQ29ubmVjdGlvbkFkYXB0ZXIuaCINCisjaW5jbHVkZSAibmV0d29ya3RhYmxlczIvc3RyZWFtL0lPU3RyZWFtLmgiDQorI2luY2x1ZGUgIm5ldHdvcmt0YWJsZXMyL0luY29taW5nRW50cnlSZWNlaXZlci5oIg0KKyNpbmNsdWRlICJuZXR3b3JrdGFibGVzMi9GbHVzaGFibGVPdXRnb2luZ0VudHJ5UmVjZWl2ZXIuaCINCisjaW5jbHVkZSAibmV0d29ya3RhYmxlczIvc2VydmVyL1NlcnZlck5ldHdvcmtUYWJsZUVudHJ5U3RvcmUuaCINCisjaW5jbHVkZSAibmV0d29ya3RhYmxlczIvc2VydmVyL1NlcnZlckFkYXB0ZXJNYW5hZ2VyLmgiDQorI2luY2x1ZGUgIm5ldHdvcmt0YWJsZXMyL3NlcnZlci9TZXJ2ZXJDb25uZWN0aW9uU3RhdGUuaCINCisjaW5jbHVkZSAibmV0d29ya3RhYmxlczIvdGhyZWFkL05UVGhyZWFkLmgiDQorI2luY2x1ZGUgIm5ldHdvcmt0YWJsZXMyL3RocmVhZC9OVFRocmVhZE1hbmFnZXIuaCINCisNCisNCisNCisvKioNCisgKiBPYmplY3QgdGhhdCBhZGFwdHMgbWVzc2FnZXMgZnJvbSBhIGNsaWVudCB0byB0aGUgc2VydmVyDQorICogDQorICogQGF1dGhvciBNaXRjaGVsbA0KKyAqDQorICovDQorY2xhc3MgU2VydmVyQ29ubmVjdGlvbkFkYXB0ZXIgOiBDb25uZWN0aW9uQWRhcHRlciwgSW5jb21pbmdFbnRyeVJlY2VpdmVyLCBGbHVzaGFibGVPdXRnb2luZ0VudHJ5UmVjZWl2ZXJ7DQorcHJpdmF0ZToNCisJU2VydmVyTmV0d29ya1RhYmxlRW50cnlTdG9yZSYgZW50cnlTdG9yZTsNCisJSW5jb21pbmdFbnRyeVJlY2VpdmVyJiB0cmFuc2FjdGlvblJlY2VpdmVyOw0KKwlTZXJ2ZXJBZGFwdGVyTWFuYWdlciYgYWRhcHRlckxpc3RlbmVyOw0KK3B1YmxpYzoNCisJLyoqDQorCSAqIHRoZSBjb25uZWN0aW9uIHRoaXMgYWRhcHRlciB1c2VzDQorCSAqLw0KKwlOZXR3b3JrVGFibGVDb25uZWN0aW9uIGNvbm5lY3Rpb247DQorcHJpdmF0ZToNCisJTlRUaHJlYWQqIHJlYWRUaHJlYWQ7DQorCUNvbm5lY3Rpb25Nb25pdG9yVGhyZWFkIG1vbml0b3JUaHJlYWQ7DQorcHJpdmF0ZToNCisNCisJU2VydmVyQ29ubmVjdGlvblN0YXRlKiBjb25uZWN0aW9uU3RhdGU7DQorDQorCXZvaWQgZ290b1N0YXRlKFNlcnZlckNvbm5lY3Rpb25TdGF0ZSogbmV3U3RhdGUpOw0KKw0KK3B1YmxpYzoNCisJLyoqDQorCSAqIENyZWF0ZSBhIHNlcnZlciBjb25uZWN0aW9uIGFkYXB0ZXIgZm9yIGEgZ2l2ZW4gc3RyZWFtDQorCSAqIA0KKwkgKiBAcGFyYW0gc3RyZWFtDQorCSAqIEBwYXJhbSB0cmFuc2FjdGlvblBvb2wNCisJICogQHBhcmFtIGVudHJ5U3RvcmUNCisJICogQHBhcmFtIHRyYW5zYWN0aW9uUmVjZWl2ZXINCisJICogQHBhcmFtIGFkYXB0ZXJMaXN0ZW5lcg0KKwkgKiBAcGFyYW0gdGhyZWFkTWFuYWdlcg0KKwkgKi8NCisJU2VydmVyQ29ubmVjdGlvbkFkYXB0ZXIoSU9TdHJlYW0qIHN0cmVhbSwgU2VydmVyTmV0d29ya1RhYmxlRW50cnlTdG9yZSYgZW50cnlTdG9yZSwgSW5jb21pbmdFbnRyeVJlY2VpdmVyJiB0cmFuc2FjdGlvblJlY2VpdmVyLCBTZXJ2ZXJBZGFwdGVyTWFuYWdlciYgYWRhcHRlckxpc3RlbmVyLCBOZXR3b3JrVGFibGVFbnRyeVR5cGVNYW5hZ2VyJiB0eXBlTWFuYWdlciwgTlRUaHJlYWRNYW5hZ2VyJiB0aHJlYWRNYW5hZ2VyKTsNCisJdmlydHVhbCB+U2VydmVyQ29ubmVjdGlvbkFkYXB0ZXIoKTsNCisNCisJdm9pZCBiYWRNZXNzYWdlKEJhZE1lc3NhZ2VFeGNlcHRpb24mIGUpOw0KKwkNCisJdm9pZCBpb0V4Y2VwdGlvbihJT0V4Y2VwdGlvbiYgZSk7DQorCQ0KKwkNCisJLyoqDQorCSAqIHN0b3AgdGhlIHJlYWQgdGhyZWFkIGFuZCBjbG9zZSB0aGUgc3RyZWFtDQorCSAqLw0KKwl2b2lkIHNodXRkb3duKGJvb2wgY2xvc2VTdHJlYW0pOw0KKw0KKwl2b2lkIGtlZXBBbGl2ZSgpOw0KKw0KKwl2b2lkIGNsaWVudEhlbGxvKFByb3RvY29sVmVyc2lvbiBwcm90b2NvbFJldmlzaW9uKTsNCisNCisJdm9pZCBwcm90b2NvbFZlcnNpb25VbnN1cHBvcnRlZChQcm90b2NvbFZlcnNpb24gcHJvdG9jb2xSZXZpc2lvbik7DQorDQorCXZvaWQgc2VydmVySGVsbG9Db21wbGV0ZSgpOw0KKw0KKwl2b2lkIG9mZmVySW5jb21pbmdBc3NpZ25tZW50KE5ldHdvcmtUYWJsZUVudHJ5KiBlbnRyeSk7DQorDQorCXZvaWQgb2ZmZXJJbmNvbWluZ1VwZGF0ZShOZXR3b3JrVGFibGVFbnRyeSogZW50cnksIFNlcXVlbmNlTnVtYmVyIHNlcXVlbmNlTnVtYmVyLCBFbnRyeVZhbHVlIHZhbHVlKTsNCisNCisJTmV0d29ya1RhYmxlRW50cnkqIEdldEVudHJ5KEVudHJ5SWQgaWQpOw0KKw0KKwl2b2lkIG9mZmVyT3V0Z29pbmdBc3NpZ25tZW50KE5ldHdvcmtUYWJsZUVudHJ5KiBlbnRyeSk7DQorCQ0KKwl2b2lkIG9mZmVyT3V0Z29pbmdVcGRhdGUoTmV0d29ya1RhYmxlRW50cnkqIGVudHJ5KTsNCisNCisNCisJdm9pZCBmbHVzaCgpOw0KKw0KKwkvKioNCisJICogQHJldHVybiB0aGUgc3RhdGUgb2YgdGhlIGNvbm5lY3Rpb24NCisJICovDQorCVNlcnZlckNvbm5lY3Rpb25TdGF0ZSogZ2V0Q29ubmVjdGlvblN0YXRlKCk7DQorDQorCXZvaWQgZW5zdXJlQWxpdmUoKTsNCisNCit9Ow0KKw0KKw0KKyNlbmRpZiAvKiBTRVJWRVJDT05ORUNUSU9OQURBUFRFUl9IXyAqLw0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL25ldHdvcmt0YWJsZXMyL3NlcnZlci9TZXJ2ZXJDb25uZWN0aW9uTGlzdC5jcHAgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9uZXR3b3JrdGFibGVzMi9zZXJ2ZXIvU2VydmVyQ29ubmVjdGlvbkxpc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhNTJmMzQKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9uZXR3b3JrdGFibGVzMi9zZXJ2ZXIvU2VydmVyQ29ubmVjdGlvbkxpc3QuY3BwCkBAIC0wLDAgKzEsODMgQEAKKy8qDQorICogU2VydmVyQ29ubmVjdGlvbkxpc3QuY3BwDQorICoNCisgKiAgQ3JlYXRlZCBvbjogU2VwIDI2LCAyMDEyDQorICogICAgICBBdXRob3I6IE1pdGNoZWxsIFdpbGxzDQorICovDQorDQorI2luY2x1ZGUgIm5ldHdvcmt0YWJsZXMyL3NlcnZlci9TZXJ2ZXJDb25uZWN0aW9uTGlzdC5oIg0KKyNpbmNsdWRlIDxhbGdvcml0aG0+DQorI2luY2x1ZGUgPHN0ZGlvLmg+DQorDQorDQorDQorU2VydmVyQ29ubmVjdGlvbkxpc3Q6OlNlcnZlckNvbm5lY3Rpb25MaXN0KCkNCit7DQorfQ0KK1NlcnZlckNvbm5lY3Rpb25MaXN0Ojp+U2VydmVyQ29ubmVjdGlvbkxpc3QoKQ0KK3sNCisJY29ubmVjdGlvbnNMb2NrLnRha2UoKTsNCisJY2xvc2VBbGwoKTsNCit9DQorDQordm9pZCBTZXJ2ZXJDb25uZWN0aW9uTGlzdDo6YWRkKFNlcnZlckNvbm5lY3Rpb25BZGFwdGVyJiBjb25uZWN0aW9uKQ0KK3sgDQorCVN5bmNocm9uaXplZCBzeW5jKGNvbm5lY3Rpb25zTG9jayk7DQorCWNvbm5lY3Rpb25zLnB1c2hfYmFjaygmY29ubmVjdGlvbik7DQorfQ0KKw0KK3ZvaWQgU2VydmVyQ29ubmVjdGlvbkxpc3Q6OmNsb3NlKFNlcnZlckNvbm5lY3Rpb25BZGFwdGVyJiBjb25uZWN0aW9uQWRhcHRlciwgYm9vbCBjbG9zZVN0cmVhbSkNCit7IA0KKwlTeW5jaHJvbml6ZWQgc3luYyhjb25uZWN0aW9uc0xvY2spOw0KKwlzdGQ6OnZlY3RvcjxTZXJ2ZXJDb25uZWN0aW9uQWRhcHRlcio+OjppdGVyYXRvciBjb25uZWN0aW9uUG9zaXRpb24gPSBzdGQ6OmZpbmQoY29ubmVjdGlvbnMuYmVnaW4oKSwgY29ubmVjdGlvbnMuZW5kKCksICZjb25uZWN0aW9uQWRhcHRlcik7DQorCWlmIChjb25uZWN0aW9uUG9zaXRpb24gIT0gY29ubmVjdGlvbnMuZW5kKCkgJiYgKCpjb25uZWN0aW9uUG9zaXRpb24pPT0mY29ubmVjdGlvbkFkYXB0ZXIpDQorCXsNCisJCWZwcmludGYoc3Rkb3V0LCAiQ2xvc2U6ICVwXG4iLCAmY29ubmVjdGlvbkFkYXB0ZXIpOw0KKwkJZmZsdXNoKHN0ZG91dCk7DQorCQljb25uZWN0aW9ucy5lcmFzZShjb25uZWN0aW9uUG9zaXRpb24pOw0KKwkJY29ubmVjdGlvbkFkYXB0ZXIuc2h1dGRvd24oY2xvc2VTdHJlYW0pOw0KKwkJZGVsZXRlICZjb25uZWN0aW9uQWRhcHRlcjsNCisJfQ0KK30NCisNCit2b2lkIFNlcnZlckNvbm5lY3Rpb25MaXN0OjpjbG9zZUFsbCgpDQoreyANCisJU3luY2hyb25pemVkIHN5bmMoY29ubmVjdGlvbnNMb2NrKTsNCisJd2hpbGUoY29ubmVjdGlvbnMuc2l6ZSgpID4gMCkNCisJew0KKwkJY2xvc2UoKmNvbm5lY3Rpb25zWzBdLCB0cnVlKTsNCisJfQ0KK30NCisNCit2b2lkIFNlcnZlckNvbm5lY3Rpb25MaXN0OjpvZmZlck91dGdvaW5nQXNzaWdubWVudChOZXR3b3JrVGFibGVFbnRyeSogZW50cnkpDQoreyANCisJU3luY2hyb25pemVkIHN5bmMoY29ubmVjdGlvbnNMb2NrKTsNCisJZm9yKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGNvbm5lY3Rpb25zLnNpemUoKTsgKytpKQ0KKwl7DQorCQljb25uZWN0aW9uc1tpXS0+b2ZmZXJPdXRnb2luZ0Fzc2lnbm1lbnQoZW50cnkpOw0KKwl9DQorfQ0KK3ZvaWQgU2VydmVyQ29ubmVjdGlvbkxpc3Q6Om9mZmVyT3V0Z29pbmdVcGRhdGUoTmV0d29ya1RhYmxlRW50cnkqIGVudHJ5KQ0KK3sgDQorCVN5bmNocm9uaXplZCBzeW5jKGNvbm5lY3Rpb25zTG9jayk7DQorCWZvcih1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBjb25uZWN0aW9ucy5zaXplKCk7ICsraSkNCisJew0KKwkJY29ubmVjdGlvbnNbaV0tPm9mZmVyT3V0Z29pbmdVcGRhdGUoZW50cnkpOw0KKwl9DQorfQ0KK3ZvaWQgU2VydmVyQ29ubmVjdGlvbkxpc3Q6OmZsdXNoKCkNCit7IA0KKwlTeW5jaHJvbml6ZWQgc3luYyhjb25uZWN0aW9uc0xvY2spOw0KKwlmb3IodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgY29ubmVjdGlvbnMuc2l6ZSgpOyArK2kpDQorCXsNCisJCWNvbm5lY3Rpb25zW2ldLT5mbHVzaCgpOw0KKwl9DQorfQ0KK3ZvaWQgU2VydmVyQ29ubmVjdGlvbkxpc3Q6OmVuc3VyZUFsaXZlKCkNCit7IA0KKwlTeW5jaHJvbml6ZWQgc3luYyhjb25uZWN0aW9uc0xvY2spOw0KKwlmb3IodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgY29ubmVjdGlvbnMuc2l6ZSgpOyArK2kpDQorCXsNCisJCWNvbm5lY3Rpb25zW2ldLT5lbnN1cmVBbGl2ZSgpOw0KKwl9DQorfQ0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL25ldHdvcmt0YWJsZXMyL3NlcnZlci9TZXJ2ZXJDb25uZWN0aW9uTGlzdC5oIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvbmV0d29ya3RhYmxlczIvc2VydmVyL1NlcnZlckNvbm5lY3Rpb25MaXN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNThjMGE3OAotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL25ldHdvcmt0YWJsZXMyL3NlcnZlci9TZXJ2ZXJDb25uZWN0aW9uTGlzdC5oCkBAIC0wLDAgKzEsNTkgQEAKKy8qDQorICogU2VydmVyQ29ubmVjdGlvbkxpc3QuaA0KKyAqDQorICogIENyZWF0ZWQgb246IFNlcCAyNiwgMjAxMg0KKyAqICAgICAgQXV0aG9yOiBNaXRjaGVsbCBXaWxscw0KKyAqLw0KKw0KKyNpZm5kZWYgU0VSVkVSQ09OTkVDVElPTkxJU1RfSF8NCisjZGVmaW5lIFNFUlZFUkNPTk5FQ1RJT05MSVNUX0hfDQorDQorDQorDQorY2xhc3MgU2VydmVyQ29ubmVjdGlvbkxpc3Q7DQorDQorDQorI2luY2x1ZGUgIm5ldHdvcmt0YWJsZXMyL0ZsdXNoYWJsZU91dGdvaW5nRW50cnlSZWNlaXZlci5oIg0KKyNpbmNsdWRlICJuZXR3b3JrdGFibGVzMi9OZXR3b3JrVGFibGVFbnRyeS5oIg0KKyNpbmNsdWRlICJTZXJ2ZXJBZGFwdGVyTWFuYWdlci5oIg0KKyNpbmNsdWRlICJTZXJ2ZXJDb25uZWN0aW9uQWRhcHRlci5oIg0KKyNpbmNsdWRlIDx2ZWN0b3I+DQorDQorDQorDQorLyoqDQorICogQSBsaXN0IG9mIGNvbm5lY3Rpb25zIHRoYXQgdGhlIHNlcnZlciBjdXJyZW50bHkgaGFzDQorICogDQorICogQGF1dGhvciBNaXRjaGVsbA0KKyAqDQorICovDQorY2xhc3MgU2VydmVyQ29ubmVjdGlvbkxpc3QgOiBwdWJsaWMgRmx1c2hhYmxlT3V0Z29pbmdFbnRyeVJlY2VpdmVyLCBwdWJsaWMgU2VydmVyQWRhcHRlck1hbmFnZXJ7DQorcHJpdmF0ZToNCisJUmVlbnRyYW50U2VtYXBob3JlIGNvbm5lY3Rpb25zTG9jazsNCisJc3RkOjp2ZWN0b3I8U2VydmVyQ29ubmVjdGlvbkFkYXB0ZXIqPiBjb25uZWN0aW9uczsNCisJDQorcHVibGljOg0KKwlTZXJ2ZXJDb25uZWN0aW9uTGlzdCgpOw0KKwl2aXJ0dWFsIH5TZXJ2ZXJDb25uZWN0aW9uTGlzdCgpOw0KKwkvKioNCisJICogQWRkIGEgY29ubmVjdGlvbiB0byB0aGUgbGlzdA0KKwkgKiBAcGFyYW0gY29ubmVjdGlvbg0KKwkgKi8NCisJdm9pZCBhZGQoU2VydmVyQ29ubmVjdGlvbkFkYXB0ZXImIGNvbm5lY3Rpb24pOw0KKwkNCisJDQorCXZvaWQgY2xvc2UoU2VydmVyQ29ubmVjdGlvbkFkYXB0ZXImIGNvbm5lY3Rpb25BZGFwdGVyLCBib29sIGNsb3NlU3RyZWFtKTsNCisJLyoqDQorCSAqIGNsb3NlIGFsbCBjb25uZWN0aW9ucyBhbmQgcmVtb3ZlIHRoZW0NCisJICovDQorCXZvaWQgY2xvc2VBbGwoKTsNCisJDQorCXZvaWQgb2ZmZXJPdXRnb2luZ0Fzc2lnbm1lbnQoTmV0d29ya1RhYmxlRW50cnkqIGVudHJ5KTsNCisJdm9pZCBvZmZlck91dGdvaW5nVXBkYXRlKE5ldHdvcmtUYWJsZUVudHJ5KiBlbnRyeSk7DQorCXZvaWQgZmx1c2goKTsNCisJdm9pZCBlbnN1cmVBbGl2ZSgpOw0KK307DQorDQorDQorDQorI2VuZGlmIC8qIFNFUlZFUkNPTk5FQ1RJT05MSVNUX0hfICovDQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvbmV0d29ya3RhYmxlczIvc2VydmVyL1NlcnZlckNvbm5lY3Rpb25TdGF0ZS5jcHAgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9uZXR3b3JrdGFibGVzMi9zZXJ2ZXIvU2VydmVyQ29ubmVjdGlvblN0YXRlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOWIwYjU2Ci0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvbmV0d29ya3RhYmxlczIvc2VydmVyL1NlcnZlckNvbm5lY3Rpb25TdGF0ZS5jcHAKQEAgLTAsMCArMSwzMSBAQAorLyoNCisgKiBTZXJ2ZXJDb25uZWN0aW9uU3RhdGUuY3BwDQorICoNCisgKiAgQ3JlYXRlZCBvbjogU2VwIDI3LCAyMDEyDQorICogICAgICBBdXRob3I6IE1pdGNoZWxsIFdpbGxzDQorICovDQorDQorI2luY2x1ZGUgIm5ldHdvcmt0YWJsZXMyL3NlcnZlci9TZXJ2ZXJDb25uZWN0aW9uU3RhdGUuaCINCisNCitTZXJ2ZXJDb25uZWN0aW9uU3RhdGUgU2VydmVyQ29ubmVjdGlvblN0YXRlOjpHT1RfQ09OTkVDVElPTl9GUk9NX0NMSUVOVCgiR09UX0NPTk5FQ1RJT05fRlJPTV9DTElFTlQiKTsNCisNCitTZXJ2ZXJDb25uZWN0aW9uU3RhdGUgU2VydmVyQ29ubmVjdGlvblN0YXRlOjpDT05ORUNURURfVE9fQ0xJRU5UKCJDT05ORUNURURfVE9fQ0xJRU5UIik7DQorDQorU2VydmVyQ29ubmVjdGlvblN0YXRlIFNlcnZlckNvbm5lY3Rpb25TdGF0ZTo6Q0xJRU5UX0RJU0NPTk5FQ1RFRCgiQ0xJRU5UX0RJU0NPTk5FQ1RFRCIpOw0KKwkNCisNCitTZXJ2ZXJDb25uZWN0aW9uU3RhdGU6OlNlcnZlckNvbm5lY3Rpb25TdGF0ZShjb25zdCBjaGFyKiBfbmFtZSk6bmFtZShfbmFtZSl7DQorfQ0KK2NvbnN0IGNoYXIqIFNlcnZlckNvbm5lY3Rpb25TdGF0ZTo6dG9TdHJpbmcoKXsNCisJcmV0dXJuIG5hbWU7DQorfQ0KKw0KK1NlcnZlckNvbm5lY3Rpb25TdGF0ZV9FcnJvcjo6U2VydmVyQ29ubmVjdGlvblN0YXRlX0Vycm9yKHN0ZDo6ZXhjZXB0aW9uJiBfZSk6U2VydmVyQ29ubmVjdGlvblN0YXRlKCJTRVJWRVJfRVJST1IiKSxlKF9lKXsNCit9DQorY29uc3QgY2hhciogU2VydmVyQ29ubmVjdGlvblN0YXRlX0Vycm9yOjp0b1N0cmluZygpew0KKwlyZXR1cm4gIlNFUlZFUl9FUlJPUiI7DQorCS8vVE9ETyByZXR1cm4gIlNFUlZFUl9FUlJPUjogIitlLmdldENsYXNzKCkrIjogIitlLndoYXQoKTsNCit9DQorc3RkOjpleGNlcHRpb24mIFNlcnZlckNvbm5lY3Rpb25TdGF0ZV9FcnJvcjo6Z2V0RXhjZXB0aW9uKCl7DQorCXJldHVybiBlOw0KK30NCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9uZXR3b3JrdGFibGVzMi9zZXJ2ZXIvU2VydmVyQ29ubmVjdGlvblN0YXRlLmggYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9uZXR3b3JrdGFibGVzMi9zZXJ2ZXIvU2VydmVyQ29ubmVjdGlvblN0YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQwOGI0OQotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL25ldHdvcmt0YWJsZXMyL3NlcnZlci9TZXJ2ZXJDb25uZWN0aW9uU3RhdGUuaApAQCAtMCwwICsxLDc1IEBACisvKg0KKyAqIFNlcnZlckNvbm5lY3Rpb25TdGF0ZS5oDQorICoNCisgKiAgQ3JlYXRlZCBvbjogU2VwIDI2LCAyMDEyDQorICogICAgICBBdXRob3I6IE1pdGNoZWxsIFdpbGxzDQorICovDQorDQorI2lmbmRlZiBTRVJWRVJDT05ORUNUSU9OU1RBVEVfSF8NCisjZGVmaW5lIFNFUlZFUkNPTk5FQ1RJT05TVEFURV9IXw0KKw0KK2NsYXNzIFNlcnZlckNvbm5lY3Rpb25TdGF0ZTsNCitjbGFzcyBTZXJ2ZXJDb25uZWN0aW9uU3RhdGVfRXJyb3I7DQorDQorI2luY2x1ZGUgPGV4Y2VwdGlvbj4NCisNCisNCisNCisvKioNCisgKiBSZXByZXNlbnRzIHRoZSBzdGF0ZSBvZiBhIGNvbm5lY3Rpb24gdG8gdGhlIHNlcnZlcg0KKyAqIA0KKyAqIEBhdXRob3IgTWl0Y2hlbGwNCisgKg0KKyAqLw0KK2NsYXNzIFNlcnZlckNvbm5lY3Rpb25TdGF0ZQ0KK3sNCitwdWJsaWM6DQorCS8qKg0KKwkgKiByZXByZXNlbnRzIHRoYXQgdGhlIHNlcnZlciBoYXMgcmVjZWl2ZWQgdGhlIGNvbm5lY3Rpb24gZnJvbSB0aGUgY2xpZW50IGJ1dCBoYXMgbm90IHlldCByZWNlaXZlZCB0aGUgY2xpZW50IGhlbGxvDQorCSAqLw0KKwlzdGF0aWMgU2VydmVyQ29ubmVjdGlvblN0YXRlIEdPVF9DT05ORUNUSU9OX0ZST01fQ0xJRU5UOw0KKwkvKioNCisJICogcmVwcmVzZW50cyB0aGF0IHRoZSBjbGllbnQgaXMgaW4gYSBjb25uZWN0ZWQgbm9uLWVycm9yIHN0YXRlDQorCSAqLw0KKwlzdGF0aWMgU2VydmVyQ29ubmVjdGlvblN0YXRlIENPTk5FQ1RFRF9UT19DTElFTlQ7DQorCS8qKg0KKwkgKiByZXByZXNlbnRzIHRoYXQgdGhlIGNsaWVudCBoYXMgZGlzY29ubmVjdGVkIGZyb20gdGhlIHNlcnZlcg0KKwkgKi8NCisJc3RhdGljIFNlcnZlckNvbm5lY3Rpb25TdGF0ZSBDTElFTlRfRElTQ09OTkVDVEVEOw0KKw0KK3ByaXZhdGU6DQorCWNvbnN0IGNoYXIqIG5hbWU7DQorcHJvdGVjdGVkOg0KKwlTZXJ2ZXJDb25uZWN0aW9uU3RhdGUoY29uc3QgY2hhciogbmFtZSk7DQorcHVibGljOg0KKwl2aXJ0dWFsIGNvbnN0IGNoYXIqIHRvU3RyaW5nKCk7DQorCXZpcnR1YWwgflNlcnZlckNvbm5lY3Rpb25TdGF0ZSgpDQorCXsNCisJfQ0KK307DQorDQorLyoqDQorICogUmVwcmVzZW50cyB0aGF0IHRoZSBjbGllbnQgaXMgaW4gYW4gZXJyb3Igc3RhdGUNCisgKiANCisgKiBAYXV0aG9yIE1pdGNoZWxsDQorICoNCisgKi8NCitjbGFzcyBTZXJ2ZXJDb25uZWN0aW9uU3RhdGVfRXJyb3IgOiBwdWJsaWMgU2VydmVyQ29ubmVjdGlvblN0YXRlDQorew0KK3ByaXZhdGU6DQorCXN0ZDo6ZXhjZXB0aW9uJiBlOw0KK3B1YmxpYzoNCisJLyoqDQorCSAqIENyZWF0ZSBhIG5ldyBlcnJvciBzdGF0ZQ0KKwkgKiBAcGFyYW0gZQ0KKwkgKi8NCisJU2VydmVyQ29ubmVjdGlvblN0YXRlX0Vycm9yKHN0ZDo6ZXhjZXB0aW9uJiBlKTsNCisNCisJdmlydHVhbCBjb25zdCBjaGFyKiB0b1N0cmluZygpOw0KKwkvKioNCisJICogQHJldHVybiB0aGUgZXhjZXB0aW9uIHRoYXQgY2F1c2VkIHRoZSBjbGllbnQgY29ubmVjdGlvbiB0byBlbnRlciBhbiBlcnJvciBzdGF0ZQ0KKwkgKi8NCisJc3RkOjpleGNlcHRpb24mIGdldEV4Y2VwdGlvbigpOw0KK307DQorDQorI2VuZGlmIC8qIFNFUlZFUkNPTk5FQ1RJT05TVEFURV9IXyAqLw0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL25ldHdvcmt0YWJsZXMyL3NlcnZlci9TZXJ2ZXJJbmNvbWluZ0Nvbm5lY3Rpb25MaXN0ZW5lci5oIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvbmV0d29ya3RhYmxlczIvc2VydmVyL1NlcnZlckluY29taW5nQ29ubmVjdGlvbkxpc3RlbmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjJkNDY2MAotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL25ldHdvcmt0YWJsZXMyL3NlcnZlci9TZXJ2ZXJJbmNvbWluZ0Nvbm5lY3Rpb25MaXN0ZW5lci5oCkBAIC0wLDAgKzEsMzIgQEAKKy8qDQorICogU2VydmVySW5jb21pbmdDb25uZWN0aW9uTGlzdGVuZXIuaA0KKyAqDQorICogIENyZWF0ZWQgb246IFNlcCAyNiwgMjAxMg0KKyAqICAgICAgQXV0aG9yOiBNaXRjaGVsbCBXaWxscw0KKyAqLw0KKw0KKyNpZm5kZWYgU0VSVkVSSU5DT01JTkdDT05ORUNUSU9OTElTVEVORVJfSF8NCisjZGVmaW5lIFNFUlZFUklOQ09NSU5HQ09OTkVDVElPTkxJU1RFTkVSX0hfDQorDQorI2luY2x1ZGUgIlNlcnZlckNvbm5lY3Rpb25BZGFwdGVyLmgiDQorDQorLyoqDQorICogTGlzdGVuZXIgZm9yIG5ldyBpbmNvbWluZyBzZXJ2ZXIgY29ubmVjdGlvbnMNCisgKiBAYXV0aG9yIE1pdGNoZWxsDQorICoNCisgKi8NCitjbGFzcyBTZXJ2ZXJJbmNvbWluZ0Nvbm5lY3Rpb25MaXN0ZW5lcg0KK3sNCitwdWJsaWM6DQorCXZpcnR1YWwgflNlcnZlckluY29taW5nQ29ubmVjdGlvbkxpc3RlbmVyKCkNCisJew0KKwl9DQorCS8qKg0KKwkgKiANCisJICogQ2FsbGVkIG9uIGNyZWF0ZSBvZiBhIG5ldyBjb25uZWN0aW9uDQorCSAqIEBwYXJhbSBjb25uZWN0aW9uQWRhcHRlciB0aGUgc2VydmVyIGNvbm5lY3Rpb24gYWRhcHRlcg0KKwkgKi8NCisJdmlydHVhbCB2b2lkIE9uTmV3Q29ubmVjdGlvbihTZXJ2ZXJDb25uZWN0aW9uQWRhcHRlciYgY29ubmVjdGlvbkFkYXB0ZXIpID0gMDsNCit9Ow0KKw0KKyNlbmRpZiAvKiBTRVJWRVJJTkNPTUlOR0NPTk5FQ1RJT05MSVNURU5FUl9IXyAqLw0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL25ldHdvcmt0YWJsZXMyL3NlcnZlci9TZXJ2ZXJJbmNvbWluZ1N0cmVhbU1vbml0b3IuY3BwIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvbmV0d29ya3RhYmxlczIvc2VydmVyL1NlcnZlckluY29taW5nU3RyZWFtTW9uaXRvci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDk0MGU1OAotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL25ldHdvcmt0YWJsZXMyL3NlcnZlci9TZXJ2ZXJJbmNvbWluZ1N0cmVhbU1vbml0b3IuY3BwCkBAIC0wLDAgKzEsNTcgQEAKKy8qDQorICogU2VydmVySW5jb21pbmdTdHJlYW1Nb25pdG9yLmNwcA0KKyAqDQorICogIENyZWF0ZWQgb246IFNlcCAyNiwgMjAxMg0KKyAqICAgICAgQXV0aG9yOiBNaXRjaGVsbCBXaWxscw0KKyAqLw0KKw0KKyNpbmNsdWRlICJuZXR3b3JrdGFibGVzMi9zZXJ2ZXIvU2VydmVySW5jb21pbmdTdHJlYW1Nb25pdG9yLmgiDQorI2luY2x1ZGUgIm5ldHdvcmt0YWJsZXMyL3N0cmVhbS9JT1N0cmVhbS5oIg0KKw0KK1NlcnZlckluY29taW5nU3RyZWFtTW9uaXRvcjo6U2VydmVySW5jb21pbmdTdHJlYW1Nb25pdG9yKElPU3RyZWFtUHJvdmlkZXImIF9zdHJlYW1Qcm92aWRlciwgU2VydmVyTmV0d29ya1RhYmxlRW50cnlTdG9yZSYgX2VudHJ5U3RvcmUsDQorCQlTZXJ2ZXJJbmNvbWluZ0Nvbm5lY3Rpb25MaXN0ZW5lciYgX2luY29taW5nTGlzdGVuZXIsIFNlcnZlckFkYXB0ZXJNYW5hZ2VyJiBfYWRhcHRlckxpc3RlbmVyLCBOZXR3b3JrVGFibGVFbnRyeVR5cGVNYW5hZ2VyJiBfdHlwZU1hbmFnZXIsDQorCQlOVFRocmVhZE1hbmFnZXImIF90aHJlYWRNYW5hZ2VyKSA6DQorCXN0cmVhbVByb3ZpZGVyKF9zdHJlYW1Qcm92aWRlciksIGVudHJ5U3RvcmUoX2VudHJ5U3RvcmUpLCBpbmNvbWluZ0xpc3RlbmVyKF9pbmNvbWluZ0xpc3RlbmVyKSwgYWRhcHRlckxpc3RlbmVyKF9hZGFwdGVyTGlzdGVuZXIpLA0KKwkJCXR5cGVNYW5hZ2VyKF90eXBlTWFuYWdlciksIHRocmVhZE1hbmFnZXIoX3RocmVhZE1hbmFnZXIpLCBtb25pdG9yVGhyZWFkKE5VTEwpDQorew0KK30NCisNCisvKioNCisgKiBTdGFydCB0aGUgbW9uaXRvciB0aHJlYWQNCisgKi8NCit2b2lkIFNlcnZlckluY29taW5nU3RyZWFtTW9uaXRvcjo6c3RhcnQoKQ0KK3sNCisJaWYgKG1vbml0b3JUaHJlYWQgIT0gTlVMTCkNCisJCXN0b3AoKTsNCisJbW9uaXRvclRocmVhZCA9IHRocmVhZE1hbmFnZXIubmV3QmxvY2tpbmdQZXJpb2RpY1RocmVhZCh0aGlzLCAiU2VydmVyIEluY29taW5nIFN0cmVhbSBNb25pdG9yIFRocmVhZCIpOw0KK30NCisvKioNCisgKiBTdG9wIHRoZSBtb25pdG9yIHRocmVhZA0KKyAqLw0KK3ZvaWQgU2VydmVySW5jb21pbmdTdHJlYW1Nb25pdG9yOjpzdG9wKCkNCit7DQorCWlmIChtb25pdG9yVGhyZWFkICE9IE5VTEwpDQorCXsNCisJCW1vbml0b3JUaHJlYWQtPnN0b3AoKTsNCisJCWRlbGV0ZSBtb25pdG9yVGhyZWFkOw0KKwkJbW9uaXRvclRocmVhZCA9IE5VTEw7DQorCX0NCit9DQorDQordm9pZCBTZXJ2ZXJJbmNvbWluZ1N0cmVhbU1vbml0b3I6OnJ1bigpDQorew0KKwl0cnkNCisJew0KKwkJSU9TdHJlYW0qIG5ld1N0cmVhbSA9IHN0cmVhbVByb3ZpZGVyLmFjY2VwdCgpOw0KKwkJaWYobmV3U3RyZWFtICE9IE5VTEwpDQorCQl7DQorCQkJU2VydmVyQ29ubmVjdGlvbkFkYXB0ZXIqIGNvbm5lY3Rpb25BZGFwdGVyID0gbmV3IFNlcnZlckNvbm5lY3Rpb25BZGFwdGVyKG5ld1N0cmVhbSwgZW50cnlTdG9yZSwgZW50cnlTdG9yZSwgYWRhcHRlckxpc3RlbmVyLCB0eXBlTWFuYWdlciwgdGhyZWFkTWFuYWdlcik7DQorCQkJaW5jb21pbmdMaXN0ZW5lci5Pbk5ld0Nvbm5lY3Rpb24oKmNvbm5lY3Rpb25BZGFwdGVyKTsNCisJCX0NCisJfQ0KKwljYXRjaCAoSU9FeGNlcHRpb24mIGUpDQorCXsNCisJCS8vY291bGQgbm90IGdldCBhIG5ldyBzdHJlYW0gZm9yIHNvbWUgcmVhc29uLiBpZ25vcmUgYW5kIGNvbnRpbnVlDQorCX0NCit9DQorDQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvbmV0d29ya3RhYmxlczIvc2VydmVyL1NlcnZlckluY29taW5nU3RyZWFtTW9uaXRvci5oIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvbmV0d29ya3RhYmxlczIvc2VydmVyL1NlcnZlckluY29taW5nU3RyZWFtTW9uaXRvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlN2FhYzUKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9uZXR3b3JrdGFibGVzMi9zZXJ2ZXIvU2VydmVySW5jb21pbmdTdHJlYW1Nb25pdG9yLmgKQEAgLTAsMCArMSw3NiBAQAorLyoNCisgKiBTZXJ2ZXJJbmNvbWluZ1N0cmVhbU1vbml0b3IuaA0KKyAqDQorICogIENyZWF0ZWQgb246IFNlcCAyNiwgMjAxMg0KKyAqICAgICAgQXV0aG9yOiBNaXRjaGVsbCBXaWxscw0KKyAqLw0KKw0KKyNpZm5kZWYgU0VSVkVSSU5DT01JTkdTVFJFQU1NT05JVE9SX0hfDQorI2RlZmluZSBTRVJWRVJJTkNPTUlOR1NUUkVBTU1PTklUT1JfSF8NCisNCisNCitjbGFzcyBTZXJ2ZXJJbmNvbWluZ1N0cmVhbU1vbml0b3I7DQorDQorDQorI2luY2x1ZGUgIm5ldHdvcmt0YWJsZXMyL3RocmVhZC9QZXJpb2RpY1J1bm5hYmxlLmgiDQorI2luY2x1ZGUgIm5ldHdvcmt0YWJsZXMyL3RocmVhZC9OVFRocmVhZE1hbmFnZXIuaCINCisjaW5jbHVkZSAibmV0d29ya3RhYmxlczIvdGhyZWFkL05UVGhyZWFkLmgiDQorI2luY2x1ZGUgIm5ldHdvcmt0YWJsZXMyL3N0cmVhbS9JT1N0cmVhbVByb3ZpZGVyLmgiDQorI2luY2x1ZGUgIm5ldHdvcmt0YWJsZXMyL3NlcnZlci9TZXJ2ZXJJbmNvbWluZ0Nvbm5lY3Rpb25MaXN0ZW5lci5oIg0KKyNpbmNsdWRlICJuZXR3b3JrdGFibGVzMi9zZXJ2ZXIvU2VydmVyTmV0d29ya1RhYmxlRW50cnlTdG9yZS5oIg0KKyNpbmNsdWRlICJuZXR3b3JrdGFibGVzMi9zZXJ2ZXIvU2VydmVyQWRhcHRlck1hbmFnZXIuaCINCisjaW5jbHVkZSAibmV0d29ya3RhYmxlczIvc2VydmVyL1NlcnZlckNvbm5lY3Rpb25BZGFwdGVyLmgiDQorDQorDQorDQorLyoqDQorICogVGhyZWFkIHRoYXQgbW9uaXRvcnMgZm9yIGluY29taW5nIGNvbm5lY3Rpb25zDQorICogDQorICogQGF1dGhvciBNaXRjaGVsbA0KKyAqDQorICovDQorY2xhc3MgU2VydmVySW5jb21pbmdTdHJlYW1Nb25pdG9yIDogUGVyaW9kaWNSdW5uYWJsZXsNCitwcml2YXRlOg0KKwlJT1N0cmVhbVByb3ZpZGVyJiBzdHJlYW1Qcm92aWRlcjsNCisJU2VydmVyTmV0d29ya1RhYmxlRW50cnlTdG9yZSYgZW50cnlTdG9yZTsNCisJU2VydmVySW5jb21pbmdDb25uZWN0aW9uTGlzdGVuZXImIGluY29taW5nTGlzdGVuZXI7DQorDQorCVNlcnZlckFkYXB0ZXJNYW5hZ2VyJiBhZGFwdGVyTGlzdGVuZXI7DQorCU5ldHdvcmtUYWJsZUVudHJ5VHlwZU1hbmFnZXImIHR5cGVNYW5hZ2VyOw0KKwlOVFRocmVhZE1hbmFnZXImIHRocmVhZE1hbmFnZXI7DQorCU5UVGhyZWFkKiBtb25pdG9yVGhyZWFkOw0KKwkNCitwdWJsaWM6DQorCS8qKg0KKwkgKiBDcmVhdGUgYSBuZXcgaW5jb21pbmcgc3RyZWFtIG1vbml0b3INCisJICogQHBhcmFtIHN0cmVhbVByb3ZpZGVyIHRoZSBzdHJlYW0gcHJvdmlkZXIgdG8gcmV0cmlldmUgc3RyZWFtcyBmcm9tDQorCSAqIEBwYXJhbSBlbnRyeVN0b3JlIHRoZSBlbnRyeSBzdG9yZSBmb3IgdGhlIHNlcnZlcg0KKwkgKiBAcGFyYW0gdHJhbnNhY3Rpb25Qb29sIHRyYW5zYWN0aW9uIHBvb2wgZm9yIHRoZSBzZXJ2ZXINCisJICogQHBhcmFtIGluY29taW5nTGlzdGVuZXIgdGhlIGxpc3RlbmVyIHRoYXQgaXMgbm90aWZpZWQgb2YgbmV3IGNvbm5lY3Rpb25zDQorCSAqIEBwYXJhbSBhZGFwdGVyTGlzdGVuZXIgdGhlIGxpc3RlbmVyIHRoYXQgd2lsbCBsaXN0ZW4gdG8gYWRhcHRlciBldmVudHMNCisJICogQHBhcmFtIHRocmVhZE1hbmFnZXIgdGhlIHRocmVhZCBtYW5hZ2VyIHVzZWQgdG8gY3JlYXRlIHRoZSBpbmNvbWluZyB0aHJlYWQgYW5kIHByb3ZpZGVkIHRvIHRoZSBDb25uZWN0aW9uIEFkYXB0ZXJzDQorCSAqLw0KKwlTZXJ2ZXJJbmNvbWluZ1N0cmVhbU1vbml0b3IoSU9TdHJlYW1Qcm92aWRlciYgc3RyZWFtUHJvdmlkZXIsIFNlcnZlck5ldHdvcmtUYWJsZUVudHJ5U3RvcmUmIGVudHJ5U3RvcmUsDQorCQkJU2VydmVySW5jb21pbmdDb25uZWN0aW9uTGlzdGVuZXImIGluY29taW5nTGlzdGVuZXIsDQorCQkJU2VydmVyQWRhcHRlck1hbmFnZXImIGFkYXB0ZXJMaXN0ZW5lciwNCisJCQlOZXR3b3JrVGFibGVFbnRyeVR5cGVNYW5hZ2VyJiB0eXBlTWFuYWdlciwgTlRUaHJlYWRNYW5hZ2VyJiB0aHJlYWRNYW5hZ2VyKTsNCisJDQorCS8qKg0KKwkgKiBTdGFydCB0aGUgbW9uaXRvciB0aHJlYWQNCisJICovDQorCXZvaWQgc3RhcnQoKTsNCisJLyoqDQorCSAqIFN0b3AgdGhlIG1vbml0b3IgdGhyZWFkDQorCSAqLw0KKwl2b2lkIHN0b3AoKTsNCisJDQorCXZvaWQgcnVuKCk7DQorCQ0KKwkNCisJDQorfTsNCisNCisNCisNCisNCisjZW5kaWYgLyogU0VSVkVSSU5DT01JTkdTVFJFQU1NT05JVE9SX0hfICovDQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvbmV0d29ya3RhYmxlczIvc2VydmVyL1NlcnZlck5ldHdvcmtUYWJsZUVudHJ5U3RvcmUuY3BwIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvbmV0d29ya3RhYmxlczIvc2VydmVyL1NlcnZlck5ldHdvcmtUYWJsZUVudHJ5U3RvcmUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1ZTY1NTUKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9uZXR3b3JrdGFibGVzMi9zZXJ2ZXIvU2VydmVyTmV0d29ya1RhYmxlRW50cnlTdG9yZS5jcHAKQEAgLTAsMCArMSw1NiBAQAorLyoNCisgKiBTZXJ2ZXJOZXR3b3JrVGFibGVFbnRyeVN0b3JlLmNwcA0KKyAqDQorICogIENyZWF0ZWQgb246IFNlcCAyNiwgMjAxMg0KKyAqICAgICAgQXV0aG9yOiBNaXRjaGVsbCBXaWxscw0KKyAqLw0KKw0KKyNpbmNsdWRlICJuZXR3b3JrdGFibGVzMi9zZXJ2ZXIvU2VydmVyTmV0d29ya1RhYmxlRW50cnlTdG9yZS5oIg0KKw0KK1NlcnZlck5ldHdvcmtUYWJsZUVudHJ5U3RvcmU6OlNlcnZlck5ldHdvcmtUYWJsZUVudHJ5U3RvcmUoVGFibGVMaXN0ZW5lck1hbmFnZXImIF9saXN0ZW5lck1hbmFnZXIpIDoNCisJQWJzdHJhY3ROZXR3b3JrVGFibGVFbnRyeVN0b3JlKF9saXN0ZW5lck1hbmFnZXIpDQorew0KKwluZXh0SWQgPSAoRW50cnlJZCkwOw0KK30NCitTZXJ2ZXJOZXR3b3JrVGFibGVFbnRyeVN0b3JlOjp+U2VydmVyTmV0d29ya1RhYmxlRW50cnlTdG9yZSgpDQorew0KK30NCisNCitib29sIFNlcnZlck5ldHdvcmtUYWJsZUVudHJ5U3RvcmU6OmFkZEVudHJ5KE5ldHdvcmtUYWJsZUVudHJ5KiBuZXdFbnRyeSkNCit7DQorCVN5bmNocm9uaXplZCBzeW5jKExPQ0spOw0KKwlOZXR3b3JrVGFibGVFbnRyeSogZW50cnkgPSBuYW1lZEVudHJpZXNbbmV3RW50cnktPm5hbWVdOw0KKwkNCisJaWYgKGVudHJ5ID09IE5VTEwpDQorCXsNCisJCW5ld0VudHJ5LT5TZXRJZChuZXh0SWQrKyk7DQorCQlpZEVudHJpZXNbbmV3RW50cnktPkdldElkKCldID0gbmV3RW50cnk7DQorCQluYW1lZEVudHJpZXNbbmV3RW50cnktPm5hbWVdID0gbmV3RW50cnk7DQorCQlyZXR1cm4gdHJ1ZTsNCisJfQ0KKwlyZXR1cm4gZmFsc2U7DQorfQ0KKw0KK2Jvb2wgU2VydmVyTmV0d29ya1RhYmxlRW50cnlTdG9yZTo6dXBkYXRlRW50cnkoTmV0d29ya1RhYmxlRW50cnkqIGVudHJ5LCBTZXF1ZW5jZU51bWJlciBzZXF1ZW5jZU51bWJlciwgRW50cnlWYWx1ZSB2YWx1ZSkNCit7DQorCVN5bmNocm9uaXplZCBzeW5jKExPQ0spOw0KKwlyZXR1cm4gZW50cnktPlB1dFZhbHVlKHNlcXVlbmNlTnVtYmVyLCB2YWx1ZSk7DQorfQ0KKw0KKy8qKg0KKyAqIFNlbmQgYWxsIGVudHJpZXMgaW4gdGhlIGVudHJ5IHN0b3JlIGFzIGVudHJ5IGFzc2lnbm1lbnRzIGluIGEgc2luZ2xlIHRyYW5zYWN0aW9uDQorICogQHBhcmFtIGNvbm5lY3Rpb24NCisgKiBAdGhyb3dzIElPRXhjZXB0aW9uDQorICovDQordm9pZCBTZXJ2ZXJOZXR3b3JrVGFibGVFbnRyeVN0b3JlOjpzZW5kU2VydmVySGVsbG8oTmV0d29ya1RhYmxlQ29ubmVjdGlvbiYgY29ubmVjdGlvbikNCit7DQorCVN5bmNocm9uaXplZCBzeW5jKExPQ0spOw0KKwlzdGQ6Om1hcDxzdGQ6OnN0cmluZywgTmV0d29ya1RhYmxlRW50cnkqPjo6aXRlcmF0b3IgaXRyOw0KKwlmb3IgKGl0ciA9IG5hbWVkRW50cmllcy5iZWdpbigpOyBpdHIgIT0gbmFtZWRFbnRyaWVzLmVuZCgpOyBpdHIrKykNCisJew0KKwkJTmV0d29ya1RhYmxlRW50cnkqIGVudHJ5ID0gaXRyLT5zZWNvbmQ7DQorCQljb25uZWN0aW9uLnNlbmRFbnRyeUFzc2lnbm1lbnQoKmVudHJ5KTsNCisJfQ0KKwljb25uZWN0aW9uLnNlbmRTZXJ2ZXJIZWxsb0NvbXBsZXRlKCk7DQorCWNvbm5lY3Rpb24uZmx1c2goKTsNCit9DQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvbmV0d29ya3RhYmxlczIvc2VydmVyL1NlcnZlck5ldHdvcmtUYWJsZUVudHJ5U3RvcmUuaCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL25ldHdvcmt0YWJsZXMyL3NlcnZlci9TZXJ2ZXJOZXR3b3JrVGFibGVFbnRyeVN0b3JlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzBhZWNiNgotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL25ldHdvcmt0YWJsZXMyL3NlcnZlci9TZXJ2ZXJOZXR3b3JrVGFibGVFbnRyeVN0b3JlLmgKQEAgLTAsMCArMSw1NSBAQAorLyoNCisgKiBTZXJ2ZXJOZXR3b3JrVGFibGVFbnRyeVN0b3JlLmgNCisgKg0KKyAqICBDcmVhdGVkIG9uOiBTZXAgMjYsIDIwMTINCisgKiAgICAgIEF1dGhvcjogTWl0Y2hlbGwgV2lsbHMNCisgKi8NCisNCisjaWZuZGVmIFNFUlZFUk5FVFdPUktUQUJMRUVOVFJZU1RPUkVfSF8NCisjZGVmaW5lIFNFUlZFUk5FVFdPUktUQUJMRUVOVFJZU1RPUkVfSF8NCisNCisNCitjbGFzcyBTZXJ2ZXJOZXR3b3JrVGFibGVFbnRyeVN0b3JlOw0KKw0KKw0KKyNpbmNsdWRlICJuZXR3b3JrdGFibGVzMi9BYnN0cmFjdE5ldHdvcmtUYWJsZUVudHJ5U3RvcmUuaCINCisjaW5jbHVkZSAibmV0d29ya3RhYmxlczIvTmV0d29ya1RhYmxlRW50cnkuaCINCisjaW5jbHVkZSAiU3luY2hyb25pemVkLmgiDQorDQorDQorDQorLyoqDQorICogVGhlIGVudHJ5IHN0b3JlIGZvciBhIHtAbGluayBOZXR3b3JrVGFibGVTZXJ2ZXJ9DQorICogDQorICogQGF1dGhvciBNaXRjaGVsbA0KKyAqDQorICovDQorY2xhc3MgU2VydmVyTmV0d29ya1RhYmxlRW50cnlTdG9yZSA6IHB1YmxpYyBBYnN0cmFjdE5ldHdvcmtUYWJsZUVudHJ5U3RvcmV7DQorcHJpdmF0ZToNCisJRW50cnlJZCBuZXh0SWQ7DQorcHVibGljOg0KKwkvKioNCisJICogQ3JlYXRlIGEgbmV3IFNlcnZlciBlbnRyeSBzdG9yZQ0KKwkgKiBAcGFyYW0gdHJhbnNhY3Rpb25Qb29sIHRoZSB0cmFuc2FjdGlvbiBwb29sDQorCSAqIEBwYXJhbSBsaXN0ZW5lck1hbmFnZXIgdGhlIGxpc3RlbmVyIG1hbmFnZXIgdGhhdCBmaXJlcyBldmVudHMgZnJvbSB0aGlzIGVudHJ5IHN0b3JlDQorCSAqLw0KKwlTZXJ2ZXJOZXR3b3JrVGFibGVFbnRyeVN0b3JlKFRhYmxlTGlzdGVuZXJNYW5hZ2VyJiBsaXN0ZW5lck1hbmFnZXIpOw0KKwl2aXJ0dWFsIH5TZXJ2ZXJOZXR3b3JrVGFibGVFbnRyeVN0b3JlKCk7DQorCQ0KK3Byb3RlY3RlZDoNCisJYm9vbCBhZGRFbnRyeShOZXR3b3JrVGFibGVFbnRyeSogbmV3RW50cnkpOw0KKw0KKwlib29sIHVwZGF0ZUVudHJ5KE5ldHdvcmtUYWJsZUVudHJ5KiBlbnRyeSwgU2VxdWVuY2VOdW1iZXIgc2VxdWVuY2VOdW1iZXIsIEVudHJ5VmFsdWUgdmFsdWUpOw0KKwkNCitwdWJsaWM6DQorCS8qKg0KKwkgKiBTZW5kIGFsbCBlbnRyaWVzIGluIHRoZSBlbnRyeSBzdG9yZSBhcyBlbnRyeSBhc3NpZ25tZW50cyBpbiBhIHNpbmdsZSB0cmFuc2FjdGlvbg0KKwkgKiBAcGFyYW0gY29ubmVjdGlvbg0KKwkgKiBAdGhyb3dzIElPRXhjZXB0aW9uDQorCSAqLw0KKwl2b2lkIHNlbmRTZXJ2ZXJIZWxsbyhOZXR3b3JrVGFibGVDb25uZWN0aW9uJiBjb25uZWN0aW9uKTsNCit9Ow0KKw0KKw0KKw0KKyNlbmRpZiAvKiBTRVJWRVJORVRXT1JLVEFCTEVFTlRSWVNUT1JFX0hfICovDQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvbmV0d29ya3RhYmxlczIvc3RyZWFtL0ZESU9TdHJlYW0uY3BwIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvbmV0d29ya3RhYmxlczIvc3RyZWFtL0ZESU9TdHJlYW0uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiODdiYzcKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9uZXR3b3JrdGFibGVzMi9zdHJlYW0vRkRJT1N0cmVhbS5jcHAKQEAgLTAsMCArMSw3MCBAQAorLyoNCisgKiBGRElPU3RyZWFtLmNwcA0KKyAqDQorICogIENyZWF0ZWQgb246IFNlcCAyNywgMjAxMg0KKyAqICAgICAgQXV0aG9yOiBNaXRjaGVsbCBXaWxscw0KKyAqLw0KKw0KKyNpbmNsdWRlICJuZXR3b3JrdGFibGVzMi9zdHJlYW0vRkRJT1N0cmVhbS5oIg0KKyNpbmNsdWRlICJuZXR3b3JrdGFibGVzMi91dGlsL0lPRXhjZXB0aW9uLmgiDQorI2luY2x1ZGUgIm5ldHdvcmt0YWJsZXMyL3V0aWwvRU9GRXhjZXB0aW9uLmgiDQorDQorI2luY2x1ZGUgPGVycm5vLmg+DQorI2luY2x1ZGUgPHN0ZGxpYi5oPg0KKyNpZmRlZiBfV1JTX0tFUk5FTA0KKyNpbmNsdWRlIDxpb2xpYi5oPg0KKyNlbHNlDQorI2luY2x1ZGUgPHVuaXN0ZC5oPg0KKyNlbmRpZg0KKyNpbmNsdWRlIDxzdGRpby5oPg0KKw0KKw0KK0ZESU9TdHJlYW06OkZESU9TdHJlYW0oaW50IF9mZCl7DQorICBmZCA9IF9mZDsNCisgIC8vCWYgPSBmZG9wZW4oX2ZkLCAicmJ3YiIpOw0KKyAgLy8JaWYoZj09TlVMTCkNCisgIC8vCQl0aHJvdyBJT0V4Y2VwdGlvbigiQ291bGQgbm90IG9wZW4gc3RyZWFtIGZyb20gZmlsZSBkZXNjcmlwdG9yIiwgZXJybm8pOw0KK30NCitGRElPU3RyZWFtOjp+RkRJT1N0cmVhbSgpew0KKwljbG9zZSgpOw0KK30NCisNCitpbnQgRkRJT1N0cmVhbTo6cmVhZCh2b2lkKiBwdHIsIGludCBudW1ieXRlcyl7DQorCWlmKG51bWJ5dGVzPT0wKQ0KKwkJcmV0dXJuIDA7DQorCWNoYXIqIGJ1ZmZlclBvaW50ZXIgPSAoY2hhciopcHRyOw0KKwlpbnQgdG90YWxSZWFkID0gMDsNCisJd2hpbGUgKHRvdGFsUmVhZCA8IG51bWJ5dGVzKSB7DQorCQlpbnQgbnVtUmVhZCA9IDo6cmVhZChmZCwgYnVmZmVyUG9pbnRlciwgbnVtYnl0ZXMtdG90YWxSZWFkKTsNCisJCWlmKG51bVJlYWQgPT0gMCl7DQorCQkJdGhyb3cgRU9GRXhjZXB0aW9uKCk7DQorCQl9DQorCQllbHNlIGlmIChudW1SZWFkIDwgMCkgew0KKwkJCXBlcnJvcigicmVhZCBlcnJvcjogIik7DQorCQkJZmZsdXNoKHN0ZGVycik7DQorCQkJdGhyb3cgSU9FeGNlcHRpb24oIkVycm9yIG9uIEZESU8gcmVhZCIpOw0KKwkJfQ0KKwkJYnVmZmVyUG9pbnRlciArPSBudW1SZWFkOw0KKwkJdG90YWxSZWFkICs9IG51bVJlYWQ7DQorCX0NCisJcmV0dXJuIHRvdGFsUmVhZDsNCit9DQoraW50IEZESU9TdHJlYW06OndyaXRlKGNvbnN0IHZvaWQqIHB0ciwgaW50IG51bWJ5dGVzKXsNCisgIGludCBudW1Xcm90ZSA9IDo6d3JpdGUoZmQsIChjaGFyKilwdHIsIG51bWJ5dGVzKTsvL1RPRE86IHRoaXMgaXMgYmFkDQorICAvL2ludCBudW1Xcm90ZSA9IGZ3cml0ZShwdHIsIDEsIG51bWJ5dGVzLCBmKTsNCisgIGlmKG51bVdyb3RlPT1udW1ieXRlcykNCisgICAgcmV0dXJuIG51bVdyb3RlOw0KKyAgcGVycm9yKCJ3cml0ZSBlcnJvcjogIik7DQorICBmZmx1c2goc3RkZXJyKTsNCisgIHRocm93IElPRXhjZXB0aW9uKCJDb3VsZCBub3Qgd3JpdGUgYWxsIGJ5dGVzIHRvIGZkIHN0cmVhbSIpOw0KKwkNCit9DQordm9pZCBGRElPU3RyZWFtOjpmbHVzaCgpew0KKyAgLy9pZihmZmx1c2goZik9PUVPRikNCisgIC8vICB0aHJvdyBFT0ZFeGNlcHRpb24oKTsNCit9DQordm9pZCBGRElPU3RyZWFtOjpjbG9zZSgpew0KKyAgLy9mY2xvc2UoZik7Ly9pZ25vcmUgYW55IGVycm9ycyBjbG9zaW5nDQorICA6OmNsb3NlKGZkKTsNCit9DQorDQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvbmV0d29ya3RhYmxlczIvc3RyZWFtL0ZESU9TdHJlYW0uaCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL25ldHdvcmt0YWJsZXMyL3N0cmVhbS9GRElPU3RyZWFtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Q2NjRiNwotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL25ldHdvcmt0YWJsZXMyL3N0cmVhbS9GRElPU3RyZWFtLmgKQEAgLTAsMCArMSwzNiBAQAorLyoNCisgKiBGRElPU3RyZWFtLmgNCisgKg0KKyAqICBDcmVhdGVkIG9uOiBTZXAgMjcsIDIwMTINCisgKiAgICAgIEF1dGhvcjogTWl0Y2hlbGwgV2lsbHMNCisgKi8NCisNCisjaWZuZGVmIEZESU9TVFJFQU1fSF8NCisjZGVmaW5lIEZESU9TVFJFQU1fSF8NCisNCisNCisNCitjbGFzcyBGRElPU3RyZWFtOw0KKw0KKw0KKyNpbmNsdWRlICJJT1N0cmVhbS5oIg0KKyNpbmNsdWRlIDxzdGRpby5oPg0KKw0KKw0KKw0KK2NsYXNzIEZESU9TdHJlYW0gOiBwdWJsaWMgSU9TdHJlYW17DQorcHJpdmF0ZToNCisgICAgLy9GSUxFKiBmOw0KKyAgICBpbnQgZmQ7DQorcHVibGljOg0KKwlGRElPU3RyZWFtKGludCBmZCk7DQorCXZpcnR1YWwgfkZESU9TdHJlYW0oKTsNCisJaW50IHJlYWQodm9pZCogcHRyLCBpbnQgbnVtYnl0ZXMpOw0KKwlpbnQgd3JpdGUoY29uc3Qgdm9pZCogcHRyLCBpbnQgbnVtYnl0ZXMpOw0KKwl2b2lkIGZsdXNoKCk7DQorCXZvaWQgY2xvc2UoKTsNCit9Ow0KKw0KKw0KKw0KKyNlbmRpZiAvKiBGRElPU1RSRUFNX0hfICovDQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvbmV0d29ya3RhYmxlczIvc3RyZWFtL0lPU3RyZWFtLmggYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9uZXR3b3JrdGFibGVzMi9zdHJlYW0vSU9TdHJlYW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MWY0MmE1Ci0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvbmV0d29ya3RhYmxlczIvc3RyZWFtL0lPU3RyZWFtLmgKQEAgLTAsMCArMSwyNSBAQAorLyoNCisgKiBJT1N0cmVhbS5oDQorICoNCisgKiAgQ3JlYXRlZCBvbjogU2VwIDI3LCAyMDEyDQorICogICAgICBBdXRob3I6IE1pdGNoZWxsIFdpbGxzDQorICovDQorDQorI2lmbmRlZiBJT1NUUkVBTV9IXw0KKyNkZWZpbmUgSU9TVFJFQU1fSF8NCisNCitjbGFzcyBJT1N0cmVhbTsNCisNCitjbGFzcyBJT1N0cmVhbQ0KK3sNCitwdWJsaWM6DQorCXZpcnR1YWwgfklPU3RyZWFtKCkNCisJew0KKwl9DQorCXZpcnR1YWwgaW50IHJlYWQodm9pZCogcHRyLCBpbnQgbnVtYnl0ZXMpID0gMDsNCisJdmlydHVhbCBpbnQgd3JpdGUoY29uc3Qgdm9pZCogcHRyLCBpbnQgbnVtYnl0ZXMpID0gMDsNCisJdmlydHVhbCB2b2lkIGZsdXNoKCkgPSAwOw0KKwl2aXJ0dWFsIHZvaWQgY2xvc2UoKSA9IDA7DQorfTsNCisNCisjZW5kaWYgLyogSU9TVFJFQU1fSF8gKi8NCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9uZXR3b3JrdGFibGVzMi9zdHJlYW0vSU9TdHJlYW1GYWN0b3J5LmggYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9uZXR3b3JrdGFibGVzMi9zdHJlYW0vSU9TdHJlYW1GYWN0b3J5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2YwZjhhYQotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL25ldHdvcmt0YWJsZXMyL3N0cmVhbS9JT1N0cmVhbUZhY3RvcnkuaApAQCAtMCwwICsxLDMyIEBACisvKg0KKyAqIElPU3RyZWFtRmFjdG9yeS5oDQorICoNCisgKiAgQ3JlYXRlZCBvbjogU2VwIDIyLCAyMDEyDQorICogICAgICBBdXRob3I6IE1pdGNoZWxsIFdpbGxzDQorICovDQorDQorI2lmbmRlZiBJT1NUUkVBTUZBQ1RPUllfSF8NCisjZGVmaW5lIElPU1RSRUFNRkFDVE9SWV9IXw0KKw0KKyNpbmNsdWRlICJJT1N0cmVhbS5oIg0KKw0KKy8qKg0KKyAqIEEgZmFjdG9yeSB0aGF0IHdpbGwgY3JlYXRlIHRoZSBzYW1lIElPU3RyZWFtLiBBIHN0cmVhbSByZXR1cm5lZCBieSB0aGlzIGZhY3Rvcnkgc2hvdWxkIGJlIGNsb3NlZCBiZWZvcmUgY2FsbGluZyBjcmVhdGVTdHJlYW0gYWdhaW4NCisgKiANCisgKiBAYXV0aG9yIE1pdGNoZWxsDQorICoNCisgKi8NCitjbGFzcyBJT1N0cmVhbUZhY3RvcnkNCit7DQorcHVibGljOg0KKwl2aXJ0dWFsIH5JT1N0cmVhbUZhY3RvcnkoKQ0KKwl7DQorCX0NCisJLyoqDQorCSAqIEByZXR1cm4gY3JlYXRlIGEgbmV3IHN0cmVhbQ0KKwkgKiBAdGhyb3dzIElPRXhjZXB0aW9uDQorCSAqLw0KKwl2aXJ0dWFsIElPU3RyZWFtKiBjcmVhdGVTdHJlYW0oKSA9IDA7DQorfTsNCisNCisjZW5kaWYgLyogSU9TVFJFQU1GQUNUT1JZX0hfICovDQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvbmV0d29ya3RhYmxlczIvc3RyZWFtL0lPU3RyZWFtUHJvdmlkZXIuaCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL25ldHdvcmt0YWJsZXMyL3N0cmVhbS9JT1N0cmVhbVByb3ZpZGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGE1MzRiMgotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL25ldHdvcmt0YWJsZXMyL3N0cmVhbS9JT1N0cmVhbVByb3ZpZGVyLmgKQEAgLTAsMCArMSwzOCBAQAorLyoNCisgKiBJT1N0cmVhbVByb3ZpZGVyLmgNCisgKg0KKyAqICBDcmVhdGVkIG9uOiBTZXAgMjIsIDIwMTINCisgKiAgICAgIEF1dGhvcjogTWl0Y2hlbGwgV2lsbHMNCisgKi8NCisNCisjaWZuZGVmIElPU1RSRUFNUFJPVklERVJfSF8NCisjZGVmaW5lIElPU1RSRUFNUFJPVklERVJfSF8NCisNCisjaW5jbHVkZSAiSU9TdHJlYW0uaCINCisNCisvKioNCisgKiBBbiBvYmplY3QgdGhhdCB3aWxsIHByb3ZpZGUgdGhlIElPU3RyZWFtIG9mIGNsaWVudHMgdG8gYSBOZXR3b3JrVGFibGUgU2VydmVyDQorICogDQorICogQGF1dGhvciBtd2lsbHMNCisgKg0KKyAqLw0KK2NsYXNzIElPU3RyZWFtUHJvdmlkZXINCit7DQorcHVibGljOg0KKwl2aXJ0dWFsIH5JT1N0cmVhbVByb3ZpZGVyKCkNCisJew0KKwl9DQorCS8qKg0KKwkgKiANCisJICogQHJldHVybiBhIG5ldyBJT1N0cmVhbSBub3JtYWxseSBmcm9tIGEgc2VydmVyDQorCSAqIEB0aHJvd3MgSU9FeGNlcHRpb24NCisJICovDQorCXZpcnR1YWwgSU9TdHJlYW0qIGFjY2VwdCgpID0gMDsNCisJLyoqDQorCSAqIENsb3NlIHRoZSBzb3VyY2Ugb2YgdGhlIElPU3RyZWFtcy4ge0BsaW5rICNhY2NlcHQoKX0gc2hvdWxkIG5vdCBiZSBjYWxsZWQgYWZ0ZXIgdGhpcyBpcyBjYWxsZWQNCisJICogQHRocm93cyBJT0V4Y2VwdGlvbg0KKwkgKi8NCisJdmlydHVhbCB2b2lkIGNsb3NlKCkgPSAwOw0KK307DQorDQorI2VuZGlmIC8qIElPU1RSRUFNUFJPVklERVJfSF8gKi8NCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9uZXR3b3JrdGFibGVzMi9zdHJlYW0vU29ja2V0U2VydmVyU3RyZWFtUHJvdmlkZXIuY3BwIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvbmV0d29ya3RhYmxlczIvc3RyZWFtL1NvY2tldFNlcnZlclN0cmVhbVByb3ZpZGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjg5YWY5Ci0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvbmV0d29ya3RhYmxlczIvc3RyZWFtL1NvY2tldFNlcnZlclN0cmVhbVByb3ZpZGVyLmNwcApAQCAtMCwwICsxLDEyNiBAQAorLyoNCisgKiBTb2NrZXRTZXJ2ZXJTdHJlYW1Qcm92aWRlci5jcHANCisgKg0KKyAqICBDcmVhdGVkIG9uOiBTZXAgMjcsIDIwMTINCisgKiAgICAgIEF1dGhvcjogTWl0Y2hlbGwgV2lsbHMNCisgKi8NCisNCisjaW5jbHVkZSAibmV0d29ya3RhYmxlczIvc3RyZWFtL1NvY2tldFNlcnZlclN0cmVhbVByb3ZpZGVyLmgiDQorI2luY2x1ZGUgIm5ldHdvcmt0YWJsZXMyL3N0cmVhbS9GRElPU3RyZWFtLmgiDQorI2luY2x1ZGUgIm5ldHdvcmt0YWJsZXMyL3V0aWwvSU9FeGNlcHRpb24uaCINCisNCisjaW5jbHVkZSA8c3RyaW5ncy5oPg0KKyNpbmNsdWRlIDxjc3RyaW5nPg0KKyNpbmNsdWRlIDxlcnJuby5oPg0KKyNpZmRlZiBfV1JTX0tFUk5FTA0KKyNpbmNsdWRlIDxpbmV0TGliLmg+DQorI2luY2x1ZGUgPHNlbGVjdExpYi5oPg0KKyNpbmNsdWRlIDxzb2NrTGliLmg+DQorI2luY2x1ZGUgPHRhc2tMaWIuaD4NCisjaW5jbHVkZSA8dXNyTGliLmg+DQorI2luY2x1ZGUgPGlvTGliLmg+DQorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4NCisjaW5jbHVkZSA8bmV0aW5ldC90Y3AuaD4NCisjZWxzZQ0KKyNpbmNsdWRlIDxzdGRsaWIuaD4NCisjaW5jbHVkZSA8c3RkaW8uaD4NCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+DQorI2luY2x1ZGUgPHVuaXN0ZC5oPg0KKyNpZmRlZiBXSU4zMg0KKyNpbmNsdWRlIDx3aW5kb3dzLmg+DQorI2luY2x1ZGUgPHdpbnNvY2suaD4NCisjaW5jbHVkZSA8d2luc29jazIuaD4NCisjaW5jbHVkZSA8d2luaW5ldC5oPg0KKyNpbmNsdWRlIDx3czJ0Y3BpcC5oPg0KKyNlbHNlDQorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4NCisjaW5jbHVkZSA8c3lzL3VuLmg+DQorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4NCisjaW5jbHVkZSA8bmV0aW5ldC90Y3AuaD4NCisjZW5kaWYNCisjZW5kaWYNCisNCisjaWZuZGVmIEVSUk9SDQorI2RlZmluZSBFUlJPUiAtMQ0KKyNlbmRpZg0KKw0KKyNpZiBkZWZpbmVkKFdJTjMyKSB8fCBkZWZpbmVkKF9XUlNfS0VSTkVMKQ0KK3R5cGVkZWYgaW50IGFkZHJsZW5fdDsNCisjZWxzZQ0KK3R5cGVkZWYgc29ja2xlbl90IGFkZHJsZW5fdDsNCisjZW5kaWYNCisNCisNCitTb2NrZXRTZXJ2ZXJTdHJlYW1Qcm92aWRlcjo6U29ja2V0U2VydmVyU3RyZWFtUHJvdmlkZXIoaW50IHBvcnQpew0KKwlzdHJ1Y3Qgc29ja2FkZHJfaW4gc2VydmVyQWRkcjsNCisJaW50IHNvY2tBZGRyU2l6ZSA9IHNpemVvZihzZXJ2ZXJBZGRyKTsNCisJbWVtc2V0KCZzZXJ2ZXJBZGRyLCAwLCBzb2NrQWRkclNpemUpOw0KKw0KKyNpZmRlZiBfV1JTX0tFUk5FTA0KKwlzZXJ2ZXJBZGRyLnNpbl9sZW4gPSAodV9jaGFyKXNvY2tBZGRyU2l6ZTsNCisjZW5kaWYNCisJc2VydmVyQWRkci5zaW5fZmFtaWx5ID0gQUZfSU5FVDsNCisJc2VydmVyQWRkci5zaW5fcG9ydCA9IGh0b25zKHBvcnQpOw0KKwlzZXJ2ZXJBZGRyLnNpbl9hZGRyLnNfYWRkciA9IGh0b25sKElOQUREUl9BTlkpOw0KKw0KKwlpZiAoKHNlcnZlclNvY2tldCA9IHNvY2tldChBRl9JTkVULCBTT0NLX1NUUkVBTSwgMCkpID09IEVSUk9SKQ0KKwl7DQorCQl0aHJvdyBJT0V4Y2VwdGlvbigiRXJyb3IgY3JlYXRpbmcgc2VydmVyIHNvY2tldCIsIGVycm5vKTsNCisJfQ0KKw0KKwkvLyBTZXQgdGhlIFRDUCBzb2NrZXQgc28gdGhhdCBpdCBjYW4gYmUgcmV1c2VkIGlmIGl0IGlzIGluIHRoZSB3YWl0IHN0YXRlLg0KKwlpbnQgcmV1c2VBZGRyID0gMTsNCisJc2V0c29ja29wdChzZXJ2ZXJTb2NrZXQsIFNPTF9TT0NLRVQsIFNPX1JFVVNFQUREUiwgKGNoYXIgKikmcmV1c2VBZGRyLCBzaXplb2YocmV1c2VBZGRyKSk7DQorDQorCS8vIEJpbmQgc29ja2V0IHRvIGxvY2FsIGFkZHJlc3MuDQorCWlmIChiaW5kKHNlcnZlclNvY2tldCwgKHN0cnVjdCBzb2NrYWRkciAqKSZzZXJ2ZXJBZGRyLCBzb2NrQWRkclNpemUpID09IEVSUk9SKQ0KKwl7DQorCQk6OmNsb3NlKHNlcnZlclNvY2tldCk7DQorCQl0aHJvdyBJT0V4Y2VwdGlvbigiQ291bGQgbm90IGJpbmQgc2VydmVyIHNvY2tldCIsIGVycm5vKTsNCisJfQ0KKw0KKwlpZiAobGlzdGVuKHNlcnZlclNvY2tldCwgMSkgPT0gRVJST1IpDQorCXsNCisJCTo6Y2xvc2Uoc2VydmVyU29ja2V0KTsNCisJCXRocm93IElPRXhjZXB0aW9uKCJDb3VsZCBub3QgbGlzdGVuIG9uIHNlcnZlciBzb2NrZXQiLCBlcnJubyk7DQorCX0NCit9DQorU29ja2V0U2VydmVyU3RyZWFtUHJvdmlkZXI6On5Tb2NrZXRTZXJ2ZXJTdHJlYW1Qcm92aWRlcigpew0KKwljbG9zZSgpOw0KK30NCisNCisNCitJT1N0cmVhbSogU29ja2V0U2VydmVyU3RyZWFtUHJvdmlkZXI6OmFjY2VwdCgpew0KKwlzdHJ1Y3QgdGltZXZhbCB0aW1lb3V0Ow0KKwkvLyBDaGVjayBmb3IgYSBzaHV0ZG93biBvbmNlIHBlciBzZWNvbmQNCisJdGltZW91dC50dl9zZWMgPSAxOw0KKwl0aW1lb3V0LnR2X3VzZWMgPSAwOw0KKwl3aGlsZSAodHJ1ZSkNCisJew0KKwkJZmRfc2V0IGZkU2V0Ow0KKw0KKwkJRkRfWkVSTygmZmRTZXQpOw0KKwkJRkRfU0VUKHNlcnZlclNvY2tldCwgJmZkU2V0KTsNCisJCWlmIChzZWxlY3QoRkRfU0VUU0laRSwgJmZkU2V0LCBOVUxMLCBOVUxMLCAmdGltZW91dCkgPiAwKQ0KKwkJew0KKwkJCWlmIChGRF9JU1NFVChzZXJ2ZXJTb2NrZXQsICZmZFNldCkpDQorCQkJew0KKwkJCQlzdHJ1Y3Qgc29ja2FkZHIgY2xpZW50QWRkciA9IHswfTsNCisJCQkJYWRkcmxlbl90IGNsaWVudEFkZHJTaXplID0gMDsNCisJCQkJaW50IGNvbm5lY3RlZFNvY2tldCA9IDo6YWNjZXB0KHNlcnZlclNvY2tldCwgJmNsaWVudEFkZHIsICZjbGllbnRBZGRyU2l6ZSk7DQorCQkJCWlmIChjb25uZWN0ZWRTb2NrZXQgPT0gRVJST1IpDQorCQkJCQlyZXR1cm4gTlVMTDsNCisJCQkJDQorCQkJCWludCBvbiA9IDE7DQorCQkJCXNldHNvY2tvcHQoY29ubmVjdGVkU29ja2V0LCBJUFBST1RPX1RDUCwgVENQX05PREVMQVksIChjaGFyICopJm9uLCBzaXplb2Yob24pKTsNCisJCQkJDQorCQkJCXJldHVybiBuZXcgRkRJT1N0cmVhbShjb25uZWN0ZWRTb2NrZXQpOw0KKwkJCX0NCisJCX0NCisJfQ0KKwlyZXR1cm4gTlVMTDsNCit9DQorDQordm9pZCBTb2NrZXRTZXJ2ZXJTdHJlYW1Qcm92aWRlcjo6Y2xvc2UoKXsNCisJOjpjbG9zZShzZXJ2ZXJTb2NrZXQpOw0KK30NCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9uZXR3b3JrdGFibGVzMi9zdHJlYW0vU29ja2V0U2VydmVyU3RyZWFtUHJvdmlkZXIuaCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL25ldHdvcmt0YWJsZXMyL3N0cmVhbS9Tb2NrZXRTZXJ2ZXJTdHJlYW1Qcm92aWRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjY2YzZWUKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9uZXR3b3JrdGFibGVzMi9zdHJlYW0vU29ja2V0U2VydmVyU3RyZWFtUHJvdmlkZXIuaApAQCAtMCwwICsxLDMzIEBACisvKg0KKyAqIFNvY2tldFNlcnZlclN0cmVhbVByb3ZpZGVyLmgNCisgKg0KKyAqICBDcmVhdGVkIG9uOiBTZXAgMjcsIDIwMTINCisgKiAgICAgIEF1dGhvcjogTWl0Y2hlbGwgV2lsbHMNCisgKi8NCisNCisjaWZuZGVmIFNPQ0tFVFNFUlZFUlNUUkVBTVBST1ZJREVSX0hfDQorI2RlZmluZSBTT0NLRVRTRVJWRVJTVFJFQU1QUk9WSURFUl9IXw0KKw0KKw0KK2NsYXNzIFNvY2tldFNlcnZlclN0cmVhbVByb3ZpZGVyOw0KKw0KKyNpbmNsdWRlICJJT1N0cmVhbS5oIg0KKyNpbmNsdWRlICJJT1N0cmVhbVByb3ZpZGVyLmgiDQorDQorDQorDQorDQorY2xhc3MgU29ja2V0U2VydmVyU3RyZWFtUHJvdmlkZXIgOiBwdWJsaWMgSU9TdHJlYW1Qcm92aWRlcnsNCitwcml2YXRlOg0KKwlpbnQgc2VydmVyU29ja2V0Ow0KK3B1YmxpYzoNCisJU29ja2V0U2VydmVyU3RyZWFtUHJvdmlkZXIoaW50IHBvcnQpOw0KKwl2aXJ0dWFsIH5Tb2NrZXRTZXJ2ZXJTdHJlYW1Qcm92aWRlcigpOw0KKwlJT1N0cmVhbSogYWNjZXB0KCk7DQorCXZvaWQgY2xvc2UoKTsNCit9Ow0KKw0KKw0KKw0KKw0KKyNlbmRpZiAvKiBTT0NLRVRTRVJWRVJTVFJFQU1QUk9WSURFUl9IXyAqLw0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL25ldHdvcmt0YWJsZXMyL3N0cmVhbS9Tb2NrZXRTdHJlYW1GYWN0b3J5LmNwcCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL25ldHdvcmt0YWJsZXMyL3N0cmVhbS9Tb2NrZXRTdHJlYW1GYWN0b3J5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTNhZjYwCi0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvbmV0d29ya3RhYmxlczIvc3RyZWFtL1NvY2tldFN0cmVhbUZhY3RvcnkuY3BwCkBAIC0wLDAgKzEsNjcgQEAKKy8qDQorICogU29ja2V0U3RyZWFtRmFjdG9yeS5jcHANCisgKg0KKyAqICBDcmVhdGVkIG9uOiBOb3YgMywgMjAxMg0KKyAqICAgICAgQXV0aG9yOiBNaXRjaGVsbCBXaWxscw0KKyAqLw0KKw0KKw0KKyNpbmNsdWRlIDxjc3RyaW5nPg0KKyNpZmRlZiBfV1JTX0tFUk5FTA0KKyNlbHNlDQorCSNpbmNsdWRlIDxzdGRsaWIuaD4NCisJI2luY2x1ZGUgPHN0ZGlvLmg+DQorCSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4NCisJI2luY2x1ZGUgPHVuaXN0ZC5oPg0KKwkjaWZkZWYgV0lOMzINCisJICAgI2luY2x1ZGUgPHdpbnNvY2suaD4NCisJICAgI2luY2x1ZGUgPHdpbnNvY2syLmg+DQorCSNlbHNlDQorCQkjaW5jbHVkZSA8c3lzL3NvY2tldC5oPg0KKwkJI2luY2x1ZGUgPHN5cy91bi5oPg0KKyAgICAgICAgICAgICAgICAjaW5jbHVkZSA8bmV0ZGIuaD4NCisJCSNpbmNsdWRlIDxuZXRpbmV0L2luLmg+DQorCQkjaW5jbHVkZSA8bmV0aW5ldC90Y3AuaD4NCisJI2VuZGlmDQorI2VuZGlmDQorI2luY2x1ZGUgIm5ldHdvcmt0YWJsZXMyL3N0cmVhbS9GRElPU3RyZWFtLmgiDQorI2luY2x1ZGUgIm5ldHdvcmt0YWJsZXMyL3N0cmVhbS9Tb2NrZXRTdHJlYW1GYWN0b3J5LmgiDQorDQorDQorU29ja2V0U3RyZWFtRmFjdG9yeTo6U29ja2V0U3RyZWFtRmFjdG9yeShjb25zdCBjaGFyKiBfaG9zdCwgaW50IF9wb3J0KTpob3N0KF9ob3N0KSwgcG9ydChfcG9ydCl7fQ0KKw0KK1NvY2tldFN0cmVhbUZhY3Rvcnk6On5Tb2NrZXRTdHJlYW1GYWN0b3J5KCl7fQ0KKw0KK0lPU3RyZWFtKiBTb2NrZXRTdHJlYW1GYWN0b3J5OjpjcmVhdGVTdHJlYW0oKXsNCisjaWZkZWYgX1dSU19LRVJORUwNCisJLy9jcmlvIGNsaWVudCBub3Qgc3VwcG9ydGVkDQorCXJldHVybiBOVUxMOw0KKyNlbHNlDQorICAgIHN0cnVjdCBzb2NrYWRkcl9pbiBzZXJ2X2FkZHI7DQorICAgIHN0cnVjdCBob3N0ZW50ICpzZXJ2ZXI7DQorDQorICAgIGludCBzb2NrZmQgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19TVFJFQU0sIDApOw0KKyAgICBpZiAoc29ja2ZkIDwgMCl7DQorICAgICAgICAvL2Vycm9yKCJFUlJPUiBvcGVuaW5nIHNvY2tldCIpOw0KKyAgICAgICAgcmV0dXJuIE5VTEw7DQorICAgIH0NCisgICAgc2VydmVyID0gZ2V0aG9zdGJ5bmFtZShob3N0KTsNCisgICAgaWYgKHNlcnZlciA9PSBOVUxMKSB7DQorICAgICAgICAvL2ZwcmludGYoc3RkZXJyLCJFUlJPUiwgbm8gc3VjaCBob3N0XG4iKTsNCisgICAgICAgIHJldHVybiBOVUxMOw0KKyAgICB9DQorCW1lbXNldCgmc2Vydl9hZGRyLCAwLCBzaXplb2Yoc2Vydl9hZGRyKSk7DQorICAgIHNlcnZfYWRkci5zaW5fZmFtaWx5ID0gQUZfSU5FVDsNCisgICAgbWVtY3B5KCZzZXJ2X2FkZHIuc2luX2FkZHIuc19hZGRyLCBzZXJ2ZXItPmhfYWRkciwgc2VydmVyLT5oX2xlbmd0aCk7DQorICAgIHNlcnZfYWRkci5zaW5fcG9ydCA9IGh0b25zKHBvcnQpOw0KKyAgICBpZiAoY29ubmVjdChzb2NrZmQsKHN0cnVjdCBzb2NrYWRkciAqKSAmc2Vydl9hZGRyLHNpemVvZihzZXJ2X2FkZHIpKSA8IDApIHsNCisgICAgICAgIC8vZXJyb3IoIkVSUk9SIGNvbm5lY3RpbmciKTsNCisgICAgCXJldHVybiBOVUxMOw0KKyAgICB9Ly9UT0RPIGNsb3NlIGZkIGlmIGFuIGVycm9yIG9jY3VyZWQNCisNCisJaW50IG9uID0gMTsNCisJc2V0c29ja29wdChzb2NrZmQsIElQUFJPVE9fVENQLCBUQ1BfTk9ERUxBWSwgKGNoYXIgKikmb24sIHNpemVvZihvbikpOw0KKw0KKwlyZXR1cm4gbmV3IEZESU9TdHJlYW0oc29ja2ZkKTsNCisjZW5kaWYNCit9DQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvbmV0d29ya3RhYmxlczIvc3RyZWFtL1NvY2tldFN0cmVhbUZhY3RvcnkuaCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL25ldHdvcmt0YWJsZXMyL3N0cmVhbS9Tb2NrZXRTdHJlYW1GYWN0b3J5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjdhMDZiYwotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL25ldHdvcmt0YWJsZXMyL3N0cmVhbS9Tb2NrZXRTdHJlYW1GYWN0b3J5LmgKQEAgLTAsMCArMSwzNiBAQAorLyoNCisgKiBTb2NrZXRTdHJlYW1GYWN0b3J5LmgNCisgKg0KKyAqICBDcmVhdGVkIG9uOiBOb3YgMywgMjAxMg0KKyAqICAgICAgQXV0aG9yOiBNaXRjaGVsbCBXaWxscw0KKyAqLw0KKw0KKyNpZm5kZWYgU09DS0VUU1RSRUFNRkFDVE9SWV9IXw0KKyNkZWZpbmUgU09DS0VUU1RSRUFNRkFDVE9SWV9IXw0KKw0KK2NsYXNzIFNvY2tldFN0cmVhbUZhY3Rvcnk7DQorDQorI2luY2x1ZGUgIm5ldHdvcmt0YWJsZXMyL3N0cmVhbS9JT1N0cmVhbUZhY3RvcnkuaCINCisjaW5jbHVkZSA8c3RyaW5nPg0KKw0KKy8qKg0KKyAqIA0KKyAqIEBhdXRob3IgbXdpbGxzDQorICoNCisgKi8NCitjbGFzcyBTb2NrZXRTdHJlYW1GYWN0b3J5IDogcHVibGljIElPU3RyZWFtRmFjdG9yeXsNCitwcml2YXRlOg0KKwljb25zdCBjaGFyKiBob3N0Ow0KKwljb25zdCBpbnQgcG9ydDsNCisNCitwdWJsaWM6DQorCVNvY2tldFN0cmVhbUZhY3RvcnkoY29uc3QgY2hhciogaG9zdCwgaW50IHBvcnQpOw0KKwl2aXJ0dWFsIH5Tb2NrZXRTdHJlYW1GYWN0b3J5KCk7DQorDQorCUlPU3RyZWFtKiBjcmVhdGVTdHJlYW0oKTsNCisNCit9Ow0KKw0KKw0KKw0KKyNlbmRpZiAvKiBTT0NLRVRTVFJFQU1GQUNUT1JZX0hfICovDQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvbmV0d29ya3RhYmxlczIvc3RyZWFtL1NvY2tldFN0cmVhbXMuY3BwIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvbmV0d29ya3RhYmxlczIvc3RyZWFtL1NvY2tldFN0cmVhbXMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxOGNlOWYKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9uZXR3b3JrdGFibGVzMi9zdHJlYW0vU29ja2V0U3RyZWFtcy5jcHAKQEAgLTAsMCArMSwyMSBAQAorLyoNCisgKiBTb2NrZXRTdHJlYW1zLmNwcA0KKyAqDQorICogIENyZWF0ZWQgb246IFNlcCAyNywgMjAxMg0KKyAqICAgICAgQXV0aG9yOiBNaXRjaGVsbCBXaWxscw0KKyAqLw0KKw0KKyNpbmNsdWRlICJuZXR3b3JrdGFibGVzMi9zdHJlYW0vU29ja2V0U3RyZWFtcy5oIg0KKyNpbmNsdWRlICJuZXR3b3JrdGFibGVzMi9zdHJlYW0vU29ja2V0U3RyZWFtRmFjdG9yeS5oIg0KKyNpbmNsdWRlICJuZXR3b3JrdGFibGVzMi9zdHJlYW0vU29ja2V0U2VydmVyU3RyZWFtUHJvdmlkZXIuaCINCisNCisNCisNCitJT1N0cmVhbUZhY3RvcnkmIFNvY2tldFN0cmVhbXM6Om5ld1N0cmVhbUZhY3RvcnkoY29uc3QgY2hhciogaG9zdCwgaW50IHBvcnQpew0KKwlyZXR1cm4gKm5ldyBTb2NrZXRTdHJlYW1GYWN0b3J5KGhvc3QsIHBvcnQpOw0KK30NCisNCitJT1N0cmVhbVByb3ZpZGVyJiBTb2NrZXRTdHJlYW1zOjpuZXdTdHJlYW1Qcm92aWRlcihpbnQgcG9ydCl7DQorCXJldHVybiAqbmV3IFNvY2tldFNlcnZlclN0cmVhbVByb3ZpZGVyKHBvcnQpOw0KK30NCisNCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9uZXR3b3JrdGFibGVzMi9zdHJlYW0vU29ja2V0U3RyZWFtcy5oIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvbmV0d29ya3RhYmxlczIvc3RyZWFtL1NvY2tldFN0cmVhbXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODQ3MzIxCi0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvbmV0d29ya3RhYmxlczIvc3RyZWFtL1NvY2tldFN0cmVhbXMuaApAQCAtMCwwICsxLDQ4IEBACisvKg0KKyAqIFNvY2tldFN0cmVhbXMuaA0KKyAqDQorICogIENyZWF0ZWQgb246IFNlcCAyNywgMjAxMg0KKyAqICAgICAgQXV0aG9yOiBNaXRjaGVsbCBXaWxscw0KKyAqLw0KKw0KKyNpZm5kZWYgU09DS0VUU1RSRUFNU19IXw0KKyNkZWZpbmUgU09DS0VUU1RSRUFNU19IXw0KKw0KKw0KK2NsYXNzIFNvY2tldFN0cmVhbXM7DQorDQorDQorI2luY2x1ZGUgIklPU3RyZWFtRmFjdG9yeS5oIg0KKyNpbmNsdWRlICJJT1N0cmVhbVByb3ZpZGVyLmgiDQorDQorDQorDQorLyoqDQorICogU3RhdGljIGZhY3RvcnkgZm9yIHNvY2tldCBzdHJlYW0gZmFjdG9yaWVzIGFuZCBwcm92aWRlcnMNCisgKiANCisgKiBAYXV0aG9yIE1pdGNoZWxsDQorICoNCisgKi8NCitjbGFzcyBTb2NrZXRTdHJlYW1zIHsNCitwdWJsaWM6DQorCS8qKg0KKwkgKiBDcmVhdGUgYSBuZXcgSU9TdHJlYW0gZmFjdG9yeSANCisJICogQHBhcmFtIGhvc3QNCisJICogQHBhcmFtIHBvcnQNCisJICogQHJldHVybiBhIElPU3RyZWFtRmFjdG9yeSB0aGF0IHdpbGwgY3JlYXRlIFNvY2tldCBDb25uZWN0aW9ucyBvbiB0aGUgZ2l2ZW4gaG9zdCBhbmQgcG9ydA0KKwkgKiBAdGhyb3dzIElPRXhjZXB0aW9uDQorCSAqLw0KKwlzdGF0aWMgSU9TdHJlYW1GYWN0b3J5JiBuZXdTdHJlYW1GYWN0b3J5KGNvbnN0IGNoYXIqIGhvc3QsIGludCBwb3J0KTsNCisNCisJLyoqDQorCSAqIENyZWF0ZSBhIG5ldyBJT1N0cmVhbSBwcm92aWRlcg0KKwkgKiBAcGFyYW0gcG9ydA0KKwkgKiBAcmV0dXJuIGFuIElPU3RyZWFtUHJvdmlkZXIgZm9yIGEgc29ja2V0IHNlcnZlciBvbiB0aGUgZ2l2ZW4gcG9ydA0KKwkgKiBAdGhyb3dzIElPRXhjZXB0aW9uDQorCSAqLw0KKwlzdGF0aWMgSU9TdHJlYW1Qcm92aWRlciYgbmV3U3RyZWFtUHJvdmlkZXIoaW50IHBvcnQpOw0KK307DQorDQorDQorDQorI2VuZGlmIC8qIFNPQ0tFVFNUUkVBTVNfSF8gKi8NCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9uZXR3b3JrdGFibGVzMi90aHJlYWQvRGVmYXVsdFRocmVhZE1hbmFnZXIuaCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL25ldHdvcmt0YWJsZXMyL3RocmVhZC9EZWZhdWx0VGhyZWFkTWFuYWdlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkN2I3NzkKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9uZXR3b3JrdGFibGVzMi90aHJlYWQvRGVmYXVsdFRocmVhZE1hbmFnZXIuaApAQCAtMCwwICsxLDQyIEBACisvKg0KKyAqIERlZmF1bHRUaHJlYWRNYW5hZ2VyLmgNCisgKg0KKyAqICBDcmVhdGVkIG9uOiBTZXAgMjEsIDIwMTINCisgKiAgICAgIEF1dGhvcjogTWl0Y2hlbGwgV2lsbHMNCisgKi8NCisNCisjaWZuZGVmIERFRkFVTFRUSFJFQURNQU5BR0VSX0hfDQorI2RlZmluZSBERUZBVUxUVEhSRUFETUFOQUdFUl9IXw0KKw0KK2NsYXNzIERlZmF1bHRUaHJlYWRNYW5hZ2VyOw0KK2NsYXNzIFBlcmlvZGljTlRUaHJlYWQ7DQorDQorI2luY2x1ZGUgIm5ldHdvcmt0YWJsZXMyL3RocmVhZC9QZXJpb2RpY1J1bm5hYmxlLmgiDQorI2luY2x1ZGUgIm5ldHdvcmt0YWJsZXMyL3RocmVhZC9OVFRocmVhZE1hbmFnZXIuaCINCisjaW5jbHVkZSAibmV0d29ya3RhYmxlczIvdGhyZWFkL05UVGhyZWFkLmgiDQorI2luY2x1ZGUgIlRhc2suaCINCisNCisNCisNCisNCitjbGFzcyBEZWZhdWx0VGhyZWFkTWFuYWdlciA6IHB1YmxpYyBOVFRocmVhZE1hbmFnZXJ7DQorCXZpcnR1YWwgTlRUaHJlYWQqIG5ld0Jsb2NraW5nUGVyaW9kaWNUaHJlYWQoUGVyaW9kaWNSdW5uYWJsZSogciwgY29uc3QgY2hhciogbmFtZSk7DQorfTsNCisNCitjbGFzcyBQZXJpb2RpY05UVGhyZWFkIDogcHVibGljIE5UVGhyZWFkIHsNCitwcml2YXRlOg0KKwljb25zdCBjaGFyKiBuYW1lOw0KKwlUYXNrKiB0aHJlYWQ7DQorCVBlcmlvZGljUnVubmFibGUqIHI7DQorCWJvb2wgcnVuOw0KKwlpbnQgX3Rhc2tNYWluKCk7DQorCXN0YXRpYyBpbnQgdGFza01haW4oUGVyaW9kaWNOVFRocmVhZCogbyk7DQorcHVibGljOg0KKwlQZXJpb2RpY05UVGhyZWFkKFBlcmlvZGljUnVubmFibGUqIHIsIGNvbnN0IGNoYXIqIG5hbWUpOw0KKwl2aXJ0dWFsIH5QZXJpb2RpY05UVGhyZWFkKCk7DQorCXZpcnR1YWwgdm9pZCBzdG9wKCk7DQorCXZpcnR1YWwgYm9vbCBpc1J1bm5pbmcoKTsNCit9Ow0KKw0KKw0KKyNlbmRpZiAvKiBERUZBVUxUVEhSRUFETUFOQUdFUl9IXyAqLw0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL25ldHdvcmt0YWJsZXMyL3RocmVhZC9EZWZhdWx0VGhyZWFkTWFuZ2VyLmNwcCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL25ldHdvcmt0YWJsZXMyL3RocmVhZC9EZWZhdWx0VGhyZWFkTWFuZ2VyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOWQ1NGIxCi0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvbmV0d29ya3RhYmxlczIvdGhyZWFkL0RlZmF1bHRUaHJlYWRNYW5nZXIuY3BwCkBAIC0wLDAgKzEsNTAgQEAKKy8qDQorICogRGVmYXVsdFRocmVhZE1hbmdlci5jcHANCisgKg0KKyAqICBDcmVhdGVkIG9uOiBTZXAgMjEsIDIwMTINCisgKiAgICAgIEF1dGhvcjogTWl0Y2hlbGwgV2lsbHMNCisgKi8NCisNCisjaW5jbHVkZSAibmV0d29ya3RhYmxlczIvdGhyZWFkL0RlZmF1bHRUaHJlYWRNYW5hZ2VyLmgiDQorI2luY2x1ZGUgPHN0ZGlvLmg+DQorDQorDQorUGVyaW9kaWNOVFRocmVhZDo6UGVyaW9kaWNOVFRocmVhZChQZXJpb2RpY1J1bm5hYmxlKiBfciwgY29uc3QgY2hhciogX25hbWUpIDogDQorCQkJbmFtZShfbmFtZSksIHRocmVhZChuZXcgVGFzayhuYW1lLCAoRlVOQ1BUUilQZXJpb2RpY05UVGhyZWFkOjp0YXNrTWFpbikpLCByKF9yKSwgcnVuKHRydWUpew0KKwlmcHJpbnRmKHN0ZG91dCwgIlN0YXJ0aW5nIHRhc2s6ICVzXG4iLCBuYW1lKTsNCisJZmZsdXNoKHN0ZG91dCk7DQorCXRocmVhZC0+U3RhcnQoKFVJTlQzMil0aGlzKTsNCit9DQorDQorUGVyaW9kaWNOVFRocmVhZDo6flBlcmlvZGljTlRUaHJlYWQoKXsNCisJLy9UT0RPIHNvbWVob3cgZG8gdGhpcyBhc3luYw0KKwkvL2RlbGV0ZSB0aHJlYWQ7DQorfQ0KK2ludCBQZXJpb2RpY05UVGhyZWFkOjp0YXNrTWFpbihQZXJpb2RpY05UVGhyZWFkKiBvKXsvL3N0YXRpYyB3cmFwcGVyDQorCXJldHVybiBvLT5fdGFza01haW4oKTsNCit9DQoraW50IFBlcmlvZGljTlRUaHJlYWQ6Ol90YXNrTWFpbigpew0KKwl0cnkgew0KKwkJd2hpbGUocnVuKXsNCisJCQlyLT5ydW4oKTsNCisJCX0NCisJfSBjYXRjaCAoLi4uKSB7DQorCQlmcHJpbnRmKHN0ZG91dCwgIlRhc2sgZXhpdGVkIHdpdGggdW5jYXVnaHQgZXhjZXB0aW9uICVzXG4iLCBuYW1lKTsNCisJCWZmbHVzaChzdGRvdXQpOw0KKwkJcmV0dXJuIDE7DQorCX0NCisJZnByaW50ZihzdGRvdXQsICJUYXNrIGV4aXRlZCBub3JtYWxseTogJXNcbiIsIG5hbWUpOw0KKwlmZmx1c2goc3Rkb3V0KTsNCisJcmV0dXJuIDA7DQorfQ0KK3ZvaWQgUGVyaW9kaWNOVFRocmVhZDo6c3RvcCgpIHsNCisJcnVuID0gZmFsc2U7DQorCS8vVE9ETyB0aHJlYWQtPlN0b3AoKTsNCit9DQorYm9vbCBQZXJpb2RpY05UVGhyZWFkOjppc1J1bm5pbmcoKSB7DQorCXJldHVybiB0aHJlYWQtPklzUmVhZHkoKTsNCit9DQorDQorTlRUaHJlYWQqIERlZmF1bHRUaHJlYWRNYW5hZ2VyOjpuZXdCbG9ja2luZ1BlcmlvZGljVGhyZWFkKFBlcmlvZGljUnVubmFibGUqIHIsIGNvbnN0IGNoYXIqIG5hbWUpIHsNCisJcmV0dXJuIG5ldyBQZXJpb2RpY05UVGhyZWFkKHIsIG5hbWUpOw0KK30NCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9uZXR3b3JrdGFibGVzMi90aHJlYWQvTlRUaHJlYWQuaCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL25ldHdvcmt0YWJsZXMyL3RocmVhZC9OVFRocmVhZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3NDQwYjMKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9uZXR3b3JrdGFibGVzMi90aHJlYWQvTlRUaHJlYWQuaApAQCAtMCwwICsxLDM0IEBACisvKg0KKyAqIE5UVGhyZWFkLmgNCisgKg0KKyAqICBDcmVhdGVkIG9uOiBTZXAgMjEsIDIwMTINCisgKiAgICAgIEF1dGhvcjogTWl0Y2hlbGwgV2lsbHMNCisgKi8NCisNCisjaWZuZGVmIE5UVEhSRUFEX0hfDQorI2RlZmluZSBOVFRIUkVBRF9IXw0KKw0KKy8qKg0KKyAqIFJlcHJlc2VudHMgYSB0aHJlYWQgaW4gdGhlIG5ldHdvcmsgdGFibGVzIHN5c3RlbQ0KKyAqIEBhdXRob3IgbXdpbGxzDQorICoNCisgKi8NCitjbGFzcyBOVFRocmVhZA0KK3sNCitwdWJsaWM6DQorCXZpcnR1YWwgfk5UVGhyZWFkKCkNCisJew0KKwl9DQorCTsNCisJLyoqDQorCSAqIHN0b3AgdGhlIHRocmVhZA0KKwkgKi8NCisJdmlydHVhbCB2b2lkIHN0b3AoKSA9IDA7DQorDQorCS8qKg0KKwkgKiBAcmV0dXJuIHRydWUgaWYgdGhlIHRocmVhZCBpcyBydW5uaW5nDQorCSAqLw0KKwl2aXJ0dWFsIGJvb2wgaXNSdW5uaW5nKCkgPSAwOw0KK307DQorDQorI2VuZGlmIC8qIE5UVEhSRUFEX0hfICovDQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvbmV0d29ya3RhYmxlczIvdGhyZWFkL05UVGhyZWFkTWFuYWdlci5oIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvbmV0d29ya3RhYmxlczIvdGhyZWFkL05UVGhyZWFkTWFuYWdlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyNmM4NDYKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9uZXR3b3JrdGFibGVzMi90aHJlYWQvTlRUaHJlYWRNYW5hZ2VyLmgKQEAgLTAsMCArMSwzNiBAQAorLyoNCisgKiBOVFRocmVhZE1hbmFnZXIuaA0KKyAqDQorICogIENyZWF0ZWQgb246IFNlcCAyMSwgMjAxMg0KKyAqICAgICAgQXV0aG9yOiBNaXRjaGVsbCBXaWxscw0KKyAqLw0KKw0KKyNpZm5kZWYgTlRUSFJFQURNQU5BR0VSX0hfDQorI2RlZmluZSBOVFRIUkVBRE1BTkFHRVJfSF8NCisNCitjbGFzcyBOVFRocmVhZE1hbmFnZXI7DQorDQorI2luY2x1ZGUgIk5UVGhyZWFkLmgiDQorI2luY2x1ZGUgIm5ldHdvcmt0YWJsZXMyL3RocmVhZC9QZXJpb2RpY1J1bm5hYmxlLmgiDQorDQorLyoqDQorICogQSB0aHJlYWQgbWFuYWdlciB0aGF0IGNhbiBiZSB1c2VkIHRvIG9idGFpbiBuZXcgdGhyZWFkcw0KKyAqIA0KKyAqIEBhdXRob3IgTWl0Y2hlbGwNCisgKg0KKyAqLw0KK2NsYXNzIE5UVGhyZWFkTWFuYWdlcg0KK3sNCitwdWJsaWM6DQorCXZpcnR1YWwgfk5UVGhyZWFkTWFuYWdlcigpDQorCXsNCisJfQ0KKwkvKioNCisJICogQHBhcmFtIHINCisJICogQHBhcmFtIG5hbWUgdGhlIG5hbWUgb2YgdGhlIHRocmVhZA0KKwkgKiBAcmV0dXJuIGEgdGhyZWFkIHRoYXQgd2lsbCBydW4gdGhlIHByb3ZpZGVkIHJ1bm5hYmxlIHJlcGVhdGVkbHkgd2l0aCB0aGUgYXNzdW1wdGlvbiB0aGF0IHRoZSBydW5uYWJsZSB3aWxsIGJsb2NrDQorCSAqLw0KKwl2aXJ0dWFsIE5UVGhyZWFkKiBuZXdCbG9ja2luZ1BlcmlvZGljVGhyZWFkKFBlcmlvZGljUnVubmFibGUqIHIsIGNvbnN0IGNoYXIqIG5hbWUpID0gMDsNCit9Ow0KKw0KKyNlbmRpZiAvKiBOVFRIUkVBRE1BTkFHRVJfSF8gKi8NCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9uZXR3b3JrdGFibGVzMi90aHJlYWQvUGVyaW9kaWNSdW5uYWJsZS5oIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvbmV0d29ya3RhYmxlczIvdGhyZWFkL1BlcmlvZGljUnVubmFibGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjZlNzljCi0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvbmV0d29ya3RhYmxlczIvdGhyZWFkL1BlcmlvZGljUnVubmFibGUuaApAQCAtMCwwICsxLDMxIEBACisvKg0KKyAqIFBlcmlvZGljUnVubmFibGUuaA0KKyAqDQorICogIENyZWF0ZWQgb246IFNlcCAyMSwgMjAxMg0KKyAqICAgICAgQXV0aG9yOiBNaXRjaGVsbCBXaWxscw0KKyAqLw0KKw0KKyNpZm5kZWYgUEVSSU9ESUNSVU5OQUJMRV9IXw0KKyNkZWZpbmUgUEVSSU9ESUNSVU5OQUJMRV9IXw0KKw0KKy8qKg0KKyAqIEEgcnVubmFibGUgd2hlcmUgdGhlIHJ1biBtZXRob2Qgd2lsbCBiZSBjYWxsZWQgcGVyaW9kaWNhbGx5IA0KKyAqIA0KKyAqIEBhdXRob3IgTWl0Y2hlbGwNCisgKg0KKyAqLw0KK2NsYXNzIFBlcmlvZGljUnVubmFibGUNCit7DQorcHVibGljOg0KKwl2aXJ0dWFsIH5QZXJpb2RpY1J1bm5hYmxlKCkNCisJew0KKwl9DQorCS8qKg0KKwkgKiB0aGUgbWV0aG9kIHRoYXQgd2lsbCBiZSBjYWxsZWQgcGVyaW9kaWNhbGx5IG9uIGEgdGhyZWFkDQorCSAqIA0KKwkgKiBAdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHRocm93biB3aGVuIHRoZSB0aHJlYWQgaXMgc3VwcG9zZWQgdG8gYmUgaW50ZXJydXB0ZWQgYW5kIHN0b3AgKGltcGxlbWVudGVycyBzaG91bGQgYWx3YXlzIGxldCB0aGlzIGV4Y2VwdGlvbiBmYWxsIHRocm91Z2gpDQorCSAqLw0KKwl2aXJ0dWFsIHZvaWQgcnVuKCkgPSAwOw0KK307DQorDQorI2VuZGlmIC8qIFBFUklPRElDUlVOTkFCTEVfSF8gKi8NCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9uZXR3b3JrdGFibGVzMi90eXBlL0FycmF5RGF0YS5jcHAgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9uZXR3b3JrdGFibGVzMi90eXBlL0FycmF5RGF0YS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDVhMzZkZAotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL25ldHdvcmt0YWJsZXMyL3R5cGUvQXJyYXlEYXRhLmNwcApAQCAtMCwwICsxLDcyIEBACisvKg0KKyAqIEFycmF5RGF0YS5jcHANCisgKg0KKyAqICBDcmVhdGVkIG9uOiBOb3YgMTQsIDIwMTINCisgKiAgICAgIEF1dGhvcjogTWl0Y2hlbGwgV2lsbHMNCisgKi8NCisNCisjaW5jbHVkZSAibmV0d29ya3RhYmxlczIvdHlwZS9BcnJheURhdGEuaCINCisjaWZuZGVmIF9XUlNfS0VSTkVMDQorI2luY2x1ZGUgPHN0ZGludC5oPg0KKyNlbmRpZg0KKw0KKyNpbmNsdWRlIDxjc3RyaW5nPg0KKyNpbmNsdWRlIDxzdGRsaWIuaD4NCisjaW5jbHVkZSA8bWVtb3J5Pg0KKw0KK0FycmF5RGF0YTo6QXJyYXlEYXRhKEFycmF5RW50cnlUeXBlJiB0eXBlKSA6IENvbXBsZXhEYXRhKHR5cGUpLCBtX2RhdGFfdHlwZSh0eXBlKXsNCisJbV9zaXplID0gMDsNCisJZGF0YSA9IE5VTEw7DQorfQ0KKw0KK0VudHJ5VmFsdWUgQXJyYXlEYXRhOjpfZ2V0KHVuc2lnbmVkIGludCBpbmRleCl7Ly9UT0RPIGJvdW5kcyBjaGVja2luZw0KKwlyZXR1cm4gZGF0YVtpbmRleF07DQorfQ0KKw0KK3ZvaWQgQXJyYXlEYXRhOjpfc2V0KHVuc2lnbmVkIGludCBpbmRleCwgRW50cnlWYWx1ZSB2YWx1ZSl7Ly9UT0RPIGJvdW5kcyBjaGVja2luZw0KKwltX2RhdGFfdHlwZS5kZWxldGVFbGVtZW50KGRhdGFbaW5kZXhdKTsNCisJZGF0YVtpbmRleF0gPSBtX2RhdGFfdHlwZS5jb3B5RWxlbWVudCh2YWx1ZSk7DQorfQ0KKw0KK3ZvaWQgQXJyYXlEYXRhOjpfYWRkKEVudHJ5VmFsdWUgdmFsdWUpew0KKwlzZXRTaXplKHNpemUoKSsxKTsNCisJZGF0YVtzaXplKCktMV0gPSBtX2RhdGFfdHlwZS5jb3B5RWxlbWVudCh2YWx1ZSk7DQorfQ0KKw0KK3ZvaWQgQXJyYXlEYXRhOjpyZW1vdmUodW5zaWduZWQgaW50IGluZGV4KXsNCisJLy9pZihpbmRleDwwIHx8IGluZGV4Pj1zaXplKCkpDQorCS8vCXRocm93IEluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24oKTsvL1RPRE8gYm91bmRzIGNoZWNrDQorCW1fZGF0YV90eXBlLmRlbGV0ZUVsZW1lbnQoZGF0YVtpbmRleF0pOw0KKwlFbnRyeVZhbHVlIG51bGxWYWx1ZSA9IHswfTsNCisJZGF0YVtpbmRleF0gPSBudWxsVmFsdWU7DQorCWlmKGluZGV4IDwgc2l6ZSgpLTEpew0KKwkJbWVtY3B5KGRhdGEraW5kZXgsIGRhdGEraW5kZXgrMSwgKHNpemUoKS1pbmRleC0xKSAqIHNpemVvZihFbnRyeVZhbHVlKSk7DQorCX0NCisJc2V0U2l6ZShzaXplKCktMSk7DQorfQ0KK3ZvaWQgQXJyYXlEYXRhOjpzZXRTaXplKHVuc2lnbmVkIGludCBuZXdTaXplKXsNCisJaWYobmV3U2l6ZT09bV9zaXplKS8vVE9ETyBib3VuZCBjaGVjayBncmVhdGVyIHRoYW4gbWF4IHNpemUNCisJCXJldHVybjsNCisJRW50cnlWYWx1ZSogbmV3QXJyYXkgPSAoRW50cnlWYWx1ZSopbWFsbG9jKG5ld1NpemUqc2l6ZW9mKEVudHJ5VmFsdWUpKTsvL1RPRE8gY2FjaGUgYXJyYXlzDQorCWlmKG5ld1NpemU8bV9zaXplKXsNCisJCW1lbWNweShuZXdBcnJheSwgZGF0YSwgbmV3U2l6ZSAqIHNpemVvZihFbnRyeVZhbHVlKSk7DQorCQlmb3IodW5zaWduZWQgaW50IGkgPSBuZXdTaXplOyBpPG1fc2l6ZTsgKytpKQ0KKwkJCW1fZGF0YV90eXBlLmRlbGV0ZUVsZW1lbnQoZGF0YVtpXSk7DQorCX0NCisJZWxzZXsNCisJICBpZihkYXRhIT1OVUxMKQ0KKwkJbWVtY3B5KG5ld0FycmF5LCBkYXRhLCBtX3NpemUgKiBzaXplb2YoRW50cnlWYWx1ZSkpOw0KKwkgIGVsc2UNCisJICAgIG1fc2l6ZSA9IDA7Ly9lbnN1cmUgdGhhdCB0aGUgY3VycmVudCBzaXplIGlzIGFjdHVhbGx5IDAgb3RoZXJ3aXNlIHdpbGwgZW5kIHVwIHdpdGggdW5pbml0aWFsaXplZCB2YWx1ZXMgaW4gdGhlIGFycmF5DQorCSAgRW50cnlWYWx1ZSBudWxsVmFsdWUgPSB7MH07DQorCSAgZm9yKHVuc2lnbmVkIGludCBpID0gbV9zaXplOyBpPG5ld1NpemU7ICsraSkNCisJICAgIG5ld0FycmF5W2ldID0gbnVsbFZhbHVlOw0KKwl9DQorCWlmKGRhdGEhPU5VTEwpDQorCQlmcmVlKGRhdGEpOw0KKwlkYXRhID0gbmV3QXJyYXk7DQorCW1fc2l6ZSA9IG5ld1NpemU7DQorfQ0KK3Vuc2lnbmVkIGludCBBcnJheURhdGE6OnNpemUoKXsNCisJcmV0dXJuIG1fc2l6ZTsNCit9DQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvbmV0d29ya3RhYmxlczIvdHlwZS9BcnJheURhdGEuaCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL25ldHdvcmt0YWJsZXMyL3R5cGUvQXJyYXlEYXRhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmZkNDZmOAotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL25ldHdvcmt0YWJsZXMyL3R5cGUvQXJyYXlEYXRhLmgKQEAgLTAsMCArMSw4OCBAQAorLyoNCisgKiBBcnJheURhdGEuaA0KKyAqDQorICogIENyZWF0ZWQgb246IE5vdiAxNCwgMjAxMg0KKyAqICAgICAgQXV0aG9yOiBNaXRjaGVsbCBXaWxscw0KKyAqLw0KKw0KKyNpZm5kZWYgQVJSQVlEQVRBX0hfDQorI2RlZmluZSBBUlJBWURBVEFfSF8NCisNCitjbGFzcyBBcnJheURhdGE7DQorDQorI2luY2x1ZGUgIkFycmF5RW50cnlUeXBlLmgiDQorI2luY2x1ZGUgIkNvbXBsZXhEYXRhLmgiDQorI2luY2x1ZGUgIm5ldHdvcmt0YWJsZXMyL05ldHdvcmtUYWJsZUVudHJ5LmgiDQorDQorLyoqDQorICogRGVmaW5lcyB0aGUgaW50ZXJuYWwgcmVwcmVzZW50YXRpb24gZm9yIGFuIGFycmF5LiANCisgKi8NCitjbGFzcyBBcnJheURhdGEgOiBwdWJsaWMgQ29tcGxleERhdGF7DQorcHJpdmF0ZToNCisgICAgQXJyYXlFbnRyeVR5cGUmIG1fZGF0YV90eXBlOw0KKyAgICB1bnNpZ25lZCBpbnQgbV9zaXplOw0KKyAgICBFbnRyeVZhbHVlKiBkYXRhOw0KK3B1YmxpYzoNCisgICAgLyoqDQorICAgICAqIENyZWF0ZXMgYSBuZXcgQXJyYXlEYXRhIG9mIHRoZSBnaXZlbiB0eXBlLg0KKyAgICAgKiANCisgICAgICogQHBhcmFtIHR5cGUgVGhlIEFycmF5RW50cnlUeXBlIHJlcHJlc2VudGluZyB0aGUgdHlwZQ0KKyAgICAgKiAJaW5mb3JtYXRpb24gdGhhdCB0aGlzIEFycmF5RGF0YSBzaG91bGQgc2F0aXNmeS4NCisgICAgICovDQorICAgIEFycmF5RGF0YShBcnJheUVudHJ5VHlwZSYgdHlwZSk7DQorICAgIA0KK3Byb3RlY3RlZDoNCisgICAgLyoqDQorICAgICAqIEdldHMgdGhlIHZhbHVlIHN0b3JlZCBhdCB0aGUgc3BlY2lmaWVkIGluZGV4Lg0KKyAgICAgKiANCisgICAgICogQHBhcmFtIGluZGV4IFRoZSBhcnJheSBpbmRleCB0byByZXRyaWV2ZS4NCisgICAgICovDQorICAgIEVudHJ5VmFsdWUgX2dldCh1bnNpZ25lZCBpbnQgaW5kZXgpOw0KKyAgICANCisgICAgLyoqDQorICAgICAqIFVwZGF0ZXMgdGhlIHZhbHVlIHN0b3JlZCBhdCB0aGUgc3BlY2lmaWVkIGluZGV4Lg0KKyAgICAgKiANCisgICAgICogVGhlIHZhbHVlIGN1cnJlbnRseSBzdG9yZWQgYXQgdGhlIGdpdmVuIGluZGV4IGlzIGRlbGV0ZWQuDQorICAgICAqIA0KKyAgICAgKiBAcGFyYW0gaW5kZXggVGhlIGFycmF5IGluZGV4IHRvIHVwZGF0ZS4NCisgICAgICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSB0byBzdG9yZS4gVGhpcyB2YWx1ZSBtdXN0IGhhdmUNCisgICAgICogCXRoZSBzYW1lIHR5cGUgYXMgdGhlIEFycmF5RW50cnlUeXBlIGluZGljYXRlcy4NCisgICAgICovDQorICAgIHZvaWQgX3NldCh1bnNpZ25lZCBpbnQgaW5kZXgsIEVudHJ5VmFsdWUgdmFsdWUpOw0KKyAgICANCisgICAgLyoqDQorICAgICAqIEFwcGVuZHMgdGhlIGdpdmVuIHZhbHVlIHRvIHRoZSBlbmQgb2YgdGhpcyBhcnJheS4NCisgICAgICogDQorICAgICAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgdG8gc3RvcmUuIFRoaXMgdmFsdWUgbXVzdCBoYXZlDQorICAgICAqIAl0aGUgc2FtZSB0eXBlIGFzIHRoZSBBcnJheUVudHJ5VHlwZSBpbmRpY2F0ZXMuDQorICAgICAqLw0KKyAgICB2b2lkIF9hZGQoRW50cnlWYWx1ZSB2YWx1ZSk7DQorICAgIA0KK3B1YmxpYzoNCisgICAgLyoqDQorICAgICAqIFJlbW92ZXMgYW5kIGRlbGV0ZXMgdGhlIHZhbHVlIHN0b3JlZCBhdCB0aGUgc3BlY2lmaWVkIGluZGV4Lg0KKyAgICAgKiANCisgICAgICogQHBhcmFtIGluZGV4IFRoZSBpbmRleCBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLg0KKyAgICAgKi8NCisgICAgdm9pZCByZW1vdmUodW5zaWduZWQgaW50IGluZGV4KTsNCisgICAgDQorICAgIC8qKg0KKyAgICAgKiBTZXRzIHRoZSBuZXcgc2l6ZSBvZiB0aGlzIGFycmF5IGRhdGEgc3RydWN0dXJlLg0KKyAgICAgKiANCisgICAgICogQHBhcmFtIHNpemUgVGhlIG5ldyBzaXplIHRoYXQgdGhpcyBhcnJheSBzaG91bGQgYXNzdW1lLg0KKyAgICAgKi8NCisgICAgdm9pZCBzZXRTaXplKHVuc2lnbmVkIGludCBzaXplKTsNCisgICAgDQorICAgIC8qKg0KKyAgICAgKiBHZXRzIHRoZSBjdXJyZW50IHNpemUgb2YgdGhpcyBhcnJheSBkYXRhIHN0cnVjdHVyZS4NCisgICAgICogDQorICAgICAqIEByZXR1cm4gVGhlIGN1cnJlbnQgbnVtYmVyIG9mIGVsZW1lbnRzIHRoYXQgdGhpcyBhcnJheSBtYXkgY29udGFpbi4NCisgICAgICovDQorICAgIHVuc2lnbmVkIGludCBzaXplKCk7DQorDQorICAgIGZyaWVuZCBjbGFzcyBBcnJheUVudHJ5VHlwZTsNCit9Ow0KKw0KKw0KKw0KKyNlbmRpZiAvKiBBUlJBWURBVEFfSF8gKi8NCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9uZXR3b3JrdGFibGVzMi90eXBlL0FycmF5RW50cnlUeXBlLmNwcCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL25ldHdvcmt0YWJsZXMyL3R5cGUvQXJyYXlFbnRyeVR5cGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2MmM0OGEKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9uZXR3b3JrdGFibGVzMi90eXBlL0FycmF5RW50cnlUeXBlLmNwcApAQCAtMCwwICsxLDEwNyBAQAorLyoNCisgKiBBcnJheUVudHJ5VHlwZS5jcHANCisgKg0KKyAqICBDcmVhdGVkIG9uOiBOb3YgMTQsIDIwMTINCisgKiAgICAgIEF1dGhvcjogTWl0Y2hlbGwgV2lsbHMNCisgKi8NCisNCisjaW5jbHVkZSAibmV0d29ya3RhYmxlczIvdHlwZS9BcnJheUVudHJ5VHlwZS5oIg0KKw0KK0FycmF5RW50cnlUeXBlOjpBcnJheUVudHJ5VHlwZShUeXBlSWQgaWQsIE5ldHdvcmtUYWJsZUVudHJ5VHlwZSYgZWxlbWVudFR5cGUpDQorCTogQ29tcGxleEVudHJ5VHlwZShpZCwgIkFycmF5IiksIG1fZWxlbWVudFR5cGUoZWxlbWVudFR5cGUpeyAvL1RPRE8gc3VwZXIoaWQsICJBcnJheSBvZiBbIiArIGVsZW1lbnRUeXBlLm5hbWUgKyAiXSIpOw0KK30NCisNCitFbnRyeVZhbHVlIEFycmF5RW50cnlUeXBlOjpjb3B5RWxlbWVudChFbnRyeVZhbHVlIHZhbHVlKXsNCisgIHJldHVybiBtX2VsZW1lbnRUeXBlLmNvcHlWYWx1ZSh2YWx1ZSk7DQorfQ0KK3ZvaWQgQXJyYXlFbnRyeVR5cGU6OmRlbGV0ZUVsZW1lbnQoRW50cnlWYWx1ZSB2YWx1ZSl7DQorICBtX2VsZW1lbnRUeXBlLmRlbGV0ZVZhbHVlKHZhbHVlKTsNCit9DQorDQorDQordm9pZCBBcnJheUVudHJ5VHlwZTo6c2VuZFZhbHVlKEVudHJ5VmFsdWUgdmFsdWUsIERhdGFJT1N0cmVhbSYgb3MpIHsNCisJQXJyYXlFbnRyeURhdGEqIGRhdGFBcnJheSA9IChBcnJheUVudHJ5RGF0YSopIHZhbHVlLnB0cjsNCisJLyppZiAoZGF0YUFycmF5LT5sZW5ndGggPiAyNTUpIHsvL1RPRE8gdGhyb3cgYmV0dGVyIGV4Y2VwdGlvbg0KKwkJdGhyb3cgSU9FeGNlcHRpb24oIkNhbm5vdCB3cml0ZSAiICsgdmFsdWUgKyAiIGFzICIgKyBuYW1lICsgIi4gQXJyYXlzIGhhdmUgYSBtYXggbGVuZ3RoIG9mIDI1NSB2YWx1ZXMiKTsNCisJfSovDQorCW9zLndyaXRlQnl0ZShkYXRhQXJyYXktPmxlbmd0aCk7DQorCWZvciAoaW50IGkgPSAwOyBpIDwgZGF0YUFycmF5LT5sZW5ndGg7ICsraSkgew0KKwkJbV9lbGVtZW50VHlwZS5zZW5kVmFsdWUoZGF0YUFycmF5LT5hcnJheVtpXSwgb3MpOw0KKwl9DQorfQ0KKw0KK0VudHJ5VmFsdWUgQXJyYXlFbnRyeVR5cGU6OnJlYWRWYWx1ZShEYXRhSU9TdHJlYW0mIGlzKSB7DQorCXVpbnQ4X3QgbGVuZ3RoID0gaXMucmVhZEJ5dGUoKTsNCisJRW50cnlWYWx1ZSogYXJyYXkgPSAoRW50cnlWYWx1ZSopbWFsbG9jKGxlbmd0aCpzaXplb2YoRW50cnlWYWx1ZSkpOy8vVE9ETyBjYWNoZSBvYmplY3QgYXJyYXlzDQorCWZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsNCisJCWFycmF5W2ldID0gbV9lbGVtZW50VHlwZS5yZWFkVmFsdWUoaXMpOw0KKwl9DQorCQ0KKwlBcnJheUVudHJ5RGF0YSogZGF0YUFycmF5ID0gKEFycmF5RW50cnlEYXRhKiltYWxsb2Moc2l6ZW9mKEFycmF5RW50cnlEYXRhKSk7DQorCWRhdGFBcnJheS0+bGVuZ3RoID0gbGVuZ3RoOw0KKwlkYXRhQXJyYXktPmFycmF5ID0gYXJyYXk7DQorCQ0KKwlFbnRyeVZhbHVlIGVWYWx1ZTsNCisJZVZhbHVlLnB0ciA9IGRhdGFBcnJheTsNCisJcmV0dXJuIGVWYWx1ZTsNCit9DQorDQorRW50cnlWYWx1ZSBBcnJheUVudHJ5VHlwZTo6Y29weVZhbHVlKEVudHJ5VmFsdWUgdmFsdWUpew0KKwlBcnJheUVudHJ5RGF0YSogb3RoZXJEYXRhQXJyYXkgPSAoQXJyYXlFbnRyeURhdGEqKSB2YWx1ZS5wdHI7DQorDQorCUVudHJ5VmFsdWUqIGFycmF5ID0gKEVudHJ5VmFsdWUqKW1hbGxvYyhvdGhlckRhdGFBcnJheS0+bGVuZ3RoKnNpemVvZihFbnRyeVZhbHVlKSk7Ly9UT0RPIGNhY2hlIG9iamVjdCBhcnJheXMNCisJZm9yIChpbnQgaSA9IDA7IGkgPCBvdGhlckRhdGFBcnJheS0+bGVuZ3RoOyArK2kpIHsNCisJCWFycmF5W2ldID0gbV9lbGVtZW50VHlwZS5jb3B5VmFsdWUob3RoZXJEYXRhQXJyYXktPmFycmF5W2ldKTsNCisJfQ0KKwkNCisJQXJyYXlFbnRyeURhdGEqIGRhdGFBcnJheSA9IChBcnJheUVudHJ5RGF0YSopbWFsbG9jKHNpemVvZihBcnJheUVudHJ5RGF0YSkpOw0KKwlkYXRhQXJyYXktPmxlbmd0aCA9IG90aGVyRGF0YUFycmF5LT5sZW5ndGg7DQorCWRhdGFBcnJheS0+YXJyYXkgPSBhcnJheTsNCisJDQorCUVudHJ5VmFsdWUgZVZhbHVlOw0KKwllVmFsdWUucHRyID0gZGF0YUFycmF5Ow0KKwlyZXR1cm4gZVZhbHVlOw0KK30NCit2b2lkIEFycmF5RW50cnlUeXBlOjpkZWxldGVWYWx1ZShFbnRyeVZhbHVlIHZhbHVlKXsNCisJQXJyYXlFbnRyeURhdGEqIGRhdGFBcnJheSA9IChBcnJheUVudHJ5RGF0YSopIHZhbHVlLnB0cjsNCisJaWYoZGF0YUFycmF5IT1OVUxMKXsNCisJICBmb3IgKGludCBpID0gMDsgaSA8IGRhdGFBcnJheS0+bGVuZ3RoOyArK2kpIHsNCisJICAgIG1fZWxlbWVudFR5cGUuZGVsZXRlVmFsdWUoZGF0YUFycmF5LT5hcnJheVtpXSk7DQorCSAgfQ0KKwkgIGZyZWUoZGF0YUFycmF5LT5hcnJheSk7DQorCSAgZnJlZShkYXRhQXJyYXkpOw0KKwl9DQorfQ0KKw0KK0VudHJ5VmFsdWUgQXJyYXlFbnRyeVR5cGU6OmludGVybmFsaXplVmFsdWUoc3RkOjpzdHJpbmcmIGtleSwgQ29tcGxleERhdGEmIGV4dGVybmFsUmVwcmVzZW50YXRpb24sIEVudHJ5VmFsdWUgY3VycmVudEludGVyYWxWYWx1ZSkgew0KKwkvLyBUT0RPOiBBcmd1bWVudCAna2V5JyBhcHBlYXJzIHVudXNlZC4NCisJQXJyYXlEYXRhJiBleHRlcm5hbEFycmF5RGF0YSA9IChBcnJheURhdGEmKWV4dGVybmFsUmVwcmVzZW50YXRpb247DQorCUFycmF5RW50cnlEYXRhKiBpbnRlcm5hbEFycmF5ID0gKEFycmF5RW50cnlEYXRhKikgY3VycmVudEludGVyYWxWYWx1ZS5wdHI7DQorCWlmKGludGVybmFsQXJyYXkgIT0gTlVMTCAmJiBpbnRlcm5hbEFycmF5LT5sZW5ndGg9PWV4dGVybmFsQXJyYXlEYXRhLnNpemUoKSl7DQorCQlmb3IoaW50IGkgPSAwOyBpPGludGVybmFsQXJyYXktPmxlbmd0aDsgKytpKXsNCisJCQltX2VsZW1lbnRUeXBlLmRlbGV0ZVZhbHVlKGludGVybmFsQXJyYXktPmFycmF5W2ldKTsNCisJCQlpbnRlcm5hbEFycmF5LT5hcnJheVtpXSA9IG1fZWxlbWVudFR5cGUuY29weVZhbHVlKGV4dGVybmFsQXJyYXlEYXRhLl9nZXQoaSkpOw0KKwkJfQ0KKwkJcmV0dXJuIGN1cnJlbnRJbnRlcmFsVmFsdWU7DQorCX0NCisJZWxzZXsNCisJCWludGVybmFsQXJyYXkgPSAoQXJyYXlFbnRyeURhdGEqKW1hbGxvYyhzaXplb2YoQXJyYXlFbnRyeURhdGEpKTsNCisJCWludGVybmFsQXJyYXktPmFycmF5ID0gKEVudHJ5VmFsdWUqKW1hbGxvYyhleHRlcm5hbEFycmF5RGF0YS5zaXplKCkqc2l6ZW9mKEVudHJ5VmFsdWUpKTsvL1RPRE8gY2FjaGUgb2JqZWN0IGFycmF5cw0KKwkJaW50ZXJuYWxBcnJheS0+bGVuZ3RoID0gZXh0ZXJuYWxBcnJheURhdGEuc2l6ZSgpOw0KKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBpbnRlcm5hbEFycmF5LT5sZW5ndGg7ICsraSkgew0KKwkJCWludGVybmFsQXJyYXktPmFycmF5W2ldID0gbV9lbGVtZW50VHlwZS5jb3B5VmFsdWUoZXh0ZXJuYWxBcnJheURhdGEuX2dldChpKSk7DQorCQl9DQorCQlFbnRyeVZhbHVlIGVWYWx1ZTsNCisJCWVWYWx1ZS5wdHIgPSBpbnRlcm5hbEFycmF5Ow0KKwkJcmV0dXJuIGVWYWx1ZTsNCisJfQ0KK30NCisNCit2b2lkIEFycmF5RW50cnlUeXBlOjpleHBvcnRWYWx1ZShzdGQ6OnN0cmluZyYga2V5LCBFbnRyeVZhbHVlIGludGVybmFsRGF0YSwgQ29tcGxleERhdGEmIGV4dGVybmFsUmVwcmVzZW50YXRpb24pIHsNCisJQXJyYXlFbnRyeURhdGEqIGludGVybmFsQXJyYXkgPSAoQXJyYXlFbnRyeURhdGEqKSBpbnRlcm5hbERhdGEucHRyOw0KKwlBcnJheURhdGEmIGV4dGVybmFsQXJyYXlEYXRhID0gKEFycmF5RGF0YSYpZXh0ZXJuYWxSZXByZXNlbnRhdGlvbjsNCisJZXh0ZXJuYWxBcnJheURhdGEuc2V0U2l6ZShpbnRlcm5hbEFycmF5LT5sZW5ndGgpOw0KKwlmb3IoaW50IGkgPSAwOyBpPGludGVybmFsQXJyYXktPmxlbmd0aDsgKytpKXsNCisJCWV4dGVybmFsQXJyYXlEYXRhLl9zZXQoaSwgbV9lbGVtZW50VHlwZS5jb3B5VmFsdWUoaW50ZXJuYWxBcnJheS0+YXJyYXlbaV0pKTsNCisJfQ0KK30NCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9uZXR3b3JrdGFibGVzMi90eXBlL0FycmF5RW50cnlUeXBlLmggYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9uZXR3b3JrdGFibGVzMi90eXBlL0FycmF5RW50cnlUeXBlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjdlNzg3NQotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL25ldHdvcmt0YWJsZXMyL3R5cGUvQXJyYXlFbnRyeVR5cGUuaApAQCAtMCwwICsxLDEwMyBAQAorLyoNCisgKiBBcnJheUVudHJ5VHlwZS5oDQorICoNCisgKiAgQ3JlYXRlZCBvbjogTm92IDE0LCAyMDEyDQorICogICAgICBBdXRob3I6IE1pdGNoZWxsIFdpbGxzDQorICovDQorDQorI2lmbmRlZiBBUlJBWUVOVFJZVFlQRV9IXw0KKyNkZWZpbmUgQVJSQVlFTlRSWVRZUEVfSF8NCisNCisjaW5jbHVkZSA8c3RkbGliLmg+DQorI2luY2x1ZGUgPHN0ZGlvLmg+DQorI2lmbmRlZiBfV1JTX0tFUk5FTA0KKyNpbmNsdWRlIDxzdGRpbnQuaD4NCisjZW5kaWYNCisNCitjbGFzcyBBcnJheUVudHJ5VHlwZTsNCisNCisjaW5jbHVkZSAiQXJyYXlEYXRhLmgiDQorI2luY2x1ZGUgIkNvbXBsZXhFbnRyeVR5cGUuaCINCisNCitzdHJ1Y3QgQXJyYXlFbnRyeURhdGF7DQorCXVpbnQ4X3QgbGVuZ3RoOw0KKwlFbnRyeVZhbHVlKiBhcnJheTsNCit9Ow0KKy8qKg0KKyAqIFJlcHJlc2VudHMgdGhlIHNpemUgYW5kIGNvbnRlbnRzIG9mIGFuIGFycmF5Lg0KKyAqLw0KK3R5cGVkZWYgc3RydWN0IEFycmF5RW50cnlEYXRhIEFycmF5RW50cnlEYXRhOw0KKw0KKy8qKg0KKyAqIFJlcHJlc2VudHMgdGhlIHR5cGUgb2YgYW4gYXJyYXkgZW50cnkgdmFsdWUuDQorICovDQorY2xhc3MgQXJyYXlFbnRyeVR5cGUgOiBwdWJsaWMgQ29tcGxleEVudHJ5VHlwZSB7Ly9UT0RPIGFsbG93IGZvciBhcnJheSBvZiBjb21wbGV4IHR5cGUNCitwcml2YXRlOg0KKyAgICBOZXR3b3JrVGFibGVFbnRyeVR5cGUmIG1fZWxlbWVudFR5cGU7DQorICAgIA0KK3B1YmxpYzoNCisgICAgLyoqDQorICAgICAqIENyZWF0ZXMgYSBuZXcgQXJyYXlFbnRyeVR5cGUuDQorICAgICAqIA0KKyAgICAgKiBAcGFyYW0gaWQgVGhlIElEIHdoaWNoIGlkZW50aWZpZXMgdGhpcyB0eXBlIHRvIG90aGVyIG5vZGVzIG9uDQorICAgICAqIAlhY3Jvc3MgdGhlIG5ldHdvcmsuDQorICAgICAqIEBwYXJhbSBlbGVtZW50VHlwZSBUaGUgdHlwZSBvZiB0aGUgZWxlbWVudHMgdGhpcyBhcnJheSBjb250YWlucy4NCisgICAgICovDQorICAgIEFycmF5RW50cnlUeXBlKFR5cGVJZCBpZCwgTmV0d29ya1RhYmxlRW50cnlUeXBlJiBlbGVtZW50VHlwZSk7DQorDQorICAgIC8qKg0KKyAgICAgKiBDcmVhdGVzIGEgY29weSBvZiBhbiB2YWx1ZSB3aGljaCBpcyBvZiB0aGUgdHlwZSBjb250YWluZWQgYnkNCisgICAgICogdGhpcyBhcnJheS4NCisgICAgICogDQorICAgICAqIEBwYXJhbSB2YWx1ZSBUaGUgZWxlbWVudCwgb2YgdGhpcyBhcnJheSdzIGNvbnRhaW5lZCB0eXBlLCB0bw0KKyAgICAgKiAJY29weS4NCisgICAgICogQHJldHVybiBBIGNvcHkgb2YgdGhlIGdpdmVuIHZhbHVlLg0KKyAgICAgKi8NCisJRW50cnlWYWx1ZSBjb3B5RWxlbWVudChFbnRyeVZhbHVlIHZhbHVlKTsNCisJDQorCS8qKg0KKwkgKiBEZWxldGVzIGEgZW50cnkgdmFsdWUgd2hpY2ggaXMgb2YgdGhlIHR5cGUgY29udGFpbmVkIGJ5DQorCSAqIHRoaXMgYXJyYXkuDQorCSAqIA0KKwkgKiBBZnRlciBjYWxsaW5nIHRoaXMgbWV0aG9kLCB0aGUgZ2l2ZW4gZW50cnkgdmFsdWUgaXMNCisJICogbm8gbG9uZ2VyIHZhbGlkLg0KKwkgKiANCisJICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSB0byBkZWxldGUuDQorCSAqLw0KKwl2b2lkIGRlbGV0ZUVsZW1lbnQoRW50cnlWYWx1ZSB2YWx1ZSk7DQorCQ0KKwkvKioNCisJICogU2VlIHtAbGluayBOZXR3b3JrVGFibGVFbnRyeVR5cGV9OjpzZW5kVmFsdWUNCisJICovDQorCXZvaWQgc2VuZFZhbHVlKEVudHJ5VmFsdWUgdmFsdWUsIERhdGFJT1N0cmVhbSYgb3MpOw0KKw0KKwkvKioNCisJICogU2VlIHtAbGluayBOZXR3b3JrVGFibGVFbnRyeVR5cGV9OjpyZWFkVmFsdWUNCisJICovDQorCUVudHJ5VmFsdWUgcmVhZFZhbHVlKERhdGFJT1N0cmVhbSYgaXMpOw0KKwkNCisJLyoqDQorCSAqIFNlZSB7QGxpbmsgTmV0d29ya1RhYmxlRW50cnlUeXBlfTo6Y29weVZhbHVlDQorCSAqLyAgICANCisJRW50cnlWYWx1ZSBjb3B5VmFsdWUoRW50cnlWYWx1ZSB2YWx1ZSk7DQorCQ0KKwkvKioNCisJICogU2VlIHtAbGluayBOZXR3b3JrVGFibGVFbnRyeVR5cGV9OjpkZWxldGVWYWx1ZQ0KKwkgKi8NCisJdm9pZCBkZWxldGVWYWx1ZShFbnRyeVZhbHVlIHZhbHVlKTsNCisJDQorCS8qKg0KKwkgKiBTZWUge0BsaW5rIENvbXBsZXhFbnRyeVR5cGV9OjppbnRlcm5hbGl6ZVZhbHVlDQorCSAqLw0KKwlFbnRyeVZhbHVlIGludGVybmFsaXplVmFsdWUoc3RkOjpzdHJpbmcmIGtleSwgQ29tcGxleERhdGEmIGV4dGVybmFsUmVwcmVzZW50YXRpb24sIEVudHJ5VmFsdWUgY3VycmVudEludGVyYWxWYWx1ZSk7DQorDQorCS8qKg0KKwkgKiBTZWUge0BsaW5rIENvbXBsZXhFbnRyeVR5cGV9OjpleHBvcnRWYWx1ZQ0KKwkgKi8NCisJdm9pZCBleHBvcnRWYWx1ZShzdGQ6OnN0cmluZyYga2V5LCBFbnRyeVZhbHVlIGludGVybmFsRGF0YSwgQ29tcGxleERhdGEmIGV4dGVybmFsUmVwcmVzZW50YXRpb24pOw0KKyAgICANCisgICAgDQorICAgIA0KK307DQorDQorI2VuZGlmIC8qIEFSUkFZRU5UUllUWVBFX0hfICovDQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvbmV0d29ya3RhYmxlczIvdHlwZS9Cb29sZWFuQXJyYXkuY3BwIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvbmV0d29ya3RhYmxlczIvdHlwZS9Cb29sZWFuQXJyYXkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5OTE4NjkKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9uZXR3b3JrdGFibGVzMi90eXBlL0Jvb2xlYW5BcnJheS5jcHAKQEAgLTAsMCArMSwzMiBAQAorLyoNCisgKiBCb29sZWFuQXJyYXkuY3BwDQorICoNCisgKiAgQ3JlYXRlZCBvbjogTm92IDE2LCAyMDEyDQorICogICAgICBBdXRob3I6IE1pdGNoZWxsIFdpbGxzDQorICovDQorDQorI2luY2x1ZGUgIm5ldHdvcmt0YWJsZXMyL3R5cGUvQm9vbGVhbkFycmF5LmgiDQorI2luY2x1ZGUgIm5ldHdvcmt0YWJsZXMyL3R5cGUvRGVmYXVsdEVudHJ5VHlwZXMuaCINCisNCisNCitjb25zdCBUeXBlSWQgQm9vbGVhbkFycmF5OjpCT09MRUFOX0FSUkFZX1JBV19JRCA9IDB4MTA7DQorQXJyYXlFbnRyeVR5cGUgQm9vbGVhbkFycmF5OjpUWVBFKEJPT0xFQU5fQVJSQVlfUkFXX0lELCBEZWZhdWx0RW50cnlUeXBlczo6Qk9PTEVBTik7DQorDQorQm9vbGVhbkFycmF5OjpCb29sZWFuQXJyYXkoKSA6IEFycmF5RGF0YShUWVBFKSB7DQorfQ0KKw0KK2Jvb2wgQm9vbGVhbkFycmF5OjpnZXQoaW50IGluZGV4KXsNCisJcmV0dXJuIF9nZXQoaW5kZXgpLmI7DQorfQ0KKw0KK3ZvaWQgQm9vbGVhbkFycmF5OjpzZXQoaW50IGluZGV4LCBib29sIHZhbHVlKXsNCisJRW50cnlWYWx1ZSBlVmFsdWU7DQorCWVWYWx1ZS5iID0gdmFsdWU7DQorCV9zZXQoaW5kZXgsIGVWYWx1ZSk7DQorfQ0KKw0KK3ZvaWQgQm9vbGVhbkFycmF5OjphZGQoYm9vbCB2YWx1ZSl7DQorCUVudHJ5VmFsdWUgZVZhbHVlOw0KKwllVmFsdWUuYiA9IHZhbHVlOw0KKwlfYWRkKGVWYWx1ZSk7DQorfQ0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL25ldHdvcmt0YWJsZXMyL3R5cGUvQm9vbGVhbkFycmF5LmggYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9uZXR3b3JrdGFibGVzMi90eXBlL0Jvb2xlYW5BcnJheS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiODhmYWIKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9uZXR3b3JrdGFibGVzMi90eXBlL0Jvb2xlYW5BcnJheS5oCkBAIC0wLDAgKzEsMzEgQEAKKy8qDQorICogQm9vbGVhbkFycmF5LmgNCisgKg0KKyAqICBDcmVhdGVkIG9uOiBOb3YgMTYsIDIwMTINCisgKiAgICAgIEF1dGhvcjogTWl0Y2hlbGwgV2lsbHMNCisgKi8NCisNCisjaWZuZGVmIEJPT0xFQU5BUlJBWV9IXw0KKyNkZWZpbmUgQk9PTEVBTkFSUkFZX0hfDQorDQorI2luY2x1ZGUgIm5ldHdvcmt0YWJsZXMyL3R5cGUvQXJyYXlEYXRhLmgiDQorI2luY2x1ZGUgIm5ldHdvcmt0YWJsZXMyL3R5cGUvQXJyYXlFbnRyeVR5cGUuaCINCisNCisvL1RPRE86IEJvb2xlYW5BcnJheSBhcHBlYXJzIHVudXNlZDsgcmVwbGFjZSB3aXRoIG5hbWVzcGFjZT8NCitjbGFzcyBCb29sZWFuQXJyYXkgOiBwdWJsaWMgQXJyYXlEYXRhew0KKw0KK3B1YmxpYzoNCisJc3RhdGljIGNvbnN0IFR5cGVJZCBCT09MRUFOX0FSUkFZX1JBV19JRDsNCisgICAgc3RhdGljIEFycmF5RW50cnlUeXBlIFRZUEU7DQorDQorDQorICAgIEJvb2xlYW5BcnJheSgpOw0KKw0KKyAgICBib29sIGdldChpbnQgaW5kZXgpOw0KKyAgICB2b2lkIHNldChpbnQgaW5kZXgsIGJvb2wgdmFsdWUpOw0KKyAgICB2b2lkIGFkZChib29sIHZhbHVlKTsNCit9Ow0KKw0KKw0KKw0KKyNlbmRpZiAvKiBCT09MRUFOQVJSQVlfSF8gKi8NCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9uZXR3b3JrdGFibGVzMi90eXBlL0NvbXBsZXhEYXRhLmNwcCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL25ldHdvcmt0YWJsZXMyL3R5cGUvQ29tcGxleERhdGEuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4OTVjN2UKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9uZXR3b3JrdGFibGVzMi90eXBlL0NvbXBsZXhEYXRhLmNwcApAQCAtMCwwICsxLDE1IEBACisvKg0KKyAqIENvbXBsZXhEYXRhLmNwcA0KKyAqDQorICogIENyZWF0ZWQgb246IFNlcCAyNCwgMjAxMg0KKyAqICAgICAgQXV0aG9yOiBNaXRjaGVsbCBXaWxscw0KKyAqLw0KKw0KKyNpbmNsdWRlICJuZXR3b3JrdGFibGVzMi90eXBlL0NvbXBsZXhEYXRhLmgiDQorDQorDQorQ29tcGxleERhdGE6OkNvbXBsZXhEYXRhKENvbXBsZXhFbnRyeVR5cGUmIF90eXBlKSA6IHR5cGUoX3R5cGUpe30NCisJDQorQ29tcGxleEVudHJ5VHlwZSYgQ29tcGxleERhdGE6OkdldFR5cGUoKSB7DQorCXJldHVybiB0eXBlOw0KK30NCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9uZXR3b3JrdGFibGVzMi90eXBlL0NvbXBsZXhEYXRhLmggYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9uZXR3b3JrdGFibGVzMi90eXBlL0NvbXBsZXhEYXRhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQzMDcyMQotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL25ldHdvcmt0YWJsZXMyL3R5cGUvQ29tcGxleERhdGEuaApAQCAtMCwwICsxLDQyIEBACisvKg0KKyAqIENvbXBsZXhEYXRhLmgNCisgKg0KKyAqICBDcmVhdGVkIG9uOiBTZXAgMjQsIDIwMTINCisgKiAgICAgIEF1dGhvcjogTWl0Y2hlbGwgV2lsbHMNCisgKi8NCisNCisjaWZuZGVmIENPTVBMRVhEQVRBX0hfDQorI2RlZmluZSBDT01QTEVYREFUQV9IXw0KKw0KKw0KK2NsYXNzIENvbXBsZXhEYXRhOw0KKw0KKw0KKy8vI2luY2x1ZGUgIkNvbXBsZXhFbnRyeVR5cGUuaCIgY2FuJ3QgZG8gdGhpcyBjYXVzZSBpdCBjYXVzZXMgb3JkZXIgb2YgZGVmaW5pdGlvbiBpc3N1ZXMNCitjbGFzcyBDb21wbGV4RW50cnlUeXBlOw0KKw0KKy8qKg0KKyAqIEJhc2UgY2xhc3MgZm9yIG5vbi1wcmltaXRpdmUgZGF0YSBzdHJ1Y3R1cmVzLg0KKyAqLw0KK2NsYXNzIENvbXBsZXhEYXRhew0KK3ByaXZhdGU6DQorCUNvbXBsZXhFbnRyeVR5cGUmIHR5cGU7DQorcHVibGljOg0KKwkvKioNCisJICogQ3JlYXRlcyBhIG5ldyBDb21wbGV4RGF0YSBvZiB0aGUgZ2l2ZW4gdHlwZS4NCisJICogDQorCSAqIEBwYXJhbSB0eXBlIFRoZSB0eXBlIG9mIHRoaXMgZGF0YSBzdHJ1Y3R1cmUuDQorCSAqLw0KKwlDb21wbGV4RGF0YShDb21wbGV4RW50cnlUeXBlJiB0eXBlKTsNCisJICAgIA0KKwkvKioNCisJICogR2V0cyB0aGUgdHlwZSBvZiB0aGlzIGRhdGEgc3RydWN0dXJlLg0KKwkgKiANCisJICogQHJldHVybiBUaGUgdHlwZSBvZiB0aGlzIGRhdGEgc3RydWN0dXJlLg0KKwkgKi8NCisJQ29tcGxleEVudHJ5VHlwZSYgR2V0VHlwZSgpOw0KKw0KK307DQorDQorDQorI2VuZGlmIC8qIENPTVBMRVhEQVRBX0hfICovDQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvbmV0d29ya3RhYmxlczIvdHlwZS9Db21wbGV4RW50cnlUeXBlLmNwcCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL25ldHdvcmt0YWJsZXMyL3R5cGUvQ29tcGxleEVudHJ5VHlwZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTJlMDAyYgotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL25ldHdvcmt0YWJsZXMyL3R5cGUvQ29tcGxleEVudHJ5VHlwZS5jcHAKQEAgLTAsMCArMSwxNSBAQAorLyoNCisgKiBDb21wbGV4RW50cnlUeXBlLmNwcA0KKyAqDQorICogIENyZWF0ZWQgb246IFNlcCAyNCwgMjAxMg0KKyAqICAgICAgQXV0aG9yOiBNaXRjaGVsbCBXaWxscw0KKyAqLw0KKw0KKyNpbmNsdWRlICJuZXR3b3JrdGFibGVzMi90eXBlL0NvbXBsZXhFbnRyeVR5cGUuaCINCisNCisNCitDb21wbGV4RW50cnlUeXBlOjpDb21wbGV4RW50cnlUeXBlKFR5cGVJZCBpZCwgY29uc3QgY2hhciogbmFtZSkgOiBOZXR3b3JrVGFibGVFbnRyeVR5cGUoaWQsIG5hbWUpe30NCisNCitib29sIENvbXBsZXhFbnRyeVR5cGU6OmlzQ29tcGxleCgpew0KKwlyZXR1cm4gdHJ1ZTsNCit9DQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvbmV0d29ya3RhYmxlczIvdHlwZS9Db21wbGV4RW50cnlUeXBlLmggYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9uZXR3b3JrdGFibGVzMi90eXBlL0NvbXBsZXhFbnRyeVR5cGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZGE2ZTVmCi0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvbmV0d29ya3RhYmxlczIvdHlwZS9Db21wbGV4RW50cnlUeXBlLmgKQEAgLTAsMCArMSw1NCBAQAorLyoNCisgKiBDb21wbGV4RW50cnlUeXBlLmgNCisgKg0KKyAqICBDcmVhdGVkIG9uOiBTZXAgMjQsIDIwMTINCisgKiAgICAgIEF1dGhvcjogTWl0Y2hlbGwgV2lsbHMNCisgKi8NCisNCisjaWZuZGVmIENPTVBMRVhFTlRSWVRZUEVfSF8NCisjZGVmaW5lIENPTVBMRVhFTlRSWVRZUEVfSF8NCisNCitjbGFzcyBDb21wbGV4RW50cnlUeXBlOw0KKw0KKyNpbmNsdWRlICJuZXR3b3JrdGFibGVzMi90eXBlL05ldHdvcmtUYWJsZUVudHJ5VHlwZS5oIg0KKw0KKy8qKg0KKyAqIFJlcHJlc2VudHMgYSBub24tcHJpbWl0aXZlIGRhdGEgdHlwZSAoaS5lLiBub3QgYSBzdHJpbmcsIGRvdWJsZSwgDQorICogb3IgYm9vbGVhbikuDQorICovDQorY2xhc3MgQ29tcGxleEVudHJ5VHlwZSA6IHB1YmxpYyBOZXR3b3JrVGFibGVFbnRyeVR5cGUNCit7DQorcHJvdGVjdGVkOg0KKwlDb21wbGV4RW50cnlUeXBlKFR5cGVJZCBpZCwgY29uc3QgY2hhciogbmFtZSk7DQorcHVibGljOg0KKwl2aXJ0dWFsIH5Db21wbGV4RW50cnlUeXBlKCkNCisJew0KKwl9DQorCQ0KKwkvKioNCisJICogU2VlIHtAbGluayBOZXR3b3JrVGFibGVFbnRyeVR5cGV9Ojppc0NvbXBsZXguDQorCSAqLw0KKwl2aXJ0dWFsIGJvb2wgaXNDb21wbGV4KCk7DQorCQ0KKwkvKioNCisJICogVXBkYXRlcyB0aGUgaW50ZXJuYWwgcmVwcmVzZW50YXRpb24gZm9yIGFuIGVudHJ5IG9mIHRoaXMgdHlwZSB3aXRoIHRoZQ0KKwkgKiBnaXZlbiB2YWx1ZS4NCisJICogDQorCSAqIEBwYXJhbSBrZXkgVGhlIG5hbWUgb2YgdGhlIGZpZWxkIHRvIHVwZGF0ZS4NCisJICogQHBhcmFtIGV4dGVybmFsUmVwcmVzZW50YXRpb24gVGhlIGV4aXN0aW5nIGRhdGEgc3RydWN0dXJlIHRvIHVwZGF0ZS4NCisJICogQHBhcmFtIGN1cnJlbnRJbnRlcm5hbFZhbHVlIFRoZSB2YWx1ZSB0byB1cGRhdGUgdGhlIGV4dGVybmFsIHJlcHJlc2VudGF0aW9uIHdpdGguDQorCSAqLw0KKwl2aXJ0dWFsIEVudHJ5VmFsdWUgaW50ZXJuYWxpemVWYWx1ZShzdGQ6OnN0cmluZyYga2V5LCBDb21wbGV4RGF0YSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbiwgRW50cnlWYWx1ZSBjdXJyZW50SW50ZXJhbFZhbHVlKSA9IDA7DQorCQ0KKwkvKioNCisJICogVXBkYXRlcyB0aGUgZ2l2ZW4gZXh0ZXJuYWwgcmVwcmVzZW50YXRpb24gZm9yIGFuIGVudHJ5IG9mIHRoaXMgdHlwZSB3aXRoDQorCSAqIHRoZSBnaXZlbiBpbnRlcm5hbCB2YWx1ZS4NCisJICogDQorCSAqIEBwYXJhbSBrZXkgVGhlIG5hbWUgb2YgdGhlIGZpZWxkIHRvIGV4cG9ydC4NCisJICogQHBhcmFtIGludGVybmFsRGF0YSBUaGUgY3VycmVudCB2YWx1ZSB0byByZWZlcmVuY2UuDQorCSAqIEBwYXJhbSBleHRlcm5hbFJlcHJlc2VudGF0aW9uIFRoZSBleHRlcm5hbCByZXByZXNlbnRhdGlvbiB0byB1cGRhdGUuDQorCSAqLw0KKwl2aXJ0dWFsIHZvaWQgZXhwb3J0VmFsdWUoc3RkOjpzdHJpbmcmIGtleSwgRW50cnlWYWx1ZSBpbnRlcm5hbERhdGEsIENvbXBsZXhEYXRhJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKSA9IDA7DQorfTsNCisNCisjZW5kaWYgLyogQ09NUExFWEVOVFJZVFlQRV9IXyAqLw0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL25ldHdvcmt0YWJsZXMyL3R5cGUvRGVmYXVsdEVudHJ5VHlwZXMuY3BwIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvbmV0d29ya3RhYmxlczIvdHlwZS9EZWZhdWx0RW50cnlUeXBlcy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTZhMWJlMAotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL25ldHdvcmt0YWJsZXMyL3R5cGUvRGVmYXVsdEVudHJ5VHlwZXMuY3BwCkBAIC0wLDAgKzEsODUgQEAKKy8qDQorICogRGVmYXVsdEVudHJ5VHlwZXMuY3BwDQorICoNCisgKiAgQ3JlYXRlZCBvbjogU2VwIDI0LCAyMDEyDQorICogICAgICBBdXRob3I6IE1pdGNoZWxsIFdpbGxzDQorICovDQorDQorI2luY2x1ZGUgIm5ldHdvcmt0YWJsZXMyL3R5cGUvRGVmYXVsdEVudHJ5VHlwZXMuaCINCisjaW5jbHVkZSAibmV0d29ya3RhYmxlczIvdHlwZS9OZXR3b3JrVGFibGVFbnRyeVR5cGUuaCINCisjaW5jbHVkZSAibmV0d29ya3RhYmxlczIvY29ubmVjdGlvbi9EYXRhSU9TdHJlYW0uaCINCisjaW5jbHVkZSAibmV0d29ya3RhYmxlczIvdHlwZS9Cb29sZWFuQXJyYXkuaCINCisjaW5jbHVkZSAibmV0d29ya3RhYmxlczIvdHlwZS9OdW1iZXJBcnJheS5oIg0KKyNpbmNsdWRlICJuZXR3b3JrdGFibGVzMi90eXBlL1N0cmluZ0FycmF5LmgiDQorDQorDQorRGVmYXVsdEVudHJ5VHlwZXM6OkJPT0xFQU5fdCBEZWZhdWx0RW50cnlUeXBlczo6Qk9PTEVBTjsNCitEZWZhdWx0RW50cnlUeXBlczo6RE9VQkxFX3QgRGVmYXVsdEVudHJ5VHlwZXM6OkRPVUJMRTsNCitEZWZhdWx0RW50cnlUeXBlczo6U1RSSU5HX3QgRGVmYXVsdEVudHJ5VHlwZXM6OlNUUklORzsNCisNCitEZWZhdWx0RW50cnlUeXBlczo6Qk9PTEVBTl90OjpCT09MRUFOX3QoKSA6IE5ldHdvcmtUYWJsZUVudHJ5VHlwZShCT09MRUFOX1JBV19JRCwgIkJvb2xlYW4iKXt9DQordm9pZCBEZWZhdWx0RW50cnlUeXBlczo6Qk9PTEVBTl90OjpzZW5kVmFsdWUoRW50cnlWYWx1ZSB2YWx1ZSwgRGF0YUlPU3RyZWFtJiBvcykgew0KKwlvcy53cml0ZUJ5dGUodmFsdWUuYik7DQorfQ0KK0VudHJ5VmFsdWUgRGVmYXVsdEVudHJ5VHlwZXM6OkJPT0xFQU5fdDo6cmVhZFZhbHVlKERhdGFJT1N0cmVhbSYgaXMpIHsNCisJRW50cnlWYWx1ZSB2YWx1ZTsNCisJdmFsdWUuYiA9IChpcy5yZWFkQnl0ZSgpIT0wKTsNCisJcmV0dXJuIHZhbHVlOw0KK30NCisJDQorRGVmYXVsdEVudHJ5VHlwZXM6OkRPVUJMRV90OjpET1VCTEVfdCgpIDogTmV0d29ya1RhYmxlRW50cnlUeXBlKERPVUJMRV9SQVdfSUQsICJEb3VibGUiKXt9DQordm9pZCBEZWZhdWx0RW50cnlUeXBlczo6RE9VQkxFX3Q6OnNlbmRWYWx1ZShFbnRyeVZhbHVlIGVWYWx1ZSwgRGF0YUlPU3RyZWFtJiBvcykgew0KKwl1aW50NjRfdCB2YWx1ZSA9ICpyZWludGVycHJldF9jYXN0PHVpbnQ2NF90Kj4oJmVWYWx1ZS5mKTsNCisJZm9yKGludCBpID0gMDsgaTw4OyArK2kpew0KKwkJb3Mud3JpdGVCeXRlKCh2YWx1ZT4+NTYpJjB4RkYpOw0KKwkJdmFsdWU8PD04Ow0KKwl9DQorfQ0KK0VudHJ5VmFsdWUgRGVmYXVsdEVudHJ5VHlwZXM6OkRPVUJMRV90OjpyZWFkVmFsdWUoRGF0YUlPU3RyZWFtJiBpcykgew0KKwl1aW50NjRfdCB2YWx1ZTsNCisJDQorCWZvcihpbnQgaSA9IDA7IGk8ODsgKytpKXsNCisJCXZhbHVlPDw9ODsNCisJCXZhbHVlIHw9IChpcy5yZWFkQnl0ZSgpJjB4RkYpOw0KKwl9DQorCQ0KKwlFbnRyeVZhbHVlIGVWYWx1ZTsNCisJZVZhbHVlLmYgPSAqcmVpbnRlcnByZXRfY2FzdDxkb3VibGUqPigmdmFsdWUpOw0KKwlyZXR1cm4gZVZhbHVlOw0KK30NCisJDQorRGVmYXVsdEVudHJ5VHlwZXM6OlNUUklOR190OjpTVFJJTkdfdCgpIDogTmV0d29ya1RhYmxlRW50cnlUeXBlKFNUUklOR19SQVdfSUQsICJTdHJpbmciKXt9DQordm9pZCBEZWZhdWx0RW50cnlUeXBlczo6U1RSSU5HX3Q6OnNlbmRWYWx1ZShFbnRyeVZhbHVlIHZhbHVlLCBEYXRhSU9TdHJlYW0mIG9zKSB7DQorCW9zLndyaXRlU3RyaW5nKCooc3RkOjpzdHJpbmcqKXZhbHVlLnB0cik7DQorfQ0KK0VudHJ5VmFsdWUgRGVmYXVsdEVudHJ5VHlwZXM6OlNUUklOR190OjpyZWFkVmFsdWUoRGF0YUlPU3RyZWFtJiBpcykgew0KKwlFbnRyeVZhbHVlIHZhbHVlOw0KKwl2YWx1ZS5wdHIgPSBpcy5yZWFkU3RyaW5nKCk7DQorCXJldHVybiB2YWx1ZTsNCit9DQorRW50cnlWYWx1ZSBEZWZhdWx0RW50cnlUeXBlczo6U1RSSU5HX3Q6OmNvcHlWYWx1ZShFbnRyeVZhbHVlIHZhbHVlKXsNCisgIGlmKHZhbHVlLnB0cj09TlVMTCkNCisgICAgcmV0dXJuIHZhbHVlOw0KKwlFbnRyeVZhbHVlIG5ld1ZhbHVlOw0KKwluZXdWYWx1ZS5wdHIgPSBuZXcgc3RkOjpzdHJpbmcoKigoc3RkOjpzdHJpbmcqKXZhbHVlLnB0cikpOw0KKwlyZXR1cm4gbmV3VmFsdWU7DQorfQ0KK3ZvaWQgRGVmYXVsdEVudHJ5VHlwZXM6OlNUUklOR190OjpkZWxldGVWYWx1ZShFbnRyeVZhbHVlIHZhbHVlKXsNCisgIGlmKHZhbHVlLnB0ciE9TlVMTCkNCisgICAgZGVsZXRlIChzdGQ6OnN0cmluZyopdmFsdWUucHRyOw0KK30NCisNCisNCisNCit2b2lkIERlZmF1bHRFbnRyeVR5cGVzOjpyZWdpc3RlclR5cGVzKE5ldHdvcmtUYWJsZUVudHJ5VHlwZU1hbmFnZXIqIG1hbmFnZXIpew0KKwltYW5hZ2VyLT5SZWdpc3RlclR5cGUoQk9PTEVBTik7DQorCW1hbmFnZXItPlJlZ2lzdGVyVHlwZShET1VCTEUpOw0KKwltYW5hZ2VyLT5SZWdpc3RlclR5cGUoU1RSSU5HKTsNCisJbWFuYWdlci0+UmVnaXN0ZXJUeXBlKEJvb2xlYW5BcnJheTo6VFlQRSk7DQorCW1hbmFnZXItPlJlZ2lzdGVyVHlwZShOdW1iZXJBcnJheTo6VFlQRSk7DQorCW1hbmFnZXItPlJlZ2lzdGVyVHlwZShTdHJpbmdBcnJheTo6VFlQRSk7DQorfQ0KKw0KKw0KKw0KKw0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL25ldHdvcmt0YWJsZXMyL3R5cGUvRGVmYXVsdEVudHJ5VHlwZXMuaCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL25ldHdvcmt0YWJsZXMyL3R5cGUvRGVmYXVsdEVudHJ5VHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMzEwZTAwCi0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvbmV0d29ya3RhYmxlczIvdHlwZS9EZWZhdWx0RW50cnlUeXBlcy5oCkBAIC0wLDAgKzEsMTAwIEBACisvKg0KKyAqIERlZmF1bHRFbnRyeVR5cGVzLmgNCisgKg0KKyAqICBDcmVhdGVkIG9uOiBTZXAgMjQsIDIwMTINCisgKiAgICAgIEF1dGhvcjogTWl0Y2hlbGwgV2lsbHMNCisgKi8NCisNCisjaWZuZGVmIERFRkFVTFRFTlRSWVRZUEVTX0hfDQorI2RlZmluZSBERUZBVUxURU5UUllUWVBFU19IXw0KKw0KK2NsYXNzIERlZmF1bHRFbnRyeVR5cGVzOw0KKw0KKyNpbmNsdWRlICJOZXR3b3JrVGFibGVFbnRyeVR5cGVNYW5hZ2VyLmgiDQorDQorDQorDQorc3RhdGljIGNvbnN0IFR5cGVJZCBCT09MRUFOX1JBV19JRCA9IDB4MDA7DQorc3RhdGljIGNvbnN0IFR5cGVJZCBET1VCTEVfUkFXX0lEID0gMHgwMTsNCitzdGF0aWMgY29uc3QgVHlwZUlkIFNUUklOR19SQVdfSUQgPSAweDAyOw0KKw0KK2NsYXNzIERlZmF1bHRFbnRyeVR5cGVzew0KK3ByaXZhdGU6DQorCS8qKg0KKwkgKiBhIGJvb2xlYW4gZW50cnkgdHlwZQ0KKwkgKi8NCisJY2xhc3MgQk9PTEVBTl90IDogcHVibGljIE5ldHdvcmtUYWJsZUVudHJ5VHlwZXsNCisJcHVibGljOg0KKwkJQk9PTEVBTl90KCk7DQorCQkvKioNCisJCSAqIFNlZSB7QGxpbmsgTmV0d29ya1RhYmxlRW50cnlUeXBlfTo6c2VuZFZhbHVlDQorCQkgKi8NCisJCXZpcnR1YWwgdm9pZCBzZW5kVmFsdWUoRW50cnlWYWx1ZSB2YWx1ZSwgRGF0YUlPU3RyZWFtJiBvcyk7DQorCQkNCisJCS8qKg0KKwkJICogU2VlIHtAbGluayBOZXR3b3JrVGFibGVFbnRyeVR5cGV9OjpyZWFkVmFsdWUNCisJCSAqLw0KKwkJdmlydHVhbCBFbnRyeVZhbHVlIHJlYWRWYWx1ZShEYXRhSU9TdHJlYW0mIGlzKTsNCisJfTsNCisJLyoqDQorCSAqIGEgZG91YmxlIGZsb2F0aW5nIHBvaW50IGVudHJ5IHR5cGUNCisJICovDQorCWNsYXNzIERPVUJMRV90IDogcHVibGljIE5ldHdvcmtUYWJsZUVudHJ5VHlwZXsNCisJcHVibGljOg0KKwkJRE9VQkxFX3QoKTsNCisJCQ0KKwkJLyoqDQorCQkgKiBTZWUge0BsaW5rIE5ldHdvcmtUYWJsZUVudHJ5VHlwZX06OnNlbmRWYWx1ZQ0KKwkJICovDQorCQl2aXJ0dWFsIHZvaWQgc2VuZFZhbHVlKEVudHJ5VmFsdWUgdmFsdWUsIERhdGFJT1N0cmVhbSYgb3MpOw0KKwkJDQorCQkvKioNCisJCSAqIFNlZSB7QGxpbmsgTmV0d29ya1RhYmxlRW50cnlUeXBlfTo6c2VuZFZhbHVlDQorCQkgKi8NCisJCXZpcnR1YWwgRW50cnlWYWx1ZSByZWFkVmFsdWUoRGF0YUlPU3RyZWFtJiBpcyk7DQorCX07DQorCS8qKg0KKwkgKiBhIHN0cmluZyBlbnRyeSB0eXBlDQorCSAqLw0KKwljbGFzcyBTVFJJTkdfdCA6IHB1YmxpYyBOZXR3b3JrVGFibGVFbnRyeVR5cGV7DQorCXB1YmxpYzoNCisJCVNUUklOR190KCk7DQorCQkNCisJCS8qKg0KKwkJICogU2VlIHtAbGluayBOZXR3b3JrVGFibGVFbnRyeVR5cGV9OjpzZW5kVmFsdWUNCisJCSAqLw0KKwkJdmlydHVhbCB2b2lkIHNlbmRWYWx1ZShFbnRyeVZhbHVlIHZhbHVlLCBEYXRhSU9TdHJlYW0mIG9zKTsNCisJCQ0KKwkJLyoqDQorCQkgKiBTZWUge0BsaW5rIE5ldHdvcmtUYWJsZUVudHJ5VHlwZX06OnNlbmRWYWx1ZQ0KKwkJICovDQorCQl2aXJ0dWFsIEVudHJ5VmFsdWUgcmVhZFZhbHVlKERhdGFJT1N0cmVhbSYgaXMpOw0KKwkJDQorCQkvKioNCisJCSAqIFNlZSB7QGxpbmsgTmV0d29ya1RhYmxlRW50cnlUeXBlfTo6Y29weVZhbHVlDQorCQkgKi8NCisJCXZpcnR1YWwgRW50cnlWYWx1ZSBjb3B5VmFsdWUoRW50cnlWYWx1ZSB2YWx1ZSk7DQorCQkNCisJCS8qKg0KKwkJICogU2VlIHtAbGluayBOZXR3b3JrVGFibGVFbnRyeVR5cGV9OjpkZWxldGVWYWx1ZQ0KKwkJICovDQorCQl2aXJ0dWFsIHZvaWQgZGVsZXRlVmFsdWUoRW50cnlWYWx1ZSB2YWx1ZSk7DQorCX07DQorcHVibGljOg0KKwkvKioNCisJICogUmVnaXN0ZXJzIHRoZSBzZXQgb2YgZGVmYXVsdCBlbnRyeSB0eXBlcyB3aXRoIHRoZSBnaXZlbiANCisJICogZW50cnkgdHlwZSBtYW5hZ2VyLg0KKwkgKiANCisJICogQHBhcmFtIHR5cGVNYW5hZ2VyIFRoZSBlbnRyeSB0eXBlIG1hbmFnZXIgdG8gdXBkYXRlLiBQb2ludGVyIG11c3Qgbm90IGJlIG51bGwuDQorCSAqLw0KKwlzdGF0aWMgdm9pZCByZWdpc3RlclR5cGVzKE5ldHdvcmtUYWJsZUVudHJ5VHlwZU1hbmFnZXIqIHR5cGVNYW5hZ2VyKTsNCisJDQorCXN0YXRpYyBCT09MRUFOX3QgQk9PTEVBTjsNCisJc3RhdGljIERPVUJMRV90IERPVUJMRTsNCisJc3RhdGljIFNUUklOR190IFNUUklORzsNCit9Ow0KKw0KKw0KKw0KKw0KKyNlbmRpZiAvKiBERUZBVUxURU5UUllUWVBFU19IXyAqLw0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL25ldHdvcmt0YWJsZXMyL3R5cGUvTmV0d29ya1RhYmxlRW50cnlUeXBlLmNwcCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL25ldHdvcmt0YWJsZXMyL3R5cGUvTmV0d29ya1RhYmxlRW50cnlUeXBlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OGNjODhjCi0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvbmV0d29ya3RhYmxlczIvdHlwZS9OZXR3b3JrVGFibGVFbnRyeVR5cGUuY3BwCkBAIC0wLDAgKzEsMjUgQEAKKy8qDQorICogTmV0d29ya1RhYmxlRW50cnlUeXBlLmNwcA0KKyAqDQorICogIENyZWF0ZWQgb246IFNlcCAxNiwgMjAxMg0KKyAqICAgICAgQXV0aG9yOiBNaXRjaGVsbCBXaWxscw0KKyAqLw0KKw0KKyNpbmNsdWRlICJuZXR3b3JrdGFibGVzMi90eXBlL05ldHdvcmtUYWJsZUVudHJ5VHlwZS5oIg0KKw0KKw0KK05ldHdvcmtUYWJsZUVudHJ5VHlwZTo6TmV0d29ya1RhYmxlRW50cnlUeXBlKFR5cGVJZCBfaWQsIGNvbnN0IGNoYXIqIF9uYW1lKSA6IGlkKF9pZCksIG5hbWUoX25hbWUpew0KK30NCitOZXR3b3JrVGFibGVFbnRyeVR5cGU6On5OZXR3b3JrVGFibGVFbnRyeVR5cGUoKXsNCit9DQorDQorICBFbnRyeVZhbHVlIE5ldHdvcmtUYWJsZUVudHJ5VHlwZTo6Y29weVZhbHVlKEVudHJ5VmFsdWUgdmFsdWUpew0KKyAgICByZXR1cm4gdmFsdWU7DQorICB9ICANCisgIHZvaWQgTmV0d29ya1RhYmxlRW50cnlUeXBlOjpkZWxldGVWYWx1ZShFbnRyeVZhbHVlIHZhbHVlKXsNCisgIH0NCisNCisNCitib29sIE5ldHdvcmtUYWJsZUVudHJ5VHlwZTo6aXNDb21wbGV4KCl7DQorCXJldHVybiBmYWxzZTsNCit9DQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvbmV0d29ya3RhYmxlczIvdHlwZS9OZXR3b3JrVGFibGVFbnRyeVR5cGUuaCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL25ldHdvcmt0YWJsZXMyL3R5cGUvTmV0d29ya1RhYmxlRW50cnlUeXBlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmJmM2U3MwotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL25ldHdvcmt0YWJsZXMyL3R5cGUvTmV0d29ya1RhYmxlRW50cnlUeXBlLmgKQEAgLTAsMCArMSw5MiBAQAorLyoNCisgKiBOZXR3b3JrVGFibGVFbnRyeVR5cGUuaA0KKyAqDQorICogIENyZWF0ZWQgb246IFNlcCAxNiwgMjAxMg0KKyAqICAgICAgQXV0aG9yOiBNaXRjaGVsbCBXaWxscw0KKyAqLw0KKw0KKyNpZm5kZWYgTkVUV09SS1RBQkxFRU5UUllUWVBFX0hfDQorI2RlZmluZSBORVRXT1JLVEFCTEVFTlRSWVRZUEVfSF8NCisNCisjaW5jbHVkZSA8c3RkbGliLmg+DQorI2luY2x1ZGUgPHN0ZGlvLmg+DQorI2lmbmRlZiBfV1JTX0tFUk5FTA0KKyNpbmNsdWRlIDxzdGRpbnQuaD4NCisjZW5kaWYNCisNCisvKioNCisgKiBBbiBJRCB3aGljaCBpZGVudGlmaWVzIGEgdHlwZSB0byBvdGhlciBub2RlcyBvbiB0aGUgbmV0d29yay4NCisgKi8NCit0eXBlZGVmIHVpbnQ4X3QgVHlwZUlkOw0KK2NsYXNzIE5ldHdvcmtUYWJsZUVudHJ5VHlwZTsNCisNCisjZGVmaW5lIE1BWF9OVU1fVEFCTEVfRU5UUllfVFlQRVMgMjU2DQorDQorI2luY2x1ZGUgPHN0cmluZz4NCisjaW5jbHVkZSAibmV0d29ya3RhYmxlczIvY29ubmVjdGlvbi9EYXRhSU9TdHJlYW0uaCINCisjaW5jbHVkZSAibmV0d29ya3RhYmxlczIvTmV0d29ya1RhYmxlRW50cnkuaCINCisjaW5jbHVkZSAidGFibGVzL0lUYWJsZS5oIg0KKw0KKy8qKg0KKyAqIFJlcHJlc2VudHMgdGhlIHR5cGUgYXNzb2NpYXRlZCB3aXRoIGEgbmV0d29yayB0YWJsZXMgdmFsdWUuDQorICovDQorY2xhc3MgTmV0d29ya1RhYmxlRW50cnlUeXBlew0KK3B1YmxpYzoNCisJY29uc3QgVHlwZUlkIGlkOw0KKwljb25zdCBjaGFyKiBuYW1lOw0KKwkNCisJLyoqDQorCSAqIERldGVybWluZXMgd2hldGhlciB0aGlzIGRhdGEgdHlwZSBpcyBjb21wbGV4IChpLmUuIGl0IGRvZXMgbm90DQorCSAqIHJlcHJlc2VudCBhIG51bWJlciwgc3RyaW5nLCBvciBib29sZWFuKS4NCisJICogDQorCSAqIEByZXR1cm4gVHJ1ZSBvZiB0aGlzIHR5cGUgaXMgY29tcGxleC4gRmFsc2Ugb3RoZXJ3aXNlLg0KKwkgKi8NCisJdmlydHVhbCBib29sIGlzQ29tcGxleCgpOw0KKwkNCisJLyoqDQorCSAqIFNlcmlhbGl6ZXMgdGhlIGdpdmVuIHZhbHVlIG9uIHRoZSBnaXZlbiBvdXRwdXQgc3RyZWFtLg0KKwkgKiANCisJICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSB0byBzZXJpYWxpemUuDQorCSAqIEBwYXJhbSBvcyBUaGUgb3V0cHV0IHN0cmVhbSB0byB1c2UuDQorCSAqLw0KKwl2aXJ0dWFsIHZvaWQgc2VuZFZhbHVlKEVudHJ5VmFsdWUgdmFsdWUsIERhdGFJT1N0cmVhbSYgb3MpID0gMDsNCisJDQorCS8qKg0KKwkgKiBVbnNlcmlhbGl6ZXMgdGhlIGEgdmFsdWUgb2YgdGhpcyB0eXBlIGZyb20gdGhlIGdpdmVuDQorCSAqIGlucHV0IHN0cmVhbS4NCisJICogDQorCSAqIEBwYXJhbSBpcyBUaGUgaW5wdXQgc3RyZWFtIHRvIHJlYWQgZnJvbS4NCisJICogQHJldHVybiBUaGUgdW5zZXJpYWxpemVkIHZhbHVlLg0KKwkgKi8NCisJdmlydHVhbCBFbnRyeVZhbHVlIHJlYWRWYWx1ZShEYXRhSU9TdHJlYW0mIGlzKSA9IDA7DQorCQ0KKwkvKioNCisJICogQ3JlYXRlcyBhIGNvcHkgb2YgdGhlIGdpdmVuIHZhbHVlIG9mIHRoaXMgdHlwZS4NCisJICogDQorCSAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29weS4NCisJICogQHJldHVybiBBIGNvcHkgb2YgdGhlIGdpdmVuIHZhbHVlIG9mIHRoaXMgdHlwZS4NCisJICovDQorCXZpcnR1YWwgRW50cnlWYWx1ZSBjb3B5VmFsdWUoRW50cnlWYWx1ZSB2YWx1ZSk7DQorCQ0KKwkvKioNCisJICogRGVsZXRlcyBhIHZhbHVlIG9mIHRoaXMgdHlwZS4NCisJICogDQorCSAqIEFmdGVyIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiwgdGhlIGdpdmVuIHZhbHVlIGlzDQorCSAqIG5vIGxvbmdlciB2YWxpZC4NCisJICogDQorCSAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgdG8gZGVsZXRlLg0KKwkgKi8NCisJdmlydHVhbCB2b2lkIGRlbGV0ZVZhbHVlKEVudHJ5VmFsdWUgdmFsdWUpOw0KKwl2aXJ0dWFsIH5OZXR3b3JrVGFibGVFbnRyeVR5cGUoKTsNCitwcm90ZWN0ZWQ6DQorCS8qKg0KKwkgKiBDcmVhdGVzIGEgbmV3IE5ldHdvcmtUYWJsZXNFbnRyeVR5cGUuDQorCSAqIA0KKwkgKiBAcGFyYW0gaWQgVGhlIG51bWVyaWMgSUQgYXNzb2NpYXRlZCB3aXRoIHRoaXMgdHlwZS4gVGhpcyBJRA0KKwkgKiAJcmVwcmVzZW50cyB0aGlzIGRhdGEgdHlwZSB0byBvdGhlciBub2RlcyBvbiB0aGUgbmV0d29yay4NCisJICogQHBhcmFtIG5hbWUgVGhlIHN0cmluZyBuYW1lIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHR5cGUuDQorCSAqLw0KKwlOZXR3b3JrVGFibGVFbnRyeVR5cGUoVHlwZUlkIGlkLCBjb25zdCBjaGFyKiBuYW1lKTsNCit9Ow0KKw0KKyNlbmRpZiAvKiBORVRXT1JLVEFCTEVFTlRSWVRZUEVfSF8gKi8NCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9uZXR3b3JrdGFibGVzMi90eXBlL05ldHdvcmtUYWJsZUVudHJ5VHlwZU1hbmFnZXIuY3BwIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvbmV0d29ya3RhYmxlczIvdHlwZS9OZXR3b3JrVGFibGVFbnRyeVR5cGVNYW5hZ2VyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xY2I0MWYyCi0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvbmV0d29ya3RhYmxlczIvdHlwZS9OZXR3b3JrVGFibGVFbnRyeVR5cGVNYW5hZ2VyLmNwcApAQCAtMCwwICsxLDI1IEBACisvKg0KKyAqIE5ldHdvcmtUYWJsZUVudHJ5VHlwZU1hbmFnZXIuY3BwDQorICoNCisgKiAgQ3JlYXRlZCBvbjogU2VwIDE2LCAyMDEyDQorICogICAgICBBdXRob3I6IE1pdGNoZWxsIFdpbGxzDQorICovDQorDQorI2luY2x1ZGUgIm5ldHdvcmt0YWJsZXMyL3R5cGUvTmV0d29ya1RhYmxlRW50cnlUeXBlTWFuYWdlci5oIg0KKyNpbmNsdWRlICJuZXR3b3JrdGFibGVzMi90eXBlL0RlZmF1bHRFbnRyeVR5cGVzLmgiDQorDQorDQorTmV0d29ya1RhYmxlRW50cnlUeXBlKiBOZXR3b3JrVGFibGVFbnRyeVR5cGVNYW5hZ2VyOjpHZXRUeXBlKFR5cGVJZCBpZCl7DQorCXJldHVybiBlbnRyeVR5cGVzW2lkXTsNCit9DQorDQordm9pZCBOZXR3b3JrVGFibGVFbnRyeVR5cGVNYW5hZ2VyOjpSZWdpc3RlclR5cGUoTmV0d29ya1RhYmxlRW50cnlUeXBlJiB0eXBlKXsNCisJZW50cnlUeXBlc1t0eXBlLmlkXSA9ICZ0eXBlOw0KK30NCisNCitOZXR3b3JrVGFibGVFbnRyeVR5cGVNYW5hZ2VyOjpOZXR3b3JrVGFibGVFbnRyeVR5cGVNYW5hZ2VyKCl7DQorCWZvcihpbnQgaSA9IDA7IGk8TUFYX05VTV9UQUJMRV9FTlRSWV9UWVBFUzsgKytpKQ0KKwkJZW50cnlUeXBlc1tpXSA9IE5VTEw7DQorCQ0KKwlEZWZhdWx0RW50cnlUeXBlczo6cmVnaXN0ZXJUeXBlcyh0aGlzKTsNCit9DQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvbmV0d29ya3RhYmxlczIvdHlwZS9OZXR3b3JrVGFibGVFbnRyeVR5cGVNYW5hZ2VyLmggYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9uZXR3b3JrdGFibGVzMi90eXBlL05ldHdvcmtUYWJsZUVudHJ5VHlwZU1hbmFnZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTNjYzRhCi0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvbmV0d29ya3RhYmxlczIvdHlwZS9OZXR3b3JrVGFibGVFbnRyeVR5cGVNYW5hZ2VyLmgKQEAgLTAsMCArMSw0NyBAQAorLyoNCisgKiBOZXR3b3JrVGFibGVFbnRyeVR5cGVNYW5hZ2VyLmgNCisgKg0KKyAqICBDcmVhdGVkIG9uOiBTZXAgMTYsIDIwMTINCisgKiAgICAgIEF1dGhvcjogTWl0Y2hlbGwgV2lsbHMNCisgKi8NCisNCisjaWZuZGVmIE5FVFdPUktUQUJMRUVOVFJZVFlQRU1BTkFHRVJfSF8NCisjZGVmaW5lIE5FVFdPUktUQUJMRUVOVFJZVFlQRU1BTkFHRVJfSF8NCisNCitjbGFzcyBOZXR3b3JrVGFibGVFbnRyeVR5cGVNYW5hZ2VyOw0KKw0KKyNpbmNsdWRlICJOZXR3b3JrVGFibGVFbnRyeVR5cGUuaCINCisNCitjbGFzcyBOZXR3b3JrVGFibGVFbnRyeVR5cGVNYW5hZ2VyDQorew0KK3ByaXZhdGU6DQorCU5ldHdvcmtUYWJsZUVudHJ5VHlwZSogZW50cnlUeXBlc1tNQVhfTlVNX1RBQkxFX0VOVFJZX1RZUEVTXTsNCitwdWJsaWM6DQorCS8qKg0KKwkgKiBDcmVhdGVzIGEgbmV3IE5ldHdvcmtUYWJsZUVudHJ5VHlwZU1hbmFnZXIsIHdpdGggdGhlIGRlZmF1bHQNCisJICogdHlwZXMgcmVnaXN0ZXJlZCB1bmRlciB0aGVpciByZXNwZWN0aXZlIFR5cGVJRCdzLCBhbmQgYWxsIG90aGVyDQorCSAqIFR5cGVJRCdzIG51bGwuDQorCSAqLw0KKwlOZXR3b3JrVGFibGVFbnRyeVR5cGVNYW5hZ2VyKCk7DQorCQ0KKwkvKioNCisJICogUmV0cmlldmVzIHRoZSBlbnRyeSB0eXBlIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4NCisJICogdHlwZSBpZCwgaWYgb25lIGV4aXN0cy4NCisJICogDQorCSAqIEBwYXJhbSB0eXBlIFRoZSBpZGVudGlmaWVyIGJ5IHdoaWNoIHRvIHJldHJpZXZlIGEgdHlwZS4NCisJICogQHJldHVybiBUaGUgTmV0d29ya1RhYmxlRW50cnlUeXBlIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4NCisJICogCXR5cGUgaWRlbnRpZmllciwgaWYgb25lIGV4aXN0cy4gT3RoZXJ3aXNlLCBudWxsLg0KKwkgKi8NCisJTmV0d29ya1RhYmxlRW50cnlUeXBlKiBHZXRUeXBlKFR5cGVJZCB0eXBlKTsNCisJDQorCS8qKg0KKwkgKiBSZWdpc3RlcnMgdGhlIGdpdmVuIE5ldHdvcmtUYWJsZUVudHJ5VHlwZSB3aXRoIHRoaXMgdHlwZQ0KKwkgKiBtYW5hZ2VyLCBzdWNoIHRoYXQgaXMgaXMgcmV0dXJuZWQgYnkgc3Vic2VxdWVudCBjYWxscw0KKwkgKiB0byBHZXRUeXBlIHdpdGggdGhlIGFwcHJvcHJpYXRlIElELg0KKwkgKiANCisJICogQHBhcmFtIHR5cGUgVGhlIHR5cGUgdG8gcmVnaXN0ZXIuDQorCSAqLw0KKwl2b2lkIFJlZ2lzdGVyVHlwZShOZXR3b3JrVGFibGVFbnRyeVR5cGUmIHR5cGUpOw0KK307DQorDQorI2VuZGlmIC8qIE5FVFdPUktUQUJMRUVOVFJZVFlQRU1BTkFHRVJfSF8gKi8NCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9uZXR3b3JrdGFibGVzMi90eXBlL051bWJlckFycmF5LmNwcCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL25ldHdvcmt0YWJsZXMyL3R5cGUvTnVtYmVyQXJyYXkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkYzY5ZTgKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9uZXR3b3JrdGFibGVzMi90eXBlL051bWJlckFycmF5LmNwcApAQCAtMCwwICsxLDMyIEBACisvKg0KKyAqIE51bWJlckFycmF5LmNwcA0KKyAqDQorICogIENyZWF0ZWQgb246IE5vdiAxNiwgMjAxMg0KKyAqICAgICAgQXV0aG9yOiBNaXRjaGVsbCBXaWxscw0KKyAqLw0KKw0KKyNpbmNsdWRlICJuZXR3b3JrdGFibGVzMi90eXBlL051bWJlckFycmF5LmgiDQorI2luY2x1ZGUgIm5ldHdvcmt0YWJsZXMyL3R5cGUvRGVmYXVsdEVudHJ5VHlwZXMuaCINCisNCisNCitjb25zdCBUeXBlSWQgTnVtYmVyQXJyYXk6Ok5VTUJFUl9BUlJBWV9SQVdfSUQgPSAweDExOw0KK0FycmF5RW50cnlUeXBlIE51bWJlckFycmF5OjpUWVBFKE5VTUJFUl9BUlJBWV9SQVdfSUQsIERlZmF1bHRFbnRyeVR5cGVzOjpET1VCTEUpOw0KKw0KK051bWJlckFycmF5OjpOdW1iZXJBcnJheSgpIDogQXJyYXlEYXRhKFRZUEUpIHsNCit9DQorDQorZG91YmxlIE51bWJlckFycmF5OjpnZXQoaW50IGluZGV4KXsNCisJcmV0dXJuIF9nZXQoaW5kZXgpLmI7DQorfQ0KKw0KK3ZvaWQgTnVtYmVyQXJyYXk6OnNldChpbnQgaW5kZXgsIGRvdWJsZSB2YWx1ZSl7DQorCUVudHJ5VmFsdWUgZVZhbHVlOw0KKwllVmFsdWUuZiA9IHZhbHVlOw0KKwlfc2V0KGluZGV4LCBlVmFsdWUpOw0KK30NCisNCit2b2lkIE51bWJlckFycmF5OjphZGQoZG91YmxlIHZhbHVlKXsNCisJRW50cnlWYWx1ZSBlVmFsdWU7DQorCWVWYWx1ZS5mID0gdmFsdWU7DQorCV9hZGQoZVZhbHVlKTsNCit9DQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvbmV0d29ya3RhYmxlczIvdHlwZS9OdW1iZXJBcnJheS5oIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvbmV0d29ya3RhYmxlczIvdHlwZS9OdW1iZXJBcnJheS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjOGM3ZTgKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9uZXR3b3JrdGFibGVzMi90eXBlL051bWJlckFycmF5LmgKQEAgLTAsMCArMSwzMSBAQAorLyoNCisgKiBOdW1iZXJBcnJheS5oDQorICoNCisgKiAgQ3JlYXRlZCBvbjogTm92IDE2LCAyMDEyDQorICogICAgICBBdXRob3I6IE1pdGNoZWxsIFdpbGxzDQorICovDQorDQorI2lmbmRlZiBOVU1CRVJBUlJBWV9IXw0KKyNkZWZpbmUgTlVNQkVSQVJSQVlfSF8NCisNCisjaW5jbHVkZSAibmV0d29ya3RhYmxlczIvdHlwZS9BcnJheURhdGEuaCINCisjaW5jbHVkZSAibmV0d29ya3RhYmxlczIvdHlwZS9BcnJheUVudHJ5VHlwZS5oIg0KKw0KKy8vVE9ETzogTnVtYmVyQXJyYXkgYXBwZWFycyB1bnVzZWQ7IHJlcGxhY2Ugd2l0aCBuYW1lc3BhY2U/DQorY2xhc3MgTnVtYmVyQXJyYXkgOiBwdWJsaWMgQXJyYXlEYXRhew0KKw0KK3B1YmxpYzoNCisJc3RhdGljIGNvbnN0IFR5cGVJZCBOVU1CRVJfQVJSQVlfUkFXX0lEOw0KKyAgICBzdGF0aWMgQXJyYXlFbnRyeVR5cGUgVFlQRTsNCisNCisNCisgICAgTnVtYmVyQXJyYXkoKTsNCisgICAgDQorICAgIGRvdWJsZSBnZXQoaW50IGluZGV4KTsNCisgICAgdm9pZCBzZXQoaW50IGluZGV4LCBkb3VibGUgdmFsdWUpOw0KKyAgICB2b2lkIGFkZChkb3VibGUgdmFsdWUpOw0KK307DQorDQorDQorDQorI2VuZGlmIC8qIE5VTUJFUkFSUkFZX0hfICovDQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvbmV0d29ya3RhYmxlczIvdHlwZS9TdHJpbmdBcnJheS5jcHAgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9uZXR3b3JrdGFibGVzMi90eXBlL1N0cmluZ0FycmF5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODhhMjc0Ci0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvbmV0d29ya3RhYmxlczIvdHlwZS9TdHJpbmdBcnJheS5jcHAKQEAgLTAsMCArMSwzMiBAQAorLyoNCisgKiBTdHJpbmdBcnJheQ0KKyAqDQorICogIENyZWF0ZWQgb246IE5vdiAxNiwgMjAxMg0KKyAqICAgICAgQXV0aG9yOiBNaXRjaGVsbCBXaWxscw0KKyAqLw0KKw0KKyNpbmNsdWRlICJuZXR3b3JrdGFibGVzMi90eXBlL1N0cmluZ0FycmF5LmgiDQorI2luY2x1ZGUgIm5ldHdvcmt0YWJsZXMyL3R5cGUvRGVmYXVsdEVudHJ5VHlwZXMuaCINCisNCisNCitjb25zdCBUeXBlSWQgU3RyaW5nQXJyYXk6OlNUUklOR19BUlJBWV9SQVdfSUQgPSAweDEyOw0KK0FycmF5RW50cnlUeXBlIFN0cmluZ0FycmF5OjpUWVBFKFNUUklOR19BUlJBWV9SQVdfSUQsIERlZmF1bHRFbnRyeVR5cGVzOjpTVFJJTkcpOw0KKw0KK1N0cmluZ0FycmF5OjpTdHJpbmdBcnJheSgpIDogQXJyYXlEYXRhKFRZUEUpIHsNCit9DQorDQorc3RkOjpzdHJpbmcgU3RyaW5nQXJyYXk6OmdldChpbnQgaW5kZXgpew0KKwlyZXR1cm4gKihzdGQ6OnN0cmluZyopX2dldChpbmRleCkucHRyOw0KK30NCisNCit2b2lkIFN0cmluZ0FycmF5OjpzZXQoaW50IGluZGV4LCBzdGQ6OnN0cmluZyB2YWx1ZSl7DQorCUVudHJ5VmFsdWUgZVZhbHVlOw0KKwllVmFsdWUucHRyID0gJnZhbHVlOw0KKwlfc2V0KGluZGV4LCBlVmFsdWUpOw0KK30NCisNCit2b2lkIFN0cmluZ0FycmF5OjphZGQoc3RkOjpzdHJpbmcgdmFsdWUpew0KKwlFbnRyeVZhbHVlIGVWYWx1ZTsNCisJZVZhbHVlLnB0ciA9ICZ2YWx1ZTsNCisJX2FkZChlVmFsdWUpOw0KK30NCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9uZXR3b3JrdGFibGVzMi90eXBlL1N0cmluZ0FycmF5LmggYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9uZXR3b3JrdGFibGVzMi90eXBlL1N0cmluZ0FycmF5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjMxMTRjMgotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL25ldHdvcmt0YWJsZXMyL3R5cGUvU3RyaW5nQXJyYXkuaApAQCAtMCwwICsxLDMwIEBACisvKg0KKyAqIFN0cmluZ0FycmF5LmgNCisgKg0KKyAqICBDcmVhdGVkIG9uOiBOb3YgMTYsIDIwMTINCisgKiAgICAgIEF1dGhvcjogTWl0Y2hlbGwgV2lsbHMNCisgKi8NCisNCisjaWZuZGVmIFNUUklOR0FSUkFZX0hfDQorI2RlZmluZSBTVFJJTkdBUlJBWV9IXw0KKw0KKw0KKyNpbmNsdWRlICJuZXR3b3JrdGFibGVzMi90eXBlL0FycmF5RGF0YS5oIg0KKyNpbmNsdWRlICJuZXR3b3JrdGFibGVzMi90eXBlL0FycmF5RW50cnlUeXBlLmgiDQorDQorLy9UT0RPOiBTdHJpbmdBcnJheSBhcHBlYXJzIHVudXNlZDsgcmVwbGFjZSB3aXRoIG5hbWVzcGFjZT8NCitjbGFzcyBTdHJpbmdBcnJheSA6IHB1YmxpYyBBcnJheURhdGF7DQorDQorcHVibGljOg0KKwlzdGF0aWMgY29uc3QgVHlwZUlkIFNUUklOR19BUlJBWV9SQVdfSUQ7DQorICAgIHN0YXRpYyBBcnJheUVudHJ5VHlwZSBUWVBFOw0KKw0KKw0KKyAgICBTdHJpbmdBcnJheSgpOw0KKyAgICANCisgICAgc3RkOjpzdHJpbmcgZ2V0KGludCBpbmRleCk7DQorICAgIHZvaWQgc2V0KGludCBpbmRleCwgc3RkOjpzdHJpbmcgdmFsdWUpOw0KKyAgICB2b2lkIGFkZChzdGQ6OnN0cmluZyB2YWx1ZSk7DQorfTsNCisNCisjZW5kaWYgLyogU1RSSU5HQVJSQVlfSF8gKi8NCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9uZXR3b3JrdGFibGVzMi91dGlsL0VPRkV4Y2VwdGlvbi5jcHAgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9uZXR3b3JrdGFibGVzMi91dGlsL0VPRkV4Y2VwdGlvbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzZjZTQ1NQotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL25ldHdvcmt0YWJsZXMyL3V0aWwvRU9GRXhjZXB0aW9uLmNwcApAQCAtMCwwICsxLDE0IEBACisvKg0KKyAqIEVPRkV4Y2VwdGlvbi5jcHANCisgKg0KKyAqICBDcmVhdGVkIG9uOiBPY3QgMSwgMjAxMg0KKyAqICAgICAgQXV0aG9yOiBNaXRjaGVsbCBXaWxscw0KKyAqLw0KKyNpbmNsdWRlICJuZXR3b3JrdGFibGVzMi91dGlsL0VPRkV4Y2VwdGlvbi5oIg0KKw0KK0VPRkV4Y2VwdGlvbjo6RU9GRXhjZXB0aW9uKCkgOiBJT0V4Y2VwdGlvbigiRW5kIG9mIEZpbGUiKXt9DQorRU9GRXhjZXB0aW9uOjp+RU9GRXhjZXB0aW9uKCkgdGhyb3coKXt9DQorDQorYm9vbCBFT0ZFeGNlcHRpb246OmlzRU9GKCl7DQorCXJldHVybiB0cnVlOw0KK30NCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9uZXR3b3JrdGFibGVzMi91dGlsL0VPRkV4Y2VwdGlvbi5oIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvbmV0d29ya3RhYmxlczIvdXRpbC9FT0ZFeGNlcHRpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NDE2ZjRiCi0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvbmV0d29ya3RhYmxlczIvdXRpbC9FT0ZFeGNlcHRpb24uaApAQCAtMCwwICsxLDM1IEBACisvKg0KKyAqIEVPRkV4Y2VwdGlvbi5oDQorICoNCisgKiAgQ3JlYXRlZCBvbjogT2N0IDEsIDIwMTINCisgKiAgICAgIEF1dGhvcjogTWl0Y2hlbGwgV2lsbHMNCisgKi8NCisNCisjaWZuZGVmIEVPRkVYQ0VQVElPTl9IXw0KKyNkZWZpbmUgRU9GRVhDRVBUSU9OX0hfDQorDQorI2luY2x1ZGUgIklPRXhjZXB0aW9uLmgiDQorDQorDQorLyoqDQorICogSW5kaWNhdGVzIHRoYXQgYW4gRU9GIHdhcyBlbmNvdW50ZXJlZCBkdXJpbmcgYW4gSS9PIG9wZXJhdGlvbiwNCisgKiBhbmQgdGhlcmVmb3JlIHRoZSBvcGVyYXRpb24gY291bGQgbm90IGJlIGNvbXBsZXRlZC4gDQorICovDQorY2xhc3MgRU9GRXhjZXB0aW9uIDogcHVibGljIElPRXhjZXB0aW9uew0KK3B1YmxpYzoNCisJLyoqDQorCSAqIENyZWF0ZXMgYW4gRU9GRXhjZXB0aW9uLg0KKwkgKi8NCisJRU9GRXhjZXB0aW9uKCk7DQorCXZpcnR1YWwgfkVPRkV4Y2VwdGlvbigpIHRocm93ICgpOw0KKwkNCisJLyoqDQorCSAqIEltcGxlbWVudHMge0BsaW5rIElPRXhjZXB0aW9ufTo6aXNFT0YoKSANCisJICovDQorCXZpcnR1YWwgYm9vbCBpc0VPRigpOw0KK307DQorDQorDQorDQorDQorI2VuZGlmIC8qIEVPRkVYQ0VQVElPTl9IXyAqLw0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL25ldHdvcmt0YWJsZXMyL3V0aWwvSU9FeGNlcHRpb24uY3BwIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvbmV0d29ya3RhYmxlczIvdXRpbC9JT0V4Y2VwdGlvbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRkY2ExMwotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL25ldHdvcmt0YWJsZXMyL3V0aWwvSU9FeGNlcHRpb24uY3BwCkBAIC0wLDAgKzEsMjQgQEAKKy8qDQorICogSU9FeGNlcHRpb24uY3BwDQorICoNCisgKiAgQ3JlYXRlZCBvbjogT2N0IDEsIDIwMTINCisgKiAgICAgIEF1dGhvcjogTWl0Y2hlbGwgV2lsbHMNCisgKi8NCisNCisjaW5jbHVkZSAibmV0d29ya3RhYmxlczIvdXRpbC9JT0V4Y2VwdGlvbi5oIg0KKyNpbmNsdWRlIDxzdGRsaWIuaD4NCisjaW5jbHVkZSA8c3RyaW5nLmg+DQorDQorDQorSU9FeGNlcHRpb246OklPRXhjZXB0aW9uKGNvbnN0IGNoYXIqIG1zZykgOiBtZXNzYWdlKHN0cmR1cChtc2cpKSwgZXJyb3JWYWx1ZSgwKXt9DQorSU9FeGNlcHRpb246OklPRXhjZXB0aW9uKGNvbnN0IGNoYXIqIG1zZywgaW50IF9lcnJvclZhbHVlKSA6IG1lc3NhZ2Uoc3RyZHVwKG1zZykpLCBlcnJvclZhbHVlKF9lcnJvclZhbHVlKXt9DQorDQorY29uc3QgY2hhciogSU9FeGNlcHRpb246OndoYXQoKXsNCisJcmV0dXJuIG1lc3NhZ2U7DQorfQ0KKw0KK2Jvb2wgSU9FeGNlcHRpb246OmlzRU9GKCl7cmV0dXJuIGZhbHNlO30NCisNCitJT0V4Y2VwdGlvbjo6fklPRXhjZXB0aW9uKCkgdGhyb3cgKCl7DQorCWZyZWUoKHZvaWQqKW1lc3NhZ2UpOw0KK30NCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9uZXR3b3JrdGFibGVzMi91dGlsL0lPRXhjZXB0aW9uLmggYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9uZXR3b3JrdGFibGVzMi91dGlsL0lPRXhjZXB0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjI5M2VmNQotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL25ldHdvcmt0YWJsZXMyL3V0aWwvSU9FeGNlcHRpb24uaApAQCAtMCwwICsxLDU2IEBACisvKg0KKyAqIElPRXhjZXB0aW9uLmgNCisgKg0KKyAqICBDcmVhdGVkIG9uOiBPY3QgMSwgMjAxMg0KKyAqICAgICAgQXV0aG9yOiBNaXRjaGVsbCBXaWxscw0KKyAqLw0KKw0KKyNpZm5kZWYgSU9FWENFUFRJT05fSF8NCisjZGVmaW5lIElPRVhDRVBUSU9OX0hfDQorDQorI2luY2x1ZGUgPGV4Y2VwdGlvbj4NCisNCisvKioNCisgKiBJbmlkY2F0ZXMgdGhhdCBhbiB1bnJlY292ZXJhYmxlIEkvTyBmYWlsdXJlIG9jY3VyZWQuDQorICovDQorY2xhc3MgSU9FeGNlcHRpb24gOiBwdWJsaWMgc3RkOjpleGNlcHRpb257DQorcHVibGljOg0KKwkvKioNCisJICogQ3JlYXRlcyBhIG5ldyBJT0V4Y2VwdGlvbiB3aXRoIHRoZSBnaXZlbiBtZXNzYWdlLg0KKwkgKiANCisJICogQHBhcmFtIG1lc3NhZ2UgVGhlIG1lc3NhZ2UgdG8gYXNzb2NpYXRlIHdpdGggdGhpcyBleGNlcHRpb24uDQorCSAqLw0KKwlJT0V4Y2VwdGlvbihjb25zdCBjaGFyKiBtZXNzYWdlKTsNCisJDQorCS8qKg0KKwkgKiBDcmVhdGVzIGEgbmV3IElPRXhjZXB0aW9uIHdpdGggdGhlIGdpdmVuIG1lc3NhZ2UgYW5kDQorCSAqIGVycm9yIHZhbHVlLg0KKwkgKiANCisJICogQHBhcmFtIG1lc3NhZ2UgVGhlIG1lc3NhZ2UgdG8gYXNzb2NpYXRlIHdpdGggdGhpcyBleGNlcHRpb24uDQorCSAqIEBwYXJhbSBlcnJvclZhbHVlIFRoZSBpbnRlZ2VyIGNvZGUgdG8gYXNzb2NpYXRlIHdpdGggdGhpcyBleGNlcHRpb24uDQorCSAqLw0KKwlJT0V4Y2VwdGlvbihjb25zdCBjaGFyKiBtZXNzYWdlLCBpbnQgZXJyb3JWYWx1ZSk7DQorCQ0KKwkvKioNCisJICogR2V0cyB0aGUgbWVzc2FnZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBleGNlcHRpb24uDQorCSAqIA0KKwkgKiBAcmV0dXJuIFRoZSBtZXNzYWdlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGV4Y2VwdGlvbi4NCisJICovDQorCWNvbnN0IGNoYXIqIHdoYXQoKTsNCisJDQorCS8qKg0KKwkgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhpcyBleGNlcHRpb24gaW5kaWNhdGVzIHRoYXQgYW4gRU9GDQorCSAqIHdhcyBlbmNvdW50ZXJlZC4NCisJICogDQorCSAqIEByZXR1cm4gVHJ1ZSBpZiB0aGlzIGV4Y2VwdGlvbiBpbmRpY2F0ZXMgdGhhdCBhbiBFT0Ygd2FzIGVuY291bnRlcmVkLg0KKwkgKiAJRmFsc2Ugb3RoZXJ3aXNlLg0KKwkgKi8NCisJdmlydHVhbCBib29sIGlzRU9GKCk7DQorCXZpcnR1YWwgfklPRXhjZXB0aW9uKCkgdGhyb3cgKCk7DQorcHJpdmF0ZToNCisJY29uc3QgY2hhciogbWVzc2FnZTsNCisJaW50IGVycm9yVmFsdWU7DQorfTsNCisNCisNCisjZW5kaWYgLyogSU9FWENFUFRJT05fSF8gKi8NCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9uZXR3b3JrdGFibGVzMi91dGlsL0lsbGVnYWxTdGF0ZUV4Y2VwdGlvbi5jcHAgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9uZXR3b3JrdGFibGVzMi91dGlsL0lsbGVnYWxTdGF0ZUV4Y2VwdGlvbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGM1MWRjZAotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL25ldHdvcmt0YWJsZXMyL3V0aWwvSWxsZWdhbFN0YXRlRXhjZXB0aW9uLmNwcApAQCAtMCwwICsxLDE2IEBACisvKg0KKyAqIElsbGVnYWxTdGF0ZUV4Y2VwdGlvbi5jcHANCisgKg0KKyAqICBDcmVhdGVkIG9uOiBTZXAgMTYsIDIwMTINCisgKiAgICAgIEF1dGhvcjogTWl0Y2hlbGwgV2lsbHMNCisgKi8NCisNCisjaW5jbHVkZSAibmV0d29ya3RhYmxlczIvdXRpbC9JbGxlZ2FsU3RhdGVFeGNlcHRpb24uaCINCisNCitJbGxlZ2FsU3RhdGVFeGNlcHRpb246OklsbGVnYWxTdGF0ZUV4Y2VwdGlvbihjb25zdCBjaGFyKiBtc2cpIA0KKwk6IG1lc3NhZ2UobXNnKQ0KK3sNCit9DQorSWxsZWdhbFN0YXRlRXhjZXB0aW9uOjp+SWxsZWdhbFN0YXRlRXhjZXB0aW9uKCkgdGhyb3cgKCkNCit7CQ0KK30NCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9uZXR3b3JrdGFibGVzMi91dGlsL0lsbGVnYWxTdGF0ZUV4Y2VwdGlvbi5oIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvbmV0d29ya3RhYmxlczIvdXRpbC9JbGxlZ2FsU3RhdGVFeGNlcHRpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43M2M4OWQ2Ci0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvbmV0d29ya3RhYmxlczIvdXRpbC9JbGxlZ2FsU3RhdGVFeGNlcHRpb24uaApAQCAtMCwwICsxLDIzIEBACisvKg0KKyAqIElsbGVnYWxTdGF0ZUV4Y2VwdGlvbi5oDQorICoNCisgKiAgQ3JlYXRlZCBvbjogU2VwIDE2LCAyMDEyDQorICogICAgICBBdXRob3I6IE1pdGNoZWxsIFdpbGxzDQorICovDQorDQorI2lmbmRlZiBJTExFR0FMU1RBVEVFWENFUFRJT05fSF8NCisjZGVmaW5lIElMTEVHQUxTVEFURUVYQ0VQVElPTl9IXw0KKw0KKyNpbmNsdWRlIDxleGNlcHRpb24+DQorI2luY2x1ZGUgPHN0cmluZz4NCisNCitjbGFzcyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24gOiBwdWJsaWMgc3RkOjpleGNlcHRpb257DQorcHVibGljOg0KKwlJbGxlZ2FsU3RhdGVFeGNlcHRpb24oY29uc3QgY2hhciogbWVzc2FnZSk7DQorCWNvbnN0IGNoYXIqIHdoYXQoKXtyZXR1cm4gbWVzc2FnZS5jX3N0cigpO307DQorCX5JbGxlZ2FsU3RhdGVFeGNlcHRpb24oKSB0aHJvdyAoKTsNCitwcml2YXRlOg0KKwlzdGQ6OnN0cmluZyBtZXNzYWdlOw0KK307DQorDQorI2VuZGlmIC8qIElMTEVHQUxTVEFURUVYQ0VQVElPTl9IXyAqLw0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL25ldHdvcmt0YWJsZXMyL3V0aWwvU3RyaW5nQ2FjaGUuY3BwIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvbmV0d29ya3RhYmxlczIvdXRpbC9TdHJpbmdDYWNoZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTU5ZDIxZgotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL25ldHdvcmt0YWJsZXMyL3V0aWwvU3RyaW5nQ2FjaGUuY3BwCkBAIC0wLDAgKzEsMjcgQEAKKy8qDQorICogU3RyaW5nQ2FjaGUuY3BwDQorICoNCisgKiAgQ3JlYXRlZCBvbjogT2N0IDE2LCAyMDEyDQorICogICAgICBBdXRob3I6IE1pdGNoZWxsIFdpbGxzDQorICovDQorDQorI2luY2x1ZGUgPG1hcD4NCisjaW5jbHVkZSAibmV0d29ya3RhYmxlczIvdXRpbC9TdHJpbmdDYWNoZS5oIg0KKw0KK3VzaW5nIG5hbWVzcGFjZSBzdGQ7DQorDQorU3RyaW5nQ2FjaGU6OlN0cmluZ0NhY2hlKCl7DQorfQ0KK1N0cmluZ0NhY2hlOjp+U3RyaW5nQ2FjaGUoKXsNCit9DQorDQorc3RkOjpzdHJpbmcmIFN0cmluZ0NhY2hlOjpHZXQoY29uc3Qgc3RkOjpzdHJpbmcmIGlucHV0KXsNCisJbWFwPHN0ZDo6c3RyaW5nLCBzdGQ6OnN0cmluZz46Oml0ZXJhdG9yIGl0ciA9IGNhY2hlLmZpbmQoaW5wdXQpOw0KKwlpZihpdHIgIT0gY2FjaGUuZW5kKCkpew0KKwkgICByZXR1cm4gaXRyLT5zZWNvbmQ7DQorCX0NCisJZWxzZXsNCisJCWNhY2hlW2lucHV0XSA9IENhbGMoaW5wdXQpOw0KKwkJcmV0dXJuIGNhY2hlW2lucHV0XTsNCisJfQ0KK30NCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9uZXR3b3JrdGFibGVzMi91dGlsL1N0cmluZ0NhY2hlLmggYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9uZXR3b3JrdGFibGVzMi91dGlsL1N0cmluZ0NhY2hlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWU4NmFhMgotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL25ldHdvcmt0YWJsZXMyL3V0aWwvU3RyaW5nQ2FjaGUuaApAQCAtMCwwICsxLDM5IEBACisjaWZuZGVmIF9TVFJJTkdDQUNIRV9IXw0KKyNkZWZpbmUgX1NUUklOR0NBQ0hFX0hfDQorDQorI2luY2x1ZGUgPG1hcD4NCisjaW5jbHVkZSA8c3RyaW5nPg0KKw0KK3VzaW5nIG5hbWVzcGFjZSBzdGQ7DQorDQorLyoqDQorICogQSBzaW1wbGUgY2FjaGUgdGhhdCBhbGxvd3MgZm9yIGNhY2hpbmcgdGhlIG1hcHBpbmcgb2Ygb25lIHN0cmluZyB0byBhbm90aGVyIGNhbGN1bGF0ZWQgb25lDQorICogDQorICogQGF1dGhvciBNaXRjaGVsbA0KKyAqDQorICovDQorY2xhc3MgU3RyaW5nQ2FjaGUgew0KK3ByaXZhdGU6DQorCW1hcDxzdGQ6OnN0cmluZywgc3RkOjpzdHJpbmc+IGNhY2hlOw0KKw0KKwkNCisJLyoqDQorCSAqIEBwYXJhbSBpbnB1dA0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBmb3IgYSBnaXZlbiBpbnB1dA0KKwkgKi8NCitwdWJsaWM6DQorCVN0cmluZ0NhY2hlKCk7DQorCXZpcnR1YWwgflN0cmluZ0NhY2hlKCk7DQorCQ0KKwkNCisJc3RkOjpzdHJpbmcmIEdldChjb25zdCBzdGQ6OnN0cmluZyYgaW5wdXQpOw0KKwkNCisJLyoqDQorCSAqIFdpbGwgb25seSBiZSBjYWxsZWQgaWYgYSB2YWx1ZSBoYXMgbm90IGFscmVhZHkgYmVlbiBjYWxjdWxhdGVkDQorCSAqIEBwYXJhbSBpbnB1dA0KKwkgKiBAcmV0dXJuIHRoZSBjYWxjdWxhdGVkIHZhbHVlIGZvciBhIGdpdmVuIGlucHV0DQorCSAqLw0KKwl2aXJ0dWFsIHN0ZDo6c3RyaW5nIENhbGMoY29uc3Qgc3RkOjpzdHJpbmcmIGlucHV0KSA9IDA7DQorfTsNCisNCisjZW5kaWYNCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9uZXR3b3JrdGFibGVzMi91dGlsL1N5c3RlbS5jcHAgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9uZXR3b3JrdGFibGVzMi91dGlsL1N5c3RlbS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzU4NmUxNwotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL25ldHdvcmt0YWJsZXMyL3V0aWwvU3lzdGVtLmNwcApAQCAtMCwwICsxLDI2IEBACisvKg0KKyAqIFN5c3RlbS5jcHANCisgKg0KKyAqICBDcmVhdGVkIG9uOiBTZXAgMjYsIDIwMTINCisgKiAgICAgIEF1dGhvcjogTWl0Y2hlbGwgV2lsbHMNCisgKi8NCisNCisjaW5jbHVkZSAibmV0d29ya3RhYmxlczIvdXRpbC9TeXN0ZW0uaCINCisjaW5jbHVkZSAic2VtTGliLmgiDQorI2luY2x1ZGUgPHN0ZGlvLmg+DQorI2luY2x1ZGUgPHN5c0xpYi5oPiAvLyBmb3Igc3lzQ2xrUmF0ZUdldA0KKyNpbmNsdWRlIDx1c3JMaWIuaD4gLy8gZm9yIHRhc2tEZWxheQ0KKw0KK3ZvaWQgc2xlZXBfbXModW5zaWduZWQgbG9uZyBtcyl7DQorCXRhc2tEZWxheSgoSU5UMzIpKChkb3VibGUpc3lzQ2xrUmF0ZUdldCgpICogbXMgLyAxMDAwKSk7DQorfQ0KK3Vuc2lnbmVkIGxvbmcgY3VycmVudFRpbWVNaWxsaXMoKXsNCisJc3RydWN0IHRpbWVzcGVjIHRwOw0KKwljbG9ja19nZXR0aW1lKENMT0NLX1JFQUxUSU1FLCZ0cCk7DQorCXJldHVybiB0cC50dl9zZWMqMTAwMCArIHRwLnR2X25zZWMvMTAwMDsNCit9DQordm9pZCB3cml0ZVdhcm5pbmcoY29uc3QgY2hhciogbWVzc2FnZSl7DQorCWZwcmludGYoc3RkZXJyLCAiJXNcbiIsIG1lc3NhZ2UpOw0KKwlmZmx1c2goc3RkZXJyKTsNCisJLy9UT0RPIGltcGxlbWVudCB3cml0ZSB3YXJuaW5nIHdpdGggd3BpbGliIGVycm9yIHN0dWZmDQorfQ0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL25ldHdvcmt0YWJsZXMyL3V0aWwvU3lzdGVtLmggYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9uZXR3b3JrdGFibGVzMi91dGlsL1N5c3RlbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwMzAxNjAKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9uZXR3b3JrdGFibGVzMi91dGlsL1N5c3RlbS5oCkBAIC0wLDAgKzEsMzcgQEAKKy8qDQorICogU3lzdGVtLmgNCisgKiANCisgKiBGb3Igc29tZSBwbGF0Zm9ybSBzcGVjaWZpYyBjb2RlIHJlbGF0ZWQgdG8gdGhlIHN5c3RlbQ0KKyAqDQorICogIENyZWF0ZWQgb246IFNlcCAyNSwgMjAxMg0KKyAqICAgICAgQXV0aG9yOiBNaXRjaGVsbCBXaWxscw0KKyAqLw0KKw0KKyNpZm5kZWYgVElNRV9IXw0KKyNkZWZpbmUgVElNRV9IXw0KKw0KKy8qKg0KKyAqIENhdXNlcyB0aGUgY3VycmVudCB0aHJlYWQgdG8gc2xlZXAgYXQgbGVhc3QgdGhlDQorICogZ2l2ZW4gbnVtYmVyIG9mIG1pbGxpc2Vjb25kcy4NCisgKiANCisgKiBAcGFyYW0gbXMgVGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gc2xlZXAuDQorICovDQordm9pZCBzbGVlcF9tcyh1bnNpZ25lZCBsb25nIG1zKTsNCisNCisvKioNCisgKiBSZXRyaWV2ZXMgdGhlIGN1cnJlbnQgdGltZSBpbiBtaWxsaXNlY29uZHMuDQorICogDQorICogQHJldHVybiBUaGUgY3VycmVudCB0aW1lIGluIG1pbGxpc2Vjb25kcy4NCisgKi8NCit1bnNpZ25lZCBsb25nIGN1cnJlbnRUaW1lTWlsbGlzKCk7DQorDQorLyoqDQorICogV3JpdGVzIGEgd2FybmluZyBtZXNzYWdlIHRvIHRoZSBzdGFuZGFyZCBlcnJvcg0KKyAqIHN0cmVhbS4NCisgKiANCisgKiBAcGFyYW0gbWVzc2FnZSBUaGUgc3RyaW5nIG1lc3NhZ2UgdG8gd3JpdGUuDQorICovDQordm9pZCB3cml0ZVdhcm5pbmcoY29uc3QgY2hhciogbWVzc2FnZSk7DQorDQorDQorI2VuZGlmIC8qIFRJTUVfSF8gKi8NCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9uaXZpc2lvbi5oIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvbml2aXNpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45N2JkNWY3Ci0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvbml2aXNpb24uaApAQCAtMCwwICsxLDUzNDMgQEAKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovDQorLyogICAgICAgICAgICAgICAgICAgICAgICBJTUFRIFZpc2lvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy8qICAgIENvcHlyaWdodCAoYykgTmF0aW9uYWwgSW5zdHJ1bWVudHMgMjAwMS4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgICAgICovDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKy8qIFRpdGxlOiAgICAgICBOSVZpc2lvbi5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLw0KKyNpZiAhZGVmaW5lZChOaVZpc2lvbl9oKQ0KKyNkZWZpbmUgTmlWaXNpb25faA0KKw0KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKy8vICBJbmNsdWRlcw0KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKyNpbmNsdWRlIDxzdGRkZWYuaD4NCisNCisNCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisvLyAgQ29udHJvbCBEZWZpbmVzDQorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorI2lmICFkZWZpbmVkKElNQVFfSU1QT1JUKQ0KKwkjaWZuZGVmIF9fR05VQ19fDQorCQkjZGVmaW5lIElNQVFfSU1QT1JUIF9fZGVjbHNwZWMoZGxsaW1wb3J0KQ0KKwkjZWxzZQ0KKwkJI2RlZmluZSBJTUFRX0lNUE9SVA0KKwkjZW5kaWYNCisjZW5kaWYNCisNCisjaWYgIWRlZmluZWQoSU1BUV9GVU5DKQ0KKyAgICAjaWYgIWRlZmluZWQoX19jcGx1c3BsdXMpDQorICAgICAgICAjZGVmaW5lIElNQVFfRlVOQyBJTUFRX0lNUE9SVA0KKyAgICAjZWxzZQ0KKyAgICAgICAgI2RlZmluZSBJTUFRX0ZVTkMgZXh0ZXJuICJDIiBJTUFRX0lNUE9SVA0KKyAgICAjZW5kaWYNCisjZW5kaWYNCisNCisjaWYgIWRlZmluZWQoSU1BUV9TVERDQUxMKQ0KKwkjaWZuZGVmIF9fR05VQ19fDQorCQkjZGVmaW5lIElNQVFfU1REQ0FMTCBfX3N0ZGNhbGwNCisJI2Vsc2UNCisJCSNkZWZpbmUgSU1BUV9TVERDQUxMIA0KKwkjZW5kaWYNCisjZW5kaWYNCisNCisjaWZkZWYgX0NWSV8NCisjcHJhZ21hIEVuYWJsZUxpYnJhcnlSdW50aW1lQ2hlY2tpbmcNCisjaW5jbHVkZSA8YW5zaV9jLmg+DQorI2VuZGlmDQorDQorI2RlZmluZSBJTUFRX0NBTExCQUNLIF9fY2RlY2wNCisNCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisvLyAgTWFuaWZlc3QgQ29uc3RhbnRzDQorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorI2lmbmRlZiBOVUxMDQorICAgICNpZmRlZiBfX2NwbHVzcGx1cw0KKyAgICAgICAgI2RlZmluZSBOVUxMICAgIDANCisgICAgI2Vsc2UNCisgICAgICAgICNkZWZpbmUgTlVMTCAgICAoKHZvaWQgKikwKQ0KKyAgICAjZW5kaWYNCisjZW5kaWYNCisNCisjaWZuZGVmIEZBTFNFDQorICAgICNkZWZpbmUgRkFMU0UgICAgICAgICAgICAgICAwDQorI2VuZGlmDQorDQorI2lmbmRlZiBUUlVFDQorICAgICNkZWZpbmUgVFJVRSAgICAgICAgICAgICAgICAxDQorI2VuZGlmDQorDQorI2RlZmluZSBJTUFRX0RFRkFVTFRfU0hPV19DT09SRElOQVRFUyBUUlVFDQorI2RlZmluZSBJTUFRX0RFRkFVTFRfTUFYX0lDT05TX1BFUl9MSU5FIDQNCisjZGVmaW5lIElNQVFfREVGQVVMVF9MRUFSTklOR19NT0RFIElNQVFfTEVBUk5fU0hJRlRfSU5GT1JNQVRJT04NCisjZGVmaW5lIElNQVFfREVGQVVMVF9CTVBfQ09NUFJFU1MgRkFMU0UNCisjZGVmaW5lIElNQVFfREVGQVVMVF9QTkdfUVVBTElUWSA3NTANCisjZGVmaW5lIElNQVFfREVGQVVMVF9KUEVHX1FVQUxJVFkgNzUwDQorI2RlZmluZSBJTUFRX0FMTF9DT05UT1VSUyAtMQ0KKyNkZWZpbmUgSU1BUV9BTExfV0lORE9XUyAtMQ0KKyNkZWZpbmUgSU1BUV9TSElGVCAgICAgIDENCisjZGVmaW5lIElNQVFfQUxUICAgICAgICAyDQorI2RlZmluZSBJTUFRX0NUUkwgICAgICAgNA0KKyNkZWZpbmUgSU1BUV9DQVBTX0xPQ0sgIDgNCisjZGVmaW5lIElNQVFfTU9EQUxfRElBTE9HIC0xDQorI2RlZmluZSBJTUFRX0lOSVRfUkdCX1RSQU5TUEFSRU5UIHsgICAwLCAgIDAsICAgMCwgMSB9DQorI2RlZmluZSBJTUFRX0lOSVRfUkdCX1JFRCAgICAgICAgIHsgICAwLCAgIDAsIDI1NSwgMCB9DQorI2RlZmluZSBJTUFRX0lOSVRfUkdCX0JMVUUgICAgICAgIHsgMjU1LCAgIDAsICAgMCwgMCB9DQorI2RlZmluZSBJTUFRX0lOSVRfUkdCX0dSRUVOICAgICAgIHsgICAwLCAyNTUsICAgMCwgMCB9DQorI2RlZmluZSBJTUFRX0lOSVRfUkdCX1lFTExPVyAgICAgIHsgICAwLCAyNTUsIDI1NSwgMCB9DQorI2RlZmluZSBJTUFRX0lOSVRfUkdCX1dISVRFICAgICAgIHsgMjU1LCAyNTUsIDI1NSwgMCB9DQorI2RlZmluZSBJTUFRX0lOSVRfUkdCX0JMQUNLICAgICAgIHsgICAwLCAgIDAsICAgMCwgMCB9DQorI2RlZmluZSBJTUFRX1VTRV9ERUZBVUxUX1FVQUxJVFkgIC0xDQorI2RlZmluZSBJTUFRX0FMTF9TQU1QTEVTICAgICAgICAgIC0xDQorI2RlZmluZSBJTUFRX0FMTF9PQkpFQ1RTICAgICAgICAgIC0xDQorI2RlZmluZSBJTUFRX0FMTF9DSEFSQUNURVJTICAgICAgIC0xDQorDQorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorLy8gIFByZWRlZmluZWQgVmFsaWQgQ2hhcmFjdGVycw0KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKyNkZWZpbmUgSU1BUV9BTllfQ0hBUkFDVEVSICAgICAgICAgICIiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9BbnkgQ2hhcmFjdGVyDQorI2RlZmluZSBJTUFRX0FMUEhBQkVUSUMgICAgICAgICAgICAgIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiICAgICAgICAgICAgICAvL0FscGhhYmV0aWMNCisjZGVmaW5lIElNQVFfQUxQSEFOVU1FUklDICAgICAgICAgICAiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkiICAgIC8vQWxwaGFudW1lcmljDQorI2RlZmluZSBJTUFRX1VQUEVSQ0FTRV9MRVRURVJTICAgICAgIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL1VwcGVyY2FzZSBMZXR0ZXJzDQorI2RlZmluZSBJTUFRX0xPV0VSQ0FTRV9MRVRURVJTICAgICAgImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL0xvd2VyY2FzZSBMZXR0ZXJzDQorI2RlZmluZSBJTUFRX0RFQ0lNQUxfRElHSVRTICAgICAgICAgIjAxMjM0NTY3ODkiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL0RlY2ltYWwgRGlnaXRzDQorI2RlZmluZSBJTUFRX0hFWEFERUNJTUFMX0RJR0lUUyAgICAgIjAxMjM0NTY3ODlBQkNERUZhYmNkZWYiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL0hleGFkZWNpbWFsIERpZ2l0cw0KKyNkZWZpbmUgSU1BUV9QQVRURVJOICAgICAgICAgICAgICAgICJceEZGIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9QYXR0ZXJuIChBIHNpbmdsZSBjaGFyYWN0ZXIgc3RyaW5nIHdpdGggdGhlIGNoYXJhY3RlciB2YWx1ZSBzZXQgdG8gMjU1KQ0KKyNkZWZpbmUgSU1BUV9GT1JDRV9TUEFDRSAgICAgICAgICAgICIgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9Gb3JjZSBTcGFjZQ0KKw0KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKy8vICBNYWNyb3MNCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisjZGVmaW5lIElNQVFfTk9fUkVDVCBpbWFxTWFrZVJlY3QoIDAsIDAsIDB4N0ZGRkZGRkYsIDB4N0ZGRkZGRkYpDQorI2RlZmluZSBJTUFRX05PX1JPVEFURURfUkVDVCBpbWFxTWFrZVJvdGF0ZWRSZWN0KCAwLCAwLCAweDdGRkZGRkZGLCAweDdGRkZGRkZGLCAwKQ0KKyNkZWZpbmUgSU1BUV9OT19QT0lOVCBpbWFxTWFrZVBvaW50KCAtMSwgLTEpDQorI2RlZmluZSBJTUFRX05PX1BPSU5UX0ZMT0FUIGltYXFNYWtlUG9pbnRGbG9hdCggLTEuMCwgLTEuMCApDQorI2RlZmluZSBJTUFRX05PX09GRlNFVCBpbWFxTWFrZVBvaW50RmxvYXQoIDAuMCwgMC4wICkNCisNCisNCisNCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisvLyAgV2hlbiBpbiBCb3JsYW5kLCBzb21lIGZ1bmN0aW9ucyBtdXN0IGJlIG1hcHBlZCB0byBkaWZmZXJlbnQgbmFtZXMuDQorLy8gIFRoaXMgYWNjb21wbGlzaGVzIHNhaWQgdGFzay4NCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisjaWYgZGVmaW5lZChfX0JPUkxBTkRDX18pIHx8IChkZWZpbmVkKF9DVklfKSAmJiBkZWZpbmVkKF9OSV9CQ18pKQ0KKyAgICAjZGVmaW5lIGltYXFNYWtlUG9pbnQgaW1hcU1ha2VQb2ludF9CQw0KKyAgICAjZGVmaW5lIGltYXFNYWtlUG9pbnRGbG9hdCBpbWFxTWFrZVBvaW50RmxvYXRfQkMNCisjZW5kaWYNCisNCisNCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisvLyAgV2hlbiBpbiBXYXRjb20sIHNvbWUgZnVuY3Rpb25zIG11c3QgYmUgbWFwcGVkIHRvIGRpZmZlcmVudCBuYW1lcy4NCisvLyAgVGhpcyBhY2NvbXBsaXNoZXMgc2FpZCB0YXNrLg0KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKyNpZiBkZWZpbmVkKF9fV0FUQ09NQ19fKSB8fCAoZGVmaW5lZChfQ1ZJXykgJiYgZGVmaW5lZChfTklfV0NfKSkNCisgICAgI2RlZmluZSBpbWFxTWFrZVBvaW50IGltYXFNYWtlUG9pbnRfQkMNCisgICAgI2RlZmluZSBpbWFxTWFrZVBvaW50RmxvYXQgaW1hcU1ha2VQb2ludEZsb2F0X0JDDQorI2VuZGlmDQorDQorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorLy8gIElmIHVzaW5nIFZpc3VhbCBDKyssIGZvcmNlIHN0YXJ0dXAgJiBzaHV0ZG93biBjb2RlIHRvIHJ1bi4NCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisjaWYgZGVmaW5lZChfTVNDX1ZFUikgJiYgIWRlZmluZWQoX0NWSV8pICYmICFkZWZpbmVkKF9fQk9STEFORENfXykNCisgICAgI3ByYWdtYSBjb21tZW50KGxpbmtlciwgIi9JTkNMVURFOl9uaXZpc2lvbl9zdGFydHVwX3NodXRkb3duIikNCisgICAgI3ByYWdtYSBjb21tZW50KGxpbmtlciwgIi9ERUZBVUxUTElCOm5pdmlzaW9uLmxpYiIpDQorI2VuZGlmDQorDQorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorLy8gIEVycm9yIENvZGVzDQorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorI2RlZmluZSBFUlJfU1VDQ0VTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCAvLyBObyBlcnJvci4NCisjZGVmaW5lIEVSUl9TWVNURU1fRVJST1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NjE2MCAvLyBTeXN0ZW0gZXJyb3IuDQorI2RlZmluZSBFUlJfT1VUX09GX01FTU9SWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTYxNTkgLy8gTm90IGVub3VnaCBtZW1vcnkgZm9yIHJlcXVlc3RlZCBvcGVyYXRpb24uDQorI2RlZmluZSBFUlJfTUVNT1JZX0VSUk9SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTYxNTggLy8gTWVtb3J5IGVycm9yLg0KKyNkZWZpbmUgRVJSX1VOUkVHSVNURVJFRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk2MTU3IC8vIFVubGljZW5zZWQgY29weSBvZiBOSSBWaXNpb24uDQorI2RlZmluZSBFUlJfTkVFRF9GVUxMX1ZFUlNJT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTYxNTYgLy8gVGhlIGZ1bmN0aW9uIHJlcXVpcmVzIGFuIE5JIFZpc2lvbiA1LjAgQWR2YW5jZWQgbGljZW5zZS4NCisjZGVmaW5lIEVSUl9VTklOSVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NjE1NSAvLyBOSSBWaXNpb24gZGlkIG5vdCBpbml0aWFsaXplIHByb3Blcmx5Lg0KKyNkZWZpbmUgRVJSX0lNQUdFX1RPT19TTUFMTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk2MTU0IC8vIFRoZSBpbWFnZSBpcyBub3QgbGFyZ2UgZW5vdWdoIGZvciB0aGUgb3BlcmF0aW9uLg0KKyNkZWZpbmUgRVJSX0JBUkNPREVfQ09EQUJBUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk2MTUzIC8vIFRoZSBiYXJjb2RlIGlzIG5vdCBhIHZhbGlkIENvZGFiYXIgYmFyY29kZS4NCisjZGVmaW5lIEVSUl9CQVJDT0RFX0NPREUzOSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NjE1MiAvLyBUaGUgYmFyY29kZSBpcyBub3QgYSB2YWxpZCBDb2RlIDMgb2YgOSBiYXJjb2RlLg0KKyNkZWZpbmUgRVJSX0JBUkNPREVfQ09ERTkzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk2MTUxIC8vIFRoZSBiYXJjb2RlIGlzIG5vdCBhIHZhbGlkIENvZGU5MyBiYXJjb2RlLg0KKyNkZWZpbmUgRVJSX0JBUkNPREVfQ09ERTEyOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk2MTUwIC8vIFRoZSBiYXJjb2RlIGlzIG5vdCBhIHZhbGlkIENvZGUxMjggYmFyY29kZS4NCisjZGVmaW5lIEVSUl9CQVJDT0RFX0VBTjggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NjE0OSAvLyBUaGUgYmFyY29kZSBpcyBub3QgYSB2YWxpZCBFQU44IGJhcmNvZGUuDQorI2RlZmluZSBFUlJfQkFSQ09ERV9FQU4xMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTYxNDggLy8gVGhlIGJhcmNvZGUgaXMgbm90IGEgdmFsaWQgRUFOMTMgYmFyY29kZS4NCisjZGVmaW5lIEVSUl9CQVJDT0RFX0kyNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NjE0NyAvLyBUaGUgYmFyY29kZSBpcyBub3QgYSB2YWxpZCBJbnRlcmxlYXZlZCAyIG9mIDUgYmFyY29kZS4NCisjZGVmaW5lIEVSUl9CQVJDT0RFX01TSSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NjE0NiAvLyBUaGUgYmFyY29kZSBpcyBub3QgYSB2YWxpZCBNU0kgYmFyY29kZS4NCisjZGVmaW5lIEVSUl9CQVJDT0RFX1VQQ0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NjE0NSAvLyBUaGUgYmFyY29kZSBpcyBub3QgYSB2YWxpZCBVUENBIGJhcmNvZGUuDQorI2RlZmluZSBFUlJfQkFSQ09ERV9DT0RFOTNfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTYxNDQgLy8gVGhlIENvZGU5MyBiYXJjb2RlIGNvbnRhaW5zIGludmFsaWQgc2hpZnQgZW5jb2RpbmcuDQorI2RlZmluZSBFUlJfQkFSQ09ERV9UWVBFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTYxNDMgLy8gVGhlIGJhcmNvZGUgdHlwZSBpcyBpbnZhbGlkLg0KKyNkZWZpbmUgRVJSX0JBUkNPREVfSU5WQUxJRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk2MTQyIC8vIFRoZSBpbWFnZSBkb2VzIG5vdCByZXByZXNlbnQgYSB2YWxpZCBsaW5lYXIgYmFyY29kZS4NCisjZGVmaW5lIEVSUl9CQVJDT0RFX0NPREUxMjhfRk5DICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NjE0MSAvLyBUaGUgRk5DIHZhbHVlIGluIHRoZSBDb2RlMTI4IGJhcmNvZGUgaXMgbm90IGxvY2F0ZWQgYmVmb3JlIHRoZSBmaXJzdCBkYXRhIHZhbHVlLg0KKyNkZWZpbmUgRVJSX0JBUkNPREVfQ09ERTEyOF9TRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk2MTQwIC8vIFRoZSBzdGFydGluZyBjb2RlIHNldCBpbiB0aGUgQ29kZTEyOCBiYXJjb2RlIGlzIG5vdCB2YWxpZC4NCisjZGVmaW5lIEVSUl9ST0xMQkFDS19SRVNPVVJDRV9PVVRfT0ZfTUVNT1JZICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NjEzOSAvLyBOb3QgZW5vdWdoIHJlc2VydmVkIG1lbW9yeSBpbiB0aGUgdGltZWQgZW52aXJvbm1lbnQgZm9yIHRoZSByZXF1ZXN0ZWQgb3BlcmF0aW9uLg0KKyNkZWZpbmUgRVJSX1JPTExCQUNLX05PVF9TVVBQT1JURUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk2MTM4IC8vIFRoZSBmdW5jdGlvbiBpcyBub3Qgc3VwcG9ydGVkIHdoZW4gYSB0aW1lIGxpbWl0IGlzIGFjdGl2ZS4NCisjZGVmaW5lIEVSUl9ESVJFQ1RYX0RMTF9OT1RfRk9VTkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NjEzNyAvLyBRdWFydHouZGxsIG5vdCBmb3VuZC4gIEluc3RhbGwgRGlyZWN0WCA4LjEgb3IgbGF0ZXIuDQorI2RlZmluZSBFUlJfRElSRUNUWF9JTlZBTElEX0ZJTFRFUl9RVUFMSVRZICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTYxMzYgLy8gVGhlIGZpbHRlciBxdWFsaXR5IHlvdSBwcm92aWRlZCBpcyBpbnZhbGlkLiBWYWxpZCBxdWFsaXR5IHZhbHVlcyByYW5nZSBmcm9tIC0xIHRvIDEwMDAuDQorI2RlZmluZSBFUlJfSU5WQUxJRF9CVVRUT05fTEFCRUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTYxMzUgLy8gSW52YWxpZCBidXR0b24gbGFiZWwuDQorI2RlZmluZSBFUlJfVEhSRUFEX0lOSVRJQUxJWklORyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTYxMzQgLy8gQ291bGQgbm90IGV4ZWN1dGUgdGhlIGZ1bmN0aW9uIGluIHRoZSBzZXBhcmF0ZSB0aHJlYWQgYmVjYXVzZSB0aGUgdGhyZWFkIGhhcyBub3QgY29tcGxldGVkIGluaXRpYWxpemF0aW9uLg0KKyNkZWZpbmUgRVJSX1RIUkVBRF9DT1VMRF9OT1RfSU5JVElBTElaRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk2MTMzIC8vIENvdWxkIG5vdCBleGVjdXRlIHRoZSBmdW5jdGlvbiBpbiB0aGUgc2VwYXJhdGUgdGhyZWFkIGJlY2F1c2UgdGhlIHRocmVhZCBjb3VsZCBub3QgaW5pdGlhbGl6ZS4NCisjZGVmaW5lIEVSUl9NQVNLX05PVF9URU1QTEFURV9TSVpFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NjEzMiAvLyBUaGUgbWFzayBtdXN0IGJlIHRoZSBzYW1lIHNpemUgYXMgdGhlIHRlbXBsYXRlLg0KKyNkZWZpbmUgRVJSX05PVF9SRUNUX09SX1JPVEFURURfUkVDVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk2MTMwIC8vIFRoZSBST0kgbXVzdCBvbmx5IGhhdmUgZWl0aGVyIGEgc2luZ2xlIFJlY3RhbmdsZSBjb250b3VyIG9yIGEgc2luZ2xlIFJvdGF0ZWQgUmVjdGFuZ2xlIGNvbnRvdXIuDQorI2RlZmluZSBFUlJfUk9MTEJBQ0tfVU5CT1VOREVEX0lOVEVSRkFDRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTYxMjkgLy8gRHVyaW5nIHRpbWVkIGV4ZWN1dGlvbiwgeW91IG11c3QgdXNlIHRoZSBwcmVhbGxvY2F0ZWQgdmVyc2lvbiBvZiB0aGlzIG9wZXJhdGlvbi4NCisjZGVmaW5lIEVSUl9ST0xMQkFDS19SRVNPVVJDRV9DT05GTElDVF8zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NjEyOCAvLyBBbiBpbWFnZSBiZWluZyBtb2RpZmllZCBieSBvbmUgcHJvY2VzcyBjYW5ub3QgYmUgcmVxdWVzdGVkIGJ5IGFub3RoZXIgcHJvY2VzcyB3aGlsZSBhIHRpbWUgbGltaXQgaXMgYWN0aXZlLg0KKyNkZWZpbmUgRVJSX1JPTExCQUNLX1JFU09VUkNFX0NPTkZMSUNUXzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk2MTI3IC8vIEFuIGltYWdlIHdpdGggcGF0dGVybiBtYXRjaGluZywgY2FsaWJyYXRpb24sIG9yIG92ZXJsYXkgaW5mb3JtYXRpb24gY2Fubm90IGJlIG1hbmlwdWxhdGVkIHdoaWxlIGEgdGltZSBsaW1pdCBpcyBhY3RpdmUuDQorI2RlZmluZSBFUlJfUk9MTEJBQ0tfUkVTT1VSQ0VfQ09ORkxJQ1RfMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTYxMjYgLy8gQW4gaW1hZ2UgY3JlYXRlZCBiZWZvcmUgYSB0aW1lIGxpbWl0IGlzIHN0YXJ0ZWQgY2Fubm90IGJlIHJlc2l6ZWQgd2hpbGUgYSB0aW1lIGxpbWl0IGlzIGFjdGl2ZS4NCisjZGVmaW5lIEVSUl9JTlZBTElEX0NPTlRSQVNUX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NjEyNSAvLyBJbnZhbGlkIGNvbnRyYXN0IHRocmVzaG9sZC4gVGhlIHRocmVzaG9sZCB2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwLiANCisjZGVmaW5lIEVSUl9JTlZBTElEX0NBTElCUkFUSU9OX1JPSV9NT0RFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NjEyNCAvLyBOSSBWaXNpb24gZG9lcyBub3Qgc3VwcG9ydCB0aGUgY2FsaWJyYXRpb24gUk9JIG1vZGUgeW91IHN1cHBsaWVkLg0KKyNkZWZpbmUgRVJSX0lOVkFMSURfQ0FMSUJSQVRJT05fTU9ERSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk2MTIzIC8vIE5JIFZpc2lvbiBkb2VzIG5vdCBzdXBwb3J0IHRoZSBjYWxpYnJhdGlvbiBtb2RlIHlvdSBzdXBwbGllZC4NCisjZGVmaW5lIEVSUl9EUkFXVEVYVF9DT0xPUl9NVVNUX0JFX0dSQVlTQ0FMRSAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NjEyMiAvLyBTZXQgdGhlIGZvcmVncm91bmQgYW5kIGJhY2tncm91bmQgdGV4dCBjb2xvcnMgdG8gZ3JheXNjYWxlIHRvIGRyYXcgb24gYSBVOCBpbWFnZS4NCisjZGVmaW5lIEVSUl9TQVRVUkFUSU9OX1RIUkVTSE9MRF9PVVRfT0ZfUkFOR0UgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NjEyMSAvLyBUaGUgdmFsdWUgb2YgdGhlIHNhdHVyYXRpb24gdGhyZXNob2xkIG11c3QgYmUgZnJvbSAwIHRvIDI1NS4NCisjZGVmaW5lIEVSUl9OT1RfSU1BR0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NjEyMCAvLyBOb3QgYW4gaW1hZ2UuDQorI2RlZmluZSBFUlJfQ1VTVE9NREFUQV9JTlZBTElEX0tFWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTYxMTkgLy8gVGhleSBjdXN0b20gZGF0YSBrZXkgeW91IHN1cHBsaWVkIGlzIGludmFsaWQuIFRoZSBvbmx5IHZhbGlkIGNoYXJhY3RlciB2YWx1ZXMgYXJlIGRlY2ltYWwgMzItMTI2IGFuZCAxNjEtMjU1LiBUaGVyZSBtdXN0IGFsc28gYmUgbm8gcmVwZWF0ZWQsIGxlYWRpbmcsIG9yIHRyYWlsaW5nIHNwYWNlcy4NCisjZGVmaW5lIEVSUl9JTlZBTElEX1NURVBfU0laRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NjExOCAvLyBTdGVwIHNpemUgbXVzdCBiZSBncmVhdGVyIHRoYW4gemVybyBhbmQgbGVzcyB0aGFuIEltYWdlIHNpemUNCisjZGVmaW5lIEVSUl9NQVRSSVhfU0laRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NjExNyAvLyBJbnZhbGlkIG1hdHJpeCBzaXplIGluIHRoZSBzdHJ1Y3R1cmluZyBlbGVtZW50Lg0KKyNkZWZpbmUgRVJSX0NBTElCUkFUSU9OX0lOU0ZfUE9JTlRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk2MTE2IC8vIEluc3VmZmljaWVudCBudW1iZXIgb2YgY2FsaWJyYXRpb24gZmVhdHVyZSBwb2ludHMuDQorI2RlZmluZSBFUlJfQ0FMSUJSQVRJT05fSU1BR0VfQ09SUkVDVEVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTYxMTUgLy8gVGhlIG9wZXJhdGlvbiBpcyBpbnZhbGlkIGluIGEgY29ycmVjdGVkIGltYWdlLg0KKyNkZWZpbmUgRVJSX0NBTElCUkFUSU9OX0lOVkFMSURfUk9JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk2MTE0IC8vIFRoZSBST0kgY29udGFpbnMgYW4gaW52YWxpZCBjb250b3VyIHR5cGUgb3IgaXMgbm90IGNvbnRhaW5lZCBpbiB0aGUgUk9JIGxlYXJuZWQgZm9yIGNhbGlicmF0aW9uLg0KKyNkZWZpbmUgRVJSX0NBTElCUkFUSU9OX0lNQUdFX1VOQ0FMSUJSQVRFRCAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk2MTEzIC8vIFRoZSBzb3VyY2UvaW5wdXQgaW1hZ2UgaGFzIG5vdCBiZWVuIGNhbGlicmF0ZWQuDQorI2RlZmluZSBFUlJfSU5DT01QX01BVFJJWF9TSVpFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTYxMTIgLy8gVGhlIG51bWJlciBvZiBwaXhlbCBhbmQgcmVhbC13b3JsZCBjb29yZGluYXRlcyBtdXN0IGJlIGVxdWFsLg0KKyNkZWZpbmUgRVJSX0NBTElCUkFUSU9OX0ZBSUxFRF9UT19GSU5EX0dSSUQgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk2MTExIC8vIFVuYWJsZSB0byBhdXRvbWF0aWNhbGx5IGRldGVjdCBncmlkIGJlY2F1c2UgdGhlIGltYWdlIGlzIHRvbyBkaXN0b3J0ZWQuDQorI2RlZmluZSBFUlJfQ0FMSUJSQVRJT05fSU5GT19WRVJTSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTYxMTAgLy8gSW52YWxpZCBjYWxpYnJhdGlvbiBpbmZvcm1hdGlvbiB2ZXJzaW9uLg0KKyNkZWZpbmUgRVJSX0NBTElCUkFUSU9OX0lOVkFMSURfU0NBTElOR19GQUNUT1IgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk2MTA5IC8vIEludmFsaWQgY2FsaWJyYXRpb24gc2NhbGluZyBmYWN0b3IuDQorI2RlZmluZSBFUlJfQ0FMSUJSQVRJT05fRVJST1JNQVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTYxMDggLy8gVGhlIGNhbGlicmF0aW9uIGVycm9yIG1hcCBjYW5ub3QgYmUgY29tcHV0ZWQuDQorI2RlZmluZSBFUlJfQ0FMSUJSQVRJT05fSU5GT18xICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTYxMDcgLy8gSW52YWxpZCBjYWxpYnJhdGlvbiB0ZW1wbGF0ZSBpbWFnZS4NCisjZGVmaW5lIEVSUl9DQUxJQlJBVElPTl9JTkZPXzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NjEwNiAvLyBJbnZhbGlkIGNhbGlicmF0aW9uIHRlbXBsYXRlIGltYWdlLg0KKyNkZWZpbmUgRVJSX0NBTElCUkFUSU9OX0lORk9fMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk2MTA1IC8vIEludmFsaWQgY2FsaWJyYXRpb24gdGVtcGxhdGUgaW1hZ2UuDQorI2RlZmluZSBFUlJfQ0FMSUJSQVRJT05fSU5GT180ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTYxMDQgLy8gSW52YWxpZCBjYWxpYnJhdGlvbiB0ZW1wbGF0ZSBpbWFnZS4NCisjZGVmaW5lIEVSUl9DQUxJQlJBVElPTl9JTkZPXzUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NjEwMyAvLyBJbnZhbGlkIGNhbGlicmF0aW9uIHRlbXBsYXRlIGltYWdlLg0KKyNkZWZpbmUgRVJSX0NBTElCUkFUSU9OX0lORk9fNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk2MTAyIC8vIEludmFsaWQgY2FsaWJyYXRpb24gdGVtcGxhdGUgaW1hZ2UuDQorI2RlZmluZSBFUlJfQ0FMSUJSQVRJT05fSU5GT19NSUNST19QTEFORSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTYxMDEgLy8gSW52YWxpZCBjYWxpYnJhdGlvbiB0ZW1wbGF0ZSBpbWFnZS4NCisjZGVmaW5lIEVSUl9DQUxJQlJBVElPTl9JTkZPX1BFUlNQRUNUSVZFX1BST0pFQ1RJT04gICAgICAgICAgICAgICAgICAtMTA3NDM5NjEwMCAvLyBJbnZhbGlkIGNhbGlicmF0aW9uIHRlbXBsYXRlIGltYWdlLg0KKyNkZWZpbmUgRVJSX0NBTElCUkFUSU9OX0lORk9fU0lNUExFX1RSQU5TRk9STSAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk2MDk5IC8vIEludmFsaWQgY2FsaWJyYXRpb24gdGVtcGxhdGUgaW1hZ2UuDQorI2RlZmluZSBFUlJfUkVTRVJWRURfTVVTVF9CRV9OVUxMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTYwOTggLy8gWW91IG11c3QgcGFzcyBOVUxMIGZvciB0aGUgcmVzZXJ2ZWQgcGFyYW1ldGVyLg0KKyNkZWZpbmUgRVJSX0lOVkFMSURfUEFSVElDTEVfUEFSQU1FVEVSX1ZBTFVFICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk2MDk3IC8vIFlvdSBlbnRlcmVkIGFuIGludmFsaWQgc2VsZWN0aW9uIGluIHRoZSBwYXJ0aWNsZSBwYXJhbWV0ZXIuDQorI2RlZmluZSBFUlJfTk9UX0FOX09CSkVDVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTYwOTYgLy8gTm90IGFuIG9iamVjdC4NCisjZGVmaW5lIEVSUl9DQUxJQlJBVElPTl9EVVBMSUNBVEVfUkVGRVJFTkNFX1BPSU5UICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NjA5NSAvLyBUaGUgcmVmZXJlbmNlIHBvaW50cyBwYXNzZWQgYXJlIGluY29uc2lzdGVudC4gIEF0IGxlYXN0IHR3byBzaW1pbGFyIHBpeGVsIGNvb3JkaW5hdGVzIGNvcnJlc3BvbmQgdG8gZGlmZmVyZW50IHJlYWwtd29ybGQgY29vcmRpbmF0ZXMuDQorI2RlZmluZSBFUlJfUk9MTEJBQ0tfUkVTT1VSQ0VfQ0FOTk9UX1VOTE9DSyAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTYwOTQgLy8gQSByZXNvdXJjZSBjb25mbGljdCBvY2N1cnJlZCBpbiB0aGUgdGltZWQgZW52aXJvbm1lbnQuIFR3byBwcm9jZXNzZXMgY2Fubm90IG1hbmFnZSB0aGUgc2FtZSByZXNvdXJjZSBhbmQgYmUgdGltZSBib3VuZGVkLg0KKyNkZWZpbmUgRVJSX1JPTExCQUNLX1JFU09VUkNFX0xPQ0tFRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk2MDkzIC8vIEEgcmVzb3VyY2UgY29uZmxpY3Qgb2NjdXJyZWQgaW4gdGhlIHRpbWVkIGVudmlyb25tZW50LiBUd28gcHJvY2Vzc2VzIGNhbm5vdCBhY2Nlc3MgdGhlIHNhbWUgcmVzb3VyY2UgYW5kIGJlIHRpbWUgYm91bmRlZC4NCisjZGVmaW5lIEVSUl9ST0xMQkFDS19SRVNPVVJDRV9OT05fRU1QVFlfSU5JVElBTElaRSAgICAgICAgICAgICAgICAgICAtMTA3NDM5NjA5MiAvLyBNdWx0aXBsZSB0aW1lZCBlbnZpcm9ubWVudHMgYXJlIG5vdCBzdXBwb3J0ZWQuDQorI2RlZmluZSBFUlJfUk9MTEJBQ0tfUkVTT1VSQ0VfVU5JTklUSUFMSVpFRF9FTkFCTEUgICAgICAgICAgICAgICAgICAgLTEwNzQzOTYwOTEgLy8gQSB0aW1lIGxpbWl0IGNhbm5vdCBiZSBzdGFydGVkIHVudGlsIHRoZSB0aW1lZCBlbnZpcm9ubWVudCBpcyBpbml0aWFsaXplZC4NCisjZGVmaW5lIEVSUl9ST0xMQkFDS19SRVNPVVJDRV9FTkFCTEVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NjA5MCAvLyBNdWx0aXBsZSB0aW1lZCBlbnZpcm9ubWVudHMgYXJlIG5vdCBzdXBwb3J0ZWQuDQorI2RlZmluZSBFUlJfUk9MTEJBQ0tfUkVTT1VSQ0VfUkVJTklUSUFMSVpFICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTYwODkgLy8gVGhlIHRpbWVkIGVudmlyb25tZW50IGlzIGFscmVhZHkgaW5pdGlhbGl6ZWQuDQorI2RlZmluZSBFUlJfUk9MTEJBQ0tfUkVTSVpFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTYwODggLy8gVGhlIHJlc3VsdHMgb2YgdGhlIG9wZXJhdGlvbiBleGNlZWRlZCB0aGUgc2l6ZSBsaW1pdHMgb24gdGhlIG91dHB1dCBkYXRhIGFycmF5cy4NCisjZGVmaW5lIEVSUl9ST0xMQkFDS19TVE9QX1RJTUVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NjA4NyAvLyBObyB0aW1lIGxpbWl0IGlzIGF2YWlsYWJsZSB0byBzdG9wLg0KKyNkZWZpbmUgRVJSX1JPTExCQUNLX1NUQVJUX1RJTUVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk2MDg2IC8vIEEgdGltZSBsaW1pdCBjb3VsZCBub3QgYmUgc2V0Lg0KKyNkZWZpbmUgRVJSX1JPTExCQUNLX0lOSVRfVElNRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk2MDg1IC8vIFRoZSB0aW1lZCBlbnZpcm9ubWVudCBjb3VsZCBub3QgYmUgaW5pdGlhbGl6ZWQuDQorI2RlZmluZSBFUlJfUk9MTEJBQ0tfREVMRVRFX1RJTUVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTYwODQgLy8gTm8gaW5pdGlhbGl6ZWQgdGltZWQgZW52aXJvbm1lbnQgaXMgYXZhaWxhYmxlIHRvIGNsb3NlLg0KKyNkZWZpbmUgRVJSX1JPTExCQUNLX1RJTUVPVVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk2MDgzIC8vIFRoZSB0aW1lIGxpbWl0IGhhcyBleHBpcmVkLg0KKyNkZWZpbmUgRVJSX1BBTEVUVEVfTk9UX1NVUFBPUlRFRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk2MDgyIC8vIE9ubHkgOC1iaXQgaW1hZ2VzIHN1cHBvcnQgdGhlIHVzZSBvZiBwYWxldHRlcy4gIEVpdGhlciBkbyBub3QgdXNlIGEgcGFsZXR0ZSwgb3IgY29udmVydCB5b3VyIGltYWdlIHRvIGFuIDgtYml0IGltYWdlIGJlZm9yZSB1c2luZyBhIHBhbGV0dGUuDQorI2RlZmluZSBFUlJfQkFEX1BBU1NXT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTYwODEgLy8gSW5jb3JyZWN0IHBhc3N3b3JkLg0KKyNkZWZpbmUgRVJSX0lOVkFMSURfSU1BR0VfVFlQRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk2MDgwIC8vIEludmFsaWQgaW1hZ2UgdHlwZS4NCisjZGVmaW5lIEVSUl9JTlZBTElEX01FVEFGSUxFX0hBTkRMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NjA3OSAvLyBJbnZhbGlkIG1ldGFmaWxlIGhhbmRsZS4NCisjZGVmaW5lIEVSUl9JTkNPTVBfVFlQRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NjA3NyAvLyBJbmNvbXBhdGlibGUgaW1hZ2UgdHlwZS4NCisjZGVmaW5lIEVSUl9DT09SRF9TWVNfRklSU1RfQVhJUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NjA3NiAvLyBVbmFibGUgdG8gZml0IGEgbGluZSBmb3IgdGhlIHByaW1hcnkgYXhpcy4NCisjZGVmaW5lIEVSUl9DT09SRF9TWVNfU0VDT05EX0FYSVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NjA3NSAvLyBVbmFibGUgdG8gZml0IGEgbGluZSBmb3IgdGhlIHNlY29uZGFyeSBheGlzLg0KKyNkZWZpbmUgRVJSX0lOQ09NUF9TSVpFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk2MDc0IC8vIEluY29tcGF0aWJsZSBpbWFnZSBzaXplLg0KKyNkZWZpbmUgRVJSX01BU0tfT1VUU0lERV9JTUFHRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk2MDczIC8vIFdoZW4gdGhlIG1hc2sncyBvZmZzZXQgd2FzIGFwcGxpZWQsIHRoZSBtYXNrIHdhcyBlbnRpcmVseSBvdXRzaWRlIG9mIHRoZSBpbWFnZS4NCisjZGVmaW5lIEVSUl9JTlZBTElEX0JPUkRFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NjA3MiAvLyBJbnZhbGlkIGltYWdlIGJvcmRlci4NCisjZGVmaW5lIEVSUl9JTlZBTElEX1NDQU5fRElSRUNUSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NjA3MSAvLyBJbnZhbGlkIHNjYW4gZGlyZWN0aW9uLg0KKyNkZWZpbmUgRVJSX0lOVkFMSURfRlVOQ1RJT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk2MDcwIC8vIFVuc3VwcG9ydGVkIGZ1bmN0aW9uLg0KKyNkZWZpbmUgRVJSX0lOVkFMSURfQ09MT1JfTU9ERSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk2MDY5IC8vIE5JIFZpc2lvbiBkb2VzIG5vdCBzdXBwb3J0IHRoZSBjb2xvciBtb2RlIHlvdSBzcGVjaWZpZWQuDQorI2RlZmluZSBFUlJfSU5WQUxJRF9BQ1RJT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTYwNjggLy8gVGhlIGZ1bmN0aW9uIGRvZXMgbm90IHN1cHBvcnQgdGhlIHJlcXVlc3RlZCBhY3Rpb24uDQorI2RlZmluZSBFUlJfSU1BR0VTX05PVF9ESUZGICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTYwNjcgLy8gVGhlIHNvdXJjZSBpbWFnZSBhbmQgZGVzdGluYXRpb24gaW1hZ2UgbXVzdCBiZSBkaWZmZXJlbnQuDQorI2RlZmluZSBFUlJfSU5WQUxJRF9QT0lOVFNZTUJPTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTYwNjYgLy8gSW52YWxpZCBwb2ludCBzeW1ib2wuDQorI2RlZmluZSBFUlJfQ0FOVF9SRVNJWkVfRVhURVJOQUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTYwNjUgLy8gQ2Fubm90IHJlc2l6ZSBhbiBpbWFnZSBpbiBhbiBhY3F1aXNpdGlvbiBidWZmZXIuDQorI2RlZmluZSBFUlJfRVhURVJOQUxfTk9UX1NVUFBPUlRFRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTYwNjQgLy8gVGhpcyBvcGVyYXRpb24gaXMgbm90IHN1cHBvcnRlZCBmb3IgaW1hZ2VzIGluIGFuIGFjcXVpc2l0aW9uIGJ1ZmZlci4NCisjZGVmaW5lIEVSUl9FWFRFUk5BTF9BTElHTk1FTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NjA2MyAvLyBUaGUgZXh0ZXJuYWwgYnVmZmVyIG11c3QgYmUgYWxpZ25lZCBvbiBhIDQtYnl0ZSBib3VuZGFyeS4gVGhlIGxpbmUgd2lkdGggYW5kIGJvcmRlciBwaXhlbHMgbXVzdCBiZSA0LWJ5dGUgYWxpZ25lZCwgYXMgd2VsbC4NCisjZGVmaW5lIEVSUl9JTlZBTElEX1RPTEVSQU5DRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NjA2MiAvLyBUaGUgdG9sZXJhbmNlIHBhcmFtZXRlciBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAwLg0KKyNkZWZpbmUgRVJSX0lOVkFMSURfV0lORE9XX1NJWkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk2MDYxIC8vIFRoZSBzaXplIG9mIGVhY2ggZGltZW5zaW9uIG9mIHRoZSB3aW5kb3cgbXVzdCBiZSBncmVhdGVyIHRoYW4gMiBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSBzaXplIG9mIHRoZSBpbWFnZSBpbiB0aGUgY29ycmVzcG9uZGluZyBkaW1lbnNpb24uDQorI2RlZmluZSBFUlJfSlBFRzIwMDBfTE9TU0xFU1NfV0lUSF9GTE9BVElOR19QT0lOVCAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTYwNjAgLy8gTG9zc2xlc3MgY29tcHJlc3Npb24gY2Fubm90IGJlIHVzZWQgd2l0aCB0aGUgZmxvYXRpbmcgcG9pbnQgd2F2ZWxldCB0cmFuc2Zvcm0gbW9kZS4gRWl0aGVyIHNldCB0aGUgd2F2ZWxldCB0cmFuc2Zvcm0gbW9kZSB0byBpbnRlZ2VyLCBvciB1c2UgbG9zc3kgY29tcHJlc3Npb24uDQorI2RlZmluZSBFUlJfSU5WQUxJRF9NQVhfSVRFUkFUSU9OUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTYwNTkgLy8gSW52YWxpZCBtYXhpbXVtIG51bWJlciBvZiBpdGVyYXRpb25zLiBNYXhpbXVtIG51bWJlciBvZiBpdGVyYXRpb25zIG11c3QgYmUgZ3JlYXRlciB0aGFuIHplcm8uDQorI2RlZmluZSBFUlJfSU5WQUxJRF9ST1RBVElPTl9NT0RFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTYwNTggLy8gSW52YWxpZCByb3RhdGlvbiBtb2RlLg0KKyNkZWZpbmUgRVJSX0lOVkFMSURfU0VBUkNIX1ZFQ1RPUl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk2MDU3IC8vIEludmFsaWQgc2VhcmNoIHZlY3RvciB3aWR0aC4gVGhlIHdpZHRoIG11c3QgYmUgYW4gb2RkIG51bWJlciBncmVhdGVyIHRoYW4gemVyby4NCisjZGVmaW5lIEVSUl9JTlZBTElEX01BVFJJWF9NSVJST1JfTU9ERSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NjA1NiAvLyBJbnZhbGlkIG1hdHJpeCBtaXJyb3IgbW9kZS4NCisjZGVmaW5lIEVSUl9JTlZBTElEX0FTUEVDVF9SQVRJTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NjA1NSAvLyBJbnZhbGlkIGFzcGVjdCByYXRpby4gVmFsaWQgYXNwZWN0IHJhdGlvcyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB6ZXJvLg0KKyNkZWZpbmUgRVJSX0lOVkFMSURfQ0VMTF9GSUxMX1RZUEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk2MDU0IC8vIEludmFsaWQgY2VsbCBmaWxsIHR5cGUuDQorI2RlZmluZSBFUlJfSU5WQUxJRF9CT1JERVJfSU5URUdSSVRZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTYwNTMgLy8gSW52YWxpZCBib3JkZXIgaW50ZWdyaXR5LiBWYWxpZCB2YWx1ZXMgcmFuZ2UgZnJvbSAwIHRvIDEwMC4NCisjZGVmaW5lIEVSUl9JTlZBTElEX0RFTU9EVUxBVElPTl9NT0RFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NjA1MiAvLyBJbnZhbGlkIGRlbW9kdWxhdGlvbiBtb2RlLg0KKyNkZWZpbmUgRVJSX0lOVkFMSURfQ0VMTF9GSUxURVJfTU9ERSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk2MDUxIC8vIEludmFsaWQgY2VsbCBmaWx0ZXIgbW9kZS4NCisjZGVmaW5lIEVSUl9JTlZBTElEX0VDQ19UWVBFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NjA1MCAvLyBJbnZhbGlkIEVDQyB0eXBlLg0KKyNkZWZpbmUgRVJSX0lOVkFMSURfTUFUUklYX1BPTEFSSVRZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk2MDQ5IC8vIEludmFsaWQgbWF0cml4IHBvbGFyaXR5Lg0KKyNkZWZpbmUgRVJSX0lOVkFMSURfQ0VMTF9TQU1QTEVfU0laRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk2MDQ4IC8vIEludmFsaWQgY2VsbCBzYW1wbGUgc2l6ZS4NCisjZGVmaW5lIEVSUl9JTlZBTElEX0xJTkVBUl9BVkVSQUdFX01PREUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NjA0NyAvLyBJbnZhbGlkIGxpbmVhciBhdmVyYWdlIG1vZGUuDQorI2RlZmluZSBFUlJfSU5WQUxJRF8yRF9CQVJDT0RFX0NPTlRSQVNUX0ZPUl9ST0kgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTYwNDYgLy8gV2hlbiB1c2luZyBhIHJlZ2lvbiBvZiBpbnRlcmVzdCB0aGF0IGlzIG5vdCBhIHJlY3RhbmdsZSwgeW91IG11c3Qgc3BlY2lmeSB0aGUgY29udHJhc3QgbW9kZSBvZiB0aGUgYmFyY29kZSBhcyBlaXRoZXIgYmxhY2sgb24gd2hpdGUgb3Igd2hpdGUgb24gYmxhY2suDQorI2RlZmluZSBFUlJfSU5WQUxJRF8yRF9CQVJDT0RFX1NVQlRZUEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTYwNDUgLy8gSW52YWxpZCAyLUQgYmFyY29kZSBEYXRhIE1hdHJpeCBzdWJ0eXBlLg0KKyNkZWZpbmUgRVJSX0lOVkFMSURfMkRfQkFSQ09ERV9TSEFQRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk2MDQ0IC8vIEludmFsaWQgMi1EIGJhcmNvZGUgc2hhcGUuDQorI2RlZmluZSBFUlJfSU5WQUxJRF8yRF9CQVJDT0RFX0NFTExfU0hBUEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTYwNDMgLy8gSW52YWxpZCAyLUQgYmFyY29kZSBjZWxsIHNoYXBlLg0KKyNkZWZpbmUgRVJSX0lOVkFMSURfMkRfQkFSQ09ERV9DT05UUkFTVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk2MDQyIC8vIEludmFsaWQgMi1EIGJhcmNvZGUgY29udHJhc3QuDQorI2RlZmluZSBFUlJfSU5WQUxJRF8yRF9CQVJDT0RFX1RZUEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTYwNDEgLy8gSW52YWxpZCAyLUQgYmFyY29kZSB0eXBlLg0KKyNkZWZpbmUgRVJSX0RSSVZFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk2MDQwIC8vIENhbm5vdCBhY2Nlc3MgTkktSU1BUSBkcml2ZXIuDQorI2RlZmluZSBFUlJfSU9fRVJST1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTYwMzkgLy8gSS9PIGVycm9yLg0KKyNkZWZpbmUgRVJSX0ZJTkRfQ09PUkRTWVNfTU9SRV9USEFOX09ORV9FREdFICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk2MDM4IC8vIFdoZW4gc2VhcmNoaW5nIGZvciBhIGNvb3JkaW5hdGUgc3lzdGVtLCB0aGUgbnVtYmVyIG9mIGxpbmVzIHRvIGZpdCBtdXN0IGJlIDEuDQorI2RlZmluZSBFUlJfVElNRU9VVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTYwMzcgLy8gVHJpZ2dlciB0aW1lb3V0Lg0KKyNkZWZpbmUgRVJSX0lOVkFMSURfU0tFTEVUT05NT0RFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk2MDM2IC8vIFRoZSBTa2VsZXRvbiBtb2RlIHlvdSBzcGVjaWZpZWQgaXMgaW52YWxpZC4NCisjZGVmaW5lIEVSUl9URU1QTEFURUlNQUdFX05PQ0lSQ0xFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NjAzNSAvLyBUaGUgdGVtcGxhdGUgaW1hZ2UgZG9lcyBub3QgY29udGFpbiBlbm91Z2ggaW5mb3JtYXRpb24gZm9yIGxlYXJuaW5nIHRoZSBhZ2dyZXNzaXZlIHNlYXJjaCBzdHJhdGVneS4NCisjZGVmaW5lIEVSUl9URU1QTEFURUlNQUdFX0VER0VJTkZPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NjAzNCAvLyBUaGUgdGVtcGxhdGUgaW1hZ2UgZG9lcyBub3QgY29udGFpbiBlbm91Z2ggZWRnZSBpbmZvcm1hdGlvbiBmb3IgdGhlIHNhbXBsZSBzaXplKHMpIHJlcXVlc3RlZC4NCisjZGVmaW5lIEVSUl9URU1QTEFURURFU0NSSVBUT1JfTEVBUk5TRVRVUERBVEEgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NjAzMyAvLyBJbnZhbGlkIHRlbXBsYXRlIGRlc2NyaXB0b3IuDQorI2RlZmluZSBFUlJfVEVNUExBVEVERVNDUklQVE9SX1JPVEFUSU9OX1NFQVJDSFNUUkFURUdZICAgICAgICAgICAgICAgLTEwNzQzOTYwMzIgLy8gVGhlIHRlbXBsYXRlIGRlc2NyaXB0b3IgZG9lcyBub3QgY29udGFpbiBkYXRhIHJlcXVpcmVkIGZvciB0aGUgcmVxdWVzdGVkIHNlYXJjaCBzdHJhdGVneSBpbiByb3RhdGlvbi1pbnZhcmlhbnQgbWF0Y2hpbmcuDQorI2RlZmluZSBFUlJfSU5WQUxJRF9URVRSQUdPTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTYwMzEgLy8gVGhlIGlucHV0IHRldHJhZ29uIG11c3QgaGF2ZSBmb3VyIHBvaW50cy4gVGhlIHBvaW50cyBhcmUgc3BlY2lmaWVkIGNsb2Nrd2lzZSBzdGFydGluZyB3aXRoIHRoZSB0b3AgbGVmdCBwb2ludC4gDQorI2RlZmluZSBFUlJfVE9PX01BTllfQ0xBU1NJRklDQVRJT05fU0VTU0lPTlMgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTYwMzAgLy8gVGhlcmUgYXJlIHRvbyBtYW55IGNsYXNzaWZpY2F0aW9uIHNlc3Npb25zIG9wZW4uICBZb3UgbXVzdCBjbG9zZSBhIHNlc3Npb24gYmVmb3JlIHlvdSBjYW4gb3BlbiBhbm90aGVyIG9uZS4NCisjZGVmaW5lIEVSUl9USU1FX0JPVU5ERURfRVhFQ1VUSU9OX05PVF9TVVBQT1JURUQgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NjAyOCAvLyBOSSBWaXNpb24gbm8gbG9uZ2VyIHN1cHBvcnRzIHRpbWUtYm91bmRlZCBleGVjdXRpb24uDQorI2RlZmluZSBFUlJfSU5WQUxJRF9DT0xPUl9SRVNPTFVUSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTYwMjcgLy8gSW52YWxpZCBDb2xvciBSZXNvbHV0aW9uIGZvciB0aGUgQ29sb3IgQ2xhc3NpZmllcg0KKyNkZWZpbmUgRVJSX0lOVkFMSURfUFJPQ0VTU19UWVBFX0ZPUl9FREdFX0RFVEVDVElPTiAgICAgICAgICAgICAgICAgIC0xMDc0Mzk2MDI2IC8vIEludmFsaWQgcHJvY2VzcyB0eXBlIGZvciBlZGdlIGRldGVjdGlvbi4NCisjZGVmaW5lIEVSUl9JTlZBTElEX0FOR0xFX1JBTkdFX0ZPUl9TVFJBSUdIVF9FREdFICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NjAyNSAvLyBBbmdsZSByYW5nZSB2YWx1ZSBzaG91bGQgYmUgZXF1YWwgdG8gb3IgZ3JlYXRlciB0aGFuIHplcm8uDQorI2RlZmluZSBFUlJfSU5WQUxJRF9NSU5fQ09WRVJBR0VfRk9SX1NUUkFJR0hUX0VER0UgICAgICAgICAgICAgICAgICAgLTEwNzQzOTYwMjQgLy8gTWluaW11bSBjb3ZlcmFnZSB2YWx1ZSBzaG91bGQgYmUgZ3JlYXRlciB0aGFuIHplcm8uDQorI2RlZmluZSBFUlJfSU5WQUxJRF9BTkdMRV9UT0xfRk9SX1NUUkFJR0hUX0VER0UgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTYwMjMgLy8gVGhlIGFuZ2xlIHRvbGVyYW5jZSBzaG91bGQgYmUgZXF1YWwgdG8gb3IgZ3JlYXRlciB0aGFuIDAuMDAxLg0KKyNkZWZpbmUgRVJSX0lOVkFMSURfU0VBUkNIX01PREVfRk9SX1NUUkFJR0hUX0VER0UgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk2MDIyIC8vIEludmFsaWQgc2VhcmNoIG1vZGUgZm9yIGRldGVjdGluZyBzdHJhaWdodCBlZGdlcw0KKyNkZWZpbmUgRVJSX0lOVkFMSURfS0VSTkVMX1NJWkVfRk9SX0VER0VfREVURUNUSU9OICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk2MDIxIC8vIEludmFsaWQga2VybmVsIHNpemUgZm9yIGVkZ2UgZGV0ZWN0aW9uLiBUaGUgbWluaW11bSBrZXJuZWwgc2l6ZSBpcyAzLCB0aGUgbWF4aW11bSBrZXJuZWwgc2l6ZSBpcyAxMDczNzQxODIzIGFuZCB0aGUga2VybmVsIHNpemUgbXVzdCBiZSBvZGQuDQorI2RlZmluZSBFUlJfSU5WQUxJRF9HUkFESU5HX01PREUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTYwMjAgLy8gSW52YWxpZCBncmFkaW5nIG1vZGUuDQorI2RlZmluZSBFUlJfSU5WQUxJRF9USFJFU0hPTERfUEVSQ0VOVEFHRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTYwMTkgLy8gSW52YWxpZCB0aHJlc2hvbGQgcGVyY2VudGFnZS4gVmFsaWQgdmFsdWVzIHJhbmdlIGZyb20gMCB0byAxMDAuDQorI2RlZmluZSBFUlJfSU5WQUxJRF9FREdFX1BPTEFSSVRZX1NFQVJDSF9NT0RFICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTYwMTggLy8gSW52YWxpZCBlZGdlIHBvbGFyaXR5IHNlYXJjaCBtb2RlLg0KKyNkZWZpbmUgRVJSX09QRU5JTkdfTkVXRVJfQUlNX0dSQURJTkdfREFUQSAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk2MDE3IC8vIFRoZSBBSU0gZ3JhZGluZyBkYXRhIGF0dGFjaGVkIHRvIHRoZSBpbWFnZSB5b3UgdHJpZWQgdG8gb3BlbiB3YXMgY3JlYXRlZCB3aXRoIGEgbmV3ZXIgdmVyc2lvbiBvZiBOSSBWaXNpb24uIFVwZ3JhZGUgdG8gdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIE5JIFZpc2lvbiB0byByZWFkIHRoaXMgZmlsZS4NCisjZGVmaW5lIEVSUl9OT19WSURFT19EUklWRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NjAxNiAvLyBObyB2aWRlbyBkcml2ZXIgaXMgaW5zdGFsbGVkLg0KKyNkZWZpbmUgRVJSX1JQQ19FWEVDVVRFX0lWQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk2MDE1IC8vIFVuYWJsZSB0byBlc3RhYmxpc2ggbmV0d29yayBjb25uZWN0aW9uIHdpdGggcmVtb3RlIHN5c3RlbS4NCisjZGVmaW5lIEVSUl9JTlZBTElEX1ZJREVPX0JMSVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NjAxNCAvLyBSVCBWaWRlbyBPdXQgZG9lcyBub3Qgc3VwcG9ydCBkaXNwbGF5aW5nIHRoZSBzdXBwbGllZCBpbWFnZSB0eXBlIGF0IHRoZSBzZWxlY3RlZCBjb2xvciBkZXB0aC4NCisjZGVmaW5lIEVSUl9JTlZBTElEX1ZJREVPX01PREUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NjAxMyAvLyBJbnZhbGlkIHZpZGVvIG1vZGUuDQorI2RlZmluZSBFUlJfUlBDX0VYRUNVVEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTYwMTIgLy8gVW5hYmxlIHRvIGRpc3BsYXkgcmVtb3RlIGltYWdlIG9uIG5ldHdvcmsgY29ubmVjdGlvbi4NCisjZGVmaW5lIEVSUl9SUENfQklORCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NjAxMSAvLyBVbmFibGUgdG8gZXN0YWJsaXNoIG5ldHdvcmsgY29ubmVjdGlvbi4NCisjZGVmaW5lIEVSUl9JTlZBTElEX0ZSQU1FX05VTUJFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NjAxMCAvLyBJbnZhbGlkIGZyYW1lIG51bWJlci4NCisjZGVmaW5lIEVSUl9ESVJFQ1RYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NjAwOSAvLyBBbiBpbnRlcm5hbCBEaXJlY3RYIGVycm9yIGhhcyBvY2N1cnJlZC4gIFRyeSB1cGdyYWRpbmcgdG8gdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIERpcmVjdFguDQorI2RlZmluZSBFUlJfRElSRUNUWF9OT19GSUxURVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTYwMDggLy8gQW4gYXBwcm9wcmlhdGUgRGlyZWN0WCBmaWx0ZXIgdG8gcHJvY2VzcyB0aGlzIGZpbGUgY291bGQgbm90IGJlIGZvdW5kLiAgSW5zdGFsbCB0aGUgZmlsdGVyIHRoYXQgd2FzIHVzZWQgdG8gY3JlYXRlIHRoaXMgQVZJLiBVcGdyYWRpbmcgdG8gdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIERpcmVjdFggbWF5IGNvcnJlY3QgdGhpcyBlcnJvci4gIE5JIFZpc2lvbiByZXF1aXJlcyBEaXJlY3RYIDguMSBvciBoaWdoZXIuDQorI2RlZmluZSBFUlJfRElSRUNUWF9JTkNPTVBBVElCTEVfQ09NUFJFU1NJT05fRklMVEVSICAgICAgICAgICAgICAgICAgLTEwNzQzOTYwMDcgLy8gSW5jb21wYXRpYmxlIGNvbXByZXNzaW9uIGZpbHRlci4NCisjZGVmaW5lIEVSUl9ESVJFQ1RYX1VOS05PV05fQ09NUFJFU1NJT05fRklMVEVSICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NjAwNiAvLyBVbmtub3duIGNvbXByZXNzaW9uIGZpbHRlci4NCisjZGVmaW5lIEVSUl9JTlZBTElEX0FWSV9TRVNTSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NjAwNSAvLyBJbnZhbGlkIEFWSSBzZXNzaW9uLg0KKyNkZWZpbmUgRVJSX0RJUkVDVFhfQ0VSVElGSUNBVElPTl9GQUlMVVJFICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk2MDA0IC8vIEEgc29mdHdhcmUga2V5IGlzIHJlc3RyaWN0aW5nIHRoZSB1c2Ugb2YgdGhpcyBjb21wcmVzc2lvbiBmaWx0ZXIuDQorI2RlZmluZSBFUlJfQVZJX0RBVEFfRVhDRUVEU19CVUZGRVJfU0laRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTYwMDMgLy8gVGhlIGRhdGEgZm9yIHRoaXMgZnJhbWUgZXhjZWVkcyB0aGUgZGF0YSBidWZmZXIgc2l6ZSBzcGVjaWZpZWQgd2hlbiBjcmVhdGluZyB0aGUgQVZJIGZpbGUuDQorI2RlZmluZSBFUlJfSU5WQUxJRF9MSU5FR0FVR0VNRVRIT0QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTYwMDIgLy8gSW52YWxpZCBsaW5lIGdhdWdlIG1ldGhvZC4NCisjZGVmaW5lIEVSUl9UT09fTUFOWV9BVklfU0VTU0lPTlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NjAwMSAvLyBUaGVyZSBhcmUgdG9vIG1hbnkgQVZJIHNlc3Npb25zIG9wZW4uICBZb3UgbXVzdCBjbG9zZSBhIHNlc3Npb24gYmVmb3JlIHlvdSBjYW4gb3BlbiBhbm90aGVyIG9uZS4NCisjZGVmaW5lIEVSUl9GSUxFX0ZJTEVfSEVBREVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NjAwMCAvLyBJbnZhbGlkIGZpbGUgaGVhZGVyLg0KKyNkZWZpbmUgRVJSX0ZJTEVfRklMRV9UWVBFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1OTk5IC8vIEludmFsaWQgZmlsZSB0eXBlLg0KKyNkZWZpbmUgRVJSX0ZJTEVfQ09MT1JfVEFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1OTk4IC8vIEludmFsaWQgY29sb3IgdGFibGUuDQorI2RlZmluZSBFUlJfRklMRV9BUkdFUlIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTU5OTcgLy8gSW52YWxpZCBwYXJhbWV0ZXIuDQorI2RlZmluZSBFUlJfRklMRV9PUEVOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTU5OTYgLy8gRmlsZSBpcyBhbHJlYWR5IG9wZW4gZm9yIHdyaXRpbmcuDQorI2RlZmluZSBFUlJfRklMRV9OT1RfRk9VTkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTU5OTUgLy8gRmlsZSBub3QgZm91bmQuDQorI2RlZmluZSBFUlJfRklMRV9UT09fTUFOWV9PUEVOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTU5OTQgLy8gVG9vIG1hbnkgZmlsZXMgb3Blbi4NCisjZGVmaW5lIEVSUl9GSUxFX0lPX0VSUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTk5MyAvLyBGaWxlIEkvTyBlcnJvci4NCisjZGVmaW5lIEVSUl9GSUxFX1BFUk1JU1NJT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTk5MiAvLyBGaWxlIGFjY2VzcyBkZW5pZWQuDQorI2RlZmluZSBFUlJfRklMRV9JTlZBTElEX1RZUEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTU5OTEgLy8gTkkgVmlzaW9uIGRvZXMgbm90IHN1cHBvcnQgdGhlIGZpbGUgdHlwZSB5b3Ugc3BlY2lmaWVkLg0KKyNkZWZpbmUgRVJSX0ZJTEVfR0VUX0lORk8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1OTkwIC8vIENvdWxkIG5vdCByZWFkIFZpc2lvbiBpbmZvIGZyb20gZmlsZS4NCisjZGVmaW5lIEVSUl9GSUxFX1JFQUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTk4OSAvLyBVbmFibGUgdG8gcmVhZCBkYXRhLg0KKyNkZWZpbmUgRVJSX0ZJTEVfV1JJVEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1OTg4IC8vIFVuYWJsZSB0byB3cml0ZSBkYXRhLg0KKyNkZWZpbmUgRVJSX0ZJTEVfRU9GICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1OTg3IC8vIFByZW1hdHVyZSBlbmQgb2YgZmlsZS4NCisjZGVmaW5lIEVSUl9GSUxFX0ZPUk1BVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTk4NiAvLyBJbnZhbGlkIGZpbGUgZm9ybWF0Lg0KKyNkZWZpbmUgRVJSX0ZJTEVfT1BFUkFUSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1OTg1IC8vIEludmFsaWQgZmlsZSBvcGVyYXRpb24uDQorI2RlZmluZSBFUlJfRklMRV9JTlZBTElEX0RBVEFfVFlQRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTU5ODQgLy8gTkkgVmlzaW9uIGRvZXMgbm90IHN1cHBvcnQgdGhlIGZpbGUgZGF0YSB0eXBlIHlvdSBzcGVjaWZpZWQuDQorI2RlZmluZSBFUlJfRklMRV9OT19TUEFDRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTU5ODMgLy8gRGlzayBmdWxsLg0KKyNkZWZpbmUgRVJSX0lOVkFMSURfRlJBTUVTX1BFUl9TRUNPTkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1OTgyIC8vIFRoZSBmcmFtZXMgcGVyIHNlY29uZCBpbiBhbiBBVkkgbXVzdCBiZSBncmVhdGVyIHRoYW4gemVyby4NCisjZGVmaW5lIEVSUl9JTlNVRkZJQ0lFTlRfQlVGRkVSX1NJWkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTk4MSAvLyBUaGUgYnVmZmVyIHRoYXQgd2FzIHBhc3NlZCBpbiBpcyBub3QgYmlnIGVub3VnaCB0byBob2xkIGFsbCBvZiB0aGUgZGF0YS4NCisjZGVmaW5lIEVSUl9DT01fSU5JVElBTElaRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTk4MCAvLyBFcnJvciBpbml0aWFsaXppbmcgQ09NLg0KKyNkZWZpbmUgRVJSX0lOVkFMSURfUEFSVElDTEVfSU5GTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1OTc5IC8vIFRoZSBpbWFnZSBoYXMgaW52YWxpZCBwYXJ0aWNsZSBpbmZvcm1hdGlvbi4gIENhbGwgaW1hcUNvdW50UGFydGljbGVzIG9uIHRoZSBpbWFnZSB0byBjcmVhdGUgcGFydGljbGUgaW5mb3JtYXRpb24uDQorI2RlZmluZSBFUlJfSU5WQUxJRF9QQVJUSUNMRV9OVU1CRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTU5NzggLy8gSW52YWxpZCBwYXJ0aWNsZSBudW1iZXIuDQorI2RlZmluZSBFUlJfQVZJX1ZFUlNJT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTU5NzcgLy8gVGhlIEFWSSBmaWxlIHdhcyBjcmVhdGVkIGluIGEgbmV3ZXIgdmVyc2lvbiBvZiBOSSBWaXNpb24uIFVwZ3JhZGUgdG8gdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIE5JIFZpc2lvbiB0byByZWFkIHRoaXMgQVZJIGZpbGUuDQorI2RlZmluZSBFUlJfTlVNQkVSX09GX1BBTEVUVEVfQ09MT1JTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTU5NzYgLy8gVGhlIGNvbG9yIHBhbGV0dGUgbXVzdCBoYXZlIGV4YWN0bHkgMCBvciAyNTYgZW50cmllcy4NCisjZGVmaW5lIEVSUl9BVklfVElNRU9VVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTk3NSAvLyBEaXJlY3RYIGhhcyB0aW1lZCBvdXQgcmVhZGluZyBvciB3cml0aW5nIHRoZSBBVkkgZmlsZS4gIFdoZW4gY2xvc2luZyBhbiBBVkkgZmlsZSwgdHJ5IGFkZGluZyBhbiBhZGRpdGlvbmFsIGRlbGF5LiAgV2hlbiByZWFkaW5nIGFuIEFWSSBmaWxlLCB0cnkgcmVkdWNpbmcgQ1BVIGFuZCBkaXNrIGxvYWQuDQorI2RlZmluZSBFUlJfVU5TVVBQT1JURURfSlBFRzIwMDBfQ09MT1JTUEFDRV9NRVRIT0QgICAgICAgICAgICAgICAgICAgLTEwNzQzOTU5NzQgLy8gTkkgVmlzaW9uIGRvZXMgbm90IHN1cHBvcnQgcmVhZGluZyBKUEVHMjAwMCBmaWxlcyB3aXRoIHRoaXMgY29sb3JzcGFjZSBtZXRob2QuDQorI2RlZmluZSBFUlJfSlBFRzIwMDBfVU5TVVBQT1JURURfTVVMVElQTEVfTEFZRVJTICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTU5NzMgLy8gTkkgVmlzaW9uIGRvZXMgbm90IHN1cHBvcnQgcmVhZGluZyBKUEVHMjAwMCBmaWxlcyB3aXRoIG1vcmUgdGhhbiBvbmUgbGF5ZXIuDQorI2RlZmluZSBFUlJfRElSRUNUWF9FTlVNRVJBVEVfRklMVEVSUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTU5NzIgLy8gRGlyZWN0WCBpcyB1bmFibGUgdG8gZW51bWVyYXRlIHRoZSBjb21wcmVzc2lvbiBmaWx0ZXJzLiBUaGlzIGlzIGNhdXNlZCBieSBhIHRoaXJkLXBhcnR5IGNvbXByZXNzaW9uIGZpbHRlciB0aGF0IGlzIGVpdGhlciBpbXByb3Blcmx5IGluc3RhbGxlZCBvciBpcyBwcmV2ZW50aW5nIGl0c2VsZiBmcm9tIGJlaW5nIGVudW1lcmF0ZWQuIFJlbW92ZSBhbnkgcmVjZW50bHkgaW5zdGFsbGVkIGNvbXByZXNzaW9uIGZpbHRlcnMgYW5kIHRyeSBhZ2Fpbi4NCisjZGVmaW5lIEVSUl9JTlZBTElEX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTk3MSAvLyBUaGUgb2Zmc2V0IHlvdSBzcGVjaWZpZWQgbXVzdCBiZSBzaXplIDIuDQorI2RlZmluZSBFUlJfSU5JVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTU5NjAgLy8gSW5pdGlhbGl6YXRpb24gZXJyb3IuDQorI2RlZmluZSBFUlJfQ1JFQVRFX1dJTkRPVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTU5NTkgLy8gVW5hYmxlIHRvIGNyZWF0ZSB3aW5kb3cuDQorI2RlZmluZSBFUlJfV0lORE9XX0lEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTU5NTggLy8gSW52YWxpZCB3aW5kb3cgSUQuDQorI2RlZmluZSBFUlJfQVJSQVlfU0laRV9NSVNNQVRDSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTU5NTcgLy8gVGhlIGFycmF5IHNpemVzIGFyZSBub3QgY29tcGF0aWJsZS4NCisjZGVmaW5lIEVSUl9JTlZBTElEX1FVQUxJVFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTk1NiAvLyBUaGUgcXVhbGl0eSB5b3UgcHJvdmlkZWQgaXMgaW52YWxpZC4gVmFsaWQgcXVhbGl0eSB2YWx1ZXMgcmFuZ2UgZnJvbSAtMSB0byAxMDAwLg0KKyNkZWZpbmUgRVJSX0lOVkFMSURfTUFYX1dBVkVMRVRfVFJBTlNGT1JNX0xFVkVMICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1OTU1IC8vIEludmFsaWQgbWF4aW11bSB3YXZlbGV0IHRyYW5zZm9ybSBsZXZlbC4gIFZhbGlkIHZhbHVlcyByYW5nZSBmcm9tIDAgdG8gMjU1Lg0KKyNkZWZpbmUgRVJSX0lOVkFMSURfUVVBTlRJWkFUSU9OX1NURVBfU0laRSAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1OTU0IC8vIFRoZSBxdWFudGl6YXRpb24gc3RlcCBzaXplIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDAuDQorI2RlZmluZSBFUlJfSU5WQUxJRF9XQVZFTEVUX1RSQU5TRk9STV9NT0RFICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTU5NTMgLy8gSW52YWxpZCB3YXZlbGV0IHRyYW5zZm9ybSBtb2RlLg0KKyNkZWZpbmUgRVJSX1JPSV9OT1RfUE9JTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1OTUyIC8vIFRoZSBST0kgbXVzdCBvbmx5IGhhdmUgYSBzaW5nbGUgUG9pbnQgY29udG91ci4NCisjZGVmaW5lIEVSUl9ST0lfTk9UX1BPSU5UUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTk1MSAvLyBUaGUgUk9JIG11c3Qgb25seSBoYXZlIFBvaW50IGNvbnRvdXJzLg0KKyNkZWZpbmUgRVJSX1JPSV9OT1RfTElORSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1OTUwIC8vIFRoZSBST0kgbXVzdCBvbmx5IGhhdmUgYSBzaW5nbGUgTGluZSBjb250b3VyLg0KKyNkZWZpbmUgRVJSX1JPSV9OT1RfQU5OVUxVUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1OTQ5IC8vIFRoZSBST0kgbXVzdCBvbmx5IGhhdmUgYSBzaW5nbGUgQW5udWx1cyBjb250b3VyLg0KKyNkZWZpbmUgRVJSX0lOVkFMSURfTUVBU1VSRV9QQVJUSUNMRVNfQ0FMSUJSQVRJT05fTU9ERSAgICAgICAgICAgICAgIC0xMDc0Mzk1OTQ4IC8vIEludmFsaWQgbWVhc3VyZSBwYXJ0aWNsZXMgY2FsaWJyYXRpb24gbW9kZS4NCisjZGVmaW5lIEVSUl9JTlZBTElEX1BBUlRJQ0xFX0NMQVNTSUZJRVJfVEhSRVNIT0xEX1RZUEUgICAgICAgICAgICAgICAtMTA3NDM5NTk0NyAvLyBJbnZhbGlkIHBhcnRpY2xlIGNsYXNzaWZpZXIgdGhyZXNob2xkIHR5cGUuDQorI2RlZmluZSBFUlJfSU5WQUxJRF9ESVNUQU5DRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTU5NDYgLy8gSW52YWxpZCBDb2xvciBTZWdtZW50YXRpb24gRGlzdGFuY2UNCisjZGVmaW5lIEVSUl9JTlZBTElEX1BBUlRJQ0xFX0FSRUEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTk0NSAvLyBJbnZhbGlkIENvbG9yIFNlZ21lbmF0aW9uIFBhcnRpY2xlIEFyZWENCisjZGVmaW5lIEVSUl9DTEFTU19OQU1FX05PVF9GT1VORCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTk0NCAvLyBSZXF1aXJlZCBDbGFzcyBuYW1lIGlzIG5vdCBmb3VuZCBpbiB0cmFpbmVkIGxhYmVscy9DbGFzcyBuYW1lcw0KKyNkZWZpbmUgRVJSX05VTUJFUl9MQUJFTF9MSU1JVF9FWENFRURFRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1OTQzIC8vIE51bWJlciBvZiBMYWJlbHMgZXhjZWVkZWQgbGltaXQgb2YgbGFiZWwgSW1hZ2UgdHlwZQ0KKyNkZWZpbmUgRVJSX0lOVkFMSURfRElTVEFOQ0VfTEVWRUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1OTQyIC8vIEludmFsaWQgQ29sb3IgU2VnbWVudGF0aW9uIGRpc3RhbmNlIGxldmVsDQorI2RlZmluZSBFUlJfSU5WQUxJRF9TVk1fVFlQRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTU5NDEgLy8gSW52YWxpZCBTVk0gbW9kZWwgdHlwZQ0KKyNkZWZpbmUgRVJSX0lOVkFMSURfU1ZNX0tFUk5FTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1OTQwIC8vIEludmFsaWQgU1ZNIGtlcm5lbCB0eXBlDQorI2RlZmluZSBFUlJfTk9fU1VQUE9SVF9WRUNUT1JfRk9VTkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTU5MzkgLy8gTm8gU3VwcG9ydCBWZWN0b3IgaXMgZm91bmQgYXQgU1ZNIHRyYWluaW5nDQorI2RlZmluZSBFUlJfQ09TVF9MQUJFTF9OT1RfRk9VTkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTU5MzggLy8gTGFiZWwgbmFtZSBpcyBub3QgZm91bmQgaW4gYWRkZWQgc2FtcGxlcw0KKyNkZWZpbmUgRVJSX0VYQ0VFREVEX1NWTV9NQVhfSVRFUkFUSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1OTM3IC8vIFNWTSB0cmFpbmluZyBleGNlZWRlZCBtYXhpbWltIEl0ZXJhdGlvbiBsaW1pdA0KKyNkZWZpbmUgRVJSX0lOVkFMSURfU1ZNX1BBUkFNRVRFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1OTM2IC8vIEludmFsaWQgU1ZNIFBhcmFtZXRlcg0KKyNkZWZpbmUgRVJSX0lOVkFMSURfSURFTlRJRklDQVRJT05fU0NPUkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1OTM1IC8vIEludmFsaWQgSWRlbnRpZmljYXRpb24gc2NvcmUuIE11c3QgYmUgYmV0d2VlbiAwLTEwMDAuDQorI2RlZmluZSBFUlJfSU5WQUxJRF9URVhUVVJFX0ZFQVRVUkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTU5MzQgLy8gUmVxdWVzdGVkIGZvciBpbnZhbGlkIHRleHR1cmUgZmVhdHVyZQ0KKyNkZWZpbmUgRVJSX0lOVkFMSURfQ09PQ0NVUlJFTkNFX0xFVkVMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1OTMzIC8vIFRoZSBjb09jY3VycmVuY2UgTGV2ZWwgbXVzdCBsaWUgYmV0d2VlbiAxIGFuZCB0aGUgbWF4aW11bSBwaXhlbCB2YWx1ZSBvZiBhbiBpbWFnZSAoMjU1IGZvciBVOCBpbWFnZSkNCisjZGVmaW5lIEVSUl9JTlZBTElEX1dBVkVMRVRfU1VCQkFORCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTkzMiAvLyBSZXF1ZXN0IGZvciBpbnZhbGlkIHdhdmVsZXQgc3ViQmFuZA0KKyNkZWZpbmUgRVJSX0lOVkFMSURfRklOQUxfU1RFUF9TSVpFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1OTMxIC8vIFRoZSBmaW5hbCBzdGVwIHNpemUgbXVzdCBiZSBsZXNzZXIgdGhhbiB0aGUgaW5pdGlhbCBzdGVwIHNpemUNCisjZGVmaW5lIEVSUl9JTlZBTElEX0VORVJHWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTkzMCAvLyBNaW5pbXVtIEVuZXJneSBzaG91bGQgbGllIGJldHdlZW4gMCBhbmQgMTAwDQorI2RlZmluZSBFUlJfSU5WQUxJRF9URVhUVVJFX0xBQkVMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTU5MjkgLy8gVGhlIGNsYXNzaWZpY2F0aW9uIGxhYmVsIG11c3QgYmUgdGV4dHVyZSBvciBkZWZlY3QgZm9yIHRleHR1cmUgZGVmZWN0IGNsYXNzaWZpZXINCisjZGVmaW5lIEVSUl9JTlZBTElEX1dBVkVMRVRfVFlQRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTkyOCAvLyBUaGUgd2F2ZWxldCB0eXBlIGlzIGludmFsaWQNCisjZGVmaW5lIEVSUl9TQU1FX1dBVkVMRVRfQkFORFNfU0VMRUNURUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTkyNyAvLyBTYW1lIFdhdmVsZXQgYmFuZCBpcyBzZWxlY3RlZCBtdWx0aXBsZSB0aW1lcw0KKyNkZWZpbmUgRVJSX0lNQUdFX1NJWkVfTUlTTUFUQ0ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1OTI2IC8vIFRoZSB0d28gaW5wdXQgaW1hZ2Ugc2l6ZXMgYXJlIGRpZmZlcmVudCANCisjZGVmaW5lIEVSUl9OVU1CRVJfQ0xBU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTkyMCAvLyBJbnZhbGlkIG51bWJlciBvZiBjbGFzc2VzLg0KKyNkZWZpbmUgRVJSX0lOVkFMSURfTFVDQVNfS0FOQURFX1dJTkRPV19TSVpFICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1ODg4IC8vIEJvdGggZGltZW5zaW9ucyBvZiB0aGUgd2luZG93IHNpemUgc2hvdWxkIGJlIG9kZCwgZ3JlYXRlciB0aGFuIDIgYW5kIGxlc3MgdGhhbiAxNi4NCisjZGVmaW5lIEVSUl9JTlZBTElEX01BVFJJWF9UWVBFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTg4NyAvLyBUaGUgdHlwZSBvZiBtYXRyaXggc3VwcGxpZWQgdG8gdGhlIGZ1bmN0aW9uIGlzIG5vdCBzdXBwb3J0ZWQuDQorI2RlZmluZSBFUlJfSU5WQUxJRF9PUFRJQ0FMX0ZMT1dfVEVSTUlOQVRJT05fQ1JJVEVSSUFfVFlQRSAgICAgICAgICAgLTEwNzQzOTU4ODYgLy8gQW4gaW52YWxpZCB0ZXJtaW5hdGlvbiBjcml0ZXJpYSB3YXMgc3BlY2lmaWVkIGZvciB0aGUgb3B0aWNhbCBmbG93IGNvbXB1dGF0aW9uLg0KKyNkZWZpbmUgRVJSX0xLUF9OVUxMX1BZUkFNSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1ODg1IC8vIFRoZSBweXJhbWlkIGxldmVscyB3aGVyZSBub3QgcHJvcGVybHkgYWxsb2NhdGVkLg0KKyNkZWZpbmUgRVJSX0lOVkFMSURfUFlSQU1JRF9MRVZFTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1ODg0IC8vIFRoZSBweXJhbWlkIGxldmVsIHNwZWNpZmllZCBjYW5ub3QgYmUgbmVnYXRpdmUNCisjZGVmaW5lIEVSUl9JTlZBTElEX0xLUF9LRVJORUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTg4MyAvLyBUaGUga2VybmVsIG11c3QgYmUgc3ltbWV0cmljICB3aXRoIG5vbi16ZXJvIGNvZWZmaWNpZW50cyBhbmQgb2Ygb2RkIHNpemUNCisjZGVmaW5lIEVSUl9JTlZBTElEX0hPUk5fU0NIVU5DS19MQU1CREEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTg4MiAvLyBJbnZhbGlkIHNtb290aGluZyBwYXJhbWV0ZXIgaW4gSG9ybiBTY2h1bmNrIG9wZXJhdGlvbi4NCisjZGVmaW5lIEVSUl9JTlZBTElEX0hPUk5fU0NIVU5DS19UWVBFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTg4MSAvLyBJbnZhbGlkIHN0b3BwaW5nIGNyaXRlcmlhIHR5cGUgZm9yIEhvcm4gU2NodW5jayBvcHRpY2FsIGZsb3cuDQorI2RlZmluZSBFUlJfUEFSVElDTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTU4ODAgLy8gSW52YWxpZCBwYXJ0aWNsZS4NCisjZGVmaW5lIEVSUl9CQURfTUVBU1VSRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTg3OSAvLyBJbnZhbGlkIG1lYXN1cmUgbnVtYmVyLg0KKyNkZWZpbmUgRVJSX1BST1BfTk9ERV9XUklURV9OT1RfU1VQUE9SVEVEICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1ODc4IC8vIFRoZSBJbWFnZSBEaXNwbGF5IGNvbnRyb2wgZG9lcyBub3Qgc3VwcG9ydCB3cml0aW5nIHRoaXMgcHJvcGVydHkgbm9kZS4NCisjZGVmaW5lIEVSUl9DT0xPUk1PREVfUkVRVUlSRVNfQ0hBTkdFQ09MT1JTUEFDRTIgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTg3NyAvLyBUaGUgc3BlY2lmaWVkIGNvbG9yIG1vZGUgcmVxdWlyZXMgdGhlIHVzZSBvZiBpbWFxQ2hhbmdlQ29sb3JTcGFjZTIuDQorI2RlZmluZSBFUlJfVU5TVVBQT1JURURfQ09MT1JfTU9ERSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTU4NzYgLy8gVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBjdXJyZW50bHkgc3VwcG9ydCB0aGUgY29sb3IgbW9kZSB5b3Ugc3BlY2lmaWVkLg0KKyNkZWZpbmUgRVJSX0JBUkNPREVfUEhBUk1BQ09ERSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1ODc1IC8vIFRoZSBiYXJjb2RlIGlzIG5vdCBhIHZhbGlkIFBoYXJtYWNvZGUgc3ltYm9sDQorI2RlZmluZSBFUlJfQkFEX0lOREVYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTU4NDAgLy8gSW52YWxpZCBoYW5kbGUgdGFibGUgaW5kZXguDQorI2RlZmluZSBFUlJfSU5WQUxJRF9DT01QUkVTU0lPTl9SQVRJTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTU4MzcgLy8gVGhlIGNvbXByZXNzaW9uIHJhdGlvIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDEuDQorI2RlZmluZSBFUlJfVE9PX01BTllfQ09OVE9VUlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTU4MDEgLy8gVGhlIFJPSSBjb250YWlucyB0b28gbWFueSBjb250b3Vycy4NCisjZGVmaW5lIEVSUl9QUk9URUNUSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTgwMCAvLyBQcm90ZWN0aW9uIGVycm9yLg0KKyNkZWZpbmUgRVJSX0lOVEVSTkFMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1Nzk5IC8vIEludGVybmFsIGVycm9yLg0KKyNkZWZpbmUgRVJSX0lOVkFMSURfQ1VTVE9NX1NBTVBMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1Nzk4IC8vIFRoZSBzaXplIG9mIHRoZSBmZWF0dXJlIHZlY3RvciBpbiB0aGUgY3VzdG9tIHNhbXBsZSBtdXN0IG1hdGNoIHRoZSBzaXplIG9mIHRob3NlIHlvdSBoYXZlIGFscmVhZHkgYWRkZWQuDQorI2RlZmluZSBFUlJfSU5WQUxJRF9DTEFTU0lGSUVSX1NFU1NJT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTU3OTcgLy8gTm90IGEgdmFsaWQgY2xhc3NpZmllciBzZXNzaW9uLg0KKyNkZWZpbmUgRVJSX0lOVkFMSURfS05OX01FVEhPRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1Nzk2IC8vIFlvdSByZXF1ZXN0ZWQgYW4gaW52YWxpZCBOZWFyZXN0IE5laWdoYm9yIGNsYXNzaWZpZXIgbWV0aG9kLg0KKyNkZWZpbmUgRVJSX0tfVE9PX0xPVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1Nzk1IC8vIFRoZSBrIHBhcmFtZXRlciBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB0d28uDQorI2RlZmluZSBFUlJfS19UT09fSElHSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTU3OTQgLy8gVGhlIGsgcGFyYW1ldGVyIG11c3QgYmUgPD0gdGhlIG51bWJlciBvZiBzYW1wbGVzIGluIGVhY2ggY2xhc3MuDQorI2RlZmluZSBFUlJfSU5WQUxJRF9PUEVSQVRJT05fT05fQ09NUEFDVF9TRVNTSU9OX0FUVEVNUFRFRCAgICAgICAgICAgLTEwNzQzOTU3OTMgLy8gVGhpcyBjbGFzc2lmaWVyIHNlc3Npb24gaXMgY29tcGFjdC4gT25seSB0aGUgQ2xhc3NpZnkgYW5kIERpc3Bvc2UgZnVuY3Rpb25zIG1heSBiZSBjYWxsZWQgb24gYSBjb21wYWN0IGNsYXNzaWZpZXIgc2Vzc2lvbi4NCisjZGVmaW5lIEVSUl9DTEFTU0lGSUVSX1NFU1NJT05fTk9UX1RSQUlORUQgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTc5MiAvLyBUaGlzIGNsYXNzaWZpZXIgc2Vzc2lvbiBpcyBub3QgdHJhaW5lZC4gWW91IG1heSBvbmx5IGNhbGwgdGhpcyBmdW5jdGlvbiBvbiBhIHRyYWluZWQgY2xhc3NpZmllciBzZXNzaW9uLg0KKyNkZWZpbmUgRVJSX0NMQVNTSUZJRVJfSU5WQUxJRF9TRVNTSU9OX1RZUEUgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1NzkxIC8vIFRoaXMgY2xhc3NpZmllciBmdW5jdGlvbiBjYW5ub3QgYmUgY2FsbGVkIG9uIHRoaXMgdHlwZSBvZiBjbGFzc2lmaWVyIHNlc3Npb24uDQorI2RlZmluZSBFUlJfSU5WQUxJRF9ESVNUQU5DRV9NRVRSSUMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTU3OTAgLy8gWW91IHJlcXVlc3RlZCBhbiBpbnZhbGlkIGRpc3RhbmNlIG1ldHJpYy4NCisjZGVmaW5lIEVSUl9PUEVOSU5HX05FV0VSX0NMQVNTSUZJRVJfU0VTU0lPTiAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTc4OSAvLyBUaGUgY2xhc3NpZmllciBzZXNzaW9uIHlvdSB0cmllZCB0byBvcGVuIHdhcyBjcmVhdGVkIHdpdGggYSBuZXdlciB2ZXJzaW9uIG9mIE5JIFZpc2lvbi4gVXBncmFkZSB0byB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgTkkgVmlzaW9uIHRvIHJlYWQgdGhpcyBmaWxlLg0KKyNkZWZpbmUgRVJSX05PX1NBTVBMRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1Nzg4IC8vIFRoaXMgb3BlcmF0aW9uIGNhbm5vdCBiZSBwZXJmb3JtZWQgYmVjYXVzZSB5b3UgaGF2ZSBub3QgYWRkZWQgYW55IHNhbXBsZXMuDQorI2RlZmluZSBFUlJfSU5WQUxJRF9DTEFTU0lGSUVSX1RZUEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTU3ODcgLy8gWW91IHJlcXVlc3RlZCBhbiBpbnZhbGlkIGNsYXNzaWZpZXIgdHlwZS4NCisjZGVmaW5lIEVSUl9JTlZBTElEX1BBUlRJQ0xFX09QVElPTlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTc4NiAvLyBUaGUgc3VtIG9mIFNjYWxlIERlcGVuZGVuY2UgYW5kIFN5bW1ldHJ5IERlcGVuZGVuY2UgbXVzdCBiZSBsZXNzIHRoYW4gMTAwMC4NCisjZGVmaW5lIEVSUl9OT19QQVJUSUNMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTc4NSAvLyBUaGUgaW1hZ2UgeWllbGRlZCBubyBwYXJ0aWNsZXMuDQorI2RlZmluZSBFUlJfSU5WQUxJRF9MSU1JVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTU3ODQgLy8gVGhlIGxpbWl0cyB5b3Ugc3VwcGxpZWQgYXJlIG5vdCB2YWxpZC4NCisjZGVmaW5lIEVSUl9CQURfU0FNUExFX0lOREVYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTc4MyAvLyBUaGUgU2FtcGxlIEluZGV4IGZlbGwgb3V0c2lkZSB0aGUgcmFuZ2Ugb2YgU2FtcGxlcy4NCisjZGVmaW5lIEVSUl9ERVNDUklQVElPTl9UT09fTE9ORyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTc4MiAvLyBUaGUgZGVzY3JpcHRpb24gbXVzdCBiZSA8PSAyNTUgY2hhcmFjdGVycy4NCisjZGVmaW5lIEVSUl9DTEFTU0lGSUVSX0lOVkFMSURfRU5HSU5FX1RZUEUgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTc4MSAvLyBUaGUgZW5naW5lIGZvciB0aGlzIGNsYXNzaWZpZXIgc2Vzc2lvbiBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgb3BlcmF0aW9uLg0KKyNkZWZpbmUgRVJSX0lOVkFMSURfUEFSVElDTEVfVFlQRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1NzgwIC8vIFlvdSByZXF1ZXN0ZWQgYW4gaW52YWxpZCBwYXJ0aWNsZSB0eXBlLg0KKyNkZWZpbmUgRVJSX0NBTk5PVF9DT01QQUNUX1VOVFJBSU5FRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1Nzc5IC8vIFlvdSBtYXkgb25seSBzYXZlIGEgc2Vzc2lvbiBpbiBjb21wYWN0IGZvcm0gaWYgaXQgaXMgdHJhaW5lZC4NCisjZGVmaW5lIEVSUl9JTlZBTElEX0tFUk5FTF9TSVpFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTc3OCAvLyBUaGUgS2VybmVsIHNpemUgbXVzdCBiZSBzbWFsbGVyIHRoYW4gdGhlIGltYWdlIHNpemUuDQorI2RlZmluZSBFUlJfSU5DT01QQVRJQkxFX0NMQVNTSUZJRVJfVFlQRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTU3NzcgLy8gVGhlIHNlc3Npb24geW91IHJlYWQgZnJvbSBmaWxlIG11c3QgYmUgdGhlIHNhbWUgdHlwZSBhcyB0aGUgc2Vzc2lvbiB5b3UgcGFzc2VkIGluLg0KKyNkZWZpbmUgRVJSX0lOVkFMSURfVVNFX09GX0NPTVBBQ1RfU0VTU0lPTl9GSUxFICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1Nzc2IC8vIFlvdSBjYW4gbm90IHVzZSBhIGNvbXBhY3QgY2xhc3NpZmljYXRpb24gZmlsZSB3aXRoIHJlYWQgb3B0aW9ucyBvdGhlciB0aGFuIFJlYWQgQWxsLg0KKyNkZWZpbmUgRVJSX1JPSV9IQVNfT1BFTl9DT05UT1VSUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1Nzc1IC8vIFRoZSBST0kgeW91IHBhc3NlZCBpbiBtYXkgb25seSBjb250YWluIGNsb3NlZCBjb250b3Vycy4NCisjZGVmaW5lIEVSUl9OT19MQUJFTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTc3NCAvLyBZb3UgbXVzdCBwYXNzIGluIGEgbGFiZWwuDQorI2RlZmluZSBFUlJfTk9fREVTVF9JTUFHRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTU3NzMgLy8gWW91IG11c3QgcHJvdmlkZSBhIGRlc3RpbmF0aW9uIGltYWdlLg0KKyNkZWZpbmUgRVJSX0lOVkFMSURfUkVHSVNUUkFUSU9OX01FVEhPRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1NzcyIC8vIFlvdSBwcm92aWRlZCBhbiBpbnZhbGlkIHJlZ2lzdHJhdGlvbiBtZXRob2QuDQorI2RlZmluZSBFUlJfT1BFTklOR19ORVdFUl9JTlNQRUNUSU9OX1RFTVBMQVRFICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTU3NzEgLy8gVGhlIGdvbGRlbiB0ZW1wbGF0ZSB5b3UgdHJpZWQgdG8gb3BlbiB3YXMgY3JlYXRlZCB3aXRoIGEgbmV3ZXIgdmVyc2lvbiBvZiBOSSBWaXNpb24uIFVwZ3JhZGUgdG8gdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIE5JIFZpc2lvbiB0byByZWFkIHRoaXMgZmlsZS4NCisjZGVmaW5lIEVSUl9JTlZBTElEX0lOU1BFQ1RJT05fVEVNUExBVEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTc3MCAvLyBJbnZhbGlkIGdvbGRlbiB0ZW1wbGF0ZS4NCisjZGVmaW5lIEVSUl9JTlZBTElEX0VER0VfVEhJQ0tORVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTc2OSAvLyBFZGdlIFRoaWNrbmVzcyB0byBJZ25vcmUgbXVzdCBiZSBncmVhdGVyIHRoYW4gemVyby4NCisjZGVmaW5lIEVSUl9JTlZBTElEX1NDQUxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTc2OCAvLyBTY2FsZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB6ZXJvLg0KKyNkZWZpbmUgRVJSX0lOVkFMSURfQUxJR05NRU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1NzY3IC8vIFRoZSBzdXBwbGllZCBzY2FsZSBpcyBpbnZhbGlkIGZvciB5b3VyIHRlbXBsYXRlLg0KKyNkZWZpbmUgRVJSX0RFUFJFQ0FURURfRlVOQ1RJT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1NzY2IC8vIFRoaXMgYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgZnVuY3Rpb24gY2FuIG5vdCBiZSB1c2VkIHdpdGggdGhpcyBzZXNzaW9uLiBVc2UgbmV3ZXIsIHN1cHBvcnRlZCBmdW5jdGlvbnMgaW5zdGVhZC4NCisjZGVmaW5lIEVSUl9JTlZBTElEX05PUk1BTElaQVRJT05fTUVUSE9EICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTc2MyAvLyBZb3UgbXVzdCBwcm92aWRlIGEgdmFsaWQgbm9ybWFsaXphdGlvbiBtZXRob2QuDQorI2RlZmluZSBFUlJfSU5WQUxJRF9OSUJMQUNLX0RFVklBVElPTl9GQUNUT1IgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTU3NjIgLy8gVGhlIGRldmlhdGlvbiBmYWN0b3IgZm9yIE5pYmxhY2sgbG9jYWwgdGhyZXNob2xkIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAxLg0KKyNkZWZpbmUgRVJSX0JPQVJEX05PVF9GT1VORCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1NzYwIC8vIEJvYXJkIG5vdCBmb3VuZC4NCisjZGVmaW5lIEVSUl9CT0FSRF9OT1RfT1BFTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTc1OCAvLyBCb2FyZCBub3Qgb3BlbmVkLg0KKyNkZWZpbmUgRVJSX0RMTF9OT1RfRk9VTkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1NzU3IC8vIERMTCBub3QgZm91bmQuDQorI2RlZmluZSBFUlJfRExMX0ZVTkNUSU9OX05PVF9GT1VORCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTU3NTYgLy8gRExMIGZ1bmN0aW9uIG5vdCBmb3VuZC4NCisjZGVmaW5lIEVSUl9UUklHX1RJTUVPVVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTc1NCAvLyBUcmlnZ2VyIHRpbWVvdXQuDQorI2RlZmluZSBFUlJfQ09OVE9VUl9JTlZBTElEX1JFRklORU1FTlRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTU3NDYgLy8gSW52YWxpZCBudW1iZXIgc3BlY2lmaWVkIGZvciBtYXhpbXVtIGNvbnRvdXIgcmVmaW5lbWVudHMuDQorI2RlZmluZSBFUlJfVE9PX01BTllfQ1VSVkVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTU3NDUgLy8gVG9vIG1hbnkgY3VydmVzIGV4dHJhY3RlZCBmcm9tIGltYWdlLiBSYWlzZSB0aGUgZWRnZSB0aHJlc2hvbGQgb3IgcmVkdWNlIHRoZSBST0kuDQorI2RlZmluZSBFUlJfQ09OVE9VUl9JTlZBTElEX0tFUk5FTF9GT1JfU01PT1RISU5HICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTU3NDQgLy8gSW52YWxpZCBrZXJuZWwgZm9yIGNvbnRvdXIgc21vb3RoaW5nLiBaZXJvIGluZGljYXRlcyBubyBzbW9vdGhpbmcsIG90aGVyd2lzZSB2YWx1ZSBtdXN0IGJlIG9kZC4gDQorI2RlZmluZSBFUlJfQ09OVE9VUl9MSU5FX0lOVkFMSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTU3NDMgLy8gVGhlIGNvbnRvdXIgbGluZSBmaXQgaXMgaW52YWxpZC4gTGluZSBzZWdtZW50IHN0YXJ0IGFuZCBzdG9wIG11c3QgZGlmZmVyLg0KKyNkZWZpbmUgRVJSX0NPTlRPVVJfVEVNUExBVEVfSU1BR0VfSU5WQUxJRCAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1NzQyIC8vIFRoZSB0ZW1wbGF0ZSBpbWFnZSBtdXN0IGJlIHRyYWluZWQgd2l0aCBJTUFRIExlYXJuIENvbnRvdXIgUGF0dGVybiBvciBiZSB0aGUgc2FtZSBzaXplIGFzIHRoZSB0YXJnZXQgaW1hZ2UuDQorI2RlZmluZSBFUlJfQ09OVE9VUl9HUE1fRkFJTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTU3NDEgLy8gTWF0Y2hpbmcgZmFpbGVkIHRvIGFsaWduIHRoZSB0ZW1wbGF0ZSBhbmQgdGFyZ2V0IGNvbnRvdXJzLg0KKyNkZWZpbmUgRVJSX0NPTlRPVVJfT1BFTklOR19ORVdFUl9WRVJTSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1NzQwIC8vIFRoZSBjb250b3VyIHlvdSB0cmllZCB0byBvcGVuIHdhcyBjcmVhdGVkIHdpdGggYSBuZXdlciB2ZXJzaW9uIG9mIE5JIFZpc2lvbi4gVXBncmFkZSB0byB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgTkkgVmlzaW9uIHRvIHJlYWQgdGhpcyBmaWxlLiANCisjZGVmaW5lIEVSUl9DT05UT1VSX0NPTk5FQ1RfRFVQTElDQVRFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTczOSAvLyBPbmx5IG9uZSByYW5nZSBpcyBhbGxvd2VkIHBlciBjdXJ2ZSBjb25uZWN0aW9uIGNvbnN0cmFpbnQgdHlwZS4gDQorI2RlZmluZSBFUlJfQ09OVE9VUl9DT05ORUNUX1RZUEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTU3MzggLy8gSW52YWxpZCBjb250b3VyIGNvbm5lY3Rpb24gY29uc3RyYWludCB0eXBlLiANCisjZGVmaW5lIEVSUl9DT05UT1VSX01BVENIX1NUUl9OT1RfQVBQTElDQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTczNyAvLyBJbiBvcmRlciB0byB1c2UgY29udG91ciBtYXRjaGluZywgeW91IG11c3QgcHJvdmlkZSBhIHRlbXBsYXRlIGltYWdlIHRoYXQgaGFzIGJlZW4gdHJhaW5lZCB3aXRoIElNQVEgTGVhcm4gQ29udG91ciBQYXR0ZXJuDQorI2RlZmluZSBFUlJfQ09OVE9VUl9DVVJWQVRVUkVfS0VSTkVMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTU3MzYgLy8gSW52YWxpZCBrZXJuZWwgd2lkdGggZm9yIGN1cnZhdHVyZSBjYWxjdWxhdGlvbi4gTXVzdCBiZSBhbiBvZGQgdmFsdWUgZ3JlYXRlciB0aGFuIDEuIA0KKyNkZWZpbmUgRVJSX0NPTlRPVVJfRVhUUkFDVF9TRUxFQ1RJT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1NzM1IC8vIEludmFsaWQgQ29udG91ciBTZWxlY3Rpb24gbWV0aG9kIGZvciBjb250b3VyIGV4dHJhY3Rpb24uIA0KKyNkZWZpbmUgRVJSX0NPTlRPVVJfRVhUUkFDVF9ESVJFQ1RJT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1NzM0IC8vIEludmFsaWQgU2VhcmNoIERpcmVjdGlvbiBmb3IgY29udG91ciBleHRyYWN0aW9uLiANCisjZGVmaW5lIEVSUl9DT05UT1VSX0VYVFJBQ1RfUk9JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTczMyAvLyBJbnZhbGlkIFJPSSBmb3IgY29udG91ciBleHRyYWN0aW9uLiBUaGUgUk9JIG11c3QgY29udGFpbiBhbiBhbm51bHVzLCByZWN0YW5nbGUgb3Igcm90YXRlZCByZWN0YW5nbGUuIA0KKyNkZWZpbmUgRVJSX0NPTlRPVVJfTk9fQ1VSVkVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1NzMyIC8vIE5vIGN1cnZlcyB3ZXJlIGZvdW5kIGluIHRoZSBpbWFnZS4NCisjZGVmaW5lIEVSUl9DT05UT1VSX0NPTVBBUkVfS0VSTkVMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTczMSAvLyBJbnZhbGlkIFNtb290aGluZyBLZXJuZWwgd2lkdGggZm9yIGNvbnRvdXIgY29tcGFyaXNvbi4gTXVzdCBiZSB6ZXJvIG9yIGFuIG9kZCBwb3NpdGl2ZSBpbnRlZ2VyLiANCisjZGVmaW5lIEVSUl9DT05UT1VSX0NPTVBBUkVfU0lOR0xFX0lNQUdFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTczMCAvLyBJZiBubyB0ZW1wbGF0ZSBpbWFnZSBpcyBwcm92aWRlZCwgdGhlIHRhcmdldCBpbWFnZSBtdXN0IGNvbnRhaW4gYm90aCBhIGNvbnRvdXIgd2l0aCBleHRyYWN0ZWQgcG9pbnRzIGFuZCBhIGZpdHRlZCBlcXVhdGlvbi4NCisjZGVmaW5lIEVSUl9DT05UT1VSX0lOVkFMSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTcyOSAvLyBJbnZhbGlkIGNvbnRvdXIgaW1hZ2UuDQorI2RlZmluZSBFUlJfSU5WQUxJRF8yRF9CQVJDT0RFX1NFQVJDSF9NT0RFICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTU3MjggLy8gTkkgVmlzaW9uIGRvZXMgbm90IHN1cHBvcnQgdGhlIHNlYXJjaCBtb2RlIHlvdSBwcm92aWRlZC4NCisjZGVmaW5lIEVSUl9VTlNVUFBPUlRFRF8yRF9CQVJDT0RFX1NFQVJDSF9NT0RFICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTcyNyAvLyBOSSBWaXNpb24gZG9lcyBub3Qgc3VwcG9ydCB0aGUgc2VhcmNoIG1vZGUgeW91IHByb3ZpZGVkIGZvciB0aGUgdHlwZSBvZiAyRCBiYXJjb2RlIGZvciB3aGljaCB5b3UgYXJlIHNlYXJjaGluZy4NCisjZGVmaW5lIEVSUl9NQVRDSEZBQ1RPUl9PQlNPTEVURSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTcyNiAvLyBtYXRjaEZhY3RvciBoYXMgYmVlbiBvYnNvbGV0ZWQuIEluc3RlYWQsIHNldCB0aGUgaW5pdGlhbE1hdGNoTGlzdExlbmd0aCBhbmQgbWF0Y2hMaXN0UmVkdWN0aW9uRmFjdG9yIGluIHRoZSBNYXRjaFBhdHRlcm5BZHZhbmNlZE9wdGlvbnMgc3RydWN0dXJlLg0KKyNkZWZpbmUgRVJSX0RBVEFfVkVSU0lPTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1NzI1IC8vIFRoZSBkYXRhIHdhcyBzdG9yZWQgd2l0aCBhIG5ld2VyIHZlcnNpb24gb2YgTkkgVmlzaW9uLiBVcGdyYWRlIHRvIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiBOSSBWaXNpb24gdG8gcmVhZCB0aGlzIGRhdGEuDQorI2RlZmluZSBFUlJfQ1VTVE9NREFUQV9JTlZBTElEX1NJWkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTU3MjQgLy8gVGhlIHNpemUgeW91IHNwZWNpZmllZCBpcyBvdXQgb2YgdGhlIHZhbGlkIHJhbmdlLg0KKyNkZWZpbmUgRVJSX0NVU1RPTURBVEFfS0VZX05PVF9GT1VORCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1NzIzIC8vIFRoZSBrZXkgeW91IHNwZWNpZmllZCBjYW5ub3QgYmUgZm91bmQgaW4gdGhlIGltYWdlLg0KKyNkZWZpbmUgRVJSX0NMQVNTSUZJRVJfQ0xBU1NJRllfSU1BR0VfV0lUSF9DVVNUT01fU0VTU0lPTiAgICAgICAgICAgIC0xMDc0Mzk1NzIyIC8vIEN1c3RvbSBjbGFzc2lmaWVyIHNlc3Npb25zIG9ubHkgY2xhc3NpZnkgZmVhdHVyZSB2ZWN0b3JzLiBUaGV5IGRvIG5vdCBzdXBwb3J0IGNsYXNzaWZ5aW5nIGltYWdlcy4NCisjZGVmaW5lIEVSUl9JTlZBTElEX0JJVF9ERVBUSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTcyMSAvLyBOSSBWaXNpb24gZG9lcyBub3Qgc3VwcG9ydCB0aGUgYml0IGRlcHRoIHlvdSBzdXBwbGllZCBmb3IgdGhlIGltYWdlIHlvdSBzdXBwbGllZC4NCisjZGVmaW5lIEVSUl9CQURfUk9JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTcyMCAvLyBJbnZhbGlkIFJPSS4NCisjZGVmaW5lIEVSUl9CQURfUk9JX0JPWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTcxOSAvLyBJbnZhbGlkIFJPSSBnbG9iYWwgcmVjdGFuZ2xlLg0KKyNkZWZpbmUgRVJSX0xBQl9WRVJTSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1NzE4IC8vIFRoZSB2ZXJzaW9uIG9mIExhYlZJRVcgb3IgQnJpZGdlVklFVyB5b3UgYXJlIHJ1bm5pbmcgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIG9wZXJhdGlvbi4NCisjZGVmaW5lIEVSUl9JTlZBTElEX1JBTkdFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTcxNyAvLyBUaGUgcmFuZ2UgeW91IHN1cHBsaWVkIGlzIGludmFsaWQuDQorI2RlZmluZSBFUlJfSU5WQUxJRF9TQ0FMSU5HX01FVEhPRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTU3MTYgLy8gTkkgVmlzaW9uIGRvZXMgbm90IHN1cHBvcnQgdGhlIHNjYWxpbmcgbWV0aG9kIHlvdSBwcm92aWRlZC4NCisjZGVmaW5lIEVSUl9JTlZBTElEX0NBTElCUkFUSU9OX1VOSVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTcxNSAvLyBOSSBWaXNpb24gZG9lcyBub3Qgc3VwcG9ydCB0aGUgY2FsaWJyYXRpb24gdW5pdCB5b3Ugc3VwcGxpZWQuDQorI2RlZmluZSBFUlJfSU5WQUxJRF9BWElTX09SSUVOVEFUSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTU3MTQgLy8gTkkgVmlzaW9uIGRvZXMgbm90IHN1cHBvcnQgdGhlIGF4aXMgb3JpZW50YXRpb24geW91IHN1cHBsaWVkLg0KKyNkZWZpbmUgRVJSX1ZBTFVFX05PVF9JTl9FTlVNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1NzEzIC8vIFZhbHVlIG5vdCBpbiBlbnVtZXJhdGlvbi4NCisjZGVmaW5lIEVSUl9XUk9OR19SRUdJT05fVFlQRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTcxMiAvLyBZb3Ugc2VsZWN0ZWQgYSByZWdpb24gdGhhdCBpcyBub3Qgb2YgdGhlIHJpZ2h0IHR5cGUuDQorI2RlZmluZSBFUlJfTk9UX0VOT1VHSF9SRUdJT05TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTU3MTEgLy8gWW91IHNwZWNpZmllZCBhIHZpZXdlciB0aGF0IGRvZXMgbm90IGNvbnRhaW4gZW5vdWdoIHJlZ2lvbnMuDQorI2RlZmluZSBFUlJfVE9PX01BTllfUEFSVElDTEVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTU3MTAgLy8gVGhlIGltYWdlIGhhcyB0b28gbWFueSBwYXJ0aWNsZXMgZm9yIHRoaXMgcHJvY2Vzcy4NCisjZGVmaW5lIEVSUl9BVklfVU5PUEVORURfU0VTU0lPTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTcwOSAvLyBUaGUgQVZJIHNlc3Npb24gaGFzIG5vdCBiZWVuIG9wZW5lZC4NCisjZGVmaW5lIEVSUl9BVklfUkVBRF9TRVNTSU9OX1JFUVVJUkVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTcwOCAvLyBUaGUgQVZJIHNlc3Npb24gaXMgYSB3cml0ZSBzZXNzaW9uLCBidXQgdGhpcyBvcGVyYXRpb24gcmVxdWlyZXMgYSByZWFkIHNlc3Npb24uDQorI2RlZmluZSBFUlJfQVZJX1dSSVRFX1NFU1NJT05fUkVRVUlSRUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTU3MDcgLy8gVGhlIEFWSSBzZXNzaW9uIGlzIGEgcmVhZCBzZXNzaW9uLCBidXQgdGhpcyBvcGVyYXRpb24gcmVxdWlyZXMgYSB3cml0ZSBzZXNzaW9uLg0KKyNkZWZpbmUgRVJSX0FWSV9TRVNTSU9OX0FMUkVBRFlfT1BFTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1NzA2IC8vIFRoaXMgQVZJIHNlc3Npb24gaXMgYWxyZWFkeSBvcGVuLiBZb3UgbXVzdCBjbG9zZSBpdCBiZWZvcmUgY2FsbGluZyB0aGUgQ3JlYXRlIG9yIE9wZW4gZnVuY3Rpb25zLg0KKyNkZWZpbmUgRVJSX0RBVEFfQ09SUlVQVEVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1NzA1IC8vIFRoZSBkYXRhIGlzIGNvcnJ1cHRlZCBhbmQgY2Fubm90IGJlIHJlYWQuDQorI2RlZmluZSBFUlJfSU5WQUxJRF9DT01QUkVTU0lPTl9UWVBFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTU3MDQgLy8gSW52YWxpZCBjb21wcmVzc2lvbiB0eXBlLg0KKyNkZWZpbmUgRVJSX0lOVkFMSURfVFlQRV9PRl9GTEFUVEVOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1NzAzIC8vIEludmFsaWQgdHlwZSBvZiBmbGF0dGVuLg0KKyNkZWZpbmUgRVJSX0lOVkFMSURfTEVOR1RIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1NzAyIC8vIFRoZSBsZW5ndGggb2YgdGhlIGVkZ2UgZGV0ZWN0aW9uIGxpbmUgbXVzdCBiZSBncmVhdGVyIHRoYW4gemVyby4NCisjZGVmaW5lIEVSUl9JTlZBTElEX01BVFJJWF9TSVpFX1JBTkdFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTcwMSAvLyBUaGUgbWF4aW11bSBEYXRhIE1hdHJpeCBiYXJjb2RlIHNpemUgbXVzdCBiZSBlcXVhbCB0byBvciBncmVhdGVyIHRoYW4gdGhlIG1pbmltdW0gRGF0YSBNYXRyaXggYmFyY29kZSBzaXplLg0KKyNkZWZpbmUgRVJSX1JFUVVJUkVTX1dJTjIwMDBfT1JfTkVXRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1NzAwIC8vIFRoZSBmdW5jdGlvbiByZXF1aXJlcyB0aGUgb3BlcmF0aW5nIHN5c3RlbSB0byBiZSBNaWNyb3NvZnQgV2luZG93cyAyMDAwIG9yIG5ld2VyLg0KKyNkZWZpbmUgRVJSX0lOVkFMSURfQ0FMSUJSQVRJT05fTUVUSE9EICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1NjYyIC8vIEludmFsaWQgY2FsaWJyYXRpb24gbWV0aG9kIHJlcXVlc3RlZA0KKyNkZWZpbmUgRVJSX0lOVkFMSURfT1BFUkFUSU9OX09OX0NPTVBBQ1RfQ0FMSUJSQVRJT05fQVRURU1QVEVEICAgICAgIC0xMDc0Mzk1NjYxIC8vIFRoaXMgY2FsaWJyYXRpb24gaXMgY29tcGFjdC4gUmUtTGVhcm5pbmcgY2FsaWJyYXRpb24gYW5kIHJldHJpZXZpbmcgdGh1bWJuYWlscyBhcmUgbm90IHBvc3NpYmxlIHdpdGggdGhpcyBjYWxpYnJhdGlvbg0KKyNkZWZpbmUgRVJSX0lOVkFMSURfUE9MWU5PTUlBTF9NT0RFTF9LX0NPVU5UICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1NjYwIC8vIEludmFsaWQgbnVtYmVyIG9mIEsgdmFsdWVzIA0KKyNkZWZpbmUgRVJSX0lOVkFMSURfRElTVE9SVElPTl9NT0RFTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1NjU5IC8vIEludmFsaWQgZGlzdG9ydGlvbiBtb2RlbCB0eXBlDQorI2RlZmluZSBFUlJfQ0FNRVJBX01PREVMX05PVF9BVkFJTEFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTU2NTggLy8gQ2FtZXJhIE1vZGVsIGlzIG5vdCBsZWFybmVkDQorI2RlZmluZSBFUlJfSU5WQUxJRF9USFVNQk5BSUxfSU5ERVggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTU2NTcgLy8gU3VwcGxpZWQgdGh1bWJuYWlsIGluZGV4IGlzIGludmFsaWQNCisjZGVmaW5lIEVSUl9TTU9PVEhfQ09OVE9VUlNfTVVTVF9CRV9TQU1FICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTY1NiAvLyBZb3UgbXVzdCBzcGVjaWZ5IHRoZSBzYW1lIHZhbHVlIGZvciB0aGUgc21vb3RoIGNvbnRvdXJzIGFkdmFuY2VkIG1hdGNoIG9wdGlvbiBmb3IgYWxsIHRlbXBsYXRlcyB5b3Ugd2FudCB0byBtYXRjaC4NCisjZGVmaW5lIEVSUl9FTkFCTEVfQ0FMSUJSQVRJT05fU1VQUE9SVF9NVVNUX0JFX1NBTUUgICAgICAgICAgICAgICAgICAtMTA3NDM5NTY1NSAvLyBZb3UgbXVzdCBzcGVjaWZ5IHRoZSBzYW1lIHZhbHVlIGZvciB0aGUgZW5hYmxlIGNhbGlicmF0aW9uIHN1cHBvcnQgYWR2YW5jZWQgbWF0Y2ggb3B0aW9uIGZvciBhbGwgdGVtcGxhdGVzIHlvdSB3YW50IHRvIG1hdGNoLg0KKyNkZWZpbmUgRVJSX0dSQURJTkdfSU5GT1JNQVRJT05fTk9UX0ZPVU5EICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1NjU0IC8vIFRoZSBzb3VyY2UgaW1hZ2UgZG9lcyBub3QgY29udGFpbiBncmFkaW5nIGluZm9ybWF0aW9uLiBZb3UgbXVzdCBwcmVwYXJlIHRoZSBzb3VyY2UgaW1hZ2UgZm9yIGdyYWRpbmcgd2hlbiByZWFkaW5nIHRoZSBEYXRhIE1hdHJpeCwgYW5kIHlvdSBjYW5ub3QgY2hhbmdlIHRoZSBjb250ZW50cyBvZiB0aGUgc291cmNlIGltYWdlIGJldHdlZW4gcmVhZGluZyBhbmQgZ3JhZGluZyB0aGUgRGF0YSBNYXRyaXguDQorI2RlZmluZSBFUlJfT1BFTklOR19ORVdFUl9NVUxUSVBMRV9HRU9NRVRSSUNfVEVNUExBVEUgICAgICAgICAgICAgICAgLTEwNzQzOTU2NTMgLy8gVGhlIG11bHRpcGxlIGdlb21ldHJpYyBtYXRjaGluZyB0ZW1wbGF0ZSB5b3UgdHJpZWQgdG8gb3BlbiB3YXMgY3JlYXRlZCB3aXRoIGEgbmV3ZXIgdmVyc2lvbiBvZiBOSSBWaXNpb24uIFVwZ3JhZGUgdG8gdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIE5JIFZpc2lvbiB0byByZWFkIHRoaXMgZmlsZS4NCisjZGVmaW5lIEVSUl9PUEVOSU5HX05FV0VSX0dFT01FVFJJQ19NQVRDSElOR19URU1QTEFURSAgICAgICAgICAgICAgICAtMTA3NDM5NTY1MiAvLyBUaGUgZ2VvbWV0cmljIG1hdGNoaW5nIHRlbXBsYXRlIHlvdSB0cmllZCB0byBvcGVuIHdhcyBjcmVhdGVkIHdpdGggYSBuZXdlciB2ZXJzaW9uIG9mIE5JIFZpc2lvbi4gVXBncmFkZSB0byB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgTkkgVmlzaW9uIHRvIHJlYWQgdGhpcyBmaWxlLg0KKyNkZWZpbmUgRVJSX0VER0VfRklMVEVSX1NJWkVfTVVTVF9CRV9TQU1FICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1NjUxIC8vIFlvdSBtdXN0IHNwZWNpZnkgdGhlIHNhbWUgZWRnZSBmaWx0ZXIgc2l6ZSBmb3IgYWxsIHRoZSB0ZW1wbGF0ZXMgeW91IHdhbnQgdG8gbWF0Y2guDQorI2RlZmluZSBFUlJfQ1VSVkVfRVhUUkFDVElPTl9NT0RFX01VU1RfQkVfU0FNRSAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTU2NTAgLy8gWW91IG11c3Qgc3BlY2lmeSB0aGUgc2FtZSBjdXJ2ZSBleHRyYWN0aW9uIG1vZGUgZm9yIGFsbCB0aGUgdGVtcGxhdGVzIHlvdSB3YW50IHRvIG1hdGNoLg0KKyNkZWZpbmUgRVJSX0lOVkFMSURfR0VPTUVUUklDX0ZFQVRVUkVfVFlQRSAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1NjQ5IC8vIFRoZSBnZW9tZXRyaWMgZmVhdHVyZSB0eXBlIHNwZWNpZmllZCBpcyBpbnZhbGlkLg0KKyNkZWZpbmUgRVJSX1RFTVBMQVRFX05PVF9MRUFSTkVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1NjQ4IC8vIFlvdSBzdXBwbGllZCBhIHRlbXBsYXRlIHRoYXQgd2FzIG5vdCBsZWFybmVkLg0KKyNkZWZpbmUgRVJSX0lOVkFMSURfTVVMVElQTEVfR0VPTUVUUklDX1RFTVBMQVRFICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1NjQ3IC8vIEludmFsaWQgbXVsdGlwbGUgZ2VvbWV0cmljIHRlbXBsYXRlLg0KKyNkZWZpbmUgRVJSX05PX1RFTVBMQVRFX1RPX0xFQVJOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1NjQ2IC8vIE5lZWQgYXQgbGVhc3Qgb25lIHRlbXBsYXRlIHRvIGxlYXJuLg0KKyNkZWZpbmUgRVJSX0lOVkFMSURfTlVNQkVSX09GX0xBQkVMUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1NjQ1IC8vIFlvdSBzdXBwbGllZCBhbiBpbnZhbGlkIG51bWJlciBvZiBsYWJlbHMuDQorI2RlZmluZSBFUlJfTEFCRUxfVE9PX0xPTkcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTU2NDQgLy8gTGFiZWxzIG11c3QgYmUgPD0gMjU1IGNoYXJhY3RlcnMuDQorI2RlZmluZSBFUlJfSU5WQUxJRF9OVU1CRVJfT0ZfTUFUQ0hfT1BUSU9OUyAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTU2NDMgLy8gWW91IHN1cHBsaWVkIGFuIGludmFsaWQgbnVtYmVyIG9mIG1hdGNoIG9wdGlvbnMuDQorI2RlZmluZSBFUlJfTEFCRUxfTk9UX0ZPVU5EICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTU2NDIgLy8gQ2Fubm90IGZpbmQgYSBsYWJlbCB0aGF0IG1hdGNoZXMgdGhlIG9uZSB5b3Ugc3BlY2lmaWVkLg0KKyNkZWZpbmUgRVJSX0RVUExJQ0FURV9MQUJFTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1NjQxIC8vIER1cGxpY2F0ZSBsYWJlbHMgYXJlIG5vdCBhbGxvd2VkLg0KKyNkZWZpbmUgRVJSX1RPT19NQU5ZX1pPTkVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1NjQwIC8vIFRoZSBudW1iZXIgb2Ygem9uZXMgZm91bmQgZXhjZWVkZWQgdGhlIGNhcGFjaXR5IG9mIHRoZSBhbGdvcml0aG0uDQorI2RlZmluZSBFUlJfSU5WQUxJRF9IQVRDSF9TVFlMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTU2MzkgLy8gVGhlIGhhdGNoIHN0eWxlIGZvciB0aGUgd2luZG93IGJhY2tncm91bmQgaXMgaW52YWxpZC4NCisjZGVmaW5lIEVSUl9JTlZBTElEX0ZJTExfU1RZTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTYzOCAvLyBUaGUgZmlsbCBzdHlsZSBmb3IgdGhlIHdpbmRvdyBiYWNrZ3JvdW5kIGlzIGludmFsaWQuDQorI2RlZmluZSBFUlJfSEFSRFdBUkVfRE9FU05UX1NVUFBPUlRfTk9OVEVBUklORyAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTU2MzcgLy8gWW91ciBoYXJkd2FyZSBpcyBub3Qgc3VwcG9ydGVkIGJ5IERpcmVjdFggYW5kIGNhbm5vdCBiZSBwdXQgaW50byBOb25UZWFyaW5nIG1vZGUuDQorI2RlZmluZSBFUlJfRElSRUNUWF9OT1RfRk9VTkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTU2MzYgLy8gRGlyZWN0WCBpcyByZXF1aXJlZCBmb3IgdGhpcyBmZWF0dXJlLiAgUGxlYXNlIGluc3RhbGwgdGhlIGxhdGVzdCB2ZXJzaW9uLi4NCisjZGVmaW5lIEVSUl9JTlZBTElEX1NIQVBFX0RFU0NSSVBUT1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTYzNSAvLyBUaGUgcGFzc2VkIHNoYXBlIGRlc2NyaXB0b3IgaXMgaW52YWxpZC4NCisjZGVmaW5lIEVSUl9JTlZBTElEX01BWF9NQVRDSF9PVkVSTEFQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTYzNCAvLyBJbnZhbGlkIG1heCBtYXRjaCBvdmVybGFwLiAgVmFsdWVzIG11c3QgYmUgYmV0d2VlbiAtMSBhbmQgMTAwLg0KKyNkZWZpbmUgRVJSX0lOVkFMSURfTUlOX01BVENIX1NFUEFSQVRJT05fU0NBTEUgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1NjMzIC8vIEludmFsaWQgbWluaW11bSBtYXRjaCBzZXBhcmF0aW9uIHNjYWxlLiAgVmFsdWVzIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIC0xLg0KKyNkZWZpbmUgRVJSX0lOVkFMSURfTUlOX01BVENIX1NFUEFSQVRJT05fQU5HTEUgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1NjMyIC8vIEludmFsaWQgbWluaW11bSBtYXRjaCBzZXBhcmF0aW9uIGFuZ2xlLiAgVmFsdWVzIG11c3QgYmUgYmV0d2VlbiAtMSBhbmQgMzYwLg0KKyNkZWZpbmUgRVJSX0lOVkFMSURfTUlOX01BVENIX1NFUEFSQVRJT05fRElTVEFOQ0UgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1NjMxIC8vIEludmFsaWQgbWluaW11bSBtYXRjaCBzZXBhcmF0aW9uIGRpc3RhbmNlLiAgVmFsdWVzIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIC0xLg0KKyNkZWZpbmUgRVJSX0lOVkFMSURfTUFYSU1VTV9GRUFUVVJFU19MRUFSTkVEICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1NjMwIC8vIEludmFsaWQgbWF4aW11bSBudW1iZXIgb2YgZmVhdHVyZXMgbGVhcm4uIFZhbHVlcyBtdXN0IGJlIGludGVnZXJzIGdyZWF0ZXIgdGhhbiB6ZXJvLg0KKyNkZWZpbmUgRVJSX0lOVkFMSURfTUFYSU1VTV9QSVhFTF9ESVNUQU5DRV9GUk9NX0xJTkUgICAgICAgICAgICAgICAgIC0xMDc0Mzk1NjI5IC8vIEludmFsaWQgbWF4aW11bSBwaXhlbCBkaXN0YW5jZSBmcm9tIGxpbmUuIFZhbHVlcyBtdXN0IGJlIHBvc2l0aXZlIHJlYWwgbnVtYmVycy4NCisjZGVmaW5lIEVSUl9JTlZBTElEX0dFT01FVFJJQ19NQVRDSElOR19URU1QTEFURSAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTYyOCAvLyBJbnZhbGlkIGdlb21ldHJpYyBtYXRjaGluZyB0ZW1wbGF0ZSBpbWFnZS4NCisjZGVmaW5lIEVSUl9OT1RfRU5PVUdIX1RFTVBMQVRFX0ZFQVRVUkVTXzEgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTYyNyAvLyBUaGUgdGVtcGxhdGUgZG9lcyBub3QgY29udGFpbiBlbm91Z2ggZmVhdHVyZXMgZm9yIGdlb21ldHJpYyBtYXRjaGluZy4NCisjZGVmaW5lIEVSUl9OT1RfRU5PVUdIX1RFTVBMQVRFX0ZFQVRVUkVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTYyNiAvLyBUaGUgdGVtcGxhdGUgZG9lcyBub3QgY29udGFpbiBlbm91Z2ggZmVhdHVyZXMgZm9yIGdlb21ldHJpYyBtYXRjaGluZy4NCisjZGVmaW5lIEVSUl9JTlZBTElEX01BVENIX0NPTlNUUkFJTlRfVFlQRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTYyNSAvLyBZb3Ugc3BlY2lmaWVkIGFuIGludmFsaWQgdmFsdWUgZm9yIHRoZSBtYXRjaCBjb25zdHJhaW50IHZhbHVlIG9mIHRoZSAgcmFuZ2Ugc2V0dGluZ3MuDQorI2RlZmluZSBFUlJfSU5WQUxJRF9PQ0NMVVNJT05fUkFOR0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTU2MjQgLy8gSW52YWxpZCBvY2NsdXNpb24gcmFuZ2UuIFZhbGlkIHZhbHVlcyBmb3IgdGhlIGJvdW5kcyByYW5nZSBmcm9tIDAgdG8gMTAwIGFuZCB0aGUgdXBwZXIgYm91bmQgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gdGhlIGxvd2VyIGJvdW5kLg0KKyNkZWZpbmUgRVJSX0lOVkFMSURfU0NBTEVfUkFOR0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1NjIzIC8vIEludmFsaWQgc2NhbGUgcmFuZ2UuIFZhbHVlcyBmb3IgdGhlIGxvd2VyIGJvdW5kIG11c3QgYmUgYSBwb3NpdGl2ZSByZWFsIG51bWJlcnMgYW5kIHRoZSB1cHBlciBib3VuZCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB0aGUgbG93ZXIgYm91bmQuDQorI2RlZmluZSBFUlJfSU5WQUxJRF9NQVRDSF9HRU9NRVRSSUNfUEFUVEVSTl9TRVRVUF9EQVRBICAgICAgICAgICAgICAgLTEwNzQzOTU2MjIgLy8gSW52YWxpZCBtYXRjaCBnZW9tZXRyaWMgcGF0dGVybiBzZXR1cCBkYXRhLg0KKyNkZWZpbmUgRVJSX0lOVkFMSURfTEVBUk5fR0VPTUVUUklDX1BBVFRFUk5fU0VUVVBfREFUQSAgICAgICAgICAgICAgIC0xMDc0Mzk1NjIxIC8vIEludmFsaWQgbGVhcm4gZ2VvbWV0cmljIHBhdHRlcm4gc2V0dXAgZGF0YS4NCisjZGVmaW5lIEVSUl9JTlZBTElEX0NVUlZFX0VYVFJBQ1RJT05fTU9ERSAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTYyMCAvLyBJbnZhbGlkIGN1cnZlIGV4dHJhY3Rpb24gbW9kZS4NCisjZGVmaW5lIEVSUl9UT09fTUFOWV9PQ0NMVVNJT05fUkFOR0VTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTYxOSAvLyBZb3UgY2FuIHNwZWNpZnkgb25seSBvbmUgb2NjbHVzaW9uIHJhbmdlLg0KKyNkZWZpbmUgRVJSX1RPT19NQU5ZX1NDQUxFX1JBTkdFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1NjE4IC8vIFlvdSBjYW4gc3BlY2lmeSBvbmx5IG9uZSBzY2FsZSByYW5nZS4NCisjZGVmaW5lIEVSUl9JTlZBTElEX05VTUJFUl9PRl9GRUFUVVJFU19SQU5HRSAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTYxNyAvLyBUaGUgbWluaW11bSBudW1iZXIgb2YgZmVhdHVyZXMgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIG1heGltdW0gbnVtYmVyIG9mIGZlYXR1cmVzLg0KKyNkZWZpbmUgRVJSX0lOVkFMSURfRURHRV9GSUxURVJfU0laRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1NjE2IC8vIEludmFsaWQgZWRnZSBmaWx0ZXIgc2l6ZS4NCisjZGVmaW5lIEVSUl9JTlZBTElEX01JTklNVU1fRkVBVFVSRV9TVFJFTkdUSCAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTYxNSAvLyBJbnZhbGlkIG1pbmltdW0gc3RyZW5ndGggZm9yIGZlYXR1cmVzLiBWYWx1ZXMgbXVzdCBiZSBwb3NpdGl2ZSByZWFsIG51bWJlcnMuDQorI2RlZmluZSBFUlJfSU5WQUxJRF9NSU5JTVVNX0ZFQVRVUkVfQVNQRUNUX1JBVElPICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTU2MTQgLy8gSW52YWxpZCBhc3BlY3QgcmF0aW8gZm9yIHJlY3Rhbmd1bGFyIGZlYXR1cmVzLiBWYWx1ZXMgbXVzdCBiZSBwb3NpdGl2ZSByZWFsIG51bWJlcnMgaW4gdGhlIHJhbmdlIDAuMDEgdG8gMS4wLg0KKyNkZWZpbmUgRVJSX0lOVkFMSURfTUlOSU1VTV9GRUFUVVJFX0xFTkdUSCAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1NjEzIC8vIEludmFsaWQgbWluaW11bSBsZW5ndGggZm9yIGxpbmVhciBmZWF0dXJlcy4gVmFsdWVzIG11c3QgYmUgaW50ZWdlcnMgZ3JlYXRlciB0aGFuIDAuDQorI2RlZmluZSBFUlJfSU5WQUxJRF9NSU5JTVVNX0ZFQVRVUkVfUkFESVVTICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTU2MTIgLy8gSW52YWxpZCBtaW5pbXVtIHJhZGl1cyBmb3IgY2lyY3VsYXIgZmVhdHVyZXMuIFZhbHVlcyBtdXN0IGJlIGludGVnZXJzIGdyZWF0ZXIgdGhhbiAwLg0KKyNkZWZpbmUgRVJSX0lOVkFMSURfTUlOSU1VTV9SRUNUQU5HTEVfRElNRU5TSU9OICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1NjExIC8vIEludmFsaWQgbWluaW11bSByZWN0YW5nbGUgZGltZW5zaW9uLiBWYWx1ZXMgbXVzdCBiZSBpbnRlZ2VycyBncmVhdGVyIHRoYW4gMC4NCisjZGVmaW5lIEVSUl9JTlZBTElEX0lOSVRJQUxfTUFUQ0hfTElTVF9MRU5HVEggICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTYxMCAvLyBJbnZhbGlkIGluaXRpYWwgbWF0Y2ggbGlzdCBsZW5ndGguIFZhbHVlcyBtdXN0IGJlIGludGVnZXJzIGdyZWF0ZXIgdGhhbiA1Lg0KKyNkZWZpbmUgRVJSX0lOVkFMSURfU1VCUElYRUxfVE9MRVJBTkNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1NjA5IC8vIEludmFsaWQgc3VicGl4ZWwgdG9sZXJhbmNlLiBWYWx1ZXMgbXVzdCBiZSBwb3NpdGl2ZSByZWFsIG51bWJlcnMuDQorI2RlZmluZSBFUlJfSU5WQUxJRF9TVUJQSVhFTF9JVEVSQVRJT05TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTU2MDggLy8gSW52YWxpZCBudW1iZXIgb2Ygc3VicGl4ZWwgaXRlcmF0aW9ucy4gVmFsdWVzIG11c3QgYmUgaW50ZWdlcnMgZ3JlYXRlciAxMC4NCisjZGVmaW5lIEVSUl9JTlZBTElEX01BWElNVU1fRkVBVFVSRVNfUEVSX01BVENIICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTYwNyAvLyBJbnZhbGlkIG1heGltdW0gbnVtYmVyIG9mIGZlYXR1cmVzIHVzZWQgcGVyIG1hdGNoLiBWYWx1ZXMgbXVzdCBiZSBpbnRlZ2VycyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gemVyby4NCisjZGVmaW5lIEVSUl9JTlZBTElEX01JTklNVU1fRkVBVFVSRVNfVE9fTUFUQ0ggICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTYwNiAvLyBJbnZhbGlkIG1pbmltdW0gbnVtYmVyIG9mIGZlYXR1cmVzIHVzZWQgZm9yIG1hdGNoaW5nLiBWYWx1ZXMgbXVzdCBiZSBpbnRlZ2VycyBncmVhdGVyIHRoYW4gemVyby4NCisjZGVmaW5lIEVSUl9JTlZBTElEX01BWElNVU1fRU5EX1BPSU5UX0dBUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTYwNSAvLyBJbnZhbGlkIG1heGltdW0gZW5kIHBvaW50IGdhcC4gVmFsaWQgdmFsdWVzIHJhbmdlIGZyb20gMCB0byAzMjc2Ny4NCisjZGVmaW5lIEVSUl9JTlZBTElEX0NPTFVNTl9TVEVQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTYwNCAvLyBJbnZhbGlkIGNvbHVtbiBzdGVwLiBWYWxpZCByYW5nZSBpcyAxIHRvIDI1NS4NCisjZGVmaW5lIEVSUl9JTlZBTElEX1JPV19TVEVQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTYwMyAvLyBJbnZhbGlkIHJvdyBzdGVwLiBWYWxpZCByYW5nZSBpcyAxIHRvIDI1NS4NCisjZGVmaW5lIEVSUl9JTlZBTElEX01JTklNVU1fQ1VSVkVfTEVOR1RIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTYwMiAvLyBJbnZhbGlkIG1pbmltdW0gbGVuZ3RoLiBWYWxpZCB2YWx1ZXMgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gemVyby4NCisjZGVmaW5lIEVSUl9JTlZBTElEX0VER0VfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTYwMSAvLyBJbnZhbGlkIGVkZ2UgdGhyZXNob2xkLiBWYWxpZCB2YWx1ZXMgcmFuZ2UgZnJvbSAxIHRvIDM2MC4NCisjZGVmaW5lIEVSUl9JTkZPX05PVF9GT1VORCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTYwMCAvLyBZb3UgbXVzdCBwcm92aWRlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzdWJpbWFnZSB3aXRoaW4gdGhlIGJyb3dzZXIuDQorI2RlZmluZSBFUlJfTklPQ1JfSU5WQUxJRF9BQ0NFUFRBTkNFX0xFVkVMICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTU1OTggLy8gVGhlIGFjY2VwdGFuY2UgbGV2ZWwgaXMgb3V0c2lkZSB0aGUgdmFsaWQgcmFuZ2Ugb2YgIDAgdG8gMTAwMC4NCisjZGVmaW5lIEVSUl9OSU9DUl9OT1RfQV9WQUxJRF9TRVNTSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTU5NyAvLyBOb3QgYSB2YWxpZCBPQ1Igc2Vzc2lvbi4NCisjZGVmaW5lIEVSUl9OSU9DUl9JTlZBTElEX0NIQVJBQ1RFUl9TSVpFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTU5NiAvLyBJbnZhbGlkIGNoYXJhY3RlciBzaXplLiBDaGFyYWN0ZXIgc2l6ZSBtdXN0IGJlID49IDEuDQorI2RlZmluZSBFUlJfTklPQ1JfSU5WQUxJRF9USFJFU0hPTERfTU9ERSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTU1OTUgLy8gSW52YWxpZCB0aHJlc2hvbGQgbW9kZSB2YWx1ZS4NCisjZGVmaW5lIEVSUl9OSU9DUl9JTlZBTElEX1NVQlNUSVRVVElPTl9DSEFSQUNURVIgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTU5NCAvLyBJbnZhbGlkIHN1YnN0aXR1dGlvbiBjaGFyYWN0ZXIuIFZhbGlkIHN1YnN0aXR1dGlvbiBjaGFyYWN0ZXJzIGFyZSBBU0NJSSB2YWx1ZXMgdGhhdCByYW5nZSBmcm9tIDEgdG8gMjU0Lg0KKyNkZWZpbmUgRVJSX05JT0NSX0lOVkFMSURfTlVNQkVSX09GX0JMT0NLUyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1NTkzIC8vIEludmFsaWQgbnVtYmVyIG9mIGJsb2Nrcy4gTnVtYmVyIG9mIGJsb2NrcyBtdXN0IGJlID49IDQgYW5kIDw9IDUwLg0KKyNkZWZpbmUgRVJSX05JT0NSX0lOVkFMSURfUkVBRF9TVFJBVEVHWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1NTkyIC8vIEludmFsaWQgcmVhZCBzdHJhdGVneS4NCisjZGVmaW5lIEVSUl9OSU9DUl9JTlZBTElEX0NIQVJBQ1RFUl9JTkRFWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTU5MSAvLyBJbnZhbGlkIGNoYXJhY3RlciBpbmRleC4NCisjZGVmaW5lIEVSUl9OSU9DUl9JTlZBTElEX05VTUJFUl9PRl9WQUxJRF9DSEFSQUNURVJfUE9TSVRJT05TICAgICAgICAtMTA3NDM5NTU5MCAvLyBJbnZhbGlkIG51bWJlciBvZiBjaGFyYWN0ZXIgcG9zaXRpb25zLiBWYWxpZCB2YWx1ZXMgcmFuZ2UgZnJvbSAwIHRvIDI1NS4NCisjZGVmaW5lIEVSUl9OSU9DUl9JTlZBTElEX0xPV19USFJFU0hPTERfVkFMVUUgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTU4OSAvLyBJbnZhbGlkIGxvdyB0aHJlc2hvbGQgdmFsdWUuIFZhbGlkIHRocmVzaG9sZCB2YWx1ZXMgcmFuZ2UgZnJvbSAwIHRvIDI1NS4NCisjZGVmaW5lIEVSUl9OSU9DUl9JTlZBTElEX0hJR0hfVEhSRVNIT0xEX1ZBTFVFICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTU4OCAvLyBJbnZhbGlkIGhpZ2ggdGhyZXNob2xkIHZhbHVlLiBWYWxpZCB0aHJlc2hvbGQgdmFsdWVzIHJhbmdlIGZyb20gMCB0byAyNTUuDQorI2RlZmluZSBFUlJfTklPQ1JfSU5WQUxJRF9USFJFU0hPTERfUkFOR0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTU1ODcgLy8gVGhlIGxvdyB0aHJlc2hvbGQgbXVzdCBiZSBsZXNzIHRoYW4gdGhlIGhpZ2ggdGhyZXNob2xkLg0KKyNkZWZpbmUgRVJSX05JT0NSX0lOVkFMSURfTE9XRVJfVEhSRVNIT0xEX0xJTUlUICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1NTg2IC8vIEludmFsaWQgbG93ZXIgdGhyZXNob2xkIGxpbWl0LiBWYWxpZCBsb3dlciB0aHJlc2hvbGQgbGltaXRzIHJhbmdlIGZyb20gMCB0byAyNTUuDQorI2RlZmluZSBFUlJfTklPQ1JfSU5WQUxJRF9VUFBFUl9USFJFU0hPTERfTElNSVQgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTU1ODUgLy8gSW52YWxpZCB1cHBlciB0aHJlc2hvbGQgbGltaXQuIFZhbGlkIHVwcGVyIHRocmVzaG9sZCBsaW1pdHMgcmFuZ2UgZnJvbSAwIHRvIDI1NS4NCisjZGVmaW5lIEVSUl9OSU9DUl9JTlZBTElEX1RIUkVTSE9MRF9MSU1JVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTU4NCAvLyBUaGUgbG93ZXIgdGhyZXNob2xkIGxpbWl0IG11c3QgYmUgbGVzcyB0aGFuIHRoZSB1cHBlciB0aHJlc2hvbGQgbGltaXQuDQorI2RlZmluZSBFUlJfTklPQ1JfSU5WQUxJRF9NSU5fQ0hBUl9TUEFDSU5HICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTU1ODMgLy8gSW52YWxpZCBtaW5pbXVtIGNoYXJhY3RlciBzcGFjaW5nIHZhbHVlLiBDaGFyYWN0ZXIgc3BhY2luZyBtdXN0IGJlID49IDEgcGl4ZWwuDQorI2RlZmluZSBFUlJfTklPQ1JfSU5WQUxJRF9NQVhfSE9SSVpfRUxFTUVOVF9TUEFDSU5HICAgICAgICAgICAgICAgICAgLTEwNzQzOTU1ODIgLy8gSW52YWxpZCBtYXhpbXVtIGhvcml6b250YWwgZWxlbWVudCBzcGFjaW5nIHZhbHVlLiBNYXhpbXVtIGhvcml6b250YWwgZWxlbWVudCBzcGFjaW5nIG11c3QgYmUgPj0gMC4NCisjZGVmaW5lIEVSUl9OSU9DUl9JTlZBTElEX01BWF9WRVJUX0VMRU1FTlRfU1BBQ0lORyAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTU4MSAvLyBJbnZhbGlkIG1heGltdW0gdmVydGljYWwgZWxlbWVudCBzcGFjaW5nIHZhbHVlLiBNYXhpbXVtIHZlcnRpY2FsIGVsZW1lbnQgc3BhY2luZyBtdXN0IGJlID49IDAuDQorI2RlZmluZSBFUlJfTklPQ1JfSU5WQUxJRF9NSU5fQk9VTkRJTkdfUkVDVF9XSURUSCAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTU1ODAgLy8gSW52YWxpZCBtaW5pbXVtIGJvdW5kaW5nIHJlY3RhbmdsZSB3aWR0aC4gTWluaW11bSBib3VuZGluZyByZWN0YW5nbGUgd2lkdGggbXVzdCBiZSA+PSAxLg0KKyNkZWZpbmUgRVJSX05JT0NSX0lOVkFMSURfQVNQRUNUX1JBVElPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1NTc5IC8vIEludmFsaWQgYXNwZWN0IHJhdGlvIHZhbHVlLiBUaGUgYXNwZWN0IHJhdGlvIG11c3QgYmUgemVybyBvciA+PSAxMDAuDQorI2RlZmluZSBFUlJfTklPQ1JfSU5WQUxJRF9DSEFSQUNURVJfU0VUX0ZJTEUgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTU1NzggLy8gSW52YWxpZCBvciBjb3JydXB0IGNoYXJhY3RlciBzZXQgZmlsZS4NCisjZGVmaW5lIEVSUl9OSU9DUl9DSEFSQUNURVJfVkFMVUVfQ0FOTk9UX0JFX0VNUFRZU1RSSU5HICAgICAgICAgICAgICAtMTA3NDM5NTU3NyAvLyBUaGUgY2hhcmFjdGVyIHZhbHVlIG11c3Qgbm90IGJlIGFuIGVtcHR5IHN0cmluZy4NCisjZGVmaW5lIEVSUl9OSU9DUl9DSEFSQUNURVJfVkFMVUVfVE9PX0xPTkcgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTU3NiAvLyBDaGFyYWN0ZXIgdmFsdWVzIG11c3QgYmUgPD0yNTUgY2hhcmFjdGVycy4NCisjZGVmaW5lIEVSUl9OSU9DUl9JTlZBTElEX05VTUJFUl9PRl9FUk9TSU9OUyAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTU3NSAvLyBJbnZhbGlkIG51bWJlciBvZiBlcm9zaW9ucy4gVGhlIG51bWJlciBvZiBlcm9zaW9ucyBtdXN0IGJlID49IDAuDQorI2RlZmluZSBFUlJfTklPQ1JfQ0hBUkFDVEVSX1NFVF9ERVNDUklQVElPTl9UT09fTE9ORyAgICAgICAgICAgICAgICAgLTEwNzQzOTU1NzQgLy8gVGhlIGNoYXJhY3RlciBzZXQgZGVzY3JpcHRpb24gbXVzdCBiZSA8PTI1NSBjaGFyYWN0ZXJzLg0KKyNkZWZpbmUgRVJSX05JT0NSX0lOVkFMSURfQ0hBUkFDVEVSX1NFVF9GSUxFX1ZFUlNJT04gICAgICAgICAgICAgICAgIC0xMDc0Mzk1NTczIC8vIFRoZSBjaGFyYWN0ZXIgc2V0IGZpbGUgd2FzIGNyZWF0ZWQgYnkgYSBuZXdlciB2ZXJzaW9uIG9mIE5JIFZpc2lvbi4gVXBncmFkZSB0byB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgTkkgVmlzaW9uIHRvIHJlYWQgdGhlIGNoYXJhY3RlciBzZXQgZmlsZS4NCisjZGVmaW5lIEVSUl9OSU9DUl9JTlRFR0VSX1ZBTFVFX0ZPUl9TVFJJTkdfQVRUUklCVVRFICAgICAgICAgICAgICAgICAtMTA3NDM5NTU3MiAvLyBZb3UgbXVzdCBzcGVjaWZ5IGNoYXJhY3RlcnMgZm9yIGEgc3RyaW5nLiBBIHN0cmluZyBjYW5ub3QgY29udGFpbiBpbnRlZ2Vycy4NCisjZGVmaW5lIEVSUl9OSU9DUl9HRVRfT05MWV9BVFRSSUJVVEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTU3MSAvLyBUaGlzIGF0dHJpYnV0ZSBpcyByZWFkLW9ubHkuDQorI2RlZmluZSBFUlJfTklPQ1JfSU5URUdFUl9WQUxVRV9GT1JfQk9PTEVBTl9BVFRSSUJVVEUgICAgICAgICAgICAgICAgLTEwNzQzOTU1NzAgLy8gVGhpcyBhdHRyaWJ1dGUgcmVxdWlyZXMgYSBCb29sZWFuIHZhbHVlLg0KKyNkZWZpbmUgRVJSX05JT0NSX0lOVkFMSURfQVRUUklCVVRFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1NTY5IC8vIEludmFsaWQgYXR0cmlidXRlLg0KKyNkZWZpbmUgRVJSX05JT0NSX1NUUklOR19WQUxVRV9GT1JfSU5URUdFUl9BVFRSSUJVVEUgICAgICAgICAgICAgICAgIC0xMDc0Mzk1NTY4IC8vIFRoaXMgYXR0cmlidXRlIHJlcXVpcmVzIGludGVnZXIgdmFsdWVzLg0KKyNkZWZpbmUgRVJSX05JT0NSX1NUUklOR19WQUxVRV9GT1JfQk9PTEVBTl9BVFRSSUJVVEUgICAgICAgICAgICAgICAgIC0xMDc0Mzk1NTY3IC8vIFN0cmluZyB2YWx1ZXMgYXJlIGludmFsaWQgZm9yIHRoaXMgYXR0cmlidXRlLiBFbnRlciBhIGJvb2xlYW4gdmFsdWUuDQorI2RlZmluZSBFUlJfTklPQ1JfQk9PTEVBTl9WQUxVRV9GT1JfSU5URUdFUl9BVFRSSUJVVEUgICAgICAgICAgICAgICAgLTEwNzQzOTU1NjYgLy8gQm9vbGVhbiB2YWx1ZXMgYXJlIG5vdCB2YWxpZCBmb3IgdGhpcyBhdHRyaWJ1dGUuIEVudGVyIGFuIGludGVnZXIgdmFsdWUuDQorI2RlZmluZSBFUlJfTklPQ1JfTVVTVF9CRV9TSU5HTEVfQ0hBUkFDVEVSICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTU1NjUgLy8gUmVxdWlyZXMgYSBzaW5nbGUtY2hhcmFjdGVyIHN0cmluZy4NCisjZGVmaW5lIEVSUl9OSU9DUl9JTlZBTElEX1BSRURFRklORURfQ0hBUkFDVEVSICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTU2NCAvLyBJbnZhbGlkIHByZWRlZmluZWQgY2hhcmFjdGVyIHZhbHVlLg0KKyNkZWZpbmUgRVJSX05JT0NSX1VOTElDRU5TRUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1NTYzIC8vIFRoaXMgY29weSBvZiBOSSBPQ1IgaXMgdW5saWNlbnNlZC4NCisjZGVmaW5lIEVSUl9OSU9DUl9CT09MRUFOX1ZBTFVFX0ZPUl9TVFJJTkdfQVRUUklCVVRFICAgICAgICAgICAgICAgICAtMTA3NDM5NTU2MiAvLyBTdHJpbmcgdmFsdWVzIGFyZSBub3QgdmFsaWQgZm9yIHRoaXMgYXR0cmlidXRlLiBFbnRlciBhIEJvb2xlYW4gdmFsdWUuDQorI2RlZmluZSBFUlJfTklPQ1JfSU5WQUxJRF9OVU1CRVJfT0ZfQ0hBUkFDVEVSUyAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTU1NjEgLy8gVGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGluIHRoZSBjaGFyYWN0ZXIgdmFsdWUgbXVzdCBtYXRjaCB0aGUgbnVtYmVyIG9mIG9iamVjdHMgaW4gdGhlIGltYWdlLg0KKyNkZWZpbmUgRVJSX05JT0NSX0lOVkFMSURfT0JKRUNUX0lOREVYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1NTYwIC8vIEludmFsaWQgb2JqZWN0IGluZGV4Lg0KKyNkZWZpbmUgRVJSX05JT0NSX0lOVkFMSURfUkVBRF9PUFRJT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1NTU5IC8vIEludmFsaWQgcmVhZCBvcHRpb24uDQorI2RlZmluZSBFUlJfTklPQ1JfSU5WQUxJRF9DSEFSQUNURVJfU0laRV9SQU5HRSAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTU1NTggLy8gVGhlIG1pbmltdW0gY2hhcmFjdGVyIHNpemUgbXVzdCBiZSBsZXNzIHRoYW4gdGhlIG1heGltdW0gY2hhcmFjdGVyIHNpemUuDQorI2RlZmluZSBFUlJfTklPQ1JfSU5WQUxJRF9CT1VORElOR19SRUNUX1dJRFRIX1JBTkdFICAgICAgICAgICAgICAgICAgLTEwNzQzOTU1NTcgLy8gVGhlIG1pbmltdW0gY2hhcmFjdGVyIGJvdW5kaW5nIHJlY3RhbmdsZSB3aWR0aCBtdXN0IGJlIGxlc3MgdGhhbiB0aGUgbWF4aW11bSBjaGFyYWN0ZXIgYm91bmRpbmcgcmVjdGFuZ2xlIHdpZHRoLg0KKyNkZWZpbmUgRVJSX05JT0NSX0lOVkFMSURfQk9VTkRJTkdfUkVDVF9IRUlHSFRfUkFOR0UgICAgICAgICAgICAgICAgIC0xMDc0Mzk1NTU2IC8vIFRoZSBtaW5pbXVtIGNoYXJhY3RlciBib3VuZGluZyByZWN0YW5nbGUgaGVpZ2h0IG11c3QgYmUgbGVzcyB0aGFuIHRoZSBtYXhpbXVtIGNoYXJhY3RlciBib3VuZGluZyByZWN0YW5nbGUgaGVpZ2h0Lg0KKyNkZWZpbmUgRVJSX05JT0NSX0lOVkFMSURfU1BBQ0lOR19SQU5HRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1NTU1IC8vIFRoZSBtYXhpbXVtIGhvcml6b250YWwgZWxlbWVudCBzcGFjaW5nIHZhbHVlIG11c3Qgbm90IGV4Y2VlZCB0aGUgbWluaW11bSBjaGFyYWN0ZXIgc3BhY2luZyB2YWx1ZS4NCisjZGVmaW5lIEVSUl9OSU9DUl9JTlZBTElEX1JFQURfUkVTT0xVVElPTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTU1NCAvLyBJbnZhbGlkIHJlYWQgcmVzb2x1dGlvbi4NCisjZGVmaW5lIEVSUl9OSU9DUl9JTlZBTElEX01JTl9CT1VORElOR19SRUNUX0hFSUdIVCAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTU1MyAvLyBJbnZhbGlkIG1pbmltdW0gYm91bmRpbmcgcmVjdGFuZ2xlIGhlaWdodC4gVGhlIG1pbmltdW0gYm91bmRpbmcgcmVjdGFuZ2xlIGhlaWdodCBtdXN0IGJlID49IDEuDQorI2RlZmluZSBFUlJfTklPQ1JfTk9UX0FfVkFMSURfQ0hBUkFDVEVSX1NFVCAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTU1NTIgLy8gTm90IGEgdmFsaWQgY2hhcmFjdGVyIHNldC4NCisjZGVmaW5lIEVSUl9OSU9DUl9SRU5BTUVfUkVGQ0hBUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTU1MSAvLyBBIHRyYWluZWQgT0NSIGNoYXJhY3RlciBjYW5ub3QgYmUgcmVuYW1lZCB3aGlsZSBpdCBpcyBhIHJlZmVyZW5jZSBjaGFyYWN0ZXIuDQorI2RlZmluZSBFUlJfTklPQ1JfSU5WQUxJRF9DSEFSQUNURVJfVkFMVUUgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTU1NTAgLy8gQSBjaGFyYWN0ZXIgY2Fubm90IGhhdmUgYW4gQVNDSUkgdmFsdWUgb2YgMjU1Lg0KKyNkZWZpbmUgRVJSX05JT0NSX0lOVkFMSURfTlVNQkVSX09GX09CSkVDVFNfVE9fVkVSSUZZICAgICAgICAgICAgICAgIC0xMDc0Mzk1NTQ5IC8vIFRoZSBudW1iZXIgb2Ygb2JqZWN0cyBmb3VuZCBkb2VzIG5vdCBtYXRjaCB0aGUgbnVtYmVyIG9mIGV4cGVjdGVkIGNoYXJhY3RlcnMgb3IgcGF0dGVybnMgdG8gdmVyaWZ5Lg0KKyNkZWZpbmUgRVJSX0lOVkFMSURfU1RFUkVPX0JMT0NLTUFUQ0hJTkdfUFJFRklMVEVSX0NBUCAgICAgICAgICAgICAgIC0xMDc0Mzk1NDIxIC8vIFRoZSBzcGVjaWZpZWQgdmFsdWUgZm9yIHRoZSBmaWx0ZXIgY2FwIGZvciBibG9jayBtYXRjaGluZyBpcyBpbnZhbGlkLg0KKyNkZWZpbmUgRVJSX0lOVkFMSURfU1RFUkVPX0JMT0NLTUFUQ0hJTkdfUFJFRklMVEVSX1NJWkUgICAgICAgICAgICAgIC0xMDc0Mzk1NDIwIC8vIFRoZSBzcGVjaWZpZWQgcHJlZmlsdGVyIHNpemUgZm9yIGJsb2NrIG1hdGNoaW5nIGlzIGludmFsaWQuDQorI2RlZmluZSBFUlJfSU5WQUxJRF9TVEVSRU9fQkxPQ0tNQVRDSElOR19QUkVGSUxURVJfVFlQRSAgICAgICAgICAgICAgLTEwNzQzOTU0MTkgLy8gVGhlIHNwZWNpZmllZCBwcmVmaWx0ZXIgdHlwZSBmb3IgYmxvY2sgbWF0Y2hpbmcgaXMgaW52YWxpZC4NCisjZGVmaW5lIEVSUl9JTlZBTElEX1NURVJFT19CTE9DS01BVENISU5HX05VTURJU1BBUklUSUVTICAgICAgICAgICAgICAtMTA3NDM5NTQxOCAvLyBUaGUgc3BlY2lmZWQgdmFsdWUgZm9yIG51bWJlciBvZiBkaXNwYXJpdGllcyBpcyBpbnZhbGlkLg0KKyNkZWZpbmUgRVJSX0lOVkFMSURfU1RFUkVPX0JMT0NLTUFUQ0hJTkdfV0lORE9XX1NJWkUgICAgICAgICAgICAgICAgIC0xMDc0Mzk1NDE3IC8vIFRoZSBzcGVjaWZpZWQgd2luZG93IHNpemUgZm9yIGJsb2NrIG1hdGNoaW5nIGlzIGludmFsaWQuDQorI2RlZmluZSBFUlJfM0RWSVNJT05fSU5WQUxJRF9TRVNTSU9OX1RZUEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTU0MTYgLy8gVGhpcyAzRCB2aXNpb24gZnVuY3Rpb24gY2Fubm90IGJlIGNhbGxlZCBvbiB0aGlzIHR5cGUgb2YgM2QgdmlzaW9uIHNlc3Npb24uDQorI2RlZmluZSBFUlJfVE9PX01BTllfM0RWSVNJT05fU0VTU0lPTlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTU0MTUgLy8gVGhlcmUgYXJlIHRvbyBtYW55IDNEIHZpc2lvbiBzZXNzaW9ucyBvcGVuLiAgWW91IG11c3QgY2xvc2UgYSBzZXNzaW9uIGJlZm9yZSB5b3UgY2FuIG9wZW4gYW5vdGhlciBvbmUuDQorI2RlZmluZSBFUlJfT1BFTklOR19ORVdFUl8zRFZJU0lPTl9TRVNTSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTU0MTQgLy8gVGhlIDNEIHZpc2lvbiBzZXNzaW9uIHlvdSB0cmllZCB0byBvcGVuIHdhcyBjcmVhdGVkIHdpdGggYSBuZXdlciB2ZXJzaW9uIG9mIE5JIFZpc2lvbi4gVXBncmFkZSB0byB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgTkkgVmlzaW9uIHRvIHJlYWQgdGhpcyBmaWxlLg0KKyNkZWZpbmUgRVJSX0lOVkFMSURfU1RFUkVPX0JMT0NLTUFUQ0hJTkdfRklMVEVSVFlQRSAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1NDEzIC8vIFlvdSBoYXZlIHNwZWNpZmllZCBhbiBpbnZhbGlkIGZpbHRlciB0eXBlIGZvciBibG9jayBtYXRjaGluZy4NCisjZGVmaW5lIEVSUl9JTlZBTElEX1NURVJFT19DQU1FUkFfUE9TSVRJT04gICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTQxMiAvLyBZb3UgaGF2ZSByZXF1ZXN0ZWQgcmVzdWx0cyBhdCBhbiBpbnZhbGlkIGNhbWVyYSBwb3NpdGlvbiBpbiB0aGUgc3RlcmVvIHNldHVwLg0KKyNkZWZpbmUgRVJSX0lOVkFMSURfM0RWSVNJT05fU0VTU0lPTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1NDExIC8vIE5vdCBhIHZhbGlkIDNEIFZpc2lvbiBzZXNzaW9uLg0KKyNkZWZpbmUgRVJSX0lOVkFMSURfSUNPTlNfUEVSX0xJTkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1NDEwIC8vIE5JIFZpc2lvbiBkb2VzIG5vdCBzdXBwb3J0IGxlc3MgdGhhbiBvbmUgaWNvbiBwZXIgbGluZS4NCisjZGVmaW5lIEVSUl9JTlZBTElEX1NVQlBJWEVMX0RJVklTSU9OUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTQwOSAvLyBJbnZhbGlkIHN1YnBpeGVsIGRpdmlzaW9ucy4NCisjZGVmaW5lIEVSUl9JTlZBTElEX0RFVEVDVElPTl9NT0RFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTQwOCAvLyBJbnZhbGlkIGRldGVjdGlvbiBtb2RlLg0KKyNkZWZpbmUgRVJSX0lOVkFMSURfQ09OVFJBU1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1NDA3IC8vIEludmFsaWQgY29udHJhc3QgdmFsdWUuIFZhbGlkIGNvbnRyYXN0IHZhbHVlcyByYW5nZSBmcm9tIDAgdG8gMjU1Lg0KKyNkZWZpbmUgRVJSX0NPT1JEU1lTX05PVF9GT1VORCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1NDA2IC8vIFRoZSBjb29yZGluYXRlIHN5c3RlbSBjb3VsZCBub3QgYmUgZm91bmQgb24gdGhpcyBpbWFnZS4NCisjZGVmaW5lIEVSUl9JTlZBTElEX1RFWFRPUklFTlRBVElPTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTQwNSAvLyBOSSBWaXNpb24gZG9lcyBub3Qgc3VwcG9ydCB0aGUgdGV4dCBvcmllbnRhdGlvbiB2YWx1ZSB5b3Ugc3VwcGxpZWQuDQorI2RlZmluZSBFUlJfSU5WQUxJRF9JTlRFUlBPTEFUSU9OTUVUSE9EX0ZPUl9VTldSQVAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTU0MDQgLy8gVW53cmFwSW1hZ2UgZG9lcyBub3Qgc3VwcG9ydCB0aGUgaW50ZXJwb2xhdGlvbiBtZXRob2QgdmFsdWUgeW91IHN1cHBsaWVkLiAgVmFsaWQgaW50ZXJwb2xhdGlvbiBtZXRob2RzIGFyZSB6ZXJvIG9yZGVyIGFuZCBiaWxpbmVhci4gDQorI2RlZmluZSBFUlJfRVhUUkFJTkZPX1ZFUlNJT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTU0MDMgLy8gVGhlIGltYWdlIHdhcyBjcmVhdGVkIGluIGEgbmV3ZXIgdmVyc2lvbiBvZiBOSSBWaXNpb24uIFVwZ3JhZGUgdG8gdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIE5JIFZpc2lvbiB0byB1c2UgdGhpcyBpbWFnZS4NCisjZGVmaW5lIEVSUl9JTlZBTElEX01BWFBPSU5UUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTQwMiAvLyBUaGUgZnVuY3Rpb24gZG9lcyBub3Qgc3VwcG9ydCB0aGUgbWF4aW11bSBudW1iZXIgb2YgcG9pbnRzIHRoYXQgeW91IHNwZWNpZmllZC4NCisjZGVmaW5lIEVSUl9JTlZBTElEX01BVENIRkFDVE9SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTQwMSAvLyBUaGUgZnVuY3Rpb24gZG9lcyBub3Qgc3VwcG9ydCB0aGUgbWF0Y2hGYWN0b3IgdGhhdCB5b3Ugc3BlY2lmaWVkLg0KKyNkZWZpbmUgRVJSX01VTFRJQ09SRV9PUEVSQVRJT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1NDAwIC8vIFRoZSBvcGVyYXRpb24geW91IGhhdmUgZ2l2ZW4gTXVsdGljb3JlIE9wdGlvbnMgaXMgaW52YWxpZC4gUGxlYXNlIHNlZSB0aGUgYXZhaWxhYmxlIGVudW1lcmF0aW9uIHZhbHVlcyBmb3IgTXVsdGljb3JlIE9wZXJhdGlvbi4NCisjZGVmaW5lIEVSUl9NVUxUSUNPUkVfSU5WQUxJRF9BUkdVTUVOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTM5OSAvLyBZb3UgaGF2ZSBnaXZlbiBNdWx0aWNvcmUgT3B0aW9ucyBhbiBpbnZhbGlkIGFyZ3VtZW50Lg0KKyNkZWZpbmUgRVJSX0NPTVBMRVhfSU1BR0VfUkVRVUlSRUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1Mzk3IC8vIEEgY29tcGxleCBpbWFnZSBpcyByZXF1aXJlZC4NCisjZGVmaW5lIEVSUl9DT0xPUl9JTUFHRV9SRVFVSVJFRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTM5NSAvLyBUaGUgaW5wdXQgaW1hZ2UgbXVzdCBiZSBhIGNvbG9yIGltYWdlLg0KKyNkZWZpbmUgRVJSX0NPTE9SX1NQRUNUUlVNX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1Mzk0IC8vIFRoZSBjb2xvciBtYXNrIHJlbW92ZXMgdG9vIG11Y2ggY29sb3IgaW5mb3JtYXRpb24uDQorI2RlZmluZSBFUlJfQ09MT1JfVEVNUExBVEVfSU1BR0VfVE9PX1NNQUxMICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTUzOTMgLy8gVGhlIGNvbG9yIHRlbXBsYXRlIGltYWdlIGlzIHRvbyBzbWFsbC4NCisjZGVmaW5lIEVSUl9DT0xPUl9URU1QTEFURV9JTUFHRV9UT09fTEFSR0UgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTM5MiAvLyBUaGUgY29sb3IgdGVtcGxhdGUgaW1hZ2UgaXMgdG9vIGxhcmdlLg0KKyNkZWZpbmUgRVJSX0NPTE9SX1RFTVBMQVRFX0lNQUdFX0hVRV9DT05UUkFTVF9UT09fTE9XICAgICAgICAgICAgICAgIC0xMDc0Mzk1MzkxIC8vIFRoZSBjb250cmFzdCBpbiB0aGUgaHVlIHBsYW5lIG9mIHRoZSBpbWFnZSBpcyB0b28gbG93IGZvciBsZWFybmluZyBzaGFwZSBmZWF0dXJlcy4NCisjZGVmaW5lIEVSUl9DT0xPUl9URU1QTEFURV9JTUFHRV9MVU1JTkFOQ0VfQ09OVFJBU1RfVE9PX0xPVyAgICAgICAgICAtMTA3NDM5NTM5MCAvLyBUaGUgY29udHJhc3QgaW4gdGhlIGx1bWluYW5jZSBwbGFuZSBvZiB0aGUgaW1hZ2UgaXMgdG9vIGxvdyB0byBsZWFybiBzaGFwZSBmZWF0dXJlcy4NCisjZGVmaW5lIEVSUl9DT0xPUl9MRUFSTl9TRVRVUF9EQVRBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTM4OSAvLyBJbnZhbGlkIGNvbG9yIGxlYXJuIHNldHVwIGRhdGEuDQorI2RlZmluZSBFUlJfQ09MT1JfTEVBUk5fU0VUVVBfREFUQV9TSEFQRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTUzODggLy8gSW52YWxpZCBjb2xvciBsZWFybiBzZXR1cCBkYXRhLg0KKyNkZWZpbmUgRVJSX0NPTE9SX01BVENIX1NFVFVQX0RBVEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1Mzg3IC8vIEludmFsaWQgY29sb3IgbWF0Y2ggc2V0dXAgZGF0YS4NCisjZGVmaW5lIEVSUl9DT0xPUl9NQVRDSF9TRVRVUF9EQVRBX1NIQVBFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTM4NiAvLyBJbnZhbGlkIGNvbG9yIG1hdGNoIHNldHVwIGRhdGEuDQorI2RlZmluZSBFUlJfQ09MT1JfUk9UQVRJT05fUkVRVUlSRVNfU0hBUEVfRkVBVFVSRSAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTUzODUgLy8gUm90YXRpb24taW52YXJpYW50IGNvbG9yIHBhdHRlcm4gbWF0Y2hpbmcgcmVxdWlyZXMgYSBmZWF0dXJlIG1vZGUgaW5jbHVkaW5nIHNoYXBlLg0KKyNkZWZpbmUgRVJSX0NPTE9SX1RFTVBMQVRFX0RFU0NSSVBUT1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1Mzg0IC8vIEludmFsaWQgY29sb3IgdGVtcGxhdGUgaW1hZ2UuDQorI2RlZmluZSBFUlJfQ09MT1JfVEVNUExBVEVfREVTQ1JJUFRPUl8xICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTUzODMgLy8gSW52YWxpZCBjb2xvciB0ZW1wbGF0ZSBpbWFnZS4NCisjZGVmaW5lIEVSUl9DT0xPUl9URU1QTEFURV9ERVNDUklQVE9SXzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTM4MiAvLyBJbnZhbGlkIGNvbG9yIHRlbXBsYXRlIGltYWdlLg0KKyNkZWZpbmUgRVJSX0NPTE9SX1RFTVBMQVRFX0RFU0NSSVBUT1JfMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1MzgxIC8vIEludmFsaWQgY29sb3IgdGVtcGxhdGUgaW1hZ2UuDQorI2RlZmluZSBFUlJfQ09MT1JfVEVNUExBVEVfREVTQ1JJUFRPUl80ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTUzODAgLy8gSW52YWxpZCBjb2xvciB0ZW1wbGF0ZSBpbWFnZS4NCisjZGVmaW5lIEVSUl9DT0xPUl9URU1QTEFURV9ERVNDUklQVE9SXzUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTM3OSAvLyBJbnZhbGlkIGNvbG9yIHRlbXBsYXRlIGltYWdlLg0KKyNkZWZpbmUgRVJSX0NPTE9SX1RFTVBMQVRFX0RFU0NSSVBUT1JfNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1Mzc4IC8vIEludmFsaWQgY29sb3IgdGVtcGxhdGUgaW1hZ2UuDQorI2RlZmluZSBFUlJfQ09MT1JfVEVNUExBVEVfREVTQ1JJUFRPUl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTUzNzcgLy8gSW52YWxpZCBjb2xvciB0ZW1wbGF0ZSBpbWFnZS4NCisjZGVmaW5lIEVSUl9DT0xPUl9URU1QTEFURV9ERVNDUklQVE9SX05PU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTM3NiAvLyBUaGUgY29sb3IgdGVtcGxhdGUgaW1hZ2UgZG9lcyBub3QgY29udGFpbiBkYXRhIHJlcXVpcmVkIGZvciBzaGlmdC1pbnZhcmlhbnQgY29sb3IgbWF0Y2hpbmcuDQorI2RlZmluZSBFUlJfQ09MT1JfVEVNUExBVEVfREVTQ1JJUFRPUl9TSElGVF8xICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTUzNzUgLy8gSW52YWxpZCBjb2xvciB0ZW1wbGF0ZSBpbWFnZS4NCisjZGVmaW5lIEVSUl9DT0xPUl9URU1QTEFURV9ERVNDUklQVE9SX1NISUZUXzIgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTM3NCAvLyBJbnZhbGlkIGNvbG9yIHRlbXBsYXRlIGltYWdlLg0KKyNkZWZpbmUgRVJSX0NPTE9SX1RFTVBMQVRFX0RFU0NSSVBUT1JfUk9UQVRJT04gICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1MzczIC8vIEludmFsaWQgY29sb3IgdGVtcGxhdGUgaW1hZ2UuDQorI2RlZmluZSBFUlJfQ09MT1JfVEVNUExBVEVfREVTQ1JJUFRPUl9OT1JPVEFUSU9OICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTUzNzIgLy8gVGhlIGNvbG9yIHRlbXBsYXRlIGltYWdlIGRvZXMgbm90IGNvbnRhaW4gZGF0YSByZXF1aXJlZCBmb3Igcm90YXRpb24taW52YXJpYW50IGNvbG9yIG1hdGNoaW5nLg0KKyNkZWZpbmUgRVJSX0NPTE9SX1RFTVBMQVRFX0RFU0NSSVBUT1JfUk9UQVRJT05fMSAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1MzcxIC8vIEludmFsaWQgY29sb3IgdGVtcGxhdGUgaW1hZ2UuDQorI2RlZmluZSBFUlJfQ09MT1JfVEVNUExBVEVfREVTQ1JJUFRPUl9ST1RBVElPTl8yICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTUzNzAgLy8gSW52YWxpZCBjb2xvciB0ZW1wbGF0ZSBpbWFnZS4NCisjZGVmaW5lIEVSUl9DT0xPUl9URU1QTEFURV9ERVNDUklQVE9SX1JPVEFUSU9OXzMgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTM2OSAvLyBJbnZhbGlkIGNvbG9yIHRlbXBsYXRlIGltYWdlLg0KKyNkZWZpbmUgRVJSX0NPTE9SX1RFTVBMQVRFX0RFU0NSSVBUT1JfUk9UQVRJT05fNCAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1MzY4IC8vIEludmFsaWQgY29sb3IgdGVtcGxhdGUgaW1hZ2UuDQorI2RlZmluZSBFUlJfQ09MT1JfVEVNUExBVEVfREVTQ1JJUFRPUl9ST1RBVElPTl81ICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTUzNjcgLy8gSW52YWxpZCBjb2xvciB0ZW1wbGF0ZSBpbWFnZS4NCisjZGVmaW5lIEVSUl9DT0xPUl9URU1QTEFURV9ERVNDUklQVE9SX05PU0hBUEUgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTM2NiAvLyBUaGUgY29sb3IgdGVtcGxhdGUgaW1hZ2UgZG9lcyBub3QgY29udGFpbiBkYXRhIHJlcXVpcmVkIGZvciBjb2xvciBtYXRjaGluZyBpbiBzaGFwZSBmZWF0dXJlIG1vZGUuDQorI2RlZmluZSBFUlJfQ09MT1JfVEVNUExBVEVfREVTQ1JJUFRPUl9OT1NQRUNUUlVNICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTUzNjUgLy8gVGhlIGNvbG9yIHRlbXBsYXRlIGltYWdlIGRvZXMgbm90IGNvbnRhaW4gZGF0YSByZXF1aXJlZCBmb3IgY29sb3IgbWF0Y2hpbmcgaW4gY29sb3IgZmVhdHVyZSBtb2RlLg0KKyNkZWZpbmUgRVJSX0lHTk9SRV9DT0xPUl9TUEVDVFJVTV9TRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1MzY0IC8vIFRoZSBpZ25vcmUgY29sb3Igc3BlY3RyYSBhcnJheSBpcyBpbnZhbGlkLg0KKyNkZWZpbmUgRVJSX0lOVkFMSURfU1VCU0FNUExJTkdfUkFUSU8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1MzYzIC8vIEludmFsaWQgc3Vic2FtcGxpbmcgcmF0aW8uDQorI2RlZmluZSBFUlJfSU5WQUxJRF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTUzNjIgLy8gSW52YWxpZCBwaXhlbCB3aWR0aC4NCisjZGVmaW5lIEVSUl9JTlZBTElEX1NURUVQTkVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTM2MSAvLyBJbnZhbGlkIHN0ZWVwbmVzcy4NCisjZGVmaW5lIEVSUl9DT01QTEVYX1BMQU5FICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTM2MCAvLyBJbnZhbGlkIGNvbXBsZXggcGxhbmUuDQorI2RlZmluZSBFUlJfSU5WQUxJRF9DT0xPUl9JR05PUkVfTU9ERSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTUzNTcgLy8gSW52YWxpZCBjb2xvciBpZ25vcmUgbW9kZS4NCisjZGVmaW5lIEVSUl9JTlZBTElEX01JTl9NQVRDSF9TQ09SRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTM1NiAvLyBJbnZhbGlkIG1pbmltdW0gbWF0Y2ggc2NvcmUuIEFjY2VwdGFibGUgdmFsdWVzIHJhbmdlIGZyb20gMCB0byAxMDAwLg0KKyNkZWZpbmUgRVJSX0lOVkFMSURfTlVNX01BVENIRVNfUkVRVUVTVEVEICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1MzU1IC8vIEludmFsaWQgbnVtYmVyIG9mIG1hdGNoZXMgcmVxdWVzdGVkLiBZb3UgbXVzdCByZXF1ZXN0IGEgbWluaW11bSBvZiBvbmUgbWF0Y2guDQorI2RlZmluZSBFUlJfSU5WQUxJRF9DT0xPUl9XRUlHSFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTUzNTQgLy8gSW52YWxpZCBjb2xvciB3ZWlnaHQuIEFjY2VwdGFibGUgdmFsdWVzIHJhbmdlIGZyb20gMCB0byAxMDAwLg0KKyNkZWZpbmUgRVJSX0lOVkFMSURfU0VBUkNIX1NUUkFURUdZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1MzUzIC8vIEludmFsaWQgc2VhcmNoIHN0cmF0ZWd5Lg0KKyNkZWZpbmUgRVJSX0lOVkFMSURfRkVBVFVSRV9NT0RFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1MzUyIC8vIEludmFsaWQgZmVhdHVyZSBtb2RlLg0KKyNkZWZpbmUgRVJSX0lOVkFMSURfUkVDVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1MzUxIC8vIE5JIFZpc2lvbiBkb2VzIG5vdCBzdXBwb3J0IHJlY3RhbmdsZXMgd2l0aCBuZWdhdGl2ZSB3aWR0aHMgb3IgbmVnYXRpdmUgaGVpZ2h0cy4NCisjZGVmaW5lIEVSUl9JTlZBTElEX1ZJU0lPTl9JTkZPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTM1MCAvLyBOSSBWaXNpb24gZG9lcyBub3Qgc3VwcG9ydCB0aGUgdmlzaW9uIGluZm9ybWF0aW9uIHR5cGUgeW91IHN1cHBsaWVkLg0KKyNkZWZpbmUgRVJSX0lOVkFMSURfU0tFTEVUT05NRVRIT0QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1MzQ5IC8vIE5JIFZpc2lvbiBkb2VzIG5vdCBzdXBwb3J0IHRoZSBTa2VsZXRvbk1ldGhvZCB2YWx1ZSB5b3Ugc3VwcGxpZWQuDQorI2RlZmluZSBFUlJfSU5WQUxJRF8zRFBMQU5FICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTUzNDggLy8gTkkgVmlzaW9uIGRvZXMgbm90IHN1cHBvcnQgdGhlIDNEUGxhbmUgdmFsdWUgeW91IHN1cHBsaWVkLg0KKyNkZWZpbmUgRVJSX0lOVkFMSURfM0RESVJFQ1RJT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1MzQ3IC8vIE5JIFZpc2lvbiBkb2VzIG5vdCBzdXBwb3J0IHRoZSAzRERpcmVjdGlvbiB2YWx1ZSB5b3Ugc3VwcGxpZWQuDQorI2RlZmluZSBFUlJfSU5WQUxJRF9JTlRFUlBPTEFUSU9OTUVUSE9EX0ZPUl9ST1RBVEUgICAgICAgICAgICAgICAgICAgLTEwNzQzOTUzNDYgLy8gaW1hcVJvdGF0ZSBkb2VzIG5vdCBzdXBwb3J0IHRoZSBJbnRlcnBvbGF0aW9uTWV0aG9kIHZhbHVlIHlvdSBzdXBwbGllZC4NCisjZGVmaW5lIEVSUl9JTlZBTElEX0ZMSVBBWElTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTM0NSAvLyBOSSBWaXNpb24gZG9lcyBub3Qgc3VwcG9ydCB0aGUgYXhpcyBvZiBzeW1tZXRyeSB5b3Ugc3VwcGxpZWQuDQorI2RlZmluZSBFUlJfRklMRV9GSUxFTkFNRV9OVUxMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTUzNDMgLy8gWW91IG11c3QgcGFzcyBhIHZhbGlkIGZpbGUgbmFtZS4gRG8gbm90IHBhc3MgaW4gTlVMTC4NCisjZGVmaW5lIEVSUl9JTlZBTElEX1NJWkVUWVBFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTM0MCAvLyBOSSBWaXNpb24gZG9lcyBub3Qgc3VwcG9ydCB0aGUgU2l6ZVR5cGUgdmFsdWUgeW91IHN1cHBsaWVkLg0KKyNkZWZpbmUgRVJSX1VOS05PV05fQUxHT1JJVEhNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1MzM2IC8vIFlvdSBzcGVjaWZpZWQgdGhlIGRpc3BhdGNoIHN0YXR1cyBvZiBhbiB1bmtub3duIGFsZ29yaXRobS4NCisjZGVmaW5lIEVSUl9ESVNQQVRDSF9TVEFUVVNfQ09ORkxJQ1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTMzNSAvLyBZb3UgYXJlIGF0dGVtcHRpbmcgdG8gc2V0IHRoZSBzYW1lIGFsZ29yaXRobSB0byBkaXNwYXRjaCBhbmQgdG8gbm90IGRpc3BhdGNoLiBSZW1vdmUgb25lIG9mIHRoZSBjb25mbGljdGluZyBzZXR0aW5ncy4NCisjZGVmaW5lIEVSUl9JTlZBTElEX0NPTlZFUlNJT05TVFlMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTMzNCAvLyBOSSBWaXNpb24gZG9lcyBub3Qgc3VwcG9ydCB0aGUgQ29udmVyc2lvbiBNZXRob2QgdmFsdWUgeW91IHN1cHBsaWVkLg0KKyNkZWZpbmUgRVJSX0lOVkFMSURfVkVSVElDQUxfVEVYVF9BTElHTk1FTlQgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1MzMzIC8vIE5JIFZpc2lvbiBkb2VzIG5vdCBzdXBwb3J0IHRoZSBWZXJ0aWNhbFRleHRBbGlnbm1lbnQgdmFsdWUgeW91IHN1cHBsaWVkLg0KKyNkZWZpbmUgRVJSX0lOVkFMSURfQ09NUEFSRUZVTkNUSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1MzMyIC8vIE5JIFZpc2lvbiBkb2VzIG5vdCBzdXBwb3J0IHRoZSBDb21wYXJlRnVuY3Rpb24gdmFsdWUgeW91IHN1cHBsaWVkLg0KKyNkZWZpbmUgRVJSX0lOVkFMSURfQk9SREVSTUVUSE9EICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1MzMxIC8vIE5JIFZpc2lvbiBkb2VzIG5vdCBzdXBwb3J0IHRoZSBCb3JkZXJNZXRob2QgdmFsdWUgeW91IHN1cHBsaWVkLg0KKyNkZWZpbmUgRVJSX0lOVkFMSURfQk9SREVSX1NJWkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1MzMwIC8vIEludmFsaWQgYm9yZGVyIHNpemUuIEFjY2VwdGFibGUgdmFsdWVzIHJhbmdlIGZyb20gMCB0byA1MC4NCisjZGVmaW5lIEVSUl9JTlZBTElEX09VVExJTkVNRVRIT0QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTMyOSAvLyBOSSBWaXNpb24gZG9lcyBub3Qgc3VwcG9ydCB0aGUgT3V0bGluZU1ldGhvZCB2YWx1ZSB5b3Ugc3VwcGxpZWQuDQorI2RlZmluZSBFUlJfSU5WQUxJRF9JTlRFUlBPTEFUSU9OTUVUSE9EICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTUzMjggLy8gTkkgVmlzaW9uIGRvZXMgbm90IHN1cHBvcnQgdGhlIEludGVycG9sYXRpb25NZXRob2QgdmFsdWUgeW91IHN1cHBsaWVkLg0KKyNkZWZpbmUgRVJSX0lOVkFMSURfU0NBTElOR01PREUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1MzI3IC8vIE5JIFZpc2lvbiBkb2VzIG5vdCBzdXBwb3J0IHRoZSBTY2FsaW5nTW9kZSB2YWx1ZSB5b3Ugc3VwcGxpZWQuDQorI2RlZmluZSBFUlJfSU5WQUxJRF9EUkFXTU9ERV9GT1JfTElORSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTUzMjYgLy8gaW1hcURyYXdMaW5lT25JbWFnZSBkb2VzIG5vdCBzdXBwb3J0IHRoZSBEcmF3TW9kZSB2YWx1ZSB5b3Ugc3VwcGxpZWQuDQorI2RlZmluZSBFUlJfSU5WQUxJRF9EUkFXTU9ERSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTUzMjUgLy8gTkkgVmlzaW9uIGRvZXMgbm90IHN1cHBvcnQgdGhlIERyYXdNb2RlIHZhbHVlIHlvdSBzdXBwbGllZC4NCisjZGVmaW5lIEVSUl9JTlZBTElEX1NIQVBFTU9ERSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTMyNCAvLyBOSSBWaXNpb24gZG9lcyBub3Qgc3VwcG9ydCB0aGUgU2hhcGVNb2RlIHZhbHVlIHlvdSBzdXBwbGllZC4NCisjZGVmaW5lIEVSUl9JTlZBTElEX0ZPTlRDT0xPUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTMyMyAvLyBOSSBWaXNpb24gZG9lcyBub3Qgc3VwcG9ydCB0aGUgRm9udENvbG9yIHZhbHVlIHlvdSBzdXBwbGllZC4NCisjZGVmaW5lIEVSUl9JTlZBTElEX1RFWFRBTElHTk1FTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTMyMiAvLyBOSSBWaXNpb24gZG9lcyBub3Qgc3VwcG9ydCB0aGUgVGV4dEFsaWdubWVudCB2YWx1ZSB5b3Ugc3VwcGxpZWQuDQorI2RlZmluZSBFUlJfSU5WQUxJRF9NT1JQSE9MT0dZTUVUSE9EICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTUzMjEgLy8gTkkgVmlzaW9uIGRvZXMgbm90IHN1cHBvcnQgdGhlIE1vcnBob2xvZ3lNZXRob2QgdmFsdWUgeW91IHN1cHBsaWVkLg0KKyNkZWZpbmUgRVJSX1RFTVBMQVRFX0VNUFRZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1MzIwIC8vIFRoZSB0ZW1wbGF0ZSBpbWFnZSBpcyBlbXB0eS4NCisjZGVmaW5lIEVSUl9JTlZBTElEX1NVQlBJWF9UWVBFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTMxOSAvLyBOSSBWaXNpb24gZG9lcyBub3Qgc3VwcG9ydCB0aGUgaW50ZXJwb2xhdGlvbiB0eXBlIHlvdSBzdXBwbGllZC4NCisjZGVmaW5lIEVSUl9JTlNGX1BPSU5UUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTMxOCAvLyBZb3Ugc3VwcGxpZWQgYW4gaW5zdWZmaWNpZW50IG51bWJlciBvZiBwb2ludHMgdG8gcGVyZm9ybSB0aGlzIG9wZXJhdGlvbi4NCisjZGVmaW5lIEVSUl9VTkRFRl9QT0lOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTMxNyAvLyBZb3Ugc3BlY2lmaWVkIGEgcG9pbnQgdGhhdCBsaWVzIG91dHNpZGUgdGhlIGltYWdlLg0KKyNkZWZpbmUgRVJSX0lOVkFMSURfS0VSTkVMX0NPREUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1MzE2IC8vIEludmFsaWQga2VybmVsIGNvZGUuDQorI2RlZmluZSBFUlJfSU5FRkZJQ0lFTlRfUE9JTlRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTUzMTUgLy8gWW91IHN1cHBsaWVkIGFuIGluZWZmaWNpZW50IHNldCBvZiBwb2ludHMgdG8gbWF0Y2ggdGhlIG1pbmltdW0gc2NvcmUuDQorI2RlZmluZSBFUlJfV1JJVEVfRklMRV9OT1RfU1VQUE9SVEVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTUzMTMgLy8gV3JpdGluZyBmaWxlcyBpcyBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgZGV2aWNlLg0KKyNkZWZpbmUgRVJSX0xDRF9DQUxJQlJBVEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1MzEyIC8vIFRoZSBpbnB1dCBpbWFnZSBkb2VzIG5vdCBzZWVtIHRvIGJlIGEgdmFsaWQgTENEIG9yIExFRCBjYWxpYnJhdGlvbiBpbWFnZS4NCisjZGVmaW5lIEVSUl9JTlZBTElEX0NPTE9SX1NQRUNUUlVNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTMxMSAvLyBUaGUgY29sb3Igc3BlY3RydW0gYXJyYXkgeW91IHByb3ZpZGVkIGhhcyBhbiBpbnZhbGlkIG51bWJlciBvZiBlbGVtZW50cyBvciBjb250YWlucyBhbiBlbGVtZW50IHNldCB0byBub3QtYS1udW1iZXIgKE5hTikuDQorI2RlZmluZSBFUlJfSU5WQUxJRF9QQUxFVFRFX1RZUEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTUzMTAgLy8gTkkgVmlzaW9uIGRvZXMgbm90IHN1cHBvcnQgdGhlIFBhbGV0dGVUeXBlIHZhbHVlIHlvdSBzdXBwbGllZC4NCisjZGVmaW5lIEVSUl9JTlZBTElEX1dJTkRPV19USFJFQURfUE9MSUNZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTMwOSAvLyBOSSBWaXNpb24gZG9lcyBub3Qgc3VwcG9ydCB0aGUgV2luZG93VGhyZWFkUG9saWN5IHZhbHVlIHlvdSBzdXBwbGllZC4NCisjZGVmaW5lIEVSUl9JTlZBTElEX0NPTE9SU0VOU0lUSVZJVFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTMwOCAvLyBOSSBWaXNpb24gZG9lcyBub3Qgc3VwcG9ydCB0aGUgQ29sb3JTZW5zaXRpdml0eSB2YWx1ZSB5b3Ugc3VwcGxpZWQuDQorI2RlZmluZSBFUlJfUFJFQ0lTSU9OX05PVF9HVFJfVEhBTl8wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTUzMDcgLy8gVGhlIHByZWNpc2lvbiBwYXJhbWV0ZXIgbXVzdCBiZSBncmVhdGVyIHRoYW4gMC4NCisjZGVmaW5lIEVSUl9JTlZBTElEX1RPT0wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTMwNiAvLyBOSSBWaXNpb24gZG9lcyBub3Qgc3VwcG9ydCB0aGUgVG9vbCB2YWx1ZSB5b3Ugc3VwcGxpZWQuDQorI2RlZmluZSBFUlJfSU5WQUxJRF9SRUZFUkVOQ0VNT0RFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTUzMDUgLy8gTkkgVmlzaW9uIGRvZXMgbm90IHN1cHBvcnQgdGhlIFJlZmVyZW5jZU1vZGUgdmFsdWUgeW91IHN1cHBsaWVkLg0KKyNkZWZpbmUgRVJSX0lOVkFMSURfTUFUSFRSQU5TRk9STU1FVEhPRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1MzA0IC8vIE5JIFZpc2lvbiBkb2VzIG5vdCBzdXBwb3J0IHRoZSBNYXRoVHJhbnNmb3JtTWV0aG9kIHZhbHVlIHlvdSBzdXBwbGllZC4NCisjZGVmaW5lIEVSUl9JTlZBTElEX05VTV9PRl9DTEFTU0VTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTMwMyAvLyBJbnZhbGlkIG51bWJlciBvZiBjbGFzc2VzIGZvciBhdXRvIHRocmVzaG9sZC4gQWNjZXB0YWJsZSB2YWx1ZXMgcmFuZ2UgZnJvbSAyIHRvIDI1Ni4NCisjZGVmaW5lIEVSUl9JTlZBTElEX1RIUkVTSE9MRE1FVEhPRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTMwMiAvLyBOSSBWaXNpb24gZG9lcyBub3Qgc3VwcG9ydCB0aGUgdGhyZXNob2xkIG1ldGhvZCB2YWx1ZSB5b3Ugc3VwcGxpZWQuDQorI2RlZmluZSBFUlJfUk9JX05PVF8yX0xJTkVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTUzMDEgLy8gVGhlIFJPSSB5b3UgcGFzc2VkIGludG8gaW1hcUdldE1ldGVyQXJjIG11c3QgY29uc2lzdCBvZiB0d28gbGluZXMuDQorI2RlZmluZSBFUlJfSU5WQUxJRF9NRVRFUkFSQ01PREUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTUzMDAgLy8gTkkgVmlzaW9uIGRvZXMgbm90IHN1cHBvcnQgdGhlIE1ldGVyQXJjTW9kZSB2YWx1ZSB5b3Ugc3VwcGxpZWQuDQorI2RlZmluZSBFUlJfSU5WQUxJRF9DT01QTEVYUExBTkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTUyOTkgLy8gTkkgVmlzaW9uIGRvZXMgbm90IHN1cHBvcnQgdGhlIENvbXBsZXhQbGFuZSB2YWx1ZSB5b3Ugc3VwcGxpZWQuDQorI2RlZmluZSBFUlJfQ09NUExFWFBMQU5FX05PVF9SRUFMX09SX0lNQUdJTkFSWSAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTUyOTggLy8gWW91IGNhbiBwZXJmb3JtIHRoaXMgb3BlcmF0aW9uIG9uIGEgcmVhbCBvciBhbiBpbWFnaW5hcnkgQ29tcGxleFBsYW5lIG9ubHkuDQorI2RlZmluZSBFUlJfSU5WQUxJRF9QQVJUSUNMRUlORk9NT0RFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTUyOTcgLy8gTkkgVmlzaW9uIGRvZXMgbm90IHN1cHBvcnQgdGhlIFBhcnRpY2xlSW5mb01vZGUgdmFsdWUgeW91IHN1cHBsaWVkLg0KKyNkZWZpbmUgRVJSX0lOVkFMSURfQkFSQ09ERVRZUEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1Mjk2IC8vIE5JIFZpc2lvbiBkb2VzIG5vdCBzdXBwb3J0IHRoZSBCYXJjb2RlVHlwZSB2YWx1ZSB5b3Ugc3VwcGxpZWQuDQorI2RlZmluZSBFUlJfSU5WQUxJRF9JTlRFUlBPTEFUSU9OTUVUSE9EX0lOVEVSUE9MQVRFUE9JTlRTICAgICAgICAgICAgLTEwNzQzOTUyOTUgLy8gaW1hcUludGVycG9sYXRlUG9pbnRzIGRvZXMgbm90IHN1cHBvcnQgdGhlIEludGVycG9sYXRpb25NZXRob2QgdmFsdWUgeW91IHN1cHBsaWVkLg0KKyNkZWZpbmUgRVJSX0NPTlRPVVJfSU5ERVhfT1VUX09GX1JBTkdFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1Mjk0IC8vIFRoZSBjb250b3VyIGluZGV4IHlvdSBzdXBwbGllZCBpcyBsYXJnZXIgdGhhbiB0aGUgbnVtYmVyIG9mIGNvbnRvdXJzIGluIHRoZSBST0kuDQorI2RlZmluZSBFUlJfQ09OVE9VUklEX05PVF9GT1VORCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTUyOTMgLy8gVGhlIHN1cHBsaWVkIENvbnRvdXJJRCBkaWQgbm90IGNvcnJlbGF0ZSB0byBhIGNvbnRvdXIgaW5zaWRlIHRoZSBST0kuDQorI2RlZmluZSBFUlJfUE9JTlRTX0FSRV9DT0xMSU5FQVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTUyOTIgLy8gRG8gbm90IHN1cHBseSBjb2xsaW5lYXIgcG9pbnRzIGZvciB0aGlzIG9wZXJhdGlvbi4NCisjZGVmaW5lIEVSUl9TSEFQRU1BVENIX0JBRElNQUdFREFUQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTI5MSAvLyBTaGFwZSBNYXRjaCByZXF1aXJlcyB0aGUgaW1hZ2UgdG8gY29udGFpbiBvbmx5IHBpeGVsIHZhbHVlcyBvZiAwIG9yIDEuDQorI2RlZmluZSBFUlJfU0hBUEVNQVRDSF9CQURURU1QTEFURSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTUyOTAgLy8gVGhlIHRlbXBsYXRlIHlvdSBzdXBwbGllZCBmb3IgU2hhcGVNYXRjaCBjb250YWlucyBubyBzaGFwZSBpbmZvcm1hdGlvbi4NCisjZGVmaW5lIEVSUl9DT05UQUlORVJfQ0FQQUNJVFlfRVhDRUVERURfVUlOVF9NQVggICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTI4OSAvLyBUaGUgb3BlcmF0aW9uIHdvdWxkIGhhdmUgZXhjZWVkZWQgdGhlIGNhcGFjaXR5IG9mIGFuIGludGVybmFsIGNvbnRhaW5lciwgd2hpY2ggaXMgbGltaXRlZCB0byA0Mjk0OTY3Mjk2IHVuaXF1ZSBlbGVtZW50cy4NCisjZGVmaW5lIEVSUl9DT05UQUlORVJfQ0FQQUNJVFlfRVhDRUVERURfSU5UX01BWCAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTI4OCAvLyBUaGUgb3BlcmF0aW9uIHdvdWxkIGhhdmUgZXhjZWVkZWQgdGhlIGNhcGFjaXR5IG9mIGFuIGludGVybmFsIGNvbnRhaW5lciwgd2hpY2ggaXMgbGltaXRlZCB0byAyMTQ3NDgzNjQ4IHVuaXF1ZSBlbGVtZW50cy4NCisjZGVmaW5lIEVSUl9JTlZBTElEX0xJTkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTI4NyAvLyBUaGUgbGluZSB5b3UgcHJvdmlkZWQgY29udGFpbnMgdHdvIGlkZW50aWNhbCBwb2ludHMsIG9yIG9uZSBvZiB0aGUgY29vcmRpbmF0ZSBsb2NhdGlvbnMgZm9yIHRoZSBsaW5lIGlzIG5vdCBhIG51bWJlciAoTmFOKS4NCisjZGVmaW5lIEVSUl9JTlZBTElEX0NPTkNFTlRSSUNfUkFLRV9ESVJFQ1RJT04gICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTI4NiAvLyBJbnZhbGlkIGNvbmNlbnRyaWMgcmFrZSBkaXJlY3Rpb24uDQorI2RlZmluZSBFUlJfSU5WQUxJRF9TUE9LRV9ESVJFQ1RJT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTUyODUgLy8gSW52YWxpZCBzcG9rZSBkaXJlY3Rpb24uDQorI2RlZmluZSBFUlJfSU5WQUxJRF9FREdFX1BST0NFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTUyODQgLy8gSW52YWxpZCBlZGdlIHByb2Nlc3MuDQorI2RlZmluZSBFUlJfSU5WQUxJRF9SQUtFX0RJUkVDVElPTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTUyODMgLy8gSW52YWxpZCByYWtlIGRpcmVjdGlvbi4NCisjZGVmaW5lIEVSUl9DQU5UX0RSQVdfSU5UT19WSUVXRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTI4MiAvLyBVbmFibGUgdG8gZHJhdyB0byB2aWV3ZXIuIFlvdSBtdXN0IGhhdmUgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoZSBjb250cm9sLg0KKyNkZWZpbmUgRVJSX0lNQUdFX1NNQUxMRVJfVEhBTl9CT1JERVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1MjgxIC8vIFlvdXIgaW1hZ2UgbXVzdCBiZSBsYXJnZXIgdGhhbiBpdHMgYm9yZGVyIHNpemUgZm9yIHRoaXMgb3BlcmF0aW9uLg0KKyNkZWZpbmUgRVJSX1JPSV9OT1RfUkVDVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1MjgwIC8vIFRoZSBST0kgbXVzdCBvbmx5IGhhdmUgYSBzaW5nbGUgUmVjdGFuZ2xlIGNvbnRvdXIuDQorI2RlZmluZSBFUlJfUk9JX05PVF9QT0xZR09OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTUyNzkgLy8gUk9JIGlzIG5vdCBhIHBvbHlnb24uDQorI2RlZmluZSBFUlJfTENEX05PVF9OVU1FUklDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTUyNzggLy8gTENEIGltYWdlIGlzIG5vdCBhIG51bWJlci4NCisjZGVmaW5lIEVSUl9CQVJDT0RFX0NIRUNLU1VNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTI3NyAvLyBUaGUgZGVjb2RlZCBiYXJjb2RlIGluZm9ybWF0aW9uIGRpZCBub3QgcGFzcyB0aGUgY2hlY2tzdW0gdGVzdC4NCisjZGVmaW5lIEVSUl9MSU5FU19QQVJBTExFTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTI3NiAvLyBZb3Ugc3BlY2lmaWVkIHBhcmFsbGVsIGxpbmVzIGZvciB0aGUgbWV0ZXIgUk9JLg0KKyNkZWZpbmUgRVJSX0lOVkFMSURfQlJPV1NFUl9JTUFHRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1Mjc1IC8vIEludmFsaWQgYnJvd3NlciBpbWFnZS4NCisjZGVmaW5lIEVSUl9ESVZfQllfWkVSTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTI3MCAvLyBDYW5ub3QgZGl2aWRlIGJ5IHplcm8uDQorI2RlZmluZSBFUlJfTlVMTF9QT0lOVEVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTUyNjkgLy8gTnVsbCBwb2ludGVyLg0KKyNkZWZpbmUgRVJSX0xJTkVBUl9DT0VGRiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1MjY4IC8vIFRoZSBsaW5lYXIgZXF1YXRpb25zIGFyZSBub3QgaW5kZXBlbmRlbnQuDQorI2RlZmluZSBFUlJfQ09NUExFWF9ST09UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTUyNjcgLy8gVGhlIHJvb3RzIG9mIHRoZSBlcXVhdGlvbiBhcmUgY29tcGxleC4NCisjZGVmaW5lIEVSUl9CQVJDT0RFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTI2NSAvLyBUaGUgYmFyY29kZSBkb2VzIG5vdCBtYXRjaCB0aGUgdHlwZSB5b3Ugc3BlY2lmaWVkLg0KKyNkZWZpbmUgRVJSX0xDRF9OT19TRUdNRU5UUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1MjYzIC8vIE5vIGxpdCBzZWdtZW50Lg0KKyNkZWZpbmUgRVJSX0xDRF9CQURfTUFUQ0ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1MjYyIC8vIFRoZSBMQ0QgZG9lcyBub3QgZm9ybSBhIGtub3duIGRpZ2l0Lg0KKyNkZWZpbmUgRVJSX0dJUF9SQU5HRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1MjYxIC8vIEFuIGludGVybmFsIGVycm9yIG9jY3VycmVkIHdoaWxlIGF0dGVtcHRpbmcgdG8gYWNjZXNzIGFuIGludmFsaWQgY29vcmRpbmF0ZSBvbiBhbiBpbWFnZS4NCisjZGVmaW5lIEVSUl9IRUFQX1RSQVNIRUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTI2MCAvLyBBbiBpbnRlcm5hbCBtZW1vcnkgZXJyb3Igb2NjdXJyZWQuDQorI2RlZmluZSBFUlJfQkFEX0ZJTFRFUl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTUyNTggLy8gVGhlIGZpbHRlciB3aWR0aCBtdXN0IGJlIG9kZCBmb3IgdGhlIENhbm55IG9wZXJhdG9yLg0KKyNkZWZpbmUgRVJSX0lOVkFMSURfRURHRV9ESVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1MjU3IC8vIFlvdSBzdXBwbGllZCBhbiBpbnZhbGlkIGVkZ2UgZGlyZWN0aW9uIGluIHRoZSBDYW5ueSBvcGVyYXRvci4NCisjZGVmaW5lIEVSUl9FVkVOX1dJTkRPV19TSVpFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTI1NiAvLyBUaGUgd2luZG93IHNpemUgbXVzdCBiZSBvZGQgZm9yIHRoZSBDYW5ueSBvcGVyYXRvci4NCisjZGVmaW5lIEVSUl9JTlZBTElEX0xFQVJOX01PREUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTI1MyAvLyBJbnZhbGlkIGxlYXJuIG1vZGUuDQorI2RlZmluZSBFUlJfTEVBUk5fU0VUVVBfREFUQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTUyNTIgLy8gSW52YWxpZCBsZWFybiBzZXR1cCBkYXRhLg0KKyNkZWZpbmUgRVJSX0lOVkFMSURfTUFUQ0hfTU9ERSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1MjUxIC8vIEludmFsaWQgbWF0Y2ggbW9kZS4NCisjZGVmaW5lIEVSUl9NQVRDSF9TRVRVUF9EQVRBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTI1MCAvLyBJbnZhbGlkIG1hdGNoIHNldHVwIGRhdGEuDQorI2RlZmluZSBFUlJfUk9UQVRJT05fQU5HTEVfUkFOR0VfVE9PX0xBUkdFICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTUyNDkgLy8gQXQgbGVhc3Qgb25lIHJhbmdlIGluIHRoZSBhcnJheSBvZiByb3RhdGlvbiBhbmdsZSByYW5nZXMgZXhjZWVkcyAzNjAgZGVncmVlcy4NCisjZGVmaW5lIEVSUl9UT09fTUFOWV9ST1RBVElPTl9BTkdMRV9SQU5HRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTI0OCAvLyBUaGUgYXJyYXkgb2Ygcm90YXRpb24gYW5nbGUgcmFuZ2VzIGNvbnRhaW5zIHRvbyBtYW55IHJhbmdlcy4NCisjZGVmaW5lIEVSUl9URU1QTEFURV9ERVNDUklQVE9SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTI0NyAvLyBJbnZhbGlkIHRlbXBsYXRlIGRlc2NyaXB0b3IuDQorI2RlZmluZSBFUlJfVEVNUExBVEVfREVTQ1JJUFRPUl8xICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTUyNDYgLy8gSW52YWxpZCB0ZW1wbGF0ZSBkZXNjcmlwdG9yLg0KKyNkZWZpbmUgRVJSX1RFTVBMQVRFX0RFU0NSSVBUT1JfMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1MjQ1IC8vIEludmFsaWQgdGVtcGxhdGUgZGVzY3JpcHRvci4NCisjZGVmaW5lIEVSUl9URU1QTEFURV9ERVNDUklQVE9SXzMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTI0NCAvLyBJbnZhbGlkIHRlbXBsYXRlIGRlc2NyaXB0b3IuDQorI2RlZmluZSBFUlJfVEVNUExBVEVfREVTQ1JJUFRPUl80ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTUyNDMgLy8gVGhlIHRlbXBsYXRlIGRlc2NyaXB0b3Igd2FzIGNyZWF0ZWQgd2l0aCBhIG5ld2VyIHZlcnNpb24gb2YgTkkgVmlzaW9uLiBVcGdyYWRlIHRvIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiBOSSBWaXNpb24gdG8gdXNlIHRoaXMgdGVtcGxhdGUuDQorI2RlZmluZSBFUlJfVEVNUExBVEVfREVTQ1JJUFRPUl9ST1RBVElPTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTUyNDIgLy8gSW52YWxpZCB0ZW1wbGF0ZSBkZXNjcmlwdG9yLg0KKyNkZWZpbmUgRVJSX1RFTVBMQVRFX0RFU0NSSVBUT1JfTk9ST1RBVElPTiAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1MjQxIC8vIFRoZSB0ZW1wbGF0ZSBkZXNjcmlwdG9yIGRvZXMgbm90IGNvbnRhaW4gZGF0YSByZXF1aXJlZCBmb3Igcm90YXRpb24taW52YXJpYW50IG1hdGNoaW5nLg0KKyNkZWZpbmUgRVJSX1RFTVBMQVRFX0RFU0NSSVBUT1JfUk9UQVRJT05fMSAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1MjQwIC8vIEludmFsaWQgdGVtcGxhdGUgZGVzY3JpcHRvci4NCisjZGVmaW5lIEVSUl9URU1QTEFURV9ERVNDUklQVE9SX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTIzOSAvLyBJbnZhbGlkIHRlbXBsYXRlIGRlc2NyaXB0b3IuDQorI2RlZmluZSBFUlJfVEVNUExBVEVfREVTQ1JJUFRPUl9OT1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTUyMzggLy8gVGhlIHRlbXBsYXRlIGRlc2NyaXB0b3IgZG9lcyBub3QgY29udGFpbiBkYXRhIHJlcXVpcmVkIGZvciBzaGlmdC1pbnZhcmlhbnQgbWF0Y2hpbmcuDQorI2RlZmluZSBFUlJfVEVNUExBVEVfREVTQ1JJUFRPUl9TSElGVF8xICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTUyMzcgLy8gSW52YWxpZCB0ZW1wbGF0ZSBkZXNjcmlwdG9yLg0KKyNkZWZpbmUgRVJSX1RFTVBMQVRFX0RFU0NSSVBUT1JfTk9TQ0FMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1MjM2IC8vIFRoZSB0ZW1wbGF0ZSBkZXNjcmlwdG9yIGRvZXMgbm90IGNvbnRhaW4gZGF0YSByZXF1aXJlZCBmb3Igc2NhbGUtaW52YXJpYW50IG1hdGNoaW5nLg0KKyNkZWZpbmUgRVJSX1RFTVBMQVRFX0lNQUdFX0NPTlRSQVNUX1RPT19MT1cgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1MjM1IC8vIFRoZSB0ZW1wbGF0ZSBpbWFnZSBkb2VzIG5vdCBjb250YWluIGVub3VnaCBjb250cmFzdC4NCisjZGVmaW5lIEVSUl9URU1QTEFURV9JTUFHRV9UT09fU01BTEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTIzNCAvLyBUaGUgdGVtcGxhdGUgaW1hZ2UgaXMgdG9vIHNtYWxsLg0KKyNkZWZpbmUgRVJSX1RFTVBMQVRFX0lNQUdFX1RPT19MQVJHRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1MjMzIC8vIFRoZSB0ZW1wbGF0ZSBpbWFnZSBpcyB0b28gbGFyZ2UuDQorI2RlZmluZSBFUlJfVE9PX01BTllfT0NSX1NFU1NJT05TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTUyMTQgLy8gVGhlcmUgYXJlIHRvbyBtYW55IE9DUiBzZXNzaW9ucyBvcGVuLiAgWW91IG11c3QgY2xvc2UgYSBzZXNzaW9uIGJlZm9yZSB5b3UgY2FuIG9wZW4gYW5vdGhlciBvbmUuDQorI2RlZmluZSBFUlJfT0NSX1RFTVBMQVRFX1dST05HX1NJWkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTUyMTIgLy8gVGhlIHNpemUgb2YgdGhlIHRlbXBsYXRlIHN0cmluZyBtdXN0IG1hdGNoIHRoZSBzaXplIG9mIHRoZSBzdHJpbmcgeW91IGFyZSB0cnlpbmcgdG8gY29ycmVjdC4NCisjZGVmaW5lIEVSUl9PQ1JfQkFEX1RFWFRfVEVNUExBVEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTIxMSAvLyBUaGUgc3VwcGxpZWQgdGV4dCB0ZW1wbGF0ZSBjb250YWlucyBub25zdGFuZGFyZCBjaGFyYWN0ZXJzIHRoYXQgY2Fubm90IGJlIGdlbmVyYXRlZCBieSBPQ1IuDQorI2RlZmluZSBFUlJfT0NSX0NBTk5PVF9NQVRDSF9URVhUX1RFTVBMQVRFICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTUyMTAgLy8gQXQgbGVhc3Qgb25lIGNoYXJhY3RlciBpbiB0aGUgdGV4dCB0ZW1wbGF0ZSB3YXMgb2YgYSBsZXhpY2FsIGNsYXNzIHRoYXQgZGlkIG5vdCBtYXRjaCB0aGUgc3VwcGxpZWQgY2hhcmFjdGVyIHJlcG9ydHMuDQorI2RlZmluZSBFUlJfT0NSX0xJQl9JTklUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTUyMDMgLy8gVGhlIE9DUiBsaWJyYXJ5IGNhbm5vdCBiZSBpbml0aWFsaXplZCBjb3JyZWN0bHkuDQorI2RlZmluZSBFUlJfT0NSX0xPQURfTElCUkFSWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTUyMDEgLy8gVGhlcmUgd2FzIGEgZmFpbHVyZSB3aGVuIGxvYWRpbmcgb25lIG9mIHRoZSBpbnRlcm5hbCBPQ1IgZW5naW5lIG9yIExhYlZpZXcgbGlicmFyaWVzLg0KKyNkZWZpbmUgRVJSX09DUl9JTlZBTElEX1BBUkFNRVRFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1MjAwIC8vIE9uZSBvZiB0aGUgcGFyYW1ldGVycyBzdXBwbGllZCB0byB0aGUgT0NSIGZ1bmN0aW9uIHRoYXQgZ2VuZXJhdGVkIHRoaXMgZXJyb3IgaXMgaW52YWxpZC4NCisjZGVmaW5lIEVSUl9NQVJLRVJfSU5GT1JNQVRJT05fTk9UX1NVUFBMSUVEICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTE5OSAvLyBNYXJrZXIgaW1hZ2UgYW5kIHBvaW50cyBhcmUgbm90IHN1cHBsaWVkDQorI2RlZmluZSBFUlJfSU5DT01QQVRJQkxFX01BUktFUl9JTUFHRV9TSVpFICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTUxOTggLy8gU291cmNlIEltYWdlIGFuZCBNYXJrZXIgSW1hZ2Ugc2hvdWxkIGJlIG9mIHNhbWUgc2l6ZS4NCisjZGVmaW5lIEVSUl9CT1RIX01BUktFUl9JTlBVVFNfU1VQUExJRUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTE5NyAvLyBCb3RoIE1hcmtlciBJbWFnZSBhbmQgUG9pbnRzIGFyZSBzdXBwbGllZC4NCisjZGVmaW5lIEVSUl9JTlZBTElEX01PUlBIT0xPR0lDQUxfT1BFUkFUSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTE5NiAvLyBJbnZhbGlkIE1vcnBob2xvZ2ljYWwgT3BlcmF0aW9uLg0KKyNkZWZpbmUgRVJSX0lNQUdFX0NPTlRBSU5TX05BTl9WQUxVRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1MTk1IC8vIEZsb2F0IGltYWdlIGNvbnRhaW5zIE5hTiB2YWx1ZXMNCisjZGVmaW5lIEVSUl9PVkVSTEFZX0VYVFJBSU5GT19PUEVOSU5HX05FV19WRVJTSU9OICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTE5NCAvLyBUaGUgb3ZlcmxheSBpbmZvcm1hdGlvbiB5b3UgdHJpZWQgdG8gb3BlbiB3YXMgY3JlYXRlZCB3aXRoIGEgbmV3ZXIgdmVyc2lvbiBvZiBOSSBWaXNpb24uIFVwZ3JhZGUgdG8gdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIE5JIFZpc2lvbiB0byByZWFkIHRoaXMgZmlsZS4NCisjZGVmaW5lIEVSUl9OT19DTEFNUF9GT1VORCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTE5MyAvLyBObyB2YWxpZCBjbGFtcCB3YXMgZm91bmQgd2l0aCB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uDQorI2RlZmluZSBFUlJfTk9fQ0xBTVBfV0lUSElOX0FOR0xFX1JBTkdFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTUxOTIgLy8gU3VwcGxpZWQgYW5nbGUgcmFuZ2UgZm9yIGNsYW1wIGlzIGluc3VmZmljaWVudA0KKyNkZWZpbmUgRVJSX0dIVF9JTlZBTElEX1VTRV9BTExfQ1VSVkVTX1ZBTFVFICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1MTg4IC8vIFRoZSB1c2UgYWxsIGN1cnZlcyBhZHZhbmNlZCBvcHRpb24gc3BlY2lmaWVkIGR1cmluZyBsZWFybiBpcyBub3Qgc3VwcG9ydGVkDQorI2RlZmluZSBFUlJfSU5WQUxJRF9HQVVTU19TSUdNQV9WQUxVRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTUxODcgLy8gVGhlIHNpZ21hIHZhbHVlIHNwZWNpZmllZCBmb3IgdGhlIEdhdXNzaWFuIGZpbHRlciBpcyB0b28gc21hbGwuDQorI2RlZmluZSBFUlJfSU5WQUxJRF9HQVVTU19GSUxURVJfVFlQRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTUxODYgLy8gVGhlIHNwZWNpZmllZCBHYXVzc2lhbiBmaWx0ZXIgdHlwZSBpcyBub3Qgc3VwcG9ydGVkLg0KKyNkZWZpbmUgRVJSX0lOVkFMSURfQ09OVFJBU1RfUkVWRVJTQUxfTU9ERSAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1MTg1IC8vIFRoZSBjb250cmFzdCByZXZlcnNhbCBtb2RlIHNwZWNpZmllZCBkdXJpbmcgbWF0Y2hpbmcgaXMgaW52YWxpZC4NCisjZGVmaW5lIEVSUl9JTlZBTElEX1JPVEFUSU9OX1JBTkdFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTE4NCAvLyBJbnZhbGlkIHJvYXRpb24gYW5nbGUgcmFuZ2UuIFRoZSB1cHBlciBib3VuZCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB0aGUgbG93ZXIgYm91bmQuDQorI2RlZmluZSBFUlJfR0hUX0lOVkFMSURfTUlOSU1VTV9MRUFSTl9BTkdMRV9WQUxVRSAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTUxODMgLy8gVGhlIG1pbmltdW0gcm90YXRpb24gYW5nbGUgdmFsdWUgc3BlY2lmZWQgZHVyaW5nIGxlYXJuaW5nIG9mIHRoZSB0ZW1wbGF0ZSBpcyBub3Qgc3VwcG9ydGVkLg0KKyNkZWZpbmUgRVJSX0dIVF9JTlZBTElEX01BWElNVU1fTEVBUk5fQU5HTEVfVkFMVUUgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1MTgyIC8vIFRoZSBtYXhpbXVtIHJvdGF0aW9uIGFuZ2xlIHZhbHVlIHNwZWNpZmVkIGR1cmluZyBsZWFybmluZyBvZiB0aGUgdGVtcGxhdGUgaXMgbm90IHN1cHBvcnRlZC4NCisjZGVmaW5lIEVSUl9HSFRfSU5WQUxJRF9NQVhJTVVNX0xFQVJOX1NDQUxFX0ZBQ1RPUiAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTE4MSAvLyBUaGUgbWF4aW11bSBzY2FsZSBmYWN0b3Igc3BlY2lmZWQgZHVyaW5nIGxlYXJuaW5nIG9mIHRoZSB0ZW1wbGF0ZSBpcyBub3Qgc3VwcG9ydGVkLg0KKyNkZWZpbmUgRVJSX0dIVF9JTlZBTElEX01JTklNVU1fTEVBUk5fU0NBTEVfRkFDVE9SICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1MTgwIC8vIFRoZSBtaW5pbXVtIHNjYWxlIGZhY3RvciBzcGVjaWZlZCBkdXJpbmcgbGVhcm5pbmcgb2YgdGhlIHRlbXBsYXRlIGlzIG5vdCBzdXBwb3J0ZWQuDQorI2RlZmluZSBFUlJfT0NSX1BSRVBST0NFU1NJTkdfRkFJTEVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTUxNzkgLy8gVGhlIE9DUiBlbmdpbmUgZmFpbGVkIGR1cmluZyB0aGUgcHJlcHJvY2Vzc2luZyBzdGFnZS4NCisjZGVmaW5lIEVSUl9PQ1JfUkVDT0dOSVRJT05fRkFJTEVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTE3OCAvLyBUaGUgT0NSIGVuZ2luZSBmYWlsZWQgZHVyaW5nIHRoZSByZWNvZ25pdGlvbiBzdGFnZS4NCisjZGVmaW5lIEVSUl9PQ1JfQkFEX1VTRVJfRElDVElPTkFSWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTE3NSAvLyBUaGUgcHJvdmlkZWQgZmlsZW5hbWUgaXMgbm90IHZhbGlkIHVzZXIgZGljdGlvbmFyeSBmaWxlbmFtZS4NCisjZGVmaW5lIEVSUl9PQ1JfSU5WQUxJRF9BVVRPT1JJRU5UTU9ERSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTE3NCAvLyBOSSBWaXNpb24gZG9lcyBub3Qgc3VwcG9ydCB0aGUgQXV0b09yaWVudE1vZGUgdmFsdWUgeW91IHN1cHBsaWVkLg0KKyNkZWZpbmUgRVJSX09DUl9JTlZBTElEX0xBTkdVQUdFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1MTczIC8vIE5JIFZpc2lvbiBkb2VzIG5vdCBzdXBwb3J0IHRoZSBMYW5ndWFnZSB2YWx1ZSB5b3Ugc3VwcGxpZWQuDQorI2RlZmluZSBFUlJfT0NSX0lOVkFMSURfQ0hBUkFDVEVSU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTUxNzIgLy8gTkkgVmlzaW9uIGRvZXMgbm90IHN1cHBvcnQgdGhlIENoYXJhY3RlclNldCB2YWx1ZSB5b3Ugc3VwcGxpZWQuDQorI2RlZmluZSBFUlJfT0NSX0lOSV9GSUxFX05PVF9GT1VORCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTUxNzEgLy8gVGhlIHN5c3RlbSBjb3VsZCBub3QgbG9jYXRlIHRoZSBpbml0aWFsaXphdGlvbiBmaWxlIHJlcXVpcmVkIGZvciBPQ1IgaW5pdGlhbGl6YXRpb24uDQorI2RlZmluZSBFUlJfT0NSX0lOVkFMSURfQ0hBUkFDVEVSVFlQRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTUxNzAgLy8gTkkgVmlzaW9uIGRvZXMgbm90IHN1cHBvcnQgdGhlIENoYXJhY3RlclR5cGUgdmFsdWUgeW91IHN1cHBsaWVkLg0KKyNkZWZpbmUgRVJSX09DUl9JTlZBTElEX1JFQ09HTklUSU9OTU9ERSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1MTY5IC8vIE5JIFZpc2lvbiBkb2VzIG5vdCBzdXBwb3J0IHRoZSBSZWNvZ25pdGlvbk1vZGUgdmFsdWUgeW91IHN1cHBsaWVkLg0KKyNkZWZpbmUgRVJSX09DUl9JTlZBTElEX0FVVE9DT1JSRUNUSU9OTU9ERSAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1MTY4IC8vIE5JIFZpc2lvbiBkb2VzIG5vdCBzdXBwb3J0IHRoZSBBdXRvQ29ycmVjdGlvbk1vZGUgdmFsdWUgeW91IHN1cHBsaWVkLg0KKyNkZWZpbmUgRVJSX09DUl9JTlZBTElEX09VVFBVVERFTElNSVRFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1MTY3IC8vIE5JIFZpc2lvbiBkb2VzIG5vdCBzdXBwb3J0IHRoZSBPdXRwdXREZWxpbWl0ZXIgdmFsdWUgeW91IHN1cHBsaWVkLg0KKyNkZWZpbmUgRVJSX09DUl9CSU5fRElSX05PVF9GT1VORCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1MTY2IC8vIFRoZSBzeXN0ZW0gY291bGQgbm90IGxvY2F0ZSB0aGUgT0NSIGJpbmFyeSBkaXJlY3RvcnkgcmVxdWlyZWQgZm9yIE9DUiBpbml0aWFsaXphdGlvbi4NCisjZGVmaW5lIEVSUl9PQ1JfV1RTX0RJUl9OT1RfRk9VTkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTE2NSAvLyBUaGUgc3lzdGVtIGNvdWxkIG5vdCBsb2NhdGUgdGhlIE9DUiB3ZWlnaHRzIGRpcmVjdG9yeSByZXF1aXJlZCBmb3IgT0NSIGluaXRpYWxpemF0aW9uLg0KKyNkZWZpbmUgRVJSX09DUl9BRERfV09SRF9GQUlMRUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1MTY0IC8vIFRoZSBzdXBwbGllZCB3b3JkIGNvdWxkIG5vdCBiZSBhZGRlZCB0byB0aGUgdXNlciBkaWN0aW9uYXJ5Lg0KKyNkZWZpbmUgRVJSX09DUl9JTlZBTElEX0NIQVJBQ1RFUlBSRUZFUkVOQ0UgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1MTYzIC8vIE5JIFZpc2lvbiBkb2VzIG5vdCBzdXBwb3J0IHRoZSBDaGFyYWN0ZXJQcmVmZXJlbmNlIHZhbHVlIHlvdSBzdXBwbGllZC4NCisjZGVmaW5lIEVSUl9PQ1JfSU5WQUxJRF9DT1JSRUNUSU9OTU9ERSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTE2MiAvLyBOSSBWaXNpb24gZG9lcyBub3Qgc3VwcG9ydCB0aGUgQ29ycmVjdGlvbk1ldGhvZCB2YWx1ZSB5b3Ugc3VwcGxpZWQuDQorI2RlZmluZSBFUlJfT0NSX0lOVkFMSURfQ09SUkVDVElPTkxFVkVMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTUxNjEgLy8gTkkgVmlzaW9uIGRvZXMgbm90IHN1cHBvcnQgdGhlIENvcnJlY3Rpb25MZXZlbCB2YWx1ZSB5b3Ugc3VwcGxpZWQuDQorI2RlZmluZSBFUlJfT0NSX0lOVkFMSURfTUFYUE9JTlRTSVpFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTUxNjAgLy8gTkkgVmlzaW9uIGRvZXMgbm90IHN1cHBvcnQgdGhlIG1heGltdW0gcG9pbnQgc2l6ZSB5b3Ugc3VwcGxpZWQuICBWYWxpZCB2YWx1ZXMgcmFuZ2UgZnJvbSA0IHRvIDcyLg0KKyNkZWZpbmUgRVJSX09DUl9JTlZBTElEX1RPTEVSQU5DRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1MTU5IC8vIE5JIFZpc2lvbiBkb2VzIG5vdCBzdXBwb3J0IHRoZSB0b2xlcmFuY2UgdmFsdWUgeW91IHN1cHBsaWVkLiAgVmFsaWQgdmFsdWVzIGFyZSBub24tbmVnYXRpdmUuDQorI2RlZmluZSBFUlJfT0NSX0lOVkFMSURfQ09OVFJBU1RNT0RFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTUxNTggLy8gTkkgVmlzaW9uIGRvZXMgbm90IHN1cHBvcnQgdGhlIENvbnRyYXN0TW9kZSB2YWx1ZSB5b3Ugc3VwcGxpZWQuDQorI2RlZmluZSBFUlJfT0NSX1NLRVdfREVURUNUX0ZBSUxFRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTUxNTYgLy8gVGhlIE9DUiBhdHRlbXB0ZWQgdG8gZGV0ZWN0ZWQgdGhlIHRleHQgc2tldyBhbmQgZmFpbGVkLg0KKyNkZWZpbmUgRVJSX09DUl9PUklFTlRfREVURUNUX0ZBSUxFRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1MTU1IC8vIFRoZSBPQ1IgYXR0ZW1wdGVkIHRvIGRldGVjdGVkIHRoZSB0ZXh0IG9yaWVudGF0aW9uIGFuZCBmYWlsZWQuDQorI2RlZmluZSBFUlJfRk9OVF9GSUxFX0ZPUk1BVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTUxNTMgLy8gSW52YWxpZCBmb250IGZpbGUgZm9ybWF0Lg0KKyNkZWZpbmUgRVJSX0ZPTlRfRklMRV9OT1RfRk9VTkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1MTUyIC8vIEZvbnQgZmlsZSBub3QgZm91bmQuDQorI2RlZmluZSBFUlJfT0NSX0NPUlJFQ1RJT05fRkFJTEVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEwNzQzOTUxNTEgLy8gVGhlIE9DUiBlbmdpbmUgZmFpbGVkIGR1cmluZyB0aGUgY29ycmVjdGlvbiBzdGFnZS4NCisjZGVmaW5lIEVSUl9JTlZBTElEX1JPVU5ESU5HX01PREUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTE1MCAvLyBOSSBWaXNpb24gZG9lcyBub3Qgc3VwcG9ydCB0aGUgUm91bmRpbmdNb2RlIHZhbHVlIHlvdSBzdXBwbGllZC4NCisjZGVmaW5lIEVSUl9EVVBMSUNBVEVfVFJBTlNGT1JNX1RZUEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTE0OSAvLyBGb3VuZCBhIGR1cGxpY2F0ZSB0cmFuc2Zvcm0gdHlwZSBpbiB0aGUgcHJvcGVydGllcyBhcnJheS4gRWFjaCBwcm9wZXJ0aWVzIGFycmF5IG1heSBvbmx5IGNvbnRhaW4gb25lIGJlaGF2aW9yIGZvciBlYWNoIHRyYW5zZm9ybSB0eXBlLg0KKyNkZWZpbmUgRVJSX09WRVJMQVlfR1JPVVBfTk9UX0ZPVU5EICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1MTQ4IC8vIE92ZXJsYXkgR3JvdXAgTm90IEZvdW5kLg0KKyNkZWZpbmUgRVJSX0JBUkNPREVfUlNTTElNSVRFRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1MTQ3IC8vIFRoZSBiYXJjb2RlIGlzIG5vdCBhIHZhbGlkIFJTUyBMaW1pdGVkIHN5bWJvbA0KKyNkZWZpbmUgRVJSX1FSX0RFVEVDVElPTl9WRVJTSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1MTQ2IC8vIENvdWxkbid0IGRldGVybWluZSB0aGUgY29ycmVjdCB2ZXJzaW9uIG9mIHRoZSBRUiBjb2RlLg0KKyNkZWZpbmUgRVJSX1FSX0lOVkFMSURfUkVBRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1MTQ1IC8vIEludmFsaWQgcmVhZCBvZiB0aGUgUVIgY29kZS4NCisjZGVmaW5lIEVSUl9RUl9JTlZBTElEX0JBUkNPREUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTE0NCAvLyBUaGUgYmFyY29kZSB0aGF0IHdhcyByZWFkIGNvbnRhaW5zIGludmFsaWQgcGFyYW1ldGVycy4NCisjZGVmaW5lIEVSUl9RUl9ERVRFQ1RJT05fTU9ERSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTE0MyAvLyBUaGUgZGF0YSBzdHJlYW0gdGhhdCB3YXMgZGVtb2R1bGF0ZWQgY291bGQgbm90IGJlIHJlYWQgYmVjYXVzZSB0aGUgbW9kZSB3YXMgbm90IGRldGVjdGVkLg0KKyNkZWZpbmUgRVJSX1FSX0RFVEVDVElPTl9NT0RFTFRZUEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1MTQyIC8vIENvdWxkbid0IGRldGVybWluZSB0aGUgY29ycmVjdCBtb2RlbCBvZiB0aGUgUVIgY29kZS4NCisjZGVmaW5lIEVSUl9PQ1JfTk9fVEVYVF9GT1VORCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTE0MSAvLyBUaGUgT0NSIGVuZ2luZSBjb3VsZCBub3QgZmluZCBhbnkgdGV4dCBpbiB0aGUgc3VwcGxpZWQgcmVnaW9uLg0KKyNkZWZpbmUgRVJSX09DUl9DSEFSX1JFUE9SVF9DT1JSVVBURUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1MTQwIC8vIE9uZSBvZiB0aGUgY2hhcmFjdGVyIHJlcG9ydHMgaXMgbm8gbG9uZ2VyIHVzYWJsZSBieSB0aGUgc3lzdGVtLg0KKyNkZWZpbmUgRVJSX0lNQVFfUVJfRElNRU5TSU9OX0lOVkFMSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xMDc0Mzk1MTM5IC8vIEludmFsaWQgRGltZW5zaW9ucy4NCisjZGVmaW5lIEVSUl9PQ1JfUkVHSU9OX1RPT19TTUFMTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMTA3NDM5NTEzOCAvLyBUaGUgT0NSIHJlZ2lvbiBwcm92aWRlZCB3YXMgdG9vIHNtYWxsIHRvIGhhdmUgY29udGFpbmVkIGFueSBjaGFyYWN0ZXJzLg0KKyNkZWZpbmUgX0ZJUlNUX0VSUiAgRVJSX1NZU1RFTV9FUlJPUg0KKyNkZWZpbmUgX0xBU1RfRVJSICAgRVJSX09DUl9SRUdJT05fVE9PX1NNQUxMDQorDQorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorLy8gIEVudW1lcmF0ZWQgVHlwZXMNCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCit0eXBlZGVmIGVudW0gUG9pbnRTeW1ib2xfZW51bSB7DQorICAgIElNQVFfUE9JTlRfQVNfUElYRUwgICAgICAgICAgPSAwLCAgICAgICAgICAgLy9BIHNpbmdsZSBwaXhlbCByZXByZXNlbnRzIGEgcG9pbnQgaW4gdGhlIG92ZXJsYXkuDQorICAgIElNQVFfUE9JTlRfQVNfQ1JPU1MgICAgICAgICAgPSAxLCAgICAgICAgICAgLy9BIGNyb3NzIHJlcHJlc2VudHMgYSBwb2ludCBpbiB0aGUgb3ZlcmxheS4NCisgICAgSU1BUV9QT0lOVF9VU0VSX0RFRklORUQgICAgICA9IDIsICAgICAgICAgICAvL1RoZSBwYXR0ZXJuIHN1cHBsaWVkIGJ5IHRoZSB1c2VyIHJlcHJlc2VudHMgYSBwb2ludCBpbiB0aGUgb3ZlcmxheS4NCisgICAgSU1BUV9QT0lOVF9TWU1CT0xfU0laRV9HVUFSRCA9IDB4RkZGRkZGRkYgICANCit9IFBvaW50U3ltYm9sOw0KKw0KK3R5cGVkZWYgZW51bSBNZWFzdXJlbWVudFZhbHVlX2VudW0gew0KKyAgICBJTUFRX0FSRUEgICAgICAgICAgICAgICAgICAgICAgICAgPSAwLCAgICAgICAgICAgLy9TdXJmYWNlIGFyZWEgb2YgdGhlIHBhcnRpY2xlIGluIHBpeGVscy4NCisgICAgSU1BUV9BUkVBX0NBTElCUkFURUQgICAgICAgICAgICAgID0gMSwgICAgICAgICAgIC8vU3VyZmFjZSBhcmVhIG9mIHRoZSBwYXJ0aWNsZSBpbiBjYWxpYnJhdGVkIHVuaXRzLg0KKyAgICBJTUFRX05VTV9IT0xFUyAgICAgICAgICAgICAgICAgICAgPSAyLCAgICAgICAgICAgLy9OdW1iZXIgb2YgaG9sZXMgaW4gdGhlIHBhcnRpY2xlLg0KKyAgICBJTUFRX0FSRUFfT0ZfSE9MRVMgICAgICAgICAgICAgICAgPSAzLCAgICAgICAgICAgLy9TdXJmYWNlIGFyZWEgb2YgdGhlIGhvbGVzIGluIGNhbGlicmF0ZWQgdW5pdHMuDQorICAgIElNQVFfVE9UQUxfQVJFQSAgICAgICAgICAgICAgICAgICA9IDQsICAgICAgICAgICAvL1RvdGFsIHN1cmZhY2UgYXJlYSAoaG9sZXMgYW5kIHBhcnRpY2xlKSBpbiBjYWxpYnJhdGVkIHVuaXRzLg0KKyAgICBJTUFRX0lNQUdFX0FSRUEgICAgICAgICAgICAgICAgICAgPSA1LCAgICAgICAgICAgLy9TdXJmYWNlIGFyZWEgb2YgdGhlIGVudGlyZSBpbWFnZSBpbiBjYWxpYnJhdGVkIHVuaXRzLg0KKyAgICBJTUFRX1BBUlRJQ0xFX1RPX0lNQUdFICAgICAgICAgICAgPSA2LCAgICAgICAgICAgLy9SYXRpbywgZXhwcmVzc2VkIGFzIGEgcGVyY2VudGFnZSwgb2YgdGhlIHN1cmZhY2UgYXJlYSBvZiBhIHBhcnRpY2xlIGluIHJlbGF0aW9uIHRvIHRoZSB0b3RhbCBhcmVhIG9mIHRoZSBwYXJ0aWNsZS4NCisgICAgSU1BUV9QQVJUSUNMRV9UT19UT1RBTCAgICAgICAgICAgID0gNywgICAgICAgICAgIC8vUmF0aW8sIGV4cHJlc3NlZCBhcyBhIHBlcmNlbnRhZ2UsIG9mIHRoZSBzdXJmYWNlIGFyZWEgb2YgYSBwYXJ0aWNsZSBpbiByZWxhdGlvbiB0byB0aGUgdG90YWwgYXJlYSBvZiB0aGUgcGFydGljbGUuDQorICAgIElNQVFfQ0VOVEVSX01BU1NfWCAgICAgICAgICAgICAgICA9IDgsICAgICAgICAgICAvL1gtY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIG1hc3MuDQorICAgIElNQVFfQ0VOVEVSX01BU1NfWSAgICAgICAgICAgICAgICA9IDksICAgICAgICAgICAvL1ktY29vcmRpbmF0ZSBvZiB0aGUgY2VudGVyIG9mIG1hc3MuDQorICAgIElNQVFfTEVGVF9DT0xVTU4gICAgICAgICAgICAgICAgICA9IDEwLCAgICAgICAgICAvL0xlZnQgZWRnZSBvZiB0aGUgYm91bmRpbmcgcmVjdGFuZ2xlLg0KKyAgICBJTUFRX1RPUF9ST1cgICAgICAgICAgICAgICAgICAgICAgPSAxMSwgICAgICAgICAgLy9Ub3AgZWRnZSBvZiB0aGUgYm91bmRpbmcgcmVjdGFuZ2xlLg0KKyAgICBJTUFRX1JJR0hUX0NPTFVNTiAgICAgICAgICAgICAgICAgPSAxMiwgICAgICAgICAgLy9SaWdodCBlZGdlIG9mIHRoZSBib3VuZGluZyByZWN0YW5nbGUuDQorICAgIElNQVFfQk9UVE9NX1JPVyAgICAgICAgICAgICAgICAgICA9IDEzLCAgICAgICAgICAvL0JvdHRvbSBlZGdlIG9mIGJvdW5kaW5nIHJlY3RhbmdsZS4NCisgICAgSU1BUV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgID0gMTQsICAgICAgICAgIC8vV2lkdGggb2YgYm91bmRpbmcgcmVjdGFuZ2xlIGluIGNhbGlicmF0ZWQgdW5pdHMuDQorICAgIElNQVFfSEVJR0hUICAgICAgICAgICAgICAgICAgICAgICA9IDE1LCAgICAgICAgICAvL0hlaWdodCBvZiBib3VuZGluZyByZWN0YW5nbGUgaW4gY2FsaWJyYXRlZCB1bml0cy4NCisgICAgSU1BUV9NQVhfU0VHTUVOVF9MRU5HVEggICAgICAgICAgID0gMTYsICAgICAgICAgIC8vTGVuZ3RoIG9mIGxvbmdlc3QgaG9yaXpvbnRhbCBsaW5lIHNlZ21lbnQuDQorICAgIElNQVFfTUFYX1NFR01FTlRfTEVGVF9DT0xVTU4gICAgICA9IDE3LCAgICAgICAgICAvL0xlZnRtb3N0IHgtY29vcmRpbmF0ZSBvZiBsb25nZXN0IGhvcml6b250YWwgbGluZSBzZWdtZW50Lg0KKyAgICBJTUFRX01BWF9TRUdNRU5UX1RPUF9ST1cgICAgICAgICAgPSAxOCwgICAgICAgICAgLy9ZLWNvb3JkaW5hdGUgb2YgbG9uZ2VzdCBob3Jpem9udGFsIGxpbmUgc2VnbWVudC4NCisgICAgSU1BUV9QRVJJTUVURVIgICAgICAgICAgICAgICAgICAgID0gMTksICAgICAgICAgIC8vT3V0ZXIgcGVyaW1ldGVyIG9mIHRoZSBwYXJ0aWNsZS4NCisgICAgSU1BUV9QRVJJTUVURVJfT0ZfSE9MRVMgICAgICAgICAgID0gMjAsICAgICAgICAgIC8vUGVyaW1ldGVyIG9mIGFsbCBob2xlcyB3aXRoaW4gdGhlIHBhcnRpY2xlLg0KKyAgICBJTUFRX1NJR01BX1ggICAgICAgICAgICAgICAgICAgICAgPSAyMSwgICAgICAgICAgLy9TdW0gb2YgdGhlIHBhcnRpY2xlIHBpeGVscyBvbiB0aGUgeC1heGlzLg0KKyAgICBJTUFRX1NJR01BX1kgICAgICAgICAgICAgICAgICAgICAgPSAyMiwgICAgICAgICAgLy9TdW0gb2YgdGhlIHBhcnRpY2xlIHBpeGVscyBvbiB0aGUgeS1heGlzLg0KKyAgICBJTUFRX1NJR01BX1hYICAgICAgICAgICAgICAgICAgICAgPSAyMywgICAgICAgICAgLy9TdW0gb2YgdGhlIHBhcnRpY2xlIHBpeGVscyBvbiB0aGUgeC1heGlzIHNxdWFyZWQuDQorICAgIElNQVFfU0lHTUFfWVkgICAgICAgICAgICAgICAgICAgICA9IDI0LCAgICAgICAgICAvL1N1bSBvZiB0aGUgcGFydGljbGUgcGl4ZWxzIG9uIHRoZSB5LWF4aXMgc3F1YXJlZC4NCisgICAgSU1BUV9TSUdNQV9YWSAgICAgICAgICAgICAgICAgICAgID0gMjUsICAgICAgICAgIC8vU3VtIG9mIHRoZSBwYXJ0aWNsZSBwaXhlbHMgb24gdGhlIHgtYXhpcyBhbmQgeS1heGlzLg0KKyAgICBJTUFRX1BST0pfWCAgICAgICAgICAgICAgICAgICAgICAgPSAyNiwgICAgICAgICAgLy9Qcm9qZWN0aW9uIGNvcnJlY3RlZCBpbiBYLg0KKyAgICBJTUFRX1BST0pfWSAgICAgICAgICAgICAgICAgICAgICAgPSAyNywgICAgICAgICAgLy9Qcm9qZWN0aW9uIGNvcnJlY3RlZCBpbiBZLg0KKyAgICBJTUFRX0lORVJUSUFfWFggICAgICAgICAgICAgICAgICAgPSAyOCwgICAgICAgICAgLy9JbmVydGlhIG1hdHJpeCBjb2VmZmljaWVudCBpbiBYWC4NCisgICAgSU1BUV9JTkVSVElBX1lZICAgICAgICAgICAgICAgICAgID0gMjksICAgICAgICAgIC8vSW5lcnRpYSBtYXRyaXggY29lZmZpY2llbnQgaW4gWVkuDQorICAgIElNQVFfSU5FUlRJQV9YWSAgICAgICAgICAgICAgICAgICA9IDMwLCAgICAgICAgICAvL0luZXJ0aWEgbWF0cml4IGNvZWZmaWNpZW50IGluIFhZLg0KKyAgICBJTUFRX01FQU5fSCAgICAgICAgICAgICAgICAgICAgICAgPSAzMSwgICAgICAgICAgLy9NZWFuIGxlbmd0aCBvZiBob3Jpem9udGFsIHNlZ21lbnRzLg0KKyAgICBJTUFRX01FQU5fViAgICAgICAgICAgICAgICAgICAgICAgPSAzMiwgICAgICAgICAgLy9NZWFuIGxlbmd0aCBvZiB2ZXJ0aWNhbCBzZWdtZW50cy4NCisgICAgSU1BUV9NQVhfSU5URVJDRVBUICAgICAgICAgICAgICAgID0gMzMsICAgICAgICAgIC8vTGVuZ3RoIG9mIGxvbmdlc3Qgc2VnbWVudCBvZiB0aGUgY29udmV4IGh1bGwuDQorICAgIElNQVFfTUVBTl9JTlRFUkNFUFQgICAgICAgICAgICAgICA9IDM0LCAgICAgICAgICAvL01lYW4gbGVuZ3RoIG9mIHRoZSBjaG9yZHMgaW4gYW4gb2JqZWN0IHBlcnBlbmRpY3VsYXIgdG8gaXRzIG1heCBpbnRlcmNlcHQuDQorICAgIElNQVFfT1JJRU5UQVRJT04gICAgICAgICAgICAgICAgICA9IDM1LCAgICAgICAgICAvL1RoZSBvcmllbnRhdGlvbiBiYXNlZCBvbiB0aGUgaW5lcnRpYSBvZiB0aGUgcGl4ZWxzIGluIHRoZSBwYXJ0aWNsZS4NCisgICAgSU1BUV9FUVVJVl9FTExJUFNFX01JTk9SICAgICAgICAgID0gMzYsICAgICAgICAgIC8vVG90YWwgbGVuZ3RoIG9mIHRoZSBheGlzIG9mIHRoZSBlbGxpcHNlIGhhdmluZyB0aGUgc2FtZSBhcmVhIGFzIHRoZSBwYXJ0aWNsZSBhbmQgYSBtYWpvciBheGlzIGVxdWFsIHRvIGhhbGYgdGhlIG1heCBpbnRlcmNlcHQuDQorICAgIElNQVFfRUxMSVBTRV9NQUpPUiAgICAgICAgICAgICAgICA9IDM3LCAgICAgICAgICAvL1RvdGFsIGxlbmd0aCBvZiBtYWpvciBheGlzIGhhdmluZyB0aGUgc2FtZSBhcmVhIGFuZCBwZXJpbWV0ZXIgYXMgdGhlIHBhcnRpY2xlIGluIGNhbGlicmF0ZWQgdW5pdHMuDQorICAgIElNQVFfRUxMSVBTRV9NSU5PUiAgICAgICAgICAgICAgICA9IDM4LCAgICAgICAgICAvL1RvdGFsIGxlbmd0aCBvZiBtaW5vciBheGlzIGhhdmluZyB0aGUgc2FtZSBhcmVhIGFuZCBwZXJpbWV0ZXIgYXMgdGhlIHBhcnRpY2xlIGluIGNhbGlicmF0ZWQgdW5pdHMuDQorICAgIElNQVFfRUxMSVBTRV9SQVRJTyAgICAgICAgICAgICAgICA9IDM5LCAgICAgICAgICAvL0ZyYWN0aW9uIG9mIG1ham9yIGF4aXMgdG8gbWlub3IgYXhpcy4NCisgICAgSU1BUV9SRUNUX0xPTkdfU0lERSAgICAgICAgICAgICAgID0gNDAsICAgICAgICAgIC8vTGVuZ3RoIG9mIHRoZSBsb25nIHNpZGUgb2YgYSByZWN0YW5nbGUgaGF2aW5nIHRoZSBzYW1lIGFyZWEgYW5kIHBlcmltZXRlciBhcyB0aGUgcGFydGljbGUgaW4gY2FsaWJyYXRlZCB1bml0cy4NCisgICAgSU1BUV9SRUNUX1NIT1JUX1NJREUgICAgICAgICAgICAgID0gNDEsICAgICAgICAgIC8vTGVuZ3RoIG9mIHRoZSBzaG9ydCBzaWRlIG9mIGEgcmVjdGFuZ2xlIGhhdmluZyB0aGUgc2FtZSBhcmVhIGFuZCBwZXJpbWV0ZXIgYXMgdGhlIHBhcnRpY2xlIGluIGNhbGlicmF0ZWQgdW5pdHMuDQorICAgIElNQVFfUkVDVF9SQVRJTyAgICAgICAgICAgICAgICAgICA9IDQyLCAgICAgICAgICAvL1JhdGlvIG9mIHJlY3RhbmdsZSBsb25nIHNpZGUgdG8gcmVjdGFuZ2xlIHNob3J0IHNpZGUuDQorICAgIElNQVFfRUxPTkdBVElPTiAgICAgICAgICAgICAgICAgICA9IDQzLCAgICAgICAgICAvL01heCBpbnRlcmNlcHQvbWVhbiBwZXJwZW5kaWN1bGFyIGludGVyY2VwdC4NCisgICAgSU1BUV9DT01QQUNUTkVTUyAgICAgICAgICAgICAgICAgID0gNDQsICAgICAgICAgIC8vUGFydGljbGUgYXJlYS8oaGVpZ2h0IHggd2lkdGgpLg0KKyAgICBJTUFRX0hFWVdPT0QgICAgICAgICAgICAgICAgICAgICAgPSA0NSwgICAgICAgICAgLy9QYXJ0aWNsZSBwZXJpbWV0ZXIvcGVyaW1ldGVyIG9mIHRoZSBjaXJjbGUgaGF2aW5nIHRoZSBzYW1lIGFyZWEgYXMgdGhlIHBhcnRpY2xlLg0KKyAgICBJTUFRX1RZUEVfRkFDVE9SICAgICAgICAgICAgICAgICAgPSA0NiwgICAgICAgICAgLy9BIGNvbXBsZXggZmFjdG9yIHJlbGF0aW5nIHRoZSBzdXJmYWNlIGFyZWEgdG8gdGhlIG1vbWVudCBvZiBpbmVydGlhLg0KKyAgICBJTUFRX0hZRFJBVUxJQyAgICAgICAgICAgICAgICAgICAgPSA0NywgICAgICAgICAgLy9QYXJ0aWNsZSBhcmVhL3BhcnRpY2xlIHBlcmltZXRlci4NCisgICAgSU1BUV9XQURETEVfRElTSyAgICAgICAgICAgICAgICAgID0gNDgsICAgICAgICAgIC8vRGlhbWV0ZXIgb2YgdGhlIGRpc2sgaGF2aW5nIHRoZSBzYW1lIGFyZWEgYXMgdGhlIHBhcnRpY2xlIGluIHVzZXIgdW5pdHMuDQorICAgIElNQVFfRElBR09OQUwgICAgICAgICAgICAgICAgICAgICA9IDQ5LCAgICAgICAgICAvL0RpYWdvbmFsIG9mIGFuIGVxdWl2YWxlbnQgcmVjdGFuZ2xlIGluIHVzZXIgdW5pdHMuDQorICAgIElNQVFfTUVBU1VSRU1FTlRfVkFMVUVfU0laRV9HVUFSRCA9IDB4RkZGRkZGRkYgICANCit9IE1lYXN1cmVtZW50VmFsdWU7DQorDQordHlwZWRlZiBlbnVtIFNjYWxpbmdNb2RlX2VudW0gew0KKyAgICBJTUFRX1NDQUxFX0xBUkdFUiAgICAgICAgICAgID0gMCwgICAgICAgICAgIC8vVGhlIGZ1bmN0aW9uIGR1cGxpY2F0ZXMgcGl4ZWxzIHRvIG1ha2UgdGhlIGltYWdlIGxhcmdlci4NCisgICAgSU1BUV9TQ0FMRV9TTUFMTEVSICAgICAgICAgICA9IDEsICAgICAgICAgICAvL1RoZSBmdW5jdGlvbiBzdWJzYW1wbGVzIHBpeGVscyB0byBtYWtlIHRoZSBpbWFnZSBzbWFsbGVyLg0KKyAgICBJTUFRX1NDQUxJTkdfTU9ERV9TSVpFX0dVQVJEID0gMHhGRkZGRkZGRiAgIA0KK30gU2NhbGluZ01vZGU7DQorDQordHlwZWRlZiBlbnVtIFNjYWxpbmdNZXRob2RfZW51bSB7DQorICAgIElNQVFfU0NBTEVfVE9fUFJFU0VSVkVfQVJFQSAgICA9IDAsICAgICAgICAgICAvL0NvcnJlY3Rpb24gZnVuY3Rpb25zIHNjYWxlIHRoZSBpbWFnZSBzdWNoIHRoYXQgdGhlIGZlYXR1cmVzIGluIHRoZSBjb3JyZWN0ZWQgaW1hZ2UgaGF2ZSB0aGUgc2FtZSBhcmVhIGFzIHRoZSBmZWF0dXJlcyBpbiB0aGUgaW5wdXQgaW1hZ2UuDQorICAgIElNQVFfU0NBTEVfVE9fRklUICAgICAgICAgICAgICA9IDEsICAgICAgICAgICAvL0NvcnJlY3Rpb24gZnVuY3Rpb25zIHNjYWxlIHRoZSBpbWFnZSBzdWNoIHRoYXQgdGhlIGNvcnJlY3RlZCBpbWFnZSBpcyB0aGUgc2FtZSBzaXplIGFzIHRoZSBpbnB1dCBpbWFnZS4NCisgICAgSU1BUV9TQ0FMSU5HX01FVEhPRF9TSVpFX0dVQVJEID0gMHhGRkZGRkZGRiAgIA0KK30gU2NhbGluZ01ldGhvZDsNCisNCit0eXBlZGVmIGVudW0gUmVmZXJlbmNlTW9kZV9lbnVtIHsNCisgICAgSU1BUV9DT09SRF9YX1kgICAgICAgICAgICAgICAgID0gMCwgICAgICAgICAgIC8vVGhpcyBtZXRob2QgcmVxdWlyZXMgdGhyZWUgZWxlbWVudHMgaW4gdGhlIHBvaW50cyBhcnJheS4NCisgICAgSU1BUV9DT09SRF9PUklHSU5fWCAgICAgICAgICAgID0gMSwgICAgICAgICAgIC8vVGhpcyBtZXRob2QgcmVxdWlyZXMgdHdvIGVsZW1lbnRzIGluIHRoZSBwb2ludHMgYXJyYXkuDQorICAgIElNQVFfUkVGRVJFTkNFX01PREVfU0laRV9HVUFSRCA9IDB4RkZGRkZGRkYgICANCit9IFJlZmVyZW5jZU1vZGU7DQorDQordHlwZWRlZiBlbnVtIFJlY3RPcmllbnRhdGlvbl9lbnVtIHsNCisgICAgSU1BUV9CQVNFX0lOU0lERSAgICAgICAgICAgICAgICAgPSAwLCAgICAgICAgICAgLy9TcGVjaWZpZXMgdGhhdCB0aGUgYmFzZSBvZiB0aGUgcmVjdGFuZ3VsYXIgaW1hZ2UgbGllcyBhbG9uZyB0aGUgaW5zaWRlIGVkZ2Ugb2YgdGhlIGFubnVsdXMuDQorICAgIElNQVFfQkFTRV9PVVRTSURFICAgICAgICAgICAgICAgID0gMSwgICAgICAgICAgIC8vU3BlY2lmaWVzIHRoYXQgdGhlIGJhc2Ugb2YgdGhlIHJlY3Rhbmd1bGFyIGltYWdlIGxpZXMgYWxvbmcgdGhlIG91dHNpZGUgZWRnZSBvZiB0aGUgYW5udWx1cy4NCisgICAgSU1BUV9URVhUX09SSUVOVEFUSU9OX1NJWkVfR1VBUkQgPSAweEZGRkZGRkZGICAgDQorfSBSZWN0T3JpZW50YXRpb247DQorDQordHlwZWRlZiBlbnVtIFNoYXBlTW9kZV9lbnVtIHsNCisgICAgSU1BUV9TSEFQRV9SRUNUICAgICAgICAgICAgPSAxLCAgICAgICAgICAgLy9UaGUgZnVuY3Rpb24gZHJhd3MgYSByZWN0YW5nbGUuDQorICAgIElNQVFfU0hBUEVfT1ZBTCAgICAgICAgICAgID0gMiwgICAgICAgICAgIC8vVGhlIGZ1bmN0aW9uIGRyYXdzIGFuIG92YWwuDQorICAgIElNQVFfU0hBUEVfTU9ERV9TSVpFX0dVQVJEID0gMHhGRkZGRkZGRiAgIA0KK30gU2hhcGVNb2RlOw0KKw0KK3R5cGVkZWYgZW51bSBQb2xhcml0eVR5cGVfZW51bSB7DQorICAgIElNQVFfRURHRV9SSVNJTkcgICAgICAgICAgICAgID0gMSwgICAgICAgICAgIC8vVGhlIGVkZ2UgaXMgYSByaXNpbmcgZWRnZS4NCisgICAgSU1BUV9FREdFX0ZBTExJTkcgICAgICAgICAgICAgPSAtMSwgICAgICAgICAgLy9UaGUgZWRnZSBpcyBhIGZhbGxpbmcgZWRnZS4NCisgICAgSU1BUV9QT0xBUklUWV9UWVBFX1NJWkVfR1VBUkQgPSAweEZGRkZGRkZGICAgDQorfSBQb2xhcml0eVR5cGU7DQorDQordHlwZWRlZiBlbnVtIFNpemVUeXBlX2VudW0gew0KKyAgICBJTUFRX0tFRVBfTEFSR0UgICAgICAgICAgID0gMCwgICAgICAgICAgIC8vVGhlIGZ1bmN0aW9uIGtlZXBzIGxhcmdlIHBhcnRpY2xlcyByZW1haW5pbmcgYWZ0ZXIgdGhlIGVyb3Npb24uDQorICAgIElNQVFfS0VFUF9TTUFMTCAgICAgICAgICAgPSAxLCAgICAgICAgICAgLy9UaGUgZnVuY3Rpb24ga2VlcHMgc21hbGwgcGFydGljbGVzIGVsaW1pbmF0ZWQgYnkgdGhlIGVyb3Npb24uDQorICAgIElNQVFfU0laRV9UWVBFX1NJWkVfR1VBUkQgPSAweEZGRkZGRkZGICAgDQorfSBTaXplVHlwZTsNCisNCit0eXBlZGVmIGVudW0gUGxhbmUzRF9lbnVtIHsNCisgICAgSU1BUV8zRF9SRUFMICAgICAgICAgICAgID0gMCwgICAgICAgICAgIC8vVGhlIGZ1bmN0aW9uIHNob3dzIHRoZSByZWFsIHBhcnQgb2YgY29tcGxleCBpbWFnZXMuDQorICAgIElNQVFfM0RfSU1BR0lOQVJZICAgICAgICA9IDEsICAgICAgICAgICAvL1RoZSBmdW5jdGlvbiBzaG93cyB0aGUgaW1hZ2luYXJ5IHBhcnQgb2YgY29tcGxleCBpbWFnZXMuDQorICAgIElNQVFfM0RfTUFHTklUVURFICAgICAgICA9IDIsICAgICAgICAgICAvL1RoZSBmdW5jdGlvbiBzaG93cyB0aGUgbWFnbml0dWRlIHBhcnQgb2YgY29tcGxleCBpbWFnZXMuDQorICAgIElNQVFfM0RfUEhBU0UgICAgICAgICAgICA9IDMsICAgICAgICAgICAvL1RoZSBmdW5jdGlvbiBzaG93cyB0aGUgcGhhc2UgcGFydCBvZiBjb21wbGV4IGltYWdlcy4NCisgICAgSU1BUV9QTEFORV8zRF9TSVpFX0dVQVJEID0gMHhGRkZGRkZGRiAgIA0KK30gUGxhbmUzRDsNCisNCit0eXBlZGVmIGVudW0gUGhvdG9tZXRyaWNNb2RlX2VudW0gew0KKyAgICBJTUFRX1dISVRFX0lTX1pFUk8gICAgICAgICAgICAgICA9IDAsICAgICAgICAgICAvL1RoZSBmdW5jdGlvbiBpbnRlcnByZXRzIHplcm8tdmFsdWUgcGl4ZWxzIGFzIHdoaXRlLg0KKyAgICBJTUFRX0JMQUNLX0lTX1pFUk8gICAgICAgICAgICAgICA9IDEsICAgICAgICAgICAvL1RoZSBmdW5jdGlvbiBpbnRlcnByZXRzIHplcm8tdmFsdWUgcGl4ZWxzIGFzIGJsYWNrLg0KKyAgICBJTUFRX1BIT1RPTUVUUklDX01PREVfU0laRV9HVUFSRCA9IDB4RkZGRkZGRkYgICANCit9IFBob3RvbWV0cmljTW9kZTsNCisNCit0eXBlZGVmIGVudW0gUGFydGljbGVJbmZvTW9kZV9lbnVtIHsNCisgICAgSU1BUV9CQVNJQ19JTkZPICAgICAgICAgICAgICAgICAgICA9IDAsICAgICAgICAgICAvL1RoZSBmdW5jdGlvbiByZXR1cm5zIG9ubHkgdGhlIGZvbGxvd2luZyBlbGVtZW50cyBvZiBlYWNoIHJlcG9ydDogYXJlYSwgY2FsaWJyYXRlZEFyZWEsIGJvdW5kaW5nUmVjdC4NCisgICAgSU1BUV9BTExfSU5GTyAgICAgICAgICAgICAgICAgICAgICA9IDEsICAgICAgICAgICAvL1RoZSBmdW5jdGlvbiByZXR1cm5zIGFsbCB0aGUgaW5mb3JtYXRpb24gYWJvdXQgZWFjaCBwYXJ0aWNsZS4NCisgICAgSU1BUV9QQVJUSUNMRV9JTkZPX01PREVfU0laRV9HVUFSRCA9IDB4RkZGRkZGRkYgICANCit9IFBhcnRpY2xlSW5mb01vZGU7DQorDQordHlwZWRlZiBlbnVtIE91dGxpbmVNZXRob2RfZW51bSB7DQorICAgIElNQVFfRURHRV9ESUZGRVJFTkNFICAgICAgICAgICA9IDAsICAgICAgICAgICAvL1RoZSBmdW5jdGlvbiB1c2VzIGEgbWV0aG9kIHRoYXQgcHJvZHVjZXMgY29udGludW91cyBjb250b3VycyBieSBoaWdobGlnaHRpbmcgZWFjaCBwaXhlbCB3aGVyZSBhbiBpbnRlbnNpdHkgdmFyaWF0aW9uIG9jY3VycyBiZXR3ZWVuIGl0c2VsZiBhbmQgaXRzIHRocmVlIHVwcGVyLWxlZnQgbmVpZ2hib3JzLg0KKyAgICBJTUFRX0VER0VfR1JBRElFTlQgICAgICAgICAgICAgPSAxLCAgICAgICAgICAgLy9UaGUgZnVuY3Rpb24gdXNlcyBhIG1ldGhvZCB0aGF0IG91dGxpbmVzIGNvbnRvdXJzIHdoZXJlIGFuIGludGVuc2l0eSB2YXJpYXRpb24gb2NjdXJzIGFsb25nIHRoZSB2ZXJ0aWNhbCBheGlzLg0KKyAgICBJTUFRX0VER0VfUFJFV0lUVCAgICAgICAgICAgICAgPSAyLCAgICAgICAgICAgLy9UaGUgZnVuY3Rpb24gdXNlcyBhIG1ldGhvZCB0aGF0IGV4dHJhY3RzIHRoZSBvdXRlciBjb250b3VycyBvZiBvYmplY3RzLg0KKyAgICBJTUFRX0VER0VfUk9CRVJUUyAgICAgICAgICAgICAgPSAzLCAgICAgICAgICAgLy9UaGUgZnVuY3Rpb24gdXNlcyBhIG1ldGhvZCB0aGF0IG91dGxpbmVzIHRoZSBjb250b3VycyB0aGF0IGhpZ2hsaWdodCBwaXhlbHMgd2hlcmUgYW4gaW50ZW5zaXR5IHZhcmlhdGlvbiBvY2N1cnMgYWxvbmcgdGhlIGRpYWdvbmFsIGF4ZXMuDQorICAgIElNQVFfRURHRV9TSUdNQSAgICAgICAgICAgICAgICA9IDQsICAgICAgICAgICAvL1RoZSBmdW5jdGlvbiB1c2VzIGEgbWV0aG9kIHRoYXQgb3V0bGluZXMgY29udG91cnMgYW5kIGRldGFpbHMgYnkgc2V0dGluZyBwaXhlbHMgdG8gdGhlIG1lYW4gdmFsdWUgZm91bmQgaW4gdGhlaXIgbmVpZ2hib3Job29kLCBpZiB0aGVpciBkZXZpYXRpb24gZnJvbSB0aGlzIHZhbHVlIGlzIG5vdCBzaWduaWZpY2FudC4NCisgICAgSU1BUV9FREdFX1NPQkVMICAgICAgICAgICAgICAgID0gNSwgICAgICAgICAgIC8vVGhlIGZ1bmN0aW9uIHVzZXMgYSBtZXRob2QgdGhhdCBleHRyYWN0cyB0aGUgb3V0ZXIgY29udG91cnMgb2Ygb2JqZWN0cy4NCisgICAgSU1BUV9PVVRMSU5FX01FVEhPRF9TSVpFX0dVQVJEID0gMHhGRkZGRkZGRiAgIA0KK30gT3V0bGluZU1ldGhvZDsNCisNCit0eXBlZGVmIGVudW0gTW9ycGhvbG9neU1ldGhvZF9lbnVtIHsNCisgICAgSU1BUV9BVVRPTSAgICAgICAgICAgICAgICAgICAgICAgID0gMCwgICAgICAgICAgIC8vVGhlIGZ1bmN0aW9uIHVzZXMgYSB0cmFuc2Zvcm1hdGlvbiB0aGF0IGdlbmVyYXRlcyBzaW1wbGVyIHBhcnRpY2xlcyB0aGF0IGNvbnRhaW4gZmV3ZXIgZGV0YWlscy4NCisgICAgSU1BUV9DTE9TRSAgICAgICAgICAgICAgICAgICAgICAgID0gMSwgICAgICAgICAgIC8vVGhlIGZ1bmN0aW9uIHVzZXMgYSB0cmFuc2Zvcm1hdGlvbiB0aGF0IGZpbGxzIHRpbnkgaG9sZXMgYW5kIHNtb290aHMgYm91bmRhcmllcy4NCisgICAgSU1BUV9ESUxBVEUgICAgICAgICAgICAgICAgICAgICAgID0gMiwgICAgICAgICAgIC8vVGhlIGZ1bmN0aW9uIHVzZXMgYSB0cmFuc2Zvcm1hdGlvbiB0aGF0IGVsaW1pbmF0ZXMgdGlueSBob2xlcyBpc29sYXRlZCBpbiBwYXJ0aWNsZXMgYW5kIGV4cGFuZHMgdGhlIGNvbnRvdXIgb2YgdGhlIHBhcnRpY2xlcyBhY2NvcmRpbmcgdG8gdGhlIHRlbXBsYXRlIGRlZmluZWQgYnkgdGhlIHN0cnVjdHVyaW5nIGVsZW1lbnQuDQorICAgIElNQVFfRVJPREUgICAgICAgICAgICAgICAgICAgICAgICA9IDMsICAgICAgICAgICAvL1RoZSBmdW5jdGlvbiB1c2VzIGEgdHJhbnNmb3JtYXRpb24gdGhhdCBlbGltaW5hdGVzIHBpeGVscyBpc29sYXRlZCBpbiB0aGUgYmFja2dyb3VuZCBhbmQgZXJvZGVzIHRoZSBjb250b3VyIG9mIHBhcnRpY2xlcyBhY2NvcmRpbmcgdG8gdGhlIHRlbXBsYXRlIGRlZmluZWQgYnkgdGhlIHN0cnVjdHVyaW5nIGVsZW1lbnQuDQorICAgIElNQVFfR1JBRElFTlQgICAgICAgICAgICAgICAgICAgICA9IDQsICAgICAgICAgICAvL1RoZSBmdW5jdGlvbiB1c2VzIGEgdHJhbnNmb3JtYXRpb24gdGhhdCBsZWF2ZXMgb25seSB0aGUgcGl4ZWxzIHRoYXQgd291bGQgYmUgYWRkZWQgYnkgdGhlIGRpbGF0aW9uIHByb2Nlc3Mgb3IgZWxpbWluYXRlZCBieSB0aGUgZXJvc2lvbiBwcm9jZXNzLg0KKyAgICBJTUFRX0dSQURJRU5UT1VUICAgICAgICAgICAgICAgICAgPSA1LCAgICAgICAgICAgLy9UaGUgZnVuY3Rpb24gdXNlcyBhIHRyYW5zZm9ybWF0aW9uIHRoYXQgbGVhdmVzIG9ubHkgdGhlIHBpeGVscyB0aGF0IHdvdWxkIGJlIGFkZGVkIGJ5IHRoZSBkaWxhdGlvbiBwcm9jZXNzLg0KKyAgICBJTUFRX0dSQURJRU5USU4gICAgICAgICAgICAgICAgICAgPSA2LCAgICAgICAgICAgLy9UaGUgZnVuY3Rpb24gdXNlcyBhIHRyYW5zZm9ybWF0aW9uIHRoYXQgbGVhdmVzIG9ubHkgdGhlIHBpeGVscyB0aGF0IHdvdWxkIGJlIGVsaW1pbmF0ZWQgYnkgdGhlIGVyb3Npb24gcHJvY2Vzcy4NCisgICAgSU1BUV9ISVRNSVNTICAgICAgICAgICAgICAgICAgICAgID0gNywgICAgICAgICAgIC8vVGhlIGZ1bmN0aW9uIHVzZXMgYSB0cmFuc2Zvcm1hdGlvbiB0aGF0IGV4dHJhY3RzIGVhY2ggcGl4ZWwgbG9jYXRlZCBpbiBhIG5laWdoYm9yaG9vZCBleGFjdGx5IG1hdGNoaW5nIHRoZSB0ZW1wbGF0ZSBkZWZpbmVkIGJ5IHRoZSBzdHJ1Y3R1cmluZyBlbGVtZW50Lg0KKyAgICBJTUFRX09QRU4gICAgICAgICAgICAgICAgICAgICAgICAgPSA4LCAgICAgICAgICAgLy9UaGUgZnVuY3Rpb24gdXNlcyBhIHRyYW5zZm9ybWF0aW9uIHRoYXQgcmVtb3ZlcyBzbWFsbCBwYXJ0aWNsZXMgYW5kIHNtb290aHMgYm91bmRhcmllcy4NCisgICAgSU1BUV9QQ0xPU0UgICAgICAgICAgICAgICAgICAgICAgID0gOSwgICAgICAgICAgIC8vVGhlIGZ1bmN0aW9uIHVzZXMgYSB0cmFuc2Zvcm1hdGlvbiB0aGF0IGZpbGxzIHRpbnkgaG9sZXMgYW5kIHNtb290aHMgdGhlIGlubmVyIGNvbnRvdXIgb2YgcGFydGljbGVzIGFjY29yZGluZyB0byB0aGUgdGVtcGxhdGUgZGVmaW5lZCBieSB0aGUgc3RydWN0dXJpbmcgZWxlbWVudC4NCisgICAgSU1BUV9QT1BFTiAgICAgICAgICAgICAgICAgICAgICAgID0gMTAsICAgICAgICAgIC8vVGhlIGZ1bmN0aW9uIHVzZXMgYSB0cmFuc2Zvcm1hdGlvbiB0aGF0IHJlbW92ZXMgc21hbGwgcGFydGljbGVzIGFuZCBzbW9vdGhzIHRoZSBjb250b3VyIG9mIHBhcnRpY2xlcyBhY2NvcmRpbmcgdG8gdGhlIHRlbXBsYXRlIGRlZmluZWQgYnkgdGhlIHN0cnVjdHVyaW5nIGVsZW1lbnQuDQorICAgIElNQVFfVEhJQ0sgICAgICAgICAgICAgICAgICAgICAgICA9IDExLCAgICAgICAgICAvL1RoZSBmdW5jdGlvbiB1c2VzIGEgdHJhbnNmb3JtYXRpb24gdGhhdCBhZGRzIHRvIGFuIGltYWdlIHRob3NlIHBpeGVscyBsb2NhdGVkIGluIGEgbmVpZ2hib3Job29kIHRoYXQgbWF0Y2hlcyBhIHRlbXBsYXRlIHNwZWNpZmllZCBieSB0aGUgc3RydWN0dXJpbmcgZWxlbWVudC4NCisgICAgSU1BUV9USElOICAgICAgICAgICAgICAgICAgICAgICAgID0gMTIsICAgICAgICAgIC8vVGhlIGZ1bmN0aW9uIHVzZXMgYSB0cmFuc2Zvcm1hdGlvbiB0aGF0IGVsaW1pbmF0ZXMgcGl4ZWxzIHRoYXQgYXJlIGxvY2F0ZWQgaW4gYSBuZWlnaGJvcmhvb2QgbWF0Y2hpbmcgYSB0ZW1wbGF0ZSBzcGVjaWZpZWQgYnkgdGhlIHN0cnVjdHVyaW5nIGVsZW1lbnQuDQorICAgIElNQVFfTU9SUEhPTE9HWV9NRVRIT0RfU0laRV9HVUFSRCA9IDB4RkZGRkZGRkYgICANCit9IE1vcnBob2xvZ3lNZXRob2Q7DQorDQordHlwZWRlZiBlbnVtIE1ldGVyQXJjTW9kZV9lbnVtIHsNCisgICAgSU1BUV9NRVRFUl9BUkNfUk9JICAgICAgICAgICAgID0gMCwgICAgICAgICAgIC8vVGhlIGZ1bmN0aW9uIHVzZXMgdGhlIHJvaSBwYXJhbWV0ZXIgYW5kIGlnbm9yZXMgdGhlIGJhc2UsIHN0YXJ0LCBhbmQgZW5kIHBhcmFtZXRlcnMuDQorICAgIElNQVFfTUVURVJfQVJDX1BPSU5UUyAgICAgICAgICA9IDEsICAgICAgICAgICAvL1RoZSBmdW5jdGlvbiB1c2VzIHRoZSBiYXNlLHN0YXJ0LCBhbmQgZW5kIHBhcmFtZXRlcnMgYW5kIGlnbm9yZXMgdGhlIHJvaSBwYXJhbWV0ZXIuDQorICAgIElNQVFfTUVURVJfQVJDX01PREVfU0laRV9HVUFSRCA9IDB4RkZGRkZGRkYgICANCit9IE1ldGVyQXJjTW9kZTsNCisNCit0eXBlZGVmIGVudW0gUmFrZURpcmVjdGlvbl9lbnVtIHsNCisgICAgSU1BUV9MRUZUX1RPX1JJR0hUICAgICAgICAgICAgID0gMCwgICAgICAgICAgIC8vVGhlIGZ1bmN0aW9uIHNlYXJjaGVzIGZyb20gdGhlIGxlZnQgc2lkZSBvZiB0aGUgc2VhcmNoIGFyZWEgdG8gdGhlIHJpZ2h0IHNpZGUgb2YgdGhlIHNlYXJjaCBhcmVhLg0KKyAgICBJTUFRX1JJR0hUX1RPX0xFRlQgICAgICAgICAgICAgPSAxLCAgICAgICAgICAgLy9UaGUgZnVuY3Rpb24gc2VhcmNoZXMgZnJvbSB0aGUgcmlnaHQgc2lkZSBvZiB0aGUgc2VhcmNoIGFyZWEgdG8gdGhlIGxlZnQgc2lkZSBvZiB0aGUgc2VhcmNoIGFyZWEuDQorICAgIElNQVFfVE9QX1RPX0JPVFRPTSAgICAgICAgICAgICA9IDIsICAgICAgICAgICAvL1RoZSBmdW5jdGlvbiBzZWFyY2hlcyBmcm9tIHRoZSB0b3Agc2lkZSBvZiB0aGUgc2VhcmNoIGFyZWEgdG8gdGhlIGJvdHRvbSBzaWRlIG9mIHRoZSBzZWFyY2ggYXJlYS4NCisgICAgSU1BUV9CT1RUT01fVE9fVE9QICAgICAgICAgICAgID0gMywgICAgICAgICAgIC8vVGhlIGZ1bmN0aW9uIHNlYXJjaGVzIGZyb20gdGhlIGJvdHRvbSBzaWRlIG9mIHRoZSBzZWFyY2ggYXJlYSB0byB0aGUgdG9wIHNpZGUgb2YgdGhlIHNlYXJjaCBhcmVhLg0KKyAgICBJTUFRX1JBS0VfRElSRUNUSU9OX1NJWkVfR1VBUkQgPSAweEZGRkZGRkZGICAgDQorfSBSYWtlRGlyZWN0aW9uOw0KKw0KK3R5cGVkZWYgZW51bSBUcnVuY2F0ZU1vZGVfZW51bSB7DQorICAgIElNQVFfVFJVTkNBVEVfTE9XICAgICAgICAgICAgID0gMCwgICAgICAgICAgIC8vVGhlIGZ1bmN0aW9uIHRydW5jYXRlcyBsb3cgZnJlcXVlbmNpZXMuDQorICAgIElNQVFfVFJVTkNBVEVfSElHSCAgICAgICAgICAgID0gMSwgICAgICAgICAgIC8vVGhlIGZ1bmN0aW9uIHRydW5jYXRlcyBoaWdoIGZyZXF1ZW5jaWVzLg0KKyAgICBJTUFRX1RSVU5DQVRFX01PREVfU0laRV9HVUFSRCA9IDB4RkZGRkZGRkYgICANCit9IFRydW5jYXRlTW9kZTsNCisNCit0eXBlZGVmIGVudW0gQXR0ZW51YXRlTW9kZV9lbnVtIHsNCisgICAgSU1BUV9BVFRFTlVBVEVfTE9XICAgICAgICAgICAgID0gMCwgICAgICAgICAgIC8vVGhlIGZ1bmN0aW9uIGF0dGVudWF0ZXMgbG93IGZyZXF1ZW5jaWVzLg0KKyAgICBJTUFRX0FUVEVOVUFURV9ISUdIICAgICAgICAgICAgPSAxLCAgICAgICAgICAgLy9UaGUgZnVuY3Rpb24gYXR0ZW51YXRlcyBoaWdoIGZyZXF1ZW5jaWVzLg0KKyAgICBJTUFRX0FUVEVOVUFURV9NT0RFX1NJWkVfR1VBUkQgPSAweEZGRkZGRkZGICAgDQorfSBBdHRlbnVhdGVNb2RlOw0KKw0KK3R5cGVkZWYgZW51bSBXaW5kb3dUaHJlYWRQb2xpY3lfZW51bSB7DQorICAgIElNQVFfQ0FMTElOR19USFJFQUQgICAgICAgICAgICAgICAgICA9IDAsICAgICAgICAgICAvL1VzaW5nIHRoaXMgcG9saWN5LCBOSSBWaXNpb24gY3JlYXRlcyB3aW5kb3dzIGluIHRoZSB0aHJlYWQgdGhhdCBtYWtlcyB0aGUgZmlyc3QgZGlzcGxheSBmdW5jdGlvbiBjYWxsIGZvciBhIGdpdmVuIHdpbmRvdyBudW1iZXIuDQorICAgIElNQVFfU0VQQVJBVEVfVEhSRUFEICAgICAgICAgICAgICAgICA9IDEsICAgICAgICAgICAvL1VzaW5nIHRoaXMgcG9saWN5LCBOSSBWaXNpb24gY3JlYXRlcyB3aW5kb3dzIGluIGEgc2VwYXJhdGUgdGhyZWFkIGFuZCBwcm9jZXNzZXMgbWVzc2FnZXMgZm9yIHRoZSB3aW5kb3dzIGF1dG9tYXRpY2FsbHkuDQorICAgIElNQVFfV0lORE9XX1RIUkVBRF9QT0xJQ1lfU0laRV9HVUFSRCA9IDB4RkZGRkZGRkYgICANCit9IFdpbmRvd1RocmVhZFBvbGljeTsNCisNCit0eXBlZGVmIGVudW0gV2luZG93T3B0aW9uc19lbnVtIHsNCisgICAgSU1BUV9XSU5EX1JFU0laQUJMRSAgICAgICAgICAgID0gMSwgICAgICAgICAgIC8vV2hlbiBwcmVzZW50LCB0aGUgdXNlciBtYXkgcmVzaXplIHRoZSB3aW5kb3cgaW50ZXJhY3RpdmVseS4NCisgICAgSU1BUV9XSU5EX1RJVExFQkFSICAgICAgICAgICAgID0gMiwgICAgICAgICAgIC8vV2hlbiBwcmVzZW50LCB0aGUgdGl0bGUgYmFyIG9uIHRoZSB3aW5kb3cgaXMgdmlzaWJsZS4NCisgICAgSU1BUV9XSU5EX0NMT1NFQUJMRSAgICAgICAgICAgID0gNCwgICAgICAgICAgIC8vV2hlbiBwcmVzZW50LCB0aGUgY2xvc2UgYm94IGlzIGF2YWlsYWJsZS4NCisgICAgSU1BUV9XSU5EX1RPUE1PU1QgICAgICAgICAgICAgID0gOCwgICAgICAgICAgIC8vV2hlbiBwcmVzZW50LCB0aGUgd2luZG93IGlzIGFsd2F5cyBvbiB0b3AuDQorICAgIElNQVFfV0lORE9XX09QVElPTlNfU0laRV9HVUFSRCA9IDB4RkZGRkZGRkYgICANCit9IFdpbmRvd09wdGlvbnM7DQorDQordHlwZWRlZiBlbnVtIFdpbmRvd0V2ZW50VHlwZV9lbnVtIHsNCisgICAgSU1BUV9OT19FVkVOVCAgICAgICAgICAgICAgICAgICAgID0gMCwgICAgICAgICAgIC8vTm8gZXZlbnQgb2NjdXJyZWQgc2luY2UgdGhlIGxhc3QgY2FsbCB0byBpbWFxR2V0TGFzdEV2ZW50KCkuDQorICAgIElNQVFfQ0xJQ0tfRVZFTlQgICAgICAgICAgICAgICAgICA9IDEsICAgICAgICAgICAvL1RoZSB1c2VyIGNsaWNrZWQgb24gYSB3aW5kb3cuDQorICAgIElNQVFfRFJBV19FVkVOVCAgICAgICAgICAgICAgICAgICA9IDIsICAgICAgICAgICAvL1RoZSB1c2VyIGRyZXcgYW4gUk9JIGluIGEgd2luZG93Lg0KKyAgICBJTUFRX01PVkVfRVZFTlQgICAgICAgICAgICAgICAgICAgPSAzLCAgICAgICAgICAgLy9UaGUgdXNlciBtb3ZlZCBhIHdpbmRvdy4NCisgICAgSU1BUV9TSVpFX0VWRU5UICAgICAgICAgICAgICAgICAgID0gNCwgICAgICAgICAgIC8vVGhlIHVzZXIgc2l6ZWQgYSB3aW5kb3cuDQorICAgIElNQVFfU0NST0xMX0VWRU5UICAgICAgICAgICAgICAgICA9IDUsICAgICAgICAgICAvL1RoZSB1c2VyIHNjcm9sbGVkIGEgd2luZG93Lg0KKyAgICBJTUFRX0FDVElWQVRFX0VWRU5UICAgICAgICAgICAgICAgPSA2LCAgICAgICAgICAgLy9UaGUgdXNlciBhY3RpdmF0ZWQgYSB3aW5kb3cuDQorICAgIElNQVFfQ0xPU0VfRVZFTlQgICAgICAgICAgICAgICAgICA9IDcsICAgICAgICAgICAvL1RoZSB1c2VyIGNsb3NlZCBhIHdpbmRvdy4NCisgICAgSU1BUV9ET1VCTEVfQ0xJQ0tfRVZFTlQgICAgICAgICAgID0gOCwgICAgICAgICAgIC8vVGhlIHVzZXIgZG91YmxlLWNsaWNrZWQgaW4gYSB3aW5kb3cuDQorICAgIElNQVFfV0lORE9XX0VWRU5UX1RZUEVfU0laRV9HVUFSRCA9IDB4RkZGRkZGRkYgICANCit9IFdpbmRvd0V2ZW50VHlwZTsNCisNCit0eXBlZGVmIGVudW0gVmlzaW9uSW5mb1R5cGVfZW51bSB7DQorICAgIElNQVFfQU5ZX1ZJU0lPTl9JTkZPICAgICAgICAgICAgID0gMCwgICAgICAgICAgIC8vVGhlIGZ1bmN0aW9uIGNoZWNrcyBpZiBhbnkgZXh0cmEgdmlzaW9uIGluZm9ybWF0aW9uIGlzIGFzc29jaWF0ZWQgd2l0aCB0aGUgaW1hZ2UuDQorICAgIElNQVFfUEFUVEVSTl9NQVRDSElOR19JTkZPICAgICAgID0gMSwgICAgICAgICAgIC8vVGhlIGZ1bmN0aW9uIGNoZWNrcyBpZiBhbnkgcGF0dGVybiBtYXRjaGluZyB0ZW1wbGF0ZSBpbmZvcm1hdGlvbiBpcyBhc3NvY2lhdGVkIHdpdGggdGhlIGltYWdlLg0KKyAgICBJTUFRX0NBTElCUkFUSU9OX0lORk8gICAgICAgICAgICA9IDIsICAgICAgICAgICAvL1RoZSBmdW5jdGlvbiBjaGVja3MgaWYgYW55IGNhbGlicmF0aW9uIGluZm9ybWF0aW9uIGlzIGFzc29jaWF0ZWQgd2l0aCB0aGUgaW1hZ2UuDQorICAgIElNQVFfT1ZFUkxBWV9JTkZPICAgICAgICAgICAgICAgID0gMywgICAgICAgICAgIC8vVGhlIGZ1bmN0aW9uIGNoZWNrcyBpZiBhbnkgb3ZlcmxheSBpbmZvcm1hdGlvbiBpcyBhc3NvY2lhdGVkIHdpdGggdGhlIGltYWdlLg0KKyAgICBJTUFRX1ZJU0lPTl9JTkZPX1RZUEVfU0laRV9HVUFSRCA9IDB4RkZGRkZGRkYgICANCit9IFZpc2lvbkluZm9UeXBlOw0KKw0KK3R5cGVkZWYgZW51bSBTZWFyY2hTdHJhdGVneV9lbnVtIHsNCisgICAgSU1BUV9DT05TRVJWQVRJVkUgICAgICAgICAgICAgICA9IDEsICAgICAgICAgICAvL0luc3RydWN0cyB0aGUgcGF0dGVybiBtYXRjaGluZyBhbGdvcml0aG0gdG8gdXNlIHRoZSBsYXJnZXN0IHBvc3NpYmxlIGFtb3VudCBvZiBpbmZvcm1hdGlvbiBmcm9tIHRoZSBpbWFnZSBhdCB0aGUgZXhwZW5zZSBvZiBzbG93aW5nIGRvd24gdGhlIHNwZWVkIG9mIHRoZSBhbGdvcml0aG0uDQorICAgIElNQVFfQkFMQU5DRUQgICAgICAgICAgICAgICAgICAgPSAyLCAgICAgICAgICAgLy9JbnN0cnVjdHMgdGhlIHBhdHRlcm4gbWF0Y2hpbmcgYWxnb3JpdGhtIHRvIGJhbGFuY2UgdGhlIGFtb3VudCBvZiBpbmZvcm1hdGlvbiBmcm9tIHRoZSBpbWFnZSBpdCB1c2VzIHdpdGggdGhlIHNwZWVkIG9mIHRoZSBhbGdvcml0aG0uDQorICAgIElNQVFfQUdHUkVTU0lWRSAgICAgICAgICAgICAgICAgPSAzLCAgICAgICAgICAgLy9JbnN0cnVjdHMgdGhlIHBhdHRlcm4gbWF0Y2hpbmcgYWxnb3JpdGhtIHRvIHVzZSBhIGxvd2VyIGFtb3VudCBvZiBpbmZvcm1hdGlvbiBmcm9tIHRoZSBpbWFnZSwgd2hpY2ggYWxsb3dzIHRoZSBhbGdvcml0aG0gdG8gcnVuIHF1aWNrbHkgYnV0IGF0IHRoZSBleHBlbnNlIG9mIGFjY3VyYWN5Lg0KKyAgICBJTUFRX1ZFUllfQUdHUkVTU0lWRSAgICAgICAgICAgID0gNCwgICAgICAgICAgIC8vSW5zdHJ1Y3RzIHRoZSBwYXR0ZXJuIG1hdGNoaW5nIGFsZ29yaXRobSB0byB1c2UgdGhlIHNtYWxsZXN0IHBvc3NpYmxlIGFtb3VudCBvZiBpbmZvcm1hdGlvbiBmcm9tIHRoZSBpbWFnZSwgd2hpY2ggYWxsb3dzIHRoZSBhbGdvcml0aG0gdG8gcnVuIGF0IHRoZSBoaWdoZXN0IHNwZWVkIHBvc3NpYmxlIGJ1dCBhdCB0aGUgZXhwZW5zZSBvZiBhY2N1cmFjeS4NCisgICAgSU1BUV9TRUFSQ0hfU1RSQVRFR1lfU0laRV9HVUFSRCA9IDB4RkZGRkZGRkYgICANCit9IFNlYXJjaFN0cmF0ZWd5Ow0KKw0KK3R5cGVkZWYgZW51bSBUd29FZGdlUG9sYXJpdHlUeXBlX2VudW0gew0KKyAgICBJTUFRX05PTkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDAsICAgICAgICAgICAvL1RoZSBmdW5jdGlvbiBpZ25vcmVzIHRoZSBwb2xhcml0eSBvZiB0aGUgZWRnZXMuDQorICAgIElNQVFfUklTSU5HX0ZBTExJTkcgICAgICAgICAgICAgICAgICAgID0gMSwgICAgICAgICAgIC8vVGhlIHBvbGFyaXR5IG9mIHRoZSBmaXJzdCBlZGdlIGlzIHJpc2luZyAoZGFyayB0byBsaWdodCkgYW5kIHRoZSBwb2xhcml0eSBvZiB0aGUgc2Vjb25kIGVkZ2UgaXMgZmFsbGluZyAobGlnaHQgdG8gZGFyaykuDQorICAgIElNQVFfRkFMTElOR19SSVNJTkcgICAgICAgICAgICAgICAgICAgID0gMiwgICAgICAgICAgIC8vVGhlIHBvbGFyaXR5IG9mIHRoZSBmaXJzdCBlZGdlIGlzIGZhbGxpbmcgKGxpZ2h0IHRvIGRhcmspIGFuZCB0aGUgcG9sYXJpdHkgb2YgdGhlIHNlY29uZCBlZGdlIGlzIHJpc2luZyAoZGFyayB0byBsaWdodCkuDQorICAgIElNQVFfUklTSU5HX1JJU0lORyAgICAgICAgICAgICAgICAgICAgID0gMywgICAgICAgICAgIC8vVGhlIHBvbGFyaXR5IG9mIHRoZSBmaXJzdCBlZGdlIGlzIHJpc2luZyAoZGFyayB0byBsaWdodCkgYW5kIHRoZSBwb2xhcml0eSBvZiB0aGUgc2Vjb25kIGVkZ2UgaXMgcmlzaW5nIChkYXJrIHRvIGxpZ2h0KS4NCisgICAgSU1BUV9GQUxMSU5HX0ZBTExJTkcgICAgICAgICAgICAgICAgICAgPSA0LCAgICAgICAgICAgLy9UaGUgcG9sYXJpdHkgb2YgdGhlIGZpcnN0IGVkZ2UgaXMgZmFsbGluZyAobGlnaHQgdG8gZGFyaykgYW5kIHRoZSBwb2xhcml0eSBvZiB0aGUgc2Vjb25kIGVkZ2UgaXMgZmFsbGluZyAobGlnaHQgdG8gZGFyaykuDQorICAgIElNQVFfVFdPX0VER0VfUE9MQVJJVFlfVFlQRV9TSVpFX0dVQVJEID0gMHhGRkZGRkZGRiAgIA0KK30gVHdvRWRnZVBvbGFyaXR5VHlwZTsNCisNCit0eXBlZGVmIGVudW0gT2JqZWN0VHlwZV9lbnVtIHsNCisgICAgSU1BUV9CUklHSFRfT0JKRUNUUyAgICAgICAgID0gMCwgICAgICAgICAgIC8vVGhlIGZ1bmN0aW9uIGRldGVjdHMgYnJpZ2h0IG9iamVjdHMuDQorICAgIElNQVFfREFSS19PQkpFQ1RTICAgICAgICAgICA9IDEsICAgICAgICAgICAvL1RoZSBmdW5jdGlvbiBkZXRlY3RzIGRhcmsgb2JqZWN0cy4NCisgICAgSU1BUV9PQkpFQ1RfVFlQRV9TSVpFX0dVQVJEID0gMHhGRkZGRkZGRiAgIA0KK30gT2JqZWN0VHlwZTsNCisNCit0eXBlZGVmIGVudW0gVG9vbF9lbnVtIHsNCisgICAgSU1BUV9OT19UT09MICAgICAgICAgICAgICA9IC0xLCAgICAgICAgICAvL05vIHRvb2wgaXMgaW4gdGhlIHNlbGVjdGVkIHN0YXRlLg0KKyAgICBJTUFRX1NFTEVDVElPTl9UT09MICAgICAgID0gMCwgICAgICAgICAgIC8vVGhlIHNlbGVjdGlvbiB0b29sIHNlbGVjdHMgYW4gZXhpc3RpbmcgUk9JIGluIGFuIGltYWdlLg0KKyAgICBJTUFRX1BPSU5UX1RPT0wgICAgICAgICAgID0gMSwgICAgICAgICAgIC8vVGhlIHBvaW50IHRvb2wgZHJhd3MgYSBwb2ludCBvbiB0aGUgaW1hZ2UuDQorICAgIElNQVFfTElORV9UT09MICAgICAgICAgICAgPSAyLCAgICAgICAgICAgLy9UaGUgbGluZSB0b29sIGRyYXdzIGEgbGluZSBvbiB0aGUgaW1hZ2UuDQorICAgIElNQVFfUkVDVEFOR0xFX1RPT0wgICAgICAgPSAzLCAgICAgICAgICAgLy9UaGUgcmVjdGFuZ2xlIHRvb2wgZHJhd3MgYSByZWN0YW5nbGUgb24gdGhlIGltYWdlLg0KKyAgICBJTUFRX09WQUxfVE9PTCAgICAgICAgICAgID0gNCwgICAgICAgICAgIC8vVGhlIG92YWwgdG9vbCBkcmF3cyBhbiBvdmFsIG9uIHRoZSBpbWFnZS4NCisgICAgSU1BUV9QT0xZR09OX1RPT0wgICAgICAgICA9IDUsICAgICAgICAgICAvL1RoZSBwb2x5Z29uIHRvb2wgZHJhd3MgYSBwb2x5Z29uIG9uIHRoZSBpbWFnZS4NCisgICAgSU1BUV9DTE9TRURfRlJFRUhBTkRfVE9PTCA9IDYsICAgICAgICAgICAvL1RoZSBjbG9zZWQgZnJlZWhhbmQgdG9vbCBkcmF3cyBjbG9zZWQgZnJlZWhhbmQgc2hhcGVzIG9uIHRoZSBpbWFnZS4NCisgICAgSU1BUV9BTk5VTFVTX1RPT0wgICAgICAgICA9IDcsICAgICAgICAgICAvL1RoZSBhbm51bHVzIHRvb2wgZHJhd3MgYW5udWx1c2VzIG9uIHRoZSBpbWFnZS4NCisgICAgSU1BUV9aT09NX1RPT0wgICAgICAgICAgICA9IDgsICAgICAgICAgICAvL1RoZSB6b29tIHRvb2wgY29udHJvbHMgdGhlIHpvb20gb2YgYW4gaW1hZ2UuDQorICAgIElNQVFfUEFOX1RPT0wgICAgICAgICAgICAgPSA5LCAgICAgICAgICAgLy9UaGUgcGFuIHRvb2wgc2hpZnRzIHRoZSB2aWV3IG9mIHRoZSBpbWFnZS4NCisgICAgSU1BUV9QT0xZTElORV9UT09MICAgICAgICA9IDEwLCAgICAgICAgICAvL1RoZSBwb2x5bGluZSB0b29sIGRyYXdzIGEgc2VyaWVzIG9mIGNvbm5lY3RlZCBzdHJhaWdodCBsaW5lcyBvbiB0aGUgaW1hZ2UuDQorICAgIElNQVFfRlJFRUhBTkRfVE9PTCAgICAgICAgPSAxMSwgICAgICAgICAgLy9UaGUgZnJlZWhhbmQgdG9vbCBkcmF3cyBmcmVlaGFuZCBsaW5lcyBvbiB0aGUgaW1hZ2UuDQorICAgIElNQVFfUk9UQVRFRF9SRUNUX1RPT0wgICAgPSAxMiwgICAgICAgICAgLy9UaGUgcm90YXRlZCByZWN0YW5nbGUgdG9vbCBkcmF3cyByb3RhdGVkIHJlY3RhbmdsZXMgb24gdGhlIGltYWdlLg0KKyAgICBJTUFRX1pPT01fT1VUX1RPT0wgICAgICAgID0gMTMsICAgICAgICAgIC8vVGhlIHpvb20gb3V0IHRvb2wgY29udHJvbHMgdGhlIHpvb20gb2YgYW4gaW1hZ2UuDQorICAgIElNQVFfVE9PTF9TSVpFX0dVQVJEICAgICAgPSAweEZGRkZGRkZGICAgDQorfSBUb29sOw0KKw0KK3R5cGVkZWYgZW51bSBUSUZGQ29tcHJlc3Npb25UeXBlX2VudW0gew0KKyAgICBJTUFRX05PX0NPTVBSRVNTSU9OICAgICAgICAgICAgICAgICAgID0gMCwgICAgICAgICAgIC8vVGhlIGZ1bmN0aW9uIGRvZXMgbm90IGNvbXByZXNzIHRoZSBUSUZGIGZpbGUuDQorICAgIElNQVFfSlBFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAxLCAgICAgICAgICAgLy9UaGUgZnVuY3Rpb24gdXNlcyB0aGUgSlBFRyBjb21wcmVzc2lvbiBhbGdvcml0aG0gdG8gY29tcHJlc3MgdGhlIFRJRkYgZmlsZS4NCisgICAgSU1BUV9SVU5fTEVOR1RIICAgICAgICAgICAgICAgICAgICAgICA9IDIsICAgICAgICAgICAvL1RoZSBmdW5jdGlvbiB1c2VzIGEgcnVuIGxlbmd0aCBjb21wcmVzc2lvbiBhbGdvcml0aG0gdG8gY29tcHJlc3MgdGhlIFRJRkYgZmlsZS4NCisgICAgSU1BUV9aSVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDMsICAgICAgICAgICAvL1RoZSBmdW5jdGlvbiB1c2VzIHRoZSBaSVAgY29tcHJlc3Npb24gYWxnb3JpdGhtIHRvIGNvbXByZXNzIHRoZSBUSUZGIGZpbGUuDQorICAgIElNQVFfVElGRl9DT01QUkVTU0lPTl9UWVBFX1NJWkVfR1VBUkQgPSAweEZGRkZGRkZGICAgDQorfSBUSUZGQ29tcHJlc3Npb25UeXBlOw0KKw0KK3R5cGVkZWYgZW51bSBUaHJlc2hvbGRNZXRob2RfZW51bSB7DQorICAgIElNQVFfVEhSRVNIX0NMVVNURVJJTkcgICAgICAgICAgID0gMCwgICAgICAgICAgIC8vVGhlIGZ1bmN0aW9uIHVzZXMgYSBtZXRob2QgdGhhdCBzb3J0cyB0aGUgaGlzdG9ncmFtIG9mIHRoZSBpbWFnZSB3aXRoaW4gYSBkaXNjcmV0ZSBudW1iZXIgb2YgY2xhc3NlcyBjb3JyZXNwb25kaW5nIHRvIHRoZSBudW1iZXIgb2YgcGhhc2VzIHBlcmNlaXZlZCBpbiBhbiBpbWFnZS4NCisgICAgSU1BUV9USFJFU0hfRU5UUk9QWSAgICAgICAgICAgICAgPSAxLCAgICAgICAgICAgLy9UaGUgZnVuY3Rpb24gdXNlcyBhIG1ldGhvZCB0aGF0IGlzIGJlc3QgZm9yIGRldGVjdGluZyBwYXJ0aWNsZXMgdGhhdCBhcmUgcHJlc2VudCBpbiBtaW51c2N1bGUgcHJvcG9ydGlvbnMgb24gdGhlIGltYWdlLg0KKyAgICBJTUFRX1RIUkVTSF9NRVRSSUMgICAgICAgICAgICAgICA9IDIsICAgICAgICAgICAvL1RoZSBmdW5jdGlvbiB1c2VzIGEgbWV0aG9kIHRoYXQgaXMgd2VsbC1zdWl0ZWQgZm9yIGltYWdlcyBpbiB3aGljaCBjbGFzc2VzIGFyZSBub3QgdG9vIGRpc3Byb3BvcnRpb25hdGUuDQorICAgIElNQVFfVEhSRVNIX01PTUVOVFMgICAgICAgICAgICAgID0gMywgICAgICAgICAgIC8vVGhlIGZ1bmN0aW9uIHVzZXMgYSBtZXRob2QgdGhhdCBpcyBzdWl0ZWQgZm9yIGltYWdlcyB0aGF0IGhhdmUgcG9vciBjb250cmFzdC4NCisgICAgSU1BUV9USFJFU0hfSU5URVJDTEFTUyAgICAgICAgICAgPSA0LCAgICAgICAgICAgLy9UaGUgZnVuY3Rpb24gdXNlcyBhIG1ldGhvZCB0aGF0IGlzIHdlbGwtc3VpdGVkIGZvciBpbWFnZXMgaW4gd2hpY2ggY2xhc3NlcyBoYXZlIHdlbGwgc2VwYXJhdGVkIHBpeGVsIHZhbHVlIGRpc3RyaWJ1dGlvbnMuDQorICAgIElNQVFfVEhSRVNIT0xEX01FVEhPRF9TSVpFX0dVQVJEID0gMHhGRkZGRkZGRiAgIA0KK30gVGhyZXNob2xkTWV0aG9kOw0KKw0KK3R5cGVkZWYgZW51bSBUZXh0QWxpZ25tZW50X2VudW0gew0KKyAgICBJTUFRX0xFRlQgICAgICAgICAgICAgICAgICAgICAgPSAwLCAgICAgICAgICAgLy9MZWZ0IGFsaWducyB0aGUgdGV4dCBhdCB0aGUgcmVmZXJlbmNlIHBvaW50Lg0KKyAgICBJTUFRX0NFTlRFUiAgICAgICAgICAgICAgICAgICAgPSAxLCAgICAgICAgICAgLy9DZW50ZXJzIHRoZSB0ZXh0IGFyb3VuZCB0aGUgcmVmZXJlbmNlIHBvaW50Lg0KKyAgICBJTUFRX1JJR0hUICAgICAgICAgICAgICAgICAgICAgPSAyLCAgICAgICAgICAgLy9SaWdodCBhbGlnbnMgdGhlIHRleHQgYXQgdGhlIHJlZmVyZW5jZSBwb2ludC4NCisgICAgSU1BUV9URVhUX0FMSUdOTUVOVF9TSVpFX0dVQVJEID0gMHhGRkZGRkZGRiAgIA0KK30gVGV4dEFsaWdubWVudDsNCisNCit0eXBlZGVmIGVudW0gU3Bva2VEaXJlY3Rpb25fZW51bSB7DQorICAgIElNQVFfT1VUU0lERV9UT19JTlNJREUgICAgICAgICAgPSAwLCAgICAgICAgICAgLy9UaGUgZnVuY3Rpb24gc2VhcmNoZXMgZnJvbSB0aGUgb3V0c2lkZSBvZiB0aGUgc2VhcmNoIGFyZWEgdG8gdGhlIGluc2lkZSBvZiB0aGUgc2VhcmNoIGFyZWEuDQorICAgIElNQVFfSU5TSURFX1RPX09VVFNJREUgICAgICAgICAgPSAxLCAgICAgICAgICAgLy9UaGUgZnVuY3Rpb24gc2VhcmNoZXMgZnJvbSB0aGUgaW5zaWRlIG9mIHRoZSBzZWFyY2ggYXJlYSB0byB0aGUgb3V0c2lkZSBvZiB0aGUgc2VhcmNoIGFyZWEuDQorICAgIElNQVFfU1BPS0VfRElSRUNUSU9OX1NJWkVfR1VBUkQgPSAweEZGRkZGRkZGICAgDQorfSBTcG9rZURpcmVjdGlvbjsNCisNCit0eXBlZGVmIGVudW0gU2tlbGV0b25NZXRob2RfZW51bSB7DQorICAgIElNQVFfU0tFTEVUT05fTCAgICAgICAgICAgICAgICAgPSAwLCAgICAgICAgICAgLy9Vc2VzIGFuIEwtc2hhcGVkIHN0cnVjdHVyaW5nIGVsZW1lbnQgaW4gdGhlIHNrZWxldG9uIGZ1bmN0aW9uLg0KKyAgICBJTUFRX1NLRUxFVE9OX00gICAgICAgICAgICAgICAgID0gMSwgICAgICAgICAgIC8vVXNlcyBhbiBNLXNoYXBlZCBzdHJ1Y3R1cmluZyBlbGVtZW50IGluIHRoZSBza2VsZXRvbiBmdW5jdGlvbi4NCisgICAgSU1BUV9TS0VMRVRPTl9JTlZFUlNFICAgICAgICAgICA9IDIsICAgICAgICAgICAvL1VzZXMgYW4gTC1zaGFwZWQgc3RydWN0dXJpbmcgZWxlbWVudCBvbiBhbiBpbnZlcnNlIG9mIHRoZSBpbWFnZSBpbiB0aGUgc2tlbGV0b24gZnVuY3Rpb24uDQorICAgIElNQVFfU0tFTEVUT05fTUVUSE9EX1NJWkVfR1VBUkQgPSAweEZGRkZGRkZGICAgDQorfSBTa2VsZXRvbk1ldGhvZDsNCisNCit0eXBlZGVmIGVudW0gVmVydGljYWxUZXh0QWxpZ25tZW50X2VudW0gew0KKyAgICBJTUFRX0JPVFRPTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAwLCAgICAgICAgICAgLy9BbGlnbnMgdGhlIGJvdHRvbSBvZiB0aGUgdGV4dCBhdCB0aGUgcmVmZXJlbmNlIHBvaW50Lg0KKyAgICBJTUFRX1RPUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAxLCAgICAgICAgICAgLy9BbGlnbnMgdGhlIHRvcCBvZiB0aGUgdGV4dCBhdCB0aGUgcmVmZXJlbmNlIHBvaW50Lg0KKyAgICBJTUFRX0JBU0VMSU5FICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAyLCAgICAgICAgICAgLy9BbGlnbnMgdGhlIGJhc2VsaW5lIG9mIHRoZSB0ZXh0IGF0IHRoZSByZWZlcmVuY2UgcG9pbnQuDQorICAgIElNQVFfVkVSVElDQUxfVEVYVF9BTElHTk1FTlRfU0laRV9HVUFSRCA9IDB4RkZGRkZGRkYgICANCit9IFZlcnRpY2FsVGV4dEFsaWdubWVudDsNCisNCit0eXBlZGVmIGVudW0gQ2FsaWJyYXRpb25ST0lfZW51bSB7DQorICAgIElNQVFfRlVMTF9JTUFHRSAgICAgICAgICAgICAgICAgPSAwLCAgICAgICAgICAgLy9UaGUgY29ycmVjdGlvbiBmdW5jdGlvbiBjb3JyZWN0cyB0aGUgd2hvbGUgaW1hZ2UsIHJlZ2FyZGxlc3Mgb2YgdGhlIHVzZXItZGVmaW5lZCBvciBjYWxpYnJhdGlvbi1kZWZpbmVkIFJPSXMuDQorICAgIElNQVFfQ0FMSUJSQVRJT05fUk9JICAgICAgICAgICAgPSAxLCAgICAgICAgICAgLy9UaGUgY29ycmVjdGlvbiBmdW5jdGlvbiBjb3JyZWN0cyB0aGUgYXJlYSBkZWZpbmVkIGJ5IHRoZSBjYWxpYnJhdGlvbiBST0kuDQorICAgIElNQVFfVVNFUl9ST0kgICAgICAgICAgICAgICAgICAgPSAyLCAgICAgICAgICAgLy9UaGUgY29ycmVjdGlvbiBmdW5jdGlvbiBjb3JyZWN0cyB0aGUgYXJlYSBkZWZpbmVkIGJ5IHRoZSB1c2VyLWRlZmluZWQgUk9JLg0KKyAgICBJTUFRX0NBTElCUkFUSU9OX0FORF9VU0VSX1JPSSAgID0gMywgICAgICAgICAgIC8vVGhlIGNvcnJlY3Rpb24gZnVuY3Rpb24gY29ycmVjdHMgdGhlIGFyZWEgZGVmaW5lZCBieSB0aGUgaW50ZXJzZWN0aW9uIG9mIHRoZSB1c2VyLWRlZmluZWQgUk9JIGFuZCB0aGUgY2FsaWJyYXRpb24gUk9JLg0KKyAgICBJTUFRX0NBTElCUkFUSU9OX09SX1VTRVJfUk9JICAgID0gNCwgICAgICAgICAgIC8vVGhlIGNvcnJlY3Rpb24gZnVuY3Rpb24gY29ycmVjdHMgdGhlIGFyZWEgZGVmaW5lZCBieSB0aGUgdW5pb24gb2YgdGhlIHVzZXItZGVmaW5lZCBST0kgYW5kIHRoZSBjYWxpYnJhdGlvbiBST0kuDQorICAgIElNQVFfQ0FMSUJSQVRJT05fUk9JX1NJWkVfR1VBUkQgPSAweEZGRkZGRkZGICAgDQorfSBDYWxpYnJhdGlvblJPSTsNCisNCit0eXBlZGVmIGVudW0gQ29udG91clR5cGVfZW51bSB7DQorICAgIElNQVFfRU1QVFlfQ09OVE9VUiAgICAgICAgICAgPSAwLCAgICAgICAgICAgLy9UaGUgY29udG91ciBpcyBlbXB0eS4NCisgICAgSU1BUV9QT0lOVCAgICAgICAgICAgICAgICAgICA9IDEsICAgICAgICAgICAvL1RoZSBjb250b3VyIHJlcHJlc2VudHMgYSBwb2ludC4NCisgICAgSU1BUV9MSU5FICAgICAgICAgICAgICAgICAgICA9IDIsICAgICAgICAgICAvL1RoZSBjb250b3VyIHJlcHJlc2VudHMgYSBsaW5lLg0KKyAgICBJTUFRX1JFQ1QgICAgICAgICAgICAgICAgICAgID0gMywgICAgICAgICAgIC8vVGhlIGNvbnRvdXIgcmVwcmVzZW50cyBhIHJlY3RhbmdsZS4NCisgICAgSU1BUV9PVkFMICAgICAgICAgICAgICAgICAgICA9IDQsICAgICAgICAgICAvL1RoZSBjb250b3VyIHJlcHJlc2VudHMgYW4gb3ZhbC4NCisgICAgSU1BUV9DTE9TRURfQ09OVE9VUiAgICAgICAgICA9IDUsICAgICAgICAgICAvL1RoZSBjb250b3VyIHJlcHJlc2VudHMgYSBzZXJpZXMgb2YgY29ubmVjdGVkIHBvaW50cyB3aGVyZSB0aGUgbGFzdCBwb2ludCBjb25uZWN0cyB0byB0aGUgZmlyc3QuDQorICAgIElNQVFfT1BFTl9DT05UT1VSICAgICAgICAgICAgPSA2LCAgICAgICAgICAgLy9UaGUgY29udG91ciByZXByZXNlbnRzIGEgc2VyaWVzIG9mIGNvbm5lY3RlZCBwb2ludHMgd2hlcmUgdGhlIGxhc3QgcG9pbnQgZG9lcyBub3QgY29ubmVjdCB0byB0aGUgZmlyc3QuDQorICAgIElNQVFfQU5OVUxVUyAgICAgICAgICAgICAgICAgPSA3LCAgICAgICAgICAgLy9UaGUgY29udG91ciByZXByZXNlbnRzIGFuIGFubnVsdXMuDQorICAgIElNQVFfUk9UQVRFRF9SRUNUICAgICAgICAgICAgPSA4LCAgICAgICAgICAgLy9UaGUgY29udG91ciByZXByZXNlbnRzIGEgcm90YXRlZCByZWN0YW5nbGUuDQorICAgIElNQVFfQ09OVE9VUl9UWVBFX1NJWkVfR1VBUkQgPSAweEZGRkZGRkZGICAgDQorfSBDb250b3VyVHlwZTsNCisNCit0eXBlZGVmIGVudW0gTWF0aFRyYW5zZm9ybU1ldGhvZF9lbnVtIHsNCisgICAgSU1BUV9UUkFOU0ZPUk1fTElORUFSICAgICAgICAgICAgICAgICA9IDAsICAgICAgICAgICAvL1RoZSBmdW5jdGlvbiB1c2VzIGxpbmVhciByZW1hcHBpbmcuDQorICAgIElNQVFfVFJBTlNGT1JNX0xPRyAgICAgICAgICAgICAgICAgICAgPSAxLCAgICAgICAgICAgLy9UaGUgZnVuY3Rpb24gdXNlcyBsb2dhcml0aG1pYyByZW1hcHBpbmcuDQorICAgIElNQVFfVFJBTlNGT1JNX0VYUCAgICAgICAgICAgICAgICAgICAgPSAyLCAgICAgICAgICAgLy9UaGUgZnVuY3Rpb24gdXNlcyBleHBvbmVudGlhbCByZW1hcHBpbmcuDQorICAgIElNQVFfVFJBTlNGT1JNX1NRUiAgICAgICAgICAgICAgICAgICAgPSAzLCAgICAgICAgICAgLy9UaGUgZnVuY3Rpb24gdXNlcyBzcXVhcmUgcmVtYXBwaW5nLg0KKyAgICBJTUFRX1RSQU5TRk9STV9TUVJUICAgICAgICAgICAgICAgICAgID0gNCwgICAgICAgICAgIC8vVGhlIGZ1bmN0aW9uIHVzZXMgc3F1YXJlIHJvb3QgcmVtYXBwaW5nLg0KKyAgICBJTUFRX1RSQU5TRk9STV9QT1dYICAgICAgICAgICAgICAgICAgID0gNSwgICAgICAgICAgIC8vVGhlIGZ1bmN0aW9uIHVzZXMgcG93ZXIgWCByZW1hcHBpbmcuDQorICAgIElNQVFfVFJBTlNGT1JNX1BPVzFYICAgICAgICAgICAgICAgICAgPSA2LCAgICAgICAgICAgLy9UaGUgZnVuY3Rpb24gdXNlcyBwb3dlciAxL1ggcmVtYXBwaW5nLg0KKyAgICBJTUFRX01BVEhfVFJBTlNGT1JNX01FVEhPRF9TSVpFX0dVQVJEID0gMHhGRkZGRkZGRiAgIA0KK30gTWF0aFRyYW5zZm9ybU1ldGhvZDsNCisNCit0eXBlZGVmIGVudW0gQ29tcGxleFBsYW5lX2VudW0gew0KKyAgICBJTUFRX1JFQUwgICAgICAgICAgICAgICAgICAgICA9IDAsICAgICAgICAgICAvL1RoZSBmdW5jdGlvbiBvcGVyYXRlcyBvbiB0aGUgcmVhbCBwbGFuZSBvZiB0aGUgY29tcGxleCBpbWFnZS4NCisgICAgSU1BUV9JTUFHSU5BUlkgICAgICAgICAgICAgICAgPSAxLCAgICAgICAgICAgLy9UaGUgZnVuY3Rpb24gb3BlcmF0ZXMgb24gdGhlIGltYWdpbmFyeSBwbGFuZSBvZiB0aGUgY29tcGxleCBpbWFnZS4NCisgICAgSU1BUV9NQUdOSVRVREUgICAgICAgICAgICAgICAgPSAyLCAgICAgICAgICAgLy9UaGUgZnVuY3Rpb24gb3BlcmF0ZXMgb24gdGhlIG1hZ25pdHVkZSBwbGFuZSBvZiB0aGUgY29tcGxleCBpbWFnZS4NCisgICAgSU1BUV9QSEFTRSAgICAgICAgICAgICAgICAgICAgPSAzLCAgICAgICAgICAgLy9UaGUgZnVuY3Rpb24gb3BlcmF0ZXMgb24gdGhlIHBoYXNlIHBsYW5lIG9mIHRoZSBjb21wbGV4IGltYWdlLg0KKyAgICBJTUFRX0NPTVBMRVhfUExBTkVfU0laRV9HVUFSRCA9IDB4RkZGRkZGRkYgICANCit9IENvbXBsZXhQbGFuZTsNCisNCit0eXBlZGVmIGVudW0gUGFsZXR0ZVR5cGVfZW51bSB7DQorICAgIElNQVFfUEFMRVRURV9HUkFZICAgICAgICAgICAgPSAwLCAgICAgICAgICAgLy9UaGUgZnVuY3Rpb24gdXNlcyBhIHBhbGV0dGUgdGhhdCBoYXMgYSBncmFkdWFsIGdyYXktbGV2ZWwgdmFyaWF0aW9uIGZyb20gYmxhY2sgdG8gd2hpdGUuDQorICAgIElNQVFfUEFMRVRURV9CSU5BUlkgICAgICAgICAgPSAxLCAgICAgICAgICAgLy9UaGUgZnVuY3Rpb24gdXNlcyBhIHBhbGV0dGUgb2YgMTYgY3ljbGVzIG9mIDE2IGRpZmZlcmVudCBjb2xvcnMgdGhhdCBpcyB1c2VmdWwgd2l0aCBiaW5hcnkgaW1hZ2VzLg0KKyAgICBJTUFRX1BBTEVUVEVfR1JBRElFTlQgICAgICAgID0gMiwgICAgICAgICAgIC8vVGhlIGZ1bmN0aW9uIHVzZXMgYSBwYWxldHRlIHRoYXQgaGFzIGEgZ3JhZGF0aW9uIGZyb20gcmVkIHRvIHdoaXRlIHdpdGggYSBwcm9taW5lbnQgcmFuZ2Ugb2YgbGlnaHQgYmx1ZSBpbiB0aGUgdXBwZXIgdmFsdWUgcmFuZ2UuDQorICAgIElNQVFfUEFMRVRURV9SQUlOQk9XICAgICAgICAgPSAzLCAgICAgICAgICAgLy9UaGUgZnVuY3Rpb24gdXNlcyBhIHBhbGV0dGUgdGhhdCBoYXMgYSBncmFkYXRpb24gZnJvbSBibHVlIHRvIHJlZCB3aXRoIGEgcHJvbWluZW50IHJhbmdlIG9mIGdyZWVucyBpbiB0aGUgbWlkZGxlIHZhbHVlIHJhbmdlLg0KKyAgICBJTUFRX1BBTEVUVEVfVEVNUEVSQVRVUkUgICAgID0gNCwgICAgICAgICAgIC8vVGhlIGZ1bmN0aW9uIHVzZXMgYSBwYWxldHRlIHRoYXQgaGFzIGEgZ3JhZGF0aW9uIGZyb20gbGlnaHQgYnJvd24gdG8gZGFyayBicm93bi4NCisgICAgSU1BUV9QQUxFVFRFX1VTRVIgICAgICAgICAgICA9IDUsICAgICAgICAgICAvL1RoZSBmdW5jdGlvbiB1c2VzIGEgcGFsZXR0ZSBkZWZpbmVkIGJ5IHRoZSB1c2VyLg0KKyAgICBJTUFRX1BBTEVUVEVfVFlQRV9TSVpFX0dVQVJEID0gMHhGRkZGRkZGRiAgIA0KK30gUGFsZXR0ZVR5cGU7DQorDQordHlwZWRlZiBlbnVtIENvbG9yU2Vuc2l0aXZpdHlfZW51bSB7DQorICAgIElNQVFfU0VOU0lUSVZJVFlfTE9XICAgICAgICAgICAgICA9IDAsICAgICAgICAgICAvL0luc3RydWN0cyB0aGUgYWxnb3JpdGhtIHRvIGRpdmlkZSB0aGUgaHVlIHBsYW5lIGludG8gYSBsb3cgbnVtYmVyIG9mIHNlY3RvcnMsIGFsbG93aW5nIGZvciBzaW1wbGUgY29sb3IgYW5hbHlzaXMuDQorICAgIElNQVFfU0VOU0lUSVZJVFlfTUVEICAgICAgICAgICAgICA9IDEsICAgICAgICAgICAvL0luc3RydWN0cyB0aGUgYWxnb3JpdGhtIHRvIGRpdmlkZSB0aGUgaHVlIHBsYW5lIGludG8gYSBtZWRpdW0gbnVtYmVyIG9mIHNlY3RvcnMsIGFsbG93aW5nIGZvciBjb2xvciBhbmFseXNpcyB0aGF0IGJhbGFuY2VzIHNlbnNpdGl2aXR5IGFuZCBjb21wbGV4aXR5Lg0KKyAgICBJTUFRX1NFTlNJVElWSVRZX0hJR0ggICAgICAgICAgICAgPSAyLCAgICAgICAgICAgLy9JbnN0cnVjdHMgdGhlIGFsZ29yaXRobSB0byBkaXZpZGUgdGhlIGh1ZSBwbGFuZSBpbnRvIGEgaGlnaCBudW1iZXIgb2Ygc2VjdG9ycywgYWxsb3dpbmcgZm9yIGNvbXBsZXgsIHNlbnNpdGl2ZSBjb2xvciBhbmFseXNpcy4NCisgICAgSU1BUV9DT0xPUl9TRU5TSVRJVklUWV9TSVpFX0dVQVJEID0gMHhGRkZGRkZGRiAgIA0KK30gQ29sb3JTZW5zaXRpdml0eTsNCisNCit0eXBlZGVmIGVudW0gQ29sb3JNb2RlX2VudW0gew0KKyAgICBJTUFRX1JHQiAgICAgICAgICAgICAgICAgICA9IDAsICAgICAgICAgICAvL1RoZSBmdW5jdGlvbiBvcGVyYXRlcyBpbiB0aGUgUkdCIChSZWQsIEJsdWUsIEdyZWVuKSBjb2xvciBzcGFjZS4NCisgICAgSU1BUV9IU0wgICAgICAgICAgICAgICAgICAgPSAxLCAgICAgICAgICAgLy9UaGUgZnVuY3Rpb24gb3BlcmF0ZXMgaW4gdGhlIEhTTCAoSHVlLCBTYXR1cmF0aW9uLCBMdW1pbmFuY2UpIGNvbG9yIHNwYWNlLg0KKyAgICBJTUFRX0hTViAgICAgICAgICAgICAgICAgICA9IDIsICAgICAgICAgICAvL1RoZSBmdW5jdGlvbiBvcGVyYXRlcyBpbiB0aGUgSFNWIChIdWUsIFNhdHVyYXRpb24sIFZhbHVlKSBjb2xvciBzcGFjZS4NCisgICAgSU1BUV9IU0kgICAgICAgICAgICAgICAgICAgPSAzLCAgICAgICAgICAgLy9UaGUgZnVuY3Rpb24gb3BlcmF0ZXMgaW4gdGhlIEhTSSAoSHVlLCBTYXR1cmF0aW9uLCBJbnRlbnNpdHkpIGNvbG9yIHNwYWNlLg0KKyAgICBJTUFRX0NJRSAgICAgICAgICAgICAgICAgICA9IDQsICAgICAgICAgICAvL1RoZSBmdW5jdGlvbiBvcGVyYXRlcyBpbiB0aGUgQ0lFIEwqYSpiKiBjb2xvciBzcGFjZS4NCisgICAgSU1BUV9DSUVYWVogICAgICAgICAgICAgICAgPSA1LCAgICAgICAgICAgLy9UaGUgZnVuY3Rpb24gb3BlcmF0ZXMgaW4gdGhlIENJRSBYWVogY29sb3Igc3BhY2UuDQorICAgIElNQVFfQ09MT1JfTU9ERV9TSVpFX0dVQVJEID0gMHhGRkZGRkZGRiAgIA0KK30gQ29sb3JNb2RlOw0KKw0KK3R5cGVkZWYgZW51bSBEZXRlY3Rpb25Nb2RlX2VudW0gew0KKyAgICBJTUFRX0RFVEVDVF9QRUFLUyAgICAgICAgICAgICAgPSAwLCAgICAgICAgICAgLy9UaGUgZnVuY3Rpb24gZGV0ZWN0cyBwZWFrcy4NCisgICAgSU1BUV9ERVRFQ1RfVkFMTEVZUyAgICAgICAgICAgID0gMSwgICAgICAgICAgIC8vVGhlIGZ1bmN0aW9uIGRldGVjdHMgdmFsbGV5cy4NCisgICAgSU1BUV9ERVRFQ1RJT05fTU9ERV9TSVpFX0dVQVJEID0gMHhGRkZGRkZGRiAgIA0KK30gRGV0ZWN0aW9uTW9kZTsNCisNCit0eXBlZGVmIGVudW0gQ2FsaWJyYXRpb25Vbml0X2VudW0gew0KKyAgICBJTUFRX1VOREVGSU5FRCAgICAgICAgICAgICAgICAgICA9IDAsICAgICAgICAgICAvL1RoZSBpbWFnZSBkb2VzIG5vdCBoYXZlIGEgZGVmaW5lZCB1bml0IG9mIG1lYXN1cmVtZW50Lg0KKyAgICBJTUFRX0FOR1NUUk9NICAgICAgICAgICAgICAgICAgICA9IDEsICAgICAgICAgICAvL1RoZSB1bml0IG9mIG1lYXN1cmUgZm9yIHRoZSBpbWFnZSBpcyBhbmdzdHJvbXMuDQorICAgIElNQVFfTUlDUk9NRVRFUiAgICAgICAgICAgICAgICAgID0gMiwgICAgICAgICAgIC8vVGhlIHVuaXQgb2YgbWVhc3VyZSBmb3IgdGhlIGltYWdlIGlzIG1pY3JvbWV0ZXJzLg0KKyAgICBJTUFRX01JTExJTUVURVIgICAgICAgICAgICAgICAgICA9IDMsICAgICAgICAgICAvL1RoZSB1bml0IG9mIG1lYXN1cmUgZm9yIHRoZSBpbWFnZSBpcyBtaWxsaW1ldGVycy4NCisgICAgSU1BUV9DRU5USU1FVEVSICAgICAgICAgICAgICAgICAgPSA0LCAgICAgICAgICAgLy9UaGUgdW5pdCBvZiBtZWFzdXJlIGZvciB0aGUgaW1hZ2UgaXMgY2VudGltZXRlcnMuDQorICAgIElNQVFfTUVURVIgICAgICAgICAgICAgICAgICAgICAgID0gNSwgICAgICAgICAgIC8vVGhlIHVuaXQgb2YgbWVhc3VyZSBmb3IgdGhlIGltYWdlIGlzIG1ldGVycy4NCisgICAgSU1BUV9LSUxPTUVURVIgICAgICAgICAgICAgICAgICAgPSA2LCAgICAgICAgICAgLy9UaGUgdW5pdCBvZiBtZWFzdXJlIGZvciB0aGUgaW1hZ2UgaXMga2lsb21ldGVycy4NCisgICAgSU1BUV9NSUNST0lOQ0ggICAgICAgICAgICAgICAgICAgPSA3LCAgICAgICAgICAgLy9UaGUgdW5pdCBvZiBtZWFzdXJlIGZvciB0aGUgaW1hZ2UgaXMgbWljcm9pbmNoZXMuDQorICAgIElNQVFfSU5DSCAgICAgICAgICAgICAgICAgICAgICAgID0gOCwgICAgICAgICAgIC8vVGhlIHVuaXQgb2YgbWVhc3VyZSBmb3IgdGhlIGltYWdlIGlzIGluY2hlcy4NCisgICAgSU1BUV9GT09UICAgICAgICAgICAgICAgICAgICAgICAgPSA5LCAgICAgICAgICAgLy9UaGUgdW5pdCBvZiBtZWFzdXJlIGZvciB0aGUgaW1hZ2UgaXMgZmVldC4NCisgICAgSU1BUV9OQVVUSUNNSUxFICAgICAgICAgICAgICAgICAgPSAxMCwgICAgICAgICAgLy9UaGUgdW5pdCBvZiBtZWFzdXJlIGZvciB0aGUgaW1hZ2UgaXMgbmF1dGljYWwgbWlsZXMuDQorICAgIElNQVFfR1JPVU5ETUlMRSAgICAgICAgICAgICAgICAgID0gMTEsICAgICAgICAgIC8vVGhlIHVuaXQgb2YgbWVhc3VyZSBmb3IgdGhlIGltYWdlIGlzIGdyb3VuZCBtaWxlcy4NCisgICAgSU1BUV9TVEVQICAgICAgICAgICAgICAgICAgICAgICAgPSAxMiwgICAgICAgICAgLy9UaGUgdW5pdCBvZiBtZWFzdXJlIGZvciB0aGUgaW1hZ2UgaXMgc3RlcHMuDQorICAgIElNQVFfQ0FMSUJSQVRJT05fVU5JVF9TSVpFX0dVQVJEID0gMHhGRkZGRkZGRiAgIA0KK30gQ2FsaWJyYXRpb25Vbml0Ow0KKw0KK3R5cGVkZWYgZW51bSBDb25jZW50cmljUmFrZURpcmVjdGlvbl9lbnVtIHsNCisgICAgSU1BUV9DT1VOVEVSX0NMT0NLV0lTRSAgICAgICAgICAgICAgICAgICAgPSAwLCAgICAgICAgICAgLy9UaGUgZnVuY3Rpb24gc2VhcmNoZXMgdGhlIHNlYXJjaCBhcmVhIGluIGEgY291bnRlci1jbG9ja3dpc2UgZGlyZWN0aW9uLg0KKyAgICBJTUFRX0NMT0NLV0lTRSAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDEsICAgICAgICAgICAvL1RoZSBmdW5jdGlvbiBzZWFyY2hlcyB0aGUgc2VhcmNoIGFyZWEgaW4gYSBjbG9ja3dpc2UgZGlyZWN0aW9uLg0KKyAgICBJTUFRX0NPTkNFTlRSSUNfUkFLRV9ESVJFQ1RJT05fU0laRV9HVUFSRCA9IDB4RkZGRkZGRkYgICANCit9IENvbmNlbnRyaWNSYWtlRGlyZWN0aW9uOw0KKw0KK3R5cGVkZWYgZW51bSBDYWxpYnJhdGlvbk1vZGVfZW51bSB7DQorICAgIElNQVFfUEVSU1BFQ1RJVkUgICAgICAgICAgICAgICAgID0gMCwgICAgICAgICAgIC8vRnVuY3Rpb25zIGNvcnJlY3QgZm9yIGRpc3RvcnRpb24gY2F1c2VkIGJ5IHRoZSBjYW1lcmEncyBwZXJzcGVjdGl2ZS4NCisgICAgSU1BUV9OT05MSU5FQVIgICAgICAgICAgICAgICAgICAgPSAxLCAgICAgICAgICAgLy9GdW5jdGlvbnMgY29ycmVjdCBmb3IgZGlzdG9ydGlvbiBjYXVzZWQgYnkgdGhlIGNhbWVyYSdzIGxlbnMuDQorICAgIElNQVFfU0lNUExFX0NBTElCUkFUSU9OICAgICAgICAgID0gMiwgICAgICAgICAgIC8vRnVuY3Rpb25zIGRvIG5vdCBjb3JyZWN0IGZvciBkaXN0b3J0aW9uLg0KKyAgICBJTUFRX0NPUlJFQ1RFRF9JTUFHRSAgICAgICAgICAgICA9IDMsICAgICAgICAgICAvL1RoZSBpbWFnZSBpcyBhbHJlYWR5IGNvcnJlY3RlZC4NCisgICAgSU1BUV9DQUxJQlJBVElPTl9NT0RFX1NJWkVfR1VBUkQgPSAweEZGRkZGRkZGICAgDQorfSBDYWxpYnJhdGlvbk1vZGU7DQorDQordHlwZWRlZiBlbnVtIEJyb3dzZXJMb2NhdGlvbl9lbnVtIHsNCisgICAgSU1BUV9JTlNFUlRfRklSU1RfRlJFRSAgICAgICAgICAgPSAwLCAgICAgICAgICAgLy9JbnNlcnRzIHRoZSB0aHVtYm5haWwgaW4gdGhlIGZpcnN0IGF2YWlsYWJsZSBjZWxsLg0KKyAgICBJTUFRX0lOU0VSVF9FTkQgICAgICAgICAgICAgICAgICA9IDEsICAgICAgICAgICAvL0luc2VydHMgdGhlIHRodW1ibmFpbCBhZnRlciB0aGUgbGFzdCBvY2N1cGllZCBjZWxsLg0KKyAgICBJTUFRX0JST1dTRVJfTE9DQVRJT05fU0laRV9HVUFSRCA9IDB4RkZGRkZGRkYgICANCit9IEJyb3dzZXJMb2NhdGlvbjsNCisNCit0eXBlZGVmIGVudW0gQnJvd3NlckZyYW1lU3R5bGVfZW51bSB7DQorICAgIElNQVFfUkFJU0VEX0ZSQU1FICAgICAgICAgICAgICAgICAgID0gMCwgICAgICAgICAgIC8vRWFjaCB0aHVtYm5haWwgaGFzIGEgcmFpc2VkIGZyYW1lLg0KKyAgICBJTUFRX0JFVkVMTEVEX0ZSQU1FICAgICAgICAgICAgICAgICA9IDEsICAgICAgICAgICAvL0VhY2ggdGh1bWJuYWlsIGhhcyBhIGJldmVsZWQgZnJhbWUuDQorICAgIElNQVFfT1VUTElORV9GUkFNRSAgICAgICAgICAgICAgICAgID0gMiwgICAgICAgICAgIC8vRWFjaCB0aHVtYm5haWwgaGFzIGFuIG91dGxpbmVkIGZyYW1lLg0KKyAgICBJTUFRX0hJRERFTl9GUkFNRSAgICAgICAgICAgICAgICAgICA9IDMsICAgICAgICAgICAvL0VhY2ggdGh1bWJuYWlsIGhhcyBhIGhpZGRlbiBmcmFtZS4NCisgICAgSU1BUV9TVEVQX0ZSQU1FICAgICAgICAgICAgICAgICAgICAgPSA0LCAgICAgICAgICAgLy9FYWNoIHRodW1ibmFpbCBoYXMgYSBzdGVwcGVkIGZyYW1lLg0KKyAgICBJTUFRX1JBSVNFRF9PVVRMSU5FX0ZSQU1FICAgICAgICAgICA9IDUsICAgICAgICAgICAvL0VhY2ggdGh1bWJuYWlsIGhhcyBhIHJhaXNlZCwgb3V0bGluZWQgZnJhbWUuDQorICAgIElNQVFfQlJPV1NFUl9GUkFNRV9TVFlMRV9TSVpFX0dVQVJEID0gMHhGRkZGRkZGRiAgIA0KK30gQnJvd3NlckZyYW1lU3R5bGU7DQorDQordHlwZWRlZiBlbnVtIEJvcmRlck1ldGhvZF9lbnVtIHsNCisgICAgSU1BUV9CT1JERVJfTUlSUk9SICAgICAgICAgICAgPSAwLCAgICAgICAgICAgLy9TeW1tZXRyaWNhbGx5IGNvcGllcyBwaXhlbCB2YWx1ZXMgZnJvbSB0aGUgaW1hZ2UgaW50byB0aGUgYm9yZGVyLg0KKyAgICBJTUFRX0JPUkRFUl9DT1BZICAgICAgICAgICAgICA9IDEsICAgICAgICAgICAvL0NvcGllcyB0aGUgdmFsdWUgb2YgdGhlIHBpeGVsIGNsb3Nlc3QgdG8gdGhlIGVkZ2Ugb2YgdGhlIGltYWdlIGludG8gdGhlIGJvcmRlci4NCisgICAgSU1BUV9CT1JERVJfQ0xFQVIgICAgICAgICAgICAgPSAyLCAgICAgICAgICAgLy9TZXRzIGFsbCBwaXhlbHMgaW4gdGhlIGJvcmRlciB0byAwLg0KKyAgICBJTUFRX0JPUkRFUl9NRVRIT0RfU0laRV9HVUFSRCA9IDB4RkZGRkZGRkYgICANCit9IEJvcmRlck1ldGhvZDsNCisNCit0eXBlZGVmIGVudW0gQmFyY29kZVR5cGVfZW51bSB7DQorICAgIElNQVFfSU5WQUxJRCAgICAgICAgICAgICAgICAgPSAtMSwgICAgICAgICAgLy9UaGUgYmFyY29kZSBpcyBub3Qgb2YgYSB0eXBlIGtub3duIGJ5IE5JIFZpc2lvbi4NCisgICAgSU1BUV9DT0RBQkFSICAgICAgICAgICAgICAgICA9IDEsICAgICAgICAgICAvL1RoZSBiYXJjb2RlIGlzIG9mIHR5cGUgQ29kYWJhci4NCisgICAgSU1BUV9DT0RFMzkgICAgICAgICAgICAgICAgICA9IDIsICAgICAgICAgICAvL1RoZSBiYXJjb2RlIGlzIG9mIHR5cGUgQ29kZSAzOS4NCisgICAgSU1BUV9DT0RFOTMgICAgICAgICAgICAgICAgICA9IDQsICAgICAgICAgICAvL1RoZSBiYXJjb2RlIGlzIG9mIHR5cGUgQ29kZSA5My4NCisgICAgSU1BUV9DT0RFMTI4ICAgICAgICAgICAgICAgICA9IDgsICAgICAgICAgICAvL1RoZSBiYXJjb2RlIGlzIG9mIHR5cGUgQ29kZSAxMjguDQorICAgIElNQVFfRUFOOCAgICAgICAgICAgICAgICAgICAgPSAxNiwgICAgICAgICAgLy9UaGUgYmFyY29kZSBpcyBvZiB0eXBlIEVBTiA4Lg0KKyAgICBJTUFRX0VBTjEzICAgICAgICAgICAgICAgICAgID0gMzIsICAgICAgICAgIC8vVGhlIGJhcmNvZGUgaXMgb2YgdHlwZSBFQU4gMTMuDQorICAgIElNQVFfSTJfT0ZfNSAgICAgICAgICAgICAgICAgPSA2NCwgICAgICAgICAgLy9UaGUgYmFyY29kZSBpcyBvZiB0eXBlIENvZGUgMjUuDQorICAgIElNQVFfTVNJICAgICAgICAgICAgICAgICAgICAgPSAxMjgsICAgICAgICAgLy9UaGUgYmFyY29kZSBpcyBvZiB0eXBlIE1TSSBjb2RlLg0KKyAgICBJTUFRX1VQQ0EgICAgICAgICAgICAgICAgICAgID0gMjU2LCAgICAgICAgIC8vVGhlIGJhcmNvZGUgaXMgb2YgdHlwZSBVUEMgQS4NCisgICAgSU1BUV9QSEFSTUFDT0RFICAgICAgICAgICAgICA9IDUxMiwgICAgICAgICAvL1RoZSBiYXJjb2RlIGlzIG9mIHR5cGUgUGhhcm1hY29kZS4NCisgICAgSU1BUV9SU1NfTElNSVRFRCAgICAgICAgICAgICA9IDEwMjQsICAgICAgICAvL1RoZSBiYXJjb2RlIGlzIG9mIHR5cGUgUlNTIExpbWl0ZWQuDQorICAgIElNQVFfQkFSQ09ERV9UWVBFX1NJWkVfR1VBUkQgPSAweEZGRkZGRkZGICAgDQorfSBCYXJjb2RlVHlwZTsNCisNCit0eXBlZGVmIGVudW0gQXhpc09yaWVudGF0aW9uX2VudW0gew0KKyAgICBJTUFRX0RJUkVDVCAgICAgICAgICAgICAgICAgICAgICA9IDAsICAgICAgICAgICAvL1RoZSB5LWF4aXMgZGlyZWN0aW9uIGNvcnJlc3BvbmRzIHRvIHRoZSB5LWF4aXMgZGlyZWN0aW9uIG9mIHRoZSBDYXJ0ZXNpYW4gY29vcmRpbmF0ZSBzeXN0ZW0uDQorICAgIElNQVFfSU5ESVJFQ1QgICAgICAgICAgICAgICAgICAgID0gMSwgICAgICAgICAgIC8vVGhlIHktYXhpcyBkaXJlY3Rpb24gY29ycmVzcG9uZHMgdG8gdGhlIHktYXhpcyBkaXJlY3Rpb24gb2YgYW4gaW1hZ2UuDQorICAgIElNQVFfQVhJU19PUklFTlRBVElPTl9TSVpFX0dVQVJEID0gMHhGRkZGRkZGRiAgIA0KK30gQXhpc09yaWVudGF0aW9uOw0KKw0KK3R5cGVkZWYgZW51bSBDb2xvcklnbm9yZU1vZGVfZW51bSB7DQorICAgIElNQVFfSUdOT1JFX05PTkUgICAgICAgICAgICAgICAgICAgICAgICA9IDAsICAgICAgICAgICAvL1NwZWNpZmllcyB0aGF0IHRoZSBmdW5jdGlvbiBkb2VzIG5vdCBpZ25vcmUgYW55IHBpeGVscy4NCisgICAgSU1BUV9JR05PUkVfQkxBQ0sgICAgICAgICAgICAgICAgICAgICAgID0gMSwgICAgICAgICAgIC8vU3BlY2lmaWVzIHRoYXQgdGhlIGZ1bmN0aW9uIGlnbm9yZXMgYmxhY2sgcGl4ZWxzLg0KKyAgICBJTUFRX0lHTk9SRV9XSElURSAgICAgICAgICAgICAgICAgICAgICAgPSAyLCAgICAgICAgICAgLy9TcGVjaWZpZXMgdGhhdCB0aGUgZnVuY3Rpb24gaWdub3JlcyB3aGl0ZSBwaXhlbHMuDQorICAgIElNQVFfSUdOT1JFX0JMQUNLX0FORF9XSElURSAgICAgICAgICAgICA9IDMsICAgICAgICAgICAvL1NwZWNpZmllcyB0aGF0IHRoZSBmdW5jdGlvbiBpZ25vcmVzIGJsYWNrIHBpeGVscyBhbmQgd2hpdGUgcGl4ZWxzLg0KKyAgICBJTUFRX0JMQUNLX1dISVRFX0lHTk9SRV9NT0RFX1NJWkVfR1VBUkQgPSAweEZGRkZGRkZGICAgDQorfSBDb2xvcklnbm9yZU1vZGU7DQorDQordHlwZWRlZiBlbnVtIExldmVsVHlwZV9lbnVtIHsNCisgICAgSU1BUV9BQlNPTFVURSAgICAgICAgICAgICAgPSAwLCAgICAgICAgICAgLy9UaGUgZnVuY3Rpb24gZXZhbHVhdGVzIHRoZSB0aHJlc2hvbGQgYW5kIGh5c3RlcmVzaXMgdmFsdWVzIGFzIGFic29sdXRlIHZhbHVlcy4NCisgICAgSU1BUV9SRUxBVElWRSAgICAgICAgICAgICAgPSAxLCAgICAgICAgICAgLy9UaGUgZnVuY3Rpb24gZXZhbHVhdGVzIHRoZSB0aHJlc2hvbGQgYW5kIGh5c3RlcmVzaXMgdmFsdWVzIHJlbGF0aXZlIHRvIHRoZSBkeW5hbWljIHJhbmdlIG9mIHRoZSBnaXZlbiBwYXRoLg0KKyAgICBJTUFRX0xFVkVMX1RZUEVfU0laRV9HVUFSRCA9IDB4RkZGRkZGRkYgICANCit9IExldmVsVHlwZTsNCisNCit0eXBlZGVmIGVudW0gTWF0Y2hpbmdNb2RlX2VudW0gew0KKyAgICBJTUFRX01BVENIX1NISUZUX0lOVkFSSUFOVCAgICA9IDEsICAgICAgICAgICAvL1NlYXJjaGVzIGZvciBvY2N1cnJlbmNlcyBvZiB0aGUgdGVtcGxhdGUgaW1hZ2UgYW55d2hlcmUgaW4gdGhlIHNlYXJjaFJlY3QsIGFzc3VtaW5nIHRoYXQgdGhlIHBhdHRlcm4gaXMgbm90IHJvdGF0ZWQgbW9yZSB0aGFuIHBsdXMgb3IgbWludXMgNCBkZWdyZWVzLg0KKyAgICBJTUFRX01BVENIX1JPVEFUSU9OX0lOVkFSSUFOVCA9IDIsICAgICAgICAgICAvL1NlYXJjaGVzIGZvciBvY2N1cnJlbmNlcyBvZiB0aGUgcGF0dGVybiBpbiB0aGUgaW1hZ2Ugd2l0aCBubyByZXN0cmljdGlvbiBvbiB0aGUgcm90YXRpb24gb2YgdGhlIHBhdHRlcm4uDQorICAgIElNQVFfTUFUQ0hJTkdfTU9ERV9TSVpFX0dVQVJEID0gMHhGRkZGRkZGRiAgIA0KK30gTWF0Y2hpbmdNb2RlOw0KKw0KK3R5cGVkZWYgZW51bSBNYXBwaW5nTWV0aG9kX2VudW0gew0KKyAgICBJTUFRX0ZVTExfRFlOQU1JQyAgICAgICAgICAgICAgPSAwLCAgICAgICAgICAgLy8oT2Jzb2xldGUpIFdoZW4gdGhlIGltYWdlIGJpdCBkZXB0aCBpcyAwLCB0aGUgZnVuY3Rpb24gbWFwcyB0aGUgZnVsbCBkeW5hbWljIHJhbmdlIG9mIHRoZSAxNi1iaXQgaW1hZ2UgdG8gYW4gOC1iaXQgc2NhbGUuDQorICAgIElNQVFfRE9XTlNISUZUICAgICAgICAgICAgICAgICA9IDEsICAgICAgICAgICAvLyhPYnNvbGV0ZSkgV2hlbiB0aGUgaW1hZ2UgYml0IGRlcHRoIGlzIDAsIHRoZSBmdW5jdGlvbiBzaGlmdHMgdGhlIDE2LWJpdCBpbWFnZSBwaXhlbHMgdG8gdGhlIHJpZ2h0IHRoZSBudW1iZXIgb2YgdGltZXMgc3BlY2lmaWVkIGJ5IHRoZSBzaGlmdENvdW50IGVsZW1lbnQgb2YgdGhlIERpc3BsYXlNYXBwaW5nIHN0cnVjdHVyZS4NCisgICAgSU1BUV9SQU5HRSAgICAgICAgICAgICAgICAgICAgID0gMiwgICAgICAgICAgIC8vKE9ic29sZXRlKSBXaGVuIHRoZSBpbWFnZSBiaXQgZGVwdGggaXMgMCwgdGhlIGZ1bmN0aW9uIG1hcHMgdGhlIHBpeGVsIHZhbHVlcyBpbiB0aGUgcmFuZ2Ugc3BlY2lmaWVkIGJ5IHRoZSBtaW5pbXVtVmFsdWUgYW5kIG1heGltdW1WYWx1ZSBlbGVtZW50cyBvZiB0aGUgRGlzcGxheU1hcHBpbmcgc3RydWN0dXJlIHRvIGFuIDgtYml0IHNjYWxlLg0KKyAgICBJTUFRXzkwX1BDVF9EWU5BTUlDICAgICAgICAgICAgPSAzLCAgICAgICAgICAgLy8oT2Jzb2xldGUpIFdoZW4gdGhlIGltYWdlIGJpdCBkZXB0aCB0byAwLCB0aGUgZnVuY3Rpb24gbWFwcyB0aGUgZHluYW1pYyByYW5nZSBjb250YWluaW5nIHRoZSBtaWRkbGUgOTAgcGVyY2VudCBvZiB0aGUgY3VtdWxhdGVkIGhpc3RvZ3JhbSBvZiB0aGUgaW1hZ2UgdG8gYW4gOC1iaXQgKDI1NiBncmF5c2NhbGUgdmFsdWVzKSBzY2FsZS4NCisgICAgSU1BUV9QRVJDRU5UX1JBTkdFICAgICAgICAgICAgID0gNCwgICAgICAgICAgIC8vKE9ic29sZXRlKSBXaGVuIHRoZSBpbWFnZSBiaXQgZGVwdGggaXMgMCwgdGhlIGZ1bmN0aW9uIG1hcHMgdGhlIHBpeGVsIHZhbHVlcyBpbiB0aGUgcmVsYXRpdmUgcGVyY2VudGFnZSByYW5nZSAoMCB0byAxMDApIG9mIHRoZSBjdW11bGF0ZWQgaGlzdG9ncmFtIHNwZWNpZmllZCBieSBtaW5pbXVtVmFsdWUgYW5kIG1heGltdW1WYWx1ZSB0byBhbiA4LWJpdCBzY2FsZS4NCisgICAgSU1BUV9ERUZBVUxUX01BUFBJTkcgICAgICAgICAgID0gMTAsICAgICAgICAgIC8vSWYgdGhlIGJpdCBkZXB0aCBpcyAwLCB0aGUgZnVuY3Rpb24gbWFwcyB0aGUgMTYtYml0IGltYWdlIHRvIDggYml0cyBieSBmb2xsb3dpbmcgdGhlIElNQVFfRlVMTF9EWU5BTUlDX0FMV0FZUyBiZWhhdmlvcjsgb3RoZXJ3aXNlLCB0aGUgZnVuY3Rpb24gc2hpZnRzIHRoZSBpbWFnZSBkYXRhIHRvIHRoZSByaWdodCBhY2NvcmRpbmcgdG8gdGhlIElNQVFfTU9TVF9TSUdOSUZJQ0FOVCBiZWhhdmlvci4NCisgICAgSU1BUV9NT1NUX1NJR05JRklDQU5UICAgICAgICAgID0gMTEsICAgICAgICAgIC8vVGhlIGZ1bmN0aW9uIHNoaWZ0cyB0aGUgMTYtYml0IGltYWdlIHBpeGVscyB0byB0aGUgcmlnaHQgdW50aWwgdGhlIDggbW9zdCBzaWduaWZpY2FudCBiaXRzIG9mIHRoZSBpbWFnZSBkYXRhIGFyZSByZW1haW5pbmcuDQorICAgIElNQVFfRlVMTF9EWU5BTUlDX0FMV0FZUyAgICAgICA9IDEyLCAgICAgICAgICAvL1RoZSBmdW5jdGlvbiBtYXBzIHRoZSBmdWxsIGR5bmFtaWMgcmFuZ2Ugb2YgdGhlIDE2LWJpdCBpbWFnZSB0byBhbiA4LWJpdCBzY2FsZS4NCisgICAgSU1BUV9ET1dOU0hJRlRfQUxXQVlTICAgICAgICAgID0gMTMsICAgICAgICAgIC8vVGhlIGZ1bmN0aW9uIHNoaWZ0cyB0aGUgMTYtYml0IGltYWdlIHBpeGVscyB0byB0aGUgcmlnaHQgdGhlIG51bWJlciBvZiB0aW1lcyBzcGVjaWZpZWQgYnkgdGhlIHNoaWZ0Q291bnQgZWxlbWVudCBvZiB0aGUgRGlzcGxheU1hcHBpbmcgc3RydWN0dXJlLg0KKyAgICBJTUFRX1JBTkdFX0FMV0FZUyAgICAgICAgICAgICAgPSAxNCwgICAgICAgICAgLy9UaGUgZnVuY3Rpb24gbWFwcyB0aGUgcGl4ZWwgdmFsdWVzIGluIHRoZSByYW5nZSBzcGVjaWZpZWQgYnkgdGhlIG1pbmltdW1WYWx1ZSBhbmQgbWF4aW11bVZhbHVlIGVsZW1lbnRzIG9mIHRoZSBEaXNwbGF5TWFwcGluZyBzdHJ1Y3R1cmUgdG8gYW4gOC1iaXQgc2NhbGUuDQorICAgIElNQVFfOTBfUENUX0RZTkFNSUNfQUxXQVlTICAgICA9IDE1LCAgICAgICAgICAvL1RoZSBmdW5jdGlvbiBtYXBzIHRoZSBkeW5hbWljIHJhbmdlIGNvbnRhaW5pbmcgdGhlIG1pZGRsZSA5MCBwZXJjZW50IG9mIHRoZSBjdW11bGF0ZWQgaGlzdG9ncmFtIG9mIHRoZSBpbWFnZSB0byBhbiA4LWJpdCAoMjU2IGdyYXlzY2FsZSB2YWx1ZXMpIHNjYWxlLg0KKyAgICBJTUFRX1BFUkNFTlRfUkFOR0VfQUxXQVlTICAgICAgPSAxNiwgICAgICAgICAgLy9UaGUgZnVuY3Rpb24gbWFwcyB0aGUgcGl4ZWwgdmFsdWVzIGluIHRoZSByZWxhdGl2ZSBwZXJjZW50YWdlIHJhbmdlICgwIHRvIDEwMCkgb2YgdGhlIGN1bXVsYXRlZCBoaXN0b2dyYW0gc3BlY2lmaWVkIGJ5IG1pbmltdW1WYWx1ZSBhbmQgbWF4aW11bVZhbHVlIHRvIGFuIDgtYml0IHNjYWxlLg0KKyAgICBJTUFRX01BUFBJTkdfTUVUSE9EX1NJWkVfR1VBUkQgPSAweEZGRkZGRkZGICAgDQorfSBNYXBwaW5nTWV0aG9kOw0KKw0KK3R5cGVkZWYgZW51bSBDb21wYXJpc29uRnVuY3Rpb25fZW51bSB7DQorICAgIElNQVFfQ0xFQVJfTEVTUyAgICAgICAgICAgICAgICAgID0gMCwgICAgICAgICAgIC8vVGhlIGNvbXBhcmlzb24gaXMgdHJ1ZSBpZiB0aGUgc291cmNlIHBpeGVsIHZhbHVlIGlzIGxlc3MgdGhhbiB0aGUgY29tcGFyaXNvbiBpbWFnZSBwaXhlbCB2YWx1ZS4NCisgICAgSU1BUV9DTEVBUl9MRVNTX09SX0VRVUFMICAgICAgICAgPSAxLCAgICAgICAgICAgLy9UaGUgY29tcGFyaXNvbiBpcyB0cnVlIGlmIHRoZSBzb3VyY2UgcGl4ZWwgdmFsdWUgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSBjb21wYXJpc29uIGltYWdlIHBpeGVsIHZhbHVlLg0KKyAgICBJTUFRX0NMRUFSX0VRVUFMICAgICAgICAgICAgICAgICA9IDIsICAgICAgICAgICAvL1RoZSBjb21wYXJpc29uIGlzIHRydWUgaWYgdGhlIHNvdXJjZSBwaXhlbCB2YWx1ZSBpcyBlcXVhbCB0byB0aGUgY29tcGFyaXNvbiBpbWFnZSBwaXhlbCB2YWx1ZS4NCisgICAgSU1BUV9DTEVBUl9HUkVBVEVSX09SX0VRVUFMICAgICAgPSAzLCAgICAgICAgICAgLy9UaGUgY29tcGFyaXNvbiBpcyB0cnVlIGlmIHRoZSBzb3VyY2UgcGl4ZWwgdmFsdWUgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHRoZSBjb21wYXJpc29uIGltYWdlIHBpeGVsIHZhbHVlLg0KKyAgICBJTUFRX0NMRUFSX0dSRUFURVIgICAgICAgICAgICAgICA9IDQsICAgICAgICAgICAvL1RoZSBjb21wYXJpc29uIGlzIHRydWUgaWYgdGhlIHNvdXJjZSBwaXhlbCB2YWx1ZSBpcyBncmVhdGVyIHRoYW4gdGhlIGNvbXBhcmlzb24gaW1hZ2UgcGl4ZWwgdmFsdWUuDQorICAgIElNQVFfQ09NUEFSRV9GVU5DVElPTl9TSVpFX0dVQVJEID0gMHhGRkZGRkZGRiAgIA0KK30gQ29tcGFyaXNvbkZ1bmN0aW9uOw0KKw0KK3R5cGVkZWYgZW51bSBMaW5lR2F1Z2VNZXRob2RfZW51bSB7DQorICAgIElNQVFfRURHRV9UT19FREdFICAgICAgICAgICAgICAgICA9IDAsICAgICAgICAgICAvL01lYXN1cmVzIGZyb20gdGhlIGZpcnN0IGVkZ2Ugb24gdGhlIGxpbmUgdG8gdGhlIGxhc3QgZWRnZSBvbiB0aGUgbGluZS4NCisgICAgSU1BUV9FREdFX1RPX1BPSU5UICAgICAgICAgICAgICAgID0gMSwgICAgICAgICAgIC8vTWVhc3VyZXMgZnJvbSB0aGUgZmlyc3QgZWRnZSBvbiB0aGUgbGluZSB0byB0aGUgZW5kIHBvaW50IG9mIHRoZSBsaW5lLg0KKyAgICBJTUFRX1BPSU5UX1RPX0VER0UgICAgICAgICAgICAgICAgPSAyLCAgICAgICAgICAgLy9NZWFzdXJlcyBmcm9tIHRoZSBzdGFydCBwb2ludCBvZiB0aGUgbGluZSB0byB0aGUgZmlyc3QgZWRnZSBvbiB0aGUgbGluZS4NCisgICAgSU1BUV9QT0lOVF9UT19QT0lOVCAgICAgICAgICAgICAgID0gMywgICAgICAgICAgIC8vTWVhc3VyZXMgZnJvbSB0aGUgc3RhcnQgcG9pbnQgb2YgdGhlIGxpbmUgdG8gdGhlIGVuZCBwb2ludCBvZiB0aGUgbGluZS4NCisgICAgSU1BUV9MSU5FX0dBVUdFX01FVEhPRF9TSVpFX0dVQVJEID0gMHhGRkZGRkZGRiAgIA0KK30gTGluZUdhdWdlTWV0aG9kOw0KKw0KK3R5cGVkZWYgZW51bSBEaXJlY3Rpb24zRF9lbnVtIHsNCisgICAgSU1BUV8zRF9OVyAgICAgICAgICAgICAgICAgICA9IDAsICAgICAgICAgICAvL1RoZSB2aWV3aW5nIGFuZ2xlIGZvciB0aGUgM0QgaW1hZ2UgaXMgZnJvbSB0aGUgbm9ydGh3ZXN0Lg0KKyAgICBJTUFRXzNEX1NXICAgICAgICAgICAgICAgICAgID0gMSwgICAgICAgICAgIC8vVGhlIHZpZXdpbmcgYW5nbGUgZm9yIHRoZSAzRCBpbWFnZSBpcyBmcm9tIHRoZSBzb3V0aHdlc3QuDQorICAgIElNQVFfM0RfU0UgICAgICAgICAgICAgICAgICAgPSAyLCAgICAgICAgICAgLy9UaGUgdmlld2luZyBhbmdsZSBmb3IgdGhlIDNEIGltYWdlIGlzIGZyb20gdGhlIHNvdXRoZWFzdC4NCisgICAgSU1BUV8zRF9ORSAgICAgICAgICAgICAgICAgICA9IDMsICAgICAgICAgICAvL1RoZSB2aWV3aW5nIGFuZ2xlIGZvciB0aGUgM0QgaW1hZ2UgaXMgZnJvbSB0aGUgbm9ydGhlYXN0Lg0KKyAgICBJTUFRX0RJUkVDVElPTl8zRF9TSVpFX0dVQVJEID0gMHhGRkZGRkZGRiAgIA0KK30gRGlyZWN0aW9uM0Q7DQorDQordHlwZWRlZiBlbnVtIExlYXJuaW5nTW9kZV9lbnVtIHsNCisgICAgSU1BUV9MRUFSTl9BTEwgICAgICAgICAgICAgICAgICA9IDAsICAgICAgICAgICAvL1RoZSBmdW5jdGlvbiBleHRyYWN0cyBpbmZvcm1hdGlvbiBmb3Igc2hpZnQtIGFuZCByb3RhdGlvbi1pbnZhcmlhbnQgbWF0Y2hpbmcuDQorICAgIElNQVFfTEVBUk5fU0hJRlRfSU5GT1JNQVRJT04gICAgPSAxLCAgICAgICAgICAgLy9UaGUgZnVuY3Rpb24gZXh0cmFjdHMgaW5mb3JtYXRpb24gZm9yIHNoaWZ0LWludmFyaWFudCBtYXRjaGluZy4NCisgICAgSU1BUV9MRUFSTl9ST1RBVElPTl9JTkZPUk1BVElPTiA9IDIsICAgICAgICAgICAvL1RoZSBmdW5jdGlvbiBleHRyYWN0cyBpbmZvcm1hdGlvbiBmb3Igcm90YXRpb24taW52YXJpYW50IG1hdGNoaW5nLg0KKyAgICBJTUFRX0xFQVJOSU5HX01PREVfU0laRV9HVUFSRCAgID0gMHhGRkZGRkZGRiAgIA0KK30gTGVhcm5pbmdNb2RlOw0KKw0KK3R5cGVkZWYgZW51bSBLZXJuZWxGYW1pbHlfZW51bSB7DQorICAgIElNQVFfR1JBRElFTlRfRkFNSUxZICAgICAgICAgID0gMCwgICAgICAgICAgIC8vVGhlIGtlcm5lbCBpcyBpbiB0aGUgZ3JhZGllbnQgZmFtaWx5Lg0KKyAgICBJTUFRX0xBUExBQ0lBTl9GQU1JTFkgICAgICAgICA9IDEsICAgICAgICAgICAvL1RoZSBrZXJuZWwgaXMgaW4gdGhlIExhcGxhY2lhbiBmYW1pbHkuDQorICAgIElNQVFfU01PT1RISU5HX0ZBTUlMWSAgICAgICAgID0gMiwgICAgICAgICAgIC8vVGhlIGtlcm5lbCBpcyBpbiB0aGUgc21vb3RoaW5nIGZhbWlseS4NCisgICAgSU1BUV9HQVVTU0lBTl9GQU1JTFkgICAgICAgICAgPSAzLCAgICAgICAgICAgLy9UaGUga2VybmVsIGlzIGluIHRoZSBHYXVzc2lhbiBmYW1pbHkuDQorICAgIElNQVFfS0VSTkVMX0ZBTUlMWV9TSVpFX0dVQVJEID0gMHhGRkZGRkZGRiAgIA0KK30gS2VybmVsRmFtaWx5Ow0KKw0KK3R5cGVkZWYgZW51bSBJbnRlcnBvbGF0aW9uTWV0aG9kX2VudW0gew0KKyAgICBJTUFRX1pFUk9fT1JERVIgICAgICAgICAgICAgICAgICAgICAgPSAwLCAgICAgICAgICAgLy9UaGUgZnVuY3Rpb24gdXNlcyBhbiBpbnRlcnBvbGF0aW9uIG1ldGhvZCB0aGF0IGludGVycG9sYXRlcyBuZXcgcGl4ZWwgdmFsdWVzIHVzaW5nIHRoZSBuZWFyZXN0IHZhbGlkIG5laWdoYm9yaW5nIHBpeGVsLg0KKyAgICBJTUFRX0JJTElORUFSICAgICAgICAgICAgICAgICAgICAgICAgPSAxLCAgICAgICAgICAgLy9UaGUgZnVuY3Rpb24gdXNlcyBhbiBpbnRlcnBvbGF0aW9uIG1ldGhvZCB0aGF0IGludGVycG9sYXRlcyBuZXcgcGl4ZWwgdmFsdWVzIHVzaW5nIGEgYmlkaXJlY3Rpb25hbCBhdmVyYWdlIG9mIHRoZSBuZWlnaGJvcmluZyBwaXhlbHMuDQorICAgIElNQVFfUVVBRFJBVElDICAgICAgICAgICAgICAgICAgICAgICA9IDIsICAgICAgICAgICAvL1RoZSBmdW5jdGlvbiB1c2VzIGFuIGludGVycG9sYXRpb24gbWV0aG9kIHRoYXQgaW50ZXJwb2xhdGVzIG5ldyBwaXhlbCB2YWx1ZXMgdXNpbmcgYSBxdWFkcmF0aWMgYXBwcm94aW1hdGluZyBwb2x5bm9taWFsLg0KKyAgICBJTUFRX0NVQklDX1NQTElORSAgICAgICAgICAgICAgICAgICAgPSAzLCAgICAgICAgICAgLy9UaGUgZnVuY3Rpb24gdXNlcyBhbiBpbnRlcnBvbGF0aW9uIG1ldGhvZCB0aGF0IGludGVycG9sYXRlcyBuZXcgcGl4ZWwgdmFsdWVzIGJ5IGZpdHRpbmcgdGhlbSB0byBhIGN1YmljIHNwbGluZSBjdXJ2ZSwgd2hlcmUgdGhlIGN1cnZlIGlzIGJhc2VkIG9uIGtub3duIHBpeGVsIHZhbHVlcyBmcm9tIHRoZSBpbWFnZS4NCisgICAgSU1BUV9CSUxJTkVBUl9GSVhFRCAgICAgICAgICAgICAgICAgID0gNCwgICAgICAgICAgIC8vVGhlIGZ1bmN0aW9uIHVzZXMgYW4gaW50ZXJwb2xhdGlvbiBtZXRob2QgdGhhdCBpbnRlcnBvbGF0ZXMgbmV3IHBpeGVsIHZhbHVlcyB1c2luZyBhIGJpZGlyZWN0aW9uYWwgYXZlcmFnZSBvZiB0aGUgbmVpZ2hib3JpbmcgcGl4ZWxzLg0KKyAgICBJTUFRX0lOVEVSUE9MQVRJT05fTUVUSE9EX1NJWkVfR1VBUkQgPSAweEZGRkZGRkZGICAgDQorfSBJbnRlcnBvbGF0aW9uTWV0aG9kOw0KKw0KK3R5cGVkZWYgZW51bSBJbWFnZVR5cGVfZW51bSB7DQorICAgIElNQVFfSU1BR0VfVTggICAgICAgICAgICAgID0gMCwgICAgICAgICAgIC8vVGhlIGltYWdlIHR5cGUgaXMgOC1iaXQgdW5zaWduZWQgaW50ZWdlciBncmF5c2NhbGUuDQorICAgIElNQVFfSU1BR0VfVTE2ICAgICAgICAgICAgID0gNywgICAgICAgICAgIC8vVGhlIGltYWdlIHR5cGUgaXMgMTYtYml0IHVuc2lnbmVkIGludGVnZXIgZ3JheXNjYWxlLg0KKyAgICBJTUFRX0lNQUdFX0kxNiAgICAgICAgICAgICA9IDEsICAgICAgICAgICAvL1RoZSBpbWFnZSB0eXBlIGlzIDE2LWJpdCBzaWduZWQgaW50ZWdlciBncmF5c2NhbGUuDQorICAgIElNQVFfSU1BR0VfU0dMICAgICAgICAgICAgID0gMiwgICAgICAgICAgIC8vVGhlIGltYWdlIHR5cGUgaXMgMzItYml0IGZsb2F0aW5nLXBvaW50IGdyYXlzY2FsZS4NCisgICAgSU1BUV9JTUFHRV9DT01QTEVYICAgICAgICAgPSAzLCAgICAgICAgICAgLy9UaGUgaW1hZ2UgdHlwZSBpcyBjb21wbGV4Lg0KKyAgICBJTUFRX0lNQUdFX1JHQiAgICAgICAgICAgICA9IDQsICAgICAgICAgICAvL1RoZSBpbWFnZSB0eXBlIGlzIFJHQiBjb2xvci4NCisgICAgSU1BUV9JTUFHRV9IU0wgICAgICAgICAgICAgPSA1LCAgICAgICAgICAgLy9UaGUgaW1hZ2UgdHlwZSBpcyBIU0wgY29sb3IuDQorICAgIElNQVFfSU1BR0VfUkdCX1U2NCAgICAgICAgID0gNiwgICAgICAgICAgIC8vVGhlIGltYWdlIHR5cGUgaXMgNjQtYml0IHVuc2lnbmVkIFJHQiBjb2xvci4NCisgICAgSU1BUV9JTUFHRV9UWVBFX1NJWkVfR1VBUkQgPSAweEZGRkZGRkZGICAgDQorfSBJbWFnZVR5cGU7DQorDQordHlwZWRlZiBlbnVtIEltYWdlRmVhdHVyZU1vZGVfZW51bSB7DQorICAgIElNQVFfQ09MT1JfQU5EX1NIQVBFX0ZFQVRVUkVTID0gMCwgICAgICAgICAgIC8vSW5zdHJ1Y3RzIHRoZSBmdW5jdGlvbiB0byB1c2UgdGhlIGNvbG9yIGFuZCB0aGUgc2hhcGUgZmVhdHVyZXMgb2YgdGhlIGNvbG9yIHBhdHRlcm4uDQorICAgIElNQVFfQ09MT1JfRkVBVFVSRVMgICAgICAgICAgID0gMSwgICAgICAgICAgIC8vSW5zdHJ1Y3RzIHRoZSBmdW5jdGlvbiB0byB1c2UgdGhlIGNvbG9yIGZlYXR1cmVzIG9mIHRoZSBjb2xvciBwYXR0ZXJuLg0KKyAgICBJTUFRX1NIQVBFX0ZFQVRVUkVTICAgICAgICAgICA9IDIsICAgICAgICAgICAvL0luc3RydWN0cyB0aGUgZnVuY3Rpb24gdG8gdXNlIHRoZSBzaGFwZSBmZWF0dXJlcyBvZiB0aGUgY29sb3IgcGF0dGVybi4NCisgICAgSU1BUV9GRUFUVVJFX01PREVfU0laRV9HVUFSRCAgPSAweEZGRkZGRkZGICAgDQorfSBJbWFnZUZlYXR1cmVNb2RlOw0KKw0KK3R5cGVkZWYgZW51bSBGb250Q29sb3JfZW51bSB7DQorICAgIElNQVFfV0hJVEUgICAgICAgICAgICAgICAgID0gMCwgICAgICAgICAgIC8vRHJhd3MgdGV4dCBpbiB3aGl0ZS4NCisgICAgSU1BUV9CTEFDSyAgICAgICAgICAgICAgICAgPSAxLCAgICAgICAgICAgLy9EcmF3cyB0ZXh0IGluIGJsYWNrLg0KKyAgICBJTUFRX0lOVkVSVCAgICAgICAgICAgICAgICA9IDIsICAgICAgICAgICAvL0ludmVydHMgdGhlIHRleHQgcGl4ZWxzLg0KKyAgICBJTUFRX0JMQUNLX09OX1dISVRFICAgICAgICA9IDMsICAgICAgICAgICAvL0RyYXdzIHRleHQgaW4gYmxhY2sgd2l0aCBhIHdoaXRlIGJhY2tncm91bmQuDQorICAgIElNQVFfV0hJVEVfT05fQkxBQ0sgICAgICAgID0gNCwgICAgICAgICAgIC8vRHJhd3MgdGV4dCBpbiB3aGl0ZSB3aXRoIGEgYmxhY2sgYmFja2dyb3VuZC4NCisgICAgSU1BUV9GT05UX0NPTE9SX1NJWkVfR1VBUkQgPSAweEZGRkZGRkZGICAgDQorfSBGb250Q29sb3I7DQorDQordHlwZWRlZiBlbnVtIEZsaXBBeGlzX2VudW0gew0KKyAgICBJTUFRX0hPUklaT05UQUxfQVhJUyAgICAgID0gMCwgICAgICAgICAgIC8vRmxpcHMgdGhlIGltYWdlIG92ZXIgdGhlIGNlbnRyYWwgaG9yaXpvbnRhbCBheGlzLg0KKyAgICBJTUFRX1ZFUlRJQ0FMX0FYSVMgICAgICAgID0gMSwgICAgICAgICAgIC8vRmxpcHMgdGhlIGltYWdlIG92ZXIgdGhlIGNlbnRyYWwgdmVydGljYWwgYXhpcy4NCisgICAgSU1BUV9DRU5URVJfQVhJUyAgICAgICAgICA9IDIsICAgICAgICAgICAvL0ZsaXBzIHRoZSBpbWFnZSBvdmVyIGJvdGggdGhlIGNlbnRyYWwgdmVydGljYWwgYW5kIGhvcml6b250YWwgYXhlcy4NCisgICAgSU1BUV9ESUFHX0xfVE9fUl9BWElTICAgICA9IDMsICAgICAgICAgICAvL0ZsaXBzIHRoZSBpbWFnZSBvdmVyIGFuIGF4aXMgZnJvbSB0aGUgdXBwZXIgbGVmdCBjb3JuZXIgdG8gbG93ZXIgcmlnaHQgY29ybmVyLg0KKyAgICBJTUFRX0RJQUdfUl9UT19MX0FYSVMgICAgID0gNCwgICAgICAgICAgIC8vRmxpcHMgdGhlIGltYWdlIG92ZXIgYW4gYXhpcyBmcm9tIHRoZSB1cHBlciByaWdodCBjb3JuZXIgdG8gbG93ZXIgbGVmdCBjb3JuZXIuDQorICAgIElNQVFfRkxJUF9BWElTX1NJWkVfR1VBUkQgPSAweEZGRkZGRkZGICAgDQorfSBGbGlwQXhpczsNCisNCit0eXBlZGVmIGVudW0gRWRnZVByb2Nlc3NfZW51bSB7DQorICAgIElNQVFfRklSU1QgICAgICAgICAgICAgICAgICAgPSAwLCAgICAgICAgICAgLy9UaGUgZnVuY3Rpb24gbG9va3MgZm9yIHRoZSBmaXJzdCBlZGdlLg0KKyAgICBJTUFRX0ZJUlNUX0FORF9MQVNUICAgICAgICAgID0gMSwgICAgICAgICAgIC8vVGhlIGZ1bmN0aW9uIGxvb2tzIGZvciB0aGUgZmlyc3QgYW5kIGxhc3QgZWRnZS4NCisgICAgSU1BUV9BTEwgICAgICAgICAgICAgICAgICAgICA9IDIsICAgICAgICAgICAvL1RoZSBmdW5jdGlvbiBsb29rcyBmb3IgYWxsIGVkZ2VzLg0KKyAgICBJTUFRX0JFU1QgICAgICAgICAgICAgICAgICAgID0gMywgICAgICAgICAgIC8vVGhlIGZ1bmN0aW9uIGxvb2tzIGZvciB0aGUgYmVzdCBlZGdlLg0KKyAgICBJTUFRX0VER0VfUFJPQ0VTU19TSVpFX0dVQVJEID0gMHhGRkZGRkZGRiAgIA0KK30gRWRnZVByb2Nlc3M7DQorDQordHlwZWRlZiBlbnVtIERyYXdNb2RlX2VudW0gew0KKyAgICBJTUFRX0RSQVdfVkFMVUUgICAgICAgICAgID0gMCwgICAgICAgICAgIC8vRHJhd3MgdGhlIGJvdW5kYXJ5IG9mIHRoZSBvYmplY3Qgd2l0aCB0aGUgc3BlY2lmaWVkIHBpeGVsIHZhbHVlLg0KKyAgICBJTUFRX0RSQVdfSU5WRVJUICAgICAgICAgID0gMiwgICAgICAgICAgIC8vSW52ZXJ0cyB0aGUgcGl4ZWwgdmFsdWVzIG9mIHRoZSBib3VuZGFyeSBvZiB0aGUgb2JqZWN0Lg0KKyAgICBJTUFRX1BBSU5UX1ZBTFVFICAgICAgICAgID0gMSwgICAgICAgICAgIC8vRmlsbHMgdGhlIG9iamVjdCB3aXRoIHRoZSBnaXZlbiBwaXhlbCB2YWx1ZS4NCisgICAgSU1BUV9QQUlOVF9JTlZFUlQgICAgICAgICA9IDMsICAgICAgICAgICAvL0ludmVydHMgdGhlIHBpeGVsIHZhbHVlcyBvZiB0aGUgb2JqZWN0Lg0KKyAgICBJTUFRX0hJR0hMSUdIVF9WQUxVRSAgICAgID0gNCwgICAgICAgICAgIC8vVGhlIGZ1bmN0aW9uIGZpbGxzIHRoZSBvYmplY3QgYnkgaGlnaGxpZ2h0aW5nIHRoZSBlbmNsb3NlZCBwaXhlbHMgd2l0aCB0aGUgY29sb3Igb2YgdGhlIG9iamVjdC4NCisgICAgSU1BUV9EUkFXX01PREVfU0laRV9HVUFSRCA9IDB4RkZGRkZGRkYgICANCit9IERyYXdNb2RlOw0KKw0KK3R5cGVkZWYgZW51bSBOZWFyZXN0TmVpZ2hib3JNZXRyaWNfZW51bSB7DQorICAgIElNQVFfTUVUUklDX01BWElNVU0gICAgICAgICAgICAgICAgICAgICA9IDAsICAgICAgICAgICAvL1RoZSBtYXhpbXVtIG1ldHJpYy4NCisgICAgSU1BUV9NRVRSSUNfU1VNICAgICAgICAgICAgICAgICAgICAgICAgID0gMSwgICAgICAgICAgIC8vVGhlIHN1bSBtZXRyaWMuDQorICAgIElNQVFfTUVUUklDX0VVQ0xJREVBTiAgICAgICAgICAgICAgICAgICA9IDIsICAgICAgICAgICAvL1RoZSBFdWNsaWRlYW4gbWV0cmljLg0KKyAgICBJTUFRX05FQVJFU1RfTkVJR0hCT1JfTUVUUklDX1NJWkVfR1VBUkQgPSAweEZGRkZGRkZGICAgDQorfSBOZWFyZXN0TmVpZ2hib3JNZXRyaWM7DQorDQordHlwZWRlZiBlbnVtIFJlYWRSZXNvbHV0aW9uX2VudW0gew0KKyAgICBJTUFRX0xPV19SRVNPTFVUSU9OICAgICAgICAgICAgID0gMCwgICAgICAgICAgIC8vQ29uZmlndXJlcyBOSSBWaXNpb24gdG8gdXNlIGxvdyByZXNvbHV0aW9uIGR1cmluZyB0aGUgcmVhZCBwcm9jZXNzLg0KKyAgICBJTUFRX01FRElVTV9SRVNPTFVUSU9OICAgICAgICAgID0gMSwgICAgICAgICAgIC8vQ29uZmlndXJlcyBOSSBWaXNpb24gdG8gdXNlIG1lZGl1bSByZXNvbHV0aW9uIGR1cmluZyB0aGUgcmVhZCBwcm9jZXNzLg0KKyAgICBJTUFRX0hJR0hfUkVTT0xVVElPTiAgICAgICAgICAgID0gMiwgICAgICAgICAgIC8vQ29uZmlndXJlcyBOSSBWaXNpb24gdG8gdXNlIGhpZ2ggcmVzb2x1dGlvbiBkdXJpbmcgdGhlIHJlYWQgcHJvY2Vzcy4NCisgICAgSU1BUV9SRUFEX1JFU09MVVRJT05fU0laRV9HVUFSRCA9IDB4RkZGRkZGRkYgICANCit9IFJlYWRSZXNvbHV0aW9uOw0KKw0KK3R5cGVkZWYgZW51bSBUaHJlc2hvbGRNb2RlX2VudW0gew0KKyAgICBJTUFRX0ZJWEVEX1JBTkdFICAgICAgICAgICAgICAgPSAwLCAgICAgICAgICAgLy9QZXJmb3JtcyB0aHJlc2hvbGRpbmcgdXNpbmcgdGhlIHZhbHVlcyB5b3UgcHJvdmlkZSBpbiB0aGUgbG93VGhyZXNob2xkIGFuZCBoaWdoVGhyZXNob2xkIGVsZW1lbnRzIG9mIE9DUlByb2Nlc3NpbmdPcHRpb25zLg0KKyAgICBJTUFRX0NPTVBVVEVEX1VOSUZPUk0gICAgICAgICAgPSAxLCAgICAgICAgICAgLy9DYWxjdWxhdGVzIGEgc2luZ2xlIHRocmVzaG9sZCB2YWx1ZSBmb3IgdGhlIGVudGlyZSBST0kuDQorICAgIElNQVFfQ09NUFVURURfTElORUFSICAgICAgICAgICA9IDIsICAgICAgICAgICAvL0NhbGN1bGF0ZXMgYSB2YWx1ZSBvbiB0aGUgbGVmdCBzaWRlIG9mIHRoZSBST0ksIGNhbGN1bGF0ZXMgYSB2YWx1ZSBvbiB0aGUgcmlnaHQgc2lkZSBvZiB0aGUgUk9JLCBhbmQgbGluZWFybHkgZmlsbHMgdGhlIG1pZGRsZSB2YWx1ZXMgZnJvbSBsZWZ0IHRvIHJpZ2h0Lg0KKyAgICBJTUFRX0NPTVBVVEVEX05PTkxJTkVBUiAgICAgICAgPSAzLCAgICAgICAgICAgLy9EaXZpZGVzIHRoZSBST0kgaW50byB0aGUgbnVtYmVyIG9mIGJsb2NrcyBzcGVjaWZpZWQgYnkgdGhlIGJsb2NrQ291bnQgZWxlbWVudCBvZiBPQ1JQcm9jZXNzaW5nT3B0aW9ucyBhbmQgY2FsY3VsYXRlcyBhIHRocmVzaG9sZCB2YWx1ZSBmb3IgZWFjaCBibG9jay4NCisgICAgSU1BUV9USFJFU0hPTERfTU9ERV9TSVpFX0dVQVJEID0gMHhGRkZGRkZGRiAgIA0KK30gVGhyZXNob2xkTW9kZTsNCisNCit0eXBlZGVmIGVudW0gUmVhZFN0cmF0ZWd5X2VudW0gew0KKyAgICBJTUFRX1JFQURfQUdHUkVTU0lWRSAgICAgICAgICA9IDAsICAgICAgICAgICAvL0NvbmZpZ3VyZXMgTkkgVmlzaW9uIHRvIHBlcmZvcm0gZmV3ZXIgY2hlY2tzIHdoZW4gYW5hbHl6aW5nIG9iamVjdHMgdG8gZGV0ZXJtaW5lIGlmIHRoZXkgbWF0Y2ggdHJhaW5lZCBjaGFyYWN0ZXJzLg0KKyAgICBJTUFRX1JFQURfQ09OU0VSVkFUSVZFICAgICAgICA9IDEsICAgICAgICAgICAvL0NvbmZpZ3VyZXMgTkkgVmlzaW9uIHRvIHBlcmZvcm0gbW9yZSBjaGVja3MgdG8gZGV0ZXJtaW5lIGlmIGFuIG9iamVjdCBtYXRjaGVzIGEgdHJhaW5lZCBjaGFyYWN0ZXIuDQorICAgIElNQVFfUkVBRF9TVFJBVEVHWV9TSVpFX0dVQVJEID0gMHhGRkZGRkZGRiAgIA0KK30gUmVhZFN0cmF0ZWd5Ow0KKw0KK3R5cGVkZWYgZW51bSBNZWFzdXJlbWVudFR5cGVfZW51bSB7DQorICAgIElNQVFfTVRfQ0VOVEVSX09GX01BU1NfWCAgICAgICAgICAgICAgICAgICAgPSAwLCAgICAgICAgICAgLy9YLWNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHJlcHJlc2VudGluZyB0aGUgYXZlcmFnZSBwb3NpdGlvbiBvZiB0aGUgdG90YWwgcGFydGljbGUgbWFzcywgYXNzdW1pbmcgZXZlcnkgcG9pbnQgaW4gdGhlIHBhcnRpY2xlIGhhcyBhIGNvbnN0YW50IGRlbnNpdHkuDQorICAgIElNQVFfTVRfQ0VOVEVSX09GX01BU1NfWSAgICAgICAgICAgICAgICAgICAgPSAxLCAgICAgICAgICAgLy9ZLWNvb3JkaW5hdGUgb2YgdGhlIHBvaW50IHJlcHJlc2VudGluZyB0aGUgYXZlcmFnZSBwb3NpdGlvbiBvZiB0aGUgdG90YWwgcGFydGljbGUgbWFzcywgYXNzdW1pbmcgZXZlcnkgcG9pbnQgaW4gdGhlIHBhcnRpY2xlIGhhcyBhIGNvbnN0YW50IGRlbnNpdHkuDQorICAgIElNQVFfTVRfRklSU1RfUElYRUxfWCAgICAgICAgICAgICAgICAgICAgICAgPSAyLCAgICAgICAgICAgLy9YLWNvb3JkaW5hdGUgb2YgdGhlIGhpZ2hlc3QsIGxlZnRtb3N0IHBhcnRpY2xlIHBpeGVsLg0KKyAgICBJTUFRX01UX0ZJUlNUX1BJWEVMX1kgICAgICAgICAgICAgICAgICAgICAgID0gMywgICAgICAgICAgIC8vWS1jb29yZGluYXRlIG9mIHRoZSBoaWdoZXN0LCBsZWZ0bW9zdCBwYXJ0aWNsZSBwaXhlbC4NCisgICAgSU1BUV9NVF9CT1VORElOR19SRUNUX0xFRlQgICAgICAgICAgICAgICAgICA9IDQsICAgICAgICAgICAvL1gtY29vcmRpbmF0ZSBvZiB0aGUgbGVmdG1vc3QgcGFydGljbGUgcG9pbnQuDQorICAgIElNQVFfTVRfQk9VTkRJTkdfUkVDVF9UT1AgICAgICAgICAgICAgICAgICAgPSA1LCAgICAgICAgICAgLy9ZLWNvb3JkaW5hdGUgb2YgaGlnaGVzdCBwYXJ0aWNsZSBwb2ludC4NCisgICAgSU1BUV9NVF9CT1VORElOR19SRUNUX1JJR0hUICAgICAgICAgICAgICAgICA9IDYsICAgICAgICAgICAvL1gtY29vcmRpbmF0ZSBvZiB0aGUgcmlnaHRtb3N0IHBhcnRpY2xlIHBvaW50Lg0KKyAgICBJTUFRX01UX0JPVU5ESU5HX1JFQ1RfQk9UVE9NICAgICAgICAgICAgICAgID0gNywgICAgICAgICAgIC8vWS1jb29yZGluYXRlIG9mIHRoZSBsb3dlc3QgcGFydGljbGUgcG9pbnQuDQorICAgIElNQVFfTVRfTUFYX0ZFUkVUX0RJQU1FVEVSX1NUQVJUX1ggICAgICAgICAgPSA4LCAgICAgICAgICAgLy9YLWNvb3JkaW5hdGUgb2YgdGhlIHN0YXJ0IG9mIHRoZSBsaW5lIHNlZ21lbnQgY29ubmVjdGluZyB0aGUgdHdvIHBlcmltZXRlciBwb2ludHMgdGhhdCBhcmUgdGhlIGZ1cnRoZXN0IGFwYXJ0Lg0KKyAgICBJTUFRX01UX01BWF9GRVJFVF9ESUFNRVRFUl9TVEFSVF9ZICAgICAgICAgID0gOSwgICAgICAgICAgIC8vWS1jb29yZGluYXRlIG9mIHRoZSBzdGFydCBvZiB0aGUgbGluZSBzZWdtZW50IGNvbm5lY3RpbmcgdGhlIHR3byBwZXJpbWV0ZXIgcG9pbnRzIHRoYXQgYXJlIHRoZSBmdXJ0aGVzdCBhcGFydC4NCisgICAgSU1BUV9NVF9NQVhfRkVSRVRfRElBTUVURVJfRU5EX1ggICAgICAgICAgICA9IDEwLCAgICAgICAgICAvL1gtY29vcmRpbmF0ZSBvZiB0aGUgZW5kIG9mIHRoZSBsaW5lIHNlZ21lbnQgY29ubmVjdGluZyB0aGUgdHdvIHBlcmltZXRlciBwb2ludHMgdGhhdCBhcmUgdGhlIGZ1cnRoZXN0IGFwYXJ0Lg0KKyAgICBJTUFRX01UX01BWF9GRVJFVF9ESUFNRVRFUl9FTkRfWSAgICAgICAgICAgID0gMTEsICAgICAgICAgIC8vWS1jb29yZGluYXRlIG9mIHRoZSBlbmQgb2YgdGhlIGxpbmUgc2VnbWVudCBjb25uZWN0aW5nIHRoZSB0d28gcGVyaW1ldGVyIHBvaW50cyB0aGF0IGFyZSB0aGUgZnVydGhlc3QgYXBhcnQuDQorICAgIElNQVFfTVRfTUFYX0hPUklaX1NFR01FTlRfTEVOR1RIX0xFRlQgICAgICAgPSAxMiwgICAgICAgICAgLy9YLWNvb3JkaW5hdGUgb2YgdGhlIGxlZnRtb3N0IHBpeGVsIGluIHRoZSBsb25nZXN0IHJvdyBvZiBjb250aWd1b3VzIHBpeGVscyBpbiB0aGUgcGFydGljbGUuDQorICAgIElNQVFfTVRfTUFYX0hPUklaX1NFR01FTlRfTEVOR1RIX1JJR0hUICAgICAgPSAxMywgICAgICAgICAgLy9YLWNvb3JkaW5hdGUgb2YgdGhlIHJpZ2h0bW9zdCBwaXhlbCBpbiB0aGUgbG9uZ2VzdCByb3cgb2YgY29udGlndW91cyBwaXhlbHMgaW4gdGhlIHBhcnRpY2xlLg0KKyAgICBJTUFRX01UX01BWF9IT1JJWl9TRUdNRU5UX0xFTkdUSF9ST1cgICAgICAgID0gMTQsICAgICAgICAgIC8vWS1jb29yZGluYXRlIG9mIGFsbCBvZiB0aGUgcGl4ZWxzIGluIHRoZSBsb25nZXN0IHJvdyBvZiBjb250aWd1b3VzIHBpeGVscyBpbiB0aGUgcGFydGljbGUuDQorICAgIElNQVFfTVRfQk9VTkRJTkdfUkVDVF9XSURUSCAgICAgICAgICAgICAgICAgPSAxNiwgICAgICAgICAgLy9EaXN0YW5jZSBiZXR3ZWVuIHRoZSB4LWNvb3JkaW5hdGUgb2YgdGhlIGxlZnRtb3N0IHBhcnRpY2xlIHBvaW50IGFuZCB0aGUgeC1jb29yZGluYXRlIG9mIHRoZSByaWdodG1vc3QgcGFydGljbGUgcG9pbnQuDQorICAgIElNQVFfTVRfQk9VTkRJTkdfUkVDVF9IRUlHSFQgICAgICAgICAgICAgICAgPSAxNywgICAgICAgICAgLy9EaXN0YW5jZSBiZXR3ZWVuIHRoZSB5LWNvb3JkaW5hdGUgb2YgaGlnaGVzdCBwYXJ0aWNsZSBwb2ludCBhbmQgdGhlIHktY29vcmRpbmF0ZSBvZiB0aGUgbG93ZXN0IHBhcnRpY2xlIHBvaW50Lg0KKyAgICBJTUFRX01UX0JPVU5ESU5HX1JFQ1RfRElBR09OQUwgICAgICAgICAgICAgID0gMTgsICAgICAgICAgIC8vRGlzdGFuY2UgYmV0d2VlbiBvcHBvc2l0ZSBjb3JuZXJzIG9mIHRoZSBib3VuZGluZyByZWN0YW5nbGUuDQorICAgIElNQVFfTVRfUEVSSU1FVEVSICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAxOSwgICAgICAgICAgLy9MZW5ndGggb2YgdGhlIG91dGVyIGJvdW5kYXJ5IG9mIHRoZSBwYXJ0aWNsZS4NCisgICAgSU1BUV9NVF9DT05WRVhfSFVMTF9QRVJJTUVURVIgICAgICAgICAgICAgICA9IDIwLCAgICAgICAgICAvL1BlcmltZXRlciBvZiB0aGUgc21hbGxlc3QgY29udmV4IHBvbHlnb24gY29udGFpbmluZyBhbGwgcG9pbnRzIGluIHRoZSBwYXJ0aWNsZS4NCisgICAgSU1BUV9NVF9IT0xFU19QRVJJTUVURVIgICAgICAgICAgICAgICAgICAgICA9IDIxLCAgICAgICAgICAvL1N1bSBvZiB0aGUgcGVyaW1ldGVycyBvZiBlYWNoIGhvbGUgaW4gdGhlIHBhcnRpY2xlLg0KKyAgICBJTUFRX01UX01BWF9GRVJFVF9ESUFNRVRFUiAgICAgICAgICAgICAgICAgID0gMjIsICAgICAgICAgIC8vRGlzdGFuY2UgYmV0d2VlbiB0aGUgc3RhcnQgYW5kIGVuZCBvZiB0aGUgbGluZSBzZWdtZW50IGNvbm5lY3RpbmcgdGhlIHR3byBwZXJpbWV0ZXIgcG9pbnRzIHRoYXQgYXJlIHRoZSBmdXJ0aGVzdCBhcGFydC4NCisgICAgSU1BUV9NVF9FUVVJVkFMRU5UX0VMTElQU0VfTUFKT1JfQVhJUyAgICAgICA9IDIzLCAgICAgICAgICAvL0xlbmd0aCBvZiB0aGUgbWFqb3IgYXhpcyBvZiB0aGUgZWxsaXBzZSB3aXRoIHRoZSBzYW1lIHBlcmltZXRlciBhbmQgYXJlYSBhcyB0aGUgcGFydGljbGUuDQorICAgIElNQVFfTVRfRVFVSVZBTEVOVF9FTExJUFNFX01JTk9SX0FYSVMgICAgICAgPSAyNCwgICAgICAgICAgLy9MZW5ndGggb2YgdGhlIG1pbm9yIGF4aXMgb2YgdGhlIGVsbGlwc2Ugd2l0aCB0aGUgc2FtZSBwZXJpbWV0ZXIgYW5kIGFyZWEgYXMgdGhlIHBhcnRpY2xlLg0KKyAgICBJTUFRX01UX0VRVUlWQUxFTlRfRUxMSVBTRV9NSU5PUl9BWElTX0ZFUkVUID0gMjUsICAgICAgICAgIC8vTGVuZ3RoIG9mIHRoZSBtaW5vciBheGlzIG9mIHRoZSBlbGxpcHNlIHdpdGggdGhlIHNhbWUgYXJlYSBhcyB0aGUgcGFydGljbGUsIGFuZCBNYWpvciBBeGlzIGVxdWFsIGluIGxlbmd0aCB0byB0aGUgTWF4IEZlcmV0IERpYW1ldGVyLg0KKyAgICBJTUFRX01UX0VRVUlWQUxFTlRfUkVDVF9MT05HX1NJREUgICAgICAgICAgID0gMjYsICAgICAgICAgIC8vTG9uZ2VzdCBzaWRlIG9mIHRoZSByZWN0YW5nbGUgd2l0aCB0aGUgc2FtZSBwZXJpbWV0ZXIgYW5kIGFyZWEgYXMgdGhlIHBhcnRpY2xlLg0KKyAgICBJTUFRX01UX0VRVUlWQUxFTlRfUkVDVF9TSE9SVF9TSURFICAgICAgICAgID0gMjcsICAgICAgICAgIC8vU2hvcnRlc3Qgc2lkZSBvZiB0aGUgcmVjdGFuZ2xlIHdpdGggdGhlIHNhbWUgcGVyaW1ldGVyIGFuZCBhcmVhIGFzIHRoZSBwYXJ0aWNsZS4NCisgICAgSU1BUV9NVF9FUVVJVkFMRU5UX1JFQ1RfRElBR09OQUwgICAgICAgICAgICA9IDI4LCAgICAgICAgICAvL0Rpc3RhbmNlIGJldHdlZW4gb3Bwb3NpdGUgY29ybmVycyBvZiB0aGUgcmVjdGFuZ2xlIHdpdGggdGhlIHNhbWUgcGVyaW1ldGVyIGFuZCBhcmVhIGFzIHRoZSBwYXJ0aWNsZS4NCisgICAgSU1BUV9NVF9FUVVJVkFMRU5UX1JFQ1RfU0hPUlRfU0lERV9GRVJFVCAgICA9IDI5LCAgICAgICAgICAvL1Nob3J0ZXN0IHNpZGUgb2YgdGhlIHJlY3RhbmdsZSB3aXRoIHRoZSBzYW1lIGFyZWEgYXMgdGhlIHBhcnRpY2xlLCBhbmQgbG9uZ2VzdCBzaWRlIGVxdWFsIGluIGxlbmd0aCB0byB0aGUgTWF4IEZlcmV0IERpYW1ldGVyLg0KKyAgICBJTUFRX01UX0FWRVJBR0VfSE9SSVpfU0VHTUVOVF9MRU5HVEggICAgICAgID0gMzAsICAgICAgICAgIC8vQXZlcmFnZSBsZW5ndGggb2YgYSBob3Jpem9udGFsIHNlZ21lbnQgaW4gdGhlIHBhcnRpY2xlLg0KKyAgICBJTUFRX01UX0FWRVJBR0VfVkVSVF9TRUdNRU5UX0xFTkdUSCAgICAgICAgID0gMzEsICAgICAgICAgIC8vQXZlcmFnZSBsZW5ndGggb2YgYSB2ZXJ0aWNhbCBzZWdtZW50IGluIHRoZSBwYXJ0aWNsZS4NCisgICAgSU1BUV9NVF9IWURSQVVMSUNfUkFESVVTICAgICAgICAgICAgICAgICAgICA9IDMyLCAgICAgICAgICAvL1RoZSBwYXJ0aWNsZSBhcmVhIGRpdmlkZWQgYnkgdGhlIHBhcnRpY2xlIHBlcmltZXRlci4NCisgICAgSU1BUV9NVF9XQURERUxfRElTS19ESUFNRVRFUiAgICAgICAgICAgICAgICA9IDMzLCAgICAgICAgICAvL0RpYW1ldGVyIG9mIGEgZGlzayB3aXRoIHRoZSBzYW1lIGFyZWEgYXMgdGhlIHBhcnRpY2xlLg0KKyAgICBJTUFRX01UX0FSRUEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMzUsICAgICAgICAgIC8vQXJlYSBvZiB0aGUgcGFydGljbGUuDQorICAgIElNQVFfTVRfSE9MRVNfQVJFQSAgICAgICAgICAgICAgICAgICAgICAgICAgPSAzNiwgICAgICAgICAgLy9TdW0gb2YgdGhlIGFyZWFzIG9mIGVhY2ggaG9sZSBpbiB0aGUgcGFydGljbGUuDQorICAgIElNQVFfTVRfUEFSVElDTEVfQU5EX0hPTEVTX0FSRUEgICAgICAgICAgICAgPSAzNywgICAgICAgICAgLy9BcmVhIG9mIGEgcGFydGljbGUgdGhhdCBjb21wbGV0ZWx5IGNvdmVycyB0aGUgaW1hZ2UuDQorICAgIElNQVFfTVRfQ09OVkVYX0hVTExfQVJFQSAgICAgICAgICAgICAgICAgICAgPSAzOCwgICAgICAgICAgLy9BcmVhIG9mIHRoZSBzbWFsbGVzdCBjb252ZXggcG9seWdvbiBjb250YWluaW5nIGFsbCBwb2ludHMgaW4gdGhlIHBhcnRpY2xlLg0KKyAgICBJTUFRX01UX0lNQUdFX0FSRUEgICAgICAgICAgICAgICAgICAgICAgICAgID0gMzksICAgICAgICAgIC8vQXJlYSBvZiB0aGUgaW1hZ2UuDQorICAgIElNQVFfTVRfTlVNQkVSX09GX0hPTEVTICAgICAgICAgICAgICAgICAgICAgPSA0MSwgICAgICAgICAgLy9OdW1iZXIgb2YgaG9sZXMgaW4gdGhlIHBhcnRpY2xlLg0KKyAgICBJTUFRX01UX05VTUJFUl9PRl9IT1JJWl9TRUdNRU5UUyAgICAgICAgICAgID0gNDIsICAgICAgICAgIC8vTnVtYmVyIG9mIGhvcml6b250YWwgc2VnbWVudHMgaW4gdGhlIHBhcnRpY2xlLg0KKyAgICBJTUFRX01UX05VTUJFUl9PRl9WRVJUX1NFR01FTlRTICAgICAgICAgICAgID0gNDMsICAgICAgICAgIC8vTnVtYmVyIG9mIHZlcnRpY2FsIHNlZ21lbnRzIGluIHRoZSBwYXJ0aWNsZS4NCisgICAgSU1BUV9NVF9PUklFTlRBVElPTiAgICAgICAgICAgICAgICAgICAgICAgICA9IDQ1LCAgICAgICAgICAvL1RoZSBhbmdsZSBvZiB0aGUgbGluZSB0aGF0IHBhc3NlcyB0aHJvdWdoIHRoZSBwYXJ0aWNsZSBDZW50ZXIgb2YgTWFzcyBhYm91dCB3aGljaCB0aGUgcGFydGljbGUgaGFzIHRoZSBsb3dlc3QgbW9tZW50IG9mIGluZXJ0aWEuDQorICAgIElNQVFfTVRfTUFYX0ZFUkVUX0RJQU1FVEVSX09SSUVOVEFUSU9OICAgICAgPSA0NiwgICAgICAgICAgLy9UaGUgYW5nbGUgb2YgdGhlIGxpbmUgc2VnbWVudCBjb25uZWN0aW5nIHRoZSB0d28gcGVyaW1ldGVyIHBvaW50cyB0aGF0IGFyZSB0aGUgZnVydGhlc3QgYXBhcnQuDQorICAgIElNQVFfTVRfQVJFQV9CWV9JTUFHRV9BUkVBICAgICAgICAgICAgICAgICAgPSA0OCwgICAgICAgICAgLy9QZXJjZW50YWdlIG9mIHRoZSBwYXJ0aWNsZSBBcmVhIGNvdmVyaW5nIHRoZSBJbWFnZSBBcmVhLg0KKyAgICBJTUFRX01UX0FSRUFfQllfUEFSVElDTEVfQU5EX0hPTEVTX0FSRUEgICAgID0gNDksICAgICAgICAgIC8vUGVyY2VudGFnZSBvZiB0aGUgcGFydGljbGUgQXJlYSBpbiByZWxhdGlvbiB0byBpdHMgUGFydGljbGUgYW5kIEhvbGVzIEFyZWEuDQorICAgIElNQVFfTVRfUkFUSU9fT0ZfRVFVSVZBTEVOVF9FTExJUFNFX0FYRVMgICAgPSA1MCwgICAgICAgICAgLy9FcXVpdmFsZW50IEVsbGlwc2UgTWFqb3IgQXhpcyBkaXZpZGVkIGJ5IEVxdWl2YWxlbnQgRWxsaXBzZSBNaW5vciBBeGlzLg0KKyAgICBJTUFRX01UX1JBVElPX09GX0VRVUlWQUxFTlRfUkVDVF9TSURFUyAgICAgID0gNTEsICAgICAgICAgIC8vRXF1aXZhbGVudCBSZWN0IExvbmcgU2lkZSBkaXZpZGVkIGJ5IEVxdWl2YWxlbnQgUmVjdCBTaG9ydCBTaWRlLg0KKyAgICBJTUFRX01UX0VMT05HQVRJT05fRkFDVE9SICAgICAgICAgICAgICAgICAgID0gNTMsICAgICAgICAgIC8vTWF4IEZlcmV0IERpYW1ldGVyIGRpdmlkZWQgYnkgRXF1aXZhbGVudCBSZWN0IFNob3J0IFNpZGUgKEZlcmV0KS4NCisgICAgSU1BUV9NVF9DT01QQUNUTkVTU19GQUNUT1IgICAgICAgICAgICAgICAgICA9IDU0LCAgICAgICAgICAvL0FyZWEgZGl2aWRlZCBieSB0aGUgcHJvZHVjdCBvZiBCb3VuZGluZyBSZWN0IFdpZHRoIGFuZCBCb3VuZGluZyBSZWN0IEhlaWdodC4NCisgICAgSU1BUV9NVF9IRVlXT09EX0NJUkNVTEFSSVRZX0ZBQ1RPUiAgICAgICAgICA9IDU1LCAgICAgICAgICAvL1BlcmltZXRlciBkaXZpZGVkIGJ5IHRoZSBjaXJjdW1mZXJlbmNlIG9mIGEgY2lyY2xlIHdpdGggdGhlIHNhbWUgYXJlYS4NCisgICAgSU1BUV9NVF9UWVBFX0ZBQ1RPUiAgICAgICAgICAgICAgICAgICAgICAgICA9IDU2LCAgICAgICAgICAvL0ZhY3RvciByZWxhdGluZyBhcmVhIHRvIG1vbWVudCBvZiBpbmVydGlhLg0KKyAgICBJTUFRX01UX1NVTV9YICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gNTgsICAgICAgICAgIC8vVGhlIHN1bSBvZiBhbGwgeC1jb29yZGluYXRlcyBpbiB0aGUgcGFydGljbGUuDQorICAgIElNQVFfTVRfU1VNX1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSA1OSwgICAgICAgICAgLy9UaGUgc3VtIG9mIGFsbCB5LWNvb3JkaW5hdGVzIGluIHRoZSBwYXJ0aWNsZS4NCisgICAgSU1BUV9NVF9TVU1fWFggICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDYwLCAgICAgICAgICAvL1RoZSBzdW0gb2YgYWxsIHgtY29vcmRpbmF0ZXMgc3F1YXJlZCBpbiB0aGUgcGFydGljbGUuDQorICAgIElNQVFfTVRfU1VNX1hZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSA2MSwgICAgICAgICAgLy9UaGUgc3VtIG9mIGFsbCB4LWNvb3JkaW5hdGVzIHRpbWVzIHktY29vcmRpbmF0ZXMgaW4gdGhlIHBhcnRpY2xlLg0KKyAgICBJTUFRX01UX1NVTV9ZWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gNjIsICAgICAgICAgIC8vVGhlIHN1bSBvZiBhbGwgeS1jb29yZGluYXRlcyBzcXVhcmVkIGluIHRoZSBwYXJ0aWNsZS4NCisgICAgSU1BUV9NVF9TVU1fWFhYICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDYzLCAgICAgICAgICAvL1RoZSBzdW0gb2YgYWxsIHgtY29vcmRpbmF0ZXMgY3ViZWQgaW4gdGhlIHBhcnRpY2xlLg0KKyAgICBJTUFRX01UX1NVTV9YWFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gNjQsICAgICAgICAgIC8vVGhlIHN1bSBvZiBhbGwgeC1jb29yZGluYXRlcyBzcXVhcmVkIHRpbWVzIHktY29vcmRpbmF0ZXMgaW4gdGhlIHBhcnRpY2xlLg0KKyAgICBJTUFRX01UX1NVTV9YWVkgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gNjUsICAgICAgICAgIC8vVGhlIHN1bSBvZiBhbGwgeC1jb29yZGluYXRlcyB0aW1lcyB5LWNvb3JkaW5hdGVzIHNxdWFyZWQgaW4gdGhlIHBhcnRpY2xlLg0KKyAgICBJTUFRX01UX1NVTV9ZWVkgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gNjYsICAgICAgICAgIC8vVGhlIHN1bSBvZiBhbGwgeS1jb29yZGluYXRlcyBjdWJlZCBpbiB0aGUgcGFydGljbGUuDQorICAgIElNQVFfTVRfTU9NRU5UX09GX0lORVJUSUFfWFggICAgICAgICAgICAgICAgPSA2OCwgICAgICAgICAgLy9UaGUgbW9tZW50IG9mIGluZXJ0aWEgaW4gdGhlIHgtZGlyZWN0aW9uIHR3aWNlLg0KKyAgICBJTUFRX01UX01PTUVOVF9PRl9JTkVSVElBX1hZICAgICAgICAgICAgICAgID0gNjksICAgICAgICAgIC8vVGhlIG1vbWVudCBvZiBpbmVydGlhIGluIHRoZSB4IGFuZCB5IGRpcmVjdGlvbnMuDQorICAgIElNQVFfTVRfTU9NRU5UX09GX0lORVJUSUFfWVkgICAgICAgICAgICAgICAgPSA3MCwgICAgICAgICAgLy9UaGUgbW9tZW50IG9mIGluZXJ0aWEgaW4gdGhlIHktZGlyZWN0aW9uIHR3aWNlLg0KKyAgICBJTUFRX01UX01PTUVOVF9PRl9JTkVSVElBX1hYWCAgICAgICAgICAgICAgID0gNzEsICAgICAgICAgIC8vVGhlIG1vbWVudCBvZiBpbmVydGlhIGluIHRoZSB4LWRpcmVjdGlvbiB0aHJlZSB0aW1lcy4NCisgICAgSU1BUV9NVF9NT01FTlRfT0ZfSU5FUlRJQV9YWFkgICAgICAgICAgICAgICA9IDcyLCAgICAgICAgICAvL1RoZSBtb21lbnQgb2YgaW5lcnRpYSBpbiB0aGUgeC1kaXJlY3Rpb24gdHdpY2UgYW5kIHRoZSB5LWRpcmVjdGlvbiBvbmNlLg0KKyAgICBJTUFRX01UX01PTUVOVF9PRl9JTkVSVElBX1hZWSAgICAgICAgICAgICAgID0gNzMsICAgICAgICAgIC8vVGhlIG1vbWVudCBvZiBpbmVydGlhIGluIHRoZSB4LWRpcmVjdGlvbiBvbmNlIGFuZCB0aGUgeS1kaXJlY3Rpb24gdHdpY2UuDQorICAgIElNQVFfTVRfTU9NRU5UX09GX0lORVJUSUFfWVlZICAgICAgICAgICAgICAgPSA3NCwgICAgICAgICAgLy9UaGUgbW9tZW50IG9mIGluZXJ0aWEgaW4gdGhlIHktZGlyZWN0aW9uIHRocmVlIHRpbWVzLg0KKyAgICBJTUFRX01UX05PUk1fTU9NRU5UX09GX0lORVJUSUFfWFggICAgICAgICAgID0gNzUsICAgICAgICAgIC8vVGhlIG5vcm1hbGl6ZWQgbW9tZW50IG9mIGluZXJ0aWEgaW4gdGhlIHgtZGlyZWN0aW9uIHR3aWNlLg0KKyAgICBJTUFRX01UX05PUk1fTU9NRU5UX09GX0lORVJUSUFfWFkgICAgICAgICAgID0gNzYsICAgICAgICAgIC8vVGhlIG5vcm1hbGl6ZWQgbW9tZW50IG9mIGluZXJ0aWEgaW4gdGhlIHgtIGFuZCB5LWRpcmVjdGlvbnMuDQorICAgIElNQVFfTVRfTk9STV9NT01FTlRfT0ZfSU5FUlRJQV9ZWSAgICAgICAgICAgPSA3NywgICAgICAgICAgLy9UaGUgbm9ybWFsaXplZCBtb21lbnQgb2YgaW5lcnRpYSBpbiB0aGUgeS1kaXJlY3Rpb24gdHdpY2UuDQorICAgIElNQVFfTVRfTk9STV9NT01FTlRfT0ZfSU5FUlRJQV9YWFggICAgICAgICAgPSA3OCwgICAgICAgICAgLy9UaGUgbm9ybWFsaXplZCBtb21lbnQgb2YgaW5lcnRpYSBpbiB0aGUgeC1kaXJlY3Rpb24gdGhyZWUgdGltZXMuDQorICAgIElNQVFfTVRfTk9STV9NT01FTlRfT0ZfSU5FUlRJQV9YWFkgICAgICAgICAgPSA3OSwgICAgICAgICAgLy9UaGUgbm9ybWFsaXplZCBtb21lbnQgb2YgaW5lcnRpYSBpbiB0aGUgeC1kaXJlY3Rpb24gdHdpY2UgYW5kIHRoZSB5LWRpcmVjdGlvbiBvbmNlLg0KKyAgICBJTUFRX01UX05PUk1fTU9NRU5UX09GX0lORVJUSUFfWFlZICAgICAgICAgID0gODAsICAgICAgICAgIC8vVGhlIG5vcm1hbGl6ZWQgbW9tZW50IG9mIGluZXJ0aWEgaW4gdGhlIHgtZGlyZWN0aW9uIG9uY2UgYW5kIHRoZSB5LWRpcmVjdGlvbiB0d2ljZS4NCisgICAgSU1BUV9NVF9OT1JNX01PTUVOVF9PRl9JTkVSVElBX1lZWSAgICAgICAgICA9IDgxLCAgICAgICAgICAvL1RoZSBub3JtYWxpemVkIG1vbWVudCBvZiBpbmVydGlhIGluIHRoZSB5LWRpcmVjdGlvbiB0aHJlZSB0aW1lcy4NCisgICAgSU1BUV9NVF9IVV9NT01FTlRfMSAgICAgICAgICAgICAgICAgICAgICAgICA9IDgyLCAgICAgICAgICAvL1RoZSBmaXJzdCBIdSBtb21lbnQuDQorICAgIElNQVFfTVRfSFVfTU9NRU5UXzIgICAgICAgICAgICAgICAgICAgICAgICAgPSA4MywgICAgICAgICAgLy9UaGUgc2Vjb25kIEh1IG1vbWVudC4NCisgICAgSU1BUV9NVF9IVV9NT01FTlRfMyAgICAgICAgICAgICAgICAgICAgICAgICA9IDg0LCAgICAgICAgICAvL1RoZSB0aGlyZCBIdSBtb21lbnQuDQorICAgIElNQVFfTVRfSFVfTU9NRU5UXzQgICAgICAgICAgICAgICAgICAgICAgICAgPSA4NSwgICAgICAgICAgLy9UaGUgZm91cnRoIEh1IG1vbWVudC4NCisgICAgSU1BUV9NVF9IVV9NT01FTlRfNSAgICAgICAgICAgICAgICAgICAgICAgICA9IDg2LCAgICAgICAgICAvL1RoZSBmaWZ0aCBIdSBtb21lbnQuDQorICAgIElNQVFfTVRfSFVfTU9NRU5UXzYgICAgICAgICAgICAgICAgICAgICAgICAgPSA4NywgICAgICAgICAgLy9UaGUgc2l4dGggSHUgbW9tZW50Lg0KKyAgICBJTUFRX01UX0hVX01PTUVOVF83ICAgICAgICAgICAgICAgICAgICAgICAgID0gODgsICAgICAgICAgIC8vVGhlIHNldmVudGggSHUgbW9tZW50Lg0KKyAgICBJTUFRX01FQVNVUkVNRU5UX1RZUEVfU0laRV9HVUFSRCAgICAgICAgICAgID0gMHhGRkZGRkZGRiAgIA0KK30gTWVhc3VyZW1lbnRUeXBlOw0KKw0KK3R5cGVkZWYgZW51bSBHZW9tZXRyaWNNYXRjaGluZ01vZGVfZW51bSB7DQorICAgIElNQVFfR0VPTUVUUklDX01BVENIX1NISUZUX0lOVkFSSUFOVCAgICAgPSAwLCAgICAgICAgICAgLy9TZWFyY2hlcyBmb3Igb2NjdXJyZW5jZXMgb2YgdGhlIHBhdHRlcm4gaW4gdGhlIGltYWdlLCBhc3N1bWluZyB0aGF0IHRoZSBwYXR0ZXJuIGlzIG5vdCByb3RhdGVkIG1vcmUgdGhhbiBwbHVzIG9yIG1pbnVzIDUgZGVncmVlcy4NCisgICAgSU1BUV9HRU9NRVRSSUNfTUFUQ0hfUk9UQVRJT05fSU5WQVJJQU5UICA9IDEsICAgICAgICAgICAvL1NlYXJjaGVzIGZvciBvY2N1cnJlbmNlcyBvZiB0aGUgcGF0dGVybiBpbiB0aGUgaW1hZ2Ugd2l0aCByZWR1Y2VkIHJlc3RyaWN0aW9uIG9uIHRoZSByb3RhdGlvbiBvZiB0aGUgcGF0dGVybi4NCisgICAgSU1BUV9HRU9NRVRSSUNfTUFUQ0hfU0NBTEVfSU5WQVJJQU5UICAgICA9IDIsICAgICAgICAgICAvL1NlYXJjaGVzIGZvciBvY2N1cnJlbmNlcyBvZiB0aGUgcGF0dGVybiBpbiB0aGUgaW1hZ2Ugd2l0aCByZWR1Y2VkIHJlc3RyaWN0aW9uIG9uIHRoZSBzaXplIG9mIHRoZSBwYXR0ZXJuLg0KKyAgICBJTUFRX0dFT01FVFJJQ19NQVRDSF9PQ0NMVVNJT05fSU5WQVJJQU5UID0gNCwgICAgICAgICAgIC8vU2VhcmNoZXMgZm9yIG9jY3VycmVuY2VzIG9mIHRoZSBwYXR0ZXJuIGluIHRoZSBpbWFnZSwgYWxsb3dpbmcgZm9yIGEgc3BlY2lmaWVkIHBlcmNlbnRhZ2Ugb2YgdGhlIHBhdHRlcm4gdG8gYmUgb2NjbHVkZWQuDQorICAgIElNQVFfR0VPTUVUUklDX01BVENISU5HX01PREVfU0laRV9HVUFSRCAgPSAweEZGRkZGRkZGICAgDQorfSBHZW9tZXRyaWNNYXRjaGluZ01vZGU7DQorDQordHlwZWRlZiBlbnVtIEJ1dHRvbkxhYmVsX2VudW0gew0KKyAgICBJTUFRX0JVVFRPTl9PSyAgICAgICAgICAgICAgID0gMCwgICAgICAgICAgIC8vVGhlIGxhYmVsICJPSyIuDQorICAgIElNQVFfQlVUVE9OX1NBVkUgICAgICAgICAgICAgPSAxLCAgICAgICAgICAgLy9UaGUgbGFiZWwgIlNhdmUiLg0KKyAgICBJTUFRX0JVVFRPTl9TRUxFQ1QgICAgICAgICAgID0gMiwgICAgICAgICAgIC8vVGhlIGxhYmVsICJTZWxlY3QiLg0KKyAgICBJTUFRX0JVVFRPTl9MT0FEICAgICAgICAgICAgID0gMywgICAgICAgICAgIC8vVGhlIGxhYmVsICJMb2FkIi4NCisgICAgSU1BUV9CVVRUT05fTEFCRUxfU0laRV9HVUFSRCA9IDB4RkZGRkZGRkYgICANCit9IEJ1dHRvbkxhYmVsOw0KKw0KK3R5cGVkZWYgZW51bSBOZWFyZXN0TmVpZ2hib3JNZXRob2RfZW51bSB7DQorICAgIElNQVFfTUlOSU1VTV9NRUFOX0RJU1RBTkNFICAgICAgICAgICAgICA9IDAsICAgICAgICAgICAvL1RoZSBtaW5pbXVtIG1lYW4gZGlzdGFuY2UgbWV0aG9kLg0KKyAgICBJTUFRX0tfTkVBUkVTVF9ORUlHSEJPUiAgICAgICAgICAgICAgICAgPSAxLCAgICAgICAgICAgLy9UaGUgay1uZWFyZXN0IG5laWdoYm9yIG1ldGhvZC4NCisgICAgSU1BUV9ORUFSRVNUX1BST1RPVFlQRSAgICAgICAgICAgICAgICAgID0gMiwgICAgICAgICAgIC8vVGhlIG5lYXJlc3QgcHJvdG90eXBlIG1ldGhvZC4NCisgICAgSU1BUV9ORUFSRVNUX05FSUdIQk9SX01FVEhPRF9TSVpFX0dVQVJEID0gMHhGRkZGRkZGRiAgIA0KK30gTmVhcmVzdE5laWdoYm9yTWV0aG9kOw0KKw0KK3R5cGVkZWYgZW51bSBRUk1pcnJvck1vZGVfZW51bSB7DQorICAgIElNQVFfUVJfTUlSUk9SX01PREVfQVVUT19ERVRFQ1QgPSAtMiwgICAgICAgICAgLy9UaGUgZnVuY3Rpb24gc2hvdWxkIGRldGVybWluZSBpZiB0aGUgUVIgY29kZSBpcyBtaXJyb3JlZC4NCisgICAgSU1BUV9RUl9NSVJST1JfTU9ERV9NSVJST1JFRCAgICA9IDEsICAgICAgICAgICAvL1RoZSBmdW5jdGlvbiBzaG91bGQgZXhwZWN0IHRoZSBRUiBjb2RlIHRvIGFwcGVhciBtaXJyb3JlZC4NCisgICAgSU1BUV9RUl9NSVJST1JfTU9ERV9OT1JNQUwgICAgICA9IDAsICAgICAgICAgICAvL1RoZSBmdW5jdGlvbiBzaG91bGQgZXhwZWN0IHRoZSBRUiBjb2RlIHRvIGFwcGVhciBub3JtYWwuDQorICAgIElNQVFfUVJfTUlSUk9SX01PREVfU0laRV9HVUFSRCAgPSAweEZGRkZGRkZGICAgDQorfSBRUk1pcnJvck1vZGU7DQorDQordHlwZWRlZiBlbnVtIENvbHVtblByb2Nlc3NpbmdNb2RlX2VudW0gew0KKyAgICBJTUFRX0FWRVJBR0VfQ09MVU1OUyAgICAgICAgICAgICAgICAgICA9IDAsICAgICAgICAgICAvL0F2ZXJhZ2VzIHRoZSBkYXRhIGV4dHJhY3RlZCBmb3IgZWRnZSBkZXRlY3Rpb24uDQorICAgIElNQVFfTUVESUFOX0NPTFVNTlMgICAgICAgICAgICAgICAgICAgID0gMSwgICAgICAgICAgIC8vVGFrZXMgdGhlIG1lZGlhbiBvZiB0aGUgZGF0YSBleHRyYWN0ZWQgZm9yIGVkZ2UgZGV0ZWN0aW9uLg0KKyAgICBJTUFRX0NPTFVNTl9QUk9DRVNTSU5HX01PREVfU0laRV9HVUFSRCA9IDB4RkZGRkZGRkYgICANCit9IENvbHVtblByb2Nlc3NpbmdNb2RlOw0KKw0KK3R5cGVkZWYgZW51bSBGaW5kUmVmZXJlbmNlRGlyZWN0aW9uX2VudW0gew0KKyAgICBJTUFRX0xFRlRfVE9fUklHSFRfRElSRUNUICAgICAgICAgID0gMCwgICAgICAgICAgIC8vU2VhcmNoZXMgZnJvbSB0aGUgbGVmdCBzaWRlIG9mIHRoZSBzZWFyY2ggYXJlYSB0byB0aGUgcmlnaHQgc2lkZSBvZiB0aGUgc2VhcmNoIGFyZWEgZm9yIGEgZGlyZWN0IGF4aXMuDQorICAgIElNQVFfTEVGVF9UT19SSUdIVF9JTkRJUkVDVCAgICAgICAgPSAxLCAgICAgICAgICAgLy9TZWFyY2hlcyBmcm9tIHRoZSBsZWZ0IHNpZGUgb2YgdGhlIHNlYXJjaCBhcmVhIHRvIHRoZSByaWdodCBzaWRlIG9mIHRoZSBzZWFyY2ggYXJlYSBmb3IgYW4gaW5kaXJlY3QgYXhpcy4NCisgICAgSU1BUV9UT1BfVE9fQk9UVE9NX0RJUkVDVCAgICAgICAgICA9IDIsICAgICAgICAgICAvL1NlYXJjaGVzIGZyb20gdGhlIHRvcCBvZiB0aGUgc2VhcmNoIGFyZWEgdG8gdGhlIGJvdHRvbSBvZiB0aGUgc2VhcmNoIGFyZWEgZm9yIGEgZGlyZWN0IGF4aXMuDQorICAgIElNQVFfVE9QX1RPX0JPVFRPTV9JTkRJUkVDVCAgICAgICAgPSAzLCAgICAgICAgICAgLy9TZWFyY2hlcyBmcm9tIHRoZSB0b3Agb2YgdGhlIHNlYXJjaCBhcmVhIHRvIHRoZSBib3R0b20gb2YgdGhlIHNlYXJjaCBhcmVhIGZvciBhbiBpbmRpcmVjdCBheGlzLg0KKyAgICBJTUFRX1JJR0hUX1RPX0xFRlRfRElSRUNUICAgICAgICAgID0gNCwgICAgICAgICAgIC8vU2VhcmNoZXMgZnJvbSB0aGUgcmlnaHQgc2lkZSBvZiB0aGUgc2VhcmNoIGFyZWEgdG8gdGhlIGxlZnQgc2lkZSBvZiB0aGUgc2VhcmNoIGFyZWEgZm9yIGEgZGlyZWN0IGF4aXMuDQorICAgIElNQVFfUklHSFRfVE9fTEVGVF9JTkRJUkVDVCAgICAgICAgPSA1LCAgICAgICAgICAgLy9TZWFyY2hlcyBmcm9tIHRoZSByaWdodCBzaWRlIG9mIHRoZSBzZWFyY2ggYXJlYSB0byB0aGUgbGVmdCBzaWRlIG9mIHRoZSBzZWFyY2ggYXJlYSBmb3IgYW4gaW5kaXJlY3QgYXhpcy4NCisgICAgSU1BUV9CT1RUT01fVE9fVE9QX0RJUkVDVCAgICAgICAgICA9IDYsICAgICAgICAgICAvL1NlYXJjaGVzIGZyb20gdGhlIGJvdHRvbSBvZiB0aGUgc2VhcmNoIGFyZWEgdG8gdGhlIHRvcCBvZiB0aGUgc2VhcmNoIGFyZWEgZm9yIGEgZGlyZWN0IGF4aXMuDQorICAgIElNQVFfQk9UVE9NX1RPX1RPUF9JTkRJUkVDVCAgICAgICAgPSA3LCAgICAgICAgICAgLy9TZWFyY2hlcyBmcm9tIHRoZSBib3R0b20gb2YgdGhlIHNlYXJjaCBhcmVhIHRvIHRoZSB0b3Agb2YgdGhlIHNlYXJjaCBhcmVhIGZvciBhbiBpbmRpcmVjdCBheGlzLg0KKyAgICBJTUFRX0ZJTkRfQ09PUkRfU1lTX0RJUl9TSVpFX0dVQVJEID0gMHhGRkZGRkZGRiAgIA0KK30gRmluZFJlZmVyZW5jZURpcmVjdGlvbjsNCisNCit0eXBlZGVmIGVudW0gTXVsdGljb3JlT3BlcmF0aW9uX2VudW0gew0KKyAgICBJTUFRX0dFVF9DT1JFUyAgICAgICAgICAgICAgICAgICAgICA9IDAsICAgICAgICAgICAvL1RoZSBudW1iZXIgb2YgcHJvY2Vzc29yIGNvcmVzIE5JIFZpc2lvbiBpcyBjdXJyZW50bHkgdXNpbmcuDQorICAgIElNQVFfU0VUX0NPUkVTICAgICAgICAgICAgICAgICAgICAgID0gMSwgICAgICAgICAgIC8vVGhlIG51bWJlciBvZiBwcm9jZXNzb3IgY29yZXMgZm9yIE5JIFZpc2lvbiB0byB1c2UuDQorICAgIElNQVFfVVNFX01BWF9BVkFJTEFCTEUgICAgICAgICAgICAgID0gMiwgICAgICAgICAgIC8vVXNlIHRoZSBtYXhpbXVtIG51bWJlciBvZiBhdmFpbGFibGUgcHJvY2Vzc29yIGNvcmVzLg0KKyAgICBJTUFRX01VTFRJQ09SRV9PUEVSQVRJT05fU0laRV9HVUFSRCA9IDB4RkZGRkZGRkYgICANCit9IE11bHRpY29yZU9wZXJhdGlvbjsNCisNCit0eXBlZGVmIGVudW0gR3JvdXBCZWhhdmlvcl9lbnVtIHsNCisgICAgSU1BUV9HUk9VUF9DTEVBUiAgICAgICAgICAgICAgID0gMCwgICAgICAgICAgIC8vU2V0cyB0aGUgYmVoYXZpb3Igb2YgdGhlIG92ZXJsYXkgZ3JvdXAgdG8gY2xlYXIgdGhlIGN1cnJlbnQgc2V0dGluZ3Mgd2hlbiBhbiBpbWFnZSBpcyB0cmFuc2Zvcm1lZC4NCisgICAgSU1BUV9HUk9VUF9LRUVQICAgICAgICAgICAgICAgID0gMSwgICAgICAgICAgIC8vU2V0cyB0aGUgYmVoYXZpb3Igb2YgdGhlIG92ZXJsYXkgZ3JvdXAgdG8ga2VlcCB0aGUgY3VycmVudCBzZXR0aW5ncyB3aGVuIGFuIGltYWdlIGlzIHRyYW5zZm9ybWVkLg0KKyAgICBJTUFRX0dST1VQX1RSQU5TRk9STSAgICAgICAgICAgPSAyLCAgICAgICAgICAgLy9TZXRzIHRoZSBiZWhhdmlvciBvZiB0aGUgb3ZlcmxheSBncm91cCB0byB0cmFuc2Zvcm0gd2l0aCB0aGUgaW1hZ2UuDQorICAgIElNQVFfR1JPVVBfQkVIQVZJT1JfU0laRV9HVUFSRCA9IDB4RkZGRkZGRkYgICANCit9IEdyb3VwQmVoYXZpb3I7DQorDQordHlwZWRlZiBlbnVtIFFSRGltZW5zaW9uc19lbnVtIHsNCisgICAgSU1BUV9RUl9ESU1FTlNJT05TX0FVVE9fREVURUNUID0gMCwgICAgICAgICAgIC8vVGhlIGZ1bmN0aW9uIHdpbGwgYXV0b21hdGljYWxseSBkZXRlcm1pbmUgdGhlIGRpbWVuc2lvbnMgb2YgdGhlIFFSIGNvZGUuDQorICAgIElNQVFfUVJfRElNRU5TSU9OU18xMXgxMSAgICAgICA9IDExLCAgICAgICAgICAvL1NwZWNpZmllcyB0aGUgZGltZW5zaW9ucyBvZiB0aGUgUVIgY29kZSBhcyAxMSB4IDExLg0KKyAgICBJTUFRX1FSX0RJTUVOU0lPTlNfMTN4MTMgICAgICAgPSAxMywgICAgICAgICAgLy9TcGVjaWZpZXMgdGhlIGRpbWVuc2lvbnMgb2YgdGhlIFFSIGNvZGUgYXMgMTMgeCAxMy4NCisgICAgSU1BUV9RUl9ESU1FTlNJT05TXzE1eDE1ICAgICAgID0gMTUsICAgICAgICAgIC8vU3BlY2lmaWVzIHRoZSBkaW1lbnNpb25zIG9mIHRoZSBRUiBjb2RlIGFzIDE1IHggMTUuDQorICAgIElNQVFfUVJfRElNRU5TSU9OU18xN3gxNyAgICAgICA9IDE3LCAgICAgICAgICAvL1NwZWNpZmllcyB0aGUgZGltZW5zaW9ucyBvZiB0aGUgUVIgY29kZSBhcyAxNyB4IDE3Lg0KKyAgICBJTUFRX1FSX0RJTUVOU0lPTlNfMjF4MjEgICAgICAgPSAyMSwgICAgICAgICAgLy9TcGVjaWZpZXMgdGhlIGRpbWVuc2lvbnMgb2YgdGhlIFFSIGNvZGUgYXMgMjEgeCAyMS4NCisgICAgSU1BUV9RUl9ESU1FTlNJT05TXzI1eDI1ICAgICAgID0gMjUsICAgICAgICAgIC8vU3BlY2lmaWVzIHRoZSBkaW1lbnNpb25zIG9mIHRoZSBRUiBjb2RlIGFzIDI1IHggMjUuDQorICAgIElNQVFfUVJfRElNRU5TSU9OU18yOXgyOSAgICAgICA9IDI5LCAgICAgICAgICAvL1NwZWNpZmllcyB0aGUgZGltZW5zaW9ucyBvZiB0aGUgUVIgY29kZSBhcyAyOSB4IDI5Lg0KKyAgICBJTUFRX1FSX0RJTUVOU0lPTlNfMzN4MzMgICAgICAgPSAzMywgICAgICAgICAgLy9TcGVjaWZpZXMgdGhlIGRpbWVuc2lvbnMgb2YgdGhlIFFSIGNvZGUgYXMgMzMgeCAzMy4NCisgICAgSU1BUV9RUl9ESU1FTlNJT05TXzM3eDM3ICAgICAgID0gMzcsICAgICAgICAgIC8vU3BlY2lmaWVzIHRoZSBkaW1lbnNpb25zIG9mIHRoZSBRUiBjb2RlIGFzIDM3IHggMzcuDQorICAgIElNQVFfUVJfRElNRU5TSU9OU180MXg0MSAgICAgICA9IDQxLCAgICAgICAgICAvL1NwZWNpZmllcyB0aGUgZGltZW5zaW9ucyBvZiB0aGUgUVIgY29kZSBhcyA0MSB4IDQxLg0KKyAgICBJTUFRX1FSX0RJTUVOU0lPTlNfNDV4NDUgICAgICAgPSA0NSwgICAgICAgICAgLy9TcGVjaWZpZXMgdGhlIGRpbWVuc2lvbnMgb2YgdGhlIFFSIGNvZGUgYXMgNDUgeCA0NS4NCisgICAgSU1BUV9RUl9ESU1FTlNJT05TXzQ5eDQ5ICAgICAgID0gNDksICAgICAgICAgIC8vU3BlY2lmaWVzIHRoZSBkaW1lbnNpb25zIG9mIHRoZSBRUiBjb2RlIGFzIDQ5IHggNDkuDQorICAgIElNQVFfUVJfRElNRU5TSU9OU181M3g1MyAgICAgICA9IDUzLCAgICAgICAgICAvL1NwZWNpZmllcyB0aGUgZGltZW5zaW9ucyBvZiB0aGUgUVIgY29kZSBhcyA1MyB4IDUzLg0KKyAgICBJTUFRX1FSX0RJTUVOU0lPTlNfNTd4NTcgICAgICAgPSA1NywgICAgICAgICAgLy9TcGVjaWZpZXMgdGhlIGRpbWVuc2lvbnMgb2YgdGhlIFFSIGNvZGUgYXMgNTcgeCA1Ny4NCisgICAgSU1BUV9RUl9ESU1FTlNJT05TXzYxeDYxICAgICAgID0gNjEsICAgICAgICAgIC8vU3BlY2lmaWVzIHRoZSBkaW1lbnNpb25zIG9mIHRoZSBRUiBjb2RlIGFzIDYxIHggNjEuDQorICAgIElNQVFfUVJfRElNRU5TSU9OU182NXg2NSAgICAgICA9IDY1LCAgICAgICAgICAvL1NwZWNpZmllcyB0aGUgZGltZW5zaW9ucyBvZiB0aGUgUVIgY29kZSBhcyA2NSB4IDY1Lg0KKyAgICBJTUFRX1FSX0RJTUVOU0lPTlNfNjl4NjkgICAgICAgPSA2OSwgICAgICAgICAgLy9TcGVjaWZpZXMgdGhlIGRpbWVuc2lvbnMgb2YgdGhlIFFSIGNvZGUgYXMgNjkgeCA2OS4NCisgICAgSU1BUV9RUl9ESU1FTlNJT05TXzczeDczICAgICAgID0gNzMsICAgICAgICAgIC8vU3BlY2lmaWVzIHRoZSBkaW1lbnNpb25zIG9mIHRoZSBRUiBjb2RlIGFzIDczIHggNzMuDQorICAgIElNQVFfUVJfRElNRU5TSU9OU183N3g3NyAgICAgICA9IDc3LCAgICAgICAgICAvL1NwZWNpZmllcyB0aGUgZGltZW5zaW9ucyBvZiB0aGUgUVIgY29kZSBhcyA3NyB4IDc3Lg0KKyAgICBJTUFRX1FSX0RJTUVOU0lPTlNfODF4ODEgICAgICAgPSA4MSwgICAgICAgICAgLy9TcGVjaWZpZXMgdGhlIGRpbWVuc2lvbnMgb2YgdGhlIFFSIGNvZGUgYXMgODEgeCA4MS4NCisgICAgSU1BUV9RUl9ESU1FTlNJT05TXzg1eDg1ICAgICAgID0gODUsICAgICAgICAgIC8vU3BlY2lmaWVzIHRoZSBkaW1lbnNpb25zIG9mIHRoZSBRUiBjb2RlIGFzIDg1IHggODUuDQorICAgIElNQVFfUVJfRElNRU5TSU9OU184OXg4OSAgICAgICA9IDg5LCAgICAgICAgICAvL1NwZWNpZmllcyB0aGUgZGltZW5zaW9ucyBvZiB0aGUgUVIgY29kZSBhcyA4OSB4IDg5Lg0KKyAgICBJTUFRX1FSX0RJTUVOU0lPTlNfOTN4OTMgICAgICAgPSA5MywgICAgICAgICAgLy9TcGVjaWZpZXMgdGhlIGRpbWVuc2lvbnMgb2YgdGhlIFFSIGNvZGUgYXMgOTMgeCA5My4NCisgICAgSU1BUV9RUl9ESU1FTlNJT05TXzk3eDk3ICAgICAgID0gOTcsICAgICAgICAgIC8vU3BlY2lmaWVzIHRoZSBkaW1lbnNpb25zIG9mIHRoZSBRUiBjb2RlIGFzIDk3IHggOTcuDQorICAgIElNQVFfUVJfRElNRU5TSU9OU18xMDF4MTAxICAgICA9IDEwMSwgICAgICAgICAvL1NwZWNpZmllcyB0aGUgZGltZW5zaW9ucyBvZiB0aGUgUVIgY29kZSBhcyAxMDEgeCAxMDEuDQorICAgIElNQVFfUVJfRElNRU5TSU9OU18xMDV4MTA1ICAgICA9IDEwNSwgICAgICAgICAvL1NwZWNpZmllcyB0aGUgZGltZW5zaW9ucyBvZiB0aGUgUVIgY29kZSBhcyAxMDUgeCAxMDUuDQorICAgIElNQVFfUVJfRElNRU5TSU9OU18xMDl4MTA5ICAgICA9IDEwOSwgICAgICAgICAvL1NwZWNpZmllcyB0aGUgZGltZW5zaW9ucyBvZiB0aGUgUVIgY29kZSBhcyAxMDkgeCAxMDkuDQorICAgIElNQVFfUVJfRElNRU5TSU9OU18xMTN4MTEzICAgICA9IDExMywgICAgICAgICAvL1NwZWNpZmllcyB0aGUgZGltZW5zaW9ucyBvZiB0aGUgUVIgY29kZSBhcyAxMTMgeCAxMTMuDQorICAgIElNQVFfUVJfRElNRU5TSU9OU18xMTd4MTE3ICAgICA9IDExNywgICAgICAgICAvL1NwZWNpZmllcyB0aGUgZGltZW5zaW9ucyBvZiB0aGUgUVIgY29kZSBhcyAxMTcgeCAxMTcuDQorICAgIElNQVFfUVJfRElNRU5TSU9OU18xMjF4MTIxICAgICA9IDEyMSwgICAgICAgICAvL1NwZWNpZmllcyB0aGUgZGltZW5zaW9ucyBvZiB0aGUgUVIgY29kZSBhcyAxMjEgeCAxMjEuDQorICAgIElNQVFfUVJfRElNRU5TSU9OU18xMjV4MTI1ICAgICA9IDEyNSwgICAgICAgICAvL1NwZWNpZmllcyB0aGUgZGltZW5zaW9ucyBvZiB0aGUgUVIgY29kZSBhcyAxMjUgeCAxMjUuDQorICAgIElNQVFfUVJfRElNRU5TSU9OU18xMjl4MTI5ICAgICA9IDEyOSwgICAgICAgICAvL1NwZWNpZmllcyB0aGUgZGltZW5zaW9ucyBvZiB0aGUgUVIgY29kZSBhcyAxMjkgeCAxMjkuDQorICAgIElNQVFfUVJfRElNRU5TSU9OU18xMzN4MTMzICAgICA9IDEzMywgICAgICAgICAvL1NwZWNpZmllcyB0aGUgZGltZW5zaW9ucyBvZiB0aGUgUVIgY29kZSBhcyAxMzMgeCAxMzMuDQorICAgIElNQVFfUVJfRElNRU5TSU9OU18xMzd4MTM3ICAgICA9IDEzNywgICAgICAgICAvL1NwZWNpZmllcyB0aGUgZGltZW5zaW9ucyBvZiB0aGUgUVIgY29kZSBhcyAxMzcgeCAxMzcuDQorICAgIElNQVFfUVJfRElNRU5TSU9OU18xNDF4MTQxICAgICA9IDE0MSwgICAgICAgICAvL1NwZWNpZmllcyB0aGUgZGltZW5zaW9ucyBvZiB0aGUgUVIgY29kZSBhcyAxNDEgeCAxNDEuDQorICAgIElNQVFfUVJfRElNRU5TSU9OU18xNDV4MTQ1ICAgICA9IDE0NSwgICAgICAgICAvL1NwZWNpZmllcyB0aGUgZGltZW5zaW9ucyBvZiB0aGUgUVIgY29kZSBhcyAxNDUgeCAxNDUuDQorICAgIElNQVFfUVJfRElNRU5TSU9OU18xNDl4MTQ5ICAgICA9IDE0OSwgICAgICAgICAvL1NwZWNpZmllcyB0aGUgZGltZW5zaW9ucyBvZiB0aGUgUVIgY29kZSBhcyAxNDkgeCAxNDkuDQorICAgIElNQVFfUVJfRElNRU5TSU9OU18xNTN4MTUzICAgICA9IDE1MywgICAgICAgICAvL1NwZWNpZmllcyB0aGUgZGltZW5zaW9ucyBvZiB0aGUgUVIgY29kZSBhcyAxNTMgeCAxNTMuDQorICAgIElNQVFfUVJfRElNRU5TSU9OU18xNTd4MTU3ICAgICA9IDE1NywgICAgICAgICAvL1NwZWNpZmllcyB0aGUgZGltZW5zaW9ucyBvZiB0aGUgUVIgY29kZSBhcyAxNTcgeCAxNTM3Lg0KKyAgICBJTUFRX1FSX0RJTUVOU0lPTlNfMTYxeDE2MSAgICAgPSAxNjEsICAgICAgICAgLy9TcGVjaWZpZXMgdGhlIGRpbWVuc2lvbnMgb2YgdGhlIFFSIGNvZGUgYXMgMTYxIHggMTYxLg0KKyAgICBJTUFRX1FSX0RJTUVOU0lPTlNfMTY1eDE2NSAgICAgPSAxNjUsICAgICAgICAgLy9TcGVjaWZpZXMgdGhlIGRpbWVuc2lvbnMgb2YgdGhlIFFSIGNvZGUgYXMgMTY1IHggMTY1Lg0KKyAgICBJTUFRX1FSX0RJTUVOU0lPTlNfMTY5eDE2OSAgICAgPSAxNjksICAgICAgICAgLy9TcGVjaWZpZXMgdGhlIGRpbWVuc2lvbnMgb2YgdGhlIFFSIGNvZGUgYXMgMTY5IHggMTY5Lg0KKyAgICBJTUFRX1FSX0RJTUVOU0lPTlNfMTczeDE3MyAgICAgPSAxNzMsICAgICAgICAgLy9TcGVjaWZpZXMgdGhlIGRpbWVuc2lvbnMgb2YgdGhlIFFSIGNvZGUgYXMgMTczIHggMTczLg0KKyAgICBJTUFRX1FSX0RJTUVOU0lPTlNfMTc3eDE3NyAgICAgPSAxNzcsICAgICAgICAgLy9TcGVjaWZpZXMgdGhlIGRpbWVuc2lvbnMgb2YgdGhlIFFSIGNvZGUgYXMgMTc3IHggMTc3Lg0KKyAgICBJTUFRX1FSX0RJTUVOU0lPTlNfU0laRV9HVUFSRCAgPSAweEZGRkZGRkZGICAgDQorfSBRUkRpbWVuc2lvbnM7DQorDQordHlwZWRlZiBlbnVtIFFSQ2VsbEZpbHRlck1vZGVfZW51bSB7DQorICAgIElNQVFfUVJfQ0VMTF9GSUxURVJfTU9ERV9BVVRPX0RFVEVDVCAgICAgICA9IC0yLCAgICAgICAgICAvL1RoZSBmdW5jdGlvbiB3aWxsIHRyeSBhbGwgZmlsdGVyIG1vZGVzIGFuZCB1c2VzIHRoZSBvbmUgdGhhdCBkZWNvZGVzIHRoZSBRUiBjb2RlIHdpdGhpbiB0aGUgZmV3ZXN0IGl0ZXJhdGlvbnMgYW5kIHV0aWxpemluZyB0aGUgbGVhc3QgYW1vdW50IG9mIGVycm9yIGNvcnJlY3Rpb24uDQorICAgIElNQVFfUVJfQ0VMTF9GSUxURVJfTU9ERV9BVkVSQUdFICAgICAgICAgICA9IDAsICAgICAgICAgICAvL1RoZSBmdW5jdGlvbiBzZXRzIHRoZSBwaXhlbCB2YWx1ZSBmb3IgdGhlIGNlbGwgdG8gdGhlIGF2ZXJhZ2Ugb2YgdGhlIHNhbXBsZWQgcGl4ZWxzLg0KKyAgICBJTUFRX1FSX0NFTExfRklMVEVSX01PREVfTUVESUFOICAgICAgICAgICAgPSAxLCAgICAgICAgICAgLy9UaGUgZnVuY3Rpb24gc2V0cyB0aGUgcGl4ZWwgdmFsdWUgZm9yIHRoZSBjZWxsIHRvIHRoZSBtZWRpYW4gb2YgdGhlIHNhbXBsZWQgcGl4ZWxzLg0KKyAgICBJTUFRX1FSX0NFTExfRklMVEVSX01PREVfQ0VOVFJBTF9BVkVSQUdFICAgPSAyLCAgICAgICAgICAgLy9UaGUgZnVuY3Rpb24gc2V0cyB0aGUgcGl4ZWwgdmFsdWUgZm9yIHRoZSBjZWxsIHRvIHRoZSBhdmVyYWdlIG9mIHRoZSBwaXhlbHMgaW4gdGhlIGNlbnRlciBvZiB0aGUgY2VsbCBzYW1wbGUuDQorICAgIElNQVFfUVJfQ0VMTF9GSUxURVJfTU9ERV9ISUdIX0FWRVJBR0UgICAgICA9IDMsICAgICAgICAgICAvL1RoZSBmdW5jdGlvbiBzZXRzIHRoZSBwaXhlbCB2YWx1ZSBmb3IgdGhlIGNlbGwgdG8gdGhlIGF2ZXJhZ2UgdmFsdWUgb2YgdGhlIGhhbGYgb2YgdGhlIHNhbXBsZWQgcGl4ZWxzIHdpdGggdGhlIGhpZ2hlc3QgcGl4ZWwgdmFsdWVzLg0KKyAgICBJTUFRX1FSX0NFTExfRklMVEVSX01PREVfTE9XX0FWRVJBR0UgICAgICAgPSA0LCAgICAgICAgICAgLy9UaGUgZnVuY3Rpb24gc2V0cyB0aGUgcGl4ZWwgdmFsdWUgZm9yIHRoZSBjZWxsIHRvIHRoZSBhdmVyYWdlIHZhbHVlIG9mIHRoZSBoYWxmIG9mIHRoZSBzYW1wbGVkIHBpeGVscyB3aXRoIHRoZSBsb3dlc3QgcGl4ZWwgdmFsdWVzLg0KKyAgICBJTUFRX1FSX0NFTExfRklMVEVSX01PREVfVkVSWV9ISUdIX0FWRVJBR0UgPSA1LCAgICAgICAgICAgLy9UaGUgZnVuY3Rpb24gc2V0cyB0aGUgcGl4ZWwgdmFsdWUgZm9yIHRoZSBjZWxsIHRvIHRoZSBhdmVyYWdlIHZhbHVlIG9mIHRoZSBuaW50aCBvZiB0aGUgc2FtcGxlZCBwaXhlbHMgd2l0aCB0aGUgaGlnaGVzdCBwaXhlbCB2YWx1ZXMuDQorICAgIElNQVFfUVJfQ0VMTF9GSUxURVJfTU9ERV9WRVJZX0xPV19BVkVSQUdFICA9IDYsICAgICAgICAgICAvL1RoZSBmdW5jdGlvbiBzZXRzIHRoZSBwaXhlbCB2YWx1ZSBmb3IgdGhlIGNlbGwgdG8gdGhlIGF2ZXJhZ2UgdmFsdWUgb2YgdGhlIG5pbnRoIG9mIHRoZSBzYW1wbGVkIHBpeGVscyB3aXRoIHRoZSBsb3dlc3QgcGl4ZWwgdmFsdWVzLg0KKyAgICBJTUFRX1FSX0NFTExfRklMVEVSX01PREVfQUxMICAgICAgICAgICAgICAgPSA4LCAgICAgICAgICAgLy9UaGUgZnVuY3Rpb24gdHJpZXMgZWFjaCBmaWx0ZXIgbW9kZSwgc3RhcnRpbmcgd2l0aCBJTUFRX1FSX0NFTExfRklMVEVSX01PREVfQVZFUkFHRSBhbmQgZW5kaW5nIHdpdGggSU1BUV9RUl9DRUxMX0ZJTFRFUl9NT0RFX1ZFUllfTE9XX0FWRVJBR0UsIHN0b3BwaW5nIG9uY2UgYSBmaWx0ZXIgbW9kZSBkZWNvZGVzIGNvcnJlY3RseS4NCisgICAgSU1BUV9RUl9DRUxMX0ZJTFRFUl9NT0RFX1NJWkVfR1VBUkQgICAgICAgID0gMHhGRkZGRkZGRiAgIA0KK30gUVJDZWxsRmlsdGVyTW9kZTsNCisNCit0eXBlZGVmIGVudW0gUm91bmRpbmdNb2RlX2VudW0gew0KKyAgICBJTUFRX1JPVU5ESU5HX01PREVfT1BUSU1JWkUgICA9IDAsICAgICAgICAgICAvL1JvdW5kcyB0aGUgcmVzdWx0IG9mIGEgZGl2aXNpb24gdXNpbmcgdGhlIGJlc3QgYXZhaWxhYmxlIG1ldGhvZC4NCisgICAgSU1BUV9ST1VORElOR19NT0RFX1RSVU5DQVRFICAgPSAxLCAgICAgICAgICAgLy9UcnVuY2F0ZXMgdGhlIHJlc3VsdCBvZiBhIGRpdmlzaW9uLg0KKyAgICBJTUFRX1JPVU5ESU5HX01PREVfU0laRV9HVUFSRCA9IDB4RkZGRkZGRkYgICANCit9IFJvdW5kaW5nTW9kZTsNCisNCit0eXBlZGVmIGVudW0gUVJEZW1vZHVsYXRpb25Nb2RlX2VudW0gew0KKyAgICBJTUFRX1FSX0RFTU9EVUxBVElPTl9NT0RFX0FVVE9fREVURUNUICAgID0gLTIsICAgICAgICAgIC8vVGhlIGZ1bmN0aW9uIHdpbGwgdHJ5IGVhY2ggZGVtb2R1bGF0aW9uIG1vZGUgYW5kIHVzZSB0aGUgb25lIHdoaWNoIGRlY29kZXMgdGhlIFFSIGNvZGUgd2l0aGluIHRoZSBmZXdlc3QgaXRlcmF0aW9ucyBhbmQgdXRpbGl6aW5nIHRoZSBsZWFzdCBhbW91bnQgb2YgZXJyb3IgY29ycmVjdGlvbi4NCisgICAgSU1BUV9RUl9ERU1PRFVMQVRJT05fTU9ERV9ISVNUT0dSQU0gICAgICA9IDAsICAgICAgICAgICAvL1RoZSBmdW5jdGlvbiB1c2VzIGEgaGlzdG9ncmFtIG9mIGFsbCBvZiB0aGUgUVIgY2VsbHMgdG8gY2FsY3VsYXRlIGEgdGhyZXNob2xkLg0KKyAgICBJTUFRX1FSX0RFTU9EVUxBVElPTl9NT0RFX0xPQ0FMX0NPTlRSQVNUID0gMSwgICAgICAgICAgIC8vVGhlIGZ1bmN0aW9uIGV4YW1pbmVzIGVhY2ggb2YgdGhlIGNlbGwncyBuZWlnaGJvcnMgdG8gZGV0ZXJtaW5lIGlmIHRoZSBjZWxsIGlzIG9uIG9yIG9mZi4NCisgICAgSU1BUV9RUl9ERU1PRFVMQVRJT05fTU9ERV9DT01CSU5FRCAgICAgICA9IDIsICAgICAgICAgICAvL1RoZSBmdW5jdGlvbiB1c2VzIHRoZSBoaXN0b2dyYW0gb2YgdGhlIFFSIGNvZGUgdG8gY2FsY3VsYXRlIGEgdGhyZXNob2xkLg0KKyAgICBJTUFRX1FSX0RFTU9EVUxBVElPTl9NT0RFX0FMTCAgICAgICAgICAgID0gMywgICAgICAgICAgIC8vVGhlIGZ1bmN0aW9uIHRyaWVzIElNQVFfUVJfREVNT0RVTEFUSU9OX01PREVfSElTVE9HUkFNLCB0aGVuIElNQVFfUVJfREVNT0RVTEFUSU9OX01PREVfTE9DQUxfQ09OVFJBU1QgYW5kIHRoZW4gSU1BUV9RUl9ERU1PRFVMQVRJT05fTU9ERV9DT01CSU5FRCwgc3RvcHBpbmcgb25jZSBvbmUgbW9kZSBpcyBzdWNjZXNzZnVsLg0KKyAgICBJTUFRX1FSX0RFTU9EVUxBVElPTl9NT0RFX1NJWkVfR1VBUkQgICAgID0gMHhGRkZGRkZGRiAgIA0KK30gUVJEZW1vZHVsYXRpb25Nb2RlOw0KKw0KK3R5cGVkZWYgZW51bSBDb250cmFzdE1vZGVfZW51bSB7DQorICAgIElNQVFfT1JJR0lOQUxfQ09OVFJBU1QgPSAwLCAgLy9JbnN0cnVjdHMgdGhlIGdlb21ldHJpYyBtYXRjaGluZyBhbGdvcml0aG0gdG8gZmluZCBtYXRjaGVzIHdpdGggdGhlIHNhbWUgY29udHJhc3QgYXMgdGhlIHRlbXBsYXRlLg0KKyAgICBJTUFRX1JFVkVSU0VEX0NPTlRSQVNUID0gMSwgIC8vSW5zdHJ1Y3RzIHRoZSBnZW9tZXRyaWMgbWF0Y2hpbmcgYWxnb3JpdGhtIHRvIGZpbmQgbWF0Y2hlcyB3aXRoIHRoZSBpbnZlcnRlZCBjb250cmFzdCBvZiB0aGUgdGVtcGxhdGUuDQorICAgIElNQVFfQk9USF9DT05UUkFTVFMgICAgPSAyLCAgLy9JbnN0cnVjdHMgdGhlIGdlb21ldHJpYyBtYXRjaGluZyBhbGdvcml0aG0gdG8gZmluZCBtYXRjaGVzIHdpdGggdGhlIHNhbWUgYW5kIGludmVydGVkIGNvbnRyYXN0IG9mIHRoZSB0ZW1wbGF0ZS4NCit9IENvbnRyYXN0TW9kZTsNCisNCit0eXBlZGVmIGVudW0gUVJQb2xhcml0aWVzX2VudW0gew0KKyAgICBJTUFRX1FSX1BPTEFSSVRZX0FVVE9fREVURUNUICAgICA9IC0yLCAgICAgICAgICAvL1RoZSBmdW5jdGlvbiBzaG91bGQgZGV0ZXJtaW5lIHRoZSBwb2xhcml0eSBvZiB0aGUgUVIgY29kZS4NCisgICAgSU1BUV9RUl9QT0xBUklUWV9CTEFDS19PTl9XSElURSAgPSAwLCAgICAgICAgICAgLy9UaGUgZnVuY3Rpb24gc2hvdWxkIHNlYXJjaCBmb3IgYSBRUiBjb2RlIHdpdGggZGFyayBkYXRhIG9uIGEgYnJpZ2h0IGJhY2tncm91bmQuDQorICAgIElNQVFfUVJfUE9MQVJJVFlfV0hJVEVfT05fQkxBQ0sgID0gMSwgICAgICAgICAgIC8vVGhlIGZ1bmN0aW9uIHNob3VsZCBzZWFyY2ggZm9yIGEgUVIgY29kZSB3aXRoIGJyaWdodCBkYXRhIG9uIGEgZGFyayBiYWNrZ3JvdW5kLg0KKyAgICBJTUFRX1FSX1BPTEFSSVRZX01PREVfU0laRV9HVUFSRCA9IDB4RkZGRkZGRkYgICANCit9IFFSUG9sYXJpdGllczsNCisNCit0eXBlZGVmIGVudW0gUVJSb3RhdGlvbk1vZGVfZW51bSB7DQorICAgIElNQVFfUVJfUk9UQVRJT05fTU9ERV9VTkxJTUlURUQgICA9IDAsICAgICAgICAgICAvL1RoZSBmdW5jdGlvbiBhbGxvd3MgZm9yIHVubGltaXRlZCByb3RhdGlvbi4NCisgICAgSU1BUV9RUl9ST1RBVElPTl9NT0RFXzBfREVHUkVFUyAgID0gMSwgICAgICAgICAgIC8vVGhlIGZ1bmN0aW9uIGFsbG93cyBmb3IgPz8/IDUgZGVncmVlcyBvZiByb3RhdGlvbi4NCisgICAgSU1BUV9RUl9ST1RBVElPTl9NT0RFXzkwX0RFR1JFRVMgID0gMiwgICAgICAgICAgIC8vVGhlIGZ1bmN0aW9uIGFsbG93cyBmb3IgYmV0d2VlbiA4NSBhbmQgOTUgZGVncmVlcyBvZiByb3RhdGlvbi4NCisgICAgSU1BUV9RUl9ST1RBVElPTl9NT0RFXzE4MF9ERUdSRUVTID0gMywgICAgICAgICAgIC8vVGhlIGZ1bmN0aW9uIGFsbG93cyBmb3IgYmV0d2VlbiAxNzUgYW5kIDE4NSBkZWdyZWVzIG9mIHJvdGF0aW9uLg0KKyAgICBJTUFRX1FSX1JPVEFUSU9OX01PREVfMjcwX0RFR1JFRVMgPSA0LCAgICAgICAgICAgLy9UaGUgZnVuY3Rpb24gYWxsb3dzIGZvciBiZXR3ZWVuIDI2NSBhbmQgMjc1IGRlZ3JlZXMgb2Ygcm90YXRpb24uDQorICAgIElNQVFfUVJfUk9UQVRJT05fTU9ERV9TSVpFX0dVQVJEICA9IDB4RkZGRkZGRkYgICANCit9IFFSUm90YXRpb25Nb2RlOw0KKw0KK3R5cGVkZWYgZW51bSBRUkdyYWRpbmdNb2RlX2VudW0gew0KKyAgICBJTUFRX1FSX05PX0dSQURJTkcgICAgICAgICAgICAgID0gMCwgICAgICAgICAgIC8vVGhlIGZ1bmN0aW9uIGRvZXMgbm90IG1ha2UgYW55IHByZXBhcmF0b3J5IGNhbGN1bGF0aW9ucy4NCisgICAgSU1BUV9RUl9HUkFESU5HX01PREVfU0laRV9HVUFSRCA9IDB4RkZGRkZGRkYgICANCit9IFFSR3JhZGluZ01vZGU7DQorDQordHlwZWRlZiBlbnVtIFN0cmFpZ2h0RWRnZVNlYXJjaE1vZGVfZW51bSB7DQorICAgIElNQVFfVVNFX0ZJUlNUX1JBS0VfRURHRVMgICAgICAgICAgICA9IDAsICAgICAgICAgICAvL0ZpdHMgYSBzdHJhaWdodCBlZGdlIG9uIHRoZSBmaXJzdCBwb2ludHMgZGV0ZWN0ZWQgdXNpbmcgYSByYWtlLg0KKyAgICBJTUFRX1VTRV9CRVNUX1JBS0VfRURHRVMgICAgICAgICAgICAgPSAxLCAgICAgICAgICAgLy9GaXRzIGEgc3RyYWlnaHQgZWRnZSBvbiB0aGUgYmVzdCBwb2ludHMgZGV0ZWN0ZWQgdXNpbmcgYSByYWtlLg0KKyAgICBJTUFRX1VTRV9CRVNUX0hPVUdIX0xJTkUgICAgICAgICAgICAgPSAyLCAgICAgICAgICAgLy9GaW5kcyB0aGUgc3Ryb25nZXN0IHN0cmFpZ2h0IGVkZ2UgdXNpbmcgYWxsIHBvaW50cyBkZXRlY3RlZCBvbiBhIHJha2UuDQorICAgIElNQVFfVVNFX0ZJUlNUX1BST0pFQ1RJT05fRURHRSAgICAgICA9IDMsICAgICAgICAgICAvL1VzZXMgdGhlIGxvY2F0aW9uIG9mIHRoZSBmaXJzdCBwcm9qZWN0ZWQgZWRnZSBhcyB0aGUgc3RyYWlnaHQgZWRnZS4NCisgICAgSU1BUV9VU0VfQkVTVF9QUk9KRUNUSU9OX0VER0UgICAgICAgID0gNCwgICAgICAgICAgIC8vRmluZHMgdGhlIHN0cm9uZ2VzdCBwcm9qZWN0ZWQgZWRnZSBsb2NhdGlvbiB0byBkZXRlcm1pbmUgdGhlIHN0cmFpZ2h0IGVkZ2UuDQorICAgIElNQVFfU1RSQUlHSFRfRURHRV9TRUFSQ0hfU0laRV9HVUFSRCA9IDB4RkZGRkZGRkYgICANCit9IFN0cmFpZ2h0RWRnZVNlYXJjaE1vZGU7DQorDQordHlwZWRlZiBlbnVtIFNlYXJjaERpcmVjdGlvbl9lbnVtIHsNCisgICAgSU1BUV9TRUFSQ0hfRElSRUNUSU9OX0xFRlRfVE9fUklHSFQgPSAwLCAgICAgICAgICAgLy9TZWFyY2hlcyBmcm9tIHRoZSBsZWZ0IHNpZGUgb2YgdGhlIHNlYXJjaCBhcmVhIHRvIHRoZSByaWdodCBzaWRlIG9mIHRoZSBzZWFyY2ggYXJlYS4NCisgICAgSU1BUV9TRUFSQ0hfRElSRUNUSU9OX1JJR0hUX1RPX0xFRlQgPSAxLCAgICAgICAgICAgLy9TZWFyY2hlcyBmcm9tIHRoZSByaWdodCBzaWRlIG9mIHRoZSBzZWFyY2ggYXJlYSB0byB0aGUgbGVmdCBzaWRlIG9mIHRoZSBzZWFyY2ggYXJlYS4NCisgICAgSU1BUV9TRUFSQ0hfRElSRUNUSU9OX1RPUF9UT19CT1RUT00gPSAyLCAgICAgICAgICAgLy9TZWFyY2hlcyBmcm9tIHRoZSB0b3Agc2lkZSBvZiB0aGUgc2VhcmNoIGFyZWEgdG8gdGhlIGJvdHRvbSBzaWRlIG9mIHRoZSBzZWFyY2ggYXJlYS4NCisgICAgSU1BUV9TRUFSQ0hfRElSRUNUSU9OX0JPVFRPTV9UT19UT1AgPSAzLCAgICAgICAgICAgLy9TZWFyY2hlcyBmcm9tIHRoZSBib3R0b20gc2lkZSBvZiB0aGUgc2VhcmNoIGFyZWEgdG8gdGhlIHRvcCBzaWRlIG9mIHRoZSBzZWFyY2ggYXJlYS4NCisgICAgSU1BUV9TRUFSQ0hfRElSRUNUSU9OX1NJWkVfR1VBUkQgICAgPSAweEZGRkZGRkZGICAgDQorfSBTZWFyY2hEaXJlY3Rpb247DQorDQordHlwZWRlZiBlbnVtIFFSU3RyZWFtTW9kZV9lbnVtIHsNCisgICAgSU1BUV9RUl9NT0RFX05VTUVSSUMgICAgICA9IDAsICAgICAgICAgICAvL1NwZWNpZmllcyB0aGF0IHRoZSBkYXRhIHdhcyBlbmNvZGVkIHVzaW5nIG51bWVyaWMgbW9kZS4NCisgICAgSU1BUV9RUl9NT0RFX0FMUEhBTlVNRVJJQyA9IDEsICAgICAgICAgICAvL1NwZWNpZmllcyB0aGF0IHRoZSBkYXRhIHdhcyBlbmNvZGVkIHVzaW5nIGFscGhhLW51bWVyaWMgbW9kZS4NCisgICAgSU1BUV9RUl9NT0RFX1JBV19CWVRFICAgICA9IDIsICAgICAgICAgICAvL1NwZWNpZmllcyB0aGF0IHRoZSBkYXRhIHdhcyBub3QgZW5jb2RlZCBidXQgaXMgb25seSByYXcgYmluYXJ5IGJ5dGVzLCBvciBlbmNvZGVkIGluIEpJUy04Lg0KKyAgICBJTUFRX1FSX01PREVfRUFOMTI4X1RPS0VOID0gMywgICAgICAgICAgIC8vU3BlY2lmaWVzIHRoYXQgdGhlIGRhdGEgaGFzIGEgc3BlY2lhbCBtZWFuaW5nIHJlcHJlc2VudGVkIGJ5IHRoZSBhcHBsaWNhdGlvbiBJRC4NCisgICAgSU1BUV9RUl9NT0RFX0VBTjEyOF9EQVRBICA9IDQsICAgICAgICAgICAvL1NwZWNpZmllcyB0aGF0IHRoZSBkYXRhIGhhcyBhIHNwZWNpYWwgbWVhbmluZyByZXByZXNlbnRlZCBieSB0aGUgYXBwbGljYXRpb24gSUQuDQorICAgIElNQVFfUVJfTU9ERV9FQ0kgICAgICAgICAgPSA1LCAgICAgICAgICAgLy9TcGVjaWZpZXMgdGhhdCB0aGUgZGF0YSB3YXMgbWVhbnQgdG8gYmUgcmVhZCB1c2luZyB0aGUgbGFuZ3VhZ2UgcmVwcmVzZW50ZWQgaW4gdGhlIGxhbmd1YWdlIElELg0KKyAgICBJTUFRX1FSX01PREVfS0FOSkkgICAgICAgID0gNiwgICAgICAgICAgIC8vU3BlY2lmaWVzIHRoYXQgdGhlIGRhdGEgd2FzIGVuY29kZWQgaW4gU2hpZnQtSklTMTYgSmFwYW5lc2UuDQorICAgIElNQVFfUVJfTU9ERV9TSVpFX0dVQVJEICAgPSAweEZGRkZGRkZGICAgDQorfSBRUlN0cmVhbU1vZGU7DQorDQordHlwZWRlZiBlbnVtIFBhcnRpY2xlQ2xhc3NpZmllclR5cGVfZW51bSB7DQorICAgIElNQVFfUEFSVElDTEVfTEFSR0VTVCAgICAgICAgICAgICAgICAgICAgPSAwLCAgICAgICAgICAgLy9Vc2Ugb25seSB0aGUgbGFyZ2VzdCBwYXJ0aWNsZSBpbiB0aGUgaW1hZ2UuDQorICAgIElNQVFfUEFSVElDTEVfQUxMICAgICAgICAgICAgICAgICAgICAgICAgPSAxLCAgICAgICAgICAgLy9Vc2UgYWxsIHBhcnRpY2xlcyBpbiB0aGUgaW1hZ2UuDQorICAgIElNQVFfUEFSVElDTEVfQ0xBU1NJRklFUl9UWVBFX1NJWkVfR1VBUkQgPSAweEZGRkZGRkZGICAgDQorfSBQYXJ0aWNsZUNsYXNzaWZpZXJUeXBlOw0KKw0KK3R5cGVkZWYgZW51bSBRUkNlbGxTYW1wbGVTaXplX2VudW0gew0KKyAgICBJTUFRX1FSX0NFTExfU0FNUExFX1NJWkVfQVVUT19ERVRFQ1QgPSAtMiwgICAgICAgICAgLy9UaGUgZnVuY3Rpb24gd2lsbCB0cnkgZWFjaCBzYW1wbGUgc2l6ZSBhbmQgdXNlIHRoZSBvbmUgd2hpY2ggZGVjb2RlcyB0aGUgUVIgY29kZSB3aXRoaW4gdGhlIGZld2VzdCBpdGVyYXRpb25zIGFuZCB1dGlsaXppbmcgdGhlIGxlYXN0IGFtb3VudCBvZiBlcnJvciBjb3JyZWN0aW9uLg0KKyAgICBJTUFRX1FSX0NFTExfU0FNUExFX1NJWkUxWDEgICAgICAgICAgPSAxLCAgICAgICAgICAgLy9UaGUgZnVuY3Rpb24gd2lsbCB1c2UgYSAxeDEgc2l6ZWQgc2FtcGxlIGZyb20gZWFjaCBjZWxsLg0KKyAgICBJTUFRX1FSX0NFTExfU0FNUExFX1NJWkUyWDIgICAgICAgICAgPSAyLCAgICAgICAgICAgLy9UaGUgZnVuY3Rpb24gd2lsbCB1c2UgYSAyeDIgc2l6ZWQgc2FtcGxlIGZyb20gZWFjaCBjZWxsLg0KKyAgICBJTUFRX1FSX0NFTExfU0FNUExFX1NJWkUzWDMgICAgICAgICAgPSAzLCAgICAgICAgICAgLy9UaGUgZnVuY3Rpb24gd2lsbCB1c2UgYSAzeDMgc2l6ZWQgc2FtcGxlIGZyb20gZWFjaCBjZWxsLg0KKyAgICBJTUFRX1FSX0NFTExfU0FNUExFX1NJWkU0WDQgICAgICAgICAgPSA0LCAgICAgICAgICAgLy9UaGUgZnVuY3Rpb24gd2lsbCB1c2UgYSA0eDQgc2l6ZWQgc2FtcGxlIGZyb20gZWFjaCBjZWxsLg0KKyAgICBJTUFRX1FSX0NFTExfU0FNUExFX1NJWkU1WDUgICAgICAgICAgPSA1LCAgICAgICAgICAgLy9UaGUgZnVuY3Rpb24gd2lsbCB1c2UgYSA1eDUgc2l6ZWQgc2FtcGxlIGZyb20gZWFjaCBjZWxsLg0KKyAgICBJTUFRX1FSX0NFTExfU0FNUExFX1NJWkU2WDYgICAgICAgICAgPSA2LCAgICAgICAgICAgLy9UaGUgZnVuY3Rpb24gd2lsbCB1c2UgYSA2eDYgc2l6ZWQgc2FtcGxlIGZyb20gZWFjaCBjZWxsLg0KKyAgICBJTUFRX1FSX0NFTExfU0FNUExFX1NJWkU3WDcgICAgICAgICAgPSA3LCAgICAgICAgICAgLy9UaGUgZnVuY3Rpb24gd2lsbCB1c2UgYSA3eDcgc2l6ZWQgc2FtcGxlIGZyb20gZWFjaCBjZWxsLg0KKyAgICBJTUFRX1FSX0NFTExfU0FNUExFX1RZUEVfU0laRV9HVUFSRCAgPSAweEZGRkZGRkZGICAgDQorfSBRUkNlbGxTYW1wbGVTaXplOw0KKw0KK3R5cGVkZWYgZW51bSBSYWtlUHJvY2Vzc1R5cGVfZW51bSB7DQorICAgIElNQVFfR0VUX0ZJUlNUX0VER0VTICAgICAgICAgICAgICA9IDAsICAgICAgICAgICANCisgICAgSU1BUV9HRVRfRklSU1RfQU5EX0xBU1RfRURHRVMgICAgID0gMSwgICAgICAgICAgIA0KKyAgICBJTUFRX0dFVF9BTExfRURHRVMgICAgICAgICAgICAgICAgPSAyLCAgICAgICAgICAgDQorICAgIElNQVFfR0VUX0JFU1RfRURHRVMgICAgICAgICAgICAgICA9IDMsICAgICAgICAgICANCisgICAgSU1BUV9SQUtFX1BST0NFU1NfVFlQRV9TSVpFX0dVQVJEID0gMHhGRkZGRkZGRiAgIA0KK30gUmFrZVByb2Nlc3NUeXBlOw0KKw0KK3R5cGVkZWYgZW51bSBHZW9tZXRyaWNTZXR1cERhdGFJdGVtX2VudW0gew0KKyAgICBJTUFRX0NVUlZFX0VYVFJBQ1RJT05fTU9ERSAgICAgICAgICAgICA9IDAsICAgLy9TcGVjaWZpZXMgaG93IHRoZSBmdW5jdGlvbiBpZGVudGlmaWVzIGN1cnZlcyBpbiB0aGUgaW1hZ2UuDQorICAgIElNQVFfQ1VSVkVfRURHRV9USFJTSE9MRCAgICAgICAgICAgICAgID0gMSwgICAvL1NwZWNpZmllcyB0aGUgbWluaW11bSBjb250cmFzdCBhbiBlZGdlIHBpeGVsIG11c3QgaGF2ZSBmb3IgaXQgdG8gYmUgY29uc2lkZXJlZCBwYXJ0IG9mIGEgY3VydmUuDQorICAgIElNQVFfQ1VSVkVfRURHRV9GSUxURVIgICAgICAgICAgICAgICAgID0gMiwgICAvL1NwZWNpZmllcyB0aGUgd2lkdGggb2YgdGhlIGVkZ2UgZmlsdGVyIHRoYXQgdGhlIGZ1bmN0aW9uIHVzZXMgdG8gaWRlbnRpZnkgY3VydmVzIGluIHRoZSBpbWFnZS4NCisgICAgSU1BUV9NSU5JTVVNX0NVUlZFX0xFTkdUSCAgICAgICAgICAgICAgPSAzLCAgIC8vU3BlY2lmaWVzIHRoZSBsZW5ndGgsIGluIHBpeGVscywgb2YgdGhlIHNtYWxsZXN0IGN1cnZlIHRoYXQgeW91IHdhbnQgdGhlIGZ1bmN0aW9uIHRvIGlkZW50aWZ5Lg0KKyAgICBJTUFRX0NVUlZFX1JPV19TRUFSQ0hfU1RFUF9TSVpFICAgICAgICA9IDQsICAgLy9TcGVjaWZpZXMgdGhlIGRpc3RhbmNlLCBpbiB0aGUgeSBkaXJlY3Rpb24sIGJldHdlZW4gdGhlIGltYWdlIHJvd3MgdGhhdCB0aGUgYWxnb3JpdGhtIGluc3BlY3RzIGZvciBjdXJ2ZSBzZWVkIHBvaW50cy4NCisgICAgSU1BUV9DVVJWRV9DT0xfU0VBUkNIX1NURVBfU0laRSAgICAgICAgPSA1LCAgIC8vU3BlY2lmaWVzIHRoZSBkaXN0YW5jZSwgaW4gdGhlIHggZGlyZWN0aW9uLCBiZXR3ZWVuIHRoZSBpbWFnZSBjb2x1bW5zIHRoYXQgdGhlIGFsZ29yaXRobSBpbnNwZWN0cyBmb3IgY3VydmUgc2VlZCBwb2ludHMuDQorICAgIElNQVFfQ1VSVkVfTUFYX0VORF9QT0lOVF9HQVAgICAgICAgICAgID0gNiwgICAvL1NwZWNpZmllcyB0aGUgbWF4aW11bSBnYXAsIGluIHBpeGVscywgYmV0d2VlbiB0aGUgZW5kcG9pbnRzIG9mIGEgY3VydmUgdGhhdCB0aGUgZnVuY3Rpb24gaWRlbnRpZmllcyBhcyBhIGNsb3NlZCBjdXJ2ZS4NCisgICAgSU1BUV9FWFRSQUNUX0NMT1NFRF9DVVJWRVMgICAgICAgICAgICAgPSA3LCAgIC8vU3BlY2lmaWVzIHdoZXRoZXIgdG8gaWRlbnRpZnkgb25seSBjbG9zZWQgY3VydmVzIGluIHRoZSBpbWFnZS4NCisgICAgSU1BUV9FTkFCTEVfU1VCUElYRUxfQ1VSVkVfRVhUUkFDVElPTiAgPSA4LCAgIC8vVGhlIGZ1bmN0aW9uIGlnbm9yZXMgdGhpcyBvcHRpb24uDQorICAgIElNQVFfRU5BQkxFX0NPUlJFTEFUSU9OX1NDT1JFICAgICAgICAgID0gOSwgICAvL1NwZWNpZmllcyB0aGF0IHRoZSBmdW5jdGlvbiBzaG91bGQgY2FsY3VsYXRlIHRoZSBDb3JyZWxhdGlvbiBTY29yZSBhbmQgcmV0dXJuIGl0IGZvciBlYWNoIG1hdGNoIHJlc3VsdC4NCisgICAgSU1BUV9FTkFCTEVfU1VCUElYRUxfQUNDVVJBQ1kgICAgICAgICAgPSAxMCwgIC8vRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIHJldHVybiB0aGUgbWF0Y2ggcmVzdWx0cyB3aXRoIHN1YnBpeGVsIGFjY3VyYWN5Lg0KKyAgICBJTUFRX1NVQlBJWEVMX0lURVJBVElPTlMgICAgICAgICAgICAgICA9IDExLCAgLy9TcGVjaWZpZXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGluY3JlbWVudGFsIGltcHJvdmVtZW50cyB1c2VkIHRvIHJlZmluZSBtYXRjaGVzIHVzaW5nIHN1YnBpeGVsIGluZm9ybWF0aW9uLg0KKyAgICBJTUFRX1NVQlBJWEVMX1RPTEVSQU5DRSAgICAgICAgICAgICAgICA9IDEyLCAgLy9TcGVjaWZpZXMgdGhlIG1heGltdW0gYW1vdW50IG9mIGNoYW5nZSwgaW4gcGl4ZWxzLCBiZXR3ZWVuIGNvbnNlY3V0aXZlIGluY3JlbWVudGFsIGltcHJvdmVtZW50cyBpbiB0aGUgbWF0Y2ggcG9zaXRpb24gYmVmb3JlIHRoZSBmdW5jdGlvbiBzdG9wcyByZWZpbmluZyB0aGUgbWF0Y2ggcG9zaXRpb24uDQorICAgIElNQVFfSU5JVElBTF9NQVRDSF9MSVNUX0xFTkdUSCAgICAgICAgID0gMTMsICAvL1NwZWNpZmllcyB0aGUgbWF4aW11bSBzaXplIG9mIHRoZSBtYXRjaCBsaXN0Lg0KKyAgICBJTUFRX0VOQUJMRV9UQVJHRVRfVEVNUExBVEVfQ1VSVkVTQ09SRSA9IDE0LCAgLy9TcGVjaWZpZXMgd2hldGhlciB0aGUgZnVuY3Rpb24gc2hvdWxkIGNhbGN1bGF0ZSB0aGUgbWF0Y2ggY3VydmUgdG8gdGVtcGxhdGUgY3VydmUgc2NvcmUgYW5kIHJldHVybiBpdCBmb3IgZWFjaCBtYXRjaCByZXN1bHQuDQorICAgIElNQVFfTUlOSU1VTV9NQVRDSF9TRVBBUkFUSU9OX0RJU1RBTkNFID0gMTUsICAvL1NwZWNpZmllcyB0aGUgbWluaW11bSBzZXBhcmF0aW9uIGRpc3RhbmNlLCBpbiBwaXhlbHMsIGJldHdlZW4gdGhlIG9yaWdpbnMgb2YgdHdvIG1hdGNoZXMgdGhhdCBoYXZlIHVuaXF1ZSBwb3NpdGlvbnMuDQorICAgIElNQVFfTUlOSU1VTV9NQVRDSF9TRVBBUkFUSU9OX0FOR0xFICAgID0gMTYsICAvL1NwZWNpZmllcyB0aGUgbWluaW11bSBhbmd1bGFyIGRpZmZlcmVuY2UsIGluIGRlZ3JlZXMsIGJldHdlZW4gdHdvIG1hdGNoZXMgdGhhdCBoYXZlIHVuaXF1ZSBhbmdsZXMuDQorICAgIElNQVFfTUlOSU1VTV9NQVRDSF9TRVBBUkFUSU9OX1NDQUxFICAgID0gMTcsICAvL1NwZWNpZmllcyB0aGUgbWluaW11bSBkaWZmZXJlbmNlIGluIHNjYWxlLCBleHByZXNzZWQgYXMgYSBwZXJjZW50YWdlLCBiZXR3ZWVuIHR3byBtYXRjaGVzIHRoYXQgaGF2ZSB1bmlxdWUgc2NhbGVzLg0KKyAgICBJTUFRX01BWElNVU1fTUFUQ0hfT1ZFUkxBUCAgICAgICAgICAgICA9IDE4LCAgLy9TcGVjaWZpZXMgd2hldGhlciB5b3Ugd2FudCB0aGUgYWxnb3JpdGhtIHRvIHNwZW5kIGxlc3MgdGltZSBhY2N1cmF0ZWx5IGVzdGltYXRpbmcgdGhlIGxvY2F0aW9uIG9mIGEgbWF0Y2guDQorICAgIElNQVFfRU5BQkxFX0NPQVJTRV9SRVNVTFQgICAgICAgICAgICAgID0gMTksICAvL1NwZWNpZmllcyB3aGV0aGVyIHlvdSB3YW50IHRoZSBhbGdvcml0aG0gdG8gc3BlbmQgbGVzcyB0aW1lIGFjY3VyYXRlbHkgZXN0aW1hdGluZyB0aGUgbG9jYXRpb24gb2YgYSBtYXRjaC4NCisgICAgSU1BUV9FTkFCTEVfQ0FMSUJSQVRJT05fU1VQUE9SVCAgICAgICAgPSAyMCwgIC8vU3BlY2lmaWVzIHdoZXRoZXIgb3Igbm90IHRoZSBhbGdvcml0aG0gdHJlYXQgdGhlIGluc3BlY3Rpb24gaW1hZ2UgYXMgYSBjYWxpYnJhdGVkIGltYWdlLg0KKyAgICBJTUFRX0VOQUJMRV9DT05UUkFTVF9SRVZFUlNBTCAgICAgICAgICA9IDIxLCAgLy9TcGVjaWZpZXMgdGhlIGNvbnRyYXN0IG9mIHRoZSBtYXRjaGVzIHRvIHNlYXJjaCBmb3IuDQorICAgIElNQVFfU0VBUkNIX1NUUkFURUdZICAgICAgICAgICAgICAgICAgID0gMjIsICAvL1NwZWNpZmllcyB0aGUgYWdncmVzc2l2ZW5lc3Mgb2YgdGhlIHN0cmF0ZWd5IHVzZWQgdG8gZmluZCBtYXRjaGVzIGluIHRoZSBpbWFnZS4NCisgICAgSU1BUV9SRUZJTkVNRU5UX01BVENIX0ZBQ1RPUiAgICAgICAgICAgPSAyMywgIC8vU3BlY2lmaWVzIHRoZSBmYWN0b3IgYXBwbGllZCB0byB0aGUgbnVtYmVyIG9mIG1hdGNoZXMgcmVxdWVzdGVkIHRvIGRldGVybWluZSBob3cgbWFueSBtYXRjaGVzIGFyZSByZWZpbmVkIGluIHRoZSBweXJhbWlkIHN0YWdlLg0KKyAgICBJTUFRX1NVQlBJWEVMX01BVENIX0ZBQ1RPUiAgICAgICAgICAgICA9IDI0LCAgLy9TcGVjaWZpZXMgdGhlIGZhY3RvciBhcHBsaWVkIHRvIHRoZSBudW1iZXIgZm9yIG1hdGNoZXMgcmVxdWVzdGVkIHRvIGRldGVybWluZSBob3cgbWFueSBtYXRjaGVzIGFyZSB1c2VkIGZvciB0aGUgZmluYWwgKHN1YnBpeGVsKSBzdGFnZS4NCisgICAgSU1BUV9NQVhfUkVGSU5FTUVOVF9JVEVSQVRJT05TICAgICAgICAgPSAyNSwgIC8vU3BlY2lmaWVzIG1heGltdW0gcmVmaW5lbWVudCBpdGVyYXRpb24uDQorfSBHZW9tZXRyaWNTZXR1cERhdGFJdGVtOw0KKw0KK3R5cGVkZWYgZW51bSBEaXN0b3J0aW9uTW9kZWxfZW51bSB7DQorICAgIElNQVFfUE9MWU5PTUlBTF9NT0RFTCAgICA9IDAsICAgLy9Qb2x5bm9taWFsIG1vZGVsLg0KKyAgICBJTUFRX0RJVklTSU9OX01PREVMICAgICAgPSAxLCAgIC8vRGl2aXNpb24gTW9kZWwuDQorICAgIElNQVFfTk9fRElTVE9SVElPTl9NT0RFTCA9IC0xLCAgLy9Ob3QgYSBkaXN0b3J0aW9uIG1vZGVsLg0KK30gRGlzdG9ydGlvbk1vZGVsOw0KKw0KK3R5cGVkZWYgZW51bSBDYWxpYnJhdGlvblRodW1ibmFpbFR5cGVfZW51bSB7DQorICAgIElNQVFfQ0FNQVJBX01PREVMX1RZUEUgICAgICAgICAgICAgICAgICAgICA9IDAsICAgICAgICAgICAvL0NhbWFyYSBtb2RlbCB0aHVtYm5haWwgdHlwZS4NCisgICAgSU1BUV9QRVJTUEVDVElWRV9UWVBFICAgICAgICAgICAgICAgICAgICAgID0gMSwgICAgICAgICAgIC8vUGVyc3BlY3RpdmUgdGh1bWJuYWlsIHR5cGUuDQorICAgIElNQVFfTUlDUk9fUExBTkVfVFlQRSAgICAgICAgICAgICAgICAgICAgICA9IDIsICAgICAgICAgICAvL01pY3JvIFBsYW5lIHRodW1ibmFpbCB0eXBlLg0KKyAgICBJTUFRX0NBTElCUkFUSU9OX1RIVU1CTkFJTF9UWVBFX1NJWkVfR1VBUkQgPSAweEZGRkZGRkZGICAgDQorfSBDYWxpYnJhdGlvblRodW1ibmFpbFR5cGU7DQorDQordHlwZWRlZiBlbnVtIFNldHRpbmdUeXBlX2VudW0gew0KKyAgICBJTUFRX1JPVEFUSU9OX0FOR0xFX1JBTkdFICAgID0gMCwgICAgICAgICAgIC8vU2V0IGEgcmFuZ2UgZm9yIHRoaXMgb3B0aW9uIHRvIHNwZWNpZnkgdGhlIGFuZ2xlcyBhdCB3aGljaCB5b3UgZXhwZWN0IHRoZSBGdW5jdGlvbiB0byBmaW5kIHRlbXBsYXRlIG1hdGNoZXMgaW4gdGhlIGluc3BlY3Rpb24gaW1hZ2UuDQorICAgIElNQVFfU0NBTEVfUkFOR0UgICAgICAgICAgICAgPSAxLCAgICAgICAgICAgLy9TZXQgYSByYW5nZSBmb3IgdGhpcyBvcHRpb24gdG8gc3BlY2lmeSB0aGUgc2l6ZXMgYXQgd2hpY2ggeW91IGV4cGVjdCB0aGUgRnVuY3Rpb24gdG8gZmluZCB0ZW1wbGF0ZSBtYXRjaGVzIGluIHRoZSBpbnNwZWN0aW9uIGltYWdlLg0KKyAgICBJTUFRX09DQ0xVU0lPTl9SQU5HRSAgICAgICAgID0gMiwgICAgICAgICAgIC8vU2V0IGEgcmFuZ2UgZm9yIHRoaXMgb3B0aW9uIHRvIHNwZWNpZnkgdGhlIGFtb3VudCBvZiBvY2NsdXNpb24geW91IGV4cGVjdCBmb3IgYSBtYXRjaCBpbiB0aGUgaW5zcGVjdGlvbiBpbWFnZS4NCisgICAgSU1BUV9TRVRUSU5HX1RZUEVfU0laRV9HVUFSRCA9IDB4RkZGRkZGRkYgICANCit9IFNldHRpbmdUeXBlOw0KKw0KK3R5cGVkZWYgZW51bSBTZWdtZW50YXRpb25EaXN0YW5jZUxldmVsX2VudW0gew0KKyAgICBJTUFRX1NFR01FTlRBVElPTl9MRVZFTF9DT05TRVJWQVRJVkUgPSAwLCAgICAgICAgICAgLy9Vc2VzIGV4dGVuc2l2ZSBjcml0ZXJpYSB0byBkZXRlcm1pbmUgdGhlIE1heGltdW0gRGlzdGFuY2UuDQorICAgIElNQVFfU0VHTUVOVEFUSU9OX0xFVkVMX0FHR1JFU1NJVkUgICA9IDEsICAgICAgICAgICAvL1VzZXMgZmV3IGNyaXRlcmlhIHRvIGRldGVybWluZSB0aGUgTWF4aW11bSBEaXN0YW5jZS4NCisgICAgSU1BUV9TRUdNRU5UQVRJT05fTEVWRUxfU0laRV9HVUFSRCAgID0gMHhGRkZGRkZGRiAgIA0KK30gU2VnbWVudGF0aW9uRGlzdGFuY2VMZXZlbDsNCisNCit0eXBlZGVmIGVudW0gRXh0cmFjdENvbnRvdXJTZWxlY3Rpb25fZW51bSB7DQorICAgIElNQVFfQ0xPU0VTVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMCwgICAgICAgICAgIC8vU2VsZWN0cyB0aGUgY3VydmUgY2xvc2VzdCB0byB0aGUgUk9JLg0KKyAgICBJTUFRX0xPTkdFU1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDEsICAgICAgICAgICAvL1NlbGVjdHMgdGhlIGxvbmdlc3QgY3VydmUuDQorICAgIElNQVFfU1RST05HRVNUICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMiwgICAgICAgICAgIC8vU2VsZWN0cyB0aGUgY3VydmUgd2l0aCB0aGUgaGlnaGVzdCBlZGdlIHN0cmVuZ3RoIGF2ZXJhZ2VkIGZyb20gZWFjaCBwb2ludCBvbiB0aGUgY3VydmUuDQorICAgIElNQVFfRVhUUkFDVF9DT05UT1VSX1NFTEVDVElPTl9TSVpFX0dVQVJEID0gMHhGRkZGRkZGRiAgIA0KK30gRXh0cmFjdENvbnRvdXJTZWxlY3Rpb247DQorDQordHlwZWRlZiBlbnVtIEZpbmRUcmFuc2Zvcm1Nb2RlX2VudW0gew0KKyAgICBJTUFRX0ZJTkRfUkVGRVJFTkNFICAgICAgICAgICAgICAgICA9IDAsICAgICAgICAgICAvL1VwZGF0ZSBib3RoIHBhcnRzIG9mIHRoZSBjb29yZGluYXRlIHN5c3RlbS4NCisgICAgSU1BUV9VUERBVEVfVFJBTlNGT1JNICAgICAgICAgICAgICAgPSAxLCAgICAgICAgICAgLy9VcGRhdGUgb25seSB0aGUgbmV3IHJlZmVyZW5jZSBzeXN0ZW0uDQorICAgIElNQVFfRklORF9UUkFOU0ZPUk1fTU9ERV9TSVpFX0dVQVJEID0gMHhGRkZGRkZGRiAgIA0KK30gRmluZFRyYW5zZm9ybU1vZGU7DQorDQordHlwZWRlZiBlbnVtIEV4dHJhY3RDb250b3VyRGlyZWN0aW9uX2VudW0gew0KKyAgICBJTUFRX1JFQ1RfTEVGVF9SSUdIVCAgICAgICAgICAgICAgICAgICAgICA9IDAsICAgICAgICAgICAvL1NlYXJjaGVzIHRoZSBST0kgZnJvbSBsZWZ0IHRvIHJpZ2h0Lg0KKyAgICBJTUFRX1JFQ1RfUklHSFRfTEVGVCAgICAgICAgICAgICAgICAgICAgICA9IDEsICAgICAgICAgICAvL1NlYXJjaGVzIHRoZSBST0kgZnJvbSByaWdodCB0byBsZWZ0Lg0KKyAgICBJTUFRX1JFQ1RfVE9QX0JPVFRPTSAgICAgICAgICAgICAgICAgICAgICA9IDIsICAgICAgICAgICAvL1NlYXJjaGVzIHRoZSBST0kgZnJvbSB0b3AgdG8gYm90dG9tLg0KKyAgICBJTUFRX1JFQ1RfQk9UVE9NX1RPUCAgICAgICAgICAgICAgICAgICAgICA9IDMsICAgICAgICAgICAvL1NlYXJjaGVzIHRoZSBST0kgZnJvbSBib3R0b20gdG8gdG9wLg0KKyAgICBJTUFRX0FOTlVMVVNfSU5ORVJfT1VURVIgICAgICAgICAgICAgICAgICA9IDQsICAgICAgICAgICAvL1NlYXJjaGVzIHRoZSBST0kgZnJvbSB0aGUgaW5uZXIgcmFkaXVzIHRvIHRoZSBvdXRlciByYWRpdXMuDQorICAgIElNQVFfQU5OVUxVU19PVVRFUl9JTk5FUiAgICAgICAgICAgICAgICAgID0gNSwgICAgICAgICAgIC8vU2VhcmNoZXMgdGhlIFJPSSBmcm9tIHRoZSBvdXRlciByYWRpdXMgdG8gdGhlIGlubmVyIHJhZGl1cy4NCisgICAgSU1BUV9BTk5VTFVTX1NUQVJUX1NUT1AgICAgICAgICAgICAgICAgICAgPSA2LCAgICAgICAgICAgLy9TZWFyY2hlcyB0aGUgUk9JIGZyb20gc3RhcnQgYW5nbGUgdG8gZW5kIGFuZ2xlLg0KKyAgICBJTUFRX0FOTlVMVVNfU1RPUF9TVEFSVCAgICAgICAgICAgICAgICAgICA9IDcsICAgICAgICAgICAvL1NlYXJjaGVzIHRoZSBST0kgZnJvbSBlbmQgYW5nbGUgdG8gc3RhcnQgYW5nbGUuDQorICAgIElNQVFfRVhUUkFDVF9DT05UT1VSX0RJUkVDVElPTl9TSVpFX0dVQVJEID0gMHhGRkZGRkZGRiAgIA0KK30gRXh0cmFjdENvbnRvdXJEaXJlY3Rpb247DQorDQordHlwZWRlZiBlbnVtIEVkZ2VQb2xhcml0eVNlYXJjaE1vZGVfZW51bSB7DQorICAgIElNQVFfU0VBUkNIX0ZPUl9BTExfRURHRVMgICAgICAgICAgPSAwLCAgICAgICAgICAgLy9TZWFyY2hlcyBmb3IgYWxsIGVkZ2VzLg0KKyAgICBJTUFRX1NFQVJDSF9GT1JfUklTSU5HX0VER0VTICAgICAgID0gMSwgICAgICAgICAgIC8vU2VhcmNoZXMgZm9yIHJpc2luZyBlZGdlcyBvbmx5Lg0KKyAgICBJTUFRX1NFQVJDSF9GT1JfRkFMTElOR19FREdFUyAgICAgID0gMiwgICAgICAgICAgIC8vU2VhcmNoZXMgZm9yIGZhbGxpbmcgZWRnZXMgb25seS4NCisgICAgSU1BUV9FREdFX1BPTEFSSVRZX01PREVfU0laRV9HVUFSRCA9IDB4RkZGRkZGRkYgICANCit9IEVkZ2VQb2xhcml0eVNlYXJjaE1vZGU7DQorDQordHlwZWRlZiBlbnVtIENvbm5lY3Rpdml0eV9lbnVtIHsNCisgICAgSU1BUV9GT1VSX0NPTk5FQ1RFRCAgICAgICAgICA9IDAsICAgICAgICAgICAvL01vcnBob2xvZ2ljYWwgcmVjb25zdHJ1Y3Rpb24gaXMgcGVyZm9ybWVkIGluIGNvbm5lY3Rpdml0eSBtb2RlIDQuDQorICAgIElNQVFfRUlHSFRfQ09OTkVDVEVEICAgICAgICAgPSAxLCAgICAgICAgICAgLy9Nb3JwaG9sb2dpY2FsIHJlY29uc3RydWN0aW9uIGlzIHBlcmZvcm1lZCBpbiBjb25uZWN0aXZpdHkgbW9kZSA4Lg0KKyAgICBJTUFRX0NPTk5FQ1RJVklUWV9TSVpFX0dVQVJEID0gMHhGRkZGRkZGRiAgIA0KK30gQ29ubmVjdGl2aXR5Ow0KKw0KK3R5cGVkZWYgZW51bSBNb3JwaG9sb2d5UmVjb25zdHJ1Y3RPcGVyYXRpb25fZW51bSB7DQorICAgIElNQVFfRElMQVRFX1JFQ09OU1RSVUNUICAgICAgICAgICAgICAgICAgICAgICAgICA9IDAsICAgICAgICAgICAvL1BlcmZvcm1zIFJlY29uc3RydWN0aW9uIGJ5IGRpbGF0aW9uLg0KKyAgICBJTUFRX0VST0RFX1JFQ09OU1RSVUNUICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAxLCAgICAgICAgICAgLy9QZXJmb3JtcyBSZWNvbnN0cnVjdGlvbiBieSBlcm9zaW9uLg0KKyAgICBJTUFRX01PUlBIT0xPR1lfUkVDT05TVFJVQ1RfT1BFUkFUSU9OX1NJWkVfR1VBUkQgPSAweEZGRkZGRkZGICAgDQorfSBNb3JwaG9sb2d5UmVjb25zdHJ1Y3RPcGVyYXRpb247DQorDQordHlwZWRlZiBlbnVtIFdhdmVsZXRUeXBlX2VudW0gew0KKyAgICBJTUFRX0RCMDIgICAgICAgICAgICAgICAgID0gMCwgICAgICAgICAgIA0KKyAgICBJTUFRX0RCMDMgICAgICAgICAgICAgICAgID0gMSwgICAgICAgICAgIA0KKyAgICBJTUFRX0RCMDQgICAgICAgICAgICAgICAgID0gMiwgICAgICAgICAgIC8vU3BlY2lmaWVzIHRoZSBXYXZlbGV0IFR5cGUgYXMgREIwMi4NCisgICAgSU1BUV9EQjA1ICAgICAgICAgICAgICAgICA9IDMsICAgICAgICAgICANCisgICAgSU1BUV9EQjA2ICAgICAgICAgICAgICAgICA9IDQsICAgICAgICAgICANCisgICAgSU1BUV9EQjA3ICAgICAgICAgICAgICAgICA9IDUsICAgICAgICAgICANCisgICAgSU1BUV9EQjA4ICAgICAgICAgICAgICAgICA9IDYsICAgICAgICAgICANCisgICAgSU1BUV9EQjA5ICAgICAgICAgICAgICAgICA9IDcsICAgICAgICAgICANCisgICAgSU1BUV9EQjEwICAgICAgICAgICAgICAgICA9IDgsICAgICAgICAgICANCisgICAgSU1BUV9EQjExICAgICAgICAgICAgICAgICA9IDksICAgICAgICAgICANCisgICAgSU1BUV9EQjEyICAgICAgICAgICAgICAgICA9IDEwLCAgICAgICAgICANCisgICAgSU1BUV9EQjEzICAgICAgICAgICAgICAgICA9IDExLCAgICAgICAgICANCisgICAgSU1BUV9EQjE0ICAgICAgICAgICAgICAgICA9IDEyLCAgICAgICAgICANCisgICAgSU1BUV9IQUFSICAgICAgICAgICAgICAgICA9IDEzLCAgICAgICAgICANCisgICAgSU1BUV9CSU9SMV8zICAgICAgICAgICAgICA9IDE0LCAgICAgICAgICANCisgICAgSU1BUV9CSU9SMV81ICAgICAgICAgICAgICA9IDE1LCAgICAgICAgICANCisgICAgSU1BUV9CSU9SMl8yICAgICAgICAgICAgICA9IDE2LCAgICAgICAgICANCisgICAgSU1BUV9CSU9SMl80ICAgICAgICAgICAgICA9IDE3LCAgICAgICAgICANCisgICAgSU1BUV9CSU9SMl82ICAgICAgICAgICAgICA9IDE4LCAgICAgICAgICANCisgICAgSU1BUV9CSU9SMl84ICAgICAgICAgICAgICA9IDE5LCAgICAgICAgICANCisgICAgSU1BUV9CSU9SM18xICAgICAgICAgICAgICA9IDIwLCAgICAgICAgICANCisgICAgSU1BUV9CSU9SM18zICAgICAgICAgICAgICA9IDIxLCAgICAgICAgICANCisgICAgSU1BUV9CSU9SM181ICAgICAgICAgICAgICA9IDIyLCAgICAgICAgICANCisgICAgSU1BUV9CSU9SM183ICAgICAgICAgICAgICA9IDIzLCAgICAgICAgICANCisgICAgSU1BUV9CSU9SM185ICAgICAgICAgICAgICA9IDI0LCAgICAgICAgICANCisgICAgSU1BUV9CSU9SNF80ICAgICAgICAgICAgICA9IDI1LCAgICAgICAgICANCisgICAgSU1BUV9DT0lGMSAgICAgICAgICAgICAgICA9IDI2LCAgICAgICAgICANCisgICAgSU1BUV9DT0lGMiAgICAgICAgICAgICAgICA9IDI3LCAgICAgICAgICANCisgICAgSU1BUV9DT0lGMyAgICAgICAgICAgICAgICA9IDI4LCAgICAgICAgICANCisgICAgSU1BUV9DT0lGNCAgICAgICAgICAgICAgICA9IDI5LCAgICAgICAgICANCisgICAgSU1BUV9DT0lGNSAgICAgICAgICAgICAgICA9IDMwLCAgICAgICAgICANCisgICAgSU1BUV9TWU0yICAgICAgICAgICAgICAgICA9IDMxLCAgICAgICAgICANCisgICAgSU1BUV9TWU0zICAgICAgICAgICAgICAgICA9IDMyLCAgICAgICAgICANCisgICAgSU1BUV9TWU00ICAgICAgICAgICAgICAgICA9IDMzLCAgICAgICAgICANCisgICAgSU1BUV9TWU01ICAgICAgICAgICAgICAgICA9IDM0LCAgICAgICAgICANCisgICAgSU1BUV9TWU02ICAgICAgICAgICAgICAgICA9IDM1LCAgICAgICAgICANCisgICAgSU1BUV9TWU03ICAgICAgICAgICAgICAgICA9IDM2LCAgICAgICAgICANCisgICAgSU1BUV9TWU04ICAgICAgICAgICAgICAgICA9IDM3LCAgICAgICAgICANCisgICAgSU1BUV9CSU9SNV81ICAgICAgICAgICAgICA9IDM4LCAgICAgICAgICANCisgICAgSU1BUV9CSU9SNl84ICAgICAgICAgICAgICA9IDM5LCAgICAgICAgICANCisgICAgSU1BUV9XQVZFX1RZUEVfU0laRV9HVUFSRCA9IDB4RkZGRkZGRkYgICANCit9IFdhdmVsZXRUeXBlOw0KKw0KK3R5cGVkZWYgZW51bSBQYXJ0aWNsZUNsYXNzaWZpZXJUaHJlc2hvbGRUeXBlX2VudW0gew0KKyAgICBJTUFRX1RIUkVTSE9MRF9NQU5VQUwgPSAwLCAgLy9UaGUgY2xhc3NpZmllciBwZXJmb3JtcyBhIG1hbnVhbCB0aHJlc2hvbGQgb24gdGhlIGltYWdlIGR1cmluZyBwcmVwcm9jZXNzaW5nLg0KKyAgICBJTUFRX1RIUkVTSE9MRF9BVVRPICAgPSAxLCAgLy9UaGUgY2xhc3NpZmllciBwZXJmb3JtcyBhbiBhdXRvIHRocmVzaG9sZCBvbiB0aGUgaW1hZ2UgZHVyaW5nIHByZXByb2Nlc3NpbmcuDQorICAgIElNQVFfVEhSRVNIT0xEX0xPQ0FMICA9IDIsICAvL1RoZSBjbGFzc2lmaWVyIHBlcmZvcm1zIGEgbG9jYWwgdGhyZXNob2xkIG9uIHRoZSBpbWFnZSBkdXJpbmcgcHJlcHJvY2Vzc2luZy4NCit9IFBhcnRpY2xlQ2xhc3NpZmllclRocmVzaG9sZFR5cGU7DQorDQordHlwZWRlZiBlbnVtIE1lYXN1cmVQYXJ0aWNsZXNDYWxpYnJhdGlvbk1vZGVfZW51bSB7DQorICAgIElNQVFfQ0FMSUJSQVRJT05fTU9ERV9QSVhFTCAgICAgICAgICAgICAgICAgICAgICAgID0gMCwgICAgICAgICAgIC8vVGhlIGZ1bmN0aW9uIHRha2VzIG9ubHkgcGl4ZWwgbWVhc3VyZW1lbnRzIG9uIHRoZSBwYXJ0aWNsZXMgaW4gdGhlIGltYWdlLg0KKyAgICBJTUFRX0NBTElCUkFUSU9OX01PREVfQ0FMSUJSQVRFRCAgICAgICAgICAgICAgICAgICA9IDEsICAgICAgICAgICAvL1RoZSBmdW5jdGlvbiB0YWtlcyBvbmx5IGNhbGlicmF0ZWQgbWVhc3VyZW1lbnRzIG9uIHRoZSBwYXJ0aWNsZXMgaW4gdGhlIGltYWdlLg0KKyAgICBJTUFRX0NBTElCUkFUSU9OX01PREVfQk9USCAgICAgICAgICAgICAgICAgICAgICAgICA9IDIsICAgICAgICAgICAvL1RoZSBmdW5jdGlvbiB0YWtlcyBib3RoIHBpeGVsIGFuZCBjYWxpYnJhdGVkIG1lYXN1cmVtZW50cyBvbiB0aGUgcGFydGljbGVzIGluIHRoZSBpbWFnZS4NCisgICAgSU1BUV9NRUFTVVJFX1BBUlRJQ0xFU19DQUxJQlJBVElPTl9NT0RFX1NJWkVfR1VBUkQgPSAweEZGRkZGRkZGICAgDQorfSBNZWFzdXJlUGFydGljbGVzQ2FsaWJyYXRpb25Nb2RlOw0KKw0KK3R5cGVkZWYgZW51bSBHZW9tZXRyaWNNYXRjaGluZ1NlYXJjaFN0cmF0ZWd5X2VudW0gew0KKyAgICBJTUFRX0dFT01FVFJJQ19NQVRDSElOR19DT05TRVJWQVRJVkUgICAgICAgICAgICAgICA9IDAsICAgICAgICAgICAvL0luc3RydWN0cyB0aGUgcGF0dGVybiBtYXRjaGluZyBhbGdvcml0aG0gdG8gdXNlIHRoZSBsYXJnZXN0IHBvc3NpYmxlIGFtb3VudCBvZiBpbmZvcm1hdGlvbiBmcm9tIHRoZSBpbWFnZSBhdCB0aGUgZXhwZW5zZSBvZiBzbG93aW5nIGRvd24gdGhlIHNwZWVkIG9mIHRoZSBhbGdvcml0aG0uDQorICAgIElNQVFfR0VPTUVUUklDX01BVENISU5HX0JBTEFOQ0VEICAgICAgICAgICAgICAgICAgID0gMSwgICAgICAgICAgIC8vSW5zdHJ1Y3RzIHRoZSBwYXR0ZXJuIG1hdGNoaW5nIGFsZ29yaXRobSB0byBiYWxhbmNlIHRoZSBhbW91bnQgb2YgaW5mb3JtYXRpb24gZnJvbSB0aGUgaW1hZ2UgaXQgdXNlcyB3aXRoIHRoZSBzcGVlZCBvZiB0aGUgYWxnb3JpdGhtLg0KKyAgICBJTUFRX0dFT01FVFJJQ19NQVRDSElOR19BR0dSRVNTSVZFICAgICAgICAgICAgICAgICA9IDIsICAgICAgICAgICAvL0luc3RydWN0cyB0aGUgcGF0dGVybiBtYXRjaGluZyBhbGdvcml0aG0gdG8gdXNlIGEgbG93ZXIgYW1vdW50IG9mIGluZm9ybWF0aW9uIGZyb20gdGhlIGltYWdlLCB3aGljaCBhbGxvd3MgdGhlIGFsZ29yaXRobSB0byBydW4gcXVpY2tseSBidXQgYXQgdGhlIGV4cGVuc2Ugb2YgYWNjdXJhY3kuDQorICAgIElNQVFfR0VPTUVUUklDX01BVENISU5HX1NFQVJDSF9TVFJBVEVHWV9TSVpFX0dVQVJEID0gMHhGRkZGRkZGRiAgIA0KK30gR2VvbWV0cmljTWF0Y2hpbmdTZWFyY2hTdHJhdGVneTsNCisNCit0eXBlZGVmIGVudW0gQ29sb3JDbGFzc2lmaWNhdGlvblJlc29sdXRpb25fZW51bSB7DQorICAgIElNQVFfQ0xBU1NJRklFUl9MT1dfUkVTT0xVVElPTiAgICAgICAgPSAwLCAgICAgICAgICAgLy9Mb3cgcmVzb2x1dGlvbiB2ZXJzaW9uIG9mIHRoZSBjb2xvciBjbGFzc2lmaWVyLg0KKyAgICBJTUFRX0NMQVNTSUZJRVJfTUVESVVNX1JFU09MVVRJT04gICAgID0gMSwgICAgICAgICAgIC8vTWVkaXVtIHJlc29sdXRpb24gdmVyc2lvbiBvZiB0aGUgY29sb3IgY2xhc3NpZmllci4NCisgICAgSU1BUV9DTEFTU0lGSUVSX0hJR0hfUkVTT0xVVElPTiAgICAgICA9IDIsICAgICAgICAgICAvL0hpZ2ggcmVzb2x1dGlvbiB2ZXJzaW9uIG9mIHRoZSBjb2xvciBjbGFzc2lmaWVyLg0KKyAgICBJTUFRX0NMQVNTSUZJRVJfUkVTT0xVVElPTl9TSVpFX0dVQVJEID0gMHhGRkZGRkZGRiAgIA0KK30gQ29sb3JDbGFzc2lmaWNhdGlvblJlc29sdXRpb247DQorDQordHlwZWRlZiBlbnVtIENvbm5lY3Rpb25Db25zdHJhaW50VHlwZV9lbnVtIHsNCisgICAgSU1BUV9ESVNUQU5DRV9DT05TVFJBSU5UICAgICAgICAgICAgICA9IDAsICAgICAgICAgICAvL1NwZWNpZmllcyB0aGUgZGlzdGFuY2UsIGluIHBpeGVscywgd2l0aGluIHdoaWNoIHRoZSBlbmQgcG9pbnRzIG9mIHR3byBjdXJ2ZXMgbXVzdCBsaWUgaW4gb3JkZXIgdG8gYmUgY29uc2lkZXJlZCBwYXJ0IG9mIGEgY29udG91ci4NCisgICAgSU1BUV9BTkdMRV9DT05TVFJBSU5UICAgICAgICAgICAgICAgICA9IDEsICAgICAgICAgICAvL1NwZWNpZmllcyB0aGUgcmFuZ2UsIGluIGRlZ3JlZXMsIHdpdGhpbiB3aGljaCB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBhbmdsZSBvZiB0d28gY3VydmVzLCBtZWFzdXJlZCBhdCB0aGUgZW5kIHBvaW50cywgbXVzdCBsaWUgaW4gb3JkZXIgZm9yIHRoZSB0d28gY3VydmVzIHRvIGJlIGNvbnNpZGVyZWQgcGFydCBvZiBhIGNvbnRvdXIuDQorICAgIElNQVFfQ09OTkVDVElWSVRZX0NPTlNUUkFJTlQgICAgICAgICAgPSAyLCAgICAgICAgICAgLy9TcGVjaWZpZXMgdGhlIGRpc3RhbmNlLCBpbiBwaXhlbHMsIHdpdGhpbiB3aGljaCBhIGxpbmUgZXh0ZW5kZWQgZnJvbSB0aGUgZW5kIHBvaW50IG9mIGEgY3VydmUgbXVzdCBwYXNzIHRoZSBlbmQgcG9pbnQgb2YgYW5vdGhlciBjdXJ2ZSBpbiBvcmRlciBmb3IgdGhlIHR3byBjdXJ2ZXMgdG8gYmUgY29uc2lkZXJlZCBwYXJ0IG9mIGEgY29udG91ci4NCisgICAgSU1BUV9HUkFESUVOVF9DT05TVFJBSU5UICAgICAgICAgICAgICA9IDMsICAgICAgICAgICAvL1NwZWNpZmllcyB0aGUgcmFuZ2UsIGluIGRlZ3JlZXMsIHdpdGhpbiB3aGljaCB0aGUgZ3JhZGllbnQgYW5nbGVzIG9mIHR3byBjdXJ2ZXMsIG1lYXN1cmVkIGF0IHRoZSBlbmQgcG9pbnRzLCBtdXN0IGxpZSBpbiBvcmRlciBmb3IgdGhlIHR3byBjdXJ2ZXMgdG8gYmUgY29uc2lkZXJlZCBwYXJ0IG9mIGEgY29udG91ci4NCisgICAgSU1BUV9OVU1fQ09OTkVDVElPTl9DT05TVFJBSU5UX1RZUEVTICA9IDQsICAgICAgICAgICAvLy4NCisgICAgSU1BUV9DT05ORUNUSU9OX0NPTlNUUkFJTlRfU0laRV9HVUFSRCA9IDB4RkZGRkZGRkYgICANCit9IENvbm5lY3Rpb25Db25zdHJhaW50VHlwZTsNCisNCit0eXBlZGVmIGVudW0gQmFyY29kZTJEQ29udHJhc3RfZW51bSB7DQorICAgIElNQVFfQUxMX0JBUkNPREVfMkRfQ09OVFJBU1RTICAgICAgID0gMCwgICAgICAgICAgIC8vVGhlIGZ1bmN0aW9uIHNlYXJjaGVzIGZvciBiYXJjb2RlcyBvZiBlYWNoIGNvbnRyYXN0IHR5cGUuDQorICAgIElNQVFfQkxBQ0tfT05fV0hJVEVfQkFSQ09ERV8yRCAgICAgID0gMSwgICAgICAgICAgIC8vVGhlIGZ1bmN0aW9uIHNlYXJjaGVzIGZvciAyRCBiYXJjb2RlcyBjb250YWluaW5nIGJsYWNrIGRhdGEgb24gYSB3aGl0ZSBiYWNrZ3JvdW5kLg0KKyAgICBJTUFRX1dISVRFX09OX0JMQUNLX0JBUkNPREVfMkQgICAgICA9IDIsICAgICAgICAgICAvL1RoZSBmdW5jdGlvbiBzZWFyY2hlcyBmb3IgMkQgYmFyY29kZXMgY29udGFpbmluZyB3aGl0ZSBkYXRhIG9uIGEgYmxhY2sgYmFja2dyb3VuZC4NCisgICAgSU1BUV9CQVJDT0RFXzJEX0NPTlRSQVNUX1NJWkVfR1VBUkQgPSAweEZGRkZGRkZGICAgDQorfSBCYXJjb2RlMkRDb250cmFzdDsNCisNCit0eXBlZGVmIGVudW0gUVJNb2RlbFR5cGVfZW51bSB7DQorICAgIElNQVFfUVJfTU9ERUxUWVBFX0FVVE9fREVURUNUID0gMCwgICAgICAgICAgIC8vU3BlY2lmaWVzIHRoYXQgdGhlIGZ1bmN0aW9uIHdpbGwgYXV0by1kZXRlY3QgdGhlIHR5cGUgb2YgUVIgY29kZS4NCisgICAgSU1BUV9RUl9NT0RFTFRZUEVfTUlDUk8gICAgICAgPSAxLCAgICAgICAgICAgLy9TcGVjaWZpZXMgdGhlIFFSIGNvZGUgaXMgb2YgYSBtaWNybyB0eXBlLg0KKyAgICBJTUFRX1FSX01PREVMVFlQRV9NT0RFTDEgICAgICA9IDIsICAgICAgICAgICAvL1NwZWNpZmllcyB0aGUgUVIgY29kZSBpcyBvZiBhIG1vZGVsMSB0eXBlLg0KKyAgICBJTUFRX1FSX01PREVMVFlQRV9NT0RFTDIgICAgICA9IDMsICAgICAgICAgICAvL1NwZWNpZmllcyB0aGUgUVIgY29kZSBpcyBvZiBhIG1vZGVsMiB0eXBlLg0KKyAgICBJTUFRX1FSX01PREVMX1RZUEVfU0laRV9HVUFSRCA9IDB4RkZGRkZGRkYgICANCit9IFFSTW9kZWxUeXBlOw0KKw0KK3R5cGVkZWYgZW51bSBXaW5kb3dCYWNrZ3JvdW5kRmlsbFN0eWxlX2VudW0gew0KKyAgICBJTUFRX0ZJTExfU1RZTEVfU09MSUQgICAgICA9IDAsICAgICAgICAgICAvL0ZpbGwgdGhlIGRpc3BsYXkgd2luZG93IHdpdGggYSBzb2xpZCBjb2xvci4NCisgICAgSU1BUV9GSUxMX1NUWUxFX0hBVENIICAgICAgPSAyLCAgICAgICAgICAgLy9GaWxsIHRoZSBkaXNwbGF5IHdpbmRvdyB3aXRoIGEgcGF0dGVybiBkZWZpbmVkIGJ5IFdpbmRvd0JhY2tncm91bmRIYXRjaFN0eWxlLg0KKyAgICBJTUFRX0ZJTExfU1RZTEVfREVGQVVMVCAgICA9IDMsICAgICAgICAgICAvL0ZpbGwgdGhlIGRpc3BsYXkgd2luZG93IHdpdGggdGhlIE5JIFZpc2lvbiBkZWZhdWx0IHBhdHRlcm4uDQorICAgIElNQVFfRklMTF9TVFlMRV9TSVpFX0dVQVJEID0gMHhGRkZGRkZGRiAgIA0KK30gV2luZG93QmFja2dyb3VuZEZpbGxTdHlsZTsNCisNCit0eXBlZGVmIGVudW0gRXh0cmFjdGlvbk1vZGVfZW51bSB7DQorICAgIElNQVFfTk9STUFMX0lNQUdFICAgICAgICAgICAgICAgPSAwLCAgICAgICAgICAgLy9TcGVjaWZpZXMgdGhhdCB0aGUgZnVuY3Rpb24gbWFrZXMgbm8gYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHVuaWZvcm1pdHkgb2Ygb2JqZWN0cyBpbiB0aGUgaW1hZ2Ugb3IgdGhlIGltYWdlIGJhY2tncm91bmQuDQorICAgIElNQVFfVU5JRk9STV9SRUdJT05TICAgICAgICAgICAgPSAxLCAgICAgICAgICAgLy9TcGVjaWZpZXMgdGhhdCB0aGUgZnVuY3Rpb24gYXNzdW1lcyB0aGF0IGVpdGhlciB0aGUgb2JqZWN0cyBpbiB0aGUgaW1hZ2Ugb3IgdGhlIGltYWdlIGJhY2tncm91bmQgY29uc2lzdHMgb2YgdW5pZm9ybSBwaXhlbCB2YWx1ZXMuDQorICAgIElNQVFfRVhUUkFDVElPTl9NT0RFX1NJWkVfR1VBUkQgPSAweEZGRkZGRkZGICAgDQorfSBFeHRyYWN0aW9uTW9kZTsNCisNCit0eXBlZGVmIGVudW0gRWRnZUZpbHRlclNpemVfZW51bSB7DQorICAgIElNQVFfRklORSAgICAgICAgICAgICAgICAgICAgICAgID0gMCwgICAgICAgICAgIC8vU3BlY2lmaWVzIHRoYXQgdGhlIGZ1bmN0aW9uIHVzZXMgYSBmaW5lIChuYXJyb3cpIGVkZ2UgZmlsdGVyLg0KKyAgICBJTUFRX05PUk1BTCAgICAgICAgICAgICAgICAgICAgICA9IDEsICAgICAgICAgICAvL1NwZWNpZmllcyB0aGF0IHRoZSBmdW5jdGlvbiB1c2VzIGEgbm9ybWFsIGVkZ2UgZmlsdGVyLg0KKyAgICBJTUFRX0NPTlRPVVJfVFJBQ0lORyAgICAgICAgICAgICA9IDIsICAgICAgICAgICAvL1NldHMgdGhlIEVkZ2UgRmlsdGVyIFNpemUgdG8gY29udG91ciB0cmFjaW5nLCB3aGljaCBwcm92aWRlcyB0aGUgYmVzdCByZXN1bHRzIGZvciBjb250b3VyIGV4dHJhY3Rpb24gYnV0IGluY3JlYXNlcyB0aGUgdGltZSByZXF1aXJlZCB0byBwcm9jZXNzIHRoZSBpbWFnZS4NCisgICAgSU1BUV9FREdFX0ZJTFRFUl9TSVpFX1NJWkVfR1VBUkQgPSAweEZGRkZGRkZGICAgDQorfSBFZGdlRmlsdGVyU2l6ZTsNCisNCit0eXBlZGVmIGVudW0gQmFyY29kZTJEU2VhcmNoTW9kZV9lbnVtIHsNCisgICAgSU1BUV9TRUFSQ0hfTVVMVElQTEUgICAgICAgICAgICAgICAgICAgPSAwLCAgICAgICAgICAgLy9UaGUgZnVuY3Rpb24gc2VhcmNoZXMgZm9yIG11bHRpcGxlIDJEIGJhcmNvZGVzLg0KKyAgICBJTUFRX1NFQVJDSF9TSU5HTEVfQ09OU0VSVkFUSVZFICAgICAgICA9IDEsICAgICAgICAgICAvL1RoZSBmdW5jdGlvbiBzZWFyY2hlcyBmb3IgMkQgYmFyY29kZXMgdXNpbmcgdGhlIHNhbWUgc2VhcmNoaW5nIGFsZ29yaXRobSBhcyBJTUFRX1NFQVJDSF9NVUxUSVBMRSBidXQgc3RvcHMgc2VhcmNoaW5nIGFmdGVyIGxvY2F0aW5nIG9uZSB2YWxpZCBiYXJjb2RlLg0KKyAgICBJTUFRX1NFQVJDSF9TSU5HTEVfQUdHUkVTU0lWRSAgICAgICAgICA9IDIsICAgICAgICAgICAvL1RoZSBmdW5jdGlvbiBzZWFyY2hlcyBmb3IgYSBzaW5nbGUgMkQgYmFyY29kZSB1c2luZyBhIG1ldGhvZCB0aGF0IGFzc3VtZXMgdGhlIGJhcmNvZGUgb2NjdXBpZXMgYSBtYWpvcml0eSBvZiB0aGUgc2VhcmNoIHJlZ2lvbi4NCisgICAgSU1BUV9CQVJDT0RFXzJEX1NFQVJDSF9NT0RFX1NJWkVfR1VBUkQgPSAweEZGRkZGRkZGICAgDQorfSBCYXJjb2RlMkRTZWFyY2hNb2RlOw0KKw0KK3R5cGVkZWYgZW51bSBEYXRhTWF0cml4U3VidHlwZV9lbnVtIHsNCisgICAgSU1BUV9BTExfREFUQV9NQVRSSVhfU1VCVFlQRVMgICAgICAgICAgICAgPSAwLCAgICAgICAgICAgLy9UaGUgZnVuY3Rpb24gc2VhcmNoZXMgZm9yIERhdGEgTWF0cml4IGJhcmNvZGVzIG9mIGFsbCBzdWJ0eXBlcy4NCisgICAgSU1BUV9EQVRBX01BVFJJWF9TVUJUWVBFU19FQ0NfMDAwX0VDQ18xNDAgPSAxLCAgICAgICAgICAgLy9UaGUgZnVuY3Rpb24gc2VhcmNoZXMgZm9yIERhdGEgTWF0cml4IGJhcmNvZGVzIG9mIHN1YnR5cGVzIEVDQyAwMDAsIEVDQyAwNTAsIEVDQyAwODAsIEVDQyAxMDAgYW5kIEVDQyAxNDAuDQorICAgIElNQVFfREFUQV9NQVRSSVhfU1VCVFlQRV9FQ0NfMjAwICAgICAgICAgID0gMiwgICAgICAgICAgIC8vVGhlIGZ1bmN0aW9uIHNlYXJjaGVzIGZvciBEYXRhIE1hdHJpeCBFQ0MgMjAwIGJhcmNvZGVzLg0KKyAgICBJTUFRX0RBVEFfTUFUUklYX1NVQlRZUEVfU0laRV9HVUFSRCAgICAgICA9IDB4RkZGRkZGRkYgICANCit9IERhdGFNYXRyaXhTdWJ0eXBlOw0KKw0KK3R5cGVkZWYgZW51bSBGZWF0dXJlVHlwZV9lbnVtIHsNCisgICAgSU1BUV9OT1RfRk9VTkRfRkVBVFVSRSAgICAgICAgICAgICAgICAgICA9IDAsICAgICAgICAgICAvL1NwZWNpZmllcyB0aGUgZmVhdHVyZSBpcyBub3QgZm91bmQuDQorICAgIElNQVFfQ0lSQ0xFX0ZFQVRVUkUgICAgICAgICAgICAgICAgICAgICAgPSAxLCAgICAgICAgICAgLy9TcGVjaWZpZXMgdGhlIGZlYXR1cmUgaXMgYSBjaXJjbGUuDQorICAgIElNQVFfRUxMSVBTRV9GRUFUVVJFICAgICAgICAgICAgICAgICAgICAgPSAyLCAgICAgICAgICAgLy9TcGVjaWZpZXMgdGhlIGZlYXR1cmUgaXMgYW4gZWxsaXBzZS4NCisgICAgSU1BUV9DT05TVF9DVVJWRV9GRUFUVVJFICAgICAgICAgICAgICAgICA9IDMsICAgICAgICAgICAvL1NwZWNpZmllcyB0aGUgZmVhdHVyZXMgaXMgYSBjb25zdGFudCBjdXJ2ZS4NCisgICAgSU1BUV9SRUNUQU5HTEVfRkVBVFVSRSAgICAgICAgICAgICAgICAgICA9IDQsICAgICAgICAgICAvL1NwZWNpZmllcyB0aGUgZmVhdHVyZSBpcyBhIHJlY3RhbmdsZS4NCisgICAgSU1BUV9MRUdfRkVBVFVSRSAgICAgICAgICAgICAgICAgICAgICAgICA9IDUsICAgICAgICAgICAvL1NwZWNpZmllcyB0aGUgZmVhdHVyZSBpcyBhIGxlZy4NCisgICAgSU1BUV9DT1JORVJfRkVBVFVSRSAgICAgICAgICAgICAgICAgICAgICA9IDYsICAgICAgICAgICAvL1NwZWNpZmllcyB0aGUgZmVhdHVyZSBpcyBhIGNvcm5lci4NCisgICAgSU1BUV9QQVJBTExFTF9MSU5FX1BBSVJfRkVBVFVSRSAgICAgICAgICA9IDcsICAgICAgICAgICAvL1NwZWNpZmllcyB0aGUgZmVhdHVyZSBpcyBhIHBhcmFsbGVsIGxpbmUgcGFpci4NCisgICAgSU1BUV9QQUlSX09GX1BBUkFMTEVMX0xJTkVfUEFJUlNfRkVBVFVSRSA9IDgsICAgICAgICAgICAvL1NwZWNpZmllcyB0aGUgZmVhdHVyZSBpcyBhIHBhaXIgb2YgcGFyYWxsZWwgbGluZSBwYWlycy4NCisgICAgSU1BUV9MSU5FX0ZFQVRVUkUgICAgICAgICAgICAgICAgICAgICAgICA9IDksICAgICAgICAgICAvL1NwZWNpZmllcyB0aGUgZmVhdHVyZSBpcyBhIGxpbmUuDQorICAgIElNQVFfQ0xPU0VEX0NVUlZFX0ZFQVRVUkUgICAgICAgICAgICAgICAgPSAxMCwgICAgICAgICAgLy9TcGVjaWZpZXMgdGhlIGZlYXR1cmUgaXMgYSBjbG9zZWQgY3VydmUuDQorICAgIElNQVFfRkVBVFVSRV9UWVBFX1NJWkVfR1VBUkQgICAgICAgICAgICAgPSAweEZGRkZGRkZGICAgDQorfSBGZWF0dXJlVHlwZTsNCisNCit0eXBlZGVmIGVudW0gQmFyY29kZTJEQ2VsbFNoYXBlX2VudW0gew0KKyAgICBJTUFRX1NRVUFSRV9DRUxMUyAgICAgICAgICAgICAgICAgICAgID0gMCwgICAgICAgICAgIC8vVGhlIGZ1bmN0aW9uIHVzZXMgYW4gYWxnb3JpdGhtIGZvciBkZWNvZGluZyB0aGUgMkQgYmFyY29kZSB0aGF0IHdvcmtzIHdpdGggc3F1YXJlIGRhdGEgY2VsbHMuDQorICAgIElNQVFfUk9VTkRfQ0VMTFMgICAgICAgICAgICAgICAgICAgICAgPSAxLCAgICAgICAgICAgLy9UaGUgZnVuY3Rpb24gdXNlcyBhbiBhbGdvcml0aG0gZm9yIGRlY29kaW5nIHRoZSAyRCBiYXJjb2RlIHRoYXQgd29ya3Mgd2l0aCByb3VuZCBkYXRhIGNlbGxzLg0KKyAgICBJTUFRX0JBUkNPREVfMkRfQ0VMTF9TSEFQRV9TSVpFX0dVQVJEID0gMHhGRkZGRkZGRiAgIA0KK30gQmFyY29kZTJEQ2VsbFNoYXBlOw0KKw0KK3R5cGVkZWYgZW51bSBMb2NhbFRocmVzaG9sZE1ldGhvZF9lbnVtIHsNCisgICAgSU1BUV9OSUJMQUNLICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAwLCAgICAgICAgICAgLy9UaGUgZnVuY3Rpb24gY29tcHV0ZXMgdGhyZXNob2xkcyBmb3IgZWFjaCBwaXhlbCBiYXNlZCBvbiBpdHMgbG9jYWwgc3RhdGlzdGljcyB1c2luZyB0aGUgTmlibGFjayBsb2NhbCB0aHJlc2hvbGRpbmcgYWxnb3JpdGhtLg0KKyAgICBJTUFRX0JBQ0tHUk9VTkRfQ09SUkVDVElPTiAgICAgICAgICAgICA9IDEsICAgICAgICAgICAvL1RoZSBmdW5jdGlvbiBwZXJmb3JtcyBiYWNrZ3JvdW5kIGNvcnJlY3Rpb24gZmlyc3QgdG8gZWxpbWluYXRlIG5vbi11bmlmb3JtIGxpZ2h0aW5nIGVmZmVjdHMsIHRoZW4gcGVyZm9ybXMgdGhyZXNob2xkaW5nIHVzaW5nIHRoZSBPdHN1IHRocmVzaG9sZGluZyBhbGdvcml0aG0uDQorICAgIElNQVFfTE9DQUxfVEhSRVNIT0xEX01FVEhPRF9TSVpFX0dVQVJEID0gMHhGRkZGRkZGRiAgIA0KK30gTG9jYWxUaHJlc2hvbGRNZXRob2Q7DQorDQordHlwZWRlZiBlbnVtIEJhcmNvZGUyRFR5cGVfZW51bSB7DQorICAgIElNQVFfUERGNDE3ICAgICAgICAgICAgICAgICAgICAgPSAwLCAgICAgICAgICAgLy9UaGUgMkQgYmFyY29kZSBpcyBvZiB0eXBlIFBERjQxNy4NCisgICAgSU1BUV9EQVRBX01BVFJJWF9FQ0NfMDAwICAgICAgICA9IDEsICAgICAgICAgICAvL1RoZSAyRCBiYXJjb2RlIGlzIG9mIHR5cGUgRGF0YSBNYXRyaXggRUNDIDAwMC4NCisgICAgSU1BUV9EQVRBX01BVFJJWF9FQ0NfMDUwICAgICAgICA9IDIsICAgICAgICAgICAvL1RoZSAyRCBiYXJjb2RlIGlzIG9mIHR5cGUgRGF0YSBNYXRyaXggRUNDIDA1MC4NCisgICAgSU1BUV9EQVRBX01BVFJJWF9FQ0NfMDgwICAgICAgICA9IDMsICAgICAgICAgICAvL1RoZSAyRCBiYXJjb2RlIGlzIG9mIHR5cGUgRGF0YSBNYXRyaXggRUNDIDA4MC4NCisgICAgSU1BUV9EQVRBX01BVFJJWF9FQ0NfMTAwICAgICAgICA9IDQsICAgICAgICAgICAvL1RoZSAyRCBiYXJjb2RlIGlzIG9mIHR5cGUgRGF0YSBNYXRyaXggRUNDIDEwMC4NCisgICAgSU1BUV9EQVRBX01BVFJJWF9FQ0NfMTQwICAgICAgICA9IDUsICAgICAgICAgICAvL1RoZSAyRCBiYXJjb2RlIGlzIG9mIHR5cGUgRGF0YSBNYXRyaXggRUNDIDE0MC4NCisgICAgSU1BUV9EQVRBX01BVFJJWF9FQ0NfMjAwICAgICAgICA9IDYsICAgICAgICAgICAvL1RoZSAyRCBiYXJjb2RlIGlzIG9mIHR5cGUgRGF0YSBNYXRyaXggRUNDIDIwMC4NCisgICAgSU1BUV9CQVJDT0RFXzJEX1RZUEVfU0laRV9HVUFSRCA9IDB4RkZGRkZGRkYgICANCit9IEJhcmNvZGUyRFR5cGU7DQorDQordHlwZWRlZiBlbnVtIENsYXNzaWZpZXJFbmdpbmVUeXBlX2VudW0gew0KKyAgICBJTUFRX0VOR0lORV9OT05FICAgICAgICAgICAgICAgICAgICAgICA9IDAsICAgICAgICAgICAvL05vIGVuZ2luZSBoYXMgYmVlbiBzZXQgb24gdGhpcyBjbGFzc2lmaWVyIHNlc3Npb24uDQorICAgIElNQVFfRU5HSU5FX05FQVJFU1RfTkVJR0hCT1IgICAgICAgICAgID0gMSwgICAgICAgICAgIC8vTmVhcmVzdCBuZWlnaGJvciBlbmdpbmUuDQorICAgIElNQVFfRU5HSU5FX1NVUFBPUlRfVkVDVE9SX01BQ0hJTkUgICAgID0gMiwgICAgICAgICAgIA0KKyAgICBJTUFRX0NMQVNTSUZJRVJfRU5HSU5FX1RZUEVfU0laRV9HVUFSRCA9IDB4RkZGRkZGRkYgICANCit9IENsYXNzaWZpZXJFbmdpbmVUeXBlOw0KKw0KK3R5cGVkZWYgZW51bSBDbGFzc2lmaWVyVHlwZV9lbnVtIHsNCisgICAgSU1BUV9DTEFTU0lGSUVSX0NVU1RPTSAgICAgICAgICA9IDAsICAgICAgICAgICAvL1RoZSBjbGFzc2lmaWVyIHNlc3Npb24gY2xhc3NpZmllcyB2ZWN0b3JzIG9mIGRvdWJsZXMuDQorICAgIElNQVFfQ0xBU1NJRklFUl9QQVJUSUNMRSAgICAgICAgPSAxLCAgICAgICAgICAgLy9UaGUgY2xhc3NpZmllciBzZXNzaW9uIGNsYXNzaWZpZXMgcGFydGljbGVzIGluIGJpbmFyeSBpbWFnZXMuDQorICAgIElNQVFfQ0xBU1NJRklFUl9DT0xPUiAgICAgICAgICAgPSAyLCAgICAgICAgICAgLy9UaGUgY2xhc3NpZmllciBzZXNzaW9uIGNsYXNzaWZpZXMgYW4gaW1hZ2UgYmFzZWQgb24gaXRzIGNvbG9yLg0KKyAgICBJTUFRX0NMQVNTSUZJRVJfVEVYVFVSRSAgICAgICAgID0gMywgICAgICAgICAgIC8vVGhlIGNsYXNzaWZpZXIgc2Vzc2lvbiBjbGFzc2lmaWVzIGFuIGltYWdlIGJhc2VkIG9uIGl0cyB0ZXh0dXJlLg0KKyAgICBJTUFRX0NMQVNTSUZJRVJfVFlQRV9TSVpFX0dVQVJEID0gMHhGRkZGRkZGRiAgIA0KK30gQ2xhc3NpZmllclR5cGU7DQorDQordHlwZWRlZiBlbnVtIFBhcnRpY2xlVHlwZV9lbnVtIHsNCisgICAgSU1BUV9QQVJUSUNMRV9CUklHSFQgICAgICAgICAgPSAwLCAgICAgICAgICAgLy9CcmlnaHQgcGFydGljbGVzLg0KKyAgICBJTUFRX1BBUlRJQ0xFX0RBUksgICAgICAgICAgICA9IDEsICAgICAgICAgICAvL0RhcmsgcGFydGljbGVzLg0KKyAgICBJTUFRX1BBUlRJQ0xFX1RZUEVfU0laRV9HVUFSRCA9IDB4RkZGRkZGRkYgICANCit9IFBhcnRpY2xlVHlwZTsNCisNCit0eXBlZGVmIGVudW0gVmlzaW9uSW5mb1R5cGUyX2VudW0gew0KKyAgICBJTUFRX1ZJU0lPTklORk9fQ0FMSUJSQVRJT04gICAgICAgID0gMHgwMSwgICAgICAgIC8vVXNlZCB0byBpbmRpY2F0ZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBDYWxpYnJhdGlvbiBpbmZvcm1hdGlvbiBpbiBhbiBpbWFnZS4NCisgICAgSU1BUV9WSVNJT05JTkZPX09WRVJMQVkgICAgICAgICAgICA9IDB4MDIsICAgICAgICAvL1VzZWQgdG8gaW5kaWNhdGUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgT3ZlcmxheSBpbmZvcm1hdGlvbiBpbiBhbiBpbWFnZS4NCisgICAgSU1BUV9WSVNJT05JTkZPX0dSQVlURU1QTEFURSAgICAgICA9IDB4MDQsICAgICAgICAvL1VzZWQgdG8gaW5kaWNhdGUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgZ3JheXNjYWxlIHRlbXBsYXRlIGluZm9ybWF0aW9uIGluIGFuIGltYWdlLg0KKyAgICBJTUFRX1ZJU0lPTklORk9fQ09MT1JURU1QTEFURSAgICAgID0gMHgwOCwgICAgICAgIC8vVXNlZCB0byBpbmRpY2F0ZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBjb2xvciB0ZW1wbGF0ZSBpbmZvcm1hdGlvbiBpbiBhbiBpbWFnZS4NCisgICAgSU1BUV9WSVNJT05JTkZPX0dFT01FVFJJQ1RFTVBMQVRFICA9IDB4MTAsICAgICAgICAvL1VzZWQgdG8gaW5kaWNhdGUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgZ2VvbWV0cmljIHRlbXBsYXRlIGluZm9ybWF0aW9uIGluIGFuIGltYWdlLg0KKyAgICBJTUFRX1ZJU0lPTklORk9fQ1VTVE9NREFUQSAgICAgICAgID0gMHgyMCwgICAgICAgIC8vVXNlZCB0byBpbmRpY2F0ZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBiaW5hcnkgb3IgdGV4dCBDdXN0b20gRGF0YSBpbiBhbiBpbWFnZS4NCisgICAgSU1BUV9WSVNJT05JTkZPX0dPTERFTlRFTVBMQVRFICAgICA9IDB4NDAsICAgICAgICAvL1VzZWQgdG8gaW5kaWNhdGUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgZ29sZGVuIHRlbXBsYXRlIGluZm9ybWF0aW9uIGluIGFuIGltYWdlLg0KKyAgICBJTUFRX1ZJU0lPTklORk9fR0VPTUVUUklDVEVNUExBVEUyID0gMHg4MCwgICAgICAgIC8vVXNlZCB0byBpbmRpY2F0ZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBnZW9tZXRyaWMgdGVtcGxhdGUgMiBpbmZvcm1hdGlvbiBpbiBhbiBpbWFnZS4NCisgICAgSU1BUV9WSVNJT05JTkZPX0FMTCAgICAgICAgICAgICAgICA9IDB4RkZGRkZGRkYsICAvL1JlbW92ZXMsIGNoZWNrcyBmb3IsIG9yIGluZGljYXRlcyB0aGUgcHJlc2VuY2Ugb2YgYWxsIHR5cGVzIG9mIGV4dHJhIGluZm9ybWF0aW9uIGluIGFuIGltYWdlLg0KK30gVmlzaW9uSW5mb1R5cGUyOw0KKw0KK3R5cGVkZWYgZW51bSBSZWFkQ2xhc3NpZmllckZpbGVNb2RlX2VudW0gew0KKyAgICBJTUFRX0NMQVNTSUZJRVJfUkVBRF9BTEwgICAgICAgICAgICAgICAgICAgPSAwLCAgICAgICAgICAgLy9SZWFkIGFsbCBpbmZvcm1hdGlvbiBmcm9tIHRoZSBjbGFzc2lmaWVyIGZpbGUuDQorICAgIElNQVFfQ0xBU1NJRklFUl9SRUFEX1NBTVBMRVMgICAgICAgICAgICAgICA9IDEsICAgICAgICAgICAvL1JlYWQgb25seSB0aGUgc2FtcGxlcyBmcm9tIHRoZSBjbGFzc2lmaWVyIGZpbGUuDQorICAgIElNQVFfQ0xBU1NJRklFUl9SRUFEX1BST1BFUlRJRVMgICAgICAgICAgICA9IDIsICAgICAgICAgICAvL1JlYWQgb25seSB0aGUgcHJvcGVydGllcyBmcm9tIHRoZSBjbGFzc2lmaWVyIGZpbGUuDQorICAgIElNQVFfUkVBRF9DTEFTU0lGSUVSX0ZJTEVfTU9ERVNfU0laRV9HVUFSRCA9IDB4RkZGRkZGRkYgICANCit9IFJlYWRDbGFzc2lmaWVyRmlsZU1vZGU7DQorDQordHlwZWRlZiBlbnVtIFdyaXRlQ2xhc3NpZmllckZpbGVNb2RlX2VudW0gew0KKyAgICBJTUFRX0NMQVNTSUZJRVJfV1JJVEVfQUxMICAgICAgICAgICAgICAgICAgID0gMCwgICAgICAgICAgIC8vV3JpdGVzIGFsbCBpbmZvcm1hdGlvbiB0byB0aGUgY2xhc3NpZmllciBmaWxlLg0KKyAgICBJTUFRX0NMQVNTSUZJRVJfV1JJVEVfQ0xBU1NJRllfT05MWSAgICAgICAgID0gMSwgICAgICAgICAgIC8vV3JpdGUgb25seSB0aGUgaW5mb3JtYXRpb24gbmVlZGVkIHRvIGNsYXNzaWZ5IHRvIHRoZSBjbGFzc2lmaWVyIGZpbGUuDQorICAgIElNQVFfV1JJVEVfQ0xBU1NJRklFUl9GSUxFX01PREVTX1NJWkVfR1VBUkQgPSAweEZGRkZGRkZGICAgDQorfSBXcml0ZUNsYXNzaWZpZXJGaWxlTW9kZTsNCisNCit0eXBlZGVmIGVudW0gQmFyY29kZTJEU2hhcGVfZW51bSB7DQorICAgIElNQVFfU1FVQVJFX0JBUkNPREVfMkQgICAgICAgICAgID0gMCwgICAgICAgICAgIC8vVGhlIGZ1bmN0aW9uIHNlYXJjaGVzIGZvciBzcXVhcmUgMkQgYmFyY29kZXMuDQorICAgIElNQVFfUkVDVEFOR1VMQVJfQkFSQ09ERV8yRCAgICAgID0gMSwgICAgICAgICAgIC8vVGhlIGZ1bmN0aW9uIHNlYXJjaGVzIGZvciByZWN0YW5ndWxhciAyRCBiYXJjb2Rlcy4NCisgICAgSU1BUV9CQVJDT0RFXzJEX1NIQVBFX1NJWkVfR1VBUkQgPSAweEZGRkZGRkZGICAgDQorfSBCYXJjb2RlMkRTaGFwZTsNCisNCit0eXBlZGVmIGVudW0gRGF0YU1hdHJpeFJvdGF0aW9uTW9kZV9lbnVtIHsNCisgICAgSU1BUV9VTkxJTUlURURfUk9UQVRJT04gICAgICAgICAgICAgICAgICAgPSAwLCAgICAgICAgICAgLy9UaGUgZnVuY3Rpb24gYWxsb3dzIGZvciB1bmxpbWl0ZWQgcm90YXRpb24uDQorICAgIElNQVFfMF9ERUdSRUVTICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMSwgICAgICAgICAgIC8vVGhlIGZ1bmN0aW9uIGFsbG93cyBmb3IgYmV0d2VlbiAtNSBhbmQgNSBkZWdyZWVzIG9mIHJvdGF0aW9uLg0KKyAgICBJTUFRXzkwX0RFR1JFRVMgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDIsICAgICAgICAgICAvL1RoZSBmdW5jdGlvbiBhbGxvd3MgZm9yIGJldHdlZW4gODUgYW5kIDk1IGRlZ3JlZXMgb2Ygcm90YXRpb24uDQorICAgIElNQVFfMTgwX0RFR1JFRVMgICAgICAgICAgICAgICAgICAgICAgICAgID0gMywgICAgICAgICAgIC8vVGhlIGZ1bmN0aW9uIGFsbG93cyBmb3IgYmV0d2VlbiAxNzUgYW5kIDE4NSBkZWdyZWVzIG9mIHJvdGF0aW9uLg0KKyAgICBJTUFRXzI3MF9ERUdSRUVTICAgICAgICAgICAgICAgICAgICAgICAgICA9IDQsICAgICAgICAgICAvL1RoZSBmdW5jdGlvbiBhbGxvd3MgZm9yIGJldHdlZW4gMjY1IGFuZCAyNzUgZGVncmVlcyBvZiByb3RhdGlvbi4NCisgICAgSU1BUV9EQVRBX01BVFJJWF9ST1RBVElPTl9NT0RFX1NJWkVfR1VBUkQgPSAweEZGRkZGRkZGICAgDQorfSBEYXRhTWF0cml4Um90YXRpb25Nb2RlOw0KKw0KK3R5cGVkZWYgZW51bSBBSU1HcmFkZV9lbnVtIHsNCisgICAgSU1BUV9BSU1fR1JBREVfRiAgICAgICAgICAgICAgICAgICAgICA9IDAsICAgICAgICAgICAvL1RoZSBEYXRhIE1hdHJpeCBiYXJjb2RlIHJlY2VpdmVkIGEgZ3JhZGUgb2YgRi4NCisgICAgSU1BUV9BSU1fR1JBREVfRCAgICAgICAgICAgICAgICAgICAgICA9IDEsICAgICAgICAgICAvL1RoZSBEYXRhIE1hdHJpeCBiYXJjb2RlIHJlY2VpdmVkIGEgZ3JhZGUgb2YgRC4NCisgICAgSU1BUV9BSU1fR1JBREVfQyAgICAgICAgICAgICAgICAgICAgICA9IDIsICAgICAgICAgICAvL1RoZSBEYXRhIE1hdHJpeCBiYXJjb2RlIHJlY2VpdmVkIGEgZ3JhZGUgb2YgQy4NCisgICAgSU1BUV9BSU1fR1JBREVfQiAgICAgICAgICAgICAgICAgICAgICA9IDMsICAgICAgICAgICAvL1RoZSBEYXRhIE1hdHJpeCBiYXJjb2RlIHJlY2VpdmVkIGEgZ3JhZGUgb2YgQi4NCisgICAgSU1BUV9BSU1fR1JBREVfQSAgICAgICAgICAgICAgICAgICAgICA9IDQsICAgICAgICAgICAvL1RoZSBEYXRhIE1hdHJpeCBiYXJjb2RlIHJlY2VpdmVkIGEgZ3JhZGUgb2YgQS4NCisgICAgSU1BUV9EQVRBX01BVFJJWF9BSU1fR1JBREVfU0laRV9HVUFSRCA9IDB4RkZGRkZGRkYgICANCit9IEFJTUdyYWRlOw0KKw0KK3R5cGVkZWYgZW51bSBEYXRhTWF0cml4Q2VsbEZpbGxNb2RlX2VudW0gew0KKyAgICBJTUFRX0FVVE9fREVURUNUX0NFTExfRklMTF9NT0RFICAgICAgICAgICAgPSAtMiwgICAgICAgICAgLy9TZXRzIHRoZSBmdW5jdGlvbiB0byBkZXRlcm1pbmUgdGhlIERhdGEgTWF0cml4IGJhcmNvZGUgY2VsbCBmaWxsIHBlcmNlbnRhZ2UgYXV0b21hdGljYWxseS4NCisgICAgSU1BUV9MT1dfRklMTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMCwgICAgICAgICAgIC8vU2V0cyB0aGUgZnVuY3Rpb24gdG8gcmVhZCBEYXRhIE1hdHJpeCBiYXJjb2RlcyB3aXRoIGEgY2VsbCBmaWxsIHBlcmNlbnRhZ2Ugb2YgbGVzcyB0aGFuIDMwIHBlcmNlbnQuDQorICAgIElNQVFfTk9STUFMX0ZJTEwgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDEsICAgICAgICAgICAvL1NldHMgdGhlIGZ1bmN0aW9uIHRvIHJlYWQgRGF0YSBNYXRyaXggYmFyY29kZXMgd2l0aCBhIGNlbGwgZmlsbCBwZXJjZW50YWdlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAzMCBwZXJjZW50Lg0KKyAgICBJTUFRX0RBVEFfTUFUUklYX0NFTExfRklMTF9NT0RFX1NJWkVfR1VBUkQgPSAweEZGRkZGRkZGICAgDQorfSBEYXRhTWF0cml4Q2VsbEZpbGxNb2RlOw0KKw0KK3R5cGVkZWYgZW51bSBEYXRhTWF0cml4RGVtb2R1bGF0aW9uTW9kZV9lbnVtIHsNCisgICAgSU1BUV9BVVRPX0RFVEVDVF9ERU1PRFVMQVRJT05fTU9ERSAgICAgICAgICAgID0gLTIsICAgICAgICAgIC8vVGhlIGZ1bmN0aW9uIHdpbGwgdHJ5IGVhY2ggZGVtb2R1bGF0aW9uIG1vZGUgYW5kIHVzZSB0aGUgb25lIHdoaWNoIGRlY29kZXMgdGhlIERhdGEgTWF0cml4IGJhcmNvZGUgd2l0aGluIHRoZSBmZXdlc3QgaXRlcmF0aW9ucyBhbmQgdXRpbGl6aW5nIHRoZSBsZWFzdCBhbW91bnQgb2YgZXJyb3IgY29ycmVjdGlvbi4NCisgICAgSU1BUV9ISVNUT0dSQU0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMCwgICAgICAgICAgIC8vVGhlIGZ1bmN0aW9uIHVzZXMgYSBoaXN0b2dyYW0gb2YgYWxsIG9mIHRoZSBEYXRhIE1hdHJpeCBjZWxscyB0byBjYWxjdWxhdGUgYSB0aHJlc2hvbGQuDQorICAgIElNQVFfTE9DQUxfQ09OVFJBU1QgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDEsICAgICAgICAgICAvL1RoZSBmdW5jdGlvbiBleGFtaW5lcyBlYWNoIG9mIHRoZSBjZWxsJ3MgbmVpZ2hib3JzIHRvIGRldGVybWluZSBpZiB0aGUgY2VsbCBpcyBvbiBvciBvZmYuDQorICAgIElNQVFfQ09NQklORUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDIsICAgICAgICAgICAvL1RoZSBmdW5jdGlvbiB1c2VzIHRoZSBoaXN0b2dyYW0gb2YgdGhlIERhdGEgTWF0cml4IGJhcmNvZGUgdG8gY2FsY3VsYXRlIGEgdGhyZXNob2xkLg0KKyAgICBJTUFRX0FMTF9ERU1PRFVMQVRJT05fTU9ERVMgICAgICAgICAgICAgICAgICAgPSAzLCAgICAgICAgICAgLy9UaGUgZnVuY3Rpb24gdHJpZXMgSU1BUV9ISVNUT0dSQU0sIHRoZW4gSU1BUV9MT0NBTF9DT05UUkFTVCBhbmQgdGhlbiBJTUFRX0NPTUJJTkFUSU9OLCBzdG9wcGluZyBvbmNlIG9uZSBtb2RlIGlzIHN1Y2Nlc3NmdWwuDQorICAgIElNQVFfREFUQV9NQVRSSVhfREVNT0RVTEFUSU9OX01PREVfU0laRV9HVUFSRCA9IDB4RkZGRkZGRkYgICANCit9IERhdGFNYXRyaXhEZW1vZHVsYXRpb25Nb2RlOw0KKw0KK3R5cGVkZWYgZW51bSBEYXRhTWF0cml4RUNDX2VudW0gew0KKyAgICBJTUFRX0FVVE9fREVURUNUX0VDQyAgICAgICAgICAgID0gLTIsICAgICAgICAgIC8vU2V0cyB0aGUgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIHRoZSBEYXRhIE1hdHJpeCBiYXJjb2RlIEVDQyBhdXRvbWF0aWNhbGx5Lg0KKyAgICBJTUFRX0VDQ18wMDAgICAgICAgICAgICAgICAgICAgID0gMCwgICAgICAgICAgIC8vU2V0cyB0aGUgZnVuY3Rpb24gdG8gcmVhZCBEYXRhIE1hdHJpeCBiYXJjb2RlcyBvZiBFQ0MgMDAwIG9ubHkuDQorICAgIElNQVFfRUNDXzA1MCAgICAgICAgICAgICAgICAgICAgPSA1MCwgICAgICAgICAgLy9TZXRzIHRoZSBmdW5jdGlvbiB0byByZWFkIERhdGEgTWF0cml4IGJhcmNvZGVzIG9mIEVDQyAwNTAgb25seS4NCisgICAgSU1BUV9FQ0NfMDgwICAgICAgICAgICAgICAgICAgICA9IDgwLCAgICAgICAgICAvL1NldHMgdGhlIGZ1bmN0aW9uIHRvIHJlYWQgRGF0YSBNYXRyaXggYmFyY29kZXMgb2YgRUNDIDA4MCBvbmx5Lg0KKyAgICBJTUFRX0VDQ18xMDAgICAgICAgICAgICAgICAgICAgID0gMTAwLCAgICAgICAgIC8vU2V0cyB0aGUgZnVuY3Rpb24gdG8gcmVhZCBEYXRhIE1hdHJpeCBiYXJjb2RlcyBvZiBFQ0MgMTAwIG9ubHkuDQorICAgIElNQVFfRUNDXzE0MCAgICAgICAgICAgICAgICAgICAgPSAxNDAsICAgICAgICAgLy9TZXRzIHRoZSBmdW5jdGlvbiB0byByZWFkIERhdGEgTWF0cml4IGJhcmNvZGVzIG9mIEVDQyAxNDAgb25seS4NCisgICAgSU1BUV9FQ0NfMDAwXzE0MCAgICAgICAgICAgICAgICA9IDE5MCwgICAgICAgICAvL1NldHMgdGhlIGZ1bmN0aW9uIHRvIHJlYWQgRGF0YSBNYXRyaXggYmFyY29kZXMgb2YgRUNDIDAwMCwgRUNDIDA1MCwgRUNDIDA4MCwgRUNDIDEwMCwgYW5kIEVDQyAxNDAgb25seS4NCisgICAgSU1BUV9FQ0NfMjAwICAgICAgICAgICAgICAgICAgICA9IDIwMCwgICAgICAgICAvL1NldHMgdGhlIGZ1bmN0aW9uIHRvIHJlYWQgRGF0YSBNYXRyaXggYmFyY29kZXMgb2YgRUNDIDIwMCBvbmx5Lg0KKyAgICBJTUFRX0RBVEFfTUFUUklYX0VDQ19TSVpFX0dVQVJEID0gMHhGRkZGRkZGRiAgIA0KK30gRGF0YU1hdHJpeEVDQzsNCisNCit0eXBlZGVmIGVudW0gRGF0YU1hdHJpeFBvbGFyaXR5X2VudW0gew0KKyAgICBJTUFRX0FVVE9fREVURUNUX1BPTEFSSVRZICAgICAgICAgICAgPSAtMiwgICAgICAgICAgLy9TZXRzIHRoZSBmdW5jdGlvbiB0byBkZXRlcm1pbmUgdGhlIERhdGEgTWF0cml4IGJhcmNvZGUgcG9sYXJpdHkgYXV0b21hdGljYWxseS4NCisgICAgSU1BUV9CTEFDS19EQVRBX09OX1dISVRFX0JBQ0tHUk9VTkQgID0gMCwgICAgICAgICAgIC8vU2V0cyB0aGUgZnVuY3Rpb24gdG8gcmVhZCBEYXRhIE1hdHJpeCBiYXJjb2RlcyB3aXRoIGRhcmsgZGF0YSBvbiBhIGJyaWdodCBiYWNrZ3JvdW5kLg0KKyAgICBJTUFRX1dISVRFX0RBVEFfT05fQkxBQ0tfQkFDS0dST1VORCAgPSAxLCAgICAgICAgICAgLy9TZXRzIHRoZSBmdW5jdGlvbiB0byByZWFkIERhdGEgTWF0cml4IGJhcmNvZGVzIHdpdGggYnJpZ2h0IGRhdGEgb24gYSBkYXJrIGJhY2tncm91bmQuDQorICAgIElNQVFfREFUQV9NQVRSSVhfUE9MQVJJVFlfU0laRV9HVUFSRCA9IDB4RkZGRkZGRkYgICANCit9IERhdGFNYXRyaXhQb2xhcml0eTsNCisNCit0eXBlZGVmIGVudW0gRGF0YU1hdHJpeENlbGxGaWx0ZXJNb2RlX2VudW0gew0KKyAgICBJTUFRX0FVVE9fREVURUNUX0NFTExfRklMVEVSX01PREUgICAgICAgICAgICA9IC0yLCAgICAgICAgICAvL1RoZSBmdW5jdGlvbiB3aWxsIHRyeSBhbGwgZmlsdGVyIG1vZGVzIGFuZCB1c2VzIHRoZSBvbmUgdGhhdCBkZWNvZGVzIHRoZSBEYXRhIE1hdHJpeCBiYXJjb2RlIHdpdGhpbiB0aGUgZmV3ZXN0IGl0ZXJhdGlvbnMgYW5kIHV0aWxpemluZyB0aGUgbGVhc3QgYW1vdW50IG9mIGVycm9yIGNvcnJlY3Rpb24uDQorICAgIElNQVFfQVZFUkFHRV9GSUxURVIgICAgICAgICAgICAgICAgICAgICAgICAgID0gMCwgICAgICAgICAgIC8vVGhlIGZ1bmN0aW9uIHNldHMgdGhlIHBpeGVsIHZhbHVlIGZvciB0aGUgY2VsbCB0byB0aGUgYXZlcmFnZSBvZiB0aGUgc2FtcGxlZCBwaXhlbHMuDQorICAgIElNQVFfTUVESUFOX0ZJTFRFUiAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMSwgICAgICAgICAgIC8vVGhlIGZ1bmN0aW9uIHNldHMgdGhlIHBpeGVsIHZhbHVlIGZvciB0aGUgY2VsbCB0byB0aGUgbWVkaWFuIG9mIHRoZSBzYW1wbGVkIHBpeGVscy4NCisgICAgSU1BUV9DRU5UUkFMX0FWRVJBR0VfRklMVEVSICAgICAgICAgICAgICAgICAgPSAyLCAgICAgICAgICAgLy9UaGUgZnVuY3Rpb24gc2V0cyB0aGUgcGl4ZWwgdmFsdWUgZm9yIHRoZSBjZWxsIHRvIHRoZSBhdmVyYWdlIG9mIHRoZSBwaXhlbHMgaW4gdGhlIGNlbnRlciBvZiB0aGUgY2VsbCBzYW1wbGUuDQorICAgIElNQVFfSElHSF9BVkVSQUdFX0ZJTFRFUiAgICAgICAgICAgICAgICAgICAgID0gMywgICAgICAgICAgIC8vVGhlIGZ1bmN0aW9uIHNldHMgdGhlIHBpeGVsIHZhbHVlIGZvciB0aGUgY2VsbCB0byB0aGUgYXZlcmFnZSB2YWx1ZSBvZiB0aGUgaGFsZiBvZiB0aGUgc2FtcGxlZCBwaXhlbHMgd2l0aCB0aGUgaGlnaGVzdCBwaXhlbCB2YWx1ZXMuDQorICAgIElNQVFfTE9XX0FWRVJBR0VfRklMVEVSICAgICAgICAgICAgICAgICAgICAgID0gNCwgICAgICAgICAgIC8vVGhlIGZ1bmN0aW9uIHNldHMgdGhlIHBpeGVsIHZhbHVlIGZvciB0aGUgY2VsbCB0byB0aGUgYXZlcmFnZSB2YWx1ZSBvZiB0aGUgaGFsZiBvZiB0aGUgc2FtcGxlZCBwaXhlbHMgd2l0aCB0aGUgbG93ZXN0IHBpeGVsIHZhbHVlcy4NCisgICAgSU1BUV9WRVJZX0hJR0hfQVZFUkFHRV9GSUxURVIgICAgICAgICAgICAgICAgPSA1LCAgICAgICAgICAgLy9UaGUgZnVuY3Rpb24gc2V0cyB0aGUgcGl4ZWwgdmFsdWUgZm9yIHRoZSBjZWxsIHRvIHRoZSBhdmVyYWdlIHZhbHVlIG9mIHRoZSBuaW50aCBvZiB0aGUgc2FtcGxlZCBwaXhlbHMgd2l0aCB0aGUgaGlnaGVzdCBwaXhlbCB2YWx1ZXMuDQorICAgIElNQVFfVkVSWV9MT1dfQVZFUkFHRV9GSUxURVIgICAgICAgICAgICAgICAgID0gNiwgICAgICAgICAgIC8vVGhlIGZ1bmN0aW9uIHNldHMgdGhlIHBpeGVsIHZhbHVlIGZvciB0aGUgY2VsbCB0byB0aGUgYXZlcmFnZSB2YWx1ZSBvZiB0aGUgbmludGggb2YgdGhlIHNhbXBsZWQgcGl4ZWxzIHdpdGggdGhlIGxvd2VzdCBwaXhlbCB2YWx1ZXMuDQorICAgIElNQVFfQUxMX0NFTExfRklMVEVSUyAgICAgICAgICAgICAgICAgICAgICAgID0gOCwgICAgICAgICAgIC8vVGhlIGZ1bmN0aW9uIHRyaWVzIGVhY2ggZmlsdGVyIG1vZGUsIHN0YXJ0aW5nIHdpdGggSU1BUV9BVkVSQUdFX0ZJTFRFUiBhbmQgZW5kaW5nIHdpdGggSU1BUV9WRVJZX0xPV19BVkVSQUdFX0ZJTFRFUiwgc3RvcHBpbmcgb25jZSBhIGZpbHRlciBtb2RlIGRlY29kZXMgY29ycmVjdGx5Lg0KKyAgICBJTUFRX0RBVEFfTUFUUklYX0NFTExfRklMVEVSX01PREVfU0laRV9HVUFSRCA9IDB4RkZGRkZGRkYgICANCit9IERhdGFNYXRyaXhDZWxsRmlsdGVyTW9kZTsNCisNCit0eXBlZGVmIGVudW0gV2luZG93QmFja2dyb3VuZEhhdGNoU3R5bGVfZW51bSB7DQorICAgIElNQVFfSEFUQ0hfU1RZTEVfSE9SSVpPTlRBTCAgICAgICAgPSAwLCAgICAgICAgICAgLy9UaGUgYmFja2dyb3VuZCBvZiB0aGUgZGlzcGxheSB3aW5kb3cgd2lsbCBiZSBob3Jpem9udGFsIGJhcnMuDQorICAgIElNQVFfSEFUQ0hfU1RZTEVfVkVSVElDQUwgICAgICAgICAgPSAxLCAgICAgICAgICAgLy9UaGUgYmFja2dyb3VuZCBvZiB0aGUgZGlzcGxheSB3aW5kb3cgd2lsbCBiZSB2ZXJ0aWNhbCBiYXJzLg0KKyAgICBJTUFRX0hBVENIX1NUWUxFX0ZPUldBUkRfRElBR09OQUwgID0gMiwgICAgICAgICAgIC8vVGhlIGJhY2tncm91bmQgb2YgdGhlIGRpc3BsYXkgd2luZG93IHdpbGwgYmUgZGlhZ29uYWwgYmFycy4NCisgICAgSU1BUV9IQVRDSF9TVFlMRV9CQUNLV0FSRF9ESUFHT05BTCA9IDMsICAgICAgICAgICAvL1RoZSBiYWNrZ3JvdW5kIG9mIHRoZSBkaXNwbGF5IHdpbmRvdyB3aWxsIGJlIGRpYWdvbmFsIGJhcnMuDQorICAgIElNQVFfSEFUQ0hfU1RZTEVfQ1JPU1MgICAgICAgICAgICAgPSA0LCAgICAgICAgICAgLy9UaGUgYmFja2dyb3VuZCBvZiB0aGUgZGlzcGxheSB3aW5kb3cgd2lsbCBiZSBpbnRlcnNlY3RpbmcgaG9yaXpvbnRhbCBhbmQgdmVydGljYWwgYmFycy4NCisgICAgSU1BUV9IQVRDSF9TVFlMRV9DUk9TU19IQVRDSCAgICAgICA9IDUsICAgICAgICAgICAvL1RoZSBiYWNrZ3JvdW5kIG9mIHRoZSBkaXNwbGF5IHdpbmRvdyB3aWxsIGJlIGludGVyc2VjdGluZyBmb3J3YXJkIGFuZCBiYWNrd2FyZCBkaWFnb25hbCBiYXJzLg0KKyAgICBJTUFRX0hBVENIX1NUWUxFX1NJWkVfR1VBUkQgICAgICAgID0gMHhGRkZGRkZGRiAgIA0KK30gV2luZG93QmFja2dyb3VuZEhhdGNoU3R5bGU7DQorDQordHlwZWRlZiBlbnVtIERhdGFNYXRyaXhNaXJyb3JNb2RlX2VudW0gew0KKyAgICBJTUFRX0FVVE9fREVURUNUX01JUlJPUiAgICAgICAgICAgICAgICAgPSAtMiwgICAgICAgICAgLy9TcGVjaWZpZXMgdGhhdCB0aGUgZnVuY3Rpb24gc2hvdWxkIGRldGVybWluZSBpZiB0aGUgRGF0YSBNYXRyaXggYmFyY29kZSBpcyBtaXJyb3JlZC4NCisgICAgSU1BUV9BUFBFQVJTX05PUk1BTCAgICAgICAgICAgICAgICAgICAgID0gMCwgICAgICAgICAgIC8vU3BlY2lmaWVzIHRoYXQgdGhlIGZ1bmN0aW9uIHNob3VsZCBleHBlY3QgdGhlIERhdGEgTWF0cml4IGJhcmNvZGUgdG8gYXBwZWFyIG5vcm1hbC4NCisgICAgSU1BUV9BUFBFQVJTX01JUlJPUkVEICAgICAgICAgICAgICAgICAgID0gMSwgICAgICAgICAgIC8vU3BlY2lmaWVzIHRoYXQgdGhlIGZ1bmN0aW9uIHNob3VsZCBleHBlY3QgdGhlIERhdGEgTWF0cml4IGJhcmNvZGUgdG8gYXBwZWFyIG1pcnJvcmVkLg0KKyAgICBJTUFRX0RBVEFfTUFUUklYX01JUlJPUl9NT0RFX1NJWkVfR1VBUkQgPSAweEZGRkZGRkZGICAgDQorfSBEYXRhTWF0cml4TWlycm9yTW9kZTsNCisNCit0eXBlZGVmIGVudW0gQ2FsaWJyYXRpb25Nb2RlMl9lbnVtIHsNCisgICAgSU1BUV9QRVJTUEVDVElWRV9NT0RFICAgICAgICAgICAgID0gMCwgICAgICAgICAgIC8vRnVuY3Rpb25zIGNvcnJlY3QgZm9yIGRpc3RvcnRpb24gY2F1c2VkIGJ5IHRoZSBjYW1lcmEncyBwZXJzcGVjdGl2ZS4NCisgICAgSU1BUV9NSUNST1BMQU5FX01PREUgICAgICAgICAgICAgID0gMSwgICAgICAgICAgIC8vRnVuY3Rpb25zIGNvcnJlY3QgZm9yIGRpc3RvcnRpb24gY2F1c2VkIGJ5IHRoZSBjYW1lcmEncyBsZW5zLg0KKyAgICBJTUFRX1NJTVBMRV9DQUxJQlJBVElPTl9NT0RFICAgICAgPSAyLCAgICAgICAgICAgLy9GdW5jdGlvbnMgZG8gbm90IGNvcnJlY3QgZm9yIGRpc3RvcnRpb24uDQorICAgIElNQVFfQ09SUkVDVEVEX0lNQUdFX01PREUgICAgICAgICA9IDMsICAgICAgICAgICAvL1RoZSBpbWFnZSBpcyBhbHJlYWR5IGNvcnJlY3RlZC4NCisgICAgSU1BUV9OT19DQUxJQlJBVElPTl9NT0RFICAgICAgICAgID0gNCwgICAgICAgICAgIC8vSW1hZ2Ugd2l0aCBObyBjYWxpYnJhdGlvbi4NCisgICAgSU1BUV9DQUxJQlJBVElPTl9NT0RFMl9TSVpFX0dVQVJEID0gMHhGRkZGRkZGRiAgIA0KK30gQ2FsaWJyYXRpb25Nb2RlMjsNCisNCit0eXBlZGVmIGVudW0gRGF0YU1hdHJpeEdyYWRpbmdNb2RlX2VudW0gew0KKyAgICBJTUFRX05PX0dSQURJTkcgICAgICAgICAgICAgICAgICAgICAgICAgID0gMCwgICAgICAgICAgIC8vVGhlIGZ1bmN0aW9uIGRvZXMgbm90IG1ha2UgYW55IHByZXBhcmF0b3J5IGNhbGN1bGF0aW9ucy4NCisgICAgSU1BUV9QUkVQQVJFX0ZPUl9BSU0gICAgICAgICAgICAgICAgICAgICA9IDEsICAgICAgICAgICAvL1RoZSBmdW5jdGlvbiBwcmVwYXJlcyB0aGUgaW1hZ2UgZm9yIGdyYWRpbmcgdXNpbmcgdGhlIEFJTSBQcmludCBRdWFsaXR5IG1ldHJpY3MuDQorICAgIElNQVFfREFUQV9NQVRSSVhfR1JBRElOR19NT0RFX1NJWkVfR1VBUkQgPSAweEZGRkZGRkZGICAgDQorfSBEYXRhTWF0cml4R3JhZGluZ01vZGU7DQorDQordHlwZWRlZiBlbnVtIFdhdmVsZXRUcmFuc2Zvcm1Nb2RlX2VudW0gew0KKyAgICBJTUFRX1dBVkVMRVRfVFJBTlNGT1JNX0lOVEVHRVIgICAgICAgICA9IDAsICAgICAgICAgICAvL1VzZXMgYSA1LTMgcmV2ZXJzaWJsZSBpbnRlZ2VyIHRyYW5zZm9ybS4NCisgICAgSU1BUV9XQVZFTEVUX1RSQU5TRk9STV9GTE9BVElOR19QT0lOVCAgPSAxLCAgICAgICAgICAgLy9QZXJmb3JtcyBhIDktNyBpcnJldmVyc2libGUgZmxvYXRpbmctcG9pbnQgdHJhbnNmb3JtLg0KKyAgICBJTUFRX1dBVkVMRVRfVFJBTlNGT1JNX01PREVfU0laRV9HVUFSRCA9IDB4RkZGRkZGRkYgICANCit9IFdhdmVsZXRUcmFuc2Zvcm1Nb2RlOw0KKw0KK3R5cGVkZWYgZW51bSBOb3JtYWxpemF0aW9uTWV0aG9kX2VudW0gew0KKyAgICBJTUFRX05PUk1BTElaQVRJT05fTk9ORSAgICAgICAgICAgICAgID0gMCwgICAgICAgICAgIC8vTm8gbm9ybWFsaXphdGlvbi4NCisgICAgSU1BUV9OT1JNQUxJWkFUSU9OX0hJU1RPR1JBTV9NQVRDSElORyA9IDEsICAgICAgICAgICAvL0FkanVzdCBpbWFnZSBzbyBpdHMgaGlzdG9ncmFtIGlzIHNpbWlsYXIgdG8gdGhlIGdvbGRlbiB0ZW1wbGF0ZSdzIGhpc3RvZ3JhbS4NCisgICAgSU1BUV9OT1JNQUxJWkFUSU9OX0FWRVJBR0VfTUFUQ0hJTkcgICA9IDIsICAgICAgICAgICAvL0FkanVzdCBpbWFnZSBzbyBpdHMgbWVhbiBwaXhlbCB2YWx1ZSBlcXVhbHMgdGhlIGdvbGRlbiB0ZW1wbGF0ZSdzIG1lYW4gcGl4ZWwgdmFsdWUuDQorICAgIElNQVFfTk9STUFMSVpBVElPTl9TSVpFX0dVQVJEICAgICAgICAgPSAweEZGRkZGRkZGICAgDQorfSBOb3JtYWxpemF0aW9uTWV0aG9kOw0KKw0KK3R5cGVkZWYgZW51bSBSZWdpc3RyYXRpb25NZXRob2RfZW51bSB7DQorICAgIElNQVFfUkVHSVNUUkFUSU9OX05PTkUgICAgICAgID0gMCwgICAgICAgICAgIC8vTm8gcmVnaXN0cmF0aW9uLg0KKyAgICBJTUFRX1JFR0lTVFJBVElPTl9QRVJTUEVDVElWRSA9IDEsICAgICAgICAgICAvL0FkanVzdCBpbWFnZSB0byBjb3JyZWN0IGZvciBtaW5vciB2YXJpYXRpb25zIGluIGFsaWdubWVudCBvciBwZXJzcGVjdGl2ZS4NCisgICAgSU1BUV9SRUdJU1RSQVRJT05fU0laRV9HVUFSRCAgPSAweEZGRkZGRkZGICAgDQorfSBSZWdpc3RyYXRpb25NZXRob2Q7DQorDQordHlwZWRlZiBlbnVtIExpbmVhckF2ZXJhZ2VzTW9kZV9lbnVtIHsNCisgICAgSU1BUV9DT0xVTU5fQVZFUkFHRVMgICAgICAgICAgICAgICAgID0gMSwgICAgICAgICAgIC8vU3BlY2lmaWVzIHRoYXQgdGhlIGZ1bmN0aW9uIGNhbGN1bGF0ZXMgdGhlIG1lYW4gcGl4ZWwgdmFsdWUgb2YgZWFjaCBjb2x1bW4uDQorICAgIElNQVFfUk9XX0FWRVJBR0VTICAgICAgICAgICAgICAgICAgICA9IDIsICAgICAgICAgICAvL1NwZWNpZmllcyB0aGF0IHRoZSBmdW5jdGlvbiBjYWxjdWxhdGVzIHRoZSBtZWFuIHBpeGVsIHZhbHVlIG9mIGVhY2ggcm93Lg0KKyAgICBJTUFRX1JJU0lOR19ESUFHT05BTF9BVkVSQUdFUyAgICAgICAgPSA0LCAgICAgICAgICAgLy9TcGVjaWZpZXMgdGhhdCB0aGUgZnVuY3Rpb24gY2FsY3VsYXRlcyB0aGUgbWVhbiBwaXhlbCB2YWx1ZSBvZiBlYWNoIGRpYWdvbmFsIHJ1bm5pbmcgZnJvbSB0aGUgbG93ZXIgbGVmdCB0byB0aGUgdXBwZXIgcmlnaHQgb2YgdGhlIGluc3BlY3RlZCBhcmVhIG9mIHRoZSBpbWFnZS4NCisgICAgSU1BUV9GQUxMSU5HX0RJQUdPTkFMX0FWRVJBR0VTICAgICAgID0gOCwgICAgICAgICAgIC8vU3BlY2lmaWVzIHRoYXQgdGhlIGZ1bmN0aW9uIGNhbGN1bGF0ZXMgdGhlIG1lYW4gcGl4ZWwgdmFsdWUgb2YgZWFjaCBkaWFnb25hbCBydW5uaW5nIGZyb20gdGhlIHVwcGVyIGxlZnQgdG8gdGhlIGxvd2VyIHJpZ2h0IG9mIHRoZSBpbnNwZWN0ZWQgYXJlYSBvZiB0aGUgaW1hZ2UuDQorICAgIElNQVFfQUxMX0xJTkVBUl9BVkVSQUdFUyAgICAgICAgICAgICA9IDE1LCAgICAgICAgICAvL1NwZWNpZmllcyB0aGF0IHRoZSBmdW5jdGlvbiBjYWxjdWxhdGVzIGFsbCBmb3VyIGxpbmVhciBtZWFuIHBpeGVsIHZhbHVlcy4NCisgICAgSU1BUV9MSU5FQVJfQVZFUkFHRVNfTU9ERV9TSVpFX0dVQVJEID0gMHhGRkZGRkZGRiAgIA0KK30gTGluZWFyQXZlcmFnZXNNb2RlOw0KKw0KK3R5cGVkZWYgZW51bSBDb21wcmVzc2lvblR5cGVfZW51bSB7DQorICAgIElNQVFfQ09NUFJFU1NJT05fTk9ORSAgICAgICAgICAgID0gMCwgICAgICAgICAgIC8vU3BlY2lmaWVzIHRoYXQgdGhlIGZ1bmN0aW9uIHNob3VsZCBub3QgY29tcHJlc3MgdGhlIGltYWdlLg0KKyAgICBJTUFRX0NPTVBSRVNTSU9OX0pQRUcgICAgICAgICAgICA9IDEsICAgICAgICAgICAvL1NwZWNpZmllcyB0aGF0IHRoZSBmdW5jdGlvbiBzaG91bGQgdXNlIGxvc3N5IEpQRUcgY29tcHJlc3Npb24gb24gdGhlIGltYWdlLg0KKyAgICBJTUFRX0NPTVBSRVNTSU9OX1BBQ0tFRF9CSU5BUlkgICA9IDIsICAgICAgICAgICAvL1NwZWNpZmllcyB0aGF0IHRoZSBmdW5jdGlvbiBzaG91bGQgdXNlIGxvc3NsZXNzIGJpbmFyeSBwYWNraW5nIG9uIHRoZSBpbWFnZS4NCisgICAgSU1BUV9DT01QUkVTU0lPTl9UWVBFX1NJWkVfR1VBUkQgPSAweEZGRkZGRkZGICAgDQorfSBDb21wcmVzc2lvblR5cGU7DQorDQordHlwZWRlZiBlbnVtIEZsYXR0ZW5UeXBlX2VudW0gew0KKyAgICBJTUFRX0ZMQVRURU5fSU1BR0UgICAgICAgICAgICAgICAgID0gMCwgICAgICAgICAgIC8vRmxhdHRlbnMganVzdCB0aGUgaW1hZ2UgZGF0YS4NCisgICAgSU1BUV9GTEFUVEVOX0lNQUdFX0FORF9WSVNJT05fSU5GTyA9IDEsICAgICAgICAgICAvL0ZsYXR0ZW5zIHRoZSBpbWFnZSBkYXRhIGFuZCBhbnkgVmlzaW9uIGluZm9ybWF0aW9uIGFzc29jaWF0ZWQgd2l0aCB0aGUgaW1hZ2UuDQorICAgIElNQVFfRkxBVFRFTl9UWVBFX1NJWkVfR1VBUkQgICAgICAgPSAweEZGRkZGRkZGICAgDQorfSBGbGF0dGVuVHlwZTsNCisNCit0eXBlZGVmIGVudW0gRGF0YU1hdHJpeENlbGxTYW1wbGVTaXplX2VudW0gew0KKyAgICBJTUFRX0FVVE9fREVURUNUX0NFTExfU0FNUExFX1NJWkUgICAgICAgICAgICA9IC0yLCAgICAgICAgICAvL1RoZSBmdW5jdGlvbiB3aWxsIHRyeSBlYWNoIHNhbXBsZSBzaXplIGFuZCB1c2UgdGhlIG9uZSB3aGljaCBkZWNvZGVzIHRoZSBEYXRhIE1hdHJpeCBiYXJjb2RlIHdpdGhpbiB0aGUgZmV3ZXN0IGl0ZXJhdGlvbnMgYW5kIHV0aWxpemluZyB0aGUgbGVhc3QgYW1vdW50IG9mIGVycm9yIGNvcnJlY3Rpb24uDQorICAgIElNQVFfMXgxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMSwgICAgICAgICAgIC8vVGhlIGZ1bmN0aW9uIHdpbGwgdXNlIGEgMXgxIHNpemVkIHNhbXBsZSBmcm9tIGVhY2ggY2VsbC4NCisgICAgSU1BUV8yeDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAyLCAgICAgICAgICAgLy9UaGUgZnVuY3Rpb24gd2lsbCB1c2UgYSAyeDIgc2l6ZWQgc2FtcGxlIGZyb20gZWFjaCBjZWxsLg0KKyAgICBJTUFRXzN4MyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDMsICAgICAgICAgICAvL1RoZSBmdW5jdGlvbiB3aWxsIHVzZSBhIDN4MyBzaXplZCBzYW1wbGUgZnJvbSBlYWNoIGNlbGwuDQorICAgIElNQVFfNHg0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gNCwgICAgICAgICAgIC8vVGhlIGZ1bmN0aW9uIHdpbGwgdXNlIGEgNHg0IHNpemVkIHNhbXBsZSBmcm9tIGVhY2ggY2VsbC4NCisgICAgSU1BUV81eDUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSA1LCAgICAgICAgICAgLy9UaGUgZnVuY3Rpb24gd2lsbCB1c2UgYSA1eDUgc2l6ZWQgc2FtcGxlIGZyb20gZWFjaCBjZWxsLg0KKyAgICBJTUFRXzZ4NiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDYsICAgICAgICAgICAvL1RoZSBmdW5jdGlvbiB3aWxsIHVzZSBhIDZ4NiBzaXplZCBzYW1wbGUgZnJvbSBlYWNoIGNlbGwuDQorICAgIElNQVFfN3g3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gNywgICAgICAgICAgIC8vVGhlIGZ1bmN0aW9uIHdpbGwgdXNlIGEgN3g3IHNpemVkIHNhbXBsZSBmcm9tIGVhY2ggY2VsbC4NCisgICAgSU1BUV9EQVRBX01BVFJJWF9DRUxMX1NBTVBMRV9TSVpFX1NJWkVfR1VBUkQgPSAweEZGRkZGRkZGICAgDQorfSBEYXRhTWF0cml4Q2VsbFNhbXBsZVNpemU7DQorDQorDQorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorLy8gIEZvcndhcmQgRGVjbGFyZSBEYXRhIFN0cnVjdHVyZXMNCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCit0eXBlZGVmIHN0cnVjdCBJbWFnZV9zdHJ1Y3QgSW1hZ2U7DQordHlwZWRlZiBzdHJ1Y3QgUk9JX3N0cnVjdCBST0k7DQordHlwZWRlZiBzdHJ1Y3QgT3ZlcmxheV9zdHJ1Y3QgT3ZlcmxheTsNCit0eXBlZGVmIHN0cnVjdCBDbGFzc2lmaWVyU2Vzc2lvbl9zdHJ1Y3QgQ2xhc3NpZmllclNlc3Npb247DQordHlwZWRlZiBzdHJ1Y3QgTXVsdGlwbGVHZW9tZXRyaWNQYXR0ZXJuX3N0cnVjdCBNdWx0aXBsZUdlb21ldHJpY1BhdHRlcm47DQordHlwZWRlZiBpbnQgQ29udG91cklEOw0KK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBTRVNTSU9OX0lEOw0KK3R5cGVkZWYgaW50CUFWSVNlc3Npb247DQordHlwZWRlZiBjaGFyKiBGaWx0ZXJOYW1lOw0KK3R5cGVkZWYgY2hhciBTdHJpbmcyNTVbMjU2XTsNCit0eXBlZGVmIHN0cnVjdCBDaGFyU2V0X3N0cnVjdCBDaGFyU2V0Ow0KK3R5cGVkZWYgc3RydWN0IE9DUlNwYWNpbmdPcHRpb25zX3N0cnVjdCBPQ1JTcGFjaW5nT3B0aW9uczsNCit0eXBlZGVmIHN0cnVjdCBPQ1JQcm9jZXNzaW5nT3B0aW9uc19zdHJ1Y3QgT0NSUHJvY2Vzc2luZ09wdGlvbnM7DQordHlwZWRlZiBzdHJ1Y3QgUmVhZFRleHRPcHRpb25zX3N0cnVjdCBSZWFkVGV4dE9wdGlvbnM7DQordHlwZWRlZiBzdHJ1Y3QgQ2hhckluZm9fc3RydWN0IENoYXJJbmZvOw0KK3R5cGVkZWYgc3RydWN0IENoYXJSZXBvcnRfc3RydWN0IENoYXJSZXBvcnQ7DQordHlwZWRlZiBzdHJ1Y3QgUmVhZFRleHRSZXBvcnRfc3RydWN0IFJlYWRUZXh0UmVwb3J0Ow0KK3R5cGVkZWYgc3RydWN0IERpdmlzaW9uTW9kZWxfc3RydWN0IERpdmlzaW9uTW9kZWw7DQordHlwZWRlZiBzdHJ1Y3QgRm9jYWxMZW5ndGhfc3RydWN0IEZvY2FsTGVuZ3RoOw0KK3R5cGVkZWYgc3RydWN0IFBvbHlNb2RlbF9zdHJ1Y3QgUG9seU1vZGVsOw0KK3R5cGVkZWYgc3RydWN0IERpc3RvcnRpb25Nb2RlbFBhcmFtc19zdHJ1Y3QgRGlzdG9ydGlvbk1vZGVsUGFyYW1zOw0KK3R5cGVkZWYgc3RydWN0IFBvaW50RmxvYXRfc3RydWN0IFBvaW50RmxvYXQ7DQordHlwZWRlZiBzdHJ1Y3QgSW50ZXJuYWxQYXJhbWV0ZXJzX3N0cnVjdCBJbnRlcm5hbFBhcmFtZXRlcnM7DQordHlwZWRlZiBzdHJ1Y3QgTWF4R3JpZFNpemVfc3RydWN0IE1heEdyaWRTaXplOw0KK3R5cGVkZWYgc3RydWN0IEltYWdlU2l6ZV9zdHJ1Y3QgSW1hZ2VTaXplOw0KK3R5cGVkZWYgc3RydWN0IENhbGlicmF0aW9uUmVmZXJlbmNlUG9pbnRzX3N0cnVjdCBDYWxpYnJhdGlvblJlZmVyZW5jZVBvaW50czsNCit0eXBlZGVmIHN0cnVjdCBHZXRDYW1lcmFQYXJhbWV0ZXJzUmVwb3J0X3N0cnVjdCBHZXRDYW1lcmFQYXJhbWV0ZXJzUmVwb3J0Ow0KK3R5cGVkZWYgc3RydWN0IENhbGlicmF0aW9uQXhpc0luZm9fc3RydWN0IENhbGlicmF0aW9uQXhpc0luZm87DQordHlwZWRlZiBzdHJ1Y3QgQ2FsaWJyYXRpb25MZWFyblNldHVwSW5mb19zdHJ1Y3QgQ2FsaWJyYXRpb25MZWFyblNldHVwSW5mbzsNCit0eXBlZGVmIHN0cnVjdCBHcmlkRGVzY3JpcHRvcl9zdHJ1Y3QgR3JpZERlc2NyaXB0b3I7DQordHlwZWRlZiBzdHJ1Y3QgRXJyb3JTdGF0aXN0aWNzX3N0cnVjdCBFcnJvclN0YXRpc3RpY3M7DQordHlwZWRlZiBzdHJ1Y3QgR2V0Q2FsaWJyYXRpb25JbmZvUmVwb3J0X3N0cnVjdCBHZXRDYWxpYnJhdGlvbkluZm9SZXBvcnQ7DQordHlwZWRlZiBzdHJ1Y3QgRWRnZVBvbGFyaXR5X3N0cnVjdCBFZGdlUG9sYXJpdHk7DQordHlwZWRlZiBzdHJ1Y3QgQ2xhbXBTZXR0aW5nc19zdHJ1Y3QgQ2xhbXBTZXR0aW5nczsNCit0eXBlZGVmIHN0cnVjdCBQb2ludERvdWJsZV9zdHJ1Y3QgUG9pbnREb3VibGU7DQordHlwZWRlZiBzdHJ1Y3QgUG9pbnREb3VibGVQYWlyX3N0cnVjdCBQb2ludERvdWJsZVBhaXI7DQordHlwZWRlZiBzdHJ1Y3QgQ2xhbXBSZXN1bHRzX3N0cnVjdCBDbGFtcFJlc3VsdHM7DQordHlwZWRlZiBzdHJ1Y3QgQ2xhbXBQb2ludHNfc3RydWN0IENsYW1wUG9pbnRzOw0KK3R5cGVkZWYgc3RydWN0IFJHQlZhbHVlX3N0cnVjdCBSR0JWYWx1ZTsNCit0eXBlZGVmIHN0cnVjdCBDbGFtcE92ZXJsYXlTZXR0aW5nc19zdHJ1Y3QgQ2xhbXBPdmVybGF5U2V0dGluZ3M7DQordHlwZWRlZiBzdHJ1Y3QgQ2xhbXBNYXgyUmVwb3J0X3N0cnVjdCBDbGFtcE1heDJSZXBvcnQ7DQordHlwZWRlZiBzdHJ1Y3QgQ29udG91ckZpdFNwbGluZVJlcG9ydF9zdHJ1Y3QgQ29udG91ckZpdFNwbGluZVJlcG9ydDsNCit0eXBlZGVmIHN0cnVjdCBMaW5lRmxvYXRfc3RydWN0IExpbmVGbG9hdDsNCit0eXBlZGVmIHN0cnVjdCBMaW5lRXF1YXRpb25fc3RydWN0IExpbmVFcXVhdGlvbjsNCit0eXBlZGVmIHN0cnVjdCBDb250b3VyRml0TGluZVJlcG9ydF9zdHJ1Y3QgQ29udG91ckZpdExpbmVSZXBvcnQ7DQordHlwZWRlZiBzdHJ1Y3QgQ29udG91ckZpdFBvbHlub21pYWxSZXBvcnRfc3RydWN0IENvbnRvdXJGaXRQb2x5bm9taWFsUmVwb3J0Ow0KK3R5cGVkZWYgc3RydWN0IFBhcnRpYWxDaXJjbGVfc3RydWN0IFBhcnRpYWxDaXJjbGU7DQordHlwZWRlZiBzdHJ1Y3QgUGFydGlhbEVsbGlwc2Vfc3RydWN0IFBhcnRpYWxFbGxpcHNlOw0KK3R5cGVkZWYgc3RydWN0IFNldHVwTWF0Y2hQYXR0ZXJuRGF0YV9zdHJ1Y3QgU2V0dXBNYXRjaFBhdHRlcm5EYXRhOw0KK3R5cGVkZWYgc3RydWN0IFJhbmdlU2V0dGluZ0RvdWJsZV9zdHJ1Y3QgUmFuZ2VTZXR0aW5nRG91YmxlOw0KK3R5cGVkZWYgc3RydWN0IEdlb21ldHJpY0FkdmFuY2VkU2V0dXBEYXRhT3B0aW9uX3N0cnVjdCBHZW9tZXRyaWNBZHZhbmNlZFNldHVwRGF0YU9wdGlvbjsNCit0eXBlZGVmIHN0cnVjdCBDb250b3VySW5mb1JlcG9ydF9zdHJ1Y3QgQ29udG91ckluZm9SZXBvcnQ7DQordHlwZWRlZiBzdHJ1Y3QgUk9JTGFiZWxfc3RydWN0IFJPSUxhYmVsOw0KK3R5cGVkZWYgc3RydWN0IFN1cGVydmlzZWRDb2xvclNlZ21lbnRhdGlvblJlcG9ydF9zdHJ1Y3QgU3VwZXJ2aXNlZENvbG9yU2VnbWVudGF0aW9uUmVwb3J0Ow0KK3R5cGVkZWYgc3RydWN0IExhYmVsVG9ST0lSZXBvcnRfc3RydWN0IExhYmVsVG9ST0lSZXBvcnQ7DQordHlwZWRlZiBzdHJ1Y3QgQ29sb3JTZWdtZW5hdGlvbk9wdGlvbnNfc3RydWN0IENvbG9yU2VnbWVuYXRpb25PcHRpb25zOw0KK3R5cGVkZWYgc3RydWN0IENsYXNzaWZpZWRDdXJ2ZV9zdHJ1Y3QgQ2xhc3NpZmllZEN1cnZlOw0KK3R5cGVkZWYgc3RydWN0IFJhbmdlRG91YmxlX3N0cnVjdCBSYW5nZURvdWJsZTsNCit0eXBlZGVmIHN0cnVjdCBSYW5nZUxhYmVsX3N0cnVjdCBSYW5nZUxhYmVsOw0KK3R5cGVkZWYgc3RydWN0IEN1cnZhdHVyZUFuYWx5c2lzUmVwb3J0X3N0cnVjdCBDdXJ2YXR1cmVBbmFseXNpc1JlcG9ydDsNCit0eXBlZGVmIHN0cnVjdCBEaXNwYXJpdHlfc3RydWN0IERpc3Bhcml0eTsNCit0eXBlZGVmIHN0cnVjdCBDb21wdXRlRGlzdGFuY2VzUmVwb3J0X3N0cnVjdCBDb21wdXRlRGlzdGFuY2VzUmVwb3J0Ow0KK3R5cGVkZWYgc3RydWN0IE1hdGNoTW9kZV9zdHJ1Y3QgTWF0Y2hNb2RlOw0KK3R5cGVkZWYgc3RydWN0IENsYXNzaWZpZWREaXNwYXJpdHlfc3RydWN0IENsYXNzaWZpZWREaXNwYXJpdHk7DQordHlwZWRlZiBzdHJ1Y3QgQ2xhc3NpZnlEaXN0YW5jZXNSZXBvcnRfc3RydWN0IENsYXNzaWZ5RGlzdGFuY2VzUmVwb3J0Ow0KK3R5cGVkZWYgc3RydWN0IENvbnRvdXJDb21wdXRlQ3VydmF0dXJlUmVwb3J0X3N0cnVjdCBDb250b3VyQ29tcHV0ZUN1cnZhdHVyZVJlcG9ydDsNCit0eXBlZGVmIHN0cnVjdCBDb250b3VyT3ZlcmxheVNldHRpbmdzX3N0cnVjdCBDb250b3VyT3ZlcmxheVNldHRpbmdzOw0KK3R5cGVkZWYgc3RydWN0IEN1cnZlUGFyYW1ldGVyc19zdHJ1Y3QgQ3VydmVQYXJhbWV0ZXJzOw0KK3R5cGVkZWYgc3RydWN0IEV4dHJhY3RDb250b3VyUmVwb3J0X3N0cnVjdCBFeHRyYWN0Q29udG91clJlcG9ydDsNCit0eXBlZGVmIHN0cnVjdCBDb25uZWN0aW9uQ29uc3RyYWludF9zdHJ1Y3QgQ29ubmVjdGlvbkNvbnN0cmFpbnQ7DQordHlwZWRlZiBzdHJ1Y3QgRXh0cmFjdFRleHR1cmVGZWF0dXJlc1JlcG9ydF9zdHJ1Y3QgRXh0cmFjdFRleHR1cmVGZWF0dXJlc1JlcG9ydDsNCit0eXBlZGVmIHN0cnVjdCBXYXZlbGV0QmFuZHNSZXBvcnRfc3RydWN0IFdhdmVsZXRCYW5kc1JlcG9ydDsNCit0eXBlZGVmIHN0cnVjdCBDaXJjbGVGaXRPcHRpb25zX3N0cnVjdCBDaXJjbGVGaXRPcHRpb25zOw0KK3R5cGVkZWYgc3RydWN0IEVkZ2VPcHRpb25zMl9zdHJ1Y3QgRWRnZU9wdGlvbnMyOw0KK3R5cGVkZWYgc3RydWN0IEZpbmRDaXJjdWxhckVkZ2VPcHRpb25zX3N0cnVjdCBGaW5kQ2lyY3VsYXJFZGdlT3B0aW9uczsNCit0eXBlZGVmIHN0cnVjdCBGaW5kQ29uY2VudHJpY0VkZ2VPcHRpb25zX3N0cnVjdCBGaW5kQ29uY2VudHJpY0VkZ2VPcHRpb25zOw0KK3R5cGVkZWYgc3RydWN0IENvbmNlbnRyaWNFZGdlRml0T3B0aW9uc19zdHJ1Y3QgQ29uY2VudHJpY0VkZ2VGaXRPcHRpb25zOw0KK3R5cGVkZWYgc3RydWN0IEZpbmRDb25jZW50cmljRWRnZVJlcG9ydF9zdHJ1Y3QgRmluZENvbmNlbnRyaWNFZGdlUmVwb3J0Ow0KK3R5cGVkZWYgc3RydWN0IEZpbmRDaXJjdWxhckVkZ2VSZXBvcnRfc3RydWN0IEZpbmRDaXJjdWxhckVkZ2VSZXBvcnQ7DQordHlwZWRlZiBzdHJ1Y3QgV2luZG93U2l6ZV9zdHJ1Y3QgV2luZG93U2l6ZTsNCit0eXBlZGVmIHN0cnVjdCBEaXNwbGFjZW1lbnRWZWN0b3Jfc3RydWN0IERpc3BsYWNlbWVudFZlY3RvcjsNCit0eXBlZGVmIHN0cnVjdCBXYXZlbGV0T3B0aW9uc19zdHJ1Y3QgV2F2ZWxldE9wdGlvbnM7DQordHlwZWRlZiBzdHJ1Y3QgQ29vY2N1cnJlbmNlT3B0aW9uc19zdHJ1Y3QgQ29vY2N1cnJlbmNlT3B0aW9uczsNCit0eXBlZGVmIHN0cnVjdCBQYXJ0aWNsZUNsYXNzaWZpZXJMb2NhbFRocmVzaG9sZE9wdGlvbnNfc3RydWN0IFBhcnRpY2xlQ2xhc3NpZmllckxvY2FsVGhyZXNob2xkT3B0aW9uczsNCit0eXBlZGVmIHN0cnVjdCBSYW5nZUZsb2F0X3N0cnVjdCBSYW5nZUZsb2F0Ow0KK3R5cGVkZWYgc3RydWN0IFBhcnRpY2xlQ2xhc3NpZmllckF1dG9UaHJlc2hvbGRPcHRpb25zX3N0cnVjdCBQYXJ0aWNsZUNsYXNzaWZpZXJBdXRvVGhyZXNob2xkT3B0aW9uczsNCit0eXBlZGVmIHN0cnVjdCBQYXJ0aWNsZUNsYXNzaWZpZXJQcmVwcm9jZXNzaW5nT3B0aW9uczJfc3RydWN0IFBhcnRpY2xlQ2xhc3NpZmllclByZXByb2Nlc3NpbmdPcHRpb25zMjsNCit0eXBlZGVmIHN0cnVjdCBNZWFzdXJlUGFydGljbGVzUmVwb3J0X3N0cnVjdCBNZWFzdXJlUGFydGljbGVzUmVwb3J0Ow0KK3R5cGVkZWYgc3RydWN0IEdlb21ldHJpY1BhdHRlcm5NYXRjaDNfc3RydWN0IEdlb21ldHJpY1BhdHRlcm5NYXRjaDM7DQordHlwZWRlZiBzdHJ1Y3QgTWF0Y2hHZW9tZXRyaWNQYXR0ZXJuQWR2YW5jZWRPcHRpb25zM19zdHJ1Y3QgTWF0Y2hHZW9tZXRyaWNQYXR0ZXJuQWR2YW5jZWRPcHRpb25zMzsNCit0eXBlZGVmIHN0cnVjdCBDb2xvck9wdGlvbnNfc3RydWN0IENvbG9yT3B0aW9uczsNCit0eXBlZGVmIHN0cnVjdCBTYW1wbGVTY29yZV9zdHJ1Y3QgU2FtcGxlU2NvcmU7DQordHlwZWRlZiBzdHJ1Y3QgQ2xhc3NpZmllclJlcG9ydEFkdmFuY2VkX3N0cnVjdCBDbGFzc2lmaWVyUmVwb3J0QWR2YW5jZWQ7DQordHlwZWRlZiBzdHJ1Y3QgTGVhcm5HZW9tZXRyaWNQYXR0ZXJuQWR2YW5jZWRPcHRpb25zMl9zdHJ1Y3QgTGVhcm5HZW9tZXRyaWNQYXR0ZXJuQWR2YW5jZWRPcHRpb25zMjsNCit0eXBlZGVmIHN0cnVjdCBQYXJ0aWNsZUZpbHRlck9wdGlvbnMyX3N0cnVjdCBQYXJ0aWNsZUZpbHRlck9wdGlvbnMyOw0KK3R5cGVkZWYgc3RydWN0IEZpbmRFZGdlT3B0aW9uczJfc3RydWN0IEZpbmRFZGdlT3B0aW9uczI7DQordHlwZWRlZiBzdHJ1Y3QgRmluZEVkZ2VSZXBvcnRfc3RydWN0IEZpbmRFZGdlUmVwb3J0Ow0KK3R5cGVkZWYgc3RydWN0IEZpbmRUcmFuc2Zvcm1SZWN0T3B0aW9uczJfc3RydWN0IEZpbmRUcmFuc2Zvcm1SZWN0T3B0aW9uczI7DQordHlwZWRlZiBzdHJ1Y3QgRmluZFRyYW5zZm9ybVJlY3RzT3B0aW9uczJfc3RydWN0IEZpbmRUcmFuc2Zvcm1SZWN0c09wdGlvbnMyOw0KK3R5cGVkZWYgc3RydWN0IFJlYWRUZXh0UmVwb3J0M19zdHJ1Y3QgUmVhZFRleHRSZXBvcnQzOw0KK3R5cGVkZWYgc3RydWN0IENoYXJhY3RlclN0YXRpc3RpY3Nfc3RydWN0IENoYXJhY3RlclN0YXRpc3RpY3M7DQordHlwZWRlZiBzdHJ1Y3QgQ2hhclJlcG9ydDNfc3RydWN0IENoYXJSZXBvcnQzOw0KK3R5cGVkZWYgc3RydWN0IEFyY0luZm8yX3N0cnVjdCBBcmNJbmZvMjsNCit0eXBlZGVmIHN0cnVjdCBFZGdlUmVwb3J0Ml9zdHJ1Y3QgRWRnZVJlcG9ydDI7DQordHlwZWRlZiBzdHJ1Y3QgU2VhcmNoQXJjSW5mb19zdHJ1Y3QgU2VhcmNoQXJjSW5mbzsNCit0eXBlZGVmIHN0cnVjdCBDb25jZW50cmljUmFrZVJlcG9ydDJfc3RydWN0IENvbmNlbnRyaWNSYWtlUmVwb3J0MjsNCit0eXBlZGVmIHN0cnVjdCBTcG9rZVJlcG9ydDJfc3RydWN0IFNwb2tlUmVwb3J0MjsNCit0eXBlZGVmIHN0cnVjdCBFZGdlSW5mb19zdHJ1Y3QgRWRnZUluZm87DQordHlwZWRlZiBzdHJ1Y3QgU2VhcmNoTGluZUluZm9fc3RydWN0IFNlYXJjaExpbmVJbmZvOw0KK3R5cGVkZWYgc3RydWN0IFJha2VSZXBvcnQyX3N0cnVjdCBSYWtlUmVwb3J0MjsNCit0eXBlZGVmIHN0cnVjdCBUcmFuc2Zvcm1CZWhhdmlvcnNfc3RydWN0IFRyYW5zZm9ybUJlaGF2aW9yczsNCit0eXBlZGVmIHN0cnVjdCBRUkNvZGVEYXRhVG9rZW5fc3RydWN0IFFSQ29kZURhdGFUb2tlbjsNCit0eXBlZGVmIHN0cnVjdCBQYXJ0aWNsZUZpbHRlck9wdGlvbnNfc3RydWN0IFBhcnRpY2xlRmlsdGVyT3B0aW9uczsNCit0eXBlZGVmIHN0cnVjdCBTdHJhaWdodEVkZ2VSZXBvcnQyX3N0cnVjdCBTdHJhaWdodEVkZ2VSZXBvcnQyOw0KK3R5cGVkZWYgc3RydWN0IFN0cmFpZ2h0RWRnZU9wdGlvbnNfc3RydWN0IFN0cmFpZ2h0RWRnZU9wdGlvbnM7DQordHlwZWRlZiBzdHJ1Y3QgU3RyYWlnaHRFZGdlX3N0cnVjdCBTdHJhaWdodEVkZ2U7DQordHlwZWRlZiBzdHJ1Y3QgUVJDb2RlU2VhcmNoT3B0aW9uc19zdHJ1Y3QgUVJDb2RlU2VhcmNoT3B0aW9uczsNCit0eXBlZGVmIHN0cnVjdCBRUkNvZGVTaXplT3B0aW9uc19zdHJ1Y3QgUVJDb2RlU2l6ZU9wdGlvbnM7DQordHlwZWRlZiBzdHJ1Y3QgUVJDb2RlRGVzY3JpcHRpb25PcHRpb25zX3N0cnVjdCBRUkNvZGVEZXNjcmlwdGlvbk9wdGlvbnM7DQordHlwZWRlZiBzdHJ1Y3QgUVJDb2RlUmVwb3J0X3N0cnVjdCBRUkNvZGVSZXBvcnQ7DQordHlwZWRlZiBzdHJ1Y3QgQUlNR3JhZGVSZXBvcnRfc3RydWN0IEFJTUdyYWRlUmVwb3J0Ow0KK3R5cGVkZWYgc3RydWN0IERhdGFNYXRyaXhTaXplT3B0aW9uc19zdHJ1Y3QgRGF0YU1hdHJpeFNpemVPcHRpb25zOw0KK3R5cGVkZWYgc3RydWN0IERhdGFNYXRyaXhEZXNjcmlwdGlvbk9wdGlvbnNfc3RydWN0IERhdGFNYXRyaXhEZXNjcmlwdGlvbk9wdGlvbnM7DQordHlwZWRlZiBzdHJ1Y3QgRGF0YU1hdHJpeFNlYXJjaE9wdGlvbnNfc3RydWN0IERhdGFNYXRyaXhTZWFyY2hPcHRpb25zOw0KK3R5cGVkZWYgc3RydWN0IERhdGFNYXRyaXhSZXBvcnRfc3RydWN0IERhdGFNYXRyaXhSZXBvcnQ7DQordHlwZWRlZiBzdHJ1Y3QgSlBFRzIwMDBGaWxlQWR2YW5jZWRPcHRpb25zX3N0cnVjdCBKUEVHMjAwMEZpbGVBZHZhbmNlZE9wdGlvbnM7DQordHlwZWRlZiBzdHJ1Y3QgTWF0Y2hHZW9tZXRyaWNQYXR0ZXJuQWR2YW5jZWRPcHRpb25zMl9zdHJ1Y3QgTWF0Y2hHZW9tZXRyaWNQYXR0ZXJuQWR2YW5jZWRPcHRpb25zMjsNCit0eXBlZGVmIHN0cnVjdCBJbnNwZWN0aW9uQWxpZ25tZW50X3N0cnVjdCBJbnNwZWN0aW9uQWxpZ25tZW50Ow0KK3R5cGVkZWYgc3RydWN0IEluc3BlY3Rpb25PcHRpb25zX3N0cnVjdCBJbnNwZWN0aW9uT3B0aW9uczsNCit0eXBlZGVmIHN0cnVjdCBDaGFyUmVwb3J0Ml9zdHJ1Y3QgQ2hhclJlcG9ydDI7DQordHlwZWRlZiBzdHJ1Y3QgQ2hhckluZm8yX3N0cnVjdCBDaGFySW5mbzI7DQordHlwZWRlZiBzdHJ1Y3QgUmVhZFRleHRSZXBvcnQyX3N0cnVjdCBSZWFkVGV4dFJlcG9ydDI7DQordHlwZWRlZiBzdHJ1Y3QgRWxsaXBzZUZlYXR1cmVfc3RydWN0IEVsbGlwc2VGZWF0dXJlOw0KK3R5cGVkZWYgc3RydWN0IENpcmNsZUZlYXR1cmVfc3RydWN0IENpcmNsZUZlYXR1cmU7DQordHlwZWRlZiBzdHJ1Y3QgQ29uc3RDdXJ2ZUZlYXR1cmVfc3RydWN0IENvbnN0Q3VydmVGZWF0dXJlOw0KK3R5cGVkZWYgc3RydWN0IFJlY3RhbmdsZUZlYXR1cmVfc3RydWN0IFJlY3RhbmdsZUZlYXR1cmU7DQordHlwZWRlZiBzdHJ1Y3QgTGVnRmVhdHVyZV9zdHJ1Y3QgTGVnRmVhdHVyZTsNCit0eXBlZGVmIHN0cnVjdCBDb3JuZXJGZWF0dXJlX3N0cnVjdCBDb3JuZXJGZWF0dXJlOw0KK3R5cGVkZWYgc3RydWN0IExpbmVGZWF0dXJlX3N0cnVjdCBMaW5lRmVhdHVyZTsNCit0eXBlZGVmIHN0cnVjdCBQYXJhbGxlbExpbmVQYWlyRmVhdHVyZV9zdHJ1Y3QgUGFyYWxsZWxMaW5lUGFpckZlYXR1cmU7DQordHlwZWRlZiBzdHJ1Y3QgUGFpck9mUGFyYWxsZWxMaW5lUGFpcnNGZWF0dXJlX3N0cnVjdCBQYWlyT2ZQYXJhbGxlbExpbmVQYWlyc0ZlYXR1cmU7DQordHlwZWRlZiB1bmlvbiBHZW9tZXRyaWNGZWF0dXJlX3VuaW9uIEdlb21ldHJpY0ZlYXR1cmU7DQordHlwZWRlZiBzdHJ1Y3QgRmVhdHVyZURhdGFfc3RydWN0IEZlYXR1cmVEYXRhOw0KK3R5cGVkZWYgc3RydWN0IEdlb21ldHJpY1BhdHRlcm5NYXRjaDJfc3RydWN0IEdlb21ldHJpY1BhdHRlcm5NYXRjaDI7DQordHlwZWRlZiBzdHJ1Y3QgQ2xvc2VkQ3VydmVGZWF0dXJlX3N0cnVjdCBDbG9zZWRDdXJ2ZUZlYXR1cmU7DQordHlwZWRlZiBzdHJ1Y3QgTGluZU1hdGNoX3N0cnVjdCBMaW5lTWF0Y2g7DQordHlwZWRlZiBzdHJ1Y3QgTGluZURlc2NyaXB0b3Jfc3RydWN0IExpbmVEZXNjcmlwdG9yOw0KK3R5cGVkZWYgc3RydWN0IFJlY3RhbmdsZURlc2NyaXB0b3Jfc3RydWN0IFJlY3RhbmdsZURlc2NyaXB0b3I7DQordHlwZWRlZiBzdHJ1Y3QgUmVjdGFuZ2xlTWF0Y2hfc3RydWN0IFJlY3RhbmdsZU1hdGNoOw0KK3R5cGVkZWYgc3RydWN0IEVsbGlwc2VEZXNjcmlwdG9yX3N0cnVjdCBFbGxpcHNlRGVzY3JpcHRvcjsNCit0eXBlZGVmIHN0cnVjdCBFbGxpcHNlTWF0Y2hfc3RydWN0IEVsbGlwc2VNYXRjaDsNCit0eXBlZGVmIHN0cnVjdCBDaXJjbGVNYXRjaF9zdHJ1Y3QgQ2lyY2xlTWF0Y2g7DQordHlwZWRlZiBzdHJ1Y3QgQ2lyY2xlRGVzY3JpcHRvcl9zdHJ1Y3QgQ2lyY2xlRGVzY3JpcHRvcjsNCit0eXBlZGVmIHN0cnVjdCBTaGFwZURldGVjdGlvbk9wdGlvbnNfc3RydWN0IFNoYXBlRGV0ZWN0aW9uT3B0aW9uczsNCit0eXBlZGVmIHN0cnVjdCBDdXJ2ZV9zdHJ1Y3QgQ3VydmU7DQordHlwZWRlZiBzdHJ1Y3QgQ3VydmVPcHRpb25zX3N0cnVjdCBDdXJ2ZU9wdGlvbnM7DQordHlwZWRlZiBzdHJ1Y3QgQmFyY29kZTJESW5mb19zdHJ1Y3QgQmFyY29kZTJESW5mbzsNCit0eXBlZGVmIHN0cnVjdCBEYXRhTWF0cml4T3B0aW9uc19zdHJ1Y3QgRGF0YU1hdHJpeE9wdGlvbnM7DQordHlwZWRlZiBzdHJ1Y3QgQ2xhc3NpZmllckFjY3VyYWN5UmVwb3J0X3N0cnVjdCBDbGFzc2lmaWVyQWNjdXJhY3lSZXBvcnQ7DQordHlwZWRlZiBzdHJ1Y3QgTmVhcmVzdE5laWdoYm9yQ2xhc3NSZXN1bHRfc3RydWN0IE5lYXJlc3ROZWlnaGJvckNsYXNzUmVzdWx0Ow0KK3R5cGVkZWYgc3RydWN0IE5lYXJlc3ROZWlnaGJvclRyYWluaW5nUmVwb3J0X3N0cnVjdCBOZWFyZXN0TmVpZ2hib3JUcmFpbmluZ1JlcG9ydDsNCit0eXBlZGVmIHN0cnVjdCBQYXJ0aWNsZUNsYXNzaWZpZXJQcmVwcm9jZXNzaW5nT3B0aW9uc19zdHJ1Y3QgUGFydGljbGVDbGFzc2lmaWVyUHJlcHJvY2Vzc2luZ09wdGlvbnM7DQordHlwZWRlZiBzdHJ1Y3QgQ2xhc3NpZmllclNhbXBsZUluZm9fc3RydWN0IENsYXNzaWZpZXJTYW1wbGVJbmZvOw0KK3R5cGVkZWYgc3RydWN0IENsYXNzU2NvcmVfc3RydWN0IENsYXNzU2NvcmU7DQordHlwZWRlZiBzdHJ1Y3QgQ2xhc3NpZmllclJlcG9ydF9zdHJ1Y3QgQ2xhc3NpZmllclJlcG9ydDsNCit0eXBlZGVmIHN0cnVjdCBOZWFyZXN0TmVpZ2hib3JPcHRpb25zX3N0cnVjdCBOZWFyZXN0TmVpZ2hib3JPcHRpb25zOw0KK3R5cGVkZWYgc3RydWN0IFBhcnRpY2xlQ2xhc3NpZmllck9wdGlvbnNfc3RydWN0IFBhcnRpY2xlQ2xhc3NpZmllck9wdGlvbnM7DQordHlwZWRlZiBzdHJ1Y3QgUkdCVTY0VmFsdWVfc3RydWN0IFJHQlU2NFZhbHVlOw0KK3R5cGVkZWYgc3RydWN0IEdlb21ldHJpY1BhdHRlcm5NYXRjaF9zdHJ1Y3QgR2VvbWV0cmljUGF0dGVybk1hdGNoOw0KK3R5cGVkZWYgc3RydWN0IE1hdGNoR2VvbWV0cmljUGF0dGVybkFkdmFuY2VkT3B0aW9uc19zdHJ1Y3QgTWF0Y2hHZW9tZXRyaWNQYXR0ZXJuQWR2YW5jZWRPcHRpb25zOw0KK3R5cGVkZWYgc3RydWN0IE1hdGNoR2VvbWV0cmljUGF0dGVybk9wdGlvbnNfc3RydWN0IE1hdGNoR2VvbWV0cmljUGF0dGVybk9wdGlvbnM7DQordHlwZWRlZiBzdHJ1Y3QgTGVhcm5HZW9tZXRyaWNQYXR0ZXJuQWR2YW5jZWRPcHRpb25zX3N0cnVjdCBMZWFybkdlb21ldHJpY1BhdHRlcm5BZHZhbmNlZE9wdGlvbnM7DQordHlwZWRlZiBzdHJ1Y3QgRml0RWxsaXBzZU9wdGlvbnNfc3RydWN0IEZpdEVsbGlwc2VPcHRpb25zOw0KK3R5cGVkZWYgc3RydWN0IEZpdENpcmNsZU9wdGlvbnNfc3RydWN0IEZpdENpcmNsZU9wdGlvbnM7DQordHlwZWRlZiBzdHJ1Y3QgQ29uc3RydWN0Uk9JT3B0aW9uczJfc3RydWN0IENvbnN0cnVjdFJPSU9wdGlvbnMyOw0KK3R5cGVkZWYgc3RydWN0IEhTTFZhbHVlX3N0cnVjdCBIU0xWYWx1ZTsNCit0eXBlZGVmIHN0cnVjdCBIU1ZWYWx1ZV9zdHJ1Y3QgSFNWVmFsdWU7DQordHlwZWRlZiBzdHJ1Y3QgSFNJVmFsdWVfc3RydWN0IEhTSVZhbHVlOw0KK3R5cGVkZWYgc3RydWN0IENJRUxhYlZhbHVlX3N0cnVjdCBDSUVMYWJWYWx1ZTsNCit0eXBlZGVmIHN0cnVjdCBDSUVYWVpWYWx1ZV9zdHJ1Y3QgQ0lFWFlaVmFsdWU7DQordHlwZWRlZiB1bmlvbiBDb2xvcjJfdW5pb24gQ29sb3IyOw0KK3R5cGVkZWYgc3RydWN0IEJlc3RFbGxpcHNlMl9zdHJ1Y3QgQmVzdEVsbGlwc2UyOw0KK3R5cGVkZWYgc3RydWN0IExlYXJuUGF0dGVybkFkdmFuY2VkT3B0aW9uc19zdHJ1Y3QgTGVhcm5QYXR0ZXJuQWR2YW5jZWRPcHRpb25zOw0KK3R5cGVkZWYgc3RydWN0IEFWSUluZm9fc3RydWN0IEFWSUluZm87DQordHlwZWRlZiBzdHJ1Y3QgTGVhcm5QYXR0ZXJuQWR2YW5jZWRTaGlmdE9wdGlvbnNfc3RydWN0IExlYXJuUGF0dGVybkFkdmFuY2VkU2hpZnRPcHRpb25zOw0KK3R5cGVkZWYgc3RydWN0IExlYXJuUGF0dGVybkFkdmFuY2VkUm90YXRpb25PcHRpb25zX3N0cnVjdCBMZWFyblBhdHRlcm5BZHZhbmNlZFJvdGF0aW9uT3B0aW9uczsNCit0eXBlZGVmIHN0cnVjdCBNYXRjaFBhdHRlcm5BZHZhbmNlZE9wdGlvbnNfc3RydWN0IE1hdGNoUGF0dGVybkFkdmFuY2VkT3B0aW9uczsNCit0eXBlZGVmIHN0cnVjdCBQYXJ0aWNsZUZpbHRlckNyaXRlcmlhMl9zdHJ1Y3QgUGFydGljbGVGaWx0ZXJDcml0ZXJpYTI7DQordHlwZWRlZiBzdHJ1Y3QgQmVzdENpcmNsZTJfc3RydWN0IEJlc3RDaXJjbGUyOw0KK3R5cGVkZWYgc3RydWN0IE9DUlNwYWNpbmdPcHRpb25zX3N0cnVjdCBPQ1JTcGFjaW5nT3B0aW9uczsNCit0eXBlZGVmIHN0cnVjdCBPQ1JQcm9jZXNzaW5nT3B0aW9uc19zdHJ1Y3QgT0NSUHJvY2Vzc2luZ09wdGlvbnM7DQordHlwZWRlZiBzdHJ1Y3QgUmVhZFRleHRPcHRpb25zX3N0cnVjdCBSZWFkVGV4dE9wdGlvbnM7DQordHlwZWRlZiBzdHJ1Y3QgQ2hhckluZm9fc3RydWN0IENoYXJJbmZvOw0KKyNpZiAhZGVmaW5lZChVU0VSSU5UX0hFQURFUikgJiYgIWRlZmluZWQoX0NWSV9SRUNUX0RFRklORUQpDQordHlwZWRlZiBzdHJ1Y3QgUmVjdF9zdHJ1Y3QgUmVjdDsNCisjZW5kaWYNCit0eXBlZGVmIHN0cnVjdCBDaGFyUmVwb3J0X3N0cnVjdCBDaGFyUmVwb3J0Ow0KK3R5cGVkZWYgc3RydWN0IFJlYWRUZXh0UmVwb3J0X3N0cnVjdCBSZWFkVGV4dFJlcG9ydDsNCisjaWYgIWRlZmluZWQoVVNFUklOVF9IRUFERVIpICYmICFkZWZpbmVkKF9DVklfUE9JTlRfREVGSU5FRCkNCit0eXBlZGVmIHN0cnVjdCBQb2ludF9zdHJ1Y3QgUG9pbnQ7DQorI2VuZGlmDQordHlwZWRlZiBzdHJ1Y3QgQW5udWx1c19zdHJ1Y3QgQW5udWx1czsNCit0eXBlZGVmIHN0cnVjdCBFZGdlTG9jYXRpb25SZXBvcnRfc3RydWN0IEVkZ2VMb2NhdGlvblJlcG9ydDsNCit0eXBlZGVmIHN0cnVjdCBFZGdlT3B0aW9uc19zdHJ1Y3QgRWRnZU9wdGlvbnM7DQordHlwZWRlZiBzdHJ1Y3QgRWRnZVJlcG9ydF9zdHJ1Y3QgRWRnZVJlcG9ydDsNCit0eXBlZGVmIHN0cnVjdCBFeHRyZW1lUmVwb3J0X3N0cnVjdCBFeHRyZW1lUmVwb3J0Ow0KK3R5cGVkZWYgc3RydWN0IEZpdExpbmVPcHRpb25zX3N0cnVjdCBGaXRMaW5lT3B0aW9uczsNCit0eXBlZGVmIHN0cnVjdCBEaXNwbGF5TWFwcGluZ19zdHJ1Y3QgRGlzcGxheU1hcHBpbmc7DQordHlwZWRlZiBzdHJ1Y3QgRGV0ZWN0RXh0cmVtZXNPcHRpb25zX3N0cnVjdCBEZXRlY3RFeHRyZW1lc09wdGlvbnM7DQordHlwZWRlZiBzdHJ1Y3QgSW1hZ2VJbmZvX3N0cnVjdCBJbWFnZUluZm87DQordHlwZWRlZiBzdHJ1Y3QgTENET3B0aW9uc19zdHJ1Y3QgTENET3B0aW9uczsNCit0eXBlZGVmIHN0cnVjdCBMQ0RSZXBvcnRfc3RydWN0IExDRFJlcG9ydDsNCit0eXBlZGVmIHN0cnVjdCBMQ0RTZWdtZW50c19zdHJ1Y3QgTENEU2VnbWVudHM7DQordHlwZWRlZiBzdHJ1Y3QgTGVhcm5DYWxpYnJhdGlvbk9wdGlvbnNfc3RydWN0IExlYXJuQ2FsaWJyYXRpb25PcHRpb25zOw0KK3R5cGVkZWYgc3RydWN0IExlYXJuQ29sb3JQYXR0ZXJuT3B0aW9uc19zdHJ1Y3QgTGVhcm5Db2xvclBhdHRlcm5PcHRpb25zOw0KK3R5cGVkZWYgc3RydWN0IExpbmVfc3RydWN0IExpbmU7DQordHlwZWRlZiBzdHJ1Y3QgTGluZWFyQXZlcmFnZXNfc3RydWN0IExpbmVhckF2ZXJhZ2VzOw0KK3R5cGVkZWYgc3RydWN0IExpbmVQcm9maWxlX3N0cnVjdCBMaW5lUHJvZmlsZTsNCit0eXBlZGVmIHN0cnVjdCBNYXRjaENvbG9yUGF0dGVybk9wdGlvbnNfc3RydWN0IE1hdGNoQ29sb3JQYXR0ZXJuT3B0aW9uczsNCit0eXBlZGVmIHN0cnVjdCBIaXN0b2dyYW1SZXBvcnRfc3RydWN0IEhpc3RvZ3JhbVJlcG9ydDsNCit0eXBlZGVmIHN0cnVjdCBBcmNJbmZvX3N0cnVjdCBBcmNJbmZvOw0KK3R5cGVkZWYgc3RydWN0IEF4aXNSZXBvcnRfc3RydWN0IEF4aXNSZXBvcnQ7DQordHlwZWRlZiBzdHJ1Y3QgQmFyY29kZUluZm9fc3RydWN0IEJhcmNvZGVJbmZvOw0KK3R5cGVkZWYgc3RydWN0IEJDR09wdGlvbnNfc3RydWN0IEJDR09wdGlvbnM7DQordHlwZWRlZiBzdHJ1Y3QgQmVzdENpcmNsZV9zdHJ1Y3QgQmVzdENpcmNsZTsNCit0eXBlZGVmIHN0cnVjdCBCZXN0RWxsaXBzZV9zdHJ1Y3QgQmVzdEVsbGlwc2U7DQordHlwZWRlZiBzdHJ1Y3QgQmVzdExpbmVfc3RydWN0IEJlc3RMaW5lOw0KK3R5cGVkZWYgc3RydWN0IEJyb3dzZXJPcHRpb25zX3N0cnVjdCBCcm93c2VyT3B0aW9uczsNCit0eXBlZGVmIHN0cnVjdCBDb29yZGluYXRlU3lzdGVtX3N0cnVjdCBDb29yZGluYXRlU3lzdGVtOw0KK3R5cGVkZWYgc3RydWN0IENhbGlicmF0aW9uSW5mb19zdHJ1Y3QgQ2FsaWJyYXRpb25JbmZvOw0KK3R5cGVkZWYgc3RydWN0IENhbGlicmF0aW9uUG9pbnRzX3N0cnVjdCBDYWxpYnJhdGlvblBvaW50czsNCit0eXBlZGVmIHN0cnVjdCBDYWxpcGVyT3B0aW9uc19zdHJ1Y3QgQ2FsaXBlck9wdGlvbnM7DQordHlwZWRlZiBzdHJ1Y3QgQ2FsaXBlclJlcG9ydF9zdHJ1Y3QgQ2FsaXBlclJlcG9ydDsNCit0eXBlZGVmIHN0cnVjdCBEcmF3VGV4dE9wdGlvbnNfc3RydWN0IERyYXdUZXh0T3B0aW9uczsNCit0eXBlZGVmIHN0cnVjdCBDaXJjbGVSZXBvcnRfc3RydWN0IENpcmNsZVJlcG9ydDsNCit0eXBlZGVmIHN0cnVjdCBDbG9zZWRDb250b3VyX3N0cnVjdCBDbG9zZWRDb250b3VyOw0KK3R5cGVkZWYgc3RydWN0IENvbG9ySGlzdG9ncmFtUmVwb3J0X3N0cnVjdCBDb2xvckhpc3RvZ3JhbVJlcG9ydDsNCit0eXBlZGVmIHN0cnVjdCBDb2xvckluZm9ybWF0aW9uX3N0cnVjdCBDb2xvckluZm9ybWF0aW9uOw0KK3R5cGVkZWYgc3RydWN0IENvbXBsZXhfc3RydWN0IENvbXBsZXg7DQordHlwZWRlZiBzdHJ1Y3QgQ29uY2VudHJpY1Jha2VSZXBvcnRfc3RydWN0IENvbmNlbnRyaWNSYWtlUmVwb3J0Ow0KK3R5cGVkZWYgc3RydWN0IENvbnN0cnVjdFJPSU9wdGlvbnNfc3RydWN0IENvbnN0cnVjdFJPSU9wdGlvbnM7DQordHlwZWRlZiBzdHJ1Y3QgQ29udG91ckluZm9fc3RydWN0IENvbnRvdXJJbmZvOw0KK3R5cGVkZWYgdW5pb24gQ29udG91clVuaW9uX3VuaW9uIENvbnRvdXJVbmlvbjsNCit0eXBlZGVmIHN0cnVjdCBDb250b3VySW5mbzJfc3RydWN0IENvbnRvdXJJbmZvMjsNCit0eXBlZGVmIHN0cnVjdCBDb250b3VyUG9pbnRfc3RydWN0IENvbnRvdXJQb2ludDsNCit0eXBlZGVmIHN0cnVjdCBDb29yZGluYXRlVHJhbnNmb3JtX3N0cnVjdCBDb29yZGluYXRlVHJhbnNmb3JtOw0KK3R5cGVkZWYgc3RydWN0IENvb3JkaW5hdGVUcmFuc2Zvcm0yX3N0cnVjdCBDb29yZGluYXRlVHJhbnNmb3JtMjsNCit0eXBlZGVmIHN0cnVjdCBDYW5ueU9wdGlvbnNfc3RydWN0IENhbm55T3B0aW9uczsNCit0eXBlZGVmIHN0cnVjdCBSYW5nZV9zdHJ1Y3QgUmFuZ2U7DQordHlwZWRlZiBzdHJ1Y3QgVXNlclBvaW50U3ltYm9sX3N0cnVjdCBVc2VyUG9pbnRTeW1ib2w7DQordHlwZWRlZiBzdHJ1Y3QgVmlldzNET3B0aW9uc19zdHJ1Y3QgVmlldzNET3B0aW9uczsNCit0eXBlZGVmIHN0cnVjdCBNYXRjaFBhdHRlcm5PcHRpb25zX3N0cnVjdCBNYXRjaFBhdHRlcm5PcHRpb25zOw0KK3R5cGVkZWYgc3RydWN0IFRJRkZGaWxlT3B0aW9uc19zdHJ1Y3QgVElGRkZpbGVPcHRpb25zOw0KK3R5cGVkZWYgdW5pb24gQ29sb3JfdW5pb24gQ29sb3I7DQordHlwZWRlZiB1bmlvbiBQaXhlbFZhbHVlX3VuaW9uIFBpeGVsVmFsdWU7DQordHlwZWRlZiBzdHJ1Y3QgT3BlbkNvbnRvdXJfc3RydWN0IE9wZW5Db250b3VyOw0KK3R5cGVkZWYgc3RydWN0IE92ZXJsYXlUZXh0T3B0aW9uc19zdHJ1Y3QgT3ZlcmxheVRleHRPcHRpb25zOw0KK3R5cGVkZWYgc3RydWN0IFBhcnRpY2xlRmlsdGVyQ3JpdGVyaWFfc3RydWN0IFBhcnRpY2xlRmlsdGVyQ3JpdGVyaWE7DQordHlwZWRlZiBzdHJ1Y3QgUGFydGljbGVSZXBvcnRfc3RydWN0IFBhcnRpY2xlUmVwb3J0Ow0KK3R5cGVkZWYgc3RydWN0IFBhdHRlcm5NYXRjaF9zdHJ1Y3QgUGF0dGVybk1hdGNoOw0KK3R5cGVkZWYgc3RydWN0IFF1YW50aWZ5RGF0YV9zdHJ1Y3QgUXVhbnRpZnlEYXRhOw0KK3R5cGVkZWYgc3RydWN0IFF1YW50aWZ5UmVwb3J0X3N0cnVjdCBRdWFudGlmeVJlcG9ydDsNCit0eXBlZGVmIHN0cnVjdCBSYWtlT3B0aW9uc19zdHJ1Y3QgUmFrZU9wdGlvbnM7DQordHlwZWRlZiBzdHJ1Y3QgUmFrZVJlcG9ydF9zdHJ1Y3QgUmFrZVJlcG9ydDsNCit0eXBlZGVmIHN0cnVjdCBUcmFuc2Zvcm1SZXBvcnRfc3RydWN0IFRyYW5zZm9ybVJlcG9ydDsNCit0eXBlZGVmIHN0cnVjdCBTaGFwZVJlcG9ydF9zdHJ1Y3QgU2hhcGVSZXBvcnQ7DQordHlwZWRlZiBzdHJ1Y3QgTWV0ZXJBcmNfc3RydWN0IE1ldGVyQXJjOw0KK3R5cGVkZWYgc3RydWN0IFRocmVzaG9sZERhdGFfc3RydWN0IFRocmVzaG9sZERhdGE7DQordHlwZWRlZiBzdHJ1Y3QgU3RydWN0dXJpbmdFbGVtZW50X3N0cnVjdCBTdHJ1Y3R1cmluZ0VsZW1lbnQ7DQordHlwZWRlZiBzdHJ1Y3QgU3Bva2VSZXBvcnRfc3RydWN0IFNwb2tlUmVwb3J0Ow0KK3R5cGVkZWYgc3RydWN0IFNpbXBsZUVkZ2VPcHRpb25zX3N0cnVjdCBTaW1wbGVFZGdlT3B0aW9uczsNCit0eXBlZGVmIHN0cnVjdCBTZWxlY3RQYXJ0aWNsZUNyaXRlcmlhX3N0cnVjdCBTZWxlY3RQYXJ0aWNsZUNyaXRlcmlhOw0KK3R5cGVkZWYgc3RydWN0IFNlZ21lbnRJbmZvX3N0cnVjdCBTZWdtZW50SW5mbzsNCit0eXBlZGVmIHN0cnVjdCBSb3RhdGlvbkFuZ2xlUmFuZ2Vfc3RydWN0IFJvdGF0aW9uQW5nbGVSYW5nZTsNCit0eXBlZGVmIHN0cnVjdCBSb3RhdGVkUmVjdF9zdHJ1Y3QgUm90YXRlZFJlY3Q7DQordHlwZWRlZiBzdHJ1Y3QgUk9JUHJvZmlsZV9zdHJ1Y3QgUk9JUHJvZmlsZTsNCit0eXBlZGVmIHN0cnVjdCBUb29sV2luZG93T3B0aW9uc19zdHJ1Y3QgVG9vbFdpbmRvd09wdGlvbnM7DQordHlwZWRlZiBzdHJ1Y3QgU3Bva2VPcHRpb25zX3N0cnVjdCBTcG9rZU9wdGlvbnM7DQorDQorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorLy8gRGF0YSBTdHJ1Y3R1cmVzDQorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorI2lmICFkZWZpbmVkIF9fR05VQ19fICYmICFkZWZpbmVkIF9NX1g2NA0KKyNwcmFnbWEgcGFjayhwdXNoLDEpDQorI2VuZGlmDQordHlwZWRlZiBzdHJ1Y3QgRGl2aXNpb25Nb2RlbF9zdHJ1Y3Qgew0KKyAgICBmbG9hdCBrYXBwYTsgLy9UaGUgbGVhcm5lZCBrYXBwYSBjb2VmZmljaWVudCBvZiBkaXZpc2lvbiBtb2RlbC4NCit9IERpdmlzaW9uTW9kZWw7DQorDQordHlwZWRlZiBzdHJ1Y3QgRm9jYWxMZW5ndGhfc3RydWN0IHsNCisgICAgZmxvYXQgZng7IC8vRm9jYWwgbGVuZ3RoIGluIFggZGlyZWN0aW9uLg0KKyAgICBmbG9hdCBmeTsgLy9Gb2NhbCBsZW5ndGggaW4gWSBkaXJlY3Rpb24uDQorfSBGb2NhbExlbmd0aDsNCisNCit0eXBlZGVmIHN0cnVjdCBQb2x5TW9kZWxfc3RydWN0IHsNCisgICAgZmxvYXQqICAgICAgIGtDb2VmZnM7ICAgIC8vVGhlIGxlYXJuZWQgcmFkaWFsIGNvZWZmaWNpZW50cyBvZiBwb2x5bm9taWFsIG1vZGVsLg0KKyAgICB1bnNpZ25lZCBpbnQgbnVtS0NvZWZmczsgLy9OdW1iZXIgb2YgSyBjb2VmZmljaWVudHMuDQorICAgIGZsb2F0ICAgICAgICBwMTsgICAgICAgICAvL1RoZSBQMShsZWFybmVkIHRhbmdlbnRpYWwgY29lZmZpY2llbnRzIG9mIHBvbHlub21pYWwgbW9kZWwpLg0KKyAgICBmbG9hdCAgICAgICAgcDI7ICAgICAgICAgLy9UaGUgUDIobGVhcm5lZCB0YW5nZW50aWFsIGNvZWZmaWNpZW50cyBvZiBwb2x5bm9taWFsIG1vZGVsKS4NCit9IFBvbHlNb2RlbDsNCisNCit0eXBlZGVmIHN0cnVjdCBEaXN0b3J0aW9uTW9kZWxQYXJhbXNfc3RydWN0IHsNCisgICAgRGlzdG9ydGlvbk1vZGVsIGRpc3RvcnRpb25Nb2RlbDsgLy9UeXBlIG9mIGxlYXJuZWQgZGlzdG9ydGlvbiBtb2RlbC4NCisgICAgUG9seU1vZGVsICAgICAgIHBvbHlNb2RlbDsgICAgICAgLy9UaGUgbGVhcm5lZCBjb2VmZmljaWVudHMgb2YgcG9seW5vbWlhbCBtb2RlbC4NCisgICAgRGl2aXNpb25Nb2RlbCAgIGRpdmlzaW9uTW9kZWw7ICAgLy9UaGUgbGVhcm5lZCBjb2VmZmljaWVudCBvZiBkaXZpc2lvbiBtb2RlbC4NCit9IERpc3RvcnRpb25Nb2RlbFBhcmFtczsNCisNCit0eXBlZGVmIHN0cnVjdCBQb2ludEZsb2F0X3N0cnVjdCB7DQorICAgIGZsb2F0IHg7IC8vVGhlIHgtY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQuDQorICAgIGZsb2F0IHk7IC8vVGhlIHktY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQuDQorfSBQb2ludEZsb2F0Ow0KKw0KK3R5cGVkZWYgc3RydWN0IEludGVybmFsUGFyYW1ldGVyc19zdHJ1Y3Qgew0KKyAgICBjaGFyICAgICAgICBpc0luc3VmZmljaWVudERhdGE7IA0KKyAgICBGb2NhbExlbmd0aCBmb2NhbExlbmd0aDsgICAgICAgIA0KKyAgICBQb2ludEZsb2F0ICBvcHRpY2FsQ2VudGVyOyAgICAgIA0KK30gSW50ZXJuYWxQYXJhbWV0ZXJzOw0KKw0KK3R5cGVkZWYgc3RydWN0IE1heEdyaWRTaXplX3N0cnVjdCB7DQorICAgIHVuc2lnbmVkIGludCB4TWF4OyAvL01heGltdW0geCBsaW1pdCBmb3IgdGhlIGdyaWQgc2l6ZS4NCisgICAgdW5zaWduZWQgaW50IHlNYXg7IC8vTWF4aW11bSB5IGxpbWl0IGZvciB0aGUgZ3JpZCBzaXplLg0KK30gTWF4R3JpZFNpemU7DQorDQordHlwZWRlZiBzdHJ1Y3QgSW1hZ2VTaXplX3N0cnVjdCB7DQorICAgIHVuc2lnbmVkIGludCB4UmVzOyAvL1ggcmVzb2x1dGlvbiBvZiB0aGUgaW1hZ2UuDQorICAgIHVuc2lnbmVkIGludCB5UmVzOyAvL1kgcmVzb2x1dGlvbiBvZiB0aGUgaW1hZ2UuDQorfSBJbWFnZVNpemU7DQorDQordHlwZWRlZiBzdHJ1Y3QgQ2FsaWJyYXRpb25SZWZlcmVuY2VQb2ludHNfc3RydWN0IHsNCisgICAgUG9pbnREb3VibGUqICAgIHBpeGVsQ29vcmRzOyAgICAvL1NwZWNpZmllcyB0aGUgY29vcmRpbmF0ZXMgb2YgdGhlIHBpeGVsIHJlZmVyZW5jZSBwb2ludHMuDQorICAgIHVuc2lnbmVkIGludCAgICBudW1QaXhlbENvb3JkczsgLy9OdW1iZXIgb2YgcGl4ZWwgY29vcmRpbmF0ZXMuDQorICAgIFBvaW50RG91YmxlKiAgICByZWFsQ29vcmRzOyAgICAgLy9TcGVjaWZpZXMgdGhlIG1lYXN1cmluZyB1bml0IGFzc29jaWF0ZWQgd2l0aCB0aGUgaW1hZ2UuDQorICAgIHVuc2lnbmVkIGludCAgICBudW1SZWFsQ29vcmRzOyAgLy9OdW1iZXIgb2YgcmVhbCBjb29yZGluYXRlcy4NCisgICAgQ2FsaWJyYXRpb25Vbml0IHVuaXRzOyAgICAgICAgICAvL1NwZWNpZmllcyB0aGUgdW5pdHMgb2YgWCBTdGVwIGFuZCBZIFN0ZXAuDQorICAgIEltYWdlU2l6ZSAgICAgICBpbWFnZVNpemU7ICAgICAgLy9TcGVjaWZpZXMgdGhlIHNpemUgb2YgY2FsaWJyYXRpb24gdGVtcGxhdGUgaW1hZ2UuDQorfSBDYWxpYnJhdGlvblJlZmVyZW5jZVBvaW50czsNCisNCit0eXBlZGVmIHN0cnVjdCBHZXRDYW1lcmFQYXJhbWV0ZXJzUmVwb3J0X3N0cnVjdCB7DQorICAgIGRvdWJsZSogICAgICAgICAgICAgICBwcm9qZWN0aW9uTWF0cml4OyAgICAgLy9UaGUgcHJvamVjdGlvbihob21vZ3JhcGh5KSBtYXRyaXggb2Ygd29ya2luZyBwbGFuZS4NCisgICAgdW5zaWduZWQgaW50ICAgICAgICAgIHByb2plY3Rpb25NYXRyaXhSb3dzOyAvL051bWJlciBvZiByb3dzIGluIHByb2plY3Rpb24gbWF0cml4Lg0KKyAgICB1bnNpZ25lZCBpbnQgICAgICAgICAgcHJvamVjdGlvbk1hdHJpeENvbHM7IC8vTnVtYmVyIG9mIGNvbHVtbnMgaW4gcHJvamVjdGlvbiBtYXRyaXguDQorICAgIERpc3RvcnRpb25Nb2RlbFBhcmFtcyBkaXN0b3J0aW9uOyAgICAgICAgICAgLy9EaXN0b3J0aW9uIG1vZGVsIENvZWZmaWNpZW50cy4NCisgICAgSW50ZXJuYWxQYXJhbWV0ZXJzICAgIGludGVybmFsUGFyYW1zOyAgICAgICAvL1RoZSBsZWFybmVkIGludGVybmFsIHBhcmFtdGVycyBvZiBjYW1lcmEgbW9kZWwgc3VjaCBhcyBmb2NhbCBsZW5ndGggYW5kIG9wdGljYWwgY2VudGVyLg0KK30gR2V0Q2FtZXJhUGFyYW1ldGVyc1JlcG9ydDsNCisNCit0eXBlZGVmIHN0cnVjdCBDYWxpYnJhdGlvbkF4aXNJbmZvX3N0cnVjdCB7DQorICAgIFBvaW50RmxvYXQgICAgICBjZW50ZXI7ICAgICAgICAvL1RoZSBvcmlnaW4gb2YgdGhlIHJlZmVyZW5jZSBjb29yZGluYXRlIHN5c3RlbSwgZXhwcmVzc2VkIGluIHBpeGVsIHVuaXRzLg0KKyAgICBmbG9hdCAgICAgICAgICAgcm90YXRpb25BbmdsZTsgLy9UaGUgYW5nbGUgb2YgdGhlIHgtYXhpcyBvZiB0aGUgcmVhbC13b3JsZCBjb29yZGluYXRlIHN5c3RlbSwgaW4gcmVsYXRpb24gdG8gdGhlIGhvcml6b250YWwuDQorICAgIEF4aXNPcmllbnRhdGlvbiBheGlzRGlyZWN0aW9uOyAvL1NwZWNpZmllcyB0aGUgZGlyZWN0aW9uIG9mIHRoZSBjYWxpYnJhaXRvbiBheGlzIHdoaWNoIGlzIGVpdGhlciBEaXJlY3Qgb3IgSW5kaXJlY3QuDQorfSBDYWxpYnJhdGlvbkF4aXNJbmZvOw0KKw0KK3R5cGVkZWYgc3RydWN0IENhbGlicmF0aW9uTGVhcm5TZXR1cEluZm9fc3RydWN0IHsNCisgICAgQ2FsaWJyYXRpb25Nb2RlMiBjYWxpYnJhdGlvbk1ldGhvZDsgICAgLy9UeXBlIG9mIGNhbGlicmF0aW9uIG1ldGhvZCB1c2VkLg0KKyAgICBEaXN0b3J0aW9uTW9kZWwgIGRpc3RvcnRpb25Nb2RlbDsgICAgICAvL1R5cGUgb2YgbGVhcm5lZCBkaXN0b3J0aW9uIG1vZGVsLg0KKyAgICBTY2FsaW5nTWV0aG9kICAgIHNjYWxlTW9kZTsgICAgICAgICAgICAvL1RoZSBhc3BlY3Qgc2NhbGluZyB0byB1c2Ugd2hlbiBjb3JyZWN0aW5nIGFuIGltYWdlLg0KKyAgICBDYWxpYnJhdGlvblJPSSAgIHJvaU1vZGU7ICAgICAgICAgICAgICAvL1RoZSBST0kgdG8gdXNlIHdoZW4gY29ycmVjdGluZyBhbiBpbWFnZS4NCisgICAgY2hhciAgICAgICAgICAgICBsZWFybkNvcnJlY3Rpb25UYWJsZTsgLy9TZXQgdGhpcyBpbnB1dCB0byB0cnVlIHZhbHVlIGlmIHlvdSB3YW50IHRoZSBjb3JyZWN0aW9uIHRhYmxlIHRvIGJlIGRldGVybWluZWQgYW5kIHN0b3JlZC4NCit9IENhbGlicmF0aW9uTGVhcm5TZXR1cEluZm87DQorDQordHlwZWRlZiBzdHJ1Y3QgR3JpZERlc2NyaXB0b3Jfc3RydWN0IHsNCisgICAgZmxvYXQgICAgICAgICAgIHhTdGVwOyAvL1RoZSBkaXN0YW5jZSBpbiB0aGUgeCBkaXJlY3Rpb24gYmV0d2VlbiB0d28gYWRqYWNlbnQgcGl4ZWxzIGluIHVuaXRzIHNwZWNpZmllZCBieSB1bml0Lg0KKyAgICBmbG9hdCAgICAgICAgICAgeVN0ZXA7IC8vVGhlIGRpc3RhbmNlIGluIHRoZSB5IGRpcmVjdGlvbiBiZXR3ZWVuIHR3byBhZGphY2VudCBwaXhlbHMgaW4gdW5pdHMgc3BlY2lmaWVkIGJ5IHVuaXQuDQorICAgIENhbGlicmF0aW9uVW5pdCB1bml0OyAgLy9UaGUgdW5pdCBvZiBtZWFzdXJlIGZvciB0aGUgaW1hZ2UuDQorfSBHcmlkRGVzY3JpcHRvcjsNCisNCit0eXBlZGVmIHN0cnVjdCBFcnJvclN0YXRpc3RpY3Nfc3RydWN0IHsNCisgICAgZG91YmxlIG1lYW47ICAgICAgICAgICAgICAvL01lYW4gZXJyb3Igc3RhdGlzdGljcyB2YWx1ZS4NCisgICAgZG91YmxlIG1heGltdW07ICAgICAgICAgICAvL01heGltdW0gdmFsdWUgb2YgZXJyb3IuDQorICAgIGRvdWJsZSBzdGFuZGFyZERldmlhdGlvbjsgLy9UaGUgc3RhbmRhcmQgZGV2aWF0aW9uIGVycm9yIHN0YXRpc3Rpc2NzIHZhbHVlLg0KKyAgICBkb3VibGUgZGlzdG9ydGlvbjsgICAgICAgIC8vVGhlIGRpc3RvcnRpb24gZXJyb3Igc3RhdGlzdGljcyB2YWx1ZS4NCit9IEVycm9yU3RhdGlzdGljczsNCisNCit0eXBlZGVmIHN0cnVjdCBHZXRDYWxpYnJhdGlvbkluZm9SZXBvcnRfc3RydWN0IHsNCisgICAgUk9JKiAgICAgICAgICAgICAgICAgICAgICB1c2VyUm9pOyAgICAgICAgIC8vU3BlY2lmaWVzIHRoZSBST0kgdGhlIHVzZXIgcHJvdmlkZWQgd2hlbiBsZWFybmluZyB0aGUgY2FsaWJyYXRpb24uDQorICAgIFJPSSogICAgICAgICAgICAgICAgICAgICAgY2FsaWJyYXRpb25Sb2k7ICAvL1NwZWNpZmllcyB0aGUgUk9JIHRoYXQgY29ycmVzcG9uZHMgdG8gdGhlIHJlZ2lvbiBvZiB0aGUgaW1hZ2Ugd2hlcmUgdGhlIGNhbGlicmF0aW9uIGluZm9ybWF0aW9uIGlzIGFjY3VyYXRlLg0KKyAgICBDYWxpYnJhdGlvbkF4aXNJbmZvICAgICAgIGF4aXNJbmZvOyAgICAgICAgLy9SZWZlcmVuY2UgQ29vcmRpbmF0ZSBTeXN0ZW0gZm9yIHRoZSByZWFsLXdvcmxkIGNvb3JkaW5hdGVzLg0KKyAgICBDYWxpYnJhdGlvbkxlYXJuU2V0dXBJbmZvIGxlYXJuU2V0dXBJbmZvOyAgLy9DYWxpYnJhdGlvbiBsZWFybiBzZXR1cCBpbmZvcm1hdGlvbi4NCisgICAgR3JpZERlc2NyaXB0b3IgICAgICAgICAgICBncmlkRGVzY3JpcHRvcjsgIC8vU3BlY2lmaWVzIHNjYWxpbmcgY29uc3RhbnRzIHVzZWQgdG8gY2FsaWJyYXRlIHRoZSBpbWFnZS4NCisgICAgZmxvYXQqICAgICAgICAgICAgICAgICAgICBlcnJvck1hcDsgICAgICAgIC8vVGhlIHRoZSBlcnJvciBtYXAgb2YgY2FsaWJyYXRpb24gdGVtcGxhdGUgaW1hZ2UuDQorICAgIHVuc2lnbmVkIGludCAgICAgICAgICAgICAgZXJyb3JNYXBSb3dzOyAgICAvL051bWJlciBvZiByb3dzIGluIGVycm9yIG1hcC4NCisgICAgdW5zaWduZWQgaW50ICAgICAgICAgICAgICBlcnJvck1hcENvbHM7ICAgIC8vTnVtYmVyIG9mIENvbHVtbnMgaW4gZXJyb3IgbWFwLg0KKyAgICBFcnJvclN0YXRpc3RpY3MgICAgICAgICAgIGVycm9yU3RhdGlzdGljczsgLy9FcnJvciBzdGF0aXN0aWNzIG9mIHRoZSBjYWxpYnJhdGlvbi4NCit9IEdldENhbGlicmF0aW9uSW5mb1JlcG9ydDsNCisNCit0eXBlZGVmIHN0cnVjdCBFZGdlUG9sYXJpdHlfc3RydWN0IHsNCisgICAgRWRnZVBvbGFyaXR5U2VhcmNoTW9kZSBzdGFydDsgDQorICAgIEVkZ2VQb2xhcml0eVNlYXJjaE1vZGUgZW5kOyAgIA0KK30gRWRnZVBvbGFyaXR5Ow0KKw0KK3R5cGVkZWYgc3RydWN0IENsYW1wU2V0dGluZ3Nfc3RydWN0IHsNCisgICAgZG91YmxlICAgICAgIGFuZ2xlUmFuZ2U7ICAgLy9TcGVjaWZpZXMgdGhlIGFuZ2xlIHJhbmdlLg0KKyAgICBFZGdlUG9sYXJpdHkgZWRnZVBvbGFyaXR5OyAvL1NwZWNpZmllcyB0aGUgZWRnZSBwb2xhcml0eS4NCit9IENsYW1wU2V0dGluZ3M7DQorDQordHlwZWRlZiBzdHJ1Y3QgUG9pbnREb3VibGVfc3RydWN0IHsNCisgICAgZG91YmxlIHg7IC8vVGhlIHgtY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQuDQorICAgIGRvdWJsZSB5OyAvL1RoZSB5LWNvb3JkaW5hdGUgb2YgdGhlIHBvaW50Lg0KK30gUG9pbnREb3VibGU7DQorDQordHlwZWRlZiBzdHJ1Y3QgUG9pbnREb3VibGVQYWlyX3N0cnVjdCB7DQorICAgIFBvaW50RG91YmxlIHN0YXJ0OyAvL1RoZSBTdGFydCBjby1vcmRpbmF0ZSBvZiB0aGUgcGFpci4NCisgICAgUG9pbnREb3VibGUgZW5kOyAgIC8vVGhlIEVuZCBjby1vcmRpbmF0ZSBvZiB0aGUgcGFpci4NCit9IFBvaW50RG91YmxlUGFpcjsNCisNCit0eXBlZGVmIHN0cnVjdCBDbGFtcFJlc3VsdHNfc3RydWN0IHsNCisgICAgZG91YmxlIGRpc3RhbmNlUGl4OyAgICAgICAvL0RlZmluZXMgdGhlIFBpeGVsIHdvcmxkIGRpc3RhbmNlLg0KKyAgICBkb3VibGUgZGlzdGFuY2VSZWFsV29ybGQ7IC8vRGVmaW5lcyB0aGUgcmVhbCB3b3JsZCBkaXN0YW5jZS4NCisgICAgZG91YmxlIGFuZ2xlQWJzOyAgICAgICAgICAvL0RlZmluZXMgdGhlIGFic29sdXRlIGFuZ2xlLg0KKyAgICBkb3VibGUgYW5nbGVSZWxhdGl2ZTsgICAgIC8vRGVmaW5lcyB0aGUgcmVsYXRpdmUgYW5nbGUuDQorfSBDbGFtcFJlc3VsdHM7DQorDQordHlwZWRlZiBzdHJ1Y3QgQ2xhbXBQb2ludHNfc3RydWN0IHsNCisgICAgUG9pbnREb3VibGVQYWlyIHBpeGVsOyAgICAgLy9TcGVjaWZpZXMgdGhlIHBpeGVsIHdvcmxkIHBvaW50IHBhaXIgZm9yIGNsYW1wLg0KKyAgICBQb2ludERvdWJsZVBhaXIgcmVhbFdvcmxkOyAvL1NwZWNpZmllcyB0aGUgcmVhbCB3b3JsZCBwb2ludCBwYWlyIGZvciBjbGFtcC4NCit9IENsYW1wUG9pbnRzOw0KKw0KK3R5cGVkZWYgc3RydWN0IFJHQlZhbHVlX3N0cnVjdCB7DQorICAgIHVuc2lnbmVkIGNoYXIgQjsgICAgIC8vVGhlIGJsdWUgdmFsdWUgb2YgdGhlIGNvbG9yLg0KKyAgICB1bnNpZ25lZCBjaGFyIEc7ICAgICAvL1RoZSBncmVlbiB2YWx1ZSBvZiB0aGUgY29sb3IuDQorICAgIHVuc2lnbmVkIGNoYXIgUjsgICAgIC8vVGhlIHJlZCB2YWx1ZSBvZiB0aGUgY29sb3IuDQorICAgIHVuc2lnbmVkIGNoYXIgYWxwaGE7IC8vVGhlIGFscGhhIHZhbHVlIG9mIHRoZSBjb2xvciwgd2hpY2ggcmVwcmVzZW50cyBleHRyYSBpbmZvcm1hdGlvbiBhYm91dCBhIGNvbG9yIGltYWdlLCBzdWNoIGFzIGdhbW1hIGNvcnJlY3Rpb24uDQorfSBSR0JWYWx1ZTsNCisNCit0eXBlZGVmIHN0cnVjdCBDbGFtcE92ZXJsYXlTZXR0aW5nc19zdHJ1Y3Qgew0KKyAgICBpbnQgICAgICBzaG93U2VhcmNoQXJlYTsgICAgICAvL0lmIFRSVUUsIHRoZSBmdW5jdGlvbiBvdmVybGF5cyB0aGUgc2VhcmNoIGFyZWEgb24gdGhlIGltYWdlLg0KKyAgICBpbnQgICAgICBzaG93Q3VydmVzOyAgICAgICAgICAvL0lmIFRSVUUsIHRoZSBmdW5jdGlvbiBvdmVybGF5cyB0aGUgY3VydmVzIG9uIHRoZSBpbWFnZS4NCisgICAgaW50ICAgICAgc2hvd0NsYW1wTG9jYXRpb247ICAgLy9JZiBUUlVFLCB0aGUgZnVuY3Rpb24gb3ZlcmxheXMgdGhlIGNsYW1wIGxvY2F0aW9uIG9uIHRoZSBpbWFnZS4NCisgICAgaW50ICAgICAgc2hvd1Jlc3VsdDsgICAgICAgICAgLy9JZiBUUlVFLCB0aGUgZnVuY3Rpb24gb3ZlcmxheXMgdGhlIGhpdCBsaW5lcyB0byB0aGUgb2JqZWN0IGFuZCB0aGUgZWRnZSB1c2VkIHRvIGdlbmVyYXRlIHRoZSBoaXQgbGluZSBvbiB0aGUgcmVzdWx0IGltYWdlLg0KKyAgICBSR0JWYWx1ZSBzZWFyY2hBcmVhQ29sb3I7ICAgICAvL1NwZWNpZmllcyB0aGUgUkdCIGNvbG9yIHZhbHVlIHRvIHVzZSB0byBvdmVybGF5IHRoZSBzZWFyY2ggYXJlYS4NCisgICAgUkdCVmFsdWUgY3VydmVzQ29sb3I7ICAgICAgICAgLy9TcGVjaWZpZXMgdGhlIFJHQiBjb2xvciB2YWx1ZSB0byB1c2UgdG8gb3ZlcmxheSB0aGUgY3VydmVzLg0KKyAgICBSR0JWYWx1ZSBjbGFtcExvY2F0aW9uc0NvbG9yOyAvL1NwZWNpZmllcyB0aGUgUkdCIGNvbG9yIHZhbHVlIHRvIHVzZSB0byBvdmVybGF5IHRoZSBjbGFtcCBsb2NhdGlvbnMuDQorICAgIFJHQlZhbHVlIHJlc3VsdENvbG9yOyAgICAgICAgIC8vU3BlY2lmaWVzIHRoZSBSR0IgY29sb3IgdmFsdWUgdG8gdXNlIHRvIG92ZXJsYXkgdGhlIHJlc3VsdHMuDQorICAgIGNoYXIqICAgIG92ZXJsYXlHcm91cE5hbWU7ICAgIC8vU3BlY2lmaWVzIHRoZSBncm91cCBvdmVybGF5IG5hbWUgZm9yIHRoZSBzdGVwIG92ZXJsYXlzLg0KK30gQ2xhbXBPdmVybGF5U2V0dGluZ3M7DQorDQordHlwZWRlZiBzdHJ1Y3QgQ2xhbXBNYXgyUmVwb3J0X3N0cnVjdCB7DQorICAgIENsYW1wUmVzdWx0cyBjbGFtcFJlc3VsdHM7ICAgICAvL1NwZWNpZmllcyB0aGUgQ2xhbXAgcmVzdWx0cyBpbmZvcm1hdGlvbiByZXR1cm5lZCBieSB0aGUgZnVuY3Rpb24uDQorICAgIENsYW1wUG9pbnRzICBjbGFtcFBvaW50czsgICAgICAvL1NwZWNpZmllcyB0aGUgY2xhbXAgcG9pbnRzIGluZm9ybWF0aW9uIHJldHVybmVkIGJ5IHRoZSBmdW5jdGlvbi4NCisgICAgdW5zaWduZWQgaW50IGNhbGlicmF0aW9uVmFsaWQ7IC8vU3BlY2lmaWVzIGlmIHRoZSBjYWxpYnJhdGlvbiBpbmZvcm1hdGlvbiBpcyB2YWxpZCBvciBub3QuDQorfSBDbGFtcE1heDJSZXBvcnQ7DQorDQordHlwZWRlZiBzdHJ1Y3QgQ29udG91ckZpdFNwbGluZVJlcG9ydF9zdHJ1Y3Qgew0KKyAgICBQb2ludERvdWJsZSogcG9pbnRzOyAgICAgICAgIC8vSXQgcmV0dXJucyB0aGUgcG9pbnRzIG9mIHRoZSBiZXN0LWZpdCBCLXNwbGluZSBjdXJ2ZS4NCisgICAgaW50ICAgICAgICAgIG51bWJlck9mUG9pbnRzOyAvL051bWJlciBvZiBCZXN0IGZpdCBwb2ludHMgcmV0dXJuZWQuDQorfSBDb250b3VyRml0U3BsaW5lUmVwb3J0Ow0KKw0KK3R5cGVkZWYgc3RydWN0IExpbmVGbG9hdF9zdHJ1Y3Qgew0KKyAgICBQb2ludEZsb2F0IHN0YXJ0OyAvL1RoZSBjb29yZGluYXRlIGxvY2F0aW9uIG9mIHRoZSBzdGFydCBvZiB0aGUgbGluZS4NCisgICAgUG9pbnRGbG9hdCBlbmQ7ICAgLy9UaGUgY29vcmRpbmF0ZSBsb2NhdGlvbiBvZiB0aGUgZW5kIG9mIHRoZSBsaW5lLg0KK30gTGluZUZsb2F0Ow0KKw0KK3R5cGVkZWYgc3RydWN0IExpbmVFcXVhdGlvbl9zdHJ1Y3Qgew0KKyAgICBkb3VibGUgYTsgLy9UaGUgYSBjb2VmZmljaWVudCBvZiB0aGUgbGluZSBlcXVhdGlvbi4NCisgICAgZG91YmxlIGI7IC8vVGhlIGIgY29lZmZpY2llbnQgb2YgdGhlIGxpbmUgZXF1YXRpb24uDQorICAgIGRvdWJsZSBjOyAvL1RoZSBjIGNvZWZmaWNpZW50IG9mIHRoZSBsaW5lIGVxdWF0aW9uLg0KK30gTGluZUVxdWF0aW9uOw0KKw0KK3R5cGVkZWYgc3RydWN0IENvbnRvdXJGaXRMaW5lUmVwb3J0X3N0cnVjdCB7DQorICAgIExpbmVGbG9hdCAgICBsaW5lU2VnbWVudDsgIC8vTGluZSBTZWdtZW50IHJlcHJlc2VudHMgdGhlIGludGVyc2VjdGlvbiBvZiB0aGUgbGluZSBlcXVhdGlvbiBhbmQgdGhlIGNvbnRvdXIuDQorICAgIExpbmVFcXVhdGlvbiBsaW5lRXF1YXRpb247IC8vTGluZSBFcXVhdGlvbiBpcyBhIHN0cnVjdHVyZSBvZiB0aHJlZSBjb2VmZmljaWVudHMgQSwgQiwgYW5kIEMgb2YgdGhlIGVxdWF0aW9uIGluIHRoZSBub3JtYWwgZm9ybSAoQXggKyBCeSArIEM9MCkgb2YgdGhlIGJlc3QgZml0IGxpbmUuDQorfSBDb250b3VyRml0TGluZVJlcG9ydDsNCisNCit0eXBlZGVmIHN0cnVjdCBDb250b3VyRml0UG9seW5vbWlhbFJlcG9ydF9zdHJ1Y3Qgew0KKyAgICBQb2ludERvdWJsZSogYmVzdEZpdDsgICAgICAgICAgICAgICAgLy9JdCByZXR1cm5zIHRoZSBwb2ludHMgb2YgdGhlIGJlc3QtZml0IHBvbHlub21pYWwuDQorICAgIGludCAgICAgICAgICBudW1iZXJPZlBvaW50czsgICAgICAgICAvL051bWJlciBvZiBCZXN0IGZpdCBwb2ludHMgcmV0dXJuZWQuDQorICAgIGRvdWJsZSogICAgICBwb2x5bm9taWFsQ29lZmZpY2llbnRzOyAvL1BvbHlub21pYWwgQ29lZmZpY2llbnRzIHJldHVybnMgdGhlIGNvZWZmaWNpZW50cyBvZiB0aGUgcG9seW5vbWlhbCBlcXVhdGlvbi4NCisgICAgaW50ICAgICAgICAgIG51bWJlck9mQ29lZmZpY2llbnRzOyAgIC8vTnVtYmVyIG9mIENvZWZmaWNpZW50cyByZXR1cm5lZCBpbiB0aGUgcG9seW5vbWlhbCBjb2VmZmljaWVudHMgYXJyYXkuDQorfSBDb250b3VyRml0UG9seW5vbWlhbFJlcG9ydDsNCisNCit0eXBlZGVmIHN0cnVjdCBQYXJ0aWFsQ2lyY2xlX3N0cnVjdCB7DQorICAgIFBvaW50RmxvYXQgY2VudGVyOyAgICAgLy9DZW50ZXIgb2YgdGhlIGNpcmNsZS4NCisgICAgZG91YmxlICAgICByYWRpdXM7ICAgICAvL1JhZGl1cyBvZiB0aGUgY2lyY2xlLg0KKyAgICBkb3VibGUgICAgIHN0YXJ0QW5nbGU7IC8vU3RhcnQgYW5nbGUgb2YgdGhlIGZpdHRlZCBzdHJ1Y3R1cmUuDQorICAgIGRvdWJsZSAgICAgZW5kQW5nbGU7ICAgLy9FbmQgYW5nbGUgb2YgdGhlIGZpdHRlZCBzdHJ1Y3R1cmUuDQorfSBQYXJ0aWFsQ2lyY2xlOw0KKw0KK3R5cGVkZWYgc3RydWN0IFBhcnRpYWxFbGxpcHNlX3N0cnVjdCB7DQorICAgIFBvaW50RmxvYXQgY2VudGVyOyAgICAgIC8vQ2VudGVyIG9mIHRoZSBFbGxpcHNlLg0KKyAgICBkb3VibGUgICAgIGFuZ2xlOyAgICAgICAvL0FuZ2xlIG9mIHRoZSBlbGxpcHNlLg0KKyAgICBkb3VibGUgICAgIG1ham9yUmFkaXVzOyAvL1RoZSBsZW5ndGggb2YgdGhlIHNlbWktbWFqb3IgYXhpcyBvZiB0aGUgZWxsaXBzZS4NCisgICAgZG91YmxlICAgICBtaW5vclJhZGl1czsgLy9UaGUgbGVuZ3RoIG9mIHRoZSBzZW1pLW1pbm9yIGF4aXMgb2YgdGhlIGVsbGlwc2UuDQorICAgIGRvdWJsZSAgICAgc3RhcnRBbmdsZTsgIC8vU3RhcnQgYW5nbGUgb2YgdGhlIGZpdHRlZCBzdHJ1Y3R1cmUuDQorICAgIGRvdWJsZSAgICAgZW5kQW5nbGU7ICAgIC8vRW5kIGFuZ2xlIG9mIHRoZSBmaXR0ZWQgc3RydWN0dXJlLg0KK30gUGFydGlhbEVsbGlwc2U7DQorDQordHlwZWRlZiBzdHJ1Y3QgU2V0dXBNYXRjaFBhdHRlcm5EYXRhX3N0cnVjdCB7DQorICAgIHVuc2lnbmVkIGNoYXIqIG1hdGNoU2V0dXBEYXRhOyAgICAvL1N0cmluZyBjb250YWluaW5nIHRoZSBtYXRjaCBzZXR1cCBkYXRhLg0KKyAgICBpbnQgICAgICAgICAgICBudW1NYXRjaFNldHVwRGF0YTsgLy9OdW1iZXIgb2YgbWF0Y2ggc2V0dXAgZGF0YS4NCit9IFNldHVwTWF0Y2hQYXR0ZXJuRGF0YTsNCisNCit0eXBlZGVmIHN0cnVjdCBSYW5nZVNldHRpbmdEb3VibGVfc3RydWN0IHsNCisgICAgU2V0dGluZ1R5cGUgc2V0dGluZ1R5cGU7IC8vTWF0Y2ggQ29uc3RyYWludHMgc3BlY2lmaWVzIHRoZSBtYXRjaCBvcHRpb24gd2hvc2UgdmFsdWVzIHlvdSB3YW50IHRvIGNvbnN0cmFpbiBieSB0aGUgZ2l2ZW4gcmFuZ2UuDQorICAgIGRvdWJsZSAgICAgIG1pbjsgICAgICAgICAvL01pbiBpcyB0aGUgbWluaW11bSB2YWx1ZSBvZiB0aGUgcmFuZ2UgZm9yIGEgZ2l2ZW4gTWF0Y2ggQ29uc3RyYWludC4NCisgICAgZG91YmxlICAgICAgbWF4OyAgICAgICAgIC8vTWF4IGlzIHRoZSBtYXhpbXVtIHZhbHVlIG9mIHRoZSByYW5nZSBmb3IgYSBnaXZlbiBNYXRjaCBDb25zdHJhaW50Lg0KK30gUmFuZ2VTZXR0aW5nRG91YmxlOw0KKw0KK3R5cGVkZWYgc3RydWN0IEdlb21ldHJpY0FkdmFuY2VkU2V0dXBEYXRhT3B0aW9uX3N0cnVjdCB7DQorICAgIEdlb21ldHJpY1NldHVwRGF0YUl0ZW0gdHlwZTsgIC8vSXQgZGV0ZXJtaW5lcyB0aGUgb3B0aW9uIHlvdSB3YW50IHRvIHVzZSBkdXJpbmcgdGhlIG1hdGNoaW5nIHBoYXNlLg0KKyAgICBkb3VibGUgICAgICAgICAgICAgICAgIHZhbHVlOyAvL1ZhbHVlIGlzIHRoZSB2YWx1ZSBmb3IgdGhlIG9wdGlvbiB5b3Ugd2FudCB0byB1c2UgZHVyaW5nIHRoZSBtYXRjaGluZyBwaGFzZS4NCit9IEdlb21ldHJpY0FkdmFuY2VkU2V0dXBEYXRhT3B0aW9uOw0KKw0KK3R5cGVkZWYgc3RydWN0IENvbnRvdXJJbmZvUmVwb3J0X3N0cnVjdCB7DQorICAgIFBvaW50RG91YmxlKiBwb2ludHNQaXhlbDsgICAgICAgLy9Qb2ludHMgKHBpeGVsKSBzcGVjaWZpZXMgdGhlIGxvY2F0aW9uIG9mIGV2ZXJ5IHBvaW50IGRldGVjdGVkIG9uIHRoZSBjdXJ2ZSwgaW4gcGl4ZWxzLg0KKyAgICB1bnNpZ25lZCBpbnQgbnVtUG9pbnRzUGl4ZWw7ICAgIC8vTnVtYmVyIG9mIHBvaW50cyBwaXhlbCBlbGVtZW50cy4NCisgICAgUG9pbnREb3VibGUqIHBvaW50c1JlYWw7ICAgICAgICAvL1BvaW50cyAocmVhbCkgc3BlY2lmaWVzIHRoZSBsb2NhdGlvbiBvZiBldmVyeSBwb2ludCBkZXRlY3RlZCBvbiB0aGUgY3VydmUsIGluIGNhbGlicmF0ZWQgdW5pdHMuDQorICAgIHVuc2lnbmVkIGludCBudW1Qb2ludHNSZWFsOyAgICAgLy9OdW1iZXIgb2YgcG9pbnRzIHJlYWwgZWxlbWVudHMuDQorICAgIGRvdWJsZSogICAgICBjdXJ2YXR1cmVQaXhlbDsgICAgLy9DdXJ2YXR1cmUgUGl4ZWwgZGlzcGxheXMgdGhlIGN1cnZhdHVyZSBwcm9maWxlIGZvciB0aGUgc2VsZWN0ZWQgY29udG91ciwgaW4gcGl4ZWxzLg0KKyAgICB1bnNpZ25lZCBpbnQgbnVtQ3VydmF0dXJlUGl4ZWw7IC8vTnVtYmVyIG9mIGN1cnZhdHVyZSBwaXhlbHMuDQorICAgIGRvdWJsZSogICAgICBjdXJ2YXR1cmVSZWFsOyAgICAgLy9DdXJ2YXR1cmUgUmVhbCBkaXNwbGF5cyB0aGUgY3VydmF0dXJlIHByb2ZpbGUgZm9yIHRoZSBzZWxlY3RlZCBjb250b3VyLCBpbiBjYWxpYnJhdGVkIHVuaXRzLg0KKyAgICB1bnNpZ25lZCBpbnQgbnVtQ3VydmF0dXJlUmVhbDsgIC8vTnVtYmVyIG9mIGN1cnZhdHVyZSBSZWFsIGVsZW1lbnRzLg0KKyAgICBkb3VibGUgICAgICAgbGVuZ3RoOyAgICAgICAgICAgIC8vTGVuZ3RoIChwaXhlbCkgc3BlY2lmaWVzIHRoZSBsZW5ndGgsIGluIHBpeGVscywgb2YgdGhlIGN1cnZlcyBpbiB0aGUgaW1hZ2UuDQorICAgIGRvdWJsZSAgICAgICBsZW5ndGhSZWFsOyAgICAgICAgLy9MZW5ndGggKHJlYWwpIHNwZWNpZmllcyB0aGUgbGVuZ3RoLCBpbiBjYWxpYnJhdGVkIHVuaXRzLCBvZiB0aGUgY3VydmVzIHdpdGhpbiB0aGUgY3VydmF0dXJlIHJhbmdlLg0KKyAgICB1bnNpZ25lZCBpbnQgaGFzRXF1YXRpb247ICAgICAgIC8vSGFzIEVxdWF0aW9uIHNwZWNpZmllcyB3aGV0aGVyIHRoZSBjb250b3VyIGhhcyBhIGZpdHRlZCBlcXVhdGlvbi4NCit9IENvbnRvdXJJbmZvUmVwb3J0Ow0KKw0KK3R5cGVkZWYgc3RydWN0IFJPSUxhYmVsX3N0cnVjdCB7DQorICAgIGNoYXIqICAgICAgICBjbGFzc05hbWU7IC8vU3BlY2lmaWVzIHRoZSBjbGFzc25hbWUgeW91IHdhbnQgdG8gc2VnbWVudC4NCisgICAgdW5zaWduZWQgaW50IGxhYmVsOyAgICAgLy9MYWJlbCBpcyB0aGUgbGFiZWwgbnVtYmVyIGFzc29jaWF0ZWQgd2l0aCB0aGUgQ2xhc3MgTmFtZS4NCit9IFJPSUxhYmVsOw0KKw0KK3R5cGVkZWYgc3RydWN0IFN1cGVydmlzZWRDb2xvclNlZ21lbnRhdGlvblJlcG9ydF9zdHJ1Y3Qgew0KKyAgICBST0lMYWJlbCogICAgbGFiZWxPdXQ7ICAgIC8vVGhlIFJvaSBsYWJlbHMgYXJyYXkuDQorICAgIHVuc2lnbmVkIGludCBudW1MYWJlbE91dDsgLy9UaGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIGxhYmVsT3V0IGFycmF5Lg0KK30gU3VwZXJ2aXNlZENvbG9yU2VnbWVudGF0aW9uUmVwb3J0Ow0KKw0KK3R5cGVkZWYgc3RydWN0IExhYmVsVG9ST0lSZXBvcnRfc3RydWN0IHsNCisgICAgUk9JKiogICAgICAgICByb2lBcnJheTsgICAgICAgICAgICAgICAgICAvL0FycmF5IG9mIFJPSXMuDQorICAgIHVuc2lnbmVkIGludCAgbnVtT2ZST0lzOyAgICAgICAgICAgICAgICAgLy9OdW1iZXIgb2YgUk9JcyBpbiB0aGUgcm9pQXJyYXkuDQorICAgIHVuc2lnbmVkIGludCogbGFiZWxzT3V0QXJyYXk7ICAgICAgICAgICAgLy9BcnJheSBvZiBsYWJlbHMuDQorICAgIHVuc2lnbmVkIGludCAgbnVtT2ZMYWJlbHM7ICAgICAgICAgICAgICAgLy9OdW1iZXIgb2YgbGFiZWxzLg0KKyAgICBpbnQqICAgICAgICAgIGlzVG9vTWFueVZlY3RvcnNBcnJheTsgICAgIC8vaXNUb29NYW55VmVjdG9yc0FycmF5IGFycmF5Lg0KKyAgICB1bnNpZ25lZCBpbnQgIGlzVG9vTWFueVZlY3RvcnNBcnJheVNpemU7IC8vTnVtYmVyIG9mIGVsZW1lbnRzIGluIGlzVG9vTWFueVZlY3RvcnNBcnJheS4NCit9IExhYmVsVG9ST0lSZXBvcnQ7DQorDQordHlwZWRlZiBzdHJ1Y3QgQ29sb3JTZWdtZW5hdGlvbk9wdGlvbnNfc3RydWN0IHsNCisgICAgdW5zaWduZWQgaW50IHdpbmRvd1g7ICAgICAgICAgLy9YIGlzIHRoZSB3aW5kb3cgc2l6ZSBpbiB4IGRpcmVjdGlvbi4NCisgICAgdW5zaWduZWQgaW50IHdpbmRvd1k7ICAgICAgICAgLy9ZIGlzIHRoZSB3aW5kb3cgc2l6ZSBpbiB5IGRpcmVjdGlvbi4NCisgICAgdW5zaWduZWQgaW50IHN0ZXBTaXplOyAgICAgICAgLy9TdGVwIFNpemUgaXMgdGhlIGRpc3RhbmNlIGJldHdlZW4gdHdvIHdpbmRvd3MuDQorICAgIHVuc2lnbmVkIGludCBtaW5QYXJ0aWNsZUFyZWE7IC8vTWluIFBhcnRpY2xlIEFyZWEgaXMgdGhlIG1pbmltdW0gbnVtYmVyIG9mIGFsbG93ZWQgcGl4ZWxzLg0KKyAgICB1bnNpZ25lZCBpbnQgbWF4UGFydGljbGVBcmVhOyAvL01heCBQYXJ0aWNsZSBBcmVhIGlzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBhbGxvd2VkIHBpeGVscy4NCisgICAgc2hvcnQgICAgICAgIGlzRmluZVNlZ21lbnQ7ICAgLy9XaGVuIGVuYWJsZWQsIHRoZSBzdGVwIHByb2Nlc3NlcyB0aGUgYm91bmRhcnkgcGl4ZWxzIG9mIGVhY2ggc2VnbWVudGF0aW9uIGNsdXN0ZXIgdXNpbmcgYSBzdGVwIHNpemUgb2YgMS4NCit9IENvbG9yU2VnbWVuYXRpb25PcHRpb25zOw0KKw0KK3R5cGVkZWYgc3RydWN0IENsYXNzaWZpZWRDdXJ2ZV9zdHJ1Y3Qgew0KKyAgICBkb3VibGUgICAgICAgbGVuZ3RoOyAgICAgICAgICAgLy9TcGVjaWZpZXMgdGhlIGxlbmd0aCwgaW4gcGl4ZWxzLCBvZiB0aGUgY3VydmVzIHdpdGhpbiB0aGUgY3VydmF0dXJlIHJhbmdlLg0KKyAgICBkb3VibGUgICAgICAgbGVuZ3RoUmVhbDsgICAgICAgLy9zcGVjaWZpZXMgdGhlIGxlbmd0aCwgaW4gY2FsaWJyYXRlZCB1bml0cywgb2YgdGhlIGN1cnZlcyB3aXRoaW4gdGhlIGN1cnZhdHVyZSByYW5nZS4NCisgICAgZG91YmxlICAgICAgIG1heEN1cnZhdHVyZTsgICAgIC8vc3BlY2lmaWVzIHRoZSBtYXhpbXVtIGN1cnZhdHVyZSwgaW4gcGl4ZWxzLCBmb3IgdGhlIHNlbGVjdGVkIGN1cnZhdHVyZSByYW5nZS4NCisgICAgZG91YmxlICAgICAgIG1heEN1cnZhdHVyZVJlYWw7IC8vc3BlY2lmaWVzIHRoZSBtYXhpbXVtIGN1cnZhdHVyZSwgaW4gY2FsaWJyYXRlZCB1bml0cywgZm9yIHRoZSBzZWxlY3RlZCBjdXJ2YXR1cmUgcmFuZ2UuDQorICAgIHVuc2lnbmVkIGludCBsYWJlbDsgICAgICAgICAgICAvL3NwZWNpZmllcyB0aGUgY2xhc3MgdG8gd2hpY2ggdGhlIHRoZSBzYW1wbGUgYmVsb25ncy4NCisgICAgUG9pbnREb3VibGUqIGN1cnZlUG9pbnRzOyAgICAgIC8vQ3VydmUgUG9pbnRzIGlzIGEgcG9pbnQtY29vcmRpbmF0ZSBjbHVzdGVyIHRoYXQgZGVmaW5lcyB0aGUgcG9pbnRzIG9mIHRoZSBjdXJ2ZS4NCisgICAgdW5zaWduZWQgaW50IG51bUN1cnZlUG9pbnRzOyAgIC8vTnVtYmVyIG9mIGN1cnZlIHBvaW50cy4NCit9IENsYXNzaWZpZWRDdXJ2ZTsNCisNCit0eXBlZGVmIHN0cnVjdCBSYW5nZURvdWJsZV9zdHJ1Y3Qgew0KKyAgICBkb3VibGUgbWluVmFsdWU7IC8vVGhlIG1pbmltdW0gdmFsdWUgb2YgdGhlIHJhbmdlLg0KKyAgICBkb3VibGUgbWF4VmFsdWU7IC8vVGhlIG1heGltdW0gdmFsdWUgb2YgdGhlIHJhbmdlLg0KK30gUmFuZ2VEb3VibGU7DQorDQordHlwZWRlZiBzdHJ1Y3QgUmFuZ2VMYWJlbF9zdHJ1Y3Qgew0KKyAgICBSYW5nZURvdWJsZSAgcmFuZ2U7IC8vU3BlY2lmaWVzIHRoZSByYW5nZSBvZiBjdXJ2YXR1cmUgdmFsdWVzLg0KKyAgICB1bnNpZ25lZCBpbnQgbGFiZWw7IC8vQ2xhc3MgTGFiZWwgc3BlY2lmaWVzIHRoZSBjbGFzcyB0byB3aGljaCB0aGUgdGhlIHNhbXBsZSBiZWxvbmdzLg0KK30gUmFuZ2VMYWJlbDsNCisNCit0eXBlZGVmIHN0cnVjdCBDdXJ2YXR1cmVBbmFseXNpc1JlcG9ydF9zdHJ1Y3Qgew0KKyAgICBDbGFzc2lmaWVkQ3VydmUqIGN1cnZlczsgICAgDQorICAgIHVuc2lnbmVkIGludCAgICAgbnVtQ3VydmVzOyANCit9IEN1cnZhdHVyZUFuYWx5c2lzUmVwb3J0Ow0KKw0KK3R5cGVkZWYgc3RydWN0IERpc3Bhcml0eV9zdHJ1Y3Qgew0KKyAgICBQb2ludERvdWJsZSBjdXJyZW50OyAgIC8vQ3VycmVudCBpcyBhIGFycmF5IG9mIHBvaW50cyB0aGF0IGRlZmluZXMgdGhlIHRhcmdldCBjb250b3VyLg0KKyAgICBQb2ludERvdWJsZSByZWZlcmVuY2U7IC8vcmVmZXJlbmNlIGlzIGEgYXJyYXkgb2YgcG9pbnRzIHRoYXQgZGVmaW5lcyB0aGUgdGVtcGxhdGUgY29udG91ci4NCisgICAgZG91YmxlICAgICAgZGlzdGFuY2U7ICAvL1NwZWNpZmllcyB0aGUgZGlzdGFuY2UsIGluIHBpeGVscywgYmV0d2VlbiB0aGUgdGVtcGxhdGUgY29udG91ciBwb2ludCBhbmQgdGhlIHRhcmdldCBjb250b3VyIHBvaW50Lg0KK30gRGlzcGFyaXR5Ow0KKw0KK3R5cGVkZWYgc3RydWN0IENvbXB1dGVEaXN0YW5jZXNSZXBvcnRfc3RydWN0IHsNCisgICAgRGlzcGFyaXR5KiAgIGRpc3RhbmNlczsgICAgICAgIC8vRGlzdGFuY2VzIGlzIGFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIGNvbXB1dGVkIGRpc3RhbmNlcy4NCisgICAgdW5zaWduZWQgaW50IG51bURpc3RhbmNlczsgICAgIC8vTnVtYmVyIGVsZW1lbnRzIGluIHRoZSBkaXN0YW5jZXMgYXJyYXkuDQorICAgIERpc3Bhcml0eSogICBkaXN0YW5jZXNSZWFsOyAgICAvL0Rpc3RhbmNlcyBSZWFsIGlzIGFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIGNvbXB1dGVkIGRpc3RhbmNlcyBpbiBjYWxpYnJhdGVkIHVuaXRzLg0KKyAgICB1bnNpZ25lZCBpbnQgbnVtRGlzdGFuY2VzUmVhbDsgLy9OdW1iZXIgb2YgZWxlbWVudHMgaW4gcmVhbCBkaXN0YW5jZXMgYXJyYXkuDQorfSBDb21wdXRlRGlzdGFuY2VzUmVwb3J0Ow0KKw0KK3R5cGVkZWYgc3RydWN0IE1hdGNoTW9kZV9zdHJ1Y3Qgew0KKyAgICB1bnNpZ25lZCBpbnQgcm90YXRpb247ICAvL1JvdGF0aW9uIFdoZW4gZW5hYmxlZCwgdGhlIEZ1bmN0aW9uIHNlYXJjaGVzIGZvciBvY2N1cnJlbmNlcyBvZiB0aGUgdGVtcGxhdGUgaW4gdGhlIGluc3BlY3Rpb24gaW1hZ2UsIGFsbG93aW5nIGZvciB0ZW1wbGF0ZSBtYXRjaGVzIHRvIGJlIHJvdGF0ZWQuDQorICAgIHVuc2lnbmVkIGludCBzY2FsZTsgICAgIC8vUm90YXRpb24gV2hlbiBlbmFibGVkLCB0aGUgRnVuY3Rpb24gc2VhcmNoZXMgZm9yIG9jY3VycmVuY2VzIG9mIHRoZSB0ZW1wbGF0ZSBpbiB0aGUgaW5zcGVjdGlvbiBpbWFnZSwgYWxsb3dpbmcgZm9yIHRlbXBsYXRlIG1hdGNoZXMgdG8gYmUgcm90YXRlZC4NCisgICAgdW5zaWduZWQgaW50IG9jY2x1c2lvbjsgLy9PY2NsdXNpb24gc3BlY2lmaWVzIHdoZXRoZXIgb3Igbm90IHRvIHNlYXJjaCBmb3Igb2NjbHVkZWQgdmVyc2lvbnMgb2YgdGhlIHNoYXBlLg0KK30gTWF0Y2hNb2RlOw0KKw0KK3R5cGVkZWYgc3RydWN0IENsYXNzaWZpZWREaXNwYXJpdHlfc3RydWN0IHsNCisgICAgZG91YmxlICAgICAgIGxlbmd0aDsgICAgICAgICAgICAgICAgLy9MZW5ndGggKHBpeGVsKSBzcGVjaWZpZXMgdGhlIGxlbmd0aCwgaW4gcGl4ZWxzLCBvZiB0aGUgY3VydmVzIHdpdGhpbiB0aGUgY3VydmF0dXJlIHJhbmdlLg0KKyAgICBkb3VibGUgICAgICAgbGVuZ3RoUmVhbDsgICAgICAgICAgICAvL0xlbmd0aCAocmVhbCkgc3BlY2lmaWVzIHRoZSBsZW5ndGgsIGluIGNhbGlicmF0ZWQgdW5pdHMsIG9mIHRoZSBjdXJ2ZXMgd2l0aGluIHRoZSBjdXJ2YXR1cmUgcmFuZ2UuDQorICAgIGRvdWJsZSAgICAgICBtYXhEaXN0YW5jZTsgICAgICAgICAgIC8vTWF4aW11bSBEaXN0YW5jZSAocGl4ZWwpIHNwZWNpZmllcyB0aGUgbWF4aW11bSBkaXN0YW5jZSwgaW4gcGl4ZWxzLCBiZXR3ZWVuIHBvaW50cyBhbG9uZyB0aGUgc2VsZWN0ZWQgY29udG91ciBhbmQgdGhlIHRlbXBsYXRlIGNvbnRvdXIuDQorICAgIGRvdWJsZSAgICAgICBtYXhEaXN0YW5jZVJlYWw7ICAgICAgIC8vTWF4aW11bSBEaXN0YW5jZSAocmVhbCkgc3BlY2lmaWVzIHRoZSBtYXhpbXVtIGRpc3RhbmNlLCBpbiBjYWxpYnJhdGVkIHVuaXRzLCBiZXR3ZWVuIHBvaW50cyBhbG9uZyB0aGUgc2VsZWN0ZWQgY29udG91ciBhbmQgdGhlIHRlbXBsYXRlIGNvbnRvdXIuDQorICAgIHVuc2lnbmVkIGludCBsYWJlbDsgICAgICAgICAgICAgICAgIC8vQ2xhc3MgTGFiZWwgc3BlY2lmaWVzIHRoZSBjbGFzcyB0byB3aGljaCB0aGUgdGhlIHNhbXBsZSBiZWxvbmdzLg0KKyAgICBQb2ludERvdWJsZSogdGVtcGxhdGVTdWJzZWN0aW9uOyAgICAvL1RlbXBsYXRlIHN1YnNlY3Rpb24gcG9pbnRzIGlzIGFuIGFycmF5IG9mIHBvaW50cyB0aGF0IGRlZmluZXMgdGhlIGJvdW5kYXJ5IG9mIHRoZSB0ZW1wbGF0ZS4NCisgICAgdW5zaWduZWQgaW50IG51bVRlbXBsYXRlU3Vic2VjdGlvbjsgLy9OdW1iZXIgb2YgcmVmZXJlbmNlIHBvaW50cy4NCisgICAgUG9pbnREb3VibGUqIHRhcmdldFN1YnNlY3Rpb247ICAgICAgLy9DdXJyZW50IFBvaW50cyhUYXJnZXQgc3Vic2VjdGlvbiBwb2ludHMpIGlzIGFuIGFycmF5IG9mIHBvaW50cyB0aGF0IGRlZmluZXMgdGhlIGJvdW5kYXJ5IG9mIHRoZSB0YXJnZXQuDQorICAgIHVuc2lnbmVkIGludCBudW1UYXJnZXRTdWJzZWN0aW9uOyAgIC8vTnVtYmVyIG9mIGN1cnJlbnQgcG9pbnRzLg0KK30gQ2xhc3NpZmllZERpc3Bhcml0eTsNCisNCit0eXBlZGVmIHN0cnVjdCBDbGFzc2lmeURpc3RhbmNlc1JlcG9ydF9zdHJ1Y3Qgew0KKyAgICBDbGFzc2lmaWVkRGlzcGFyaXR5KiBjbGFzc2lmaWVkRGlzdGFuY2VzOyAgICAvL0Rpc3Bhcml0eSBhcnJheSBjb250YWluaW5nIHRoZSBjbGFzc2lmaWVkIGRpc3RhbmNlcy4NCisgICAgdW5zaWduZWQgaW50ICAgICAgICAgbnVtQ2xhc3NpZmllZERpc3RhbmNlczsgLy9OdW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIGRpc3Bhcml0eSBhcnJheS4NCit9IENsYXNzaWZ5RGlzdGFuY2VzUmVwb3J0Ow0KKw0KK3R5cGVkZWYgc3RydWN0IENvbnRvdXJDb21wdXRlQ3VydmF0dXJlUmVwb3J0X3N0cnVjdCB7DQorICAgIGRvdWJsZSogICAgICBjdXJ2YXR1cmVQaXhlbDsgICAgLy9DdXJ2YXR1cmUgUGl4ZWwgZGlzcGxheXMgdGhlIGN1cnZhdHVyZSBwcm9maWxlIGZvciB0aGUgc2VsZWN0ZWQgY29udG91ciwgaW4gcGl4ZWxzLg0KKyAgICB1bnNpZ25lZCBpbnQgbnVtQ3VydmF0dXJlUGl4ZWw7IC8vTnVtYmVyIG9mIGN1cnZhdHVyZSBwaXhlbHMuDQorICAgIGRvdWJsZSogICAgICBjdXJ2YXR1cmVSZWFsOyAgICAgLy9DdXJ2YXR1cmUgUmVhbCBkaXNwbGF5cyB0aGUgY3VydmF0dXJlIHByb2ZpbGUgZm9yIHRoZSBzZWxlY3RlZCBjb250b3VyLCBpbiBjYWxpYnJhdGVkIHVuaXRzLg0KKyAgICB1bnNpZ25lZCBpbnQgbnVtQ3VydmF0dXJlUmVhbDsgIC8vTnVtYmVyIG9mIGN1cnZhdHVyZSBSZWFsIGVsZW1lbnRzLg0KK30gQ29udG91ckNvbXB1dGVDdXJ2YXR1cmVSZXBvcnQ7DQorDQordHlwZWRlZiBzdHJ1Y3QgQ29udG91ck92ZXJsYXlTZXR0aW5nc19zdHJ1Y3Qgew0KKyAgICB1bnNpZ25lZCBpbnQgb3ZlcmxheTsgICAgICAgLy9PdmVybGF5IHNwZWNpZmllcyB3aGV0aGVyIHRvIGRpc3BsYXkgdGhlIG92ZXJsYXkgb24gdGhlIGltYWdlLg0KKyAgICBSR0JWYWx1ZSAgICAgY29sb3I7ICAgICAgICAgLy9Db2xvciBpcyB0aGUgY29sb3Igb2YgdGhlIG92ZXJsYXkuDQorICAgIHVuc2lnbmVkIGludCB3aWR0aDsgICAgICAgICAvL1dpZHRoIHNwZWNpZmllcyB0aGUgd2lkdGggb2YgdGhlIG92ZXJsYXkgaW4gcGl4ZWxzLg0KKyAgICB1bnNpZ25lZCBpbnQgbWFpbnRhaW5XaWR0aDsgLy9NYWludGFpbiBXaWR0aD8gc3BlY2lmaWVzIHdoZXRoZXIgeW91IHdhbnQgdGhlIG92ZXJsYXkgbWVhc3VyZWQgaW4gc2NyZWVuIHBpeGVscyBvciBpbWFnZSBwaXhlbHMuDQorfSBDb250b3VyT3ZlcmxheVNldHRpbmdzOw0KKw0KK3R5cGVkZWYgc3RydWN0IEN1cnZlUGFyYW1ldGVyc19zdHJ1Y3Qgew0KKyAgICBFeHRyYWN0aW9uTW9kZSBleHRyYWN0aW9uTW9kZTsgLy9TcGVjaWZpZXMgdGhlIG1ldGhvZCB0aGUgZnVuY3Rpb24gdXNlcyB0byBpZGVudGlmeSBjdXJ2ZXMgaW4gdGhlIGltYWdlLg0KKyAgICBpbnQgICAgICAgICAgICB0aHJlc2hvbGQ7ICAgICAgLy9TcGVjaWZpZXMgdGhlIG1pbmltdW0gY29udHJhc3QgYSBzZWVkIHBvaW50IG11c3QgaGF2ZSBpbiBvcmRlciB0byBiZWdpbiBhIGN1cnZlLg0KKyAgICBFZGdlRmlsdGVyU2l6ZSBmaWx0ZXJTaXplOyAgICAgLy9TcGVjaWZpZXMgdGhlIHdpZHRoIG9mIHRoZSBlZGdlIGZpbHRlciB0aGUgZnVuY3Rpb24gdXNlcyB0byBpZGVudGlmeSBjdXJ2ZXMgaW4gdGhlIGltYWdlLg0KKyAgICBpbnQgICAgICAgICAgICBtaW5MZW5ndGg7ICAgICAgLy9TcGVjaWZpZXMgdGhlIGxlbmd0aCwgaW4gcGl4ZWxzLCBvZiB0aGUgc21hbGxlc3QgY3VydmUgdGhlIGZ1bmN0aW9uIHdpbGwgZXh0cmFjdC4NCisgICAgaW50ICAgICAgICAgICAgc2VhcmNoU3RlcDsgICAgIC8vU2VhcmNoIFN0ZXAgU2l6ZSBzcGVjaWZpZXMgdGhlIGRpc3RhbmNlLCBpbiB0aGUgeSBkaXJlY3Rpb24sIGJldHdlZW4gdGhlIGltYWdlIHJvd3MgdGhhdCB0aGUgYWxnb3JpdGhtIGluc3BlY3RzIGZvciBjdXJ2ZSBzZWVkIHBvaW50cy4NCisgICAgaW50ICAgICAgICAgICAgbWF4RW5kUG9pbnRHYXA7IC8vU3BlY2lmaWVzIHRoZSBtYXhpbXVtIGdhcCwgaW4gcGl4ZWxzLCBiZXR3ZWVuIHRoZSBlbmRwb2ludHMgb2YgYSBjdXJ2ZSB0aGF0IHRoZSBmdW5jdGlvbiBpZGVudGlmaWVzIGFzIGEgY2xvc2VkIGN1cnZlLg0KKyAgICBpbnQgICAgICAgICAgICBzdWJwaXhlbDsgICAgICAgLy9TdWJwaXhlbCBzcGVjaWZpZXMgd2hldGhlciB0byBkZXRlY3QgY3VydmUgcG9pbnRzIHdpdGggc3VicGl4ZWwgYWNjdXJhY3kuDQorfSBDdXJ2ZVBhcmFtZXRlcnM7DQorDQordHlwZWRlZiBzdHJ1Y3QgRXh0cmFjdENvbnRvdXJSZXBvcnRfc3RydWN0IHsNCisgICAgUG9pbnREb3VibGUqIGNvbnRvdXJQb2ludHM7ICAgIC8vQ29udG91ciBQb2ludHMgc3BlY2lmaWVzIGV2ZXJ5IHBvaW50IGZvdW5kIG9uIHRoZSBjb250b3VyLg0KKyAgICBpbnQgICAgICAgICAgbnVtQ29udG91clBvaW50czsgLy9OdW1iZXIgb2YgY29udG91ciBwb2ludHMuDQorICAgIFBvaW50RG91YmxlKiBzb3VyY2VQb2ludHM7ICAgICAvL1NvdXJjZSBJbWFnZSBQb2ludHMgc3BlY2lmaWVzIGV2ZXJ5IHBvaW50IGZvdW5kIG9uIHRoZSBjb250b3VyIGluIHRoZSBzb3VyY2UgaW1hZ2UuDQorICAgIGludCAgICAgICAgICBudW1Tb3VyY2VQb2ludHM7ICAvL051bWJlciBvZiBzb3VyY2UgcG9pbnRzLg0KK30gRXh0cmFjdENvbnRvdXJSZXBvcnQ7DQorDQordHlwZWRlZiBzdHJ1Y3QgQ29ubmVjdGlvbkNvbnN0cmFpbnRfc3RydWN0IHsNCisgICAgQ29ubmVjdGlvbkNvbnN0cmFpbnRUeXBlIGNvbnN0cmFpbnRUeXBlOyAvL0NvbnN0cmFpbnQgVHlwZSBzcGVjaWZpZXMgd2hhdCBjcml0ZXJpYSB0byB1c2UgdG8gY29uc2lkZXIgdHdvIGN1cnZlcyBwYXJ0IG9mIGEgY29udG91ci4NCisgICAgUmFuZ2VEb3VibGUgICAgICAgICAgICAgIHJhbmdlOyAgICAgICAgICAvL1NwZWNpZmllcyByYW5nZSBmb3IgYSBnaXZlbiBNYXRjaCBDb25zdHJhaW50Lg0KK30gQ29ubmVjdGlvbkNvbnN0cmFpbnQ7DQorDQordHlwZWRlZiBzdHJ1Y3QgRXh0cmFjdFRleHR1cmVGZWF0dXJlc1JlcG9ydF9zdHJ1Y3Qgew0KKyAgICBpbnQqICAgICB3YXZlbGV0QmFuZHM7ICAgICAgICAvL1RoZSBhcnJheSBoYXZpbmcgYWxsIHRoZSBXYXZlbGV0IEJhbmtzIHVzZWQgZm9yIGV4dHJhY3Rpb24uDQorICAgIGludCAgICAgIG51bVdhdmVsZXRCYW5kczsgICAgIC8vTnVtYmVyIG9mIHdhdmVsZXQgYmFua3MgaW4gdGhlIEFycmF5Lg0KKyAgICBkb3VibGUqKiB0ZXh0dXJlRmVhdHVyZXM7ICAgICAvLzItRCBhcnJheSB0byBzdG9yZSBhbGwgdGhlIFRleHR1cmUgZmVhdHVyZXMgZXh0cmFjdGVkLg0KKyAgICBpbnQgICAgICB0ZXh0dXJlRmVhdHVyZXNSb3dzOyAvL051bWJlciBvZiBSb3dzIGluIHRoZSBUZXh0dXJlIEZlYXR1cmVzIGFycmF5Lg0KKyAgICBpbnQgICAgICB0ZXh0dXJlRmVhdHVyZXNDb2xzOyAvL051bWJlciBvZiBDb2xzIGluIFRleHR1cmUgRmVhdHVyZXMgYXJyYXkuDQorfSBFeHRyYWN0VGV4dHVyZUZlYXR1cmVzUmVwb3J0Ow0KKw0KK3R5cGVkZWYgc3RydWN0IFdhdmVsZXRCYW5kc1JlcG9ydF9zdHJ1Y3Qgew0KKyAgICBmbG9hdCoqIExMQmFuZDsgIC8vMi1EIGFycmF5IGZvciBMTCBCYW5kLg0KKyAgICBmbG9hdCoqIExIQmFuZDsgIC8vMi1EIGFycmF5IGZvciBMSCBCYW5kLg0KKyAgICBmbG9hdCoqIEhMQmFuZDsgIC8vMi1EIGFycmF5IGZvciBITCBCYW5kLg0KKyAgICBmbG9hdCoqIEhIQmFuZDsgIC8vMi1EIGFycmF5IGZvciBISCBCYW5kLg0KKyAgICBmbG9hdCoqIExMTEJhbmQ7IC8vMi1EIGFycmF5IGZvciBMTEwgQmFuZC4NCisgICAgZmxvYXQqKiBMTEhCYW5kOyAvLzItRCBhcnJheSBmb3IgTExIIEJhbmQuDQorICAgIGZsb2F0ICAgTEhMQmFuZDsgLy8yLUQgYXJyYXkgZm9yIExITCBCYW5kLg0KKyAgICBmbG9hdCoqIExISEJhbmQ7IC8vMi1EIGFycmF5IGZvciBMSEggQmFuZC4NCisgICAgaW50ICAgICByb3dzOyAgICAvL051bWJlciBvZiBSb3dzIGZvciBlYWNoIG9mIHRoZSAyLUQgYXJyYXlzLg0KKyAgICBpbnQgICAgIGNvbHM7ICAgIC8vTnVtYmVyIG9mIENvbHVtbnMgZm9yIGVhY2ggb2YgdGhlIDItRCBhcnJheXMuDQorfSBXYXZlbGV0QmFuZHNSZXBvcnQ7DQorDQordHlwZWRlZiBzdHJ1Y3QgQ2lyY2xlRml0T3B0aW9uc19zdHJ1Y3Qgew0KKyAgICBpbnQgICAgICAgICAgICAgbWF4UmFkaXVzOyAgIC8vU3BlY2lmaWVzIHRoZSBhY2NlcHRhYmxlIGRpc3RhbmNlLCBpbiBwaXhlbHMsIHRoYXQgYSBwb2ludCBkZXRlcm1pbmVkIHRvIGJlbG9uZyB0byB0aGUgY2lyY2xlIGNhbiBiZSBmcm9tIHRoZSBwZXJpbWV0ZXIgb2YgdGhlIGNpcmNsZS4NCisgICAgZG91YmxlICAgICAgICAgIHN0ZXBTaXplOyAgICAvL1N0ZXAgU2l6ZSBpcyB0aGUgYW5nbGUsIGluIGRlZ3JlZXMsIGJldHdlZW4gZWFjaCByYWRpYWwgbGluZSBpbiB0aGUgYW5udWxhciByZWdpb24uDQorICAgIFJha2VQcm9jZXNzVHlwZSBwcm9jZXNzVHlwZTsgLy9NZXRob2QgdXNlZCB0byBwcm9jZXNzIHRoZSBkYXRhIGV4dHJhY3RlZCBmb3IgZWRnZSBkZXRlY3Rpb24uDQorfSBDaXJjbGVGaXRPcHRpb25zOw0KKw0KK3R5cGVkZWYgc3RydWN0IEVkZ2VPcHRpb25zMl9zdHJ1Y3Qgew0KKyAgICBFZGdlUG9sYXJpdHlTZWFyY2hNb2RlIHBvbGFyaXR5OyAgICAgICAgICAgICAvL1NwZWNpZmllcyB0aGUgcG9sYXJpdHkgb2YgdGhlIGVkZ2VzIHRvIGJlIGZvdW5kLg0KKyAgICB1bnNpZ25lZCBpbnQgICAgICAgICAgIGtlcm5lbFNpemU7ICAgICAgICAgICAvL1NwZWNpZmllcyB0aGUgc2l6ZSBvZiB0aGUgZWRnZSBkZXRlY3Rpb24ga2VybmVsLg0KKyAgICB1bnNpZ25lZCBpbnQgICAgICAgICAgIHdpZHRoOyAgICAgICAgICAgICAgICAvL1NwZWNpZmllcyB0aGUgbnVtYmVyIG9mIHBpeGVscyBhdmVyYWdlZCBwZXJwZW5kaWN1bGFyIHRvIHRoZSBzZWFyY2ggZGlyZWN0aW9uIHRvIGNvbXB1dGUgdGhlIGVkZ2UgcHJvZmlsZSBzdHJlbmd0aCBhdCBlYWNoIHBvaW50IGFsb25nIHRoZSBzZWFyY2ggUk9JLg0KKyAgICBmbG9hdCAgICAgICAgICAgICAgICAgIG1pblRocmVzaG9sZDsgICAgICAgICAvL1NwZWNpZmllcyB0aGUgbWluaW11bSBlZGdlIHN0cmVuZ3RoIChncmFkaWVudCBtYWduaXR1ZGUpIHJlcXVpcmVkIGZvciBhIGRldGVjdGVkIGVkZ2UuDQorICAgIEludGVycG9sYXRpb25NZXRob2QgICAgaW50ZXJwb2xhdGlvblR5cGU7ICAgIC8vU3BlY2lmaWVzIHRoZSBpbnRlcnBvbGF0aW9uIG1ldGhvZCB1c2VkIHRvIGxvY2F0ZSB0aGUgZWRnZSBwb3NpdGlvbi4NCisgICAgQ29sdW1uUHJvY2Vzc2luZ01vZGUgICBjb2x1bW5Qcm9jZXNzaW5nTW9kZTsgLy9TcGVjaWZpZXMgdGhlIG1ldGhvZCB1c2VkIHRvIGZpbmQgdGhlIHN0cmFpZ2h0IGVkZ2UuDQorfSBFZGdlT3B0aW9uczI7DQorDQordHlwZWRlZiBzdHJ1Y3QgRmluZENpcmN1bGFyRWRnZU9wdGlvbnNfc3RydWN0IHsNCisgICAgU3Bva2VEaXJlY3Rpb24gZGlyZWN0aW9uOyAgICAgICAgLy9TcGVjaWZpZXMgdGhlIFNwb2tlIGRpcmVjdGlvbiB0byBzZWFyY2ggaW4gdGhlIFJPSS4NCisgICAgaW50ICAgICAgICAgICAgc2hvd1NlYXJjaEFyZWE7ICAgLy9JZiBUUlVFLCB0aGUgZnVuY3Rpb24gb3ZlcmxheXMgdGhlIHNlYXJjaCBhcmVhIG9uIHRoZSBpbWFnZS4NCisgICAgaW50ICAgICAgICAgICAgc2hvd1NlYXJjaExpbmVzOyAgLy9JZiBUUlVFLCB0aGUgZnVuY3Rpb24gb3ZlcmxheXMgdGhlIHNlYXJjaCBsaW5lcyB1c2VkIHRvIGxvY2F0ZSB0aGUgZWRnZXMgb24gdGhlIGltYWdlLg0KKyAgICBpbnQgICAgICAgICAgICBzaG93RWRnZXNGb3VuZDsgICAvL0lmIFRSVUUsIHRoZSBmdW5jdGlvbiBvdmVybGF5cyB0aGUgbG9jYXRpb25zIG9mIHRoZSBlZGdlcyBmb3VuZCBvbiB0aGUgaW1hZ2UuDQorICAgIGludCAgICAgICAgICAgIHNob3dSZXN1bHQ7ICAgICAgIC8vSWYgVFJVRSwgdGhlIGZ1bmN0aW9uIG92ZXJsYXlzIHRoZSBoaXQgbGluZXMgdG8gdGhlIG9iamVjdCBhbmQgdGhlIGVkZ2UgdXNlZCB0byBnZW5lcmF0ZSB0aGUgaGl0IGxpbmUgb24gdGhlIHJlc3VsdCBpbWFnZS4NCisgICAgUkdCVmFsdWUgICAgICAgc2VhcmNoQXJlYUNvbG9yOyAgLy9TcGVjaWZpZXMgdGhlIFJHQiBjb2xvciB2YWx1ZSB0byB1c2UgdG8gb3ZlcmxheSB0aGUgc2VhcmNoIGFyZWEuDQorICAgIFJHQlZhbHVlICAgICAgIHNlYXJjaExpbmVzQ29sb3I7IC8vU3BlY2lmaWVzIHRoZSBSR0IgY29sb3IgdmFsdWUgdG8gdXNlIHRvIG92ZXJsYXkgdGhlIHNlYXJjaCBsaW5lcy4NCisgICAgUkdCVmFsdWUgICAgICAgc2VhcmNoRWRnZXNDb2xvcjsgLy9TcGVjaWZpZXMgdGhlIFJHQiBjb2xvciB2YWx1ZSB0byB1c2UgdG8gb3ZlcmxheSB0aGUgc2VhcmNoIGVkZ2VzLg0KKyAgICBSR0JWYWx1ZSAgICAgICByZXN1bHRDb2xvcjsgICAgICAvL1NwZWNpZmllcyB0aGUgUkdCIGNvbG9yIHZhbHVlIHRvIHVzZSB0byBvdmVybGF5IHRoZSByZXN1bHRzLg0KKyAgICBjaGFyKiAgICAgICAgICBvdmVybGF5R3JvdXBOYW1lOyAvL1NwZWNpZmllcyB0aGUgb3ZlcmxheSBncm91cCBuYW1lIHRvIGFzc2lnbiB0byB0aGUgb3ZlcmxheXMuDQorICAgIEVkZ2VPcHRpb25zMiAgIGVkZ2VPcHRpb25zOyAgICAgIC8vU3BlY2lmaWVzIHRoZSBlZGdlIGRldGVjdGlvbiBvcHRpb25zIGFsb25nIGEgc2luZ2xlIHNlYXJjaCBsaW5lLg0KK30gRmluZENpcmN1bGFyRWRnZU9wdGlvbnM7DQorDQordHlwZWRlZiBzdHJ1Y3QgRmluZENvbmNlbnRyaWNFZGdlT3B0aW9uc19zdHJ1Y3Qgew0KKyAgICBDb25jZW50cmljUmFrZURpcmVjdGlvbiBkaXJlY3Rpb247ICAgICAgICAvL1NwZWNpZmllcyB0aGUgQ29uY2VudHJpYyBSYWtlIGRpcmVjdGlvbi4NCisgICAgaW50ICAgICAgICAgICAgICAgICAgICAgc2hvd1NlYXJjaEFyZWE7ICAgLy9JZiBUUlVFLCB0aGUgZnVuY3Rpb24gb3ZlcmxheXMgdGhlIHNlYXJjaCBhcmVhIG9uIHRoZSBpbWFnZS4NCisgICAgaW50ICAgICAgICAgICAgICAgICAgICAgc2hvd1NlYXJjaExpbmVzOyAgLy9JZiBUUlVFLCB0aGUgZnVuY3Rpb24gb3ZlcmxheXMgdGhlIHNlYXJjaCBsaW5lcyB1c2VkIHRvIGxvY2F0ZSB0aGUgZWRnZXMgb24gdGhlIGltYWdlLg0KKyAgICBpbnQgICAgICAgICAgICAgICAgICAgICBzaG93RWRnZXNGb3VuZDsgICAvL0lmIFRSVUUsIHRoZSBmdW5jdGlvbiBvdmVybGF5cyB0aGUgbG9jYXRpb25zIG9mIHRoZSBlZGdlcyBmb3VuZCBvbiB0aGUgaW1hZ2UuDQorICAgIGludCAgICAgICAgICAgICAgICAgICAgIHNob3dSZXN1bHQ7ICAgICAgIC8vSWYgVFJVRSwgdGhlIGZ1bmN0aW9uIG92ZXJsYXlzIHRoZSBoaXQgbGluZXMgdG8gdGhlIG9iamVjdCBhbmQgdGhlIGVkZ2UgdXNlZCB0byBnZW5lcmF0ZSB0aGUgaGl0IGxpbmUgb24gdGhlIHJlc3VsdCBpbWFnZS4NCisgICAgUkdCVmFsdWUgICAgICAgICAgICAgICAgc2VhcmNoQXJlYUNvbG9yOyAgLy9TcGVjaWZpZXMgdGhlIFJHQiBjb2xvciB2YWx1ZSB0byB1c2UgdG8gb3ZlcmxheSB0aGUgc2VhcmNoIGFyZWEuDQorICAgIFJHQlZhbHVlICAgICAgICAgICAgICAgIHNlYXJjaExpbmVzQ29sb3I7IC8vU3BlY2lmaWVzIHRoZSBSR0IgY29sb3IgdmFsdWUgdG8gdXNlIHRvIG92ZXJsYXkgdGhlIHNlYXJjaCBsaW5lcy4NCisgICAgUkdCVmFsdWUgICAgICAgICAgICAgICAgc2VhcmNoRWRnZXNDb2xvcjsgLy9TcGVjaWZpZXMgdGhlIFJHQiBjb2xvciB2YWx1ZSB0byB1c2UgdG8gb3ZlcmxheSB0aGUgc2VhcmNoIGVkZ2VzLg0KKyAgICBSR0JWYWx1ZSAgICAgICAgICAgICAgICByZXN1bHRDb2xvcjsgICAgICAvL1NwZWNpZmllcyB0aGUgUkdCIGNvbG9yIHZhbHVlIHRvIHVzZSB0byBvdmVybGF5IHRoZSByZXN1bHRzLg0KKyAgICBjaGFyKiAgICAgICAgICAgICAgICAgICBvdmVybGF5R3JvdXBOYW1lOyAvL1NwZWNpZmllcyB0aGUgb3ZlcmxheSBncm91cCBuYW1lIHRvIGFzc2lnbiB0byB0aGUgb3ZlcmxheXMuDQorICAgIEVkZ2VPcHRpb25zMiAgICAgICAgICAgIGVkZ2VPcHRpb25zOyAgICAgIC8vU3BlY2lmaWVzIHRoZSBlZGdlIGRldGVjdGlvbiBvcHRpb25zIGFsb25nIGEgc2luZ2xlIHNlYXJjaCBsaW5lLg0KK30gRmluZENvbmNlbnRyaWNFZGdlT3B0aW9uczsNCisNCit0eXBlZGVmIHN0cnVjdCBDb25jZW50cmljRWRnZUZpdE9wdGlvbnNfc3RydWN0IHsNCisgICAgaW50ICAgICAgICAgICAgIG1heFJhZGl1czsgICAvL1NwZWNpZmllcyB0aGUgYWNjZXB0YWJsZSBkaXN0YW5jZSwgaW4gcGl4ZWxzLCB0aGF0IGEgcG9pbnQgZGV0ZXJtaW5lZCB0byBiZWxvbmcgdG8gdGhlIGNpcmNsZSBjYW4gYmUgZnJvbSB0aGUgcGVyaW1ldGVyIG9mIHRoZSBjaXJjbGUuDQorICAgIGRvdWJsZSAgICAgICAgICBzdGVwU2l6ZTsgICAgLy9UaGUgc2FtcGxpbmcgZmFjdG9yIHRoYXQgZGV0ZXJtaW5lcyB0aGUgZ2FwIGJldHdlZW4gdGhlIHJha2UgbGluZXMuDQorICAgIFJha2VQcm9jZXNzVHlwZSBwcm9jZXNzVHlwZTsgLy9NZXRob2QgdXNlZCB0byBwcm9jZXNzIHRoZSBkYXRhIGV4dHJhY3RlZCBmb3IgZWRnZSBkZXRlY3Rpb24uDQorfSBDb25jZW50cmljRWRnZUZpdE9wdGlvbnM7DQorDQordHlwZWRlZiBzdHJ1Y3QgRmluZENvbmNlbnRyaWNFZGdlUmVwb3J0X3N0cnVjdCB7DQorICAgIFBvaW50RmxvYXQgc3RhcnRQdDsgICAgICAgICAgIC8vUGl4ZWwgQ29vcmRpbmF0ZXMgZm9yIHN0YXJ0aW5nIHBvaW50IG9mIHRoZSBlZGdlLg0KKyAgICBQb2ludEZsb2F0IGVuZFB0OyAgICAgICAgICAgICAvL1BpeGVsIENvb3JkaW5hdGVzIGZvciBlbmQgcG9pbnQgb2YgdGhlIGVkZ2UuDQorICAgIFBvaW50RmxvYXQgc3RhcnRQdENhbGlicmF0ZWQ7IC8vUmVhbCB3b3JsZCBDb29yZGluYXRlcyBmb3Igc3RhcnRpbmcgcG9pbnQgb2YgdGhlIGVkZ2UuDQorICAgIFBvaW50RmxvYXQgZW5kUHRDYWxpYnJhdGVkOyAgIC8vUmVhbCB3b3JsZCBDb29yZGluYXRlcyBmb3IgZW5kIHBvaW50IG9mIHRoZSBlZGdlLg0KKyAgICBkb3VibGUgICAgIGFuZ2xlOyAgICAgICAgICAgICAvL0FuZ2xlIG9mIHRoZSBlZGdlIGZvdW5kLg0KKyAgICBkb3VibGUgICAgIGFuZ2xlQ2FsaWJyYXRlZDsgICAvL0NhbGlicmF0ZWQgYW5nbGUgb2YgdGhlIGVkZ2UgZm91bmQuDQorICAgIGRvdWJsZSAgICAgc3RyYWlnaHRuZXNzOyAgICAgIC8vVGhlIHN0cmFpZ2h0bmVzcyB2YWx1ZSBvZiB0aGUgZGV0ZWN0ZWQgc3RyYWlnaHQgZWRnZS4NCisgICAgZG91YmxlICAgICBhdmdTdHJlbmd0aDsgICAgICAgLy9BdmVyYWdlIHN0cmVuZ3RoIG9mIHRoZSBlZ2RlIGZvdW5kLg0KKyAgICBkb3VibGUgICAgIGF2Z1NOUjsgICAgICAgICAgICAvL0F2ZXJhZ2UgU05SKFNpZ25hbCB0byBOb2lzZSBSYXRpbykgZm9yIHRoZSBlZGdlIGZvdW5kLg0KKyAgICBpbnQgICAgICAgIGxpbmVGb3VuZDsgICAgICAgICAvL0lmIHRoZSBlZGdlIGlzIGZvdW5kIG9yIG5vdC4NCit9IEZpbmRDb25jZW50cmljRWRnZVJlcG9ydDsNCisNCit0eXBlZGVmIHN0cnVjdCBGaW5kQ2lyY3VsYXJFZGdlUmVwb3J0X3N0cnVjdCB7DQorICAgIFBvaW50RmxvYXQgY2VudGVyQ2FsaWJyYXRlZDsgLy9SZWFsIHdvcmxkIENvb3JkaW5hdGVzIG9mIHRoZSBDZW50ZXIuDQorICAgIGRvdWJsZSAgICAgcmFkaXVzQ2FsaWJyYXRlZDsgLy9SZWFsIHdvcmxkIHJhZGl1cyBvZiB0aGUgQ2lyY3VsYXIgRWRnZSBmb3VuZC4NCisgICAgUG9pbnRGbG9hdCBjZW50ZXI7ICAgICAgICAgICAvL1BpeGVsIENvb3JkaW5hdGVzIG9mIHRoZSBDZW50ZXIuDQorICAgIGRvdWJsZSAgICAgcmFkaXVzOyAgICAgICAgICAgLy9SYWRpdXMgaW4gcGl4ZWxzIG9mIHRoZSBDaXJjdWxhciBFZGdlIGZvdW5kLg0KKyAgICBkb3VibGUgICAgIHJvdW5kbmVzczsgICAgICAgIC8vVGhlIHJvdW5kbmVzcyBvZiB0aGUgY2FsY3VsYXRlZCBjaXJjdWxhciBlZGdlLg0KKyAgICBkb3VibGUgICAgIGF2Z1N0cmVuZ3RoOyAgICAgIC8vQXZlcmFnZSBzdHJlbmd0aCBvZiB0aGUgZWdkZSBmb3VuZC4NCisgICAgZG91YmxlICAgICBhdmdTTlI7ICAgICAgICAgICAvL0F2ZXJhZ2UgU05SKFNpZ25hbCB0byBOb2lzZSBSYXRpbykgZm9yIHRoZSBlZGdlIGZvdW5kLg0KKyAgICBpbnQgICAgICAgIGNpcmNsZUZvdW5kOyAgICAgIC8vSWYgdGhlIGNpcmNsdWxhciBlZGdlIGlzIGZvdW5kIG9yIG5vdC4NCit9IEZpbmRDaXJjdWxhckVkZ2VSZXBvcnQ7DQorDQordHlwZWRlZiBzdHJ1Y3QgV2luZG93U2l6ZV9zdHJ1Y3Qgew0KKyAgICBpbnQgeDsgICAgICAgIC8vV2luZG93IGxlbmdodCBvbiBYIGRpcmVjdGlvbi4NCisgICAgaW50IHk7ICAgICAgICAvL1dpbmRvdyBsZW5naHQgb24gWSBkaXJlY3Rpb24uDQorICAgIGludCBzdGVwU2l6ZTsgLy9EaXN0YW5jZSBiZXR3ZWVuIHdpbmRvd3MuDQorfSBXaW5kb3dTaXplOw0KKw0KK3R5cGVkZWYgc3RydWN0IERpc3BsYWNlbWVudFZlY3Rvcl9zdHJ1Y3Qgew0KKyAgICBpbnQgeDsgLy9sZW5ndGggb24gWCBkaXJlY3Rpb24uDQorICAgIGludCB5OyAvL2xlbmd0aCBvbiBZIGRpcmVjdGlvbi4NCit9IERpc3BsYWNlbWVudFZlY3RvcjsNCisNCit0eXBlZGVmIHN0cnVjdCBXYXZlbGV0T3B0aW9uc19zdHJ1Y3Qgew0KKyAgICBXYXZlbGV0VHlwZSB0eXBlT2ZXYXZlbGV0OyAvL1R5cGUgb2Ygd2F2ZWxldChkYiwgYmlvci4NCisgICAgZmxvYXQgICAgICAgbWluRW5lcmd5OyAgICAgLy9NaW5pbXVtIEVuZXJneSBpbiB0aGUgYmFuZHMgdG8gY29uc2lkZXIgZm9yIHRleHR1cmUgZGVmZWN0IGRldGVjdGlvbi4NCit9IFdhdmVsZXRPcHRpb25zOw0KKw0KK3R5cGVkZWYgc3RydWN0IENvb2NjdXJyZW5jZU9wdGlvbnNfc3RydWN0IHsNCisgICAgaW50ICAgICAgICAgICAgICAgIGxldmVsOyAgICAgICAgLy9MZXZlbC9zaXplIG9mIG1hdHJpeC4NCisgICAgRGlzcGxhY2VtZW50VmVjdG9yIGRpc3BsYWNlbWVudDsgLy9EaXNwbGFjZW1uZXQgYmV0d2VlbiBwaXhlbHMgdG8gYWNjdW11bGF0ZSB0aGUgbWF0cml4Lg0KK30gQ29vY2N1cnJlbmNlT3B0aW9uczsNCisNCit0eXBlZGVmIHN0cnVjdCBQYXJ0aWNsZUNsYXNzaWZpZXJMb2NhbFRocmVzaG9sZE9wdGlvbnNfc3RydWN0IHsNCisgICAgTG9jYWxUaHJlc2hvbGRNZXRob2QgbWV0aG9kOyAgICAgICAgICAvL1NwZWNpZmllcyB0aGUgbG9jYWwgdGhyZXNob2xkaW5nIG1ldGhvZCB0aGUgZnVuY3Rpb24gdXNlcy4NCisgICAgUGFydGljbGVUeXBlICAgICAgICAgcGFydGljbGVUeXBlOyAgICAvL1NwZWNpZmllcyB3aGF0IGtpbmQgb2YgcGFydGljbGVzIHRvIGxvb2sgZm9yLg0KKyAgICB1bnNpZ25lZCBpbnQgICAgICAgICB3aW5kb3dXaWR0aDsgICAgIC8vVGhlIHdpZHRoIG9mIHRoZSByZWN0YW5ndWxhciB3aW5kb3cgYXJvdW5kIHRoZSBwaXhlbCBvbiB3aGljaCB0aGUgZnVuY3Rpb24gcGVyZm9ybXMgdGhlIGxvY2FsIHRocmVzaG9sZC4NCisgICAgdW5zaWduZWQgaW50ICAgICAgICAgd2luZG93SGVpZ2h0OyAgICAvL1RoZSBoZWlnaHQgb2YgdGhlIHJlY3Rhbmd1bGFyIHdpbmRvdyBhcm91bmQgdGhlIHBpeGVsIG9uIHdoaWNoIHRoZSBmdW5jdGlvbiBwZXJmb3JtcyB0aGUgbG9jYWwgdGhyZXNob2xkLg0KKyAgICBkb3VibGUgICAgICAgICAgICAgICBkZXZpYXRpb25XZWlnaHQ7IC8vU3BlY2lmaWVzIHRoZSBrIGNvbnN0YW50IHVzZWQgaW4gdGhlIE5pYmxhY2sgbG9jYWwgdGhyZXNob2xkaW5nIGFsZ29yaXRobSwgd2hpY2ggZGV0ZXJtaW5lcyB0aGUgd2VpZ2h0IGFwcGxpZWQgdG8gdGhlIHZhcmlhbmNlIGNhbGN1bGF0aW9uLg0KK30gUGFydGljbGVDbGFzc2lmaWVyTG9jYWxUaHJlc2hvbGRPcHRpb25zOw0KKw0KK3R5cGVkZWYgc3RydWN0IFJhbmdlRmxvYXRfc3RydWN0IHsNCisgICAgZmxvYXQgbWluVmFsdWU7IC8vVGhlIG1pbmltdW0gdmFsdWUgb2YgdGhlIHJhbmdlLg0KKyAgICBmbG9hdCBtYXhWYWx1ZTsgLy9UaGUgbWF4aW11bSB2YWx1ZSBvZiB0aGUgcmFuZ2UuDQorfSBSYW5nZUZsb2F0Ow0KKw0KK3R5cGVkZWYgc3RydWN0IFBhcnRpY2xlQ2xhc3NpZmllckF1dG9UaHJlc2hvbGRPcHRpb25zX3N0cnVjdCB7DQorICAgIFRocmVzaG9sZE1ldGhvZCBtZXRob2Q7ICAgICAgIC8vVGhlIG1ldGhvZCBmb3IgYmluYXJ5IHRocmVzaG9sZGluZywgd2hpY2ggc3BlY2lmaWVzIGhvdyB0byBjYWxjdWxhdGUgdGhlIGNsYXNzZXMuDQorICAgIFBhcnRpY2xlVHlwZSAgICBwYXJ0aWNsZVR5cGU7IC8vU3BlY2lmaWVzIHdoYXQga2luZCBvZiBwYXJ0aWNsZXMgdG8gbG9vayBmb3IuDQorICAgIFJhbmdlRmxvYXQgICAgICBsaW1pdHM7ICAgICAgIC8vVGhlIGxpbWl0cyBvbiB0aGUgYXV0b21hdGljIHRocmVzaG9sZCByYW5nZS4NCit9IFBhcnRpY2xlQ2xhc3NpZmllckF1dG9UaHJlc2hvbGRPcHRpb25zOw0KKw0KK3R5cGVkZWYgc3RydWN0IFBhcnRpY2xlQ2xhc3NpZmllclByZXByb2Nlc3NpbmdPcHRpb25zMl9zdHJ1Y3Qgew0KKyAgICBQYXJ0aWNsZUNsYXNzaWZpZXJUaHJlc2hvbGRUeXBlICAgICAgICAgdGhyZXNob2xkVHlwZTsgICAgICAgICAvL1RoZSB0eXBlIG9mIHRocmVzaG9sZCB0byBwZXJmb3JtIG9uIHRoZSBpbWFnZS4NCisgICAgUmFuZ2VGbG9hdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hbnVhbFRocmVzaG9sZFJhbmdlOyAgLy9UaGUgcmFuZ2Ugb2YgcGl4ZWxzIHRvIGtlZXAgaWYgbWFudWFsbHkgdGhyZXNob2xkaW5nIHRoZSBpbWFnZS4NCisgICAgUGFydGljbGVDbGFzc2lmaWVyQXV0b1RocmVzaG9sZE9wdGlvbnMgIGF1dG9UaHJlc2hvbGRPcHRpb25zOyAgLy9UaGUgb3B0aW9ucyB1c2VkIHRvIGF1dG8gdGhyZXNob2xkIHRoZSBpbWFnZS4NCisgICAgUGFydGljbGVDbGFzc2lmaWVyTG9jYWxUaHJlc2hvbGRPcHRpb25zIGxvY2FsVGhyZXNob2xkT3B0aW9uczsgLy9UaGUgb3B0aW9ucyB1c2VkIHRvIGxvY2FsIHRocmVzaG9sZCB0aGUgaW1hZ2UuDQorICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3RCb3JkZXI7ICAgICAgICAgIC8vU2V0IHRoaXMgZWxlbWVudCB0byBUUlVFIHRvIHJlamVjdCBib3JkZXIgcGFydGljbGVzLg0KKyAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtRXJvc2lvbnM7ICAgICAgICAgICAvL1RoZSBudW1iZXIgb2YgZXJvc2lvbnMgdG8gcGVyZm9ybS4NCit9IFBhcnRpY2xlQ2xhc3NpZmllclByZXByb2Nlc3NpbmdPcHRpb25zMjsNCisNCit0eXBlZGVmIHN0cnVjdCBNZWFzdXJlUGFydGljbGVzUmVwb3J0X3N0cnVjdCB7DQorICAgIGRvdWJsZSoqIHBpeGVsTWVhc3VyZW1lbnRzOyAgICAgIC8vVGhlIG1lYXN1cmVtZW50cyBvbiB0aGUgcGFydGljbGVzIGluIHRoZSBpbWFnZSwgaW4gcGl4ZWwgY29vcmRpbmF0ZXMuDQorICAgIGRvdWJsZSoqIGNhbGlicmF0ZWRNZWFzdXJlbWVudHM7IC8vVGhlIG1lYXN1cmVtZW50cyBvbiB0aGUgcGFydGljbGVzIGluIHRoZSBpbWFnZSwgaW4gcmVhbC13b3JsZCBjb29yZGluYXRlcy4NCisgICAgc2l6ZV90ICAgbnVtUGFydGljbGVzOyAgICAgICAgICAgLy9UaGUgbnVtYmVyIG9mIHBhcnRpY2xlcyBvbiB3aGljaCBtZWFzdXJlbWVudHMgd2VyZSB0YWtlbi4NCisgICAgc2l6ZV90ICAgbnVtTWVhc3VyZW1lbnRzOyAgICAgICAgLy9UaGUgbnVtYmVyIG9mIG1lYXN1cmVtZW50cyB0YWtlbi4NCit9IE1lYXN1cmVQYXJ0aWNsZXNSZXBvcnQ7DQorDQordHlwZWRlZiBzdHJ1Y3QgR2VvbWV0cmljUGF0dGVybk1hdGNoM19zdHJ1Y3Qgew0KKyAgICBQb2ludEZsb2F0IHBvc2l0aW9uOyAgICAgICAgICAgICAgICAvL1RoZSBsb2NhdGlvbiBvZiB0aGUgb3JpZ2luIG9mIHRoZSB0ZW1wbGF0ZSBpbiB0aGUgbWF0Y2guDQorICAgIGZsb2F0ICAgICAgcm90YXRpb247ICAgICAgICAgICAgICAgIC8vVGhlIHJvdGF0aW9uIG9mIHRoZSBtYXRjaCByZWxhdGl2ZSB0byB0aGUgdGVtcGxhdGUgaW1hZ2UsIGluIGRlZ3JlZXMuDQorICAgIGZsb2F0ICAgICAgc2NhbGU7ICAgICAgICAgICAgICAgICAgIC8vVGhlIHNpemUgb2YgdGhlIG1hdGNoIHJlbGF0aXZlIHRvIHRoZSBzaXplIG9mIHRoZSB0ZW1wbGF0ZSBpbWFnZSwgZXhwcmVzc2VkIGFzIGEgcGVyY2VudGFnZS4NCisgICAgZmxvYXQgICAgICBzY29yZTsgICAgICAgICAgICAgICAgICAgLy9UaGUgYWNjdXJhY3kgb2YgdGhlIG1hdGNoLg0KKyAgICBQb2ludEZsb2F0IGNvcm5lcls0XTsgICAgICAgICAgICAgICAvL0FuIGFycmF5IG9mIGZvdXIgcG9pbnRzIGRlc2NyaWJpbmcgdGhlIHJlY3RhbmdsZSBzdXJyb3VuZGluZyB0aGUgdGVtcGxhdGUgaW1hZ2UuDQorICAgIGludCAgICAgICAgaW52ZXJzZTsgICAgICAgICAgICAgICAgIC8vVGhpcyBlbGVtZW50IGlzIFRSVUUgaWYgdGhlIG1hdGNoIGlzIGFuIGludmVyc2Ugb2YgdGhlIHRlbXBsYXRlIGltYWdlLg0KKyAgICBmbG9hdCAgICAgIG9jY2x1c2lvbjsgICAgICAgICAgICAgICAvL1RoZSBwZXJjZW50YWdlIG9mIHRoZSBtYXRjaCB0aGF0IGlzIG9jY2x1ZGVkLg0KKyAgICBmbG9hdCAgICAgIHRlbXBsYXRlTWF0Y2hDdXJ2ZVNjb3JlOyAvL1RoZSBhY2N1cmFjeSBvZiB0aGUgbWF0Y2ggb2J0YWluZWQgYnkgY29tcGFyaW5nIHRoZSB0ZW1wbGF0ZSBjdXJ2ZXMgdG8gdGhlIGN1cnZlcyBpbiB0aGUgbWF0Y2ggcmVnaW9uLg0KKyAgICBmbG9hdCAgICAgIG1hdGNoVGVtcGxhdGVDdXJ2ZVNjb3JlOyAvL1RoZSBhY2N1cmFjeSBvZiB0aGUgbWF0Y2ggb2J0YWluZWQgYnkgY29tcGFyaW5nIHRoZSBjdXJ2ZXMgaW4gdGhlIG1hdGNoIHJlZ2lvbiB0byB0aGUgdGVtcGxhdGUgY3VydmVzLg0KKyAgICBmbG9hdCAgICAgIGNvcnJlbGF0aW9uU2NvcmU7ICAgICAgICAvL1RoZSBhY2N1cmFjeSBvZiB0aGUgbWF0Y2ggb2J0YWluZWQgYnkgY29tcGFyaW5nIHRoZSB0ZW1wbGF0ZSBpbWFnZSB0byB0aGUgbWF0Y2ggcmVnaW9uIHVzaW5nIGEgY29ycmVsYXRpb24gbWV0cmljIHRoYXQgY29tcGFyZXMgdGhlIHR3byByZWdpb25zIGFzIGEgZnVuY3Rpb24gb2YgdGhlaXIgcGl4ZWwgdmFsdWVzLg0KKyAgICBQb2ludEZsb2F0IGNhbGlicmF0ZWRQb3NpdGlvbjsgICAgICAvL1RoZSBsb2NhdGlvbiBvZiB0aGUgb3JpZ2luIG9mIHRoZSB0ZW1wbGF0ZSBpbiB0aGUgbWF0Y2guDQorICAgIGZsb2F0ICAgICAgY2FsaWJyYXRlZFJvdGF0aW9uOyAgICAgIC8vVGhlIHJvdGF0aW9uIG9mIHRoZSBtYXRjaCByZWxhdGl2ZSB0byB0aGUgdGVtcGxhdGUgaW1hZ2UsIGluIGRlZ3JlZXMuDQorICAgIFBvaW50RmxvYXQgY2FsaWJyYXRlZENvcm5lcls0XTsgICAgIC8vQW4gYXJyYXkgb2YgZm91ciBwb2ludHMgZGVzY3JpYmluZyB0aGUgcmVjdGFuZ2xlIHN1cnJvdW5kaW5nIHRoZSB0ZW1wbGF0ZSBpbWFnZS4NCit9IEdlb21ldHJpY1BhdHRlcm5NYXRjaDM7DQorDQordHlwZWRlZiBzdHJ1Y3QgTWF0Y2hHZW9tZXRyaWNQYXR0ZXJuQWR2YW5jZWRPcHRpb25zM19zdHJ1Y3Qgew0KKyAgICB1bnNpZ25lZCBpbnQgICAgICAgICAgICAgICAgICAgIHN1YnBpeGVsSXRlcmF0aW9uczsgICAgICAgICAvL1NwZWNpZmllcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgaW5jcmVtZW50YWwgaW1wcm92ZW1lbnRzIHVzZWQgdG8gcmVmaW5lIG1hdGNoZXMgd2l0aCBzdWJwaXhlbCBpbmZvcm1hdGlvbi4NCisgICAgZG91YmxlICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJwaXhlbFRvbGVyYW5jZTsgICAgICAgICAgLy9TcGVjaWZpZXMgdGhlIG1heGltdW0gYW1vdW50IG9mIGNoYW5nZSwgaW4gcGl4ZWxzLCBiZXR3ZWVuIGNvbnNlY3V0aXZlIGluY3JlbWVudGFsIGltcHJvdmVtZW50cyBpbiB0aGUgbWF0Y2ggcG9zaXRpb24gYmVmb3JlIHRoZSBmdW5jdGlvbiBzdG9wcyByZWZpbmluZyB0aGUgbWF0Y2ggcG9zaXRpb24uDQorICAgIHVuc2lnbmVkIGludCAgICAgICAgICAgICAgICAgICAgaW5pdGlhbE1hdGNoTGlzdExlbmd0aDsgICAgIC8vU3BlY2lmaWVzIHRoZSBtYXhpbXVtIHNpemUgb2YgdGhlIG1hdGNoIGxpc3QuDQorICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0VGVtcGxhdGVDdXJ2ZVNjb3JlOyAgIC8vU2V0IHRoaXMgZWxlbWVudCB0byBUUlVFIHRvIHNwZWNpZnkgdGhhdCB0aGUgZnVuY3Rpb24gc2hvdWxkIGNhbGN1bGF0ZSB0aGUgbWF0Y2ggY3VydmUgdG8gdGVtcGxhdGUgY3VydmUgc2NvcmUgYW5kIHJldHVybiBpdCBmb3IgZWFjaCBtYXRjaCByZXN1bHQuDQorICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ycmVsYXRpb25TY29yZTsgICAgICAgICAgIC8vU2V0IHRoaXMgZWxlbWVudCB0byBUUlVFIHRvIHNwZWNpZnkgdGhhdCB0aGUgZnVuY3Rpb24gc2hvdWxkIGNhbGN1bGF0ZSB0aGUgY29ycmVsYXRpb24gc2NvcmUgYW5kIHJldHVybiBpdCBmb3IgZWFjaCBtYXRjaCByZXN1bHQuDQorICAgIGRvdWJsZSAgICAgICAgICAgICAgICAgICAgICAgICAgbWluTWF0Y2hTZXBhcmF0aW9uRGlzdGFuY2U7IC8vU3BlY2lmaWVzIHRoZSBtaW5pbXVtIHNlcGFyYXRpb24gZGlzdGFuY2UsIGluIHBpeGVscywgYmV0d2VlbiB0aGUgb3JpZ2lucyBvZiB0d28gbWF0Y2hlcyB0aGF0IGhhdmUgdW5pcXVlIHBvc2l0aW9ucy4NCisgICAgZG91YmxlICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5NYXRjaFNlcGFyYXRpb25BbmdsZTsgICAgLy9TcGVjaWZpZXMgdGhlIG1pbmltdW0gYW5ndWxhciBkaWZmZXJlbmNlLCBpbiBkZWdyZWVzLCBiZXR3ZWVuIHR3byBtYXRjaGVzIHRoYXQgaGF2ZSB1bmlxdWUgYW5nbGVzLg0KKyAgICBkb3VibGUgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbk1hdGNoU2VwYXJhdGlvblNjYWxlOyAgICAvL1NwZWNpZmllcyB0aGUgbWluaW11bSBkaWZmZXJlbmNlIGluIHNjYWxlLCBleHByZXNzZWQgYXMgYSBwZXJjZW50YWdlLCBiZXR3ZWVuIHR3byBtYXRjaGVzIHRoYXQgaGF2ZSB1bmlxdWUgc2NhbGVzLg0KKyAgICBkb3VibGUgICAgICAgICAgICAgICAgICAgICAgICAgIG1heE1hdGNoT3ZlcmxhcDsgICAgICAgICAgICAvL1NwZWNpZmllcyB0aGUgbWF4aW11bSBhbW91bnQgb2Ygb3ZlcmxhcCwgZXhwcmVzc2VkIGFzIGEgcGVyY2VudGFnZSwgYWxsb3dlZCBiZXR3ZWVuIHRoZSBib3VuZGluZyByZWN0YW5nbGVzIG9mIHR3byB1bmlxdWUgbWF0Y2hlcy4NCisgICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2Fyc2VSZXN1bHQ7ICAgICAgICAgICAgICAgLy9TcGVjaWZpZXMgd2hldGhlciB5b3Ugd2FudCB0aGUgZnVuY3Rpb24gdG8gc3BlbmQgbGVzcyB0aW1lIGFjY3VyYXRlbHkgZXN0aW1hdGluZyB0aGUgbG9jYXRpb24gb2YgYSBtYXRjaC4NCisgICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmFibGVDYWxpYnJhdGlvblN1cHBvcnQ7ICAgLy9TZXQgdGhpcyBlbGVtZW50IHRvIFRSVUUgdG8gc3BlY2lmeSB0aGUgYWxnb3JpdGhtIHRyZWF0IHRoZSBpbnNwZWN0aW9uIGltYWdlIGFzIGEgY2FsaWJyYXRlZCBpbWFnZS4NCisgICAgQ29udHJhc3RNb2RlICAgICAgICAgICAgICAgICAgICBlbmFibGVDb250cmFzdFJldmVyc2FsOyAgICAgLy9Vc2UgdGhpcyBlbGVtZW50IHRvIHNwZWNpZnkgdGhlIGNvbnRyYXN0IG9mIHRoZSBtYXRjaGVzIHRvIHNlYXJjaCBmb3IgaW4gdGhlIGltYWdlLg0KKyAgICBHZW9tZXRyaWNNYXRjaGluZ1NlYXJjaFN0cmF0ZWd5IG1hdGNoU3RyYXRlZ3k7ICAgICAgICAgICAgICAvL1NwZWNpZmllcyB0aGUgYWdncmVzc2l2ZW5lc3Mgb2YgdGhlIHNlYXJjaCBzdHJhdGVneS4NCisgICAgdW5zaWduZWQgaW50ICAgICAgICAgICAgICAgICAgICByZWZpbmVNYXRjaEZhY3RvcjsgICAgICAgICAgLy9TcGVjaWZpZXMgdGhlIGZhY3RvciB0aGF0IGlzIGFwcGxpZWQgdG8gdGhlIG51bWJlciBvZiBtYXRjaGVzIHJlcXVlc3RlZCBieSB0aGUgdXNlciB0byBkZXRlcm1pbmUgdGhlIG51bWJlciBvZiBtYXRjaGVzIHRoYXQgYXJlIHJlZmluZWQgYXQgdGhlIGluaXRpYWwgbWF0Y2hpbmcgc3RhZ2UuDQorICAgIHVuc2lnbmVkIGludCAgICAgICAgICAgICAgICAgICAgc3VicGl4ZWxNYXRjaEZhY3RvcjsgICAgICAgIC8vU3BlY2lmaWVzIHRoZSBmYWN0b3IgdGhhdCBpcyBhcHBsaWVkIHRvIHRoZSBudW1iZXIgb2YgbWF0Y2hlcyByZXF1ZXN0ZWQgYnkgdGhlIHVzZXIgdG8gZGV0ZXJtaW5lIHRoZSBudW1iZXIgb2YgbWF0Y2hlcyB0aGF0IGFyZSBldmFsdWF0ZWQgYXQgdGhlIGZpbmFsIHN1YnBpeGVsIG1hdGNoaW5nIHN0YWdlLg0KK30gTWF0Y2hHZW9tZXRyaWNQYXR0ZXJuQWR2YW5jZWRPcHRpb25zMzsNCisNCit0eXBlZGVmIHN0cnVjdCBDb2xvck9wdGlvbnNfc3RydWN0IHsNCisgICAgQ29sb3JDbGFzc2lmaWNhdGlvblJlc29sdXRpb24gY29sb3JDbGFzc2lmaWNhdGlvblJlc29sdXRpb247IC8vU3BlY2lmaWVzIHRoZSBjb2xvciByZXNvbHV0aW9uIG9mIHRoZSBjbGFzc2lmaWVyLg0KKyAgICB1bnNpZ25lZCBpbnQgICAgICAgICAgICAgICAgICB1c2VMdW1pbmFuY2U7ICAgICAgICAgICAgICAgICAgLy9TcGVjaWZpZXMgaWYgdGhlIGx1bWluYW5jZSBiYW5kIGlzIGdvaW5nIHRvIGJlIHVzZWQgaW4gdGhlIGZlYXR1cmUgdmVjdG9yLg0KKyAgICBDb2xvck1vZGUgICAgICAgICAgICAgICAgICAgICBjb2xvck1vZGU7ICAgICAgICAgICAgICAgICAgICAgLy9TcGVjaWZpZXMgdGhlIGNvbG9yIG1vZGUgb2YgdGhlIGNsYXNzaWZpZXIuDQorfSBDb2xvck9wdGlvbnM7DQorDQordHlwZWRlZiBzdHJ1Y3QgU2FtcGxlU2NvcmVfc3RydWN0IHsNCisgICAgY2hhciogICAgICAgIGNsYXNzTmFtZTsgLy9UaGUgbmFtZSBvZiB0aGUgY2xhc3MuDQorICAgIGZsb2F0ICAgICAgICBkaXN0YW5jZTsgIC8vVGhlIGRpc3RhbmNlIGZyb20gdGhlIGl0ZW0gdG8gdGhpcyBjbGFzcy4NCisgICAgdW5zaWduZWQgaW50IGluZGV4OyAgICAgLy9pbmRleCBvZiB0aGlzIHNhbXBsZS4NCit9IFNhbXBsZVNjb3JlOw0KKw0KK3R5cGVkZWYgc3RydWN0IENsYXNzaWZpZXJSZXBvcnRBZHZhbmNlZF9zdHJ1Y3Qgew0KKyAgICBjaGFyKiAgICAgICAgYmVzdENsYXNzTmFtZTsgICAgICAgLy9UaGUgbmFtZSBvZiB0aGUgYmVzdCBjbGFzcyBmb3IgdGhlIHNhbXBsZS4NCisgICAgZmxvYXQgICAgICAgIGNsYXNzaWZpY2F0aW9uU2NvcmU7IC8vVGhlIHNpbWlsYXJpdHkgb2YgdGhlIHNhbXBsZSBhbmQgdGhlIHR3byBjbG9zZXN0IGNsYXNzZXMgaW4gdGhlIGNsYXNzaWZpZXIuDQorICAgIGZsb2F0ICAgICAgICBpZGVudGlmaWNhdGlvblNjb3JlOyAvL1RoZSBzaW1pbGFyaXR5IG9mIHRoZSBzYW1wbGUgYW5kIHRoZSBhc3NpZ25lZCBjbGFzcy4NCisgICAgQ2xhc3NTY29yZSogIGFsbFNjb3JlczsgICAgICAgICAgIC8vQWxsIGNsYXNzZXMgYW5kIHRoZWlyIHNjb3Jlcy4NCisgICAgaW50ICAgICAgICAgIGFsbFNjb3Jlc1NpemU7ICAgICAgIC8vVGhlIG51bWJlciBvZiBlbnRyaWVzIGluIGFsbFNjb3Jlcy4NCisgICAgU2FtcGxlU2NvcmUqIHNhbXBsZVNjb3JlczsgICAgICAgIC8vQWxsIHNhbXBsZXMgYW5kIHRoZWlyIHNjb3Jlcy4NCisgICAgaW50ICAgICAgICAgIHNhbXBsZVNjb3Jlc1NpemU7ICAgIC8vVGhlIG51bWJlciBvZiBlbnRyaWVzIGluIHNhbXBsZVNjb3Jlcy4NCit9IENsYXNzaWZpZXJSZXBvcnRBZHZhbmNlZDsNCisNCit0eXBlZGVmIHN0cnVjdCBMZWFybkdlb21ldHJpY1BhdHRlcm5BZHZhbmNlZE9wdGlvbnMyX3N0cnVjdCB7DQorICAgIGRvdWJsZSAgICAgICBtaW5TY2FsZUZhY3RvcjsgICAgICAgIC8vU3BlY2lmaWVzIHRoZSBtaW5pbXVtIHNjYWxlIGZhY3RvciB0aGF0IHRoZSB0ZW1wbGF0ZSBpcyBsZWFybmVkIGZvci4NCisgICAgZG91YmxlICAgICAgIG1heFNjYWxlRmFjdG9yOyAgICAgICAgLy9TcGVjaWZpZXMgdGhlIG1heGltdW0gc2NhbGUgZmFjdG9yIHRoZSB0ZW1wbGF0ZSBpcyBsZWFybmVkIGZvci4NCisgICAgZG91YmxlICAgICAgIG1pblJvdGF0aW9uQW5nbGVWYWx1ZTsgLy9TcGVjaWZpZXMgdGhlIG1pbmltdW0gcm90YXRpb24gYW5nbGUgdGhlIHRlbXBsYXRlIGlzIGxlYXJuZWQgZm9yLg0KKyAgICBkb3VibGUgICAgICAgbWF4Um90YXRpb25BbmdsZVZhbHVlOyAvL1NwZWNpZmllcyB0aGUgbWF4aW11bSByb3RhdGlvbiBhbmdsZSB0aGUgdGVtcGxhdGUgaXMgbGVhcm5lZCBmb3IuDQorICAgIHVuc2lnbmVkIGludCBpbWFnZVNhbXBsaW5nRmFjdG9yOyAgIC8vU3BlY2lmaWVzIHRoZSBmYWN0b3IgdGhhdCBpcyB1c2VkIHRvIHN1YnNhbXBsZSB0aGUgdGVtcGxhdGUgYW5kIHRoZSBpbWFnZSBmb3IgdGhlIGluaXRpYWwgbWF0Y2hpbmcgcGhhc2UuDQorfSBMZWFybkdlb21ldHJpY1BhdHRlcm5BZHZhbmNlZE9wdGlvbnMyOw0KKw0KK3R5cGVkZWYgc3RydWN0IFBhcnRpY2xlRmlsdGVyT3B0aW9uczJfc3RydWN0IHsNCisgICAgaW50IHJlamVjdE1hdGNoZXM7IC8vU2V0IHRoaXMgcGFyYW1ldGVyIHRvIFRSVUUgdG8gdHJhbnNmZXIgb25seSB0aG9zZSBwYXJ0aWNsZXMgdGhhdCBkbyBub3QgbWVldCBhbGwgdGhlIGNyaXRlcmlhLg0KKyAgICBpbnQgcmVqZWN0Qm9yZGVyOyAgLy9TZXQgdGhpcyBlbGVtZW50IHRvIFRSVUUgdG8gcmVqZWN0IGJvcmRlciBwYXJ0aWNsZXMuDQorICAgIGludCBmaWxsSG9sZXM7ICAgICAvL1NldCB0aGlzIGVsZW1lbnQgdG8gVFJVRSB0byBmaWxsIGhvbGVzIGluIHBhcnRpY2xlcy4NCisgICAgaW50IGNvbm5lY3Rpdml0eTg7IC8vU2V0IHRoaXMgcGFyYW1ldGVyIHRvIFRSVUUgdG8gdXNlIGNvbm5lY3Rpdml0eS04IHRvIGRldGVybWluZSB3aGV0aGVyIHBhcnRpY2xlcyBhcmUgdG91Y2hpbmcuDQorfSBQYXJ0aWNsZUZpbHRlck9wdGlvbnMyOw0KKw0KK3R5cGVkZWYgc3RydWN0IEZpbmRFZGdlT3B0aW9uczJfc3RydWN0IHsNCisgICAgUmFrZURpcmVjdGlvbiBkaXJlY3Rpb247ICAgICAgICAvL1RoZSBkaXJlY3Rpb24gdG8gc2VhcmNoIGluIHRoZSBST0kuDQorICAgIGludCAgICAgICAgICAgc2hvd1NlYXJjaEFyZWE7ICAgLy9JZiBUUlVFLCB0aGUgZnVuY3Rpb24gb3ZlcmxheXMgdGhlIHNlYXJjaCBhcmVhIG9uIHRoZSBpbWFnZS4NCisgICAgaW50ICAgICAgICAgICBzaG93U2VhcmNoTGluZXM7ICAvL0lmIFRSVUUsIHRoZSBmdW5jdGlvbiBvdmVybGF5cyB0aGUgc2VhcmNoIGxpbmVzIHVzZWQgdG8gbG9jYXRlIHRoZSBlZGdlcyBvbiB0aGUgaW1hZ2UuDQorICAgIGludCAgICAgICAgICAgc2hvd0VkZ2VzRm91bmQ7ICAgLy9JZiBUUlVFLCB0aGUgZnVuY3Rpb24gb3ZlcmxheXMgdGhlIGxvY2F0aW9ucyBvZiB0aGUgZWRnZXMgZm91bmQgb24gdGhlIGltYWdlLg0KKyAgICBpbnQgICAgICAgICAgIHNob3dSZXN1bHQ7ICAgICAgIC8vSWYgVFJVRSwgdGhlIGZ1bmN0aW9uIG92ZXJsYXlzIHRoZSBoaXQgbGluZXMgdG8gdGhlIG9iamVjdCBhbmQgdGhlIGVkZ2UgdXNlZCB0byBnZW5lcmF0ZSB0aGUgaGl0IGxpbmUgb24gdGhlIHJlc3VsdCBpbWFnZS4NCisgICAgUkdCVmFsdWUgICAgICBzZWFyY2hBcmVhQ29sb3I7ICAvL1NwZWNpZmllcyB0aGUgUkdCIGNvbG9yIHZhbHVlIHRvIHVzZSB0byBvdmVybGF5IHRoZSBzZWFyY2ggYXJlYS4NCisgICAgUkdCVmFsdWUgICAgICBzZWFyY2hMaW5lc0NvbG9yOyAvL1NwZWNpZmllcyB0aGUgUkdCIGNvbG9yIHZhbHVlIHRvIHVzZSB0byBvdmVybGF5IHRoZSBzZWFyY2ggbGluZXMuDQorICAgIFJHQlZhbHVlICAgICAgc2VhcmNoRWRnZXNDb2xvcjsgLy9TcGVjaWZpZXMgdGhlIFJHQiBjb2xvciB2YWx1ZSB0byB1c2UgdG8gb3ZlcmxheSB0aGUgc2VhcmNoIGVkZ2VzLg0KKyAgICBSR0JWYWx1ZSAgICAgIHJlc3VsdENvbG9yOyAgICAgIC8vU3BlY2lmaWVzIHRoZSBSR0IgY29sb3IgdmFsdWUgdG8gdXNlIHRvIG92ZXJsYXkgdGhlIHJlc3VsdHMuDQorICAgIGNoYXIqICAgICAgICAgb3ZlcmxheUdyb3VwTmFtZTsgLy9TcGVjaWZpZXMgdGhlIG92ZXJsYXkgZ3JvdXAgbmFtZSB0byBhc3NpZ24gdG8gdGhlIG92ZXJsYXlzLg0KKyAgICBFZGdlT3B0aW9uczIgIGVkZ2VPcHRpb25zOyAgICAgIC8vU3BlY2lmaWVzIHRoZSBlZGdlIGRldGVjdGlvbiBvcHRpb25zIGFsb25nIGEgc2luZ2xlIHNlYXJjaCBsaW5lLg0KK30gRmluZEVkZ2VPcHRpb25zMjsNCisNCit0eXBlZGVmIHN0cnVjdCBGaW5kRWRnZVJlcG9ydF9zdHJ1Y3Qgew0KKyAgICBTdHJhaWdodEVkZ2UqIHN0cmFpZ2h0RWRnZXM7ICAgIC8vQW4gYXJyYXkgb2Ygc3RyYWlnaHQgZWRnZXMgZGV0ZWN0ZWQuDQorICAgIHVuc2lnbmVkIGludCAgbnVtU3RyYWlnaHRFZGdlczsgLy9JbmRpY2F0ZXMgdGhlIG51bWJlciBvZiBzdHJhaWdodCBlZGdlcyBmb3VuZC4NCit9IEZpbmRFZGdlUmVwb3J0Ow0KKw0KK3R5cGVkZWYgc3RydWN0IEZpbmRUcmFuc2Zvcm1SZWN0T3B0aW9uczJfc3RydWN0IHsNCisgICAgRmluZFJlZmVyZW5jZURpcmVjdGlvbiBkaXJlY3Rpb247ICAgICAgICAvL1NwZWNpZmllcyB0aGUgZGlyZWN0aW9uIGFuZCBvcmllbnRhdGlvbiBpbiB3aGljaCB0aGUgZnVuY3Rpb24gc2VhcmNoZXMgZm9yIHRoZSBwcmltYXJ5IGF4aXMuDQorICAgIGludCAgICAgICAgICAgICAgICAgICAgc2hvd1NlYXJjaEFyZWE7ICAgLy9JZiBUUlVFLCB0aGUgZnVuY3Rpb24gb3ZlcmxheXMgdGhlIHNlYXJjaCBhcmVhIG9uIHRoZSBpbWFnZS4NCisgICAgaW50ICAgICAgICAgICAgICAgICAgICBzaG93U2VhcmNoTGluZXM7ICAvL0lmIFRSVUUsIHRoZSBmdW5jdGlvbiBvdmVybGF5cyB0aGUgc2VhcmNoIGxpbmVzIHVzZWQgdG8gbG9jYXRlIHRoZSBlZGdlcyBvbiB0aGUgaW1hZ2UuDQorICAgIGludCAgICAgICAgICAgICAgICAgICAgc2hvd0VkZ2VzRm91bmQ7ICAgLy9JZiBUUlVFLCB0aGUgZnVuY3Rpb24gb3ZlcmxheXMgdGhlIGxvY2F0aW9ucyBvZiB0aGUgZWRnZXMgZm91bmQgb24gdGhlIGltYWdlLg0KKyAgICBpbnQgICAgICAgICAgICAgICAgICAgIHNob3dSZXN1bHQ7ICAgICAgIC8vSWYgVFJVRSwgdGhlIGZ1bmN0aW9uIG92ZXJsYXlzIHRoZSBoaXQgbGluZXMgdG8gdGhlIG9iamVjdCBhbmQgdGhlIGVkZ2UgdXNlZCB0byBnZW5lcmF0ZSB0aGUgaGl0IGxpbmUgb24gdGhlIHJlc3VsdCBpbWFnZS4NCisgICAgUkdCVmFsdWUgICAgICAgICAgICAgICBzZWFyY2hBcmVhQ29sb3I7ICAvL1NwZWNpZmllcyB0aGUgUkdCIGNvbG9yIHZhbHVlIHRvIHVzZSB0byBvdmVybGF5IHRoZSBzZWFyY2ggYXJlYS4NCisgICAgUkdCVmFsdWUgICAgICAgICAgICAgICBzZWFyY2hMaW5lc0NvbG9yOyAvL1NwZWNpZmllcyB0aGUgUkdCIGNvbG9yIHZhbHVlIHRvIHVzZSB0byBvdmVybGF5IHRoZSBzZWFyY2ggbGluZXMuDQorICAgIFJHQlZhbHVlICAgICAgICAgICAgICAgc2VhcmNoRWRnZXNDb2xvcjsgLy9TcGVjaWZpZXMgdGhlIFJHQiBjb2xvciB2YWx1ZSB0byB1c2UgdG8gb3ZlcmxheSB0aGUgc2VhcmNoIGVkZ2VzLg0KKyAgICBSR0JWYWx1ZSAgICAgICAgICAgICAgIHJlc3VsdENvbG9yOyAgICAgIC8vU3BlY2lmaWVzIHRoZSBSR0IgY29sb3IgdmFsdWUgdG8gdXNlIHRvIG92ZXJsYXkgdGhlIHJlc3VsdHMuDQorICAgIGNoYXIqICAgICAgICAgICAgICAgICAgb3ZlcmxheUdyb3VwTmFtZTsgLy9TcGVjaWZpZXMgdGhlIG92ZXJsYXkgZ3JvdXAgbmFtZSB0byBhc3NpZ24gdG8gdGhlIG92ZXJsYXlzLg0KKyAgICBFZGdlT3B0aW9uczIgICAgICAgICAgIGVkZ2VPcHRpb25zOyAgICAgIC8vU3BlY2lmaWVzIHRoZSBlZGdlIGRldGVjdGlvbiBvcHRpb25zIGFsb25nIGEgc2luZ2xlIHNlYXJjaCBsaW5lLg0KK30gRmluZFRyYW5zZm9ybVJlY3RPcHRpb25zMjsNCisNCit0eXBlZGVmIHN0cnVjdCBGaW5kVHJhbnNmb3JtUmVjdHNPcHRpb25zMl9zdHJ1Y3Qgew0KKyAgICBGaW5kUmVmZXJlbmNlRGlyZWN0aW9uIGRpcmVjdGlvbjsgICAgICAgICAgICAvL1NwZWNpZmllcyB0aGUgZGlyZWN0aW9uIGFuZCBvcmllbnRhdGlvbiBpbiB3aGljaCB0aGUgZnVuY3Rpb24gc2VhcmNoZXMgZm9yIHRoZSBwcmltYXJ5IGF4aXMuDQorICAgIGludCAgICAgICAgICAgICAgICAgICAgc2hvd1NlYXJjaEFyZWE7ICAgICAgIC8vSWYgVFJVRSwgdGhlIGZ1bmN0aW9uIG92ZXJsYXlzIHRoZSBzZWFyY2ggYXJlYSBvbiB0aGUgaW1hZ2UuDQorICAgIGludCAgICAgICAgICAgICAgICAgICAgc2hvd1NlYXJjaExpbmVzOyAgICAgIC8vSWYgVFJVRSwgdGhlIGZ1bmN0aW9uIG92ZXJsYXlzIHRoZSBzZWFyY2ggbGluZXMgdXNlZCB0byBsb2NhdGUgdGhlIGVkZ2VzIG9uIHRoZSBpbWFnZS4NCisgICAgaW50ICAgICAgICAgICAgICAgICAgICBzaG93RWRnZXNGb3VuZDsgICAgICAgLy9JZiBUUlVFLCB0aGUgZnVuY3Rpb24gb3ZlcmxheXMgdGhlIGxvY2F0aW9ucyBvZiB0aGUgZWRnZXMgZm91bmQgb24gdGhlIGltYWdlLg0KKyAgICBpbnQgICAgICAgICAgICAgICAgICAgIHNob3dSZXN1bHQ7ICAgICAgICAgICAvL0lmIFRSVUUsIHRoZSBmdW5jdGlvbiBvdmVybGF5cyB0aGUgaGl0IGxpbmVzIHRvIHRoZSBvYmplY3QgYW5kIHRoZSBlZGdlIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIGhpdCBsaW5lIG9uIHRoZSByZXN1bHQgaW1hZ2UuDQorICAgIFJHQlZhbHVlICAgICAgICAgICAgICAgc2VhcmNoQXJlYUNvbG9yOyAgICAgIC8vU3BlY2lmaWVzIHRoZSBSR0IgY29sb3IgdmFsdWUgdG8gdXNlIHRvIG92ZXJsYXkgdGhlIHNlYXJjaCBhcmVhLg0KKyAgICBSR0JWYWx1ZSAgICAgICAgICAgICAgIHNlYXJjaExpbmVzQ29sb3I7ICAgICAvL1NwZWNpZmllcyB0aGUgUkdCIGNvbG9yIHZhbHVlIHRvIHVzZSB0byBvdmVybGF5IHRoZSBzZWFyY2ggbGluZXMuDQorICAgIFJHQlZhbHVlICAgICAgICAgICAgICAgc2VhcmNoRWRnZXNDb2xvcjsgICAgIC8vU3BlY2lmaWVzIHRoZSBSR0IgY29sb3IgdmFsdWUgdG8gdXNlIHRvIG92ZXJsYXkgdGhlIHNlYXJjaCBlZGdlcy4NCisgICAgUkdCVmFsdWUgICAgICAgICAgICAgICByZXN1bHRDb2xvcjsgICAgICAgICAgLy9TcGVjaWZpZXMgdGhlIFJHQiBjb2xvciB2YWx1ZSB0byB1c2UgdG8gb3ZlcmxheSB0aGUgcmVzdWx0cy4NCisgICAgY2hhciogICAgICAgICAgICAgICAgICBvdmVybGF5R3JvdXBOYW1lOyAgICAgLy9TcGVjaWZpZXMgdGhlIG92ZXJsYXkgZ3JvdXAgbmFtZSB0byBhc3NpZ24gdG8gdGhlIG92ZXJsYXlzLg0KKyAgICBFZGdlT3B0aW9uczIgICAgICAgICAgIHByaW1hcnlFZGdlT3B0aW9uczsgICAvL1NwZWNpZmllcyB0aGUgcGFyYW1ldGVycyB1c2VkIHRvIGNvbXB1dGUgdGhlIGVkZ2UgZ3JhZGllbnQgaW5mb3JtYXRpb24gYW5kIGRldGVjdCB0aGUgZWRnZXMgZm9yIHRoZSBwcmltYXJ5IFJPSS4NCisgICAgRWRnZU9wdGlvbnMyICAgICAgICAgICBzZWNvbmRhcnlFZGdlT3B0aW9uczsgLy9TcGVjaWZpZXMgdGhlIHBhcmFtZXRlcnMgdXNlZCB0byBjb21wdXRlIHRoZSBlZGdlIGdyYWRpZW50IGluZm9ybWF0aW9uIGFuZCBkZXRlY3QgdGhlIGVkZ2VzIGZvciB0aGUgc2Vjb25kYXJ5IFJPSS4NCit9IEZpbmRUcmFuc2Zvcm1SZWN0c09wdGlvbnMyOw0KKw0KK3R5cGVkZWYgc3RydWN0IFJlYWRUZXh0UmVwb3J0M19zdHJ1Y3Qgew0KKyAgICBjb25zdCBjaGFyKiAgcmVhZFN0cmluZzsgICAgICAgICAgICAvL1RoZSByZWFkIHN0cmluZy4NCisgICAgQ2hhclJlcG9ydDMqIGNoYXJhY3RlclJlcG9ydDsgICAgICAgLy9BbiBhcnJheSBvZiByZXBvcnRzIGRlc2NyaWJpbmcgdGhlIHByb3BlcnRpZXMgb2YgZWFjaCBpZGVudGlmaWVkIGNoYXJhY3Rlci4NCisgICAgaW50ICAgICAgICAgIG51bUNoYXJhY3RlclJlcG9ydHM7ICAgLy9UaGUgbnVtYmVyIG9mIGlkZW50aWZpZWQgY2hhcmFjdGVycy4NCisgICAgUk9JKiAgICAgICAgIHJvaUJvdW5kaW5nQ2hhcmFjdGVyczsgLy9BbiBhcnJheSBzcGVjaWZ5aW5nIHRoZSBjb29yZGluYXRlcyBvZiB0aGUgY2hhcmFjdGVyIGJvdW5kaW5nIFJPSS4NCit9IFJlYWRUZXh0UmVwb3J0MzsNCisNCit0eXBlZGVmIHN0cnVjdCBDaGFyYWN0ZXJTdGF0aXN0aWNzX3N0cnVjdCB7DQorICAgIGludCBsZWZ0OyAgICAgICAgICAvL1RoZSBsZWZ0IG9mZnNldCBvZiB0aGUgY2hhcmFjdGVyIGJvdW5kaW5nIHJlY3RhbmdsZXMgaW4gdGhlIGN1cnJlbnQgUk9JLg0KKyAgICBpbnQgdG9wOyAgICAgICAgICAgLy9UaGUgdG9wIG9mZnNldCBvZiB0aGUgY2hhcmFjdGVyIGJvdW5kaW5nIHJlY3RhbmdsZXMgaW4gdGhlIGN1cnJlbnQgUk9JLg0KKyAgICBpbnQgd2lkdGg7ICAgICAgICAgLy9UaGUgd2lkdGggb2YgZWFjaCBvZiB0aGUgY2hhcmFjdGVycyB5b3UgdHJhaW5lZCBpbiB0aGUgY3VycmVudCBST0kuDQorICAgIGludCBoZWlnaHQ7ICAgICAgICAvL1RoZSBoZWlnaHQgb2YgZWFjaCB0cmFpbmVkIGNoYXJhY3RlciBpbiB0aGUgY3VycmVudCBST0kuDQorICAgIGludCBjaGFyYWN0ZXJTaXplOyAvL1RoZSBzaXplIG9mIHRoZSBjaGFyYWN0ZXIgaW4gcGl4ZWxzLg0KK30gQ2hhcmFjdGVyU3RhdGlzdGljczsNCisNCit0eXBlZGVmIHN0cnVjdCBDaGFyUmVwb3J0M19zdHJ1Y3Qgew0KKyAgICBjb25zdCBjaGFyKiAgICAgICAgIGNoYXJhY3RlcjsgICAgICAgICAgIC8vVGhlIGNoYXJhY3RlciB2YWx1ZS4NCisgICAgaW50ICAgICAgICAgICAgICAgICBjbGFzc2lmaWNhdGlvblNjb3JlOyAvL1RoZSBkZWdyZWUgdG8gd2hpY2ggdGhlIGFzc2lnbmVkIGNoYXJhY3RlciBjbGFzcyByZXByZXNlbnRzIHRoZSBvYmplY3QgYmV0dGVyIHRoYW4gdGhlIG90aGVyIGNoYXJhY3RlciBjbGFzc2VzIGluIHRoZSBjaGFyYWN0ZXIgc2V0Lg0KKyAgICBpbnQgICAgICAgICAgICAgICAgIHZlcmlmaWNhdGlvblNjb3JlOyAgIC8vVGhlIHNpbWlsYXJpdHkgb2YgdGhlIGNoYXJhY3RlciBhbmQgdGhlIHJlZmVyZW5jZSBjaGFyYWN0ZXIgZm9yIHRoZSBjaGFyYWN0ZXIgY2xhc3MuDQorICAgIGludCAgICAgICAgICAgICAgICAgdmVyaWZpZWQ7ICAgICAgICAgICAgLy9UaGlzIGVsZW1lbnQgaXMgVFJVRSBpZiBhIHJlZmVyZW5jZSBjaGFyYWN0ZXIgd2FzIGZvdW5kIGZvciB0aGUgY2hhcmFjdGVyIGNsYXNzIGFuZCBGQUxTRSBpZiBhIHJlZmVyZW5jZSBjaGFyYWN0ZXIgd2FzIG5vdCBmb3VuZC4NCisgICAgaW50ICAgICAgICAgICAgICAgICBsb3dUaHJlc2hvbGQ7ICAgICAgICAvL1RoZSBtaW5pbXVtIHZhbHVlIG9mIHRoZSB0aHJlc2hvbGQgcmFuZ2UgdXNlZCBmb3IgdGhpcyBjaGFyYWN0ZXIuDQorICAgIGludCAgICAgICAgICAgICAgICAgaGlnaFRocmVzaG9sZDsgICAgICAgLy9UaGUgbWF4aW11bSB2YWx1ZSBvZiB0aGUgdGhyZXNob2xkIHJhbmdlIHVzZWQgZm9yIHRoaXMgY2hhcmFjdGVyLg0KKyAgICBDaGFyYWN0ZXJTdGF0aXN0aWNzIGNoYXJhY3RlclN0YXRzOyAgICAgIC8vRGVzY3JpYmVzIHRoZSBjaGFyYWN0ZXJzIHNlZ21lbnRlZCBpbiB0aGUgUk9JLg0KK30gQ2hhclJlcG9ydDM7DQorDQordHlwZWRlZiBzdHJ1Y3QgQXJjSW5mbzJfc3RydWN0IHsNCisgICAgUG9pbnRGbG9hdCBjZW50ZXI7ICAgICAvL1RoZSBjZW50ZXIgcG9pbnQgb2YgdGhlIGFyYy4NCisgICAgZG91YmxlICAgICByYWRpdXM7ICAgICAvL1RoZSByYWRpdXMgb2YgdGhlIGFyYy4NCisgICAgZG91YmxlICAgICBzdGFydEFuZ2xlOyAvL1RoZSBzdGFydGluZyBhbmdsZSBvZiB0aGUgYXJjLCBzcGVjaWZpZWQgY291bnRlci1jbG9ja3dpc2UgZnJvbSB0aGUgeC1heGlzLg0KKyAgICBkb3VibGUgICAgIGVuZEFuZ2xlOyAgIC8vVGhlIGVuZGluZyBhbmdsZSBvZiB0aGUgYXJjLCBzcGVjaWZpZWQgY291bnRlci1jbG9ja3dpc2UgZnJvbSB0aGUgeC1heGlzLg0KK30gQXJjSW5mbzI7DQorDQordHlwZWRlZiBzdHJ1Y3QgRWRnZVJlcG9ydDJfc3RydWN0IHsNCisgICAgRWRnZUluZm8qICAgIGVkZ2VzOyAgICAgICAgICAgIC8vQW4gYXJyYXkgb2YgZWRnZXMgZGV0ZWN0ZWQuDQorICAgIHVuc2lnbmVkIGludCBudW1FZGdlczsgICAgICAgICAvL0luZGljYXRlcyB0aGUgbnVtYmVyIG9mIGVkZ2VzIGRldGVjdGVkLg0KKyAgICBkb3VibGUqICAgICAgZ3JhZGllbnRJbmZvOyAgICAgLy9BbiBhcnJheSB0aGF0IGNvbnRhaW5zIHRoZSBjYWxjdWxhdGVkIGVkZ2Ugc3RyZW5ndGhzIGFsb25nIHRoZSB1c2VyLWRlZmluZWQgc2VhcmNoIGFyZWEuDQorICAgIHVuc2lnbmVkIGludCBudW1HcmFkaWVudEluZm87ICAvL0luZGljYXRlcyB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGNvbnRhaW5lZCBpbiBncmFkaWVudEluZm8uDQorICAgIGludCAgICAgICAgICBjYWxpYnJhdGlvblZhbGlkOyAvL0luZGljYXRlcyBpZiB0aGUgY2FsaWJyYXRpb24gZGF0YSBjb3JyZXNwb25kaW5nIHRvIHRoZSBsb2NhdGlvbiBvZiB0aGUgZWRnZXMgaXMgY29ycmVjdC4NCit9IEVkZ2VSZXBvcnQyOw0KKw0KK3R5cGVkZWYgc3RydWN0IFNlYXJjaEFyY0luZm9fc3RydWN0IHsNCisgICAgQXJjSW5mbzIgICAgYXJjQ29vcmRpbmF0ZXM7IC8vRGVzY3JpYmVzIHRoZSBhcmMgdXNlZCBmb3IgZWRnZSBkZXRlY3Rpb24uDQorICAgIEVkZ2VSZXBvcnQyIGVkZ2VSZXBvcnQ7ICAgICAvL0Rlc2NyaWJlcyB0aGUgZWRnZXMgZm91bmQgaW4gdGhpcyBzZWFyY2ggbGluZS4NCit9IFNlYXJjaEFyY0luZm87DQorDQordHlwZWRlZiBzdHJ1Y3QgQ29uY2VudHJpY1Jha2VSZXBvcnQyX3N0cnVjdCB7DQorICAgIEVkZ2VJbmZvKiAgICAgIGZpcnN0RWRnZXM7ICAgIC8vVGhlIGZpcnN0IGVkZ2UgcG9pbnQgZGV0ZWN0ZWQgYWxvbmcgZWFjaCBzZWFyY2ggbGluZSBpbiB0aGUgUk9JLg0KKyAgICB1bnNpZ25lZCBpbnQgICBudW1GaXJzdEVkZ2VzOyAvL1RoZSBudW1iZXIgb2YgcG9pbnRzIGluIHRoZSBmaXJzdEVkZ2VzIGFycmF5Lg0KKyAgICBFZGdlSW5mbyogICAgICBsYXN0RWRnZXM7ICAgICAvL1RoZSBsYXN0IGVkZ2UgcG9pbnQgZGV0ZWN0ZWQgYWxvbmcgZWFjaCBzZWFyY2ggbGluZSBpbiB0aGUgUk9JLg0KKyAgICB1bnNpZ25lZCBpbnQgICBudW1MYXN0RWRnZXM7ICAvL1RoZSBudW1iZXIgb2YgcG9pbnRzIGluIHRoZSBsYXN0RWRnZXMgYXJyYXkuDQorICAgIFNlYXJjaEFyY0luZm8qIHNlYXJjaEFyY3M7ICAgIC8vQ29udGFpbnMgdGhlIGFyY3MgdXNlZCBmb3IgZWRnZSBkZXRlY3Rpb24gYW5kIHRoZSBlZGdlIGluZm9ybWF0aW9uIGZvciBlYWNoIGFyYy4NCisgICAgdW5zaWduZWQgaW50ICAgbnVtU2VhcmNoQXJjczsgLy9UaGUgbnVtYmVyIG9mIGFyY3MgaW4gdGhlIHNlYXJjaEFyY3MgYXJyYXkuDQorfSBDb25jZW50cmljUmFrZVJlcG9ydDI7DQorDQordHlwZWRlZiBzdHJ1Y3QgU3Bva2VSZXBvcnQyX3N0cnVjdCB7DQorICAgIEVkZ2VJbmZvKiAgICAgICBmaXJzdEVkZ2VzOyAgICAgLy9UaGUgZmlyc3QgZWRnZSBwb2ludCBkZXRlY3RlZCBhbG9uZyBlYWNoIHNlYXJjaCBsaW5lIGluIHRoZSBST0kuDQorICAgIHVuc2lnbmVkIGludCAgICBudW1GaXJzdEVkZ2VzOyAgLy9UaGUgbnVtYmVyIG9mIHBvaW50cyBpbiB0aGUgZmlyc3RFZGdlcyBhcnJheS4NCisgICAgRWRnZUluZm8qICAgICAgIGxhc3RFZGdlczsgICAgICAvL1RoZSBsYXN0IGVkZ2UgcG9pbnQgZGV0ZWN0ZWQgYWxvbmcgZWFjaCBzZWFyY2ggbGluZSBpbiB0aGUgUk9JLg0KKyAgICB1bnNpZ25lZCBpbnQgICAgbnVtTGFzdEVkZ2VzOyAgIC8vVGhlIG51bWJlciBvZiBwb2ludHMgaW4gdGhlIGxhc3RFZGdlcyBhcnJheS4NCisgICAgU2VhcmNoTGluZUluZm8qIHNlYXJjaExpbmVzOyAgICAvL1RoZSBzZWFyY2ggbGluZXMgdXNlZCBmb3IgZWRnZSBkZXRlY3Rpb24uDQorICAgIHVuc2lnbmVkIGludCAgICBudW1TZWFyY2hMaW5lczsgLy9UaGUgbnVtYmVyIG9mIHNlYXJjaCBsaW5lcyB1c2VkIGluIHRoZSBlZGdlIGRldGVjdGlvbi4NCit9IFNwb2tlUmVwb3J0MjsNCisNCit0eXBlZGVmIHN0cnVjdCBFZGdlSW5mb19zdHJ1Y3Qgew0KKyAgICBQb2ludEZsb2F0IHBvc2l0aW9uOyAgICAgICAgICAgLy9UaGUgbG9jYXRpb24gb2YgdGhlIGVkZ2UgaW4gdGhlIGltYWdlLg0KKyAgICBQb2ludEZsb2F0IGNhbGlicmF0ZWRQb3NpdGlvbjsgLy9UaGUgcG9zaXRpb24gb2YgdGhlIGVkZ2UgaW4gdGhlIGltYWdlIGluIHJlYWwtd29ybGQgY29vcmRpbmF0ZXMuDQorICAgIGRvdWJsZSAgICAgZGlzdGFuY2U7ICAgICAgICAgICAvL1RoZSBsb2NhdGlvbiBvZiB0aGUgZWRnZSBmcm9tIHRoZSBmaXJzdCBwb2ludCBhbG9uZyB0aGUgYm91bmRhcnkgb2YgdGhlIGlucHV0IFJPSS4NCisgICAgZG91YmxlICAgICBjYWxpYnJhdGVkRGlzdGFuY2U7IC8vVGhlIGxvY2F0aW9uIG9mIHRoZSBlZGdlIGZyb20gdGhlIGZpcnN0IHBvaW50IGFsb25nIHRoZSBib3VuZGFyeSBvZiB0aGUgaW5wdXQgUk9JIGluIHJlYWwtd29ybGQgY29vcmRpbmF0ZXMuDQorICAgIGRvdWJsZSAgICAgbWFnbml0dWRlOyAgICAgICAgICAvL1RoZSBpbnRlbnNpdHkgY29udHJhc3QgYXQgdGhlIGVkZ2UuDQorICAgIGRvdWJsZSAgICAgbm9pc2VQZWFrOyAgICAgICAgICAvL1RoZSBzdHJlbmd0aCBvZiB0aGUgbm9pc2UgYXNzb2NpYXRlZCB3aXRoIHRoZSBjdXJyZW50IGVkZ2UuDQorICAgIGludCAgICAgICAgcmlzaW5nOyAgICAgICAgICAgICAvL0luZGljYXRlcyB0aGUgcG9sYXJpdHkgb2YgdGhlIGVkZ2UuDQorfSBFZGdlSW5mbzsNCisNCit0eXBlZGVmIHN0cnVjdCBTZWFyY2hMaW5lSW5mb19zdHJ1Y3Qgew0KKyAgICBMaW5lRmxvYXQgICBsaW5lQ29vcmRpbmF0ZXM7IC8vVGhlIGVuZHBvaW50cyBvZiB0aGUgc2VhcmNoIGxpbmUuDQorICAgIEVkZ2VSZXBvcnQyIGVkZ2VSZXBvcnQ7ICAgICAgLy9EZXNjcmliZXMgdGhlIGVkZ2VzIGZvdW5kIGluIHRoaXMgc2VhcmNoIGxpbmUuDQorfSBTZWFyY2hMaW5lSW5mbzsNCisNCit0eXBlZGVmIHN0cnVjdCBSYWtlUmVwb3J0Ml9zdHJ1Y3Qgew0KKyAgICBFZGdlSW5mbyogICAgICAgZmlyc3RFZGdlczsgICAgIC8vVGhlIGZpcnN0IGVkZ2UgcG9pbnQgZGV0ZWN0ZWQgYWxvbmcgZWFjaCBzZWFyY2ggbGluZSBpbiB0aGUgUk9JLg0KKyAgICB1bnNpZ25lZCBpbnQgICAgbnVtRmlyc3RFZGdlczsgIC8vVGhlIG51bWJlciBvZiBwb2ludHMgaW4gdGhlIGZpcnN0RWRnZXMgYXJyYXkuDQorICAgIEVkZ2VJbmZvKiAgICAgICBsYXN0RWRnZXM7ICAgICAgLy9UaGUgbGFzdCBlZGdlIHBvaW50IGRldGVjdGVkIGFsb25nIGVhY2ggc2VhcmNoIGxpbmUgaW4gdGhlIFJPSS4NCisgICAgdW5zaWduZWQgaW50ICAgIG51bUxhc3RFZGdlczsgICAvL1RoZSBudW1iZXIgb2YgcG9pbnRzIGluIHRoZSBsYXN0RWRnZXMgYXJyYXkuDQorICAgIFNlYXJjaExpbmVJbmZvKiBzZWFyY2hMaW5lczsgICAgLy9UaGUgc2VhcmNoIGxpbmVzIHVzZWQgZm9yIGVkZ2UgZGV0ZWN0aW9uLg0KKyAgICB1bnNpZ25lZCBpbnQgICAgbnVtU2VhcmNoTGluZXM7IC8vVGhlIG51bWJlciBvZiBzZWFyY2ggbGluZXMgdXNlZCBpbiB0aGUgZWRnZSBkZXRlY3Rpb24uDQorfSBSYWtlUmVwb3J0MjsNCisNCit0eXBlZGVmIHN0cnVjdCBUcmFuc2Zvcm1CZWhhdmlvcnNfc3RydWN0IHsNCisgICAgR3JvdXBCZWhhdmlvciBTaGlmdEJlaGF2aW9yOyAgICAvL1NwZWNpZmllcyB0aGUgYmVoYXZpb3Igb2YgYW4gb3ZlcmxheSBncm91cCB3aGVuIGEgc2hpZnQgb3BlcmF0aW9uIGlzIGFwcGxpZWQgdG8gYW4gaW1hZ2UuDQorICAgIEdyb3VwQmVoYXZpb3IgU2NhbGVCZWhhdmlvcjsgICAgLy9TcGVjaWZpZXMgdGhlIGJlaGF2aW9yIG9mIGFuIG92ZXJsYXkgZ3JvdXAgd2hlbiBhIHNjYWxlIG9wZXJhdGlvbiBpcyBhcHBsaWVkIHRvIGFuIGltYWdlLg0KKyAgICBHcm91cEJlaGF2aW9yIFJvdGF0ZUJlaGF2aW9yOyAgIC8vU3BlY2lmaWVzIHRoZSBiZWhhdmlvciBvZiBhbiBvdmVybGF5IGdyb3VwIHdoZW4gYSByb3RhdGUgb3BlcmF0aW9uIGlzIGFwcGxpZWQgdG8gYW4gaW1hZ2UuDQorICAgIEdyb3VwQmVoYXZpb3IgU3ltbWV0cnlCZWhhdmlvcjsgLy9TcGVjaWZpZXMgdGhlIGJlaGF2aW9yIG9mIGFuIG92ZXJsYXkgZ3JvdXAgd2hlbiBhIHN5bW1ldHJ5IG9wZXJhdGlvbiBpcyBhcHBsaWVkIHRvIGFuIGltYWdlLg0KK30gVHJhbnNmb3JtQmVoYXZpb3JzOw0KKw0KK3R5cGVkZWYgc3RydWN0IFFSQ29kZURhdGFUb2tlbl9zdHJ1Y3Qgew0KKyAgICBRUlN0cmVhbU1vZGUgICBtb2RlOyAgICAgICAvL1NwZWNpZmllcyB0aGUgc3RyZWFtIG1vZGUgb3IgdGhlIGZvcm1hdCBvZiB0aGUgZGF0YSB0aGF0IGlzIGVuY29kZWQgaW4gdGhlIFFSIGNvZGUuDQorICAgIHVuc2lnbmVkIGludCAgIG1vZGVEYXRhOyAgIC8vSW5kaWNhdGVzIHNwZWNpZmllcnMgdXNlZCBieSB0aGUgdXNlciB0byBwb3N0cHJvY2VzcyB0aGUgZGF0YSBpZiBpdCByZXF1aXJlcyBpdC4NCisgICAgdW5zaWduZWQgY2hhciogZGF0YTsgICAgICAgLy9TaG93cyB0aGUgZW5jb2RlZCBkYXRhIGluIHRoZSBRUiBjb2RlLg0KKyAgICB1bnNpZ25lZCBpbnQgICBkYXRhTGVuZ3RoOyAvL1NwZWNpZmllcyB0aGUgbGVuZ3RoIG9mIHRoZSBkYXRhIGZvdW5kIGluIHRoZSBRUiBjb2RlLg0KK30gUVJDb2RlRGF0YVRva2VuOw0KKw0KK3R5cGVkZWYgc3RydWN0IFBhcnRpY2xlRmlsdGVyT3B0aW9uc19zdHJ1Y3Qgew0KKyAgICBpbnQgcmVqZWN0TWF0Y2hlczsgLy9TZXQgdGhpcyBwYXJhbWV0ZXIgdG8gVFJVRSB0byB0cmFuc2ZlciBvbmx5IHRob3NlIHBhcnRpY2xlcyB0aGF0IGRvIG5vdCBtZWV0IGFsbCB0aGUgY3JpdGVyaWEuDQorICAgIGludCByZWplY3RCb3JkZXI7ICAvL1NldCB0aGlzIGVsZW1lbnQgdG8gVFJVRSB0byByZWplY3QgYm9yZGVyIHBhcnRpY2xlcy4NCisgICAgaW50IGNvbm5lY3Rpdml0eTg7IC8vU2V0IHRoaXMgcGFyYW1ldGVyIHRvIFRSVUUgdG8gdXNlIGNvbm5lY3Rpdml0eS04IHRvIGRldGVybWluZSB3aGV0aGVyIHBhcnRpY2xlcyBhcmUgdG91Y2hpbmcuDQorfSBQYXJ0aWNsZUZpbHRlck9wdGlvbnM7DQorDQordHlwZWRlZiBzdHJ1Y3QgU3RyYWlnaHRFZGdlUmVwb3J0Ml9zdHJ1Y3Qgew0KKyAgICBTdHJhaWdodEVkZ2UqICAgc3RyYWlnaHRFZGdlczsgICAgLy9Db250YWlucyBhbiBhcnJheSBvZiBmb3VuZCBzdHJhaWdodCBlZGdlcy4NCisgICAgdW5zaWduZWQgaW50ICAgIG51bVN0cmFpZ2h0RWRnZXM7IC8vSW5kaWNhdGVzIHRoZSBudW1iZXIgb2Ygc3RyYWlnaHQgZWRnZXMgZm91bmQuDQorICAgIFNlYXJjaExpbmVJbmZvKiBzZWFyY2hMaW5lczsgICAgICAvL0NvbnRhaW5zIGFuIGFycmF5IG9mIGFsbCBzZWFyY2ggbGluZXMgdXNlZCBpbiB0aGUgZGV0ZWN0aW9uLg0KKyAgICB1bnNpZ25lZCBpbnQgICAgbnVtU2VhcmNoTGluZXM7ICAgLy9UaGUgbnVtYmVyIG9mIHNlYXJjaCBsaW5lcyB1c2VkIGluIHRoZSBlZGdlIGRldGVjdGlvbi4NCit9IFN0cmFpZ2h0RWRnZVJlcG9ydDI7DQorDQordHlwZWRlZiBzdHJ1Y3QgU3RyYWlnaHRFZGdlT3B0aW9uc19zdHJ1Y3Qgew0KKyAgICB1bnNpZ25lZCBpbnQgICAgICAgICAgIG51bUxpbmVzOyAgICAgICAgICAgICAgLy9TcGVjaWZpZXMgdGhlIG51bWJlciBvZiBzdHJhaWdodCBlZGdlcyB0byBmaW5kLg0KKyAgICBTdHJhaWdodEVkZ2VTZWFyY2hNb2RlIHNlYXJjaE1vZGU7ICAgICAgICAgICAgLy9TcGVjaWZpZXMgdGhlIG1ldGhvZCB1c2VkIHRvIGZpbmQgdGhlIHN0cmFpZ2h0IGVkZ2UuDQorICAgIGRvdWJsZSAgICAgICAgICAgICAgICAgbWluU2NvcmU7ICAgICAgICAgICAgICAvL1NwZWNpZmllcyB0aGUgbWluaW11bSBzY29yZSBvZiBhIGRldGVjdGVkIHN0cmFpZ2h0IGVkZ2UuDQorICAgIGRvdWJsZSAgICAgICAgICAgICAgICAgbWF4U2NvcmU7ICAgICAgICAgICAgICAvL1NwZWNpZmllcyB0aGUgbWF4aW11bSBzY29yZSBvZiBhIGRldGVjdGVkIGVkZ2UuDQorICAgIGRvdWJsZSAgICAgICAgICAgICAgICAgb3JpZW50YXRpb247ICAgICAgICAgICAvL1NwZWNpZmllcyB0aGUgYW5nbGUgYXQgd2hpY2ggdGhlIHN0cmFpZ2h0IGVkZ2UgaXMgZXhwZWN0ZWQgdG8gYmUgZm91bmQuDQorICAgIGRvdWJsZSAgICAgICAgICAgICAgICAgYW5nbGVSYW5nZTsgICAgICAgICAgICAvL1NwZWNpZmllcyB0aGUgKy8tIHJhbmdlIGFyb3VuZCB0aGUgb3JpZW50YXRpb24gd2l0aGluIHdoaWNoIHRoZSBzdHJhaWdodCBlZGdlIGlzIGV4cGVjdGVkIHRvIGJlIGZvdW5kLg0KKyAgICBkb3VibGUgICAgICAgICAgICAgICAgIGFuZ2xlVG9sZXJhbmNlOyAgICAgICAgLy9TcGVjaWZpZXMgdGhlIGV4cGVjdGVkIGFuZ3VsYXIgYWNjdXJhY3kgb2YgdGhlIHN0cmFpZ2h0IGVkZ2UuDQorICAgIHVuc2lnbmVkIGludCAgICAgICAgICAgc3RlcFNpemU7ICAgICAgICAgICAgICAvL1NwZWNpZmllcyB0aGUgZ2FwIGluIHBpeGVscyBiZXR3ZWVuIHRoZSBzZWFyY2ggbGluZXMgdXNlZCB3aXRoIHRoZSByYWtlLWJhc2VkIG1ldGhvZHMuDQorICAgIGRvdWJsZSAgICAgICAgICAgICAgICAgbWluU2lnbmFsVG9Ob2lzZVJhdGlvOyAvL1NwZWNpZmllcyB0aGUgbWluaW11bSBzaWduYWwgdG8gbm9pc2UgcmF0aW8gKFNOUikgb2YgdGhlIGVkZ2UgcG9pbnRzIHVzZWQgdG8gZml0IHRoZSBzdHJhaWdodCBlZGdlLg0KKyAgICBkb3VibGUgICAgICAgICAgICAgICAgIG1pbkNvdmVyYWdlOyAgICAgICAgICAgLy9TcGVjaWZpZXMgdGhlIG1pbmltdW0gbnVtYmVyIG9mIHBvaW50cyBhcyBhIHBlcmNlbnRhZ2Ugb2YgdGhlIG51bWJlciBvZiBzZWFyY2ggbGluZXMgdGhhdCBuZWVkIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBkZXRlY3RlZCBzdHJhaWdodCBlZGdlLg0KKyAgICB1bnNpZ25lZCBpbnQgICAgICAgICAgIGhvdWdoSXRlcmF0aW9uczsgICAgICAgLy9TcGVjaWZpZXMgdGhlIG51bWJlciBvZiBpdGVyYXRpb25zIHVzZWQgaW4gdGhlIEhvdWdoLWJhc2VkIG1ldGhvZC4NCit9IFN0cmFpZ2h0RWRnZU9wdGlvbnM7DQorDQordHlwZWRlZiBzdHJ1Y3QgU3RyYWlnaHRFZGdlX3N0cnVjdCB7DQorICAgIExpbmVGbG9hdCAgICBzdHJhaWdodEVkZ2VDb29yZGluYXRlczsgICAgICAgICAgIC8vRW5kIHBvaW50cyBvZiB0aGUgZGV0ZWN0ZWQgc3RyYWlnaHQgZWRnZSBpbiBwaXhlbCBjb29yZGluYXRlcy4NCisgICAgTGluZUZsb2F0ICAgIGNhbGlicmF0ZWRTdHJhaWdodEVkZ2VDb29yZGluYXRlczsgLy9FbmQgcG9pbnRzIG9mIHRoZSBkZXRlY3RlZCBzdHJhaWdodCBlZGdlIGluIHJlYWwtd29ybGQgY29vcmRpbmF0ZXMuDQorICAgIGRvdWJsZSAgICAgICBhbmdsZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vQW5nbGUgb2YgdGhlIGZvdW5kIGVkZ2UgdXNpbmcgdGhlIHBpeGVsIGNvb3JkaW5hdGVzLg0KKyAgICBkb3VibGUgICAgICAgY2FsaWJyYXRlZEFuZ2xlOyAgICAgICAgICAgICAgICAgICAvL0FuZ2xlIG9mIHRoZSBmb3VuZCBlZGdlIHVzaW5nIHRoZSByZWFsLXdvcmxkIGNvb3JkaW5hdGVzLg0KKyAgICBkb3VibGUgICAgICAgc2NvcmU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL0Rlc2NyaWJlcyB0aGUgc2NvcmUgb2YgdGhlIGRldGVjdGVkIGVkZ2UuDQorICAgIGRvdWJsZSAgICAgICBzdHJhaWdodG5lc3M7ICAgICAgICAgICAgICAgICAgICAgIC8vVGhlIHN0cmFpZ2h0bmVzcyB2YWx1ZSBvZiB0aGUgZGV0ZWN0ZWQgc3RyYWlnaHQgZWRnZS4NCisgICAgZG91YmxlICAgICAgIGF2ZXJhZ2VTaWduYWxUb05vaXNlUmF0aW87ICAgICAgICAgLy9EZXNjcmliZXMgdGhlIGF2ZXJhZ2Ugc2lnbmFsIHRvIG5vaXNlIHJhdGlvIChTTlIpIG9mIHRoZSBkZXRlY3RlZCBlZGdlLg0KKyAgICBpbnQgICAgICAgICAgY2FsaWJyYXRpb25WYWxpZDsgICAgICAgICAgICAgICAgICAvL0luZGljYXRlcyBpZiB0aGUgY2FsaWJyYXRpb24gZGF0YSBmb3IgdGhlIHN0cmFpZ2h0IGVkZ2UgaXMgdmFsaWQuDQorICAgIEVkZ2VJbmZvKiAgICB1c2VkRWRnZXM7ICAgICAgICAgICAgICAgICAgICAgICAgIC8vQW4gYXJyYXkgb2YgZWRnZXMgdGhhdCB3ZXJlIHVzZWQgdG8gZGV0ZXJtaW5lIHRoaXMgc3RyYWlnaHQgbGluZS4NCisgICAgdW5zaWduZWQgaW50IG51bVVzZWRFZGdlczsgICAgICAgICAgICAgICAgICAgICAgLy9JbmRpY2F0ZXMgdGhlIG51bWJlciBvZiBlZGdlcyBpbiB0aGUgdXNlZEVkZ2VzIGFycmF5Lg0KK30gU3RyYWlnaHRFZGdlOw0KKw0KK3R5cGVkZWYgc3RydWN0IFFSQ29kZVNlYXJjaE9wdGlvbnNfc3RydWN0IHsNCisgICAgUVJSb3RhdGlvbk1vZGUgICAgIHJvdGF0aW9uTW9kZTsgICAgICAgLy9TcGVjaWZpZXMgdGhlIGFtb3VudCBvZiBRUiBjb2RlIHJvdGF0aW9uIHRoZSBmdW5jdGlvbiBzaG91bGQgYWxsb3cgZm9yLg0KKyAgICB1bnNpZ25lZCBpbnQgICAgICAgc2tpcExvY2F0aW9uOyAgICAgICAvL0lmIHNldCB0byBUUlVFLCBzcGVjaWZpZXMgdGhhdCB0aGUgZnVuY3Rpb24gc2hvdWxkIGFzc3VtZSB0aGF0IHRoZSBRUiBjb2RlIG9jY3VwaWVzIHRoZSBlbnRpcmUgaW1hZ2UgKG9yIHRoZSBlbnRpcmUgc2VhcmNoIHJlZ2lvbikuDQorICAgIHVuc2lnbmVkIGludCAgICAgICBlZGdlVGhyZXNob2xkOyAgICAgIC8vVGhlIHN0cmVuZ3RoIG9mIHRoZSB3ZWFrZXN0IGVkZ2UgdGhlIGZ1bmN0aW9uIHVzZXMgdG8gZmluZCB0aGUgY29hcnNlIGxvY2F0aW9uIG9mIHRoZSBRUiBjb2RlIGluIHRoZSBpbWFnZS4NCisgICAgUVJEZW1vZHVsYXRpb25Nb2RlIGRlbW9kdWxhdGlvbk1vZGU7ICAgLy9UaGUgZGVtb2R1bGF0aW9uIG1vZGUgdGhlIGZ1bmN0aW9uIHVzZXMgdG8gbG9jYXRlIHRoZSBRUiBjb2RlLg0KKyAgICBRUkNlbGxTYW1wbGVTaXplICAgY2VsbFNhbXBsZVNpemU7ICAgICAvL1RoZSBjZWxsIHNhbXBsZSBzaXplIHRoZSBmdW5jdGlvbiB1c2VzIHRvIGxvY2F0ZSB0aGUgUVIgY29kZS4NCisgICAgUVJDZWxsRmlsdGVyTW9kZSAgIGNlbGxGaWx0ZXJNb2RlOyAgICAgLy9UaGUgY2VsbCBmaWx0ZXIgbW9kZSB0aGUgZnVuY3Rpb24gdXNlcyB0byBsb2NhdGUgdGhlIFFSIGNvZGUuDQorICAgIHVuc2lnbmVkIGludCAgICAgICBza2V3RGVncmVlc0FsbG93ZWQ7IC8vU3BlY2lmaWVzIHRoZSBhbW91bnQgb2Ygc2tldyBpbiB0aGUgUVIgY29kZSB0aGUgZnVuY3Rpb24gc2hvdWxkIGFsbG93IGZvci4NCit9IFFSQ29kZVNlYXJjaE9wdGlvbnM7DQorDQordHlwZWRlZiBzdHJ1Y3QgUVJDb2RlU2l6ZU9wdGlvbnNfc3RydWN0IHsNCisgICAgdW5zaWduZWQgaW50IG1pblNpemU7IC8vU3BlY2lmaWVzIHRoZSBtaW5pbXVtIHNpemUgKGluIHBpeGVscykgb2YgdGhlIFFSIGNvZGUgaW4gdGhlIGltYWdlLg0KKyAgICB1bnNpZ25lZCBpbnQgbWF4U2l6ZTsgLy9TcGVjaWZpZXMgdGhlIG1heGltdW0gc2l6ZSAoaW4gcGl4ZWxzKSBvZiB0aGUgUVIgY29kZSBpbiB0aGUgaW1hZ2UuDQorfSBRUkNvZGVTaXplT3B0aW9uczsNCisNCit0eXBlZGVmIHN0cnVjdCBRUkNvZGVEZXNjcmlwdGlvbk9wdGlvbnNfc3RydWN0IHsNCisgICAgUVJEaW1lbnNpb25zIGRpbWVuc2lvbnM7IC8vVGhlIG51bWJlciBvZiByb3dzIGFuZCBjb2x1bW5zIHRoYXQgYXJlIHBvcHVsYXRlZCBmb3IgdGhlIFFSIGNvZGUsIG1lYXN1cmVkIGluIGNlbGxzLg0KKyAgICBRUlBvbGFyaXRpZXMgcG9sYXJpdHk7ICAgLy9UaGUgcG9sYXJpdHkgb2YgdGhlIFFSIGNvZGUuDQorICAgIFFSTWlycm9yTW9kZSBtaXJyb3I7ICAgICAvL1RoaXMgZWxlbWVudCBpcyBUUlVFIGlmIHRoZSBRUiBjb2RlIGFwcGVhcnMgbWlycm9yZWQgaW4gdGhlIGltYWdlIGFuZCBGQUxTRSBpZiB0aGUgUVIgY29kZSBhcHBlYXJzIG5vcm1hbGx5IGluIHRoZSBpbWFnZS4NCisgICAgUVJNb2RlbFR5cGUgIG1vZGVsVHlwZTsgIC8vVGhpcyBvcHRpb24gYWxsb3dzIHlvdSB0byBzcGVjaWZ5IHRoZSB0eXBlIG9mIFFSIGNvZGUuDQorfSBRUkNvZGVEZXNjcmlwdGlvbk9wdGlvbnM7DQorDQordHlwZWRlZiBzdHJ1Y3QgUVJDb2RlUmVwb3J0X3N0cnVjdCB7DQorICAgIHVuc2lnbmVkIGludCAgICAgICBmb3VuZDsgICAgICAgICAgICAgICAgICAgIC8vVGhpcyBlbGVtZW50IGlzIFRSVUUgaWYgdGhlIGZ1bmN0aW9uIGxvY2F0ZWQgYW5kIGRlY29kZWQgYSBRUiBjb2RlIGFuZCBGQUxTRSBpZiB0aGUgZnVuY3Rpb24gZmFpbGVkIHRvIGxvY2F0ZSBhbmQgZGVjb2RlIGEgUVIgY29kZS4NCisgICAgdW5zaWduZWQgY2hhciogICAgIGRhdGE7ICAgICAgICAgICAgICAgICAgICAgLy9UaGUgZGF0YSBlbmNvZGVkIGluIHRoZSBRUiBjb2RlLg0KKyAgICB1bnNpZ25lZCBpbnQgICAgICAgZGF0YUxlbmd0aDsgICAgICAgICAgICAgICAvL1RoZSBsZW5ndGggb2YgdGhlIGRhdGEgYXJyYXkuDQorICAgIFBvaW50RmxvYXQgICAgICAgICBib3VuZGluZ0JveFs0XTsgICAgICAgICAgIC8vQW4gYXJyYXkgb2YgZm91ciBwb2ludHMgZGVzY3JpYmluZyB0aGUgcmVjdGFuZ2xlIHN1cnJvdW5kaW5nIHRoZSBRUiBjb2RlLg0KKyAgICBRUkNvZGVEYXRhVG9rZW4qICAgdG9rZW5pemVkRGF0YTsgICAgICAgICAgICAvL0NvbnRhaW5zIHRoZSBkYXRhIHRva2VuaXplZCBpbiBleGFjdGx5IHRoZSB3YXkgaXQgd2FzIGVuY29kZWQgaW4gdGhlIGNvZGUuDQorICAgIHVuc2lnbmVkIGludCAgICAgICBzaXplT2ZUb2tlbml6ZWREYXRhOyAgICAgIC8vU2l6ZSBvZiB0aGUgdG9rZW5pemVkIGRhdGEuDQorICAgIHVuc2lnbmVkIGludCAgICAgICBudW1FcnJvcnNDb3JyZWN0ZWQ7ICAgICAgIC8vVGhlIG51bWJlciBvZiBlcnJvcnMgdGhlIGZ1bmN0aW9uIGNvcnJlY3RlZCB3aGVuIGRlY29kaW5nIHRoZSBRUiBjb2RlLg0KKyAgICB1bnNpZ25lZCBpbnQgICAgICAgZGltZW5zaW9uczsgICAgICAgICAgICAgICAvL1RoZSBudW1iZXIgb2Ygcm93cyBhbmQgY29sdW1ucyB0aGF0IGFyZSBwb3B1bGF0ZWQgZm9yIHRoZSBRUiBjb2RlLCBtZWFzdXJlZCBpbiBjZWxscy4NCisgICAgdW5zaWduZWQgaW50ICAgICAgIHZlcnNpb247ICAgICAgICAgICAgICAgICAgLy9UaGUgdmVyc2lvbiBvZiB0aGUgUVIgY29kZS4NCisgICAgUVJNb2RlbFR5cGUgICAgICAgIG1vZGVsVHlwZTsgICAgICAgICAgICAgICAgLy9UaGlzIG9wdGlvbiBhbGxvd3MgeW91IHRvIHNwZWNpZnkgd2hhdCB0eXBlIG9mIFFSIGNvZGUgdGhpcyBpcy4NCisgICAgUVJTdHJlYW1Nb2RlICAgICAgIHN0cmVhbU1vZGU7ICAgICAgICAgICAgICAgLy9UaGUgZm9ybWF0IG9mIHRoZSBkYXRhIGVuY29kZWQgaW4gdGhlIHN0cmVhbS4NCisgICAgUVJQb2xhcml0aWVzICAgICAgIG1hdHJpeFBvbGFyaXR5OyAgICAgICAgICAgLy9UaGUgcG9sYXJpdHkgb2YgdGhlIFFSIGNvZGUuDQorICAgIHVuc2lnbmVkIGludCAgICAgICBtaXJyb3JlZDsgICAgICAgICAgICAgICAgIC8vVGhpcyBlbGVtZW50IGlzIFRSVUUgaWYgdGhlIFFSIGNvZGUgYXBwZWFycyBtaXJyb3JlZCBpbiB0aGUgaW1hZ2UgYW5kIEZBTFNFIGlmIHRoZSBRUiBjb2RlIGFwcGVhcnMgbm9ybWFsbHkgaW4gdGhlIGltYWdlLg0KKyAgICB1bnNpZ25lZCBpbnQgICAgICAgcG9zaXRpb25JbkFwcGVuZFN0cmVhbTsgICAvL0luZGljYXRlcyB3aGF0IHBvc2l0aW9uIHRoZSBRUiBjb2RlIGlzIGluIHdpdGggcmVzcGVjdCB0byB0aGUgc3RyZWFtIG9mIGRhdGEgaW4gYWxsIGNvZGVzLg0KKyAgICB1bnNpZ25lZCBpbnQgICAgICAgc2l6ZU9mQXBwZW5kU3RyZWFtOyAgICAgICAvL1NwZWNpZmllcyBob3cgbWFueSBRUiBjb2RlcyBhcmUgcGFydCBvZiBhIGxhcmdlciBhcnJheSBvZiBjb2Rlcy4NCisgICAgaW50ICAgICAgICAgICAgICAgIGZpcnN0RUFOMTI4QXBwbGljYXRpb25JRDsgLy9UaGUgZmlyc3QgRUFOLTEyOCBBcHBsaWNhdGlvbiBJRCBlbmNvdW50ZXJlZCBpbiB0aGUgc3RyZWFtLg0KKyAgICBpbnQgICAgICAgICAgICAgICAgZmlyc3RFQ0lEZXNpZ25hdG9yOyAgICAgICAvL1RoZSBmaXJzdCBSZWdpb25hbCBMYW5ndWFnZSBEZXNpZ25hdG9yIGVuY291bnRlcmVkIGluIHRoZSBzdHJlYW0uDQorICAgIHVuc2lnbmVkIGludCAgICAgICBhcHBlbmRTdHJlYW1JZGVudGlmaWVyOyAgIC8vU3BlY2lmaWVzIHdoYXQgc3RyZWFtIHRoZSBRUiBjb2RlIGlzIGluIHJlbGF0aW9uIHRvIHdoZW4gdGhlIGNvZGUgaXMgcGFydCBvZiBhIGxhcmdlciBhcnJheSBvZiBjb2Rlcy4NCisgICAgdW5zaWduZWQgaW50ICAgICAgIG1pbmltdW1FZGdlU3RyZW5ndGg7ICAgICAgLy9UaGUgc3RyZW5ndGggb2YgdGhlIHdlYWtlc3QgZWRnZSB0aGUgZnVuY3Rpb24gdXNlZCB0byBmaW5kIHRoZSBjb2Fyc2UgbG9jYXRpb24gb2YgdGhlIFFSIGNvZGUgaW4gdGhlIGltYWdlLg0KKyAgICBRUkRlbW9kdWxhdGlvbk1vZGUgZGVtb2R1bGF0aW9uTW9kZTsgICAgICAgICAvL1RoZSBkZW1vZHVsYXRpb24gbW9kZSB0aGUgZnVuY3Rpb24gdXNlZCB0byBsb2NhdGUgdGhlIFFSIGNvZGUuDQorICAgIFFSQ2VsbFNhbXBsZVNpemUgICBjZWxsU2FtcGxlU2l6ZTsgICAgICAgICAgIC8vVGhlIGNlbGwgc2FtcGxlIHNpemUgdGhlIGZ1bmN0aW9uIHVzZWQgdG8gbG9jYXRlIHRoZSBRUiBjb2RlLg0KKyAgICBRUkNlbGxGaWx0ZXJNb2RlICAgY2VsbEZpbHRlck1vZGU7ICAgICAgICAgICAvL1RoZSBjZWxsIGZpbHRlciBtb2RlIHRoZSBmdW5jdGlvbiB1c2VkIHRvIGxvY2F0ZSB0aGUgUVIgY29kZS4NCit9IFFSQ29kZVJlcG9ydDsNCisNCit0eXBlZGVmIHN0cnVjdCBBSU1HcmFkZVJlcG9ydF9zdHJ1Y3Qgew0KKyAgICBBSU1HcmFkZSBvdmVyYWxsR3JhZGU7ICAgICAgICAgICAgICAgLy9UaGUgb3ZlcmFsbCBsZXR0ZXIgZ3JhZGUsIHdoaWNoIGlzIGVxdWFsIHRvIHRoZSBsb3dlc3Qgb2YgdGhlIG90aGVyIGZpdmUgbGV0dGVyIGdyYWRlcy4NCisgICAgQUlNR3JhZGUgZGVjb2RpbmdHcmFkZTsgICAgICAgICAgICAgIC8vVGhlIGxldHRlciBncmFkZSBhc3NpZ25lZCB0byBhIERhdGEgTWF0cml4IGJhcmNvZGUgYmFzZWQgb24gdGhlIHN1Y2Nlc3Mgb2YgdGhlIGZ1bmN0aW9uIGluIGRlY29kaW5nIHRoZSBEYXRhIE1hdHJpeCBiYXJjb2RlLg0KKyAgICBBSU1HcmFkZSBzeW1ib2xDb250cmFzdEdyYWRlOyAgICAgICAgLy9UaGUgbGV0dGVyIGdyYWRlIGFzc2lnbmVkIHRvIGEgRGF0YSBNYXRyaXggYmFyY29kZSBiYXNlZCBvbiB0aGUgc3ltYm9sIGNvbnRyYXN0IHJhdyBzY29yZS4NCisgICAgZmxvYXQgICAgc3ltYm9sQ29udHJhc3Q7ICAgICAgICAgICAgIC8vVGhlIHN5bWJvbCBjb250cmFzdCByYXcgc2NvcmUgcmVwcmVzZW50aW5nIHRoZSBwZXJjZW50YWdlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgbWVhbiBvZiB0aGUgcmVmbGVjdGFuY2Ugb2YgdGhlIGRhcmtlc3QgMTAgcGVyY2VudCBhbmQgbGlnaHRlc3QgMTAgcGVyY2VudCBvZiB0aGUgRGF0YSBNYXRyaXggYmFyY29kZS4NCisgICAgQUlNR3JhZGUgcHJpbnRHcm93dGhHcmFkZTsgICAgICAgICAgIC8vVGhlIHByaW50IGdyb3d0aCBsZXR0ZXIgZ3JhZGUgZm9yIHRoZSBEYXRhIE1hdHJpeCBiYXJjb2RlLg0KKyAgICBmbG9hdCAgICBwcmludEdyb3d0aDsgICAgICAgICAgICAgICAgLy9UaGUgcHJpbnQgZ3Jvd3RoIHJhdyBzY29yZSBmb3IgdGhlIGJhcmNvZGUsIHdoaWNoIGlzIGJhc2VkIG9uIHRoZSBleHRlbnQgdG8gd2hpY2ggZGFyayBvciBsaWdodCBtYXJraW5ncyBhcHByb3ByaWF0ZWx5IGZpbGwgdGhlaXIgbW9kdWxlIGJvdW5kYXJpZXMuDQorICAgIEFJTUdyYWRlIGF4aWFsTm9udW5pZm9ybWl0eUdyYWRlOyAgICAvL1RoZSBheGlhbCBub251bmlmb3JtaXR5IGdyYWRlIGZvciB0aGUgRGF0YSBNYXRyaXggYmFyY29kZS4NCisgICAgZmxvYXQgICAgYXhpYWxOb251bmlmb3JtaXR5OyAgICAgICAgIC8vVGhlIGF4aWFsIG5vbnVuaWZvcm1pdHkgcmF3IHNjb3JlIGZvciB0aGUgYmFyY29kZSwgd2hpY2ggaXMgYmFzZWQgb24gaG93IG11Y2ggdGhlIHNhbXBsaW5nIHBvaW50IHNwYWNpbmcgZGlmZmVycyBmcm9tIG9uZSBheGlzIHRvIGFub3RoZXIuDQorICAgIEFJTUdyYWRlIHVudXNlZEVycm9yQ29ycmVjdGlvbkdyYWRlOyAvL1RoZSB1bnVzZWQgZXJyb3IgY29ycmVjdGlvbiBsZXR0ZXIgZ3JhZGUgZm9yIHRoZSBEYXRhIE1hdHJpeCBiYXJjb2RlLg0KKyAgICBmbG9hdCAgICB1bnVzZWRFcnJvckNvcnJlY3Rpb247ICAgICAgLy9UaGUgdW51c2VkIGVycm9yIGNvcnJlY3Rpb24gcmF3IHNjb3JlIGZvciB0aGUgRGF0YSBNYXRyaXggYmFyY29kZSwgd2hpY2ggaXMgYmFzZWQgb24gdGhlIGV4dGVudCB0byB3aGljaCByZWdpb25hbCBvciBzcG90IGRhbWFnZSBpbiB0aGUgRGF0YSBNYXRyaXggYmFyY29kZSBoYXMgZXJvZGVkIHRoZSByZWFkaW5nIHNhZmV0eSBtYXJnaW4gcHJvdmlkZWQgYnkgdGhlIGVycm9yIGNvcnJlY3Rpb24uDQorfSBBSU1HcmFkZVJlcG9ydDsNCisNCit0eXBlZGVmIHN0cnVjdCBEYXRhTWF0cml4U2l6ZU9wdGlvbnNfc3RydWN0IHsNCisgICAgdW5zaWduZWQgaW50IG1pblNpemU7ICAgICAgICAvL1NwZWNpZmllcyB0aGUgbWluaW11bSBzaXplIChpbiBwaXhlbHMpIG9mIHRoZSBEYXRhIE1hdHJpeCBiYXJjb2RlIGluIHRoZSBpbWFnZS4NCisgICAgdW5zaWduZWQgaW50IG1heFNpemU7ICAgICAgICAvL1NwZWNpZmllcyB0aGUgbWF4aW11bSBzaXplIChpbiBwaXhlbHMpIG9mIHRoZSBEYXRhIE1hdHJpeCBiYXJjb2RlIGluIHRoZSBpbWFnZS4NCisgICAgdW5zaWduZWQgaW50IHF1aWV0Wm9uZVdpZHRoOyAvL1NwZWNpZmllcyB0aGUgZXhwZWN0ZWQgbWluaW11bSBzaXplIG9mIHRoZSBxdWlldCB6b25lLCBpbiBwaXhlbHMuDQorfSBEYXRhTWF0cml4U2l6ZU9wdGlvbnM7DQorDQordHlwZWRlZiBzdHJ1Y3QgRGF0YU1hdHJpeERlc2NyaXB0aW9uT3B0aW9uc19zdHJ1Y3Qgew0KKyAgICBmbG9hdCAgICAgICAgICAgICAgICAgIGFzcGVjdFJhdGlvOyAgICAgICAgLy9TcGVjaWZpZXMgdGhlIHJhdGlvIG9mIHRoZSB3aWR0aCBvZiBlYWNoIERhdGEgTWF0cml4IGJhcmNvZGUgY2VsbCAoaW4gcGl4ZWxzKSB0byB0aGUgaGVpZ2h0IG9mIHRoZSBEYXRhIE1hdHJpeCBiYXJjb2RlIChpbiBwaXhlbHMpLg0KKyAgICB1bnNpZ25lZCBpbnQgICAgICAgICAgIHJvd3M7ICAgICAgICAgICAgICAgLy9TcGVjaWZpZXMgdGhlIG51bWJlciBvZiByb3dzIGluIHRoZSBEYXRhIE1hdHJpeCBiYXJjb2RlLg0KKyAgICB1bnNpZ25lZCBpbnQgICAgICAgICAgIGNvbHVtbnM7ICAgICAgICAgICAgLy9TcGVjaWZpZXMgdGhlIG51bWJlciBvZiBjb2x1bW5zIGluIHRoZSBEYXRhIE1hdHJpeCBiYXJjb2RlLg0KKyAgICBpbnQgICAgICAgICAgICAgICAgICAgIHJlY3RhbmdsZTsgICAgICAgICAgLy9TZXQgdGhpcyBlbGVtZW50IHRvIFRSVUUgdG8gc3BlY2lmeSB0aGF0IHRoZSBEYXRhIE1hdHJpeCBiYXJjb2RlIGlzIHJlY3Rhbmd1bGFyLg0KKyAgICBEYXRhTWF0cml4RUNDICAgICAgICAgIGVjYzsgICAgICAgICAgICAgICAgLy9TcGVjaWZpZXMgdGhlIEVDQyB1c2VkIGZvciB0aGlzIERhdGEgTWF0cml4IGJhcmNvZGUuDQorICAgIERhdGFNYXRyaXhQb2xhcml0eSAgICAgcG9sYXJpdHk7ICAgICAgICAgICAvL1NwZWNpZmllcyB0aGUgZGF0YS10by1iYWNrZ3JvdW5kIGNvbnRyYXN0IGZvciB0aGUgRGF0YSBNYXRyaXggYmFyY29kZS4NCisgICAgRGF0YU1hdHJpeENlbGxGaWxsTW9kZSBjZWxsRmlsbDsgICAgICAgICAgIC8vU3BlY2lmaWVzIHRoZSBmaWxsIHBlcmNlbnRhZ2UgZm9yIGEgY2VsbCBvZiB0aGUgRGF0YSBNYXRyaXggYmFyY29kZSB0aGF0IGlzIGluIHRoZSAiT04iIHN0YXRlLg0KKyAgICBmbG9hdCAgICAgICAgICAgICAgICAgIG1pbkJvcmRlckludGVncml0eTsgLy9TcGVjaWZpZXMgdGhlIG1pbmltdW0gcGVyY2VudGFnZSBvZiB0aGUgYm9yZGVyIChsb2NhdG9yIHBhdHRlcm4gYW5kIHRpbWluZyBwYXR0ZXJuKSB0aGUgZnVuY3Rpb24gc2hvdWxkIGV4cGVjdCBpbiB0aGUgRGF0YSBNYXRyaXggYmFyY29kZS4NCisgICAgRGF0YU1hdHJpeE1pcnJvck1vZGUgICBtaXJyb3JNb2RlOyAgICAgICAgIC8vU3BlY2lmaWVzIGlmIHRoZSBEYXRhIE1hdHJpeCBiYXJjb2RlIGFwcGVhcnMgbm9ybWFsbHkgaW4gdGhlIGltYWdlIG9yIGlmIHRoZSBiYXJjb2RlIGFwcGVhcnMgbWlycm9yZWQgaW4gdGhlIGltYWdlLg0KK30gRGF0YU1hdHJpeERlc2NyaXB0aW9uT3B0aW9uczsNCisNCit0eXBlZGVmIHN0cnVjdCBEYXRhTWF0cml4U2VhcmNoT3B0aW9uc19zdHJ1Y3Qgew0KKyAgICBEYXRhTWF0cml4Um90YXRpb25Nb2RlICAgICByb3RhdGlvbk1vZGU7ICAgICAgICAgICAgIC8vU3BlY2lmaWVzIHRoZSBhbW91bnQgb2YgRGF0YSBNYXRyaXggYmFyY29kZSByb3RhdGlvbiB0aGUgZnVuY3Rpb24gc2hvdWxkIGFsbG93IGZvci4NCisgICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgc2tpcExvY2F0aW9uOyAgICAgICAgICAgICAvL0lmIHNldCB0byBUUlVFLCBzcGVjaWZpZXMgdGhhdCB0aGUgZnVuY3Rpb24gc2hvdWxkIGFzc3VtZSB0aGF0IHRoZSBEYXRhIE1hdHJpeCBiYXJjb2RlIG9jY3VwaWVzIHRoZSBlbnRpcmUgaW1hZ2UgKG9yIHRoZSBlbnRpcmUgc2VhcmNoIHJlZ2lvbikuDQorICAgIHVuc2lnbmVkIGludCAgICAgICAgICAgICAgIGVkZ2VUaHJlc2hvbGQ7ICAgICAgICAgICAgLy9TcGVjaWZpZXMgdGhlIG1pbmltdW0gY29udHJhc3QgYSBwaXhlbCBtdXN0IGhhdmUgaW4gb3JkZXIgdG8gYmUgY29uc2lkZXJlZCBwYXJ0IG9mIGEgbWF0cml4IGNlbGwgZWRnZS4NCisgICAgRGF0YU1hdHJpeERlbW9kdWxhdGlvbk1vZGUgZGVtb2R1bGF0aW9uTW9kZTsgICAgICAgICAvL1NwZWNpZmllcyB0aGUgbW9kZSB0aGUgZnVuY3Rpb24gc2hvdWxkIHVzZSB0byBkZW1vZHVsYXRlIChkZXRlcm1pbmUgd2hpY2ggY2VsbHMgYXJlIG9uIGFuZCB3aGljaCBjZWxscyBhcmUgb2ZmKSB0aGUgRGF0YSBNYXRyaXggYmFyY29kZS4NCisgICAgRGF0YU1hdHJpeENlbGxTYW1wbGVTaXplICAgY2VsbFNhbXBsZVNpemU7ICAgICAgICAgICAvL1NwZWNpZmllcyB0aGUgc2FtcGxlIHNpemUsIGluIHBpeGVscywgdGhlIGZ1bmN0aW9uIHNob3VsZCB0YWtlIHRvIGRldGVybWluZSBpZiBlYWNoIGNlbGwgaXMgb24gb3Igb2ZmLg0KKyAgICBEYXRhTWF0cml4Q2VsbEZpbHRlck1vZGUgICBjZWxsRmlsdGVyTW9kZTsgICAgICAgICAgIC8vU3BlY2lmaWVzIHRoZSBtb2RlIHRoZSBmdW5jdGlvbiB1c2VzIHRvIGRldGVybWluZSB0aGUgcGl4ZWwgdmFsdWUgZm9yIGVhY2ggY2VsbC4NCisgICAgdW5zaWduZWQgaW50ICAgICAgICAgICAgICAgc2tld0RlZ3JlZXNBbGxvd2VkOyAgICAgICAvL1NwZWNpZmllcyB0aGUgYW1vdW50IG9mIHNrZXcgaW4gdGhlIERhdGEgTWF0cml4IGJhcmNvZGUgdGhlIGZ1bmN0aW9uIHNob3VsZCBhbGxvdyBmb3IuDQorICAgIHVuc2lnbmVkIGludCAgICAgICAgICAgICAgIG1heEl0ZXJhdGlvbnM7ICAgICAgICAgICAgLy9TcGVjaWZpZXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGl0ZXJhdGlvbnMgYmVmb3JlIHRoZSBmdW5jdGlvbiBzdG9wcyBsb29raW5nIGZvciB0aGUgRGF0YSBNYXRyaXggYmFyY29kZS4NCisgICAgdW5zaWduZWQgaW50ICAgICAgICAgICAgICAgaW5pdGlhbFNlYXJjaFZlY3RvcldpZHRoOyAvL1NwZWNpZmllcyB0aGUgbnVtYmVyIG9mIHBpeGVscyB0aGUgZnVuY3Rpb24gc2hvdWxkIGF2ZXJhZ2UgdG9nZXRoZXIgdG8gZGV0ZXJtaW5lIHRoZSBsb2NhdGlvbiBvZiBhbiBlZGdlLg0KK30gRGF0YU1hdHJpeFNlYXJjaE9wdGlvbnM7DQorDQordHlwZWRlZiBzdHJ1Y3QgRGF0YU1hdHJpeFJlcG9ydF9zdHJ1Y3Qgew0KKyAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZDsgICAgICAgICAgICAgICAgLy9UaGlzIGVsZW1lbnQgaXMgVFJVRSBpZiB0aGUgZnVuY3Rpb24gbG9jYXRlZCBhbmQgZGVjb2RlZCBhIERhdGEgTWF0cml4IGJhcmNvZGUgYW5kIEZBTFNFIGlmIHRoZSBmdW5jdGlvbiBmYWlsZWQgdG8gbG9jYXRlIGFuZCBkZWNvZGUgYSBEYXRhIE1hdHJpeCBiYXJjb2RlLg0KKyAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICBiaW5hcnk7ICAgICAgICAgICAgICAgLy9UaGlzIGVsZW1lbnQgaXMgVFJVRSBpZiB0aGUgRGF0YSBNYXRyaXggYmFyY29kZSBjb250YWlucyBiaW5hcnkgZGF0YSBhbmQgRkFMU0UgaWYgdGhlIERhdGEgTWF0cml4IGJhcmNvZGUgY29udGFpbnMgdGV4dCBkYXRhLg0KKyAgICB1bnNpZ25lZCBjaGFyKiAgICAgICAgICAgICBkYXRhOyAgICAgICAgICAgICAgICAgLy9UaGUgZGF0YSBlbmNvZGVkIGluIHRoZSBEYXRhIE1hdHJpeCBiYXJjb2RlLg0KKyAgICB1bnNpZ25lZCBpbnQgICAgICAgICAgICAgICBkYXRhTGVuZ3RoOyAgICAgICAgICAgLy9UaGUgbGVuZ3RoIG9mIHRoZSBkYXRhIGFycmF5Lg0KKyAgICBQb2ludEZsb2F0ICAgICAgICAgICAgICAgICBib3VuZGluZ0JveFs0XTsgICAgICAgLy9BbiBhcnJheSBvZiBmb3VyIHBvaW50cyBkZXNjcmliaW5nIHRoZSByZWN0YW5nbGUgc3Vycm91bmRpbmcgdGhlIERhdGEgTWF0cml4IGJhcmNvZGUuDQorICAgIHVuc2lnbmVkIGludCAgICAgICAgICAgICAgIG51bUVycm9yc0NvcnJlY3RlZDsgICAvL1RoZSBudW1iZXIgb2YgZXJyb3JzIHRoZSBmdW5jdGlvbiBjb3JyZWN0ZWQgd2hlbiBkZWNvZGluZyB0aGUgRGF0YSBNYXRyaXggYmFyY29kZS4NCisgICAgdW5zaWduZWQgaW50ICAgICAgICAgICAgICAgbnVtRXJhc3VyZXNDb3JyZWN0ZWQ7IC8vVGhlIG51bWJlciBvZiBlcmFzdXJlcyB0aGUgZnVuY3Rpb24gY29ycmVjdGVkIHdoZW4gZGVjb2RpbmcgdGhlIERhdGEgTWF0cml4IGJhcmNvZGUuDQorICAgIGZsb2F0ICAgICAgICAgICAgICAgICAgICAgIGFzcGVjdFJhdGlvOyAgICAgICAgICAvL1NwZWNpZmllcyB0aGUgYXNwZWN0IHJhdGlvIG9mIHRoZSBEYXRhIE1hdHJpeCBiYXJjb2RlIGluIHRoZSBpbWFnZSwgd2hpY2ggZXF1YWxzIHRoZSByYXRpbyBvZiB0aGUgd2lkdGggb2YgYSBEYXRhIE1hdHJpeCBiYXJjb2RlIGNlbGwgKGluIHBpeGVscykgdG8gdGhlIGhlaWdodCBvZiBhIERhdGEgTWF0cml4IGJhcmNvZGUgY2VsbCAoaW4gcGl4ZWxzKS4NCisgICAgdW5zaWduZWQgaW50ICAgICAgICAgICAgICAgcm93czsgICAgICAgICAgICAgICAgIC8vVGhlIG51bWJlciBvZiByb3dzIGluIHRoZSBEYXRhIE1hdHJpeCBiYXJjb2RlLg0KKyAgICB1bnNpZ25lZCBpbnQgICAgICAgICAgICAgICBjb2x1bW5zOyAgICAgICAgICAgICAgLy9UaGUgbnVtYmVyIG9mIGNvbHVtbnMgaW4gdGhlIERhdGEgTWF0cml4IGJhcmNvZGUuDQorICAgIERhdGFNYXRyaXhFQ0MgICAgICAgICAgICAgIGVjYzsgICAgICAgICAgICAgICAgICAvL1RoZSBFcnJvciBDb3JyZWN0aW9uIENvZGUgKEVDQykgdXNlZCBieSB0aGUgRGF0YSBNYXRyaXggYmFyY29kZS4NCisgICAgRGF0YU1hdHJpeFBvbGFyaXR5ICAgICAgICAgcG9sYXJpdHk7ICAgICAgICAgICAgIC8vVGhlIHBvbGFyaXR5IG9mIHRoZSBEYXRhIE1hdHJpeCBiYXJjb2RlLg0KKyAgICBEYXRhTWF0cml4Q2VsbEZpbGxNb2RlICAgICBjZWxsRmlsbDsgICAgICAgICAgICAgLy9UaGUgY2VsbCBmaWxsIHBlcmNlbnRhZ2Ugb2YgdGhlIERhdGEgTWF0cml4IGJhcmNvZGUuDQorICAgIGZsb2F0ICAgICAgICAgICAgICAgICAgICAgIGJvcmRlckludGVncml0eTsgICAgICAvL1RoZSBwZXJjZW50YWdlIG9mIHRoZSBEYXRhIE1hdHJpeCBiYXJjb2RlIGJvcmRlciB0aGF0IGFwcGVhcnMgY29ycmVjdGx5IGluIHRoZSBpbWFnZS4NCisgICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgbWlycm9yZWQ7ICAgICAgICAgICAgIC8vVGhpcyBlbGVtZW50IGlzIFRSVUUgaWYgdGhlIERhdGEgTWF0cml4IGJhcmNvZGUgYXBwZWFycyBtaXJyb3JlZCBpbiB0aGUgaW1hZ2UgYW5kIEZBTFNFIGlmIHRoZSBEYXRhIE1hdHJpeCBiYXJjb2RlIGFwcGVhcnMgbm9ybWFsbHkgaW4gdGhlIGltYWdlLg0KKyAgICB1bnNpZ25lZCBpbnQgICAgICAgICAgICAgICBtaW5pbXVtRWRnZVN0cmVuZ3RoOyAgLy9UaGUgc3RyZW5ndGggb2YgdGhlIHdlYWtlc3QgZWRnZSB0aGUgZnVuY3Rpb24gdXNlZCB0byBmaW5kIHRoZSBjb2Fyc2UgbG9jYXRpb24gb2YgdGhlIERhdGEgTWF0cml4IGJhcmNvZGUgaW4gdGhlIGltYWdlLg0KKyAgICBEYXRhTWF0cml4RGVtb2R1bGF0aW9uTW9kZSBkZW1vZHVsYXRpb25Nb2RlOyAgICAgLy9UaGUgZGVtb2R1bGF0aW9uIG1vZGUgdGhlIGZ1bmN0aW9uIHVzZWQgdG8gbG9jYXRlIHRoZSBEYXRhIE1hdHJpeCBiYXJjb2RlLg0KKyAgICBEYXRhTWF0cml4Q2VsbFNhbXBsZVNpemUgICBjZWxsU2FtcGxlU2l6ZTsgICAgICAgLy9UaGUgY2VsbCBzYW1wbGUgc2l6ZSB0aGUgZnVuY3Rpb24gdXNlZCB0byBsb2NhdGUgdGhlIERhdGEgTWF0cml4IGJhcmNvZGUuDQorICAgIERhdGFNYXRyaXhDZWxsRmlsdGVyTW9kZSAgIGNlbGxGaWx0ZXJNb2RlOyAgICAgICAvL1RoZSBjZWxsIGZpbHRlciBtb2RlIHRoZSBmdW5jdGlvbiB1c2VkIHRvIGxvY2F0ZSB0aGUgRGF0YSBNYXRyaXggYmFyY29kZS4NCisgICAgdW5zaWduZWQgaW50ICAgICAgICAgICAgICAgaXRlcmF0aW9uczsgICAgICAgICAgIC8vVGhlIG51bWJlciBvZiBpdGVyYXRpb25zIHRoZSBmdW5jdGlvbiB0b29rIGluIGF0dGVtcHRpbmcgdG8gbG9jYXRlIHRoZSBEYXRhIE1hdHJpeCBiYXJjb2RlLg0KK30gRGF0YU1hdHJpeFJlcG9ydDsNCisNCit0eXBlZGVmIHN0cnVjdCBKUEVHMjAwMEZpbGVBZHZhbmNlZE9wdGlvbnNfc3RydWN0IHsNCisgICAgV2F2ZWxldFRyYW5zZm9ybU1vZGUgd2F2ZWxldE1vZGU7ICAgICAgICAgICAgICAgIC8vRGV0ZXJtaW5lcyB3aGljaCB3YXZlbGV0IHRyYW5zZm9ybSB0byB1c2Ugd2hlbiB3cml0aW5nIHRoZSBmaWxlLg0KKyAgICBpbnQgICAgICAgICAgICAgICAgICB1c2VNdWx0aUNvbXBvbmVudFRyYW5zZm9ybTsgLy9TZXQgdGhpcyBwYXJhbWV0ZXIgdG8gVFJVRSB0byB1c2UgYW4gYWRkaXRpb25hbCB0cmFuc2Zvcm0gb24gUkdCIGltYWdlcy4NCisgICAgdW5zaWduZWQgaW50ICAgICAgICAgbWF4V2F2ZWxldFRyYW5zZm9ybUxldmVsOyAgIC8vU3BlY2lmaWVzIHRoZSBtYXhpbXVtIGFsbG93ZWQgbGV2ZWwgb2Ygd2F2ZWxldCB0cmFuc2Zvcm0uDQorICAgIGZsb2F0ICAgICAgICAgICAgICAgIHF1YW50aXphdGlvblN0ZXBTaXplOyAgICAgICAvL1NwZWNpZmllcyB0aGUgYWJzb2x1dGUgYmFzZSBxdWFudGl6YXRpb24gc3RlcCBzaXplIGZvciBkZXJpdmVkIHF1YW50aXphdGlvbiBtb2RlLg0KK30gSlBFRzIwMDBGaWxlQWR2YW5jZWRPcHRpb25zOw0KKw0KK3R5cGVkZWYgc3RydWN0IE1hdGNoR2VvbWV0cmljUGF0dGVybkFkdmFuY2VkT3B0aW9uczJfc3RydWN0IHsNCisgICAgaW50ICAgIG1pbkZlYXR1cmVzVXNlZDsgICAgICAgICAgICAvL1NwZWNpZmllcyB0aGUgbWluaW11bSBudW1iZXIgb2YgZmVhdHVyZXMgdGhlIGZ1bmN0aW9uIHVzZXMgd2hlbiBtYXRjaGluZy4NCisgICAgaW50ICAgIG1heEZlYXR1cmVzVXNlZDsgICAgICAgICAgICAvL1NwZWNpZmllcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgZmVhdHVyZXMgdGhlIGZ1bmN0aW9uIHVzZXMgd2hlbiBtYXRjaGluZy4NCisgICAgaW50ICAgIHN1YnBpeGVsSXRlcmF0aW9uczsgICAgICAgICAvL1NwZWNpZmllcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgaW5jcmVtZW50YWwgaW1wcm92ZW1lbnRzIHVzZWQgdG8gcmVmaW5lIG1hdGNoZXMgd2l0aCBzdWJwaXhlbCBpbmZvcm1hdGlvbi4NCisgICAgZG91YmxlIHN1YnBpeGVsVG9sZXJhbmNlOyAgICAgICAgICAvL1NwZWNpZmllcyB0aGUgbWF4aW11bSBhbW91bnQgb2YgY2hhbmdlLCBpbiBwaXhlbHMsIGJldHdlZW4gY29uc2VjdXRpdmUgaW5jcmVtZW50YWwgaW1wcm92ZW1lbnRzIGluIHRoZSBtYXRjaCBwb3NpdGlvbiBiZWZvcmUgdGhlIGZ1bmN0aW9uIHN0b3BzIHJlZmluaW5nIHRoZSBtYXRjaCBwb3NpdGlvbi4NCisgICAgaW50ICAgIGluaXRpYWxNYXRjaExpc3RMZW5ndGg7ICAgICAvL1NwZWNpZmllcyB0aGUgbWF4aW11bSBzaXplIG9mIHRoZSBtYXRjaCBsaXN0Lg0KKyAgICBmbG9hdCAgbWF0Y2hUZW1wbGF0ZUN1cnZlU2NvcmU7ICAgIC8vU2V0IHRoaXMgZWxlbWVudCB0byBUUlVFIHRvIHNwZWNpZnkgdGhhdCB0aGUgZnVuY3Rpb24gc2hvdWxkIGNhbGN1bGF0ZSB0aGUgbWF0Y2ggY3VydmUgdG8gdGVtcGxhdGUgY3VydmUgc2NvcmUgYW5kIHJldHVybiBpdCBmb3IgZWFjaCBtYXRjaCByZXN1bHQuDQorICAgIGludCAgICBjb3JyZWxhdGlvblNjb3JlOyAgICAgICAgICAgLy9TZXQgdGhpcyBlbGVtZW50IHRvIFRSVUUgdG8gc3BlY2lmeSB0aGF0IHRoZSBmdW5jdGlvbiBzaG91bGQgY2FsY3VsYXRlIHRoZSBjb3JyZWxhdGlvbiBzY29yZSBhbmQgcmV0dXJuIGl0IGZvciBlYWNoIG1hdGNoIHJlc3VsdC4NCisgICAgZG91YmxlIG1pbk1hdGNoU2VwYXJhdGlvbkRpc3RhbmNlOyAvL1NwZWNpZmllcyB0aGUgbWluaW11bSBzZXBhcmF0aW9uIGRpc3RhbmNlLCBpbiBwaXhlbHMsIGJldHdlZW4gdGhlIG9yaWdpbnMgb2YgdHdvIG1hdGNoZXMgdGhhdCBoYXZlIHVuaXF1ZSBwb3NpdGlvbnMuDQorICAgIGRvdWJsZSBtaW5NYXRjaFNlcGFyYXRpb25BbmdsZTsgICAgLy9TcGVjaWZpZXMgdGhlIG1pbmltdW0gYW5ndWxhciBkaWZmZXJlbmNlLCBpbiBkZWdyZWVzLCBiZXR3ZWVuIHR3byBtYXRjaGVzIHRoYXQgaGF2ZSB1bmlxdWUgYW5nbGVzLg0KKyAgICBkb3VibGUgbWluTWF0Y2hTZXBhcmF0aW9uU2NhbGU7ICAgIC8vU3BlY2lmaWVzIHRoZSBtaW5pbXVtIGRpZmZlcmVuY2UgaW4gc2NhbGUsIGV4cHJlc3NlZCBhcyBhIHBlcmNlbnRhZ2UsIGJldHdlZW4gdHdvIG1hdGNoZXMgdGhhdCBoYXZlIHVuaXF1ZSBzY2FsZXMuDQorICAgIGRvdWJsZSBtYXhNYXRjaE92ZXJsYXA7ICAgICAgICAgICAgLy9TcGVjaWZpZXMgdGhlIG1heGltdW0gYW1vdW50IG9mIG92ZXJsYXAsIGV4cHJlc3NlZCBhcyBhIHBlcmNlbnRhZ2UsIGFsbG93ZWQgYmV0d2VlbiB0aGUgYm91bmRpbmcgcmVjdGFuZ2xlcyBvZiB0d28gdW5pcXVlIG1hdGNoZXMuDQorICAgIGludCAgICBjb2Fyc2VSZXN1bHQ7ICAgICAgICAgICAgICAgLy9TcGVjaWZpZXMgd2hldGhlciB5b3Ugd2FudCB0aGUgZnVuY3Rpb24gdG8gc3BlbmQgbGVzcyB0aW1lIGFjY3VyYXRlbHkgZXN0aW1hdGluZyB0aGUgbG9jYXRpb24gb2YgYSBtYXRjaC4NCisgICAgaW50ICAgIHNtb290aENvbnRvdXJzOyAgICAgICAgICAgICAvL1NldCB0aGlzIGVsZW1lbnQgdG8gVFJVRSB0byBzcGVjaWZ5IHNtb290aGluZyBiZSBkb25lIG9uIHRoZSBjb250b3VycyBvZiB0aGUgaW5zcGVjdGlvbiBpbWFnZSBiZWZvcmUgZmVhdHVyZSBleHRyYWN0aW9uLg0KKyAgICBpbnQgICAgZW5hYmxlQ2FsaWJyYXRpb25TdXBwb3J0OyAgIC8vU2V0IHRoaXMgZWxlbWVudCB0byBUUlVFIHRvIHNwZWNpZnkgdGhlIGFsZ29yaXRobSB0cmVhdCB0aGUgaW5zcGVjdGlvbiBpbWFnZSBhcyBhIGNhbGlicmF0ZWQgaW1hZ2UuDQorfSBNYXRjaEdlb21ldHJpY1BhdHRlcm5BZHZhbmNlZE9wdGlvbnMyOw0KKw0KK3R5cGVkZWYgc3RydWN0IEluc3BlY3Rpb25BbGlnbm1lbnRfc3RydWN0IHsNCisgICAgUG9pbnRGbG9hdCBwb3NpdGlvbjsgLy9UaGUgbG9jYXRpb24gb2YgdGhlIGNlbnRlciBvZiB0aGUgZ29sZGVuIHRlbXBsYXRlIGluIHRoZSBpbWFnZSB1bmRlciBpbnNwZWN0aW9uLg0KKyAgICBmbG9hdCAgICAgIHJvdGF0aW9uOyAvL1RoZSByb3RhdGlvbiBvZiB0aGUgZ29sZGVuIHRlbXBsYXRlIGluIHRoZSBpbWFnZSB1bmRlciBpbnNwZWN0aW9uLCBpbiBkZWdyZWVzLg0KKyAgICBmbG9hdCAgICAgIHNjYWxlOyAgICAvL1RoZSBwZXJjZW50YWdlIG9mIHRoZSBzaXplIG9mIHRoZSBhcmVhIHVuZGVyIGluc3BlY3Rpb24gY29tcGFyZWQgdG8gdGhlIHNpemUgb2YgdGhlIGdvbGRlbiB0ZW1wbGF0ZS4NCit9IEluc3BlY3Rpb25BbGlnbm1lbnQ7DQorDQordHlwZWRlZiBzdHJ1Y3QgSW5zcGVjdGlvbk9wdGlvbnNfc3RydWN0IHsNCisgICAgUmVnaXN0cmF0aW9uTWV0aG9kICByZWdpc3RyYXRpb25NZXRob2Q7ICAgIC8vU3BlY2lmaWVzIGhvdyB0aGUgZnVuY3Rpb24gcmVnaXN0ZXJzIHRoZSBnb2xkZW4gdGVtcGxhdGUgYW5kIHRoZSB0YXJnZXQgaW1hZ2UuDQorICAgIE5vcm1hbGl6YXRpb25NZXRob2Qgbm9ybWFsaXphdGlvbk1ldGhvZDsgICAvL1NwZWNpZmllcyBob3cgdGhlIGZ1bmN0aW9uIG5vcm1hbGl6ZXMgdGhlIGdvbGRlbiB0ZW1wbGF0ZSB0byB0aGUgdGFyZ2V0IGltYWdlLg0KKyAgICBpbnQgICAgICAgICAgICAgICAgIGVkZ2VUaGlja25lc3NUb0lnbm9yZTsgLy9TcGVjaWZpZXMgZGVzaXJlZCB0aGlja25lc3Mgb2YgZWRnZXMgdG8gYmUgaWdub3JlZC4NCisgICAgZmxvYXQgICAgICAgICAgICAgICBicmlnaHRUaHJlc2hvbGQ7ICAgICAgIC8vU3BlY2lmaWVzIHRoZSB0aHJlc2hvbGQgZm9yIGFyZWFzIHdoZXJlIHRoZSB0YXJnZXQgaW1hZ2UgaXMgYnJpZ2h0ZXIgdGhhbiB0aGUgZ29sZGVuIHRlbXBsYXRlLg0KKyAgICBmbG9hdCAgICAgICAgICAgICAgIGRhcmtUaHJlc2hvbGQ7ICAgICAgICAgLy9TcGVjaWZpZXMgdGhlIHRocmVzaG9sZCBmb3IgYXJlYXMgd2hlcmUgdGhlIHRhcmdldCBpbWFnZSBpcyBkYXJrZXIgdGhhbiB0aGUgZ29sZGVuIHRlbXBsYXRlLg0KKyAgICBpbnQgICAgICAgICAgICAgICAgIGJpbmFyeTsgICAgICAgICAgICAgICAgLy9TcGVjaWZpZXMgd2hldGhlciB0aGUgZnVuY3Rpb24gc2hvdWxkIHJldHVybiBhIGJpbmFyeSBpbWFnZSBnaXZpbmcgdGhlIGxvY2F0aW9uIG9mIGRlZmVjdHMsIG9yIGEgZ3JheXNjYWxlIGltYWdlIGdpdmluZyB0aGUgaW50ZW5zaXR5IG9mIGRlZmVjdHMuDQorfSBJbnNwZWN0aW9uT3B0aW9uczsNCisNCit0eXBlZGVmIHN0cnVjdCBDaGFyUmVwb3J0Ml9zdHJ1Y3Qgew0KKyAgICBjb25zdCBjaGFyKiBjaGFyYWN0ZXI7ICAgICAgICAgICAvL1RoZSBjaGFyYWN0ZXIgdmFsdWUuDQorICAgIFBvaW50RmxvYXQgIGNvcm5lcls0XTsgICAgICAgICAgIC8vQW4gYXJyYXkgb2YgZm91ciBwb2ludHMgdGhhdCBkZXNjcmliZXMgdGhlIHJlY3RhbmdsZSB0aGF0IHN1cnJvdW5kcyB0aGUgY2hhcmFjdGVyLg0KKyAgICBpbnQgICAgICAgICBsb3dUaHJlc2hvbGQ7ICAgICAgICAvL1RoZSBtaW5pbXVtIHZhbHVlIG9mIHRoZSB0aHJlc2hvbGQgcmFuZ2UgdXNlZCBmb3IgdGhpcyBjaGFyYWN0ZXIuDQorICAgIGludCAgICAgICAgIGhpZ2hUaHJlc2hvbGQ7ICAgICAgIC8vVGhlIG1heGltdW0gdmFsdWUgb2YgdGhlIHRocmVzaG9sZCByYW5nZSB1c2VkIGZvciB0aGlzIGNoYXJhY3Rlci4NCisgICAgaW50ICAgICAgICAgY2xhc3NpZmljYXRpb25TY29yZTsgLy9UaGUgZGVncmVlIHRvIHdoaWNoIHRoZSBhc3NpZ25lZCBjaGFyYWN0ZXIgY2xhc3MgcmVwcmVzZW50cyB0aGUgb2JqZWN0IGJldHRlciB0aGFuIHRoZSBvdGhlciBjaGFyYWN0ZXIgY2xhc3NlcyBpbiB0aGUgY2hhcmFjdGVyIHNldC4NCisgICAgaW50ICAgICAgICAgdmVyaWZpY2F0aW9uU2NvcmU7ICAgLy9UaGUgc2ltaWxhcml0eSBvZiB0aGUgY2hhcmFjdGVyIGFuZCB0aGUgcmVmZXJlbmNlIGNoYXJhY3RlciBmb3IgdGhlIGNoYXJhY3RlciBjbGFzcy4NCisgICAgaW50ICAgICAgICAgdmVyaWZpZWQ7ICAgICAgICAgICAgLy9UaGlzIGVsZW1lbnQgaXMgVFJVRSBpZiBhIHJlZmVyZW5jZSBjaGFyYWN0ZXIgd2FzIGZvdW5kIGZvciB0aGUgY2hhcmFjdGVyIGNsYXNzIGFuZCBGQUxTRSBpZiBhIHJlZmVyZW5jZSBjaGFyYWN0ZXIgd2FzIG5vdCBmb3VuZC4NCit9IENoYXJSZXBvcnQyOw0KKw0KK3R5cGVkZWYgc3RydWN0IENoYXJJbmZvMl9zdHJ1Y3Qgew0KKyAgICBjb25zdCBjaGFyKiAgY2hhclZhbHVlOyAgICAgICAvL1JldHJpZXZlcyB0aGUgY2hhcmFjdGVyIHZhbHVlIG9mIHRoZSBjb3JyZXNwb25kaW5nIGNoYXJhY3RlciBpbiB0aGUgY2hhcmFjdGVyIHNldC4NCisgICAgY29uc3QgSW1hZ2UqIGNoYXJJbWFnZTsgICAgICAgLy9UaGUgaW1hZ2UgeW91IHVzZWQgdG8gdHJhaW4gdGhpcyBjaGFyYWN0ZXIuDQorICAgIGNvbnN0IEltYWdlKiBpbnRlcm5hbEltYWdlOyAgIC8vVGhlIGludGVybmFsIHJlcHJlc2VudGF0aW9uIHRoYXQgTkkgVmlzaW9uIHVzZXMgdG8gbWF0Y2ggb2JqZWN0cyB0byB0aGlzIGNoYXJhY3Rlci4NCisgICAgaW50ICAgICAgICAgIGlzUmVmZXJlbmNlQ2hhcjsgLy9UaGlzIGVsZW1lbnQgaXMgVFJVRSBpZiB0aGUgY2hhcmFjdGVyIGlzIHRoZSByZWZlcmVuY2UgY2hhcmFjdGVyIGZvciB0aGUgY2hhcmFjdGVyIGNsYXNzLg0KK30gQ2hhckluZm8yOw0KKw0KK3R5cGVkZWYgc3RydWN0IFJlYWRUZXh0UmVwb3J0Ml9zdHJ1Y3Qgew0KKyAgICBjb25zdCBjaGFyKiAgcmVhZFN0cmluZzsgICAgICAgICAgLy9UaGUgcmVhZCBzdHJpbmcuDQorICAgIENoYXJSZXBvcnQyKiBjaGFyYWN0ZXJSZXBvcnQ7ICAgICAvL0FuIGFycmF5IG9mIHJlcG9ydHMgZGVzY3JpYmluZyB0aGUgcHJvcGVydGllcyBvZiBlYWNoIGlkZW50aWZpZWQgY2hhcmFjdGVyLg0KKyAgICBpbnQgICAgICAgICAgbnVtQ2hhcmFjdGVyUmVwb3J0czsgLy9UaGUgbnVtYmVyIG9mIGlkZW50aWZpZWQgY2hhcmFjdGVycy4NCit9IFJlYWRUZXh0UmVwb3J0MjsNCisNCit0eXBlZGVmIHN0cnVjdCBFbGxpcHNlRmVhdHVyZV9zdHJ1Y3Qgew0KKyAgICBQb2ludEZsb2F0IHBvc2l0aW9uOyAgICAvL1RoZSBsb2NhdGlvbiBvZiB0aGUgY2VudGVyIG9mIHRoZSBlbGxpcHNlLg0KKyAgICBkb3VibGUgICAgIHJvdGF0aW9uOyAgICAvL1RoZSBvcmllbnRhdGlvbiBvZiB0aGUgc2VtaS1tYWpvciBheGlzIG9mIHRoZSBlbGxpcHNlIHdpdGggcmVzcGVjdCB0byB0aGUgaG9yaXpvbnRhbC4NCisgICAgZG91YmxlICAgICBtaW5vclJhZGl1czsgLy9UaGUgbGVuZ3RoIG9mIHRoZSBzZW1pLW1pbm9yIGF4aXMgb2YgdGhlIGVsbGlwc2UuDQorICAgIGRvdWJsZSAgICAgbWFqb3JSYWRpdXM7IC8vVGhlIGxlbmd0aCBvZiB0aGUgc2VtaS1tYWpvciBheGlzIG9mIHRoZSBlbGxpcHNlLg0KK30gRWxsaXBzZUZlYXR1cmU7DQorDQordHlwZWRlZiBzdHJ1Y3QgQ2lyY2xlRmVhdHVyZV9zdHJ1Y3Qgew0KKyAgICBQb2ludEZsb2F0IHBvc2l0aW9uOyAvL1RoZSBsb2NhdGlvbiBvZiB0aGUgY2VudGVyIG9mIHRoZSBjaXJjbGUuDQorICAgIGRvdWJsZSAgICAgcmFkaXVzOyAgIC8vVGhlIHJhZGl1cyBvZiB0aGUgY2lyY2xlLg0KK30gQ2lyY2xlRmVhdHVyZTsNCisNCit0eXBlZGVmIHN0cnVjdCBDb25zdEN1cnZlRmVhdHVyZV9zdHJ1Y3Qgew0KKyAgICBQb2ludEZsb2F0IHBvc2l0aW9uOyAgIC8vVGhlIGNlbnRlciBvZiB0aGUgY2lyY2xlIHRoYXQgdGhpcyBjb25zdGFudCBjdXJ2ZSBsaWVzIHVwb24uDQorICAgIGRvdWJsZSAgICAgcmFkaXVzOyAgICAgLy9UaGUgcmFkaXVzIG9mIHRoZSBjaXJjbGUgdGhhdCB0aGlzIGNvbnN0YW50IGN1cnZlIGxpZXMgdXBvbi4NCisgICAgZG91YmxlICAgICBzdGFydEFuZ2xlOyAvL1doZW4gdHJhdmVsaW5nIGFsb25nIHRoZSBjb25zdGFudCBjdXJ2ZSBmcm9tIG9uZSBlbmRwb2ludCB0byB0aGUgbmV4dCBpbiBhIGNvdW50ZXJjbG9ja3dpc2UgbWFubmVyLCB0aGlzIGlzIHRoZSBhbmd1bGFyIGNvbXBvbmVudCBvZiB0aGUgdmVjdG9yIG9yaWdpbmF0aW5nIGF0IHRoZSBjZW50ZXIgb2YgdGhlIGNvbnN0YW50IGN1cnZlIGFuZCBwb2ludGluZyB0b3dhcmRzIHRoZSBmaXJzdCBlbmRwb2ludCBvZiB0aGUgY29uc3RhbnQgY3VydmUuDQorICAgIGRvdWJsZSAgICAgZW5kQW5nbGU7ICAgLy9XaGVuIHRyYXZlbGluZyBhbG9uZyB0aGUgY29uc3RhbnQgY3VydmUgZnJvbSBvbmUgZW5kcG9pbnQgdG8gdGhlIG5leHQgaW4gYSBjb3VudGVyY2xvY2t3aXNlIG1hbm5lciwgdGhpcyBpcyB0aGUgYW5ndWxhciBjb21wb25lbnQgb2YgdGhlIHZlY3RvciBvcmlnaW5hdGluZyBhdCB0aGUgY2VudGVyIG9mIHRoZSBjb25zdGFudCBjdXJ2ZSBhbmQgcG9pbnRpbmcgdG93YXJkcyB0aGUgc2Vjb25kIGVuZHBvaW50IG9mIHRoZSBjb25zdGFudCBjdXJ2ZS4NCit9IENvbnN0Q3VydmVGZWF0dXJlOw0KKw0KK3R5cGVkZWYgc3RydWN0IFJlY3RhbmdsZUZlYXR1cmVfc3RydWN0IHsNCisgICAgUG9pbnRGbG9hdCBwb3NpdGlvbjsgIC8vVGhlIGNlbnRlciBvZiB0aGUgcmVjdGFuZ2xlLg0KKyAgICBQb2ludEZsb2F0IGNvcm5lcls0XTsgLy9UaGUgZm91ciBjb3JuZXJzIG9mIHRoZSByZWN0YW5nbGUuDQorICAgIGRvdWJsZSAgICAgcm90YXRpb247ICAvL1RoZSBvcmllbnRhdGlvbiBvZiB0aGUgcmVjdGFuZ2xlIHdpdGggcmVzcGVjdCB0byB0aGUgaG9yaXpvbnRhbC4NCisgICAgZG91YmxlICAgICB3aWR0aDsgICAgIC8vVGhlIHdpZHRoIG9mIHRoZSByZWN0YW5nbGUuDQorICAgIGRvdWJsZSAgICAgaGVpZ2h0OyAgICAvL1RoZSBoZWlnaHQgb2YgdGhlIHJlY3RhbmdsZS4NCit9IFJlY3RhbmdsZUZlYXR1cmU7DQorDQordHlwZWRlZiBzdHJ1Y3QgTGVnRmVhdHVyZV9zdHJ1Y3Qgew0KKyAgICBQb2ludEZsb2F0IHBvc2l0aW9uOyAgLy9UaGUgbG9jYXRpb24gb2YgdGhlIGxlZyBmZWF0dXJlLg0KKyAgICBQb2ludEZsb2F0IGNvcm5lcls0XTsgLy9UaGUgZm91ciBjb3JuZXJzIG9mIHRoZSBsZWcgZmVhdHVyZS4NCisgICAgZG91YmxlICAgICByb3RhdGlvbjsgIC8vVGhlIG9yaWVudGF0aW9uIG9mIHRoZSBsZWcgd2l0aCByZXNwZWN0IHRvIHRoZSBob3Jpem9udGFsLg0KKyAgICBkb3VibGUgICAgIHdpZHRoOyAgICAgLy9UaGUgd2lkdGggb2YgdGhlIGxlZy4NCisgICAgZG91YmxlICAgICBoZWlnaHQ7ICAgIC8vVGhlIGhlaWdodCBvZiB0aGUgbGVnLg0KK30gTGVnRmVhdHVyZTsNCisNCit0eXBlZGVmIHN0cnVjdCBDb3JuZXJGZWF0dXJlX3N0cnVjdCB7DQorICAgIFBvaW50RmxvYXQgcG9zaXRpb247ICAgICAgLy9UaGUgbG9jYXRpb24gb2YgdGhlIGNvcm5lciBmZWF0dXJlLg0KKyAgICBkb3VibGUgICAgIHJvdGF0aW9uOyAgICAgIC8vVGhlIGFuZ3VsYXIgY29tcG9uZW50IG9mIHRoZSB2ZWN0b3IgYmlzZWN0aW5nIHRoZSBjb3JuZXIgZnJvbSBwb3NpdGlvbi4NCisgICAgZG91YmxlICAgICBlbmNsb3NlZEFuZ2xlOyAvL1RoZSBtZWFzdXJlIG9mIHRoZSBlbmNsb3NlZCBhbmdsZSBvZiB0aGUgY29ybmVyLg0KKyAgICBpbnQgICAgICAgIGlzVmlydHVhbDsgICAgIA0KK30gQ29ybmVyRmVhdHVyZTsNCisNCit0eXBlZGVmIHN0cnVjdCBMaW5lRmVhdHVyZV9zdHJ1Y3Qgew0KKyAgICBQb2ludEZsb2F0IHN0YXJ0UG9pbnQ7IC8vVGhlIHN0YXJ0aW5nIHBvaW50IG9mIHRoZSBsaW5lLg0KKyAgICBQb2ludEZsb2F0IGVuZFBvaW50OyAgIC8vVGhlIGVuZGluZyBwb2ludCBvZiB0aGUgbGluZS4NCisgICAgZG91YmxlICAgICBsZW5ndGg7ICAgICAvL1RoZSBsZW5ndGggb2YgdGhlIGxpbmUgbWVhc3VyZWQgaW4gcGl4ZWxzIGZyb20gdGhlIHN0YXJ0IHBvaW50IHRvIHRoZSBlbmQgcG9pbnQuDQorICAgIGRvdWJsZSAgICAgcm90YXRpb247ICAgLy9UaGUgb3JpZW50YXRpb24gb2YgdGhlIGxpbmUgd2l0aCByZXNwZWN0IHRvIHRoZSBob3Jpem9udGFsLg0KK30gTGluZUZlYXR1cmU7DQorDQordHlwZWRlZiBzdHJ1Y3QgUGFyYWxsZWxMaW5lUGFpckZlYXR1cmVfc3RydWN0IHsNCisgICAgUG9pbnRGbG9hdCBmaXJzdFN0YXJ0UG9pbnQ7ICAvL1RoZSBzdGFydGluZyBwb2ludCBvZiB0aGUgZmlyc3QgbGluZSBvZiB0aGUgcGFpci4NCisgICAgUG9pbnRGbG9hdCBmaXJzdEVuZFBvaW50OyAgICAvL1RoZSBlbmRpbmcgcG9pbnQgb2YgdGhlIGZpcnN0IGxpbmUgb2YgdGhlIHBhaXIuDQorICAgIFBvaW50RmxvYXQgc2Vjb25kU3RhcnRQb2ludDsgLy9UaGUgc3RhcnRpbmcgcG9pbnQgb2YgdGhlIHNlY29uZCBsaW5lIG9mIHRoZSBwYWlyLg0KKyAgICBQb2ludEZsb2F0IHNlY29uZEVuZFBvaW50OyAgIC8vVGhlIGVuZGluZyBwb2ludCBvZiB0aGUgc2Vjb25kIGxpbmUgb2YgdGhlIHBhaXIuDQorICAgIGRvdWJsZSAgICAgcm90YXRpb247ICAgICAgICAgLy9UaGUgb3JpZW50YXRpb24gb2YgdGhlIGZlYXR1cmUgd2l0aCByZXNwZWN0IHRvIHRoZSBob3Jpem9udGFsLg0KKyAgICBkb3VibGUgICAgIGRpc3RhbmNlOyAgICAgICAgIC8vVGhlIGRpc3RhbmNlIGZyb20gdGhlIGZpcnN0IGxpbmUgdG8gdGhlIHNlY29uZCBsaW5lLg0KK30gUGFyYWxsZWxMaW5lUGFpckZlYXR1cmU7DQorDQordHlwZWRlZiBzdHJ1Y3QgUGFpck9mUGFyYWxsZWxMaW5lUGFpcnNGZWF0dXJlX3N0cnVjdCB7DQorICAgIFBhcmFsbGVsTGluZVBhaXJGZWF0dXJlIGZpcnN0UGFyYWxsZWxMaW5lUGFpcjsgIC8vVGhlIGZpcnN0IHBhcmFsbGVsIGxpbmUgcGFpci4NCisgICAgUGFyYWxsZWxMaW5lUGFpckZlYXR1cmUgc2Vjb25kUGFyYWxsZWxMaW5lUGFpcjsgLy9UaGUgc2Vjb25kIHBhcmFsbGVsIGxpbmUgcGFpci4NCisgICAgZG91YmxlICAgICAgICAgICAgICAgICAgcm90YXRpb247ICAgICAgICAgICAgICAgLy9UaGUgb3JpZW50YXRpb24gb2YgdGhlIGZlYXR1cmUgd2l0aCByZXNwZWN0IHRvIHRoZSBob3Jpem9udGFsLg0KKyAgICBkb3VibGUgICAgICAgICAgICAgICAgICBkaXN0YW5jZTsgICAgICAgICAgICAgICAvL1RoZSBkaXN0YW5jZSBmcm9tIHRoZSBtaWRsaW5lIG9mIHRoZSBmaXJzdCBwYXJhbGxlbCBsaW5lIHBhaXIgdG8gdGhlIG1pZGxpbmUgb2YgdGhlIHNlY29uZCBwYXJhbGxlbCBsaW5lIHBhaXIuDQorfSBQYWlyT2ZQYXJhbGxlbExpbmVQYWlyc0ZlYXR1cmU7DQorDQordHlwZWRlZiB1bmlvbiBHZW9tZXRyaWNGZWF0dXJlX3VuaW9uIHsNCisgICAgQ2lyY2xlRmVhdHVyZSogICAgICAgICAgICAgICAgICBjaXJjbGU7ICAgICAgICAgICAgICAgICAgLy9BIHBvaW50ZXIgdG8gYSBDaXJjbGVGZWF0dXJlLg0KKyAgICBFbGxpcHNlRmVhdHVyZSogICAgICAgICAgICAgICAgIGVsbGlwc2U7ICAgICAgICAgICAgICAgICAvL0EgcG9pbnRlciB0byBhbiBFbGxpcHNlRmVhdHVyZS4NCisgICAgQ29uc3RDdXJ2ZUZlYXR1cmUqICAgICAgICAgICAgICBjb25zdEN1cnZlOyAgICAgICAgICAgICAgLy9BIHBvaW50ZXIgdG8gYSBDb25zdEN1cnZlRmVhdHVyZS4NCisgICAgUmVjdGFuZ2xlRmVhdHVyZSogICAgICAgICAgICAgICByZWN0YW5nbGU7ICAgICAgICAgICAgICAgLy9BIHBvaW50ZXIgdG8gYSBSZWN0YW5nbGVGZWF0dXJlLg0KKyAgICBMZWdGZWF0dXJlKiAgICAgICAgICAgICAgICAgICAgIGxlZzsgICAgICAgICAgICAgICAgICAgICAvL0EgcG9pbnRlciB0byBhIExlZ0ZlYXR1cmUuDQorICAgIENvcm5lckZlYXR1cmUqICAgICAgICAgICAgICAgICAgY29ybmVyOyAgICAgICAgICAgICAgICAgIC8vQSBwb2ludGVyIHRvIGEgQ29ybmVyRmVhdHVyZS4NCisgICAgUGFyYWxsZWxMaW5lUGFpckZlYXR1cmUqICAgICAgICBwYXJhbGxlbExpbmVQYWlyOyAgICAgICAgLy9BIHBvaW50ZXIgdG8gYSBQYXJhbGxlbExpbmVQYWlyRmVhdHVyZS4NCisgICAgUGFpck9mUGFyYWxsZWxMaW5lUGFpcnNGZWF0dXJlKiBwYWlyT2ZQYXJhbGxlbExpbmVQYWlyczsgLy9BIHBvaW50ZXIgdG8gYSBQYWlyT2ZQYXJhbGxlbExpbmVQYWlyc0ZlYXR1cmUuDQorICAgIExpbmVGZWF0dXJlKiAgICAgICAgICAgICAgICAgICAgbGluZTsgICAgICAgICAgICAgICAgICAgIC8vQSBwb2ludGVyIHRvIGEgTGluZUZlYXR1cmUuDQorICAgIENsb3NlZEN1cnZlRmVhdHVyZSogICAgICAgICAgICAgY2xvc2VkQ3VydmU7ICAgICAgICAgICAgIC8vQSBwb2ludGVyIHRvIGEgQ2xvc2VkQ3VydmVGZWF0dXJlLg0KK30gR2VvbWV0cmljRmVhdHVyZTsNCisNCit0eXBlZGVmIHN0cnVjdCBGZWF0dXJlRGF0YV9zdHJ1Y3Qgew0KKyAgICBGZWF0dXJlVHlwZSAgICAgIHR5cGU7ICAgICAgICAgICAgIC8vQW4gZW51bWVyYXRpb24gcmVwcmVzZW50aW5nIHRoZSB0eXBlIG9mIHRoZSBmZWF0dXJlLg0KKyAgICBQb2ludEZsb2F0KiAgICAgIGNvbnRvdXJQb2ludHM7ICAgIC8vQSBzZXQgb2YgcG9pbnRzIGRlc2NyaWJpbmcgdGhlIGNvbnRvdXIgb2YgdGhlIGZlYXR1cmUuDQorICAgIGludCAgICAgICAgICAgICAgbnVtQ29udG91clBvaW50czsgLy9UaGUgbnVtYmVyIG9mIHBvaW50cyBpbiB0aGUgY29udG91clBvaW50cyBhcnJheS4NCisgICAgR2VvbWV0cmljRmVhdHVyZSBmZWF0dXJlOyAgICAgICAgICAvL1RoZSBmZWF0dXJlIGRhdGEgc3BlY2lmaWMgdG8gdGhpcyB0eXBlIG9mIGZlYXR1cmUuDQorfSBGZWF0dXJlRGF0YTsNCisNCit0eXBlZGVmIHN0cnVjdCBHZW9tZXRyaWNQYXR0ZXJuTWF0Y2gyX3N0cnVjdCB7DQorICAgIFBvaW50RmxvYXQgICBwb3NpdGlvbjsgICAgICAgICAgICAgICAgLy9UaGUgbG9jYXRpb24gb2YgdGhlIG9yaWdpbiBvZiB0aGUgdGVtcGxhdGUgaW4gdGhlIG1hdGNoLg0KKyAgICBmbG9hdCAgICAgICAgcm90YXRpb247ICAgICAgICAgICAgICAgIC8vVGhlIHJvdGF0aW9uIG9mIHRoZSBtYXRjaCByZWxhdGl2ZSB0byB0aGUgdGVtcGxhdGUgaW1hZ2UsIGluIGRlZ3JlZXMuDQorICAgIGZsb2F0ICAgICAgICBzY2FsZTsgICAgICAgICAgICAgICAgICAgLy9UaGUgc2l6ZSBvZiB0aGUgbWF0Y2ggcmVsYXRpdmUgdG8gdGhlIHNpemUgb2YgdGhlIHRlbXBsYXRlIGltYWdlLCBleHByZXNzZWQgYXMgYSBwZXJjZW50YWdlLg0KKyAgICBmbG9hdCAgICAgICAgc2NvcmU7ICAgICAgICAgICAgICAgICAgIC8vVGhlIGFjY3VyYWN5IG9mIHRoZSBtYXRjaC4NCisgICAgUG9pbnRGbG9hdCAgIGNvcm5lcls0XTsgICAgICAgICAgICAgICAvL0FuIGFycmF5IG9mIGZvdXIgcG9pbnRzIGRlc2NyaWJpbmcgdGhlIHJlY3RhbmdsZSBzdXJyb3VuZGluZyB0aGUgdGVtcGxhdGUgaW1hZ2UuDQorICAgIGludCAgICAgICAgICBpbnZlcnNlOyAgICAgICAgICAgICAgICAgLy9UaGlzIGVsZW1lbnQgaXMgVFJVRSBpZiB0aGUgbWF0Y2ggaXMgYW4gaW52ZXJzZSBvZiB0aGUgdGVtcGxhdGUgaW1hZ2UuDQorICAgIGZsb2F0ICAgICAgICBvY2NsdXNpb247ICAgICAgICAgICAgICAgLy9UaGUgcGVyY2VudGFnZSBvZiB0aGUgbWF0Y2ggdGhhdCBpcyBvY2NsdWRlZC4NCisgICAgZmxvYXQgICAgICAgIHRlbXBsYXRlTWF0Y2hDdXJ2ZVNjb3JlOyAvL1RoZSBhY2N1cmFjeSBvZiB0aGUgbWF0Y2ggb2J0YWluZWQgYnkgY29tcGFyaW5nIHRoZSB0ZW1wbGF0ZSBjdXJ2ZXMgdG8gdGhlIGN1cnZlcyBpbiB0aGUgbWF0Y2ggcmVnaW9uLg0KKyAgICBmbG9hdCAgICAgICAgbWF0Y2hUZW1wbGF0ZUN1cnZlU2NvcmU7IC8vVGhlIGFjY3VyYWN5IG9mIHRoZSBtYXRjaCBvYnRhaW5lZCBieSBjb21wYXJpbmcgdGhlIGN1cnZlcyBpbiB0aGUgbWF0Y2ggcmVnaW9uIHRvIHRoZSB0ZW1wbGF0ZSBjdXJ2ZXMuDQorICAgIGZsb2F0ICAgICAgICBjb3JyZWxhdGlvblNjb3JlOyAgICAgICAgLy9UaGUgYWNjdXJhY3kgb2YgdGhlIG1hdGNoIG9idGFpbmVkIGJ5IGNvbXBhcmluZyB0aGUgdGVtcGxhdGUgaW1hZ2UgdG8gdGhlIG1hdGNoIHJlZ2lvbiB1c2luZyBhIGNvcnJlbGF0aW9uIG1ldHJpYyB0aGF0IGNvbXBhcmVzIHRoZSB0d28gcmVnaW9ucyBhcyBhIGZ1bmN0aW9uIG9mIHRoZWlyIHBpeGVsIHZhbHVlcy4NCisgICAgU3RyaW5nMjU1ICAgIGxhYmVsOyAgICAgICAgICAgICAgICAgICAvL1RoZSBsYWJlbCBjb3JyZXNwb25kaW5nIHRvIHRoaXMgbWF0Y2ggd2hlbiB0aGUgbWF0Y2ggaXMgcmV0dXJuZWQgYnkgaW1hcU1hdGNoTXVsdGlwbGVHZW9tZXRyaWNQYXR0ZXJucygpLg0KKyAgICBGZWF0dXJlRGF0YSogZmVhdHVyZURhdGE7ICAgICAgICAgICAgIC8vVGhlIGZlYXR1cmVzIHVzZWQgaW4gdGhpcyBtYXRjaC4NCisgICAgaW50ICAgICAgICAgIG51bUZlYXR1cmVEYXRhOyAgICAgICAgICAvL1RoZSBzaXplIG9mIHRoZSBmZWF0dXJlRGF0YSBhcnJheS4NCisgICAgUG9pbnRGbG9hdCAgIGNhbGlicmF0ZWRQb3NpdGlvbjsgICAgICAvL1RoZSBsb2NhdGlvbiBvZiB0aGUgb3JpZ2luIG9mIHRoZSB0ZW1wbGF0ZSBpbiB0aGUgbWF0Y2guDQorICAgIGZsb2F0ICAgICAgICBjYWxpYnJhdGVkUm90YXRpb247ICAgICAgLy9UaGUgcm90YXRpb24gb2YgdGhlIG1hdGNoIHJlbGF0aXZlIHRvIHRoZSB0ZW1wbGF0ZSBpbWFnZSwgaW4gZGVncmVlcy4NCisgICAgUG9pbnRGbG9hdCAgIGNhbGlicmF0ZWRDb3JuZXJbNF07ICAgICAvL0FuIGFycmF5IG9mIGZvdXIgcG9pbnRzIGRlc2NyaWJpbmcgdGhlIHJlY3RhbmdsZSBzdXJyb3VuZGluZyB0aGUgdGVtcGxhdGUgaW1hZ2UuDQorfSBHZW9tZXRyaWNQYXR0ZXJuTWF0Y2gyOw0KKw0KK3R5cGVkZWYgc3RydWN0IENsb3NlZEN1cnZlRmVhdHVyZV9zdHJ1Y3Qgew0KKyAgICBQb2ludEZsb2F0IHBvc2l0aW9uOyAgLy9UaGUgY2VudGVyIG9mIHRoZSBjbG9zZWQgY3VydmUgZmVhdHVyZS4NCisgICAgZG91YmxlICAgICBhcmNMZW5ndGg7IC8vVGhlIGFyYyBsZW5ndGggb2YgdGhlIGNsb3NlZCBjdXJ2ZSBmZWF0dXJlLg0KK30gQ2xvc2VkQ3VydmVGZWF0dXJlOw0KKw0KK3R5cGVkZWYgc3RydWN0IExpbmVNYXRjaF9zdHJ1Y3Qgew0KKyAgICBQb2ludEZsb2F0IHN0YXJ0UG9pbnQ7IC8vVGhlIHN0YXJ0aW5nIHBvaW50IG9mIHRoZSBtYXRjaGVkIGxpbmUuDQorICAgIFBvaW50RmxvYXQgZW5kUG9pbnQ7ICAgLy9UaGUgZW5kaW5nIHBvaW50IG9mIHRoZSBtYXRjaGVkIGxpbmUuDQorICAgIGRvdWJsZSAgICAgbGVuZ3RoOyAgICAgLy9UaGUgbGVuZ3RoIG9mIHRoZSBsaW5lIG1lYXN1cmVkIGluIHBpeGVscyBmcm9tIHRoZSBzdGFydCBwb2ludCB0byB0aGUgZW5kIHBvaW50Lg0KKyAgICBkb3VibGUgICAgIHJvdGF0aW9uOyAgIC8vVGhlIG9yaWVudGF0aW9uIG9mIHRoZSBtYXRjaGVkIGxpbmUuDQorICAgIGRvdWJsZSAgICAgc2NvcmU7ICAgICAgLy9UaGUgc2NvcmUgb2YgdGhlIG1hdGNoZWQgbGluZS4NCit9IExpbmVNYXRjaDsNCisNCit0eXBlZGVmIHN0cnVjdCBMaW5lRGVzY3JpcHRvcl9zdHJ1Y3Qgew0KKyAgICBkb3VibGUgbWluTGVuZ3RoOyAvL1NwZWNpZmllcyB0aGUgbWluaW11bSBsZW5ndGggb2YgYSBsaW5lIHRoZSBmdW5jdGlvbiB3aWxsIHJldHVybi4NCisgICAgZG91YmxlIG1heExlbmd0aDsgLy9TcGVjaWZpZXMgdGhlIG1heGltdW0gbGVuZ3RoIG9mIGEgbGluZSB0aGUgZnVuY3Rpb24gd2lsbCByZXR1cm4uDQorfSBMaW5lRGVzY3JpcHRvcjsNCisNCit0eXBlZGVmIHN0cnVjdCBSZWN0YW5nbGVEZXNjcmlwdG9yX3N0cnVjdCB7DQorICAgIGRvdWJsZSBtaW5XaWR0aDsgIC8vU3BlY2lmaWVzIHRoZSBtaW5pbXVtIHdpZHRoIG9mIGEgcmVjdGFuZ2xlIHRoZSBhbGdvcml0aG0gd2lsbCByZXR1cm4uDQorICAgIGRvdWJsZSBtYXhXaWR0aDsgIC8vU3BlY2lmaWVzIHRoZSBtYXhpbXVtIHdpZHRoIG9mIGEgcmVjdGFuZ2xlIHRoZSBhbGdvcml0aG0gd2lsbCByZXR1cm4uDQorICAgIGRvdWJsZSBtaW5IZWlnaHQ7IC8vU3BlY2lmaWVzIHRoZSBtaW5pbXVtIGhlaWdodCBvZiBhIHJlY3RhbmdsZSB0aGUgYWxnb3JpdGhtIHdpbGwgcmV0dXJuLg0KKyAgICBkb3VibGUgbWF4SGVpZ2h0OyAvL1NwZWNpZmllcyB0aGUgbWF4aW11bSBoZWlnaHQgb2YgYSByZWN0YW5nbGUgdGhlIGFsZ29yaXRobSB3aWxsIHJldHVybi4NCit9IFJlY3RhbmdsZURlc2NyaXB0b3I7DQorDQordHlwZWRlZiBzdHJ1Y3QgUmVjdGFuZ2xlTWF0Y2hfc3RydWN0IHsNCisgICAgUG9pbnRGbG9hdCBjb3JuZXJbNF07IC8vVGhlIGNvcm5lcnMgb2YgdGhlIG1hdGNoZWQgcmVjdGFuZ2xlLg0KKyAgICBkb3VibGUgICAgIHJvdGF0aW9uOyAgLy9UaGUgb3JpZW50YXRpb24gb2YgdGhlIG1hdGNoZWQgcmVjdGFuZ2xlLg0KKyAgICBkb3VibGUgICAgIHdpZHRoOyAgICAgLy9UaGUgd2lkdGggb2YgdGhlIG1hdGNoZWQgcmVjdGFuZ2xlLg0KKyAgICBkb3VibGUgICAgIGhlaWdodDsgICAgLy9UaGUgaGVpZ2h0IG9mIHRoZSBtYXRjaGVkIHJlY3RhbmdsZS4NCisgICAgZG91YmxlICAgICBzY29yZTsgICAgIC8vVGhlIHNjb3JlIG9mIHRoZSBtYXRjaGVkIHJlY3RhbmdsZS4NCit9IFJlY3RhbmdsZU1hdGNoOw0KKw0KK3R5cGVkZWYgc3RydWN0IEVsbGlwc2VEZXNjcmlwdG9yX3N0cnVjdCB7DQorICAgIGRvdWJsZSBtaW5NYWpvclJhZGl1czsgLy9TcGVjaWZpZXMgdGhlIG1pbmltdW0gbGVuZ3RoIG9mIHRoZSBzZW1pLW1ham9yIGF4aXMgb2YgYW4gZWxsaXBzZSB0aGUgZnVuY3Rpb24gd2lsbCByZXR1cm4uDQorICAgIGRvdWJsZSBtYXhNYWpvclJhZGl1czsgLy9TcGVjaWZpZXMgdGhlIG1heGltdW0gbGVuZ3RoIG9mIHRoZSBzZW1pLW1ham9yIGF4aXMgb2YgYW4gZWxsaXBzZSB0aGUgZnVuY3Rpb24gd2lsbCByZXR1cm4uDQorICAgIGRvdWJsZSBtaW5NaW5vclJhZGl1czsgLy9TcGVjaWZpZXMgdGhlIG1pbmltdW0gbGVuZ3RoIG9mIHRoZSBzZW1pLW1pbm9yIGF4aXMgb2YgYW4gZWxsaXBzZSB0aGUgZnVuY3Rpb24gd2lsbCByZXR1cm4uDQorICAgIGRvdWJsZSBtYXhNaW5vclJhZGl1czsgLy9TcGVjaWZpZXMgdGhlIG1heGltdW0gbGVuZ3RoIG9mIHRoZSBzZW1pLW1pbm9yIGF4aXMgb2YgYW4gZWxsaXBzZSB0aGUgZnVuY3Rpb24gd2lsbCByZXR1cm4uDQorfSBFbGxpcHNlRGVzY3JpcHRvcjsNCisNCit0eXBlZGVmIHN0cnVjdCBFbGxpcHNlTWF0Y2hfc3RydWN0IHsNCisgICAgUG9pbnRGbG9hdCBwb3NpdGlvbjsgICAgLy9UaGUgbG9jYXRpb24gb2YgdGhlIGNlbnRlciBvZiB0aGUgbWF0Y2hlZCBlbGxpcHNlLg0KKyAgICBkb3VibGUgICAgIHJvdGF0aW9uOyAgICAvL1RoZSBvcmllbnRhdGlvbiBvZiB0aGUgbWF0Y2hlZCBlbGxpcHNlLg0KKyAgICBkb3VibGUgICAgIG1ham9yUmFkaXVzOyAvL1RoZSBsZW5ndGggb2YgdGhlIHNlbWktbWFqb3IgYXhpcyBvZiB0aGUgbWF0Y2hlZCBlbGxpcHNlLg0KKyAgICBkb3VibGUgICAgIG1pbm9yUmFkaXVzOyAvL1RoZSBsZW5ndGggb2YgdGhlIHNlbWktbWlub3IgYXhpcyBvZiB0aGUgbWF0Y2hlZCBlbGxpcHNlLg0KKyAgICBkb3VibGUgICAgIHNjb3JlOyAgICAgICAvL1RoZSBzY29yZSBvZiB0aGUgbWF0Y2hlZCBlbGxpcHNlLg0KK30gRWxsaXBzZU1hdGNoOw0KKw0KK3R5cGVkZWYgc3RydWN0IENpcmNsZU1hdGNoX3N0cnVjdCB7DQorICAgIFBvaW50RmxvYXQgcG9zaXRpb247IC8vVGhlIGxvY2F0aW9uIG9mIHRoZSBjZW50ZXIgb2YgdGhlIG1hdGNoZWQgY2lyY2xlLg0KKyAgICBkb3VibGUgICAgIHJhZGl1czsgICAvL1RoZSByYWRpdXMgb2YgdGhlIG1hdGNoZWQgY2lyY2xlLg0KKyAgICBkb3VibGUgICAgIHNjb3JlOyAgICAvL1RoZSBzY29yZSBvZiB0aGUgbWF0Y2hlZCBjaXJjbGUuDQorfSBDaXJjbGVNYXRjaDsNCisNCit0eXBlZGVmIHN0cnVjdCBDaXJjbGVEZXNjcmlwdG9yX3N0cnVjdCB7DQorICAgIGRvdWJsZSBtaW5SYWRpdXM7IC8vU3BlY2lmaWVzIHRoZSBtaW5pbXVtIHJhZGl1cyBvZiBhIGNpcmNsZSB0aGUgZnVuY3Rpb24gd2lsbCByZXR1cm4uDQorICAgIGRvdWJsZSBtYXhSYWRpdXM7IC8vU3BlY2lmaWVzIHRoZSBtYXhpbXVtIHJhZGl1cyBvZiBhIGNpcmNsZSB0aGUgZnVuY3Rpb24gd2lsbCByZXR1cm4uDQorfSBDaXJjbGVEZXNjcmlwdG9yOw0KKw0KK3R5cGVkZWYgc3RydWN0IFNoYXBlRGV0ZWN0aW9uT3B0aW9uc19zdHJ1Y3Qgew0KKyAgICB1bnNpZ25lZCBpbnQgbW9kZTsgICAgICAgICAgIC8vU3BlY2lmaWVzIHRoZSBtZXRob2QgdXNlZCB3aGVuIGxvb2tpbmcgZm9yIHRoZSBzaGFwZSBpbiB0aGUgaW1hZ2UuDQorICAgIFJhbmdlRmxvYXQqICBhbmdsZVJhbmdlczsgICAgLy9BbiBhcnJheSBvZiBhbmdsZSByYW5nZXMsIGluIGRlZ3JlZXMsIHdoZXJlIGVhY2ggcmFuZ2Ugc3BlY2lmaWVzIGhvdyBtdWNoIHlvdSBleHBlY3QgdGhlIHNoYXBlIHRvIGJlIHJvdGF0ZWQgaW4gdGhlIGltYWdlLg0KKyAgICBpbnQgICAgICAgICAgbnVtQW5nbGVSYW5nZXM7IC8vVGhlIHNpemUgb2YgdGhlIG9yaWVudGF0aW9uUmFuZ2VzIGFycmF5Lg0KKyAgICBSYW5nZUZsb2F0ICAgc2NhbGVSYW5nZTsgICAgIC8vQSByYW5nZSB0aGF0IHNwZWNpZmllcyB0aGUgc2l6ZXMgb2YgdGhlIHNoYXBlcyB5b3UgZXhwZWN0IHRvIGJlIGluIHRoZSBpbWFnZSwgZXhwcmVzc2VkIGFzIGEgcmF0aW8gcGVyY2VudGFnZSByZXByZXNlbnRpbmcgdGhlIHNpemUgb2YgdGhlIHBhdHRlcm4gaW4gdGhlIGltYWdlIGRpdmlkZWQgYnkgc2l6ZSBvZiB0aGUgb3JpZ2luYWwgcGF0dGVybiBtdWx0aXBsaWVkIGJ5IDEwMC4NCisgICAgZG91YmxlICAgICAgIG1pbk1hdGNoU2NvcmU7ICANCit9IFNoYXBlRGV0ZWN0aW9uT3B0aW9uczsNCisNCit0eXBlZGVmIHN0cnVjdCBDdXJ2ZV9zdHJ1Y3Qgew0KKyAgICBQb2ludEZsb2F0KiAgcG9pbnRzOyAgICAgICAgICAgICAgLy9UaGUgcG9pbnRzIG9uIHRoZSBjdXJ2ZS4NCisgICAgdW5zaWduZWQgaW50IG51bVBvaW50czsgICAgICAgICAgIC8vVGhlIG51bWJlciBvZiBwb2ludHMgaW4gdGhlIGN1cnZlLg0KKyAgICBpbnQgICAgICAgICAgY2xvc2VkOyAgICAgICAgICAgICAgLy9UaGlzIGVsZW1lbnQgaXMgVFJVRSBpZiB0aGUgY3VydmUgaXMgY2xvc2VkIGFuZCBGQUxTRSBpZiB0aGUgY3VydmUgaXMgb3Blbi4NCisgICAgZG91YmxlICAgICAgIGN1cnZlTGVuZ3RoOyAgICAgICAgIC8vVGhlIGxlbmd0aCBvZiB0aGUgY3VydmUuDQorICAgIGRvdWJsZSAgICAgICBtaW5FZGdlU3RyZW5ndGg7ICAgICAvL1RoZSBsb3dlc3QgZWRnZSBzdHJlbmd0aCBkZXRlY3RlZCBvbiB0aGUgY3VydmUuDQorICAgIGRvdWJsZSAgICAgICBtYXhFZGdlU3RyZW5ndGg7ICAgICAvL1RoZSBoaWdoZXN0IGVkZ2Ugc3RyZW5ndGggZGV0ZWN0ZWQgb24gdGhlIGN1cnZlLg0KKyAgICBkb3VibGUgICAgICAgYXZlcmFnZUVkZ2VTdHJlbmd0aDsgLy9UaGUgYXZlcmFnZSBvZiBhbGwgZWRnZSBzdHJlbmd0aHMgZGV0ZWN0ZWQgb24gdGhlIGN1cnZlLg0KK30gQ3VydmU7DQorDQordHlwZWRlZiBzdHJ1Y3QgQ3VydmVPcHRpb25zX3N0cnVjdCB7DQorICAgIEV4dHJhY3Rpb25Nb2RlIGV4dHJhY3Rpb25Nb2RlOyAgIC8vU3BlY2lmaWVzIHRoZSBtZXRob2QgdGhlIGZ1bmN0aW9uIHVzZXMgdG8gaWRlbnRpZnkgY3VydmVzIGluIHRoZSBpbWFnZS4NCisgICAgaW50ICAgICAgICAgICAgdGhyZXNob2xkOyAgICAgICAgLy9TcGVjaWZpZXMgdGhlIG1pbmltdW0gY29udHJhc3QgYSBzZWVkIHBvaW50IG11c3QgaGF2ZSBpbiBvcmRlciB0byBiZWdpbiBhIGN1cnZlLg0KKyAgICBFZGdlRmlsdGVyU2l6ZSBmaWx0ZXJTaXplOyAgICAgICAvL1NwZWNpZmllcyB0aGUgd2lkdGggb2YgdGhlIGVkZ2UgZmlsdGVyIHRoZSBmdW5jdGlvbiB1c2VzIHRvIGlkZW50aWZ5IGN1cnZlcyBpbiB0aGUgaW1hZ2UuDQorICAgIGludCAgICAgICAgICAgIG1pbkxlbmd0aDsgICAgICAgIC8vU3BlY2lmaWVzIHRoZSBsZW5ndGgsIGluIHBpeGVscywgb2YgdGhlIHNtYWxsZXN0IGN1cnZlIHRoZSBmdW5jdGlvbiB3aWxsIGV4dHJhY3QuDQorICAgIGludCAgICAgICAgICAgIHJvd1N0ZXBTaXplOyAgICAgIC8vU3BlY2lmaWVzIHRoZSBkaXN0YW5jZSwgaW4gdGhlIHkgZGlyZWN0aW9uLCBiZXR3ZWVuIGxpbmVzIHRoZSBmdW5jdGlvbiBpbnNwZWN0cyBmb3IgY3VydmUgc2VlZCBwb2ludHMuDQorICAgIGludCAgICAgICAgICAgIGNvbHVtblN0ZXBTaXplOyAgIC8vU3BlY2lmaWVzIHRoZSBkaXN0YW5jZSwgaW4gdGhlIHggZGlyZWN0aW9uLCBiZXR3ZWVuIGNvbHVtbnMgdGhlIGZ1bmN0aW9uIGluc3BlY3RzIGZvciBjdXJ2ZSBzZWVkIHBvaW50cy4NCisgICAgaW50ICAgICAgICAgICAgbWF4RW5kUG9pbnRHYXA7ICAgLy9TcGVjaWZpZXMgdGhlIG1heGltdW0gZ2FwLCBpbiBwaXhlbHMsIGJldHdlZW4gdGhlIGVuZHBvaW50cyBvZiBhIGN1cnZlIHRoYXQgdGhlIGZ1bmN0aW9uIGlkZW50aWZpZXMgYXMgYSBjbG9zZWQgY3VydmUuDQorICAgIGludCAgICAgICAgICAgIG9ubHlDbG9zZWQ7ICAgICAgIC8vU2V0IHRoaXMgZWxlbWVudCB0byBUUlVFIHRvIHNwZWNpZnkgdGhhdCB0aGUgZnVuY3Rpb24gc2hvdWxkIG9ubHkgaWRlbnRpZnkgY2xvc2VkIGN1cnZlcyBpbiB0aGUgaW1hZ2UuDQorICAgIGludCAgICAgICAgICAgIHN1YnBpeGVsQWNjdXJhY3k7IC8vU2V0IHRoaXMgZWxlbWVudCB0byBUUlVFIHRvIHNwZWNpZnkgdGhhdCB0aGUgZnVuY3Rpb24gaWRlbnRpZmllcyB0aGUgbG9jYXRpb24gb2YgY3VydmVzIHdpdGggc3VicGl4ZWwgYWNjdXJhY3kgYnkgaW50ZXJwb2xhdGluZyBiZXR3ZWVuIHBvaW50cyB0byBmaW5kIHRoZSBjcm9zc2luZyBvZiB0aHJlc2hvbGQuDQorfSBDdXJ2ZU9wdGlvbnM7DQorDQordHlwZWRlZiBzdHJ1Y3QgQmFyY29kZTJESW5mb19zdHJ1Y3Qgew0KKyAgICBCYXJjb2RlMkRUeXBlICB0eXBlOyAgICAgICAgICAgICAgICAgLy9UaGUgdHlwZSBvZiB0aGUgMkQgYmFyY29kZS4NCisgICAgaW50ICAgICAgICAgICAgYmluYXJ5OyAgICAgICAgICAgICAgIC8vVGhpcyBlbGVtZW50IGlzIFRSVUUgaWYgdGhlIDJEIGJhcmNvZGUgY29udGFpbnMgYmluYXJ5IGRhdGEgYW5kIEZBTFNFIGlmIHRoZSAyRCBiYXJjb2RlIGNvbnRhaW5zIHRleHQgZGF0YS4NCisgICAgdW5zaWduZWQgY2hhciogZGF0YTsgICAgICAgICAgICAgICAgIC8vVGhlIGRhdGEgZW5jb2RlZCBpbiB0aGUgMkQgYmFyY29kZS4NCisgICAgdW5zaWduZWQgaW50ICAgZGF0YUxlbmd0aDsgICAgICAgICAgIC8vVGhlIGxlbmd0aCBvZiB0aGUgZGF0YSBhcnJheS4NCisgICAgUG9pbnRGbG9hdCAgICAgYm91bmRpbmdCb3hbNF07ICAgICAgIC8vQW4gYXJyYXkgb2YgZm91ciBwb2ludHMgZGVzY3JpYmluZyB0aGUgcmVjdGFuZ2xlIHN1cnJvdW5kaW5nIHRoZSAyRCBiYXJjb2RlLg0KKyAgICB1bnNpZ25lZCBpbnQgICBudW1FcnJvcnNDb3JyZWN0ZWQ7ICAgLy9UaGUgbnVtYmVyIG9mIGVycm9ycyB0aGUgZnVuY3Rpb24gY29ycmVjdGVkIHdoZW4gZGVjb2RpbmcgdGhlIDJEIGJhcmNvZGUuDQorICAgIHVuc2lnbmVkIGludCAgIG51bUVyYXN1cmVzQ29ycmVjdGVkOyAvL1RoZSBudW1iZXIgb2YgZXJhc3VyZXMgdGhlIGZ1bmN0aW9uIGNvcnJlY3RlZCB3aGVuIGRlY29kaW5nIHRoZSAyRCBiYXJjb2RlLg0KKyAgICB1bnNpZ25lZCBpbnQgICByb3dzOyAgICAgICAgICAgICAgICAgLy9UaGUgbnVtYmVyIG9mIHJvd3MgaW4gdGhlIDJEIGJhcmNvZGUuDQorICAgIHVuc2lnbmVkIGludCAgIGNvbHVtbnM7ICAgICAgICAgICAgICAvL1RoZSBudW1iZXIgb2YgY29sdW1ucyBpbiB0aGUgMkQgYmFyY29kZS4NCit9IEJhcmNvZGUyREluZm87DQorDQordHlwZWRlZiBzdHJ1Y3QgRGF0YU1hdHJpeE9wdGlvbnNfc3RydWN0IHsNCisgICAgQmFyY29kZTJEU2VhcmNoTW9kZSBzZWFyY2hNb2RlOyAgIC8vU3BlY2lmaWVzIHRoZSBtb2RlIHRoZSBmdW5jdGlvbiB1c2VzIHRvIHNlYXJjaCBmb3IgYmFyY29kZXMuDQorICAgIEJhcmNvZGUyRENvbnRyYXN0ICAgY29udHJhc3Q7ICAgICAvL1NwZWNpZmllcyB0aGUgY29udHJhc3Qgb2YgdGhlIGJhcmNvZGVzIHRoYXQgdGhlIGZ1bmN0aW9uIHNlYXJjaGVzIGZvci4NCisgICAgQmFyY29kZTJEQ2VsbFNoYXBlICBjZWxsU2hhcGU7ICAgIC8vU3BlY2lmaWVzIHRoZSBzaGFwZSBvZiB0aGUgYmFyY29kZSBkYXRhIGNlbGxzLCB3aGljaCBhZmZlY3RzIGhvdyB0aGUgZnVuY3Rpb24gZGVjb2RlcyB0aGUgYmFyY29kZS4NCisgICAgQmFyY29kZTJEU2hhcGUgICAgICBiYXJjb2RlU2hhcGU7IC8vU3BlY2lmaWVzIHRoZSBzaGFwZSBvZiB0aGUgYmFyY29kZXMgdGhhdCB0aGUgZnVuY3Rpb24gc2VhcmNoZXMgZm9yLg0KKyAgICBEYXRhTWF0cml4U3VidHlwZSAgIHN1YnR5cGU7ICAgICAgLy9TcGVjaWZpZXMgdGhlIERhdGEgTWF0cml4IHN1YnR5cGVzIG9mIHRoZSBiYXJjb2RlcyB0aGF0IHRoZSBmdW5jdGlvbiBzZWFyY2hlcyBmb3IuDQorfSBEYXRhTWF0cml4T3B0aW9uczsNCisNCit0eXBlZGVmIHN0cnVjdCBDbGFzc2lmaWVyQWNjdXJhY3lSZXBvcnRfc3RydWN0IHsNCisgICAgaW50ICAgICBzaXplOyAgICAgICAgICAgICAgICAgICAgICAgLy9UaGUgc2l6ZSBvZiB0aGUgYXJyYXlzIGluIHRoaXMgc3RydWN0dXJlLg0KKyAgICBmbG9hdCAgIGFjY3VyYWN5OyAgICAgICAgICAgICAgICAgICAvL1RoZSBvdmVyYWxsIGFjY3VyYWN5IG9mIHRoZSBjbGFzc2lmaWVyLCBmcm9tIDAgdG8gMTAwMC4NCisgICAgY2hhcioqICBjbGFzc05hbWVzOyAgICAgICAgICAgICAgICAgLy9UaGUgbmFtZXMgb2YgdGhlIGNsYXNzZXMgb2YgdGhpcyBjbGFzc2lmaWVyLg0KKyAgICBkb3VibGUqIGNsYXNzQWNjdXJhY3k7ICAgICAgICAgICAgICAvL0FuIGFycmF5IG9mIHNpemUgZWxlbWVudHMgdGhhdCBjb250YWlucyBhY2N1cmFjeSBpbmZvcm1hdGlvbiBmb3IgZWFjaCBjbGFzcy4NCisgICAgZG91YmxlKiBjbGFzc1ByZWRpY3RpdmVWYWx1ZTsgICAgICAgLy9BbiBhcnJheSBjb250YWluaW5nIHNpemUgZWxlbWVudHMgdGhhdCBjb250YWlucyB0aGUgcHJlZGljdGl2ZSB2YWx1ZXMgb2YgZWFjaCBjbGFzcy4NCisgICAgaW50KiogICBjbGFzc2lmaWNhdGlvbkRpc3RyaWJ1dGlvbjsgLy9BIHR3by1kaW1lbnNpb25hbCBhcnJheSBjb250YWluaW5nIGluZm9ybWF0aW9uIGFib3V0IGhvdyB0aGUgY2xhc3NpZmllciBjbGFzc2lmaWVzIGl0cyBzYW1wbGVzLg0KK30gQ2xhc3NpZmllckFjY3VyYWN5UmVwb3J0Ow0KKw0KK3R5cGVkZWYgc3RydWN0IE5lYXJlc3ROZWlnaGJvckNsYXNzUmVzdWx0X3N0cnVjdCB7DQorICAgIGNoYXIqIGNsYXNzTmFtZTsgICAgICAgICAvL1RoZSBuYW1lIG9mIHRoZSBjbGFzcy4NCisgICAgZmxvYXQgc3RhbmRhcmREZXZpYXRpb247IC8vVGhlIHN0YW5kYXJkIGRldmlhdGlvbiBvZiB0aGUgbWVtYmVycyBvZiB0aGlzIGNsYXNzLg0KKyAgICBpbnQgICBjb3VudDsgICAgICAgICAgICAgLy9UaGUgbnVtYmVyIG9mIHNhbXBsZXMgaW4gdGhpcyBjbGFzcy4NCit9IE5lYXJlc3ROZWlnaGJvckNsYXNzUmVzdWx0Ow0KKw0KK3R5cGVkZWYgc3RydWN0IE5lYXJlc3ROZWlnaGJvclRyYWluaW5nUmVwb3J0X3N0cnVjdCB7DQorICAgIGZsb2F0KiogICAgICAgICAgICAgICAgICAgICBjbGFzc0Rpc3RhbmNlc1RhYmxlOyAvL1RoZSBjb25maWRlbmNlIGluIHRoZSB0cmFpbmluZy4NCisgICAgTmVhcmVzdE5laWdoYm9yQ2xhc3NSZXN1bHQqIGFsbFNjb3JlczsgICAgICAgICAgIC8vQWxsIGNsYXNzZXMgYW5kIHRoZWlyIHNjb3Jlcy4NCisgICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgIGFsbFNjb3Jlc1NpemU7ICAgICAgIC8vVGhlIG51bWJlciBvZiBlbnRyaWVzIGluIGFsbFNjb3Jlcy4NCit9IE5lYXJlc3ROZWlnaGJvclRyYWluaW5nUmVwb3J0Ow0KKw0KK3R5cGVkZWYgc3RydWN0IFBhcnRpY2xlQ2xhc3NpZmllclByZXByb2Nlc3NpbmdPcHRpb25zX3N0cnVjdCB7DQorICAgIGludCAgICAgICAgICAgICBtYW51YWxUaHJlc2hvbGQ7ICAgICAgLy9TZXQgdGhpcyBlbGVtZW50IHRvIFRSVUUgdG8gc3BlY2lmeSB0aGUgdGhyZXNob2xkIHJhbmdlIG1hbnVhbGx5Lg0KKyAgICBSYW5nZUZsb2F0ICAgICAgbWFudWFsVGhyZXNob2xkUmFuZ2U7IC8vSWYgYSBtYW51YWwgdGhyZXNob2xkIGlzIGJlaW5nIGRvbmUsIHRoZSByYW5nZSBvZiBwaXhlbHMgdG8ga2VlcC4NCisgICAgVGhyZXNob2xkTWV0aG9kIGF1dG9UaHJlc2hvbGRNZXRob2Q7ICAvL0lmIGFuIGF1dG9tYXRpYyB0aHJlc2hvbGQgaXMgYmVpbmcgZG9uZSwgdGhlIG1ldGhvZCB1c2VkIHRvIGNhbGN1bGF0ZSB0aGUgdGhyZXNob2xkIHJhbmdlLg0KKyAgICBSYW5nZUZsb2F0ICAgICAgbGltaXRzOyAgICAgICAgICAgICAgIC8vVGhlIGxpbWl0cyBvbiB0aGUgYXV0b21hdGljIHRocmVzaG9sZCByYW5nZS4NCisgICAgUGFydGljbGVUeXBlICAgIHBhcnRpY2xlVHlwZTsgICAgICAgICAvL1NwZWNpZmllcyB3aGF0IGtpbmQgb2YgcGFydGljbGVzIHRvIGxvb2sgZm9yLg0KKyAgICBpbnQgICAgICAgICAgICAgcmVqZWN0Qm9yZGVyOyAgICAgICAgIC8vU2V0IHRoaXMgZWxlbWVudCB0byBUUlVFIHRvIHJlamVjdCBib3JkZXIgcGFydGljbGVzLg0KKyAgICBpbnQgICAgICAgICAgICAgbnVtRXJvc2lvbnM7ICAgICAgICAgIC8vVGhlIG51bWJlciBvZiBlcm9zaW9ucyB0byBwZXJmb3JtLg0KK30gUGFydGljbGVDbGFzc2lmaWVyUHJlcHJvY2Vzc2luZ09wdGlvbnM7DQorDQordHlwZWRlZiBzdHJ1Y3QgQ2xhc3NpZmllclNhbXBsZUluZm9fc3RydWN0IHsNCisgICAgY2hhciogICBjbGFzc05hbWU7ICAgICAgICAgLy9UaGUgbmFtZSBvZiB0aGUgY2xhc3MgdGhpcyBzYW1wbGUgaXMgaW4uDQorICAgIGRvdWJsZSogZmVhdHVyZVZlY3RvcjsgICAgIC8vVGhlIGZlYXR1cmUgdmVjdG9yIG9mIHRoaXMgc2FtcGxlLCBvciBOVUxMIGlmIHRoaXMgaXMgbm90IGEgY3VzdG9tIGNsYXNzaWZpZXIgc2Vzc2lvbi4NCisgICAgaW50ICAgICBmZWF0dXJlVmVjdG9yU2l6ZTsgLy9UaGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBmZWF0dXJlIHZlY3Rvci4NCisgICAgSW1hZ2UqICB0aHVtYm5haWw7ICAgICAgICAgLy9BIHRodW1ibmFpbCBpbWFnZSBvZiB0aGlzIHNhbXBsZSwgb3IgTlVMTCBpZiBubyBpbWFnZSB3YXMgc3BlY2lmaWVkLg0KK30gQ2xhc3NpZmllclNhbXBsZUluZm87DQorDQordHlwZWRlZiBzdHJ1Y3QgQ2xhc3NTY29yZV9zdHJ1Y3Qgew0KKyAgICBjaGFyKiBjbGFzc05hbWU7IC8vVGhlIG5hbWUgb2YgdGhlIGNsYXNzLg0KKyAgICBmbG9hdCBkaXN0YW5jZTsgIC8vVGhlIGRpc3RhbmNlIGZyb20gdGhlIGl0ZW0gdG8gdGhpcyBjbGFzcy4NCit9IENsYXNzU2NvcmU7DQorDQordHlwZWRlZiBzdHJ1Y3QgQ2xhc3NpZmllclJlcG9ydF9zdHJ1Y3Qgew0KKyAgICBjaGFyKiAgICAgICBiZXN0Q2xhc3NOYW1lOyAgICAgICAvL1RoZSBuYW1lIG9mIHRoZSBiZXN0IGNsYXNzIGZvciB0aGUgc2FtcGxlLg0KKyAgICBmbG9hdCAgICAgICBjbGFzc2lmaWNhdGlvblNjb3JlOyAvL1RoZSBzaW1pbGFyaXR5IG9mIHRoZSBzYW1wbGUgYW5kIHRoZSB0d28gY2xvc2VzdCBjbGFzc2VzIGluIHRoZSBjbGFzc2lmaWVyLg0KKyAgICBmbG9hdCAgICAgICBpZGVudGlmaWNhdGlvblNjb3JlOyAvL1RoZSBzaW1pbGFyaXR5IG9mIHRoZSBzYW1wbGUgYW5kIHRoZSBhc3NpZ25lZCBjbGFzcy4NCisgICAgQ2xhc3NTY29yZSogYWxsU2NvcmVzOyAgICAgICAgICAgLy9BbGwgY2xhc3NlcyBhbmQgdGhlaXIgc2NvcmVzLg0KKyAgICBpbnQgICAgICAgICBhbGxTY29yZXNTaXplOyAgICAgICAvL1RoZSBudW1iZXIgb2YgZW50cmllcyBpbiBhbGxTY29yZXMuDQorfSBDbGFzc2lmaWVyUmVwb3J0Ow0KKw0KK3R5cGVkZWYgc3RydWN0IE5lYXJlc3ROZWlnaGJvck9wdGlvbnNfc3RydWN0IHsNCisgICAgTmVhcmVzdE5laWdoYm9yTWV0aG9kIG1ldGhvZDsgLy9UaGUgbWV0aG9kIHRvIHVzZS4NCisgICAgTmVhcmVzdE5laWdoYm9yTWV0cmljIG1ldHJpYzsgLy9UaGUgbWV0cmljIHRvIHVzZS4NCisgICAgaW50ICAgICAgICAgICAgICAgICAgIGs7ICAgICAgLy9UaGUgdmFsdWUgb2YgaywgaWYgdGhlIElNQVFfS19ORUFSRVNUX05FSUdIQk9SIG1ldGhvZCBpcyB1c2VkLg0KK30gTmVhcmVzdE5laWdoYm9yT3B0aW9uczsNCisNCit0eXBlZGVmIHN0cnVjdCBQYXJ0aWNsZUNsYXNzaWZpZXJPcHRpb25zX3N0cnVjdCB7DQorICAgIGZsb2F0IHNjYWxlRGVwZW5kZW5jZTsgIC8vVGhlIHJlbGF0aXZlIGltcG9ydGFuY2Ugb2Ygc2NhbGUgd2hlbiBjbGFzc2lmeWluZyBwYXJ0aWNsZXMuDQorICAgIGZsb2F0IG1pcnJvckRlcGVuZGVuY2U7IC8vVGhlIHJlbGF0aXZlIGltcG9ydGFuY2Ugb2YgbWlycm9yIHN5bW1ldHJ5IHdoZW4gY2xhc3NpZnlpbmcgcGFydGljbGVzLg0KK30gUGFydGljbGVDbGFzc2lmaWVyT3B0aW9uczsNCisNCit0eXBlZGVmIHN0cnVjdCBSR0JVNjRWYWx1ZV9zdHJ1Y3Qgew0KKyAgICB1bnNpZ25lZCBzaG9ydCBCOyAgICAgLy9UaGUgYmx1ZSB2YWx1ZSBvZiB0aGUgY29sb3IuDQorICAgIHVuc2lnbmVkIHNob3J0IEc7ICAgICAvL1RoZSBncmVlbiB2YWx1ZSBvZiB0aGUgY29sb3IuDQorICAgIHVuc2lnbmVkIHNob3J0IFI7ICAgICAvL1RoZSByZWQgdmFsdWUgb2YgdGhlIGNvbG9yLg0KKyAgICB1bnNpZ25lZCBzaG9ydCBhbHBoYTsgLy9UaGUgYWxwaGEgdmFsdWUgb2YgdGhlIGNvbG9yLCB3aGljaCByZXByZXNlbnRzIGV4dHJhIGluZm9ybWF0aW9uIGFib3V0IGEgY29sb3IgaW1hZ2UsIHN1Y2ggYXMgZ2FtbWEgY29ycmVjdGlvbi4NCit9IFJHQlU2NFZhbHVlOw0KKw0KK3R5cGVkZWYgc3RydWN0IEdlb21ldHJpY1BhdHRlcm5NYXRjaF9zdHJ1Y3Qgew0KKyAgICBQb2ludEZsb2F0IHBvc2l0aW9uOyAgICAgICAgICAgICAgICAvL1RoZSBsb2NhdGlvbiBvZiB0aGUgb3JpZ2luIG9mIHRoZSB0ZW1wbGF0ZSBpbiB0aGUgbWF0Y2guDQorICAgIGZsb2F0ICAgICAgcm90YXRpb247ICAgICAgICAgICAgICAgIC8vVGhlIHJvdGF0aW9uIG9mIHRoZSBtYXRjaCByZWxhdGl2ZSB0byB0aGUgdGVtcGxhdGUgaW1hZ2UsIGluIGRlZ3JlZXMuDQorICAgIGZsb2F0ICAgICAgc2NhbGU7ICAgICAgICAgICAgICAgICAgIC8vVGhlIHNpemUgb2YgdGhlIG1hdGNoIHJlbGF0aXZlIHRvIHRoZSBzaXplIG9mIHRoZSB0ZW1wbGF0ZSBpbWFnZSwgZXhwcmVzc2VkIGFzIGEgcGVyY2VudGFnZS4NCisgICAgZmxvYXQgICAgICBzY29yZTsgICAgICAgICAgICAgICAgICAgLy9UaGUgYWNjdXJhY3kgb2YgdGhlIG1hdGNoLg0KKyAgICBQb2ludEZsb2F0IGNvcm5lcls0XTsgICAgICAgICAgICAgICAvL0FuIGFycmF5IG9mIGZvdXIgcG9pbnRzIGRlc2NyaWJpbmcgdGhlIHJlY3RhbmdsZSBzdXJyb3VuZGluZyB0aGUgdGVtcGxhdGUgaW1hZ2UuDQorICAgIGludCAgICAgICAgaW52ZXJzZTsgICAgICAgICAgICAgICAgIC8vVGhpcyBlbGVtZW50IGlzIFRSVUUgaWYgdGhlIG1hdGNoIGlzIGFuIGludmVyc2Ugb2YgdGhlIHRlbXBsYXRlIGltYWdlLg0KKyAgICBmbG9hdCAgICAgIG9jY2x1c2lvbjsgICAgICAgICAgICAgICAvL1RoZSBwZXJjZW50YWdlIG9mIHRoZSBtYXRjaCB0aGF0IGlzIG9jY2x1ZGVkLg0KKyAgICBmbG9hdCAgICAgIHRlbXBsYXRlTWF0Y2hDdXJ2ZVNjb3JlOyAvL1RoZSBhY2N1cmFjeSBvZiB0aGUgbWF0Y2ggb2J0YWluZWQgYnkgY29tcGFyaW5nIHRoZSB0ZW1wbGF0ZSBjdXJ2ZXMgdG8gdGhlIGN1cnZlcyBpbiB0aGUgbWF0Y2ggcmVnaW9uLg0KKyAgICBmbG9hdCAgICAgIG1hdGNoVGVtcGxhdGVDdXJ2ZVNjb3JlOyAvL1RoZSBhY2N1cmFjeSBvZiB0aGUgbWF0Y2ggb2J0YWluZWQgYnkgY29tcGFyaW5nIHRoZSBjdXJ2ZXMgaW4gdGhlIG1hdGNoIHJlZ2lvbiB0byB0aGUgdGVtcGxhdGUgY3VydmVzLg0KKyAgICBmbG9hdCAgICAgIGNvcnJlbGF0aW9uU2NvcmU7ICAgICAgICAvL1RoZSBhY2N1cmFjeSBvZiB0aGUgbWF0Y2ggb2J0YWluZWQgYnkgY29tcGFyaW5nIHRoZSB0ZW1wbGF0ZSBpbWFnZSB0byB0aGUgbWF0Y2ggcmVnaW9uIHVzaW5nIGEgY29ycmVsYXRpb24gbWV0cmljIHRoYXQgY29tcGFyZXMgdGhlIHR3byByZWdpb25zIGFzIGEgZnVuY3Rpb24gb2YgdGhlaXIgcGl4ZWwgdmFsdWVzLg0KK30gR2VvbWV0cmljUGF0dGVybk1hdGNoOw0KKw0KK3R5cGVkZWYgc3RydWN0IE1hdGNoR2VvbWV0cmljUGF0dGVybkFkdmFuY2VkT3B0aW9uc19zdHJ1Y3Qgew0KKyAgICBpbnQgICAgbWluRmVhdHVyZXNVc2VkOyAgICAgICAgICAgIC8vU3BlY2lmaWVzIHRoZSBtaW5pbXVtIG51bWJlciBvZiBmZWF0dXJlcyB0aGUgZnVuY3Rpb24gdXNlcyB3aGVuIG1hdGNoaW5nLg0KKyAgICBpbnQgICAgbWF4RmVhdHVyZXNVc2VkOyAgICAgICAgICAgIC8vU3BlY2lmaWVzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBmZWF0dXJlcyB0aGUgZnVuY3Rpb24gdXNlcyB3aGVuIG1hdGNoaW5nLg0KKyAgICBpbnQgICAgc3VicGl4ZWxJdGVyYXRpb25zOyAgICAgICAgIC8vU3BlY2lmaWVzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBpbmNyZW1lbnRhbCBpbXByb3ZlbWVudHMgdXNlZCB0byByZWZpbmUgbWF0Y2hlcyB3aXRoIHN1YnBpeGVsIGluZm9ybWF0aW9uLg0KKyAgICBkb3VibGUgc3VicGl4ZWxUb2xlcmFuY2U7ICAgICAgICAgIC8vU3BlY2lmaWVzIHRoZSBtYXhpbXVtIGFtb3VudCBvZiBjaGFuZ2UsIGluIHBpeGVscywgYmV0d2VlbiBjb25zZWN1dGl2ZSBpbmNyZW1lbnRhbCBpbXByb3ZlbWVudHMgaW4gdGhlIG1hdGNoIHBvc2l0aW9uIGJlZm9yZSB0aGUgZnVuY3Rpb24gc3RvcHMgcmVmaW5pbmcgdGhlIG1hdGNoIHBvc2l0aW9uLg0KKyAgICBpbnQgICAgaW5pdGlhbE1hdGNoTGlzdExlbmd0aDsgICAgIC8vU3BlY2lmaWVzIHRoZSBtYXhpbXVtIHNpemUgb2YgdGhlIG1hdGNoIGxpc3QuDQorICAgIGludCAgICBtYXRjaFRlbXBsYXRlQ3VydmVTY29yZTsgICAgLy9TZXQgdGhpcyBlbGVtZW50IHRvIFRSVUUgdG8gc3BlY2lmeSB0aGF0IHRoZSBmdW5jdGlvbiBzaG91bGQgY2FsY3VsYXRlIHRoZSBtYXRjaCBjdXJ2ZSB0byB0ZW1wbGF0ZSBjdXJ2ZSBzY29yZSBhbmQgcmV0dXJuIGl0IGZvciBlYWNoIG1hdGNoIHJlc3VsdC4NCisgICAgaW50ICAgIGNvcnJlbGF0aW9uU2NvcmU7ICAgICAgICAgICAvL1NldCB0aGlzIGVsZW1lbnQgdG8gVFJVRSB0byBzcGVjaWZ5IHRoYXQgdGhlIGZ1bmN0aW9uIHNob3VsZCBjYWxjdWxhdGUgdGhlIGNvcnJlbGF0aW9uIHNjb3JlIGFuZCByZXR1cm4gaXQgZm9yIGVhY2ggbWF0Y2ggcmVzdWx0Lg0KKyAgICBkb3VibGUgbWluTWF0Y2hTZXBhcmF0aW9uRGlzdGFuY2U7IC8vU3BlY2lmaWVzIHRoZSBtaW5pbXVtIHNlcGFyYXRpb24gZGlzdGFuY2UsIGluIHBpeGVscywgYmV0d2VlbiB0aGUgb3JpZ2lucyBvZiB0d28gbWF0Y2hlcyB0aGF0IGhhdmUgdW5pcXVlIHBvc2l0aW9ucy4NCisgICAgZG91YmxlIG1pbk1hdGNoU2VwYXJhdGlvbkFuZ2xlOyAgICAvL1NwZWNpZmllcyB0aGUgbWluaW11bSBhbmd1bGFyIGRpZmZlcmVuY2UsIGluIGRlZ3JlZXMsIGJldHdlZW4gdHdvIG1hdGNoZXMgdGhhdCBoYXZlIHVuaXF1ZSBhbmdsZXMuDQorICAgIGRvdWJsZSBtaW5NYXRjaFNlcGFyYXRpb25TY2FsZTsgICAgLy9TcGVjaWZpZXMgdGhlIG1pbmltdW0gZGlmZmVyZW5jZSBpbiBzY2FsZSwgZXhwcmVzc2VkIGFzIGEgcGVyY2VudGFnZSwgYmV0d2VlbiB0d28gbWF0Y2hlcyB0aGF0IGhhdmUgdW5pcXVlIHNjYWxlcy4NCisgICAgZG91YmxlIG1heE1hdGNoT3ZlcmxhcDsgICAgICAgICAgICAvL1NwZWNpZmllcyB0aGUgbWF4aW11bSBhbW91bnQgb2Ygb3ZlcmxhcCwgZXhwcmVzc2VkIGFzIGEgcGVyY2VudGFnZSwgYWxsb3dlZCBiZXR3ZWVuIHRoZSBib3VuZGluZyByZWN0YW5nbGVzIG9mIHR3byB1bmlxdWUgbWF0Y2hlcy4NCisgICAgaW50ICAgIGNvYXJzZVJlc3VsdDsgICAgICAgICAgICAgICAvL1NwZWNpZmllcyB3aGV0aGVyIHlvdSB3YW50IHRoZSBmdW5jdGlvbiB0byBzcGVuZCBsZXNzIHRpbWUgYWNjdXJhdGVseSBlc3RpbWF0aW5nIHRoZSBsb2NhdGlvbiBvZiBhIG1hdGNoLg0KK30gTWF0Y2hHZW9tZXRyaWNQYXR0ZXJuQWR2YW5jZWRPcHRpb25zOw0KKw0KK3R5cGVkZWYgc3RydWN0IE1hdGNoR2VvbWV0cmljUGF0dGVybk9wdGlvbnNfc3RydWN0IHsNCisgICAgdW5zaWduZWQgaW50IG1vZGU7ICAgICAgICAgICAgICAgIC8vU3BlY2lmaWVzIHRoZSBtZXRob2QgaW1hcU1hdGNoR2VvbWV0cmljUGF0dGVybigpIHVzZXMgd2hlbiBsb29raW5nIGZvciB0aGUgcGF0dGVybiBpbiB0aGUgaW1hZ2UuDQorICAgIGludCAgICAgICAgICBzdWJwaXhlbEFjY3VyYWN5OyAgICAvL1NldCB0aGlzIGVsZW1lbnQgdG8gVFJVRSB0byBzcGVjaWZ5IHRoYXQgdGhlIGZ1bmN0aW9uIHNob3VsZCBjYWxjdWxhdGUgbWF0Y2ggbG9jYXRpb25zIHdpdGggc3VicGl4ZWwgYWNjdXJhY3kuDQorICAgIFJhbmdlRmxvYXQqICBhbmdsZVJhbmdlczsgICAgICAgICAvL0FuIGFycmF5IG9mIGFuZ2xlIHJhbmdlcywgaW4gZGVncmVlcywgd2hlcmUgZWFjaCByYW5nZSBzcGVjaWZpZXMgaG93IG11Y2ggeW91IGV4cGVjdCB0aGUgdGVtcGxhdGUgdG8gYmUgcm90YXRlZCBpbiB0aGUgaW1hZ2UuDQorICAgIGludCAgICAgICAgICBudW1BbmdsZVJhbmdlczsgICAgICAvL051bWJlciBvZiBhbmdsZSByYW5nZXMgaW4gdGhlIGFuZ2xlUmFuZ2VzIGFycmF5Lg0KKyAgICBSYW5nZUZsb2F0ICAgc2NhbGVSYW5nZTsgICAgICAgICAgLy9BIHJhbmdlIHRoYXQgc3BlY2lmaWVzIHRoZSBzaXplcyBvZiB0aGUgcGF0dGVybiB5b3UgZXhwZWN0IHRvIGJlIGluIHRoZSBpbWFnZSwgZXhwcmVzc2VkIGFzIGEgcmF0aW8gcGVyY2VudGFnZSByZXByZXNlbnRpbmcgdGhlIHNpemUgb2YgdGhlIHBhdHRlcm4gaW4gdGhlIGltYWdlIGRpdmlkZWQgYnkgc2l6ZSBvZiB0aGUgb3JpZ2luYWwgcGF0dGVybiBtdWx0aXBsaWVkIGJ5IDEwMC4NCisgICAgUmFuZ2VGbG9hdCAgIG9jY2x1c2lvblJhbmdlOyAgICAgIC8vQSByYW5nZSB0aGF0IHNwZWNpZmllcyB0aGUgcGVyY2VudGFnZSBvZiB0aGUgcGF0dGVybiB5b3UgZXhwZWN0IHRvIGJlIG9jY2x1ZGVkIGluIHRoZSBpbWFnZS4NCisgICAgaW50ICAgICAgICAgIG51bU1hdGNoZXNSZXF1ZXN0ZWQ7IC8vTnVtYmVyIG9mIHZhbGlkIG1hdGNoZXMgZXhwZWN0ZWQuDQorICAgIGZsb2F0ICAgICAgICBtaW5NYXRjaFNjb3JlOyAgICAgICAvL1RoZSBtaW5pbXVtIHNjb3JlIGEgbWF0Y2ggY2FuIGhhdmUgZm9yIHRoZSBmdW5jdGlvbiB0byBjb25zaWRlciB0aGUgbWF0Y2ggdmFsaWQuDQorfSBNYXRjaEdlb21ldHJpY1BhdHRlcm5PcHRpb25zOw0KKw0KK3R5cGVkZWYgc3RydWN0IExlYXJuR2VvbWV0cmljUGF0dGVybkFkdmFuY2VkT3B0aW9uc19zdHJ1Y3Qgew0KKyAgICBpbnQgICAgbWluUmVjdExlbmd0aDsgICAgICAgICAgICAvL1NwZWNpZmllcyB0aGUgbWluaW11bSBsZW5ndGggZm9yIGVhY2ggc2lkZSBvZiBhIHJlY3Rhbmd1bGFyIGZlYXR1cmUuDQorICAgIGRvdWJsZSBtaW5SZWN0QXNwZWN0UmF0aW87ICAgICAgIC8vU3BlY2lmaWVzIHRoZSBtaW5pbXVtIGFzcGVjdCByYXRpbyBvZiBhIHJlY3Rhbmd1bGFyIGZlYXR1cmUuDQorICAgIGludCAgICBtaW5SYWRpdXM7ICAgICAgICAgICAgICAgIC8vU3BlY2lmaWVzIHRoZSBtaW5pbXVtIHJhZGl1cyBmb3IgYSBjaXJjdWxhciBmZWF0dXJlLg0KKyAgICBpbnQgICAgbWluTGluZUxlbmd0aDsgICAgICAgICAgICAvL1NwZWNpZmllcyB0aGUgbWluaW11bSBsZW5ndGggZm9yIGEgbGluZWFyIGZlYXR1cmUuDQorICAgIGRvdWJsZSBtaW5GZWF0dXJlU3RyZW5ndGg7ICAgICAgIC8vU3BlY2lmaWVzIHRoZSBtaW5pbXVtIHN0cmVuZ3RoIGZvciBhIGZlYXR1cmUuDQorICAgIGludCAgICBtYXhGZWF0dXJlc1VzZWQ7ICAgICAgICAgIC8vU3BlY2lmaWVzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBmZWF0dXJlcyB0aGUgZnVuY3Rpb24gdXNlcyB3aGVuIGxlYXJuaW5nLg0KKyAgICBpbnQgICAgbWF4UGl4ZWxEaXN0YW5jZUZyb21MaW5lOyAvL1NwZWNpZmllcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgcGl4ZWxzIGJldHdlZW4gYW4gZWRnZSBwaXhlbCBhbmQgYSBsaW5lYXIgZmVhdHVyZSBmb3IgdGhlIGZ1bmN0aW9uIHRvIGNvbnNpZGVyIHRoYXQgZWRnZSBwaXhlbCBhcyBwYXJ0IG9mIHRoZSBsaW5lYXIgZmVhdHVyZS4NCit9IExlYXJuR2VvbWV0cmljUGF0dGVybkFkdmFuY2VkT3B0aW9uczsNCisNCit0eXBlZGVmIHN0cnVjdCBGaXRFbGxpcHNlT3B0aW9uc19zdHJ1Y3Qgew0KKyAgICBpbnQgICAgcmVqZWN0T3V0bGllcnM7IC8vV2hldGhlciB0byB1c2UgZXZlcnkgZ2l2ZW4gcG9pbnQgb3Igb25seSBhIHN1YnNldCBvZiB0aGUgcG9pbnRzIHRvIGZpdCB0aGUgZWxsaXBzZS4NCisgICAgZG91YmxlIG1pblNjb3JlOyAgICAgICAvL1NwZWNpZmllcyB0aGUgcmVxdWlyZWQgcXVhbGl0eSBvZiB0aGUgZml0dGVkIGVsbGlwc2UuDQorICAgIGRvdWJsZSBwaXhlbFJhZGl1czsgICAgLy9UaGUgYWNjZXB0YWJsZSBkaXN0YW5jZSwgaW4gcGl4ZWxzLCB0aGF0IGEgcG9pbnQgZGV0ZXJtaW5lZCB0byBiZWxvbmcgdG8gdGhlIGVsbGlwc2UgY2FuIGJlIGZyb20gdGhlIGNpcmN1bWZlcmVuY2Ugb2YgdGhlIGVsbGlwc2UuDQorICAgIGludCAgICBtYXhJdGVyYXRpb25zOyAgLy9TcGVjaWZpZXMgdGhlIG51bWJlciBvZiByZWZpbmVtZW50IGl0ZXJhdGlvbnMgeW91IGFsbG93IHRoZSBmdW5jdGlvbiB0byBwZXJmb3JtIG9uIHRoZSBpbml0aWFsIHN1YnNldCBvZiBwb2ludHMuDQorfSBGaXRFbGxpcHNlT3B0aW9uczsNCisNCit0eXBlZGVmIHN0cnVjdCBGaXRDaXJjbGVPcHRpb25zX3N0cnVjdCB7DQorICAgIGludCAgICByZWplY3RPdXRsaWVyczsgLy9XaGV0aGVyIHRvIHVzZSBldmVyeSBnaXZlbiBwb2ludCBvciBvbmx5IGEgc3Vic2V0IG9mIHRoZSBwb2ludHMgdG8gZml0IHRoZSBjaXJjbGUuDQorICAgIGRvdWJsZSBtaW5TY29yZTsgICAgICAgLy9TcGVjaWZpZXMgdGhlIHJlcXVpcmVkIHF1YWxpdHkgb2YgdGhlIGZpdHRlZCBjaXJjbGUuDQorICAgIGRvdWJsZSBwaXhlbFJhZGl1czsgICAgLy9UaGUgYWNjZXB0YWJsZSBkaXN0YW5jZSwgaW4gcGl4ZWxzLCB0aGF0IGEgcG9pbnQgZGV0ZXJtaW5lZCB0byBiZWxvbmcgdG8gdGhlIGNpcmNsZSBjYW4gYmUgZnJvbSB0aGUgY2lyY3VtZmVyZW5jZSBvZiB0aGUgY2lyY2xlLg0KKyAgICBpbnQgICAgbWF4SXRlcmF0aW9uczsgIC8vU3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgcmVmaW5lbWVudCBpdGVyYXRpb25zIHlvdSBhbGxvdyB0aGUgZnVuY3Rpb24gdG8gcGVyZm9ybSBvbiB0aGUgaW5pdGlhbCBzdWJzZXQgb2YgcG9pbnRzLg0KK30gRml0Q2lyY2xlT3B0aW9uczsNCisNCit0eXBlZGVmIHN0cnVjdCBDb25zdHJ1Y3RST0lPcHRpb25zMl9zdHJ1Y3Qgew0KKyAgICBpbnQgICAgICAgICAgd2luZG93TnVtYmVyOyAvL1RoZSB3aW5kb3cgbnVtYmVyIG9mIHRoZSBpbWFnZSB3aW5kb3cuDQorICAgIGNvbnN0IGNoYXIqICB3aW5kb3dUaXRsZTsgIC8vU3BlY2lmaWVzIHRoZSBtZXNzYWdlIHN0cmluZyB0aGF0IHRoZSBmdW5jdGlvbiBkaXNwbGF5cyBpbiB0aGUgdGl0bGUgYmFyIG9mIHRoZSB3aW5kb3cuDQorICAgIFBhbGV0dGVUeXBlICB0eXBlOyAgICAgICAgIC8vVGhlIHBhbGV0dGUgdHlwZSB0byB1c2UuDQorICAgIFJHQlZhbHVlKiAgICBwYWxldHRlOyAgICAgIC8vSWYgdHlwZSBpcyBJTUFRX1BBTEVUVEVfVVNFUiwgdGhpcyBhcnJheSBpcyB0aGUgcGFsZXR0ZSBvZiBjb2xvcnMgdG8gdXNlIHdpdGggdGhlIHdpbmRvdy4NCisgICAgaW50ICAgICAgICAgIG51bUNvbG9yczsgICAgLy9JZiB0eXBlIGlzIElNQVFfUEFMRVRURV9VU0VSLCB0aGlzIGVsZW1lbnQgaXMgdGhlIG51bWJlciBvZiBjb2xvcnMgaW4gdGhlIHBhbGV0dGUgYXJyYXkuDQorICAgIHVuc2lnbmVkIGludCBtYXhDb250b3VyczsgIC8vVGhlIG1heGltdW0gbnVtYmVyIG9mIGNvbnRvdXJzIHRoZSB1c2VyIHdpbGwgYmUgYWJsZSB0byBzZWxlY3QuDQorfSBDb25zdHJ1Y3RST0lPcHRpb25zMjsNCisNCit0eXBlZGVmIHN0cnVjdCBIU0xWYWx1ZV9zdHJ1Y3Qgew0KKyAgICB1bnNpZ25lZCBjaGFyIEw7ICAgICAvL1RoZSBjb2xvciBsdW1pbmFuY2UuDQorICAgIHVuc2lnbmVkIGNoYXIgUzsgICAgIC8vVGhlIGNvbG9yIHNhdHVyYXRpb24uDQorICAgIHVuc2lnbmVkIGNoYXIgSDsgICAgIC8vVGhlIGNvbG9yIGh1ZS4NCisgICAgdW5zaWduZWQgY2hhciBhbHBoYTsgLy9UaGUgYWxwaGEgdmFsdWUgb2YgdGhlIGNvbG9yLCB3aGljaCByZXByZXNlbnRzIGV4dHJhIGluZm9ybWF0aW9uIGFib3V0IGEgY29sb3IgaW1hZ2UsIHN1Y2ggYXMgZ2FtbWEgY29ycmVjdGlvbi4NCit9IEhTTFZhbHVlOw0KKw0KK3R5cGVkZWYgc3RydWN0IEhTVlZhbHVlX3N0cnVjdCB7DQorICAgIHVuc2lnbmVkIGNoYXIgVjsgICAgIC8vVGhlIGNvbG9yIHZhbHVlLg0KKyAgICB1bnNpZ25lZCBjaGFyIFM7ICAgICAvL1RoZSBjb2xvciBzYXR1cmF0aW9uLg0KKyAgICB1bnNpZ25lZCBjaGFyIEg7ICAgICAvL1RoZSBjb2xvciBodWUuDQorICAgIHVuc2lnbmVkIGNoYXIgYWxwaGE7IC8vVGhlIGFscGhhIHZhbHVlIG9mIHRoZSBjb2xvciwgd2hpY2ggcmVwcmVzZW50cyBleHRyYSBpbmZvcm1hdGlvbiBhYm91dCBhIGNvbG9yIGltYWdlLCBzdWNoIGFzIGdhbW1hIGNvcnJlY3Rpb24uDQorfSBIU1ZWYWx1ZTsNCisNCit0eXBlZGVmIHN0cnVjdCBIU0lWYWx1ZV9zdHJ1Y3Qgew0KKyAgICB1bnNpZ25lZCBjaGFyIEk7ICAgICAvL1RoZSBjb2xvciBpbnRlbnNpdHkuDQorICAgIHVuc2lnbmVkIGNoYXIgUzsgICAgIC8vVGhlIGNvbG9yIHNhdHVyYXRpb24uDQorICAgIHVuc2lnbmVkIGNoYXIgSDsgICAgIC8vVGhlIGNvbG9yIGh1ZS4NCisgICAgdW5zaWduZWQgY2hhciBhbHBoYTsgLy9UaGUgYWxwaGEgdmFsdWUgb2YgdGhlIGNvbG9yLCB3aGljaCByZXByZXNlbnRzIGV4dHJhIGluZm9ybWF0aW9uIGFib3V0IGEgY29sb3IgaW1hZ2UsIHN1Y2ggYXMgZ2FtbWEgY29ycmVjdGlvbi4NCit9IEhTSVZhbHVlOw0KKw0KK3R5cGVkZWYgc3RydWN0IENJRUxhYlZhbHVlX3N0cnVjdCB7DQorICAgIGRvdWJsZSAgICAgICAgYjsgICAgIC8vVGhlIHllbGxvdy9ibHVlIGluZm9ybWF0aW9uIG9mIHRoZSBjb2xvci4NCisgICAgZG91YmxlICAgICAgICBhOyAgICAgLy9UaGUgcmVkL2dyZWVuIGluZm9ybWF0aW9uIG9mIHRoZSBjb2xvci4NCisgICAgZG91YmxlICAgICAgICBMOyAgICAgLy9UaGUgY29sb3IgbGlnaHRuZXNzLg0KKyAgICB1bnNpZ25lZCBjaGFyIGFscGhhOyAvL1RoZSBhbHBoYSB2YWx1ZSBvZiB0aGUgY29sb3IsIHdoaWNoIHJlcHJlc2VudHMgZXh0cmEgaW5mb3JtYXRpb24gYWJvdXQgYSBjb2xvciBpbWFnZSwgc3VjaCBhcyBnYW1tYSBjb3JyZWN0aW9uLg0KK30gQ0lFTGFiVmFsdWU7DQorDQordHlwZWRlZiBzdHJ1Y3QgQ0lFWFlaVmFsdWVfc3RydWN0IHsNCisgICAgZG91YmxlICAgICAgICBaOyAgICAgLy9UaGUgWiBjb2xvciBpbmZvcm1hdGlvbi4NCisgICAgZG91YmxlICAgICAgICBZOyAgICAgLy9UaGUgY29sb3IgbHVtaW5hbmNlLg0KKyAgICBkb3VibGUgICAgICAgIFg7ICAgICAvL1RoZSBYIGNvbG9yIGluZm9ybWF0aW9uLg0KKyAgICB1bnNpZ25lZCBjaGFyIGFscGhhOyAvL1RoZSBhbHBoYSB2YWx1ZSBvZiB0aGUgY29sb3IsIHdoaWNoIHJlcHJlc2VudHMgZXh0cmEgaW5mb3JtYXRpb24gYWJvdXQgYSBjb2xvciBpbWFnZSwgc3VjaCBhcyBnYW1tYSBjb3JyZWN0aW9uLg0KK30gQ0lFWFlaVmFsdWU7DQorDQordHlwZWRlZiB1bmlvbiBDb2xvcjJfdW5pb24gew0KKyAgICBSR0JWYWx1ZSAgICByZ2I7ICAgICAgLy9UaGUgaW5mb3JtYXRpb24gbmVlZGVkIHRvIGRlc2NyaWJlIGEgY29sb3IgaW4gdGhlIFJHQiAoUmVkLCBHcmVlbiwgYW5kIEJsdWUpIGNvbG9yIHNwYWNlLg0KKyAgICBIU0xWYWx1ZSAgICBoc2w7ICAgICAgLy9UaGUgaW5mb3JtYXRpb24gbmVlZGVkIHRvIGRlc2NyaWJlIGEgY29sb3IgaW4gdGhlIEhTTCAoSHVlLCBTYXR1cmF0aW9uLCBhbmQgTHVtaW5hbmNlKSBjb2xvciBzcGFjZS4NCisgICAgSFNWVmFsdWUgICAgaHN2OyAgICAgIC8vVGhlIGluZm9ybWF0aW9uIG5lZWRlZCB0byBkZXNjcmliZSBhIGNvbG9yIGluIHRoZSBIU0kgKEh1ZSwgU2F0dXJhdGlvbiwgYW5kIFZhbHVlKSBjb2xvciBzcGFjZS4NCisgICAgSFNJVmFsdWUgICAgaHNpOyAgICAgIC8vVGhlIGluZm9ybWF0aW9uIG5lZWRlZCB0byBkZXNjcmliZSBhIGNvbG9yIGluIHRoZSBIU0kgKEh1ZSwgU2F0dXJhdGlvbiwgYW5kIEludGVuc2l0eSkgY29sb3Igc3BhY2UuDQorICAgIENJRUxhYlZhbHVlIGNpZUxhYjsgICAvL1RoZSBpbmZvcm1hdGlvbiBuZWVkZWQgdG8gZGVzY3JpYmUgYSBjb2xvciBpbiB0aGUgQ0lFIEwqYSpiKiAoTCwgYSwgYikgY29sb3Igc3BhY2UuDQorICAgIENJRVhZWlZhbHVlIGNpZVhZWjsgICAvL1RoZSBpbmZvcm1hdGlvbiBuZWVkZWQgdG8gZGVzY3JpYmUgYSBjb2xvciBpbiB0aGUgQ0lFIFhZWiAoWCwgWSwgWikgY29sb3Igc3BhY2UuDQorICAgIGludCAgICAgICAgIHJhd1ZhbHVlOyAvL1RoZSBpbnRlZ2VyIHZhbHVlIGZvciB0aGUgZGF0YSBpbiB0aGUgY29sb3IgdW5pb24uDQorfSBDb2xvcjI7DQorDQordHlwZWRlZiBzdHJ1Y3QgQmVzdEVsbGlwc2UyX3N0cnVjdCB7DQorICAgIFBvaW50RmxvYXQgY2VudGVyOyAgICAgICAgIC8vVGhlIGNvb3JkaW5hdGUgbG9jYXRpb24gb2YgdGhlIGNlbnRlciBvZiB0aGUgZWxsaXBzZS4NCisgICAgUG9pbnRGbG9hdCBtYWpvckF4aXNTdGFydDsgLy9UaGUgY29vcmRpbmF0ZSBsb2NhdGlvbiBvZiB0aGUgc3RhcnQgb2YgdGhlIG1ham9yIGF4aXMgb2YgdGhlIGVsbGlwc2UuDQorICAgIFBvaW50RmxvYXQgbWFqb3JBeGlzRW5kOyAgIC8vVGhlIGNvb3JkaW5hdGUgbG9jYXRpb24gb2YgdGhlIGVuZCBvZiB0aGUgbWFqb3IgYXhpcyBvZiB0aGUgZWxsaXBzZS4NCisgICAgUG9pbnRGbG9hdCBtaW5vckF4aXNTdGFydDsgLy9UaGUgY29vcmRpbmF0ZSBsb2NhdGlvbiBvZiB0aGUgc3RhcnQgb2YgdGhlIG1pbm9yIGF4aXMgb2YgdGhlIGVsbGlwc2UuDQorICAgIFBvaW50RmxvYXQgbWlub3JBeGlzRW5kOyAgIC8vVGhlIGNvb3JkaW5hdGUgbG9jYXRpb24gb2YgdGhlIGVuZCBvZiB0aGUgbWlub3IgYXhpcyBvZiB0aGUgZWxsaXBzZS4NCisgICAgZG91YmxlICAgICBhcmVhOyAgICAgICAgICAgLy9UaGUgYXJlYSBvZiB0aGUgZWxsaXBzZS4NCisgICAgZG91YmxlICAgICBwZXJpbWV0ZXI7ICAgICAgLy9UaGUgbGVuZ3RoIG9mIHRoZSBwZXJpbWV0ZXIgb2YgdGhlIGVsbGlwc2UuDQorICAgIGRvdWJsZSAgICAgZXJyb3I7ICAgICAgICAgIC8vUmVwcmVzZW50cyB0aGUgbGVhc3Qgc3F1YXJlIGVycm9yIG9mIHRoZSBmaXR0ZWQgZWxsaXBzZSB0byB0aGUgZW50aXJlIHNldCBvZiBwb2ludHMuDQorICAgIGludCAgICAgICAgdmFsaWQ7ICAgICAgICAgIC8vVGhpcyBlbGVtZW50IGlzIFRSVUUgaWYgdGhlIGZ1bmN0aW9uIGFjaGlldmVkIHRoZSBtaW5pbXVtIHNjb3JlIHdpdGhpbiB0aGUgbnVtYmVyIG9mIGFsbG93ZWQgcmVmaW5lbWVudCBpdGVyYXRpb25zIGFuZCBGQUxTRSBpZiB0aGUgZnVuY3Rpb24gZGlkIG5vdCBhY2hpZXZlIHRoZSBtaW5pbXVtIHNjb3JlLg0KKyAgICBpbnQqICAgICAgIHBvaW50c1VzZWQ7ICAgICAvL0FuIGFycmF5IG9mIHRoZSBpbmRleGVzIGZvciB0aGUgcG9pbnRzIGFycmF5IGluZGljYXRpbmcgd2hpY2ggcG9pbnRzIHRoZSBmdW5jdGlvbiB1c2VkIHRvIGZpdCB0aGUgZWxsaXBzZS4NCisgICAgaW50ICAgICAgICBudW1Qb2ludHNVc2VkOyAgLy9UaGUgbnVtYmVyIG9mIHBvaW50cyB0aGUgZnVuY3Rpb24gdXNlZCB0byBmaXQgdGhlIGVsbGlwc2UuDQorfSBCZXN0RWxsaXBzZTI7DQorDQordHlwZWRlZiBzdHJ1Y3QgTGVhcm5QYXR0ZXJuQWR2YW5jZWRPcHRpb25zX3N0cnVjdCB7DQorICAgIExlYXJuUGF0dGVybkFkdmFuY2VkU2hpZnRPcHRpb25zKiAgICBzaGlmdE9wdGlvbnM7ICAgIC8vVXNlIHRoaXMgZWxlbWVudCB0byBjb250cm9sIHRoZSBiZWhhdmlvciBvZiBpbWFxTGVhcm5QYXR0ZXJuMigpIGR1cmluZyB0aGUgc2hpZnQtaW52YXJpYW50IGxlYXJuaW5nIHBoYXNlLg0KKyAgICBMZWFyblBhdHRlcm5BZHZhbmNlZFJvdGF0aW9uT3B0aW9ucyogcm90YXRpb25PcHRpb25zOyAvL1VzZSB0aGlzIGVsZW1lbnQgdG8gY29udHJvbCB0aGUgYmVoYXZpb3Igb2YgaW1hcUxlYXJuUGF0dGVybjIoKWR1cmluZyB0aGUgcm90YXRpb24taW52YXJpYW50IGxlYXJuaW5nIHBoYXNlLg0KK30gTGVhcm5QYXR0ZXJuQWR2YW5jZWRPcHRpb25zOw0KKw0KK3R5cGVkZWYgc3RydWN0IEFWSUluZm9fc3RydWN0IHsNCisgICAgdW5zaWduZWQgaW50IHdpZHRoOyAgICAgICAgICAgLy9UaGUgd2lkdGggb2YgZWFjaCBmcmFtZS4NCisgICAgdW5zaWduZWQgaW50IGhlaWdodDsgICAgICAgICAgLy9UaGUgaGVpZ2h0IG9mIGVhY2ggZnJhbWUuDQorICAgIEltYWdlVHlwZSAgICBpbWFnZVR5cGU7ICAgICAgIC8vVGhlIHR5cGUgb2YgaW1hZ2VzIHRoaXMgQVZJIGNvbnRhaW5zLg0KKyAgICB1bnNpZ25lZCBpbnQgbnVtRnJhbWVzOyAgICAgICAvL1RoZSBudW1iZXIgb2YgZnJhbWVzIGluIHRoZSBBVkkuDQorICAgIHVuc2lnbmVkIGludCBmcmFtZXNQZXJTZWNvbmQ7IC8vVGhlIG51bWJlciBvZiBmcmFtZXMgcGVyIHNlY29uZCB0aGlzIEFWSSBzaG91bGQgYmUgc2hvd24gYXQuDQorICAgIGNoYXIqICAgICAgICBmaWx0ZXJOYW1lOyAgICAgIC8vVGhlIG5hbWUgb2YgdGhlIGNvbXByZXNzaW9uIGZpbHRlciB1c2VkIHRvIGNyZWF0ZSB0aGlzIEFWSS4NCisgICAgaW50ICAgICAgICAgIGhhc0RhdGE7ICAgICAgICAgLy9TcGVjaWZpZXMgd2hldGhlciB0aGlzIEFWSSBoYXMgZGF0YSBhdHRhY2hlZCB0byBlYWNoIGZyYW1lIG9yIG5vdC4NCisgICAgdW5zaWduZWQgaW50IG1heERhdGFTaXplOyAgICAgLy9JZiB0aGlzIEFWSSBoYXMgZGF0YSwgdGhlIG1heGltdW0gc2l6ZSBvZiB0aGUgZGF0YSBpbiBlYWNoIGZyYW1lLg0KK30gQVZJSW5mbzsNCisNCit0eXBlZGVmIHN0cnVjdCBMZWFyblBhdHRlcm5BZHZhbmNlZFNoaWZ0T3B0aW9uc19zdHJ1Y3Qgew0KKyAgICBpbnQgICAgaW5pdGlhbFN0ZXBTaXplOyAgICAgICAgICAvL1RoZSBsYXJnZXN0IG51bWJlciBvZiBpbWFnZSBwaXhlbHMgdG8gc2hpZnQgdGhlIHNhbXBsZSBhY3Jvc3MgdGhlIGluc3BlY3Rpb24gaW1hZ2UgZHVyaW5nIHRoZSBpbml0aWFsIHBoYXNlIG9mIHNoaWZ0LWludmFyaWFudCBtYXRjaGluZy4NCisgICAgaW50ICAgIGluaXRpYWxTYW1wbGVTaXplOyAgICAgICAgLy9TcGVjaWZpZXMgdGhlIG51bWJlciBvZiB0ZW1wbGF0ZSBwaXhlbHMgdGhhdCB5b3Ugd2FudCB0byBpbmNsdWRlIGluIGEgc2FtcGxlIGZvciB0aGUgaW5pdGlhbCBwaGFzZSBvZiBzaGlmdC1pbnZhcmlhbnQgbWF0Y2hpbmcuDQorICAgIGRvdWJsZSBpbml0aWFsU2FtcGxlU2l6ZUZhY3RvcjsgIC8vU3BlY2lmaWVzIHRoZSBzaXplIG9mIHRoZSBzYW1wbGUgZm9yIHRoZSBpbml0aWFsIHBoYXNlIG9mIHNoaWZ0LWludmFyaWFudCBtYXRjaGluZyBhcyBhIHBlcmNlbnQgb2YgdGhlIHRlbXBsYXRlIHNpemUsIGluIHBpeGVscy4NCisgICAgaW50ICAgIGZpbmFsU2FtcGxlU2l6ZTsgICAgICAgICAgLy9TcGVjaWZpZXMgdGhlIG51bWJlciBvZiB0ZW1wbGF0ZSBwaXhlbHMgeW91IHdhbnQgdG8gYWRkIHRvIGluaXRpYWxTYW1wbGVTaXplIGZvciB0aGUgZmluYWwgcGhhc2Ugb2Ygc2hpZnQtaW52YXJpYW50IG1hdGNoaW5nLg0KKyAgICBkb3VibGUgZmluYWxTYW1wbGVTaXplRmFjdG9yOyAgICAvL1NwZWNpZmllcyB0aGUgc2l6ZSBvZiB0aGUgc2FtcGxlIGZvciB0aGUgZmluYWwgcGhhc2Ugb2Ygc2hpZnQtaW52YXJpYW50IG1hdGNoaW5nIGFzIGEgcGVyY2VudCBvZiB0aGUgZWRnZSBwb2ludHMgaW4gdGhlIHRlbXBsYXRlLCBpbiBwaXhlbHMuDQorICAgIGludCAgICBzdWJwaXhlbFNhbXBsZVNpemU7ICAgICAgIC8vU3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgdGVtcGxhdGUgcGl4ZWxzIHRoYXQgeW91IHdhbnQgdG8gaW5jbHVkZSBpbiBhIHNhbXBsZSBmb3IgdGhlIHN1YnBpeGVsIHBoYXNlIG9mIHNoaWZ0LWludmFyaWFudCBtYXRjaGluZy4NCisgICAgZG91YmxlIHN1YnBpeGVsU2FtcGxlU2l6ZUZhY3RvcjsgLy9TcGVjaWZpZXMgdGhlIHNpemUgb2YgdGhlIHNhbXBsZSBmb3IgdGhlIHN1YnBpeGVsIHBoYXNlIG9mIHNoaWZ0LWludmFyaWFudCBtYXRjaGluZyBhcyBhIHBlcmNlbnQgb2YgdGhlIHRlbXBsYXRlIHNpemUsIGluIHBpeGVscy4NCit9IExlYXJuUGF0dGVybkFkdmFuY2VkU2hpZnRPcHRpb25zOw0KKw0KK3R5cGVkZWYgc3RydWN0IExlYXJuUGF0dGVybkFkdmFuY2VkUm90YXRpb25PcHRpb25zX3N0cnVjdCB7DQorICAgIFNlYXJjaFN0cmF0ZWd5IHNlYXJjaFN0cmF0ZWd5U3VwcG9ydDsgICAgLy9TcGVjaWZpZXMgdGhlIGFnZ3Jlc3NpdmVuZXNzIG9mIHRoZSByb3RhdGlvbiBzZWFyY2ggc3RyYXRlZ3kgYXZhaWxhYmxlIGR1cmluZyB0aGUgbWF0Y2hpbmcgcGhhc2UuDQorICAgIGludCAgICAgICAgICAgIGluaXRpYWxTdGVwU2l6ZTsgICAgICAgICAgLy9UaGUgbGFyZ2VzdCBudW1iZXIgb2YgaW1hZ2UgcGl4ZWxzIHRvIHNoaWZ0IHRoZSBzYW1wbGUgYWNyb3NzIHRoZSBpbnNwZWN0aW9uIGltYWdlIGR1cmluZyB0aGUgaW5pdGlhbCBwaGFzZSBvZiBtYXRjaGluZy4NCisgICAgaW50ICAgICAgICAgICAgaW5pdGlhbFNhbXBsZVNpemU7ICAgICAgICAvL1NwZWNpZmllcyB0aGUgbnVtYmVyIG9mIHRlbXBsYXRlIHBpeGVscyB0aGF0IHlvdSB3YW50IHRvIGluY2x1ZGUgaW4gYSBzYW1wbGUgZm9yIHRoZSBpbml0aWFsIHBoYXNlIG9mIHJvdGF0aW9uLWludmFyaWFudCBtYXRjaGluZy4NCisgICAgZG91YmxlICAgICAgICAgaW5pdGlhbFNhbXBsZVNpemVGYWN0b3I7ICAvL1NwZWNpZmllcyB0aGUgc2l6ZSBvZiB0aGUgc2FtcGxlIGZvciB0aGUgaW5pdGlhbCBwaGFzZSBvZiByb3RhdGlvbi1pbnZhcmlhbnQgbWF0Y2hpbmcgYXMgYSBwZXJjZW50IG9mIHRoZSB0ZW1wbGF0ZSBzaXplLCBpbiBwaXhlbHMuDQorICAgIGludCAgICAgICAgICAgIGluaXRpYWxBbmd1bGFyQWNjdXJhY3k7ICAgLy9TZXRzIHRoZSBhbmdsZSBhY2N1cmFjeSwgaW4gZGVncmVlcywgdG8gdXNlIGR1cmluZyB0aGUgaW5pdGlhbCBwaGFzZSBvZiByb3RhdGlvbi1pbnZhcmlhbnQgbWF0Y2hpbmcuDQorICAgIGludCAgICAgICAgICAgIGZpbmFsU2FtcGxlU2l6ZTsgICAgICAgICAgLy9TcGVjaWZpZXMgdGhlIG51bWJlciBvZiB0ZW1wbGF0ZSBwaXhlbHMgeW91IHdhbnQgdG8gYWRkIHRvIGluaXRpYWxTYW1wbGVTaXplIGZvciB0aGUgZmluYWwgcGhhc2Ugb2Ygcm90YXRpb24taW52YXJpYW50IG1hdGNoaW5nLg0KKyAgICBkb3VibGUgICAgICAgICBmaW5hbFNhbXBsZVNpemVGYWN0b3I7ICAgIC8vU3BlY2lmaWVzIHRoZSBzaXplIG9mIHRoZSBzYW1wbGUgZm9yIHRoZSBmaW5hbCBwaGFzZSBvZiByb3RhdGlvbi1pbnZhcmlhbnQgbWF0Y2hpbmcgYXMgYSBwZXJjZW50IG9mIHRoZSBlZGdlIHBvaW50cyBpbiB0aGUgdGVtcGxhdGUsIGluIHBpeGVscy4NCisgICAgaW50ICAgICAgICAgICAgZmluYWxBbmd1bGFyQWNjdXJhY3k7ICAgICAvL1NldHMgdGhlIGFuZ2xlIGFjY3VyYWN5LCBpbiBkZWdyZWVzLCB0byB1c2UgZHVyaW5nIHRoZSBmaW5hbCBwaGFzZSBvZiB0aGUgcm90YXRpb24taW52YXJpYW50IG1hdGNoaW5nLg0KKyAgICBpbnQgICAgICAgICAgICBzdWJwaXhlbFNhbXBsZVNpemU7ICAgICAgIC8vU3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgdGVtcGxhdGUgcGl4ZWxzIHRoYXQgeW91IHdhbnQgdG8gaW5jbHVkZSBpbiBhIHNhbXBsZSBmb3IgdGhlIHN1YnBpeGVsIHBoYXNlIG9mIHJvdGF0aW9uLWludmFyaWFudCBtYXRjaGluZy4NCisgICAgZG91YmxlICAgICAgICAgc3VicGl4ZWxTYW1wbGVTaXplRmFjdG9yOyAvL1NwZWNpZmllcyB0aGUgc2l6ZSBvZiB0aGUgc2FtcGxlIGZvciB0aGUgc3VicGl4ZWwgcGhhc2Ugb2Ygcm90YXRpb24taW52YXJpYW50IG1hdGNoaW5nIGFzIGEgcGVyY2VudCBvZiB0aGUgdGVtcGxhdGUgc2l6ZSwgaW4gcGl4ZWxzLg0KK30gTGVhcm5QYXR0ZXJuQWR2YW5jZWRSb3RhdGlvbk9wdGlvbnM7DQorDQordHlwZWRlZiBzdHJ1Y3QgTWF0Y2hQYXR0ZXJuQWR2YW5jZWRPcHRpb25zX3N0cnVjdCB7DQorICAgIGludCAgICAgICAgICAgIHN1YnBpeGVsSXRlcmF0aW9uczsgICAgICAgICAgLy9EZWZpbmVzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBpbmNyZW1lbnRhbCBpbXByb3ZlbWVudHMgdXNlZCB0byByZWZpbmUgbWF0Y2hpbmcgdXNpbmcgc3VicGl4ZWwgaW5mb3JtYXRpb24uDQorICAgIGRvdWJsZSAgICAgICAgIHN1YnBpeGVsVG9sZXJhbmNlOyAgICAgICAgICAgLy9EZWZpbmVzIHRoZSBtYXhpbXVtIGFtb3VudCBvZiBjaGFuZ2UsIGluIHBpeGVscywgYmV0d2VlbiBjb25zZWN1dGl2ZSBpbmNyZW1lbnRhbCBpbXByb3ZlbWVudHMgaW4gdGhlIG1hdGNoIHBvc2l0aW9uIHRoYXQgeW91IHdhbnQgdG8gdHJpZ2dlciB0aGUgZW5kIG9mIHRoZSByZWZpbmVtZW50IHByb2Nlc3MuDQorICAgIGludCAgICAgICAgICAgIGluaXRpYWxNYXRjaExpc3RMZW5ndGg7ICAgICAgLy9TcGVjaWZpZXMgdGhlIG1heGltdW0gc2l6ZSBvZiB0aGUgbWF0Y2ggbGlzdC4NCisgICAgaW50ICAgICAgICAgICAgbWF0Y2hMaXN0UmVkdWN0aW9uRmFjdG9yOyAgICAvL1NwZWNpZmllcyB0aGUgcmVkdWN0aW9uIG9mIHRoZSBtYXRjaCBsaXN0IGFzIG1hdGNoZXMgYXJlIHJlZmluZWQuDQorICAgIGludCAgICAgICAgICAgIGluaXRpYWxTdGVwU2l6ZTsgICAgICAgICAgICAgLy9TcGVjaWZpZXMgdGhlIG51bWJlciBvZiBwaXhlbHMgdG8gc2hpZnQgdGhlIHNhbXBsZSBhY3Jvc3MgdGhlIGluc3BlY3Rpb24gaW1hZ2UgZHVyaW5nIHRoZSBpbml0aWFsIHBoYXNlIG9mIHNoaWZ0LWludmFyaWFudCBtYXRjaGluZy4NCisgICAgU2VhcmNoU3RyYXRlZ3kgc2VhcmNoU3RyYXRlZ3k7ICAgICAgICAgICAgICAvL1NwZWNpZmllcyB0aGUgYWdncmVzc2l2ZW5lc3Mgb2YgdGhlIHJvdGF0aW9uIHNlYXJjaCBzdHJhdGVneS4NCisgICAgaW50ICAgICAgICAgICAgaW50ZXJtZWRpYXRlQW5ndWxhckFjY3VyYWN5OyAvL1NwZWNpZmllcyB0aGUgYWNjdXJhY3kgdG8gdXNlIGR1cmluZyB0aGUgaW50ZXJtZWRpYXRlIHBoYXNlIG9mIHJvdGF0aW9uLWludmFyaWFudCBtYXRjaGluZy4NCit9IE1hdGNoUGF0dGVybkFkdmFuY2VkT3B0aW9uczsNCisNCit0eXBlZGVmIHN0cnVjdCBQYXJ0aWNsZUZpbHRlckNyaXRlcmlhMl9zdHJ1Y3Qgew0KKyAgICBNZWFzdXJlbWVudFR5cGUgcGFyYW1ldGVyOyAgLy9UaGUgbW9ycGhvbG9naWNhbCBtZWFzdXJlbWVudCB0aGF0IHRoZSBmdW5jdGlvbiB1c2VzIGZvciBmaWx0ZXJpbmcuDQorICAgIGZsb2F0ICAgICAgICAgICBsb3dlcjsgICAgICAvL1RoZSBsb3dlciBib3VuZCBvZiB0aGUgY3JpdGVyaWEgcmFuZ2UuDQorICAgIGZsb2F0ICAgICAgICAgICB1cHBlcjsgICAgICAvL1RoZSB1cHBlciBib3VuZCBvZiB0aGUgY3JpdGVyaWEgcmFuZ2UuDQorICAgIGludCAgICAgICAgICAgICBjYWxpYnJhdGVkOyAvL1NldCB0aGlzIGVsZW1lbnQgdG8gVFJVRSB0byB0YWtlIGNhbGlicmF0ZWQgbWVhc3VyZW1lbnRzLg0KKyAgICBpbnQgICAgICAgICAgICAgZXhjbHVkZTsgICAgLy9TZXQgdGhpcyBlbGVtZW50IHRvIFRSVUUgdG8gaW5kaWNhdGUgdGhhdCBhIG1hdGNoIG9jY3VycyB3aGVuIHRoZSBtZWFzdXJlbWVudCBpcyBvdXRzaWRlIHRoZSBjcml0ZXJpYSByYW5nZS4NCit9IFBhcnRpY2xlRmlsdGVyQ3JpdGVyaWEyOw0KKw0KK3R5cGVkZWYgc3RydWN0IEJlc3RDaXJjbGUyX3N0cnVjdCB7DQorICAgIFBvaW50RmxvYXQgY2VudGVyOyAgICAgICAgLy9UaGUgY29vcmRpbmF0ZSBsb2NhdGlvbiBvZiB0aGUgY2VudGVyIG9mIHRoZSBjaXJjbGUuDQorICAgIGRvdWJsZSAgICAgcmFkaXVzOyAgICAgICAgLy9UaGUgcmFkaXVzIG9mIHRoZSBjaXJjbGUuDQorICAgIGRvdWJsZSAgICAgYXJlYTsgICAgICAgICAgLy9UaGUgYXJlYSBvZiB0aGUgY2lyY2xlLg0KKyAgICBkb3VibGUgICAgIHBlcmltZXRlcjsgICAgIC8vVGhlIGxlbmd0aCBvZiB0aGUgcGVyaW1ldGVyIG9mIHRoZSBjaXJjbGUuDQorICAgIGRvdWJsZSAgICAgZXJyb3I7ICAgICAgICAgLy9SZXByZXNlbnRzIHRoZSBsZWFzdCBzcXVhcmUgZXJyb3Igb2YgdGhlIGZpdHRlZCBjaXJjbGUgdG8gdGhlIGVudGlyZSBzZXQgb2YgcG9pbnRzLg0KKyAgICBpbnQgICAgICAgIHZhbGlkOyAgICAgICAgIC8vVGhpcyBlbGVtZW50IGlzIFRSVUUgaWYgdGhlIGZ1bmN0aW9uIGFjaGlldmVkIHRoZSBtaW5pbXVtIHNjb3JlIHdpdGhpbiB0aGUgbnVtYmVyIG9mIGFsbG93ZWQgcmVmaW5lbWVudCBpdGVyYXRpb25zIGFuZCBGQUxTRSBpZiB0aGUgZnVuY3Rpb24gZGlkIG5vdCBhY2hpZXZlIHRoZSBtaW5pbXVtIHNjb3JlLg0KKyAgICBpbnQqICAgICAgIHBvaW50c1VzZWQ7ICAgIC8vQW4gYXJyYXkgb2YgdGhlIGluZGV4ZXMgZm9yIHRoZSBwb2ludHMgYXJyYXkgaW5kaWNhdGluZyB3aGljaCBwb2ludHMgdGhlIGZ1bmN0aW9uIHVzZWQgdG8gZml0IHRoZSBjaXJjbGUuDQorICAgIGludCAgICAgICAgbnVtUG9pbnRzVXNlZDsgLy9UaGUgbnVtYmVyIG9mIHBvaW50cyB0aGUgZnVuY3Rpb24gdXNlZCB0byBmaXQgdGhlIGNpcmNsZS4NCit9IEJlc3RDaXJjbGUyOw0KKw0KK3R5cGVkZWYgc3RydWN0IE9DUlNwYWNpbmdPcHRpb25zX3N0cnVjdCB7DQorICAgIGludCBtaW5DaGFyU3BhY2luZzsgICAgICAgICAgICAgIC8vVGhlIG1pbmltdW0gbnVtYmVyIG9mIHBpeGVscyB0aGF0IG11c3QgYmUgYmV0d2VlbiB0d28gY2hhcmFjdGVycyBmb3IgTkkgVmlzaW9uIHRvIHRyYWluIG9yIHJlYWQgdGhlIGNoYXJhY3RlcnMgc2VwYXJhdGVseS4NCisgICAgaW50IG1pbkNoYXJTaXplOyAgICAgICAgICAgICAgICAgLy9UaGUgbWluaW11bSBudW1iZXIgb2YgcGl4ZWxzIHJlcXVpcmVkIGZvciBhbiBvYmplY3QgdG8gYmUgYSBwb3RlbnRpYWxseSBpZGVudGlmaWFibGUgY2hhcmFjdGVyLg0KKyAgICBpbnQgbWF4Q2hhclNpemU7ICAgICAgICAgICAgICAgICAvL1RoZSBtYXhpbXVtIG51bWJlciBvZiBwaXhlbHMgcmVxdWlyZWQgZm9yIGFuIG9iamVjdCB0byBiZSBhIHBvdGVudGlhbGx5IGlkZW50aWZpYWJsZSBjaGFyYWN0ZXIuDQorICAgIGludCBtYXhIb3Jpem9udGFsRWxlbWVudFNwYWNpbmc7IC8vVGhlIG1heGltdW0gaG9yaXpvbnRhbCBzcGFjaW5nLCBpbiBwaXhlbHMsIGFsbG93ZWQgYmV0d2VlbiBjaGFyYWN0ZXIgZWxlbWVudHMgdG8gdHJhaW4gb3IgcmVhZCB0aGUgY2hhcmFjdGVyIGVsZW1lbnRzIGFzIGEgc2luZ2xlIGNoYXJhY3Rlci4NCisgICAgaW50IG1heFZlcnRpY2FsRWxlbWVudFNwYWNpbmc7ICAgLy9UaGUgbWF4aW11bSB2ZXJ0aWNhbCBlbGVtZW50IHNwYWNpbmcgaW4gcGl4ZWxzLg0KKyAgICBpbnQgbWluQm91bmRpbmdSZWN0V2lkdGg7ICAgICAgICAvL1RoZSBtaW5pbXVtIHBvc3NpYmxlIHdpZHRoLCBpbiBwaXhlbHMsIGZvciBhIGNoYXJhY3RlciBib3VuZGluZyByZWN0YW5nbGUuDQorICAgIGludCBtYXhCb3VuZGluZ1JlY3RXaWR0aDsgICAgICAgIC8vVGhlIG1heGltdW0gcG9zc2libGUgd2lkdGgsIGluIHBpeGVscywgZm9yIGEgY2hhcmFjdGVyIGJvdW5kaW5nIHJlY3RhbmdsZS4NCisgICAgaW50IG1pbkJvdW5kaW5nUmVjdEhlaWdodDsgICAgICAgLy9UaGUgbWluaW11bSBwb3NzaWJsZSBoZWlnaHQsIGluIHBpeGVscywgZm9yIGEgY2hhcmFjdGVyIGJvdW5kaW5nIHJlY3RhbmdsZS4NCisgICAgaW50IG1heEJvdW5kaW5nUmVjdEhlaWdodDsgICAgICAgLy9UaGUgbWF4aW11bSBwb3NzaWJsZSBoZWlnaHQsIGluIHBpeGVscywgZm9yIGEgY2hhcmFjdGVyIGJvdW5kaW5nIHJlY3RhbmdsZS4NCisgICAgaW50IGF1dG9TcGxpdDsgICAgICAgICAgICAgICAgICAgLy9TZXQgdGhpcyBlbGVtZW50IHRvIFRSVUUgdG8gYXV0b21hdGljYWxseSBhZGp1c3QgdGhlIGxvY2F0aW9uIG9mIHRoZSBjaGFyYWN0ZXIgYm91bmRpbmcgcmVjdGFuZ2xlIHdoZW4gY2hhcmFjdGVycyBvdmVybGFwIHZlcnRpY2FsbHkuDQorfSBPQ1JTcGFjaW5nT3B0aW9uczsNCisNCit0eXBlZGVmIHN0cnVjdCBPQ1JQcm9jZXNzaW5nT3B0aW9uc19zdHJ1Y3Qgew0KKyAgICBUaHJlc2hvbGRNb2RlIG1vZGU7ICAgICAgICAgICAgICAgICAgICAgICAvL1RoZSB0aHJlc2hvbGRpbmcgbW9kZS4NCisgICAgaW50ICAgICAgICAgICBsb3dUaHJlc2hvbGQ7ICAgICAgICAgICAgICAgLy9UaGUgbG93IHRocmVzaG9sZCB2YWx1ZSB3aGVuIHlvdSBzZXQgbW9kZSB0byBJTUFRX0ZJWEVEX1JBTkdFLg0KKyAgICBpbnQgICAgICAgICAgIGhpZ2hUaHJlc2hvbGQ7ICAgICAgICAgICAgICAvL1RoZSBoaWdoIHRocmVzaG9sZCB2YWx1ZSB3aGVuIHlvdSBzZXQgbW9kZSB0byBJTUFRX0ZJWEVEX1JBTkdFLg0KKyAgICBpbnQgICAgICAgICAgIGJsb2NrQ291bnQ7ICAgICAgICAgICAgICAgICAvL1RoZSBudW1iZXIgb2YgYmxvY2tzIGZvciB0aHJlc2hvbGQgY2FsY3VsYXRpb24gYWxnb3JpdGhtcyB0aGF0IHJlcXVpcmUgYmxvY2tzLg0KKyAgICBpbnQgICAgICAgICAgIGZhc3RUaHJlc2hvbGQ7ICAgICAgICAgICAgICAvL1NldCB0aGlzIGVsZW1lbnQgdG8gVFJVRSB0byB1c2UgYSBmYXN0ZXIsIGxlc3MgYWNjdXJhdGUgdGhyZXNob2xkIGNhbGN1bGF0aW9uIGFsZ29yaXRobS4NCisgICAgaW50ICAgICAgICAgICBiaU1vZGFsQ2FsY3VsYXRpb247ICAgICAgICAgLy9TZXQgdGhpcyBlbGVtZW50IHRvIFRSVUUgdG8gY2FsY3VsYXRlIGJvdGggdGhlIGxvdyBhbmQgaGlnaCB0aHJlc2hvbGQgdmFsdWVzIHdoZW4gdXNpbmcgdGhlIGZhc3QgdGhyZXNob2xkaW5nIG1ldGhvZC4NCisgICAgaW50ICAgICAgICAgICBkYXJrQ2hhcmFjdGVyczsgICAgICAgICAgICAgLy9TZXQgdGhpcyBlbGVtZW50IHRvIFRSVUUgdG8gcmVhZCBvciB0cmFpbiBkYXJrIGNoYXJhY3RlcnMgb24gYSBsaWdodCBiYWNrZ3JvdW5kLg0KKyAgICBpbnQgICAgICAgICAgIHJlbW92ZVBhcnRpY2xlc1RvdWNoaW5nUk9JOyAvL1NldCB0aGlzIGVsZW1lbnQgdG8gVFJVRSB0byByZW1vdmUgdGhlIHBhcnRpY2xlcyB0b3VjaGluZyB0aGUgUk9JLg0KKyAgICBpbnQgICAgICAgICAgIGVyb3Npb25Db3VudDsgICAgICAgICAgICAgICAvL1RoZSBudW1iZXIgb2YgZXJvc2lvbnMgdG8gcGVyZm9ybS4NCit9IE9DUlByb2Nlc3NpbmdPcHRpb25zOw0KKw0KK3R5cGVkZWYgc3RydWN0IFJlYWRUZXh0T3B0aW9uc19zdHJ1Y3Qgew0KKyAgICBTdHJpbmcyNTUgICAgICB2YWxpZENoYXJzWzI1NV07ICAvL0FuIGFycmF5IG9mIHN0cmluZ3MgdGhhdCBzcGVjaWZpZXMgdGhlIHZhbGlkIGNoYXJhY3RlcnMuDQorICAgIGludCAgICAgICAgICAgIG51bVZhbGlkQ2hhcnM7ICAgIC8vVGhlIG51bWJlciBvZiBzdHJpbmdzIGluIHRoZSB2YWxpZENoYXJzIGFycmF5IHRoYXQgeW91IGhhdmUgaW5pdGlhbGl6ZWQuDQorICAgIGNoYXIgICAgICAgICAgIHN1YnN0aXR1dGlvbkNoYXI7IC8vVGhlIGNoYXJhY3RlciB0byBzdWJzdGl0dXRlIGZvciBvYmplY3RzIHRoYXQgdGhlIGZ1bmN0aW9uIGNhbm5vdCBtYXRjaCB3aXRoIGFueSBvZiB0aGUgdHJhaW5lZCBjaGFyYWN0ZXJzLg0KKyAgICBSZWFkU3RyYXRlZ3kgICByZWFkU3RyYXRlZ3k7ICAgICAvL1RoZSByZWFkIHN0cmF0ZWd5LCB3aGljaCBkZXRlcm1pbmVzIGhvdyBjbG9zZWx5IHRoZSBmdW5jdGlvbiBhbmFseXplcyBpbWFnZXMgaW4gdGhlIHJlYWRpbmcgcHJvY2VzcyB0byBtYXRjaCBvYmplY3RzIHdpdGggdHJhaW5lZCBjaGFyYWN0ZXJzLg0KKyAgICBpbnQgICAgICAgICAgICBhY2NlcHRhbmNlTGV2ZWw7ICAvL1RoZSBtaW5pbXVtIGFjY2VwdGFuY2UgbGV2ZWwgYXQgd2hpY2ggYW4gb2JqZWN0IGlzIGNvbnNpZGVyZWQgYSB0cmFpbmVkIGNoYXJhY3Rlci4NCisgICAgaW50ICAgICAgICAgICAgYXNwZWN0UmF0aW87ICAgICAgLy9UaGUgbWF4aW11bSBhc3BlY3QgcmF0aW8gdmFyaWFuY2UgcGVyY2VudGFnZSBmb3IgdmFsaWQgY2hhcmFjdGVycy4NCisgICAgUmVhZFJlc29sdXRpb24gcmVhZFJlc29sdXRpb247ICAgLy9UaGUgcmVhZCByZXNvbHV0aW9uLCB3aGljaCBkZXRlcm1pbmVzIGhvdyBtdWNoIG9mIHRoZSB0cmFpbmVkIGNoYXJhY3RlciBkYXRhIHRoZSBmdW5jdGlvbiB1c2VzIHRvIG1hdGNoIG9iamVjdHMgdG8gdHJhaW5lZCBjaGFyYWN0ZXJzLg0KK30gUmVhZFRleHRPcHRpb25zOw0KKw0KK3R5cGVkZWYgc3RydWN0IENoYXJJbmZvX3N0cnVjdCB7DQorICAgIGNvbnN0IGNoYXIqICBjaGFyVmFsdWU7ICAgICAvL1JldHJpZXZlcyB0aGUgY2hhcmFjdGVyIHZhbHVlIG9mIHRoZSBjb3JyZXNwb25kaW5nIGNoYXJhY3RlciBpbiB0aGUgY2hhcmFjdGVyIHNldC4NCisgICAgY29uc3QgSW1hZ2UqIGNoYXJJbWFnZTsgICAgIC8vVGhlIGltYWdlIHlvdSB1c2VkIHRvIHRyYWluIHRoaXMgY2hhcmFjdGVyLg0KKyAgICBjb25zdCBJbWFnZSogaW50ZXJuYWxJbWFnZTsgLy9UaGUgaW50ZXJuYWwgcmVwcmVzZW50YXRpb24gdGhhdCBOSSBWaXNpb24gdXNlcyB0byBtYXRjaCBvYmplY3RzIHRvIHRoaXMgY2hhcmFjdGVyLg0KK30gQ2hhckluZm87DQorDQorI2lmICFkZWZpbmVkKFVTRVJJTlRfSEVBREVSKSAmJiAhZGVmaW5lZChfQ1ZJX1JFQ1RfREVGSU5FRCkNCit0eXBlZGVmIHN0cnVjdCBSZWN0X3N0cnVjdCB7DQorICAgIGludCB0b3A7ICAgIC8vTG9jYXRpb24gb2YgdGhlIHRvcCBlZGdlIG9mIHRoZSByZWN0YW5nbGUuDQorICAgIGludCBsZWZ0OyAgIC8vTG9jYXRpb24gb2YgdGhlIGxlZnQgZWRnZSBvZiB0aGUgcmVjdGFuZ2xlLg0KKyAgICBpbnQgaGVpZ2h0OyAvL0hlaWdodCBvZiB0aGUgcmVjdGFuZ2xlLg0KKyAgICBpbnQgd2lkdGg7ICAvL1dpZHRoIG9mIHRoZSByZWN0YW5nbGUuDQorfSBSZWN0Ow0KKyNkZWZpbmUgX0NWSV9SRUNUX0RFRklORUQNCisjZW5kaWYNCisNCit0eXBlZGVmIHN0cnVjdCBDaGFyUmVwb3J0X3N0cnVjdCB7DQorICAgIGNvbnN0IGNoYXIqIGNoYXJhY3RlcjsgICAgIC8vVGhlIGNoYXJhY3RlciB2YWx1ZS4NCisgICAgUG9pbnRGbG9hdCAgY29ybmVyWzRdOyAgICAgLy9BbiBhcnJheSBvZiBmb3VyIHBvaW50cyB0aGF0IGRlc2NyaWJlcyB0aGUgcmVjdGFuZ2xlIHRoYXQgc3Vycm91bmRzIHRoZSBjaGFyYWN0ZXIuDQorICAgIGludCAgICAgICAgIHJlc2VydmVkOyAgICAgIC8vVGhpcyBlbGVtZW50IGlzIHJlc2VydmVkLg0KKyAgICBpbnQgICAgICAgICBsb3dUaHJlc2hvbGQ7ICAvL1RoZSBtaW5pbXVtIHZhbHVlIG9mIHRoZSB0aHJlc2hvbGQgcmFuZ2UgdXNlZCBmb3IgdGhpcyBjaGFyYWN0ZXIuDQorICAgIGludCAgICAgICAgIGhpZ2hUaHJlc2hvbGQ7IC8vVGhlIG1heGltdW0gdmFsdWUgb2YgdGhlIHRocmVzaG9sZCByYW5nZSB1c2VkIGZvciB0aGlzIGNoYXJhY3Rlci4NCit9IENoYXJSZXBvcnQ7DQorDQordHlwZWRlZiBzdHJ1Y3QgUmVhZFRleHRSZXBvcnRfc3RydWN0IHsNCisgICAgY29uc3QgY2hhciogICAgICAgcmVhZFN0cmluZzsgICAgICAgICAgLy9UaGUgcmVhZCBzdHJpbmcuDQorICAgIGNvbnN0IENoYXJSZXBvcnQqIGNoYXJhY3RlclJlcG9ydDsgICAgIC8vQW4gYXJyYXkgb2YgcmVwb3J0cyBkZXNjcmliaW5nIHRoZSBwcm9wZXJ0aWVzIG9mIGVhY2ggaWRlbnRpZmllZCBjaGFyYWN0ZXIuDQorICAgIGludCAgICAgICAgICAgICAgIG51bUNoYXJhY3RlclJlcG9ydHM7IC8vVGhlIG51bWJlciBvZiBpZGVudGlmaWVkIGNoYXJhY3RlcnMuDQorfSBSZWFkVGV4dFJlcG9ydDsNCisNCisjaWYgIWRlZmluZWQoVVNFUklOVF9IRUFERVIpICYmICFkZWZpbmVkKF9DVklfUE9JTlRfREVGSU5FRCkNCit0eXBlZGVmIHN0cnVjdCBQb2ludF9zdHJ1Y3Qgew0KKyAgICBpbnQgeDsgLy9UaGUgeC1jb29yZGluYXRlIG9mIHRoZSBwb2ludC4NCisgICAgaW50IHk7IC8vVGhlIHktY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQuDQorfSBQb2ludDsNCisjZGVmaW5lIF9DVklfUE9JTlRfREVGSU5FRA0KKyNlbmRpZg0KKw0KK3R5cGVkZWYgc3RydWN0IEFubnVsdXNfc3RydWN0IHsNCisgICAgUG9pbnQgIGNlbnRlcjsgICAgICAvL1RoZSBjb29yZGluYXRlIGxvY2F0aW9uIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGFubnVsdXMuDQorICAgIGludCAgICBpbm5lclJhZGl1czsgLy9UaGUgaW50ZXJuYWwgcmFkaXVzIG9mIHRoZSBhbm51bHVzLg0KKyAgICBpbnQgICAgb3V0ZXJSYWRpdXM7IC8vVGhlIGV4dGVybmFsIHJhZGl1cyBvZiB0aGUgYW5udWx1cy4NCisgICAgZG91YmxlIHN0YXJ0QW5nbGU7ICAvL1RoZSBzdGFydCBhbmdsZSwgaW4gZGVncmVlcywgb2YgdGhlIGFubnVsdXMuDQorICAgIGRvdWJsZSBlbmRBbmdsZTsgICAgLy9UaGUgZW5kIGFuZ2xlLCBpbiBkZWdyZWVzLCBvZiB0aGUgYW5udWx1cy4NCit9IEFubnVsdXM7DQorDQordHlwZWRlZiBzdHJ1Y3QgRWRnZUxvY2F0aW9uUmVwb3J0X3N0cnVjdCB7DQorICAgIFBvaW50RmxvYXQqIGVkZ2VzOyAgICAvL1RoZSBjb29yZGluYXRlIGxvY2F0aW9uIG9mIGFsbCBlZGdlcyBkZXRlY3RlZCBieSB0aGUgc2VhcmNoIGxpbmUuDQorICAgIGludCAgICAgICAgIG51bUVkZ2VzOyAvL1RoZSBudW1iZXIgb2YgcG9pbnRzIGluIHRoZSBlZGdlcyBhcnJheS4NCit9IEVkZ2VMb2NhdGlvblJlcG9ydDsNCisNCit0eXBlZGVmIHN0cnVjdCBFZGdlT3B0aW9uc19zdHJ1Y3Qgew0KKyAgICB1bnNpZ25lZCAgICAgICAgICAgIHRocmVzaG9sZDsgICAgICAgICAvL1NwZWNpZmllcyB0aGUgdGhyZXNob2xkIHZhbHVlIGZvciB0aGUgY29udHJhc3Qgb2YgdGhlIGVkZ2UuDQorICAgIHVuc2lnbmVkICAgICAgICAgICAgd2lkdGg7ICAgICAgICAgICAgIC8vVGhlIG51bWJlciBvZiBwaXhlbHMgdGhhdCB0aGUgZnVuY3Rpb24gYXZlcmFnZXMgdG8gZmluZCB0aGUgY29udHJhc3QgYXQgZWl0aGVyIHNpZGUgb2YgdGhlIGVkZ2UuDQorICAgIHVuc2lnbmVkICAgICAgICAgICAgc3RlZXBuZXNzOyAgICAgICAgIC8vVGhlIHNwYW4sIGluIHBpeGVscywgb2YgdGhlIHNsb3BlIG9mIHRoZSBlZGdlIHByb2plY3RlZCBhbG9uZyB0aGUgcGF0aCBzcGVjaWZpZWQgYnkgdGhlIGlucHV0IHBvaW50cy4NCisgICAgSW50ZXJwb2xhdGlvbk1ldGhvZCBzdWJwaXhlbFR5cGU7ICAgICAgLy9UaGUgbWV0aG9kIGZvciBpbnRlcnBvbGF0aW5nLg0KKyAgICB1bnNpZ25lZCAgICAgICAgICAgIHN1YnBpeGVsRGl2aXNpb25zOyAvL1RoZSBudW1iZXIgb2Ygc2FtcGxlcyB0aGUgZnVuY3Rpb24gb2J0YWlucyBmcm9tIGEgcGl4ZWwuDQorfSBFZGdlT3B0aW9uczsNCisNCit0eXBlZGVmIHN0cnVjdCBFZGdlUmVwb3J0X3N0cnVjdCB7DQorICAgIGZsb2F0ICAgICAgICBsb2NhdGlvbjsgICAvL1RoZSBsb2NhdGlvbiBvZiB0aGUgZWRnZSBmcm9tIHRoZSBmaXJzdCBwb2ludCBpbiB0aGUgcG9pbnRzIGFycmF5Lg0KKyAgICBmbG9hdCAgICAgICAgY29udHJhc3Q7ICAgLy9UaGUgY29udHJhc3QgYXQgdGhlIGVkZ2UuDQorICAgIFBvbGFyaXR5VHlwZSBwb2xhcml0eTsgICAvL1RoZSBwb2xhcml0eSBvZiB0aGUgZWRnZS4NCisgICAgZmxvYXQgICAgICAgIHJlc2VydmVkOyAgIC8vVGhpcyBlbGVtZW50IGlzIHJlc2VydmVkLg0KKyAgICBQb2ludEZsb2F0ICAgY29vcmRpbmF0ZTsgLy9UaGUgY29vcmRpbmF0ZXMgb2YgdGhlIGVkZ2UuDQorfSBFZGdlUmVwb3J0Ow0KKw0KK3R5cGVkZWYgc3RydWN0IEV4dHJlbWVSZXBvcnRfc3RydWN0IHsNCisgICAgZG91YmxlIGxvY2F0aW9uOyAgICAgICAgIC8vVGhlIGxvY2F0aW9ucyBvZiB0aGUgZXh0cmVtZS4NCisgICAgZG91YmxlIGFtcGxpdHVkZTsgICAgICAgIC8vVGhlIGFtcGxpdHVkZSBvZiB0aGUgZXh0cmVtZS4NCisgICAgZG91YmxlIHNlY29uZERlcml2YXRpdmU7IC8vVGhlIHNlY29uZCBkZXJpdmF0aXZlIG9mIHRoZSBleHRyZW1lLg0KK30gRXh0cmVtZVJlcG9ydDsNCisNCit0eXBlZGVmIHN0cnVjdCBGaXRMaW5lT3B0aW9uc19zdHJ1Y3Qgew0KKyAgICBmbG9hdCBtaW5TY29yZTsgICAgICAgLy9TcGVjaWZpZXMgdGhlIHJlcXVpcmVkIHF1YWxpdHkgb2YgdGhlIGZpdHRlZCBsaW5lLg0KKyAgICBmbG9hdCBwaXhlbFJhZGl1czsgICAgLy9TcGVjaWZpZXMgdGhlIG5laWdoYm9yaG9vZCBwaXhlbCByZWxhdGlvbnNoaXAgZm9yIHRoZSBpbml0aWFsIHN1YnNldCBvZiBwb2ludHMgYmVpbmcgdXNlZC4NCisgICAgaW50ICAgbnVtUmVmaW5lbWVudHM7IC8vU3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgcmVmaW5lbWVudCBpdGVyYXRpb25zIHlvdSBhbGxvdyB0aGUgZnVuY3Rpb24gdG8gcGVyZm9ybSBvbiB0aGUgaW5pdGlhbCBzdWJzZXQgb2YgcG9pbnRzLg0KK30gRml0TGluZU9wdGlvbnM7DQorDQordHlwZWRlZiBzdHJ1Y3QgRGlzcGxheU1hcHBpbmdfc3RydWN0IHsNCisgICAgTWFwcGluZ01ldGhvZCBtZXRob2Q7ICAgICAgIC8vRGVzY3JpYmVzIHRoZSBtZXRob2QgZm9yIGNvbnZlcnRpbmcgMTYtYml0IHBpeGVscyB0byA4LWJpdCBwaXhlbHMuDQorICAgIGludCAgICAgICAgICAgbWluaW11bVZhbHVlOyAvL1doZW4gbWV0aG9kIGlzIElNQVFfUkFOR0UsIG1pbmltdW1WYWx1ZSByZXByZXNlbnRzIHRoZSB2YWx1ZSB0aGF0IGlzIG1hcHBlZCB0byAwLg0KKyAgICBpbnQgICAgICAgICAgIG1heGltdW1WYWx1ZTsgLy9XaGVuIG1ldGhvZCBpcyBJTUFRX1JBTkdFLCBtYXhpbXVtVmFsdWUgcmVwcmVzZW50cyB0aGUgdmFsdWUgdGhhdCBpcyBtYXBwZWQgdG8gMjU1Lg0KKyAgICBpbnQgICAgICAgICAgIHNoaWZ0Q291bnQ7ICAgLy9XaGVuIG1ldGhvZCBpcyBJTUFRX0RPV05TSElGVCwgc2hpZnRDb3VudCByZXByZXNlbnRzIHRoZSBudW1iZXIgb2YgYml0cyB0aGUgZnVuY3Rpb24gcmlnaHQtc2hpZnRzIHRoZSAxNi1iaXQgcGl4ZWwgdmFsdWVzLg0KK30gRGlzcGxheU1hcHBpbmc7DQorDQordHlwZWRlZiBzdHJ1Y3QgRGV0ZWN0RXh0cmVtZXNPcHRpb25zX3N0cnVjdCB7DQorICAgIGRvdWJsZSB0aHJlc2hvbGQ7IC8vRGVmaW5lcyB3aGljaCBleHRyZW1lcyBhcmUgdG9vIHNtYWxsLg0KKyAgICBpbnQgICAgd2lkdGg7ICAgICAvL1NwZWNpZmllcyB0aGUgbnVtYmVyIG9mIGNvbnNlY3V0aXZlIGRhdGEgcG9pbnRzIHRoZSBmdW5jdGlvbiB1c2VzIGluIHRoZSBxdWFkcmF0aWMgbGVhc3Qtc3F1YXJlcyBmaXQuDQorfSBEZXRlY3RFeHRyZW1lc09wdGlvbnM7DQorDQordHlwZWRlZiBzdHJ1Y3QgSW1hZ2VJbmZvX3N0cnVjdCB7DQorICAgIENhbGlicmF0aW9uVW5pdCBpbWFnZVVuaXQ7ICAgICAvL0lmIHlvdSBzZXQgY2FsaWJyYXRpb24gaW5mb3JtYXRpb24gd2l0aCBpbWFxU2V0U2ltcGxlQ2FsaWJyYXRpb25JbmZvKCksIGltYWdlVW5pdCBpcyB0aGUgY2FsaWJyYXRpb24gdW5pdC4NCisgICAgZmxvYXQgICAgICAgICAgIHN0ZXBYOyAgICAgICAgIC8vSWYgeW91IHNldCBjYWxpYnJhdGlvbiBpbmZvcm1hdGlvbiB3aXRoIGltYXFTZXRDYWxpYnJhdGlvbkluZm8oKSwgc3RlcFggaXMgdGhlIGRpc3RhbmNlIGluIHRoZSBjYWxpYnJhdGlvbiB1bml0IGJldHdlZW4gdHdvIHBpeGVscyBpbiB0aGUgeCBkaXJlY3Rpb24uDQorICAgIGZsb2F0ICAgICAgICAgICBzdGVwWTsgICAgICAgICAvL0lmIHlvdSBzZXQgY2FsaWJyYXRpb24gaW5mb3JtYXRpb24gd2l0aCBpbWFxU2V0Q2FsaWJyYXRpb25JbmZvKCksIHN0ZXBZIGlzIHRoZSBkaXN0YW5jZSBpbiB0aGUgY2FsaWJyYXRpb24gdW5pdCBiZXR3ZWVuIHR3byBwaXhlbHMgaW4gdGhlIHkgZGlyZWN0aW9uLg0KKyAgICBJbWFnZVR5cGUgICAgICAgaW1hZ2VUeXBlOyAgICAgLy9UaGUgdHlwZSBvZiB0aGUgaW1hZ2UuDQorICAgIGludCAgICAgICAgICAgICB4UmVzOyAgICAgICAgICAvL1RoZSBudW1iZXIgb2YgY29sdW1ucyBpbiB0aGUgaW1hZ2UuDQorICAgIGludCAgICAgICAgICAgICB5UmVzOyAgICAgICAgICAvL1RoZSBudW1iZXIgb2Ygcm93cyBpbiB0aGUgaW1hZ2UuDQorICAgIGludCAgICAgICAgICAgICB4T2Zmc2V0OyAgICAgICAvL0lmIHlvdSBzZXQgbWFzayBvZmZzZXQgaW5mb3JtYXRpb24gd2l0aCBpbWFxU2V0TWFza09mZnNldCgpLCB4T2Zmc2V0IGlzIHRoZSBvZmZzZXQgb2YgdGhlIG1hc2sgb3JpZ2luIGluIHRoZSB4IGRpcmVjdGlvbi4NCisgICAgaW50ICAgICAgICAgICAgIHlPZmZzZXQ7ICAgICAgIC8vSWYgeW91IHNldCBtYXNrIG9mZnNldCBpbmZvcm1hdGlvbiB3aXRoIGltYXFTZXRNYXNrT2Zmc2V0KCksIHlPZmZzZXQgaXMgdGhlIG9mZnNldCBvZiB0aGUgbWFzayBvcmlnaW4gaW4gdGhlIHkgZGlyZWN0aW9uLg0KKyAgICBpbnQgICAgICAgICAgICAgYm9yZGVyOyAgICAgICAgLy9UaGUgbnVtYmVyIG9mIGJvcmRlciBwaXhlbHMgYXJvdW5kIHRoZSBpbWFnZS4NCisgICAgaW50ICAgICAgICAgICAgIHBpeGVsc1BlckxpbmU7IC8vVGhlIG51bWJlciBvZiBwaXhlbHMgc3RvcmVkIGZvciBlYWNoIGxpbmUgb2YgdGhlIGltYWdlLg0KKyAgICB2b2lkKiAgICAgICAgICAgcmVzZXJ2ZWQwOyAgICAgLy9UaGlzIGVsZW1lbnQgaXMgcmVzZXJ2ZWQuDQorICAgIHZvaWQqICAgICAgICAgICByZXNlcnZlZDE7ICAgICAvL1RoaXMgZWxlbWVudCBpcyByZXNlcnZlZC4NCisgICAgdm9pZCogICAgICAgICAgIGltYWdlU3RhcnQ7ICAgIC8vQSBwb2ludGVyIHRvIHBpeGVsICgwLDApLg0KK30gSW1hZ2VJbmZvOw0KKw0KK3R5cGVkZWYgc3RydWN0IExDRE9wdGlvbnNfc3RydWN0IHsNCisgICAgaW50ICAgbGl0U2VnbWVudHM7ICAvL1NldCB0aGlzIHBhcmFtZXRlciB0byBUUlVFIGlmIHRoZSBzZWdtZW50cyBhcmUgYnJpZ2h0ZXIgdGhhbiB0aGUgYmFja2dyb3VuZC4NCisgICAgZmxvYXQgdGhyZXNob2xkOyAgICAvL0RldGVybWluZXMgd2hldGhlciBhIHNlZ21lbnQgaXMgT04gb3IgT0ZGLg0KKyAgICBpbnQgICBzaWduOyAgICAgICAgIC8vSW5kaWNhdGVzIHdoZXRoZXIgdGhlIGZ1bmN0aW9uIG11c3QgcmVhZCB0aGUgc2lnbiBvZiB0aGUgaW5kaWNhdG9yLg0KKyAgICBpbnQgICBkZWNpbWFsUG9pbnQ7IC8vRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIGxvb2sgZm9yIGEgZGVjaW1hbCBzZXBhcmF0b3IgYWZ0ZXIgZWFjaCBkaWdpdC4NCit9IExDRE9wdGlvbnM7DQorDQordHlwZWRlZiBzdHJ1Y3QgTENEUmVwb3J0X3N0cnVjdCB7DQorICAgIGNvbnN0IGNoYXIqICB0ZXh0OyAgICAgICAgICAvL0Egc3RyaW5nIG9mIHRoZSBjaGFyYWN0ZXJzIG9mIHRoZSBMQ0QuDQorICAgIExDRFNlZ21lbnRzKiBzZWdtZW50SW5mbzsgICAvL0FuIGFycmF5IG9mIExDRFNlZ21lbnQgc3RydWN0dXJlcyBkZXNjcmliaW5nIHdoaWNoIHNlZ21lbnRzIG9mIGVhY2ggZGlnaXQgYXJlIG9uLg0KKyAgICBpbnQgICAgICAgICAgbnVtQ2hhcmFjdGVyczsgLy9UaGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgdGhhdCB0aGUgZnVuY3Rpb24gcmVhZHMuDQorICAgIGludCAgICAgICAgICByZXNlcnZlZDsgICAgICAvL1RoaXMgZWxlbWVudCBpcyByZXNlcnZlZC4NCit9IExDRFJlcG9ydDsNCisNCit0eXBlZGVmIHN0cnVjdCBMQ0RTZWdtZW50c19zdHJ1Y3Qgew0KKyAgICB1bnNpZ25lZCBhOjE7ICAgICAgICAgLy9UcnVlIGlmIHRoZSBhIHNlZ21lbnQgaXMgb24uDQorICAgIHVuc2lnbmVkIGI6MTsgICAgICAgICAvL1RydWUgaWYgdGhlIGIgc2VnbWVudCBpcyBvbi4NCisgICAgdW5zaWduZWQgYzoxOyAgICAgICAgIC8vVHJ1ZSBpZiB0aGUgYyBzZWdtZW50IGlzIG9uLg0KKyAgICB1bnNpZ25lZCBkOjE7ICAgICAgICAgLy9UcnVlIGlmIHRoZSBkIHNlZ21lbnQgaXMgb24uDQorICAgIHVuc2lnbmVkIGU6MTsgICAgICAgICAvL1RydWUgaWYgdGhlIGUgc2VnbWVudCBpcyBvbi4NCisgICAgdW5zaWduZWQgZjoxOyAgICAgICAgIC8vVHJ1ZSBpZiB0aGUgZiBzZWdtZW50IGlzIG9uLg0KKyAgICB1bnNpZ25lZCBnOjE7ICAgICAgICAgLy9UcnVlIGlmIHRoZSBnIHNlZ21lbnQgaXMgb24uDQorICAgIHVuc2lnbmVkIHJlc2VydmVkOjI1OyAvL1RoaXMgZWxlbWVudCBpcyByZXNlcnZlZC4NCit9IExDRFNlZ21lbnRzOw0KKw0KK3R5cGVkZWYgc3RydWN0IExlYXJuQ2FsaWJyYXRpb25PcHRpb25zX3N0cnVjdCB7DQorICAgIENhbGlicmF0aW9uTW9kZSBtb2RlOyAgICAgICAvL1NwZWNpZmllcyB0aGUgdHlwZSBvZiBhbGdvcml0aG0geW91IHdhbnQgdG8gdXNlIHRvIHJlZHVjZSBkaXN0b3J0aW9uIGluIHlvdXIgaW1hZ2UuDQorICAgIFNjYWxpbmdNZXRob2QgICBtZXRob2Q7ICAgICAvL0RlZmluZXMgdGhlIHNjYWxpbmcgbWV0aG9kIGNvcnJlY3Rpb24gZnVuY3Rpb25zIHVzZSB0byBjb3JyZWN0IHRoZSBpbWFnZS4NCisgICAgQ2FsaWJyYXRpb25ST0kgIHJvaTsgICAgICAgIC8vU3BlY2lmaWVzIHRoZSBST0kgY29ycmVjdGlvbiBmdW5jdGlvbnMgdXNlIHdoZW4gY29ycmVjdGluZyBhbiBpbWFnZS4NCisgICAgaW50ICAgICAgICAgICAgIGxlYXJuTWFwOyAgIC8vU2V0IHRoaXMgZWxlbWVudCB0byBUUlVFIGlmIHlvdSB3YW50IHRoZSBmdW5jdGlvbiB0byBjYWxjdWxhdGUgYW5kIHN0b3JlIGFuIGVycm9yIG1hcCBkdXJpbmcgdGhlIGxlYXJuaW5nIHByb2Nlc3MuDQorICAgIGludCAgICAgICAgICAgICBsZWFyblRhYmxlOyAvL1NldCB0aGlzIGVsZW1lbnQgdG8gVFJVRSBpZiB5b3Ugd2FudCB0aGUgZnVuY3Rpb24gdG8gY2FsY3VsYXRlIGFuZCBzdG9yZSB0aGUgY29ycmVjdGlvbiB0YWJsZS4NCit9IExlYXJuQ2FsaWJyYXRpb25PcHRpb25zOw0KKw0KK3R5cGVkZWYgc3RydWN0IExlYXJuQ29sb3JQYXR0ZXJuT3B0aW9uc19zdHJ1Y3Qgew0KKyAgICBMZWFybmluZ01vZGUgICAgICBsZWFybk1vZGU7ICAgICAgICAgLy9TcGVjaWZpZXMgdGhlIGludmFyaWFuY2UgbW9kZSB0aGUgZnVuY3Rpb24gdXNlcyB3aGVuIGxlYXJuaW5nIHRoZSBwYXR0ZXJuLg0KKyAgICBJbWFnZUZlYXR1cmVNb2RlICBmZWF0dXJlTW9kZTsgICAgICAgLy9TcGVjaWZpZXMgdGhlIGZlYXR1cmVzIHRoZSBmdW5jdGlvbiB1c2VzIHdoZW4gbGVhcm5pbmcgdGhlIGNvbG9yIHBhdHRlcm4uDQorICAgIGludCAgICAgICAgICAgICAgIHRocmVzaG9sZDsgICAgICAgICAvL1NwZWNpZmllcyB0aGUgc2F0dXJhdGlvbiB0aHJlc2hvbGQgdGhlIGZ1bmN0aW9uIHVzZXMgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiB0d28gY29sb3JzIHRoYXQgaGF2ZSB0aGUgc2FtZSBodWUgdmFsdWVzLg0KKyAgICBDb2xvcklnbm9yZU1vZGUgICBpZ25vcmVNb2RlOyAgICAgICAgLy9TcGVjaWZpZXMgd2hldGhlciB0aGUgZnVuY3Rpb24gZXhjbHVkZXMgY2VydGFpbiBjb2xvcnMgZnJvbSB0aGUgY29sb3IgZmVhdHVyZXMgb2YgdGhlIHRlbXBsYXRlIGltYWdlLg0KKyAgICBDb2xvckluZm9ybWF0aW9uKiBjb2xvcnNUb0lnbm9yZTsgICAgLy9BbiBhcnJheSBvZiBDb2xvckluZm9ybWF0aW9uIHN0cnVjdHVyZXMgcHJvdmlkaW5nIGEgc2V0IG9mIGNvbG9ycyB0byBleGNsdWRlIGZyb20gdGhlIGNvbG9yIGZlYXR1cmVzIG9mIHRoZSB0ZW1wbGF0ZSBpbWFnZS4NCisgICAgaW50ICAgICAgICAgICAgICAgbnVtQ29sb3JzVG9JZ25vcmU7IC8vVGhlIG51bWJlciBvZiBDb2xvckluZm9ybWF0aW9uIHN0cnVjdHVyZXMgaW4gdGhlIGNvbG9yc1RvSWdub3JlIGFycmF5Lg0KK30gTGVhcm5Db2xvclBhdHRlcm5PcHRpb25zOw0KKw0KK3R5cGVkZWYgc3RydWN0IExpbmVfc3RydWN0IHsNCisgICAgUG9pbnQgc3RhcnQ7IC8vVGhlIGNvb3JkaW5hdGUgbG9jYXRpb24gb2YgdGhlIHN0YXJ0IG9mIHRoZSBsaW5lLg0KKyAgICBQb2ludCBlbmQ7ICAgLy9UaGUgY29vcmRpbmF0ZSBsb2NhdGlvbiBvZiB0aGUgZW5kIG9mIHRoZSBsaW5lLg0KK30gTGluZTsNCisNCit0eXBlZGVmIHN0cnVjdCBMaW5lYXJBdmVyYWdlc19zdHJ1Y3Qgew0KKyAgICBmbG9hdCogY29sdW1uQXZlcmFnZXM7ICAgICAgLy9BbiBhcnJheSBjb250YWluaW5nIHRoZSBtZWFuIHBpeGVsIHZhbHVlIG9mIGVhY2ggY29sdW1uLg0KKyAgICBpbnQgICAgY29sdW1uQ291bnQ7ICAgICAgICAgLy9UaGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBjb2x1bW5BdmVyYWdlcyBhcnJheS4NCisgICAgZmxvYXQqIHJvd0F2ZXJhZ2VzOyAgICAgICAgIC8vQW4gYXJyYXkgY29udGFpbmluZyB0aGUgbWVhbiBwaXhlbCB2YWx1ZSBvZiBlYWNoIHJvdy4NCisgICAgaW50ICAgIHJvd0NvdW50OyAgICAgICAgICAgIC8vVGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgcm93QXZlcmFnZXMgYXJyYXkuDQorICAgIGZsb2F0KiByaXNpbmdEaWFnQXZlcmFnZXM7ICAvL0FuIGFycmF5IGNvbnRhaW5pbmcgdGhlIG1lYW4gcGl4ZWwgdmFsdWUgb2YgZWFjaCBkaWFnb25hbCBydW5uaW5nIGZyb20gdGhlIGxvd2VyIGxlZnQgdG8gdGhlIHVwcGVyIHJpZ2h0IG9mIHRoZSBpbnNwZWN0ZWQgYXJlYSBvZiB0aGUgaW1hZ2UuDQorICAgIGludCAgICByaXNpbmdEaWFnQ291bnQ7ICAgICAvL1RoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIHJpc2luZ0RpYWdBdmVyYWdlcyBhcnJheS4NCisgICAgZmxvYXQqIGZhbGxpbmdEaWFnQXZlcmFnZXM7IC8vQW4gYXJyYXkgY29udGFpbmluZyB0aGUgbWVhbiBwaXhlbCB2YWx1ZSBvZiBlYWNoIGRpYWdvbmFsIHJ1bm5pbmcgZnJvbSB0aGUgdXBwZXIgbGVmdCB0byB0aGUgbG93ZXIgcmlnaHQgb2YgdGhlIGluc3BlY3RlZCBhcmVhIG9mIHRoZSBpbWFnZS4NCisgICAgaW50ICAgIGZhbGxpbmdEaWFnQ291bnQ7ICAgIC8vVGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgZmFsbGluZ0RpYWdBdmVyYWdlcyBhcnJheS4NCit9IExpbmVhckF2ZXJhZ2VzOw0KKw0KK3R5cGVkZWYgc3RydWN0IExpbmVQcm9maWxlX3N0cnVjdCB7DQorICAgIGZsb2F0KiBwcm9maWxlRGF0YTsgLy9BbiBhcnJheSBjb250YWluaW5nIHRoZSB2YWx1ZSBvZiBlYWNoIHBpeGVsIGluIHRoZSBsaW5lLg0KKyAgICBSZWN0ICAgYm91bmRpbmdCb3g7IC8vVGhlIGJvdW5kaW5nIHJlY3RhbmdsZSBvZiB0aGUgbGluZS4NCisgICAgZmxvYXQgIG1pbjsgICAgICAgICAvL1RoZSBzbWFsbGVzdCBwaXhlbCB2YWx1ZSBpbiB0aGUgbGluZSBwcm9maWxlLg0KKyAgICBmbG9hdCAgbWF4OyAgICAgICAgIC8vVGhlIGxhcmdlc3QgcGl4ZWwgdmFsdWUgaW4gdGhlIGxpbmUgcHJvZmlsZS4NCisgICAgZmxvYXQgIG1lYW47ICAgICAgICAvL1RoZSBtZWFuIHZhbHVlIG9mIHRoZSBwaXhlbHMgaW4gdGhlIGxpbmUgcHJvZmlsZS4NCisgICAgZmxvYXQgIHN0ZERldjsgICAgICAvL1RoZSBzdGFuZGFyZCBkZXZpYXRpb24gb2YgdGhlIGxpbmUgcHJvZmlsZS4NCisgICAgaW50ICAgIGRhdGFDb3VudDsgICAvL1RoZSBzaXplIG9mIHRoZSBwcm9maWxlRGF0YSBhcnJheS4NCit9IExpbmVQcm9maWxlOw0KKw0KK3R5cGVkZWYgc3RydWN0IE1hdGNoQ29sb3JQYXR0ZXJuT3B0aW9uc19zdHJ1Y3Qgew0KKyAgICBNYXRjaGluZ01vZGUgICAgICAgIG1hdGNoTW9kZTsgICAgICAgICAgIC8vU3BlY2lmaWVzIHRoZSBtZXRob2QgdG8gdXNlIHdoZW4gbG9va2luZyBmb3IgdGhlIGNvbG9yIHBhdHRlcm4gaW4gdGhlIGltYWdlLg0KKyAgICBJbWFnZUZlYXR1cmVNb2RlICAgIGZlYXR1cmVNb2RlOyAgICAgICAgIC8vU3BlY2lmaWVzIHRoZSBmZWF0dXJlcyB0byB1c2Ugd2hlbiBsb29raW5nIGZvciB0aGUgY29sb3IgcGF0dGVybiBpbiB0aGUgaW1hZ2UuDQorICAgIGludCAgICAgICAgICAgICAgICAgbWluQ29udHJhc3Q7ICAgICAgICAgLy9TcGVjaWZpZXMgdGhlIG1pbmltdW0gY29udHJhc3QgZXhwZWN0ZWQgaW4gdGhlIGltYWdlLg0KKyAgICBpbnQgICAgICAgICAgICAgICAgIHN1YnBpeGVsQWNjdXJhY3k7ICAgIC8vU2V0IHRoaXMgcGFyYW1ldGVyIHRvIFRSVUUgdG8gcmV0dXJuIGFyZWFzIGluIHRoZSBpbWFnZSB0aGF0IG1hdGNoIHRoZSBwYXR0ZXJuIGFyZWEgd2l0aCBzdWJwaXhlbCBhY2N1cmFjeS4NCisgICAgUm90YXRpb25BbmdsZVJhbmdlKiBhbmdsZVJhbmdlczsgICAgICAgICAvL0FuIGFycmF5IG9mIGFuZ2xlIHJhbmdlcywgaW4gZGVncmVlcywgd2hlcmUgZWFjaCByYW5nZSBzcGVjaWZpZXMgaG93IG11Y2ggeW91IGV4cGVjdCB0aGUgcGF0dGVybiB0byBiZSByb3RhdGVkIGluIHRoZSBpbWFnZS4NCisgICAgaW50ICAgICAgICAgICAgICAgICBudW1SYW5nZXM7ICAgICAgICAgICAvL051bWJlciBvZiBhbmdsZSByYW5nZXMgaW4gdGhlIGFuZ2xlUmFuZ2VzIGFycmF5Lg0KKyAgICBkb3VibGUgICAgICAgICAgICAgIGNvbG9yV2VpZ2h0OyAgICAgICAgIC8vRGV0ZXJtaW5lcyB0aGUgcGVyY2VudCBjb250cmlidXRpb24gb2YgdGhlIGNvbG9yIHNjb3JlIHRvIHRoZSBmaW5hbCBjb2xvciBwYXR0ZXJuIG1hdGNoaW5nIHNjb3JlLg0KKyAgICBDb2xvclNlbnNpdGl2aXR5ICAgIHNlbnNpdGl2aXR5OyAgICAgICAgIC8vU3BlY2lmaWVzIHRoZSBzZW5zaXRpdml0eSBvZiB0aGUgY29sb3IgaW5mb3JtYXRpb24gaW4gdGhlIGltYWdlLg0KKyAgICBTZWFyY2hTdHJhdGVneSAgICAgIHN0cmF0ZWd5OyAgICAgICAgICAgIC8vU3BlY2lmaWVzIGhvdyB0aGUgY29sb3IgZmVhdHVyZXMgb2YgdGhlIGltYWdlIGFyZSB1c2VkIGR1cmluZyB0aGUgc2VhcmNoIHBoYXNlLg0KKyAgICBpbnQgICAgICAgICAgICAgICAgIG51bU1hdGNoZXNSZXF1ZXN0ZWQ7IC8vTnVtYmVyIG9mIHZhbGlkIG1hdGNoZXMgZXhwZWN0ZWQuDQorICAgIGZsb2F0ICAgICAgICAgICAgICAgbWluTWF0Y2hTY29yZTsgICAgICAgLy9UaGUgbWluaW11bSBzY29yZSBhIG1hdGNoIGNhbiBoYXZlIGZvciB0aGUgZnVuY3Rpb24gdG8gY29uc2lkZXIgdGhlIG1hdGNoIHZhbGlkLg0KK30gTWF0Y2hDb2xvclBhdHRlcm5PcHRpb25zOw0KKw0KK3R5cGVkZWYgc3RydWN0IEhpc3RvZ3JhbVJlcG9ydF9zdHJ1Y3Qgew0KKyAgICBpbnQqICBoaXN0b2dyYW07ICAgICAgLy9BbiBhcnJheSBkZXNjcmliaW5nIHRoZSBudW1iZXIgb2YgcGl4ZWxzIHRoYXQgZmVsbCBpbnRvIGVhY2ggY2xhc3MuDQorICAgIGludCAgIGhpc3RvZ3JhbUNvdW50OyAvL1RoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIGhpc3RvZ3JhbSBhcnJheS4NCisgICAgZmxvYXQgbWluOyAgICAgICAgICAgIC8vVGhlIHNtYWxsZXN0IHBpeGVsIHZhbHVlIHRoYXQgdGhlIGZ1bmN0aW9uIGNsYXNzaWZpZWQuDQorICAgIGZsb2F0IG1heDsgICAgICAgICAgICAvL1RoZSBsYXJnZXN0IHBpeGVsIHZhbHVlIHRoYXQgdGhlIGZ1bmN0aW9uIGNsYXNzaWZpZWQuDQorICAgIGZsb2F0IHN0YXJ0OyAgICAgICAgICAvL1RoZSBzbWFsbGVzdCBwaXhlbCB2YWx1ZSB0aGF0IGZlbGwgaW50byB0aGUgZmlyc3QgY2xhc3MuDQorICAgIGZsb2F0IHdpZHRoOyAgICAgICAgICAvL1RoZSBzaXplIG9mIGVhY2ggY2xhc3MuDQorICAgIGZsb2F0IG1lYW47ICAgICAgICAgICAvL1RoZSBtZWFuIHZhbHVlIG9mIHRoZSBwaXhlbHMgdGhhdCB0aGUgZnVuY3Rpb24gY2xhc3NpZmllZC4NCisgICAgZmxvYXQgc3RkRGV2OyAgICAgICAgIC8vVGhlIHN0YW5kYXJkIGRldmlhdGlvbiBvZiB0aGUgcGl4ZWxzIHRoYXQgdGhlIGZ1bmN0aW9uIGNsYXNzaWZpZWQuDQorICAgIGludCAgIG51bVBpeGVsczsgICAgICAvL1RoZSBudW1iZXIgb2YgcGl4ZWxzIHRoYXQgdGhlIGZ1bmN0aW9uIGNsYXNzaWZpZWQuDQorfSBIaXN0b2dyYW1SZXBvcnQ7DQorDQordHlwZWRlZiBzdHJ1Y3QgQXJjSW5mb19zdHJ1Y3Qgew0KKyAgICBSZWN0ICAgYm91bmRpbmdCb3g7IC8vVGhlIGNvb3JkaW5hdGUgbG9jYXRpb24gb2YgdGhlIGJvdW5kaW5nIGJveCBvZiB0aGUgYXJjLg0KKyAgICBkb3VibGUgc3RhcnRBbmdsZTsgIC8vVGhlIGNvdW50ZXJjbG9ja3dpc2UgYW5nbGUgZnJvbSB0aGUgeC1heGlzIGluIGRlZ3JlZXMgdG8gdGhlIHN0YXJ0IG9mIHRoZSBhcmMuDQorICAgIGRvdWJsZSBlbmRBbmdsZTsgICAgLy9UaGUgY291bnRlcmNsb2Nrd2lzZSBhbmdsZSBmcm9tIHRoZSB4LWF4aXMgaW4gZGVncmVlcyB0byB0aGUgZW5kIG9mIHRoZSBhcmMuDQorfSBBcmNJbmZvOw0KKw0KK3R5cGVkZWYgc3RydWN0IEF4aXNSZXBvcnRfc3RydWN0IHsNCisgICAgUG9pbnRGbG9hdCBvcmlnaW47ICAgICAgICAgICAvL1RoZSBvcmlnaW4gb2YgdGhlIGNvb3JkaW5hdGUgc3lzdGVtLCB3aGljaCBpcyB0aGUgaW50ZXJzZWN0aW9uIG9mIHRoZSB0d28gYXhlcyBvZiB0aGUgY29vcmRpbmF0ZSBzeXN0ZW0uDQorICAgIFBvaW50RmxvYXQgbWFpbkF4aXNFbmQ7ICAgICAgLy9UaGUgZW5kIG9mIHRoZSBtYWluIGF4aXMsIHdoaWNoIGlzIHRoZSByZXN1bHQgb2YgdGhlIGNvbXB1dGF0aW9uIG9mIHRoZSBpbnRlcnNlY3Rpb24gb2YgdGhlIG1haW4gYXhpcyB3aXRoIHRoZSByZWN0YW5ndWxhciBzZWFyY2ggYXJlYS4NCisgICAgUG9pbnRGbG9hdCBzZWNvbmRhcnlBeGlzRW5kOyAvL1RoZSBlbmQgb2YgdGhlIHNlY29uZGFyeSBheGlzLCB3aGljaCBpcyB0aGUgcmVzdWx0IG9mIHRoZSBjb21wdXRhdGlvbiBvZiB0aGUgaW50ZXJzZWN0aW9uIG9mIHRoZSBzZWNvbmRhcnkgYXhpcyB3aXRoIHRoZSByZWN0YW5ndWxhciBzZWFyY2ggYXJlYS4NCit9IEF4aXNSZXBvcnQ7DQorDQordHlwZWRlZiBzdHJ1Y3QgQmFyY29kZUluZm9fc3RydWN0IHsNCisgICAgY29uc3QgY2hhciogb3V0cHV0U3RyaW5nOyAgICAvL0Egc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGRlY29kZWQgYmFyY29kZSBkYXRhLg0KKyAgICBpbnQgICAgICAgICBzaXplOyAgICAgICAgICAgIC8vVGhlIHNpemUgb2YgdGhlIG91dHB1dCBzdHJpbmcuDQorICAgIGNoYXIgICAgICAgIG91dHB1dENoYXIxOyAgICAgLy9UaGUgY29udGVudHMgb2YgdGhpcyBjaGFyYWN0ZXIgZGVwZW5kIG9uIHRoZSBiYXJjb2RlIHR5cGUuDQorICAgIGNoYXIgICAgICAgIG91dHB1dENoYXIyOyAgICAgLy9UaGUgY29udGVudHMgb2YgdGhpcyBjaGFyYWN0ZXIgZGVwZW5kIG9uIHRoZSBiYXJjb2RlIHR5cGUuDQorICAgIGRvdWJsZSAgICAgIGNvbmZpZGVuY2VMZXZlbDsgLy9BIHF1YWxpdHkgbWVhc3VyZSBvZiB0aGUgZGVjb2RlZCBiYXJjb2RlIHJhbmdpbmcgZnJvbSAwIHRvIDEwMCwgd2l0aCAxMDAgYmVpbmcgdGhlIGJlc3QuDQorICAgIEJhcmNvZGVUeXBlIHR5cGU7ICAgICAgICAgICAgLy9UaGUgdHlwZSBvZiBiYXJjb2RlLg0KK30gQmFyY29kZUluZm87DQorDQordHlwZWRlZiBzdHJ1Y3QgQkNHT3B0aW9uc19zdHJ1Y3Qgew0KKyAgICBmbG9hdCBicmlnaHRuZXNzOyAvL0FkanVzdHMgdGhlIGJyaWdodG5lc3Mgb2YgdGhlIGltYWdlLg0KKyAgICBmbG9hdCBjb250cmFzdDsgICAvL0FkanVzdHMgdGhlIGNvbnRyYXN0IG9mIHRoZSBpbWFnZS4NCisgICAgZmxvYXQgZ2FtbWE7ICAgICAgLy9QZXJmb3JtcyBnYW1tYSBjb3JyZWN0aW9uLg0KK30gQkNHT3B0aW9uczsNCisNCit0eXBlZGVmIHN0cnVjdCBCZXN0Q2lyY2xlX3N0cnVjdCB7DQorICAgIFBvaW50RmxvYXQgY2VudGVyOyAgICAvL1RoZSBjb29yZGluYXRlIGxvY2F0aW9uIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGNpcmNsZS4NCisgICAgZG91YmxlICAgICByYWRpdXM7ICAgIC8vVGhlIHJhZGl1cyBvZiB0aGUgY2lyY2xlLg0KKyAgICBkb3VibGUgICAgIGFyZWE7ICAgICAgLy9UaGUgYXJlYSBvZiB0aGUgY2lyY2xlLg0KKyAgICBkb3VibGUgICAgIHBlcmltZXRlcjsgLy9UaGUgbGVuZ3RoIG9mIHRoZSBwZXJpbWV0ZXIgb2YgdGhlIGNpcmNsZS4NCisgICAgZG91YmxlICAgICBlcnJvcjsgICAgIC8vUmVwcmVzZW50cyB0aGUgbGVhc3Qgc3F1YXJlIGVycm9yIG9mIHRoZSBmaXR0ZWQgY2lyY2xlIHRvIHRoZSBlbnRpcmUgc2V0IG9mIHBvaW50cy4NCit9IEJlc3RDaXJjbGU7DQorDQordHlwZWRlZiBzdHJ1Y3QgQmVzdEVsbGlwc2Vfc3RydWN0IHsNCisgICAgUG9pbnRGbG9hdCBjZW50ZXI7ICAgICAgICAgLy9UaGUgY29vcmRpbmF0ZSBsb2NhdGlvbiBvZiB0aGUgY2VudGVyIG9mIHRoZSBlbGxpcHNlLg0KKyAgICBQb2ludEZsb2F0IG1ham9yQXhpc1N0YXJ0OyAvL1RoZSBjb29yZGluYXRlIGxvY2F0aW9uIG9mIHRoZSBzdGFydCBvZiB0aGUgbWFqb3IgYXhpcyBvZiB0aGUgZWxsaXBzZS4NCisgICAgUG9pbnRGbG9hdCBtYWpvckF4aXNFbmQ7ICAgLy9UaGUgY29vcmRpbmF0ZSBsb2NhdGlvbiBvZiB0aGUgZW5kIG9mIHRoZSBtYWpvciBheGlzIG9mIHRoZSBlbGxpcHNlLg0KKyAgICBQb2ludEZsb2F0IG1pbm9yQXhpc1N0YXJ0OyAvL1RoZSBjb29yZGluYXRlIGxvY2F0aW9uIG9mIHRoZSBzdGFydCBvZiB0aGUgbWlub3IgYXhpcyBvZiB0aGUgZWxsaXBzZS4NCisgICAgUG9pbnRGbG9hdCBtaW5vckF4aXNFbmQ7ICAgLy9UaGUgY29vcmRpbmF0ZSBsb2NhdGlvbiBvZiB0aGUgZW5kIG9mIHRoZSBtaW5vciBheGlzIG9mIHRoZSBlbGxpcHNlLg0KKyAgICBkb3VibGUgICAgIGFyZWE7ICAgICAgICAgICAvL1RoZSBhcmVhIG9mIHRoZSBlbGxpcHNlLg0KKyAgICBkb3VibGUgICAgIHBlcmltZXRlcjsgICAgICAvL1RoZSBsZW5ndGggb2YgdGhlIHBlcmltZXRlciBvZiB0aGUgZWxsaXBzZS4NCit9IEJlc3RFbGxpcHNlOw0KKw0KK3R5cGVkZWYgc3RydWN0IEJlc3RMaW5lX3N0cnVjdCB7DQorICAgIFBvaW50RmxvYXQgICBzdGFydDsgICAgICAgICAvL1RoZSBjb29yZGluYXRlIGxvY2F0aW9uIG9mIHRoZSBzdGFydCBvZiB0aGUgbGluZS4NCisgICAgUG9pbnRGbG9hdCAgIGVuZDsgICAgICAgICAgIC8vVGhlIGNvb3JkaW5hdGUgbG9jYXRpb24gb2YgdGhlIGVuZCBvZiB0aGUgbGluZS4NCisgICAgTGluZUVxdWF0aW9uIGVxdWF0aW9uOyAgICAgIC8vRGVmaW5lcyB0aGUgdGhyZWUgY29lZmZpY2llbnRzIG9mIHRoZSBlcXVhdGlvbiBvZiB0aGUgYmVzdCBmaXQgbGluZS4NCisgICAgaW50ICAgICAgICAgIHZhbGlkOyAgICAgICAgIC8vVGhpcyBlbGVtZW50IGlzIFRSVUUgaWYgdGhlIGZ1bmN0aW9uIGFjaGlldmVkIHRoZSBtaW5pbXVtIHNjb3JlIHdpdGhpbiB0aGUgbnVtYmVyIG9mIGFsbG93ZWQgcmVmaW5lbWVudCBpdGVyYXRpb25zIGFuZCBGQUxTRSBpZiB0aGUgZnVuY3Rpb24gZGlkIG5vdCBhY2hpZXZlIHRoZSBtaW5pbXVtIHNjb3JlLg0KKyAgICBkb3VibGUgICAgICAgZXJyb3I7ICAgICAgICAgLy9SZXByZXNlbnRzIHRoZSBsZWFzdCBzcXVhcmUgZXJyb3Igb2YgdGhlIGZpdHRlZCBsaW5lIHRvIHRoZSBlbnRpcmUgc2V0IG9mIHBvaW50cy4NCisgICAgaW50KiAgICAgICAgIHBvaW50c1VzZWQ7ICAgIC8vQW4gYXJyYXkgb2YgdGhlIGluZGV4ZXMgZm9yIHRoZSBwb2ludHMgYXJyYXkgaW5kaWNhdGluZyB3aGljaCBwb2ludHMgdGhlIGZ1bmN0aW9uIHVzZWQgdG8gZml0IHRoZSBsaW5lLg0KKyAgICBpbnQgICAgICAgICAgbnVtUG9pbnRzVXNlZDsgLy9UaGUgbnVtYmVyIG9mIHBvaW50cyB0aGUgZnVuY3Rpb24gdXNlZCB0byBmaXQgdGhlIGxpbmUuDQorfSBCZXN0TGluZTsNCisNCit0eXBlZGVmIHN0cnVjdCBCcm93c2VyT3B0aW9uc19zdHJ1Y3Qgew0KKyAgICBpbnQgICAgICAgICAgICAgICB3aWR0aDsgICAgICAgICAgIC8vVGhlIHdpZHRoIHRvIG1ha2UgdGhlIGJyb3dzZXIuDQorICAgIGludCAgICAgICAgICAgICAgIGhlaWdodDsgICAgICAgICAgLy9UaGUgaGVpZ2h0IHRvIG1ha2UgdGhlIGJyb3dzZXIgaW1hZ2UuDQorICAgIGludCAgICAgICAgICAgICAgIGltYWdlc1BlckxpbmU7ICAgLy9UaGUgbnVtYmVyIG9mIGltYWdlcyB0byBwbGFjZSBvbiBhIHNpbmdsZSBsaW5lLg0KKyAgICBSR0JWYWx1ZSAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I7IC8vVGhlIGJhY2tncm91bmQgY29sb3Igb2YgdGhlIGJyb3dzZXIuDQorICAgIGludCAgICAgICAgICAgICAgIGZyYW1lU2l6ZTsgICAgICAgLy9TcGVjaWZpZXMgdGhlIG51bWJlciBvZiBwaXhlbHMgd2l0aCB3aGljaCB0byBib3JkZXIgZWFjaCB0aHVtYm5haWwuDQorICAgIEJyb3dzZXJGcmFtZVN0eWxlIHN0eWxlOyAgICAgICAgICAgLy9UaGUgc3R5bGUgZm9yIHRoZSBmcmFtZSBhcm91bmQgZWFjaCB0aHVtYm5haWwuDQorICAgIGZsb2F0ICAgICAgICAgICAgIHJhdGlvOyAgICAgICAgICAgLy9TcGVjaWZpZXMgdGhlIHdpZHRoIHRvIGhlaWdodCByYXRpbyBvZiBlYWNoIHRodW1ibmFpbC4NCisgICAgUkdCVmFsdWUgICAgICAgICAgZm9jdXNDb2xvcjsgICAgICAvL1RoZSBjb2xvciB0byB1c2UgdG8gZGlzcGxheSBmb2N1c2VkIGNlbGxzLg0KK30gQnJvd3Nlck9wdGlvbnM7DQorDQordHlwZWRlZiBzdHJ1Y3QgQ29vcmRpbmF0ZVN5c3RlbV9zdHJ1Y3Qgew0KKyAgICBQb2ludEZsb2F0ICAgICAgb3JpZ2luOyAgICAgICAgICAvL1RoZSBvcmlnaW4gb2YgdGhlIGNvb3JkaW5hdGUgc3lzdGVtLg0KKyAgICBmbG9hdCAgICAgICAgICAgYW5nbGU7ICAgICAgICAgICAvL1RoZSBhbmdsZSwgaW4gZGVncmVlcywgb2YgdGhlIHgtYXhpcyBvZiB0aGUgY29vcmRpbmF0ZSBzeXN0ZW0gcmVsYXRpdmUgdG8gdGhlIGltYWdlIHgtYXhpcy4NCisgICAgQXhpc09yaWVudGF0aW9uIGF4aXNPcmllbnRhdGlvbjsgLy9UaGUgZGlyZWN0aW9uIG9mIHRoZSB5LWF4aXMgb2YgdGhlIGNvb3JkaW5hdGUgcmVmZXJlbmNlIHN5c3RlbS4NCit9IENvb3JkaW5hdGVTeXN0ZW07DQorDQordHlwZWRlZiBzdHJ1Y3QgQ2FsaWJyYXRpb25JbmZvX3N0cnVjdCB7DQorICAgIGZsb2F0KiAgICAgICAgICAgICAgICAgIGVycm9yTWFwOyAgICAgICAvL1RoZSBlcnJvciBtYXAgZm9yIHRoZSBjYWxpYnJhdGlvbi4NCisgICAgaW50ICAgICAgICAgICAgICAgICAgICAgbWFwQ29sdW1uczsgICAgIC8vVGhlIG51bWJlciBvZiBjb2x1bW5zIGluIHRoZSBlcnJvciBtYXAuDQorICAgIGludCAgICAgICAgICAgICAgICAgICAgIG1hcFJvd3M7ICAgICAgICAvL1RoZSBudW1iZXIgb2Ygcm93cyBpbiB0aGUgZXJyb3IgbWFwLg0KKyAgICBST0kqICAgICAgICAgICAgICAgICAgICB1c2VyUm9pOyAgICAgICAgLy9TcGVjaWZpZXMgdGhlIFJPSSB0aGUgdXNlciBwcm92aWRlZCB3aGVuIGxlYXJuaW5nIHRoZSBjYWxpYnJhdGlvbi4NCisgICAgUk9JKiAgICAgICAgICAgICAgICAgICAgY2FsaWJyYXRpb25Sb2k7IC8vU3BlY2lmaWVzIHRoZSBST0kgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgcmVnaW9uIG9mIHRoZSBpbWFnZSB3aGVyZSB0aGUgY2FsaWJyYXRpb24gaW5mb3JtYXRpb24gaXMgYWNjdXJhdGUuDQorICAgIExlYXJuQ2FsaWJyYXRpb25PcHRpb25zIG9wdGlvbnM7ICAgICAgICAvL1NwZWNpZmllcyB0aGUgY2FsaWJyYXRpb24gb3B0aW9ucyB0aGUgdXNlciBwcm92aWRlZCB3aGVuIGxlYXJuaW5nIHRoZSBjYWxpYnJhdGlvbi4NCisgICAgR3JpZERlc2NyaXB0b3IgICAgICAgICAgZ3JpZDsgICAgICAgICAgIC8vU3BlY2lmaWVzIHRoZSBzY2FsaW5nIGNvbnN0YW50cyBmb3IgdGhlIGltYWdlLg0KKyAgICBDb29yZGluYXRlU3lzdGVtICAgICAgICBzeXN0ZW07ICAgICAgICAgLy9TcGVjaWZpZXMgdGhlIGNvb3JkaW5hdGUgc3lzdGVtIGZvciB0aGUgcmVhbCB3b3JsZCBjb29yZGluYXRlcy4NCisgICAgUmFuZ2VGbG9hdCAgICAgICAgICAgICAgcmFuZ2U7ICAgICAgICAgIC8vVGhlIHJhbmdlIG9mIHRoZSBncmF5c2NhbGUgdGhlIGZ1bmN0aW9uIHVzZWQgdG8gcmVwcmVzZW50IHRoZSBjaXJjbGVzIGluIHRoZSBncmlkIGltYWdlLg0KKyAgICBmbG9hdCAgICAgICAgICAgICAgICAgICBxdWFsaXR5OyAgICAgICAgLy9UaGUgcXVhbGl0eSBzY29yZSBvZiB0aGUgbGVhcm5pbmcgcHJvY2Vzcywgd2hpY2ggaXMgYSB2YWx1ZSBiZXR3ZWVuIDAtMTAwMC4NCit9IENhbGlicmF0aW9uSW5mbzsNCisNCit0eXBlZGVmIHN0cnVjdCBDYWxpYnJhdGlvblBvaW50c19zdHJ1Y3Qgew0KKyAgICBQb2ludEZsb2F0KiBwaXhlbENvb3JkaW5hdGVzOyAgICAgLy9UaGUgYXJyYXkgb2YgcGl4ZWwgY29vcmRpbmF0ZXMuDQorICAgIFBvaW50RmxvYXQqIHJlYWxXb3JsZENvb3JkaW5hdGVzOyAvL1RoZSBhcnJheSBvZiBjb3JyZXNwb25kaW5nIHJlYWwtd29ybGQgY29vcmRpbmF0ZXMuDQorICAgIGludCAgICAgICAgIG51bUNvb3JkaW5hdGVzOyAgICAgICAvL1RoZSBudW1iZXIgb2YgY29vcmRpbmF0ZXMgaW4gYm90aCBvZiB0aGUgYXJyYXlzLg0KK30gQ2FsaWJyYXRpb25Qb2ludHM7DQorDQordHlwZWRlZiBzdHJ1Y3QgQ2FsaXBlck9wdGlvbnNfc3RydWN0IHsNCisgICAgVHdvRWRnZVBvbGFyaXR5VHlwZSBwb2xhcml0eTsgICAgICAgICAgICAvL1NwZWNpZmllcyB0aGUgZWRnZSBwb2xhcml0eSBvZiB0aGUgZWRnZSBwYWlycy4NCisgICAgZmxvYXQgICAgICAgICAgICAgICBzZXBhcmF0aW9uOyAgICAgICAgICAvL1RoZSBkaXN0YW5jZSBiZXR3ZWVuIGVkZ2UgcGFpcnMuDQorICAgIGZsb2F0ICAgICAgICAgICAgICAgc2VwYXJhdGlvbkRldmlhdGlvbjsgLy9TZXRzIHRoZSByYW5nZSBhcm91bmQgdGhlIHNlcGFyYXRpb24gdmFsdWUuDQorfSBDYWxpcGVyT3B0aW9uczsNCisNCit0eXBlZGVmIHN0cnVjdCBDYWxpcGVyUmVwb3J0X3N0cnVjdCB7DQorICAgIGZsb2F0ICAgICAgZWRnZTFDb250cmFzdDsgLy9UaGUgY29udHJhc3Qgb2YgdGhlIGZpcnN0IGVkZ2UuDQorICAgIFBvaW50RmxvYXQgZWRnZTFDb29yZDsgICAgLy9UaGUgY29vcmRpbmF0ZXMgb2YgdGhlIGZpcnN0IGVkZ2UuDQorICAgIGZsb2F0ICAgICAgZWRnZTJDb250cmFzdDsgLy9UaGUgY29udHJhc3Qgb2YgdGhlIHNlY29uZCBlZGdlLg0KKyAgICBQb2ludEZsb2F0IGVkZ2UyQ29vcmQ7ICAgIC8vVGhlIGNvb3JkaW5hdGVzIG9mIHRoZSBzZWNvbmQgZWRnZS4NCisgICAgZmxvYXQgICAgICBzZXBhcmF0aW9uOyAgICAvL1RoZSBkaXN0YW5jZSBiZXR3ZWVuIHRoZSB0d28gZWRnZXMuDQorICAgIGZsb2F0ICAgICAgcmVzZXJ2ZWQ7ICAgICAgLy9UaGlzIGVsZW1lbnQgaXMgcmVzZXJ2ZWQuDQorfSBDYWxpcGVyUmVwb3J0Ow0KKw0KK3R5cGVkZWYgc3RydWN0IERyYXdUZXh0T3B0aW9uc19zdHJ1Y3Qgew0KKyAgICBjaGFyICAgICAgICAgIGZvbnROYW1lWzMyXTsgIC8vVGhlIGZvbnQgbmFtZSB0byB1c2UuDQorICAgIGludCAgICAgICAgICAgZm9udFNpemU7ICAgICAgLy9UaGUgc2l6ZSBvZiB0aGUgZm9udC4NCisgICAgaW50ICAgICAgICAgICBib2xkOyAgICAgICAgICAvL1NldCB0aGlzIHBhcmFtZXRlciB0byBUUlVFIHRvIGJvbGQgdGV4dC4NCisgICAgaW50ICAgICAgICAgICBpdGFsaWM7ICAgICAgICAvL1NldCB0aGlzIHBhcmFtZXRlciB0byBUUlVFIHRvIGl0YWxpY2l6ZSB0ZXh0Lg0KKyAgICBpbnQgICAgICAgICAgIHVuZGVybGluZTsgICAgIC8vU2V0IHRoaXMgcGFyYW1ldGVyIHRvIFRSVUUgdG8gdW5kZXJsaW5lIHRleHQuDQorICAgIGludCAgICAgICAgICAgc3RyaWtlb3V0OyAgICAgLy9TZXQgdGhpcyBwYXJhbWV0ZXIgdG8gVFJVRSB0byBzdHJpa2VvdXQgdGV4dC4NCisgICAgVGV4dEFsaWdubWVudCB0ZXh0QWxpZ25tZW50OyAvL1NldHMgdGhlIGFsaWdubWVudCBvZiB0ZXh0Lg0KKyAgICBGb250Q29sb3IgICAgIGZvbnRDb2xvcjsgICAgIC8vU2V0cyB0aGUgZm9udCBjb2xvci4NCit9IERyYXdUZXh0T3B0aW9uczsNCisNCit0eXBlZGVmIHN0cnVjdCBDaXJjbGVSZXBvcnRfc3RydWN0IHsNCisgICAgUG9pbnQgY2VudGVyOyAvL1RoZSBjb29yZGluYXRlIHBvaW50IG9mIHRoZSBjZW50ZXIgb2YgdGhlIGNpcmNsZS4NCisgICAgaW50ICAgcmFkaXVzOyAvL1RoZSByYWRpdXMgb2YgdGhlIGNpcmNsZSwgaW4gcGl4ZWxzLg0KKyAgICBpbnQgICBhcmVhOyAgIC8vVGhlIGFyZWEgb2YgdGhlIGNpcmNsZSwgaW4gcGl4ZWxzLg0KK30gQ2lyY2xlUmVwb3J0Ow0KKw0KK3R5cGVkZWYgc3RydWN0IENsb3NlZENvbnRvdXJfc3RydWN0IHsNCisgICAgUG9pbnQqIHBvaW50czsgICAgLy9UaGUgcG9pbnRzIHRoYXQgbWFrZSB1cCB0aGUgY2xvc2VkIGNvbnRvdXIuDQorICAgIGludCAgICBudW1Qb2ludHM7IC8vVGhlIG51bWJlciBvZiBwb2ludHMgaW4gdGhlIGFycmF5Lg0KK30gQ2xvc2VkQ29udG91cjsNCisNCit0eXBlZGVmIHN0cnVjdCBDb2xvckhpc3RvZ3JhbVJlcG9ydF9zdHJ1Y3Qgew0KKyAgICBIaXN0b2dyYW1SZXBvcnQgcGxhbmUxOyAvL1RoZSBoaXN0b2dyYW0gcmVwb3J0IG9mIHRoZSBmaXJzdCBjb2xvciBwbGFuZS4NCisgICAgSGlzdG9ncmFtUmVwb3J0IHBsYW5lMjsgLy9UaGUgaGlzdG9ncmFtIHJlcG9ydCBvZiB0aGUgc2Vjb25kIHBsYW5lLg0KKyAgICBIaXN0b2dyYW1SZXBvcnQgcGxhbmUzOyAvL1RoZSBoaXN0b2dyYW0gcmVwb3J0IG9mIHRoZSB0aGlyZCBwbGFuZS4NCit9IENvbG9ySGlzdG9ncmFtUmVwb3J0Ow0KKw0KK3R5cGVkZWYgc3RydWN0IENvbG9ySW5mb3JtYXRpb25fc3RydWN0IHsNCisgICAgaW50ICAgICBpbmZvQ291bnQ7ICAvL1RoZSBzaXplIG9mIHRoZSBpbmZvIGFycmF5Lg0KKyAgICBpbnQgICAgIHNhdHVyYXRpb247IC8vVGhlIHNhdHVyYXRpb24gbGV2ZWwgdGhlIGZ1bmN0aW9uIHVzZXMgdG8gbGVhcm4gdGhlIGNvbG9yIGluZm9ybWF0aW9uLg0KKyAgICBkb3VibGUqIGluZm87ICAgICAgIC8vQW4gYXJyYXkgb2YgY29sb3IgaW5mb3JtYXRpb24gdGhhdCByZXByZXNlbnRzIHRoZSBjb2xvciBzcGVjdHJ1bSBhbmFseXNpcyBvZiBhIHJlZ2lvbiBvZiBhbiBpbWFnZSBpbiBhIGNvbXBhY3QgZm9ybS4NCit9IENvbG9ySW5mb3JtYXRpb247DQorDQordHlwZWRlZiBzdHJ1Y3QgQ29tcGxleF9zdHJ1Y3Qgew0KKyAgICBmbG9hdCByOyAvL1RoZSByZWFsIHBhcnQgb2YgdGhlIHZhbHVlLg0KKyAgICBmbG9hdCBpOyAvL1RoZSBpbWFnaW5hcnkgcGFydCBvZiB0aGUgdmFsdWUuDQorfSBDb21wbGV4Ow0KKw0KK3R5cGVkZWYgc3RydWN0IENvbmNlbnRyaWNSYWtlUmVwb3J0X3N0cnVjdCB7DQorICAgIEFyY0luZm8qICAgICAgICAgICAgcmFrZUFyY3M7ICAgICAgICAgIC8vQW4gYXJyYXkgY29udGFpbmluZyB0aGUgbG9jYXRpb24gb2YgZWFjaCBjb25jZW50cmljIGFyYyBsaW5lIHVzZWQgZm9yIGVkZ2UgZGV0ZWN0aW9uLg0KKyAgICBpbnQgICAgICAgICAgICAgICAgIG51bUFyY3M7ICAgICAgICAgICAvL1RoZSBudW1iZXIgb2YgYXJjIGxpbmVzIGluIHRoZSByYWtlQXJjcyBhcnJheS4NCisgICAgUG9pbnRGbG9hdCogICAgICAgICBmaXJzdEVkZ2VzOyAgICAgICAgLy9UaGUgY29vcmRpbmF0ZSBsb2NhdGlvbiBvZiBhbGwgZWRnZXMgZGV0ZWN0ZWQgYXMgZmlyc3QgZWRnZXMuDQorICAgIGludCAgICAgICAgICAgICAgICAgbnVtRmlyc3RFZGdlczsgICAgIC8vVGhlIG51bWJlciBvZiBwb2ludHMgaW4gdGhlIGZpcnN0IGVkZ2VzIGFycmF5Lg0KKyAgICBQb2ludEZsb2F0KiAgICAgICAgIGxhc3RFZGdlczsgICAgICAgICAvL1RoZSBjb29yZGluYXRlIGxvY2F0aW9uIG9mIGFsbCBlZGdlcyBkZXRlY3RlZCBhcyBsYXN0IGVkZ2VzLg0KKyAgICBpbnQgICAgICAgICAgICAgICAgIG51bUxhc3RFZGdlczsgICAgICAvL1RoZSBudW1iZXIgb2YgcG9pbnRzIGluIHRoZSBsYXN0IGVkZ2VzIGFycmF5Lg0KKyAgICBFZGdlTG9jYXRpb25SZXBvcnQqIGFsbEVkZ2VzOyAgICAgICAgICAvL0FuIGFycmF5IG9mIHJlcG9ydHMgZGVzY3JpYmluZyB0aGUgbG9jYXRpb24gb2YgdGhlIGVkZ2VzIGxvY2F0ZWQgYnkgZWFjaCBjb25jZW50cmljIHJha2UgYXJjIGxpbmUuDQorICAgIGludCogICAgICAgICAgICAgICAgbGluZXNXaXRoRWRnZXM7ICAgIC8vQW4gYXJyYXkgb2YgaW5kaWNlcyBpbnRvIHRoZSByYWtlQXJjcyBhcnJheSBpbmRpY2F0aW5nIHRoZSBjb25jZW50cmljIHJha2UgYXJjIGxpbmVzIG9uIHdoaWNoIHRoZSBmdW5jdGlvbiBkZXRlY3RlZCBhdCBsZWFzdCBvbmUgZWRnZS4NCisgICAgaW50ICAgICAgICAgICAgICAgICBudW1MaW5lc1dpdGhFZGdlczsgLy9UaGUgbnVtYmVyIG9mIGNvbmNlbnRyaWMgcmFrZSBhcmMgbGluZXMgYWxvbmcgd2hpY2ggdGhlIGZ1bmN0aW9uIGRldGVjdGVkIGVkZ2VzLg0KK30gQ29uY2VudHJpY1Jha2VSZXBvcnQ7DQorDQordHlwZWRlZiBzdHJ1Y3QgQ29uc3RydWN0Uk9JT3B0aW9uc19zdHJ1Y3Qgew0KKyAgICBpbnQgICAgICAgICB3aW5kb3dOdW1iZXI7IC8vVGhlIHdpbmRvdyBudW1iZXIgb2YgdGhlIGltYWdlIHdpbmRvdy4NCisgICAgY29uc3QgY2hhciogd2luZG93VGl0bGU7ICAvL1NwZWNpZmllcyB0aGUgbWVzc2FnZSBzdHJpbmcgdGhhdCB0aGUgZnVuY3Rpb24gZGlzcGxheXMgaW4gdGhlIHRpdGxlIGJhciBvZiB0aGUgd2luZG93Lg0KKyAgICBQYWxldHRlVHlwZSB0eXBlOyAgICAgICAgIC8vVGhlIHBhbGV0dGUgdHlwZSB0byB1c2UuDQorICAgIFJHQlZhbHVlKiAgIHBhbGV0dGU7ICAgICAgLy9JZiB0eXBlIGlzIElNQVFfUEFMRVRURV9VU0VSLCB0aGlzIGFycmF5IGlzIHRoZSBwYWxldHRlIG9mIGNvbG9ycyB0byB1c2Ugd2l0aCB0aGUgd2luZG93Lg0KKyAgICBpbnQgICAgICAgICBudW1Db2xvcnM7ICAgIC8vSWYgdHlwZSBpcyBJTUFRX1BBTEVUVEVfVVNFUiwgdGhpcyBlbGVtZW50IGlzIHRoZSBudW1iZXIgb2YgY29sb3JzIGluIHRoZSBwYWxldHRlIGFycmF5Lg0KK30gQ29uc3RydWN0Uk9JT3B0aW9uczsNCisNCit0eXBlZGVmIHN0cnVjdCBDb250b3VySW5mb19zdHJ1Y3Qgew0KKyAgICBDb250b3VyVHlwZSB0eXBlOyAgICAgICAgIC8vVGhlIGNvbnRvdXIgdHlwZS4NCisgICAgdW5zaWduZWQgICAgbnVtUG9pbnRzOyAgICAvL1RoZSBudW1iZXIgb2YgcG9pbnRzIHRoYXQgbWFrZSB1cCB0aGUgY29udG91ci4NCisgICAgUG9pbnQqICAgICAgcG9pbnRzOyAgICAgICAvL1RoZSBwb2ludHMgZGVzY3JpYmluZyB0aGUgY29udG91ci4NCisgICAgUkdCVmFsdWUgICAgY29udG91ckNvbG9yOyAvL1RoZSBjb250b3VyIGNvbG9yLg0KK30gQ29udG91ckluZm87DQorDQordHlwZWRlZiB1bmlvbiBDb250b3VyVW5pb25fdW5pb24gew0KKyAgICBQb2ludCogICAgICAgICBwb2ludDsgICAgICAgICAgIC8vVXNlIHRoaXMgbWVtYmVyIHdoZW4gdGhlIGNvbnRvdXIgaXMgb2YgdHlwZSBJTUFRX1BPSU5ULg0KKyAgICBMaW5lKiAgICAgICAgICBsaW5lOyAgICAgICAgICAgIC8vVXNlIHRoaXMgbWVtYmVyIHdoZW4gdGhlIGNvbnRvdXIgaXMgb2YgdHlwZSBJTUFRX0xJTkUuDQorICAgIFJlY3QqICAgICAgICAgIHJlY3Q7ICAgICAgICAgICAgLy9Vc2UgdGhpcyBtZW1iZXIgd2hlbiB0aGUgY29udG91ciBpcyBvZiB0eXBlIElNQVFfUkVDVC4NCisgICAgUmVjdCogICAgICAgICAgb3ZhbEJvdW5kaW5nQm94OyAvL1VzZSB0aGlzIG1lbWJlciB3aGVuIHRoZSBjb250b3VyIGlzIG9mIHR5cGUgSU1BUV9PVkFMLg0KKyAgICBDbG9zZWRDb250b3VyKiBjbG9zZWRDb250b3VyOyAgIC8vVXNlIHRoaXMgbWVtYmVyIHdoZW4gdGhlIGNvbnRvdXIgaXMgb2YgdHlwZSBJTUFRX0NMT1NFRF9DT05UT1VSLg0KKyAgICBPcGVuQ29udG91ciogICBvcGVuQ29udG91cjsgICAgIC8vVXNlIHRoaXMgbWVtYmVyIHdoZW4gdGhlIGNvbnRvdXIgaXMgb2YgdHlwZSBJTUFRX09QRU5fQ09OVE9VUi4NCisgICAgQW5udWx1cyogICAgICAgYW5udWx1czsgICAgICAgICAvL1VzZSB0aGlzIG1lbWJlciB3aGVuIHRoZSBjb250b3VyIGlzIG9mIHR5cGUgSU1BUV9BTk5VTFVTLg0KKyAgICBSb3RhdGVkUmVjdCogICByb3RhdGVkUmVjdDsgICAgIC8vVXNlIHRoaXMgbWVtYmVyIHdoZW4gdGhlIGNvbnRvdXIgaXMgb2YgdHlwZSBJTUFRX1JPVEFURURfUkVDVC4NCit9IENvbnRvdXJVbmlvbjsNCisNCit0eXBlZGVmIHN0cnVjdCBDb250b3VySW5mbzJfc3RydWN0IHsNCisgICAgQ29udG91clR5cGUgIHR5cGU7ICAgICAgLy9UaGUgY29udG91ciB0eXBlLg0KKyAgICBSR0JWYWx1ZSAgICAgY29sb3I7ICAgICAvL1RoZSBjb250b3VyIGNvbG9yLg0KKyAgICBDb250b3VyVW5pb24gc3RydWN0dXJlOyAvL1RoZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgdG8gZGVzY3JpYmUgdGhlIGNvbnRvdXIgaW4gY29vcmRpbmF0ZSBzcGFjZS4NCit9IENvbnRvdXJJbmZvMjsNCisNCit0eXBlZGVmIHN0cnVjdCBDb250b3VyUG9pbnRfc3RydWN0IHsNCisgICAgZG91YmxlIHg7ICAgICAgICAgICAgIC8vVGhlIHgtY29vcmRpbmF0ZSB2YWx1ZSBpbiB0aGUgaW1hZ2UuDQorICAgIGRvdWJsZSB5OyAgICAgICAgICAgICAvL1RoZSB5LWNvb3JkaW5hdGUgdmFsdWUgaW4gdGhlIGltYWdlLg0KKyAgICBkb3VibGUgY3VydmF0dXJlOyAgICAgLy9UaGUgY2hhbmdlIGluIHNsb3BlIGF0IHRoaXMgZWRnZSBwb2ludCBvZiB0aGUgc2VnbWVudC4NCisgICAgZG91YmxlIHhEaXNwbGFjZW1lbnQ7IC8vVGhlIHggZGlzcGxhY2VtZW50IG9mIHRoZSBjdXJyZW50IGVkZ2UgcGl4ZWwgZnJvbSBhIGN1YmljIHNwbGluZSBmaXQgb2YgdGhlIGN1cnJlbnQgZWRnZSBzZWdtZW50Lg0KKyAgICBkb3VibGUgeURpc3BsYWNlbWVudDsgLy9UaGUgeSBkaXNwbGFjZW1lbnQgb2YgdGhlIGN1cnJlbnQgZWRnZSBwaXhlbCBmcm9tIGEgY3ViaWMgc3BsaW5lIGZpdCBvZiB0aGUgY3VycmVudCBlZGdlIHNlZ21lbnQuDQorfSBDb250b3VyUG9pbnQ7DQorDQordHlwZWRlZiBzdHJ1Y3QgQ29vcmRpbmF0ZVRyYW5zZm9ybV9zdHJ1Y3Qgew0KKyAgICBQb2ludCBpbml0aWFsT3JpZ2luOyAvL1RoZSBvcmlnaW4gb2YgdGhlIGluaXRpYWwgY29vcmRpbmF0ZSBzeXN0ZW0uDQorICAgIGZsb2F0IGluaXRpYWxBbmdsZTsgIC8vVGhlIGFuZ2xlLCBpbiBkZWdyZWVzLCBvZiB0aGUgeC1heGlzIG9mIHRoZSBpbml0aWFsIGNvb3JkaW5hdGUgc3lzdGVtIHJlbGF0aXZlIHRvIHRoZSBpbWFnZSB4LWF4aXMuDQorICAgIFBvaW50IGZpbmFsT3JpZ2luOyAgIC8vVGhlIG9yaWdpbiBvZiB0aGUgZmluYWwgY29vcmRpbmF0ZSBzeXN0ZW0uDQorICAgIGZsb2F0IGZpbmFsQW5nbGU7ICAgIC8vVGhlIGFuZ2xlLCBpbiBkZWdyZWVzLCBvZiB0aGUgeC1heGlzIG9mIHRoZSBmaW5hbCBjb29yZGluYXRlIHN5c3RlbSByZWxhdGl2ZSB0byB0aGUgaW1hZ2UgeC1heGlzLg0KK30gQ29vcmRpbmF0ZVRyYW5zZm9ybTsNCisNCit0eXBlZGVmIHN0cnVjdCBDb29yZGluYXRlVHJhbnNmb3JtMl9zdHJ1Y3Qgew0KKyAgICBDb29yZGluYXRlU3lzdGVtIHJlZmVyZW5jZVN5c3RlbTsgICAvL0RlZmluZXMgdGhlIGNvb3JkaW5hdGUgc3lzdGVtIGZvciBpbnB1dCBjb29yZGluYXRlcy4NCisgICAgQ29vcmRpbmF0ZVN5c3RlbSBtZWFzdXJlbWVudFN5c3RlbTsgLy9EZWZpbmVzIHRoZSBjb29yZGluYXRlIHN5c3RlbSBpbiB3aGljaCB0aGUgZnVuY3Rpb24gc2hvdWxkIHBlcmZvcm0gbWVhc3VyZW1lbnRzLg0KK30gQ29vcmRpbmF0ZVRyYW5zZm9ybTI7DQorDQordHlwZWRlZiBzdHJ1Y3QgQ2FubnlPcHRpb25zX3N0cnVjdCB7DQorICAgIGZsb2F0IHNpZ21hOyAgICAgICAgICAvL1RoZSBzaWdtYSBvZiB0aGUgR2F1c3NpYW4gc21vb3RoaW5nIGZpbHRlciB0aGF0IHRoZSBmdW5jdGlvbiBhcHBsaWVzIHRvIHRoZSBpbWFnZSBiZWZvcmUgZWRnZSBkZXRlY3Rpb24uDQorICAgIGZsb2F0IHVwcGVyVGhyZXNob2xkOyAvL1RoZSB1cHBlciBmcmFjdGlvbiBvZiBwaXhlbCB2YWx1ZXMgaW4gdGhlIGltYWdlIGZyb20gd2hpY2ggdGhlIGZ1bmN0aW9uIGNob29zZXMgYSBzZWVkIG9yIHN0YXJ0aW5nIHBvaW50IG9mIGFuIGVkZ2Ugc2VnbWVudC4NCisgICAgZmxvYXQgbG93ZXJUaHJlc2hvbGQ7IC8vVGhlIGZ1bmN0aW9uIG11bHRpcGxpZXMgdGhpcyB2YWx1ZSBieSB1cHBlclRocmVzaG9sZCB0byBkZXRlcm1pbmUgdGhlIGxvd2VyIHRocmVzaG9sZCBmb3IgYWxsIHRoZSBwaXhlbHMgaW4gYW4gZWRnZSBzZWdtZW50Lg0KKyAgICBpbnQgICB3aW5kb3dTaXplOyAgICAgLy9UaGUgd2luZG93IHNpemUgb2YgdGhlIEdhdXNzaWFuIGZpbHRlciB0aGF0IHRoZSBmdW5jdGlvbiBhcHBsaWVzIHRvIHRoZSBpbWFnZS4NCit9IENhbm55T3B0aW9uczsNCisNCit0eXBlZGVmIHN0cnVjdCBSYW5nZV9zdHJ1Y3Qgew0KKyAgICBpbnQgbWluVmFsdWU7IC8vVGhlIG1pbmltdW0gdmFsdWUgb2YgdGhlIHJhbmdlLg0KKyAgICBpbnQgbWF4VmFsdWU7IC8vVGhlIG1heGltdW0gdmFsdWUgb2YgdGhlIHJhbmdlLg0KK30gUmFuZ2U7DQorDQordHlwZWRlZiBzdHJ1Y3QgVXNlclBvaW50U3ltYm9sX3N0cnVjdCB7DQorICAgIGludCAgY29sczsgICAvL051bWJlciBvZiBjb2x1bW5zIGluIHRoZSBzeW1ib2wuDQorICAgIGludCAgcm93czsgICAvL051bWJlciBvZiByb3dzIGluIHRoZSBzeW1ib2wuDQorICAgIGludCogcGl4ZWxzOyAvL1RoZSBwaXhlbHMgb2YgdGhlIHN5bWJvbC4NCit9IFVzZXJQb2ludFN5bWJvbDsNCisNCit0eXBlZGVmIHN0cnVjdCBWaWV3M0RPcHRpb25zX3N0cnVjdCB7DQorICAgIGludCAgICAgICAgIHNpemVSZWR1Y3Rpb247IC8vQSBkaXZpc29yIHRoZSBmdW5jdGlvbiB1c2VzIHdoZW4gZGV0ZXJtaW5pbmcgdGhlIGZpbmFsIGhlaWdodCBhbmQgd2lkdGggb2YgdGhlIDNEIGltYWdlLg0KKyAgICBpbnQgICAgICAgICBtYXhIZWlnaHQ7ICAgICAvL0RlZmluZXMgdGhlIG1heGltdW0gaGVpZ2h0IG9mIGEgcGl4ZWwgZnJvbSB0aGUgaW1hZ2Ugc291cmNlIGRyYXduIGluIDNELg0KKyAgICBEaXJlY3Rpb24zRCBkaXJlY3Rpb247ICAgICAvL0RlZmluZXMgdGhlIDNEIG9yaWVudGF0aW9uLg0KKyAgICBmbG9hdCAgICAgICBhbHBoYTsgICAgICAgICAvL0RldGVybWluZXMgdGhlIGFuZ2xlIGJldHdlZW4gdGhlIGhvcml6b250YWwgYW5kIHRoZSBiYXNlbGluZS4NCisgICAgZmxvYXQgICAgICAgYmV0YTsgICAgICAgICAgLy9EZXRlcm1pbmVzIHRoZSBhbmdsZSBiZXR3ZWVuIHRoZSBob3Jpem9udGFsIGFuZCB0aGUgc2Vjb25kIGJhc2VsaW5lLg0KKyAgICBpbnQgICAgICAgICBib3JkZXI7ICAgICAgICAvL0RlZmluZXMgdGhlIGJvcmRlciBzaXplLg0KKyAgICBpbnQgICAgICAgICBiYWNrZ3JvdW5kOyAgICAvL0RlZmluZXMgdGhlIGJhY2tncm91bmQgY29sb3IuDQorICAgIFBsYW5lM0QgICAgIHBsYW5lOyAgICAgICAgIC8vSW5kaWNhdGVzIHRoZSB2aWV3IGEgZnVuY3Rpb24gdXNlcyB0byBzaG93IGNvbXBsZXggaW1hZ2VzLg0KK30gVmlldzNET3B0aW9uczsNCisNCit0eXBlZGVmIHN0cnVjdCBNYXRjaFBhdHRlcm5PcHRpb25zX3N0cnVjdCB7DQorICAgIE1hdGNoaW5nTW9kZSAgICAgICAgbW9kZTsgICAgICAgICAgICAgICAgLy9TcGVjaWZpZXMgdGhlIG1ldGhvZCB0byB1c2Ugd2hlbiBsb29raW5nIGZvciB0aGUgcGF0dGVybiBpbiB0aGUgaW1hZ2UuDQorICAgIGludCAgICAgICAgICAgICAgICAgbWluQ29udHJhc3Q7ICAgICAgICAgLy9TcGVjaWZpZXMgdGhlIG1pbmltdW0gY29udHJhc3QgZXhwZWN0ZWQgaW4gdGhlIGltYWdlLg0KKyAgICBpbnQgICAgICAgICAgICAgICAgIHN1YnBpeGVsQWNjdXJhY3k7ICAgIC8vU2V0IHRoaXMgZWxlbWVudCB0byBUUlVFIHRvIHJldHVybiBhcmVhcyBpbiB0aGUgaW1hZ2UgdGhhdCBtYXRjaCB0aGUgcGF0dGVybiBhcmVhIHdpdGggc3VicGl4ZWwgYWNjdXJhY3kuDQorICAgIFJvdGF0aW9uQW5nbGVSYW5nZSogYW5nbGVSYW5nZXM7ICAgICAgICAgLy9BbiBhcnJheSBvZiBhbmdsZSByYW5nZXMsIGluIGRlZ3JlZXMsIHdoZXJlIGVhY2ggcmFuZ2Ugc3BlY2lmaWVzIGhvdyBtdWNoIHlvdSBleHBlY3QgdGhlIHBhdHRlcm4gdG8gYmUgcm90YXRlZCBpbiB0aGUgaW1hZ2UuDQorICAgIGludCAgICAgICAgICAgICAgICAgbnVtUmFuZ2VzOyAgICAgICAgICAgLy9OdW1iZXIgb2YgYW5nbGUgcmFuZ2VzIGluIHRoZSBhbmdsZVJhbmdlcyBhcnJheS4NCisgICAgaW50ICAgICAgICAgICAgICAgICBudW1NYXRjaGVzUmVxdWVzdGVkOyAvL051bWJlciBvZiB2YWxpZCBtYXRjaGVzIGV4cGVjdGVkLg0KKyAgICBpbnQgICAgICAgICAgICAgICAgIG1hdGNoRmFjdG9yOyAgICAgICAgIC8vQ29udHJvbHMgdGhlIG51bWJlciBvZiBwb3RlbnRpYWwgbWF0Y2hlcyB0aGF0IHRoZSBmdW5jdGlvbiBleGFtaW5lcy4NCisgICAgZmxvYXQgICAgICAgICAgICAgICBtaW5NYXRjaFNjb3JlOyAgICAgICAvL1RoZSBtaW5pbXVtIHNjb3JlIGEgbWF0Y2ggY2FuIGhhdmUgZm9yIHRoZSBmdW5jdGlvbiB0byBjb25zaWRlciB0aGUgbWF0Y2ggdmFsaWQuDQorfSBNYXRjaFBhdHRlcm5PcHRpb25zOw0KKw0KK3R5cGVkZWYgc3RydWN0IFRJRkZGaWxlT3B0aW9uc19zdHJ1Y3Qgew0KKyAgICBpbnQgICAgICAgICAgICAgICAgIHJvd3NQZXJTdHJpcDsgICAgLy9JbmRpY2F0ZXMgdGhlIG51bWJlciBvZiByb3dzIHRoYXQgdGhlIGZ1bmN0aW9uIHdyaXRlcyBwZXIgc3RyaXAuDQorICAgIFBob3RvbWV0cmljTW9kZSAgICAgcGhvdG9JbnRlcnA7ICAgICAvL0Rlc2lnbmF0ZXMgd2hpY2ggcGhvdG9tZXRyaWMgaW50ZXJwcmV0YXRpb24gdG8gdXNlLg0KKyAgICBUSUZGQ29tcHJlc3Npb25UeXBlIGNvbXByZXNzaW9uVHlwZTsgLy9JbmRpY2F0ZXMgdGhlIHR5cGUgb2YgY29tcHJlc3Npb24gdG8gdXNlIG9uIHRoZSBUSUZGIGZpbGUuDQorfSBUSUZGRmlsZU9wdGlvbnM7DQorDQordHlwZWRlZiB1bmlvbiBDb2xvcl91bmlvbiB7DQorICAgIFJHQlZhbHVlIHJnYjsgICAgICAvL1RoZSBpbmZvcm1hdGlvbiBuZWVkZWQgdG8gZGVzY3JpYmUgYSBjb2xvciBpbiB0aGUgUkdCIChSZWQsIEdyZWVuLCBhbmQgQmx1ZSkgY29sb3Igc3BhY2UuDQorICAgIEhTTFZhbHVlIGhzbDsgICAgICAvL1RoZSBpbmZvcm1hdGlvbiBuZWVkZWQgdG8gZGVzY3JpYmUgYSBjb2xvciBpbiB0aGUgSFNMIChIdWUsIFNhdHVyYXRpb24sIGFuZCBMdW1pbmFuY2UpIGNvbG9yIHNwYWNlLg0KKyAgICBIU1ZWYWx1ZSBoc3Y7ICAgICAgLy9UaGUgaW5mb3JtYXRpb24gbmVlZGVkIHRvIGRlc2NyaWJlIGEgY29sb3IgaW4gdGhlIEhTSSAoSHVlLCBTYXR1cmF0aW9uLCBhbmQgVmFsdWUpIGNvbG9yIHNwYWNlLg0KKyAgICBIU0lWYWx1ZSBoc2k7ICAgICAgLy9UaGUgaW5mb3JtYXRpb24gbmVlZGVkIHRvIGRlc2NyaWJlIGEgY29sb3IgaW4gdGhlIEhTSSAoSHVlLCBTYXR1cmF0aW9uLCBhbmQgSW50ZW5zaXR5KSBjb2xvciBzcGFjZS4NCisgICAgaW50ICAgICAgcmF3VmFsdWU7IC8vVGhlIGludGVnZXIgdmFsdWUgZm9yIHRoZSBkYXRhIGluIHRoZSBjb2xvciB1bmlvbi4NCit9IENvbG9yOw0KKw0KK3R5cGVkZWYgdW5pb24gUGl4ZWxWYWx1ZV91bmlvbiB7DQorICAgIGZsb2F0ICAgICAgIGdyYXlzY2FsZTsgLy9BIGdyYXlzY2FsZSBwaXhlbCB2YWx1ZS4NCisgICAgUkdCVmFsdWUgICAgcmdiOyAgICAgICAvL0EgUkdCIHBpeGVsIHZhbHVlLg0KKyAgICBIU0xWYWx1ZSAgICBoc2w7ICAgICAgIC8vQSBIU0wgcGl4ZWwgdmFsdWUuDQorICAgIENvbXBsZXggICAgIGNvbXBsZXg7ICAgLy9BIGNvbXBsZXggcGl4ZWwgdmFsdWUuDQorICAgIFJHQlU2NFZhbHVlIHJnYnU2NDsgICAgLy9BbiB1bnNpZ25lZCA2NC1iaXQgUkdCIHBpeGVsIHZhbHVlLg0KK30gUGl4ZWxWYWx1ZTsNCisNCit0eXBlZGVmIHN0cnVjdCBPcGVuQ29udG91cl9zdHJ1Y3Qgew0KKyAgICBQb2ludCogcG9pbnRzOyAgICAvL1RoZSBwb2ludHMgdGhhdCBtYWtlIHVwIHRoZSBvcGVuIGNvbnRvdXIuDQorICAgIGludCAgICBudW1Qb2ludHM7IC8vVGhlIG51bWJlciBvZiBwb2ludHMgaW4gdGhlIGFycmF5Lg0KK30gT3BlbkNvbnRvdXI7DQorDQordHlwZWRlZiBzdHJ1Y3QgT3ZlcmxheVRleHRPcHRpb25zX3N0cnVjdCB7DQorICAgIGNvbnN0IGNoYXIqICAgICAgICAgICBmb250TmFtZTsgICAgICAgICAgICAgICAgLy9UaGUgbmFtZSBvZiB0aGUgZm9udCB0byB1c2UuDQorICAgIGludCAgICAgICAgICAgICAgICAgICBmb250U2l6ZTsgICAgICAgICAgICAgICAgLy9UaGUgc2l6ZSBvZiB0aGUgZm9udC4NCisgICAgaW50ICAgICAgICAgICAgICAgICAgIGJvbGQ7ICAgICAgICAgICAgICAgICAgICAvL1NldCB0aGlzIGVsZW1lbnQgdG8gVFJVRSB0byBib2xkIHRoZSB0ZXh0Lg0KKyAgICBpbnQgICAgICAgICAgICAgICAgICAgaXRhbGljOyAgICAgICAgICAgICAgICAgIC8vU2V0IHRoaXMgZWxlbWVudCB0byBUUlVFIHRvIGl0YWxpY2l6ZSB0aGUgdGV4dC4NCisgICAgaW50ICAgICAgICAgICAgICAgICAgIHVuZGVybGluZTsgICAgICAgICAgICAgICAvL1NldCB0aGlzIGVsZW1lbnQgdG8gVFJVRSB0byB1bmRlcmxpbmUgdGhlIHRleHQuDQorICAgIGludCAgICAgICAgICAgICAgICAgICBzdHJpa2VvdXQ7ICAgICAgICAgICAgICAgLy9TZXQgdGhpcyBlbGVtZW50IHRvIFRSVUUgdG8gc3RyaWtlb3V0IHRoZSB0ZXh0Lg0KKyAgICBUZXh0QWxpZ25tZW50ICAgICAgICAgaG9yaXpvbnRhbFRleHRBbGlnbm1lbnQ7IC8vU2V0cyB0aGUgYWxpZ25tZW50IG9mIHRoZSB0ZXh0Lg0KKyAgICBWZXJ0aWNhbFRleHRBbGlnbm1lbnQgdmVydGljYWxUZXh0QWxpZ25tZW50OyAgIC8vU2V0cyB0aGUgdmVydGljYWwgYWxpZ25tZW50IGZvciB0aGUgdGV4dC4NCisgICAgUkdCVmFsdWUgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjsgICAgICAgICAvL1NldHMgdGhlIGNvbG9yIGZvciB0aGUgdGV4dCBiYWNrZ3JvdW5kIHBpeGVscy4NCisgICAgZG91YmxlICAgICAgICAgICAgICAgIGFuZ2xlOyAgICAgICAgICAgICAgICAgICAvL1RoZSBjb3VudGVyY2xvY2t3aXNlIGFuZ2xlLCBpbiBkZWdyZWVzLCBvZiB0aGUgdGV4dCByZWxhdGl2ZSB0byB0aGUgeC1heGlzLg0KK30gT3ZlcmxheVRleHRPcHRpb25zOw0KKw0KK3R5cGVkZWYgc3RydWN0IFBhcnRpY2xlRmlsdGVyQ3JpdGVyaWFfc3RydWN0IHsNCisgICAgTWVhc3VyZW1lbnRWYWx1ZSBwYXJhbWV0ZXI7IC8vVGhlIG1vcnBob2xvZ2ljYWwgbWVhc3VyZW1lbnQgdGhhdCB0aGUgZnVuY3Rpb24gdXNlcyBmb3IgZmlsdGVyaW5nLg0KKyAgICBmbG9hdCAgICAgICAgICAgIGxvd2VyOyAgICAgLy9UaGUgbG93ZXIgYm91bmQgb2YgdGhlIGNyaXRlcmlhIHJhbmdlLg0KKyAgICBmbG9hdCAgICAgICAgICAgIHVwcGVyOyAgICAgLy9UaGUgdXBwZXIgYm91bmQgb2YgdGhlIGNyaXRlcmlhIHJhbmdlLg0KKyAgICBpbnQgICAgICAgICAgICAgIGV4Y2x1ZGU7ICAgLy9TZXQgdGhpcyBlbGVtZW50IHRvIFRSVUUgdG8gaW5kaWNhdGUgdGhhdCBhIG1hdGNoIG9jY3VycyB3aGVuIHRoZSB2YWx1ZSBpcyBvdXRzaWRlIHRoZSBjcml0ZXJpYSByYW5nZS4NCit9IFBhcnRpY2xlRmlsdGVyQ3JpdGVyaWE7DQorDQordHlwZWRlZiBzdHJ1Y3QgUGFydGljbGVSZXBvcnRfc3RydWN0IHsNCisgICAgaW50ICAgYXJlYTsgICAgICAgICAgICAgLy9UaGUgbnVtYmVyIG9mIHBpeGVscyBpbiB0aGUgcGFydGljbGUuDQorICAgIGZsb2F0IGNhbGlicmF0ZWRBcmVhOyAgIC8vVGhlIHNpemUgb2YgdGhlIHBhcnRpY2xlLCBjYWxpYnJhdGVkIHRvIHRoZSBjYWxpYnJhdGlvbiBpbmZvcm1hdGlvbiBvZiB0aGUgaW1hZ2UuDQorICAgIGZsb2F0IHBlcmltZXRlcjsgICAgICAgIC8vVGhlIGxlbmd0aCBvZiB0aGUgcGVyaW1ldGVyLCBjYWxpYnJhdGVkIHRvIHRoZSBjYWxpYnJhdGlvbiBpbmZvcm1hdGlvbiBvZiB0aGUgaW1hZ2UuDQorICAgIGludCAgIG51bUhvbGVzOyAgICAgICAgIC8vVGhlIG51bWJlciBvZiBob2xlcyBpbiB0aGUgcGFydGljbGUuDQorICAgIGludCAgIGFyZWFPZkhvbGVzOyAgICAgIC8vVGhlIHRvdGFsIHN1cmZhY2UgYXJlYSwgaW4gcGl4ZWxzLCBvZiBhbGwgdGhlIGhvbGVzIGluIGEgcGFydGljbGUuDQorICAgIGZsb2F0IHBlcmltZXRlck9mSG9sZXM7IC8vVGhlIGxlbmd0aCBvZiB0aGUgcGVyaW1ldGVyIG9mIGFsbCB0aGUgaG9sZXMgaW4gdGhlIHBhcnRpY2xlIGNhbGlicmF0ZWQgdG8gdGhlIGNhbGlicmF0aW9uIGluZm9ybWF0aW9uIG9mIHRoZSBpbWFnZS4NCisgICAgUmVjdCAgYm91bmRpbmdCb3g7ICAgICAgLy9UaGUgc21hbGxlc3QgcmVjdGFuZ2xlIHRoYXQgZW5jbG9zZXMgdGhlIHBhcnRpY2xlLg0KKyAgICBmbG9hdCBzaWdtYVg7ICAgICAgICAgICAvL1RoZSBzdW0gb2YgdGhlIHBhcnRpY2xlIHBpeGVscyBvbiB0aGUgeC1heGlzLg0KKyAgICBmbG9hdCBzaWdtYVk7ICAgICAgICAgICAvL1RoZSBzdW0gb2YgdGhlIHBhcnRpY2xlIHBpeGVscyBvbiB0aGUgeS1heGlzLg0KKyAgICBmbG9hdCBzaWdtYVhYOyAgICAgICAgICAvL1RoZSBzdW0gb2YgdGhlIHBhcnRpY2xlIHBpeGVscyBvbiB0aGUgeC1heGlzLCBzcXVhcmVkLg0KKyAgICBmbG9hdCBzaWdtYVlZOyAgICAgICAgICAvL1RoZSBzdW0gb2YgdGhlIHBhcnRpY2xlIHBpeGVscyBvbiB0aGUgeS1heGlzLCBzcXVhcmVkLg0KKyAgICBmbG9hdCBzaWdtYVhZOyAgICAgICAgICAvL1RoZSBzdW0gb2YgdGhlIHBhcnRpY2xlIHBpeGVscyBvbiB0aGUgeC1heGlzIGFuZCB5LWF4aXMuDQorICAgIGludCAgIGxvbmdlc3RMZW5ndGg7ICAgIC8vVGhlIGxlbmd0aCBvZiB0aGUgbG9uZ2VzdCBob3Jpem9udGFsIGxpbmUgc2VnbWVudC4NCisgICAgUG9pbnQgbG9uZ2VzdFBvaW50OyAgICAgLy9UaGUgbG9jYXRpb24gb2YgdGhlIGxlZnRtb3N0IHBpeGVsIG9mIHRoZSBsb25nZXN0IHNlZ21lbnQgaW4gdGhlIHBhcnRpY2xlLg0KKyAgICBpbnQgICBwcm9qZWN0aW9uWDsgICAgICAvL1RoZSBsZW5ndGggb2YgdGhlIHBhcnRpY2xlIHdoZW4gcHJvamVjdGVkIG9udG8gdGhlIHgtYXhpcy4NCisgICAgaW50ICAgcHJvamVjdGlvblk7ICAgICAgLy9UaGUgbGVuZ3RoIG9mIHRoZSBwYXJ0aWNsZSB3aGVuIHByb2plY3RlZCBvbnRvIHRoZSB5LWF4aXMuDQorICAgIGludCAgIGNvbm5lY3Q4OyAgICAgICAgIC8vVGhpcyBlbGVtZW50IGlzIFRSVUUgaWYgdGhlIGZ1bmN0aW9uIHVzZWQgY29ubmVjdGl2aXR5LTggdG8gZGV0ZXJtaW5lIGlmIHBhcnRpY2xlcyBhcmUgdG91Y2hpbmcuDQorfSBQYXJ0aWNsZVJlcG9ydDsNCisNCit0eXBlZGVmIHN0cnVjdCBQYXR0ZXJuTWF0Y2hfc3RydWN0IHsNCisgICAgUG9pbnRGbG9hdCBwb3NpdGlvbjsgIC8vVGhlIGxvY2F0aW9uIG9mIHRoZSBjZW50ZXIgb2YgdGhlIG1hdGNoLg0KKyAgICBmbG9hdCAgICAgIHJvdGF0aW9uOyAgLy9UaGUgcm90YXRpb24gb2YgdGhlIG1hdGNoIHJlbGF0aXZlIHRvIHRoZSB0ZW1wbGF0ZSBpbWFnZSwgaW4gZGVncmVlcy4NCisgICAgZmxvYXQgICAgICBzY2FsZTsgICAgIC8vVGhlIHNpemUgb2YgdGhlIG1hdGNoIHJlbGF0aXZlIHRvIHRoZSBzaXplIG9mIHRoZSB0ZW1wbGF0ZSBpbWFnZSwgZXhwcmVzc2VkIGFzIGEgcGVyY2VudGFnZS4NCisgICAgZmxvYXQgICAgICBzY29yZTsgICAgIC8vVGhlIGFjY3VyYWN5IG9mIHRoZSBtYXRjaC4NCisgICAgUG9pbnRGbG9hdCBjb3JuZXJbNF07IC8vQW4gYXJyYXkgb2YgZm91ciBwb2ludHMgZGVzY3JpYmluZyB0aGUgcmVjdGFuZ2xlIHN1cnJvdW5kaW5nIHRoZSB0ZW1wbGF0ZSBpbWFnZS4NCit9IFBhdHRlcm5NYXRjaDsNCisNCit0eXBlZGVmIHN0cnVjdCBRdWFudGlmeURhdGFfc3RydWN0IHsNCisgICAgZmxvYXQgbWVhbjsgICAgICAgICAgIC8vVGhlIG1lYW4gdmFsdWUgb2YgdGhlIHBpeGVsIHZhbHVlcy4NCisgICAgZmxvYXQgc3RkRGV2OyAgICAgICAgIC8vVGhlIHN0YW5kYXJkIGRldmlhdGlvbiBvZiB0aGUgcGl4ZWwgdmFsdWVzLg0KKyAgICBmbG9hdCBtaW47ICAgICAgICAgICAgLy9UaGUgc21hbGxlc3QgcGl4ZWwgdmFsdWUuDQorICAgIGZsb2F0IG1heDsgICAgICAgICAgICAvL1RoZSBsYXJnZXN0IHBpeGVsIHZhbHVlLg0KKyAgICBmbG9hdCBjYWxpYnJhdGVkQXJlYTsgLy9UaGUgYXJlYSwgY2FsaWJyYXRlZCB0byB0aGUgY2FsaWJyYXRpb24gaW5mb3JtYXRpb24gb2YgdGhlIGltYWdlLg0KKyAgICBpbnQgICBwaXhlbEFyZWE7ICAgICAgLy9UaGUgYXJlYSwgaW4gbnVtYmVyIG9mIHBpeGVscy4NCisgICAgZmxvYXQgcmVsYXRpdmVTaXplOyAgIC8vVGhlIHByb3BvcnRpb24sIGV4cHJlc3NlZCBhcyBhIHBlcmNlbnRhZ2UsIG9mIHRoZSBhc3NvY2lhdGVkIHJlZ2lvbiByZWxhdGl2ZSB0byB0aGUgd2hvbGUgaW1hZ2UuDQorfSBRdWFudGlmeURhdGE7DQorDQordHlwZWRlZiBzdHJ1Y3QgUXVhbnRpZnlSZXBvcnRfc3RydWN0IHsNCisgICAgUXVhbnRpZnlEYXRhICBnbG9iYWw7ICAgICAgLy9TdGF0aXN0aWNhbCBkYXRhIG9mIHRoZSB3aG9sZSBpbWFnZS4NCisgICAgUXVhbnRpZnlEYXRhKiByZWdpb25zOyAgICAgLy9BbiBhcnJheSBvZiBRdWFudGlmeURhdGEgc3RydWN0dXJlcyBjb250YWluaW5nIHN0YXRpc3RpY2FsIGRhdGEgb2YgZWFjaCByZWdpb24gb2YgdGhlIGltYWdlLg0KKyAgICBpbnQgICAgICAgICAgIHJlZ2lvbkNvdW50OyAvL1RoZSBudW1iZXIgb2YgcmVnaW9ucy4NCit9IFF1YW50aWZ5UmVwb3J0Ow0KKw0KK3R5cGVkZWYgc3RydWN0IFJha2VPcHRpb25zX3N0cnVjdCB7DQorICAgIGludCAgICAgICAgICAgICAgICAgdGhyZXNob2xkOyAgICAgICAgIC8vU3BlY2lmaWVzIHRoZSB0aHJlc2hvbGQgdmFsdWUgZm9yIHRoZSBjb250cmFzdCBvZiB0aGUgZWRnZS4NCisgICAgaW50ICAgICAgICAgICAgICAgICB3aWR0aDsgICAgICAgICAgICAgLy9UaGUgbnVtYmVyIG9mIHBpeGVscyB0aGF0IHRoZSBmdW5jdGlvbiBhdmVyYWdlcyB0byBmaW5kIHRoZSBjb250cmFzdCBhdCBlaXRoZXIgc2lkZSBvZiB0aGUgZWRnZS4NCisgICAgaW50ICAgICAgICAgICAgICAgICBzdGVlcG5lc3M7ICAgICAgICAgLy9UaGUgc3BhbiwgaW4gcGl4ZWxzLCBvZiB0aGUgc2xvcGUgb2YgdGhlIGVkZ2UgcHJvamVjdGVkIGFsb25nIHRoZSBwYXRoIHNwZWNpZmllZCBieSB0aGUgaW5wdXQgcG9pbnRzLg0KKyAgICBpbnQgICAgICAgICAgICAgICAgIHN1YnNhbXBsaW5nUmF0aW87ICAvL1NwZWNpZmllcyB0aGUgbnVtYmVyIG9mIHBpeGVscyB0aGF0IHNlcGFyYXRlIHR3byBjb25zZWN1dGl2ZSBzZWFyY2ggbGluZXMuDQorICAgIEludGVycG9sYXRpb25NZXRob2Qgc3VicGl4ZWxUeXBlOyAgICAgIC8vVGhlIG1ldGhvZCBmb3IgaW50ZXJwb2xhdGluZy4NCisgICAgaW50ICAgICAgICAgICAgICAgICBzdWJwaXhlbERpdmlzaW9uczsgLy9UaGUgbnVtYmVyIG9mIHNhbXBsZXMgdGhlIGZ1bmN0aW9uIG9idGFpbnMgZnJvbSBhIHBpeGVsLg0KK30gUmFrZU9wdGlvbnM7DQorDQordHlwZWRlZiBzdHJ1Y3QgUmFrZVJlcG9ydF9zdHJ1Y3Qgew0KKyAgICBMaW5lRmxvYXQqICAgICAgICAgIHJha2VMaW5lczsgICAgICAgICAvL1RoZSBjb29yZGluYXRlIGxvY2F0aW9uIG9mIGVhY2ggb2YgdGhlIHJha2UgbGluZXMgdXNlZCBieSB0aGUgZnVuY3Rpb24uDQorICAgIGludCAgICAgICAgICAgICAgICAgbnVtUmFrZUxpbmVzOyAgICAgIC8vVGhlIG51bWJlciBvZiBsaW5lcyBpbiB0aGUgcmFrZUxpbmVzIGFycmF5Lg0KKyAgICBQb2ludEZsb2F0KiAgICAgICAgIGZpcnN0RWRnZXM7ICAgICAgICAvL1RoZSBjb29yZGluYXRlIGxvY2F0aW9uIG9mIGFsbCBlZGdlcyBkZXRlY3RlZCBhcyBmaXJzdCBlZGdlcy4NCisgICAgdW5zaWduZWQgaW50ICAgICAgICBudW1GaXJzdEVkZ2VzOyAgICAgLy9UaGUgbnVtYmVyIG9mIHBvaW50cyBpbiB0aGUgZmlyc3RFZGdlcyBhcnJheS4NCisgICAgUG9pbnRGbG9hdCogICAgICAgICBsYXN0RWRnZXM7ICAgICAgICAgLy9UaGUgY29vcmRpbmF0ZSBsb2NhdGlvbiBvZiBhbGwgZWRnZXMgZGV0ZWN0ZWQgYXMgbGFzdCBlZGdlcy4NCisgICAgdW5zaWduZWQgaW50ICAgICAgICBudW1MYXN0RWRnZXM7ICAgICAgLy9UaGUgbnVtYmVyIG9mIHBvaW50cyBpbiB0aGUgbGFzdEVkZ2VzIGFycmF5Lg0KKyAgICBFZGdlTG9jYXRpb25SZXBvcnQqIGFsbEVkZ2VzOyAgICAgICAgICAvL0FuIGFycmF5IG9mIHJlcG9ydHMgZGVzY3JpYmluZyB0aGUgbG9jYXRpb24gb2YgdGhlIGVkZ2VzIGxvY2F0ZWQgYnkgZWFjaCByYWtlIGxpbmUuDQorICAgIGludCogICAgICAgICAgICAgICAgbGluZXNXaXRoRWRnZXM7ICAgIC8vQW4gYXJyYXkgb2YgaW5kaWNlcyBpbnRvIHRoZSByYWtlTGluZXMgYXJyYXkgaW5kaWNhdGluZyB0aGUgcmFrZSBsaW5lcyBvbiB3aGljaCB0aGUgZnVuY3Rpb24gZGV0ZWN0ZWQgYXQgbGVhc3Qgb25lIGVkZ2UuDQorICAgIGludCAgICAgICAgICAgICAgICAgbnVtTGluZXNXaXRoRWRnZXM7IC8vVGhlIG51bWJlciBvZiByYWtlIGxpbmVzIGFsb25nIHdoaWNoIHRoZSBmdW5jdGlvbiBkZXRlY3RlZCBlZGdlcy4NCit9IFJha2VSZXBvcnQ7DQorDQordHlwZWRlZiBzdHJ1Y3QgVHJhbnNmb3JtUmVwb3J0X3N0cnVjdCB7DQorICAgIFBvaW50RmxvYXQqIHBvaW50czsgICAgICAvL0FuIGFycmF5IG9mIHRyYW5zZm9ybWVkIGNvb3JkaW5hdGVzLg0KKyAgICBpbnQqICAgICAgICB2YWxpZFBvaW50czsgLy9BbiBhcnJheSBvZiB2YWx1ZXMgdGhhdCBkZXNjcmliZSB0aGUgdmFsaWRpdHkgb2YgZWFjaCBvZiB0aGUgY29vcmRpbmF0ZXMgYWNjb3JkaW5nIHRvIHRoZSByZWdpb24gb2YgaW50ZXJlc3QgeW91IGNhbGlicmF0ZWQgdXNpbmcgZWl0aGVyIGltYXFMZWFybkNhbGlicmF0aW9uR3JpZCgpIG9yIGltYXFMZWFybkNhbGlicmF0aW9uUG9pbnRzKCkuDQorICAgIGludCAgICAgICAgIG51bVBvaW50czsgICAvL1RoZSBsZW5ndGggb2YgYm90aCB0aGUgcG9pbnRzIGFycmF5IGFuZCB0aGUgdmFsaWRQb2ludHMgYXJyYXkuDQorfSBUcmFuc2Zvcm1SZXBvcnQ7DQorDQordHlwZWRlZiBzdHJ1Y3QgU2hhcGVSZXBvcnRfc3RydWN0IHsNCisgICAgUmVjdCAgIGNvb3JkaW5hdGVzOyAvL1RoZSBib3VuZGluZyByZWN0YW5nbGUgb2YgdGhlIG9iamVjdC4NCisgICAgUG9pbnQgIGNlbnRyb2lkOyAgICAvL1RoZSBjb29yZGluYXRlIGxvY2F0aW9uIG9mIHRoZSBjZW50cm9pZCBvZiB0aGUgb2JqZWN0Lg0KKyAgICBpbnQgICAgc2l6ZTsgICAgICAgIC8vVGhlIHNpemUsIGluIHBpeGVscywgb2YgdGhlIG9iamVjdC4NCisgICAgZG91YmxlIHNjb3JlOyAgICAgICAvL0EgdmFsdWUgcmFuZ2luZyBiZXR3ZWVuIDEgYW5kIDEsMDAwIHRoYXQgc3BlY2lmaWVzIGhvdyBzaW1pbGFyIHRoZSBvYmplY3QgaW4gdGhlIGltYWdlIGlzIHRvIHRoZSB0ZW1wbGF0ZS4NCit9IFNoYXBlUmVwb3J0Ow0KKw0KK3R5cGVkZWYgc3RydWN0IE1ldGVyQXJjX3N0cnVjdCB7DQorICAgIFBvaW50RmxvYXQgIG5lZWRsZUJhc2U7ICAgICAgICAgIC8vVGhlIGNvb3JkaW5hdGUgbG9jYXRpb24gb2YgdGhlIGJhc2Ugb2YgdGhlIG1ldGVyIG5lZWRsZS4NCisgICAgUG9pbnRGbG9hdCogYXJjQ29vcmRQb2ludHM7ICAgICAgLy9BbiBhcnJheSBvZiBwb2ludHMgZGVzY3JpYmluZyB0aGUgY29vcmRpbmF0ZSBsb2NhdGlvbiBvZiB0aGUgbWV0ZXIgYXJjLg0KKyAgICBpbnQgICAgICAgICBudW1PZkFyY0Nvb3JkUG9pbnRzOyAvL1RoZSBudW1iZXIgb2YgcG9pbnRzIGluIHRoZSBhcmNDb29yZFBvaW50cyBhcnJheS4NCisgICAgaW50ICAgICAgICAgbmVlZGxlQ29sb3I7ICAgICAgICAgLy9UaGlzIGVsZW1lbnQgaXMgVFJVRSB3aGVuIHRoZSBtZXRlciBoYXMgYSBsaWdodC1jb2xvcmVkIG5lZWRsZSBvbiBhIGRhcmsgYmFja2dyb3VuZC4NCit9IE1ldGVyQXJjOw0KKw0KK3R5cGVkZWYgc3RydWN0IFRocmVzaG9sZERhdGFfc3RydWN0IHsNCisgICAgZmxvYXQgcmFuZ2VNaW47ICAgIC8vVGhlIGxvd2VyIGJvdW5kYXJ5IG9mIHRoZSByYW5nZSB0byBrZWVwLg0KKyAgICBmbG9hdCByYW5nZU1heDsgICAgLy9UaGUgdXBwZXIgYm91bmRhcnkgb2YgdGhlIHJhbmdlIHRvIGtlZXAuDQorICAgIGZsb2F0IG5ld1ZhbHVlOyAgICAvL0lmIHVzZU5ld1ZhbHVlIGlzIFRSVUUsIG5ld1ZhbHVlIGlzIHRoZSByZXBsYWNlbWVudCB2YWx1ZSBmb3IgcGl4ZWxzIHdpdGhpbiB0aGUgcmFuZ2UuDQorICAgIGludCAgIHVzZU5ld1ZhbHVlOyAvL0lmIFRSVUUsIHRoZSBmdW5jdGlvbiBzZXRzIHBpeGVsIHZhbHVlcyB3aXRoaW4gW3JhbmdlTWluLCByYW5nZU1heF0gdG8gdGhlIHZhbHVlIHNwZWNpZmllZCBpbiBuZXdWYWx1ZS4NCit9IFRocmVzaG9sZERhdGE7DQorDQordHlwZWRlZiBzdHJ1Y3QgU3RydWN0dXJpbmdFbGVtZW50X3N0cnVjdCB7DQorICAgIGludCAgbWF0cml4Q29sczsgLy9OdW1iZXIgb2YgY29sdW1ucyBpbiB0aGUgbWF0cml4Lg0KKyAgICBpbnQgIG1hdHJpeFJvd3M7IC8vTnVtYmVyIG9mIHJvd3MgaW4gdGhlIG1hdHJpeC4NCisgICAgaW50ICBoZXhhOyAgICAgICAvL1NldCB0aGlzIGVsZW1lbnQgdG8gVFJVRSBpZiB5b3Ugc3BlY2lmeSBhIGhleGFnb25hbCBzdHJ1Y3R1cmluZyBlbGVtZW50IGluIGtlcm5lbC4NCisgICAgaW50KiBrZXJuZWw7ICAgICAvL1RoZSB2YWx1ZXMgb2YgdGhlIHN0cnVjdHVyaW5nIGVsZW1lbnQuDQorfSBTdHJ1Y3R1cmluZ0VsZW1lbnQ7DQorDQordHlwZWRlZiBzdHJ1Y3QgU3Bva2VSZXBvcnRfc3RydWN0IHsNCisgICAgTGluZUZsb2F0KiAgICAgICAgICBzcG9rZUxpbmVzOyAgICAgICAgLy9UaGUgY29vcmRpbmF0ZSBsb2NhdGlvbiBvZiBlYWNoIG9mIHRoZSBzcG9rZSBsaW5lcyB1c2VkIGJ5IHRoZSBmdW5jdGlvbi4NCisgICAgaW50ICAgICAgICAgICAgICAgICBudW1TcG9rZUxpbmVzOyAgICAgLy9UaGUgbnVtYmVyIG9mIGxpbmVzIGluIHRoZSBzcG9rZUxpbmVzIGFycmF5Lg0KKyAgICBQb2ludEZsb2F0KiAgICAgICAgIGZpcnN0RWRnZXM7ICAgICAgICAvL1RoZSBjb29yZGluYXRlIGxvY2F0aW9uIG9mIGFsbCBlZGdlcyBkZXRlY3RlZCBhcyBmaXJzdCBlZGdlcy4NCisgICAgaW50ICAgICAgICAgICAgICAgICBudW1GaXJzdEVkZ2VzOyAgICAgLy9UaGUgbnVtYmVyIG9mIHBvaW50cyBpbiB0aGUgZmlyc3RFZGdlcyBhcnJheS4NCisgICAgUG9pbnRGbG9hdCogICAgICAgICBsYXN0RWRnZXM7ICAgICAgICAgLy9UaGUgY29vcmRpbmF0ZSBsb2NhdGlvbiBvZiBhbGwgZWRnZXMgZGV0ZWN0ZWQgYXMgbGFzdCBlZGdlcy4NCisgICAgaW50ICAgICAgICAgICAgICAgICBudW1MYXN0RWRnZXM7ICAgICAgLy9UaGUgbnVtYmVyIG9mIHBvaW50cyBpbiB0aGUgbGFzdEVkZ2VzIGFycmF5Lg0KKyAgICBFZGdlTG9jYXRpb25SZXBvcnQqIGFsbEVkZ2VzOyAgICAgICAgICAvL0FuIGFycmF5IG9mIHJlcG9ydHMgZGVzY3JpYmluZyB0aGUgbG9jYXRpb24gb2YgdGhlIGVkZ2VzIGxvY2F0ZWQgYnkgZWFjaCBzcG9rZSBsaW5lLg0KKyAgICBpbnQqICAgICAgICAgICAgICAgIGxpbmVzV2l0aEVkZ2VzOyAgICAvL0FuIGFycmF5IG9mIGluZGljZXMgaW50byB0aGUgc3Bva2VMaW5lcyBhcnJheSBpbmRpY2F0aW5nIHRoZSByYWtlIGxpbmVzIG9uIHdoaWNoIHRoZSBmdW5jdGlvbiBkZXRlY3RlZCBhdCBsZWFzdCBvbmUgZWRnZS4NCisgICAgaW50ICAgICAgICAgICAgICAgICBudW1MaW5lc1dpdGhFZGdlczsgLy9UaGUgbnVtYmVyIG9mIHNwb2tlIGxpbmVzIGFsb25nIHdoaWNoIHRoZSBmdW5jdGlvbiBkZXRlY3RzIGVkZ2VzLg0KK30gU3Bva2VSZXBvcnQ7DQorDQordHlwZWRlZiBzdHJ1Y3QgU2ltcGxlRWRnZU9wdGlvbnNfc3RydWN0IHsNCisgICAgTGV2ZWxUeXBlICAgdHlwZTsgICAgICAgLy9EZXRlcm1pbmVzIGhvdyB0aGUgZnVuY3Rpb24gZXZhbHVhdGVzIHRoZSB0aHJlc2hvbGQgYW5kIGh5c3RlcmVzaXMgdmFsdWVzLg0KKyAgICBpbnQgICAgICAgICB0aHJlc2hvbGQ7ICAvL1RoZSBwaXhlbCB2YWx1ZSBhdCB3aGljaCBhbiBlZGdlIG9jY3Vycy4NCisgICAgaW50ICAgICAgICAgaHlzdGVyZXNpczsgLy9BIHZhbHVlIHRoYXQgaGVscHMgZGV0ZXJtaW5lIGVkZ2VzIGluIG5vaXN5IGltYWdlcy4NCisgICAgRWRnZVByb2Nlc3MgcHJvY2VzczsgICAgLy9EZXRlcm1pbmVzIHdoaWNoIGVkZ2VzIHRoZSBmdW5jdGlvbiBsb29rcyBmb3IuDQorICAgIGludCAgICAgICAgIHN1YnBpeGVsOyAgIC8vU2V0IHRoaXMgZWxlbWVudCB0byBUUlVFIHRvIGZpbmQgZWRnZXMgd2l0aCBzdWJwaXhlbCBhY2N1cmFjeSBieSBpbnRlcnBvbGF0aW5nIGJldHdlZW4gcG9pbnRzIHRvIGZpbmQgdGhlIGNyb3NzaW5nIG9mIHRoZSBnaXZlbiB0aHJlc2hvbGQuDQorfSBTaW1wbGVFZGdlT3B0aW9uczsNCisNCit0eXBlZGVmIHN0cnVjdCBTZWxlY3RQYXJ0aWNsZUNyaXRlcmlhX3N0cnVjdCB7DQorICAgIE1lYXN1cmVtZW50VmFsdWUgcGFyYW1ldGVyOyAvL1RoZSBtb3JwaG9sb2dpY2FsIG1lYXN1cmVtZW50IHRoYXQgdGhlIGZ1bmN0aW9uIHVzZXMgZm9yIGZpbHRlcmluZy4NCisgICAgZmxvYXQgICAgICAgICAgICBsb3dlcjsgICAgIC8vVGhlIGxvd2VyIGJvdW5kYXJ5IG9mIHRoZSBjcml0ZXJpYSByYW5nZS4NCisgICAgZmxvYXQgICAgICAgICAgICB1cHBlcjsgICAgIC8vVGhlIHVwcGVyIGJvdW5kYXJ5IG9mIHRoZSBjcml0ZXJpYSByYW5nZS4NCit9IFNlbGVjdFBhcnRpY2xlQ3JpdGVyaWE7DQorDQordHlwZWRlZiBzdHJ1Y3QgU2VnbWVudEluZm9fc3RydWN0IHsNCisgICAgaW50ICAgICAgICAgICBudW1iZXJPZlBvaW50czsgLy9UaGUgbnVtYmVyIG9mIHBvaW50cyBpbiB0aGUgc2VnbWVudC4NCisgICAgaW50ICAgICAgICAgICBpc09wZW47ICAgICAgICAgLy9JZiBUUlVFLCB0aGUgY29udG91ciBpcyBvcGVuLg0KKyAgICBkb3VibGUgICAgICAgIHdlaWdodDsgICAgICAgICAvL1RoZSBzaWduaWZpY2FuY2Ugb2YgdGhlIGVkZ2UgaW4gdGVybXMgb2YgdGhlIGdyYXkgdmFsdWVzIHRoYXQgY29uc3RpdHV0ZSB0aGUgZWRnZS4NCisgICAgQ29udG91clBvaW50KiBwb2ludHM7ICAgICAgICAgLy9UaGUgcG9pbnRzIG9mIHRoZSBzZWdtZW50Lg0KK30gU2VnbWVudEluZm87DQorDQordHlwZWRlZiBzdHJ1Y3QgUm90YXRpb25BbmdsZVJhbmdlX3N0cnVjdCB7DQorICAgIGZsb2F0IGxvd2VyOyAvL1RoZSBsb3dlc3QgYW1vdW50IG9mIHJvdGF0aW9uLCBpbiBkZWdyZWVzLCBhIHZhbGlkIHBhdHRlcm4gY2FuIGhhdmUuDQorICAgIGZsb2F0IHVwcGVyOyAvL1RoZSBoaWdoZXN0IGFtb3VudCBvZiByb3RhdGlvbiwgaW4gZGVncmVlcywgYSB2YWxpZCBwYXR0ZXJuIGNhbiBoYXZlLg0KK30gUm90YXRpb25BbmdsZVJhbmdlOw0KKw0KK3R5cGVkZWYgc3RydWN0IFJvdGF0ZWRSZWN0X3N0cnVjdCB7DQorICAgIGludCAgICB0b3A7ICAgIC8vTG9jYXRpb24gb2YgdGhlIHRvcCBlZGdlIG9mIHRoZSByZWN0YW5nbGUgYmVmb3JlIHJvdGF0aW9uLg0KKyAgICBpbnQgICAgbGVmdDsgICAvL0xvY2F0aW9uIG9mIHRoZSBsZWZ0IGVkZ2Ugb2YgdGhlIHJlY3RhbmdsZSBiZWZvcmUgcm90YXRpb24uDQorICAgIGludCAgICBoZWlnaHQ7IC8vSGVpZ2h0IG9mIHRoZSByZWN0YW5nbGUuDQorICAgIGludCAgICB3aWR0aDsgIC8vV2lkdGggb2YgdGhlIHJlY3RhbmdsZS4NCisgICAgZG91YmxlIGFuZ2xlOyAgLy9UaGUgcm90YXRpb24sIGluIGRlZ3JlZXMsIG9mIHRoZSByZWN0YW5nbGUuDQorfSBSb3RhdGVkUmVjdDsNCisNCit0eXBlZGVmIHN0cnVjdCBST0lQcm9maWxlX3N0cnVjdCB7DQorICAgIExpbmVQcm9maWxlIHJlcG9ydDsgLy9RdWFudGlmeWluZyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcG9pbnRzIGFsb25nIHRoZSBlZGdlIG9mIGVhY2ggY29udG91ciBpbiB0aGUgUk9JLg0KKyAgICBQb2ludCogICAgICBwaXhlbHM7IC8vQW4gYXJyYXkgb2YgdGhlIHBvaW50cyBhbG9uZyB0aGUgZWRnZSBvZiBlYWNoIGNvbnRvdXIgaW4gdGhlIFJPSS4NCit9IFJPSVByb2ZpbGU7DQorDQordHlwZWRlZiBzdHJ1Y3QgVG9vbFdpbmRvd09wdGlvbnNfc3RydWN0IHsNCisgICAgaW50IHNob3dTZWxlY3Rpb25Ub29sOyAgICAgICAgLy9JZiBUUlVFLCB0aGUgc2VsZWN0aW9uIHRvb2wgYmVjb21lcyB2aXNpYmxlLg0KKyAgICBpbnQgc2hvd1pvb21Ub29sOyAgICAgICAgICAgICAvL0lmIFRSVUUsIHRoZSB6b29tIHRvb2wgYmVjb21lcyB2aXNpYmxlLg0KKyAgICBpbnQgc2hvd1BvaW50VG9vbDsgICAgICAgICAgICAvL0lmIFRSVUUsIHRoZSBwb2ludCB0b29sIGJlY29tZXMgdmlzaWJsZS4NCisgICAgaW50IHNob3dMaW5lVG9vbDsgICAgICAgICAgICAgLy9JZiBUUlVFLCB0aGUgbGluZSB0b29sIGJlY29tZXMgdmlzaWJsZS4NCisgICAgaW50IHNob3dSZWN0YW5nbGVUb29sOyAgICAgICAgLy9JZiBUUlVFLCB0aGUgcmVjdGFuZ2xlIHRvb2wgYmVjb21lcyB2aXNpYmxlLg0KKyAgICBpbnQgc2hvd092YWxUb29sOyAgICAgICAgICAgICAvL0lmIFRSVUUsIHRoZSBvdmFsIHRvb2wgYmVjb21lcyB2aXNpYmxlLg0KKyAgICBpbnQgc2hvd1BvbHlnb25Ub29sOyAgICAgICAgICAvL0lmIFRSVUUsIHRoZSBwb2x5Z29uIHRvb2wgYmVjb21lcyB2aXNpYmxlLg0KKyAgICBpbnQgc2hvd0Nsb3NlZEZyZWVoYW5kVG9vbDsgICAvL0lmIFRSVUUsIHRoZSBjbG9zZWQgZnJlZWhhbmQgdG9vbCBiZWNvbWVzIHZpc2libGUuDQorICAgIGludCBzaG93UG9seUxpbmVUb29sOyAgICAgICAgIC8vSWYgVFJVRSwgdGhlIHBvbHlsaW5lIHRvb2wgYmVjb21lcyB2aXNpYmxlLg0KKyAgICBpbnQgc2hvd0ZyZWVoYW5kVG9vbDsgICAgICAgICAvL0lmIFRSVUUsIHRoZSBmcmVlaGFuZCB0b29sIGJlY29tZXMgdmlzaWJsZS4NCisgICAgaW50IHNob3dBbm51bHVzVG9vbDsgICAgICAgICAgLy9JZiBUUlVFLCB0aGUgYW5udWx1cyBiZWNvbWVzIHZpc2libGUuDQorICAgIGludCBzaG93Um90YXRlZFJlY3RhbmdsZVRvb2w7IC8vSWYgVFJVRSwgdGhlIHJvdGF0ZWQgcmVjdGFuZ2xlIHRvb2wgYmVjb21lcyB2aXNpYmxlLg0KKyAgICBpbnQgc2hvd1BhblRvb2w7ICAgICAgICAgICAgICAvL0lmIFRSVUUsIHRoZSBwYW4gdG9vbCBiZWNvbWVzIHZpc2libGUuDQorICAgIGludCBzaG93Wm9vbU91dFRvb2w7ICAgICAgICAgIC8vSWYgVFJVRSwgdGhlIHpvb20gb3V0IHRvb2wgYmVjb21lcyB2aXNpYmxlLg0KKyAgICBpbnQgcmVzZXJ2ZWQyOyAgICAgICAgICAgICAgICAvL1RoaXMgZWxlbWVudCBpcyByZXNlcnZlZCBhbmQgc2hvdWxkIGJlIHNldCB0byBGQUxTRS4NCisgICAgaW50IHJlc2VydmVkMzsgICAgICAgICAgICAgICAgLy9UaGlzIGVsZW1lbnQgaXMgcmVzZXJ2ZWQgYW5kIHNob3VsZCBiZSBzZXQgdG8gRkFMU0UuDQorICAgIGludCByZXNlcnZlZDQ7ICAgICAgICAgICAgICAgIC8vVGhpcyBlbGVtZW50IGlzIHJlc2VydmVkIGFuZCBzaG91bGQgYmUgc2V0IHRvIEZBTFNFLg0KK30gVG9vbFdpbmRvd09wdGlvbnM7DQorDQordHlwZWRlZiBzdHJ1Y3QgU3Bva2VPcHRpb25zX3N0cnVjdCB7DQorICAgIGludCAgICAgICAgICAgICAgICAgdGhyZXNob2xkOyAgICAgICAgIC8vU3BlY2lmaWVzIHRoZSB0aHJlc2hvbGQgdmFsdWUgZm9yIHRoZSBjb250cmFzdCBvZiB0aGUgZWRnZS4NCisgICAgaW50ICAgICAgICAgICAgICAgICB3aWR0aDsgICAgICAgICAgICAgLy9UaGUgbnVtYmVyIG9mIHBpeGVscyB0aGF0IHRoZSBmdW5jdGlvbiBhdmVyYWdlcyB0byBmaW5kIHRoZSBjb250cmFzdCBhdCBlaXRoZXIgc2lkZSBvZiB0aGUgZWRnZS4NCisgICAgaW50ICAgICAgICAgICAgICAgICBzdGVlcG5lc3M7ICAgICAgICAgLy9UaGUgc3BhbiwgaW4gcGl4ZWxzLCBvZiB0aGUgc2xvcGUgb2YgdGhlIGVkZ2UgcHJvamVjdGVkIGFsb25nIHRoZSBwYXRoIHNwZWNpZmllZCBieSB0aGUgaW5wdXQgcG9pbnRzLg0KKyAgICBkb3VibGUgICAgICAgICAgICAgIHN1YnNhbXBsaW5nUmF0aW87ICAvL1RoZSBhbmdsZSwgaW4gZGVncmVlcywgYmV0d2VlbiBlYWNoIHJhZGlhbCBzZWFyY2ggbGluZSBpbiB0aGUgc3Bva2UuDQorICAgIEludGVycG9sYXRpb25NZXRob2Qgc3VicGl4ZWxUeXBlOyAgICAgIC8vVGhlIG1ldGhvZCBmb3IgaW50ZXJwb2xhdGluZy4NCisgICAgaW50ICAgICAgICAgICAgICAgICBzdWJwaXhlbERpdmlzaW9uczsgLy9UaGUgbnVtYmVyIG9mIHNhbXBsZXMgdGhlIGZ1bmN0aW9uIG9idGFpbnMgZnJvbSBhIHBpeGVsLg0KK30gU3Bva2VPcHRpb25zOw0KKw0KKyNpZiAhZGVmaW5lZCBfX0dOVUNfXyAmJiAhZGVmaW5lZCBfTV9YNjQNCisjcHJhZ21hIHBhY2socG9wKQ0KKyNlbmRpZg0KKw0KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKy8vIENhbGxiYWNrIEZ1bmN0aW9uIFR5cGUNCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisjaWZuZGVmIF9fR05VQ19fDQordHlwZWRlZiB2b2lkIChJTUFRX0NBTExCQUNLKiBFdmVudENhbGxiYWNrKShXaW5kb3dFdmVudFR5cGUgZXZlbnQsIGludCB3aW5kb3dOdW1iZXIsIFRvb2wgdG9vbCwgUmVjdCByZWN0KTsNCisjZW5kaWYNCisNCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisvLyAgR2xvYmFscw0KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKyNpZm5kZWYgX19HTlVDX18NCisjcHJhZ21hIGNvbnN0X3NlZygiSU1BUVZpc2lvbkNvbG9yQ29uc3RhbnRzIikNCisjZW5kaWYNCitzdGF0aWMgY29uc3QgUkdCVmFsdWUgSU1BUV9SR0JfVFJBTlNQQVJFTlQgPSB7ICAgMCwgICAwLCAgIDAsIDEgfTsNCitzdGF0aWMgY29uc3QgUkdCVmFsdWUgSU1BUV9SR0JfUkVEICAgICAgICAgPSB7ICAgMCwgICAwLCAyNTUsIDAgfTsNCitzdGF0aWMgY29uc3QgUkdCVmFsdWUgSU1BUV9SR0JfQkxVRSAgICAgICAgPSB7IDI1NSwgICAwLCAgIDAsIDAgfTsNCitzdGF0aWMgY29uc3QgUkdCVmFsdWUgSU1BUV9SR0JfR1JFRU4gICAgICAgPSB7ICAgMCwgMjU1LCAgIDAsIDAgfTsNCitzdGF0aWMgY29uc3QgUkdCVmFsdWUgSU1BUV9SR0JfWUVMTE9XICAgICAgPSB7ICAgMCwgMjU1LCAyNTUsIDAgfTsNCitzdGF0aWMgY29uc3QgUkdCVmFsdWUgSU1BUV9SR0JfV0hJVEUgICAgICAgPSB7IDI1NSwgMjU1LCAyNTUsIDAgfTsNCitzdGF0aWMgY29uc3QgUkdCVmFsdWUgSU1BUV9SR0JfQkxBQ0sgICAgICAgPSB7ICAgMCwgICAwLCAgIDAsIDAgfTsNCisjaWZuZGVmIF9fR05VQ19fDQorI3ByYWdtYSBjb25zdF9zZWcoKQ0KKyNlbmRpZg0KKw0KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKy8vICBCYWNrd2FyZHMgQ29tcGF0aWJpbGl0eQ0KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KK3R5cGVkZWYgQ29sb3JTZW5zaXRpdml0eSAJCUNvbG9yQ29tcGxleGl0eTsNCisjZGVmaW5lIElNQVFfQ09NUExFWElUWV9MT1cgCQlJTUFRX1NFTlNJVElWSVRZX0xPVw0KKyNkZWZpbmUgSU1BUV9DT01QTEVYSVRZX01FRCAJCUlNQVFfU0VOU0lUSVZJVFlfTUVEICAgICANCisjZGVmaW5lIElNQVFfQ09NUExFWElUWV9ISUdIIAkJSU1BUV9TRU5TSVRJVklUWV9ISUdIDQorI2RlZmluZSBFUlJfSU5WQUxJRF9DT0xPUkNPTVBMRVhJVFkgCUVSUl9JTlZBTElEX0NPTE9SU0VOU0lUSVZJVFkNCisNCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisvLyAgTG9naWNhbCBmdW5jdGlvbnMNCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCitJTUFRX0ZVTkMgaW50IElNQVFfU1REQ0FMTCBpbWFxQW5kKEltYWdlKiBkZXN0LCBjb25zdCBJbWFnZSogc291cmNlQSwgY29uc3QgSW1hZ2UqIHNvdXJjZUIpOw0KK0lNQVFfRlVOQyBpbnQgSU1BUV9TVERDQUxMIGltYXFBbmRDb25zdGFudChJbWFnZSogZGVzdCwgY29uc3QgSW1hZ2UqIHNvdXJjZSwgUGl4ZWxWYWx1ZSB2YWx1ZSk7DQorSU1BUV9GVU5DIGludCBJTUFRX1NURENBTEwgaW1hcUNvbXBhcmUoSW1hZ2UqIGRlc3QsIGNvbnN0IEltYWdlKiBzb3VyY2UsIGNvbnN0IEltYWdlKiBjb21wYXJlSW1hZ2UsIENvbXBhcmlzb25GdW5jdGlvbiBjb21wYXJlKTsNCitJTUFRX0ZVTkMgaW50IElNQVFfU1REQ0FMTCBpbWFxQ29tcGFyZUNvbnN0YW50KEltYWdlKiBkZXN0LCBjb25zdCBJbWFnZSogc291cmNlLCBQaXhlbFZhbHVlIHZhbHVlLCBDb21wYXJpc29uRnVuY3Rpb24gY29tcGFyZSk7DQorSU1BUV9GVU5DIGludCBJTUFRX1NURENBTEwgaW1hcUxvZ2ljYWxEaWZmZXJlbmNlKEltYWdlKiBkZXN0LCBjb25zdCBJbWFnZSogc291cmNlQSwgY29uc3QgSW1hZ2UqIHNvdXJjZUIpOw0KK0lNQVFfRlVOQyBpbnQgSU1BUV9TVERDQUxMIGltYXFMb2dpY2FsRGlmZmVyZW5jZUNvbnN0YW50KEltYWdlKiBkZXN0LCBjb25zdCBJbWFnZSogc291cmNlLCBQaXhlbFZhbHVlIHZhbHVlKTsNCitJTUFRX0ZVTkMgaW50IElNQVFfU1REQ0FMTCBpbWFxTmFuZChJbWFnZSogZGVzdCwgY29uc3QgSW1hZ2UqIHNvdXJjZUEsIGNvbnN0IEltYWdlKiBzb3VyY2VCKTsNCitJTUFRX0ZVTkMgaW50IElNQVFfU1REQ0FMTCBpbWFxTmFuZENvbnN0YW50KEltYWdlKiBkZXN0LCBjb25zdCBJbWFnZSogc291cmNlLCBQaXhlbFZhbHVlIHZhbHVlKTsNCitJTUFRX0ZVTkMgaW50IElNQVFfU1REQ0FMTCBpbWFxTm9yKEltYWdlKiBkZXN0LCBjb25zdCBJbWFnZSogc291cmNlQSwgY29uc3QgSW1hZ2UqIHNvdXJjZUIpOw0KK0lNQVFfRlVOQyBpbnQgSU1BUV9TVERDQUxMIGltYXFOb3JDb25zdGFudChJbWFnZSogZGVzdCwgY29uc3QgSW1hZ2UqIHNvdXJjZSwgUGl4ZWxWYWx1ZSB2YWx1ZSk7DQorSU1BUV9GVU5DIGludCBJTUFRX1NURENBTEwgaW1hcU9yKEltYWdlKiBkZXN0LCBjb25zdCBJbWFnZSogc291cmNlQSwgY29uc3QgSW1hZ2UqIHNvdXJjZUIpOw0KK0lNQVFfRlVOQyBpbnQgSU1BUV9TVERDQUxMIGltYXFPckNvbnN0YW50KEltYWdlKiBkZXN0LCBjb25zdCBJbWFnZSogc291cmNlLCBQaXhlbFZhbHVlIHZhbHVlKTsNCitJTUFRX0ZVTkMgaW50IElNQVFfU1REQ0FMTCBpbWFxWG5vcihJbWFnZSogZGVzdCwgY29uc3QgSW1hZ2UqIHNvdXJjZUEsIGNvbnN0IEltYWdlKiBzb3VyY2VCKTsNCitJTUFRX0ZVTkMgaW50IElNQVFfU1REQ0FMTCBpbWFxWG5vckNvbnN0YW50KEltYWdlKiBkZXN0LCBjb25zdCBJbWFnZSogc291cmNlLCBQaXhlbFZhbHVlIHZhbHVlKTsNCitJTUFRX0ZVTkMgaW50IElNQVFfU1REQ0FMTCBpbWFxWG9yKEltYWdlKiBkZXN0LCBjb25zdCBJbWFnZSogc291cmNlQSwgY29uc3QgSW1hZ2UqIHNvdXJjZUIpOw0KK0lNQVFfRlVOQyBpbnQgSU1BUV9TVERDQUxMIGltYXFYb3JDb25zdGFudChJbWFnZSogZGVzdCwgY29uc3QgSW1hZ2UqIHNvdXJjZSwgUGl4ZWxWYWx1ZSB2YWx1ZSk7DQorDQorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorLy8gIFBhcnRpY2xlIEFuYWx5c2lzIGZ1bmN0aW9ucw0KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KK0lNQVFfRlVOQyBpbnQgICAgICAgICAgICAgICAgICAgICBJTUFRX1NURENBTEwgaW1hcUNvdW50UGFydGljbGVzKEltYWdlKiBpbWFnZSwgaW50IGNvbm5lY3Rpdml0eTgsIGludCogbnVtUGFydGljbGVzKTsNCitJTUFRX0ZVTkMgaW50ICAgICAgICAgICAgICAgICAgICAgSU1BUV9TVERDQUxMIGltYXFNZWFzdXJlUGFydGljbGUoSW1hZ2UqIGltYWdlLCBpbnQgcGFydGljbGVOdW1iZXIsIGludCBjYWxpYnJhdGVkLCBNZWFzdXJlbWVudFR5cGUgbWVhc3VyZW1lbnQsIGRvdWJsZSogdmFsdWUpOw0KK0lNQVFfRlVOQyBNZWFzdXJlUGFydGljbGVzUmVwb3J0KiBJTUFRX1NURENBTEwgaW1hcU1lYXN1cmVQYXJ0aWNsZXMoSW1hZ2UqIGltYWdlLCBNZWFzdXJlUGFydGljbGVzQ2FsaWJyYXRpb25Nb2RlIGNhbGlicmF0aW9uTW9kZSwgY29uc3QgTWVhc3VyZW1lbnRUeXBlKiBtZWFzdXJlbWVudHMsIHNpemVfdCBudW1NZWFzdXJlbWVudHMpOw0KK0lNQVFfRlVOQyBpbnQgICAgICAgICAgICAgICAgICAgICBJTUFRX1NURENBTEwgaW1hcVBhcnRpY2xlRmlsdGVyNChJbWFnZSogZGVzdCwgSW1hZ2UqIHNvdXJjZSwgY29uc3QgUGFydGljbGVGaWx0ZXJDcml0ZXJpYTIqIGNyaXRlcmlhLCBpbnQgY3JpdGVyaWFDb3VudCwgY29uc3QgUGFydGljbGVGaWx0ZXJPcHRpb25zMiogb3B0aW9ucywgY29uc3QgUk9JKiByb2ksIGludCogbnVtUGFydGljbGVzKTsNCisNCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisvLyAgTW9ycGhvbG9neSBmdW5jdGlvbnMNCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCitJTUFRX0ZVTkMgaW50ICAgICAgICAgICBJTUFRX1NURENBTEwgaW1hcUNvbnZleEh1bGwoSW1hZ2UqIGRlc3QsIEltYWdlKiBzb3VyY2UsIGludCBjb25uZWN0aXZpdHk4KTsNCitJTUFRX0ZVTkMgaW50ICAgICAgICAgICBJTUFRX1NURENBTEwgaW1hcURhbmllbHNzb25EaXN0YW5jZShJbWFnZSogZGVzdCwgSW1hZ2UqIHNvdXJjZSk7DQorSU1BUV9GVU5DIGludCAgICAgICAgICAgSU1BUV9TVERDQUxMIGltYXFGaWxsSG9sZXMoSW1hZ2UqIGRlc3QsIGNvbnN0IEltYWdlKiBzb3VyY2UsIGludCBjb25uZWN0aXZpdHk4KTsNCitJTUFRX0ZVTkMgQ2lyY2xlUmVwb3J0KiBJTUFRX1NURENBTEwgaW1hcUZpbmRDaXJjbGVzKEltYWdlKiBkZXN0LCBJbWFnZSogc291cmNlLCBmbG9hdCBtaW5SYWRpdXMsIGZsb2F0IG1heFJhZGl1cywgaW50KiBudW1DaXJjbGVzKTsNCitJTUFRX0ZVTkMgaW50ICAgICAgICAgICBJTUFRX1NURENBTEwgaW1hcUxhYmVsMihJbWFnZSogZGVzdCwgSW1hZ2UqIHNvdXJjZSwgaW50IGNvbm5lY3Rpdml0eTgsIGludCogcGFydGljbGVDb3VudCk7DQorSU1BUV9GVU5DIGludCAgICAgICAgICAgSU1BUV9TVERDQUxMIGltYXFNb3JwaG9sb2d5KEltYWdlKiBkZXN0LCBJbWFnZSogc291cmNlLCBNb3JwaG9sb2d5TWV0aG9kIG1ldGhvZCwgY29uc3QgU3RydWN0dXJpbmdFbGVtZW50KiBzdHJ1Y3R1cmluZ0VsZW1lbnQpOw0KK0lNQVFfRlVOQyBpbnQgICAgICAgICAgIElNQVFfU1REQ0FMTCBpbWFxUmVqZWN0Qm9yZGVyKEltYWdlKiBkZXN0LCBJbWFnZSogc291cmNlLCBpbnQgY29ubmVjdGl2aXR5OCk7DQorSU1BUV9GVU5DIGludCAgICAgICAgICAgSU1BUV9TVERDQUxMIGltYXFTZWdtZW50YXRpb24oSW1hZ2UqIGRlc3QsIEltYWdlKiBzb3VyY2UpOw0KK0lNQVFfRlVOQyBpbnQgICAgICAgICAgIElNQVFfU1REQ0FMTCBpbWFxU2VwYXJhdGlvbihJbWFnZSogZGVzdCwgSW1hZ2UqIHNvdXJjZSwgaW50IGVyb3Npb25zLCBjb25zdCBTdHJ1Y3R1cmluZ0VsZW1lbnQqIHN0cnVjdHVyaW5nRWxlbWVudCk7DQorSU1BUV9GVU5DIGludCAgICAgICAgICAgSU1BUV9TVERDQUxMIGltYXFTaW1wbGVEaXN0YW5jZShJbWFnZSogZGVzdCwgSW1hZ2UqIHNvdXJjZSwgY29uc3QgU3RydWN0dXJpbmdFbGVtZW50KiBzdHJ1Y3R1cmluZ0VsZW1lbnQpOw0KK0lNQVFfRlVOQyBpbnQgICAgICAgICAgIElNQVFfU1REQ0FMTCBpbWFxU2l6ZUZpbHRlcihJbWFnZSogZGVzdCwgSW1hZ2UqIHNvdXJjZSwgaW50IGNvbm5lY3Rpdml0eTgsIGludCBlcm9zaW9ucywgU2l6ZVR5cGUga2VlcFNpemUsIGNvbnN0IFN0cnVjdHVyaW5nRWxlbWVudCogc3RydWN0dXJpbmdFbGVtZW50KTsNCitJTUFRX0ZVTkMgaW50ICAgICAgICAgICBJTUFRX1NURENBTEwgaW1hcVNrZWxldG9uKEltYWdlKiBkZXN0LCBJbWFnZSogc291cmNlLCBTa2VsZXRvbk1ldGhvZCBtZXRob2QpOw0KKw0KKw0KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKy8vICBBY3F1aXNpdGlvbiBmdW5jdGlvbnMNCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCitJTUFRX0ZVTkMgSW1hZ2UqIElNQVFfU1REQ0FMTCBpbWFxQ29weUZyb21SaW5nKFNFU1NJT05fSUQgc2Vzc2lvbklELCBJbWFnZSogaW1hZ2UsIGludCBpbWFnZVRvQ29weSwgaW50KiBpbWFnZU51bWJlciwgUmVjdCByZWN0KTsNCitJTUFRX0ZVTkMgSW1hZ2UqIElNQVFfU1REQ0FMTCBpbWFxRWFzeUFjcXVpcmUoY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSk7DQorSU1BUV9GVU5DIEltYWdlKiBJTUFRX1NURENBTEwgaW1hcUV4dHJhY3RGcm9tUmluZyhTRVNTSU9OX0lEIHNlc3Npb25JRCwgaW50IGltYWdlVG9FeHRyYWN0LCBpbnQqIGltYWdlTnVtYmVyKTsNCitJTUFRX0ZVTkMgSW1hZ2UqIElNQVFfU1REQ0FMTCBpbWFxR3JhYihTRVNTSU9OX0lEIHNlc3Npb25JRCwgSW1hZ2UqIGltYWdlLCBpbnQgaW1tZWRpYXRlKTsNCitJTUFRX0ZVTkMgaW50ICAgIElNQVFfU1REQ0FMTCBpbWFxUmVsZWFzZUltYWdlKFNFU1NJT05fSUQgc2Vzc2lvbklEKTsNCitJTUFRX0ZVTkMgaW50ICAgIElNQVFfU1REQ0FMTCBpbWFxU2V0dXBHcmFiKFNFU1NJT05fSUQgc2Vzc2lvbklELCBSZWN0IHJlY3QpOw0KK0lNQVFfRlVOQyBpbnQgICAgSU1BUV9TVERDQUxMIGltYXFTZXR1cFJpbmcoU0VTU0lPTl9JRCBzZXNzaW9uSUQsIEltYWdlKiogaW1hZ2VzLCBpbnQgbnVtSW1hZ2VzLCBpbnQgc2tpcENvdW50LCBSZWN0IHJlY3QpOw0KK0lNQVFfRlVOQyBpbnQgICAgSU1BUV9TVERDQUxMIGltYXFTZXR1cFNlcXVlbmNlKFNFU1NJT05fSUQgc2Vzc2lvbklELCBJbWFnZSoqIGltYWdlcywgaW50IG51bUltYWdlcywgaW50IHNraXBDb3VudCwgUmVjdCByZWN0KTsNCitJTUFRX0ZVTkMgSW1hZ2UqIElNQVFfU1REQ0FMTCBpbWFxU25hcChTRVNTSU9OX0lEIHNlc3Npb25JRCwgSW1hZ2UqIGltYWdlLCBSZWN0IHJlY3QpOw0KK0lNQVFfRlVOQyBpbnQgICAgSU1BUV9TVERDQUxMIGltYXFTdGFydEFjcXVpc2l0aW9uKFNFU1NJT05fSUQgc2Vzc2lvbklEKTsNCitJTUFRX0ZVTkMgaW50ICAgIElNQVFfU1REQ0FMTCBpbWFxU3RvcEFjcXVpc2l0aW9uKFNFU1NJT05fSUQgc2Vzc2lvbklEKTsNCisNCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisvLyAgQXJpdGhtZXRpYyBmdW5jdGlvbnMNCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCitJTUFRX0ZVTkMgaW50IElNQVFfU1REQ0FMTCBpbWFxQWJzb2x1dGVEaWZmZXJlbmNlKEltYWdlKiBkZXN0LCBjb25zdCBJbWFnZSogc291cmNlQSwgY29uc3QgSW1hZ2UqIHNvdXJjZUIpOw0KK0lNQVFfRlVOQyBpbnQgSU1BUV9TVERDQUxMIGltYXFBYnNvbHV0ZURpZmZlcmVuY2VDb25zdGFudChJbWFnZSogZGVzdCwgY29uc3QgSW1hZ2UqIHNvdXJjZSwgUGl4ZWxWYWx1ZSB2YWx1ZSk7DQorSU1BUV9GVU5DIGludCBJTUFRX1NURENBTEwgaW1hcUFkZChJbWFnZSogZGVzdCwgY29uc3QgSW1hZ2UqIHNvdXJjZUEsIGNvbnN0IEltYWdlKiBzb3VyY2VCKTsNCitJTUFRX0ZVTkMgaW50IElNQVFfU1REQ0FMTCBpbWFxQWRkQ29uc3RhbnQoSW1hZ2UqIGRlc3QsIGNvbnN0IEltYWdlKiBzb3VyY2UsIFBpeGVsVmFsdWUgdmFsdWUpOw0KK0lNQVFfRlVOQyBpbnQgSU1BUV9TVERDQUxMIGltYXFBdmVyYWdlKEltYWdlKiBkZXN0LCBjb25zdCBJbWFnZSogc291cmNlQSwgY29uc3QgSW1hZ2UqIHNvdXJjZUIpOw0KK0lNQVFfRlVOQyBpbnQgSU1BUV9TVERDQUxMIGltYXFBdmVyYWdlQ29uc3RhbnQoSW1hZ2UqIGRlc3QsIGNvbnN0IEltYWdlKiBzb3VyY2UsIFBpeGVsVmFsdWUgdmFsdWUpOw0KK0lNQVFfRlVOQyBpbnQgSU1BUV9TVERDQUxMIGltYXFEaXZpZGUyKEltYWdlKiBkZXN0LCBjb25zdCBJbWFnZSogc291cmNlQSwgY29uc3QgSW1hZ2UqIHNvdXJjZUIsIFJvdW5kaW5nTW9kZSByb3VuZGluZ01vZGUpOw0KK0lNQVFfRlVOQyBpbnQgSU1BUV9TVERDQUxMIGltYXFEaXZpZGVDb25zdGFudDIoSW1hZ2UqIGRlc3QsIGNvbnN0IEltYWdlKiBzb3VyY2UsIFBpeGVsVmFsdWUgdmFsdWUsIFJvdW5kaW5nTW9kZSByb3VuZGluZ01vZGUpOw0KK0lNQVFfRlVOQyBpbnQgSU1BUV9TVERDQUxMIGltYXFNYXgoSW1hZ2UqIGRlc3QsIGNvbnN0IEltYWdlKiBzb3VyY2VBLCBjb25zdCBJbWFnZSogc291cmNlQik7DQorSU1BUV9GVU5DIGludCBJTUFRX1NURENBTEwgaW1hcU1heENvbnN0YW50KEltYWdlKiBkZXN0LCBjb25zdCBJbWFnZSogc291cmNlLCBQaXhlbFZhbHVlIHZhbHVlKTsNCitJTUFRX0ZVTkMgaW50IElNQVFfU1REQ0FMTCBpbWFxTWluKEltYWdlKiBkZXN0LCBjb25zdCBJbWFnZSogc291cmNlQSwgY29uc3QgSW1hZ2UqIHNvdXJjZUIpOw0KK0lNQVFfRlVOQyBpbnQgSU1BUV9TVERDQUxMIGltYXFNaW5Db25zdGFudChJbWFnZSogZGVzdCwgY29uc3QgSW1hZ2UqIHNvdXJjZSwgUGl4ZWxWYWx1ZSB2YWx1ZSk7DQorSU1BUV9GVU5DIGludCBJTUFRX1NURENBTEwgaW1hcU1vZHVsbyhJbWFnZSogZGVzdCwgY29uc3QgSW1hZ2UqIHNvdXJjZUEsIGNvbnN0IEltYWdlKiBzb3VyY2VCKTsNCitJTUFRX0ZVTkMgaW50IElNQVFfU1REQ0FMTCBpbWFxTW9kdWxvQ29uc3RhbnQoSW1hZ2UqIGRlc3QsIGNvbnN0IEltYWdlKiBzb3VyY2UsIFBpeGVsVmFsdWUgdmFsdWUpOw0KK0lNQVFfRlVOQyBpbnQgSU1BUV9TVERDQUxMIGltYXFNdWxEaXYoSW1hZ2UqIGRlc3QsIGNvbnN0IEltYWdlKiBzb3VyY2VBLCBjb25zdCBJbWFnZSogc291cmNlQiwgZmxvYXQgdmFsdWUpOw0KK0lNQVFfRlVOQyBpbnQgSU1BUV9TVERDQUxMIGltYXFNdWx0aXBseShJbWFnZSogZGVzdCwgY29uc3QgSW1hZ2UqIHNvdXJjZUEsIGNvbnN0IEltYWdlKiBzb3VyY2VCKTsNCitJTUFRX0ZVTkMgaW50IElNQVFfU1REQ0FMTCBpbWFxTXVsdGlwbHlDb25zdGFudChJbWFnZSogZGVzdCwgY29uc3QgSW1hZ2UqIHNvdXJjZSwgUGl4ZWxWYWx1ZSB2YWx1ZSk7DQorSU1BUV9GVU5DIGludCBJTUFRX1NURENBTEwgaW1hcVN1YnRyYWN0KEltYWdlKiBkZXN0LCBjb25zdCBJbWFnZSogc291cmNlQSwgY29uc3QgSW1hZ2UqIHNvdXJjZUIpOw0KK0lNQVFfRlVOQyBpbnQgSU1BUV9TVERDQUxMIGltYXFTdWJ0cmFjdENvbnN0YW50KEltYWdlKiBkZXN0LCBjb25zdCBJbWFnZSogc291cmNlLCBQaXhlbFZhbHVlIHZhbHVlKTsNCisNCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisvLyAgQ2FsaXBlciBmdW5jdGlvbnMNCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCitJTUFRX0ZVTkMgQ2FsaXBlclJlcG9ydCogICAgICAgICBJTUFRX1NURENBTEwgaW1hcUNhbGlwZXJUb29sKGNvbnN0IEltYWdlKiBpbWFnZSwgY29uc3QgUG9pbnQqIHBvaW50cywgaW50IG51bVBvaW50cywgY29uc3QgRWRnZU9wdGlvbnMqIGVkZ2VPcHRpb25zLCBjb25zdCBDYWxpcGVyT3B0aW9ucyogY2FsaXBlck9wdGlvbnMsIGludCogbnVtRWRnZVBhaXJzKTsNCitJTUFRX0ZVTkMgQ29uY2VudHJpY1Jha2VSZXBvcnQyKiBJTUFRX1NURENBTEwgaW1hcUNvbmNlbnRyaWNSYWtlMihJbWFnZSogaW1hZ2UsIFJPSSogcm9pLCBDb25jZW50cmljUmFrZURpcmVjdGlvbiBkaXJlY3Rpb24sIEVkZ2VQcm9jZXNzIHByb2Nlc3MsIGludCBzdGVwU2l6ZSwgRWRnZU9wdGlvbnMyKiBlZGdlT3B0aW9ucyk7DQorSU1BUV9GVU5DIEV4dHJlbWVSZXBvcnQqICAgICAgICAgSU1BUV9TVERDQUxMIGltYXFEZXRlY3RFeHRyZW1lcyhjb25zdCBkb3VibGUqIHBpeGVscywgaW50IG51bVBpeGVscywgRGV0ZWN0aW9uTW9kZSBtb2RlLCBjb25zdCBEZXRlY3RFeHRyZW1lc09wdGlvbnMqIG9wdGlvbnMsIGludCogbnVtRXh0cmVtZXMpOw0KK0lNQVFfRlVOQyBpbnQgICAgICAgICAgICAgICAgICAgIElNQVFfU1REQ0FMTCBpbWFxRGV0ZWN0Um90YXRpb24oY29uc3QgSW1hZ2UqIHJlZmVyZW5jZUltYWdlLCBjb25zdCBJbWFnZSogdGVzdEltYWdlLCBQb2ludEZsb2F0IHJlZmVyZW5jZUNlbnRlciwgUG9pbnRGbG9hdCB0ZXN0Q2VudGVyLCBpbnQgcmFkaXVzLCBmbG9hdCBwcmVjaXNpb24sIGRvdWJsZSogYW5nbGUpOw0KK0lNQVFfRlVOQyBFZGdlUmVwb3J0MiogICAgICAgICAgIElNQVFfU1REQ0FMTCBpbWFxRWRnZVRvb2w0KEltYWdlKiBpbWFnZSwgUk9JKiByb2ksIEVkZ2VQcm9jZXNzIHByb2Nlc3NUeXBlLCBFZGdlT3B0aW9uczIqIGVkZ2VPcHRpb25zLCBjb25zdCB1bnNpZ25lZCBpbnQgcmV2ZXJzZURpcmVjdGlvbik7DQorSU1BUV9GVU5DIEZpbmRFZGdlUmVwb3J0KiAgICAgICAgSU1BUV9TVERDQUxMIGltYXFGaW5kRWRnZTIoSW1hZ2UqIGltYWdlLCBjb25zdCBST0kqIHJvaSwgY29uc3QgQ29vcmRpbmF0ZVN5c3RlbSogYmFzZVN5c3RlbSwgY29uc3QgQ29vcmRpbmF0ZVN5c3RlbSogbmV3U3lzdGVtLCBjb25zdCBGaW5kRWRnZU9wdGlvbnMyKiBmaW5kRWRnZU9wdGlvbnMsIGNvbnN0IFN0cmFpZ2h0RWRnZU9wdGlvbnMqIHN0cmFpZ2h0RWRnZU9wdGlvbnMpOw0KK0lNQVFfRlVOQyBpbnQgICAgICAgICAgICAgICAgICAgIElNQVFfU1REQ0FMTCBpbWFxRmluZFRyYW5zZm9ybVJlY3QyKEltYWdlKiBpbWFnZSwgY29uc3QgUk9JKiByb2ksIEZpbmRUcmFuc2Zvcm1Nb2RlIG1vZGUsIENvb3JkaW5hdGVTeXN0ZW0qIGJhc2VTeXN0ZW0sIENvb3JkaW5hdGVTeXN0ZW0qIG5ld1N5c3RlbSwgY29uc3QgRmluZFRyYW5zZm9ybVJlY3RPcHRpb25zMiogZmluZFRyYW5zZm9ybU9wdGlvbnMsIGNvbnN0IFN0cmFpZ2h0RWRnZU9wdGlvbnMqIHN0cmFpZ2h0RWRnZU9wdGlvbnMsIEF4aXNSZXBvcnQqIGF4aXNSZXBvcnQpOw0KK0lNQVFfRlVOQyBpbnQgICAgICAgICAgICAgICAgICAgIElNQVFfU1REQ0FMTCBpbWFxRmluZFRyYW5zZm9ybVJlY3RzMihJbWFnZSogaW1hZ2UsIGNvbnN0IFJPSSogcHJpbWFyeVJPSSwgY29uc3QgUk9JKiBzZWNvbmRhcnlST0ksIEZpbmRUcmFuc2Zvcm1Nb2RlIG1vZGUsIENvb3JkaW5hdGVTeXN0ZW0qIGJhc2VTeXN0ZW0sIENvb3JkaW5hdGVTeXN0ZW0qIG5ld1N5c3RlbSwgY29uc3QgRmluZFRyYW5zZm9ybVJlY3RzT3B0aW9uczIqIGZpbmRUcmFuc2Zvcm1PcHRpb25zLCBjb25zdCBTdHJhaWdodEVkZ2VPcHRpb25zKiBwcmltYXJ5U3RyYWlnaHRFZGdlT3B0aW9ucywgY29uc3QgU3RyYWlnaHRFZGdlT3B0aW9ucyogc2Vjb25kYXJ5U3RyYWlnaHRFZGdlT3B0aW9ucywgQXhpc1JlcG9ydCogYXhpc1JlcG9ydCk7DQorSU1BUV9GVU5DIGludCAgICAgICAgICAgICAgICAgICAgSU1BUV9TVERDQUxMIGltYXFMaW5lR2F1Z2VUb29sMihjb25zdCBJbWFnZSogaW1hZ2UsIFBvaW50IHN0YXJ0LCBQb2ludCBlbmQsIExpbmVHYXVnZU1ldGhvZCBtZXRob2QsIGNvbnN0IEVkZ2VPcHRpb25zKiBlZGdlT3B0aW9ucywgY29uc3QgQ29vcmRpbmF0ZVRyYW5zZm9ybTIqIHRyYW5zZm9ybSwgZmxvYXQqIGRpc3RhbmNlKTsNCitJTUFRX0ZVTkMgUmFrZVJlcG9ydDIqICAgICAgICAgICBJTUFRX1NURENBTEwgaW1hcVJha2UyKEltYWdlKiBpbWFnZSwgUk9JKiByb2ksIFJha2VEaXJlY3Rpb24gZGlyZWN0aW9uLCBFZGdlUHJvY2VzcyBwcm9jZXNzLCBpbnQgc3RlcFNpemUsIEVkZ2VPcHRpb25zMiogZWRnZU9wdGlvbnMpOw0KK0lNQVFfRlVOQyBQb2ludEZsb2F0KiAgICAgICAgICAgIElNQVFfU1REQ0FMTCBpbWFxU2ltcGxlRWRnZShjb25zdCBJbWFnZSogaW1hZ2UsIGNvbnN0IFBvaW50KiBwb2ludHMsIGludCBudW1Qb2ludHMsIGNvbnN0IFNpbXBsZUVkZ2VPcHRpb25zKiBvcHRpb25zLCBpbnQqIG51bUVkZ2VzKTsNCitJTUFRX0ZVTkMgU3Bva2VSZXBvcnQyKiAgICAgICAgICBJTUFRX1NURENBTEwgaW1hcVNwb2tlMihJbWFnZSogaW1hZ2UsIFJPSSogcm9pLCBTcG9rZURpcmVjdGlvbiBkaXJlY3Rpb24sIEVkZ2VQcm9jZXNzIHByb2Nlc3MsIGludCBzdGVwU2l6ZSwgRWRnZU9wdGlvbnMyKiBlZGdlT3B0aW9ucyk7DQorSU1BUV9GVU5DIFN0cmFpZ2h0RWRnZVJlcG9ydDIqICAgSU1BUV9TVERDQUxMIGltYXFTdHJhaWdodEVkZ2UoY29uc3QgSW1hZ2UqIGltYWdlLCBjb25zdCBST0kqIHJvaSwgU2VhcmNoRGlyZWN0aW9uIHNlYXJjaERpcmVjdGlvbiwgY29uc3QgRWRnZU9wdGlvbnMyKiBlZGdlT3B0aW9ucywgY29uc3QgU3RyYWlnaHRFZGdlT3B0aW9ucyogc3RyYWlnaHRFZGdlT3B0aW9ucyk7DQorSU1BUV9GVU5DIFN0cmFpZ2h0RWRnZVJlcG9ydDIqICAgSU1BUV9TVERDQUxMIGltYXFTdHJhaWdodEVkZ2UyKGNvbnN0IEltYWdlKiBpbWFnZSwgY29uc3QgUk9JKiByb2ksIFNlYXJjaERpcmVjdGlvbiBzZWFyY2hEaXJlY3Rpb24sIGNvbnN0IEVkZ2VPcHRpb25zMiogZWRnZU9wdGlvbnMsIGNvbnN0IFN0cmFpZ2h0RWRnZU9wdGlvbnMqIHN0cmFpZ2h0RWRnZU9wdGlvbnMsIHVuc2lnbmVkIGludCBvcHRpbWl6ZWRNb2RlKTsNCisNCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisvLyAgU3BhdGlhbCBGaWx0ZXJzIGZ1bmN0aW9ucw0KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KK0lNQVFfRlVOQyBpbnQgSU1BUV9TVERDQUxMIGltYXFDYW5ueUVkZ2VGaWx0ZXIoSW1hZ2UqIGRlc3QsIGNvbnN0IEltYWdlKiBzb3VyY2UsIGNvbnN0IENhbm55T3B0aW9ucyogb3B0aW9ucyk7DQorSU1BUV9GVU5DIGludCBJTUFRX1NURENBTEwgaW1hcUNvbnZvbHZlMihJbWFnZSogZGVzdCwgSW1hZ2UqIHNvdXJjZSwgZmxvYXQqIGtlcm5lbCwgaW50IG1hdHJpeFJvd3MsIGludCBtYXRyaXhDb2xzLCBmbG9hdCBub3JtYWxpemUsIEltYWdlKiBtYXNrLCBSb3VuZGluZ01vZGUgcm91bmRpbmdNb2RlKTsNCitJTUFRX0ZVTkMgaW50IElNQVFfU1REQ0FMTCBpbWFxQ29ycmVsYXRlKEltYWdlKiBkZXN0LCBJbWFnZSogc291cmNlLCBjb25zdCBJbWFnZSogdGVtcGxhdGVJbWFnZSwgUmVjdCByZWN0KTsNCitJTUFRX0ZVTkMgaW50IElNQVFfU1REQ0FMTCBpbWFxRWRnZUZpbHRlcihJbWFnZSogZGVzdCwgSW1hZ2UqIHNvdXJjZSwgT3V0bGluZU1ldGhvZCBtZXRob2QsIGNvbnN0IEltYWdlKiBtYXNrKTsNCitJTUFRX0ZVTkMgaW50IElNQVFfU1REQ0FMTCBpbWFxTG93UGFzcyhJbWFnZSogZGVzdCwgSW1hZ2UqIHNvdXJjZSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBmbG9hdCB0b2xlcmFuY2UsIGNvbnN0IEltYWdlKiBtYXNrKTsNCitJTUFRX0ZVTkMgaW50IElNQVFfU1REQ0FMTCBpbWFxTWVkaWFuRmlsdGVyKEltYWdlKiBkZXN0LCBJbWFnZSogc291cmNlLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGNvbnN0IEltYWdlKiBtYXNrKTsNCitJTUFRX0ZVTkMgaW50IElNQVFfU1REQ0FMTCBpbWFxTnRoT3JkZXJGaWx0ZXIoSW1hZ2UqIGRlc3QsIEltYWdlKiBzb3VyY2UsIGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IG4sIGNvbnN0IEltYWdlKiBtYXNrKTsNCisNCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisvLyAgRHJhd2luZyBmdW5jdGlvbnMNCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCitJTUFRX0ZVTkMgaW50IElNQVFfU1REQ0FMTCBpbWFxRHJhd0xpbmVPbkltYWdlKEltYWdlKiBkZXN0LCBjb25zdCBJbWFnZSogc291cmNlLCBEcmF3TW9kZSBtb2RlLCBQb2ludCBzdGFydCwgUG9pbnQgZW5kLCBmbG9hdCBuZXdQaXhlbFZhbHVlKTsNCitJTUFRX0ZVTkMgaW50IElNQVFfU1REQ0FMTCBpbWFxRHJhd1NoYXBlT25JbWFnZShJbWFnZSogZGVzdCwgY29uc3QgSW1hZ2UqIHNvdXJjZSwgUmVjdCByZWN0LCBEcmF3TW9kZSBtb2RlLCBTaGFwZU1vZGUgc2hhcGUsIGZsb2F0IG5ld1BpeGVsVmFsdWUpOw0KK0lNQVFfRlVOQyBpbnQgSU1BUV9TVERDQUxMIGltYXFEcmF3VGV4dE9uSW1hZ2UoSW1hZ2UqIGRlc3QsIGNvbnN0IEltYWdlKiBzb3VyY2UsIFBvaW50IGNvb3JkLCBjb25zdCBjaGFyKiB0ZXh0LCBjb25zdCBEcmF3VGV4dE9wdGlvbnMqIG9wdGlvbnMsIGludCogZm9udE5hbWVVc2VkKTsNCisNCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisvLyAgSW50ZXJsYWNpbmcgZnVuY3Rpb25zDQorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorSU1BUV9GVU5DIGludCBJTUFRX1NURENBTEwgaW1hcUludGVybGFjZUNvbWJpbmUoSW1hZ2UqIGZyYW1lLCBjb25zdCBJbWFnZSogb2RkLCBjb25zdCBJbWFnZSogZXZlbik7DQorSU1BUV9GVU5DIGludCBJTUFRX1NURENBTEwgaW1hcUludGVybGFjZVNlcGFyYXRlKGNvbnN0IEltYWdlKiBmcmFtZSwgSW1hZ2UqIG9kZCwgSW1hZ2UqIGV2ZW4pOw0KKw0KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKy8vICBJbWFnZSBJbmZvcm1hdGlvbiBmdW5jdGlvbnMNCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCitJTUFRX0ZVTkMgY2hhcioqIElNQVFfU1REQ0FMTCBpbWFxRW51bWVyYXRlQ3VzdG9tS2V5cyhjb25zdCBJbWFnZSogaW1hZ2UsIHVuc2lnbmVkIGludCogc2l6ZSk7DQorSU1BUV9GVU5DIGludCAgICBJTUFRX1NURENBTEwgaW1hcUdldEJpdERlcHRoKGNvbnN0IEltYWdlKiBpbWFnZSwgdW5zaWduZWQgaW50KiBiaXREZXB0aCk7DQorSU1BUV9GVU5DIGludCAgICBJTUFRX1NURENBTEwgaW1hcUdldEJ5dGVzUGVyUGl4ZWwoY29uc3QgSW1hZ2UqIGltYWdlLCBpbnQqIGJ5dGVDb3VudCk7DQorSU1BUV9GVU5DIGludCAgICBJTUFRX1NURENBTEwgaW1hcUdldEltYWdlSW5mbyhjb25zdCBJbWFnZSogaW1hZ2UsIEltYWdlSW5mbyogaW5mbyk7DQorSU1BUV9GVU5DIGludCAgICBJTUFRX1NURENBTEwgaW1hcUdldEltYWdlU2l6ZShjb25zdCBJbWFnZSogaW1hZ2UsIGludCogd2lkdGgsIGludCogaGVpZ2h0KTsNCitJTUFRX0ZVTkMgaW50ICAgIElNQVFfU1REQ0FMTCBpbWFxR2V0SW1hZ2VUeXBlKGNvbnN0IEltYWdlKiBpbWFnZSwgSW1hZ2VUeXBlKiB0eXBlKTsNCitJTUFRX0ZVTkMgaW50ICAgIElNQVFfU1REQ0FMTCBpbWFxR2V0TWFza09mZnNldChjb25zdCBJbWFnZSogaW1hZ2UsIFBvaW50KiBvZmZzZXQpOw0KK0lNQVFfRlVOQyB2b2lkKiAgSU1BUV9TVERDQUxMIGltYXFHZXRQaXhlbEFkZHJlc3MoY29uc3QgSW1hZ2UqIGltYWdlLCBQb2ludCBwaXhlbCk7DQorSU1BUV9GVU5DIGludCAgICBJTUFRX1NURENBTEwgaW1hcUdldFZpc2lvbkluZm9UeXBlcyhjb25zdCBJbWFnZSogaW1hZ2UsIHVuc2lnbmVkIGludCogcHJlc2VudCk7DQorSU1BUV9GVU5DIGludCAgICBJTUFRX1NURENBTEwgaW1hcUlzSW1hZ2VFbXB0eShjb25zdCBJbWFnZSogaW1hZ2UsIGludCogZW1wdHkpOw0KK0lNQVFfRlVOQyB2b2lkKiAgSU1BUV9TVERDQUxMIGltYXFSZWFkQ3VzdG9tRGF0YShjb25zdCBJbWFnZSogaW1hZ2UsIGNvbnN0IGNoYXIqIGtleSwgdW5zaWduZWQgaW50KiBzaXplKTsNCitJTUFRX0ZVTkMgaW50ICAgIElNQVFfU1REQ0FMTCBpbWFxUmVtb3ZlQ3VzdG9tRGF0YShJbWFnZSogaW1hZ2UsIGNvbnN0IGNoYXIqIGtleSk7DQorSU1BUV9GVU5DIGludCAgICBJTUFRX1NURENBTEwgaW1hcVJlbW92ZVZpc2lvbkluZm8yKGNvbnN0IEltYWdlKiBpbWFnZSwgdW5zaWduZWQgaW50IGluZm8pOw0KK0lNQVFfRlVOQyBpbnQgICAgSU1BUV9TVERDQUxMIGltYXFTZXRCaXREZXB0aChJbWFnZSogaW1hZ2UsIHVuc2lnbmVkIGludCBiaXREZXB0aCk7DQorSU1BUV9GVU5DIGludCAgICBJTUFRX1NURENBTEwgaW1hcVNldEltYWdlU2l6ZShJbWFnZSogaW1hZ2UsIGludCB3aWR0aCwgaW50IGhlaWdodCk7DQorSU1BUV9GVU5DIGludCAgICBJTUFRX1NURENBTEwgaW1hcVNldE1hc2tPZmZzZXQoSW1hZ2UqIGltYWdlLCBQb2ludCBvZmZzZXQpOw0KK0lNQVFfRlVOQyBpbnQgICAgSU1BUV9TVERDQUxMIGltYXFXcml0ZUN1c3RvbURhdGEoSW1hZ2UqIGltYWdlLCBjb25zdCBjaGFyKiBrZXksIGNvbnN0IHZvaWQqIGRhdGEsIHVuc2lnbmVkIGludCBzaXplKTsNCisNCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisvLyAgRGlzcGxheSBmdW5jdGlvbnMNCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCitJTUFRX0ZVTkMgaW50ICAgSU1BUV9TVERDQUxMIGltYXFBcmVUb29sc0NvbnRleHRTZW5zaXRpdmUoaW50KiBzZW5zaXRpdmUpOw0KK0lNQVFfRlVOQyBpbnQgICBJTUFRX1NURENBTEwgaW1hcUNsb3NlV2luZG93KGludCB3aW5kb3dOdW1iZXIpOw0KK0lNQVFfRlVOQyBpbnQgICBJTUFRX1NURENBTEwgaW1hcURpc3BsYXlJbWFnZShjb25zdCBJbWFnZSogaW1hZ2UsIGludCB3aW5kb3dOdW1iZXIsIGludCByZXNpemUpOw0KK0lNQVFfRlVOQyBpbnQgICBJTUFRX1NURENBTEwgaW1hcUdldExhc3RLZXkoY2hhcioga2V5UHJlc3NlZCwgaW50KiB3aW5kb3dOdW1iZXIsIGludCogbW9kaWZpZXJzKTsNCitJTUFRX0ZVTkMgdm9pZCogSU1BUV9TVERDQUxMIGltYXFHZXRTeXN0ZW1XaW5kb3dIYW5kbGUoaW50IHdpbmRvd051bWJlcik7DQorSU1BUV9GVU5DIGludCAgIElNQVFfU1REQ0FMTCBpbWFxR2V0V2luZG93Q2VudGVyUG9zKGludCB3aW5kb3dOdW1iZXIsIFBvaW50KiBjZW50ZXJQb3NpdGlvbik7DQorSU1BUV9GVU5DIGludCAgIElNQVFfU1REQ0FMTCBpbWFxU2V0VG9vbENvbnRleHRTZW5zaXRpdml0eShpbnQgc2Vuc2l0aXZlKTsNCitJTUFRX0ZVTkMgaW50ICAgSU1BUV9TVERDQUxMIGltYXFTaG93V2luZG93KGludCB3aW5kb3dOdW1iZXIsIGludCB2aXNpYmxlKTsNCisNCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisvLyAgSW1hZ2UgTWFuaXB1bGF0aW9uIGZ1bmN0aW9ucw0KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KK0lNQVFfRlVOQyBpbnQgICBJTUFRX1NURENBTEwgaW1hcUNhc3QoSW1hZ2UqIGRlc3QsIGNvbnN0IEltYWdlKiBzb3VyY2UsIEltYWdlVHlwZSB0eXBlLCBjb25zdCBmbG9hdCogbG9va3VwLCBpbnQgc2hpZnQpOw0KK0lNQVFfRlVOQyBpbnQgICBJTUFRX1NURENBTEwgaW1hcUNvcHlSZWN0KEltYWdlKiBkZXN0LCBjb25zdCBJbWFnZSogc291cmNlLCBSZWN0IHJlY3QsIFBvaW50IGRlc3RMb2MpOw0KK0lNQVFfRlVOQyBpbnQgICBJTUFRX1NURENBTEwgaW1hcUR1cGxpY2F0ZShJbWFnZSogZGVzdCwgY29uc3QgSW1hZ2UqIHNvdXJjZSk7DQorSU1BUV9GVU5DIHZvaWQqIElNQVFfU1REQ0FMTCBpbWFxRmxhdHRlbihjb25zdCBJbWFnZSogaW1hZ2UsIEZsYXR0ZW5UeXBlIHR5cGUsIENvbXByZXNzaW9uVHlwZSBjb21wcmVzc2lvbiwgaW50IHF1YWxpdHksIHVuc2lnbmVkIGludCogc2l6ZSk7DQorSU1BUV9GVU5DIGludCAgIElNQVFfU1REQ0FMTCBpbWFxRmxpcChJbWFnZSogZGVzdCwgY29uc3QgSW1hZ2UqIHNvdXJjZSwgRmxpcEF4aXMgYXhpcyk7DQorSU1BUV9GVU5DIGludCAgIElNQVFfU1REQ0FMTCBpbWFxTWFzayhJbWFnZSogZGVzdCwgY29uc3QgSW1hZ2UqIHNvdXJjZSwgY29uc3QgSW1hZ2UqIG1hc2spOw0KK0lNQVFfRlVOQyBpbnQgICBJTUFRX1NURENBTEwgaW1hcVJlc2FtcGxlKEltYWdlKiBkZXN0LCBjb25zdCBJbWFnZSogc291cmNlLCBpbnQgbmV3V2lkdGgsIGludCBuZXdIZWlnaHQsIEludGVycG9sYXRpb25NZXRob2QgbWV0aG9kLCBSZWN0IHJlY3QpOw0KK0lNQVFfRlVOQyBpbnQgICBJTUFRX1NURENBTEwgaW1hcVJvdGF0ZTIoSW1hZ2UqIGRlc3QsIGNvbnN0IEltYWdlKiBzb3VyY2UsIGZsb2F0IGFuZ2xlLCBQaXhlbFZhbHVlIGZpbGwsIEludGVycG9sYXRpb25NZXRob2QgbWV0aG9kLCBpbnQgbWFpbnRhaW5TaXplKTsNCitJTUFRX0ZVTkMgaW50ICAgSU1BUV9TVERDQUxMIGltYXFTY2FsZShJbWFnZSogZGVzdCwgY29uc3QgSW1hZ2UqIHNvdXJjZSwgaW50IHhTY2FsZSwgaW50IHlTY2FsZSwgU2NhbGluZ01vZGUgc2NhbGVNb2RlLCBSZWN0IHJlY3QpOw0KK0lNQVFfRlVOQyBpbnQgICBJTUFRX1NURENBTEwgaW1hcVNoaWZ0KEltYWdlKiBkZXN0LCBjb25zdCBJbWFnZSogc291cmNlLCBpbnQgc2hpZnRYLCBpbnQgc2hpZnRZLCBQaXhlbFZhbHVlIGZpbGwpOw0KK0lNQVFfRlVOQyBpbnQgICBJTUFRX1NURENBTEwgaW1hcVRyYW5zcG9zZShJbWFnZSogZGVzdCwgY29uc3QgSW1hZ2UqIHNvdXJjZSk7DQorSU1BUV9GVU5DIGludCAgIElNQVFfU1REQ0FMTCBpbWFxVW5mbGF0dGVuKEltYWdlKiBpbWFnZSwgY29uc3Qgdm9pZCogZGF0YSwgdW5zaWduZWQgaW50IHNpemUpOw0KK0lNQVFfRlVOQyBpbnQgICBJTUFRX1NURENBTEwgaW1hcVVud3JhcEltYWdlKEltYWdlKiBkZXN0LCBjb25zdCBJbWFnZSogc291cmNlLCBBbm51bHVzIGFubnVsdXMsIFJlY3RPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwgSW50ZXJwb2xhdGlvbk1ldGhvZCBtZXRob2QpOw0KK0lNQVFfRlVOQyBpbnQgICBJTUFRX1NURENBTEwgaW1hcVZpZXczRChJbWFnZSogZGVzdCwgSW1hZ2UqIHNvdXJjZSwgY29uc3QgVmlldzNET3B0aW9ucyogb3B0aW9ucyk7DQorDQorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorLy8gIEZpbGUgSS9PIGZ1bmN0aW9ucw0KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KK0lNQVFfRlVOQyBpbnQgICAgICAgICBJTUFRX1NURENBTEwgaW1hcUNsb3NlQVZJKEFWSVNlc3Npb24gc2Vzc2lvbik7DQorSU1BUV9GVU5DIEFWSVNlc3Npb24gIElNQVFfU1REQ0FMTCBpbWFxQ3JlYXRlQVZJKGNvbnN0IGNoYXIqIGZpbGVOYW1lLCBjb25zdCBjaGFyKiBjb21wcmVzc2lvbkZpbHRlciwgaW50IHF1YWxpdHksIHVuc2lnbmVkIGludCBmcmFtZXNQZXJTZWNvbmQsIHVuc2lnbmVkIGludCBtYXhEYXRhU2l6ZSk7DQorSU1BUV9GVU5DIGludCAgICAgICAgIElNQVFfU1REQ0FMTCBpbWFxR2V0QVZJSW5mbyhBVklTZXNzaW9uIHNlc3Npb24sIEFWSUluZm8qIGluZm8pOw0KK0lNQVFfRlVOQyBpbnQgICAgICAgICBJTUFRX1NURENBTEwgaW1hcUdldEZpbGVJbmZvKGNvbnN0IGNoYXIqIGZpbGVOYW1lLCBDYWxpYnJhdGlvblVuaXQqIGNhbGlicmF0aW9uVW5pdCwgZmxvYXQqIGNhbGlicmF0aW9uWCwgZmxvYXQqIGNhbGlicmF0aW9uWSwgaW50KiB3aWR0aCwgaW50KiBoZWlnaHQsIEltYWdlVHlwZSogaW1hZ2VUeXBlKTsNCitJTUFRX0ZVTkMgRmlsdGVyTmFtZSogSU1BUV9TVERDQUxMIGltYXFHZXRGaWx0ZXJOYW1lcyhpbnQqIG51bUZpbHRlcnMpOw0KK0lNQVFfRlVOQyBjaGFyKiogICAgICBJTUFRX1NURENBTEwgaW1hcUxvYWRJbWFnZVBvcHVwKGNvbnN0IGNoYXIqIGRlZmF1bHREaXJlY3RvcnksIGNvbnN0IGNoYXIqIGRlZmF1bHRGaWxlU3BlYywgY29uc3QgY2hhciogZmlsZVR5cGVMaXN0LCBjb25zdCBjaGFyKiB0aXRsZSwgaW50IGFsbG93TXVsdGlwbGVQYXRocywgQnV0dG9uTGFiZWwgYnV0dG9uTGFiZWwsIGludCByZXN0cmljdERpcmVjdG9yeSwgaW50IHJlc3RyaWN0RXh0ZW5zaW9uLCBpbnQgYWxsb3dDYW5jZWwsIGludCBhbGxvd01ha2VEaXJlY3RvcnksIGludCogY2FuY2VsbGVkLCBpbnQqIG51bVBhdGhzKTsNCitJTUFRX0ZVTkMgQVZJU2Vzc2lvbiAgSU1BUV9TVERDQUxMIGltYXFPcGVuQVZJKGNvbnN0IGNoYXIqIGZpbGVOYW1lKTsNCitJTUFRX0ZVTkMgaW50ICAgICAgICAgSU1BUV9TVERDQUxMIGltYXFSZWFkQVZJRnJhbWUoSW1hZ2UqIGltYWdlLCBBVklTZXNzaW9uIHNlc3Npb24sIHVuc2lnbmVkIGludCBmcmFtZU51bSwgdm9pZCogZGF0YSwgdW5zaWduZWQgaW50KiBkYXRhU2l6ZSk7DQorSU1BUV9GVU5DIGludCAgICAgICAgIElNQVFfU1REQ0FMTCBpbWFxUmVhZEZpbGUoSW1hZ2UqIGltYWdlLCBjb25zdCBjaGFyKiBmaWxlTmFtZSwgUkdCVmFsdWUqIGNvbG9yVGFibGUsIGludCogbnVtQ29sb3JzKTsNCitJTUFRX0ZVTkMgaW50ICAgICAgICAgSU1BUV9TVERDQUxMIGltYXFSZWFkVmlzaW9uRmlsZShJbWFnZSogaW1hZ2UsIGNvbnN0IGNoYXIqIGZpbGVOYW1lLCBSR0JWYWx1ZSogY29sb3JUYWJsZSwgaW50KiBudW1Db2xvcnMpOw0KK0lNQVFfRlVOQyBpbnQgICAgICAgICBJTUFRX1NURENBTEwgaW1hcVdyaXRlQVZJRnJhbWUoSW1hZ2UqIGltYWdlLCBBVklTZXNzaW9uIHNlc3Npb24sIGNvbnN0IHZvaWQqIGRhdGEsIHVuc2lnbmVkIGludCBkYXRhTGVuZ3RoKTsNCitJTUFRX0ZVTkMgaW50ICAgICAgICAgSU1BUV9TVERDQUxMIGltYXFXcml0ZUJNUEZpbGUoY29uc3QgSW1hZ2UqIGltYWdlLCBjb25zdCBjaGFyKiBmaWxlTmFtZSwgaW50IGNvbXByZXNzLCBjb25zdCBSR0JWYWx1ZSogY29sb3JUYWJsZSk7DQorSU1BUV9GVU5DIGludCAgICAgICAgIElNQVFfU1REQ0FMTCBpbWFxV3JpdGVGaWxlKGNvbnN0IEltYWdlKiBpbWFnZSwgY29uc3QgY2hhciogZmlsZU5hbWUsIGNvbnN0IFJHQlZhbHVlKiBjb2xvclRhYmxlKTsNCitJTUFRX0ZVTkMgaW50ICAgICAgICAgSU1BUV9TVERDQUxMIGltYXFXcml0ZUpQRUdGaWxlKGNvbnN0IEltYWdlKiBpbWFnZSwgY29uc3QgY2hhciogZmlsZU5hbWUsIHVuc2lnbmVkIGludCBxdWFsaXR5LCB2b2lkKiBjb2xvclRhYmxlKTsNCitJTUFRX0ZVTkMgaW50ICAgICAgICAgSU1BUV9TVERDQUxMIGltYXFXcml0ZUpQRUcyMDAwRmlsZShjb25zdCBJbWFnZSogaW1hZ2UsIGNvbnN0IGNoYXIqIGZpbGVOYW1lLCBpbnQgbG9zc2xlc3MsIGZsb2F0IGNvbXByZXNzaW9uUmF0aW8sIGNvbnN0IEpQRUcyMDAwRmlsZUFkdmFuY2VkT3B0aW9ucyogYWR2YW5jZWRPcHRpb25zLCBjb25zdCBSR0JWYWx1ZSogY29sb3JUYWJsZSk7DQorSU1BUV9GVU5DIGludCAgICAgICAgIElNQVFfU1REQ0FMTCBpbWFxV3JpdGVQTkdGaWxlMihjb25zdCBJbWFnZSogaW1hZ2UsIGNvbnN0IGNoYXIqIGZpbGVOYW1lLCB1bnNpZ25lZCBpbnQgY29tcHJlc3Npb25TcGVlZCwgY29uc3QgUkdCVmFsdWUqIGNvbG9yVGFibGUsIGludCB1c2VCaXREZXB0aCk7DQorSU1BUV9GVU5DIGludCAgICAgICAgIElNQVFfU1REQ0FMTCBpbWFxV3JpdGVUSUZGRmlsZShjb25zdCBJbWFnZSogaW1hZ2UsIGNvbnN0IGNoYXIqIGZpbGVOYW1lLCBjb25zdCBUSUZGRmlsZU9wdGlvbnMqIG9wdGlvbnMsIGNvbnN0IFJHQlZhbHVlKiBjb2xvclRhYmxlKTsNCitJTUFRX0ZVTkMgaW50ICAgICAgICAgSU1BUV9TVERDQUxMIGltYXFXcml0ZVZpc2lvbkZpbGUoY29uc3QgSW1hZ2UqIGltYWdlLCBjb25zdCBjaGFyKiBmaWxlTmFtZSwgY29uc3QgUkdCVmFsdWUqIGNvbG9yVGFibGUpOw0KKw0KKw0KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKy8vICBBbmFseXRpYyBHZW9tZXRyeSBmdW5jdGlvbnMNCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCitJTUFRX0ZVTkMgaW50ICAgICAgICAgICBJTUFRX1NURENBTEwgaW1hcUJ1aWxkQ29vcmRpbmF0ZVN5c3RlbShjb25zdCBQb2ludCogcG9pbnRzLCBSZWZlcmVuY2VNb2RlIG1vZGUsIEF4aXNPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwgQ29vcmRpbmF0ZVN5c3RlbSogc3lzdGVtKTsNCitJTUFRX0ZVTkMgQmVzdENpcmNsZTIqICBJTUFRX1NURENBTEwgaW1hcUZpdENpcmNsZTIoY29uc3QgUG9pbnRGbG9hdCogcG9pbnRzLCBpbnQgbnVtUG9pbnRzLCBjb25zdCBGaXRDaXJjbGVPcHRpb25zKiBvcHRpb25zKTsNCitJTUFRX0ZVTkMgQmVzdEVsbGlwc2UyKiBJTUFRX1NURENBTEwgaW1hcUZpdEVsbGlwc2UyKGNvbnN0IFBvaW50RmxvYXQqIHBvaW50cywgaW50IG51bVBvaW50cywgY29uc3QgRml0RWxsaXBzZU9wdGlvbnMqIG9wdGlvbnMpOw0KK0lNQVFfRlVOQyBCZXN0TGluZSogICAgIElNQVFfU1REQ0FMTCBpbWFxRml0TGluZShjb25zdCBQb2ludEZsb2F0KiBwb2ludHMsIGludCBudW1Qb2ludHMsIGNvbnN0IEZpdExpbmVPcHRpb25zKiBvcHRpb25zKTsNCitJTUFRX0ZVTkMgaW50ICAgICAgICAgICBJTUFRX1NURENBTEwgaW1hcUdldEFuZ2xlKFBvaW50RmxvYXQgc3RhcnQxLCBQb2ludEZsb2F0IGVuZDEsIFBvaW50RmxvYXQgc3RhcnQyLCBQb2ludEZsb2F0IGVuZDIsIGZsb2F0KiBhbmdsZSk7DQorSU1BUV9GVU5DIGludCAgICAgICAgICAgSU1BUV9TVERDQUxMIGltYXFHZXRCaXNlY3RpbmdMaW5lKFBvaW50RmxvYXQgc3RhcnQxLCBQb2ludEZsb2F0IGVuZDEsIFBvaW50RmxvYXQgc3RhcnQyLCBQb2ludEZsb2F0IGVuZDIsIFBvaW50RmxvYXQqIGJpc2VjdFN0YXJ0LCBQb2ludEZsb2F0KiBiaXNlY3RFbmQpOw0KK0lNQVFfRlVOQyBpbnQgICAgICAgICAgIElNQVFfU1REQ0FMTCBpbWFxR2V0RGlzdGFuY2UoUG9pbnRGbG9hdCBwb2ludDEsIFBvaW50RmxvYXQgcG9pbnQyLCBmbG9hdCogZGlzdGFuY2UpOw0KK0lNQVFfRlVOQyBpbnQgICAgICAgICAgIElNQVFfU1REQ0FMTCBpbWFxR2V0SW50ZXJzZWN0aW9uKFBvaW50RmxvYXQgc3RhcnQxLCBQb2ludEZsb2F0IGVuZDEsIFBvaW50RmxvYXQgc3RhcnQyLCBQb2ludEZsb2F0IGVuZDIsIFBvaW50RmxvYXQqIGludGVyc2VjdGlvbik7DQorSU1BUV9GVU5DIGludCAgICAgICAgICAgSU1BUV9TVERDQUxMIGltYXFHZXRNaWRMaW5lKFBvaW50RmxvYXQgcmVmTGluZVN0YXJ0LCBQb2ludEZsb2F0IHJlZkxpbmVFbmQsIFBvaW50RmxvYXQgcG9pbnQsIFBvaW50RmxvYXQqIG1pZExpbmVTdGFydCwgUG9pbnRGbG9hdCogbWlkTGluZUVuZCk7DQorSU1BUV9GVU5DIGludCAgICAgICAgICAgSU1BUV9TVERDQUxMIGltYXFHZXRQZXJwZW5kaWN1bGFyTGluZShQb2ludEZsb2F0IHJlZkxpbmVTdGFydCwgUG9pbnRGbG9hdCByZWZMaW5lRW5kLCBQb2ludEZsb2F0IHBvaW50LCBQb2ludEZsb2F0KiBwZXJwTGluZVN0YXJ0LCBQb2ludEZsb2F0KiBwZXJwTGluZUVuZCwgZG91YmxlKiBkaXN0YW5jZSk7DQorSU1BUV9GVU5DIFNlZ21lbnRJbmZvKiAgSU1BUV9TVERDQUxMIGltYXFHZXRQb2ludHNPbkNvbnRvdXIoY29uc3QgSW1hZ2UqIGltYWdlLCBpbnQqIG51bVNlZ21lbnRzKTsNCitJTUFRX0ZVTkMgUG9pbnQqICAgICAgICBJTUFRX1NURENBTEwgaW1hcUdldFBvaW50c09uTGluZShQb2ludCBzdGFydCwgUG9pbnQgZW5kLCBpbnQqIG51bVBvaW50cyk7DQorSU1BUV9GVU5DIGludCAgICAgICAgICAgSU1BUV9TVERDQUxMIGltYXFHZXRQb2x5Z29uQXJlYShjb25zdCBQb2ludEZsb2F0KiBwb2ludHMsIGludCBudW1Qb2ludHMsIGZsb2F0KiBhcmVhKTsNCitJTUFRX0ZVTkMgZmxvYXQqICAgICAgICBJTUFRX1NURENBTEwgaW1hcUludGVycG9sYXRlUG9pbnRzKGNvbnN0IEltYWdlKiBpbWFnZSwgY29uc3QgUG9pbnQqIHBvaW50cywgaW50IG51bVBvaW50cywgSW50ZXJwb2xhdGlvbk1ldGhvZCBtZXRob2QsIGludCBzdWJwaXhlbCwgaW50KiBpbnRlcnBDb3VudCk7DQorDQorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorLy8gIENsaXBib2FyZCBmdW5jdGlvbnMNCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCitJTUFRX0ZVTkMgaW50IElNQVFfU1REQ0FMTCBpbWFxQ2xpcGJvYXJkVG9JbWFnZShJbWFnZSogZGVzdCwgUkdCVmFsdWUqIHBhbGV0dGUpOw0KK0lNQVFfRlVOQyBpbnQgSU1BUV9TVERDQUxMIGltYXFJbWFnZVRvQ2xpcGJvYXJkKGNvbnN0IEltYWdlKiBpbWFnZSwgY29uc3QgUkdCVmFsdWUqIHBhbGV0dGUpOw0KKw0KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKy8vICBCb3JkZXIgZnVuY3Rpb25zDQorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorSU1BUV9GVU5DIGludCBJTUFRX1NURENBTEwgaW1hcUZpbGxCb3JkZXIoSW1hZ2UqIGltYWdlLCBCb3JkZXJNZXRob2QgbWV0aG9kKTsNCitJTUFRX0ZVTkMgaW50IElNQVFfU1REQ0FMTCBpbWFxR2V0Qm9yZGVyU2l6ZShjb25zdCBJbWFnZSogaW1hZ2UsIGludCogYm9yZGVyU2l6ZSk7DQorSU1BUV9GVU5DIGludCBJTUFRX1NURENBTEwgaW1hcVNldEJvcmRlclNpemUoSW1hZ2UqIGltYWdlLCBpbnQgc2l6ZSk7DQorDQorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorLy8gIEltYWdlIE1hbmFnZW1lbnQgZnVuY3Rpb25zDQorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorSU1BUV9GVU5DIGludCAgICBJTUFRX1NURENBTEwgaW1hcUFycmF5VG9JbWFnZShJbWFnZSogaW1hZ2UsIGNvbnN0IHZvaWQqIGFycmF5LCBpbnQgbnVtQ29scywgaW50IG51bVJvd3MpOw0KK0lNQVFfRlVOQyBJbWFnZSogSU1BUV9TVERDQUxMIGltYXFDcmVhdGVJbWFnZShJbWFnZVR5cGUgdHlwZSwgaW50IGJvcmRlclNpemUpOw0KK0lNQVFfRlVOQyB2b2lkKiAgSU1BUV9TVERDQUxMIGltYXFJbWFnZVRvQXJyYXkoY29uc3QgSW1hZ2UqIGltYWdlLCBSZWN0IHJlY3QsIGludCogY29sdW1ucywgaW50KiByb3dzKTsNCisNCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisvLyAgQ29sb3IgUHJvY2Vzc2luZyBmdW5jdGlvbnMNCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCitJTUFRX0ZVTkMgQ29sb3IyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTUFRX1NURENBTEwgaW1hcUNoYW5nZUNvbG9yU3BhY2UyKGNvbnN0IENvbG9yMiogc291cmNlQ29sb3IsIENvbG9yTW9kZSBzb3VyY2VTcGFjZSwgQ29sb3JNb2RlIGRlc3RTcGFjZSwgZG91YmxlIG9mZnNldCwgY29uc3QgQ0lFWFlaVmFsdWUqIHdoaXRlUmVmZXJlbmNlKTsNCitJTUFRX0ZVTkMgaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTUFRX1NURENBTEwgaW1hcUNvbG9yQkNHVHJhbnNmb3JtKEltYWdlKiBkZXN0LCBjb25zdCBJbWFnZSogc291cmNlLCBjb25zdCBCQ0dPcHRpb25zKiByZWRPcHRpb25zLCBjb25zdCBCQ0dPcHRpb25zKiBncmVlbk9wdGlvbnMsIGNvbnN0IEJDR09wdGlvbnMqIGJsdWVPcHRpb25zLCBjb25zdCBJbWFnZSogbWFzayk7DQorSU1BUV9GVU5DIGludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU1BUV9TVERDQUxMIGltYXFDb2xvckVxdWFsaXplKEltYWdlKiBkZXN0LCBjb25zdCBJbWFnZSogc291cmNlLCBpbnQgY29sb3JFcXVhbGl6YXRpb24pOw0KK0lNQVFfRlVOQyBDb2xvckhpc3RvZ3JhbVJlcG9ydCogICAgICAgICAgICAgIElNQVFfU1REQ0FMTCBpbWFxQ29sb3JIaXN0b2dyYW0yKEltYWdlKiBpbWFnZSwgaW50IG51bUNsYXNzZXMsIENvbG9yTW9kZSBtb2RlLCBjb25zdCBDSUVYWVpWYWx1ZSogd2hpdGVSZWZlcmVuY2UsIEltYWdlKiBtYXNrKTsNCitJTUFRX0ZVTkMgaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTUFRX1NURENBTEwgaW1hcUNvbG9yTG9va3VwKEltYWdlKiBkZXN0LCBjb25zdCBJbWFnZSogc291cmNlLCBDb2xvck1vZGUgbW9kZSwgY29uc3QgSW1hZ2UqIG1hc2ssIGNvbnN0IHNob3J0KiBwbGFuZTEsIGNvbnN0IHNob3J0KiBwbGFuZTIsIGNvbnN0IHNob3J0KiBwbGFuZTMpOw0KK0lNQVFfRlVOQyBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElNQVFfU1REQ0FMTCBpbWFxQ29sb3JUaHJlc2hvbGQoSW1hZ2UqIGRlc3QsIGNvbnN0IEltYWdlKiBzb3VyY2UsIGludCByZXBsYWNlVmFsdWUsIENvbG9yTW9kZSBtb2RlLCBjb25zdCBSYW5nZSogcGxhbmUxUmFuZ2UsIGNvbnN0IFJhbmdlKiBwbGFuZTJSYW5nZSwgY29uc3QgUmFuZ2UqIHBsYW5lM1JhbmdlKTsNCitJTUFRX0ZVTkMgU3VwZXJ2aXNlZENvbG9yU2VnbWVudGF0aW9uUmVwb3J0KiBJTUFRX1NURENBTEwgaW1hcVN1cGVydmlzZWRDb2xvclNlZ21lbnRhdGlvbihDbGFzc2lmaWVyU2Vzc2lvbiogc2Vzc2lvbiwgSW1hZ2UqIGxhYmVsSW1hZ2UsIGNvbnN0IEltYWdlKiBzcmNJbWFnZSwgY29uc3QgUk9JKiByb2ksIGNvbnN0IFJPSUxhYmVsKiBsYWJlbEluLCB1bnNpZ25lZCBpbnQgbnVtTGFiZWxJbiwgaW50IG1heERpc3RhbmNlLCBpbnQgbWluSWRlbnRpZmljYXRpb25TY29yZSwgY29uc3QgQ29sb3JTZWdtZW5hdGlvbk9wdGlvbnMqIHNlZ21lbnRPcHRpb25zKTsNCitJTUFRX0ZVTkMgaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTUFRX1NURENBTEwgaW1hcUdldENvbG9yU2VnbWVudGF0aW9uTWF4RGlzdGFuY2UoQ2xhc3NpZmllclNlc3Npb24qIHNlc3Npb24sIGNvbnN0IENvbG9yU2VnbWVuYXRpb25PcHRpb25zKiBzZWdtZW50T3B0aW9ucywgU2VnbWVudGF0aW9uRGlzdGFuY2VMZXZlbCBkaXN0TGV2ZWwsIGludCogbWF4RGlzdGFuY2UpOw0KKw0KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKy8vICBUcmFuc2Zvcm0gZnVuY3Rpb25zDQorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorSU1BUV9GVU5DIGludCBJTUFRX1NURENBTEwgaW1hcUJDR1RyYW5zZm9ybShJbWFnZSogZGVzdCwgY29uc3QgSW1hZ2UqIHNvdXJjZSwgY29uc3QgQkNHT3B0aW9ucyogb3B0aW9ucywgY29uc3QgSW1hZ2UqIG1hc2spOw0KK0lNQVFfRlVOQyBpbnQgSU1BUV9TVERDQUxMIGltYXFFcXVhbGl6ZShJbWFnZSogZGVzdCwgY29uc3QgSW1hZ2UqIHNvdXJjZSwgZmxvYXQgbWluLCBmbG9hdCBtYXgsIGNvbnN0IEltYWdlKiBtYXNrKTsNCitJTUFRX0ZVTkMgaW50IElNQVFfU1REQ0FMTCBpbWFxSW52ZXJzZShJbWFnZSogZGVzdCwgY29uc3QgSW1hZ2UqIHNvdXJjZSwgY29uc3QgSW1hZ2UqIG1hc2spOw0KK0lNQVFfRlVOQyBpbnQgSU1BUV9TVERDQUxMIGltYXFNYXRoVHJhbnNmb3JtKEltYWdlKiBkZXN0LCBjb25zdCBJbWFnZSogc291cmNlLCBNYXRoVHJhbnNmb3JtTWV0aG9kIG1ldGhvZCwgZmxvYXQgcmFuZ2VNaW4sIGZsb2F0IHJhbmdlTWF4LCBmbG9hdCBwb3dlciwgY29uc3QgSW1hZ2UqIG1hc2spOw0KK0lNQVFfRlVOQyBpbnQgSU1BUV9TVERDQUxMIGltYXFXYXRlcnNoZWRUcmFuc2Zvcm0oSW1hZ2UqIGRlc3QsIGNvbnN0IEltYWdlKiBzb3VyY2UsIGludCBjb25uZWN0aXZpdHk4LCBpbnQqIHpvbmVDb3VudCk7DQorSU1BUV9GVU5DIGludCBJTUFRX1NURENBTEwgaW1hcUxvb2t1cDIoSW1hZ2UqIGRlc3QsIGNvbnN0IEltYWdlKiBzb3VyY2UsIGNvbnN0IGludCogdGFibGUsIGNvbnN0IEltYWdlKiBtYXNrKTsNCisNCisNCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisvLyAgV2luZG93IE1hbmFnZW1lbnQgZnVuY3Rpb25zDQorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorSU1BUV9GVU5DIGludCAgIElNQVFfU1REQ0FMTCBpbWFxQXJlU2Nyb2xsYmFyc1Zpc2libGUoaW50IHdpbmRvd051bWJlciwgaW50KiB2aXNpYmxlKTsNCitJTUFRX0ZVTkMgaW50ICAgSU1BUV9TVERDQUxMIGltYXFCcmluZ1dpbmRvd1RvVG9wKGludCB3aW5kb3dOdW1iZXIpOw0KK0lNQVFfRlVOQyBpbnQgICBJTUFRX1NURENBTEwgaW1hcUdldE1vdXNlUG9zKFBvaW50KiBwb3NpdGlvbiwgaW50KiB3aW5kb3dOdW1iZXIpOw0KK0lNQVFfRlVOQyBpbnQgICBJTUFRX1NURENBTEwgaW1hcUdldFdpbmRvd0JhY2tncm91bmQoaW50IHdpbmRvd051bWJlciwgV2luZG93QmFja2dyb3VuZEZpbGxTdHlsZSogZmlsbFN0eWxlLCBXaW5kb3dCYWNrZ3JvdW5kSGF0Y2hTdHlsZSogaGF0Y2hTdHlsZSwgUkdCVmFsdWUqIGZpbGxDb2xvciwgUkdCVmFsdWUqIGJhY2tncm91bmRDb2xvcik7DQorSU1BUV9GVU5DIGludCAgIElNQVFfU1REQ0FMTCBpbWFxR2V0V2luZG93RGlzcGxheU1hcHBpbmcoaW50IHdpbmRvd051bSwgRGlzcGxheU1hcHBpbmcqIG1hcHBpbmcpOw0KK0lNQVFfRlVOQyBpbnQgICBJTUFRX1NURENBTEwgaW1hcUdldFdpbmRvd0dyaWQoaW50IHdpbmRvd051bWJlciwgaW50KiB4UmVzb2x1dGlvbiwgaW50KiB5UmVzb2x1dGlvbik7DQorSU1BUV9GVU5DIGludCAgIElNQVFfU1REQ0FMTCBpbWFxR2V0V2luZG93SGFuZGxlKGludCogaGFuZGxlKTsNCitJTUFRX0ZVTkMgaW50ICAgSU1BUV9TVERDQUxMIGltYXFHZXRXaW5kb3dQb3MoaW50IHdpbmRvd051bWJlciwgUG9pbnQqIHBvc2l0aW9uKTsNCitJTUFRX0ZVTkMgaW50ICAgSU1BUV9TVERDQUxMIGltYXFHZXRXaW5kb3dTaXplKGludCB3aW5kb3dOdW1iZXIsIGludCogd2lkdGgsIGludCogaGVpZ2h0KTsNCitJTUFRX0ZVTkMgY2hhciogSU1BUV9TVERDQUxMIGltYXFHZXRXaW5kb3dUaXRsZShpbnQgd2luZG93TnVtYmVyKTsNCitJTUFRX0ZVTkMgaW50ICAgSU1BUV9TVERDQUxMIGltYXFHZXRXaW5kb3dab29tMihpbnQgd2luZG93TnVtYmVyLCBmbG9hdCogeFpvb20sIGZsb2F0KiB5Wm9vbSk7DQorSU1BUV9GVU5DIGludCAgIElNQVFfU1REQ0FMTCBpbWFxSXNXaW5kb3dOb25UZWFyaW5nKGludCB3aW5kb3dOdW1iZXIsIGludCogbm9uVGVhcmluZyk7DQorSU1BUV9GVU5DIGludCAgIElNQVFfU1REQ0FMTCBpbWFxSXNXaW5kb3dWaXNpYmxlKGludCB3aW5kb3dOdW1iZXIsIGludCogdmlzaWJsZSk7DQorSU1BUV9GVU5DIGludCAgIElNQVFfU1REQ0FMTCBpbWFxTW92ZVdpbmRvdyhpbnQgd2luZG93TnVtYmVyLCBQb2ludCBwb3NpdGlvbik7DQorSU1BUV9GVU5DIGludCAgIElNQVFfU1REQ0FMTCBpbWFxU2V0dXBXaW5kb3coaW50IHdpbmRvd051bWJlciwgaW50IGNvbmZpZ3VyYXRpb24pOw0KK0lNQVFfRlVOQyBpbnQgICBJTUFRX1NURENBTEwgaW1hcVNldFdpbmRvd0JhY2tncm91bmQoaW50IHdpbmRvd051bWJlciwgV2luZG93QmFja2dyb3VuZEZpbGxTdHlsZSBmaWxsU3R5bGUsIFdpbmRvd0JhY2tncm91bmRIYXRjaFN0eWxlIGhhdGNoU3R5bGUsIGNvbnN0IFJHQlZhbHVlKiBmaWxsQ29sb3IsIGNvbnN0IFJHQlZhbHVlKiBiYWNrZ3JvdW5kQ29sb3IpOw0KK0lNQVFfRlVOQyBpbnQgICBJTUFRX1NURENBTEwgaW1hcVNldFdpbmRvd0Rpc3BsYXlNYXBwaW5nKGludCB3aW5kb3dOdW1iZXIsIGNvbnN0IERpc3BsYXlNYXBwaW5nKiBtYXBwaW5nKTsNCitJTUFRX0ZVTkMgaW50ICAgSU1BUV9TVERDQUxMIGltYXFTZXRXaW5kb3dHcmlkKGludCB3aW5kb3dOdW1iZXIsIGludCB4UmVzb2x1dGlvbiwgaW50IHlSZXNvbHV0aW9uKTsNCitJTUFRX0ZVTkMgaW50ICAgSU1BUV9TVERDQUxMIGltYXFTZXRXaW5kb3dNYXhDb250b3VyQ291bnQoaW50IHdpbmRvd051bWJlciwgdW5zaWduZWQgaW50IG1heENvbnRvdXJDb3VudCk7DQorSU1BUV9GVU5DIGludCAgIElNQVFfU1REQ0FMTCBpbWFxU2V0V2luZG93Tm9uVGVhcmluZyhpbnQgd2luZG93TnVtYmVyLCBpbnQgbm9uVGVhcmluZyk7DQorSU1BUV9GVU5DIGludCAgIElNQVFfU1REQ0FMTCBpbWFxU2V0V2luZG93UGFsZXR0ZShpbnQgd2luZG93TnVtYmVyLCBQYWxldHRlVHlwZSB0eXBlLCBjb25zdCBSR0JWYWx1ZSogcGFsZXR0ZSwgaW50IG51bUNvbG9ycyk7DQorSU1BUV9GVU5DIGludCAgIElNQVFfU1REQ0FMTCBpbWFxU2V0V2luZG93U2l6ZShpbnQgd2luZG93TnVtYmVyLCBpbnQgd2lkdGgsIGludCBoZWlnaHQpOw0KK0lNQVFfRlVOQyBpbnQgICBJTUFRX1NURENBTEwgaW1hcVNldFdpbmRvd1RocmVhZFBvbGljeShXaW5kb3dUaHJlYWRQb2xpY3kgcG9saWN5KTsNCitJTUFRX0ZVTkMgaW50ICAgSU1BUV9TVERDQUxMIGltYXFTZXRXaW5kb3dUaXRsZShpbnQgd2luZG93TnVtYmVyLCBjb25zdCBjaGFyKiB0aXRsZSk7DQorSU1BUV9GVU5DIGludCAgIElNQVFfU1REQ0FMTCBpbWFxU2V0V2luZG93Wm9vbVRvRml0KGludCB3aW5kb3dOdW1iZXIsIGludCB6b29tVG9GaXQpOw0KK0lNQVFfRlVOQyBpbnQgICBJTUFRX1NURENBTEwgaW1hcVNob3dTY3JvbGxiYXJzKGludCB3aW5kb3dOdW1iZXIsIGludCB2aXNpYmxlKTsNCitJTUFRX0ZVTkMgaW50ICAgSU1BUV9TVERDQUxMIGltYXFab29tV2luZG93MihpbnQgd2luZG93TnVtYmVyLCBmbG9hdCB4Wm9vbSwgZmxvYXQgeVpvb20sIFBvaW50IGNlbnRlcik7DQorDQorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorLy8gIFV0aWxpdGllcyBmdW5jdGlvbnMNCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCitJTUFRX0ZVTkMgY29uc3QgZmxvYXQqIElNQVFfU1REQ0FMTCBpbWFxR2V0S2VybmVsKEtlcm5lbEZhbWlseSBmYW1pbHksIGludCBzaXplLCBpbnQgbnVtYmVyKTsNCitJTUFRX0ZVTkMgQW5udWx1cyAgICAgIElNQVFfU1REQ0FMTCBpbWFxTWFrZUFubnVsdXMoUG9pbnQgY2VudGVyLCBpbnQgaW5uZXJSYWRpdXMsIGludCBvdXRlclJhZGl1cywgZG91YmxlIHN0YXJ0QW5nbGUsIGRvdWJsZSBlbmRBbmdsZSk7DQorSU1BUV9GVU5DIFBvaW50ICAgICAgICBJTUFRX1NURENBTEwgaW1hcU1ha2VQb2ludChpbnQgeENvb3JkaW5hdGUsIGludCB5Q29vcmRpbmF0ZSk7DQorSU1BUV9GVU5DIFBvaW50RmxvYXQgICBJTUFRX1NURENBTEwgaW1hcU1ha2VQb2ludEZsb2F0KGZsb2F0IHhDb29yZGluYXRlLCBmbG9hdCB5Q29vcmRpbmF0ZSk7DQorSU1BUV9GVU5DIFJlY3QgICAgICAgICBJTUFRX1NURENBTEwgaW1hcU1ha2VSZWN0KGludCB0b3AsIGludCBsZWZ0LCBpbnQgaGVpZ2h0LCBpbnQgd2lkdGgpOw0KK0lNQVFfRlVOQyBSZWN0ICAgICAgICAgSU1BUV9TVERDQUxMIGltYXFNYWtlUmVjdEZyb21Sb3RhdGVkUmVjdChSb3RhdGVkUmVjdCByb3RhdGVkUmVjdCk7DQorSU1BUV9GVU5DIFJvdGF0ZWRSZWN0ICBJTUFRX1NURENBTEwgaW1hcU1ha2VSb3RhdGVkUmVjdChpbnQgdG9wLCBpbnQgbGVmdCwgaW50IGhlaWdodCwgaW50IHdpZHRoLCBkb3VibGUgYW5nbGUpOw0KK0lNQVFfRlVOQyBSb3RhdGVkUmVjdCAgSU1BUV9TVERDQUxMIGltYXFNYWtlUm90YXRlZFJlY3RGcm9tUmVjdChSZWN0IHJlY3QpOw0KK0lNQVFfRlVOQyBpbnQgICAgICAgICAgSU1BUV9TVERDQUxMIGltYXFNdWx0aWNvcmVPcHRpb25zKE11bHRpY29yZU9wZXJhdGlvbiBvcGVyYXRpb24sIHVuc2lnbmVkIGludCogY3VzdG9tTnVtQ29yZXMpOw0KKw0KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKy8vICBUb29sIFdpbmRvdyBmdW5jdGlvbnMNCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCitJTUFRX0ZVTkMgaW50ICAgSU1BUV9TVERDQUxMIGltYXFDbG9zZVRvb2xXaW5kb3codm9pZCk7DQorSU1BUV9GVU5DIGludCAgIElNQVFfU1REQ0FMTCBpbWFxR2V0Q3VycmVudFRvb2woVG9vbCogY3VycmVudFRvb2wpOw0KK0lNQVFfRlVOQyBpbnQgICBJTUFRX1NURENBTEwgaW1hcUdldExhc3RFdmVudChXaW5kb3dFdmVudFR5cGUqIHR5cGUsIGludCogd2luZG93TnVtYmVyLCBUb29sKiB0b29sLCBSZWN0KiByZWN0KTsNCitJTUFRX0ZVTkMgdm9pZCogSU1BUV9TVERDQUxMIGltYXFHZXRUb29sV2luZG93SGFuZGxlKHZvaWQpOw0KK0lNQVFfRlVOQyBpbnQgICBJTUFRX1NURENBTEwgaW1hcUdldFRvb2xXaW5kb3dQb3MoUG9pbnQqIHBvc2l0aW9uKTsNCitJTUFRX0ZVTkMgaW50ICAgSU1BUV9TVERDQUxMIGltYXFJc1Rvb2xXaW5kb3dWaXNpYmxlKGludCogdmlzaWJsZSk7DQorSU1BUV9GVU5DIGludCAgIElNQVFfU1REQ0FMTCBpbWFxTW92ZVRvb2xXaW5kb3coUG9pbnQgcG9zaXRpb24pOw0KK0lNQVFfRlVOQyBpbnQgICBJTUFRX1NURENBTEwgaW1hcVNldEN1cnJlbnRUb29sKFRvb2wgY3VycmVudFRvb2wpOw0KKyNpZm5kZWYgX19HTlVDX18NCitJTUFRX0ZVTkMgaW50ICAgSU1BUV9TVERDQUxMIGltYXFTZXRFdmVudENhbGxiYWNrKEV2ZW50Q2FsbGJhY2sgY2FsbGJhY2ssIGludCBzeW5jaHJvbm91cyk7DQorI2VuZGlmDQorSU1BUV9GVU5DIGludCAgIElNQVFfU1REQ0FMTCBpbWFxU2V0VG9vbENvbG9yKGNvbnN0IFJHQlZhbHVlKiBjb2xvcik7DQorSU1BUV9GVU5DIGludCAgIElNQVFfU1REQ0FMTCBpbWFxU2V0dXBUb29sV2luZG93KGludCBzaG93Q29vcmRpbmF0ZXMsIGludCBtYXhJY29uc1BlckxpbmUsIGNvbnN0IFRvb2xXaW5kb3dPcHRpb25zKiBvcHRpb25zKTsNCitJTUFRX0ZVTkMgaW50ICAgSU1BUV9TVERDQUxMIGltYXFTaG93VG9vbFdpbmRvdyhpbnQgdmlzaWJsZSk7DQorDQorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorLy8gIE1ldGVyIGZ1bmN0aW9ucw0KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KK0lNQVFfRlVOQyBNZXRlckFyYyogSU1BUV9TVERDQUxMIGltYXFHZXRNZXRlckFyYyhpbnQgbGlnaHROZWVkbGUsIE1ldGVyQXJjTW9kZSBtb2RlLCBjb25zdCBST0kqIHJvaSwgUG9pbnRGbG9hdCBiYXNlLCBQb2ludEZsb2F0IHN0YXJ0LCBQb2ludEZsb2F0IGVuZCk7DQorSU1BUV9GVU5DIGludCAgICAgICBJTUFRX1NURENBTEwgaW1hcVJlYWRNZXRlcihjb25zdCBJbWFnZSogaW1hZ2UsIGNvbnN0IE1ldGVyQXJjKiBhcmNJbmZvLCBkb3VibGUqIHBlcmNlbnRhZ2UsIFBvaW50RmxvYXQqIGVuZE9mTmVlZGxlKTsNCisNCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisvLyAgQ2FsaWJyYXRpb24gZnVuY3Rpb25zDQorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorSU1BUV9GVU5DIGludCAgICAgICAgICAgICAgICAgICAgICAgIElNQVFfU1REQ0FMTCBpbWFxQ29weUNhbGlicmF0aW9uSW5mbzIoSW1hZ2UqIGRlc3QsIEltYWdlKiBzb3VyY2UsIFBvaW50IG9mZnNldCk7DQorSU1BUV9GVU5DIGludCAgICAgICAgICAgICAgICAgICAgICAgIElNQVFfU1REQ0FMTCBpbWFxQ29ycmVjdENhbGlicmF0ZWRJbWFnZShJbWFnZSogZGVzdCwgY29uc3QgSW1hZ2UqIHNvdXJjZSwgUGl4ZWxWYWx1ZSBmaWxsLCBJbnRlcnBvbGF0aW9uTWV0aG9kIG1ldGhvZCwgY29uc3QgUk9JKiByb2kpOw0KK0lNQVFfRlVOQyBDYWxpYnJhdGlvbkluZm8qICAgICAgICAgICBJTUFRX1NURENBTEwgaW1hcUdldENhbGlicmF0aW9uSW5mbzIoY29uc3QgSW1hZ2UqIGltYWdlKTsNCitJTUFRX0ZVTkMgQ2FsaWJyYXRpb25JbmZvKiAgICAgICAgICAgSU1BUV9TVERDQUxMIGltYXFHZXRDYWxpYnJhdGlvbkluZm8zKEltYWdlKiBpbWFnZSwgdW5zaWduZWQgaW50IGlzR2V0RXJyb3JNYXApOw0KK0lNQVFfRlVOQyBpbnQgICAgICAgICAgICAgICAgICAgICAgICBJTUFRX1NURENBTEwgaW1hcUxlYXJuQ2FsaWJyYXRpb25HcmlkKEltYWdlKiBpbWFnZSwgY29uc3QgUk9JKiByb2ksIGNvbnN0IExlYXJuQ2FsaWJyYXRpb25PcHRpb25zKiBvcHRpb25zLCBjb25zdCBHcmlkRGVzY3JpcHRvciogZ3JpZCwgY29uc3QgQ29vcmRpbmF0ZVN5c3RlbSogc3lzdGVtLCBjb25zdCBSYW5nZUZsb2F0KiByYW5nZSwgZmxvYXQqIHF1YWxpdHkpOw0KK0lNQVFfRlVOQyBpbnQgICAgICAgICAgICAgICAgICAgICAgICBJTUFRX1NURENBTEwgaW1hcUxlYXJuQ2FsaWJyYXRpb25Qb2ludHMoSW1hZ2UqIGltYWdlLCBjb25zdCBDYWxpYnJhdGlvblBvaW50cyogcG9pbnRzLCBjb25zdCBST0kqIHJvaSwgY29uc3QgTGVhcm5DYWxpYnJhdGlvbk9wdGlvbnMqIG9wdGlvbnMsIGNvbnN0IEdyaWREZXNjcmlwdG9yKiBncmlkLCBjb25zdCBDb29yZGluYXRlU3lzdGVtKiBzeXN0ZW0sIGZsb2F0KiBxdWFsaXR5KTsNCitJTUFRX0ZVTkMgaW50ICAgICAgICAgICAgICAgICAgICAgICAgSU1BUV9TVERDQUxMIGltYXFTZXRDb29yZGluYXRlU3lzdGVtKEltYWdlKiBpbWFnZSwgY29uc3QgQ29vcmRpbmF0ZVN5c3RlbSogc3lzdGVtKTsNCitJTUFRX0ZVTkMgaW50ICAgICAgICAgICAgICAgICAgICAgICAgSU1BUV9TVERDQUxMIGltYXFTZXRTaW1wbGVDYWxpYnJhdGlvbihJbWFnZSogaW1hZ2UsIFNjYWxpbmdNZXRob2QgbWV0aG9kLCBpbnQgbGVhcm5UYWJsZSwgY29uc3QgR3JpZERlc2NyaXB0b3IqIGdyaWQsIGNvbnN0IENvb3JkaW5hdGVTeXN0ZW0qIHN5c3RlbSk7DQorSU1BUV9GVU5DIFRyYW5zZm9ybVJlcG9ydCogICAgICAgICAgIElNQVFfU1REQ0FMTCBpbWFxVHJhbnNmb3JtUGl4ZWxUb1JlYWxXb3JsZChjb25zdCBJbWFnZSogaW1hZ2UsIGNvbnN0IFBvaW50RmxvYXQqIHBpeGVsQ29vcmRpbmF0ZXMsIGludCBudW1Db29yZGluYXRlcyk7DQorSU1BUV9GVU5DIFRyYW5zZm9ybVJlcG9ydCogICAgICAgICAgIElNQVFfU1REQ0FMTCBpbWFxVHJhbnNmb3JtUmVhbFdvcmxkVG9QaXhlbChjb25zdCBJbWFnZSogaW1hZ2UsIGNvbnN0IFBvaW50RmxvYXQqIHJlYWxXb3JsZENvb3JkaW5hdGVzLCBpbnQgbnVtQ29vcmRpbmF0ZXMpOw0KK0lNQVFfRlVOQyBpbnQgICAgICAgICAgICAgICAgICAgICAgICBJTUFRX1NURENBTEwgaW1hcVNldFNpbXBsZUNhbGlicmF0aW9uMihJbWFnZSogaW1hZ2UsIGNvbnN0IEdyaWREZXNjcmlwdG9yKiBncmlkRGVzY3JpcHRvcik7DQorSU1BUV9GVU5DIGludCAgICAgICAgICAgICAgICAgICAgICAgIElNQVFfU1REQ0FMTCBpbWFxQ2FsaWJyYXRpb25TZXRBeGlzSW5mbyhJbWFnZSogaW1hZ2UsIENvb3JkaW5hdGVTeXN0ZW0qIGF4aXNJbmZvKTsNCitJTUFRX0ZVTkMgaW50ICAgICAgICAgICAgICAgICAgICAgICAgSU1BUV9TVERDQUxMIGltYXFDYWxpYnJhdGlvbkdldFRodW1ibmFpbEltYWdlKEltYWdlKiB0ZW1wbGF0ZUltYWdlLCBJbWFnZSogaW1hZ2UsIENhbGlicmF0aW9uVGh1bWJuYWlsVHlwZSB0eXBlLCB1bnNpZ25lZCBpbnQgaW5kZXgpOw0KK0lNQVFfRlVOQyBHZXRDYWxpYnJhdGlvbkluZm9SZXBvcnQqICBJTUFRX1NURENBTEwgaW1hcUNhbGlicmF0aW9uR2V0Q2FsaWJyYXRpb25JbmZvKEltYWdlKiBpbWFnZSwgdW5zaWduZWQgaW50IGlzR2V0RXJyb3JNYXApOw0KK0lNQVFfRlVOQyBHZXRDYW1lcmFQYXJhbWV0ZXJzUmVwb3J0KiBJTUFRX1NURENBTEwgaW1hcUNhbGlicmF0aW9uR2V0Q2FtZXJhUGFyYW1ldGVycyhJbWFnZSogdGVtcGxhdGVJbWFnZSk7DQorSU1BUV9GVU5DIGludCAgICAgICAgICAgICAgICAgICAgICAgIElNQVFfU1REQ0FMTCBpbWFxQ2FsaWJyYXRpb25Db21wYWN0SW5mb3JtYXRpb24oSW1hZ2UqIGltYWdlKTsNCisNCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisvLyAgUGl4ZWwgTWFuaXB1bGF0aW9uIGZ1bmN0aW9ucw0KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KK0lNQVFfRlVOQyBpbnQgICAgSU1BUV9TVERDQUxMIGltYXFBcnJheVRvQ29tcGxleFBsYW5lKEltYWdlKiBkZXN0LCBjb25zdCBJbWFnZSogc291cmNlLCBjb25zdCBmbG9hdCogbmV3UGl4ZWxzLCBDb21wbGV4UGxhbmUgcGxhbmUpOw0KK0lNQVFfRlVOQyBmbG9hdCogSU1BUV9TVERDQUxMIGltYXFDb21wbGV4UGxhbmVUb0FycmF5KGNvbnN0IEltYWdlKiBpbWFnZSwgQ29tcGxleFBsYW5lIHBsYW5lLCBSZWN0IHJlY3QsIGludCogcm93cywgaW50KiBjb2x1bW5zKTsNCitJTUFRX0ZVTkMgaW50ICAgIElNQVFfU1REQ0FMTCBpbWFxRXh0cmFjdENvbG9yUGxhbmVzKGNvbnN0IEltYWdlKiBpbWFnZSwgQ29sb3JNb2RlIG1vZGUsIEltYWdlKiBwbGFuZTEsIEltYWdlKiBwbGFuZTIsIEltYWdlKiBwbGFuZTMpOw0KK0lNQVFfRlVOQyBpbnQgICAgSU1BUV9TVERDQUxMIGltYXFFeHRyYWN0Q29tcGxleFBsYW5lKEltYWdlKiBkZXN0LCBjb25zdCBJbWFnZSogc291cmNlLCBDb21wbGV4UGxhbmUgcGxhbmUpOw0KK0lNQVFfRlVOQyBpbnQgICAgSU1BUV9TVERDQUxMIGltYXFGaWxsSW1hZ2UoSW1hZ2UqIGltYWdlLCBQaXhlbFZhbHVlIHZhbHVlLCBjb25zdCBJbWFnZSogbWFzayk7DQorSU1BUV9GVU5DIHZvaWQqICBJTUFRX1NURENBTEwgaW1hcUdldExpbmUoY29uc3QgSW1hZ2UqIGltYWdlLCBQb2ludCBzdGFydCwgUG9pbnQgZW5kLCBpbnQqIG51bVBvaW50cyk7DQorSU1BUV9GVU5DIGludCAgICBJTUFRX1NURENBTEwgaW1hcUdldFBpeGVsKGNvbnN0IEltYWdlKiBpbWFnZSwgUG9pbnQgcGl4ZWwsIFBpeGVsVmFsdWUqIHZhbHVlKTsNCitJTUFRX0ZVTkMgaW50ICAgIElNQVFfU1REQ0FMTCBpbWFxUmVwbGFjZUNvbG9yUGxhbmVzKEltYWdlKiBkZXN0LCBjb25zdCBJbWFnZSogc291cmNlLCBDb2xvck1vZGUgbW9kZSwgY29uc3QgSW1hZ2UqIHBsYW5lMSwgY29uc3QgSW1hZ2UqIHBsYW5lMiwgY29uc3QgSW1hZ2UqIHBsYW5lMyk7DQorSU1BUV9GVU5DIGludCAgICBJTUFRX1NURENBTEwgaW1hcVJlcGxhY2VDb21wbGV4UGxhbmUoSW1hZ2UqIGRlc3QsIGNvbnN0IEltYWdlKiBzb3VyY2UsIGNvbnN0IEltYWdlKiBuZXdWYWx1ZXMsIENvbXBsZXhQbGFuZSBwbGFuZSk7DQorSU1BUV9GVU5DIGludCAgICBJTUFRX1NURENBTEwgaW1hcVNldExpbmUoSW1hZ2UqIGltYWdlLCBjb25zdCB2b2lkKiBhcnJheSwgaW50IGFycmF5U2l6ZSwgUG9pbnQgc3RhcnQsIFBvaW50IGVuZCk7DQorSU1BUV9GVU5DIGludCAgICBJTUFRX1NURENBTEwgaW1hcVNldFBpeGVsKEltYWdlKiBpbWFnZSwgUG9pbnQgY29vcmQsIFBpeGVsVmFsdWUgdmFsdWUpOw0KKw0KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKy8vICBDb2xvciBNYXRjaGluZyBmdW5jdGlvbnMNCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCitJTUFRX0ZVTkMgQ29sb3JJbmZvcm1hdGlvbiogSU1BUV9TVERDQUxMIGltYXFMZWFybkNvbG9yKGNvbnN0IEltYWdlKiBpbWFnZSwgY29uc3QgUk9JKiByb2ksIENvbG9yU2Vuc2l0aXZpdHkgc2Vuc2l0aXZpdHksIGludCBzYXR1cmF0aW9uKTsNCitJTUFRX0ZVTkMgaW50KiAgICAgICAgICAgICAgSU1BUV9TVERDQUxMIGltYXFNYXRjaENvbG9yKGNvbnN0IEltYWdlKiBpbWFnZSwgY29uc3QgQ29sb3JJbmZvcm1hdGlvbiogaW5mbywgY29uc3QgUk9JKiByb2ksIGludCogbnVtU2NvcmVzKTsNCisNCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisvLyAgRnJlcXVlbmN5IERvbWFpbiBBbmFseXNpcyBmdW5jdGlvbnMNCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCitJTUFRX0ZVTkMgaW50IElNQVFfU1REQ0FMTCBpbWFxQXR0ZW51YXRlKEltYWdlKiBkZXN0LCBjb25zdCBJbWFnZSogc291cmNlLCBBdHRlbnVhdGVNb2RlIGhpZ2hsb3cpOw0KK0lNQVFfRlVOQyBpbnQgSU1BUV9TVERDQUxMIGltYXFDb25qdWdhdGUoSW1hZ2UqIGRlc3QsIGNvbnN0IEltYWdlKiBzb3VyY2UpOw0KK0lNQVFfRlVOQyBpbnQgSU1BUV9TVERDQUxMIGltYXFGRlQoSW1hZ2UqIGRlc3QsIGNvbnN0IEltYWdlKiBzb3VyY2UpOw0KK0lNQVFfRlVOQyBpbnQgSU1BUV9TVERDQUxMIGltYXFGbGlwRnJlcXVlbmNpZXMoSW1hZ2UqIGRlc3QsIGNvbnN0IEltYWdlKiBzb3VyY2UpOw0KK0lNQVFfRlVOQyBpbnQgSU1BUV9TVERDQUxMIGltYXFJbnZlcnNlRkZUKEltYWdlKiBkZXN0LCBjb25zdCBJbWFnZSogc291cmNlKTsNCitJTUFRX0ZVTkMgaW50IElNQVFfU1REQ0FMTCBpbWFxVHJ1bmNhdGUoSW1hZ2UqIGRlc3QsIGNvbnN0IEltYWdlKiBzb3VyY2UsIFRydW5jYXRlTW9kZSBoaWdobG93LCBmbG9hdCByYXRpb1RvS2VlcCk7DQorDQorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorLy8gIEJhcmNvZGUgSS9PIGZ1bmN0aW9ucw0KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KK0lNQVFfRlVOQyBpbnQgICAgICAgICAgICAgICBJTUFRX1NURENBTEwgaW1hcUdyYWRlRGF0YU1hdHJpeEJhcmNvZGVBSU0oY29uc3QgSW1hZ2UqIGltYWdlLCBBSU1HcmFkZVJlcG9ydCogcmVwb3J0KTsNCitJTUFRX0ZVTkMgQmFyY29kZUluZm8qICAgICAgSU1BUV9TVERDQUxMIGltYXFSZWFkQmFyY29kZShjb25zdCBJbWFnZSogaW1hZ2UsIEJhcmNvZGVUeXBlIHR5cGUsIGNvbnN0IFJPSSogcm9pLCBpbnQgdmFsaWRhdGUpOw0KK0lNQVFfRlVOQyBEYXRhTWF0cml4UmVwb3J0KiBJTUFRX1NURENBTEwgaW1hcVJlYWREYXRhTWF0cml4QmFyY29kZTIoSW1hZ2UqIGltYWdlLCBjb25zdCBST0kqIHJvaSwgRGF0YU1hdHJpeEdyYWRpbmdNb2RlIHByZXBhcmVGb3JHcmFkaW5nLCBjb25zdCBEYXRhTWF0cml4RGVzY3JpcHRpb25PcHRpb25zKiBkZXNjcmlwdGlvbk9wdGlvbnMsIGNvbnN0IERhdGFNYXRyaXhTaXplT3B0aW9ucyogc2l6ZU9wdGlvbnMsIGNvbnN0IERhdGFNYXRyaXhTZWFyY2hPcHRpb25zKiBzZWFyY2hPcHRpb25zKTsNCitJTUFRX0ZVTkMgQmFyY29kZTJESW5mbyogICAgSU1BUV9TVERDQUxMIGltYXFSZWFkUERGNDE3QmFyY29kZShjb25zdCBJbWFnZSogaW1hZ2UsIGNvbnN0IFJPSSogcm9pLCBCYXJjb2RlMkRTZWFyY2hNb2RlIHNlYXJjaE1vZGUsIHVuc2lnbmVkIGludCogbnVtQmFyY29kZXMpOw0KK0lNQVFfRlVOQyBRUkNvZGVSZXBvcnQqICAgICBJTUFRX1NURENBTEwgaW1hcVJlYWRRUkNvZGUoSW1hZ2UqIGltYWdlLCBjb25zdCBST0kqIHJvaSwgUVJHcmFkaW5nTW9kZSByZXNlcnZlZCwgY29uc3QgUVJDb2RlRGVzY3JpcHRpb25PcHRpb25zKiBkZXNjcmlwdGlvbk9wdGlvbnMsIGNvbnN0IFFSQ29kZVNpemVPcHRpb25zKiBzaXplT3B0aW9ucywgY29uc3QgUVJDb2RlU2VhcmNoT3B0aW9ucyogc2VhcmNoT3B0aW9ucyk7DQorDQorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorLy8gIExDRCBmdW5jdGlvbnMNCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCitJTUFRX0ZVTkMgaW50ICAgICAgICBJTUFRX1NURENBTEwgaW1hcUZpbmRMQ0RTZWdtZW50cyhST0kqIHJvaSwgY29uc3QgSW1hZ2UqIGltYWdlLCBjb25zdCBMQ0RPcHRpb25zKiBvcHRpb25zKTsNCitJTUFRX0ZVTkMgTENEUmVwb3J0KiBJTUFRX1NURENBTEwgaW1hcVJlYWRMQ0QoY29uc3QgSW1hZ2UqIGltYWdlLCBjb25zdCBST0kqIHJvaSwgY29uc3QgTENET3B0aW9ucyogb3B0aW9ucyk7DQorDQorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorLy8gIFNoYXBlIE1hdGNoaW5nIGZ1bmN0aW9ucw0KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KK0lNQVFfRlVOQyBTaGFwZVJlcG9ydCogSU1BUV9TVERDQUxMIGltYXFNYXRjaFNoYXBlKEltYWdlKiBkZXN0LCBJbWFnZSogc291cmNlLCBjb25zdCBJbWFnZSogdGVtcGxhdGVJbWFnZSwgaW50IHNjYWxlSW52YXJpYW50LCBpbnQgY29ubmVjdGl2aXR5OCwgZG91YmxlIHRvbGVyYW5jZSwgaW50KiBudW1NYXRjaGVzKTsNCisNCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisvLyAgQ29udG91cnMgZnVuY3Rpb25zDQorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorSU1BUV9GVU5DIENvbnRvdXJJRCAgICAgSU1BUV9TVERDQUxMIGltYXFBZGRBbm51bHVzQ29udG91cihST0kqIHJvaSwgQW5udWx1cyBhbm51bHVzKTsNCitJTUFRX0ZVTkMgQ29udG91cklEICAgICBJTUFRX1NURENBTEwgaW1hcUFkZENsb3NlZENvbnRvdXIoUk9JKiByb2ksIGNvbnN0IFBvaW50KiBwb2ludHMsIGludCBudW1Qb2ludHMpOw0KK0lNQVFfRlVOQyBDb250b3VySUQgICAgIElNQVFfU1REQ0FMTCBpbWFxQWRkTGluZUNvbnRvdXIoUk9JKiByb2ksIFBvaW50IHN0YXJ0LCBQb2ludCBlbmQpOw0KK0lNQVFfRlVOQyBDb250b3VySUQgICAgIElNQVFfU1REQ0FMTCBpbWFxQWRkT3BlbkNvbnRvdXIoUk9JKiByb2ksIGNvbnN0IFBvaW50KiBwb2ludHMsIGludCBudW1Qb2ludHMpOw0KK0lNQVFfRlVOQyBDb250b3VySUQgICAgIElNQVFfU1REQ0FMTCBpbWFxQWRkT3ZhbENvbnRvdXIoUk9JKiByb2ksIFJlY3QgYm91bmRpbmdCb3gpOw0KK0lNQVFfRlVOQyBDb250b3VySUQgICAgIElNQVFfU1REQ0FMTCBpbWFxQWRkUG9pbnRDb250b3VyKFJPSSogcm9pLCBQb2ludCBwb2ludCk7DQorSU1BUV9GVU5DIENvbnRvdXJJRCAgICAgSU1BUV9TVERDQUxMIGltYXFBZGRSZWN0Q29udG91cihST0kqIHJvaSwgUmVjdCByZWN0KTsNCitJTUFRX0ZVTkMgQ29udG91cklEICAgICBJTUFRX1NURENBTEwgaW1hcUFkZFJvdGF0ZWRSZWN0Q29udG91cjIoUk9JKiByb2ksIFJvdGF0ZWRSZWN0IHJlY3QpOw0KK0lNQVFfRlVOQyBDb250b3VySUQgICAgIElNQVFfU1REQ0FMTCBpbWFxQ29weUNvbnRvdXIoUk9JKiBkZXN0Um9pLCBjb25zdCBST0kqIHNvdXJjZVJvaSwgQ29udG91cklEIGlkKTsNCitJTUFRX0ZVTkMgQ29udG91cklEICAgICBJTUFRX1NURENBTEwgaW1hcUdldENvbnRvdXIoY29uc3QgUk9JKiByb2ksIHVuc2lnbmVkIGludCBpbmRleCk7DQorSU1BUV9GVU5DIGludCAgICAgICAgICAgSU1BUV9TVERDQUxMIGltYXFHZXRDb250b3VyQ29sb3IoY29uc3QgUk9JKiByb2ksIENvbnRvdXJJRCBpZCwgUkdCVmFsdWUqIGNvbnRvdXJDb2xvcik7DQorSU1BUV9GVU5DIGludCAgICAgICAgICAgSU1BUV9TVERDQUxMIGltYXFHZXRDb250b3VyQ291bnQoY29uc3QgUk9JKiByb2kpOw0KK0lNQVFfRlVOQyBDb250b3VySW5mbzIqIElNQVFfU1REQ0FMTCBpbWFxR2V0Q29udG91ckluZm8yKGNvbnN0IFJPSSogcm9pLCBDb250b3VySUQgaWQpOw0KK0lNQVFfRlVOQyBpbnQgICAgICAgICAgIElNQVFfU1REQ0FMTCBpbWFxTW92ZUNvbnRvdXIoUk9JKiByb2ksIENvbnRvdXJJRCBpZCwgaW50IGRlbHRhWCwgaW50IGRlbHRhWSk7DQorSU1BUV9GVU5DIGludCAgICAgICAgICAgSU1BUV9TVERDQUxMIGltYXFSZW1vdmVDb250b3VyKFJPSSogcm9pLCBDb250b3VySUQgaWQpOw0KK0lNQVFfRlVOQyBpbnQgICAgICAgICAgIElNQVFfU1REQ0FMTCBpbWFxU2V0Q29udG91ckNvbG9yKFJPSSogcm9pLCBDb250b3VySUQgaWQsIGNvbnN0IFJHQlZhbHVlKiBjb2xvcik7DQorDQorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorLy8gIFJlZ2lvbnMgb2YgSW50ZXJlc3QgZnVuY3Rpb25zDQorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorSU1BUV9GVU5DIGludCAgSU1BUV9TVERDQUxMIGltYXFDb25zdHJ1Y3RST0kyKGNvbnN0IEltYWdlKiBpbWFnZSwgUk9JKiByb2ksIFRvb2wgaW5pdGlhbFRvb2wsIGNvbnN0IFRvb2xXaW5kb3dPcHRpb25zKiB0b29scywgY29uc3QgQ29uc3RydWN0Uk9JT3B0aW9uczIqIG9wdGlvbnMsIGludCogb2theSk7DQorSU1BUV9GVU5DIFJPSSogSU1BUV9TVERDQUxMIGltYXFDcmVhdGVST0kodm9pZCk7DQorSU1BUV9GVU5DIGludCAgSU1BUV9TVERDQUxMIGltYXFHZXRST0lCb3VuZGluZ0JveChjb25zdCBST0kqIHJvaSwgUmVjdCogYm91bmRpbmdCb3gpOw0KK0lNQVFfRlVOQyBpbnQgIElNQVFfU1REQ0FMTCBpbWFxR2V0Uk9JQ29sb3IoY29uc3QgUk9JKiByb2ksIFJHQlZhbHVlKiByb2lDb2xvcik7DQorSU1BUV9GVU5DIFJPSSogSU1BUV9TVERDQUxMIGltYXFHZXRXaW5kb3dST0koaW50IHdpbmRvd051bWJlcik7DQorSU1BUV9GVU5DIGludCAgSU1BUV9TVERDQUxMIGltYXFTZXRST0lDb2xvcihST0kqIHJvaSwgY29uc3QgUkdCVmFsdWUqIGNvbG9yKTsNCitJTUFRX0ZVTkMgaW50ICBJTUFRX1NURENBTEwgaW1hcVNldFdpbmRvd1JPSShpbnQgd2luZG93TnVtYmVyLCBjb25zdCBST0kqIHJvaSk7DQorDQorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorLy8gIEltYWdlIEFuYWx5c2lzIGZ1bmN0aW9ucw0KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KK0lNQVFfRlVOQyBpbnQgICAgICAgICAgICAgIElNQVFfU1REQ0FMTCBpbWFxQ2VudHJvaWQoY29uc3QgSW1hZ2UqIGltYWdlLCBQb2ludEZsb2F0KiBjZW50cm9pZCwgY29uc3QgSW1hZ2UqIG1hc2spOw0KK0lNQVFfRlVOQyBDdXJ2ZSogICAgICAgICAgIElNQVFfU1REQ0FMTCBpbWFxRXh0cmFjdEN1cnZlcyhjb25zdCBJbWFnZSogaW1hZ2UsIGNvbnN0IFJPSSogcm9pLCBjb25zdCBDdXJ2ZU9wdGlvbnMqIGN1cnZlT3B0aW9ucywgdW5zaWduZWQgaW50KiBudW1DdXJ2ZXMpOw0KK0lNQVFfRlVOQyBIaXN0b2dyYW1SZXBvcnQqIElNQVFfU1REQ0FMTCBpbWFxSGlzdG9ncmFtKGNvbnN0IEltYWdlKiBpbWFnZSwgaW50IG51bUNsYXNzZXMsIGZsb2F0IG1pbiwgZmxvYXQgbWF4LCBjb25zdCBJbWFnZSogbWFzayk7DQorSU1BUV9GVU5DIExpbmVhckF2ZXJhZ2VzKiAgSU1BUV9TVERDQUxMIGltYXFMaW5lYXJBdmVyYWdlczIoSW1hZ2UqIGltYWdlLCBMaW5lYXJBdmVyYWdlc01vZGUgbW9kZSwgUmVjdCByZWN0KTsNCitJTUFRX0ZVTkMgTGluZVByb2ZpbGUqICAgICBJTUFRX1NURENBTEwgaW1hcUxpbmVQcm9maWxlKGNvbnN0IEltYWdlKiBpbWFnZSwgUG9pbnQgc3RhcnQsIFBvaW50IGVuZCk7DQorSU1BUV9GVU5DIFF1YW50aWZ5UmVwb3J0KiAgSU1BUV9TVERDQUxMIGltYXFRdWFudGlmeShjb25zdCBJbWFnZSogaW1hZ2UsIGNvbnN0IEltYWdlKiBtYXNrKTsNCisNCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisvLyAgRXJyb3IgTWFuYWdlbWVudCBmdW5jdGlvbnMNCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCitJTUFRX0ZVTkMgaW50ICAgICAgICAgSU1BUV9TVERDQUxMIGltYXFDbGVhckVycm9yKHZvaWQpOw0KK0lNQVFfRlVOQyBjaGFyKiAgICAgICBJTUFRX1NURENBTEwgaW1hcUdldEVycm9yVGV4dChpbnQgZXJyb3JDb2RlKTsNCitJTUFRX0ZVTkMgaW50ICAgICAgICAgSU1BUV9TVERDQUxMIGltYXFHZXRMYXN0RXJyb3Iodm9pZCk7DQorSU1BUV9GVU5DIGNvbnN0IGNoYXIqIElNQVFfU1REQ0FMTCBpbWFxR2V0TGFzdEVycm9yRnVuYyh2b2lkKTsNCitJTUFRX0ZVTkMgaW50ICAgICAgICAgSU1BUV9TVERDQUxMIGltYXFTZXRFcnJvcihpbnQgZXJyb3JDb2RlLCBjb25zdCBjaGFyKiBmdW5jdGlvbik7DQorDQorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorLy8gIFRocmVzaG9sZCBmdW5jdGlvbnMNCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCitJTUFRX0ZVTkMgVGhyZXNob2xkRGF0YSogSU1BUV9TVERDQUxMIGltYXFBdXRvVGhyZXNob2xkMihJbWFnZSogZGVzdCwgY29uc3QgSW1hZ2UqIHNvdXJjZSwgaW50IG51bUNsYXNzZXMsIFRocmVzaG9sZE1ldGhvZCBtZXRob2QsIGNvbnN0IEltYWdlKiBtYXNrKTsNCitJTUFRX0ZVTkMgaW50ICAgICAgICAgICAgSU1BUV9TVERDQUxMIGltYXFMb2NhbFRocmVzaG9sZChJbWFnZSogZGVzdCwgY29uc3QgSW1hZ2UqIHNvdXJjZSwgdW5zaWduZWQgaW50IHdpbmRvd1dpZHRoLCB1bnNpZ25lZCBpbnQgd2luZG93SGVpZ2h0LCBMb2NhbFRocmVzaG9sZE1ldGhvZCBtZXRob2QsIGRvdWJsZSBkZXZpYXRpb25XZWlnaHQsIE9iamVjdFR5cGUgdHlwZSwgZmxvYXQgcmVwbGFjZVZhbHVlKTsNCitJTUFRX0ZVTkMgaW50ICAgICAgICAgICAgSU1BUV9TVERDQUxMIGltYXFNYWdpY1dhbmQoSW1hZ2UqIGRlc3QsIGNvbnN0IEltYWdlKiBzb3VyY2UsIFBvaW50IGNvb3JkLCBmbG9hdCB0b2xlcmFuY2UsIGludCBjb25uZWN0aXZpdHk4LCBmbG9hdCByZXBsYWNlVmFsdWUpOw0KK0lNQVFfRlVOQyBpbnQgICAgICAgICAgICBJTUFRX1NURENBTEwgaW1hcU11bHRpdGhyZXNob2xkKEltYWdlKiBkZXN0LCBjb25zdCBJbWFnZSogc291cmNlLCBjb25zdCBUaHJlc2hvbGREYXRhKiByYW5nZXMsIGludCBudW1SYW5nZXMpOw0KK0lNQVFfRlVOQyBpbnQgICAgICAgICAgICBJTUFRX1NURENBTEwgaW1hcVRocmVzaG9sZChJbWFnZSogZGVzdCwgY29uc3QgSW1hZ2UqIHNvdXJjZSwgZmxvYXQgcmFuZ2VNaW4sIGZsb2F0IHJhbmdlTWF4LCBpbnQgdXNlTmV3VmFsdWUsIGZsb2F0IG5ld1ZhbHVlKTsNCisNCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisvLyAgTWVtb3J5IE1hbmFnZW1lbnQgZnVuY3Rpb25zDQorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorSU1BUV9GVU5DIGludCBJTUFRX1NURENBTEwgaW1hcURpc3Bvc2Uodm9pZCogb2JqZWN0KTsNCisNCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisvLyAgUGF0dGVybiBNYXRjaGluZyBmdW5jdGlvbnMNCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCitJTUFRX0ZVTkMgQ2lyY2xlTWF0Y2gqICAgICAgICAgICAgICBJTUFRX1NURENBTEwgaW1hcURldGVjdENpcmNsZXMoY29uc3QgSW1hZ2UqIGltYWdlLCBjb25zdCBDaXJjbGVEZXNjcmlwdG9yKiBjaXJjbGVEZXNjcmlwdG9yLCBjb25zdCBDdXJ2ZU9wdGlvbnMqIGN1cnZlT3B0aW9ucywgY29uc3QgU2hhcGVEZXRlY3Rpb25PcHRpb25zKiBzaGFwZURldGVjdGlvbk9wdGlvbnMsIGNvbnN0IFJPSSogcm9pLCBpbnQqIG51bU1hdGNoZXNSZXR1cm5lZCk7DQorSU1BUV9GVU5DIEVsbGlwc2VNYXRjaCogICAgICAgICAgICAgSU1BUV9TVERDQUxMIGltYXFEZXRlY3RFbGxpcHNlcyhjb25zdCBJbWFnZSogaW1hZ2UsIGNvbnN0IEVsbGlwc2VEZXNjcmlwdG9yKiBlbGxpcHNlRGVzY3JpcHRvciwgY29uc3QgQ3VydmVPcHRpb25zKiBjdXJ2ZU9wdGlvbnMsIGNvbnN0IFNoYXBlRGV0ZWN0aW9uT3B0aW9ucyogc2hhcGVEZXRlY3Rpb25PcHRpb25zLCBjb25zdCBST0kqIHJvaSwgaW50KiBudW1NYXRjaGVzUmV0dXJuZWQpOw0KK0lNQVFfRlVOQyBMaW5lTWF0Y2gqICAgICAgICAgICAgICAgIElNQVFfU1REQ0FMTCBpbWFxRGV0ZWN0TGluZXMoY29uc3QgSW1hZ2UqIGltYWdlLCBjb25zdCBMaW5lRGVzY3JpcHRvciogbGluZURlc2NyaXB0b3IsIGNvbnN0IEN1cnZlT3B0aW9ucyogY3VydmVPcHRpb25zLCBjb25zdCBTaGFwZURldGVjdGlvbk9wdGlvbnMqIHNoYXBlRGV0ZWN0aW9uT3B0aW9ucywgY29uc3QgUk9JKiByb2ksIGludCogbnVtTWF0Y2hlc1JldHVybmVkKTsNCitJTUFRX0ZVTkMgUmVjdGFuZ2xlTWF0Y2gqICAgICAgICAgICBJTUFRX1NURENBTEwgaW1hcURldGVjdFJlY3RhbmdsZXMoY29uc3QgSW1hZ2UqIGltYWdlLCBjb25zdCBSZWN0YW5nbGVEZXNjcmlwdG9yKiByZWN0YW5nbGVEZXNjcmlwdG9yLCBjb25zdCBDdXJ2ZU9wdGlvbnMqIGN1cnZlT3B0aW9ucywgY29uc3QgU2hhcGVEZXRlY3Rpb25PcHRpb25zKiBzaGFwZURldGVjdGlvbk9wdGlvbnMsIGNvbnN0IFJPSSogcm9pLCBpbnQqIG51bU1hdGNoZXNSZXR1cm5lZCk7DQorSU1BUV9GVU5DIEZlYXR1cmVEYXRhKiAgICAgICAgICAgICAgSU1BUV9TVERDQUxMIGltYXFHZXRHZW9tZXRyaWNGZWF0dXJlc0Zyb21DdXJ2ZXMoY29uc3QgQ3VydmUqIGN1cnZlcywgdW5zaWduZWQgaW50IG51bUN1cnZlcywgY29uc3QgRmVhdHVyZVR5cGUqIGZlYXR1cmVUeXBlcywgdW5zaWduZWQgaW50IG51bUZlYXR1cmVUeXBlcywgdW5zaWduZWQgaW50KiBudW1GZWF0dXJlcyk7DQorSU1BUV9GVU5DIEZlYXR1cmVEYXRhKiAgICAgICAgICAgICAgSU1BUV9TVERDQUxMIGltYXFHZXRHZW9tZXRyaWNUZW1wbGF0ZUZlYXR1cmVJbmZvKGNvbnN0IEltYWdlKiBwYXR0ZXJuLCB1bnNpZ25lZCBpbnQqIG51bUZlYXR1cmVzKTsNCitJTUFRX0ZVTkMgaW50ICAgICAgICAgICAgICAgICAgICAgICBJTUFRX1NURENBTEwgaW1hcUxlYXJuQ29sb3JQYXR0ZXJuKEltYWdlKiBpbWFnZSwgY29uc3QgTGVhcm5Db2xvclBhdHRlcm5PcHRpb25zKiBvcHRpb25zKTsNCitJTUFRX0ZVTkMgaW50ICAgICAgICAgICAgICAgICAgICAgICBJTUFRX1NURENBTEwgaW1hcUxlYXJuR2VvbWV0cmljUGF0dGVybihJbWFnZSogaW1hZ2UsIFBvaW50RmxvYXQgb3JpZ2luT2Zmc2V0LCBjb25zdCBDdXJ2ZU9wdGlvbnMqIGN1cnZlT3B0aW9ucywgY29uc3QgTGVhcm5HZW9tZXRyaWNQYXR0ZXJuQWR2YW5jZWRPcHRpb25zKiBhZHZhbmNlZExlYXJuT3B0aW9ucywgY29uc3QgSW1hZ2UqIG1hc2spOw0KK0lNQVFfRlVOQyBNdWx0aXBsZUdlb21ldHJpY1BhdHRlcm4qIElNQVFfU1REQ0FMTCBpbWFxTGVhcm5NdWx0aXBsZUdlb21ldHJpY1BhdHRlcm5zKGNvbnN0IEltYWdlKiogcGF0dGVybnMsIHVuc2lnbmVkIGludCBudW1iZXJPZlBhdHRlcm5zLCBjb25zdCBTdHJpbmcyNTUqIGxhYmVscyk7DQorSU1BUV9GVU5DIGludCAgICAgICAgICAgICAgICAgICAgICAgSU1BUV9TVERDQUxMIGltYXFMZWFyblBhdHRlcm4zKEltYWdlKiBpbWFnZSwgTGVhcm5pbmdNb2RlIGxlYXJuaW5nTW9kZSwgTGVhcm5QYXR0ZXJuQWR2YW5jZWRPcHRpb25zKiBhZHZhbmNlZE9wdGlvbnMsIGNvbnN0IEltYWdlKiBtYXNrKTsNCitJTUFRX0ZVTkMgUGF0dGVybk1hdGNoKiAgICAgICAgICAgICBJTUFRX1NURENBTEwgaW1hcU1hdGNoQ29sb3JQYXR0ZXJuKGNvbnN0IEltYWdlKiBpbWFnZSwgSW1hZ2UqIHBhdHRlcm4sIGNvbnN0IE1hdGNoQ29sb3JQYXR0ZXJuT3B0aW9ucyogb3B0aW9ucywgUmVjdCBzZWFyY2hSZWN0LCBpbnQqIG51bU1hdGNoZXMpOw0KK0lNQVFfRlVOQyBHZW9tZXRyaWNQYXR0ZXJuTWF0Y2gyKiAgIElNQVFfU1REQ0FMTCBpbWFxTWF0Y2hHZW9tZXRyaWNQYXR0ZXJuMihjb25zdCBJbWFnZSogaW1hZ2UsIGNvbnN0IEltYWdlKiBwYXR0ZXJuLCBjb25zdCBDdXJ2ZU9wdGlvbnMqIGN1cnZlT3B0aW9ucywgY29uc3QgTWF0Y2hHZW9tZXRyaWNQYXR0ZXJuT3B0aW9ucyogbWF0Y2hPcHRpb25zLCBjb25zdCBNYXRjaEdlb21ldHJpY1BhdHRlcm5BZHZhbmNlZE9wdGlvbnMyKiBhZHZhbmNlZE1hdGNoT3B0aW9ucywgY29uc3QgUk9JKiByb2ksIGludCogbnVtTWF0Y2hlcyk7DQorSU1BUV9GVU5DIEdlb21ldHJpY1BhdHRlcm5NYXRjaDIqICAgSU1BUV9TVERDQUxMIGltYXFNYXRjaE11bHRpcGxlR2VvbWV0cmljUGF0dGVybnMoY29uc3QgSW1hZ2UqIGltYWdlLCBjb25zdCBNdWx0aXBsZUdlb21ldHJpY1BhdHRlcm4qIG11bHRpcGxlUGF0dGVybiwgY29uc3QgUk9JKiByb2ksIGludCogbnVtTWF0Y2hlcyk7DQorSU1BUV9GVU5DIE11bHRpcGxlR2VvbWV0cmljUGF0dGVybiogSU1BUV9TVERDQUxMIGltYXFSZWFkTXVsdGlwbGVHZW9tZXRyaWNQYXR0ZXJuRmlsZShjb25zdCBjaGFyKiBmaWxlTmFtZSwgU3RyaW5nMjU1IGRlc2NyaXB0aW9uKTsNCitJTUFRX0ZVTkMgUGF0dGVybk1hdGNoKiAgICAgICAgICAgICBJTUFRX1NURENBTEwgaW1hcVJlZmluZU1hdGNoZXMoY29uc3QgSW1hZ2UqIGltYWdlLCBjb25zdCBJbWFnZSogcGF0dGVybiwgY29uc3QgUGF0dGVybk1hdGNoKiBjYW5kaWRhdGVzSW4sIGludCBudW1DYW5kaWRhdGVzSW4sIE1hdGNoUGF0dGVybk9wdGlvbnMqIG9wdGlvbnMsIE1hdGNoUGF0dGVybkFkdmFuY2VkT3B0aW9ucyogYWR2YW5jZWRPcHRpb25zLCBpbnQqIG51bUNhbmRpZGF0ZXNPdXQpOw0KK0lNQVFfRlVOQyBpbnQgICAgICAgICAgICAgICAgICAgICAgIElNQVFfU1REQ0FMTCBpbWFxU2V0TXVsdGlwbGVHZW9tZXRyaWNQYXR0ZXJuc09wdGlvbnMoTXVsdGlwbGVHZW9tZXRyaWNQYXR0ZXJuKiBtdWx0aXBsZVBhdHRlcm4sIGNvbnN0IGNoYXIqIGxhYmVsLCBjb25zdCBDdXJ2ZU9wdGlvbnMqIGN1cnZlT3B0aW9ucywgY29uc3QgTWF0Y2hHZW9tZXRyaWNQYXR0ZXJuT3B0aW9ucyogbWF0Y2hPcHRpb25zLCBjb25zdCBNYXRjaEdlb21ldHJpY1BhdHRlcm5BZHZhbmNlZE9wdGlvbnMyKiBhZHZhbmNlZE1hdGNoT3B0aW9ucyk7DQorSU1BUV9GVU5DIGludCAgICAgICAgICAgICAgICAgICAgICAgSU1BUV9TVERDQUxMIGltYXFXcml0ZU11bHRpcGxlR2VvbWV0cmljUGF0dGVybkZpbGUoY29uc3QgTXVsdGlwbGVHZW9tZXRyaWNQYXR0ZXJuKiBtdWx0aXBsZVBhdHRlcm4sIGNvbnN0IGNoYXIqIGZpbGVOYW1lLCBjb25zdCBjaGFyKiBkZXNjcmlwdGlvbik7DQorSU1BUV9GVU5DIEdlb21ldHJpY1BhdHRlcm5NYXRjaDMqICAgSU1BUV9TVERDQUxMIGltYXFNYXRjaEdlb21ldHJpY1BhdHRlcm4zKGNvbnN0IEltYWdlKiBpbWFnZSwgY29uc3QgSW1hZ2UqIHBhdHRlcm4sIGNvbnN0IEN1cnZlT3B0aW9ucyogY3VydmVPcHRpb25zLCBjb25zdCBNYXRjaEdlb21ldHJpY1BhdHRlcm5PcHRpb25zKiBtYXRjaE9wdGlvbnMsIGNvbnN0IE1hdGNoR2VvbWV0cmljUGF0dGVybkFkdmFuY2VkT3B0aW9uczMqIGFkdmFuY2VkTWF0Y2hPcHRpb25zLCBjb25zdCBST0kqIHJvaSwgc2l6ZV90KiBudW1NYXRjaGVzKTsNCitJTUFRX0ZVTkMgaW50ICAgICAgICAgICAgICAgICAgICAgICBJTUFRX1NURENBTEwgaW1hcUxlYXJuR2VvbWV0cmljUGF0dGVybjIoSW1hZ2UqIGltYWdlLCBQb2ludEZsb2F0IG9yaWdpbk9mZnNldCwgZG91YmxlIGFuZ2xlT2Zmc2V0LCBjb25zdCBDdXJ2ZU9wdGlvbnMqIGN1cnZlT3B0aW9ucywgY29uc3QgTGVhcm5HZW9tZXRyaWNQYXR0ZXJuQWR2YW5jZWRPcHRpb25zMiogYWR2YW5jZWRMZWFybk9wdGlvbnMsIGNvbnN0IEltYWdlKiBtYXNrKTsNCitJTUFRX0ZVTkMgUGF0dGVybk1hdGNoKiAgICAgICAgICAgICBJTUFRX1NURENBTEwgaW1hcU1hdGNoUGF0dGVybjMoY29uc3QgSW1hZ2UqIGltYWdlLCBjb25zdCBJbWFnZSogcGF0dGVybiwgY29uc3QgTWF0Y2hQYXR0ZXJuT3B0aW9ucyogb3B0aW9ucywgY29uc3QgTWF0Y2hQYXR0ZXJuQWR2YW5jZWRPcHRpb25zKiBhZHZhbmNlZE9wdGlvbnMsIGNvbnN0IFJPSSogcm9pLCBpbnQqIG51bU1hdGNoZXMpOw0KKw0KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKy8vICBPdmVybGF5IGZ1bmN0aW9ucw0KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KK0lNQVFfRlVOQyBpbnQgSU1BUV9TVERDQUxMIGltYXFDbGVhck92ZXJsYXkoSW1hZ2UqIGltYWdlLCBjb25zdCBjaGFyKiBncm91cCk7DQorSU1BUV9GVU5DIGludCBJTUFRX1NURENBTEwgaW1hcUNvcHlPdmVybGF5KEltYWdlKiBkZXN0LCBjb25zdCBJbWFnZSogc291cmNlLCBjb25zdCBjaGFyKiBncm91cCk7DQorSU1BUV9GVU5DIGludCBJTUFRX1NURENBTEwgaW1hcUdldE92ZXJsYXlQcm9wZXJ0aWVzKGNvbnN0IEltYWdlKiBpbWFnZSwgY29uc3QgY2hhciogZ3JvdXAsIFRyYW5zZm9ybUJlaGF2aW9ycyogdHJhbnNmb3JtQmVoYXZpb3JzKTsNCitJTUFRX0ZVTkMgaW50IElNQVFfU1REQ0FMTCBpbWFxTWVyZ2VPdmVybGF5KEltYWdlKiBkZXN0LCBjb25zdCBJbWFnZSogc291cmNlLCBjb25zdCBSR0JWYWx1ZSogcGFsZXR0ZSwgdW5zaWduZWQgaW50IG51bUNvbG9ycywgY29uc3QgY2hhciogZ3JvdXApOw0KK0lNQVFfRlVOQyBpbnQgSU1BUV9TVERDQUxMIGltYXFPdmVybGF5QXJjKEltYWdlKiBpbWFnZSwgY29uc3QgQXJjSW5mbyogYXJjLCBjb25zdCBSR0JWYWx1ZSogY29sb3IsIERyYXdNb2RlIGRyYXdNb2RlLCBjb25zdCBjaGFyKiBncm91cCk7DQorSU1BUV9GVU5DIGludCBJTUFRX1NURENBTEwgaW1hcU92ZXJsYXlCaXRtYXAoSW1hZ2UqIGltYWdlLCBQb2ludCBkZXN0TG9jLCBjb25zdCBSR0JWYWx1ZSogYml0bWFwLCB1bnNpZ25lZCBpbnQgbnVtQ29scywgdW5zaWduZWQgaW50IG51bVJvd3MsIGNvbnN0IGNoYXIqIGdyb3VwKTsNCitJTUFRX0ZVTkMgaW50IElNQVFfU1REQ0FMTCBpbWFxT3ZlcmxheUNsb3NlZENvbnRvdXIoSW1hZ2UqIGltYWdlLCBjb25zdCBQb2ludCogcG9pbnRzLCBpbnQgbnVtUG9pbnRzLCBjb25zdCBSR0JWYWx1ZSogY29sb3IsIERyYXdNb2RlIGRyYXdNb2RlLCBjb25zdCBjaGFyKiBncm91cCk7DQorSU1BUV9GVU5DIGludCBJTUFRX1NURENBTEwgaW1hcU92ZXJsYXlMaW5lKEltYWdlKiBpbWFnZSwgUG9pbnQgc3RhcnQsIFBvaW50IGVuZCwgY29uc3QgUkdCVmFsdWUqIGNvbG9yLCBjb25zdCBjaGFyKiBncm91cCk7DQorSU1BUV9GVU5DIGludCBJTUFRX1NURENBTEwgaW1hcU92ZXJsYXlNZXRhZmlsZShJbWFnZSogaW1hZ2UsIGNvbnN0IHZvaWQqIG1ldGFmaWxlLCBSZWN0IHJlY3QsIGNvbnN0IGNoYXIqIGdyb3VwKTsNCitJTUFRX0ZVTkMgaW50IElNQVFfU1REQ0FMTCBpbWFxT3ZlcmxheU9wZW5Db250b3VyKEltYWdlKiBpbWFnZSwgY29uc3QgUG9pbnQqIHBvaW50cywgaW50IG51bVBvaW50cywgY29uc3QgUkdCVmFsdWUqIGNvbG9yLCBjb25zdCBjaGFyKiBncm91cCk7DQorSU1BUV9GVU5DIGludCBJTUFRX1NURENBTEwgaW1hcU92ZXJsYXlPdmFsKEltYWdlKiBpbWFnZSwgUmVjdCBib3VuZGluZ0JveCwgY29uc3QgUkdCVmFsdWUqIGNvbG9yLCBEcmF3TW9kZSBkcmF3TW9kZSwgY2hhciogZ3JvdXApOw0KK0lNQVFfRlVOQyBpbnQgSU1BUV9TVERDQUxMIGltYXFPdmVybGF5UG9pbnRzKEltYWdlKiBpbWFnZSwgY29uc3QgUG9pbnQqIHBvaW50cywgaW50IG51bVBvaW50cywgY29uc3QgUkdCVmFsdWUqIGNvbG9ycywgaW50IG51bUNvbG9ycywgUG9pbnRTeW1ib2wgc3ltYm9sLCBjb25zdCBVc2VyUG9pbnRTeW1ib2wqIHVzZXJTeW1ib2wsIGNvbnN0IGNoYXIqIGdyb3VwKTsNCitJTUFRX0ZVTkMgaW50IElNQVFfU1REQ0FMTCBpbWFxT3ZlcmxheVJlY3QoSW1hZ2UqIGltYWdlLCBSZWN0IHJlY3QsIGNvbnN0IFJHQlZhbHVlKiBjb2xvciwgRHJhd01vZGUgZHJhd01vZGUsIGNvbnN0IGNoYXIqIGdyb3VwKTsNCitJTUFRX0ZVTkMgaW50IElNQVFfU1REQ0FMTCBpbWFxT3ZlcmxheVJPSShJbWFnZSogaW1hZ2UsIGNvbnN0IFJPSSogcm9pLCBQb2ludFN5bWJvbCBzeW1ib2wsIGNvbnN0IFVzZXJQb2ludFN5bWJvbCogdXNlclN5bWJvbCwgY29uc3QgY2hhciogZ3JvdXApOw0KK0lNQVFfRlVOQyBpbnQgSU1BUV9TVERDQUxMIGltYXFPdmVybGF5VGV4dChJbWFnZSogaW1hZ2UsIFBvaW50IG9yaWdpbiwgY29uc3QgY2hhciogdGV4dCwgY29uc3QgUkdCVmFsdWUqIGNvbG9yLCBjb25zdCBPdmVybGF5VGV4dE9wdGlvbnMqIG9wdGlvbnMsIGNvbnN0IGNoYXIqIGdyb3VwKTsNCitJTUFRX0ZVTkMgaW50IElNQVFfU1REQ0FMTCBpbWFxU2V0T3ZlcmxheVByb3BlcnRpZXMoSW1hZ2UqIGltYWdlLCBjb25zdCBjaGFyKiBncm91cCwgVHJhbnNmb3JtQmVoYXZpb3JzKiB0cmFuc2Zvcm1CZWhhdmlvcnMpOw0KKw0KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKy8vICBPQ1IgZnVuY3Rpb25zDQorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorSU1BUV9GVU5DIENoYXJTZXQqICAgICAgICAgSU1BUV9TVERDQUxMIGltYXFDcmVhdGVDaGFyU2V0KHZvaWQpOw0KK0lNQVFfRlVOQyBpbnQgICAgICAgICAgICAgIElNQVFfU1REQ0FMTCBpbWFxRGVsZXRlQ2hhcihDaGFyU2V0KiBzZXQsIGludCBpbmRleCk7DQorSU1BUV9GVU5DIGludCAgICAgICAgICAgICAgSU1BUV9TVERDQUxMIGltYXFHZXRDaGFyQ291bnQoY29uc3QgQ2hhclNldCogc2V0KTsNCitJTUFRX0ZVTkMgQ2hhckluZm8yKiAgICAgICBJTUFRX1NURENBTEwgaW1hcUdldENoYXJJbmZvMihjb25zdCBDaGFyU2V0KiBzZXQsIGludCBpbmRleCk7DQorSU1BUV9GVU5DIGludCAgICAgICAgICAgICAgSU1BUV9TVERDQUxMIGltYXFSZWFkT0NSRmlsZShjb25zdCBjaGFyKiBmaWxlTmFtZSwgQ2hhclNldCogc2V0LCBTdHJpbmcyNTUgc2V0RGVzY3JpcHRpb24sIFJlYWRUZXh0T3B0aW9ucyogcmVhZE9wdGlvbnMsIE9DUlByb2Nlc3NpbmdPcHRpb25zKiBwcm9jZXNzaW5nT3B0aW9ucywgT0NSU3BhY2luZ09wdGlvbnMqIHNwYWNpbmdPcHRpb25zKTsNCitJTUFRX0ZVTkMgUmVhZFRleHRSZXBvcnQzKiBJTUFRX1NURENBTEwgaW1hcVJlYWRUZXh0Myhjb25zdCBJbWFnZSogaW1hZ2UsIGNvbnN0IENoYXJTZXQqIHNldCwgY29uc3QgUk9JKiByb2ksIGNvbnN0IFJlYWRUZXh0T3B0aW9ucyogcmVhZE9wdGlvbnMsIGNvbnN0IE9DUlByb2Nlc3NpbmdPcHRpb25zKiBwcm9jZXNzaW5nT3B0aW9ucywgY29uc3QgT0NSU3BhY2luZ09wdGlvbnMqIHNwYWNpbmdPcHRpb25zKTsNCitJTUFRX0ZVTkMgaW50ICAgICAgICAgICAgICBJTUFRX1NURENBTEwgaW1hcVJlbmFtZUNoYXIoQ2hhclNldCogc2V0LCBpbnQgaW5kZXgsIGNvbnN0IGNoYXIqIG5ld0NoYXJWYWx1ZSk7DQorSU1BUV9GVU5DIGludCAgICAgICAgICAgICAgSU1BUV9TVERDQUxMIGltYXFTZXRSZWZlcmVuY2VDaGFyKGNvbnN0IENoYXJTZXQqIHNldCwgaW50IGluZGV4LCBpbnQgaXNSZWZlcmVuY2VDaGFyKTsNCitJTUFRX0ZVTkMgaW50ICAgICAgICAgICAgICBJTUFRX1NURENBTEwgaW1hcVRyYWluQ2hhcnMoY29uc3QgSW1hZ2UqIGltYWdlLCBDaGFyU2V0KiBzZXQsIGludCBpbmRleCwgY29uc3QgY2hhciogY2hhclZhbHVlLCBjb25zdCBST0kqIHJvaSwgY29uc3QgT0NSUHJvY2Vzc2luZ09wdGlvbnMqIHByb2Nlc3NpbmdPcHRpb25zLCBjb25zdCBPQ1JTcGFjaW5nT3B0aW9ucyogc3BhY2luZ09wdGlvbnMpOw0KK0lNQVFfRlVOQyBpbnQqICAgICAgICAgICAgIElNQVFfU1REQ0FMTCBpbWFxVmVyaWZ5UGF0dGVybnMoY29uc3QgSW1hZ2UqIGltYWdlLCBjb25zdCBDaGFyU2V0KiBzZXQsIGNvbnN0IFN0cmluZzI1NSogZXhwZWN0ZWRQYXR0ZXJucywgaW50IHBhdHRlcm5Db3VudCwgY29uc3QgUk9JKiByb2ksIGludCogbnVtU2NvcmVzKTsNCitJTUFRX0ZVTkMgaW50KiAgICAgICAgICAgICBJTUFRX1NURENBTEwgaW1hcVZlcmlmeVRleHQoY29uc3QgSW1hZ2UqIGltYWdlLCBjb25zdCBDaGFyU2V0KiBzZXQsIGNvbnN0IGNoYXIqIGV4cGVjdGVkU3RyaW5nLCBjb25zdCBST0kqIHJvaSwgaW50KiBudW1TY29yZXMpOw0KK0lNQVFfRlVOQyBpbnQgICAgICAgICAgICAgIElNQVFfU1REQ0FMTCBpbWFxV3JpdGVPQ1JGaWxlKGNvbnN0IGNoYXIqIGZpbGVOYW1lLCBjb25zdCBDaGFyU2V0KiBzZXQsIGNvbnN0IGNoYXIqIHNldERlc2NyaXB0aW9uLCBjb25zdCBSZWFkVGV4dE9wdGlvbnMqIHJlYWRPcHRpb25zLCBjb25zdCBPQ1JQcm9jZXNzaW5nT3B0aW9ucyogcHJvY2Vzc2luZ09wdGlvbnMsIGNvbnN0IE9DUlNwYWNpbmdPcHRpb25zKiBzcGFjaW5nT3B0aW9ucyk7DQorDQorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorLy8gIEdlb21ldHJpYyBNYXRjaGluZyBmdW5jdGlvbnMNCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCitJTUFRX0ZVTkMgRXh0cmFjdENvbnRvdXJSZXBvcnQqICAgICAgICAgIElNQVFfU1REQ0FMTCBpbWFxRXh0cmFjdENvbnRvdXIoSW1hZ2UqIGltYWdlLCBjb25zdCBST0kqIHJvaSwgRXh0cmFjdENvbnRvdXJEaXJlY3Rpb24gZGlyZWN0aW9uLCBDdXJ2ZVBhcmFtZXRlcnMqIGN1cnZlUGFyYW1zLCBjb25zdCBDb25uZWN0aW9uQ29uc3RyYWludCogY29ubmVjdGlvbkNvbnN0cmFpbnRQYXJhbXMsIHVuc2lnbmVkIGludCBudW1PZkNvbnN0cmFpbnRzLCBFeHRyYWN0Q29udG91clNlbGVjdGlvbiBzZWxlY3Rpb24sIEltYWdlKiBjb250b3VySW1hZ2UpOw0KK0lNQVFfRlVOQyBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU1BUV9TVERDQUxMIGltYXFDb250b3VyT3ZlcmxheShJbWFnZSogaW1hZ2UsIGNvbnN0IEltYWdlKiBjb250b3VySW1hZ2UsIGNvbnN0IENvbnRvdXJPdmVybGF5U2V0dGluZ3MqIHBvaW50c1NldHRpbmdzLCBjb25zdCBDb250b3VyT3ZlcmxheVNldHRpbmdzKiBlcW5TZXR0aW5ncywgY29uc3QgY2hhciogZ3JvdXBOYW1lKTsNCitJTUFRX0ZVTkMgQ29udG91ckNvbXB1dGVDdXJ2YXR1cmVSZXBvcnQqIElNQVFfU1REQ0FMTCBpbWFxQ29udG91ckNvbXB1dGVDdXJ2YXR1cmUoY29uc3QgSW1hZ2UqIGNvbnRvdXJJbWFnZSwgdW5zaWduZWQgaW50IGtlcm5lbCk7DQorSU1BUV9GVU5DIEN1cnZhdHVyZUFuYWx5c2lzUmVwb3J0KiAgICAgICBJTUFRX1NURENBTEwgaW1hcUNvbnRvdXJDbGFzc2lmeUN1cnZhdHVyZShjb25zdCBJbWFnZSogY29udG91ckltYWdlLCB1bnNpZ25lZCBpbnQga2VybmVsLCBSYW5nZUxhYmVsKiBjdXJ2YXR1cmVDbGFzc2VzLCB1bnNpZ25lZCBpbnQgbnVtQ3VydmF0dXJlQ2xhc3Nlcyk7DQorSU1BUV9GVU5DIENvbXB1dGVEaXN0YW5jZXNSZXBvcnQqICAgICAgICBJTUFRX1NURENBTEwgaW1hcUNvbnRvdXJDb21wdXRlRGlzdGFuY2VzKGNvbnN0IEltYWdlKiB0YXJnZXRJbWFnZSwgY29uc3QgSW1hZ2UqIHRlbXBsYXRlSW1hZ2UsIGNvbnN0IFNldHVwTWF0Y2hQYXR0ZXJuRGF0YSogbWF0Y2hTZXR1cERhdGEsIHVuc2lnbmVkIGludCBzbW9vdGhpbmdLZXJuZWwpOw0KK0lNQVFfRlVOQyBDbGFzc2lmeURpc3RhbmNlc1JlcG9ydCogICAgICAgSU1BUV9TVERDQUxMIGltYXFDb250b3VyQ2xhc3NpZnlEaXN0YW5jZXMoY29uc3QgSW1hZ2UqIHRhcmdldEltYWdlLCBjb25zdCBJbWFnZSogdGVtcGxhdGVJbWFnZSwgY29uc3QgU2V0dXBNYXRjaFBhdHRlcm5EYXRhKiBtYXRjaFNldHVwRGF0YSwgdW5zaWduZWQgaW50IHNtb290aGluZ0tlcm5lbCwgY29uc3QgUmFuZ2VMYWJlbCogZGlzdGFuY2VSYW5nZXMsIHVuc2lnbmVkIGludCBudW1EaXN0YW5jZVJhbmdlcyk7DQorSU1BUV9GVU5DIENvbnRvdXJJbmZvUmVwb3J0KiAgICAgICAgICAgICBJTUFRX1NURENBTEwgaW1hcUNvbnRvdXJJbmZvKGNvbnN0IEltYWdlKiBjb250b3VySW1hZ2UpOw0KK0lNQVFfRlVOQyBTZXR1cE1hdGNoUGF0dGVybkRhdGEqICAgICAgICAgSU1BUV9TVERDQUxMIGltYXFDb250b3VyU2V0dXBNYXRjaFBhdHRlcm4oTWF0Y2hNb2RlKiBtYXRjaE1vZGUsIHVuc2lnbmVkIGludCBlbmFibGVTdWJQaXhlbEFjY3VyYWN5LCBDdXJ2ZVBhcmFtZXRlcnMqIGN1cnZlUGFyYW1zLCB1bnNpZ25lZCBpbnQgdXNlTGVhcm5DdXJ2ZVBhcmFtZXRlcnMsIGNvbnN0IFJhbmdlU2V0dGluZ0RvdWJsZSogcmFuZ2VTZXR0aW5ncywgdW5zaWduZWQgaW50IG51bVJhbmdlU2V0dGluZ3MpOw0KK0lNQVFfRlVOQyBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU1BUV9TVERDQUxMIGltYXFDb250b3VyQWR2YW5jZWRTZXR1cE1hdGNoUGF0dGVybihTZXR1cE1hdGNoUGF0dGVybkRhdGEqIG1hdGNoU2V0dXBEYXRhLCBHZW9tZXRyaWNBZHZhbmNlZFNldHVwRGF0YU9wdGlvbiogZ2VvbWV0cmljT3B0aW9ucywgdW5zaWduZWQgaW50IG51bUdlb21ldHJpY09wdGlvbnMpOw0KK0lNQVFfRlVOQyBDb250b3VyRml0TGluZVJlcG9ydCogICAgICAgICAgSU1BUV9TVERDQUxMIGltYXFDb250b3VyRml0TGluZShJbWFnZSogaW1hZ2UsIGRvdWJsZSBwaXhlbFJhZGl1cyk7DQorSU1BUV9GVU5DIFBhcnRpYWxDaXJjbGUqICAgICAgICAgICAgICAgICBJTUFRX1NURENBTEwgaW1hcUNvbnRvdXJGaXRDaXJjbGUoSW1hZ2UqIGltYWdlLCBkb3VibGUgcGl4ZWxSYWRpdXMsIGludCByZWplY3RPdXRsaWVycyk7DQorSU1BUV9GVU5DIFBhcnRpYWxFbGxpcHNlKiAgICAgICAgICAgICAgICBJTUFRX1NURENBTEwgaW1hcUNvbnRvdXJGaXRFbGxpcHNlKEltYWdlKiBpbWFnZSwgZG91YmxlIHBpeGVsUmFkaXVzLCBpbnQgcmVqZWN0T3V0bGllcnMpOw0KK0lNQVFfRlVOQyBDb250b3VyRml0U3BsaW5lUmVwb3J0KiAgICAgICAgSU1BUV9TVERDQUxMIGltYXFDb250b3VyRml0U3BsaW5lKEltYWdlKiBpbWFnZSwgaW50IGRlZ3JlZSwgaW50IG51bWJlck9mQ29udHJvbFBvaW50cyk7DQorSU1BUV9GVU5DIENvbnRvdXJGaXRQb2x5bm9taWFsUmVwb3J0KiAgICBJTUFRX1NURENBTEwgaW1hcUNvbnRvdXJGaXRQb2x5bm9taWFsKEltYWdlKiBpbWFnZSwgaW50IG9yZGVyKTsNCisNCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisvLyAgRWRnZSBEZXRlY3Rpb24gZnVuY3Rpb25zDQorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorSU1BUV9GVU5DIEZpbmRDaXJjdWxhckVkZ2VSZXBvcnQqICAgSU1BUV9TVERDQUxMIGltYXFGaW5kQ2lyY3VsYXJFZGdlMihJbWFnZSogaW1hZ2UsIGNvbnN0IFJPSSogcm9pLCBjb25zdCBDb29yZGluYXRlU3lzdGVtKiBiYXNlU3lzdGVtLCBjb25zdCBDb29yZGluYXRlU3lzdGVtKiBuZXdTeXN0ZW0sIGNvbnN0IEZpbmRDaXJjdWxhckVkZ2VPcHRpb25zKiBlZGdlT3B0aW9ucywgY29uc3QgQ2lyY2xlRml0T3B0aW9ucyogY2lyY2xlRml0T3B0aW9ucyk7DQorSU1BUV9GVU5DIEZpbmRDb25jZW50cmljRWRnZVJlcG9ydCogSU1BUV9TVERDQUxMIGltYXFGaW5kQ29uY2VudHJpY0VkZ2UyKEltYWdlKiBpbWFnZSwgY29uc3QgUk9JKiByb2ksIGNvbnN0IENvb3JkaW5hdGVTeXN0ZW0qIGJhc2VTeXN0ZW0sIGNvbnN0IENvb3JkaW5hdGVTeXN0ZW0qIG5ld1N5c3RlbSwgY29uc3QgRmluZENvbmNlbnRyaWNFZGdlT3B0aW9ucyogZWRnZU9wdGlvbnMsIGNvbnN0IENvbmNlbnRyaWNFZGdlRml0T3B0aW9ucyogY29uY2VudHJpY0VkZ2VGaXRPcHRpb25zKTsNCisNCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisvLyAgTW9ycGhvbG9neSBSZWNvbnN0cnVjdGlvbiBmdW5jdGlvbnMNCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCitJTUFRX0ZVTkMgaW50IElNQVFfU1REQ0FMTCBpbWFxR3JheU1vcnBob2xvZ3lSZWNvbnN0cnVjdChJbWFnZSogZHN0SW1hZ2UsIEltYWdlKiBzcmNJbWFnZSwgY29uc3QgSW1hZ2UqIG1hcmtlckltYWdlLCBQb2ludEZsb2F0KiBwb2ludHMsIGludCBudW1PZlBvaW50cywgTW9ycGhvbG9neVJlY29uc3RydWN0T3BlcmF0aW9uIG9wZXJhdGlvbiwgY29uc3QgU3RydWN0dXJpbmdFbGVtZW50KiBzdHJ1Y3R1cmluZ0VsZW1lbnQsIGNvbnN0IFJPSSogcm9pKTsNCitJTUFRX0ZVTkMgaW50IElNQVFfU1REQ0FMTCBpbWFxTW9ycGhvbG9neVJlY29uc3RydWN0KEltYWdlKiBkc3RJbWFnZSwgSW1hZ2UqIHNyY0ltYWdlLCBjb25zdCBJbWFnZSogbWFya2VySW1hZ2UsIFBvaW50RmxvYXQqIHBvaW50cywgaW50IG51bU9mUG9pbnRzLCBNb3JwaG9sb2d5UmVjb25zdHJ1Y3RPcGVyYXRpb24gb3BlcmF0aW9uLCBDb25uZWN0aXZpdHkgY29ubmVjdGl2aXR5LCBjb25zdCBST0kqIHJvaSk7DQorDQorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorLy8gIFRleHR1cmUgZnVuY3Rpb25zDQorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorSU1BUV9GVU5DIGludCAgICAgICAgICAgICAgICAgICAgICAgICAgIElNQVFfU1REQ0FMTCBpbWFxRGV0ZWN0VGV4dHVyZURlZmVjdChDbGFzc2lmaWVyU2Vzc2lvbiogc2Vzc2lvbiwgSW1hZ2UqIGRlc3RJbWFnZSwgY29uc3QgSW1hZ2UqIHNyY0ltYWdlLCBjb25zdCBST0kqIHJvaSwgaW50IGluaXRpYWxTdGVwU2l6ZSwgaW50IGZpbmFsU3RlcFNpemUsIHVuc2lnbmVkIGNoYXIgZGVmZWN0UGl4ZWxWYWx1ZSwgZG91YmxlIG1pbkNsYXNzaWZpY2F0aW9uU2NvcmUpOw0KK0lNQVFfRlVOQyBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICBJTUFRX1NURENBTEwgaW1hcUNsYXNzaWZpY2F0aW9uVGV4dHVyZURlZmVjdE9wdGlvbnMoQ2xhc3NpZmllclNlc3Npb24qIHNlc3Npb24sIFdpbmRvd1NpemUqIHdpbmRvd09wdGlvbnMsIFdhdmVsZXRPcHRpb25zKiB3YXZlbGV0T3B0aW9ucywgdm9pZCoqIGJhbmRzVXNlZCwgaW50KiBudW1CYW5kc1VzZWQsIENvb2NjdXJyZW5jZU9wdGlvbnMqIGNvb2NjdXJyZW5jZU9wdGlvbnMsIHVuc2lnbmVkIGNoYXIgc2V0T3BlcmF0aW9uKTsNCitJTUFRX0ZVTkMgaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgSU1BUV9TVERDQUxMIGltYXFDb29jY3VycmVuY2VNYXRyaXgoY29uc3QgSW1hZ2UqIHNyY0ltYWdlLCBjb25zdCBST0kqIHJvaSwgaW50IGxldmVsUGl4ZWwsIGNvbnN0IERpc3BsYWNlbWVudFZlY3RvciogZGlzcGxhY2VtZW50VmVjLCB2b2lkKiBmZWF0dXJlT3B0aW9uQXJyYXksIHVuc2lnbmVkIGludCBmZWF0dXJlT3B0aW9uQXJyYXlTaXplLCB2b2lkKiogY29vY2N1cnJlbmNlTWF0cml4QXJyYXksIGludCogY29vY3VycmVuY2VNYXRyaXhSb3dzLCBpbnQqIGNvb2N1cnJlbmNlTWF0cml4Q29scywgdm9pZCoqIGZlYXR1cmVWZWN0b3JBcnJheSwgaW50KiBmZWF0dXJlVmVjdG9yQXJyYXlTaXplKTsNCitJTUFRX0ZVTkMgRXh0cmFjdFRleHR1cmVGZWF0dXJlc1JlcG9ydCogSU1BUV9TVERDQUxMIGltYXFFeHRyYWN0VGV4dHVyZUZlYXR1cmVzKGNvbnN0IEltYWdlKiBzcmNJbWFnZSwgY29uc3QgUk9JKiByb2ksIGNvbnN0IFdpbmRvd1NpemUqIHdpbmRvd09wdGlvbnMsIGNvbnN0IFdhdmVsZXRPcHRpb25zKiB3YXZlbGV0T3B0aW9ucywgdm9pZCogd2F2ZWxldEJhbmRzLCB1bnNpZ25lZCBpbnQgbnVtV2F2ZWxldEJhbmRzLCBjb25zdCBDb29jY3VycmVuY2VPcHRpb25zKiBjb29jY3VycmVuY2VPcHRpb25zLCB1bnNpZ25lZCBjaGFyIHVzZVdpbmRvdyk7DQorSU1BUV9GVU5DIFdhdmVsZXRCYW5kc1JlcG9ydCogICAgICAgICAgIElNQVFfU1REQ0FMTCBpbWFxRXh0cmFjdFdhdmVsZXRCYW5kcyhjb25zdCBJbWFnZSogc3JjSW1hZ2UsIGNvbnN0IFdhdmVsZXRPcHRpb25zKiB3YXZlbGV0T3B0aW9ucywgdm9pZCogd2F2ZWxldEJhbmRzLCB1bnNpZ25lZCBpbnQgbnVtV2F2ZWxldEJhbmRzKTsNCisNCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisvLyAgUmVnaW9ucyBvZiBJbnRlcmVzdCBNYW5pcHVsYXRpb24gZnVuY3Rpb25zDQorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorSU1BUV9GVU5DIFJPSSogICAgICAgICAgICAgIElNQVFfU1REQ0FMTCBpbWFxTWFza1RvUk9JKGNvbnN0IEltYWdlKiBtYXNrLCBpbnQqIHdpdGhpbkxpbWl0KTsNCitJTUFRX0ZVTkMgUk9JUHJvZmlsZSogICAgICAgSU1BUV9TVERDQUxMIGltYXFST0lQcm9maWxlKGNvbnN0IEltYWdlKiBpbWFnZSwgY29uc3QgUk9JKiByb2kpOw0KK0lNQVFfRlVOQyBpbnQgICAgICAgICAgICAgICBJTUFRX1NURENBTEwgaW1hcVJPSVRvTWFzayhJbWFnZSogbWFzaywgY29uc3QgUk9JKiByb2ksIGludCBmaWxsVmFsdWUsIGNvbnN0IEltYWdlKiBpbWFnZU1vZGVsLCBpbnQqIGluU3BhY2UpOw0KK0lNQVFfRlVOQyBpbnQgICAgICAgICAgICAgICBJTUFRX1NURENBTEwgaW1hcVRyYW5zZm9ybVJPSTIoUk9JKiByb2ksIGNvbnN0IENvb3JkaW5hdGVTeXN0ZW0qIGJhc2VTeXN0ZW0sIGNvbnN0IENvb3JkaW5hdGVTeXN0ZW0qIG5ld1N5c3RlbSk7DQorSU1BUV9GVU5DIExhYmVsVG9ST0lSZXBvcnQqIElNQVFfU1REQ0FMTCBpbWFxTGFiZWxUb1JPSShjb25zdCBJbWFnZSogaW1hZ2UsIGNvbnN0IHVuc2lnbmVkIGludCogbGFiZWxzSW4sIHVuc2lnbmVkIGludCBudW1MYWJlbHNJbiwgaW50IG1heE51bVZlY3RvcnMsIGludCBpc0V4dGVybmVsRWRnZXMpOw0KKw0KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKy8vICBNb3JwaG9sb2d5IGZ1bmN0aW9ucw0KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KK0lNQVFfRlVOQyBpbnQgSU1BUV9TVERDQUxMIGltYXFHcmF5TW9ycGhvbG9neShJbWFnZSogZGVzdCwgSW1hZ2UqIHNvdXJjZSwgTW9ycGhvbG9neU1ldGhvZCBtZXRob2QsIGNvbnN0IFN0cnVjdHVyaW5nRWxlbWVudCogc3RydWN0dXJpbmdFbGVtZW50KTsNCisNCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisvLyAgQ2xhc3NpZmljYXRpb24gZnVuY3Rpb25zDQorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorSU1BUV9GVU5DIGludCAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTUFRX1NURENBTEwgaW1hcUFkZENsYXNzaWZpZXJTYW1wbGUoSW1hZ2UqIGltYWdlLCBDbGFzc2lmaWVyU2Vzc2lvbiogc2Vzc2lvbiwgY29uc3QgUk9JKiByb2ksIGNvbnN0IGNoYXIqIHNhbXBsZUNsYXNzLCBkb3VibGUqIGZlYXR1cmVWZWN0b3IsIHVuc2lnbmVkIGludCB2ZWN0b3JTaXplKTsNCitJTUFRX0ZVTkMgQ2xhc3NpZmllclJlcG9ydEFkdmFuY2VkKiAgICAgIElNQVFfU1REQ0FMTCBpbWFxQWR2YW5jZUNsYXNzaWZ5KEltYWdlKiBpbWFnZSwgY29uc3QgQ2xhc3NpZmllclNlc3Npb24qIHNlc3Npb24sIGNvbnN0IFJPSSogcm9pLCBkb3VibGUqIGZlYXR1cmVWZWN0b3IsIHVuc2lnbmVkIGludCB2ZWN0b3JTaXplKTsNCitJTUFRX0ZVTkMgQ2xhc3NpZmllclJlcG9ydCogICAgICAgICAgICAgIElNQVFfU1REQ0FMTCBpbWFxQ2xhc3NpZnkoSW1hZ2UqIGltYWdlLCBjb25zdCBDbGFzc2lmaWVyU2Vzc2lvbiogc2Vzc2lvbiwgY29uc3QgUk9JKiByb2ksIGRvdWJsZSogZmVhdHVyZVZlY3RvciwgdW5zaWduZWQgaW50IHZlY3RvclNpemUpOw0KK0lNQVFfRlVOQyBDbGFzc2lmaWVyU2Vzc2lvbiogICAgICAgICAgICAgSU1BUV9TVERDQUxMIGltYXFDcmVhdGVDbGFzc2lmaWVyKENsYXNzaWZpZXJUeXBlIHR5cGUpOw0KK0lNQVFfRlVOQyBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU1BUV9TVERDQUxMIGltYXFEZWxldGVDbGFzc2lmaWVyU2FtcGxlKENsYXNzaWZpZXJTZXNzaW9uKiBzZXNzaW9uLCBpbnQgaW5kZXgpOw0KK0lNQVFfRlVOQyBDbGFzc2lmaWVyQWNjdXJhY3lSZXBvcnQqICAgICAgSU1BUV9TVERDQUxMIGltYXFHZXRDbGFzc2lmaWVyQWNjdXJhY3koY29uc3QgQ2xhc3NpZmllclNlc3Npb24qIHNlc3Npb24pOw0KK0lNQVFfRlVOQyBDbGFzc2lmaWVyU2FtcGxlSW5mbyogICAgICAgICAgSU1BUV9TVERDQUxMIGltYXFHZXRDbGFzc2lmaWVyU2FtcGxlSW5mbyhjb25zdCBDbGFzc2lmaWVyU2Vzc2lvbiogc2Vzc2lvbiwgaW50IGluZGV4LCBpbnQqIG51bVNhbXBsZXMpOw0KK0lNQVFfRlVOQyBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU1BUV9TVERDQUxMIGltYXFHZXRDb2xvckNsYXNzaWZpZXJPcHRpb25zKGNvbnN0IENsYXNzaWZpZXJTZXNzaW9uKiBzZXNzaW9uLCBDb2xvck9wdGlvbnMqIG9wdGlvbnMpOw0KK0lNQVFfRlVOQyBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU1BUV9TVERDQUxMIGltYXFHZXROZWFyZXN0TmVpZ2hib3JPcHRpb25zKGNvbnN0IENsYXNzaWZpZXJTZXNzaW9uKiBzZXNzaW9uLCBOZWFyZXN0TmVpZ2hib3JPcHRpb25zKiBvcHRpb25zKTsNCitJTUFRX0ZVTkMgaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgIElNQVFfU1REQ0FMTCBpbWFxR2V0UGFydGljbGVDbGFzc2lmaWVyT3B0aW9uczIoY29uc3QgQ2xhc3NpZmllclNlc3Npb24qIHNlc3Npb24sIFBhcnRpY2xlQ2xhc3NpZmllclByZXByb2Nlc3NpbmdPcHRpb25zMiogcHJlcHJvY2Vzc2luZ09wdGlvbnMsIFBhcnRpY2xlQ2xhc3NpZmllck9wdGlvbnMqIG9wdGlvbnMpOw0KK0lNQVFfRlVOQyBDbGFzc2lmaWVyU2Vzc2lvbiogICAgICAgICAgICAgSU1BUV9TVERDQUxMIGltYXFSZWFkQ2xhc3NpZmllckZpbGUoQ2xhc3NpZmllclNlc3Npb24qIHNlc3Npb24sIGNvbnN0IGNoYXIqIGZpbGVOYW1lLCBSZWFkQ2xhc3NpZmllckZpbGVNb2RlIG1vZGUsIENsYXNzaWZpZXJUeXBlKiB0eXBlLCBDbGFzc2lmaWVyRW5naW5lVHlwZSogZW5naW5lLCBTdHJpbmcyNTUgZGVzY3JpcHRpb24pOw0KK0lNQVFfRlVOQyBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU1BUV9TVERDQUxMIGltYXFSZWxhYmVsQ2xhc3NpZmllclNhbXBsZShDbGFzc2lmaWVyU2Vzc2lvbiogc2Vzc2lvbiwgaW50IGluZGV4LCBjb25zdCBjaGFyKiBuZXdDbGFzcyk7DQorSU1BUV9GVU5DIGludCAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTUFRX1NURENBTEwgaW1hcVNldFBhcnRpY2xlQ2xhc3NpZmllck9wdGlvbnMyKENsYXNzaWZpZXJTZXNzaW9uKiBzZXNzaW9uLCBjb25zdCBQYXJ0aWNsZUNsYXNzaWZpZXJQcmVwcm9jZXNzaW5nT3B0aW9uczIqIHByZXByb2Nlc3NpbmdPcHRpb25zLCBjb25zdCBQYXJ0aWNsZUNsYXNzaWZpZXJPcHRpb25zKiBvcHRpb25zKTsNCitJTUFRX0ZVTkMgaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgIElNQVFfU1REQ0FMTCBpbWFxU2V0Q29sb3JDbGFzc2lmaWVyT3B0aW9ucyhDbGFzc2lmaWVyU2Vzc2lvbiogc2Vzc2lvbiwgY29uc3QgQ29sb3JPcHRpb25zKiBvcHRpb25zKTsNCitJTUFRX0ZVTkMgTmVhcmVzdE5laWdoYm9yVHJhaW5pbmdSZXBvcnQqIElNQVFfU1REQ0FMTCBpbWFxVHJhaW5OZWFyZXN0TmVpZ2hib3JDbGFzc2lmaWVyKENsYXNzaWZpZXJTZXNzaW9uKiBzZXNzaW9uLCBjb25zdCBOZWFyZXN0TmVpZ2hib3JPcHRpb25zKiBvcHRpb25zKTsNCitJTUFRX0ZVTkMgaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgIElNQVFfU1REQ0FMTCBpbWFxV3JpdGVDbGFzc2lmaWVyRmlsZShjb25zdCBDbGFzc2lmaWVyU2Vzc2lvbiogc2Vzc2lvbiwgY29uc3QgY2hhciogZmlsZU5hbWUsIFdyaXRlQ2xhc3NpZmllckZpbGVNb2RlIG1vZGUsIGNvbnN0IFN0cmluZzI1NSBkZXNjcmlwdGlvbik7DQorDQorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorLy8gIE1lYXN1cmUgRGlzdGFuY2VzIGZ1bmN0aW9ucw0KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KK0lNQVFfRlVOQyBDbGFtcE1heDJSZXBvcnQqIElNQVFfU1REQ0FMTCBpbWFxQ2xhbXBNYXgyKEltYWdlKiBpbWFnZSwgY29uc3QgUk9JKiByb2ksIGNvbnN0IENvb3JkaW5hdGVTeXN0ZW0qIGJhc2VTeXN0ZW0sIGNvbnN0IENvb3JkaW5hdGVTeXN0ZW0qIG5ld1N5c3RlbSwgY29uc3QgQ3VydmVPcHRpb25zKiBjdXJ2ZVNldHRpbmdzLCBjb25zdCBDbGFtcFNldHRpbmdzKiBjbGFtcFNldHRpbmdzLCBjb25zdCBDbGFtcE92ZXJsYXlTZXR0aW5ncyogY2xhbXBPdmVybGF5U2V0dGluZ3MpOw0KKw0KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKy8vICBJbnNwZWN0aW9uIGZ1bmN0aW9ucw0KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KK0lNQVFfRlVOQyBpbnQgSU1BUV9TVERDQUxMIGltYXFDb21wYXJlR29sZGVuVGVtcGxhdGUoY29uc3QgSW1hZ2UqIGltYWdlLCBjb25zdCBJbWFnZSogZ29sZGVuVGVtcGxhdGUsIEltYWdlKiBicmlnaHREZWZlY3RzLCBJbWFnZSogZGFya0RlZmVjdHMsIGNvbnN0IEluc3BlY3Rpb25BbGlnbm1lbnQqIGFsaWdubWVudCwgY29uc3QgSW5zcGVjdGlvbk9wdGlvbnMqIG9wdGlvbnMpOw0KK0lNQVFfRlVOQyBpbnQgSU1BUV9TVERDQUxMIGltYXFMZWFybkdvbGRlblRlbXBsYXRlKEltYWdlKiBnb2xkZW5UZW1wbGF0ZSwgUG9pbnRGbG9hdCBvcmlnaW5PZmZzZXQsIGNvbnN0IEltYWdlKiBtYXNrKTsNCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisvLyAgT2Jzb2xldGUgZnVuY3Rpb25zDQorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorSU1BUV9GVU5DIGludCAgICAgICAgICAgICAgICAgICAgSU1BUV9TVERDQUxMIGltYXFSb3RhdGUoSW1hZ2UqIGRlc3QsIGNvbnN0IEltYWdlKiBzb3VyY2UsIGZsb2F0IGFuZ2xlLCBQaXhlbFZhbHVlIGZpbGwsIEludGVycG9sYXRpb25NZXRob2QgbWV0aG9kKTsNCitJTUFRX0ZVTkMgaW50ICAgICAgICAgICAgICAgICAgICBJTUFRX1NURENBTEwgaW1hcVdyaXRlUE5HRmlsZShjb25zdCBJbWFnZSogaW1hZ2UsIGNvbnN0IGNoYXIqIGZpbGVOYW1lLCB1bnNpZ25lZCBpbnQgY29tcHJlc3Npb25TcGVlZCwgY29uc3QgUkdCVmFsdWUqIGNvbG9yVGFibGUpOw0KK0lNQVFfRlVOQyBQYXJ0aWNsZVJlcG9ydCogICAgICAgIElNQVFfU1REQ0FMTCBpbWFxU2VsZWN0UGFydGljbGVzKGNvbnN0IEltYWdlKiBpbWFnZSwgY29uc3QgUGFydGljbGVSZXBvcnQqIHJlcG9ydHMsIGludCByZXBvcnRDb3VudCwgaW50IHJlamVjdEJvcmRlciwgY29uc3QgU2VsZWN0UGFydGljbGVDcml0ZXJpYSogY3JpdGVyaWEsIGludCBjcml0ZXJpYUNvdW50LCBpbnQqIHNlbGVjdGVkQ291bnQpOw0KK0lNQVFfRlVOQyBpbnQgICAgICAgICAgICAgICAgICAgIElNQVFfU1REQ0FMTCBpbWFxUGFydGljbGVGaWx0ZXIoSW1hZ2UqIGRlc3QsIEltYWdlKiBzb3VyY2UsIGNvbnN0IFBhcnRpY2xlRmlsdGVyQ3JpdGVyaWEqIGNyaXRlcmlhLCBpbnQgY3JpdGVyaWFDb3VudCwgaW50IHJlamVjdE1hdGNoZXMsIGludCBjb25uZWN0aXZpdHk4KTsNCitJTUFRX0ZVTkMgUGFydGljbGVSZXBvcnQqICAgICAgICBJTUFRX1NURENBTEwgaW1hcUdldFBhcnRpY2xlSW5mbyhJbWFnZSogaW1hZ2UsIGludCBjb25uZWN0aXZpdHk4LCBQYXJ0aWNsZUluZm9Nb2RlIG1vZGUsIGludCogcmVwb3J0Q291bnQpOw0KK0lNQVFfRlVOQyBpbnQgICAgICAgICAgICAgICAgICAgIElNQVFfU1REQ0FMTCBpbWFxQ2FsY0NvZWZmKGNvbnN0IEltYWdlKiBpbWFnZSwgY29uc3QgUGFydGljbGVSZXBvcnQqIHJlcG9ydCwgTWVhc3VyZW1lbnRWYWx1ZSBwYXJhbWV0ZXIsIGZsb2F0KiBjb2VmZmljaWVudCk7DQorSU1BUV9GVU5DIEVkZ2VSZXBvcnQqICAgICAgICAgICAgSU1BUV9TVERDQUxMIGltYXFFZGdlVG9vbChjb25zdCBJbWFnZSogaW1hZ2UsIGNvbnN0IFBvaW50KiBwb2ludHMsIGludCBudW1Qb2ludHMsIGNvbnN0IEVkZ2VPcHRpb25zKiBvcHRpb25zLCBpbnQqIG51bUVkZ2VzKTsNCitJTUFRX0ZVTkMgQ2lyY2xlUmVwb3J0KiAgICAgICAgICBJTUFRX1NURENBTEwgaW1hcUNpcmNsZXMoSW1hZ2UqIGRlc3QsIGNvbnN0IEltYWdlKiBzb3VyY2UsIGZsb2F0IG1pblJhZGl1cywgZmxvYXQgbWF4UmFkaXVzLCBpbnQqIG51bUNpcmNsZXMpOw0KK0lNQVFfRlVOQyBpbnQgICAgICAgICAgICAgICAgICAgIElNQVFfU1REQ0FMTCBpbWFxTGFiZWwoSW1hZ2UqIGRlc3QsIEltYWdlKiBzb3VyY2UsIGludCBjb25uZWN0aXZpdHk4LCBpbnQqIHBhcnRpY2xlQ291bnQpOw0KK0lNQVFfRlVOQyBpbnQgICAgICAgICAgICAgICAgICAgIElNQVFfU1REQ0FMTCBpbWFxRml0RWxsaXBzZShjb25zdCBQb2ludEZsb2F0KiBwb2ludHMsIGludCBudW1Qb2ludHMsIEJlc3RFbGxpcHNlKiBlbGxpcHNlKTsNCitJTUFRX0ZVTkMgaW50ICAgICAgICAgICAgICAgICAgICBJTUFRX1NURENBTEwgaW1hcUZpdENpcmNsZShjb25zdCBQb2ludEZsb2F0KiBwb2ludHMsIGludCBudW1Qb2ludHMsIEJlc3RDaXJjbGUqIGNpcmNsZSk7DQorSU1BUV9GVU5DIENvbG9yICAgICAgICAgICAgICAgICAgSU1BUV9TVERDQUxMIGltYXFDaGFuZ2VDb2xvclNwYWNlKGNvbnN0IENvbG9yKiBzb3VyY2VDb2xvciwgQ29sb3JNb2RlIHNvdXJjZVNwYWNlLCBDb2xvck1vZGUgZGVzdFNwYWNlKTsNCitJTUFRX0ZVTkMgUGF0dGVybk1hdGNoKiAgICAgICAgICBJTUFRX1NURENBTEwgaW1hcU1hdGNoUGF0dGVybihjb25zdCBJbWFnZSogaW1hZ2UsIEltYWdlKiBwYXR0ZXJuLCBjb25zdCBNYXRjaFBhdHRlcm5PcHRpb25zKiBvcHRpb25zLCBSZWN0IHNlYXJjaFJlY3QsIGludCogbnVtTWF0Y2hlcyk7DQorSU1BUV9GVU5DIGludCAgICAgICAgICAgICAgICAgICAgSU1BUV9TVERDQUxMIGltYXFDb252ZXgoSW1hZ2UqIGRlc3QsIGNvbnN0IEltYWdlKiBzb3VyY2UpOw0KK0lNQVFfRlVOQyBpbnQgICAgICAgICAgICAgICAgICAgIElNQVFfU1REQ0FMTCBpbWFxSXNWaXNpb25JbmZvUHJlc2VudChjb25zdCBJbWFnZSogaW1hZ2UsIFZpc2lvbkluZm9UeXBlIHR5cGUsIGludCogcHJlc2VudCk7DQorSU1BUV9GVU5DIGludCAgICAgICAgICAgICAgICAgICAgSU1BUV9TVERDQUxMIGltYXFMaW5lR2F1Z2VUb29sKGNvbnN0IEltYWdlKiBpbWFnZSwgUG9pbnQgc3RhcnQsIFBvaW50IGVuZCwgTGluZUdhdWdlTWV0aG9kIG1ldGhvZCwgY29uc3QgRWRnZU9wdGlvbnMqIGVkZ2VPcHRpb25zLCBjb25zdCBDb29yZGluYXRlVHJhbnNmb3JtKiByZWZlcmVuY2UsIGZsb2F0KiBkaXN0YW5jZSk7DQorSU1BUV9GVU5DIGludCAgICAgICAgICAgICAgICAgICAgSU1BUV9TVERDQUxMIGltYXFCZXN0Q2lyY2xlKGNvbnN0IFBvaW50RmxvYXQqIHBvaW50cywgaW50IG51bVBvaW50cywgUG9pbnRGbG9hdCogY2VudGVyLCBkb3VibGUqIHJhZGl1cyk7DQorSU1BUV9GVU5DIGludCAgICAgICAgICAgICAgICAgICAgSU1BUV9TVERDQUxMIGltYXFTYXZlUGF0dGVybihjb25zdCBJbWFnZSogcGF0dGVybiwgY29uc3QgY2hhciogZmlsZU5hbWUpOw0KK0lNQVFfRlVOQyBpbnQgICAgICAgICAgICAgICAgICAgIElNQVFfU1REQ0FMTCBpbWFxTG9hZFBhdHRlcm4oSW1hZ2UqIHBhdHRlcm4sIGNvbnN0IGNoYXIqIGZpbGVOYW1lKTsNCitJTUFRX0ZVTkMgaW50ICAgICAgICAgICAgICAgICAgICBJTUFRX1NURENBTEwgaW1hcVRyYW5zZm9ybVJPSShST0kqIHJvaSwgUG9pbnQgb3JpZ2luU3RhcnQsIGZsb2F0IGFuZ2xlU3RhcnQsIFBvaW50IG9yaWdpbkZpbmFsLCBmbG9hdCBhbmdsZUZpbmFsKTsNCitJTUFRX0ZVTkMgaW50ICAgICAgICAgICAgICAgICAgICBJTUFRX1NURENBTEwgaW1hcUNvb3JkaW5hdGVSZWZlcmVuY2UoY29uc3QgUG9pbnQqIHBvaW50cywgUmVmZXJlbmNlTW9kZSBtb2RlLCBQb2ludCogb3JpZ2luLCBmbG9hdCogYW5nbGUpOw0KK0lNQVFfRlVOQyBDb250b3VySW5mbyogICAgICAgICAgIElNQVFfU1REQ0FMTCBpbWFxR2V0Q29udG91ckluZm8oY29uc3QgUk9JKiByb2ksIENvbnRvdXJJRCBpZCk7DQorSU1BUV9GVU5DIGludCAgICAgICAgICAgICAgICAgICAgSU1BUV9TVERDQUxMIGltYXFTZXRXaW5kb3dPdmVybGF5KGludCB3aW5kb3dOdW1iZXIsIGNvbnN0IE92ZXJsYXkqIG92ZXJsYXkpOw0KK0lNQVFfRlVOQyBPdmVybGF5KiAgICAgICAgICAgICAgIElNQVFfU1REQ0FMTCBpbWFxQ3JlYXRlT3ZlcmxheUZyb21ST0koY29uc3QgUk9JKiByb2kpOw0KK0lNQVFfRlVOQyBPdmVybGF5KiAgICAgICAgICAgICAgIElNQVFfU1REQ0FMTCBpbWFxQ3JlYXRlT3ZlcmxheUZyb21NZXRhZmlsZShjb25zdCB2b2lkKiBtZXRhZmlsZSk7DQorSU1BUV9GVU5DIGludCAgICAgICAgICAgICAgICAgICAgSU1BUV9TVERDQUxMIGltYXFTZXRDYWxpYnJhdGlvbkluZm8oSW1hZ2UqIGltYWdlLCBDYWxpYnJhdGlvblVuaXQgdW5pdCwgZmxvYXQgeERpc3RhbmNlLCBmbG9hdCB5RGlzdGFuY2UpOw0KK0lNQVFfRlVOQyBpbnQgICAgICAgICAgICAgICAgICAgIElNQVFfU1REQ0FMTCBpbWFxR2V0Q2FsaWJyYXRpb25JbmZvKGNvbnN0IEltYWdlKiBpbWFnZSwgQ2FsaWJyYXRpb25Vbml0KiB1bml0LCBmbG9hdCogeERpc3RhbmNlLCBmbG9hdCogeURpc3RhbmNlKTsNCitJTUFRX0ZVTkMgaW50ICAgICAgICAgICAgICAgICAgICBJTUFRX1NURENBTEwgaW1hcUNvbnN0cnVjdFJPSShjb25zdCBJbWFnZSogaW1hZ2UsIFJPSSogcm9pLCBUb29sIGluaXRpYWxUb29sLCBjb25zdCBUb29sV2luZG93T3B0aW9ucyogdG9vbHMsIGNvbnN0IENvbnN0cnVjdFJPSU9wdGlvbnMqIG9wdGlvbnMsIGludCogb2theSk7DQorSU1BUV9GVU5DIGludCAgICAgICAgICAgICAgICAgICAgSU1BUV9TVERDQUxMIGltYXFHZXRQYXJ0aWNsZUNsYXNzaWZpZXJPcHRpb25zKGNvbnN0IENsYXNzaWZpZXJTZXNzaW9uKiBzZXNzaW9uLCBQYXJ0aWNsZUNsYXNzaWZpZXJQcmVwcm9jZXNzaW5nT3B0aW9ucyogcHJlcHJvY2Vzc2luZ09wdGlvbnMsIFBhcnRpY2xlQ2xhc3NpZmllck9wdGlvbnMqIG9wdGlvbnMpOw0KK0lNQVFfRlVOQyBpbnQgICAgICAgICAgICAgICAgICAgIElNQVFfU1REQ0FMTCBpbWFxWm9vbVdpbmRvdyhpbnQgd2luZG93TnVtYmVyLCBpbnQgeFpvb20sIGludCB5Wm9vbSwgUG9pbnQgY2VudGVyKTsNCitJTUFRX0ZVTkMgaW50ICAgICAgICAgICAgICAgICAgICBJTUFRX1NURENBTEwgaW1hcUdldFdpbmRvd1pvb20oaW50IHdpbmRvd051bWJlciwgaW50KiB4Wm9vbSwgaW50KiB5Wm9vbSk7DQorSU1BUV9GVU5DIGludCAgICAgICAgICAgICAgICAgICAgSU1BUV9TVERDQUxMIGltYXFQYXJ0aWNsZUZpbHRlcjMoSW1hZ2UqIGRlc3QsIEltYWdlKiBzb3VyY2UsIGNvbnN0IFBhcnRpY2xlRmlsdGVyQ3JpdGVyaWEyKiBjcml0ZXJpYSwgaW50IGNyaXRlcmlhQ291bnQsIGNvbnN0IFBhcnRpY2xlRmlsdGVyT3B0aW9ucyogb3B0aW9ucywgY29uc3QgUk9JKiByb2ksIGludCogbnVtUGFydGljbGVzKTsNCitJTUFRX0ZVTkMgUmVhZFRleHRSZXBvcnQyKiAgICAgICBJTUFRX1NURENBTEwgaW1hcVJlYWRUZXh0Mihjb25zdCBJbWFnZSogaW1hZ2UsIGNvbnN0IENoYXJTZXQqIHNldCwgY29uc3QgUk9JKiByb2ksIGNvbnN0IFJlYWRUZXh0T3B0aW9ucyogcmVhZE9wdGlvbnMsIGNvbnN0IE9DUlByb2Nlc3NpbmdPcHRpb25zKiBwcm9jZXNzaW5nT3B0aW9ucywgY29uc3QgT0NSU3BhY2luZ09wdGlvbnMqIHNwYWNpbmdPcHRpb25zKTsNCitJTUFRX0ZVTkMgaW50ICAgICAgICAgICAgICAgICAgICBJTUFRX1NURENBTEwgaW1hcUxlYXJuUGF0dGVybjIoSW1hZ2UqIGltYWdlLCBMZWFybmluZ01vZGUgbGVhcm5pbmdNb2RlLCBMZWFyblBhdHRlcm5BZHZhbmNlZE9wdGlvbnMqIGFkdmFuY2VkT3B0aW9ucyk7DQorSU1BUV9GVU5DIGludCAgICAgICAgICAgICAgICAgICAgSU1BUV9TVERDQUxMIGltYXFDb252b2x2ZShJbWFnZSogZGVzdCwgSW1hZ2UqIHNvdXJjZSwgY29uc3QgZmxvYXQqIGtlcm5lbCwgaW50IG1hdHJpeFJvd3MsIGludCBtYXRyaXhDb2xzLCBmbG9hdCBub3JtYWxpemUsIGNvbnN0IEltYWdlKiBtYXNrKTsNCitJTUFRX0ZVTkMgaW50ICAgICAgICAgICAgICAgICAgICBJTUFRX1NURENBTEwgaW1hcURpdmlkZUNvbnN0YW50KEltYWdlKiBkZXN0LCBjb25zdCBJbWFnZSogc291cmNlLCBQaXhlbFZhbHVlIHZhbHVlKTsNCitJTUFRX0ZVTkMgaW50ICAgICAgICAgICAgICAgICAgICBJTUFRX1NURENBTEwgaW1hcURpdmlkZShJbWFnZSogZGVzdCwgY29uc3QgSW1hZ2UqIHNvdXJjZUEsIGNvbnN0IEltYWdlKiBzb3VyY2VCKTsNCitJTUFRX0ZVTkMgRWRnZVJlcG9ydDIqICAgICAgICAgICBJTUFRX1NURENBTEwgaW1hcUVkZ2VUb29sMyhjb25zdCBJbWFnZSogaW1hZ2UsIGNvbnN0IFJPSSogcm9pLCBFZGdlUHJvY2VzcyBwcm9jZXNzVHlwZSwgY29uc3QgRWRnZU9wdGlvbnMyKiBlZGdlT3B0aW9ucyk7DQorSU1BUV9GVU5DIENvbmNlbnRyaWNSYWtlUmVwb3J0KiAgSU1BUV9TVERDQUxMIGltYXFDb25jZW50cmljUmFrZShjb25zdCBJbWFnZSogaW1hZ2UsIGNvbnN0IFJPSSogcm9pLCBDb25jZW50cmljUmFrZURpcmVjdGlvbiBkaXJlY3Rpb24sIEVkZ2VQcm9jZXNzIHByb2Nlc3MsIGNvbnN0IFJha2VPcHRpb25zKiBvcHRpb25zKTsNCitJTUFRX0ZVTkMgU3Bva2VSZXBvcnQqICAgICAgICAgICBJTUFRX1NURENBTEwgaW1hcVNwb2tlKGNvbnN0IEltYWdlKiBpbWFnZSwgY29uc3QgUk9JKiByb2ksIFNwb2tlRGlyZWN0aW9uIGRpcmVjdGlvbiwgRWRnZVByb2Nlc3MgcHJvY2VzcywgY29uc3QgU3Bva2VPcHRpb25zKiBvcHRpb25zKTsNCitJTUFRX0ZVTkMgaW50ICAgICAgICAgICAgICAgICAgICBJTUFRX1NURENBTEwgaW1hcUxlYXJuUGF0dGVybihJbWFnZSogaW1hZ2UsIExlYXJuaW5nTW9kZSBsZWFybmluZ01vZGUpOw0KK0lNQVFfRlVOQyBpbnQgICAgICAgICAgICAgICAgICAgIElNQVFfU1REQ0FMTCBpbWFxTG9va3VwKEltYWdlKiBkZXN0LCBjb25zdCBJbWFnZSogc291cmNlLCBjb25zdCBzaG9ydCogdGFibGUsIGNvbnN0IEltYWdlKiBtYXNrKTsNCitJTUFRX0ZVTkMgUGF0dGVybk1hdGNoKiAgICAgICAgICBJTUFRX1NURENBTEwgaW1hcU1hdGNoUGF0dGVybjIoY29uc3QgSW1hZ2UqIGltYWdlLCBjb25zdCBJbWFnZSogcGF0dGVybiwgY29uc3QgTWF0Y2hQYXR0ZXJuT3B0aW9ucyogb3B0aW9ucywgY29uc3QgTWF0Y2hQYXR0ZXJuQWR2YW5jZWRPcHRpb25zKiBhZHZhbmNlZE9wdGlvbnMsIFJlY3Qgc2VhcmNoUmVjdCwgaW50KiBudW1NYXRjaGVzKTsNCitJTUFRX0ZVTkMgaW50ICAgICAgICAgICAgICAgICAgICBJTUFRX1NURENBTEwgaW1hcVNldFBhcnRpY2xlQ2xhc3NpZmllck9wdGlvbnMoQ2xhc3NpZmllclNlc3Npb24qIHNlc3Npb24sIGNvbnN0IFBhcnRpY2xlQ2xhc3NpZmllclByZXByb2Nlc3NpbmdPcHRpb25zKiBwcmVwcm9jZXNzaW5nT3B0aW9ucywgY29uc3QgUGFydGljbGVDbGFzc2lmaWVyT3B0aW9ucyogb3B0aW9ucyk7DQorSU1BUV9GVU5DIGludCAgICAgICAgICAgICAgICAgICAgSU1BUV9TVERDQUxMIGltYXFDb3B5Q2FsaWJyYXRpb25JbmZvKEltYWdlKiBkZXN0LCBjb25zdCBJbWFnZSogc291cmNlKTsNCitJTUFRX0ZVTkMgaW50ICAgICAgICAgICAgICAgICAgICBJTUFRX1NURENBTEwgaW1hcVBhcnRpY2xlRmlsdGVyMihJbWFnZSogZGVzdCwgSW1hZ2UqIHNvdXJjZSwgY29uc3QgUGFydGljbGVGaWx0ZXJDcml0ZXJpYTIqIGNyaXRlcmlhLCBpbnQgY3JpdGVyaWFDb3VudCwgaW50IHJlamVjdE1hdGNoZXMsIGludCBjb25uZWN0aXZpdHk4LCBpbnQqIG51bVBhcnRpY2xlcyk7DQorSU1BUV9GVU5DIEVkZ2VSZXBvcnQqICAgICAgICAgICAgSU1BUV9TVERDQUxMIGltYXFFZGdlVG9vbDIoY29uc3QgSW1hZ2UqIGltYWdlLCBjb25zdCBQb2ludCogcG9pbnRzLCBpbnQgbnVtUG9pbnRzLCBFZGdlUHJvY2VzcyBwcm9jZXNzLCBjb25zdCBFZGdlT3B0aW9ucyogb3B0aW9ucywgaW50KiBudW1FZGdlcyk7DQorSU1BUV9GVU5DIENvbnRvdXJJRCAgICAgICAgICAgICAgSU1BUV9TVERDQUxMIGltYXFBZGRSb3RhdGVkUmVjdENvbnRvdXIoUk9JKiByb2ksIFJvdGF0ZWRSZWN0IHJlY3QpOw0KK0lNQVFfRlVOQyBCYXJjb2RlMkRJbmZvKiAgICAgICAgIElNQVFfU1REQ0FMTCBpbWFxUmVhZERhdGFNYXRyaXhCYXJjb2RlKGNvbnN0IEltYWdlKiBpbWFnZSwgY29uc3QgUk9JKiByb2ksIGNvbnN0IERhdGFNYXRyaXhPcHRpb25zKiBvcHRpb25zLCB1bnNpZ25lZCBpbnQqIG51bUJhcmNvZGVzKTsNCitJTUFRX0ZVTkMgTGluZWFyQXZlcmFnZXMqICAgICAgICBJTUFRX1NURENBTEwgaW1hcUxpbmVhckF2ZXJhZ2VzKGNvbnN0IEltYWdlKiBpbWFnZSwgUmVjdCByZWN0KTsNCitJTUFRX0ZVTkMgR2VvbWV0cmljUGF0dGVybk1hdGNoKiBJTUFRX1NURENBTEwgaW1hcU1hdGNoR2VvbWV0cmljUGF0dGVybihjb25zdCBJbWFnZSogaW1hZ2UsIGNvbnN0IEltYWdlKiBwYXR0ZXJuLCBjb25zdCBDdXJ2ZU9wdGlvbnMqIGN1cnZlT3B0aW9ucywgY29uc3QgTWF0Y2hHZW9tZXRyaWNQYXR0ZXJuT3B0aW9ucyogbWF0Y2hPcHRpb25zLCBjb25zdCBNYXRjaEdlb21ldHJpY1BhdHRlcm5BZHZhbmNlZE9wdGlvbnMqIGFkdmFuY2VkTWF0Y2hPcHRpb25zLCBjb25zdCBST0kqIHJvaSwgaW50KiBudW1NYXRjaGVzKTsNCitJTUFRX0ZVTkMgQ2hhckluZm8qICAgICAgICAgICAgICBJTUFRX1NURENBTEwgaW1hcUdldENoYXJJbmZvKGNvbnN0IENoYXJTZXQqIHNldCwgaW50IGluZGV4KTsNCitJTUFRX0ZVTkMgUmVhZFRleHRSZXBvcnQqICAgICAgICBJTUFRX1NURENBTEwgaW1hcVJlYWRUZXh0KGNvbnN0IEltYWdlKiBpbWFnZSwgY29uc3QgQ2hhclNldCogc2V0LCBjb25zdCBST0kqIHJvaSwgY29uc3QgUmVhZFRleHRPcHRpb25zKiByZWFkT3B0aW9ucywgY29uc3QgT0NSUHJvY2Vzc2luZ09wdGlvbnMqIHByb2Nlc3NpbmdPcHRpb25zLCBjb25zdCBPQ1JTcGFjaW5nT3B0aW9ucyogc3BhY2luZ09wdGlvbnMpOw0KK0lNQVFfRlVOQyBUaHJlc2hvbGREYXRhKiAgICAgICAgIElNQVFfU1REQ0FMTCBpbWFxQXV0b1RocmVzaG9sZChJbWFnZSogZGVzdCwgSW1hZ2UqIHNvdXJjZSwgaW50IG51bUNsYXNzZXMsIFRocmVzaG9sZE1ldGhvZCBtZXRob2QpOw0KK0lNQVFfRlVOQyBDb2xvckhpc3RvZ3JhbVJlcG9ydCogIElNQVFfU1REQ0FMTCBpbWFxQ29sb3JIaXN0b2dyYW0oSW1hZ2UqIGltYWdlLCBpbnQgbnVtQ2xhc3NlcywgQ29sb3JNb2RlIG1vZGUsIGNvbnN0IEltYWdlKiBtYXNrKTsNCitJTUFRX0ZVTkMgUmFrZVJlcG9ydCogICAgICAgICAgICBJTUFRX1NURENBTEwgaW1hcVJha2UoY29uc3QgSW1hZ2UqIGltYWdlLCBjb25zdCBST0kqIHJvaSwgUmFrZURpcmVjdGlvbiBkaXJlY3Rpb24sIEVkZ2VQcm9jZXNzIHByb2Nlc3MsIGNvbnN0IFJha2VPcHRpb25zKiBvcHRpb25zKTsNCisjZW5kaWYNCisNCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9wY3JlLmggYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi9wY3JlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDMxODgzMwotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL3BjcmUuaApAQCAtMCwwICsxLDMzOCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisqICAgICAgIFBlcmwtQ29tcGF0aWJsZSBSZWd1bGFyIEV4cHJlc3Npb25zICAgICAgKg0KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQorLyogVGhpcyBpcyB0aGUgcHVibGljIGhlYWRlciBmaWxlIGZvciB0aGUgUENSRSBsaWJyYXJ5LCB0byBiZSAjaW5jbHVkZWQgYnkNCithcHBsaWNhdGlvbnMgdGhhdCBjYWxsIHRoZSBQQ1JFIGZ1bmN0aW9ucy4NCisNCisgICAgICAgICAgIENvcHlyaWdodCAoYykgMTk5Ny0yMDA4IFVuaXZlcnNpdHkgb2YgQ2FtYnJpZGdlDQorDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQNCittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoNCisNCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsDQorICAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4NCisNCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodA0KKyAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUNCisgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLg0KKw0KKyAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FtYnJpZGdlIG5vciB0aGUgbmFtZXMgb2YgaXRzDQorICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20NCisgICAgICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0KKw0KK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIg0KK0FORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUNCitJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQ0KK0FSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRQ0KK0xJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1INCitDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRg0KK1NVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUw0KK0lOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElODQorQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkNCitBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQ0KK1BPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLg0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorKi8NCisNCisjaWZuZGVmIF9QQ1JFX0gNCisjZGVmaW5lIF9QQ1JFX0gNCisNCisvKiBUaGUgY3VycmVudCBQQ1JFIHZlcnNpb24gaW5mb3JtYXRpb24uICovDQorDQorI2RlZmluZSBQQ1JFX01BSk9SICAgICAgICAgIDcNCisjZGVmaW5lIFBDUkVfTUlOT1IgICAgICAgICAgOA0KKyNkZWZpbmUgUENSRV9QUkVSRUxFQVNFICAgICANCisjZGVmaW5lIFBDUkVfREFURSAgICAgICAgICAgMjAwOC0wOS0wNQ0KKw0KKy8qIFdoZW4gYW4gYXBwbGljYXRpb24gbGlua3MgdG8gYSBQQ1JFIERMTCBpbiBXaW5kb3dzLCB0aGUgc3ltYm9scyB0aGF0IGFyZQ0KK2ltcG9ydGVkIGhhdmUgdG8gYmUgaWRlbnRpZmllZCBhcyBzdWNoLiBXaGVuIGJ1aWxkaW5nIFBDUkUsIHRoZSBhcHByb3ByaWF0ZQ0KK2V4cG9ydCBzZXR0aW5nIGlzIGRlZmluZWQgaW4gcGNyZV9pbnRlcm5hbC5oLCB3aGljaCBpbmNsdWRlcyB0aGlzIGZpbGUuIFNvIHdlDQorZG9uJ3QgY2hhbmdlIGV4aXN0aW5nIGRlZmluaXRpb25zIG9mIFBDUkVfRVhQX0RFQ0wgYW5kIFBDUkVDUFBfRVhQX0RFQ0wuICovDQorDQorLyoqDQorICogTkkgQ0hBTkdFDQorICoNCisgKiBXZSBkb24ndCBidWlsZCB0aGUgRExMIHZlcnNpb24uIFdlIG9ubHkgYnVpbGQgdGhlIHN0YXRpYyBsaWIgdmVyc2lvbi4NCisgKiBTaW5jZSB3ZSBkb24ndCB3YW50IHRvIGhhdmUgdG8gI2RlZmluZSBQQ1JFX1NUQVRJQyBpbiBldmVyeSBjb21wb25lbnQgdGhhdA0KKyAqIGluY2x1ZGVzIHBjcmUuaCwgd2UncmUganVzdCBnb2luZyB0byBnbyBhaGVhZCBhbmQgZGVmaW5lIGl0IGhlcmUuDQorICoNCisgKiBBZGFtIEtlbXAsIDEyLzE1LzIwMDgNCisqLw0KKyNkZWZpbmUgUENSRV9TVEFUSUMNCisNCisjaWYgZGVmaW5lZChfV0lOMzIpICYmICFkZWZpbmVkKFBDUkVfU1RBVElDKQ0KKyMgIGlmbmRlZiBQQ1JFX0VYUF9ERUNMDQorIyAgICBkZWZpbmUgUENSRV9FWFBfREVDTCAgZXh0ZXJuIF9fZGVjbHNwZWMoZGxsaW1wb3J0KQ0KKyMgIGVuZGlmDQorIyAgaWZkZWYgX19jcGx1c3BsdXMNCisjICAgIGlmbmRlZiBQQ1JFQ1BQX0VYUF9ERUNMDQorIyAgICAgIGRlZmluZSBQQ1JFQ1BQX0VYUF9ERUNMICBleHRlcm4gX19kZWNsc3BlYyhkbGxpbXBvcnQpDQorIyAgICBlbmRpZg0KKyMgICAgaWZuZGVmIFBDUkVDUFBfRVhQX0RFRk4NCisjICAgICAgZGVmaW5lIFBDUkVDUFBfRVhQX0RFRk4gIF9fZGVjbHNwZWMoZGxsaW1wb3J0KQ0KKyMgICAgZW5kaWYNCisjICBlbmRpZg0KKyNlbmRpZg0KKw0KKy8qIEJ5IGRlZmF1bHQsIHdlIHVzZSB0aGUgc3RhbmRhcmQgImV4dGVybiIgZGVjbGFyYXRpb25zLiAqLw0KKw0KKyNpZm5kZWYgUENSRV9FWFBfREVDTA0KKyMgIGlmZGVmIF9fY3BsdXNwbHVzDQorIyAgICBkZWZpbmUgUENSRV9FWFBfREVDTCAgZXh0ZXJuICJDIg0KKyMgIGVsc2UNCisjICAgIGRlZmluZSBQQ1JFX0VYUF9ERUNMICBleHRlcm4NCisjICBlbmRpZg0KKyNlbmRpZg0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KKyMgIGlmbmRlZiBQQ1JFQ1BQX0VYUF9ERUNMDQorIyAgICBkZWZpbmUgUENSRUNQUF9FWFBfREVDTCAgZXh0ZXJuDQorIyAgZW5kaWYNCisjICBpZm5kZWYgUENSRUNQUF9FWFBfREVGTg0KKyMgICAgZGVmaW5lIFBDUkVDUFBfRVhQX0RFRk4NCisjICBlbmRpZg0KKyNlbmRpZg0KKw0KKy8qKg0KKyAqIE5JIENIQU5HRQ0KKyAqDQorICogV2UgdXNlIF9fY2RlY2wgb24gd2luMzIgYW5kIHRoZSBkZWZhdWx0IGNhbGxpbmcgY29udmVudGlvbiBlbHNld2hlcmUuDQorICoNCisgKiBPcmlnaW5hbGwgdGhpcyBtYWNybyBkaWQgbm90IGFwcGVhciBpbiB0aGlzIGZpbGUsIGJ1dCBpdCB3YXMgdXNlZCBpbg0KKyAqIGludGVybmFsIGhlYWRlcnMuIEkgY29uc2lkZXIgaXQgYW4gb3ZlcnNpZ2h0IG9uIHRoZSBwYXJ0IG9mIHRoZSBwY3JlDQorICogZGV2ZWxvcGVycyB0aGF0ICogaXQgd2FzIG5vdCB1c2VkIGluIHRoaXMgZmlsZS4gSWYgdGhlc2UgZnVuY3Rpb25zIHVzZQ0KKyAqIHNwZWNpZmljIGNhbGxpbmcgY29udmVudGlvbnMgdGhlbiB0aGVpciBwcm90b3R5cGVzIHNob3VsZCBpbmNsdWRlIHRoYXQNCisgKiBjYWxsaW5nIGNvbnZlbnRpb24gaW4gY2FzZSBzb21lIG90aGVyIHByb2plY3QgdXNlcyBhIGRpZmZlcmVudCBkZWZhdWx0Lg0KKyAqDQorICogQWRhbSBLZW1wIDEyLzE1LzIwMDgNCisqLw0KKyNpZm5kZWYgUENSRV9DQUxMX0NPTlZFTlRJT04NCisjICBpZiBkZWZpbmVkKF9XSU4zMikgLyogMzItYml0IGFuZCA2NC1iaXQgKi8NCisjICAgIGRlZmluZSBQQ1JFX0NBTExfQ09OVkVOVElPTiBfX2NkZWNsDQorIyAgZWxzZQ0KKyMgICAgZGVmaW5lIFBDUkVfQ0FMTF9DT05WRU5USU9ODQorIyAgZW5kaWYNCisjZWxzZQ0KKyMgIGRlZmluZSBQQ1JFX0NBTExfQ09OVkVOVElPTg0KKyNlbmRpZg0KKw0KKy8qIEhhdmUgdG8gaW5jbHVkZSBzdGRsaWIuaCBpbiBvcmRlciB0byBlbnN1cmUgdGhhdCBzaXplX3QgaXMgZGVmaW5lZDsNCitpdCBpcyBuZWVkZWQgaGVyZSBmb3IgbWFsbG9jLiAqLw0KKw0KKyNpbmNsdWRlIDxzdGRsaWIuaD4NCisNCisvKiBBbGxvdyBmb3IgQysrIHVzZXJzICovDQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorZXh0ZXJuICJDIiB7DQorI2VuZGlmDQorDQorLyogT3B0aW9ucyAqLw0KKw0KKyNkZWZpbmUgUENSRV9DQVNFTEVTUyAgICAgICAgICAgMHgwMDAwMDAwMQ0KKyNkZWZpbmUgUENSRV9NVUxUSUxJTkUgICAgICAgICAgMHgwMDAwMDAwMg0KKyNkZWZpbmUgUENSRV9ET1RBTEwgICAgICAgICAgICAgMHgwMDAwMDAwNA0KKyNkZWZpbmUgUENSRV9FWFRFTkRFRCAgICAgICAgICAgMHgwMDAwMDAwOA0KKyNkZWZpbmUgUENSRV9BTkNIT1JFRCAgICAgICAgICAgMHgwMDAwMDAxMA0KKyNkZWZpbmUgUENSRV9ET0xMQVJfRU5ET05MWSAgICAgMHgwMDAwMDAyMA0KKyNkZWZpbmUgUENSRV9FWFRSQSAgICAgICAgICAgICAgMHgwMDAwMDA0MA0KKyNkZWZpbmUgUENSRV9OT1RCT0wgICAgICAgICAgICAgMHgwMDAwMDA4MA0KKyNkZWZpbmUgUENSRV9OT1RFT0wgICAgICAgICAgICAgMHgwMDAwMDEwMA0KKyNkZWZpbmUgUENSRV9VTkdSRUVEWSAgICAgICAgICAgMHgwMDAwMDIwMA0KKyNkZWZpbmUgUENSRV9OT1RFTVBUWSAgICAgICAgICAgMHgwMDAwMDQwMA0KKyNkZWZpbmUgUENSRV9VVEY4ICAgICAgICAgICAgICAgMHgwMDAwMDgwMA0KKyNkZWZpbmUgUENSRV9OT19BVVRPX0NBUFRVUkUgICAgMHgwMDAwMTAwMA0KKyNkZWZpbmUgUENSRV9OT19VVEY4X0NIRUNLICAgICAgMHgwMDAwMjAwMA0KKyNkZWZpbmUgUENSRV9BVVRPX0NBTExPVVQgICAgICAgMHgwMDAwNDAwMA0KKyNkZWZpbmUgUENSRV9QQVJUSUFMICAgICAgICAgICAgMHgwMDAwODAwMA0KKyNkZWZpbmUgUENSRV9ERkFfU0hPUlRFU1QgICAgICAgMHgwMDAxMDAwMA0KKyNkZWZpbmUgUENSRV9ERkFfUkVTVEFSVCAgICAgICAgMHgwMDAyMDAwMA0KKyNkZWZpbmUgUENSRV9GSVJTVExJTkUgICAgICAgICAgMHgwMDA0MDAwMA0KKyNkZWZpbmUgUENSRV9EVVBOQU1FUyAgICAgICAgICAgMHgwMDA4MDAwMA0KKyNkZWZpbmUgUENSRV9ORVdMSU5FX0NSICAgICAgICAgMHgwMDEwMDAwMA0KKyNkZWZpbmUgUENSRV9ORVdMSU5FX0xGICAgICAgICAgMHgwMDIwMDAwMA0KKyNkZWZpbmUgUENSRV9ORVdMSU5FX0NSTEYgICAgICAgMHgwMDMwMDAwMA0KKyNkZWZpbmUgUENSRV9ORVdMSU5FX0FOWSAgICAgICAgMHgwMDQwMDAwMA0KKyNkZWZpbmUgUENSRV9ORVdMSU5FX0FOWUNSTEYgICAgMHgwMDUwMDAwMA0KKyNkZWZpbmUgUENSRV9CU1JfQU5ZQ1JMRiAgICAgICAgMHgwMDgwMDAwMA0KKyNkZWZpbmUgUENSRV9CU1JfVU5JQ09ERSAgICAgICAgMHgwMTAwMDAwMA0KKyNkZWZpbmUgUENSRV9KQVZBU0NSSVBUX0NPTVBBVCAgMHgwMjAwMDAwMA0KKw0KKy8qIEV4ZWMtdGltZSBhbmQgZ2V0L3NldC10aW1lIGVycm9yIGNvZGVzICovDQorDQorI2RlZmluZSBQQ1JFX0VSUk9SX05PTUFUQ0ggICAgICAgICAoLTEpDQorI2RlZmluZSBQQ1JFX0VSUk9SX05VTEwgICAgICAgICAgICAoLTIpDQorI2RlZmluZSBQQ1JFX0VSUk9SX0JBRE9QVElPTiAgICAgICAoLTMpDQorI2RlZmluZSBQQ1JFX0VSUk9SX0JBRE1BR0lDICAgICAgICAoLTQpDQorI2RlZmluZSBQQ1JFX0VSUk9SX1VOS05PV05fT1BDT0RFICAoLTUpDQorI2RlZmluZSBQQ1JFX0VSUk9SX1VOS05PV05fTk9ERSAgICAoLTUpICAvKiBGb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSAqLw0KKyNkZWZpbmUgUENSRV9FUlJPUl9OT01FTU9SWSAgICAgICAgKC02KQ0KKyNkZWZpbmUgUENSRV9FUlJPUl9OT1NVQlNUUklORyAgICAgKC03KQ0KKyNkZWZpbmUgUENSRV9FUlJPUl9NQVRDSExJTUlUICAgICAgKC04KQ0KKyNkZWZpbmUgUENSRV9FUlJPUl9DQUxMT1VUICAgICAgICAgKC05KSAgLyogTmV2ZXIgdXNlZCBieSBQQ1JFIGl0c2VsZiAqLw0KKyNkZWZpbmUgUENSRV9FUlJPUl9CQURVVEY4ICAgICAgICAoLTEwKQ0KKyNkZWZpbmUgUENSRV9FUlJPUl9CQURVVEY4X09GRlNFVCAoLTExKQ0KKyNkZWZpbmUgUENSRV9FUlJPUl9QQVJUSUFMICAgICAgICAoLTEyKQ0KKyNkZWZpbmUgUENSRV9FUlJPUl9CQURQQVJUSUFMICAgICAoLTEzKQ0KKyNkZWZpbmUgUENSRV9FUlJPUl9JTlRFUk5BTCAgICAgICAoLTE0KQ0KKyNkZWZpbmUgUENSRV9FUlJPUl9CQURDT1VOVCAgICAgICAoLTE1KQ0KKyNkZWZpbmUgUENSRV9FUlJPUl9ERkFfVUlURU0gICAgICAoLTE2KQ0KKyNkZWZpbmUgUENSRV9FUlJPUl9ERkFfVUNPTkQgICAgICAoLTE3KQ0KKyNkZWZpbmUgUENSRV9FUlJPUl9ERkFfVU1MSU1JVCAgICAoLTE4KQ0KKyNkZWZpbmUgUENSRV9FUlJPUl9ERkFfV1NTSVpFICAgICAoLTE5KQ0KKyNkZWZpbmUgUENSRV9FUlJPUl9ERkFfUkVDVVJTRSAgICAoLTIwKQ0KKyNkZWZpbmUgUENSRV9FUlJPUl9SRUNVUlNJT05MSU1JVCAoLTIxKQ0KKyNkZWZpbmUgUENSRV9FUlJPUl9OVUxMV1NMSU1JVCAgICAoLTIyKSAgLyogTm8gbG9uZ2VyIGFjdHVhbGx5IHVzZWQgKi8NCisjZGVmaW5lIFBDUkVfRVJST1JfQkFETkVXTElORSAgICAgKC0yMykNCisNCisvKiBSZXF1ZXN0IHR5cGVzIGZvciBwY3JlX2Z1bGxpbmZvKCkgKi8NCisNCisjZGVmaW5lIFBDUkVfSU5GT19PUFRJT05TICAgICAgICAgICAgMA0KKyNkZWZpbmUgUENSRV9JTkZPX1NJWkUgICAgICAgICAgICAgICAxDQorI2RlZmluZSBQQ1JFX0lORk9fQ0FQVFVSRUNPVU5UICAgICAgIDINCisjZGVmaW5lIFBDUkVfSU5GT19CQUNLUkVGTUFYICAgICAgICAgMw0KKyNkZWZpbmUgUENSRV9JTkZPX0ZJUlNUQllURSAgICAgICAgICA0DQorI2RlZmluZSBQQ1JFX0lORk9fRklSU1RDSEFSICAgICAgICAgIDQgIC8qIEZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSAqLw0KKyNkZWZpbmUgUENSRV9JTkZPX0ZJUlNUVEFCTEUgICAgICAgICA1DQorI2RlZmluZSBQQ1JFX0lORk9fTEFTVExJVEVSQUwgICAgICAgIDYNCisjZGVmaW5lIFBDUkVfSU5GT19OQU1FRU5UUllTSVpFICAgICAgNw0KKyNkZWZpbmUgUENSRV9JTkZPX05BTUVDT1VOVCAgICAgICAgICA4DQorI2RlZmluZSBQQ1JFX0lORk9fTkFNRVRBQkxFICAgICAgICAgIDkNCisjZGVmaW5lIFBDUkVfSU5GT19TVFVEWVNJWkUgICAgICAgICAxMA0KKyNkZWZpbmUgUENSRV9JTkZPX0RFRkFVTFRfVEFCTEVTICAgIDExDQorI2RlZmluZSBQQ1JFX0lORk9fT0tQQVJUSUFMICAgICAgICAgMTINCisjZGVmaW5lIFBDUkVfSU5GT19KQ0hBTkdFRCAgICAgICAgICAxMw0KKyNkZWZpbmUgUENSRV9JTkZPX0hBU0NST1JMRiAgICAgICAgIDE0DQorDQorLyogUmVxdWVzdCB0eXBlcyBmb3IgcGNyZV9jb25maWcoKS4gRG8gbm90IHJlLWFycmFuZ2UsIGluIG9yZGVyIHRvIHJlbWFpbg0KK2NvbXBhdGlibGUuICovDQorDQorI2RlZmluZSBQQ1JFX0NPTkZJR19VVEY4ICAgICAgICAgICAgICAgICAgICAwDQorI2RlZmluZSBQQ1JFX0NPTkZJR19ORVdMSU5FICAgICAgICAgICAgICAgICAxDQorI2RlZmluZSBQQ1JFX0NPTkZJR19MSU5LX1NJWkUgICAgICAgICAgICAgICAyDQorI2RlZmluZSBQQ1JFX0NPTkZJR19QT1NJWF9NQUxMT0NfVEhSRVNIT0xEICAzDQorI2RlZmluZSBQQ1JFX0NPTkZJR19NQVRDSF9MSU1JVCAgICAgICAgICAgICA0DQorI2RlZmluZSBQQ1JFX0NPTkZJR19TVEFDS1JFQ1VSU0UgICAgICAgICAgICA1DQorI2RlZmluZSBQQ1JFX0NPTkZJR19VTklDT0RFX1BST1BFUlRJRVMgICAgICA2DQorI2RlZmluZSBQQ1JFX0NPTkZJR19NQVRDSF9MSU1JVF9SRUNVUlNJT04gICA3DQorI2RlZmluZSBQQ1JFX0NPTkZJR19CU1IgICAgICAgICAgICAgICAgICAgICA4DQorDQorLyogQml0IGZsYWdzIGZvciB0aGUgcGNyZV9leHRyYSBzdHJ1Y3R1cmUuIERvIG5vdCByZS1hcnJhbmdlIG9yIHJlZGVmaW5lDQordGhlc2UgYml0cywganVzdCBhZGQgbmV3IG9uZXMgb24gdGhlIGVuZCwgaW4gb3JkZXIgdG8gcmVtYWluIGNvbXBhdGlibGUuICovDQorDQorI2RlZmluZSBQQ1JFX0VYVFJBX1NUVURZX0RBVEEgICAgICAgICAgICAgMHgwMDAxDQorI2RlZmluZSBQQ1JFX0VYVFJBX01BVENIX0xJTUlUICAgICAgICAgICAgMHgwMDAyDQorI2RlZmluZSBQQ1JFX0VYVFJBX0NBTExPVVRfREFUQSAgICAgICAgICAgMHgwMDA0DQorI2RlZmluZSBQQ1JFX0VYVFJBX1RBQkxFUyAgICAgICAgICAgICAgICAgMHgwMDA4DQorI2RlZmluZSBQQ1JFX0VYVFJBX01BVENIX0xJTUlUX1JFQ1VSU0lPTiAgMHgwMDEwDQorDQorLyogVHlwZXMgKi8NCisNCitzdHJ1Y3QgcmVhbF9wY3JlOyAgICAgICAgICAgICAgICAgLyogZGVjbGFyYXRpb247IHRoZSBkZWZpbml0aW9uIGlzIHByaXZhdGUgICovDQordHlwZWRlZiBzdHJ1Y3QgcmVhbF9wY3JlIHBjcmU7DQorDQorLyogV2hlbiBQQ1JFIGlzIGNvbXBpbGVkIGFzIGEgQysrIGxpYnJhcnksIHRoZSBzdWJqZWN0IHBvaW50ZXIgdHlwZSBjYW4gYmUNCityZXBsYWNlZCB3aXRoIGEgY3VzdG9tIHR5cGUuIEZvciBjb252ZW50aW9uYWwgdXNlLCB0aGUgcHVibGljIGludGVyZmFjZSBpcyBhDQorY29uc3QgY2hhciAqLiAqLw0KKw0KKyNpZm5kZWYgUENSRV9TUFRSDQorI2RlZmluZSBQQ1JFX1NQVFIgY29uc3QgY2hhciAqDQorI2VuZGlmDQorDQorLyogVGhlIHN0cnVjdHVyZSBmb3IgcGFzc2luZyBhZGRpdGlvbmFsIGRhdGEgdG8gcGNyZV9leGVjKCkuIFRoaXMgaXMgZGVmaW5lZCBpbg0KK3N1Y2ggYXMgd2F5IGFzIHRvIGJlIGV4dGVuc2libGUuIEFsd2F5cyBhZGQgbmV3IGZpZWxkcyBhdCB0aGUgZW5kLCBpbiBvcmRlciB0bw0KK3JlbWFpbiBjb21wYXRpYmxlLiAqLw0KKw0KK3R5cGVkZWYgc3RydWN0IHBjcmVfZXh0cmEgew0KKyAgdW5zaWduZWQgbG9uZyBpbnQgZmxhZ3M7ICAgICAgICAvKiBCaXRzIGZvciB3aGljaCBmaWVsZHMgYXJlIHNldCAqLw0KKyAgdm9pZCAqc3R1ZHlfZGF0YTsgICAgICAgICAgICAgICAvKiBPcGFxdWUgZGF0YSBmcm9tIHBjcmVfc3R1ZHkoKSAqLw0KKyAgdW5zaWduZWQgbG9uZyBpbnQgbWF0Y2hfbGltaXQ7ICAvKiBNYXhpbXVtIG51bWJlciBvZiBjYWxscyB0byBtYXRjaCgpICovDQorICB2b2lkICpjYWxsb3V0X2RhdGE7ICAgICAgICAgICAgIC8qIERhdGEgcGFzc2VkIGJhY2sgaW4gY2FsbG91dHMgKi8NCisgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnRhYmxlczsgICAgLyogUG9pbnRlciB0byBjaGFyYWN0ZXIgdGFibGVzICovDQorICB1bnNpZ25lZCBsb25nIGludCBtYXRjaF9saW1pdF9yZWN1cnNpb247IC8qIE1heCByZWN1cnNpdmUgY2FsbHMgdG8gbWF0Y2goKSAqLw0KK30gcGNyZV9leHRyYTsNCisNCisvKiBUaGUgc3RydWN0dXJlIGZvciBwYXNzaW5nIG91dCBkYXRhIHZpYSB0aGUgcGNyZV9jYWxsb3V0X2Z1bmN0aW9uLiBXZSB1c2UgYQ0KK3N0cnVjdHVyZSBzbyB0aGF0IG5ldyBmaWVsZHMgY2FuIGJlIGFkZGVkIG9uIHRoZSBlbmQgaW4gZnV0dXJlIHZlcnNpb25zLA0KK3dpdGhvdXQgY2hhbmdpbmcgdGhlIEFQSSBvZiB0aGUgZnVuY3Rpb24sIHRoZXJlYnkgYWxsb3dpbmcgb2xkIGNsaWVudHMgdG8gd29yaw0KK3dpdGhvdXQgbW9kaWZpY2F0aW9uLiAqLw0KKw0KK3R5cGVkZWYgc3RydWN0IHBjcmVfY2FsbG91dF9ibG9jayB7DQorICBpbnQgICAgICAgICAgdmVyc2lvbjsgICAgICAgICAgIC8qIElkZW50aWZpZXMgdmVyc2lvbiBvZiBibG9jayAqLw0KKyAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFZlcnNpb24gMCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQorICBpbnQgICAgICAgICAgY2FsbG91dF9udW1iZXI7ICAgIC8qIE51bWJlciBjb21waWxlZCBpbnRvIHBhdHRlcm4gKi8NCisgIGludCAgICAgICAgICpvZmZzZXRfdmVjdG9yOyAgICAgLyogVGhlIG9mZnNldCB2ZWN0b3IgKi8NCisgIFBDUkVfU1BUUiAgICBzdWJqZWN0OyAgICAgICAgICAgLyogVGhlIHN1YmplY3QgYmVpbmcgbWF0Y2hlZCAqLw0KKyAgaW50ICAgICAgICAgIHN1YmplY3RfbGVuZ3RoOyAgICAvKiBUaGUgbGVuZ3RoIG9mIHRoZSBzdWJqZWN0ICovDQorICBpbnQgICAgICAgICAgc3RhcnRfbWF0Y2g7ICAgICAgIC8qIE9mZnNldCB0byBzdGFydCBvZiB0aGlzIG1hdGNoIGF0dGVtcHQgKi8NCisgIGludCAgICAgICAgICBjdXJyZW50X3Bvc2l0aW9uOyAgLyogV2hlcmUgd2UgY3VycmVudGx5IGFyZSBpbiB0aGUgc3ViamVjdCAqLw0KKyAgaW50ICAgICAgICAgIGNhcHR1cmVfdG9wOyAgICAgICAvKiBNYXggY3VycmVudCBjYXB0dXJlICovDQorICBpbnQgICAgICAgICAgY2FwdHVyZV9sYXN0OyAgICAgIC8qIE1vc3QgcmVjZW50bHkgY2xvc2VkIGNhcHR1cmUgKi8NCisgIHZvaWQgICAgICAgICpjYWxsb3V0X2RhdGE7ICAgICAgLyogRGF0YSBwYXNzZWQgaW4gd2l0aCB0aGUgY2FsbCAqLw0KKyAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLSBBZGRlZCBmb3IgVmVyc2lvbiAxIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQorICBpbnQgICAgICAgICAgcGF0dGVybl9wb3NpdGlvbjsgIC8qIE9mZnNldCB0byBuZXh0IGl0ZW0gaW4gdGhlIHBhdHRlcm4gKi8NCisgIGludCAgICAgICAgICBuZXh0X2l0ZW1fbGVuZ3RoOyAgLyogTGVuZ3RoIG9mIG5leHQgaXRlbSBpbiB0aGUgcGF0dGVybiAqLw0KKyAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQorfSBwY3JlX2NhbGxvdXRfYmxvY2s7DQorDQorLyogSW5kaXJlY3Rpb24gZm9yIHN0b3JlIGdldCBhbmQgZnJlZSBmdW5jdGlvbnMuIFRoZXNlIGNhbiBiZSBzZXQgdG8NCithbHRlcm5hdGl2ZSBtYWxsb2MvZnJlZSBmdW5jdGlvbnMgaWYgcmVxdWlyZWQuIFNwZWNpYWwgb25lcyBhcmUgdXNlZCBpbiB0aGUNCitub24tcmVjdXJzaXZlIGNhc2UgZm9yICJmcmFtZXMiLiBUaGVyZSBpcyBhbHNvIGFuIG9wdGlvbmFsIGNhbGxvdXQgZnVuY3Rpb24NCit0aGF0IGlzIHRyaWdnZXJlZCBieSB0aGUgKD8pIHJlZ2V4IGl0ZW0uIEZvciBWaXJ0dWFsIFBhc2NhbCwgdGhlc2UgZGVmaW5pdGlvbnMNCitoYXZlIHRvIHRha2UgYW5vdGhlciBmb3JtLiAqLw0KKw0KKyNpZm5kZWYgVlBDT01QQVQNCitQQ1JFX0VYUF9ERUNMIHZvaWQqIChQQ1JFX0NBTExfQ09OVkVOVElPTiAqcGNyZV9tYWxsb2MpKHNpemVfdCk7DQorUENSRV9FWFBfREVDTCB2b2lkICAoUENSRV9DQUxMX0NPTlZFTlRJT04gKnBjcmVfZnJlZSkodm9pZCAqKTsNCitQQ1JFX0VYUF9ERUNMIHZvaWQqIChQQ1JFX0NBTExfQ09OVkVOVElPTiAqcGNyZV9zdGFja19tYWxsb2MpKHNpemVfdCk7DQorUENSRV9FWFBfREVDTCB2b2lkICAoUENSRV9DQUxMX0NPTlZFTlRJT04gKnBjcmVfc3RhY2tfZnJlZSkodm9pZCAqKTsNCitQQ1JFX0VYUF9ERUNMIGludCAgIChQQ1JFX0NBTExfQ09OVkVOVElPTiAqcGNyZV9jYWxsb3V0KShwY3JlX2NhbGxvdXRfYmxvY2sgKik7DQorI2Vsc2UgICAvKiBWUENPTVBBVCAqLw0KK1BDUkVfRVhQX0RFQ0wgdm9pZCogUENSRV9DQUxMX0NPTlZFTlRJT04gcGNyZV9tYWxsb2Moc2l6ZV90KTsNCitQQ1JFX0VYUF9ERUNMIHZvaWQgIFBDUkVfQ0FMTF9DT05WRU5USU9OIHBjcmVfZnJlZSh2b2lkICopOw0KK1BDUkVfRVhQX0RFQ0wgdm9pZCogUENSRV9DQUxMX0NPTlZFTlRJT04gcGNyZV9zdGFja19tYWxsb2Moc2l6ZV90KTsNCitQQ1JFX0VYUF9ERUNMIHZvaWQgIFBDUkVfQ0FMTF9DT05WRU5USU9OIHBjcmVfc3RhY2tfZnJlZSh2b2lkICopOw0KK1BDUkVfRVhQX0RFQ0wgaW50ICAgUENSRV9DQUxMX0NPTlZFTlRJT04gcGNyZV9jYWxsb3V0KHBjcmVfY2FsbG91dF9ibG9jayAqKTsNCisjZW5kaWYgIC8qIFZQQ09NUEFUICovDQorDQorLyogRXhwb3J0ZWQgUENSRSBmdW5jdGlvbnMgKi8NCisNCitQQ1JFX0VYUF9ERUNMIHBjcmUqIFBDUkVfQ0FMTF9DT05WRU5USU9OIHBjcmVfY29tcGlsZShjb25zdCBjaGFyICosIGludCwgY29uc3QgY2hhciAqKiwgaW50ICosDQorICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqKTsNCitQQ1JFX0VYUF9ERUNMIHBjcmUqIFBDUkVfQ0FMTF9DT05WRU5USU9OIHBjcmVfY29tcGlsZTIoY29uc3QgY2hhciAqLCBpbnQsIGludCAqLCBjb25zdCBjaGFyICoqLA0KKyAgICAgICAgICAgICAgICAgIGludCAqLCBjb25zdCB1bnNpZ25lZCBjaGFyICopOw0KK1BDUkVfRVhQX0RFQ0wgaW50ICBQQ1JFX0NBTExfQ09OVkVOVElPTiBwY3JlX2NvbmZpZyhpbnQsIHZvaWQgKik7DQorUENSRV9FWFBfREVDTCBpbnQgIFBDUkVfQ0FMTF9DT05WRU5USU9OIHBjcmVfY29weV9uYW1lZF9zdWJzdHJpbmcoY29uc3QgcGNyZSAqLCBjb25zdCBjaGFyICosDQorICAgICAgICAgICAgICAgICAgaW50ICosIGludCwgY29uc3QgY2hhciAqLCBjaGFyICosIGludCk7DQorUENSRV9FWFBfREVDTCBpbnQgIFBDUkVfQ0FMTF9DT05WRU5USU9OIHBjcmVfY29weV9zdWJzdHJpbmcoY29uc3QgY2hhciAqLCBpbnQgKiwgaW50LCBpbnQsIGNoYXIgKiwNCisgICAgICAgICAgICAgICAgICBpbnQpOw0KK1BDUkVfRVhQX0RFQ0wgaW50ICBQQ1JFX0NBTExfQ09OVkVOVElPTiBwY3JlX2RmYV9leGVjKGNvbnN0IHBjcmUgKiwgY29uc3QgcGNyZV9leHRyYSAqLA0KKyAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiwgaW50LCBpbnQsIGludCwgaW50ICosIGludCAsIGludCAqLCBpbnQpOw0KK1BDUkVfRVhQX0RFQ0wgaW50ICBQQ1JFX0NBTExfQ09OVkVOVElPTiBwY3JlX2V4ZWMoY29uc3QgcGNyZSAqLCBjb25zdCBwY3JlX2V4dHJhICosIFBDUkVfU1BUUiwNCisgICAgICAgICAgICAgICAgICAgaW50LCBpbnQsIGludCwgaW50ICosIGludCk7DQorUENSRV9FWFBfREVDTCB2b2lkIFBDUkVfQ0FMTF9DT05WRU5USU9OIHBjcmVfZnJlZV9zdWJzdHJpbmcoY29uc3QgY2hhciAqKTsNCitQQ1JFX0VYUF9ERUNMIHZvaWQgUENSRV9DQUxMX0NPTlZFTlRJT04gcGNyZV9mcmVlX3N1YnN0cmluZ19saXN0KGNvbnN0IGNoYXIgKiopOw0KK1BDUkVfRVhQX0RFQ0wgaW50ICBQQ1JFX0NBTExfQ09OVkVOVElPTiBwY3JlX2Z1bGxpbmZvKGNvbnN0IHBjcmUgKiwgY29uc3QgcGNyZV9leHRyYSAqLCBpbnQsDQorICAgICAgICAgICAgICAgICAgdm9pZCAqKTsNCitQQ1JFX0VYUF9ERUNMIGludCAgUENSRV9DQUxMX0NPTlZFTlRJT04gcGNyZV9nZXRfbmFtZWRfc3Vic3RyaW5nKGNvbnN0IHBjcmUgKiwgY29uc3QgY2hhciAqLA0KKyAgICAgICAgICAgICAgICAgIGludCAqLCBpbnQsIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKik7DQorUENSRV9FWFBfREVDTCBpbnQgIFBDUkVfQ0FMTF9DT05WRU5USU9OIHBjcmVfZ2V0X3N0cmluZ251bWJlcihjb25zdCBwY3JlICosIGNvbnN0IGNoYXIgKik7DQorUENSRV9FWFBfREVDTCBpbnQgIFBDUkVfQ0FMTF9DT05WRU5USU9OIHBjcmVfZ2V0X3N0cmluZ3RhYmxlX2VudHJpZXMoY29uc3QgcGNyZSAqLCBjb25zdCBjaGFyICosDQorICAgICAgICAgICAgICAgICAgY2hhciAqKiwgY2hhciAqKik7DQorUENSRV9FWFBfREVDTCBpbnQgIFBDUkVfQ0FMTF9DT05WRU5USU9OIHBjcmVfZ2V0X3N1YnN0cmluZyhjb25zdCBjaGFyICosIGludCAqLCBpbnQsIGludCwNCisgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICoqKTsNCitQQ1JFX0VYUF9ERUNMIGludCAgUENSRV9DQUxMX0NPTlZFTlRJT04gcGNyZV9nZXRfc3Vic3RyaW5nX2xpc3QoY29uc3QgY2hhciAqLCBpbnQgKiwgaW50LA0KKyAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKioqKTsNCitQQ1JFX0VYUF9ERUNMIGludCAgUENSRV9DQUxMX0NPTlZFTlRJT04gcGNyZV9pbmZvKGNvbnN0IHBjcmUgKiwgaW50ICosIGludCAqKTsNCitQQ1JFX0VYUF9ERUNMIGNvbnN0IHVuc2lnbmVkIGNoYXIqIFBDUkVfQ0FMTF9DT05WRU5USU9OIHBjcmVfbWFrZXRhYmxlcyh2b2lkKTsNCitQQ1JFX0VYUF9ERUNMIGludCAgUENSRV9DQUxMX0NPTlZFTlRJT04gcGNyZV9yZWZjb3VudChwY3JlICosIGludCk7DQorUENSRV9FWFBfREVDTCBwY3JlX2V4dHJhKiBQQ1JFX0NBTExfQ09OVkVOVElPTiBwY3JlX3N0dWR5KGNvbnN0IHBjcmUgKiwgaW50LCBjb25zdCBjaGFyICoqKTsNCitQQ1JFX0VYUF9ERUNMIGNvbnN0IGNoYXIqIFBDUkVfQ0FMTF9DT05WRU5USU9OIHBjcmVfdmVyc2lvbih2b2lkKTsNCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCit9ICAvKiBleHRlcm4gIkMiICovDQorI2VuZGlmDQorDQorI2VuZGlmIC8qIEVuZCBvZiBwY3JlLmggKi8NCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi90YWJsZXMvSVJlbW90ZS5oIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvdGFibGVzL0lSZW1vdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTdmMGVkCi0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvdGFibGVzL0lSZW1vdGUuaApAQCAtMCwwICsxLDU1IEBACisvKg0KKyAqIElSZW1vdGUuaA0KKyAqDQorICogIENyZWF0ZWQgb246IFNlcCAyMiwgMjAxMg0KKyAqICAgICAgQXV0aG9yOiBNaXRjaGVsbCBXaWxscw0KKyAqLw0KKw0KKyNpZm5kZWYgSVJFTU9URV9IXw0KKyNkZWZpbmUgSVJFTU9URV9IXw0KKw0KK2NsYXNzIElSZW1vdGU7DQorDQorDQorI2luY2x1ZGUgIklSZW1vdGVDb25uZWN0aW9uTGlzdGVuZXIuaCINCisNCisNCisNCisvKioNCisgKiBSZXByZXNlbnRzIGFuIG9iamVjdCB0aGF0IGhhcyBhIHJlbW90ZSBjb25uZWN0aW9uDQorICogDQorICogQGF1dGhvciBNaXRjaGVsbA0KKyAqDQorICovDQorY2xhc3MgSVJlbW90ZSB7DQorcHVibGljOg0KKwkvKioNCisJICogUmVnaXN0ZXIgYW4gb2JqZWN0IHRvIGxpc3RlbiBmb3IgY29ubmVjdGlvbiBhbmQgZGlzY29ubmVjdGlvbiBldmVudHMNCisJICogDQorCSAqIEBwYXJhbSBsaXN0ZW5lciB0aGUgbGlzdGVuZXIgdG8gYmUgcmVnaXN0ZXINCisJICogQHBhcmFtIGltbWVkaWF0ZU5vdGlmeSBpZiB0aGUgbGlzdGVuZXIgb2JqZWN0IHNob3VsZCBiZSBub3RpZmllZCBvZiB0aGUgY3VycmVudCBjb25uZWN0aW9uIHN0YXRlDQorCSAqLw0KKwl2aXJ0dWFsIHZvaWQgQWRkQ29ubmVjdGlvbkxpc3RlbmVyKElSZW1vdGVDb25uZWN0aW9uTGlzdGVuZXIqIGxpc3RlbmVyLCBib29sIGltbWVkaWF0ZU5vdGlmeSkgPSAwOw0KKw0KKwkvKioNCisJICogVW5yZWdpc3RlciBhIGxpc3RlbmVyIGZyb20gY29ubmVjdGlvbiBldmVudHMNCisJICogDQorCSAqIEBwYXJhbSBsaXN0ZW5lciB0aGUgbGlzdGVuZXIgdG8gYmUgdW5yZWdpc3RlcmVkDQorCSAqLw0KKwl2aXJ0dWFsIHZvaWQgUmVtb3ZlQ29ubmVjdGlvbkxpc3RlbmVyKElSZW1vdGVDb25uZWN0aW9uTGlzdGVuZXIqIGxpc3RlbmVyKSA9IDA7DQorCQ0KKwkvKioNCisJICogR2V0IHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBvYmplY3RzIGNvbm5lY3Rpb24NCisJICogQHJldHVybiB0aGUgY3VycmVudCBjb25uZWN0aW9uIHN0YXRlDQorCSAqLw0KKwl2aXJ0dWFsIGJvb2wgSXNDb25uZWN0ZWQoKSA9IDA7DQorCQ0KKwkvKioNCisJICogSWYgdGhlIG9iamVjdCBpcyBhY3RpbmcgYXMgYSBzZXJ2ZXINCisJICogQHJldHVybiBpZiB0aGUgb2JqZWN0IGlzIGEgc2VydmVyDQorCSAqLw0KKwl2aXJ0dWFsIGJvb2wgSXNTZXJ2ZXIoKSA9IDA7DQorfTsNCisNCisNCisjZW5kaWYgLyogSVJFTU9URV9IXyAqLw0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL3RhYmxlcy9JUmVtb3RlQ29ubmVjdGlvbkxpc3RlbmVyLmggYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi90YWJsZXMvSVJlbW90ZUNvbm5lY3Rpb25MaXN0ZW5lci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyOWU2OGUKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi90YWJsZXMvSVJlbW90ZUNvbm5lY3Rpb25MaXN0ZW5lci5oCkBAIC0wLDAgKzEsNDAgQEAKKy8qDQorICogSVJlbW90ZUNvbm5lY3Rpb25MaXN0ZW5lci5oDQorICoNCisgKiAgQ3JlYXRlZCBvbjogU2VwIDIyLCAyMDEyDQorICogICAgICBBdXRob3I6IE1pdGNoZWxsIFdpbGxzDQorICovDQorDQorI2lmbmRlZiBJUkVNT1RFQ09OTkVDVElPTkxJU1RFTkVSX0hfDQorI2RlZmluZSBJUkVNT1RFQ09OTkVDVElPTkxJU1RFTkVSX0hfDQorDQorDQorY2xhc3MgSVJlbW90ZUNvbm5lY3Rpb25MaXN0ZW5lcjsNCisNCisjaW5jbHVkZSAiSVJlbW90ZS5oIg0KKw0KKw0KKw0KKy8qKg0KKyAqIEEgbGlzdGVuZXIgdGhhdCBsaXN0ZW5zIGZvciBjb25uZWN0aW9uIGNoYW5nZXMgaW4gYSB7QGxpbmsgSVJlbW90ZX0gb2JqZWN0DQorICogDQorICogQGF1dGhvciBNaXRjaGVsbA0KKyAqDQorICovDQorY2xhc3MgSVJlbW90ZUNvbm5lY3Rpb25MaXN0ZW5lciB7DQorcHVibGljOg0KKwkvKioNCisJICogQ2FsbGVkIHdoZW4gYW4gSVJlbW90ZSBpcyBjb25uZWN0ZWQNCisJICogQHBhcmFtIHJlbW90ZSB0aGUgb2JqZWN0IHRoYXQgY29ubmVjdGVkDQorCSAqLw0KKwl2aXJ0dWFsIHZvaWQgQ29ubmVjdGVkKElSZW1vdGUqIHJlbW90ZSkgPSAwOw0KKwkvKioNCisJICogQ2FsbGVkIHdoZW4gYW4gSVJlbW90ZSBpcyBkaXNjb25uZWN0ZWQNCisJICogQHBhcmFtIHJlbW90ZSB0aGUgb2JqZWN0IHRoYXQgZGlzY29ubmVjdGVkDQorCSAqLw0KKwl2aXJ0dWFsIHZvaWQgRGlzY29ubmVjdGVkKElSZW1vdGUqIHJlbW90ZSkgPSAwOw0KK307DQorDQorDQorDQorI2VuZGlmIC8qIElSRU1PVEVDT05ORUNUSU9OTElTVEVORVJfSF8gKi8NCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi90YWJsZXMvSVRhYmxlLmggYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi90YWJsZXMvSVRhYmxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQxMmIzMQotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL3RhYmxlcy9JVGFibGUuaApAQCAtMCwwICsxLDE5NCBAQAorLyoNCisgKiBJVGFibGUuaA0KKyAqDQorICogIENyZWF0ZWQgb246IFNlcCAxOSwgMjAxMg0KKyAqICAgICAgQXV0aG9yOiBNaXRjaGVsbCBXaWxscw0KKyAqLw0KKw0KKyNpZm5kZWYgSVRBQkxFX0hfDQorI2RlZmluZSBJVEFCTEVfSF8NCisNCisNCitjbGFzcyBJVGFibGU7DQordW5pb24gRW50cnlWYWx1ZXsNCisJdm9pZCogcHRyOw0KKwlib29sIGI7DQorCWRvdWJsZSBmOw0KK307DQordHlwZWRlZiB1bmlvbiBFbnRyeVZhbHVlIEVudHJ5VmFsdWU7DQorDQorDQorI2luY2x1ZGUgPHN0cmluZz4NCisjaW5jbHVkZSAibmV0d29ya3RhYmxlczIvdHlwZS9Db21wbGV4RGF0YS5oIg0KKyNpbmNsdWRlICJJVGFibGVMaXN0ZW5lci5oIg0KKw0KKw0KK2NsYXNzIElUYWJsZSB7DQorcHVibGljOg0KKw0KKwkvKioNCisJICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBnaXZlbiBrZXkgaXMgaW4gdGhpcyB0YWJsZS4NCisJICogDQorCSAqIEBwYXJhbSBrZXkgdGhlIGtleSB0byBzZWFyY2ggZm9yDQorCSAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgdGFibGUgYXMgYSB2YWx1ZSBhc3NpZ25lZCB0byB0aGUgZ2l2ZW4ga2V5DQorCSAqLw0KKwl2aXJ0dWFsIGJvb2wgQ29udGFpbnNLZXkoc3RkOjpzdHJpbmcga2V5KSA9IDA7DQorDQorCS8qKg0KKwkgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlcmUgZXhpc3RzIGEgbm9uLWVtcHR5IHN1YnRhYmxlIGZvciB0aGlzIGtleQ0KKwkgKiBpbiB0aGlzIHRhYmxlLg0KKwkgKiANCisJICogQHBhcmFtIGtleSB0aGUga2V5IHRvIHNlYXJjaCBmb3INCisJICogQHJldHVybiB0cnVlIGlmIHRoZXJlIGlzIGEgc3VidGFibGUgd2l0aCB0aGUga2V5IHdoaWNoIGNvbnRhaW5zIGF0IGxlYXN0IG9uZSBrZXkvc3VidGFibGUgb2YgaXRzIG93bg0KKwkgKi8NCisJdmlydHVhbCBib29sIENvbnRhaW5zU3ViVGFibGUoc3RkOjpzdHJpbmcga2V5KSA9IDA7DQorCQ0KKyAgICAvKioNCisgICAgICogR2V0cyB0aGUgc3VidGFibGUgaW4gdGhpcyB0YWJsZSBmb3IgdGhlIGdpdmVuIG5hbWUuDQorICAgICAqIA0KKyAgICAgKiBAcGFyYW0ga2V5IHRoZSBuYW1lIG9mIHRoZSB0YWJsZSByZWxhdGl2ZSB0byB0aGlzIG9uZQ0KKyAgICAgKiBAcmV0dXJuIGEgc3ViIHRhYmxlIHJlbGF0aXZlIHRvIHRoaXMgb25lDQorICAgICAqLw0KKwl2aXJ0dWFsIElUYWJsZSogR2V0U3ViVGFibGUoc3RkOjpzdHJpbmcga2V5KSA9IDA7DQorCQ0KKyAgICANCisJLyoqDQorCSAqIEdldHMgdGhlIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCBhIGtleSBhcyBhbiBvYmplY3QNCisJICogDQorCSAqIEBwYXJhbSBrZXkgdGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gbG9vayB1cA0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIGtleQ0KKwkgKiBAdGhyb3dzIFRhYmxlS2V5Tm90RGVmaW5lZEV4Y2VwdGlvbiBpZiB0aGVyZSBpcyBubyB2YWx1ZSBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIGtleQ0KKwkgKi8NCisgICAgdmlydHVhbCBFbnRyeVZhbHVlIEdldFZhbHVlKHN0ZDo6c3RyaW5nIGtleSkgPSAwOw0KKwkvKioNCisJICogUHV0IGEgdmFsdWUgaW4gdGhlIHRhYmxlDQorCSAqIA0KKwkgKiBAcGFyYW0ga2V5IHRoZSBrZXkgdG8gYmUgYXNzaWduZWQgdG8NCisJICogQHBhcmFtIHZhbHVlIHRoZSB2YWx1ZSB0aGF0IHdpbGwgYmUgYXNzaWduZWQNCisJICogQHRocm93cyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gd2hlbiB0aGUgdmFsdWUgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgdGFibGUNCisJICovDQorCXZpcnR1YWwgdm9pZCBQdXRWYWx1ZShzdGQ6OnN0cmluZyBrZXksIENvbXBsZXhEYXRhJiB2YWx1ZSkgPSAwOw0KKyAgICAgICAgDQorCXZpcnR1YWwgdm9pZCBSZXRyaWV2ZVZhbHVlKHN0ZDo6c3RyaW5nIGtleSwgQ29tcGxleERhdGEmIGV4dGVybmFsVmFsdWUpID0gMDsNCisJDQorCQ0KKw0KKwkvKioNCisJICogUHV0IGEgbnVtYmVyIGluIHRoZSB0YWJsZQ0KKwkgKiANCisJICogQHBhcmFtIGtleSB0aGUga2V5IHRvIGJlIGFzc2lnbmVkIHRvDQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgdmFsdWUgdGhhdCB3aWxsIGJlIGFzc2lnbmVkDQorCSAqLw0KKyAgICB2aXJ0dWFsIHZvaWQgUHV0TnVtYmVyKHN0ZDo6c3RyaW5nIGtleSwgZG91YmxlIHZhbHVlKSA9IDA7DQorCS8qKg0KKwkgKiBHZXRzIHRoZSBudW1iZXIgYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbiBuYW1lLg0KKwkgKiANCisJICogQHBhcmFtIGtleSB0aGUga2V5IHRvIGxvb2sgdXANCisJICogQHJldHVybiB0aGUgdmFsdWUgYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbiBrZXkgDQorCSAqIEB0aHJvd3MgVGFibGVLZXlOb3REZWZpbmVkRXhjZXB0aW9uIGlmIHRoZXJlIGlzIG5vIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4ga2V5DQorCSAqLw0KKwl2aXJ0dWFsIGRvdWJsZSBHZXROdW1iZXIoc3RkOjpzdHJpbmcga2V5KSA9IDA7DQorCS8qKg0KKwkgKiBHZXRzIHRoZSBudW1iZXIgYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbiBuYW1lLg0KKwkgKiANCisJICogQHBhcmFtIGtleSB0aGUga2V5IHRvIGxvb2sgdXANCisJICogQHBhcmFtIGRlZmF1bHRWYWx1ZSB0aGUgdmFsdWUgdG8gYmUgcmV0dXJuZWQgaWYgbm8gdmFsdWUgaXMgZm91bmQNCisJICogQHJldHVybiB0aGUgdmFsdWUgYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbiBrZXkgb3IgdGhlIGdpdmVuIGRlZmF1bHQgdmFsdWUgaWYgdGhlcmUgaXMgbm8gdmFsdWUgYXNzb2NpYXRlZCB3aXRoIHRoZSBrZXkNCisJICovDQorCXZpcnR1YWwgZG91YmxlIEdldE51bWJlcihzdGQ6OnN0cmluZyBrZXksIGRvdWJsZSBkZWZhdWx0VmFsdWUpID0gMDsNCisNCisJLyoqDQorCSAqIFB1dCBhIHN0ZDo6c3RyaW5nJiBpbiB0aGUgdGFibGUNCisJICogDQorCSAqIEBwYXJhbSBrZXkgdGhlIGtleSB0byBiZSBhc3NpZ25lZCB0bw0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIHZhbHVlIHRoYXQgd2lsbCBiZSBhc3NpZ25lZA0KKwkgKi8NCisJdmlydHVhbCB2b2lkIFB1dFN0cmluZyhzdGQ6OnN0cmluZyBrZXksIHN0ZDo6c3RyaW5nIHZhbHVlKSA9IDA7DQorCQ0KKwkvKioNCisJICogR2V0cyB0aGUgc3RyaW5nIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gbmFtZS4NCisJICogDQorCSAqIEBwYXJhbSBrZXkgdGhlIGtleSB0byBsb29rIHVwDQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4ga2V5IA0KKwkgKiBAdGhyb3dzIFRhYmxlS2V5Tm90RGVmaW5lZEV4Y2VwdGlvbiBpZiB0aGVyZSBpcyBubyB2YWx1ZSBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIGtleQ0KKwkgKi8NCisJdmlydHVhbCBzdGQ6OnN0cmluZyBHZXRTdHJpbmcoc3RkOjpzdHJpbmcga2V5KSA9IDA7DQorCQ0KKwkvKioNCisJICogR2V0cyB0aGUgc3RyaW5nIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gbmFtZS4NCisJICogDQorCSAqIEBwYXJhbSBrZXkgdGhlIGtleSB0byBsb29rIHVwDQorCSAqIEBwYXJhbSBkZWZhdWx0VmFsdWUgdGhlIHZhbHVlIHRvIGJlIHJldHVybmVkIGlmIG5vIHZhbHVlIGlzIGZvdW5kDQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4ga2V5IG9yIHRoZSBnaXZlbiBkZWZhdWx0IHZhbHVlIGlmIHRoZXJlIGlzIG5vIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCB0aGUga2V5DQorCSAqLw0KKwl2aXJ0dWFsIHN0ZDo6c3RyaW5nIEdldFN0cmluZyhzdGQ6OnN0cmluZyBrZXksIHN0ZDo6c3RyaW5nIGRlZmF1bHRWYWx1ZSkgPSAwOw0KKw0KKwkvKioNCisJICogUHV0IGEgYm9vbGVhbiBpbiB0aGUgdGFibGUNCisJICogDQorCSAqIEBwYXJhbSBrZXkgdGhlIGtleSB0byBiZSBhc3NpZ25lZCB0bw0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIHZhbHVlIHRoYXQgd2lsbCBiZSBhc3NpZ25lZA0KKwkgKi8NCisJdmlydHVhbCB2b2lkIFB1dEJvb2xlYW4oc3RkOjpzdHJpbmcga2V5LCBib29sIHZhbHVlKSA9IDA7DQorCQ0KKwkvKioNCisJICogR2V0cyB0aGUgYm9vbGVhbiBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIG5hbWUuDQorCSAqIA0KKwkgKiBAcGFyYW0ga2V5IHRoZSBrZXkgdG8gbG9vayB1cA0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIGtleSANCisJICogQHRocm93cyBUYWJsZUtleU5vdERlZmluZWRFeGNlcHRpb24gaWYgdGhlcmUgaXMgbm8gdmFsdWUgYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbiBrZXkNCisJICovDQorCXZpcnR1YWwgYm9vbCBHZXRCb29sZWFuKHN0ZDo6c3RyaW5nIGtleSkgPSAwOw0KKwkNCisJLyoqDQorCSAqIEdldHMgdGhlIGJvb2xlYW4gYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbiBuYW1lLg0KKwkgKiANCisJICogQHBhcmFtIGtleSB0aGUga2V5IHRvIGxvb2sgdXANCisJICogQHBhcmFtIGRlZmF1bHRWYWx1ZSB0aGUgdmFsdWUgdG8gYmUgcmV0dXJuZWQgaWYgbm8gdmFsdWUgaXMgZm91bmQNCisJICogQHJldHVybiB0aGUgdmFsdWUgYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbiBrZXkgb3IgdGhlIGdpdmVuIGRlZmF1bHQgdmFsdWUgaWYgdGhlcmUgaXMgbm8gdmFsdWUgYXNzb2NpYXRlZCB3aXRoIHRoZSBrZXkNCisJICovDQorCXZpcnR1YWwgYm9vbCBHZXRCb29sZWFuKHN0ZDo6c3RyaW5nIGtleSwgYm9vbCBkZWZhdWx0VmFsdWUpID0gMDsNCisJDQorCS8qKg0KKwkgKiBBZGQgYSBsaXN0ZW5lciBmb3IgY2hhbmdlcyB0byB0aGUgdGFibGUNCisJICogDQorCSAqIEBwYXJhbSBsaXN0ZW5lciB0aGUgbGlzdGVuZXIgdG8gYWRkDQorCSAqLw0KKwl2aXJ0dWFsIHZvaWQgQWRkVGFibGVMaXN0ZW5lcihJVGFibGVMaXN0ZW5lciogbGlzdGVuZXIpID0gMDsNCisJDQorCS8qKg0KKwkgKiBBZGQgYSBsaXN0ZW5lciBmb3IgY2hhbmdlcyB0byB0aGUgdGFibGUNCisJICogDQorCSAqIEBwYXJhbSBsaXN0ZW5lciB0aGUgbGlzdGVuZXIgdG8gYWRkDQorCSAqIEBwYXJhbSBpbW1lZGlhdGVOb3RpZnkgaWYgdHJ1ZSB0aGVuIHRoaXMgbGlzdGVuZXIgd2lsbCBiZSBub3RpZmllZCBvZiBhbGwgY3VycmVudCBlbnRyaWVzIChtYXJrZWQgYXMgbmV3KQ0KKwkgKi8NCisJdmlydHVhbCB2b2lkIEFkZFRhYmxlTGlzdGVuZXIoSVRhYmxlTGlzdGVuZXIqIGxpc3RlbmVyLCBib29sIGltbWVkaWF0ZU5vdGlmeSkgPSAwOw0KKwkNCisJLyoqDQorCSAqIEFkZCBhIGxpc3RlbmVyIGZvciBjaGFuZ2VzIHRvIGEgc3BlY2lmaWMga2V5IHRoZSB0YWJsZQ0KKwkgKiANCisJICogQHBhcmFtIGtleSB0aGUga2V5IHRvIGxpc3RlbiBmb3INCisJICogQHBhcmFtIGxpc3RlbmVyIHRoZSBsaXN0ZW5lciB0byBhZGQNCisJICogQHBhcmFtIGltbWVkaWF0ZU5vdGlmeSBpZiB0cnVlIHRoZW4gdGhpcyBsaXN0ZW5lciB3aWxsIGJlIG5vdGlmaWVkIG9mIGFsbCBjdXJyZW50IGVudHJpZXMgKG1hcmtlZCBhcyBuZXcpDQorCSAqLw0KKwl2aXJ0dWFsIHZvaWQgQWRkVGFibGVMaXN0ZW5lcihzdGQ6OnN0cmluZyBrZXksIElUYWJsZUxpc3RlbmVyKiBsaXN0ZW5lciwgYm9vbCBpbW1lZGlhdGVOb3RpZnkpID0gMDsNCisJDQorCS8qKg0KKwkgKiBUaGlzIHdpbGwgaW1tZWRpYXRlbHkgbm90aWZ5IHRoZSBsaXN0ZW5lciBvZiBhbGwgY3VycmVudCBzdWIgdGFibGVzDQorCSAqIA0KKwkgKiBAcGFyYW0gbGlzdGVuZXINCisJICovDQorCXZpcnR1YWwgdm9pZCBBZGRTdWJUYWJsZUxpc3RlbmVyKElUYWJsZUxpc3RlbmVyKiBsaXN0ZW5lcikgPSAwOw0KKwkNCisJLyoqDQorCSAqIFJlbW92ZSBhIGxpc3RlbmVyIGZyb20gcmVjZWl2aW5nIHRhYmxlIGV2ZW50cw0KKwkgKiANCisJICogQHBhcmFtIGxpc3RlbmVyIHRoZSBsaXN0ZW5lciB0byBiZSByZW1vdmVkDQorCSAqLw0KKwl2aXJ0dWFsIHZvaWQgUmVtb3ZlVGFibGVMaXN0ZW5lcihJVGFibGVMaXN0ZW5lciogbGlzdGVuZXIpID0gMDsNCisgICAgICAgIA0KKw0KK307DQorDQorDQorI2VuZGlmIC8qIElUQUJMRV9IXyAqLw0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL3RhYmxlcy9JVGFibGVMaXN0ZW5lci5oIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvdGFibGVzL0lUYWJsZUxpc3RlbmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWIxZDBjMwotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL3RhYmxlcy9JVGFibGVMaXN0ZW5lci5oCkBAIC0wLDAgKzEsNDEgQEAKKy8qDQorICogSVRhYmxlTGlzdGVuZXIuaA0KKyAqDQorICogIENyZWF0ZWQgb246IFNlcCAxOSwgMjAxMg0KKyAqICAgICAgQXV0aG9yOiBNaXRjaGVsbCBXaWxscw0KKyAqLw0KKw0KKyNpZm5kZWYgSVRBQkxFTElTVEVORVJfSF8NCisjZGVmaW5lIElUQUJMRUxJU1RFTkVSX0hfDQorDQorDQorY2xhc3MgSVRhYmxlTGlzdGVuZXI7DQorDQorDQorI2luY2x1ZGUgIklUYWJsZS5oIg0KKw0KKw0KKw0KKw0KKy8qKg0KKyAqIEEgbGlzdGVuZXIgdGhhdCBsaXN0ZW5zIHRvIGNoYW5nZXMgaW4gdmFsdWVzIGluIGEge0BsaW5rIElUYWJsZX0NCisgKiANCisgKiBAYXV0aG9yIE1pdGNoZWxsDQorICoNCisgKi8NCitjbGFzcyBJVGFibGVMaXN0ZW5lciB7DQorIHB1YmxpYzoNCisgICAgLyoqDQorICAgICAqIENhbGxlZCB3aGVuIGEga2V5LXZhbHVlIHBhaXIgaXMgY2hhbmdlZCBpbiBhIHtAbGluayBJVGFibGV9DQorICAgICAqIFdBUk5JTkc6IElmIGEgbmV3IGtleS12YWx1ZSBpcyBwdXQgaW4gdGhpcyBtZXRob2QgdmFsdWUgY2hhbmdlZCB3aWxsIGltbWVkaWF0bHkgYmUgY2FsbGVkIHdoaWNoIGNvdWxkIGxlYWQgdG8gcmVjdXJzaXZlIGNvZGUNCisgICAgICogQHBhcmFtIHNvdXJjZSB0aGUgdGFibGUgdGhlIGtleS12YWx1ZSBwYWlyIGV4aXN0cyBpbg0KKyAgICAgKiBAcGFyYW0ga2V5IHRoZSBrZXkgYXNzb2NpYXRlZCB3aXRoIHRoZSB2YWx1ZSB0aGF0IGNoYW5nZWQNCisgICAgICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUNCisgICAgICogQHBhcmFtIGlzTmV3IHRydWUgaWYgdGhlIGtleSBkaWQgbm90IHByZXZpb3VzbHkgZXhpc3QgaW4gdGhlIHRhYmxlLCBvdGhlcndpc2UgaXQgaXMgZmFsc2UNCisgICAgICovDQorICAgIHZpcnR1YWwgdm9pZCBWYWx1ZUNoYW5nZWQoSVRhYmxlKiBzb3VyY2UsIGNvbnN0IHN0ZDo6c3RyaW5nJiBrZXksIEVudHJ5VmFsdWUgdmFsdWUsIGJvb2wgaXNOZXcpID0gMDsNCit9Ow0KKw0KKw0KKw0KKyNlbmRpZiAvKiBJVEFCTEVMSVNURU5FUl9IXyAqLw0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL3RhYmxlcy9JVGFibGVQcm92aWRlci5oIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvdGFibGVzL0lUYWJsZVByb3ZpZGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjRiYmI2NAotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL3RhYmxlcy9JVGFibGVQcm92aWRlci5oCkBAIC0wLDAgKzEsMzIgQEAKKy8qDQorICogSVRhYmxlUHJvdmlkZXIuaA0KKyAqDQorICogIENyZWF0ZWQgb246IFNlcCAyMiwgMjAxMg0KKyAqICAgICAgQXV0aG9yOiBNaXRjaGVsbCBXaWxscw0KKyAqLw0KKw0KKyNpZm5kZWYgSVRBQkxFUFJPVklERVJfSF8NCisjZGVmaW5lIElUQUJMRVBST1ZJREVSX0hfDQorDQorDQorY2xhc3MgSVRhYmxlUHJvdmlkZXI7DQorDQorI2luY2x1ZGUgInRhYmxlcy9JVGFibGUuaCINCisNCisNCisvKioNCisgKiBBIHNpbXBsZSBpbnRlcmZhY2UgdG8gcHJvdmlkZSB0YWJsZXMNCisgKiANCisgKiBAYXV0aG9yIE1pdGNoZWxsDQorICoNCisgKi8NCitjbGFzcyBJVGFibGVQcm92aWRlciB7DQorCS8qKg0KKwkgKiBHZXQgYSB0YWJsZSBieSBuYW1lDQorCSAqIEBwYXJhbSBuYW1lIHRoZSBuYW1lIG9mIHRoZSB0YWJsZQ0KKwkgKiBAcmV0dXJuIGEgVGFibGUgd2l0aCB0aGUgZ2l2ZW4gbmFtZQ0KKwkgKi8NCisJdmlydHVhbCBJVGFibGUqIEdldFRhYmxlKHN0ZDo6c3RyaW5nIG5hbWUpID0gMDsNCit9Ow0KKw0KKyNlbmRpZiAvKiBJVEFCTEVQUk9WSURFUl9IXyAqLw0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL3RhYmxlcy9UYWJsZUtleU5vdERlZmluZWRFeGNlcHRpb24uY3BwIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvdGFibGVzL1RhYmxlS2V5Tm90RGVmaW5lZEV4Y2VwdGlvbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDZhZTg4ZgotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL3RhYmxlcy9UYWJsZUtleU5vdERlZmluZWRFeGNlcHRpb24uY3BwCkBAIC0wLDAgKzEsMjQgQEAKKy8qDQorICogVGFibGVLZXlOb3REZWZpbmVkRXhjZXB0aW9uLmNwcA0KKyAqDQorICogIENyZWF0ZWQgb246IFNlcCAyMiwgMjAxMg0KKyAqICAgICAgQXV0aG9yOiBNaXRjaGVsbCBXaWxscw0KKyAqLw0KKw0KKyNpbmNsdWRlICJ0YWJsZXMvVGFibGVLZXlOb3REZWZpbmVkRXhjZXB0aW9uLmgiDQorI2luY2x1ZGUgPHN0ZGxpYi5oPg0KKyNpbmNsdWRlIDxjc3RyaW5nPg0KKw0KKw0KKyNkZWZpbmUgTUVTU0FHRV9QUkVGSVggIlVua293biBUYWJsZSBLZXk6ICINCitUYWJsZUtleU5vdERlZmluZWRFeGNlcHRpb246OlRhYmxlS2V5Tm90RGVmaW5lZEV4Y2VwdGlvbihjb25zdCBzdGQ6OnN0cmluZyBrZXkpOg0KK21zZyhNRVNTQUdFX1BSRUZJWCArIGtleSl7DQorDQorfQ0KKw0KK2NvbnN0IGNoYXIqIFRhYmxlS2V5Tm90RGVmaW5lZEV4Y2VwdGlvbjo6d2hhdCgpew0KKwlyZXR1cm4gbXNnLmNfc3RyKCk7DQorfQ0KKw0KK1RhYmxlS2V5Tm90RGVmaW5lZEV4Y2VwdGlvbjo6flRhYmxlS2V5Tm90RGVmaW5lZEV4Y2VwdGlvbigpIHRocm93KCl7DQorfQ0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL3RhYmxlcy9UYWJsZUtleU5vdERlZmluZWRFeGNlcHRpb24uaCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL3RhYmxlcy9UYWJsZUtleU5vdERlZmluZWRFeGNlcHRpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZGE5OTEzCi0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvdGFibGVzL1RhYmxlS2V5Tm90RGVmaW5lZEV4Y2VwdGlvbi5oCkBAIC0wLDAgKzEsNDAgQEAKKy8qDQorICogVGFibGVLZXlOb3REZWZpbmVkRXhjZXB0aW9uLmgNCisgKg0KKyAqICBDcmVhdGVkIG9uOiBTZXAgMjIsIDIwMTINCisgKiAgICAgIEF1dGhvcjogTWl0Y2hlbGwgV2lsbHMNCisgKi8NCisNCisjaWZuZGVmIFRBQkxFS0VZTk9UREVGSU5FREVYQ0VQVElPTl9IXw0KKyNkZWZpbmUgVEFCTEVLRVlOT1RERUZJTkVERVhDRVBUSU9OX0hfDQorDQorDQorY2xhc3MgVGFibGVLZXlOb3REZWZpbmVkRXhjZXB0aW9uOw0KKw0KKw0KKyNpbmNsdWRlIDxleGNlcHRpb24+DQorI2luY2x1ZGUgPHN0cmluZz4NCisNCisNCisvKioNCisgKiBBbiBleGNlcHRpb24gdGhyb3cgd2hlbiB0aGUgbG9va3VwIGEgYSBrZXktdmFsdWUgZmFpbHMgaW4gYSB7QGxpbmsgSVRhYmxlfQ0KKyAqIA0KKyAqIEBhdXRob3IgTWl0Y2hlbGwNCisgKg0KKyAqLw0KK2NsYXNzIFRhYmxlS2V5Tm90RGVmaW5lZEV4Y2VwdGlvbiA6IHB1YmxpYyBzdGQ6OmV4Y2VwdGlvbiB7DQorcHVibGljOg0KKwkvKioNCisJICogQHBhcmFtIGtleSB0aGUga2V5IHRoYXQgd2FzIG5vdCBkZWZpbmVkIGluIHRoZSB0YWJsZQ0KKwkgKi8NCisJVGFibGVLZXlOb3REZWZpbmVkRXhjZXB0aW9uKGNvbnN0IHN0ZDo6c3RyaW5nIGtleSk7DQorCX5UYWJsZUtleU5vdERlZmluZWRFeGNlcHRpb24oKSB0aHJvdygpOw0KKwljb25zdCBjaGFyKiB3aGF0KCk7DQorcHJpdmF0ZToNCisJY29uc3Qgc3RkOjpzdHJpbmcgbXNnOw0KK307DQorDQorDQorDQorDQorI2VuZGlmIC8qIFRBQkxFS0VZTk9UREVGSU5FREVYQ0VQVElPTl9IXyAqLw0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL3Zpc2EvTWFrZWZpbGUgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi92aXNhL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhMDVjOTYKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi92aXNhL01ha2VmaWxlCkBAIC0wLDAgKzEsMjE4NCBAQAorIyBXaW5kIFJpdmVyIFdvcmtiZW5jaCBnZW5lcmF0ZWQgTWFrZWZpbGUuDQorIyBEbyBub3QgZWRpdCEhIQ0KKyMNCisjIFRoZSBmaWxlICIud3JtYWtlZmlsZSIgaXMgdGhlIHRlbXBsYXRlIHVzZWQgYnkgdGhlIFdpbmQgUml2ZXIgV29ya2JlbmNoIHRvDQorIyBnZW5lcmF0ZSB0aGUgbWFrZWZpbGVzIG9mIHRoaXMgcHJvamVjdC4gQWRkIHVzZXItc3BlY2lmaWMgYnVpbGQgdGFyZ2V0cyBhbmQNCisjIG1ha2UgcnVsZXMgb25seSghKSBpbiB0aGlzIHByb2plY3QncyAiLndybWFrZWZpbGUiIGZpbGUuIFRoZXNlIHdpbGwgdGhlbiBiZQ0KKyMgYXV0b21hdGljYWxseSBkdW1wZWQgaW50byB0aGUgbWFrZWZpbGVzLg0KKw0KK1dJTkRfSE9NRSA6PSAkKHN1YnN0IFwsLywkKFdJTkRfSE9NRSkpDQorV0lORF9CQVNFIDo9ICQoc3Vic3QgXCwvLCQoV0lORF9CQVNFKSkNCitXSU5EX1VTUiA6PSAkKHN1YnN0IFwsLywkKFdJTkRfVVNSKSkNCisNCithbGwgOiBwcmVfYnVpbGQgbWFpbl9hbGwgcG9zdF9idWlsZA0KKw0KK19jbGVhbiA6Og0KKwlAZWNobyAibWFrZTogcmVtb3ZpbmcgdGFyZ2V0cyBhbmQgb2JqZWN0cyBvZiBgcHdkYCINCisNCitUUkFDRT0wDQorVFJBQ0VPTj0kKFRSQUNFOjA9QCkNCitUUkFDRV9GTEFHPSQoVFJBQ0VPTjoxPSkNCisNCitNQUtFRklMRSA6PSBNYWtlZmlsZQ0KKw0KK0JVSUxEX1NQRUMgPSBQUEM2MDNnbnUNCitERUJVR19NT0RFID0gMQ0KK1NSQ19ESVIgOj0gLg0KK0JVSUxEX1JPT1RfRElSIDo9IA0KK1BSSl9ST09UX0RJUiA6PSBDOi93aW5kcml2ZXIvd29ya3NwYWNlL1dQSUxpYg0KK1dTX1JPT1RfRElSIDo9IEM6L3dpbmRyaXZlci93b3Jrc3BhY2UNCisNCitBTExfQlVJTERfU1BFQ1MgOj0gUFBDMzJkaWFiIFBQQzMyZ251IFBQQzMyc2ZkaWFiIFBQQzMyc2ZnbnUgXA0KKwkgUFBDNDAzZGlhYiBQUEM0MDNnbnUgUFBDNDA1ZGlhYiBQUEM0MDVnbnUgXA0KKwkgUFBDNDA1c2ZkaWFiIFBQQzQwNXNmZ251IFBQQzQ0MGRpYWIgUFBDNDQwZ251IFwNCisJIFBQQzQ0MHNmZGlhYiBQUEM0NDBzZmdudSBQUEM2MDNkaWFiIFBQQzYwM2dudSBcDQorCSBQUEM2MDRkaWFiIFBQQzYwNGdudSBQUEM4NVhYZGlhYiBQUEM4NVhYZ251IFwNCisJIFBQQzg1WFhzZmRpYWIgUFBDODVYWHNmZ251IFBQQzg2MHNmZGlhYiBQUEM4NjBzZmdudSBcDQorCSBTSU1MSU5VWGRpYWIgU0lNTElOVVhnbnUgU0lNTlRkaWFiIFNJTU5UZ251IFwNCisJIFNJTVNQQVJDU09MQVJJU2RpYWIgU0lNU1BBUkNTT0xBUklTZ251DQorRU5BQkxFRF9CVUlMRF9TUEVDUyA6PSBQUEM2MDNnbnUNCisNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzMyZGlhYikNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorT0JKX0RJUiA6PSBQUEMzMmRpYWJfREVCVUcNCitlbHNlDQorT0JKX0RJUiA6PSBQUEMzMmRpYWINCitlbmRpZg0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEMzMmdudSkNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorT0JKX0RJUiA6PSBQUEMzMmdudV9ERUJVRw0KK2Vsc2UNCitPQkpfRElSIDo9IFBQQzMyZ251DQorZW5kaWYNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDMzJzZmRpYWIpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK09CSl9ESVIgOj0gUFBDMzJzZmRpYWJfREVCVUcNCitlbHNlDQorT0JKX0RJUiA6PSBQUEMzMnNmZGlhYg0KK2VuZGlmDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzMyc2ZnbnUpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK09CSl9ESVIgOj0gUFBDMzJzZmdudV9ERUJVRw0KK2Vsc2UNCitPQkpfRElSIDo9IFBQQzMyc2ZnbnUNCitlbmRpZg0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM0MDNkaWFiKQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitPQkpfRElSIDo9IFBQQzQwM2RpYWJfREVCVUcNCitlbHNlDQorT0JKX0RJUiA6PSBQUEM0MDNkaWFiDQorZW5kaWYNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNDAzZ251KQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitPQkpfRElSIDo9IFBQQzQwM2dudV9ERUJVRw0KK2Vsc2UNCitPQkpfRElSIDo9IFBQQzQwM2dudQ0KK2VuZGlmDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzQwNWRpYWIpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK09CSl9ESVIgOj0gUFBDNDA1ZGlhYl9ERUJVRw0KK2Vsc2UNCitPQkpfRElSIDo9IFBQQzQwNWRpYWINCitlbmRpZg0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM0MDVnbnUpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK09CSl9ESVIgOj0gUFBDNDA1Z251X0RFQlVHDQorZWxzZQ0KK09CSl9ESVIgOj0gUFBDNDA1Z251DQorZW5kaWYNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNDA1c2ZkaWFiKQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitPQkpfRElSIDo9IFBQQzQwNXNmZGlhYl9ERUJVRw0KK2Vsc2UNCitPQkpfRElSIDo9IFBQQzQwNXNmZGlhYg0KK2VuZGlmDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzQwNXNmZ251KQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitPQkpfRElSIDo9IFBQQzQwNXNmZ251X0RFQlVHDQorZWxzZQ0KK09CSl9ESVIgOj0gUFBDNDA1c2ZnbnUNCitlbmRpZg0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM0NDBkaWFiKQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitPQkpfRElSIDo9IFBQQzQ0MGRpYWJfREVCVUcNCitlbHNlDQorT0JKX0RJUiA6PSBQUEM0NDBkaWFiDQorZW5kaWYNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNDQwZ251KQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitPQkpfRElSIDo9IFBQQzQ0MGdudV9ERUJVRw0KK2Vsc2UNCitPQkpfRElSIDo9IFBQQzQ0MGdudQ0KK2VuZGlmDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzQ0MHNmZGlhYikNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorT0JKX0RJUiA6PSBQUEM0NDBzZmRpYWJfREVCVUcNCitlbHNlDQorT0JKX0RJUiA6PSBQUEM0NDBzZmRpYWINCitlbmRpZg0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM0NDBzZmdudSkNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorT0JKX0RJUiA6PSBQUEM0NDBzZmdudV9ERUJVRw0KK2Vsc2UNCitPQkpfRElSIDo9IFBQQzQ0MHNmZ251DQorZW5kaWYNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNjAzZGlhYikNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorT0JKX0RJUiA6PSBQUEM2MDNkaWFiX0RFQlVHDQorZWxzZQ0KK09CSl9ESVIgOj0gUFBDNjAzZGlhYg0KK2VuZGlmDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzYwM2dudSkNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorT0JKX0RJUiA6PSBQUEM2MDNnbnVfREVCVUcNCitlbHNlDQorT0JKX0RJUiA6PSBQUEM2MDNnbnUNCitlbmRpZg0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM2MDRkaWFiKQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitPQkpfRElSIDo9IFBQQzYwNGRpYWJfREVCVUcNCitlbHNlDQorT0JKX0RJUiA6PSBQUEM2MDRkaWFiDQorZW5kaWYNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNjA0Z251KQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitPQkpfRElSIDo9IFBQQzYwNGdudV9ERUJVRw0KK2Vsc2UNCitPQkpfRElSIDo9IFBQQzYwNGdudQ0KK2VuZGlmDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzg1WFhkaWFiKQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitPQkpfRElSIDo9IFBQQzg1WFhkaWFiX0RFQlVHDQorZWxzZQ0KK09CSl9ESVIgOj0gUFBDODVYWGRpYWINCitlbmRpZg0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM4NVhYZ251KQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitPQkpfRElSIDo9IFBQQzg1WFhnbnVfREVCVUcNCitlbHNlDQorT0JKX0RJUiA6PSBQUEM4NVhYZ251DQorZW5kaWYNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDODVYWHNmZGlhYikNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorT0JKX0RJUiA6PSBQUEM4NVhYc2ZkaWFiX0RFQlVHDQorZWxzZQ0KK09CSl9ESVIgOj0gUFBDODVYWHNmZGlhYg0KK2VuZGlmDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzg1WFhzZmdudSkNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorT0JKX0RJUiA6PSBQUEM4NVhYc2ZnbnVfREVCVUcNCitlbHNlDQorT0JKX0RJUiA6PSBQUEM4NVhYc2ZnbnUNCitlbmRpZg0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM4NjBzZmRpYWIpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK09CSl9ESVIgOj0gUFBDODYwc2ZkaWFiX0RFQlVHDQorZWxzZQ0KK09CSl9ESVIgOj0gUFBDODYwc2ZkaWFiDQorZW5kaWYNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDODYwc2ZnbnUpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK09CSl9ESVIgOj0gUFBDODYwc2ZnbnVfREVCVUcNCitlbHNlDQorT0JKX0RJUiA6PSBQUEM4NjBzZmdudQ0KK2VuZGlmDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFNJTUxJTlVYZGlhYikNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorT0JKX0RJUiA6PSBTSU1MSU5VWGRpYWJfREVCVUcNCitlbHNlDQorT0JKX0RJUiA6PSBTSU1MSU5VWGRpYWINCitlbmRpZg0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxTSU1MSU5VWGdudSkNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorT0JKX0RJUiA6PSBTSU1MSU5VWGdudV9ERUJVRw0KK2Vsc2UNCitPQkpfRElSIDo9IFNJTUxJTlVYZ251DQorZW5kaWYNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksU0lNTlRkaWFiKQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitPQkpfRElSIDo9IFNJTU5UZGlhYl9ERUJVRw0KK2Vsc2UNCitPQkpfRElSIDo9IFNJTU5UZGlhYg0KK2VuZGlmDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFNJTU5UZ251KQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitPQkpfRElSIDo9IFNJTU5UZ251X0RFQlVHDQorZWxzZQ0KK09CSl9ESVIgOj0gU0lNTlRnbnUNCitlbmRpZg0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxTSU1TUEFSQ1NPTEFSSVNkaWFiKQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitPQkpfRElSIDo9IFNJTVNQQVJDU09MQVJJU2RpYWJfREVCVUcNCitlbHNlDQorT0JKX0RJUiA6PSBTSU1TUEFSQ1NPTEFSSVNkaWFiDQorZW5kaWYNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksU0lNU1BBUkNTT0xBUklTZ251KQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitPQkpfRElSIDo9IFNJTVNQQVJDU09MQVJJU2dudV9ERUJVRw0KK2Vsc2UNCitPQkpfRElSIDo9IFNJTVNQQVJDU09MQVJJU2dudQ0KK2VuZGlmDQorZW5kaWYNCisNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzMyZGlhYikNCitTVUJESVJTIDo9DQorT0JKRUNUUyA6PQ0KKw0KK1BST0pFQ1RfVEFSR0VUUyA6PSAkKE9CSkVDVFMpDQorDQorU1VCX09CSkVDVFMgOj0NCitTVUJfVEFSR0VUUyA6PQ0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEMzMmdudSkNCitTVUJESVJTIDo9DQorT0JKRUNUUyA6PQ0KKw0KK1BST0pFQ1RfVEFSR0VUUyA6PSAkKE9CSkVDVFMpDQorDQorU1VCX09CSkVDVFMgOj0NCitTVUJfVEFSR0VUUyA6PQ0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEMzMnNmZGlhYikNCitTVUJESVJTIDo9DQorT0JKRUNUUyA6PQ0KKw0KK1BST0pFQ1RfVEFSR0VUUyA6PSAkKE9CSkVDVFMpDQorDQorU1VCX09CSkVDVFMgOj0NCitTVUJfVEFSR0VUUyA6PQ0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEMzMnNmZ251KQ0KK1NVQkRJUlMgOj0NCitPQkpFQ1RTIDo9DQorDQorUFJPSkVDVF9UQVJHRVRTIDo9ICQoT0JKRUNUUykNCisNCitTVUJfT0JKRUNUUyA6PQ0KK1NVQl9UQVJHRVRTIDo9DQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzQwM2RpYWIpDQorU1VCRElSUyA6PQ0KK09CSkVDVFMgOj0NCisNCitQUk9KRUNUX1RBUkdFVFMgOj0gJChPQkpFQ1RTKQ0KKw0KK1NVQl9PQkpFQ1RTIDo9DQorU1VCX1RBUkdFVFMgOj0NCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNDAzZ251KQ0KK1NVQkRJUlMgOj0NCitPQkpFQ1RTIDo9DQorDQorUFJPSkVDVF9UQVJHRVRTIDo9ICQoT0JKRUNUUykNCisNCitTVUJfT0JKRUNUUyA6PQ0KK1NVQl9UQVJHRVRTIDo9DQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzQwNWRpYWIpDQorU1VCRElSUyA6PQ0KK09CSkVDVFMgOj0NCisNCitQUk9KRUNUX1RBUkdFVFMgOj0gJChPQkpFQ1RTKQ0KKw0KK1NVQl9PQkpFQ1RTIDo9DQorU1VCX1RBUkdFVFMgOj0NCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNDA1Z251KQ0KK1NVQkRJUlMgOj0NCitPQkpFQ1RTIDo9DQorDQorUFJPSkVDVF9UQVJHRVRTIDo9ICQoT0JKRUNUUykNCisNCitTVUJfT0JKRUNUUyA6PQ0KK1NVQl9UQVJHRVRTIDo9DQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzQwNXNmZGlhYikNCitTVUJESVJTIDo9DQorT0JKRUNUUyA6PQ0KKw0KK1BST0pFQ1RfVEFSR0VUUyA6PSAkKE9CSkVDVFMpDQorDQorU1VCX09CSkVDVFMgOj0NCitTVUJfVEFSR0VUUyA6PQ0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM0MDVzZmdudSkNCitTVUJESVJTIDo9DQorT0JKRUNUUyA6PQ0KKw0KK1BST0pFQ1RfVEFSR0VUUyA6PSAkKE9CSkVDVFMpDQorDQorU1VCX09CSkVDVFMgOj0NCitTVUJfVEFSR0VUUyA6PQ0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM0NDBkaWFiKQ0KK1NVQkRJUlMgOj0NCitPQkpFQ1RTIDo9DQorDQorUFJPSkVDVF9UQVJHRVRTIDo9ICQoT0JKRUNUUykNCisNCitTVUJfT0JKRUNUUyA6PQ0KK1NVQl9UQVJHRVRTIDo9DQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzQ0MGdudSkNCitTVUJESVJTIDo9DQorT0JKRUNUUyA6PQ0KKw0KK1BST0pFQ1RfVEFSR0VUUyA6PSAkKE9CSkVDVFMpDQorDQorU1VCX09CSkVDVFMgOj0NCitTVUJfVEFSR0VUUyA6PQ0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM0NDBzZmRpYWIpDQorU1VCRElSUyA6PQ0KK09CSkVDVFMgOj0NCisNCitQUk9KRUNUX1RBUkdFVFMgOj0gJChPQkpFQ1RTKQ0KKw0KK1NVQl9PQkpFQ1RTIDo9DQorU1VCX1RBUkdFVFMgOj0NCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNDQwc2ZnbnUpDQorU1VCRElSUyA6PQ0KK09CSkVDVFMgOj0NCisNCitQUk9KRUNUX1RBUkdFVFMgOj0gJChPQkpFQ1RTKQ0KKw0KK1NVQl9PQkpFQ1RTIDo9DQorU1VCX1RBUkdFVFMgOj0NCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNjAzZGlhYikNCitTVUJESVJTIDo9DQorT0JKRUNUUyA6PQ0KKw0KK1BST0pFQ1RfVEFSR0VUUyA6PSAkKE9CSkVDVFMpDQorDQorU1VCX09CSkVDVFMgOj0NCitTVUJfVEFSR0VUUyA6PQ0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM2MDNnbnUpDQorU1VCRElSUyA6PQ0KK09CSkVDVFMgOj0NCisNCitQUk9KRUNUX1RBUkdFVFMgOj0gJChPQkpFQ1RTKQ0KKw0KK1NVQl9PQkpFQ1RTIDo9DQorU1VCX1RBUkdFVFMgOj0NCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNjA0ZGlhYikNCitTVUJESVJTIDo9DQorT0JKRUNUUyA6PQ0KKw0KK1BST0pFQ1RfVEFSR0VUUyA6PSAkKE9CSkVDVFMpDQorDQorU1VCX09CSkVDVFMgOj0NCitTVUJfVEFSR0VUUyA6PQ0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM2MDRnbnUpDQorU1VCRElSUyA6PQ0KK09CSkVDVFMgOj0NCisNCitQUk9KRUNUX1RBUkdFVFMgOj0gJChPQkpFQ1RTKQ0KKw0KK1NVQl9PQkpFQ1RTIDo9DQorU1VCX1RBUkdFVFMgOj0NCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDODVYWGRpYWIpDQorU1VCRElSUyA6PQ0KK09CSkVDVFMgOj0NCisNCitQUk9KRUNUX1RBUkdFVFMgOj0gJChPQkpFQ1RTKQ0KKw0KK1NVQl9PQkpFQ1RTIDo9DQorU1VCX1RBUkdFVFMgOj0NCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDODVYWGdudSkNCitTVUJESVJTIDo9DQorT0JKRUNUUyA6PQ0KKw0KK1BST0pFQ1RfVEFSR0VUUyA6PSAkKE9CSkVDVFMpDQorDQorU1VCX09CSkVDVFMgOj0NCitTVUJfVEFSR0VUUyA6PQ0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM4NVhYc2ZkaWFiKQ0KK1NVQkRJUlMgOj0NCitPQkpFQ1RTIDo9DQorDQorUFJPSkVDVF9UQVJHRVRTIDo9ICQoT0JKRUNUUykNCisNCitTVUJfT0JKRUNUUyA6PQ0KK1NVQl9UQVJHRVRTIDo9DQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzg1WFhzZmdudSkNCitTVUJESVJTIDo9DQorT0JKRUNUUyA6PQ0KKw0KK1BST0pFQ1RfVEFSR0VUUyA6PSAkKE9CSkVDVFMpDQorDQorU1VCX09CSkVDVFMgOj0NCitTVUJfVEFSR0VUUyA6PQ0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM4NjBzZmRpYWIpDQorU1VCRElSUyA6PQ0KK09CSkVDVFMgOj0NCisNCitQUk9KRUNUX1RBUkdFVFMgOj0gJChPQkpFQ1RTKQ0KKw0KK1NVQl9PQkpFQ1RTIDo9DQorU1VCX1RBUkdFVFMgOj0NCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDODYwc2ZnbnUpDQorU1VCRElSUyA6PQ0KK09CSkVDVFMgOj0NCisNCitQUk9KRUNUX1RBUkdFVFMgOj0gJChPQkpFQ1RTKQ0KKw0KK1NVQl9PQkpFQ1RTIDo9DQorU1VCX1RBUkdFVFMgOj0NCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksU0lNTElOVVhkaWFiKQ0KK1NVQkRJUlMgOj0NCitPQkpFQ1RTIDo9DQorDQorUFJPSkVDVF9UQVJHRVRTIDo9ICQoT0JKRUNUUykNCisNCitTVUJfT0JKRUNUUyA6PQ0KK1NVQl9UQVJHRVRTIDo9DQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFNJTUxJTlVYZ251KQ0KK1NVQkRJUlMgOj0NCitPQkpFQ1RTIDo9DQorDQorUFJPSkVDVF9UQVJHRVRTIDo9ICQoT0JKRUNUUykNCisNCitTVUJfT0JKRUNUUyA6PQ0KK1NVQl9UQVJHRVRTIDo9DQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFNJTU5UZGlhYikNCitTVUJESVJTIDo9DQorT0JKRUNUUyA6PQ0KKw0KK1BST0pFQ1RfVEFSR0VUUyA6PSAkKE9CSkVDVFMpDQorDQorU1VCX09CSkVDVFMgOj0NCitTVUJfVEFSR0VUUyA6PQ0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxTSU1OVGdudSkNCitTVUJESVJTIDo9DQorT0JKRUNUUyA6PQ0KKw0KK1BST0pFQ1RfVEFSR0VUUyA6PSAkKE9CSkVDVFMpDQorDQorU1VCX09CSkVDVFMgOj0NCitTVUJfVEFSR0VUUyA6PQ0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxTSU1TUEFSQ1NPTEFSSVNkaWFiKQ0KK1NVQkRJUlMgOj0NCitPQkpFQ1RTIDo9DQorDQorUFJPSkVDVF9UQVJHRVRTIDo9ICQoT0JKRUNUUykNCisNCitTVUJfT0JKRUNUUyA6PQ0KK1NVQl9UQVJHRVRTIDo9DQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFNJTVNQQVJDU09MQVJJU2dudSkNCitTVUJESVJTIDo9DQorT0JKRUNUUyA6PQ0KKw0KK1BST0pFQ1RfVEFSR0VUUyA6PSAkKE9CSkVDVFMpDQorDQorU1VCX09CSkVDVFMgOj0NCitTVUJfVEFSR0VUUyA6PQ0KK2VuZGlmDQorDQorUFJPSkVDVF9UWVBFID0gREtNDQorREVGSU5FUyA9IA0KK0VYUEFORF9EQkcgPSAwDQorDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEMzMmRpYWIpDQorVlhfQ1BVX0ZBTUlMWSA9IHBwYw0KK0NQVSA9IFBQQzMyDQorVE9PTF9GQU1JTFkgPSBkaWFiDQorVE9PTCA9IGRpYWINCitUT09MX1BBVEggPSANCitDQ19BUkNIX1NQRUMgPSAtdFBQQ0ZIOnZ4d29ya3M2MyAtWHN0bXctc2xvdyAtRFBQQzMyX2ZwNjB4DQorTElCUEFUSCA9IA0KK0xJQlMgPSANCisNCitJREVfSU5DTFVERVMgPSAtSSQoV0lORF9CQVNFKS90YXJnZXQvaCAtSSQoV0lORF9CQVNFKS90YXJnZXQvaC93cm4vY29yZWlwIA0KKw0KK0lERV9MSUJSQVJJRVMgPSANCitlbmRpZg0KKw0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDMzJnbnUpDQorVlhfQ1BVX0ZBTUlMWSA9IHBwYw0KK0NQVSA9IFBQQzMyDQorVE9PTF9GQU1JTFkgPSBnbnUNCitUT09MID0gZ251DQorVE9PTF9QQVRIID0gDQorQ0NfQVJDSF9TUEVDID0gLW1oYXJkLWZsb2F0IC1tc3RyaWN0LWFsaWduIC1tbm8taW1wbGljaXQtZnAgLURQUEMzMl9mcDYweA0KK0xJQlBBVEggPSANCitMSUJTID0gDQorDQorSURFX0lOQ0xVREVTID0gLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2ggLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2gvd3JuL2NvcmVpcCANCisNCitJREVfTElCUkFSSUVTID0gDQorZW5kaWYNCisNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzMyc2ZkaWFiKQ0KK1ZYX0NQVV9GQU1JTFkgPSBwcGMNCitDUFUgPSBQUEMzMg0KK1RPT0xfRkFNSUxZID0gZGlhYg0KK1RPT0wgPSBzZmRpYWINCitUT09MX1BBVEggPSANCitDQ19BUkNIX1NQRUMgPSAtdFBQQ0ZTOnZ4d29ya3M2Mw0KK0xJQlBBVEggPSANCitMSUJTID0gDQorDQorSURFX0lOQ0xVREVTID0gLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2ggLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2gvd3JuL2NvcmVpcCANCisNCitJREVfTElCUkFSSUVTID0gDQorZW5kaWYNCisNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzMyc2ZnbnUpDQorVlhfQ1BVX0ZBTUlMWSA9IHBwYw0KK0NQVSA9IFBQQzMyDQorVE9PTF9GQU1JTFkgPSBnbnUNCitUT09MID0gc2ZnbnUNCitUT09MX1BBVEggPSANCitDQ19BUkNIX1NQRUMgPSAtbXNvZnQtZmxvYXQgLW1zdHJpY3QtYWxpZ24NCitMSUJQQVRIID0gDQorTElCUyA9IA0KKw0KK0lERV9JTkNMVURFUyA9IC1JJChXSU5EX0JBU0UpL3RhcmdldC9oIC1JJChXSU5EX0JBU0UpL3RhcmdldC9oL3dybi9jb3JlaXAgDQorDQorSURFX0xJQlJBUklFUyA9IA0KK2VuZGlmDQorDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM0MDNkaWFiKQ0KK1ZYX0NQVV9GQU1JTFkgPSBwcGMNCitDUFUgPSBQUEM0MDMNCitUT09MX0ZBTUlMWSA9IGRpYWINCitUT09MID0gZGlhYg0KK1RPT0xfUEFUSCA9IA0KK0NDX0FSQ0hfU1BFQyA9IC10UFBDNDAzRlM6dnh3b3JrczYzDQorTElCUEFUSCA9IA0KK0xJQlMgPSANCisNCitJREVfSU5DTFVERVMgPSAtSSQoV0lORF9CQVNFKS90YXJnZXQvaCAtSSQoV0lORF9CQVNFKS90YXJnZXQvaC93cm4vY29yZWlwIA0KKw0KK0lERV9MSUJSQVJJRVMgPSANCitlbmRpZg0KKw0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNDAzZ251KQ0KK1ZYX0NQVV9GQU1JTFkgPSBwcGMNCitDUFUgPSBQUEM0MDMNCitUT09MX0ZBTUlMWSA9IGdudQ0KK1RPT0wgPSBnbnUNCitUT09MX1BBVEggPSANCitDQ19BUkNIX1NQRUMgPSAtbWNwdT00MDMgLW1zdHJpY3QtYWxpZ24gLW1zb2Z0LWZsb2F0DQorTElCUEFUSCA9IA0KK0xJQlMgPSANCisNCitJREVfSU5DTFVERVMgPSAtSSQoV0lORF9CQVNFKS90YXJnZXQvaCAtSSQoV0lORF9CQVNFKS90YXJnZXQvaC93cm4vY29yZWlwIA0KKw0KK0lERV9MSUJSQVJJRVMgPSANCitlbmRpZg0KKw0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNDA1ZGlhYikNCitWWF9DUFVfRkFNSUxZID0gcHBjDQorQ1BVID0gUFBDNDA1DQorVE9PTF9GQU1JTFkgPSBkaWFiDQorVE9PTCA9IGRpYWINCitUT09MX1BBVEggPSANCitDQ19BUkNIX1NQRUMgPSAtdFBQQzQwNUZTOnZ4d29ya3M2Mw0KK0xJQlBBVEggPSANCitMSUJTID0gDQorDQorSURFX0lOQ0xVREVTID0gLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2ggLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2gvd3JuL2NvcmVpcCANCisNCitJREVfTElCUkFSSUVTID0gDQorZW5kaWYNCisNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzQwNWdudSkNCitWWF9DUFVfRkFNSUxZID0gcHBjDQorQ1BVID0gUFBDNDA1DQorVE9PTF9GQU1JTFkgPSBnbnUNCitUT09MID0gZ251DQorVE9PTF9QQVRIID0gDQorQ0NfQVJDSF9TUEVDID0gLW1jcHU9NDA1IC1tc3RyaWN0LWFsaWduIC1tc29mdC1mbG9hdA0KK0xJQlBBVEggPSANCitMSUJTID0gDQorDQorSURFX0lOQ0xVREVTID0gLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2ggLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2gvd3JuL2NvcmVpcCANCisNCitJREVfTElCUkFSSUVTID0gDQorZW5kaWYNCisNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzQwNXNmZGlhYikNCitWWF9DUFVfRkFNSUxZID0gcHBjDQorQ1BVID0gUFBDNDA1DQorVE9PTF9GQU1JTFkgPSBkaWFiDQorVE9PTCA9IHNmZGlhYg0KK1RPT0xfUEFUSCA9IA0KK0NDX0FSQ0hfU1BFQyA9IC10UFBDNDA1RlM6dnh3b3JrczYzDQorTElCUEFUSCA9IA0KK0xJQlMgPSANCisNCitJREVfSU5DTFVERVMgPSAtSSQoV0lORF9CQVNFKS90YXJnZXQvaCAtSSQoV0lORF9CQVNFKS90YXJnZXQvaC93cm4vY29yZWlwIA0KKw0KK0lERV9MSUJSQVJJRVMgPSANCitlbmRpZg0KKw0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNDA1c2ZnbnUpDQorVlhfQ1BVX0ZBTUlMWSA9IHBwYw0KK0NQVSA9IFBQQzQwNQ0KK1RPT0xfRkFNSUxZID0gZ251DQorVE9PTCA9IHNmZ251DQorVE9PTF9QQVRIID0gDQorQ0NfQVJDSF9TUEVDID0gLW1jcHU9NDA1IC1tc3RyaWN0LWFsaWduIC1tc29mdC1mbG9hdA0KK0xJQlBBVEggPSANCitMSUJTID0gDQorDQorSURFX0lOQ0xVREVTID0gLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2ggLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2gvd3JuL2NvcmVpcCANCisNCitJREVfTElCUkFSSUVTID0gDQorZW5kaWYNCisNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzQ0MGRpYWIpDQorVlhfQ1BVX0ZBTUlMWSA9IHBwYw0KK0NQVSA9IFBQQzQ0MA0KK1RPT0xfRkFNSUxZID0gZGlhYg0KK1RPT0wgPSBkaWFiDQorVE9PTF9QQVRIID0gDQorQ0NfQVJDSF9TUEVDID0gLXRQUEM0NDBGSDp2eHdvcmtzNjMNCitMSUJQQVRIID0gDQorTElCUyA9IA0KKw0KK0lERV9JTkNMVURFUyA9IC1JJChXSU5EX0JBU0UpL3RhcmdldC9oIC1JJChXSU5EX0JBU0UpL3RhcmdldC9oL3dybi9jb3JlaXAgDQorDQorSURFX0xJQlJBUklFUyA9IA0KK2VuZGlmDQorDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM0NDBnbnUpDQorVlhfQ1BVX0ZBTUlMWSA9IHBwYw0KK0NQVSA9IFBQQzQ0MA0KK1RPT0xfRkFNSUxZID0gZ251DQorVE9PTCA9IGdudQ0KK1RPT0xfUEFUSCA9IA0KK0NDX0FSQ0hfU1BFQyA9IC1tY3B1PTQ0MCAtbXN0cmljdC1hbGlnbiAtbXNvZnQtZmxvYXQNCitMSUJQQVRIID0gDQorTElCUyA9IA0KKw0KK0lERV9JTkNMVURFUyA9IC1JJChXSU5EX0JBU0UpL3RhcmdldC9oIC1JJChXSU5EX0JBU0UpL3RhcmdldC9oL3dybi9jb3JlaXAgDQorDQorSURFX0xJQlJBUklFUyA9IA0KK2VuZGlmDQorDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM0NDBzZmRpYWIpDQorVlhfQ1BVX0ZBTUlMWSA9IHBwYw0KK0NQVSA9IFBQQzQ0MA0KK1RPT0xfRkFNSUxZID0gZGlhYg0KK1RPT0wgPSBzZmRpYWINCitUT09MX1BBVEggPSANCitDQ19BUkNIX1NQRUMgPSAtdFBQQzQ0MEZTOnZ4d29ya3M2Mw0KK0xJQlBBVEggPSANCitMSUJTID0gDQorDQorSURFX0lOQ0xVREVTID0gLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2ggLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2gvd3JuL2NvcmVpcCANCisNCitJREVfTElCUkFSSUVTID0gDQorZW5kaWYNCisNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzQ0MHNmZ251KQ0KK1ZYX0NQVV9GQU1JTFkgPSBwcGMNCitDUFUgPSBQUEM0NDANCitUT09MX0ZBTUlMWSA9IGdudQ0KK1RPT0wgPSBzZmdudQ0KK1RPT0xfUEFUSCA9IA0KK0NDX0FSQ0hfU1BFQyA9IC1tY3B1PTQ0MCAtbXN0cmljdC1hbGlnbiAtbXNvZnQtZmxvYXQNCitMSUJQQVRIID0gDQorTElCUyA9IA0KKw0KK0lERV9JTkNMVURFUyA9IC1JJChXSU5EX0JBU0UpL3RhcmdldC9oIC1JJChXSU5EX0JBU0UpL3RhcmdldC9oL3dybi9jb3JlaXAgDQorDQorSURFX0xJQlJBUklFUyA9IA0KK2VuZGlmDQorDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM2MDNkaWFiKQ0KK1ZYX0NQVV9GQU1JTFkgPSBwcGMNCitDUFUgPSBQUEM2MDMNCitUT09MX0ZBTUlMWSA9IGRpYWINCitUT09MID0gZGlhYg0KK1RPT0xfUEFUSCA9IA0KK0NDX0FSQ0hfU1BFQyA9IC10UFBDNjAzRkg6dnh3b3JrczYzDQorTElCUEFUSCA9IA0KK0xJQlMgPSANCisNCitJREVfSU5DTFVERVMgPSAtSSQoV0lORF9CQVNFKS90YXJnZXQvaCAtSSQoV0lORF9CQVNFKS90YXJnZXQvaC93cm4vY29yZWlwIA0KKw0KK0lERV9MSUJSQVJJRVMgPSANCitlbmRpZg0KKw0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNjAzZ251KQ0KK1ZYX0NQVV9GQU1JTFkgPSBwcGMNCitDUFUgPSBQUEM2MDMNCitUT09MX0ZBTUlMWSA9IGdudQ0KK1RPT0wgPSBnbnUNCitUT09MX1BBVEggPSANCitDQ19BUkNIX1NQRUMgPSAtbWNwdT02MDMgLW1zdHJpY3QtYWxpZ24gLW1uby1pbXBsaWNpdC1mcCAtbWxvbmdjYWxsDQorTElCUEFUSCA9IA0KK0xJQlMgPSANCisNCitJREVfSU5DTFVERVMgPSAtSS4uIC1JJChXSU5EX0JBU0UpL3RhcmdldC9oIC1JJChXSU5EX0JBU0UpL3RhcmdldC9oL3dybi9jb3JlaXAgDQorDQorSURFX0xJQlJBUklFUyA9IA0KK2VuZGlmDQorDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM2MDRkaWFiKQ0KK1ZYX0NQVV9GQU1JTFkgPSBwcGMNCitDUFUgPSBQUEM2MDQNCitUT09MX0ZBTUlMWSA9IGRpYWINCitUT09MID0gZGlhYg0KK1RPT0xfUEFUSCA9IA0KK0NDX0FSQ0hfU1BFQyA9IC10UFBDNjA0Rkg6dnh3b3JrczYzDQorTElCUEFUSCA9IA0KK0xJQlMgPSANCisNCitJREVfSU5DTFVERVMgPSAtSSQoV0lORF9CQVNFKS90YXJnZXQvaCAtSSQoV0lORF9CQVNFKS90YXJnZXQvaC93cm4vY29yZWlwIA0KKw0KK0lERV9MSUJSQVJJRVMgPSANCitlbmRpZg0KKw0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNjA0Z251KQ0KK1ZYX0NQVV9GQU1JTFkgPSBwcGMNCitDUFUgPSBQUEM2MDQNCitUT09MX0ZBTUlMWSA9IGdudQ0KK1RPT0wgPSBnbnUNCitUT09MX1BBVEggPSANCitDQ19BUkNIX1NQRUMgPSAtbWNwdT02MDQgLW1zdHJpY3QtYWxpZ24gLW1uby1pbXBsaWNpdC1mcA0KK0xJQlBBVEggPSANCitMSUJTID0gDQorDQorSURFX0lOQ0xVREVTID0gLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2ggLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2gvd3JuL2NvcmVpcCANCisNCitJREVfTElCUkFSSUVTID0gDQorZW5kaWYNCisNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzg1WFhkaWFiKQ0KK1ZYX0NQVV9GQU1JTFkgPSBwcGMNCitDUFUgPSBQUEM4NVhYDQorVE9PTF9GQU1JTFkgPSBkaWFiDQorVE9PTCA9IGRpYWINCitUT09MX1BBVEggPSANCitDQ19BUkNIX1NQRUMgPSAtdFBQQ0U1MDBGUzp2eHdvcmtzNjMNCitMSUJQQVRIID0gDQorTElCUyA9IA0KKw0KK0lERV9JTkNMVURFUyA9IC1JJChXSU5EX0JBU0UpL3RhcmdldC9oIC1JJChXSU5EX0JBU0UpL3RhcmdldC9oL3dybi9jb3JlaXAgDQorDQorSURFX0xJQlJBUklFUyA9IA0KK2VuZGlmDQorDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM4NVhYZ251KQ0KK1ZYX0NQVV9GQU1JTFkgPSBwcGMNCitDUFUgPSBQUEM4NVhYDQorVE9PTF9GQU1JTFkgPSBnbnUNCitUT09MID0gZ251DQorVE9PTF9QQVRIID0gDQorQ0NfQVJDSF9TUEVDID0gLW1jcHU9ODU0MCAtbXN0cmljdC1hbGlnbiAtbXNvZnQtZmxvYXQgLW1hYmk9bm8tc3BlDQorTElCUEFUSCA9IA0KK0xJQlMgPSANCisNCitJREVfSU5DTFVERVMgPSAtSSQoV0lORF9CQVNFKS90YXJnZXQvaCAtSSQoV0lORF9CQVNFKS90YXJnZXQvaC93cm4vY29yZWlwIA0KKw0KK0lERV9MSUJSQVJJRVMgPSANCitlbmRpZg0KKw0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDODVYWHNmZGlhYikNCitWWF9DUFVfRkFNSUxZID0gcHBjDQorQ1BVID0gUFBDODVYWA0KK1RPT0xfRkFNSUxZID0gZGlhYg0KK1RPT0wgPSBzZmRpYWINCitUT09MX1BBVEggPSANCitDQ19BUkNIX1NQRUMgPSAtdFBQQ0U1MDBGUzp2eHdvcmtzNjMNCitMSUJQQVRIID0gDQorTElCUyA9IA0KKw0KK0lERV9JTkNMVURFUyA9IC1JJChXSU5EX0JBU0UpL3RhcmdldC9oIC1JJChXSU5EX0JBU0UpL3RhcmdldC9oL3dybi9jb3JlaXAgDQorDQorSURFX0xJQlJBUklFUyA9IA0KK2VuZGlmDQorDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM4NVhYc2ZnbnUpDQorVlhfQ1BVX0ZBTUlMWSA9IHBwYw0KK0NQVSA9IFBQQzg1WFgNCitUT09MX0ZBTUlMWSA9IGdudQ0KK1RPT0wgPSBzZmdudQ0KK1RPT0xfUEFUSCA9IA0KK0NDX0FSQ0hfU1BFQyA9IC1tY3B1PTg1NDAgLW1zdHJpY3QtYWxpZ24gLW1zb2Z0LWZsb2F0IC1tYWJpPW5vLXNwZQ0KK0xJQlBBVEggPSANCitMSUJTID0gDQorDQorSURFX0lOQ0xVREVTID0gLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2ggLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2gvd3JuL2NvcmVpcCANCisNCitJREVfTElCUkFSSUVTID0gDQorZW5kaWYNCisNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzg2MHNmZGlhYikNCitWWF9DUFVfRkFNSUxZID0gcHBjDQorQ1BVID0gUFBDODYwDQorVE9PTF9GQU1JTFkgPSBkaWFiDQorVE9PTCA9IHNmZGlhYg0KK1RPT0xfUEFUSCA9IA0KK0NDX0FSQ0hfU1BFQyA9IC10UFBDODYwRlM6dnh3b3JrczYzDQorTElCUEFUSCA9IA0KK0xJQlMgPSANCisNCitJREVfSU5DTFVERVMgPSAtSSQoV0lORF9CQVNFKS90YXJnZXQvaCAtSSQoV0lORF9CQVNFKS90YXJnZXQvaC93cm4vY29yZWlwIA0KKw0KK0lERV9MSUJSQVJJRVMgPSANCitlbmRpZg0KKw0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDODYwc2ZnbnUpDQorVlhfQ1BVX0ZBTUlMWSA9IHBwYw0KK0NQVSA9IFBQQzg2MA0KK1RPT0xfRkFNSUxZID0gZ251DQorVE9PTCA9IHNmZ251DQorVE9PTF9QQVRIID0gDQorQ0NfQVJDSF9TUEVDID0gLW1jcHU9ODYwIC1tc3RyaWN0LWFsaWduIC1tc29mdC1mbG9hdA0KK0xJQlBBVEggPSANCitMSUJTID0gDQorDQorSURFX0lOQ0xVREVTID0gLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2ggLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2gvd3JuL2NvcmVpcCANCisNCitJREVfTElCUkFSSUVTID0gDQorZW5kaWYNCisNCitpZmVxICgkKEJVSUxEX1NQRUMpLFNJTUxJTlVYZGlhYikNCitWWF9DUFVfRkFNSUxZID0gc2ltbGludXgNCitDUFUgPSBTSU1MSU5VWA0KK1RPT0xfRkFNSUxZID0gZGlhYg0KK1RPT0wgPSBkaWFiDQorVE9PTF9QQVRIID0gDQorQ0NfQVJDSF9TUEVDID0gLXRYODZMSDp2eHdvcmtzNjMNCitMSUJQQVRIID0gDQorTElCUyA9IA0KKw0KK0lERV9JTkNMVURFUyA9IC1JJChXSU5EX0JBU0UpL3RhcmdldC9oIC1JJChXSU5EX0JBU0UpL3RhcmdldC9oL3dybi9jb3JlaXAgDQorDQorSURFX0xJQlJBUklFUyA9IA0KK2VuZGlmDQorDQoraWZlcSAoJChCVUlMRF9TUEVDKSxTSU1MSU5VWGdudSkNCitWWF9DUFVfRkFNSUxZID0gc2ltbGludXgNCitDUFUgPSBTSU1MSU5VWA0KK1RPT0xfRkFNSUxZID0gZ251DQorVE9PTCA9IGdudQ0KK1RPT0xfUEFUSCA9IA0KK0NDX0FSQ0hfU1BFQyA9IC1tdHVuZT1pNDg2IC1tYXJjaD1pNDg2DQorTElCUEFUSCA9IA0KK0xJQlMgPSANCisNCitJREVfSU5DTFVERVMgPSAtSSQoV0lORF9CQVNFKS90YXJnZXQvaCAtSSQoV0lORF9CQVNFKS90YXJnZXQvaC93cm4vY29yZWlwIA0KKw0KK0lERV9MSUJSQVJJRVMgPSANCitlbmRpZg0KKw0KK2lmZXEgKCQoQlVJTERfU1BFQyksU0lNTlRkaWFiKQ0KK1ZYX0NQVV9GQU1JTFkgPSBzaW1wYw0KK0NQVSA9IFNJTU5UDQorVE9PTF9GQU1JTFkgPSBkaWFiDQorVE9PTCA9IGRpYWINCitUT09MX1BBVEggPSANCitDQ19BUkNIX1NQRUMgPSAtdFg4NkxIOnZ4d29ya3M2Mw0KK0xJQlBBVEggPSANCitMSUJTID0gDQorDQorSURFX0lOQ0xVREVTID0gLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2ggLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2gvd3JuL2NvcmVpcCANCisNCitJREVfTElCUkFSSUVTID0gDQorZW5kaWYNCisNCitpZmVxICgkKEJVSUxEX1NQRUMpLFNJTU5UZ251KQ0KK1ZYX0NQVV9GQU1JTFkgPSBzaW1wYw0KK0NQVSA9IFNJTU5UDQorVE9PTF9GQU1JTFkgPSBnbnUNCitUT09MID0gZ251DQorVE9PTF9QQVRIID0gDQorQ0NfQVJDSF9TUEVDID0gLW10dW5lPWk0ODYgLW1hcmNoPWk0ODYNCitMSUJQQVRIID0gDQorTElCUyA9IA0KKw0KK0lERV9JTkNMVURFUyA9IC1JJChXSU5EX0JBU0UpL3RhcmdldC9oIC1JJChXSU5EX0JBU0UpL3RhcmdldC9oL3dybi9jb3JlaXAgDQorDQorSURFX0xJQlJBUklFUyA9IA0KK2VuZGlmDQorDQoraWZlcSAoJChCVUlMRF9TUEVDKSxTSU1TUEFSQ1NPTEFSSVNkaWFiKQ0KK1ZYX0NQVV9GQU1JTFkgPSBzaW1zbw0KK0NQVSA9IFNJTVNQQVJDU09MQVJJUw0KK1RPT0xfRkFNSUxZID0gZGlhYg0KK1RPT0wgPSBkaWFiDQorVE9PTF9QQVRIID0gDQorQ0NfQVJDSF9TUEVDID0gLXRTUEFSQ0ZIOnZ4d29ya3M2Mw0KK0xJQlBBVEggPSANCitMSUJTID0gDQorDQorSURFX0lOQ0xVREVTID0gLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2ggLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2gvd3JuL2NvcmVpcCANCisNCitJREVfTElCUkFSSUVTID0gDQorZW5kaWYNCisNCitpZmVxICgkKEJVSUxEX1NQRUMpLFNJTVNQQVJDU09MQVJJU2dudSkNCitWWF9DUFVfRkFNSUxZID0gc2ltc28NCitDUFUgPSBTSU1TUEFSQ1NPTEFSSVMNCitUT09MX0ZBTUlMWSA9IGdudQ0KK1RPT0wgPSBnbnUNCitUT09MX1BBVEggPSANCitDQ19BUkNIX1NQRUMgPSANCitMSUJQQVRIID0gDQorTElCUyA9IA0KKw0KK0lERV9JTkNMVURFUyA9IC1JJChXSU5EX0JBU0UpL3RhcmdldC9oIC1JJChXSU5EX0JBU0UpL3RhcmdldC9oL3dybi9jb3JlaXAgDQorDQorSURFX0xJQlJBUklFUyA9IA0KK2VuZGlmDQorDQorDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEMzMmRpYWIpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQy1Db21waWxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQy1Db21waWxlciA9IC1YTyAtWHNpemUtb3B0DQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDMzJnbnUpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQy1Db21waWxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQy1Db21waWxlciA9IC1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4NCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MtQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDMzJzZmRpYWIpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQy1Db21waWxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQy1Db21waWxlciA9IC1YTyAtWHNpemUtb3B0DQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1Yc3Rzdy1zbG93IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDMzJzZmdudSkNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19DLUNvbXBpbGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19DLUNvbXBpbGVyID0gLU8yIC1mc3RyZW5ndGgtcmVkdWNlIC1mbm8tYnVpbHRpbg0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuYw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpICAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0NGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM0MDNkaWFiKQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0MtQ29tcGlsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0MtQ29tcGlsZXIgPSAtWE8gLVhzaXplLW9wdA0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuYw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MtQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzQwM2dudSkNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19DLUNvbXBpbGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19DLUNvbXBpbGVyID0gLU8yIC1mc3RyZW5ndGgtcmVkdWNlIC1mbm8tYnVpbHRpbg0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuYw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpICAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0NGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM0MDVkaWFiKQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0MtQ29tcGlsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0MtQ29tcGlsZXIgPSAtWE8gLVhzaXplLW9wdA0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuYw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MtQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzQwNWdudSkNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19DLUNvbXBpbGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19DLUNvbXBpbGVyID0gLU8yIC1mc3RyZW5ndGgtcmVkdWNlIC1mbm8tYnVpbHRpbg0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuYw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpICAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0NGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM0MDVzZmRpYWIpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQy1Db21waWxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQy1Db21waWxlciA9IC1YTyAtWHNpemUtb3B0DQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNDA1c2ZnbnUpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQy1Db21waWxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQy1Db21waWxlciA9IC1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4NCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MtQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNDQwZGlhYikNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19DLUNvbXBpbGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19DLUNvbXBpbGVyID0gLVhPIC1Yc2l6ZS1vcHQNCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0NGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM0NDBnbnUpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQy1Db21waWxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQy1Db21waWxlciA9IC1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4NCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MtQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNDQwc2ZkaWFiKQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0MtQ29tcGlsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0MtQ29tcGlsZXIgPSAtWE8gLVhzaXplLW9wdA0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuYw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MtQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzQ0MHNmZ251KQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0MtQ29tcGlsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0MtQ29tcGlsZXIgPSAtTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluDQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgIC1XYWxsICAtTUQgLU1QICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzYwM2RpYWIpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQy1Db21waWxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQy1Db21waWxlciA9IC1YTyAtWHNpemUtb3B0DQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNjAzZ251KQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0MtQ29tcGlsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0MtQ29tcGlsZXIgPSAtTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluDQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgIC1XYWxsICAtTUQgLU1QICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzYwNGRpYWIpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQy1Db21waWxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQy1Db21waWxlciA9IC1YTyAtWHNpemUtb3B0DQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNjA0Z251KQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0MtQ29tcGlsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0MtQ29tcGlsZXIgPSAtTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluDQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgIC1XYWxsICAtTUQgLU1QICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzg1WFhkaWFiKQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0MtQ29tcGlsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0MtQ29tcGlsZXIgPSAtWE8gLVhzaXplLW9wdA0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuYw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MtQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzg1WFhnbnUpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQy1Db21waWxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQy1Db21waWxlciA9IC1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4NCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MtQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDODVYWHNmZGlhYikNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19DLUNvbXBpbGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19DLUNvbXBpbGVyID0gLVhPIC1Yc2l6ZS1vcHQNCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0NGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM4NVhYc2ZnbnUpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQy1Db21waWxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQy1Db21waWxlciA9IC1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4NCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MtQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDODYwc2ZkaWFiKQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0MtQ29tcGlsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0MtQ29tcGlsZXIgPSAtWE8gLVhzaXplLW9wdA0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuYw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MtQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzg2MHNmZ251KQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0MtQ29tcGlsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0MtQ29tcGlsZXIgPSAtTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluDQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgIC1XYWxsICAtTUQgLU1QICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFNJTUxJTlVYZGlhYikNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19DLUNvbXBpbGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19DLUNvbXBpbGVyID0gLVhPIC1Yc2l6ZS1vcHQNCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0NGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxTSU1MSU5VWGdudSkNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19DLUNvbXBpbGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19DLUNvbXBpbGVyID0gLU8yIC1ub3N0ZGxpYiAtZm5vLWJ1aWx0aW4gLWZuby1kZWZlci1wb3ANCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwZW50aXVtICQoREVCVUdGTEFHU19DLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgIC1XYWxsICAtTUQgLU1QICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFNJTU5UZGlhYikNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19DLUNvbXBpbGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19DLUNvbXBpbGVyID0gLVhPIC1Yc2l6ZS1vcHQNCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0NGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxTSU1OVGdudSkNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19DLUNvbXBpbGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19DLUNvbXBpbGVyID0gLU8yIC1ub3N0ZGxpYiAtZm5vLWJ1aWx0aW4gLWZuby1kZWZlci1wb3ANCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwZW50aXVtICQoREVCVUdGTEFHU19DLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgIC1XYWxsICAtTUQgLU1QICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFNJTVNQQVJDU09MQVJJU2RpYWIpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQy1Db21waWxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQy1Db21waWxlciA9IC1YTyAtWHNpemUtb3B0DQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksU0lNU1BBUkNTT0xBUklTZ251KQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0MtQ29tcGlsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0MtQ29tcGlsZXIgPSAtTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluDQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjc3BhcmMgJChERUJVR0ZMQUdTX0MtQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDMzJkaWFiKQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0MrKy1Db21waWxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQysrLUNvbXBpbGVyID0gLVhPIC1Yc2l6ZS1vcHQNCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmNwcA0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLkMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jeHgNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jYw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEMzMmdudSkNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19DKystQ29tcGlsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0MrKy1Db21waWxlciA9IC1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4NCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmNwcA0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLkMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jeHgNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jYw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEMzMnNmZGlhYikNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19DKystQ29tcGlsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0MrKy1Db21waWxlciA9IC1YTyAtWHNpemUtb3B0DQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jcHANCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWHN0c3ctc2xvdyAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5DDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhzdHN3LXNsb3cgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY3h4DQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhzdHN3LXNsb3cgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY2MNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWHN0c3ctc2xvdyAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDMzJzZmdudSkNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19DKystQ29tcGlsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0MrKy1Db21waWxlciA9IC1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4NCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmNwcA0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLkMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jeHgNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jYw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM0MDNkaWFiKQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0MrKy1Db21waWxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQysrLUNvbXBpbGVyID0gLVhPIC1Yc2l6ZS1vcHQNCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmNwcA0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLkMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jeHgNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jYw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM0MDNnbnUpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQysrLUNvbXBpbGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19DKystQ29tcGlsZXIgPSAtTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluDQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jcHANCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5DDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY3h4DQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY2MNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNDA1ZGlhYikNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19DKystQ29tcGlsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0MrKy1Db21waWxlciA9IC1YTyAtWHNpemUtb3B0DQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jcHANCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5DDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY3h4DQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY2MNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNDA1Z251KQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0MrKy1Db21waWxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQysrLUNvbXBpbGVyID0gLU8yIC1mc3RyZW5ndGgtcmVkdWNlIC1mbm8tYnVpbHRpbg0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY3BwDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuQw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmN4eA0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmNjDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzQwNXNmZGlhYikNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19DKystQ29tcGlsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0MrKy1Db21waWxlciA9IC1YTyAtWHNpemUtb3B0DQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jcHANCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5DDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY3h4DQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY2MNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNDA1c2ZnbnUpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQysrLUNvbXBpbGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19DKystQ29tcGlsZXIgPSAtTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluDQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jcHANCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5DDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY3h4DQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY2MNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNDQwZGlhYikNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19DKystQ29tcGlsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0MrKy1Db21waWxlciA9IC1YTyAtWHNpemUtb3B0DQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jcHANCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5DDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY3h4DQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY2MNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNDQwZ251KQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0MrKy1Db21waWxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQysrLUNvbXBpbGVyID0gLU8yIC1mc3RyZW5ndGgtcmVkdWNlIC1mbm8tYnVpbHRpbg0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY3BwDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuQw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmN4eA0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmNjDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzQ0MHNmZGlhYikNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19DKystQ29tcGlsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0MrKy1Db21waWxlciA9IC1YTyAtWHNpemUtb3B0DQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jcHANCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5DDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY3h4DQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY2MNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNDQwc2ZnbnUpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQysrLUNvbXBpbGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19DKystQ29tcGlsZXIgPSAtTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluDQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jcHANCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5DDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY3h4DQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY2MNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNjAzZGlhYikNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19DKystQ29tcGlsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0MrKy1Db21waWxlciA9IC1YTyAtWHNpemUtb3B0DQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jcHANCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5DDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY3h4DQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY2MNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNjAzZ251KQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0MrKy1Db21waWxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQysrLUNvbXBpbGVyID0gLU8yIC1mc3RyZW5ndGgtcmVkdWNlIC1mbm8tYnVpbHRpbg0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY3BwDQorCSQoVFJBQ0VfRkxBRykgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMIC1EJ1NWTl9SRVY9IiQoc2hlbGwgc3ZudmVyc2lvbiAtbiAuLikiJyAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLkMNCisJJChUUkFDRV9GTEFHKSAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgLUQnU1ZOX1JFVj0iJChzaGVsbCBzdm52ZXJzaW9uIC1uIC4uKSInICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY3h4DQorCSQoVFJBQ0VfRkxBRykgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMIC1EJ1NWTl9SRVY9IiQoc2hlbGwgc3ZudmVyc2lvbiAtbiAuLikiJyAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmNjDQorCSQoVFJBQ0VfRkxBRykgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMIC1EJ1NWTl9SRVY9IiQoc2hlbGwgc3ZudmVyc2lvbiAtbiAuLikiJyAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM2MDRkaWFiKQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0MrKy1Db21waWxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQysrLUNvbXBpbGVyID0gLVhPIC1Yc2l6ZS1vcHQNCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmNwcA0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLkMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jeHgNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jYw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM2MDRnbnUpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQysrLUNvbXBpbGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19DKystQ29tcGlsZXIgPSAtTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluDQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jcHANCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5DDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY3h4DQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY2MNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDODVYWGRpYWIpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQysrLUNvbXBpbGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19DKystQ29tcGlsZXIgPSAtWE8gLVhzaXplLW9wdA0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY3BwDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuQw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmN4eA0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmNjDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzg1WFhnbnUpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQysrLUNvbXBpbGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19DKystQ29tcGlsZXIgPSAtTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluDQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jcHANCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5DDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY3h4DQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY2MNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDODVYWHNmZGlhYikNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19DKystQ29tcGlsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0MrKy1Db21waWxlciA9IC1YTyAtWHNpemUtb3B0DQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jcHANCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5DDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY3h4DQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY2MNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDODVYWHNmZ251KQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0MrKy1Db21waWxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQysrLUNvbXBpbGVyID0gLU8yIC1mc3RyZW5ndGgtcmVkdWNlIC1mbm8tYnVpbHRpbg0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY3BwDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuQw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmN4eA0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmNjDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzg2MHNmZGlhYikNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19DKystQ29tcGlsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0MrKy1Db21waWxlciA9IC1YTyAtWHNpemUtb3B0DQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jcHANCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5DDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY3h4DQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY2MNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDODYwc2ZnbnUpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQysrLUNvbXBpbGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19DKystQ29tcGlsZXIgPSAtTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluDQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jcHANCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5DDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY3h4DQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY2MNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksU0lNTElOVVhkaWFiKQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0MrKy1Db21waWxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQysrLUNvbXBpbGVyID0gLVhPIC1Yc2l6ZS1vcHQNCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmNwcA0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLkMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jeHgNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jYw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxTSU1MSU5VWGdudSkNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19DKystQ29tcGlsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0MrKy1Db21waWxlciA9IC1PMiAtbm9zdGRsaWIgLWZuby1idWlsdGluIC1mbm8tZGVmZXItcG9wDQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jcHANCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwZW50aXVtICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuQw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BlbnRpdW0gJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jeHgNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwZW50aXVtICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY2MNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwZW50aXVtICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFNJTU5UZGlhYikNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19DKystQ29tcGlsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0MrKy1Db21waWxlciA9IC1YTyAtWHNpemUtb3B0DQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jcHANCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5DDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY3h4DQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY2MNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksU0lNTlRnbnUpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQysrLUNvbXBpbGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19DKystQ29tcGlsZXIgPSAtTzIgLW5vc3RkbGliIC1mbm8tYnVpbHRpbiAtZm5vLWRlZmVyLXBvcA0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY3BwDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcGVudGl1bSAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLkMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwZW50aXVtICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY3h4DQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcGVudGl1bSAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmNjDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcGVudGl1bSAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxTSU1TUEFSQ1NPTEFSSVNkaWFiKQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0MrKy1Db21waWxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQysrLUNvbXBpbGVyID0gLVhPIC1Yc2l6ZS1vcHQNCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmNwcA0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLkMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jeHgNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jYw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxTSU1TUEFSQ1NPTEFSSVNnbnUpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQysrLUNvbXBpbGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19DKystQ29tcGlsZXIgPSAtTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluDQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jcHANCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NzcGFyYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLkMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NzcGFyYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmN4eA0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3NwYXJjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY2MNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NzcGFyYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEMzMmRpYWIpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQXNzZW1ibGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19Bc3NlbWJsZXIgPSAtWE8gLVhzaXplLW9wdA0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUucw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0Fzc2VtYmxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YcHJlcHJvY2Vzcy1hc3NlbWJseSAtWGNwcC1uby1zcGFjZSAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzMyZ251KQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0Fzc2VtYmxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQXNzZW1ibGVyID0gLU8yIC1mc3RyZW5ndGgtcmVkdWNlIC1mbm8tYnVpbHRpbg0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUucw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQXNzZW1ibGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgICAteGFzc2VtYmxlci13aXRoLWNwcCAtTUQgLU1QICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzMyc2ZkaWFiKQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0Fzc2VtYmxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQXNzZW1ibGVyID0gLVhPIC1Yc2l6ZS1vcHQNCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLnMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19Bc3NlbWJsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWHN0c3ctc2xvdyAtWHByZXByb2Nlc3MtYXNzZW1ibHkgLVhjcHAtbm8tc3BhY2UgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0NGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEMzMnNmZ251KQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0Fzc2VtYmxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQXNzZW1ibGVyID0gLU8yIC1mc3RyZW5ndGgtcmVkdWNlIC1mbm8tYnVpbHRpbg0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUucw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQXNzZW1ibGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgICAteGFzc2VtYmxlci13aXRoLWNwcCAtTUQgLU1QICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzQwM2RpYWIpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQXNzZW1ibGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19Bc3NlbWJsZXIgPSAtWE8gLVhzaXplLW9wdA0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUucw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0Fzc2VtYmxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YcHJlcHJvY2Vzcy1hc3NlbWJseSAtWGNwcC1uby1zcGFjZSAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzQwM2dudSkNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19Bc3NlbWJsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0Fzc2VtYmxlciA9IC1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4NCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLnMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0Fzc2VtYmxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpICAgLXhhc3NlbWJsZXItd2l0aC1jcHAgLU1EIC1NUCAkKEFEREVEX0NGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM0MDVkaWFiKQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0Fzc2VtYmxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQXNzZW1ibGVyID0gLVhPIC1Yc2l6ZS1vcHQNCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLnMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19Bc3NlbWJsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWHByZXByb2Nlc3MtYXNzZW1ibHkgLVhjcHAtbm8tc3BhY2UgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0NGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM0MDVnbnUpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQXNzZW1ibGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19Bc3NlbWJsZXIgPSAtTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluDQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5zDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19Bc3NlbWJsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAgIC14YXNzZW1ibGVyLXdpdGgtY3BwIC1NRCAtTVAgJChBRERFRF9DRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNDA1c2ZkaWFiKQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0Fzc2VtYmxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQXNzZW1ibGVyID0gLVhPIC1Yc2l6ZS1vcHQNCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLnMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19Bc3NlbWJsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWHByZXByb2Nlc3MtYXNzZW1ibHkgLVhjcHAtbm8tc3BhY2UgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0NGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM0MDVzZmdudSkNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19Bc3NlbWJsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0Fzc2VtYmxlciA9IC1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4NCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLnMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0Fzc2VtYmxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpICAgLXhhc3NlbWJsZXItd2l0aC1jcHAgLU1EIC1NUCAkKEFEREVEX0NGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM0NDBkaWFiKQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0Fzc2VtYmxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQXNzZW1ibGVyID0gLVhPIC1Yc2l6ZS1vcHQNCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLnMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19Bc3NlbWJsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWHByZXByb2Nlc3MtYXNzZW1ibHkgLVhjcHAtbm8tc3BhY2UgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0NGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM0NDBnbnUpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQXNzZW1ibGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19Bc3NlbWJsZXIgPSAtTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluDQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5zDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19Bc3NlbWJsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAgIC14YXNzZW1ibGVyLXdpdGgtY3BwIC1NRCAtTVAgJChBRERFRF9DRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNDQwc2ZkaWFiKQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0Fzc2VtYmxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQXNzZW1ibGVyID0gLVhPIC1Yc2l6ZS1vcHQNCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLnMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19Bc3NlbWJsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWHByZXByb2Nlc3MtYXNzZW1ibHkgLVhjcHAtbm8tc3BhY2UgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0NGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM0NDBzZmdudSkNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19Bc3NlbWJsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0Fzc2VtYmxlciA9IC1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4NCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLnMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0Fzc2VtYmxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpICAgLXhhc3NlbWJsZXItd2l0aC1jcHAgLU1EIC1NUCAkKEFEREVEX0NGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM2MDNkaWFiKQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0Fzc2VtYmxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQXNzZW1ibGVyID0gLVhPIC1Yc2l6ZS1vcHQNCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLnMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19Bc3NlbWJsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWHByZXByb2Nlc3MtYXNzZW1ibHkgLVhjcHAtbm8tc3BhY2UgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0NGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM2MDNnbnUpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQXNzZW1ibGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19Bc3NlbWJsZXIgPSAtTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluDQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5zDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19Bc3NlbWJsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAgIC14YXNzZW1ibGVyLXdpdGgtY3BwIC1NRCAtTVAgJChBRERFRF9DRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNjA0ZGlhYikNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19Bc3NlbWJsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0Fzc2VtYmxlciA9IC1YTyAtWHNpemUtb3B0DQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5zDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQXNzZW1ibGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhwcmVwcm9jZXNzLWFzc2VtYmx5IC1YY3BwLW5vLXNwYWNlICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNjA0Z251KQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0Fzc2VtYmxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQXNzZW1ibGVyID0gLU8yIC1mc3RyZW5ndGgtcmVkdWNlIC1mbm8tYnVpbHRpbg0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUucw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQXNzZW1ibGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgICAteGFzc2VtYmxlci13aXRoLWNwcCAtTUQgLU1QICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzg1WFhkaWFiKQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0Fzc2VtYmxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQXNzZW1ibGVyID0gLVhPIC1Yc2l6ZS1vcHQNCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLnMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19Bc3NlbWJsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWHByZXByb2Nlc3MtYXNzZW1ibHkgLVhjcHAtbm8tc3BhY2UgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0NGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM4NVhYZ251KQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0Fzc2VtYmxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQXNzZW1ibGVyID0gLU8yIC1mc3RyZW5ndGgtcmVkdWNlIC1mbm8tYnVpbHRpbg0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUucw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQXNzZW1ibGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgICAteGFzc2VtYmxlci13aXRoLWNwcCAtTUQgLU1QICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzg1WFhzZmRpYWIpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQXNzZW1ibGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19Bc3NlbWJsZXIgPSAtWE8gLVhzaXplLW9wdA0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUucw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0Fzc2VtYmxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YcHJlcHJvY2Vzcy1hc3NlbWJseSAtWGNwcC1uby1zcGFjZSAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzg1WFhzZmdudSkNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19Bc3NlbWJsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0Fzc2VtYmxlciA9IC1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4NCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLnMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0Fzc2VtYmxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpICAgLXhhc3NlbWJsZXItd2l0aC1jcHAgLU1EIC1NUCAkKEFEREVEX0NGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM4NjBzZmRpYWIpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQXNzZW1ibGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19Bc3NlbWJsZXIgPSAtWE8gLVhzaXplLW9wdA0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUucw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0Fzc2VtYmxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YcHJlcHJvY2Vzcy1hc3NlbWJseSAtWGNwcC1uby1zcGFjZSAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzg2MHNmZ251KQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0Fzc2VtYmxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQXNzZW1ibGVyID0gLU8yIC1mc3RyZW5ndGgtcmVkdWNlIC1mbm8tYnVpbHRpbg0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUucw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQXNzZW1ibGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgICAteGFzc2VtYmxlci13aXRoLWNwcCAtTUQgLU1QICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFNJTUxJTlVYZGlhYikNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19Bc3NlbWJsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0Fzc2VtYmxlciA9IC1YTyAtWHNpemUtb3B0DQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5zDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQXNzZW1ibGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhwcmVwcm9jZXNzLWFzc2VtYmx5IC1YY3BwLW5vLXNwYWNlIC1XYSwtWG1uZW0tbWl0IC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0NGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxTSU1MSU5VWGdudSkNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19Bc3NlbWJsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0Fzc2VtYmxlciA9IC1PMiAtbm9zdGRsaWIgLWZuby1idWlsdGluIC1mbm8tZGVmZXItcG9wDQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5zDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcGVudGl1bSAkKERFQlVHRkxBR1NfQXNzZW1ibGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgICAteGFzc2VtYmxlci13aXRoLWNwcCAtTUQgLU1QICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFNJTU5UZGlhYikNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19Bc3NlbWJsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0Fzc2VtYmxlciA9IC1YTyAtWHNpemUtb3B0DQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5zDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQXNzZW1ibGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhwcmVwcm9jZXNzLWFzc2VtYmx5IC1YY3BwLW5vLXNwYWNlIC1XYSwtWG1uZW0tbWl0IC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0NGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxTSU1OVGdudSkNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19Bc3NlbWJsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0Fzc2VtYmxlciA9IC1PMiAtbm9zdGRsaWIgLWZuby1idWlsdGluIC1mbm8tZGVmZXItcG9wDQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5zDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcGVudGl1bSAkKERFQlVHRkxBR1NfQXNzZW1ibGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgICAteGFzc2VtYmxlci13aXRoLWNwcCAtTUQgLU1QICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFNJTVNQQVJDU09MQVJJU2RpYWIpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQXNzZW1ibGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19Bc3NlbWJsZXIgPSAtWE8gLVhzaXplLW9wdA0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUucw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0Fzc2VtYmxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YcHJlcHJvY2Vzcy1hc3NlbWJseSAtWGNwcC1uby1zcGFjZSAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFNJTVNQQVJDU09MQVJJU2dudSkNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19Bc3NlbWJsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0Fzc2VtYmxlciA9IC1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4NCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLnMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NzcGFyYyAkKERFQlVHRkxBR1NfQXNzZW1ibGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgICAteGFzc2VtYmxlci13aXRoLWNwcCAtTUQgLU1QICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCisNCisNCisNCisNCisNCistaW5jbHVkZSAkKFBSSl9ST09UX0RJUikvKi5tYWtlZmlsZQ0KKw0KKy1pbmNsdWRlICoubWFrZWZpbGUNCisNCittYWluX2FsbCA6IGV4dGVybmFsX2J1aWxkICQoUFJPSkVDVF9UQVJHRVRTKQ0KKwlAZWNobyAibWFrZTogYnVpbHQgdGFyZ2V0cyBvZiBgcHdkYCINCisNCisjIGVudHJ5IHBvaW50IGZvciBleHRlbmRpbmcgdGhlIGJ1aWxkDQorZXh0ZXJuYWxfYnVpbGQgOjoNCisJQGVjaG8gIiINCisNCisjIG1haW4gZW50cnkgcG9pbnQgZm9yIHByZSBwcm9jZXNzaW5nIHByaW9yIHRvIHRoZSBidWlsZA0KK3ByZV9idWlsZCA6OiAkKFBSRV9CVUlMRF9TVEVQKSBnZW5lcmF0ZV9zb3VyY2VzDQorCUBlY2hvICIiDQorDQorIyBlbnRyeSBwb2ludCBmb3IgZ2VuZXJhdGluZyBzb3VyY2VzIHByaW9yIHRvIHRoZSBidWlsZA0KK2dlbmVyYXRlX3NvdXJjZXMgOjoNCisJQGVjaG8gIiINCisNCisjIG1haW4gZW50cnkgcG9pbnQgZm9yIHBvc3QgcHJvY2Vzc2luZyBhZnRlciB0aGUgYnVpbGQNCitwb3N0X2J1aWxkIDo6ICQoUE9TVF9CVUlMRF9TVEVQKSBkZXBsb3lfb3V0cHV0DQorCUBlY2hvICIiDQorDQorIyBlbnRyeSBwb2ludCBmb3IgZGVwbG95aW5nIG91dHB1dCBhZnRlciB0aGUgYnVpbGQNCitkZXBsb3lfb3V0cHV0IDo6DQorCUBlY2hvICIiDQorDQorY2xlYW4gOjogZXh0ZXJuYWxfY2xlYW4gJChDTEVBTl9TVEVQKSBfY2xlYW4NCisNCisjIGVudHJ5IHBvaW50IGZvciBleHRlbmRpbmcgdGhlIGJ1aWxkIGNsZWFuDQorZXh0ZXJuYWxfY2xlYW4gOjoNCisJQGVjaG8gIiINCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi92aXNhL3Zpc2EuaCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL3Zpc2EvdmlzYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwOWY0NjEKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dQSUxpYi92aXNhL3Zpc2EuaApAQCAtMCwwICsxLDEwNjQgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisvKiBEaXN0cmlidXRlZCBieSBJVkkgRm91bmRhdGlvbiBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorLyogQ29udGFpbnMgTmF0aW9uYWwgSW5zdHJ1bWVudHMgZXh0ZW5zaW9ucy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKy8qIERvIG5vdCBtb2RpZnkgdGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKy8qIFRpdGxlICAgOiBWSVNBLkggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisvKiBEYXRlICAgIDogMTAtMDktMjAwNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorLyogUHVycG9zZSA6IEluY2x1ZGUgZmlsZSBmb3IgdGhlIFZJU0EgTGlicmFyeSA0LjAgc3BlY2lmaWNhdGlvbiAgICAgICAgICAgICAqLw0KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorLyogV2hlbiB1c2luZyBOSS1WSVNBIGV4dGVuc2lvbnMsIHlvdSBtdXN0IGxpbmsgd2l0aCB0aGUgVklTQSBsaWJyYXJ5IHRoYXQgICAqLw0KKy8qIGNvbWVzIHdpdGggTkktVklTQS4gIEN1cnJlbnRseSwgdGhlIGV4dGVuc2lvbnMgcHJvdmlkZWQgYnkgTkktVklTQSBhcmU6ICAgKi8NCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorLyogUFhJIChDb21wYWN0IFBDSSBlWHRlbnNpb25zIGZvciBJbnN0cnVtZW50YXRpb24pIGFuZCBQQ0kgc3VwcG9ydC4gIFRvIHVzZSAqLw0KKy8qIHRoaXMsIHlvdSBtdXN0IGRlZmluZSB0aGUgbWFjcm8gTklWSVNBX1BYSSBiZWZvcmUgaW5jbHVkaW5nIHRoaXMgaGVhZGVyLiAgKi8NCisvKiBZb3UgbXVzdCBhbHNvIGNyZWF0ZSBhbiBJTkYgZmlsZSB3aXRoIHRoZSBWSVNBIERyaXZlciBEZXZlbG9wbWVudCBXaXphcmQuICovDQorLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKy8qIEEgZmFzdCBzZXQgb2YgbWFjcm9zIGZvciB2aVBlZWtYWC92aVBva2VYWCB0aGF0IGd1YXJhbnRlZXMgYmluYXJ5ICAgICAgICAgKi8NCisvKiBjb21wYXRpYmlsaXR5IHdpdGggb3RoZXIgaW1wbGVtZW50YXRpb25zIG9mIFZJU0EuICBUbyB1c2UgdGhpcywgeW91IG11c3QgICovDQorLyogZGVmaW5lIHRoZSBtYWNybyBOSVZJU0FfUEVFS1BPS0UgYmVmb3JlIGluY2x1ZGluZyB0aGlzIGhlYWRlci4gICAgICAgICAgICAqLw0KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisvKiBTdXBwb3J0IGZvciBVU0IgZGV2aWNlcyB0aGF0IGRvIG5vdCBjb25mb3JtIHRvIGEgc3BlY2lmaWMgY2xhc3MuICBUbyB1c2UgICovDQorLyogdGhpcywgeW91IG11c3QgZGVmaW5lIHRoZSBtYWNybyBOSVZJU0FfVVNCIGJlZm9yZSBpbmNsdWRpbmcgdGhpcyBoZWFkZXIuICAqLw0KKy8qIFlvdSBtdXN0IGFsc28gY3JlYXRlIGFuIElORiBmaWxlIHdpdGggdGhlIFZJU0EgRHJpdmVyIERldmVsb3BtZW50IFdpemFyZC4gKi8NCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorI2lmbmRlZiBfX1ZJU0FfSEVBREVSX18NCisjZGVmaW5lIF9fVklTQV9IRUFERVJfXw0KKw0KKyNpbmNsdWRlIDxzdGRhcmcuaD4NCisNCisjaWYgIWRlZmluZWQoX19WSVNBVFlQRV9IRUFERVJfXykNCisjaW5jbHVkZSAidmlzYXR5cGUuaCINCisjZW5kaWYNCisNCisjZGVmaW5lIFZJX1NQRUNfVkVSU0lPTiAgICAgKDB4MDA0MDAwMDBVTCkNCisNCisjaWYgZGVmaW5lZChfX2NwbHVzcGx1cykgfHwgZGVmaW5lZChfX2NwbHVzcGx1c19fKQ0KKyAgIGV4dGVybiAiQyIgew0KKyNlbmRpZg0KKw0KKyNpZiBkZWZpbmVkKF9DVklfKQ0KKyNwcmFnbWEgRW5hYmxlTGlicmFyeVJ1bnRpbWVDaGVja2luZw0KKyNlbmRpZg0KKw0KKy8qLSBWSVNBIFR5cGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCit0eXBlZGVmIFZpT2JqZWN0ICAgICAgICAgICAgIFZpRXZlbnQ7DQordHlwZWRlZiBWaUV2ZW50ICAgICAgX1ZJX1BUUiBWaVBFdmVudDsNCit0eXBlZGVmIFZpT2JqZWN0ICAgICAgICAgICAgIFZpRmluZExpc3Q7DQordHlwZWRlZiBWaUZpbmRMaXN0ICAgX1ZJX1BUUiBWaVBGaW5kTGlzdDsNCisNCisjaWYgZGVmaW5lZChfVklfSU5UNjRfVUlOVDY0X0RFRklORUQpICYmIGRlZmluZWQoX1ZJU0FfRU5WX0lTXzY0X0JJVCkNCit0eXBlZGVmIFZpVUludDY0ICAgICAgICAgICAgIFZpQnVzQWRkcmVzczsNCit0eXBlZGVmIFZpVUludDY0ICAgICAgICAgICAgIFZpQnVzU2l6ZTsNCit0eXBlZGVmIFZpVUludDY0ICAgICAgICAgICAgIFZpQXR0clN0YXRlOw0KKyNlbHNlDQordHlwZWRlZiBWaVVJbnQzMiAgICAgICAgICAgICBWaUJ1c0FkZHJlc3M7DQordHlwZWRlZiBWaVVJbnQzMiAgICAgICAgICAgICBWaUJ1c1NpemU7DQordHlwZWRlZiBWaVVJbnQzMiAgICAgICAgICAgICBWaUF0dHJTdGF0ZTsNCisjZW5kaWYNCisNCisjaWYgZGVmaW5lZChfVklfSU5UNjRfVUlOVDY0X0RFRklORUQpDQordHlwZWRlZiBWaVVJbnQ2NCAgICAgICAgICAgICBWaUJ1c0FkZHJlc3M2NDsNCit0eXBlZGVmIFZpQnVzQWRkcmVzczY0IF9WSV9QVFIgVmlQQnVzQWRkcmVzczY0Ow0KKyNlbmRpZg0KKw0KK3R5cGVkZWYgVmlVSW50MzIgICAgICAgICAgICAgVmlFdmVudFR5cGU7DQordHlwZWRlZiBWaUV2ZW50VHlwZSAgX1ZJX1BUUiBWaVBFdmVudFR5cGU7DQordHlwZWRlZiBWaUV2ZW50VHlwZSAgX1ZJX1BUUiBWaUFFdmVudFR5cGU7DQordHlwZWRlZiB2b2lkICAgICAgICAgX1ZJX1BUUiBWaVBBdHRyU3RhdGU7DQordHlwZWRlZiBWaUF0dHIgICAgICAgX1ZJX1BUUiBWaVBBdHRyOw0KK3R5cGVkZWYgVmlBdHRyICAgICAgIF9WSV9QVFIgVmlBQXR0cjsNCisNCit0eXBlZGVmIFZpU3RyaW5nICAgICAgICAgICAgIFZpS2V5SWQ7DQordHlwZWRlZiBWaVBTdHJpbmcgICAgICAgICAgICBWaVBLZXlJZDsNCit0eXBlZGVmIFZpVUludDMyICAgICAgICAgICAgIFZpSm9iSWQ7DQordHlwZWRlZiBWaUpvYklkICAgICAgX1ZJX1BUUiBWaVBKb2JJZDsNCit0eXBlZGVmIFZpVUludDMyICAgICAgICAgICAgIFZpQWNjZXNzTW9kZTsNCit0eXBlZGVmIFZpQWNjZXNzTW9kZSBfVklfUFRSIFZpUEFjY2Vzc01vZGU7DQordHlwZWRlZiBWaUJ1c0FkZHJlc3MgX1ZJX1BUUiBWaVBCdXNBZGRyZXNzOw0KK3R5cGVkZWYgVmlVSW50MzIgICAgICAgICAgICAgVmlFdmVudEZpbHRlcjsNCisNCit0eXBlZGVmIHZhX2xpc3QgICAgICAgICAgICAgIFZpVkFMaXN0Ow0KKw0KK3R5cGVkZWYgVmlTdGF0dXMgKF9WSV9GVU5DSCBfVklfUFRSIFZpSG5kbHIpDQorICAgKFZpU2Vzc2lvbiB2aSwgVmlFdmVudFR5cGUgZXZlbnRUeXBlLCBWaUV2ZW50IGV2ZW50LCBWaUFkZHIgdXNlckhhbmRsZSk7DQorDQorLyotIFJlc291cmNlIE1hbmFnZXIgRnVuY3Rpb25zIGFuZCBPcGVyYXRpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK1ZpU3RhdHVzIF9WSV9GVU5DICB2aU9wZW5EZWZhdWx0Uk0gKFZpUFNlc3Npb24gdmkpOw0KK1ZpU3RhdHVzIF9WSV9GVU5DICB2aUZpbmRSc3JjICAgICAgKFZpU2Vzc2lvbiBzZXNuLCBWaVN0cmluZyBleHByLCBWaVBGaW5kTGlzdCB2aSwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWaVBVSW50MzIgcmV0Q250LCBWaUNoYXIgX1ZJX0ZBUiBkZXNjW10pOw0KK1ZpU3RhdHVzIF9WSV9GVU5DICB2aUZpbmROZXh0ICAgICAgKFZpRmluZExpc3QgdmksIFZpQ2hhciBfVklfRkFSIGRlc2NbXSk7DQorVmlTdGF0dXMgX1ZJX0ZVTkMgIHZpUGFyc2VSc3JjICAgICAoVmlTZXNzaW9uIHJtU2VzbiwgVmlSc3JjIHJzcmNOYW1lLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpUFVJbnQxNiBpbnRmVHlwZSwgVmlQVUludDE2IGludGZOdW0pOw0KK1ZpU3RhdHVzIF9WSV9GVU5DICB2aVBhcnNlUnNyY0V4ICAgKFZpU2Vzc2lvbiBybVNlc24sIFZpUnNyYyByc3JjTmFtZSwgVmlQVUludDE2IGludGZUeXBlLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpUFVJbnQxNiBpbnRmTnVtLCBWaUNoYXIgX1ZJX0ZBUiByc3JjQ2xhc3NbXSwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWaUNoYXIgX1ZJX0ZBUiBleHBhbmRlZFVuYWxpYXNlZE5hbWVbXSwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWaUNoYXIgX1ZJX0ZBUiBhbGlhc0lmRXhpc3RzW10pOw0KK1ZpU3RhdHVzIF9WSV9GVU5DICB2aU9wZW4gICAgICAgICAgKFZpU2Vzc2lvbiBzZXNuLCBWaVJzcmMgbmFtZSwgVmlBY2Nlc3NNb2RlIG1vZGUsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlVSW50MzIgdGltZW91dCwgVmlQU2Vzc2lvbiB2aSk7DQorDQorLyotIFJlc291cmNlIFRlbXBsYXRlIE9wZXJhdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK1ZpU3RhdHVzIF9WSV9GVU5DICB2aUNsb3NlICAgICAgICAgKFZpT2JqZWN0IHZpKTsNCitWaVN0YXR1cyBfVklfRlVOQyAgdmlTZXRBdHRyaWJ1dGUgIChWaU9iamVjdCB2aSwgVmlBdHRyIGF0dHJOYW1lLCBWaUF0dHJTdGF0ZSBhdHRyVmFsdWUpOw0KK1ZpU3RhdHVzIF9WSV9GVU5DICB2aUdldEF0dHJpYnV0ZSAgKFZpT2JqZWN0IHZpLCBWaUF0dHIgYXR0ck5hbWUsIHZvaWQgX1ZJX1BUUiBhdHRyVmFsdWUpOw0KK1ZpU3RhdHVzIF9WSV9GVU5DICB2aVN0YXR1c0Rlc2MgICAgKFZpT2JqZWN0IHZpLCBWaVN0YXR1cyBzdGF0dXMsIFZpQ2hhciBfVklfRkFSIGRlc2NbXSk7DQorVmlTdGF0dXMgX1ZJX0ZVTkMgIHZpVGVybWluYXRlICAgICAoVmlPYmplY3QgdmksIFZpVUludDE2IGRlZ3JlZSwgVmlKb2JJZCBqb2JJZCk7DQorDQorVmlTdGF0dXMgX1ZJX0ZVTkMgIHZpTG9jayAgICAgICAgICAoVmlTZXNzaW9uIHZpLCBWaUFjY2Vzc01vZGUgbG9ja1R5cGUsIFZpVUludDMyIHRpbWVvdXQsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlLZXlJZCByZXF1ZXN0ZWRLZXksIFZpQ2hhciBfVklfRkFSIGFjY2Vzc0tleVtdKTsNCitWaVN0YXR1cyBfVklfRlVOQyAgdmlVbmxvY2sgICAgICAgIChWaVNlc3Npb24gdmkpOw0KK1ZpU3RhdHVzIF9WSV9GVU5DICB2aUVuYWJsZUV2ZW50ICAgKFZpU2Vzc2lvbiB2aSwgVmlFdmVudFR5cGUgZXZlbnRUeXBlLCBWaVVJbnQxNiBtZWNoYW5pc20sDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlFdmVudEZpbHRlciBjb250ZXh0KTsNCitWaVN0YXR1cyBfVklfRlVOQyAgdmlEaXNhYmxlRXZlbnQgIChWaVNlc3Npb24gdmksIFZpRXZlbnRUeXBlIGV2ZW50VHlwZSwgVmlVSW50MTYgbWVjaGFuaXNtKTsNCitWaVN0YXR1cyBfVklfRlVOQyAgdmlEaXNjYXJkRXZlbnRzIChWaVNlc3Npb24gdmksIFZpRXZlbnRUeXBlIGV2ZW50VHlwZSwgVmlVSW50MTYgbWVjaGFuaXNtKTsNCitWaVN0YXR1cyBfVklfRlVOQyAgdmlXYWl0T25FdmVudCAgIChWaVNlc3Npb24gdmksIFZpRXZlbnRUeXBlIGluRXZlbnRUeXBlLCBWaVVJbnQzMiB0aW1lb3V0LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpUEV2ZW50VHlwZSBvdXRFdmVudFR5cGUsIFZpUEV2ZW50IG91dENvbnRleHQpOw0KK1ZpU3RhdHVzIF9WSV9GVU5DICB2aUluc3RhbGxIYW5kbGVyKFZpU2Vzc2lvbiB2aSwgVmlFdmVudFR5cGUgZXZlbnRUeXBlLCBWaUhuZGxyIGhhbmRsZXIsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlBZGRyIHVzZXJIYW5kbGUpOw0KK1ZpU3RhdHVzIF9WSV9GVU5DICB2aVVuaW5zdGFsbEhhbmRsZXIoVmlTZXNzaW9uIHZpLCBWaUV2ZW50VHlwZSBldmVudFR5cGUsIFZpSG5kbHIgaGFuZGxlciwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpQWRkciB1c2VySGFuZGxlKTsNCisNCisvKi0gQmFzaWMgSS9PIE9wZXJhdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorVmlTdGF0dXMgX1ZJX0ZVTkMgIHZpUmVhZCAgICAgICAgICAoVmlTZXNzaW9uIHZpLCBWaVBCdWYgYnVmLCBWaVVJbnQzMiBjbnQsIFZpUFVJbnQzMiByZXRDbnQpOw0KK1ZpU3RhdHVzIF9WSV9GVU5DICB2aVJlYWRBc3luYyAgICAgKFZpU2Vzc2lvbiB2aSwgVmlQQnVmIGJ1ZiwgVmlVSW50MzIgY250LCBWaVBKb2JJZCAgam9iSWQpOw0KK1ZpU3RhdHVzIF9WSV9GVU5DICB2aVJlYWRUb0ZpbGUgICAgKFZpU2Vzc2lvbiB2aSwgVmlDb25zdFN0cmluZyBmaWxlbmFtZSwgVmlVSW50MzIgY250LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpUFVJbnQzMiByZXRDbnQpOw0KK1ZpU3RhdHVzIF9WSV9GVU5DICB2aVdyaXRlICAgICAgICAgKFZpU2Vzc2lvbiB2aSwgVmlCdWYgIGJ1ZiwgVmlVSW50MzIgY250LCBWaVBVSW50MzIgcmV0Q250KTsNCitWaVN0YXR1cyBfVklfRlVOQyAgdmlXcml0ZUFzeW5jICAgIChWaVNlc3Npb24gdmksIFZpQnVmICBidWYsIFZpVUludDMyIGNudCwgVmlQSm9iSWQgIGpvYklkKTsNCitWaVN0YXR1cyBfVklfRlVOQyAgdmlXcml0ZUZyb21GaWxlIChWaVNlc3Npb24gdmksIFZpQ29uc3RTdHJpbmcgZmlsZW5hbWUsIFZpVUludDMyIGNudCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWaVBVSW50MzIgcmV0Q250KTsNCitWaVN0YXR1cyBfVklfRlVOQyAgdmlBc3NlcnRUcmlnZ2VyIChWaVNlc3Npb24gdmksIFZpVUludDE2IHByb3RvY29sKTsNCitWaVN0YXR1cyBfVklfRlVOQyAgdmlSZWFkU1RCICAgICAgIChWaVNlc3Npb24gdmksIFZpUFVJbnQxNiBzdGF0dXMpOw0KK1ZpU3RhdHVzIF9WSV9GVU5DICB2aUNsZWFyICAgICAgICAgKFZpU2Vzc2lvbiB2aSk7DQorDQorLyotIEZvcm1hdHRlZCBhbmQgQnVmZmVyZWQgSS9PIE9wZXJhdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KK1ZpU3RhdHVzIF9WSV9GVU5DICB2aVNldEJ1ZiAgICAgICAgKFZpU2Vzc2lvbiB2aSwgVmlVSW50MTYgbWFzaywgVmlVSW50MzIgc2l6ZSk7DQorVmlTdGF0dXMgX1ZJX0ZVTkMgIHZpRmx1c2ggICAgICAgICAoVmlTZXNzaW9uIHZpLCBWaVVJbnQxNiBtYXNrKTsNCisNCitWaVN0YXR1cyBfVklfRlVOQyAgdmlCdWZXcml0ZSAgICAgIChWaVNlc3Npb24gdmksIFZpQnVmICBidWYsIFZpVUludDMyIGNudCwgVmlQVUludDMyIHJldENudCk7DQorVmlTdGF0dXMgX1ZJX0ZVTkMgIHZpQnVmUmVhZCAgICAgICAoVmlTZXNzaW9uIHZpLCBWaVBCdWYgYnVmLCBWaVVJbnQzMiBjbnQsIFZpUFVJbnQzMiByZXRDbnQpOw0KKw0KK1ZpU3RhdHVzIF9WSV9GVU5DQyB2aVByaW50ZiAgICAgICAgKFZpU2Vzc2lvbiB2aSwgVmlTdHJpbmcgd3JpdGVGbXQsIC4uLik7DQorVmlTdGF0dXMgX1ZJX0ZVTkMgIHZpVlByaW50ZiAgICAgICAoVmlTZXNzaW9uIHZpLCBWaVN0cmluZyB3cml0ZUZtdCwgVmlWQUxpc3QgcGFyYW1zKTsNCitWaVN0YXR1cyBfVklfRlVOQ0MgdmlTUHJpbnRmICAgICAgIChWaVNlc3Npb24gdmksIFZpUEJ1ZiBidWYsIFZpU3RyaW5nIHdyaXRlRm10LCAuLi4pOw0KK1ZpU3RhdHVzIF9WSV9GVU5DICB2aVZTUHJpbnRmICAgICAgKFZpU2Vzc2lvbiB2aSwgVmlQQnVmIGJ1ZiwgVmlTdHJpbmcgd3JpdGVGbXQsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlWQUxpc3QgcGFybXMpOw0KKw0KK1ZpU3RhdHVzIF9WSV9GVU5DQyB2aVNjYW5mICAgICAgICAgKFZpU2Vzc2lvbiB2aSwgVmlTdHJpbmcgcmVhZEZtdCwgLi4uKTsNCitWaVN0YXR1cyBfVklfRlVOQyAgdmlWU2NhbmYgICAgICAgIChWaVNlc3Npb24gdmksIFZpU3RyaW5nIHJlYWRGbXQsIFZpVkFMaXN0IHBhcmFtcyk7DQorVmlTdGF0dXMgX1ZJX0ZVTkNDIHZpU1NjYW5mICAgICAgICAoVmlTZXNzaW9uIHZpLCBWaUJ1ZiBidWYsIFZpU3RyaW5nIHJlYWRGbXQsIC4uLik7DQorVmlTdGF0dXMgX1ZJX0ZVTkMgIHZpVlNTY2FuZiAgICAgICAoVmlTZXNzaW9uIHZpLCBWaUJ1ZiBidWYsIFZpU3RyaW5nIHJlYWRGbXQsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlWQUxpc3QgcGFybXMpOw0KKw0KK1ZpU3RhdHVzIF9WSV9GVU5DQyB2aVF1ZXJ5ZiAgICAgICAgKFZpU2Vzc2lvbiB2aSwgVmlTdHJpbmcgd3JpdGVGbXQsIFZpU3RyaW5nIHJlYWRGbXQsIC4uLik7DQorVmlTdGF0dXMgX1ZJX0ZVTkMgIHZpVlF1ZXJ5ZiAgICAgICAoVmlTZXNzaW9uIHZpLCBWaVN0cmluZyB3cml0ZUZtdCwgVmlTdHJpbmcgcmVhZEZtdCwgDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlWQUxpc3QgcGFyYW1zKTsNCisNCisvKi0gTWVtb3J5IEkvTyBPcGVyYXRpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorVmlTdGF0dXMgX1ZJX0ZVTkMgIHZpSW44ICAgICAgICAgICAoVmlTZXNzaW9uIHZpLCBWaVVJbnQxNiBzcGFjZSwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWaUJ1c0FkZHJlc3Mgb2Zmc2V0LCBWaVBVSW50OCAgdmFsOCk7DQorVmlTdGF0dXMgX1ZJX0ZVTkMgIHZpT3V0OCAgICAgICAgICAoVmlTZXNzaW9uIHZpLCBWaVVJbnQxNiBzcGFjZSwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWaUJ1c0FkZHJlc3Mgb2Zmc2V0LCBWaVVJbnQ4ICAgdmFsOCk7DQorVmlTdGF0dXMgX1ZJX0ZVTkMgIHZpSW4xNiAgICAgICAgICAoVmlTZXNzaW9uIHZpLCBWaVVJbnQxNiBzcGFjZSwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWaUJ1c0FkZHJlc3Mgb2Zmc2V0LCBWaVBVSW50MTYgdmFsMTYpOw0KK1ZpU3RhdHVzIF9WSV9GVU5DICB2aU91dDE2ICAgICAgICAgKFZpU2Vzc2lvbiB2aSwgVmlVSW50MTYgc3BhY2UsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlCdXNBZGRyZXNzIG9mZnNldCwgVmlVSW50MTYgIHZhbDE2KTsNCitWaVN0YXR1cyBfVklfRlVOQyAgdmlJbjMyICAgICAgICAgIChWaVNlc3Npb24gdmksIFZpVUludDE2IHNwYWNlLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpQnVzQWRkcmVzcyBvZmZzZXQsIFZpUFVJbnQzMiB2YWwzMik7DQorVmlTdGF0dXMgX1ZJX0ZVTkMgIHZpT3V0MzIgICAgICAgICAoVmlTZXNzaW9uIHZpLCBWaVVJbnQxNiBzcGFjZSwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWaUJ1c0FkZHJlc3Mgb2Zmc2V0LCBWaVVJbnQzMiAgdmFsMzIpOw0KKw0KKyNpZiBkZWZpbmVkKF9WSV9JTlQ2NF9VSU5UNjRfREVGSU5FRCkNCitWaVN0YXR1cyBfVklfRlVOQyAgdmlJbjY0ICAgICAgICAgIChWaVNlc3Npb24gdmksIFZpVUludDE2IHNwYWNlLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpQnVzQWRkcmVzcyBvZmZzZXQsIFZpUFVJbnQ2NCB2YWw2NCk7DQorVmlTdGF0dXMgX1ZJX0ZVTkMgIHZpT3V0NjQgICAgICAgICAoVmlTZXNzaW9uIHZpLCBWaVVJbnQxNiBzcGFjZSwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWaUJ1c0FkZHJlc3Mgb2Zmc2V0LCBWaVVJbnQ2NCAgdmFsNjQpOw0KKw0KK1ZpU3RhdHVzIF9WSV9GVU5DICB2aUluOEV4ICAgICAgICAgKFZpU2Vzc2lvbiB2aSwgVmlVSW50MTYgc3BhY2UsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlCdXNBZGRyZXNzNjQgb2Zmc2V0LCBWaVBVSW50OCAgdmFsOCk7DQorVmlTdGF0dXMgX1ZJX0ZVTkMgIHZpT3V0OEV4ICAgICAgICAoVmlTZXNzaW9uIHZpLCBWaVVJbnQxNiBzcGFjZSwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWaUJ1c0FkZHJlc3M2NCBvZmZzZXQsIFZpVUludDggICB2YWw4KTsNCitWaVN0YXR1cyBfVklfRlVOQyAgdmlJbjE2RXggICAgICAgIChWaVNlc3Npb24gdmksIFZpVUludDE2IHNwYWNlLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpQnVzQWRkcmVzczY0IG9mZnNldCwgVmlQVUludDE2IHZhbDE2KTsNCitWaVN0YXR1cyBfVklfRlVOQyAgdmlPdXQxNkV4ICAgICAgIChWaVNlc3Npb24gdmksIFZpVUludDE2IHNwYWNlLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpQnVzQWRkcmVzczY0IG9mZnNldCwgVmlVSW50MTYgIHZhbDE2KTsNCitWaVN0YXR1cyBfVklfRlVOQyAgdmlJbjMyRXggICAgICAgIChWaVNlc3Npb24gdmksIFZpVUludDE2IHNwYWNlLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpQnVzQWRkcmVzczY0IG9mZnNldCwgVmlQVUludDMyIHZhbDMyKTsNCitWaVN0YXR1cyBfVklfRlVOQyAgdmlPdXQzMkV4ICAgICAgIChWaVNlc3Npb24gdmksIFZpVUludDE2IHNwYWNlLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpQnVzQWRkcmVzczY0IG9mZnNldCwgVmlVSW50MzIgIHZhbDMyKTsNCitWaVN0YXR1cyBfVklfRlVOQyAgdmlJbjY0RXggICAgICAgIChWaVNlc3Npb24gdmksIFZpVUludDE2IHNwYWNlLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpQnVzQWRkcmVzczY0IG9mZnNldCwgVmlQVUludDY0IHZhbDY0KTsNCitWaVN0YXR1cyBfVklfRlVOQyAgdmlPdXQ2NEV4ICAgICAgIChWaVNlc3Npb24gdmksIFZpVUludDE2IHNwYWNlLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpQnVzQWRkcmVzczY0IG9mZnNldCwgVmlVSW50NjQgIHZhbDY0KTsNCisjZW5kaWYNCisNCitWaVN0YXR1cyBfVklfRlVOQyAgdmlNb3ZlSW44ICAgICAgIChWaVNlc3Npb24gdmksIFZpVUludDE2IHNwYWNlLCBWaUJ1c0FkZHJlc3Mgb2Zmc2V0LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpQnVzU2l6ZSBsZW5ndGgsIFZpQVVJbnQ4ICBidWY4KTsNCitWaVN0YXR1cyBfVklfRlVOQyAgdmlNb3ZlT3V0OCAgICAgIChWaVNlc3Npb24gdmksIFZpVUludDE2IHNwYWNlLCBWaUJ1c0FkZHJlc3Mgb2Zmc2V0LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpQnVzU2l6ZSBsZW5ndGgsIFZpQVVJbnQ4ICBidWY4KTsNCitWaVN0YXR1cyBfVklfRlVOQyAgdmlNb3ZlSW4xNiAgICAgIChWaVNlc3Npb24gdmksIFZpVUludDE2IHNwYWNlLCBWaUJ1c0FkZHJlc3Mgb2Zmc2V0LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpQnVzU2l6ZSBsZW5ndGgsIFZpQVVJbnQxNiBidWYxNik7DQorVmlTdGF0dXMgX1ZJX0ZVTkMgIHZpTW92ZU91dDE2ICAgICAoVmlTZXNzaW9uIHZpLCBWaVVJbnQxNiBzcGFjZSwgVmlCdXNBZGRyZXNzIG9mZnNldCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWaUJ1c1NpemUgbGVuZ3RoLCBWaUFVSW50MTYgYnVmMTYpOw0KK1ZpU3RhdHVzIF9WSV9GVU5DICB2aU1vdmVJbjMyICAgICAgKFZpU2Vzc2lvbiB2aSwgVmlVSW50MTYgc3BhY2UsIFZpQnVzQWRkcmVzcyBvZmZzZXQsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlCdXNTaXplIGxlbmd0aCwgVmlBVUludDMyIGJ1ZjMyKTsNCitWaVN0YXR1cyBfVklfRlVOQyAgdmlNb3ZlT3V0MzIgICAgIChWaVNlc3Npb24gdmksIFZpVUludDE2IHNwYWNlLCBWaUJ1c0FkZHJlc3Mgb2Zmc2V0LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpQnVzU2l6ZSBsZW5ndGgsIFZpQVVJbnQzMiBidWYzMik7DQorDQorI2lmIGRlZmluZWQoX1ZJX0lOVDY0X1VJTlQ2NF9ERUZJTkVEKQ0KK1ZpU3RhdHVzIF9WSV9GVU5DICB2aU1vdmVJbjY0ICAgICAgKFZpU2Vzc2lvbiB2aSwgVmlVSW50MTYgc3BhY2UsIFZpQnVzQWRkcmVzcyBvZmZzZXQsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlCdXNTaXplIGxlbmd0aCwgVmlBVUludDY0IGJ1ZjY0KTsNCitWaVN0YXR1cyBfVklfRlVOQyAgdmlNb3ZlT3V0NjQgICAgIChWaVNlc3Npb24gdmksIFZpVUludDE2IHNwYWNlLCBWaUJ1c0FkZHJlc3Mgb2Zmc2V0LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpQnVzU2l6ZSBsZW5ndGgsIFZpQVVJbnQ2NCBidWY2NCk7DQorDQorVmlTdGF0dXMgX1ZJX0ZVTkMgIHZpTW92ZUluOEV4ICAgICAoVmlTZXNzaW9uIHZpLCBWaVVJbnQxNiBzcGFjZSwgVmlCdXNBZGRyZXNzNjQgb2Zmc2V0LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpQnVzU2l6ZSBsZW5ndGgsIFZpQVVJbnQ4ICBidWY4KTsNCitWaVN0YXR1cyBfVklfRlVOQyAgdmlNb3ZlT3V0OEV4ICAgIChWaVNlc3Npb24gdmksIFZpVUludDE2IHNwYWNlLCBWaUJ1c0FkZHJlc3M2NCBvZmZzZXQsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlCdXNTaXplIGxlbmd0aCwgVmlBVUludDggIGJ1ZjgpOw0KK1ZpU3RhdHVzIF9WSV9GVU5DICB2aU1vdmVJbjE2RXggICAgKFZpU2Vzc2lvbiB2aSwgVmlVSW50MTYgc3BhY2UsIFZpQnVzQWRkcmVzczY0IG9mZnNldCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWaUJ1c1NpemUgbGVuZ3RoLCBWaUFVSW50MTYgYnVmMTYpOw0KK1ZpU3RhdHVzIF9WSV9GVU5DICB2aU1vdmVPdXQxNkV4ICAgKFZpU2Vzc2lvbiB2aSwgVmlVSW50MTYgc3BhY2UsIFZpQnVzQWRkcmVzczY0IG9mZnNldCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWaUJ1c1NpemUgbGVuZ3RoLCBWaUFVSW50MTYgYnVmMTYpOw0KK1ZpU3RhdHVzIF9WSV9GVU5DICB2aU1vdmVJbjMyRXggICAgKFZpU2Vzc2lvbiB2aSwgVmlVSW50MTYgc3BhY2UsIFZpQnVzQWRkcmVzczY0IG9mZnNldCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWaUJ1c1NpemUgbGVuZ3RoLCBWaUFVSW50MzIgYnVmMzIpOw0KK1ZpU3RhdHVzIF9WSV9GVU5DICB2aU1vdmVPdXQzMkV4ICAgKFZpU2Vzc2lvbiB2aSwgVmlVSW50MTYgc3BhY2UsIFZpQnVzQWRkcmVzczY0IG9mZnNldCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWaUJ1c1NpemUgbGVuZ3RoLCBWaUFVSW50MzIgYnVmMzIpOw0KK1ZpU3RhdHVzIF9WSV9GVU5DICB2aU1vdmVJbjY0RXggICAgKFZpU2Vzc2lvbiB2aSwgVmlVSW50MTYgc3BhY2UsIFZpQnVzQWRkcmVzczY0IG9mZnNldCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWaUJ1c1NpemUgbGVuZ3RoLCBWaUFVSW50NjQgYnVmNjQpOw0KK1ZpU3RhdHVzIF9WSV9GVU5DICB2aU1vdmVPdXQ2NEV4ICAgKFZpU2Vzc2lvbiB2aSwgVmlVSW50MTYgc3BhY2UsIFZpQnVzQWRkcmVzczY0IG9mZnNldCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWaUJ1c1NpemUgbGVuZ3RoLCBWaUFVSW50NjQgYnVmNjQpOw0KKyNlbmRpZg0KKw0KK1ZpU3RhdHVzIF9WSV9GVU5DICB2aU1vdmUgICAgICAgICAgKFZpU2Vzc2lvbiB2aSwgVmlVSW50MTYgc3JjU3BhY2UsIFZpQnVzQWRkcmVzcyBzcmNPZmZzZXQsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlVSW50MTYgc3JjV2lkdGgsIFZpVUludDE2IGRlc3RTcGFjZSwgDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlCdXNBZGRyZXNzIGRlc3RPZmZzZXQsIFZpVUludDE2IGRlc3RXaWR0aCwgDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlCdXNTaXplIHNyY0xlbmd0aCk7IA0KK1ZpU3RhdHVzIF9WSV9GVU5DICB2aU1vdmVBc3luYyAgICAgKFZpU2Vzc2lvbiB2aSwgVmlVSW50MTYgc3JjU3BhY2UsIFZpQnVzQWRkcmVzcyBzcmNPZmZzZXQsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlVSW50MTYgc3JjV2lkdGgsIFZpVUludDE2IGRlc3RTcGFjZSwgDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlCdXNBZGRyZXNzIGRlc3RPZmZzZXQsIFZpVUludDE2IGRlc3RXaWR0aCwgDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlCdXNTaXplIHNyY0xlbmd0aCwgVmlQSm9iSWQgam9iSWQpOw0KKw0KKyNpZiBkZWZpbmVkKF9WSV9JTlQ2NF9VSU5UNjRfREVGSU5FRCkNCitWaVN0YXR1cyBfVklfRlVOQyAgdmlNb3ZlRXggICAgICAgIChWaVNlc3Npb24gdmksIFZpVUludDE2IHNyY1NwYWNlLCBWaUJ1c0FkZHJlc3M2NCBzcmNPZmZzZXQsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlVSW50MTYgc3JjV2lkdGgsIFZpVUludDE2IGRlc3RTcGFjZSwgDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlCdXNBZGRyZXNzNjQgZGVzdE9mZnNldCwgVmlVSW50MTYgZGVzdFdpZHRoLCANCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWaUJ1c1NpemUgc3JjTGVuZ3RoKTsgDQorVmlTdGF0dXMgX1ZJX0ZVTkMgIHZpTW92ZUFzeW5jRXggICAoVmlTZXNzaW9uIHZpLCBWaVVJbnQxNiBzcmNTcGFjZSwgVmlCdXNBZGRyZXNzNjQgc3JjT2Zmc2V0LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpVUludDE2IHNyY1dpZHRoLCBWaVVJbnQxNiBkZXN0U3BhY2UsIA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpQnVzQWRkcmVzczY0IGRlc3RPZmZzZXQsIFZpVUludDE2IGRlc3RXaWR0aCwgDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlCdXNTaXplIHNyY0xlbmd0aCwgVmlQSm9iSWQgam9iSWQpOw0KKyNlbmRpZg0KKw0KK1ZpU3RhdHVzIF9WSV9GVU5DICB2aU1hcEFkZHJlc3MgICAgKFZpU2Vzc2lvbiB2aSwgVmlVSW50MTYgbWFwU3BhY2UsIFZpQnVzQWRkcmVzcyBtYXBPZmZzZXQsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlCdXNTaXplIG1hcFNpemUsIFZpQm9vbGVhbiBhY2Nlc3MsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlBZGRyIHN1Z2dlc3RlZCwgVmlQQWRkciBhZGRyZXNzKTsNCitWaVN0YXR1cyBfVklfRlVOQyAgdmlVbm1hcEFkZHJlc3MgIChWaVNlc3Npb24gdmkpOw0KKw0KKyNpZiBkZWZpbmVkKF9WSV9JTlQ2NF9VSU5UNjRfREVGSU5FRCkNCitWaVN0YXR1cyBfVklfRlVOQyAgdmlNYXBBZGRyZXNzRXggIChWaVNlc3Npb24gdmksIFZpVUludDE2IG1hcFNwYWNlLCBWaUJ1c0FkZHJlc3M2NCBtYXBPZmZzZXQsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlCdXNTaXplIG1hcFNpemUsIFZpQm9vbGVhbiBhY2Nlc3MsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlBZGRyIHN1Z2dlc3RlZCwgVmlQQWRkciBhZGRyZXNzKTsNCisjZW5kaWYNCisNCit2b2lkICAgICBfVklfRlVOQyAgdmlQZWVrOCAgICAgICAgIChWaVNlc3Npb24gdmksIFZpQWRkciBhZGRyZXNzLCBWaVBVSW50OCAgdmFsOCk7DQordm9pZCAgICAgX1ZJX0ZVTkMgIHZpUG9rZTggICAgICAgICAoVmlTZXNzaW9uIHZpLCBWaUFkZHIgYWRkcmVzcywgVmlVSW50OCAgIHZhbDgpOw0KK3ZvaWQgICAgIF9WSV9GVU5DICB2aVBlZWsxNiAgICAgICAgKFZpU2Vzc2lvbiB2aSwgVmlBZGRyIGFkZHJlc3MsIFZpUFVJbnQxNiB2YWwxNik7DQordm9pZCAgICAgX1ZJX0ZVTkMgIHZpUG9rZTE2ICAgICAgICAoVmlTZXNzaW9uIHZpLCBWaUFkZHIgYWRkcmVzcywgVmlVSW50MTYgIHZhbDE2KTsNCit2b2lkICAgICBfVklfRlVOQyAgdmlQZWVrMzIgICAgICAgIChWaVNlc3Npb24gdmksIFZpQWRkciBhZGRyZXNzLCBWaVBVSW50MzIgdmFsMzIpOw0KK3ZvaWQgICAgIF9WSV9GVU5DICB2aVBva2UzMiAgICAgICAgKFZpU2Vzc2lvbiB2aSwgVmlBZGRyIGFkZHJlc3MsIFZpVUludDMyICB2YWwzMik7DQorDQorI2lmIGRlZmluZWQoX1ZJX0lOVDY0X1VJTlQ2NF9ERUZJTkVEKQ0KK3ZvaWQgICAgIF9WSV9GVU5DICB2aVBlZWs2NCAgICAgICAgKFZpU2Vzc2lvbiB2aSwgVmlBZGRyIGFkZHJlc3MsIFZpUFVJbnQ2NCB2YWw2NCk7DQordm9pZCAgICAgX1ZJX0ZVTkMgIHZpUG9rZTY0ICAgICAgICAoVmlTZXNzaW9uIHZpLCBWaUFkZHIgYWRkcmVzcywgVmlVSW50NjQgIHZhbDY0KTsNCisjZW5kaWYNCisNCisvKi0gU2hhcmVkIE1lbW9yeSBPcGVyYXRpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorVmlTdGF0dXMgX1ZJX0ZVTkMgIHZpTWVtQWxsb2MgICAgICAoVmlTZXNzaW9uIHZpLCBWaUJ1c1NpemUgc2l6ZSwgVmlQQnVzQWRkcmVzcyBvZmZzZXQpOw0KK1ZpU3RhdHVzIF9WSV9GVU5DICB2aU1lbUZyZWUgICAgICAgKFZpU2Vzc2lvbiB2aSwgVmlCdXNBZGRyZXNzIG9mZnNldCk7DQorDQorI2lmIGRlZmluZWQoX1ZJX0lOVDY0X1VJTlQ2NF9ERUZJTkVEKQ0KK1ZpU3RhdHVzIF9WSV9GVU5DICB2aU1lbUFsbG9jRXggICAgKFZpU2Vzc2lvbiB2aSwgVmlCdXNTaXplIHNpemUsIFZpUEJ1c0FkZHJlc3M2NCBvZmZzZXQpOw0KK1ZpU3RhdHVzIF9WSV9GVU5DICB2aU1lbUZyZWVFeCAgICAgKFZpU2Vzc2lvbiB2aSwgVmlCdXNBZGRyZXNzNjQgb2Zmc2V0KTsNCisjZW5kaWYNCisNCisvKi0gSW50ZXJmYWNlIFNwZWNpZmljIE9wZXJhdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorVmlTdGF0dXMgX1ZJX0ZVTkMgIHZpR3BpYkNvbnRyb2xSRU4oVmlTZXNzaW9uIHZpLCBWaVVJbnQxNiBtb2RlKTsNCitWaVN0YXR1cyBfVklfRlVOQyAgdmlHcGliQ29udHJvbEFUTihWaVNlc3Npb24gdmksIFZpVUludDE2IG1vZGUpOw0KK1ZpU3RhdHVzIF9WSV9GVU5DICB2aUdwaWJTZW5kSUZDICAgKFZpU2Vzc2lvbiB2aSk7DQorVmlTdGF0dXMgX1ZJX0ZVTkMgIHZpR3BpYkNvbW1hbmQgICAoVmlTZXNzaW9uIHZpLCBWaUJ1ZiBjbWQsIFZpVUludDMyIGNudCwgVmlQVUludDMyIHJldENudCk7DQorVmlTdGF0dXMgX1ZJX0ZVTkMgIHZpR3BpYlBhc3NDb250cm9sKFZpU2Vzc2lvbiB2aSwgVmlVSW50MTYgcHJpbUFkZHIsIFZpVUludDE2IHNlY0FkZHIpOw0KKw0KK1ZpU3RhdHVzIF9WSV9GVU5DICB2aVZ4aUNvbW1hbmRRdWVyeShWaVNlc3Npb24gdmksIFZpVUludDE2IG1vZGUsIFZpVUludDMyIGNtZCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlQVUludDMyIHJlc3BvbnNlKTsNCitWaVN0YXR1cyBfVklfRlVOQyAgdmlBc3NlcnRVdGlsU2lnbmFsKFZpU2Vzc2lvbiB2aSwgVmlVSW50MTYgbGluZSk7DQorVmlTdGF0dXMgX1ZJX0ZVTkMgIHZpQXNzZXJ0SW50clNpZ25hbChWaVNlc3Npb24gdmksIFZpSW50MTYgbW9kZSwgVmlVSW50MzIgc3RhdHVzSUQpOw0KK1ZpU3RhdHVzIF9WSV9GVU5DICB2aU1hcFRyaWdnZXIgICAgKFZpU2Vzc2lvbiB2aSwgVmlJbnQxNiB0cmlnU3JjLCBWaUludDE2IHRyaWdEZXN0LCANCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWaVVJbnQxNiBtb2RlKTsNCitWaVN0YXR1cyBfVklfRlVOQyAgdmlVbm1hcFRyaWdnZXIgIChWaVNlc3Npb24gdmksIFZpSW50MTYgdHJpZ1NyYywgVmlJbnQxNiB0cmlnRGVzdCk7DQorVmlTdGF0dXMgX1ZJX0ZVTkMgIHZpVXNiQ29udHJvbE91dCAoVmlTZXNzaW9uIHZpLCBWaUludDE2IGJtUmVxdWVzdFR5cGUsIFZpSW50MTYgYlJlcXVlc3QsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlVSW50MTYgd1ZhbHVlLCBWaVVJbnQxNiB3SW5kZXgsIFZpVUludDE2IHdMZW5ndGgsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlCdWYgYnVmKTsNCitWaVN0YXR1cyBfVklfRlVOQyAgdmlVc2JDb250cm9sSW4gIChWaVNlc3Npb24gdmksIFZpSW50MTYgYm1SZXF1ZXN0VHlwZSwgVmlJbnQxNiBiUmVxdWVzdCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWaVVJbnQxNiB3VmFsdWUsIFZpVUludDE2IHdJbmRleCwgVmlVSW50MTYgd0xlbmd0aCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWaVBCdWYgYnVmLCBWaVBVSW50MTYgcmV0Q250KTsNCisNCisvKi0gQXR0cmlidXRlcyAocGxhdGZvcm0gaW5kZXBlbmRlbnQgc2l6ZSkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorI2RlZmluZSBWSV9BVFRSX1JTUkNfQ0xBU1MgICAgICAgICAgKDB4QkZGRjAwMDFVTCkNCisjZGVmaW5lIFZJX0FUVFJfUlNSQ19OQU1FICAgICAgICAgICAoMHhCRkZGMDAwMlVMKQ0KKyNkZWZpbmUgVklfQVRUUl9SU1JDX0lNUExfVkVSU0lPTiAgICgweDNGRkYwMDAzVUwpDQorI2RlZmluZSBWSV9BVFRSX1JTUkNfTE9DS19TVEFURSAgICAgKDB4M0ZGRjAwMDRVTCkNCisjZGVmaW5lIFZJX0FUVFJfTUFYX1FVRVVFX0xFTkdUSCAgICAoMHgzRkZGMDAwNVVMKQ0KKyNkZWZpbmUgVklfQVRUUl9VU0VSX0RBVEFfMzIgICAgICAgICgweDNGRkYwMDA3VUwpDQorI2RlZmluZSBWSV9BVFRSX0ZEQ19DSE5MICAgICAgICAgICAgKDB4M0ZGRjAwMERVTCkNCisjZGVmaW5lIFZJX0FUVFJfRkRDX01PREUgICAgICAgICAgICAoMHgzRkZGMDAwRlVMKQ0KKyNkZWZpbmUgVklfQVRUUl9GRENfR0VOX1NJR05BTF9FTiAgICgweDNGRkYwMDExVUwpDQorI2RlZmluZSBWSV9BVFRSX0ZEQ19VU0VfUEFJUiAgICAgICAgKDB4M0ZGRjAwMTNVTCkNCisjZGVmaW5lIFZJX0FUVFJfU0VORF9FTkRfRU4gICAgICAgICAoMHgzRkZGMDAxNlVMKQ0KKyNkZWZpbmUgVklfQVRUUl9URVJNQ0hBUiAgICAgICAgICAgICgweDNGRkYwMDE4VUwpDQorI2RlZmluZSBWSV9BVFRSX1RNT19WQUxVRSAgICAgICAgICAgKDB4M0ZGRjAwMUFVTCkNCisjZGVmaW5lIFZJX0FUVFJfR1BJQl9SRUFERFJfRU4gICAgICAoMHgzRkZGMDAxQlVMKQ0KKyNkZWZpbmUgVklfQVRUUl9JT19QUk9UICAgICAgICAgICAgICgweDNGRkYwMDFDVUwpDQorI2RlZmluZSBWSV9BVFRSX0RNQV9BTExPV19FTiAgICAgICAgKDB4M0ZGRjAwMUVVTCkNCisjZGVmaW5lIFZJX0FUVFJfQVNSTF9CQVVEICAgICAgICAgICAoMHgzRkZGMDAyMVVMKQ0KKyNkZWZpbmUgVklfQVRUUl9BU1JMX0RBVEFfQklUUyAgICAgICgweDNGRkYwMDIyVUwpDQorI2RlZmluZSBWSV9BVFRSX0FTUkxfUEFSSVRZICAgICAgICAgKDB4M0ZGRjAwMjNVTCkNCisjZGVmaW5lIFZJX0FUVFJfQVNSTF9TVE9QX0JJVFMgICAgICAoMHgzRkZGMDAyNFVMKQ0KKyNkZWZpbmUgVklfQVRUUl9BU1JMX0ZMT1dfQ05UUkwgICAgICgweDNGRkYwMDI1VUwpDQorI2RlZmluZSBWSV9BVFRSX1JEX0JVRl9PUEVSX01PREUgICAgKDB4M0ZGRjAwMkFVTCkNCisjZGVmaW5lIFZJX0FUVFJfUkRfQlVGX1NJWkUgICAgICAgICAoMHgzRkZGMDAyQlVMKQ0KKyNkZWZpbmUgVklfQVRUUl9XUl9CVUZfT1BFUl9NT0RFICAgICgweDNGRkYwMDJEVUwpDQorI2RlZmluZSBWSV9BVFRSX1dSX0JVRl9TSVpFICAgICAgICAgKDB4M0ZGRjAwMkVVTCkNCisjZGVmaW5lIFZJX0FUVFJfU1VQUFJFU1NfRU5EX0VOICAgICAoMHgzRkZGMDAzNlVMKQ0KKyNkZWZpbmUgVklfQVRUUl9URVJNQ0hBUl9FTiAgICAgICAgICgweDNGRkYwMDM4VUwpDQorI2RlZmluZSBWSV9BVFRSX0RFU1RfQUNDRVNTX1BSSVYgICAgKDB4M0ZGRjAwMzlVTCkNCisjZGVmaW5lIFZJX0FUVFJfREVTVF9CWVRFX09SREVSICAgICAoMHgzRkZGMDAzQVVMKQ0KKyNkZWZpbmUgVklfQVRUUl9TUkNfQUNDRVNTX1BSSVYgICAgICgweDNGRkYwMDNDVUwpDQorI2RlZmluZSBWSV9BVFRSX1NSQ19CWVRFX09SREVSICAgICAgKDB4M0ZGRjAwM0RVTCkNCisjZGVmaW5lIFZJX0FUVFJfU1JDX0lOQ1JFTUVOVCAgICAgICAoMHgzRkZGMDA0MFVMKQ0KKyNkZWZpbmUgVklfQVRUUl9ERVNUX0lOQ1JFTUVOVCAgICAgICgweDNGRkYwMDQxVUwpDQorI2RlZmluZSBWSV9BVFRSX1dJTl9BQ0NFU1NfUFJJViAgICAgKDB4M0ZGRjAwNDVVTCkNCisjZGVmaW5lIFZJX0FUVFJfV0lOX0JZVEVfT1JERVIgICAgICAoMHgzRkZGMDA0N1VMKQ0KKyNkZWZpbmUgVklfQVRUUl9HUElCX0FUTl9TVEFURSAgICAgICgweDNGRkYwMDU3VUwpDQorI2RlZmluZSBWSV9BVFRSX0dQSUJfQUREUl9TVEFURSAgICAgKDB4M0ZGRjAwNUNVTCkNCisjZGVmaW5lIFZJX0FUVFJfR1BJQl9DSUNfU1RBVEUgICAgICAoMHgzRkZGMDA1RVVMKQ0KKyNkZWZpbmUgVklfQVRUUl9HUElCX05EQUNfU1RBVEUgICAgICgweDNGRkYwMDYyVUwpDQorI2RlZmluZSBWSV9BVFRSX0dQSUJfU1JRX1NUQVRFICAgICAgKDB4M0ZGRjAwNjdVTCkNCisjZGVmaW5lIFZJX0FUVFJfR1BJQl9TWVNfQ05UUkxfU1RBVEUgKDB4M0ZGRjAwNjhVTCkNCisjZGVmaW5lIFZJX0FUVFJfR1BJQl9IUzQ4OF9DQkxfTEVOICAoMHgzRkZGMDA2OVVMKQ0KKyNkZWZpbmUgVklfQVRUUl9DTURSX0xBICAgICAgICAgICAgICgweDNGRkYwMDZCVUwpDQorI2RlZmluZSBWSV9BVFRSX1ZYSV9ERVZfQ0xBU1MgICAgICAgKDB4M0ZGRjAwNkNVTCkNCisjZGVmaW5lIFZJX0FUVFJfTUFJTkZSQU1FX0xBICAgICAgICAoMHgzRkZGMDA3MFVMKQ0KKyNkZWZpbmUgVklfQVRUUl9NQU5GX05BTUUgICAgICAgICAgICgweEJGRkYwMDcyVUwpDQorI2RlZmluZSBWSV9BVFRSX01PREVMX05BTUUgICAgICAgICAgKDB4QkZGRjAwNzdVTCkNCisjZGVmaW5lIFZJX0FUVFJfVlhJX1ZNRV9JTlRSX1NUQVRVUyAoMHgzRkZGMDA4QlVMKQ0KKyNkZWZpbmUgVklfQVRUUl9WWElfVFJJR19TVEFUVVMgICAgICgweDNGRkYwMDhEVUwpDQorI2RlZmluZSBWSV9BVFRSX1ZYSV9WTUVfU1lTRkFJTF9TVEFURSAoMHgzRkZGMDA5NFVMKQ0KKyNkZWZpbmUgVklfQVRUUl9XSU5fQkFTRV9BRERSXzMyICAgICgweDNGRkYwMDk4VUwpDQorI2RlZmluZSBWSV9BVFRSX1dJTl9TSVpFXzMyICAgICAgICAgKDB4M0ZGRjAwOUFVTCkNCisjZGVmaW5lIFZJX0FUVFJfQVNSTF9BVkFJTF9OVU0gICAgICAoMHgzRkZGMDBBQ1VMKQ0KKyNkZWZpbmUgVklfQVRUUl9NRU1fQkFTRV8zMiAgICAgICAgICgweDNGRkYwMEFEVUwpDQorI2RlZmluZSBWSV9BVFRSX0FTUkxfQ1RTX1NUQVRFICAgICAgKDB4M0ZGRjAwQUVVTCkNCisjZGVmaW5lIFZJX0FUVFJfQVNSTF9EQ0RfU1RBVEUgICAgICAoMHgzRkZGMDBBRlVMKQ0KKyNkZWZpbmUgVklfQVRUUl9BU1JMX0RTUl9TVEFURSAgICAgICgweDNGRkYwMEIxVUwpDQorI2RlZmluZSBWSV9BVFRSX0FTUkxfRFRSX1NUQVRFICAgICAgKDB4M0ZGRjAwQjJVTCkNCisjZGVmaW5lIFZJX0FUVFJfQVNSTF9FTkRfSU4gICAgICAgICAoMHgzRkZGMDBCM1VMKQ0KKyNkZWZpbmUgVklfQVRUUl9BU1JMX0VORF9PVVQgICAgICAgICgweDNGRkYwMEI0VUwpDQorI2RlZmluZSBWSV9BVFRSX0FTUkxfUkVQTEFDRV9DSEFSICAgKDB4M0ZGRjAwQkVVTCkNCisjZGVmaW5lIFZJX0FUVFJfQVNSTF9SSV9TVEFURSAgICAgICAoMHgzRkZGMDBCRlVMKQ0KKyNkZWZpbmUgVklfQVRUUl9BU1JMX1JUU19TVEFURSAgICAgICgweDNGRkYwMEMwVUwpDQorI2RlZmluZSBWSV9BVFRSX0FTUkxfWE9OX0NIQVIgICAgICAgKDB4M0ZGRjAwQzFVTCkNCisjZGVmaW5lIFZJX0FUVFJfQVNSTF9YT0ZGX0NIQVIgICAgICAoMHgzRkZGMDBDMlVMKQ0KKyNkZWZpbmUgVklfQVRUUl9XSU5fQUNDRVNTICAgICAgICAgICgweDNGRkYwMEMzVUwpDQorI2RlZmluZSBWSV9BVFRSX1JNX1NFU1NJT04gICAgICAgICAgKDB4M0ZGRjAwQzRVTCkNCisjZGVmaW5lIFZJX0FUVFJfVlhJX0xBICAgICAgICAgICAgICAoMHgzRkZGMDBENVVMKQ0KKyNkZWZpbmUgVklfQVRUUl9NQU5GX0lEICAgICAgICAgICAgICgweDNGRkYwMEQ5VUwpDQorI2RlZmluZSBWSV9BVFRSX01FTV9TSVpFXzMyICAgICAgICAgKDB4M0ZGRjAwRERVTCkNCisjZGVmaW5lIFZJX0FUVFJfTUVNX1NQQUNFICAgICAgICAgICAoMHgzRkZGMDBERVVMKQ0KKyNkZWZpbmUgVklfQVRUUl9NT0RFTF9DT0RFICAgICAgICAgICgweDNGRkYwMERGVUwpDQorI2RlZmluZSBWSV9BVFRSX1NMT1QgICAgICAgICAgICAgICAgKDB4M0ZGRjAwRThVTCkNCisjZGVmaW5lIFZJX0FUVFJfSU5URl9JTlNUX05BTUUgICAgICAoMHhCRkZGMDBFOVVMKQ0KKyNkZWZpbmUgVklfQVRUUl9JTU1FRElBVEVfU0VSViAgICAgICgweDNGRkYwMTAwVUwpDQorI2RlZmluZSBWSV9BVFRSX0lOVEZfUEFSRU5UX05VTSAgICAgKDB4M0ZGRjAxMDFVTCkNCisjZGVmaW5lIFZJX0FUVFJfUlNSQ19TUEVDX1ZFUlNJT04gICAoMHgzRkZGMDE3MFVMKQ0KKyNkZWZpbmUgVklfQVRUUl9JTlRGX1RZUEUgICAgICAgICAgICgweDNGRkYwMTcxVUwpDQorI2RlZmluZSBWSV9BVFRSX0dQSUJfUFJJTUFSWV9BRERSICAgKDB4M0ZGRjAxNzJVTCkNCisjZGVmaW5lIFZJX0FUVFJfR1BJQl9TRUNPTkRBUllfQUREUiAoMHgzRkZGMDE3M1VMKQ0KKyNkZWZpbmUgVklfQVRUUl9SU1JDX01BTkZfTkFNRSAgICAgICgweEJGRkYwMTc0VUwpDQorI2RlZmluZSBWSV9BVFRSX1JTUkNfTUFORl9JRCAgICAgICAgKDB4M0ZGRjAxNzVVTCkNCisjZGVmaW5lIFZJX0FUVFJfSU5URl9OVU0gICAgICAgICAgICAoMHgzRkZGMDE3NlVMKQ0KKyNkZWZpbmUgVklfQVRUUl9UUklHX0lEICAgICAgICAgICAgICgweDNGRkYwMTc3VUwpDQorI2RlZmluZSBWSV9BVFRSX0dQSUJfUkVOX1NUQVRFICAgICAgKDB4M0ZGRjAxODFVTCkNCisjZGVmaW5lIFZJX0FUVFJfR1BJQl9VTkFERFJfRU4gICAgICAoMHgzRkZGMDE4NFVMKQ0KKyNkZWZpbmUgVklfQVRUUl9ERVZfU1RBVFVTX0JZVEUgICAgICgweDNGRkYwMTg5VUwpDQorI2RlZmluZSBWSV9BVFRSX0ZJTEVfQVBQRU5EX0VOICAgICAgKDB4M0ZGRjAxOTJVTCkNCisjZGVmaW5lIFZJX0FUVFJfVlhJX1RSSUdfU1VQUE9SVCAgICAoMHgzRkZGMDE5NFVMKQ0KKyNkZWZpbmUgVklfQVRUUl9UQ1BJUF9BRERSICAgICAgICAgICgweEJGRkYwMTk1VUwpDQorI2RlZmluZSBWSV9BVFRSX1RDUElQX0hPU1ROQU1FICAgICAgKDB4QkZGRjAxOTZVTCkNCisjZGVmaW5lIFZJX0FUVFJfVENQSVBfUE9SVCAgICAgICAgICAoMHgzRkZGMDE5N1VMKQ0KKyNkZWZpbmUgVklfQVRUUl9UQ1BJUF9ERVZJQ0VfTkFNRSAgICgweEJGRkYwMTk5VUwpDQorI2RlZmluZSBWSV9BVFRSX1RDUElQX05PREVMQVkgICAgICAgKDB4M0ZGRjAxOUFVTCkNCisjZGVmaW5lIFZJX0FUVFJfVENQSVBfS0VFUEFMSVZFICAgICAoMHgzRkZGMDE5QlVMKQ0KKyNkZWZpbmUgVklfQVRUUl80ODgyX0NPTVBMSUFOVCAgICAgICgweDNGRkYwMTlGVUwpDQorI2RlZmluZSBWSV9BVFRSX1VTQl9TRVJJQUxfTlVNICAgICAgKDB4QkZGRjAxQTBVTCkNCisjZGVmaW5lIFZJX0FUVFJfVVNCX0lOVEZDX05VTSAgICAgICAoMHgzRkZGMDFBMVVMKQ0KKyNkZWZpbmUgVklfQVRUUl9VU0JfUFJPVE9DT0wgICAgICAgICgweDNGRkYwMUE3VUwpDQorI2RlZmluZSBWSV9BVFRSX1VTQl9NQVhfSU5UUl9TSVpFICAgKDB4M0ZGRjAxQUZVTCkNCisjZGVmaW5lIFZJX0FUVFJfUFhJX0RFVl9OVU0gICAgICAgICAoMHgzRkZGMDIwMVVMKQ0KKyNkZWZpbmUgVklfQVRUUl9QWElfRlVOQ19OVU0gICAgICAgICgweDNGRkYwMjAyVUwpDQorI2RlZmluZSBWSV9BVFRSX1BYSV9CVVNfTlVNICAgICAgICAgKDB4M0ZGRjAyMDVVTCkNCisjZGVmaW5lIFZJX0FUVFJfUFhJX0NIQVNTSVMgICAgICAgICAoMHgzRkZGMDIwNlVMKQ0KKyNkZWZpbmUgVklfQVRUUl9QWElfU0xPVFBBVEggICAgICAgICgweEJGRkYwMjA3VUwpDQorI2RlZmluZSBWSV9BVFRSX1BYSV9TTE9UX0xCVVNfTEVGVCAgKDB4M0ZGRjAyMDhVTCkNCisjZGVmaW5lIFZJX0FUVFJfUFhJX1NMT1RfTEJVU19SSUdIVCAoMHgzRkZGMDIwOVVMKQ0KKyNkZWZpbmUgVklfQVRUUl9QWElfVFJJR19CVVMgICAgICAgICgweDNGRkYwMjBBVUwpDQorI2RlZmluZSBWSV9BVFRSX1BYSV9TVEFSX1RSSUdfQlVTICAgKDB4M0ZGRjAyMEJVTCkNCisjZGVmaW5lIFZJX0FUVFJfUFhJX1NUQVJfVFJJR19MSU5FICAoMHgzRkZGMDIwQ1VMKQ0KKyNkZWZpbmUgVklfQVRUUl9QWElfTUVNX1RZUEVfQkFSMCAgICgweDNGRkYwMjExVUwpDQorI2RlZmluZSBWSV9BVFRSX1BYSV9NRU1fVFlQRV9CQVIxICAgKDB4M0ZGRjAyMTJVTCkNCisjZGVmaW5lIFZJX0FUVFJfUFhJX01FTV9UWVBFX0JBUjIgICAoMHgzRkZGMDIxM1VMKQ0KKyNkZWZpbmUgVklfQVRUUl9QWElfTUVNX1RZUEVfQkFSMyAgICgweDNGRkYwMjE0VUwpDQorI2RlZmluZSBWSV9BVFRSX1BYSV9NRU1fVFlQRV9CQVI0ICAgKDB4M0ZGRjAyMTVVTCkNCisjZGVmaW5lIFZJX0FUVFJfUFhJX01FTV9UWVBFX0JBUjUgICAoMHgzRkZGMDIxNlVMKQ0KKyNkZWZpbmUgVklfQVRUUl9QWElfTUVNX0JBU0VfQkFSMCAgICgweDNGRkYwMjIxVUwpDQorI2RlZmluZSBWSV9BVFRSX1BYSV9NRU1fQkFTRV9CQVIxICAgKDB4M0ZGRjAyMjJVTCkNCisjZGVmaW5lIFZJX0FUVFJfUFhJX01FTV9CQVNFX0JBUjIgICAoMHgzRkZGMDIyM1VMKQ0KKyNkZWZpbmUgVklfQVRUUl9QWElfTUVNX0JBU0VfQkFSMyAgICgweDNGRkYwMjI0VUwpDQorI2RlZmluZSBWSV9BVFRSX1BYSV9NRU1fQkFTRV9CQVI0ICAgKDB4M0ZGRjAyMjVVTCkNCisjZGVmaW5lIFZJX0FUVFJfUFhJX01FTV9CQVNFX0JBUjUgICAoMHgzRkZGMDIyNlVMKQ0KKyNkZWZpbmUgVklfQVRUUl9QWElfTUVNX1NJWkVfQkFSMCAgICgweDNGRkYwMjMxVUwpDQorI2RlZmluZSBWSV9BVFRSX1BYSV9NRU1fU0laRV9CQVIxICAgKDB4M0ZGRjAyMzJVTCkNCisjZGVmaW5lIFZJX0FUVFJfUFhJX01FTV9TSVpFX0JBUjIgICAoMHgzRkZGMDIzM1VMKQ0KKyNkZWZpbmUgVklfQVRUUl9QWElfTUVNX1NJWkVfQkFSMyAgICgweDNGRkYwMjM0VUwpDQorI2RlZmluZSBWSV9BVFRSX1BYSV9NRU1fU0laRV9CQVI0ICAgKDB4M0ZGRjAyMzVVTCkNCisjZGVmaW5lIFZJX0FUVFJfUFhJX01FTV9TSVpFX0JBUjUgICAoMHgzRkZGMDIzNlVMKQ0KKyNkZWZpbmUgVklfQVRUUl9QWElfSVNfRVhQUkVTUyAgICAgICgweDNGRkYwMjQwVUwpDQorI2RlZmluZSBWSV9BVFRSX1BYSV9TTE9UX0xXSURUSCAgICAgKDB4M0ZGRjAyNDFVTCkNCisjZGVmaW5lIFZJX0FUVFJfUFhJX01BWF9MV0lEVEggICAgICAoMHgzRkZGMDI0MlVMKQ0KKyNkZWZpbmUgVklfQVRUUl9QWElfQUNUVUFMX0xXSURUSCAgICgweDNGRkYwMjQzVUwpDQorI2RlZmluZSBWSV9BVFRSX1BYSV9EU1RBUl9CVVMgICAgICAgKDB4M0ZGRjAyNDRVTCkNCisjZGVmaW5lIFZJX0FUVFJfUFhJX0RTVEFSX1NFVCAgICAgICAoMHgzRkZGMDI0NVVMKQ0KKw0KKyNkZWZpbmUgVklfQVRUUl9KT0JfSUQgICAgICAgICAgICAgICgweDNGRkY0MDA2VUwpDQorI2RlZmluZSBWSV9BVFRSX0VWRU5UX1RZUEUgICAgICAgICAgKDB4M0ZGRjQwMTBVTCkNCisjZGVmaW5lIFZJX0FUVFJfU0lHUF9TVEFUVVNfSUQgICAgICAoMHgzRkZGNDAxMVVMKQ0KKyNkZWZpbmUgVklfQVRUUl9SRUNWX1RSSUdfSUQgICAgICAgICgweDNGRkY0MDEyVUwpDQorI2RlZmluZSBWSV9BVFRSX0lOVFJfU1RBVFVTX0lEICAgICAgKDB4M0ZGRjQwMjNVTCkNCisjZGVmaW5lIFZJX0FUVFJfU1RBVFVTICAgICAgICAgICAgICAoMHgzRkZGNDAyNVVMKQ0KKyNkZWZpbmUgVklfQVRUUl9SRVRfQ09VTlRfMzIgICAgICAgICgweDNGRkY0MDI2VUwpDQorI2RlZmluZSBWSV9BVFRSX0JVRkZFUiAgICAgICAgICAgICAgKDB4M0ZGRjQwMjdVTCkNCisjZGVmaW5lIFZJX0FUVFJfUkVDVl9JTlRSX0xFVkVMICAgICAoMHgzRkZGNDA0MVVMKQ0KKyNkZWZpbmUgVklfQVRUUl9PUEVSX05BTUUgICAgICAgICAgICgweEJGRkY0MDQyVUwpDQorI2RlZmluZSBWSV9BVFRSX0dQSUJfUkVDVl9DSUNfU1RBVEUgKDB4M0ZGRjQxOTNVTCkNCisjZGVmaW5lIFZJX0FUVFJfUkVDVl9UQ1BJUF9BRERSICAgICAoMHhCRkZGNDE5OFVMKQ0KKyNkZWZpbmUgVklfQVRUUl9VU0JfUkVDVl9JTlRSX1NJWkUgICgweDNGRkY0MUIwVUwpDQorI2RlZmluZSBWSV9BVFRSX1VTQl9SRUNWX0lOVFJfREFUQSAgKDB4QkZGRjQxQjFVTCkNCisNCisvKi0gQXR0cmlidXRlcyAocGxhdGZvcm0gZGVwZW5kZW50IHNpemUpIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorI2lmIGRlZmluZWQoX1ZJX0lOVDY0X1VJTlQ2NF9ERUZJTkVEKSAmJiBkZWZpbmVkKF9WSVNBX0VOVl9JU182NF9CSVQpDQorI2RlZmluZSBWSV9BVFRSX1VTRVJfREFUQV82NCAgICAgICAgKDB4M0ZGRjAwMEFVTCkNCisjZGVmaW5lIFZJX0FUVFJfUkVUX0NPVU5UXzY0ICAgICAgICAoMHgzRkZGNDAyOFVMKQ0KKyNkZWZpbmUgVklfQVRUUl9VU0VSX0RBVEEgICAgICAgICAgIChWSV9BVFRSX1VTRVJfREFUQV82NCkNCisjZGVmaW5lIFZJX0FUVFJfUkVUX0NPVU5UICAgICAgICAgICAoVklfQVRUUl9SRVRfQ09VTlRfNjQpDQorI2Vsc2UNCisjZGVmaW5lIFZJX0FUVFJfVVNFUl9EQVRBICAgICAgICAgICAoVklfQVRUUl9VU0VSX0RBVEFfMzIpDQorI2RlZmluZSBWSV9BVFRSX1JFVF9DT1VOVCAgICAgICAgICAgKFZJX0FUVFJfUkVUX0NPVU5UXzMyKQ0KKyNlbmRpZg0KKw0KKyNpZiBkZWZpbmVkKF9WSV9JTlQ2NF9VSU5UNjRfREVGSU5FRCkNCisjZGVmaW5lIFZJX0FUVFJfV0lOX0JBU0VfQUREUl82NCAgICAoMHgzRkZGMDA5QlVMKQ0KKyNkZWZpbmUgVklfQVRUUl9XSU5fU0laRV82NCAgICAgICAgICgweDNGRkYwMDlDVUwpDQorI2RlZmluZSBWSV9BVFRSX01FTV9CQVNFXzY0ICAgICAgICAgKDB4M0ZGRjAwRDBVTCkNCisjZGVmaW5lIFZJX0FUVFJfTUVNX1NJWkVfNjQgICAgICAgICAoMHgzRkZGMDBEMVVMKQ0KKyNlbmRpZg0KKyNpZiBkZWZpbmVkKF9WSV9JTlQ2NF9VSU5UNjRfREVGSU5FRCkgJiYgZGVmaW5lZChfVklTQV9FTlZfSVNfNjRfQklUKQ0KKyNkZWZpbmUgVklfQVRUUl9XSU5fQkFTRV9BRERSICAgICAgIChWSV9BVFRSX1dJTl9CQVNFX0FERFJfNjQpDQorI2RlZmluZSBWSV9BVFRSX1dJTl9TSVpFICAgICAgICAgICAgKFZJX0FUVFJfV0lOX1NJWkVfNjQpDQorI2RlZmluZSBWSV9BVFRSX01FTV9CQVNFICAgICAgICAgICAgKFZJX0FUVFJfTUVNX0JBU0VfNjQpDQorI2RlZmluZSBWSV9BVFRSX01FTV9TSVpFICAgICAgICAgICAgKFZJX0FUVFJfTUVNX1NJWkVfNjQpDQorI2Vsc2UNCisjZGVmaW5lIFZJX0FUVFJfV0lOX0JBU0VfQUREUiAgICAgICAoVklfQVRUUl9XSU5fQkFTRV9BRERSXzMyKQ0KKyNkZWZpbmUgVklfQVRUUl9XSU5fU0laRSAgICAgICAgICAgIChWSV9BVFRSX1dJTl9TSVpFXzMyKQ0KKyNkZWZpbmUgVklfQVRUUl9NRU1fQkFTRSAgICAgICAgICAgIChWSV9BVFRSX01FTV9CQVNFXzMyKQ0KKyNkZWZpbmUgVklfQVRUUl9NRU1fU0laRSAgICAgICAgICAgIChWSV9BVFRSX01FTV9TSVpFXzMyKQ0KKyNlbmRpZg0KKw0KKy8qLSBFdmVudCBUeXBlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisjZGVmaW5lIFZJX0VWRU5UX0lPX0NPTVBMRVRJT04gICAgICAoMHgzRkZGMjAwOVVMKQ0KKyNkZWZpbmUgVklfRVZFTlRfVFJJRyAgICAgICAgICAgICAgICgweEJGRkYyMDBBVUwpDQorI2RlZmluZSBWSV9FVkVOVF9TRVJWSUNFX1JFUSAgICAgICAgKDB4M0ZGRjIwMEJVTCkNCisjZGVmaW5lIFZJX0VWRU5UX0NMRUFSICAgICAgICAgICAgICAoMHgzRkZGMjAwRFVMKQ0KKyNkZWZpbmUgVklfRVZFTlRfRVhDRVBUSU9OICAgICAgICAgICgweEJGRkYyMDBFVUwpDQorI2RlZmluZSBWSV9FVkVOVF9HUElCX0NJQyAgICAgICAgICAgKDB4M0ZGRjIwMTJVTCkNCisjZGVmaW5lIFZJX0VWRU5UX0dQSUJfVEFMSyAgICAgICAgICAoMHgzRkZGMjAxM1VMKQ0KKyNkZWZpbmUgVklfRVZFTlRfR1BJQl9MSVNURU4gICAgICAgICgweDNGRkYyMDE0VUwpDQorI2RlZmluZSBWSV9FVkVOVF9WWElfVk1FX1NZU0ZBSUwgICAgKDB4M0ZGRjIwMURVTCkNCisjZGVmaW5lIFZJX0VWRU5UX1ZYSV9WTUVfU1lTUkVTRVQgICAoMHgzRkZGMjAxRVVMKQ0KKyNkZWZpbmUgVklfRVZFTlRfVlhJX1NJR1AgICAgICAgICAgICgweDNGRkYyMDIwVUwpDQorI2RlZmluZSBWSV9FVkVOVF9WWElfVk1FX0lOVFIgICAgICAgKDB4QkZGRjIwMjFVTCkNCisjZGVmaW5lIFZJX0VWRU5UX1BYSV9JTlRSICAgICAgICAgICAoMHgzRkZGMjAyMlVMKQ0KKyNkZWZpbmUgVklfRVZFTlRfVENQSVBfQ09OTkVDVCAgICAgICgweDNGRkYyMDM2VUwpDQorI2RlZmluZSBWSV9FVkVOVF9VU0JfSU5UUiAgICAgICAgICAgKDB4M0ZGRjIwMzdVTCkNCisNCisjZGVmaW5lIFZJX0FMTF9FTkFCTEVEX0VWRU5UUyAgICAgICAoMHgzRkZGN0ZGRlVMKQ0KKw0KKy8qLSBDb21wbGV0aW9uIGFuZCBFcnJvciBDb2RlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisjZGVmaW5lIFZJX1NVQ0NFU1NfRVZFTlRfRU4gICAgICAgICAgICAgICAgICAgKDB4M0ZGRjAwMDJMKSAvKiAzRkZGMDAwMiwgIDEwNzM2NzYyOTAgKi8NCisjZGVmaW5lIFZJX1NVQ0NFU1NfRVZFTlRfRElTICAgICAgICAgICAgICAgICAgKDB4M0ZGRjAwMDNMKSAvKiAzRkZGMDAwMywgIDEwNzM2NzYyOTEgKi8NCisjZGVmaW5lIFZJX1NVQ0NFU1NfUVVFVUVfRU1QVFkgICAgICAgICAgICAgICAgKDB4M0ZGRjAwMDRMKSAvKiAzRkZGMDAwNCwgIDEwNzM2NzYyOTIgKi8NCisjZGVmaW5lIFZJX1NVQ0NFU1NfVEVSTV9DSEFSICAgICAgICAgICAgICAgICAgKDB4M0ZGRjAwMDVMKSAvKiAzRkZGMDAwNSwgIDEwNzM2NzYyOTMgKi8NCisjZGVmaW5lIFZJX1NVQ0NFU1NfTUFYX0NOVCAgICAgICAgICAgICAgICAgICAgKDB4M0ZGRjAwMDZMKSAvKiAzRkZGMDAwNiwgIDEwNzM2NzYyOTQgKi8NCisjZGVmaW5lIFZJX1NVQ0NFU1NfREVWX05QUkVTRU5UICAgICAgICAgICAgICAgKDB4M0ZGRjAwN0RMKSAvKiAzRkZGMDA3RCwgIDEwNzM2NzY0MTMgKi8NCisjZGVmaW5lIFZJX1NVQ0NFU1NfVFJJR19NQVBQRUQgICAgICAgICAgICAgICAgKDB4M0ZGRjAwN0VMKSAvKiAzRkZGMDA3RSwgIDEwNzM2NzY0MTQgKi8NCisjZGVmaW5lIFZJX1NVQ0NFU1NfUVVFVUVfTkVNUFRZICAgICAgICAgICAgICAgKDB4M0ZGRjAwODBMKSAvKiAzRkZGMDA4MCwgIDEwNzM2NzY0MTYgKi8NCisjZGVmaW5lIFZJX1NVQ0NFU1NfTkNIQUlOICAgICAgICAgICAgICAgICAgICAgKDB4M0ZGRjAwOThMKSAvKiAzRkZGMDA5OCwgIDEwNzM2NzY0NDAgKi8NCisjZGVmaW5lIFZJX1NVQ0NFU1NfTkVTVEVEX1NIQVJFRCAgICAgICAgICAgICAgKDB4M0ZGRjAwOTlMKSAvKiAzRkZGMDA5OSwgIDEwNzM2NzY0NDEgKi8NCisjZGVmaW5lIFZJX1NVQ0NFU1NfTkVTVEVEX0VYQ0xVU0lWRSAgICAgICAgICAgKDB4M0ZGRjAwOUFMKSAvKiAzRkZGMDA5QSwgIDEwNzM2NzY0NDIgKi8NCisjZGVmaW5lIFZJX1NVQ0NFU1NfU1lOQyAgICAgICAgICAgICAgICAgICAgICAgKDB4M0ZGRjAwOUJMKSAvKiAzRkZGMDA5QiwgIDEwNzM2NzY0NDMgKi8NCisNCisjZGVmaW5lIFZJX1dBUk5fUVVFVUVfT1ZFUkZMT1cgICAgICAgICAgICAgICAgKDB4M0ZGRjAwMENMKSAvKiAzRkZGMDAwQywgIDEwNzM2NzYzMDAgKi8NCisjZGVmaW5lIFZJX1dBUk5fQ09ORklHX05MT0FERUQgICAgICAgICAgICAgICAgKDB4M0ZGRjAwNzdMKSAvKiAzRkZGMDA3NywgIDEwNzM2NzY0MDcgKi8NCisjZGVmaW5lIFZJX1dBUk5fTlVMTF9PQkpFQ1QgICAgICAgICAgICAgICAgICAgKDB4M0ZGRjAwODJMKSAvKiAzRkZGMDA4MiwgIDEwNzM2NzY0MTggKi8NCisjZGVmaW5lIFZJX1dBUk5fTlNVUF9BVFRSX1NUQVRFICAgICAgICAgICAgICAgKDB4M0ZGRjAwODRMKSAvKiAzRkZGMDA4NCwgIDEwNzM2NzY0MjAgKi8NCisjZGVmaW5lIFZJX1dBUk5fVU5LTk9XTl9TVEFUVVMgICAgICAgICAgICAgICAgKDB4M0ZGRjAwODVMKSAvKiAzRkZGMDA4NSwgIDEwNzM2NzY0MjEgKi8NCisjZGVmaW5lIFZJX1dBUk5fTlNVUF9CVUYgICAgICAgICAgICAgICAgICAgICAgKDB4M0ZGRjAwODhMKSAvKiAzRkZGMDA4OCwgIDEwNzM2NzY0MjQgKi8NCisjZGVmaW5lIFZJX1dBUk5fRVhUX0ZVTkNfTklNUEwgICAgICAgICAgICAgICAgKDB4M0ZGRjAwQTlMKSAvKiAzRkZGMDBBOSwgIDEwNzM2NzY0NTcgKi8NCisNCisjZGVmaW5lIFZJX0VSUk9SX1NZU1RFTV9FUlJPUiAgICAgICAoX1ZJX0VSUk9SKzB4M0ZGRjAwMDBMKSAvKiBCRkZGMDAwMCwgLTEwNzM4MDczNjAgKi8NCisjZGVmaW5lIFZJX0VSUk9SX0lOVl9PQkpFQ1QgICAgICAgICAoX1ZJX0VSUk9SKzB4M0ZGRjAwMEVMKSAvKiBCRkZGMDAwRSwgLTEwNzM4MDczNDYgKi8NCisjZGVmaW5lIFZJX0VSUk9SX1JTUkNfTE9DS0VEICAgICAgICAoX1ZJX0VSUk9SKzB4M0ZGRjAwMEZMKSAvKiBCRkZGMDAwRiwgLTEwNzM4MDczNDUgKi8NCisjZGVmaW5lIFZJX0VSUk9SX0lOVl9FWFBSICAgICAgICAgICAoX1ZJX0VSUk9SKzB4M0ZGRjAwMTBMKSAvKiBCRkZGMDAxMCwgLTEwNzM4MDczNDQgKi8NCisjZGVmaW5lIFZJX0VSUk9SX1JTUkNfTkZPVU5EICAgICAgICAoX1ZJX0VSUk9SKzB4M0ZGRjAwMTFMKSAvKiBCRkZGMDAxMSwgLTEwNzM4MDczNDMgKi8NCisjZGVmaW5lIFZJX0VSUk9SX0lOVl9SU1JDX05BTUUgICAgICAoX1ZJX0VSUk9SKzB4M0ZGRjAwMTJMKSAvKiBCRkZGMDAxMiwgLTEwNzM4MDczNDIgKi8NCisjZGVmaW5lIFZJX0VSUk9SX0lOVl9BQ0NfTU9ERSAgICAgICAoX1ZJX0VSUk9SKzB4M0ZGRjAwMTNMKSAvKiBCRkZGMDAxMywgLTEwNzM4MDczNDEgKi8NCisjZGVmaW5lIFZJX0VSUk9SX1RNTyAgICAgICAgICAgICAgICAoX1ZJX0VSUk9SKzB4M0ZGRjAwMTVMKSAvKiBCRkZGMDAxNSwgLTEwNzM4MDczMzkgKi8NCisjZGVmaW5lIFZJX0VSUk9SX0NMT1NJTkdfRkFJTEVEICAgICAoX1ZJX0VSUk9SKzB4M0ZGRjAwMTZMKSAvKiBCRkZGMDAxNiwgLTEwNzM4MDczMzggKi8NCisjZGVmaW5lIFZJX0VSUk9SX0lOVl9ERUdSRUUgICAgICAgICAoX1ZJX0VSUk9SKzB4M0ZGRjAwMUJMKSAvKiBCRkZGMDAxQiwgLTEwNzM4MDczMzMgKi8NCisjZGVmaW5lIFZJX0VSUk9SX0lOVl9KT0JfSUQgICAgICAgICAoX1ZJX0VSUk9SKzB4M0ZGRjAwMUNMKSAvKiBCRkZGMDAxQywgLTEwNzM4MDczMzIgKi8NCisjZGVmaW5lIFZJX0VSUk9SX05TVVBfQVRUUiAgICAgICAgICAoX1ZJX0VSUk9SKzB4M0ZGRjAwMURMKSAvKiBCRkZGMDAxRCwgLTEwNzM4MDczMzEgKi8NCisjZGVmaW5lIFZJX0VSUk9SX05TVVBfQVRUUl9TVEFURSAgICAoX1ZJX0VSUk9SKzB4M0ZGRjAwMUVMKSAvKiBCRkZGMDAxRSwgLTEwNzM4MDczMzAgKi8NCisjZGVmaW5lIFZJX0VSUk9SX0FUVFJfUkVBRE9OTFkgICAgICAoX1ZJX0VSUk9SKzB4M0ZGRjAwMUZMKSAvKiBCRkZGMDAxRiwgLTEwNzM4MDczMjkgKi8NCisjZGVmaW5lIFZJX0VSUk9SX0lOVl9MT0NLX1RZUEUgICAgICAoX1ZJX0VSUk9SKzB4M0ZGRjAwMjBMKSAvKiBCRkZGMDAyMCwgLTEwNzM4MDczMjggKi8NCisjZGVmaW5lIFZJX0VSUk9SX0lOVl9BQ0NFU1NfS0VZICAgICAoX1ZJX0VSUk9SKzB4M0ZGRjAwMjFMKSAvKiBCRkZGMDAyMSwgLTEwNzM4MDczMjcgKi8NCisjZGVmaW5lIFZJX0VSUk9SX0lOVl9FVkVOVCAgICAgICAgICAoX1ZJX0VSUk9SKzB4M0ZGRjAwMjZMKSAvKiBCRkZGMDAyNiwgLTEwNzM4MDczMjIgKi8NCisjZGVmaW5lIFZJX0VSUk9SX0lOVl9NRUNIICAgICAgICAgICAoX1ZJX0VSUk9SKzB4M0ZGRjAwMjdMKSAvKiBCRkZGMDAyNywgLTEwNzM4MDczMjEgKi8NCisjZGVmaW5lIFZJX0VSUk9SX0hORExSX05JTlNUQUxMRUQgICAoX1ZJX0VSUk9SKzB4M0ZGRjAwMjhMKSAvKiBCRkZGMDAyOCwgLTEwNzM4MDczMjAgKi8NCisjZGVmaW5lIFZJX0VSUk9SX0lOVl9ITkRMUl9SRUYgICAgICAoX1ZJX0VSUk9SKzB4M0ZGRjAwMjlMKSAvKiBCRkZGMDAyOSwgLTEwNzM4MDczMTkgKi8NCisjZGVmaW5lIFZJX0VSUk9SX0lOVl9DT05URVhUICAgICAgICAoX1ZJX0VSUk9SKzB4M0ZGRjAwMkFMKSAvKiBCRkZGMDAyQSwgLTEwNzM4MDczMTggKi8NCisjZGVmaW5lIFZJX0VSUk9SX1FVRVVFX09WRVJGTE9XICAgICAoX1ZJX0VSUk9SKzB4M0ZGRjAwMkRMKSAvKiBCRkZGMDAyRCwgLTEwNzM4MDczMTUgKi8NCisjZGVmaW5lIFZJX0VSUk9SX05FTkFCTEVEICAgICAgICAgICAoX1ZJX0VSUk9SKzB4M0ZGRjAwMkZMKSAvKiBCRkZGMDAyRiwgLTEwNzM4MDczMTMgKi8NCisjZGVmaW5lIFZJX0VSUk9SX0FCT1JUICAgICAgICAgICAgICAoX1ZJX0VSUk9SKzB4M0ZGRjAwMzBMKSAvKiBCRkZGMDAzMCwgLTEwNzM4MDczMTIgKi8NCisjZGVmaW5lIFZJX0VSUk9SX1JBV19XUl9QUk9UX1ZJT0wgICAoX1ZJX0VSUk9SKzB4M0ZGRjAwMzRMKSAvKiBCRkZGMDAzNCwgLTEwNzM4MDczMDggKi8NCisjZGVmaW5lIFZJX0VSUk9SX1JBV19SRF9QUk9UX1ZJT0wgICAoX1ZJX0VSUk9SKzB4M0ZGRjAwMzVMKSAvKiBCRkZGMDAzNSwgLTEwNzM4MDczMDcgKi8NCisjZGVmaW5lIFZJX0VSUk9SX09VVFBfUFJPVF9WSU9MICAgICAoX1ZJX0VSUk9SKzB4M0ZGRjAwMzZMKSAvKiBCRkZGMDAzNiwgLTEwNzM4MDczMDYgKi8NCisjZGVmaW5lIFZJX0VSUk9SX0lOUF9QUk9UX1ZJT0wgICAgICAoX1ZJX0VSUk9SKzB4M0ZGRjAwMzdMKSAvKiBCRkZGMDAzNywgLTEwNzM4MDczMDUgKi8NCisjZGVmaW5lIFZJX0VSUk9SX0JFUlIgICAgICAgICAgICAgICAoX1ZJX0VSUk9SKzB4M0ZGRjAwMzhMKSAvKiBCRkZGMDAzOCwgLTEwNzM4MDczMDQgKi8NCisjZGVmaW5lIFZJX0VSUk9SX0lOX1BST0dSRVNTICAgICAgICAoX1ZJX0VSUk9SKzB4M0ZGRjAwMzlMKSAvKiBCRkZGMDAzOSwgLTEwNzM4MDczMDMgKi8NCisjZGVmaW5lIFZJX0VSUk9SX0lOVl9TRVRVUCAgICAgICAgICAoX1ZJX0VSUk9SKzB4M0ZGRjAwM0FMKSAvKiBCRkZGMDAzQSwgLTEwNzM4MDczMDIgKi8NCisjZGVmaW5lIFZJX0VSUk9SX1FVRVVFX0VSUk9SICAgICAgICAoX1ZJX0VSUk9SKzB4M0ZGRjAwM0JMKSAvKiBCRkZGMDAzQiwgLTEwNzM4MDczMDEgKi8NCisjZGVmaW5lIFZJX0VSUk9SX0FMTE9DICAgICAgICAgICAgICAoX1ZJX0VSUk9SKzB4M0ZGRjAwM0NMKSAvKiBCRkZGMDAzQywgLTEwNzM4MDczMDAgKi8NCisjZGVmaW5lIFZJX0VSUk9SX0lOVl9NQVNLICAgICAgICAgICAoX1ZJX0VSUk9SKzB4M0ZGRjAwM0RMKSAvKiBCRkZGMDAzRCwgLTEwNzM4MDcyOTkgKi8NCisjZGVmaW5lIFZJX0VSUk9SX0lPICAgICAgICAgICAgICAgICAoX1ZJX0VSUk9SKzB4M0ZGRjAwM0VMKSAvKiBCRkZGMDAzRSwgLTEwNzM4MDcyOTggKi8NCisjZGVmaW5lIFZJX0VSUk9SX0lOVl9GTVQgICAgICAgICAgICAoX1ZJX0VSUk9SKzB4M0ZGRjAwM0ZMKSAvKiBCRkZGMDAzRiwgLTEwNzM4MDcyOTcgKi8NCisjZGVmaW5lIFZJX0VSUk9SX05TVVBfRk1UICAgICAgICAgICAoX1ZJX0VSUk9SKzB4M0ZGRjAwNDFMKSAvKiBCRkZGMDA0MSwgLTEwNzM4MDcyOTUgKi8NCisjZGVmaW5lIFZJX0VSUk9SX0xJTkVfSU5fVVNFICAgICAgICAoX1ZJX0VSUk9SKzB4M0ZGRjAwNDJMKSAvKiBCRkZGMDA0MiwgLTEwNzM4MDcyOTQgKi8NCisjZGVmaW5lIFZJX0VSUk9SX05TVVBfTU9ERSAgICAgICAgICAoX1ZJX0VSUk9SKzB4M0ZGRjAwNDZMKSAvKiBCRkZGMDA0NiwgLTEwNzM4MDcyOTAgKi8NCisjZGVmaW5lIFZJX0VSUk9SX1NSUV9OT0NDVVJSRUQgICAgICAoX1ZJX0VSUk9SKzB4M0ZGRjAwNEFMKSAvKiBCRkZGMDA0QSwgLTEwNzM4MDcyODYgKi8NCisjZGVmaW5lIFZJX0VSUk9SX0lOVl9TUEFDRSAgICAgICAgICAoX1ZJX0VSUk9SKzB4M0ZGRjAwNEVMKSAvKiBCRkZGMDA0RSwgLTEwNzM4MDcyODIgKi8NCisjZGVmaW5lIFZJX0VSUk9SX0lOVl9PRkZTRVQgICAgICAgICAoX1ZJX0VSUk9SKzB4M0ZGRjAwNTFMKSAvKiBCRkZGMDA1MSwgLTEwNzM4MDcyNzkgKi8NCisjZGVmaW5lIFZJX0VSUk9SX0lOVl9XSURUSCAgICAgICAgICAoX1ZJX0VSUk9SKzB4M0ZGRjAwNTJMKSAvKiBCRkZGMDA1MiwgLTEwNzM4MDcyNzggKi8NCisjZGVmaW5lIFZJX0VSUk9SX05TVVBfT0ZGU0VUICAgICAgICAoX1ZJX0VSUk9SKzB4M0ZGRjAwNTRMKSAvKiBCRkZGMDA1NCwgLTEwNzM4MDcyNzYgKi8NCisjZGVmaW5lIFZJX0VSUk9SX05TVVBfVkFSX1dJRFRIICAgICAoX1ZJX0VSUk9SKzB4M0ZGRjAwNTVMKSAvKiBCRkZGMDA1NSwgLTEwNzM4MDcyNzUgKi8NCisjZGVmaW5lIFZJX0VSUk9SX1dJTkRPV19OTUFQUEVEICAgICAoX1ZJX0VSUk9SKzB4M0ZGRjAwNTdMKSAvKiBCRkZGMDA1NywgLTEwNzM4MDcyNzMgKi8NCisjZGVmaW5lIFZJX0VSUk9SX1JFU1BfUEVORElORyAgICAgICAoX1ZJX0VSUk9SKzB4M0ZGRjAwNTlMKSAvKiBCRkZGMDA1OSwgLTEwNzM4MDcyNzEgKi8NCisjZGVmaW5lIFZJX0VSUk9SX05MSVNURU5FUlMgICAgICAgICAoX1ZJX0VSUk9SKzB4M0ZGRjAwNUZMKSAvKiBCRkZGMDA1RiwgLTEwNzM4MDcyNjUgKi8NCisjZGVmaW5lIFZJX0VSUk9SX05DSUMgICAgICAgICAgICAgICAoX1ZJX0VSUk9SKzB4M0ZGRjAwNjBMKSAvKiBCRkZGMDA2MCwgLTEwNzM4MDcyNjQgKi8NCisjZGVmaW5lIFZJX0VSUk9SX05TWVNfQ05UTFIgICAgICAgICAoX1ZJX0VSUk9SKzB4M0ZGRjAwNjFMKSAvKiBCRkZGMDA2MSwgLTEwNzM4MDcyNjMgKi8NCisjZGVmaW5lIFZJX0VSUk9SX05TVVBfT1BFUiAgICAgICAgICAoX1ZJX0VSUk9SKzB4M0ZGRjAwNjdMKSAvKiBCRkZGMDA2NywgLTEwNzM4MDcyNTcgKi8NCisjZGVmaW5lIFZJX0VSUk9SX0lOVFJfUEVORElORyAgICAgICAoX1ZJX0VSUk9SKzB4M0ZGRjAwNjhMKSAvKiBCRkZGMDA2OCwgLTEwNzM4MDcyNTYgKi8NCisjZGVmaW5lIFZJX0VSUk9SX0FTUkxfUEFSSVRZICAgICAgICAoX1ZJX0VSUk9SKzB4M0ZGRjAwNkFMKSAvKiBCRkZGMDA2QSwgLTEwNzM4MDcyNTQgKi8NCisjZGVmaW5lIFZJX0VSUk9SX0FTUkxfRlJBTUlORyAgICAgICAoX1ZJX0VSUk9SKzB4M0ZGRjAwNkJMKSAvKiBCRkZGMDA2QiwgLTEwNzM4MDcyNTMgKi8NCisjZGVmaW5lIFZJX0VSUk9SX0FTUkxfT1ZFUlJVTiAgICAgICAoX1ZJX0VSUk9SKzB4M0ZGRjAwNkNMKSAvKiBCRkZGMDA2QywgLTEwNzM4MDcyNTIgKi8NCisjZGVmaW5lIFZJX0VSUk9SX1RSSUdfTk1BUFBFRCAgICAgICAoX1ZJX0VSUk9SKzB4M0ZGRjAwNkVMKSAvKiBCRkZGMDA2RSwgLTEwNzM4MDcyNTAgKi8NCisjZGVmaW5lIFZJX0VSUk9SX05TVVBfQUxJR05fT0ZGU0VUICAoX1ZJX0VSUk9SKzB4M0ZGRjAwNzBMKSAvKiBCRkZGMDA3MCwgLTEwNzM4MDcyNDggKi8NCisjZGVmaW5lIFZJX0VSUk9SX1VTRVJfQlVGICAgICAgICAgICAoX1ZJX0VSUk9SKzB4M0ZGRjAwNzFMKSAvKiBCRkZGMDA3MSwgLTEwNzM4MDcyNDcgKi8NCisjZGVmaW5lIFZJX0VSUk9SX1JTUkNfQlVTWSAgICAgICAgICAoX1ZJX0VSUk9SKzB4M0ZGRjAwNzJMKSAvKiBCRkZGMDA3MiwgLTEwNzM4MDcyNDYgKi8NCisjZGVmaW5lIFZJX0VSUk9SX05TVVBfV0lEVEggICAgICAgICAoX1ZJX0VSUk9SKzB4M0ZGRjAwNzZMKSAvKiBCRkZGMDA3NiwgLTEwNzM4MDcyNDIgKi8NCisjZGVmaW5lIFZJX0VSUk9SX0lOVl9QQVJBTUVURVIgICAgICAoX1ZJX0VSUk9SKzB4M0ZGRjAwNzhMKSAvKiBCRkZGMDA3OCwgLTEwNzM4MDcyNDAgKi8NCisjZGVmaW5lIFZJX0VSUk9SX0lOVl9QUk9UICAgICAgICAgICAoX1ZJX0VSUk9SKzB4M0ZGRjAwNzlMKSAvKiBCRkZGMDA3OSwgLTEwNzM4MDcyMzkgKi8NCisjZGVmaW5lIFZJX0VSUk9SX0lOVl9TSVpFICAgICAgICAgICAoX1ZJX0VSUk9SKzB4M0ZGRjAwN0JMKSAvKiBCRkZGMDA3QiwgLTEwNzM4MDcyMzcgKi8NCisjZGVmaW5lIFZJX0VSUk9SX1dJTkRPV19NQVBQRUQgICAgICAoX1ZJX0VSUk9SKzB4M0ZGRjAwODBMKSAvKiBCRkZGMDA4MCwgLTEwNzM4MDcyMzIgKi8NCisjZGVmaW5lIFZJX0VSUk9SX05JTVBMX09QRVIgICAgICAgICAoX1ZJX0VSUk9SKzB4M0ZGRjAwODFMKSAvKiBCRkZGMDA4MSwgLTEwNzM4MDcyMzEgKi8NCisjZGVmaW5lIFZJX0VSUk9SX0lOVl9MRU5HVEggICAgICAgICAoX1ZJX0VSUk9SKzB4M0ZGRjAwODNMKSAvKiBCRkZGMDA4MywgLTEwNzM4MDcyMjkgKi8NCisjZGVmaW5lIFZJX0VSUk9SX0lOVl9NT0RFICAgICAgICAgICAoX1ZJX0VSUk9SKzB4M0ZGRjAwOTFMKSAvKiBCRkZGMDA5MSwgLTEwNzM4MDcyMTUgKi8NCisjZGVmaW5lIFZJX0VSUk9SX1NFU05fTkxPQ0tFRCAgICAgICAoX1ZJX0VSUk9SKzB4M0ZGRjAwOUNMKSAvKiBCRkZGMDA5QywgLTEwNzM4MDcyMDQgKi8NCisjZGVmaW5lIFZJX0VSUk9SX01FTV9OU0hBUkVEICAgICAgICAoX1ZJX0VSUk9SKzB4M0ZGRjAwOURMKSAvKiBCRkZGMDA5RCwgLTEwNzM4MDcyMDMgKi8NCisjZGVmaW5lIFZJX0VSUk9SX0xJQlJBUllfTkZPVU5EICAgICAoX1ZJX0VSUk9SKzB4M0ZGRjAwOUVMKSAvKiBCRkZGMDA5RSwgLTEwNzM4MDcyMDIgKi8NCisjZGVmaW5lIFZJX0VSUk9SX05TVVBfSU5UUiAgICAgICAgICAoX1ZJX0VSUk9SKzB4M0ZGRjAwOUZMKSAvKiBCRkZGMDA5RiwgLTEwNzM4MDcyMDEgKi8NCisjZGVmaW5lIFZJX0VSUk9SX0lOVl9MSU5FICAgICAgICAgICAoX1ZJX0VSUk9SKzB4M0ZGRjAwQTBMKSAvKiBCRkZGMDBBMCwgLTEwNzM4MDcyMDAgKi8NCisjZGVmaW5lIFZJX0VSUk9SX0ZJTEVfQUNDRVNTICAgICAgICAoX1ZJX0VSUk9SKzB4M0ZGRjAwQTFMKSAvKiBCRkZGMDBBMSwgLTEwNzM4MDcxOTkgKi8NCisjZGVmaW5lIFZJX0VSUk9SX0ZJTEVfSU8gICAgICAgICAgICAoX1ZJX0VSUk9SKzB4M0ZGRjAwQTJMKSAvKiBCRkZGMDBBMiwgLTEwNzM4MDcxOTggKi8NCisjZGVmaW5lIFZJX0VSUk9SX05TVVBfTElORSAgICAgICAgICAoX1ZJX0VSUk9SKzB4M0ZGRjAwQTNMKSAvKiBCRkZGMDBBMywgLTEwNzM4MDcxOTcgKi8NCisjZGVmaW5lIFZJX0VSUk9SX05TVVBfTUVDSCAgICAgICAgICAoX1ZJX0VSUk9SKzB4M0ZGRjAwQTRMKSAvKiBCRkZGMDBBNCwgLTEwNzM4MDcxOTYgKi8NCisjZGVmaW5lIFZJX0VSUk9SX0lOVEZfTlVNX05DT05GSUcgICAoX1ZJX0VSUk9SKzB4M0ZGRjAwQTVMKSAvKiBCRkZGMDBBNSwgLTEwNzM4MDcxOTUgKi8NCisjZGVmaW5lIFZJX0VSUk9SX0NPTk5fTE9TVCAgICAgICAgICAoX1ZJX0VSUk9SKzB4M0ZGRjAwQTZMKSAvKiBCRkZGMDBBNiwgLTEwNzM4MDcxOTQgKi8NCisjZGVmaW5lIFZJX0VSUk9SX01BQ0hJTkVfTkFWQUlMICAgICAoX1ZJX0VSUk9SKzB4M0ZGRjAwQTdMKSAvKiBCRkZGMDBBNywgLTEwNzM4MDcxOTMgKi8NCisjZGVmaW5lIFZJX0VSUk9SX05QRVJNSVNTSU9OICAgICAgICAoX1ZJX0VSUk9SKzB4M0ZGRjAwQThMKSAvKiBCRkZGMDBBOCwgLTEwNzM4MDcxOTIgKi8NCisNCisvKi0gT3RoZXIgVklTQSBEZWZpbml0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorDQorI2RlZmluZSBWSV9WRVJTSU9OX01BSk9SKHZlcikgICAgICAgKCgoKFZpVmVyc2lvbil2ZXIpICYgMHhGRkYwMDAwMFVMKSA+PiAyMCkNCisjZGVmaW5lIFZJX1ZFUlNJT05fTUlOT1IodmVyKSAgICAgICAoKCgoVmlWZXJzaW9uKXZlcikgJiAweDAwMEZGRjAwVUwpID4+ICA4KQ0KKyNkZWZpbmUgVklfVkVSU0lPTl9TVUJNSU5PUih2ZXIpICAgICgoKChWaVZlcnNpb24pdmVyKSAmIDB4MDAwMDAwRkZVTCkgICAgICApDQorDQorI2RlZmluZSBWSV9GSU5EX0JVRkxFTiAgICAgICAgICAgICAgKDI1NikNCisNCisjZGVmaW5lIFZJX0lOVEZfR1BJQiAgICAgICAgICAgICAgICAoMSkNCisjZGVmaW5lIFZJX0lOVEZfVlhJICAgICAgICAgICAgICAgICAoMikNCisjZGVmaW5lIFZJX0lOVEZfR1BJQl9WWEkgICAgICAgICAgICAoMykNCisjZGVmaW5lIFZJX0lOVEZfQVNSTCAgICAgICAgICAgICAgICAoNCkNCisjZGVmaW5lIFZJX0lOVEZfUFhJICAgICAgICAgICAgICAgICAoNSkNCisjZGVmaW5lIFZJX0lOVEZfVENQSVAgICAgICAgICAgICAgICAoNikNCisjZGVmaW5lIFZJX0lOVEZfVVNCICAgICAgICAgICAgICAgICAoNykNCisNCisjZGVmaW5lIFZJX1BST1RfTk9STUFMICAgICAgICAgICAgICAoMSkNCisjZGVmaW5lIFZJX1BST1RfRkRDICAgICAgICAgICAgICAgICAoMikNCisjZGVmaW5lIFZJX1BST1RfSFM0ODggICAgICAgICAgICAgICAoMykNCisjZGVmaW5lIFZJX1BST1RfNDg4Ml9TVFJTICAgICAgICAgICAoNCkNCisjZGVmaW5lIFZJX1BST1RfVVNCVE1DX1ZFTkRPUiAgICAgICAoNSkNCisNCisjZGVmaW5lIFZJX0ZEQ19OT1JNQUwgICAgICAgICAgICAgICAoMSkNCisjZGVmaW5lIFZJX0ZEQ19TVFJFQU0gICAgICAgICAgICAgICAoMikNCisNCisjZGVmaW5lIFZJX0xPQ0FMX1NQQUNFICAgICAgICAgICAgICAoMCkNCisjZGVmaW5lIFZJX0ExNl9TUEFDRSAgICAgICAgICAgICAgICAoMSkNCisjZGVmaW5lIFZJX0EyNF9TUEFDRSAgICAgICAgICAgICAgICAoMikNCisjZGVmaW5lIFZJX0EzMl9TUEFDRSAgICAgICAgICAgICAgICAoMykNCisjZGVmaW5lIFZJX0E2NF9TUEFDRSAgICAgICAgICAgICAgICAoNCkNCisjZGVmaW5lIFZJX1BYSV9BTExPQ19TUEFDRSAgICAgICAgICAoOSkNCisjZGVmaW5lIFZJX1BYSV9DRkdfU1BBQ0UgICAgICAgICAgICAoMTApDQorI2RlZmluZSBWSV9QWElfQkFSMF9TUEFDRSAgICAgICAgICAgKDExKQ0KKyNkZWZpbmUgVklfUFhJX0JBUjFfU1BBQ0UgICAgICAgICAgICgxMikNCisjZGVmaW5lIFZJX1BYSV9CQVIyX1NQQUNFICAgICAgICAgICAoMTMpDQorI2RlZmluZSBWSV9QWElfQkFSM19TUEFDRSAgICAgICAgICAgKDE0KQ0KKyNkZWZpbmUgVklfUFhJX0JBUjRfU1BBQ0UgICAgICAgICAgICgxNSkNCisjZGVmaW5lIFZJX1BYSV9CQVI1X1NQQUNFICAgICAgICAgICAoMTYpDQorI2RlZmluZSBWSV9PUEFRVUVfU1BBQ0UgICAgICAgICAgICAgKDB4RkZGRikNCisNCisjZGVmaW5lIFZJX1VOS05PV05fTEEgICAgICAgICAgICAgICAoLTEpDQorI2RlZmluZSBWSV9VTktOT1dOX1NMT1QgICAgICAgICAgICAgKC0xKQ0KKyNkZWZpbmUgVklfVU5LTk9XTl9MRVZFTCAgICAgICAgICAgICgtMSkNCisjZGVmaW5lIFZJX1VOS05PV05fQ0hBU1NJUyAgICAgICAgICAoLTEpDQorDQorI2RlZmluZSBWSV9RVUVVRSAgICAgICAgICAgICAgICAgICAgKDEpDQorI2RlZmluZSBWSV9ITkRMUiAgICAgICAgICAgICAgICAgICAgKDIpDQorI2RlZmluZSBWSV9TVVNQRU5EX0hORExSICAgICAgICAgICAgKDQpDQorI2RlZmluZSBWSV9BTExfTUVDSCAgICAgICAgICAgICAgICAgKDB4RkZGRikNCisNCisjZGVmaW5lIFZJX0FOWV9ITkRMUiAgICAgICAgICAgICAgICAoMCkNCisNCisjZGVmaW5lIFZJX1RSSUdfQUxMICAgICAgICAgICAgICAgICAoLTIpDQorI2RlZmluZSBWSV9UUklHX1NXICAgICAgICAgICAgICAgICAgKC0xKQ0KKyNkZWZpbmUgVklfVFJJR19UVEwwICAgICAgICAgICAgICAgICgwKQ0KKyNkZWZpbmUgVklfVFJJR19UVEwxICAgICAgICAgICAgICAgICgxKQ0KKyNkZWZpbmUgVklfVFJJR19UVEwyICAgICAgICAgICAgICAgICgyKQ0KKyNkZWZpbmUgVklfVFJJR19UVEwzICAgICAgICAgICAgICAgICgzKQ0KKyNkZWZpbmUgVklfVFJJR19UVEw0ICAgICAgICAgICAgICAgICg0KQ0KKyNkZWZpbmUgVklfVFJJR19UVEw1ICAgICAgICAgICAgICAgICg1KQ0KKyNkZWZpbmUgVklfVFJJR19UVEw2ICAgICAgICAgICAgICAgICg2KQ0KKyNkZWZpbmUgVklfVFJJR19UVEw3ICAgICAgICAgICAgICAgICg3KQ0KKyNkZWZpbmUgVklfVFJJR19FQ0wwICAgICAgICAgICAgICAgICg4KQ0KKyNkZWZpbmUgVklfVFJJR19FQ0wxICAgICAgICAgICAgICAgICg5KQ0KKyNkZWZpbmUgVklfVFJJR19QQU5FTF9JTiAgICAgICAgICAgICgyNykNCisjZGVmaW5lIFZJX1RSSUdfUEFORUxfT1VUICAgICAgICAgICAoMjgpDQorDQorI2RlZmluZSBWSV9UUklHX1BST1RfREVGQVVMVCAgICAgICAgKDApDQorI2RlZmluZSBWSV9UUklHX1BST1RfT04gICAgICAgICAgICAgKDEpDQorI2RlZmluZSBWSV9UUklHX1BST1RfT0ZGICAgICAgICAgICAgKDIpDQorI2RlZmluZSBWSV9UUklHX1BST1RfU1lOQyAgICAgICAgICAgKDUpDQorI2RlZmluZSBWSV9UUklHX1BST1RfUkVTRVJWRSAgICAgICAgKDYpDQorI2RlZmluZSBWSV9UUklHX1BST1RfVU5SRVNFUlZFICAgICAgKDcpDQorDQorI2RlZmluZSBWSV9SRUFEX0JVRiAgICAgICAgICAgICAgICAgKDEpDQorI2RlZmluZSBWSV9XUklURV9CVUYgICAgICAgICAgICAgICAgKDIpDQorI2RlZmluZSBWSV9SRUFEX0JVRl9ESVNDQVJEICAgICAgICAgKDQpDQorI2RlZmluZSBWSV9XUklURV9CVUZfRElTQ0FSRCAgICAgICAgKDgpDQorI2RlZmluZSBWSV9JT19JTl9CVUYgICAgICAgICAgICAgICAgKDE2KQ0KKyNkZWZpbmUgVklfSU9fT1VUX0JVRiAgICAgICAgICAgICAgICgzMikNCisjZGVmaW5lIFZJX0lPX0lOX0JVRl9ESVNDQVJEICAgICAgICAoNjQpDQorI2RlZmluZSBWSV9JT19PVVRfQlVGX0RJU0NBUkQgICAgICAgKDEyOCkNCisNCisjZGVmaW5lIFZJX0ZMVVNIX09OX0FDQ0VTUyAgICAgICAgICAoMSkNCisjZGVmaW5lIFZJX0ZMVVNIX1dIRU5fRlVMTCAgICAgICAgICAoMikNCisjZGVmaW5lIFZJX0ZMVVNIX0RJU0FCTEUgICAgICAgICAgICAoMykNCisNCisjZGVmaW5lIFZJX05NQVBQRUQgICAgICAgICAgICAgICAgICAoMSkNCisjZGVmaW5lIFZJX1VTRV9PUEVSUyAgICAgICAgICAgICAgICAoMikNCisjZGVmaW5lIFZJX0RFUkVGX0FERFIgICAgICAgICAgICAgICAoMykNCisjZGVmaW5lIFZJX0RFUkVGX0FERFJfQllURV9TV0FQICAgICAoNCkNCisNCisjZGVmaW5lIFZJX1RNT19JTU1FRElBVEUgICAgICAgICAgICAoMEwpDQorI2RlZmluZSBWSV9UTU9fSU5GSU5JVEUgICAgICAgICAgICAgKDB4RkZGRkZGRkZVTCkNCisNCisjZGVmaW5lIFZJX05PX0xPQ0sgICAgICAgICAgICAgICAgICAoMCkNCisjZGVmaW5lIFZJX0VYQ0xVU0lWRV9MT0NLICAgICAgICAgICAoMSkNCisjZGVmaW5lIFZJX1NIQVJFRF9MT0NLICAgICAgICAgICAgICAoMikNCisjZGVmaW5lIFZJX0xPQURfQ09ORklHICAgICAgICAgICAgICAoNCkNCisNCisjZGVmaW5lIFZJX05PX1NFQ19BRERSICAgICAgICAgICAgICAoMHhGRkZGKQ0KKw0KKyNkZWZpbmUgVklfQVNSTF9QQVJfTk9ORSAgICAgICAgICAgICgwKQ0KKyNkZWZpbmUgVklfQVNSTF9QQVJfT0REICAgICAgICAgICAgICgxKQ0KKyNkZWZpbmUgVklfQVNSTF9QQVJfRVZFTiAgICAgICAgICAgICgyKQ0KKyNkZWZpbmUgVklfQVNSTF9QQVJfTUFSSyAgICAgICAgICAgICgzKQ0KKyNkZWZpbmUgVklfQVNSTF9QQVJfU1BBQ0UgICAgICAgICAgICg0KQ0KKw0KKyNkZWZpbmUgVklfQVNSTF9TVE9QX09ORSAgICAgICAgICAgICgxMCkNCisjZGVmaW5lIFZJX0FTUkxfU1RPUF9PTkU1ICAgICAgICAgICAoMTUpDQorI2RlZmluZSBWSV9BU1JMX1NUT1BfVFdPICAgICAgICAgICAgKDIwKQ0KKw0KKyNkZWZpbmUgVklfQVNSTF9GTE9XX05PTkUgICAgICAgICAgICgwKQ0KKyNkZWZpbmUgVklfQVNSTF9GTE9XX1hPTl9YT0ZGICAgICAgICgxKQ0KKyNkZWZpbmUgVklfQVNSTF9GTE9XX1JUU19DVFMgICAgICAgICgyKQ0KKyNkZWZpbmUgVklfQVNSTF9GTE9XX0RUUl9EU1IgICAgICAgICg0KQ0KKw0KKyNkZWZpbmUgVklfQVNSTF9FTkRfTk9ORSAgICAgICAgICAgICgwKQ0KKyNkZWZpbmUgVklfQVNSTF9FTkRfTEFTVF9CSVQgICAgICAgICgxKQ0KKyNkZWZpbmUgVklfQVNSTF9FTkRfVEVSTUNIQVIgICAgICAgICgyKQ0KKyNkZWZpbmUgVklfQVNSTF9FTkRfQlJFQUsgICAgICAgICAgICgzKQ0KKw0KKyNkZWZpbmUgVklfU1RBVEVfQVNTRVJURUQgICAgICAgICAgICgxKQ0KKyNkZWZpbmUgVklfU1RBVEVfVU5BU1NFUlRFRCAgICAgICAgICgwKQ0KKyNkZWZpbmUgVklfU1RBVEVfVU5LTk9XTiAgICAgICAgICAgICgtMSkNCisNCisjZGVmaW5lIFZJX0JJR19FTkRJQU4gICAgICAgICAgICAgICAoMCkNCisjZGVmaW5lIFZJX0xJVFRMRV9FTkRJQU4gICAgICAgICAgICAoMSkNCisNCisjZGVmaW5lIFZJX0RBVEFfUFJJViAgICAgICAgICAgICAgICAoMCkNCisjZGVmaW5lIFZJX0RBVEFfTlBSSVYgICAgICAgICAgICAgICAoMSkNCisjZGVmaW5lIFZJX1BST0dfUFJJViAgICAgICAgICAgICAgICAoMikNCisjZGVmaW5lIFZJX1BST0dfTlBSSVYgICAgICAgICAgICAgICAoMykNCisjZGVmaW5lIFZJX0JMQ0tfUFJJViAgICAgICAgICAgICAgICAoNCkNCisjZGVmaW5lIFZJX0JMQ0tfTlBSSVYgICAgICAgICAgICAgICAoNSkNCisjZGVmaW5lIFZJX0Q2NF9QUklWICAgICAgICAgICAgICAgICAoNikNCisjZGVmaW5lIFZJX0Q2NF9OUFJJViAgICAgICAgICAgICAgICAoNykNCisNCisjZGVmaW5lIFZJX1dJRFRIXzggICAgICAgICAgICAgICAgICAoMSkNCisjZGVmaW5lIFZJX1dJRFRIXzE2ICAgICAgICAgICAgICAgICAoMikNCisjZGVmaW5lIFZJX1dJRFRIXzMyICAgICAgICAgICAgICAgICAoNCkNCisjZGVmaW5lIFZJX1dJRFRIXzY0ICAgICAgICAgICAgICAgICAoOCkNCisNCisjZGVmaW5lIFZJX0dQSUJfUkVOX0RFQVNTRVJUICAgICAgICAoMCkNCisjZGVmaW5lIFZJX0dQSUJfUkVOX0FTU0VSVCAgICAgICAgICAoMSkNCisjZGVmaW5lIFZJX0dQSUJfUkVOX0RFQVNTRVJUX0dUTCAgICAoMikNCisjZGVmaW5lIFZJX0dQSUJfUkVOX0FTU0VSVF9BRERSRVNTICAoMykNCisjZGVmaW5lIFZJX0dQSUJfUkVOX0FTU0VSVF9MTE8gICAgICAoNCkNCisjZGVmaW5lIFZJX0dQSUJfUkVOX0FTU0VSVF9BRERSRVNTX0xMTyAoNSkNCisjZGVmaW5lIFZJX0dQSUJfUkVOX0FERFJFU1NfR1RMICAgICAoNikNCisNCisjZGVmaW5lIFZJX0dQSUJfQVROX0RFQVNTRVJUICAgICAgICAoMCkNCisjZGVmaW5lIFZJX0dQSUJfQVROX0FTU0VSVCAgICAgICAgICAoMSkNCisjZGVmaW5lIFZJX0dQSUJfQVROX0RFQVNTRVJUX0hBTkRTSEFLRSAoMikNCisjZGVmaW5lIFZJX0dQSUJfQVROX0FTU0VSVF9JTU1FRElBVEUgKDMpDQorDQorI2RlZmluZSBWSV9HUElCX0hTNDg4X0RJU0FCTEVEICAgICAgKDApDQorI2RlZmluZSBWSV9HUElCX0hTNDg4X05JTVBMICAgICAgICAgKC0xKQ0KKw0KKyNkZWZpbmUgVklfR1BJQl9VTkFERFJFU1NFRCAgICAgICAgICgwKQ0KKyNkZWZpbmUgVklfR1BJQl9UQUxLRVIgICAgICAgICAgICAgICgxKQ0KKyNkZWZpbmUgVklfR1BJQl9MSVNURU5FUiAgICAgICAgICAgICgyKQ0KKw0KKyNkZWZpbmUgVklfVlhJX0NNRDE2ICAgICAgICAgICAgICAgICgweDAyMDApDQorI2RlZmluZSBWSV9WWElfQ01EMTZfUkVTUDE2ICAgICAgICAgKDB4MDIwMikNCisjZGVmaW5lIFZJX1ZYSV9SRVNQMTYgICAgICAgICAgICAgICAoMHgwMDAyKQ0KKyNkZWZpbmUgVklfVlhJX0NNRDMyICAgICAgICAgICAgICAgICgweDA0MDApDQorI2RlZmluZSBWSV9WWElfQ01EMzJfUkVTUDE2ICAgICAgICAgKDB4MDQwMikNCisjZGVmaW5lIFZJX1ZYSV9DTUQzMl9SRVNQMzIgICAgICAgICAoMHgwNDA0KQ0KKyNkZWZpbmUgVklfVlhJX1JFU1AzMiAgICAgICAgICAgICAgICgweDAwMDQpDQorDQorI2RlZmluZSBWSV9BU1NFUlRfU0lHTkFMICAgICAgICAgICAgKC0xKQ0KKyNkZWZpbmUgVklfQVNTRVJUX1VTRV9BU1NJR05FRCAgICAgICgwKQ0KKyNkZWZpbmUgVklfQVNTRVJUX0lSUTEgICAgICAgICAgICAgICgxKQ0KKyNkZWZpbmUgVklfQVNTRVJUX0lSUTIgICAgICAgICAgICAgICgyKQ0KKyNkZWZpbmUgVklfQVNTRVJUX0lSUTMgICAgICAgICAgICAgICgzKQ0KKyNkZWZpbmUgVklfQVNTRVJUX0lSUTQgICAgICAgICAgICAgICg0KQ0KKyNkZWZpbmUgVklfQVNTRVJUX0lSUTUgICAgICAgICAgICAgICg1KQ0KKyNkZWZpbmUgVklfQVNTRVJUX0lSUTYgICAgICAgICAgICAgICg2KQ0KKyNkZWZpbmUgVklfQVNTRVJUX0lSUTcgICAgICAgICAgICAgICg3KQ0KKw0KKyNkZWZpbmUgVklfVVRJTF9BU1NFUlRfU1lTUkVTRVQgICAgICgxKQ0KKyNkZWZpbmUgVklfVVRJTF9BU1NFUlRfU1lTRkFJTCAgICAgICgyKQ0KKyNkZWZpbmUgVklfVVRJTF9ERUFTU0VSVF9TWVNGQUlMICAgICgzKQ0KKw0KKyNkZWZpbmUgVklfVlhJX0NMQVNTX01FTU9SWSAgICAgICAgICgwKQ0KKyNkZWZpbmUgVklfVlhJX0NMQVNTX0VYVEVOREVEICAgICAgICgxKQ0KKyNkZWZpbmUgVklfVlhJX0NMQVNTX01FU1NBR0UgICAgICAgICgyKQ0KKyNkZWZpbmUgVklfVlhJX0NMQVNTX1JFR0lTVEVSICAgICAgICgzKQ0KKyNkZWZpbmUgVklfVlhJX0NMQVNTX09USEVSICAgICAgICAgICg0KQ0KKw0KKyNkZWZpbmUgVklfUFhJX0FERFJfTk9ORSAgICAgICAgICAgICgwKQ0KKyNkZWZpbmUgVklfUFhJX0FERFJfTUVNICAgICAgICAgICAgICgxKQ0KKyNkZWZpbmUgVklfUFhJX0FERFJfSU8gICAgICAgICAgICAgICgyKQ0KKyNkZWZpbmUgVklfUFhJX0FERFJfQ0ZHICAgICAgICAgICAgICgzKQ0KKw0KKyNkZWZpbmUgVklfVFJJR19VTktOT1dOICAgICAgICAgICAgICgtMSkNCisNCisjZGVmaW5lIFZJX1BYSV9MQlVTX1VOS05PV04gICAgICAgICAoLTEpDQorI2RlZmluZSBWSV9QWElfTEJVU19OT05FICAgICAgICAgICAgKDApDQorI2RlZmluZSBWSV9QWElfTEJVU19TVEFSX1RSSUdfQlVTXzAgKDEwMDApDQorI2RlZmluZSBWSV9QWElfTEJVU19TVEFSX1RSSUdfQlVTXzEgKDEwMDEpDQorI2RlZmluZSBWSV9QWElfTEJVU19TVEFSX1RSSUdfQlVTXzIgKDEwMDIpDQorI2RlZmluZSBWSV9QWElfTEJVU19TVEFSX1RSSUdfQlVTXzMgKDEwMDMpDQorI2RlZmluZSBWSV9QWElfTEJVU19TVEFSX1RSSUdfQlVTXzQgKDEwMDQpDQorI2RlZmluZSBWSV9QWElfTEJVU19TVEFSX1RSSUdfQlVTXzUgKDEwMDUpDQorI2RlZmluZSBWSV9QWElfTEJVU19TVEFSX1RSSUdfQlVTXzYgKDEwMDYpDQorI2RlZmluZSBWSV9QWElfTEJVU19TVEFSX1RSSUdfQlVTXzcgKDEwMDcpDQorI2RlZmluZSBWSV9QWElfTEJVU19TVEFSX1RSSUdfQlVTXzggKDEwMDgpDQorI2RlZmluZSBWSV9QWElfTEJVU19TVEFSX1RSSUdfQlVTXzkgKDEwMDkpDQorI2RlZmluZSBWSV9QWElfU1RBUl9UUklHX0NPTlRST0xMRVIgKDE0MTMpDQorDQorLyotIEJhY2t3YXJkIENvbXBhdGliaWxpdHkgTWFjcm9zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKyNkZWZpbmUgdmlHZXREZWZhdWx0Uk0odmkpICAgICAgICAgIHZpT3BlbkRlZmF1bHRSTSh2aSkNCisjZGVmaW5lIFZJX0VSUk9SX0lOVl9TRVNTSU9OICAgICAgICAoVklfRVJST1JfSU5WX09CSkVDVCkNCisjZGVmaW5lIFZJX0lORklOSVRFICAgICAgICAgICAgICAgICAoVklfVE1PX0lORklOSVRFKQ0KKyNkZWZpbmUgVklfTk9STUFMICAgICAgICAgICAgICAgICAgIChWSV9QUk9UX05PUk1BTCkNCisjZGVmaW5lIFZJX0ZEQyAgICAgICAgICAgICAgICAgICAgICAoVklfUFJPVF9GREMpDQorI2RlZmluZSBWSV9IUzQ4OCAgICAgICAgICAgICAgICAgICAgKFZJX1BST1RfSFM0ODgpDQorI2RlZmluZSBWSV9BU1JMNDg4ICAgICAgICAgICAgICAgICAgKFZJX1BST1RfNDg4Ml9TVFJTKQ0KKyNkZWZpbmUgVklfQVNSTF9JTl9CVUYgICAgICAgICAgICAgIChWSV9JT19JTl9CVUYpDQorI2RlZmluZSBWSV9BU1JMX09VVF9CVUYgICAgICAgICAgICAgKFZJX0lPX09VVF9CVUYpDQorI2RlZmluZSBWSV9BU1JMX0lOX0JVRl9ESVNDQVJEICAgICAgKFZJX0lPX0lOX0JVRl9ESVNDQVJEKQ0KKyNkZWZpbmUgVklfQVNSTF9PVVRfQlVGX0RJU0NBUkQgICAgIChWSV9JT19PVVRfQlVGX0RJU0NBUkQpDQorDQorLyotIE5hdGlvbmFsIEluc3RydW1lbnRzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKyNkZWZpbmUgVklfSU5URl9SSU8gICAgICAgICAgICAgICAgICg4KQ0KKyNkZWZpbmUgVklfSU5URl9GSVJFV0lSRSAgICAgICAgICAgICg5KSANCisNCisjZGVmaW5lIFZJX0FUVFJfU1lOQ19NWElfQUxMT1dfRU4gICAoMHgzRkZGMDE2MVVMKSAvKiBWaUJvb2xlYW4sIHJlYWQvd3JpdGUgKi8NCisNCisvKiBUaGlzIGlzIGZvciBWWEkgU0VSVkFOVCByZXNvdXJjZXMgKi8NCisNCisjZGVmaW5lIFZJX0VWRU5UX1ZYSV9ERVZfQ01EICAgICAgICAoMHhCRkZGMjAwRlVMKQ0KKyNkZWZpbmUgVklfQVRUUl9WWElfREVWX0NNRF9UWVBFICAgICgweDNGRkY0MDM3VUwpIC8qIFZpSW50MTYsIHJlYWQtb25seSAqLw0KKyNkZWZpbmUgVklfQVRUUl9WWElfREVWX0NNRF9WQUxVRSAgICgweDNGRkY0MDM4VUwpIC8qIFZpVUludDMyLCByZWFkLW9ubHkgKi8NCisNCisjZGVmaW5lIFZJX1ZYSV9ERVZfQ01EX1RZUEVfMTYgICAgICAoMTYpDQorI2RlZmluZSBWSV9WWElfREVWX0NNRF9UWVBFXzMyICAgICAgKDMyKQ0KKw0KK1ZpU3RhdHVzIF9WSV9GVU5DIHZpVnhpU2VydmFudFJlc3BvbnNlKFZpU2Vzc2lvbiB2aSwgVmlJbnQxNiBtb2RlLCBWaVVJbnQzMiByZXNwKTsNCisvKiBtb2RlIHZhbHVlcyBpbmNsdWRlIFZJX1ZYSV9SRVNQMTYsIFZJX1ZYSV9SRVNQMzIsIGFuZCB0aGUgbmV4dCAyIHZhbHVlcyAqLw0KKyNkZWZpbmUgVklfVlhJX1JFU1BfTk9ORSAgICAgICAgICAgICgwKQ0KKyNkZWZpbmUgVklfVlhJX1JFU1BfUFJPVF9FUlJPUiAgICAgICgtMSkNCisNCisvKiBUaGlzIGFsbG93cyBleHRlbmRlZCBTZXJpYWwgc3VwcG9ydCBvbiBXaW4zMiBhbmQgb24gTkkgRU5FVCBTZXJpYWwgcHJvZHVjdHMgKi8NCisNCisjZGVmaW5lIFZJX0FUVFJfQVNSTF9ESVNDQVJEX05VTEwgICAoMHgzRkZGMDBCMFVMKQ0KKyNkZWZpbmUgVklfQVRUUl9BU1JMX0NPTk5FQ1RFRCAgICAgICgweDNGRkYwMUJCVUwpDQorI2RlZmluZSBWSV9BVFRSX0FTUkxfQlJFQUtfU1RBVEUgICAgKDB4M0ZGRjAxQkNVTCkNCisjZGVmaW5lIFZJX0FUVFJfQVNSTF9CUkVBS19MRU4gICAgICAoMHgzRkZGMDFCRFVMKQ0KKyNkZWZpbmUgVklfQVRUUl9BU1JMX0FMTE9XX1RSQU5TTUlUICgweDNGRkYwMUJFVUwpDQorI2RlZmluZSBWSV9BVFRSX0FTUkxfV0lSRV9NT0RFICAgICAgKDB4M0ZGRjAxQkZVTCkNCisNCisjZGVmaW5lIFZJX0FTUkxfV0lSRV80ODVfNCAgICAgICAgICAoMCkNCisjZGVmaW5lIFZJX0FTUkxfV0lSRV80ODVfMl9EVFJfRUNITyAoMSkNCisjZGVmaW5lIFZJX0FTUkxfV0lSRV80ODVfMl9EVFJfQ1RSTCAoMikNCisjZGVmaW5lIFZJX0FTUkxfV0lSRV80ODVfMl9BVVRPICAgICAoMykNCisjZGVmaW5lIFZJX0FTUkxfV0lSRV8yMzJfRFRFICAgICAgICAoMTI4KQ0KKyNkZWZpbmUgVklfQVNSTF9XSVJFXzIzMl9EQ0UgICAgICAgICgxMjkpDQorI2RlZmluZSBWSV9BU1JMX1dJUkVfMjMyX0FVVE8gICAgICAgKDEzMCkNCisNCisjZGVmaW5lIFZJX0VWRU5UX0FTUkxfQlJFQUsgICAgICAgICAoMHgzRkZGMjAyM1VMKQ0KKyNkZWZpbmUgVklfRVZFTlRfQVNSTF9DVFMgICAgICAgICAgICgweDNGRkYyMDI5VUwpDQorI2RlZmluZSBWSV9FVkVOVF9BU1JMX0RTUiAgICAgICAgICAgKDB4M0ZGRjIwMkFVTCkNCisjZGVmaW5lIFZJX0VWRU5UX0FTUkxfRENEICAgICAgICAgICAoMHgzRkZGMjAyQ1VMKQ0KKyNkZWZpbmUgVklfRVZFTlRfQVNSTF9SSSAgICAgICAgICAgICgweDNGRkYyMDJFVUwpDQorI2RlZmluZSBWSV9FVkVOVF9BU1JMX0NIQVIgICAgICAgICAgKDB4M0ZGRjIwMzVVTCkNCisjZGVmaW5lIFZJX0VWRU5UX0FTUkxfVEVSTUNIQVIgICAgICAoMHgzRkZGMjAyNFVMKQ0KKw0KKy8qIFRoaXMgaXMgZm9yIGZhc3QgdmlQZWVrL3ZpUG9rZSBtYWNyb3MgKi8NCisNCisjaWYgZGVmaW5lZChOSVZJU0FfUEVFS1BPS0UpDQorDQorI2lmIGRlZmluZWQoTklWSVNBX1BFRUtQT0tFX1NVUFApDQorI3VuZGVmIE5JVklTQV9QRUVLUE9LRV9TVVBQDQorI2VuZGlmDQorDQorI2lmIChkZWZpbmVkKFdJTjMyKSB8fCBkZWZpbmVkKF9XSU4zMikgfHwgZGVmaW5lZChfX1dJTjMyX18pIHx8IGRlZmluZWQoX19OVF9fKSkgJiYgIWRlZmluZWQoX05JX21zd2luMTZfKQ0KKy8qIFRoaXMgbWFjcm8gaXMgc3VwcG9ydGVkIGZvciBhbGwgV2luMzIgY29tcGlsZXJzLCBpbmNsdWRpbmcgQ1ZJLiAqLw0KKyNkZWZpbmUgTklWSVNBX1BFRUtQT0tFX1NVUFANCisjZWxpZiAoZGVmaW5lZChfV0lORE9XUykgfHwgZGVmaW5lZChfV2luZG93cykpICYmICFkZWZpbmVkKF9DVklfKSAmJiAhZGVmaW5lZChfTklfbXN3aW4xNl8pDQorLyogVGhpcyBtYWNybyBpcyBzdXBwb3J0ZWQgZm9yIEJvcmxhbmQgYW5kIE1pY3Jvc29mdCBjb21waWxlcnMgb24gV2luMTYsIGJ1dCBub3QgQ1ZJLiAqLw0KKyNkZWZpbmUgTklWSVNBX1BFRUtQT0tFX1NVUFANCisjZWxpZiBkZWZpbmVkKF9DVklfKSAmJiBkZWZpbmVkKF9OSV9zcGFyY18pDQorLyogVGhpcyBtYWNybyBpcyBzdXBwb3J0ZWQgZm9yIFNvbGFyaXMgMSBhbmQgMiwgZnJvbSBDVkkgb25seS4gKi8NCisjZGVmaW5lIE5JVklTQV9QRUVLUE9LRV9TVVBQDQorI2Vsc2UNCisvKiBUaGlzIG1hY3JvIGlzIG5vdCBzdXBwb3J0ZWQgb24gb3RoZXIgcGxhdGZvcm1zLiAqLw0KKyNlbmRpZg0KKw0KKyNpZiBkZWZpbmVkKE5JVklTQV9QRUVLUE9LRV9TVVBQKQ0KKw0KK2V4dGVybiBWaUJvb2xlYW4gTklfdmlJbXBsVklTQTE7DQorVmlTdGF0dXMgX1ZJX0ZVTkMgTklfdmlPcGVuRGVmYXVsdFJNIChWaVBTZXNzaW9uIHZpKTsNCisjZGVmaW5lIHZpT3BlbkRlZmF1bHRSTSh2aSkgTklfdmlPcGVuRGVmYXVsdFJNKHZpKQ0KKw0KKyNkZWZpbmUgdmlQZWVrOCh2aSxhZGRyLHZhbCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQorICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCisgICAgICBpZiAoKE5JX3ZpSW1wbFZJU0ExKSAmJiAoKigoVmlQVUludDMyKSh2aSkpKSkgICAgICAgICAgICAgICAgICAgICAgICAgXA0KKyAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQorICAgICAgICAgZG8gKCooKFZpUFVJbnQ4KSh2YWwpKSA9ICooKHZvbGF0aWxlIFZpVUludDggX1ZJX1BUUikoYWRkcikpKTsgICAgIFwNCisgICAgICAgICB3aGlsZSAoKiooKHZvbGF0aWxlIFZpVUludDggX1ZJX1BUUiBfVklfUFRSKSh2aSkpICYgMHgxMCk7ICAgICAgICAgXA0KKyAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQorICAgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCisgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KKyAgICAgICAgICh2aVBlZWs4KSgodmkpLChhZGRyKSwodmFsKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQorICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCisgICB9DQorDQorI2RlZmluZSB2aVBva2U4KHZpLGFkZHIsdmFsKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCisgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KKyAgICAgIGlmICgoTklfdmlJbXBsVklTQTEpICYmICgqKChWaVBVSW50MzIpKHZpKSkpKSAgICAgICAgICAgICAgICAgICAgICAgICBcDQorICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCisgICAgICAgICBkbyAoKigodm9sYXRpbGUgVmlVSW50OCBfVklfUFRSKShhZGRyKSkgPSAoKFZpVUludDgpKHZhbCkpKTsgICAgICAgXA0KKyAgICAgICAgIHdoaWxlICgqKigodm9sYXRpbGUgVmlVSW50OCBfVklfUFRSIF9WSV9QVFIpKHZpKSkgJiAweDEwKTsgICAgICAgICBcDQorICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCisgICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KKyAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQorICAgICAgICAgKHZpUG9rZTgpKCh2aSksKGFkZHIpLCh2YWwpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCisgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KKyAgIH0NCisNCisjZGVmaW5lIHZpUGVlazE2KHZpLGFkZHIsdmFsKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KKyAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQorICAgICAgaWYgKChOSV92aUltcGxWSVNBMSkgJiYgKCooKFZpUFVJbnQzMikodmkpKSkpICAgICAgICAgICAgICAgICAgICAgICAgIFwNCisgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KKyAgICAgICAgIGRvICgqKChWaVBVSW50MTYpKHZhbCkpID0gKigodm9sYXRpbGUgVmlVSW50MTYgX1ZJX1BUUikoYWRkcikpKTsgICBcDQorICAgICAgICAgd2hpbGUgKCoqKCh2b2xhdGlsZSBWaVVJbnQ4IF9WSV9QVFIgX1ZJX1BUUikodmkpKSAmIDB4MTApOyAgICAgICAgIFwNCisgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KKyAgICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQorICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCisgICAgICAgICAodmlQZWVrMTYpKCh2aSksKGFkZHIpLCh2YWwpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KKyAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQorICAgfQ0KKw0KKyNkZWZpbmUgdmlQb2tlMTYodmksYWRkcix2YWwpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQorICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCisgICAgICBpZiAoKE5JX3ZpSW1wbFZJU0ExKSAmJiAoKigoVmlQVUludDMyKSh2aSkpKSkgICAgICAgICAgICAgICAgICAgICAgICAgXA0KKyAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQorICAgICAgICAgZG8gKCooKHZvbGF0aWxlIFZpVUludDE2IF9WSV9QVFIpKGFkZHIpKSA9ICgoVmlVSW50MTYpKHZhbCkpKTsgICAgIFwNCisgICAgICAgICB3aGlsZSAoKiooKHZvbGF0aWxlIFZpVUludDggX1ZJX1BUUiBfVklfUFRSKSh2aSkpICYgMHgxMCk7ICAgICAgICAgXA0KKyAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQorICAgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCisgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KKyAgICAgICAgICh2aVBva2UxNikoKHZpKSwoYWRkciksKHZhbCkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQorICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCisgICB9DQorDQorI2RlZmluZSB2aVBlZWszMih2aSxhZGRyLHZhbCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCisgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KKyAgICAgIGlmICgoTklfdmlJbXBsVklTQTEpICYmICgqKChWaVBVSW50MzIpKHZpKSkpKSAgICAgICAgICAgICAgICAgICAgICAgICBcDQorICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCisgICAgICAgICBkbyAoKigoVmlQVUludDMyKSh2YWwpKSA9ICooKHZvbGF0aWxlIFZpVUludDMyIF9WSV9QVFIpKGFkZHIpKSk7ICAgXA0KKyAgICAgICAgIHdoaWxlICgqKigodm9sYXRpbGUgVmlVSW50OCBfVklfUFRSIF9WSV9QVFIpKHZpKSkgJiAweDEwKTsgICAgICAgICBcDQorICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCisgICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KKyAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQorICAgICAgICAgKHZpUGVlazMyKSgodmkpLChhZGRyKSwodmFsKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCisgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KKyAgIH0NCisNCisjZGVmaW5lIHZpUG9rZTMyKHZpLGFkZHIsdmFsKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KKyAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQorICAgICAgaWYgKChOSV92aUltcGxWSVNBMSkgJiYgKCooKFZpUFVJbnQzMikodmkpKSkpICAgICAgICAgICAgICAgICAgICAgICAgIFwNCisgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KKyAgICAgICAgIGRvICgqKCh2b2xhdGlsZSBWaVVJbnQzMiBfVklfUFRSKShhZGRyKSkgPSAoKFZpVUludDMyKSh2YWwpKSk7ICAgICBcDQorICAgICAgICAgd2hpbGUgKCoqKCh2b2xhdGlsZSBWaVVJbnQ4IF9WSV9QVFIgX1ZJX1BUUikodmkpKSAmIDB4MTApOyAgICAgICAgIFwNCisgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KKyAgICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQorICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCisgICAgICAgICAodmlQb2tlMzIpKCh2aSksKGFkZHIpLCh2YWwpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KKyAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQorICAgfQ0KKw0KKyNlbmRpZg0KKw0KKyNlbmRpZg0KKw0KKyNpZiBkZWZpbmVkKE5JVklTQV9QWEkpIHx8IGRlZmluZWQoUFhJU0FWSVNBX1BYSSkNCisNCisjaWYgMA0KKy8qIFRoZSBmb2xsb3dpbmcgMiBhdHRyaWJ1dGVzIHdlcmUgaW5jb3JyZWN0bHkgaW1wbGVtZW50ZWQgaW4gZWFybGllcg0KKyAgIHZlcnNpb25zIG9mIE5JLVZJU0EuICBZb3Ugc2hvdWxkIG5vdyBxdWVyeSBWSV9BVFRSX01BTkZfSUQgb3INCisgICBWSV9BVFRSX01PREVMX0NPREUuICBUaG9zZSBhdHRyaWJ1dGVzIGNvbnRhaW4gc3ViLXZlbmRvciBpbmZvcm1hdGlvbg0KKyAgIHdoZW4gaXQgZXhpc3RzLiAgVG8gZ2V0IGJvdGggdGhlIGFjdHVhbCBwcmltYXJ5IGFuZCBzdWJ2ZW5kb3IgY29kZXMNCisgICBmcm9tIHRoZSBkZXZpY2UsIHlvdSBzaG91bGQgY2FsbCB2aUluMTYgdXNpbmcgVklfUFhJX0NGR19TUEFDRS4gKi8NCisjZGVmaW5lIFZJX0FUVFJfUFhJX1NVQl9NQU5GX0lEICAgICAoMHgzRkZGMDIwM1VMKQ0KKyNkZWZpbmUgVklfQVRUUl9QWElfU1VCX01PREVMX0NPREUgICgweDNGRkYwMjA0VUwpDQorI2VuZGlmDQorDQorI2RlZmluZSBWSV9BVFRSX1BYSV9TUkNfVFJJR19CVVMgICAgKDB4M0ZGRjAyMERVTCkNCisjZGVmaW5lIFZJX0FUVFJfUFhJX0RFU1RfVFJJR19CVVMgICAoMHgzRkZGMDIwRVVMKQ0KKw0KKyNkZWZpbmUgVklfQVRUUl9QWElfUkVDVl9JTlRSX1NFUSAgICgweDNGRkY0MjQwVUwpDQorI2RlZmluZSBWSV9BVFRSX1BYSV9SRUNWX0lOVFJfREFUQSAgKDB4M0ZGRjQyNDFVTCkNCisNCisjZW5kaWYNCisNCisjaWYgZGVmaW5lZChOSVZJU0FfVVNCKQ0KKw0KKyNkZWZpbmUgVklfQVRUUl9VU0JfQlVMS19PVVRfUElQRSAgICgweDNGRkYwMUEyVUwpDQorI2RlZmluZSBWSV9BVFRSX1VTQl9CVUxLX0lOX1BJUEUgICAgKDB4M0ZGRjAxQTNVTCkNCisjZGVmaW5lIFZJX0FUVFJfVVNCX0lOVFJfSU5fUElQRSAgICAoMHgzRkZGMDFBNFVMKQ0KKyNkZWZpbmUgVklfQVRUUl9VU0JfQ0xBU1MgICAgICAgICAgICgweDNGRkYwMUE1VUwpDQorI2RlZmluZSBWSV9BVFRSX1VTQl9TVUJDTEFTUyAgICAgICAgKDB4M0ZGRjAxQTZVTCkNCisjZGVmaW5lIFZJX0FUVFJfVVNCX0FMVF9TRVRUSU5HICAgICAoMHgzRkZGMDFBOFVMKQ0KKyNkZWZpbmUgVklfQVRUUl9VU0JfRU5EX0lOICAgICAgICAgICgweDNGRkYwMUE5VUwpDQorI2RlZmluZSBWSV9BVFRSX1VTQl9OVU1fSU5URkNTICAgICAgKDB4M0ZGRjAxQUFVTCkNCisjZGVmaW5lIFZJX0FUVFJfVVNCX05VTV9QSVBFUyAgICAgICAoMHgzRkZGMDFBQlVMKQ0KKyNkZWZpbmUgVklfQVRUUl9VU0JfQlVMS19PVVRfU1RBVFVTICgweDNGRkYwMUFDVUwpDQorI2RlZmluZSBWSV9BVFRSX1VTQl9CVUxLX0lOX1NUQVRVUyAgKDB4M0ZGRjAxQURVTCkNCisjZGVmaW5lIFZJX0FUVFJfVVNCX0lOVFJfSU5fU1RBVFVTICAoMHgzRkZGMDFBRVVMKQ0KKyNkZWZpbmUgVklfQVRUUl9VU0JfQ1RSTF9QSVBFICAgICAgICgweDNGRkYwMUIwVUwpDQorDQorI2RlZmluZSBWSV9VU0JfUElQRV9TVEFURV9VTktOT1dOICAgKC0xKQ0KKyNkZWZpbmUgVklfVVNCX1BJUEVfUkVBRFkgICAgICAgICAgICgwKQ0KKyNkZWZpbmUgVklfVVNCX1BJUEVfU1RBTExFRCAgICAgICAgICgxKQ0KKw0KKyNkZWZpbmUgVklfVVNCX0VORF9OT05FICAgICAgICAgICAgICgwKQ0KKyNkZWZpbmUgVklfVVNCX0VORF9TSE9SVCAgICAgICAgICAgICg0KQ0KKyNkZWZpbmUgVklfVVNCX0VORF9TSE9SVF9PUl9DT1VOVCAgICg1KQ0KKw0KKyNlbmRpZg0KKw0KKyNkZWZpbmUgVklfQVRUUl9GSVJFV0lSRV9ERVNUX1VQUEVSX09GRlNFVCAoMHgzRkZGMDFGMFVMKQ0KKyNkZWZpbmUgVklfQVRUUl9GSVJFV0lSRV9TUkNfVVBQRVJfT0ZGU0VUICAoMHgzRkZGMDFGMVVMKQ0KKyNkZWZpbmUgVklfQVRUUl9GSVJFV0lSRV9XSU5fVVBQRVJfT0ZGU0VUICAoMHgzRkZGMDFGMlVMKQ0KKyNkZWZpbmUgVklfQVRUUl9GSVJFV0lSRV9WRU5ET1JfSUQgICAgICAgICAoMHgzRkZGMDFGM1VMKQ0KKyNkZWZpbmUgVklfQVRUUl9GSVJFV0lSRV9MT1dFUl9DSElQX0lEICAgICAoMHgzRkZGMDFGNFVMKQ0KKyNkZWZpbmUgVklfQVRUUl9GSVJFV0lSRV9VUFBFUl9DSElQX0lEICAgICAoMHgzRkZGMDFGNVVMKQ0KKw0KKyNkZWZpbmUgVklfRklSRVdJUkVfREZMVF9TUEFDRSAgICAgICAgICAgKDUpDQorDQorI2lmIGRlZmluZWQoX19jcGx1c3BsdXMpIHx8IGRlZmluZWQoX19jcGx1c3BsdXNfXykNCisgICB9DQorI2VuZGlmDQorDQorI2VuZGlmDQorDQorLyotIFRoZSBFbmQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL3Zpc2EvdmlzYXR5cGUuaCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV1BJTGliL3Zpc2EvdmlzYXR5cGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTFjNjcxCi0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9XUElMaWIvdmlzYS92aXNhdHlwZS5oCkBAIC0wLDAgKzEsMjAxIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQorLyogRGlzdHJpYnV0ZWQgYnkgSVZJIEZvdW5kYXRpb24gSW5jLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisvKiBEbyBub3QgbW9kaWZ5IHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCisvKiBUaXRsZSAgIDogVklTQVRZUEUuSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorLyogRGF0ZSAgICA6IDA0LTE0LTIwMDYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKy8qIFB1cnBvc2UgOiBGdW5kYW1lbnRhbCBWSVNBIGRhdGEgdHlwZXMgYW5kIG1hY3JvIGRlZmluaXRpb25zICAgICAgICAgICAgICAgKi8NCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKyNpZm5kZWYgX19WSVNBVFlQRV9IRUFERVJfXw0KKyNkZWZpbmUgX19WSVNBVFlQRV9IRUFERVJfXw0KKw0KKyNpZiBkZWZpbmVkKF9XSU42NCkNCisjZGVmaW5lIF9WSV9GQVINCisjZGVmaW5lIF9WSV9GVU5DICAgICAgICAgICAgX19mYXN0Y2FsbA0KKyNkZWZpbmUgX1ZJX0ZVTkNDICAgICAgICAgICBfX2Zhc3RjYWxsDQorI2RlZmluZSBfVklfRlVOQ0ggICAgICAgICAgIF9fZmFzdGNhbGwNCisjZGVmaW5lIF9WSV9TSUdORUQgICAgICAgICAgc2lnbmVkDQorI2VsaWYgKGRlZmluZWQoV0lOMzIpIHx8IGRlZmluZWQoX1dJTjMyKSB8fCBkZWZpbmVkKF9fV0lOMzJfXykgfHwgZGVmaW5lZChfX05UX18pKSAmJiAhZGVmaW5lZChfTklfbXN3aW4xNl8pDQorI2RlZmluZSBfVklfRkFSDQorI2RlZmluZSBfVklfRlVOQyAgICAgICAgICAgIF9fc3RkY2FsbA0KKyNkZWZpbmUgX1ZJX0ZVTkNDICAgICAgICAgICBfX2NkZWNsDQorI2RlZmluZSBfVklfRlVOQ0ggICAgICAgICAgIF9fc3RkY2FsbA0KKyNkZWZpbmUgX1ZJX1NJR05FRCAgICAgICAgICBzaWduZWQNCisjZWxpZiBkZWZpbmVkKF9DVklfKSAmJiBkZWZpbmVkKF9OSV9pMzg2XykNCisjZGVmaW5lIF9WSV9GQVINCisjZGVmaW5lIF9WSV9GVU5DICAgICAgICAgICAgX3Bhc2NhbA0KKyNkZWZpbmUgX1ZJX0ZVTkNDDQorI2RlZmluZSBfVklfRlVOQ0ggICAgICAgICAgIF9wYXNjYWwNCisjZGVmaW5lIF9WSV9TSUdORUQgICAgICAgICAgc2lnbmVkDQorI2VsaWYgKGRlZmluZWQoX1dJTkRPV1MpIHx8IGRlZmluZWQoX1dpbmRvd3MpKSAmJiAhZGVmaW5lZChfTklfbXN3aW4xNl8pDQorI2RlZmluZSBfVklfRkFSICAgICAgICAgICAgIF9mYXINCisjZGVmaW5lIF9WSV9GVU5DICAgICAgICAgICAgX2ZhciBfcGFzY2FsIF9leHBvcnQNCisjZGVmaW5lIF9WSV9GVU5DQyAgICAgICAgICAgX2ZhciBfY2RlY2wgIF9leHBvcnQNCisjZGVmaW5lIF9WSV9GVU5DSCAgICAgICAgICAgX2ZhciBfcGFzY2FsDQorI2RlZmluZSBfVklfU0lHTkVEICAgICAgICAgIHNpZ25lZA0KKyNlbGlmIChkZWZpbmVkKGhwdXgpIHx8IGRlZmluZWQoX19ocHV4KSkgJiYgKGRlZmluZWQoX19jcGx1c3BsdXMpIHx8IGRlZmluZWQoX19jcGx1c3BsdXNfXykpDQorI2RlZmluZSBfVklfRkFSDQorI2RlZmluZSBfVklfRlVOQw0KKyNkZWZpbmUgX1ZJX0ZVTkNDDQorI2RlZmluZSBfVklfRlVOQ0gNCisjZGVmaW5lIF9WSV9TSUdORUQNCisjZWxzZQ0KKyNkZWZpbmUgX1ZJX0ZBUg0KKyNkZWZpbmUgX1ZJX0ZVTkMNCisjZGVmaW5lIF9WSV9GVU5DQw0KKyNkZWZpbmUgX1ZJX0ZVTkNIDQorI2RlZmluZSBfVklfU0lHTkVEICAgICAgICAgIHNpZ25lZA0KKyNlbmRpZg0KKw0KKyNkZWZpbmUgX1ZJX0VSUk9SICAgICAgICAgICAoLTIxNDc0ODM2NDdMLTEpICAvKiAweDgwMDAwMDAwICovDQorI2RlZmluZSBfVklfUFRSICAgICAgICAgICAgIF9WSV9GQVIgKg0KKw0KKy8qLSBWSVNBIFR5cGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisjaWZuZGVmIF9WSV9JTlQ2NF9VSU5UNjRfREVGSU5FRA0KKyNpZiBkZWZpbmVkKF9XSU42NCkgfHwgKChkZWZpbmVkKFdJTjMyKSB8fCBkZWZpbmVkKF9XSU4zMikgfHwgZGVmaW5lZChfX1dJTjMyX18pIHx8IGRlZmluZWQoX19OVF9fKSkgJiYgIWRlZmluZWQoX05JX21zd2luMTZfKSkNCisjaWYgKGRlZmluZWQoX01TQ19WRVIpICYmIChfTVNDX1ZFUiA+PSAxMjAwKSkgfHwgKGRlZmluZWQoX0NWSV8pICYmIChfQ1ZJXyA+PSA3MDApKSB8fCAoZGVmaW5lZChfX0JPUkxBTkRDX18pICYmIChfX0JPUkxBTkRDX18gPj0gMHgwNTIwKSkNCit0eXBlZGVmIHVuc2lnbmVkICAgX19pbnQ2NCAgVmlVSW50NjQ7DQordHlwZWRlZiBfVklfU0lHTkVEIF9faW50NjQgIFZpSW50NjQ7DQorI2RlZmluZSBfVklfSU5UNjRfVUlOVDY0X0RFRklORUQNCisjaWYgZGVmaW5lZChfV0lONjQpDQorI2RlZmluZSBfVklTQV9FTlZfSVNfNjRfQklUDQorI2Vsc2UNCisvKiBUaGlzIGlzIGEgMzItYml0IE9TLCBub3QgYSA2NC1iaXQgT1MgKi8NCisjZW5kaWYNCisjZW5kaWYNCisjZWxpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAoX19HTlVDX18gPj0gMykNCisjaW5jbHVkZSA8bGltaXRzLmg+DQorI2luY2x1ZGUgPHN5cy90eXBlcy5oPg0KK3R5cGVkZWYgdV9pbnQ2NF90ICAgICAgICAgICBWaVVJbnQ2NDsNCit0eXBlZGVmIGludDY0X3QgICAgICAgICAgICAgVmlJbnQ2NDsNCisjZGVmaW5lIF9WSV9JTlQ2NF9VSU5UNjRfREVGSU5FRA0KKyNpZiBkZWZpbmVkKExPTkdfTUFYKSAmJiAoTE9OR19NQVggPiAweDdGRkZGRkZGTCkNCisjZGVmaW5lIF9WSVNBX0VOVl9JU182NF9CSVQNCisjZWxzZQ0KKy8qIFRoaXMgaXMgYSAzMi1iaXQgT1MsIG5vdCBhIDY0LWJpdCBPUyAqLw0KKyNlbmRpZg0KKyNlbHNlDQorLyogVGhpcyBwbGF0Zm9ybSBkb2VzIG5vdCBzdXBwb3J0IDY0LWJpdCB0eXBlcyAqLw0KKyNlbmRpZg0KKyNlbmRpZg0KKw0KKyNpZiBkZWZpbmVkKF9WSV9JTlQ2NF9VSU5UNjRfREVGSU5FRCkNCit0eXBlZGVmIFZpVUludDY0ICAgIF9WSV9QVFIgVmlQVUludDY0Ow0KK3R5cGVkZWYgVmlVSW50NjQgICAgX1ZJX1BUUiBWaUFVSW50NjQ7DQordHlwZWRlZiBWaUludDY0ICAgICBfVklfUFRSIFZpUEludDY0Ow0KK3R5cGVkZWYgVmlJbnQ2NCAgICAgX1ZJX1BUUiBWaUFJbnQ2NDsNCisjZW5kaWYNCisNCisjaWYgZGVmaW5lZChMT05HX01BWCkgJiYgKExPTkdfTUFYID4gMHg3RkZGRkZGRkwpDQordHlwZWRlZiB1bnNpZ25lZCBpbnQgICAgICAgIFZpVUludDMyOw0KK3R5cGVkZWYgX1ZJX1NJR05FRCBpbnQgICAgICBWaUludDMyOw0KKyNlbHNlDQordHlwZWRlZiB1bnNpZ25lZCBsb25nICAgICAgIFZpVUludDMyOw0KK3R5cGVkZWYgX1ZJX1NJR05FRCBsb25nICAgICBWaUludDMyOw0KKyNlbmRpZg0KKw0KK3R5cGVkZWYgVmlVSW50MzIgICAgX1ZJX1BUUiBWaVBVSW50MzI7DQordHlwZWRlZiBWaVVJbnQzMiAgICBfVklfUFRSIFZpQVVJbnQzMjsNCit0eXBlZGVmIFZpSW50MzIgICAgIF9WSV9QVFIgVmlQSW50MzI7DQordHlwZWRlZiBWaUludDMyICAgICBfVklfUFRSIFZpQUludDMyOw0KKw0KK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgICAgICBWaVVJbnQxNjsNCit0eXBlZGVmIFZpVUludDE2ICAgIF9WSV9QVFIgVmlQVUludDE2Ow0KK3R5cGVkZWYgVmlVSW50MTYgICAgX1ZJX1BUUiBWaUFVSW50MTY7DQorDQordHlwZWRlZiBfVklfU0lHTkVEIHNob3J0ICAgIFZpSW50MTY7DQordHlwZWRlZiBWaUludDE2ICAgICBfVklfUFRSIFZpUEludDE2Ow0KK3R5cGVkZWYgVmlJbnQxNiAgICAgX1ZJX1BUUiBWaUFJbnQxNjsNCisNCit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgICAgICAgVmlVSW50ODsNCit0eXBlZGVmIFZpVUludDggICAgIF9WSV9QVFIgVmlQVUludDg7DQordHlwZWRlZiBWaVVJbnQ4ICAgICBfVklfUFRSIFZpQVVJbnQ4Ow0KKw0KK3R5cGVkZWYgX1ZJX1NJR05FRCBjaGFyICAgICBWaUludDg7DQordHlwZWRlZiBWaUludDggICAgICBfVklfUFRSIFZpUEludDg7DQordHlwZWRlZiBWaUludDggICAgICBfVklfUFRSIFZpQUludDg7DQorDQordHlwZWRlZiBjaGFyICAgICAgICAgICAgICAgIFZpQ2hhcjsNCit0eXBlZGVmIFZpQ2hhciAgICAgIF9WSV9QVFIgVmlQQ2hhcjsNCit0eXBlZGVmIFZpQ2hhciAgICAgIF9WSV9QVFIgVmlBQ2hhcjsNCisNCit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgICAgICAgVmlCeXRlOw0KK3R5cGVkZWYgVmlCeXRlICAgICAgX1ZJX1BUUiBWaVBCeXRlOw0KK3R5cGVkZWYgVmlCeXRlICAgICAgX1ZJX1BUUiBWaUFCeXRlOw0KKw0KK3R5cGVkZWYgdm9pZCAgICAgICAgX1ZJX1BUUiBWaUFkZHI7DQordHlwZWRlZiBWaUFkZHIgICAgICBfVklfUFRSIFZpUEFkZHI7DQordHlwZWRlZiBWaUFkZHIgICAgICBfVklfUFRSIFZpQUFkZHI7DQorDQordHlwZWRlZiBmbG9hdCAgICAgICAgICAgICAgIFZpUmVhbDMyOw0KK3R5cGVkZWYgVmlSZWFsMzIgICAgX1ZJX1BUUiBWaVBSZWFsMzI7DQordHlwZWRlZiBWaVJlYWwzMiAgICBfVklfUFRSIFZpQVJlYWwzMjsNCisNCit0eXBlZGVmIGRvdWJsZSAgICAgICAgICAgICAgVmlSZWFsNjQ7DQordHlwZWRlZiBWaVJlYWw2NCAgICBfVklfUFRSIFZpUFJlYWw2NDsNCit0eXBlZGVmIFZpUmVhbDY0ICAgIF9WSV9QVFIgVmlBUmVhbDY0Ow0KKw0KK3R5cGVkZWYgVmlQQnl0ZSAgICAgICAgICAgICBWaUJ1ZjsNCit0eXBlZGVmIFZpUEJ5dGUgICAgICAgICAgICAgVmlQQnVmOw0KK3R5cGVkZWYgVmlQQnl0ZSAgICAgX1ZJX1BUUiBWaUFCdWY7DQorDQordHlwZWRlZiBWaVBDaGFyICAgICAgICAgICAgIFZpU3RyaW5nOw0KK3R5cGVkZWYgVmlQQ2hhciAgICAgICAgICAgICBWaVBTdHJpbmc7DQordHlwZWRlZiBWaVBDaGFyICAgICBfVklfUFRSIFZpQVN0cmluZzsNCisNCit0eXBlZGVmIFZpU3RyaW5nICAgICAgICAgICAgVmlSc3JjOw0KK3R5cGVkZWYgVmlTdHJpbmcgICAgICAgICAgICBWaVBSc3JjOw0KK3R5cGVkZWYgVmlTdHJpbmcgICAgX1ZJX1BUUiBWaUFSc3JjOw0KKw0KK3R5cGVkZWYgVmlVSW50MTYgICAgICAgICAgICBWaUJvb2xlYW47DQordHlwZWRlZiBWaUJvb2xlYW4gICBfVklfUFRSIFZpUEJvb2xlYW47DQordHlwZWRlZiBWaUJvb2xlYW4gICBfVklfUFRSIFZpQUJvb2xlYW47DQorDQordHlwZWRlZiBWaUludDMyICAgICAgICAgICAgIFZpU3RhdHVzOw0KK3R5cGVkZWYgVmlTdGF0dXMgICAgX1ZJX1BUUiBWaVBTdGF0dXM7DQordHlwZWRlZiBWaVN0YXR1cyAgICBfVklfUFRSIFZpQVN0YXR1czsNCisNCit0eXBlZGVmIFZpVUludDMyICAgICAgICAgICAgVmlWZXJzaW9uOw0KK3R5cGVkZWYgVmlWZXJzaW9uICAgX1ZJX1BUUiBWaVBWZXJzaW9uOw0KK3R5cGVkZWYgVmlWZXJzaW9uICAgX1ZJX1BUUiBWaUFWZXJzaW9uOw0KKw0KK3R5cGVkZWYgVmlVSW50MzIgICAgICAgICAgICBWaU9iamVjdDsNCit0eXBlZGVmIFZpT2JqZWN0ICAgIF9WSV9QVFIgVmlQT2JqZWN0Ow0KK3R5cGVkZWYgVmlPYmplY3QgICAgX1ZJX1BUUiBWaUFPYmplY3Q7DQorDQordHlwZWRlZiBWaU9iamVjdCAgICAgICAgICAgIFZpU2Vzc2lvbjsNCit0eXBlZGVmIFZpU2Vzc2lvbiAgIF9WSV9QVFIgVmlQU2Vzc2lvbjsNCit0eXBlZGVmIFZpU2Vzc2lvbiAgIF9WSV9QVFIgVmlBU2Vzc2lvbjsNCisNCit0eXBlZGVmIFZpVUludDMyICAgICAgICAgICAgIFZpQXR0cjsNCisNCisjaWZuZGVmIF9WSV9DT05TVF9TVFJJTkdfREVGSU5FRA0KK3R5cGVkZWYgY29uc3QgVmlDaGFyICogVmlDb25zdFN0cmluZzsNCisjZGVmaW5lIF9WSV9DT05TVF9TVFJJTkdfREVGSU5FRA0KKyNlbmRpZiAgDQorDQorLyotIENvbXBsZXRpb24gYW5kIEVycm9yIENvZGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKyNkZWZpbmUgVklfU1VDQ0VTUyAgICAgICAgICAoMEwpDQorDQorLyotIE90aGVyIFZJU0EgRGVmaW5pdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KKw0KKyNkZWZpbmUgVklfTlVMTCAgICAgICAgICAgICAoMCkNCisNCisjZGVmaW5lIFZJX1RSVUUgICAgICAgICAgICAgKDEpDQorI2RlZmluZSBWSV9GQUxTRSAgICAgICAgICAgICgwKQ0KKw0KKy8qLSBCYWNrd2FyZCBDb21wYXRpYmlsaXR5IE1hY3JvcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCisjZGVmaW5lIFZJU0FGTiAgICAgICAgICAgICAgX1ZJX0ZVTkMNCisjZGVmaW5lIFZpUHRyICAgICAgICAgICAgICAgX1ZJX1BUUg0KKw0KKyNlbmRpZg0KKw0KKy8qLSBUaGUgRW5kIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCisNCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS8ucHJvamVjdCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlLy5wcm9qZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwNzg0ODIKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS8ucHJvamVjdApAQCAtMCwwICsxLDExIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KKzxwcm9qZWN0RGVzY3JpcHRpb24+DQorCTxuYW1lPldvcmtiZW5jaFVwZGF0ZTwvbmFtZT4NCisJPGNvbW1lbnQ+PC9jb21tZW50Pg0KKwk8cHJvamVjdHM+DQorCTwvcHJvamVjdHM+DQorCTxidWlsZFNwZWM+DQorCTwvYnVpbGRTcGVjPg0KKwk8bmF0dXJlcz4NCisJPC9uYXR1cmVzPg0KKzwvcHJvamVjdERlc2NyaXB0aW9uPg0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL0ZSQ18yMDEzX3Y0Ni56aXAgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS9GUkNfMjAxM192NDYuemlwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0OWY3YWYKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS9GUkNfMjAxM192NDYuemlwCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL0ZSQ18yMDEzX3Y0Ny56aXAgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS9GUkNfMjAxM192NDcuemlwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjMzg2NDQKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS9GUkNfMjAxM192NDcuemlwCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL01vdmVUb1dvcmtzcGFjZS5jbWQgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS9Nb3ZlVG9Xb3Jrc3BhY2UuY21kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzMGU4MTkKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS9Nb3ZlVG9Xb3Jrc3BhY2UuY21kCkBAIC0wLDAgKzEsMTcgQEAKK3JtZGlyIC9zIC9xIGM6XFdpbmRSaXZlclx3b3Jrc3BhY2VcV1BJTGliDQorcm1kaXIgL3MgL3EgYzpcV2luZFJpdmVyXHdvcmtzcGFjZVxXb3JrYmVuY2hVcGRhdGUNCitybWRpciAvcyAvcSBjOlxXaW5kUml2ZXJcd29ya3NwYWNlXFVuaXRUZXN0UHJvamVjdA0KK3hjb3B5IFdQSUxpYiBjOlxXaW5kUml2ZXJcd29ya3NwYWNlXFdQSUxpYiAvcyAveSAvaQ0KK3hjb3B5IFdvcmtiZW5jaFVwZGF0ZSBjOlxXaW5kUml2ZXJcd29ya3NwYWNlXFdvcmtiZW5jaFVwZGF0ZSAvcyAveSAvaQ0KK3hjb3B5IFVuaXRUZXN0UHJvamVjdCBjOlxXaW5kUml2ZXJcd29ya3NwYWNlXFVuaXRUZXN0UHJvamVjdCAvcyAveSAvaQ0KKw0KK3B1c2hkIGM6XFdpbmRSaXZlclx3b3Jrc3BhY2VcV1BJTGliXFBQQzYwM2dudQ0KK0M6XFdpbmRSaXZlclx3cmVudi5leGUgLXAgdnh3b3Jrcy02LjMgbWFrZSAtLW5vLXByaW50LWRpcmVjdG9yeSBCVUlMRF9TUEVDPVBQQzYwM2dudSBERUJVR19NT0RFPTEgVFJBQ0U9MSBjbGVhbiBhbGwNCitjZCAuLlxzY3JpcHRzDQorcGF1c2UNCitjbWQgL2MgdXBkYXRlQnVpbHRJbkxpYnJhcnkuY21kIA0KK3BvcGQNCisNCitwdXNoZCBjOlxXaW5kUml2ZXJcd29ya3NwYWNlXFVuaXRUZXN0UHJvamVjdA0KK0M6XFdpbmRSaXZlclx3cmVudi5leGUgLXAgdnh3b3Jrcy02LjMgbWFrZSAtLW5vLXByaW50LWRpcmVjdG9yeSBCVUlMRF9TUEVDPVBQQzYwM2dudSBERUJVR19NT0RFPTEgVFJBQ0U9MSBjbGVhbiBhbGwNCitwb3BkDQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvV1BJTGliL0JTRF9MaWNlbnNlX2Zvcl9XUElMaWJfY29kZS50eHQgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS9XUElMaWIvQlNEX0xpY2Vuc2VfZm9yX1dQSUxpYl9jb2RlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mN2VlMzUwCi0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvV1BJTGliL0JTRF9MaWNlbnNlX2Zvcl9XUElMaWJfY29kZS50eHQKQEAgLTAsMCArMSwyNCBAQAorKiBDb3B5cmlnaHQgKGMpIDIwMDkgRklSU1QNCisqIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQorKg0KKyogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0DQorKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoNCisqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0DQorKiAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQorKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodA0KKyogICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQ0KKyogICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4NCisqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIEZJUlNUIG5vciB0aGUNCisqICAgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzDQorKiAgICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4NCisqDQorKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEZJUlNUIEFORCBDT05UUklCVVRPUlNgYEFTIElTJycgQU5EIEFOWQ0KKyogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRA0KKyogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgTk9OSU5GUklOR0VNRU5UIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgDQorKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBGSVJTVCBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiANCisqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUw0KKyogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOw0KKyogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EDQorKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVA0KKyogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMNCisqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLg0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL1dQSUxpYi9jUklPRlJDSUlfdnhXb3JrcyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL1dQSUxpYi9jUklPRlJDSUlfdnhXb3JrcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjNmMzAwCi0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvV1BJTGliL2NSSU9GUkNJSV92eFdvcmtzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL1dQSUxpYi9jUklPRlJDX3Z4V29ya3MgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS9XUElMaWIvY1JJT0ZSQ192eFdvcmtzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1NjJmMmEKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS9XUElMaWIvY1JJT0ZSQ192eFdvcmtzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL2NyZWF0ZVVwZGF0ZUluc3RhbGxlci5jbWQgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS9jcmVhdGVVcGRhdGVJbnN0YWxsZXIuY21kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmMGVlOGYKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS9jcmVhdGVVcGRhdGVJbnN0YWxsZXIuY21kCkBAIC0wLDAgKzEsODEgQEAKK2VjaG8gb2ZmDQorc2V0IFdJTlJBUj0iYzpcUHJvZ3JhfjFcV2luUkFSXFdpblJBUi5leGUiDQorDQorcmVtIFVwZGF0ZSB0aGUgV1BJTGliIHNvdXJjZSBkaXINCitzdm4gdXBkYXRlIC4uL1dQSUxpYi8NCisNCityZW0gQ29tZSB1cCB3aXRoIHRoZSBuYW1lIG9mIHRoZSB1cGRhdGUNCitmb3IgL0YgJSV4IGluICgnY3NjcmlwdCAvL05vTG9nbyBoZWxwZXJzXHVwZGF0ZU5hbWUudmJzJykgZG8gc2V0IFVQREFURV9OQU1FPSUleA0KKw0KK3JlbSBDaGVjayB0aGUgdXBkYXRlIG5hbWUgZm9yIGVycm9ycw0KK3JlbSBpZiBub3QgJVVQREFURV9OQU1FJSA9PSBCYWRTVk5TeW5jIGdvdG8gY29udGludWUNCityZW0gZWNobyBXUElMaWIgaXMgbm90IHN5bmNlZCBwcm9wZXJseSENCityZW0gc3ZudmVyc2lvbiAtbiAuLi9XUElMaWINCityZW0gZ290byBlbmQNCityZW0gOmNvbnRpbnVlDQorDQorcmVtIFJlYnVpbGQgV1BJTGliDQorcmVtIHB1c2hkIC4uXFdQSUxpYlxQUEM2MDNnbnUNCityZW0gQzpcV2luZFJpdmVyXHdyZW52LmV4ZSAtcCB2eHdvcmtzLTYuMyBtYWtlIC0tbm8tcHJpbnQtZGlyZWN0b3J5IEJVSUxEX1NQRUM9UFBDNjAzZ251IERFQlVHX01PREU9MSBUUkFDRT0xIGNsZWFuIGFsbA0KK3JlbSBwb3BkDQorDQorcmVtIE1ha2UgdGhlIFdvcmtiZW5jaFVwZGF0ZSBkaXIgY3VycmVudA0KK3B1c2hkIC4uXFdQSUxpYlxTY3JpcHRzDQorY21kIC9DIENvcHlXUElMaWJUb1VwZGF0ZURpcmVjdG9yeS5jbWQNCitwb3BkDQorDQorcmVtIEV4cG9ydCB0aGUgV1BJTGliIFNvdXJjZQ0KK3JtZGlyIC9zIC9xIFdQSUxpYlxXUElMaWINCitkZWwgV1BJTGliXFdQSUxpYkMrK1NvdXJjZSoNCitzdm4gZXhwb3J0IC4uXFdQSUxpYlwgV1BJTGliXFdQSUxpYg0KKw0KK3JlbSBDb21wcmVzcyB0aGUgc291cmNlDQorcHVzaGQgV1BJTGliDQorJVdJTlJBUiUgQSAtciAtZGYgV1BJTGliQysrU291cmNlJVVQREFURV9OQU1FJS56aXAgV1BJTGliDQorcG9wZA0KKw0KK3JlbSBHZXQgdGhlIHJldmlzaW9uDQorZm9yIC9GICUleCBpbiAoJ3N2bnZlcnNpb24gLW4gLi4vV1BJTGliJykgZG8gc2V0IFVQREFURV9SRVY9JSV4DQorDQorcmVtIENyZWF0ZSBhIHByb2plY3QgbnVtYmVyIGNvbmZpZw0KK2VjaG8gUFJPSkVDVF9OVU1CRVIgPSByZXYlVVBEQVRFX1JFViUgPiBEb3h5ZmlsZS5QUk9KRUNUX05VTUJFUg0KKw0KK3JlbSBSZWNvbXBpbGUgdGhlIERveHlnZW4gZG9jdW1lbnRhdGlvbg0KK3JtZGlyIC9zIC9xIGRveHlnZW5fb3V0cHV0DQorbWtkaXIgZG94eWdlbl9vdXRwdXQNCitoZWxwZXJzXGRveHlnZW4uZXhlIGhlbHBlcnNcRG94eWZpbGUgPiBkb3h5Z2VuX291dHB1dFxidWlsZC5sb2cgMj4gZG94eWdlbl9vdXRwdXRcYnVpbGRfZXJyb3JzLmxvZw0KKw0KK3JlbSBEb25lIHdpdGggdGhlIERveHlmaWxlLlBST0pFQ1RfTlVNQkVSDQorZGVsIERveHlmaWxlLlBST0pFQ1RfTlVNQkVSDQorDQorcmVtIENvbXBpbGUgdGhlIHJlc3VsdGFudCBoZWxwIG91dHB1dA0KK2hlbHBlcnNcaGhjIGRveHlnZW5fb3V0cHV0XGh0bWxcaW5kZXguaGhwDQorDQorcmVtIE1vdmUgdGhlIGhlbHAgdG8gdGhlIGluc3RhbGxlciBwYXRoDQorY29weSBkb3h5Z2VuX291dHB1dFxodG1sXGluZGV4LmNobSAiZG9jc1xleHRlbnNpb25zXEZSQ1xXUElMaWIgQysrIFJlZmVyZW5jZS5jaG0iDQorDQorcmVtIEFkZCB0aGUgdXBkYXRlIGZpbGVzLCBidXQgZXhjbHVkZSB0aGUgLnN2biBhbmQgYnVpbGQgb3V0cHV0IGRpcmVjdG9yaWVzDQorJVdJTlJBUiUgQSAtciAteCpcLnN2blwqIC14KlxQUEM2MDNnbnVcKiBXb3JrYmVuY2hVcGRhdGUlVVBEQVRFX05BTUUlLnppcCBkb2NzIHZ4d29ya3MtNi4zIHdvcmtiZW5jaC0zLjAgd29ya2JlbmNoLTMuMyBXUElMaWIgdXBkYXRlLmNtZA0KKw0KK3JlbSBSZW1vdmUgdGhlIHNvdXJjZSB6aXAgZmlsZSBzaW5jZSBpdCBpcyBhbHJlYWR5IGluIHRoZSB1cGRhdGUuDQorZGVsIFdQSUxpYlxXUElMaWJDKytTb3VyY2UqLioNCisNCityZW0gQWRkIHRoZSBjUklPIGltYWdlIHdpdGggbm8gY29tcHJlc3Npb24NCislV0lOUkFSJSBBIC1tMCBXb3JrYmVuY2hVcGRhdGUlVVBEQVRFX05BTUUlLnppcCBGUkNfMjAqLnppcA0KKw0KK3JlbSBTdGFydCB3aXRoIHRoZSBib2lsZXItcGxhdGUgY29tbWVudA0KK2NvcHkgaGVscGVyc1xzZnhfY29tbWVudC50eHQgc2Z4X2NvbW1lbnQudG1wLnR4dA0KKw0KK3JlbSBBcHBlbmQgdGhlIG5hbWUgb2YgdGhpcyB1cGRhdGUgKGVuZHMgdXAgYWZ0ZXIgIlRpdGxlPSIgaW4gdGhlIGNvbW1lbnQpDQorZWNobyBXb3JrYmVuY2hVcGRhdGUlVVBEQVRFX05BTUUlID4+IHNmeF9jb21tZW50LnRtcC50eHQNCisNCityZW0gQWRkIHRoZSBjb21tZW50IHRvIHRoZSBhcmNoaXZlDQorJVdJTlJBUiUgYyAtenNmeF9jb21tZW50LnRtcC50eHQgV29ya2JlbmNoVXBkYXRlJVVQREFURV9OQU1FJS56aXANCisNCityZW0gRG9uZSB3aXRoIHRoZSBjb21tZW50DQorZGVsIHNmeF9jb21tZW50LnRtcC50eHQNCisNCityZW0gTWFrZSBpdCBzZWxmIGV4dHJhY3RpbmcNCislV0lOUkFSJSBzIC1kZiBXb3JrYmVuY2hVcGRhdGUlVVBEQVRFX05BTUUlLnppcA0KK2VjaG8gU3VjY2VzcyENCis6ZW5kDQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvZG9jcy9leHRlbnNpb25zL0ZSQy8yMDA5IEZSQyBWaXNpb24gQVBJIFNwZWNpZmljYXRpb24ucGRmIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvZG9jcy9leHRlbnNpb25zL0ZSQy8yMDA5IEZSQyBWaXNpb24gQVBJIFNwZWNpZmljYXRpb24ucGRmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxOTE0ZDgKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS9kb2NzL2V4dGVuc2lvbnMvRlJDLzIwMDkgRlJDIFZpc2lvbiBBUEkgU3BlY2lmaWNhdGlvbi5wZGYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvZG9jcy9leHRlbnNpb25zL0ZSQy9HZXR0aW5nU3RhcnRlZFdpdGhDLnBkZiBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL2RvY3MvZXh0ZW5zaW9ucy9GUkMvR2V0dGluZ1N0YXJ0ZWRXaXRoQy5wZGYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTUzZGQwZAotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL2RvY3MvZXh0ZW5zaW9ucy9GUkMvR2V0dGluZ1N0YXJ0ZWRXaXRoQy5wZGYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvZG9jcy9leHRlbnNpb25zL0ZSQy9OSVZpc2lvbkNWSS5jaG0gYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS9kb2NzL2V4dGVuc2lvbnMvRlJDL05JVmlzaW9uQ1ZJLmNobQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTMwNjRlCi0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvZG9jcy9leHRlbnNpb25zL0ZSQy9OSVZpc2lvbkNWSS5jaG0KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0ICJhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL2RvY3MvZXh0ZW5zaW9ucy9GUkMvV1BJIFJvYm90aWNzIExpYnJhcnkgVXNlclwzNDJcMjAwXDIzMXMgR3VpZGUucGRmIiAiYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS9kb2NzL2V4dGVuc2lvbnMvRlJDL1dQSSBSb2JvdGljcyBMaWJyYXJ5IFVzZXJcMzQyXDIwMFwyMzFzIEd1aWRlLnBkZiIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDkzOWY5NAotLS0gL2Rldi9udWxsCisrKyAiYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS9kb2NzL2V4dGVuc2lvbnMvRlJDL1dQSSBSb2JvdGljcyBMaWJyYXJ5IFVzZXJcMzQyXDIwMFwyMzFzIEd1aWRlLnBkZiIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvZG9jcy9leHRlbnNpb25zL0ZSQy9XUElMaWJDb29rYm9vay5wZGYgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS9kb2NzL2V4dGVuc2lvbnMvRlJDL1dQSUxpYkNvb2tib29rLnBkZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OTIzOWRiCi0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvZG9jcy9leHRlbnNpb25zL0ZSQy9XUElMaWJDb29rYm9vay5wZGYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvaGVscGVycy9Eb3h5ZmlsZSBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL2hlbHBlcnMvRG94eWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2YzOTAxMQotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL2hlbHBlcnMvRG94eWZpbGUKQEAgLTAsMCArMSwxNjY4IEBACisjIERveHlmaWxlIDEuNy4yDQorDQorIyBUaGlzIGZpbGUgZGVzY3JpYmVzIHRoZSBzZXR0aW5ncyB0byBiZSB1c2VkIGJ5IHRoZSBkb2N1bWVudGF0aW9uIHN5c3RlbQ0KKyMgZG94eWdlbiAod3d3LmRveHlnZW4ub3JnKSBmb3IgYSBwcm9qZWN0DQorIw0KKyMgQWxsIHRleHQgYWZ0ZXIgYSBoYXNoICgjKSBpcyBjb25zaWRlcmVkIGEgY29tbWVudCBhbmQgd2lsbCBiZSBpZ25vcmVkDQorIyBUaGUgZm9ybWF0IGlzOg0KKyMgICAgICAgVEFHID0gdmFsdWUgW3ZhbHVlLCAuLi5dDQorIyBGb3IgbGlzdHMgaXRlbXMgY2FuIGFsc28gYmUgYXBwZW5kZWQgdXNpbmc6DQorIyAgICAgICBUQUcgKz0gdmFsdWUgW3ZhbHVlLCAuLi5dDQorIyBWYWx1ZXMgdGhhdCBjb250YWluIHNwYWNlcyBzaG91bGQgYmUgcGxhY2VkIGJldHdlZW4gcXVvdGVzICgiICIpDQorDQorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyMgUHJvamVjdCByZWxhdGVkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucw0KKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisNCisjIFRoaXMgdGFnIHNwZWNpZmllcyB0aGUgZW5jb2RpbmcgdXNlZCBmb3IgYWxsIGNoYXJhY3RlcnMgaW4gdGhlIGNvbmZpZyBmaWxlIA0KKyMgdGhhdCBmb2xsb3cuIFRoZSBkZWZhdWx0IGlzIFVURi04IHdoaWNoIGlzIGFsc28gdGhlIGVuY29kaW5nIHVzZWQgZm9yIGFsbCANCisjIHRleHQgYmVmb3JlIHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIHRoaXMgdGFnLiBEb3h5Z2VuIHVzZXMgbGliaWNvbnYgKG9yIHRoZSANCisjIGljb252IGJ1aWx0IGludG8gbGliYykgZm9yIHRoZSB0cmFuc2NvZGluZy4gU2VlIA0KKyMgaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2xpYmljb252IGZvciB0aGUgbGlzdCBvZiBwb3NzaWJsZSBlbmNvZGluZ3MuDQorDQorRE9YWUZJTEVfRU5DT0RJTkcgICAgICA9IFVURi04DQorDQorIyBUaGUgUFJPSkVDVF9OQU1FIHRhZyBpcyBhIHNpbmdsZSB3b3JkIChvciBhIHNlcXVlbmNlIG9mIHdvcmRzIHN1cnJvdW5kZWQgDQorIyBieSBxdW90ZXMpIHRoYXQgc2hvdWxkIGlkZW50aWZ5IHRoZSBwcm9qZWN0Lg0KKw0KK1BST0pFQ1RfTkFNRSAgICAgICAgICAgPSAiV1BJTGliIEMrKyBmb3IgRlJDIg0KKw0KKyMgVGhlIFBST0pFQ1RfTlVNQkVSIHRhZyBjYW4gYmUgdXNlZCB0byBlbnRlciBhIHByb2plY3Qgb3IgcmV2aXNpb24gbnVtYmVyLiANCisjIFRoaXMgY291bGQgYmUgaGFuZHkgZm9yIGFyY2hpdmluZyB0aGUgZ2VuZXJhdGVkIGRvY3VtZW50YXRpb24gb3IgDQorIyBpZiBzb21lIHZlcnNpb24gY29udHJvbCBzeXN0ZW0gaXMgdXNlZC4NCisNCisjUFJPSkVDVF9OVU1CRVIgICAgICAgICA9IDIuMA0KKyNJbmNsdWRlIHRoaXMgZnJvbSBhIGdlbmVyYXRlZCBmaWxlIGluc3RlYWQuDQorQElOQ0xVREUgPSBEb3h5ZmlsZS5QUk9KRUNUX05VTUJFUg0KKw0KKyMgVGhlIE9VVFBVVF9ESVJFQ1RPUlkgdGFnIGlzIHVzZWQgdG8gc3BlY2lmeSB0aGUgKHJlbGF0aXZlIG9yIGFic29sdXRlKSANCisjIGJhc2UgcGF0aCB3aGVyZSB0aGUgZ2VuZXJhdGVkIGRvY3VtZW50YXRpb24gd2lsbCBiZSBwdXQuIA0KKyMgSWYgYSByZWxhdGl2ZSBwYXRoIGlzIGVudGVyZWQsIGl0IHdpbGwgYmUgcmVsYXRpdmUgdG8gdGhlIGxvY2F0aW9uIA0KKyMgd2hlcmUgZG94eWdlbiB3YXMgc3RhcnRlZC4gSWYgbGVmdCBibGFuayB0aGUgY3VycmVudCBkaXJlY3Rvcnkgd2lsbCBiZSB1c2VkLg0KKw0KK09VVFBVVF9ESVJFQ1RPUlkgICAgICAgPSAiZG94eWdlbl9vdXRwdXQiDQorDQorIyBJZiB0aGUgQ1JFQVRFX1NVQkRJUlMgdGFnIGlzIHNldCB0byBZRVMsIHRoZW4gZG94eWdlbiB3aWxsIGNyZWF0ZSANCisjIDQwOTYgc3ViLWRpcmVjdG9yaWVzIChpbiAyIGxldmVscykgdW5kZXIgdGhlIG91dHB1dCBkaXJlY3Rvcnkgb2YgZWFjaCBvdXRwdXQgDQorIyBmb3JtYXQgYW5kIHdpbGwgZGlzdHJpYnV0ZSB0aGUgZ2VuZXJhdGVkIGZpbGVzIG92ZXIgdGhlc2UgZGlyZWN0b3JpZXMuIA0KKyMgRW5hYmxpbmcgdGhpcyBvcHRpb24gY2FuIGJlIHVzZWZ1bCB3aGVuIGZlZWRpbmcgZG94eWdlbiBhIGh1Z2UgYW1vdW50IG9mIA0KKyMgc291cmNlIGZpbGVzLCB3aGVyZSBwdXR0aW5nIGFsbCBnZW5lcmF0ZWQgZmlsZXMgaW4gdGhlIHNhbWUgZGlyZWN0b3J5IHdvdWxkIA0KKyMgb3RoZXJ3aXNlIGNhdXNlIHBlcmZvcm1hbmNlIHByb2JsZW1zIGZvciB0aGUgZmlsZSBzeXN0ZW0uDQorDQorQ1JFQVRFX1NVQkRJUlMgICAgICAgICA9IE5PDQorDQorIyBUaGUgT1VUUFVUX0xBTkdVQUdFIHRhZyBpcyB1c2VkIHRvIHNwZWNpZnkgdGhlIGxhbmd1YWdlIGluIHdoaWNoIGFsbCANCisjIGRvY3VtZW50YXRpb24gZ2VuZXJhdGVkIGJ5IGRveHlnZW4gaXMgd3JpdHRlbi4gRG94eWdlbiB3aWxsIHVzZSB0aGlzIA0KKyMgaW5mb3JtYXRpb24gdG8gZ2VuZXJhdGUgYWxsIGNvbnN0YW50IG91dHB1dCBpbiB0aGUgcHJvcGVyIGxhbmd1YWdlLiANCisjIFRoZSBkZWZhdWx0IGxhbmd1YWdlIGlzIEVuZ2xpc2gsIG90aGVyIHN1cHBvcnRlZCBsYW5ndWFnZXMgYXJlOiANCisjIEFmcmlrYWFucywgQXJhYmljLCBCcmF6aWxpYW4sIENhdGFsYW4sIENoaW5lc2UsIENoaW5lc2UtVHJhZGl0aW9uYWwsIA0KKyMgQ3JvYXRpYW4sIEN6ZWNoLCBEYW5pc2gsIER1dGNoLCBFc3BlcmFudG8sIEZhcnNpLCBGaW5uaXNoLCBGcmVuY2gsIEdlcm1hbiwgDQorIyBHcmVlaywgSHVuZ2FyaWFuLCBJdGFsaWFuLCBKYXBhbmVzZSwgSmFwYW5lc2UtZW4gKEphcGFuZXNlIHdpdGggRW5nbGlzaCANCisjIG1lc3NhZ2VzKSwgS29yZWFuLCBLb3JlYW4tZW4sIExpdGh1YW5pYW4sIE5vcndlZ2lhbiwgTWFjZWRvbmlhbiwgUGVyc2lhbiwgDQorIyBQb2xpc2gsIFBvcnR1Z3Vlc2UsIFJvbWFuaWFuLCBSdXNzaWFuLCBTZXJiaWFuLCBTZXJiaWFuLUN5cmlsaWMsIFNsb3ZhaywgDQorIyBTbG92ZW5lLCBTcGFuaXNoLCBTd2VkaXNoLCBVa3JhaW5pYW4sIGFuZCBWaWV0bmFtZXNlLg0KKw0KK09VVFBVVF9MQU5HVUFHRSAgICAgICAgPSBFbmdsaXNoDQorDQorIyBJZiB0aGUgQlJJRUZfTUVNQkVSX0RFU0MgdGFnIGlzIHNldCB0byBZRVMgKHRoZSBkZWZhdWx0KSBEb3h5Z2VuIHdpbGwgDQorIyBpbmNsdWRlIGJyaWVmIG1lbWJlciBkZXNjcmlwdGlvbnMgYWZ0ZXIgdGhlIG1lbWJlcnMgdGhhdCBhcmUgbGlzdGVkIGluIA0KKyMgdGhlIGZpbGUgYW5kIGNsYXNzIGRvY3VtZW50YXRpb24gKHNpbWlsYXIgdG8gSmF2YURvYykuIA0KKyMgU2V0IHRvIE5PIHRvIGRpc2FibGUgdGhpcy4NCisNCitCUklFRl9NRU1CRVJfREVTQyAgICAgID0gWUVTDQorDQorIyBJZiB0aGUgUkVQRUFUX0JSSUVGIHRhZyBpcyBzZXQgdG8gWUVTICh0aGUgZGVmYXVsdCkgRG94eWdlbiB3aWxsIHByZXBlbmQgDQorIyB0aGUgYnJpZWYgZGVzY3JpcHRpb24gb2YgYSBtZW1iZXIgb3IgZnVuY3Rpb24gYmVmb3JlIHRoZSBkZXRhaWxlZCBkZXNjcmlwdGlvbi4gDQorIyBOb3RlOiBpZiBib3RoIEhJREVfVU5ET0NfTUVNQkVSUyBhbmQgQlJJRUZfTUVNQkVSX0RFU0MgYXJlIHNldCB0byBOTywgdGhlIA0KKyMgYnJpZWYgZGVzY3JpcHRpb25zIHdpbGwgYmUgY29tcGxldGVseSBzdXBwcmVzc2VkLg0KKw0KK1JFUEVBVF9CUklFRiAgICAgICAgICAgPSBZRVMNCisNCisjIFRoaXMgdGFnIGltcGxlbWVudHMgYSBxdWFzaS1pbnRlbGxpZ2VudCBicmllZiBkZXNjcmlwdGlvbiBhYmJyZXZpYXRvciANCisjIHRoYXQgaXMgdXNlZCB0byBmb3JtIHRoZSB0ZXh0IGluIHZhcmlvdXMgbGlzdGluZ3MuIEVhY2ggc3RyaW5nIA0KKyMgaW4gdGhpcyBsaXN0LCBpZiBmb3VuZCBhcyB0aGUgbGVhZGluZyB0ZXh0IG9mIHRoZSBicmllZiBkZXNjcmlwdGlvbiwgd2lsbCBiZSANCisjIHN0cmlwcGVkIGZyb20gdGhlIHRleHQgYW5kIHRoZSByZXN1bHQgYWZ0ZXIgcHJvY2Vzc2luZyB0aGUgd2hvbGUgbGlzdCwgaXMgDQorIyB1c2VkIGFzIHRoZSBhbm5vdGF0ZWQgdGV4dC4gT3RoZXJ3aXNlLCB0aGUgYnJpZWYgZGVzY3JpcHRpb24gaXMgdXNlZCBhcy1pcy4gDQorIyBJZiBsZWZ0IGJsYW5rLCB0aGUgZm9sbG93aW5nIHZhbHVlcyBhcmUgdXNlZCAoIiRuYW1lIiBpcyBhdXRvbWF0aWNhbGx5IA0KKyMgcmVwbGFjZWQgd2l0aCB0aGUgbmFtZSBvZiB0aGUgZW50aXR5KTogIlRoZSAkbmFtZSBjbGFzcyIgIlRoZSAkbmFtZSB3aWRnZXQiIA0KKyMgIlRoZSAkbmFtZSBmaWxlIiAiaXMiICJwcm92aWRlcyIgInNwZWNpZmllcyIgImNvbnRhaW5zIiANCisjICJyZXByZXNlbnRzIiAiYSIgImFuIiAidGhlIg0KKw0KK0FCQlJFVklBVEVfQlJJRUYgICAgICAgPSAiVGhlICRuYW1lIGNsYXNzIiBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICJUaGUgJG5hbWUgd2lkZ2V0IiBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICJUaGUgJG5hbWUgZmlsZSIgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICBpcyBcDQorICAgICAgICAgICAgICAgICAgICAgICAgIHByb3ZpZGVzIFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWVzIFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbnMgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICByZXByZXNlbnRzIFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgYSBcDQorICAgICAgICAgICAgICAgICAgICAgICAgIGFuIFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgdGhlDQorDQorIyBJZiB0aGUgQUxXQVlTX0RFVEFJTEVEX1NFQyBhbmQgUkVQRUFUX0JSSUVGIHRhZ3MgYXJlIGJvdGggc2V0IHRvIFlFUyB0aGVuIA0KKyMgRG94eWdlbiB3aWxsIGdlbmVyYXRlIGEgZGV0YWlsZWQgc2VjdGlvbiBldmVuIGlmIHRoZXJlIGlzIG9ubHkgYSBicmllZiANCisjIGRlc2NyaXB0aW9uLg0KKw0KK0FMV0FZU19ERVRBSUxFRF9TRUMgICAgPSBOTw0KKw0KKyMgSWYgdGhlIElOTElORV9JTkhFUklURURfTUVNQiB0YWcgaXMgc2V0IHRvIFlFUywgZG94eWdlbiB3aWxsIHNob3cgYWxsIA0KKyMgaW5oZXJpdGVkIG1lbWJlcnMgb2YgYSBjbGFzcyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBvZiB0aGF0IGNsYXNzIGFzIGlmIHRob3NlIA0KKyMgbWVtYmVycyB3ZXJlIG9yZGluYXJ5IGNsYXNzIG1lbWJlcnMuIENvbnN0cnVjdG9ycywgZGVzdHJ1Y3RvcnMgYW5kIGFzc2lnbm1lbnQgDQorIyBvcGVyYXRvcnMgb2YgdGhlIGJhc2UgY2xhc3NlcyB3aWxsIG5vdCBiZSBzaG93bi4NCisNCitJTkxJTkVfSU5IRVJJVEVEX01FTUIgID0gTk8NCisNCisjIElmIHRoZSBGVUxMX1BBVEhfTkFNRVMgdGFnIGlzIHNldCB0byBZRVMgdGhlbiBEb3h5Z2VuIHdpbGwgcHJlcGVuZCB0aGUgZnVsbCANCisjIHBhdGggYmVmb3JlIGZpbGVzIG5hbWUgaW4gdGhlIGZpbGUgbGlzdCBhbmQgaW4gdGhlIGhlYWRlciBmaWxlcy4gSWYgc2V0IA0KKyMgdG8gTk8gdGhlIHNob3J0ZXN0IHBhdGggdGhhdCBtYWtlcyB0aGUgZmlsZSBuYW1lIHVuaXF1ZSB3aWxsIGJlIHVzZWQuDQorDQorRlVMTF9QQVRIX05BTUVTICAgICAgICA9IFlFUw0KKw0KKyMgSWYgdGhlIEZVTExfUEFUSF9OQU1FUyB0YWcgaXMgc2V0IHRvIFlFUyB0aGVuIHRoZSBTVFJJUF9GUk9NX1BBVEggdGFnIA0KKyMgY2FuIGJlIHVzZWQgdG8gc3RyaXAgYSB1c2VyLWRlZmluZWQgcGFydCBvZiB0aGUgcGF0aC4gU3RyaXBwaW5nIGlzIA0KKyMgb25seSBkb25lIGlmIG9uZSBvZiB0aGUgc3BlY2lmaWVkIHN0cmluZ3MgbWF0Y2hlcyB0aGUgbGVmdC1oYW5kIHBhcnQgb2YgDQorIyB0aGUgcGF0aC4gVGhlIHRhZyBjYW4gYmUgdXNlZCB0byBzaG93IHJlbGF0aXZlIHBhdGhzIGluIHRoZSBmaWxlIGxpc3QuIA0KKyMgSWYgbGVmdCBibGFuayB0aGUgZGlyZWN0b3J5IGZyb20gd2hpY2ggZG94eWdlbiBpcyBydW4gaXMgdXNlZCBhcyB0aGUgDQorIyBwYXRoIHRvIHN0cmlwLg0KKw0KK1NUUklQX0ZST01fUEFUSCAgICAgICAgPSANCisNCisjIFRoZSBTVFJJUF9GUk9NX0lOQ19QQVRIIHRhZyBjYW4gYmUgdXNlZCB0byBzdHJpcCBhIHVzZXItZGVmaW5lZCBwYXJ0IG9mIA0KKyMgdGhlIHBhdGggbWVudGlvbmVkIGluIHRoZSBkb2N1bWVudGF0aW9uIG9mIGEgY2xhc3MsIHdoaWNoIHRlbGxzIA0KKyMgdGhlIHJlYWRlciB3aGljaCBoZWFkZXIgZmlsZSB0byBpbmNsdWRlIGluIG9yZGVyIHRvIHVzZSBhIGNsYXNzLiANCisjIElmIGxlZnQgYmxhbmsgb25seSB0aGUgbmFtZSBvZiB0aGUgaGVhZGVyIGZpbGUgY29udGFpbmluZyB0aGUgY2xhc3MgDQorIyBkZWZpbml0aW9uIGlzIHVzZWQuIE90aGVyd2lzZSBvbmUgc2hvdWxkIHNwZWNpZnkgdGhlIGluY2x1ZGUgcGF0aHMgdGhhdCANCisjIGFyZSBub3JtYWxseSBwYXNzZWQgdG8gdGhlIGNvbXBpbGVyIHVzaW5nIHRoZSAtSSBmbGFnLg0KKw0KK1NUUklQX0ZST01fSU5DX1BBVEggICAgPSANCisNCisjIElmIHRoZSBTSE9SVF9OQU1FUyB0YWcgaXMgc2V0IHRvIFlFUywgZG94eWdlbiB3aWxsIGdlbmVyYXRlIG11Y2ggc2hvcnRlciANCisjIChidXQgbGVzcyByZWFkYWJsZSkgZmlsZSBuYW1lcy4gVGhpcyBjYW4gYmUgdXNlZnVsIGlmIHlvdXIgZmlsZSBzeXN0ZW0gDQorIyBkb2Vzbid0IHN1cHBvcnQgbG9uZyBuYW1lcyBsaWtlIG9uIERPUywgTWFjLCBvciBDRC1ST00uDQorDQorU0hPUlRfTkFNRVMgICAgICAgICAgICA9IE5PDQorDQorIyBJZiB0aGUgSkFWQURPQ19BVVRPQlJJRUYgdGFnIGlzIHNldCB0byBZRVMgdGhlbiBEb3h5Z2VuIA0KKyMgd2lsbCBpbnRlcnByZXQgdGhlIGZpcnN0IGxpbmUgKHVudGlsIHRoZSBmaXJzdCBkb3QpIG9mIGEgSmF2YURvYy1zdHlsZSANCisjIGNvbW1lbnQgYXMgdGhlIGJyaWVmIGRlc2NyaXB0aW9uLiBJZiBzZXQgdG8gTk8sIHRoZSBKYXZhRG9jIA0KKyMgY29tbWVudHMgd2lsbCBiZWhhdmUganVzdCBsaWtlIHJlZ3VsYXIgUXQtc3R5bGUgY29tbWVudHMgDQorIyAodGh1cyByZXF1aXJpbmcgYW4gZXhwbGljaXQgQGJyaWVmIGNvbW1hbmQgZm9yIGEgYnJpZWYgZGVzY3JpcHRpb24uKQ0KKw0KK0pBVkFET0NfQVVUT0JSSUVGICAgICAgPSBZRVMNCisNCisjIElmIHRoZSBRVF9BVVRPQlJJRUYgdGFnIGlzIHNldCB0byBZRVMgdGhlbiBEb3h5Z2VuIHdpbGwgDQorIyBpbnRlcnByZXQgdGhlIGZpcnN0IGxpbmUgKHVudGlsIHRoZSBmaXJzdCBkb3QpIG9mIGEgUXQtc3R5bGUgDQorIyBjb21tZW50IGFzIHRoZSBicmllZiBkZXNjcmlwdGlvbi4gSWYgc2V0IHRvIE5PLCB0aGUgY29tbWVudHMgDQorIyB3aWxsIGJlaGF2ZSBqdXN0IGxpa2UgcmVndWxhciBRdC1zdHlsZSBjb21tZW50cyAodGh1cyByZXF1aXJpbmcgDQorIyBhbiBleHBsaWNpdCBcYnJpZWYgY29tbWFuZCBmb3IgYSBicmllZiBkZXNjcmlwdGlvbi4pDQorDQorUVRfQVVUT0JSSUVGICAgICAgICAgICA9IE5PDQorDQorIyBUaGUgTVVMVElMSU5FX0NQUF9JU19CUklFRiB0YWcgY2FuIGJlIHNldCB0byBZRVMgdG8gbWFrZSBEb3h5Z2VuIA0KKyMgdHJlYXQgYSBtdWx0aS1saW5lIEMrKyBzcGVjaWFsIGNvbW1lbnQgYmxvY2sgKGkuZS4gYSBibG9jayBvZiAvLyEgb3IgLy8vIA0KKyMgY29tbWVudHMpIGFzIGEgYnJpZWYgZGVzY3JpcHRpb24uIFRoaXMgdXNlZCB0byBiZSB0aGUgZGVmYXVsdCBiZWhhdmlvdXIuIA0KKyMgVGhlIG5ldyBkZWZhdWx0IGlzIHRvIHRyZWF0IGEgbXVsdGktbGluZSBDKysgY29tbWVudCBibG9jayBhcyBhIGRldGFpbGVkIA0KKyMgZGVzY3JpcHRpb24uIFNldCB0aGlzIHRhZyB0byBZRVMgaWYgeW91IHByZWZlciB0aGUgb2xkIGJlaGF2aW91ciBpbnN0ZWFkLg0KKw0KK01VTFRJTElORV9DUFBfSVNfQlJJRUYgPSBOTw0KKw0KKyMgSWYgdGhlIElOSEVSSVRfRE9DUyB0YWcgaXMgc2V0IHRvIFlFUyAodGhlIGRlZmF1bHQpIHRoZW4gYW4gdW5kb2N1bWVudGVkIA0KKyMgbWVtYmVyIGluaGVyaXRzIHRoZSBkb2N1bWVudGF0aW9uIGZyb20gYW55IGRvY3VtZW50ZWQgbWVtYmVyIHRoYXQgaXQgDQorIyByZS1pbXBsZW1lbnRzLg0KKw0KK0lOSEVSSVRfRE9DUyAgICAgICAgICAgPSBZRVMNCisNCisjIElmIHRoZSBTRVBBUkFURV9NRU1CRVJfUEFHRVMgdGFnIGlzIHNldCB0byBZRVMsIHRoZW4gZG94eWdlbiB3aWxsIHByb2R1Y2UgDQorIyBhIG5ldyBwYWdlIGZvciBlYWNoIG1lbWJlci4gSWYgc2V0IHRvIE5PLCB0aGUgZG9jdW1lbnRhdGlvbiBvZiBhIG1lbWJlciB3aWxsIA0KKyMgYmUgcGFydCBvZiB0aGUgZmlsZS9jbGFzcy9uYW1lc3BhY2UgdGhhdCBjb250YWlucyBpdC4NCisNCitTRVBBUkFURV9NRU1CRVJfUEFHRVMgID0gTk8NCisNCisjIFRoZSBUQUJfU0laRSB0YWcgY2FuIGJlIHVzZWQgdG8gc2V0IHRoZSBudW1iZXIgb2Ygc3BhY2VzIGluIGEgdGFiLiANCisjIERveHlnZW4gdXNlcyB0aGlzIHZhbHVlIHRvIHJlcGxhY2UgdGFicyBieSBzcGFjZXMgaW4gY29kZSBmcmFnbWVudHMuDQorDQorVEFCX1NJWkUgICAgICAgICAgICAgICA9IDgNCisNCisjIFRoaXMgdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgYSBudW1iZXIgb2YgYWxpYXNlcyB0aGF0IGFjdHMgDQorIyBhcyBjb21tYW5kcyBpbiB0aGUgZG9jdW1lbnRhdGlvbi4gQW4gYWxpYXMgaGFzIHRoZSBmb3JtICJuYW1lPXZhbHVlIi4gDQorIyBGb3IgZXhhbXBsZSBhZGRpbmcgInNpZGVlZmZlY3Q9XHBhciBTaWRlIEVmZmVjdHM6XG4iIHdpbGwgYWxsb3cgeW91IHRvIA0KKyMgcHV0IHRoZSBjb21tYW5kIFxzaWRlZWZmZWN0IChvciBAc2lkZWVmZmVjdCkgaW4gdGhlIGRvY3VtZW50YXRpb24sIHdoaWNoIA0KKyMgd2lsbCByZXN1bHQgaW4gYSB1c2VyLWRlZmluZWQgcGFyYWdyYXBoIHdpdGggaGVhZGluZyAiU2lkZSBFZmZlY3RzOiIuIA0KKyMgWW91IGNhbiBwdXQgXG4ncyBpbiB0aGUgdmFsdWUgcGFydCBvZiBhbiBhbGlhcyB0byBpbnNlcnQgbmV3bGluZXMuDQorDQorQUxJQVNFUyAgICAgICAgICAgICAgICA9IA0KKw0KKyMgU2V0IHRoZSBPUFRJTUlaRV9PVVRQVVRfRk9SX0MgdGFnIHRvIFlFUyBpZiB5b3VyIHByb2plY3QgY29uc2lzdHMgb2YgQyANCisjIHNvdXJjZXMgb25seS4gRG94eWdlbiB3aWxsIHRoZW4gZ2VuZXJhdGUgb3V0cHV0IHRoYXQgaXMgbW9yZSB0YWlsb3JlZCBmb3IgQy4gDQorIyBGb3IgaW5zdGFuY2UsIHNvbWUgb2YgdGhlIG5hbWVzIHRoYXQgYXJlIHVzZWQgd2lsbCBiZSBkaWZmZXJlbnQuIFRoZSBsaXN0IA0KKyMgb2YgYWxsIG1lbWJlcnMgd2lsbCBiZSBvbWl0dGVkLCBldGMuDQorDQorT1BUSU1JWkVfT1VUUFVUX0ZPUl9DICA9IE5PDQorDQorIyBTZXQgdGhlIE9QVElNSVpFX09VVFBVVF9KQVZBIHRhZyB0byBZRVMgaWYgeW91ciBwcm9qZWN0IGNvbnNpc3RzIG9mIEphdmEgDQorIyBzb3VyY2VzIG9ubHkuIERveHlnZW4gd2lsbCB0aGVuIGdlbmVyYXRlIG91dHB1dCB0aGF0IGlzIG1vcmUgdGFpbG9yZWQgZm9yIA0KKyMgSmF2YS4gRm9yIGluc3RhbmNlLCBuYW1lc3BhY2VzIHdpbGwgYmUgcHJlc2VudGVkIGFzIHBhY2thZ2VzLCBxdWFsaWZpZWQgDQorIyBzY29wZXMgd2lsbCBsb29rIGRpZmZlcmVudCwgZXRjLg0KKw0KK09QVElNSVpFX09VVFBVVF9KQVZBICAgPSBOTw0KKw0KKyMgU2V0IHRoZSBPUFRJTUlaRV9GT1JfRk9SVFJBTiB0YWcgdG8gWUVTIGlmIHlvdXIgcHJvamVjdCBjb25zaXN0cyBvZiBGb3J0cmFuIA0KKyMgc291cmNlcyBvbmx5LiBEb3h5Z2VuIHdpbGwgdGhlbiBnZW5lcmF0ZSBvdXRwdXQgdGhhdCBpcyBtb3JlIHRhaWxvcmVkIGZvciANCisjIEZvcnRyYW4uDQorDQorT1BUSU1JWkVfRk9SX0ZPUlRSQU4gICA9IE5PDQorDQorIyBTZXQgdGhlIE9QVElNSVpFX09VVFBVVF9WSERMIHRhZyB0byBZRVMgaWYgeW91ciBwcm9qZWN0IGNvbnNpc3RzIG9mIFZIREwgDQorIyBzb3VyY2VzLiBEb3h5Z2VuIHdpbGwgdGhlbiBnZW5lcmF0ZSBvdXRwdXQgdGhhdCBpcyB0YWlsb3JlZCBmb3IgDQorIyBWSERMLg0KKw0KK09QVElNSVpFX09VVFBVVF9WSERMICAgPSBOTw0KKw0KKyMgRG94eWdlbiBzZWxlY3RzIHRoZSBwYXJzZXIgdG8gdXNlIGRlcGVuZGluZyBvbiB0aGUgZXh0ZW5zaW9uIG9mIHRoZSBmaWxlcyBpdCANCisjIHBhcnNlcy4gV2l0aCB0aGlzIHRhZyB5b3UgY2FuIGFzc2lnbiB3aGljaCBwYXJzZXIgdG8gdXNlIGZvciBhIGdpdmVuIGV4dGVuc2lvbi4gDQorIyBEb3h5Z2VuIGhhcyBhIGJ1aWx0LWluIG1hcHBpbmcsIGJ1dCB5b3UgY2FuIG92ZXJyaWRlIG9yIGV4dGVuZCBpdCB1c2luZyB0aGlzIA0KKyMgdGFnLiBUaGUgZm9ybWF0IGlzIGV4dD1sYW5ndWFnZSwgd2hlcmUgZXh0IGlzIGEgZmlsZSBleHRlbnNpb24sIGFuZCBsYW5ndWFnZSANCisjIGlzIG9uZSBvZiB0aGUgcGFyc2VycyBzdXBwb3J0ZWQgYnkgZG94eWdlbjogSURMLCBKYXZhLCBKYXZhc2NyaXB0LCBDU2hhcnAsIEMsIA0KKyMgQysrLCBELCBQSFAsIE9iamVjdGl2ZS1DLCBQeXRob24sIEZvcnRyYW4sIFZIREwsIEMsIEMrKy4gRm9yIGluc3RhbmNlIHRvIG1ha2UgDQorIyBkb3h5Z2VuIHRyZWF0IC5pbmMgZmlsZXMgYXMgRm9ydHJhbiBmaWxlcyAoZGVmYXVsdCBpcyBQSFApLCBhbmQgLmYgZmlsZXMgYXMgQyANCisjIChkZWZhdWx0IGlzIEZvcnRyYW4pLCB1c2U6IGluYz1Gb3J0cmFuIGY9Qy4gTm90ZSB0aGF0IGZvciBjdXN0b20gZXh0ZW5zaW9ucyANCisjIHlvdSBhbHNvIG5lZWQgdG8gc2V0IEZJTEVfUEFUVEVSTlMgb3RoZXJ3aXNlIHRoZSBmaWxlcyBhcmUgbm90IHJlYWQgYnkgZG94eWdlbi4NCisNCitFWFRFTlNJT05fTUFQUElORyAgICAgID0gDQorDQorIyBJZiB5b3UgdXNlIFNUTCBjbGFzc2VzIChpLmUuIHN0ZDo6c3RyaW5nLCBzdGQ6OnZlY3RvciwgZXRjLikgYnV0IGRvIG5vdCB3YW50IA0KKyMgdG8gaW5jbHVkZSAoYSB0YWcgZmlsZSBmb3IpIHRoZSBTVEwgc291cmNlcyBhcyBpbnB1dCwgdGhlbiB5b3Ugc2hvdWxkIA0KKyMgc2V0IHRoaXMgdGFnIHRvIFlFUyBpbiBvcmRlciB0byBsZXQgZG94eWdlbiBtYXRjaCBmdW5jdGlvbnMgZGVjbGFyYXRpb25zIGFuZCANCisjIGRlZmluaXRpb25zIHdob3NlIGFyZ3VtZW50cyBjb250YWluIFNUTCBjbGFzc2VzIChlLmcuIGZ1bmMoc3RkOjpzdHJpbmcpOyB2LnMuIA0KKyMgZnVuYyhzdGQ6OnN0cmluZykge30pLiBUaGlzIGFsc28gbWFrZXMgdGhlIGluaGVyaXRhbmNlIGFuZCBjb2xsYWJvcmF0aW9uIA0KKyMgZGlhZ3JhbXMgdGhhdCBpbnZvbHZlIFNUTCBjbGFzc2VzIG1vcmUgY29tcGxldGUgYW5kIGFjY3VyYXRlLg0KKw0KK0JVSUxUSU5fU1RMX1NVUFBPUlQgICAgPSBOTw0KKw0KKyMgSWYgeW91IHVzZSBNaWNyb3NvZnQncyBDKysvQ0xJIGxhbmd1YWdlLCB5b3Ugc2hvdWxkIHNldCB0aGlzIG9wdGlvbiB0byBZRVMgdG8gDQorIyBlbmFibGUgcGFyc2luZyBzdXBwb3J0Lg0KKw0KK0NQUF9DTElfU1VQUE9SVCAgICAgICAgPSBOTw0KKw0KKyMgU2V0IHRoZSBTSVBfU1VQUE9SVCB0YWcgdG8gWUVTIGlmIHlvdXIgcHJvamVjdCBjb25zaXN0cyBvZiBzaXAgc291cmNlcyBvbmx5LiANCisjIERveHlnZW4gd2lsbCBwYXJzZSB0aGVtIGxpa2Ugbm9ybWFsIEMrKyBidXQgd2lsbCBhc3N1bWUgYWxsIGNsYXNzZXMgdXNlIHB1YmxpYyANCisjIGluc3RlYWQgb2YgcHJpdmF0ZSBpbmhlcml0YW5jZSB3aGVuIG5vIGV4cGxpY2l0IHByb3RlY3Rpb24ga2V5d29yZCBpcyBwcmVzZW50Lg0KKw0KK1NJUF9TVVBQT1JUICAgICAgICAgICAgPSBOTw0KKw0KKyMgRm9yIE1pY3Jvc29mdCdzIElETCB0aGVyZSBhcmUgcHJvcGdldCBhbmQgcHJvcHB1dCBhdHRyaWJ1dGVzIHRvIGluZGljYXRlIGdldHRlciANCisjIGFuZCBzZXR0ZXIgbWV0aG9kcyBmb3IgYSBwcm9wZXJ0eS4gU2V0dGluZyB0aGlzIG9wdGlvbiB0byBZRVMgKHRoZSBkZWZhdWx0KSANCisjIHdpbGwgbWFrZSBkb3h5Z2VuIHJlcGxhY2UgdGhlIGdldCBhbmQgc2V0IG1ldGhvZHMgYnkgYSBwcm9wZXJ0eSBpbiB0aGUgDQorIyBkb2N1bWVudGF0aW9uLiBUaGlzIHdpbGwgb25seSB3b3JrIGlmIHRoZSBtZXRob2RzIGFyZSBpbmRlZWQgZ2V0dGluZyBvciANCisjIHNldHRpbmcgYSBzaW1wbGUgdHlwZS4gSWYgdGhpcyBpcyBub3QgdGhlIGNhc2UsIG9yIHlvdSB3YW50IHRvIHNob3cgdGhlIA0KKyMgbWV0aG9kcyBhbnl3YXksIHlvdSBzaG91bGQgc2V0IHRoaXMgb3B0aW9uIHRvIE5PLg0KKw0KK0lETF9QUk9QRVJUWV9TVVBQT1JUICAgPSBZRVMNCisNCisjIElmIG1lbWJlciBncm91cGluZyBpcyB1c2VkIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZCB0aGUgRElTVFJJQlVURV9HUk9VUF9ET0MgDQorIyB0YWcgaXMgc2V0IHRvIFlFUywgdGhlbiBkb3h5Z2VuIHdpbGwgcmV1c2UgdGhlIGRvY3VtZW50YXRpb24gb2YgdGhlIGZpcnN0IA0KKyMgbWVtYmVyIGluIHRoZSBncm91cCAoaWYgYW55KSBmb3IgdGhlIG90aGVyIG1lbWJlcnMgb2YgdGhlIGdyb3VwLiBCeSBkZWZhdWx0IA0KKyMgYWxsIG1lbWJlcnMgb2YgYSBncm91cCBtdXN0IGJlIGRvY3VtZW50ZWQgZXhwbGljaXRseS4NCisNCitESVNUUklCVVRFX0dST1VQX0RPQyAgID0gTk8NCisNCisjIFNldCB0aGUgU1VCR1JPVVBJTkcgdGFnIHRvIFlFUyAodGhlIGRlZmF1bHQpIHRvIGFsbG93IGNsYXNzIG1lbWJlciBncm91cHMgb2YgDQorIyB0aGUgc2FtZSB0eXBlIChmb3IgaW5zdGFuY2UgYSBncm91cCBvZiBwdWJsaWMgZnVuY3Rpb25zKSB0byBiZSBwdXQgYXMgYSANCisjIHN1Ymdyb3VwIG9mIHRoYXQgdHlwZSAoZS5nLiB1bmRlciB0aGUgUHVibGljIEZ1bmN0aW9ucyBzZWN0aW9uKS4gU2V0IGl0IHRvIA0KKyMgTk8gdG8gcHJldmVudCBzdWJncm91cGluZy4gQWx0ZXJuYXRpdmVseSwgdGhpcyBjYW4gYmUgZG9uZSBwZXIgY2xhc3MgdXNpbmcgDQorIyB0aGUgXG5vc3ViZ3JvdXBpbmcgY29tbWFuZC4NCisNCitTVUJHUk9VUElORyAgICAgICAgICAgID0gWUVTDQorDQorIyBXaGVuIFRZUEVERUZfSElERVNfU1RSVUNUIGlzIGVuYWJsZWQsIGEgdHlwZWRlZiBvZiBhIHN0cnVjdCwgdW5pb24sIG9yIGVudW0gDQorIyBpcyBkb2N1bWVudGVkIGFzIHN0cnVjdCwgdW5pb24sIG9yIGVudW0gd2l0aCB0aGUgbmFtZSBvZiB0aGUgdHlwZWRlZi4gU28gDQorIyB0eXBlZGVmIHN0cnVjdCBUeXBlUyB7fSBUeXBlVCwgd2lsbCBhcHBlYXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYXMgYSBzdHJ1Y3QgDQorIyB3aXRoIG5hbWUgVHlwZVQuIFdoZW4gZGlzYWJsZWQgdGhlIHR5cGVkZWYgd2lsbCBhcHBlYXIgYXMgYSBtZW1iZXIgb2YgYSBmaWxlLCANCisjIG5hbWVzcGFjZSwgb3IgY2xhc3MuIEFuZCB0aGUgc3RydWN0IHdpbGwgYmUgbmFtZWQgVHlwZVMuIFRoaXMgY2FuIHR5cGljYWxseSANCisjIGJlIHVzZWZ1bCBmb3IgQyBjb2RlIGluIGNhc2UgdGhlIGNvZGluZyBjb252ZW50aW9uIGRpY3RhdGVzIHRoYXQgYWxsIGNvbXBvdW5kIA0KKyMgdHlwZXMgYXJlIHR5cGVkZWYnZWQgYW5kIG9ubHkgdGhlIHR5cGVkZWYgaXMgcmVmZXJlbmNlZCwgbmV2ZXIgdGhlIHRhZyBuYW1lLg0KKw0KK1RZUEVERUZfSElERVNfU1RSVUNUICAgPSBOTw0KKw0KKyMgVGhlIFNZTUJPTF9DQUNIRV9TSVpFIGRldGVybWluZXMgdGhlIHNpemUgb2YgdGhlIGludGVybmFsIGNhY2hlIHVzZSB0byANCisjIGRldGVybWluZSB3aGljaCBzeW1ib2xzIHRvIGtlZXAgaW4gbWVtb3J5IGFuZCB3aGljaCB0byBmbHVzaCB0byBkaXNrLiANCisjIFdoZW4gdGhlIGNhY2hlIGlzIGZ1bGwsIGxlc3Mgb2Z0ZW4gdXNlZCBzeW1ib2xzIHdpbGwgYmUgd3JpdHRlbiB0byBkaXNrLiANCisjIEZvciBzbWFsbCB0byBtZWRpdW0gc2l6ZSBwcm9qZWN0cyAoPDEwMDAgaW5wdXQgZmlsZXMpIHRoZSBkZWZhdWx0IHZhbHVlIGlzIA0KKyMgcHJvYmFibHkgZ29vZCBlbm91Z2guIEZvciBsYXJnZXIgcHJvamVjdHMgYSB0b28gc21hbGwgY2FjaGUgc2l6ZSBjYW4gY2F1c2UgDQorIyBkb3h5Z2VuIHRvIGJlIGJ1c3kgc3dhcHBpbmcgc3ltYm9scyB0byBhbmQgZnJvbSBkaXNrIG1vc3Qgb2YgdGhlIHRpbWUgDQorIyBjYXVzaW5nIGEgc2lnbmlmaWNhbnQgcGVyZm9ybWFuY2UgcGVuYWxpdHkuIA0KKyMgSWYgdGhlIHN5c3RlbSBoYXMgZW5vdWdoIHBoeXNpY2FsIG1lbW9yeSBpbmNyZWFzaW5nIHRoZSBjYWNoZSB3aWxsIGltcHJvdmUgdGhlIA0KKyMgcGVyZm9ybWFuY2UgYnkga2VlcGluZyBtb3JlIHN5bWJvbHMgaW4gbWVtb3J5LiBOb3RlIHRoYXQgdGhlIHZhbHVlIHdvcmtzIG9uIA0KKyMgYSBsb2dhcml0aG1pYyBzY2FsZSBzbyBpbmNyZWFzaW5nIHRoZSBzaXplIGJ5IG9uZSB3aWxsIHJvdWdobHkgZG91YmxlIHRoZSANCisjIG1lbW9yeSB1c2FnZS4gVGhlIGNhY2hlIHNpemUgaXMgZ2l2ZW4gYnkgdGhpcyBmb3JtdWxhOiANCisjIDJeKDE2K1NZTUJPTF9DQUNIRV9TSVpFKS4gVGhlIHZhbGlkIHJhbmdlIGlzIDAuLjksIHRoZSBkZWZhdWx0IGlzIDAsIA0KKyMgY29ycmVzcG9uZGluZyB0byBhIGNhY2hlIHNpemUgb2YgMl4xNiA9IDY1NTM2IHN5bWJvbHMNCisNCitTWU1CT0xfQ0FDSEVfU0laRSAgICAgID0gMA0KKw0KKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisjIEJ1aWxkIHJlbGF0ZWQgY29uZmlndXJhdGlvbiBvcHRpb25zDQorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKw0KKyMgSWYgdGhlIEVYVFJBQ1RfQUxMIHRhZyBpcyBzZXQgdG8gWUVTIGRveHlnZW4gd2lsbCBhc3N1bWUgYWxsIGVudGl0aWVzIGluIA0KKyMgZG9jdW1lbnRhdGlvbiBhcmUgZG9jdW1lbnRlZCwgZXZlbiBpZiBubyBkb2N1bWVudGF0aW9uIHdhcyBhdmFpbGFibGUuIA0KKyMgUHJpdmF0ZSBjbGFzcyBtZW1iZXJzIGFuZCBzdGF0aWMgZmlsZSBtZW1iZXJzIHdpbGwgYmUgaGlkZGVuIHVubGVzcyANCisjIHRoZSBFWFRSQUNUX1BSSVZBVEUgYW5kIEVYVFJBQ1RfU1RBVElDIHRhZ3MgYXJlIHNldCB0byBZRVMNCisNCitFWFRSQUNUX0FMTCAgICAgICAgICAgID0gTk8NCisNCisjIElmIHRoZSBFWFRSQUNUX1BSSVZBVEUgdGFnIGlzIHNldCB0byBZRVMgYWxsIHByaXZhdGUgbWVtYmVycyBvZiBhIGNsYXNzIA0KKyMgd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgZG9jdW1lbnRhdGlvbi4NCisNCitFWFRSQUNUX1BSSVZBVEUgICAgICAgID0gTk8NCisNCisjIElmIHRoZSBFWFRSQUNUX1NUQVRJQyB0YWcgaXMgc2V0IHRvIFlFUyBhbGwgc3RhdGljIG1lbWJlcnMgb2YgYSBmaWxlIA0KKyMgd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgZG9jdW1lbnRhdGlvbi4NCisNCitFWFRSQUNUX1NUQVRJQyAgICAgICAgID0gTk8NCisNCisjIElmIHRoZSBFWFRSQUNUX0xPQ0FMX0NMQVNTRVMgdGFnIGlzIHNldCB0byBZRVMgY2xhc3NlcyAoYW5kIHN0cnVjdHMpIA0KKyMgZGVmaW5lZCBsb2NhbGx5IGluIHNvdXJjZSBmaWxlcyB3aWxsIGJlIGluY2x1ZGVkIGluIHRoZSBkb2N1bWVudGF0aW9uLiANCisjIElmIHNldCB0byBOTyBvbmx5IGNsYXNzZXMgZGVmaW5lZCBpbiBoZWFkZXIgZmlsZXMgYXJlIGluY2x1ZGVkLg0KKw0KK0VYVFJBQ1RfTE9DQUxfQ0xBU1NFUyAgPSBZRVMNCisNCisjIFRoaXMgZmxhZyBpcyBvbmx5IHVzZWZ1bCBmb3IgT2JqZWN0aXZlLUMgY29kZS4gV2hlbiBzZXQgdG8gWUVTIGxvY2FsIA0KKyMgbWV0aG9kcywgd2hpY2ggYXJlIGRlZmluZWQgaW4gdGhlIGltcGxlbWVudGF0aW9uIHNlY3Rpb24gYnV0IG5vdCBpbiANCisjIHRoZSBpbnRlcmZhY2UgYXJlIGluY2x1ZGVkIGluIHRoZSBkb2N1bWVudGF0aW9uLiANCisjIElmIHNldCB0byBOTyAodGhlIGRlZmF1bHQpIG9ubHkgbWV0aG9kcyBpbiB0aGUgaW50ZXJmYWNlIGFyZSBpbmNsdWRlZC4NCisNCitFWFRSQUNUX0xPQ0FMX01FVEhPRFMgID0gTk8NCisNCisjIElmIHRoaXMgZmxhZyBpcyBzZXQgdG8gWUVTLCB0aGUgbWVtYmVycyBvZiBhbm9ueW1vdXMgbmFtZXNwYWNlcyB3aWxsIGJlIA0KKyMgZXh0cmFjdGVkIGFuZCBhcHBlYXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYXMgYSBuYW1lc3BhY2UgY2FsbGVkIA0KKyMgJ2Fub255bW91c19uYW1lc3BhY2V7ZmlsZX0nLCB3aGVyZSBmaWxlIHdpbGwgYmUgcmVwbGFjZWQgd2l0aCB0aGUgYmFzZSANCisjIG5hbWUgb2YgdGhlIGZpbGUgdGhhdCBjb250YWlucyB0aGUgYW5vbnltb3VzIG5hbWVzcGFjZS4gQnkgZGVmYXVsdCANCisjIGFub255bW91cyBuYW1lc3BhY2VzIGFyZSBoaWRkZW4uDQorDQorRVhUUkFDVF9BTk9OX05TUEFDRVMgICA9IE5PDQorDQorIyBJZiB0aGUgSElERV9VTkRPQ19NRU1CRVJTIHRhZyBpcyBzZXQgdG8gWUVTLCBEb3h5Z2VuIHdpbGwgaGlkZSBhbGwgDQorIyB1bmRvY3VtZW50ZWQgbWVtYmVycyBvZiBkb2N1bWVudGVkIGNsYXNzZXMsIGZpbGVzIG9yIG5hbWVzcGFjZXMuIA0KKyMgSWYgc2V0IHRvIE5PICh0aGUgZGVmYXVsdCkgdGhlc2UgbWVtYmVycyB3aWxsIGJlIGluY2x1ZGVkIGluIHRoZSANCisjIHZhcmlvdXMgb3ZlcnZpZXdzLCBidXQgbm8gZG9jdW1lbnRhdGlvbiBzZWN0aW9uIGlzIGdlbmVyYXRlZC4gDQorIyBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IGlmIEVYVFJBQ1RfQUxMIGlzIGVuYWJsZWQuDQorDQorSElERV9VTkRPQ19NRU1CRVJTICAgICA9IE5PDQorDQorIyBJZiB0aGUgSElERV9VTkRPQ19DTEFTU0VTIHRhZyBpcyBzZXQgdG8gWUVTLCBEb3h5Z2VuIHdpbGwgaGlkZSBhbGwgDQorIyB1bmRvY3VtZW50ZWQgY2xhc3NlcyB0aGF0IGFyZSBub3JtYWxseSB2aXNpYmxlIGluIHRoZSBjbGFzcyBoaWVyYXJjaHkuIA0KKyMgSWYgc2V0IHRvIE5PICh0aGUgZGVmYXVsdCkgdGhlc2UgY2xhc3NlcyB3aWxsIGJlIGluY2x1ZGVkIGluIHRoZSB2YXJpb3VzIA0KKyMgb3ZlcnZpZXdzLiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IGlmIEVYVFJBQ1RfQUxMIGlzIGVuYWJsZWQuDQorDQorSElERV9VTkRPQ19DTEFTU0VTICAgICA9IE5PDQorDQorIyBJZiB0aGUgSElERV9GUklFTkRfQ09NUE9VTkRTIHRhZyBpcyBzZXQgdG8gWUVTLCBEb3h5Z2VuIHdpbGwgaGlkZSBhbGwgDQorIyBmcmllbmQgKGNsYXNzfHN0cnVjdHx1bmlvbikgZGVjbGFyYXRpb25zLiANCisjIElmIHNldCB0byBOTyAodGhlIGRlZmF1bHQpIHRoZXNlIGRlY2xhcmF0aW9ucyB3aWxsIGJlIGluY2x1ZGVkIGluIHRoZSANCisjIGRvY3VtZW50YXRpb24uDQorDQorSElERV9GUklFTkRfQ09NUE9VTkRTICA9IE5PDQorDQorIyBJZiB0aGUgSElERV9JTl9CT0RZX0RPQ1MgdGFnIGlzIHNldCB0byBZRVMsIERveHlnZW4gd2lsbCBoaWRlIGFueSANCisjIGRvY3VtZW50YXRpb24gYmxvY2tzIGZvdW5kIGluc2lkZSB0aGUgYm9keSBvZiBhIGZ1bmN0aW9uLiANCisjIElmIHNldCB0byBOTyAodGhlIGRlZmF1bHQpIHRoZXNlIGJsb2NrcyB3aWxsIGJlIGFwcGVuZGVkIHRvIHRoZSANCisjIGZ1bmN0aW9uJ3MgZGV0YWlsZWQgZG9jdW1lbnRhdGlvbiBibG9jay4NCisNCitISURFX0lOX0JPRFlfRE9DUyAgICAgID0gTk8NCisNCisjIFRoZSBJTlRFUk5BTF9ET0NTIHRhZyBkZXRlcm1pbmVzIGlmIGRvY3VtZW50YXRpb24gDQorIyB0aGF0IGlzIHR5cGVkIGFmdGVyIGEgXGludGVybmFsIGNvbW1hbmQgaXMgaW5jbHVkZWQuIElmIHRoZSB0YWcgaXMgc2V0IA0KKyMgdG8gTk8gKHRoZSBkZWZhdWx0KSB0aGVuIHRoZSBkb2N1bWVudGF0aW9uIHdpbGwgYmUgZXhjbHVkZWQuIA0KKyMgU2V0IGl0IHRvIFlFUyB0byBpbmNsdWRlIHRoZSBpbnRlcm5hbCBkb2N1bWVudGF0aW9uLg0KKw0KK0lOVEVSTkFMX0RPQ1MgICAgICAgICAgPSBOTw0KKw0KKyMgSWYgdGhlIENBU0VfU0VOU0VfTkFNRVMgdGFnIGlzIHNldCB0byBOTyB0aGVuIERveHlnZW4gd2lsbCBvbmx5IGdlbmVyYXRlIA0KKyMgZmlsZSBuYW1lcyBpbiBsb3dlci1jYXNlIGxldHRlcnMuIElmIHNldCB0byBZRVMgdXBwZXItY2FzZSBsZXR0ZXJzIGFyZSBhbHNvIA0KKyMgYWxsb3dlZC4gVGhpcyBpcyB1c2VmdWwgaWYgeW91IGhhdmUgY2xhc3NlcyBvciBmaWxlcyB3aG9zZSBuYW1lcyBvbmx5IGRpZmZlciANCisjIGluIGNhc2UgYW5kIGlmIHlvdXIgZmlsZSBzeXN0ZW0gc3VwcG9ydHMgY2FzZSBzZW5zaXRpdmUgZmlsZSBuYW1lcy4gV2luZG93cyANCisjIGFuZCBNYWMgdXNlcnMgYXJlIGFkdmlzZWQgdG8gc2V0IHRoaXMgb3B0aW9uIHRvIE5PLg0KKw0KK0NBU0VfU0VOU0VfTkFNRVMgICAgICAgPSBOTw0KKw0KKyMgSWYgdGhlIEhJREVfU0NPUEVfTkFNRVMgdGFnIGlzIHNldCB0byBOTyAodGhlIGRlZmF1bHQpIHRoZW4gRG94eWdlbiANCisjIHdpbGwgc2hvdyBtZW1iZXJzIHdpdGggdGhlaXIgZnVsbCBjbGFzcyBhbmQgbmFtZXNwYWNlIHNjb3BlcyBpbiB0aGUgDQorIyBkb2N1bWVudGF0aW9uLiBJZiBzZXQgdG8gWUVTIHRoZSBzY29wZSB3aWxsIGJlIGhpZGRlbi4NCisNCitISURFX1NDT1BFX05BTUVTICAgICAgID0gTk8NCisNCisjIElmIHRoZSBTSE9XX0lOQ0xVREVfRklMRVMgdGFnIGlzIHNldCB0byBZRVMgKHRoZSBkZWZhdWx0KSB0aGVuIERveHlnZW4gDQorIyB3aWxsIHB1dCBhIGxpc3Qgb2YgdGhlIGZpbGVzIHRoYXQgYXJlIGluY2x1ZGVkIGJ5IGEgZmlsZSBpbiB0aGUgZG9jdW1lbnRhdGlvbiANCisjIG9mIHRoYXQgZmlsZS4NCisNCitTSE9XX0lOQ0xVREVfRklMRVMgICAgID0gWUVTDQorDQorIyBJZiB0aGUgRk9SQ0VfTE9DQUxfSU5DTFVERVMgdGFnIGlzIHNldCB0byBZRVMgdGhlbiBEb3h5Z2VuIA0KKyMgd2lsbCBsaXN0IGluY2x1ZGUgZmlsZXMgd2l0aCBkb3VibGUgcXVvdGVzIGluIHRoZSBkb2N1bWVudGF0aW9uIA0KKyMgcmF0aGVyIHRoYW4gd2l0aCBzaGFycCBicmFja2V0cy4NCisNCitGT1JDRV9MT0NBTF9JTkNMVURFUyAgID0gTk8NCisNCisjIElmIHRoZSBJTkxJTkVfSU5GTyB0YWcgaXMgc2V0IHRvIFlFUyAodGhlIGRlZmF1bHQpIHRoZW4gYSB0YWcgW2lubGluZV0gDQorIyBpcyBpbnNlcnRlZCBpbiB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgaW5saW5lIG1lbWJlcnMuDQorDQorSU5MSU5FX0lORk8gICAgICAgICAgICA9IFlFUw0KKw0KKyMgSWYgdGhlIFNPUlRfTUVNQkVSX0RPQ1MgdGFnIGlzIHNldCB0byBZRVMgKHRoZSBkZWZhdWx0KSB0aGVuIGRveHlnZW4gDQorIyB3aWxsIHNvcnQgdGhlIChkZXRhaWxlZCkgZG9jdW1lbnRhdGlvbiBvZiBmaWxlIGFuZCBjbGFzcyBtZW1iZXJzIA0KKyMgYWxwaGFiZXRpY2FsbHkgYnkgbWVtYmVyIG5hbWUuIElmIHNldCB0byBOTyB0aGUgbWVtYmVycyB3aWxsIGFwcGVhciBpbiANCisjIGRlY2xhcmF0aW9uIG9yZGVyLg0KKw0KK1NPUlRfTUVNQkVSX0RPQ1MgICAgICAgPSBZRVMNCisNCisjIElmIHRoZSBTT1JUX0JSSUVGX0RPQ1MgdGFnIGlzIHNldCB0byBZRVMgdGhlbiBkb3h5Z2VuIHdpbGwgc29ydCB0aGUgDQorIyBicmllZiBkb2N1bWVudGF0aW9uIG9mIGZpbGUsIG5hbWVzcGFjZSBhbmQgY2xhc3MgbWVtYmVycyBhbHBoYWJldGljYWxseSANCisjIGJ5IG1lbWJlciBuYW1lLiBJZiBzZXQgdG8gTk8gKHRoZSBkZWZhdWx0KSB0aGUgbWVtYmVycyB3aWxsIGFwcGVhciBpbiANCisjIGRlY2xhcmF0aW9uIG9yZGVyLg0KKw0KK1NPUlRfQlJJRUZfRE9DUyAgICAgICAgPSBOTw0KKw0KKyMgSWYgdGhlIFNPUlRfTUVNQkVSU19DVE9SU18xU1QgdGFnIGlzIHNldCB0byBZRVMgdGhlbiBkb3h5Z2VuIA0KKyMgd2lsbCBzb3J0IHRoZSAoYnJpZWYgYW5kIGRldGFpbGVkKSBkb2N1bWVudGF0aW9uIG9mIGNsYXNzIG1lbWJlcnMgc28gdGhhdCANCisjIGNvbnN0cnVjdG9ycyBhbmQgZGVzdHJ1Y3RvcnMgYXJlIGxpc3RlZCBmaXJzdC4gSWYgc2V0IHRvIE5PICh0aGUgZGVmYXVsdCkgDQorIyB0aGUgY29uc3RydWN0b3JzIHdpbGwgYXBwZWFyIGluIHRoZSByZXNwZWN0aXZlIG9yZGVycyBkZWZpbmVkIGJ5IA0KKyMgU09SVF9NRU1CRVJfRE9DUyBhbmQgU09SVF9CUklFRl9ET0NTLiANCisjIFRoaXMgdGFnIHdpbGwgYmUgaWdub3JlZCBmb3IgYnJpZWYgZG9jcyBpZiBTT1JUX0JSSUVGX0RPQ1MgaXMgc2V0IHRvIE5PIA0KKyMgYW5kIGlnbm9yZWQgZm9yIGRldGFpbGVkIGRvY3MgaWYgU09SVF9NRU1CRVJfRE9DUyBpcyBzZXQgdG8gTk8uDQorDQorU09SVF9NRU1CRVJTX0NUT1JTXzFTVCA9IE5PDQorDQorIyBJZiB0aGUgU09SVF9HUk9VUF9OQU1FUyB0YWcgaXMgc2V0IHRvIFlFUyB0aGVuIGRveHlnZW4gd2lsbCBzb3J0IHRoZSANCisjIGhpZXJhcmNoeSBvZiBncm91cCBuYW1lcyBpbnRvIGFscGhhYmV0aWNhbCBvcmRlci4gSWYgc2V0IHRvIE5PICh0aGUgZGVmYXVsdCkgDQorIyB0aGUgZ3JvdXAgbmFtZXMgd2lsbCBhcHBlYXIgaW4gdGhlaXIgZGVmaW5lZCBvcmRlci4NCisNCitTT1JUX0dST1VQX05BTUVTICAgICAgID0gTk8NCisNCisjIElmIHRoZSBTT1JUX0JZX1NDT1BFX05BTUUgdGFnIGlzIHNldCB0byBZRVMsIHRoZSBjbGFzcyBsaXN0IHdpbGwgYmUgDQorIyBzb3J0ZWQgYnkgZnVsbHktcXVhbGlmaWVkIG5hbWVzLCBpbmNsdWRpbmcgbmFtZXNwYWNlcy4gSWYgc2V0IHRvIA0KKyMgTk8gKHRoZSBkZWZhdWx0KSwgdGhlIGNsYXNzIGxpc3Qgd2lsbCBiZSBzb3J0ZWQgb25seSBieSBjbGFzcyBuYW1lLCANCisjIG5vdCBpbmNsdWRpbmcgdGhlIG5hbWVzcGFjZSBwYXJ0LiANCisjIE5vdGU6IFRoaXMgb3B0aW9uIGlzIG5vdCB2ZXJ5IHVzZWZ1bCBpZiBISURFX1NDT1BFX05BTUVTIGlzIHNldCB0byBZRVMuIA0KKyMgTm90ZTogVGhpcyBvcHRpb24gYXBwbGllcyBvbmx5IHRvIHRoZSBjbGFzcyBsaXN0LCBub3QgdG8gdGhlIA0KKyMgYWxwaGFiZXRpY2FsIGxpc3QuDQorDQorU09SVF9CWV9TQ09QRV9OQU1FICAgICA9IE5PDQorDQorIyBUaGUgR0VORVJBVEVfVE9ET0xJU1QgdGFnIGNhbiBiZSB1c2VkIHRvIGVuYWJsZSAoWUVTKSBvciANCisjIGRpc2FibGUgKE5PKSB0aGUgdG9kbyBsaXN0LiBUaGlzIGxpc3QgaXMgY3JlYXRlZCBieSBwdXR0aW5nIFx0b2RvIA0KKyMgY29tbWFuZHMgaW4gdGhlIGRvY3VtZW50YXRpb24uDQorDQorR0VORVJBVEVfVE9ET0xJU1QgICAgICA9IFlFUw0KKw0KKyMgVGhlIEdFTkVSQVRFX1RFU1RMSVNUIHRhZyBjYW4gYmUgdXNlZCB0byBlbmFibGUgKFlFUykgb3IgDQorIyBkaXNhYmxlIChOTykgdGhlIHRlc3QgbGlzdC4gVGhpcyBsaXN0IGlzIGNyZWF0ZWQgYnkgcHV0dGluZyBcdGVzdCANCisjIGNvbW1hbmRzIGluIHRoZSBkb2N1bWVudGF0aW9uLg0KKw0KK0dFTkVSQVRFX1RFU1RMSVNUICAgICAgPSBZRVMNCisNCisjIFRoZSBHRU5FUkFURV9CVUdMSVNUIHRhZyBjYW4gYmUgdXNlZCB0byBlbmFibGUgKFlFUykgb3IgDQorIyBkaXNhYmxlIChOTykgdGhlIGJ1ZyBsaXN0LiBUaGlzIGxpc3QgaXMgY3JlYXRlZCBieSBwdXR0aW5nIFxidWcgDQorIyBjb21tYW5kcyBpbiB0aGUgZG9jdW1lbnRhdGlvbi4NCisNCitHRU5FUkFURV9CVUdMSVNUICAgICAgID0gWUVTDQorDQorIyBUaGUgR0VORVJBVEVfREVQUkVDQVRFRExJU1QgdGFnIGNhbiBiZSB1c2VkIHRvIGVuYWJsZSAoWUVTKSBvciANCisjIGRpc2FibGUgKE5PKSB0aGUgZGVwcmVjYXRlZCBsaXN0LiBUaGlzIGxpc3QgaXMgY3JlYXRlZCBieSBwdXR0aW5nIA0KKyMgXGRlcHJlY2F0ZWQgY29tbWFuZHMgaW4gdGhlIGRvY3VtZW50YXRpb24uDQorDQorR0VORVJBVEVfREVQUkVDQVRFRExJU1Q9IFlFUw0KKw0KKyMgVGhlIEVOQUJMRURfU0VDVElPTlMgdGFnIGNhbiBiZSB1c2VkIHRvIGVuYWJsZSBjb25kaXRpb25hbCANCisjIGRvY3VtZW50YXRpb24gc2VjdGlvbnMsIG1hcmtlZCBieSBcaWYgc2VjdGlvbm5hbWUgLi4uIFxlbmRpZi4NCisNCitFTkFCTEVEX1NFQ1RJT05TICAgICAgID0gDQorDQorIyBUaGUgTUFYX0lOSVRJQUxJWkVSX0xJTkVTIHRhZyBkZXRlcm1pbmVzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBsaW5lcyANCisjIHRoZSBpbml0aWFsIHZhbHVlIG9mIGEgdmFyaWFibGUgb3IgbWFjcm8gY29uc2lzdHMgb2YgZm9yIGl0IHRvIGFwcGVhciBpbiANCisjIHRoZSBkb2N1bWVudGF0aW9uLiBJZiB0aGUgaW5pdGlhbGl6ZXIgY29uc2lzdHMgb2YgbW9yZSBsaW5lcyB0aGFuIHNwZWNpZmllZCANCisjIGhlcmUgaXQgd2lsbCBiZSBoaWRkZW4uIFVzZSBhIHZhbHVlIG9mIDAgdG8gaGlkZSBpbml0aWFsaXplcnMgY29tcGxldGVseS4gDQorIyBUaGUgYXBwZWFyYW5jZSBvZiB0aGUgaW5pdGlhbGl6ZXIgb2YgaW5kaXZpZHVhbCB2YXJpYWJsZXMgYW5kIG1hY3JvcyBpbiB0aGUgDQorIyBkb2N1bWVudGF0aW9uIGNhbiBiZSBjb250cm9sbGVkIHVzaW5nIFxzaG93aW5pdGlhbGl6ZXIgb3IgXGhpZGVpbml0aWFsaXplciANCisjIGNvbW1hbmQgaW4gdGhlIGRvY3VtZW50YXRpb24gcmVnYXJkbGVzcyBvZiB0aGlzIHNldHRpbmcuDQorDQorTUFYX0lOSVRJQUxJWkVSX0xJTkVTICA9IDMwDQorDQorIyBTZXQgdGhlIFNIT1dfVVNFRF9GSUxFUyB0YWcgdG8gTk8gdG8gZGlzYWJsZSB0aGUgbGlzdCBvZiBmaWxlcyBnZW5lcmF0ZWQgDQorIyBhdCB0aGUgYm90dG9tIG9mIHRoZSBkb2N1bWVudGF0aW9uIG9mIGNsYXNzZXMgYW5kIHN0cnVjdHMuIElmIHNldCB0byBZRVMgdGhlIA0KKyMgbGlzdCB3aWxsIG1lbnRpb24gdGhlIGZpbGVzIHRoYXQgd2VyZSB1c2VkIHRvIGdlbmVyYXRlIHRoZSBkb2N1bWVudGF0aW9uLg0KKw0KK1NIT1dfVVNFRF9GSUxFUyAgICAgICAgPSBZRVMNCisNCisjIElmIHRoZSBzb3VyY2VzIGluIHlvdXIgcHJvamVjdCBhcmUgZGlzdHJpYnV0ZWQgb3ZlciBtdWx0aXBsZSBkaXJlY3RvcmllcyANCisjIHRoZW4gc2V0dGluZyB0aGUgU0hPV19ESVJFQ1RPUklFUyB0YWcgdG8gWUVTIHdpbGwgc2hvdyB0aGUgZGlyZWN0b3J5IGhpZXJhcmNoeSANCisjIGluIHRoZSBkb2N1bWVudGF0aW9uLiBUaGUgZGVmYXVsdCBpcyBOTy4NCisNCitTSE9XX0RJUkVDVE9SSUVTICAgICAgID0gTk8NCisNCisjIFNldCB0aGUgU0hPV19GSUxFUyB0YWcgdG8gTk8gdG8gZGlzYWJsZSB0aGUgZ2VuZXJhdGlvbiBvZiB0aGUgRmlsZXMgcGFnZS4gDQorIyBUaGlzIHdpbGwgcmVtb3ZlIHRoZSBGaWxlcyBlbnRyeSBmcm9tIHRoZSBRdWljayBJbmRleCBhbmQgZnJvbSB0aGUgDQorIyBGb2xkZXIgVHJlZSBWaWV3IChpZiBzcGVjaWZpZWQpLiBUaGUgZGVmYXVsdCBpcyBZRVMuDQorDQorU0hPV19GSUxFUyAgICAgICAgICAgICA9IFlFUw0KKw0KKyMgU2V0IHRoZSBTSE9XX05BTUVTUEFDRVMgdGFnIHRvIE5PIHRvIGRpc2FibGUgdGhlIGdlbmVyYXRpb24gb2YgdGhlIA0KKyMgTmFtZXNwYWNlcyBwYWdlLiAgVGhpcyB3aWxsIHJlbW92ZSB0aGUgTmFtZXNwYWNlcyBlbnRyeSBmcm9tIHRoZSBRdWljayBJbmRleCANCisjIGFuZCBmcm9tIHRoZSBGb2xkZXIgVHJlZSBWaWV3IChpZiBzcGVjaWZpZWQpLiBUaGUgZGVmYXVsdCBpcyBZRVMuDQorDQorU0hPV19OQU1FU1BBQ0VTICAgICAgICA9IFlFUw0KKw0KKyMgVGhlIEZJTEVfVkVSU0lPTl9GSUxURVIgdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgYSBwcm9ncmFtIG9yIHNjcmlwdCB0aGF0IA0KKyMgZG94eWdlbiBzaG91bGQgaW52b2tlIHRvIGdldCB0aGUgY3VycmVudCB2ZXJzaW9uIGZvciBlYWNoIGZpbGUgKHR5cGljYWxseSBmcm9tIA0KKyMgdGhlIHZlcnNpb24gY29udHJvbCBzeXN0ZW0pLiBEb3h5Z2VuIHdpbGwgaW52b2tlIHRoZSBwcm9ncmFtIGJ5IGV4ZWN1dGluZyAodmlhIA0KKyMgcG9wZW4oKSkgdGhlIGNvbW1hbmQgPGNvbW1hbmQ+IDxpbnB1dC1maWxlPiwgd2hlcmUgPGNvbW1hbmQ+IGlzIHRoZSB2YWx1ZSBvZiANCisjIHRoZSBGSUxFX1ZFUlNJT05fRklMVEVSIHRhZywgYW5kIDxpbnB1dC1maWxlPiBpcyB0aGUgbmFtZSBvZiBhbiBpbnB1dCBmaWxlIA0KKyMgcHJvdmlkZWQgYnkgZG94eWdlbi4gV2hhdGV2ZXIgdGhlIHByb2dyYW0gd3JpdGVzIHRvIHN0YW5kYXJkIG91dHB1dCANCisjIGlzIHVzZWQgYXMgdGhlIGZpbGUgdmVyc2lvbi4gU2VlIHRoZSBtYW51YWwgZm9yIGV4YW1wbGVzLg0KKw0KK0ZJTEVfVkVSU0lPTl9GSUxURVIgICAgPSANCisNCisjIFRoZSBMQVlPVVRfRklMRSB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBhIGxheW91dCBmaWxlIHdoaWNoIHdpbGwgYmUgcGFyc2VkIA0KKyMgYnkgZG94eWdlbi4gVGhlIGxheW91dCBmaWxlIGNvbnRyb2xzIHRoZSBnbG9iYWwgc3RydWN0dXJlIG9mIHRoZSBnZW5lcmF0ZWQgDQorIyBvdXRwdXQgZmlsZXMgaW4gYW4gb3V0cHV0IGZvcm1hdCBpbmRlcGVuZGVudCB3YXkuIFRoZSBjcmVhdGUgdGhlIGxheW91dCBmaWxlIA0KKyMgdGhhdCByZXByZXNlbnRzIGRveHlnZW4ncyBkZWZhdWx0cywgcnVuIGRveHlnZW4gd2l0aCB0aGUgLWwgb3B0aW9uLiANCisjIFlvdSBjYW4gb3B0aW9uYWxseSBzcGVjaWZ5IGEgZmlsZSBuYW1lIGFmdGVyIHRoZSBvcHRpb24sIGlmIG9taXR0ZWQgDQorIyBEb3h5Z2VuTGF5b3V0LnhtbCB3aWxsIGJlIHVzZWQgYXMgdGhlIG5hbWUgb2YgdGhlIGxheW91dCBmaWxlLg0KKw0KK0xBWU9VVF9GSUxFICAgICAgICAgICAgPSANCisNCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorIyBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byB3YXJuaW5nIGFuZCBwcm9ncmVzcyBtZXNzYWdlcw0KKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisNCisjIFRoZSBRVUlFVCB0YWcgY2FuIGJlIHVzZWQgdG8gdHVybiBvbi9vZmYgdGhlIG1lc3NhZ2VzIHRoYXQgYXJlIGdlbmVyYXRlZCANCisjIGJ5IGRveHlnZW4uIFBvc3NpYmxlIHZhbHVlcyBhcmUgWUVTIGFuZCBOTy4gSWYgbGVmdCBibGFuayBOTyBpcyB1c2VkLg0KKw0KK1FVSUVUICAgICAgICAgICAgICAgICAgPSBOTw0KKw0KKyMgVGhlIFdBUk5JTkdTIHRhZyBjYW4gYmUgdXNlZCB0byB0dXJuIG9uL29mZiB0aGUgd2FybmluZyBtZXNzYWdlcyB0aGF0IGFyZSANCisjIGdlbmVyYXRlZCBieSBkb3h5Z2VuLiBQb3NzaWJsZSB2YWx1ZXMgYXJlIFlFUyBhbmQgTk8uIElmIGxlZnQgYmxhbmsgDQorIyBOTyBpcyB1c2VkLg0KKw0KK1dBUk5JTkdTICAgICAgICAgICAgICAgPSBZRVMNCisNCisjIElmIFdBUk5fSUZfVU5ET0NVTUVOVEVEIGlzIHNldCB0byBZRVMsIHRoZW4gZG94eWdlbiB3aWxsIGdlbmVyYXRlIHdhcm5pbmdzIA0KKyMgZm9yIHVuZG9jdW1lbnRlZCBtZW1iZXJzLiBJZiBFWFRSQUNUX0FMTCBpcyBzZXQgdG8gWUVTIHRoZW4gdGhpcyBmbGFnIHdpbGwgDQorIyBhdXRvbWF0aWNhbGx5IGJlIGRpc2FibGVkLg0KKw0KK1dBUk5fSUZfVU5ET0NVTUVOVEVEICAgPSBZRVMNCisNCisjIElmIFdBUk5fSUZfRE9DX0VSUk9SIGlzIHNldCB0byBZRVMsIGRveHlnZW4gd2lsbCBnZW5lcmF0ZSB3YXJuaW5ncyBmb3IgDQorIyBwb3RlbnRpYWwgZXJyb3JzIGluIHRoZSBkb2N1bWVudGF0aW9uLCBzdWNoIGFzIG5vdCBkb2N1bWVudGluZyBzb21lIA0KKyMgcGFyYW1ldGVycyBpbiBhIGRvY3VtZW50ZWQgZnVuY3Rpb24sIG9yIGRvY3VtZW50aW5nIHBhcmFtZXRlcnMgdGhhdCANCisjIGRvbid0IGV4aXN0IG9yIHVzaW5nIG1hcmt1cCBjb21tYW5kcyB3cm9uZ2x5Lg0KKw0KK1dBUk5fSUZfRE9DX0VSUk9SICAgICAgPSBZRVMNCisNCisjIFRoZSBXQVJOX05PX1BBUkFNRE9DIG9wdGlvbiBjYW4gYmUgZW5hYmxlZCB0byBnZXQgd2FybmluZ3MgZm9yIA0KKyMgZnVuY3Rpb25zIHRoYXQgYXJlIGRvY3VtZW50ZWQsIGJ1dCBoYXZlIG5vIGRvY3VtZW50YXRpb24gZm9yIHRoZWlyIHBhcmFtZXRlcnMgDQorIyBvciByZXR1cm4gdmFsdWUuIElmIHNldCB0byBOTyAodGhlIGRlZmF1bHQpIGRveHlnZW4gd2lsbCBvbmx5IHdhcm4gYWJvdXQgDQorIyB3cm9uZyBvciBpbmNvbXBsZXRlIHBhcmFtZXRlciBkb2N1bWVudGF0aW9uLCBidXQgbm90IGFib3V0IHRoZSBhYnNlbmNlIG9mIA0KKyMgZG9jdW1lbnRhdGlvbi4NCisNCitXQVJOX05PX1BBUkFNRE9DICAgICAgID0gTk8NCisNCisjIFRoZSBXQVJOX0ZPUk1BVCB0YWcgZGV0ZXJtaW5lcyB0aGUgZm9ybWF0IG9mIHRoZSB3YXJuaW5nIG1lc3NhZ2VzIHRoYXQgDQorIyBkb3h5Z2VuIGNhbiBwcm9kdWNlLiBUaGUgc3RyaW5nIHNob3VsZCBjb250YWluIHRoZSAkZmlsZSwgJGxpbmUsIGFuZCAkdGV4dCANCisjIHRhZ3MsIHdoaWNoIHdpbGwgYmUgcmVwbGFjZWQgYnkgdGhlIGZpbGUgYW5kIGxpbmUgbnVtYmVyIGZyb20gd2hpY2ggdGhlIA0KKyMgd2FybmluZyBvcmlnaW5hdGVkIGFuZCB0aGUgd2FybmluZyB0ZXh0LiBPcHRpb25hbGx5IHRoZSBmb3JtYXQgbWF5IGNvbnRhaW4gDQorIyAkdmVyc2lvbiwgd2hpY2ggd2lsbCBiZSByZXBsYWNlZCBieSB0aGUgdmVyc2lvbiBvZiB0aGUgZmlsZSAoaWYgaXQgY291bGQgDQorIyBiZSBvYnRhaW5lZCB2aWEgRklMRV9WRVJTSU9OX0ZJTFRFUikNCisNCitXQVJOX0ZPUk1BVCAgICAgICAgICAgID0gIiRmaWxlOiRsaW5lOiAkdGV4dCINCisNCisjIFRoZSBXQVJOX0xPR0ZJTEUgdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgYSBmaWxlIHRvIHdoaWNoIHdhcm5pbmcgDQorIyBhbmQgZXJyb3IgbWVzc2FnZXMgc2hvdWxkIGJlIHdyaXR0ZW4uIElmIGxlZnQgYmxhbmsgdGhlIG91dHB1dCBpcyB3cml0dGVuIA0KKyMgdG8gc3RkZXJyLg0KKw0KK1dBUk5fTE9HRklMRSAgICAgICAgICAgPSANCisNCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorIyBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byB0aGUgaW5wdXQgZmlsZXMNCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorDQorIyBUaGUgSU5QVVQgdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgdGhlIGZpbGVzIGFuZC9vciBkaXJlY3RvcmllcyB0aGF0IGNvbnRhaW4gDQorIyBkb2N1bWVudGVkIHNvdXJjZSBmaWxlcy4gWW91IG1heSBlbnRlciBmaWxlIG5hbWVzIGxpa2UgIm15ZmlsZS5jcHAiIG9yIA0KKyMgZGlyZWN0b3JpZXMgbGlrZSAiL3Vzci9zcmMvbXlwcm9qZWN0Ii4gU2VwYXJhdGUgdGhlIGZpbGVzIG9yIGRpcmVjdG9yaWVzIA0KKyMgd2l0aCBzcGFjZXMuDQorDQorSU5QVVQgICAgICAgICAgICAgICAgICA9IEM6L1dpbmRSaXZlci93b3Jrc3BhY2UvV1BJTGliDQorDQorIyBUaGlzIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IHRoZSBjaGFyYWN0ZXIgZW5jb2Rpbmcgb2YgdGhlIHNvdXJjZSBmaWxlcyANCisjIHRoYXQgZG94eWdlbiBwYXJzZXMuIEludGVybmFsbHkgZG94eWdlbiB1c2VzIHRoZSBVVEYtOCBlbmNvZGluZywgd2hpY2ggaXMgDQorIyBhbHNvIHRoZSBkZWZhdWx0IGlucHV0IGVuY29kaW5nLiBEb3h5Z2VuIHVzZXMgbGliaWNvbnYgKG9yIHRoZSBpY29udiBidWlsdCANCisjIGludG8gbGliYykgZm9yIHRoZSB0cmFuc2NvZGluZy4gU2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9saWJpY29udiBmb3IgDQorIyB0aGUgbGlzdCBvZiBwb3NzaWJsZSBlbmNvZGluZ3MuDQorDQorSU5QVVRfRU5DT0RJTkcgICAgICAgICA9IFVURi04DQorDQorIyBJZiB0aGUgdmFsdWUgb2YgdGhlIElOUFVUIHRhZyBjb250YWlucyBkaXJlY3RvcmllcywgeW91IGNhbiB1c2UgdGhlIA0KKyMgRklMRV9QQVRURVJOUyB0YWcgdG8gc3BlY2lmeSBvbmUgb3IgbW9yZSB3aWxkY2FyZCBwYXR0ZXJuIChsaWtlICouY3BwIA0KKyMgYW5kICouaCkgdG8gZmlsdGVyIG91dCB0aGUgc291cmNlLWZpbGVzIGluIHRoZSBkaXJlY3Rvcmllcy4gSWYgbGVmdCANCisjIGJsYW5rIHRoZSBmb2xsb3dpbmcgcGF0dGVybnMgYXJlIHRlc3RlZDogDQorIyAqLmMgKi5jYyAqLmN4eCAqLmNwcCAqLmMrKyAqLmQgKi5qYXZhICouaWkgKi5peHggKi5pcHAgKi5pKysgKi5pbmwgKi5oICouaGggDQorIyAqLmh4eCAqLmhwcCAqLmgrKyAqLmlkbCAqLm9kbCAqLmNzICoucGhwICoucGhwMyAqLmluYyAqLm0gKi5tbSAqLmRveCAqLnB5IA0KKyMgKi5mOTAgKi5mICoudmhkICoudmhkbA0KKw0KK0ZJTEVfUEFUVEVSTlMgICAgICAgICAgPSAqLmNwcCBcDQorICAgICAgICAgICAgICAgICAgICAgICAgICouaA0KKw0KKyMgVGhlIFJFQ1VSU0lWRSB0YWcgY2FuIGJlIHVzZWQgdG8gdHVybiBzcGVjaWZ5IHdoZXRoZXIgb3Igbm90IHN1YmRpcmVjdG9yaWVzIA0KKyMgc2hvdWxkIGJlIHNlYXJjaGVkIGZvciBpbnB1dCBmaWxlcyBhcyB3ZWxsLiBQb3NzaWJsZSB2YWx1ZXMgYXJlIFlFUyBhbmQgTk8uIA0KKyMgSWYgbGVmdCBibGFuayBOTyBpcyB1c2VkLg0KKw0KK1JFQ1VSU0lWRSAgICAgICAgICAgICAgPSBZRVMNCisNCisjIFRoZSBFWENMVURFIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGZpbGVzIGFuZC9vciBkaXJlY3RvcmllcyB0aGF0IHNob3VsZCANCisjIGV4Y2x1ZGVkIGZyb20gdGhlIElOUFVUIHNvdXJjZSBmaWxlcy4gVGhpcyB3YXkgeW91IGNhbiBlYXNpbHkgZXhjbHVkZSBhIA0KKyMgc3ViZGlyZWN0b3J5IGZyb20gYSBkaXJlY3RvcnkgdHJlZSB3aG9zZSByb290IGlzIHNwZWNpZmllZCB3aXRoIHRoZSBJTlBVVCB0YWcuDQorDQorRVhDTFVERSAgICAgICAgICAgICAgICA9IEM6L1dpbmRSaXZlci93b3Jrc3BhY2UvV1BJTGliL0NBTiBcDQorICAgICAgICAgICAgICAgICAgICAgICAgIEM6L1dpbmRSaXZlci93b3Jrc3BhY2UvV1BJTGliL0NoaXBPYmplY3QgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICBDOi9XaW5kUml2ZXIvd29ya3NwYWNlL1dQSUxpYi9OZXR3b3JrQ29tbXVuaWNhdGlvbiBcDQorICAgICAgICAgICAgICAgICAgICAgICAgIEM6L1dpbmRSaXZlci93b3Jrc3BhY2UvV1BJTGliL1BQQzYwM2dudSBcDQorICAgICAgICAgICAgICAgICAgICAgICAgIEM6L1dpbmRSaXZlci93b3Jrc3BhY2UvV1BJTGliL1NjcmlwdHMgXA0KKyAgICAgICAgICAgICAgICAgICAgICAgICBDOi9XaW5kUml2ZXIvd29ya3NwYWNlL1dQSUxpYi92aXNhIFwNCisgICAgICAgICAgICAgICAgICAgICAgICAgQzovV2luZFJpdmVyL3dvcmtzcGFjZS9XUElMaWIvbml2aXNpb24uaA0KKw0KKyMgVGhlIEVYQ0xVREVfU1lNTElOS1MgdGFnIGNhbiBiZSB1c2VkIHNlbGVjdCB3aGV0aGVyIG9yIG5vdCBmaWxlcyBvciANCisjIGRpcmVjdG9yaWVzIHRoYXQgYXJlIHN5bWJvbGljIGxpbmtzIChhIFVuaXggZmlsZXN5c3RlbSBmZWF0dXJlKSBhcmUgZXhjbHVkZWQgDQorIyBmcm9tIHRoZSBpbnB1dC4NCisNCitFWENMVURFX1NZTUxJTktTICAgICAgID0gTk8NCisNCisjIElmIHRoZSB2YWx1ZSBvZiB0aGUgSU5QVVQgdGFnIGNvbnRhaW5zIGRpcmVjdG9yaWVzLCB5b3UgY2FuIHVzZSB0aGUgDQorIyBFWENMVURFX1BBVFRFUk5TIHRhZyB0byBzcGVjaWZ5IG9uZSBvciBtb3JlIHdpbGRjYXJkIHBhdHRlcm5zIHRvIGV4Y2x1ZGUgDQorIyBjZXJ0YWluIGZpbGVzIGZyb20gdGhvc2UgZGlyZWN0b3JpZXMuIE5vdGUgdGhhdCB0aGUgd2lsZGNhcmRzIGFyZSBtYXRjaGVkIA0KKyMgYWdhaW5zdCB0aGUgZmlsZSB3aXRoIGFic29sdXRlIHBhdGgsIHNvIHRvIGV4Y2x1ZGUgYWxsIHRlc3QgZGlyZWN0b3JpZXMgDQorIyBmb3IgZXhhbXBsZSB1c2UgdGhlIHBhdHRlcm4gKi90ZXN0LyoNCisNCitFWENMVURFX1BBVFRFUk5TICAgICAgID0gDQorDQorIyBUaGUgRVhDTFVERV9TWU1CT0xTIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IG9uZSBvciBtb3JlIHN5bWJvbCBuYW1lcyANCisjIChuYW1lc3BhY2VzLCBjbGFzc2VzLCBmdW5jdGlvbnMsIGV0Yy4pIHRoYXQgc2hvdWxkIGJlIGV4Y2x1ZGVkIGZyb20gdGhlIA0KKyMgb3V0cHV0LiBUaGUgc3ltYm9sIG5hbWUgY2FuIGJlIGEgZnVsbHkgcXVhbGlmaWVkIG5hbWUsIGEgd29yZCwgb3IgaWYgdGhlIA0KKyMgd2lsZGNhcmQgKiBpcyB1c2VkLCBhIHN1YnN0cmluZy4gRXhhbXBsZXM6IEFOYW1lc3BhY2UsIEFDbGFzcywgDQorIyBBQ2xhc3M6OkFOYW1lc3BhY2UsIEFOYW1lc3BhY2U6OipUZXN0DQorDQorRVhDTFVERV9TWU1CT0xTICAgICAgICA9IA0KKw0KKyMgVGhlIEVYQU1QTEVfUEFUSCB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBvbmUgb3IgbW9yZSBmaWxlcyBvciANCisjIGRpcmVjdG9yaWVzIHRoYXQgY29udGFpbiBleGFtcGxlIGNvZGUgZnJhZ21lbnRzIHRoYXQgYXJlIGluY2x1ZGVkIChzZWUgDQorIyB0aGUgXGluY2x1ZGUgY29tbWFuZCkuDQorDQorRVhBTVBMRV9QQVRIICAgICAgICAgICA9IA0KKw0KKyMgSWYgdGhlIHZhbHVlIG9mIHRoZSBFWEFNUExFX1BBVEggdGFnIGNvbnRhaW5zIGRpcmVjdG9yaWVzLCB5b3UgY2FuIHVzZSB0aGUgDQorIyBFWEFNUExFX1BBVFRFUk5TIHRhZyB0byBzcGVjaWZ5IG9uZSBvciBtb3JlIHdpbGRjYXJkIHBhdHRlcm4gKGxpa2UgKi5jcHAgDQorIyBhbmQgKi5oKSB0byBmaWx0ZXIgb3V0IHRoZSBzb3VyY2UtZmlsZXMgaW4gdGhlIGRpcmVjdG9yaWVzLiBJZiBsZWZ0IA0KKyMgYmxhbmsgYWxsIGZpbGVzIGFyZSBpbmNsdWRlZC4NCisNCitFWEFNUExFX1BBVFRFUk5TICAgICAgID0gKg0KKw0KKyMgSWYgdGhlIEVYQU1QTEVfUkVDVVJTSVZFIHRhZyBpcyBzZXQgdG8gWUVTIHRoZW4gc3ViZGlyZWN0b3JpZXMgd2lsbCBiZSANCisjIHNlYXJjaGVkIGZvciBpbnB1dCBmaWxlcyB0byBiZSB1c2VkIHdpdGggdGhlIFxpbmNsdWRlIG9yIFxkb250aW5jbHVkZSANCisjIGNvbW1hbmRzIGlycmVzcGVjdGl2ZSBvZiB0aGUgdmFsdWUgb2YgdGhlIFJFQ1VSU0lWRSB0YWcuIA0KKyMgUG9zc2libGUgdmFsdWVzIGFyZSBZRVMgYW5kIE5PLiBJZiBsZWZ0IGJsYW5rIE5PIGlzIHVzZWQuDQorDQorRVhBTVBMRV9SRUNVUlNJVkUgICAgICA9IE5PDQorDQorIyBUaGUgSU1BR0VfUEFUSCB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBvbmUgb3IgbW9yZSBmaWxlcyBvciANCisjIGRpcmVjdG9yaWVzIHRoYXQgY29udGFpbiBpbWFnZSB0aGF0IGFyZSBpbmNsdWRlZCBpbiB0aGUgZG9jdW1lbnRhdGlvbiAoc2VlIA0KKyMgdGhlIFxpbWFnZSBjb21tYW5kKS4NCisNCitJTUFHRV9QQVRIICAgICAgICAgICAgID0gDQorDQorIyBUaGUgSU5QVVRfRklMVEVSIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGEgcHJvZ3JhbSB0aGF0IGRveHlnZW4gc2hvdWxkIA0KKyMgaW52b2tlIHRvIGZpbHRlciBmb3IgZWFjaCBpbnB1dCBmaWxlLiBEb3h5Z2VuIHdpbGwgaW52b2tlIHRoZSBmaWx0ZXIgcHJvZ3JhbSANCisjIGJ5IGV4ZWN1dGluZyAodmlhIHBvcGVuKCkpIHRoZSBjb21tYW5kIDxmaWx0ZXI+IDxpbnB1dC1maWxlPiwgd2hlcmUgPGZpbHRlcj4gDQorIyBpcyB0aGUgdmFsdWUgb2YgdGhlIElOUFVUX0ZJTFRFUiB0YWcsIGFuZCA8aW5wdXQtZmlsZT4gaXMgdGhlIG5hbWUgb2YgYW4gDQorIyBpbnB1dCBmaWxlLiBEb3h5Z2VuIHdpbGwgdGhlbiB1c2UgdGhlIG91dHB1dCB0aGF0IHRoZSBmaWx0ZXIgcHJvZ3JhbSB3cml0ZXMgDQorIyB0byBzdGFuZGFyZCBvdXRwdXQuICBJZiBGSUxURVJfUEFUVEVSTlMgaXMgc3BlY2lmaWVkLCB0aGlzIHRhZyB3aWxsIGJlIA0KKyMgaWdub3JlZC4NCisNCitJTlBVVF9GSUxURVIgICAgICAgICAgID0gDQorDQorIyBUaGUgRklMVEVSX1BBVFRFUk5TIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGZpbHRlcnMgb24gYSBwZXIgZmlsZSBwYXR0ZXJuIA0KKyMgYmFzaXMuICBEb3h5Z2VuIHdpbGwgY29tcGFyZSB0aGUgZmlsZSBuYW1lIHdpdGggZWFjaCBwYXR0ZXJuIGFuZCBhcHBseSB0aGUgDQorIyBmaWx0ZXIgaWYgdGhlcmUgaXMgYSBtYXRjaC4gIFRoZSBmaWx0ZXJzIGFyZSBhIGxpc3Qgb2YgdGhlIGZvcm06IA0KKyMgcGF0dGVybj1maWx0ZXIgKGxpa2UgKi5jcHA9bXlfY3BwX2ZpbHRlcikuIFNlZSBJTlBVVF9GSUxURVIgZm9yIGZ1cnRoZXIgDQorIyBpbmZvIG9uIGhvdyBmaWx0ZXJzIGFyZSB1c2VkLiBJZiBGSUxURVJfUEFUVEVSTlMgaXMgZW1wdHksIElOUFVUX0ZJTFRFUiANCisjIGlzIGFwcGxpZWQgdG8gYWxsIGZpbGVzLg0KKw0KK0ZJTFRFUl9QQVRURVJOUyAgICAgICAgPSANCisNCisjIElmIHRoZSBGSUxURVJfU09VUkNFX0ZJTEVTIHRhZyBpcyBzZXQgdG8gWUVTLCB0aGUgaW5wdXQgZmlsdGVyIChpZiBzZXQgdXNpbmcgDQorIyBJTlBVVF9GSUxURVIpIHdpbGwgYmUgdXNlZCB0byBmaWx0ZXIgdGhlIGlucHV0IGZpbGVzIHdoZW4gcHJvZHVjaW5nIHNvdXJjZSANCisjIGZpbGVzIHRvIGJyb3dzZSAoaS5lLiB3aGVuIFNPVVJDRV9CUk9XU0VSIGlzIHNldCB0byBZRVMpLg0KKw0KK0ZJTFRFUl9TT1VSQ0VfRklMRVMgICAgPSBOTw0KKw0KKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisjIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHNvdXJjZSBicm93c2luZw0KKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisNCisjIElmIHRoZSBTT1VSQ0VfQlJPV1NFUiB0YWcgaXMgc2V0IHRvIFlFUyB0aGVuIGEgbGlzdCBvZiBzb3VyY2UgZmlsZXMgd2lsbCANCisjIGJlIGdlbmVyYXRlZC4gRG9jdW1lbnRlZCBlbnRpdGllcyB3aWxsIGJlIGNyb3NzLXJlZmVyZW5jZWQgd2l0aCB0aGVzZSBzb3VyY2VzLiANCisjIE5vdGU6IFRvIGdldCByaWQgb2YgYWxsIHNvdXJjZSBjb2RlIGluIHRoZSBnZW5lcmF0ZWQgb3V0cHV0LCBtYWtlIHN1cmUgYWxzbyANCisjIFZFUkJBVElNX0hFQURFUlMgaXMgc2V0IHRvIE5PLg0KKw0KK1NPVVJDRV9CUk9XU0VSICAgICAgICAgPSBOTw0KKw0KKyMgU2V0dGluZyB0aGUgSU5MSU5FX1NPVVJDRVMgdGFnIHRvIFlFUyB3aWxsIGluY2x1ZGUgdGhlIGJvZHkgDQorIyBvZiBmdW5jdGlvbnMgYW5kIGNsYXNzZXMgZGlyZWN0bHkgaW4gdGhlIGRvY3VtZW50YXRpb24uDQorDQorSU5MSU5FX1NPVVJDRVMgICAgICAgICA9IE5PDQorDQorIyBTZXR0aW5nIHRoZSBTVFJJUF9DT0RFX0NPTU1FTlRTIHRhZyB0byBZRVMgKHRoZSBkZWZhdWx0KSB3aWxsIGluc3RydWN0IA0KKyMgZG94eWdlbiB0byBoaWRlIGFueSBzcGVjaWFsIGNvbW1lbnQgYmxvY2tzIGZyb20gZ2VuZXJhdGVkIHNvdXJjZSBjb2RlIA0KKyMgZnJhZ21lbnRzLiBOb3JtYWwgQyBhbmQgQysrIGNvbW1lbnRzIHdpbGwgYWx3YXlzIHJlbWFpbiB2aXNpYmxlLg0KKw0KK1NUUklQX0NPREVfQ09NTUVOVFMgICAgPSBZRVMNCisNCisjIElmIHRoZSBSRUZFUkVOQ0VEX0JZX1JFTEFUSU9OIHRhZyBpcyBzZXQgdG8gWUVTIA0KKyMgdGhlbiBmb3IgZWFjaCBkb2N1bWVudGVkIGZ1bmN0aW9uIGFsbCBkb2N1bWVudGVkIA0KKyMgZnVuY3Rpb25zIHJlZmVyZW5jaW5nIGl0IHdpbGwgYmUgbGlzdGVkLg0KKw0KK1JFRkVSRU5DRURfQllfUkVMQVRJT04gPSBOTw0KKw0KKyMgSWYgdGhlIFJFRkVSRU5DRVNfUkVMQVRJT04gdGFnIGlzIHNldCB0byBZRVMgDQorIyB0aGVuIGZvciBlYWNoIGRvY3VtZW50ZWQgZnVuY3Rpb24gYWxsIGRvY3VtZW50ZWQgZW50aXRpZXMgDQorIyBjYWxsZWQvdXNlZCBieSB0aGF0IGZ1bmN0aW9uIHdpbGwgYmUgbGlzdGVkLg0KKw0KK1JFRkVSRU5DRVNfUkVMQVRJT04gICAgPSBOTw0KKw0KKyMgSWYgdGhlIFJFRkVSRU5DRVNfTElOS19TT1VSQ0UgdGFnIGlzIHNldCB0byBZRVMgKHRoZSBkZWZhdWx0KSANCisjIGFuZCBTT1VSQ0VfQlJPV1NFUiB0YWcgaXMgc2V0IHRvIFlFUywgdGhlbiB0aGUgaHlwZXJsaW5rcyBmcm9tIA0KKyMgZnVuY3Rpb25zIGluIFJFRkVSRU5DRVNfUkVMQVRJT04gYW5kIFJFRkVSRU5DRURfQllfUkVMQVRJT04gbGlzdHMgd2lsbCANCisjIGxpbmsgdG8gdGhlIHNvdXJjZSBjb2RlLiAgT3RoZXJ3aXNlIHRoZXkgd2lsbCBsaW5rIHRvIHRoZSBkb2N1bWVudGF0aW9uLg0KKw0KK1JFRkVSRU5DRVNfTElOS19TT1VSQ0UgPSBZRVMNCisNCisjIElmIHRoZSBVU0VfSFRBR1MgdGFnIGlzIHNldCB0byBZRVMgdGhlbiB0aGUgcmVmZXJlbmNlcyB0byBzb3VyY2UgY29kZSANCisjIHdpbGwgcG9pbnQgdG8gdGhlIEhUTUwgZ2VuZXJhdGVkIGJ5IHRoZSBodGFncygxKSB0b29sIGluc3RlYWQgb2YgZG94eWdlbiANCisjIGJ1aWx0LWluIHNvdXJjZSBicm93c2VyLiBUaGUgaHRhZ3MgdG9vbCBpcyBwYXJ0IG9mIEdOVSdzIGdsb2JhbCBzb3VyY2UgDQorIyB0YWdnaW5nIHN5c3RlbSAoc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9nbG9iYWwvZ2xvYmFsLmh0bWwpLiBZb3UgDQorIyB3aWxsIG5lZWQgdmVyc2lvbiA0LjguNiBvciBoaWdoZXIuDQorDQorVVNFX0hUQUdTICAgICAgICAgICAgICA9IE5PDQorDQorIyBJZiB0aGUgVkVSQkFUSU1fSEVBREVSUyB0YWcgaXMgc2V0IHRvIFlFUyAodGhlIGRlZmF1bHQpIHRoZW4gRG94eWdlbiANCisjIHdpbGwgZ2VuZXJhdGUgYSB2ZXJiYXRpbSBjb3B5IG9mIHRoZSBoZWFkZXIgZmlsZSBmb3IgZWFjaCBjbGFzcyBmb3IgDQorIyB3aGljaCBhbiBpbmNsdWRlIGlzIHNwZWNpZmllZC4gU2V0IHRvIE5PIHRvIGRpc2FibGUgdGhpcy4NCisNCitWRVJCQVRJTV9IRUFERVJTICAgICAgID0gWUVTDQorDQorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyMgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gdGhlIGFscGhhYmV0aWNhbCBjbGFzcyBpbmRleA0KKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisNCisjIElmIHRoZSBBTFBIQUJFVElDQUxfSU5ERVggdGFnIGlzIHNldCB0byBZRVMsIGFuIGFscGhhYmV0aWNhbCBpbmRleCANCisjIG9mIGFsbCBjb21wb3VuZHMgd2lsbCBiZSBnZW5lcmF0ZWQuIEVuYWJsZSB0aGlzIGlmIHRoZSBwcm9qZWN0IA0KKyMgY29udGFpbnMgYSBsb3Qgb2YgY2xhc3Nlcywgc3RydWN0cywgdW5pb25zIG9yIGludGVyZmFjZXMuDQorDQorQUxQSEFCRVRJQ0FMX0lOREVYICAgICA9IE5PDQorDQorIyBJZiB0aGUgYWxwaGFiZXRpY2FsIGluZGV4IGlzIGVuYWJsZWQgKHNlZSBBTFBIQUJFVElDQUxfSU5ERVgpIHRoZW4gDQorIyB0aGUgQ09MU19JTl9BTFBIQV9JTkRFWCB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSB0aGUgbnVtYmVyIG9mIGNvbHVtbnMgDQorIyBpbiB3aGljaCB0aGlzIGxpc3Qgd2lsbCBiZSBzcGxpdCAoY2FuIGJlIGEgbnVtYmVyIGluIHRoZSByYW5nZSBbMS4uMjBdKQ0KKw0KK0NPTFNfSU5fQUxQSEFfSU5ERVggICAgPSA1DQorDQorIyBJbiBjYXNlIGFsbCBjbGFzc2VzIGluIGEgcHJvamVjdCBzdGFydCB3aXRoIGEgY29tbW9uIHByZWZpeCwgYWxsIA0KKyMgY2xhc3NlcyB3aWxsIGJlIHB1dCB1bmRlciB0aGUgc2FtZSBoZWFkZXIgaW4gdGhlIGFscGhhYmV0aWNhbCBpbmRleC4gDQorIyBUaGUgSUdOT1JFX1BSRUZJWCB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBvbmUgb3IgbW9yZSBwcmVmaXhlcyB0aGF0IA0KKyMgc2hvdWxkIGJlIGlnbm9yZWQgd2hpbGUgZ2VuZXJhdGluZyB0aGUgaW5kZXggaGVhZGVycy4NCisNCitJR05PUkVfUFJFRklYICAgICAgICAgID0gDQorDQorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyMgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gdGhlIEhUTUwgb3V0cHV0DQorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKw0KKyMgSWYgdGhlIEdFTkVSQVRFX0hUTUwgdGFnIGlzIHNldCB0byBZRVMgKHRoZSBkZWZhdWx0KSBEb3h5Z2VuIHdpbGwgDQorIyBnZW5lcmF0ZSBIVE1MIG91dHB1dC4NCisNCitHRU5FUkFURV9IVE1MICAgICAgICAgID0gWUVTDQorDQorIyBUaGUgSFRNTF9PVVRQVVQgdGFnIGlzIHVzZWQgdG8gc3BlY2lmeSB3aGVyZSB0aGUgSFRNTCBkb2NzIHdpbGwgYmUgcHV0LiANCisjIElmIGEgcmVsYXRpdmUgcGF0aCBpcyBlbnRlcmVkIHRoZSB2YWx1ZSBvZiBPVVRQVVRfRElSRUNUT1JZIHdpbGwgYmUgDQorIyBwdXQgaW4gZnJvbnQgb2YgaXQuIElmIGxlZnQgYmxhbmsgYGh0bWwnIHdpbGwgYmUgdXNlZCBhcyB0aGUgZGVmYXVsdCBwYXRoLg0KKw0KK0hUTUxfT1VUUFVUICAgICAgICAgICAgPSBodG1sDQorDQorIyBUaGUgSFRNTF9GSUxFX0VYVEVOU0lPTiB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSB0aGUgZmlsZSBleHRlbnNpb24gZm9yIA0KKyMgZWFjaCBnZW5lcmF0ZWQgSFRNTCBwYWdlIChmb3IgZXhhbXBsZTogLmh0bSwucGhwLC5hc3ApLiBJZiBpdCBpcyBsZWZ0IGJsYW5rIA0KKyMgZG94eWdlbiB3aWxsIGdlbmVyYXRlIGZpbGVzIHdpdGggLmh0bWwgZXh0ZW5zaW9uLg0KKw0KK0hUTUxfRklMRV9FWFRFTlNJT04gICAgPSAuaHRtbA0KKw0KKyMgVGhlIEhUTUxfSEVBREVSIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGEgcGVyc29uYWwgSFRNTCBoZWFkZXIgZm9yIA0KKyMgZWFjaCBnZW5lcmF0ZWQgSFRNTCBwYWdlLiBJZiBpdCBpcyBsZWZ0IGJsYW5rIGRveHlnZW4gd2lsbCBnZW5lcmF0ZSBhIA0KKyMgc3RhbmRhcmQgaGVhZGVyLg0KKw0KK0hUTUxfSEVBREVSICAgICAgICAgICAgPSANCisNCisjIFRoZSBIVE1MX0ZPT1RFUiB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBhIHBlcnNvbmFsIEhUTUwgZm9vdGVyIGZvciANCisjIGVhY2ggZ2VuZXJhdGVkIEhUTUwgcGFnZS4gSWYgaXQgaXMgbGVmdCBibGFuayBkb3h5Z2VuIHdpbGwgZ2VuZXJhdGUgYSANCisjIHN0YW5kYXJkIGZvb3Rlci4NCisNCitIVE1MX0ZPT1RFUiAgICAgICAgICAgID0gDQorDQorIyBUaGUgSFRNTF9TVFlMRVNIRUVUIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGEgdXNlci1kZWZpbmVkIGNhc2NhZGluZyANCisjIHN0eWxlIHNoZWV0IHRoYXQgaXMgdXNlZCBieSBlYWNoIEhUTUwgcGFnZS4gSXQgY2FuIGJlIHVzZWQgdG8gDQorIyBmaW5lLXR1bmUgdGhlIGxvb2sgb2YgdGhlIEhUTUwgb3V0cHV0LiBJZiB0aGUgdGFnIGlzIGxlZnQgYmxhbmsgZG94eWdlbiANCisjIHdpbGwgZ2VuZXJhdGUgYSBkZWZhdWx0IHN0eWxlIHNoZWV0LiBOb3RlIHRoYXQgZG94eWdlbiB3aWxsIHRyeSB0byBjb3B5IA0KKyMgdGhlIHN0eWxlIHNoZWV0IGZpbGUgdG8gdGhlIEhUTUwgb3V0cHV0IGRpcmVjdG9yeSwgc28gZG9uJ3QgcHV0IHlvdXIgb3duIA0KKyMgc3R5bGVzaGVldCBpbiB0aGUgSFRNTCBvdXRwdXQgZGlyZWN0b3J5IGFzIHdlbGwsIG9yIGl0IHdpbGwgYmUgZXJhc2VkIQ0KKw0KK0hUTUxfU1RZTEVTSEVFVCAgICAgICAgPSANCisNCisjIFRoZSBIVE1MX0NPTE9SU1RZTEVfSFVFIHRhZyBjb250cm9scyB0aGUgY29sb3Igb2YgdGhlIEhUTUwgb3V0cHV0LiANCisjIERveHlnZW4gd2lsbCBhZGp1c3QgdGhlIGNvbG9ycyBpbiB0aGUgc3R5bGVzaGVldCBhbmQgYmFja2dyb3VuZCBpbWFnZXMgDQorIyBhY2NvcmRpbmcgdG8gdGhpcyBjb2xvci4gSHVlIGlzIHNwZWNpZmllZCBhcyBhbiBhbmdsZSBvbiBhIGNvbG9yd2hlZWwsIA0KKyMgc2VlIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSHVlIGZvciBtb3JlIGluZm9ybWF0aW9uLiANCisjIEZvciBpbnN0YW5jZSB0aGUgdmFsdWUgMCByZXByZXNlbnRzIHJlZCwgNjAgaXMgeWVsbG93LCAxMjAgaXMgZ3JlZW4sIA0KKyMgMTgwIGlzIGN5YW4sIDI0MCBpcyBibHVlLCAzMDAgcHVycGxlLCBhbmQgMzYwIGlzIHJlZCBhZ2Fpbi4gDQorIyBUaGUgYWxsb3dlZCByYW5nZSBpcyAwIHRvIDM1OS4NCisNCitIVE1MX0NPTE9SU1RZTEVfSFVFICAgID0gMjIwDQorDQorIyBUaGUgSFRNTF9DT0xPUlNUWUxFX1NBVCB0YWcgY29udHJvbHMgdGhlIHB1cml0eSAob3Igc2F0dXJhdGlvbikgb2YgDQorIyB0aGUgY29sb3JzIGluIHRoZSBIVE1MIG91dHB1dC4gRm9yIGEgdmFsdWUgb2YgMCB0aGUgb3V0cHV0IHdpbGwgdXNlIA0KKyMgZ3JheXNjYWxlcyBvbmx5LiBBIHZhbHVlIG9mIDI1NSB3aWxsIHByb2R1Y2UgdGhlIG1vc3Qgdml2aWQgY29sb3JzLg0KKw0KK0hUTUxfQ09MT1JTVFlMRV9TQVQgICAgPSAxMDANCisNCisjIFRoZSBIVE1MX0NPTE9SU1RZTEVfR0FNTUEgdGFnIGNvbnRyb2xzIHRoZSBnYW1tYSBjb3JyZWN0aW9uIGFwcGxpZWQgdG8gDQorIyB0aGUgbHVtaW5hbmNlIGNvbXBvbmVudCBvZiB0aGUgY29sb3JzIGluIHRoZSBIVE1MIG91dHB1dC4gVmFsdWVzIGJlbG93IA0KKyMgMTAwIGdyYWR1YWxseSBtYWtlIHRoZSBvdXRwdXQgbGlnaHRlciwgd2hlcmVhcyB2YWx1ZXMgYWJvdmUgMTAwIG1ha2UgDQorIyB0aGUgb3V0cHV0IGRhcmtlci4gVGhlIHZhbHVlIGRpdmlkZWQgYnkgMTAwIGlzIHRoZSBhY3R1YWwgZ2FtbWEgYXBwbGllZCwgDQorIyBzbyA4MCByZXByZXNlbnRzIGEgZ2FtbWEgb2YgMC44LCBUaGUgdmFsdWUgMjIwIHJlcHJlc2VudHMgYSBnYW1tYSBvZiAyLjIsIA0KKyMgYW5kIDEwMCBkb2VzIG5vdCBjaGFuZ2UgdGhlIGdhbW1hLg0KKw0KK0hUTUxfQ09MT1JTVFlMRV9HQU1NQSAgPSA4MA0KKw0KKyMgSWYgdGhlIEhUTUxfVElNRVNUQU1QIHRhZyBpcyBzZXQgdG8gWUVTIHRoZW4gdGhlIGZvb3RlciBvZiBlYWNoIGdlbmVyYXRlZCBIVE1MIA0KKyMgcGFnZSB3aWxsIGNvbnRhaW4gdGhlIGRhdGUgYW5kIHRpbWUgd2hlbiB0aGUgcGFnZSB3YXMgZ2VuZXJhdGVkLiBTZXR0aW5nIA0KKyMgdGhpcyB0byBOTyBjYW4gaGVscCB3aGVuIGNvbXBhcmluZyB0aGUgb3V0cHV0IG9mIG11bHRpcGxlIHJ1bnMuDQorDQorSFRNTF9USU1FU1RBTVAgICAgICAgICA9IE5PDQorDQorIyBJZiB0aGUgSFRNTF9BTElHTl9NRU1CRVJTIHRhZyBpcyBzZXQgdG8gWUVTLCB0aGUgbWVtYmVycyBvZiBjbGFzc2VzLCANCisjIGZpbGVzIG9yIG5hbWVzcGFjZXMgd2lsbCBiZSBhbGlnbmVkIGluIEhUTUwgdXNpbmcgdGFibGVzLiBJZiBzZXQgdG8gDQorIyBOTyBhIGJ1bGxldCBsaXN0IHdpbGwgYmUgdXNlZC4NCisNCitIVE1MX0FMSUdOX01FTUJFUlMgICAgID0gWUVTDQorDQorIyBJZiB0aGUgSFRNTF9EWU5BTUlDX1NFQ1RJT05TIHRhZyBpcyBzZXQgdG8gWUVTIHRoZW4gdGhlIGdlbmVyYXRlZCBIVE1MIA0KKyMgZG9jdW1lbnRhdGlvbiB3aWxsIGNvbnRhaW4gc2VjdGlvbnMgdGhhdCBjYW4gYmUgaGlkZGVuIGFuZCBzaG93biBhZnRlciB0aGUgDQorIyBwYWdlIGhhcyBsb2FkZWQuIEZvciB0aGlzIHRvIHdvcmsgYSBicm93c2VyIHRoYXQgc3VwcG9ydHMgDQorIyBKYXZhU2NyaXB0IGFuZCBESFRNTCBpcyByZXF1aXJlZCAoZm9yIGluc3RhbmNlIE1vemlsbGEgMS4wKywgRmlyZWZveCANCisjIE5ldHNjYXBlIDYuMCssIEludGVybmV0IGV4cGxvcmVyIDUuMCssIEtvbnF1ZXJvciwgb3IgU2FmYXJpKS4NCisNCitIVE1MX0RZTkFNSUNfU0VDVElPTlMgID0gTk8NCisNCisjIElmIHRoZSBHRU5FUkFURV9ET0NTRVQgdGFnIGlzIHNldCB0byBZRVMsIGFkZGl0aW9uYWwgaW5kZXggZmlsZXMgDQorIyB3aWxsIGJlIGdlbmVyYXRlZCB0aGF0IGNhbiBiZSB1c2VkIGFzIGlucHV0IGZvciBBcHBsZSdzIFhjb2RlIDMgDQorIyBpbnRlZ3JhdGVkIGRldmVsb3BtZW50IGVudmlyb25tZW50LCBpbnRyb2R1Y2VkIHdpdGggT1NYIDEwLjUgKExlb3BhcmQpLiANCisjIFRvIGNyZWF0ZSBhIGRvY3VtZW50YXRpb24gc2V0LCBkb3h5Z2VuIHdpbGwgZ2VuZXJhdGUgYSBNYWtlZmlsZSBpbiB0aGUgDQorIyBIVE1MIG91dHB1dCBkaXJlY3RvcnkuIFJ1bm5pbmcgbWFrZSB3aWxsIHByb2R1Y2UgdGhlIGRvY3NldCBpbiB0aGF0IA0KKyMgZGlyZWN0b3J5IGFuZCBydW5uaW5nICJtYWtlIGluc3RhbGwiIHdpbGwgaW5zdGFsbCB0aGUgZG9jc2V0IGluIA0KKyMgfi9MaWJyYXJ5L0RldmVsb3Blci9TaGFyZWQvRG9jdW1lbnRhdGlvbi9Eb2NTZXRzIHNvIHRoYXQgWGNvZGUgd2lsbCBmaW5kIA0KKyMgaXQgYXQgc3RhcnR1cC4gDQorIyBTZWUgaHR0cDovL2RldmVsb3Blci5hcHBsZS5jb20vdG9vbHMvY3JlYXRpbmdkb2NzZXRzd2l0aGRveHlnZW4uaHRtbCANCisjIGZvciBtb3JlIGluZm9ybWF0aW9uLg0KKw0KK0dFTkVSQVRFX0RPQ1NFVCAgICAgICAgPSBOTw0KKw0KKyMgV2hlbiBHRU5FUkFURV9ET0NTRVQgdGFnIGlzIHNldCB0byBZRVMsIHRoaXMgdGFnIGRldGVybWluZXMgdGhlIG5hbWUgb2YgdGhlIA0KKyMgZmVlZC4gQSBkb2N1bWVudGF0aW9uIGZlZWQgcHJvdmlkZXMgYW4gdW1icmVsbGEgdW5kZXIgd2hpY2ggbXVsdGlwbGUgDQorIyBkb2N1bWVudGF0aW9uIHNldHMgZnJvbSBhIHNpbmdsZSBwcm92aWRlciAoc3VjaCBhcyBhIGNvbXBhbnkgb3IgcHJvZHVjdCBzdWl0ZSkgDQorIyBjYW4gYmUgZ3JvdXBlZC4NCisNCitET0NTRVRfRkVFRE5BTUUgICAgICAgID0gIkRveHlnZW4gZ2VuZXJhdGVkIGRvY3MiDQorDQorIyBXaGVuIEdFTkVSQVRFX0RPQ1NFVCB0YWcgaXMgc2V0IHRvIFlFUywgdGhpcyB0YWcgc3BlY2lmaWVzIGEgc3RyaW5nIHRoYXQgDQorIyBzaG91bGQgdW5pcXVlbHkgaWRlbnRpZnkgdGhlIGRvY3VtZW50YXRpb24gc2V0IGJ1bmRsZS4gVGhpcyBzaG91bGQgYmUgYSANCisjIHJldmVyc2UgZG9tYWluLW5hbWUgc3R5bGUgc3RyaW5nLCBlLmcuIGNvbS5teWNvbXBhbnkuTXlEb2NTZXQuIERveHlnZW4gDQorIyB3aWxsIGFwcGVuZCAuZG9jc2V0IHRvIHRoZSBuYW1lLg0KKw0KK0RPQ1NFVF9CVU5ETEVfSUQgICAgICAgPSBvcmcuZG94eWdlbi5Qcm9qZWN0DQorDQorIyBXaGVuIEdFTkVSQVRFX1BVQkxJU0hFUl9JRCB0YWcgc3BlY2lmaWVzIGEgc3RyaW5nIHRoYXQgc2hvdWxkIHVuaXF1ZWx5IGlkZW50aWZ5IA0KKyMgdGhlIGRvY3VtZW50YXRpb24gcHVibGlzaGVyLiBUaGlzIHNob3VsZCBiZSBhIHJldmVyc2UgZG9tYWluLW5hbWUgc3R5bGUgDQorIyBzdHJpbmcsIGUuZy4gY29tLm15Y29tcGFueS5NeURvY1NldC5kb2N1bWVudGF0aW9uLg0KKw0KK0RPQ1NFVF9QVUJMSVNIRVJfSUQgICAgPSBvcmcuZG94eWdlbi5QdWJsaXNoZXINCisNCisjIFRoZSBHRU5FUkFURV9QVUJMSVNIRVJfTkFNRSB0YWcgaWRlbnRpZmllcyB0aGUgZG9jdW1lbnRhdGlvbiBwdWJsaXNoZXIuDQorDQorRE9DU0VUX1BVQkxJU0hFUl9OQU1FICA9IFB1Ymxpc2hlcg0KKw0KKyMgSWYgdGhlIEdFTkVSQVRFX0hUTUxIRUxQIHRhZyBpcyBzZXQgdG8gWUVTLCBhZGRpdGlvbmFsIGluZGV4IGZpbGVzIA0KKyMgd2lsbCBiZSBnZW5lcmF0ZWQgdGhhdCBjYW4gYmUgdXNlZCBhcyBpbnB1dCBmb3IgdG9vbHMgbGlrZSB0aGUgDQorIyBNaWNyb3NvZnQgSFRNTCBoZWxwIHdvcmtzaG9wIHRvIGdlbmVyYXRlIGEgY29tcGlsZWQgSFRNTCBoZWxwIGZpbGUgKC5jaG0pIA0KKyMgb2YgdGhlIGdlbmVyYXRlZCBIVE1MIGRvY3VtZW50YXRpb24uDQorDQorR0VORVJBVEVfSFRNTEhFTFAgICAgICA9IFlFUw0KKw0KKyMgSWYgdGhlIEdFTkVSQVRFX0hUTUxIRUxQIHRhZyBpcyBzZXQgdG8gWUVTLCB0aGUgQ0hNX0ZJTEUgdGFnIGNhbiANCisjIGJlIHVzZWQgdG8gc3BlY2lmeSB0aGUgZmlsZSBuYW1lIG9mIHRoZSByZXN1bHRpbmcgLmNobSBmaWxlLiBZb3UgDQorIyBjYW4gYWRkIGEgcGF0aCBpbiBmcm9udCBvZiB0aGUgZmlsZSBpZiB0aGUgcmVzdWx0IHNob3VsZCBub3QgYmUgDQorIyB3cml0dGVuIHRvIHRoZSBodG1sIG91dHB1dCBkaXJlY3RvcnkuDQorDQorQ0hNX0ZJTEUgICAgICAgICAgICAgICA9IA0KKw0KKyMgSWYgdGhlIEdFTkVSQVRFX0hUTUxIRUxQIHRhZyBpcyBzZXQgdG8gWUVTLCB0aGUgSEhDX0xPQ0FUSU9OIHRhZyBjYW4gDQorIyBiZSB1c2VkIHRvIHNwZWNpZnkgdGhlIGxvY2F0aW9uIChhYnNvbHV0ZSBwYXRoIGluY2x1ZGluZyBmaWxlIG5hbWUpIG9mIA0KKyMgdGhlIEhUTUwgaGVscCBjb21waWxlciAoaGhjLmV4ZSkuIElmIG5vbi1lbXB0eSBkb3h5Z2VuIHdpbGwgdHJ5IHRvIHJ1biANCisjIHRoZSBIVE1MIGhlbHAgY29tcGlsZXIgb24gdGhlIGdlbmVyYXRlZCBpbmRleC5oaHAuDQorDQorSEhDX0xPQ0FUSU9OICAgICAgICAgICA9IA0KKw0KKyMgSWYgdGhlIEdFTkVSQVRFX0hUTUxIRUxQIHRhZyBpcyBzZXQgdG8gWUVTLCB0aGUgR0VORVJBVEVfQ0hJIGZsYWcgDQorIyBjb250cm9scyBpZiBhIHNlcGFyYXRlIC5jaGkgaW5kZXggZmlsZSBpcyBnZW5lcmF0ZWQgKFlFUykgb3IgdGhhdCANCisjIGl0IHNob3VsZCBiZSBpbmNsdWRlZCBpbiB0aGUgbWFzdGVyIC5jaG0gZmlsZSAoTk8pLg0KKw0KK0dFTkVSQVRFX0NISSAgICAgICAgICAgPSBOTw0KKw0KKyMgSWYgdGhlIEdFTkVSQVRFX0hUTUxIRUxQIHRhZyBpcyBzZXQgdG8gWUVTLCB0aGUgQ0hNX0lOREVYX0VOQ09ESU5HIA0KKyMgaXMgdXNlZCB0byBlbmNvZGUgSHRtbEhlbHAgaW5kZXggKGhoayksIGNvbnRlbnQgKGhoYykgYW5kIHByb2plY3QgZmlsZSANCisjIGNvbnRlbnQuDQorDQorQ0hNX0lOREVYX0VOQ09ESU5HICAgICA9IA0KKw0KKyMgSWYgdGhlIEdFTkVSQVRFX0hUTUxIRUxQIHRhZyBpcyBzZXQgdG8gWUVTLCB0aGUgQklOQVJZX1RPQyBmbGFnIA0KKyMgY29udHJvbHMgd2hldGhlciBhIGJpbmFyeSB0YWJsZSBvZiBjb250ZW50cyBpcyBnZW5lcmF0ZWQgKFlFUykgb3IgYSANCisjIG5vcm1hbCB0YWJsZSBvZiBjb250ZW50cyAoTk8pIGluIHRoZSAuY2htIGZpbGUuDQorDQorQklOQVJZX1RPQyAgICAgICAgICAgICA9IE5PDQorDQorIyBUaGUgVE9DX0VYUEFORCBmbGFnIGNhbiBiZSBzZXQgdG8gWUVTIHRvIGFkZCBleHRyYSBpdGVtcyBmb3IgZ3JvdXAgbWVtYmVycyANCisjIHRvIHRoZSBjb250ZW50cyBvZiB0aGUgSFRNTCBoZWxwIGRvY3VtZW50YXRpb24gYW5kIHRvIHRoZSB0cmVlIHZpZXcuDQorDQorVE9DX0VYUEFORCAgICAgICAgICAgICA9IE5PDQorDQorIyBJZiB0aGUgR0VORVJBVEVfUUhQIHRhZyBpcyBzZXQgdG8gWUVTIGFuZCBib3RoIFFIUF9OQU1FU1BBQ0UgYW5kIA0KKyMgUUhQX1ZJUlRVQUxfRk9MREVSIGFyZSBzZXQsIGFuIGFkZGl0aW9uYWwgaW5kZXggZmlsZSB3aWxsIGJlIGdlbmVyYXRlZCANCisjIHRoYXQgY2FuIGJlIHVzZWQgYXMgaW5wdXQgZm9yIFF0J3MgcWhlbHBnZW5lcmF0b3IgdG8gZ2VuZXJhdGUgYSANCisjIFF0IENvbXByZXNzZWQgSGVscCAoLnFjaCkgb2YgdGhlIGdlbmVyYXRlZCBIVE1MIGRvY3VtZW50YXRpb24uDQorDQorR0VORVJBVEVfUUhQICAgICAgICAgICA9IE5PDQorDQorIyBJZiB0aGUgUUhHX0xPQ0FUSU9OIHRhZyBpcyBzcGVjaWZpZWQsIHRoZSBRQ0hfRklMRSB0YWcgY2FuIA0KKyMgYmUgdXNlZCB0byBzcGVjaWZ5IHRoZSBmaWxlIG5hbWUgb2YgdGhlIHJlc3VsdGluZyAucWNoIGZpbGUuIA0KKyMgVGhlIHBhdGggc3BlY2lmaWVkIGlzIHJlbGF0aXZlIHRvIHRoZSBIVE1MIG91dHB1dCBmb2xkZXIuDQorDQorUUNIX0ZJTEUgICAgICAgICAgICAgICA9IA0KKw0KKyMgVGhlIFFIUF9OQU1FU1BBQ0UgdGFnIHNwZWNpZmllcyB0aGUgbmFtZXNwYWNlIHRvIHVzZSB3aGVuIGdlbmVyYXRpbmcgDQorIyBRdCBIZWxwIFByb2plY3Qgb3V0cHV0LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBwbGVhc2Ugc2VlIA0KKyMgaHR0cDovL2RvYy50cm9sbHRlY2guY29tL3F0aGVscHByb2plY3QuaHRtbCNuYW1lc3BhY2UNCisNCitRSFBfTkFNRVNQQUNFICAgICAgICAgID0gb3JnLmRveHlnZW4uUHJvamVjdA0KKw0KKyMgVGhlIFFIUF9WSVJUVUFMX0ZPTERFUiB0YWcgc3BlY2lmaWVzIHRoZSBuYW1lc3BhY2UgdG8gdXNlIHdoZW4gZ2VuZXJhdGluZyANCisjIFF0IEhlbHAgUHJvamVjdCBvdXRwdXQuIEZvciBtb3JlIGluZm9ybWF0aW9uIHBsZWFzZSBzZWUgDQorIyBodHRwOi8vZG9jLnRyb2xsdGVjaC5jb20vcXRoZWxwcHJvamVjdC5odG1sI3ZpcnR1YWwtZm9sZGVycw0KKw0KK1FIUF9WSVJUVUFMX0ZPTERFUiAgICAgPSBkb2MNCisNCisjIElmIFFIUF9DVVNUX0ZJTFRFUl9OQU1FIGlzIHNldCwgaXQgc3BlY2lmaWVzIHRoZSBuYW1lIG9mIGEgY3VzdG9tIGZpbHRlciB0byANCisjIGFkZC4gRm9yIG1vcmUgaW5mb3JtYXRpb24gcGxlYXNlIHNlZSANCisjIGh0dHA6Ly9kb2MudHJvbGx0ZWNoLmNvbS9xdGhlbHBwcm9qZWN0Lmh0bWwjY3VzdG9tLWZpbHRlcnMNCisNCitRSFBfQ1VTVF9GSUxURVJfTkFNRSAgID0gDQorDQorIyBUaGUgUUhQX0NVU1RfRklMVF9BVFRSUyB0YWcgc3BlY2lmaWVzIHRoZSBsaXN0IG9mIHRoZSBhdHRyaWJ1dGVzIG9mIHRoZSANCisjIGN1c3RvbSBmaWx0ZXIgdG8gYWRkLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBwbGVhc2Ugc2VlIA0KKyMgPGEgaHJlZj0iaHR0cDovL2RvYy50cm9sbHRlY2guY29tL3F0aGVscHByb2plY3QuaHRtbCNjdXN0b20tZmlsdGVycyI+IA0KKyMgUXQgSGVscCBQcm9qZWN0IC8gQ3VzdG9tIEZpbHRlcnM8L2E+Lg0KKw0KK1FIUF9DVVNUX0ZJTFRFUl9BVFRSUyAgPSANCisNCisjIFRoZSBRSFBfU0VDVF9GSUxURVJfQVRUUlMgdGFnIHNwZWNpZmllcyB0aGUgbGlzdCBvZiB0aGUgYXR0cmlidXRlcyB0aGlzIA0KKyMgcHJvamVjdCdzIA0KKyMgZmlsdGVyIHNlY3Rpb24gbWF0Y2hlcy4gDQorIyA8YSBocmVmPSJodHRwOi8vZG9jLnRyb2xsdGVjaC5jb20vcXRoZWxwcHJvamVjdC5odG1sI2ZpbHRlci1hdHRyaWJ1dGVzIj4gDQorIyBRdCBIZWxwIFByb2plY3QgLyBGaWx0ZXIgQXR0cmlidXRlczwvYT4uDQorDQorUUhQX1NFQ1RfRklMVEVSX0FUVFJTICA9IA0KKw0KKyMgSWYgdGhlIEdFTkVSQVRFX1FIUCB0YWcgaXMgc2V0IHRvIFlFUywgdGhlIFFIR19MT0NBVElPTiB0YWcgY2FuIA0KKyMgYmUgdXNlZCB0byBzcGVjaWZ5IHRoZSBsb2NhdGlvbiBvZiBRdCdzIHFoZWxwZ2VuZXJhdG9yLiANCisjIElmIG5vbi1lbXB0eSBkb3h5Z2VuIHdpbGwgdHJ5IHRvIHJ1biBxaGVscGdlbmVyYXRvciBvbiB0aGUgZ2VuZXJhdGVkIA0KKyMgLnFocCBmaWxlLg0KKw0KK1FIR19MT0NBVElPTiAgICAgICAgICAgPSANCisNCisjIElmIHRoZSBHRU5FUkFURV9FQ0xJUFNFSEVMUCB0YWcgaXMgc2V0IHRvIFlFUywgYWRkaXRpb25hbCBpbmRleCBmaWxlcyAgDQorIyB3aWxsIGJlIGdlbmVyYXRlZCwgd2hpY2ggdG9nZXRoZXIgd2l0aCB0aGUgSFRNTCBmaWxlcywgZm9ybSBhbiBFY2xpcHNlIGhlbHAgDQorIyBwbHVnaW4uIFRvIGluc3RhbGwgdGhpcyBwbHVnaW4gYW5kIG1ha2UgaXQgYXZhaWxhYmxlIHVuZGVyIHRoZSBoZWxwIGNvbnRlbnRzIA0KKyMgbWVudSBpbiBFY2xpcHNlLCB0aGUgY29udGVudHMgb2YgdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZSBIVE1MIGFuZCBYTUwgDQorIyBmaWxlcyBuZWVkcyB0byBiZSBjb3BpZWQgaW50byB0aGUgcGx1Z2lucyBkaXJlY3Rvcnkgb2YgZWNsaXBzZS4gVGhlIG5hbWUgb2YgDQorIyB0aGUgZGlyZWN0b3J5IHdpdGhpbiB0aGUgcGx1Z2lucyBkaXJlY3Rvcnkgc2hvdWxkIGJlIHRoZSBzYW1lIGFzIA0KKyMgdGhlIEVDTElQU0VfRE9DX0lEIHZhbHVlLiBBZnRlciBjb3B5aW5nIEVjbGlwc2UgbmVlZHMgdG8gYmUgcmVzdGFydGVkIGJlZm9yZSANCisjIHRoZSBoZWxwIGFwcGVhcnMuDQorDQorR0VORVJBVEVfRUNMSVBTRUhFTFAgICA9IE5PDQorDQorIyBBIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgZWNsaXBzZSBoZWxwIHBsdWdpbi4gV2hlbiBpbnN0YWxsaW5nIHRoZSBwbHVnaW4gDQorIyB0aGUgZGlyZWN0b3J5IG5hbWUgY29udGFpbmluZyB0aGUgSFRNTCBhbmQgWE1MIGZpbGVzIHNob3VsZCBhbHNvIGhhdmUgDQorIyB0aGlzIG5hbWUuDQorDQorRUNMSVBTRV9ET0NfSUQgICAgICAgICA9IG9yZy5kb3h5Z2VuLlByb2plY3QNCisNCisjIFRoZSBESVNBQkxFX0lOREVYIHRhZyBjYW4gYmUgdXNlZCB0byB0dXJuIG9uL29mZiB0aGUgY29uZGVuc2VkIGluZGV4IGF0IA0KKyMgdG9wIG9mIGVhY2ggSFRNTCBwYWdlLiBUaGUgdmFsdWUgTk8gKHRoZSBkZWZhdWx0KSBlbmFibGVzIHRoZSBpbmRleCBhbmQgDQorIyB0aGUgdmFsdWUgWUVTIGRpc2FibGVzIGl0Lg0KKw0KK0RJU0FCTEVfSU5ERVggICAgICAgICAgPSBOTw0KKw0KKyMgVGhpcyB0YWcgY2FuIGJlIHVzZWQgdG8gc2V0IHRoZSBudW1iZXIgb2YgZW51bSB2YWx1ZXMgKHJhbmdlIFswLDEuLjIwXSkgDQorIyB0aGF0IGRveHlnZW4gd2lsbCBncm91cCBvbiBvbmUgbGluZSBpbiB0aGUgZ2VuZXJhdGVkIEhUTUwgZG9jdW1lbnRhdGlvbi4gDQorIyBOb3RlIHRoYXQgYSB2YWx1ZSBvZiAwIHdpbGwgY29tcGxldGVseSBzdXBwcmVzcyB0aGUgZW51bSB2YWx1ZXMgZnJvbQ0KKyMgYXBwZWFyaW5nIGluIHRoZSBvdmVydmlldyBzZWN0aW9uLg0KKw0KK0VOVU1fVkFMVUVTX1BFUl9MSU5FICAgPSA0DQorDQorIyBUaGUgR0VORVJBVEVfVFJFRVZJRVcgdGFnIGlzIHVzZWQgdG8gc3BlY2lmeSB3aGV0aGVyIGEgdHJlZS1saWtlIGluZGV4IA0KKyMgc3RydWN0dXJlIHNob3VsZCBiZSBnZW5lcmF0ZWQgdG8gZGlzcGxheSBoaWVyYXJjaGljYWwgaW5mb3JtYXRpb24uIA0KKyMgSWYgdGhlIHRhZyB2YWx1ZSBpcyBzZXQgdG8gWUVTLCBhIHNpZGUgcGFuZWwgd2lsbCBiZSBnZW5lcmF0ZWQgDQorIyBjb250YWluaW5nIGEgdHJlZS1saWtlIGluZGV4IHN0cnVjdHVyZSAoanVzdCBsaWtlIHRoZSBvbmUgdGhhdCANCisjIGlzIGdlbmVyYXRlZCBmb3IgSFRNTCBIZWxwKS4gRm9yIHRoaXMgdG8gd29yayBhIGJyb3dzZXIgdGhhdCBzdXBwb3J0cyANCisjIEphdmFTY3JpcHQsIERIVE1MLCBDU1MgYW5kIGZyYW1lcyBpcyByZXF1aXJlZCAoaS5lLiBhbnkgbW9kZXJuIGJyb3dzZXIpLiANCisjIFdpbmRvd3MgdXNlcnMgYXJlIHByb2JhYmx5IGJldHRlciBvZmYgdXNpbmcgdGhlIEhUTUwgaGVscCBmZWF0dXJlLg0KKw0KK0dFTkVSQVRFX1RSRUVWSUVXICAgICAgPSBZRVMNCisNCisjIEJ5IGVuYWJsaW5nIFVTRV9JTkxJTkVfVFJFRVMsIGRveHlnZW4gd2lsbCBnZW5lcmF0ZSB0aGUgR3JvdXBzLCBEaXJlY3RvcmllcywgDQorIyBhbmQgQ2xhc3MgSGllcmFyY2h5IHBhZ2VzIHVzaW5nIGEgdHJlZSB2aWV3IGluc3RlYWQgb2YgYW4gb3JkZXJlZCBsaXN0Lg0KKw0KK1VTRV9JTkxJTkVfVFJFRVMgICAgICAgPSBOTw0KKw0KKyMgSWYgdGhlIHRyZWV2aWV3IGlzIGVuYWJsZWQgKHNlZSBHRU5FUkFURV9UUkVFVklFVykgdGhlbiB0aGlzIHRhZyBjYW4gYmUgDQorIyB1c2VkIHRvIHNldCB0aGUgaW5pdGlhbCB3aWR0aCAoaW4gcGl4ZWxzKSBvZiB0aGUgZnJhbWUgaW4gd2hpY2ggdGhlIHRyZWUgDQorIyBpcyBzaG93bi4NCisNCitUUkVFVklFV19XSURUSCAgICAgICAgID0gMjUwDQorDQorIyBXaGVuIHRoZSBFWFRfTElOS1NfSU5fV0lORE9XIG9wdGlvbiBpcyBzZXQgdG8gWUVTIGRveHlnZW4gd2lsbCBvcGVuIA0KKyMgbGlua3MgdG8gZXh0ZXJuYWwgc3ltYm9scyBpbXBvcnRlZCB2aWEgdGFnIGZpbGVzIGluIGEgc2VwYXJhdGUgd2luZG93Lg0KKw0KK0VYVF9MSU5LU19JTl9XSU5ET1cgICAgPSBOTw0KKw0KKyMgVXNlIHRoaXMgdGFnIHRvIGNoYW5nZSB0aGUgZm9udCBzaXplIG9mIExhdGV4IGZvcm11bGFzIGluY2x1ZGVkIA0KKyMgYXMgaW1hZ2VzIGluIHRoZSBIVE1MIGRvY3VtZW50YXRpb24uIFRoZSBkZWZhdWx0IGlzIDEwLiBOb3RlIHRoYXQgDQorIyB3aGVuIHlvdSBjaGFuZ2UgdGhlIGZvbnQgc2l6ZSBhZnRlciBhIHN1Y2Nlc3NmdWwgZG94eWdlbiBydW4geW91IG5lZWQgDQorIyB0byBtYW51YWxseSByZW1vdmUgYW55IGZvcm1fKi5wbmcgaW1hZ2VzIGZyb20gdGhlIEhUTUwgb3V0cHV0IGRpcmVjdG9yeSANCisjIHRvIGZvcmNlIHRoZW0gdG8gYmUgcmVnZW5lcmF0ZWQuDQorDQorRk9STVVMQV9GT05UU0laRSAgICAgICA9IDEwDQorDQorIyBVc2UgdGhlIEZPUk1VTEFfVFJBTlBBUkVOVCB0YWcgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgb3Igbm90IHRoZSBpbWFnZXMgDQorIyBnZW5lcmF0ZWQgZm9yIGZvcm11bGFzIGFyZSB0cmFuc3BhcmVudCBQTkdzLiBUcmFuc3BhcmVudCBQTkdzIGFyZSANCisjIG5vdCBzdXBwb3J0ZWQgcHJvcGVybHkgZm9yIElFIDYuMCwgYnV0IGFyZSBzdXBwb3J0ZWQgb24gYWxsIG1vZGVybiBicm93c2Vycy4gDQorIyBOb3RlIHRoYXQgd2hlbiBjaGFuZ2luZyB0aGlzIG9wdGlvbiB5b3UgbmVlZCB0byBkZWxldGUgYW55IGZvcm1fKi5wbmcgZmlsZXMgDQorIyBpbiB0aGUgSFRNTCBvdXRwdXQgYmVmb3JlIHRoZSBjaGFuZ2VzIGhhdmUgZWZmZWN0Lg0KKw0KK0ZPUk1VTEFfVFJBTlNQQVJFTlQgICAgPSBZRVMNCisNCisjIEVuYWJsZSB0aGUgVVNFX01BVEhKQVggb3B0aW9uIHRvIHJlbmRlciBMYVRlWCBmb3JtdWxhcyB1c2luZyBNYXRoSmF4IA0KKyMgKHNlZSBodHRwOi8vd3d3Lm1hdGhqYXgub3JnKSB3aGljaCB1c2VzIGNsaWVudCBzaWRlIEphdmFzY3JpcHQgZm9yIHRoZSANCisjIHJlbmRlcmluZyBpbnN0ZWFkIG9mIHVzaW5nIHByZXJlbmRlcmVkIGJpdG1hcHMuIFVzZSB0aGlzIGlmIHlvdSBkbyBub3QgDQorIyBoYXZlIExhVGVYIGluc3RhbGxlZCBvciBpZiB5b3Ugd2FudCB0byBmb3JtdWxhcyBsb29rIHByZXR0aWVyIGluIHRoZSBIVE1MIA0KKyMgb3V0cHV0LiBXaGVuIGVuYWJsZWQgeW91IGFsc28gbmVlZCB0byBpbnN0YWxsIE1hdGhKYXggc2VwYXJhdGVseSBhbmQgDQorIyBjb25maWd1cmUgdGhlIHBhdGggdG8gaXQgdXNpbmcgdGhlIE1BVEhKQVhfUkVMUEFUSCBvcHRpb24uDQorDQorVVNFX01BVEhKQVggICAgICAgICAgICA9IE5PDQorDQorIyBXaGVuIE1hdGhKYXggaXMgZW5hYmxlZCB5b3UgbmVlZCB0byBzcGVjaWZ5IHRoZSBsb2NhdGlvbiByZWxhdGl2ZSB0byB0aGUgDQorIyBIVE1MIG91dHB1dCBkaXJlY3RvcnkgdXNpbmcgdGhlIE1BVEhKQVhfUkVMUEFUSCBvcHRpb24uIFRoZSBkZXN0aW5hdGlvbiANCisjIGRpcmVjdG9yeSBzaG91bGQgY29udGFpbiB0aGUgTWF0aEpheC5qcyBzY3JpcHQuIEZvciBpbnN0YW5jZSwgaWYgdGhlIG1hdGhqYXggDQorIyBkaXJlY3RvcnkgaXMgbG9jYXRlZCBhdCB0aGUgc2FtZSBsZXZlbCBhcyB0aGUgSFRNTCBvdXRwdXQgZGlyZWN0b3J5LCB0aGVuIA0KKyMgTUFUSEpBWF9SRUxQQVRIIHNob3VsZCBiZSAuLi9tYXRoamF4LiBUaGUgZGVmYXVsdCB2YWx1ZSBwb2ludHMgdG8gdGhlDQorIyBtYXRoamF4Lm9yZyBzaXRlLCBzbyB5b3UgY2FuIHF1aWNrbHkgc2VlIHRoZSByZXN1bHQgd2l0aG91dCBpbnN0YWxsaW5nIA0KKyMgTWF0aEpheCwgYnV0IGl0IGlzIHN0cm9uZ2x5IHJlY29tbWVuZGVkIHRvIGluc3RhbGwgYSBsb2NhbCBjb3B5IG9mIE1hdGhKYXggDQorIyBiZWZvcmUgZGVwbG95bWVudC4NCisNCitNQVRISkFYX1JFTFBBVEggICAgICAgID0gaHR0cDovL3d3dy5tYXRoamF4Lm9yZy9tYXRoamF4DQorDQorIyBXaGVuIHRoZSBTRUFSQ0hFTkdJTkUgdGFnIGlzIGVuYWJsZWQgZG94eWdlbiB3aWxsIGdlbmVyYXRlIGEgc2VhcmNoIGJveCANCisjIGZvciB0aGUgSFRNTCBvdXRwdXQuIFRoZSB1bmRlcmx5aW5nIHNlYXJjaCBlbmdpbmUgdXNlcyBqYXZhc2NyaXB0IA0KKyMgYW5kIERIVE1MIGFuZCBzaG91bGQgd29yayBvbiBhbnkgbW9kZXJuIGJyb3dzZXIuIE5vdGUgdGhhdCB3aGVuIHVzaW5nIA0KKyMgSFRNTCBoZWxwIChHRU5FUkFURV9IVE1MSEVMUCksIFF0IGhlbHAgKEdFTkVSQVRFX1FIUCksIG9yIGRvY3NldHMgDQorIyAoR0VORVJBVEVfRE9DU0VUKSB0aGVyZSBpcyBhbHJlYWR5IGEgc2VhcmNoIGZ1bmN0aW9uIHNvIHRoaXMgb25lIHNob3VsZCANCisjIHR5cGljYWxseSBiZSBkaXNhYmxlZC4gRm9yIGxhcmdlIHByb2plY3RzIHRoZSBqYXZhc2NyaXB0IGJhc2VkIHNlYXJjaCBlbmdpbmUgDQorIyBjYW4gYmUgc2xvdywgdGhlbiBlbmFibGluZyBTRVJWRVJfQkFTRURfU0VBUkNIIG1heSBwcm92aWRlIGEgYmV0dGVyIHNvbHV0aW9uLg0KKw0KK1NFQVJDSEVOR0lORSAgICAgICAgICAgPSBZRVMNCisNCisjIFdoZW4gdGhlIFNFUlZFUl9CQVNFRF9TRUFSQ0ggdGFnIGlzIGVuYWJsZWQgdGhlIHNlYXJjaCBlbmdpbmUgd2lsbCBiZSANCisjIGltcGxlbWVudGVkIHVzaW5nIGEgUEhQIGVuYWJsZWQgd2ViIHNlcnZlciBpbnN0ZWFkIG9mIGF0IHRoZSB3ZWIgY2xpZW50IA0KKyMgdXNpbmcgSmF2YXNjcmlwdC4gRG94eWdlbiB3aWxsIGdlbmVyYXRlIHRoZSBzZWFyY2ggUEhQIHNjcmlwdCBhbmQgaW5kZXggDQorIyBmaWxlIHRvIHB1dCBvbiB0aGUgd2ViIHNlcnZlci4gVGhlIGFkdmFudGFnZSBvZiB0aGUgc2VydmVyIA0KKyMgYmFzZWQgYXBwcm9hY2ggaXMgdGhhdCBpdCBzY2FsZXMgYmV0dGVyIHRvIGxhcmdlIHByb2plY3RzIGFuZCBhbGxvd3MgDQorIyBmdWxsIHRleHQgc2VhcmNoLiBUaGUgZGlzYWR2YW50YWdlcyBhcmUgdGhhdCBpdCBpcyBtb3JlIGRpZmZpY3VsdCB0byBzZXR1cCANCisjIGFuZCBkb2VzIG5vdCBoYXZlIGxpdmUgc2VhcmNoaW5nIGNhcGFiaWxpdGllcy4NCisNCitTRVJWRVJfQkFTRURfU0VBUkNIICAgID0gTk8NCisNCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorIyBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byB0aGUgTGFUZVggb3V0cHV0DQorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKw0KKyMgSWYgdGhlIEdFTkVSQVRFX0xBVEVYIHRhZyBpcyBzZXQgdG8gWUVTICh0aGUgZGVmYXVsdCkgRG94eWdlbiB3aWxsIA0KKyMgZ2VuZXJhdGUgTGF0ZXggb3V0cHV0Lg0KKw0KK0dFTkVSQVRFX0xBVEVYICAgICAgICAgPSBOTw0KKw0KKyMgVGhlIExBVEVYX09VVFBVVCB0YWcgaXMgdXNlZCB0byBzcGVjaWZ5IHdoZXJlIHRoZSBMYVRlWCBkb2NzIHdpbGwgYmUgcHV0LiANCisjIElmIGEgcmVsYXRpdmUgcGF0aCBpcyBlbnRlcmVkIHRoZSB2YWx1ZSBvZiBPVVRQVVRfRElSRUNUT1JZIHdpbGwgYmUgDQorIyBwdXQgaW4gZnJvbnQgb2YgaXQuIElmIGxlZnQgYmxhbmsgYGxhdGV4JyB3aWxsIGJlIHVzZWQgYXMgdGhlIGRlZmF1bHQgcGF0aC4NCisNCitMQVRFWF9PVVRQVVQgICAgICAgICAgID0gbGF0ZXgNCisNCisjIFRoZSBMQVRFWF9DTURfTkFNRSB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSB0aGUgTGFUZVggY29tbWFuZCBuYW1lIHRvIGJlIA0KKyMgaW52b2tlZC4gSWYgbGVmdCBibGFuayBgbGF0ZXgnIHdpbGwgYmUgdXNlZCBhcyB0aGUgZGVmYXVsdCBjb21tYW5kIG5hbWUuIA0KKyMgTm90ZSB0aGF0IHdoZW4gZW5hYmxpbmcgVVNFX1BERkxBVEVYIHRoaXMgb3B0aW9uIGlzIG9ubHkgdXNlZCBmb3IgDQorIyBnZW5lcmF0aW5nIGJpdG1hcHMgZm9yIGZvcm11bGFzIGluIHRoZSBIVE1MIG91dHB1dCwgYnV0IG5vdCBpbiB0aGUgDQorIyBNYWtlZmlsZSB0aGF0IGlzIHdyaXR0ZW4gdG8gdGhlIG91dHB1dCBkaXJlY3RvcnkuDQorDQorTEFURVhfQ01EX05BTUUgICAgICAgICA9IGxhdGV4DQorDQorIyBUaGUgTUFLRUlOREVYX0NNRF9OQU1FIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IHRoZSBjb21tYW5kIG5hbWUgdG8gDQorIyBnZW5lcmF0ZSBpbmRleCBmb3IgTGFUZVguIElmIGxlZnQgYmxhbmsgYG1ha2VpbmRleCcgd2lsbCBiZSB1c2VkIGFzIHRoZSANCisjIGRlZmF1bHQgY29tbWFuZCBuYW1lLg0KKw0KK01BS0VJTkRFWF9DTURfTkFNRSAgICAgPSBtYWtlaW5kZXgNCisNCisjIElmIHRoZSBDT01QQUNUX0xBVEVYIHRhZyBpcyBzZXQgdG8gWUVTIERveHlnZW4gZ2VuZXJhdGVzIG1vcmUgY29tcGFjdCANCisjIExhVGVYIGRvY3VtZW50cy4gVGhpcyBtYXkgYmUgdXNlZnVsIGZvciBzbWFsbCBwcm9qZWN0cyBhbmQgbWF5IGhlbHAgdG8gDQorIyBzYXZlIHNvbWUgdHJlZXMgaW4gZ2VuZXJhbC4NCisNCitDT01QQUNUX0xBVEVYICAgICAgICAgID0gTk8NCisNCisjIFRoZSBQQVBFUl9UWVBFIHRhZyBjYW4gYmUgdXNlZCB0byBzZXQgdGhlIHBhcGVyIHR5cGUgdGhhdCBpcyB1c2VkIA0KKyMgYnkgdGhlIHByaW50ZXIuIFBvc3NpYmxlIHZhbHVlcyBhcmU6IGE0LCBsZXR0ZXIsIGxlZ2FsIGFuZCANCisjIGV4ZWN1dGl2ZS4gSWYgbGVmdCBibGFuayBhNHdpZGUgd2lsbCBiZSB1c2VkLg0KKw0KK1BBUEVSX1RZUEUgICAgICAgICAgICAgPSBhNHdpZGUNCisNCisjIFRoZSBFWFRSQV9QQUNLQUdFUyB0YWcgY2FuIGJlIHRvIHNwZWNpZnkgb25lIG9yIG1vcmUgbmFtZXMgb2YgTGFUZVggDQorIyBwYWNrYWdlcyB0aGF0IHNob3VsZCBiZSBpbmNsdWRlZCBpbiB0aGUgTGFUZVggb3V0cHV0Lg0KKw0KK0VYVFJBX1BBQ0tBR0VTICAgICAgICAgPSANCisNCisjIFRoZSBMQVRFWF9IRUFERVIgdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgYSBwZXJzb25hbCBMYVRlWCBoZWFkZXIgZm9yIA0KKyMgdGhlIGdlbmVyYXRlZCBsYXRleCBkb2N1bWVudC4gVGhlIGhlYWRlciBzaG91bGQgY29udGFpbiBldmVyeXRoaW5nIHVudGlsIA0KKyMgdGhlIGZpcnN0IGNoYXB0ZXIuIElmIGl0IGlzIGxlZnQgYmxhbmsgZG94eWdlbiB3aWxsIGdlbmVyYXRlIGEgDQorIyBzdGFuZGFyZCBoZWFkZXIuIE5vdGljZTogb25seSB1c2UgdGhpcyB0YWcgaWYgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nIQ0KKw0KK0xBVEVYX0hFQURFUiAgICAgICAgICAgPSANCisNCisjIElmIHRoZSBQREZfSFlQRVJMSU5LUyB0YWcgaXMgc2V0IHRvIFlFUywgdGhlIExhVGVYIHRoYXQgaXMgZ2VuZXJhdGVkIA0KKyMgaXMgcHJlcGFyZWQgZm9yIGNvbnZlcnNpb24gdG8gcGRmICh1c2luZyBwczJwZGYpLiBUaGUgcGRmIGZpbGUgd2lsbCANCisjIGNvbnRhaW4gbGlua3MgKGp1c3QgbGlrZSB0aGUgSFRNTCBvdXRwdXQpIGluc3RlYWQgb2YgcGFnZSByZWZlcmVuY2VzIA0KKyMgVGhpcyBtYWtlcyB0aGUgb3V0cHV0IHN1aXRhYmxlIGZvciBvbmxpbmUgYnJvd3NpbmcgdXNpbmcgYSBwZGYgdmlld2VyLg0KKw0KK1BERl9IWVBFUkxJTktTICAgICAgICAgPSBZRVMNCisNCisjIElmIHRoZSBVU0VfUERGTEFURVggdGFnIGlzIHNldCB0byBZRVMsIHBkZmxhdGV4IHdpbGwgYmUgdXNlZCBpbnN0ZWFkIG9mIA0KKyMgcGxhaW4gbGF0ZXggaW4gdGhlIGdlbmVyYXRlZCBNYWtlZmlsZS4gU2V0IHRoaXMgb3B0aW9uIHRvIFlFUyB0byBnZXQgYSANCisjIGhpZ2hlciBxdWFsaXR5IFBERiBkb2N1bWVudGF0aW9uLg0KKw0KK1VTRV9QREZMQVRFWCAgICAgICAgICAgPSBZRVMNCisNCisjIElmIHRoZSBMQVRFWF9CQVRDSE1PREUgdGFnIGlzIHNldCB0byBZRVMsIGRveHlnZW4gd2lsbCBhZGQgdGhlIFxcYmF0Y2htb2RlLiANCisjIGNvbW1hbmQgdG8gdGhlIGdlbmVyYXRlZCBMYVRlWCBmaWxlcy4gVGhpcyB3aWxsIGluc3RydWN0IExhVGVYIHRvIGtlZXAgDQorIyBydW5uaW5nIGlmIGVycm9ycyBvY2N1ciwgaW5zdGVhZCBvZiBhc2tpbmcgdGhlIHVzZXIgZm9yIGhlbHAuIA0KKyMgVGhpcyBvcHRpb24gaXMgYWxzbyB1c2VkIHdoZW4gZ2VuZXJhdGluZyBmb3JtdWxhcyBpbiBIVE1MLg0KKw0KK0xBVEVYX0JBVENITU9ERSAgICAgICAgPSBOTw0KKw0KKyMgSWYgTEFURVhfSElERV9JTkRJQ0VTIGlzIHNldCB0byBZRVMgdGhlbiBkb3h5Z2VuIHdpbGwgbm90IA0KKyMgaW5jbHVkZSB0aGUgaW5kZXggY2hhcHRlcnMgKHN1Y2ggYXMgRmlsZSBJbmRleCwgQ29tcG91bmQgSW5kZXgsIGV0Yy4pIA0KKyMgaW4gdGhlIG91dHB1dC4NCisNCitMQVRFWF9ISURFX0lORElDRVMgICAgID0gTk8NCisNCisjIElmIExBVEVYX1NPVVJDRV9DT0RFIGlzIHNldCB0byBZRVMgdGhlbiBkb3h5Z2VuIHdpbGwgaW5jbHVkZSANCisjIHNvdXJjZSBjb2RlIHdpdGggc3ludGF4IGhpZ2hsaWdodGluZyBpbiB0aGUgTGFUZVggb3V0cHV0LiANCisjIE5vdGUgdGhhdCB3aGljaCBzb3VyY2VzIGFyZSBzaG93biBhbHNvIGRlcGVuZHMgb24gb3RoZXIgc2V0dGluZ3MgDQorIyBzdWNoIGFzIFNPVVJDRV9CUk9XU0VSLg0KKw0KK0xBVEVYX1NPVVJDRV9DT0RFICAgICAgPSBOTw0KKw0KKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisjIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHRoZSBSVEYgb3V0cHV0DQorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKw0KKyMgSWYgdGhlIEdFTkVSQVRFX1JURiB0YWcgaXMgc2V0IHRvIFlFUyBEb3h5Z2VuIHdpbGwgZ2VuZXJhdGUgUlRGIG91dHB1dCANCisjIFRoZSBSVEYgb3V0cHV0IGlzIG9wdGltaXplZCBmb3IgV29yZCA5NyBhbmQgbWF5IG5vdCBsb29rIHZlcnkgcHJldHR5IHdpdGggDQorIyBvdGhlciBSVEYgcmVhZGVycyBvciBlZGl0b3JzLg0KKw0KK0dFTkVSQVRFX1JURiAgICAgICAgICAgPSBOTw0KKw0KKyMgVGhlIFJURl9PVVRQVVQgdGFnIGlzIHVzZWQgdG8gc3BlY2lmeSB3aGVyZSB0aGUgUlRGIGRvY3Mgd2lsbCBiZSBwdXQuIA0KKyMgSWYgYSByZWxhdGl2ZSBwYXRoIGlzIGVudGVyZWQgdGhlIHZhbHVlIG9mIE9VVFBVVF9ESVJFQ1RPUlkgd2lsbCBiZSANCisjIHB1dCBpbiBmcm9udCBvZiBpdC4gSWYgbGVmdCBibGFuayBgcnRmJyB3aWxsIGJlIHVzZWQgYXMgdGhlIGRlZmF1bHQgcGF0aC4NCisNCitSVEZfT1VUUFVUICAgICAgICAgICAgID0gcnRmDQorDQorIyBJZiB0aGUgQ09NUEFDVF9SVEYgdGFnIGlzIHNldCB0byBZRVMgRG94eWdlbiBnZW5lcmF0ZXMgbW9yZSBjb21wYWN0IA0KKyMgUlRGIGRvY3VtZW50cy4gVGhpcyBtYXkgYmUgdXNlZnVsIGZvciBzbWFsbCBwcm9qZWN0cyBhbmQgbWF5IGhlbHAgdG8gDQorIyBzYXZlIHNvbWUgdHJlZXMgaW4gZ2VuZXJhbC4NCisNCitDT01QQUNUX1JURiAgICAgICAgICAgID0gTk8NCisNCisjIElmIHRoZSBSVEZfSFlQRVJMSU5LUyB0YWcgaXMgc2V0IHRvIFlFUywgdGhlIFJURiB0aGF0IGlzIGdlbmVyYXRlZCANCisjIHdpbGwgY29udGFpbiBoeXBlcmxpbmsgZmllbGRzLiBUaGUgUlRGIGZpbGUgd2lsbCANCisjIGNvbnRhaW4gbGlua3MgKGp1c3QgbGlrZSB0aGUgSFRNTCBvdXRwdXQpIGluc3RlYWQgb2YgcGFnZSByZWZlcmVuY2VzLiANCisjIFRoaXMgbWFrZXMgdGhlIG91dHB1dCBzdWl0YWJsZSBmb3Igb25saW5lIGJyb3dzaW5nIHVzaW5nIFdPUkQgb3Igb3RoZXIgDQorIyBwcm9ncmFtcyB3aGljaCBzdXBwb3J0IHRob3NlIGZpZWxkcy4gDQorIyBOb3RlOiB3b3JkcGFkICh3cml0ZSkgYW5kIG90aGVycyBkbyBub3Qgc3VwcG9ydCBsaW5rcy4NCisNCitSVEZfSFlQRVJMSU5LUyAgICAgICAgID0gTk8NCisNCisjIExvYWQgc3R5bGVzaGVldCBkZWZpbml0aW9ucyBmcm9tIGZpbGUuIFN5bnRheCBpcyBzaW1pbGFyIHRvIGRveHlnZW4ncyANCisjIGNvbmZpZyBmaWxlLCBpLmUuIGEgc2VyaWVzIG9mIGFzc2lnbm1lbnRzLiBZb3Ugb25seSBoYXZlIHRvIHByb3ZpZGUgDQorIyByZXBsYWNlbWVudHMsIG1pc3NpbmcgZGVmaW5pdGlvbnMgYXJlIHNldCB0byB0aGVpciBkZWZhdWx0IHZhbHVlLg0KKw0KK1JURl9TVFlMRVNIRUVUX0ZJTEUgICAgPSANCisNCisjIFNldCBvcHRpb25hbCB2YXJpYWJsZXMgdXNlZCBpbiB0aGUgZ2VuZXJhdGlvbiBvZiBhbiBydGYgZG9jdW1lbnQuIA0KKyMgU3ludGF4IGlzIHNpbWlsYXIgdG8gZG94eWdlbidzIGNvbmZpZyBmaWxlLg0KKw0KK1JURl9FWFRFTlNJT05TX0ZJTEUgICAgPSANCisNCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorIyBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byB0aGUgbWFuIHBhZ2Ugb3V0cHV0DQorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKw0KKyMgSWYgdGhlIEdFTkVSQVRFX01BTiB0YWcgaXMgc2V0IHRvIFlFUyAodGhlIGRlZmF1bHQpIERveHlnZW4gd2lsbCANCisjIGdlbmVyYXRlIG1hbiBwYWdlcw0KKw0KK0dFTkVSQVRFX01BTiAgICAgICAgICAgPSBOTw0KKw0KKyMgVGhlIE1BTl9PVVRQVVQgdGFnIGlzIHVzZWQgdG8gc3BlY2lmeSB3aGVyZSB0aGUgbWFuIHBhZ2VzIHdpbGwgYmUgcHV0LiANCisjIElmIGEgcmVsYXRpdmUgcGF0aCBpcyBlbnRlcmVkIHRoZSB2YWx1ZSBvZiBPVVRQVVRfRElSRUNUT1JZIHdpbGwgYmUgDQorIyBwdXQgaW4gZnJvbnQgb2YgaXQuIElmIGxlZnQgYmxhbmsgYG1hbicgd2lsbCBiZSB1c2VkIGFzIHRoZSBkZWZhdWx0IHBhdGguDQorDQorTUFOX09VVFBVVCAgICAgICAgICAgICA9IG1hbg0KKw0KKyMgVGhlIE1BTl9FWFRFTlNJT04gdGFnIGRldGVybWluZXMgdGhlIGV4dGVuc2lvbiB0aGF0IGlzIGFkZGVkIHRvIA0KKyMgdGhlIGdlbmVyYXRlZCBtYW4gcGFnZXMgKGRlZmF1bHQgaXMgdGhlIHN1YnJvdXRpbmUncyBzZWN0aW9uIC4zKQ0KKw0KK01BTl9FWFRFTlNJT04gICAgICAgICAgPSAuMw0KKw0KKyMgSWYgdGhlIE1BTl9MSU5LUyB0YWcgaXMgc2V0IHRvIFlFUyBhbmQgRG94eWdlbiBnZW5lcmF0ZXMgbWFuIG91dHB1dCwgDQorIyB0aGVuIGl0IHdpbGwgZ2VuZXJhdGUgb25lIGFkZGl0aW9uYWwgbWFuIGZpbGUgZm9yIGVhY2ggZW50aXR5IA0KKyMgZG9jdW1lbnRlZCBpbiB0aGUgcmVhbCBtYW4gcGFnZShzKS4gVGhlc2UgYWRkaXRpb25hbCBmaWxlcyANCisjIG9ubHkgc291cmNlIHRoZSByZWFsIG1hbiBwYWdlLCBidXQgd2l0aG91dCB0aGVtIHRoZSBtYW4gY29tbWFuZCANCisjIHdvdWxkIGJlIHVuYWJsZSB0byBmaW5kIHRoZSBjb3JyZWN0IHBhZ2UuIFRoZSBkZWZhdWx0IGlzIE5PLg0KKw0KK01BTl9MSU5LUyAgICAgICAgICAgICAgPSBOTw0KKw0KKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisjIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHRoZSBYTUwgb3V0cHV0DQorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKw0KKyMgSWYgdGhlIEdFTkVSQVRFX1hNTCB0YWcgaXMgc2V0IHRvIFlFUyBEb3h5Z2VuIHdpbGwgDQorIyBnZW5lcmF0ZSBhbiBYTUwgZmlsZSB0aGF0IGNhcHR1cmVzIHRoZSBzdHJ1Y3R1cmUgb2YgDQorIyB0aGUgY29kZSBpbmNsdWRpbmcgYWxsIGRvY3VtZW50YXRpb24uDQorDQorR0VORVJBVEVfWE1MICAgICAgICAgICA9IE5PDQorDQorIyBUaGUgWE1MX09VVFBVVCB0YWcgaXMgdXNlZCB0byBzcGVjaWZ5IHdoZXJlIHRoZSBYTUwgcGFnZXMgd2lsbCBiZSBwdXQuIA0KKyMgSWYgYSByZWxhdGl2ZSBwYXRoIGlzIGVudGVyZWQgdGhlIHZhbHVlIG9mIE9VVFBVVF9ESVJFQ1RPUlkgd2lsbCBiZSANCisjIHB1dCBpbiBmcm9udCBvZiBpdC4gSWYgbGVmdCBibGFuayBgeG1sJyB3aWxsIGJlIHVzZWQgYXMgdGhlIGRlZmF1bHQgcGF0aC4NCisNCitYTUxfT1VUUFVUICAgICAgICAgICAgID0geG1sDQorDQorIyBUaGUgWE1MX1NDSEVNQSB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBhbiBYTUwgc2NoZW1hLCANCisjIHdoaWNoIGNhbiBiZSB1c2VkIGJ5IGEgdmFsaWRhdGluZyBYTUwgcGFyc2VyIHRvIGNoZWNrIHRoZSANCisjIHN5bnRheCBvZiB0aGUgWE1MIGZpbGVzLg0KKw0KK1hNTF9TQ0hFTUEgICAgICAgICAgICAgPSANCisNCisjIFRoZSBYTUxfRFREIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGFuIFhNTCBEVEQsIA0KKyMgd2hpY2ggY2FuIGJlIHVzZWQgYnkgYSB2YWxpZGF0aW5nIFhNTCBwYXJzZXIgdG8gY2hlY2sgdGhlIA0KKyMgc3ludGF4IG9mIHRoZSBYTUwgZmlsZXMuDQorDQorWE1MX0RURCAgICAgICAgICAgICAgICA9IA0KKw0KKyMgSWYgdGhlIFhNTF9QUk9HUkFNTElTVElORyB0YWcgaXMgc2V0IHRvIFlFUyBEb3h5Z2VuIHdpbGwgDQorIyBkdW1wIHRoZSBwcm9ncmFtIGxpc3RpbmdzIChpbmNsdWRpbmcgc3ludGF4IGhpZ2hsaWdodGluZyANCisjIGFuZCBjcm9zcy1yZWZlcmVuY2luZyBpbmZvcm1hdGlvbikgdG8gdGhlIFhNTCBvdXRwdXQuIE5vdGUgdGhhdCANCisjIGVuYWJsaW5nIHRoaXMgd2lsbCBzaWduaWZpY2FudGx5IGluY3JlYXNlIHRoZSBzaXplIG9mIHRoZSBYTUwgb3V0cHV0Lg0KKw0KK1hNTF9QUk9HUkFNTElTVElORyAgICAgPSBZRVMNCisNCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorIyBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBBdXRvR2VuIERlZmluaXRpb25zIG91dHB1dA0KKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisNCisjIElmIHRoZSBHRU5FUkFURV9BVVRPR0VOX0RFRiB0YWcgaXMgc2V0IHRvIFlFUyBEb3h5Z2VuIHdpbGwgDQorIyBnZW5lcmF0ZSBhbiBBdXRvR2VuIERlZmluaXRpb25zIChzZWUgYXV0b2dlbi5zZi5uZXQpIGZpbGUgDQorIyB0aGF0IGNhcHR1cmVzIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIGNvZGUgaW5jbHVkaW5nIGFsbCANCisjIGRvY3VtZW50YXRpb24uIE5vdGUgdGhhdCB0aGlzIGZlYXR1cmUgaXMgc3RpbGwgZXhwZXJpbWVudGFsIA0KKyMgYW5kIGluY29tcGxldGUgYXQgdGhlIG1vbWVudC4NCisNCitHRU5FUkFURV9BVVRPR0VOX0RFRiAgID0gTk8NCisNCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorIyBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byB0aGUgUGVybCBtb2R1bGUgb3V0cHV0DQorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKw0KKyMgSWYgdGhlIEdFTkVSQVRFX1BFUkxNT0QgdGFnIGlzIHNldCB0byBZRVMgRG94eWdlbiB3aWxsIA0KKyMgZ2VuZXJhdGUgYSBQZXJsIG1vZHVsZSBmaWxlIHRoYXQgY2FwdHVyZXMgdGhlIHN0cnVjdHVyZSBvZiANCisjIHRoZSBjb2RlIGluY2x1ZGluZyBhbGwgZG9jdW1lbnRhdGlvbi4gTm90ZSB0aGF0IHRoaXMgDQorIyBmZWF0dXJlIGlzIHN0aWxsIGV4cGVyaW1lbnRhbCBhbmQgaW5jb21wbGV0ZSBhdCB0aGUgDQorIyBtb21lbnQuDQorDQorR0VORVJBVEVfUEVSTE1PRCAgICAgICA9IE5PDQorDQorIyBJZiB0aGUgUEVSTE1PRF9MQVRFWCB0YWcgaXMgc2V0IHRvIFlFUyBEb3h5Z2VuIHdpbGwgZ2VuZXJhdGUgDQorIyB0aGUgbmVjZXNzYXJ5IE1ha2VmaWxlIHJ1bGVzLCBQZXJsIHNjcmlwdHMgYW5kIExhVGVYIGNvZGUgdG8gYmUgYWJsZSANCisjIHRvIGdlbmVyYXRlIFBERiBhbmQgRFZJIG91dHB1dCBmcm9tIHRoZSBQZXJsIG1vZHVsZSBvdXRwdXQuDQorDQorUEVSTE1PRF9MQVRFWCAgICAgICAgICA9IE5PDQorDQorIyBJZiB0aGUgUEVSTE1PRF9QUkVUVFkgdGFnIGlzIHNldCB0byBZRVMgdGhlIFBlcmwgbW9kdWxlIG91dHB1dCB3aWxsIGJlIA0KKyMgbmljZWx5IGZvcm1hdHRlZCBzbyBpdCBjYW4gYmUgcGFyc2VkIGJ5IGEgaHVtYW4gcmVhZGVyLiAgVGhpcyBpcyB1c2VmdWwgDQorIyBpZiB5b3Ugd2FudCB0byB1bmRlcnN0YW5kIHdoYXQgaXMgZ29pbmcgb24uICBPbiB0aGUgb3RoZXIgaGFuZCwgaWYgdGhpcyANCisjIHRhZyBpcyBzZXQgdG8gTk8gdGhlIHNpemUgb2YgdGhlIFBlcmwgbW9kdWxlIG91dHB1dCB3aWxsIGJlIG11Y2ggc21hbGxlciANCisjIGFuZCBQZXJsIHdpbGwgcGFyc2UgaXQganVzdCB0aGUgc2FtZS4NCisNCitQRVJMTU9EX1BSRVRUWSAgICAgICAgID0gWUVTDQorDQorIyBUaGUgbmFtZXMgb2YgdGhlIG1ha2UgdmFyaWFibGVzIGluIHRoZSBnZW5lcmF0ZWQgZG94eXJ1bGVzLm1ha2UgZmlsZSANCisjIGFyZSBwcmVmaXhlZCB3aXRoIHRoZSBzdHJpbmcgY29udGFpbmVkIGluIFBFUkxNT0RfTUFLRVZBUl9QUkVGSVguIA0KKyMgVGhpcyBpcyB1c2VmdWwgc28gZGlmZmVyZW50IGRveHlydWxlcy5tYWtlIGZpbGVzIGluY2x1ZGVkIGJ5IHRoZSBzYW1lIA0KKyMgTWFrZWZpbGUgZG9uJ3Qgb3ZlcndyaXRlIGVhY2ggb3RoZXIncyB2YXJpYWJsZXMuDQorDQorUEVSTE1PRF9NQUtFVkFSX1BSRUZJWCA9IA0KKw0KKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisjIENvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHRoZSBwcmVwcm9jZXNzb3INCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorDQorIyBJZiB0aGUgRU5BQkxFX1BSRVBST0NFU1NJTkcgdGFnIGlzIHNldCB0byBZRVMgKHRoZSBkZWZhdWx0KSBEb3h5Z2VuIHdpbGwgDQorIyBldmFsdWF0ZSBhbGwgQy1wcmVwcm9jZXNzb3IgZGlyZWN0aXZlcyBmb3VuZCBpbiB0aGUgc291cmNlcyBhbmQgaW5jbHVkZSANCisjIGZpbGVzLg0KKw0KK0VOQUJMRV9QUkVQUk9DRVNTSU5HICAgPSBZRVMNCisNCisjIElmIHRoZSBNQUNST19FWFBBTlNJT04gdGFnIGlzIHNldCB0byBZRVMgRG94eWdlbiB3aWxsIGV4cGFuZCBhbGwgbWFjcm8gDQorIyBuYW1lcyBpbiB0aGUgc291cmNlIGNvZGUuIElmIHNldCB0byBOTyAodGhlIGRlZmF1bHQpIG9ubHkgY29uZGl0aW9uYWwgDQorIyBjb21waWxhdGlvbiB3aWxsIGJlIHBlcmZvcm1lZC4gTWFjcm8gZXhwYW5zaW9uIGNhbiBiZSBkb25lIGluIGEgY29udHJvbGxlZCANCisjIHdheSBieSBzZXR0aW5nIEVYUEFORF9PTkxZX1BSRURFRiB0byBZRVMuDQorDQorTUFDUk9fRVhQQU5TSU9OICAgICAgICA9IE5PDQorDQorIyBJZiB0aGUgRVhQQU5EX09OTFlfUFJFREVGIGFuZCBNQUNST19FWFBBTlNJT04gdGFncyBhcmUgYm90aCBzZXQgdG8gWUVTIA0KKyMgdGhlbiB0aGUgbWFjcm8gZXhwYW5zaW9uIGlzIGxpbWl0ZWQgdG8gdGhlIG1hY3JvcyBzcGVjaWZpZWQgd2l0aCB0aGUgDQorIyBQUkVERUZJTkVEIGFuZCBFWFBBTkRfQVNfREVGSU5FRCB0YWdzLg0KKw0KK0VYUEFORF9PTkxZX1BSRURFRiAgICAgPSBOTw0KKw0KKyMgSWYgdGhlIFNFQVJDSF9JTkNMVURFUyB0YWcgaXMgc2V0IHRvIFlFUyAodGhlIGRlZmF1bHQpIHRoZSBpbmNsdWRlcyBmaWxlcyANCisjIGluIHRoZSBJTkNMVURFX1BBVEggKHNlZSBiZWxvdykgd2lsbCBiZSBzZWFyY2ggaWYgYSAjaW5jbHVkZSBpcyBmb3VuZC4NCisNCitTRUFSQ0hfSU5DTFVERVMgICAgICAgID0gWUVTDQorDQorIyBUaGUgSU5DTFVERV9QQVRIIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IG9uZSBvciBtb3JlIGRpcmVjdG9yaWVzIHRoYXQgDQorIyBjb250YWluIGluY2x1ZGUgZmlsZXMgdGhhdCBhcmUgbm90IGlucHV0IGZpbGVzIGJ1dCBzaG91bGQgYmUgcHJvY2Vzc2VkIGJ5IA0KKyMgdGhlIHByZXByb2Nlc3Nvci4NCisNCitJTkNMVURFX1BBVEggICAgICAgICAgID0gDQorDQorIyBZb3UgY2FuIHVzZSB0aGUgSU5DTFVERV9GSUxFX1BBVFRFUk5TIHRhZyB0byBzcGVjaWZ5IG9uZSBvciBtb3JlIHdpbGRjYXJkIA0KKyMgcGF0dGVybnMgKGxpa2UgKi5oIGFuZCAqLmhwcCkgdG8gZmlsdGVyIG91dCB0aGUgaGVhZGVyLWZpbGVzIGluIHRoZSANCisjIGRpcmVjdG9yaWVzLiBJZiBsZWZ0IGJsYW5rLCB0aGUgcGF0dGVybnMgc3BlY2lmaWVkIHdpdGggRklMRV9QQVRURVJOUyB3aWxsIA0KKyMgYmUgdXNlZC4NCisNCitJTkNMVURFX0ZJTEVfUEFUVEVSTlMgID0gDQorDQorIyBUaGUgUFJFREVGSU5FRCB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBvbmUgb3IgbW9yZSBtYWNybyBuYW1lcyB0aGF0IA0KKyMgYXJlIGRlZmluZWQgYmVmb3JlIHRoZSBwcmVwcm9jZXNzb3IgaXMgc3RhcnRlZCAoc2ltaWxhciB0byB0aGUgLUQgb3B0aW9uIG9mIA0KKyMgZ2NjKS4gVGhlIGFyZ3VtZW50IG9mIHRoZSB0YWcgaXMgYSBsaXN0IG9mIG1hY3JvcyBvZiB0aGUgZm9ybTogbmFtZSANCisjIG9yIG5hbWU9ZGVmaW5pdGlvbiAobm8gc3BhY2VzKS4gSWYgdGhlIGRlZmluaXRpb24gYW5kIHRoZSA9IGFyZSANCisjIG9taXR0ZWQgPTEgaXMgYXNzdW1lZC4gVG8gcHJldmVudCBhIG1hY3JvIGRlZmluaXRpb24gZnJvbSBiZWluZyANCisjIHVuZGVmaW5lZCB2aWEgI3VuZGVmIG9yIHJlY3Vyc2l2ZWx5IGV4cGFuZGVkIHVzZSB0aGUgOj0gb3BlcmF0b3IgDQorIyBpbnN0ZWFkIG9mIHRoZSA9IG9wZXJhdG9yLg0KKw0KK1BSRURFRklORUQgICAgICAgICAgICAgPSANCisNCisjIElmIHRoZSBNQUNST19FWFBBTlNJT04gYW5kIEVYUEFORF9PTkxZX1BSRURFRiB0YWdzIGFyZSBzZXQgdG8gWUVTIHRoZW4gDQorIyB0aGlzIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGEgbGlzdCBvZiBtYWNybyBuYW1lcyB0aGF0IHNob3VsZCBiZSBleHBhbmRlZC4gDQorIyBUaGUgbWFjcm8gZGVmaW5pdGlvbiB0aGF0IGlzIGZvdW5kIGluIHRoZSBzb3VyY2VzIHdpbGwgYmUgdXNlZC4gDQorIyBVc2UgdGhlIFBSRURFRklORUQgdGFnIGlmIHlvdSB3YW50IHRvIHVzZSBhIGRpZmZlcmVudCBtYWNybyBkZWZpbml0aW9uLg0KKw0KK0VYUEFORF9BU19ERUZJTkVEICAgICAgPSANCisNCisjIElmIHRoZSBTS0lQX0ZVTkNUSU9OX01BQ1JPUyB0YWcgaXMgc2V0IHRvIFlFUyAodGhlIGRlZmF1bHQpIHRoZW4gDQorIyBkb3h5Z2VuJ3MgcHJlcHJvY2Vzc29yIHdpbGwgcmVtb3ZlIGFsbCBmdW5jdGlvbi1saWtlIG1hY3JvcyB0aGF0IGFyZSBhbG9uZSANCisjIG9uIGEgbGluZSwgaGF2ZSBhbiBhbGwgdXBwZXJjYXNlIG5hbWUsIGFuZCBkbyBub3QgZW5kIHdpdGggYSBzZW1pY29sb24uIFN1Y2ggDQorIyBmdW5jdGlvbiBtYWNyb3MgYXJlIHR5cGljYWxseSB1c2VkIGZvciBib2lsZXItcGxhdGUgY29kZSwgYW5kIHdpbGwgY29uZnVzZSANCisjIHRoZSBwYXJzZXIgaWYgbm90IHJlbW92ZWQuDQorDQorU0tJUF9GVU5DVElPTl9NQUNST1MgICA9IFlFUw0KKw0KKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisjIENvbmZpZ3VyYXRpb246OmFkZGl0aW9ucyByZWxhdGVkIHRvIGV4dGVybmFsIHJlZmVyZW5jZXMNCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorDQorIyBUaGUgVEFHRklMRVMgb3B0aW9uIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgb25lIG9yIG1vcmUgdGFnZmlsZXMuIA0KKyMgT3B0aW9uYWxseSBhbiBpbml0aWFsIGxvY2F0aW9uIG9mIHRoZSBleHRlcm5hbCBkb2N1bWVudGF0aW9uIA0KKyMgY2FuIGJlIGFkZGVkIGZvciBlYWNoIHRhZ2ZpbGUuIFRoZSBmb3JtYXQgb2YgYSB0YWcgZmlsZSB3aXRob3V0IA0KKyMgdGhpcyBsb2NhdGlvbiBpcyBhcyBmb2xsb3dzOiANCisjICAgVEFHRklMRVMgPSBmaWxlMSBmaWxlMiAuLi4gDQorIyBBZGRpbmcgbG9jYXRpb24gZm9yIHRoZSB0YWcgZmlsZXMgaXMgZG9uZSBhcyBmb2xsb3dzOiANCisjICAgVEFHRklMRVMgPSBmaWxlMT1sb2MxICJmaWxlMiA9IGxvYzIiIC4uLiANCisjIHdoZXJlICJsb2MxIiBhbmQgImxvYzIiIGNhbiBiZSByZWxhdGl2ZSBvciBhYnNvbHV0ZSBwYXRocyBvciANCisjIFVSTHMuIElmIGEgbG9jYXRpb24gaXMgcHJlc2VudCBmb3IgZWFjaCB0YWcsIHRoZSBpbnN0YWxsZG94IHRvb2wgDQorIyBkb2VzIG5vdCBoYXZlIHRvIGJlIHJ1biB0byBjb3JyZWN0IHRoZSBsaW5rcy4gDQorIyBOb3RlIHRoYXQgZWFjaCB0YWcgZmlsZSBtdXN0IGhhdmUgYSB1bmlxdWUgbmFtZSANCisjICh3aGVyZSB0aGUgbmFtZSBkb2VzIE5PVCBpbmNsdWRlIHRoZSBwYXRoKSANCisjIElmIGEgdGFnIGZpbGUgaXMgbm90IGxvY2F0ZWQgaW4gdGhlIGRpcmVjdG9yeSBpbiB3aGljaCBkb3h5Z2VuIA0KKyMgaXMgcnVuLCB5b3UgbXVzdCBhbHNvIHNwZWNpZnkgdGhlIHBhdGggdG8gdGhlIHRhZ2ZpbGUgaGVyZS4NCisNCitUQUdGSUxFUyAgICAgICAgICAgICAgID0gDQorDQorIyBXaGVuIGEgZmlsZSBuYW1lIGlzIHNwZWNpZmllZCBhZnRlciBHRU5FUkFURV9UQUdGSUxFLCBkb3h5Z2VuIHdpbGwgY3JlYXRlIA0KKyMgYSB0YWcgZmlsZSB0aGF0IGlzIGJhc2VkIG9uIHRoZSBpbnB1dCBmaWxlcyBpdCByZWFkcy4NCisNCitHRU5FUkFURV9UQUdGSUxFICAgICAgID0gDQorDQorIyBJZiB0aGUgQUxMRVhURVJOQUxTIHRhZyBpcyBzZXQgdG8gWUVTIGFsbCBleHRlcm5hbCBjbGFzc2VzIHdpbGwgYmUgbGlzdGVkIA0KKyMgaW4gdGhlIGNsYXNzIGluZGV4LiBJZiBzZXQgdG8gTk8gb25seSB0aGUgaW5oZXJpdGVkIGV4dGVybmFsIGNsYXNzZXMgDQorIyB3aWxsIGJlIGxpc3RlZC4NCisNCitBTExFWFRFUk5BTFMgICAgICAgICAgID0gTk8NCisNCisjIElmIHRoZSBFWFRFUk5BTF9HUk9VUFMgdGFnIGlzIHNldCB0byBZRVMgYWxsIGV4dGVybmFsIGdyb3VwcyB3aWxsIGJlIGxpc3RlZCANCisjIGluIHRoZSBtb2R1bGVzIGluZGV4LiBJZiBzZXQgdG8gTk8sIG9ubHkgdGhlIGN1cnJlbnQgcHJvamVjdCdzIGdyb3VwcyB3aWxsIA0KKyMgYmUgbGlzdGVkLg0KKw0KK0VYVEVSTkFMX0dST1VQUyAgICAgICAgPSBZRVMNCisNCisjIFRoZSBQRVJMX1BBVEggc2hvdWxkIGJlIHRoZSBhYnNvbHV0ZSBwYXRoIGFuZCBuYW1lIG9mIHRoZSBwZXJsIHNjcmlwdCANCisjIGludGVycHJldGVyIChpLmUuIHRoZSByZXN1bHQgb2YgYHdoaWNoIHBlcmwnKS4NCisNCitQRVJMX1BBVEggICAgICAgICAgICAgID0gL3Vzci9iaW4vcGVybA0KKw0KKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisjIENvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHRoZSBkb3QgdG9vbA0KKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisNCisjIElmIHRoZSBDTEFTU19ESUFHUkFNUyB0YWcgaXMgc2V0IHRvIFlFUyAodGhlIGRlZmF1bHQpIERveHlnZW4gd2lsbCANCisjIGdlbmVyYXRlIGEgaW5oZXJpdGFuY2UgZGlhZ3JhbSAoaW4gSFRNTCwgUlRGIGFuZCBMYVRlWCkgZm9yIGNsYXNzZXMgd2l0aCBiYXNlIA0KKyMgb3Igc3VwZXIgY2xhc3Nlcy4gU2V0dGluZyB0aGUgdGFnIHRvIE5PIHR1cm5zIHRoZSBkaWFncmFtcyBvZmYuIE5vdGUgdGhhdCANCisjIHRoaXMgb3B0aW9uIGFsc28gd29ya3Mgd2l0aCBIQVZFX0RPVCBkaXNhYmxlZCwgYnV0IGl0IGlzIHJlY29tbWVuZGVkIHRvIA0KKyMgaW5zdGFsbCBhbmQgdXNlIGRvdCwgc2luY2UgaXQgeWllbGRzIG1vcmUgcG93ZXJmdWwgZ3JhcGhzLg0KKw0KK0NMQVNTX0RJQUdSQU1TICAgICAgICAgPSBZRVMNCisNCisjIFlvdSBjYW4gZGVmaW5lIG1lc3NhZ2Ugc2VxdWVuY2UgY2hhcnRzIHdpdGhpbiBkb3h5Z2VuIGNvbW1lbnRzIHVzaW5nIHRoZSBcbXNjIA0KKyMgY29tbWFuZC4gRG94eWdlbiB3aWxsIHRoZW4gcnVuIHRoZSBtc2NnZW4gdG9vbCAoc2VlIA0KKyMgaHR0cDovL3d3dy5tY3Rlcm5hbi5tZS51ay9tc2NnZW4vKSB0byBwcm9kdWNlIHRoZSBjaGFydCBhbmQgaW5zZXJ0IGl0IGluIHRoZSANCisjIGRvY3VtZW50YXRpb24uIFRoZSBNU0NHRU5fUEFUSCB0YWcgYWxsb3dzIHlvdSB0byBzcGVjaWZ5IHRoZSBkaXJlY3Rvcnkgd2hlcmUgDQorIyB0aGUgbXNjZ2VuIHRvb2wgcmVzaWRlcy4gSWYgbGVmdCBlbXB0eSB0aGUgdG9vbCBpcyBhc3N1bWVkIHRvIGJlIGZvdW5kIGluIHRoZSANCisjIGRlZmF1bHQgc2VhcmNoIHBhdGguDQorDQorTVNDR0VOX1BBVEggICAgICAgICAgICA9IA0KKw0KKyMgSWYgc2V0IHRvIFlFUywgdGhlIGluaGVyaXRhbmNlIGFuZCBjb2xsYWJvcmF0aW9uIGdyYXBocyB3aWxsIGhpZGUgDQorIyBpbmhlcml0YW5jZSBhbmQgdXNhZ2UgcmVsYXRpb25zIGlmIHRoZSB0YXJnZXQgaXMgdW5kb2N1bWVudGVkIA0KKyMgb3IgaXMgbm90IGEgY2xhc3MuDQorDQorSElERV9VTkRPQ19SRUxBVElPTlMgICA9IFlFUw0KKw0KKyMgSWYgeW91IHNldCB0aGUgSEFWRV9ET1QgdGFnIHRvIFlFUyB0aGVuIGRveHlnZW4gd2lsbCBhc3N1bWUgdGhlIGRvdCB0b29sIGlzIA0KKyMgYXZhaWxhYmxlIGZyb20gdGhlIHBhdGguIFRoaXMgdG9vbCBpcyBwYXJ0IG9mIEdyYXBodml6LCBhIGdyYXBoIHZpc3VhbGl6YXRpb24gDQorIyB0b29sa2l0IGZyb20gQVQmVCBhbmQgTHVjZW50IEJlbGwgTGFicy4gVGhlIG90aGVyIG9wdGlvbnMgaW4gdGhpcyBzZWN0aW9uIA0KKyMgaGF2ZSBubyBlZmZlY3QgaWYgdGhpcyBvcHRpb24gaXMgc2V0IHRvIE5PICh0aGUgZGVmYXVsdCkNCisNCitIQVZFX0RPVCAgICAgICAgICAgICAgID0gWUVTDQorDQorIyBUaGUgRE9UX05VTV9USFJFQURTIHNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIGRvdCBpbnZvY2F0aW9ucyBkb3h5Z2VuIGlzIA0KKyMgYWxsb3dlZCB0byBydW4gaW4gcGFyYWxsZWwuIFdoZW4gc2V0IHRvIDAgKHRoZSBkZWZhdWx0KSBkb3h5Z2VuIHdpbGwgDQorIyBiYXNlIHRoaXMgb24gdGhlIG51bWJlciBvZiBwcm9jZXNzb3JzIGF2YWlsYWJsZSBpbiB0aGUgc3lzdGVtLiBZb3UgY2FuIHNldCBpdCANCisjIGV4cGxpY2l0bHkgdG8gYSB2YWx1ZSBsYXJnZXIgdGhhbiAwIHRvIGdldCBjb250cm9sIG92ZXIgdGhlIGJhbGFuY2UgDQorIyBiZXR3ZWVuIENQVSBsb2FkIGFuZCBwcm9jZXNzaW5nIHNwZWVkLg0KKw0KK0RPVF9OVU1fVEhSRUFEUyAgICAgICAgPSAwDQorDQorIyBCeSBkZWZhdWx0IGRveHlnZW4gd2lsbCB3cml0ZSBhIGZvbnQgY2FsbGVkIEZyZWVTYW5zLnR0ZiB0byB0aGUgb3V0cHV0IA0KKyMgZGlyZWN0b3J5IGFuZCByZWZlcmVuY2UgaXQgaW4gYWxsIGRvdCBmaWxlcyB0aGF0IGRveHlnZW4gZ2VuZXJhdGVzLiBUaGlzIA0KKyMgZm9udCBkb2VzIG5vdCBpbmNsdWRlIGFsbCBwb3NzaWJsZSB1bmljb2RlIGNoYXJhY3RlcnMgaG93ZXZlciwgc28gd2hlbiB5b3UgbmVlZCANCisjIHRoZXNlIChvciBqdXN0IHdhbnQgYSBkaWZmZXJlbnRseSBsb29raW5nIGZvbnQpIHlvdSBjYW4gc3BlY2lmeSB0aGUgZm9udCBuYW1lIA0KKyMgdXNpbmcgRE9UX0ZPTlROQU1FLiBZb3UgbmVlZCBuZWVkIHRvIG1ha2Ugc3VyZSBkb3QgaXMgYWJsZSB0byBmaW5kIHRoZSBmb250LCANCisjIHdoaWNoIGNhbiBiZSBkb25lIGJ5IHB1dHRpbmcgaXQgaW4gYSBzdGFuZGFyZCBsb2NhdGlvbiBvciBieSBzZXR0aW5nIHRoZSANCisjIERPVEZPTlRQQVRIIGVudmlyb25tZW50IHZhcmlhYmxlIG9yIGJ5IHNldHRpbmcgRE9UX0ZPTlRQQVRIIHRvIHRoZSBkaXJlY3RvcnkgDQorIyBjb250YWluaW5nIHRoZSBmb250Lg0KKw0KK0RPVF9GT05UTkFNRSAgICAgICAgICAgPSBGcmVlU2Fucw0KKw0KKyMgVGhlIERPVF9GT05UU0laRSB0YWcgY2FuIGJlIHVzZWQgdG8gc2V0IHRoZSBzaXplIG9mIHRoZSBmb250IG9mIGRvdCBncmFwaHMuIA0KKyMgVGhlIGRlZmF1bHQgc2l6ZSBpcyAxMHB0Lg0KKw0KK0RPVF9GT05UU0laRSAgICAgICAgICAgPSAxMA0KKw0KKyMgQnkgZGVmYXVsdCBkb3h5Z2VuIHdpbGwgdGVsbCBkb3QgdG8gdXNlIHRoZSBvdXRwdXQgZGlyZWN0b3J5IHRvIGxvb2sgZm9yIHRoZSANCisjIEZyZWVTYW5zLnR0ZiBmb250ICh3aGljaCBkb3h5Z2VuIHdpbGwgcHV0IHRoZXJlIGl0c2VsZikuIElmIHlvdSBzcGVjaWZ5IGEgDQorIyBkaWZmZXJlbnQgZm9udCB1c2luZyBET1RfRk9OVE5BTUUgeW91IGNhbiBzZXQgdGhlIHBhdGggd2hlcmUgZG90IA0KKyMgY2FuIGZpbmQgaXQgdXNpbmcgdGhpcyB0YWcuDQorDQorRE9UX0ZPTlRQQVRIICAgICAgICAgICA9IA0KKw0KKyMgSWYgdGhlIENMQVNTX0dSQVBIIGFuZCBIQVZFX0RPVCB0YWdzIGFyZSBzZXQgdG8gWUVTIHRoZW4gZG94eWdlbiANCisjIHdpbGwgZ2VuZXJhdGUgYSBncmFwaCBmb3IgZWFjaCBkb2N1bWVudGVkIGNsYXNzIHNob3dpbmcgdGhlIGRpcmVjdCBhbmQgDQorIyBpbmRpcmVjdCBpbmhlcml0YW5jZSByZWxhdGlvbnMuIFNldHRpbmcgdGhpcyB0YWcgdG8gWUVTIHdpbGwgZm9yY2UgdGhlIA0KKyMgdGhlIENMQVNTX0RJQUdSQU1TIHRhZyB0byBOTy4NCisNCitDTEFTU19HUkFQSCAgICAgICAgICAgID0gWUVTDQorDQorIyBJZiB0aGUgQ09MTEFCT1JBVElPTl9HUkFQSCBhbmQgSEFWRV9ET1QgdGFncyBhcmUgc2V0IHRvIFlFUyB0aGVuIGRveHlnZW4gDQorIyB3aWxsIGdlbmVyYXRlIGEgZ3JhcGggZm9yIGVhY2ggZG9jdW1lbnRlZCBjbGFzcyBzaG93aW5nIHRoZSBkaXJlY3QgYW5kIA0KKyMgaW5kaXJlY3QgaW1wbGVtZW50YXRpb24gZGVwZW5kZW5jaWVzIChpbmhlcml0YW5jZSwgY29udGFpbm1lbnQsIGFuZCANCisjIGNsYXNzIHJlZmVyZW5jZXMgdmFyaWFibGVzKSBvZiB0aGUgY2xhc3Mgd2l0aCBvdGhlciBkb2N1bWVudGVkIGNsYXNzZXMuDQorDQorQ09MTEFCT1JBVElPTl9HUkFQSCAgICA9IFlFUw0KKw0KKyMgSWYgdGhlIEdST1VQX0dSQVBIUyBhbmQgSEFWRV9ET1QgdGFncyBhcmUgc2V0IHRvIFlFUyB0aGVuIGRveHlnZW4gDQorIyB3aWxsIGdlbmVyYXRlIGEgZ3JhcGggZm9yIGdyb3Vwcywgc2hvd2luZyB0aGUgZGlyZWN0IGdyb3VwcyBkZXBlbmRlbmNpZXMNCisNCitHUk9VUF9HUkFQSFMgICAgICAgICAgID0gWUVTDQorDQorIyBJZiB0aGUgVU1MX0xPT0sgdGFnIGlzIHNldCB0byBZRVMgZG94eWdlbiB3aWxsIGdlbmVyYXRlIGluaGVyaXRhbmNlIGFuZCANCisjIGNvbGxhYm9yYXRpb24gZGlhZ3JhbXMgaW4gYSBzdHlsZSBzaW1pbGFyIHRvIHRoZSBPTUcncyBVbmlmaWVkIE1vZGVsaW5nIA0KKyMgTGFuZ3VhZ2UuDQorDQorVU1MX0xPT0sgICAgICAgICAgICAgICA9IE5PDQorDQorIyBJZiBzZXQgdG8gWUVTLCB0aGUgaW5oZXJpdGFuY2UgYW5kIGNvbGxhYm9yYXRpb24gZ3JhcGhzIHdpbGwgc2hvdyB0aGUgDQorIyByZWxhdGlvbnMgYmV0d2VlbiB0ZW1wbGF0ZXMgYW5kIHRoZWlyIGluc3RhbmNlcy4NCisNCitURU1QTEFURV9SRUxBVElPTlMgICAgID0gTk8NCisNCisjIElmIHRoZSBFTkFCTEVfUFJFUFJPQ0VTU0lORywgU0VBUkNIX0lOQ0xVREVTLCBJTkNMVURFX0dSQVBILCBhbmQgSEFWRV9ET1QgDQorIyB0YWdzIGFyZSBzZXQgdG8gWUVTIHRoZW4gZG94eWdlbiB3aWxsIGdlbmVyYXRlIGEgZ3JhcGggZm9yIGVhY2ggZG9jdW1lbnRlZCANCisjIGZpbGUgc2hvd2luZyB0aGUgZGlyZWN0IGFuZCBpbmRpcmVjdCBpbmNsdWRlIGRlcGVuZGVuY2llcyBvZiB0aGUgZmlsZSB3aXRoIA0KKyMgb3RoZXIgZG9jdW1lbnRlZCBmaWxlcy4NCisNCitJTkNMVURFX0dSQVBIICAgICAgICAgID0gWUVTDQorDQorIyBJZiB0aGUgRU5BQkxFX1BSRVBST0NFU1NJTkcsIFNFQVJDSF9JTkNMVURFUywgSU5DTFVERURfQllfR1JBUEgsIGFuZCANCisjIEhBVkVfRE9UIHRhZ3MgYXJlIHNldCB0byBZRVMgdGhlbiBkb3h5Z2VuIHdpbGwgZ2VuZXJhdGUgYSBncmFwaCBmb3IgZWFjaCANCisjIGRvY3VtZW50ZWQgaGVhZGVyIGZpbGUgc2hvd2luZyB0aGUgZG9jdW1lbnRlZCBmaWxlcyB0aGF0IGRpcmVjdGx5IG9yIA0KKyMgaW5kaXJlY3RseSBpbmNsdWRlIHRoaXMgZmlsZS4NCisNCitJTkNMVURFRF9CWV9HUkFQSCAgICAgID0gWUVTDQorDQorIyBJZiB0aGUgQ0FMTF9HUkFQSCBhbmQgSEFWRV9ET1Qgb3B0aW9ucyBhcmUgc2V0IHRvIFlFUyB0aGVuIA0KKyMgZG94eWdlbiB3aWxsIGdlbmVyYXRlIGEgY2FsbCBkZXBlbmRlbmN5IGdyYXBoIGZvciBldmVyeSBnbG9iYWwgZnVuY3Rpb24gDQorIyBvciBjbGFzcyBtZXRob2QuIE5vdGUgdGhhdCBlbmFibGluZyB0aGlzIG9wdGlvbiB3aWxsIHNpZ25pZmljYW50bHkgaW5jcmVhc2UgDQorIyB0aGUgdGltZSBvZiBhIHJ1bi4gU28gaW4gbW9zdCBjYXNlcyBpdCB3aWxsIGJlIGJldHRlciB0byBlbmFibGUgY2FsbCBncmFwaHMgDQorIyBmb3Igc2VsZWN0ZWQgZnVuY3Rpb25zIG9ubHkgdXNpbmcgdGhlIFxjYWxsZ3JhcGggY29tbWFuZC4NCisNCitDQUxMX0dSQVBIICAgICAgICAgICAgID0gTk8NCisNCisjIElmIHRoZSBDQUxMRVJfR1JBUEggYW5kIEhBVkVfRE9UIHRhZ3MgYXJlIHNldCB0byBZRVMgdGhlbiANCisjIGRveHlnZW4gd2lsbCBnZW5lcmF0ZSBhIGNhbGxlciBkZXBlbmRlbmN5IGdyYXBoIGZvciBldmVyeSBnbG9iYWwgZnVuY3Rpb24gDQorIyBvciBjbGFzcyBtZXRob2QuIE5vdGUgdGhhdCBlbmFibGluZyB0aGlzIG9wdGlvbiB3aWxsIHNpZ25pZmljYW50bHkgaW5jcmVhc2UgDQorIyB0aGUgdGltZSBvZiBhIHJ1bi4gU28gaW4gbW9zdCBjYXNlcyBpdCB3aWxsIGJlIGJldHRlciB0byBlbmFibGUgY2FsbGVyIA0KKyMgZ3JhcGhzIGZvciBzZWxlY3RlZCBmdW5jdGlvbnMgb25seSB1c2luZyB0aGUgXGNhbGxlcmdyYXBoIGNvbW1hbmQuDQorDQorQ0FMTEVSX0dSQVBIICAgICAgICAgICA9IE5PDQorDQorIyBJZiB0aGUgR1JBUEhJQ0FMX0hJRVJBUkNIWSBhbmQgSEFWRV9ET1QgdGFncyBhcmUgc2V0IHRvIFlFUyB0aGVuIGRveHlnZW4gDQorIyB3aWxsIGdlbmVyYXRlIGEgZ3JhcGhpY2FsIGhpZXJhcmNoeSBvZiBhbGwgY2xhc3NlcyBpbnN0ZWFkIG9mIGEgdGV4dHVhbCBvbmUuDQorDQorR1JBUEhJQ0FMX0hJRVJBUkNIWSAgICA9IFlFUw0KKw0KKyMgSWYgdGhlIERJUkVDVE9SWV9HUkFQSCwgU0hPV19ESVJFQ1RPUklFUyBhbmQgSEFWRV9ET1QgdGFncyBhcmUgc2V0IHRvIFlFUyANCisjIHRoZW4gZG94eWdlbiB3aWxsIHNob3cgdGhlIGRlcGVuZGVuY2llcyBhIGRpcmVjdG9yeSBoYXMgb24gb3RoZXIgZGlyZWN0b3JpZXMgDQorIyBpbiBhIGdyYXBoaWNhbCB3YXkuIFRoZSBkZXBlbmRlbmN5IHJlbGF0aW9ucyBhcmUgZGV0ZXJtaW5lZCBieSB0aGUgI2luY2x1ZGUgDQorIyByZWxhdGlvbnMgYmV0d2VlbiB0aGUgZmlsZXMgaW4gdGhlIGRpcmVjdG9yaWVzLg0KKw0KK0RJUkVDVE9SWV9HUkFQSCAgICAgICAgPSBZRVMNCisNCisjIFRoZSBET1RfSU1BR0VfRk9STUFUIHRhZyBjYW4gYmUgdXNlZCB0byBzZXQgdGhlIGltYWdlIGZvcm1hdCBvZiB0aGUgaW1hZ2VzIA0KKyMgZ2VuZXJhdGVkIGJ5IGRvdC4gUG9zc2libGUgdmFsdWVzIGFyZSBwbmcsIGpwZywgb3IgZ2lmLiANCisjIElmIGxlZnQgYmxhbmsgcG5nIHdpbGwgYmUgdXNlZC4NCisNCitET1RfSU1BR0VfRk9STUFUICAgICAgID0gcG5nDQorDQorIyBUaGUgdGFnIERPVF9QQVRIIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgdGhlIHBhdGggd2hlcmUgdGhlIGRvdCB0b29sIGNhbiBiZSANCisjIGZvdW5kLiBJZiBsZWZ0IGJsYW5rLCBpdCBpcyBhc3N1bWVkIHRoZSBkb3QgdG9vbCBjYW4gYmUgZm91bmQgaW4gdGhlIHBhdGguDQorDQorRE9UX1BBVEggICAgICAgICAgICAgICA9ICJDOlxXaW5kUml2ZXJcd29ya3NwYWNlXFdvcmtiZW5jaFVwZGF0ZVxoZWxwZXJzXEdyYXBodml6Mi4yNi4zXGJpbiINCisNCisjIFRoZSBET1RGSUxFX0RJUlMgdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgb25lIG9yIG1vcmUgZGlyZWN0b3JpZXMgdGhhdCANCisjIGNvbnRhaW4gZG90IGZpbGVzIHRoYXQgYXJlIGluY2x1ZGVkIGluIHRoZSBkb2N1bWVudGF0aW9uIChzZWUgdGhlIA0KKyMgXGRvdGZpbGUgY29tbWFuZCkuDQorDQorRE9URklMRV9ESVJTICAgICAgICAgICA9IA0KKw0KKyMgVGhlIE1TQ0ZJTEVfRElSUyB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBvbmUgb3IgbW9yZSBkaXJlY3RvcmllcyB0aGF0IA0KKyMgY29udGFpbiBtc2MgZmlsZXMgdGhhdCBhcmUgaW5jbHVkZWQgaW4gdGhlIGRvY3VtZW50YXRpb24gKHNlZSB0aGUgDQorIyBcbXNjZmlsZSBjb21tYW5kKS4NCisNCitNU0NGSUxFX0RJUlMgICAgICAgICAgID0gDQorDQorIyBUaGUgRE9UX0dSQVBIX01BWF9OT0RFUyB0YWcgY2FuIGJlIHVzZWQgdG8gc2V0IHRoZSBtYXhpbXVtIG51bWJlciBvZiANCisjIG5vZGVzIHRoYXQgd2lsbCBiZSBzaG93biBpbiB0aGUgZ3JhcGguIElmIHRoZSBudW1iZXIgb2Ygbm9kZXMgaW4gYSBncmFwaCANCisjIGJlY29tZXMgbGFyZ2VyIHRoYW4gdGhpcyB2YWx1ZSwgZG94eWdlbiB3aWxsIHRydW5jYXRlIHRoZSBncmFwaCwgd2hpY2ggaXMgDQorIyB2aXN1YWxpemVkIGJ5IHJlcHJlc2VudGluZyBhIG5vZGUgYXMgYSByZWQgYm94LiBOb3RlIHRoYXQgZG94eWdlbiBpZiB0aGUgDQorIyBudW1iZXIgb2YgZGlyZWN0IGNoaWxkcmVuIG9mIHRoZSByb290IG5vZGUgaW4gYSBncmFwaCBpcyBhbHJlYWR5IGxhcmdlciB0aGFuIA0KKyMgRE9UX0dSQVBIX01BWF9OT0RFUyB0aGVuIHRoZSBncmFwaCB3aWxsIG5vdCBiZSBzaG93biBhdCBhbGwuIEFsc28gbm90ZSANCisjIHRoYXQgdGhlIHNpemUgb2YgYSBncmFwaCBjYW4gYmUgZnVydGhlciByZXN0cmljdGVkIGJ5IE1BWF9ET1RfR1JBUEhfREVQVEguDQorDQorRE9UX0dSQVBIX01BWF9OT0RFUyAgICA9IDUwDQorDQorIyBUaGUgTUFYX0RPVF9HUkFQSF9ERVBUSCB0YWcgY2FuIGJlIHVzZWQgdG8gc2V0IHRoZSBtYXhpbXVtIGRlcHRoIG9mIHRoZSANCisjIGdyYXBocyBnZW5lcmF0ZWQgYnkgZG90LiBBIGRlcHRoIHZhbHVlIG9mIDMgbWVhbnMgdGhhdCBvbmx5IG5vZGVzIHJlYWNoYWJsZSANCisjIGZyb20gdGhlIHJvb3QgYnkgZm9sbG93aW5nIGEgcGF0aCB2aWEgYXQgbW9zdCAzIGVkZ2VzIHdpbGwgYmUgc2hvd24uIE5vZGVzIA0KKyMgdGhhdCBsYXkgZnVydGhlciBmcm9tIHRoZSByb290IG5vZGUgd2lsbCBiZSBvbWl0dGVkLiBOb3RlIHRoYXQgc2V0dGluZyB0aGlzIA0KKyMgb3B0aW9uIHRvIDEgb3IgMiBtYXkgZ3JlYXRseSByZWR1Y2UgdGhlIGNvbXB1dGF0aW9uIHRpbWUgbmVlZGVkIGZvciBsYXJnZSANCisjIGNvZGUgYmFzZXMuIEFsc28gbm90ZSB0aGF0IHRoZSBzaXplIG9mIGEgZ3JhcGggY2FuIGJlIGZ1cnRoZXIgcmVzdHJpY3RlZCBieSANCisjIERPVF9HUkFQSF9NQVhfTk9ERVMuIFVzaW5nIGEgZGVwdGggb2YgMCBtZWFucyBubyBkZXB0aCByZXN0cmljdGlvbi4NCisNCitNQVhfRE9UX0dSQVBIX0RFUFRIICAgID0gMA0KKw0KKyMgU2V0IHRoZSBET1RfVFJBTlNQQVJFTlQgdGFnIHRvIFlFUyB0byBnZW5lcmF0ZSBpbWFnZXMgd2l0aCBhIHRyYW5zcGFyZW50IA0KKyMgYmFja2dyb3VuZC4gVGhpcyBpcyBkaXNhYmxlZCBieSBkZWZhdWx0LCBiZWNhdXNlIGRvdCBvbiBXaW5kb3dzIGRvZXMgbm90IA0KKyMgc2VlbSB0byBzdXBwb3J0IHRoaXMgb3V0IG9mIHRoZSBib3guIFdhcm5pbmc6IERlcGVuZGluZyBvbiB0aGUgcGxhdGZvcm0gdXNlZCwgDQorIyBlbmFibGluZyB0aGlzIG9wdGlvbiBtYXkgbGVhZCB0byBiYWRseSBhbnRpLWFsaWFzZWQgbGFiZWxzIG9uIHRoZSBlZGdlcyBvZiANCisjIGEgZ3JhcGggKGkuZS4gdGhleSBiZWNvbWUgaGFyZCB0byByZWFkKS4NCisNCitET1RfVFJBTlNQQVJFTlQgICAgICAgID0gTk8NCisNCisjIFNldCB0aGUgRE9UX01VTFRJX1RBUkdFVFMgdGFnIHRvIFlFUyBhbGxvdyBkb3QgdG8gZ2VuZXJhdGUgbXVsdGlwbGUgb3V0cHV0IA0KKyMgZmlsZXMgaW4gb25lIHJ1biAoaS5lLiBtdWx0aXBsZSAtbyBhbmQgLVQgb3B0aW9ucyBvbiB0aGUgY29tbWFuZCBsaW5lKS4gVGhpcyANCisjIG1ha2VzIGRvdCBydW4gZmFzdGVyLCBidXQgc2luY2Ugb25seSBuZXdlciB2ZXJzaW9ucyBvZiBkb3QgKD4xLjguMTApIA0KKyMgc3VwcG9ydCB0aGlzLCB0aGlzIGZlYXR1cmUgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdC4NCisNCitET1RfTVVMVElfVEFSR0VUUyAgICAgID0gTk8NCisNCisjIElmIHRoZSBHRU5FUkFURV9MRUdFTkQgdGFnIGlzIHNldCB0byBZRVMgKHRoZSBkZWZhdWx0KSBEb3h5Z2VuIHdpbGwgDQorIyBnZW5lcmF0ZSBhIGxlZ2VuZCBwYWdlIGV4cGxhaW5pbmcgdGhlIG1lYW5pbmcgb2YgdGhlIHZhcmlvdXMgYm94ZXMgYW5kIA0KKyMgYXJyb3dzIGluIHRoZSBkb3QgZ2VuZXJhdGVkIGdyYXBocy4NCisNCitHRU5FUkFURV9MRUdFTkQgICAgICAgID0gWUVTDQorDQorIyBJZiB0aGUgRE9UX0NMRUFOVVAgdGFnIGlzIHNldCB0byBZRVMgKHRoZSBkZWZhdWx0KSBEb3h5Z2VuIHdpbGwgDQorIyByZW1vdmUgdGhlIGludGVybWVkaWF0ZSBkb3QgZmlsZXMgdGhhdCBhcmUgdXNlZCB0byBnZW5lcmF0ZSANCisjIHRoZSB2YXJpb3VzIGdyYXBocy4NCisNCitET1RfQ0xFQU5VUCAgICAgICAgICAgID0gWUVTDQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvaGVscGVycy9HcmFwaHZpejIuMjYuMy9iaW4vY29uZmlnNiBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL2hlbHBlcnMvR3JhcGh2aXoyLjI2LjMvYmluL2NvbmZpZzYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjdlYmE2ZQotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL2hlbHBlcnMvR3JhcGh2aXoyLjI2LjMvYmluL2NvbmZpZzYKQEAgLTAsMCArMSwyNTUgQEAKKyMgVGhpcyBmaWxlIHdhcyBnZW5lcmF0ZWQgYnkgImRvdCAtYyIgYXQgdGltZSBvZiBpbnN0YWxsLg0KKw0KKyMgWW91IG1heSB0ZW1wb3JhcmlseSBkaXNhYmxlIGEgcGx1Z2luIGJ5IHJlbW92aW5nIG9yIGNvbW1lbnRpbmcgb3V0DQorIyBhIGxpbmUgaW4gdGhpcyBmaWxlLCBvciB5b3UgY2FuIG1vZGlmeSBpdHMgInF1YWxpdHkiIHZhbHVlIHRvIGFmZmVjdA0KKyMgZGVmYXVsdCBwbHVnaW4gc2VsZWN0aW9uLg0KKw0KKyMgTWFudWFsIGVkaXRzIHRvIHRoaXMgZmlsZSAqKndpbGwgYmUgbG9zdCoqIG9uIHVwZ3JhZGUuDQorDQorZ3ZwbHVnaW5fY29yZS5kbGwgY29yZSB7DQorCWRldmljZSB7DQorCQlkb3Q6ZG90IDENCisJCWd2OmRvdCAxDQorCQljYW5vbjpkb3QgMQ0KKwkJcGxhaW46ZG90IDENCisJCXBsYWluLWV4dDpkb3QgMQ0KKwkJeGRvdDp4ZG90IDENCisJfQ0KKwlkZXZpY2Ugew0KKwkJZmlnOmZpZyAxDQorCX0NCisJZGV2aWNlIHsNCisJCWlzbWFwOm1hcCAxDQorCQljbWFwOm1hcCAxDQorCQlpbWFwOm1hcCAxDQorCQljbWFweDptYXAgMQ0KKwkJaW1hcF9ucDptYXAgMQ0KKwkJY21hcHhfbnA6bWFwIDENCisJfQ0KKwlkZXZpY2Ugew0KKwkJcHM6cHMgMQ0KKwkJcHMyOnBzIDENCisJCWVwczpwcyAxDQorCX0NCisJZGV2aWNlIHsNCisJCXN2ZzpzdmcgMQ0KKwkJc3ZnejpzdmcgMQ0KKwl9DQorCWRldmljZSB7DQorCQl0azp0ayAxDQorCX0NCisJZGV2aWNlIHsNCisJCXZtbDp2bWwgMQ0KKwkJdm1sejp2bWwgMQ0KKwl9DQorCXJlbmRlciB7DQorCQlkb3QgMQ0KKwkJeGRvdCAxDQorCX0NCisJcmVuZGVyIHsNCisJCWZpZyAxDQorCX0NCisJcmVuZGVyIHsNCisJCW1hcCAxDQorCX0NCisJcmVuZGVyIHsNCisJCXBzIDENCisJfQ0KKwlyZW5kZXIgew0KKwkJc3ZnIDENCisJfQ0KKwlyZW5kZXIgew0KKwkJdGsgMQ0KKwl9DQorCXJlbmRlciB7DQorCQl2bWwgMQ0KKwl9DQorCWxvYWRpbWFnZSB7DQorCQlwbmc6c3ZnIDENCisJCWdpZjpzdmcgMQ0KKwkJanBlZzpzdmcgMQ0KKwkJanBlOnN2ZyAxDQorCQlqcGc6c3ZnIDENCisJCXBuZzpmaWcgMQ0KKwkJZ2lmOmZpZyAxDQorCQlqcGVnOmZpZyAxDQorCQlqcGU6ZmlnIDENCisJCWpwZzpmaWcgMQ0KKwkJcG5nOnZybWwgMQ0KKwkJZ2lmOnZybWwgMQ0KKwkJanBlZzp2cm1sIDENCisJCWpwZTp2cm1sIDENCisJCWpwZzp2cm1sIDENCisJCWVwczpwcyAxDQorI0ZBSUxTCQllcHM6bGFzaSAxDQorCQlwczpwcyAxDQorI0ZBSUxTCQlwczpsYXNpIDENCisJCShsaWIpOnBzIDENCisJCXBuZzptYXAgMQ0KKwkJZ2lmOm1hcCAxDQorCQlqcGVnOm1hcCAxDQorCQlqcGU6bWFwIDENCisJCWpwZzptYXAgMQ0KKwkJcHM6bWFwIDENCisJCWVwczptYXAgMQ0KKwkJc3ZnOm1hcCAxDQorCQlwbmc6ZG90IDENCisJCWdpZjpkb3QgMQ0KKwkJanBlZzpkb3QgMQ0KKwkJanBlOmRvdCAxDQorCQlqcGc6ZG90IDENCisJCXBzOmRvdCAxDQorCQllcHM6ZG90IDENCisJCXN2Zzpkb3QgMQ0KKwkJcG5nOnhkb3QgMQ0KKwkJZ2lmOnhkb3QgMQ0KKwkJanBlZzp4ZG90IDENCisJCWpwZTp4ZG90IDENCisJCWpwZzp4ZG90IDENCisJCXBzOnhkb3QgMQ0KKwkJZXBzOnhkb3QgMQ0KKwkJc3ZnOnhkb3QgMQ0KKwkJc3ZnOnN2ZyAxDQorCX0NCit9DQorZ3ZwbHVnaW5fZG90X2xheW91dC5kbGwgZG90X2xheW91dCB7DQorCWxheW91dCB7DQorCQlkb3QgMA0KKwl9DQorfQ0KK2d2cGx1Z2luX2dkLmRsbCBnZCB7DQorCXJlbmRlciB7DQorCQlnZCAxDQorCX0NCisJcmVuZGVyIHsNCisJCXZybWwgMQ0KKwl9DQorCXRleHRsYXlvdXQgew0KKwkJdGV4dGxheW91dCAyDQorCX0NCisJbG9hZGltYWdlIHsNCisJCWdkOmdkIDENCisJCWdkMjpnZCAxDQorCQlnaWY6Z2QgMQ0KKwkJanBlZzpnZCAxDQorCQlqcGU6Z2QgMQ0KKwkJanBnOmdkIDENCisJCXBuZzpnZCAxDQorCQlnZDpwcyAxDQorI0ZBSUxTCQlnZDpsYXNpIDENCisJCWdkMjpwcyAxDQorI0ZBSUxTCQlnZDI6bGFzaSAxDQorCQlnaWY6cHMgMQ0KKyNGQUlMUwkJZ2lmOmxhc2kgMQ0KKwkJanBlZzpwcyAxDQorCQlqcGc6cHMgMQ0KKwkJanBlOnBzIDENCisjRkFJTFMJCWpwZWc6bGFzaSAxDQorI0ZBSUxTCQlqcGc6bGFzaSAxDQorI0ZBSUxTCQlqcGU6bGFzaSAxDQorCQlwbmc6cHMgMQ0KKyNGQUlMUwkJcG5nOmxhc2kgMQ0KKwkJZ2Q6Y2Fpcm8gMQ0KKwkJZ2QyOmNhaXJvIDENCisJCWdpZjpjYWlybyAxDQorCQlqcGVnOmNhaXJvIDENCisJCWpwZzpjYWlybyAxDQorCQlqcGU6Y2Fpcm8gMQ0KKwkJcG5nOmNhaXJvIC0xDQorCX0NCisJZGV2aWNlIHsNCisJCWdpZjpjYWlybyAxMA0KKwkJd2JtcDpjYWlybyA1DQorCQlqcGU6Y2Fpcm8gNQ0KKwkJanBlZzpjYWlybyA1DQorCQlqcGc6Y2Fpcm8gNQ0KKwkJcG5nOmNhaXJvIDUNCisJCWdkOmNhaXJvIDUNCisJCWdkMjpjYWlybyA1DQorCX0NCisJZGV2aWNlIHsNCisJCWdpZjpnZCAxDQorCQl3Ym1wOmdkIDENCisJCWpwZTpnZCAxDQorCQlqcGVnOmdkIDENCisJCWpwZzpnZCAxDQorCQlwbmc6Z2QgMQ0KKwkJZ2Q6Z2QgMQ0KKwkJZ2QyOmdkIDENCisJfQ0KKwlkZXZpY2Ugew0KKwkJdnJtbDp2cm1sIDENCisJfQ0KK30NCitndnBsdWdpbl9nZGlwbHVzLmRsbCBnZGlwbHVzIHsNCisJcmVuZGVyIHsNCisJCWdkaXBsdXMgMQ0KKwl9DQorCXRleHRsYXlvdXQgew0KKwkJdGV4dGxheW91dCA4DQorCX0NCisJbG9hZGltYWdlIHsNCisJCWJtcDpnZGlwbHVzIDgNCisJCWdpZjpnZGlwbHVzIDgNCisJCWpwZTpnZGlwbHVzIDgNCisJCWpwZWc6Z2RpcGx1cyA4DQorCQlqcGc6Z2RpcGx1cyA4DQorCQlwbmc6Z2RpcGx1cyA4DQorCX0NCisJZGV2aWNlIHsNCisJCW1ldGFmaWxlOmdkaXBsdXMgOA0KKwkJYm1wOmdkaXBsdXMgOA0KKwkJZW1mOmdkaXBsdXMgOA0KKwkJZW1mcGx1czpnZGlwbHVzIDgNCisJCWdpZjpnZGlwbHVzIDgNCisJCWpwZTpnZGlwbHVzIDgNCisJCWpwZWc6Z2RpcGx1cyA4DQorCQlqcGc6Z2RpcGx1cyA4DQorCQlwbmc6Z2RpcGx1cyA4DQorCQl0aWY6Z2RpcGx1cyA4DQorCQl0aWZmOmdkaXBsdXMgOA0KKwl9DQorCWRldmljZSB7DQorCQlibXA6Y2Fpcm8gOA0KKwkJZ2lmOmNhaXJvIDgNCisJCWpwZTpjYWlybyA4DQorCQlqcGVnOmNhaXJvIDgNCisJCWpwZzpjYWlybyA4DQorCQlwbmc6Y2Fpcm8gOA0KKwkJdGlmOmNhaXJvIDgNCisJCXRpZmY6Y2Fpcm8gOA0KKwl9DQorfQ0KK2d2cGx1Z2luX25lYXRvX2xheW91dC5kbGwgbmVhdG9fbGF5b3V0IHsNCisJbGF5b3V0IHsNCisJCW5lYXRvIDANCisJCWZkcCAwDQorCQlzZmRwIDANCisJCXR3b3BpIDANCisJCWNpcmNvIDANCisJCXBhdGNod29yayAwDQorCQlvc2FnZSAwDQorCQlub3AgMA0KKwkJbm9wMSAwDQorCQlub3AyIDANCisJfQ0KK30NCitndnBsdWdpbl9wYW5nby5kbGwgY2Fpcm8gew0KKwlyZW5kZXIgew0KKwkJY2Fpcm8gMTANCisJfQ0KKwl0ZXh0bGF5b3V0IHsNCisJCXRleHRsYXlvdXQgMTANCisJfQ0KKwlsb2FkaW1hZ2Ugew0KKwkJcG5nOmNhaXJvIDENCisjRkFJTFMJCXBuZzpsYXNpIDINCisJCXBuZzpwcyAyDQorCX0NCisJZGV2aWNlIHsNCisJCXBuZzpjYWlybyAxMA0KKwkJcHM6Y2Fpcm8gLTEwDQorCQlwZGY6Y2Fpcm8gMTANCisJCXN2ZzpjYWlybyAtMTANCisJfQ0KK30NCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS9oZWxwZXJzL0dyYXBodml6Mi4yNi4zL2Jpbi9wcm9wcy50eHQgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS9oZWxwZXJzL0dyYXBodml6Mi4yNi4zL2Jpbi9wcm9wcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODA3NDE0MgotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL2hlbHBlcnMvR3JhcGh2aXoyLjI2LjMvYmluL3Byb3BzLnR4dApAQCAtMCwwICsxLDk3IEBACisiRGFtcGluZyIsICIwLjk5IiwgR1JBUEgsIE5FQVRPDQorIkVwc2lsb24iLCAiIiwgR1JBUEgsIE5FQVRPDQorIlVSTCIsICIiLCBBTllfRUxFTUVOVCwgQUxMX0VOR0lORVMNCisiYXJyb3doZWFkIiwgIm5vcm1hbCIsIEVER0UsIEFMTF9FTkdJTkVTDQorImFycm93c2l6ZSIsICIxLjAiLCBFREdFLCBBTExfRU5HSU5FUw0KKyJhcnJvd3RhaWwiLCAibm9ybWFsIiwgRURHRSwgQUxMX0VOR0lORVMNCisiYmIiLCAiIiwgR1JBUEgsIEFMTF9FTkdJTkVTDQorImJnY29sb3IiLCAiIiwgR1JBUEggT3IgQ0xVU1RFUiwgQUxMX0VOR0lORVMNCisiYm90dG9tbGFiZWwiLCAiIiwgTk9ERSwgQUxMX0VOR0lORVMNCisiY2VudGVyIiwgImZhbHNlIiwgR1JBUEgsIEFMTF9FTkdJTkVTDQorImNsdXN0ZXJyYW5rIiwgImxvY2FsIiwgR1JBUEgsIERPVA0KKyJjb2xvciIsICJibGFjayIsIEVER0UgT3IgTk9ERSBPciBDTFVTVEVSLCBBTExfRU5HSU5FUw0KKyJjb21tZW50IiwgIiIsIEVER0UgT3IgTk9ERSBPciBHUkFQSCwgQUxMX0VOR0lORVMNCisiY29tcG91bmQiLCAiZmFsc2UiLCBHUkFQSCwgRE9UDQorImNvbmNlbnRyYXRlIiwgImZhbHNlIiwgR1JBUEgsIERPVA0KKyJjb25zdHJhaW50IiwgInRydWUiLCBFREdFLCBET1QNCisiZGVjb3JhdGUiLCAiZmFsc2UiLCBFREdFLCBBTExfRU5HSU5FUw0KKyJkaXIiLCAiZm9yd2FyZCIsIEVER0UsIEFMTF9FTkdJTkVTDQorImRpc3RvcnRpb24iLCAiMC4wIiwgTk9ERSwgQUxMX0VOR0lORVMNCisiZmlsbGNvbG9yIiwgImxpZ2h0Z3JleSIsIE5PREUgT3IgQ0xVU1RFUiwgQUxMX0VOR0lORVMNCisiZml4ZWRzaXplIiwgImZhbHNlIiwgTk9ERSwgQUxMX0VOR0lORVMNCisiZm9udGNvbG9yIiwgImJsYWNrIiwgRURHRSBPciBOT0RFIE9yIEdSQVBIIE9yIENMVVNURVIsIEFMTF9FTkdJTkVTDQorImZvbnRuYW1lIiwgIlRpbWVzLVJvbWFuIiwgRURHRSBPciBOT0RFIE9yIEdSQVBIIE9yIENMVVNURVIsIEFMTF9FTkdJTkVTDQorImZvbnRwYXRoIiwgIiIsIEdSQVBILCBBTExfRU5HSU5FUw0KKyJmb250c2l6ZSIsICIxNC4wIiwgRURHRSBPciBOT0RFIE9yIEdSQVBIIE9yIENMVVNURVIsIEFMTF9FTkdJTkVTDQorImdyb3VwIiwgIiIsIE5PREUsIERPVA0KKyJoZWFkVVJMIiwgIiIsIEVER0UsIEFMTF9FTkdJTkVTDQorImhlYWRsYWJlbCIsICIiLCBFREdFLCBBTExfRU5HSU5FUw0KKyJoZWFkcG9ydCIsICJjZW50ZXIiLCBFREdFLCBBTExfRU5HSU5FUw0KKyJoZWlnaHQiLCAiMC41IiwgTk9ERSwgQUxMX0VOR0lORVMNCisibGFiZWwiLCAiIiwgRURHRSBPciBOT0RFIE9yIEdSQVBIIE9yIENMVVNURVIsIEFMTF9FTkdJTkVTDQorImxhYmVsYW5nbGUiLCAiLTI1LjAiLCBFREdFLCBBTExfRU5HSU5FUw0KKyJsYWJlbGRpc3RhbmNlIiwgIjEuMCIsIEVER0UsIEFMTF9FTkdJTkVTDQorImxhYmVsZmxvYXQiLCAiZmFsc2UiLCBFREdFLCBBTExfRU5HSU5FUw0KKyJsYWJlbGZvbnRjb2xvciIsICJibGFjayIsIEVER0UsIEFMTF9FTkdJTkVTDQorImxhYmVsZm9udG5hbWUiLCAiVGltZXMtUm9tYW4iLCBFREdFLCBBTExfRU5HSU5FUw0KKyJsYWJlbGZvbnRzaXplIiwgIjExLjAiLCBFREdFLCBBTExfRU5HSU5FUw0KKyJsYWJlbGp1c3QiLCAiIiwgQU5ZX0VMRU1FTlQsIERPVA0KKyJsYWJlbGxvYyIsICJ0IiwgR1JBUEggT3IgQ0xVU1RFUiwgRE9UDQorImxheWVyIiwgIiIsIEVER0UgT3IgTk9ERSwgQUxMX0VOR0lORVMNCisibGF5ZXJzIiwgIiIsIEdSQVBILCBBTExfRU5HSU5FUw0KKyJsZW4iLCAiMS4wIiwgRURHRSwgTkVBVE8NCisibGhlYWQiLCAiIiwgRURHRSwgRE9UDQorImxwIiwgIiIsIEVER0UgT3IgR1JBUEggT3IgQ0xVU1RFUiwgQUxMX0VOR0lORVMNCisibHRhaWwiLCAiIiwgRURHRSwgRE9UDQorIm1hcmdpbiIsICIiLCBHUkFQSCwgQUxMX0VOR0lORVMNCisibWF4aXRlciIsICIiLCBHUkFQSCwgTkVBVE8NCisibWNsaW1pdCIsICIxLjAiLCBHUkFQSCwgRE9UDQorIm1pbmxlbiIsICIxIiwgRURHRSwgRE9UDQorIm1vZGVsIiwgIiIsIEdSQVBILCBORUFUTw0KKyJub2Rlc2VwIiwgIjAuMjUiLCBHUkFQSCwgRE9UDQorIm5vcm1hbGl6ZSIsICJmYWxzZSIsIEdSQVBILCBORUFUTw0KKyJuc2xpbWl0IiwgIiIsIEdSQVBILCBET1QNCisib3JkZXJpbmciLCAiIiwgR1JBUEgsIERPVA0KKyJvcmllbnRhdGlvbiIsICIwLjAiLCBOT0RFLCBBTExfRU5HSU5FUw0KKyJvcmllbnRhdGlvbiIsICIiLCBHUkFQSCwgQUxMX0VOR0lORVMNCisib3ZlcmxhcCIsICIiLCBHUkFQSCwgTkVBVE8NCisicGFjayIsICJmYWxzZSIsIEdSQVBILCBORUFUTw0KKyJwYWdlIiwgIiIsIEdSQVBILCBBTExfRU5HSU5FUw0KKyJwYWdlZGlyIiwgIiIsIEdSQVBILCBBTExfRU5HSU5FUw0KKyJwZW5jb2xvciIsICJibGFjayIsIENMVVNURVIsIEFMTF9FTkdJTkVTDQorInBlcmlwaGVyaWVzIiwgIjAiLCBOT0RFLCBBTExfRU5HSU5FUw0KKyJwaW4iLCAiZmFsc2UiLCBOT0RFLCBORUFUTw0KKyJwb3MiLCAiIiwgRURHRSBPciBOT0RFLCBBTExfRU5HSU5FUw0KKyJxdWFudHVtIiwgIjAuMCIsIEdSQVBILCBBTExfRU5HSU5FUw0KKyJyYW5rIiwgIiIsIFNVQkdSQVBILCBET1QNCisicmFua2RpciIsICIiLCBHUkFQSCwgRE9UDQorInJhbmtzZXAiLCAiIiwgR1JBUEgsIEFMTF9FTkdJTkVTDQorInJhdGlvIiwgIiIsIEdSQVBILCBBTExfRU5HSU5FUw0KKyJyZWN0cyIsICIiLCBOT0RFLCBBTExfRU5HSU5FUw0KKyJyZWd1bGFyIiwgImZhbHNlIiwgTk9ERSwgQUxMX0VOR0lORVMNCisicmVtaW5jcm9zcyIsICJmYWxzZSIsIEdSQVBILCBET1QNCisicm90YXRlIiwgIjAiLCBHUkFQSCwgQUxMX0VOR0lORVMNCisic2FtZWhlYWQiLCAiIiwgRURHRSwgRE9UDQorInNhbWV0YWlsIiwgIiIsIEVER0UsIERPVA0KKyJzYW1wbGVwb2ludHMiLCAiOCIsIEdSQVBILCBBTExfRU5HSU5FUw0KKyJzZWFyY2hzaXplIiwgIjMwIiwgR1JBUEgsIERPVA0KKyJzZXAiLCAiMC4wMSIsIEdSQVBILCBORUFUTw0KKyJzaGFwZSIsICJlbGxpcHNlIiwgTk9ERSwgQUxMX0VOR0lORVMNCisic2hhcGVmaWxlIiwgIiIsIE5PREUsIEFMTF9FTkdJTkVTDQorInNob3dib3hlcyIsICIwIiwgRURHRSBPciBOT0RFIE9yIEdSQVBILCBET1QNCisic2lkZXMiLCAiNCIsIE5PREUsIEFMTF9FTkdJTkVTDQorInNpemUiLCAiIiwgR1JBUEgsIEFMTF9FTkdJTkVTDQorInNrZXciLCAiMC4wIiwgTk9ERSwgQUxMX0VOR0lORVMNCisic3BsaW5lcyIsICJmYWxzZSIsIEdSQVBILCBORUFUTw0KKyJzdGFydCIsICIiLCBHUkFQSCwgQUxMX0VOR0lORVMNCisic3R5bGUiLCAiIiwgRURHRSBPciBOT0RFLCBBTExfRU5HSU5FUw0KKyJzdHlsZXNoZWV0IiwgIiIsIEdSQVBILCBBTExfRU5HSU5FUw0KKyJ0YWlsVVJMIiwgIiIsIEVER0UsIEFMTF9FTkdJTkVTDQorInRhaWxsYWJlbCIsICIiLCBFREdFLCBBTExfRU5HSU5FUw0KKyJ0YWlscG9ydCIsICJjZW50ZXIiLCBFREdFLCBBTExfRU5HSU5FUw0KKyJ0b3BsYWJlbCIsICIiLCBOT0RFLCBBTExfRU5HSU5FUw0KKyJ2ZXJ0aWNlcyIsICIiLCBOT0RFLCBBTExfRU5HSU5FUw0KKyJ2b3JvX21hcmdpbiIsICIwLjA1IiwgR1JBUEgsIE5FQVRPDQorIndlaWdodCIsICIiLCBFREdFLCBET1QgT3IgTkVBVE8NCisid2lkdGgiLCAiMC43NSIsIE5PREUsIEFMTF9FTkdJTkVTDQorInoiLCAiMC4wIiwgTk9ERSwgQUxMX0VOR0lORVMNCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS9oZWxwZXJzL0dyYXBodml6Mi4yNi4zL2V0Yy9mb250cy9jb25mLmF2YWlsLzEwLWF1dG9oaW50LmNvbmYgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS9oZWxwZXJzL0dyYXBodml6Mi4yNi4zL2V0Yy9mb250cy9jb25mLmF2YWlsLzEwLWF1dG9oaW50LmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDVmOWEwZgotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL2hlbHBlcnMvR3JhcGh2aXoyLjI2LjMvZXRjL2ZvbnRzL2NvbmYuYXZhaWwvMTAtYXV0b2hpbnQuY29uZgpAQCAtMCwwICsxLDkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/Pg0KKzwhRE9DVFlQRSBmb250Y29uZmlnIFNZU1RFTSAiZm9udHMuZHRkIj4NCis8IS0tIGRlYmlhbi9hdXRvaGludC5jb25mIC0tPg0KKzxmb250Y29uZmlnPg0KKzwhLS0gIFVzZSB0aGUgQXV0b2hpbnRlciAtLT4gDQorICA8bWF0Y2ggdGFyZ2V0PSJmb250Ij4NCisgICAgPGVkaXQgbmFtZT0iYXV0b2hpbnQiIG1vZGU9ImFzc2lnbiI+PGJvb2w+dHJ1ZTwvYm9vbD48L2VkaXQ+DQorICA8L21hdGNoPg0KKzwvZm9udGNvbmZpZz4NCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS9oZWxwZXJzL0dyYXBodml6Mi4yNi4zL2V0Yy9mb250cy9jb25mLmF2YWlsLzEwLW5vLXN1Yi1waXhlbC5jb25mIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvaGVscGVycy9HcmFwaHZpejIuMjYuMy9ldGMvZm9udHMvY29uZi5hdmFpbC8xMC1uby1zdWItcGl4ZWwuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NjE3NGQ5Ci0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvaGVscGVycy9HcmFwaHZpejIuMjYuMy9ldGMvZm9udHMvY29uZi5hdmFpbC8xMC1uby1zdWItcGl4ZWwuY29uZgpAQCAtMCwwICsxLDkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/Pg0KKzwhRE9DVFlQRSBmb250Y29uZmlnIFNZU1RFTSAiZm9udHMuZHRkIj4NCis8IS0tIGNvbmYuZC9zdWItcGl4ZWwuY29uZiAtLT4NCis8Zm9udGNvbmZpZz4NCis8IS0tICBFbmFibGUgc3ViLXBpeGVsIHJlbmRlcmluZyAtLT4gDQorICA8bWF0Y2ggdGFyZ2V0PSJmb250Ij4NCisgICAgPGVkaXQgbmFtZT0icmdiYSIgbW9kZT0iYXNzaWduIj48Y29uc3Q+bm9uZTwvY29uc3Q+PC9lZGl0Pg0KKyAgPC9tYXRjaD4NCis8L2ZvbnRjb25maWc+DQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvaGVscGVycy9HcmFwaHZpejIuMjYuMy9ldGMvZm9udHMvY29uZi5hdmFpbC8xMC1zdWItcGl4ZWwtYmdyLmNvbmYgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS9oZWxwZXJzL0dyYXBodml6Mi4yNi4zL2V0Yy9mb250cy9jb25mLmF2YWlsLzEwLXN1Yi1waXhlbC1iZ3IuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOTRlZjAzCi0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvaGVscGVycy9HcmFwaHZpejIuMjYuMy9ldGMvZm9udHMvY29uZi5hdmFpbC8xMC1zdWItcGl4ZWwtYmdyLmNvbmYKQEAgLTAsMCArMSw5IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiPz4NCis8IURPQ1RZUEUgZm9udGNvbmZpZyBTWVNURU0gImZvbnRzLmR0ZCI+DQorPCEtLSBjb25mLmQvc3ViLXBpeGVsLmNvbmYgLS0+DQorPGZvbnRjb25maWc+DQorPCEtLSAgRW5hYmxlIHN1Yi1waXhlbCByZW5kZXJpbmcgLS0+IA0KKyAgPG1hdGNoIHRhcmdldD0iZm9udCI+DQorICAgIDxlZGl0IG5hbWU9InJnYmEiIG1vZGU9ImFzc2lnbiI+PGNvbnN0PmJncjwvY29uc3Q+PC9lZGl0Pg0KKyAgPC9tYXRjaD4NCis8L2ZvbnRjb25maWc+DQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvaGVscGVycy9HcmFwaHZpejIuMjYuMy9ldGMvZm9udHMvY29uZi5hdmFpbC8xMC1zdWItcGl4ZWwtcmdiLmNvbmYgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS9oZWxwZXJzL0dyYXBodml6Mi4yNi4zL2V0Yy9mb250cy9jb25mLmF2YWlsLzEwLXN1Yi1waXhlbC1yZ2IuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTBiMTA4Ci0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvaGVscGVycy9HcmFwaHZpejIuMjYuMy9ldGMvZm9udHMvY29uZi5hdmFpbC8xMC1zdWItcGl4ZWwtcmdiLmNvbmYKQEAgLTAsMCArMSw5IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiPz4NCis8IURPQ1RZUEUgZm9udGNvbmZpZyBTWVNURU0gImZvbnRzLmR0ZCI+DQorPCEtLSBjb25mLmQvc3ViLXBpeGVsLmNvbmYgLS0+DQorPGZvbnRjb25maWc+DQorPCEtLSAgRW5hYmxlIHN1Yi1waXhlbCByZW5kZXJpbmcgLS0+IA0KKyAgPG1hdGNoIHRhcmdldD0iZm9udCI+DQorICAgIDxlZGl0IG5hbWU9InJnYmEiIG1vZGU9ImFzc2lnbiI+PGNvbnN0PnJnYjwvY29uc3Q+PC9lZGl0Pg0KKyAgPC9tYXRjaD4NCis8L2ZvbnRjb25maWc+DQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvaGVscGVycy9HcmFwaHZpejIuMjYuMy9ldGMvZm9udHMvY29uZi5hdmFpbC8xMC1zdWItcGl4ZWwtdmJnci5jb25mIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvaGVscGVycy9HcmFwaHZpejIuMjYuMy9ldGMvZm9udHMvY29uZi5hdmFpbC8xMC1zdWItcGl4ZWwtdmJnci5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2ZmNhYTcKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS9oZWxwZXJzL0dyYXBodml6Mi4yNi4zL2V0Yy9mb250cy9jb25mLmF2YWlsLzEwLXN1Yi1waXhlbC12YmdyLmNvbmYKQEAgLTAsMCArMSw5IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiPz4NCis8IURPQ1RZUEUgZm9udGNvbmZpZyBTWVNURU0gImZvbnRzLmR0ZCI+DQorPCEtLSBjb25mLmQvc3ViLXBpeGVsLmNvbmYgLS0+DQorPGZvbnRjb25maWc+DQorPCEtLSAgRW5hYmxlIHN1Yi1waXhlbCByZW5kZXJpbmcgLS0+IA0KKyAgPG1hdGNoIHRhcmdldD0iZm9udCI+DQorICAgIDxlZGl0IG5hbWU9InJnYmEiIG1vZGU9ImFzc2lnbiI+PGNvbnN0PnZiZ3I8L2NvbnN0PjwvZWRpdD4NCisgIDwvbWF0Y2g+DQorPC9mb250Y29uZmlnPg0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL2hlbHBlcnMvR3JhcGh2aXoyLjI2LjMvZXRjL2ZvbnRzL2NvbmYuYXZhaWwvMTAtc3ViLXBpeGVsLXZyZ2IuY29uZiBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL2hlbHBlcnMvR3JhcGh2aXoyLjI2LjMvZXRjL2ZvbnRzL2NvbmYuYXZhaWwvMTAtc3ViLXBpeGVsLXZyZ2IuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDI5NTg1Ci0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvaGVscGVycy9HcmFwaHZpejIuMjYuMy9ldGMvZm9udHMvY29uZi5hdmFpbC8xMC1zdWItcGl4ZWwtdnJnYi5jb25mCkBAIC0wLDAgKzEsOSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+DQorPCFET0NUWVBFIGZvbnRjb25maWcgU1lTVEVNICJmb250cy5kdGQiPg0KKzwhLS0gY29uZi5kL3N1Yi1waXhlbC5jb25mIC0tPg0KKzxmb250Y29uZmlnPg0KKzwhLS0gIEVuYWJsZSBzdWItcGl4ZWwgcmVuZGVyaW5nIC0tPiANCisgIDxtYXRjaCB0YXJnZXQ9ImZvbnQiPg0KKyAgICA8ZWRpdCBuYW1lPSJyZ2JhIiBtb2RlPSJhc3NpZ24iPjxjb25zdD52cmdiPC9jb25zdD48L2VkaXQ+DQorICA8L21hdGNoPg0KKzwvZm9udGNvbmZpZz4NCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS9oZWxwZXJzL0dyYXBodml6Mi4yNi4zL2V0Yy9mb250cy9jb25mLmF2YWlsLzEwLXVuaGludGVkLmNvbmYgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS9oZWxwZXJzL0dyYXBodml6Mi4yNi4zL2V0Yy9mb250cy9jb25mLmF2YWlsLzEwLXVuaGludGVkLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTg0YzQzMwotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL2hlbHBlcnMvR3JhcGh2aXoyLjI2LjMvZXRjL2ZvbnRzL2NvbmYuYXZhaWwvMTAtdW5oaW50ZWQuY29uZgpAQCAtMCwwICsxLDkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/Pg0KKzwhRE9DVFlQRSBmb250Y29uZmlnIFNZU1RFTSAiZm9udHMuZHRkIj4NCis8IS0tIGRlYmlhbi91bmhpbnRlZC5jb25mIC0tPg0KKzxmb250Y29uZmlnPg0KKzwhLS0gIERpc2FibGUgaGludGluZyAtLT4gDQorICA8bWF0Y2ggdGFyZ2V0PSJmb250Ij4NCisgICAgPGVkaXQgbmFtZT0iaGludGluZyIgbW9kZT0iYXNzaWduIj48Ym9vbD5mYWxzZTwvYm9vbD48L2VkaXQ+DQorICA8L21hdGNoPg0KKzwvZm9udGNvbmZpZz4NCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS9oZWxwZXJzL0dyYXBodml6Mi4yNi4zL2V0Yy9mb250cy9jb25mLmF2YWlsLzIwLWZpeC1nbG9iYWxhZHZhbmNlLmNvbmYgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS9oZWxwZXJzL0dyYXBodml6Mi4yNi4zL2V0Yy9mb250cy9jb25mLmF2YWlsLzIwLWZpeC1nbG9iYWxhZHZhbmNlLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2ZjMjgzNgotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL2hlbHBlcnMvR3JhcGh2aXoyLjI2LjMvZXRjL2ZvbnRzL2NvbmYuYXZhaWwvMjAtZml4LWdsb2JhbGFkdmFuY2UuY29uZgpAQCAtMCwwICsxLDI5IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiPz4NCis8IURPQ1RZUEUgZm9udGNvbmZpZyBTWVNURU0gImZvbnRzLmR0ZCI+DQorPCEtLSBjb25mLmQvc3ViLXBpeGVsLmNvbmYgLS0+DQorPGZvbnRjb25maWc+DQorPCEtLQ0KKyAgU29tZSBBc2lhbiBmb250cyBtaXNhZHZlcnRpc2UgdGhlbXNlbHZlcyBhcyBtb25vc3BhY2VkIHdoZW4NCisgIGluIGZhY3QgdGhleSBhcmUgZHVhbC1zcGFjZWQgKGhhbGYgYW5kIGZ1bGwpLiAgVGhpcyBtYWtlcw0KKyAgRnJlZVR5cGUgdmVyeSBjb25mdXNlZCBhcyBpdCBmb3JjZXMgYWxsIHdpZHRocyB0byBtYXRjaC4NCisgIFVuZG8gdGhpcyBtYWdpYyBieSBkaXNhYmxpbmcgdGhlIHdpZHRoIGZvcmNpbmcgY29kZSAtLT4NCisJPG1hdGNoIHRhcmdldD0iZm9udCI+DQorCQk8dGVzdCBuYW1lPSJmYW1pbHkiPjxzdHJpbmc+R3VsaW1DaGU8L3N0cmluZz48L3Rlc3Q+DQorCQk8ZWRpdCBuYW1lPSJnbG9iYWxhZHZhbmNlIj48Ym9vbD5mYWxzZTwvYm9vbD48L2VkaXQ+DQorCTwvbWF0Y2g+DQorDQorCTxtYXRjaCB0YXJnZXQ9ImZvbnQiPg0KKwkJPHRlc3QgbmFtZT0iZmFtaWx5Ij48c3RyaW5nPkRvdHVtQ2hlPC9zdHJpbmc+PC90ZXN0Pg0KKwkJPGVkaXQgbmFtZT0iZ2xvYmFsYWR2YW5jZSI+PGJvb2w+ZmFsc2U8L2Jvb2w+PC9lZGl0Pg0KKwk8L21hdGNoPg0KKw0KKwk8bWF0Y2ggdGFyZ2V0PSJmb250Ij4NCisJCTx0ZXN0IG5hbWU9ImZhbWlseSI+PHN0cmluZz5CYXRhbmdDaGU8L3N0cmluZz48L3Rlc3Q+DQorCQk8ZWRpdCBuYW1lPSJnbG9iYWxhZHZhbmNlIj48Ym9vbD5mYWxzZTwvYm9vbD48L2VkaXQ+DQorCTwvbWF0Y2g+DQorDQorCTxtYXRjaCB0YXJnZXQ9ImZvbnQiPg0KKwkJPHRlc3QgbmFtZT0iZmFtaWx5Ij48c3RyaW5nPkd1bmdzdWhDaGU8L3N0cmluZz48L3Rlc3Q+DQorCQk8ZWRpdCBuYW1lPSJnbG9iYWxhZHZhbmNlIj48Ym9vbD5mYWxzZTwvYm9vbD48L2VkaXQ+DQorCTwvbWF0Y2g+DQorPC9mb250Y29uZmlnPg0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL2hlbHBlcnMvR3JhcGh2aXoyLjI2LjMvZXRjL2ZvbnRzL2NvbmYuYXZhaWwvMjAtbG9oaXQtZ3VqYXJhdGkuY29uZiBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL2hlbHBlcnMvR3JhcGh2aXoyLjI2LjMvZXRjL2ZvbnRzL2NvbmYuYXZhaWwvMjAtbG9oaXQtZ3VqYXJhdGkuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYWY1NmRjCi0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvaGVscGVycy9HcmFwaHZpejIuMjYuMy9ldGMvZm9udHMvY29uZi5hdmFpbC8yMC1sb2hpdC1ndWphcmF0aS5jb25mCkBAIC0wLDAgKzEsMTEgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/Pg0KKzwhRE9DVFlQRSBmb250Y29uZmlnIFNZU1RFTSAiZm9udHMuZHRkIj4NCis8Zm9udGNvbmZpZz4NCisNCis8IS0tIEF2YWlsYWJsZSBHdWphcnRpIGZvbnRzIGxvb2sgbXVjaCBiZXR0ZXIgd2l0aG91dCBoaW50aW5nIC0tPg0KKw0KKwk8bWF0Y2ggdGFyZ2V0PSJmb250Ij4NCisJCTx0ZXN0IG5hbWU9ImZhbWlseSI+PHN0cmluZz5Mb2hpdCBHdWphcmF0aTwvc3RyaW5nPjwvdGVzdD4NCisJCTxlZGl0IG5hbWU9ImhpbnRpbmciPjxib29sPmZhbHNlPC9ib29sPjwvZWRpdD4NCisJPC9tYXRjaD4NCis8L2ZvbnRjb25maWc+DQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvaGVscGVycy9HcmFwaHZpejIuMjYuMy9ldGMvZm9udHMvY29uZi5hdmFpbC8yMC11bmhpbnQtc21hbGwtdmVyYS5jb25mIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvaGVscGVycy9HcmFwaHZpejIuMjYuMy9ldGMvZm9udHMvY29uZi5hdmFpbC8yMC11bmhpbnQtc21hbGwtdmVyYS5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1MDRlNjgKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS9oZWxwZXJzL0dyYXBodml6Mi4yNi4zL2V0Yy9mb250cy9jb25mLmF2YWlsLzIwLXVuaGludC1zbWFsbC12ZXJhLmNvbmYKQEAgLTAsMCArMSw0OSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+DQorPCFET0NUWVBFIGZvbnRjb25maWcgU1lTVEVNICJmb250cy5kdGQiPg0KKzwhLS0gY29uZi5kL3N1Yi1waXhlbC5jb25mIC0tPg0KKzxmb250Y29uZmlnPg0KKzwhLS0gDQorCVRoZSBCaXRzdHJlYW0gVmVyYSBmb250cyBoYXZlIEdBU1AgZW50cmllcyBzdWdnZXN0aW5nIHRoYXQgaGludGluZyBiZQ0KKwlkaXNhYmxlZCBiZWxvdyA4IHBwZW0sIGJ1dCBGcmVlVHlwZSBpZ25vcmVzIHRob3NlLCBwcmVmZXJyaW5nIHRvIHVzZQ0KKwl0aGUgZGF0YSBmb3VuZCBpbiB0aGUgaW5zdHJ1Y3RlZCBoaW50cy4gIFRoZSBpbml0aWFsIFZlcmEgcmVsZWFzZQ0KKwlkaWRuJ3QgaW5jbHVkZSB0aGUgcmlnaHQgaW5zdHJ1Y3Rpb25zIGluIHRoZSAncHJlcCcgdGFibGUuIEZpeCB0aGlzDQorCWJ5IGRpc2FibGluZyBoaW50aW5nIG1hbnVhbGx5IGF0IHNtYWxsZXIgc2l6ZXMgKDwgOHBwZW0pDQorIC0tPg0KKw0KKwk8bWF0Y2ggdGFyZ2V0PSJmb250Ij4NCisJCTx0ZXN0IG5hbWU9ImZhbWlseSI+DQorCQkJPHN0cmluZz5CaXRzdHJlYW0gVmVyYSBTYW5zPC9zdHJpbmc+DQorCQk8L3Rlc3Q+DQorCQk8dGVzdCBuYW1lPSJwaXhlbHNpemUiIGNvbXBhcmU9Imxlc3MiPg0KKwkJCTxkb3VibGU+Ny41PC9kb3VibGU+DQorCQk8L3Rlc3Q+DQorCQk8ZWRpdCBuYW1lPSJoaW50aW5nIj4NCisJCQk8Ym9vbD5mYWxzZTwvYm9vbD4NCisJCTwvZWRpdD4NCisJPC9tYXRjaD4NCisNCisJPG1hdGNoIHRhcmdldD0iZm9udCI+DQorCQk8dGVzdCBuYW1lPSJmYW1pbHkiPg0KKwkJCTxzdHJpbmc+Qml0c3RyZWFtIFZlcmEgU2VyaWY8L3N0cmluZz4NCisJCTwvdGVzdD4NCisJCTx0ZXN0IG5hbWU9InBpeGVsc2l6ZSIgY29tcGFyZT0ibGVzcyI+DQorCQkJPGRvdWJsZT43LjU8L2RvdWJsZT4NCisJCTwvdGVzdD4NCisJCTxlZGl0IG5hbWU9ImhpbnRpbmciPg0KKwkJCTxib29sPmZhbHNlPC9ib29sPg0KKwkJPC9lZGl0Pg0KKwk8L21hdGNoPg0KKw0KKwk8bWF0Y2ggdGFyZ2V0PSJmb250Ij4NCisJCTx0ZXN0IG5hbWU9ImZhbWlseSI+DQorCQkJPHN0cmluZz5CaXRzdHJlYW0gVmVyYSBTYW5zIE1vbm88L3N0cmluZz4NCisJCTwvdGVzdD4NCisJCTx0ZXN0IG5hbWU9InBpeGVsc2l6ZSIgY29tcGFyZT0ibGVzcyI+DQorCQkJPGRvdWJsZT43LjU8L2RvdWJsZT4NCisJCTwvdGVzdD4NCisJCTxlZGl0IG5hbWU9ImhpbnRpbmciPg0KKwkJCTxib29sPmZhbHNlPC9ib29sPg0KKwkJPC9lZGl0Pg0KKwk8L21hdGNoPg0KKw0KKzwvZm9udGNvbmZpZz4NCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS9oZWxwZXJzL0dyYXBodml6Mi4yNi4zL2V0Yy9mb250cy9jb25mLmF2YWlsLzMwLWFtdC1hbGlhc2VzLmNvbmYgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS9oZWxwZXJzL0dyYXBodml6Mi4yNi4zL2V0Yy9mb250cy9jb25mLmF2YWlsLzMwLWFtdC1hbGlhc2VzLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWJhNzcxNwotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL2hlbHBlcnMvR3JhcGh2aXoyLjI2LjMvZXRjL2ZvbnRzL2NvbmYuYXZhaWwvMzAtYW10LWFsaWFzZXMuY29uZgpAQCAtMCwwICsxLDIxIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiPz4NCis8IURPQ1RZUEUgZm9udGNvbmZpZyBTWVNURU0gImZvbnRzLmR0ZCI+DQorPCEtLSBjb25mLmQvc3ViLXBpeGVsLmNvbmYgLS0+DQorPGZvbnRjb25maWc+DQorPCEtLQ0KKyBBTVQgcHJvdmlkZXMgbWV0cmljIGFuZCBzaGFwZSBjb21wYXRpYmxlIGZvbnRzIGZvciB0aGVzZSB0aHJlZSB3ZWIgZm9udA0KKyBmYW1pbGllcy4NCisgLS0+DQorIAk8YWxpYXM+DQorCQk8ZmFtaWx5PlRpbWVzIE5ldyBSb21hbjwvZmFtaWx5Pg0KKwkJPGFjY2VwdD48ZmFtaWx5PlRob3JuZGFsZSBBTVQ8L2ZhbWlseT48L2FjY2VwdD4NCisJPC9hbGlhcz4NCisgCTxhbGlhcz4NCisJCTxmYW1pbHk+QXJpYWw8L2ZhbWlseT4NCisJCTxhY2NlcHQ+PGZhbWlseT5BbGJhbnkgQU1UPC9mYW1pbHk+PC9hY2NlcHQ+DQorCTwvYWxpYXM+DQorIAk8YWxpYXM+DQorCQk8ZmFtaWx5PkNvdXJpZXIgTmV3PC9mYW1pbHk+DQorCQk8YWNjZXB0PjxmYW1pbHk+Q3VtYmVybGFuZCBBTVQ8L2ZhbWlseT48L2FjY2VwdD4NCisJPC9hbGlhcz4NCis8L2ZvbnRjb25maWc+DQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvaGVscGVycy9HcmFwaHZpejIuMjYuMy9ldGMvZm9udHMvY29uZi5hdmFpbC8zMC11cnctYWxpYXNlcy5jb25mIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvaGVscGVycy9HcmFwaHZpejIuMjYuMy9ldGMvZm9udHMvY29uZi5hdmFpbC8zMC11cnctYWxpYXNlcy5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzNmQxN2QKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS9oZWxwZXJzL0dyYXBodml6Mi4yNi4zL2V0Yy9mb250cy9jb25mLmF2YWlsLzMwLXVydy1hbGlhc2VzLmNvbmYKQEAgLTAsMCArMSw1MiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+DQorPCFET0NUWVBFIGZvbnRjb25maWcgU1lTVEVNICJmb250cy5kdGQiPg0KKzwhLS0gY29uZi5kL3N1Yi1waXhlbC5jb25mIC0tPg0KKzxmb250Y29uZmlnPg0KKzwhLS0NCisgIFVSVyBwcm92aWRlcyBtZXRyaWMgYW5kIHNoYXBlIGNvbXBhdGlibGUgZm9udHMgZm9yIHRoZXNlIDEwIEFkb2JlIGZhbWlsaWVzLg0KKyAgLS0+DQorICAgICAgICA8YWxpYXM+DQorICAgICAgICAgIDxmYW1pbHk+QXZhbnQgR2FyZGU8L2ZhbWlseT4NCisgICAgICAgICAgPGFjY2VwdD48ZmFtaWx5PlVSVyBHb3RoaWMgTDwvZmFtaWx5PjwvYWNjZXB0Pg0KKyAgICAgICAgPC9hbGlhcz4NCisgICAgICAgIDxhbGlhcz4NCisgICAgICAgICAgPGZhbWlseT5Cb29rbWFuPC9mYW1pbHk+DQorICAgICAgICAgIDxhY2NlcHQ+PGZhbWlseT5VUlcgQm9va21hbiBMPC9mYW1pbHk+PC9hY2NlcHQ+DQorICAgICAgICA8L2FsaWFzPg0KKyAgICAgICAgPGFsaWFzPg0KKwkgIDxmYW1pbHk+Q291cmllcjwvZmFtaWx5Pg0KKwkgIDxhY2NlcHQ+PGZhbWlseT5OaW1idXMgTW9ubyBMPC9mYW1pbHk+PC9hY2NlcHQ+DQorCTwvYWxpYXM+DQorICAgICAgICA8YWxpYXM+DQorCSAgPGZhbWlseT5IZWx2ZXRpY2E8L2ZhbWlseT4NCisJICA8YWNjZXB0PjxmYW1pbHk+TmltYnVzIFNhbnMgTDwvZmFtaWx5PjwvYWNjZXB0Pg0KKwk8L2FsaWFzPg0KKyAgICAgICAgPGFsaWFzPg0KKyAgICAgICAgICA8ZmFtaWx5Pk5ldyBDZW50dXJ5IFNjaG9vbGJvb2s8L2ZhbWlseT4NCisgICAgICAgICAgPGFjY2VwdD48ZmFtaWx5PkNlbnR1cnkgU2Nob29sYm9vayBMPC9mYW1pbHk+PC9hY2NlcHQ+DQorICAgICAgICA8L2FsaWFzPg0KKyAgICAgICAgPGFsaWFzPg0KKyAgICAgICAgICA8ZmFtaWx5PlBhbGF0aW5vPC9mYW1pbHk+DQorICAgICAgICAgIDxhY2NlcHQ+PGZhbWlseT5VUlcgUGFsbGFkaW8gTDwvZmFtaWx5PjwvYWNjZXB0Pg0KKyAgICAgICAgPC9hbGlhcz4NCisgICAgICAgIDxhbGlhcz4NCisJICA8ZmFtaWx5PlRpbWVzPC9mYW1pbHk+DQorCSAgPGFjY2VwdD48ZmFtaWx5Pk5pbWJ1cyBSb21hbiBObzkgTDwvZmFtaWx5PjwvYWNjZXB0Pg0KKwk8L2FsaWFzPg0KKyAgICAgICAgPGFsaWFzPg0KKwkgIDxmYW1pbHk+WmFwZiBDaGFuY2VyeTwvZmFtaWx5Pg0KKwkgIDxhY2NlcHQ+PGZhbWlseT5VUlcgQ2hhbmNlcnkgTDwvZmFtaWx5PjwvYWNjZXB0Pg0KKwk8L2FsaWFzPg0KKyAgICAgICAgPGFsaWFzPg0KKwkgIDxmYW1pbHk+WmFwZiBEaW5nYmF0czwvZmFtaWx5Pg0KKwkgIDxhY2NlcHQ+PGZhbWlseT5EaW5nYmF0czwvZmFtaWx5PjwvYWNjZXB0Pg0KKwk8L2FsaWFzPg0KKwk8bWF0Y2ggdGFyZ2V0PSJwYXR0ZXJuIj4NCisJICA8dGVzdCBuYW1lPSJmYW1pbHkiPg0KKwkgICAgPHN0cmluZz5TeW1ib2w8L3N0cmluZz4NCisJICA8L3Rlc3Q+DQorCSAgPGVkaXQgbmFtZT0iZmFtaWx5IiBtb2RlPSJhcHBlbmQiIGJpbmRpbmc9InNhbWUiPg0KKwkgICAgPHN0cmluZz5TdGFuZGFyZCBTeW1ib2xzIEw8L3N0cmluZz4NCisJICA8L2VkaXQ+DQorCTwvbWF0Y2g+DQorPC9mb250Y29uZmlnPg0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL2hlbHBlcnMvR3JhcGh2aXoyLjI2LjMvZXRjL2ZvbnRzL2NvbmYuYXZhaWwvNDAtZ2VuZXJpYy5jb25mIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvaGVscGVycy9HcmFwaHZpejIuMjYuMy9ldGMvZm9udHMvY29uZi5hdmFpbC80MC1nZW5lcmljLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGRjZTIxOAotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL2hlbHBlcnMvR3JhcGh2aXoyLjI2LjMvZXRjL2ZvbnRzL2NvbmYuYXZhaWwvNDAtZ2VuZXJpYy5jb25mCkBAIC0wLDAgKzEsNjYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/Pg0KKzwhRE9DVFlQRSBmb250Y29uZmlnIFNZU1RFTSAiZm9udHMuZHRkIj4NCis8Zm9udGNvbmZpZz4NCis8IS0tDQorICBNYXJrIGNvbW1vbiBmYW1pbGllcyB3aXRoIHRoZWlyIGdlbmVyaWNzIHNvIHdlJ2xsIGdldA0KKyAgc29tZXRoaW5nIHJlYXNvbmFibGUNCistLT4NCisNCis8IS0tDQorICBTZXJpZiBmYWNlcw0KKyAtLT4NCisJPGFsaWFzPg0KKwkJPGZhbWlseT5CaXRzdHJlYW0gVmVyYSBTZXJpZjwvZmFtaWx5Pg0KKwkJPGZhbWlseT5EZWphVnUgU2VyaWY8L2ZhbWlseT4NCisJCTxmYW1pbHk+VGltZXMgTmV3IFJvbWFuPC9mYW1pbHk+DQorCQk8ZmFtaWx5PlRpbWVzPC9mYW1pbHk+DQorCQk8ZmFtaWx5Pk5pbWJ1cyBSb21hbiBObzkgTDwvZmFtaWx5Pg0KKwkJPGZhbWlseT5MdXhpIFNlcmlmPC9mYW1pbHk+DQorCQk8ZmFtaWx5PktvY2hpIE1pbmNobzwvZmFtaWx5Pg0KKwkJPGZhbWlseT5BUiBQTCBTdW5ndGlMIEdCPC9mYW1pbHk+DQorCQk8ZmFtaWx5PkFSIFBMIE1pbmd0aTJMIEJpZzU8L2ZhbWlseT4NCisJCTxmYW1pbHk+77yt77yzIOaYjuacnTwvZmFtaWx5Pg0KKwkJPGZhbWlseT5CYWVrbXVrIEJhdGFuZzwvZmFtaWx5Pg0KKwkJPGZhbWlseT5GcmVlU2VyaWY8L2ZhbWlseT4NCisJCTxmYW1pbHk+TWdPcGVuIENhbm9uaWNhPC9mYW1pbHk+DQorCQk8ZGVmYXVsdD48ZmFtaWx5PnNlcmlmPC9mYW1pbHk+PC9kZWZhdWx0Pg0KKwk8L2FsaWFzPg0KKzwhLS0NCisgIFNhbnMtc2VyaWYgZmFjZXMNCisgLS0+DQorCTxhbGlhcz4NCisJCTxmYW1pbHk+Qml0c3RyZWFtIFZlcmEgU2FuczwvZmFtaWx5Pg0KKwkJPGZhbWlseT5EZWphVnUgU2FuczwvZmFtaWx5Pg0KKwkJPGZhbWlseT5IZWx2ZXRpY2E8L2ZhbWlseT4NCisJCTxmYW1pbHk+QXJpYWw8L2ZhbWlseT4NCisJCTxmYW1pbHk+VmVyZGFuYTwvZmFtaWx5Pg0KKwkJPGZhbWlseT5BbGJhbnkgQU1UPC9mYW1pbHk+DQorCQk8ZmFtaWx5Pk5pbWJ1cyBTYW5zIEw8L2ZhbWlseT4NCisJCTxmYW1pbHk+THV4aSBTYW5zPC9mYW1pbHk+DQorCQk8ZmFtaWx5PktvY2hpIEdvdGhpYzwvZmFtaWx5Pg0KKwkJPGZhbWlseT5BUiBQTCBLYWl0aU0gR0I8L2ZhbWlseT4NCisJCTxmYW1pbHk+QVIgUEwgS2FpdGlNIEJpZzU8L2ZhbWlseT4NCisJCTxmYW1pbHk+77yt77yzIOOCtOOCt+ODg+OCrzwvZmFtaWx5Pg0KKwkJPGZhbWlseT5CYWVrbXVrIERvdHVtPC9mYW1pbHk+DQorCQk8ZmFtaWx5PlNpbVN1bjwvZmFtaWx5Pg0KKwkJPGZhbWlseT5GcmVlU2FuczwvZmFtaWx5Pg0KKwkJPGZhbWlseT5NZ09wZW4gTW9kYXRhPC9mYW1pbHk+DQorCQk8ZGVmYXVsdD48ZmFtaWx5PnNhbnMtc2VyaWY8L2ZhbWlseT48L2RlZmF1bHQ+DQorCTwvYWxpYXM+DQorPCEtLQ0KKyAgTW9ub3NwYWNlIGZhY2VzDQorIC0tPg0KKyAJPGFsaWFzPg0KKwkJPGZhbWlseT5CaXRzdHJlYW0gVmVyYSBTYW5zIE1vbm88L2ZhbWlseT4NCisJCTxmYW1pbHk+RGVqYVZ1IFNhbnMgTW9ubzwvZmFtaWx5Pg0KKwkJPGZhbWlseT5Db3VyaWVyPC9mYW1pbHk+DQorCQk8ZmFtaWx5PkNvdXJpZXIgTmV3PC9mYW1pbHk+DQorCQk8ZmFtaWx5PkFuZGFsZSBNb25vPC9mYW1pbHk+DQorCQk8ZmFtaWx5Pkx1eGkgTW9ubzwvZmFtaWx5Pg0KKwkJPGZhbWlseT5DdW1iZXJsYW5kIEFNVDwvZmFtaWx5Pg0KKwkJPGZhbWlseT5OaW1idXMgTW9ubyBMPC9mYW1pbHk+DQorCQk8ZmFtaWx5Pk5TaW1TdW48L2ZhbWlseT4NCisJCTxmYW1pbHk+RnJlZU1vbm88L2ZhbWlseT4NCisJCTxkZWZhdWx0PjxmYW1pbHk+bW9ub3NwYWNlPC9mYW1pbHk+PC9kZWZhdWx0Pg0KKwk8L2FsaWFzPg0KKzwvZm9udGNvbmZpZz4NCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS9oZWxwZXJzL0dyYXBodml6Mi4yNi4zL2V0Yy9mb250cy9jb25mLmF2YWlsLzQ5LXNhbnNzZXJpZi5jb25mIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvaGVscGVycy9HcmFwaHZpejIuMjYuMy9ldGMvZm9udHMvY29uZi5hdmFpbC80OS1zYW5zc2VyaWYuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZmIwYmY4Ci0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvaGVscGVycy9HcmFwaHZpejIuMjYuMy9ldGMvZm9udHMvY29uZi5hdmFpbC80OS1zYW5zc2VyaWYuY29uZgpAQCAtMCwwICsxLDIxIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiPz4NCis8IURPQ1RZUEUgZm9udGNvbmZpZyBTWVNURU0gImZvbnRzLmR0ZCI+DQorPGZvbnRjb25maWc+DQorPCEtLQ0KKyAgSWYgdGhlIGZvbnQgc3RpbGwgaGFzIG5vIGdlbmVyaWMgbmFtZSwgYWRkIHNhbnMtc2VyaWYNCisgLS0+DQorCTxtYXRjaCB0YXJnZXQ9InBhdHRlcm4iPg0KKwkJPHRlc3QgcXVhbD0iYWxsIiBuYW1lPSJmYW1pbHkiIGNvbXBhcmU9Im5vdF9lcSI+DQorCQkJPHN0cmluZz5zYW5zLXNlcmlmPC9zdHJpbmc+DQorCQk8L3Rlc3Q+DQorCQk8dGVzdCBxdWFsPSJhbGwiIG5hbWU9ImZhbWlseSIgY29tcGFyZT0ibm90X2VxIj4NCisJCQk8c3RyaW5nPnNlcmlmPC9zdHJpbmc+DQorCQk8L3Rlc3Q+DQorCQk8dGVzdCBxdWFsPSJhbGwiIG5hbWU9ImZhbWlseSIgY29tcGFyZT0ibm90X2VxIj4NCisJCQk8c3RyaW5nPm1vbm9zcGFjZTwvc3RyaW5nPg0KKwkJPC90ZXN0Pg0KKwkJPGVkaXQgbmFtZT0iZmFtaWx5IiBtb2RlPSJhcHBlbmRfbGFzdCI+DQorCQkJPHN0cmluZz5zYW5zLXNlcmlmPC9zdHJpbmc+DQorCQk8L2VkaXQ+DQorCTwvbWF0Y2g+DQorPC9mb250Y29uZmlnPg0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL2hlbHBlcnMvR3JhcGh2aXoyLjI2LjMvZXRjL2ZvbnRzL2NvbmYuYXZhaWwvNTAtdXNlci5jb25mIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvaGVscGVycy9HcmFwaHZpejIuMjYuMy9ldGMvZm9udHMvY29uZi5hdmFpbC81MC11c2VyLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjc1Nzk3MwotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL2hlbHBlcnMvR3JhcGh2aXoyLjI2LjMvZXRjL2ZvbnRzL2NvbmYuYXZhaWwvNTAtdXNlci5jb25mCkBAIC0wLDAgKzEsNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+DQorPCFET0NUWVBFIGZvbnRjb25maWcgU1lTVEVNICJmb250cy5kdGQiPg0KKzwhLS0gL2V0Yy9mb250cy9jb25mLmF2YWlsLzUwLXVzZXIuY29uZiBmaWxlIHRvIGNvbmZpZ3VyZSBzeXN0ZW0gZm9udCBhY2Nlc3MgLS0+DQorPGZvbnRjb25maWc+DQorCTwhLS0gTG9hZCBwZXItdXNlciBjdXN0b21pemF0aW9uIGZpbGUgLS0+DQorCTxpbmNsdWRlIGlnbm9yZV9taXNzaW5nPSJ5ZXMiPn4vLmZvbnRzLmNvbmY8L2luY2x1ZGU+DQorPC9mb250Y29uZmlnPg0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL2hlbHBlcnMvR3JhcGh2aXoyLjI2LjMvZXRjL2ZvbnRzL2NvbmYuYXZhaWwvNTEtbG9jYWwuY29uZiBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL2hlbHBlcnMvR3JhcGh2aXoyLjI2LjMvZXRjL2ZvbnRzL2NvbmYuYXZhaWwvNTEtbG9jYWwuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDU4ZmExCi0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvaGVscGVycy9HcmFwaHZpejIuMjYuMy9ldGMvZm9udHMvY29uZi5hdmFpbC81MS1sb2NhbC5jb25mCkBAIC0wLDAgKzEsNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+DQorPCFET0NUWVBFIGZvbnRjb25maWcgU1lTVEVNICJmb250cy5kdGQiPg0KKzwhLS0gL2V0Yy9mb250cy9jb25mLmF2YWlsLzUxLWxvY2FsLmNvbmYgZmlsZSB0byBjb25maWd1cmUgc3lzdGVtIGZvbnQgYWNjZXNzIC0tPg0KKzxmb250Y29uZmlnPg0KKwk8IS0tIExvYWQgbG9jYWwgc3lzdGVtIGN1c3RvbWl6YXRpb24gZmlsZSAtLT4NCisJPGluY2x1ZGUgaWdub3JlX21pc3Npbmc9InllcyI+bG9jYWwuY29uZjwvaW5jbHVkZT4NCis8L2ZvbnRjb25maWc+DQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvaGVscGVycy9HcmFwaHZpejIuMjYuMy9ldGMvZm9udHMvY29uZi5hdmFpbC82MC1sYXRpbi5jb25mIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvaGVscGVycy9HcmFwaHZpejIuMjYuMy9ldGMvZm9udHMvY29uZi5hdmFpbC82MC1sYXRpbi5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4NzFmZTgKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS9oZWxwZXJzL0dyYXBodml6Mi4yNi4zL2V0Yy9mb250cy9jb25mLmF2YWlsLzYwLWxhdGluLmNvbmYKQEAgLTAsMCArMSw0MiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+DQorPCFET0NUWVBFIGZvbnRjb25maWcgU1lTVEVNICJmb250cy5kdGQiPg0KKzxmb250Y29uZmlnPg0KKwk8YWxpYXM+DQorCQk8ZmFtaWx5PnNlcmlmPC9mYW1pbHk+DQorCQk8cHJlZmVyPg0KKwkJCTxmYW1pbHk+Qml0c3RyZWFtIFZlcmEgU2VyaWY8L2ZhbWlseT4NCisJCQk8ZmFtaWx5PkRlamFWdSBTZXJpZjwvZmFtaWx5Pg0KKwkJCTxmYW1pbHk+VGltZXMgTmV3IFJvbWFuPC9mYW1pbHk+DQorCQkJPGZhbWlseT5UaG9ybmRhbGUgQU1UPC9mYW1pbHk+DQorCQkJPGZhbWlseT5MdXhpIFNlcmlmPC9mYW1pbHk+DQorCQkJPGZhbWlseT5OaW1idXMgUm9tYW4gTm85IEw8L2ZhbWlseT4NCisJCQk8ZmFtaWx5PlRpbWVzPC9mYW1pbHk+DQorCQk8L3ByZWZlcj4NCisJPC9hbGlhcz4NCisJPGFsaWFzPg0KKwkJPGZhbWlseT5zYW5zLXNlcmlmPC9mYW1pbHk+DQorCQk8cHJlZmVyPg0KKwkJCTxmYW1pbHk+Qml0c3RyZWFtIFZlcmEgU2FuczwvZmFtaWx5Pg0KKwkJCTxmYW1pbHk+RGVqYVZ1IFNhbnM8L2ZhbWlseT4NCisJCQk8ZmFtaWx5PlZlcmRhbmE8L2ZhbWlseT4NCisJCQk8ZmFtaWx5PkFyaWFsPC9mYW1pbHk+DQorCQkJPGZhbWlseT5BbGJhbnkgQU1UPC9mYW1pbHk+DQorCQkJPGZhbWlseT5MdXhpIFNhbnM8L2ZhbWlseT4NCisJCQk8ZmFtaWx5Pk5pbWJ1cyBTYW5zIEw8L2ZhbWlseT4NCisJCQk8ZmFtaWx5PkhlbHZldGljYTwvZmFtaWx5Pg0KKwkJPC9wcmVmZXI+DQorCTwvYWxpYXM+DQorCTxhbGlhcz4NCisJCTxmYW1pbHk+bW9ub3NwYWNlPC9mYW1pbHk+DQorCQk8cHJlZmVyPg0KKwkJCTxmYW1pbHk+Qml0c3RyZWFtIFZlcmEgU2FucyBNb25vPC9mYW1pbHk+DQorCQkJPGZhbWlseT5EZWphVnUgU2FucyBNb25vPC9mYW1pbHk+DQorCQkJPGZhbWlseT5BbmRhbGUgTW9ubzwvZmFtaWx5Pg0KKwkJCTxmYW1pbHk+Q291cmllciBOZXc8L2ZhbWlseT4NCisJCQk8ZmFtaWx5PkN1bWJlcmxhbmQgQU1UPC9mYW1pbHk+DQorCQkJPGZhbWlseT5MdXhpIE1vbm88L2ZhbWlseT4NCisJCQk8ZmFtaWx5Pk5pbWJ1cyBNb25vIEw8L2ZhbWlseT4NCisJCQk8ZmFtaWx5PkNvdXJpZXI8L2ZhbWlseT4NCisJCTwvcHJlZmVyPg0KKwk8L2FsaWFzPg0KKzwvZm9udGNvbmZpZz4NCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS9oZWxwZXJzL0dyYXBodml6Mi4yNi4zL2V0Yy9mb250cy9jb25mLmF2YWlsLzY1LWZvbnRzLXBlcnNpYW4uY29uZiBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL2hlbHBlcnMvR3JhcGh2aXoyLjI2LjMvZXRjL2ZvbnRzL2NvbmYuYXZhaWwvNjUtZm9udHMtcGVyc2lhbi5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmNGE5YTAKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS9oZWxwZXJzL0dyYXBodml6Mi4yNi4zL2V0Yy9mb250cy9jb25mLmF2YWlsLzY1LWZvbnRzLXBlcnNpYW4uY29uZgpAQCAtMCwwICsxLDUzOSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+DQorPCFET0NUWVBFIGZvbnRjb25maWcgU1lTVEVNICJmb250cy5kdGQiPg0KKzwhLS0gL2V0Yy9mb250cy9jb25mLmQvMTAtZm9udHMtcGVyc2lhbi5jb25mIC0tPg0KKzwhLS0NCisgIGZvbnRzLXBlcnNpYW4uY29uZg0KKyAgVG8gY29uZmlndXJlIFBlcnNpYW4gZm9udHMgZnJvbSBUaGUgRmFyc2lXZWIgUHJvamVjdC4NCisNCisgIENvcHlyaWdodCAoQykgMjAwNSAgU2hhcmlmIEZhcnNpV2ViLCBJbmMuIDxsaWNlbnNlQGZhcnNpd2ViLmluZm8+DQorDQorICBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBkaXN0cmlidXRlLCBhbmQgc2VsbCB0aGlzIHNvZnR3YXJlIGFuZCBpdHMNCisgIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0DQorICB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQgdGhhdCBib3RoIHRoYXQNCisgIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcNCisgIGRvY3VtZW50YXRpb24sIGFuZCB0aGF0IHRoZSBuYW1lIG9mIFNoYXJpZiBGYXJzaVdlYiwgSW5jLiBub3QgYmUgdXNlZCBpbg0KKyAgYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZSBzb2Z0d2FyZSB3aXRob3V0DQorICBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLiAgU2hhcmlmIEZhcnNpV2ViLCBJbmMuIG1ha2VzIG5vDQorICByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLiAgSXQNCisgIGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuDQorDQorICBTSEFSSUYgRkFSU0lXRUIsIElOQy4gRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUsDQorICBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MsIElOIE5PDQorICBFVkVOVCBTSEFMTCBLRUlUSCBQQUNLQVJEIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIElORElSRUNUIE9SDQorICBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwNCisgIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVINCisgIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1INCisgIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuDQorDQorICBDaGFuZ2VMb2c6DQorICAgIDIwMDUtMDQtMDMgIEJlaGRhZCBFc2ZhaGJvZDogIEluaXRpYWwgcmV2aXNpb24uDQorICAgIDIwMDUtMTAtMDkgIEJlaGRhZCBFc2ZhaGJvZDogIFR1cm5lZCBvZmYgYmFjay1zbGFudCBhbmQgVGFob21hIHNlY3Rpb25zLg0KKyAgICAyMDA1LTExLTMwICBCZWhkYWQgRXNmYWhib2Q6ICBTZXQgVGl0ciBzdXNidGl0dXRpb24gc2l6ZSB0byAyNCBwb2ludHMuDQorDQorICBUb2RvOg0KKyAgICBBZGQgZ2VuZXJpYyBmb250ICJmYW50YXN5Ii4gIEFkZCBzb21lIGZvbnRzIGludG8gdGhhdCBjYXRlZ29yeS4NCisgICAgTWF5YmUgYWRkIGEgImN1cnNpdmUiIGdlbmVyaWMgZm9udC4NCisgIC0tPg0KKzxmb250Y29uZmlnPg0KKw0KKw0KKzwhLS0NCisgIFdlIGRvbid0IHdhbnQgd2VhayBiaW5kaW5ncy4gIFNvIGdvdCB0byB1c2UgdGhlIHN5bnRhY3RpY2FsIGV4cGFuc2lvbg0KKyAgb2YgYWxpYXMgdGFnIHRvIGRvIGJpbmRpbmc9c2FtZSA6KC4gIFBsZWFzZSBzdXBwb3J0IHRoYXQgaW4gYWxpYXMuDQorICAtLT4NCisNCisNCis8IS0tIERlcHJlY2F0ZWQgZm9udHMgYXJlIGRpc2NvdXJhZ2VkIC0tPg0KKw0KKwk8IS0tIE5lc2ZbMl0gaXMgb2ZmaWNpYWxseSBkZXByZWNhdGVkIGFuZCBoYXMgcHJvYmxlbWF0aWMgdGFibGVzIC0tPg0KKwk8bWF0Y2g+DQorCQk8dGVzdCBuYW1lPSJmYW1pbHkiPg0KKwkJCTxzdHJpbmc+TmVzZjwvc3RyaW5nPg0KKwkJPC90ZXN0Pg0KKwkJPGVkaXQgbmFtZT0iZmFtaWx5IiBtb2RlPSJhc3NpZ24iIGJpbmRpbmc9InNhbWUiPg0KKwkJCTxzdHJpbmc+TmVzZjI8L3N0cmluZz4NCisJCTwvZWRpdD4NCisJPC9tYXRjaD4NCisJPG1hdGNoPg0KKwkJPHRlc3QgbmFtZT0iZmFtaWx5Ij4NCisJCQk8c3RyaW5nPk5lc2YyPC9zdHJpbmc+DQorCQk8L3Rlc3Q+DQorCQk8ZWRpdCBuYW1lPSJmYW1pbHkiIG1vZGU9ImFzc2lnbiIgYmluZGluZz0ic2FtZSI+DQorCQkJPHN0cmluZz5QZXJzaWFuX3NhbnNzZXJpZl9kZWZhdWx0PC9zdHJpbmc+DQorCQk8L2VkaXQ+DQorCTwvbWF0Y2g+DQorDQorCTwhLS0gVGFob21hIGxvb2tzIGF3ZnVsIChUVVJORUQtT0ZGKSAtLT4NCisJPCEtLW1hdGNoPg0KKwkJPHRlc3QgbmFtZT0iZmFtaWx5Ij4NCisJCQk8c3RyaW5nPlRhaG9tYTwvc3RyaW5nPg0KKwkJPC90ZXN0Pg0KKwkJPGVkaXQgbmFtZT0iZmFtaWx5IiBtb2RlPSJwcmVwZW5kIiBiaW5kaW5nPSJzYW1lIj4NCisJCQk8c3RyaW5nPlBlcnNpYW5fc2Fuc3NlcmlmX2RlZmF1bHQ8L3N0cmluZz4NCisJCTwvZWRpdD4NCisJPC9tYXRjaC0tPg0KKw0KKzwhLS0gTmFtZSBjaGFuZ2VzIGFuZCBzcGVsbGluZyB2YXJpYW50IGFsaWFzZXMgLS0+DQorDQorCTwhLS0gQ2hhbmdlZCBkdWUgdG8gdHJhZGVtYXJrIHByb2JsZW1zIC0tPg0KKwk8bWF0Y2g+DQorCQk8dGVzdCBuYW1lPSJmYW1pbHkiPg0KKwkJCTxzdHJpbmc+TmF6YW5pbjwvc3RyaW5nPg0KKwkJPC90ZXN0Pg0KKwkJPGVkaXQgbmFtZT0iZmFtaWx5IiBtb2RlPSJhc3NpZ24iIGJpbmRpbmc9InNhbWUiPg0KKwkJCTxzdHJpbmc+TmF6bGk8L3N0cmluZz4NCisJCTwvZWRpdD4NCisJPC9tYXRjaD4NCisJPG1hdGNoPg0KKwkJPHRlc3QgbmFtZT0iZmFtaWx5Ij4NCisJCQk8c3RyaW5nPkxvdHVzPC9zdHJpbmc+DQorCQk8L3Rlc3Q+DQorCQk8ZWRpdCBuYW1lPSJmYW1pbHkiIG1vZGU9ImFzc2lnbiIgYmluZGluZz0ic2FtZSI+DQorCQkJPHN0cmluZz5Mb3Rvb3M8L3N0cmluZz4NCisJCTwvZWRpdD4NCisJPC9tYXRjaD4NCisNCisJPCEtLSBDaGFuZ2VkIGR1ZSB0byB0cmFuc2NyaXB0aW9uIG9ydGhvZ3JhcGh5IC0tPg0KKwk8bWF0Y2g+DQorCQk8dGVzdCBuYW1lPSJmYW1pbHkiPg0KKwkJCTxzdHJpbmc+WWFxdXQ8L3N0cmluZz4NCisJCTwvdGVzdD4NCisJCTxlZGl0IG5hbWU9ImZhbWlseSIgbW9kZT0iYXNzaWduIiBiaW5kaW5nPSJzYW1lIj4NCisJCQk8c3RyaW5nPllhZ2hvb3Q8L3N0cmluZz4NCisJCTwvZWRpdD4NCisJPC9tYXRjaD4NCisJPG1hdGNoPg0KKwkJPHRlc3QgbmFtZT0iZmFtaWx5Ij4NCisJCQk8c3RyaW5nPllhZ3V0PC9zdHJpbmc+DQorCQk8L3Rlc3Q+DQorCQk8ZWRpdCBuYW1lPSJmYW1pbHkiIG1vZGU9ImFzc2lnbiIgYmluZGluZz0ic2FtZSI+DQorCQkJPHN0cmluZz5ZYWdob290PC9zdHJpbmc+DQorCQk8L2VkaXQ+DQorCTwvbWF0Y2g+DQorCTxtYXRjaD4NCisJCTx0ZXN0IG5hbWU9ImZhbWlseSI+DQorCQkJPHN0cmluZz5ZYWdodXQ8L3N0cmluZz4NCisJCTwvdGVzdD4NCisJCTxlZGl0IG5hbWU9ImZhbWlseSIgbW9kZT0iYXNzaWduIiBiaW5kaW5nPSJzYW1lIj4NCisJCQk8c3RyaW5nPllhZ2hvb3Q8L3N0cmluZz4NCisJCTwvZWRpdD4NCisJPC9tYXRjaD4NCisJPG1hdGNoPg0KKwkJPHRlc3QgbmFtZT0iZmFtaWx5Ij4NCisJCQk8c3RyaW5nPlRyYWZmaWM8L3N0cmluZz4NCisJCTwvdGVzdD4NCisJCTxlZGl0IG5hbWU9ImZhbWlseSIgbW9kZT0iYXNzaWduIiBiaW5kaW5nPSJzYW1lIj4NCisJCQk8c3RyaW5nPlRlcmFmaWs8L3N0cmluZz4NCisJCTwvZWRpdD4NCisJPC9tYXRjaD4NCisJPG1hdGNoPg0KKwkJPHRlc3QgbmFtZT0iZmFtaWx5Ij4NCisJCQk8c3RyaW5nPkZlcmRvd3NpPC9zdHJpbmc+DQorCQk8L3Rlc3Q+DQorCQk8ZWRpdCBuYW1lPSJmYW1pbHkiIG1vZGU9ImFzc2lnbiIgYmluZGluZz0ic2FtZSI+DQorCQkJPHN0cmluZz5GZXJkb3NpPC9zdHJpbmc+DQorCQk8L2VkaXQ+DQorCTwvbWF0Y2g+DQorCTxtYXRjaD4NCisJCTx0ZXN0IG5hbWU9ImZhbWlseSI+DQorCQkJPHN0cmluZz5GYW50ZXp5PC9zdHJpbmc+DQorCQk8L3Rlc3Q+DQorCQk8ZWRpdCBuYW1lPSJmYW1pbHkiIG1vZGU9ImFzc2lnbiIgYmluZGluZz0ic2FtZSI+DQorCQkJPHN0cmluZz5GYW50ZXppPC9zdHJpbmc+DQorCQk8L2VkaXQ+DQorCTwvbWF0Y2g+DQorDQorDQorPCEtLSBDbGFzc2lmeSBmb250cy4gLS0+DQorDQorCTwhLS0gUGVyc2lhbl90aXRsZSBjbGFzcyAtLT4NCisJPG1hdGNoPg0KKwkJPHRlc3QgbmFtZT0iZmFtaWx5Ij4NCisJCQk8c3RyaW5nPkphZGlkPC9zdHJpbmc+DQorCQk8L3Rlc3Q+DQorCQk8ZWRpdCBuYW1lPSJmYW1pbHkiIG1vZGU9ImFwcGVuZCIgYmluZGluZz0ic2FtZSI+DQorCQkJPHN0cmluZz5QZXJzaWFuX3RpdGxlPC9zdHJpbmc+DQorCQk8L2VkaXQ+DQorCTwvbWF0Y2g+DQorCTxtYXRjaD4NCisJCTx0ZXN0IG5hbWU9ImZhbWlseSI+DQorCQkJPHN0cmluZz5UaXRyPC9zdHJpbmc+DQorCQk8L3Rlc3Q+DQorCQk8ZWRpdCBuYW1lPSJmYW1pbHkiIG1vZGU9ImFwcGVuZCIgYmluZGluZz0ic2FtZSI+DQorCQkJPHN0cmluZz5QZXJzaWFuX3RpdGxlPC9zdHJpbmc+DQorCQk8L2VkaXQ+DQorCTwvbWF0Y2g+DQorDQorCTwhLS0gUGVyc2lhbl9mYW50YXN5IGNsYXNzIC0tPg0KKwk8bWF0Y2g+DQorCQk8dGVzdCBuYW1lPSJmYW1pbHkiPg0KKwkJCTxzdHJpbmc+S2FtcmFuPC9zdHJpbmc+DQorCQk8L3Rlc3Q+DQorCQk8ZWRpdCBuYW1lPSJmYW1pbHkiIG1vZGU9ImFwcGVuZCIgYmluZGluZz0ic2FtZSI+DQorCQkJPHN0cmluZz5Ib21hPC9zdHJpbmc+DQorCQk8L2VkaXQ+DQorCQk8ZWRpdCBuYW1lPSJmYW1pbHkiIG1vZGU9ImFwcGVuZCIgYmluZGluZz0ic2FtZSI+DQorCQkJPHN0cmluZz5QZXJzaWFuX2ZhbnRhc3k8L3N0cmluZz4NCisJCTwvZWRpdD4NCisJPC9tYXRjaD4NCisJPG1hdGNoPg0KKwkJPHRlc3QgbmFtZT0iZmFtaWx5Ij4NCisJCQk8c3RyaW5nPkhvbWE8L3N0cmluZz4NCisJCTwvdGVzdD4NCisJCTxlZGl0IG5hbWU9ImZhbWlseSIgbW9kZT0iYXBwZW5kIiBiaW5kaW5nPSJzYW1lIj4NCisJCQk8c3RyaW5nPkthbXJhbjwvc3RyaW5nPg0KKwkJPC9lZGl0Pg0KKwkJPGVkaXQgbmFtZT0iZmFtaWx5IiBtb2RlPSJhcHBlbmQiIGJpbmRpbmc9InNhbWUiPg0KKwkJCTxzdHJpbmc+UGVyc2lhbl9mYW50YXN5PC9zdHJpbmc+DQorCQk8L2VkaXQ+DQorCTwvbWF0Y2g+DQorCTxtYXRjaD4NCisJCTx0ZXN0IG5hbWU9ImZhbWlseSI+DQorCQkJPHN0cmluZz5GYW50ZXppPC9zdHJpbmc+DQorCQk8L3Rlc3Q+DQorCQk8ZWRpdCBuYW1lPSJmYW1pbHkiIG1vZGU9ImFwcGVuZCIgYmluZGluZz0ic2FtZSI+DQorCQkJPHN0cmluZz5QZXJzaWFuX2ZhbnRhc3k8L3N0cmluZz4NCisJCTwvZWRpdD4NCisJPC9tYXRjaD4NCisJPG1hdGNoPg0KKwkJPHRlc3QgbmFtZT0iZmFtaWx5Ij4NCisJCQk8c3RyaW5nPlRhYmFzc29tPC9zdHJpbmc+DQorCQk8L3Rlc3Q+DQorCQk8ZWRpdCBuYW1lPSJmYW1pbHkiIG1vZGU9ImFwcGVuZCIgYmluZGluZz0ic2FtZSI+DQorCQkJPHN0cmluZz5QZXJzaWFuX2ZhbnRhc3k8L3N0cmluZz4NCisJCTwvZWRpdD4NCisJPC9tYXRjaD4NCisNCisJPCEtLSBQZXJzaWFuX3NxdWFyZSBjbGFzcyAtLT4NCisJPG1hdGNoPg0KKwkJPHRlc3QgbmFtZT0iZmFtaWx5Ij4NCisJCQk8c3RyaW5nPkFyc2hpYTwvc3RyaW5nPg0KKwkJPC90ZXN0Pg0KKwkJPGVkaXQgbmFtZT0iZmFtaWx5IiBtb2RlPSJhcHBlbmQiIGJpbmRpbmc9InNhbWUiPg0KKwkJCTxzdHJpbmc+UGVyc2lhbl9zcXVhcmU8L3N0cmluZz4NCisJCTwvZWRpdD4NCisJPC9tYXRjaD4NCisJPG1hdGNoPg0KKwkJPHRlc3QgbmFtZT0iZmFtaWx5Ij4NCisJCQk8c3RyaW5nPk5hc2ltPC9zdHJpbmc+DQorCQk8L3Rlc3Q+DQorCQk8ZWRpdCBuYW1lPSJmYW1pbHkiIG1vZGU9ImFwcGVuZCIgYmluZGluZz0ic2FtZSI+DQorCQkJPHN0cmluZz5QZXJzaWFuX3NxdWFyZTwvc3RyaW5nPg0KKwkJPC9lZGl0Pg0KKwk8L21hdGNoPg0KKwk8bWF0Y2g+DQorCQk8dGVzdCBuYW1lPSJmYW1pbHkiPg0KKwkJCTxzdHJpbmc+RWxoYW08L3N0cmluZz4NCisJCTwvdGVzdD4NCisJCTxlZGl0IG5hbWU9ImZhbWlseSIgbW9kZT0iYXBwZW5kIiBiaW5kaW5nPSJzYW1lIj4NCisJCQk8c3RyaW5nPkZhcm5hejwvc3RyaW5nPg0KKwkJPC9lZGl0Pg0KKwkJPGVkaXQgbmFtZT0iZmFtaWx5IiBtb2RlPSJhcHBlbmQiIGJpbmRpbmc9InNhbWUiPg0KKwkJCTxzdHJpbmc+UGVyc2lhbl9zcXVhcmU8L3N0cmluZz4NCisJCTwvZWRpdD4NCisJPC9tYXRjaD4NCisJPG1hdGNoPg0KKwkJPHRlc3QgbmFtZT0iZmFtaWx5Ij4NCisJCQk8c3RyaW5nPkZhcm5hejwvc3RyaW5nPg0KKwkJPC90ZXN0Pg0KKwkJPGVkaXQgbmFtZT0iZmFtaWx5IiBtb2RlPSJhcHBlbmQiIGJpbmRpbmc9InNhbWUiPg0KKwkJCTxzdHJpbmc+RWxoYW08L3N0cmluZz4NCisJCTwvZWRpdD4NCisJCTxlZGl0IG5hbWU9ImZhbWlseSIgbW9kZT0iYXBwZW5kIiBiaW5kaW5nPSJzYW1lIj4NCisJCQk8c3RyaW5nPlBlcnNpYW5fc3F1YXJlPC9zdHJpbmc+DQorCQk8L2VkaXQ+DQorCTwvbWF0Y2g+DQorCTxtYXRjaD4NCisJCTx0ZXN0IG5hbWU9ImZhbWlseSI+DQorCQkJPHN0cmluZz5TaW5hPC9zdHJpbmc+DQorCQk8L3Rlc3Q+DQorCQk8ZWRpdCBuYW1lPSJmYW1pbHkiIG1vZGU9ImFwcGVuZCIgYmluZGluZz0ic2FtZSI+DQorCQkJPHN0cmluZz5QZXJzaWFuX3NxdWFyZTwvc3RyaW5nPg0KKwkJPC9lZGl0Pg0KKwk8L21hdGNoPg0KKw0KKzwhLS0gRm9udCBvcmRlcmluZyBwZXIgY2xhc3MgLS0+DQorDQorCTwhLS0gUGVyc2lhbl90aXRsZSBjbGFzcyAtLT4NCisJPG1hdGNoPg0KKwkJPHRlc3QgbmFtZT0iZmFtaWx5Ij4NCisJCQk8c3RyaW5nPlBlcnNpYW5fdGl0bGU8L3N0cmluZz4NCisJCTwvdGVzdD4NCisJCTxlZGl0IG5hbWU9ImZhbWlseSIgbW9kZT0iYXBwZW5kIiBiaW5kaW5nPSJzYW1lIj4NCisJCQk8c3RyaW5nPlBlcnNpYW5fc2VyaWY8L3N0cmluZz4NCisJCTwvZWRpdD4NCisJCTxlZGl0IG5hbWU9ImZhbWlseSIgbW9kZT0iYXBwZW5kIiBiaW5kaW5nPSJzYW1lIj4NCisJCQk8c3RyaW5nPkphZGlkPC9zdHJpbmc+DQorCQk8L2VkaXQ+DQorCQk8ZWRpdCBuYW1lPSJmYW1pbHkiIG1vZGU9ImFwcGVuZCIgYmluZGluZz0ic2FtZSI+DQorCQkJPHN0cmluZz5UaXRyPC9zdHJpbmc+DQorCQk8L2VkaXQ+DQorCTwvbWF0Y2g+DQorDQorCTwhLS0gUGVyc2lhbl9mYW50YXN5IGNsYXNzIC0tPg0KKwk8bWF0Y2g+DQorCQk8dGVzdCBuYW1lPSJmYW1pbHkiPg0KKwkJCTxzdHJpbmc+UGVyc2lhbl9mYW50YXN5PC9zdHJpbmc+DQorCQk8L3Rlc3Q+DQorCQk8ZWRpdCBuYW1lPSJmYW1pbHkiIG1vZGU9ImFwcGVuZCIgYmluZGluZz0ic2FtZSI+DQorCQkJPHN0cmluZz5QZXJzaWFuX3NxdWFyZTwvc3RyaW5nPg0KKwkJPC9lZGl0Pg0KKwkJPGVkaXQgbmFtZT0iZmFtaWx5IiBtb2RlPSJhcHBlbmQiIGJpbmRpbmc9InNhbWUiPg0KKwkJCTxzdHJpbmc+VGFiYXNzb208L3N0cmluZz4NCisJCTwvZWRpdD4NCisJCTxlZGl0IG5hbWU9ImZhbWlseSIgbW9kZT0iYXBwZW5kIiBiaW5kaW5nPSJzYW1lIj4NCisJCQk8c3RyaW5nPkZhbnRlemk8L3N0cmluZz4NCisJCTwvZWRpdD4NCisJCTxlZGl0IG5hbWU9ImZhbWlseSIgbW9kZT0iYXBwZW5kIiBiaW5kaW5nPSJzYW1lIj4NCisJCQk8c3RyaW5nPkthbXJhbjwvc3RyaW5nPg0KKwkJPC9lZGl0Pg0KKwkJPGVkaXQgbmFtZT0iZmFtaWx5IiBtb2RlPSJhcHBlbmQiIGJpbmRpbmc9InNhbWUiPg0KKwkJCTxzdHJpbmc+SG9tYTwvc3RyaW5nPg0KKwkJPC9lZGl0Pg0KKwk8L21hdGNoPg0KKw0KKwk8IS0tIFBlcnNpYW5fc3F1YXJlIGNsYXNzIC0tPg0KKwk8bWF0Y2g+DQorCQk8dGVzdCBuYW1lPSJmYW1pbHkiPg0KKwkJCTxzdHJpbmc+UGVyc2lhbl9zcXVhcmU8L3N0cmluZz4NCisJCTwvdGVzdD4NCisJCTxlZGl0IG5hbWU9ImZhbWlseSIgbW9kZT0iYXBwZW5kIiBiaW5kaW5nPSJzYW1lIj4NCisJCQk8c3RyaW5nPlBlcnNpYW5fc2VyaWY8L3N0cmluZz4NCisJCTwvZWRpdD4NCisJCTxlZGl0IG5hbWU9ImZhbWlseSIgbW9kZT0iYXBwZW5kIiBiaW5kaW5nPSJzYW1lIj4NCisJCQk8c3RyaW5nPlNpbmE8L3N0cmluZz4NCisJCTwvZWRpdD4NCisJCTxlZGl0IG5hbWU9ImZhbWlseSIgbW9kZT0iYXBwZW5kIiBiaW5kaW5nPSJzYW1lIj4NCisJCQk8c3RyaW5nPk5hc2ltPC9zdHJpbmc+DQorCQk8L2VkaXQ+DQorCQk8ZWRpdCBuYW1lPSJmYW1pbHkiIG1vZGU9ImFwcGVuZCIgYmluZGluZz0ic2FtZSI+DQorCQkJPHN0cmluZz5GYXJuYXo8L3N0cmluZz4NCisJCTwvZWRpdD4NCisJCTxlZGl0IG5hbWU9ImZhbWlseSIgbW9kZT0iYXBwZW5kIiBiaW5kaW5nPSJzYW1lIj4NCisJCQk8c3RyaW5nPkVsaGFtPC9zdHJpbmc+DQorCQk8L2VkaXQ+DQorCQk8ZWRpdCBuYW1lPSJmYW1pbHkiIG1vZGU9ImFwcGVuZCIgYmluZGluZz0ic2FtZSI+DQorCQkJPHN0cmluZz5BcnNoaWE8L3N0cmluZz4NCisJCTwvZWRpdD4NCisJPC9tYXRjaD4NCisNCis8IS0tIFJlZ2lzdGVyIHRoZSBmb250cyB0aGF0IHdlIGFjdHVhbGx5IGRvIGhhdmUgLS0+DQorDQorCTxtYXRjaCB0YXJnZXQ9ImZvbnQiPg0KKwkJPHRlc3QgbmFtZT0iZmFtaWx5Ij4NCisJCQk8c3RyaW5nPkVsaGFtPC9zdHJpbmc+DQorCQk8L3Rlc3Q+DQorCQk8ZWRpdCBuYW1lPSJmb3VuZHJ5Ij4NCisJCQk8c3RyaW5nPmZhcnNpd2ViPC9zdHJpbmc+DQorCQk8L2VkaXQ+DQorCTwvbWF0Y2g+DQorDQorCTxtYXRjaCB0YXJnZXQ9ImZvbnQiPg0KKwkJPHRlc3QgbmFtZT0iZmFtaWx5Ij4NCisJCQk8c3RyaW5nPkhvbWE8L3N0cmluZz4NCisJCTwvdGVzdD4NCisJCTxlZGl0IG5hbWU9ImZvdW5kcnkiPg0KKwkJCTxzdHJpbmc+ZmFyc2l3ZWI8L3N0cmluZz4NCisJCTwvZWRpdD4NCisJPC9tYXRjaD4NCisNCisJPG1hdGNoIHRhcmdldD0iZm9udCI+DQorCQk8dGVzdCBuYW1lPSJmYW1pbHkiPg0KKwkJCTxzdHJpbmc+S29vZGFrPC9zdHJpbmc+DQorCQk8L3Rlc3Q+DQorCQk8ZWRpdCBuYW1lPSJmb3VuZHJ5Ij4NCisJCQk8c3RyaW5nPmZhcnNpd2ViPC9zdHJpbmc+DQorCQk8L2VkaXQ+DQorCTwvbWF0Y2g+DQorDQorCTxtYXRjaCB0YXJnZXQ9ImZvbnQiPg0KKwkJPHRlc3QgbmFtZT0iZmFtaWx5Ij4NCisJCQk8c3RyaW5nPk5hemxpPC9zdHJpbmc+DQorCQk8L3Rlc3Q+DQorCQk8ZWRpdCBuYW1lPSJmb3VuZHJ5Ij4NCisJCQk8c3RyaW5nPmZhcnNpd2ViPC9zdHJpbmc+DQorCQk8L2VkaXQ+DQorCTwvbWF0Y2g+DQorDQorCTxtYXRjaCB0YXJnZXQ9ImZvbnQiPg0KKwkJPHRlc3QgbmFtZT0iZmFtaWx5Ij4NCisJCQk8c3RyaW5nPlJveWE8L3N0cmluZz4NCisJCTwvdGVzdD4NCisJCTxlZGl0IG5hbWU9ImZvdW5kcnkiPg0KKwkJCTxzdHJpbmc+ZmFyc2l3ZWI8L3N0cmluZz4NCisJCTwvZWRpdD4NCisJPC9tYXRjaD4NCisNCisJPG1hdGNoIHRhcmdldD0iZm9udCI+DQorCQk8dGVzdCBuYW1lPSJmYW1pbHkiPg0KKwkJCTxzdHJpbmc+VGVyYWZpazwvc3RyaW5nPg0KKwkJPC90ZXN0Pg0KKwkJPGVkaXQgbmFtZT0iZm91bmRyeSI+DQorCQkJPHN0cmluZz5mYXJzaXdlYjwvc3RyaW5nPg0KKwkJPC9lZGl0Pg0KKwk8L21hdGNoPg0KKw0KKwk8bWF0Y2ggdGFyZ2V0PSJmb250Ij4NCisJCTx0ZXN0IG5hbWU9ImZhbWlseSI+DQorCQkJPHN0cmluZz5UaXRyPC9zdHJpbmc+DQorCQk8L3Rlc3Q+DQorCQk8ZWRpdCBuYW1lPSJmb3VuZHJ5Ij4NCisJCQk8c3RyaW5nPmZhcnNpd2ViPC9zdHJpbmc+DQorCQk8L2VkaXQ+DQorCTwvbWF0Y2g+DQorDQorDQorPCEtLSBPdXIgZm9udHMgc2hvdWxkIG9ibGlxdWUgdG8gdGhlIG90aGVyIHNpZGUgKFRVUk5FRC1PRkYpIC0tPg0KKw0KKwk8bWF0Y2ggdGFyZ2V0PSJmb250Ij4NCisJCTx0ZXN0IG5hbWU9ImZvdW5kcnkiPg0KKwkJCTwhLS1zdHJpbmc+ZmFyc2l3ZWI8L3N0cmluZy0tPg0KKwkJCTxzdHJpbmc+VFVSTkVELU9GRjwvc3RyaW5nPg0KKwkJPC90ZXN0Pg0KKwkJPHRlc3QgbmFtZT0iZm91bmRyeSI+DQorCQkJPHN0cmluZz5mYXJzaXdlYjwvc3RyaW5nPg0KKwkJPC90ZXN0Pg0KKwkJPCEtLSBjaGVjayB0byBzZWUgaWYgdGhlIGZvbnQgaXMgcm9tYW4gLS0+DQorCQk8dGVzdCBuYW1lPSJzbGFudCI+DQorCQkJPGNvbnN0PnJvbWFuPC9jb25zdD4NCisJCTwvdGVzdD4NCisJCTwhLS0gY2hlY2sgdG8gc2VlIGlmIHRoZSBwYXR0ZXJuIHJlcXVlc3RlZCBub24tcm9tYW4gLS0+DQorCQk8dGVzdCB0YXJnZXQ9InBhdHRlcm4iIG5hbWU9InNsYW50IiBjb21wYXJlPSJub3RfZXEiPg0KKwkJCTxjb25zdD5yb21hbjwvY29uc3Q+DQorCQk8L3Rlc3Q+DQorCQk8IS0tIG11bHRpcGx5IHRoZSBtYXRyaXggdG8gc2xhbnQgdGhlIGZvbnQgLS0+DQorCQk8ZWRpdCBuYW1lPSJtYXRyaXgiIG1vZGU9ImFzc2lnbiI+DQorCQkJPHRpbWVzPg0KKwkJCQk8bmFtZT5tYXRyaXg8L25hbWU+DQorCQkJCTxtYXRyaXg+PGRvdWJsZT4xPC9kb3VibGU+PGRvdWJsZT4tMC4yPC9kb3VibGU+DQorCQkJCQk8ZG91YmxlPjA8L2RvdWJsZT48ZG91YmxlPjE8L2RvdWJsZT4NCisJCQkJPC9tYXRyaXg+DQorCQkJPC90aW1lcz4NCisJCTwvZWRpdD4NCisJCTwhLS0gcHJldGVuZCB0aGUgZm9udCBpcyBvYmxpcXVlIG5vdyAtLT4NCisJCTxlZGl0IG5hbWU9InNsYW50IiBtb2RlPSJhc3NpZ24iPg0KKwkJCTxjb25zdD5vYmxpcXVlPC9jb25zdD4NCisJCTwvZWRpdD4NCisJPC9tYXRjaD4NCisNCisNCis8IS0tDQorICBXZSBjYW4ndCBoaW50IG91ciBmb250cyB3ZWxsLCBzbyB0dXJuIG9mZiBoaW50aW5nLg0KKyAgTW9yZW92ZXIsIHRoZSBiaXRtYXBzIHdlIGhhdmUgZGVzaWduZWQgKHdlbGwsIHRoZXkNCisgIGhhdmUgZGVzaWduZWQpLCBzdWNrLCBzbyBkaXNhYmxlIHRoZW0gdG9vLg0KKyAgLS0+DQorDQorCTxtYXRjaCB0YXJnZXQ9ImZvbnQiPg0KKwkJPHRlc3QgbmFtZT0iZm91bmRyeSI+DQorCQkJPHN0cmluZz5mYXJzaXdlYjwvc3RyaW5nPg0KKwkJPC90ZXN0Pg0KKwkJPGVkaXQgbmFtZT0iYXV0b2hpbnQiPg0KKwkJCTxib29sPmZhbHNlPC9ib29sPg0KKwkJPC9lZGl0Pg0KKwkJPGVkaXQgbmFtZT0iaGludGluZyI+DQorCQkJPGJvb2w+ZmFsc2U8L2Jvb2w+DQorCQk8L2VkaXQ+DQorIAkJPGVkaXQgbmFtZT0iZW1iZWRkZWRiaXRtYXAiPg0KKyAJCQk8Ym9vbD5mYWxzZTwvYm9vbD4NCisgCQk8L2VkaXQ+DQorCTwvbWF0Y2g+DQorDQorDQorPCEtLSBBbGlhcyBvdXIgZm9udHMgdG8gY29tbW9uIGZhbWlsaWVzIC0tPg0KKw0KKwk8IS0tIFBlcnNpYW4gc2VyaWYgZm9udHMgLS0+DQorCTxhbGlhcz4NCisJCTxmYW1pbHk+c2VyaWY8L2ZhbWlseT4NCisJCTxhY2NlcHQ+DQorCQkJPGZhbWlseT5OYXpsaTwvZmFtaWx5Pg0KKwkJCTxmYW1pbHk+TG90b29zPC9mYW1pbHk+DQorCQkJPGZhbWlseT5NaXRyYTwvZmFtaWx5Pg0KKwkJCTxmYW1pbHk+RmVyZG9zaTwvZmFtaWx5Pg0KKwkJCTxmYW1pbHk+QmFkcjwvZmFtaWx5Pg0KKwkJCTxmYW1pbHk+WmFyPC9mYW1pbHk+DQorCQk8L2FjY2VwdD4NCisJPC9hbGlhcz4NCisNCisJPCEtLSBQZXJzaWFuIHNhbnMtc2VyaWYgZm9udHMgLS0+DQorCTxhbGlhcz4NCisJCTxmYW1pbHk+c2Fucy1zZXJpZjwvZmFtaWx5Pg0KKwkJPGFjY2VwdD4NCisJCQk8ZmFtaWx5PlJveWE8L2ZhbWlseT4NCisJCQk8ZmFtaWx5Pktvb2RhazwvZmFtaWx5Pg0KKwkJCTxmYW1pbHk+VGVyYWZpazwvZmFtaWx5Pg0KKwkJPC9hY2NlcHQ+DQorCTwvYWxpYXM+DQorDQorCTwhLS0gUGVyc2lhbiBtb25vc3BhY2UgZm9udHMgLS0+DQorCTxhbGlhcz4NCisJCTxmYW1pbHk+bW9ub3NwYWNlPC9mYW1pbHk+DQorCQk8YWNjZXB0Pg0KKwkJCTwhLS0gTm90IHJlYWxseSBtb25vc3BhY2UgLS0+DQorCQkJPGZhbWlseT5UZXJhZmlrPC9mYW1pbHk+DQorCQk8L2FjY2VwdD4NCisJPC9hbGlhcz4NCisNCisNCis8IS0tIFVzZSBUaXRyIGluIHRpdGxlcyAtLT4NCisNCisJPCEtLSBCb3RoIHNlcmlmLi4uIC0tPg0KKwk8bWF0Y2g+DQorCQk8dGVzdCBuYW1lPSJmYW1pbHkiPg0KKwkJCTxzdHJpbmc+c2VyaWY8L3N0cmluZz4NCisJCTwvdGVzdD4NCisJCTx0ZXN0IG5hbWU9IndlaWdodCIgY29tcGFyZT0ibW9yZV9lcSI+DQorCQkJPGludD4yMDA8L2ludD4NCisJCTwvdGVzdD4NCisJCTx0ZXN0IG5hbWU9InNpemUiIGNvbXBhcmU9Im1vcmVfZXEiPg0KKwkJCTxkb3VibGU+MjQ8L2RvdWJsZT4NCisJCTwvdGVzdD4NCisJCTxlZGl0IG5hbWU9ImZhbWlseSIgbW9kZT0icHJlcGVuZCI+DQorCQkJPHN0cmluZz5UaXRyPC9zdHJpbmc+DQorCQk8L2VkaXQ+DQorCTwvbWF0Y2g+DQorDQorCTwhLS0gYW5kIHNhbnMtc2VyaWYuIC0tPg0KKwk8bWF0Y2g+DQorCQk8dGVzdCBuYW1lPSJmYW1pbHkiPg0KKwkJCTxzdHJpbmc+c2Fucy1zZXJpZjwvc3RyaW5nPg0KKwkJPC90ZXN0Pg0KKwkJPHRlc3QgbmFtZT0id2VpZ2h0IiBjb21wYXJlPSJtb3JlX2VxIj4NCisJCQk8aW50PjIwMDwvaW50Pg0KKwkJPC90ZXN0Pg0KKwkJPHRlc3QgbmFtZT0ic2l6ZSIgY29tcGFyZT0ibW9yZV9lcSI+DQorCQkJPGRvdWJsZT4yNDwvZG91YmxlPg0KKwkJPC90ZXN0Pg0KKwkJPGVkaXQgbmFtZT0iZmFtaWx5IiBtb2RlPSJwcmVwZW5kIj4NCisJCQk8c3RyaW5nPlRpdHI8L3N0cmluZz4NCisJCTwvZWRpdD4NCisJPC9tYXRjaD4NCisNCisJPCEtLSBhbmQgbW9yZS4gLS0+DQorCTxtYXRjaD4NCisJCTx0ZXN0IG5hbWU9ImZhbWlseSI+DQorCQkJPHN0cmluZz5QZXJzaWFuX3NhbnNzZXJpZl9kZWZhdWx0PC9zdHJpbmc+DQorCQk8L3Rlc3Q+DQorCQk8dGVzdCBuYW1lPSJ3ZWlnaHQiIGNvbXBhcmU9Im1vcmVfZXEiPg0KKwkJCTxpbnQ+MjAwPC9pbnQ+DQorCQk8L3Rlc3Q+DQorCQk8dGVzdCBuYW1lPSJzaXplIiBjb21wYXJlPSJtb3JlX2VxIj4NCisJCQk8ZG91YmxlPjI0PC9kb3VibGU+DQorCQk8L3Rlc3Q+DQorCQk8ZWRpdCBuYW1lPSJmYW1pbHkiIG1vZGU9InByZXBlbmQiIGJpbmRpbmc9InNhbWUiPg0KKwkJCTxzdHJpbmc+VGl0cjwvc3RyaW5nPg0KKwkJPC9lZGl0Pg0KKwk8L21hdGNoPg0KKw0KKw0KKzwhLS0gRGVmYXVsdCBzdWJzdGl0dXRlZCBmb3IgZGVwcmVjYXRlZCBzYW5zLXNlcmlmIGZvbnRzIC0tPg0KKw0KKwk8bWF0Y2g+DQorCQk8dGVzdCBuYW1lPSJmYW1pbHkiPg0KKwkJCTxzdHJpbmc+UGVyc2lhbl9zYW5zc2VyaWZfZGVmYXVsdDwvc3RyaW5nPg0KKwkJPC90ZXN0Pg0KKwkJPGVkaXQgbmFtZT0iZmFtaWx5IiBtb2RlPSJhc3NpZ24iIGJpbmRpbmc9InNhbWUiPg0KKwkJCTxzdHJpbmc+Um95YTwvc3RyaW5nPg0KKwkJPC9lZGl0Pg0KKwk8L21hdGNoPg0KKw0KKzwvZm9udGNvbmZpZz4NCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS9oZWxwZXJzL0dyYXBodml6Mi4yNi4zL2V0Yy9mb250cy9jb25mLmF2YWlsLzY1LW5vbmxhdGluLmNvbmYgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS9oZWxwZXJzL0dyYXBodml6Mi4yNi4zL2V0Yy9mb250cy9jb25mLmF2YWlsLzY1LW5vbmxhdGluLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQ3ZWFhMgotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL2hlbHBlcnMvR3JhcGh2aXoyLjI2LjMvZXRjL2ZvbnRzL2NvbmYuYXZhaWwvNjUtbm9ubGF0aW4uY29uZgpAQCAtMCwwICsxLDM4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiPz4NCis8IURPQ1RZUEUgZm9udGNvbmZpZyBTWVNURU0gImZvbnRzLmR0ZCI+DQorPGZvbnRjb25maWc+DQorCTxhbGlhcz4NCisJCTxmYW1pbHk+c2VyaWY8L2ZhbWlseT4NCisJCTxwcmVmZXI+DQorCQkJPGZhbWlseT5GcmFuayBSdWVobDwvZmFtaWx5Pg0KKwkJCTxmYW1pbHk+TWdPcGVuIENhbm9uaWNhPC9mYW1pbHk+DQorCQkJPGZhbWlseT5Lb2NoaSBNaW5jaG88L2ZhbWlseT4NCisJCQk8ZmFtaWx5PkFSIFBMIFN1bmd0aUwgR0I8L2ZhbWlseT4NCisJCQk8ZmFtaWx5PkFSIFBMIE1pbmd0aTJMIEJpZzU8L2ZhbWlseT4NCisJCQk8ZmFtaWx5Pu+8re+8syDmmI7mnJ08L2ZhbWlseT4NCisJCQk8ZmFtaWx5PkJhZWttdWsgQmF0YW5nPC9mYW1pbHk+DQorCQk8L3ByZWZlcj4NCisJPC9hbGlhcz4NCisJPGFsaWFzPg0KKwkJPGZhbWlseT5zYW5zLXNlcmlmPC9mYW1pbHk+DQorCQk8cHJlZmVyPg0KKwkJCTxmYW1pbHk+TmFjaGxpZWxpPC9mYW1pbHk+DQorCQkJPGZhbWlseT5NZ09wZW4gTW9kYXRhPC9mYW1pbHk+DQorCQkJPGZhbWlseT5Lb2NoaSBHb3RoaWM8L2ZhbWlseT4NCisJCQk8ZmFtaWx5PkFSIFBMIEthaXRpTSBHQjwvZmFtaWx5Pg0KKwkJCTxmYW1pbHk+QVIgUEwgS2FpdGlNIEJpZzU8L2ZhbWlseT4NCisJCQk8ZmFtaWx5Pu+8re+8syDjgrTjgrfjg4Pjgq88L2ZhbWlseT4NCisJCQk8ZmFtaWx5PkJhZWttdWsgRG90dW08L2ZhbWlseT4NCisJCQk8ZmFtaWx5PlNpbVN1bjwvZmFtaWx5Pg0KKwkJPC9wcmVmZXI+DQorCTwvYWxpYXM+DQorCTxhbGlhcz4NCisJCTxmYW1pbHk+bW9ub3NwYWNlPC9mYW1pbHk+DQorCQk8cHJlZmVyPg0KKwkJCTxmYW1pbHk+TWlyaWFtIE1vbm88L2ZhbWlseT4NCisJCQk8ZmFtaWx5PktvY2hpIEdvdGhpYzwvZmFtaWx5Pg0KKwkJCTxmYW1pbHk+QVIgUEwgS2FpdGlNIEdCPC9mYW1pbHk+DQorCQkJPGZhbWlseT5CYWVrbXVrIERvdHVtPC9mYW1pbHk+DQorCQk8L3ByZWZlcj4NCisJPC9hbGlhcz4NCis8L2ZvbnRjb25maWc+DQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvaGVscGVycy9HcmFwaHZpejIuMjYuMy9ldGMvZm9udHMvY29uZi5hdmFpbC82OS11bmlmb250LmNvbmYgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS9oZWxwZXJzL0dyYXBodml6Mi4yNi4zL2V0Yy9mb250cy9jb25mLmF2YWlsLzY5LXVuaWZvbnQuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YzVhOGQ4Ci0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvaGVscGVycy9HcmFwaHZpejIuMjYuMy9ldGMvZm9udHMvY29uZi5hdmFpbC82OS11bmlmb250LmNvbmYKQEAgLTAsMCArMSwyNCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+DQorPCFET0NUWVBFIGZvbnRjb25maWcgU1lTVEVNICJmb250cy5kdGQiPg0KKzxmb250Y29uZmlnPg0KKwk8YWxpYXM+DQorCQk8ZmFtaWx5PnNlcmlmPC9mYW1pbHk+DQorCQk8cHJlZmVyPg0KKwkJCTxmYW1pbHk+RnJlZVNlcmlmPC9mYW1pbHk+DQorCQkJPGZhbWlseT5Db2RlMjAwMDwvZmFtaWx5Pg0KKwkJPC9wcmVmZXI+DQorCTwvYWxpYXM+DQorCTxhbGlhcz4NCisJCTxmYW1pbHk+c2Fucy1zZXJpZjwvZmFtaWx5Pg0KKwkJPHByZWZlcj4NCisJCQk8ZmFtaWx5PkZyZWVTYW5zPC9mYW1pbHk+DQorCQkJPGZhbWlseT5BcmlhbCBVbmljb2RlIE1TPC9mYW1pbHk+DQorCQk8L3ByZWZlcj4NCisJPC9hbGlhcz4NCisJPGFsaWFzPg0KKwkJPGZhbWlseT5tb25vc3BhY2U8L2ZhbWlseT4NCisJCTxwcmVmZXI+DQorCQkJPGZhbWlseT5GcmVlTW9ubzwvZmFtaWx5Pg0KKwkJPC9wcmVmZXI+DQorCTwvYWxpYXM+DQorPC9mb250Y29uZmlnPg0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL2hlbHBlcnMvR3JhcGh2aXoyLjI2LjMvZXRjL2ZvbnRzL2NvbmYuYXZhaWwvNzAtbm8tYml0bWFwcy5jb25mIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvaGVscGVycy9HcmFwaHZpejIuMjYuMy9ldGMvZm9udHMvY29uZi5hdmFpbC83MC1uby1iaXRtYXBzLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDZjOTU4NAotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL2hlbHBlcnMvR3JhcGh2aXoyLjI2LjMvZXRjL2ZvbnRzL2NvbmYuYXZhaWwvNzAtbm8tYml0bWFwcy5jb25mCkBAIC0wLDAgKzEsMTMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/Pg0KKzwhRE9DVFlQRSBmb250Y29uZmlnIFNZU1RFTSAiZm9udHMuZHRkIj4NCis8IS0tIC9ldGMvZm9udHMvY29uZi5kL25vLWJpdG1hcHMuY29uZiAtLT4NCis8Zm9udGNvbmZpZz4NCis8IS0tIFJlamVjdCBiaXRtYXAgZm9udHMgLS0+DQorIDxzZWxlY3Rmb250Pg0KKyAgPHJlamVjdGZvbnQ+DQorICAgPHBhdHRlcm4+DQorICAgICA8cGF0ZWx0IG5hbWU9InNjYWxhYmxlIj48Ym9vbD5mYWxzZTwvYm9vbD48L3BhdGVsdD4NCisgICA8L3BhdHRlcm4+DQorICA8L3JlamVjdGZvbnQ+DQorIDwvc2VsZWN0Zm9udD4NCis8L2ZvbnRjb25maWc+DQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvaGVscGVycy9HcmFwaHZpejIuMjYuMy9ldGMvZm9udHMvY29uZi5hdmFpbC83MC15ZXMtYml0bWFwcy5jb25mIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvaGVscGVycy9HcmFwaHZpejIuMjYuMy9ldGMvZm9udHMvY29uZi5hdmFpbC83MC15ZXMtYml0bWFwcy5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViOTc5ZTgKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS9oZWxwZXJzL0dyYXBodml6Mi4yNi4zL2V0Yy9mb250cy9jb25mLmF2YWlsLzcwLXllcy1iaXRtYXBzLmNvbmYKQEAgLTAsMCArMSwxMyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+DQorPCFET0NUWVBFIGZvbnRjb25maWcgU1lTVEVNICJmb250cy5kdGQiPg0KKzwhLS0gY29uZi5kL3llcy1iaXRtYXBzLmNvbmYgLS0+DQorPGZvbnRjb25maWc+DQorPCEtLSBBY2NlcHQgYml0bWFwIGZvbnRzIC0tPg0KKyA8c2VsZWN0Zm9udD4NCisgIDxhY2NlcHRmb250Pg0KKyAgIDxwYXR0ZXJuPg0KKyAgICAgPHBhdGVsdCBuYW1lPSJzY2FsYWJsZSI+PGJvb2w+ZmFsc2U8L2Jvb2w+PC9wYXRlbHQ+DQorICAgPC9wYXR0ZXJuPg0KKyAgPC9hY2NlcHRmb250Pg0KKyA8L3NlbGVjdGZvbnQ+DQorPC9mb250Y29uZmlnPg0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL2hlbHBlcnMvR3JhcGh2aXoyLjI2LjMvZXRjL2ZvbnRzL2NvbmYuYXZhaWwvODAtZGVsaWNpb3VzLmNvbmYgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS9oZWxwZXJzL0dyYXBodml6Mi4yNi4zL2V0Yy9mb250cy9jb25mLmF2YWlsLzgwLWRlbGljaW91cy5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4MzgxZGQKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS9oZWxwZXJzL0dyYXBodml6Mi4yNi4zL2V0Yy9mb250cy9jb25mLmF2YWlsLzgwLWRlbGljaW91cy5jb25mCkBAIC0wLDAgKzEsMjAgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/Pg0KKzwhRE9DVFlQRSBmb250Y29uZmlnIFNZU1RFTSAiZm9udHMuZHRkIj4NCis8IS0tIC9ldGMvZm9udHMvY29uZi5kLzYwLWRlbGljaW91cy5jb25mIC0tPg0KKzxmb250Y29uZmlnPg0KKzwhLS0gRml4LXVwcyBmb3IgRGVsaWNpb3VzIGZhbWlseSAtLT4NCisNCis8IS0tIERlbGljaW91cyAnaGVhdnknIHZhcmlhbnQgc2F5cyBpdHMgTWVkaXVtIHdlaWdodCAtLT4NCis8bWF0Y2ggdGFyZ2V0PSJzY2FuIj4NCisJPHRlc3QgbmFtZT0iZmFtaWx5Ij4NCisJCTxzdHJpbmc+RGVsaWNpb3VzPC9zdHJpbmc+DQorCTwvdGVzdD4NCisJPHRlc3QgbmFtZT0ic3R5bGUiPg0KKwkJPHN0cmluZz5IZWF2eTwvc3RyaW5nPg0KKwk8L3Rlc3Q+DQorCTxlZGl0IG5hbWU9IndlaWdodCI+DQorCQk8Y29uc3Q+aGVhdnk8L2NvbnN0Pg0KKwk8L2VkaXQ+DQorPC9tYXRjaD4NCisNCis8L2ZvbnRjb25maWc+DQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvaGVscGVycy9HcmFwaHZpejIuMjYuMy9ldGMvZm9udHMvY29uZi5hdmFpbC85MC1zeW50aGV0aWMuY29uZiBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL2hlbHBlcnMvR3JhcGh2aXoyLjI2LjMvZXRjL2ZvbnRzL2NvbmYuYXZhaWwvOTAtc3ludGhldGljLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTU0MTNmOQotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL2hlbHBlcnMvR3JhcGh2aXoyLjI2LjMvZXRjL2ZvbnRzL2NvbmYuYXZhaWwvOTAtc3ludGhldGljLmNvbmYKQEAgLTAsMCArMSw2NCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+DQorPCFET0NUWVBFIGZvbnRjb25maWcgU1lTVEVNICJmb250cy5kdGQiPg0KKzxmb250Y29uZmlnPg0KKzwhLS0gDQorIEFydGlmaWNpYWwgb2JsaXF1ZSBmb3IgZm9udHMgd2l0aG91dCBhbiBpdGFsaWMgb3Igb2JsaXF1ZSB2ZXJzaW9uDQorIC0tPg0KKyANCisJPG1hdGNoIHRhcmdldD0iZm9udCI+DQorCQk8IS0tIGNoZWNrIHRvIHNlZSBpZiB0aGUgZm9udCBpcyByb21hbiAtLT4NCisJCTx0ZXN0IG5hbWU9InNsYW50Ij4NCisJCQk8Y29uc3Q+cm9tYW48L2NvbnN0Pg0KKwkJPC90ZXN0Pg0KKwkJPCEtLSBjaGVjayB0byBzZWUgaWYgdGhlIHBhdHRlcm4gcmVxdWVzdGVkIG5vbi1yb21hbiAtLT4NCisJCTx0ZXN0IHRhcmdldD0icGF0dGVybiIgbmFtZT0ic2xhbnQiIGNvbXBhcmU9Im5vdF9lcSI+DQorCQkJPGNvbnN0PnJvbWFuPC9jb25zdD4NCisJCTwvdGVzdD4NCisJCTwhLS0gbXVsdGlwbHkgdGhlIG1hdHJpeCB0byBzbGFudCB0aGUgZm9udCAtLT4NCisJCTxlZGl0IG5hbWU9Im1hdHJpeCIgbW9kZT0iYXNzaWduIj4NCisJCQk8dGltZXM+DQorCQkJCTxuYW1lPm1hdHJpeDwvbmFtZT4NCisJCQkJPG1hdHJpeD48ZG91YmxlPjE8L2RvdWJsZT48ZG91YmxlPjAuMjwvZG91YmxlPg0KKwkJCQkJPGRvdWJsZT4wPC9kb3VibGU+PGRvdWJsZT4xPC9kb3VibGU+DQorCQkJCTwvbWF0cml4Pg0KKwkJCTwvdGltZXM+DQorCQk8L2VkaXQ+DQorCQk8IS0tIHByZXRlbmQgdGhlIGZvbnQgaXMgb2JsaXF1ZSBub3cgLS0+DQorCQk8ZWRpdCBuYW1lPSJzbGFudCIgbW9kZT0iYXNzaWduIj4NCisJCQk8Y29uc3Q+b2JsaXF1ZTwvY29uc3Q+DQorCQk8L2VkaXQ+DQorICAgICAgICAgICAgICAgIDwhLS0gYW5kIGRpc2FibGUgZW1iZWRkZWQgYml0bWFwcyBmb3IgYXJ0aWZpY2lhbCBvYmxpcXVlIC0tPg0KKyAgICAgICAgICAgICAgICA8ZWRpdCBuYW1lPSJlbWJlZGRlZGJpdG1hcCIgbW9kZT0iYXNzaWduIj4NCisgICAgICAgICAgICAgICAgICAgICAgICA8Ym9vbD5mYWxzZTwvYm9vbD4NCisgICAgICAgICAgICAgICAgPC9lZGl0Pg0KKwk8L21hdGNoPg0KKw0KKzwhLS0NCisgU3ludGhldGljIGVtYm9sZGVuaW5nIGZvciBmb250cyB0aGF0IGRvIG5vdCBoYXZlIGJvbGQgZmFjZSBhdmFpbGFibGUNCisgLS0+DQorDQorCTxtYXRjaCB0YXJnZXQ9ImZvbnQiPg0KKwkJPCEtLSBjaGVjayB0byBzZWUgaWYgdGhlIGZvbnQgaXMganVzdCByZWd1bGFyIC0tPg0KKwkJPHRlc3QgbmFtZT0id2VpZ2h0IiBjb21wYXJlPSJsZXNzX2VxIj4NCisJCQk8Y29uc3Q+bWVkaXVtPC9jb25zdD4NCisJCTwvdGVzdD4NCisJCTwhLS0gY2hlY2sgdG8gc2VlIGlmIHRoZSBwYXR0ZXJuIHJlcXVlc3RzIGJvbGQgLS0+DQorCQk8dGVzdCB0YXJnZXQ9InBhdHRlcm4iIG5hbWU9IndlaWdodCIgY29tcGFyZT0ibW9yZSI+DQorCQkJPGNvbnN0Pm1lZGl1bTwvY29uc3Q+DQorCQk8L3Rlc3Q+DQorCQk8IS0tDQorCQkgIHNldCB0aGUgZW1ib2xkZW4gZmxhZw0KKwkJICBuZWVkZWQgZm9yIGFwcGxpY2F0aW9ucyB1c2luZyBjYWlybywgZS5nLiBndWNoYXJtYXAsIGdlZGl0LCAuLi4NCisJCS0tPg0KKwkJPGVkaXQgbmFtZT0iZW1ib2xkZW4iIG1vZGU9ImFzc2lnbiI+DQorCQkJPGJvb2w+dHJ1ZTwvYm9vbD4NCisJCTwvZWRpdD4NCisJCTwhLS0NCisJCSBzZXQgd2VpZ2h0IHRvIGJvbGQNCisJCSBuZWVkZWQgZm9yIGFwcGxpY2F0aW9ucyB1c2luZyBYZnQgZGlyZWN0bHksIGUuZy4gRmlyZWZveCwgLi4uDQorCQktLT4NCisJCTxlZGl0IG5hbWU9IndlaWdodCIgbW9kZT0iYXNzaWduIj4NCisJCQk8Y29uc3Q+Ym9sZDwvY29uc3Q+DQorCQk8L2VkaXQ+DQorCTwvbWF0Y2g+DQorPC9mb250Y29uZmlnPg0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL2hlbHBlcnMvR3JhcGh2aXoyLjI2LjMvZXRjL2ZvbnRzL2NvbmYuYXZhaWwvUkVBRE1FIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvaGVscGVycy9HcmFwaHZpejIuMjYuMy9ldGMvZm9udHMvY29uZi5hdmFpbC9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzYwNmRkNwotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL2hlbHBlcnMvR3JhcGh2aXoyLjI2LjMvZXRjL2ZvbnRzL2NvbmYuYXZhaWwvUkVBRE1FCkBAIC0wLDAgKzEsNDggQEAKK2NvbmYuZC9SRUFETUUNCisNCitFYWNoIGZpbGUgaW4gdGhpcyBkaXJlY3RvcnkgaXMgYSBmb250Y29uZmlnIGNvbmZpZ3VyYXRpb24gZmlsZS4gIEZvbnRjb25maWcNCitzY2FucyB0aGlzIGRpcmVjdG9yeSwgbG9hZGluZyBhbGwgZmlsZXMgb2YgdGhlIGZvcm0gWzAtOV1bMC05XSouIFRoZXNlIGZpbGVzDQorYXJlIG5vcm1hbGx5IGluc3RhbGxlZCBpbiAuLi9jb25mLmF2YWlsIGFuZCB0aGVuIHN5bWxpbmtlZCBoZXJlLCBhbGxvd2luZw0KK3RoZW0gdG8gYmUgZWFzaWx5IGluc3RhbGxlZCBhbmQgdGhlbiBlbmFibGVkL2Rpc2FibGVkIGJ5IGFkanVzdGluZyB0aGUNCitzeW1saW5rcy4NCisNCitUaGUgZmlsZXMgYXJlIGxvYWRlZCBpbiBudW1lcmljIG9yZGVyLCB0aGUgc3RydWN0dXJlIG9mIHRoZSBjb25maWd1cmF0aW9uDQoraGFzIGxlZCB0byB0aGUgZm9sbG93aW5nIGNvbnZlbnRpb25zIGluIHVzYWdlOg0KKw0KKyBGaWxlcyBiZWdpbmluZyB3aXRoOglDb250YWluOg0KKyANCisgMDAgdGhyb3VnaCAwOQkJRm9udCBkaXJlY3Rvcmllcw0KKyAxMCB0aHJvdWdoIDE5CQlzeXN0ZW0gcmVuZGVyaW5nIGRlZmF1bHRzIChBQSwgZXRjKQ0KKwkxMC1hdXRvaGludC5jb25mDQorCTEwLW5vLXN1Yi1waXhlbC5jb25mDQorIAkxMC1zdWItcGl4ZWwtYmdyLmNvbmYNCisgCTEwLXN1Yi1waXhlbC1yZ2IuY29uZg0KKyAJMTAtc3ViLXBpeGVsLXZiZ3IuY29uZg0KKyAJMTAtc3ViLXBpeGVsLXZyZ2IuY29uZg0KKwkxMC11bmhpbnRlZC5jb25mDQorIDIwIHRocm91Z2ggMjkJCWZvbnQgcmVuZGVyaW5nIG9wdGlvbnMNCisgCTIwLWZpeC1nbG9iYWxhZHZhbmNlLmNvbmYNCisJMjAtbG9oaXQtZ3VqYXJhdGkuY29uZg0KKwkyMC11bmhpbnQtc21hbGwtdmVyYS5jb25mDQorIDMwIHRocm91Z2ggMzkJCWZhbWlseSBzdWJzdGl0dXRpb24NCisgCTMwLXVydy1hbGlhc2VzLmNvbmYNCisJMzAtYW10LWFsaWFzZXMuY29uZg0KKyA0MCB0aHJvdWdoIDQ5CQlnZW5lcmljIGlkZW50aWZpY2F0aW9uLCBtYXAgZmFtaWx5LT5nZW5lcmljDQorIAk0MC1nZW5lcmljLWlkLmNvbmYNCisJNDktc2Fuc3NlcmlmLmNvbmYNCisgNTAgdGhyb3VnaCA1OQkJYWx0ZXJuYXRlIGNvbmZpZyBmaWxlIGxvYWRpbmcNCisgCTUwLXVzZXIuY29uZglMb2FkIH4vLmZvbnRzLmNvbmYNCisJNTEtbG9jYWwuY29uZglMb2FkIGxvY2FsLmNvbmYNCisgNjAgdGhyb3VnaCA2OQkJZ2VuZXJpYyBhbGlhc2VzDQorIAk2MC1sYXRpbi5jb25mDQorCTY1LWZvbnRzLXBlcnNpYW4uY29uZg0KKwk2NS1ub25sYXRpbi5jb25mDQorCTY5LXVuaWZvbnQuY29uZg0KKyA3MCB0aHJvdWdoIDc5CQlzZWxlY3QgZm9udCAoYWRqdXN0IHdoaWNoIGZvbnRzIGFyZSBhdmFpbGFibGUpDQorIAk3MC1uby1iaXRtYXBzLmNvbmYNCisJNzAteWVzLWJpdG1hcHMuY29uZg0KKyA4MCB0aHJvdWdoIDg5CQltYXRjaCB0YXJnZXQ9InNjYW4iIChtb2RpZnkgc2Nhbm5lZCBwYXR0ZXJucykNCisgCTgwLWRlbGljaW91cy5jb25mDQorIDkwIHRocm91Z2ggOTgJCWZvbnQgc3ludGhlc2lzDQorIAk5MC1zeW50aGV0aWMuY29uZg0KKyANCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS9oZWxwZXJzL0dyYXBodml6Mi4yNi4zL2V0Yy9mb250cy9jb25mLmQvMjAtZml4LWdsb2JhbGFkdmFuY2UuY29uZiBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL2hlbHBlcnMvR3JhcGh2aXoyLjI2LjMvZXRjL2ZvbnRzL2NvbmYuZC8yMC1maXgtZ2xvYmFsYWR2YW5jZS5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmYzI4MzYKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS9oZWxwZXJzL0dyYXBodml6Mi4yNi4zL2V0Yy9mb250cy9jb25mLmQvMjAtZml4LWdsb2JhbGFkdmFuY2UuY29uZgpAQCAtMCwwICsxLDI5IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiPz4NCis8IURPQ1RZUEUgZm9udGNvbmZpZyBTWVNURU0gImZvbnRzLmR0ZCI+DQorPCEtLSBjb25mLmQvc3ViLXBpeGVsLmNvbmYgLS0+DQorPGZvbnRjb25maWc+DQorPCEtLQ0KKyAgU29tZSBBc2lhbiBmb250cyBtaXNhZHZlcnRpc2UgdGhlbXNlbHZlcyBhcyBtb25vc3BhY2VkIHdoZW4NCisgIGluIGZhY3QgdGhleSBhcmUgZHVhbC1zcGFjZWQgKGhhbGYgYW5kIGZ1bGwpLiAgVGhpcyBtYWtlcw0KKyAgRnJlZVR5cGUgdmVyeSBjb25mdXNlZCBhcyBpdCBmb3JjZXMgYWxsIHdpZHRocyB0byBtYXRjaC4NCisgIFVuZG8gdGhpcyBtYWdpYyBieSBkaXNhYmxpbmcgdGhlIHdpZHRoIGZvcmNpbmcgY29kZSAtLT4NCisJPG1hdGNoIHRhcmdldD0iZm9udCI+DQorCQk8dGVzdCBuYW1lPSJmYW1pbHkiPjxzdHJpbmc+R3VsaW1DaGU8L3N0cmluZz48L3Rlc3Q+DQorCQk8ZWRpdCBuYW1lPSJnbG9iYWxhZHZhbmNlIj48Ym9vbD5mYWxzZTwvYm9vbD48L2VkaXQ+DQorCTwvbWF0Y2g+DQorDQorCTxtYXRjaCB0YXJnZXQ9ImZvbnQiPg0KKwkJPHRlc3QgbmFtZT0iZmFtaWx5Ij48c3RyaW5nPkRvdHVtQ2hlPC9zdHJpbmc+PC90ZXN0Pg0KKwkJPGVkaXQgbmFtZT0iZ2xvYmFsYWR2YW5jZSI+PGJvb2w+ZmFsc2U8L2Jvb2w+PC9lZGl0Pg0KKwk8L21hdGNoPg0KKw0KKwk8bWF0Y2ggdGFyZ2V0PSJmb250Ij4NCisJCTx0ZXN0IG5hbWU9ImZhbWlseSI+PHN0cmluZz5CYXRhbmdDaGU8L3N0cmluZz48L3Rlc3Q+DQorCQk8ZWRpdCBuYW1lPSJnbG9iYWxhZHZhbmNlIj48Ym9vbD5mYWxzZTwvYm9vbD48L2VkaXQ+DQorCTwvbWF0Y2g+DQorDQorCTxtYXRjaCB0YXJnZXQ9ImZvbnQiPg0KKwkJPHRlc3QgbmFtZT0iZmFtaWx5Ij48c3RyaW5nPkd1bmdzdWhDaGU8L3N0cmluZz48L3Rlc3Q+DQorCQk8ZWRpdCBuYW1lPSJnbG9iYWxhZHZhbmNlIj48Ym9vbD5mYWxzZTwvYm9vbD48L2VkaXQ+DQorCTwvbWF0Y2g+DQorPC9mb250Y29uZmlnPg0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL2hlbHBlcnMvR3JhcGh2aXoyLjI2LjMvZXRjL2ZvbnRzL2NvbmYuZC8yMC1sb2hpdC1ndWphcmF0aS5jb25mIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvaGVscGVycy9HcmFwaHZpejIuMjYuMy9ldGMvZm9udHMvY29uZi5kLzIwLWxvaGl0LWd1amFyYXRpLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2FmNTZkYwotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL2hlbHBlcnMvR3JhcGh2aXoyLjI2LjMvZXRjL2ZvbnRzL2NvbmYuZC8yMC1sb2hpdC1ndWphcmF0aS5jb25mCkBAIC0wLDAgKzEsMTEgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/Pg0KKzwhRE9DVFlQRSBmb250Y29uZmlnIFNZU1RFTSAiZm9udHMuZHRkIj4NCis8Zm9udGNvbmZpZz4NCisNCis8IS0tIEF2YWlsYWJsZSBHdWphcnRpIGZvbnRzIGxvb2sgbXVjaCBiZXR0ZXIgd2l0aG91dCBoaW50aW5nIC0tPg0KKw0KKwk8bWF0Y2ggdGFyZ2V0PSJmb250Ij4NCisJCTx0ZXN0IG5hbWU9ImZhbWlseSI+PHN0cmluZz5Mb2hpdCBHdWphcmF0aTwvc3RyaW5nPjwvdGVzdD4NCisJCTxlZGl0IG5hbWU9ImhpbnRpbmciPjxib29sPmZhbHNlPC9ib29sPjwvZWRpdD4NCisJPC9tYXRjaD4NCis8L2ZvbnRjb25maWc+DQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvaGVscGVycy9HcmFwaHZpejIuMjYuMy9ldGMvZm9udHMvY29uZi5kLzIwLXVuaGludC1zbWFsbC12ZXJhLmNvbmYgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS9oZWxwZXJzL0dyYXBodml6Mi4yNi4zL2V0Yy9mb250cy9jb25mLmQvMjAtdW5oaW50LXNtYWxsLXZlcmEuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNTA0ZTY4Ci0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvaGVscGVycy9HcmFwaHZpejIuMjYuMy9ldGMvZm9udHMvY29uZi5kLzIwLXVuaGludC1zbWFsbC12ZXJhLmNvbmYKQEAgLTAsMCArMSw0OSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+DQorPCFET0NUWVBFIGZvbnRjb25maWcgU1lTVEVNICJmb250cy5kdGQiPg0KKzwhLS0gY29uZi5kL3N1Yi1waXhlbC5jb25mIC0tPg0KKzxmb250Y29uZmlnPg0KKzwhLS0gDQorCVRoZSBCaXRzdHJlYW0gVmVyYSBmb250cyBoYXZlIEdBU1AgZW50cmllcyBzdWdnZXN0aW5nIHRoYXQgaGludGluZyBiZQ0KKwlkaXNhYmxlZCBiZWxvdyA4IHBwZW0sIGJ1dCBGcmVlVHlwZSBpZ25vcmVzIHRob3NlLCBwcmVmZXJyaW5nIHRvIHVzZQ0KKwl0aGUgZGF0YSBmb3VuZCBpbiB0aGUgaW5zdHJ1Y3RlZCBoaW50cy4gIFRoZSBpbml0aWFsIFZlcmEgcmVsZWFzZQ0KKwlkaWRuJ3QgaW5jbHVkZSB0aGUgcmlnaHQgaW5zdHJ1Y3Rpb25zIGluIHRoZSAncHJlcCcgdGFibGUuIEZpeCB0aGlzDQorCWJ5IGRpc2FibGluZyBoaW50aW5nIG1hbnVhbGx5IGF0IHNtYWxsZXIgc2l6ZXMgKDwgOHBwZW0pDQorIC0tPg0KKw0KKwk8bWF0Y2ggdGFyZ2V0PSJmb250Ij4NCisJCTx0ZXN0IG5hbWU9ImZhbWlseSI+DQorCQkJPHN0cmluZz5CaXRzdHJlYW0gVmVyYSBTYW5zPC9zdHJpbmc+DQorCQk8L3Rlc3Q+DQorCQk8dGVzdCBuYW1lPSJwaXhlbHNpemUiIGNvbXBhcmU9Imxlc3MiPg0KKwkJCTxkb3VibGU+Ny41PC9kb3VibGU+DQorCQk8L3Rlc3Q+DQorCQk8ZWRpdCBuYW1lPSJoaW50aW5nIj4NCisJCQk8Ym9vbD5mYWxzZTwvYm9vbD4NCisJCTwvZWRpdD4NCisJPC9tYXRjaD4NCisNCisJPG1hdGNoIHRhcmdldD0iZm9udCI+DQorCQk8dGVzdCBuYW1lPSJmYW1pbHkiPg0KKwkJCTxzdHJpbmc+Qml0c3RyZWFtIFZlcmEgU2VyaWY8L3N0cmluZz4NCisJCTwvdGVzdD4NCisJCTx0ZXN0IG5hbWU9InBpeGVsc2l6ZSIgY29tcGFyZT0ibGVzcyI+DQorCQkJPGRvdWJsZT43LjU8L2RvdWJsZT4NCisJCTwvdGVzdD4NCisJCTxlZGl0IG5hbWU9ImhpbnRpbmciPg0KKwkJCTxib29sPmZhbHNlPC9ib29sPg0KKwkJPC9lZGl0Pg0KKwk8L21hdGNoPg0KKw0KKwk8bWF0Y2ggdGFyZ2V0PSJmb250Ij4NCisJCTx0ZXN0IG5hbWU9ImZhbWlseSI+DQorCQkJPHN0cmluZz5CaXRzdHJlYW0gVmVyYSBTYW5zIE1vbm88L3N0cmluZz4NCisJCTwvdGVzdD4NCisJCTx0ZXN0IG5hbWU9InBpeGVsc2l6ZSIgY29tcGFyZT0ibGVzcyI+DQorCQkJPGRvdWJsZT43LjU8L2RvdWJsZT4NCisJCTwvdGVzdD4NCisJCTxlZGl0IG5hbWU9ImhpbnRpbmciPg0KKwkJCTxib29sPmZhbHNlPC9ib29sPg0KKwkJPC9lZGl0Pg0KKwk8L21hdGNoPg0KKw0KKzwvZm9udGNvbmZpZz4NCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS9oZWxwZXJzL0dyYXBodml6Mi4yNi4zL2V0Yy9mb250cy9jb25mLmQvMzAtYW10LWFsaWFzZXMuY29uZiBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL2hlbHBlcnMvR3JhcGh2aXoyLjI2LjMvZXRjL2ZvbnRzL2NvbmYuZC8zMC1hbXQtYWxpYXNlcy5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiYTc3MTcKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS9oZWxwZXJzL0dyYXBodml6Mi4yNi4zL2V0Yy9mb250cy9jb25mLmQvMzAtYW10LWFsaWFzZXMuY29uZgpAQCAtMCwwICsxLDIxIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiPz4NCis8IURPQ1RZUEUgZm9udGNvbmZpZyBTWVNURU0gImZvbnRzLmR0ZCI+DQorPCEtLSBjb25mLmQvc3ViLXBpeGVsLmNvbmYgLS0+DQorPGZvbnRjb25maWc+DQorPCEtLQ0KKyBBTVQgcHJvdmlkZXMgbWV0cmljIGFuZCBzaGFwZSBjb21wYXRpYmxlIGZvbnRzIGZvciB0aGVzZSB0aHJlZSB3ZWIgZm9udA0KKyBmYW1pbGllcy4NCisgLS0+DQorIAk8YWxpYXM+DQorCQk8ZmFtaWx5PlRpbWVzIE5ldyBSb21hbjwvZmFtaWx5Pg0KKwkJPGFjY2VwdD48ZmFtaWx5PlRob3JuZGFsZSBBTVQ8L2ZhbWlseT48L2FjY2VwdD4NCisJPC9hbGlhcz4NCisgCTxhbGlhcz4NCisJCTxmYW1pbHk+QXJpYWw8L2ZhbWlseT4NCisJCTxhY2NlcHQ+PGZhbWlseT5BbGJhbnkgQU1UPC9mYW1pbHk+PC9hY2NlcHQ+DQorCTwvYWxpYXM+DQorIAk8YWxpYXM+DQorCQk8ZmFtaWx5PkNvdXJpZXIgTmV3PC9mYW1pbHk+DQorCQk8YWNjZXB0PjxmYW1pbHk+Q3VtYmVybGFuZCBBTVQ8L2ZhbWlseT48L2FjY2VwdD4NCisJPC9hbGlhcz4NCis8L2ZvbnRjb25maWc+DQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvaGVscGVycy9HcmFwaHZpejIuMjYuMy9ldGMvZm9udHMvY29uZi5kLzMwLXVydy1hbGlhc2VzLmNvbmYgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS9oZWxwZXJzL0dyYXBodml6Mi4yNi4zL2V0Yy9mb250cy9jb25mLmQvMzAtdXJ3LWFsaWFzZXMuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MzZkMTdkCi0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvaGVscGVycy9HcmFwaHZpejIuMjYuMy9ldGMvZm9udHMvY29uZi5kLzMwLXVydy1hbGlhc2VzLmNvbmYKQEAgLTAsMCArMSw1MiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+DQorPCFET0NUWVBFIGZvbnRjb25maWcgU1lTVEVNICJmb250cy5kdGQiPg0KKzwhLS0gY29uZi5kL3N1Yi1waXhlbC5jb25mIC0tPg0KKzxmb250Y29uZmlnPg0KKzwhLS0NCisgIFVSVyBwcm92aWRlcyBtZXRyaWMgYW5kIHNoYXBlIGNvbXBhdGlibGUgZm9udHMgZm9yIHRoZXNlIDEwIEFkb2JlIGZhbWlsaWVzLg0KKyAgLS0+DQorICAgICAgICA8YWxpYXM+DQorICAgICAgICAgIDxmYW1pbHk+QXZhbnQgR2FyZGU8L2ZhbWlseT4NCisgICAgICAgICAgPGFjY2VwdD48ZmFtaWx5PlVSVyBHb3RoaWMgTDwvZmFtaWx5PjwvYWNjZXB0Pg0KKyAgICAgICAgPC9hbGlhcz4NCisgICAgICAgIDxhbGlhcz4NCisgICAgICAgICAgPGZhbWlseT5Cb29rbWFuPC9mYW1pbHk+DQorICAgICAgICAgIDxhY2NlcHQ+PGZhbWlseT5VUlcgQm9va21hbiBMPC9mYW1pbHk+PC9hY2NlcHQ+DQorICAgICAgICA8L2FsaWFzPg0KKyAgICAgICAgPGFsaWFzPg0KKwkgIDxmYW1pbHk+Q291cmllcjwvZmFtaWx5Pg0KKwkgIDxhY2NlcHQ+PGZhbWlseT5OaW1idXMgTW9ubyBMPC9mYW1pbHk+PC9hY2NlcHQ+DQorCTwvYWxpYXM+DQorICAgICAgICA8YWxpYXM+DQorCSAgPGZhbWlseT5IZWx2ZXRpY2E8L2ZhbWlseT4NCisJICA8YWNjZXB0PjxmYW1pbHk+TmltYnVzIFNhbnMgTDwvZmFtaWx5PjwvYWNjZXB0Pg0KKwk8L2FsaWFzPg0KKyAgICAgICAgPGFsaWFzPg0KKyAgICAgICAgICA8ZmFtaWx5Pk5ldyBDZW50dXJ5IFNjaG9vbGJvb2s8L2ZhbWlseT4NCisgICAgICAgICAgPGFjY2VwdD48ZmFtaWx5PkNlbnR1cnkgU2Nob29sYm9vayBMPC9mYW1pbHk+PC9hY2NlcHQ+DQorICAgICAgICA8L2FsaWFzPg0KKyAgICAgICAgPGFsaWFzPg0KKyAgICAgICAgICA8ZmFtaWx5PlBhbGF0aW5vPC9mYW1pbHk+DQorICAgICAgICAgIDxhY2NlcHQ+PGZhbWlseT5VUlcgUGFsbGFkaW8gTDwvZmFtaWx5PjwvYWNjZXB0Pg0KKyAgICAgICAgPC9hbGlhcz4NCisgICAgICAgIDxhbGlhcz4NCisJICA8ZmFtaWx5PlRpbWVzPC9mYW1pbHk+DQorCSAgPGFjY2VwdD48ZmFtaWx5Pk5pbWJ1cyBSb21hbiBObzkgTDwvZmFtaWx5PjwvYWNjZXB0Pg0KKwk8L2FsaWFzPg0KKyAgICAgICAgPGFsaWFzPg0KKwkgIDxmYW1pbHk+WmFwZiBDaGFuY2VyeTwvZmFtaWx5Pg0KKwkgIDxhY2NlcHQ+PGZhbWlseT5VUlcgQ2hhbmNlcnkgTDwvZmFtaWx5PjwvYWNjZXB0Pg0KKwk8L2FsaWFzPg0KKyAgICAgICAgPGFsaWFzPg0KKwkgIDxmYW1pbHk+WmFwZiBEaW5nYmF0czwvZmFtaWx5Pg0KKwkgIDxhY2NlcHQ+PGZhbWlseT5EaW5nYmF0czwvZmFtaWx5PjwvYWNjZXB0Pg0KKwk8L2FsaWFzPg0KKwk8bWF0Y2ggdGFyZ2V0PSJwYXR0ZXJuIj4NCisJICA8dGVzdCBuYW1lPSJmYW1pbHkiPg0KKwkgICAgPHN0cmluZz5TeW1ib2w8L3N0cmluZz4NCisJICA8L3Rlc3Q+DQorCSAgPGVkaXQgbmFtZT0iZmFtaWx5IiBtb2RlPSJhcHBlbmQiIGJpbmRpbmc9InNhbWUiPg0KKwkgICAgPHN0cmluZz5TdGFuZGFyZCBTeW1ib2xzIEw8L3N0cmluZz4NCisJICA8L2VkaXQ+DQorCTwvbWF0Y2g+DQorPC9mb250Y29uZmlnPg0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL2hlbHBlcnMvR3JhcGh2aXoyLjI2LjMvZXRjL2ZvbnRzL2NvbmYuZC80MC1nZW5lcmljLmNvbmYgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS9oZWxwZXJzL0dyYXBodml6Mi4yNi4zL2V0Yy9mb250cy9jb25mLmQvNDAtZ2VuZXJpYy5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkY2UyMTgKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS9oZWxwZXJzL0dyYXBodml6Mi4yNi4zL2V0Yy9mb250cy9jb25mLmQvNDAtZ2VuZXJpYy5jb25mCkBAIC0wLDAgKzEsNjYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/Pg0KKzwhRE9DVFlQRSBmb250Y29uZmlnIFNZU1RFTSAiZm9udHMuZHRkIj4NCis8Zm9udGNvbmZpZz4NCis8IS0tDQorICBNYXJrIGNvbW1vbiBmYW1pbGllcyB3aXRoIHRoZWlyIGdlbmVyaWNzIHNvIHdlJ2xsIGdldA0KKyAgc29tZXRoaW5nIHJlYXNvbmFibGUNCistLT4NCisNCis8IS0tDQorICBTZXJpZiBmYWNlcw0KKyAtLT4NCisJPGFsaWFzPg0KKwkJPGZhbWlseT5CaXRzdHJlYW0gVmVyYSBTZXJpZjwvZmFtaWx5Pg0KKwkJPGZhbWlseT5EZWphVnUgU2VyaWY8L2ZhbWlseT4NCisJCTxmYW1pbHk+VGltZXMgTmV3IFJvbWFuPC9mYW1pbHk+DQorCQk8ZmFtaWx5PlRpbWVzPC9mYW1pbHk+DQorCQk8ZmFtaWx5Pk5pbWJ1cyBSb21hbiBObzkgTDwvZmFtaWx5Pg0KKwkJPGZhbWlseT5MdXhpIFNlcmlmPC9mYW1pbHk+DQorCQk8ZmFtaWx5PktvY2hpIE1pbmNobzwvZmFtaWx5Pg0KKwkJPGZhbWlseT5BUiBQTCBTdW5ndGlMIEdCPC9mYW1pbHk+DQorCQk8ZmFtaWx5PkFSIFBMIE1pbmd0aTJMIEJpZzU8L2ZhbWlseT4NCisJCTxmYW1pbHk+77yt77yzIOaYjuacnTwvZmFtaWx5Pg0KKwkJPGZhbWlseT5CYWVrbXVrIEJhdGFuZzwvZmFtaWx5Pg0KKwkJPGZhbWlseT5GcmVlU2VyaWY8L2ZhbWlseT4NCisJCTxmYW1pbHk+TWdPcGVuIENhbm9uaWNhPC9mYW1pbHk+DQorCQk8ZGVmYXVsdD48ZmFtaWx5PnNlcmlmPC9mYW1pbHk+PC9kZWZhdWx0Pg0KKwk8L2FsaWFzPg0KKzwhLS0NCisgIFNhbnMtc2VyaWYgZmFjZXMNCisgLS0+DQorCTxhbGlhcz4NCisJCTxmYW1pbHk+Qml0c3RyZWFtIFZlcmEgU2FuczwvZmFtaWx5Pg0KKwkJPGZhbWlseT5EZWphVnUgU2FuczwvZmFtaWx5Pg0KKwkJPGZhbWlseT5IZWx2ZXRpY2E8L2ZhbWlseT4NCisJCTxmYW1pbHk+QXJpYWw8L2ZhbWlseT4NCisJCTxmYW1pbHk+VmVyZGFuYTwvZmFtaWx5Pg0KKwkJPGZhbWlseT5BbGJhbnkgQU1UPC9mYW1pbHk+DQorCQk8ZmFtaWx5Pk5pbWJ1cyBTYW5zIEw8L2ZhbWlseT4NCisJCTxmYW1pbHk+THV4aSBTYW5zPC9mYW1pbHk+DQorCQk8ZmFtaWx5PktvY2hpIEdvdGhpYzwvZmFtaWx5Pg0KKwkJPGZhbWlseT5BUiBQTCBLYWl0aU0gR0I8L2ZhbWlseT4NCisJCTxmYW1pbHk+QVIgUEwgS2FpdGlNIEJpZzU8L2ZhbWlseT4NCisJCTxmYW1pbHk+77yt77yzIOOCtOOCt+ODg+OCrzwvZmFtaWx5Pg0KKwkJPGZhbWlseT5CYWVrbXVrIERvdHVtPC9mYW1pbHk+DQorCQk8ZmFtaWx5PlNpbVN1bjwvZmFtaWx5Pg0KKwkJPGZhbWlseT5GcmVlU2FuczwvZmFtaWx5Pg0KKwkJPGZhbWlseT5NZ09wZW4gTW9kYXRhPC9mYW1pbHk+DQorCQk8ZGVmYXVsdD48ZmFtaWx5PnNhbnMtc2VyaWY8L2ZhbWlseT48L2RlZmF1bHQ+DQorCTwvYWxpYXM+DQorPCEtLQ0KKyAgTW9ub3NwYWNlIGZhY2VzDQorIC0tPg0KKyAJPGFsaWFzPg0KKwkJPGZhbWlseT5CaXRzdHJlYW0gVmVyYSBTYW5zIE1vbm88L2ZhbWlseT4NCisJCTxmYW1pbHk+RGVqYVZ1IFNhbnMgTW9ubzwvZmFtaWx5Pg0KKwkJPGZhbWlseT5Db3VyaWVyPC9mYW1pbHk+DQorCQk8ZmFtaWx5PkNvdXJpZXIgTmV3PC9mYW1pbHk+DQorCQk8ZmFtaWx5PkFuZGFsZSBNb25vPC9mYW1pbHk+DQorCQk8ZmFtaWx5Pkx1eGkgTW9ubzwvZmFtaWx5Pg0KKwkJPGZhbWlseT5DdW1iZXJsYW5kIEFNVDwvZmFtaWx5Pg0KKwkJPGZhbWlseT5OaW1idXMgTW9ubyBMPC9mYW1pbHk+DQorCQk8ZmFtaWx5Pk5TaW1TdW48L2ZhbWlseT4NCisJCTxmYW1pbHk+RnJlZU1vbm88L2ZhbWlseT4NCisJCTxkZWZhdWx0PjxmYW1pbHk+bW9ub3NwYWNlPC9mYW1pbHk+PC9kZWZhdWx0Pg0KKwk8L2FsaWFzPg0KKzwvZm9udGNvbmZpZz4NCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS9oZWxwZXJzL0dyYXBodml6Mi4yNi4zL2V0Yy9mb250cy9jb25mLmQvNDktc2Fuc3NlcmlmLmNvbmYgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS9oZWxwZXJzL0dyYXBodml6Mi4yNi4zL2V0Yy9mb250cy9jb25mLmQvNDktc2Fuc3NlcmlmLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmZiMGJmOAotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL2hlbHBlcnMvR3JhcGh2aXoyLjI2LjMvZXRjL2ZvbnRzL2NvbmYuZC80OS1zYW5zc2VyaWYuY29uZgpAQCAtMCwwICsxLDIxIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiPz4NCis8IURPQ1RZUEUgZm9udGNvbmZpZyBTWVNURU0gImZvbnRzLmR0ZCI+DQorPGZvbnRjb25maWc+DQorPCEtLQ0KKyAgSWYgdGhlIGZvbnQgc3RpbGwgaGFzIG5vIGdlbmVyaWMgbmFtZSwgYWRkIHNhbnMtc2VyaWYNCisgLS0+DQorCTxtYXRjaCB0YXJnZXQ9InBhdHRlcm4iPg0KKwkJPHRlc3QgcXVhbD0iYWxsIiBuYW1lPSJmYW1pbHkiIGNvbXBhcmU9Im5vdF9lcSI+DQorCQkJPHN0cmluZz5zYW5zLXNlcmlmPC9zdHJpbmc+DQorCQk8L3Rlc3Q+DQorCQk8dGVzdCBxdWFsPSJhbGwiIG5hbWU9ImZhbWlseSIgY29tcGFyZT0ibm90X2VxIj4NCisJCQk8c3RyaW5nPnNlcmlmPC9zdHJpbmc+DQorCQk8L3Rlc3Q+DQorCQk8dGVzdCBxdWFsPSJhbGwiIG5hbWU9ImZhbWlseSIgY29tcGFyZT0ibm90X2VxIj4NCisJCQk8c3RyaW5nPm1vbm9zcGFjZTwvc3RyaW5nPg0KKwkJPC90ZXN0Pg0KKwkJPGVkaXQgbmFtZT0iZmFtaWx5IiBtb2RlPSJhcHBlbmRfbGFzdCI+DQorCQkJPHN0cmluZz5zYW5zLXNlcmlmPC9zdHJpbmc+DQorCQk8L2VkaXQ+DQorCTwvbWF0Y2g+DQorPC9mb250Y29uZmlnPg0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL2hlbHBlcnMvR3JhcGh2aXoyLjI2LjMvZXRjL2ZvbnRzL2NvbmYuZC81MC11c2VyLmNvbmYgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS9oZWxwZXJzL0dyYXBodml6Mi4yNi4zL2V0Yy9mb250cy9jb25mLmQvNTAtdXNlci5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3NTc5NzMKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS9oZWxwZXJzL0dyYXBodml6Mi4yNi4zL2V0Yy9mb250cy9jb25mLmQvNTAtdXNlci5jb25mCkBAIC0wLDAgKzEsNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+DQorPCFET0NUWVBFIGZvbnRjb25maWcgU1lTVEVNICJmb250cy5kdGQiPg0KKzwhLS0gL2V0Yy9mb250cy9jb25mLmF2YWlsLzUwLXVzZXIuY29uZiBmaWxlIHRvIGNvbmZpZ3VyZSBzeXN0ZW0gZm9udCBhY2Nlc3MgLS0+DQorPGZvbnRjb25maWc+DQorCTwhLS0gTG9hZCBwZXItdXNlciBjdXN0b21pemF0aW9uIGZpbGUgLS0+DQorCTxpbmNsdWRlIGlnbm9yZV9taXNzaW5nPSJ5ZXMiPn4vLmZvbnRzLmNvbmY8L2luY2x1ZGU+DQorPC9mb250Y29uZmlnPg0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL2hlbHBlcnMvR3JhcGh2aXoyLjI2LjMvZXRjL2ZvbnRzL2NvbmYuZC81MS1sb2NhbC5jb25mIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvaGVscGVycy9HcmFwaHZpejIuMjYuMy9ldGMvZm9udHMvY29uZi5kLzUxLWxvY2FsLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQ1OGZhMQotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL2hlbHBlcnMvR3JhcGh2aXoyLjI2LjMvZXRjL2ZvbnRzL2NvbmYuZC81MS1sb2NhbC5jb25mCkBAIC0wLDAgKzEsNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+DQorPCFET0NUWVBFIGZvbnRjb25maWcgU1lTVEVNICJmb250cy5kdGQiPg0KKzwhLS0gL2V0Yy9mb250cy9jb25mLmF2YWlsLzUxLWxvY2FsLmNvbmYgZmlsZSB0byBjb25maWd1cmUgc3lzdGVtIGZvbnQgYWNjZXNzIC0tPg0KKzxmb250Y29uZmlnPg0KKwk8IS0tIExvYWQgbG9jYWwgc3lzdGVtIGN1c3RvbWl6YXRpb24gZmlsZSAtLT4NCisJPGluY2x1ZGUgaWdub3JlX21pc3Npbmc9InllcyI+bG9jYWwuY29uZjwvaW5jbHVkZT4NCis8L2ZvbnRjb25maWc+DQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvaGVscGVycy9HcmFwaHZpejIuMjYuMy9ldGMvZm9udHMvY29uZi5kLzYwLWxhdGluLmNvbmYgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS9oZWxwZXJzL0dyYXBodml6Mi4yNi4zL2V0Yy9mb250cy9jb25mLmQvNjAtbGF0aW4uY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODcxZmU4Ci0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvaGVscGVycy9HcmFwaHZpejIuMjYuMy9ldGMvZm9udHMvY29uZi5kLzYwLWxhdGluLmNvbmYKQEAgLTAsMCArMSw0MiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+DQorPCFET0NUWVBFIGZvbnRjb25maWcgU1lTVEVNICJmb250cy5kdGQiPg0KKzxmb250Y29uZmlnPg0KKwk8YWxpYXM+DQorCQk8ZmFtaWx5PnNlcmlmPC9mYW1pbHk+DQorCQk8cHJlZmVyPg0KKwkJCTxmYW1pbHk+Qml0c3RyZWFtIFZlcmEgU2VyaWY8L2ZhbWlseT4NCisJCQk8ZmFtaWx5PkRlamFWdSBTZXJpZjwvZmFtaWx5Pg0KKwkJCTxmYW1pbHk+VGltZXMgTmV3IFJvbWFuPC9mYW1pbHk+DQorCQkJPGZhbWlseT5UaG9ybmRhbGUgQU1UPC9mYW1pbHk+DQorCQkJPGZhbWlseT5MdXhpIFNlcmlmPC9mYW1pbHk+DQorCQkJPGZhbWlseT5OaW1idXMgUm9tYW4gTm85IEw8L2ZhbWlseT4NCisJCQk8ZmFtaWx5PlRpbWVzPC9mYW1pbHk+DQorCQk8L3ByZWZlcj4NCisJPC9hbGlhcz4NCisJPGFsaWFzPg0KKwkJPGZhbWlseT5zYW5zLXNlcmlmPC9mYW1pbHk+DQorCQk8cHJlZmVyPg0KKwkJCTxmYW1pbHk+Qml0c3RyZWFtIFZlcmEgU2FuczwvZmFtaWx5Pg0KKwkJCTxmYW1pbHk+RGVqYVZ1IFNhbnM8L2ZhbWlseT4NCisJCQk8ZmFtaWx5PlZlcmRhbmE8L2ZhbWlseT4NCisJCQk8ZmFtaWx5PkFyaWFsPC9mYW1pbHk+DQorCQkJPGZhbWlseT5BbGJhbnkgQU1UPC9mYW1pbHk+DQorCQkJPGZhbWlseT5MdXhpIFNhbnM8L2ZhbWlseT4NCisJCQk8ZmFtaWx5Pk5pbWJ1cyBTYW5zIEw8L2ZhbWlseT4NCisJCQk8ZmFtaWx5PkhlbHZldGljYTwvZmFtaWx5Pg0KKwkJPC9wcmVmZXI+DQorCTwvYWxpYXM+DQorCTxhbGlhcz4NCisJCTxmYW1pbHk+bW9ub3NwYWNlPC9mYW1pbHk+DQorCQk8cHJlZmVyPg0KKwkJCTxmYW1pbHk+Qml0c3RyZWFtIFZlcmEgU2FucyBNb25vPC9mYW1pbHk+DQorCQkJPGZhbWlseT5EZWphVnUgU2FucyBNb25vPC9mYW1pbHk+DQorCQkJPGZhbWlseT5BbmRhbGUgTW9ubzwvZmFtaWx5Pg0KKwkJCTxmYW1pbHk+Q291cmllciBOZXc8L2ZhbWlseT4NCisJCQk8ZmFtaWx5PkN1bWJlcmxhbmQgQU1UPC9mYW1pbHk+DQorCQkJPGZhbWlseT5MdXhpIE1vbm88L2ZhbWlseT4NCisJCQk8ZmFtaWx5Pk5pbWJ1cyBNb25vIEw8L2ZhbWlseT4NCisJCQk8ZmFtaWx5PkNvdXJpZXI8L2ZhbWlseT4NCisJCTwvcHJlZmVyPg0KKwk8L2FsaWFzPg0KKzwvZm9udGNvbmZpZz4NCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS9oZWxwZXJzL0dyYXBodml6Mi4yNi4zL2V0Yy9mb250cy9jb25mLmQvNjUtZm9udHMtcGVyc2lhbi5jb25mIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvaGVscGVycy9HcmFwaHZpejIuMjYuMy9ldGMvZm9udHMvY29uZi5kLzY1LWZvbnRzLXBlcnNpYW4uY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjRhOWEwCi0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvaGVscGVycy9HcmFwaHZpejIuMjYuMy9ldGMvZm9udHMvY29uZi5kLzY1LWZvbnRzLXBlcnNpYW4uY29uZgpAQCAtMCwwICsxLDUzOSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+DQorPCFET0NUWVBFIGZvbnRjb25maWcgU1lTVEVNICJmb250cy5kdGQiPg0KKzwhLS0gL2V0Yy9mb250cy9jb25mLmQvMTAtZm9udHMtcGVyc2lhbi5jb25mIC0tPg0KKzwhLS0NCisgIGZvbnRzLXBlcnNpYW4uY29uZg0KKyAgVG8gY29uZmlndXJlIFBlcnNpYW4gZm9udHMgZnJvbSBUaGUgRmFyc2lXZWIgUHJvamVjdC4NCisNCisgIENvcHlyaWdodCAoQykgMjAwNSAgU2hhcmlmIEZhcnNpV2ViLCBJbmMuIDxsaWNlbnNlQGZhcnNpd2ViLmluZm8+DQorDQorICBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBkaXN0cmlidXRlLCBhbmQgc2VsbCB0aGlzIHNvZnR3YXJlIGFuZCBpdHMNCisgIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0DQorICB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQgdGhhdCBib3RoIHRoYXQNCisgIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcNCisgIGRvY3VtZW50YXRpb24sIGFuZCB0aGF0IHRoZSBuYW1lIG9mIFNoYXJpZiBGYXJzaVdlYiwgSW5jLiBub3QgYmUgdXNlZCBpbg0KKyAgYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZSBzb2Z0d2FyZSB3aXRob3V0DQorICBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLiAgU2hhcmlmIEZhcnNpV2ViLCBJbmMuIG1ha2VzIG5vDQorICByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLiAgSXQNCisgIGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuDQorDQorICBTSEFSSUYgRkFSU0lXRUIsIElOQy4gRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUsDQorICBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MsIElOIE5PDQorICBFVkVOVCBTSEFMTCBLRUlUSCBQQUNLQVJEIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIElORElSRUNUIE9SDQorICBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwNCisgIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVINCisgIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1INCisgIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuDQorDQorICBDaGFuZ2VMb2c6DQorICAgIDIwMDUtMDQtMDMgIEJlaGRhZCBFc2ZhaGJvZDogIEluaXRpYWwgcmV2aXNpb24uDQorICAgIDIwMDUtMTAtMDkgIEJlaGRhZCBFc2ZhaGJvZDogIFR1cm5lZCBvZmYgYmFjay1zbGFudCBhbmQgVGFob21hIHNlY3Rpb25zLg0KKyAgICAyMDA1LTExLTMwICBCZWhkYWQgRXNmYWhib2Q6ICBTZXQgVGl0ciBzdXNidGl0dXRpb24gc2l6ZSB0byAyNCBwb2ludHMuDQorDQorICBUb2RvOg0KKyAgICBBZGQgZ2VuZXJpYyBmb250ICJmYW50YXN5Ii4gIEFkZCBzb21lIGZvbnRzIGludG8gdGhhdCBjYXRlZ29yeS4NCisgICAgTWF5YmUgYWRkIGEgImN1cnNpdmUiIGdlbmVyaWMgZm9udC4NCisgIC0tPg0KKzxmb250Y29uZmlnPg0KKw0KKw0KKzwhLS0NCisgIFdlIGRvbid0IHdhbnQgd2VhayBiaW5kaW5ncy4gIFNvIGdvdCB0byB1c2UgdGhlIHN5bnRhY3RpY2FsIGV4cGFuc2lvbg0KKyAgb2YgYWxpYXMgdGFnIHRvIGRvIGJpbmRpbmc9c2FtZSA6KC4gIFBsZWFzZSBzdXBwb3J0IHRoYXQgaW4gYWxpYXMuDQorICAtLT4NCisNCisNCis8IS0tIERlcHJlY2F0ZWQgZm9udHMgYXJlIGRpc2NvdXJhZ2VkIC0tPg0KKw0KKwk8IS0tIE5lc2ZbMl0gaXMgb2ZmaWNpYWxseSBkZXByZWNhdGVkIGFuZCBoYXMgcHJvYmxlbWF0aWMgdGFibGVzIC0tPg0KKwk8bWF0Y2g+DQorCQk8dGVzdCBuYW1lPSJmYW1pbHkiPg0KKwkJCTxzdHJpbmc+TmVzZjwvc3RyaW5nPg0KKwkJPC90ZXN0Pg0KKwkJPGVkaXQgbmFtZT0iZmFtaWx5IiBtb2RlPSJhc3NpZ24iIGJpbmRpbmc9InNhbWUiPg0KKwkJCTxzdHJpbmc+TmVzZjI8L3N0cmluZz4NCisJCTwvZWRpdD4NCisJPC9tYXRjaD4NCisJPG1hdGNoPg0KKwkJPHRlc3QgbmFtZT0iZmFtaWx5Ij4NCisJCQk8c3RyaW5nPk5lc2YyPC9zdHJpbmc+DQorCQk8L3Rlc3Q+DQorCQk8ZWRpdCBuYW1lPSJmYW1pbHkiIG1vZGU9ImFzc2lnbiIgYmluZGluZz0ic2FtZSI+DQorCQkJPHN0cmluZz5QZXJzaWFuX3NhbnNzZXJpZl9kZWZhdWx0PC9zdHJpbmc+DQorCQk8L2VkaXQ+DQorCTwvbWF0Y2g+DQorDQorCTwhLS0gVGFob21hIGxvb2tzIGF3ZnVsIChUVVJORUQtT0ZGKSAtLT4NCisJPCEtLW1hdGNoPg0KKwkJPHRlc3QgbmFtZT0iZmFtaWx5Ij4NCisJCQk8c3RyaW5nPlRhaG9tYTwvc3RyaW5nPg0KKwkJPC90ZXN0Pg0KKwkJPGVkaXQgbmFtZT0iZmFtaWx5IiBtb2RlPSJwcmVwZW5kIiBiaW5kaW5nPSJzYW1lIj4NCisJCQk8c3RyaW5nPlBlcnNpYW5fc2Fuc3NlcmlmX2RlZmF1bHQ8L3N0cmluZz4NCisJCTwvZWRpdD4NCisJPC9tYXRjaC0tPg0KKw0KKzwhLS0gTmFtZSBjaGFuZ2VzIGFuZCBzcGVsbGluZyB2YXJpYW50IGFsaWFzZXMgLS0+DQorDQorCTwhLS0gQ2hhbmdlZCBkdWUgdG8gdHJhZGVtYXJrIHByb2JsZW1zIC0tPg0KKwk8bWF0Y2g+DQorCQk8dGVzdCBuYW1lPSJmYW1pbHkiPg0KKwkJCTxzdHJpbmc+TmF6YW5pbjwvc3RyaW5nPg0KKwkJPC90ZXN0Pg0KKwkJPGVkaXQgbmFtZT0iZmFtaWx5IiBtb2RlPSJhc3NpZ24iIGJpbmRpbmc9InNhbWUiPg0KKwkJCTxzdHJpbmc+TmF6bGk8L3N0cmluZz4NCisJCTwvZWRpdD4NCisJPC9tYXRjaD4NCisJPG1hdGNoPg0KKwkJPHRlc3QgbmFtZT0iZmFtaWx5Ij4NCisJCQk8c3RyaW5nPkxvdHVzPC9zdHJpbmc+DQorCQk8L3Rlc3Q+DQorCQk8ZWRpdCBuYW1lPSJmYW1pbHkiIG1vZGU9ImFzc2lnbiIgYmluZGluZz0ic2FtZSI+DQorCQkJPHN0cmluZz5Mb3Rvb3M8L3N0cmluZz4NCisJCTwvZWRpdD4NCisJPC9tYXRjaD4NCisNCisJPCEtLSBDaGFuZ2VkIGR1ZSB0byB0cmFuc2NyaXB0aW9uIG9ydGhvZ3JhcGh5IC0tPg0KKwk8bWF0Y2g+DQorCQk8dGVzdCBuYW1lPSJmYW1pbHkiPg0KKwkJCTxzdHJpbmc+WWFxdXQ8L3N0cmluZz4NCisJCTwvdGVzdD4NCisJCTxlZGl0IG5hbWU9ImZhbWlseSIgbW9kZT0iYXNzaWduIiBiaW5kaW5nPSJzYW1lIj4NCisJCQk8c3RyaW5nPllhZ2hvb3Q8L3N0cmluZz4NCisJCTwvZWRpdD4NCisJPC9tYXRjaD4NCisJPG1hdGNoPg0KKwkJPHRlc3QgbmFtZT0iZmFtaWx5Ij4NCisJCQk8c3RyaW5nPllhZ3V0PC9zdHJpbmc+DQorCQk8L3Rlc3Q+DQorCQk8ZWRpdCBuYW1lPSJmYW1pbHkiIG1vZGU9ImFzc2lnbiIgYmluZGluZz0ic2FtZSI+DQorCQkJPHN0cmluZz5ZYWdob290PC9zdHJpbmc+DQorCQk8L2VkaXQ+DQorCTwvbWF0Y2g+DQorCTxtYXRjaD4NCisJCTx0ZXN0IG5hbWU9ImZhbWlseSI+DQorCQkJPHN0cmluZz5ZYWdodXQ8L3N0cmluZz4NCisJCTwvdGVzdD4NCisJCTxlZGl0IG5hbWU9ImZhbWlseSIgbW9kZT0iYXNzaWduIiBiaW5kaW5nPSJzYW1lIj4NCisJCQk8c3RyaW5nPllhZ2hvb3Q8L3N0cmluZz4NCisJCTwvZWRpdD4NCisJPC9tYXRjaD4NCisJPG1hdGNoPg0KKwkJPHRlc3QgbmFtZT0iZmFtaWx5Ij4NCisJCQk8c3RyaW5nPlRyYWZmaWM8L3N0cmluZz4NCisJCTwvdGVzdD4NCisJCTxlZGl0IG5hbWU9ImZhbWlseSIgbW9kZT0iYXNzaWduIiBiaW5kaW5nPSJzYW1lIj4NCisJCQk8c3RyaW5nPlRlcmFmaWs8L3N0cmluZz4NCisJCTwvZWRpdD4NCisJPC9tYXRjaD4NCisJPG1hdGNoPg0KKwkJPHRlc3QgbmFtZT0iZmFtaWx5Ij4NCisJCQk8c3RyaW5nPkZlcmRvd3NpPC9zdHJpbmc+DQorCQk8L3Rlc3Q+DQorCQk8ZWRpdCBuYW1lPSJmYW1pbHkiIG1vZGU9ImFzc2lnbiIgYmluZGluZz0ic2FtZSI+DQorCQkJPHN0cmluZz5GZXJkb3NpPC9zdHJpbmc+DQorCQk8L2VkaXQ+DQorCTwvbWF0Y2g+DQorCTxtYXRjaD4NCisJCTx0ZXN0IG5hbWU9ImZhbWlseSI+DQorCQkJPHN0cmluZz5GYW50ZXp5PC9zdHJpbmc+DQorCQk8L3Rlc3Q+DQorCQk8ZWRpdCBuYW1lPSJmYW1pbHkiIG1vZGU9ImFzc2lnbiIgYmluZGluZz0ic2FtZSI+DQorCQkJPHN0cmluZz5GYW50ZXppPC9zdHJpbmc+DQorCQk8L2VkaXQ+DQorCTwvbWF0Y2g+DQorDQorDQorPCEtLSBDbGFzc2lmeSBmb250cy4gLS0+DQorDQorCTwhLS0gUGVyc2lhbl90aXRsZSBjbGFzcyAtLT4NCisJPG1hdGNoPg0KKwkJPHRlc3QgbmFtZT0iZmFtaWx5Ij4NCisJCQk8c3RyaW5nPkphZGlkPC9zdHJpbmc+DQorCQk8L3Rlc3Q+DQorCQk8ZWRpdCBuYW1lPSJmYW1pbHkiIG1vZGU9ImFwcGVuZCIgYmluZGluZz0ic2FtZSI+DQorCQkJPHN0cmluZz5QZXJzaWFuX3RpdGxlPC9zdHJpbmc+DQorCQk8L2VkaXQ+DQorCTwvbWF0Y2g+DQorCTxtYXRjaD4NCisJCTx0ZXN0IG5hbWU9ImZhbWlseSI+DQorCQkJPHN0cmluZz5UaXRyPC9zdHJpbmc+DQorCQk8L3Rlc3Q+DQorCQk8ZWRpdCBuYW1lPSJmYW1pbHkiIG1vZGU9ImFwcGVuZCIgYmluZGluZz0ic2FtZSI+DQorCQkJPHN0cmluZz5QZXJzaWFuX3RpdGxlPC9zdHJpbmc+DQorCQk8L2VkaXQ+DQorCTwvbWF0Y2g+DQorDQorCTwhLS0gUGVyc2lhbl9mYW50YXN5IGNsYXNzIC0tPg0KKwk8bWF0Y2g+DQorCQk8dGVzdCBuYW1lPSJmYW1pbHkiPg0KKwkJCTxzdHJpbmc+S2FtcmFuPC9zdHJpbmc+DQorCQk8L3Rlc3Q+DQorCQk8ZWRpdCBuYW1lPSJmYW1pbHkiIG1vZGU9ImFwcGVuZCIgYmluZGluZz0ic2FtZSI+DQorCQkJPHN0cmluZz5Ib21hPC9zdHJpbmc+DQorCQk8L2VkaXQ+DQorCQk8ZWRpdCBuYW1lPSJmYW1pbHkiIG1vZGU9ImFwcGVuZCIgYmluZGluZz0ic2FtZSI+DQorCQkJPHN0cmluZz5QZXJzaWFuX2ZhbnRhc3k8L3N0cmluZz4NCisJCTwvZWRpdD4NCisJPC9tYXRjaD4NCisJPG1hdGNoPg0KKwkJPHRlc3QgbmFtZT0iZmFtaWx5Ij4NCisJCQk8c3RyaW5nPkhvbWE8L3N0cmluZz4NCisJCTwvdGVzdD4NCisJCTxlZGl0IG5hbWU9ImZhbWlseSIgbW9kZT0iYXBwZW5kIiBiaW5kaW5nPSJzYW1lIj4NCisJCQk8c3RyaW5nPkthbXJhbjwvc3RyaW5nPg0KKwkJPC9lZGl0Pg0KKwkJPGVkaXQgbmFtZT0iZmFtaWx5IiBtb2RlPSJhcHBlbmQiIGJpbmRpbmc9InNhbWUiPg0KKwkJCTxzdHJpbmc+UGVyc2lhbl9mYW50YXN5PC9zdHJpbmc+DQorCQk8L2VkaXQ+DQorCTwvbWF0Y2g+DQorCTxtYXRjaD4NCisJCTx0ZXN0IG5hbWU9ImZhbWlseSI+DQorCQkJPHN0cmluZz5GYW50ZXppPC9zdHJpbmc+DQorCQk8L3Rlc3Q+DQorCQk8ZWRpdCBuYW1lPSJmYW1pbHkiIG1vZGU9ImFwcGVuZCIgYmluZGluZz0ic2FtZSI+DQorCQkJPHN0cmluZz5QZXJzaWFuX2ZhbnRhc3k8L3N0cmluZz4NCisJCTwvZWRpdD4NCisJPC9tYXRjaD4NCisJPG1hdGNoPg0KKwkJPHRlc3QgbmFtZT0iZmFtaWx5Ij4NCisJCQk8c3RyaW5nPlRhYmFzc29tPC9zdHJpbmc+DQorCQk8L3Rlc3Q+DQorCQk8ZWRpdCBuYW1lPSJmYW1pbHkiIG1vZGU9ImFwcGVuZCIgYmluZGluZz0ic2FtZSI+DQorCQkJPHN0cmluZz5QZXJzaWFuX2ZhbnRhc3k8L3N0cmluZz4NCisJCTwvZWRpdD4NCisJPC9tYXRjaD4NCisNCisJPCEtLSBQZXJzaWFuX3NxdWFyZSBjbGFzcyAtLT4NCisJPG1hdGNoPg0KKwkJPHRlc3QgbmFtZT0iZmFtaWx5Ij4NCisJCQk8c3RyaW5nPkFyc2hpYTwvc3RyaW5nPg0KKwkJPC90ZXN0Pg0KKwkJPGVkaXQgbmFtZT0iZmFtaWx5IiBtb2RlPSJhcHBlbmQiIGJpbmRpbmc9InNhbWUiPg0KKwkJCTxzdHJpbmc+UGVyc2lhbl9zcXVhcmU8L3N0cmluZz4NCisJCTwvZWRpdD4NCisJPC9tYXRjaD4NCisJPG1hdGNoPg0KKwkJPHRlc3QgbmFtZT0iZmFtaWx5Ij4NCisJCQk8c3RyaW5nPk5hc2ltPC9zdHJpbmc+DQorCQk8L3Rlc3Q+DQorCQk8ZWRpdCBuYW1lPSJmYW1pbHkiIG1vZGU9ImFwcGVuZCIgYmluZGluZz0ic2FtZSI+DQorCQkJPHN0cmluZz5QZXJzaWFuX3NxdWFyZTwvc3RyaW5nPg0KKwkJPC9lZGl0Pg0KKwk8L21hdGNoPg0KKwk8bWF0Y2g+DQorCQk8dGVzdCBuYW1lPSJmYW1pbHkiPg0KKwkJCTxzdHJpbmc+RWxoYW08L3N0cmluZz4NCisJCTwvdGVzdD4NCisJCTxlZGl0IG5hbWU9ImZhbWlseSIgbW9kZT0iYXBwZW5kIiBiaW5kaW5nPSJzYW1lIj4NCisJCQk8c3RyaW5nPkZhcm5hejwvc3RyaW5nPg0KKwkJPC9lZGl0Pg0KKwkJPGVkaXQgbmFtZT0iZmFtaWx5IiBtb2RlPSJhcHBlbmQiIGJpbmRpbmc9InNhbWUiPg0KKwkJCTxzdHJpbmc+UGVyc2lhbl9zcXVhcmU8L3N0cmluZz4NCisJCTwvZWRpdD4NCisJPC9tYXRjaD4NCisJPG1hdGNoPg0KKwkJPHRlc3QgbmFtZT0iZmFtaWx5Ij4NCisJCQk8c3RyaW5nPkZhcm5hejwvc3RyaW5nPg0KKwkJPC90ZXN0Pg0KKwkJPGVkaXQgbmFtZT0iZmFtaWx5IiBtb2RlPSJhcHBlbmQiIGJpbmRpbmc9InNhbWUiPg0KKwkJCTxzdHJpbmc+RWxoYW08L3N0cmluZz4NCisJCTwvZWRpdD4NCisJCTxlZGl0IG5hbWU9ImZhbWlseSIgbW9kZT0iYXBwZW5kIiBiaW5kaW5nPSJzYW1lIj4NCisJCQk8c3RyaW5nPlBlcnNpYW5fc3F1YXJlPC9zdHJpbmc+DQorCQk8L2VkaXQ+DQorCTwvbWF0Y2g+DQorCTxtYXRjaD4NCisJCTx0ZXN0IG5hbWU9ImZhbWlseSI+DQorCQkJPHN0cmluZz5TaW5hPC9zdHJpbmc+DQorCQk8L3Rlc3Q+DQorCQk8ZWRpdCBuYW1lPSJmYW1pbHkiIG1vZGU9ImFwcGVuZCIgYmluZGluZz0ic2FtZSI+DQorCQkJPHN0cmluZz5QZXJzaWFuX3NxdWFyZTwvc3RyaW5nPg0KKwkJPC9lZGl0Pg0KKwk8L21hdGNoPg0KKw0KKzwhLS0gRm9udCBvcmRlcmluZyBwZXIgY2xhc3MgLS0+DQorDQorCTwhLS0gUGVyc2lhbl90aXRsZSBjbGFzcyAtLT4NCisJPG1hdGNoPg0KKwkJPHRlc3QgbmFtZT0iZmFtaWx5Ij4NCisJCQk8c3RyaW5nPlBlcnNpYW5fdGl0bGU8L3N0cmluZz4NCisJCTwvdGVzdD4NCisJCTxlZGl0IG5hbWU9ImZhbWlseSIgbW9kZT0iYXBwZW5kIiBiaW5kaW5nPSJzYW1lIj4NCisJCQk8c3RyaW5nPlBlcnNpYW5fc2VyaWY8L3N0cmluZz4NCisJCTwvZWRpdD4NCisJCTxlZGl0IG5hbWU9ImZhbWlseSIgbW9kZT0iYXBwZW5kIiBiaW5kaW5nPSJzYW1lIj4NCisJCQk8c3RyaW5nPkphZGlkPC9zdHJpbmc+DQorCQk8L2VkaXQ+DQorCQk8ZWRpdCBuYW1lPSJmYW1pbHkiIG1vZGU9ImFwcGVuZCIgYmluZGluZz0ic2FtZSI+DQorCQkJPHN0cmluZz5UaXRyPC9zdHJpbmc+DQorCQk8L2VkaXQ+DQorCTwvbWF0Y2g+DQorDQorCTwhLS0gUGVyc2lhbl9mYW50YXN5IGNsYXNzIC0tPg0KKwk8bWF0Y2g+DQorCQk8dGVzdCBuYW1lPSJmYW1pbHkiPg0KKwkJCTxzdHJpbmc+UGVyc2lhbl9mYW50YXN5PC9zdHJpbmc+DQorCQk8L3Rlc3Q+DQorCQk8ZWRpdCBuYW1lPSJmYW1pbHkiIG1vZGU9ImFwcGVuZCIgYmluZGluZz0ic2FtZSI+DQorCQkJPHN0cmluZz5QZXJzaWFuX3NxdWFyZTwvc3RyaW5nPg0KKwkJPC9lZGl0Pg0KKwkJPGVkaXQgbmFtZT0iZmFtaWx5IiBtb2RlPSJhcHBlbmQiIGJpbmRpbmc9InNhbWUiPg0KKwkJCTxzdHJpbmc+VGFiYXNzb208L3N0cmluZz4NCisJCTwvZWRpdD4NCisJCTxlZGl0IG5hbWU9ImZhbWlseSIgbW9kZT0iYXBwZW5kIiBiaW5kaW5nPSJzYW1lIj4NCisJCQk8c3RyaW5nPkZhbnRlemk8L3N0cmluZz4NCisJCTwvZWRpdD4NCisJCTxlZGl0IG5hbWU9ImZhbWlseSIgbW9kZT0iYXBwZW5kIiBiaW5kaW5nPSJzYW1lIj4NCisJCQk8c3RyaW5nPkthbXJhbjwvc3RyaW5nPg0KKwkJPC9lZGl0Pg0KKwkJPGVkaXQgbmFtZT0iZmFtaWx5IiBtb2RlPSJhcHBlbmQiIGJpbmRpbmc9InNhbWUiPg0KKwkJCTxzdHJpbmc+SG9tYTwvc3RyaW5nPg0KKwkJPC9lZGl0Pg0KKwk8L21hdGNoPg0KKw0KKwk8IS0tIFBlcnNpYW5fc3F1YXJlIGNsYXNzIC0tPg0KKwk8bWF0Y2g+DQorCQk8dGVzdCBuYW1lPSJmYW1pbHkiPg0KKwkJCTxzdHJpbmc+UGVyc2lhbl9zcXVhcmU8L3N0cmluZz4NCisJCTwvdGVzdD4NCisJCTxlZGl0IG5hbWU9ImZhbWlseSIgbW9kZT0iYXBwZW5kIiBiaW5kaW5nPSJzYW1lIj4NCisJCQk8c3RyaW5nPlBlcnNpYW5fc2VyaWY8L3N0cmluZz4NCisJCTwvZWRpdD4NCisJCTxlZGl0IG5hbWU9ImZhbWlseSIgbW9kZT0iYXBwZW5kIiBiaW5kaW5nPSJzYW1lIj4NCisJCQk8c3RyaW5nPlNpbmE8L3N0cmluZz4NCisJCTwvZWRpdD4NCisJCTxlZGl0IG5hbWU9ImZhbWlseSIgbW9kZT0iYXBwZW5kIiBiaW5kaW5nPSJzYW1lIj4NCisJCQk8c3RyaW5nPk5hc2ltPC9zdHJpbmc+DQorCQk8L2VkaXQ+DQorCQk8ZWRpdCBuYW1lPSJmYW1pbHkiIG1vZGU9ImFwcGVuZCIgYmluZGluZz0ic2FtZSI+DQorCQkJPHN0cmluZz5GYXJuYXo8L3N0cmluZz4NCisJCTwvZWRpdD4NCisJCTxlZGl0IG5hbWU9ImZhbWlseSIgbW9kZT0iYXBwZW5kIiBiaW5kaW5nPSJzYW1lIj4NCisJCQk8c3RyaW5nPkVsaGFtPC9zdHJpbmc+DQorCQk8L2VkaXQ+DQorCQk8ZWRpdCBuYW1lPSJmYW1pbHkiIG1vZGU9ImFwcGVuZCIgYmluZGluZz0ic2FtZSI+DQorCQkJPHN0cmluZz5BcnNoaWE8L3N0cmluZz4NCisJCTwvZWRpdD4NCisJPC9tYXRjaD4NCisNCis8IS0tIFJlZ2lzdGVyIHRoZSBmb250cyB0aGF0IHdlIGFjdHVhbGx5IGRvIGhhdmUgLS0+DQorDQorCTxtYXRjaCB0YXJnZXQ9ImZvbnQiPg0KKwkJPHRlc3QgbmFtZT0iZmFtaWx5Ij4NCisJCQk8c3RyaW5nPkVsaGFtPC9zdHJpbmc+DQorCQk8L3Rlc3Q+DQorCQk8ZWRpdCBuYW1lPSJmb3VuZHJ5Ij4NCisJCQk8c3RyaW5nPmZhcnNpd2ViPC9zdHJpbmc+DQorCQk8L2VkaXQ+DQorCTwvbWF0Y2g+DQorDQorCTxtYXRjaCB0YXJnZXQ9ImZvbnQiPg0KKwkJPHRlc3QgbmFtZT0iZmFtaWx5Ij4NCisJCQk8c3RyaW5nPkhvbWE8L3N0cmluZz4NCisJCTwvdGVzdD4NCisJCTxlZGl0IG5hbWU9ImZvdW5kcnkiPg0KKwkJCTxzdHJpbmc+ZmFyc2l3ZWI8L3N0cmluZz4NCisJCTwvZWRpdD4NCisJPC9tYXRjaD4NCisNCisJPG1hdGNoIHRhcmdldD0iZm9udCI+DQorCQk8dGVzdCBuYW1lPSJmYW1pbHkiPg0KKwkJCTxzdHJpbmc+S29vZGFrPC9zdHJpbmc+DQorCQk8L3Rlc3Q+DQorCQk8ZWRpdCBuYW1lPSJmb3VuZHJ5Ij4NCisJCQk8c3RyaW5nPmZhcnNpd2ViPC9zdHJpbmc+DQorCQk8L2VkaXQ+DQorCTwvbWF0Y2g+DQorDQorCTxtYXRjaCB0YXJnZXQ9ImZvbnQiPg0KKwkJPHRlc3QgbmFtZT0iZmFtaWx5Ij4NCisJCQk8c3RyaW5nPk5hemxpPC9zdHJpbmc+DQorCQk8L3Rlc3Q+DQorCQk8ZWRpdCBuYW1lPSJmb3VuZHJ5Ij4NCisJCQk8c3RyaW5nPmZhcnNpd2ViPC9zdHJpbmc+DQorCQk8L2VkaXQ+DQorCTwvbWF0Y2g+DQorDQorCTxtYXRjaCB0YXJnZXQ9ImZvbnQiPg0KKwkJPHRlc3QgbmFtZT0iZmFtaWx5Ij4NCisJCQk8c3RyaW5nPlJveWE8L3N0cmluZz4NCisJCTwvdGVzdD4NCisJCTxlZGl0IG5hbWU9ImZvdW5kcnkiPg0KKwkJCTxzdHJpbmc+ZmFyc2l3ZWI8L3N0cmluZz4NCisJCTwvZWRpdD4NCisJPC9tYXRjaD4NCisNCisJPG1hdGNoIHRhcmdldD0iZm9udCI+DQorCQk8dGVzdCBuYW1lPSJmYW1pbHkiPg0KKwkJCTxzdHJpbmc+VGVyYWZpazwvc3RyaW5nPg0KKwkJPC90ZXN0Pg0KKwkJPGVkaXQgbmFtZT0iZm91bmRyeSI+DQorCQkJPHN0cmluZz5mYXJzaXdlYjwvc3RyaW5nPg0KKwkJPC9lZGl0Pg0KKwk8L21hdGNoPg0KKw0KKwk8bWF0Y2ggdGFyZ2V0PSJmb250Ij4NCisJCTx0ZXN0IG5hbWU9ImZhbWlseSI+DQorCQkJPHN0cmluZz5UaXRyPC9zdHJpbmc+DQorCQk8L3Rlc3Q+DQorCQk8ZWRpdCBuYW1lPSJmb3VuZHJ5Ij4NCisJCQk8c3RyaW5nPmZhcnNpd2ViPC9zdHJpbmc+DQorCQk8L2VkaXQ+DQorCTwvbWF0Y2g+DQorDQorDQorPCEtLSBPdXIgZm9udHMgc2hvdWxkIG9ibGlxdWUgdG8gdGhlIG90aGVyIHNpZGUgKFRVUk5FRC1PRkYpIC0tPg0KKw0KKwk8bWF0Y2ggdGFyZ2V0PSJmb250Ij4NCisJCTx0ZXN0IG5hbWU9ImZvdW5kcnkiPg0KKwkJCTwhLS1zdHJpbmc+ZmFyc2l3ZWI8L3N0cmluZy0tPg0KKwkJCTxzdHJpbmc+VFVSTkVELU9GRjwvc3RyaW5nPg0KKwkJPC90ZXN0Pg0KKwkJPHRlc3QgbmFtZT0iZm91bmRyeSI+DQorCQkJPHN0cmluZz5mYXJzaXdlYjwvc3RyaW5nPg0KKwkJPC90ZXN0Pg0KKwkJPCEtLSBjaGVjayB0byBzZWUgaWYgdGhlIGZvbnQgaXMgcm9tYW4gLS0+DQorCQk8dGVzdCBuYW1lPSJzbGFudCI+DQorCQkJPGNvbnN0PnJvbWFuPC9jb25zdD4NCisJCTwvdGVzdD4NCisJCTwhLS0gY2hlY2sgdG8gc2VlIGlmIHRoZSBwYXR0ZXJuIHJlcXVlc3RlZCBub24tcm9tYW4gLS0+DQorCQk8dGVzdCB0YXJnZXQ9InBhdHRlcm4iIG5hbWU9InNsYW50IiBjb21wYXJlPSJub3RfZXEiPg0KKwkJCTxjb25zdD5yb21hbjwvY29uc3Q+DQorCQk8L3Rlc3Q+DQorCQk8IS0tIG11bHRpcGx5IHRoZSBtYXRyaXggdG8gc2xhbnQgdGhlIGZvbnQgLS0+DQorCQk8ZWRpdCBuYW1lPSJtYXRyaXgiIG1vZGU9ImFzc2lnbiI+DQorCQkJPHRpbWVzPg0KKwkJCQk8bmFtZT5tYXRyaXg8L25hbWU+DQorCQkJCTxtYXRyaXg+PGRvdWJsZT4xPC9kb3VibGU+PGRvdWJsZT4tMC4yPC9kb3VibGU+DQorCQkJCQk8ZG91YmxlPjA8L2RvdWJsZT48ZG91YmxlPjE8L2RvdWJsZT4NCisJCQkJPC9tYXRyaXg+DQorCQkJPC90aW1lcz4NCisJCTwvZWRpdD4NCisJCTwhLS0gcHJldGVuZCB0aGUgZm9udCBpcyBvYmxpcXVlIG5vdyAtLT4NCisJCTxlZGl0IG5hbWU9InNsYW50IiBtb2RlPSJhc3NpZ24iPg0KKwkJCTxjb25zdD5vYmxpcXVlPC9jb25zdD4NCisJCTwvZWRpdD4NCisJPC9tYXRjaD4NCisNCisNCis8IS0tDQorICBXZSBjYW4ndCBoaW50IG91ciBmb250cyB3ZWxsLCBzbyB0dXJuIG9mZiBoaW50aW5nLg0KKyAgTW9yZW92ZXIsIHRoZSBiaXRtYXBzIHdlIGhhdmUgZGVzaWduZWQgKHdlbGwsIHRoZXkNCisgIGhhdmUgZGVzaWduZWQpLCBzdWNrLCBzbyBkaXNhYmxlIHRoZW0gdG9vLg0KKyAgLS0+DQorDQorCTxtYXRjaCB0YXJnZXQ9ImZvbnQiPg0KKwkJPHRlc3QgbmFtZT0iZm91bmRyeSI+DQorCQkJPHN0cmluZz5mYXJzaXdlYjwvc3RyaW5nPg0KKwkJPC90ZXN0Pg0KKwkJPGVkaXQgbmFtZT0iYXV0b2hpbnQiPg0KKwkJCTxib29sPmZhbHNlPC9ib29sPg0KKwkJPC9lZGl0Pg0KKwkJPGVkaXQgbmFtZT0iaGludGluZyI+DQorCQkJPGJvb2w+ZmFsc2U8L2Jvb2w+DQorCQk8L2VkaXQ+DQorIAkJPGVkaXQgbmFtZT0iZW1iZWRkZWRiaXRtYXAiPg0KKyAJCQk8Ym9vbD5mYWxzZTwvYm9vbD4NCisgCQk8L2VkaXQ+DQorCTwvbWF0Y2g+DQorDQorDQorPCEtLSBBbGlhcyBvdXIgZm9udHMgdG8gY29tbW9uIGZhbWlsaWVzIC0tPg0KKw0KKwk8IS0tIFBlcnNpYW4gc2VyaWYgZm9udHMgLS0+DQorCTxhbGlhcz4NCisJCTxmYW1pbHk+c2VyaWY8L2ZhbWlseT4NCisJCTxhY2NlcHQ+DQorCQkJPGZhbWlseT5OYXpsaTwvZmFtaWx5Pg0KKwkJCTxmYW1pbHk+TG90b29zPC9mYW1pbHk+DQorCQkJPGZhbWlseT5NaXRyYTwvZmFtaWx5Pg0KKwkJCTxmYW1pbHk+RmVyZG9zaTwvZmFtaWx5Pg0KKwkJCTxmYW1pbHk+QmFkcjwvZmFtaWx5Pg0KKwkJCTxmYW1pbHk+WmFyPC9mYW1pbHk+DQorCQk8L2FjY2VwdD4NCisJPC9hbGlhcz4NCisNCisJPCEtLSBQZXJzaWFuIHNhbnMtc2VyaWYgZm9udHMgLS0+DQorCTxhbGlhcz4NCisJCTxmYW1pbHk+c2Fucy1zZXJpZjwvZmFtaWx5Pg0KKwkJPGFjY2VwdD4NCisJCQk8ZmFtaWx5PlJveWE8L2ZhbWlseT4NCisJCQk8ZmFtaWx5Pktvb2RhazwvZmFtaWx5Pg0KKwkJCTxmYW1pbHk+VGVyYWZpazwvZmFtaWx5Pg0KKwkJPC9hY2NlcHQ+DQorCTwvYWxpYXM+DQorDQorCTwhLS0gUGVyc2lhbiBtb25vc3BhY2UgZm9udHMgLS0+DQorCTxhbGlhcz4NCisJCTxmYW1pbHk+bW9ub3NwYWNlPC9mYW1pbHk+DQorCQk8YWNjZXB0Pg0KKwkJCTwhLS0gTm90IHJlYWxseSBtb25vc3BhY2UgLS0+DQorCQkJPGZhbWlseT5UZXJhZmlrPC9mYW1pbHk+DQorCQk8L2FjY2VwdD4NCisJPC9hbGlhcz4NCisNCisNCis8IS0tIFVzZSBUaXRyIGluIHRpdGxlcyAtLT4NCisNCisJPCEtLSBCb3RoIHNlcmlmLi4uIC0tPg0KKwk8bWF0Y2g+DQorCQk8dGVzdCBuYW1lPSJmYW1pbHkiPg0KKwkJCTxzdHJpbmc+c2VyaWY8L3N0cmluZz4NCisJCTwvdGVzdD4NCisJCTx0ZXN0IG5hbWU9IndlaWdodCIgY29tcGFyZT0ibW9yZV9lcSI+DQorCQkJPGludD4yMDA8L2ludD4NCisJCTwvdGVzdD4NCisJCTx0ZXN0IG5hbWU9InNpemUiIGNvbXBhcmU9Im1vcmVfZXEiPg0KKwkJCTxkb3VibGU+MjQ8L2RvdWJsZT4NCisJCTwvdGVzdD4NCisJCTxlZGl0IG5hbWU9ImZhbWlseSIgbW9kZT0icHJlcGVuZCI+DQorCQkJPHN0cmluZz5UaXRyPC9zdHJpbmc+DQorCQk8L2VkaXQ+DQorCTwvbWF0Y2g+DQorDQorCTwhLS0gYW5kIHNhbnMtc2VyaWYuIC0tPg0KKwk8bWF0Y2g+DQorCQk8dGVzdCBuYW1lPSJmYW1pbHkiPg0KKwkJCTxzdHJpbmc+c2Fucy1zZXJpZjwvc3RyaW5nPg0KKwkJPC90ZXN0Pg0KKwkJPHRlc3QgbmFtZT0id2VpZ2h0IiBjb21wYXJlPSJtb3JlX2VxIj4NCisJCQk8aW50PjIwMDwvaW50Pg0KKwkJPC90ZXN0Pg0KKwkJPHRlc3QgbmFtZT0ic2l6ZSIgY29tcGFyZT0ibW9yZV9lcSI+DQorCQkJPGRvdWJsZT4yNDwvZG91YmxlPg0KKwkJPC90ZXN0Pg0KKwkJPGVkaXQgbmFtZT0iZmFtaWx5IiBtb2RlPSJwcmVwZW5kIj4NCisJCQk8c3RyaW5nPlRpdHI8L3N0cmluZz4NCisJCTwvZWRpdD4NCisJPC9tYXRjaD4NCisNCisJPCEtLSBhbmQgbW9yZS4gLS0+DQorCTxtYXRjaD4NCisJCTx0ZXN0IG5hbWU9ImZhbWlseSI+DQorCQkJPHN0cmluZz5QZXJzaWFuX3NhbnNzZXJpZl9kZWZhdWx0PC9zdHJpbmc+DQorCQk8L3Rlc3Q+DQorCQk8dGVzdCBuYW1lPSJ3ZWlnaHQiIGNvbXBhcmU9Im1vcmVfZXEiPg0KKwkJCTxpbnQ+MjAwPC9pbnQ+DQorCQk8L3Rlc3Q+DQorCQk8dGVzdCBuYW1lPSJzaXplIiBjb21wYXJlPSJtb3JlX2VxIj4NCisJCQk8ZG91YmxlPjI0PC9kb3VibGU+DQorCQk8L3Rlc3Q+DQorCQk8ZWRpdCBuYW1lPSJmYW1pbHkiIG1vZGU9InByZXBlbmQiIGJpbmRpbmc9InNhbWUiPg0KKwkJCTxzdHJpbmc+VGl0cjwvc3RyaW5nPg0KKwkJPC9lZGl0Pg0KKwk8L21hdGNoPg0KKw0KKw0KKzwhLS0gRGVmYXVsdCBzdWJzdGl0dXRlZCBmb3IgZGVwcmVjYXRlZCBzYW5zLXNlcmlmIGZvbnRzIC0tPg0KKw0KKwk8bWF0Y2g+DQorCQk8dGVzdCBuYW1lPSJmYW1pbHkiPg0KKwkJCTxzdHJpbmc+UGVyc2lhbl9zYW5zc2VyaWZfZGVmYXVsdDwvc3RyaW5nPg0KKwkJPC90ZXN0Pg0KKwkJPGVkaXQgbmFtZT0iZmFtaWx5IiBtb2RlPSJhc3NpZ24iIGJpbmRpbmc9InNhbWUiPg0KKwkJCTxzdHJpbmc+Um95YTwvc3RyaW5nPg0KKwkJPC9lZGl0Pg0KKwk8L21hdGNoPg0KKw0KKzwvZm9udGNvbmZpZz4NCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS9oZWxwZXJzL0dyYXBodml6Mi4yNi4zL2V0Yy9mb250cy9jb25mLmQvNjUtbm9ubGF0aW4uY29uZiBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL2hlbHBlcnMvR3JhcGh2aXoyLjI2LjMvZXRjL2ZvbnRzL2NvbmYuZC82NS1ub25sYXRpbi5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0N2VhYTIKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS9oZWxwZXJzL0dyYXBodml6Mi4yNi4zL2V0Yy9mb250cy9jb25mLmQvNjUtbm9ubGF0aW4uY29uZgpAQCAtMCwwICsxLDM4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiPz4NCis8IURPQ1RZUEUgZm9udGNvbmZpZyBTWVNURU0gImZvbnRzLmR0ZCI+DQorPGZvbnRjb25maWc+DQorCTxhbGlhcz4NCisJCTxmYW1pbHk+c2VyaWY8L2ZhbWlseT4NCisJCTxwcmVmZXI+DQorCQkJPGZhbWlseT5GcmFuayBSdWVobDwvZmFtaWx5Pg0KKwkJCTxmYW1pbHk+TWdPcGVuIENhbm9uaWNhPC9mYW1pbHk+DQorCQkJPGZhbWlseT5Lb2NoaSBNaW5jaG88L2ZhbWlseT4NCisJCQk8ZmFtaWx5PkFSIFBMIFN1bmd0aUwgR0I8L2ZhbWlseT4NCisJCQk8ZmFtaWx5PkFSIFBMIE1pbmd0aTJMIEJpZzU8L2ZhbWlseT4NCisJCQk8ZmFtaWx5Pu+8re+8syDmmI7mnJ08L2ZhbWlseT4NCisJCQk8ZmFtaWx5PkJhZWttdWsgQmF0YW5nPC9mYW1pbHk+DQorCQk8L3ByZWZlcj4NCisJPC9hbGlhcz4NCisJPGFsaWFzPg0KKwkJPGZhbWlseT5zYW5zLXNlcmlmPC9mYW1pbHk+DQorCQk8cHJlZmVyPg0KKwkJCTxmYW1pbHk+TmFjaGxpZWxpPC9mYW1pbHk+DQorCQkJPGZhbWlseT5NZ09wZW4gTW9kYXRhPC9mYW1pbHk+DQorCQkJPGZhbWlseT5Lb2NoaSBHb3RoaWM8L2ZhbWlseT4NCisJCQk8ZmFtaWx5PkFSIFBMIEthaXRpTSBHQjwvZmFtaWx5Pg0KKwkJCTxmYW1pbHk+QVIgUEwgS2FpdGlNIEJpZzU8L2ZhbWlseT4NCisJCQk8ZmFtaWx5Pu+8re+8syDjgrTjgrfjg4Pjgq88L2ZhbWlseT4NCisJCQk8ZmFtaWx5PkJhZWttdWsgRG90dW08L2ZhbWlseT4NCisJCQk8ZmFtaWx5PlNpbVN1bjwvZmFtaWx5Pg0KKwkJPC9wcmVmZXI+DQorCTwvYWxpYXM+DQorCTxhbGlhcz4NCisJCTxmYW1pbHk+bW9ub3NwYWNlPC9mYW1pbHk+DQorCQk8cHJlZmVyPg0KKwkJCTxmYW1pbHk+TWlyaWFtIE1vbm88L2ZhbWlseT4NCisJCQk8ZmFtaWx5PktvY2hpIEdvdGhpYzwvZmFtaWx5Pg0KKwkJCTxmYW1pbHk+QVIgUEwgS2FpdGlNIEdCPC9mYW1pbHk+DQorCQkJPGZhbWlseT5CYWVrbXVrIERvdHVtPC9mYW1pbHk+DQorCQk8L3ByZWZlcj4NCisJPC9hbGlhcz4NCis8L2ZvbnRjb25maWc+DQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvaGVscGVycy9HcmFwaHZpejIuMjYuMy9ldGMvZm9udHMvY29uZi5kLzY5LXVuaWZvbnQuY29uZiBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL2hlbHBlcnMvR3JhcGh2aXoyLjI2LjMvZXRjL2ZvbnRzL2NvbmYuZC82OS11bmlmb250LmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWM1YThkOAotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL2hlbHBlcnMvR3JhcGh2aXoyLjI2LjMvZXRjL2ZvbnRzL2NvbmYuZC82OS11bmlmb250LmNvbmYKQEAgLTAsMCArMSwyNCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+DQorPCFET0NUWVBFIGZvbnRjb25maWcgU1lTVEVNICJmb250cy5kdGQiPg0KKzxmb250Y29uZmlnPg0KKwk8YWxpYXM+DQorCQk8ZmFtaWx5PnNlcmlmPC9mYW1pbHk+DQorCQk8cHJlZmVyPg0KKwkJCTxmYW1pbHk+RnJlZVNlcmlmPC9mYW1pbHk+DQorCQkJPGZhbWlseT5Db2RlMjAwMDwvZmFtaWx5Pg0KKwkJPC9wcmVmZXI+DQorCTwvYWxpYXM+DQorCTxhbGlhcz4NCisJCTxmYW1pbHk+c2Fucy1zZXJpZjwvZmFtaWx5Pg0KKwkJPHByZWZlcj4NCisJCQk8ZmFtaWx5PkZyZWVTYW5zPC9mYW1pbHk+DQorCQkJPGZhbWlseT5BcmlhbCBVbmljb2RlIE1TPC9mYW1pbHk+DQorCQk8L3ByZWZlcj4NCisJPC9hbGlhcz4NCisJPGFsaWFzPg0KKwkJPGZhbWlseT5tb25vc3BhY2U8L2ZhbWlseT4NCisJCTxwcmVmZXI+DQorCQkJPGZhbWlseT5GcmVlTW9ubzwvZmFtaWx5Pg0KKwkJPC9wcmVmZXI+DQorCTwvYWxpYXM+DQorPC9mb250Y29uZmlnPg0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL2hlbHBlcnMvR3JhcGh2aXoyLjI2LjMvZXRjL2ZvbnRzL2NvbmYuZC84MC1kZWxpY2lvdXMuY29uZiBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL2hlbHBlcnMvR3JhcGh2aXoyLjI2LjMvZXRjL2ZvbnRzL2NvbmYuZC84MC1kZWxpY2lvdXMuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODM4MWRkCi0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvaGVscGVycy9HcmFwaHZpejIuMjYuMy9ldGMvZm9udHMvY29uZi5kLzgwLWRlbGljaW91cy5jb25mCkBAIC0wLDAgKzEsMjAgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/Pg0KKzwhRE9DVFlQRSBmb250Y29uZmlnIFNZU1RFTSAiZm9udHMuZHRkIj4NCis8IS0tIC9ldGMvZm9udHMvY29uZi5kLzYwLWRlbGljaW91cy5jb25mIC0tPg0KKzxmb250Y29uZmlnPg0KKzwhLS0gRml4LXVwcyBmb3IgRGVsaWNpb3VzIGZhbWlseSAtLT4NCisNCis8IS0tIERlbGljaW91cyAnaGVhdnknIHZhcmlhbnQgc2F5cyBpdHMgTWVkaXVtIHdlaWdodCAtLT4NCis8bWF0Y2ggdGFyZ2V0PSJzY2FuIj4NCisJPHRlc3QgbmFtZT0iZmFtaWx5Ij4NCisJCTxzdHJpbmc+RGVsaWNpb3VzPC9zdHJpbmc+DQorCTwvdGVzdD4NCisJPHRlc3QgbmFtZT0ic3R5bGUiPg0KKwkJPHN0cmluZz5IZWF2eTwvc3RyaW5nPg0KKwk8L3Rlc3Q+DQorCTxlZGl0IG5hbWU9IndlaWdodCI+DQorCQk8Y29uc3Q+aGVhdnk8L2NvbnN0Pg0KKwk8L2VkaXQ+DQorPC9tYXRjaD4NCisNCis8L2ZvbnRjb25maWc+DQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvaGVscGVycy9HcmFwaHZpejIuMjYuMy9ldGMvZm9udHMvY29uZi5kLzkwLXN5bnRoZXRpYy5jb25mIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvaGVscGVycy9HcmFwaHZpejIuMjYuMy9ldGMvZm9udHMvY29uZi5kLzkwLXN5bnRoZXRpYy5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1NDEzZjkKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS9oZWxwZXJzL0dyYXBodml6Mi4yNi4zL2V0Yy9mb250cy9jb25mLmQvOTAtc3ludGhldGljLmNvbmYKQEAgLTAsMCArMSw2NCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+DQorPCFET0NUWVBFIGZvbnRjb25maWcgU1lTVEVNICJmb250cy5kdGQiPg0KKzxmb250Y29uZmlnPg0KKzwhLS0gDQorIEFydGlmaWNpYWwgb2JsaXF1ZSBmb3IgZm9udHMgd2l0aG91dCBhbiBpdGFsaWMgb3Igb2JsaXF1ZSB2ZXJzaW9uDQorIC0tPg0KKyANCisJPG1hdGNoIHRhcmdldD0iZm9udCI+DQorCQk8IS0tIGNoZWNrIHRvIHNlZSBpZiB0aGUgZm9udCBpcyByb21hbiAtLT4NCisJCTx0ZXN0IG5hbWU9InNsYW50Ij4NCisJCQk8Y29uc3Q+cm9tYW48L2NvbnN0Pg0KKwkJPC90ZXN0Pg0KKwkJPCEtLSBjaGVjayB0byBzZWUgaWYgdGhlIHBhdHRlcm4gcmVxdWVzdGVkIG5vbi1yb21hbiAtLT4NCisJCTx0ZXN0IHRhcmdldD0icGF0dGVybiIgbmFtZT0ic2xhbnQiIGNvbXBhcmU9Im5vdF9lcSI+DQorCQkJPGNvbnN0PnJvbWFuPC9jb25zdD4NCisJCTwvdGVzdD4NCisJCTwhLS0gbXVsdGlwbHkgdGhlIG1hdHJpeCB0byBzbGFudCB0aGUgZm9udCAtLT4NCisJCTxlZGl0IG5hbWU9Im1hdHJpeCIgbW9kZT0iYXNzaWduIj4NCisJCQk8dGltZXM+DQorCQkJCTxuYW1lPm1hdHJpeDwvbmFtZT4NCisJCQkJPG1hdHJpeD48ZG91YmxlPjE8L2RvdWJsZT48ZG91YmxlPjAuMjwvZG91YmxlPg0KKwkJCQkJPGRvdWJsZT4wPC9kb3VibGU+PGRvdWJsZT4xPC9kb3VibGU+DQorCQkJCTwvbWF0cml4Pg0KKwkJCTwvdGltZXM+DQorCQk8L2VkaXQ+DQorCQk8IS0tIHByZXRlbmQgdGhlIGZvbnQgaXMgb2JsaXF1ZSBub3cgLS0+DQorCQk8ZWRpdCBuYW1lPSJzbGFudCIgbW9kZT0iYXNzaWduIj4NCisJCQk8Y29uc3Q+b2JsaXF1ZTwvY29uc3Q+DQorCQk8L2VkaXQ+DQorICAgICAgICAgICAgICAgIDwhLS0gYW5kIGRpc2FibGUgZW1iZWRkZWQgYml0bWFwcyBmb3IgYXJ0aWZpY2lhbCBvYmxpcXVlIC0tPg0KKyAgICAgICAgICAgICAgICA8ZWRpdCBuYW1lPSJlbWJlZGRlZGJpdG1hcCIgbW9kZT0iYXNzaWduIj4NCisgICAgICAgICAgICAgICAgICAgICAgICA8Ym9vbD5mYWxzZTwvYm9vbD4NCisgICAgICAgICAgICAgICAgPC9lZGl0Pg0KKwk8L21hdGNoPg0KKw0KKzwhLS0NCisgU3ludGhldGljIGVtYm9sZGVuaW5nIGZvciBmb250cyB0aGF0IGRvIG5vdCBoYXZlIGJvbGQgZmFjZSBhdmFpbGFibGUNCisgLS0+DQorDQorCTxtYXRjaCB0YXJnZXQ9ImZvbnQiPg0KKwkJPCEtLSBjaGVjayB0byBzZWUgaWYgdGhlIGZvbnQgaXMganVzdCByZWd1bGFyIC0tPg0KKwkJPHRlc3QgbmFtZT0id2VpZ2h0IiBjb21wYXJlPSJsZXNzX2VxIj4NCisJCQk8Y29uc3Q+bWVkaXVtPC9jb25zdD4NCisJCTwvdGVzdD4NCisJCTwhLS0gY2hlY2sgdG8gc2VlIGlmIHRoZSBwYXR0ZXJuIHJlcXVlc3RzIGJvbGQgLS0+DQorCQk8dGVzdCB0YXJnZXQ9InBhdHRlcm4iIG5hbWU9IndlaWdodCIgY29tcGFyZT0ibW9yZSI+DQorCQkJPGNvbnN0Pm1lZGl1bTwvY29uc3Q+DQorCQk8L3Rlc3Q+DQorCQk8IS0tDQorCQkgIHNldCB0aGUgZW1ib2xkZW4gZmxhZw0KKwkJICBuZWVkZWQgZm9yIGFwcGxpY2F0aW9ucyB1c2luZyBjYWlybywgZS5nLiBndWNoYXJtYXAsIGdlZGl0LCAuLi4NCisJCS0tPg0KKwkJPGVkaXQgbmFtZT0iZW1ib2xkZW4iIG1vZGU9ImFzc2lnbiI+DQorCQkJPGJvb2w+dHJ1ZTwvYm9vbD4NCisJCTwvZWRpdD4NCisJCTwhLS0NCisJCSBzZXQgd2VpZ2h0IHRvIGJvbGQNCisJCSBuZWVkZWQgZm9yIGFwcGxpY2F0aW9ucyB1c2luZyBYZnQgZGlyZWN0bHksIGUuZy4gRmlyZWZveCwgLi4uDQorCQktLT4NCisJCTxlZGl0IG5hbWU9IndlaWdodCIgbW9kZT0iYXNzaWduIj4NCisJCQk8Y29uc3Q+Ym9sZDwvY29uc3Q+DQorCQk8L2VkaXQ+DQorCTwvbWF0Y2g+DQorPC9mb250Y29uZmlnPg0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL2hlbHBlcnMvR3JhcGh2aXoyLjI2LjMvZXRjL2ZvbnRzL2ZvbnRzLmNvbmYgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS9oZWxwZXJzL0dyYXBodml6Mi4yNi4zL2V0Yy9mb250cy9mb250cy5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxODI1NzYKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS9oZWxwZXJzL0dyYXBodml6Mi4yNi4zL2V0Yy9mb250cy9mb250cy5jb25mCkBAIC0wLDAgKzEsMTU1IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiPz4NCis8IURPQ1RZUEUgZm9udGNvbmZpZyBTWVNURU0gImZvbnRzLmR0ZCI+DQorPCEtLSAvZXRjL2ZvbnRzL2ZvbnRzLmNvbmYgZmlsZSB0byBjb25maWd1cmUgc3lzdGVtIGZvbnQgYWNjZXNzIC0tPg0KKzxmb250Y29uZmlnPg0KKw0KKzwhLS0NCisJRE8gTk9UIEVESVQgVEhJUyBGSUxFLg0KKwlJVCBXSUxMIEJFIFJFUExBQ0VEIFdIRU4gRk9OVENPTkZJRyBJUyBVUERBVEVELg0KKwlMT0NBTCBDSEFOR0VTIEJFTE9ORyBJTiAnbG9jYWwuY29uZicuDQorDQorCVRoZSBpbnRlbnQgb2YgdGhpcyBzdGFuZGFyZCBjb25maWd1cmF0aW9uIGZpbGUgaXMgdG8gYmUgYWRlcXVhdGUgZm9yDQorCW1vc3QgZW52aXJvbm1lbnRzLiAgSWYgeW91IGhhdmUgYSByZWFzb25hYmx5IG5vcm1hbCBlbnZpcm9ubWVudCBhbmQNCisJaGF2ZSBmb3VuZCBwcm9ibGVtcyB3aXRoIHRoaXMgY29uZmlndXJhdGlvbiwgdGhleSBhcmUgcHJvYmFibHkNCisJdGhpbmdzIHRoYXQgb3RoZXJzIHdpbGwgYWxzbyB3YW50IGZpeGVkLiAgUGxlYXNlIHN1Ym1pdCBhbnkNCisJcHJvYmxlbXMgdG8gdGhlIGZvbnRjb25maWcgYnVnemlsbGEgc3lzdGVtIGxvY2F0ZWQgYXQgZm9udGNvbmZpZy5vcmcNCisNCisJTm90ZSB0aGF0IHRoZSBub3JtYWwgJ21ha2UgaW5zdGFsbCcgcHJvY2VkdXJlIGZvciBmb250Y29uZmlnIGlzIHRvDQorCXJlcGxhY2UgYW55IGV4aXN0aW5nIGZvbnRzLmNvbmYgZmlsZSB3aXRoIHRoZSBuZXcgdmVyc2lvbi4gIFBsYWNlDQorCWFueSBsb2NhbCBjdXN0b21pemF0aW9ucyBpbiBsb2NhbC5jb25mIHdoaWNoIHRoaXMgZmlsZSByZWZlcmVuY2VzLg0KKw0KKwlLZWl0aCBQYWNrYXJkDQorLS0+DQorDQorDQorPCEtLSBGb250IGRpcmVjdG9yeSBsaXN0IC0tPg0KKw0KKwk8ZGlyPkM6XFdJTkRPV1NcRm9udHM8L2Rpcj4NCisgICAgPGRpcj5+Ly5mb250czwvZGlyPg0KKw0KKzwhLS0gRm9udCBjYWNoZSBkaXJlY3RvcnkgbGlzdC0tPg0KKw0KKyAJPGNhY2hlZGlyPmM6L3dpbmRvd3M8L2NhY2hlZGlyPiANCisgICAgPGNhY2hlZGlyPn4vLmZvbnRjb25maWc8L2NhY2hlZGlyPg0KKw0KKw0KKzwhLS0NCisgIEFjY2VwdCBkZXByZWNhdGVkICdtb25vJyBhbGlhcywgcmVwbGFjaW5nIGl0IHdpdGggJ21vbm9zcGFjZScNCistLT4NCisJPG1hdGNoIHRhcmdldD0icGF0dGVybiI+DQorCQk8dGVzdCBxdWFsPSJhbnkiIG5hbWU9ImZhbWlseSI+DQorCQkJPHN0cmluZz5tb25vPC9zdHJpbmc+DQorCQk8L3Rlc3Q+DQorCQk8ZWRpdCBuYW1lPSJmYW1pbHkiIG1vZGU9ImFzc2lnbiI+DQorCQkJPHN0cmluZz5tb25vc3BhY2U8L3N0cmluZz4NCisJCTwvZWRpdD4NCisJPC9tYXRjaD4NCisNCisNCisNCisNCis8IS0tDQorICBBY2NlcHQgYWx0ZXJuYXRlICdzYW5zIHNlcmlmJyBzcGVsbGluZywgcmVwbGFjaW5nIGl0IHdpdGggJ3NhbnMtc2VyaWYnDQorLS0+DQorCTxtYXRjaCB0YXJnZXQ9InBhdHRlcm4iPg0KKwkJPHRlc3QgcXVhbD0iYW55IiBuYW1lPSJmYW1pbHkiPg0KKwkJCTxzdHJpbmc+c2FucyBzZXJpZjwvc3RyaW5nPg0KKwkJPC90ZXN0Pg0KKwkJPGVkaXQgbmFtZT0iZmFtaWx5IiBtb2RlPSJhc3NpZ24iPg0KKwkJCTxzdHJpbmc+c2Fucy1zZXJpZjwvc3RyaW5nPg0KKwkJPC9lZGl0Pg0KKwk8L21hdGNoPg0KKw0KKw0KKzwhLS0NCisgIEFjY2VwdCBkZXByZWNhdGVkICdzYW5zJyBhbGlhcywgcmVwbGFjaW5nIGl0IHdpdGggJ3NhbnMtc2VyaWYnDQorLS0+DQorCTxtYXRjaCB0YXJnZXQ9InBhdHRlcm4iPg0KKwkJPHRlc3QgcXVhbD0iYW55IiBuYW1lPSJmYW1pbHkiPg0KKwkJCTxzdHJpbmc+c2Fuczwvc3RyaW5nPg0KKwkJPC90ZXN0Pg0KKwkJPGVkaXQgbmFtZT0iZmFtaWx5IiBtb2RlPSJhc3NpZ24iPg0KKwkJCTxzdHJpbmc+c2Fucy1zZXJpZjwvc3RyaW5nPg0KKwkJPC9lZGl0Pg0KKwk8L21hdGNoPg0KKzwhLS0NCisgIExvYWQgbG9jYWwgc3lzdGVtIGN1c3RvbWl6YXRpb24gZmlsZQ0KKy0tPg0KKwk8aW5jbHVkZSBpZ25vcmVfbWlzc2luZz0ieWVzIj5jb25mLmQ8L2luY2x1ZGU+DQorDQorCTxjb25maWc+DQorPCEtLQ0KKyAgVGhlc2UgYXJlIHRoZSBkZWZhdWx0IFVuaWNvZGUgY2hhcnMgdGhhdCBhcmUgZXhwZWN0ZWQgdG8gYmUgYmxhbmsNCisgIGluIGZvbnRzLiAgQWxsIG90aGVyIGJsYW5rIGNoYXJzIGFyZSBhc3N1bWVkIHRvIGJlIGJyb2tlbiBhbmQNCisgIHdvbid0IGFwcGVhciBpbiB0aGUgcmVzdWx0aW5nIGNoYXJzZXRzDQorIC0tPg0KKwkJPGJsYW5rPg0KKwkJCTxpbnQ+MHgwMDIwPC9pbnQ+CTwhLS0gU1BBQ0UgLS0+DQorCQkJPGludD4weDAwQTA8L2ludD4JPCEtLSBOTy1CUkVBSyBTUEFDRSAtLT4NCisJCQk8aW50PjB4MDBBRDwvaW50Pgk8IS0tIFNPRlQgSFlQSEVOIC0tPg0KKwkJCTxpbnQ+MHgwMzRGPC9pbnQ+CTwhLS0gQ09NQklOSU5HIEdSQVBIRU1FIEpPSU5FUiAtLT4NCisJCQk8aW50PjB4MDYwMDwvaW50Pgk8IS0tIEFSQUJJQyBOVU1CRVIgU0lHTiAtLT4NCisJCQk8aW50PjB4MDYwMTwvaW50Pgk8IS0tIEFSQUJJQyBTSUdOIFNBTkFIIC0tPg0KKwkJCTxpbnQ+MHgwNjAyPC9pbnQ+CTwhLS0gQVJBQklDIEZPT1ROT1RFIE1BUktFUiAtLT4NCisJCQk8aW50PjB4MDYwMzwvaW50Pgk8IS0tIEFSQUJJQyBTSUdOIFNBRkhBIC0tPg0KKwkJCTxpbnQ+MHgwNkREPC9pbnQ+CTwhLS0gQVJBQklDIEVORCBPRiBBWUFIIC0tPg0KKwkJCTxpbnQ+MHgwNzBGPC9pbnQ+CTwhLS0gU1lSSUFDIEFCQlJFVklBVElPTiBNQVJLIC0tPg0KKwkJCTxpbnQ+MHgxMTVGPC9pbnQ+CTwhLS0gSEFOR1VMIENIT1NFT05HIEZJTExFUiAtLT4NCisJCQk8aW50PjB4MTE2MDwvaW50Pgk8IS0tIEhBTkdVTCBKVU5HU0VPTkcgRklMTEVSIC0tPg0KKwkJCTxpbnQ+MHgxNjgwPC9pbnQ+CTwhLS0gT0dIQU0gU1BBQ0UgTUFSSyAtLT4NCisJCQk8aW50PjB4MTdCNDwvaW50Pgk8IS0tIEtITUVSIFZPV0VMIElOSEVSRU5UIEFRIC0tPg0KKwkJCTxpbnQ+MHgxN0I1PC9pbnQ+CTwhLS0gS0hNRVIgVk9XRUwgSU5IRVJFTlQgQUEgLS0+DQorCQkJPGludD4weDE4MEU8L2ludD4JPCEtLSBNT05HT0xJQU4gVk9XRUwgU0VQQVJBVE9SIC0tPg0KKwkJCTxpbnQ+MHgyMDAwPC9pbnQ+CTwhLS0gRU4gUVVBRCAtLT4NCisJCQk8aW50PjB4MjAwMTwvaW50Pgk8IS0tIEVNIFFVQUQgLS0+DQorCQkJPGludD4weDIwMDI8L2ludD4JPCEtLSBFTiBTUEFDRSAtLT4NCisJCQk8aW50PjB4MjAwMzwvaW50Pgk8IS0tIEVNIFNQQUNFIC0tPg0KKwkJCTxpbnQ+MHgyMDA0PC9pbnQ+CTwhLS0gVEhSRUUtUEVSLUVNIFNQQUNFIC0tPg0KKwkJCTxpbnQ+MHgyMDA1PC9pbnQ+CTwhLS0gRk9VUi1QRVItRU0gU1BBQ0UgLS0+DQorCQkJPGludD4weDIwMDY8L2ludD4JPCEtLSBTSVgtUEVSLUVNIFNQQUNFIC0tPg0KKwkJCTxpbnQ+MHgyMDA3PC9pbnQ+CTwhLS0gRklHVVJFIFNQQUNFIC0tPg0KKwkJCTxpbnQ+MHgyMDA4PC9pbnQ+CTwhLS0gUFVOQ1RVQVRJT04gU1BBQ0UgLS0+DQorCQkJPGludD4weDIwMDk8L2ludD4JPCEtLSBUSElOIFNQQUNFIC0tPg0KKwkJCTxpbnQ+MHgyMDBBPC9pbnQ+CTwhLS0gSEFJUiBTUEFDRSAtLT4NCisJCQk8aW50PjB4MjAwQjwvaW50Pgk8IS0tIFpFUk8gV0lEVEggU1BBQ0UgLS0+DQorCQkJPGludD4weDIwMEM8L2ludD4JPCEtLSBaRVJPIFdJRFRIIE5PTi1KT0lORVIgLS0+DQorCQkJPGludD4weDIwMEQ8L2ludD4JPCEtLSBaRVJPIFdJRFRIIEpPSU5FUiAtLT4NCisJCQk8aW50PjB4MjAwRTwvaW50Pgk8IS0tIExFRlQtVE8tUklHSFQgTUFSSyAtLT4NCisJCQk8aW50PjB4MjAwRjwvaW50Pgk8IS0tIFJJR0hULVRPLUxFRlQgTUFSSyAtLT4NCisJCQk8aW50PjB4MjAyODwvaW50Pgk8IS0tIExJTkUgU0VQQVJBVE9SIC0tPg0KKwkJCTxpbnQ+MHgyMDI5PC9pbnQ+CTwhLS0gUEFSQUdSQVBIIFNFUEFSQVRPUiAtLT4NCisJCQk8aW50PjB4MjAyQTwvaW50Pgk8IS0tIExFRlQtVE8tUklHSFQgRU1CRURESU5HIC0tPg0KKwkJCTxpbnQ+MHgyMDJCPC9pbnQ+CTwhLS0gUklHSFQtVE8tTEVGVCBFTUJFRERJTkcgLS0+DQorCQkJPGludD4weDIwMkM8L2ludD4JPCEtLSBQT1AgRElSRUNUSU9OQUwgRk9STUFUVElORyAtLT4NCisJCQk8aW50PjB4MjAyRDwvaW50Pgk8IS0tIExFRlQtVE8tUklHSFQgT1ZFUlJJREUgLS0+DQorCQkJPGludD4weDIwMkU8L2ludD4JPCEtLSBSSUdIVC1UTy1MRUZUIE9WRVJSSURFIC0tPg0KKwkJCTxpbnQ+MHgyMDJGPC9pbnQ+CTwhLS0gTkFSUk9XIE5PLUJSRUFLIFNQQUNFIC0tPg0KKwkJCTxpbnQ+MHgyMDVGPC9pbnQ+CTwhLS0gTUVESVVNIE1BVEhFTUFUSUNBTCBTUEFDRSAtLT4NCisJCQk8aW50PjB4MjA2MDwvaW50Pgk8IS0tIFdPUkQgSk9JTkVSIC0tPg0KKwkJCTxpbnQ+MHgyMDYxPC9pbnQ+CTwhLS0gRlVOQ1RJT04gQVBQTElDQVRJT04gLS0+DQorCQkJPGludD4weDIwNjI8L2ludD4JPCEtLSBJTlZJU0lCTEUgVElNRVMgLS0+DQorCQkJPGludD4weDIwNjM8L2ludD4JPCEtLSBJTlZJU0lCTEUgU0VQQVJBVE9SIC0tPg0KKwkJCTxpbnQ+MHgyMDZBPC9pbnQ+CTwhLS0gSU5ISUJJVCBTWU1NRVRSSUMgU1dBUFBJTkcgLS0+DQorCQkJPGludD4weDIwNkI8L2ludD4JPCEtLSBBQ1RJVkFURSBTWU1NRVRSSUMgU1dBUFBJTkcgLS0+DQorCQkJPGludD4weDIwNkM8L2ludD4JPCEtLSBJTkhJQklUIEFSQUJJQyBGT1JNIFNIQVBJTkcgLS0+DQorCQkJPGludD4weDIwNkQ8L2ludD4JPCEtLSBBQ1RJVkFURSBBUkFCSUMgRk9STSBTSEFQSU5HIC0tPg0KKwkJCTxpbnQ+MHgyMDZFPC9pbnQ+CTwhLS0gTkFUSU9OQUwgRElHSVQgU0hBUEVTIC0tPg0KKwkJCTxpbnQ+MHgyMDZGPC9pbnQ+CTwhLS0gTk9NSU5BTCBESUdJVCBTSEFQRVMgLS0+DQorCQkJPGludD4weDMwMDA8L2ludD4JPCEtLSBJREVPR1JBUEhJQyBTUEFDRSAtLT4NCisJCQk8aW50PjB4MzE2NDwvaW50Pgk8IS0tIEhBTkdVTCBGSUxMRVIgLS0+DQorCQkJPGludD4weEZFRkY8L2ludD4JPCEtLSBaRVJPIFdJRFRIIE5PLUJSRUFLIFNQQUNFIC0tPg0KKwkJCTxpbnQ+MHhGRkEwPC9pbnQ+CTwhLS0gSEFMRldJRFRIIEhBTkdVTCBGSUxMRVIgLS0+DQorCQkJPGludD4weEZGRjk8L2ludD4JPCEtLSBJTlRFUkxJTkVBUiBBTk5PVEFUSU9OIEFOQ0hPUiAtLT4NCisJCQk8aW50PjB4RkZGQTwvaW50Pgk8IS0tIElOVEVSTElORUFSIEFOTk9UQVRJT04gU0VQQVJBVE9SIC0tPg0KKwkJCTxpbnQ+MHhGRkZCPC9pbnQ+CTwhLS0gSU5URVJMSU5FQVIgQU5OT1RBVElPTiBURVJNSU5BVE9SIC0tPg0KKwkJPC9ibGFuaz4NCis8IS0tDQorICBSZXNjYW4gY29uZmlndXJhdGlvbiBldmVyeSAzMCBzZWNvbmRzIHdoZW4gRmNGb250U2V0TGlzdCBpcyBjYWxsZWQNCisgLS0+DQorCQk8cmVzY2FuPg0KKwkJCTxpbnQ+MzA8L2ludD4NCisJCTwvcmVzY2FuPg0KKwk8L2NvbmZpZz4NCisNCis8L2ZvbnRjb25maWc+DQor/w0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL2hlbHBlcnMvR3JhcGh2aXoyLjI2LjMvZXRjL2ZvbnRzL2ZvbnRzLmR0ZCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL2hlbHBlcnMvR3JhcGh2aXoyLjI2LjMvZXRjL2ZvbnRzL2ZvbnRzLmR0ZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjcxMzVjCi0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvaGVscGVycy9HcmFwaHZpejIuMjYuMy9ldGMvZm9udHMvZm9udHMuZHRkCkBAIC0wLDAgKzEsMjIyIEBACis8IS0tIFRoaXMgaXMgdGhlIERvY3VtZW50IFR5cGUgRGVmaW5pdGlvbiBmb3IgZm9udCBjb25maWd1cmF0aW9uIGZpbGVzIC0tPg0KKzwhRUxFTUVOVCBmb250Y29uZmlnIChkaXIgfCANCisJCSAgICAgIGNhY2hlIHwgDQorCQkgICAgICBjYWNoZWRpciB8DQorCQkgICAgICBpbmNsdWRlIHwgDQorCQkgICAgICBjb25maWcgfA0KKwkJICAgICAgc2VsZWN0Zm9udCB8DQorCQkgICAgICBtYXRjaCB8IA0KKwkJICAgICAgYWxpYXMpKiA+DQorDQorPCEtLSANCisgICAgQWRkIGEgZGlyZWN0b3J5IHRoYXQgcHJvdmlkZXMgZm9udHMNCistLT4NCis8IUVMRU1FTlQgZGlyICgjUENEQVRBKT4NCis8IUFUVExJU1QgZGlyIHhtbDpzcGFjZSAoZGVmYXVsdHxwcmVzZXJ2ZSkgJ3ByZXNlcnZlJz4NCisNCis8IS0tDQorICAgIERlZmluZSB0aGUgcGVyLXVzZXIgZmlsZSB0aGF0IGhvbGRzIGNhY2hlIGZvbnQgaW5mb3JtYXRpb24uDQorDQorICAgIElmIHRoZSBmaWxlbmFtZSBiZWdpbnMgd2l0aCAnficsIGl0IGlzIHJlcGxhY2VkIHdpdGggdGhlIHVzZXJzDQorICAgIGhvbWUgZGlyZWN0b3J5IHBhdGguDQorLS0+DQorPCFFTEVNRU5UIGNhY2hlICgjUENEQVRBKT4NCis8IUFUVExJU1QgY2FjaGUgeG1sOnNwYWNlIChkZWZhdWx0fHByZXNlcnZlKSAncHJlc2VydmUnPg0KKw0KKzwhLS0NCisgICAgQWRkIGEgZGlyZWN0b3J5IHRoYXQgaXMgc2VhcmNoZWQgZm9yIGZvbnQgY2FjaGUgZmlsZXMuDQorICAgIFRoZXNlIGhvbGQgcGVyLWRpcmVjdG9yeSBjYWNoZSBkYXRhIGFuZCBhcmUgc2VhcmNoZWQgaW4NCisgICAgb3JkZXIgZm9yIGVhY2ggZGlyZWN0b3J5LiBXaGVuIHdyaXRpbmcgY2FjaGUgZmlsZXMsIHRoZSBmaXJzdA0KKyAgICBkaXJlY3Rvcnkgd2hpY2ggYWxsb3dzIHRoZSBjYWNoZSBmaWxlIHRvIGJlIGNyZWF0ZWQgaXMgdXNlZC4NCisNCisgICAgQSBsZWFkaW5nICd+JyBpbiBhIGRpcmVjdG9yeSBuYW1lIGlzIHJlcGxhY2VkIHdpdGggdGhlIHVzZXJzDQorICAgIGhvbWUgZGlyZWN0b3J5IHBhdGguDQorLS0+DQorPCFFTEVNRU5UIGNhY2hlZGlyICgjUENEQVRBKT4NCis8IUFUVExJU1QgY2FjaGVkaXIgeG1sOnNwYWNlIChkZWZhdWx0fHByZXNlcnZlKSAncHJlc2VydmUnPg0KKw0KKzwhLS0NCisgICAgUmVmZXJlbmNlIGFub3RoZXIgY29uZmlndXJhdGlvbiBmaWxlOyBub3RlIHRoYXQgdGhpcw0KKyAgICBpcyBhbm90aGVyIGNvbXBsZXRlIGZvbnQgY29uZmlndXJhdGlvbiBmaWxlIGFuZCBub3QNCisgICAganVzdCBhIGZpbGUgaW5jbHVkZWQgYnkgdGhlIFhNTCBwYXJzZXIuDQorDQorICAgIFNldCAnaWdub3JlX21pc3NpbmcnIHRvICd5ZXMnIGlmIGVycm9ycyBhcmUgdG8gYmUgaWdub3JlZC4NCisNCisgICAgSWYgdGhlIGZpbGVuYW1lIGJlZ2lucyB3aXRoICd+JywgaXQgaXMgcmVwbGFjZWQgd2l0aCB0aGUgdXNlcnMNCisgICAgaG9tZSBkaXJlY3RvcnkgcGF0aC4NCistLT4NCis8IUVMRU1FTlQgaW5jbHVkZSAoI1BDREFUQSk+DQorPCFBVFRMSVNUIGluY2x1ZGUNCisJICBpZ25vcmVfbWlzc2luZyAgICAobm98eWVzKQkJIm5vIg0KKwkgIHhtbDpzcGFjZQkgICAgKGRlZmF1bHR8cHJlc2VydmUpCSJwcmVzZXJ2ZSI+DQorDQorPCEtLQ0KKyAgICBHbG9iYWwgbGlicmFyeSBjb25maWd1cmF0aW9uIGRhdGENCisgLS0+DQorPCFFTEVNRU5UIGNvbmZpZyAoYmxhbmt8cmVzY2FuKSo+DQorDQorPCEtLQ0KKyAgICBTcGVjaWZ5IHRoZSBzZXQgb2YgVW5pY29kZSBlbmNvZGluZyB2YWx1ZXMgd2hpY2gNCisgICAgcmVwcmVzZW50IGdseXBocyB0aGF0IGFyZSBhbGxvd2VkIHRvIGNvbnRhaW4gbm8NCisgICAgZGF0YS4gIFdpdGggdGhpcyBsaXN0LCBmb250Y29uZmlnIGNhbiBleGFtaW5lDQorICAgIGZvbnRzIGZvciBicm9rZW4gZ2x5cGhzIGFuZCBlbGltaW5hdGUgdGhlbSBmcm9tDQorICAgIHRoZSBzZXQgb2YgdmFsaWQgVW5pY29kZSBjaGFycy4gIFRoaXMgaWRlYQ0KKyAgICB3YXMgYm9ycm93ZWQgZnJvbSBNb3ppbGxhDQorIC0tPg0KKzwhRUxFTUVOVCBibGFuayAoaW50KSo+DQorDQorPCEtLQ0KKyAgICBBbGlhc2VzIGFyZSBqdXN0IGEgc3BlY2lhbCBjYXNlIGZvciBtdWx0aXBsZSBtYXRjaCBlbGVtZW50cw0KKw0KKyAgICBUaGV5IGFyZSBzeW50YWN0aWNhbGx5IGVxdWl2YWxlbnQgdG86DQorDQorICAgIDxtYXRjaD4NCisJPHRlc3QgbmFtZT0iZmFtaWx5Ij4NCisJICAgIDxzdHJpbmcgdmFsdWU9W2ZhbWlseV0vPg0KKwk8L3Rlc3Q+DQorCTxlZGl0IG5hbWU9ImZhbWlseSIgbW9kZT0icHJlcGVuZCI+DQorCSAgICA8c3RyaW5nIHZhbHVlPVtwcmVmZXJdLz4NCisJICAgIC4uLg0KKwk8L2VkaXQ+DQorCTxlZGl0IG5hbWU9ImZhbWlseSIgbW9kZT0iYXBwZW5kIj4NCisJICAgIDxzdHJpbmcgdmFsdWU9W2FjY2VwdF0vPg0KKwkgICAgLi4uDQorCTwvZWRpdD4NCisJPGVkaXQgbmFtZT0iZmFtaWx5IiBtb2RlPSJhcHBlbmRfbGFzdCI+DQorCSAgICA8c3RyaW5nIHZhbHVlPVtkZWZhdWx0XS8+DQorCSAgICAuLi4NCisJPC9lZGl0Pg0KKyAgICA8L21hdGNoPg0KKy0tPg0KKzwhLS0NCisgICAgUGVyaW9kaWNhbGx5IHJlc2NhbiB0aGUgZm9udCBjb25maWd1cmF0aW9uIGFuZA0KKyAgICBkaXJlY3RvcmllcyB0byBzeW5jaCBpbnRlcm5hbCBzdGF0ZSB3aXRoIGZpbGVzeXN0ZW0NCisgLS0+DQorPCFFTEVNRU5UIHJlc2NhbiAoaW50KT4NCisNCis8IS0tDQorICAgIEVkaXQgbGlzdCBvZiBhdmFpbGFibGUgZm9udHMgYXQgc3RhcnR1cC9yZWxvYWQgdGltZQ0KKyAtLT4NCis8IUVMRU1FTlQgc2VsZWN0Zm9udCAocmVqZWN0Zm9udCB8IGFjY2VwdGZvbnQpKiA+DQorDQorPCFFTEVNRU5UIHJlamVjdGZvbnQgKGdsb2IgfCBwYXR0ZXJuKSo+DQorDQorPCFFTEVNRU5UIGFjY2VwdGZvbnQgKGdsb2IgfCBwYXR0ZXJuKSo+DQorDQorPCFFTEVNRU5UIGdsb2IgKCNQQ0RBVEEpPg0KKw0KKzwhRUxFTUVOVCBwYXR0ZXJuIChwYXRlbHQpKj4NCisNCis8IUVOVElUWSAlIGNvbnN0YW50ICdpbnR8ZG91YmxlfHN0cmluZ3xtYXRyaXh8Ym9vbHxjaGFyc2V0fGNvbnN0Jz4NCisNCis8IUVMRU1FTlQgcGF0ZWx0ICglY29uc3RhbnQ7KSo+DQorPCFBVFRMSVNUIHBhdGVsdA0KKwkgIG5hbWUgQ0RBVEEJI1JFUVVJUkVEPg0KKw0KKzwhRUxFTUVOVCBhbGlhcyAoZmFtaWx5KiwgcHJlZmVyPywgYWNjZXB0PywgZGVmYXVsdD8pPg0KKzwhRUxFTUVOVCBwcmVmZXIgKGZhbWlseSkqPg0KKzwhRUxFTUVOVCBhY2NlcHQgKGZhbWlseSkqPg0KKzwhRUxFTUVOVCBkZWZhdWx0IChmYW1pbHkpKj4NCis8IUVMRU1FTlQgZmFtaWx5ICgjUENEQVRBKT4NCis8IUFUVExJU1QgZmFtaWx5IHhtbDpzcGFjZSAoZGVmYXVsdHxwcmVzZXJ2ZSkgJ3ByZXNlcnZlJz4NCisNCis8IUVOVElUWSAlIGV4cHIgJ2ludHxkb3VibGV8c3RyaW5nfG1hdHJpeHxib29sfGNoYXJzZXQNCisJCXxuYW1lfGNvbnN0DQorCQl8b3J8YW5kfGVxfG5vdF9lcXxsZXNzfGxlc3NfZXF8bW9yZXxtb3JlX2VxfGNvbnRhaW5zfG5vdF9jb250YWlucw0KKwkJfHBsdXN8bWludXN8dGltZXN8ZGl2aWRlfG5vdHxpZnxmbG9vcnxjZWlsfHJvdW5kfHRydW5jJz4NCisNCis8IS0tDQorICAgIE1hdGNoIGFuZCBlZGl0IHBhdHRlcm5zLg0KKw0KKyAgICBJZiAndGFyZ2V0JyBpcyAncGF0dGVybicsIGV4ZWN1dGUgdGhlIG1hdGNoIGJlZm9yZSBzZWxlY3RpbmcgYSBmb250Lg0KKyAgICBpZiAndGFyZ2V0JyBpcyAnZm9udCcsIGV4ZWN1dGUgdGhlIG1hdGNoIG9uIHRoZSByZXN1bHQgb2YgYSBmb250DQorICAgIHNlbGVjdGlvbi4NCistLT4NCis8IUVMRU1FTlQgbWF0Y2ggKHRlc3QqLCBlZGl0Kik+DQorPCFBVFRMSVNUIG1hdGNoDQorCSAgdGFyZ2V0IChwYXR0ZXJufGZvbnR8c2NhbikgInBhdHRlcm4iPg0KKw0KKzwhLS0NCisgICAgTWF0Y2ggYSBmaWVsZCBpbiBhIHBhdHRlcm4NCisNCisgICAgaWYgJ3F1YWwnIGlzICdhbnknLCB0aGVuIHRoZSBtYXRjaCBzdWNjZWVkcyBpZiBhbnkgdmFsdWUgaW4gdGhlIGZpZWxkIG1hdGNoZXMuDQorICAgIGlmICdxdWFsJyBpcyAnYWxsJywgdGhlbiB0aGUgbWF0Y2ggc3VjY2VlZHMgb25seSBpZiBhbGwgdmFsdWVzIG1hdGNoLg0KKyAgICBpZiAncXVhbCcgaXMgJ2ZpcnN0JywgdGhlbiB0aGUgbWF0Y2ggc3VjY2VlZHMgb25seSBpZiB0aGUgZmlyc3QgdmFsdWUgbWF0Y2hlcy4NCisgICAgaWYgJ3F1YWwnIGlzICdub3RfZmlyc3QnLCB0aGVuIHRoZSBtYXRjaCBzdWNjZWVkcyBvbmx5IGlmIGFueSB2YWx1ZSBvdGhlciB0aGFuDQorICAgIAl0aGUgZmlyc3QgbWF0Y2hlcy4NCisgICAgRm9yIG1hdGNoIGVsZW1lbnRzIHdpdGggdGFyZ2V0PWZvbnQsIGlmIHRlc3QgJ3RhcmdldCcgaXMgJ3BhdHRlcm4nLA0KKyAgICB0aGVuIHRoZSB0ZXN0IGlzIGFwcGxpZWQgdG8gdGhlIHBhdHRlcm4gdXNlZCBpbiBtYXRjaGluZyByYXRoZXIgdGhhbg0KKyAgICB0byB0aGUgcmVzdWx0aW5nIGZvbnQuDQorDQorICAgIE1hdGNoIGVsZW1lbnRzIHdpdGggdGFyZ2V0PXNjYW4gYXJlIGFwcGxpZWQgYXMgZm9udHMgYXJlIHNjYW5uZWQuDQorICAgIFRoZXkgZWRpdCB0aGUgcGF0dGVybiBnZW5lcmF0ZWQgZnJvbSB0aGUgc2Nhbm5lZCBmb250IGFuZCBhZmZlY3QNCisgICAgd2hhdCB0aGUgZm9udGNvbmZpZyBkYXRhYmFzZSBjb250YWlucy4NCistLT4NCis8IUVMRU1FTlQgdGVzdCAoJWV4cHI7KSo+DQorPCFBVFRMSVNUIHRlc3QgDQorCSAgcXVhbCAoYW55fGFsbHxmaXJzdHxub3RfZmlyc3QpICAgICJhbnkiDQorCSAgbmFtZSBDREFUQQkgICAgI1JFUVVJUkVEDQorCSAgdGFyZ2V0IChwYXR0ZXJufGZvbnR8ZGVmYXVsdCkJCSJkZWZhdWx0Ig0KKwkgIGNvbXBhcmUgKGVxfG5vdF9lcXxsZXNzfGxlc3NfZXF8bW9yZXxtb3JlX2VxfGNvbnRhaW5zfG5vdF9jb250YWlucykJImVxIj4NCisNCis8IS0tDQorICAgIEVkaXQgYSBmaWVsZCBpbiBhIHBhdHRlcm4NCisNCisgICAgVGhlIGVuY2xvc2VkIHZhbHVlcyBhcmUgdXNlZCB0b2dldGhlciB0byBlZGl0IHRoZSBsaXN0IG9mIHZhbHVlcw0KKyAgICBhc3NvY2lhdGVkIHdpdGggJ25hbWUnLg0KKw0KKyAgICBJZiAnbmFtZScgbWF0Y2hlcyBvbmUgb2YgdGhvc2UgdXNlZCBpbiBhIHRlc3QgZWxlbWVudCBmb3IgdGhpcyBtYXRjaCBlbGVtZW50Og0KKwlpZiAnbW9kZScgaXMgJ2Fzc2lnbicsIHJlcGxhY2UgdGhlIG1hdGNoZWQgdmFsdWUuDQorCWlmICdtb2RlJyBpcyAnYXNzaWduX3JlcGxhY2UnLCByZXBsYWNlIGFsbCBvZiB0aGUgdmFsdWVzDQorCWlmICdtb2RlJyBpcyAncHJlcGVuZCcsIGluc2VydCBiZWZvcmUgdGhlIG1hdGNoZWQgdmFsdWUNCisJaWYgJ21vZGUnIGlzICdhcHBlbmQnLCBpbnNlcnQgYWZ0ZXIgdGhlIG1hdGNoZWQgdmFsdWUNCisJaWYgJ21vZGUnIGlzICdwcmVwZW5kX2ZpcnN0JywgaW5zZXJ0IGJlZm9yZSBhbGwgb2YgdGhlIHZhbHVlcw0KKwlpZiAnbW9kZScgaXMgJ2FwcGVuZF9sYXN0JywgaW5zZXJ0IGFmdGVyIGFsbCBvZiB0aGUgdmFsdWVzDQorICAgIElmICduYW1lJyBkb2Vzbid0IG1hdGNoIGFueSBvZiB0aG9zZSB1c2VkIGluIGEgdGVzdCBlbGVtZW50Og0KKwlpZiAnbW9kZScgaXMgJ2Fzc2lnbicgb3IgJ2Fzc2lnbl9yZXBsYWNlLCByZXBsYWNlIGFsbCBvZiB0aGUgdmFsdWVzDQorCWlmICdtb2RlJyBpcyAncHJlcGVuZCcgb3IgJ3ByZXBlbmRfZmlyc3QnLCBpbnNlcnQgYmVmb3JlIGFsbCBvZiB0aGUgdmFsdWVzDQorCWlmICdtb2RlJyBpcyAnYXBwZW5kJyBvciAnYXBwZW5kX2xhc3QnLCBpbnNlcnQgYWZ0ZXIgYWxsIG9mIHRoZSB2YWx1ZXMNCistLT4NCis8IUVMRU1FTlQgZWRpdCAoJWV4cHI7KSo+DQorPCFBVFRMSVNUIGVkaXQNCisJICBuYW1lIENEQVRBCSAgICAjUkVRVUlSRUQNCisJICBtb2RlIChhc3NpZ258YXNzaWduX3JlcGxhY2V8cHJlcGVuZHxhcHBlbmR8cHJlcGVuZF9maXJzdHxhcHBlbmRfbGFzdCkgImFzc2lnbiINCisJICBiaW5kaW5nICh3ZWFrfHN0cm9uZ3xzYW1lKSAid2VhayI+DQorDQorPCEtLQ0KKyAgICBFbGVtZW50cyBvZiBleHByZXNzaW9ucyBmb2xsb3cNCistLT4NCis8IUVMRU1FTlQgaW50ICgjUENEQVRBKT4NCis8IUFUVExJU1QgaW50IHhtbDpzcGFjZSAoZGVmYXVsdHxwcmVzZXJ2ZSkgJ3ByZXNlcnZlJz4NCis8IUVMRU1FTlQgZG91YmxlICgjUENEQVRBKT4NCis8IUFUVExJU1QgZG91YmxlIHhtbDpzcGFjZSAoZGVmYXVsdHxwcmVzZXJ2ZSkgJ3ByZXNlcnZlJz4NCis8IUVMRU1FTlQgc3RyaW5nICgjUENEQVRBKT4NCis8IUFUVExJU1Qgc3RyaW5nIHhtbDpzcGFjZSAoZGVmYXVsdHxwcmVzZXJ2ZSkgJ3ByZXNlcnZlJz4NCis8IUVMRU1FTlQgbWF0cml4IChkb3VibGUsZG91YmxlLGRvdWJsZSxkb3VibGUpPg0KKzwhRUxFTUVOVCBib29sICgjUENEQVRBKT4NCis8IUVMRU1FTlQgY2hhcnNldCAoI1BDREFUQSk+DQorPCFBVFRMSVNUIGNoYXJzZXQgeG1sOnNwYWNlIChkZWZhdWx0fHByZXNlcnZlKSAncHJlc2VydmUnPg0KKzwhRUxFTUVOVCBuYW1lICgjUENEQVRBKT4NCis8IUFUVExJU1QgbmFtZSB4bWw6c3BhY2UgKGRlZmF1bHR8cHJlc2VydmUpICdwcmVzZXJ2ZSc+DQorPCFFTEVNRU5UIGNvbnN0ICgjUENEQVRBKT4NCis8IUFUVExJU1QgY29uc3QgeG1sOnNwYWNlIChkZWZhdWx0fHByZXNlcnZlKSAncHJlc2VydmUnPg0KKzwhRUxFTUVOVCBvciAoJWV4cHI7KSo+DQorPCFFTEVNRU5UIGFuZCAoJWV4cHI7KSo+DQorPCFFTEVNRU5UIGVxICgoJWV4cHI7KSwgKCVleHByOykpPg0KKzwhRUxFTUVOVCBub3RfZXEgKCglZXhwcjspLCAoJWV4cHI7KSk+DQorPCFFTEVNRU5UIGxlc3MgKCglZXhwcjspLCAoJWV4cHI7KSk+DQorPCFFTEVNRU5UIGxlc3NfZXEgKCglZXhwcjspLCAoJWV4cHI7KSk+DQorPCFFTEVNRU5UIG1vcmUgKCglZXhwcjspLCAoJWV4cHI7KSk+DQorPCFFTEVNRU5UIG1vcmVfZXEgKCglZXhwcjspLCAoJWV4cHI7KSk+DQorPCFFTEVNRU5UIGNvbnRhaW5zICgoJWV4cHI7KSwgKCVleHByOykpPg0KKzwhRUxFTUVOVCBub3RfY29udGFpbnMgKCglZXhwcjspLCAoJWV4cHI7KSk+DQorPCFFTEVNRU5UIHBsdXMgKCVleHByOykqPg0KKzwhRUxFTUVOVCBtaW51cyAoJWV4cHI7KSo+DQorPCFFTEVNRU5UIHRpbWVzICglZXhwcjspKj4NCis8IUVMRU1FTlQgZGl2aWRlICglZXhwcjspKj4NCis8IUVMRU1FTlQgbm90ICglZXhwcjspPg0KKzwhRUxFTUVOVCBpZiAoKCVleHByOyksICglZXhwcjspLCAoJWV4cHI7KSk+DQorPCFFTEVNRU5UIGZsb29yICglZXhwcjspPg0KKzwhRUxFTUVOVCBjZWlsICglZXhwcjspPg0KKzwhRUxFTUVOVCByb3VuZCAoJWV4cHI7KT4NCis8IUVMRU1FTlQgdHJ1bmMgKCVleHByOyk+DQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvaGVscGVycy9HcmFwaHZpejIuMjYuMy9ldGMvZ3RrLTIuMC9nZGstcGl4YnVmLmxvYWRlcnMgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS9oZWxwZXJzL0dyYXBodml6Mi4yNi4zL2V0Yy9ndGstMi4wL2dkay1waXhidWYubG9hZGVycwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYzYxZGQwCi0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvaGVscGVycy9HcmFwaHZpejIuMjYuMy9ldGMvZ3RrLTIuMC9nZGstcGl4YnVmLmxvYWRlcnMKQEAgLTAsMCArMSwxMTQgQEAKKyMgR2RrUGl4YnVmIEltYWdlIExvYWRlciBNb2R1bGVzIGZpbGUNCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZpbGUsIGRvIG5vdCBlZGl0DQorIyBDcmVhdGVkIGJ5IGdkay1waXhidWYtcXVlcnktbG9hZGVycy5leGUgZnJvbSBndGsrLTIuMTAuNg0KKyMNCisjIExvYWRlckRpciA9IC90YXJnZXQvbGliL2d0ay0yLjAvMi4xMC4wL2xvYWRlcnMNCisjDQorIi90YXJnZXQvbGliL2d0ay0yLjAvMi4xMC4wL2xvYWRlcnMvbGlicGl4YnVmbG9hZGVyLWFuaS5kbGwiDQorImFuaSIgNCAiZ3RrMjAiICJUaGUgQU5JIGltYWdlIGZvcm1hdCINCisiYXBwbGljYXRpb24veC1uYXZpLWFuaW1hdGlvbiIgIiINCisiYW5pIiAiIg0KKyJSSUZGICAgIEFDT04iICIgICAgeHh4eCAgICAiIDEwMA0KKw0KKyIvdGFyZ2V0L2xpYi9ndGstMi4wLzIuMTAuMC9sb2FkZXJzL2xpYnBpeGJ1ZmxvYWRlci1ibXAuZGxsIg0KKyJibXAiIDUgImd0azIwIiAiVGhlIEJNUCBpbWFnZSBmb3JtYXQiDQorImltYWdlL2JtcCIgImltYWdlL3gtYm1wIiAiaW1hZ2UveC1NUy1ibXAiICIiDQorImJtcCIgIiINCisiQk0iICIiIDEwMA0KKw0KKyIvdGFyZ2V0L2xpYi9ndGstMi4wLzIuMTAuMC9sb2FkZXJzL2xpYnBpeGJ1ZmxvYWRlci1naWYuZGxsIg0KKyJnaWYiIDQgImd0azIwIiAiVGhlIEdJRiBpbWFnZSBmb3JtYXQiDQorImltYWdlL2dpZiIgIiINCisiZ2lmIiAiIg0KKyJHSUY4IiAiIiAxMDANCisNCisiL3RhcmdldC9saWIvZ3RrLTIuMC8yLjEwLjAvbG9hZGVycy9saWJwaXhidWZsb2FkZXItaWNvLmRsbCINCisiaWNvIiA1ICJndGsyMCIgIlRoZSBJQ08gaW1hZ2UgZm9ybWF0Ig0KKyJpbWFnZS94LWljb24iICIiDQorImljbyIgImN1ciIgIiINCisiICBcMDAxICAgIiAienogem56IiAxMDANCisiICBcMDAyICAgIiAienogem56IiAxMDANCisNCisiL3RhcmdldC9saWIvZ3RrLTIuMC8yLjEwLjAvbG9hZGVycy9saWJwaXhidWZsb2FkZXItanBlZy5kbGwiDQorImpwZWciIDUgImd0azIwIiAiVGhlIEpQRUcgaW1hZ2UgZm9ybWF0Ig0KKyJpbWFnZS9qcGVnIiAiIg0KKyJqcGVnIiAianBlIiAianBnIiAiIg0KKyJcMzc3XDMzMCIgIiIgMTAwDQorDQorIi90YXJnZXQvbGliL2d0ay0yLjAvMi4xMC4wL2xvYWRlcnMvbGlicGl4YnVmbG9hZGVyLXBjeC5kbGwiDQorInBjeCIgNCAiZ3RrMjAiICJUaGUgUENYIGltYWdlIGZvcm1hdCINCisiaW1hZ2UveC1wY3giICIiDQorInBjeCIgIiINCisiXG4gXDAwMSIgIiIgMTAwDQorIlxuXDAwMlwwMDEiICIiIDEwMA0KKyJcblwwMDNcMDAxIiAiIiAxMDANCisiXG5cMDA0XDAwMSIgIiIgMTAwDQorIlxuXDAwNVwwMDEiICIiIDEwMA0KKw0KKyIvdGFyZ2V0L2xpYi9ndGstMi4wLzIuMTAuMC9sb2FkZXJzL2xpYnBpeGJ1ZmxvYWRlci1wbmcuZGxsIg0KKyJwbmciIDUgImd0azIwIiAiVGhlIFBORyBpbWFnZSBmb3JtYXQiDQorImltYWdlL3BuZyIgIiINCisicG5nIiAiIg0KKyJcMjExUE5HXHJcblwwMzJcbiIgIiIgMTAwDQorDQorIi90YXJnZXQvbGliL2d0ay0yLjAvMi4xMC4wL2xvYWRlcnMvbGlicGl4YnVmbG9hZGVyLXBubS5kbGwiDQorInBubSIgNCAiZ3RrMjAiICJUaGUgUE5NL1BCTS9QR00vUFBNIGltYWdlIGZvcm1hdCBmYW1pbHkiDQorImltYWdlL3gtcG9ydGFibGUtYW55bWFwIiAiaW1hZ2UveC1wb3J0YWJsZS1iaXRtYXAiICJpbWFnZS94LXBvcnRhYmxlLWdyYXltYXAiICJpbWFnZS94LXBvcnRhYmxlLXBpeG1hcCIgIiINCisicG5tIiAicGJtIiAicGdtIiAicHBtIiAiIg0KKyJQMSIgIiIgMTAwDQorIlAyIiAiIiAxMDANCisiUDMiICIiIDEwMA0KKyJQNCIgIiIgMTAwDQorIlA1IiAiIiAxMDANCisiUDYiICIiIDEwMA0KKw0KKyIvdGFyZ2V0L2xpYi9ndGstMi4wLzIuMTAuMC9sb2FkZXJzL2xpYnBpeGJ1ZmxvYWRlci1yYXMuZGxsIg0KKyJyYXMiIDQgImd0azIwIiAiVGhlIFN1biByYXN0ZXIgaW1hZ2UgZm9ybWF0Ig0KKyJpbWFnZS94LWNtdS1yYXN0ZXIiICJpbWFnZS94LXN1bi1yYXN0ZXIiICIiDQorInJhcyIgIiINCisiWVwyNDZqXDIyNSIgIiIgMTAwDQorDQorIi90YXJnZXQvbGliL2d0ay0yLjAvMi4xMC4wL2xvYWRlcnMvbGlicGl4YnVmbG9hZGVyLXRnYS5kbGwiDQorInRnYSIgNCAiZ3RrMjAiICJUaGUgVGFyZ2EgaW1hZ2UgZm9ybWF0Ig0KKyJpbWFnZS94LXRnYSIgIiINCisidGdhIiAidGFyZ2EiICIiDQorIiBcMDAxXDAwMSIgInggICIgMTAwDQorIiBcMDAxXHQiICJ4ICAiIDEwMA0KKyIgIFwwMDIiICJ4eiAiIDk5DQorIiAgXDAwMyIgInh6ICIgMTAwDQorIiAgXG4iICJ4eiAiIDEwMA0KKyIgIFwwMTMiICJ4eiAiIDEwMA0KKw0KKyIvdGFyZ2V0L2xpYi9ndGstMi4wLzIuMTAuMC9sb2FkZXJzL2xpYnBpeGJ1ZmxvYWRlci10aWZmLmRsbCINCisidGlmZiIgMSAiZ3RrMjAiICJUaGUgVElGRiBpbWFnZSBmb3JtYXQiDQorImltYWdlL3RpZmYiICIiDQorInRpZmYiICJ0aWYiICIiDQorIk1NICoiICIgIHogIiAxMDANCisiSUkqICIgIiAgIHoiIDEwMA0KKw0KKyIvdGFyZ2V0L2xpYi9ndGstMi4wLzIuMTAuMC9sb2FkZXJzL2xpYnBpeGJ1ZmxvYWRlci13Ym1wLmRsbCINCisid2JtcCIgNCAiZ3RrMjAiICJUaGUgV0JNUCBpbWFnZSBmb3JtYXQiDQorImltYWdlL3ZuZC53YXAud2JtcCIgIiINCisid2JtcCIgIiINCisiICIgInoiIDENCisNCisiL3RhcmdldC9saWIvZ3RrLTIuMC8yLjEwLjAvbG9hZGVycy9saWJwaXhidWZsb2FkZXIteGJtLmRsbCINCisieGJtIiA0ICJndGsyMCIgIlRoZSBYQk0gaW1hZ2UgZm9ybWF0Ig0KKyJpbWFnZS94LXhiaXRtYXAiICIiDQorInhibSIgIiINCisiI2RlZmluZSAiICIiIDEwMA0KKyIvKiIgIiIgNTANCisNCisiL3RhcmdldC9saWIvZ3RrLTIuMC8yLjEwLjAvbG9hZGVycy9saWJwaXhidWZsb2FkZXIteHBtLmRsbCINCisieHBtIiA0ICJndGsyMCIgIlRoZSBYUE0gaW1hZ2UgZm9ybWF0Ig0KKyJpbWFnZS94LXhwaXhtYXAiICIiDQorInhwbSIgIiINCisiLyogWFBNICovIiAiIiAxMDANCisNCisiL3RhcmdldC9saWIvZ3RrLTIuMC8yLjEwLjAvbG9hZGVycy9zdmdfbG9hZGVyLmRsbCINCisic3ZnIiAyICJndGsyMCIgIlNjYWxhYmxlIFZlY3RvciBHcmFwaGljcyINCisiaW1hZ2Uvc3ZnK3htbCIgImltYWdlL3N2ZyIgImltYWdlL3N2Zy14bWwiICJpbWFnZS92bmQuYWRvYmUuc3ZnK3htbCIgInRleHQveG1sLXN2ZyIgIiINCisic3ZnIiAic3ZneiIgInN2Zy5neiIgIiINCisiIDxzdmciICIqICAgICIgMTAwDQorIiA8IURPQ1RZUEUgc3ZnIiAiKiAgICAgICAgICAgICAiIDEwMA0KKw0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL2hlbHBlcnMvR3JhcGh2aXoyLjI2LjMvZXRjL2d0ay0yLjAvZ3RrLmltbW9kdWxlcyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL2hlbHBlcnMvR3JhcGh2aXoyLjI2LjMvZXRjL2d0ay0yLjAvZ3RrLmltbW9kdWxlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYTYyNzM5Ci0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvaGVscGVycy9HcmFwaHZpejIuMjYuMy9ldGMvZ3RrLTIuMC9ndGsuaW1tb2R1bGVzCkBAIC0wLDAgKzEsMzYgQEAKKyMgR1RLKyBJbnB1dCBNZXRob2QgTW9kdWxlcyBmaWxlDQorIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmaWxlLCBkbyBub3QgZWRpdA0KKyMgQ3JlYXRlZCBieSBndGstcXVlcnktaW1tb2R1bGVzLTIuMC5leGUgZnJvbSBndGsrLTIuMTAuNg0KKyMNCisjIE1vZHVsZXNQYXRoID0gL3RhcmdldC9saWIvZ3RrLTIuMC8yLjQuMC9pbW1vZHVsZXMNCisjDQorIi90YXJnZXQvbGliL2d0ay0yLjAvMi4xMC4wL2ltbW9kdWxlcy9pbS1hbS1ldC5kbGwiIA0KKyJhbV9ldCIgIkFtaGFyaWMgKEVaKykiICJndGsyMCIgIiR7cHJlZml4fS9zaGFyZS9sb2NhbGUiICJhbSIgDQorDQorIi90YXJnZXQvbGliL2d0ay0yLjAvMi4xMC4wL2ltbW9kdWxlcy9pbS1jZWRpbGxhLmRsbCIgDQorImNlZGlsbGEiICJDZWRpbGxhIiAiZ3RrKyIgIiR7cHJlZml4fS9zaGFyZS9sb2NhbGUiICJhejpjYTpjbzpmcjpndjpvYzpwdDpzcTp0cjp3YSIgDQorDQorIi90YXJnZXQvbGliL2d0ay0yLjAvMi4xMC4wL2ltbW9kdWxlcy9pbS1jeXJpbGxpYy10cmFuc2xpdC5kbGwiIA0KKyJjeXJpbGxpY190cmFuc2xpdCIgIkN5cmlsbGljIChUcmFuc2xpdGVyYXRlZCkiICJndGsyMCIgIiR7cHJlZml4fS9zaGFyZS9sb2NhbGUiICIiIA0KKw0KKyIvdGFyZ2V0L2xpYi9ndGstMi4wLzIuMTAuMC9pbW1vZHVsZXMvaW0taW1lLmRsbCIgDQorImltZSIgIldpbmRvd3MgSU1FIiAiZ3RrKyIgIiIgImphOmtvOnpoIiANCisNCisiL3RhcmdldC9saWIvZ3RrLTIuMC8yLjEwLjAvaW1tb2R1bGVzL2ltLWludWt0aXR1dC5kbGwiIA0KKyJpbnVrdGl0dXQiICJJbnVrdGl0dXQgKFRyYW5zbGl0ZXJhdGVkKSIgImd0azIwIiAiJHtwcmVmaXh9L3NoYXJlL2xvY2FsZSIgIml1IiANCisNCisiL3RhcmdldC9saWIvZ3RrLTIuMC8yLjEwLjAvaW1tb2R1bGVzL2ltLWlwYS5kbGwiIA0KKyJpcGEiICJJUEEiICJndGsyMCIgIiR7cHJlZml4fS9zaGFyZS9sb2NhbGUiICIiIA0KKw0KKyIvdGFyZ2V0L2xpYi9ndGstMi4wLzIuMTAuMC9pbW1vZHVsZXMvaW0tdGhhaS1icm9rZW4uZGxsIiANCisidGhhaV9icm9rZW4iICJUaGFpIChCcm9rZW4pIiAiZ3RrMjAiICIke3ByZWZpeH0vc2hhcmUvbG9jYWxlIiAiIiANCisNCisiL3RhcmdldC9saWIvZ3RrLTIuMC8yLjEwLjAvaW1tb2R1bGVzL2ltLXRpLWVyLmRsbCIgDQorInRpX2VyIiAiVGlncmlnbmEtRXJpdHJlYW4gKEVaKykiICJndGsyMCIgIiR7cHJlZml4fS9zaGFyZS9sb2NhbGUiICJ0aSIgDQorDQorIi90YXJnZXQvbGliL2d0ay0yLjAvMi4xMC4wL2ltbW9kdWxlcy9pbS10aS1ldC5kbGwiIA0KKyJ0aV9ldCIgIlRpZ3JpZ25hLUV0aGlvcGlhbiAoRVorKSIgImd0azIwIiAiJHtwcmVmaXh9L3NoYXJlL2xvY2FsZSIgInRpIiANCisNCisiL3RhcmdldC9saWIvZ3RrLTIuMC8yLjEwLjAvaW1tb2R1bGVzL2ltLXZpcXIuZGxsIiANCisidmlxciIgIlZpZXRuYW1lc2UgKFZJUVIpIiAiZ3RrMjAiICIke3ByZWZpeH0vc2hhcmUvbG9jYWxlIiAidmkiIA0KKw0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL2hlbHBlcnMvR3JhcGh2aXoyLjI2LjMvZXRjL2d0ay0yLjAvZ3RrcmMgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS9oZWxwZXJzL0dyYXBodml6Mi4yNi4zL2V0Yy9ndGstMi4wL2d0a3JjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmMzY5MzQKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS9oZWxwZXJzL0dyYXBodml6Mi4yNi4zL2V0Yy9ndGstMi4wL2d0a3JjCkBAIC0wLDAgKzEgQEAKK2d0ay10aGVtZS1uYW1lID0gIk1TLVdpbmRvd3MiDQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvaGVscGVycy9HcmFwaHZpejIuMjYuMy9ldGMvcGFuZ28vcGFuZ28uYWxpYXNlcyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL2hlbHBlcnMvR3JhcGh2aXoyLjI2LjMvZXRjL3BhbmdvL3BhbmdvLmFsaWFzZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDJkZGQyZAotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL2hlbHBlcnMvR3JhcGh2aXoyLjI2LjMvZXRjL3BhbmdvL3BhbmdvLmFsaWFzZXMKQEAgLTAsMCArMSw3IEBACitjb3VyaWVyID0gImNvdXJpZXIgbmV3Ig0KKw0KK3RhaG9tYSA9ICJ0YWhvbWEsYnJvd2FsbGlhIG5ldyxtaW5nbGl1LHNpbWhlaSxndWxpbWNoZSxtcyBnb3RoaWMsbGF0aGEsbWFuZ2FsIg0KK3NhbnMgPSAiYXJpYWwsYnJvd2FsbGlhIG5ldyxtaW5nbGl1LHNpbWhlaSxndWxpbWNoZSxtcyBnb3RoaWMsbGF0aGEsbWFuZ2FsIg0KK3NlcmlmID0gInRpbWVzIG5ldyByb21hbixhbmdzYW5hIG5ldyxtaW5nbGl1LHNpbXN1bixndWxpbWNoZSxtcyBnb3RoaWMsbGF0aGEsbWFuZ2FsIg0KK21vbm9zcGFjZSA9ICJjb3VyaWVyIG5ldyxjb3VyaWVyIG1vbm90aGFpLG1pbmdsaXUsc2ltc3VuLGd1bGltY2hlLG1zIGdvdGhpYyxsYXRoYSxtYW5nYWwiDQorDQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvaGVscGVycy9HcmFwaHZpejIuMjYuMy9ldGMvcGFuZ28vcGFuZ28ubW9kdWxlcyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL2hlbHBlcnMvR3JhcGh2aXoyLjI2LjMvZXRjL3BhbmdvL3BhbmdvLm1vZHVsZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjA2ZGZmMgotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL2hlbHBlcnMvR3JhcGh2aXoyLjI2LjMvZXRjL3BhbmdvL3BhbmdvLm1vZHVsZXMKQEAgLTAsMCArMSwzNSBAQAorIyBQYW5nbyBNb2R1bGVzIGZpbGUNCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZpbGUsIGRvIG5vdCBlZGl0DQorIw0KKyMgTW9kdWxlc1BhdGggPSAvdGFyZ2V0L2xpYi9wYW5nby8xLjYuMC9tb2R1bGVzDQorIw0KKyIvdGFyZ2V0L2xpYi9wYW5nby8xLjYuMC9tb2R1bGVzL3BhbmdvLWFyYWJpYy1mYy5kbGwiIEFyYWJpY1NjcmlwdEVuZ2luZUZjIFBhbmdvRW5naW5lU2hhcGUgUGFuZ29SZW5kZXJGYyBhcmFiaWM6Kg0KKyIvdGFyZ2V0L2xpYi9wYW5nby8xLjYuMC9tb2R1bGVzL3BhbmdvLWFyYWJpYy1sYW5nLmRsbCIgQXJhYmljU2NyaXB0RW5naW5lTGFuZyBQYW5nb0VuZ2luZUxhbmcgUGFuZ29SZW5kZXJOb25lIGFyYWJpYzoqDQorIi90YXJnZXQvbGliL3BhbmdvLzEuNi4wL21vZHVsZXMvcGFuZ28tYmFzaWMtZmMuZGxsIiBCYXNpY1NjcmlwdEVuZ2luZUZjIFBhbmdvRW5naW5lU2hhcGUgUGFuZ29SZW5kZXJGYyBhcm1lbmlhbjoqIGJvcG9tb2ZvOiogY2hlcm9rZWU6KiBjb3B0aWM6KiBjeXJpbGxpYzoqIGRlc2VyZXQ6KiBldGhpb3BpYzoqIGdlb3JnaWFuOiogZ290aGljOiogZ3JlZWs6KiBoYW46KiBoaXJhZ2FuYToqIGthdGFrYW5hOiogbGF0aW46KiBvZ2hhbToqIG9sZC1pdGFsaWM6KiBydW5pYzoqIGNhbmFkaWFuLWFib3JpZ2luYWw6KiB5aToqIGJyYWlsbGU6KiBjeXByaW90OiogbGltYnU6KiBvc21hbnlhOiogc2hhdmlhbjoqIGxpbmVhci1iOiogdWdhcml0aWM6KiBnbGFnb2xpdGljOiogY3VuZWlmb3JtOiogcGhvZW5pY2lhbjoqIGNvbW1vbjoNCisiL3RhcmdldC9saWIvcGFuZ28vMS42LjAvbW9kdWxlcy9wYW5nby1iYXNpYy13aW4zMi5kbGwiIEJhc2ljU2NyaXB0RW5naW5lV2luMzIgUGFuZ29FbmdpbmVTaGFwZSBQYW5nb1JlbmRlcldpbjMyIGNvbW1vbjoNCisiL3RhcmdldC9saWIvcGFuZ28vMS42LjAvbW9kdWxlcy9wYW5nby1oYW5ndWwtZmMuZGxsIiBIYW5ndWxTY3JpcHRFbmdpbmVGYyBQYW5nb0VuZ2luZVNoYXBlIFBhbmdvUmVuZGVyRmMgaGFuZ3VsOioNCisiL3RhcmdldC9saWIvcGFuZ28vMS42LjAvbW9kdWxlcy9wYW5nby1oZWJyZXctZmMuZGxsIiBIZWJyZXdTY3JpcHRFbmdpbmVGYyBQYW5nb0VuZ2luZVNoYXBlIFBhbmdvUmVuZGVyRmMgaGVicmV3OioNCisiL3RhcmdldC9saWIvcGFuZ28vMS42LjAvbW9kdWxlcy9wYW5nby1pbmRpYy1mYy5kbGwiIGRldmFTY3JpcHRFbmdpbmVGYyBQYW5nb0VuZ2luZVNoYXBlIFBhbmdvUmVuZGVyRmMgZGV2YW5hZ2FyaToqDQorIi90YXJnZXQvbGliL3BhbmdvLzEuNi4wL21vZHVsZXMvcGFuZ28taW5kaWMtZmMuZGxsIiBiZW5nU2NyaXB0RW5naW5lRmMgUGFuZ29FbmdpbmVTaGFwZSBQYW5nb1JlbmRlckZjIGJlbmdhbGk6Kg0KKyIvdGFyZ2V0L2xpYi9wYW5nby8xLjYuMC9tb2R1bGVzL3BhbmdvLWluZGljLWZjLmRsbCIgZ3VydVNjcmlwdEVuZ2luZUZjIFBhbmdvRW5naW5lU2hhcGUgUGFuZ29SZW5kZXJGYyBndXJtdWtoaToqDQorIi90YXJnZXQvbGliL3BhbmdvLzEuNi4wL21vZHVsZXMvcGFuZ28taW5kaWMtZmMuZGxsIiBndWpyU2NyaXB0RW5naW5lRmMgUGFuZ29FbmdpbmVTaGFwZSBQYW5nb1JlbmRlckZjIGd1amFyYXRpOioNCisiL3RhcmdldC9saWIvcGFuZ28vMS42LjAvbW9kdWxlcy9wYW5nby1pbmRpYy1mYy5kbGwiIG9yeWFTY3JpcHRFbmdpbmVGYyBQYW5nb0VuZ2luZVNoYXBlIFBhbmdvUmVuZGVyRmMgb3JpeWE6Kg0KKyIvdGFyZ2V0L2xpYi9wYW5nby8xLjYuMC9tb2R1bGVzL3BhbmdvLWluZGljLWZjLmRsbCIgdGFtbFNjcmlwdEVuZ2luZUZjIFBhbmdvRW5naW5lU2hhcGUgUGFuZ29SZW5kZXJGYyB0YW1pbDoqDQorIi90YXJnZXQvbGliL3BhbmdvLzEuNi4wL21vZHVsZXMvcGFuZ28taW5kaWMtZmMuZGxsIiB0ZWx1U2NyaXB0RW5naW5lRmMgUGFuZ29FbmdpbmVTaGFwZSBQYW5nb1JlbmRlckZjIHRlbHVndToqDQorIi90YXJnZXQvbGliL3BhbmdvLzEuNi4wL21vZHVsZXMvcGFuZ28taW5kaWMtZmMuZGxsIiBrbmRhU2NyaXB0RW5naW5lRmMgUGFuZ29FbmdpbmVTaGFwZSBQYW5nb1JlbmRlckZjIGthbm5hZGE6Kg0KKyIvdGFyZ2V0L2xpYi9wYW5nby8xLjYuMC9tb2R1bGVzL3BhbmdvLWluZGljLWZjLmRsbCIgbWx5bVNjcmlwdEVuZ2luZUZjIFBhbmdvRW5naW5lU2hhcGUgUGFuZ29SZW5kZXJGYyBtYWxheWFsYW06Kg0KKyIvdGFyZ2V0L2xpYi9wYW5nby8xLjYuMC9tb2R1bGVzL3BhbmdvLWluZGljLWZjLmRsbCIgc2luaFNjcmlwdEVuZ2luZUZjIFBhbmdvRW5naW5lU2hhcGUgUGFuZ29SZW5kZXJGYyBzaW5oYWxhOioNCisiL3RhcmdldC9saWIvcGFuZ28vMS42LjAvbW9kdWxlcy9wYW5nby1pbmRpYy1sYW5nLmRsbCIgZGV2YUluZGljU2NyaXB0RW5naW5lTGFuZyBQYW5nb0VuZ2luZUxhbmcgUGFuZ29SZW5kZXJOb25lIGRldmFuYWdhcmk6Kg0KKyIvdGFyZ2V0L2xpYi9wYW5nby8xLjYuMC9tb2R1bGVzL3BhbmdvLWluZGljLWxhbmcuZGxsIiBiZW5nSW5kaWNTY3JpcHRFbmdpbmVMYW5nIFBhbmdvRW5naW5lTGFuZyBQYW5nb1JlbmRlck5vbmUgYmVuZ2FsaToqDQorIi90YXJnZXQvbGliL3BhbmdvLzEuNi4wL21vZHVsZXMvcGFuZ28taW5kaWMtbGFuZy5kbGwiIGd1cnVJbmRpY1NjcmlwdEVuZ2luZUxhbmcgUGFuZ29FbmdpbmVMYW5nIFBhbmdvUmVuZGVyTm9uZSBndXJtdWtoaToqDQorIi90YXJnZXQvbGliL3BhbmdvLzEuNi4wL21vZHVsZXMvcGFuZ28taW5kaWMtbGFuZy5kbGwiIGd1anJJbmRpY1NjcmlwdEVuZ2luZUxhbmcgUGFuZ29FbmdpbmVMYW5nIFBhbmdvUmVuZGVyTm9uZSBndWphcmF0aToqDQorIi90YXJnZXQvbGliL3BhbmdvLzEuNi4wL21vZHVsZXMvcGFuZ28taW5kaWMtbGFuZy5kbGwiIG9yeWFJbmRpY1NjcmlwdEVuZ2luZUxhbmcgUGFuZ29FbmdpbmVMYW5nIFBhbmdvUmVuZGVyTm9uZSBvcml5YToqDQorIi90YXJnZXQvbGliL3BhbmdvLzEuNi4wL21vZHVsZXMvcGFuZ28taW5kaWMtbGFuZy5kbGwiIHRhbWxJbmRpY1NjcmlwdEVuZ2luZUxhbmcgUGFuZ29FbmdpbmVMYW5nIFBhbmdvUmVuZGVyTm9uZSB0YW1pbDoqDQorIi90YXJnZXQvbGliL3BhbmdvLzEuNi4wL21vZHVsZXMvcGFuZ28taW5kaWMtbGFuZy5kbGwiIHRlbHVJbmRpY1NjcmlwdEVuZ2luZUxhbmcgUGFuZ29FbmdpbmVMYW5nIFBhbmdvUmVuZGVyTm9uZSB0ZWx1Z3U6Kg0KKyIvdGFyZ2V0L2xpYi9wYW5nby8xLjYuMC9tb2R1bGVzL3BhbmdvLWluZGljLWxhbmcuZGxsIiBrbmRhSW5kaWNTY3JpcHRFbmdpbmVMYW5nIFBhbmdvRW5naW5lTGFuZyBQYW5nb1JlbmRlck5vbmUga2FubmFkYToqDQorIi90YXJnZXQvbGliL3BhbmdvLzEuNi4wL21vZHVsZXMvcGFuZ28taW5kaWMtbGFuZy5kbGwiIG1seW1JbmRpY1NjcmlwdEVuZ2luZUxhbmcgUGFuZ29FbmdpbmVMYW5nIFBhbmdvUmVuZGVyTm9uZSBtYWxheWFsYW06Kg0KKyIvdGFyZ2V0L2xpYi9wYW5nby8xLjYuMC9tb2R1bGVzL3BhbmdvLWluZGljLWxhbmcuZGxsIiBzaW5oSW5kaWNTY3JpcHRFbmdpbmVMYW5nIFBhbmdvRW5naW5lTGFuZyBQYW5nb1JlbmRlck5vbmUgc2luaGFsYToqDQorIi90YXJnZXQvbGliL3BhbmdvLzEuNi4wL21vZHVsZXMvcGFuZ28ta2htZXItZmMuZGxsIiBLaG1lclNjcmlwdEVuZ2luZUZjIFBhbmdvRW5naW5lU2hhcGUgUGFuZ29SZW5kZXJGYyBraG1lcjoqDQorIi90YXJnZXQvbGliL3BhbmdvLzEuNi4wL21vZHVsZXMvcGFuZ28tc3lyaWFjLWZjLmRsbCIgU3lyaWFjU2NyaXB0RW5naW5lRmMgUGFuZ29FbmdpbmVTaGFwZSBQYW5nb1JlbmRlckZjIHN5cmlhYzoqDQorIi90YXJnZXQvbGliL3BhbmdvLzEuNi4wL21vZHVsZXMvcGFuZ28tdGhhaS1mYy5kbGwiIFRoYWlTY3JpcHRFbmdpbmVGYyBQYW5nb0VuZ2luZVNoYXBlIFBhbmdvUmVuZGVyRmMgdGhhaToqIGxhbzoqDQorIi90YXJnZXQvbGliL3BhbmdvLzEuNi4wL21vZHVsZXMvcGFuZ28tdGliZXRhbi1mYy5kbGwiIFRpYmV0YW5TY3JpcHRFbmdpbmVGYyBQYW5nb0VuZ2luZVNoYXBlIFBhbmdvUmVuZGVyRmMgdGliZXRhbjoqDQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvaGVscGVycy9HcmFwaHZpejIuMjYuMy9saWIvbGVmdHkvYm94LmxlZnR5IGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvaGVscGVycy9HcmFwaHZpejIuMjYuMy9saWIvbGVmdHkvYm94LmxlZnR5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1MzRhNjUKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS9oZWxwZXJzL0dyYXBodml6Mi4yNi4zL2xpYi9sZWZ0eS9ib3gubGVmdHkKQEAgLTAsMCArMSwxNTcgQEAKK2xvYWQgKCdkZWYubGVmdHknKTsNCitkZWZpbml0ICgpOw0KKyMNCisjIGluaXRpYWxpemUgd2luZG93IGRhdGENCisjDQorY2FudmFzID0gZGVmY2FudmFzOw0KK3dyZWN0ID0gWzAgPSBbJ3gnID0gMDsgJ3knID0gMDtdOyAxID0gWyd4JyA9IDQwMDsgJ3knID0gNTAwO107XTsNCitzZXR3aWRnZXRhdHRyIChjYW52YXMsIFsnd2luZG93JyA9IHdyZWN0O10pOw0KKyMNCisjIGRhdGEgc3RydWN0dXJlcw0KKyMNCitvYmphcnJheSA9IFtdOw0KK29iam51bSA9IDA7DQorIw0KKyMgbWlzYyBmdW5jdGlvbnMNCisjDQorbWluID0gZnVuY3Rpb24gKGEsIGIpIHsNCisgICAgaWYgKGEgPD0gYikNCisgICAgICAgIHJldHVybiBhOw0KKyAgICByZXR1cm4gYjsNCit9Ow0KK21heCA9IGZ1bmN0aW9uIChhLCBiKSB7DQorICAgIGlmIChiIDw9IGEpDQorICAgICAgICByZXR1cm4gYTsNCisgICAgcmV0dXJuIGI7DQorfTsNCityZWN0b2YgPSBmdW5jdGlvbiAocDEsIHAyKSB7DQorICAgIHJldHVybiBbDQorICAgICAgICAwID0gWyd4JyA9IG1pbiAocDEueCwgcDIueCk7ICd5JyA9IG1pbiAocDEueSwgcDIueSk7XTsNCisgICAgICAgIDEgPSBbJ3gnID0gbWF4IChwMS54LCBwMi54KTsgJ3knID0gbWF4IChwMS55LCBwMi55KTtdOw0KKyAgICBdOw0KK307DQorcG9pbnRhZGQgPSBmdW5jdGlvbiAocDEsIHAyKSB7DQorICAgIHJldHVybiBbJ3gnID0gcDIueCArIHAxLng7ICd5JyA9IHAyLnkgKyBwMS55O107DQorfTsNCitwb2ludHN1YiA9IGZ1bmN0aW9uIChwMSwgcDIpIHsNCisgICAgcmV0dXJuIFsneCcgPSBwMi54IC0gcDEueDsgJ3knID0gcDIueSAtIHAxLnk7XTsNCit9Ow0KKyMNCisjIHJlbmRlcmluZyBmdW5jdGlvbnMNCisjDQorZHJhd2JveCA9IGZ1bmN0aW9uIChvYmosIGNvbG9yKSB7DQorICAgIGJveCAoY2FudmFzLCBvYmosIG9iai5yZWN0LCBbJ2NvbG9yJyA9IGNvbG9yO10pOw0KK307DQorcmVkcmF3Ym94ZXMgPSBmdW5jdGlvbiAoKSB7DQorICAgIGxvY2FsIGk7DQorICAgIGNsZWFyIChjYW52YXMpOw0KKyAgICBmb3IgKGkgPSAwOyBpIDwgb2JqbnVtOyBpID0gaSArIDEpDQorICAgICAgICBkcmF3Ym94IChvYmphcnJheVtpXSwgMSk7DQorfTsNCityZWRyYXcgPSBmdW5jdGlvbiAoY2FudmFzKSB7DQorICAgIHJlZHJhd2JveGVzICgpOw0KK307DQorIw0KKyMgZWRpdGluZyBmdW5jdGlvbnMNCisjDQorbmV3ID0gZnVuY3Rpb24gKHJlY3QpIHsNCisgICAgb2JqYXJyYXlbb2JqbnVtXSA9IFsNCisgICAgICAgICdyZWN0JyA9IHJlY3Q7DQorICAgICAgICAnaWQnID0gb2JqbnVtOw0KKyAgICBdOw0KKyAgICBvYmpudW0gPSBvYmpudW0gKyAxOw0KKyAgICByZXR1cm4gb2JqYXJyYXlbb2JqbnVtIC0gMV07DQorfTsNCityZXNoYXBlID0gZnVuY3Rpb24gKG9iaiwgcmVjdCkgew0KKyAgICBvYmoucmVjdCA9IHJlY3Q7DQorICAgIHJldHVybiBvYmo7DQorfTsNCittb3ZlID0gZnVuY3Rpb24gKG9iaiwgcCkgew0KKyAgICBvYmoucmVjdFswXSA9IHBvaW50YWRkIChvYmoucmVjdFswXSwgcCk7DQorICAgIG9iai5yZWN0WzFdID0gcG9pbnRhZGQgKG9iai5yZWN0WzFdLCBwKTsNCisgICAgcmV0dXJuIG9iajsNCit9Ow0KK2RlbGV0ZSA9IGZ1bmN0aW9uIChvYmopIHsNCisgICAgaWYgKG9iai5pZCB+PSBvYmpudW0gLSAxKSB7DQorICAgICAgICBvYmphcnJheVtvYmouaWRdID0gb2JqYXJyYXlbb2JqbnVtIC0gMV07DQorICAgICAgICBvYmphcnJheVtvYmouaWRdLmlkID0gb2JqLmlkOw0KKyAgICB9DQorICAgIHJlbW92ZSAob2JqbnVtIC0gMSwgb2JqYXJyYXkpOw0KKyAgICBvYmpudW0gPSBvYmpudW0gLSAxOw0KK307DQorIw0KKyMgdXNlciBpbnRlcmZhY2UgZnVuY3Rpb25zDQorIw0KKyMgbGVmdCBtb3VzZSBidXR0b24gY3JlYXRlcyBuZXcgYm94DQorIyBtaWRkbGUgYnV0dG9uIG1vdmVzIGEgYm94DQorIyByaWdodCBidXR0b24gZGVsZXRlcyBhIGJveA0KKyMNCitsZWZ0ZG93biA9IGZ1bmN0aW9uIChkYXRhKSB7DQorICAgIGlmIChkYXRhLm9iaiB+PSBudWxsKQ0KKyAgICAgICAgcmV0dXJuOw0KKyAgICBsZWZ0Ym94ID0gbmV3IChyZWN0b2YgKGRhdGEucG9zLCBkYXRhLnBvcykpOw0KKyAgICBkcmF3Ym94IChsZWZ0Ym94LCAxKTsNCisgICAgc2V0Z2Z4YXR0ciAoY2FudmFzLCBbJ21vZGUnID0gJ3hvcic7XSk7DQorfTsNCitsZWZ0bW92ZSA9IGZ1bmN0aW9uIChkYXRhKSB7DQorICAgIGlmICh+bGVmdGJveCkNCisgICAgICAgIHJldHVybjsNCisgICAgZHJhd2JveCAobGVmdGJveCwgMSk7DQorICAgIGNsZWFycGljayAoY2FudmFzLCBsZWZ0Ym94KTsNCisgICAgcmVzaGFwZSAobGVmdGJveCwgcmVjdG9mIChkYXRhLnBwb3MsIGRhdGEucG9zKSk7DQorICAgIGRyYXdib3ggKGxlZnRib3gsIDEpOw0KK307DQorbGVmdHVwID0gZnVuY3Rpb24gKGRhdGEpIHsNCisgICAgaWYgKH5sZWZ0Ym94KQ0KKyAgICAgICAgcmV0dXJuOw0KKyAgICBkcmF3Ym94IChsZWZ0Ym94LCAxKTsNCisgICAgY2xlYXJwaWNrIChjYW52YXMsIGxlZnRib3gpOw0KKyAgICByZXNoYXBlIChsZWZ0Ym94LCByZWN0b2YgKGRhdGEucHBvcywgZGF0YS5wb3MpKTsNCisgICAgc2V0Z2Z4YXR0ciAoY2FudmFzLCBbJ21vZGUnID0gJ3NyYyc7XSk7DQorICAgIGRyYXdib3ggKGxlZnRib3gsIDEpOw0KKyAgICByZW1vdmUgKCdsZWZ0Ym94Jyk7DQorfTsNCittaWRkbGVkb3duID0gZnVuY3Rpb24gKGRhdGEpIHsNCisgICAgaWYgKGRhdGEub2JqID09IG51bGwpDQorICAgICAgICByZXR1cm47DQorICAgIG1pZGRsZWJveCA9IGRhdGEub2JqOw0KKyAgICBtaWRkbGVwb3MgPSBkYXRhLnBvczsNCisgICAgc2V0Z2Z4YXR0ciAoY2FudmFzLCBbJ21vZGUnID0gJ3hvcic7XSk7DQorfTsNCittaWRkbGVtb3ZlID0gZnVuY3Rpb24gKGRhdGEpIHsNCisgICAgaWYgKH5taWRkbGVib3gpDQorICAgICAgICByZXR1cm47DQorICAgIGRyYXdib3ggKG1pZGRsZWJveCwgMSk7DQorICAgIGNsZWFycGljayAoY2FudmFzLCBtaWRkbGVib3gpOw0KKyAgICBtb3ZlIChtaWRkbGVib3gsIHBvaW50c3ViIChtaWRkbGVwb3MsIGRhdGEucG9zKSk7DQorICAgIG1pZGRsZXBvcyA9IGRhdGEucG9zOw0KKyAgICBkcmF3Ym94IChtaWRkbGVib3gsIDEpOw0KK307DQorbWlkZGxldXAgPSBmdW5jdGlvbiAoZGF0YSkgew0KKyAgICBpZiAofm1pZGRsZWJveCkNCisgICAgICAgIHJldHVybjsNCisgICAgZHJhd2JveCAobWlkZGxlYm94LCAxKTsNCisgICAgY2xlYXJwaWNrIChjYW52YXMsIG1pZGRsZWJveCk7DQorICAgIG1vdmUgKG1pZGRsZWJveCwgcG9pbnRzdWIgKG1pZGRsZXBvcywgZGF0YS5wb3MpKTsNCisgICAgc2V0Z2Z4YXR0ciAoY2FudmFzLCBbJ21vZGUnID0gJ3NyYyc7XSk7DQorICAgIGRyYXdib3ggKG1pZGRsZWJveCwgMSk7DQorICAgIHJlbW92ZSAoJ21pZGRsZXBvcycpOw0KKyAgICByZW1vdmUgKCdtaWRkbGVib3gnKTsNCit9Ow0KK3JpZ2h0dXAgPSBmdW5jdGlvbiAoZGF0YSkgew0KKyAgICBpZiAoZGF0YS5wb2JqID09IG51bGwpDQorICAgICAgICByZXR1cm47DQorICAgIGRyYXdib3ggKGRhdGEub2JqLCAwKTsNCisgICAgY2xlYXJwaWNrIChjYW52YXMsIGRhdGEub2JqKTsNCisgICAgZGVsZXRlIChkYXRhLm9iaik7DQorfTsNCitkb3BzID0gZnVuY3Rpb24gKCkgew0KKyAgICBsb2NhbCBzOw0KKw0KKyAgICBzID0gWyd4JyA9IDggKiAzMDA7ICd5JyA9IDEwLjUgKiAzMDA7XTsNCisgICAgY2FudmFzID0gY3JlYXRld2lkZ2V0ICgtMSwgWyd0eXBlJyA9ICdwcyc7ICdzaXplJyA9IHM7XSk7DQorICAgIHNldHdpZGdldGF0dHIgKGNhbnZhcywgWyd3aW5kb3cnID0gd3JlY3Q7XSk7DQorICAgIHJlZHJhdyAoY2FudmFzKTsNCisgICAgZGVzdHJveXdpZGdldCAoY2FudmFzKTsNCisgICAgY2FudmFzPWRlZmNhbnZhczsNCit9Ow0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL2hlbHBlcnMvR3JhcGh2aXoyLjI2LjMvbGliL2xlZnR5L2RlZi5sZWZ0eSBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL2hlbHBlcnMvR3JhcGh2aXoyLjI2LjMvbGliL2xlZnR5L2RlZi5sZWZ0eQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTA5OWJlCi0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvaGVscGVycy9HcmFwaHZpejIuMjYuMy9saWIvbGVmdHkvZGVmLmxlZnR5CkBAIC0wLDAgKzEsMTUgQEAKK2RlZmluaXQgPSBmdW5jdGlvbiAoKSB7DQorICAgIGRlZnZpZXcgPSBjcmVhdGV3aWRnZXQgKC0xLCBbDQorICAgICAgICAndHlwZScgPSAndmlldyc7DQorICAgICAgICAnbmFtZScgPSAnZ3JhcGhpY3Mgdmlldyc7DQorICAgICAgICAnb3JpZ2luJyA9IFsneCcgPSAxOyAneScgPSAxO107DQorICAgICAgICAnc2l6ZScgPSBbJ3gnID0gNDAwOyAneScgPSA1MDA7XTsNCisgICAgXSk7DQorICAgIGRlZnNjcm9sbCA9IGNyZWF0ZXdpZGdldCAoZGVmdmlldywgWyd0eXBlJyA9ICdzY3JvbGwnO10pOw0KKyAgICBkZWZjYW52YXMgPSBjcmVhdGV3aWRnZXQgKGRlZnNjcm9sbCwgWw0KKyAgICAgICAgJ3R5cGUnID0gJ2NhbnZhcyc7DQorICAgICAgICAnb3JpZ2luJyA9IFsneCcgPSAxOyAneScgPSAxO107DQorICAgICAgICAnc2l6ZScgPSBbJ3gnID0gNDAwOyAneScgPSA1MDA7XTsNCisgICAgICAgICdib3JkZXJ3aWR0aCcgPSAxOw0KKyAgICBdKTsNCit9Ow0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL2hlbHBlcnMvR3JhcGh2aXoyLjI2LjMvbGliL2xlZnR5L2RvdHR5LmxlZnR5IGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvaGVscGVycy9HcmFwaHZpejIuMjYuMy9saWIvbGVmdHkvZG90dHkubGVmdHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWE3OWZkNAotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL2hlbHBlcnMvR3JhcGh2aXoyLjI2LjMvbGliL2xlZnR5L2RvdHR5LmxlZnR5CkBAIC0wLDAgKzEsNzM1IEBACisjDQorIyBET1RUWQ0KKyMNCitkb3R0eSA9IFsNCisgICAgJ2tleXMnID0gWw0KKyAgICAgICAgJ25pZCcgICAgPSAnbmlkJzsNCisgICAgICAgICdlaWQnICAgID0gJ2VpZCc7DQorICAgICAgICAnZ2lkJyAgICA9ICdnaWQnOw0KKyAgICAgICAgJ25hbWUnICAgPSAnbmFtZSc7DQorICAgICAgICAnYXR0cicgICA9ICdhdHRyJzsNCisgICAgICAgICdnYXR0cicgID0gJ2dyYXBoYXR0cic7DQorICAgICAgICAnZWF0dHInICA9ICdlZGdlYXR0cic7DQorICAgICAgICAnbmF0dHInICA9ICdub2RlYXR0cic7DQorICAgICAgICAnZWRnZXMnICA9ICdlZGdlcyc7DQorICAgICAgICAndGFpbCcgICA9ICd0YWlsJzsNCisgICAgICAgICd0cG9ydCcgID0gJ3Rwb3J0JzsNCisgICAgICAgICdoZWFkJyAgID0gJ2hlYWQnOw0KKyAgICAgICAgJ2hwb3J0JyAgPSAnaHBvcnQnOw0KKyAgICAgICAgJ3BvcycgICAgPSAncG9zJzsNCisgICAgICAgICdzaXplJyAgID0gJ3NpemUnOw0KKyAgICAgICAgJ3JlY3QnICAgPSAncmVjdCc7DQorICAgICAgICAnZm5hbWUnICA9ICdmb250bmFtZSc7DQorICAgICAgICAnZnNpemUnICA9ICdmb250c2l6ZSc7DQorICAgICAgICAnZmNvbG9yJyA9ICdmb250Y29sb3InOw0KKyAgICAgICAgJ2Rjb2xvcicgPSAnZHJhd2NvbG9yJzsNCisgICAgICAgICdiY29sb3InID0gJ2ZpbGxjb2xvcic7DQorICAgIF07DQorICAgICdtYXBzJyA9IFsNCisgICAgICAgICdYMTEnID0gWw0KKyAgICAgICAgICAgICdmb250bWFwJyA9IFsNCisgICAgICAgICAgICAgICAgJ1RpbWVzLVJvbWFuJyAgICA9ICctKi10aW1lcy1tZWRpdW0tci0qLS0lZC0qLSotKi0qLSotKi0xJzsNCisgICAgICAgICAgICAgICAgJ1RpbWVzLUl0YWxpYycgICA9ICctKi10aW1lcy1tZWRpdW0taS0qLS0lZC0qLSotKi0qLSotKi0xJzsNCisgICAgICAgICAgICAgICAgJ1RpbWVzLUJvbGQnICAgICA9ICctKi10aW1lcy1ib2xkLXItKi0tJWQtKi0qLSotKi0qLSotMSc7DQorICAgICAgICAgICAgICAgICdDb3VyaWVyJyAgICAgICAgPSAnLSotY291cmllci1ib2xkLXItKi0tJWQtKi0qLSotKi0qLSotMSc7DQorICAgICAgICAgICAgICAgICdDb3VyaWVyLUJvbGQnICAgPSAnLSotY291cmllci1ib2xkLXItKi0tJWQtKi0qLSotKi0qLSotMSc7DQorICAgICAgICAgICAgICAgICdIZWx2ZXRpY2EnICAgICAgPSAoDQorICAgICAgICAgICAgICAgICAgICAgJy0qLWhlbHZldGljYS1tZWRpdW0tci1ub3JtYWwtLSVkLSotKi0qLXAtKi1pc284ODU5LTEnDQorICAgICAgICAgICAgICAgICk7DQorICAgICAgICAgICAgICAgICdIZWx2ZXRpY2EtQm9sZCcgPSAoDQorICAgICAgICAgICAgICAgICAgICAnLSotaGVsdmV0aWNhLWJvbGQtci1ub3JtYWwtLSVkLSotKi0qLXAtKi1pc284ODU5LTEnDQorICAgICAgICAgICAgICAgICk7DQorICAgICAgICAgICAgXTsNCisgICAgICAgICAgICAncHNmb250bWFwJyA9IFsNCisgICAgICAgICAgICAgICAgJ1RpbWVzLVJvbWFuJyAgICA9ICdUaW1lcy1Sb21hbic7DQorICAgICAgICAgICAgICAgICdUaW1lcy1JdGFsaWMnICAgPSAnVGltZXMtSXRhbGljJzsNCisgICAgICAgICAgICAgICAgJ1RpbWVzLUJvbGQnICAgICA9ICdUaW1lcy1Cb2xkJzsNCisgICAgICAgICAgICAgICAgJ0NvdXJpZXInICAgICAgICA9ICdDb3VyaWVyJzsNCisgICAgICAgICAgICAgICAgJ0NvdXJpZXItQm9sZCcgICA9ICdDb3VyaWVyLUJvbGQnOw0KKyAgICAgICAgICAgICAgICAnSGVsdmV0aWNhJyAgICAgID0gJ0hlbHZldGljYSc7DQorICAgICAgICAgICAgICAgICdIZWx2ZXRpY2EtQm9sZCcgPSAnSGVsdmV0aWNhLUJvbGQnOw0KKyAgICAgICAgICAgIF07DQorICAgICAgICBdOw0KKyAgICAgICAgJ21zd2luJyA9IFsNCisgICAgICAgICAgICAnZm9udG1hcCcgPSBbDQorICAgICAgICAgICAgICAgICdUaW1lcy1Sb21hbicgICAgPSAnVGltZXMgTmV3IFJvbWFuJzsNCisgICAgICAgICAgICAgICAgJ1RpbWVzLUl0YWxpYycgICA9ICdUaW1lcyBOZXcgUm9tYW4gSXRhbGljJzsNCisgICAgICAgICAgICAgICAgJ1RpbWVzLUJvbGQnICAgICA9ICdUaW1lcyBOZXcgUm9tYW4gQm9sZCc7DQorICAgICAgICAgICAgICAgICdDb3VyaWVyJyAgICAgICAgPSAnQ291cmllciBOZXcnOw0KKyAgICAgICAgICAgICAgICAnQ291cmllci1Cb2xkJyAgID0gJ0NvdXJpZXIgTmV3IEJvbGQnOw0KKyAgICAgICAgICAgICAgICAnSGVsdmV0aWNhJyAgICAgID0gJ0FyaWFsJzsNCisgICAgICAgICAgICAgICAgJ0hlbHZldGljYS1Cb2xkJyA9ICdBcmlhbCBCb2xkJzsNCisgICAgICAgICAgICBdOw0KKyAgICAgICAgICAgICdwc2ZvbnRtYXAnID0gWw0KKyAgICAgICAgICAgICAgICAnVGltZXMtUm9tYW4nICAgID0gJ1RpbWVzIE5ldyBSb21hbic7DQorICAgICAgICAgICAgICAgICdUaW1lcy1JdGFsaWMnICAgPSAnVGltZXMgTmV3IFJvbWFuIEl0YWxpYyc7DQorICAgICAgICAgICAgICAgICdUaW1lcy1Cb2xkJyAgICAgPSAnVGltZXMgTmV3IFJvbWFuIEJvbGQnOw0KKyAgICAgICAgICAgICAgICAnQ291cmllcicgICAgICAgID0gJ0NvdXJpZXIgTmV3JzsNCisgICAgICAgICAgICAgICAgJ0NvdXJpZXItQm9sZCcgICA9ICdDb3VyaWVyIE5ldyBCb2xkJzsNCisgICAgICAgICAgICAgICAgJ0hlbHZldGljYScgICAgICA9ICdBcmlhbCc7DQorICAgICAgICAgICAgICAgICdIZWx2ZXRpY2EtQm9sZCcgPSAnQXJpYWwgQm9sZCc7DQorICAgICAgICAgICAgXTsNCisgICAgICAgIF07DQorICAgIF07DQorICAgICdwcm90b2d0JyA9IFsNCisgICAgICAgICdncmFwaCcgPSBbDQorICAgICAgICAgICAgJ2dyYXBoYXR0cicgPSBbDQorICAgICAgICAgICAgICAgICdmb250c2l6ZScgPSAnMTQnOw0KKyAgICAgICAgICAgICAgICAnZm9udG5hbWUnID0gJ1RpbWVzLVJvbWFuJzsNCisgICAgICAgICAgICAgICAgJ2ZvbnRjb2xvcicgPSAnYmxhY2snOw0KKyAgICAgICAgICAgIF07DQorICAgICAgICAgICAgJ25vZGVhdHRyJyA9IFsNCisgICAgICAgICAgICAgICAgJ3NoYXBlJyA9ICdlbGxpcHNlJzsNCisgICAgICAgICAgICAgICAgJ2ZvbnRzaXplJyA9ICcxNCc7DQorICAgICAgICAgICAgICAgICdmb250bmFtZScgPSAnVGltZXMtUm9tYW4nOw0KKyAgICAgICAgICAgICAgICAnZm9udGNvbG9yJyA9ICdibGFjayc7DQorICAgICAgICAgICAgICAgICdzdHlsZScgPSAnc29saWQnOw0KKyAgICAgICAgICAgIF07DQorICAgICAgICAgICAgJ2VkZ2VhdHRyJyA9IFsNCisgICAgICAgICAgICAgICAgJ2ZvbnRzaXplJyA9ICcxNCc7DQorICAgICAgICAgICAgICAgICdmb250bmFtZScgPSAnVGltZXMtUm9tYW4nOw0KKyAgICAgICAgICAgICAgICAnZm9udGNvbG9yJyA9ICdibGFjayc7DQorICAgICAgICAgICAgICAgICdzdHlsZScgPSAnc29saWQnOw0KKyAgICAgICAgICAgIF07DQorICAgICAgICAgICAgJ2dyYXBoZGljdCcgPSBbXTsNCisgICAgICAgICAgICAnbm9kZWRpY3QnID0gW107DQorICAgICAgICAgICAgJ2dyYXBocycgPSBbXTsNCisgICAgICAgICAgICAnbm9kZXMnID0gW107DQorICAgICAgICAgICAgJ2VkZ2VzJyA9IFtdOw0KKyAgICAgICAgICAgICdtYXhnaWQnID0gMDsNCisgICAgICAgICAgICAnbWF4bmlkJyA9IDA7DQorICAgICAgICAgICAgJ21heGVpZCcgPSAwOw0KKyAgICAgICAgICAgICd0eXBlJyA9ICdkaWdyYXBoJzsNCisgICAgICAgIF07DQorICAgICAgICAnbGF5b3V0bW9kZScgPSAnc3luYyc7DQorICAgICAgICAnbHNlcnZlcicgPSAnZG90JzsNCisgICAgICAgICdlZGdlaGFuZGxlcycgPSAxOw0KKyAgICAgICAgJ25vdW5kbycgPSAwOw0KKyAgICBdOw0KKyAgICAnbHNlcnZlcnMnID0gW107DQorICAgICdtbGV2ZWwnID0gMDsNCisgICAgJ2dyYXBocycgPSBbXTsNCisgICAgJ3ZpZXdzJyA9IFtdOw0KKyAgICAncHJvdG92dCcgPSBbDQorICAgICAgICAnbm9ybWFsJyA9IFsNCisgICAgICAgICAgICAnbmFtZScgPSAnRE9UVFknOw0KKyAgICAgICAgICAgICdvcmlnJyA9IFsneCcgPSAxOyAneScgPSAxO107DQorICAgICAgICAgICAgJ3NpemUnID0gWyd4JyA9IDQyMDsgJ3knID0gNTIwO107DQorICAgICAgICAgICAgJ3dyZWN0JyA9IFsNCisgICAgICAgICAgICAgICAgMCA9IFsneCcgPSAwOyAneScgPSAwO107DQorICAgICAgICAgICAgICAgIDEgPSBbJ3gnID0gNDAwOyAneScgPSA1MDA7XTsNCisgICAgICAgICAgICBdOw0KKyAgICAgICAgICAgICd2c2l6ZScgPSBbJ3gnID0gNDAwOyAneScgPSA1MDA7XTsNCisgICAgICAgICAgICAndzJ2JyA9IDE7DQorICAgICAgICBdOw0KKyAgICAgICAgJ2JpcmRzZXllJyA9IFsNCisgICAgICAgICAgICAndHlwZScgPSAnYmlyZHNleWUnOw0KKyAgICAgICAgICAgICduYW1lJyA9ICdET1RUWSBiaXJkc2V5ZSB2aWV3JzsNCisgICAgICAgICAgICAnb3JpZycgPSBbJ3gnID0gMTsgJ3knID0gMTtdOw0KKyAgICAgICAgICAgICdzaXplJyA9IFsneCcgPSAyMjA7ICd5JyA9IDI2MDtdOw0KKyAgICAgICAgICAgICd3cmVjdCcgPSBbDQorICAgICAgICAgICAgICAgIDAgPSBbJ3gnID0gMDsgJ3knID0gMDtdOw0KKyAgICAgICAgICAgICAgICAxID0gWyd4JyA9IDIwMDsgJ3knID0gMjUwO107DQorICAgICAgICAgICAgXTsNCisgICAgICAgICAgICAndnNpemUnID0gWyd4JyA9IDIwMDsgJ3knID0gMjUwO107DQorICAgICAgICAgICAgJ3cydicgPSAxOw0KKyAgICAgICAgXTsNCisgICAgXTsNCisgICAgJ3BhZ2VzaXplcycgPSBbDQorICAgICAgICAnOC41eDExJyA9IFsneCcgPSAgICA4OyAneScgPSAxMC41O107DQorICAgICAgICAnMTF4MTcnICA9IFsneCcgPSAxMC41OyAneScgPSAxNi41O107DQorICAgICAgICAnMzZ4NTAnICA9IFsneCcgPSAzNS41OyAneScgPSA0OS41O107DQorICAgIF07DQorXTsNCitsb2FkICgnZG90dHlfZHJhdy5sZWZ0eScpOw0KK2xvYWQgKCdkb3R0eV9lZGl0LmxlZnR5Jyk7DQorbG9hZCAoJ2RvdHR5X2xheW91dC5sZWZ0eScpOw0KK2xvYWQgKCdkb3R0eV91aS5sZWZ0eScpOw0KKyMNCisjIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9ucw0KKyMNCitkb3R0eS5pbml0ID0gZnVuY3Rpb24gKCkgew0KKyAgICBkb3R0eS5mb250bWFwID0gZG90dHkubWFwc1tnZXRlbnYgKCdMRUZUWVdJTlNZUycpXS5mb250bWFwOw0KKyAgICBkb3R0eS5jbGlwZ3QgPSBkb3R0eS5wcm90b2d0LmNyZWF0ZWdyYXBoIChbJ25vdW5kbycgPSAxO10pOw0KKyAgICBkb3R0eS5pbml0ZWQgPSAxOw0KK307DQorZG90dHkuc2ltcGxlID0gZnVuY3Rpb24gKGZpbGUpIHsNCisgICAgaWYgKGRvdHR5LmluaXRlZCB+PSAxKQ0KKyAgICAgICAgZG90dHkuaW5pdCAoKTsNCisgICAgZG90dHkuY3JlYXRldmlld2FuZGdyYXBoIChmaWxlLCAnZmlsZScsIG51bGwsIG51bGwpOw0KKyAgICB0eHR2aWV3ICgnb2ZmJyk7DQorfTsNCisjDQorIyBtYWluIG9wZXJhdGlvbnMNCisjDQorZG90dHkucHJvdG9ndC5jcmVhdGVncmFwaCA9IGZ1bmN0aW9uIChwcm90b2d0KSB7DQorICAgIGxvY2FsIGd0LCBpZCwgZ3RpZDsNCisNCisgICAgaWYgKH5wcm90b2d0KQ0KKyAgICAgICAgcHJvdG9ndCA9IGRvdHR5LnByb3RvZ3Q7DQorICAgIGZvciAoZ3RpZCA9IDA7IGRvdHR5LmdyYXBoc1tndGlkXTsgZ3RpZCA9IGd0aWQgKyAxKQ0KKyAgICAgICAgOw0KKyAgICBndCA9IChkb3R0eS5ncmFwaHNbZ3RpZF0gPSBbXSk7DQorICAgIGlmIChwcm90b2d0Lm1vZGUgfj0gJ3JlcGxhY2UnKSB7DQorICAgICAgICBmb3IgKGlkIGluIGRvdHR5LnByb3RvZ3QpDQorICAgICAgICAgICAgZ3RbaWRdID0gY29weSAoZG90dHkucHJvdG9ndFtpZF0pOw0KKyAgICB9DQorICAgIGZvciAoaWQgaW4gcHJvdG9ndCkNCisgICAgICAgIGd0W2lkXSA9IGNvcHkgKHByb3RvZ3RbaWRdKTsNCisgICAgZ3QuZ3RpZCA9IGd0aWQ7DQorICAgIGd0LnZpZXdzID0gW107DQorICAgIGd0LnVuZG9hcnJheSA9IFsnbGV2ZWwnID0gMDsgJ2VudHJpZXMnID0gW107XTsNCisgICAgZ3QuYnVzeSA9IDA7DQorICAgIHJldHVybiBndDsNCit9Ow0KK2RvdHR5LnByb3RvZ3QuY29weWdyYXBoID0gZnVuY3Rpb24gKG9ndCkgew0KKyAgICBsb2NhbCBndCwgZ3RpZCwgaWQ7DQorDQorICAgIGZvciAoZ3RpZCA9IDA7IGRvdHR5LmdyYXBoc1tndGlkXTsgZ3RpZCA9IGd0aWQgKyAxKQ0KKyAgICAgICAgOw0KKyAgICBndCA9IChkb3R0eS5ncmFwaHNbZ3RpZF0gPSBbXSk7DQorICAgIGZvciAoaWQgaW4gb2d0KQ0KKyAgICAgICAgZ3RbaWRdID0gY29weSAob2d0W2lkXSk7DQorICAgIGd0Lmd0aWQgPSBndGlkOw0KKyAgICBndC52aWV3cyA9IFtdOw0KKyAgICBndC51bmRvYXJyYXkgPSBbJ2xldmVsJyA9IDA7ICdlbnRyaWVzJyA9IFtdO107DQorICAgIGd0LmJ1c3kgPSAwOw0KKyAgICByZXR1cm4gZ3Q7DQorfTsNCitkb3R0eS5wcm90b2d0LmRlc3Ryb3lncmFwaCA9IGZ1bmN0aW9uIChndCkgew0KKyAgICBsb2NhbCB2aWQsIHZsaXN0Ow0KKw0KKyAgICBpZiAoZ3QubGF5b3V0cGVuZGluZyA+IDApDQorICAgICAgICBndC5jYW5jZWxsYXlvdXQgKGd0KTsNCisgICAgZm9yICh2aWQgaW4gZ3Qudmlld3MpDQorICAgICAgICB2bGlzdFt2aWRdID0gZ3Qudmlld3NbdmlkXTsNCisgICAgZm9yICh2aWQgaW4gZ3Qudmlld3MpDQorICAgICAgICBndC5kZXN0cm95dmlldyAoZ3QsIHZsaXN0W3ZpZF0pOw0KKyAgICByZW1vdmUgKGd0Lmd0aWQsIGRvdHR5LmdyYXBocyk7DQorfTsNCitkb3R0eS5wcm90b2d0LmxvYWRncmFwaCA9IGZ1bmN0aW9uIChndCwgbmFtZSwgdHlwZSwgcHJvdG9ncmFwaCwgbGF5b3V0ZmxhZykgew0KKyAgICBsb2NhbCBmZCwgdmlkLCB2dCwgZ3JhcGgsIG5pZCwgZWlkLCBnaWQ7DQorDQorICAgIGlmIChndC5sYXlvdXRwZW5kaW5nID4gMCkNCisgICAgICAgIGd0LmNhbmNlbGxheW91dCAoZ3QpOw0KKyAgICBpZiAofm5hbWUpDQorICAgICAgICBpZiAofihuYW1lID0gYXNrICgnZmlsZSBuYW1lOicsICdmaWxlJywgJycpKSkNCisgICAgICAgICAgICByZXR1cm47DQorICAgIGRvdHR5LnB1c2hidXN5IChndCwgZ3Qudmlld3MpOw0KKyAgICBkb3R0eS5tZXNzYWdlICgxLCAnbG9hZGluZycpOw0KKyAgICBpZiAofnByb3RvZ3JhcGgpDQorICAgICAgICBwcm90b2dyYXBoID0gZG90dHkucHJvdG9ndC5ncmFwaDsNCisgICAgaWYgKA0KKyAgICAgICAgfigoZmQgPSBkb3R0eS5vcGVuaW8gKG5hbWUsIHR5cGUsICdyJykpID49IDApIHwNCisgICAgICAgIH4oZ3JhcGggPSByZWFkZ3JhcGggKGZkLCBwcm90b2dyYXBoKSkNCisgICAgKSB7DQorICAgICAgICBkb3R0eS5tZXNzYWdlICgwLCAnY2Fubm90IGxvYWQgZ3JhcGgnKTsNCisgICAgICAgIGRvdHR5LnBvcGJ1c3kgKGd0LCBndC52aWV3cyk7DQorICAgICAgICByZXR1cm47DQorICAgIH0NCisgICAgZm9yICh2aWQgaW4gZ3Qudmlld3MpIHsNCisgICAgICAgIHZ0ID0gZ3Qudmlld3NbdmlkXTsNCisgICAgICAgIHZ0LmNvbG9ycyA9IFtdOw0KKyAgICAgICAgdnQuY29sb3JuID0gMjsNCisgICAgfQ0KKyAgICBndC5ncmFwaCA9IGdyYXBoOw0KKyAgICBndC5uYW1lID0gbmFtZTsNCisgICAgZ3QudHlwZSA9IHR5cGU7DQorICAgIGd0LnVuZG9hcnJheSA9IFsnbGV2ZWwnID0gMDsgJ2VudHJpZXMnID0gW107XTsNCisgICAgaWYgKH4odHlwZSA9PSAnZmlsZScgJiBuYW1lID09ICctJykpDQorICAgICAgICBjbG9zZWlvIChmZCk7DQorICAgIGdyYXBoLm1heGdpZCA9IHRhYmxlc2l6ZSAoZ3JhcGguZ3JhcGhzKTsNCisgICAgZ3JhcGgubWF4bmlkID0gdGFibGVzaXplIChncmFwaC5ub2Rlcyk7DQorICAgIGdyYXBoLm1heGVpZCA9IHRhYmxlc2l6ZSAoZ3JhcGguZWRnZXMpOw0KKyAgICBmb3IgKG5pZCBpbiBncmFwaC5ub2RlcykNCisgICAgICAgIGdyYXBoLm5vZGVzW25pZF1bZG90dHkua2V5cy5uaWRdID0gbmlkOw0KKyAgICBmb3IgKGVpZCBpbiBncmFwaC5lZGdlcykNCisgICAgICAgIGdyYXBoLmVkZ2VzW2VpZF1bZG90dHkua2V5cy5laWRdID0gZWlkOw0KKyAgICBmb3IgKGdpZCBpbiBncmFwaC5ncmFwaHMpDQorICAgICAgICBncmFwaC5ncmFwaHNbZ2lkXVtkb3R0eS5rZXlzLmdpZF0gPSBnaWQ7DQorICAgIGd0LnVucGFja2F0dHIgKGd0KTsNCisgICAgaWYgKGxheW91dGZsYWcpIHsNCisgICAgICAgIGRvdHR5Lm1lc3NhZ2UgKDEsICdnZW5lcmF0aW5nIGxheW91dCcpOw0KKyAgICAgICAgZ3QubGF5b3V0Z3JhcGggKGd0KTsNCisgICAgfQ0KKyAgICBkb3R0eS5wb3BidXN5IChndCwgZ3Qudmlld3MpOw0KKyAgICByZXR1cm4gZ3QuZ3JhcGg7DQorfTsNCitkb3R0eS5wcm90b2d0LnNhdmVncmFwaCA9IGZ1bmN0aW9uIChndCwgbmFtZSwgdHlwZSkgew0KKyAgICBsb2NhbCBmZDsNCisNCisgICAgaWYgKH5uYW1lKQ0KKyAgICAgICAgaWYgKH4obmFtZSA9IGFzayAoJ2ZpbGUgbmFtZTonLCAnZmlsZScsICcnKSkpDQorICAgICAgICAgICAgcmV0dXJuOw0KKyAgICBpZiAoDQorICAgICAgICB+KChmZCA9IGRvdHR5Lm9wZW5pbyAobmFtZSwgdHlwZSwgJ3cnKSkgPj0gMCkgfA0KKyAgICAgICAgfndyaXRlZ3JhcGggKGZkLCBndC5ncmFwaCwgMCkNCisgICAgKSB7DQorICAgICAgICBkb3R0eS5tZXNzYWdlICgwLCAnY2Fubm90IHNhdmUgZ3JhcGgnKTsNCisgICAgICAgIHJldHVybjsNCisgICAgfQ0KKyAgICBpZiAofih0eXBlID09ICdmaWxlJyAmIG5hbWUgPT0gJy0nKSkNCisgICAgICAgIGNsb3NlaW8gKGZkKTsNCit9Ow0KK2RvdHR5LnByb3RvZ3Quc2V0Z3JhcGggPSBmdW5jdGlvbiAoZ3QsIGdyYXBoKSB7DQorICAgIGxvY2FsIHZpZCwgdnQsIG5pZCwgZWlkLCBnaWQ7DQorDQorICAgIGlmIChndC5sYXlvdXRwZW5kaW5nID4gMCkNCisgICAgICAgIGd0LmNhbmNlbGxheW91dCAoZ3QpOw0KKyAgICBmb3IgKHZpZCBpbiBndC52aWV3cykgew0KKyAgICAgICAgdnQgPSBndC52aWV3c1t2aWRdOw0KKyAgICAgICAgdnQuY29sb3JzID0gW107DQorICAgICAgICB2dC5jb2xvcm4gPSAyOw0KKyAgICB9DQorICAgIGd0LmdyYXBoID0gY29weSAoZ3JhcGgpOw0KKyAgICBndC51bmRvYXJyYXkgPSBbJ2xldmVsJyA9IDA7ICdlbnRyaWVzJyA9IFtdO107DQorICAgIGd0LnVucGFja2F0dHIgKGd0KTsNCisgICAgZ3QuZ3JhcGgubWF4Z2lkID0gdGFibGVzaXplIChncmFwaC5ncmFwaHMpOw0KKyAgICBndC5ncmFwaC5tYXhuaWQgPSB0YWJsZXNpemUgKGdyYXBoLm5vZGVzKTsNCisgICAgZ3QuZ3JhcGgubWF4ZWlkID0gdGFibGVzaXplIChncmFwaC5lZGdlcyk7DQorICAgIGZvciAobmlkIGluIGd0LmdyYXBoLm5vZGVzKQ0KKyAgICAgICAgZ3QuZ3JhcGgubm9kZXNbbmlkXVtkb3R0eS5rZXlzLm5pZF0gPSBuaWQ7DQorICAgIGZvciAoZWlkIGluIGd0LmdyYXBoLmVkZ2VzKQ0KKyAgICAgICAgZ3QuZ3JhcGguZWRnZXNbZWlkXVtkb3R0eS5rZXlzLmVpZF0gPSBlaWQ7DQorICAgIGZvciAoZ2lkIGluIGd0LmdyYXBoLmdyYXBocykNCisgICAgICAgIGd0LmdyYXBoLmdyYXBoc1tnaWRdW2RvdHR5LmtleXMuZ2lkXSA9IGdpZDsNCisgICAgZ3QudW5wYWNrYXR0ciAoZ3QpOw0KKyAgICBkb3R0eS5tZXNzYWdlICgxLCAnZ2VuZXJhdGluZyBsYXlvdXQnKTsNCisgICAgZ3QubGF5b3V0Z3JhcGggKGd0KTsNCisgICAgcmV0dXJuIGd0LmdyYXBoOw0KK307DQorZG90dHkucHJvdG9ndC5lcmFzZWdyYXBoID0gZnVuY3Rpb24gKGd0LCBwcm90b2d0LCBwcm90b3Z0KSB7DQorICAgIGxvY2FsIHZpZCwgdnQ7DQorDQorICAgIGlmIChndC5sYXlvdXRwZW5kaW5nID4gMCkNCisgICAgICAgIGd0LmNhbmNlbGxheW91dCAoZ3QpOw0KKyAgICBmb3IgKHZpZCBpbiBndC52aWV3cykgew0KKyAgICAgICAgdnQgPSBndC52aWV3c1t2aWRdOw0KKyAgICAgICAgdnQuY29sb3JzID0gW107DQorICAgICAgICB2dC5jb2xvcm4gPSAyOw0KKyAgICAgICAgY2xlYXIgKHZ0LmNhbnZhcyk7DQorICAgIH0NCisgICAgaWYgKH5wcm90b2d0KQ0KKyAgICAgICAgcHJvdG9ndCA9IGRvdHR5LnByb3RvZ3Q7DQorICAgIGd0LmdyYXBoID0gY29weSAocHJvdG9ndC5ncmFwaCk7DQorICAgIGd0LnVuZG9hcnJheSA9IFsnbGV2ZWwnID0gMDsgJ2VudHJpZXMnID0gW107XTsNCit9Ow0KK2RvdHR5LnByb3RvZ3QubGF5b3V0Z3JhcGggPSBmdW5jdGlvbiAoZ3QpIHsNCisgICAgaWYgKGd0LmdyYXBoLmdyYXBoYXR0ci54ZG90dmVyc2lvbikgew0KKyAgICAgICAgZ3QudW5wYWNrbGF5b3V0IChndCwgZ3QuZ3JhcGgpOw0KKyAgICAgICAgZ3Quc2V0dmlld3NpemUgKGd0LnZpZXdzLCBndC5ncmFwaC5yZWN0KTsNCisgICAgICAgIGd0LnJlZHJhd2dyYXBoIChndCwgZ3Qudmlld3MpOw0KKyAgICAgICAgcmV0dXJuOw0KKyAgICB9DQorICAgIGlmIChndC5sYXlvdXRtb2RlID09ICdhc3luYycpIHsNCisgICAgICAgIGlmICh+Z3QuaGF2ZWlucHV0KSB7DQorICAgICAgICAgICAgZ3Quc3RhcnRsYXlvdXQgKGd0KTsNCisgICAgICAgICAgICByZXR1cm47DQorICAgICAgICB9DQorICAgICAgICBpZiAofmd0LmZpbmlzaGxheW91dCAoZ3QpKQ0KKyAgICAgICAgICAgIHJldHVybjsNCisgICAgICAgIGd0LnNldHZpZXdzaXplIChndC52aWV3cywgZ3QuZ3JhcGgucmVjdCk7DQorICAgICAgICBndC5yZWRyYXdncmFwaCAoZ3QsIGd0LnZpZXdzKTsNCisgICAgfSBlbHNlIHsNCisgICAgICAgIGlmICh+Z3Quc3RhcnRsYXlvdXQgKGd0KSkNCisgICAgICAgICAgICByZXR1cm47DQorICAgICAgICBlbHNlDQorICAgICAgICAgICAgd2hpbGUgKH5ndC5maW5pc2hsYXlvdXQgKGd0KSkNCisgICAgICAgICAgICAgICAgOw0KKyAgICAgICAgZ3Quc2V0dmlld3NpemUgKGd0LnZpZXdzLCBndC5ncmFwaC5yZWN0KTsNCisgICAgICAgIGd0LnJlZHJhd2dyYXBoIChndCwgZ3Qudmlld3MpOw0KKyAgICB9DQorfTsNCitkb3R0eS5wcm90b2d0LmNyZWF0ZXZpZXcgPSBmdW5jdGlvbiAoZ3QsIHByb3RvdnQpIHsNCisgICAgbG9jYWwgdnQsIG92dCwgaWQsIHQ7DQorDQorICAgIHZ0ID0gW107DQorICAgIHZ0LmNvbG9ycyA9IFtdOw0KKyAgICB2dC5jb2xvcm4gPSAyOw0KKyAgICBpZiAofnByb3RvdnQpDQorICAgICAgICBwcm90b3Z0ID0gZG90dHkucHJvdG92dC5ub3JtYWw7DQorICAgIGlmIChwcm90b3Z0Lm1vZGUgfj0gJ3JlcGxhY2UnKSB7DQorICAgICAgICBmb3IgKGlkIGluIGRvdHR5LnByb3RvdnRbcHJvdG92dC50eXBlXSkNCisgICAgICAgICAgICB2dFtpZF0gPSBjb3B5IChkb3R0eS5wcm90b3Z0W3Byb3RvdnQudHlwZV1baWRdKTsNCisgICAgfQ0KKyAgICBmb3IgKGlkIGluIHByb3RvdnQpDQorICAgICAgICB2dFtpZF0gPSBjb3B5IChwcm90b3Z0W2lkXSk7DQorICAgIGlmICh+KHZ0LnBhcmVudCA+PSAwKSkgew0KKyAgICAgICAgdnQudmlldyA9IGNyZWF0ZXdpZGdldCAoLTEsIFsNCisgICAgICAgICAgICAndHlwZScgICA9ICd2aWV3JzsNCisgICAgICAgICAgICAnbmFtZScgICA9IHZ0Lm5hbWU7DQorICAgICAgICAgICAgJ29yaWdpbicgPSB2dC5vcmlnOw0KKyAgICAgICAgICAgICdzaXplJyAgID0gdnQuc2l6ZTsNCisgICAgICAgIF0pOw0KKyAgICAgICAgdnQuc2Nyb2xsID0gY3JlYXRld2lkZ2V0ICh2dC52aWV3LCBbJ3R5cGUnID0gJ3Njcm9sbCc7XSk7DQorICAgIH0gZWxzZSB7DQorICAgICAgICB2dC52aWV3ID0gLTE7DQorICAgICAgICB2dC5zY3JvbGwgPSBjcmVhdGV3aWRnZXQgKHZ0LnBhcmVudCwgWw0KKyAgICAgICAgICAgICd0eXBlJyA9ICdzY3JvbGwnOw0KKyAgICAgICAgICAgICdzaXplJyA9IHZ0LnNpemU7DQorICAgICAgICBdKTsNCisgICAgfQ0KKyAgICB2dC5jYW52YXMgPSBjcmVhdGV3aWRnZXQgKHZ0LnNjcm9sbCwgWw0KKyAgICAgICAgJ3R5cGUnID0gJ2NhbnZhcyc7DQorICAgICAgICAnY29sb3InID0gWzAgPSBwcm90b3Z0LmJnY29sb3I7IDEgPSBwcm90b3Z0LmZnY29sb3I7XTsNCisgICAgXSk7DQorICAgIHNldHdpZGdldGF0dHIgKHZ0LmNhbnZhcywgWw0KKyAgICAgICAgJ3dpbmRvdycgPSB2dC53cmVjdDsNCisgICAgICAgICd2aWV3cG9ydCcgPSB2dC52c2l6ZTsNCisgICAgXSk7DQorICAgIGNsZWFyICh2dC5jYW52YXMpOw0KKyAgICBkb3R0eS52aWV3c1t2dC5jYW52YXNdID0gdnQ7DQorICAgIHZ0LnZ0aWQgPSB2dC5jYW52YXM7DQorICAgIHZ0Lmd0aWQgPSBndC5ndGlkOw0KKyAgICBndC52aWV3c1t2dC52dGlkXSA9IHZ0Ow0KKyAgICBkb3R0eS52aWV3c1t2dC5zY3JvbGxdID0gdnQ7DQorICAgIGlmICh2dC52aWV3IH49IC0xKQ0KKyAgICAgICAgZG90dHkudmlld3NbdnQudmlld10gPSB2dDsNCisgICAgaWYgKHByb3RvdnQuY29sb3JzICYgdGFibGVzaXplIChwcm90b3Z0LmNvbG9ycykgPiAwKSB7DQorICAgICAgICBmb3IgKGlkIGluIHByb3RvdnQuY29sb3JzKQ0KKyAgICAgICAgICAgIGlmIChpZCA9PSAnX2JnY29sb3JfJykNCisgICAgICAgICAgICAgICAgc2V0d2lkZ2V0YXR0ciAodnQuY2FudmFzLCBbDQorICAgICAgICAgICAgICAgICAgICAnY29sb3InID0gWzAgPSBwcm90b3Z0LmNvbG9yc1tpZF07XTsNCisgICAgICAgICAgICAgICAgXSk7DQorICAgICAgICAgICAgZWxzZSBpZiAoc2V0d2lkZ2V0YXR0ciAodnQuY2FudmFzLCBbJ2NvbG9yJyA9IFsNCisgICAgICAgICAgICAgICAgcHJvdG92dC5jb2xvcnNbaWRdID0gaWQ7DQorICAgICAgICAgICAgXTtdKSB+PSAxKSB7DQorICAgICAgICAgICAgICAgIHQgPSBzcGxpdCAoaWQsICcgJyk7DQorICAgICAgICAgICAgICAgIGlmICh0YWJsZXNpemUgKHQpIH49IDMgfCBzZXR3aWRnZXRhdHRyICh2dC5jYW52YXMsIFsNCisgICAgICAgICAgICAgICAgICAgICdjb2xvcicgPSBbcHJvdG92dC5jb2xvcnNbaWRdID0gWw0KKyAgICAgICAgICAgICAgICAgICAgICAgICdoJyA9IHN0b24gKHRbMF0pOyAncycgPSBzdG9uICh0WzFdKTsgJ3YnID0gc3RvbiAodFsyXSk7DQorICAgICAgICAgICAgICAgICAgICBdO107DQorICAgICAgICAgICAgICAgIF0pIH49IDEpIHsNCisgICAgICAgICAgICAgICAgICAgIGRvdHR5Lm1lc3NhZ2UgKA0KKyAgICAgICAgICAgICAgICAgICAgICAgIDAsIGNvbmNhdCAoJ3Vua25vd24gY29sb3IgJywgaWQsICcgdXNpbmcgIzEnKQ0KKyAgICAgICAgICAgICAgICAgICAgKTsNCisgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIH0NCisgICAgICAgIHZ0LmNvbG9ycyA9IGNvcHkgKHByb3RvdnQuY29sb3JzKTsNCisgICAgICAgIHZ0LmNvbG9ybiA9IHByb3RvdnQuY29sb3JuOw0KKyAgICB9IGVsc2UgaWYgKHRhYmxlc2l6ZSAoZ3Qudmlld3MpID4gMSkgew0KKyAgICAgICAgZm9yIChpZCBpbiBndC52aWV3cykNCisgICAgICAgICAgICBpZiAoZ3Qudmlld3NbaWRdIH49IHZ0KQ0KKyAgICAgICAgICAgICAgICBicmVhazsNCisgICAgICAgIG92dCA9IGd0LnZpZXdzW2lkXTsNCisgICAgICAgIGZvciAoaWQgaW4gb3Z0LmNvbG9ycykNCisgICAgICAgICAgICBpZiAoaWQgPT0gJ19iZ2NvbG9yXycpDQorICAgICAgICAgICAgICAgIHNldHdpZGdldGF0dHIgKHZ0LmNhbnZhcywgWydjb2xvcicgPSBbMCA9IG92dC5jb2xvcnNbaWRdO107XSk7DQorICAgICAgICAgICAgZWxzZSBpZiAoc2V0d2lkZ2V0YXR0ciAodnQuY2FudmFzLCBbJ2NvbG9yJyA9IFsNCisgICAgICAgICAgICAgICAgb3Z0LmNvbG9yc1tpZF0gPSBpZDsNCisgICAgICAgICAgICBdO10pIH49IDEpIHsNCisgICAgICAgICAgICAgICAgdCA9IHNwbGl0IChpZCwgJyAnKTsNCisgICAgICAgICAgICAgICAgaWYgKHRhYmxlc2l6ZSAodCkgfj0gMyB8IHNldHdpZGdldGF0dHIgKHZ0LmNhbnZhcywgWw0KKyAgICAgICAgICAgICAgICAgICAgJ2NvbG9yJyA9IFtvdnQuY29sb3JzW2lkXSA9IFsNCisgICAgICAgICAgICAgICAgICAgICAgICAnaCcgPSBzdG9uICh0WzBdKTsgJ3MnID0gc3RvbiAodFsxXSk7ICd2JyA9IHN0b24gKHRbMl0pOw0KKyAgICAgICAgICAgICAgICAgICAgXTtdOw0KKyAgICAgICAgICAgICAgICBdKSB+PSAxKSB7DQorICAgICAgICAgICAgICAgICAgICBkb3R0eS5tZXNzYWdlICgNCisgICAgICAgICAgICAgICAgICAgICAgICAwLCBjb25jYXQgKCd1bmtub3duIGNvbG9yICcsIGlkLCAnIHVzaW5nICMxJykNCisgICAgICAgICAgICAgICAgICAgICk7DQorICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICB9DQorICAgICAgICB2dC5jb2xvcnMgPSBjb3B5IChvdnQuY29sb3JzKTsNCisgICAgICAgIHZ0LmNvbG9ybiA9IG92dC5jb2xvcm47DQorICAgIH0NCisgICAgaWYgKGd0LmdyYXBoLnJlY3QpDQorICAgICAgICBndC5zZXR2aWV3c2l6ZSAoW3Z0LnZ0aWQgPSB2dDtdLCBndC5ncmFwaC5yZWN0KTsNCisgICAgZ3QuZHJhd2dyYXBoIChndCwgW3Z0LnZ0aWQgPSB2dDtdKTsNCisgICAgZm9yIChpZCBpbiB2dC51aWZ1bmNzKQ0KKyAgICAgICAgaWYgKGlkID09ICdjbG9zZXZpZXcnKQ0KKyAgICAgICAgICAgIHdpZGdldHNbdnQudmlld11baWRdID0gdnQudWlmdW5jc1tpZF07DQorICAgICAgICBlbHNlDQorICAgICAgICAgICAgd2lkZ2V0c1t2dC5jYW52YXNdW2lkXSA9IHZ0LnVpZnVuY3NbaWRdOw0KKyAgICByZXR1cm4gdnQ7DQorfTsNCitkb3R0eS5wcm90b2d0LmRlc3Ryb3l2aWV3ID0gZnVuY3Rpb24gKGd0LCB2dCkgew0KKyAgICBkZXN0cm95d2lkZ2V0ICh2dC5jYW52YXMpOw0KKyAgICBkZXN0cm95d2lkZ2V0ICh2dC5zY3JvbGwpOw0KKyAgICBpZiAodnQudmlldyB+PSAtMSkgew0KKyAgICAgICAgZGVzdHJveXdpZGdldCAodnQudmlldyk7DQorICAgICAgICByZW1vdmUgKHZ0LnZpZXcsIGRvdHR5LnZpZXdzKTsNCisgICAgfQ0KKyAgICByZW1vdmUgKHZ0LnNjcm9sbCwgZG90dHkudmlld3MpOw0KKyAgICByZW1vdmUgKHZ0LmNhbnZhcywgZG90dHkudmlld3MpOw0KKyAgICBpZiAodnQuZ3RpZCA+PSAwKQ0KKyAgICAgICAgcmVtb3ZlICh2dC52dGlkLCBndC52aWV3cyk7DQorICAgIGlmICh0YWJsZXNpemUgKGRvdHR5LnZpZXdzKSA9PSAwKQ0KKyAgICAgICAgZXhpdCAoKTsNCit9Ow0KK2RvdHR5LnByb3RvZ3Quem9vbSA9IGZ1bmN0aW9uIChndCwgdnQsIGZhY3RvciwgcG9zKSB7DQorICAgIGd0LnNldHZpZXdzY2FsZSAoW3Z0LnZ0aWQgPSB2dDtdLCBmYWN0b3IpOw0KKyAgICBpZiAocG9zKQ0KKyAgICAgICAgZ3Quc2V0dmlld2NlbnRlciAoW3Z0LnZ0aWQgPSB2dDtdLCBwb3MpOw0KKyAgICBndC5yZWRyYXdncmFwaCAoZ3QsIFt2dC52dGlkID0gdnQ7XSk7DQorfTsNCitkb3R0eS5wcm90b2d0LmZpbmRub2RlID0gZnVuY3Rpb24gKGd0LCB2dCkgew0KKyAgICBsb2NhbCBrZXksIG5vZGUsIG5vZGUxLCBuaWQ7DQorDQorICAgIGlmICh+KGtleSA9IGFzayAoJ2dpdmUgbm9kZSBuYW1lIG9yIGxhYmVsJykpKQ0KKyAgICAgICAgcmV0dXJuOw0KKyAgICBpZiAoZ3QuZ3JhcGgubm9kZWRpY3Rba2V5XSA+PSAwKQ0KKyAgICAgICAgbm9kZSA9IGd0LmdyYXBoLm5vZGVzW2d0LmdyYXBoLm5vZGVkaWN0W2tleV1dOw0KKyAgICBlbHNlIGlmIChndC5ncmFwaC5ub2RlZGljdFtzdG9uIChrZXkpXSA+PSAwKQ0KKyAgICAgICAgbm9kZSA9IGd0LmdyYXBoLm5vZGVzW2d0LmdyYXBoLm5vZGVkaWN0W3N0b24gKGtleSldXTsNCisgICAgZWxzZSB7DQorICAgICAgICBmb3IgKG5pZCBpbiBndC5ncmFwaC5ub2Rlcykgew0KKyAgICAgICAgICAgIG5vZGUxID0gZ3QuZ3JhcGgubm9kZXNbbmlkXTsNCisgICAgICAgICAgICBpZiAobm9kZTEuYXR0ci5sYWJlbCA9PSBrZXkgfCBub2RlMS5hdHRyLmxhYmVsID09IHN0b24gKGtleSkpIHsNCisgICAgICAgICAgICAgICAgbm9kZSA9IG5vZGUxOw0KKyAgICAgICAgICAgICAgICBicmVhazsNCisgICAgICAgICAgICB9DQorICAgICAgICB9DQorICAgIH0NCisgICAgaWYgKH5ub2RlKSB7DQorICAgICAgICBkb3R0eS5tZXNzYWdlICgwLCBjb25jYXQgKCdjYW5ub3QgZmluZCBub2RlOiAnLCBrZXkpKTsNCisgICAgICAgIHJldHVybjsNCisgICAgfQ0KKyAgICBndC5zZXR2aWV3Y2VudGVyIChbdnQudnRpZCA9IHZ0O10sIG5vZGUucG9zKTsNCit9Ow0KK2RvdHR5LnByb3RvZ3Quc2V0YXR0ciA9IGZ1bmN0aW9uIChndCwgb2JqKSB7DQorICAgIGxvY2FsIGt2LCB0LCBhdHRyLCB2YWx1ZTsNCisNCisgICAgaWYgKH4oa3YgPSBhc2sgKCdnaXZlIGF0dHIvdmFsdWUsIGVnLiBjb2xvcj1ibHVlJykpKQ0KKyAgICAgICAgcmV0dXJuOw0KKyAgICB0ID0gc3BsaXQgKGt2LCAnPScpOw0KKyAgICBhdHRyID0gdFswXTsNCisgICAgdmFsdWUgPSB0WzFdOw0KKyAgICBpZiAoDQorICAgICAgICBvYmouYXR0ciA9PSBndC5ncmFwaC5ncmFwaGF0dHIgfA0KKyAgICAgICAgb2JqLmF0dHIgPT0gZ3QuZ3JhcGguZWRnZWF0dHIgfA0KKyAgICAgICAgb2JqLmF0dHIgPT0gZ3QuZ3JhcGgubm9kZWF0dHINCisgICAgKSB7DQorICAgICAgICBvYmouYXR0clthdHRyXSA9IHZhbHVlOw0KKyAgICAgICAgcmV0dXJuOw0KKyAgICB9DQorICAgIGlmIChvYmoubmlkID49IDApIHsNCisgICAgICAgIGd0LnVuZHJhd25vZGUgKGd0LCBndC52aWV3cywgb2JqKTsNCisgICAgICAgIG9iai5hdHRyW2F0dHJdID0gdmFsdWU7DQorICAgICAgICBndC51bnBhY2tub2RlYXR0ciAoZ3QsIG9iaik7DQorICAgICAgICBndC5kcmF3bm9kZSAoZ3QsIGd0LnZpZXdzLCBvYmopOw0KKyAgICB9IGVsc2UgaWYgKG9iai5laWQgPj0gMCkgew0KKyAgICAgICAgZ3QudW5kcmF3ZWRnZSAoZ3QsIGd0LnZpZXdzLCBvYmopOw0KKyAgICAgICAgb2JqLmF0dHJbYXR0cl0gPSB2YWx1ZTsNCisgICAgICAgIGd0LnVucGFja2VkZ2VhdHRyIChndCwgb2JqKTsNCisgICAgICAgIGd0LmRyYXdlZGdlIChndCwgZ3Qudmlld3MsIG9iaik7DQorICAgIH0NCit9Ow0KK2RvdHR5LnByb3RvZ3QuZ2V0YXR0ciA9IGZ1bmN0aW9uIChndCwgbm9kZSkgew0KKyAgICBsb2NhbCBrdjsNCisNCisgICAgaWYgKH4oa3Yua2V5ID0gYXNrICgnZ2l2ZSBhdHRyIG5hbWUnKSkpDQorICAgICAgICByZXR1cm4gbnVsbDsNCisgICAgaWYgKChrdi52YWwgPSBub2RlLmF0dHJba3Yua2V5XSkpDQorICAgICAgICByZXR1cm4ga3Y7DQorICAgIHJldHVybiBudWxsOw0KK307DQorIw0KKyMgdXRpbGl0aWVzDQorIw0KK2RvdHR5LmNyZWF0ZXZpZXdhbmRncmFwaCA9IGZ1bmN0aW9uIChuYW1lLCB0eXBlLCBwcm90b2d0LCBwcm90b3Z0KSB7DQorICAgIGxvY2FsIHZ0LCBndDsNCisNCisgICAgaWYgKH5wcm90b2d0KQ0KKyAgICAgICAgcHJvdG9ndCA9IGRvdHR5LnByb3RvZ3Q7DQorICAgIGlmIChwcm90b2d0LmNyZWF0ZWdyYXBoKQ0KKyAgICAgICAgZ3QgPSBwcm90b2d0LmNyZWF0ZWdyYXBoIChwcm90b2d0KTsNCisgICAgZWxzZQ0KKyAgICAgICAgZ3QgPSBkb3R0eS5wcm90b2d0LmNyZWF0ZWdyYXBoIChwcm90b2d0KTsNCisgICAgdnQgPSBndC5jcmVhdGV2aWV3IChndCwgcHJvdG92dCk7DQorICAgIGlmICh+cHJvdG9ndC5ncmFwaCkNCisgICAgICAgIHByb3RvZ3QuZ3JhcGggPSBjb3B5IChkb3R0eS5wcm90b2d0LmdyYXBoKTsNCisgICAgaWYgKG5hbWUpDQorICAgICAgICBndC5sb2FkZ3JhcGggKGd0LCBuYW1lLCB0eXBlLCBwcm90b2d0LmdyYXBoLCAxKTsNCisgICAgcmV0dXJuIFsnZ3QnID0gZ3Q7ICd2dCcgPSB2dDtdOw0KK307DQorZG90dHkub3BlbmlvID0gZnVuY3Rpb24gKG5hbWUsIHR5cGUsIG1vZGUpIHsNCisgICAgbG9jYWwgZmQ7DQorDQorICAgIGlmICh+bmFtZSkNCisgICAgICAgIHJldHVybiBudWxsOw0KKyAgICBpZiAodHlwZSA9PSAnZmlsZScpIHsNCisgICAgICAgIGlmIChuYW1lID09ICctJykgew0KKyAgICAgICAgICAgIGlmIChtb2RlID09ICdyJyB8IG1vZGUgPT0gJ3IrJykNCisgICAgICAgICAgICAgICAgZmQgPSAwOw0KKyAgICAgICAgICAgIGVsc2UNCisgICAgICAgICAgICAgICAgZmQgPSAxOw0KKyAgICAgICAgfSBlbHNlIGlmICh+KChmZCA9IG9wZW5pbyAoJ2ZpbGUnLCBuYW1lLCBtb2RlKSkgPj0gMCkpIHsNCisgICAgICAgICAgICBkb3R0eS5tZXNzYWdlICgwLCBjb25jYXQgKCdjYW5ub3Qgb3BlbiBmaWxlOiAnLCBuYW1lKSk7DQorICAgICAgICAgICAgcmV0dXJuIG51bGw7DQorICAgICAgICB9DQorICAgIH0gZWxzZSBpZiAodHlwZSA9PSAncGlwZScpIHsNCisgICAgICAgIGlmICh+KChmZCA9IG9wZW5pbyAoDQorICAgICAgICAgICAgJ3BpcGUnLCAna3NoJywgbW9kZSwgY29uY2F0ICgiJWUgIiwgbmFtZSkNCisgICAgICAgICkpID49IDApKSB7DQorICAgICAgICAgICAgZG90dHkubWVzc2FnZSAoMCwgY29uY2F0ICgnY2Fubm90IHJ1biBjb21tYW5kOiAnLCBuYW1lKSk7DQorICAgICAgICAgICAgcmV0dXJuIG51bGw7DQorICAgICAgICB9DQorICAgIH0gZWxzZQ0KKyAgICAgICAgcmV0dXJuIG51bGw7DQorICAgIHJldHVybiBmZDsNCit9Ow0KK2RvdHR5LnB1c2hidXN5ID0gZnVuY3Rpb24gKGd0LCB2aWV3cykgew0KKyAgICBsb2NhbCB2aWQ7DQorDQorICAgIGlmIChndC5idXN5ID09IDApDQorICAgICAgICBmb3IgKHZpZCBpbiBndC52aWV3cykNCisgICAgICAgICAgICBzZXR3aWRnZXRhdHRyICh2aWQsIFsnY3Vyc29yJyA9ICd3YXRjaCc7XSk7DQorICAgIGd0LmJ1c3kgPSBndC5idXN5ICsgMTsNCit9Ow0KK2RvdHR5LnBvcGJ1c3kgPSBmdW5jdGlvbiAoZ3QsIHZpZXdzKSB7DQorICAgIGxvY2FsIHZpZDsNCisNCisgICAgZ3QuYnVzeSA9IGd0LmJ1c3kgLSAxOw0KKyAgICBpZiAoZ3QuYnVzeSA9PSAwKQ0KKyAgICAgICAgZm9yICh2aWQgaW4gZ3Qudmlld3MpDQorICAgICAgICAgICAgc2V0d2lkZ2V0YXR0ciAodmlkLCBbJ2N1cnNvcicgPSAnZGVmYXVsdCc7XSk7DQorfTsNCitkb3R0eS5tZXNzYWdlID0gZnVuY3Rpb24gKGxldmVsLCB0ZXh0KSB7DQorICAgIGlmIChsZXZlbCA8PSBkb3R0eS5tbGV2ZWwpDQorICAgICAgICBlY2hvICgnZG90dHkubGVmdHk6ICcsIHRleHQpOw0KK307DQorIw0KKyMgcHJpbnRpbmcgb3Igc2F2aW5nIHRvIGZpbGUNCisjDQorZG90dHkucHJvdG9ndC5wcmludG9yc2F2ZSA9IGZ1bmN0aW9uIChndCwgdnQsIG90eXBlLCBuYW1lLCBtb2RlLCBwdHlwZSkgew0KKyAgICBsb2NhbCBwciwgd3JlY3QsIHZzaXplLCB4eSwgcHNpemUsIGNhbnZhcywgcHNjYW52YXMsIGNpZCwgY25hbWUsIHQ7DQorICAgIGxvY2FsIGdyYXBoLCBlZGdlaGFuZGxlcywgZm9udG1hcCwgZWlkLCBlZGdlLCBuaWQsIG5vZGUsIGdpZCwgc2dyYXBoOw0KKyAgICBsb2NhbCBkaWQsIGRyYXcsIGk7DQorDQorICAgIGlmICh+b3R5cGUpDQorICAgICAgICBpZiAofihvdHlwZSA9IGFzayAoJ3ByaW50IHRvJywgJ2Nob2ljZScsICdmaWxlfHByaW50ZXInKSkpDQorICAgICAgICAgICAgcmV0dXJuOw0KKyAgICBpZiAob3R5cGUgPT0gJ3ByaW50ZXInKSB7DQorICAgICAgICBpZiAofmdldGVudiAoJ1RNUERJUicpKQ0KKyAgICAgICAgICAgIG5hbWUgPSBjb25jYXQgKGdldGVudiAoJ0hPTUUnKSwgJy8uZG90dHlvdXQucHMnKTsNCisgICAgICAgIGVsc2UNCisgICAgICAgICAgICBuYW1lID0gY29uY2F0IChnZXRlbnYgKCdUTVBESVInKSwgJy8uZG90dHlvdXQucHMnLCByYW5kb20gKDEwMDAwKSk7DQorICAgICAgICBpZiAoZ2V0ZW52ICgnTEVGVFlXSU5TWVMnKSB+PSAnbXN3aW4nICYgfnByKQ0KKyAgICAgICAgICAgIGlmICh+KHByID0gYXNrICgncHJpbnRlciBjb21tYW5kJywgJ3N0cmluZycsICdscHInKSkpDQorICAgICAgICAgICAgICAgIHJldHVybjsNCisgICAgfQ0KKyAgICBpZiAofm5hbWUpDQorICAgICAgICBpZiAofihuYW1lID0gYXNrICgncG9zdHNjcmlwdCBmaWxlJywgJ2ZpbGUnLCAnb3V0LnBzJykpKQ0KKyAgICAgICAgICAgIHJldHVybjsNCisgICAgaWYgKH5wdHlwZSkNCisgICAgICAgIGlmICh+KHB0eXBlID0gYXNrICgncGFnZSBzaXplJywgJ2Nob2ljZScsICc4LjV4MTF8MTF4MTd8MzZ4NTAnKSkpDQorICAgICAgICAgICAgcmV0dXJuOw0KKyAgICBpZiAofm1vZGUpDQorICAgICAgICBpZiAofihtb2RlID0gYXNrICgnbW9kZScsICdjaG9pY2UnLCAncG9ydHJhaXR8bGFuZHNjYXBlfGJlc3QgZml0JykpKQ0KKyAgICAgICAgICAgIHJldHVybjsNCisgICAgd3JlY3QgPSBjb3B5ICh2dC53cmVjdCk7DQorICAgIHdyZWN0WzBdLnggPSB3cmVjdFswXS54IC0gMTsNCisgICAgd3JlY3RbMV0ueCA9IHdyZWN0WzFdLnggKyAxOw0KKyAgICB3cmVjdFswXS55ID0gd3JlY3RbMF0ueSAtIDE7DQorICAgIHdyZWN0WzFdLnkgPSB3cmVjdFsxXS55ICsgMTsNCisgICAgdnNpemUgPSBjb3B5ICh2dC52c2l6ZSk7DQorICAgIGlmICh2c2l6ZS54ID09IDApDQorICAgICAgICB2c2l6ZS54ID0gMTsNCisgICAgaWYgKHZzaXplLnkgPT0gMCkNCisgICAgICAgIHZzaXplLnkgPSAxOw0KKyAgICB4eSA9IHZzaXplLnggLyB2c2l6ZS55Ow0KKyAgICBpZiAobW9kZSA9PSAnYmVzdCBmaXQnKSB7DQorICAgICAgICBpZiAoeHkgPCAxKQ0KKyAgICAgICAgICAgIG1vZGUgPSAncG9ydHJhaXQnOw0KKyAgICAgICAgZWxzZQ0KKyAgICAgICAgICAgIG1vZGUgPSAnbGFuZHNjYXBlJzsNCisgICAgfQ0KKyAgICBwc2l6ZSA9IGRvdHR5LnBhZ2VzaXplc1twdHlwZV07DQorICAgIGlmIChtb2RlID09ICdwb3J0cmFpdCcpIHsNCisgICAgICAgIGlmICh4eSA8IHBzaXplLnggLyBwc2l6ZS55KSB7DQorICAgICAgICAgICAgdnNpemUueSA9IHBzaXplLnkgKiAzMDA7DQorICAgICAgICAgICAgdnNpemUueCA9IHZzaXplLnkgKiB4eTsNCisgICAgICAgIH0gZWxzZSB7DQorICAgICAgICAgICAgdnNpemUueCA9IHBzaXplLnggKiAzMDA7DQorICAgICAgICAgICAgdnNpemUueSA9IHZzaXplLnggLyB4eTsNCisgICAgICAgIH0NCisgICAgfSBlbHNlIHsNCisgICAgICAgIGlmICh4eSA8IHBzaXplLnkgLyBwc2l6ZS54KSB7DQorICAgICAgICAgICAgdnNpemUueSA9IHBzaXplLnggKiAzMDA7DQorICAgICAgICAgICAgdnNpemUueCA9IHZzaXplLnkgKiB4eTsNCisgICAgICAgIH0gZWxzZSB7DQorICAgICAgICAgICAgdnNpemUueCA9IHBzaXplLnkgKiAzMDA7DQorICAgICAgICAgICAgdnNpemUueSA9IHZzaXplLnggLyB4eTsNCisgICAgICAgIH0NCisgICAgfQ0KKyAgICBpZiAofigocHNjYW52YXMgPSBjcmVhdGV3aWRnZXQgKC0xLCBbDQorICAgICAgICAndHlwZScgICA9ICdwcyc7DQorICAgICAgICAnb3JpZ2luJyA9IFsneCcgPSAwOyAneScgPSAwO107DQorICAgICAgICAnc2l6ZScgICA9IHZzaXplOw0KKyAgICAgICAgJ21vZGUnICAgPSBtb2RlOw0KKyAgICAgICAgJ25hbWUnICAgPSBuYW1lOw0KKyAgICBdKSkgPj0gMCkpIHsNCisgICAgICAgIGRvdHR5Lm1lc3NhZ2UgKDAsICdjYW5ub3Qgb3BlbiBwcmludGVyIGRldmljZScpOw0KKyAgICAgICAgcmV0dXJuOw0KKyAgICB9DQorICAgIGZvciAoY25hbWUgaW4gdnQuY29sb3JzKSB7DQorICAgICAgICBjaWQgPSB2dC5jb2xvcnNbY25hbWVdOw0KKyAgICAgICAgaWYgKGNuYW1lID09ICdfYmdjb2xvcl8nKQ0KKyAgICAgICAgICAgIHNldHdpZGdldGF0dHIgKHBzY2FudmFzLCBbJ2NvbG9yJyA9IFswID0gY2lkO107XSk7DQorICAgICAgICBlbHNlIGlmIChzZXR3aWRnZXRhdHRyIChwc2NhbnZhcywgWydjb2xvcicgPSBbY2lkID0gY25hbWU7XTtdKSB+PSAxKSB7DQorICAgICAgICAgICAgdCA9IHNwbGl0IChjbmFtZSwgJyAnKTsNCisgICAgICAgICAgICBpZiAodGFibGVzaXplICh0KSB+PSAzIHwgc2V0d2lkZ2V0YXR0ciAocHNjYW52YXMsIFsNCisgICAgICAgICAgICAgICAgJ2NvbG9yJyA9IFtjaWQgPSBbDQorICAgICAgICAgICAgICAgICAgICAnaCcgPSBzdG9uICh0WzBdKTsgJ3MnID0gc3RvbiAodFsxXSk7ICd2JyA9IHN0b24gKHRbMl0pOw0KKyAgICAgICAgICAgICAgICBdO107DQorICAgICAgICAgICAgXSkgfj0gMSkgew0KKyAgICAgICAgICAgICAgICBkb3R0eS5tZXNzYWdlICgNCisgICAgICAgICAgICAgICAgICAgIDAsIGNvbmNhdCAoJ3Vua25vd24gY29sb3IgJywgY25hbWUsICcgdXNpbmcgIzEnKQ0KKyAgICAgICAgICAgICAgICApOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgIH0NCisgICAgfQ0KKyAgICBzZXR3aWRnZXRhdHRyIChwc2NhbnZhcywgWyd3aW5kb3cnID0gd3JlY3Q7XSk7DQorICAgIGdyYXBoID0gY29weSAoZ3QuZ3JhcGgpOw0KKyAgICBjYW52YXMgPSB2dC5jYW52YXM7DQorICAgIHZ0LmNhbnZhcyA9IHBzY2FudmFzOw0KKyAgICBlZGdlaGFuZGxlcyA9IGd0LmVkZ2VoYW5kbGVzOw0KKyAgICBndC5lZGdlaGFuZGxlcyA9IDA7DQorICAgIGZvbnRtYXAgPSBkb3R0eS5tYXBzW2dldGVudiAoJ0xFRlRZV0lOU1lTJyldLnBzZm9udG1hcDsNCisgICAgZm9yIChlaWQgaW4gZ3JhcGguZWRnZXMpIHsNCisgICAgICAgIGVkZ2UgPSBncmFwaC5lZGdlc1tlaWRdOw0KKyAgICAgICAgZWRnZS5mb250bmFtZSA9IGZvbnRtYXBbZWRnZS5hdHRyLmZvbnRuYW1lXTsNCisgICAgICAgIGZvciAoZGlkIGluIGVkZ2UuZHJhd3MpIHsNCisgICAgICAgICAgICBpZiAoZGlkID09ICdlcCcpDQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0KKyAgICAgICAgICAgIGRyYXcgPSBlZGdlLmRyYXdzW2RpZF07DQorICAgICAgICAgICAgZm9yIChpID0gMDsgZHJhd1tpXTsgaSA9IGkgKyAxKQ0KKyAgICAgICAgICAgICAgICBpZiAoZHJhd1tpXS50eXBlID09ICdGJykNCisgICAgICAgICAgICAgICAgICAgIGRyYXdbaV0uZm4gPSBmb250bWFwW2RyYXdbaV0ub2ZuXTsNCisgICAgICAgIH0NCisgICAgICAgIGd0LmRyYXdlZGdlIChndCwgWzAgPSB2dDtdLCBlZGdlKTsNCisgICAgfQ0KKyAgICBmb3IgKG5pZCBpbiBncmFwaC5ub2Rlcykgew0KKyAgICAgICAgbm9kZSA9IGdyYXBoLm5vZGVzW25pZF07DQorICAgICAgICBub2RlLmZvbnRuYW1lID0gZm9udG1hcFtub2RlLmF0dHIuZm9udG5hbWVdOw0KKyAgICAgICAgZm9yIChkaWQgaW4gbm9kZS5kcmF3cykgew0KKyAgICAgICAgICAgIGlmIChkaWQgPT0gJ2VwJykNCisgICAgICAgICAgICAgICAgY29udGludWU7DQorICAgICAgICAgICAgZHJhdyA9IG5vZGUuZHJhd3NbZGlkXTsNCisgICAgICAgICAgICBmb3IgKGkgPSAwOyBkcmF3W2ldOyBpID0gaSArIDEpDQorICAgICAgICAgICAgICAgIGlmIChkcmF3W2ldLnR5cGUgPT0gJ0YnKQ0KKyAgICAgICAgICAgICAgICAgICAgZHJhd1tpXS5mbiA9IGZvbnRtYXBbZHJhd1tpXS5vZm5dOw0KKyAgICAgICAgfQ0KKyAgICAgICAgZ3QuZHJhd25vZGUgKGd0LCBbMCA9IHZ0O10sIG5vZGUpOw0KKyAgICB9DQorICAgIGZvciAoZ2lkIGluIGdyYXBoLmdyYXBocykgew0KKyAgICAgICAgc2dyYXBoID0gZ3JhcGguZ3JhcGhzW2dpZF07DQorICAgICAgICBzZ3JhcGguZm9udG5hbWUgPSBmb250bWFwW3NncmFwaC5ncmFwaGF0dHIuZm9udG5hbWVdOw0KKyAgICAgICAgZm9yIChkaWQgaW4gc2dyYXBoLmRyYXdzKSB7DQorICAgICAgICAgICAgaWYgKGRpZCA9PSAnZXAnKQ0KKyAgICAgICAgICAgICAgICBjb250aW51ZTsNCisgICAgICAgICAgICBkcmF3ID0gc2dyYXBoLmRyYXdzW2RpZF07DQorICAgICAgICAgICAgZm9yIChpID0gMDsgZHJhd1tpXTsgaSA9IGkgKyAxKQ0KKyAgICAgICAgICAgICAgICBpZiAoZHJhd1tpXS50eXBlID09ICdGJykNCisgICAgICAgICAgICAgICAgICAgIGRyYXdbaV0uZm4gPSBmb250bWFwW2RyYXdbaV0ub2ZuXTsNCisgICAgICAgIH0NCisgICAgICAgIGd0LmRyYXdzZ3JhcGggKGd0LCBbMCA9IHZ0O10sIHNncmFwaCk7DQorICAgIH0NCisgICAgZ3JhcGguZm9udG5hbWUgPSBmb250bWFwW2dyYXBoLmdyYXBoYXR0ci5mb250bmFtZV07DQorICAgIGd0LmRyYXdzZ3JhcGggKGd0LCBbMCA9IHZ0O10sIGdyYXBoKTsNCisgICAgZ3QuZWRnZWhhbmRsZXMgPSBlZGdlaGFuZGxlczsNCisgICAgdnQuY2FudmFzID0gY2FudmFzOw0KKyAgICBkZXN0cm95d2lkZ2V0IChwc2NhbnZhcyk7DQorICAgIGlmIChvdHlwZSA9PSAncHJpbnRlcicgJiBnZXRlbnYgKCdMRUZUWVdJTlNZUycpIH49ICdtc3dpbicpDQorICAgICAgICBzeXN0ZW0gKGNvbmNhdCAocHIsICcgJywgbmFtZSwgJzsgcm0gJyxuYW1lKSk7DQorfTsNCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS9oZWxwZXJzL0dyYXBodml6Mi4yNi4zL2xpYi9sZWZ0eS9kb3R0eV9kcmF3LmxlZnR5IGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvaGVscGVycy9HcmFwaHZpejIuMjYuMy9saWIvbGVmdHkvZG90dHlfZHJhdy5sZWZ0eQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNDA5M2EzCi0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvaGVscGVycy9HcmFwaHZpejIuMjYuMy9saWIvbGVmdHkvZG90dHlfZHJhdy5sZWZ0eQpAQCAtMCwwICsxLDU5NiBAQAorIw0KKyMgZG90dHlfZHJhdzogZHJhd2luZyBmdW5jdGlvbnMgYW5kIGRhdGEgc3RydWN0dXJlcw0KKyMNCitkb3R0eS5wcm90b2d0LmRyYXdncmFwaCA9IGZ1bmN0aW9uIChndCwgdmlld3MpIHsNCisgICAgbG9jYWwgZ2lkLCBlaWQsIG5pZCwgZ3JhcGg7DQorDQorICAgIGdyYXBoID0gZ3QuZ3JhcGg7DQorICAgIGd0LmRyYXdzZ3JhcGggKGd0LCB2aWV3cywgZ3JhcGgpOw0KKyAgICBmb3IgKGdpZCBpbiBncmFwaC5ncmFwaHMpDQorICAgICAgICBndC5kcmF3c2dyYXBoIChndCwgdmlld3MsIGdyYXBoLmdyYXBoc1tnaWRdKTsNCisgICAgZm9yIChlaWQgaW4gZ3JhcGguZWRnZXMpDQorICAgICAgICBndC5kcmF3ZWRnZSAoZ3QsIHZpZXdzLCBncmFwaC5lZGdlc1tlaWRdKTsNCisgICAgZm9yIChuaWQgaW4gZ3JhcGgubm9kZXMpDQorICAgICAgICBndC5kcmF3bm9kZSAoZ3QsIHZpZXdzLCBncmFwaC5ub2Rlc1tuaWRdKTsNCit9Ow0KK2RvdHR5LnByb3RvZ3QucmVkcmF3Z3JhcGggPSBmdW5jdGlvbiAoZ3QsIHZpZXdzKSB7DQorICAgIGxvY2FsIHZpZDsNCisNCisgICAgZm9yICh2aWQgaW4gdmlld3MpDQorICAgICAgICBjbGVhciAodmlld3NbdmlkXS5jYW52YXMpOw0KKyAgICBndC5kcmF3Z3JhcGggKGd0LCB2aWV3cyk7DQorfTsNCitkb3R0eS5wcm90b2d0LnNldHZpZXdzaXplID0gZnVuY3Rpb24gKHZpZXdzLCByKSB7DQorICAgIGxvY2FsIHZpZCwgdnQsIHcydiwgc2NhbGUsIGF0dHI7DQorDQorICAgIGZvciAodmlkIGluIHZpZXdzKSB7DQorICAgICAgICB2dCA9IHZpZXdzW3ZpZF07DQorICAgICAgICB2dC53cmVjdCA9IGNvcHkgKHIpOw0KKyAgICAgICAgaWYgKHJbMV0ueCA9PSAwIHwgclsxXS55ID09IDApIHsNCisgICAgICAgICAgICBhdHRyID0gZ2V0d2lkZ2V0YXR0ciAodnQuc2Nyb2xsLCBbMCA9ICdzaXplJztdKTsNCisgICAgICAgICAgICB2dC53cmVjdFsxXSA9IGNvcHkgKGF0dHIuc2l6ZSk7DQorICAgICAgICB9DQorICAgICAgICBpZiAodnQudHlwZSA9PSAnYmlyZHNleWUnKSB7DQorICAgICAgICAgICAgYXR0ciA9IGdldHdpZGdldGF0dHIgKHZ0LnNjcm9sbCwgWzAgPSAnc2l6ZSc7XSk7DQorICAgICAgICAgICAgc2NhbGUueCA9ICh2dC53cmVjdFsxXS54IC0gdnQud3JlY3RbMF0ueCkgLyBhdHRyLnNpemUueDsNCisgICAgICAgICAgICBzY2FsZS55ID0gKHZ0LndyZWN0WzFdLnkgLSB2dC53cmVjdFswXS55KSAvIGF0dHIuc2l6ZS55Ow0KKyAgICAgICAgICAgIGlmIChzY2FsZS54ID4gMSAmIHNjYWxlLnggPiBzY2FsZS55KQ0KKyAgICAgICAgICAgICAgICB2dC53MnYgPSBzY2FsZS54Ow0KKyAgICAgICAgICAgIGVsc2UgaWYgKHNjYWxlLnkgPiAxKQ0KKyAgICAgICAgICAgICAgICB2dC53MnYgPSBzY2FsZS55Ow0KKyAgICAgICAgICAgIGVsc2UNCisgICAgICAgICAgICAgICAgdnQudzJ2ID0gMTsNCisgICAgICAgIH0NCisgICAgICAgIHcydiA9IHZ0LncydjsNCisgICAgICAgIHZ0LnZzaXplID0gWw0KKyAgICAgICAgICAgICd4JyA9IHRvaW50ICgodnQud3JlY3RbMV0ueCAtIHZ0LndyZWN0WzBdLngpIC8gdzJ2KTsNCisgICAgICAgICAgICAneScgPSB0b2ludCAoKHZ0LndyZWN0WzFdLnkgLSB2dC53cmVjdFswXS55KSAvIHcydik7DQorICAgICAgICBdOw0KKyAgICAgICAgc2V0d2lkZ2V0YXR0ciAodnQuY2FudmFzLCBbDQorICAgICAgICAgICAgJ3dpbmRvdycgPSB2dC53cmVjdDsNCisgICAgICAgICAgICAndmlld3BvcnQnID0gdnQudnNpemU7DQorICAgICAgICBdKTsNCisgICAgICAgIGF0dHIgPSBnZXR3aWRnZXRhdHRyICh2dC5jYW52YXMsIFswID0gJ3ZpZXdwb3J0JztdKTsNCisgICAgICAgIHZ0LnZzaXplID0gY29weSAoYXR0ci52aWV3cG9ydCk7DQorICAgIH0NCit9Ow0KK2RvdHR5LnByb3RvZ3Quc2V0dmlld3NjYWxlID0gZnVuY3Rpb24gKHZpZXdzLCBmYWN0b3IpIHsNCisgICAgbG9jYWwgdmlkLCB2dCwgdzJ2LCBhdHRyOw0KKw0KKyAgICBmb3IgKHZpZCBpbiB2aWV3cykgew0KKyAgICAgICAgdnQgPSB2aWV3c1t2aWRdOw0KKyAgICAgICAgaWYgKCh3MnYgPSB2dC53MnYgKiBmYWN0b3IpIDwgMC4wMSkgew0KKyAgICAgICAgICAgIGRvdHR5Lm1lc3NhZ2UgKDAsICdjYW5ub3Qgem9vbSBhbnkgY2xvc2VyJyk7DQorICAgICAgICAgICAgcmV0dXJuOw0KKyAgICAgICAgfQ0KKyAgICAgICAgdnQudzJ2ID0gdzJ2Ow0KKyAgICAgICAgdnQudnNpemUgPSBbDQorICAgICAgICAgICAgJ3gnID0gKHZ0LndyZWN0WzFdLnggLSB2dC53cmVjdFswXS54KSAvIHcydjsNCisgICAgICAgICAgICAneScgPSAodnQud3JlY3RbMV0ueSAtIHZ0LndyZWN0WzBdLnkpIC8gdzJ2Ow0KKyAgICAgICAgXTsNCisgICAgICAgIHNldHdpZGdldGF0dHIgKHZ0LmNhbnZhcywgWyd2aWV3cG9ydCcgPSB2dC52c2l6ZTtdKTsNCisgICAgICAgIGF0dHIgPSBnZXR3aWRnZXRhdHRyICh2dC5jYW52YXMsIFswID0gJ3ZpZXdwb3J0JztdKTsNCisgICAgICAgIHZ0LnZzaXplID0gY29weSAoYXR0ci52aWV3cG9ydCk7DQorICAgIH0NCit9Ow0KK2RvdHR5LnByb3RvZ3Quc2V0dmlld2NlbnRlciA9IGZ1bmN0aW9uICh2aWV3cywgY2VudGVyKSB7DQorICAgIGxvY2FsIHZpZCwgdnQsIHBvczsNCisNCisgICAgZm9yICh2aWQgaW4gdmlld3MpIHsNCisgICAgICAgIHZ0ID0gdmlld3NbdmlkXTsNCisgICAgICAgIHBvcyA9IFsNCisgICAgICAgICAgICAneCcgPSBjZW50ZXIueCAqIHZ0LnZzaXplLnggLyAodnQud3JlY3RbMV0ueCAtIHZ0LndyZWN0WzBdLngpOw0KKyAgICAgICAgICAgICd5JyA9ICgNCisgICAgICAgICAgICAgICAgKHZ0LndyZWN0WzFdLnkgLSBjZW50ZXIueSkgKiB2dC52c2l6ZS55IC8NCisgICAgICAgICAgICAgICAgKHZ0LndyZWN0WzFdLnkgLSB2dC53cmVjdFswXS55KQ0KKyAgICAgICAgICAgICk7DQorICAgICAgICBdOw0KKyAgICAgICAgc2V0d2lkZ2V0YXR0ciAodnQuc2Nyb2xsLCBbJ2NoaWxkY2VudGVyJyA9IHBvcztdKTsNCisgICAgfQ0KK307DQorIw0KKyMgZHJhdyBncmFwaCBjb21wb25lbnRzDQorIw0KK2RvdHR5LnByb3RvZ3QuZHJhd3NncmFwaCA9IGZ1bmN0aW9uIChndCwgdmlld3MsIHNncmFwaCkgew0KKyAgICBzZ3JhcGguZHJhdyA9IDE7DQorICAgIGlmICh+c2dyYXBoLmRyYXdzKQ0KKyAgICAgICAgcmV0dXJuOw0KKyAgICBndC5leGVjYWxsZHJhdyAoZ3QsIHZpZXdzLCBudWxsLCBzZ3JhcGguZHJhd3MsIFsNCisgICAgICAgICdmb250bmFtZScgPSBzZ3JhcGguZm9udG5hbWU7DQorICAgICAgICAnZm9udHNpemUnID0gc2dyYXBoLmZvbnRzaXplOw0KKyAgICAgICAgJ2ZvbnRjb2xvcicgPSBzZ3JhcGguZm9udGNvbG9yOw0KKyAgICAgICAgJ2RyYXdjb2xvcicgPSBzZ3JhcGguZHJhd2NvbG9yOw0KKyAgICAgICAgJ2ZpbGxjb2xvcicgPSBzZ3JhcGguZmlsbGNvbG9yOw0KKyAgICBdKTsNCit9Ow0KK2RvdHR5LnByb3RvZ3QudW5kcmF3c2dyYXBoID0gZnVuY3Rpb24gKGd0LCB2aWV3cywgc2dyYXBoKSB7DQorICAgIHNncmFwaC5kcmF3biA9IDA7DQorICAgIGlmICh+c2dyYXBoLmRyYXdzKQ0KKyAgICAgICAgcmV0dXJuOw0KKyAgICBndC5leGVjYWxsZHJhdyAoZ3QsIHZpZXdzLCBudWxsLCBzZ3JhcGguZHJhd3MsIFsNCisgICAgICAgICdmb250bmFtZScgPSBzZ3JhcGguZm9udG5hbWU7DQorICAgICAgICAnZm9udHNpemUnID0gc2dyYXBoLmZvbnRzaXplOw0KKyAgICAgICAgJ2ZvbnRjb2xvcicgPSBzZ3JhcGguZm9udGNvbG9yOw0KKyAgICAgICAgJ2RyYXdjb2xvcicgPSAwOw0KKyAgICAgICAgJ2ZpbGxjb2xvcicgPSAwOw0KKyAgICBdKTsNCit9Ow0KK2RvdHR5LnByb3RvZ3QuZHJhd25vZGUgPSBmdW5jdGlvbiAoZ3QsIHZpZXdzLCBub2RlKSB7DQorICAgIGxvY2FsIHZpZDsNCisNCisgICAgbm9kZS5kcmF3biA9IDE7DQorICAgIGlmICh+bm9kZS5kcmF3cykNCisgICAgICAgIHJldHVybjsNCisgICAgZ3QuZXhlY2FsbGRyYXcgKGd0LCB2aWV3cywgbm9kZSwgbm9kZS5kcmF3cywgWw0KKyAgICAgICAgJ2ZvbnRuYW1lJyA9IG5vZGUuZm9udG5hbWU7DQorICAgICAgICAnZm9udHNpemUnID0gbm9kZS5mb250c2l6ZTsNCisgICAgICAgICdmb250Y29sb3InID0gbm9kZS5mb250Y29sb3I7DQorICAgICAgICAnZHJhd2NvbG9yJyA9IG5vZGUuZHJhd2NvbG9yOw0KKyAgICAgICAgJ2ZpbGxjb2xvcicgPSBub2RlLmZpbGxjb2xvcjsNCisgICAgXSk7DQorICAgIGZvciAodmlkIGluIHZpZXdzKQ0KKyAgICAgICAgc2V0cGljayAodmlld3NbdmlkXS5jYW52YXMsIG5vZGUsIG5vZGUucmVjdCk7DQorfTsNCitkb3R0eS5wcm90b2d0LnVuZHJhd25vZGUgPSBmdW5jdGlvbiAoZ3QsIHZpZXdzLCBub2RlKSB7DQorICAgIGxvY2FsIHZpZDsNCisNCisgICAgaWYgKH5ub2RlLmRyYXduKQ0KKyAgICAgICAgcmV0dXJuOw0KKyAgICBub2RlLmRyYXduID0gMDsNCisgICAgaWYgKH5ub2RlLnBvcykNCisgICAgICAgIHJldHVybjsNCisgICAgZ3QuZXhlY2FsbGRyYXcgKGd0LCB2aWV3cywgbm9kZSwgbm9kZS5kcmF3cywgWw0KKyAgICAgICAgJ25vb3ZlcnJpZGUnID0gMTsNCisgICAgICAgICdmb250bmFtZScgPSBub2RlLmZvbnRuYW1lOw0KKyAgICAgICAgJ2ZvbnRzaXplJyA9IG5vZGUuZm9udHNpemU7DQorICAgICAgICAnZm9udGNvbG9yJyA9IDA7DQorICAgICAgICAnZHJhd2NvbG9yJyA9IDA7DQorICAgICAgICAnZmlsbGNvbG9yJyA9IDA7DQorICAgIF0pOw0KKyAgICBmb3IgKHZpZCBpbiB2aWV3cykNCisgICAgICAgIGNsZWFycGljayAodmlld3NbdmlkXS5jYW52YXMsIG5vZGUpOw0KK307DQorZG90dHkucHJvdG9ndC5tb3Zlbm9kZSA9IGZ1bmN0aW9uIChndCwgbm9kZSwgcG9zKSB7DQorICAgIGxvY2FsIGRwLCBlaWQsIGVkZ2U7DQorDQorICAgIGRwLnggPSBwb3MueCAtIG5vZGUucG9zLng7DQorICAgIGRwLnkgPSBwb3MueSAtIG5vZGUucG9zLnk7DQorICAgIGd0LnVuZHJhd25vZGUgKGd0LCBndC52aWV3cywgbm9kZSk7DQorICAgIG5vZGUucG9zLnggPSBwb3MueDsNCisgICAgbm9kZS5wb3MueSA9IHBvcy55Ow0KKyAgICBndC5tb3Zlbm9kZWRyYXcgKG5vZGUuZHJhd3MsIGRwKTsNCisgICAgZm9yIChlaWQgaW4gbm9kZS5lZGdlcykgew0KKyAgICAgICAgZWRnZSA9IG5vZGUuZWRnZXNbZWlkXTsNCisgICAgICAgIGd0LnVuZHJhd2VkZ2UgKGd0LCBndC52aWV3cywgZWRnZSk7DQorICAgICAgICBndC5tb3ZlZWRnZWRyYXcgKGVkZ2UuZHJhd3MsIGVkZ2UudGFpbC5wb3MsIGVkZ2UuaGVhZC5wb3MpOw0KKyAgICAgICAgZ3QuZHJhd2VkZ2UgKGd0LCBndC52aWV3cywgZWRnZSk7DQorICAgIH0NCisgICAgZ3QuZHJhd25vZGUgKGd0LCBndC52aWV3cywgbm9kZSk7DQorfTsNCitkb3R0eS5wcm90b2d0LmRyYXdlZGdlID0gZnVuY3Rpb24gKGd0LCB2aWV3cywgZWRnZSkgew0KKyAgICBsb2NhbCB2aWQsIGNhbnZhczsNCisNCisgICAgZWRnZS5kcmF3biA9IDE7DQorICAgIGlmICh+ZWRnZS5kcmF3cykNCisgICAgICAgIHJldHVybjsNCisgICAgZ3QuZXhlY2FsbGRyYXcgKGd0LCB2aWV3cywgZWRnZSwgZWRnZS5kcmF3cywgWw0KKyAgICAgICAgJ2ZvbnRuYW1lJyA9IGVkZ2UuZm9udG5hbWU7DQorICAgICAgICAnZm9udHNpemUnID0gZWRnZS5mb250c2l6ZTsNCisgICAgICAgICdmb250Y29sb3InID0gZWRnZS5mb250Y29sb3I7DQorICAgICAgICAnZHJhd2NvbG9yJyA9IGVkZ2UuZHJhd2NvbG9yOw0KKyAgICAgICAgJ2ZpbGxjb2xvcicgPSBlZGdlLmZpbGxjb2xvcjsNCisgICAgXSk7DQorICAgIGZvciAodmlkIGluIHZpZXdzKSB7DQorICAgICAgICBjYW52YXMgPSB2aWV3c1t2aWRdLmNhbnZhczsNCisgICAgICAgIGlmIChndC5lZGdlaGFuZGxlcyA9PSAwIHwgfmVkZ2UuZHJhd3MuZXApDQorICAgICAgICAgICAgY29udGludWU7DQorICAgICAgICBhcmMgKGNhbnZhcywgZWRnZSwgZWRnZS5kcmF3cy5lcCwgWyd4JyA9IDU7ICd5JyA9IDU7XSwgWydjb2xvcicgPSAxO10pOw0KKyAgICB9DQorfTsNCitkb3R0eS5wcm90b2d0LnVuZHJhd2VkZ2UgPSBmdW5jdGlvbiAoZ3QsIHZpZXdzLCBlZGdlKSB7DQorICAgIGxvY2FsIHZpZCwgY2FudmFzOw0KKw0KKyAgICBpZiAofmVkZ2UuZHJhd24pDQorICAgICAgICByZXR1cm47DQorICAgIGVkZ2UuZHJhd24gPSAwOw0KKyAgICBpZiAofmVkZ2UuZHJhd3MpDQorICAgICAgICByZXR1cm47DQorICAgIGd0LmV4ZWNhbGxkcmF3IChndCwgdmlld3MsIGVkZ2UsIGVkZ2UuZHJhd3MsIFsNCisgICAgICAgICdub292ZXJyaWRlJyA9IDE7DQorICAgICAgICAnZm9udG5hbWUnID0gZWRnZS5mb250bmFtZTsNCisgICAgICAgICdmb250c2l6ZScgPSBlZGdlLmZvbnRzaXplOw0KKyAgICAgICAgJ2ZvbnRjb2xvcicgPSAwOw0KKyAgICAgICAgJ2RyYXdjb2xvcicgPSAwOw0KKyAgICAgICAgJ2ZpbGxjb2xvcicgPSAwOw0KKyAgICBdKTsNCisgICAgZm9yICh2aWQgaW4gdmlld3MpIHsNCisgICAgICAgIGNhbnZhcyA9IHZpZXdzW3ZpZF0uY2FudmFzOw0KKyAgICAgICAgaWYgKGd0LmVkZ2VoYW5kbGVzID09IDAgfCB+ZWRnZS5kcmF3cy5lcCkNCisgICAgICAgICAgICBjb250aW51ZTsNCisgICAgICAgIGFyYyAoY2FudmFzLCBlZGdlLCBlZGdlLmRyYXdzLmVwLCBbJ3gnID0gNTsgJ3knID0gNTtdLCBbJ2NvbG9yJyA9IDA7XSk7DQorICAgICAgICBjbGVhcnBpY2sgKGNhbnZhcywgZWRnZSk7DQorICAgIH0NCit9Ow0KKyMNCisjIGRyYXcgZGlyZWN0aXZlcw0KKyMNCitkb3R0eS5wcm90b2d0LmV4ZWNhbGxkcmF3ID0gZnVuY3Rpb24gKGd0LCB2aWV3cywgb2JqLCBkcmF3cywgZ2MpIHsNCisgICAgbG9jYWwgdmlkLCB2dCwgZGlkLCBkcmF3LCBpLCBmdW5jOw0KKw0KKyAgICBmb3IgKHZpZCBpbiB2aWV3cykgew0KKyAgICAgICAgdnQgPSB2aWV3c1t2aWRdOw0KKyAgICAgICAgZm9yIChkaWQgaW4gZHJhd3MpIHsNCisgICAgICAgICAgICBpZiAoZGlkID09ICdlcCcpDQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0KKyAgICAgICAgICAgIGRyYXcgPSBkcmF3c1tkaWRdOw0KKyAgICAgICAgICAgIGZvciAoaSA9IDA7IGRyYXdbaV07IGkgPSBpICsgMSkNCisgICAgICAgICAgICAgICAgaWYgKChmdW5jID0gZ3QuZHJhd2Z1bmNbZHJhd1tpXS50eXBlXSkpDQorICAgICAgICAgICAgICAgICAgICBmdW5jIChndCwgdnQuY2FudmFzLCBvYmosIGRyYXdbaV0sIGdjKTsNCisgICAgICAgIH0NCisgICAgfQ0KK307DQorZG90dHkucHJvdG9ndC5kcmF3ZnVuYy5FID0gZnVuY3Rpb24gKGd0LCBjYW52YXMsIG9iaiwgZGF0YSwgZ2MpIHsNCisgICAgYXJjIChjYW52YXMsIG9iaiwgZGF0YS5jLCBkYXRhLnMsIFsNCisgICAgICAgICdjb2xvcicgPSBnYy5maWxsY29sb3I7ICdzdHlsZScgPSBnYy5zdHlsZTsgJ3dpZHRoJyA9IGdjLndpZHRoOw0KKyAgICAgICAgJ2ZpbGwnID0gJ29uJzsNCisgICAgXSk7DQorICAgIGFyYyAoY2FudmFzLCBvYmosIGRhdGEuYywgZGF0YS5zLCBbDQorICAgICAgICAnY29sb3InID0gZ2MuZHJhd2NvbG9yOyAnc3R5bGUnID0gZ2Muc3R5bGU7ICd3aWR0aCcgPSBnYy53aWR0aDsNCisgICAgXSk7DQorfTsNCitkb3R0eS5wcm90b2d0LmRyYXdmdW5jLmUgPSBmdW5jdGlvbiAoZ3QsIGNhbnZhcywgb2JqLCBkYXRhLCBnYykgew0KKyAgICBhcmMgKGNhbnZhcywgb2JqLCBkYXRhLmMsIGRhdGEucywgWw0KKyAgICAgICAgJ2NvbG9yJyA9IGdjLmRyYXdjb2xvcjsgJ3N0eWxlJyA9IGdjLnN0eWxlOyAnd2lkdGgnID0gZ2Mud2lkdGg7DQorICAgIF0pOw0KK307DQorZG90dHkucHJvdG9ndC5kcmF3ZnVuYy5QID0gZnVuY3Rpb24gKGd0LCBjYW52YXMsIG9iaiwgZGF0YSwgZ2MpIHsNCisgICAgcG9seWdvbiAoY2FudmFzLCBvYmosIGRhdGEucHMsIFsNCisgICAgICAgICdjb2xvcicgPSBnYy5maWxsY29sb3I7ICdzdHlsZScgPSBnYy5zdHlsZTsgJ3dpZHRoJyA9IGdjLndpZHRoOw0KKyAgICAgICAgJ2ZpbGwnID0gJ29uJzsNCisgICAgXSk7DQorICAgIHBvbHlnb24gKGNhbnZhcywgb2JqLCBkYXRhLnBzLCBbDQorICAgICAgICAnY29sb3InID0gZ2MuZHJhd2NvbG9yOyAnc3R5bGUnID0gZ2Muc3R5bGU7ICd3aWR0aCcgPSBnYy53aWR0aDsNCisgICAgXSk7DQorfTsNCitkb3R0eS5wcm90b2d0LmRyYXdmdW5jLnAgPSBmdW5jdGlvbiAoZ3QsIGNhbnZhcywgb2JqLCBkYXRhLCBnYykgew0KKyAgICBwb2x5Z29uIChjYW52YXMsIG9iaiwgZGF0YS5wcywgWw0KKyAgICAgICAgJ2NvbG9yJyA9IGdjLmRyYXdjb2xvcjsgJ3N0eWxlJyA9IGdjLnN0eWxlOyAnd2lkdGgnID0gZ2Mud2lkdGg7DQorICAgIF0pOw0KK307DQorZG90dHkucHJvdG9ndC5kcmF3ZnVuYy5MID0gZnVuY3Rpb24gKGd0LCBjYW52YXMsIG9iaiwgZGF0YSwgZ2MpIHsNCisgICAgcG9seWdvbiAoY2FudmFzLCBvYmosIGRhdGEucHMsIFsNCisgICAgICAgICdjb2xvcicgPSBnYy5kcmF3Y29sb3I7ICdzdHlsZScgPSBnYy5zdHlsZTsgJ3dpZHRoJyA9IGdjLndpZHRoOw0KKyAgICBdKTsNCit9Ow0KK2RvdHR5LnByb3RvZ3QuZHJhd2Z1bmMuYiA9IGZ1bmN0aW9uIChndCwgY2FudmFzLCBvYmosIGRhdGEsIGdjKSB7DQorICAgIHNwbGluZWdvbiAoY2FudmFzLCBvYmosIGRhdGEucHMsIFsNCisgICAgICAgICdjb2xvcicgPSBnYy5maWxsY29sb3I7ICdzdHlsZScgPSBnYy5zdHlsZTsgJ3dpZHRoJyA9IGdjLndpZHRoOw0KKyAgICAgICAgJ2ZpbGwnID0gJ29uJzsNCisgICAgXSk7DQorfTsNCitkb3R0eS5wcm90b2d0LmRyYXdmdW5jLkIgPSBmdW5jdGlvbiAoZ3QsIGNhbnZhcywgb2JqLCBkYXRhLCBnYykgew0KKyAgICBzcGxpbmVnb24gKGNhbnZhcywgb2JqLCBkYXRhLnBzLCBbDQorICAgICAgICAnY29sb3InID0gZ2MuZHJhd2NvbG9yOyAnc3R5bGUnID0gZ2Muc3R5bGU7ICd3aWR0aCcgPSBnYy53aWR0aDsNCisgICAgXSk7DQorfTsNCitkb3R0eS5wcm90b2d0LmRyYXdmdW5jLlQgPSBmdW5jdGlvbiAoZ3QsIGNhbnZhcywgb2JqLCBkYXRhLCBnYykgew0KKyAgICB0ZXh0IChjYW52YXMsIG9iaiwgZGF0YS5wLCBkYXRhLnMsIGdjLmZvbnRuYW1lLCBnYy5mb250c2l6ZSwgZGF0YS5qLCBbDQorICAgICAgICAnY29sb3InID0gZ2MuZm9udGNvbG9yOyAnc3R5bGUnID0gZ2Muc3R5bGU7ICd3aWR0aCcgPSBnYy53aWR0aDsNCisgICAgXSk7DQorfTsNCitkb3R0eS5wcm90b2d0LmRyYXdmdW5jLkMgPSBmdW5jdGlvbiAoZ3QsIGNhbnZhcywgb2JqLCBkYXRhLCBnYykgew0KKyAgICBpZiAoZ2Mubm9vdmVycmlkZSB+PSAxKQ0KKyAgICAgICAgZ2MuZmlsbGNvbG9yID0gZGF0YS5maWxsY29sb3I7DQorfTsNCitkb3R0eS5wcm90b2d0LmRyYXdmdW5jLmMgPSBmdW5jdGlvbiAoZ3QsIGNhbnZhcywgb2JqLCBkYXRhLCBnYykgew0KKyAgICBpZiAoZ2Mubm9vdmVycmlkZSB+PSAxKSB7DQorICAgICAgICBnYy5kcmF3Y29sb3IgPSBkYXRhLmRyYXdjb2xvcjsNCisgICAgICAgIGdjLmZvbnRjb2xvciA9IGRhdGEuZHJhd2NvbG9yOw0KKyAgICB9DQorfTsNCitkb3R0eS5wcm90b2d0LmRyYXdmdW5jLkYgPSBmdW5jdGlvbiAoZ3QsIGNhbnZhcywgb2JqLCBkYXRhLCBnYykgew0KKyAgICBnYy5mb250bmFtZSA9IGRhdGEuZm47DQorICAgIGdjLmZvbnRzaXplID0gZGF0YS5mczsNCit9Ow0KK2RvdHR5LnByb3RvZ3QuZHJhd2Z1bmMuUyA9IGZ1bmN0aW9uIChndCwgY2FudmFzLCBvYmosIGRhdGEsIGdjKSB7DQorICAgIGdjLnN0eWxlID0gZGF0YS5zdHlsZTsNCisgICAgZ2Mud2lkdGggPSBkYXRhLndpZHRoOw0KK307DQorZG90dHkucHJvdG9ndC5tb3Zlbm9kZWRyYXcgPSBmdW5jdGlvbiAoZHJhd3MsIGRwKSB7DQorICAgIGxvY2FsIGRpZCwgZHJhdywgaSwgajsNCisNCisgICAgZm9yIChkaWQgaW4gZHJhd3MpIHsNCisgICAgICAgIGlmIChkaWQgPT0gJ2VwJykNCisgICAgICAgICAgICBjb250aW51ZTsNCisgICAgICAgIGRyYXcgPSBkcmF3c1tkaWRdOw0KKyAgICAgICAgZm9yIChpID0gMDsgZHJhd1tpXTsgaSA9IGkgKyAxKSB7DQorICAgICAgICAgICAgaWYgKGRyYXdbaV0udHlwZSA9PSAnRScgfCBkcmF3W2ldLnR5cGUgPT0gJ2UnKSB7DQorICAgICAgICAgICAgICAgIGRyYXdbaV0uYy54ID0gZHJhd1tpXS5jLnggKyBkcC54Ow0KKyAgICAgICAgICAgICAgICBkcmF3W2ldLmMueSA9IGRyYXdbaV0uYy55ICsgZHAueTsNCisgICAgICAgICAgICB9IGVsc2UgaWYgKGRyYXdbaV0udHlwZSA9PSAnUCcgfCBkcmF3W2ldLnR5cGUgPT0gJ3AnKSB7DQorICAgICAgICAgICAgICAgIGZvciAoaiA9IDE7IGRyYXdbaV0ucHNbal07IGogPSBqICsgMSkgew0KKyAgICAgICAgICAgICAgICAgICAgZHJhd1tpXS5wc1tqXS54ID0gZHJhd1tpXS5wc1tqXS54ICsgZHAueDsNCisgICAgICAgICAgICAgICAgICAgIGRyYXdbaV0ucHNbal0ueSA9IGRyYXdbaV0ucHNbal0ueSArIGRwLnk7DQorICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICB9IGVsc2UgaWYgKGRyYXdbaV0udHlwZSA9PSAnTCcgfCBkcmF3W2ldLnR5cGUgPT0gJ0InKSB7DQorICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGRyYXdbaV0ucHNbal07IGogPSBqICsgMSkgew0KKyAgICAgICAgICAgICAgICAgICAgZHJhd1tpXS5wc1tqXS54ID0gZHJhd1tpXS5wc1tqXS54ICsgZHAueDsNCisgICAgICAgICAgICAgICAgICAgIGRyYXdbaV0ucHNbal0ueSA9IGRyYXdbaV0ucHNbal0ueSArIGRwLnk7DQorICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICB9IGVsc2UgaWYgKGRyYXdbaV0udHlwZSA9PSAnVCcpIHsNCisgICAgICAgICAgICAgICAgZHJhd1tpXS5wLnggPSBkcmF3W2ldLnAueCArIGRwLng7DQorICAgICAgICAgICAgICAgIGRyYXdbaV0ucC55ID0gZHJhd1tpXS5wLnkgKyBkcC55Ow0KKyAgICAgICAgICAgIH0NCisgICAgICAgIH0NCisgICAgfQ0KK307DQorZG90dHkucHJvdG9ndC5tb3ZlZWRnZWRyYXcgPSBmdW5jdGlvbiAoZHJhd3MsIHRwLCBocCkgew0KKyAgICBsb2NhbCBkcmF3czIsIGRpZDsNCisNCisgICAgZm9yIChkaWQgaW4gZHJhd3MpDQorICAgICAgICBkcmF3czJbZGlkXSA9IGRyYXdzW2RpZF07DQorICAgIGZvciAoZGlkIGluIGRyYXdzMikNCisgICAgICAgIHJlbW92ZSAoZGlkLCBkcmF3cyk7DQorICAgIGRyYXdzWzBdID0gWw0KKyAgICAgICAgMCA9IFsNCisgICAgICAgICAgICAndHlwZScgPSAnTCc7DQorICAgICAgICAgICAgJ24nID0gMjsNCisgICAgICAgICAgICAncHMnID0gWw0KKyAgICAgICAgICAgICAgICAwID0gY29weSAodHApOw0KKyAgICAgICAgICAgICAgICAxID0gY29weSAoaHApOw0KKyAgICAgICAgICAgIF07DQorICAgICAgICBdOw0KKyAgICAgICAgJ2VwJyA9IFsneCcgPSAodHAueCArIGhwLngpIC8gMjsgJ3knID0gKHRwLnkgKyBocC55KSAvIDI7XTsNCisgICAgXTsNCit9Ow0KK2RvdHR5LnByb3RvZ3Quc2ltcGxlbm9kZWRyYXcgPSBmdW5jdGlvbiAobm9kZSwgYywgcykgew0KKyAgICBsb2NhbCBkcmF3czsNCisNCisgICAgaWYgKG5vZGUuYXR0ci5zaGFwZSA9PSAnZWxsaXBzZScpDQorICAgICAgICBkcmF3c1swXSA9IFsNCisgICAgICAgICAgICAwID0gWw0KKyAgICAgICAgICAgICAgICAndHlwZScgPSAnZSc7DQorICAgICAgICAgICAgICAgICdjJyA9IGNvcHkgKGMpOw0KKyAgICAgICAgICAgICAgICAncycgPSBbJ3gnID0gcy54IC8gMjsgJ3knID0gcy55IC8gMjtdOw0KKyAgICAgICAgICAgIF07DQorICAgICAgICBdOw0KKyAgICBlbHNlDQorICAgICAgICBkcmF3c1swXSA9IFsNCisgICAgICAgICAgICAwID0gWw0KKyAgICAgICAgICAgICAgICAndHlwZScgPSAncCc7DQorICAgICAgICAgICAgICAgICduJyA9IDU7DQorICAgICAgICAgICAgICAgICdwcycgPSBbDQorICAgICAgICAgICAgICAgICAgICAwID0gWyd4JyA9IGMueCAtIHMueCAvIDI7ICd5JyA9IGMueSAtIHMueSAvIDI7XTsNCisgICAgICAgICAgICAgICAgICAgIDEgPSBbJ3gnID0gYy54ICsgcy54IC8gMjsgJ3knID0gYy55IC0gcy55IC8gMjtdOw0KKyAgICAgICAgICAgICAgICAgICAgMiA9IFsneCcgPSBjLnggKyBzLnggLyAyOyAneScgPSBjLnkgKyBzLnkgLyAyO107DQorICAgICAgICAgICAgICAgICAgICAzID0gWyd4JyA9IGMueCAtIHMueCAvIDI7ICd5JyA9IGMueSArIHMueSAvIDI7XTsNCisgICAgICAgICAgICAgICAgICAgIDQgPSBbJ3gnID0gYy54IC0gcy54IC8gMjsgJ3knID0gYy55IC0gcy55IC8gMjtdOw0KKyAgICAgICAgICAgICAgICBdOw0KKyAgICAgICAgICAgIF07DQorICAgICAgICBdOw0KKyAgICByZXR1cm4gZHJhd3M7DQorfTsNCitkb3R0eS5wcm90b2d0LnNpbXBsZWVkZ2VkcmF3ID0gZnVuY3Rpb24gKGVkZ2UsIHRwLCBocCkgew0KKyAgICBsb2NhbCBkcmF3czsNCisNCisgICAgZHJhd3NbMF0gPSBbDQorICAgICAgICAwID0gWw0KKyAgICAgICAgICAgICd0eXBlJyA9ICdMJzsNCisgICAgICAgICAgICAnbicgPSAyOw0KKyAgICAgICAgICAgICdwcycgPSBbDQorICAgICAgICAgICAgICAgIDAgPSBjb3B5ICh0cCk7DQorICAgICAgICAgICAgICAgIDEgPSBjb3B5IChocCk7DQorICAgICAgICAgICAgXTsNCisgICAgICAgIF07DQorICAgICAgICAnZXAnID0gWyd4JyA9ICh0cC54ICsgaHAueCkgLyAyOyAneScgPSAodHAueSArIGhwLnkpIC8gMjtdOw0KKyAgICBdOw0KKyAgICByZXR1cm4gZHJhd3M7DQorfTsNCisjDQorIyB1dGlsaXRpZXMNCisjDQorZG90dHkucHJvdG9ndC5nZXRjb2xvciA9IGZ1bmN0aW9uICh2aWV3cywgbmFtZSkgew0KKyAgICBsb2NhbCB2aWQsIHZ0LCBjb2xvciwgdDsNCisNCisgICAgZm9yICh2aWQgaW4gdmlld3MpIHsNCisgICAgICAgIHZ0ID0gdmlld3NbdmlkXTsNCisgICAgICAgIGlmICh+KGNvbG9yID49IDApKSB7DQorICAgICAgICAgICAgaWYgKH4odnQuY29sb3JzW25hbWVdID49IDApKQ0KKyAgICAgICAgICAgICAgICBjb2xvciA9ICh2dC5jb2xvcnNbbmFtZV0gPSB2dC5jb2xvcm4pOw0KKyAgICAgICAgICAgIGVsc2Ugew0KKyAgICAgICAgICAgICAgICBjb2xvciA9IHZ0LmNvbG9yc1tuYW1lXTsNCisgICAgICAgICAgICAgICAgYnJlYWs7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgfSBlbHNlIGlmICh+KHZ0LmNvbG9yc1tuYW1lXSA+PSAwKSkNCisgICAgICAgICAgICB2dC5jb2xvcnNbbmFtZV0gPSBjb2xvcjsNCisgICAgICAgIGVsc2UgaWYgKHZ0LmNvbG9yc1tuYW1lXSB+PSBjb2xvcikNCisgICAgICAgICAgICBkb3R0eS5tZXNzYWdlICgwLCBjb25jYXQgKCdpbmNvbnNpc3RlbnQgY29sb3IgaWRzIGZvciAnLCBuYW1lKSk7DQorICAgICAgICBpZiAoc2V0d2lkZ2V0YXR0ciAodnQuY2FudmFzLCBbJ2NvbG9yJyA9IFtjb2xvciA9IG5hbWU7XTtdKSB+PSAxKSB7DQorICAgICAgICAgICAgdCA9IHNwbGl0IChuYW1lLCAnICcpOw0KKyAgICAgICAgICAgIGlmICh0YWJsZXNpemUgKHQpIH49IDMgfA0KKyAgICAgICAgICAgICAgICAgICAgc2V0d2lkZ2V0YXR0ciAodnQuY2FudmFzLCBbJ2NvbG9yJyA9IFtjb2xvciA9IFsNCisgICAgICAgICAgICAgICAgICAgICAgICAnaCcgPSBzdG9uICh0WzBdKTsgJ3MnID0gc3RvbiAodFsxXSk7ICd2JyA9IHN0b24gKHRbMl0pOw0KKyAgICAgICAgICAgICAgICAgICAgXTtdO10pIH49IDEpIHsNCisgICAgICAgICAgICAgICAgZG90dHkubWVzc2FnZSAoMCwgY29uY2F0ICgndW5rbm93biBjb2xvciAnLCBuYW1lLCAnIHVzaW5nICMxJykpOw0KKyAgICAgICAgICAgICAgICByZXR1cm4gMTsNCisgICAgICAgICAgICB9DQorICAgICAgICB9DQorICAgICAgICB2dC5jb2xvcm4gPSBjb2xvciArIDE7DQorICAgIH0NCisgICAgcmV0dXJuIGNvbG9yOw0KK307DQorZG90dHkucHJvdG9ndC5zZXRiZ2NvbG9yID0gZnVuY3Rpb24gKHZpZXdzLCBuYW1lKSB7DQorICAgIGxvY2FsIHZpZCwgdnQsIHQ7DQorDQorICAgIGZvciAodmlkIGluIHZpZXdzKSB7DQorICAgICAgICB2dCA9IHZpZXdzW3ZpZF07DQorICAgICAgICBpZiAoc2V0d2lkZ2V0YXR0ciAodnQuY2FudmFzLCBbJ2NvbG9yJyA9IFswID0gbmFtZTtdO10pIH49IDEpIHsNCisgICAgICAgICAgICB0ID0gc3BsaXQgKG5hbWUsICcgJyk7DQorICAgICAgICAgICAgaWYgKHRhYmxlc2l6ZSAodCkgfj0gMyB8DQorICAgICAgICAgICAgICAgICAgICBzZXR3aWRnZXRhdHRyICh2dC5jYW52YXMsIFsnY29sb3InID0gWzAgPSBbDQorICAgICAgICAgICAgICAgICAgICAgICAgJ2gnID0gc3RvbiAodFswXSk7ICdzJyA9IHN0b24gKHRbMV0pOyAndicgPSBzdG9uICh0WzJdKTsNCisgICAgICAgICAgICAgICAgICAgIF07XTtdKSB+PSAxKSB7DQorICAgICAgICAgICAgICAgIGRvdHR5Lm1lc3NhZ2UgKDAsIGNvbmNhdCAoJ3Vua25vd24gYmdjb2xvciAnLCBuYW1lKSk7DQorICAgICAgICAgICAgICAgIHJldHVybjsNCisgICAgICAgICAgICB9DQorICAgICAgICB9DQorICAgICAgICB2dC5jb2xvcnNbJ19iZ2NvbG9yXyddID0gbmFtZTsNCisgICAgfQ0KK307DQorZG90dHkucHJvdG9ndC51bnBhY2tzZ3JhcGhhdHRyID0gZnVuY3Rpb24gKGd0LCBzZ3JhcGgpIHsNCisgICAgbG9jYWwgYXR0cjsNCisNCisgICAgYXR0ciA9IHNncmFwaC5ncmFwaGF0dHI7DQorICAgIGlmIChkb3R0eS5mb250bWFwW2F0dHIuZm9udG5hbWVdKQ0KKyAgICAgICAgc2dyYXBoW2RvdHR5LmtleXMuZm5hbWVdID0gZG90dHkuZm9udG1hcFthdHRyLmZvbnRuYW1lXTsNCisgICAgZWxzZQ0KKyAgICAgICAgc2dyYXBoW2RvdHR5LmtleXMuZm5hbWVdID0gYXR0ci5mb250bmFtZTsNCisgICAgc2dyYXBoW2RvdHR5LmtleXMuZnNpemVdID0gc3RvbiAoYXR0ci5mb250c2l6ZSk7DQorICAgIHNncmFwaFtkb3R0eS5rZXlzLmZjb2xvcl0gPSBndC5nZXRjb2xvciAoZ3Qudmlld3MsIGF0dHIuZm9udGNvbG9yKTsNCisgICAgaWYgKGF0dHIuY29sb3IpDQorICAgICAgICBzZ3JhcGhbZG90dHkua2V5cy5kY29sb3JdID0gZ3QuZ2V0Y29sb3IgKGd0LnZpZXdzLCBhdHRyLmNvbG9yKTsNCisgICAgZWxzZQ0KKyAgICAgICAgc2dyYXBoW2RvdHR5LmtleXMuZGNvbG9yXSA9IGd0LmdldGNvbG9yIChndC52aWV3cywgJ2JsYWNrJyk7DQorICAgIGlmIChhdHRyLnN0eWxlID09ICdmaWxsZWQnKSB7DQorICAgICAgICBpZiAoYXR0ci5maWxsY29sb3IpDQorICAgICAgICAgICAgc2dyYXBoW2RvdHR5LmtleXMuYmNvbG9yXSA9IGd0LmdldGNvbG9yIChndC52aWV3cywgYXR0ci5maWxsY29sb3IpOw0KKyAgICAgICAgZWxzZSBpZiAoYXR0ci5jb2xvcikNCisgICAgICAgICAgICBzZ3JhcGhbZG90dHkua2V5cy5iY29sb3JdID0gZ3QuZ2V0Y29sb3IgKGd0LnZpZXdzLCBhdHRyLmNvbG9yKTsNCisgICAgICAgIGVsc2UNCisgICAgICAgICAgICBzZ3JhcGhbZG90dHkua2V5cy5iY29sb3JdID0gZ3QuZ2V0Y29sb3IgKGd0LnZpZXdzLCAnbGlnaHRncmV5Jyk7DQorICAgIH0NCit9Ow0KK2RvdHR5LnByb3RvZ3QudW5wYWNrbm9kZWF0dHIgPSBmdW5jdGlvbiAoZ3QsIG5vZGUpIHsNCisgICAgbG9jYWwgYXR0cjsNCisNCisgICAgYXR0ciA9IG5vZGUuYXR0cjsNCisgICAgaWYgKGRvdHR5LmZvbnRtYXBbYXR0ci5mb250bmFtZV0pDQorICAgICAgICBub2RlW2RvdHR5LmtleXMuZm5hbWVdID0gZG90dHkuZm9udG1hcFthdHRyLmZvbnRuYW1lXTsNCisgICAgZWxzZQ0KKyAgICAgICAgbm9kZVtkb3R0eS5rZXlzLmZuYW1lXSA9IGF0dHIuZm9udG5hbWU7DQorICAgIG5vZGVbZG90dHkua2V5cy5mc2l6ZV0gPSBzdG9uIChhdHRyLmZvbnRzaXplKTsNCisgICAgbm9kZVtkb3R0eS5rZXlzLmZjb2xvcl0gPSBndC5nZXRjb2xvciAoZ3Qudmlld3MsIGF0dHIuZm9udGNvbG9yKTsNCisgICAgaWYgKGF0dHIuY29sb3IpDQorICAgICAgICBub2RlW2RvdHR5LmtleXMuZGNvbG9yXSA9IGd0LmdldGNvbG9yIChndC52aWV3cywgYXR0ci5jb2xvcik7DQorICAgIGVsc2UNCisgICAgICAgIG5vZGVbZG90dHkua2V5cy5kY29sb3JdID0gZ3QuZ2V0Y29sb3IgKGd0LnZpZXdzLCAnYmxhY2snKTsNCisgICAgaWYgKGF0dHIuc3R5bGUgPT0gJ2ZpbGxlZCcpIHsNCisgICAgICAgIGlmIChhdHRyLmZpbGxjb2xvcikNCisgICAgICAgICAgICBub2RlW2RvdHR5LmtleXMuYmNvbG9yXSA9IGd0LmdldGNvbG9yIChndC52aWV3cywgYXR0ci5maWxsY29sb3IpOw0KKyAgICAgICAgZWxzZSBpZiAoYXR0ci5jb2xvcikNCisgICAgICAgICAgICBub2RlW2RvdHR5LmtleXMuYmNvbG9yXSA9IGd0LmdldGNvbG9yIChndC52aWV3cywgYXR0ci5jb2xvcik7DQorICAgICAgICBlbHNlDQorICAgICAgICAgICAgbm9kZVtkb3R0eS5rZXlzLmJjb2xvcl0gPSBndC5nZXRjb2xvciAoZ3Qudmlld3MsICdsaWdodGdyZXknKTsNCisgICAgfQ0KK307DQorZG90dHkucHJvdG9ndC51bnBhY2tlZGdlYXR0ciA9IGZ1bmN0aW9uIChndCwgZWRnZSkgew0KKyAgICBsb2NhbCBhdHRyOw0KKw0KKyAgICBhdHRyID0gZWRnZS5hdHRyOw0KKyAgICBpZiAoZG90dHkuZm9udG1hcFthdHRyLmZvbnRuYW1lXSkNCisgICAgICAgIGVkZ2VbZG90dHkua2V5cy5mbmFtZV0gPSBkb3R0eS5mb250bWFwW2F0dHIuZm9udG5hbWVdOw0KKyAgICBlbHNlDQorICAgICAgICBlZGdlW2RvdHR5LmtleXMuZm5hbWVdID0gYXR0ci5mb250bmFtZTsNCisgICAgZWRnZVtkb3R0eS5rZXlzLmZzaXplXSA9IHN0b24gKGF0dHIuZm9udHNpemUpOw0KKyAgICBlZGdlW2RvdHR5LmtleXMuZmNvbG9yXSA9IGd0LmdldGNvbG9yIChndC52aWV3cywgYXR0ci5mb250Y29sb3IpOw0KKyAgICBpZiAoYXR0ci5jb2xvcikNCisgICAgICAgIGVkZ2VbZG90dHkua2V5cy5kY29sb3JdID0gZ3QuZ2V0Y29sb3IgKGd0LnZpZXdzLCBhdHRyLmNvbG9yKTsNCisgICAgZWxzZQ0KKyAgICAgICAgZWRnZVtkb3R0eS5rZXlzLmRjb2xvcl0gPSBndC5nZXRjb2xvciAoZ3Qudmlld3MsICdibGFjaycpOw0KKyAgICBpZiAoYXR0ci5zdHlsZSA9PSAnZmlsbGVkJykgew0KKyAgICAgICAgaWYgKGF0dHIuZmlsbGNvbG9yKQ0KKyAgICAgICAgICAgIGVkZ2VbZG90dHkua2V5cy5iY29sb3JdID0gZ3QuZ2V0Y29sb3IgKGd0LnZpZXdzLCBhdHRyLmZpbGxjb2xvcik7DQorICAgICAgICBlbHNlIGlmIChhdHRyLmNvbG9yKQ0KKyAgICAgICAgICAgIGVkZ2VbZG90dHkua2V5cy5iY29sb3JdID0gZ3QuZ2V0Y29sb3IgKGd0LnZpZXdzLCBhdHRyLmNvbG9yKTsNCisgICAgICAgIGVsc2UNCisgICAgICAgICAgICBlZGdlW2RvdHR5LmtleXMuYmNvbG9yXSA9IGd0LmdldGNvbG9yIChndC52aWV3cywgJ2xpZ2h0Z3JleScpOw0KKyAgICB9DQorfTsNCitkb3R0eS5wcm90b2d0LnVucGFja2F0dHIgPSBmdW5jdGlvbiAoZ3QpIHsNCisgICAgbG9jYWwgZ2lkLCBzZ3JhcGgsIG5pZCwgbm9kZSwgZWlkLCBlZGdlLCBncmFwaCwgYXR0cjsNCisNCisgICAgZ3JhcGggPSBndC5ncmFwaDsNCisgICAgYXR0ciA9IGdyYXBoLmdyYXBoYXR0cjsNCisgICAgaWYgKGRvdHR5LmZvbnRtYXBbYXR0ci5mb250bmFtZV0pDQorICAgICAgICBncmFwaFtkb3R0eS5rZXlzLmZuYW1lXSA9IGRvdHR5LmZvbnRtYXBbYXR0ci5mb250bmFtZV07DQorICAgIGVsc2UNCisgICAgICAgIGdyYXBoW2RvdHR5LmtleXMuZm5hbWVdID0gYXR0ci5mb250bmFtZTsNCisgICAgZ3JhcGhbZG90dHkua2V5cy5mc2l6ZV0gPSBzdG9uIChhdHRyLmZvbnRzaXplKTsNCisgICAgZ3JhcGhbZG90dHkua2V5cy5mY29sb3JdID0gZ3QuZ2V0Y29sb3IgKGd0LnZpZXdzLCBhdHRyLmZvbnRjb2xvcik7DQorICAgIGlmIChhdHRyLmNvbG9yKQ0KKyAgICAgICAgZ3JhcGhbZG90dHkua2V5cy5kY29sb3JdID0gZ3QuZ2V0Y29sb3IgKGd0LnZpZXdzLCBhdHRyLmNvbG9yKTsNCisgICAgZWxzZQ0KKyAgICAgICAgZ3JhcGhbZG90dHkua2V5cy5kY29sb3JdID0gZ3QuZ2V0Y29sb3IgKGd0LnZpZXdzLCAnYmxhY2snKTsNCisgICAgaWYgKGF0dHIuc3R5bGUgPT0gJ2ZpbGxlZCcpIHsNCisgICAgICAgIGlmIChhdHRyLmZpbGxjb2xvcikNCisgICAgICAgICAgICBncmFwaFtkb3R0eS5rZXlzLmJjb2xvcl0gPSBndC5nZXRjb2xvciAoZ3Qudmlld3MsIGF0dHIuZmlsbGNvbG9yKTsNCisgICAgICAgIGVsc2UgaWYgKGF0dHIuY29sb3IpDQorICAgICAgICAgICAgZ3JhcGhbZG90dHkua2V5cy5iY29sb3JdID0gZ3QuZ2V0Y29sb3IgKGd0LnZpZXdzLCBhdHRyLmNvbG9yKTsNCisgICAgICAgIGVsc2UNCisgICAgICAgICAgICBncmFwaFtkb3R0eS5rZXlzLmJjb2xvcl0gPSBndC5nZXRjb2xvciAoZ3Qudmlld3MsICdsaWdodGdyZXknKTsNCisgICAgfQ0KKyAgICBpZiAoYXR0ci5iZ2NvbG9yICYgYXR0ci5iZ2NvbG9yIH49ICcnKQ0KKyAgICAgICAgZ3Quc2V0Ymdjb2xvciAoZ3Qudmlld3MsIGF0dHIuYmdjb2xvcik7DQorICAgIGZvciAoZ2lkIGluIGdyYXBoLmdyYXBoZGljdCkgew0KKyAgICAgICAgc2dyYXBoID0gZ3JhcGguZ3JhcGhzW2dyYXBoLmdyYXBoZGljdFtnaWRdXTsNCisgICAgICAgIGF0dHIgPSBzZ3JhcGguZ3JhcGhhdHRyOw0KKyAgICAgICAgaWYgKGRvdHR5LmZvbnRtYXBbYXR0ci5mb250bmFtZV0pDQorICAgICAgICAgICAgc2dyYXBoW2RvdHR5LmtleXMuZm5hbWVdID0gZG90dHkuZm9udG1hcFthdHRyLmZvbnRuYW1lXTsNCisgICAgICAgIGVsc2UNCisgICAgICAgICAgICBzZ3JhcGhbZG90dHkua2V5cy5mbmFtZV0gPSBhdHRyLmZvbnRuYW1lOw0KKyAgICAgICAgc2dyYXBoW2RvdHR5LmtleXMuZnNpemVdID0gc3RvbiAoYXR0ci5mb250c2l6ZSk7DQorICAgICAgICBzZ3JhcGhbZG90dHkua2V5cy5mY29sb3JdID0gZ3QuZ2V0Y29sb3IgKGd0LnZpZXdzLCBhdHRyLmZvbnRjb2xvcik7DQorICAgICAgICBpZiAoYXR0ci5jb2xvcikNCisgICAgICAgICAgICBzZ3JhcGhbZG90dHkua2V5cy5kY29sb3JdID0gZ3QuZ2V0Y29sb3IgKGd0LnZpZXdzLCBhdHRyLmNvbG9yKTsNCisgICAgICAgIGVsc2UNCisgICAgICAgICAgICBzZ3JhcGhbZG90dHkua2V5cy5kY29sb3JdID0gZ3QuZ2V0Y29sb3IgKGd0LnZpZXdzLCAnYmxhY2snKTsNCisgICAgICAgIGlmIChhdHRyLnN0eWxlID09ICdmaWxsZWQnKSB7DQorICAgICAgICAgICAgaWYgKGF0dHIuZmlsbGNvbG9yKQ0KKyAgICAgICAgICAgICAgICBzZ3JhcGhbZG90dHkua2V5cy5iY29sb3JdID0gZ3QuZ2V0Y29sb3IgKA0KKyAgICAgICAgICAgICAgICAgICAgZ3Qudmlld3MsIGF0dHIuZmlsbGNvbG9yDQorICAgICAgICAgICAgICAgICk7DQorICAgICAgICAgICAgZWxzZSBpZiAoYXR0ci5jb2xvcikNCisgICAgICAgICAgICAgICAgc2dyYXBoW2RvdHR5LmtleXMuYmNvbG9yXSA9IGd0LmdldGNvbG9yIChndC52aWV3cywgYXR0ci5jb2xvcik7DQorICAgICAgICAgICAgZWxzZQ0KKyAgICAgICAgICAgICAgICBzZ3JhcGhbZG90dHkua2V5cy5iY29sb3JdID0gZ3QuZ2V0Y29sb3IgKGd0LnZpZXdzLCAnbGlnaHRncmV5Jyk7DQorICAgICAgICB9DQorICAgIH0NCisgICAgZm9yIChuaWQgaW4gZ3JhcGgubm9kZWRpY3QpIHsNCisgICAgICAgIG5vZGUgPSBncmFwaC5ub2Rlc1tncmFwaC5ub2RlZGljdFtuaWRdXTsNCisgICAgICAgIGF0dHIgPSBub2RlLmF0dHI7DQorICAgICAgICBpZiAoZG90dHkuZm9udG1hcFthdHRyLmZvbnRuYW1lXSkNCisgICAgICAgICAgICBub2RlW2RvdHR5LmtleXMuZm5hbWVdID0gZG90dHkuZm9udG1hcFthdHRyLmZvbnRuYW1lXTsNCisgICAgICAgIGVsc2UNCisgICAgICAgICAgICBub2RlW2RvdHR5LmtleXMuZm5hbWVdID0gYXR0ci5mb250bmFtZTsNCisgICAgICAgIG5vZGVbZG90dHkua2V5cy5mc2l6ZV0gPSBzdG9uIChhdHRyLmZvbnRzaXplKTsNCisgICAgICAgIG5vZGVbZG90dHkua2V5cy5mY29sb3JdID0gZ3QuZ2V0Y29sb3IgKGd0LnZpZXdzLCBhdHRyLmZvbnRjb2xvcik7DQorICAgICAgICBpZiAoYXR0ci5jb2xvcikNCisgICAgICAgICAgICBub2RlW2RvdHR5LmtleXMuZGNvbG9yXSA9IGd0LmdldGNvbG9yIChndC52aWV3cywgYXR0ci5jb2xvcik7DQorICAgICAgICBlbHNlDQorICAgICAgICAgICAgbm9kZVtkb3R0eS5rZXlzLmRjb2xvcl0gPSBndC5nZXRjb2xvciAoZ3Qudmlld3MsICdibGFjaycpOw0KKyAgICAgICAgaWYgKGF0dHIuc3R5bGUgPT0gJ2ZpbGxlZCcpIHsNCisgICAgICAgICAgICBpZiAoYXR0ci5maWxsY29sb3IpDQorICAgICAgICAgICAgICAgIG5vZGVbZG90dHkua2V5cy5iY29sb3JdID0gZ3QuZ2V0Y29sb3IgKA0KKyAgICAgICAgICAgICAgICAgICAgZ3Qudmlld3MsIGF0dHIuZmlsbGNvbG9yDQorICAgICAgICAgICAgICAgICk7DQorICAgICAgICAgICAgZWxzZSBpZiAoYXR0ci5jb2xvcikNCisgICAgICAgICAgICAgICAgbm9kZVtkb3R0eS5rZXlzLmJjb2xvcl0gPSBndC5nZXRjb2xvciAoZ3Qudmlld3MsIGF0dHIuY29sb3IpOw0KKyAgICAgICAgICAgIGVsc2UNCisgICAgICAgICAgICAgICAgbm9kZVtkb3R0eS5rZXlzLmJjb2xvcl0gPSBndC5nZXRjb2xvciAoZ3Qudmlld3MsICdsaWdodGdyZXknKTsNCisgICAgICAgIH0NCisgICAgfQ0KKyAgICBmb3IgKGVpZCBpbiBncmFwaC5lZGdlcykgew0KKyAgICAgICAgZWRnZSA9IGdyYXBoLmVkZ2VzW2VpZF07DQorICAgICAgICBhdHRyID0gZWRnZS5hdHRyOw0KKyAgICAgICAgaWYgKGRvdHR5LmZvbnRtYXBbYXR0ci5mb250bmFtZV0pDQorICAgICAgICAgICAgZWRnZVtkb3R0eS5rZXlzLmZuYW1lXSA9IGRvdHR5LmZvbnRtYXBbYXR0ci5mb250bmFtZV07DQorICAgICAgICBlbHNlDQorICAgICAgICAgICAgZWRnZVtkb3R0eS5rZXlzLmZuYW1lXSA9IGF0dHIuZm9udG5hbWU7DQorICAgICAgICBlZGdlW2RvdHR5LmtleXMuZnNpemVdID0gc3RvbiAoYXR0ci5mb250c2l6ZSk7DQorICAgICAgICBlZGdlW2RvdHR5LmtleXMuZmNvbG9yXSA9IGd0LmdldGNvbG9yIChndC52aWV3cywgYXR0ci5mb250Y29sb3IpOw0KKyAgICAgICAgaWYgKGF0dHIuY29sb3IpDQorICAgICAgICAgICAgZWRnZVtkb3R0eS5rZXlzLmRjb2xvcl0gPSBndC5nZXRjb2xvciAoZ3Qudmlld3MsIGF0dHIuY29sb3IpOw0KKyAgICAgICAgZWxzZQ0KKyAgICAgICAgICAgIGVkZ2VbZG90dHkua2V5cy5kY29sb3JdID0gZ3QuZ2V0Y29sb3IgKGd0LnZpZXdzLCAnYmxhY2snKTsNCisgICAgfQ0KK307DQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvaGVscGVycy9HcmFwaHZpejIuMjYuMy9saWIvbGVmdHkvZG90dHlfZWRpdC5sZWZ0eSBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL2hlbHBlcnMvR3JhcGh2aXoyLjI2LjMvbGliL2xlZnR5L2RvdHR5X2VkaXQubGVmdHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDMwZGIxNQotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL2hlbHBlcnMvR3JhcGh2aXoyLjI2LjMvbGliL2xlZnR5L2RvdHR5X2VkaXQubGVmdHkKQEAgLTAsMCArMSw1OTMgQEAKKyMNCisjIGRvdHR5X2VkaXQ6IGVkaXRpbmcgZnVuY3Rpb25zIGFuZCBkYXRhIHN0cnVjdHVyZXMNCisjDQorZG90dHkucHJvdG9ndC5nZXRub2Rlc2J5YXR0ciA9IGZ1bmN0aW9uIChndCwga2V5LCB2YWwpIHsNCisgICAgbG9jYWwgbmlkLCBub2RlLCBubGlzdDsNCisNCisgICAgbmxpc3QgPSBbXTsNCisgICAgZm9yIChuaWQgaW4gZ3QuZ3JhcGgubm9kZXMpIHsNCisgICAgICAgIG5vZGUgPSBndC5ncmFwaC5ub2Rlc1tuaWRdOw0KKyAgICAgICAgaWYgKG5vZGUuYXR0cltrZXldID09IHZhbCkNCisgICAgICAgICAgICBubGlzdFtuaWRdID0gbm9kZTsNCisgICAgfQ0KKyAgICByZXR1cm4gbmxpc3Q7DQorfTsNCitkb3R0eS5wcm90b2d0LnJlYWNoYWJsZW5vZGVzID0gZnVuY3Rpb24gKGd0LCBub2RlKSB7DQorICAgIGxvY2FsIG5saXN0LCBzdGFjaywgZWlkLCBlZGdlLCBpOw0KKw0KKyAgICBzdGFja1swXSA9IG5vZGU7DQorICAgIGkgPSAxOw0KKyAgICB3aGlsZSAoaSA+IDApIHsNCisgICAgICAgIG5vZGUgPSBzdGFja1tpIC0gMV07DQorICAgICAgICBpID0gaSAtIDE7DQorICAgICAgICBubGlzdFtub2RlLm5pZF0gPSBub2RlOw0KKyAgICAgICAgZm9yIChlaWQgaW4gbm9kZS5lZGdlcykgew0KKyAgICAgICAgICAgIGVkZ2UgPSBub2RlLmVkZ2VzW2VpZF07DQorICAgICAgICAgICAgaWYgKH5ubGlzdFtlZGdlLmhlYWQubmlkXSkgew0KKyAgICAgICAgICAgICAgICBubGlzdFtlZGdlLmhlYWQubmlkXSA9IGVkZ2UuaGVhZDsNCisgICAgICAgICAgICAgICAgc3RhY2tbaV0gPSBlZGdlLmhlYWQ7DQorICAgICAgICAgICAgICAgIGkgPSBpICsgMTsNCisgICAgICAgICAgICB9DQorICAgICAgICB9DQorICAgIH0NCisgICAgcmV0dXJuIG5saXN0Ow0KK307DQorZG90dHkucHJvdG9ndC5tZXJnZWdyYXBoID0gZnVuY3Rpb24gKGd0LCBncmFwaCwgc2hvdykgew0KKyAgICBsb2NhbCBuYW1laWQsIG9ub2RlLCBwb3MsIHNpemUsIGVpZCwgZWlkMiwgdG5vZGUsIGhub2RlLCBvZWRnZTsNCisNCisgICAgaWYgKH5ndC5ub3VuZG8pDQorICAgICAgICBndC5zdGFydGFkZDJ1bmRvIChndCk7DQorICAgIGZvciAobmFtZWlkIGluIGdyYXBoLm5vZGVkaWN0KSB7DQorICAgICAgICBwb3MgPSBudWxsOw0KKyAgICAgICAgc2l6ZSA9IG51bGw7DQorICAgICAgICBvbm9kZSA9IGdyYXBoLm5vZGVzW2dyYXBoLm5vZGVkaWN0W25hbWVpZF1dOw0KKyAgICAgICAgaWYgKG9ub2RlLnBvcykNCisgICAgICAgICAgICBwb3MgPSBub2RlLnBvczsNCisgICAgICAgIGlmIChvbm9kZS5zaXplKQ0KKyAgICAgICAgICAgIHNpemUgPSBub2RlLnNpemU7DQorICAgICAgICBpZiAofihndC5ncmFwaC5ub2RlZGljdFtuYW1laWRdID49IDApKSB7DQorICAgICAgICAgICAgcG9zID0gbnVsbDsNCisgICAgICAgICAgICBzaXplID0gbnVsbDsNCisgICAgICAgICAgICBpZiAob25vZGUucG9zKQ0KKyAgICAgICAgICAgICAgICBwb3MgPSBub2RlLnBvczsNCisgICAgICAgICAgICBpZiAob25vZGUuc2l6ZSkNCisgICAgICAgICAgICAgICAgc2l6ZSA9IG5vZGUuc2l6ZTsNCisgICAgICAgICAgICBndC5pbnNlcnRub2RlIChndCwgcG9zLCBzaXplLCBuYW1laWQsIG9ub2RlLmF0dHIsIHNob3cpOw0KKyAgICAgICAgfQ0KKyAgICB9DQorICAgIGZvciAoZWlkIGluIGdyYXBoLmVkZ2VzKSB7DQorICAgICAgICBvZWRnZSA9IGdyYXBoLmVkZ2VzW2VpZF07DQorICAgICAgICB0bm9kZSA9IGd0LmdyYXBoLm5vZGVzW2d0LmdyYXBoLm5vZGVkaWN0W29lZGdlLnRhaWwubmFtZV1dOw0KKyAgICAgICAgaG5vZGUgPSBndC5ncmFwaC5ub2Rlc1tndC5ncmFwaC5ub2RlZGljdFtvZWRnZS5oZWFkLm5hbWVdXTsNCisgICAgICAgIGZvciAoZWlkMiBpbiB0bm9kZS5lZGdlcykNCisgICAgICAgICAgICBpZiAoDQorICAgICAgICAgICAgICAgIHRub2RlLmVkZ2VzW2VpZDJdLnRhaWwgPT0gdG5vZGUgJg0KKyAgICAgICAgICAgICAgICB0bm9kZS5lZGdlc1tlaWQyXS5oZWFkID09IGhub2RlDQorICAgICAgICAgICAgKSB7DQorICAgICAgICAgICAgICAgIG9lZGdlID0gbnVsbDsNCisgICAgICAgICAgICAgICAgYnJlYWs7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgaWYgKG9lZGdlKQ0KKyAgICAgICAgICAgIGd0Lmluc2VydGVkZ2UgKGd0LCB0bm9kZSwgbnVsbCwgaG5vZGUsIG51bGwsIG9lZGdlLmF0dHIsIHNob3cpOw0KKyAgICB9DQorICAgIGlmICh+Z3Qubm91bmRvKQ0KKyAgICAgICAgZ3QuZW5kYWRkMnVuZG8gKGd0KTsNCit9Ow0KK2RvdHR5LnByb3RvZ3QuaW5zZXJ0c2dyYXBoID0gZnVuY3Rpb24gKGd0LCBuYW1lLCBhdHRyLCBzaG93KSB7DQorICAgIGxvY2FsIGdpZCwgc2dyYXBoLCBhaWQ7DQorDQorICAgIGlmICh+Z3QpDQorICAgICAgICByZXR1cm4gbnVsbDsNCisgICAgZ2lkID0gZ3QuZ3JhcGgubWF4Z2lkOw0KKyAgICBpZiAofm5hbWUpIHsNCisgICAgICAgIHdoaWxlIChndC5ncmFwaC5ncmFwaGRpY3RbKG5hbWUgPSBjb25jYXQgKCdnJywgZ2lkKSldID49IDApDQorICAgICAgICAgICAgZ2lkID0gZ2lkICsgMTsNCisgICAgfSBlbHNlIGlmIChndC5ncmFwaC5ncmFwaGRpY3RbbmFtZV0pIHsNCisgICAgICAgIGRvdHR5Lm1lc3NhZ2UgKDAsIGNvbmNhdCAoJ2dyYXBoOiAnLCBuYW1lLCAnIGV4aXN0cycpKTsNCisgICAgICAgIHJldHVybiBudWxsOw0KKyAgICB9DQorICAgIGd0LmdyYXBoLmdyYXBoZGljdFtuYW1lXSA9IGdpZDsNCisgICAgZ3QuZ3JhcGgubWF4Z2lkID0gZ2lkICsgMTsNCisgICAgZ3QuZ3JhcGguZ3JhcGhzW2dpZF0gPSBbDQorICAgICAgICBkb3R0eS5rZXlzLmdpZCAgID0gZ2lkOw0KKyAgICAgICAgZG90dHkua2V5cy5uYW1lICA9IG5hbWU7DQorICAgICAgICBkb3R0eS5rZXlzLmdhdHRyID0gY29weSAoZ3QuZ3JhcGguZ3JhcGhhdHRyKTsNCisgICAgICAgIGRvdHR5LmtleXMubmF0dHIgPSBjb3B5IChndC5ncmFwaC5ub2RlYXR0cik7DQorICAgICAgICBkb3R0eS5rZXlzLmVhdHRyID0gY29weSAoZ3QuZ3JhcGguZWRnZWF0dHIpOw0KKyAgICBdOw0KKyAgICBzZ3JhcGggPSBndC5ncmFwaC5ncmFwaHNbZ2lkXTsNCisgICAgaWYgKH5hdHRyKQ0KKyAgICAgICAgYXR0ciA9IFtdOw0KKyAgICBpZiAofmF0dHIubGFiZWwpDQorICAgICAgICBhdHRyLmxhYmVsID0gJ1xOJzsNCisgICAgZm9yIChhaWQgaW4gYXR0cikNCisgICAgICAgIHNncmFwaC5ncmFwaGF0dHJbYWlkXSA9IGF0dHJbYWlkXTsNCisgICAgZ3QudW5wYWNrc2dyYXBoYXR0ciAoZ3QsIHNncmFwaCk7DQorICAgIGlmIChzaG93KQ0KKyAgICAgICAgZ3QuZHJhd3NncmFwaCAoZ3QsIGd0LnZpZXdzLCBzZ3JhcGgpOw0KKyAgICByZXR1cm4gc2dyYXBoOw0KK307DQorZG90dHkucHJvdG9ndC5yZW1vdmVzZ3JhcGggPSBmdW5jdGlvbiAoZ3QsIHNncmFwaCkgew0KKyAgICBndC51bmRyYXdzZ3JhcGggKGd0LCBndC52aWV3cywgc2dyYXBoKTsNCisgICAgcmVtb3ZlIChzZ3JhcGgubmFtZSwgZ3QuZ3JhcGguZ3JhcGhkaWN0KTsNCisgICAgcmVtb3ZlIChzZ3JhcGguZ2lkLCBndC5ncmFwaC5ncmFwaHMpOw0KK307DQorZG90dHkucHJvdG9ndC5pbnNlcnRub2RlID0gZnVuY3Rpb24gKGd0LCBwb3MsIHNpemUsIG5hbWUsIGF0dHIsIHNob3cpIHsNCisgICAgbG9jYWwgbmlkLCBub2RlLCBhaWQ7DQorDQorICAgIG5pZCA9IGd0LmdyYXBoLm1heG5pZDsNCisgICAgaWYgKH5uYW1lKSB7DQorICAgICAgICB3aGlsZSAoZ3QuZ3JhcGgubm9kZWRpY3RbKG5hbWUgPSBjb25jYXQgKCduJywgbmlkKSldID49IDApDQorICAgICAgICAgICAgbmlkID0gbmlkICsgMTsNCisgICAgfSBlbHNlIGlmIChndC5ncmFwaC5ub2RlZGljdFtuYW1lXSA+PSAwKSB7DQorICAgICAgICBkb3R0eS5tZXNzYWdlICgwLCBjb25jYXQgKCdub2RlOiAnLCBuYW1lLCAnIGV4aXN0cycpKTsNCisgICAgICAgIHJldHVybiBudWxsOw0KKyAgICB9DQorICAgIGd0LmdyYXBoLm5vZGVkaWN0W25hbWVdID0gbmlkOw0KKyAgICBndC5ncmFwaC5tYXhuaWQgPSBuaWQgKyAxOw0KKyAgICBndC5ncmFwaC5ub2Rlc1tuaWRdID0gWw0KKyAgICAgICAgZG90dHkua2V5cy5uaWQgICA9IG5pZDsNCisgICAgICAgIGRvdHR5LmtleXMubmFtZSAgPSBuYW1lOw0KKyAgICAgICAgZG90dHkua2V5cy5hdHRyICA9IGNvcHkgKGd0LmdyYXBoLm5vZGVhdHRyKTsNCisgICAgICAgIGRvdHR5LmtleXMuZWRnZXMgPSBbXTsNCisgICAgXTsNCisgICAgbm9kZSA9IGd0LmdyYXBoLm5vZGVzW25pZF07DQorICAgIGlmICh+YXR0cikNCisgICAgICAgIGF0dHIgPSBbXTsNCisgICAgaWYgKH5hdHRyLmxhYmVsKQ0KKyAgICAgICAgYXR0ci5sYWJlbCA9ICdcTic7DQorICAgIGZvciAoYWlkIGluIGF0dHIpDQorICAgICAgICBub2RlLmF0dHJbYWlkXSA9IGF0dHJbYWlkXTsNCisgICAgZ3QudW5wYWNrbm9kZWF0dHIgKGd0LCBub2RlKTsNCisgICAgaWYgKH5wb3MpDQorICAgICAgICBwb3MgPSBbJ3gnID0gMTA7ICd5JyA9IDEwO107DQorICAgIG5vZGVbZG90dHkua2V5cy5wb3NdID0gY29weSAocG9zKTsNCisgICAgaWYgKH5zaXplKQ0KKyAgICAgICAgc2l6ZSA9IFsneCcgPSBzdHJsZW4gKGF0dHIubGFiZWwpICogMzA7ICd5JyA9IDMwO107DQorICAgIGlmIChzaXplLnggPT0gMCkNCisgICAgICAgIHNpemUueCA9IDMwOw0KKyAgICBub2RlW2RvdHR5LmtleXMuc2l6ZV0gPSBjb3B5IChzaXplKTsNCisgICAgbm9kZVtkb3R0eS5rZXlzLnJlY3RdID0gWw0KKyAgICAgICAgMCA9IFsneCcgPSBwb3MueCAtIHNpemUueCAvIDI7ICd5JyA9IHBvcy55IC0gc2l6ZS55IC8gMjtdOw0KKyAgICAgICAgMSA9IFsneCcgPSBwb3MueCArIHNpemUueCAvIDI7ICd5JyA9IHBvcy55ICsgc2l6ZS55IC8gMjtdOw0KKyAgICBdOw0KKyAgICBub2RlLmRyYXdzID0gZ3Quc2ltcGxlbm9kZWRyYXcgKG5vZGUsIHBvcywgc2l6ZSk7DQorICAgIGlmIChzaG93KQ0KKyAgICAgICAgZ3QuZHJhd25vZGUgKGd0LCBndC52aWV3cywgbm9kZSk7DQorICAgIGlmICh+Z3Qubm91bmRvKSB7DQorICAgICAgICBndC5zdGFydGFkZDJ1bmRvIChndCk7DQorICAgICAgICBndC5jdXJydW5kby5pbnNlcnRlZC5ub2Rlc1tuaWRdID0gbm9kZTsNCisgICAgICAgIGd0LmVuZGFkZDJ1bmRvIChndCk7DQorICAgIH0NCisgICAgcmV0dXJuIG5vZGU7DQorfTsNCitkb3R0eS5wcm90b2d0LnJlbW92ZW5vZGUgPSBmdW5jdGlvbiAoZ3QsIG5vZGUpIHsNCisgICAgbG9jYWwgZWlkLCBsaXN0LCBlZGdlLCBnaWQ7DQorDQorICAgIGlmICh+Z3Qubm91bmRvKQ0KKyAgICAgICAgZ3Quc3RhcnRhZGQydW5kbyAoZ3QpOw0KKyAgICBmb3IgKGVpZCBpbiBub2RlLmVkZ2VzKQ0KKyAgICAgICAgbGlzdFtlaWRdID0gbm9kZS5lZGdlc1tlaWRdOw0KKyAgICBmb3IgKGVpZCBpbiBsaXN0KQ0KKyAgICAgICAgZ3QucmVtb3ZlZWRnZSAoZ3QsIGxpc3RbZWlkXSk7DQorICAgIGd0LnVuZHJhd25vZGUgKGd0LCBndC52aWV3cywgbm9kZSk7DQorICAgIGZvciAoZ2lkIGluIGd0LmdyYXBoLmdyYXBocykNCisgICAgICAgIHJlbW92ZSAobm9kZS5uaWQsIGd0LmdyYXBoLmdyYXBoc1tnaWRdLm5vZGVzKTsNCisgICAgcmVtb3ZlIChub2RlLm5hbWUsIGd0LmdyYXBoLm5vZGVkaWN0KTsNCisgICAgcmVtb3ZlIChub2RlLm5pZCwgZ3QuZ3JhcGgubm9kZXMpOw0KKyAgICBpZiAofmd0Lm5vdW5kbykgew0KKyAgICAgICAgZ3QuY3VycnVuZG8uZGVsZXRlZC5ub2Rlc1tub2RlLm5pZF0gPSBub2RlOw0KKyAgICAgICAgZ3QuZW5kYWRkMnVuZG8gKGd0KTsNCisgICAgfQ0KK307DQorZG90dHkucHJvdG9ndC5pbnNlcnRlZGdlID0gZnVuY3Rpb24gKA0KKyAgICBndCwgbm9kZWEsIHBvcnRhLCBub2RlYiwgcG9ydGIsIGF0dHIsIHNob3cNCispIHsNCisgICAgbG9jYWwgZWlkLCBlZGdlLCBhaWQsIHRwb3J0LCBocG9ydDsNCisNCisgICAgaWYgKH5ub2RlYSB8IH5ub2RlYikNCisgICAgICAgIHJldHVybiBudWxsOw0KKyAgICBpZiAocG9ydGEpDQorICAgICAgICB0cG9ydCA9IHBvcnRhOw0KKyAgICBpZiAocG9ydGIpDQorICAgICAgICBocG9ydCA9IHBvcnRiOw0KKyAgICBlaWQgPSBndC5ncmFwaC5tYXhlaWQ7DQorICAgIHdoaWxlIChndC5ncmFwaC5lZGdlc1tlaWRdKQ0KKyAgICAgICAgZWlkID0gZWlkICsgMTsNCisgICAgZ3QuZ3JhcGgubWF4ZWlkID0gZWlkICsgMTsNCisgICAgZ3QuZ3JhcGguZWRnZXNbZWlkXSA9IFsNCisgICAgICAgIGRvdHR5LmtleXMuZWlkICAgPSBlaWQ7DQorICAgICAgICBkb3R0eS5rZXlzLnRhaWwgID0gbm9kZWE7DQorICAgICAgICBkb3R0eS5rZXlzLnRwb3J0ID0gcG9ydGE7DQorICAgICAgICBkb3R0eS5rZXlzLmhlYWQgID0gbm9kZWI7DQorICAgICAgICBkb3R0eS5rZXlzLmhwb3J0ID0gcG9ydGI7DQorICAgICAgICBkb3R0eS5rZXlzLmF0dHIgID0gY29weSAoZ3QuZ3JhcGguZWRnZWF0dHIpOw0KKyAgICBdOw0KKyAgICBlZGdlID0gZ3QuZ3JhcGguZWRnZXNbZWlkXTsNCisgICAgaWYgKH5hdHRyKQ0KKyAgICAgICAgYXR0ciA9IFtdOw0KKyAgICBmb3IgKGFpZCBpbiBhdHRyKQ0KKyAgICAgICAgZWRnZS5hdHRyW2FpZF0gPSBhdHRyW2FpZF07DQorICAgIG5vZGVhLmVkZ2VzW2VpZF0gPSBlZGdlOw0KKyAgICBub2RlYi5lZGdlc1tlaWRdID0gZWRnZTsNCisgICAgZ3QudW5wYWNrZWRnZWF0dHIgKGd0LCBlZGdlKTsNCisgICAgZWRnZS5kcmF3cyA9IGd0LnNpbXBsZWVkZ2VkcmF3IChlZGdlLCBub2RlYS5wb3MsIG5vZGViLnBvcyk7DQorICAgIGlmIChzaG93KQ0KKyAgICAgICAgZ3QuZHJhd2VkZ2UgKGd0LCBndC52aWV3cywgZWRnZSk7DQorICAgIGlmICh+Z3Qubm91bmRvKSB7DQorICAgICAgICBndC5zdGFydGFkZDJ1bmRvIChndCk7DQorICAgICAgICBndC5jdXJydW5kby5pbnNlcnRlZC5lZGdlc1tlaWRdID0gZWRnZTsNCisgICAgICAgIGd0LmVuZGFkZDJ1bmRvIChndCk7DQorICAgIH0NCisgICAgcmV0dXJuIGVkZ2U7DQorfTsNCitkb3R0eS5wcm90b2d0LnJlbW92ZWVkZ2UgPSBmdW5jdGlvbiAoZ3QsIGVkZ2UpIHsNCisgICAgbG9jYWwgaGVhZCwgdGFpbDsNCisNCisgICAgaWYgKH5ndC5ub3VuZG8pDQorICAgICAgICBndC5zdGFydGFkZDJ1bmRvIChndCk7DQorICAgIGlmIChlZGdlLmhlYWQuYXR0ci5zdXBwb3J0ID09IDEpDQorICAgICAgICBoZWFkID0gZWRnZS5oZWFkOw0KKyAgICBpZiAoZWRnZS50YWlsLmF0dHIuc3VwcG9ydCA9PSAxKQ0KKyAgICAgICAgaWYgKGhlYWQgfj0gZWRnZS50YWlsKQ0KKyAgICAgICAgICAgIHRhaWwgPSBlZGdlLnRhaWw7DQorICAgIGd0LnVuZHJhd2VkZ2UgKGd0LCBndC52aWV3cywgZWRnZSk7DQorICAgIHJlbW92ZSAoZWRnZS5laWQsIGVkZ2UuaGVhZC5lZGdlcyk7DQorICAgIHJlbW92ZSAoZWRnZS5laWQsIGVkZ2UudGFpbC5lZGdlcyk7DQorICAgIHJlbW92ZSAoZWRnZS5laWQsIGd0LmdyYXBoLmVkZ2VzKTsNCisgICAgaWYgKGhlYWQgJiB0YWJsZXNpemUgKGhlYWQuZWRnZXMpID09IDApDQorICAgICAgICBndC5yZW1vdmVub2RlIChndCwgaGVhZCk7DQorICAgIGlmICh0YWlsICYgdGFibGVzaXplICh0YWlsLmVkZ2VzKSA9PSAwKQ0KKyAgICAgICAgZ3QucmVtb3Zlbm9kZSAoZ3QsIHRhaWwpOw0KKyAgICBpZiAofmd0Lm5vdW5kbykgew0KKyAgICAgICAgZ3QuY3VycnVuZG8uZGVsZXRlZC5lZGdlc1tlZGdlLmVpZF0gPSBlZGdlOw0KKyAgICAgICAgZ3QuZW5kYWRkMnVuZG8gKGd0KTsNCisgICAgfQ0KK307DQorZG90dHkucHJvdG9ndC5zd2FwZWRnZWlkcyA9IGZ1bmN0aW9uIChndCwgZWRnZTEsIGVkZ2UyKSB7DQorICAgIGxvY2FsIGVpZDEsIGVpZDI7DQorDQorICAgIGlmIChlZGdlMS5laWQgPT0gZWRnZTIuZWlkKQ0KKyAgICAgICAgcmV0dXJuOw0KKyAgICBpZiAofmd0Lm5vdW5kbykNCisgICAgICAgIGd0LnN0YXJ0YWRkMnVuZG8gKGd0KTsNCisgICAgZWlkMSA9IGVkZ2UxLmVpZDsNCisgICAgZWlkMiA9IGVkZ2UyLmVpZDsNCisgICAgZ3QuZ3JhcGguZWRnZXNbZWlkMV0gPSBlZGdlMjsNCisgICAgZ3QuZ3JhcGguZWRnZXNbZWlkMl0gPSBlZGdlMTsNCisgICAgcmVtb3ZlIChlaWQxLCBlZGdlMS50YWlsLmVkZ2VzKTsNCisgICAgcmVtb3ZlIChlaWQxLCBlZGdlMS5oZWFkLmVkZ2VzKTsNCisgICAgcmVtb3ZlIChlaWQyLCBlZGdlMi50YWlsLmVkZ2VzKTsNCisgICAgcmVtb3ZlIChlaWQyLCBlZGdlMi5oZWFkLmVkZ2VzKTsNCisgICAgZWRnZTEudGFpbC5lZGdlc1tlaWQyXSA9IGVkZ2UxOw0KKyAgICBlZGdlMS5oZWFkLmVkZ2VzW2VpZDJdID0gZWRnZTE7DQorICAgIGVkZ2UyLnRhaWwuZWRnZXNbZWlkMV0gPSBlZGdlMjsNCisgICAgZWRnZTIuaGVhZC5lZGdlc1tlaWQxXSA9IGVkZ2UyOw0KKyAgICBlZGdlMS5laWQgPSBlaWQyOw0KKyAgICBlZGdlMi5laWQgPSBlaWQxOw0KKyAgICBpZiAofmd0Lm5vdW5kbykgew0KKyAgICAgICAgZ3QuY3VycnVuZG8uc3dhcHBlZC5lZGdlc1tlaWQxXSA9IGVkZ2UxOw0KKyAgICAgICAgZ3QuY3VycnVuZG8uc3dhcHBlZC5lZGdlc1tlaWQyXSA9IGVkZ2UyOw0KKyAgICAgICAgZ3QuZW5kYWRkMnVuZG8gKGd0KTsNCisgICAgfQ0KK307DQorZG90dHkucHJvdG9ndC5yZW1vdmVzdWJ0cmVlID0gZnVuY3Rpb24gKGd0LCBvYmopIHsNCisgICAgbG9jYWwgbmxpc3QsIG5vZGUsIGhlYWQsIG5pZCwgZWRnZSwgZWlkOw0KKw0KKyAgICBpZiAofmd0Lm5vdW5kbykNCisgICAgICAgIGd0LnN0YXJ0YWRkMnVuZG8gKGd0KTsNCisgICAgaWYgKG9iai5uaWQgPj0gMCkNCisgICAgICAgIG5vZGUgPSBvYmo7DQorICAgIGVsc2UgaWYgKG9iai5laWQgPj0gMCkgew0KKyAgICAgICAgbm9kZSA9IG9iai5oZWFkOw0KKyAgICAgICAgZ3QucmVtb3ZlZWRnZSAoZ3QsIG9iaik7DQorICAgICAgICBpZiAofmd0LmdyYXBoLm5vZGVzW25vZGUubmlkXSkgew0KKyAgICAgICAgICAgIGlmICh+Z3Qubm91bmRvKQ0KKyAgICAgICAgICAgICAgICBndC5lbmRhZGQydW5kbyAoZ3QpOw0KKyAgICAgICAgICAgIHJldHVybjsNCisgICAgICAgIH0NCisgICAgICAgIGZvciAoZWlkIGluIG5vZGUuZWRnZXMpIHsNCisgICAgICAgICAgICBlZGdlID0gbm9kZS5lZGdlc1tlaWRdOw0KKyAgICAgICAgICAgIGlmIChlZGdlLmhlYWQgPT0gbm9kZSAmIGVkZ2UudGFpbCB+PSBub2RlKSB7DQorICAgICAgICAgICAgICAgIGlmICh+Z3Qubm91bmRvKQ0KKyAgICAgICAgICAgICAgICAgICAgZ3QuZW5kYWRkMnVuZG8gKGd0KTsNCisgICAgICAgICAgICAgICAgcmV0dXJuOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgIH0NCisgICAgfSBlbHNlIHsNCisgICAgICAgIGRvdHR5Lm1lc3NhZ2UgKDAsICdiYWQgb2JqZWN0IHR5cGUgaW4gZ3QucmVtb3Zlc3VidHJlZScpOw0KKyAgICAgICAgcmV0dXJuOw0KKyAgICB9DQorICAgIG5saXN0ID0gW25vZGUubmlkID0gbm9kZTtdOw0KKyAgICB3aGlsZSAobm9kZSkgew0KKyAgICAgICAgZm9yIChlaWQgaW4gbm9kZS5lZGdlcykgew0KKyAgICAgICAgICAgIGhlYWQgPSBub2RlLmVkZ2VzW2VpZF0uaGVhZDsNCisgICAgICAgICAgICBpZiAoaGVhZCB+PSBub2RlKQ0KKyAgICAgICAgICAgICAgICBubGlzdFtoZWFkLm5pZF0gPSBoZWFkOw0KKyAgICAgICAgfQ0KKyAgICAgICAgZ3QucmVtb3Zlbm9kZSAoZ3QsIG5vZGUpOw0KKyAgICAgICAgcmVtb3ZlIChub2RlLm5pZCwgbmxpc3QpOw0KKyAgICAgICAgbm9kZSA9IG51bGw7DQorICAgICAgICBmb3IgKG5pZCBpbiBubGlzdCkgew0KKyAgICAgICAgICAgIG5vZGUgPSBubGlzdFtuaWRdOw0KKyAgICAgICAgICAgIGZvciAoZWlkIGluIG5vZGUuZWRnZXMpIHsNCisgICAgICAgICAgICAgICAgZWRnZSA9IG5vZGUuZWRnZXNbZWlkXTsNCisgICAgICAgICAgICAgICAgaWYgKGVkZ2UuaGVhZCA9PSBub2RlICYgZWRnZS50YWlsIH49IG5vZGUpIHsNCisgICAgICAgICAgICAgICAgICAgIG5vZGUgPSBudWxsOw0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQorICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICB9DQorICAgICAgICAgICAgaWYgKG5vZGUpDQorICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgfQ0KKyAgICB9DQorICAgIGlmICh+Z3Qubm91bmRvKQ0KKyAgICAgICAgZ3QuZW5kYWRkMnVuZG8gKGd0KTsNCit9Ow0KK2RvdHR5LnByb3RvZ3QucmVtb3Zlbm9kZXNieWF0dHIgPSBmdW5jdGlvbiAoZ3QsIGtleSwgdmFsKSB7DQorICAgIGxvY2FsIG5saXN0LCBuaWQ7DQorDQorICAgIGlmICh+Z3Qubm91bmRvKQ0KKyAgICAgICAgZ3Quc3RhcnRhZGQydW5kbyAoZ3QpOw0KKyAgICBubGlzdCA9IGd0LmdldG5vZGVzYnlhdHRyIChndCwga2V5LCB2YWwpOw0KKyAgICBmb3IgKG5pZCBpbiBubGlzdCkNCisgICAgICAgIGd0LnJlbW92ZW5vZGUgKGd0LCBubGlzdFtuaWRdKTsNCisgICAgaWYgKH5ndC5ub3VuZG8pDQorICAgICAgICBndC5lbmRhZGQydW5kbyAoZ3QpOw0KK307DQorZG90dHkucHJvdG9ndC5yZW1vdmVzdWJ0cmVlc2J5YXR0ciA9IGZ1bmN0aW9uIChndCwga2V5LCB2YWwpIHsNCisgICAgbG9jYWwgbmxpc3QsIG5pZDsNCisNCisgICAgaWYgKH5ndC5ub3VuZG8pDQorICAgICAgICBndC5zdGFydGFkZDJ1bmRvIChndCk7DQorICAgIG5saXN0ID0gZ3QuZ2V0bm9kZXNieWF0dHIgKGd0LCBrZXksIHZhbCk7DQorICAgIGZvciAobmlkIGluIG5saXN0KQ0KKyAgICAgICAgaWYgKGd0LmdyYXBoLm5vZGVzW25pZF0pDQorICAgICAgICAgICAgZ3QucmVtb3Zlc3VidHJlZSAoZ3QsIG5saXN0W25pZF0pOw0KKyAgICBpZiAofmd0Lm5vdW5kbykNCisgICAgICAgIGd0LmVuZGFkZDJ1bmRvIChndCk7DQorfTsNCitkb3R0eS5wcm90b2d0Lmdyb3Vwbm9kZXMgPSBmdW5jdGlvbiAoDQorICAgIGd0LCBubGlzdCwgZ25vZGUsIHBvcywgc2l6ZSwgYXR0ciwga2VlcG11bHRpLCBzaG93DQorKSB7DQorICAgIGxvY2FsIG5pZCwgbm9kZSwgZWxpc3QsIGVpZCwgZWRnZSwgbm9kZWEsIG5vZGViLCBpbmxpc3QsIG91dGxpc3Q7DQorDQorICAgIGlmICh+bmxpc3QgfCB0YWJsZXNpemUgKG5saXN0KSA9PSAwKQ0KKyAgICAgICAgcmV0dXJuOw0KKyAgICBpZiAoZ25vZGUuYXR0ci5zdXBwb3J0KSB7DQorICAgICAgICBkb3R0eS5tZXNzYWdlICgwLCAnY2Fubm90IGdyb3VwIG5vZGVzIGluIGEgc3VwcG9ydCBub2RlJyk7DQorICAgICAgICByZXR1cm47DQorICAgIH0NCisgICAgaWYgKH5ndC5ub3VuZG8pDQorICAgICAgICBndC5zdGFydGFkZDJ1bmRvIChndCk7DQorICAgIGlmICh+Z25vZGUpDQorICAgICAgICBnbm9kZSA9IGd0Lmluc2VydG5vZGUgKGd0LCBwb3MsIHNpemUsIG51bGwsIGF0dHIsIHNob3cpOw0KKyAgICBpbmxpc3QgPSBbXTsNCisgICAgb3V0bGlzdCA9IFtdOw0KKyAgICBmb3IgKG5pZCBpbiBubGlzdCkgew0KKyAgICAgICAgaWYgKChub2RlID0gbmxpc3RbbmlkXSkgPT0gZ25vZGUpDQorICAgICAgICAgICAgY29udGludWU7DQorICAgICAgICBlbGlzdCA9IFtdOw0KKyAgICAgICAgZm9yIChlaWQgaW4gbm9kZS5lZGdlcykNCisgICAgICAgICAgICBlbGlzdFtlaWRdID0gbm9kZS5lZGdlc1tlaWRdOw0KKyAgICAgICAgZm9yIChlaWQgaW4gZWxpc3QpIHsNCisgICAgICAgICAgICBlZGdlID0gZWxpc3RbZWlkXTsNCisgICAgICAgICAgICBpZiAoZWRnZS5oZWFkID09IG5vZGUpIHsNCisgICAgICAgICAgICAgICAgbm9kZWEgPSBlZGdlLnRhaWw7DQorICAgICAgICAgICAgICAgIG5vZGViID0gZ25vZGU7DQorICAgICAgICAgICAgICAgIGlmICh+a2VlcG11bHRpKSB7DQorICAgICAgICAgICAgICAgICAgICBpZiAoaW5saXN0W25vZGVhLm5pZF0pDQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7DQorICAgICAgICAgICAgICAgICAgICBpbmxpc3Rbbm9kZWEubmlkXSA9IG5vZGVhOw0KKyAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGVhID09IGdub2RlKQ0KKyAgICAgICAgICAgICAgICAgICAgICAgIG91dGxpc3Rbbm9kZWEubmlkXSA9IG5vZGVhOw0KKyAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgfSBlbHNlIHsNCisgICAgICAgICAgICAgICAgbm9kZWEgPSBnbm9kZTsNCisgICAgICAgICAgICAgICAgbm9kZWIgPSBlZGdlLmhlYWQ7DQorICAgICAgICAgICAgICAgIGlmICh+a2VlcG11bHRpKSB7DQorICAgICAgICAgICAgICAgICAgICBpZiAob3V0bGlzdFtub2RlYi5uaWRdKQ0KKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0KKyAgICAgICAgICAgICAgICAgICAgb3V0bGlzdFtub2RlYi5uaWRdID0gbm9kZWI7DQorICAgICAgICAgICAgICAgICAgICBpZiAobm9kZWIgPT0gZ25vZGUpDQorICAgICAgICAgICAgICAgICAgICAgICAgaW5saXN0W25vZGViLm5pZF0gPSBub2RlYjsNCisgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIH0NCisgICAgICAgICAgICBndC5pbnNlcnRlZGdlIChndCwgbm9kZWEsIG51bGwsIG5vZGViLCBudWxsLCBlZGdlLmF0dHIsIHNob3cpOw0KKyAgICAgICAgfQ0KKyAgICAgICAgZ3QucmVtb3Zlbm9kZSAoZ3QsIG5vZGUpOw0KKyAgICB9DQorICAgIGlmICh+Z3Qubm91bmRvKQ0KKyAgICAgICAgZ3QuZW5kYWRkMnVuZG8gKGd0KTsNCisgICAgcmV0dXJuIGdub2RlOw0KK307DQorZG90dHkucHJvdG9ndC5ncm91cG5vZGVzYnlhdHRyID0gZnVuY3Rpb24gKA0KKyAgICBndCwga2V5LCB2YWwsIGF0dHIsIGtlZXBtdWx0aSwgc2hvdw0KKykgew0KKyAgICBsb2NhbCBubGlzdCwgbmlkLCBwb3MsIHNpemU7DQorDQorICAgIHBvcyA9IG51bGw7DQorICAgIHNpemUgPSBudWxsOw0KKyAgICBubGlzdCA9IGd0LmdldG5vZGVzYnlhdHRyIChndCwga2V5LCB2YWwpOw0KKyAgICBpZiAoc2hvdykNCisgICAgICAgIGZvciAobmlkIGluIG5saXN0KSB7DQorICAgICAgICAgICAgcG9zID0gbmxpc3RbbmlkXS5wb3M7DQorICAgICAgICAgICAgc2l6ZSA9IG5saXN0W25pZF0uc2l6ZTsNCisgICAgICAgICAgICBicmVhazsNCisgICAgICAgIH0NCisgICAgcmV0dXJuIGd0Lmdyb3Vwbm9kZXMgKGd0LCBubGlzdCwgbnVsbCwgcG9zLCBzaXplLCBhdHRyLCBrZWVwbXVsdGksIHNob3cpOw0KK307DQorZG90dHkucHJvdG9ndC5jdXQgPSBmdW5jdGlvbiAoZ3QsIG9iaiwgc2V0LCBtb2RlLCBvcCkgew0KKyAgICBsb2NhbCBjbGlwZ3QsIGxpc3QsIG5vZGUsIG5pZCwgZWRnZSwgZWlkLCBjbGlwbm9kZTsNCisNCisgICAgY2xpcGd0ID0gZG90dHkuY2xpcGd0Ow0KKyAgICBjbGlwZ3QuZ3JhcGggPSBjb3B5IChkb3R0eS5wcm90b2d0LmdyYXBoKTsNCisgICAgaWYgKG9iai5laWQgPj0gMCkgeyAjIGl0J3MgYW4gZWRnZQ0KKyAgICAgICAgbGlzdC5lZGdlc1tvYmouZWlkXSA9IG9iajsNCisgICAgICAgIG5vZGUgPSBvYmouaGVhZDsNCisgICAgfSBlbHNlIGlmIChvYmoubmlkID49IDApIHsNCisgICAgICAgIGxpc3Qubm9kZXNbb2JqLm5pZF0gPSBvYmo7DQorICAgICAgICBub2RlID0gb2JqOw0KKyAgICAgICAgZm9yIChlaWQgaW4gbm9kZS5lZGdlcykNCisgICAgICAgICAgICBsaXN0LmVkZ2VzW2VpZF0gPSBub2RlLmVkZ2VzW2VpZF07DQorICAgIH0gZWxzZSB7DQorICAgICAgICBkb3R0eS5tZXNzYWdlICgwLCAndW5rbm93biBvYmplY3QgdHlwZSBpbiBndC5jdXQnKTsNCisgICAgICAgIHJldHVybjsNCisgICAgfQ0KKyAgICBpZiAoc2V0ID09ICdyZWFjaGFibGUnKSB7DQorICAgICAgICBsaXN0Lm5vZGVzID0gZ3QucmVhY2hhYmxlbm9kZXMgKGd0LCBub2RlKTsNCisgICAgICAgIGZvciAobmlkIGluIGxpc3Qubm9kZXMpIHsNCisgICAgICAgICAgICBub2RlID0gbGlzdC5ub2Rlc1tuaWRdOw0KKyAgICAgICAgICAgIGZvciAoZWlkIGluIG5vZGUuZWRnZXMpIHsNCisgICAgICAgICAgICAgICAgZWRnZSA9IG5vZGUuZWRnZXNbZWlkXTsNCisgICAgICAgICAgICAgICAgbGlzdC5lZGdlc1tlZGdlLmVpZF0gPSBlZGdlOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgIH0NCisgICAgfQ0KKyAgICBpZiAobW9kZSA9PSAnc3VwcG9ydCcpIHsNCisgICAgICAgIGZvciAoZWlkIGluIGxpc3QuZWRnZXMpIHsNCisgICAgICAgICAgICBlZGdlID0gbGlzdC5lZGdlc1tlaWRdOw0KKyAgICAgICAgICAgIGlmICh+bGlzdC5ub2Rlc1tlZGdlLnRhaWwubmlkXSkgew0KKyAgICAgICAgICAgICAgICBsaXN0LnN1cHBvcnRbZWRnZS50YWlsLm5pZF0gPSBlZGdlLnRhaWw7DQorICAgICAgICAgICAgICAgIGxpc3Qubm9kZXNbZWRnZS50YWlsLm5pZF0gPSBlZGdlLnRhaWw7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIGlmICh+bGlzdC5ub2Rlc1tlZGdlLmhlYWQubmlkXSkgew0KKyAgICAgICAgICAgICAgICBsaXN0LnN1cHBvcnRbZWRnZS5oZWFkLm5pZF0gPSBlZGdlLmhlYWQ7DQorICAgICAgICAgICAgICAgIGxpc3Qubm9kZXNbZWRnZS5oZWFkLm5pZF0gPSBlZGdlLmhlYWQ7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgfQ0KKyAgICB9DQorICAgIGZvciAobmlkID0gMDsgbmlkIDwgZ3QuZ3JhcGgubWF4bmlkOyBuaWQgPSBuaWQgKyAxKSB7DQorICAgICAgICBpZiAofmxpc3Qubm9kZXNbbmlkXSkNCisgICAgICAgICAgICBjb250aW51ZTsNCisgICAgICAgIG5vZGUgPSBsaXN0Lm5vZGVzW25pZF07DQorICAgICAgICBjbGlwbm9kZSA9IGd0Lmluc2VydG5vZGUgKGNsaXBndCwgbnVsbCwgbnVsbCwgbm9kZS5uYW1lLCBub2RlLmF0dHIsIDApOw0KKyAgICAgICAgaWYgKGxpc3Quc3VwcG9ydFtuaWRdKQ0KKyAgICAgICAgICAgIGNsaXBub2RlLnN1cHBvcnQgPSAxOw0KKyAgICAgICAgbGlzdC5jbGlwbm9kZXNbbmlkXSA9IGNsaXBub2RlOw0KKyAgICB9DQorICAgIGZvciAoZWlkID0gMDsgZWlkIDwgZ3QuZ3JhcGgubWF4ZWlkOyBlaWQgPSBlaWQgKyAxKSB7DQorICAgICAgICBpZiAofmxpc3QuZWRnZXNbZWlkXSkNCisgICAgICAgICAgICBjb250aW51ZTsNCisgICAgICAgIGVkZ2UgPSBsaXN0LmVkZ2VzW2VpZF07DQorICAgICAgICBpZiAofmxpc3Qubm9kZXNbZWRnZS50YWlsLm5pZF0gfCB+bGlzdC5ub2Rlc1tlZGdlLmhlYWQubmlkXSkNCisgICAgICAgICAgICBjb250aW51ZTsNCisgICAgICAgIGd0Lmluc2VydGVkZ2UgKA0KKyAgICAgICAgICAgIGNsaXBndCwgbGlzdC5jbGlwbm9kZXNbZWRnZS50YWlsLm5pZF0sIG51bGwsDQorICAgICAgICAgICAgbGlzdC5jbGlwbm9kZXNbZWRnZS5oZWFkLm5pZF0sIG51bGwsIGVkZ2UuYXR0ciwgMA0KKyAgICAgICAgKTsNCisgICAgfQ0KKyAgICBpZiAob3Agfj0gJ2N1dCcpDQorICAgICAgICByZXR1cm47DQorICAgIGlmICh+Z3Qubm91bmRvKQ0KKyAgICAgICAgZ3Quc3RhcnRhZGQydW5kbyAoZ3QpOw0KKyAgICBmb3IgKGVpZCBpbiBsaXN0LmVkZ2VzKQ0KKyAgICAgICAgZ3QucmVtb3ZlZWRnZSAoZ3QsIGxpc3QuZWRnZXNbZWlkXSk7DQorICAgIGZvciAobmlkIGluIGxpc3Qubm9kZXMpDQorICAgICAgICBpZiAofmxpc3Quc3VwcG9ydFtuaWRdICYgZ3QuZ3JhcGgubm9kZXNbbmlkXSkNCisgICAgICAgICAgICBndC5yZW1vdmVub2RlIChndCwgbGlzdC5ub2Rlc1tuaWRdKTsNCisgICAgaWYgKH5ndC5ub3VuZG8pDQorICAgICAgICBndC5lbmRhZGQydW5kbyAoZ3QpOw0KK307DQorZG90dHkucHJvdG9ndC5wYXN0ZSA9IGZ1bmN0aW9uIChndCwgcG9zLCBzaG93KSB7DQorICAgIGxvY2FsIGNsaXBndCwgb2Zmc2V0LCBjZW50ZXIsIG5pZCwgbm9kZSwgZWlkLCBlZGdlLCBub2RlczsNCisNCisgICAgaWYgKH5ndC5ub3VuZG8pDQorICAgICAgICBndC5zdGFydGFkZDJ1bmRvIChndCk7DQorICAgIGNsaXBndCA9IGRvdHR5LmNsaXBndDsNCisgICAgaWYgKGNsaXBndC5ncmFwaC5yZWN0KQ0KKyAgICAgICAgY2VudGVyID0gWw0KKyAgICAgICAgICAgICd4JyA9IChjbGlwZ3QuZ3JhcGgucmVjdFsxXS54ICsgY2xpcGd0LmdyYXBoLnJlY3RbMF0ueCkgLyAyOw0KKyAgICAgICAgICAgICd5JyA9IChjbGlwZ3QuZ3JhcGgucmVjdFsxXS55ICsgY2xpcGd0LmdyYXBoLnJlY3RbMF0ueSkgLyAyOw0KKyAgICAgICAgXTsNCisgICAgZWxzZQ0KKyAgICAgICAgY2VudGVyID0gcG9zOw0KKyAgICBvZmZzZXQgPSBbDQorICAgICAgICAneCcgPSBjZW50ZXIueCAtIHBvcy54Ow0KKyAgICAgICAgJ3knID0gY2VudGVyLnkgLSBwb3MueTsNCisgICAgXTsNCisgICAgZm9yIChuaWQgPSAwOyBjbGlwZ3QuZ3JhcGgubm9kZXNbbmlkXTsgbmlkID0gbmlkICsgMSkgew0KKyAgICAgICAgbm9kZSA9IGNsaXBndC5ncmFwaC5ub2Rlc1tuaWRdOw0KKyAgICAgICAgaWYgKG5vZGUuYXR0ci5sYWJlbCA9PSAnXE4nIHwgfm5vZGUuYXR0ci5sYWJlbCkNCisgICAgICAgICAgICBub2RlLmF0dHIubGFiZWwgPSBub2RlLm5hbWU7DQorICAgICAgICBpZiAobm9kZS5zdXBwb3J0ID09IDEpDQorICAgICAgICAgICAgbm9kZXNbbmlkXSA9IGd0Lmluc2VydG5vZGUgKGd0LCBbDQorICAgICAgICAgICAgICAgICd4JyA9IG5vZGUucG9zLnggLSBvZmZzZXQueDsNCisgICAgICAgICAgICAgICAgJ3knID0gbm9kZS5wb3MueSAtIG9mZnNldC55Ow0KKyAgICAgICAgICAgIF0sIG51bGwsIG51bGwsIFsNCisgICAgICAgICAgICAgICAgJ3N1cHBvcnQnID0gMTsgJ3NoYXBlJyA9ICdjaXJjbGUnOw0KKyAgICAgICAgICAgICAgICAnbGFiZWwnID0gJyc7ICd3aWR0aCcgPSAwLjI7DQorICAgICAgICAgICAgXSwgc2hvdyk7DQorICAgICAgICBlbHNlDQorICAgICAgICAgICAgbm9kZXNbbmlkXSA9IGd0Lmluc2VydG5vZGUgKGd0LCBbDQorICAgICAgICAgICAgICAgICd4JyA9IG5vZGUucG9zLnggLSBvZmZzZXQueDsNCisgICAgICAgICAgICAgICAgJ3knID0gbm9kZS5wb3MueSAtIG9mZnNldC55Ow0KKyAgICAgICAgICAgIF0sIG5vZGUuc2l6ZSwgbnVsbCwgbm9kZS5hdHRyLCBzaG93KTsNCisgICAgfQ0KKyAgICBmb3IgKGVpZCA9IDA7IGNsaXBndC5ncmFwaC5lZGdlc1tlaWRdOyBlaWQgPSBlaWQgKyAxKSB7DQorICAgICAgICBlZGdlID0gY2xpcGd0LmdyYXBoLmVkZ2VzW2VpZF07DQorICAgICAgICBndC5pbnNlcnRlZGdlICgNCisgICAgICAgICAgICBndCwgbm9kZXNbZWRnZS50YWlsLm5pZF0sIG51bGwsDQorICAgICAgICAgICAgbm9kZXNbZWRnZS5oZWFkLm5pZF0sIG51bGwsIGVkZ2UuYXR0ciwgc2hvdw0KKyAgICAgICAgKTsNCisgICAgfQ0KKyAgICBpZiAofmd0Lm5vdW5kbykNCisgICAgICAgIGd0LmVuZGFkZDJ1bmRvIChndCk7DQorfTsNCitkb3R0eS5wcm90b2d0LnN0YXJ0YWRkMnVuZG8gPSBmdW5jdGlvbiAoZ3QpIHsNCisgICAgaWYgKH5ndC51bmRvYXJyYXkubGV2ZWwpDQorICAgICAgICBndC5jdXJydW5kbyA9ICgNCisgICAgICAgICAgICBndC51bmRvYXJyYXkuZW50cmllc1t0YWJsZXNpemUgKGd0LnVuZG9hcnJheS5lbnRyaWVzKV0gPSBbXQ0KKyAgICAgICAgKTsNCisgICAgZ3QudW5kb2FycmF5LmxldmVsID0gZ3QudW5kb2FycmF5LmxldmVsICsgMTsNCit9Ow0KK2RvdHR5LnByb3RvZ3QuZW5kYWRkMnVuZG8gPSBmdW5jdGlvbiAoZ3QpIHsNCisgICAgZ3QudW5kb2FycmF5LmxldmVsID0gZ3QudW5kb2FycmF5LmxldmVsIC0gMTsNCit9Ow0KK2RvdHR5LnByb3RvZ3QudW5kbyA9IGZ1bmN0aW9uIChndCwgc2hvdykgew0KKyAgICBsb2NhbCBlbnRyeSwgbiwgZWlkLCBlZGdlLCBuaWQsIG5vZGUsIGVkZ2VzOw0KKw0KKyAgICBpZiAoKG4gPSB0YWJsZXNpemUgKGd0LnVuZG9hcnJheS5lbnRyaWVzKSkgPCAxKQ0KKyAgICAgICAgcmV0dXJuOw0KKyAgICBlbnRyeSA9IGd0LnVuZG9hcnJheS5lbnRyaWVzW24gLSAxXTsNCisgICAgcmVtb3ZlIChuIC0gMSwgZ3QudW5kb2FycmF5LmVudHJpZXMpOw0KKyAgICByZW1vdmUgKCdjdXJydW5kbycsIGd0KTsNCisgICAgZ3Qubm91bmRvID0gMTsNCisgICAgIyBoYXJkd2lyZSBub2RlcyBhbmQgZWRnZXMgYmFjayB3aXRoIHRoZSBzYW1lIGlkJ3MgYXMgdGhlIG9yaWdpbmFscw0KKyAgICBmb3IgKG5pZCBpbiBlbnRyeS5kZWxldGVkLm5vZGVzKSB7DQorICAgICAgICBub2RlID0gZW50cnkuZGVsZXRlZC5ub2Rlc1tuaWRdOw0KKyAgICAgICAgZ3QuZ3JhcGgubm9kZWRpY3Rbbm9kZS5uYW1lXSA9IG5vZGUubmlkOw0KKyAgICAgICAgZ3QuZ3JhcGgubm9kZXNbbm9kZS5uaWRdID0gbm9kZTsNCisgICAgICAgIG5vZGUuZWRnZXMgPSBbXTsNCisgICAgICAgIGlmIChzaG93KQ0KKyAgICAgICAgICAgIGd0LmRyYXdub2RlIChndCwgZ3Qudmlld3MsIG5vZGUpOw0KKyAgICB9DQorICAgIGZvciAoZWlkIGluIGVudHJ5LmRlbGV0ZWQuZWRnZXMpIHsNCisgICAgICAgIGVkZ2UgPSBlbnRyeS5kZWxldGVkLmVkZ2VzW2VpZF07DQorICAgICAgICBndC5ncmFwaC5lZGdlc1tlZGdlLmVpZF0gPSBlZGdlOw0KKyAgICAgICAgZWRnZS5oZWFkLmVkZ2VzW2VkZ2UuZWlkXSA9IGVkZ2U7DQorICAgICAgICBlZGdlLnRhaWwuZWRnZXNbZWRnZS5laWRdID0gZWRnZTsNCisgICAgICAgIGlmIChzaG93KQ0KKyAgICAgICAgICAgIGd0LmRyYXdlZGdlIChndCwgZ3Qudmlld3MsIGVkZ2UpOw0KKyAgICB9DQorICAgIGlmIChlbnRyeS5zd2FwcGVkLmVkZ2VzKSB7DQorICAgICAgICBpZiAodGFibGVzaXplIChlbnRyeS5zd2FwcGVkLmVkZ2VzKSA9PSAyKSB7DQorICAgICAgICAgICAgbiA9IDA7DQorICAgICAgICAgICAgZm9yIChlaWQgaW4gZW50cnkuc3dhcHBlZC5lZGdlcykgew0KKyAgICAgICAgICAgICAgICBlZGdlc1tuXSA9IGVudHJ5LnN3YXBwZWQuZWRnZXNbZWlkXTsNCisgICAgICAgICAgICAgICAgbiA9IG4gKyAxOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgICAgICBndC5zd2FwZWRnZWlkcyAoZ3QsIGVkZ2VzWzBdLCBlZGdlc1sxXSk7DQorICAgICAgICB9IGVsc2UNCisgICAgICAgICAgICBkb3R0eS5tZXNzYWdlICgwLCAnY2Fubm90IGhhbmRsZSB1bmRvaW5nIHN3YXAgb2YgPiAyIGVkZ2VzJyk7DQorICAgIH0NCisgICAgZm9yIChlaWQgaW4gZW50cnkuaW5zZXJ0ZWQuZWRnZXMpIHsNCisgICAgICAgIGVkZ2UgPSBlbnRyeS5pbnNlcnRlZC5lZGdlc1tlaWRdOw0KKyAgICAgICAgZ3QucmVtb3ZlZWRnZSAoZ3QsIGVkZ2UpOw0KKyAgICB9DQorICAgIGZvciAobmlkIGluIGVudHJ5Lmluc2VydGVkLm5vZGVzKSB7DQorICAgICAgICBub2RlID0gZW50cnkuaW5zZXJ0ZWQubm9kZXNbbmlkXTsNCisgICAgICAgIGd0LnJlbW92ZW5vZGUgKGd0LCBub2RlKTsNCisgICAgfQ0KKyAgICBndC5ub3VuZG8gPSAwOw0KK307DQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvaGVscGVycy9HcmFwaHZpejIuMjYuMy9saWIvbGVmdHkvZG90dHlfbGF5b3V0LmxlZnR5IGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvaGVscGVycy9HcmFwaHZpejIuMjYuMy9saWIvbGVmdHkvZG90dHlfbGF5b3V0LmxlZnR5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyODdhZDkKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS9oZWxwZXJzL0dyYXBodml6Mi4yNi4zL2xpYi9sZWZ0eS9kb3R0eV9sYXlvdXQubGVmdHkKQEAgLTAsMCArMSw0NDkgQEAKKyMNCisjIGRvdHR5X2xheW91dDogbGF5b3V0IGZ1bmN0aW9ucyBhbmQgZGF0YSBzdHJ1Y3R1cmVzDQorIw0KK2RvdHR5LmdyYWJsc2VydmVyID0gZnVuY3Rpb24gKGxzZXJ2ZXIpIHsNCisgICAgbG9jYWwgZmQ7DQorDQorICAgIGlmICh+ZG90dHkubHNlcnZlcnNbbHNlcnZlcl0gfCB0YWJsZXNpemUgKGRvdHR5LmxzZXJ2ZXJzW2xzZXJ2ZXJdKSA9PSAwKSB7DQorICAgICAgICBpZiAofigoZmQgPSBvcGVuaW8gKCdwaXBlJywgbHNlcnZlciwgJ3IrJywgJyVlIC1UeGRvdCcpKSA+PSAwKSkgew0KKyAgICAgICAgICAgIGRvdHR5Lm1lc3NhZ2UgKDAsIGNvbmNhdCAoJ2Nhbm5vdCBzdGFydCAnLCBsc2VydmVyKSk7DQorICAgICAgICAgICAgcmV0dXJuIG51bGw7DQorICAgICAgICB9DQorICAgICAgICBkb3R0eS5sc2VydmVyc1tsc2VydmVyXVtmZF0gPSBbDQorICAgICAgICAgICAgJ2ZkJyA9IGZkOw0KKyAgICAgICAgICAgICdjb3VudCcgPSAwOw0KKyAgICAgICAgXTsNCisgICAgfQ0KKyAgICBmb3IgKGZkIGluIGRvdHR5LmxzZXJ2ZXJzW2xzZXJ2ZXJdKSB7DQorICAgICAgICBkb3R0eS5sc2VydmVyc1tsc2VydmVyXVtmZF0uY291bnQgPSBkb3R0eS5sc2VydmVyc1sNCisgICAgICAgICAgICBsc2VydmVyDQorICAgICAgICBdW2ZkXS5jb3VudCArIDE7DQorICAgICAgICBkb3R0eS5sc2VydmVycy5pbnVzZVtmZF0gPSBkb3R0eS5sc2VydmVyc1tsc2VydmVyXVtmZF07DQorICAgICAgICByZW1vdmUgKGZkLCBkb3R0eS5sc2VydmVyc1tsc2VydmVyXSk7DQorICAgICAgICByZXR1cm4gZmQ7DQorICAgIH0NCit9Ow0KK2RvdHR5LnJlbGVhc2Vsc2VydmVyID0gZnVuY3Rpb24gKGxzZXJ2ZXIsIGZkLCBzdGF0ZSkgew0KKyAgICBpZiAoc3RhdGUgPT0gJ2JhZCcgfCBkb3R0eS5sc2VydmVycy5pbnVzZVtmZF0uY291bnQgPiA0MCkgew0KKyAgICAgICAgY2xvc2VpbyAoZmQsICdraWxsJyk7DQorICAgICAgICByZW1vdmUgKGZkLCBkb3R0eS5sc2VydmVycy5pbnVzZSk7DQorICAgICAgICByZXR1cm47DQorICAgIH0NCisgICAgZG90dHkubHNlcnZlcnNbbHNlcnZlcl1bZmRdID0gZG90dHkubHNlcnZlcnMuaW51c2VbZmRdOw0KKyAgICByZW1vdmUgKGZkLCBkb3R0eS5sc2VydmVycy5pbnVzZSk7DQorfTsNCitkb3R0eS5wcm90b2d0LnN0YXJ0bGF5b3V0ID0gZnVuY3Rpb24gKGd0KSB7DQorICAgIGxvY2FsIGxwdCwgZmQ7DQorDQorICAgIGlmIChndC5sYXlvdXRwZW5kaW5nID49IDEpIHsNCisgICAgICAgIGxwdCA9IGRvdHR5LmxheW91dHBlbmRpbmdbZ3QuZ3RpZF07DQorICAgICAgICBpZiAoZ3QubGF5b3V0bW9kZSA9PSAnYXN5bmMnKQ0KKyAgICAgICAgICAgIG1vbml0b3IgKCdvZmYnLCBscHQuZmQpOw0KKyAgICAgICAgZG90dHkucmVsZWFzZWxzZXJ2ZXIgKGd0LmxzZXJ2ZXIsIGxwdC5mZCwgJ2JhZCcpOw0KKyAgICAgICAgcmVtb3ZlIChndC5ndGlkLCBkb3R0eS5sYXlvdXRwZW5kaW5nKTsNCisgICAgICAgIGd0LmxheW91dHBlbmRpbmcgPSAwOw0KKyAgICAgICAgZ3QuaGF2ZWlucHV0ID0gMDsNCisgICAgICAgIGRvdHR5LnBvcGJ1c3kgKGd0LCBndC52aWV3cyk7DQorICAgIH0NCisgICAgaWYgKH4oKGZkID0gZG90dHkuZ3JhYmxzZXJ2ZXIgKGd0LmxzZXJ2ZXIpKSA+PSAwKSkNCisgICAgICAgIHJldHVybiBudWxsOw0KKyAgICBkb3R0eS5wdXNoYnVzeSAoZ3QsIGd0LnZpZXdzKTsNCisgICAgd3JpdGVncmFwaCAoZmQsIGd0LmdyYXBoLCAxKTsNCisgICAgZ3QubGF5b3V0cGVuZGluZyA9IDE7DQorICAgIGRvdHR5LmxheW91dHBlbmRpbmdbZ3QuZ3RpZF0gPSBbDQorICAgICAgICAnZmQnID0gZmQ7DQorICAgICAgICAnZ3RpZCcgPSBndC5ndGlkOw0KKyAgICBdOw0KKyAgICBpZiAoZ3QubGF5b3V0bW9kZSA9PSAnYXN5bmMnKQ0KKyAgICAgICAgbW9uaXRvciAoJ29uJywgZmQpOw0KKyAgICByZXR1cm4gMTsNCit9Ow0KK2RvdHR5LnByb3RvZ3QuZmluaXNobGF5b3V0ID0gZnVuY3Rpb24gKGd0KSB7DQorICAgIGxvY2FsIGdyYXBoLCBscHQsIGZkOw0KKw0KKyAgICBpZiAofihndC5sYXlvdXRwZW5kaW5nID49IDEpKSB7DQorICAgICAgICBkb3R0eS5tZXNzYWdlICgwLCBjb25jYXQgKCdubyBsYXlvdXQgcGVuZGluZyBmb3IgZ3JhcGggJywgZ3QuZ3RpZCkpOw0KKyAgICAgICAgcmV0dXJuIG51bGw7DQorICAgIH0NCisgICAgbHB0ID0gZG90dHkubGF5b3V0cGVuZGluZ1tndC5ndGlkXTsNCisgICAgaWYgKH4oZ3JhcGggPSByZWFkZ3JhcGggKGxwdC5mZCkpKSB7DQorICAgICAgICBpZiAoZ3QubGF5b3V0bW9kZSA9PSAnYXN5bmMnKQ0KKyAgICAgICAgICAgIG1vbml0b3IgKCdvZmYnLCBscHQuZmQpOw0KKyAgICAgICAgZG90dHkucmVsZWFzZWxzZXJ2ZXIgKGd0LmxzZXJ2ZXIsIGxwdC5mZCwgJ2JhZCcpOw0KKyAgICAgICAgaWYgKGd0LmxheW91dHBlbmRpbmcgPT0gMikgew0KKyAgICAgICAgICAgIGRvdHR5Lm1lc3NhZ2UgKDAsIGNvbmNhdCAoJ2dpdmluZyB1cCBvbiAnLCBndC5sc2VydmVyKSk7DQorICAgICAgICAgICAgaWYgKChmZCA9IG9wZW5pbyAoJ2ZpbGUnLCAnZG90dHlidWcuZG90JywgJ3crJykpID49IDApIHsNCisgICAgICAgICAgICAgICAgd3JpdGVncmFwaCAoZmQsIGd0LmdyYXBoLCAwKTsNCisgICAgICAgICAgICAgICAgY2xvc2VpbyAoZmQpOw0KKyAgICAgICAgICAgICAgICBkb3R0eS5tZXNzYWdlICgNCisgICAgICAgICAgICAgICAgICAgIDAsIGNvbmNhdCAoJ2dyYXBoIHRoYXQgY2F1c2VzICcsIGd0LmxzZXJ2ZXIpDQorICAgICAgICAgICAgICAgICk7DQorICAgICAgICAgICAgICAgIGRvdHR5Lm1lc3NhZ2UgKA0KKyAgICAgICAgICAgICAgICAgICAgMCwgJ3RvIGZhaWwgaGFzIGJlZW4gc2F2ZWQgaW4gZmlsZSBkb3R0eWJ1Zy5kb3QnDQorICAgICAgICAgICAgICAgICk7DQorICAgICAgICAgICAgICAgIGRvdHR5Lm1lc3NhZ2UgKA0KKyAgICAgICAgICAgICAgICAgICAgMCwgJ3BsZWFzZSBmaWxsIG91dCBhIGJ1ZyByZXBvcnQgYXQnDQorICAgICAgICAgICAgICAgICk7DQorICAgICAgICAgICAgICAgIGRvdHR5Lm1lc3NhZ2UgKA0KKyAgICAgICAgICAgICAgICAgICAgMCwgJ2h0dHA6Ly93d3cuZ3JhcGh2aXoub3JnL2J1Z3MvYnVnZm9ybS5odG1sJw0KKyAgICAgICAgICAgICAgICApOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgICAgICBkb3R0eS5wb3BidXN5IChndCwgZ3Qudmlld3MpOw0KKyAgICAgICAgICAgIGd0LmxheW91dHBlbmRpbmcgPSAwOw0KKyAgICAgICAgICAgIGd0LmhhdmVpbnB1dCA9IDA7DQorICAgICAgICAgICAgcmV0dXJuIDE7DQorICAgICAgICB9DQorICAgICAgICBkb3R0eS5tZXNzYWdlICgNCisgICAgICAgICAgICAxLCBjb25jYXQgKCdsb3N0IGNvbm5lY3Rpb24gdG8gJywgZ3QubHNlcnZlciwgJywgcmVzdGFydGluZy4uLicpDQorICAgICAgICApOw0KKyAgICAgICAgbHB0LmZkID0gZG90dHkuZ3JhYmxzZXJ2ZXIgKGd0LmxzZXJ2ZXIpOw0KKyAgICAgICAgd3JpdGVncmFwaCAobHB0LmZkLCBndC5ncmFwaCwgMSk7DQorICAgICAgICBpZiAoZ3QubGF5b3V0bW9kZSA9PSAnYXN5bmMnKQ0KKyAgICAgICAgICAgIG1vbml0b3IgKCdvbicsIGxwdC5mZCk7DQorICAgICAgICBndC5sYXlvdXRwZW5kaW5nID0gMjsNCisgICAgICAgIGd0LmhhdmVpbnB1dCA9IDA7DQorICAgICAgICByZXR1cm4gbnVsbDsNCisgICAgfQ0KKyAgICBpZiAoZ3QubGF5b3V0bW9kZSA9PSAnYXN5bmMnKQ0KKyAgICAgICAgbW9uaXRvciAoJ29mZicsIGxwdC5mZCk7DQorICAgIGRvdHR5LnJlbGVhc2Vsc2VydmVyIChndC5sc2VydmVyLCBscHQuZmQsIG51bGwpOw0KKyAgICByZW1vdmUgKGd0Lmd0aWQsIGRvdHR5LmxheW91dHBlbmRpbmcpOw0KKyAgICBndC5sYXlvdXRwZW5kaW5nID0gMDsNCisgICAgZ3QuaGF2ZWlucHV0ID0gMDsNCisgICAgZ3QudW5wYWNrbGF5b3V0IChndCwgZ3JhcGgpOw0KKyAgICBkb3R0eS5wb3BidXN5IChndCwgZ3Qudmlld3MpOw0KKyAgICByZXR1cm4gMTsNCit9Ow0KK2RvdHR5LnByb3RvZ3QuY2FuY2VsbGF5b3V0ID0gZnVuY3Rpb24gKGd0KSB7DQorICAgIGxvY2FsIGxwdCwgdmlkOw0KKw0KKyAgICBpZiAoZ3QubGF5b3V0cGVuZGluZyA+PSAxKSB7DQorICAgICAgICBscHQgPSBkb3R0eS5sYXlvdXRwZW5kaW5nW2d0Lmd0aWRdOw0KKyAgICAgICAgaWYgKGd0LmxheW91dG1vZGUgPT0gJ2FzeW5jJykNCisgICAgICAgICAgICBtb25pdG9yICgnb2ZmJywgbHB0LmZkKTsNCisgICAgICAgIGRvdHR5LnJlbGVhc2Vsc2VydmVyIChndC5sc2VydmVyLCBscHQuZmQsICdiYWQnKTsNCisgICAgICAgIHJlbW92ZSAoZ3QuZ3RpZCwgZG90dHkubGF5b3V0cGVuZGluZyk7DQorICAgICAgICBndC5sYXlvdXRwZW5kaW5nID0gMDsNCisgICAgICAgIGd0LmhhdmVpbnB1dCA9IDA7DQorICAgICAgICBkb3R0eS5wb3BidXN5IChndCwgZ3Qudmlld3MpOw0KKyAgICB9DQorfTsNCitkb3R0eS5wcm90b2d0LnVucGFja2xheW91dCA9IGZ1bmN0aW9uIChndCwgZ3JhcGgyKSB7DQorICAgIGxvY2FsIGdyYXBoLCBnaWQsIHNncmFwaDEsIHNncmFwaDIsIG5pZCwgbm9kZTEsIG5vZGUyLCBlaWQsIGVkZ2UxLCBlZGdlMjsNCisgICAgbG9jYWwgdDEsIHBvcywgc2l6ZTsNCisNCisgICAgZ3JhcGggPSBndC5ncmFwaDsNCisgICAgZm9yIChnaWQgaW4gZ3JhcGgyLmdyYXBoZGljdCkgew0KKyAgICAgICAgaWYgKH4oc2dyYXBoMSA9IGdyYXBoLmdyYXBoc1tncmFwaC5ncmFwaGRpY3RbZ2lkXV0pKQ0KKyAgICAgICAgICAgIGNvbnRpbnVlOw0KKyAgICAgICAgc2dyYXBoMiA9IGdyYXBoMi5ncmFwaHNbZ3JhcGgyLmdyYXBoZGljdFtnaWRdXTsNCisgICAgICAgIHNncmFwaDEuZHJhd3MgPSBndC51bnBhY2thbGxkcmF3IChndCwgc2dyYXBoMi5ncmFwaGF0dHIpOw0KKyAgICB9DQorICAgIGZvciAobmlkIGluIGdyYXBoMi5ub2RlZGljdCkgew0KKyAgICAgICAgaWYgKH4obm9kZTEgPSBncmFwaC5ub2Rlc1tncmFwaC5ub2RlZGljdFtuaWRdXSkpDQorICAgICAgICAgICAgY29udGludWU7DQorICAgICAgICBub2RlMiA9IGdyYXBoMi5ub2Rlc1tncmFwaDIubm9kZWRpY3RbbmlkXV07DQorICAgICAgICBub2RlMS5kcmF3cyA9IGd0LnVucGFja2FsbGRyYXcgKGd0LCBub2RlMi5hdHRyKTsNCisgICAgICAgIHQxID0gc3BsaXQgKG5vZGUyLmF0dHIucG9zLCAnLCcpOw0KKyAgICAgICAgcG9zID0gWyd4JyA9IHN0b24gKHQxWzBdKTsgJ3knID0gc3RvbiAodDFbMV0pO107DQorICAgICAgICBzaXplID0gWw0KKyAgICAgICAgICAgICd4JyA9IHN0b24gKG5vZGUyLmF0dHIud2lkdGgpICogNzI7DQorICAgICAgICAgICAgJ3knID0gc3RvbiAobm9kZTIuYXR0ci5oZWlnaHQpICogNzI7DQorICAgICAgICBdOw0KKyAgICAgICAgbm9kZTEucG9zID0gcG9zOw0KKyAgICAgICAgbm9kZTEuc2l6ZSA9IHNpemU7DQorICAgICAgICBub2RlMS5yZWN0ID0gWw0KKyAgICAgICAgICAgIDAgPSBbJ3gnID0gcG9zLnggLSBzaXplLnggLyAyOyAneScgPSBwb3MueSAtIHNpemUueSAvIDI7XTsNCisgICAgICAgICAgICAxID0gWyd4JyA9IHBvcy54ICsgc2l6ZS54IC8gMjsgJ3knID0gcG9zLnkgKyBzaXplLnkgLyAyO107DQorICAgICAgICBdOw0KKyAgICB9DQorICAgIGZvciAoZWlkIGluIGdyYXBoMi5lZGdlcykgew0KKyAgICAgICAgZWRnZTIgPSBncmFwaDIuZWRnZXNbZWlkXTsNCisgICAgICAgIGlmIChlZGdlMi5hdHRyLmlkKSB7DQorICAgICAgICAgICAgaWYgKH4oZWRnZTEgPSBncmFwaC5lZGdlc1tzdG9uIChlZGdlMi5hdHRyLmlkKV0pKQ0KKyAgICAgICAgICAgICAgICBjb250aW51ZTsNCisgICAgICAgIH0gZWxzZSBpZiAoZ3JhcGggPT0gZ3JhcGgyKQ0KKyAgICAgICAgICAgIGVkZ2UxID0gZWRnZTI7DQorICAgICAgICBlZGdlMS5kcmF3cyA9IGd0LnVucGFja2FsbGRyYXcgKGd0LCBlZGdlMi5hdHRyKTsNCisgICAgfQ0KKyAgICBncmFwaC5kcmF3cyA9IGd0LnVucGFja2FsbGRyYXcgKGd0LCBncmFwaDIuZ3JhcGhhdHRyKTsNCisgICAgdDEgPSBzcGxpdCAoZ3JhcGgyLmdyYXBoYXR0ci5iYiwgJywnKTsNCisgICAgZ3JhcGgucmVjdFswXS54ID0gc3RvbiAodDFbMF0pOw0KKyAgICBncmFwaC5yZWN0WzBdLnkgPSBzdG9uICh0MVsxXSk7DQorICAgIGdyYXBoLnJlY3RbMV0ueCA9IHN0b24gKHQxWzJdKTsNCisgICAgZ3JhcGgucmVjdFsxXS55ID0gc3RvbiAodDFbM10pOw0KKyAgICBpZiAoZ3QuZ3JhcGggfj0gZ3JhcGgyKQ0KKyAgICAgICAgcmV0dXJuOw0KKyAgICAjIHN0cmlwIHBvc2l0aW9uIGFuZCBzaXplIGluZm8gZnJvbSB0aGUgYXR0cmlidXRlcw0KKyAgICBmb3IgKGdpZCBpbiBncmFwaDIuZ3JhcGhkaWN0KSB7DQorICAgICAgICBzZ3JhcGgyID0gZ3JhcGgyLmdyYXBoc1tncmFwaDIuZ3JhcGhkaWN0W2dpZF1dOw0KKyAgICAgICAgZ3QucmVtb3ZlYWxsZHJhdyAoZ3QsIHNncmFwaDIuZ3JhcGhhdHRyKTsNCisgICAgICAgIGlmIChzZ3JhcGgyLmdyYXBoYXR0ci5iYikNCisgICAgICAgICAgICByZW1vdmUgKCdiYicsIHNncmFwaDIuZ3JhcGhhdHRyKTsNCisgICAgfQ0KKyAgICBmb3IgKG5pZCBpbiBncmFwaDIubm9kZWRpY3QpIHsNCisgICAgICAgIG5vZGUyID0gZ3JhcGgyLm5vZGVzW2dyYXBoMi5ub2RlZGljdFtuaWRdXTsNCisgICAgICAgIGd0LnJlbW92ZWFsbGRyYXcgKGd0LCBub2RlMi5hdHRyKTsNCisgICAgICAgIGlmIChub2RlMi5hdHRyLnJlY3RzKQ0KKyAgICAgICAgICAgIHJlbW92ZSAoJ3JlY3RzJywgbm9kZTIuYXR0cik7DQorICAgICAgICByZW1vdmUgKCdwb3MnLCBub2RlMi5hdHRyKTsNCisgICAgICAgIHJlbW92ZSAoJ3dpZHRoJywgbm9kZTIuYXR0cik7DQorICAgICAgICByZW1vdmUgKCdoZWlnaHQnLCBub2RlMi5hdHRyKTsNCisgICAgfQ0KKyAgICBmb3IgKGVpZCBpbiBncmFwaDIuZWRnZXMpIHsNCisgICAgICAgIGVkZ2UyID0gZ3JhcGgyLmVkZ2VzW2VpZF07DQorICAgICAgICBndC5yZW1vdmVhbGxkcmF3IChndCwgZWRnZTIuYXR0cik7DQorICAgICAgICBpZiAoZWRnZTIuYXR0ci5wb3MpDQorICAgICAgICAgICAgcmVtb3ZlICgncG9zJywgZWRnZTIuYXR0cik7DQorICAgICAgICBpZiAoZWRnZTIuYXR0ci5scCkNCisgICAgICAgICAgICByZW1vdmUgKCdscCcsIGVkZ2UyLmF0dHIpOw0KKyAgICB9DQorICAgIGd0LnJlbW92ZWFsbGRyYXcgKGd0LCBncmFwaDIuZ3JhcGhhdHRyKTsNCisgICAgcmVtb3ZlICgnYmInLCBncmFwaDIuZ3JhcGhhdHRyKTsNCisgICAgaWYgKGdyYXBoMi5ncmFwaGF0dHIubHApDQorICAgICAgICByZW1vdmUgKCdscCcsIGdyYXBoMi5ncmFwaGF0dHIpOw0KK307DQorIw0KKyMgZHJhdyBkaXJlY3RpdmUgcGFyc2luZw0KKyMNCitkb3R0eS5wcm90b2d0LnVucGFja2FsbGRyYXcgPSBmdW5jdGlvbiAoZ3QsIGF0dHIpIHsNCisgICAgbG9jYWwgbywgZGlkOw0KKw0KKyAgICBvID0gW107DQorICAgIGlmIChhdHRyLl9kcmF3XykNCisgICAgICAgIG8uX2RyYXdfID0gZ3QudW5wYWNrZHJhdyAoZ3QsIGF0dHIuX2RyYXdfKTsNCisgICAgaWYgKGF0dHIuX2xkcmF3XykNCisgICAgICAgIG8uX2xkcmF3XyA9IGd0LnVucGFja2RyYXcgKGd0LCBhdHRyLl9sZHJhd18pOw0KKyAgICBpZiAoYXR0ci5faGRyYXdfKQ0KKyAgICAgICAgby5faGRyYXdfID0gZ3QudW5wYWNrZHJhdyAoZ3QsIGF0dHIuX2hkcmF3Xyk7DQorICAgIGlmIChhdHRyLl90ZHJhd18pDQorICAgICAgICBvLl90ZHJhd18gPSBndC51bnBhY2tkcmF3IChndCwgYXR0ci5fdGRyYXdfKTsNCisgICAgaWYgKGF0dHIuX2hsZHJhd18pDQorICAgICAgICBvLl9obGRyYXdfID0gZ3QudW5wYWNrZHJhdyAoZ3QsIGF0dHIuX2hsZHJhd18pOw0KKyAgICBpZiAoYXR0ci5fdGxkcmF3XykNCisgICAgICAgIG8uX3RsZHJhd18gPSBndC51bnBhY2tkcmF3IChndCwgYXR0ci5fdGxkcmF3Xyk7DQorICAgIGZvciAoZGlkIGluIG8pDQorICAgICAgICBpZiAob1tkaWRdLmVwKSB7DQorICAgICAgICAgICAgby5lcCA9IG9bZGlkXS5lcDsNCisgICAgICAgICAgICBicmVhazsNCisgICAgICAgIH0NCisgICAgcmV0dXJuIG87DQorfTsNCitkb3R0eS5wcm90b2d0LnJlbW92ZWFsbGRyYXcgPSBmdW5jdGlvbiAoZ3QsIGF0dHIpIHsNCisgICAgaWYgKGF0dHIuX2RyYXdfKQ0KKyAgICAgICAgcmVtb3ZlICgnX2RyYXdfJywgYXR0cik7DQorICAgIGlmIChhdHRyLl9sZHJhd18pDQorICAgICAgICByZW1vdmUgKCdfbGRyYXdfJywgYXR0cik7DQorICAgIGlmIChhdHRyLl9oZHJhd18pDQorICAgICAgICByZW1vdmUgKCdfaGRyYXdfJywgYXR0cik7DQorICAgIGlmIChhdHRyLl90ZHJhd18pDQorICAgICAgICByZW1vdmUgKCdfdGRyYXdfJywgYXR0cik7DQorICAgIGlmIChhdHRyLl9obGRyYXdfKQ0KKyAgICAgICAgcmVtb3ZlICgnX2hsZHJhd18nLCBhdHRyKTsNCisgICAgaWYgKGF0dHIuX3RsZHJhd18pDQorICAgICAgICByZW1vdmUgKCdfdGxkcmF3XycsIGF0dHIpOw0KK307DQorZG90dHkucHJvdG9ndC51bnBhY2tkcmF3ID0gZnVuY3Rpb24gKGd0LCBhdHRyKSB7DQorICAgIGxvY2FsIG9vLCBvLCB0dCwgdCwgbiwgaSwgaiwgcywgbCwgZXA7DQorDQorICAgIG9vID0gW107DQorICAgIHQgPSBzcGxpdCAoYXR0ciwgJyAnLCAwKTsNCisgICAgbiA9IHRhYmxlc2l6ZSAodCk7DQorICAgIGlmICh0W24gLSAxXSA9PSAnJykgew0KKyAgICAgICAgcmVtb3ZlIChuIC0gMSwgdCk7DQorICAgICAgICBuID0gbiAtIDE7DQorICAgIH0NCisgICAgaSA9IDA7DQorICAgIHdoaWxlIChpIDwgbikgew0KKyAgICAgICAgbyA9IFtdOw0KKyAgICAgICAgaWYgKHRbaV0gPT0gJ0UnKSB7DQorICAgICAgICAgICAgby50eXBlID0gdFtpXTsNCisgICAgICAgICAgICBvLmMueCA9IHN0b24gKHRbaSArIDFdKTsNCisgICAgICAgICAgICBvLmMueSA9IHN0b24gKHRbaSArIDJdKTsNCisgICAgICAgICAgICBvLnMueCA9IHN0b24gKHRbaSArIDNdKTsNCisgICAgICAgICAgICBvLnMueSA9IHN0b24gKHRbaSArIDRdKTsNCisgICAgICAgICAgICBpID0gaSArIDU7DQorICAgICAgICB9IGVsc2UgaWYgKHRbaV0gPT0gJ2UnKSB7DQorICAgICAgICAgICAgby50eXBlID0gdFtpXTsNCisgICAgICAgICAgICBvLmMueCA9IHN0b24gKHRbaSArIDFdKTsNCisgICAgICAgICAgICBvLmMueSA9IHN0b24gKHRbaSArIDJdKTsNCisgICAgICAgICAgICBvLnMueCA9IHN0b24gKHRbaSArIDNdKTsNCisgICAgICAgICAgICBvLnMueSA9IHN0b24gKHRbaSArIDRdKTsNCisgICAgICAgICAgICBpID0gaSArIDU7DQorICAgICAgICB9IGVsc2UgaWYgKHRbaV0gPT0gJ1AnKSB7DQorICAgICAgICAgICAgby50eXBlID0gdFtpXTsNCisgICAgICAgICAgICBvLm4gPSBzdG9uICh0W2kgKyAxXSk7DQorICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IG8ubjsgaiA9IGogKyAxKSB7DQorICAgICAgICAgICAgICAgIG8ucHNbal0ueCA9IHN0b24gKHRbaSArIDIgKyBqICogMl0pOw0KKyAgICAgICAgICAgICAgICBvLnBzW2pdLnkgPSBzdG9uICh0W2kgKyAyICsgaiAqIDIgKyAxXSk7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIGkgPSBpICsgMiArIG8ubiAqIDI7DQorICAgICAgICAgICAgby5wc1tvLm5dID0gby5wc1swXTsNCisgICAgICAgICAgICBvLm4gPSBvLm4gKyAxOw0KKyAgICAgICAgfSBlbHNlIGlmICh0W2ldID09ICdwJykgew0KKyAgICAgICAgICAgIG8udHlwZSA9IHRbaV07DQorICAgICAgICAgICAgby5uID0gc3RvbiAodFtpICsgMV0pOw0KKyAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBvLm47IGogPSBqICsgMSkgew0KKyAgICAgICAgICAgICAgICBvLnBzW2pdLnggPSBzdG9uICh0W2kgKyAyICsgaiAqIDJdKTsNCisgICAgICAgICAgICAgICAgby5wc1tqXS55ID0gc3RvbiAodFtpICsgMiArIGogKiAyICsgMV0pOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgICAgICBpID0gaSArIDIgKyBvLm4gKiAyOw0KKyAgICAgICAgICAgIG8ucHNbby5uXSA9IG8ucHNbMF07DQorICAgICAgICAgICAgby5uID0gby5uICsgMTsNCisgICAgICAgIH0gZWxzZSBpZiAodFtpXSA9PSAnTCcpIHsNCisgICAgICAgICAgICBvLnR5cGUgPSB0W2ldOw0KKyAgICAgICAgICAgIG8ubiA9IHN0b24gKHRbaSArIDFdKTsNCisgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgby5uOyBqID0gaiArIDEpIHsNCisgICAgICAgICAgICAgICAgby5wc1tqXS54ID0gc3RvbiAodFtpICsgMiArIGogKiAyXSk7DQorICAgICAgICAgICAgICAgIG8ucHNbal0ueSA9IHN0b24gKHRbaSArIDIgKyBqICogMiArIDFdKTsNCisgICAgICAgICAgICB9DQorICAgICAgICAgICAgaSA9IGkgKyAyICsgby5uICogMjsNCisgICAgICAgICAgICBpZiAofmVwKQ0KKyAgICAgICAgICAgICAgICBlcCA9IGNvcHkgKG8ucHNbMV0pOw0KKyAgICAgICAgfSBlbHNlIGlmICh0W2ldID09ICdCJykgew0KKyAgICAgICAgICAgIG8udHlwZSA9IHRbaV07DQorICAgICAgICAgICAgby5uID0gc3RvbiAodFtpICsgMV0pOw0KKyAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBvLm47IGogPSBqICsgMSkgew0KKyAgICAgICAgICAgICAgICBvLnBzW2pdLnggPSBzdG9uICh0W2kgKyAyICsgaiAqIDJdKTsNCisgICAgICAgICAgICAgICAgby5wc1tqXS55ID0gc3RvbiAodFtpICsgMiArIGogKiAyICsgMV0pOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgICAgICBpID0gaSArIDIgKyBvLm4gKiAyOw0KKyAgICAgICAgICAgIGlmICh+ZXApDQorICAgICAgICAgICAgICAgIGVwID0gY29weSAoby5wc1sxXSk7DQorICAgICAgICB9IGVsc2UgaWYgKHRbaV0gPT0gJ2InKSB7DQorICAgICAgICAgICAgby50eXBlID0gdFtpXTsNCisgICAgICAgICAgICBvLm4gPSBzdG9uICh0W2kgKyAxXSk7DQorICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IG8ubjsgaiA9IGogKyAxKSB7DQorICAgICAgICAgICAgICAgIG8ucHNbal0ueCA9IHN0b24gKHRbaSArIDIgKyBqICogMl0pOw0KKyAgICAgICAgICAgICAgICBvLnBzW2pdLnkgPSBzdG9uICh0W2kgKyAyICsgaiAqIDIgKyAxXSk7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIGkgPSBpICsgMiArIG8ubiAqIDI7DQorICAgICAgICAgICAgaWYgKH5lcCkNCisgICAgICAgICAgICAgICAgZXAgPSBjb3B5IChvLnBzWzFdKTsNCisgICAgICAgIH0gZWxzZSBpZiAodFtpXSA9PSAnVCcpIHsNCisgICAgICAgICAgICBvLnR5cGUgPSB0W2ldOw0KKyAgICAgICAgICAgIG8ucC54ID0gc3RvbiAodFtpICsgMV0pOw0KKyAgICAgICAgICAgIG8ucC55ID0gc3RvbiAodFtpICsgMl0pOw0KKyAgICAgICAgICAgIG8uaiA9IHN0b24gKHRbaSArIDNdKTsNCisgICAgICAgICAgICBpZiAoby5qID09IC0xKQ0KKyAgICAgICAgICAgICAgICBvLmogPSAnbGInOw0KKyAgICAgICAgICAgIGVsc2UgaWYgKG8uaiA9PSAxKQ0KKyAgICAgICAgICAgICAgICBvLmogPSAncmInOw0KKyAgICAgICAgICAgIGVsc2UgaWYgKG8uaiA9PSAwKQ0KKyAgICAgICAgICAgICAgICBvLmogPSAnY2InOw0KKyAgICAgICAgICAgIG8udyA9IHN0b24gKHRbaSArIDRdKTsNCisgICAgICAgICAgICBvLm4gPSBzdG9uICh0W2kgKyA1XSk7DQorICAgICAgICAgICAgaSA9IGkgKyA2Ow0KKyAgICAgICAgICAgIHMgPSB0W2ldOw0KKyAgICAgICAgICAgIGkgPSBpICsgMTsNCisgICAgICAgICAgICBsID0gc3RybGVuIChzKSAtIDE7DQorICAgICAgICAgICAgd2hpbGUgKGwgPCBvLm4pIHsNCisgICAgICAgICAgICAgICAgcyA9IGNvbmNhdCAocywgJyAnLCB0W2ldKTsNCisgICAgICAgICAgICAgICAgbCA9IGwgKyAxICsgc3RybGVuICh0W2ldKTsNCisgICAgICAgICAgICAgICAgaSA9IGkgKyAxOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgICAgICB0dCA9IHNwbGl0IChzLCAnJyk7DQorICAgICAgICAgICAgbCA9IHRhYmxlc2l6ZSAodHQpOw0KKyAgICAgICAgICAgIHMgPSAnJzsNCisgICAgICAgICAgICBmb3IgKGogPSAxOyBqIDwgbDsgaiA9IGogKyAxKQ0KKyAgICAgICAgICAgICAgICBzID0gY29uY2F0IChzLCB0dFtqXSk7DQorICAgICAgICAgICAgby5zID0gczsNCisgICAgICAgIH0gZWxzZSBpZiAodFtpXSA9PSAnQycpIHsNCisgICAgICAgICAgICBvLnR5cGUgPSB0W2ldOw0KKyAgICAgICAgICAgIG8ubiA9IHN0b24gKHRbaSArIDFdKTsNCisgICAgICAgICAgICBpID0gaSArIDI7DQorICAgICAgICAgICAgcyA9IHRbaV07DQorICAgICAgICAgICAgaSA9IGkgKyAxOw0KKyAgICAgICAgICAgIGwgPSBzdHJsZW4gKHMpIC0gMTsNCisgICAgICAgICAgICB3aGlsZSAobCA8IG8ubikgew0KKyAgICAgICAgICAgICAgICBzID0gY29uY2F0IChzLCAnICcsIHRbaV0pOw0KKyAgICAgICAgICAgICAgICBsID0gbCArIDEgKyBzdHJsZW4gKHRbaV0pOw0KKyAgICAgICAgICAgICAgICBpID0gaSArIDE7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIHR0ID0gc3BsaXQgKHMsICcnKTsNCisgICAgICAgICAgICBsID0gdGFibGVzaXplICh0dCk7DQorICAgICAgICAgICAgcyA9ICcnOw0KKyAgICAgICAgICAgIGZvciAoaiA9IDE7IGogPCBsOyBqID0gaiArIDEpDQorICAgICAgICAgICAgICAgIHMgPSBjb25jYXQgKHMsIHR0W2pdKTsNCisgICAgICAgICAgICBvLmZpbGxjb2xvciA9IGd0LmdldGNvbG9yIChndC52aWV3cywgcyk7DQorICAgICAgICB9IGVsc2UgaWYgKHRbaV0gPT0gJ2MnKSB7DQorICAgICAgICAgICAgby50eXBlID0gdFtpXTsNCisgICAgICAgICAgICBvLm4gPSBzdG9uICh0W2kgKyAxXSk7DQorICAgICAgICAgICAgaSA9IGkgKyAyOw0KKyAgICAgICAgICAgIHMgPSB0W2ldOw0KKyAgICAgICAgICAgIGkgPSBpICsgMTsNCisgICAgICAgICAgICBsID0gc3RybGVuIChzKSAtIDE7DQorICAgICAgICAgICAgd2hpbGUgKGwgPCBvLm4pIHsNCisgICAgICAgICAgICAgICAgcyA9IGNvbmNhdCAocywgJyAnLCB0W2ldKTsNCisgICAgICAgICAgICAgICAgbCA9IGwgKyAxICsgc3RybGVuICh0W2ldKTsNCisgICAgICAgICAgICAgICAgaSA9IGkgKyAxOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgICAgICB0dCA9IHNwbGl0IChzLCAnJyk7DQorICAgICAgICAgICAgbCA9IHRhYmxlc2l6ZSAodHQpOw0KKyAgICAgICAgICAgIHMgPSAnJzsNCisgICAgICAgICAgICBmb3IgKGogPSAxOyBqIDwgbDsgaiA9IGogKyAxKQ0KKyAgICAgICAgICAgICAgICBzID0gY29uY2F0IChzLCB0dFtqXSk7DQorICAgICAgICAgICAgby5kcmF3Y29sb3IgPSBndC5nZXRjb2xvciAoZ3Qudmlld3MsIHMpOw0KKyAgICAgICAgfSBlbHNlIGlmICh0W2ldID09ICdGJykgew0KKyAgICAgICAgICAgIG8udHlwZSA9IHRbaV07DQorICAgICAgICAgICAgby5mcyA9IHN0b24gKHRbaSArIDFdKTsNCisgICAgICAgICAgICBvLm4gPSBzdG9uICh0W2kgKyAyXSk7DQorICAgICAgICAgICAgaSA9IGkgKyAzOw0KKyAgICAgICAgICAgIHMgPSB0W2ldOw0KKyAgICAgICAgICAgIGkgPSBpICsgMTsNCisgICAgICAgICAgICBsID0gc3RybGVuIChzKSAtIDE7DQorICAgICAgICAgICAgd2hpbGUgKGwgPCBvLm4pIHsNCisgICAgICAgICAgICAgICAgcyA9IGNvbmNhdCAocywgJyAnLCB0W2ldKTsNCisgICAgICAgICAgICAgICAgbCA9IGwgKyAxICsgc3RybGVuICh0W2ldKTsNCisgICAgICAgICAgICAgICAgaSA9IGkgKyAxOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgICAgICB0dCA9IHNwbGl0IChzLCAnJyk7DQorICAgICAgICAgICAgbCA9IHRhYmxlc2l6ZSAodHQpOw0KKyAgICAgICAgICAgIHMgPSAnJzsNCisgICAgICAgICAgICBmb3IgKGogPSAxOyBqIDwgbDsgaiA9IGogKyAxKQ0KKyAgICAgICAgICAgICAgICBzID0gY29uY2F0IChzLCB0dFtqXSk7DQorICAgICAgICAgICAgby5vZm4gPSBzOw0KKyAgICAgICAgICAgIG8uZm4gPSBkb3R0eS5mb250bWFwW3NdOw0KKyAgICAgICAgfSBlbHNlIGlmICh0W2ldID09ICdTJykgew0KKyAgICAgICAgICAgIG8udHlwZSA9IHRbaV07DQorICAgICAgICAgICAgby5uID0gc3RvbiAodFtpICsgMV0pOw0KKyAgICAgICAgICAgIGkgPSBpICsgMjsNCisgICAgICAgICAgICBzID0gdFtpXTsNCisgICAgICAgICAgICBpID0gaSArIDE7DQorICAgICAgICAgICAgbCA9IHN0cmxlbiAocykgLSAxOw0KKyAgICAgICAgICAgIHdoaWxlIChsIDwgby5uKSB7DQorICAgICAgICAgICAgICAgIHMgPSBjb25jYXQgKHMsICcgJywgdFtpXSk7DQorICAgICAgICAgICAgICAgIGwgPSBsICsgMSArIHN0cmxlbiAodFtpXSk7DQorICAgICAgICAgICAgICAgIGkgPSBpICsgMTsNCisgICAgICAgICAgICB9DQorICAgICAgICAgICAgdHQgPSBzcGxpdCAocywgJycpOw0KKyAgICAgICAgICAgIGwgPSB0YWJsZXNpemUgKHR0KTsNCisgICAgICAgICAgICBzID0gJyc7DQorICAgICAgICAgICAgZm9yIChqID0gMTsgaiA8IGw7IGogPSBqICsgMSkNCisgICAgICAgICAgICAgICAgcyA9IGNvbmNhdCAocywgdHRbal0pOw0KKyAgICAgICAgICAgIGlmICgNCisgICAgICAgICAgICAgICAgcyA9PSAnc29saWQnIHwgcyA9PSAnZGFzaGVkJyB8IHMgPT0gJ2RvdHRlZCcgfA0KKyAgICAgICAgICAgICAgICBzID09ICdsb25nZGFzaGVkJyB8IHMgPT0gJ3Nob3J0ZGFzaGVkJw0KKyAgICAgICAgICAgICkNCisgICAgICAgICAgICAgICAgby5zdHlsZSA9IHM7DQorICAgICAgICAgICAgZWxzZSBpZiAocyA9PSAnYm9sZCcpDQorICAgICAgICAgICAgICAgIG8ud2lkdGggPSAzOw0KKyAgICAgICAgICAgIGVsc2Ugew0KKyAgICAgICAgICAgICAgICB0dCA9IHNwbGl0IChzLCAnKCcpOw0KKyAgICAgICAgICAgICAgICBpZiAodHRbMF0gPT0gJ3NldGxpbmV3aWR0aCcpIHsNCisgICAgICAgICAgICAgICAgICAgIHR0ID0gc3BsaXQgKHR0WzFdLCAnKScpOw0KKyAgICAgICAgICAgICAgICAgICAgby53aWR0aCA9IHN0b24gKHR0WzBdKTsNCisgICAgICAgICAgICAgICAgfSBlbHNlDQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsNCisgICAgICAgICAgICB9DQorICAgICAgICB9IGVsc2UgaWYgKHRbaV0gPT0gJ0knKSB7DQorICAgICAgICAgICAgaSA9IGkgKyA3Ow0KKyAgICAgICAgfSBlbHNlIHsNCisgICAgICAgICAgICBkb3R0eS5tZXNzYWdlICgwLCBjb25jYXQgKCdkcmF3IGxhbmd1YWdlIHBhcnNlciBlcnJvcjogJywgdFtpXSkpOw0KKyAgICAgICAgICAgIHJldHVybiBudWxsOw0KKyAgICAgICAgfQ0KKyAgICAgICAgb29bdGFibGVzaXplIChvbyldID0gbzsNCisgICAgfQ0KKyAgICBvby5lcCA9IGVwOw0KKyAgICByZXR1cm4gb287DQorfTsNCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS9oZWxwZXJzL0dyYXBodml6Mi4yNi4zL2xpYi9sZWZ0eS9kb3R0eV91aS5sZWZ0eSBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL2hlbHBlcnMvR3JhcGh2aXoyLjI2LjMvbGliL2xlZnR5L2RvdHR5X3VpLmxlZnR5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2YTBkMjQKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS9oZWxwZXJzL0dyYXBodml6Mi4yNi4zL2xpYi9sZWZ0eS9kb3R0eV91aS5sZWZ0eQpAQCAtMCwwICsxLDQ2OCBAQAorIw0KKyMgZG90dHlfdWk6IHVzZXIgaW50ZXJmYWNlIGZ1bmN0aW9ucyBhbmQgZGF0YSBzdHJ1Y3R1cmVzDQorIw0KK2RvdHR5LnByb3RvZ3QuZG9hY3Rpb24gPSBmdW5jdGlvbiAoZGF0YSwgcykgew0KKyAgICBsb2NhbCB2dCwgZ3Q7DQorDQorICAgIHZ0ID0gZG90dHkudmlld3NbZGF0YS53aWRnZXRdOw0KKyAgICBndCA9IGRvdHR5LmdyYXBoc1t2dC5ndGlkXTsNCisgICAgZGF0YS5tZW51aXRlbSA9IHM7DQorICAgIGlmIChkYXRhLm9iai5uaWQgPj0gMCkgew0KKyAgICAgICAgaWYgKGd0LmFjdGlvbnMubm9kZVtzXSkgew0KKyAgICAgICAgICAgIGd0LmFjdGlvbnMubm9kZVtzXSAoZ3QsIHZ0LCBkYXRhLm9iaiwgZGF0YSk7DQorICAgICAgICAgICAgcmV0dXJuOw0KKyAgICAgICAgfQ0KKyAgICB9IGVsc2UgaWYgKGRhdGEub2JqLmVpZCA+PSAwKSB7DQorICAgICAgICBpZiAoZ3QuYWN0aW9ucy5lZGdlW3NdKSB7DQorICAgICAgICAgICAgZ3QuYWN0aW9ucy5lZGdlW3NdIChndCwgdnQsIGRhdGEub2JqLCBkYXRhKTsNCisgICAgICAgICAgICByZXR1cm47DQorICAgICAgICB9DQorICAgIH0NCisgICAgaWYgKGd0LmFjdGlvbnMuZ2VuZXJhbFtzXSkNCisgICAgICAgIGd0LmFjdGlvbnMuZ2VuZXJhbFtzXSAoZ3QsIHZ0LCBkYXRhKTsNCit9Ow0KK2RvdHR5LnByb3RvZ3QuYWN0aW9ucy5nZW5lcmFsID0gWw0KKyAgICAidW5kbyIgPSBmdW5jdGlvbiAoZ3QsIHZ0LCBkYXRhKSB7DQorICAgICAgICBndC51bmRvIChndCwgMSk7DQorICAgIH07DQorICAgICJwYXN0ZSIgPSBmdW5jdGlvbiAoZ3QsIHZ0LCBkYXRhKSB7DQorICAgICAgICBndC5wYXN0ZSAoZ3QsIGRhdGEucG9zLCAxKTsNCisgICAgfTsNCisgICAgImRvIGxheW91dCIgPSBmdW5jdGlvbiAoZ3QsIHZ0LCBkYXRhKSB7DQorICAgICAgICBndC5sYXlvdXRncmFwaCAoZ3QpOw0KKyAgICB9Ow0KKyAgICAiY2FuY2VsIGxheW91dCIgPSBmdW5jdGlvbiAoZ3QsIHZ0LCBkYXRhKSB7DQorICAgICAgICBndC5jYW5jZWxsYXlvdXQgKGd0KTsNCisgICAgfTsNCisgICAgInJlZHJhdyIgPSBmdW5jdGlvbiAoZ3QsIHZ0LCBkYXRhKSB7DQorICAgICAgICBndC5yZWRyYXdncmFwaCAoZ3QsIFt2dC52dGlkID0gdnQ7XSk7DQorICAgIH07DQorICAgICJuZXcgZ3JhcGgiID0gZnVuY3Rpb24gKGd0LCB2dCwgZGF0YSkgew0KKyAgICAgICAgZ3QuZXJhc2VncmFwaCAoZ3QsIG51bGwsIG51bGwpOw0KKyAgICB9Ow0KKyAgICAibG9hZCBncmFwaCIgPSBmdW5jdGlvbiAoZ3QsIHZ0LCBkYXRhKSB7DQorICAgICAgICBndC5sb2FkZ3JhcGggKGd0LCBudWxsLCAnZmlsZScsIGRvdHR5LnByb3RvZ3QuZ3JhcGgsIDEpOw0KKyAgICB9Ow0KKyAgICAicmVsb2FkIGdyYXBoIiA9IGZ1bmN0aW9uIChndCwgdnQsIGRhdGEpIHsNCisgICAgICAgIGd0LmxvYWRncmFwaCAoZ3QsIGd0Lm5hbWUsIGd0LnR5cGUsIGd0LmdyYXBoLCAxKTsNCisgICAgfTsNCisgICAgInNhdmUgZ3JhcGgiID0gZnVuY3Rpb24gKGd0LCB2dCwgZGF0YSkgew0KKyAgICAgICAgZ3Quc2F2ZWdyYXBoIChndCwgZ3QubmFtZSwgZ3QudHlwZSk7DQorICAgIH07DQorICAgICJzYXZlIGdyYXBoIGFzIiA9IGZ1bmN0aW9uIChndCwgdnQsIGRhdGEpIHsNCisgICAgICAgIGd0LnNhdmVncmFwaCAoZ3QsIG51bGwsICdmaWxlJyk7DQorICAgIH07DQorICAgICJvcGVuIHZpZXciID0gZnVuY3Rpb24gKGd0LCB2dCwgZGF0YSkgew0KKyAgICAgICAgZ3QgPSBkb3R0eS5wcm90b2d0LmNyZWF0ZWdyYXBoIChudWxsKTsNCisgICAgICAgIGd0LmNyZWF0ZXZpZXcgKGd0LCBudWxsKTsNCisgICAgfTsNCisgICAgImNvcHkgdmlldyIgPSBmdW5jdGlvbiAoZ3QsIHZ0LCBkYXRhKSB7DQorICAgICAgICBndCA9IGd0LmNvcHlncmFwaCAoZ3QpOw0KKyAgICAgICAgZ3QuY3JlYXRldmlldyAoZ3QsIHZ0KTsNCisgICAgfTsNCisgICAgImJpcmRzZXllIHZpZXciID0gZnVuY3Rpb24gKGd0LCB2dCwgZGF0YSkgew0KKyAgICAgICAgZ3QuY3JlYXRldmlldyAoZ3QsIGRvdHR5LnByb3RvdnQuYmlyZHNleWUpOw0KKyAgICB9Ow0KKyAgICAiY2xvbmUgdmlldyIgPSBmdW5jdGlvbiAoZ3QsIHZ0LCBkYXRhKSB7DQorICAgICAgICBndC5jcmVhdGV2aWV3IChndCwgdnQpOw0KKyAgICB9Ow0KKyAgICAiY2xvc2UgdmlldyIgPSBmdW5jdGlvbiAoZ3QsIHZ0LCBkYXRhKSB7DQorICAgICAgICBndC5kZXN0cm95dmlldyAoZ3QsIHZ0KTsNCisgICAgICAgIGlmICh0YWJsZXNpemUgKGd0LnZpZXdzKSA9PSAwKQ0KKyAgICAgICAgICAgIGd0LmRlc3Ryb3lncmFwaCAoZ3QpOw0KKyAgICB9Ow0KKyAgICAic2V0IGdyYXBoIGF0dHIiID0gZnVuY3Rpb24gKGd0LCB2dCwgZGF0YSkgew0KKyAgICAgICAgZ3Quc2V0YXR0ciAoZ3QsIFsnYXR0cicgPSBndC5ncmFwaC5ncmFwaGF0dHI7XSk7DQorICAgIH07DQorICAgICJzZXQgbm9kZSBhdHRyIiA9IGZ1bmN0aW9uIChndCwgdnQsIGRhdGEpIHsNCisgICAgICAgIGd0LnNldGF0dHIgKGd0LCBbJ2F0dHInID0gZ3QuZ3JhcGgubm9kZWF0dHI7XSk7DQorICAgIH07DQorICAgICJzZXQgZWRnZSBhdHRyIiA9IGZ1bmN0aW9uIChndCwgdnQsIGRhdGEpIHsNCisgICAgICAgIGd0LnNldGF0dHIgKGd0LCBbJ2F0dHInID0gZ3QuZ3JhcGguZWRnZWF0dHI7XSk7DQorICAgIH07DQorICAgICJ6b29tIGluIiA9IGZ1bmN0aW9uIChndCwgdnQsIGRhdGEpIHsNCisgICAgICAgIGd0Lnpvb20gKGd0LCB2dCwgMC41LCBkYXRhLnBvcyk7DQorICAgIH07DQorICAgICJ6b29tIG91dCIgPSBmdW5jdGlvbiAoZ3QsIHZ0LCBkYXRhKSB7DQorICAgICAgICBndC56b29tIChndCwgdnQsIDIsIGRhdGEucG9zKTsNCisgICAgfTsNCisgICAgInpvb20gaW4gc2xvd2x5IiA9IGZ1bmN0aW9uIChndCwgdnQsIGRhdGEpIHsNCisgICAgICAgIGd0Lnpvb20gKGd0LCB2dCwgMC45LCBkYXRhLnBvcyk7DQorICAgIH07DQorICAgICJ6b29tIG91dCBzbG93bHkiID0gZnVuY3Rpb24gKGd0LCB2dCwgZGF0YSkgew0KKyAgICAgICAgZ3Quem9vbSAoZ3QsIHZ0LCAxLjEsIGRhdGEucG9zKTsNCisgICAgfTsNCisgICAgInNjcm9sbCBob3Jpem9udGFsbHkiID0gZnVuY3Rpb24gKGd0LCB2dCwgZGF0YSkgew0KKyAgICAgICAgdnQuc2Nyb2xsbW9kZSA9ICdoJzsNCisgICAgfTsNCisgICAgInNjcm9sbCB2ZXJ0aWNhbGx5IiA9IGZ1bmN0aW9uIChndCwgdnQsIGRhdGEpIHsNCisgICAgICAgIHZ0LnNjcm9sbG1vZGUgPSAndic7DQorICAgIH07DQorICAgICJmaW5kIG5vZGUiID0gZnVuY3Rpb24gKGd0LCB2dCwgZGF0YSkgew0KKyAgICAgICAgZ3QuZmluZG5vZGUgKGd0LCB2dCk7DQorICAgIH07DQorICAgICJwcmludCBncmFwaCIgPSBmdW5jdGlvbiAoZ3QsIHZ0LCBkYXRhKSB7DQorICAgICAgICBndC5wcmludG9yc2F2ZSAoZ3QsIHZ0LCBudWxsLCBudWxsLCBudWxsLCBudWxsKTsNCisgICAgfTsNCisgICAgInRleHQgdmlldyIgPSBmdW5jdGlvbiAoZ3QsIHZ0LCBkYXRhKSB7DQorICAgICAgICBpZiAoZG90dHkudHh0dmlldyA9PSAnb24nKQ0KKyAgICAgICAgICAgIGRvdHR5LnR4dHZpZXcgPSAnb2ZmJzsNCisgICAgICAgIGVsc2UNCisgICAgICAgICAgICBkb3R0eS50eHR2aWV3ID0gJ29uJzsNCisgICAgICAgIHR4dHZpZXcgKGRvdHR5LnR4dHZpZXcpOw0KKyAgICB9Ow0KKyAgICAicXVpdCIgPSBmdW5jdGlvbiAoZ3QsIHZ0LCBkYXRhKSB7DQorICAgICAgICBleGl0ICgpOw0KKyAgICB9Ow0KK107DQorZG90dHkucHJvdG9ndC5hY3Rpb25zLm5vZGUgPSBbDQorICAgICJjdXQiID0gZnVuY3Rpb24gKGd0LCB2dCwgb2JqLCBkYXRhKSB7DQorICAgICAgICBndC5jdXQgKGd0LCBvYmosICdvbmUnLCAnc3VwcG9ydCcsICdjdXQnKTsNCisgICAgICAgIGRvdHR5LmNsaXBndC5sYXlvdXRncmFwaCAoZG90dHkuY2xpcGd0KTsNCisgICAgfTsNCisgICAgIkN1dCIgPSBmdW5jdGlvbiAoZ3QsIHZ0LCBvYmosIGRhdGEpIHsNCisgICAgICAgIGd0LmN1dCAoZ3QsIG9iaiwgJ3JlYWNoYWJsZScsICdzdXBwb3J0JywgJ2N1dCcpOw0KKyAgICAgICAgZG90dHkuY2xpcGd0LmxheW91dGdyYXBoIChkb3R0eS5jbGlwZ3QpOw0KKyAgICB9Ow0KKyAgICAiY29weSIgPSBmdW5jdGlvbiAoZ3QsIHZ0LCBvYmosIGRhdGEpIHsNCisgICAgICAgIGd0LmN1dCAoZ3QsIG9iaiwgJ29uZScsICdzdXBwb3J0JywgJ2NvcHknKTsNCisgICAgICAgIGRvdHR5LmNsaXBndC5sYXlvdXRncmFwaCAoZG90dHkuY2xpcGd0KTsNCisgICAgfTsNCisgICAgIkNvcHkiID0gZnVuY3Rpb24gKGd0LCB2dCwgb2JqLCBkYXRhKSB7DQorICAgICAgICBndC5jdXQgKGd0LCBvYmosICdyZWFjaGFibGUnLCAnc3VwcG9ydCcsICdjb3B5Jyk7DQorICAgICAgICBkb3R0eS5jbGlwZ3QubGF5b3V0Z3JhcGggKGRvdHR5LmNsaXBndCk7DQorICAgIH07DQorICAgICJncm91cCIgPSBmdW5jdGlvbiAoZ3QsIHZ0LCBvYmosIGRhdGEpIHsNCisgICAgICAgIGxvY2FsIGt2Ow0KKw0KKyAgICAgICAgaWYgKChrdiA9IGd0LmdldGF0dHIgKGd0LCBvYmopKSkNCisgICAgICAgICAgICBndC5ncm91cG5vZGVzYnlhdHRyIChndCwga3Yua2V5LCBrdi52YWwsIFsNCisgICAgICAgICAgICAgICAgJ2xhYmVsJyA9IGt2LnZhbDsga3Yua2V5ID0ga3YudmFsOw0KKyAgICAgICAgICAgIF0sIDEsIDEpOw0KKyAgICB9Ow0KKyAgICAiR3JvdXAiID0gZnVuY3Rpb24gKGd0LCB2dCwgb2JqLCBkYXRhKSB7DQorICAgICAgICBsb2NhbCBrdjsNCisNCisgICAgICAgIGlmICgoa3YgPSBndC5nZXRhdHRyIChndCwgb2JqKSkpDQorICAgICAgICAgICAgZ3QuZ3JvdXBub2Rlc2J5YXR0ciAoZ3QsIGt2LmtleSwga3YudmFsLCBbDQorICAgICAgICAgICAgICAgICdsYWJlbCcgPSBrdi52YWw7IGt2LmtleSA9IGt2LnZhbDsNCisgICAgICAgICAgICBdLCAwLCAxKTsNCisgICAgfTsNCisgICAgImRlbGV0ZSIgPSBmdW5jdGlvbiAoZ3QsIHZ0LCBvYmosIGRhdGEpIHsNCisgICAgICAgIGlmIChvYmouZWlkID49IDApDQorICAgICAgICAgICAgZ3QucmVtb3ZlZWRnZSAoZ3QsIG9iaik7DQorICAgICAgICBlbHNlDQorICAgICAgICAgICAgZ3QucmVtb3Zlbm9kZSAoZ3QsIG9iaik7DQorICAgIH07DQorICAgICJEZWxldGUiID0gZnVuY3Rpb24gKGd0LCB2dCwgb2JqLCBkYXRhKSB7DQorICAgICAgICBndC5yZW1vdmVzdWJ0cmVlIChndCwgb2JqKTsNCisgICAgfTsNCisgICAgInJlbW92ZSIgPSBmdW5jdGlvbiAoZ3QsIHZ0LCBvYmosIGRhdGEpIHsNCisgICAgICAgIGlmIChvYmoubmlkID49IDApDQorICAgICAgICAgICAgaWYgKChrdiA9IGd0LmdldGF0dHIgKGd0LCBvYmopKSkNCisgICAgICAgICAgICAgICAgZ3QucmVtb3Zlbm9kZXNieWF0dHIgKGd0LCBrdi5rZXksIGt2LnZhbCk7DQorICAgIH07DQorICAgICJSZW1vdmUiID0gZnVuY3Rpb24gKGd0LCB2dCwgb2JqLCBkYXRhKSB7DQorICAgICAgICBpZiAob2JqLm5pZCA+PSAwKQ0KKyAgICAgICAgICAgIGlmICgoa3YgPSBndC5nZXRhdHRyIChndCwgb2JqKSkpDQorICAgICAgICAgICAgICAgIGd0LnJlbW92ZXN1YnRyZWVzYnlhdHRyIChndCwga3Yua2V5LCBrdi52YWwpOw0KKyAgICB9Ow0KKyAgICAic2V0IGF0dHIiID0gZnVuY3Rpb24gKGd0LCB2dCwgb2JqLCBkYXRhKSB7DQorICAgICAgICBndC5zZXRhdHRyIChndCwgb2JqKTsNCisgICAgfTsNCisgICAgInByaW50IGF0dHIiID0gZnVuY3Rpb24gKGd0LCB2dCwgb2JqLCBkYXRhKSB7DQorICAgICAgICBpZiAob2JqLm5pZCA+PSAwKQ0KKyAgICAgICAgICAgIGVjaG8gKCdub2RlOiAnLCBvYmoubmFtZSk7DQorICAgICAgICBkdW1wIChvYmouYXR0cik7DQorICAgIH07DQorXTsNCitkb3R0eS5wcm90b2d0LmFjdGlvbnMuZWRnZSA9IGRvdHR5LnByb3RvZ3QuYWN0aW9ucy5ub2RlOw0KK2RvdHR5LnByb3RvdnQubm9ybWFsLm1lbnVzID0gWw0KKyAgICAnZ2VuZXJhbCcgPSBbDQorICAgICAgICAwID0gInVuZG8iOw0KKyAgICAgICAgMSA9ICJwYXN0ZSI7DQorICAgICAgICAyID0gImRvIGxheW91dCI7DQorICAgICAgICAzID0gImNhbmNlbCBsYXlvdXQiOw0KKyAgICAgICAgNCA9ICJyZWRyYXciOw0KKyAgICAgICAgNSA9ICJuZXcgZ3JhcGgiOw0KKyAgICAgICAgNiA9ICJsb2FkIGdyYXBoIjsNCisgICAgICAgIDcgPSAicmVsb2FkIGdyYXBoIjsNCisgICAgICAgIDggPSAic2F2ZSBncmFwaCI7DQorICAgICAgICA5ID0gInNhdmUgZ3JhcGggYXMiOw0KKyAgICAgICAgMTAgPSAib3BlbiB2aWV3IjsNCisgICAgICAgIDExID0gImNvcHkgdmlldyI7DQorICAgICAgICAxMiA9ICJjbG9uZSB2aWV3IjsNCisgICAgICAgIDEzID0gImJpcmRzZXllIHZpZXciOw0KKyAgICAgICAgMTQgPSAiY2xvc2UgdmlldyI7DQorICAgICAgICAxNSA9ICJzZXQgZ3JhcGggYXR0ciI7DQorICAgICAgICAxNiA9ICJzZXQgbm9kZSBhdHRyIjsNCisgICAgICAgIDE3ID0gInNldCBlZGdlIGF0dHIiOw0KKyAgICAgICAgMTggPSAiem9vbSBpbiI7DQorICAgICAgICAxOSA9ICJ6b29tIG91dCI7DQorICAgICAgICAyMCA9ICJmaW5kIG5vZGUiOw0KKyAgICAgICAgMjEgPSAicHJpbnQgZ3JhcGgiOw0KKyAgICAgICAgMjIgPSAidGV4dCB2aWV3IjsNCisgICAgICAgIDIzID0gInF1aXQiOw0KKyAgICBdOw0KKyAgICAnbm9kZScgPSBbDQorICAgICAgICAwID0gImN1dCI7DQorICAgICAgICAxID0gIkN1dCI7DQorICAgICAgICAyID0gImNvcHkiOw0KKyAgICAgICAgMyA9ICJDb3B5IjsNCisgICAgICAgIDQgPSAiZ3JvdXAiOw0KKyAgICAgICAgNSA9ICJHcm91cCI7DQorICAgICAgICA2ID0gImRlbGV0ZSI7DQorICAgICAgICA3ID0gIkRlbGV0ZSI7DQorICAgICAgICA4ID0gInJlbW92ZSI7DQorICAgICAgICA5ID0gIlJlbW92ZSI7DQorICAgICAgICAxMCA9ICJzZXQgYXR0ciI7DQorICAgICAgICAxMSA9ICJwcmludCBhdHRyIjsNCisgICAgXTsNCisgICAgJ2VkZ2UnID0gWw0KKyAgICAgICAgMCA9ICJjdXQiOw0KKyAgICAgICAgMSA9ICJDdXQiOw0KKyAgICAgICAgMiA9ICJjb3B5IjsNCisgICAgICAgIDMgPSAiQ29weSI7DQorICAgICAgICA0ID0gImRlbGV0ZSI7DQorICAgICAgICA1ID0gIkRlbGV0ZSI7DQorICAgICAgICA2ID0gInNldCBhdHRyIjsNCisgICAgICAgIDcgPSAicHJpbnQgYXR0ciI7DQorICAgIF07DQorXTsNCitkb3R0eS5wcm90b3Z0Lm5vcm1hbC5rZXlzID0gWw0KKyAgICAnZ2VuZXJhbCcgPSBbDQorICAgICAgICAndScgPSAidW5kbyI7DQorICAgICAgICAncCcgPSAicGFzdGUiOw0KKyAgICAgICAgJ2wnID0gImRvIGxheW91dCI7DQorICAgICAgICAnaycgPSAiY2FuY2VsIGxheW91dCI7DQorICAgICAgICAnICcgPSAicmVkcmF3IjsNCisgICAgICAgICdMJyA9ICJyZWxvYWQgZ3JhcGgiOw0KKyAgICAgICAgJ3MnID0gInNhdmUgZ3JhcGgiOw0KKyAgICAgICAgJ1onID0gInpvb20gaW4gc2xvd2x5IjsNCisgICAgICAgICd6JyA9ICJ6b29tIG91dCBzbG93bHkiOw0KKyAgICAgICAgJ2gnID0gInNjcm9sbCBob3Jpem9udGFsbHkiOw0KKyAgICAgICAgJ3YnID0gInNjcm9sbCB2ZXJ0aWNhbGx5IjsNCisgICAgXTsNCisgICAgJ25vZGUnID0gWw0KKyAgICAgICAgJ2MnID0gImNvcHkiOw0KKyAgICAgICAgJ0MnID0gIkNvcHkiOw0KKyAgICAgICAgJ2cnID0gImdyb3VwIjsNCisgICAgICAgICdHJyA9ICJHcm91cCI7DQorICAgICAgICAnZCcgPSAiZGVsZXRlIjsNCisgICAgICAgICdEJyA9ICJEZWxldGUiOw0KKyAgICAgICAgJ3InID0gInJlbW92ZSI7DQorICAgICAgICAnUicgPSAiUmVtb3ZlIjsNCisgICAgICAgICdhJyA9ICJzZXQgYXR0ciI7DQorICAgIF07DQorICAgICdlZGdlJyA9IFsNCisgICAgICAgICdjJyA9ICJjb3B5IjsNCisgICAgICAgICdDJyA9ICJDb3B5IjsNCisgICAgICAgICdkJyA9ICJkZWxldGUiOw0KKyAgICAgICAgJ0QnID0gIkRlbGV0ZSI7DQorICAgICAgICAnYScgPSAic2V0IGF0dHIiOw0KKyAgICBdOw0KK107DQorZG90dHkucHJvdG92dC5iaXJkc2V5ZS5tZW51cyA9IGRvdHR5LnByb3RvdnQubm9ybWFsLm1lbnVzOw0KK2RvdHR5LnByb3RvdnQuYmlyZHNleWUua2V5cyA9IGRvdHR5LnByb3RvdnQubm9ybWFsLmtleXM7DQorZG90dHkucHJvdG92dC5ub3JtYWwudWlmdW5jcyA9IFsNCisgICAgJ2xlZnRkb3duJyA9IGZ1bmN0aW9uIChkYXRhKSB7DQorICAgICAgICBsb2NhbCBndDsNCisNCisgICAgICAgIGd0ID0gZG90dHkuZ3JhcGhzW2RvdHR5LnZpZXdzW2RhdGEud2lkZ2V0XS5ndGlkXTsNCisgICAgICAgIGlmIChkYXRhLm9iai5uaWQgPj0gMCkgew0KKyAgICAgICAgICAgIGRvdHR5Lm5vZGUybW92ZSA9IGRhdGEub2JqOw0KKyAgICAgICAgICAgIGRvdHR5Lm1vdmV3aWRnZXQgPSBkYXRhLndpZGdldDsNCisgICAgICAgICAgICBkb3R0eS5ycDIgPSBkYXRhLnBvczsNCisgICAgICAgIH0NCisgICAgfTsNCisgICAgJ2xlZnRtb3ZlJyA9IGZ1bmN0aW9uIChkYXRhKSB7DQorICAgICAgICBsb2NhbCBndDsNCisNCisgICAgICAgIGd0ID0gZG90dHkuZ3JhcGhzW2RvdHR5LnZpZXdzW2RhdGEud2lkZ2V0XS5ndGlkXTsNCisgICAgICAgIGlmIChkb3R0eS5ub2RlMm1vdmUgJiAoDQorICAgICAgICAgICAgZG90dHkucnAyLnggfj0gZGF0YS5wb3MueCB8IGRvdHR5LnJwMi55IH49IGRhdGEucG9zLnkNCisgICAgICAgICkpIHsNCisgICAgICAgICAgICBndC5tb3Zlbm9kZSAoZ3QsIGRvdHR5Lm5vZGUybW92ZSwgZGF0YS5wb3MpOw0KKyAgICAgICAgICAgIGRvdHR5LnJwMiA9IGRhdGEucG9zOw0KKyAgICAgICAgfQ0KKyAgICB9Ow0KKyAgICAnbGVmdHVwJyA9IGZ1bmN0aW9uIChkYXRhKSB7DQorICAgICAgICBsb2NhbCBndDsNCisNCisgICAgICAgIGd0ID0gZG90dHkuZ3JhcGhzW2RvdHR5LnZpZXdzW2RhdGEud2lkZ2V0XS5ndGlkXTsNCisgICAgICAgIGlmIChkb3R0eS5ub2RlMm1vdmUpIHsNCisgICAgICAgICAgICBpZiAoZG90dHkubW92ZXdpZGdldCA9PSBkYXRhLndpZGdldCkNCisgICAgICAgICAgICAgICAgZ3QubW92ZW5vZGUgKGd0LCBkb3R0eS5ub2RlMm1vdmUsIGRhdGEucG9zKTsNCisgICAgICAgICAgICBkb3R0eS5ub2RlMm1vdmUgPSAwOw0KKyAgICAgICAgfSBlbHNlIGlmICh+ZGF0YS5vYmopDQorICAgICAgICAgICAgZ3QuaW5zZXJ0bm9kZSAoZ3QsIGRhdGEucG9zLCBudWxsLCBudWxsLCBudWxsLCAxKTsNCisgICAgfTsNCisgICAgJ21pZGRsZWRvd24nID0gZnVuY3Rpb24gKGRhdGEpIHsNCisgICAgICAgIGlmICh+KGRhdGEub2JqLm5pZCA+PSAwKSkNCisgICAgICAgICAgICByZXR1cm47DQorICAgICAgICBkb3R0eS5ydWJiZXJiYW5kID0gMTsNCisgICAgICAgIGRvdHR5Lm1vdmV3aWRnZXQgPSBkYXRhLndpZGdldDsNCisgICAgICAgIHNldGdmeGF0dHIgKGRhdGEud2lkZ2V0LCBbJ21vZGUnID0gJ3hvcic7XSk7DQorICAgICAgICBkb3R0eS5ycDEgPSBkYXRhLnBvczsNCisgICAgICAgIGRvdHR5LnJwMiA9IGRhdGEucG9zOw0KKyAgICAgICAgbGluZSAoZGF0YS53aWRnZXQsIG51bGwsIGRvdHR5LnJwMSwgZG90dHkucnAyLCBbJ2NvbG9yJyA9IDE7XSk7DQorICAgIH07DQorICAgICdtaWRkbGVtb3ZlJyA9IGZ1bmN0aW9uIChkYXRhKSB7DQorICAgICAgICBpZiAoZG90dHkucnViYmVyYmFuZCB+PSAxIHwgKA0KKyAgICAgICAgICAgIGRvdHR5LnJwMi54ID09IGRhdGEucG9zLnggJiBkb3R0eS5ycDIueSA9PSBkYXRhLnBvcy55DQorICAgICAgICApKQ0KKyAgICAgICAgICAgIHJldHVybjsNCisgICAgICAgIGxpbmUgKGRhdGEud2lkZ2V0LCBudWxsLCBkb3R0eS5ycDEsIGRvdHR5LnJwMiwgWydjb2xvcicgPSAxO10pOw0KKyAgICAgICAgZG90dHkucnAyID0gZGF0YS5wb3M7DQorICAgICAgICBsaW5lIChkYXRhLndpZGdldCwgbnVsbCwgZG90dHkucnAxLCBkb3R0eS5ycDIsIFsnY29sb3InID0gMTtdKTsNCisgICAgfTsNCisgICAgJ21pZGRsZXVwJyA9IGZ1bmN0aW9uIChkYXRhKSB7DQorICAgICAgICBsb2NhbCBndDsNCisNCisgICAgICAgIGd0ID0gZG90dHkuZ3JhcGhzW2RvdHR5LnZpZXdzW2RhdGEud2lkZ2V0XS5ndGlkXTsNCisgICAgICAgIGlmIChkb3R0eS5ydWJiZXJiYW5kIH49IDEpDQorICAgICAgICAgICAgcmV0dXJuOw0KKyAgICAgICAgZG90dHkucnViYmVyYmFuZCA9IDA7DQorICAgICAgICBsaW5lIChkb3R0eS5tb3Zld2lkZ2V0LCBudWxsLCBkb3R0eS5ycDEsIGRvdHR5LnJwMiwgWydjb2xvcicgPSAxO10pOw0KKyAgICAgICAgc2V0Z2Z4YXR0ciAoZG90dHkubW92ZXdpZGdldCwgWydtb2RlJyA9ICdzcmMnO10pOw0KKyAgICAgICAgaWYgKGRvdHR5Lm1vdmV3aWRnZXQgfj0gZGF0YS53aWRnZXQgfCB+KA0KKyAgICAgICAgICAgIGRhdGEucG9iai5uaWQgPj0gMCkgfCB+KGRhdGEub2JqLm5pZCA+PSAwDQorICAgICAgICApKQ0KKyAgICAgICAgICAgIHJldHVybjsNCisgICAgICAgIGlmIChkYXRhLnBvYmouYXR0ci5zdXBwb3J0KQ0KKyAgICAgICAgICAgIGd0Lmdyb3Vwbm9kZXMgKGd0LCBbDQorICAgICAgICAgICAgICAgIGRhdGEub2JqLm5pZCA9IGRhdGEub2JqOw0KKyAgICAgICAgICAgICAgICBkYXRhLnBvYmoubmlkID0gZGF0YS5wb2JqOw0KKyAgICAgICAgICAgIF0sIGRhdGEub2JqLCBudWxsLCBudWxsLCBudWxsLCAxLCAxKTsNCisgICAgICAgIGVsc2UgaWYgKGRhdGEub2JqLmF0dHIuc3VwcG9ydCkNCisgICAgICAgICAgICBndC5ncm91cG5vZGVzIChndCwgWw0KKyAgICAgICAgICAgICAgICBkYXRhLm9iai5uaWQgPSBkYXRhLm9iajsNCisgICAgICAgICAgICAgICAgZGF0YS5wb2JqLm5pZCA9IGRhdGEucG9iajsNCisgICAgICAgICAgICBdLCBkYXRhLnBvYmosIG51bGwsIG51bGwsIG51bGwsIDEsIDEpOw0KKyAgICAgICAgZWxzZQ0KKyAgICAgICAgICAgIGd0Lmluc2VydGVkZ2UgKGd0LCBkYXRhLnBvYmosIG51bGwsIGRhdGEub2JqLCBudWxsLCBudWxsLCAxKTsNCisgICAgfTsNCisgICAgJ3JpZ2h0ZG93bicgPSBmdW5jdGlvbiAoZGF0YSkgew0KKyAgICAgICAgbG9jYWwgdnQsIGd0LCBtZW51LCBpOw0KKw0KKyAgICAgICAgdnQgPSBkb3R0eS52aWV3c1tkYXRhLndpZGdldF07DQorICAgICAgICBndCA9IGRvdHR5LmdyYXBoc1t2dC5ndGlkXTsNCisgICAgICAgIGlmICh+ZGF0YS5vYmopDQorICAgICAgICAgICAgbWVudSA9IHZ0Lm1lbnVzLmdlbmVyYWw7DQorICAgICAgICBlbHNlIGlmIChkYXRhLm9iai5uaWQgPj0gMCkNCisgICAgICAgICAgICBtZW51ID0gdnQubWVudXMubm9kZTsNCisgICAgICAgIGVsc2UgaWYgKGRhdGEub2JqLmVpZCA+PSAwKQ0KKyAgICAgICAgICAgIG1lbnUgPSB2dC5tZW51cy5lZGdlOw0KKyAgICAgICAgaWYgKChpID0gZGlzcGxheW1lbnUgKGRhdGEud2lkZ2V0LCBtZW51KSkgPj0gMCkNCisgICAgICAgICAgICBndC5kb2FjdGlvbiAoZGF0YSwgbWVudVtpXSk7DQorICAgIH07DQorICAgICdidXR0b24zdXAnID0gZnVuY3Rpb24gKGRhdGEpIHsNCisgICAgICAgIGxvY2FsIHZ0LCBhdHRyOw0KKw0KKyAgICAgICAgdnQgPSBkb3R0eS52aWV3c1tkYXRhLndpZGdldF07DQorICAgICAgICBhdHRyID0gZ2V0d2lkZ2V0YXR0ciAodnQuc2Nyb2xsLCBbMCA9ICdjaGlsZGNlbnRlcic7XSk7DQorICAgICAgICBpZiAodnQuc2Nyb2xsbW9kZSA9PSAnaCcpDQorICAgICAgICAgICAgYXR0ci5jaGlsZGNlbnRlci54ID0gYXR0ci5jaGlsZGNlbnRlci54IC0gNDA7DQorICAgICAgICBlbHNlDQorICAgICAgICAgICAgYXR0ci5jaGlsZGNlbnRlci55ID0gYXR0ci5jaGlsZGNlbnRlci55IC0gNDA7DQorICAgICAgICBzZXR3aWRnZXRhdHRyICh2dC5zY3JvbGwsIFsnY2hpbGRjZW50ZXInID0gYXR0ci5jaGlsZGNlbnRlcjtdKTsNCisgICAgfTsNCisgICAgJ2J1dHRvbjR1cCcgPSBmdW5jdGlvbiAoZGF0YSkgew0KKyAgICAgICAgbG9jYWwgdnQsIGF0dHI7DQorDQorICAgICAgICB2dCA9IGRvdHR5LnZpZXdzW2RhdGEud2lkZ2V0XTsNCisgICAgICAgIGF0dHIgPSBnZXR3aWRnZXRhdHRyICh2dC5zY3JvbGwsIFswID0gJ2NoaWxkY2VudGVyJztdKTsNCisgICAgICAgIGlmICh2dC5zY3JvbGxtb2RlID09ICdoJykNCisgICAgICAgICAgICBhdHRyLmNoaWxkY2VudGVyLnggPSBhdHRyLmNoaWxkY2VudGVyLnggKyA0MDsNCisgICAgICAgIGVsc2UNCisgICAgICAgICAgICBhdHRyLmNoaWxkY2VudGVyLnkgPSBhdHRyLmNoaWxkY2VudGVyLnkgKyA0MDsNCisgICAgICAgIHNldHdpZGdldGF0dHIgKHZ0LnNjcm9sbCwgWydjaGlsZGNlbnRlcicgPSBhdHRyLmNoaWxkY2VudGVyO10pOw0KKyAgICB9Ow0KKyAgICAna2V5dXAnID0gZnVuY3Rpb24gKGRhdGEpIHsNCisgICAgICAgIGxvY2FsIHZ0LCBndCwgYWN0aW9uOw0KKw0KKyAgICAgICAgdnQgPSBkb3R0eS52aWV3c1tkYXRhLndpZGdldF07DQorICAgICAgICBndCA9IGRvdHR5LmdyYXBoc1t2dC5ndGlkXTsNCisgICAgICAgIGlmIChkYXRhLm9iai5uaWQgPj0gMCkgew0KKyAgICAgICAgICAgIGlmICh2dC5rZXlzLm5vZGVbZGF0YS5rZXldKQ0KKyAgICAgICAgICAgICAgICBhY3Rpb24gPSB2dC5rZXlzLm5vZGVbZGF0YS5rZXldOw0KKyAgICAgICAgfSBlbHNlIGlmIChkYXRhLm9iai5laWQgPj0gMCkgew0KKyAgICAgICAgICAgIGlmICh2dC5rZXlzLmVkZ2VbZGF0YS5rZXldKQ0KKyAgICAgICAgICAgICAgICBhY3Rpb24gPSB2dC5rZXlzLmVkZ2VbZGF0YS5rZXldOw0KKyAgICAgICAgfQ0KKyAgICAgICAgaWYgKH5hY3Rpb24pDQorICAgICAgICAgICAgaWYgKHZ0LmtleXMuZ2VuZXJhbFtkYXRhLmtleV0pDQorICAgICAgICAgICAgICAgIGFjdGlvbiA9IHZ0LmtleXMuZ2VuZXJhbFtkYXRhLmtleV07DQorICAgICAgICBpZiAoYWN0aW9uKQ0KKyAgICAgICAgICAgIGd0LmRvYWN0aW9uIChkYXRhLCBhY3Rpb24pOw0KKyAgICB9Ow0KKyAgICAncmVkcmF3JyA9IGZ1bmN0aW9uIChkYXRhKSB7DQorICAgICAgICBsb2NhbCB2dCwgZ3Q7DQorDQorICAgICAgICB2dCA9IGRvdHR5LnZpZXdzW2RhdGEud2lkZ2V0XTsNCisgICAgICAgIGd0ID0gZG90dHkuZ3JhcGhzW3Z0Lmd0aWRdOw0KKyAgICAgICAgZ3QuZHJhd2dyYXBoIChndCwgW3Z0LnZ0aWQgPSB2dDtdKTsNCisgICAgfTsNCisgICAgJ2Nsb3NldmlldycgPSBmdW5jdGlvbiAoZGF0YSkgew0KKyAgICAgICAgbG9jYWwgdnQsIGd0Ow0KKw0KKyAgICAgICAgdnQgPSBkb3R0eS52aWV3c1tkYXRhLndpZGdldF07DQorICAgICAgICBndCA9IGRvdHR5LmdyYXBoc1t2dC5ndGlkXTsNCisgICAgICAgIGd0LmRlc3Ryb3l2aWV3IChndCwgdnQpOw0KKyAgICAgICAgaWYgKHRhYmxlc2l6ZSAoZ3Qudmlld3MpID09IDApDQorICAgICAgICAgICAgZ3QuZGVzdHJveWdyYXBoIChndCk7DQorICAgIH07DQorXTsNCitkb3R0eS5wcm90b3Z0LmJpcmRzZXllLnVpZnVuY3MgPSBbDQorICAgICdsZWZ0ZG93bicgPSBmdW5jdGlvbiAoZGF0YSkgew0KKyAgICAgICAgbG9jYWwgZ3QsIHZpZDsNCisNCisgICAgICAgIGd0ID0gZG90dHkuZ3JhcGhzW2RvdHR5LnZpZXdzW2RhdGEud2lkZ2V0XS5ndGlkXTsNCisgICAgICAgIGZvciAodmlkIGluIGd0LnZpZXdzKSB7DQorICAgICAgICAgICAgdnQgPSBndC52aWV3c1t2aWRdOw0KKyAgICAgICAgICAgIGlmICh2dC50eXBlIH49ICdiaXJkc2V5ZScpDQorICAgICAgICAgICAgICAgIGd0LnNldHZpZXdjZW50ZXIgKFt2aWQgPSB2dDtdLCBkYXRhLnBvcyk7DQorICAgICAgICB9DQorICAgIH07DQorICAgICdsZWZ0bW92ZScgPSBmdW5jdGlvbiAoZGF0YSkgew0KKyAgICAgICAgbG9jYWwgZ3QsIHZpZDsNCisNCisgICAgICAgIGd0ID0gZG90dHkuZ3JhcGhzW2RvdHR5LnZpZXdzW2RhdGEud2lkZ2V0XS5ndGlkXTsNCisgICAgICAgIGZvciAodmlkIGluIGd0LnZpZXdzKSB7DQorICAgICAgICAgICAgdnQgPSBndC52aWV3c1t2aWRdOw0KKyAgICAgICAgICAgIGlmICh2dC50eXBlIH49ICdiaXJkc2V5ZScpDQorICAgICAgICAgICAgICAgIGd0LnNldHZpZXdjZW50ZXIgKFt2aWQgPSB2dDtdLCBkYXRhLnBvcyk7DQorICAgICAgICB9DQorICAgIH07DQorICAgICdsZWZ0dXAnID0gZnVuY3Rpb24gKGRhdGEpIHsNCisgICAgICAgIGxvY2FsIGd0LCB2aWQ7DQorDQorICAgICAgICBndCA9IGRvdHR5LmdyYXBoc1tkb3R0eS52aWV3c1tkYXRhLndpZGdldF0uZ3RpZF07DQorICAgICAgICBmb3IgKHZpZCBpbiBndC52aWV3cykgew0KKyAgICAgICAgICAgIHZ0ID0gZ3Qudmlld3NbdmlkXTsNCisgICAgICAgICAgICBpZiAodnQudHlwZSB+PSAnYmlyZHNleWUnKQ0KKyAgICAgICAgICAgICAgICBndC5zZXR2aWV3Y2VudGVyIChbdmlkID0gdnQ7XSwgZGF0YS5wb3MpOw0KKyAgICAgICAgfQ0KKyAgICB9Ow0KKyAgICAnbWlkZGxlZG93bicgPSBkb3R0eS5wcm90b3Z0Lm5vcm1hbC51aWZ1bmNzLm1pZGRsZWRvd247DQorICAgICdtaWRkbGVtb3ZlJyA9IGRvdHR5LnByb3RvdnQubm9ybWFsLnVpZnVuY3MubWlkZGxlbW92ZTsNCisgICAgJ21pZGRsZXVwJyA9IGRvdHR5LnByb3RvdnQubm9ybWFsLnVpZnVuY3MubWlkZGxldXA7DQorICAgICdyaWdodGRvd24nID0gZG90dHkucHJvdG92dC5ub3JtYWwudWlmdW5jcy5yaWdodGRvd247DQorICAgICdrZXl1cCcgPSBkb3R0eS5wcm90b3Z0Lm5vcm1hbC51aWZ1bmNzLmtleXVwOw0KKyAgICAncmVkcmF3JyA9IGRvdHR5LnByb3RvdnQubm9ybWFsLnVpZnVuY3MucmVkcmF3Ow0KKyAgICAnY2xvc2V2aWV3JyA9IGRvdHR5LnByb3RvdnQubm9ybWFsLnVpZnVuY3MuY2xvc2V2aWV3Ow0KK107DQorZG90dHkubW9uaXRvcmZpbGUgPSBmdW5jdGlvbiAoZGF0YSkgew0KKyAgICBsb2NhbCBndGlkLCBndCwgbHB0Ow0KKw0KKyAgICBmb3IgKGd0aWQgaW4gZG90dHkubGF5b3V0cGVuZGluZykgew0KKyAgICAgICAgbHB0ID0gZG90dHkubGF5b3V0cGVuZGluZ1tndGlkXTsNCisgICAgICAgIGlmIChscHQuZmQgPT0gZGF0YS5mZCkgew0KKyAgICAgICAgICAgIGd0ID0gZG90dHkuZ3JhcGhzW2xwdC5ndGlkXTsNCisgICAgICAgICAgICBndC5oYXZlaW5wdXQgPSAxOw0KKyAgICAgICAgICAgIGd0LmxheW91dGdyYXBoIChndCk7DQorICAgICAgICAgICAgcmV0dXJuIDE7DQorICAgICAgICB9DQorICAgIH0NCisgICAgcmV0dXJuIDA7DQorfTsNCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS9oZWxwZXJzL0dyYXBodml6Mi4yNi4zL2xpYi9sZWZ0eS9mcmFjdGFsLmxlZnR5IGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvaGVscGVycy9HcmFwaHZpejIuMjYuMy9saWIvbGVmdHkvZnJhY3RhbC5sZWZ0eQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDczNGQ0Ci0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvaGVscGVycy9HcmFwaHZpejIuMjYuMy9saWIvbGVmdHkvZnJhY3RhbC5sZWZ0eQpAQCAtMCwwICsxLDEwMSBAQAorbG9hZCAoJ2RlZi5sZWZ0eScpOw0KK2RlZmluaXQgKCk7DQorIw0KKyMgaW5pdGlhbGl6ZSB3aW5kb3cgZGF0YQ0KKyMNCitjYW52YXMgPSBkZWZjYW52YXM7DQord3JlY3QgPSBbMCA9IFsneCcgPSAwOyAneScgPSAwO107IDEgPSBbJ3gnID0gNDAwOyAneScgPSA1MDA7XTtdOw0KK3NldHdpZGdldGF0dHIgKGNhbnZhcywgWyd3aW5kb3cnID0gd3JlY3Q7XSk7DQorDQorc3EgPSBmdW5jdGlvbiAoeCkgew0KKyAgICByZXR1cm4geCAqIHg7DQorfTsNCisNCisjIGRhdGEgc3RydWN0dXJlcw0KKyMNCitsZW5ndGggPSAzMDA7DQorY2VudGVyID0gWyd4JyA9IDIwMDsgJ3knID0gMjUwO107DQorcmFkaXVzID0gMiAqIGxlbmd0aCAvIHNxcnQgKDEyKTsNCitmcmFjdGFsYW5nbGUgPSAwOw0KK21heGxldmVsID0gMjsNCisNCisjIGRyYXdpbmcgZnVuY3Rpb25zDQorIw0KKyMgZHJhdyBhIEtvY2ggY3VydmUgKGEgYGBzbm93Zmxha2UnJyBmcmFjdGFsKQ0KKyMNCisjIHN0YXJ0IHdpdGggYSB0cmlhbmdsZSBhbmQga2VlcCByZXBsYWNpbmcgZWRnZXMNCisjIHdpdGggdGhlIGNvbnN0cnVjdDogXy9cXw0KKyMgdW50aWwgdGhlIHJlY3Vyc2lvbiBsZXZlbCByZWFjaGVzICdtYXhsZXZlbCcNCisjDQorZnJhY3RhbCA9IGZ1bmN0aW9uIChsZXZlbCwgbGVuZ3RoLCBhbmdsZSkgew0KKyAgICBsb2NhbCBubGVuZ3RoLCBuZXdwZW5wb3M7DQorDQorICAgIGlmIChsZXZlbCA+PSBtYXhsZXZlbCkgew0KKyAgICAgICAgbmV3cGVucG9zLnggPSBwZW5wb3MueCArIGxlbmd0aCAqIGNvcyAoYW5nbGUpOw0KKyAgICAgICAgbmV3cGVucG9zLnkgPSBwZW5wb3MueSArIGxlbmd0aCAqIHNpbiAoYW5nbGUpOw0KKyAgICAgICAgbGluZSAoY2FudmFzLCBudWxsLCBwZW5wb3MsIG5ld3BlbnBvcywgWydjb2xvcicgPSAxO10pOw0KKyAgICAgICAgcGVucG9zID0gbmV3cGVucG9zOw0KKyAgICAgICAgcmV0dXJuOw0KKyAgICB9DQorICAgIG5sZW5ndGggPSBsZW5ndGggLyAzOw0KKyAgICBmcmFjdGFsIChsZXZlbCArIDEsIG5sZW5ndGgsIGFuZ2xlKTsNCisgICAgZnJhY3RhbCAobGV2ZWwgKyAxLCBubGVuZ3RoLCBhbmdsZSArIDYwKTsNCisgICAgZnJhY3RhbCAobGV2ZWwgKyAxLCBubGVuZ3RoLCBhbmdsZSAtIDYwKTsNCisgICAgZnJhY3RhbCAobGV2ZWwgKyAxLCBubGVuZ3RoLCBhbmdsZSk7DQorfTsNCitkcmF3ZnJhY3RhbCA9IGZ1bmN0aW9uICgpIHsNCisgICAgY2xlYXIgKGNhbnZhcyk7DQorICAgIHNldHBpY2sgKGNhbnZhcywgY2VudGVyLCB3cmVjdCk7DQorICAgIHBlbnBvcyA9IFsNCisgICAgICAgICd4JyA9IGNlbnRlci54ICsgY29zIChmcmFjdGFsYW5nbGUgKyAyMTApICogcmFkaXVzOw0KKyAgICAgICAgJ3knID0gY2VudGVyLnkgKyBzaW4gKGZyYWN0YWxhbmdsZSArIDIxMCkgKiByYWRpdXM7DQorICAgIF07DQorICAgIGZyYWN0YWwgKDAsIGxlbmd0aCwgZnJhY3RhbGFuZ2xlICsgIDYwKTsNCisgICAgZnJhY3RhbCAoMCwgbGVuZ3RoLCBmcmFjdGFsYW5nbGUgLSAgNjApOw0KKyAgICBmcmFjdGFsICgwLCBsZW5ndGgsIGZyYWN0YWxhbmdsZSAtIDE4MCk7DQorICAgIHJlbW92ZSAoJ3BlbnBvcycpOw0KK307DQorDQorIyBlZGl0aW5nIGZ1bmN0aW9ucw0KKyMNCisjIHRyYW5zZm9ybSB0aGUgZnJhY3RhbC4NCisjDQorIyBtYXAgcG9pbnQgJ3ByZXZwb2ludCcgdG8gcG9pbnQgJ2N1cnJwb2ludCcNCisjIHdpdGggcmVzcGVjdCB0byB0aGUgY2VudGVyIG9mIHRoZSBmcmFjdGFsLg0KKyMNCit0cmFuc2Zvcm1mcmFjdGFsID0gZnVuY3Rpb24gKHByZXZwb2ludCwgY3VycnBvaW50KSB7DQorICAgIGxvY2FsIHByZXZ0YW4sIGN1cnJ0YW4sIHByZXZyYWRpdXMsIGN1cnJyYWRpdXM7DQorDQorICAgIHByZXZ0YW4gPSBhdGFuIChwcmV2cG9pbnQueSAtIGNlbnRlci55LCBwcmV2cG9pbnQueCAtIGNlbnRlci54KTsNCisgICAgY3VycnRhbiA9IGF0YW4gKGN1cnJwb2ludC55IC0gY2VudGVyLnksIGN1cnJwb2ludC54IC0gY2VudGVyLngpOw0KKyAgICBmcmFjdGFsYW5nbGUgPSBmcmFjdGFsYW5nbGUgKyAoY3VycnRhbiAtIHByZXZ0YW4pOw0KKyAgICBwcmV2cmFkaXVzID0gc3FydCAoDQorICAgICAgICBzcSAocHJldnBvaW50LnkgLSBjZW50ZXIueSkgKyBzcSAocHJldnBvaW50LnggLSBjZW50ZXIueCkNCisgICAgKTsNCisgICAgY3VycnJhZGl1cyA9IHNxcnQgKA0KKyAgICAgICAgc3EgKGN1cnJwb2ludC55IC0gY2VudGVyLnkpICsgc3EgKGN1cnJwb2ludC54IC0gY2VudGVyLngpDQorICAgICk7DQorICAgIHJhZGl1cyA9IHJhZGl1cyAvIHByZXZyYWRpdXMgKiBjdXJycmFkaXVzOw0KKyAgICBsZW5ndGggPSByYWRpdXMgLyAyICogc3FydCAoMTIpOw0KK307DQorDQorIyB1c2VyIGludGVyZmFjZSBmdW5jdGlvbnMNCisjDQorIyBiaW5kIGNoYW5nZXMgdG8gdGhlIGZyYWN0YWwgdG8gdXNlciBhY3Rpb25zDQorIw0KK2xlZnR1cCA9IGZ1bmN0aW9uIChkYXRhKSB7DQorICAgIHRyYW5zZm9ybWZyYWN0YWwgKGRhdGEucHBvcywgZGF0YS5wb3MpOw0KKyAgICBkcmF3ZnJhY3RhbCAoKTsNCit9Ow0KK2RvcHMgPSBmdW5jdGlvbiAoKSB7DQorICAgIGxvY2FsIHM7DQorDQorICAgIHMgPSBbJ3gnID0gOCAqIDMwMDsgJ3knID0gMTAuNSAqIDMwMDtdOw0KKyAgICBjYW52YXMgPSBjcmVhdGV3aWRnZXQgKC0xLCBbJ3R5cGUnID0gJ3BzJzsgJ3NpemUnID0gcztdKTsNCisgICAgc2V0d2lkZ2V0YXR0ciAoY2FudmFzLCBbJ3dpbmRvdycgPSB3cmVjdDtdKTsNCisgICAgZHJhd2ZyYWN0YWwgKCk7DQorICAgIGRlc3Ryb3l3aWRnZXQgKGNhbnZhcyk7DQorICAgIGNhbnZhcz1kZWZjYW52YXM7DQorfTsNCit0cmFuc2Zvcm1mcmFjdGFsIChbJ3gnID0gMDsgJ3knID0gMDtdLCBbJ3gnID0gMDsgJ3knID0gMDtdKTsNCitkcmF3ZnJhY3RhbCAoKTsNCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS9oZWxwZXJzL0dyYXBodml6Mi4yNi4zL2xpYi9sZWZ0eS9mcmFjdGFsMi5sZWZ0eSBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL2hlbHBlcnMvR3JhcGh2aXoyLjI2LjMvbGliL2xlZnR5L2ZyYWN0YWwyLmxlZnR5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzYTllNzUKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS9oZWxwZXJzL0dyYXBodml6Mi4yNi4zL2xpYi9sZWZ0eS9mcmFjdGFsMi5sZWZ0eQpAQCAtMCwwICsxLDIxOCBAQAorIw0KKyMgZGF0YSBzdHJ1Y3R1cmVzDQorIw0KK2xlbmd0aCA9IDMwMDsNCitjZW50ZXIgPSBbJ3gnID0gMjAwOyAneScgPSAyNTA7XTsNCityYWRpdXMgPSAyICogbGVuZ3RoIC8gc3FydCAoMTIpOw0KK2ZyYWN0YWxhbmdsZSA9IDA7DQorbWF4bGV2ZWwgPSAyOw0KK3NpemVzID0gWw0KKyAgICAnYnV0dG9uJyA9IFsgJ3gnID0gMTAwOyAneScgPSA0MDsgIF07DQorICAgICdjYW52YXMnID0gWyAneCcgPSA0MDA7ICd5JyA9IDUwMDsgXTsNCisgICAgJ3ZpZXcnICAgPSBbICd4JyA9IDQwMDsgJ3knID0gNjAwOyBdOw0KK107DQorc3EgPSBmdW5jdGlvbiAoeCkgew0KKyAgICByZXR1cm4geCAqIHg7DQorfTsNCisjDQorIyBjcmVhdGUgdmlldyBhbmQgb3RoZXIgd2lkZ2V0cw0KKyMNCitpbml0ID0gZnVuY3Rpb24gKCkgew0KKyAgICB2aWV3ID0gY3JlYXRld2lkZ2V0ICgtMSwgWw0KKyAgICAgICAgJ3R5cGUnID0gJ3ZpZXcnOyAnbmFtZScgPSAnZnJhY3RhbCc7ICdzaXplJyA9IHNpemVzLnZpZXc7DQorICAgIF0pOw0KKw0KKyAgICBhcnJheTEgPSBjcmVhdGV3aWRnZXQgKHZpZXcsIFsNCisgICAgICAgICd0eXBlJyA9ICdhcnJheSc7ICdib3JkZXJ3aWR0aCcgPSAxOyAnbW9kZScgPSAndmVydGljYWwnOw0KKyAgICBdKTsNCisgICAgd2lkZ2V0c1thcnJheTFdLnJlc2l6ZSA9IHJlc2l6ZTsNCisNCisgICAgYXJyYXkyID0gY3JlYXRld2lkZ2V0IChhcnJheTEsIFsNCisgICAgICAgICd0eXBlJyA9ICdhcnJheSc7ICdib3JkZXJ3aWR0aCcgPSAxOyAnbW9kZScgPSAnaG9yaXpvbnRhbCc7DQorICAgIF0pOw0KKyAgICB3aWRnZXRzW2FycmF5Ml0ucmVzaXplID0gcmVzaXplOw0KKw0KKyAgICBhcnJheTMgPSBjcmVhdGV3aWRnZXQgKGFycmF5MiwgWw0KKyAgICAgICAgJ3R5cGUnID0gJ2FycmF5JzsgJ2JvcmRlcndpZHRoJyA9IDE7ICdtb2RlJyA9ICd2ZXJ0aWNhbCc7DQorICAgIF0pOw0KKyAgICB3aWRnZXRzW2FycmF5M10ucmVzaXplID0gcmVzaXplOw0KKw0KKyAgICBtb3JlYnV0dG9uID0gY3JlYXRld2lkZ2V0IChhcnJheTMsIFsNCisgICAgICAgICd0eXBlJyA9ICdidXR0b24nOyAndGV4dCcgPSAnbW9yZSc7DQorICAgIF0pOw0KKyAgICB3aWRnZXRzW21vcmVidXR0b25dLnByZXNzZWQgPSBwcmVzc2VkOw0KKyAgICBsZXNzYnV0dG9uID0gY3JlYXRld2lkZ2V0IChhcnJheTMsIFsNCisgICAgICAgICd0eXBlJyA9ICdidXR0b24nOyAndGV4dCcgPSAnbGVzcyc7DQorICAgIF0pOw0KKyAgICB3aWRnZXRzW2xlc3NidXR0b25dLnByZXNzZWQgPSBwcmVzc2VkOw0KKyAgICBzZXR3aWRnZXRhdHRyIChtb3JlYnV0dG9uLCBbJ3NpemUnID0gc2l6ZXMuYnV0dG9uO10pOw0KKyAgICBzZXR3aWRnZXRhdHRyIChsZXNzYnV0dG9uLCBbJ3NpemUnID0gc2l6ZXMuYnV0dG9uO10pOw0KKw0KKyAgICBhdGV4dCA9IGNyZWF0ZXdpZGdldCAoYXJyYXkyLCBbDQorICAgICAgICAndHlwZScgPSAndGV4dCc7ICdtb2RlJyA9ICdvbmVsaW5lJzsNCisgICAgXSk7DQorICAgIHdpZGdldHNbYXRleHRdLm9uZWxpbmUgPSBvbmVsaW5lOw0KKyAgICBzZXR3aWRnZXRhdHRyIChhdGV4dCwgWw0KKyAgICAgICAgJ3NpemUnID0gWyd4JyA9IHNpemVzLmJ1dHRvbi54OyAneScgPSBzaXplcy5idXR0b24ueSAqIDI7XTsNCisgICAgXSk7DQorDQorICAgIHNjcm9sbCA9IGNyZWF0ZXdpZGdldCAoYXJyYXkxLCBbJ3R5cGUnID0gJ3Njcm9sbCc7XSk7DQorICAgIGNhbnZhcyA9IGNyZWF0ZXdpZGdldCAoc2Nyb2xsLCBbJ3R5cGUnID0gJ2NhbnZhcyc7XSk7DQorICAgIHdyZWN0ID0gWzAgPSBbJ3gnID0gMDsgJ3knID0gMDtdOyAxID0gc2l6ZXMuY2FudmFzO107DQorICAgIHNldHdpZGdldGF0dHIgKGNhbnZhcywgWyd3aW5kb3cnID0gd3JlY3Q7ICd2aWV3cG9ydCcgPSB3cmVjdFsxXTtdKTsNCit9Ow0KKyMNCisjIGRyYXdpbmcgZnVuY3Rpb25zDQorIw0KKyMgZHJhdyBhIEtvY2ggY3VydmUgKGEgYGBzbm93Zmxha2UnJyBmcmFjdGFsKQ0KKyMNCisjIHN0YXJ0IHdpdGggYSB0cmlhbmdsZSBhbmQga2VlcCByZXBsYWNpbmcgZWRnZXMNCisjIHdpdGggdGhlIGNvbnN0cnVjdDogXy9cXw0KKyMgdW50aWwgdGhlIHJlY3Vyc2lvbiBsZXZlbCByZWFjaGVzICdtYXhsZXZlbCcNCisjDQorZnJhY3RhbCA9IGZ1bmN0aW9uIChsZXZlbCwgbGVuZ3RoLCBhbmdsZSkgew0KKyAgICBsb2NhbCBubGVuZ3RoLCBuZXdwZW5wb3M7DQorDQorICAgIGlmIChsZXZlbCA+PSBtYXhsZXZlbCkgew0KKyAgICAgICAgbmV3cGVucG9zLnggPSBwZW5wb3MueCArIGxlbmd0aCAqIGNvcyAoYW5nbGUpOw0KKyAgICAgICAgbmV3cGVucG9zLnkgPSBwZW5wb3MueSArIGxlbmd0aCAqIHNpbiAoYW5nbGUpOw0KKyAgICAgICAgbGluZSAoY2FudmFzLCBudWxsLCBwZW5wb3MsIG5ld3BlbnBvcywgWydjb2xvcicgPSAxO10pOw0KKyAgICAgICAgcGVucG9zID0gbmV3cGVucG9zOw0KKyAgICAgICAgcmV0dXJuOw0KKyAgICB9DQorICAgIG5sZW5ndGggPSBsZW5ndGggLyAzOw0KKyAgICBmcmFjdGFsIChsZXZlbCArIDEsIG5sZW5ndGgsIGFuZ2xlKTsNCisgICAgZnJhY3RhbCAobGV2ZWwgKyAxLCBubGVuZ3RoLCBhbmdsZSArIDYwKTsNCisgICAgZnJhY3RhbCAobGV2ZWwgKyAxLCBubGVuZ3RoLCBhbmdsZSAtIDYwKTsNCisgICAgZnJhY3RhbCAobGV2ZWwgKyAxLCBubGVuZ3RoLCBhbmdsZSk7DQorfTsNCityZWRyYXdmcmFjdGFsID0gZnVuY3Rpb24gKCkgew0KKyAgICBjbGVhciAoY2FudmFzKTsNCisgICAgc2V0cGljayAoY2FudmFzLCBjZW50ZXIsIHdyZWN0KTsNCisgICAgcGVucG9zID0gWw0KKyAgICAgICAgJ3gnID0gY2VudGVyLnggKyBjb3MgKGZyYWN0YWxhbmdsZSArIDIxMCkgKiByYWRpdXM7DQorICAgICAgICAneScgPSBjZW50ZXIueSArIHNpbiAoZnJhY3RhbGFuZ2xlICsgMjEwKSAqIHJhZGl1czsNCisgICAgXTsNCisgICAgZnJhY3RhbCAoMCwgbGVuZ3RoLCBmcmFjdGFsYW5nbGUgKyAgNjApOw0KKyAgICBmcmFjdGFsICgwLCBsZW5ndGgsIGZyYWN0YWxhbmdsZSAtICA2MCk7DQorICAgIGZyYWN0YWwgKDAsIGxlbmd0aCwgZnJhY3RhbGFuZ2xlIC0gMTgwKTsNCisgICAgcmVtb3ZlICgncGVucG9zJyk7DQorfTsNCisjDQorIyBlZGl0aW5nIGZ1bmN0aW9ucw0KKyMNCisjIHRyYW5zZm9ybSB0aGUgZnJhY3RhbC4NCisjDQorIyBtYXAgcG9pbnQgJ3ByZXZwb2ludCcgdG8gcG9pbnQgJ2N1cnJwb2ludCcNCisjIHdpdGggcmVzcGVjdCB0byB0aGUgY2VudGVyIG9mIHRoZSBmcmFjdGFsLg0KKyMNCit0cmFuc2Zvcm1mcmFjdGFsID0gZnVuY3Rpb24gKHByZXZwb2ludCwgY3VycnBvaW50KSB7DQorICAgIGxvY2FsIHByZXZ0YW4sIGN1cnJ0YW4sIHByZXZyYWRpdXMsIGN1cnJyYWRpdXM7DQorDQorICAgIHByZXZ0YW4gPSBhdGFuIChwcmV2cG9pbnQueSAtIGNlbnRlci55LCBwcmV2cG9pbnQueCAtIGNlbnRlci54KTsNCisgICAgY3VycnRhbiA9IGF0YW4gKGN1cnJwb2ludC55IC0gY2VudGVyLnksIGN1cnJwb2ludC54IC0gY2VudGVyLngpOw0KKyAgICBmcmFjdGFsYW5nbGUgPSBmcmFjdGFsYW5nbGUgKyAoY3VycnRhbiAtIHByZXZ0YW4pOw0KKyAgICBwcmV2cmFkaXVzID0gc3FydCAoDQorICAgICAgICBzcSAocHJldnBvaW50LnkgLSBjZW50ZXIueSkgKyBzcSAocHJldnBvaW50LnggLSBjZW50ZXIueCkNCisgICAgKTsNCisgICAgY3VycnJhZGl1cyA9IHNxcnQgKA0KKyAgICAgICAgc3EgKGN1cnJwb2ludC55IC0gY2VudGVyLnkpICsgc3EgKGN1cnJwb2ludC54IC0gY2VudGVyLngpDQorICAgICk7DQorICAgIHJhZGl1cyA9IHJhZGl1cyAvIHByZXZyYWRpdXMgKiBjdXJycmFkaXVzOw0KKyAgICBsZW5ndGggPSByYWRpdXMgLyAyICogc3FydCAoMTIpOw0KK307DQorIw0KKyMgbWFpbiBhY3Rpb25zDQorIw0KK3JlZHJhdyA9IGZ1bmN0aW9uIChkYXRhKSB7DQorICAgIHJlZHJhd2ZyYWN0YWwgKCk7DQorfTsNCitjaGFuZ2VtYXhsZXZlbCA9IGZ1bmN0aW9uIChkbikgew0KKyAgICBtYXhsZXZlbCA9IG1heGxldmVsICsgZG47DQorICAgIGlmIChtYXhsZXZlbCA8IDApDQorICAgICAgICBtYXhsZXZlbCA9IDA7DQorICAgIHJlZHJhd2ZyYWN0YWwgKCk7DQorfTsNCityZXNpemUgPSBmdW5jdGlvbiAoZGF0YSkgew0KKyAgICBsb2NhbCByZXQ7DQorICAgIGlmIChkYXRhLndpZGdldCA9PSBhcnJheTEpIHsNCisgICAgICAgIHJldCA9IFsNCisgICAgICAgICAgICBhcnJheTIgPSBbDQorICAgICAgICAgICAgICAgICd4JyA9IGRhdGEuc2l6ZS54Ow0KKyAgICAgICAgICAgICAgICAneScgPSBzaXplcy5idXR0b24ueSAqIDI7DQorICAgICAgICAgICAgXTsNCisgICAgICAgICAgICBzY3JvbGwgPSBbDQorICAgICAgICAgICAgICAgICd4JyA9IGRhdGEuc2l6ZS54Ow0KKyAgICAgICAgICAgICAgICAneScgPSBkYXRhLnNpemUueSAtIHNpemVzLmJ1dHRvbi55ICogMjsNCisgICAgICAgICAgICBdOw0KKyAgICAgICAgXTsNCisgICAgfSBlbHNlIGlmIChkYXRhLndpZGdldCA9PSBhcnJheTIpIHsNCisgICAgICAgIHJldCA9IFsNCisgICAgICAgICAgICBhcnJheTMgPSBbDQorICAgICAgICAgICAgICAgICd4JyA9IHNpemVzLmJ1dHRvbi54Ow0KKyAgICAgICAgICAgICAgICAneScgPSAyICogc2l6ZXMuYnV0dG9uLnk7DQorICAgICAgICAgICAgXTsNCisgICAgICAgICAgICBhdGV4dCA9IFsNCisgICAgICAgICAgICAgICAgJ3gnID0gZGF0YS5zaXplLnggLSBzaXplcy5idXR0b24ueDsNCisgICAgICAgICAgICAgICAgJ3knID0gMiAqIHNpemVzLmJ1dHRvbi55Ow0KKyAgICAgICAgICAgIF07DQorICAgICAgICBdOw0KKyAgICB9IGVsc2UgaWYgKGRhdGEud2lkZ2V0ID09IGFycmF5Mykgew0KKyAgICAgICAgcmV0ID0gWw0KKyAgICAgICAgICAgIG1vcmVidXR0b24gPSBzaXplcy5idXR0b247DQorICAgICAgICAgICAgbGVzc2J1dHRvbiA9IHNpemVzLmJ1dHRvbjsNCisgICAgICAgIF07DQorICAgIH0NCisgICAgcmV0dXJuIHJldDsNCit9Ow0KKyMNCisjIHVzZXIgaW50ZXJmYWNlIGZ1bmN0aW9ucw0KKyMNCisjIGJpbmQgY2hhbmdlcyB0byB0aGUgZnJhY3RhbCB0byB1c2VyIGFjdGlvbnMNCisjDQorbGVmdHVwID0gZnVuY3Rpb24gKGRhdGEpIHsNCisgICAgdHJhbnNmb3JtZnJhY3RhbCAoZGF0YS5wcG9zLCBkYXRhLnBvcyk7DQorICAgIHJlZHJhd2ZyYWN0YWwgKCk7DQorfTsNCittZW51ID0gWw0KKyAgICAwID0gJ21vcmUnOw0KKyAgICAxID0gJ2xlc3MnOw0KK107DQorZG9tZW51ID0gZnVuY3Rpb24gKGkpIHsNCisgICAgbG9jYWwgczsNCisgICAgcyA9IG1lbnVbaV07DQorICAgIGlmIChzID09ICdtb3JlJykNCisgICAgICAgIGNoYW5nZW1heGxldmVsICgxKTsNCisgICAgZWxzZSBpZiAocyA9PSAnbGVzcycpDQorICAgICAgICBjaGFuZ2VtYXhsZXZlbCAoLTEpOw0KK307DQorcmlnaHRkb3duID0gZnVuY3Rpb24gKGRhdGEpIHsNCisgICAgZG9tZW51IChkaXNwbGF5bWVudSAoY2FudmFzLCBtZW51KSk7DQorfTsNCitwcmVzc2VkID0gZnVuY3Rpb24gKGRhdGEpIHsNCisgICAgaWYgKGRhdGEud2lkZ2V0ID09IG1vcmVidXR0b24pDQorICAgICAgICBjaGFuZ2VtYXhsZXZlbCAoMSk7DQorICAgIGVsc2UgaWYgKGRhdGEud2lkZ2V0ID09IGxlc3NidXR0b24pDQorICAgICAgICBjaGFuZ2VtYXhsZXZlbCAoLTEpOw0KK307DQorb25lbGluZSA9IGZ1bmN0aW9uIChkYXRhKSB7DQorICAgIGxvY2FsIGRuOw0KKyAgICBkbiA9IHN0b24gKGRhdGEudGV4dCk7DQorICAgIGlmIChkbiA+IDAgfCBkbiA8IDApDQorICAgICAgICBjaGFuZ2VtYXhsZXZlbCAoZG4gLSBtYXhsZXZlbCk7DQorfTsNCisjDQorIyBwb3N0c2NyaXB0IGdlbmVyYXRpb24NCisjDQorZG9wcyA9IGZ1bmN0aW9uICgpIHsNCisgICAgbG9jYWwgcjsNCisNCisgICAgciA9IFswID0gWyd4JyA9IDA7ICd5JyA9IDA7XTsgMSA9IFsneCcgPSA4ICogMzAwOyAneScgPSAxMC41ICogMzAwO107XTsNCisgICAgY2FudmFzID0gb3BlbmNhbnZhcyAoJ3BzY2FudmFzJywgJycsIHIpOw0KKyAgICBzZXR3aWRnZXRhdHRyIChjYW52YXMsIFsnd2luZG93JyA9IHdyZWN0O10pOw0KKyAgICByZWRyYXcgKCk7DQorICAgIGNsb3NlY2FudmFzIChjYW52YXMpOw0KKyAgICBjYW52YXM9ZGVmY2FudmFzOw0KK307DQoraW5pdCAoKTsNCisjdHh0dmlldyAoJ29mZicpOw0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL2hlbHBlcnMvR3JhcGh2aXoyLjI2LjMvbGliL2xlZnR5L2xlZnR5LnBzcCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL2hlbHBlcnMvR3JhcGh2aXoyLjI2LjMvbGliL2xlZnR5L2xlZnR5LnBzcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYTE2ZTcwCi0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvaGVscGVycy9HcmFwaHZpejIuMjYuMy9saWIvbGVmdHkvbGVmdHkucHNwCkBAIC0wLDAgKzEsODAgQEAKKy9CT1ggew0KKyAgICAvYm94eTEgZXhjaCBkZWYgL2JveHgxIGV4Y2ggZGVmIC9ib3h5MCBleGNoIGRlZiAvYm94eDAgZXhjaCBkZWYNCisgICAgYm94eDAgYm94eTAgbW92ZXRvIGJveHgxIGJveHkwIGxpbmV0bw0KKyAgICBib3h4MSBib3h5MSBsaW5ldG8gYm94eDAgYm94eTEgbGluZXRvDQorICAgIGNsb3NlcGF0aA0KK30gZGVmDQorL1NDUCB7IHN0cm9rZSBpbml0Y2xpcCBuZXdwYXRoIEJPWCBjbGlwIG5ld3BhdGggfSBkZWYNCisvQ0wgeyBzdHJva2Ugc2V0cmdiY29sb3IgfSBkZWYNCisvRE8geyBzdHJva2UgfSBkZWYNCisvTlAgeyBuZXdwYXRoIH0gZGVmDQorL0ZJIHsgZmlsbCB9IGRlZg0KKy9MSSB7IG1vdmV0byBsaW5ldG8gfSBkZWYNCisvQ1QgeyBjdXJ2ZXRvIH0gZGVmDQorL0FSIHsNCisgICAgL2FuZzIgZXhjaCBkZWYgL2FuZzEgZXhjaCBkZWYNCisgICAgL3JhZGl1cyBleGNoIGRlZiAveTJ4IGV4Y2ggZGVmIC9jeSBleGNoIGRlZiAvY3ggZXhjaCBkZWYNCisgICAgZ3NhdmUNCisgICAgICAgIGN4IGN5IHRyYW5zbGF0ZSAxIHkyeCBzY2FsZSAwIDAgcmFkaXVzIGFuZzEgYW5nMiBhcmMgc3Ryb2tlDQorICAgIGdyZXN0b3JlDQorfSBkZWYNCisvQVJGIHsNCisgICAgL2FuZzIgZXhjaCBkZWYgL2FuZzEgZXhjaCBkZWYNCisgICAgL3JhZGl1cyBleGNoIGRlZiAveTJ4IGV4Y2ggZGVmIC9jeSBleGNoIGRlZiAvY3ggZXhjaCBkZWYNCisgICAgZ3NhdmUNCisgICAgICAgIGN4IGN5IHRyYW5zbGF0ZSAxIHkyeCBzY2FsZSAwIDAgcmFkaXVzIGFuZzEgYW5nMiBhcmMgZmlsbA0KKyAgICBncmVzdG9yZQ0KK30gZGVmDQorL1RYVCB7DQorICAgIC90ZXh0aCBleGNoIGRlZg0KKyAgICAvdGV4dGYgZXhjaCBkZWYNCisgICAgL3RleHRuIGV4Y2ggZGVmDQorICAgIC90ZXh0cyBleGNoIGRlZg0KKyAgICAvdGV4dHlqIGV4Y2ggZGVmIC90ZXh0eSBleGNoIGRlZg0KKyAgICAvdGV4dHhqIGV4Y2ggZGVmIC90ZXh0eCBleGNoIGRlZg0KKyAgICB0ZXh0ZiBmaW5kZm9udCB0ZXh0aCBzY2FsZWZvbnQgZHVwIHNldGZvbnQNCisgICAgL0ZvbnRCQm94IGdldCAxIGdldCAxMDAwIGRpdiB0ZXh0aCBtdWwgL3RleHRibCBleGNoIGRlZg0KKyAgICAvdGV4dHRoIHRleHRoIHRleHRuIG11bCBkZWYgL3RleHR0dyAwIGRlZg0KKyAgICAwIDEgdGV4dG4gMSBzdWIgew0KKyAgICAgICAgdGV4dHMgZXhjaCBnZXQgMCBnZXQgc3RyaW5nd2lkdGggcG9wDQorICAgICAgICBkdXAgdGV4dHR3IGd0IHsgL3RleHR0dyBleGNoIGRlZiB9IHsgcG9wIH0gaWZlbHNlDQorICAgIH0gZm9yDQorICAgIHRleHR5aiAoYikgZXEgeyAvdHkgdGV4dHkgdGV4dHRoIGFkZCB0ZXh0YmwgYWRkIGRlZiB9IGlmDQorICAgIHRleHR5aiAoZCkgZXEgeyAvdHkgdGV4dHkgdGV4dHRoIGFkZCBkZWYgfSBpZg0KKyAgICB0ZXh0eWogKGMpIGVxIHsgL3R5IHRleHR5IHRleHR0aCAyIGRpdiBhZGQgZGVmIH0gaWYNCisgICAgdGV4dHlqICh1KSBlcSB7IC90eSB0ZXh0eSBkZWYgfSBpZg0KKyAgICAvdHkgdHkgdGV4dGJsIHN1YiBkZWYNCisgICAgdGV4dHhqIChsKSBlcSB7IC90eCB0ZXh0eCBkZWYgfSBpZg0KKyAgICB0ZXh0eGogKGMpIGVxIHsgL3R4IHRleHR4IHRleHR0dyAyIGRpdiBzdWIgZGVmIH0gaWYNCisgICAgdGV4dHhqIChyKSBlcSB7IC90eCB0ZXh0eCB0ZXh0dHcgc3ViIGRlZiB9IGlmDQorICAgIDAgMSB0ZXh0biAxIHN1YiB7DQorICAgICAgICAvdHkgdHkgdGV4dGggc3ViIGRlZg0KKyAgICAgICAgdGV4dHMgZXhjaCBnZXQgZHVwIDAgZ2V0IC90cyBleGNoIGRlZiAxIGdldCAvdGogZXhjaCBkZWYNCisgICAgICAgIHRqIChsKSBlcSB7IHR4IHR5IG1vdmV0byB0cyBzaG93IH0gaWYNCisgICAgICAgIHRqIChuKSBlcSB7DQorICAgICAgICAgICAgdHggdGV4dHR3IHRzIHN0cmluZ3dpZHRoIHBvcCBzdWIgMiBkaXYgYWRkIHR5IG1vdmV0byB0cyBzaG93DQorICAgICAgICB9IGlmDQorICAgICAgICB0aiAocikgZXEgew0KKyAgICAgICAgICAgIHR4IHRleHR0dyB0cyBzdHJpbmd3aWR0aCBwb3Agc3ViIGFkZCB0eSBtb3ZldG8gdHMgc2hvdw0KKyAgICAgICAgfSBpZg0KKyAgICB9IGZvcg0KK30gZGVmDQorDQorL2NvbG9yaW1hZ2Ugd2hlcmUgew0KKyAgICBwb3ANCit9IHsNCisgICAgL2J3cHJvYyB7DQorICAgICAgICByZ2Jwcm9jIGR1cCBsZW5ndGggMyBpZGl2IHN0cmluZyAwIDMgMCA1IC0xIHJvbGwgew0KKyAgICAgICAgICAgIGFkZCAyIDEgcm9sbCAxIHN1YiBkdXAgMCBlcSB7DQorICAgICAgICAgICAgICAgIHBvcCAzIGlkaXYgMyAtMSByb2xsIGR1cCA0IC0xIHJvbGwNCisgICAgICAgICAgICAgICAgZHVwIDMgMSByb2xsIDUgLTEgcm9sbCBwdXQgMSBhZGQgMyAwDQorICAgICAgICAgICAgfSB7DQorICAgICAgICAgICAgICAgIDIgMSByb2xsDQorICAgICAgICAgICAgfSBpZmVsc2UNCisgICAgICAgIH0gZm9yYWxsDQorICAgICAgICBwb3AgcG9wIHBvcA0KKyAgICB9IGRlZg0KKyAgICAvY29sb3JpbWFnZSB7DQorICAgICAgICBwb3AgcG9wIC9yZ2Jwcm9jIGV4Y2ggZGVmIHtid3Byb2N9IGltYWdlDQorICAgIH0gYmluZCBkZWYNCit9IGlmZWxzZQ0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL2hlbHBlcnMvR3JhcGh2aXoyLjI2LjMvbGliL2xlZnR5L3NsaWRlcy5sZWZ0eSBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL2hlbHBlcnMvR3JhcGh2aXoyLjI2LjMvbGliL2xlZnR5L3NsaWRlcy5sZWZ0eQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDU0NDNjCi0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvaGVscGVycy9HcmFwaHZpejIuMjYuMy9saWIvbGVmdHkvc2xpZGVzLmxlZnR5CkBAIC0wLDAgKzEsMTA5IEBACitsb2FkICgnZGVmLmxlZnR5Jyk7DQorZGVmaW5pdCAoKTsNCisjDQorIyBpbml0aWFsaXplIHdpbmRvdyBkYXRhDQorIw0KK2NhbnZhcyA9IGRlZmNhbnZhczsNCit3cmVjdCA9IFswID0gWyd4JyA9IDA7ICd5JyA9IDA7XTsgMSA9IFsneCcgPSA4MDA7ICd5JyA9IDEwMDA7XTtdOw0KK2xtYXJnaW4gPSAxMDA7DQord2lkdGggPSA4MDA7DQoraGVpZ2h0ID0gMTAwMDsNCitzZXR3aWRnZXRhdHRyIChjYW52YXMsIFsnd2luZG93JyA9IHdyZWN0O10pOw0KK2ZvbnRzID0gWw0KKyAgICAndGltcicgPSBbDQorICAgICAgICAxNCA9ICd0aW1yMTQnOw0KKyAgICAgICAgMTggPSAndGltcjE4JzsNCisgICAgICAgIDI0ID0gJ3RpbXIyNCc7DQorICAgIF07DQorICAgICdjb3VycicgPSBbDQorICAgICAgICAxNCA9ICdjb3VycjE0JzsNCisgICAgICAgIDE4ID0gJ2NvdXJyMTgnOw0KKyAgICAgICAgMjQgPSAnY291cnIyNCc7DQorICAgIF07DQorXTsNCit4MnBzID0gWw0KKyAgICAndGltcjI0JyA9ICdUaW1lcy1Sb21hbic7DQorICAgICd0aW1yMTgnID0gJ1RpbWVzLVJvbWFuJzsNCisgICAgJ3RpbXIxNCcgPSAnVGltZXMtUm9tYW4nOw0KKyAgICAnY291cnIyNCcgPSAnQ291cmllcic7DQorICAgICdjb3VycjE4JyA9ICdDb3VyaWVyJzsNCisgICAgJ2NvdXJyMTQnID0gJ0NvdXJpZXInOw0KK107DQorDQorY2FsYyA9IGZ1bmN0aW9uICgpIHsNCisgICAgbG9jYWwgaSwgaiwgY3BvcywgdHNpeiwgZGlzdCwgc2xpZGVwOw0KKyAgICB0c2l6ID0gWyd4JyA9IDA7ICd5JyA9IDA7XTsNCisgICAgZm9yIChpID0gMDsgc2xpZGVzW2ldOyBpID0gaSArIDEpIHsNCisgICAgICAgIHNsaWRlcCA9IHNsaWRlc1tpXTsNCisgICAgICAgIGlmIChzbGlkZXAuc2tpcCkgew0KKyAgICAgICAgICAgIHRzaXoueSA9IHRzaXoueSArIHNsaWRlcC5za2lwOw0KKyAgICAgICAgfSBlbHNlIHsNCisgICAgICAgICAgICBmb3IgKGogPSAwOyBzbGlkZXAudGV4dFtqXTsgaiA9IGogKyAxKSB7DQorICAgICAgICAgICAgICAgIGlmIChqID4gMCkNCisgICAgICAgICAgICAgICAgICAgIHRzaXoueSA9IHRzaXoueSArIDU7DQorICAgICAgICAgICAgICAgIGlmICh+c2xpZGVwLmZvbnQpDQorICAgICAgICAgICAgICAgICAgICBzbGlkZXAuZm9udCA9IHNsaWRlcy5mb250Ow0KKyAgICAgICAgICAgICAgICBpZiAofnNsaWRlcC5zaXplKQ0KKyAgICAgICAgICAgICAgICAgICAgc2xpZGVwLnNpemUgPSBzbGlkZXMuc2l6ZTsNCisgICAgICAgICAgICAgICAgaWYgKH5zbGlkZXAuanVzdCkNCisgICAgICAgICAgICAgICAgICAgIHNsaWRlcC5qdXN0ID0gc2xpZGVzLmp1c3Q7DQorICAgICAgICAgICAgICAgIHNsaWRlcC50c2l6W2pdID0gdGV4dHNpemUgKGNhbnZhcywgc2xpZGVwLnRleHRbal0sDQorICAgICAgICAgICAgICAgICAgICAgICAgZm9udHNbc2xpZGVwLmZvbnRdW3NsaWRlcC5zaXplXSwgMCk7DQorICAgICAgICAgICAgICAgIHRzaXoueSA9IHRzaXoueSArIHNsaWRlcC50c2l6W2pdLnk7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgfQ0KKyAgICB9DQorICAgIGRpc3QgPSAoaGVpZ2h0IC0gdHNpei55KSAvIChpICsgMSk7DQorICAgIGNwb3MgPSBbJ3gnID0gbG1hcmdpbjsgJ3knID0gaGVpZ2h0IC0gZGlzdDtdOw0KKyAgICBmb3IgKGkgPSAwOyBzbGlkZXNbaV07IGkgPSBpICsgMSkgew0KKyAgICAgICAgc2xpZGVwID0gc2xpZGVzW2ldOw0KKyAgICAgICAgaWYgKHNsaWRlcC5za2lwKSB7DQorICAgICAgICAgICAgY3Bvcy55ID0gY3Bvcy55IC0gc2xpZGVwLnNraXAgLSBkaXN0Ow0KKyAgICAgICAgfSBlbHNlIHsNCisgICAgICAgICAgICBmb3IgKGogPSAwOyBzbGlkZXAudGV4dFtqXTsgaiA9IGogKyAxKSB7DQorICAgICAgICAgICAgICAgIGlmIChqID4gMCkNCisgICAgICAgICAgICAgICAgICAgIGNwb3MueSA9IGNwb3MueSAtIDU7DQorICAgICAgICAgICAgICAgIGlmIChzbGlkZXAuanVzdCA9PSAwKQ0KKyAgICAgICAgICAgICAgICAgICAgc2xpZGVwLnRwb3Nbal0ueCA9IGNwb3MueDsNCisgICAgICAgICAgICAgICAgZWxzZQ0KKyAgICAgICAgICAgICAgICAgICAgc2xpZGVwLnRwb3Nbal0ueCA9IHdpZHRoIC8gMjsNCisgICAgICAgICAgICAgICAgY3Bvcy55ID0gY3Bvcy55IC0gc2xpZGVwLnRzaXpbal0ueTsNCisgICAgICAgICAgICAgICAgc2xpZGVwLnRwb3Nbal0ueSA9IGNwb3MueTsNCisgICAgICAgICAgICB9DQorICAgICAgICAgICAgY3Bvcy55ID0gY3Bvcy55IC0gZGlzdDsNCisgICAgICAgIH0NCisgICAgfQ0KK307DQorcmVkcmF3ID0gZnVuY3Rpb24gKCkgew0KKyAgICBsb2NhbCBpLCBqLCBzbGlkZXA7DQorICAgIGZvciAoaSA9IDA7IHNsaWRlc1tpXTsgaSA9IGkgKyAxKSB7DQorICAgICAgICBzbGlkZXAgPSBzbGlkZXNbaV07DQorICAgICAgICBpZiAofnNsaWRlcC5za2lwKQ0KKyAgICAgICAgICAgIGZvciAoaiA9IDA7IHNsaWRlcC50ZXh0W2pdOyBqID0gaiArIDEpDQorICAgICAgICAgICAgICAgIHRleHQgKGNhbnZhcywgc2xpZGVwLCBzbGlkZXAudHBvc1tqXSwgc2xpZGVwLnRleHRbal0sDQorICAgICAgICAgICAgICAgICAgICAgICAgZm9udHNbc2xpZGVwLmZvbnRdW3NsaWRlcC5zaXplXSwgMCwgc2xpZGVwLmp1c3QpOw0KKyAgICB9DQorfTsNCitkb3BzID0gZnVuY3Rpb24gKCkgew0KKyAgICBsb2NhbCBpLCBqLCBzbGlkZXAsIHI7DQorDQorICAgIHIgPSBbMCA9IFsneCcgPSAwOyAneScgPSAwO107IDEgPSBbJ3gnID0gOCAqIDMwMDsgJ3knID0gMTAuNSAqIDMwMDtdO107DQorICAgIGNhbnZhcyA9IGNyZWF0ZXdpZGdldCAoLTEsIFsndHlwZScgPSAncHMnOyAnb3JpZ2luJyA9IHJbMF07ICdzaXplJyA9IHJbMV0NCis7XSk7DQorICAgIHNldHdpZGdldGF0dHIgKGNhbnZhcywgWyd3aW5kb3cnID0gd3JlY3Q7XSk7DQorICAgIGZvciAoaSA9IDA7IHNsaWRlc1tpXTsgaSA9IGkgKyAxKSB7DQorICAgICAgICBzbGlkZXAgPSBzbGlkZXNbaV07DQorICAgICAgICBpZiAofnNsaWRlcC5za2lwKQ0KKyAgICAgICAgICAgIGZvciAoaiA9IDA7IHNsaWRlcC50ZXh0W2pdOyBqID0gaiArIDEpDQorICAgICAgICAgICAgICAgIHRleHQgKGNhbnZhcywgc2xpZGVwLCBzbGlkZXAudHBvc1tqXSwgc2xpZGVwLnRleHRbal0sDQorICAgICAgICAgICAgICAgICAgICAgICAgeDJwc1tmb250c1tzbGlkZXAuZm9udF1bc2xpZGVwLnNpemVdXSwNCisgICAgICAgICAgICAgICAgICAgICAgICBzbGlkZXAudHNpeltqXS55LCBzbGlkZXAuanVzdCwgMSk7DQorICAgIH0NCisgICAgZGVzdHJveXdpZGdldCAoY2FudmFzKTsNCisgICAgY2FudmFzPWRlZmNhbnZhczsNCit9Ow0KK2RvaXQgPSBmdW5jdGlvbiAoKSB7DQorICAgIGNhbGMgKCk7DQorICAgIHJlZHJhdyAoKTsNCisgICAgZG9wcyAoKTsNCit9Ow0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL2hlbHBlcnMvR3JhcGh2aXoyLjI2LjMvbGliL2xlZnR5L3RyZWUubGVmdHkgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS9oZWxwZXJzL0dyYXBodml6Mi4yNi4zL2xpYi9sZWZ0eS90cmVlLmxlZnR5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2NDVhZDEKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS9oZWxwZXJzL0dyYXBodml6Mi4yNi4zL2xpYi9sZWZ0eS90cmVlLmxlZnR5CkBAIC0wLDAgKzEsMTk1IEBACitsb2FkICgnZGVmLmxlZnR5Jyk7DQorZGVmaW5pdCAoKTsNCisjDQorIyBpbml0aWFsaXplIHdpbmRvdyBkYXRhDQorIw0KK2NhbnZhcyA9IGRlZmNhbnZhczsNCit3cmVjdCA9IFswID0gWyd4JyA9IC01OyAneScgPSAwO107IDEgPSBbJ3gnID0gNDEwOyAneScgPSA1MDA7XTtdOw0KK3NldHdpZGdldGF0dHIgKGNhbnZhcywgWyd3aW5kb3cnID0gd3JlY3Q7XSk7DQorIw0KKyMgZGF0YSBzdHJ1Y3R1cmVzDQorIw0KK25vZGVhcnJheSA9IFtdOw0KK25vZGVudW0gPSAwOw0KK2Rpc3QgPSBbJ3gnID0gNDA7ICd5JyA9IDQwO107DQorZGVmc2l6ZSA9IFsneCcgPSAxMDsgJ3knID0gMTA7XTsNCitmb250bmFtZSA9ICdmaXhlZCc7DQorZm9udHNpemUgPSAxODsNCit0cmVlID0gbnVsbDsNCisNCisjIGRyYXdpbmcgZnVuY3Rpb25zDQorIw0KK2JveG5vZGUgPSBmdW5jdGlvbiAobm9kZSkgew0KKyAgICBsb2NhbCBjZW50ZXI7DQorICAgIGJveCAoY2FudmFzLCBub2RlLCBub2RlLnJlY3QsIFsnY29sb3InID0gMDsgJ2ZpbGwnID0gJ29uJztdKTsNCisgICAgYm94IChjYW52YXMsIG5vZGUsIG5vZGUucmVjdCk7DQorICAgIGNlbnRlciA9IFsNCisgICAgICAgICd4JyA9IChub2RlLnJlY3RbMF0ueCArIG5vZGUucmVjdFsxXS54KSAvIDI7DQorICAgICAgICAneScgPSAobm9kZS5yZWN0WzBdLnkgKyBub2RlLnJlY3RbMV0ueSkgLyAyOw0KKyAgICBdOw0KKyAgICBpZiAobm9kZS5uYW1lKQ0KKyAgICAgICAgdGV4dCAoY2FudmFzLCBub2RlLCBjZW50ZXIsIG5vZGUubmFtZSwgZm9udG5hbWUsIGZvbnRzaXplLCAnY2MnKTsNCit9Ow0KK2NpcmNsZW5vZGUgPSBmdW5jdGlvbiAobm9kZSkgew0KKyAgICBsb2NhbCBjZW50ZXIsIHJhZGl1czsNCisgICAgY2VudGVyID0gWw0KKyAgICAgICAgJ3gnID0gKG5vZGUucmVjdFswXS54ICsgbm9kZS5yZWN0WzFdLngpIC8gMjsNCisgICAgICAgICd5JyA9IChub2RlLnJlY3RbMF0ueSArIG5vZGUucmVjdFsxXS55KSAvIDI7DQorICAgIF07DQorICAgIHJhZGl1cyA9IFsNCisgICAgICAgICd4JyA9IGNlbnRlci54IC0gbm9kZS5yZWN0WzBdLng7DQorICAgICAgICAneScgPSBjZW50ZXIueSAtIG5vZGUucmVjdFswXS55Ow0KKyAgICBdOw0KKyAgICBhcmMgKGNhbnZhcywgbm9kZSwgY2VudGVyLCByYWRpdXMsIFsnY29sb3InID0gMDsgJ2ZpbGwnID0gJ29uJztdKTsNCisgICAgYXJjIChjYW52YXMsIG5vZGUsIGNlbnRlciwgcmFkaXVzKTsNCisgICAgaWYgKG5vZGUubmFtZSkNCisgICAgICAgIHRleHQgKGNhbnZhcywgbm9kZSwgY2VudGVyLCBub2RlLm5hbWUsIGZvbnRuYW1lLCBmb250c2l6ZSwgJ2NjJyk7DQorfTsNCitkcmF3bm9kZSA9IGJveG5vZGU7DQorZHJhd2VkZ2UgPSBmdW5jdGlvbiAobm9kZTEsIG5vZGUyKSB7DQorICAgIGxpbmUgKGNhbnZhcywgbnVsbCwNCisgICAgICAgICAgICBbDQorICAgICAgICAgICAgICAgICd4JyA9IChub2RlMS5yZWN0WzFdLnggKyBub2RlMS5yZWN0WzBdLngpIC8gMjsNCisgICAgICAgICAgICAgICAgJ3knID0gbm9kZTEucmVjdFswXS55Ow0KKyAgICAgICAgICAgIF0sIFsNCisgICAgICAgICAgICAgICAgJ3gnID0gKG5vZGUyLnJlY3RbMV0ueCArIG5vZGUyLnJlY3RbMF0ueCkgLyAyOw0KKyAgICAgICAgICAgICAgICAneScgPSBub2RlMi5yZWN0WzFdLnk7DQorICAgICAgICAgICAgXSk7DQorfTsNCitkcmF3dHJlZSA9IGZ1bmN0aW9uIChub2RlKSB7DQorICAgIGxvY2FsIGk7DQorICAgIGZvciAoaSBpbiBub2RlYXJyYXkpDQorICAgICAgICBkcmF3bm9kZSAobm9kZWFycmF5W2ldKTsNCisgICAgZHJhd3RyZWVyZWMgKG5vZGUpOw0KK307DQorZHJhd3RyZWVyZWMgPSBmdW5jdGlvbiAobm9kZSkgew0KKyAgICBsb2NhbCBpLCBuOw0KKyAgICBpZiAoKG4gPSB0YWJsZXNpemUgKG5vZGUuY2gpKSA+IDApIHsNCisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpID0gaSArIDEpIHsNCisgICAgICAgICAgICBkcmF3ZWRnZSAobm9kZSwgbm9kZS5jaFtpXSk7DQorICAgICAgICAgICAgZHJhd3RyZWVyZWMgKG5vZGUuY2hbaV0pOw0KKyAgICAgICAgfQ0KKyAgICB9DQorfTsNCityZWRyYXcgPSBmdW5jdGlvbiAoYykgew0KKyAgICBpZiAodHJlZSkNCisgICAgICAgIGRyYXd0cmVlICh0cmVlKTsNCit9Ow0KKw0KKyMgbGF5b3V0IGZ1bmN0aW9ucw0KKyMNCitjb21wbGF5b3V0ID0gZnVuY3Rpb24gKCkgew0KKyAgICBsZWFmeCA9IDA7DQorICAgIGxlYWZyYW5rID0gMDsNCisgICAgZG9sYXlvdXQgKHRyZWUsIHdyZWN0WzFdLnkgLSAxMCk7DQorICAgIHJlbW92ZSAoJ2xlYWZ4Jyk7DQorICAgIHJlbW92ZSAoJ2xlYWZyYW5rJyk7DQorfTsNCitkb2xheW91dCA9IGZ1bmN0aW9uIChub2RlLCBwYXJ5KSB7DQorICAgIGxvY2FsIHIsIG4sIGksIHNpemUsIGxjaHAsIHJjaHA7DQorICAgIHNpemUgPSBub2Rlc2l6ZSAobm9kZSk7DQorICAgIGlmIChub2RlLmNobiA+IDApIHsNCisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBub2RlLmNobjsgaSA9IGkgKyAxKQ0KKyAgICAgICAgICAgIGRvbGF5b3V0IChub2RlLmNoW2ldLCBwYXJ5IC0gc2l6ZS55IC0gZGlzdC55KTsNCisgICAgICAgIG5vZGUucmFuayA9IChub2RlLmNoWzBdLnJhbmsgKyBub2RlLmNoW25vZGUuY2huIC0gMV0ucmFuaykgLyAyOw0KKyAgICAgICAgbGNocCA9IG5vZGUuY2hbMF0ucmVjdDsNCisgICAgICAgIHJjaHAgPSBub2RlLmNoW25vZGUuY2huIC0gMV0ucmVjdDsNCisgICAgICAgIHJbMF0ueCA9IGxjaHBbMF0ueCArICgocmNocFsxXS54IC0gbGNocFswXS54KSAtIHNpemUueCkgLyAyOw0KKyAgICAgICAgclswXS55ID0gcGFyeSAtIHNpemUueTsNCisgICAgICAgIHJbMV0ueCA9IHJbMF0ueCArIHNpemUueDsNCisgICAgICAgIHJbMV0ueSA9IHBhcnk7DQorICAgICAgICBub2RlLnJlY3QgPSByOw0KKyAgICB9IGVsc2Ugew0KKyAgICAgICAgbm9kZS5yYW5rID0gbGVhZnJhbms7DQorICAgICAgICByWzBdLnggPSBsZWFmeDsNCisgICAgICAgIHJbMF0ueSA9IHBhcnkgLSBzaXplLnk7DQorICAgICAgICByWzFdLnggPSByWzBdLnggKyBzaXplLng7DQorICAgICAgICByWzFdLnkgPSBwYXJ5Ow0KKyAgICAgICAgbGVhZnJhbmsgPSBsZWFmcmFuayArIDE7DQorICAgICAgICBsZWFmeCA9IHJbMV0ueCArIGRpc3QueDsNCisgICAgICAgIG5vZGUucmVjdCA9IHI7DQorICAgIH0NCit9Ow0KKw0KKyMgZWRpdGluZyBmdW5jdGlvbnMNCisjDQoraW5vZGUgPSBmdW5jdGlvbiAocG9pbnQsIG5hbWUpIHsNCisgICAgbG9jYWwgaSwgbm51bSwgc2l6ZTsNCisgICAgbm51bSA9IG5vZGVudW07DQorICAgIGlmICh+bmFtZSkNCisgICAgICAgIG5hbWUgPSBhc2sgKCdnaXZlIG5hbWUgb2Ygbm9kZTonKTsNCisgICAgbm9kZWFycmF5W25udW1dLmNoID0gW107DQorICAgIG5vZGVhcnJheVtubnVtXS5jaG4gPSAwOw0KKyAgICBub2RlYXJyYXlbbm51bV0ubmFtZSA9IG5hbWU7DQorICAgIHNpemUgPSBub2Rlc2l6ZSAobm9kZWFycmF5W25udW1dKTsNCisgICAgbm9kZWFycmF5W25udW1dLnJlY3RbMF0gPSBwb2ludDsNCisgICAgbm9kZWFycmF5W25udW1dLnJlY3RbMV0gPSBbJ3gnID0gcG9pbnQueCArIHNpemUueDsgJ3knID0gcG9pbnQueSArIHNpemUueTtdOw0KKyAgICBub2RlbnVtID0gbm9kZW51bSArIDE7DQorICAgIGlmICh+dHJlZSkgew0KKyAgICAgICAgdHJlZSA9IG5vZGVhcnJheVtubnVtXTsNCisgICAgICAgIHRyZWUuZGVwdGggPSAwOw0KKyAgICAgICAgY29tcGxheW91dCAoKTsNCisgICAgICAgIGRyYXd0cmVlICh0cmVlKTsNCisgICAgfSBlbHNlDQorICAgICAgICBkcmF3dHJlZSAobm9kZWFycmF5W25udW1dKTsNCisgICAgcmV0dXJuIG5vZGVhcnJheVtubnVtXTsNCit9Ow0KK2llZGdlID0gZnVuY3Rpb24gKG5vZGUxLCBub2RlMikgew0KKyAgICBub2RlMS5jaFtub2RlMS5jaG5dID0gbm9kZTI7DQorICAgIG5vZGUxLmNobiA9IG5vZGUxLmNobiArIDE7DQorICAgIG5vZGUyLmRlcHRoID0gbm9kZTEuZGVwdGggKyAxOw0KKyAgICBjb21wbGF5b3V0ICgpOw0KKyAgICBjbGVhciAoY2FudmFzKTsNCisgICAgZHJhd3RyZWUgKHRyZWUpOw0KK307DQorZml4ID0gZnVuY3Rpb24gKG5vZGUsIG9wLCBucCkgew0KKyAgICBpZiAobm9kZS5kZXB0aCB+PSAwKQ0KKyAgICAgICAgZGlzdC55ID0gZGlzdC55ICsgKG9wLnkgLSBucC55KSAvIG5vZGUuZGVwdGg7DQorICAgIGlmIChub2RlLnJhbmsgfj0gMCkNCisgICAgICAgIGRpc3QueCA9IGRpc3QueCArIChucC54IC0gb3AueCkgLyBub2RlLnJhbms7DQorICAgIGNvbXBsYXlvdXQgKCk7DQorICAgIGNsZWFyIChjYW52YXMpOw0KKyAgICBkcmF3dHJlZSAodHJlZSk7DQorfTsNCitub2Rlc2l6ZSA9IGZ1bmN0aW9uIChub2RlKSB7DQorICAgIGxvY2FsIHNpejsNCisgICAgaWYgKH4oc2l6ID0gdGV4dHNpemUgKGNhbnZhcywgbm9kZS5uYW1lLCBmb250bmFtZSwgZm9udHNpemUpKSkNCisgICAgICAgIHNpeiA9IGRlZnNpemU7DQorICAgIGVsc2Ugew0KKyAgICAgICAgc2l6LnggPSBzaXoueCArIDg7DQorICAgICAgICBzaXoueSA9IHNpei55ICsgODsNCisgICAgfQ0KKyAgICByZXR1cm4gc2l6Ow0KK307DQorY2hhbmdlbm9kZSA9IGZ1bmN0aW9uIChub2Rlc3R5bGUpIHsNCisgICAgZHJhd25vZGUgPSBub2Rlc3R5bGU7DQorICAgIGNsZWFyIChjYW52YXMpOw0KKyAgICBkcmF3dHJlZSAodHJlZSk7DQorfTsNCisNCisjIHVzZXIgaW50ZXJmYWNlIGZ1bmN0aW9ucw0KKyMNCitsZWZ0ZG93biA9IGZ1bmN0aW9uIChkYXRhKSB7DQorICAgIGlmICh+ZGF0YS5vYmopDQorICAgICAgICBpbm9kZSAoZGF0YS5wb3MsIG51bGwpOw0KK307DQorbGVmdHVwID0gZnVuY3Rpb24gKGRhdGEpIHsNCisgICAgaWYgKGRhdGEucG9iaikNCisgICAgICAgIGZpeCAoZGF0YS5wb2JqLCBkYXRhLnBwb3MsIGRhdGEucG9zKTsNCit9Ow0KK21pZGRsZXVwID0gZnVuY3Rpb24gKGRhdGEpIHsNCisgICAgaWYgKGRhdGEucG9iaiAmIGRhdGEub2JqKQ0KKyAgICAgICAgaWVkZ2UgKGRhdGEucG9iaiwgZGF0YS5vYmopOw0KK307DQorZG9wcyA9IGZ1bmN0aW9uICgpIHsNCisgICAgbG9jYWwgczsNCisNCisgICAgcyA9IFsneCcgPSA4ICogMzAwOyAneScgPSAxMC41ICogMzAwO107DQorICAgIGZvbnRuYW1lID0gJ1RpbWVzLVJvbWFuJzsNCisgICAgY2FudmFzID0gY3JlYXRld2lkZ2V0ICgtMSwgWyd0eXBlJyA9ICdwcyc7ICdzaXplJyA9IHM7XSk7DQorICAgIHNldHdpZGdldGF0dHIgKGNhbnZhcywgWyd3aW5kb3cnID0gd3JlY3Q7XSk7DQorICAgIGRyYXd0cmVlICh0cmVlKTsNCisgICAgZGVzdHJveXdpZGdldCAoY2FudmFzKTsNCisgICAgY2FudmFzPWRlZmNhbnZhczsNCisgICAgZm9udG5hbWUgPSAnZml4ZWQnOw0KK307DQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvaGVscGVycy9HcmFwaHZpejIuMjYuMy9saWIvcGtnY29uZmlnL2xpYmNkdC5wYyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL2hlbHBlcnMvR3JhcGh2aXoyLjI2LjMvbGliL3BrZ2NvbmZpZy9saWJjZHQucGMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTg5ODg3OQotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL2hlbHBlcnMvR3JhcGh2aXoyLjI2LjMvbGliL3BrZ2NvbmZpZy9saWJjZHQucGMKQEAgLTAsMCArMSwxMCBAQAorcHJlZml4PS9jL2dyYXBodml6LW1pbmd3L2xvY2FsLjIuMjAuMw0KK2V4ZWNfcHJlZml4PSR7cHJlZml4fQ0KK2xpYmRpcj0ke2V4ZWNfcHJlZml4fS9saWINCitpbmNsdWRlZGlyPSR7cHJlZml4fS9pbmNsdWRlL2dyYXBodml6DQorDQorTmFtZTogbGliY2R0DQorRGVzY3JpcHRpb246IENvbnRhaW5lciBEYXRhVHlwZSBsaWJyYXJ5DQorVmVyc2lvbjogMi4yMC4zDQorTGliczogLUwke2xpYmRpcn0gLWxjZHQNCitDZmxhZ3M6IC1JJHtpbmNsdWRlZGlyfQ0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL2hlbHBlcnMvR3JhcGh2aXoyLjI2LjMvbGliL3BrZ2NvbmZpZy9saWJjZ3JhcGgucGMgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS9oZWxwZXJzL0dyYXBodml6Mi4yNi4zL2xpYi9wa2djb25maWcvbGliY2dyYXBoLnBjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxYTY2OWQKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS9oZWxwZXJzL0dyYXBodml6Mi4yNi4zL2xpYi9wa2djb25maWcvbGliY2dyYXBoLnBjCkBAIC0wLDAgKzEsMTAgQEAKK3ByZWZpeD0vYy9ncmFwaHZpei1taW5ndy9sb2NhbC4yLjIwLjMNCitleGVjX3ByZWZpeD0ke3ByZWZpeH0NCitsaWJkaXI9JHtleGVjX3ByZWZpeH0vbGliDQoraW5jbHVkZWRpcj0ke3ByZWZpeH0vaW5jbHVkZS9ncmFwaHZpeg0KKw0KK05hbWU6IGxpYmNncmFwaA0KK0Rlc2NyaXB0aW9uOiBHcmFwaCBsaWJyYXJ5IChmaWxlIGkvbywgZG90IGxhbmd1YWdlIHBhcnNpbmcsIGdyYXBoLCBzdWJncmFwaCwgbm9kZSwgZWRnZSwgYXR0cmlidXRlLCBkYXRhIHN0cnVjdHVyZSBtYW5pcHVsYXRpb24pDQorVmVyc2lvbjogMi4yMC4zDQorTGliczogLUwke2xpYmRpcn0gLWxjZ3JhcGggLWxjZHQNCitDZmxhZ3M6IC1JJHtpbmNsdWRlZGlyfQ0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL2hlbHBlcnMvR3JhcGh2aXoyLjI2LjMvbGliL3BrZ2NvbmZpZy9saWJncmFwaC5wYyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL2hlbHBlcnMvR3JhcGh2aXoyLjI2LjMvbGliL3BrZ2NvbmZpZy9saWJncmFwaC5wYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjllNDc3Ci0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvaGVscGVycy9HcmFwaHZpejIuMjYuMy9saWIvcGtnY29uZmlnL2xpYmdyYXBoLnBjCkBAIC0wLDAgKzEsMTAgQEAKK3ByZWZpeD0vYy9ncmFwaHZpei1taW5ndy9sb2NhbC4yLjIwLjMNCitleGVjX3ByZWZpeD0ke3ByZWZpeH0NCitsaWJkaXI9JHtleGVjX3ByZWZpeH0vbGliDQoraW5jbHVkZWRpcj0ke3ByZWZpeH0vaW5jbHVkZS9ncmFwaHZpeg0KKw0KK05hbWU6IGxpYmdyYXBoDQorRGVzY3JpcHRpb246IEdyYXBoIGxpYnJhcnkgKGZpbGUgaS9vLCBkb3QgbGFuZ3VhZ2UgcGFyc2luZywgZ3JhcGgsIHN1YmdyYXBoLCBub2RlLCBlZGdlLCBhdHRyaWJ1dGUsIGRhdGEgc3RydWN0dXJlIG1hbmlwdWxhdGlvbikNCitWZXJzaW9uOiAyLjIwLjMNCitMaWJzOiAtTCR7bGliZGlyfSAtbGdyYXBoIC1sY2R0DQorQ2ZsYWdzOiAtSSR7aW5jbHVkZWRpcn0NCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS9oZWxwZXJzL0dyYXBodml6Mi4yNi4zL2xpYi9wa2djb25maWcvbGliZ3ZjLnBjIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvaGVscGVycy9HcmFwaHZpejIuMjYuMy9saWIvcGtnY29uZmlnL2xpYmd2Yy5wYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NjZjNGUzCi0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvaGVscGVycy9HcmFwaHZpejIuMjYuMy9saWIvcGtnY29uZmlnL2xpYmd2Yy5wYwpAQCAtMCwwICsxLDEyIEBACitwcmVmaXg9L2MvZ3JhcGh2aXotbWluZ3cvbG9jYWwuMi4yMC4zDQorZXhlY19wcmVmaXg9JHtwcmVmaXh9DQorbGliZGlyPSR7ZXhlY19wcmVmaXh9L2xpYg0KK2luY2x1ZGVkaXI9JHtwcmVmaXh9L2luY2x1ZGUvZ3JhcGh2aXoNCitwbHVnaW5zPTUNCisNCitOYW1lOiBsaWJndmMNCitEZXNjcmlwdGlvbjogVGhlIEdyYXBoVml6Q29udGV4dCBsaWJyYXJ5IA0KK1ZlcnNpb246IDIuMjAuMw0KK0xpYnM6IC1MJHtsaWJkaXJ9IC1sZ3ZjIC1sZ3JhcGggLWxjZHQNCitDZmxhZ3M6IC1JJHtpbmNsdWRlZGlyfQ0KKw0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL2hlbHBlcnMvR3JhcGh2aXoyLjI2LjMvbGliL3BrZ2NvbmZpZy9saWJwYXRocGxhbi5wYyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL2hlbHBlcnMvR3JhcGh2aXoyLjI2LjMvbGliL3BrZ2NvbmZpZy9saWJwYXRocGxhbi5wYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZGQ0NzdjCi0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvaGVscGVycy9HcmFwaHZpejIuMjYuMy9saWIvcGtnY29uZmlnL2xpYnBhdGhwbGFuLnBjCkBAIC0wLDAgKzEsMTAgQEAKK3ByZWZpeD0vYy9ncmFwaHZpei1taW5ndy9sb2NhbC4yLjIwLjMNCitleGVjX3ByZWZpeD0ke3ByZWZpeH0NCitsaWJkaXI9JHtleGVjX3ByZWZpeH0vbGliDQoraW5jbHVkZWRpcj0ke3ByZWZpeH0vaW5jbHVkZS9ncmFwaHZpeg0KKw0KK05hbWU6IGxpYnBhdGhwbGFuDQorRGVzY3JpcHRpb246IExpYnJhcnkgZm9yIHBsYW5uaW5nIHBvbHlsaW5lIGFuZCBiZXppZXIgcGF0aHMgYXJvdW5kIHBvbHlnb24gb2JzdGFjbGVzDQorVmVyc2lvbjogMi4yMC4zDQorTGliczogLUwke2xpYmRpcn0gLWxwYXRocGxhbg0KK0NmbGFnczogLUkke2luY2x1ZGVkaXJ9DQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvaGVscGVycy9HcmFwaHZpejIuMjYuMy9zaGFyZS9mb250cy9GcmVlU2Fucy50dGYgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS9oZWxwZXJzL0dyYXBodml6Mi4yNi4zL3NoYXJlL2ZvbnRzL0ZyZWVTYW5zLnR0ZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjkxMWU5Ci0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvaGVscGVycy9HcmFwaHZpejIuMjYuMy9zaGFyZS9mb250cy9GcmVlU2Fucy50dGYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvaGVscGVycy9HcmFwaHZpejIuMjYuMy9zaGFyZS9saWNlbnNlLnJ0ZiBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL2hlbHBlcnMvR3JhcGh2aXoyLjI2LjMvc2hhcmUvbGljZW5zZS5ydGYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2I3NzRmMgotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL2hlbHBlcnMvR3JhcGh2aXoyLjI2LjMvc2hhcmUvbGljZW5zZS5ydGYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvaGVscGVycy9zZnhfY29tbWVudC50eHQgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS9oZWxwZXJzL3NmeF9jb21tZW50LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZDk4MTI4Ci0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvaGVscGVycy9zZnhfY29tbWVudC50eHQKQEAgLTAsMCArMSw1IEBACis7VGhlIGNvbW1lbnQgYmVsb3cgY29udGFpbnMgU0ZYIHNjcmlwdCBjb21tYW5kcw0KKw0KK1NldHVwPXVwZGF0ZS5jbWQNCitUZW1wTW9kZQ0KK1RpdGxlPQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL2hlbHBlcnMvdXBkYXRlTmFtZS52YnMgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS9oZWxwZXJzL3VwZGF0ZU5hbWUudmJzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmZGM0MjMKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS9oZWxwZXJzL3VwZGF0ZU5hbWUudmJzCkBAIC0wLDAgKzEsMjYgQEAKK0RpbSBXc2hTaGVsbCwgb0V4ZWMsIHJlLCBSZXZpc2lvbg0KK1NldCBXc2hTaGVsbCA9IENyZWF0ZU9iamVjdCgiV1NjcmlwdC5TaGVsbCIpDQorJ0dldCB0aGUgc3ZuIHJldmlzaW9uIG9mIFdQSUxpYiB0aGF0IGlzIGJlaW5nIGluc3RhbGxlZA0KK1NldCBvRXhlYyA9IFdzaFNoZWxsLkV4ZWMoInN2bnZlcnNpb24gLW4gLi4vV1BJTGliIikNCisNCisnV2Ugd2FpdCBmb3IgdGhlIGVuZCBvZiBwcm9jZXNzDQorRG8gV2hpbGUgb0V4ZWMuU3RhdHVzID0gMA0KKyAgICBXU2NyaXB0LlNsZWVwIDEwMA0KK0xvb3ANCisNCisnUmVhZCB0aGUgY29tbWFuZCBvdXRwdXQgDQorRG8gV2hpbGUgb0V4ZWMuU3RkT3V0LkF0RW5kT2ZTdHJlYW0gPD4gVHJ1ZSANCisgICAgUmV2aXNpb24gPSBvRXhlYy5TdGRPdXQuUmVhZExpbmUNCitMb29wDQorDQorJ0NoZWNrIGZvciBwYXJ0aWFsIHN5bmMgKDopIG9yIG1vZGlmaWVkIGZpbGVzIChNKQ0KK1NldCByZSA9IG5ldyByZWdleHANCityZS5QYXR0ZXJuID0gIltNOl0iDQorSWYgcmUuVGVzdChSZXZpc2lvbikgPD4gdHJ1ZSBUaGVuDQorCVdzY3JpcHQuZWNobyhZZWFyKERhdGUoKSkgJiBfDQorICAgICAgICBSaWdodCgiMCIgJiBNb250aChkYXRlKCkpLCAyKSAmIF8NCisgICAgICAgIFJpZ2h0KCIwIiAmIERheShkYXRlKCkpLCAyKSAmIF8NCisJCSJyZXYiICYgUmV2aXNpb24pDQorRWxzZQ0KKwlXc2NyaXB0LmVjaG8oIkJhZFNWTlN5bmMiKQ0KK0VuZCBJZgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3VwZGF0ZS5jbWQgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS91cGRhdGUuY21kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5NjMyZTIKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS91cGRhdGUuY21kCkBAIC0wLDAgKzEsNDkgQEAKK3JtZGlyIC9zIC9xIEM6XFdpbmRSaXZlclx2eHdvcmtzLTYuM1x0YXJnZXRcaFxXUElMaWINCitybWRpciAvcyAvcSBDOlxXaW5kUml2ZXJcdnh3b3Jrcy02LjNcdGFyZ2V0XGhcZnJjdmlzaW9uDQorcm1kaXIgL3MgL3EgQzpcV2luZFJpdmVyXGRvY3NcZXh0ZW5zaW9uc1xXUElMaWINCitybWRpciAvcyAvcSBDOlxXaW5kUml2ZXJcV1BJTGliDQorcm1kaXIgL3MgL3EgQzpcV2luZFJpdmVyXHZ4d29ya3MtNi4zXHRhcmdldFxzcmNcZGVtb1xTaW1wbGVSb2JvdA0KK3JtZGlyIC9zIC9xIEM6XFdpbmRSaXZlclx2eHdvcmtzLTYuM1x0YXJnZXRcc3JjXGRlbW9cSXRlcmF0aXZlUm9ib3QNCitybWRpciAvcyAvcSBDOlxXaW5kUml2ZXJcdnh3b3Jrcy02LjNcdGFyZ2V0XHNyY1xkZW1vXEJ1aWx0aW5EZWZhdWx0Q29kZQ0KK3JtZGlyIC9zIC9xIEM6XFdpbmRSaXZlclx2eHdvcmtzLTYuM1x0YXJnZXRcc3JjXGRlbW9cQ1NpbXBsZVRlbXBsYXRlDQorcm1kaXIgL3MgL3EgQzpcV2luZFJpdmVyXHZ4d29ya3MtNi4zXHRhcmdldFxzcmNcZGVtb1xEYXNoYm9hcmREYXRhRXhhbXBsZQ0KK3JtZGlyIC9zIC9xIEM6XFdpbmRSaXZlclx2eHdvcmtzLTYuM1x0YXJnZXRcc3JjXGRlbW9cRGFzaGJvYXJkRGVtbw0KK3JtZGlyIC9zIC9xIEM6XFdpbmRSaXZlclx2eHdvcmtzLTYuM1x0YXJnZXRcc3JjXGRlbW9cRGVmYXVsdFJvYm90DQorcm1kaXIgL3MgL3EgQzpcV2luZFJpdmVyXHZ4d29ya3MtNi4zXHRhcmdldFxzcmNcZGVtb1xHeXJvU2FtcGxlDQorcm1kaXIgL3MgL3EgQzpcV2luZFJpdmVyXHZ4d29ya3MtNi4zXHRhcmdldFxzcmNcZGVtb1xJdGVyYXRpdmVCZW5jaHRvcERlbW8NCitybWRpciAvcyAvcSBDOlxXaW5kUml2ZXJcdnh3b3Jrcy02LjNcdGFyZ2V0XHNyY1xkZW1vXEl0ZXJhdGl2ZURlbW8NCitybWRpciAvcyAvcSBDOlxXaW5kUml2ZXJcdnh3b3Jrcy02LjNcdGFyZ2V0XHNyY1xkZW1vXFNpbXBsZVRlbXBsYXRlDQorcm1kaXIgL3MgL3EgQzpcV2luZFJpdmVyXHZ4d29ya3MtNi4zXHRhcmdldFxzcmNcZGVtb1xTaW1wbGVUcmFja2VyDQorcm1kaXIgL3MgL3EgQzpcV2luZFJpdmVyXHZ4d29ya3MtNi4zXHRhcmdldFxzcmNcZGVtb1xWaXNpb25EZW1vDQorcm1kaXIgL3MgL3EgQzpcV2luZFJpdmVyXHZ4d29ya3MtNi4zXHRhcmdldFxzcmNcZGVtb1xWaXNpb25TZXJ2b0RlbW8NCitybWRpciAvcyAvcSBDOlxXaW5kUml2ZXJcdnh3b3Jrcy02LjNcdGFyZ2V0XHNyY1xkZW1vXDIwMTBJbWFnZURlbW8NCitybWRpciAvcyAvcSBDOlxXaW5kUml2ZXJcdnh3b3Jrcy02LjNcdGFyZ2V0XHNyY1xkZW1vXFR3b0NvbG9yVHJhY2tEZW1vDQorcm1kaXIgL3MgL3EgQzpcV2luZFJpdmVyXHZ4d29ya3MtNi4zXHRhcmdldFxzcmNcZGVtb1xDYW1lcmFEZW1vDQorcm1kaXIgL3MgL3EgQzpcV2luZFJpdmVyXHZ4d29ya3MtNi4zXHRhcmdldFxzcmNcZGVtb1xDYW1lcmFUb0Rhc2hib2FyZEV4YW1wbGUNCitybWRpciAvcyAvcSBDOlxXaW5kUml2ZXJcdnh3b3Jrcy02LjNcdGFyZ2V0XHNyY1xkZW1vXExpbmVUcmFja2VyU2FtcGxlDQorDQorZGVsIC9xIEM6XFdpbmRSaXZlclx3b3JrYmVuY2gtMy4wXHdyd2Jcd3J3b3JrYmVuY2hcZWNsaXBzZVxwbHVnaW5zXGVkdS53cGkuKg0KK2RlbCAvcSBDOlxXaW5kUml2ZXJcd29ya2JlbmNoLTMuM1x3cndiXHdyd29ya2JlbmNoXGVjbGlwc2VccGx1Z2luc1xlZHUud3BpLioNCitkZWwgL3EgQzpcV2luZFJpdmVyXFdQSUxpYlwqLm91dA0KK2RlbCAvcSBDOlxXaW5kUml2ZXJcV1BJTGliXHZ4V29ya3MNCitkZWwgL3EgQzpcV2luZFJpdmVyXFdQSUxpYlxjUklPRlJDX3Z4V29ya3MNCitkZWwgL3EgQzpcV2luZFJpdmVyXFdQSUxpYlxjUklPRlJDSUlfdnhXb3Jrcw0KK2RlbCAvcSBjOlxXaW5kUml2ZXJcZG9jc1xleHRlbnNpb25zXEZSQ1wqLioNCitkZWwgL3EgYzpcV2luZFJpdmVyXGRvY3NcZXh0ZW5zaW9uc1xGUkNfVmlzaW9uX0FQSV9TcGVjaWZpY2F0aW9uLioNCitkZWwgL3EgYzpcV2luZFJpdmVyXGRvY3NcZXh0ZW5zaW9uc1xOSVZpc2lvbkNWSS4qDQorZGVsIC9xIGM6XFdpbmRSaXZlclxkb2NzXGV4dGVuc2lvbnNcUm9ib3QqLioNCitkZWwgL3EgYzpcV2luZFJpdmVyXGRvY3NcZXh0ZW5zaW9uc1xXUEkqLioNCisNCit4Y29weSB2eHdvcmtzLTYuMyBjOlx3aW5kcml2ZXJcdnh3b3Jrcy02LjMgL3MgL3kgL2kNCit4Y29weSB3b3JrYmVuY2gtMy4wIGM6XHdpbmRyaXZlclx3b3JrYmVuY2gtMy4wIC9zIC95IC9pDQoreGNvcHkgd29ya2JlbmNoLTMuMyBjOlx3aW5kcml2ZXJcd29ya2JlbmNoLTMuMyAvcyAveSAvaQ0KK3hjb3B5IFdQSUxpYiBjOlx3aW5kcml2ZXJcV1BJTGliIC9zIC95IC9pDQoreGNvcHkgZG9jcyBjOlx3aW5kcml2ZXJcZG9jcyAvcyAveSAvaQ0KKw0KK21rZGlyIGM6XHdpbmRyaXZlclx3cGlsaWJcY1JJT19JbWFnZXMNCitta2RpciBjOlx3aW5kcml2ZXJcd3BpbGliXGNSSU9fSW1hZ2VzXGJhY2t1cA0KK2NvcHkgYzpcd2luZHJpdmVyXHdwaWxpYlxjUklPX0ltYWdlc1wqLnppcCBjOlx3aW5kcml2ZXJcd3BpbGliXGNSSU9fSW1hZ2VzXGJhY2t1cA0KK2RlbCAvcSBjOlx3aW5kcml2ZXJcd3BpbGliXGNSSU9fSW1hZ2VzXCouemlwDQorY29weSBmcmNfMjAqLnppcCBjOlx3aW5kcml2ZXJcd3BpbGliXGNSSU9fSW1hZ2VzDQorDQorcmVuIEM6XFdpbmRSaXZlclxnbnVcMy40LjQtdnh3b3Jrcy02LjNceDg2LXdpbjMyXGxpYmV4ZWNcZ2NjXHBvd2VycGMtd3JzLXZ4d29ya3NcMy40LjRcZ2V0X2ZlYXR1cmUuZXhlIGdldF9mZWF0dXJlLmhhbmdzLmV4ZQ0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby8yMDEwSW1hZ2VEZW1vLy5jcHJvamVjdCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby8yMDEwSW1hZ2VEZW1vLy5jcHJvamVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTkyZWRjCi0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvdnh3b3Jrcy02LjMvdGFyZ2V0L3NyYy9kZW1vLzIwMTBJbWFnZURlbW8vLmNwcm9qZWN0CkBAIC0wLDAgKzEsMjkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQorPD9maWxlVmVyc2lvbiA0LjAuMD8+DQorDQorPGNwcm9qZWN0Pg0KKzxzdG9yYWdlTW9kdWxlIG1vZHVsZUlkPSJvcmcuZWNsaXBzZS5jZHQuY29yZS5zZXR0aW5ncyI+DQorPGNjb25maWd1cmF0aW9uIGlkPSJvcmcuZWNsaXBzZS5jZHQuY29yZS5kZWZhdWx0LmNvbmZpZy4yODM5NjcxMDYiPg0KKzxzdG9yYWdlTW9kdWxlIGJ1aWxkU3lzdGVtSWQ9Im9yZy5lY2xpcHNlLmNkdC5jb3JlLmRlZmF1bHRDb25maWdEYXRhUHJvdmlkZXIiIGlkPSJvcmcuZWNsaXBzZS5jZHQuY29yZS5kZWZhdWx0LmNvbmZpZy4yODM5NjcxMDYiIG1vZHVsZUlkPSJvcmcuZWNsaXBzZS5jZHQuY29yZS5zZXR0aW5ncyIgbmFtZT0iQ29uZmlndXJhdGlvbiI+DQorPGV4dGVybmFsU2V0dGluZ3MvPg0KKzxleHRlbnNpb25zPg0KKzxleHRlbnNpb24gaWQ9ImNvbS53aW5kcml2ZXIuaWRlLmNvcmUuV1JTY2FubmVySW5mb1Byb3ZpZGVyIiBwb2ludD0ib3JnLmVjbGlwc2UuY2R0LmNvcmUuU2Nhbm5lckluZm9Qcm92aWRlciIvPg0KKzxleHRlbnNpb24gaWQ9ImNvbS53aW5kcml2ZXIuaWRlLmNvcmUuV1JFbGZQYXJzZXJWeFdvcmtzIiBwb2ludD0ib3JnLmVjbGlwc2UuY2R0LmNvcmUuQmluYXJ5UGFyc2VyIi8+DQorPGV4dGVuc2lvbiBpZD0ib3JnLmVjbGlwc2UuY2R0LmNvcmUuR05VX0VMRiIgcG9pbnQ9Im9yZy5lY2xpcHNlLmNkdC5jb3JlLkJpbmFyeVBhcnNlciIvPg0KKzwvZXh0ZW5zaW9ucz4NCis8L3N0b3JhZ2VNb2R1bGU+DQorPHN0b3JhZ2VNb2R1bGUgbW9kdWxlSWQ9Im9yZy5lY2xpcHNlLmNkdC5jb3JlLmV4dGVybmFsU2V0dGluZ3MiLz4NCis8c3RvcmFnZU1vZHVsZSBtb2R1bGVJZD0ib3JnLmVjbGlwc2UuY2R0LmNvcmUucGF0aGVudHJ5Ij4NCis8cGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0iIi8+DQorPHBhdGhlbnRyeSBraW5kPSJvdXQiIHBhdGg9IiIvPg0KKzxwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJjb20ud2luZHJpdmVyLmlkZS5jb3JlLldSX0NPTlRBSU5FUiIvPg0KKzxwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJjb20ud2luZHJpdmVyLmlkZS5jb3JlLmJ1aWxkLm1vZGVsLldSX1VTRVJERUZJTkVEX0NPTlRBSU5FUiIvPg0KKzwvc3RvcmFnZU1vZHVsZT4NCis8c3RvcmFnZU1vZHVsZSBtb2R1bGVJZD0ic2Nhbm5lckNvbmZpZ3VyYXRpb24iLz4NCis8c3RvcmFnZU1vZHVsZSBtb2R1bGVJZD0idXNlcmRlZmluZWRDb250YWluZXIiPg0KKzxpbmRleEFsbEZpbGVzIHZhbHVlPSJmYWxzZSIvPg0KKzxpbml0aWFsaXplZCB2YWx1ZT0idHJ1ZSIvPg0KKzwvc3RvcmFnZU1vZHVsZT4NCis8L2Njb25maWd1cmF0aW9uPg0KKzwvc3RvcmFnZU1vZHVsZT4NCis8L2Nwcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby8yMDEwSW1hZ2VEZW1vLy5wcm9qZWN0IGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvdnh3b3Jrcy02LjMvdGFyZ2V0L3NyYy9kZW1vLzIwMTBJbWFnZURlbW8vLnByb2plY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmM4NjY0NQotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby8yMDEwSW1hZ2VEZW1vLy5wcm9qZWN0CkBAIC0wLDAgKzEsMjAgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQorPHByb2plY3REZXNjcmlwdGlvbj4NCisJPG5hbWU+MjAxMEltYWdlRGVtbzwvbmFtZT4NCisJPGNvbW1lbnQ+PC9jb21tZW50Pg0KKwk8cHJvamVjdHM+DQorCTwvcHJvamVjdHM+DQorCTxidWlsZFNwZWM+DQorCQk8YnVpbGRDb21tYW5kPg0KKwkJCTxuYW1lPmNvbS53aW5kcml2ZXIuaWRlLmNvcmUud3JidWlsZGVyPC9uYW1lPg0KKwkJCTxhcmd1bWVudHM+DQorCQkJPC9hcmd1bWVudHM+DQorCQk8L2J1aWxkQ29tbWFuZD4NCisJPC9idWlsZFNwZWM+DQorCTxuYXR1cmVzPg0KKwkJPG5hdHVyZT5jb20ud2luZHJpdmVyLmlkZS5jb3JlLndybmF0dXJlPC9uYXR1cmU+DQorCQk8bmF0dXJlPmNvbS53aW5kcml2ZXIuaWRlLmNvcmUud3Jjb3JlbmF0dXJlPC9uYXR1cmU+DQorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmNkdC5jb3JlLmNuYXR1cmU8L25hdHVyZT4NCisJCTxuYXR1cmU+b3JnLmVjbGlwc2UuY2R0LmNvcmUuY2NuYXR1cmU8L25hdHVyZT4NCisJPC9uYXR1cmVzPg0KKzwvcHJvamVjdERlc2NyaXB0aW9uPg0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby8yMDEwSW1hZ2VEZW1vLy53cm1ha2VmaWxlIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvdnh3b3Jrcy02LjMvdGFyZ2V0L3NyYy9kZW1vLzIwMTBJbWFnZURlbW8vLndybWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTFkZDdmOAotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby8yMDEwSW1hZ2VEZW1vLy53cm1ha2VmaWxlCkBAIC0wLDAgKzEsNDggQEAKKyMgVGhlIGZpbGUgIi53cm1ha2VmaWxlIiBpcyB0aGUgdGVtcGxhdGUgdXNlZCBieSB0aGUgV2luZCBSaXZlciBXb3JrYmVuY2ggdG8NCisjIGdlbmVyYXRlIHRoZSBtYWtlZmlsZXMgb2YgdGhpcyBwcm9qZWN0LiBBZGQgdXNlci1zcGVjaWZpYyBidWlsZCB0YXJnZXRzIGFuZA0KKyMgbWFrZSBydWxlcyBvbmx5KCEpIGluIHRoaXMgcHJvamVjdCdzICIud3JtYWtlZmlsZSIgZmlsZS4gVGhlc2Ugd2lsbCB0aGVuIGJlDQorIyBhdXRvbWF0aWNhbGx5IGR1bXBlZCBpbnRvIHRoZSBtYWtlZmlsZXMuDQorDQorV0lORF9IT01FIDo9ICQoc3Vic3QgXCwvLCQoV0lORF9IT01FKSkNCitXSU5EX0JBU0UgOj0gJChzdWJzdCBcLC8sJChXSU5EX0JBU0UpKQ0KK1dJTkRfVVNSIDo9ICQoc3Vic3QgXCwvLCQoV0lORF9VU1IpKQ0KKw0KK2FsbCA6IHByZV9idWlsZCBtYWluX2FsbCBwb3N0X2J1aWxkDQorDQorX2NsZWFuIDo6DQorCUBlY2hvICJtYWtlOiByZW1vdmluZyB0YXJnZXRzIGFuZCBvYmplY3RzIG9mIGBwd2RgIg0KKw0KKyVJREVfR0VORVJBVEVEJQ0KKw0KKy1pbmNsdWRlICQoUFJKX1JPT1RfRElSKS8qLm1ha2VmaWxlDQorDQorLWluY2x1ZGUgKi5tYWtlZmlsZQ0KKw0KK21haW5fYWxsIDogZXh0ZXJuYWxfYnVpbGQgJChQUk9KRUNUX1RBUkdFVFMpDQorCUBlY2hvICJtYWtlOiBidWlsdCB0YXJnZXRzIG9mIGBwd2RgIg0KKw0KKyMgZW50cnkgcG9pbnQgZm9yIGV4dGVuZGluZyB0aGUgYnVpbGQNCitleHRlcm5hbF9idWlsZCA6Og0KKwlAZWNobyAiIg0KKw0KKyMgbWFpbiBlbnRyeSBwb2ludCBmb3IgcHJlIHByb2Nlc3NpbmcgcHJpb3IgdG8gdGhlIGJ1aWxkDQorcHJlX2J1aWxkIDo6ICQoUFJFX0JVSUxEX1NURVApIGdlbmVyYXRlX3NvdXJjZXMNCisJQGVjaG8gIiINCisNCisjIGVudHJ5IHBvaW50IGZvciBnZW5lcmF0aW5nIHNvdXJjZXMgcHJpb3IgdG8gdGhlIGJ1aWxkDQorZ2VuZXJhdGVfc291cmNlcyA6Og0KKwlAZWNobyAiIg0KKw0KKyMgbWFpbiBlbnRyeSBwb2ludCBmb3IgcG9zdCBwcm9jZXNzaW5nIGFmdGVyIHRoZSBidWlsZA0KK3Bvc3RfYnVpbGQgOjogJChQT1NUX0JVSUxEX1NURVApIGRlcGxveV9vdXRwdXQNCisJQGVjaG8gIiINCisNCisjIGVudHJ5IHBvaW50IGZvciBkZXBsb3lpbmcgb3V0cHV0IGFmdGVyIHRoZSBidWlsZA0KK2RlcGxveV9vdXRwdXQgOjoNCisJQGVjaG8gIiINCisNCitjbGVhbiA6OiBleHRlcm5hbF9jbGVhbiAkKENMRUFOX1NURVApIF9jbGVhbg0KKw0KKyMgZW50cnkgcG9pbnQgZm9yIGV4dGVuZGluZyB0aGUgYnVpbGQgY2xlYW4NCitleHRlcm5hbF9jbGVhbiA6Og0KKwlAZWNobyAiIg0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby8yMDEwSW1hZ2VEZW1vLy53cnByb2plY3QgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vMjAxMEltYWdlRGVtby8ud3Jwcm9qZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4NjNmODUKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vMjAxMEltYWdlRGVtby8ud3Jwcm9qZWN0CkBAIC0wLDAgKzEsMjUzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KKzx3cnhtbD4NCisgICAgPHByb3BlcnRpZXMgcGxhdGZvcm09IlZ4V29ya3MiIHBsYXRmb3JtX25hbWU9InZ4d29ya3MtNi4zIiByb290PSIxIiB0eXBlPSJEb3dubG9hZGFibGVLZXJuZWxNb2R1bGVQcm9qZWN0Ii8+DQorICAgIDxhdHRyaWJ1dGVzPg0KKyAgICAgICAgPG1hcEF0dHJpYnV0ZT4NCisgICAgICAgICAgICA8bGlzdEF0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xHbG9iYWxNYWNyb3MiPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSJQUk9KRUNUX1RZUEUiLz4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iREVGSU5FUyIvPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSJFWFBBTkRfREJHIi8+DQorICAgICAgICAgICAgPC9saXN0QXR0cmlidXRlPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98R2xvYmFsTWFjcm98REVGSU5FUyIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98R2xvYmFsTWFjcm98RVhQQU5EX0RCRyIgdmFsdWU9IjAiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfEdsb2JhbE1hY3JvfFBST0pFQ1RfVFlQRSIgdmFsdWU9IkRLTSIvPg0KKyAgICAgICAgICAgIDxsaXN0QXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfEluY2x8UFBDMzJkaWFiIj4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2gvV1BJTGliIi8+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9Ii1JJChXSU5EX0JBU0UpL3RhcmdldC9oIi8+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9Ii1JJChXSU5EX0JBU0UpL3RhcmdldC9oL3dybi9jb3JlaXAiLz4NCisgICAgICAgICAgICA8L2xpc3RBdHRyaWJ1dGU+DQorICAgICAgICAgICAgPGxpc3RBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98SW5jbHxQUEMzMmdudSI+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9Ii1JJChXSU5EX0JBU0UpL3RhcmdldC9oIi8+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9Ii1JJChXSU5EX0JBU0UpL3RhcmdldC9oL3dybi9jb3JlaXAiLz4NCisgICAgICAgICAgICA8L2xpc3RBdHRyaWJ1dGU+DQorICAgICAgICAgICAgPGxpc3RBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98SW5jbHxQUEM2MDNkaWFiIj4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2giLz4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2gvd3JuL2NvcmVpcCIvPg0KKyAgICAgICAgICAgIDwvbGlzdEF0dHJpYnV0ZT4NCisgICAgICAgICAgICA8bGlzdEF0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xJbmNsfFBQQzYwM2dudSI+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9Ii1JJChXSU5EX0JBU0UpL3RhcmdldC9oIi8+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9Ii1JJChXSU5EX0JBU0UpL3RhcmdldC9oL1dQSUxpYiIvPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSItSSQoV0lORF9CQVNFKS90YXJnZXQvaC93cm4vY29yZWlwIi8+DQorICAgICAgICAgICAgPC9saXN0QXR0cmlidXRlPg0KKyAgICAgICAgICAgIDxsaXN0QXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfExpYnN8UFBDMzJkaWFiIj4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iJChXSU5EX0JBU0UpL3RhcmdldC9saWIvV1BJTGliLmEiLz4NCisgICAgICAgICAgICA8L2xpc3RBdHRyaWJ1dGU+DQorICAgICAgICAgICAgPGxpc3RBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TGlic3xQUEM2MDNnbnUiPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSIkKFdJTkRfQkFTRSkvdGFyZ2V0L2xpYi9XUElMaWIuYSIvPg0KKyAgICAgICAgICAgIDwvbGlzdEF0dHJpYnV0ZT4NCisgICAgICAgICAgICA8bGlzdEF0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3MiPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSJWWF9DUFVfRkFNSUxZIi8+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9IkNQVSIvPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSJUT09MX0ZBTUlMWSIvPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSJUT09MIi8+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9IlRPT0xfUEFUSCIvPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSJDQ19BUkNIX1NQRUMiLz4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iTElCUEFUSCIvPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSJMSUJTIi8+DQorICAgICAgICAgICAgPC9saXN0QXR0cmlidXRlPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98Q0NfQVJDSF9TUEVDfHZhbHVlfFBQQzMyZGlhYiIgdmFsdWU9Ii10UFBDRkg6dnh3b3JrczYzIC1Yc3Rtdy1zbG93IC1EUFBDMzJfZnA2MHgiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfENDX0FSQ0hfU1BFQ3x2YWx1ZXxQUEMzMmdudSIgdmFsdWU9Ii1taGFyZC1mbG9hdCAtbXN0cmljdC1hbGlnbiAtbW5vLWltcGxpY2l0LWZwIC1EUFBDMzJfZnA2MHgiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfENDX0FSQ0hfU1BFQ3x2YWx1ZXxQUEM2MDNkaWFiIiB2YWx1ZT0iLXRQUEM2MDNGSDp2eHdvcmtzNjMiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfENDX0FSQ0hfU1BFQ3x2YWx1ZXxQUEM2MDNnbnUiIHZhbHVlPSItbWNwdT02MDMgLW1zdHJpY3QtYWxpZ24gLW1uby1pbXBsaWNpdC1mcCAtbWxvbmdjYWxsIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xDUFV8dmFsdWV8UFBDMzJkaWFiIiB2YWx1ZT0iUFBDMzIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfENQVXx2YWx1ZXxQUEMzMmdudSIgdmFsdWU9IlBQQzMyIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xDUFV8dmFsdWV8UFBDNjAzZGlhYiIgdmFsdWU9IlBQQzYwMyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98Q1BVfHZhbHVlfFBQQzYwM2dudSIgdmFsdWU9IlBQQzYwMyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98TElCUEFUSHx2YWx1ZXxQUEMzMmRpYWIiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfExJQlBBVEh8dmFsdWV8UFBDMzJnbnUiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfExJQlBBVEh8dmFsdWV8UFBDNjAzZGlhYiIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98TElCUEFUSHx2YWx1ZXxQUEM2MDNnbnUiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfExJQlN8dmFsdWV8UFBDMzJkaWFiIiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xMSUJTfHZhbHVlfFBQQzMyZ251IiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xMSUJTfHZhbHVlfFBQQzYwM2RpYWIiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfExJQlN8dmFsdWV8UFBDNjAzZ251IiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xUT09MX0ZBTUlMWXx2YWx1ZXxQUEMzMmRpYWIiIHZhbHVlPSJkaWFiIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xUT09MX0ZBTUlMWXx2YWx1ZXxQUEMzMmdudSIgdmFsdWU9ImdudSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98VE9PTF9GQU1JTFl8dmFsdWV8UFBDNjAzZGlhYiIgdmFsdWU9ImRpYWIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfFRPT0xfRkFNSUxZfHZhbHVlfFBQQzYwM2dudSIgdmFsdWU9ImdudSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98VE9PTF9QQVRIfHZhbHVlfFBQQzMyZGlhYiIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98VE9PTF9QQVRIfHZhbHVlfFBQQzMyZ251IiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xUT09MX1BBVEh8dmFsdWV8UFBDNjAzZGlhYiIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98VE9PTF9QQVRIfHZhbHVlfFBQQzYwM2dudSIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98VE9PTHx2YWx1ZXxQUEMzMmRpYWIiIHZhbHVlPSJkaWFiIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xUT09MfHZhbHVlfFBQQzMyZ251IiB2YWx1ZT0iZ251Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xUT09MfHZhbHVlfFBQQzYwM2RpYWIiIHZhbHVlPSJkaWFiIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xUT09MfHZhbHVlfFBQQzYwM2dudSIgdmFsdWU9ImdudSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98VlhfQ1BVX0ZBTUlMWXx2YWx1ZXxQUEMzMmRpYWIiIHZhbHVlPSJwcGMiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfFZYX0NQVV9GQU1JTFl8dmFsdWV8UFBDMzJnbnUiIHZhbHVlPSJwcGMiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfFZYX0NQVV9GQU1JTFl8dmFsdWV8UFBDNjAzZGlhYiIgdmFsdWU9InBwYyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98VlhfQ1BVX0ZBTUlMWXx2YWx1ZXxQUEM2MDNnbnUiIHZhbHVlPSJwcGMiLz4NCisgICAgICAgICAgICA8bGlzdEF0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29scyI+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9IkMtQ29tcGlsZXIiLz4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iQysrLUNvbXBpbGVyIi8+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9IkxpbmtlciIvPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSJQYXJ0aWFsIEltYWdlIExpbmtlciIvPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSJMaWJyYXJpYW4iLz4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iQXNzZW1ibGVyIi8+DQorICAgICAgICAgICAgPC9saXN0QXR0cmlidXRlPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxBc3NlbWJsZXJ8Y21kfFBQQzMyZGlhYiIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWFzc2VtYmxlcnByZWZpeCUgJChUT09MX1BBVEgpZGNjICVEZWJ1Z01vZGVGbGFncyUgJVRvb2xGbGFncyUgJChBRERFRF9DRkxBR1MpICVJbmNsdWRlcyUgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gJU91dEZpbGUlIC1jICVJbkZpbGUlIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxjbWR8UFBDMzJnbnUiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7OyVhc3NlbWJsZXJwcmVmaXglICQoVE9PTF9QQVRIKWNjcHBjICVEZWJ1Z01vZGVGbGFncyUgJVRvb2xGbGFncyUgJChBRERFRF9DRkxBR1MpICVJbmNsdWRlcyUgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gJU91dEZpbGUlIC1jICVJbkZpbGUlIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxjbWR8UFBDNjAzZGlhYiIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWFzc2VtYmxlcnByZWZpeCUgJChUT09MX1BBVEgpZGNjICVEZWJ1Z01vZGVGbGFncyUgJVRvb2xGbGFncyUgJChBRERFRF9DRkxBR1MpICVJbmNsdWRlcyUgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gJU91dEZpbGUlIC1jICVJbkZpbGUlIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxjbWR8UFBDNjAzZ251IiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OzslYXNzZW1ibGVycHJlZml4JSAkKFRPT0xfUEFUSCljY3BwYyAlRGVidWdNb2RlRmxhZ3MlICVUb29sRmxhZ3MlICQoQURERURfQ0ZMQUdTKSAlSW5jbHVkZXMlICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICVPdXRGaWxlJSAtYyAlSW5GaWxlJSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxBc3NlbWJsZXJ8ZGJnRmxhZ3N8UFBDMzJkaWFiIiB2YWx1ZT0iLWciLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfGRiZ0ZsYWdzfFBQQzMyZ251IiB2YWx1ZT0iLWciLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfGRiZ0ZsYWdzfFBQQzYwM2RpYWIiIHZhbHVlPSItZyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxBc3NlbWJsZXJ8ZGJnRmxhZ3N8UFBDNjAzZ251IiB2YWx1ZT0iLWciLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfGRlcml2ZWRTaWdzfFBQQzMyZGlhYiIgdmFsdWU9IioubyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxBc3NlbWJsZXJ8ZGVyaXZlZFNpZ3N8UFBDMzJnbnUiIHZhbHVlPSIqLm8iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfGRlcml2ZWRTaWdzfFBQQzYwM2RpYWIiIHZhbHVlPSIqLm8iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfGRlcml2ZWRTaWdzfFBQQzYwM2dudSIgdmFsdWU9IioubyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxBc3NlbWJsZXJ8ZmxhZ3N8UFBDMzJkaWFiIiB2YWx1ZT0iJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YcHJlcHJvY2Vzcy1hc3NlbWJseSAtWGNwcC1uby1zcGFjZSAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxmbGFnc3xQUEMzMmdudSIgdmFsdWU9IiQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAgIC14YXNzZW1ibGVyLXdpdGgtY3BwIC1NRCAtTVAiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfGZsYWdzfFBQQzYwM2RpYWIiIHZhbHVlPSIkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhwcmVwcm9jZXNzLWFzc2VtYmx5IC1YY3BwLW5vLXNwYWNlICAtWG1ha2UtZGVwZW5kZW5jeT0weGQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfGZsYWdzfFBQQzYwM2dudSIgdmFsdWU9IiQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAgIC14YXNzZW1ibGVyLXdpdGgtY3BwIC1NRCAtTVAiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfG5vbkRiZ0ZsYWdzfFBQQzMyZGlhYiIgdmFsdWU9Ii1YTyAtWHNpemUtb3B0Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxub25EYmdGbGFnc3xQUEMzMmdudSIgdmFsdWU9Ii1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfG5vbkRiZ0ZsYWdzfFBQQzYwM2RpYWIiIHZhbHVlPSItWE8gLVhzaXplLW9wdCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxBc3NlbWJsZXJ8bm9uRGJnRmxhZ3N8UFBDNjAzZ251IiB2YWx1ZT0iLU8yIC1mc3RyZW5ndGgtcmVkdWNlIC1mbm8tYnVpbHRpbiIvPg0KKyAgICAgICAgICAgIDxib29sZWFuQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfG9iamVjdCIgdmFsdWU9InRydWUiLz4NCisgICAgICAgICAgICA8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxwYXNzQWJsZSIgdmFsdWU9ImZhbHNlIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxzaWdzIiB2YWx1ZT0iKi5zIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxjbWR8UFBDMzJkaWFiIiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OzslY3BwY29tcGlsZXJwcmVmaXglICQoVE9PTF9QQVRIKWRjYyAlRGVidWdNb2RlRmxhZ3MlICVUb29sRmxhZ3MlICQoQURERURfQysrRkxBR1MpICVJbmNsdWRlcyUgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gJU91dEZpbGUlIC1jICVJbkZpbGUlIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxjbWR8UFBDMzJnbnUiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7OyVjcHBjb21waWxlcnByZWZpeCUgJChUT09MX1BBVEgpY2NwcGMgJURlYnVnTW9kZUZsYWdzJSAlVG9vbEZsYWdzJSAkKEFEREVEX0MrK0ZMQUdTKSAlSW5jbHVkZXMlICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICVPdXRGaWxlJSAtYyAlSW5GaWxlJSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8Y21kfFBQQzYwM2RpYWIiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7OyVjcHBjb21waWxlcnByZWZpeCUgJChUT09MX1BBVEgpZGNjICVEZWJ1Z01vZGVGbGFncyUgJVRvb2xGbGFncyUgJChBRERFRF9DKytGTEFHUykgJUluY2x1ZGVzJSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAlT3V0RmlsZSUgLWMgJUluRmlsZSUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfGNtZHxQUEM2MDNnbnUiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7OyVjcHBjb21waWxlcnByZWZpeCUgJChUT09MX1BBVEgpY2NwcGMgJURlYnVnTW9kZUZsYWdzJSAlVG9vbEZsYWdzJSAkKEFEREVEX0MrK0ZMQUdTKSAlSW5jbHVkZXMlICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICVPdXRGaWxlJSAtYyAlSW5GaWxlJSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8ZGJnRmxhZ3N8UFBDMzJkaWFiIiB2YWx1ZT0iLWciLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfGRiZ0ZsYWdzfFBQQzMyZ251IiB2YWx1ZT0iLWciLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfGRiZ0ZsYWdzfFBQQzYwM2RpYWIiIHZhbHVlPSItZyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8ZGJnRmxhZ3N8UFBDNjAzZ251IiB2YWx1ZT0iLWciLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfGRlcml2ZWRTaWdzfFBQQzMyZGlhYiIgdmFsdWU9IioubyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8ZGVyaXZlZFNpZ3N8UFBDMzJnbnUiIHZhbHVlPSIqLm8iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfGRlcml2ZWRTaWdzfFBQQzYwM2RpYWIiIHZhbHVlPSIqLm8iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfGRlcml2ZWRTaWdzfFBQQzYwM2dudSIgdmFsdWU9IioubyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8ZmxhZ3N8UFBDMzJkaWFiIiB2YWx1ZT0iJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfGZsYWdzfFBQQzMyZ251IiB2YWx1ZT0iJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxmbGFnc3xQUEM2MDNkaWFiIiB2YWx1ZT0iJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfGZsYWdzfFBQQzYwM2dudSIgdmFsdWU9IiQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAtbWxvbmdjYWxsIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxub25EYmdGbGFnc3xQUEMzMmRpYWIiIHZhbHVlPSItWE8gLVhzaXplLW9wdCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8bm9uRGJnRmxhZ3N8UFBDMzJnbnUiIHZhbHVlPSItTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxub25EYmdGbGFnc3xQUEM2MDNkaWFiIiB2YWx1ZT0iLVhPIC1Yc2l6ZS1vcHQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfG5vbkRiZ0ZsYWdzfFBQQzYwM2dudSIgdmFsdWU9Ii1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4iLz4NCisgICAgICAgICAgICA8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxvYmplY3QiIHZhbHVlPSJ0cnVlIi8+DQorICAgICAgICAgICAgPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8cGFzc0FibGUiIHZhbHVlPSJmYWxzZSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8c2lncyIgdmFsdWU9IiouY3BwOyouQzsqLmN4eDsqLmNjIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8Y21kfFBQQzMyZGlhYiIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWNjb21waWxlcnByZWZpeCUgJChUT09MX1BBVEgpZGNjICVEZWJ1Z01vZGVGbGFncyUgJVRvb2xGbGFncyUgJChBRERFRF9DRkxBR1MpICVJbmNsdWRlcyUgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gJU91dEZpbGUlIC1jICVJbkZpbGUlIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8Y21kfFBQQzMyZ251IiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OzslY2NvbXBpbGVycHJlZml4JSAkKFRPT0xfUEFUSCljY3BwYyAlRGVidWdNb2RlRmxhZ3MlICVUb29sRmxhZ3MlICQoQURERURfQ0ZMQUdTKSAlSW5jbHVkZXMlICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICVPdXRGaWxlJSAtYyAlSW5GaWxlJSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfGNtZHxQUEM2MDNkaWFiIiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OzslY2NvbXBpbGVycHJlZml4JSAkKFRPT0xfUEFUSClkY2MgJURlYnVnTW9kZUZsYWdzJSAlVG9vbEZsYWdzJSAkKEFEREVEX0NGTEFHUykgJUluY2x1ZGVzJSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAlT3V0RmlsZSUgLWMgJUluRmlsZSUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxjbWR8UFBDNjAzZ251IiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OzslY2NvbXBpbGVycHJlZml4JSAkKFRPT0xfUEFUSCljY3BwYyAlRGVidWdNb2RlRmxhZ3MlICVUb29sRmxhZ3MlICQoQURERURfQ0ZMQUdTKSAlSW5jbHVkZXMlICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICVPdXRGaWxlJSAtYyAlSW5GaWxlJSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfGRiZ0ZsYWdzfFBQQzMyZGlhYiIgdmFsdWU9Ii1nIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8ZGJnRmxhZ3N8UFBDMzJnbnUiIHZhbHVlPSItZyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfGRiZ0ZsYWdzfFBQQzYwM2RpYWIiIHZhbHVlPSItZyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfGRiZ0ZsYWdzfFBQQzYwM2dudSIgdmFsdWU9Ii1nIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8ZGVyaXZlZFNpZ3N8UFBDMzJkaWFiIiB2YWx1ZT0iKi5vIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8ZGVyaXZlZFNpZ3N8UFBDMzJnbnUiIHZhbHVlPSIqLm8iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxkZXJpdmVkU2lnc3xQUEM2MDNkaWFiIiB2YWx1ZT0iKi5vIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8ZGVyaXZlZFNpZ3N8UFBDNjAzZ251IiB2YWx1ZT0iKi5vIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8ZmxhZ3N8UFBDMzJkaWFiIiB2YWx1ZT0iJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxmbGFnc3xQUEMzMmdudSIgdmFsdWU9IiQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAgLVdhbGwgIC1NRCAtTVAiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxmbGFnc3xQUEM2MDNkaWFiIiB2YWx1ZT0iJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxmbGFnc3xQUEM2MDNnbnUiIHZhbHVlPSIkKENDX0FSQ0hfU1BFQykgLWFuc2kgIC1XYWxsICAtTUQgLU1QIC1tbG9uZ2NhbGwiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxub25EYmdGbGFnc3xQUEMzMmRpYWIiIHZhbHVlPSItWE8gLVhzaXplLW9wdCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfG5vbkRiZ0ZsYWdzfFBQQzMyZ251IiB2YWx1ZT0iLU8yIC1mc3RyZW5ndGgtcmVkdWNlIC1mbm8tYnVpbHRpbiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfG5vbkRiZ0ZsYWdzfFBQQzYwM2RpYWIiIHZhbHVlPSItWE8gLVhzaXplLW9wdCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfG5vbkRiZ0ZsYWdzfFBQQzYwM2dudSIgdmFsdWU9Ii1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4iLz4NCisgICAgICAgICAgICA8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8b2JqZWN0IiB2YWx1ZT0idHJ1ZSIvPg0KKyAgICAgICAgICAgIDxib29sZWFuQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxwYXNzQWJsZSIgdmFsdWU9ImZhbHNlIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8c2lncyIgdmFsdWU9IiouYyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58Y21kfFBQQzMyZGlhYiIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWFyY2hpdmVycHJlZml4JSAkKFRPT0xfUEFUSClkYXIgJVRvb2xGbGFncyUgJU91dEZpbGUlICVPYmplY3RzJSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58Y21kfFBQQzMyZ251IiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OzslYXJjaGl2ZXJwcmVmaXglICQoVE9PTF9QQVRIKWFycHBjICVUb29sRmxhZ3MlICVPdXRGaWxlJSAlT2JqZWN0cyUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufGNtZHxQUEM2MDNkaWFiIiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OzslYXJjaGl2ZXJwcmVmaXglICQoVE9PTF9QQVRIKWRhciAlVG9vbEZsYWdzJSAlT3V0RmlsZSUgJU9iamVjdHMlIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxjbWR8UFBDNjAzZ251IiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OzslYXJjaGl2ZXJwcmVmaXglICQoVE9PTF9QQVRIKWFycHBjICVUb29sRmxhZ3MlICVPdXRGaWxlJSAlT2JqZWN0cyUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufGRiZ0ZsYWdzfFBQQzMyZGlhYiIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58ZGJnRmxhZ3N8UFBDMzJnbnUiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufGRiZ0ZsYWdzfFBQQzYwM2RpYWIiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufGRiZ0ZsYWdzfFBQQzYwM2dudSIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58ZGVyaXZlZFNpZ3N8UFBDMzJkaWFiIiB2YWx1ZT0iKi5hIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxkZXJpdmVkU2lnc3xQUEMzMmdudSIgdmFsdWU9IiouYSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58ZGVyaXZlZFNpZ3N8UFBDNjAzZGlhYiIgdmFsdWU9IiouYSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58ZGVyaXZlZFNpZ3N8UFBDNjAzZ251IiB2YWx1ZT0iKi5hIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxmbGFnc3xQUEMzMmRpYWIiIHZhbHVlPSJjcnVzIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxmbGFnc3xQUEMzMmdudSIgdmFsdWU9ImNydXMiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufGZsYWdzfFBQQzYwM2RpYWIiIHZhbHVlPSJjcnVzIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxmbGFnc3xQUEM2MDNnbnUiIHZhbHVlPSJjcnVzIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxub25EYmdGbGFnc3xQUEMzMmRpYWIiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufG5vbkRiZ0ZsYWdzfFBQQzMyZ251IiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxub25EYmdGbGFnc3xQUEM2MDNkaWFiIiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxub25EYmdGbGFnc3xQUEM2MDNnbnUiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxvYmplY3QiIHZhbHVlPSJmYWxzZSIvPg0KKyAgICAgICAgICAgIDxib29sZWFuQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufHBhc3NBYmxlIiB2YWx1ZT0idHJ1ZSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58c2lncyIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8Y21kfFBQQzMyZGlhYiIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7cm0gLWYgJU91dEZpbGUlO2RkdW1wIC1OZyAlT2JqZWN0cyUgJUxpYnJhcmllcyUgfCB0Y2xzaCAkKFdJTkRfQkFTRSkvaG9zdC9yZXNvdXJjZS9odXRpbHMvdGNsL211bmNoLnRjbCAtYyBwcGMgJmd0OyAkKE9CSl9ESVIpL2N0ZHQuYzslY2NvbXBpbGVycHJlZml4JSAkKFRPT0xfUEFUSClkY2MgJURlYnVnTW9kZUZsYWdzJSAkKENDX0FSQ0hfU1BFQykgLVhkb2xsYXItaW4taWRlbnQgLVhmb3JjZS1kZWNsYXJhdGlvbnMgJChBRERFRF9DRkxBR1MpICVJbmNsdWRlcyUgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgIC1vICQoT0JKX0RJUikvY3RkdC5vIC1jICQoT0JKX0RJUikvY3RkdC5jOyVsaW5rZXJwcmVmaXglICQoVE9PTF9QQVRIKWRsZCAtdFBQQ0ZIOnZ4d29ya3M2MyAtWCAtcjUgJVRvb2xGbGFncyUgLW8gJU91dEZpbGUlICQoT0JKX0RJUikvY3RkdC5vICVPYmplY3RzJSAlTGlicmFyaWVzJSAkKExJQlBBVEgpICQoTElCUykgICQoQURERURfTElCUEFUSCkgJChBRERFRF9MSUJTKSAmYW1wOyZhbXA7IGlmIFsgJnF1b3Q7JChFWFBBTkRfREJHKSZxdW90OyA9ICZxdW90OzEmcXVvdDsgXTsgdGhlbiBwbGluayAmcXVvdDskQCZxdW90OztmaSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8Y21kfFBQQzMyZ251IiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OztybSAtZiAlT3V0RmlsZSU7bm1wcGMgJU9iamVjdHMlICVMaWJyYXJpZXMlIHwgdGNsc2ggJChXSU5EX0JBU0UpL2hvc3QvcmVzb3VyY2UvaHV0aWxzL3RjbC9tdW5jaC50Y2wgLWMgcHBjICZndDsgJChPQkpfRElSKS9jdGR0LmM7JWNjb21waWxlcnByZWZpeCUgJChUT09MX1BBVEgpY2NwcGMgJURlYnVnTW9kZUZsYWdzJSAkKENDX0FSQ0hfU1BFQykgLWZkb2xsYXJzLWluLWlkZW50aWZpZXJzIC1XYWxsICQoQURERURfQ0ZMQUdTKSAlSW5jbHVkZXMlICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpICAtbyAkKE9CSl9ESVIpL2N0ZHQubyAtYyAkKE9CSl9ESVIpL2N0ZHQuYzslbGlua2VycHJlZml4JSAkKFRPT0xfUEFUSCljY3BwYyAtciAtbm9zdGRsaWIgLVdsLC1YICVUb29sRmxhZ3MlIC1vICVPdXRGaWxlJSAkKE9CSl9ESVIpL2N0ZHQubyAlT2JqZWN0cyUgJUxpYnJhcmllcyUgJChMSUJQQVRIKSAkKExJQlMpICAkKEFEREVEX0xJQlBBVEgpICQoQURERURfTElCUykgJmFtcDsmYW1wOyBpZiBbICZxdW90OyQoRVhQQU5EX0RCRykmcXVvdDsgPSAmcXVvdDsxJnF1b3Q7IF07IHRoZW4gcGxpbmsgJnF1b3Q7JEAmcXVvdDs7ZmkiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfGNtZHxQUEM2MDNkaWFiIiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OztybSAtZiAlT3V0RmlsZSU7ZGR1bXAgLU5nICVPYmplY3RzJSAlTGlicmFyaWVzJSB8IHRjbHNoICQoV0lORF9CQVNFKS9ob3N0L3Jlc291cmNlL2h1dGlscy90Y2wvbXVuY2gudGNsIC1jIHBwYyAmZ3Q7ICQoT0JKX0RJUikvY3RkdC5jOyVjY29tcGlsZXJwcmVmaXglICQoVE9PTF9QQVRIKWRjYyAlRGVidWdNb2RlRmxhZ3MlICQoQ0NfQVJDSF9TUEVDKSAtWGRvbGxhci1pbi1pZGVudCAtWGZvcmNlLWRlY2xhcmF0aW9ucyAkKEFEREVEX0NGTEFHUykgJUluY2x1ZGVzJSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAgLW8gJChPQkpfRElSKS9jdGR0Lm8gLWMgJChPQkpfRElSKS9jdGR0LmM7JWxpbmtlcnByZWZpeCUgJChUT09MX1BBVEgpZGxkIC10UFBDNjAzRkg6dnh3b3JrczYzIC1YIC1yNSAlVG9vbEZsYWdzJSAtbyAlT3V0RmlsZSUgJChPQkpfRElSKS9jdGR0Lm8gJU9iamVjdHMlICVMaWJyYXJpZXMlICQoTElCUEFUSCkgJChMSUJTKSAgJChBRERFRF9MSUJQQVRIKSAkKEFEREVEX0xJQlMpICZhbXA7JmFtcDsgaWYgWyAmcXVvdDskKEVYUEFORF9EQkcpJnF1b3Q7ID0gJnF1b3Q7MSZxdW90OyBdOyB0aGVuIHBsaW5rICZxdW90OyRAJnF1b3Q7O2ZpIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxjbWR8UFBDNjAzZ251IiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OztybSAtZiAlT3V0RmlsZSU7bm1wcGMgJU9iamVjdHMlICVMaWJyYXJpZXMlIHwgdGNsc2ggJChXSU5EX0JBU0UpL2hvc3QvcmVzb3VyY2UvaHV0aWxzL3RjbC9tdW5jaC50Y2wgLWMgcHBjICZndDsgJChPQkpfRElSKS9jdGR0LmM7JWNjb21waWxlcnByZWZpeCUgJChUT09MX1BBVEgpY2NwcGMgJURlYnVnTW9kZUZsYWdzJSAkKENDX0FSQ0hfU1BFQykgLWZkb2xsYXJzLWluLWlkZW50aWZpZXJzIC1XYWxsICQoQURERURfQ0ZMQUdTKSAlSW5jbHVkZXMlICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpICAtbyAkKE9CSl9ESVIpL2N0ZHQubyAtYyAkKE9CSl9ESVIpL2N0ZHQuYzslbGlua2VycHJlZml4JSAkKFRPT0xfUEFUSCljY3BwYyAtciAtbm9zdGRsaWIgLVdsLC1YICVUb29sRmxhZ3MlIC1vICVPdXRGaWxlJSAkKE9CSl9ESVIpL2N0ZHQubyAlT2JqZWN0cyUgJUxpYnJhcmllcyUgJChMSUJQQVRIKSAkKExJQlMpICAkKEFEREVEX0xJQlBBVEgpICQoQURERURfTElCUykgJmFtcDsmYW1wOyBpZiBbICZxdW90OyQoRVhQQU5EX0RCRykmcXVvdDsgPSAmcXVvdDsxJnF1b3Q7IF07IHRoZW4gcGxpbmsgJnF1b3Q7JEAmcXVvdDs7ZmkiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfGRiZ0ZsYWdzfFBQQzMyZGlhYiIgdmFsdWU9Ii1nIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxkYmdGbGFnc3xQUEMzMmdudSIgdmFsdWU9Ii1nIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxkYmdGbGFnc3xQUEM2MDNkaWFiIiB2YWx1ZT0iLWciLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfGRiZ0ZsYWdzfFBQQzYwM2dudSIgdmFsdWU9Ii1nIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxkZXJpdmVkU2lnc3xQUEMzMmRpYWIiIHZhbHVlPSIqLm91dCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8ZGVyaXZlZFNpZ3N8UFBDMzJnbnUiIHZhbHVlPSIqLm91dCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8ZGVyaXZlZFNpZ3N8UFBDNjAzZGlhYiIgdmFsdWU9Iioub3V0Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxkZXJpdmVkU2lnc3xQUEM2MDNnbnUiIHZhbHVlPSIqLm91dCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8ZmxhZ3N8UFBDMzJkaWFiIiB2YWx1ZT0iLXI0Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxmbGFnc3xQUEMzMmdudSIgdmFsdWU9Ii1UICQoV0lORF9CQVNFKS90YXJnZXQvaC90b29sL2dudS9sZHNjcmlwdHMvbGluay5PVVQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfGZsYWdzfFBQQzYwM2RpYWIiIHZhbHVlPSItcjQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfGZsYWdzfFBQQzYwM2dudSIgdmFsdWU9Ii1UICQoV0lORF9CQVNFKS90YXJnZXQvaC90b29sL2dudS9sZHNjcmlwdHMvbGluay5PVVQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfG5vbkRiZ0ZsYWdzfFBQQzMyZGlhYiIgdmFsdWU9Ii1YTyAtWHNpemUtb3B0Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxub25EYmdGbGFnc3xQUEMzMmdudSIgdmFsdWU9Ii1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfG5vbkRiZ0ZsYWdzfFBQQzYwM2RpYWIiIHZhbHVlPSItWE8gLVhzaXplLW9wdCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8bm9uRGJnRmxhZ3N8UFBDNjAzZ251IiB2YWx1ZT0iLU8yIC1mc3RyZW5ndGgtcmVkdWNlIC1mbm8tYnVpbHRpbiIvPg0KKyAgICAgICAgICAgIDxib29sZWFuQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfG9iamVjdCIgdmFsdWU9ImZhbHNlIi8+DQorICAgICAgICAgICAgPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8cGFzc0FibGUiIHZhbHVlPSJmYWxzZSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8c2lncyIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxjbWR8UFBDMzJkaWFiIiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OzslbGlua2VycHJlZml4JSAkKFRPT0xfUEFUSClkbGQgLXRQUENGSDp2eHdvcmtzNjMgLVggLXI1ICVUb29sRmxhZ3MlIC1vICVPdXRGaWxlJSAlT2JqZWN0cyUgJChMSUJQQVRIKSAkKExJQlMpICQoQURERURfTElCUEFUSCkgJChBRERFRF9MSUJTKSAgJmFtcDsmYW1wOyBpZiBbICZxdW90OyQoRVhQQU5EX0RCRykmcXVvdDsgPSAmcXVvdDsxJnF1b3Q7IF07IHRoZW4gcGxpbmsgJnF1b3Q7JEAmcXVvdDs7ZmkiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8Y21kfFBQQzMyZ251IiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OzslbGlua2VycHJlZml4JSAkKFRPT0xfUEFUSCljY3BwYyAtciAtbm9zdGRsaWIgLVdsLC1YICVUb29sRmxhZ3MlIC1vICVPdXRGaWxlJSAlT2JqZWN0cyUgJChMSUJQQVRIKSAkKExJQlMpICQoQURERURfTElCUEFUSCkgJChBRERFRF9MSUJTKSAgJmFtcDsmYW1wOyBpZiBbICZxdW90OyQoRVhQQU5EX0RCRykmcXVvdDsgPSAmcXVvdDsxJnF1b3Q7IF07IHRoZW4gcGxpbmsgJnF1b3Q7JEAmcXVvdDs7ZmkiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8Y21kfFBQQzYwM2RpYWIiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7OyVsaW5rZXJwcmVmaXglICQoVE9PTF9QQVRIKWRsZCAtdFBQQzYwM0ZIOnZ4d29ya3M2MyAtWCAtcjUgJVRvb2xGbGFncyUgLW8gJU91dEZpbGUlICVPYmplY3RzJSAkKExJQlBBVEgpICQoTElCUykgJChBRERFRF9MSUJQQVRIKSAkKEFEREVEX0xJQlMpICAmYW1wOyZhbXA7IGlmIFsgJnF1b3Q7JChFWFBBTkRfREJHKSZxdW90OyA9ICZxdW90OzEmcXVvdDsgXTsgdGhlbiBwbGluayAmcXVvdDskQCZxdW90OztmaSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxjbWR8UFBDNjAzZ251IiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OzslbGlua2VycHJlZml4JSAkKFRPT0xfUEFUSCljY3BwYyAtciAtbm9zdGRsaWIgLVdsLC1YICVUb29sRmxhZ3MlIC1vICVPdXRGaWxlJSAlT2JqZWN0cyUgJChMSUJQQVRIKSAkKExJQlMpICQoQURERURfTElCUEFUSCkgJChBRERFRF9MSUJTKSAgJmFtcDsmYW1wOyBpZiBbICZxdW90OyQoRVhQQU5EX0RCRykmcXVvdDsgPSAmcXVvdDsxJnF1b3Q7IF07IHRoZW4gcGxpbmsgJnF1b3Q7JEAmcXVvdDs7ZmkiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8ZGJnRmxhZ3N8UFBDMzJkaWFiIiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfGRiZ0ZsYWdzfFBQQzMyZ251IiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfGRiZ0ZsYWdzfFBQQzYwM2RpYWIiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8ZGJnRmxhZ3N8UFBDNjAzZ251IiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfGRlcml2ZWRTaWdzfFBQQzMyZGlhYiIgdmFsdWU9IioubyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxkZXJpdmVkU2lnc3xQUEMzMmdudSIgdmFsdWU9IioubyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxkZXJpdmVkU2lnc3xQUEM2MDNkaWFiIiB2YWx1ZT0iKi5vIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfGRlcml2ZWRTaWdzfFBQQzYwM2dudSIgdmFsdWU9IioubyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxmbGFnc3xQUEMzMmRpYWIiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8ZmxhZ3N8UFBDMzJnbnUiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8ZmxhZ3N8UFBDNjAzZGlhYiIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxmbGFnc3xQUEM2MDNnbnUiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8bm9uRGJnRmxhZ3N8UFBDMzJkaWFiIiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfG5vbkRiZ0ZsYWdzfFBQQzMyZ251IiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfG5vbkRiZ0ZsYWdzfFBQQzYwM2RpYWIiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8bm9uRGJnRmxhZ3N8UFBDNjAzZ251IiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxvYmplY3QiIHZhbHVlPSJmYWxzZSIvPg0KKyAgICAgICAgICAgIDxib29sZWFuQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8cGFzc0FibGUiIHZhbHVlPSJ0cnVlIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfHNpZ3MiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfGNtZCIgdmFsdWU9IiVtYWtlcHJlZml4JSBtYWtlIC0tbm8tcHJpbnQtZGlyZWN0b3J5Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xkZWZhdWx0U3BlYyIgdmFsdWU9IlBQQzYwM2dudSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98cmVkaXJEaXJ8UFBDMzJkaWFiIiB2YWx1ZT0iUFBDMzJkaWFiIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xyZWRpckRpcnxQUEMzMmdudSIgdmFsdWU9IlBQQzMyZ251Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xyZWRpckRpcnxQUEM2MDNkaWFiIiB2YWx1ZT0iUFBDNjAzZGlhYiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98cmVkaXJEaXJ8UFBDNjAzZ251IiB2YWx1ZT0iUFBDNjAzZ251Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xyZWRpclJvb3QiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8bGlzdEF0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xzcGVjcyI+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9IlBQQzMyZGlhYiIvPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSJQUEMzMmdudSIvPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSJQUEM2MDNkaWFiIi8+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9IlBQQzYwM2dudSIvPg0KKyAgICAgICAgICAgIDwvbGlzdEF0dHJpYnV0ZT4NCisgICAgICAgICAgICA8aW50QXR0cmlidXRlIGtleT0iQnVpbGRTdXBwb3J0RW5hYmxlZCIgdmFsdWU9IjEiLz4NCisgICAgICAgICAgICA8bGlzdEF0dHJpYnV0ZSBrZXk9IkJ1aWxkU3VwcG9ydEZvckJ1aWxkU3BlY3MiPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSJQUEM2MDNnbnUiLz4NCisgICAgICAgICAgICA8L2xpc3RBdHRyaWJ1dGU+DQorICAgICAgICAgICAgPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJCdWlsZFRhcmdldENlbnRyaWMiIHZhbHVlPSJ0cnVlIi8+DQorICAgICAgICA8L21hcEF0dHJpYnV0ZT4NCisgICAgPC9hdHRyaWJ1dGVzPg0KKyAgICA8YnVpbGR0YXJnZXRzPg0KKyAgICAgICAgPGJ1aWxkdGFyZ2V0IGJ1aWxkdG9vbD0iTGlua2VyIiBuYW1lPSIyMDEwSW1hZ2VEZW1vIiBwYXNzZWQ9ImZhbHNlIiB0YXJnZXRuYW1lPSIyMDEwSW1hZ2VEZW1vIj4NCisgICAgICAgICAgICA8Y29udGVudHM+DQorICAgICAgICAgICAgICAgIDxmb2xkZXIgbmFtZT0iLzIwMTBJbWFnZURlbW8iIHJlY3Vyc2l2ZT0idHJ1ZSIvPg0KKyAgICAgICAgICAgIDwvY29udGVudHM+DQorICAgICAgICA8L2J1aWxkdGFyZ2V0Pg0KKyAgICA8L2J1aWxkdGFyZ2V0cz4NCis8L3dyeG1sPg0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby8yMDEwSW1hZ2VEZW1vL0Rhc2hib2FyZERhdGFTZW5kZXIuY3BwIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvdnh3b3Jrcy02LjMvdGFyZ2V0L3NyYy9kZW1vLzIwMTBJbWFnZURlbW8vRGFzaGJvYXJkRGF0YVNlbmRlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmNiMTlhYgotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby8yMDEwSW1hZ2VEZW1vL0Rhc2hib2FyZERhdGFTZW5kZXIuY3BwCkBAIC0wLDAgKzEsMjI2IEBACisjaW5jbHVkZSAiRGFzaGJvYXJkRGF0YVNlbmRlci5oIg0KKyNpbmNsdWRlICJXUElMaWIuaCINCisNCisvKioNCisgKiBTZW5kIGRhdGEgdG8gdGhlIGRhc2hib2FyZC4NCisgKiBUaGlzIGNsYXNzIHNlbmRzIHR3byB0eXBlcyBvZiBkYXRhIHRvIHRoZSBkYXNoYm9hcmQgcHJvZ3JhbToNCisgKiAxLiBEYXRhIHJlcHJlc2VudGluZyBhbGwgdGhlIHBvcnRzIG9uIHRoZSByb2JvdA0KKyAqIDIuIENhbWVyYSB0cmFja2luZyBkYXRhIHNvIHRoZSBkYXNoYm9hcmQgY2FuIGFubm90YXRlIHRoZSB2aWRlbyBzdHJlYW0gd2l0aA0KKyAqICAgIHRhcmdldCBpbmZvcm1hdGlvbi4NCisgKi8NCitEYXNoYm9hcmREYXRhU2VuZGVyOjpEYXNoYm9hcmREYXRhU2VuZGVyKCkNCit7DQorCS8vIHRoZXNlIHRpbWVycyBtYWtlIHN1cmUgdGhhdCB0aGUgZGF0YSBpcyBub3Qgc2VudCB0byB0aGUgZGFzaGJvYXJkIG1vcmUNCisJLy8gdGhhbiAxMCB0aW1lcyBwZXIgc2Vjb25kIGZvciBlZmZpY2llbmN5Lg0KKwlJT1RpbWVyID0gbmV3IFRpbWVyKCk7DQorCXZpc2lvblRpbWVyID0gbmV3IFRpbWVyKCk7DQorCUlPVGltZXItPlN0YXJ0KCk7DQorCXZpc2lvblRpbWVyLT5TdGFydCgpOw0KKwlhbmFsb2dNb2R1bGUxID0gQW5hbG9nTW9kdWxlOjpHZXRJbnN0YW5jZSgxKTsNCisJYW5hbG9nTW9kdWxlMiA9IEFuYWxvZ01vZHVsZTo6R2V0SW5zdGFuY2UoMik7DQorCWRpZ2l0YWxNb2R1bGUxID0gRGlnaXRhbE1vZHVsZTo6R2V0SW5zdGFuY2UoMSk7DQorCWRpZ2l0YWxNb2R1bGUyID0gRGlnaXRhbE1vZHVsZTo6R2V0SW5zdGFuY2UoMik7DQorfQ0KKw0KKy8qKg0KKyAqIFNlbmQgdGhlIHZpc2lvbiB0cmFja2luZyBkYXRhLg0KKyAqIFNlbmRzIHRoZSB2aXNpb24gaW5mb3JtYXRpb24gdG8gdGhlIGRhc2hib2FyZCBzbyB0aGF0IHRoZSBpbWFnZXMgd2lsbCBiZSBhbm5vdGF0ZWQNCisgKiBhbmQgdGhlIGdyYXBocyB3aWxsIG9wZXJhdGUuDQorICovDQordm9pZCBEYXNoYm9hcmREYXRhU2VuZGVyOjpzZW5kVmlzaW9uRGF0YShkb3VibGUgam95U3RpY2tYLA0KKwkJCQkJZG91YmxlIGd5cm9BbmdsZSwNCisJCQkJCWRvdWJsZSBneXJvUmF0ZSwNCisJCQkJCWRvdWJsZSB0YXJnZXRYLA0KKwkJCQkJdmVjdG9yPFRhcmdldD4gdGFyZ2V0cykNCit7DQorCWlmICh2aXNpb25UaW1lci0+R2V0KCkgPCAwLjEpDQorCQlyZXR1cm47DQorCXZpc2lvblRpbWVyLT5SZXNldCgpOw0KKwlEYXNoYm9hcmQgJmRhc2ggPSBEcml2ZXJTdGF0aW9uOjpHZXRJbnN0YW5jZSgpLT5HZXRIaWdoUHJpb3JpdHlEYXNoYm9hcmRQYWNrZXIoKTsNCisJZGFzaC5BZGRDbHVzdGVyKCk7IC8vIHdpcmUgKDIgZWxlbWVudHMpDQorCXsNCisJCWRhc2guQWRkQ2x1c3RlcigpOyAvLyB0cmFja2luZyBkYXRhDQorCQl7DQorCQkJZGFzaC5BZGREb3VibGUoam95U3RpY2tYKTsgLy8gSm95c3RpY2sgWA0KKwkJCWRhc2guQWRkRG91YmxlKCgoKChpbnQpZ3lyb0FuZ2xlKSArIDM2MCArIDE4MCkgJSAzNjApIC0gMTgwLjApOyAvLyBhbmdsZQ0KKwkJCWRhc2guQWRkRG91YmxlKDAuMCk7IC8vIGFuZ3VsYXIgcmF0ZQ0KKwkJCWRhc2guQWRkRG91YmxlKHRhcmdldFgpOyAvLyBvdGhlciBYDQorCQl9DQorCQlkYXNoLkZpbmFsaXplQ2x1c3RlcigpOw0KKwkJZGFzaC5BZGRDbHVzdGVyKCk7IC8vIHRhcmdldCBJbmZvICgyIGVsZW1lbnRzKQ0KKwkJew0KKwkJCWRhc2guQWRkQXJyYXkoKTsgLy8gdGFyZ2V0cw0KKwkJCXsNCisJCQkJZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRhcmdldHMuc2l6ZSgpOyBpKyspDQorCQkJCXsNCisJCQkJCWRhc2guQWRkQ2x1c3RlcigpOyAvLyB0YXJnZXRzDQorCQkJCQl7DQorCQkJCQkJZGFzaC5BZGREb3VibGUodGFyZ2V0c1tpXS5tX3Njb3JlKTsgLy8gdGFyZ2V0IHNjb3JlDQorCQkJCQkJZGFzaC5BZGRDbHVzdGVyKCk7IC8vIENpcmNsZSBEZXNjcmlwdGlvbiAoNSBlbGVtZW50cykNCisJCQkJCQl7DQorCQkJCQkJCWRhc2guQWRkQ2x1c3RlcigpOyAvLyBQb3NpdGlvbiAoMiBlbGVtZW50cykNCisJCQkJCQkJew0KKwkJCQkJCQkJZGFzaC5BZGRGbG9hdCgoZmxvYXQpICh0YXJnZXRzW2ldLm1feFBvcyAvIHRhcmdldHNbaV0ubV94TWF4KSk7IC8vIFgNCisJCQkJCQkJCWRhc2guQWRkRmxvYXQoKGZsb2F0KSB0YXJnZXRzW2ldLm1feVBvcyk7IC8vIFkNCisJCQkJCQkJfQ0KKwkJCQkJCQlkYXNoLkZpbmFsaXplQ2x1c3RlcigpOw0KKw0KKwkJCQkJCQlkYXNoLkFkZERvdWJsZSh0YXJnZXRzW2ldLm1fcm90YXRpb24pOyAvLyBBbmdsZQ0KKwkJCQkJCQlkYXNoLkFkZERvdWJsZSh0YXJnZXRzW2ldLm1fbWFqb3JSYWRpdXMpOyAvLyBNYWpvciBSYWRpdXMNCisJCQkJCQkJZGFzaC5BZGREb3VibGUodGFyZ2V0c1tpXS5tX21pbm9yUmFkaXVzKTsgLy8gTWlub3IgUmFkaXVzDQorCQkJCQkJCWRhc2guQWRkRG91YmxlKHRhcmdldHNbaV0ubV9yYXdTY29yZSk7IC8vIFJhdyBzY29yZQ0KKwkJCQkJCX0NCisJCQkJCQlkYXNoLkZpbmFsaXplQ2x1c3RlcigpOyAvLyBQb3NpdGlvbg0KKwkJCQkJfQ0KKwkJCQkJZGFzaC5GaW5hbGl6ZUNsdXN0ZXIoKTsgLy8gdGFyZ2V0cw0KKwkJCQl9DQorCQkJfQ0KKwkJCWRhc2guRmluYWxpemVBcnJheSgpOw0KKw0KKwkJCWRhc2guQWRkVTMyKChpbnQpIDApOw0KKwkJfQ0KKwkJZGFzaC5GaW5hbGl6ZUNsdXN0ZXIoKTsgLy8gdGFyZ2V0IEluZm8NCisJfQ0KKwlkYXNoLkZpbmFsaXplQ2x1c3RlcigpOyAvLyB3aXJlDQorCWRhc2guRmluYWxpemUoKTsNCit9DQorDQorLyoqDQorICogU2VuZCBJTyBwb3J0IGRhdGEgdG8gdGhlIGRhc2hib2FyZC4NCisgKiBTZW5kIGRhdGEgcmVwcmVzZW50aW5nIHRoZSBvdXRwdXQgb2YgYWxsIHRoZSBJTyBwb3J0cyBvbiB0aGUgY1JJTyB0byB0aGUgZGFzaGJvYXJkLg0KKyAqIFRoaXMgaXMgcHJvYmFibHkgbm90IHRoZSBiZXN0IGRhdGEgdG8gc2VuZCBmb3IgeW91ciByb2JvdC4gQmV0dGVyIHdvdWxkIGJlIGhpZ2hlcg0KKyAqIGxldmVsIGluZm9ybWF0aW9uIGxpa2UgYXJtIGFuZ2xlIG9yIGNvbGxlY3RvciBzdGF0dXMuIEJ1dCB0aGlzIGlzIGEgc2FtcGxlIGFuZCB5b3UncmUNCisgKiBmcmVlIHRvIG1vZGlmeSBpdC4gQmUgc3VyZSB0byBtYWtlIHRoZSBjb3JyZXNwb25kaW5nIGNoYW5nZXMgaW4gdGhlIExhYlZJRVcgZXhhbXBsZQ0KKyAqIGRhc2hib2FyZCBwcm9ncmFtIHJ1bm5pbmcgb24geW91ciBkcml2ZXIgc3RhdGlvbi4NCisgKi8NCit2b2lkIERhc2hib2FyZERhdGFTZW5kZXI6OnNlbmRJT1BvcnREYXRhKCkNCit7DQorCWlmIChJT1RpbWVyLT5HZXQoKSA8IDAuMSkNCisJCXJldHVybjsNCisJSU9UaW1lci0+UmVzZXQoKTsNCisJRGFzaGJvYXJkICZkYXNoID0gRHJpdmVyU3RhdGlvbjo6R2V0SW5zdGFuY2UoKS0+R2V0TG93UHJpb3JpdHlEYXNoYm9hcmRQYWNrZXIoKTsNCisJZGFzaC5BZGRDbHVzdGVyKCk7DQorCXsNCisJCWRhc2guQWRkQ2x1c3RlcigpOw0KKwkJeyAvL2FuYWxvZyBtb2R1bGVzIA0KKwkJCWRhc2guQWRkQ2x1c3RlcigpOw0KKwkJCXsNCisJCQkJaWYgKGFuYWxvZ01vZHVsZTEgIT0gTlVMTCkNCisJCQkJew0KKwkJCQkJZm9yIChpbnQgaSA9IDE7IGkgPD0gODsgaSsrKQ0KKwkJCQkJew0KKwkJCQkJCWRhc2guQWRkRmxvYXQoKGZsb2F0KWFuYWxvZ01vZHVsZTEtPkdldEF2ZXJhZ2VWb2x0YWdlKGkpKTsNCisJCQkJCX0NCisJCQkJfQ0KKwkJCQllbHNlDQorCQkJCXsNCisJCQkJCWZvciAoaW50IGkgPSAxOyBpIDw9IDg7IGkrKykNCisJCQkJCXsNCisJCQkJCQlkYXNoLkFkZEZsb2F0KDAuMCk7DQorCQkJCQl9DQorCQkJCX0NCisJCQl9DQorCQkJZGFzaC5GaW5hbGl6ZUNsdXN0ZXIoKTsNCisJCQlkYXNoLkFkZENsdXN0ZXIoKTsNCisJCQl7DQorCQkJCWlmIChhbmFsb2dNb2R1bGUyICE9IE5VTEwpDQorCQkJCXsNCisJCQkJCWZvciAoaW50IGkgPSAxOyBpIDw9IDg7IGkrKykNCisJCQkJCXsNCisJCQkJCQlkYXNoLkFkZEZsb2F0KChmbG9hdClhbmFsb2dNb2R1bGUyLT5HZXRBdmVyYWdlVm9sdGFnZShpKSk7DQorCQkJCQl9DQorCQkJCX0NCisJCQkJZWxzZQ0KKwkJCQl7DQorCQkJCQlmb3IgKGludCBpID0gMTsgaSA8PSA4OyBpKyspDQorCQkJCQl7DQorCQkJCQkJZGFzaC5BZGRGbG9hdCgwLjApOw0KKwkJCQkJfQ0KKwkJCQl9DQorCQkJfQ0KKwkJCWRhc2guRmluYWxpemVDbHVzdGVyKCk7DQorCQl9DQorCQlkYXNoLkZpbmFsaXplQ2x1c3RlcigpOw0KKw0KKwkJZGFzaC5BZGRDbHVzdGVyKCk7DQorCQl7IC8vZGlnaXRhbCBtb2R1bGVzDQorCQkJZGFzaC5BZGRDbHVzdGVyKCk7DQorCQkJew0KKwkJCQlkYXNoLkFkZENsdXN0ZXIoKTsNCisJCQkJew0KKwkJCQkJaWYgKGRpZ2l0YWxNb2R1bGUxICE9IE5VTEwpDQorCQkJCQl7DQorCQkJCQkJZGFzaC5BZGRVOChkaWdpdGFsTW9kdWxlMS0+R2V0UmVsYXlGb3J3YXJkKCkpOw0KKwkJCQkJCWRhc2guQWRkVTgoZGlnaXRhbE1vZHVsZTEtPkdldFJlbGF5UmV2ZXJzZSgpKTsNCisJCQkJCQlkYXNoLkFkZFUxNigoc2hvcnQpZGlnaXRhbE1vZHVsZTEtPkdldERJTygpKTsNCisJCQkJCQlkYXNoLkFkZFUxNigoc2hvcnQpZGlnaXRhbE1vZHVsZTEtPkdldERJT0RpcmVjdGlvbigpKTsNCisJCQkJCQlkYXNoLkFkZENsdXN0ZXIoKTsNCisJCQkJCQl7DQorCQkJCQkJCWZvciAoaW50IGkgPSAxOyBpIDw9IDEwOyBpKyspDQorCQkJCQkJCXsNCisJCQkJCQkJCWRhc2guQWRkVTgoKHVuc2lnbmVkIGNoYXIpZGlnaXRhbE1vZHVsZTEtPkdldFBXTShpKSk7DQorCQkJCQkJCX0NCisJCQkJCQl9DQorCQkJCQl9DQorCQkJCQllbHNlDQorCQkJCQl7DQorCQkJCQkJZGFzaC5BZGRVOCgwKTsNCisJCQkJCQlkYXNoLkFkZFU4KDApOw0KKwkJCQkJCWRhc2guQWRkVTE2KDApOw0KKwkJCQkJCWRhc2guQWRkVTE2KDApOw0KKwkJCQkJCWRhc2guQWRkQ2x1c3RlcigpOw0KKwkJCQkJCXsNCisJCQkJCQkJZm9yIChpbnQgaSA9IDE7IGkgPD0gMTA7IGkrKykNCisJCQkJCQkJCWRhc2guQWRkVTgoMCk7DQorCQkJCQkJfQ0KKwkJCQkJfQ0KKwkJCQkJZGFzaC5GaW5hbGl6ZUNsdXN0ZXIoKTsNCisJCQkJfQ0KKwkJCQlkYXNoLkZpbmFsaXplQ2x1c3RlcigpOw0KKwkJCX0NCisJCQlkYXNoLkZpbmFsaXplQ2x1c3RlcigpOw0KKw0KKwkJCWRhc2guQWRkQ2x1c3RlcigpOw0KKwkJCXsNCisJCQkJZGFzaC5BZGRDbHVzdGVyKCk7DQorCQkJCXsNCisJCQkJCWlmIChkaWdpdGFsTW9kdWxlMiAhPSBOVUxMKQ0KKwkJCQkJew0KKwkJCQkJCWRhc2guQWRkVTgoZGlnaXRhbE1vZHVsZTItPkdldFJlbGF5Rm9yd2FyZCgpKTsNCisJCQkJCQlkYXNoLkFkZFU4KGRpZ2l0YWxNb2R1bGUyLT5HZXRSZWxheUZvcndhcmQoKSk7DQorCQkJCQkJZGFzaC5BZGRVMTYoKHNob3J0KWRpZ2l0YWxNb2R1bGUyLT5HZXRESU8oKSk7DQorCQkJCQkJZGFzaC5BZGRVMTYoZGlnaXRhbE1vZHVsZTItPkdldERJT0RpcmVjdGlvbigpKTsNCisJCQkJCQlkYXNoLkFkZENsdXN0ZXIoKTsNCisJCQkJCQl7DQorCQkJCQkJCWZvciAoaW50IGkgPSAxOyBpIDw9IDEwOyBpKyspDQorCQkJCQkJCXsNCisJCQkJCQkJCWRhc2guQWRkVTgoKHVuc2lnbmVkIGNoYXIpZGlnaXRhbE1vZHVsZTItPkdldFBXTShpKSk7DQorCQkJCQkJCX0NCisJCQkJCQl9DQorCQkJCQl9DQorCQkJCQllbHNlDQorCQkJCQl7DQorCQkJCQkJZGFzaC5BZGRVOCgwKTsNCisJCQkJCQlkYXNoLkFkZFU4KDApOw0KKwkJCQkJCWRhc2guQWRkVTE2KDApOw0KKwkJCQkJCWRhc2guQWRkVTE2KDApOw0KKwkJCQkJCWRhc2guQWRkQ2x1c3RlcigpOw0KKwkJCQkJCXsNCisJCQkJCQkJZm9yIChpbnQgaSA9IDE7IGkgPD0gMTA7IGkrKykNCisJCQkJCQkJCWRhc2guQWRkVTgoMCk7DQorCQkJCQkJfQ0KKwkJCQkJfQ0KKwkJCQkJZGFzaC5GaW5hbGl6ZUNsdXN0ZXIoKTsNCisJCQkJfQ0KKwkJCQlkYXNoLkZpbmFsaXplQ2x1c3RlcigpOw0KKwkJCX0NCisJCQlkYXNoLkZpbmFsaXplQ2x1c3RlcigpOw0KKwkJfQ0KKwkJZGFzaC5GaW5hbGl6ZUNsdXN0ZXIoKTsNCisNCisJCS8vIENhbid0IHJlYWQgc29sZW5vaWRzIHdpdGhvdXQgYW4gaW5zdGFuY2Ugb2YgdGhlIG9iamVjdA0KKwkJZGFzaC5BZGRVOCgoY2hhcikgMCk7DQorCX0NCisJZGFzaC5GaW5hbGl6ZUNsdXN0ZXIoKTsNCisJZGFzaC5GaW5hbGl6ZSgpOw0KK30NCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vMjAxMEltYWdlRGVtby9EYXNoYm9hcmREYXRhU2VuZGVyLmggYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vMjAxMEltYWdlRGVtby9EYXNoYm9hcmREYXRhU2VuZGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODY4N2IzMwotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby8yMDEwSW1hZ2VEZW1vL0Rhc2hib2FyZERhdGFTZW5kZXIuaApAQCAtMCwwICsxLDQwIEBACisjaWZuZGVmIF9fRGFzaGJvYXJkRGF0YUZvcm1hdF9oX18NCisjZGVmaW5lIF9fRGFzaGJvYXJkRGF0YUZvcm1hdF9oX18NCisNCisjaW5jbHVkZSA8dmVjdG9yPg0KKyNpbmNsdWRlICJUYXJnZXQuaCINCisNCitjbGFzcyBBbmFsb2dNb2R1bGU7DQorY2xhc3MgRGlnaXRhbE1vZHVsZTsNCitjbGFzcyBUaW1lcjsNCisNCisvKioNCisgKiBUaGlzIGNsYXNzIGlzIGp1c3QgYW4gZXhhbXBsZSBvZiBvbmUgd2F5IHlvdSBjb3VsZCBvcmdhbml6ZSB0aGUgZGF0YSB0aGF0IHlvdSB3YW50DQorICogdG8gc2VuZCB0byB0aGUgZGFzaGJvYXJkLiAgVGhlIFBhY2tBbmRTZW5kIG1ldGhvZCBkb2VzIGFsbCB0aGUgd29yay4gIFlvdSBjb3VsZA0KKyAqIHB1dCB0aGUgcGFja2luZyBjb2RlIGRpcmVjdGx5IGluIHlvdXIgY29kZSwgYnV0IHRoaXMgbW9kZWwgcHJvdGVjdHMgeW91IGZyb20NCisgKiBwYWNraW5nIGRhdGEgaW4gdGhlIHdyb25nIG9yZGVyIHRocm91Z2hvdXQgeW91ciBjb2RlLg0KKyAqIA0KKyAqIFRoZSBkYXRhIGFuZCB0aGUgZm9ybWF0IG9mIHRoaXMgc3RydWN0dXJlIGFyZSBqdXN0IGFuIGV4YW1wbGUuICBJdCBpcyB3cml0dGVuIHRvDQorICogbWF0Y2ggdGhlIGluaXRpYWwgZGF0YSBmb3JtYXQgZXhwZWN0ZWQgYnkgdGhlIExhYlZJRVcgRGFzaGJvYXJkIHByb2plY3QuICBGZWVsIGZyZWUNCisgKiB0byBhZGQgZGF0YSBlbGVtZW50cyBvciByZW1vdmUgdGhlbS4gIEp1c3QgcmVtZW1iZXIgdG8gbWFrZSBhbnkgY2hhbmdlcyBjb25zaXN0ZW50bHkNCisgKiBiZXR3ZWVuIHRoZSBMYWJWSUVXICJEYXNoYm9hcmQgRGF0YXR5cGUiIGFuZCB0aGUgZGF0YSB0aGF0IGdldHMgcGFja2VkIGJ5IHRoaXMgY2xhc3MuDQorICovDQorY2xhc3MgRGFzaGJvYXJkRGF0YVNlbmRlcg0KK3sNCitwdWJsaWM6DQorCURhc2hib2FyZERhdGFTZW5kZXIoKTsNCisJdm9pZCBzZW5kSU9Qb3J0RGF0YSgpOw0KKwl2b2lkIHNlbmRWaXNpb25EYXRhKGRvdWJsZSBqb3lTdGlja1gsDQorCQkJCQlkb3VibGUgZ3lyb0FuZ2xlLA0KKwkJCQkJZG91YmxlIGd5cm9SYXRlLA0KKwkJCQkJZG91YmxlIHRhcmdldFgsDQorCQkJCQl2ZWN0b3I8VGFyZ2V0PiB0YXJnZXRzKTsNCitwcml2YXRlOg0KKwlUaW1lciAqdmlzaW9uVGltZXI7DQorCVRpbWVyICpJT1RpbWVyOw0KKwlBbmFsb2dNb2R1bGUgKmFuYWxvZ01vZHVsZTE7DQorCUFuYWxvZ01vZHVsZSAqYW5hbG9nTW9kdWxlMjsNCisJRGlnaXRhbE1vZHVsZSAqZGlnaXRhbE1vZHVsZTE7DQorCURpZ2l0YWxNb2R1bGUgKmRpZ2l0YWxNb2R1bGUyOw0KK307DQorI2VuZGlmIC8vIF9fRGFzaGJvYXJkRGF0YUZvcm1hdF9oX18NCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vMjAxMEltYWdlRGVtby9NeVJvYm90LmNwcCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby8yMDEwSW1hZ2VEZW1vL015Um9ib3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyYWM0NzcKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vMjAxMEltYWdlRGVtby9NeVJvYm90LmNwcApAQCAtMCwwICsxLDE3OCBAQAorI2luY2x1ZGUgIldQSUxpYi5oIg0KKw0KKyNpbmNsdWRlICJUYXJnZXQuaCINCisjaW5jbHVkZSAiRGFzaGJvYXJkRGF0YVNlbmRlci5oIg0KKw0KKyNkZWZpbmUgTUlOSU1VTV9TQ09SRSAwLjAxDQorDQorZG91YmxlIG91dHB1dFZhbHVlOw0KKw0KK2NsYXNzIFNhbXBsZVBJRE91dHB1dCA6IHB1YmxpYyBQSURPdXRwdXQgew0KK3B1YmxpYzoNCisJU2FtcGxlUElET3V0cHV0KFJvYm90RHJpdmUgKmJhc2UpIHsNCisJCW1fYmFzZSA9IGJhc2U7DQorCX0NCisNCisJdm9pZCBQSURXcml0ZShmbG9hdCBvdXRwdXQpIHsNCisJCW1fYmFzZS0+QXJjYWRlRHJpdmUoMC4wLCBvdXRwdXQpOw0KKwkJb3V0cHV0VmFsdWUgPSAtb3V0cHV0Ow0KKwl9DQorcHJpdmF0ZToNCisJUm9ib3REcml2ZSAqbV9iYXNlOw0KK307DQorDQorLyoqDQorICogRGVtbyB0aGF0IGRlbW9uc3RyYXRlcyB0cmFja2luZyB3aXRoIHRoZSByb2JvdC4NCisgKiBJbiBUZWxlb3AgbW9kZSB0aGUgcm9ib3Qgd2lsbCBkcml2ZSB1c2luZyBhIHNpbmdsZSBqb3lzdGljayBwbHVnZ2VkIGludG8gcG9ydCAxLg0KKyAqIFdoZW4gdGhlIHRyaWdnZXIgaXMgcHJlc3NlZCwgdGhlIHJvYm90IHdpbGwgdHVybiB0byBmYWNlIHRoZSBjaXJjdWxhciB0YXJnZXQuDQorICogVGhpcyBkZW1vIHVzZXMgdGhlIEF4aXNDYW1lcmEgY2xhc3MgdG8gZ3JhYiBpbWFnZXMuIEl0IGZpbmRzIHRoZSB0YXJnZXQgYW5kIGNvbXB1dGVzDQorICogdGhlIGFuZ2xlIHRvIHRoZSB0YXJnZXQgZnJvbSB0aGUgY2VudGVyIG9mIHZpZXcgaW4gdGhlIGNhbWVyYSBpbWFnZS4gSXQgdGhlbiBjb21wdXRlcw0KKyAqIGEgZ29hbCBjb3JyZWN0aW9uIGFuZ2xlIGFuZCB1c2VzIHRoZSBneXJvIHRvIHR1cm4gdG8gdGhhdCBoZWFkaW5nLiBUaGUgZ3lybyBjb3JyZWN0aW9uDQorICogaXMgZG9uZSB1c2luZyB0aGUgUElEIGNsYXNzIHRvIGRyaXZlIHRoZSByb2JvdCB0byB0aGUgZGVzaXJlZCBoZWFkaW5nLg0KKyAqIFRoZSBjb2VmZmljaWVudHMgZm9yIHRoZSBQSUQgbG9vcCB3aWxsIG5lZWQgdG8gYmUgdHVuZWQgdG8gbWF0Y2ggdGhlIENHIGFuZCB3ZWlnaHQgb2YNCisgKiB5b3VyIHJvYm90IGFzIHdlbGwgYXMgdGhlIHdoZWVsIGFuZCBkcml2aW5nIHN1cmZhY2UgdHlwZXMuDQorICogDQorICogQXMgYW4gYWRkZWQgYm9udXMsIHRoZSBwcm9ncmFtIGFsc28gc2VuZHMgcm9ib3Qgc3RhdHVzIGluZm9ybWF0aW9uIHRvIHRoZSBMYWJWSUVXIHNhbXBsZQ0KKyAqIGRhc2hib2FyZCBhcyB3ZWxsIGFzIGNhbWVyYSBhbm5vdGF0aW9uIHRvIHNob3cgdGhlIHRhcmdldHMgdGhhdCB0aGUgcm9ib3QgaXMgY3VycmVudGx5DQorICogc2VlaW5nLg0KKyAqLw0KK2NsYXNzIFJvYm90RGVtbyA6IHB1YmxpYyBTaW1wbGVSb2JvdCB7DQorCVJvYm90RHJpdmUgKmJhc2U7DQorCUpveXN0aWNrICpzdGljazsgLy8gb25seSBqb3lzdGljaw0KKwlHeXJvICpneXJvOw0KKwlQSURPdXRwdXQgKnBpZE91dHB1dDsNCisJRGFzaGJvYXJkRGF0YVNlbmRlciAqZGRzOw0KKw0KK3B1YmxpYzoNCisJUm9ib3REZW1vKHZvaWQpIHsNCisJCS8vIGluaXRpYWxpemUgYWxsIHZhcmlhYmxlcw0KKwkJYmFzZSA9IG5ldyBSb2JvdERyaXZlKDEsIDIpOw0KKwkJYmFzZS0+U2V0SW52ZXJ0ZWRNb3RvcihSb2JvdERyaXZlOjprUmVhckxlZnRNb3RvciwgdHJ1ZSk7DQorCQliYXNlLT5TZXRJbnZlcnRlZE1vdG9yKFJvYm90RHJpdmU6OmtSZWFyUmlnaHRNb3RvciwgdHJ1ZSk7DQorCQlzdGljayA9IG5ldyBKb3lzdGljaygxKTsNCisJCWd5cm8gPSBuZXcgR3lybygxKTsNCisJCXBpZE91dHB1dCA9IG5ldyBTYW1wbGVQSURPdXRwdXQoYmFzZSk7DQorCQlkZHMgPSBuZXcgRGFzaGJvYXJkRGF0YVNlbmRlcigpOw0KKwkJYmFzZS0+U2V0RXhwaXJhdGlvbigwLjUpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBNYWluIHRlc3QgcHJvZ3JhbSBpbiBvcGVyYXRvciBjb250cm9sIHBlcmlvZC4NCisJICogQXF1aXJlcyBpbWFnZXMgZnJvbSB0aGUgY2FtZXJhIGFuZCBkZXRlcm1pbmVzIGlmIHRoZXkgbWF0Y2ggRlJDIHRhcmdldHMuDQorCSAqLw0KKwl2b2lkIE9wZXJhdG9yQ29udHJvbCh2b2lkKSB7DQorCQkvKioNCisJCSAqIFNldCB1cCB0aGUgUElEIGNvbnRyb2xsZXIgd2l0aCBzb21lIHBhcmFtZXRlcnMgdGhhdCBzaG91bGQgYmUgcHJldHR5DQorCQkgKiBjbG9zZSBmb3IgbW9zdCBraXRib3Qgcm9ib3RzLg0KKwkJICovDQorCQlwcmludGYoIkluaXRpYWxpemluZyBQSURDb250cm9sbGVyXG4iKTsNCisJCVBJRENvbnRyb2xsZXIgdHVybkNvbnRyb2xsZXIoIDAuMSwgLy8gUA0KKwkJCQkwLjAwLCAvLyBJDQorCQkJCTAuNSwgLy8gRA0KKwkJCQlneXJvLCAvLyBzb3VyY2UNCisJCQkJcGlkT3V0cHV0LCAvLyBvdXRwdXQNCisJCQkJMC4wMDUpOyAvLyBwZXJpb2QNCisJCXR1cm5Db250cm9sbGVyLlNldElucHV0UmFuZ2UoLTM2MC4wLCAzNjAuMCk7DQorCQl0dXJuQ29udHJvbGxlci5TZXRPdXRwdXRSYW5nZSgtMC42LCAwLjYpOw0KKwkJdHVybkNvbnRyb2xsZXIuU2V0VG9sZXJhbmNlKDEuMCAvIDkwLjAgKiAxMDApOw0KKwkJdHVybkNvbnRyb2xsZXIuRGlzYWJsZSgpOw0KKw0KKwkJLy8gQ3JlYXRlIGFuZCBzZXQgdXAgYSBjYW1lcmEgaW5zdGFuY2UuIGZpcnN0IHdhaXQgZm9yIHRoZSBjYW1lcmEgdG8gc3RhcnQNCisJCS8vIGlmIHRoZSByb2JvdCB3YXMganVzdCBwb3dlcmVkIG9uLiBUaGlzIGdpdmVzIHRoZSBjYW1lcmEgdGltZSB0byBib290Lg0KKwkJcHJpbnRmKCJHZXR0aW5nIGNhbWVyYSBpbnN0YW5jZVxuIik7DQorCQkvLyBQYXNzIGluIHRoZSBJUCBhZGRyZXNzIG9mIHlvdXIgY2FtZXJhIGhlcmUuDQorCQkvLyBJZiB5b3UgY29ubmVjdCB5b3VyIGNhbWVyYSB0byB0aGUgc3dpdGNoIG9uIHlvdXIgcm9ib3QsIHRoZQ0KKwkJLy8gY2FtZXJhJ3MgSVAgYWRkcmVzcyBpcyB0eXBpY2FsbHkgMTAudGUuYW0uMTENCisJCUF4aXNDYW1lcmEgJmNhbWVyYSA9IEF4aXNDYW1lcmE6OkdldEluc3RhbmNlKCIxOTIuMTY4LjAuOTAiKTsNCisJCXByaW50ZigiU2V0dGluZyBjYW1lcmEgcGFyYW1ldGVyc1xuIik7DQorCQljYW1lcmEuV3JpdGVSZXNvbHV0aW9uKEF4aXNDYW1lcmE6OmtSZXNvbHV0aW9uXzMyMHgyNDApOw0KKwkJY2FtZXJhLldyaXRlQ29tcHJlc3Npb24oMjApOw0KKwkJY2FtZXJhLldyaXRlQnJpZ2h0bmVzcygwKTsNCisNCisJCS8vIHNldCBzZW5zaXRpdml0eSBmb3IgdGhlIDIwMTAga2l0IGd5cm8NCisJCWd5cm8tPlNldFNlbnNpdGl2aXR5KDAuMDA3KTsNCisNCisJCS8vIHNldCBNb3RvclNhZmV0eSBleHBpcmF0aW9uDQorCQliYXNlLT5TZXRFeHBpcmF0aW9uKDEuMCk7DQorDQorCQkvLyBrZWVwIHRyYWNrIG9mIHRoZSBwcmV2aW91cyBqb3lzdGljayB0cmlnZ2VyIHZhbHVlDQorCQlib29sIGxhc3RUcmlnZ2VyID0gZmFsc2U7DQorDQorCQkvLyBsb29wIGdldHRpbmcgaW1hZ2VzIGZyb20gdGhlIGNhbWVyYSBhbmQgZmluZGluZyB0YXJnZXRzDQorCQlwcmludGYoIlN0YXJ0aW5nIG9wZXJhdG9yIGNvbnRyb2wgbG9vcFxuIik7DQorCQlUaW1lciB0aW1lcjsNCisJCXRpbWVyLlN0YXJ0KCk7DQorCQl3aGlsZSAoSXNPcGVyYXRvckNvbnRyb2woKSkNCisJCXsNCisJCQlib29sIHRyaWdnZXI7DQorCQkJLy8gaWYgdHJpZ2dlciBpcyBwdWxsZWQsIHRoZSByb2JvdCB3aWxsIHJ1biB3aXRoIHN0YW5kYXJkIGFyY2FkZSBkcml2ZQ0KKwkJCS8vIG90aGVyd2lzZSB0aGUgcm9ib3Qgd2lsbCBob21lIHRvd2FyZHMgdGhlIHRhcmdldC4NCisJCQlpZiAodHJpZ2dlciA9IHN0aWNrLT5HZXRUcmlnZ2VyKCkpIHsNCisJCQkJaWYgKHRyaWdnZXIgIT0gbGFzdFRyaWdnZXIpIAkJCS8vIGNoZWNrIGlmIHRyaWdnZXIgY2hhbmdlZA0KKwkJCQkJdHVybkNvbnRyb2xsZXIuRW5hYmxlKCk7DQorCQkJCS8vIGlmIHRoZXJlJ3MgYSBmcmVzaCBhbmQgd2UncmUgYXQgdGhlIHByZXZpb3VzIHRhcmdldCBoZWFkaW5nIHRoZW4NCisJCQkJLy8gZ2V0IGEgY2FtZXJhIGltYWdlIGFuZCBwcm9jZXNzIGl0DQorCQkJCWlmIChjYW1lcmEuSXNGcmVzaEltYWdlKCkpDQorCQkJCXsNCisJCQkJCXRpbWVyLlJlc2V0KCk7DQorCQkJCQkvLyBnZXQgdGhlIGd5cm8gaGVhZGluZyB0aGF0IGdvZXMgd2l0aCB0aGlzIGltYWdlDQorCQkJCQlkb3VibGUgZ3lyb0FuZ2xlID0gZ3lyby0+UElER2V0KCk7DQorDQorCQkJCQkvLyBnZXQgdGhlIGNhbWVyYSBpbWFnZQ0KKwkJCQkJSFNMSW1hZ2UgKmltYWdlID0gY2FtZXJhLkdldEltYWdlKCk7DQorDQorCQkJCQkvLyBmaW5kIEZSQyB0YXJnZXRzIGluIHRoZSBpbWFnZQ0KKwkJCQkJdmVjdG9yPFRhcmdldD4gdGFyZ2V0cyA9IFRhcmdldDo6RmluZENpcmN1bGFyVGFyZ2V0cyhpbWFnZSk7DQorCQkJCQlkZWxldGUgaW1hZ2U7DQorCQkJCQlpZiAodGFyZ2V0cy5zaXplKCkgPT0gMCB8fCB0YXJnZXRzWzBdLm1fc2NvcmUgPCBNSU5JTVVNX1NDT1JFKQ0KKwkJCQkJew0KKwkJCQkJCS8vIG5vIHRhcmdldHMgZm91bmQuIE1ha2Ugc3VyZSB0aGUgZmlyc3Qgb25lIGluIHRoZSBsaXN0IGlzIDAsMA0KKwkJCQkJCS8vIHNpbmNlIHRoZSBkYXNoYm9hcmQgcHJvZ3JhbSBhbm5vdGF0ZXMgdGhlIGZpcnN0IHRhcmdldCBpbiBncmVlbg0KKwkJCQkJCS8vIGFuZCB0aGUgb3RoZXJzIGluIG1hZ2VudGEuIFdpdGggbm8gcXVhbGlmaWVkIHRhcmdldHMsIHRoZXknbGwgYWxsDQorCQkJCQkJLy8gYmUgbWFnZW50YS4NCisJCQkJCQlUYXJnZXQgbnVsbFRhcmdldDsNCisJCQkJCQludWxsVGFyZ2V0Lm1fbWFqb3JSYWRpdXMgPSAwLjA7DQorCQkJCQkJbnVsbFRhcmdldC5tX21pbm9yUmFkaXVzID0gMC4wOw0KKwkJCQkJCW51bGxUYXJnZXQubV9zY29yZSA9IDAuMDsNCisJCQkJCQlpZiAodGFyZ2V0cy5zaXplKCkgPT0gMCkNCisJCQkJCQkJdGFyZ2V0cy5wdXNoX2JhY2sobnVsbFRhcmdldCk7DQorCQkJCQkJZWxzZQ0KKwkJCQkJCQl0YXJnZXRzLmluc2VydCh0YXJnZXRzLmJlZ2luKCksIG51bGxUYXJnZXQpOw0KKwkJCQkJCWRkcy0+c2VuZFZpc2lvbkRhdGEoMC4wLCBneXJvLT5HZXRBbmdsZSgpLCAwLjAsIDAuMCwgdGFyZ2V0cyk7DQorCQkJCQkJaWYgKHRhcmdldHMuc2l6ZSgpID09IDApDQorCQkJCQkJCXByaW50ZigiTm8gdGFyZ2V0IGZvdW5kXG5cbiIpOw0KKwkJCQkJCWVsc2UNCisJCQkJCQkJcHJpbnRmKCJObyB2YWxpZCB0YXJnZXRzIGZvdW5kLCBiZXN0IHNjb3JlOiAlZiAiLCB0YXJnZXRzWzBdLm1fc2NvcmUpOw0KKwkJCQkJfQ0KKwkJCQkJZWxzZSB7DQorCQkJCQkJLy8gV2UgaGF2ZSBzb21lIHRhcmdldHMuDQorCQkJCQkJLy8gc2V0IHRoZSBuZXcgUElEIGhlYWRpbmcgc2V0cG9pbnQgdG8gdGhlIGZpcnN0IHRhcmdldCBpbiB0aGUgbGlzdA0KKwkJCQkJCWRvdWJsZSBob3Jpem9udGFsQW5nbGUgPSB0YXJnZXRzWzBdLkdldEhvcml6b250YWxBbmdsZSgpOw0KKwkJCQkJCWRvdWJsZSBzZXRQb2ludCA9IGd5cm9BbmdsZSArIGhvcml6b250YWxBbmdsZTsNCisNCisJCQkJCQl0dXJuQ29udHJvbGxlci5TZXRTZXRwb2ludChzZXRQb2ludCk7DQorCQkJCQkJDQorCQkJCQkJLy8gc2VuZCBkYXNoYmFvcmQgZGF0YSBmb3IgdGFyZ2V0IHRyYWNraW5nDQorCQkJCQkJZGRzLT5zZW5kVmlzaW9uRGF0YSgwLjAsIGd5cm8tPkdldEFuZ2xlKCksIDAuMCwgdGFyZ2V0c1swXS5tX3hQb3MgLyB0YXJnZXRzWzBdLm1feE1heCwgdGFyZ2V0cyk7DQorCQkJCQkJcHJpbnRmKCJUYXJnZXQgZm91bmQgJWYgIiwgdGFyZ2V0c1swXS5tX3Njb3JlKTsNCisvLwkJCQkJCXRhcmdldHNbMF0uUHJpbnQoKTsNCisJCQkJCX0NCisJCQkJCXByaW50ZigiVGltZTogJWZcbiIsIDEuMCAvIHRpbWVyLkdldCgpKTsNCisJCQkJfQ0KKwkJCX0gZWxzZSB7DQorCQkJCS8vIGlmIHRoZSB0cmlnZ2VyIGlzIG5vdCBwcmVzc2VkLCB0aGVuIGRvIEFyY2FkZSBkcml2aW5nIHdpdGggam95c3RpY2sgMQ0KKwkJCQlpZiAodHJpZ2dlciAhPSBsYXN0VHJpZ2dlcikNCisJCQkJCXR1cm5Db250cm9sbGVyLkRpc2FibGUoKTsNCisJCQkJYmFzZS0+QXJjYWRlRHJpdmUoc3RpY2spOw0KKwkJCX0NCisJCQlsYXN0VHJpZ2dlciA9IHRyaWdnZXI7DQorCQkJDQorCQkJLy8gc2VuZCB0aGUgZGFzaGJhb3JkIGRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoZSBJL08gcG9ydHMNCisJCQlkZHMtPnNlbmRJT1BvcnREYXRhKCk7DQorCQl9DQorCX0NCit9Ow0KKw0KK1NUQVJUX1JPQk9UX0NMQVNTKFJvYm90RGVtbykNCis7DQorDQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvdnh3b3Jrcy02LjMvdGFyZ2V0L3NyYy9kZW1vLzIwMTBJbWFnZURlbW8vVGFyZ2V0LmNwcCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby8yMDEwSW1hZ2VEZW1vL1RhcmdldC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmQxZTA5NAotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby8yMDEwSW1hZ2VEZW1vL1RhcmdldC5jcHAKQEAgLTAsMCArMSwxNjEgQEAKKyNpbmNsdWRlICJuaXZpc2lvbi5oIg0KKyNpbmNsdWRlICJWaXNpb24vTW9ub0ltYWdlLmgiDQorI2luY2x1ZGUgIlRhcmdldC5oIg0KKyNpbmNsdWRlIDxhbGdvcml0aG0+DQorI2luY2x1ZGUgPG1hdGguaD4NCisNCisvLyBUaGVzZSBwYXJhbWV0ZXJzIHNldCBlbGxpcHNlIGZpbmRpbmcgaW4gdGhlIE5JIGltYXEgKEltYWdlIEFxdWlzaXRpb24pIGxpYnJhcnkuDQorLy8gUmVmZXIgdG8gdGhlIENWSSBGdW5jdGlvbiBSZWZlcmVuY2UgUERGIGRvY3VtZW50IGluc3RhbGxlZCB3aXRoIExhYlZJRVcgZm9yDQorLy8gYWRkaXRpb25hbCBpbmZvcm1hdGlvbi4NCitzdGF0aWMgRWxsaXBzZURlc2NyaXB0b3IgZWxsaXBzZURlc2NyaXB0b3IgPSB7DQorCQkJCQkJCQkJCTMsIAkJLy8gbWluTWFqb3JSYWRpdXMNCisJCQkJCQkJCQkJMjAwLCAJLy8gbWF4TWFqb3JSYWRpdXMNCisJCQkJCQkJCQkJMywgCQkvLyBtaW5NaW5vclJhZGl1cw0KKwkJCQkJCQkJCQkxMDAJCS8vIG1heE1pbm9yUmFkaXVzDQorCQkJCQkJCQkJCX07DQorDQorc3RhdGljIEN1cnZlT3B0aW9ucyBjdXJ2ZU9wdGlvbnMgPSB7CUlNQVFfTk9STUFMX0lNQUdFLAkvLyBleHRyYWN0aW9uTW9kZQ0KKwkJCQkJCQkJCQk0MCwgCQkJCS8vIHRocmVzaG9sZA0KKwkJCQkJCQkJCQlJTUFRX05PUk1BTCwgCQkvLyBmaWx0ZXJTaXplDQorCQkJCQkJCQkJCTI1LCAJCQkJLy8gbWluTGVuZ3RoDQorCQkJCQkJCQkJCTE1LCAJCQkJLy8gcm93U3RlcFNpemUgDQorCQkJCQkJCQkJCTE1LCAJCQkJLy8gY29sdW1uU3RlcFNpemUNCisJCQkJCQkJCQkJMTAsIAkJCQkvLyBtYXhFbmRQb2ludEdhcA0KKwkJCQkJCQkJCQkxLAkJCQkJLy8gb25seUNsb3NlZA0KKwkJCQkJCQkJCQkwCQkJCQkvLyBzdWJwaXhlbEFjY3VyYWN5DQorCQkJCQkJCQkJCX07DQorc3RhdGljIFNoYXBlRGV0ZWN0aW9uT3B0aW9ucyBzaGFwZU9wdGlvbnMgPSB7DQorCQkJCQkJCQkJCUlNQVFfR0VPTUVUUklDX01BVENIX1NISUZUX0lOVkFSSUFOVCwJLy8gbW9kZQ0KKwkJCQkJCQkJCQlOVUxMLAkJCS8vIGFuZ2xlIHJhbmdlcw0KKwkJCQkJCQkJCQkwLAkJCQkvLyBudW0gYW5nbGUgcmFuZ2VzDQorCQkJCQkJCQkJCXs3NSwgMTI1fSwJCS8vIHNjYWxlIHJhbmdlDQorCQkJCQkJCQkJCTUwMAkJCQkvLyBtaW5NYXRjaFNjb3JlDQorfTsNCisNCisNCitkb3VibGUgVGFyZ2V0OjpHZXRIb3Jpem9udGFsQW5nbGUoKQ0KK3sNCisJZG91YmxlIHggPSBtX3hQb3M7DQorCXggPSB4ICogOS4wIC8gbV94TWF4Ow0KKwl4ID0gYXRhbjIoeCwgMjAuMCk7DQorCXggPSB4ICogMTgwLjAgLyAzLjE0MTU5Ow0KKwlyZXR1cm4geDsNCit9DQorDQorLyoqDQorICogQ29tcGFyZSB0d28gdGFyZ2V0cy4NCisgKiBDb21wYXJlIHRoZSBzY29yZSBvZiB0d28gdGFyZ2V0cyBmb3IgdGhlIHNvcnQgZnVuY3Rpb24gaW4gQysrLg0KKyAqIEBwYXJhbSB0MSB0aGUgZmlyc3QgVGFyZ2V0DQorICogQHBhcmFtIHQyIHRoZSBzZWNvbmQgVGFyZ2V0DQorICogQHJldHVybnMgKDEsIDAsIG9yIC0xKSBmb3IgdGhlIHNjb3JlcyBvZiB0MSA+IHQyLCB0MSA9PSB0MiwgYW5kIHQxIDwgdDINCisgKi8NCitpbnQgY29tcGFyZVRhcmdldHMoVGFyZ2V0IHQxLCBUYXJnZXQgdDIpDQorew0KKwlpZiAodDEubV9zY29yZSA+IHQyLm1fc2NvcmUpIHJldHVybiAxOw0KKwlpZiAodDEubV9zY29yZSA8IHQyLm1fc2NvcmUpIHJldHVybiAtMTsNCisJcmV0dXJuIDA7DQorfQ0KKw0KKy8qKg0KKyAqIEZpbmQgdGhlIGJlc3QgY2lyY3VsYXIgdGFyZ2V0IGluIHRoZSBpbWFnZS4NCisgKiBUaGUgYmVzdCB0YXJnZXQgaXMgdGhlIG9uZSB3aXRoIHR3byBjb25jZW50cmljIGNpcmNsZXMsIGxhcmdlc3Qgc2l6ZSwgYW5kIGJlc3Qgc2NvcmUNCisgKiBAcGFyYW0gaW1hZ2UgVGhlIGltYWdlIHRvIGV4YW1pbmUuDQorICogQHJldHVybnMgQSB0YXJnZXQgb2JqZWN0IHdpdGggdGhlIHBhcmFtZXRlcnMgZmlsbGVkIGluLg0KKyAqLw0KK3ZlY3RvcjxUYXJnZXQ+IFRhcmdldDo6RmluZENpcmN1bGFyVGFyZ2V0cyhIU0xJbWFnZSAqaW1hZ2UpDQorew0KKwl3cGlfYXNzZXJ0KGltYWdlICE9IE5VTEwpOw0KKwlpbnQgd2lkdGggPSBpbWFnZS0+R2V0V2lkdGgoKTsNCisJaW50IGhlaWdodCA9IGltYWdlLT5HZXRIZWlnaHQoKTsNCisNCisJdmVjdG9yPFRhcmdldD4gc29ydGVkVGFyZ2V0czsNCisNCisJLy8gZ2V0IHRoZSBsdW1pbmFuY2UgcGxhbmUgb25seSBmb3IgdGhlIGltYWdlIHRvIG1ha2UgdGhlIGNvZGUNCisJLy8gaW5zZW5zaXRpdmUgdG8gbGlnaHRpbmcgY29uZGl0aW9ucy4NCisJTW9ub0ltYWdlICAqbHVtaW5hbmNlUGxhbmUgPSBpbWFnZS0+R2V0THVtaW5hbmNlUGxhbmUoKTsNCisJdmVjdG9yPEVsbGlwc2VNYXRjaD4gKnJlc3VsdHMgPSBsdW1pbmFuY2VQbGFuZS0+RGV0ZWN0RWxsaXBzZXMoJmVsbGlwc2VEZXNjcmlwdG9yLCANCisJCQkJCQkJCQkJCQkJCQkJCSZjdXJ2ZU9wdGlvbnMsDQorCQkJCQkJCQkJCQkJCQkJCQkmc2hhcGVPcHRpb25zLA0KKwkJCQkJCQkJCQkJCQkJCQkJTlVMTCk7DQorCWRlbGV0ZSBsdW1pbmFuY2VQbGFuZTsNCisJaWYgKHJlc3VsdHMtPnNpemUoKSA9PSAwKQ0KKwl7DQorCQlyZXR1cm4gc29ydGVkVGFyZ2V0czsNCisJfQ0KKw0KKwkvLyBjcmVhdGUgYSBsaXN0IG9mIHRhcmdldHMgY29ycmVzcG9uZGluZyB0byBlYWNoIGVsbGlwc2UgZm91bmQNCisJLy8gaW4gdGhlIGltYWdlLg0KKwlmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVzdWx0cy0+c2l6ZSgpOyBpKyspDQorCXsNCisJCVRhcmdldCB0YXJnZXQ7DQorCQlFbGxpcHNlTWF0Y2ggZSA9IHJlc3VsdHMtPmF0KGkpOw0KKwkJdGFyZ2V0Lm1fcmF3U2NvcmUgPSBlLnNjb3JlOw0KKwkJdGFyZ2V0Lm1fc2NvcmUgPSAoZS5tYWpvclJhZGl1cyAqIGUubWlub3JSYWRpdXMpDQorCQkJCQkJCS8gKDEwMDEgLSBlLnNjb3JlKQ0KKwkJCQkJCQkvIChoZWlnaHQgKiB3aWR0aCkgKiAxMDA7DQorCQl0YXJnZXQubV9tYWpvclJhZGl1cyA9IGUubWFqb3JSYWRpdXMgLyBoZWlnaHQ7DQorCQl0YXJnZXQubV9taW5vclJhZGl1cyA9IGUubWlub3JSYWRpdXMgLyBoZWlnaHQ7DQorCQkvL2Fsd2F5cyBkaXZpZGUgYnkgaGVpZ2h0IHNvIHRoYXQgeCBhbmQgeSBhcmUgc2FtZSB1bml0cw0KKwkJdGFyZ2V0Lm1feFBvcyA9ICgyLjAgKiBlLnBvc2l0aW9uLnggLSB3aWR0aCkgLyBoZWlnaHQ7DQorCQl0YXJnZXQubV95UG9zID0gKDIuMCAqIGUucG9zaXRpb24ueSAtIGhlaWdodCkgLyBoZWlnaHQ7DQorCQl0YXJnZXQubV9yb3RhdGlvbiA9IGUucm90YXRpb247DQorCQl0YXJnZXQubV94TWF4ID0gKGRvdWJsZSl3aWR0aCAvIGhlaWdodDsNCisJCXRhcmdldC5tX2JvdGhGb3VuZCA9IGZhbHNlOw0KKwkJc29ydGVkVGFyZ2V0cy5wdXNoX2JhY2sodGFyZ2V0KTsNCisJfQ0KKwlkZWxldGUgcmVzdWx0czsNCisJDQorCS8vIHNvcnQgdGhlIGxpc3Qgb2YgdGFyZ2V0cyBieSBzY29yZQ0KKwlzb3J0KHNvcnRlZFRhcmdldHMuYmVnaW4oKSwgc29ydGVkVGFyZ2V0cy5lbmQoKSwgY29tcGFyZVRhcmdldHMpOw0KKwkNCisJLy8gZ28gdGhyb3VnaCBlYWNoIHRhcmdldCBmb3VuZCBpbiBkZXNjZW5kaW5nIHNjb3JlIG9yZGVyIGFuZCBsb29rDQorCS8vIGZvciBhbm90aGVyIHRhcmdldCB3aG9zZSBjZW50ZXIgaXMgY29udGFpbmVkIGluc2lkZSBvZiB0aGlzIHRhcmdldA0KKwkvLyBUaG9zZSBjb25jZW50cmljIHRhcmdldHMgZ2V0IGEgc2NvcmUgd2hpY2ggaXMgdGhlIHN1bSBvZiBib3RoIHRhcmdldHMNCisJdmVjdG9yPFRhcmdldD4gY29tYmluZWRUYXJnZXRzOw0KKwl3aGlsZSAoc29ydGVkVGFyZ2V0cy5zaXplKCkgPiAwKQ0KKwl7DQorCQl2ZWN0b3I8VGFyZ2V0Pjo6aXRlcmF0b3IgaXRlciA9IHNvcnRlZFRhcmdldHMuYmVnaW4oKTsNCisJCVRhcmdldCB0MSA9ICppdGVyKys7DQorCQlmb3IgKDsgaXRlciA8IHNvcnRlZFRhcmdldHMuZW5kKCk7IGl0ZXIrKykNCisJCXsNCisJCQlUYXJnZXQgdDIgPSAqaXRlcjsNCisJCQkNCisJCQkvLyBjaGVjayBpZiB0aGUgdHdvIGFyZSBjb25jZW50cmljDQorCQkJaWYgKChmYWJzKHQxLm1feFBvcyAtIHQyLm1feFBvcykgPCBtaW4odDEubV9taW5vclJhZGl1cywgdDIubV9taW5vclJhZGl1cykpICYmDQorCQkJCQkoZmFicyh0MS5tX3lQb3MgLSB0Mi5tX3lQb3MpIDwgbWluKHQxLm1fbWFqb3JSYWRpdXMsIHQyLm1fbWFqb3JSYWRpdXMpKSkNCisJCQl7DQorCQkJCS8vIGNyZWF0ZSB0aGUgaW5mb3JtYXRpb24gZm9yIHRoZSBjb21iaW5lZCB0YXJnZXQNCisJCQkJLy8gKHRoZSAyIGNvbmNlbnRyaWMgZWxsaXBzZXMpDQorCQkJCXQxLm1feFBvcyA9ICh0MS5tX3hQb3MgKyB0Mi5tX3hQb3MpIC8gMjsNCisJCQkJdDEubV95UG9zID0gKHQxLm1feVBvcyArIHQyLm1feVBvcykgLyAyOw0KKwkJCQl0MS5tX3Jhd1Njb3JlICs9IHQyLm1fcmF3U2NvcmU7DQorCQkJCXQxLm1fc2NvcmUgPSAodDEubV9zY29yZSArIHQyLm1fc2NvcmUpICogMi4wOyAgLy8gYWRkIGEgMnggYm9udXMgZm9yIGNvbmNlbnRyaWMNCisJCQkJdDEubV9tYWpvclJhZGl1cyA9IG1heCh0MS5tX21ham9yUmFkaXVzLCB0Mi5tX21ham9yUmFkaXVzKTsNCisJCQkJdDEubV9taW5vclJhZGl1cyA9IG1heCh0MS5tX21pbm9yUmFkaXVzLCB0Mi5tX21pbm9yUmFkaXVzKTsNCisJCQkJdDEubV9ib3RoRm91bmQgPSB0cnVlOw0KKwkJCQlzb3J0ZWRUYXJnZXRzLmVyYXNlKGl0ZXIpOyAvLyBsb29wIG5lZWRzIHRvIGJlIGFuIGludGVyYXRvcg0KKwkJCQlicmVhazsNCisJCQl9DQorCQl9DQorCQlzb3J0ZWRUYXJnZXRzLmVyYXNlKHNvcnRlZFRhcmdldHMuYmVnaW4oKSk7DQorLy8JCWlmICh0MS5tX2JvdGhGb3VuZCkNCisJCQljb21iaW5lZFRhcmdldHMucHVzaF9iYWNrKHQxKTsNCisJfQ0KKw0KKwkvLyBzb3J0IHRoZSBjb21iaW5lZCB0YXJnZXRzIHNvIHRoZSBoaWdoZXN0IHNjb3Jpbmcgb25lIGlzIGZpcnN0DQorCXNvcnQoY29tYmluZWRUYXJnZXRzLmJlZ2luKCksIGNvbWJpbmVkVGFyZ2V0cy5lbmQoKSwgY29tcGFyZVRhcmdldHMpOw0KKw0KKwlyZXR1cm4gY29tYmluZWRUYXJnZXRzOw0KK30NCisNCisvKioNCisgKiBQcmludCB0aGUgdGFyZ2V0Lg0KKyAqIFByaW50IGluZm9ybWF0aW9uIGFib3V0IHRoaXMgdGFyZ2V0IG9iamVjdC4NCisgKi8NCit2b2lkIFRhcmdldDo6UHJpbnQoKQ0KK3sNCisJcHJpbnRmKCJUYXJnZXQgZm91bmQ6ICglZiwgJWYpLCBtYWpvcjogJWYsIG1pbm9yOiAlZlxucm90YXRpb246ICVmLCBzY29yZTogJWYsIGJvdGg6ICVkXG5cbiIsDQorCQkJCQkJbV94UG9zLCBtX3lQb3MsDQorCQkJCQkJbV9tYWpvclJhZGl1cywgbV9taW5vclJhZGl1cywNCisJCQkJCQltX3JvdGF0aW9uLCBtX3Njb3JlLCBtX2JvdGhGb3VuZCk7DQorfQ0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby8yMDEwSW1hZ2VEZW1vL1RhcmdldC5oIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvdnh3b3Jrcy02LjMvdGFyZ2V0L3NyYy9kZW1vLzIwMTBJbWFnZURlbW8vVGFyZ2V0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTMyM2EzZgotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby8yMDEwSW1hZ2VEZW1vL1RhcmdldC5oCkBAIC0wLDAgKzEsMjUgQEAKKyNpZm5kZWYgX1RBUkdFVF9IDQorI2RlZmluZSBfVEFSR0VUX0gNCisNCisjaW5jbHVkZSA8dmVjdG9yPg0KKyNpbmNsdWRlICJWaXNpb24vSFNMSW1hZ2UuaCINCisNCitjbGFzcyBUYXJnZXQNCit7DQorcHVibGljOg0KKyAgICBkb3VibGUgbV9tYWpvclJhZGl1czsNCisgICAgZG91YmxlIG1fbWlub3JSYWRpdXM7DQorICAgIGRvdWJsZSBtX3Jhd1Njb3JlOw0KKyAgICBkb3VibGUgbV94UG9zOw0KKyAgICBkb3VibGUgbV95UG9zOw0KKyAgICBkb3VibGUgbV9zY29yZTsNCisgICAgZG91YmxlIG1fcm90YXRpb247DQorICAgIGRvdWJsZSBtX3hNYXg7DQorICAgIGJvb2wgbV9ib3RoRm91bmQ7DQorDQorICAgIHN0YXRpYyB2ZWN0b3I8VGFyZ2V0PiBGaW5kQ2lyY3VsYXJUYXJnZXRzKEhTTEltYWdlICppbWFnZSk7DQorICAgIGRvdWJsZSBHZXRIb3Jpem9udGFsQW5nbGUoKTsNCisgICAgdm9pZCBQcmludCgpOw0KK307DQorDQorI2VuZGlmDQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvdnh3b3Jrcy02LjMvdGFyZ2V0L3NyYy9kZW1vLzIwMTBJbWFnZURlbW8vc2FtcGxlLnByb3BlcnRpZXMgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vMjAxMEltYWdlRGVtby9zYW1wbGUucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZmM4OTVlCi0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvdnh3b3Jrcy02LjMvdGFyZ2V0L3NyYy9kZW1vLzIwMTBJbWFnZURlbW8vc2FtcGxlLnByb3BlcnRpZXMKQEAgLTAsMCArMSwyIEBACitwcm9qZWN0LnR5cGU9RG93bmxvYWRhYmxlS2VybmVsTW9kdWxlUHJvamVjdA0KK3BsYXRmb3JtLmlkPVZ4V29ya3MNCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vMjAxMEltYWdlRGVtby9zYW1wbGUudHh0IGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvdnh3b3Jrcy02LjMvdGFyZ2V0L3NyYy9kZW1vLzIwMTBJbWFnZURlbW8vc2FtcGxlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYWYxMzczCi0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvdnh3b3Jrcy02LjMvdGFyZ2V0L3NyYy9kZW1vLzIwMTBJbWFnZURlbW8vc2FtcGxlLnR4dApAQCAtMCwwICsxLDkgQEAKK0ZSQyAyMDEwIFZpc2lvbiBEZW1vbnN0cmF0aW9uIFByb2dyYW0NCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorVGhpcyBkZW1vbnN0YXJ0aW9uIHByb2dyYW0gc2hvd3MgaG93IHRvIHRyYWNrIHRvIHRoZSBGUkMgMjAxMCBnYW1lIHRhcmdldA0KK3VzaW5nIHRoZSBBeGlzQ2FtZXJhIGNsYXNzLiBUaGUgZGVtbyB1c2VzIHRoZSBjYW1lcmEgdG8gZ2V0IHRoZSBoZWFkaW5nIHRvDQordGhlIHRhcmdldCwgdGhlbiB1c2VzIGEgR3lybyB0byB0dXJuIHRvIHRoYXQgaGVhZGluZy4gSW4gYWRkaXRpb24sIHRoaXMNCitwcm9ncmFtIHdpbGwgZGlzcGxheSBkYXRhIGZyb20gdGhlIEkvTyBwb3J0cyBvbiB0aGUgY1JJTyBhbmQgQ2FtZXJhIHRyYWNraW5nDQoraW5mb3JtYXRpb24gb250byB0aGUgTGFiVklFVyBzYW1wbGUgZGFzaGJvYXJkLg0KKw0KKw0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9CdWlsdGluRGVmYXVsdENvZGUvLmNwcm9qZWN0IGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvdnh3b3Jrcy02LjMvdGFyZ2V0L3NyYy9kZW1vL0J1aWx0aW5EZWZhdWx0Q29kZS8uY3Byb2plY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzVjNTM3NQotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9CdWlsdGluRGVmYXVsdENvZGUvLmNwcm9qZWN0CkBAIC0wLDAgKzEsMjkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQorPD9maWxlVmVyc2lvbiA0LjAuMD8+DQorDQorPGNwcm9qZWN0Pg0KKzxzdG9yYWdlTW9kdWxlIG1vZHVsZUlkPSJvcmcuZWNsaXBzZS5jZHQuY29yZS5zZXR0aW5ncyI+DQorPGNjb25maWd1cmF0aW9uIGlkPSJvcmcuZWNsaXBzZS5jZHQuY29yZS5kZWZhdWx0LmNvbmZpZy4xMjAyOTg2NzE2Ij4NCis8c3RvcmFnZU1vZHVsZSBidWlsZFN5c3RlbUlkPSJvcmcuZWNsaXBzZS5jZHQuY29yZS5kZWZhdWx0Q29uZmlnRGF0YVByb3ZpZGVyIiBpZD0ib3JnLmVjbGlwc2UuY2R0LmNvcmUuZGVmYXVsdC5jb25maWcuMTIwMjk4NjcxNiIgbW9kdWxlSWQ9Im9yZy5lY2xpcHNlLmNkdC5jb3JlLnNldHRpbmdzIiBuYW1lPSJDb25maWd1cmF0aW9uIj4NCis8ZXh0ZXJuYWxTZXR0aW5ncy8+DQorPGV4dGVuc2lvbnM+DQorPGV4dGVuc2lvbiBpZD0iY29tLndpbmRyaXZlci5pZGUuY29yZS5XUlNjYW5uZXJJbmZvUHJvdmlkZXIiIHBvaW50PSJvcmcuZWNsaXBzZS5jZHQuY29yZS5TY2FubmVySW5mb1Byb3ZpZGVyIi8+DQorPGV4dGVuc2lvbiBpZD0iY29tLndpbmRyaXZlci5pZGUuY29yZS5XUkVsZlBhcnNlclZ4V29ya3MiIHBvaW50PSJvcmcuZWNsaXBzZS5jZHQuY29yZS5CaW5hcnlQYXJzZXIiLz4NCis8ZXh0ZW5zaW9uIGlkPSJvcmcuZWNsaXBzZS5jZHQuY29yZS5HTlVfRUxGIiBwb2ludD0ib3JnLmVjbGlwc2UuY2R0LmNvcmUuQmluYXJ5UGFyc2VyIi8+DQorPC9leHRlbnNpb25zPg0KKzwvc3RvcmFnZU1vZHVsZT4NCis8c3RvcmFnZU1vZHVsZSBtb2R1bGVJZD0ib3JnLmVjbGlwc2UuY2R0LmNvcmUuZXh0ZXJuYWxTZXR0aW5ncyIvPg0KKzxzdG9yYWdlTW9kdWxlIG1vZHVsZUlkPSJvcmcuZWNsaXBzZS5jZHQuY29yZS5wYXRoZW50cnkiPg0KKzxwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSIiLz4NCis8cGF0aGVudHJ5IGtpbmQ9Im91dCIgcGF0aD0iIi8+DQorPHBhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9ImNvbS53aW5kcml2ZXIuaWRlLmNvcmUuV1JfQ09OVEFJTkVSIi8+DQorPHBhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9ImNvbS53aW5kcml2ZXIuaWRlLmNvcmUuYnVpbGQubW9kZWwuV1JfVVNFUkRFRklORURfQ09OVEFJTkVSIi8+DQorPC9zdG9yYWdlTW9kdWxlPg0KKzxzdG9yYWdlTW9kdWxlIG1vZHVsZUlkPSJzY2FubmVyQ29uZmlndXJhdGlvbiIvPg0KKzxzdG9yYWdlTW9kdWxlIG1vZHVsZUlkPSJ1c2VyZGVmaW5lZENvbnRhaW5lciI+DQorPGluZGV4QWxsRmlsZXMgdmFsdWU9ImZhbHNlIi8+DQorPGluaXRpYWxpemVkIHZhbHVlPSJ0cnVlIi8+DQorPC9zdG9yYWdlTW9kdWxlPg0KKzwvY2NvbmZpZ3VyYXRpb24+DQorPC9zdG9yYWdlTW9kdWxlPg0KKzwvY3Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvdnh3b3Jrcy02LjMvdGFyZ2V0L3NyYy9kZW1vL0J1aWx0aW5EZWZhdWx0Q29kZS8ucHJvamVjdCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9CdWlsdGluRGVmYXVsdENvZGUvLnByb2plY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGY3ZjI5OAotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9CdWlsdGluRGVmYXVsdENvZGUvLnByb2plY3QKQEAgLTAsMCArMSwyMCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCis8cHJvamVjdERlc2NyaXB0aW9uPg0KKwk8bmFtZT5CdWlsdGluRGVmYXVsdENvZGU8L25hbWU+DQorCTxjb21tZW50PjwvY29tbWVudD4NCisJPHByb2plY3RzPg0KKwk8L3Byb2plY3RzPg0KKwk8YnVpbGRTcGVjPg0KKwkJPGJ1aWxkQ29tbWFuZD4NCisJCQk8bmFtZT5jb20ud2luZHJpdmVyLmlkZS5jb3JlLndyYnVpbGRlcjwvbmFtZT4NCisJCQk8YXJndW1lbnRzPg0KKwkJCTwvYXJndW1lbnRzPg0KKwkJPC9idWlsZENvbW1hbmQ+DQorCTwvYnVpbGRTcGVjPg0KKwk8bmF0dXJlcz4NCisJCTxuYXR1cmU+Y29tLndpbmRyaXZlci5pZGUuY29yZS53cm5hdHVyZTwvbmF0dXJlPg0KKwkJPG5hdHVyZT5jb20ud2luZHJpdmVyLmlkZS5jb3JlLndyY29yZW5hdHVyZTwvbmF0dXJlPg0KKwkJPG5hdHVyZT5vcmcuZWNsaXBzZS5jZHQuY29yZS5jbmF0dXJlPC9uYXR1cmU+DQorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmNkdC5jb3JlLmNjbmF0dXJlPC9uYXR1cmU+DQorCTwvbmF0dXJlcz4NCis8L3Byb2plY3REZXNjcmlwdGlvbj4NCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vQnVpbHRpbkRlZmF1bHRDb2RlLy53cm1ha2VmaWxlIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvdnh3b3Jrcy02LjMvdGFyZ2V0L3NyYy9kZW1vL0J1aWx0aW5EZWZhdWx0Q29kZS8ud3JtYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMWRkN2Y4Ci0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvdnh3b3Jrcy02LjMvdGFyZ2V0L3NyYy9kZW1vL0J1aWx0aW5EZWZhdWx0Q29kZS8ud3JtYWtlZmlsZQpAQCAtMCwwICsxLDQ4IEBACisjIFRoZSBmaWxlICIud3JtYWtlZmlsZSIgaXMgdGhlIHRlbXBsYXRlIHVzZWQgYnkgdGhlIFdpbmQgUml2ZXIgV29ya2JlbmNoIHRvDQorIyBnZW5lcmF0ZSB0aGUgbWFrZWZpbGVzIG9mIHRoaXMgcHJvamVjdC4gQWRkIHVzZXItc3BlY2lmaWMgYnVpbGQgdGFyZ2V0cyBhbmQNCisjIG1ha2UgcnVsZXMgb25seSghKSBpbiB0aGlzIHByb2plY3QncyAiLndybWFrZWZpbGUiIGZpbGUuIFRoZXNlIHdpbGwgdGhlbiBiZQ0KKyMgYXV0b21hdGljYWxseSBkdW1wZWQgaW50byB0aGUgbWFrZWZpbGVzLg0KKw0KK1dJTkRfSE9NRSA6PSAkKHN1YnN0IFwsLywkKFdJTkRfSE9NRSkpDQorV0lORF9CQVNFIDo9ICQoc3Vic3QgXCwvLCQoV0lORF9CQVNFKSkNCitXSU5EX1VTUiA6PSAkKHN1YnN0IFwsLywkKFdJTkRfVVNSKSkNCisNCithbGwgOiBwcmVfYnVpbGQgbWFpbl9hbGwgcG9zdF9idWlsZA0KKw0KK19jbGVhbiA6Og0KKwlAZWNobyAibWFrZTogcmVtb3ZpbmcgdGFyZ2V0cyBhbmQgb2JqZWN0cyBvZiBgcHdkYCINCisNCislSURFX0dFTkVSQVRFRCUNCisNCistaW5jbHVkZSAkKFBSSl9ST09UX0RJUikvKi5tYWtlZmlsZQ0KKw0KKy1pbmNsdWRlICoubWFrZWZpbGUNCisNCittYWluX2FsbCA6IGV4dGVybmFsX2J1aWxkICQoUFJPSkVDVF9UQVJHRVRTKQ0KKwlAZWNobyAibWFrZTogYnVpbHQgdGFyZ2V0cyBvZiBgcHdkYCINCisNCisjIGVudHJ5IHBvaW50IGZvciBleHRlbmRpbmcgdGhlIGJ1aWxkDQorZXh0ZXJuYWxfYnVpbGQgOjoNCisJQGVjaG8gIiINCisNCisjIG1haW4gZW50cnkgcG9pbnQgZm9yIHByZSBwcm9jZXNzaW5nIHByaW9yIHRvIHRoZSBidWlsZA0KK3ByZV9idWlsZCA6OiAkKFBSRV9CVUlMRF9TVEVQKSBnZW5lcmF0ZV9zb3VyY2VzDQorCUBlY2hvICIiDQorDQorIyBlbnRyeSBwb2ludCBmb3IgZ2VuZXJhdGluZyBzb3VyY2VzIHByaW9yIHRvIHRoZSBidWlsZA0KK2dlbmVyYXRlX3NvdXJjZXMgOjoNCisJQGVjaG8gIiINCisNCisjIG1haW4gZW50cnkgcG9pbnQgZm9yIHBvc3QgcHJvY2Vzc2luZyBhZnRlciB0aGUgYnVpbGQNCitwb3N0X2J1aWxkIDo6ICQoUE9TVF9CVUlMRF9TVEVQKSBkZXBsb3lfb3V0cHV0DQorCUBlY2hvICIiDQorDQorIyBlbnRyeSBwb2ludCBmb3IgZGVwbG95aW5nIG91dHB1dCBhZnRlciB0aGUgYnVpbGQNCitkZXBsb3lfb3V0cHV0IDo6DQorCUBlY2hvICIiDQorDQorY2xlYW4gOjogZXh0ZXJuYWxfY2xlYW4gJChDTEVBTl9TVEVQKSBfY2xlYW4NCisNCisjIGVudHJ5IHBvaW50IGZvciBleHRlbmRpbmcgdGhlIGJ1aWxkIGNsZWFuDQorZXh0ZXJuYWxfY2xlYW4gOjoNCisJQGVjaG8gIiINCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vQnVpbHRpbkRlZmF1bHRDb2RlLy53cnByb2plY3QgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vQnVpbHRpbkRlZmF1bHRDb2RlLy53cnByb2plY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGU5ZTQxYwotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9CdWlsdGluRGVmYXVsdENvZGUvLndycHJvamVjdApAQCAtMCwwICsxLDI1NCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCis8d3J4bWw+DQorICAgIDxwcm9wZXJ0aWVzIHBsYXRmb3JtPSJWeFdvcmtzIiBwbGF0Zm9ybV9uYW1lPSJ2eHdvcmtzLTYuMyIgcm9vdD0iMSIgdHlwZT0iRG93bmxvYWRhYmxlS2VybmVsTW9kdWxlUHJvamVjdCIvPg0KKyAgICA8YXR0cmlidXRlcz4NCisgICAgICAgIDxtYXBBdHRyaWJ1dGU+DQorICAgICAgICAgICAgPGxpc3RBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98R2xvYmFsTWFjcm9zIj4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iUFJPSkVDVF9UWVBFIi8+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9IkRFRklORVMiLz4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iRVhQQU5EX0RCRyIvPg0KKyAgICAgICAgICAgIDwvbGlzdEF0dHJpYnV0ZT4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfEdsb2JhbE1hY3JvfERFRklORVMiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfEdsb2JhbE1hY3JvfEVYUEFORF9EQkciIHZhbHVlPSIwIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xHbG9iYWxNYWNyb3xQUk9KRUNUX1RZUEUiIHZhbHVlPSJES00iLz4NCisgICAgICAgICAgICA8bGlzdEF0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xJbmNsfFBQQzMyZGlhYiI+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9Ii1JJChXSU5EX0JBU0UpL3RhcmdldC9oIi8+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9Ii1JJChXSU5EX0JBU0UpL3RhcmdldC9oL3dybi9jb3JlaXAiLz4NCisgICAgICAgICAgICA8L2xpc3RBdHRyaWJ1dGU+DQorICAgICAgICAgICAgPGxpc3RBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98SW5jbHxQUEMzMmdudSI+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9Ii1JJChXSU5EX0JBU0UpL3RhcmdldC9oIi8+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9Ii1JJChXSU5EX0JBU0UpL3RhcmdldC9oL3dybi9jb3JlaXAiLz4NCisgICAgICAgICAgICA8L2xpc3RBdHRyaWJ1dGU+DQorICAgICAgICAgICAgPGxpc3RBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98SW5jbHxQUEM2MDNkaWFiIj4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2giLz4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2gvd3JuL2NvcmVpcCIvPg0KKyAgICAgICAgICAgIDwvbGlzdEF0dHJpYnV0ZT4NCisgICAgICAgICAgICA8bGlzdEF0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xJbmNsfFBQQzYwM2dudSI+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9Ii1JJChXSU5EX0JBU0UpL3RhcmdldC9oL1dQSUxpYiIvPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSItSSQoV0lORF9CQVNFKS90YXJnZXQvaCIvPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSItSSQoV0lORF9CQVNFKS90YXJnZXQvaC93cm4vY29yZWlwIi8+DQorICAgICAgICAgICAgPC9saXN0QXR0cmlidXRlPg0KKyAgICAgICAgICAgIDxsaXN0QXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfExpYnN8UFBDNjAzZ251Ij4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iJChXSU5EX0JBU0UpL3RhcmdldC9saWIvV1BJTGliLmEiLz4NCisgICAgICAgICAgICA8L2xpc3RBdHRyaWJ1dGU+DQorICAgICAgICAgICAgPGxpc3RBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm9zIj4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iVlhfQ1BVX0ZBTUlMWSIvPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSJDUFUiLz4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iVE9PTF9GQU1JTFkiLz4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iVE9PTCIvPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSJUT09MX1BBVEgiLz4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iQ0NfQVJDSF9TUEVDIi8+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9IkxJQlBBVEgiLz4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iTElCUyIvPg0KKyAgICAgICAgICAgIDwvbGlzdEF0dHJpYnV0ZT4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfENDX0FSQ0hfU1BFQ3x2YWx1ZXxQUEMzMmRpYWIiIHZhbHVlPSItdFBQQ0ZIOnZ4d29ya3M2MyAtWHN0bXctc2xvdyAtRFBQQzMyX2ZwNjB4Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xDQ19BUkNIX1NQRUN8dmFsdWV8UFBDMzJnbnUiIHZhbHVlPSItbWhhcmQtZmxvYXQgLW1zdHJpY3QtYWxpZ24gLW1uby1pbXBsaWNpdC1mcCAtRFBQQzMyX2ZwNjB4Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xDQ19BUkNIX1NQRUN8dmFsdWV8UFBDNjAzZGlhYiIgdmFsdWU9Ii10UFBDNjAzRkg6dnh3b3JrczYzIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xDQ19BUkNIX1NQRUN8dmFsdWV8UFBDNjAzZ251IiB2YWx1ZT0iLW1jcHU9NjAzIC1tc3RyaWN0LWFsaWduIC1tbm8taW1wbGljaXQtZnAgLW1sb25nY2FsbCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98Q1BVfHZhbHVlfFBQQzMyZGlhYiIgdmFsdWU9IlBQQzMyIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xDUFV8dmFsdWV8UFBDMzJnbnUiIHZhbHVlPSJQUEMzMiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98Q1BVfHZhbHVlfFBQQzYwM2RpYWIiIHZhbHVlPSJQUEM2MDMiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfENQVXx2YWx1ZXxQUEM2MDNnbnUiIHZhbHVlPSJQUEM2MDMiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfExJQlBBVEh8dmFsdWV8UFBDMzJkaWFiIiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xMSUJQQVRIfHZhbHVlfFBQQzMyZ251IiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xMSUJQQVRIfHZhbHVlfFBQQzYwM2RpYWIiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfExJQlBBVEh8dmFsdWV8UFBDNjAzZ251IiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xMSUJTfHZhbHVlfFBQQzMyZGlhYiIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98TElCU3x2YWx1ZXxQUEMzMmdudSIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98TElCU3x2YWx1ZXxQUEM2MDNkaWFiIiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xMSUJTfHZhbHVlfFBQQzYwM2dudSIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98VE9PTF9GQU1JTFl8dmFsdWV8UFBDMzJkaWFiIiB2YWx1ZT0iZGlhYiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98VE9PTF9GQU1JTFl8dmFsdWV8UFBDMzJnbnUiIHZhbHVlPSJnbnUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfFRPT0xfRkFNSUxZfHZhbHVlfFBQQzYwM2RpYWIiIHZhbHVlPSJkaWFiIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xUT09MX0ZBTUlMWXx2YWx1ZXxQUEM2MDNnbnUiIHZhbHVlPSJnbnUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfFRPT0xfUEFUSHx2YWx1ZXxQUEMzMmRpYWIiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfFRPT0xfUEFUSHx2YWx1ZXxQUEMzMmdudSIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98VE9PTF9QQVRIfHZhbHVlfFBQQzYwM2RpYWIiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfFRPT0xfUEFUSHx2YWx1ZXxQUEM2MDNnbnUiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfFRPT0x8dmFsdWV8UFBDMzJkaWFiIiB2YWx1ZT0iZGlhYiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98VE9PTHx2YWx1ZXxQUEMzMmdudSIgdmFsdWU9ImdudSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98VE9PTHx2YWx1ZXxQUEM2MDNkaWFiIiB2YWx1ZT0iZGlhYiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98VE9PTHx2YWx1ZXxQUEM2MDNnbnUiIHZhbHVlPSJnbnUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfFZYX0NQVV9GQU1JTFl8dmFsdWV8UFBDMzJkaWFiIiB2YWx1ZT0icHBjIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xWWF9DUFVfRkFNSUxZfHZhbHVlfFBQQzMyZ251IiB2YWx1ZT0icHBjIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xWWF9DUFVfRkFNSUxZfHZhbHVlfFBQQzYwM2RpYWIiIHZhbHVlPSJwcGMiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfFZYX0NQVV9GQU1JTFl8dmFsdWV8UFBDNjAzZ251IiB2YWx1ZT0icHBjIi8+DQorICAgICAgICAgICAgPGxpc3RBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHMiPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSJDLUNvbXBpbGVyIi8+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9IkMrKy1Db21waWxlciIvPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSJMaW5rZXIiLz4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iUGFydGlhbCBJbWFnZSBMaW5rZXIiLz4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iTGlicmFyaWFuIi8+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9IkFzc2VtYmxlciIvPg0KKyAgICAgICAgICAgIDwvbGlzdEF0dHJpYnV0ZT4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfGNtZHxQUEMzMmRpYWIiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7OyVhc3NlbWJsZXJwcmVmaXglICQoVE9PTF9QQVRIKWRjYyAlRGVidWdNb2RlRmxhZ3MlICVUb29sRmxhZ3MlICQoQURERURfQ0ZMQUdTKSAlSW5jbHVkZXMlICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICVPdXRGaWxlJSAtYyAlSW5GaWxlJSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxBc3NlbWJsZXJ8Y21kfFBQQzMyZ251IiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OzslYXNzZW1ibGVycHJlZml4JSAkKFRPT0xfUEFUSCljY3BwYyAlRGVidWdNb2RlRmxhZ3MlICVUb29sRmxhZ3MlICQoQURERURfQ0ZMQUdTKSAlSW5jbHVkZXMlICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICVPdXRGaWxlJSAtYyAlSW5GaWxlJSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxBc3NlbWJsZXJ8Y21kfFBQQzYwM2RpYWIiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7OyVhc3NlbWJsZXJwcmVmaXglICQoVE9PTF9QQVRIKWRjYyAlRGVidWdNb2RlRmxhZ3MlICVUb29sRmxhZ3MlICQoQURERURfQ0ZMQUdTKSAlSW5jbHVkZXMlICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICVPdXRGaWxlJSAtYyAlSW5GaWxlJSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxBc3NlbWJsZXJ8Y21kfFBQQzYwM2dudSIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWFzc2VtYmxlcnByZWZpeCUgJChUT09MX1BBVEgpY2NwcGMgJURlYnVnTW9kZUZsYWdzJSAlVG9vbEZsYWdzJSAkKEFEREVEX0NGTEFHUykgJUluY2x1ZGVzJSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAlT3V0RmlsZSUgLWMgJUluRmlsZSUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfGRiZ0ZsYWdzfFBQQzMyZGlhYiIgdmFsdWU9Ii1nIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxkYmdGbGFnc3xQUEMzMmdudSIgdmFsdWU9Ii1nIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxkYmdGbGFnc3xQUEM2MDNkaWFiIiB2YWx1ZT0iLWciLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfGRiZ0ZsYWdzfFBQQzYwM2dudSIgdmFsdWU9Ii1nIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxkZXJpdmVkU2lnc3xQUEMzMmRpYWIiIHZhbHVlPSIqLm8iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfGRlcml2ZWRTaWdzfFBQQzMyZ251IiB2YWx1ZT0iKi5vIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxkZXJpdmVkU2lnc3xQUEM2MDNkaWFiIiB2YWx1ZT0iKi5vIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxkZXJpdmVkU2lnc3xQUEM2MDNnbnUiIHZhbHVlPSIqLm8iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfGZsYWdzfFBQQzMyZGlhYiIgdmFsdWU9IiQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWHByZXByb2Nlc3MtYXNzZW1ibHkgLVhjcHAtbm8tc3BhY2UgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxBc3NlbWJsZXJ8ZmxhZ3N8UFBDMzJnbnUiIHZhbHVlPSIkKENDX0FSQ0hfU1BFQykgLWFuc2kgICAteGFzc2VtYmxlci13aXRoLWNwcCAtTUQgLU1QIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxmbGFnc3xQUEM2MDNkaWFiIiB2YWx1ZT0iJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YcHJlcHJvY2Vzcy1hc3NlbWJseSAtWGNwcC1uby1zcGFjZSAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxmbGFnc3xQUEM2MDNnbnUiIHZhbHVlPSIkKENDX0FSQ0hfU1BFQykgLWFuc2kgICAteGFzc2VtYmxlci13aXRoLWNwcCAtTUQgLU1QIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxub25EYmdGbGFnc3xQUEMzMmRpYWIiIHZhbHVlPSItWE8gLVhzaXplLW9wdCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxBc3NlbWJsZXJ8bm9uRGJnRmxhZ3N8UFBDMzJnbnUiIHZhbHVlPSItTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxub25EYmdGbGFnc3xQUEM2MDNkaWFiIiB2YWx1ZT0iLVhPIC1Yc2l6ZS1vcHQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfG5vbkRiZ0ZsYWdzfFBQQzYwM2dudSIgdmFsdWU9Ii1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4iLz4NCisgICAgICAgICAgICA8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxvYmplY3QiIHZhbHVlPSJ0cnVlIi8+DQorICAgICAgICAgICAgPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxBc3NlbWJsZXJ8cGFzc0FibGUiIHZhbHVlPSJmYWxzZSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxBc3NlbWJsZXJ8c2lncyIgdmFsdWU9IioucyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8Y21kfFBQQzMyZGlhYiIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWNwcGNvbXBpbGVycHJlZml4JSAkKFRPT0xfUEFUSClkY2MgJURlYnVnTW9kZUZsYWdzJSAlVG9vbEZsYWdzJSAkKEFEREVEX0MrK0ZMQUdTKSAlSW5jbHVkZXMlICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICVPdXRGaWxlJSAtYyAlSW5GaWxlJSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8Y21kfFBQQzMyZ251IiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OzslY3BwY29tcGlsZXJwcmVmaXglICQoVE9PTF9QQVRIKWNjcHBjICVEZWJ1Z01vZGVGbGFncyUgJVRvb2xGbGFncyUgJChBRERFRF9DKytGTEFHUykgJUluY2x1ZGVzJSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAlT3V0RmlsZSUgLWMgJUluRmlsZSUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfGNtZHxQUEM2MDNkaWFiIiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OzslY3BwY29tcGlsZXJwcmVmaXglICQoVE9PTF9QQVRIKWRjYyAlRGVidWdNb2RlRmxhZ3MlICVUb29sRmxhZ3MlICQoQURERURfQysrRkxBR1MpICVJbmNsdWRlcyUgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gJU91dEZpbGUlIC1jICVJbkZpbGUlIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxjbWR8UFBDNjAzZ251IiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OzslY3BwY29tcGlsZXJwcmVmaXglICQoVE9PTF9QQVRIKWNjcHBjICVEZWJ1Z01vZGVGbGFncyUgJVRvb2xGbGFncyUgJChBRERFRF9DKytGTEFHUykgJUluY2x1ZGVzJSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAlT3V0RmlsZSUgLWMgJUluRmlsZSUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfGRiZ0ZsYWdzfFBQQzMyZGlhYiIgdmFsdWU9Ii1nIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxkYmdGbGFnc3xQUEMzMmdudSIgdmFsdWU9Ii1nIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxkYmdGbGFnc3xQUEM2MDNkaWFiIiB2YWx1ZT0iLWciLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfGRiZ0ZsYWdzfFBQQzYwM2dudSIgdmFsdWU9Ii1nIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxkZXJpdmVkU2lnc3xQUEMzMmRpYWIiIHZhbHVlPSIqLm8iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfGRlcml2ZWRTaWdzfFBQQzMyZ251IiB2YWx1ZT0iKi5vIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxkZXJpdmVkU2lnc3xQUEM2MDNkaWFiIiB2YWx1ZT0iKi5vIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxkZXJpdmVkU2lnc3xQUEM2MDNnbnUiIHZhbHVlPSIqLm8iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfGZsYWdzfFBQQzMyZGlhYiIgdmFsdWU9IiQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxmbGFnc3xQUEMzMmdudSIgdmFsdWU9IiQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8ZmxhZ3N8UFBDNjAzZGlhYiIgdmFsdWU9IiQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxmbGFnc3xQUEM2MDNnbnUiIHZhbHVlPSIkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgLW1sb25nY2FsbCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8bm9uRGJnRmxhZ3N8UFBDMzJkaWFiIiB2YWx1ZT0iLVhPIC1Yc2l6ZS1vcHQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfG5vbkRiZ0ZsYWdzfFBQQzMyZ251IiB2YWx1ZT0iLU8yIC1mc3RyZW5ndGgtcmVkdWNlIC1mbm8tYnVpbHRpbiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8bm9uRGJnRmxhZ3N8UFBDNjAzZGlhYiIgdmFsdWU9Ii1YTyAtWHNpemUtb3B0Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxub25EYmdGbGFnc3xQUEM2MDNnbnUiIHZhbHVlPSItTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluIi8+DQorICAgICAgICAgICAgPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8b2JqZWN0IiB2YWx1ZT0idHJ1ZSIvPg0KKyAgICAgICAgICAgIDxib29sZWFuQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfHBhc3NBYmxlIiB2YWx1ZT0iZmFsc2UiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfHNpZ3MiIHZhbHVlPSIqLmNwcDsqLkM7Ki5jeHg7Ki5jYyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfGNtZHxQUEMzMmRpYWIiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7OyVjY29tcGlsZXJwcmVmaXglICQoVE9PTF9QQVRIKWRjYyAlRGVidWdNb2RlRmxhZ3MlICVUb29sRmxhZ3MlICQoQURERURfQ0ZMQUdTKSAlSW5jbHVkZXMlICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICVPdXRGaWxlJSAtYyAlSW5GaWxlJSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfGNtZHxQUEMzMmdudSIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWNjb21waWxlcnByZWZpeCUgJChUT09MX1BBVEgpY2NwcGMgJURlYnVnTW9kZUZsYWdzJSAlVG9vbEZsYWdzJSAkKEFEREVEX0NGTEFHUykgJUluY2x1ZGVzJSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAlT3V0RmlsZSUgLWMgJUluRmlsZSUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxjbWR8UFBDNjAzZGlhYiIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWNjb21waWxlcnByZWZpeCUgJChUT09MX1BBVEgpZGNjICVEZWJ1Z01vZGVGbGFncyUgJVRvb2xGbGFncyUgJChBRERFRF9DRkxBR1MpICVJbmNsdWRlcyUgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gJU91dEZpbGUlIC1jICVJbkZpbGUlIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8Y21kfFBQQzYwM2dudSIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWNjb21waWxlcnByZWZpeCUgJChUT09MX1BBVEgpY2NwcGMgJURlYnVnTW9kZUZsYWdzJSAlVG9vbEZsYWdzJSAkKEFEREVEX0NGTEFHUykgJUluY2x1ZGVzJSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAlT3V0RmlsZSUgLWMgJUluRmlsZSUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxkYmdGbGFnc3xQUEMzMmRpYWIiIHZhbHVlPSItZyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfGRiZ0ZsYWdzfFBQQzMyZ251IiB2YWx1ZT0iLWciLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxkYmdGbGFnc3xQUEM2MDNkaWFiIiB2YWx1ZT0iLWciLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxkYmdGbGFnc3xQUEM2MDNnbnUiIHZhbHVlPSItZyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfGRlcml2ZWRTaWdzfFBQQzMyZGlhYiIgdmFsdWU9IioubyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfGRlcml2ZWRTaWdzfFBQQzMyZ251IiB2YWx1ZT0iKi5vIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8ZGVyaXZlZFNpZ3N8UFBDNjAzZGlhYiIgdmFsdWU9IioubyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfGRlcml2ZWRTaWdzfFBQQzYwM2dudSIgdmFsdWU9IioubyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfGZsYWdzfFBQQzMyZGlhYiIgdmFsdWU9IiQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8ZmxhZ3N8UFBDMzJnbnUiIHZhbHVlPSIkKENDX0FSQ0hfU1BFQykgLWFuc2kgIC1XYWxsICAtTUQgLU1QIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8ZmxhZ3N8UFBDNjAzZGlhYiIgdmFsdWU9IiQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8ZmxhZ3N8UFBDNjAzZ251IiB2YWx1ZT0iJChDQ19BUkNIX1NQRUMpIC1hbnNpICAtV2FsbCAgLU1EIC1NUCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfG5vbkRiZ0ZsYWdzfFBQQzMyZGlhYiIgdmFsdWU9Ii1YTyAtWHNpemUtb3B0Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8bm9uRGJnRmxhZ3N8UFBDMzJnbnUiIHZhbHVlPSItTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8bm9uRGJnRmxhZ3N8UFBDNjAzZGlhYiIgdmFsdWU9Ii1YTyAtWHNpemUtb3B0Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8bm9uRGJnRmxhZ3N8UFBDNjAzZ251IiB2YWx1ZT0iLU8yIC1mc3RyZW5ndGgtcmVkdWNlIC1mbm8tYnVpbHRpbiIvPg0KKyAgICAgICAgICAgIDxib29sZWFuQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxvYmplY3QiIHZhbHVlPSJ0cnVlIi8+DQorICAgICAgICAgICAgPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfHBhc3NBYmxlIiB2YWx1ZT0iZmFsc2UiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxzaWdzIiB2YWx1ZT0iKi5jIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxjbWR8UFBDMzJkaWFiIiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OzslYXJjaGl2ZXJwcmVmaXglICQoVE9PTF9QQVRIKWRhciAlVG9vbEZsYWdzJSAlT3V0RmlsZSUgJU9iamVjdHMlIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxjbWR8UFBDMzJnbnUiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7OyVhcmNoaXZlcnByZWZpeCUgJChUT09MX1BBVEgpYXJwcGMgJVRvb2xGbGFncyUgJU91dEZpbGUlICVPYmplY3RzJSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58Y21kfFBQQzYwM2RpYWIiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7OyVhcmNoaXZlcnByZWZpeCUgJChUT09MX1BBVEgpZGFyICVUb29sRmxhZ3MlICVPdXRGaWxlJSAlT2JqZWN0cyUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufGNtZHxQUEM2MDNnbnUiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7OyVhcmNoaXZlcnByZWZpeCUgJChUT09MX1BBVEgpYXJwcGMgJVRvb2xGbGFncyUgJU91dEZpbGUlICVPYmplY3RzJSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58ZGJnRmxhZ3N8UFBDMzJkaWFiIiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxkYmdGbGFnc3xQUEMzMmdudSIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58ZGJnRmxhZ3N8UFBDNjAzZGlhYiIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58ZGJnRmxhZ3N8UFBDNjAzZ251IiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxkZXJpdmVkU2lnc3xQUEMzMmRpYWIiIHZhbHVlPSIqLmEiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufGRlcml2ZWRTaWdzfFBQQzMyZ251IiB2YWx1ZT0iKi5hIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxkZXJpdmVkU2lnc3xQUEM2MDNkaWFiIiB2YWx1ZT0iKi5hIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxkZXJpdmVkU2lnc3xQUEM2MDNnbnUiIHZhbHVlPSIqLmEiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufGZsYWdzfFBQQzMyZGlhYiIgdmFsdWU9ImNydXMiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufGZsYWdzfFBQQzMyZ251IiB2YWx1ZT0iY3J1cyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58ZmxhZ3N8UFBDNjAzZGlhYiIgdmFsdWU9ImNydXMiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufGZsYWdzfFBQQzYwM2dudSIgdmFsdWU9ImNydXMiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufG5vbkRiZ0ZsYWdzfFBQQzMyZGlhYiIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58bm9uRGJnRmxhZ3N8UFBDMzJnbnUiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufG5vbkRiZ0ZsYWdzfFBQQzYwM2RpYWIiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufG5vbkRiZ0ZsYWdzfFBQQzYwM2dudSIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxib29sZWFuQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufG9iamVjdCIgdmFsdWU9ImZhbHNlIi8+DQorICAgICAgICAgICAgPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58cGFzc0FibGUiIHZhbHVlPSJ0cnVlIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxzaWdzIiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxjbWR8UFBDMzJkaWFiIiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OztybSAtZiAlT3V0RmlsZSU7ZGR1bXAgLU5nICVPYmplY3RzJSAlTGlicmFyaWVzJSB8IHRjbHNoICQoV0lORF9CQVNFKS9ob3N0L3Jlc291cmNlL2h1dGlscy90Y2wvbXVuY2gudGNsIC1jIHBwYyAmZ3Q7ICQoT0JKX0RJUikvY3RkdC5jOyVjY29tcGlsZXJwcmVmaXglICQoVE9PTF9QQVRIKWRjYyAlRGVidWdNb2RlRmxhZ3MlICQoQ0NfQVJDSF9TUEVDKSAtWGRvbGxhci1pbi1pZGVudCAtWGZvcmNlLWRlY2xhcmF0aW9ucyAkKEFEREVEX0NGTEFHUykgJUluY2x1ZGVzJSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAgLW8gJChPQkpfRElSKS9jdGR0Lm8gLWMgJChPQkpfRElSKS9jdGR0LmM7JWxpbmtlcnByZWZpeCUgJChUT09MX1BBVEgpZGxkIC10UFBDRkg6dnh3b3JrczYzIC1YIC1yNSAlVG9vbEZsYWdzJSAtbyAlT3V0RmlsZSUgJChPQkpfRElSKS9jdGR0Lm8gJU9iamVjdHMlICVMaWJyYXJpZXMlICQoTElCUEFUSCkgJChMSUJTKSAgJChBRERFRF9MSUJQQVRIKSAkKEFEREVEX0xJQlMpICZhbXA7JmFtcDsgaWYgWyAmcXVvdDskKEVYUEFORF9EQkcpJnF1b3Q7ID0gJnF1b3Q7MSZxdW90OyBdOyB0aGVuIHBsaW5rICZxdW90OyRAJnF1b3Q7O2ZpIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxjbWR8UFBDMzJnbnUiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7O3JtIC1mICVPdXRGaWxlJTtubXBwYyAlT2JqZWN0cyUgJUxpYnJhcmllcyUgfCB0Y2xzaCAkKFdJTkRfQkFTRSkvaG9zdC9yZXNvdXJjZS9odXRpbHMvdGNsL211bmNoLnRjbCAtYyBwcGMgJmd0OyAkKE9CSl9ESVIpL2N0ZHQuYzslY2NvbXBpbGVycHJlZml4JSAkKFRPT0xfUEFUSCljY3BwYyAlRGVidWdNb2RlRmxhZ3MlICQoQ0NfQVJDSF9TUEVDKSAtZmRvbGxhcnMtaW4taWRlbnRpZmllcnMgLVdhbGwgJChBRERFRF9DRkxBR1MpICVJbmNsdWRlcyUgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgIC1vICQoT0JKX0RJUikvY3RkdC5vIC1jICQoT0JKX0RJUikvY3RkdC5jOyVsaW5rZXJwcmVmaXglICQoVE9PTF9QQVRIKWNjcHBjIC1yIC1ub3N0ZGxpYiAtV2wsLVggJVRvb2xGbGFncyUgLW8gJU91dEZpbGUlICQoT0JKX0RJUikvY3RkdC5vICVPYmplY3RzJSAlTGlicmFyaWVzJSAkKExJQlBBVEgpICQoTElCUykgICQoQURERURfTElCUEFUSCkgJChBRERFRF9MSUJTKSAmYW1wOyZhbXA7IGlmIFsgJnF1b3Q7JChFWFBBTkRfREJHKSZxdW90OyA9ICZxdW90OzEmcXVvdDsgXTsgdGhlbiBwbGluayAmcXVvdDskQCZxdW90OztmaSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8Y21kfFBQQzYwM2RpYWIiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7O3JtIC1mICVPdXRGaWxlJTtkZHVtcCAtTmcgJU9iamVjdHMlICVMaWJyYXJpZXMlIHwgdGNsc2ggJChXSU5EX0JBU0UpL2hvc3QvcmVzb3VyY2UvaHV0aWxzL3RjbC9tdW5jaC50Y2wgLWMgcHBjICZndDsgJChPQkpfRElSKS9jdGR0LmM7JWNjb21waWxlcnByZWZpeCUgJChUT09MX1BBVEgpZGNjICVEZWJ1Z01vZGVGbGFncyUgJChDQ19BUkNIX1NQRUMpIC1YZG9sbGFyLWluLWlkZW50IC1YZm9yY2UtZGVjbGFyYXRpb25zICQoQURERURfQ0ZMQUdTKSAlSW5jbHVkZXMlICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpICAtbyAkKE9CSl9ESVIpL2N0ZHQubyAtYyAkKE9CSl9ESVIpL2N0ZHQuYzslbGlua2VycHJlZml4JSAkKFRPT0xfUEFUSClkbGQgLXRQUEM2MDNGSDp2eHdvcmtzNjMgLVggLXI1ICVUb29sRmxhZ3MlIC1vICVPdXRGaWxlJSAkKE9CSl9ESVIpL2N0ZHQubyAlT2JqZWN0cyUgJUxpYnJhcmllcyUgJChMSUJQQVRIKSAkKExJQlMpICAkKEFEREVEX0xJQlBBVEgpICQoQURERURfTElCUykgJmFtcDsmYW1wOyBpZiBbICZxdW90OyQoRVhQQU5EX0RCRykmcXVvdDsgPSAmcXVvdDsxJnF1b3Q7IF07IHRoZW4gcGxpbmsgJnF1b3Q7JEAmcXVvdDs7ZmkiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfGNtZHxQUEM2MDNnbnUiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7O3JtIC1mICVPdXRGaWxlJTtubXBwYyAlT2JqZWN0cyUgJUxpYnJhcmllcyUgfCB0Y2xzaCAkKFdJTkRfQkFTRSkvaG9zdC9yZXNvdXJjZS9odXRpbHMvdGNsL211bmNoLnRjbCAtYyBwcGMgJmd0OyAkKE9CSl9ESVIpL2N0ZHQuYzslY2NvbXBpbGVycHJlZml4JSAkKFRPT0xfUEFUSCljY3BwYyAlRGVidWdNb2RlRmxhZ3MlICQoQ0NfQVJDSF9TUEVDKSAtZmRvbGxhcnMtaW4taWRlbnRpZmllcnMgLVdhbGwgJChBRERFRF9DRkxBR1MpICVJbmNsdWRlcyUgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgIC1vICQoT0JKX0RJUikvY3RkdC5vIC1jICQoT0JKX0RJUikvY3RkdC5jOyVsaW5rZXJwcmVmaXglICQoVE9PTF9QQVRIKWNjcHBjIC1yIC1ub3N0ZGxpYiAtV2wsLVggJVRvb2xGbGFncyUgLW8gJU91dEZpbGUlICQoT0JKX0RJUikvY3RkdC5vICVPYmplY3RzJSAlTGlicmFyaWVzJSAkKExJQlBBVEgpICQoTElCUykgICQoQURERURfTElCUEFUSCkgJChBRERFRF9MSUJTKSAmYW1wOyZhbXA7IGlmIFsgJnF1b3Q7JChFWFBBTkRfREJHKSZxdW90OyA9ICZxdW90OzEmcXVvdDsgXTsgdGhlbiBwbGluayAmcXVvdDskQCZxdW90OztmaSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8ZGJnRmxhZ3N8UFBDMzJkaWFiIiB2YWx1ZT0iLWciLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfGRiZ0ZsYWdzfFBQQzMyZ251IiB2YWx1ZT0iLWciLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfGRiZ0ZsYWdzfFBQQzYwM2RpYWIiIHZhbHVlPSItZyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8ZGJnRmxhZ3N8UFBDNjAzZ251IiB2YWx1ZT0iLWciLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfGRlcml2ZWRTaWdzfFBQQzMyZGlhYiIgdmFsdWU9Iioub3V0Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxkZXJpdmVkU2lnc3xQUEMzMmdudSIgdmFsdWU9Iioub3V0Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxkZXJpdmVkU2lnc3xQUEM2MDNkaWFiIiB2YWx1ZT0iKi5vdXQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfGRlcml2ZWRTaWdzfFBQQzYwM2dudSIgdmFsdWU9Iioub3V0Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxmbGFnc3xQUEMzMmRpYWIiIHZhbHVlPSItcjQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfGZsYWdzfFBQQzMyZ251IiB2YWx1ZT0iLVQgJChXSU5EX0JBU0UpL3RhcmdldC9oL3Rvb2wvZ251L2xkc2NyaXB0cy9saW5rLk9VVCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8ZmxhZ3N8UFBDNjAzZGlhYiIgdmFsdWU9Ii1yNCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8ZmxhZ3N8UFBDNjAzZ251IiB2YWx1ZT0iLVQgJChXSU5EX0JBU0UpL3RhcmdldC9oL3Rvb2wvZ251L2xkc2NyaXB0cy9saW5rLk9VVCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8bm9uRGJnRmxhZ3N8UFBDMzJkaWFiIiB2YWx1ZT0iLVhPIC1Yc2l6ZS1vcHQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfG5vbkRiZ0ZsYWdzfFBQQzMyZ251IiB2YWx1ZT0iLU8yIC1mc3RyZW5ndGgtcmVkdWNlIC1mbm8tYnVpbHRpbiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8bm9uRGJnRmxhZ3N8UFBDNjAzZGlhYiIgdmFsdWU9Ii1YTyAtWHNpemUtb3B0Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxub25EYmdGbGFnc3xQUEM2MDNnbnUiIHZhbHVlPSItTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluIi8+DQorICAgICAgICAgICAgPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8b2JqZWN0IiB2YWx1ZT0iZmFsc2UiLz4NCisgICAgICAgICAgICA8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxwYXNzQWJsZSIgdmFsdWU9ImZhbHNlIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxzaWdzIiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfGNtZHxQUEMzMmRpYWIiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7OyVsaW5rZXJwcmVmaXglICQoVE9PTF9QQVRIKWRsZCAtdFBQQ0ZIOnZ4d29ya3M2MyAtWCAtcjUgJVRvb2xGbGFncyUgLW8gJU91dEZpbGUlICVPYmplY3RzJSAkKExJQlBBVEgpICQoTElCUykgJChBRERFRF9MSUJQQVRIKSAkKEFEREVEX0xJQlMpICAmYW1wOyZhbXA7IGlmIFsgJnF1b3Q7JChFWFBBTkRfREJHKSZxdW90OyA9ICZxdW90OzEmcXVvdDsgXTsgdGhlbiBwbGluayAmcXVvdDskQCZxdW90OztmaSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxjbWR8UFBDMzJnbnUiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7OyVsaW5rZXJwcmVmaXglICQoVE9PTF9QQVRIKWNjcHBjIC1yIC1ub3N0ZGxpYiAtV2wsLVggJVRvb2xGbGFncyUgLW8gJU91dEZpbGUlICVPYmplY3RzJSAkKExJQlBBVEgpICQoTElCUykgJChBRERFRF9MSUJQQVRIKSAkKEFEREVEX0xJQlMpICAmYW1wOyZhbXA7IGlmIFsgJnF1b3Q7JChFWFBBTkRfREJHKSZxdW90OyA9ICZxdW90OzEmcXVvdDsgXTsgdGhlbiBwbGluayAmcXVvdDskQCZxdW90OztmaSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxjbWR8UFBDNjAzZGlhYiIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWxpbmtlcnByZWZpeCUgJChUT09MX1BBVEgpZGxkIC10UFBDNjAzRkg6dnh3b3JrczYzIC1YIC1yNSAlVG9vbEZsYWdzJSAtbyAlT3V0RmlsZSUgJU9iamVjdHMlICQoTElCUEFUSCkgJChMSUJTKSAkKEFEREVEX0xJQlBBVEgpICQoQURERURfTElCUykgICZhbXA7JmFtcDsgaWYgWyAmcXVvdDskKEVYUEFORF9EQkcpJnF1b3Q7ID0gJnF1b3Q7MSZxdW90OyBdOyB0aGVuIHBsaW5rICZxdW90OyRAJnF1b3Q7O2ZpIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfGNtZHxQUEM2MDNnbnUiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7OyVsaW5rZXJwcmVmaXglICQoVE9PTF9QQVRIKWNjcHBjIC1yIC1ub3N0ZGxpYiAtV2wsLVggJVRvb2xGbGFncyUgLW8gJU91dEZpbGUlICVPYmplY3RzJSAkKExJQlBBVEgpICQoTElCUykgJChBRERFRF9MSUJQQVRIKSAkKEFEREVEX0xJQlMpICAmYW1wOyZhbXA7IGlmIFsgJnF1b3Q7JChFWFBBTkRfREJHKSZxdW90OyA9ICZxdW90OzEmcXVvdDsgXTsgdGhlbiBwbGluayAmcXVvdDskQCZxdW90OztmaSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxkYmdGbGFnc3xQUEMzMmRpYWIiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8ZGJnRmxhZ3N8UFBDMzJnbnUiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8ZGJnRmxhZ3N8UFBDNjAzZGlhYiIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxkYmdGbGFnc3xQUEM2MDNnbnUiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8ZGVyaXZlZFNpZ3N8UFBDMzJkaWFiIiB2YWx1ZT0iKi5vIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfGRlcml2ZWRTaWdzfFBQQzMyZ251IiB2YWx1ZT0iKi5vIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfGRlcml2ZWRTaWdzfFBQQzYwM2RpYWIiIHZhbHVlPSIqLm8iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8ZGVyaXZlZFNpZ3N8UFBDNjAzZ251IiB2YWx1ZT0iKi5vIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfGZsYWdzfFBQQzMyZGlhYiIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxmbGFnc3xQUEMzMmdudSIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxmbGFnc3xQUEM2MDNkaWFiIiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfGZsYWdzfFBQQzYwM2dudSIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxub25EYmdGbGFnc3xQUEMzMmRpYWIiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8bm9uRGJnRmxhZ3N8UFBDMzJnbnUiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8bm9uRGJnRmxhZ3N8UFBDNjAzZGlhYiIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxub25EYmdGbGFnc3xQUEM2MDNnbnUiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfG9iamVjdCIgdmFsdWU9ImZhbHNlIi8+DQorICAgICAgICAgICAgPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxwYXNzQWJsZSIgdmFsdWU9InRydWUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8c2lncyIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98Y21kIiB2YWx1ZT0iJW1ha2VwcmVmaXglIG1ha2UgLS1uby1wcmludC1kaXJlY3RvcnkiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfGRlZmF1bHRTcGVjIiB2YWx1ZT0iUFBDNjAzZ251Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xyZWRpckRpcnxQUEMzMmRpYWIiIHZhbHVlPSJQUEMzMmRpYWIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfHJlZGlyRGlyfFBQQzMyZ251IiB2YWx1ZT0iUFBDMzJnbnUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfHJlZGlyRGlyfFBQQzYwM2RpYWIiIHZhbHVlPSJQUEM2MDNkaWFiIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xyZWRpckRpcnxQUEM2MDNnbnUiIHZhbHVlPSJQUEM2MDNnbnUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfHJlZGlyUm9vdCIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxsaXN0QXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfHNwZWNzIj4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iUFBDMzJkaWFiIi8+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9IlBQQzMyZ251Ii8+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9IlBQQzYwM2RpYWIiLz4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iUFBDNjAzZ251Ii8+DQorICAgICAgICAgICAgPC9saXN0QXR0cmlidXRlPg0KKyAgICAgICAgICAgIDxpbnRBdHRyaWJ1dGUga2V5PSJCdWlsZFN1cHBvcnRFbmFibGVkIiB2YWx1ZT0iMSIvPg0KKyAgICAgICAgICAgIDxsaXN0QXR0cmlidXRlIGtleT0iQnVpbGRTdXBwb3J0Rm9yQnVpbGRTcGVjcyI+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9IlBQQzYwM2dudSIvPg0KKyAgICAgICAgICAgIDwvbGlzdEF0dHJpYnV0ZT4NCisgICAgICAgICAgICA8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9IkJ1aWxkVGFyZ2V0Q2VudHJpYyIgdmFsdWU9InRydWUiLz4NCisgICAgICAgIDwvbWFwQXR0cmlidXRlPg0KKyAgICA8L2F0dHJpYnV0ZXM+DQorICAgIDxidWlsZHRhcmdldHM+DQorICAgICAgICA8YnVpbGR0YXJnZXQgYnVpbGR0b29sPSJMaW5rZXIiIG5hbWU9IkJ1aWx0aW5EZWZhdWx0Q29kZSIgcGFzc2VkPSJmYWxzZSIgdGFyZ2V0bmFtZT0iQnVpbHRpbkRlZmF1bHRDb2RlIj4NCisgICAgICAgICAgICA8Y29udGVudHM+DQorICAgICAgICAgICAgICAgIDxidWlsZHRhcmdldHJlZmVyZW5jZSBuYW1lPSIvQnVpbHRpbkRlZmF1bHRDb2RlL0J1aWx0aW5EZWZhdWx0Q29kZV9wYXJ0aWFsSW1hZ2UiLz4NCisgICAgICAgICAgICA8L2NvbnRlbnRzPg0KKyAgICAgICAgPC9idWlsZHRhcmdldD4NCisgICAgICAgIDxidWlsZHRhcmdldCBidWlsZHRvb2w9IlBhcnRpYWwgSW1hZ2UgTGlua2VyIiBuYW1lPSJCdWlsdGluRGVmYXVsdENvZGVfcGFydGlhbEltYWdlIiBwYXNzZWQ9InRydWUiIHRhcmdldG5hbWU9IkJ1aWx0aW5EZWZhdWx0Q29kZV9wYXJ0aWFsSW1hZ2UiPg0KKyAgICAgICAgICAgIDxjb250ZW50cz4NCisgICAgICAgICAgICAgICAgPGZvbGRlciBuYW1lPSIvQnVpbHRpbkRlZmF1bHRDb2RlIiByZWN1cnNpdmU9InRydWUiLz4NCisgICAgICAgICAgICA8L2NvbnRlbnRzPg0KKyAgICAgICAgPC9idWlsZHRhcmdldD4NCisgICAgPC9idWlsZHRhcmdldHM+DQorPC93cnhtbD4NCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vQnVpbHRpbkRlZmF1bHRDb2RlL0J1aWx0aW5EZWZhdWx0Q29kZS5jcHAgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vQnVpbHRpbkRlZmF1bHRDb2RlL0J1aWx0aW5EZWZhdWx0Q29kZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGUzNzc5ZQotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9CdWlsdGluRGVmYXVsdENvZGUvQnVpbHRpbkRlZmF1bHRDb2RlLmNwcApAQCAtMCwwICsxLDQwOCBAQAorI2luY2x1ZGUgIldQSUxpYi5oIg0KKw0KKy8qKg0KKyAqIFRoaXMgIkJ1aWx0aW5EZWZhdWx0Q29kZSIgcHJvdmlkZXMgdGhlICJkZWZhdWx0IGNvZGUiIGZ1bmN0aW9uYWxpdHkgYXMgdXNlZCBpbiB0aGUgIkJlbmNodG9wIFRlc3QuIg0KKyAqIA0KKyAqIFRoZSBCdWlsdGluRGVmYXVsdENvZGUgZXh0ZW5kcyB0aGUgSXRlcmF0aXZlUm9ib3QgYmFzZSBjbGFzcyB0byBwcm92aWRlIHRoZSAiZGVmYXVsdCBjb2RlIg0KKyAqIGZ1bmN0aW9uYWxpdHkgdG8gY29uZmlybSB0aGUgb3BlcmF0aW9uIGFuZCB1c2FnZSBvZiB0aGUgY29yZSBjb250cm9sIHN5c3RlbSBjb21wb25lbnRzLCBhcyANCisgKiB1c2VkIGluIHRoZSAiQmVuY2h0b3AgVGVzdCIgZGVzY3JpYmVkIGluIENoYXB0ZXIgMiBvZiB0aGUgMjAwOSBGUkMgQ29udHJvbCBTeXN0ZW0gTWFudWFsLg0KKyAqIA0KKyAqIFRoaXMgcHJvZ3JhbSBwcm92aWRlcyBmZWF0dXJlcyBpbiB0aGUgRGlzYWJsZWQsIEF1dG9ub21vdXMsIGFuZCBUZWxlb3AgbW9kZXMgYXMgZGVzY3JpYmVkDQorICogaW4gdGhlIGJlbmNodG9wIHRlc3QgZGlyZWN0aW9ucywgaW5jbHVkaW5nICJvbmNlLWEtc2Vjb25kIiBkZWJ1Z2dpbmcgcHJpbnRvdXRzIHdoZW4gZGlzYWJsZWQsIA0KKyAqIGEgIktJVFQgbGlnaHQgc2hvdyIgb24gdGhlIHNvbGVub2lkIGxpZ2h0cyB3aGVuIGluIGF1dG9ub21vdXMsIGFuZCBlbGVtZW50YXJ5IGRyaXZpbmcNCisgKiBjYXBhYmlsaXRpZXMgYW5kICJidXR0b24gbWFwcGluZyIgb2Ygam95c3RpY2tzIHdoZW4gdGVsZW9wZXJhdGVkLiAgVGhpcyBkZW1vbnN0cmF0aW9uDQorICogcHJvZ3JhbSBhbHNvIHNob3dzIHRoZSB1c2Ugb2YgdGhlIE1vdG9yU2FmZXR5IHRpbWVyLg0KKyAqIA0KKyAqIFRoaXMgZGVtb25zdHJhdGlvbiBpcyBub3QgaW50ZW5kZWQgdG8gc2VydmUgYXMgYSAic3RhcnRpbmcgdGVtcGxhdGUiIGZvciBkZXZlbG9wbWVudCBvZg0KKyAqIHJvYm90IGNvZGUgZm9yIGEgdGVhbSwgYXMgdGhlcmUgYXJlIGJldHRlciB0ZW1wbGF0ZXMgYW5kIGV4YW1wbGVzIGNyZWF0ZWQgc3BlY2lmaWNhbGx5DQorICogZm9yIHRoYXQgcHVycG9zZS4gIEhvd2V2ZXIsIHRlYW1zIG1heSBmaW5kIHRoZSB0ZWNobmlxdWVzIHVzZWQgaW4gdGhpcyBwcm9ncmFtIHRvIGJlDQorICogaW50ZXJlc3RpbmcgcG9zc2liaWxpdGllcyBmb3IgdXNlIGluIHRoZWlyIG93biByb2JvdCBjb2RlLg0KKyAqIA0KKyAqIFRoZSBkZXRhaWxzIG9mIHRoZSBiZWhhdmlvciBwcm92aWRlZCBieSB0aGlzIGRlbW9uc3RyYXRpb24gYXJlIHN1bW1hcml6ZWQgYmVsb3c6DQorICogIA0KKyAqIERpc2FibGVkIE1vZGU6DQorICogLSBPbmNlIHBlciBzZWNvbmQsIHByaW50IChvbiB0aGUgY29uc29sZSkgdGhlIG51bWJlciBvZiBzZWNvbmRzIHRoZSByb2JvdCBoYXMgYmVlbiBkaXNhYmxlZC4NCisgKiANCisgKiBBdXRvbm9tb3VzIE1vZGU6DQorICogLSBGbGFzaCB0aGUgc29sZW5vaWQgbGlnaHRzIGxpa2UgS0lUVCBpbiBLbmlnaHQgUmlkZXINCisgKiAtIEV4YW1wbGUgY29kZSAoY29tbWVudGVkIG91dCBieSBkZWZhdWx0KSB0byBkcml2ZSBmb3J3YXJkIGF0IGhhbGYtc3BlZWQgZm9yIDIgc2Vjb25kcw0KKyAqIA0KKyAqIFRlbGVvcCBNb2RlOg0KKyAqIC0gU2VsZWN0IGJldHdlZW4gdHdvIGRpZmZlcmVudCBkcml2ZSBvcHRpb25zIGRlcGVuZGluZyB1cG9uIFotbG9jYXRpb24gb2YgSm95c3RpY2sxDQorICogLSBXaGVuICJaLVVwIiAob24gSm95c3RpY2sxKSBwcm92aWRlICJhcmNhZGUgZHJpdmUiIG9uIEpveXN0aWNrMQ0KKyAqIC0gV2hlbiAiWi1Eb3duIiAob24gSm95c3RpY2sxKSBwcm92aWRlICJ0YW5rIGRyaXZlIiBvbiBKb3lzdGljazEgYW5kIEpveXN0aWNrMg0KKyAqIC0gVXNlIEpveXN0aWNrIGJ1dHRvbnMgKG9uIEpveXN0aWNrMSBvciBKb3lzdGljazIpIHRvIGRpc3BsYXkgdGhlIGJ1dHRvbiBudW1iZXIgaW4gYmluYXJ5IG9uDQorICogICB0aGUgc29sZW5vaWQgTEVEcyAoTm90ZSB0aGF0IHRoaXMgZmVhdHVyZSBjYW4gYmUgdXNlZCB0byBlYXNpbHkgIm1hcCBvdXQiIHRoZSBidXR0b25zIG9uIGENCisgKiAgIEpveXN0aWNrLiAgTm90ZSBhbHNvIHRoYXQgaWYgbXVsdGlwbGUgYnV0dG9ucyBhcmUgcHJlc3NlZCBzaW11bHRhbmVvdXNseSwgYSAiMTUiIGlzIGRpc3BsYXllZA0KKyAqICAgb24gdGhlIHNvbGVub2lkIExFRHMgdG8gaW5kaWNhdGUgdGhhdCBtdWx0aXBsZSBidXR0b25zIGFyZSBwcmVzc2VkLikNCisgKg0KKyAqIFRoaXMgY29kZSBhc3N1bWVzIHRoZSBmb2xsb3dpbmcgY29ubmVjdGlvbnM6DQorICogLSBEcml2ZXIgU3RhdGlvbjoNCisgKiAgIC0gVVNCIDEgLSBUaGUgInJpZ2h0IiBqb3lzdGljay4gIFVzZWQgZm9yIGVpdGhlciAiYXJjYWRlIGRyaXZlIiBvciAicmlnaHQiIHN0aWNrIGZvciB0YW5rIGRyaXZlDQorICogICAtIFVTQiAyIC0gVGhlICJsZWZ0IiBqb3lzdGljay4gIFVzZWQgYXMgdGhlICJsZWZ0IiBzdGljayBmb3IgdGFuayBkcml2ZQ0KKyAqIA0KKyAqIC0gUm9ib3Q6DQorICogICAtIERpZ2l0YWwgU2lkZWNhciAxOg0KKyAqICAgICAtIFBXTSAxLzMgLSBDb25uZWN0ZWQgdG8gImxlZnQiIGRyaXZlIG1vdG9yKHMpDQorICogICAgIC0gUFdNIDIvNCAtIENvbm5lY3RlZCB0byAicmlnaHQiIGRyaXZlIG1vdG9yKHMpDQorICovDQorY2xhc3MgQnVpbHRpbkRlZmF1bHRDb2RlIDogcHVibGljIEl0ZXJhdGl2ZVJvYm90DQorew0KKwkvLyBEZWNsYXJlIHZhcmlhYmxlIGZvciB0aGUgcm9ib3QgZHJpdmUgc3lzdGVtDQorCVJvYm90RHJpdmUgKm1fcm9ib3REcml2ZTsJCS8vIHJvYm90IHdpbGwgdXNlIFBXTSAxLTQgZm9yIGRyaXZlIG1vdG9ycw0KKwkNCisJLy8gRGVjbGFyZSBhIHZhcmlhYmxlIHRvIHVzZSB0byBhY2Nlc3MgdGhlIGRyaXZlciBzdGF0aW9uIG9iamVjdA0KKwlEcml2ZXJTdGF0aW9uICptX2RzOwkJCQkJCS8vIGRyaXZlciBzdGF0aW9uIG9iamVjdA0KKwlVSU5UMzIgbV9wcmlvclBhY2tldE51bWJlcjsJCQkJCS8vIGtlZXAgdHJhY2sgb2YgdGhlIG1vc3QgcmVjZW50IHBhY2tldCBudW1iZXIgZnJvbSB0aGUgRFMNCisJVUlOVDggbV9kc1BhY2tldHNSZWNlaXZlZEluQ3VycmVudFNlY29uZDsJLy8ga2VlcCB0cmFjayBvZiB0aGUgZHMgcGFja2V0cyByZWNlaXZlZCBpbiB0aGUgY3VycmVudCBzZWNvbmQNCisJDQorCS8vIERlY2xhcmUgdmFyaWFibGVzIGZvciB0aGUgdHdvIGpveXN0aWNrcyBiZWluZyB1c2VkDQorCUpveXN0aWNrICptX3JpZ2h0U3RpY2s7CQkJLy8gam95c3RpY2sgMSAoYXJjYWRlIHN0aWNrIG9yIHJpZ2h0IHRhbmsgc3RpY2spDQorCUpveXN0aWNrICptX2xlZnRTdGljazsJCQkvLyBqb3lzdGljayAyICh0YW5rIGxlZnQgc3RpY2spDQorCQ0KKwlzdGF0aWMgY29uc3QgaW50IE5VTV9KT1lTVElDS19CVVRUT05TID0gMTY7DQorCWJvb2wgbV9yaWdodFN0aWNrQnV0dG9uU3RhdGVbKE5VTV9KT1lTVElDS19CVVRUT05TKzEpXTsNCisJYm9vbCBtX2xlZnRTdGlja0J1dHRvblN0YXRlWyhOVU1fSk9ZU1RJQ0tfQlVUVE9OUysxKV07CQ0KKwkNCisJLy8gRGVjbGFyZSB2YXJpYWJsZXMgZm9yIGVhY2ggb2YgdGhlIGVpZ2h0IHNvbGVub2lkIG91dHB1dHMNCisJc3RhdGljIGNvbnN0IGludCBOVU1fU09MRU5PSURTID0gODsNCisJU29sZW5vaWQgKm1fc29sZW5vaWRzWyhOVU1fU09MRU5PSURTKzEpXTsNCisNCisJZW51bSB7CQkJCQkJCS8vIGRyaXZlIG1vZGUgc2VsZWN0aW9uDQorCQlVTklOSVRJQUxJWkVEX0RSSVZFID0gMCwNCisJCUFSQ0FERV9EUklWRSA9IDEsDQorCQlUQU5LX0RSSVZFID0gMg0KKwl9IG1fZHJpdmVNb2RlOw0KKwkNCisJLy8gTG9jYWwgdmFyaWFibGVzIHRvIGNvdW50IHRoZSBudW1iZXIgb2YgcGVyaW9kaWMgbG9vcHMgcGVyZm9ybWVkDQorCVVJTlQzMiBtX2F1dG9QZXJpb2RpY0xvb3BzOw0KKwlVSU5UMzIgbV9kaXNhYmxlZFBlcmlvZGljTG9vcHM7DQorCVVJTlQzMiBtX3RlbGVQZXJpb2RpY0xvb3BzOw0KKwkJDQorcHVibGljOg0KKy8qKg0KKyAqIENvbnN0cnVjdG9yIGZvciB0aGlzICJCdWlsdGluRGVmYXVsdENvZGUiIENsYXNzLg0KKyAqIA0KKyAqIFRoZSBjb25zdHJ1Y3RvciBjcmVhdGVzIGFsbCBvZiB0aGUgb2JqZWN0cyB1c2VkIGZvciB0aGUgZGlmZmVyZW50IGlucHV0cyBhbmQgb3V0cHV0cyBvZg0KKyAqIHRoZSByb2JvdC4gIEVzc2VudGlhbGx5LCB0aGUgY29uc3RydWN0b3IgZGVmaW5lcyB0aGUgaW5wdXQvb3V0cHV0IG1hcHBpbmcgZm9yIHRoZSByb2JvdCwNCisgKiBwcm92aWRpbmcgbmFtZWQgb2JqZWN0cyBmb3IgZWFjaCBvZiB0aGUgcm9ib3QgaW50ZXJmYWNlcy4gDQorICovDQorCUJ1aWx0aW5EZWZhdWx0Q29kZSh2b2lkKQl7DQorCQlwcmludGYoIkJ1aWx0aW5EZWZhdWx0Q29kZSBDb25zdHJ1Y3RvciBTdGFydGVkXG4iKTsNCisNCisJCS8vIENyZWF0ZSBhIHJvYm90IHVzaW5nIHN0YW5kYXJkIHJpZ2h0L2xlZnQgcm9ib3QgZHJpdmUgb24gUFdNUyAxLCAyLCAzLCBhbmQgIzQNCisJCW1fcm9ib3REcml2ZSA9IG5ldyBSb2JvdERyaXZlKDEsIDMsIDIsIDQpOw0KKw0KKwkJLy8gQWNxdWlyZSB0aGUgRHJpdmVyIFN0YXRpb24gb2JqZWN0DQorCQltX2RzID0gRHJpdmVyU3RhdGlvbjo6R2V0SW5zdGFuY2UoKTsNCisJCW1fcHJpb3JQYWNrZXROdW1iZXIgPSAwOw0KKwkJbV9kc1BhY2tldHNSZWNlaXZlZEluQ3VycmVudFNlY29uZCA9IDA7DQorDQorCQkvLyBEZWZpbmUgam95c3RpY2tzIGJlaW5nIHVzZWQgYXQgVVNCIHBvcnQgIzEgYW5kIFVTQiBwb3J0ICMyIG9uIHRoZSBEcml2ZXJzIFN0YXRpb24NCisJCW1fcmlnaHRTdGljayA9IG5ldyBKb3lzdGljaygxKTsNCisJCW1fbGVmdFN0aWNrID0gbmV3IEpveXN0aWNrKDIpOw0KKw0KKwkJLy8gSXRlcmF0ZSBvdmVyIGFsbCB0aGUgYnV0dG9ucyBvbiBlYWNoIGpveXN0aWNrLCBzZXR0aW5nIHN0YXRlIHRvIGZhbHNlIGZvciBlYWNoDQorCQlVSU5UOCBidXR0b25OdW0gPSAxOwkJCQkJCS8vIHN0YXJ0IGNvdW50aW5nIGJ1dHRvbnMgYXQgYnV0dG9uIDENCisJCWZvciAoYnV0dG9uTnVtID0gMTsgYnV0dG9uTnVtIDw9IE5VTV9KT1lTVElDS19CVVRUT05TOyBidXR0b25OdW0rKykgew0KKwkJCW1fcmlnaHRTdGlja0J1dHRvblN0YXRlW2J1dHRvbk51bV0gPSBmYWxzZTsNCisJCQltX2xlZnRTdGlja0J1dHRvblN0YXRlW2J1dHRvbk51bV0gPSBmYWxzZTsNCisJCX0NCisNCisJCS8vIEl0ZXJhdGUgb3ZlciBhbGwgdGhlIHNvbGVub2lkcyBvbiB0aGUgcm9ib3QsIGNvbnN0cnVjdGluZyBlYWNoIGluIHR1cm4NCisJCVVJTlQ4IHNvbGVub2lkTnVtID0gMTsJCQkJCQkvLyBzdGFydCBjb3VudGluZyBzb2xlbm9pZHMgYXQgc29sZW5vaWQgMQ0KKwkJZm9yIChzb2xlbm9pZE51bSA9IDE7IHNvbGVub2lkTnVtIDw9IE5VTV9TT0xFTk9JRFM7IHNvbGVub2lkTnVtKyspIHsNCisJCQltX3NvbGVub2lkc1tzb2xlbm9pZE51bV0gPSBuZXcgU29sZW5vaWQoc29sZW5vaWROdW0pOw0KKwkJfQ0KKw0KKwkJLy8gU2V0IGRyaXZlIG1vZGUgdG8gdW5pbml0aWFsaXplZA0KKwkJbV9kcml2ZU1vZGUgPSBVTklOSVRJQUxJWkVEX0RSSVZFOw0KKw0KKwkJLy8gSW5pdGlhbGl6ZSBjb3VudGVycyB0byByZWNvcmQgdGhlIG51bWJlciBvZiBsb29wcyBjb21wbGV0ZWQgaW4gYXV0b25vbW91cyBhbmQgdGVsZW9wIG1vZGVzDQorCQltX2F1dG9QZXJpb2RpY0xvb3BzID0gMDsNCisJCW1fZGlzYWJsZWRQZXJpb2RpY0xvb3BzID0gMDsNCisJCW1fdGVsZVBlcmlvZGljTG9vcHMgPSAwOw0KKw0KKwkJcHJpbnRmKCJCdWlsdGluRGVmYXVsdENvZGUgQ29uc3RydWN0b3IgQ29tcGxldGVkXG4iKTsNCisJfQ0KKwkNCisJDQorCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIEluaXQgUm91dGluZXMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCisJdm9pZCBSb2JvdEluaXQodm9pZCkgew0KKwkJLy8gQWN0aW9ucyB3aGljaCB3b3VsZCBiZSBwZXJmb3JtZWQgb25jZSAoYW5kIG9ubHkgb25jZSkgdXBvbiBpbml0aWFsaXphdGlvbiBvZiB0aGUNCisJCS8vIHJvYm90IHdvdWxkIGJlIHB1dCBoZXJlLg0KKwkJDQorCQlwcmludGYoIlJvYm90SW5pdCgpIGNvbXBsZXRlZC5cbiIpOw0KKwl9DQorCQ0KKwl2b2lkIERpc2FibGVkSW5pdCh2b2lkKSB7DQorCQltX2Rpc2FibGVkUGVyaW9kaWNMb29wcyA9IDA7CQkJLy8gUmVzZXQgdGhlIGxvb3AgY291bnRlciBmb3IgZGlzYWJsZWQgbW9kZQ0KKwkJQ2xlYXJTb2xlbm9pZExFRHNLSVRUKCk7DQorCQkvLyBNb3ZlIHRoZSBjdXJzb3IgZG93biBhIGZldywgc2luY2Ugd2UnbGwgbW92ZSBpdCBiYWNrIHVwIGluIHBlcmlvZGljLg0KKwkJcHJpbnRmKCJceDFiWzJCIik7DQorCX0NCisNCisJdm9pZCBBdXRvbm9tb3VzSW5pdCh2b2lkKSB7DQorCQltX2F1dG9QZXJpb2RpY0xvb3BzID0gMDsJCQkJLy8gUmVzZXQgdGhlIGxvb3AgY291bnRlciBmb3IgYXV0b25vbW91cyBtb2RlDQorCQlDbGVhclNvbGVub2lkTEVEc0tJVFQoKTsNCisJfQ0KKw0KKwl2b2lkIFRlbGVvcEluaXQodm9pZCkgew0KKwkJbV90ZWxlUGVyaW9kaWNMb29wcyA9IDA7CQkJCS8vIFJlc2V0IHRoZSBsb29wIGNvdW50ZXIgZm9yIHRlbGVvcCBtb2RlDQorCQltX2RzUGFja2V0c1JlY2VpdmVkSW5DdXJyZW50U2Vjb25kID0gMDsJLy8gUmVzZXQgdGhlIG51bWJlciBvZiBkc1BhY2tldHMgaW4gY3VycmVudCBzZWNvbmQNCisJCW1fZHJpdmVNb2RlID0gVU5JTklUSUFMSVpFRF9EUklWRTsJCS8vIFNldCBkcml2ZSBtb2RlIHRvIHVuaW5pdGlhbGl6ZWQNCisJCUNsZWFyU29sZW5vaWRMRURzS0lUVCgpOw0KKwl9DQorDQorCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIFBlcmlvZGljIFJvdXRpbmVzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorCQ0KKwl2b2lkIERpc2FibGVkUGVyaW9kaWModm9pZCkgIHsNCisJCXN0YXRpYyBJTlQzMiBwcmludFNlYyA9IChJTlQzMilHZXRDbG9jaygpICsgMTsNCisJCXN0YXRpYyBjb25zdCBJTlQzMiBzdGFydFNlYyA9IChJTlQzMilHZXRDbG9jaygpOw0KKw0KKw0KKwkJLy8gaW5jcmVtZW50IHRoZSBudW1iZXIgb2YgZGlzYWJsZWQgcGVyaW9kaWMgbG9vcHMgY29tcGxldGVkDQorCQltX2Rpc2FibGVkUGVyaW9kaWNMb29wcysrOw0KKwkJDQorCQkvLyB3aGlsZSBkaXNhYmxlZCwgcHJpbnRvdXQgdGhlIGR1cmF0aW9uIG9mIGN1cnJlbnQgZGlzYWJsZWQgbW9kZSBpbiBzZWNvbmRzDQorCQlpZiAoR2V0Q2xvY2soKSA+IHByaW50U2VjKSB7DQorCQkJLy8gTW92ZSB0aGUgY3Vyc29yIGJhY2sgdG8gdGhlIHByZXZpb3VzIGxpbmUgYW5kIGNsZWFyIGl0Lg0KKwkJCXByaW50ZigiXHgxYlsxQVx4MWJbMksiKTsNCisJCQlwcmludGYoIkRpc2FibGVkIHNlY29uZHM6ICVkXHJcbiIsIHByaW50U2VjIC0gc3RhcnRTZWMpOwkJCQ0KKwkJCXByaW50U2VjKys7DQorCQl9DQorCX0NCisNCisJdm9pZCBBdXRvbm9tb3VzUGVyaW9kaWModm9pZCkgew0KKwkJDQorCQltX2F1dG9QZXJpb2RpY0xvb3BzKys7DQorDQorCQkvLyBnZW5lcmF0ZSBLSVRULXN0eWxlIExFRCBkaXNwbGF5IG9uIHRoZSBzb2xlbm9pZHMNCisJCVNvbGVub2lkTEVEc0tJVFQoIG1fYXV0b1BlcmlvZGljTG9vcHMgKTsNCisJCQkJDQorCQkvKiB0aGUgYmVsb3cgY29kZSAoaWYgdW5jb21tZW50ZWQpIHdvdWxkIGRyaXZlIHRoZSByb2JvdCBmb3J3YXJkIGF0IGhhbGYgc3BlZWQNCisJCSAqIGZvciB0d28gc2Vjb25kcy4gIFRoaXMgY29kZSBpcyBwcm92aWRlZCBhcyBhbiBleGFtcGxlIG9mIGhvdyB0byBkcml2ZSB0aGUgDQorCQkgKiByb2JvdCBpbiBhdXRvbm9tb3VzIG1vZGUsIGJ1dCBpcyBub3QgZW5hYmxlZCBpbiB0aGUgZGVmYXVsdCBjb2RlIGluIG9yZGVyDQorCQkgKiB0byBwcmV2ZW50IGFuIHVuc3VzcGVjdGluZyB0ZWFtIGZyb20gaGF2aW5nIHRoZWlyIHJvYm90IGRyaXZlIGF1dG9ub21vdXNseSENCisJCSAqLw0KKwkJLyogYmVsb3cgY29kZSBjb21tZW50ZWQgb3V0IGZvciBzYWZldHkNCisJCWlmIChtX2F1dG9QZXJpb2RpY0xvb3BzID09IDEpIHsNCisJCQkvLyBXaGVuIG9uIHRoZSBmaXJzdCBwZXJpb2RpYyBsb29wIGluIGF1dG9ub21vdXMgbW9kZSwgc3RhcnQgZHJpdmluZyBmb3J3YXJkcyBhdCBoYWxmIHNwZWVkDQorCQkJbV9yb2JvdERyaXZlLT5Ecml2ZSgwLjUsIDAuMCk7CQkJLy8gZHJpdmUgZm9yd2FyZHMgYXQgaGFsZiBzcGVlZA0KKwkJfQ0KKwkJaWYgKG1fYXV0b1BlcmlvZGljTG9vcHMgPT0gKDIgKiBHZXRMb29wc1BlclNlYygpKSkgew0KKwkJCS8vIEFmdGVyIDIgc2Vjb25kcywgc3RvcCB0aGUgcm9ib3QgDQorCQkJbV9yb2JvdERyaXZlLT5Ecml2ZSgwLjAsIDAuMCk7CQkJLy8gc3RvcCByb2JvdA0KKwkJfQ0KKwkJKi8NCisJfQ0KKw0KKwkNCisJdm9pZCBUZWxlb3BQZXJpb2RpYyh2b2lkKSB7DQorCQkvLyBpbmNyZW1lbnQgdGhlIG51bWJlciBvZiB0ZWxlb3AgcGVyaW9kaWMgbG9vcHMgY29tcGxldGVkDQorCQltX3RlbGVQZXJpb2RpY0xvb3BzKys7DQorDQorCQkvKg0KKwkJICogTm8gbG9uZ2VyIG5lZWRlZCBzaW5jZSBwZXJpb2RpYyBsb29wcyBhcmUgbm93IHN5bmNocm9uaXplZCB3aXRoIGluY29taW5nIHBhY2tldHMuDQorCQlpZiAobV9kcy0+R2V0UGFja2V0TnVtYmVyKCkgIT0gbV9wcmlvclBhY2tldE51bWJlcikgew0KKwkJKi8NCisJCQkvKiANCisJCQkgKiBDb2RlIHBsYWNlZCBpbiBoZXJlIHdpbGwgYmUgY2FsbGVkIG9ubHkgd2hlbiBhIG5ldyBwYWNrZXQgb2YgaW5mb3JtYXRpb24NCisJCQkgKiBoYXMgYmVlbiByZWNlaXZlZCBieSB0aGUgRHJpdmVyIFN0YXRpb24uICBBbnkgY29kZSB3aGljaCBuZWVkcyBuZXcgaW5mb3JtYXRpb24NCisJCQkgKiBmcm9tIHRoZSBEUyBzaG91bGQgZ28gaW4gaGVyZQ0KKwkJCSAqLw0KKwkJCSANCisJCQltX2RzUGFja2V0c1JlY2VpdmVkSW5DdXJyZW50U2Vjb25kKys7CQkJCQkvLyBpbmNyZW1lbnQgRFMgcGFja2V0cyByZWNlaXZlZA0KKwkJCQkJCQ0KKwkJCS8vIHB1dCBEcml2ZXIgU3RhdGlvbi1kZXBlbmRlbnQgY29kZSBoZXJlDQorDQorCQkJLy8gRGVtb25zdHJhdGUgdGhlIHVzZSBvZiB0aGUgSm95c3RpY2sgYnV0dG9ucw0KKwkJCURlbW9uc3RyYXRlSm95c3RpY2tCdXR0b25zKG1fcmlnaHRTdGljaywgbV9yaWdodFN0aWNrQnV0dG9uU3RhdGUsICJSaWdodCBTdGljayIsICZtX3NvbGVub2lkc1sxXSk7DQorCQkJRGVtb25zdHJhdGVKb3lzdGlja0J1dHRvbnMobV9sZWZ0U3RpY2ssIG1fbGVmdFN0aWNrQnV0dG9uU3RhdGUsICJMZWZ0IFN0aWNrICIsICZtX3NvbGVub2lkc1s1XSk7DQorCQkNCisJCQkvLyBkZXRlcm1pbmUgaWYgdGFuayBvciBhcmNhZGUgbW9kZSwgYmFzZWQgdXBvbiBwb3NpdGlvbiBvZiAiWiIgd2hlZWwgb24ga2l0IGpveXN0aWNrDQorCQkJaWYgKG1fcmlnaHRTdGljay0+R2V0WigpIDw9IDApIHsgICAgLy8gTG9naXRlY2ggQXR0YWNrMyBoYXMgei1wb2xhcml0eSByZXZlcnNlZDsgdXAgaXMgbmVnYXRpdmUNCisJCQkJLy8gdXNlIGFyY2FkZSBkcml2ZQ0KKwkJCQltX3JvYm90RHJpdmUtPkFyY2FkZURyaXZlKG1fcmlnaHRTdGljayk7CQkJLy8gZHJpdmUgd2l0aCBhcmNhZGUgc3R5bGUgKHVzZSByaWdodCBzdGljaykNCisJCQkJaWYgKG1fZHJpdmVNb2RlICE9IEFSQ0FERV9EUklWRSkgew0KKwkJCQkJLy8gaWYgbmV3bHkgZW50ZXJlZCBhcmNhZGUgZHJpdmUsIHByaW50IG91dCBhIG1lc3NhZ2UNCisJCQkJCXByaW50ZigiQXJjYWRlIERyaXZlXG4iKTsNCisJCQkJCW1fZHJpdmVNb2RlID0gQVJDQURFX0RSSVZFOw0KKwkJCQl9DQorCQkJfSBlbHNlIHsNCisJCQkJLy8gdXNlIHRhbmsgZHJpdmUNCisJCQkJbV9yb2JvdERyaXZlLT5UYW5rRHJpdmUobV9sZWZ0U3RpY2ssIG1fcmlnaHRTdGljayk7CS8vIGRyaXZlIHdpdGggdGFuayBzdHlsZQ0KKwkJCQlpZiAobV9kcml2ZU1vZGUgIT0gVEFOS19EUklWRSkgew0KKwkJCQkJLy8gaWYgbmV3bHkgZW50ZXJlZCB0YW5rIGRyaXZlLCBwcmludCBvdXQgYSBtZXNzYWdlDQorCQkJCQlwcmludGYoIlRhbmsgRHJpdmVcbiIpOw0KKwkJCQkJbV9kcml2ZU1vZGUgPSBUQU5LX0RSSVZFOw0KKwkJCQl9DQorCQkJfSANCisJCS8qDQorCQl9ICAvLyBpZiAobV9kcy0+R2V0UGFja2V0TnVtYmVyKCkuLi4NCisJCSovDQorDQorCX0gLy8gVGVsZW9wUGVyaW9kaWModm9pZCkNCisNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiBDb250aW51b3VzIFJvdXRpbmVzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQorCS8qIA0KKwkgKiBUaGVzZSByb3V0aW5lcyBhcmUgbm90IHVzZWQgaW4gdGhpcyBkZW1vbnN0cmF0aW9uIHJvYm90DQorCSAqDQorCSAqIA0KKwl2b2lkIERpc2FibGVkQ29udGludW91cyh2b2lkKSB7DQorCX0NCisNCisJdm9pZCBBdXRvbm9tb3VzQ29udGludW91cyh2b2lkKQl7DQorCX0NCisNCisJdm9pZCBUZWxlb3BDb250aW51b3VzKHZvaWQpIHsNCisJfQ0KKwkqLw0KKw0KKwkNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiBNaXNjZWxsYW5lb3VzIFJvdXRpbmVzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorCQ0KKwkvKioNCisJICogQ2xlYXIgS0lUVC1zdHlsZSBMRUQgZGlzcGxheSBvbiB0aGUgc29sZW5vaWRzDQorCSAqIA0KKwkgKiBDbGVhciB0aGUgc29sZW5vaWQgTEVEcyB1c2VkIGZvciBhIEtJVFQtc3R5bGUgTEVEIGRpc3BsYXkuDQorCSAqLwkNCisJdm9pZCBDbGVhclNvbGVub2lkTEVEc0tJVFQoKSB7DQorCQkvLyBJdGVyYXRlIG92ZXIgYWxsIHRoZSBzb2xlbm9pZHMgb24gdGhlIHJvYm90LCBjbGVhcmluZyBlYWNoIGluIHR1cm4NCisJCVVJTlQ4IHNvbGVub2lkTnVtID0gMTsJCQkJCQkvLyBzdGFydCBjb3VudGluZyBzb2xlbm9pZHMgYXQgc29sZW5vaWQgMQ0KKwkJZm9yIChzb2xlbm9pZE51bSA9IDE7IHNvbGVub2lkTnVtIDw9IE5VTV9TT0xFTk9JRFM7IHNvbGVub2lkTnVtKyspIHsNCisJCQltX3NvbGVub2lkc1tzb2xlbm9pZE51bV0tPlNldChmYWxzZSk7DQorCQl9DQorCX0NCisJDQorCS8qKg0KKwkgKiBHZW5lcmF0ZSBLSVRULXN0eWxlIExFRCBkaXNwbGF5IG9uIHRoZSBzb2xlbm9pZHMNCisJICogDQorCSAqIFRoaXMgbWV0aG9kIGV4cGVjdHMgdG8gYmUgY2FsbGVkIGR1cmluZyBlYWNoIHBlcmlvZGljIGxvb3AsIHdpdGggdGhlIGFyZ3VtZW50IGJlaW5nIHRoZSANCisJICogbG9vcCBudW1iZXIgZm9yIHRoZSBjdXJyZW50IGxvb3AuDQorCSAqIA0KKwkgKiBUaGUgZ29hbCBoZXJlIGlzIHRvIGdlbmVyYXRlIGEgS0lUVC1zdHlsZSBMRUQgZGlzcGxheS4gIChTZWUgaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9LSVRUICkNCisJICogSG93ZXZlciwgc2luY2UgdGhlIHNvbGVub2lkIG1vZHVsZSBoYXMgdHdvIHNjYW4gYmFycywgd2UgY2FuIGhhdmUgb3VycyBnbyBpbiBvcHBvc2l0ZSBkaXJlY3Rpb25zIQ0KKwkgKiBUaGUgc2NhbiBiYXIgaXMgd3JpdHRlbiB0byBoYXZlIGEgcGVyaW9kIG9mIG9uZSBzZWNvbmQgd2l0aCBzaXggZGlmZmVyZW50IHBvc2l0aW9ucy4NCisJICovDQorCXZvaWQgU29sZW5vaWRMRURzS0lUVChVSU5UMzIgbnVtbG9vcHMpIHsNCisJCXVuc2lnbmVkIGludCBjb25zdCBOVU1fS0lUVF9QT1NJVElPTlMgPSA2Ow0KKwkJVUlOVDE2IG51bWxvb3Bfd2l0aGluX3NlY29uZCA9IG51bWxvb3BzICUgKFVJTlQzMilHZXRMb29wc1BlclNlYygpOw0KKw0KKwkJaWYgKG51bWxvb3Bfd2l0aGluX3NlY29uZCA9PSAwKSB7DQorCQkJLy8gcG9zaXRpb24gMTsgc29sZW5vaWRzIDEgYW5kIDggb24NCisJCQltX3NvbGVub2lkc1sxXS0+U2V0KHRydWUpOyAgbV9zb2xlbm9pZHNbOF0tPlNldCh0cnVlKTsNCisJCQltX3NvbGVub2lkc1syXS0+U2V0KGZhbHNlKTsgbV9zb2xlbm9pZHNbN10tPlNldChmYWxzZSk7DQorCQl9IGVsc2UgaWYgKG51bWxvb3Bfd2l0aGluX3NlY29uZCA9PSAoKFVJTlQzMilHZXRMb29wc1BlclNlYygpIC8gTlVNX0tJVFRfUE9TSVRJT05TKSkgew0KKwkJCS8vIHBvc2l0aW9uIDI7IHNvbGVub2lkcyAyIGFuZCA3IG9uDQorCQkJbV9zb2xlbm9pZHNbMl0tPlNldCh0cnVlKTsgIG1fc29sZW5vaWRzWzddLT5TZXQodHJ1ZSk7DQorCQkJbV9zb2xlbm9pZHNbMV0tPlNldChmYWxzZSk7IG1fc29sZW5vaWRzWzhdLT5TZXQoZmFsc2UpOw0KKwkJfSBlbHNlIGlmIChudW1sb29wX3dpdGhpbl9zZWNvbmQgPT0gKChVSU5UMzIpR2V0TG9vcHNQZXJTZWMoKSAqIDIgLyBOVU1fS0lUVF9QT1NJVElPTlMpKSB7DQorCQkJLy8gcG9zaXRpb24gMzsgc29sZW5vaWRzIDMgYW5kIDYgb24NCisJCQltX3NvbGVub2lkc1szXS0+U2V0KHRydWUpOyAgbV9zb2xlbm9pZHNbNl0tPlNldCh0cnVlKTsNCisJCQltX3NvbGVub2lkc1syXS0+U2V0KGZhbHNlKTsgbV9zb2xlbm9pZHNbN10tPlNldChmYWxzZSk7DQorCQl9IGVsc2UgaWYgKG51bWxvb3Bfd2l0aGluX3NlY29uZCA9PSAoKFVJTlQzMilHZXRMb29wc1BlclNlYygpICogMyAvIE5VTV9LSVRUX1BPU0lUSU9OUykpIHsNCisJCQkvLyBwb3NpdGlvbiA0OyBzb2xlbm9pZHMgNCBhbmQgNSBvbg0KKwkJCW1fc29sZW5vaWRzWzRdLT5TZXQodHJ1ZSk7ICBtX3NvbGVub2lkc1s1XS0+U2V0KHRydWUpOw0KKwkJCW1fc29sZW5vaWRzWzNdLT5TZXQoZmFsc2UpOyBtX3NvbGVub2lkc1s2XS0+U2V0KGZhbHNlKTsNCisJCX0gZWxzZSBpZiAobnVtbG9vcF93aXRoaW5fc2Vjb25kID09ICgoVUlOVDMyKUdldExvb3BzUGVyU2VjKCkgKiA0IC8gTlVNX0tJVFRfUE9TSVRJT05TKSkgew0KKwkJCS8vIHBvc2l0aW9uIDU7IHNvbGVub2lkcyAzIGFuZCA2IG9uDQorCQkJbV9zb2xlbm9pZHNbM10tPlNldCh0cnVlKTsgIG1fc29sZW5vaWRzWzZdLT5TZXQodHJ1ZSk7DQorCQkJbV9zb2xlbm9pZHNbNF0tPlNldChmYWxzZSk7IG1fc29sZW5vaWRzWzVdLT5TZXQoZmFsc2UpOw0KKwkJfSBlbHNlIGlmIChudW1sb29wX3dpdGhpbl9zZWNvbmQgPT0gKChVSU5UMzIpR2V0TG9vcHNQZXJTZWMoKSAqIDUgLyBOVU1fS0lUVF9QT1NJVElPTlMpKSB7DQorCQkJLy8gcG9zaXRpb24gNjsgc29sZW5vaWRzIDIgYW5kIDcgb24NCisJCQltX3NvbGVub2lkc1syXS0+U2V0KHRydWUpOyAgbV9zb2xlbm9pZHNbN10tPlNldCh0cnVlKTsNCisJCQltX3NvbGVub2lkc1szXS0+U2V0KGZhbHNlKTsgbV9zb2xlbm9pZHNbNl0tPlNldChmYWxzZSk7DQorCQl9IA0KKwl9DQorDQorCS8qKg0KKwkgKiBEZW1vbnN0cmF0ZSBoYW5kbGluZyBvZiBqb3lzdGljayBidXR0b25zDQorCSAqIA0KKwkgKiBUaGlzIG1ldGhvZCBleHBlY3RzIHRvIGJlIGNhbGxlZCBkdXJpbmcgZWFjaCBwZXJpb2RpYyBsb29wLCBwcm92aWRpbmcgdGhlIGZvbGxvd2luZw0KKwkgKiBjYXBhYmlsaXRpZXM6DQorCSAqIC0gUHJpbnQgb3V0IGEgbWVzc2FnZSB3aGVuIGEgYnV0dG9uIGlzIGluaXRpYWxseSBwcmVzc2VkDQorCSAqIC0gU29sZW5vaWQgTEVEcyBsaWdodCB1cCBhY2NvcmRpbmcgdG8gam95c3RpY2sgYnV0dG9uczoNCisJICogICAtIFdoZW4gbm8gYnV0dG9ucyBwcmVzc2VkLCBjbGVhciB0aGUgc29sZW5vaWQgTEVEcw0KKwkgKiAgIC0gV2hlbiBvbmx5IG9uZSBidXR0b24gaXMgcHJlc3NlZCwgc2hvdyB0aGUgYnV0dG9uIG51bWJlciAoaW4gYmluYXJ5KSB2aWEgdGhlIHNvbGVub2lkIExFRHMNCisJICogICAtIFdoZW4gbW9yZSB0aGFuIG9uZSBidXR0b24gaXMgcHJlc3NlZCwgc2hvdyAiMTUiIChpbiBiaW5hcnkpIHZpYSB0aGUgc29sZW5vaWQgTEVEcw0KKwkgKi8NCisJdm9pZCBEZW1vbnN0cmF0ZUpveXN0aWNrQnV0dG9ucyhKb3lzdGljayAqY3VyclN0aWNrLA0KKwkJCQkJCQkJCWJvb2wgKmJ1dHRvblByZXZpb3VzbHlQcmVzc2VkLA0KKwkJCQkJCQkJCWNvbnN0IGNoYXIgKnN0aWNrU3RyaW5nLA0KKwkJCQkJCQkJCVNvbGVub2lkICpzb2xlbm9pZHNbXSkgew0KKwkJDQorCQlVSU5UOCBidXR0b25OdW0gPSAxOwkJCQkvLyBzdGFydCBjb3VudGluZyBidXR0b25zIGF0IGJ1dHRvbiAxDQorCQlib29sIG91dHB1dEdlbmVyYXRlZCA9IGZhbHNlOwkJLy8gZmxhZyBmb3Igd2hldGhlciBvciBub3Qgb3V0cHV0IGlzIGdlbmVyYXRlZCBmb3IgYSBidXR0b24NCisJCUlOVDggbnVtT2ZCdXR0b25QcmVzc2VkID0gMDsJCS8vIDAgaWYgbm8gYnV0dG9ucyBwcmVzc2VkLCAtMSBpZiBtdWx0aXBsZSBidXR0b25zIHByZXNzZWQNCisJCQ0KKwkJLyogSXRlcmF0ZSBvdmVyIGFsbCB0aGUgYnV0dG9ucyBvbiB0aGUgam95c3RpY2ssIGNoZWNraW5nIHRvIHNlZSBpZiBlYWNoIGlzIHByZXNzZWQNCisJCSAqIElmIGEgYnV0dG9uIGlzIHByZXNzZWQsIGNoZWNrIHRvIHNlZSBpZiBpdCBpcyBuZXdseSBwcmVzc2VkOyBpZiBzbywgcHJpbnQgb3V0IGENCisJCSAqIG1lc3NhZ2Ugb24gdGhlIGNvbnNvbGUNCisJCSAqLyANCisJCWZvciAoYnV0dG9uTnVtID0gMTsgYnV0dG9uTnVtIDw9IE5VTV9KT1lTVElDS19CVVRUT05TOyBidXR0b25OdW0rKykgew0KKwkJCWlmIChjdXJyU3RpY2stPkdldFJhd0J1dHRvbihidXR0b25OdW0pKSB7DQorCQkJCS8vIHRoZSBjdXJyZW50IGJ1dHRvbiBpcyBwcmVzc2VkLCBub3cgYWN0IGFjY29yZGluZ2x5Li4uDQorCQkJCWlmICghYnV0dG9uUHJldmlvdXNseVByZXNzZWRbYnV0dG9uTnVtXSkgew0KKwkJCQkJLy8gYnV0dG9uIG5ld2x5IHByZXNzZWQ7IHByaW50IG91dCBhIG1lc3NhZ2UNCisJCQkJCWlmICghb3V0cHV0R2VuZXJhdGVkKSB7DQorCQkJCQkJLy8gcHJpbnQgb3V0IGEgaGVhZGluZyBpZiBubyBvdGhlciBidXR0b24gcHJlc3NlZCB0aGlzIGN5Y2xlDQorCQkJCQkJb3V0cHV0R2VuZXJhdGVkID0gdHJ1ZTsNCisJCQkJCQlwcmludGYoIiVzIGJ1dHRvbiBwcmVzc2VkOiIsIHN0aWNrU3RyaW5nKTsNCisJCQkJCX0NCisJCQkJCXByaW50ZigiICVkIiwgYnV0dG9uTnVtKTsNCisJCQkJfQ0KKwkJCQkvLyByZW1lbWJlciB0aGF0IHRoaXMgYnV0dG9uIGlzIHByZXNzZWQgZm9yIHRoZSBuZXh0IGl0ZXJhdGlvbg0KKwkJCQlidXR0b25QcmV2aW91c2x5UHJlc3NlZFtidXR0b25OdW1dID0gdHJ1ZTsNCisJCQkJDQorCQkJCS8vIHNldCBudW1PZkJ1dHRvblByZXNzZWQgYXBwcm9wcmlhdGVseQ0KKwkJCQlpZiAobnVtT2ZCdXR0b25QcmVzc2VkID09IDApIHsNCisJCQkJCS8vIG5vIGJ1dHRvbiBwcmVzc2VkIHlldCB0aGlzIHRpbWUgdGhyb3VnaCwgc2V0IHRoZSBudW1iZXIgY29ycmVjdGx5DQorCQkJCQludW1PZkJ1dHRvblByZXNzZWQgPSBidXR0b25OdW07DQorCQkJCX0gZWxzZSB7DQorCQkJCQkvLyBhbm90aGVyIGJ1dHRvbiAob3IgYnV0dG9ucykgbXVzdCBoYXZlIGFscmVhZHkgYmVlbiBwcmVzc2VkLCBzZXQgYXBwcm9wcmlhdGVseQ0KKwkJCQkJbnVtT2ZCdXR0b25QcmVzc2VkID0gLTE7DQorCQkJCX0NCisJCQl9IGVsc2Ugew0KKwkJCQlidXR0b25QcmV2aW91c2x5UHJlc3NlZFtidXR0b25OdW1dID0gZmFsc2U7DQorCQkJfQ0KKwkJfQ0KKwkJDQorCQkvLyBhZnRlciBpdGVyYXRpbmcgdGhyb3VnaCBhbGwgdGhlIGJ1dHRvbnMsIGFkZCBhIG5ld2xpbmUgdG8gb3V0cHV0IGlmIG5lZWRlZA0KKwkJaWYgKG91dHB1dEdlbmVyYXRlZCkgew0KKwkJCXByaW50ZigiXG4iKTsNCisJCX0NCisJCQ0KKwkJaWYgKG51bU9mQnV0dG9uUHJlc3NlZCA9PSAtMSkgew0KKwkJCS8vIG11bHRpcGxlIGJ1dHRvbnMgd2VyZSBwcmVzc2VkLCBkaXNwbGF5IGFzIGlmIGJ1dHRvbiAxNSB3YXMgcHJlc3NlZA0KKwkJCURpc3BsYXlCaW5hcnlOdW1iZXJPblNvbGVub2lkTEVEcygxNSwgc29sZW5vaWRzKTsNCisJCX0gZWxzZSB7DQorCQkJLy8gZGlzcGxheSB0aGUgbnVtYmVyIG9mIHRoZSBidXR0b24gcHJlc3NlZCBvbiB0aGUgc29sZW5vaWRzOw0KKwkJCS8vIG5vdGUgdGhhdCBpZiBubyBidXR0b24gd2FzIHByZXNzZWQgKDApLCB0aGUgc29sZW5vaWQgZGlzcGxheSB3aWxsIGJlIGNsZWFyZWQgKHNldCB0byAwKQ0KKwkJCURpc3BsYXlCaW5hcnlOdW1iZXJPblNvbGVub2lkTEVEcyhudW1PZkJ1dHRvblByZXNzZWQsIHNvbGVub2lkcyk7DQorCQl9DQorCX0NCisJDQorDQorCS8qKg0KKwkgKiBEaXNwbGF5IGEgZ2l2ZW4gZm91ci1iaXQgdmFsdWUgaW4gYmluYXJ5IG9uIHRoZSBnaXZlbiBzb2xlbm9pZCBMRURzDQorCSAqLw0KKwl2b2lkIERpc3BsYXlCaW5hcnlOdW1iZXJPblNvbGVub2lkTEVEcyhVSU5UOCBkaXNwbGF5TnVtYmVyLCBTb2xlbm9pZCAqc29sZW5vaWRzW10pIHsNCisNCisJCWlmIChkaXNwbGF5TnVtYmVyID4gMTUpIHsNCisJCQkvLyBpZiB0aGUgbnVtYmVyIHRvIGRpc3BsYXkgaXMgbGFyZ2VyIHRoYW4gY2FuIGJlIGRpc3BsYXllZCBpbiA0IExFRHMsIGRpc3BsYXkgMCBpbnN0ZWFkDQorCQkJZGlzcGxheU51bWJlciA9IDA7DQorCQl9DQorCQkNCisJCXNvbGVub2lkc1szXS0+U2V0KCAoZGlzcGxheU51bWJlciAmIDEpICE9IDApOw0KKwkJc29sZW5vaWRzWzJdLT5TZXQoIChkaXNwbGF5TnVtYmVyICYgMikgIT0gMCk7DQorCQlzb2xlbm9pZHNbMV0tPlNldCggKGRpc3BsYXlOdW1iZXIgJiA0KSAhPSAwKTsNCisJCXNvbGVub2lkc1swXS0+U2V0KCAoZGlzcGxheU51bWJlciAmIDgpICE9IDApOw0KKwl9DQorCQkJDQorfTsNCisNCitTVEFSVF9ST0JPVF9DTEFTUyhCdWlsdGluRGVmYXVsdENvZGUpOw0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9CdWlsdGluRGVmYXVsdENvZGUvc2FtcGxlLnByb3BlcnRpZXMgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vQnVpbHRpbkRlZmF1bHRDb2RlL3NhbXBsZS5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmYzg5NWUKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vQnVpbHRpbkRlZmF1bHRDb2RlL3NhbXBsZS5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMiBAQAorcHJvamVjdC50eXBlPURvd25sb2FkYWJsZUtlcm5lbE1vZHVsZVByb2plY3QNCitwbGF0Zm9ybS5pZD1WeFdvcmtzDQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvdnh3b3Jrcy02LjMvdGFyZ2V0L3NyYy9kZW1vL0J1aWx0aW5EZWZhdWx0Q29kZS9zYW1wbGUudHh0IGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvdnh3b3Jrcy02LjMvdGFyZ2V0L3NyYy9kZW1vL0J1aWx0aW5EZWZhdWx0Q29kZS9zYW1wbGUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhZjU2N2QKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vQnVpbHRpbkRlZmF1bHRDb2RlL3NhbXBsZS50eHQKQEAgLTAsMCArMSwyNiBAQAorRlJDIERlZmF1bHQgUHJvZ3JhbSAoQ3VycmVudCB3aXRoIGltYWdpbmcgdG9vbCkNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKw0KK1RoaXMgcHJvZ3JhbSBpcyB0aGUgImRlZmF1bHQiIG1haW4gcHJvZ3JhbSBpbmNsdWRlZCB3aGVuIGltYWdpbmcgdGhlIGNSSU8gd2l0aCB0aGUNCisiZGVmYXVsdCIgY29kZSBpbiBDKysuICANCisNCitUaGlzIGRlbW8gdXNlcyB0aGUgSXRlcmF0aXZlUm9ib3QgYmFzZSBjbGFzcyBpbiBvcmRlciB0byBtaXJyb3IgdGhlICJvbGQgc3R5bGUiIGRlZmF1bHQNCitjb2RlIChwcmlvciB0byAyMDA5KSBieSBwcm92aWRpbmcgbWV0aG9kcyB3aGljaCBhcmUgY2FsbGVkIGJ5IHRoZSBtYWluIGxvb3AgYXQgdGhlDQorYXBwcm9wcmlhdGUgdGltZXMuDQorDQorVGhpcyBkZW1vIGlzIGludGVuZGVkIHRvIHByb3ZpZGUgZnVuY3Rpb25hbGl0eSB0aGF0IHdpbGwgY29uZmlybSB0aGUgb3BlcmF0aW9uIGFuZCB1c2FnZQ0KK29mIHRoZSBjb3JlIGNvbnRyb2wgc3lzdGVtIGNvbXBvbmVudHMsIGFzIHVzZWQgaW4gdGhlICJCZW5jaHRvcCBUZXN0IiBkZXNjcmliZWQgaW4NCitDaGFwdGVyIDIgb2YgdGhlIDIwMDkgRlJDIENvbnRyb2wgU3lzdGVtIE1hbnVhbC4NCisNCitUaGlzIHByb2dyYW0gcHJvdmlkZXMgZmVhdHVyZXMgaW4gdGhlIERpc2FibGVkLCBBdXRvbm9tb3VzLCBhbmQgVGVsZW9wIG1vZGVzIGFzIGRlc2NyaWJlZA0KK2luIHRoZSAiYmVuY2h0b3AgdGVzdCIgZGlyZWN0aW9ucywgaW5jbHVkaW5nICJvbmNlLWEtc2Vjb25kIiBkZWJ1Z2dpbmcgcHJpbnRvdXRzIHdoZW4NCitkaXNhYmxlZCwgYSAiS0lUVCBsaWdodCBzaG93IiBvbiB0aGUgc29sZW5vaWQgbGlnaHRzIHdoZW4gZGlzYWJsZWQsIGFuZCBlbGVtZW50YXJ5IGRyaXZpbmcNCitjYXBhYmlsaXRpZXMgYW5kICJidXR0b24gbWFwcGluZyIgb2Ygam95c3RpY2tzIHdoZW4gdGVsZW9wZXJhdGVkLiAgVGhpcyBkZW1vbnN0cmF0aW9uDQorcHJvZ3JhbSBhbHNvIHNob3dzIHRoZSB1c2Ugb2YgdGhlIHVzZXIgd2F0Y2hkb2cgdGltZXIuDQorDQorVGhpcyBkZW1vbnN0cmF0aW9uIGlzIG5vdCBpbnRlbmRlZCB0byBzZXJ2ZSBhcyBhICJzdGFydGluZyB0ZW1wbGF0ZSIgZm9yIGRldmVsb3BtZW50IG9mDQorcm9ib3QgY29kZSBmb3IgYSB0ZWFtLCBhcyB0aGVyZSBhcmUgYmV0dGVyIHRlbXBsYXRlcyBhbmQgZXhhbXBsZXMgY3JlYXRlZCBzcGVjaWZpY2FsbHkNCitmb3IgdGhhdCBwdXJwb3NlLiAgSG93ZXZlciwgdGVhbXMgbWF5IGZpbmQgdGhlIHRlY2huaXF1ZXMgdXNlZCBpbiB0aGlzIHByb2dyYW0gdG8gYmUNCitpbnRlcmVzdGluZyBwb3NzaWJpbGl0aWVzIGZvciB1c2UgaW4gdGhlaXIgb3duIHJvYm90IGNvZGUuDQorDQorDQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvdnh3b3Jrcy02LjMvdGFyZ2V0L3NyYy9kZW1vL0NvbW1hbmRCYXNlZFJvYm90VGVtcGxhdGUvLmNwcm9qZWN0IGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvdnh3b3Jrcy02LjMvdGFyZ2V0L3NyYy9kZW1vL0NvbW1hbmRCYXNlZFJvYm90VGVtcGxhdGUvLmNwcm9qZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0MjcwODYKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vQ29tbWFuZEJhc2VkUm9ib3RUZW1wbGF0ZS8uY3Byb2plY3QKQEAgLTAsMCArMSwyOSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQorPD9maWxlVmVyc2lvbiA0LjAuMD8+DQorDQorPGNwcm9qZWN0Pg0KKwk8c3RvcmFnZU1vZHVsZSBtb2R1bGVJZD0ib3JnLmVjbGlwc2UuY2R0LmNvcmUuc2V0dGluZ3MiPg0KKwkJPGNjb25maWd1cmF0aW9uIGlkPSJvcmcuZWNsaXBzZS5jZHQuY29yZS5kZWZhdWx0LmNvbmZpZy4yODM5NjcxMDYiPg0KKwkJCTxzdG9yYWdlTW9kdWxlIGJ1aWxkU3lzdGVtSWQ9Im9yZy5lY2xpcHNlLmNkdC5jb3JlLmRlZmF1bHRDb25maWdEYXRhUHJvdmlkZXIiIGlkPSJvcmcuZWNsaXBzZS5jZHQuY29yZS5kZWZhdWx0LmNvbmZpZy4yODM5NjcxMDYiIG1vZHVsZUlkPSJvcmcuZWNsaXBzZS5jZHQuY29yZS5zZXR0aW5ncyIgbmFtZT0iQ29uZmlndXJhdGlvbiI+DQorCQkJCTxleHRlcm5hbFNldHRpbmdzLz4NCisJCQkJPGV4dGVuc2lvbnM+DQorCQkJCQk8ZXh0ZW5zaW9uIGlkPSJjb20ud2luZHJpdmVyLmlkZS5jb3JlLldSU2Nhbm5lckluZm9Qcm92aWRlciIgcG9pbnQ9Im9yZy5lY2xpcHNlLmNkdC5jb3JlLlNjYW5uZXJJbmZvUHJvdmlkZXIiLz4NCisJCQkJCTxleHRlbnNpb24gaWQ9ImNvbS53aW5kcml2ZXIuaWRlLmNvcmUuV1JFbGZQYXJzZXJWeFdvcmtzIiBwb2ludD0ib3JnLmVjbGlwc2UuY2R0LmNvcmUuQmluYXJ5UGFyc2VyIi8+DQorCQkJCQk8ZXh0ZW5zaW9uIGlkPSJvcmcuZWNsaXBzZS5jZHQuY29yZS5HTlVfRUxGIiBwb2ludD0ib3JnLmVjbGlwc2UuY2R0LmNvcmUuQmluYXJ5UGFyc2VyIi8+DQorCQkJCTwvZXh0ZW5zaW9ucz4NCisJCQk8L3N0b3JhZ2VNb2R1bGU+DQorCQkJPHN0b3JhZ2VNb2R1bGUgbW9kdWxlSWQ9Im9yZy5lY2xpcHNlLmNkdC5jb3JlLmV4dGVybmFsU2V0dGluZ3MiLz4NCisJCQk8c3RvcmFnZU1vZHVsZSBtb2R1bGVJZD0ib3JnLmVjbGlwc2UuY2R0LmNvcmUucGF0aGVudHJ5Ij4NCisJCQkJPHBhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9IiIvPg0KKwkJCQk8cGF0aGVudHJ5IGtpbmQ9Im91dCIgcGF0aD0iIi8+DQorCQkJCTxwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJjb20ud2luZHJpdmVyLmlkZS5jb3JlLldSX0NPTlRBSU5FUiIvPg0KKwkJCQk8cGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0iY29tLndpbmRyaXZlci5pZGUuY29yZS5idWlsZC5tb2RlbC5XUl9VU0VSREVGSU5FRF9DT05UQUlORVIiLz4NCisJCQk8L3N0b3JhZ2VNb2R1bGU+DQorCQkJPHN0b3JhZ2VNb2R1bGUgbW9kdWxlSWQ9InNjYW5uZXJDb25maWd1cmF0aW9uIi8+DQorCQkJPHN0b3JhZ2VNb2R1bGUgbW9kdWxlSWQ9InVzZXJkZWZpbmVkQ29udGFpbmVyIj4NCisJCQkJPGluZGV4QWxsRmlsZXMgdmFsdWU9ImZhbHNlIi8+DQorCQkJCTxpbml0aWFsaXplZCB2YWx1ZT0idHJ1ZSIvPg0KKwkJCTwvc3RvcmFnZU1vZHVsZT4NCisJCTwvY2NvbmZpZ3VyYXRpb24+DQorCTwvc3RvcmFnZU1vZHVsZT4NCis8L2Nwcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9Db21tYW5kQmFzZWRSb2JvdFRlbXBsYXRlLy5wcm9qZWN0IGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvdnh3b3Jrcy02LjMvdGFyZ2V0L3NyYy9kZW1vL0NvbW1hbmRCYXNlZFJvYm90VGVtcGxhdGUvLnByb2plY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODc3NDI1MQotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9Db21tYW5kQmFzZWRSb2JvdFRlbXBsYXRlLy5wcm9qZWN0CkBAIC0wLDAgKzEsMjAgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQorPHByb2plY3REZXNjcmlwdGlvbj4NCisJPG5hbWU+Q29tbWFuZEJhc2VkUm9ib3RUZW1wbGF0ZTwvbmFtZT4NCisJPGNvbW1lbnQ+PC9jb21tZW50Pg0KKwk8cHJvamVjdHM+DQorCTwvcHJvamVjdHM+DQorCTxidWlsZFNwZWM+DQorCQk8YnVpbGRDb21tYW5kPg0KKwkJCTxuYW1lPmNvbS53aW5kcml2ZXIuaWRlLmNvcmUud3JidWlsZGVyPC9uYW1lPg0KKwkJCTxhcmd1bWVudHM+DQorCQkJPC9hcmd1bWVudHM+DQorCQk8L2J1aWxkQ29tbWFuZD4NCisJPC9idWlsZFNwZWM+DQorCTxuYXR1cmVzPg0KKwkJPG5hdHVyZT5jb20ud2luZHJpdmVyLmlkZS5jb3JlLndybmF0dXJlPC9uYXR1cmU+DQorCQk8bmF0dXJlPmNvbS53aW5kcml2ZXIuaWRlLmNvcmUud3Jjb3JlbmF0dXJlPC9uYXR1cmU+DQorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmNkdC5jb3JlLmNuYXR1cmU8L25hdHVyZT4NCisJCTxuYXR1cmU+b3JnLmVjbGlwc2UuY2R0LmNvcmUuY2NuYXR1cmU8L25hdHVyZT4NCisJPC9uYXR1cmVzPg0KKzwvcHJvamVjdERlc2NyaXB0aW9uPg0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9Db21tYW5kQmFzZWRSb2JvdFRlbXBsYXRlLy53cm1ha2VmaWxlIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvdnh3b3Jrcy02LjMvdGFyZ2V0L3NyYy9kZW1vL0NvbW1hbmRCYXNlZFJvYm90VGVtcGxhdGUvLndybWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTFkZDdmOAotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9Db21tYW5kQmFzZWRSb2JvdFRlbXBsYXRlLy53cm1ha2VmaWxlCkBAIC0wLDAgKzEsNDggQEAKKyMgVGhlIGZpbGUgIi53cm1ha2VmaWxlIiBpcyB0aGUgdGVtcGxhdGUgdXNlZCBieSB0aGUgV2luZCBSaXZlciBXb3JrYmVuY2ggdG8NCisjIGdlbmVyYXRlIHRoZSBtYWtlZmlsZXMgb2YgdGhpcyBwcm9qZWN0LiBBZGQgdXNlci1zcGVjaWZpYyBidWlsZCB0YXJnZXRzIGFuZA0KKyMgbWFrZSBydWxlcyBvbmx5KCEpIGluIHRoaXMgcHJvamVjdCdzICIud3JtYWtlZmlsZSIgZmlsZS4gVGhlc2Ugd2lsbCB0aGVuIGJlDQorIyBhdXRvbWF0aWNhbGx5IGR1bXBlZCBpbnRvIHRoZSBtYWtlZmlsZXMuDQorDQorV0lORF9IT01FIDo9ICQoc3Vic3QgXCwvLCQoV0lORF9IT01FKSkNCitXSU5EX0JBU0UgOj0gJChzdWJzdCBcLC8sJChXSU5EX0JBU0UpKQ0KK1dJTkRfVVNSIDo9ICQoc3Vic3QgXCwvLCQoV0lORF9VU1IpKQ0KKw0KK2FsbCA6IHByZV9idWlsZCBtYWluX2FsbCBwb3N0X2J1aWxkDQorDQorX2NsZWFuIDo6DQorCUBlY2hvICJtYWtlOiByZW1vdmluZyB0YXJnZXRzIGFuZCBvYmplY3RzIG9mIGBwd2RgIg0KKw0KKyVJREVfR0VORVJBVEVEJQ0KKw0KKy1pbmNsdWRlICQoUFJKX1JPT1RfRElSKS8qLm1ha2VmaWxlDQorDQorLWluY2x1ZGUgKi5tYWtlZmlsZQ0KKw0KK21haW5fYWxsIDogZXh0ZXJuYWxfYnVpbGQgJChQUk9KRUNUX1RBUkdFVFMpDQorCUBlY2hvICJtYWtlOiBidWlsdCB0YXJnZXRzIG9mIGBwd2RgIg0KKw0KKyMgZW50cnkgcG9pbnQgZm9yIGV4dGVuZGluZyB0aGUgYnVpbGQNCitleHRlcm5hbF9idWlsZCA6Og0KKwlAZWNobyAiIg0KKw0KKyMgbWFpbiBlbnRyeSBwb2ludCBmb3IgcHJlIHByb2Nlc3NpbmcgcHJpb3IgdG8gdGhlIGJ1aWxkDQorcHJlX2J1aWxkIDo6ICQoUFJFX0JVSUxEX1NURVApIGdlbmVyYXRlX3NvdXJjZXMNCisJQGVjaG8gIiINCisNCisjIGVudHJ5IHBvaW50IGZvciBnZW5lcmF0aW5nIHNvdXJjZXMgcHJpb3IgdG8gdGhlIGJ1aWxkDQorZ2VuZXJhdGVfc291cmNlcyA6Og0KKwlAZWNobyAiIg0KKw0KKyMgbWFpbiBlbnRyeSBwb2ludCBmb3IgcG9zdCBwcm9jZXNzaW5nIGFmdGVyIHRoZSBidWlsZA0KK3Bvc3RfYnVpbGQgOjogJChQT1NUX0JVSUxEX1NURVApIGRlcGxveV9vdXRwdXQNCisJQGVjaG8gIiINCisNCisjIGVudHJ5IHBvaW50IGZvciBkZXBsb3lpbmcgb3V0cHV0IGFmdGVyIHRoZSBidWlsZA0KK2RlcGxveV9vdXRwdXQgOjoNCisJQGVjaG8gIiINCisNCitjbGVhbiA6OiBleHRlcm5hbF9jbGVhbiAkKENMRUFOX1NURVApIF9jbGVhbg0KKw0KKyMgZW50cnkgcG9pbnQgZm9yIGV4dGVuZGluZyB0aGUgYnVpbGQgY2xlYW4NCitleHRlcm5hbF9jbGVhbiA6Og0KKwlAZWNobyAiIg0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9Db21tYW5kQmFzZWRSb2JvdFRlbXBsYXRlLy53cnByb2plY3QgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vQ29tbWFuZEJhc2VkUm9ib3RUZW1wbGF0ZS8ud3Jwcm9qZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliNDNiOTAKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vQ29tbWFuZEJhc2VkUm9ib3RUZW1wbGF0ZS8ud3Jwcm9qZWN0CkBAIC0wLDAgKzEsMjU4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ibm8iPz4NCis8d3J4bWw+DQorICAgIDxwcm9wZXJ0aWVzIHBsYXRmb3JtPSJWeFdvcmtzIiBwbGF0Zm9ybV9uYW1lPSJ2eHdvcmtzLTYuMyIgcm9vdD0iMSIgdHlwZT0iRG93bmxvYWRhYmxlS2VybmVsTW9kdWxlUHJvamVjdCIvPg0KKyAgICA8YXR0cmlidXRlcz4NCisgICAgICAgIDxtYXBBdHRyaWJ1dGU+DQorICAgICAgICAgICAgPGxpc3RBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98R2xvYmFsTWFjcm9zIj4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iUFJPSkVDVF9UWVBFIi8+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9IkRFRklORVMiLz4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iRVhQQU5EX0RCRyIvPg0KKyAgICAgICAgICAgIDwvbGlzdEF0dHJpYnV0ZT4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfEdsb2JhbE1hY3JvfERFRklORVMiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfEdsb2JhbE1hY3JvfEVYUEFORF9EQkciIHZhbHVlPSIwIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xHbG9iYWxNYWNyb3xQUk9KRUNUX1RZUEUiIHZhbHVlPSJES00iLz4NCisgICAgICAgICAgICA8bGlzdEF0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xJbmNsfFBQQzMyZGlhYiI+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9Ii1JJChXSU5EX0JBU0UpL3RhcmdldC9oL1dQSUxpYiIvPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSItSSQoV0lORF9CQVNFKS90YXJnZXQvaCIvPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSItSSQoV0lORF9CQVNFKS90YXJnZXQvaC93cm4vY29yZWlwIi8+DQorICAgICAgICAgICAgPC9saXN0QXR0cmlidXRlPg0KKyAgICAgICAgICAgIDxsaXN0QXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfEluY2x8UFBDMzJnbnUiPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSItSSQoV0lORF9CQVNFKS90YXJnZXQvaCIvPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSItSSQoV0lORF9CQVNFKS90YXJnZXQvaC93cm4vY29yZWlwIi8+DQorICAgICAgICAgICAgPC9saXN0QXR0cmlidXRlPg0KKyAgICAgICAgICAgIDxsaXN0QXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfEluY2x8UFBDNjAzZGlhYiI+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9Ii1JJChXSU5EX0JBU0UpL3RhcmdldC9oIi8+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9Ii1JJChXSU5EX0JBU0UpL3RhcmdldC9oL3dybi9jb3JlaXAiLz4NCisgICAgICAgICAgICA8L2xpc3RBdHRyaWJ1dGU+DQorICAgICAgICAgICAgPGxpc3RBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98SW5jbHxQUEM2MDNnbnUiPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSItSSQoV0lORF9CQVNFKS90YXJnZXQvaCIvPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSItSSQoV0lORF9CQVNFKS90YXJnZXQvaC9XUElMaWIiLz4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2gvd3JuL2NvcmVpcCIvPg0KKyAgICAgICAgICAgIDwvbGlzdEF0dHJpYnV0ZT4NCisgICAgICAgICAgICA8bGlzdEF0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xMaWJzfFBQQzMyZGlhYiI+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9IiQoV0lORF9CQVNFKS90YXJnZXQvbGliL1dQSUxpYi5hIi8+DQorICAgICAgICAgICAgPC9saXN0QXR0cmlidXRlPg0KKyAgICAgICAgICAgIDxsaXN0QXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfExpYnN8UFBDNjAzZ251Ij4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iJChXSU5EX0JBU0UpL3RhcmdldC9saWIvV1BJTGliLmEiLz4NCisgICAgICAgICAgICA8L2xpc3RBdHRyaWJ1dGU+DQorICAgICAgICAgICAgPGxpc3RBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm9zIj4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iVlhfQ1BVX0ZBTUlMWSIvPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSJDUFUiLz4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iVE9PTF9GQU1JTFkiLz4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iVE9PTCIvPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSJUT09MX1BBVEgiLz4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iQ0NfQVJDSF9TUEVDIi8+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9IkxJQlBBVEgiLz4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iTElCUyIvPg0KKyAgICAgICAgICAgIDwvbGlzdEF0dHJpYnV0ZT4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfENDX0FSQ0hfU1BFQ3x2YWx1ZXxQUEMzMmRpYWIiIHZhbHVlPSItdFBQQ0ZIOnZ4d29ya3M2MyAtWHN0bXctc2xvdyAtRFBQQzMyX2ZwNjB4Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xDQ19BUkNIX1NQRUN8dmFsdWV8UFBDMzJnbnUiIHZhbHVlPSItbWhhcmQtZmxvYXQgLW1zdHJpY3QtYWxpZ24gLW1uby1pbXBsaWNpdC1mcCAtRFBQQzMyX2ZwNjB4Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xDQ19BUkNIX1NQRUN8dmFsdWV8UFBDNjAzZGlhYiIgdmFsdWU9Ii10UFBDNjAzRkg6dnh3b3JrczYzIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xDQ19BUkNIX1NQRUN8dmFsdWV8UFBDNjAzZ251IiB2YWx1ZT0iLW1jcHU9NjAzIC1tc3RyaWN0LWFsaWduIC1tbm8taW1wbGljaXQtZnAgLW1sb25nY2FsbCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98Q1BVfHZhbHVlfFBQQzMyZGlhYiIgdmFsdWU9IlBQQzMyIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xDUFV8dmFsdWV8UFBDMzJnbnUiIHZhbHVlPSJQUEMzMiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98Q1BVfHZhbHVlfFBQQzYwM2RpYWIiIHZhbHVlPSJQUEM2MDMiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfENQVXx2YWx1ZXxQUEM2MDNnbnUiIHZhbHVlPSJQUEM2MDMiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfExJQlBBVEh8dmFsdWV8UFBDMzJkaWFiIiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xMSUJQQVRIfHZhbHVlfFBQQzMyZ251IiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xMSUJQQVRIfHZhbHVlfFBQQzYwM2RpYWIiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfExJQlBBVEh8dmFsdWV8UFBDNjAzZ251IiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xMSUJTfHZhbHVlfFBQQzMyZGlhYiIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98TElCU3x2YWx1ZXxQUEMzMmdudSIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98TElCU3x2YWx1ZXxQUEM2MDNkaWFiIiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xMSUJTfHZhbHVlfFBQQzYwM2dudSIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98VE9PTF9GQU1JTFl8dmFsdWV8UFBDMzJkaWFiIiB2YWx1ZT0iZGlhYiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98VE9PTF9GQU1JTFl8dmFsdWV8UFBDMzJnbnUiIHZhbHVlPSJnbnUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfFRPT0xfRkFNSUxZfHZhbHVlfFBQQzYwM2RpYWIiIHZhbHVlPSJkaWFiIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xUT09MX0ZBTUlMWXx2YWx1ZXxQUEM2MDNnbnUiIHZhbHVlPSJnbnUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfFRPT0xfUEFUSHx2YWx1ZXxQUEMzMmRpYWIiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfFRPT0xfUEFUSHx2YWx1ZXxQUEMzMmdudSIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98VE9PTF9QQVRIfHZhbHVlfFBQQzYwM2RpYWIiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfFRPT0xfUEFUSHx2YWx1ZXxQUEM2MDNnbnUiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfFRPT0x8dmFsdWV8UFBDMzJkaWFiIiB2YWx1ZT0iZGlhYiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98VE9PTHx2YWx1ZXxQUEMzMmdudSIgdmFsdWU9ImdudSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98VE9PTHx2YWx1ZXxQUEM2MDNkaWFiIiB2YWx1ZT0iZGlhYiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98VE9PTHx2YWx1ZXxQUEM2MDNnbnUiIHZhbHVlPSJnbnUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfFZYX0NQVV9GQU1JTFl8dmFsdWV8UFBDMzJkaWFiIiB2YWx1ZT0icHBjIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xWWF9DUFVfRkFNSUxZfHZhbHVlfFBQQzMyZ251IiB2YWx1ZT0icHBjIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xWWF9DUFVfRkFNSUxZfHZhbHVlfFBQQzYwM2RpYWIiIHZhbHVlPSJwcGMiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfFZYX0NQVV9GQU1JTFl8dmFsdWV8UFBDNjAzZ251IiB2YWx1ZT0icHBjIi8+DQorICAgICAgICAgICAgPGxpc3RBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHMiPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSJDLUNvbXBpbGVyIi8+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9IkMrKy1Db21waWxlciIvPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSJMaW5rZXIiLz4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iUGFydGlhbCBJbWFnZSBMaW5rZXIiLz4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iTGlicmFyaWFuIi8+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9IkFzc2VtYmxlciIvPg0KKyAgICAgICAgICAgIDwvbGlzdEF0dHJpYnV0ZT4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfGNtZHxQUEMzMmRpYWIiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7OyVhc3NlbWJsZXJwcmVmaXglICQoVE9PTF9QQVRIKWRjYyAlRGVidWdNb2RlRmxhZ3MlICVUb29sRmxhZ3MlICQoQURERURfQ0ZMQUdTKSAlSW5jbHVkZXMlICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICVPdXRGaWxlJSAtYyAlSW5GaWxlJSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxBc3NlbWJsZXJ8Y21kfFBQQzMyZ251IiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OzslYXNzZW1ibGVycHJlZml4JSAkKFRPT0xfUEFUSCljY3BwYyAlRGVidWdNb2RlRmxhZ3MlICVUb29sRmxhZ3MlICQoQURERURfQ0ZMQUdTKSAlSW5jbHVkZXMlICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICVPdXRGaWxlJSAtYyAlSW5GaWxlJSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxBc3NlbWJsZXJ8Y21kfFBQQzYwM2RpYWIiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7OyVhc3NlbWJsZXJwcmVmaXglICQoVE9PTF9QQVRIKWRjYyAlRGVidWdNb2RlRmxhZ3MlICVUb29sRmxhZ3MlICQoQURERURfQ0ZMQUdTKSAlSW5jbHVkZXMlICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICVPdXRGaWxlJSAtYyAlSW5GaWxlJSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxBc3NlbWJsZXJ8Y21kfFBQQzYwM2dudSIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWFzc2VtYmxlcnByZWZpeCUgJChUT09MX1BBVEgpY2NwcGMgJURlYnVnTW9kZUZsYWdzJSAlVG9vbEZsYWdzJSAkKEFEREVEX0NGTEFHUykgJUluY2x1ZGVzJSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAlT3V0RmlsZSUgLWMgJUluRmlsZSUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfGRiZ0ZsYWdzfFBQQzMyZGlhYiIgdmFsdWU9Ii1nIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxkYmdGbGFnc3xQUEMzMmdudSIgdmFsdWU9Ii1nIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxkYmdGbGFnc3xQUEM2MDNkaWFiIiB2YWx1ZT0iLWciLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfGRiZ0ZsYWdzfFBQQzYwM2dudSIgdmFsdWU9Ii1nIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxkZXJpdmVkU2lnc3xQUEMzMmRpYWIiIHZhbHVlPSIqLm8iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfGRlcml2ZWRTaWdzfFBQQzMyZ251IiB2YWx1ZT0iKi5vIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxkZXJpdmVkU2lnc3xQUEM2MDNkaWFiIiB2YWx1ZT0iKi5vIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxkZXJpdmVkU2lnc3xQUEM2MDNnbnUiIHZhbHVlPSIqLm8iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfGZsYWdzfFBQQzMyZGlhYiIgdmFsdWU9IiQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWHByZXByb2Nlc3MtYXNzZW1ibHkgLVhjcHAtbm8tc3BhY2UgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxBc3NlbWJsZXJ8ZmxhZ3N8UFBDMzJnbnUiIHZhbHVlPSIkKENDX0FSQ0hfU1BFQykgLWFuc2kgICAteGFzc2VtYmxlci13aXRoLWNwcCAtTUQgLU1QIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxmbGFnc3xQUEM2MDNkaWFiIiB2YWx1ZT0iJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YcHJlcHJvY2Vzcy1hc3NlbWJseSAtWGNwcC1uby1zcGFjZSAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxmbGFnc3xQUEM2MDNnbnUiIHZhbHVlPSIkKENDX0FSQ0hfU1BFQykgLWFuc2kgICAteGFzc2VtYmxlci13aXRoLWNwcCAtTUQgLU1QIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxub25EYmdGbGFnc3xQUEMzMmRpYWIiIHZhbHVlPSItWE8gLVhzaXplLW9wdCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxBc3NlbWJsZXJ8bm9uRGJnRmxhZ3N8UFBDMzJnbnUiIHZhbHVlPSItTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxub25EYmdGbGFnc3xQUEM2MDNkaWFiIiB2YWx1ZT0iLVhPIC1Yc2l6ZS1vcHQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfG5vbkRiZ0ZsYWdzfFBQQzYwM2dudSIgdmFsdWU9Ii1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4iLz4NCisgICAgICAgICAgICA8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxvYmplY3QiIHZhbHVlPSJ0cnVlIi8+DQorICAgICAgICAgICAgPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxBc3NlbWJsZXJ8cGFzc0FibGUiIHZhbHVlPSJmYWxzZSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxBc3NlbWJsZXJ8c2lncyIgdmFsdWU9IioucyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8Y21kfFBQQzMyZGlhYiIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWNwcGNvbXBpbGVycHJlZml4JSAkKFRPT0xfUEFUSClkY2MgJURlYnVnTW9kZUZsYWdzJSAlVG9vbEZsYWdzJSAkKEFEREVEX0MrK0ZMQUdTKSAlSW5jbHVkZXMlICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICVPdXRGaWxlJSAtYyAlSW5GaWxlJSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8Y21kfFBQQzMyZ251IiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OzslY3BwY29tcGlsZXJwcmVmaXglICQoVE9PTF9QQVRIKWNjcHBjICVEZWJ1Z01vZGVGbGFncyUgJVRvb2xGbGFncyUgJChBRERFRF9DKytGTEFHUykgJUluY2x1ZGVzJSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAlT3V0RmlsZSUgLWMgJUluRmlsZSUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfGNtZHxQUEM2MDNkaWFiIiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OzslY3BwY29tcGlsZXJwcmVmaXglICQoVE9PTF9QQVRIKWRjYyAlRGVidWdNb2RlRmxhZ3MlICVUb29sRmxhZ3MlICQoQURERURfQysrRkxBR1MpICVJbmNsdWRlcyUgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gJU91dEZpbGUlIC1jICVJbkZpbGUlIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxjbWR8UFBDNjAzZ251IiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OzslY3BwY29tcGlsZXJwcmVmaXglICQoVE9PTF9QQVRIKWNjcHBjICVEZWJ1Z01vZGVGbGFncyUgJVRvb2xGbGFncyUgJChBRERFRF9DKytGTEFHUykgJUluY2x1ZGVzJSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAlT3V0RmlsZSUgLWMgJUluRmlsZSUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfGRiZ0ZsYWdzfFBQQzMyZGlhYiIgdmFsdWU9Ii1nIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxkYmdGbGFnc3xQUEMzMmdudSIgdmFsdWU9Ii1nIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxkYmdGbGFnc3xQUEM2MDNkaWFiIiB2YWx1ZT0iLWciLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfGRiZ0ZsYWdzfFBQQzYwM2dudSIgdmFsdWU9Ii1nIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxkZXJpdmVkU2lnc3xQUEMzMmRpYWIiIHZhbHVlPSIqLm8iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfGRlcml2ZWRTaWdzfFBQQzMyZ251IiB2YWx1ZT0iKi5vIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxkZXJpdmVkU2lnc3xQUEM2MDNkaWFiIiB2YWx1ZT0iKi5vIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxkZXJpdmVkU2lnc3xQUEM2MDNnbnUiIHZhbHVlPSIqLm8iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfGZsYWdzfFBQQzMyZGlhYiIgdmFsdWU9IiQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxmbGFnc3xQUEMzMmdudSIgdmFsdWU9IiQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8ZmxhZ3N8UFBDNjAzZGlhYiIgdmFsdWU9IiQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxmbGFnc3xQUEM2MDNnbnUiIHZhbHVlPSIkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgLW1sb25nY2FsbCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8bm9uRGJnRmxhZ3N8UFBDMzJkaWFiIiB2YWx1ZT0iLVhPIC1Yc2l6ZS1vcHQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfG5vbkRiZ0ZsYWdzfFBQQzMyZ251IiB2YWx1ZT0iLU8yIC1mc3RyZW5ndGgtcmVkdWNlIC1mbm8tYnVpbHRpbiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8bm9uRGJnRmxhZ3N8UFBDNjAzZGlhYiIgdmFsdWU9Ii1YTyAtWHNpemUtb3B0Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxub25EYmdGbGFnc3xQUEM2MDNnbnUiIHZhbHVlPSItTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluIi8+DQorICAgICAgICAgICAgPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8b2JqZWN0IiB2YWx1ZT0idHJ1ZSIvPg0KKyAgICAgICAgICAgIDxib29sZWFuQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfHBhc3NBYmxlIiB2YWx1ZT0iZmFsc2UiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfHNpZ3MiIHZhbHVlPSIqLmNwcDsqLkM7Ki5jeHg7Ki5jYyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfGNtZHxQUEMzMmRpYWIiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7OyVjY29tcGlsZXJwcmVmaXglICQoVE9PTF9QQVRIKWRjYyAlRGVidWdNb2RlRmxhZ3MlICVUb29sRmxhZ3MlICQoQURERURfQ0ZMQUdTKSAlSW5jbHVkZXMlICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICVPdXRGaWxlJSAtYyAlSW5GaWxlJSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfGNtZHxQUEMzMmdudSIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWNjb21waWxlcnByZWZpeCUgJChUT09MX1BBVEgpY2NwcGMgJURlYnVnTW9kZUZsYWdzJSAlVG9vbEZsYWdzJSAkKEFEREVEX0NGTEFHUykgJUluY2x1ZGVzJSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAlT3V0RmlsZSUgLWMgJUluRmlsZSUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxjbWR8UFBDNjAzZGlhYiIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWNjb21waWxlcnByZWZpeCUgJChUT09MX1BBVEgpZGNjICVEZWJ1Z01vZGVGbGFncyUgJVRvb2xGbGFncyUgJChBRERFRF9DRkxBR1MpICVJbmNsdWRlcyUgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gJU91dEZpbGUlIC1jICVJbkZpbGUlIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8Y21kfFBQQzYwM2dudSIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWNjb21waWxlcnByZWZpeCUgJChUT09MX1BBVEgpY2NwcGMgJURlYnVnTW9kZUZsYWdzJSAlVG9vbEZsYWdzJSAkKEFEREVEX0NGTEFHUykgJUluY2x1ZGVzJSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAlT3V0RmlsZSUgLWMgJUluRmlsZSUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxkYmdGbGFnc3xQUEMzMmRpYWIiIHZhbHVlPSItZyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfGRiZ0ZsYWdzfFBQQzMyZ251IiB2YWx1ZT0iLWciLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxkYmdGbGFnc3xQUEM2MDNkaWFiIiB2YWx1ZT0iLWciLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxkYmdGbGFnc3xQUEM2MDNnbnUiIHZhbHVlPSItZyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfGRlcml2ZWRTaWdzfFBQQzMyZGlhYiIgdmFsdWU9IioubyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfGRlcml2ZWRTaWdzfFBQQzMyZ251IiB2YWx1ZT0iKi5vIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8ZGVyaXZlZFNpZ3N8UFBDNjAzZGlhYiIgdmFsdWU9IioubyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfGRlcml2ZWRTaWdzfFBQQzYwM2dudSIgdmFsdWU9IioubyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfGZsYWdzfFBQQzMyZGlhYiIgdmFsdWU9IiQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8ZmxhZ3N8UFBDMzJnbnUiIHZhbHVlPSIkKENDX0FSQ0hfU1BFQykgLWFuc2kgIC1XYWxsICAtTUQgLU1QIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8ZmxhZ3N8UFBDNjAzZGlhYiIgdmFsdWU9IiQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8ZmxhZ3N8UFBDNjAzZ251IiB2YWx1ZT0iJChDQ19BUkNIX1NQRUMpIC1hbnNpICAtV2FsbCAgLU1EIC1NUCAtbWxvbmdjYWxsIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8bm9uRGJnRmxhZ3N8UFBDMzJkaWFiIiB2YWx1ZT0iLVhPIC1Yc2l6ZS1vcHQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxub25EYmdGbGFnc3xQUEMzMmdudSIgdmFsdWU9Ii1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxub25EYmdGbGFnc3xQUEM2MDNkaWFiIiB2YWx1ZT0iLVhPIC1Yc2l6ZS1vcHQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxub25EYmdGbGFnc3xQUEM2MDNnbnUiIHZhbHVlPSItTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluIi8+DQorICAgICAgICAgICAgPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfG9iamVjdCIgdmFsdWU9InRydWUiLz4NCisgICAgICAgICAgICA8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8cGFzc0FibGUiIHZhbHVlPSJmYWxzZSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfHNpZ3MiIHZhbHVlPSIqLmMiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufGNtZHxQUEMzMmRpYWIiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7OyVhcmNoaXZlcnByZWZpeCUgJChUT09MX1BBVEgpZGFyICVUb29sRmxhZ3MlICVPdXRGaWxlJSAlT2JqZWN0cyUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufGNtZHxQUEMzMmdudSIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWFyY2hpdmVycHJlZml4JSAkKFRPT0xfUEFUSClhcnBwYyAlVG9vbEZsYWdzJSAlT3V0RmlsZSUgJU9iamVjdHMlIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxjbWR8UFBDNjAzZGlhYiIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWFyY2hpdmVycHJlZml4JSAkKFRPT0xfUEFUSClkYXIgJVRvb2xGbGFncyUgJU91dEZpbGUlICVPYmplY3RzJSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58Y21kfFBQQzYwM2dudSIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWFyY2hpdmVycHJlZml4JSAkKFRPT0xfUEFUSClhcnBwYyAlVG9vbEZsYWdzJSAlT3V0RmlsZSUgJU9iamVjdHMlIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxkYmdGbGFnc3xQUEMzMmRpYWIiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufGRiZ0ZsYWdzfFBQQzMyZ251IiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxkYmdGbGFnc3xQUEM2MDNkaWFiIiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxkYmdGbGFnc3xQUEM2MDNnbnUiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufGRlcml2ZWRTaWdzfFBQQzMyZGlhYiIgdmFsdWU9IiouYSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58ZGVyaXZlZFNpZ3N8UFBDMzJnbnUiIHZhbHVlPSIqLmEiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufGRlcml2ZWRTaWdzfFBQQzYwM2RpYWIiIHZhbHVlPSIqLmEiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufGRlcml2ZWRTaWdzfFBQQzYwM2dudSIgdmFsdWU9IiouYSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58ZmxhZ3N8UFBDMzJkaWFiIiB2YWx1ZT0iY3J1cyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58ZmxhZ3N8UFBDMzJnbnUiIHZhbHVlPSJjcnVzIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxmbGFnc3xQUEM2MDNkaWFiIiB2YWx1ZT0iY3J1cyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58ZmxhZ3N8UFBDNjAzZ251IiB2YWx1ZT0iY3J1cyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58bm9uRGJnRmxhZ3N8UFBDMzJkaWFiIiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxub25EYmdGbGFnc3xQUEMzMmdudSIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58bm9uRGJnRmxhZ3N8UFBDNjAzZGlhYiIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58bm9uRGJnRmxhZ3N8UFBDNjAzZ251IiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58b2JqZWN0IiB2YWx1ZT0iZmFsc2UiLz4NCisgICAgICAgICAgICA8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxwYXNzQWJsZSIgdmFsdWU9InRydWUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufHNpZ3MiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfGNtZHxQUEMzMmRpYWIiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7O3JtIC1mICVPdXRGaWxlJTtkZHVtcCAtTmcgJU9iamVjdHMlICVMaWJyYXJpZXMlIHwgdGNsc2ggJChXSU5EX0JBU0UpL2hvc3QvcmVzb3VyY2UvaHV0aWxzL3RjbC9tdW5jaC50Y2wgLWMgcHBjICZndDsgJChPQkpfRElSKS9jdGR0LmM7JWNjb21waWxlcnByZWZpeCUgJChUT09MX1BBVEgpZGNjICVEZWJ1Z01vZGVGbGFncyUgJChDQ19BUkNIX1NQRUMpIC1YZG9sbGFyLWluLWlkZW50IC1YZm9yY2UtZGVjbGFyYXRpb25zICQoQURERURfQ0ZMQUdTKSAlSW5jbHVkZXMlICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpICAtbyAkKE9CSl9ESVIpL2N0ZHQubyAtYyAkKE9CSl9ESVIpL2N0ZHQuYzslbGlua2VycHJlZml4JSAkKFRPT0xfUEFUSClkbGQgLXRQUENGSDp2eHdvcmtzNjMgLVggLXI1ICVUb29sRmxhZ3MlIC1vICVPdXRGaWxlJSAkKE9CSl9ESVIpL2N0ZHQubyAlT2JqZWN0cyUgJUxpYnJhcmllcyUgJChMSUJQQVRIKSAkKExJQlMpICAkKEFEREVEX0xJQlBBVEgpICQoQURERURfTElCUykgJmFtcDsmYW1wOyBpZiBbICZxdW90OyQoRVhQQU5EX0RCRykmcXVvdDsgPSAmcXVvdDsxJnF1b3Q7IF07IHRoZW4gcGxpbmsgJnF1b3Q7JEAmcXVvdDs7ZmkiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfGNtZHxQUEMzMmdudSIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7cm0gLWYgJU91dEZpbGUlO25tcHBjICVPYmplY3RzJSAlTGlicmFyaWVzJSB8IHRjbHNoICQoV0lORF9CQVNFKS9ob3N0L3Jlc291cmNlL2h1dGlscy90Y2wvbXVuY2gudGNsIC1jIHBwYyAmZ3Q7ICQoT0JKX0RJUikvY3RkdC5jOyVjY29tcGlsZXJwcmVmaXglICQoVE9PTF9QQVRIKWNjcHBjICVEZWJ1Z01vZGVGbGFncyUgJChDQ19BUkNIX1NQRUMpIC1mZG9sbGFycy1pbi1pZGVudGlmaWVycyAtV2FsbCAkKEFEREVEX0NGTEFHUykgJUluY2x1ZGVzJSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAgLW8gJChPQkpfRElSKS9jdGR0Lm8gLWMgJChPQkpfRElSKS9jdGR0LmM7JWxpbmtlcnByZWZpeCUgJChUT09MX1BBVEgpY2NwcGMgLXIgLW5vc3RkbGliIC1XbCwtWCAlVG9vbEZsYWdzJSAtbyAlT3V0RmlsZSUgJChPQkpfRElSKS9jdGR0Lm8gJU9iamVjdHMlICVMaWJyYXJpZXMlICQoTElCUEFUSCkgJChMSUJTKSAgJChBRERFRF9MSUJQQVRIKSAkKEFEREVEX0xJQlMpICZhbXA7JmFtcDsgaWYgWyAmcXVvdDskKEVYUEFORF9EQkcpJnF1b3Q7ID0gJnF1b3Q7MSZxdW90OyBdOyB0aGVuIHBsaW5rICZxdW90OyRAJnF1b3Q7O2ZpIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxjbWR8UFBDNjAzZGlhYiIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7cm0gLWYgJU91dEZpbGUlO2RkdW1wIC1OZyAlT2JqZWN0cyUgJUxpYnJhcmllcyUgfCB0Y2xzaCAkKFdJTkRfQkFTRSkvaG9zdC9yZXNvdXJjZS9odXRpbHMvdGNsL211bmNoLnRjbCAtYyBwcGMgJmd0OyAkKE9CSl9ESVIpL2N0ZHQuYzslY2NvbXBpbGVycHJlZml4JSAkKFRPT0xfUEFUSClkY2MgJURlYnVnTW9kZUZsYWdzJSAkKENDX0FSQ0hfU1BFQykgLVhkb2xsYXItaW4taWRlbnQgLVhmb3JjZS1kZWNsYXJhdGlvbnMgJChBRERFRF9DRkxBR1MpICVJbmNsdWRlcyUgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgIC1vICQoT0JKX0RJUikvY3RkdC5vIC1jICQoT0JKX0RJUikvY3RkdC5jOyVsaW5rZXJwcmVmaXglICQoVE9PTF9QQVRIKWRsZCAtdFBQQzYwM0ZIOnZ4d29ya3M2MyAtWCAtcjUgJVRvb2xGbGFncyUgLW8gJU91dEZpbGUlICQoT0JKX0RJUikvY3RkdC5vICVPYmplY3RzJSAlTGlicmFyaWVzJSAkKExJQlBBVEgpICQoTElCUykgICQoQURERURfTElCUEFUSCkgJChBRERFRF9MSUJTKSAmYW1wOyZhbXA7IGlmIFsgJnF1b3Q7JChFWFBBTkRfREJHKSZxdW90OyA9ICZxdW90OzEmcXVvdDsgXTsgdGhlbiBwbGluayAmcXVvdDskQCZxdW90OztmaSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8Y21kfFBQQzYwM2dudSIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7cm0gLWYgJU91dEZpbGUlO25tcHBjICVPYmplY3RzJSAlTGlicmFyaWVzJSB8IHRjbHNoICQoV0lORF9CQVNFKS9ob3N0L3Jlc291cmNlL2h1dGlscy90Y2wvbXVuY2gudGNsIC1jIHBwYyAmZ3Q7ICQoT0JKX0RJUikvY3RkdC5jOyVjY29tcGlsZXJwcmVmaXglICQoVE9PTF9QQVRIKWNjcHBjICVEZWJ1Z01vZGVGbGFncyUgJChDQ19BUkNIX1NQRUMpIC1mZG9sbGFycy1pbi1pZGVudGlmaWVycyAtV2FsbCAkKEFEREVEX0NGTEFHUykgJUluY2x1ZGVzJSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAgLW8gJChPQkpfRElSKS9jdGR0Lm8gLWMgJChPQkpfRElSKS9jdGR0LmM7JWxpbmtlcnByZWZpeCUgJChUT09MX1BBVEgpY2NwcGMgLXIgLW5vc3RkbGliIC1XbCwtWCAlVG9vbEZsYWdzJSAtbyAlT3V0RmlsZSUgJChPQkpfRElSKS9jdGR0Lm8gJU9iamVjdHMlICVMaWJyYXJpZXMlICQoTElCUEFUSCkgJChMSUJTKSAgJChBRERFRF9MSUJQQVRIKSAkKEFEREVEX0xJQlMpICZhbXA7JmFtcDsgaWYgWyAmcXVvdDskKEVYUEFORF9EQkcpJnF1b3Q7ID0gJnF1b3Q7MSZxdW90OyBdOyB0aGVuIHBsaW5rICZxdW90OyRAJnF1b3Q7O2ZpIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxkYmdGbGFnc3xQUEMzMmRpYWIiIHZhbHVlPSItZyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8ZGJnRmxhZ3N8UFBDMzJnbnUiIHZhbHVlPSItZyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8ZGJnRmxhZ3N8UFBDNjAzZGlhYiIgdmFsdWU9Ii1nIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxkYmdGbGFnc3xQUEM2MDNnbnUiIHZhbHVlPSItZyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8ZGVyaXZlZFNpZ3N8UFBDMzJkaWFiIiB2YWx1ZT0iKi5vdXQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfGRlcml2ZWRTaWdzfFBQQzMyZ251IiB2YWx1ZT0iKi5vdXQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfGRlcml2ZWRTaWdzfFBQQzYwM2RpYWIiIHZhbHVlPSIqLm91dCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8ZGVyaXZlZFNpZ3N8UFBDNjAzZ251IiB2YWx1ZT0iKi5vdXQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfGZsYWdzfFBQQzMyZGlhYiIgdmFsdWU9Ii1yNCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8ZmxhZ3N8UFBDMzJnbnUiIHZhbHVlPSItVCAkKFdJTkRfQkFTRSkvdGFyZ2V0L2gvdG9vbC9nbnUvbGRzY3JpcHRzL2xpbmsuT1VUIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxmbGFnc3xQUEM2MDNkaWFiIiB2YWx1ZT0iLXI0Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxmbGFnc3xQUEM2MDNnbnUiIHZhbHVlPSItVCAkKFdJTkRfQkFTRSkvdGFyZ2V0L2gvdG9vbC9nbnUvbGRzY3JpcHRzL2xpbmsuT1VUIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxub25EYmdGbGFnc3xQUEMzMmRpYWIiIHZhbHVlPSItWE8gLVhzaXplLW9wdCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8bm9uRGJnRmxhZ3N8UFBDMzJnbnUiIHZhbHVlPSItTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxub25EYmdGbGFnc3xQUEM2MDNkaWFiIiB2YWx1ZT0iLVhPIC1Yc2l6ZS1vcHQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfG5vbkRiZ0ZsYWdzfFBQQzYwM2dudSIgdmFsdWU9Ii1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4iLz4NCisgICAgICAgICAgICA8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxvYmplY3QiIHZhbHVlPSJmYWxzZSIvPg0KKyAgICAgICAgICAgIDxib29sZWFuQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfHBhc3NBYmxlIiB2YWx1ZT0iZmFsc2UiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfHNpZ3MiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8Y21kfFBQQzMyZGlhYiIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWxpbmtlcnByZWZpeCUgJChUT09MX1BBVEgpZGxkIC10UFBDRkg6dnh3b3JrczYzIC1YIC1yNSAlVG9vbEZsYWdzJSAtbyAlT3V0RmlsZSUgJU9iamVjdHMlICQoTElCUEFUSCkgJChMSUJTKSAkKEFEREVEX0xJQlBBVEgpICQoQURERURfTElCUykgICZhbXA7JmFtcDsgaWYgWyAmcXVvdDskKEVYUEFORF9EQkcpJnF1b3Q7ID0gJnF1b3Q7MSZxdW90OyBdOyB0aGVuIHBsaW5rICZxdW90OyRAJnF1b3Q7O2ZpIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfGNtZHxQUEMzMmdudSIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWxpbmtlcnByZWZpeCUgJChUT09MX1BBVEgpY2NwcGMgLXIgLW5vc3RkbGliIC1XbCwtWCAlVG9vbEZsYWdzJSAtbyAlT3V0RmlsZSUgJU9iamVjdHMlICQoTElCUEFUSCkgJChMSUJTKSAkKEFEREVEX0xJQlBBVEgpICQoQURERURfTElCUykgICZhbXA7JmFtcDsgaWYgWyAmcXVvdDskKEVYUEFORF9EQkcpJnF1b3Q7ID0gJnF1b3Q7MSZxdW90OyBdOyB0aGVuIHBsaW5rICZxdW90OyRAJnF1b3Q7O2ZpIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfGNtZHxQUEM2MDNkaWFiIiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OzslbGlua2VycHJlZml4JSAkKFRPT0xfUEFUSClkbGQgLXRQUEM2MDNGSDp2eHdvcmtzNjMgLVggLXI1ICVUb29sRmxhZ3MlIC1vICVPdXRGaWxlJSAlT2JqZWN0cyUgJChMSUJQQVRIKSAkKExJQlMpICQoQURERURfTElCUEFUSCkgJChBRERFRF9MSUJTKSAgJmFtcDsmYW1wOyBpZiBbICZxdW90OyQoRVhQQU5EX0RCRykmcXVvdDsgPSAmcXVvdDsxJnF1b3Q7IF07IHRoZW4gcGxpbmsgJnF1b3Q7JEAmcXVvdDs7ZmkiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8Y21kfFBQQzYwM2dudSIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWxpbmtlcnByZWZpeCUgJChUT09MX1BBVEgpY2NwcGMgLXIgLW5vc3RkbGliIC1XbCwtWCAlVG9vbEZsYWdzJSAtbyAlT3V0RmlsZSUgJU9iamVjdHMlICQoTElCUEFUSCkgJChMSUJTKSAkKEFEREVEX0xJQlBBVEgpICQoQURERURfTElCUykgICZhbXA7JmFtcDsgaWYgWyAmcXVvdDskKEVYUEFORF9EQkcpJnF1b3Q7ID0gJnF1b3Q7MSZxdW90OyBdOyB0aGVuIHBsaW5rICZxdW90OyRAJnF1b3Q7O2ZpIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfGRiZ0ZsYWdzfFBQQzMyZGlhYiIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxkYmdGbGFnc3xQUEMzMmdudSIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxkYmdGbGFnc3xQUEM2MDNkaWFiIiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfGRiZ0ZsYWdzfFBQQzYwM2dudSIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxkZXJpdmVkU2lnc3xQUEMzMmRpYWIiIHZhbHVlPSIqLm8iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8ZGVyaXZlZFNpZ3N8UFBDMzJnbnUiIHZhbHVlPSIqLm8iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8ZGVyaXZlZFNpZ3N8UFBDNjAzZGlhYiIgdmFsdWU9IioubyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxkZXJpdmVkU2lnc3xQUEM2MDNnbnUiIHZhbHVlPSIqLm8iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8ZmxhZ3N8UFBDMzJkaWFiIiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfGZsYWdzfFBQQzMyZ251IiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfGZsYWdzfFBQQzYwM2RpYWIiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8ZmxhZ3N8UFBDNjAzZ251IiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfG5vbkRiZ0ZsYWdzfFBQQzMyZGlhYiIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxub25EYmdGbGFnc3xQUEMzMmdudSIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxub25EYmdGbGFnc3xQUEM2MDNkaWFiIiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfG5vbkRiZ0ZsYWdzfFBQQzYwM2dudSIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxib29sZWFuQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8b2JqZWN0IiB2YWx1ZT0iZmFsc2UiLz4NCisgICAgICAgICAgICA8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfHBhc3NBYmxlIiB2YWx1ZT0idHJ1ZSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxzaWdzIiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xjbWQiIHZhbHVlPSIlbWFrZXByZWZpeCUgbWFrZSAtLW5vLXByaW50LWRpcmVjdG9yeSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98ZGVmYXVsdFNwZWMiIHZhbHVlPSJQUEM2MDNnbnUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfHJlZGlyRGlyfFBQQzMyZGlhYiIgdmFsdWU9IlBQQzMyZGlhYiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98cmVkaXJEaXJ8UFBDMzJnbnUiIHZhbHVlPSJQUEMzMmdudSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98cmVkaXJEaXJ8UFBDNjAzZGlhYiIgdmFsdWU9IlBQQzYwM2RpYWIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfHJlZGlyRGlyfFBQQzYwM2dudSIgdmFsdWU9IlBQQzYwM2dudSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98cmVkaXJSb290IiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPGxpc3RBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98c3BlY3MiPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSJQUEMzMmRpYWIiLz4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iUFBDMzJnbnUiLz4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iUFBDNjAzZGlhYiIvPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSJQUEM2MDNnbnUiLz4NCisgICAgICAgICAgICA8L2xpc3RBdHRyaWJ1dGU+DQorICAgICAgICAgICAgPGludEF0dHJpYnV0ZSBrZXk9IkJ1aWxkU3VwcG9ydEVuYWJsZWQiIHZhbHVlPSIxIi8+DQorICAgICAgICAgICAgPGxpc3RBdHRyaWJ1dGUga2V5PSJCdWlsZFN1cHBvcnRGb3JCdWlsZFNwZWNzIj4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iUFBDNjAzZ251Ii8+DQorICAgICAgICAgICAgPC9saXN0QXR0cmlidXRlPg0KKyAgICAgICAgICAgIDxib29sZWFuQXR0cmlidXRlIGtleT0iQnVpbGRUYXJnZXRDZW50cmljIiB2YWx1ZT0idHJ1ZSIvPg0KKyAgICAgICAgPC9tYXBBdHRyaWJ1dGU+DQorICAgIDwvYXR0cmlidXRlcz4NCisgICAgPGJ1aWxkdGFyZ2V0cz4NCisgICAgICAgIDxidWlsZHRhcmdldCBidWlsZHRvb2w9IkxpbmtlciIgbmFtZT0iQ29tbWFuZEJhc2VkUm9ib3RUZW1wbGF0ZSIgcGFzc2VkPSJmYWxzZSIgdGFyZ2V0bmFtZT0iQ29tbWFuZEJhc2VkUm9ib3RUZW1wbGF0ZSI+DQorICAgICAgICAgICAgPGNvbnRlbnRzPg0KKyAgICAgICAgICAgICAgICA8YnVpbGR0YXJnZXRyZWZlcmVuY2UgbmFtZT0iL0NvbW1hbmRCYXNlZFJvYm90VGVtcGxhdGUvQ29tbWFuZEJhc2VkUm9ib3RUZW1wbGF0ZV9wYXJ0aWFsSW1hZ2UiLz4NCisgICAgICAgICAgICA8L2NvbnRlbnRzPg0KKyAgICAgICAgPC9idWlsZHRhcmdldD4NCisgICAgICAgIDxidWlsZHRhcmdldCBidWlsZHRvb2w9IlBhcnRpYWwgSW1hZ2UgTGlua2VyIiBuYW1lPSJDb21tYW5kQmFzZWRSb2JvdFRlbXBsYXRlX3BhcnRpYWxJbWFnZSIgcGFzc2VkPSJ0cnVlIiB0YXJnZXRuYW1lPSJDb21tYW5kQmFzZWRSb2JvdFRlbXBsYXRlX3BhcnRpYWxJbWFnZSI+DQorICAgICAgICAgICAgPGNvbnRlbnRzPg0KKyAgICAgICAgICAgICAgICA8Zm9sZGVyIG5hbWU9Ii9Db21tYW5kQmFzZWRSb2JvdFRlbXBsYXRlIiByZWN1cnNpdmU9InRydWUiLz4NCisgICAgICAgICAgICA8L2NvbnRlbnRzPg0KKyAgICAgICAgPC9idWlsZHRhcmdldD4NCisgICAgPC9idWlsZHRhcmdldHM+DQorPC93cnhtbD4NCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vQ29tbWFuZEJhc2VkUm9ib3RUZW1wbGF0ZS9Db21tYW5kQmFzZS5jcHAgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vQ29tbWFuZEJhc2VkUm9ib3RUZW1wbGF0ZS9Db21tYW5kQmFzZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzBlYjExNwotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9Db21tYW5kQmFzZWRSb2JvdFRlbXBsYXRlL0NvbW1hbmRCYXNlLmNwcApAQCAtMCwwICsxLDIxIEBACisjaW5jbHVkZSAiQ29tbWFuZEJhc2UuaCINCisjaW5jbHVkZSAiU3Vic3lzdGVtcy9FeGFtcGxlU3Vic3lzdGVtLmgiDQorI2luY2x1ZGUgIkNvbW1hbmRzL1NjaGVkdWxlci5oIg0KKw0KK0NvbW1hbmRCYXNlOjpDb21tYW5kQmFzZShjb25zdCBjaGFyICpuYW1lKSA6IENvbW1hbmQobmFtZSkgew0KK30NCisNCitDb21tYW5kQmFzZTo6Q29tbWFuZEJhc2UoKSA6IENvbW1hbmQoKSB7DQorfQ0KKw0KKy8vIEluaXRpYWxpemUgYSBzaW5nbGUgc3RhdGljIGluc3RhbmNlIG9mIGFsbCBvZiB5b3VyIHN1YnN5c3RlbXMgdG8gTlVMTA0KK0V4YW1wbGVTdWJzeXN0ZW0qIENvbW1hbmRCYXNlOjpleGFtcGxlc3Vic3lzdGVtID0gTlVMTDsNCitPSSogQ29tbWFuZEJhc2U6Om9pID0gTlVMTDsNCisNCit2b2lkIENvbW1hbmRCYXNlOjppbml0KCkgew0KKyAgICAvLyBDcmVhdGUgYSBzaW5nbGUgc3RhdGljIGluc3RhbmNlIG9mIGFsbCBvZiB5b3VyIHN1YnN5c3RlbXMuIFRoZSBmb2xsb3dpbmcNCisJLy8gbGluZSBzaG91bGQgYmUgcmVwZWF0ZWQgZm9yIGVhY2ggc3Vic3lzdGVtIGluIHRoZSBwcm9qZWN0Lg0KKwlleGFtcGxlc3Vic3lzdGVtID0gbmV3IEV4YW1wbGVTdWJzeXN0ZW0oKTsNCisJDQorCW9pID0gbmV3IE9JKCk7DQorfQ0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9Db21tYW5kQmFzZWRSb2JvdFRlbXBsYXRlL0NvbW1hbmRCYXNlLmggYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vQ29tbWFuZEJhc2VkUm9ib3RUZW1wbGF0ZS9Db21tYW5kQmFzZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzODJiZGEKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vQ29tbWFuZEJhc2VkUm9ib3RUZW1wbGF0ZS9Db21tYW5kQmFzZS5oCkBAIC0wLDAgKzEsMjQgQEAKKyNpZm5kZWYgQ09NTUFORF9CQVNFX0gNCisjZGVmaW5lIENPTU1BTkRfQkFTRV9IDQorDQorI2luY2x1ZGUgIkNvbW1hbmRzL0NvbW1hbmQuaCINCisjaW5jbHVkZSAiU3Vic3lzdGVtcy9FeGFtcGxlU3Vic3lzdGVtLmgiDQorI2luY2x1ZGUgIk9JLmgiDQorDQorDQorLyoqDQorICogVGhlIGJhc2UgZm9yIGFsbCBjb21tYW5kcy4gQWxsIGF0b21pYyBjb21tYW5kcyBzaG91bGQgc3ViY2xhc3MgQ29tbWFuZEJhc2UuDQorICogQ29tbWFuZEJhc2Ugc3RvcmVzIGNyZWF0ZXMgYW5kIHN0b3JlcyBlYWNoIGNvbnRyb2wgc3lzdGVtLiBUbyBhY2Nlc3MgYQ0KKyAqIHN1YnN5c3RlbSBlbHNld2hlcmUgaW4geW91ciBjb2RlIGluIHlvdXIgY29kZSB1c2UgQ29tbWFuZEJhc2UuZXhhbXBsZXN1YnN5c3RlbQ0KKyAqLw0KK2NsYXNzIENvbW1hbmRCYXNlOiBwdWJsaWMgQ29tbWFuZCB7DQorcHVibGljOg0KKwlDb21tYW5kQmFzZShjb25zdCBjaGFyICpuYW1lKTsNCisJQ29tbWFuZEJhc2UoKTsNCisJc3RhdGljIHZvaWQgaW5pdCgpOw0KKwkvLyBDcmVhdGUgYSBzaW5nbGUgc3RhdGljIGluc3RhbmNlIG9mIGFsbCBvZiB5b3VyIHN1YnN5c3RlbXMNCisJc3RhdGljIEV4YW1wbGVTdWJzeXN0ZW0gKmV4YW1wbGVzdWJzeXN0ZW07DQorCXN0YXRpYyBPSSAqb2k7DQorfTsNCisNCisjZW5kaWYNCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vQ29tbWFuZEJhc2VkUm9ib3RUZW1wbGF0ZS9Db21tYW5kQmFzZWRSb2JvdC5jcHAgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vQ29tbWFuZEJhc2VkUm9ib3RUZW1wbGF0ZS9Db21tYW5kQmFzZWRSb2JvdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWJhYzY3NgotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9Db21tYW5kQmFzZWRSb2JvdFRlbXBsYXRlL0NvbW1hbmRCYXNlZFJvYm90LmNwcApAQCAtMCwwICsxLDQzIEBACisjaW5jbHVkZSAiV1BJTGliLmgiDQorI2luY2x1ZGUgIkNvbW1hbmRzL0NvbW1hbmQuaCINCisjaW5jbHVkZSAiQ29tbWFuZHMvRXhhbXBsZUNvbW1hbmQuaCINCisjaW5jbHVkZSAiQ29tbWFuZEJhc2UuaCINCisNCitjbGFzcyBDb21tYW5kQmFzZWRSb2JvdCA6IHB1YmxpYyBJdGVyYXRpdmVSb2JvdCB7DQorcHJpdmF0ZToNCisJQ29tbWFuZCAqYXV0b25vbW91c0NvbW1hbmQ7DQorCUxpdmVXaW5kb3cgKmx3Ow0KKwkNCisJdmlydHVhbCB2b2lkIFJvYm90SW5pdCgpIHsNCisJCUNvbW1hbmRCYXNlOjppbml0KCk7DQorCQlhdXRvbm9tb3VzQ29tbWFuZCA9IG5ldyBFeGFtcGxlQ29tbWFuZCgpOw0KKwkJbHcgPSBMaXZlV2luZG93OjpHZXRJbnN0YW5jZSgpOw0KKwl9DQorCQ0KKwl2aXJ0dWFsIHZvaWQgQXV0b25vbW91c0luaXQoKSB7DQorCQlhdXRvbm9tb3VzQ29tbWFuZC0+U3RhcnQoKTsNCisJfQ0KKwkNCisJdmlydHVhbCB2b2lkIEF1dG9ub21vdXNQZXJpb2RpYygpIHsNCisJCVNjaGVkdWxlcjo6R2V0SW5zdGFuY2UoKS0+UnVuKCk7DQorCX0NCisJDQorCXZpcnR1YWwgdm9pZCBUZWxlb3BJbml0KCkgew0KKwkJLy8gVGhpcyBtYWtlcyBzdXJlIHRoYXQgdGhlIGF1dG9ub21vdXMgc3RvcHMgcnVubmluZyB3aGVuDQorCQkvLyB0ZWxlb3Agc3RhcnRzIHJ1bm5pbmcuIElmIHlvdSB3YW50IHRoZSBhdXRvbm9tb3VzIHRvIA0KKwkJLy8gY29udGludWUgdW50aWwgaW50ZXJydXB0ZWQgYnkgYW5vdGhlciBjb21tYW5kLCByZW1vdmUNCisJCS8vIHRoaXMgbGluZSBvciBjb21tZW50IGl0IG91dC4NCisJCWF1dG9ub21vdXNDb21tYW5kLT5DYW5jZWwoKTsNCisJfQ0KKwkNCisJdmlydHVhbCB2b2lkIFRlbGVvcFBlcmlvZGljKCkgew0KKwkJU2NoZWR1bGVyOjpHZXRJbnN0YW5jZSgpLT5SdW4oKTsNCisJfQ0KKwkNCisJdmlydHVhbCB2b2lkIFRlc3RQZXJpb2RpYygpIHsNCisJCWx3LT5SdW4oKTsNCisJfQ0KK307DQorDQorU1RBUlRfUk9CT1RfQ0xBU1MoQ29tbWFuZEJhc2VkUm9ib3QpOw0KKw0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9Db21tYW5kQmFzZWRSb2JvdFRlbXBsYXRlL0NvbW1hbmRzL0V4YW1wbGVDb21tYW5kLmNwcCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9Db21tYW5kQmFzZWRSb2JvdFRlbXBsYXRlL0NvbW1hbmRzL0V4YW1wbGVDb21tYW5kLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNzQ3ZTRhCi0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvdnh3b3Jrcy02LjMvdGFyZ2V0L3NyYy9kZW1vL0NvbW1hbmRCYXNlZFJvYm90VGVtcGxhdGUvQ29tbWFuZHMvRXhhbXBsZUNvbW1hbmQuY3BwCkBAIC0wLDAgKzEsMzEgQEAKKyNpbmNsdWRlICJFeGFtcGxlQ29tbWFuZC5oIg0KKw0KK0V4YW1wbGVDb21tYW5kOjpFeGFtcGxlQ29tbWFuZCgpIHsNCisJLy8gVXNlIFJlcXVpcmVzKCkgaGVyZSB0byBkZWNsYXJlIHN1YnN5c3RlbSBkZXBlbmRlbmNpZXMNCisJLy8gZWcuIFJlcXVpcmVzKGNoYXNzaXMpOw0KK30NCisNCisvLyBDYWxsZWQganVzdCBiZWZvcmUgdGhpcyBDb21tYW5kIHJ1bnMgdGhlIGZpcnN0IHRpbWUNCit2b2lkIEV4YW1wbGVDb21tYW5kOjpJbml0aWFsaXplKCkgew0KKwkNCit9DQorDQorLy8gQ2FsbGVkIHJlcGVhdGVkbHkgd2hlbiB0aGlzIENvbW1hbmQgaXMgc2NoZWR1bGVkIHRvIHJ1bg0KK3ZvaWQgRXhhbXBsZUNvbW1hbmQ6OkV4ZWN1dGUoKSB7DQorCQ0KK30NCisNCisvLyBNYWtlIHRoaXMgcmV0dXJuIHRydWUgd2hlbiB0aGlzIENvbW1hbmQgbm8gbG9uZ2VyIG5lZWRzIHRvIHJ1biBleGVjdXRlKCkNCitib29sIEV4YW1wbGVDb21tYW5kOjpJc0ZpbmlzaGVkKCkgew0KKwlyZXR1cm4gZmFsc2U7DQorfQ0KKw0KKy8vIENhbGxlZCBvbmNlIGFmdGVyIGlzRmluaXNoZWQgcmV0dXJucyB0cnVlDQordm9pZCBFeGFtcGxlQ29tbWFuZDo6RW5kKCkgew0KKwkNCit9DQorDQorLy8gQ2FsbGVkIHdoZW4gYW5vdGhlciBjb21tYW5kIHdoaWNoIHJlcXVpcmVzIG9uZSBvciBtb3JlIG9mIHRoZSBzYW1lDQorLy8gc3Vic3lzdGVtcyBpcyBzY2hlZHVsZWQgdG8gcnVuDQordm9pZCBFeGFtcGxlQ29tbWFuZDo6SW50ZXJydXB0ZWQoKSB7DQorfQ0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9Db21tYW5kQmFzZWRSb2JvdFRlbXBsYXRlL0NvbW1hbmRzL0V4YW1wbGVDb21tYW5kLmggYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vQ29tbWFuZEJhc2VkUm9ib3RUZW1wbGF0ZS9Db21tYW5kcy9FeGFtcGxlQ29tbWFuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkN2U3YzMKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vQ29tbWFuZEJhc2VkUm9ib3RUZW1wbGF0ZS9Db21tYW5kcy9FeGFtcGxlQ29tbWFuZC5oCkBAIC0wLDAgKzEsMjEgQEAKKyNpZm5kZWYgRVhBTVBMRV9DT01NQU5EX0gNCisjZGVmaW5lIEVYQU1QTEVfQ09NTUFORF9IDQorDQorI2luY2x1ZGUgIi4uL0NvbW1hbmRCYXNlLmgiDQorDQorLyoqDQorICoNCisgKg0KKyAqIEBhdXRob3IgRXhhbXBsZUF1dGhvcg0KKyAqLw0KK2NsYXNzIEV4YW1wbGVDb21tYW5kOiBwdWJsaWMgQ29tbWFuZEJhc2Ugew0KK3B1YmxpYzoNCisJRXhhbXBsZUNvbW1hbmQoKTsNCisJdmlydHVhbCB2b2lkIEluaXRpYWxpemUoKTsNCisJdmlydHVhbCB2b2lkIEV4ZWN1dGUoKTsNCisJdmlydHVhbCBib29sIElzRmluaXNoZWQoKTsNCisJdmlydHVhbCB2b2lkIEVuZCgpOw0KKwl2aXJ0dWFsIHZvaWQgSW50ZXJydXB0ZWQoKTsNCit9Ow0KKw0KKyNlbmRpZg0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9Db21tYW5kQmFzZWRSb2JvdFRlbXBsYXRlL09JLmNwcCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9Db21tYW5kQmFzZWRSb2JvdFRlbXBsYXRlL09JLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YWI3ZWJiCi0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvdnh3b3Jrcy02LjMvdGFyZ2V0L3NyYy9kZW1vL0NvbW1hbmRCYXNlZFJvYm90VGVtcGxhdGUvT0kuY3BwCkBAIC0wLDAgKzEsNSBAQAorI2luY2x1ZGUgIk9JLmgiDQorDQorT0k6Ok9JKCkgew0KKwkvLyBQcm9jZXNzIG9wZXJhdG9yIGludGVyZmFjZSBpbnB1dCBoZXJlLg0KK30NCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vQ29tbWFuZEJhc2VkUm9ib3RUZW1wbGF0ZS9PSS5oIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvdnh3b3Jrcy02LjMvdGFyZ2V0L3NyYy9kZW1vL0NvbW1hbmRCYXNlZFJvYm90VGVtcGxhdGUvT0kuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTliMDViCi0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvdnh3b3Jrcy02LjMvdGFyZ2V0L3NyYy9kZW1vL0NvbW1hbmRCYXNlZFJvYm90VGVtcGxhdGUvT0kuaApAQCAtMCwwICsxLDEzIEBACisjaWZuZGVmIE9JX0gNCisjZGVmaW5lIE9JX0gNCisNCisjaW5jbHVkZSAiV1BJTGliLmgiDQorDQorY2xhc3MgT0kgew0KK3ByaXZhdGU6DQorDQorcHVibGljOg0KKwlPSSgpOw0KK307DQorDQorI2VuZGlmDQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvdnh3b3Jrcy02LjMvdGFyZ2V0L3NyYy9kZW1vL0NvbW1hbmRCYXNlZFJvYm90VGVtcGxhdGUvUm9ib3RtYXAuaCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9Db21tYW5kQmFzZWRSb2JvdFRlbXBsYXRlL1JvYm90bWFwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDliNzRmYgotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9Db21tYW5kQmFzZWRSb2JvdFRlbXBsYXRlL1JvYm90bWFwLmgKQEAgLTAsMCArMSwyMiBAQAorI2lmbmRlZiBST0JPVE1BUF9IDQorI2RlZmluZSBST0JPVE1BUF9IDQorDQorDQorLyoqDQorICogVGhlIFJvYm90TWFwIGlzIGEgbWFwcGluZyBmcm9tIHRoZSBwb3J0cyBzZW5zb3JzIGFuZCBhY3R1YXRvcnMgYXJlIHdpcmVkIGludG8NCisgKiB0byBhIHZhcmlhYmxlIG5hbWUuIFRoaXMgcHJvdmlkZXMgZmxleGliaWxpdHkgY2hhbmdpbmcgd2lyaW5nLCBtYWtlcyBjaGVja2luZw0KKyAqIHRoZSB3aXJpbmcgZWFzaWVyIGFuZCBzaWduaWZpY2FudGx5IHJlZHVjZXMgdGhlIG51bWJlciBvZiBtYWdpYyBudW1iZXJzDQorICogZmxvYXRpbmcgYXJvdW5kLg0KKyAqLw0KKyANCisvLyBGb3IgZXhhbXBsZSB0byBtYXAgdGhlIGxlZnQgYW5kIHJpZ2h0IG1vdG9ycywgeW91IGNvdWxkIGRlZmluZSB0aGUNCisvLyBmb2xsb3dpbmcgdmFyaWFibGVzIHRvIHVzZSB3aXRoIHlvdXIgZHJpdmV0cmFpbiBzdWJzeXN0ZW0uDQorLy8gI2RlZmluZSBMRUZUTU9UT1IgMQ0KKy8vICNkZWZpbmUgUklHSFRNT1RPUiAyDQorDQorLy8gSWYgeW91IGFyZSB1c2luZyBtdWx0aXBsZSBtb2R1bGVzLCBtYWtlIHN1cmUgdG8gZGVmaW5lIGJvdGggdGhlIHBvcnQNCisvLyBudW1iZXIgYW5kIHRoZSBtb2R1bGUuIEZvciBleGFtcGxlIHlvdSB3aXRoIGEgcmFuZ2VmaW5kZXI6DQorLy8gI2RlZmluZSBSQU5HRV9GSU5ERVJfUE9SVCAxDQorLy8gI2RlZmluZSBSQU5HRV9GSU5ERVJfTU9EVUxFIDENCisNCisjZW5kaWYNCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vQ29tbWFuZEJhc2VkUm9ib3RUZW1wbGF0ZS9TdWJzeXN0ZW1zL0V4YW1wbGVTdWJzeXN0ZW0uY3BwIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvdnh3b3Jrcy02LjMvdGFyZ2V0L3NyYy9kZW1vL0NvbW1hbmRCYXNlZFJvYm90VGVtcGxhdGUvU3Vic3lzdGVtcy9FeGFtcGxlU3Vic3lzdGVtLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMWZhMTdhCi0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvdnh3b3Jrcy02LjMvdGFyZ2V0L3NyYy9kZW1vL0NvbW1hbmRCYXNlZFJvYm90VGVtcGxhdGUvU3Vic3lzdGVtcy9FeGFtcGxlU3Vic3lzdGVtLmNwcApAQCAtMCwwICsxLDE2IEBACisjaW5jbHVkZSAiRXhhbXBsZVN1YnN5c3RlbS5oIg0KKyNpbmNsdWRlICIuLi9Sb2JvdG1hcC5oIg0KKw0KK0V4YW1wbGVTdWJzeXN0ZW06OkV4YW1wbGVTdWJzeXN0ZW0oKSA6IFN1YnN5c3RlbSgiRXhhbXBsZVN1YnN5c3RlbSIpIHsNCisJDQorfQ0KKyAgICANCit2b2lkIEV4YW1wbGVTdWJzeXN0ZW06OkluaXREZWZhdWx0Q29tbWFuZCgpIHsNCisJLy8gU2V0IHRoZSBkZWZhdWx0IGNvbW1hbmQgZm9yIGEgc3Vic3lzdGVtIGhlcmUuDQorCS8vU2V0RGVmYXVsdENvbW1hbmQobmV3IE15U3BlY2lhbENvbW1hbmQoKSk7DQorfQ0KKw0KKw0KKy8vIFB1dCBtZXRob2RzIGZvciBjb250cm9sbGluZyB0aGlzIHN1YnN5c3RlbQ0KKy8vIGhlcmUuIENhbGwgdGhlc2UgZnJvbSBDb21tYW5kcy4NCisNCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vQ29tbWFuZEJhc2VkUm9ib3RUZW1wbGF0ZS9TdWJzeXN0ZW1zL0V4YW1wbGVTdWJzeXN0ZW0uaCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9Db21tYW5kQmFzZWRSb2JvdFRlbXBsYXRlL1N1YnN5c3RlbXMvRXhhbXBsZVN1YnN5c3RlbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzMzFhMDUKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vQ29tbWFuZEJhc2VkUm9ib3RUZW1wbGF0ZS9TdWJzeXN0ZW1zL0V4YW1wbGVTdWJzeXN0ZW0uaApAQCAtMCwwICsxLDIwIEBACisjaWZuZGVmIEVYQU1QTEVfU1VCU1lTVEVNX0gNCisjZGVmaW5lIEVYQU1QTEVfU1VCU1lTVEVNX0gNCisjaW5jbHVkZSAiQ29tbWFuZHMvU3Vic3lzdGVtLmgiDQorI2luY2x1ZGUgIldQSUxpYi5oIg0KKw0KKy8qKg0KKyAqDQorICoNCisgKiBAYXV0aG9yIEV4YW1wbGVBdXRob3INCisgKi8NCitjbGFzcyBFeGFtcGxlU3Vic3lzdGVtOiBwdWJsaWMgU3Vic3lzdGVtIHsNCitwcml2YXRlOg0KKwkvLyBJdCdzIGRlc2lyYWJsZSB0aGF0IGV2ZXJ5dGhpbmcgcG9zc2libGUgdW5kZXIgcHJpdmF0ZSBleGNlcHQNCisJLy8gZm9yIG1ldGhvZHMgdGhhdCBpbXBsZW1lbnQgc3Vic3lzdGVtIGNhcGFiaWxpdGllcw0KK3B1YmxpYzoNCisJRXhhbXBsZVN1YnN5c3RlbSgpOw0KKwl2b2lkIEluaXREZWZhdWx0Q29tbWFuZCgpOw0KK307DQorDQorI2VuZGlmDQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvdnh3b3Jrcy02LjMvdGFyZ2V0L3NyYy9kZW1vL0NvbW1hbmRCYXNlZFJvYm90VGVtcGxhdGUvc2FtcGxlLnByb3BlcnRpZXMgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vQ29tbWFuZEJhc2VkUm9ib3RUZW1wbGF0ZS9zYW1wbGUucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZmM4OTVlCi0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvdnh3b3Jrcy02LjMvdGFyZ2V0L3NyYy9kZW1vL0NvbW1hbmRCYXNlZFJvYm90VGVtcGxhdGUvc2FtcGxlLnByb3BlcnRpZXMKQEAgLTAsMCArMSwyIEBACitwcm9qZWN0LnR5cGU9RG93bmxvYWRhYmxlS2VybmVsTW9kdWxlUHJvamVjdA0KK3BsYXRmb3JtLmlkPVZ4V29ya3MNCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vQ29tbWFuZEJhc2VkUm9ib3RUZW1wbGF0ZS9zYW1wbGUudHh0IGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvdnh3b3Jrcy02LjMvdGFyZ2V0L3NyYy9kZW1vL0NvbW1hbmRCYXNlZFJvYm90VGVtcGxhdGUvc2FtcGxlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNTE4ZDMwCi0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvdnh3b3Jrcy02LjMvdGFyZ2V0L3NyYy9kZW1vL0NvbW1hbmRCYXNlZFJvYm90VGVtcGxhdGUvc2FtcGxlLnR4dApAQCAtMCwwICsxLDQgQEAKK0ZSQyBDb21tYW5kIEJhc2VkIFJvYm90IFRlbXBsYXRlDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisNCitUaGlzIHByb2dyYW0gaXMgdGhlIGJhc2lzIGZvciBhIGNvbW1hbmQgYmFzZWQgcm9ib3QgcHJvZ3JhbS4gWW91IHNob3VsZCBsb29rIGF0IGFsbCB0aGUgZmlsZXMgaW4gdGhpcyB0ZW1wbGF0ZSBhbmQgbWFrZSBlZGl0cyB3aGVyZSBpbmRpY2F0ZWQgaW4gdGhlIHNvdXJjZSBjb2RlLgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9EYXNoYm9hcmREYXRhRXhhbXBsZS8uY3Byb2plY3QgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vRGFzaGJvYXJkRGF0YUV4YW1wbGUvLmNwcm9qZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhOTJlZGMKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vRGFzaGJvYXJkRGF0YUV4YW1wbGUvLmNwcm9qZWN0CkBAIC0wLDAgKzEsMjkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQorPD9maWxlVmVyc2lvbiA0LjAuMD8+DQorDQorPGNwcm9qZWN0Pg0KKzxzdG9yYWdlTW9kdWxlIG1vZHVsZUlkPSJvcmcuZWNsaXBzZS5jZHQuY29yZS5zZXR0aW5ncyI+DQorPGNjb25maWd1cmF0aW9uIGlkPSJvcmcuZWNsaXBzZS5jZHQuY29yZS5kZWZhdWx0LmNvbmZpZy4yODM5NjcxMDYiPg0KKzxzdG9yYWdlTW9kdWxlIGJ1aWxkU3lzdGVtSWQ9Im9yZy5lY2xpcHNlLmNkdC5jb3JlLmRlZmF1bHRDb25maWdEYXRhUHJvdmlkZXIiIGlkPSJvcmcuZWNsaXBzZS5jZHQuY29yZS5kZWZhdWx0LmNvbmZpZy4yODM5NjcxMDYiIG1vZHVsZUlkPSJvcmcuZWNsaXBzZS5jZHQuY29yZS5zZXR0aW5ncyIgbmFtZT0iQ29uZmlndXJhdGlvbiI+DQorPGV4dGVybmFsU2V0dGluZ3MvPg0KKzxleHRlbnNpb25zPg0KKzxleHRlbnNpb24gaWQ9ImNvbS53aW5kcml2ZXIuaWRlLmNvcmUuV1JTY2FubmVySW5mb1Byb3ZpZGVyIiBwb2ludD0ib3JnLmVjbGlwc2UuY2R0LmNvcmUuU2Nhbm5lckluZm9Qcm92aWRlciIvPg0KKzxleHRlbnNpb24gaWQ9ImNvbS53aW5kcml2ZXIuaWRlLmNvcmUuV1JFbGZQYXJzZXJWeFdvcmtzIiBwb2ludD0ib3JnLmVjbGlwc2UuY2R0LmNvcmUuQmluYXJ5UGFyc2VyIi8+DQorPGV4dGVuc2lvbiBpZD0ib3JnLmVjbGlwc2UuY2R0LmNvcmUuR05VX0VMRiIgcG9pbnQ9Im9yZy5lY2xpcHNlLmNkdC5jb3JlLkJpbmFyeVBhcnNlciIvPg0KKzwvZXh0ZW5zaW9ucz4NCis8L3N0b3JhZ2VNb2R1bGU+DQorPHN0b3JhZ2VNb2R1bGUgbW9kdWxlSWQ9Im9yZy5lY2xpcHNlLmNkdC5jb3JlLmV4dGVybmFsU2V0dGluZ3MiLz4NCis8c3RvcmFnZU1vZHVsZSBtb2R1bGVJZD0ib3JnLmVjbGlwc2UuY2R0LmNvcmUucGF0aGVudHJ5Ij4NCis8cGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0iIi8+DQorPHBhdGhlbnRyeSBraW5kPSJvdXQiIHBhdGg9IiIvPg0KKzxwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJjb20ud2luZHJpdmVyLmlkZS5jb3JlLldSX0NPTlRBSU5FUiIvPg0KKzxwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJjb20ud2luZHJpdmVyLmlkZS5jb3JlLmJ1aWxkLm1vZGVsLldSX1VTRVJERUZJTkVEX0NPTlRBSU5FUiIvPg0KKzwvc3RvcmFnZU1vZHVsZT4NCis8c3RvcmFnZU1vZHVsZSBtb2R1bGVJZD0ic2Nhbm5lckNvbmZpZ3VyYXRpb24iLz4NCis8c3RvcmFnZU1vZHVsZSBtb2R1bGVJZD0idXNlcmRlZmluZWRDb250YWluZXIiPg0KKzxpbmRleEFsbEZpbGVzIHZhbHVlPSJmYWxzZSIvPg0KKzxpbml0aWFsaXplZCB2YWx1ZT0idHJ1ZSIvPg0KKzwvc3RvcmFnZU1vZHVsZT4NCis8L2Njb25maWd1cmF0aW9uPg0KKzwvc3RvcmFnZU1vZHVsZT4NCis8L2Nwcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9EYXNoYm9hcmREYXRhRXhhbXBsZS8ucHJvamVjdCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9EYXNoYm9hcmREYXRhRXhhbXBsZS8ucHJvamVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZmNjYWZhCi0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvdnh3b3Jrcy02LjMvdGFyZ2V0L3NyYy9kZW1vL0Rhc2hib2FyZERhdGFFeGFtcGxlLy5wcm9qZWN0CkBAIC0wLDAgKzEsMjAgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQorPHByb2plY3REZXNjcmlwdGlvbj4NCisJPG5hbWU+RGFzaGJvYXJkRGF0YUV4YW1wbGU8L25hbWU+DQorCTxjb21tZW50PjwvY29tbWVudD4NCisJPHByb2plY3RzPg0KKwk8L3Byb2plY3RzPg0KKwk8YnVpbGRTcGVjPg0KKwkJPGJ1aWxkQ29tbWFuZD4NCisJCQk8bmFtZT5jb20ud2luZHJpdmVyLmlkZS5jb3JlLndyYnVpbGRlcjwvbmFtZT4NCisJCQk8YXJndW1lbnRzPg0KKwkJCTwvYXJndW1lbnRzPg0KKwkJPC9idWlsZENvbW1hbmQ+DQorCTwvYnVpbGRTcGVjPg0KKwk8bmF0dXJlcz4NCisJCTxuYXR1cmU+Y29tLndpbmRyaXZlci5pZGUuY29yZS53cm5hdHVyZTwvbmF0dXJlPg0KKwkJPG5hdHVyZT5jb20ud2luZHJpdmVyLmlkZS5jb3JlLndyY29yZW5hdHVyZTwvbmF0dXJlPg0KKwkJPG5hdHVyZT5vcmcuZWNsaXBzZS5jZHQuY29yZS5jbmF0dXJlPC9uYXR1cmU+DQorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmNkdC5jb3JlLmNjbmF0dXJlPC9uYXR1cmU+DQorCTwvbmF0dXJlcz4NCis8L3Byb2plY3REZXNjcmlwdGlvbj4NCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vRGFzaGJvYXJkRGF0YUV4YW1wbGUvLndybWFrZWZpbGUgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vRGFzaGJvYXJkRGF0YUV4YW1wbGUvLndybWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTFkZDdmOAotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9EYXNoYm9hcmREYXRhRXhhbXBsZS8ud3JtYWtlZmlsZQpAQCAtMCwwICsxLDQ4IEBACisjIFRoZSBmaWxlICIud3JtYWtlZmlsZSIgaXMgdGhlIHRlbXBsYXRlIHVzZWQgYnkgdGhlIFdpbmQgUml2ZXIgV29ya2JlbmNoIHRvDQorIyBnZW5lcmF0ZSB0aGUgbWFrZWZpbGVzIG9mIHRoaXMgcHJvamVjdC4gQWRkIHVzZXItc3BlY2lmaWMgYnVpbGQgdGFyZ2V0cyBhbmQNCisjIG1ha2UgcnVsZXMgb25seSghKSBpbiB0aGlzIHByb2plY3QncyAiLndybWFrZWZpbGUiIGZpbGUuIFRoZXNlIHdpbGwgdGhlbiBiZQ0KKyMgYXV0b21hdGljYWxseSBkdW1wZWQgaW50byB0aGUgbWFrZWZpbGVzLg0KKw0KK1dJTkRfSE9NRSA6PSAkKHN1YnN0IFwsLywkKFdJTkRfSE9NRSkpDQorV0lORF9CQVNFIDo9ICQoc3Vic3QgXCwvLCQoV0lORF9CQVNFKSkNCitXSU5EX1VTUiA6PSAkKHN1YnN0IFwsLywkKFdJTkRfVVNSKSkNCisNCithbGwgOiBwcmVfYnVpbGQgbWFpbl9hbGwgcG9zdF9idWlsZA0KKw0KK19jbGVhbiA6Og0KKwlAZWNobyAibWFrZTogcmVtb3ZpbmcgdGFyZ2V0cyBhbmQgb2JqZWN0cyBvZiBgcHdkYCINCisNCislSURFX0dFTkVSQVRFRCUNCisNCistaW5jbHVkZSAkKFBSSl9ST09UX0RJUikvKi5tYWtlZmlsZQ0KKw0KKy1pbmNsdWRlICoubWFrZWZpbGUNCisNCittYWluX2FsbCA6IGV4dGVybmFsX2J1aWxkICQoUFJPSkVDVF9UQVJHRVRTKQ0KKwlAZWNobyAibWFrZTogYnVpbHQgdGFyZ2V0cyBvZiBgcHdkYCINCisNCisjIGVudHJ5IHBvaW50IGZvciBleHRlbmRpbmcgdGhlIGJ1aWxkDQorZXh0ZXJuYWxfYnVpbGQgOjoNCisJQGVjaG8gIiINCisNCisjIG1haW4gZW50cnkgcG9pbnQgZm9yIHByZSBwcm9jZXNzaW5nIHByaW9yIHRvIHRoZSBidWlsZA0KK3ByZV9idWlsZCA6OiAkKFBSRV9CVUlMRF9TVEVQKSBnZW5lcmF0ZV9zb3VyY2VzDQorCUBlY2hvICIiDQorDQorIyBlbnRyeSBwb2ludCBmb3IgZ2VuZXJhdGluZyBzb3VyY2VzIHByaW9yIHRvIHRoZSBidWlsZA0KK2dlbmVyYXRlX3NvdXJjZXMgOjoNCisJQGVjaG8gIiINCisNCisjIG1haW4gZW50cnkgcG9pbnQgZm9yIHBvc3QgcHJvY2Vzc2luZyBhZnRlciB0aGUgYnVpbGQNCitwb3N0X2J1aWxkIDo6ICQoUE9TVF9CVUlMRF9TVEVQKSBkZXBsb3lfb3V0cHV0DQorCUBlY2hvICIiDQorDQorIyBlbnRyeSBwb2ludCBmb3IgZGVwbG95aW5nIG91dHB1dCBhZnRlciB0aGUgYnVpbGQNCitkZXBsb3lfb3V0cHV0IDo6DQorCUBlY2hvICIiDQorDQorY2xlYW4gOjogZXh0ZXJuYWxfY2xlYW4gJChDTEVBTl9TVEVQKSBfY2xlYW4NCisNCisjIGVudHJ5IHBvaW50IGZvciBleHRlbmRpbmcgdGhlIGJ1aWxkIGNsZWFuDQorZXh0ZXJuYWxfY2xlYW4gOjoNCisJQGVjaG8gIiINCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vRGFzaGJvYXJkRGF0YUV4YW1wbGUvLndycHJvamVjdCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9EYXNoYm9hcmREYXRhRXhhbXBsZS8ud3Jwcm9qZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4YjU3ODYKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vRGFzaGJvYXJkRGF0YUV4YW1wbGUvLndycHJvamVjdApAQCAtMCwwICsxLDI1OSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCis8d3J4bWw+DQorICAgIDxwcm9wZXJ0aWVzIHBsYXRmb3JtPSJWeFdvcmtzIiBwbGF0Zm9ybV9uYW1lPSJ2eHdvcmtzLTYuMyIgcm9vdD0iMSIgdHlwZT0iRG93bmxvYWRhYmxlS2VybmVsTW9kdWxlUHJvamVjdCIvPg0KKyAgICA8YXR0cmlidXRlcz4NCisgICAgICAgIDxtYXBBdHRyaWJ1dGU+DQorICAgICAgICAgICAgPGxpc3RBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98R2xvYmFsTWFjcm9zIj4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iUFJPSkVDVF9UWVBFIi8+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9IkRFRklORVMiLz4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iRVhQQU5EX0RCRyIvPg0KKyAgICAgICAgICAgIDwvbGlzdEF0dHJpYnV0ZT4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfEdsb2JhbE1hY3JvfERFRklORVMiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfEdsb2JhbE1hY3JvfEVYUEFORF9EQkciIHZhbHVlPSIwIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xHbG9iYWxNYWNyb3xQUk9KRUNUX1RZUEUiIHZhbHVlPSJES00iLz4NCisgICAgICAgICAgICA8bGlzdEF0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xJbmNsfFBQQzMyZGlhYiI+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9Ii1JJChXSU5EX0JBU0UpL3RhcmdldC9oL1dQSUxpYiIvPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSItSSQoV0lORF9CQVNFKS90YXJnZXQvaCIvPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSItSSQoV0lORF9CQVNFKS90YXJnZXQvaC93cm4vY29yZWlwIi8+DQorICAgICAgICAgICAgPC9saXN0QXR0cmlidXRlPg0KKyAgICAgICAgICAgIDxsaXN0QXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfEluY2x8UFBDMzJnbnUiPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSItSSQoV0lORF9CQVNFKS90YXJnZXQvaCIvPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSItSSQoV0lORF9CQVNFKS90YXJnZXQvaC93cm4vY29yZWlwIi8+DQorICAgICAgICAgICAgPC9saXN0QXR0cmlidXRlPg0KKyAgICAgICAgICAgIDxsaXN0QXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfEluY2x8UFBDNjAzZGlhYiI+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9Ii1JJChXSU5EX0JBU0UpL3RhcmdldC9oIi8+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9Ii1JJChXSU5EX0JBU0UpL3RhcmdldC9oL3dybi9jb3JlaXAiLz4NCisgICAgICAgICAgICA8L2xpc3RBdHRyaWJ1dGU+DQorICAgICAgICAgICAgPGxpc3RBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98SW5jbHxQUEM2MDNnbnUiPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSItSSQoV0lORF9CQVNFKS90YXJnZXQvaCIvPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSItSSQoV0lORF9CQVNFKS90YXJnZXQvaC9XUElMaWIiLz4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2gvd3JuL2NvcmVpcCIvPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSItSS4iLz4NCisgICAgICAgICAgICA8L2xpc3RBdHRyaWJ1dGU+DQorICAgICAgICAgICAgPGxpc3RBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TGlic3xQUEMzMmRpYWIiPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSIkKFdJTkRfQkFTRSkvdGFyZ2V0L2xpYi9XUElMaWIuYSIvPg0KKyAgICAgICAgICAgIDwvbGlzdEF0dHJpYnV0ZT4NCisgICAgICAgICAgICA8bGlzdEF0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xMaWJzfFBQQzYwM2dudSI+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9IiQoV0lORF9CQVNFKS90YXJnZXQvbGliL1dQSUxpYi5hIi8+DQorICAgICAgICAgICAgPC9saXN0QXR0cmlidXRlPg0KKyAgICAgICAgICAgIDxsaXN0QXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvcyI+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9IlZYX0NQVV9GQU1JTFkiLz4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iQ1BVIi8+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9IlRPT0xfRkFNSUxZIi8+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9IlRPT0wiLz4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iVE9PTF9QQVRIIi8+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9IkNDX0FSQ0hfU1BFQyIvPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSJMSUJQQVRIIi8+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9IkxJQlMiLz4NCisgICAgICAgICAgICA8L2xpc3RBdHRyaWJ1dGU+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xDQ19BUkNIX1NQRUN8dmFsdWV8UFBDMzJkaWFiIiB2YWx1ZT0iLXRQUENGSDp2eHdvcmtzNjMgLVhzdG13LXNsb3cgLURQUEMzMl9mcDYweCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98Q0NfQVJDSF9TUEVDfHZhbHVlfFBQQzMyZ251IiB2YWx1ZT0iLW1oYXJkLWZsb2F0IC1tc3RyaWN0LWFsaWduIC1tbm8taW1wbGljaXQtZnAgLURQUEMzMl9mcDYweCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98Q0NfQVJDSF9TUEVDfHZhbHVlfFBQQzYwM2RpYWIiIHZhbHVlPSItdFBQQzYwM0ZIOnZ4d29ya3M2MyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98Q0NfQVJDSF9TUEVDfHZhbHVlfFBQQzYwM2dudSIgdmFsdWU9Ii1tY3B1PTYwMyAtbXN0cmljdC1hbGlnbiAtbW5vLWltcGxpY2l0LWZwICAtbWxvbmdjYWxsIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xDUFV8dmFsdWV8UFBDMzJkaWFiIiB2YWx1ZT0iUFBDMzIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfENQVXx2YWx1ZXxQUEMzMmdudSIgdmFsdWU9IlBQQzMyIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xDUFV8dmFsdWV8UFBDNjAzZGlhYiIgdmFsdWU9IlBQQzYwMyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98Q1BVfHZhbHVlfFBQQzYwM2dudSIgdmFsdWU9IlBQQzYwMyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98TElCUEFUSHx2YWx1ZXxQUEMzMmRpYWIiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfExJQlBBVEh8dmFsdWV8UFBDMzJnbnUiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfExJQlBBVEh8dmFsdWV8UFBDNjAzZGlhYiIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98TElCUEFUSHx2YWx1ZXxQUEM2MDNnbnUiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfExJQlN8dmFsdWV8UFBDMzJkaWFiIiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xMSUJTfHZhbHVlfFBQQzMyZ251IiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xMSUJTfHZhbHVlfFBQQzYwM2RpYWIiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfExJQlN8dmFsdWV8UFBDNjAzZ251IiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xUT09MX0ZBTUlMWXx2YWx1ZXxQUEMzMmRpYWIiIHZhbHVlPSJkaWFiIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xUT09MX0ZBTUlMWXx2YWx1ZXxQUEMzMmdudSIgdmFsdWU9ImdudSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98VE9PTF9GQU1JTFl8dmFsdWV8UFBDNjAzZGlhYiIgdmFsdWU9ImRpYWIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfFRPT0xfRkFNSUxZfHZhbHVlfFBQQzYwM2dudSIgdmFsdWU9ImdudSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98VE9PTF9QQVRIfHZhbHVlfFBQQzMyZGlhYiIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98VE9PTF9QQVRIfHZhbHVlfFBQQzMyZ251IiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xUT09MX1BBVEh8dmFsdWV8UFBDNjAzZGlhYiIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98VE9PTF9QQVRIfHZhbHVlfFBQQzYwM2dudSIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98VE9PTHx2YWx1ZXxQUEMzMmRpYWIiIHZhbHVlPSJkaWFiIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xUT09MfHZhbHVlfFBQQzMyZ251IiB2YWx1ZT0iZ251Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xUT09MfHZhbHVlfFBQQzYwM2RpYWIiIHZhbHVlPSJkaWFiIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xUT09MfHZhbHVlfFBQQzYwM2dudSIgdmFsdWU9ImdudSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98VlhfQ1BVX0ZBTUlMWXx2YWx1ZXxQUEMzMmRpYWIiIHZhbHVlPSJwcGMiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfFZYX0NQVV9GQU1JTFl8dmFsdWV8UFBDMzJnbnUiIHZhbHVlPSJwcGMiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfFZYX0NQVV9GQU1JTFl8dmFsdWV8UFBDNjAzZGlhYiIgdmFsdWU9InBwYyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98VlhfQ1BVX0ZBTUlMWXx2YWx1ZXxQUEM2MDNnbnUiIHZhbHVlPSJwcGMiLz4NCisgICAgICAgICAgICA8bGlzdEF0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29scyI+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9IkMtQ29tcGlsZXIiLz4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iQysrLUNvbXBpbGVyIi8+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9IkxpbmtlciIvPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSJQYXJ0aWFsIEltYWdlIExpbmtlciIvPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSJMaWJyYXJpYW4iLz4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iQXNzZW1ibGVyIi8+DQorICAgICAgICAgICAgPC9saXN0QXR0cmlidXRlPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxBc3NlbWJsZXJ8Y21kfFBQQzMyZGlhYiIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWFzc2VtYmxlcnByZWZpeCUgJChUT09MX1BBVEgpZGNjICVEZWJ1Z01vZGVGbGFncyUgJVRvb2xGbGFncyUgJChBRERFRF9DRkxBR1MpICVJbmNsdWRlcyUgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gJU91dEZpbGUlIC1jICVJbkZpbGUlIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxjbWR8UFBDMzJnbnUiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7OyVhc3NlbWJsZXJwcmVmaXglICQoVE9PTF9QQVRIKWNjcHBjICVEZWJ1Z01vZGVGbGFncyUgJVRvb2xGbGFncyUgJChBRERFRF9DRkxBR1MpICVJbmNsdWRlcyUgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gJU91dEZpbGUlIC1jICVJbkZpbGUlIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxjbWR8UFBDNjAzZGlhYiIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWFzc2VtYmxlcnByZWZpeCUgJChUT09MX1BBVEgpZGNjICVEZWJ1Z01vZGVGbGFncyUgJVRvb2xGbGFncyUgJChBRERFRF9DRkxBR1MpICVJbmNsdWRlcyUgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gJU91dEZpbGUlIC1jICVJbkZpbGUlIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxjbWR8UFBDNjAzZ251IiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OzslYXNzZW1ibGVycHJlZml4JSAkKFRPT0xfUEFUSCljY3BwYyAlRGVidWdNb2RlRmxhZ3MlICVUb29sRmxhZ3MlICQoQURERURfQ0ZMQUdTKSAlSW5jbHVkZXMlICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICVPdXRGaWxlJSAtYyAlSW5GaWxlJSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxBc3NlbWJsZXJ8ZGJnRmxhZ3N8UFBDMzJkaWFiIiB2YWx1ZT0iLWciLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfGRiZ0ZsYWdzfFBQQzMyZ251IiB2YWx1ZT0iLWciLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfGRiZ0ZsYWdzfFBQQzYwM2RpYWIiIHZhbHVlPSItZyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxBc3NlbWJsZXJ8ZGJnRmxhZ3N8UFBDNjAzZ251IiB2YWx1ZT0iLWciLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfGRlcml2ZWRTaWdzfFBQQzMyZGlhYiIgdmFsdWU9IioubyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxBc3NlbWJsZXJ8ZGVyaXZlZFNpZ3N8UFBDMzJnbnUiIHZhbHVlPSIqLm8iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfGRlcml2ZWRTaWdzfFBQQzYwM2RpYWIiIHZhbHVlPSIqLm8iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfGRlcml2ZWRTaWdzfFBQQzYwM2dudSIgdmFsdWU9IioubyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxBc3NlbWJsZXJ8ZmxhZ3N8UFBDMzJkaWFiIiB2YWx1ZT0iJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YcHJlcHJvY2Vzcy1hc3NlbWJseSAtWGNwcC1uby1zcGFjZSAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxmbGFnc3xQUEMzMmdudSIgdmFsdWU9IiQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAgIC14YXNzZW1ibGVyLXdpdGgtY3BwIC1NRCAtTVAiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfGZsYWdzfFBQQzYwM2RpYWIiIHZhbHVlPSIkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhwcmVwcm9jZXNzLWFzc2VtYmx5IC1YY3BwLW5vLXNwYWNlICAtWG1ha2UtZGVwZW5kZW5jeT0weGQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfGZsYWdzfFBQQzYwM2dudSIgdmFsdWU9IiQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAgIC14YXNzZW1ibGVyLXdpdGgtY3BwIC1NRCAtTVAiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfG5vbkRiZ0ZsYWdzfFBQQzMyZGlhYiIgdmFsdWU9Ii1YTyAtWHNpemUtb3B0Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxub25EYmdGbGFnc3xQUEMzMmdudSIgdmFsdWU9Ii1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfG5vbkRiZ0ZsYWdzfFBQQzYwM2RpYWIiIHZhbHVlPSItWE8gLVhzaXplLW9wdCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxBc3NlbWJsZXJ8bm9uRGJnRmxhZ3N8UFBDNjAzZ251IiB2YWx1ZT0iLU8yIC1mc3RyZW5ndGgtcmVkdWNlIC1mbm8tYnVpbHRpbiIvPg0KKyAgICAgICAgICAgIDxib29sZWFuQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfG9iamVjdCIgdmFsdWU9InRydWUiLz4NCisgICAgICAgICAgICA8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxwYXNzQWJsZSIgdmFsdWU9ImZhbHNlIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxzaWdzIiB2YWx1ZT0iKi5zIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxjbWR8UFBDMzJkaWFiIiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OzslY3BwY29tcGlsZXJwcmVmaXglICQoVE9PTF9QQVRIKWRjYyAlRGVidWdNb2RlRmxhZ3MlICVUb29sRmxhZ3MlICQoQURERURfQysrRkxBR1MpICVJbmNsdWRlcyUgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gJU91dEZpbGUlIC1jICVJbkZpbGUlIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxjbWR8UFBDMzJnbnUiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7OyVjcHBjb21waWxlcnByZWZpeCUgJChUT09MX1BBVEgpY2NwcGMgJURlYnVnTW9kZUZsYWdzJSAlVG9vbEZsYWdzJSAkKEFEREVEX0MrK0ZMQUdTKSAlSW5jbHVkZXMlICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICVPdXRGaWxlJSAtYyAlSW5GaWxlJSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8Y21kfFBQQzYwM2RpYWIiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7OyVjcHBjb21waWxlcnByZWZpeCUgJChUT09MX1BBVEgpZGNjICVEZWJ1Z01vZGVGbGFncyUgJVRvb2xGbGFncyUgJChBRERFRF9DKytGTEFHUykgJUluY2x1ZGVzJSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAlT3V0RmlsZSUgLWMgJUluRmlsZSUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfGNtZHxQUEM2MDNnbnUiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7OyVjcHBjb21waWxlcnByZWZpeCUgJChUT09MX1BBVEgpY2NwcGMgJURlYnVnTW9kZUZsYWdzJSAlVG9vbEZsYWdzJSAkKEFEREVEX0MrK0ZMQUdTKSAlSW5jbHVkZXMlICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICVPdXRGaWxlJSAtYyAlSW5GaWxlJSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8ZGJnRmxhZ3N8UFBDMzJkaWFiIiB2YWx1ZT0iLWciLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfGRiZ0ZsYWdzfFBQQzMyZ251IiB2YWx1ZT0iLWciLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfGRiZ0ZsYWdzfFBQQzYwM2RpYWIiIHZhbHVlPSItZyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8ZGJnRmxhZ3N8UFBDNjAzZ251IiB2YWx1ZT0iLWciLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfGRlcml2ZWRTaWdzfFBQQzMyZGlhYiIgdmFsdWU9IioubyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8ZGVyaXZlZFNpZ3N8UFBDMzJnbnUiIHZhbHVlPSIqLm8iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfGRlcml2ZWRTaWdzfFBQQzYwM2RpYWIiIHZhbHVlPSIqLm8iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfGRlcml2ZWRTaWdzfFBQQzYwM2dudSIgdmFsdWU9IioubyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8ZmxhZ3N8UFBDMzJkaWFiIiB2YWx1ZT0iJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfGZsYWdzfFBQQzMyZ251IiB2YWx1ZT0iJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxmbGFnc3xQUEM2MDNkaWFiIiB2YWx1ZT0iJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfGZsYWdzfFBQQzYwM2dudSIgdmFsdWU9IiQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAtbWxvbmdjYWxsIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxub25EYmdGbGFnc3xQUEMzMmRpYWIiIHZhbHVlPSItWE8gLVhzaXplLW9wdCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8bm9uRGJnRmxhZ3N8UFBDMzJnbnUiIHZhbHVlPSItTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxub25EYmdGbGFnc3xQUEM2MDNkaWFiIiB2YWx1ZT0iLVhPIC1Yc2l6ZS1vcHQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfG5vbkRiZ0ZsYWdzfFBQQzYwM2dudSIgdmFsdWU9Ii1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4iLz4NCisgICAgICAgICAgICA8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxvYmplY3QiIHZhbHVlPSJ0cnVlIi8+DQorICAgICAgICAgICAgPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8cGFzc0FibGUiIHZhbHVlPSJmYWxzZSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8c2lncyIgdmFsdWU9IiouY3BwOyouQzsqLmN4eDsqLmNjIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8Y21kfFBQQzMyZGlhYiIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWNjb21waWxlcnByZWZpeCUgJChUT09MX1BBVEgpZGNjICVEZWJ1Z01vZGVGbGFncyUgJVRvb2xGbGFncyUgJChBRERFRF9DRkxBR1MpICVJbmNsdWRlcyUgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gJU91dEZpbGUlIC1jICVJbkZpbGUlIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8Y21kfFBQQzMyZ251IiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OzslY2NvbXBpbGVycHJlZml4JSAkKFRPT0xfUEFUSCljY3BwYyAlRGVidWdNb2RlRmxhZ3MlICVUb29sRmxhZ3MlICQoQURERURfQ0ZMQUdTKSAlSW5jbHVkZXMlICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICVPdXRGaWxlJSAtYyAlSW5GaWxlJSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfGNtZHxQUEM2MDNkaWFiIiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OzslY2NvbXBpbGVycHJlZml4JSAkKFRPT0xfUEFUSClkY2MgJURlYnVnTW9kZUZsYWdzJSAlVG9vbEZsYWdzJSAkKEFEREVEX0NGTEFHUykgJUluY2x1ZGVzJSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAlT3V0RmlsZSUgLWMgJUluRmlsZSUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxjbWR8UFBDNjAzZ251IiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OzslY2NvbXBpbGVycHJlZml4JSAkKFRPT0xfUEFUSCljY3BwYyAlRGVidWdNb2RlRmxhZ3MlICVUb29sRmxhZ3MlICQoQURERURfQ0ZMQUdTKSAlSW5jbHVkZXMlICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICVPdXRGaWxlJSAtYyAlSW5GaWxlJSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfGRiZ0ZsYWdzfFBQQzMyZGlhYiIgdmFsdWU9Ii1nIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8ZGJnRmxhZ3N8UFBDMzJnbnUiIHZhbHVlPSItZyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfGRiZ0ZsYWdzfFBQQzYwM2RpYWIiIHZhbHVlPSItZyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfGRiZ0ZsYWdzfFBQQzYwM2dudSIgdmFsdWU9Ii1nIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8ZGVyaXZlZFNpZ3N8UFBDMzJkaWFiIiB2YWx1ZT0iKi5vIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8ZGVyaXZlZFNpZ3N8UFBDMzJnbnUiIHZhbHVlPSIqLm8iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxkZXJpdmVkU2lnc3xQUEM2MDNkaWFiIiB2YWx1ZT0iKi5vIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8ZGVyaXZlZFNpZ3N8UFBDNjAzZ251IiB2YWx1ZT0iKi5vIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8ZmxhZ3N8UFBDMzJkaWFiIiB2YWx1ZT0iJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxmbGFnc3xQUEMzMmdudSIgdmFsdWU9IiQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAgLVdhbGwgIC1NRCAtTVAiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxmbGFnc3xQUEM2MDNkaWFiIiB2YWx1ZT0iJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxmbGFnc3xQUEM2MDNnbnUiIHZhbHVlPSIkKENDX0FSQ0hfU1BFQykgLWFuc2kgIC1XYWxsICAtTUQgLU1QIC1tbG9uZ2NhbGwiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxub25EYmdGbGFnc3xQUEMzMmRpYWIiIHZhbHVlPSItWE8gLVhzaXplLW9wdCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfG5vbkRiZ0ZsYWdzfFBQQzMyZ251IiB2YWx1ZT0iLU8yIC1mc3RyZW5ndGgtcmVkdWNlIC1mbm8tYnVpbHRpbiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfG5vbkRiZ0ZsYWdzfFBQQzYwM2RpYWIiIHZhbHVlPSItWE8gLVhzaXplLW9wdCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfG5vbkRiZ0ZsYWdzfFBQQzYwM2dudSIgdmFsdWU9Ii1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4iLz4NCisgICAgICAgICAgICA8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8b2JqZWN0IiB2YWx1ZT0idHJ1ZSIvPg0KKyAgICAgICAgICAgIDxib29sZWFuQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxwYXNzQWJsZSIgdmFsdWU9ImZhbHNlIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8c2lncyIgdmFsdWU9IiouYyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58Y21kfFBQQzMyZGlhYiIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWFyY2hpdmVycHJlZml4JSAkKFRPT0xfUEFUSClkYXIgJVRvb2xGbGFncyUgJU91dEZpbGUlICVPYmplY3RzJSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58Y21kfFBQQzMyZ251IiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OzslYXJjaGl2ZXJwcmVmaXglICQoVE9PTF9QQVRIKWFycHBjICVUb29sRmxhZ3MlICVPdXRGaWxlJSAlT2JqZWN0cyUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufGNtZHxQUEM2MDNkaWFiIiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OzslYXJjaGl2ZXJwcmVmaXglICQoVE9PTF9QQVRIKWRhciAlVG9vbEZsYWdzJSAlT3V0RmlsZSUgJU9iamVjdHMlIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxjbWR8UFBDNjAzZ251IiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OzslYXJjaGl2ZXJwcmVmaXglICQoVE9PTF9QQVRIKWFycHBjICVUb29sRmxhZ3MlICVPdXRGaWxlJSAlT2JqZWN0cyUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufGRiZ0ZsYWdzfFBQQzMyZGlhYiIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58ZGJnRmxhZ3N8UFBDMzJnbnUiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufGRiZ0ZsYWdzfFBQQzYwM2RpYWIiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufGRiZ0ZsYWdzfFBQQzYwM2dudSIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58ZGVyaXZlZFNpZ3N8UFBDMzJkaWFiIiB2YWx1ZT0iKi5hIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxkZXJpdmVkU2lnc3xQUEMzMmdudSIgdmFsdWU9IiouYSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58ZGVyaXZlZFNpZ3N8UFBDNjAzZGlhYiIgdmFsdWU9IiouYSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58ZGVyaXZlZFNpZ3N8UFBDNjAzZ251IiB2YWx1ZT0iKi5hIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxmbGFnc3xQUEMzMmRpYWIiIHZhbHVlPSJjcnVzIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxmbGFnc3xQUEMzMmdudSIgdmFsdWU9ImNydXMiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufGZsYWdzfFBQQzYwM2RpYWIiIHZhbHVlPSJjcnVzIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxmbGFnc3xQUEM2MDNnbnUiIHZhbHVlPSJjcnVzIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxub25EYmdGbGFnc3xQUEMzMmRpYWIiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufG5vbkRiZ0ZsYWdzfFBQQzMyZ251IiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxub25EYmdGbGFnc3xQUEM2MDNkaWFiIiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxub25EYmdGbGFnc3xQUEM2MDNnbnUiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxvYmplY3QiIHZhbHVlPSJmYWxzZSIvPg0KKyAgICAgICAgICAgIDxib29sZWFuQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufHBhc3NBYmxlIiB2YWx1ZT0idHJ1ZSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58c2lncyIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8Y21kfFBQQzMyZGlhYiIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7cm0gLWYgJU91dEZpbGUlO2RkdW1wIC1OZyAlT2JqZWN0cyUgJUxpYnJhcmllcyUgfCB0Y2xzaCAkKFdJTkRfQkFTRSkvaG9zdC9yZXNvdXJjZS9odXRpbHMvdGNsL211bmNoLnRjbCAtYyBwcGMgJmd0OyAkKE9CSl9ESVIpL2N0ZHQuYzslY2NvbXBpbGVycHJlZml4JSAkKFRPT0xfUEFUSClkY2MgJURlYnVnTW9kZUZsYWdzJSAkKENDX0FSQ0hfU1BFQykgLVhkb2xsYXItaW4taWRlbnQgLVhmb3JjZS1kZWNsYXJhdGlvbnMgJChBRERFRF9DRkxBR1MpICVJbmNsdWRlcyUgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgIC1vICQoT0JKX0RJUikvY3RkdC5vIC1jICQoT0JKX0RJUikvY3RkdC5jOyVsaW5rZXJwcmVmaXglICQoVE9PTF9QQVRIKWRsZCAtdFBQQ0ZIOnZ4d29ya3M2MyAtWCAtcjUgJVRvb2xGbGFncyUgLW8gJU91dEZpbGUlICQoT0JKX0RJUikvY3RkdC5vICVPYmplY3RzJSAlTGlicmFyaWVzJSAkKExJQlBBVEgpICQoTElCUykgICQoQURERURfTElCUEFUSCkgJChBRERFRF9MSUJTKSAmYW1wOyZhbXA7IGlmIFsgJnF1b3Q7JChFWFBBTkRfREJHKSZxdW90OyA9ICZxdW90OzEmcXVvdDsgXTsgdGhlbiBwbGluayAmcXVvdDskQCZxdW90OztmaSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8Y21kfFBQQzMyZ251IiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OztybSAtZiAlT3V0RmlsZSU7bm1wcGMgJU9iamVjdHMlICVMaWJyYXJpZXMlIHwgdGNsc2ggJChXSU5EX0JBU0UpL2hvc3QvcmVzb3VyY2UvaHV0aWxzL3RjbC9tdW5jaC50Y2wgLWMgcHBjICZndDsgJChPQkpfRElSKS9jdGR0LmM7JWNjb21waWxlcnByZWZpeCUgJChUT09MX1BBVEgpY2NwcGMgJURlYnVnTW9kZUZsYWdzJSAkKENDX0FSQ0hfU1BFQykgLWZkb2xsYXJzLWluLWlkZW50aWZpZXJzIC1XYWxsICQoQURERURfQ0ZMQUdTKSAlSW5jbHVkZXMlICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpICAtbyAkKE9CSl9ESVIpL2N0ZHQubyAtYyAkKE9CSl9ESVIpL2N0ZHQuYzslbGlua2VycHJlZml4JSAkKFRPT0xfUEFUSCljY3BwYyAtciAtbm9zdGRsaWIgLVdsLC1YICVUb29sRmxhZ3MlIC1vICVPdXRGaWxlJSAkKE9CSl9ESVIpL2N0ZHQubyAlT2JqZWN0cyUgJUxpYnJhcmllcyUgJChMSUJQQVRIKSAkKExJQlMpICAkKEFEREVEX0xJQlBBVEgpICQoQURERURfTElCUykgJmFtcDsmYW1wOyBpZiBbICZxdW90OyQoRVhQQU5EX0RCRykmcXVvdDsgPSAmcXVvdDsxJnF1b3Q7IF07IHRoZW4gcGxpbmsgJnF1b3Q7JEAmcXVvdDs7ZmkiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfGNtZHxQUEM2MDNkaWFiIiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OztybSAtZiAlT3V0RmlsZSU7ZGR1bXAgLU5nICVPYmplY3RzJSAlTGlicmFyaWVzJSB8IHRjbHNoICQoV0lORF9CQVNFKS9ob3N0L3Jlc291cmNlL2h1dGlscy90Y2wvbXVuY2gudGNsIC1jIHBwYyAmZ3Q7ICQoT0JKX0RJUikvY3RkdC5jOyVjY29tcGlsZXJwcmVmaXglICQoVE9PTF9QQVRIKWRjYyAlRGVidWdNb2RlRmxhZ3MlICQoQ0NfQVJDSF9TUEVDKSAtWGRvbGxhci1pbi1pZGVudCAtWGZvcmNlLWRlY2xhcmF0aW9ucyAkKEFEREVEX0NGTEFHUykgJUluY2x1ZGVzJSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAgLW8gJChPQkpfRElSKS9jdGR0Lm8gLWMgJChPQkpfRElSKS9jdGR0LmM7JWxpbmtlcnByZWZpeCUgJChUT09MX1BBVEgpZGxkIC10UFBDNjAzRkg6dnh3b3JrczYzIC1YIC1yNSAlVG9vbEZsYWdzJSAtbyAlT3V0RmlsZSUgJChPQkpfRElSKS9jdGR0Lm8gJU9iamVjdHMlICVMaWJyYXJpZXMlICQoTElCUEFUSCkgJChMSUJTKSAgJChBRERFRF9MSUJQQVRIKSAkKEFEREVEX0xJQlMpICZhbXA7JmFtcDsgaWYgWyAmcXVvdDskKEVYUEFORF9EQkcpJnF1b3Q7ID0gJnF1b3Q7MSZxdW90OyBdOyB0aGVuIHBsaW5rICZxdW90OyRAJnF1b3Q7O2ZpIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxjbWR8UFBDNjAzZ251IiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OztybSAtZiAlT3V0RmlsZSU7bm1wcGMgJU9iamVjdHMlICVMaWJyYXJpZXMlIHwgdGNsc2ggJChXSU5EX0JBU0UpL2hvc3QvcmVzb3VyY2UvaHV0aWxzL3RjbC9tdW5jaC50Y2wgLWMgcHBjICZndDsgJChPQkpfRElSKS9jdGR0LmM7JWNjb21waWxlcnByZWZpeCUgJChUT09MX1BBVEgpY2NwcGMgJURlYnVnTW9kZUZsYWdzJSAkKENDX0FSQ0hfU1BFQykgLWZkb2xsYXJzLWluLWlkZW50aWZpZXJzIC1XYWxsICQoQURERURfQ0ZMQUdTKSAlSW5jbHVkZXMlICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpICAtbyAkKE9CSl9ESVIpL2N0ZHQubyAtYyAkKE9CSl9ESVIpL2N0ZHQuYzslbGlua2VycHJlZml4JSAkKFRPT0xfUEFUSCljY3BwYyAtciAtbm9zdGRsaWIgLVdsLC1YICVUb29sRmxhZ3MlIC1vICVPdXRGaWxlJSAkKE9CSl9ESVIpL2N0ZHQubyAlT2JqZWN0cyUgJUxpYnJhcmllcyUgJChMSUJQQVRIKSAkKExJQlMpICAkKEFEREVEX0xJQlBBVEgpICQoQURERURfTElCUykgJmFtcDsmYW1wOyBpZiBbICZxdW90OyQoRVhQQU5EX0RCRykmcXVvdDsgPSAmcXVvdDsxJnF1b3Q7IF07IHRoZW4gcGxpbmsgJnF1b3Q7JEAmcXVvdDs7ZmkiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfGRiZ0ZsYWdzfFBQQzMyZGlhYiIgdmFsdWU9Ii1nIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxkYmdGbGFnc3xQUEMzMmdudSIgdmFsdWU9Ii1nIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxkYmdGbGFnc3xQUEM2MDNkaWFiIiB2YWx1ZT0iLWciLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfGRiZ0ZsYWdzfFBQQzYwM2dudSIgdmFsdWU9Ii1nIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxkZXJpdmVkU2lnc3xQUEMzMmRpYWIiIHZhbHVlPSIqLm91dCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8ZGVyaXZlZFNpZ3N8UFBDMzJnbnUiIHZhbHVlPSIqLm91dCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8ZGVyaXZlZFNpZ3N8UFBDNjAzZGlhYiIgdmFsdWU9Iioub3V0Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxkZXJpdmVkU2lnc3xQUEM2MDNnbnUiIHZhbHVlPSIqLm91dCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8ZmxhZ3N8UFBDMzJkaWFiIiB2YWx1ZT0iLXI0Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxmbGFnc3xQUEMzMmdudSIgdmFsdWU9Ii1UICQoV0lORF9CQVNFKS90YXJnZXQvaC90b29sL2dudS9sZHNjcmlwdHMvbGluay5PVVQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfGZsYWdzfFBQQzYwM2RpYWIiIHZhbHVlPSItcjQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfGZsYWdzfFBQQzYwM2dudSIgdmFsdWU9Ii1UICQoV0lORF9CQVNFKS90YXJnZXQvaC90b29sL2dudS9sZHNjcmlwdHMvbGluay5PVVQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfG5vbkRiZ0ZsYWdzfFBQQzMyZGlhYiIgdmFsdWU9Ii1YTyAtWHNpemUtb3B0Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxub25EYmdGbGFnc3xQUEMzMmdudSIgdmFsdWU9Ii1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfG5vbkRiZ0ZsYWdzfFBQQzYwM2RpYWIiIHZhbHVlPSItWE8gLVhzaXplLW9wdCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8bm9uRGJnRmxhZ3N8UFBDNjAzZ251IiB2YWx1ZT0iLU8yIC1mc3RyZW5ndGgtcmVkdWNlIC1mbm8tYnVpbHRpbiIvPg0KKyAgICAgICAgICAgIDxib29sZWFuQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfG9iamVjdCIgdmFsdWU9ImZhbHNlIi8+DQorICAgICAgICAgICAgPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8cGFzc0FibGUiIHZhbHVlPSJmYWxzZSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8c2lncyIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxjbWR8UFBDMzJkaWFiIiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OzslbGlua2VycHJlZml4JSAkKFRPT0xfUEFUSClkbGQgLXRQUENGSDp2eHdvcmtzNjMgLVggLXI1ICVUb29sRmxhZ3MlIC1vICVPdXRGaWxlJSAlT2JqZWN0cyUgJChMSUJQQVRIKSAkKExJQlMpICQoQURERURfTElCUEFUSCkgJChBRERFRF9MSUJTKSAgJmFtcDsmYW1wOyBpZiBbICZxdW90OyQoRVhQQU5EX0RCRykmcXVvdDsgPSAmcXVvdDsxJnF1b3Q7IF07IHRoZW4gcGxpbmsgJnF1b3Q7JEAmcXVvdDs7ZmkiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8Y21kfFBQQzMyZ251IiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OzslbGlua2VycHJlZml4JSAkKFRPT0xfUEFUSCljY3BwYyAtciAtbm9zdGRsaWIgLVdsLC1YICVUb29sRmxhZ3MlIC1vICVPdXRGaWxlJSAlT2JqZWN0cyUgJChMSUJQQVRIKSAkKExJQlMpICQoQURERURfTElCUEFUSCkgJChBRERFRF9MSUJTKSAgJmFtcDsmYW1wOyBpZiBbICZxdW90OyQoRVhQQU5EX0RCRykmcXVvdDsgPSAmcXVvdDsxJnF1b3Q7IF07IHRoZW4gcGxpbmsgJnF1b3Q7JEAmcXVvdDs7ZmkiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8Y21kfFBQQzYwM2RpYWIiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7OyVsaW5rZXJwcmVmaXglICQoVE9PTF9QQVRIKWRsZCAtdFBQQzYwM0ZIOnZ4d29ya3M2MyAtWCAtcjUgJVRvb2xGbGFncyUgLW8gJU91dEZpbGUlICVPYmplY3RzJSAkKExJQlBBVEgpICQoTElCUykgJChBRERFRF9MSUJQQVRIKSAkKEFEREVEX0xJQlMpICAmYW1wOyZhbXA7IGlmIFsgJnF1b3Q7JChFWFBBTkRfREJHKSZxdW90OyA9ICZxdW90OzEmcXVvdDsgXTsgdGhlbiBwbGluayAmcXVvdDskQCZxdW90OztmaSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxjbWR8UFBDNjAzZ251IiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OzslbGlua2VycHJlZml4JSAkKFRPT0xfUEFUSCljY3BwYyAtciAtbm9zdGRsaWIgLVdsLC1YICVUb29sRmxhZ3MlIC1vICVPdXRGaWxlJSAlT2JqZWN0cyUgJChMSUJQQVRIKSAkKExJQlMpICQoQURERURfTElCUEFUSCkgJChBRERFRF9MSUJTKSAgJmFtcDsmYW1wOyBpZiBbICZxdW90OyQoRVhQQU5EX0RCRykmcXVvdDsgPSAmcXVvdDsxJnF1b3Q7IF07IHRoZW4gcGxpbmsgJnF1b3Q7JEAmcXVvdDs7ZmkiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8ZGJnRmxhZ3N8UFBDMzJkaWFiIiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfGRiZ0ZsYWdzfFBQQzMyZ251IiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfGRiZ0ZsYWdzfFBQQzYwM2RpYWIiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8ZGJnRmxhZ3N8UFBDNjAzZ251IiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfGRlcml2ZWRTaWdzfFBQQzMyZGlhYiIgdmFsdWU9IioubyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxkZXJpdmVkU2lnc3xQUEMzMmdudSIgdmFsdWU9IioubyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxkZXJpdmVkU2lnc3xQUEM2MDNkaWFiIiB2YWx1ZT0iKi5vIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfGRlcml2ZWRTaWdzfFBQQzYwM2dudSIgdmFsdWU9IioubyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxmbGFnc3xQUEMzMmRpYWIiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8ZmxhZ3N8UFBDMzJnbnUiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8ZmxhZ3N8UFBDNjAzZGlhYiIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxmbGFnc3xQUEM2MDNnbnUiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8bm9uRGJnRmxhZ3N8UFBDMzJkaWFiIiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfG5vbkRiZ0ZsYWdzfFBQQzMyZ251IiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfG5vbkRiZ0ZsYWdzfFBQQzYwM2RpYWIiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8bm9uRGJnRmxhZ3N8UFBDNjAzZ251IiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxvYmplY3QiIHZhbHVlPSJmYWxzZSIvPg0KKyAgICAgICAgICAgIDxib29sZWFuQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8cGFzc0FibGUiIHZhbHVlPSJ0cnVlIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfHNpZ3MiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfGNtZCIgdmFsdWU9IiVtYWtlcHJlZml4JSBtYWtlIC0tbm8tcHJpbnQtZGlyZWN0b3J5Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xkZWZhdWx0U3BlYyIgdmFsdWU9IlBQQzYwM2dudSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98cmVkaXJEaXJ8UFBDMzJkaWFiIiB2YWx1ZT0iUFBDMzJkaWFiIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xyZWRpckRpcnxQUEMzMmdudSIgdmFsdWU9IlBQQzMyZ251Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xyZWRpckRpcnxQUEM2MDNkaWFiIiB2YWx1ZT0iUFBDNjAzZGlhYiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98cmVkaXJEaXJ8UFBDNjAzZ251IiB2YWx1ZT0iUFBDNjAzZ251Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xyZWRpclJvb3QiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8bGlzdEF0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xzcGVjcyI+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9IlBQQzMyZGlhYiIvPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSJQUEMzMmdudSIvPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSJQUEM2MDNkaWFiIi8+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9IlBQQzYwM2dudSIvPg0KKyAgICAgICAgICAgIDwvbGlzdEF0dHJpYnV0ZT4NCisgICAgICAgICAgICA8aW50QXR0cmlidXRlIGtleT0iQnVpbGRTdXBwb3J0RW5hYmxlZCIgdmFsdWU9IjEiLz4NCisgICAgICAgICAgICA8bGlzdEF0dHJpYnV0ZSBrZXk9IkJ1aWxkU3VwcG9ydEZvckJ1aWxkU3BlY3MiPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSJQUEM2MDNnbnUiLz4NCisgICAgICAgICAgICA8L2xpc3RBdHRyaWJ1dGU+DQorICAgICAgICAgICAgPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJCdWlsZFRhcmdldENlbnRyaWMiIHZhbHVlPSJ0cnVlIi8+DQorICAgICAgICA8L21hcEF0dHJpYnV0ZT4NCisgICAgPC9hdHRyaWJ1dGVzPg0KKyAgICA8YnVpbGR0YXJnZXRzPg0KKyAgICAgICAgPGJ1aWxkdGFyZ2V0IGJ1aWxkdG9vbD0iTGlua2VyIiBuYW1lPSJEYXNoYm9hcmREYXRhRXhhbXBsZSIgcGFzc2VkPSJmYWxzZSIgdGFyZ2V0bmFtZT0iRGFzaGJvYXJkRGF0YUV4YW1wbGUiPg0KKyAgICAgICAgICAgIDxjb250ZW50cz4NCisgICAgICAgICAgICAgICAgPGJ1aWxkdGFyZ2V0cmVmZXJlbmNlIG5hbWU9Ii9EYXNoYm9hcmREYXRhRXhhbXBsZS9EYXNoYm9hcmREYXRhRXhhbXBsZV9wYXJ0aWFsSW1hZ2UiLz4NCisgICAgICAgICAgICA8L2NvbnRlbnRzPg0KKyAgICAgICAgPC9idWlsZHRhcmdldD4NCisgICAgICAgIDxidWlsZHRhcmdldCBidWlsZHRvb2w9IlBhcnRpYWwgSW1hZ2UgTGlua2VyIiBuYW1lPSJEYXNoYm9hcmREYXRhRXhhbXBsZV9wYXJ0aWFsSW1hZ2UiIHBhc3NlZD0idHJ1ZSIgdGFyZ2V0bmFtZT0iRGFzaGJvYXJkRGF0YUV4YW1wbGVfcGFydGlhbEltYWdlIj4NCisgICAgICAgICAgICA8Y29udGVudHM+DQorICAgICAgICAgICAgICAgIDxmb2xkZXIgbmFtZT0iL0Rhc2hib2FyZERhdGFFeGFtcGxlIiByZWN1cnNpdmU9InRydWUiLz4NCisgICAgICAgICAgICA8L2NvbnRlbnRzPg0KKyAgICAgICAgPC9idWlsZHRhcmdldD4NCisgICAgPC9idWlsZHRhcmdldHM+DQorPC93cnhtbD4NCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vRGFzaGJvYXJkRGF0YUV4YW1wbGUvRGFzaGJvYXJkRGF0YUV4YW1wbGUuY3BwIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvdnh3b3Jrcy02LjMvdGFyZ2V0L3NyYy9kZW1vL0Rhc2hib2FyZERhdGFFeGFtcGxlL0Rhc2hib2FyZERhdGFFeGFtcGxlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOTdjNTA4Ci0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvdnh3b3Jrcy02LjMvdGFyZ2V0L3NyYy9kZW1vL0Rhc2hib2FyZERhdGFFeGFtcGxlL0Rhc2hib2FyZERhdGFFeGFtcGxlLmNwcApAQCAtMCwwICsxLDM1IEBACisjaW5jbHVkZSAiV1BJTGliLmgiDQorI2luY2x1ZGUgIkRhc2hib2FyZERhdGFGb3JtYXQuaCINCisNCisvKioNCisgKiBUaGlzIGlzIGEgZGVtbyBwcm9ncmFtIHNob3dpbmcgdGhlIHVzZSBvZiB0aGUgRGFzaGJvYXJkIGRhdGEgcGFja2luZyBjbGFzcy4NCisgKi8gDQorY2xhc3MgRGFzaGJvYXJkRGF0YUV4YW1wbGUgOiBwdWJsaWMgU2ltcGxlUm9ib3QNCit7DQorCURhc2hib2FyZERhdGFGb3JtYXQgZGFzaGJvYXJkRGF0YUZvcm1hdDsNCisNCitwdWJsaWM6DQorCURhc2hib2FyZERhdGFFeGFtcGxlKHZvaWQpDQorCXsNCisJCUdldFdhdGNoZG9nKCkuU2V0RXhwaXJhdGlvbigwLjEpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBSdW5zIHRoZSBtb3RvcnMgd2l0aCBhcmNhZGUgc3RlZXJpbmcuIA0KKwkgKi8NCisJdm9pZCBSb2JvdE1haW4odm9pZCkNCisJew0KKwkJR2V0V2F0Y2hkb2coKS5TZXRFbmFibGVkKGZhbHNlKTsNCisJCQ0KKwkJd2hpbGUgKHRydWUpDQorCQl7DQorCQkJR2V0V2F0Y2hkb2coKS5GZWVkKCk7DQorCQkJZGFzaGJvYXJkRGF0YUZvcm1hdC5TZW5kSU9Qb3J0RGF0YSgpOw0KKwkJCWRhc2hib2FyZERhdGFGb3JtYXQuU2VuZFZpc2lvbkRhdGEoKTsNCisJCQlXYWl0KDEuMCk7DQorCQl9DQorCX0NCit9Ow0KKw0KK1NUQVJUX1JPQk9UX0NMQVNTKERhc2hib2FyZERhdGFFeGFtcGxlKTsNCisNCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vRGFzaGJvYXJkRGF0YUV4YW1wbGUvRGFzaGJvYXJkRGF0YUZvcm1hdC5jcHAgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vRGFzaGJvYXJkRGF0YUV4YW1wbGUvRGFzaGJvYXJkRGF0YUZvcm1hdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWU4MDU4YwotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9EYXNoYm9hcmREYXRhRXhhbXBsZS9EYXNoYm9hcmREYXRhRm9ybWF0LmNwcApAQCAtMCwwICsxLDE4MiBAQAorI2luY2x1ZGUgIkRhc2hib2FyZERhdGFGb3JtYXQuaCINCisNCitEYXNoYm9hcmREYXRhRm9ybWF0OjpEYXNoYm9hcmREYXRhRm9ybWF0KHZvaWQpDQorew0KKwlhbmFsb2dNb2R1bGUxID0gQW5hbG9nTW9kdWxlOjpHZXRJbnN0YW5jZSgxKTsNCisJYW5hbG9nTW9kdWxlMiA9IEFuYWxvZ01vZHVsZTo6R2V0SW5zdGFuY2UoMik7DQorCWRpZ2l0YWxNb2R1bGUxID0gRGlnaXRhbE1vZHVsZTo6R2V0SW5zdGFuY2UoMSk7DQorCWRpZ2l0YWxNb2R1bGUyID0gRGlnaXRhbE1vZHVsZTo6R2V0SW5zdGFuY2UoMik7DQorfQ0KK0Rhc2hib2FyZERhdGFGb3JtYXQ6On5EYXNoYm9hcmREYXRhRm9ybWF0KCkNCit7DQorfQ0KKw0KK3ZvaWQgRGFzaGJvYXJkRGF0YUZvcm1hdDo6U2VuZFZpc2lvbkRhdGEoKQ0KK3sNCisJRGFzaGJvYXJkICZkYXNoID0gRHJpdmVyU3RhdGlvbjo6R2V0SW5zdGFuY2UoKS0+R2V0SGlnaFByaW9yaXR5RGFzaGJvYXJkUGFja2VyKCk7DQorCWRhc2guQWRkQ2x1c3RlcigpOyAvLyB3aXJlICgyIGVsZW1lbnRzKQ0KKwl7DQorCQlkYXNoLkFkZENsdXN0ZXIoKTsgLy8gdHJhY2tpbmcgZGF0YQ0KKwkJew0KKwkJCWRhc2guQWRkRG91YmxlKDEuMCk7IC8vIEpveXN0aWNrIFgNCisJCQlkYXNoLkFkZERvdWJsZSgxMzUuMCk7IC8vIGFuZ2xlDQorCQkJZGFzaC5BZGREb3VibGUoMy4wKTsgLy8gYW5ndWxhciByYXRlDQorCQkJZGFzaC5BZGREb3VibGUoNS4wKTsgLy8gb3RoZXIgWA0KKwkJfQ0KKwkJZGFzaC5GaW5hbGl6ZUNsdXN0ZXIoKTsNCisJCWRhc2guQWRkQ2x1c3RlcigpOyAvLyB0YXJnZXQgSW5mbyAoMiBlbGVtZW50cykNCisJCXsNCisJCQlkYXNoLkFkZENsdXN0ZXIoKTsgLy8gdGFyZ2V0cw0KKwkJCXsNCisJCQkJZGFzaC5BZGREb3VibGUoMTAwLjApOyAvLyB0YXJnZXQgc2NvcmUNCisJCQkJZGFzaC5BZGRDbHVzdGVyKCk7IC8vIENpcmNsZSBEZXNjcmlwdGlvbiAoNSBlbGVtZW50cykNCisJCQkJew0KKwkJCQkJZGFzaC5BZGRDbHVzdGVyKCk7IC8vIFBvc2l0aW9uICgyIGVsZW1lbnRzKQ0KKwkJCQkJew0KKwkJCQkJCWRhc2guQWRkRG91YmxlKDMwLjApOyAvLyBYDQorCQkJCQkJZGFzaC5BZGREb3VibGUoNTAuMCk7IC8vIFkNCisJCQkJCX0NCisJCQkJCWRhc2guRmluYWxpemVDbHVzdGVyKCk7DQorCQkJCX0NCisJCQkJZGFzaC5GaW5hbGl6ZUNsdXN0ZXIoKTsgLy8gUG9zaXRpb24NCisJCQkJZGFzaC5BZGREb3VibGUoNDUuMCk7IC8vIEFuZ2xlDQorCQkJCWRhc2guQWRkRG91YmxlKDIxLjApOyAvLyBNYWpvciBSYWRpdXMNCisJCQkJZGFzaC5BZGREb3VibGUoMTUuMCk7IC8vIE1pbm9yIFJhZGl1cw0KKwkJCQlkYXNoLkFkZERvdWJsZSgzMjQuMCk7IC8vIFJhdyBzY29yZQ0KKwkJCX0NCisJCQlkYXNoLkZpbmFsaXplQ2x1c3RlcigpOyAvLyB0YXJnZXRzDQorCQl9DQorCQlkYXNoLkZpbmFsaXplQ2x1c3RlcigpOyAvLyB0YXJnZXQgSW5mbw0KKwl9DQorCWRhc2guRmluYWxpemVDbHVzdGVyKCk7IC8vIHdpcmUNCisJZGFzaC5GaW5hbGl6ZSgpOw0KK30NCisNCit2b2lkIERhc2hib2FyZERhdGFGb3JtYXQ6OlNlbmRJT1BvcnREYXRhKCkNCit7DQorCURhc2hib2FyZCAmZGFzaCA9IERyaXZlclN0YXRpb246OkdldEluc3RhbmNlKCktPkdldExvd1ByaW9yaXR5RGFzaGJvYXJkUGFja2VyKCk7DQorCWRhc2guQWRkQ2x1c3RlcigpOw0KKwl7DQorCQlkYXNoLkFkZENsdXN0ZXIoKTsNCisJCXsgLy9hbmFsb2cgbW9kdWxlcyANCisJCQlkYXNoLkFkZENsdXN0ZXIoKTsNCisJCQl7DQorCQkJCWlmIChhbmFsb2dNb2R1bGUxICE9IE5VTEwpDQorCQkJCXsNCisJCQkJCWZvciAoaW50IGkgPSAxOyBpIDw9IDg7IGkrKykNCisJCQkJCXsNCisJCQkJCQlkYXNoLkFkZEZsb2F0KChmbG9hdClhbmFsb2dNb2R1bGUxLT5HZXRBdmVyYWdlVm9sdGFnZShpKSk7DQorCQkJCQl9DQorCQkJCX0NCisJCQkJZWxzZQ0KKwkJCQl7DQorCQkJCQlmb3IgKGludCBpID0gMTsgaSA8PSA4OyBpKyspDQorCQkJCQl7DQorCQkJCQkJZGFzaC5BZGRGbG9hdCgwLjApOw0KKwkJCQkJfQ0KKwkJCQl9DQorCQkJfQ0KKwkJCWRhc2guRmluYWxpemVDbHVzdGVyKCk7DQorCQkJZGFzaC5BZGRDbHVzdGVyKCk7DQorCQkJew0KKwkJCQlpZiAoYW5hbG9nTW9kdWxlMiAhPSBOVUxMKQ0KKwkJCQl7DQorCQkJCQlmb3IgKGludCBpID0gMTsgaSA8PSA4OyBpKyspDQorCQkJCQl7DQorCQkJCQkJZGFzaC5BZGRGbG9hdCgoZmxvYXQpYW5hbG9nTW9kdWxlMi0+R2V0QXZlcmFnZVZvbHRhZ2UoaSkpOw0KKwkJCQkJfQ0KKwkJCQl9DQorCQkJCWVsc2UNCisJCQkJew0KKwkJCQkJZm9yIChpbnQgaSA9IDE7IGkgPD0gODsgaSsrKQ0KKwkJCQkJew0KKwkJCQkJCWRhc2guQWRkRmxvYXQoMC4wKTsNCisJCQkJCX0NCisJCQkJfQ0KKwkJCX0NCisJCQlkYXNoLkZpbmFsaXplQ2x1c3RlcigpOw0KKwkJfQ0KKwkJZGFzaC5GaW5hbGl6ZUNsdXN0ZXIoKTsNCisNCisJCWRhc2guQWRkQ2x1c3RlcigpOw0KKwkJeyAvL2RpZ2l0YWwgbW9kdWxlcw0KKwkJCWRhc2guQWRkQ2x1c3RlcigpOw0KKwkJCXsNCisJCQkJZGFzaC5BZGRDbHVzdGVyKCk7DQorCQkJCXsNCisJCQkJCWlmIChkaWdpdGFsTW9kdWxlMSAhPSBOVUxMKQ0KKwkJCQkJew0KKwkJCQkJCWRhc2guQWRkVTgoZGlnaXRhbE1vZHVsZTEtPkdldFJlbGF5Rm9yd2FyZCgpKTsNCisJCQkJCQlkYXNoLkFkZFU4KGRpZ2l0YWxNb2R1bGUxLT5HZXRSZWxheVJldmVyc2UoKSk7DQorCQkJCQkJZGFzaC5BZGRVMTYoKHNob3J0KWRpZ2l0YWxNb2R1bGUxLT5HZXRESU8oKSk7DQorCQkJCQkJZGFzaC5BZGRVMTYoKHNob3J0KWRpZ2l0YWxNb2R1bGUxLT5HZXRESU9EaXJlY3Rpb24oKSk7DQorCQkJCQkJZGFzaC5BZGRDbHVzdGVyKCk7DQorCQkJCQkJew0KKwkJCQkJCQlmb3IgKGludCBpID0gMTsgaSA8PSAxMDsgaSsrKQ0KKwkJCQkJCQl7DQorCQkJCQkJCQlkYXNoLkFkZFU4KCh1bnNpZ25lZCBjaGFyKWRpZ2l0YWxNb2R1bGUxLT5HZXRQV00oaSkpOw0KKwkJCQkJCQl9DQorCQkJCQkJfQ0KKwkJCQkJfQ0KKwkJCQkJZWxzZQ0KKwkJCQkJew0KKwkJCQkJCWRhc2guQWRkVTgoMCk7DQorCQkJCQkJZGFzaC5BZGRVOCgwKTsNCisJCQkJCQlkYXNoLkFkZFUxNigwKTsNCisJCQkJCQlkYXNoLkFkZFUxNigwKTsNCisJCQkJCQlkYXNoLkFkZENsdXN0ZXIoKTsNCisJCQkJCQl7DQorCQkJCQkJCWZvciAoaW50IGkgPSAxOyBpIDw9IDEwOyBpKyspDQorCQkJCQkJCQlkYXNoLkFkZFU4KDApOw0KKwkJCQkJCX0NCisJCQkJCX0NCisJCQkJCWRhc2guRmluYWxpemVDbHVzdGVyKCk7DQorCQkJCX0NCisJCQkJZGFzaC5GaW5hbGl6ZUNsdXN0ZXIoKTsNCisJCQl9DQorCQkJZGFzaC5GaW5hbGl6ZUNsdXN0ZXIoKTsNCisNCisJCQlkYXNoLkFkZENsdXN0ZXIoKTsNCisJCQl7DQorCQkJCWRhc2guQWRkQ2x1c3RlcigpOw0KKwkJCQl7DQorCQkJCQlpZiAoZGlnaXRhbE1vZHVsZTIgIT0gTlVMTCkNCisJCQkJCXsNCisJCQkJCQlkYXNoLkFkZFU4KGRpZ2l0YWxNb2R1bGUyLT5HZXRSZWxheUZvcndhcmQoKSk7DQorCQkJCQkJZGFzaC5BZGRVOChkaWdpdGFsTW9kdWxlMi0+R2V0UmVsYXlGb3J3YXJkKCkpOw0KKwkJCQkJCWRhc2guQWRkVTE2KChzaG9ydClkaWdpdGFsTW9kdWxlMi0+R2V0RElPKCkpOw0KKwkJCQkJCWRhc2guQWRkVTE2KGRpZ2l0YWxNb2R1bGUyLT5HZXRESU9EaXJlY3Rpb24oKSk7DQorCQkJCQkJZGFzaC5BZGRDbHVzdGVyKCk7DQorCQkJCQkJew0KKwkJCQkJCQlmb3IgKGludCBpID0gMTsgaSA8PSAxMDsgaSsrKQ0KKwkJCQkJCQl7DQorCQkJCQkJCQlkYXNoLkFkZFU4KCh1bnNpZ25lZCBjaGFyKWRpZ2l0YWxNb2R1bGUyLT5HZXRQV00oaSkpOw0KKwkJCQkJCQl9DQorCQkJCQkJfQ0KKwkJCQkJfQ0KKwkJCQkJZWxzZQ0KKwkJCQkJew0KKwkJCQkJCWRhc2guQWRkVTgoMCk7DQorCQkJCQkJZGFzaC5BZGRVOCgwKTsNCisJCQkJCQlkYXNoLkFkZFUxNigwKTsNCisJCQkJCQlkYXNoLkFkZFUxNigwKTsNCisJCQkJCQlkYXNoLkFkZENsdXN0ZXIoKTsNCisJCQkJCQl7DQorCQkJCQkJCWZvciAoaW50IGkgPSAxOyBpIDw9IDEwOyBpKyspDQorCQkJCQkJCQlkYXNoLkFkZFU4KDApOw0KKwkJCQkJCX0NCisJCQkJCX0NCisJCQkJCWRhc2guRmluYWxpemVDbHVzdGVyKCk7DQorCQkJCX0NCisJCQkJZGFzaC5GaW5hbGl6ZUNsdXN0ZXIoKTsNCisJCQl9DQorCQkJZGFzaC5GaW5hbGl6ZUNsdXN0ZXIoKTsNCisJCX0NCisJCWRhc2guRmluYWxpemVDbHVzdGVyKCk7DQorDQorCQkvLyBDYW4ndCByZWFkIHNvbGVub2lkcyB3aXRob3V0IGFuIGluc3RhbmNlIG9mIHRoZSBvYmplY3QNCisJCWRhc2guQWRkVTgoKGNoYXIpIDApOw0KKwl9DQorCWRhc2guRmluYWxpemVDbHVzdGVyKCk7DQorCWRhc2guRmluYWxpemUoKTsNCit9DQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvdnh3b3Jrcy02LjMvdGFyZ2V0L3NyYy9kZW1vL0Rhc2hib2FyZERhdGFFeGFtcGxlL0Rhc2hib2FyZERhdGFGb3JtYXQuaCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9EYXNoYm9hcmREYXRhRXhhbXBsZS9EYXNoYm9hcmREYXRhRm9ybWF0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2ZkZWU4YgotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9EYXNoYm9hcmREYXRhRXhhbXBsZS9EYXNoYm9hcmREYXRhRm9ybWF0LmgKQEAgLTAsMCArMSwzMiBAQAorI2lmbmRlZiBfX0Rhc2hib2FyZERhdGFGb3JtYXRfaF9fDQorI2RlZmluZSBfX0Rhc2hib2FyZERhdGFGb3JtYXRfaF9fDQorDQorI2luY2x1ZGUgIldQSUxpYi5oIg0KKw0KKy8qKg0KKyAqIFRoaXMgY2xhc3MgaXMganVzdCBhbiBleGFtcGxlIG9mIG9uZSB3YXkgeW91IGNvdWxkIG9yZ2FuaXplIHRoZSBkYXRhIHRoYXQgeW91IHdhbnQNCisgKiB0byBzZW5kIHRvIHRoZSBkYXNoYm9hcmQuICBUaGUgUGFja0FuZFNlbmQgbWV0aG9kIGRvZXMgYWxsIHRoZSB3b3JrLiAgWW91IGNvdWxkDQorICogcHV0IHRoZSBwYWNraW5nIGNvZGUgZGlyZWN0bHkgaW4geW91ciBjb2RlLCBidXQgdGhpcyBtb2RlbCBwcm90ZWN0cyB5b3UgZnJvbQ0KKyAqIHBhY2tpbmcgZGF0YSBpbiB0aGUgd3Jvbmcgb3JkZXIgdGhyb3VnaG91dCB5b3VyIGNvZGUuDQorICogDQorICogVGhlIGRhdGEgYW5kIHRoZSBmb3JtYXQgb2YgdGhpcyBzdHJ1Y3R1cmUgYXJlIGp1c3QgYW4gZXhhbXBsZS4gIEl0IGlzIHdyaXR0ZW4gdG8NCisgKiBtYXRjaCB0aGUgaW5pdGlhbCBkYXRhIGZvcm1hdCBleHBlY3RlZCBieSB0aGUgTGFiVklFVyBEYXNoYm9hcmQgcHJvamVjdC4gIEZlZWwgZnJlZQ0KKyAqIHRvIGFkZCBkYXRhIGVsZW1lbnRzIG9yIHJlbW92ZSB0aGVtLiAgSnVzdCByZW1lbWJlciB0byBtYWtlIGFueSBjaGFuZ2VzIGNvbnNpc3RlbnRseQ0KKyAqIGJldHdlZW4gdGhlIExhYlZJRVcgIkRhc2hib2FyZCBEYXRhdHlwZSIgYW5kIHRoZSBkYXRhIHRoYXQgZ2V0cyBwYWNrZWQgYnkgdGhpcyBjbGFzcy4NCisgKi8NCitjbGFzcyBEYXNoYm9hcmREYXRhRm9ybWF0IDogcHVibGljIFNlbnNvckJhc2UNCit7DQorcHVibGljOg0KKwlEYXNoYm9hcmREYXRhRm9ybWF0KHZvaWQpOw0KKwl2aXJ0dWFsIH5EYXNoYm9hcmREYXRhRm9ybWF0KCk7DQorCXZvaWQgU2VuZElPUG9ydERhdGEodm9pZCk7DQorCXZvaWQgU2VuZFZpc2lvbkRhdGEodm9pZCk7DQorcHJpdmF0ZToNCisJRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKERhc2hib2FyZERhdGFGb3JtYXQpOw0KKwlBbmFsb2dNb2R1bGUgKmFuYWxvZ01vZHVsZTE7DQorCUFuYWxvZ01vZHVsZSAqYW5hbG9nTW9kdWxlMjsNCisJRGlnaXRhbE1vZHVsZSAqZGlnaXRhbE1vZHVsZTE7DQorCURpZ2l0YWxNb2R1bGUgKmRpZ2l0YWxNb2R1bGUyOw0KK307DQorDQorI2VuZGlmIC8vIF9fRGFzaGJvYXJkRGF0YUZvcm1hdF9oX18NCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vRGFzaGJvYXJkRGF0YUV4YW1wbGUvc2FtcGxlLnByb3BlcnRpZXMgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vRGFzaGJvYXJkRGF0YUV4YW1wbGUvc2FtcGxlLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWZjODk1ZQotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9EYXNoYm9hcmREYXRhRXhhbXBsZS9zYW1wbGUucHJvcGVydGllcwpAQCAtMCwwICsxLDIgQEAKK3Byb2plY3QudHlwZT1Eb3dubG9hZGFibGVLZXJuZWxNb2R1bGVQcm9qZWN0DQorcGxhdGZvcm0uaWQ9VnhXb3Jrcw0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9EYXNoYm9hcmREYXRhRXhhbXBsZS9zYW1wbGUudHh0IGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvdnh3b3Jrcy02LjMvdGFyZ2V0L3NyYy9kZW1vL0Rhc2hib2FyZERhdGFFeGFtcGxlL3NhbXBsZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTM1YTNjZQotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9EYXNoYm9hcmREYXRhRXhhbXBsZS9zYW1wbGUudHh0CkBAIC0wLDAgKzEsNyBAQAorRlJDIERhc2hib2FyZCBEYXRhIEV4YW1wbGUNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKw0KK1RoaXMgZXhhbXBsZSBzaG93cyBob3cgdG8gc2VuZCBkYXRhIHRvIGEgZGFzaGJvYXJkIGFwcGxpY2F0aW9uIHJ1bm5pbmcgb24gYSBsYXB0b3ANCitjb25uZWN0ZWQgdG8gdGhlIGRyaXZlciBzdGF0aW9uLg0KKw0KK1RoaXMgaXMgdGhlIG9ubHkgbWV0aG9kIG9mIGRhdGEgY29tbXVuaWNhdGlvbiB0aGF0IHdpbGwgYmUgcG9zc2libGUgZHVyaW5nIGNvbXBldGl0aW9uLgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9EZWZhdWx0Um9ib3QvLmNwcm9qZWN0IGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvdnh3b3Jrcy02LjMvdGFyZ2V0L3NyYy9kZW1vL0RlZmF1bHRSb2JvdC8uY3Byb2plY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWNkNGY0YwotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9EZWZhdWx0Um9ib3QvLmNwcm9qZWN0CkBAIC0wLDAgKzEsMzAgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQorPD9maWxlVmVyc2lvbiA0LjAuMD8+DQorDQorPGNwcm9qZWN0Pg0KKzxzdG9yYWdlTW9kdWxlIG1vZHVsZUlkPSJvcmcuZWNsaXBzZS5jZHQuY29yZS5zZXR0aW5ncyI+DQorPGNjb25maWd1cmF0aW9uIGlkPSJvcmcuZWNsaXBzZS5jZHQuY29yZS5kZWZhdWx0LmNvbmZpZy4xMTM1NjIzMzg4Ij4NCis8c3RvcmFnZU1vZHVsZSBidWlsZFN5c3RlbUlkPSJvcmcuZWNsaXBzZS5jZHQuY29yZS5kZWZhdWx0Q29uZmlnRGF0YVByb3ZpZGVyIiBpZD0ib3JnLmVjbGlwc2UuY2R0LmNvcmUuZGVmYXVsdC5jb25maWcuMTEzNTYyMzM4OCIgbW9kdWxlSWQ9Im9yZy5lY2xpcHNlLmNkdC5jb3JlLnNldHRpbmdzIiBuYW1lPSJDb25maWd1cmF0aW9uIj4NCis8ZXh0ZXJuYWxTZXR0aW5ncy8+DQorPGV4dGVuc2lvbnM+DQorPGV4dGVuc2lvbiBpZD0iY29tLndpbmRyaXZlci5pZGUuY29yZS5XUlNjYW5uZXJJbmZvUHJvdmlkZXIiIHBvaW50PSJvcmcuZWNsaXBzZS5jZHQuY29yZS5TY2FubmVySW5mb1Byb3ZpZGVyIi8+DQorPGV4dGVuc2lvbiBpZD0iY29tLndpbmRyaXZlci5pZGUuY29yZS5XUkVsZlBhcnNlclZ4V29ya3MiIHBvaW50PSJvcmcuZWNsaXBzZS5jZHQuY29yZS5CaW5hcnlQYXJzZXIiLz4NCis8ZXh0ZW5zaW9uIGlkPSJvcmcuZWNsaXBzZS5jZHQuY29yZS5HTlVfRUxGIiBwb2ludD0ib3JnLmVjbGlwc2UuY2R0LmNvcmUuQmluYXJ5UGFyc2VyIi8+DQorPC9leHRlbnNpb25zPg0KKzwvc3RvcmFnZU1vZHVsZT4NCis8c3RvcmFnZU1vZHVsZSBtb2R1bGVJZD0ib3JnLmVjbGlwc2UuY2R0LmNvcmUuZXh0ZXJuYWxTZXR0aW5ncyIvPg0KKzxzdG9yYWdlTW9kdWxlIG1vZHVsZUlkPSJvcmcuZWNsaXBzZS5jZHQuY29yZS5wYXRoZW50cnkiPg0KKzxwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSIiLz4NCis8cGF0aGVudHJ5IGtpbmQ9Im91dCIgcGF0aD0iIi8+DQorPHBhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9ImNvbS53aW5kcml2ZXIuaWRlLmNvcmUuV1JfQ09OVEFJTkVSIi8+DQorPHBhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9ImNvbS53aW5kcml2ZXIuaWRlLmNvcmUuYnVpbGQubW9kZWwuV1JfVVNFUkRFRklORURfQ09OVEFJTkVSIi8+DQorPC9zdG9yYWdlTW9kdWxlPg0KKzxzdG9yYWdlTW9kdWxlIG1vZHVsZUlkPSJzY2FubmVyQ29uZmlndXJhdGlvbiIvPg0KKzxzdG9yYWdlTW9kdWxlIG1vZHVsZUlkPSJ1c2VyZGVmaW5lZENvbnRhaW5lciI+DQorPGluZGV4QWxsRmlsZXMgdmFsdWU9ImZhbHNlIi8+DQorPGluaXRpYWxpemVkIHZhbHVlPSJ0cnVlIi8+DQorPC9zdG9yYWdlTW9kdWxlPg0KKzxzdG9yYWdlTW9kdWxlIG1vZHVsZUlkPSJvcmcuZWNsaXBzZS5jZHQuY29yZS5sYW5ndWFnZS5tYXBwaW5nIi8+DQorPC9jY29uZmlndXJhdGlvbj4NCis8L3N0b3JhZ2VNb2R1bGU+DQorPC9jcHJvamVjdD4NCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vRGVmYXVsdFJvYm90Ly5wcm9qZWN0IGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvdnh3b3Jrcy02LjMvdGFyZ2V0L3NyYy9kZW1vL0RlZmF1bHRSb2JvdC8ucHJvamVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NzBlNmMzCi0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvdnh3b3Jrcy02LjMvdGFyZ2V0L3NyYy9kZW1vL0RlZmF1bHRSb2JvdC8ucHJvamVjdApAQCAtMCwwICsxLDIwIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KKzxwcm9qZWN0RGVzY3JpcHRpb24+DQorCTxuYW1lPk9yaWdpbmFsRGVmYXVsdENvZGU8L25hbWU+DQorCTxjb21tZW50PjwvY29tbWVudD4NCisJPHByb2plY3RzPg0KKwk8L3Byb2plY3RzPg0KKwk8YnVpbGRTcGVjPg0KKwkJPGJ1aWxkQ29tbWFuZD4NCisJCQk8bmFtZT5jb20ud2luZHJpdmVyLmlkZS5jb3JlLndyYnVpbGRlcjwvbmFtZT4NCisJCQk8YXJndW1lbnRzPg0KKwkJCTwvYXJndW1lbnRzPg0KKwkJPC9idWlsZENvbW1hbmQ+DQorCTwvYnVpbGRTcGVjPg0KKwk8bmF0dXJlcz4NCisJCTxuYXR1cmU+Y29tLndpbmRyaXZlci5pZGUuY29yZS53cm5hdHVyZTwvbmF0dXJlPg0KKwkJPG5hdHVyZT5jb20ud2luZHJpdmVyLmlkZS5jb3JlLndyY29yZW5hdHVyZTwvbmF0dXJlPg0KKwkJPG5hdHVyZT5vcmcuZWNsaXBzZS5jZHQuY29yZS5jbmF0dXJlPC9uYXR1cmU+DQorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmNkdC5jb3JlLmNjbmF0dXJlPC9uYXR1cmU+DQorCTwvbmF0dXJlcz4NCis8L3Byb2plY3REZXNjcmlwdGlvbj4NCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vRGVmYXVsdFJvYm90Ly53cm1ha2VmaWxlIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvdnh3b3Jrcy02LjMvdGFyZ2V0L3NyYy9kZW1vL0RlZmF1bHRSb2JvdC8ud3JtYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMWRkN2Y4Ci0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvdnh3b3Jrcy02LjMvdGFyZ2V0L3NyYy9kZW1vL0RlZmF1bHRSb2JvdC8ud3JtYWtlZmlsZQpAQCAtMCwwICsxLDQ4IEBACisjIFRoZSBmaWxlICIud3JtYWtlZmlsZSIgaXMgdGhlIHRlbXBsYXRlIHVzZWQgYnkgdGhlIFdpbmQgUml2ZXIgV29ya2JlbmNoIHRvDQorIyBnZW5lcmF0ZSB0aGUgbWFrZWZpbGVzIG9mIHRoaXMgcHJvamVjdC4gQWRkIHVzZXItc3BlY2lmaWMgYnVpbGQgdGFyZ2V0cyBhbmQNCisjIG1ha2UgcnVsZXMgb25seSghKSBpbiB0aGlzIHByb2plY3QncyAiLndybWFrZWZpbGUiIGZpbGUuIFRoZXNlIHdpbGwgdGhlbiBiZQ0KKyMgYXV0b21hdGljYWxseSBkdW1wZWQgaW50byB0aGUgbWFrZWZpbGVzLg0KKw0KK1dJTkRfSE9NRSA6PSAkKHN1YnN0IFwsLywkKFdJTkRfSE9NRSkpDQorV0lORF9CQVNFIDo9ICQoc3Vic3QgXCwvLCQoV0lORF9CQVNFKSkNCitXSU5EX1VTUiA6PSAkKHN1YnN0IFwsLywkKFdJTkRfVVNSKSkNCisNCithbGwgOiBwcmVfYnVpbGQgbWFpbl9hbGwgcG9zdF9idWlsZA0KKw0KK19jbGVhbiA6Og0KKwlAZWNobyAibWFrZTogcmVtb3ZpbmcgdGFyZ2V0cyBhbmQgb2JqZWN0cyBvZiBgcHdkYCINCisNCislSURFX0dFTkVSQVRFRCUNCisNCistaW5jbHVkZSAkKFBSSl9ST09UX0RJUikvKi5tYWtlZmlsZQ0KKw0KKy1pbmNsdWRlICoubWFrZWZpbGUNCisNCittYWluX2FsbCA6IGV4dGVybmFsX2J1aWxkICQoUFJPSkVDVF9UQVJHRVRTKQ0KKwlAZWNobyAibWFrZTogYnVpbHQgdGFyZ2V0cyBvZiBgcHdkYCINCisNCisjIGVudHJ5IHBvaW50IGZvciBleHRlbmRpbmcgdGhlIGJ1aWxkDQorZXh0ZXJuYWxfYnVpbGQgOjoNCisJQGVjaG8gIiINCisNCisjIG1haW4gZW50cnkgcG9pbnQgZm9yIHByZSBwcm9jZXNzaW5nIHByaW9yIHRvIHRoZSBidWlsZA0KK3ByZV9idWlsZCA6OiAkKFBSRV9CVUlMRF9TVEVQKSBnZW5lcmF0ZV9zb3VyY2VzDQorCUBlY2hvICIiDQorDQorIyBlbnRyeSBwb2ludCBmb3IgZ2VuZXJhdGluZyBzb3VyY2VzIHByaW9yIHRvIHRoZSBidWlsZA0KK2dlbmVyYXRlX3NvdXJjZXMgOjoNCisJQGVjaG8gIiINCisNCisjIG1haW4gZW50cnkgcG9pbnQgZm9yIHBvc3QgcHJvY2Vzc2luZyBhZnRlciB0aGUgYnVpbGQNCitwb3N0X2J1aWxkIDo6ICQoUE9TVF9CVUlMRF9TVEVQKSBkZXBsb3lfb3V0cHV0DQorCUBlY2hvICIiDQorDQorIyBlbnRyeSBwb2ludCBmb3IgZGVwbG95aW5nIG91dHB1dCBhZnRlciB0aGUgYnVpbGQNCitkZXBsb3lfb3V0cHV0IDo6DQorCUBlY2hvICIiDQorDQorY2xlYW4gOjogZXh0ZXJuYWxfY2xlYW4gJChDTEVBTl9TVEVQKSBfY2xlYW4NCisNCisjIGVudHJ5IHBvaW50IGZvciBleHRlbmRpbmcgdGhlIGJ1aWxkIGNsZWFuDQorZXh0ZXJuYWxfY2xlYW4gOjoNCisJQGVjaG8gIiINCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vRGVmYXVsdFJvYm90Ly53cnByb2plY3QgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vRGVmYXVsdFJvYm90Ly53cnByb2plY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQ3Y2VmMQotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9EZWZhdWx0Um9ib3QvLndycHJvamVjdApAQCAtMCwwICsxLDI0OSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCis8d3J4bWw+DQorICAgIDxwcm9wZXJ0aWVzIHBsYXRmb3JtPSJWeFdvcmtzIiBwbGF0Zm9ybV9uYW1lPSJ2eHdvcmtzLTYuMyIgcm9vdD0iMSIgdHlwZT0iRG93bmxvYWRhYmxlS2VybmVsTW9kdWxlUHJvamVjdCIvPg0KKyAgICA8YXR0cmlidXRlcz4NCisgICAgICAgIDxtYXBBdHRyaWJ1dGU+DQorICAgICAgICAgICAgPGxpc3RBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98R2xvYmFsTWFjcm9zIj4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iUFJPSkVDVF9UWVBFIi8+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9IkRFRklORVMiLz4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iRVhQQU5EX0RCRyIvPg0KKyAgICAgICAgICAgIDwvbGlzdEF0dHJpYnV0ZT4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfEdsb2JhbE1hY3JvfERFRklORVMiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfEdsb2JhbE1hY3JvfEVYUEFORF9EQkciIHZhbHVlPSIwIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xHbG9iYWxNYWNyb3xQUk9KRUNUX1RZUEUiIHZhbHVlPSJES00iLz4NCisgICAgICAgICAgICA8bGlzdEF0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xJbmNsfFBQQzMyZGlhYiI+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9Ii1JJChXSU5EX0JBU0UpL3RhcmdldC9oIi8+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9Ii1JJChXSU5EX0JBU0UpL3RhcmdldC9oL3dybi9jb3JlaXAiLz4NCisgICAgICAgICAgICA8L2xpc3RBdHRyaWJ1dGU+DQorICAgICAgICAgICAgPGxpc3RBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98SW5jbHxQUEMzMmdudSI+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9Ii1JJChXSU5EX0JBU0UpL3RhcmdldC9oIi8+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9Ii1JJChXSU5EX0JBU0UpL3RhcmdldC9oL3dybi9jb3JlaXAiLz4NCisgICAgICAgICAgICA8L2xpc3RBdHRyaWJ1dGU+DQorICAgICAgICAgICAgPGxpc3RBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98SW5jbHxQUEM2MDNkaWFiIj4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2giLz4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2gvd3JuL2NvcmVpcCIvPg0KKyAgICAgICAgICAgIDwvbGlzdEF0dHJpYnV0ZT4NCisgICAgICAgICAgICA8bGlzdEF0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xJbmNsfFBQQzYwM2dudSI+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9Ii1JJChXSU5EX0JBU0UpL3RhcmdldC9oL1dQSUxpYiIvPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSItSSQoV0lORF9CQVNFKS90YXJnZXQvaCIvPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSItSSQoV0lORF9CQVNFKS90YXJnZXQvaC93cm4vY29yZWlwIi8+DQorICAgICAgICAgICAgPC9saXN0QXR0cmlidXRlPg0KKyAgICAgICAgICAgIDxsaXN0QXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfExpYnN8UFBDNjAzZ251Ij4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iJChXSU5EX0JBU0UpL3RhcmdldC9saWIvV1BJTGliLmEiLz4NCisgICAgICAgICAgICA8L2xpc3RBdHRyaWJ1dGU+DQorICAgICAgICAgICAgPGxpc3RBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm9zIj4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iVlhfQ1BVX0ZBTUlMWSIvPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSJDUFUiLz4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iVE9PTF9GQU1JTFkiLz4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iVE9PTCIvPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSJUT09MX1BBVEgiLz4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iQ0NfQVJDSF9TUEVDIi8+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9IkxJQlBBVEgiLz4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iTElCUyIvPg0KKyAgICAgICAgICAgIDwvbGlzdEF0dHJpYnV0ZT4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfENDX0FSQ0hfU1BFQ3x2YWx1ZXxQUEMzMmRpYWIiIHZhbHVlPSItdFBQQ0ZIOnZ4d29ya3M2MyAtWHN0bXctc2xvdyAtRFBQQzMyX2ZwNjB4Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xDQ19BUkNIX1NQRUN8dmFsdWV8UFBDMzJnbnUiIHZhbHVlPSItbWhhcmQtZmxvYXQgLW1zdHJpY3QtYWxpZ24gLW1uby1pbXBsaWNpdC1mcCAtRFBQQzMyX2ZwNjB4Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xDQ19BUkNIX1NQRUN8dmFsdWV8UFBDNjAzZGlhYiIgdmFsdWU9Ii10UFBDNjAzRkg6dnh3b3JrczYzIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xDQ19BUkNIX1NQRUN8dmFsdWV8UFBDNjAzZ251IiB2YWx1ZT0iLW1jcHU9NjAzIC1tc3RyaWN0LWFsaWduIC1tbm8taW1wbGljaXQtZnAgIC1tbG9uZ2NhbGwiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfENQVXx2YWx1ZXxQUEMzMmRpYWIiIHZhbHVlPSJQUEMzMiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98Q1BVfHZhbHVlfFBQQzMyZ251IiB2YWx1ZT0iUFBDMzIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfENQVXx2YWx1ZXxQUEM2MDNkaWFiIiB2YWx1ZT0iUFBDNjAzIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xDUFV8dmFsdWV8UFBDNjAzZ251IiB2YWx1ZT0iUFBDNjAzIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xMSUJQQVRIfHZhbHVlfFBQQzMyZGlhYiIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98TElCUEFUSHx2YWx1ZXxQUEMzMmdudSIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98TElCUEFUSHx2YWx1ZXxQUEM2MDNkaWFiIiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xMSUJQQVRIfHZhbHVlfFBQQzYwM2dudSIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98TElCU3x2YWx1ZXxQUEMzMmRpYWIiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfExJQlN8dmFsdWV8UFBDMzJnbnUiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfExJQlN8dmFsdWV8UFBDNjAzZGlhYiIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98TElCU3x2YWx1ZXxQUEM2MDNnbnUiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfFRPT0xfRkFNSUxZfHZhbHVlfFBQQzMyZGlhYiIgdmFsdWU9ImRpYWIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfFRPT0xfRkFNSUxZfHZhbHVlfFBQQzMyZ251IiB2YWx1ZT0iZ251Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xUT09MX0ZBTUlMWXx2YWx1ZXxQUEM2MDNkaWFiIiB2YWx1ZT0iZGlhYiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98VE9PTF9GQU1JTFl8dmFsdWV8UFBDNjAzZ251IiB2YWx1ZT0iZ251Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xUT09MX1BBVEh8dmFsdWV8UFBDMzJkaWFiIiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xUT09MX1BBVEh8dmFsdWV8UFBDMzJnbnUiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfFRPT0xfUEFUSHx2YWx1ZXxQUEM2MDNkaWFiIiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xUT09MX1BBVEh8dmFsdWV8UFBDNjAzZ251IiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xUT09MfHZhbHVlfFBQQzMyZGlhYiIgdmFsdWU9ImRpYWIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfFRPT0x8dmFsdWV8UFBDMzJnbnUiIHZhbHVlPSJnbnUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfFRPT0x8dmFsdWV8UFBDNjAzZGlhYiIgdmFsdWU9ImRpYWIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfFRPT0x8dmFsdWV8UFBDNjAzZ251IiB2YWx1ZT0iZ251Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xWWF9DUFVfRkFNSUxZfHZhbHVlfFBQQzMyZGlhYiIgdmFsdWU9InBwYyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98VlhfQ1BVX0ZBTUlMWXx2YWx1ZXxQUEMzMmdudSIgdmFsdWU9InBwYyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98VlhfQ1BVX0ZBTUlMWXx2YWx1ZXxQUEM2MDNkaWFiIiB2YWx1ZT0icHBjIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xWWF9DUFVfRkFNSUxZfHZhbHVlfFBQQzYwM2dudSIgdmFsdWU9InBwYyIvPg0KKyAgICAgICAgICAgIDxsaXN0QXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2xzIj4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iQy1Db21waWxlciIvPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSJDKystQ29tcGlsZXIiLz4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iTGlua2VyIi8+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9IlBhcnRpYWwgSW1hZ2UgTGlua2VyIi8+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9IkxpYnJhcmlhbiIvPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSJBc3NlbWJsZXIiLz4NCisgICAgICAgICAgICA8L2xpc3RBdHRyaWJ1dGU+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxjbWR8UFBDMzJkaWFiIiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OzslYXNzZW1ibGVycHJlZml4JSAkKFRPT0xfUEFUSClkY2MgJURlYnVnTW9kZUZsYWdzJSAlVG9vbEZsYWdzJSAkKEFEREVEX0NGTEFHUykgJUluY2x1ZGVzJSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAlT3V0RmlsZSUgLWMgJUluRmlsZSUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfGNtZHxQUEMzMmdudSIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWFzc2VtYmxlcnByZWZpeCUgJChUT09MX1BBVEgpY2NwcGMgJURlYnVnTW9kZUZsYWdzJSAlVG9vbEZsYWdzJSAkKEFEREVEX0NGTEFHUykgJUluY2x1ZGVzJSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAlT3V0RmlsZSUgLWMgJUluRmlsZSUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfGNtZHxQUEM2MDNkaWFiIiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OzslYXNzZW1ibGVycHJlZml4JSAkKFRPT0xfUEFUSClkY2MgJURlYnVnTW9kZUZsYWdzJSAlVG9vbEZsYWdzJSAkKEFEREVEX0NGTEFHUykgJUluY2x1ZGVzJSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAlT3V0RmlsZSUgLWMgJUluRmlsZSUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfGNtZHxQUEM2MDNnbnUiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7OyVhc3NlbWJsZXJwcmVmaXglICQoVE9PTF9QQVRIKWNjcHBjICVEZWJ1Z01vZGVGbGFncyUgJVRvb2xGbGFncyUgJChBRERFRF9DRkxBR1MpICVJbmNsdWRlcyUgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gJU91dEZpbGUlIC1jICVJbkZpbGUlIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxkYmdGbGFnc3xQUEMzMmRpYWIiIHZhbHVlPSItZyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxBc3NlbWJsZXJ8ZGJnRmxhZ3N8UFBDMzJnbnUiIHZhbHVlPSItZyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxBc3NlbWJsZXJ8ZGJnRmxhZ3N8UFBDNjAzZGlhYiIgdmFsdWU9Ii1nIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxkYmdGbGFnc3xQUEM2MDNnbnUiIHZhbHVlPSItZyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxBc3NlbWJsZXJ8ZGVyaXZlZFNpZ3N8UFBDMzJkaWFiIiB2YWx1ZT0iKi5vIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxkZXJpdmVkU2lnc3xQUEMzMmdudSIgdmFsdWU9IioubyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxBc3NlbWJsZXJ8ZGVyaXZlZFNpZ3N8UFBDNjAzZGlhYiIgdmFsdWU9IioubyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxBc3NlbWJsZXJ8ZGVyaXZlZFNpZ3N8UFBDNjAzZ251IiB2YWx1ZT0iKi5vIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxmbGFnc3xQUEMzMmRpYWIiIHZhbHVlPSIkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhwcmVwcm9jZXNzLWFzc2VtYmx5IC1YY3BwLW5vLXNwYWNlICAtWG1ha2UtZGVwZW5kZW5jeT0weGQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfGZsYWdzfFBQQzMyZ251IiB2YWx1ZT0iJChDQ19BUkNIX1NQRUMpIC1hbnNpICAgLXhhc3NlbWJsZXItd2l0aC1jcHAgLU1EIC1NUCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxBc3NlbWJsZXJ8ZmxhZ3N8UFBDNjAzZGlhYiIgdmFsdWU9IiQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWHByZXByb2Nlc3MtYXNzZW1ibHkgLVhjcHAtbm8tc3BhY2UgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxBc3NlbWJsZXJ8ZmxhZ3N8UFBDNjAzZ251IiB2YWx1ZT0iJChDQ19BUkNIX1NQRUMpIC1hbnNpICAgLXhhc3NlbWJsZXItd2l0aC1jcHAgLU1EIC1NUCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxBc3NlbWJsZXJ8bm9uRGJnRmxhZ3N8UFBDMzJkaWFiIiB2YWx1ZT0iLVhPIC1Yc2l6ZS1vcHQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfG5vbkRiZ0ZsYWdzfFBQQzMyZ251IiB2YWx1ZT0iLU8yIC1mc3RyZW5ndGgtcmVkdWNlIC1mbm8tYnVpbHRpbiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxBc3NlbWJsZXJ8bm9uRGJnRmxhZ3N8UFBDNjAzZGlhYiIgdmFsdWU9Ii1YTyAtWHNpemUtb3B0Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxub25EYmdGbGFnc3xQUEM2MDNnbnUiIHZhbHVlPSItTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluIi8+DQorICAgICAgICAgICAgPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxBc3NlbWJsZXJ8b2JqZWN0IiB2YWx1ZT0idHJ1ZSIvPg0KKyAgICAgICAgICAgIDxib29sZWFuQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfHBhc3NBYmxlIiB2YWx1ZT0iZmFsc2UiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfHNpZ3MiIHZhbHVlPSIqLnMiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfGNtZHxQUEMzMmRpYWIiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7OyVjcHBjb21waWxlcnByZWZpeCUgJChUT09MX1BBVEgpZGNjICVEZWJ1Z01vZGVGbGFncyUgJVRvb2xGbGFncyUgJChBRERFRF9DKytGTEFHUykgJUluY2x1ZGVzJSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAlT3V0RmlsZSUgLWMgJUluRmlsZSUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfGNtZHxQUEMzMmdudSIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWNwcGNvbXBpbGVycHJlZml4JSAkKFRPT0xfUEFUSCljY3BwYyAlRGVidWdNb2RlRmxhZ3MlICVUb29sRmxhZ3MlICQoQURERURfQysrRkxBR1MpICVJbmNsdWRlcyUgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gJU91dEZpbGUlIC1jICVJbkZpbGUlIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxjbWR8UFBDNjAzZGlhYiIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWNwcGNvbXBpbGVycHJlZml4JSAkKFRPT0xfUEFUSClkY2MgJURlYnVnTW9kZUZsYWdzJSAlVG9vbEZsYWdzJSAkKEFEREVEX0MrK0ZMQUdTKSAlSW5jbHVkZXMlICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICVPdXRGaWxlJSAtYyAlSW5GaWxlJSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8Y21kfFBQQzYwM2dudSIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWNwcGNvbXBpbGVycHJlZml4JSAkKFRPT0xfUEFUSCljY3BwYyAlRGVidWdNb2RlRmxhZ3MlICVUb29sRmxhZ3MlICQoQURERURfQysrRkxBR1MpICVJbmNsdWRlcyUgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gJU91dEZpbGUlIC1jICVJbkZpbGUlIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxkYmdGbGFnc3xQUEMzMmRpYWIiIHZhbHVlPSItZyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8ZGJnRmxhZ3N8UFBDMzJnbnUiIHZhbHVlPSItZyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8ZGJnRmxhZ3N8UFBDNjAzZGlhYiIgdmFsdWU9Ii1nIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxkYmdGbGFnc3xQUEM2MDNnbnUiIHZhbHVlPSItZyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8ZGVyaXZlZFNpZ3N8UFBDMzJkaWFiIiB2YWx1ZT0iKi5vIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxkZXJpdmVkU2lnc3xQUEMzMmdudSIgdmFsdWU9IioubyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8ZGVyaXZlZFNpZ3N8UFBDNjAzZGlhYiIgdmFsdWU9IioubyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8ZGVyaXZlZFNpZ3N8UFBDNjAzZ251IiB2YWx1ZT0iKi5vIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxmbGFnc3xQUEMzMmRpYWIiIHZhbHVlPSIkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8ZmxhZ3N8UFBDMzJnbnUiIHZhbHVlPSIkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfGZsYWdzfFBQQzYwM2RpYWIiIHZhbHVlPSIkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8ZmxhZ3N8UFBDNjAzZ251IiB2YWx1ZT0iJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QIC1tbG9uZ2NhbGwiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfG5vbkRiZ0ZsYWdzfFBQQzMyZGlhYiIgdmFsdWU9Ii1YTyAtWHNpemUtb3B0Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxub25EYmdGbGFnc3xQUEMzMmdudSIgdmFsdWU9Ii1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfG5vbkRiZ0ZsYWdzfFBQQzYwM2RpYWIiIHZhbHVlPSItWE8gLVhzaXplLW9wdCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8bm9uRGJnRmxhZ3N8UFBDNjAzZ251IiB2YWx1ZT0iLU8yIC1mc3RyZW5ndGgtcmVkdWNlIC1mbm8tYnVpbHRpbiIvPg0KKyAgICAgICAgICAgIDxib29sZWFuQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfG9iamVjdCIgdmFsdWU9InRydWUiLz4NCisgICAgICAgICAgICA8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxwYXNzQWJsZSIgdmFsdWU9ImZhbHNlIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxzaWdzIiB2YWx1ZT0iKi5jcHA7Ki5DOyouY3h4OyouY2MiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxjbWR8UFBDMzJkaWFiIiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OzslY2NvbXBpbGVycHJlZml4JSAkKFRPT0xfUEFUSClkY2MgJURlYnVnTW9kZUZsYWdzJSAlVG9vbEZsYWdzJSAkKEFEREVEX0NGTEFHUykgJUluY2x1ZGVzJSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAlT3V0RmlsZSUgLWMgJUluRmlsZSUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxjbWR8UFBDMzJnbnUiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7OyVjY29tcGlsZXJwcmVmaXglICQoVE9PTF9QQVRIKWNjcHBjICVEZWJ1Z01vZGVGbGFncyUgJVRvb2xGbGFncyUgJChBRERFRF9DRkxBR1MpICVJbmNsdWRlcyUgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gJU91dEZpbGUlIC1jICVJbkZpbGUlIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8Y21kfFBQQzYwM2RpYWIiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7OyVjY29tcGlsZXJwcmVmaXglICQoVE9PTF9QQVRIKWRjYyAlRGVidWdNb2RlRmxhZ3MlICVUb29sRmxhZ3MlICQoQURERURfQ0ZMQUdTKSAlSW5jbHVkZXMlICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICVPdXRGaWxlJSAtYyAlSW5GaWxlJSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfGNtZHxQUEM2MDNnbnUiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7OyVjY29tcGlsZXJwcmVmaXglICQoVE9PTF9QQVRIKWNjcHBjICVEZWJ1Z01vZGVGbGFncyUgJVRvb2xGbGFncyUgJChBRERFRF9DRkxBR1MpICVJbmNsdWRlcyUgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gJU91dEZpbGUlIC1jICVJbkZpbGUlIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8ZGJnRmxhZ3N8UFBDMzJkaWFiIiB2YWx1ZT0iLWciLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxkYmdGbGFnc3xQUEMzMmdudSIgdmFsdWU9Ii1nIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8ZGJnRmxhZ3N8UFBDNjAzZGlhYiIgdmFsdWU9Ii1nIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8ZGJnRmxhZ3N8UFBDNjAzZ251IiB2YWx1ZT0iLWciLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxkZXJpdmVkU2lnc3xQUEMzMmRpYWIiIHZhbHVlPSIqLm8iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxkZXJpdmVkU2lnc3xQUEMzMmdudSIgdmFsdWU9IioubyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfGRlcml2ZWRTaWdzfFBQQzYwM2RpYWIiIHZhbHVlPSIqLm8iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxkZXJpdmVkU2lnc3xQUEM2MDNnbnUiIHZhbHVlPSIqLm8iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxmbGFnc3xQUEMzMmRpYWIiIHZhbHVlPSIkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfGZsYWdzfFBQQzMyZ251IiB2YWx1ZT0iJChDQ19BUkNIX1NQRUMpIC1hbnNpICAtV2FsbCAgLU1EIC1NUCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfGZsYWdzfFBQQzYwM2RpYWIiIHZhbHVlPSIkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfGZsYWdzfFBQQzYwM2dudSIgdmFsdWU9IiQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAgLVdhbGwgIC1NRCAtTVAiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxub25EYmdGbGFnc3xQUEMzMmRpYWIiIHZhbHVlPSItWE8gLVhzaXplLW9wdCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfG5vbkRiZ0ZsYWdzfFBQQzMyZ251IiB2YWx1ZT0iLU8yIC1mc3RyZW5ndGgtcmVkdWNlIC1mbm8tYnVpbHRpbiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfG5vbkRiZ0ZsYWdzfFBQQzYwM2RpYWIiIHZhbHVlPSItWE8gLVhzaXplLW9wdCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfG5vbkRiZ0ZsYWdzfFBQQzYwM2dudSIgdmFsdWU9Ii1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4iLz4NCisgICAgICAgICAgICA8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8b2JqZWN0IiB2YWx1ZT0idHJ1ZSIvPg0KKyAgICAgICAgICAgIDxib29sZWFuQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxwYXNzQWJsZSIgdmFsdWU9ImZhbHNlIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8c2lncyIgdmFsdWU9IiouYyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58Y21kfFBQQzMyZGlhYiIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWFyY2hpdmVycHJlZml4JSAkKFRPT0xfUEFUSClkYXIgJVRvb2xGbGFncyUgJU91dEZpbGUlICVPYmplY3RzJSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58Y21kfFBQQzMyZ251IiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OzslYXJjaGl2ZXJwcmVmaXglICQoVE9PTF9QQVRIKWFycHBjICVUb29sRmxhZ3MlICVPdXRGaWxlJSAlT2JqZWN0cyUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufGNtZHxQUEM2MDNkaWFiIiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OzslYXJjaGl2ZXJwcmVmaXglICQoVE9PTF9QQVRIKWRhciAlVG9vbEZsYWdzJSAlT3V0RmlsZSUgJU9iamVjdHMlIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxjbWR8UFBDNjAzZ251IiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OzslYXJjaGl2ZXJwcmVmaXglICQoVE9PTF9QQVRIKWFycHBjICVUb29sRmxhZ3MlICVPdXRGaWxlJSAlT2JqZWN0cyUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufGRiZ0ZsYWdzfFBQQzMyZGlhYiIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58ZGJnRmxhZ3N8UFBDMzJnbnUiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufGRiZ0ZsYWdzfFBQQzYwM2RpYWIiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufGRiZ0ZsYWdzfFBQQzYwM2dudSIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58ZGVyaXZlZFNpZ3N8UFBDMzJkaWFiIiB2YWx1ZT0iKi5hIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxkZXJpdmVkU2lnc3xQUEMzMmdudSIgdmFsdWU9IiouYSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58ZGVyaXZlZFNpZ3N8UFBDNjAzZGlhYiIgdmFsdWU9IiouYSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58ZGVyaXZlZFNpZ3N8UFBDNjAzZ251IiB2YWx1ZT0iKi5hIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxmbGFnc3xQUEMzMmRpYWIiIHZhbHVlPSJjcnVzIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxmbGFnc3xQUEMzMmdudSIgdmFsdWU9ImNydXMiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufGZsYWdzfFBQQzYwM2RpYWIiIHZhbHVlPSJjcnVzIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxmbGFnc3xQUEM2MDNnbnUiIHZhbHVlPSJjcnVzIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxub25EYmdGbGFnc3xQUEMzMmRpYWIiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufG5vbkRiZ0ZsYWdzfFBQQzMyZ251IiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxub25EYmdGbGFnc3xQUEM2MDNkaWFiIiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxub25EYmdGbGFnc3xQUEM2MDNnbnUiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxvYmplY3QiIHZhbHVlPSJmYWxzZSIvPg0KKyAgICAgICAgICAgIDxib29sZWFuQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufHBhc3NBYmxlIiB2YWx1ZT0idHJ1ZSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58c2lncyIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8Y21kfFBQQzMyZGlhYiIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7cm0gLWYgJU91dEZpbGUlO2RkdW1wIC1OZyAlT2JqZWN0cyUgJUxpYnJhcmllcyUgfCB0Y2xzaCAkKFdJTkRfQkFTRSkvaG9zdC9yZXNvdXJjZS9odXRpbHMvdGNsL211bmNoLnRjbCAtYyBwcGMgJmd0OyAkKE9CSl9ESVIpL2N0ZHQuYzslY2NvbXBpbGVycHJlZml4JSAkKFRPT0xfUEFUSClkY2MgJURlYnVnTW9kZUZsYWdzJSAkKENDX0FSQ0hfU1BFQykgLVhkb2xsYXItaW4taWRlbnQgLVhmb3JjZS1kZWNsYXJhdGlvbnMgJChBRERFRF9DRkxBR1MpICVJbmNsdWRlcyUgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgIC1vICQoT0JKX0RJUikvY3RkdC5vIC1jICQoT0JKX0RJUikvY3RkdC5jOyVsaW5rZXJwcmVmaXglICQoVE9PTF9QQVRIKWRsZCAtdFBQQ0ZIOnZ4d29ya3M2MyAtWCAtcjUgJVRvb2xGbGFncyUgLW8gJU91dEZpbGUlICQoT0JKX0RJUikvY3RkdC5vICVPYmplY3RzJSAlTGlicmFyaWVzJSAkKExJQlBBVEgpICQoTElCUykgICQoQURERURfTElCUEFUSCkgJChBRERFRF9MSUJTKSAmYW1wOyZhbXA7IGlmIFsgJnF1b3Q7JChFWFBBTkRfREJHKSZxdW90OyA9ICZxdW90OzEmcXVvdDsgXTsgdGhlbiBwbGluayAmcXVvdDskQCZxdW90OztmaSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8Y21kfFBQQzMyZ251IiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OztybSAtZiAlT3V0RmlsZSU7bm1wcGMgJU9iamVjdHMlICVMaWJyYXJpZXMlIHwgdGNsc2ggJChXSU5EX0JBU0UpL2hvc3QvcmVzb3VyY2UvaHV0aWxzL3RjbC9tdW5jaC50Y2wgLWMgcHBjICZndDsgJChPQkpfRElSKS9jdGR0LmM7JWNjb21waWxlcnByZWZpeCUgJChUT09MX1BBVEgpY2NwcGMgJURlYnVnTW9kZUZsYWdzJSAkKENDX0FSQ0hfU1BFQykgLWZkb2xsYXJzLWluLWlkZW50aWZpZXJzIC1XYWxsICQoQURERURfQ0ZMQUdTKSAlSW5jbHVkZXMlICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpICAtbyAkKE9CSl9ESVIpL2N0ZHQubyAtYyAkKE9CSl9ESVIpL2N0ZHQuYzslbGlua2VycHJlZml4JSAkKFRPT0xfUEFUSCljY3BwYyAtciAtbm9zdGRsaWIgLVdsLC1YICVUb29sRmxhZ3MlIC1vICVPdXRGaWxlJSAkKE9CSl9ESVIpL2N0ZHQubyAlT2JqZWN0cyUgJUxpYnJhcmllcyUgJChMSUJQQVRIKSAkKExJQlMpICAkKEFEREVEX0xJQlBBVEgpICQoQURERURfTElCUykgJmFtcDsmYW1wOyBpZiBbICZxdW90OyQoRVhQQU5EX0RCRykmcXVvdDsgPSAmcXVvdDsxJnF1b3Q7IF07IHRoZW4gcGxpbmsgJnF1b3Q7JEAmcXVvdDs7ZmkiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfGNtZHxQUEM2MDNkaWFiIiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OztybSAtZiAlT3V0RmlsZSU7ZGR1bXAgLU5nICVPYmplY3RzJSAlTGlicmFyaWVzJSB8IHRjbHNoICQoV0lORF9CQVNFKS9ob3N0L3Jlc291cmNlL2h1dGlscy90Y2wvbXVuY2gudGNsIC1jIHBwYyAmZ3Q7ICQoT0JKX0RJUikvY3RkdC5jOyVjY29tcGlsZXJwcmVmaXglICQoVE9PTF9QQVRIKWRjYyAlRGVidWdNb2RlRmxhZ3MlICQoQ0NfQVJDSF9TUEVDKSAtWGRvbGxhci1pbi1pZGVudCAtWGZvcmNlLWRlY2xhcmF0aW9ucyAkKEFEREVEX0NGTEFHUykgJUluY2x1ZGVzJSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAgLW8gJChPQkpfRElSKS9jdGR0Lm8gLWMgJChPQkpfRElSKS9jdGR0LmM7JWxpbmtlcnByZWZpeCUgJChUT09MX1BBVEgpZGxkIC10UFBDNjAzRkg6dnh3b3JrczYzIC1YIC1yNSAlVG9vbEZsYWdzJSAtbyAlT3V0RmlsZSUgJChPQkpfRElSKS9jdGR0Lm8gJU9iamVjdHMlICVMaWJyYXJpZXMlICQoTElCUEFUSCkgJChMSUJTKSAgJChBRERFRF9MSUJQQVRIKSAkKEFEREVEX0xJQlMpICZhbXA7JmFtcDsgaWYgWyAmcXVvdDskKEVYUEFORF9EQkcpJnF1b3Q7ID0gJnF1b3Q7MSZxdW90OyBdOyB0aGVuIHBsaW5rICZxdW90OyRAJnF1b3Q7O2ZpIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxjbWR8UFBDNjAzZ251IiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OztybSAtZiAlT3V0RmlsZSU7bm1wcGMgJU9iamVjdHMlICVMaWJyYXJpZXMlIHwgdGNsc2ggJChXSU5EX0JBU0UpL2hvc3QvcmVzb3VyY2UvaHV0aWxzL3RjbC9tdW5jaC50Y2wgLWMgcHBjICZndDsgJChPQkpfRElSKS9jdGR0LmM7JWNjb21waWxlcnByZWZpeCUgJChUT09MX1BBVEgpY2NwcGMgJURlYnVnTW9kZUZsYWdzJSAkKENDX0FSQ0hfU1BFQykgLWZkb2xsYXJzLWluLWlkZW50aWZpZXJzIC1XYWxsICQoQURERURfQ0ZMQUdTKSAlSW5jbHVkZXMlICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpICAtbyAkKE9CSl9ESVIpL2N0ZHQubyAtYyAkKE9CSl9ESVIpL2N0ZHQuYzslbGlua2VycHJlZml4JSAkKFRPT0xfUEFUSCljY3BwYyAtciAtbm9zdGRsaWIgLVdsLC1YICVUb29sRmxhZ3MlIC1vICVPdXRGaWxlJSAkKE9CSl9ESVIpL2N0ZHQubyAlT2JqZWN0cyUgJUxpYnJhcmllcyUgJChMSUJQQVRIKSAkKExJQlMpICAkKEFEREVEX0xJQlBBVEgpICQoQURERURfTElCUykgJmFtcDsmYW1wOyBpZiBbICZxdW90OyQoRVhQQU5EX0RCRykmcXVvdDsgPSAmcXVvdDsxJnF1b3Q7IF07IHRoZW4gcGxpbmsgJnF1b3Q7JEAmcXVvdDs7ZmkiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfGRiZ0ZsYWdzfFBQQzMyZGlhYiIgdmFsdWU9Ii1nIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxkYmdGbGFnc3xQUEMzMmdudSIgdmFsdWU9Ii1nIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxkYmdGbGFnc3xQUEM2MDNkaWFiIiB2YWx1ZT0iLWciLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfGRiZ0ZsYWdzfFBQQzYwM2dudSIgdmFsdWU9Ii1nIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxkZXJpdmVkU2lnc3xQUEMzMmRpYWIiIHZhbHVlPSIqLm91dCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8ZGVyaXZlZFNpZ3N8UFBDMzJnbnUiIHZhbHVlPSIqLm91dCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8ZGVyaXZlZFNpZ3N8UFBDNjAzZGlhYiIgdmFsdWU9Iioub3V0Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxkZXJpdmVkU2lnc3xQUEM2MDNnbnUiIHZhbHVlPSIqLm91dCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8ZmxhZ3N8UFBDMzJkaWFiIiB2YWx1ZT0iLXI0Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxmbGFnc3xQUEMzMmdudSIgdmFsdWU9Ii1UICQoV0lORF9CQVNFKS90YXJnZXQvaC90b29sL2dudS9sZHNjcmlwdHMvbGluay5PVVQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfGZsYWdzfFBQQzYwM2RpYWIiIHZhbHVlPSItcjQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfGZsYWdzfFBQQzYwM2dudSIgdmFsdWU9Ii1UICQoV0lORF9CQVNFKS90YXJnZXQvaC90b29sL2dudS9sZHNjcmlwdHMvbGluay5PVVQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfG5vbkRiZ0ZsYWdzfFBQQzMyZGlhYiIgdmFsdWU9Ii1YTyAtWHNpemUtb3B0Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxub25EYmdGbGFnc3xQUEMzMmdudSIgdmFsdWU9Ii1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfG5vbkRiZ0ZsYWdzfFBQQzYwM2RpYWIiIHZhbHVlPSItWE8gLVhzaXplLW9wdCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8bm9uRGJnRmxhZ3N8UFBDNjAzZ251IiB2YWx1ZT0iLU8yIC1mc3RyZW5ndGgtcmVkdWNlIC1mbm8tYnVpbHRpbiIvPg0KKyAgICAgICAgICAgIDxib29sZWFuQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfG9iamVjdCIgdmFsdWU9ImZhbHNlIi8+DQorICAgICAgICAgICAgPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8cGFzc0FibGUiIHZhbHVlPSJmYWxzZSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8c2lncyIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxjbWR8UFBDMzJkaWFiIiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OzslbGlua2VycHJlZml4JSAkKFRPT0xfUEFUSClkbGQgLXRQUENGSDp2eHdvcmtzNjMgLVggLXI1ICVUb29sRmxhZ3MlIC1vICVPdXRGaWxlJSAlT2JqZWN0cyUgJChMSUJQQVRIKSAkKExJQlMpICQoQURERURfTElCUEFUSCkgJChBRERFRF9MSUJTKSAgJmFtcDsmYW1wOyBpZiBbICZxdW90OyQoRVhQQU5EX0RCRykmcXVvdDsgPSAmcXVvdDsxJnF1b3Q7IF07IHRoZW4gcGxpbmsgJnF1b3Q7JEAmcXVvdDs7ZmkiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8Y21kfFBQQzMyZ251IiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OzslbGlua2VycHJlZml4JSAkKFRPT0xfUEFUSCljY3BwYyAtciAtbm9zdGRsaWIgLVdsLC1YICVUb29sRmxhZ3MlIC1vICVPdXRGaWxlJSAlT2JqZWN0cyUgJChMSUJQQVRIKSAkKExJQlMpICQoQURERURfTElCUEFUSCkgJChBRERFRF9MSUJTKSAgJmFtcDsmYW1wOyBpZiBbICZxdW90OyQoRVhQQU5EX0RCRykmcXVvdDsgPSAmcXVvdDsxJnF1b3Q7IF07IHRoZW4gcGxpbmsgJnF1b3Q7JEAmcXVvdDs7ZmkiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8Y21kfFBQQzYwM2RpYWIiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7OyVsaW5rZXJwcmVmaXglICQoVE9PTF9QQVRIKWRsZCAtdFBQQzYwM0ZIOnZ4d29ya3M2MyAtWCAtcjUgJVRvb2xGbGFncyUgLW8gJU91dEZpbGUlICVPYmplY3RzJSAkKExJQlBBVEgpICQoTElCUykgJChBRERFRF9MSUJQQVRIKSAkKEFEREVEX0xJQlMpICAmYW1wOyZhbXA7IGlmIFsgJnF1b3Q7JChFWFBBTkRfREJHKSZxdW90OyA9ICZxdW90OzEmcXVvdDsgXTsgdGhlbiBwbGluayAmcXVvdDskQCZxdW90OztmaSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxjbWR8UFBDNjAzZ251IiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OzslbGlua2VycHJlZml4JSAkKFRPT0xfUEFUSCljY3BwYyAtciAtbm9zdGRsaWIgLVdsLC1YICVUb29sRmxhZ3MlIC1vICVPdXRGaWxlJSAlT2JqZWN0cyUgJChMSUJQQVRIKSAkKExJQlMpICQoQURERURfTElCUEFUSCkgJChBRERFRF9MSUJTKSAgJmFtcDsmYW1wOyBpZiBbICZxdW90OyQoRVhQQU5EX0RCRykmcXVvdDsgPSAmcXVvdDsxJnF1b3Q7IF07IHRoZW4gcGxpbmsgJnF1b3Q7JEAmcXVvdDs7ZmkiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8ZGJnRmxhZ3N8UFBDMzJkaWFiIiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfGRiZ0ZsYWdzfFBQQzMyZ251IiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfGRiZ0ZsYWdzfFBQQzYwM2RpYWIiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8ZGJnRmxhZ3N8UFBDNjAzZ251IiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfGRlcml2ZWRTaWdzfFBQQzMyZGlhYiIgdmFsdWU9IioubyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxkZXJpdmVkU2lnc3xQUEMzMmdudSIgdmFsdWU9IioubyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxkZXJpdmVkU2lnc3xQUEM2MDNkaWFiIiB2YWx1ZT0iKi5vIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfGRlcml2ZWRTaWdzfFBQQzYwM2dudSIgdmFsdWU9IioubyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxmbGFnc3xQUEMzMmRpYWIiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8ZmxhZ3N8UFBDMzJnbnUiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8ZmxhZ3N8UFBDNjAzZGlhYiIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxmbGFnc3xQUEM2MDNnbnUiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8bm9uRGJnRmxhZ3N8UFBDMzJkaWFiIiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfG5vbkRiZ0ZsYWdzfFBQQzMyZ251IiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfG5vbkRiZ0ZsYWdzfFBQQzYwM2RpYWIiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8bm9uRGJnRmxhZ3N8UFBDNjAzZ251IiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxvYmplY3QiIHZhbHVlPSJmYWxzZSIvPg0KKyAgICAgICAgICAgIDxib29sZWFuQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8cGFzc0FibGUiIHZhbHVlPSJ0cnVlIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfHNpZ3MiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfGNtZCIgdmFsdWU9IiVtYWtlcHJlZml4JSBtYWtlIC0tbm8tcHJpbnQtZGlyZWN0b3J5Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xkZWZhdWx0U3BlYyIgdmFsdWU9IlBQQzYwM2dudSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98cmVkaXJEaXJ8UFBDMzJkaWFiIiB2YWx1ZT0iUFBDMzJkaWFiIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xyZWRpckRpcnxQUEMzMmdudSIgdmFsdWU9IlBQQzMyZ251Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xyZWRpckRpcnxQUEM2MDNkaWFiIiB2YWx1ZT0iUFBDNjAzZGlhYiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98cmVkaXJEaXJ8UFBDNjAzZ251IiB2YWx1ZT0iUFBDNjAzZ251Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xyZWRpclJvb3QiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8bGlzdEF0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xzcGVjcyI+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9IlBQQzMyZGlhYiIvPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSJQUEMzMmdudSIvPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSJQUEM2MDNkaWFiIi8+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9IlBQQzYwM2dudSIvPg0KKyAgICAgICAgICAgIDwvbGlzdEF0dHJpYnV0ZT4NCisgICAgICAgICAgICA8aW50QXR0cmlidXRlIGtleT0iQnVpbGRTdXBwb3J0RW5hYmxlZCIgdmFsdWU9IjEiLz4NCisgICAgICAgICAgICA8bGlzdEF0dHJpYnV0ZSBrZXk9IkJ1aWxkU3VwcG9ydEZvckJ1aWxkU3BlY3MiPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSJQUEM2MDNnbnUiLz4NCisgICAgICAgICAgICA8L2xpc3RBdHRyaWJ1dGU+DQorICAgICAgICAgICAgPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJCdWlsZFRhcmdldENlbnRyaWMiIHZhbHVlPSJ0cnVlIi8+DQorICAgICAgICA8L21hcEF0dHJpYnV0ZT4NCisgICAgPC9hdHRyaWJ1dGVzPg0KKyAgICA8YnVpbGR0YXJnZXRzPg0KKyAgICAgICAgPGJ1aWxkdGFyZ2V0IGJ1aWxkdG9vbD0iTGlua2VyIiBuYW1lPSJPcmlnaW5hbERlZmF1bHRDb2RlIiBwYXNzZWQ9ImZhbHNlIiB0YXJnZXRuYW1lPSJPcmlnaW5hbERlZmF1bHRDb2RlIj4NCisgICAgICAgICAgICA8Y29udGVudHM+DQorICAgICAgICAgICAgICAgIDxmb2xkZXIgbmFtZT0iL09yaWdpbmFsRGVmYXVsdENvZGUiIHJlY3Vyc2l2ZT0idHJ1ZSIvPg0KKyAgICAgICAgICAgIDwvY29udGVudHM+DQorICAgICAgICA8L2J1aWxkdGFyZ2V0Pg0KKyAgICA8L2J1aWxkdGFyZ2V0cz4NCis8L3dyeG1sPg0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9EZWZhdWx0Um9ib3QvRGVmYXVsdFJvYm90LmNwcCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9EZWZhdWx0Um9ib3QvRGVmYXVsdFJvYm90LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTEwZTExCi0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvdnh3b3Jrcy02LjMvdGFyZ2V0L3NyYy9kZW1vL0RlZmF1bHRSb2JvdC9EZWZhdWx0Um9ib3QuY3BwCkBAIC0wLDAgKzEsOTcgQEAKKyNpbmNsdWRlICJXUElMaWIuaCINCisNCisvKioNCisgKiBUaGlzIGlzIGEgZGVtbyBwcm9ncmFtIHNob3dpbmcgdGhlIHVzZSBvZiB0aGUgUm9ib3RCYXNlIGNsYXNzLg0KKyAqIFRoZSBTaW1wbGVSb2JvdCBjbGFzcyBpcyB0aGUgYmFzZSBvZiBhIHJvYm90IGFwcGxpY2F0aW9uIHRoYXQgd2lsbCBhdXRvbWF0aWNhbGx5IGNhbGwgeW91cg0KKyAqIEF1dG9ub21vdXMgYW5kIE9wZXJhdG9yQ29udHJvbCBtZXRob2RzIGF0IHRoZSByaWdodCB0aW1lIGFzIGNvbnRyb2xsZWQgYnkgdGhlIHN3aXRjaGVzIG9uDQorICogdGhlIGRyaXZlciBzdGF0aW9uIG9yIHRoZSBmaWVsZCBjb250cm9scy4NCisgKi8NCitjbGFzcyBEZWZhdWx0Um9ib3QgOiBwdWJsaWMgU2ltcGxlUm9ib3QNCit7DQorCVJvYm90RHJpdmUgKm15Um9ib3Q7CQkJLy8gcm9ib3QgZHJpdmUgc3lzdGVtDQorCURpZ2l0YWxJbnB1dCAqYXJtVXBwZXJMaW1pdDsJLy8gYXJtIHVwcGVyIGxpbWl0IHN3aXRjaA0KKwlEaWdpdGFsSW5wdXQgKmFybUxvd2VyTGltaXQ7CS8vIGFybSBsb3dlciBsaW1pdCBzd2l0Y2gNCisJSm95c3RpY2sgKnJpZ2h0U3RpY2s7CQkJLy8gam95c3RpY2sgMSAoYXJjYWRlIHN0aWNrIG9yIHJpZ2h0IHRhbmsgc3RpY2spDQorCUpveXN0aWNrICpsZWZ0U3RpY2s7CQkJLy8gam95c3RpY2sgMiAodGFuayBsZWZ0IHN0aWNrKQ0KKwlKb3lzdGljayAqYXJtU3RpY2s7CQkJCS8vIGpveXN0aWNrIDMgdG8gY29udHJvbCBhcm0NCisJRHJpdmVyU3RhdGlvbiAqZHM7CQkJCS8vIGRyaXZlciBzdGF0aW9uIG9iamVjdA0KKw0KKwllbnVtCQkJCQkJCS8vIERyaXZlciBTdGF0aW9uIGp1bXBlcnMgdG8gY29udHJvbCBwcm9ncmFtIG9wZXJhdGlvbg0KKwl7IEFSQ0FERV9NT0RFID0gMSwJCQkJLy8gVGFuay9BcmNhZGUganVtcGVyIGlzIG9uIERTIElucHV0IDEgKEp1bXBlciBwcmVzZW50IGlzIGFyY2FkZSkNCisJICBFTkFCTEVfQVVUT05PTU9VUyA9IDIsCQkvLyBBdXRvbm9tb3VzL1RlbGVvcCBqdW1wZXIgaXMgb24gRFMgSW5wdXQgMiAoSnVtcGVyIHByZXNlbnQgaXMgYXV0b25vbW91cykNCisJfSBqdW1wZXJzOwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQorDQorcHVibGljOg0KKwkvKioNCisJICogDQorCSAqIA0KKwkgKiBDb25zdHJ1Y3RvciBmb3IgdGhpcyByb2JvdCBzdWJjbGFzcy4NCisJICogQ3JlYXRlIGFuIGluc3RhbmNlIG9mIGEgUm9ib3REcml2ZSB3aXRoIGxlZnQgYW5kIHJpZ2h0IG1vdG9ycyBwbHVnZ2VkIGludG8gUFdNDQorCSAqIHBvcnRzIDEgYW5kIDIgb24gdGhlIGZpcnN0IGRpZ2l0YWwgbW9kdWxlLg0KKwkgKi8NCisJRGVmYXVsdFJvYm90KHZvaWQpDQorCXsNCisJCWRzID0gRHJpdmVyU3RhdGlvbjo6R2V0SW5zdGFuY2UoKTsNCisJCW15Um9ib3QgPSBuZXcgUm9ib3REcml2ZSgxLCAzLCAyLCA0KTsJLy8gY3JlYXRlIHJvYm90IGRyaXZlIGJhc2UNCisJCXJpZ2h0U3RpY2sgPSBuZXcgSm95c3RpY2soMSk7CQkJLy8gY3JlYXRlIHRoZSBqb3lzdGlja3MNCisJCWxlZnRTdGljayA9IG5ldyBKb3lzdGljaygyKTsNCisJCWFybVN0aWNrID0gbmV3IEpveXN0aWNrKDMpOw0KKwkJYXJtVXBwZXJMaW1pdCA9IG5ldyBEaWdpdGFsSW5wdXQoMSk7CS8vIGNyZWF0ZSB0aGUgbGltaXQgc3dpdGNoIGlucHV0cw0KKwkJYXJtTG93ZXJMaW1pdCA9IG5ldyBEaWdpdGFsSW5wdXQoMik7DQorCQkvL1VwZGF0ZSB0aGUgbW90b3JzIGF0IGxlYXN0IGV2ZXJ5IDEwMG1zLg0KKwkJbXlSb2JvdC0+U2V0RXhwaXJhdGlvbigwLjEpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBEcml2ZSBsZWZ0ICYgcmlnaHQgbW90b3JzIGZvciAyIHNlY29uZHMsIGVuYWJsZWQgYnkgYSBqdW1wZXIgKGp1bXBlcg0KKwkgKiBtdXN0IGJlIGluIGZvciBhdXRvbm9tb3VzIHRvIG9wZXJhdGUpLg0KKwkgKi8NCisJdm9pZCBBdXRvbm9tb3VzKHZvaWQpDQorCXsNCisJCW15Um9ib3QtPlNldFNhZmV0eUVuYWJsZWQoZmFsc2UpOw0KKwkJaWYgKGRzLT5HZXREaWdpdGFsSW4oRU5BQkxFX0FVVE9OT01PVVMpID09IDEpCS8vIG9ubHkgcnVuIHRoZSBhdXRvbm9tb3VzIHByb2dyYW0gaWYganVtcGVyIGlzIGluIHBsYWNlDQorCQl7DQorCQkJbXlSb2JvdC0+RHJpdmUoMC41LCAwLjApOwkJCS8vIGRyaXZlIGZvcndhcmRzIGhhbGYgc3BlZWQNCisJCQlXYWl0KDIuMCk7CQkJCQkJCS8vICAgIGZvciAyIHNlY29uZHMNCisJCQlteVJvYm90LT5Ecml2ZSgwLjAsIDAuMCk7CQkJLy8gc3RvcCByb2JvdA0KKwkJfQ0KKwkJbXlSb2JvdC0+U2V0U2FmZXR5RW5hYmxlZCh0cnVlKTsNCisJfQ0KKw0KKwkvKioNCisJICogUnVucyB0aGUgbW90b3JzIHVuZGVyIGRyaXZlciBjb250cm9sIHdpdGggZWl0aGVyIHRhbmsgb3IgYXJjYWRlIHN0ZWVyaW5nIHNlbGVjdGVkDQorCSAqIGJ5IGEganVtcGVyIGluIERTIERpZ2luIDAuIEFsc28gYW4gYXJtIHdpbGwgb3BlcmF0ZSBiYXNlZCBvbiBhIGpveXN0aWNrIFktYXhpcy4gDQorCSAqLw0KKwl2b2lkIE9wZXJhdG9yQ29udHJvbCh2b2lkKQ0KKwl7DQorCQlWaWN0b3IgYXJtTW90b3IoNSk7CQkJCQkJLy8gY3JlYXRlIGFybSBtb3RvciBpbnN0YW5jZQ0KKwkJd2hpbGUgKElzT3BlcmF0b3JDb250cm9sKCkpDQorCQl7DQorCQkJLy8gZGV0ZXJtaW5lIGlmIHRhbmsgb3IgYXJjYWRlIG1vZGU7IGRlZmF1bHQgd2l0aCBubyBqdW1wZXIgaXMgZm9yIHRhbmsgZHJpdmUNCisJCQlpZiAoZHMtPkdldERpZ2l0YWxJbihBUkNBREVfTU9ERSkgPT0gMCkgewkNCisJCQkJbXlSb2JvdC0+VGFua0RyaXZlKGxlZnRTdGljaywgcmlnaHRTdGljayk7CSAvLyBkcml2ZSB3aXRoIHRhbmsgc3R5bGUNCisJCQl9IGVsc2V7DQorCQkJCW15Um9ib3QtPkFyY2FkZURyaXZlKHJpZ2h0U3RpY2spOwkgICAgICAgICAvLyBkcml2ZSB3aXRoIGFyY2FkZSBzdHlsZSAodXNlIHJpZ2h0IHN0aWNrKQ0KKwkJCX0NCisNCisJCQkvLyBDb250cm9sIHRoZSBtb3ZlbWVudCBvZiB0aGUgYXJtIHVzaW5nIHRoZSBqb3lzdGljaw0KKwkJCS8vIFVzZSB0aGUgIlkiIHZhbHVlIG9mIHRoZSBhcm0gam95c3RpY2sgdG8gY29udHJvbCB0aGUgbW92ZW1lbnQgb2YgdGhlIGFybQ0KKwkJCWZsb2F0IGFybVN0aWNrRGlyZWN0aW9uID0gYXJtU3RpY2stPkdldFkoKTsNCisNCisJCQkvLyBpZiBhdCBhIGxpbWl0IGFuZCB0ZWxsaW5nIHRoZSBhcm0gdG8gbW92ZSBwYXN0IHRoZSBsaW1pdCwgZG9uJ3QgZHJpdmUgdGhlIG1vdG9yDQorCQkJaWYgKChhcm1VcHBlckxpbWl0LT5HZXQoKSA9PSAwKSAmJiAoYXJtU3RpY2tEaXJlY3Rpb24gPiAwLjApKSB7DQorCQkJCWFybVN0aWNrRGlyZWN0aW9uID0gMDsNCisJCQl9IGVsc2UgaWYgKChhcm1Mb3dlckxpbWl0LT5HZXQoKSA9PSAwKSAmJiAoYXJtU3RpY2tEaXJlY3Rpb24gPCAwLjApKSB7DQorCQkJCWFybVN0aWNrRGlyZWN0aW9uID0gMDsNCisJCQl9DQorDQorCQkJLy8gU2V0IHRoZSBtb3RvciB2YWx1ZSANCisJCQlhcm1Nb3Rvci5TZXQoYXJtU3RpY2tEaXJlY3Rpb24pOw0KKwkJCVdhaXQoMC4wMDUpOw0KKwkJfQ0KKwl9DQorfTsNCisNCitTVEFSVF9ST0JPVF9DTEFTUyhEZWZhdWx0Um9ib3QpOw0KKw0KKw0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9EZWZhdWx0Um9ib3QvTWFrZWZpbGUgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vRGVmYXVsdFJvYm90L01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2YTljYmEKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vRGVmYXVsdFJvYm90L01ha2VmaWxlCkBAIC0wLDAgKzEsMjYwNiBAQAorIyBXaW5kIFJpdmVyIFdvcmtiZW5jaCBnZW5lcmF0ZWQgTWFrZWZpbGUuDQorIyBEbyBub3QgZWRpdCEhIQ0KKyMNCisjIFRoZSBmaWxlICIud3JtYWtlZmlsZSIgaXMgdGhlIHRlbXBsYXRlIHVzZWQgYnkgdGhlIFdpbmQgUml2ZXIgV29ya2JlbmNoIHRvDQorIyBnZW5lcmF0ZSB0aGUgbWFrZWZpbGVzIG9mIHRoaXMgcHJvamVjdC4gQWRkIHVzZXItc3BlY2lmaWMgYnVpbGQgdGFyZ2V0cyBhbmQNCisjIG1ha2UgcnVsZXMgb25seSghKSBpbiB0aGlzIHByb2plY3QncyAiLndybWFrZWZpbGUiIGZpbGUuIFRoZXNlIHdpbGwgdGhlbiBiZQ0KKyMgYXV0b21hdGljYWxseSBkdW1wZWQgaW50byB0aGUgbWFrZWZpbGVzLg0KKw0KK1dJTkRfSE9NRSA6PSAkKHN1YnN0IFwsLywkKFdJTkRfSE9NRSkpDQorV0lORF9CQVNFIDo9ICQoc3Vic3QgXCwvLCQoV0lORF9CQVNFKSkNCitXSU5EX1VTUiA6PSAkKHN1YnN0IFwsLywkKFdJTkRfVVNSKSkNCisNCithbGwgOiBwcmVfcmVjdXJzaW9uIHN1YmRpcnNfYWxsIHBvc3RfcmVjdXJzaW9uIHByZV9idWlsZCBtYWluX2FsbCBwb3N0X2J1aWxkDQorDQorVFJBQ0U9MA0KK1RSQUNFT049JChUUkFDRTowPUApDQorVFJBQ0VfRkxBRz0kKFRSQUNFT046MT0pDQorDQorTUFLRUZJTEUgOj0gTWFrZWZpbGUNCisNCitCVUlMRF9TUEVDID0gUFBDNjAzZ251DQorREVCVUdfTU9ERSA9IDENCitTUkNfRElSIDo9IC4NCitCVUlMRF9ST09UX0RJUiA6PSANCitQUkpfUk9PVF9ESVIgOj0gQzovV2luZFJpdmVyL3dvcmtzcGFjZS9TaW1wbGVSb2JvdA0KK1dTX1JPT1RfRElSIDo9IEM6L1dpbmRSaXZlci93b3Jrc3BhY2UNCisNCitBTExfQlVJTERfU1BFQ1MgOj0gUFBDMzJkaWFiIFBQQzMyZ251IFBQQzMyc2ZkaWFiIFBQQzMyc2ZnbnUgXA0KKwkgUFBDNDAzZGlhYiBQUEM0MDNnbnUgUFBDNDA1ZGlhYiBQUEM0MDVnbnUgXA0KKwkgUFBDNDA1c2ZkaWFiIFBQQzQwNXNmZ251IFBQQzQ0MGRpYWIgUFBDNDQwZ251IFwNCisJIFBQQzQ0MHNmZGlhYiBQUEM0NDBzZmdudSBQUEM2MDNkaWFiIFBQQzYwM2dudSBcDQorCSBQUEM2MDRkaWFiIFBQQzYwNGdudSBQUEM4NVhYZGlhYiBQUEM4NVhYZ251IFwNCisJIFBQQzg1WFhzZmRpYWIgUFBDODVYWHNmZ251IFBQQzg2MHNmZGlhYiBQUEM4NjBzZmdudSBcDQorCSBTSU1MSU5VWGRpYWIgU0lNTElOVVhnbnUgU0lNTlRkaWFiIFNJTU5UZ251IFwNCisJIFNJTVNQQVJDU09MQVJJU2RpYWIgU0lNU1BBUkNTT0xBUklTZ251DQorRU5BQkxFRF9CVUlMRF9TUEVDUyA6PSBQUEM2MDNnbnUNCisNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzMyZGlhYikNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorT0JKX0RJUiA6PSBQUEMzMmRpYWJfREVCVUcNCitlbHNlDQorT0JKX0RJUiA6PSBQUEMzMmRpYWINCitlbmRpZg0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEMzMmdudSkNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorT0JKX0RJUiA6PSBQUEMzMmdudV9ERUJVRw0KK2Vsc2UNCitPQkpfRElSIDo9IFBQQzMyZ251DQorZW5kaWYNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDMzJzZmRpYWIpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK09CSl9ESVIgOj0gUFBDMzJzZmRpYWJfREVCVUcNCitlbHNlDQorT0JKX0RJUiA6PSBQUEMzMnNmZGlhYg0KK2VuZGlmDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzMyc2ZnbnUpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK09CSl9ESVIgOj0gUFBDMzJzZmdudV9ERUJVRw0KK2Vsc2UNCitPQkpfRElSIDo9IFBQQzMyc2ZnbnUNCitlbmRpZg0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM0MDNkaWFiKQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitPQkpfRElSIDo9IFBQQzQwM2RpYWJfREVCVUcNCitlbHNlDQorT0JKX0RJUiA6PSBQUEM0MDNkaWFiDQorZW5kaWYNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNDAzZ251KQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitPQkpfRElSIDo9IFBQQzQwM2dudV9ERUJVRw0KK2Vsc2UNCitPQkpfRElSIDo9IFBQQzQwM2dudQ0KK2VuZGlmDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzQwNWRpYWIpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK09CSl9ESVIgOj0gUFBDNDA1ZGlhYl9ERUJVRw0KK2Vsc2UNCitPQkpfRElSIDo9IFBQQzQwNWRpYWINCitlbmRpZg0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM0MDVnbnUpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK09CSl9ESVIgOj0gUFBDNDA1Z251X0RFQlVHDQorZWxzZQ0KK09CSl9ESVIgOj0gUFBDNDA1Z251DQorZW5kaWYNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNDA1c2ZkaWFiKQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitPQkpfRElSIDo9IFBQQzQwNXNmZGlhYl9ERUJVRw0KK2Vsc2UNCitPQkpfRElSIDo9IFBQQzQwNXNmZGlhYg0KK2VuZGlmDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzQwNXNmZ251KQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitPQkpfRElSIDo9IFBQQzQwNXNmZ251X0RFQlVHDQorZWxzZQ0KK09CSl9ESVIgOj0gUFBDNDA1c2ZnbnUNCitlbmRpZg0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM0NDBkaWFiKQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitPQkpfRElSIDo9IFBQQzQ0MGRpYWJfREVCVUcNCitlbHNlDQorT0JKX0RJUiA6PSBQUEM0NDBkaWFiDQorZW5kaWYNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNDQwZ251KQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitPQkpfRElSIDo9IFBQQzQ0MGdudV9ERUJVRw0KK2Vsc2UNCitPQkpfRElSIDo9IFBQQzQ0MGdudQ0KK2VuZGlmDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzQ0MHNmZGlhYikNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorT0JKX0RJUiA6PSBQUEM0NDBzZmRpYWJfREVCVUcNCitlbHNlDQorT0JKX0RJUiA6PSBQUEM0NDBzZmRpYWINCitlbmRpZg0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM0NDBzZmdudSkNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorT0JKX0RJUiA6PSBQUEM0NDBzZmdudV9ERUJVRw0KK2Vsc2UNCitPQkpfRElSIDo9IFBQQzQ0MHNmZ251DQorZW5kaWYNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNjAzZGlhYikNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorT0JKX0RJUiA6PSBQUEM2MDNkaWFiX0RFQlVHDQorZWxzZQ0KK09CSl9ESVIgOj0gUFBDNjAzZGlhYg0KK2VuZGlmDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzYwM2dudSkNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorT0JKX0RJUiA6PSBQUEM2MDNnbnVfREVCVUcNCitlbHNlDQorT0JKX0RJUiA6PSBQUEM2MDNnbnUNCitlbmRpZg0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM2MDRkaWFiKQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitPQkpfRElSIDo9IFBQQzYwNGRpYWJfREVCVUcNCitlbHNlDQorT0JKX0RJUiA6PSBQUEM2MDRkaWFiDQorZW5kaWYNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNjA0Z251KQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitPQkpfRElSIDo9IFBQQzYwNGdudV9ERUJVRw0KK2Vsc2UNCitPQkpfRElSIDo9IFBQQzYwNGdudQ0KK2VuZGlmDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzg1WFhkaWFiKQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitPQkpfRElSIDo9IFBQQzg1WFhkaWFiX0RFQlVHDQorZWxzZQ0KK09CSl9ESVIgOj0gUFBDODVYWGRpYWINCitlbmRpZg0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM4NVhYZ251KQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitPQkpfRElSIDo9IFBQQzg1WFhnbnVfREVCVUcNCitlbHNlDQorT0JKX0RJUiA6PSBQUEM4NVhYZ251DQorZW5kaWYNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDODVYWHNmZGlhYikNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorT0JKX0RJUiA6PSBQUEM4NVhYc2ZkaWFiX0RFQlVHDQorZWxzZQ0KK09CSl9ESVIgOj0gUFBDODVYWHNmZGlhYg0KK2VuZGlmDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzg1WFhzZmdudSkNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorT0JKX0RJUiA6PSBQUEM4NVhYc2ZnbnVfREVCVUcNCitlbHNlDQorT0JKX0RJUiA6PSBQUEM4NVhYc2ZnbnUNCitlbmRpZg0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM4NjBzZmRpYWIpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK09CSl9ESVIgOj0gUFBDODYwc2ZkaWFiX0RFQlVHDQorZWxzZQ0KK09CSl9ESVIgOj0gUFBDODYwc2ZkaWFiDQorZW5kaWYNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDODYwc2ZnbnUpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK09CSl9ESVIgOj0gUFBDODYwc2ZnbnVfREVCVUcNCitlbHNlDQorT0JKX0RJUiA6PSBQUEM4NjBzZmdudQ0KK2VuZGlmDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFNJTUxJTlVYZGlhYikNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorT0JKX0RJUiA6PSBTSU1MSU5VWGRpYWJfREVCVUcNCitlbHNlDQorT0JKX0RJUiA6PSBTSU1MSU5VWGRpYWINCitlbmRpZg0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxTSU1MSU5VWGdudSkNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorT0JKX0RJUiA6PSBTSU1MSU5VWGdudV9ERUJVRw0KK2Vsc2UNCitPQkpfRElSIDo9IFNJTUxJTlVYZ251DQorZW5kaWYNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksU0lNTlRkaWFiKQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitPQkpfRElSIDo9IFNJTU5UZGlhYl9ERUJVRw0KK2Vsc2UNCitPQkpfRElSIDo9IFNJTU5UZGlhYg0KK2VuZGlmDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFNJTU5UZ251KQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitPQkpfRElSIDo9IFNJTU5UZ251X0RFQlVHDQorZWxzZQ0KK09CSl9ESVIgOj0gU0lNTlRnbnUNCitlbmRpZg0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxTSU1TUEFSQ1NPTEFSSVNkaWFiKQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitPQkpfRElSIDo9IFNJTVNQQVJDU09MQVJJU2RpYWJfREVCVUcNCitlbHNlDQorT0JKX0RJUiA6PSBTSU1TUEFSQ1NPTEFSSVNkaWFiDQorZW5kaWYNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksU0lNU1BBUkNTT0xBUklTZ251KQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitPQkpfRElSIDo9IFNJTVNQQVJDU09MQVJJU2dudV9ERUJVRw0KK2Vsc2UNCitPQkpfRElSIDo9IFNJTVNQQVJDU09MQVJJU2dudQ0KK2VuZGlmDQorZW5kaWYNCisNCitERVBfRklMRVMgOj0gJChPQkpfRElSKS9TaW1wbGVSb2JvdC5kDQorLWluY2x1ZGUgJChERVBfRklMRVMpDQorDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEMzMmRpYWIpDQorU1VCRElSUyA6PQ0KK09CSkVDVFMgOj0gJChPQkpfRElSKS9TaW1wbGVSb2JvdC5vDQorDQorUFJPSkVDVF9UQVJHRVRTIDo9ICQoT0JKX0RJUikvU2ltcGxlUm9ib3Qub3V0DQorDQorU1VCX09CSkVDVFMgOj0NCitTVUJfVEFSR0VUUyA6PQ0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEMzMmdudSkNCitTVUJESVJTIDo9DQorT0JKRUNUUyA6PSAkKE9CSl9ESVIpL1NpbXBsZVJvYm90Lm8NCisNCitQUk9KRUNUX1RBUkdFVFMgOj0gJChPQkpfRElSKS9TaW1wbGVSb2JvdC5vdXQNCisNCitTVUJfT0JKRUNUUyA6PQ0KK1NVQl9UQVJHRVRTIDo9DQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzMyc2ZkaWFiKQ0KK1NVQkRJUlMgOj0NCitPQkpFQ1RTIDo9ICQoT0JKX0RJUikvU2ltcGxlUm9ib3Qubw0KKw0KK1BST0pFQ1RfVEFSR0VUUyA6PSAkKE9CSl9ESVIpL1NpbXBsZVJvYm90Lm91dA0KKw0KK1NVQl9PQkpFQ1RTIDo9DQorU1VCX1RBUkdFVFMgOj0NCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDMzJzZmdudSkNCitTVUJESVJTIDo9DQorT0JKRUNUUyA6PSAkKE9CSl9ESVIpL1NpbXBsZVJvYm90Lm8NCisNCitQUk9KRUNUX1RBUkdFVFMgOj0gJChPQkpfRElSKS9TaW1wbGVSb2JvdC5vdXQNCisNCitTVUJfT0JKRUNUUyA6PQ0KK1NVQl9UQVJHRVRTIDo9DQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzQwM2RpYWIpDQorU1VCRElSUyA6PQ0KK09CSkVDVFMgOj0gJChPQkpfRElSKS9TaW1wbGVSb2JvdC5vDQorDQorUFJPSkVDVF9UQVJHRVRTIDo9ICQoT0JKX0RJUikvU2ltcGxlUm9ib3Qub3V0DQorDQorU1VCX09CSkVDVFMgOj0NCitTVUJfVEFSR0VUUyA6PQ0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM0MDNnbnUpDQorU1VCRElSUyA6PQ0KK09CSkVDVFMgOj0gJChPQkpfRElSKS9TaW1wbGVSb2JvdC5vDQorDQorUFJPSkVDVF9UQVJHRVRTIDo9ICQoT0JKX0RJUikvU2ltcGxlUm9ib3Qub3V0DQorDQorU1VCX09CSkVDVFMgOj0NCitTVUJfVEFSR0VUUyA6PQ0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM0MDVkaWFiKQ0KK1NVQkRJUlMgOj0NCitPQkpFQ1RTIDo9ICQoT0JKX0RJUikvU2ltcGxlUm9ib3Qubw0KKw0KK1BST0pFQ1RfVEFSR0VUUyA6PSAkKE9CSl9ESVIpL1NpbXBsZVJvYm90Lm91dA0KKw0KK1NVQl9PQkpFQ1RTIDo9DQorU1VCX1RBUkdFVFMgOj0NCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNDA1Z251KQ0KK1NVQkRJUlMgOj0NCitPQkpFQ1RTIDo9ICQoT0JKX0RJUikvU2ltcGxlUm9ib3Qubw0KKw0KK1BST0pFQ1RfVEFSR0VUUyA6PSAkKE9CSl9ESVIpL1NpbXBsZVJvYm90Lm91dA0KKw0KK1NVQl9PQkpFQ1RTIDo9DQorU1VCX1RBUkdFVFMgOj0NCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNDA1c2ZkaWFiKQ0KK1NVQkRJUlMgOj0NCitPQkpFQ1RTIDo9ICQoT0JKX0RJUikvU2ltcGxlUm9ib3Qubw0KKw0KK1BST0pFQ1RfVEFSR0VUUyA6PSAkKE9CSl9ESVIpL1NpbXBsZVJvYm90Lm91dA0KKw0KK1NVQl9PQkpFQ1RTIDo9DQorU1VCX1RBUkdFVFMgOj0NCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNDA1c2ZnbnUpDQorU1VCRElSUyA6PQ0KK09CSkVDVFMgOj0gJChPQkpfRElSKS9TaW1wbGVSb2JvdC5vDQorDQorUFJPSkVDVF9UQVJHRVRTIDo9ICQoT0JKX0RJUikvU2ltcGxlUm9ib3Qub3V0DQorDQorU1VCX09CSkVDVFMgOj0NCitTVUJfVEFSR0VUUyA6PQ0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM0NDBkaWFiKQ0KK1NVQkRJUlMgOj0NCitPQkpFQ1RTIDo9ICQoT0JKX0RJUikvU2ltcGxlUm9ib3Qubw0KKw0KK1BST0pFQ1RfVEFSR0VUUyA6PSAkKE9CSl9ESVIpL1NpbXBsZVJvYm90Lm91dA0KKw0KK1NVQl9PQkpFQ1RTIDo9DQorU1VCX1RBUkdFVFMgOj0NCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNDQwZ251KQ0KK1NVQkRJUlMgOj0NCitPQkpFQ1RTIDo9ICQoT0JKX0RJUikvU2ltcGxlUm9ib3Qubw0KKw0KK1BST0pFQ1RfVEFSR0VUUyA6PSAkKE9CSl9ESVIpL1NpbXBsZVJvYm90Lm91dA0KKw0KK1NVQl9PQkpFQ1RTIDo9DQorU1VCX1RBUkdFVFMgOj0NCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNDQwc2ZkaWFiKQ0KK1NVQkRJUlMgOj0NCitPQkpFQ1RTIDo9ICQoT0JKX0RJUikvU2ltcGxlUm9ib3Qubw0KKw0KK1BST0pFQ1RfVEFSR0VUUyA6PSAkKE9CSl9ESVIpL1NpbXBsZVJvYm90Lm91dA0KKw0KK1NVQl9PQkpFQ1RTIDo9DQorU1VCX1RBUkdFVFMgOj0NCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNDQwc2ZnbnUpDQorU1VCRElSUyA6PQ0KK09CSkVDVFMgOj0gJChPQkpfRElSKS9TaW1wbGVSb2JvdC5vDQorDQorUFJPSkVDVF9UQVJHRVRTIDo9ICQoT0JKX0RJUikvU2ltcGxlUm9ib3Qub3V0DQorDQorU1VCX09CSkVDVFMgOj0NCitTVUJfVEFSR0VUUyA6PQ0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM2MDNkaWFiKQ0KK1NVQkRJUlMgOj0NCitPQkpFQ1RTIDo9ICQoT0JKX0RJUikvU2ltcGxlUm9ib3Qubw0KKw0KK1BST0pFQ1RfVEFSR0VUUyA6PSAkKE9CSl9ESVIpL1NpbXBsZVJvYm90Lm91dA0KKw0KK1NVQl9PQkpFQ1RTIDo9DQorU1VCX1RBUkdFVFMgOj0NCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNjAzZ251KQ0KK1NVQkRJUlMgOj0NCitPQkpFQ1RTIDo9ICQoT0JKX0RJUikvU2ltcGxlUm9ib3Qubw0KKw0KK1BST0pFQ1RfVEFSR0VUUyA6PSAkKE9CSl9ESVIpL1NpbXBsZVJvYm90Lm91dA0KKw0KK1NVQl9PQkpFQ1RTIDo9DQorU1VCX1RBUkdFVFMgOj0NCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNjA0ZGlhYikNCitTVUJESVJTIDo9DQorT0JKRUNUUyA6PSAkKE9CSl9ESVIpL1NpbXBsZVJvYm90Lm8NCisNCitQUk9KRUNUX1RBUkdFVFMgOj0gJChPQkpfRElSKS9TaW1wbGVSb2JvdC5vdXQNCisNCitTVUJfT0JKRUNUUyA6PQ0KK1NVQl9UQVJHRVRTIDo9DQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzYwNGdudSkNCitTVUJESVJTIDo9DQorT0JKRUNUUyA6PSAkKE9CSl9ESVIpL1NpbXBsZVJvYm90Lm8NCisNCitQUk9KRUNUX1RBUkdFVFMgOj0gJChPQkpfRElSKS9TaW1wbGVSb2JvdC5vdXQNCisNCitTVUJfT0JKRUNUUyA6PQ0KK1NVQl9UQVJHRVRTIDo9DQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzg1WFhkaWFiKQ0KK1NVQkRJUlMgOj0NCitPQkpFQ1RTIDo9ICQoT0JKX0RJUikvU2ltcGxlUm9ib3Qubw0KKw0KK1BST0pFQ1RfVEFSR0VUUyA6PSAkKE9CSl9ESVIpL1NpbXBsZVJvYm90Lm91dA0KKw0KK1NVQl9PQkpFQ1RTIDo9DQorU1VCX1RBUkdFVFMgOj0NCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDODVYWGdudSkNCitTVUJESVJTIDo9DQorT0JKRUNUUyA6PSAkKE9CSl9ESVIpL1NpbXBsZVJvYm90Lm8NCisNCitQUk9KRUNUX1RBUkdFVFMgOj0gJChPQkpfRElSKS9TaW1wbGVSb2JvdC5vdXQNCisNCitTVUJfT0JKRUNUUyA6PQ0KK1NVQl9UQVJHRVRTIDo9DQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzg1WFhzZmRpYWIpDQorU1VCRElSUyA6PQ0KK09CSkVDVFMgOj0gJChPQkpfRElSKS9TaW1wbGVSb2JvdC5vDQorDQorUFJPSkVDVF9UQVJHRVRTIDo9ICQoT0JKX0RJUikvU2ltcGxlUm9ib3Qub3V0DQorDQorU1VCX09CSkVDVFMgOj0NCitTVUJfVEFSR0VUUyA6PQ0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM4NVhYc2ZnbnUpDQorU1VCRElSUyA6PQ0KK09CSkVDVFMgOj0gJChPQkpfRElSKS9TaW1wbGVSb2JvdC5vDQorDQorUFJPSkVDVF9UQVJHRVRTIDo9ICQoT0JKX0RJUikvU2ltcGxlUm9ib3Qub3V0DQorDQorU1VCX09CSkVDVFMgOj0NCitTVUJfVEFSR0VUUyA6PQ0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM4NjBzZmRpYWIpDQorU1VCRElSUyA6PQ0KK09CSkVDVFMgOj0gJChPQkpfRElSKS9TaW1wbGVSb2JvdC5vDQorDQorUFJPSkVDVF9UQVJHRVRTIDo9ICQoT0JKX0RJUikvU2ltcGxlUm9ib3Qub3V0DQorDQorU1VCX09CSkVDVFMgOj0NCitTVUJfVEFSR0VUUyA6PQ0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM4NjBzZmdudSkNCitTVUJESVJTIDo9DQorT0JKRUNUUyA6PSAkKE9CSl9ESVIpL1NpbXBsZVJvYm90Lm8NCisNCitQUk9KRUNUX1RBUkdFVFMgOj0gJChPQkpfRElSKS9TaW1wbGVSb2JvdC5vdXQNCisNCitTVUJfT0JKRUNUUyA6PQ0KK1NVQl9UQVJHRVRTIDo9DQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFNJTUxJTlVYZGlhYikNCitTVUJESVJTIDo9DQorT0JKRUNUUyA6PSAkKE9CSl9ESVIpL1NpbXBsZVJvYm90Lm8NCisNCitQUk9KRUNUX1RBUkdFVFMgOj0gJChPQkpfRElSKS9TaW1wbGVSb2JvdC5vdXQNCisNCitTVUJfT0JKRUNUUyA6PQ0KK1NVQl9UQVJHRVRTIDo9DQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFNJTUxJTlVYZ251KQ0KK1NVQkRJUlMgOj0NCitPQkpFQ1RTIDo9ICQoT0JKX0RJUikvU2ltcGxlUm9ib3Qubw0KKw0KK1BST0pFQ1RfVEFSR0VUUyA6PSAkKE9CSl9ESVIpL1NpbXBsZVJvYm90Lm91dA0KKw0KK1NVQl9PQkpFQ1RTIDo9DQorU1VCX1RBUkdFVFMgOj0NCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksU0lNTlRkaWFiKQ0KK1NVQkRJUlMgOj0NCitPQkpFQ1RTIDo9ICQoT0JKX0RJUikvU2ltcGxlUm9ib3Qubw0KKw0KK1BST0pFQ1RfVEFSR0VUUyA6PSAkKE9CSl9ESVIpL1NpbXBsZVJvYm90Lm91dA0KKw0KK1NVQl9PQkpFQ1RTIDo9DQorU1VCX1RBUkdFVFMgOj0NCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksU0lNTlRnbnUpDQorU1VCRElSUyA6PQ0KK09CSkVDVFMgOj0gJChPQkpfRElSKS9TaW1wbGVSb2JvdC5vDQorDQorUFJPSkVDVF9UQVJHRVRTIDo9ICQoT0JKX0RJUikvU2ltcGxlUm9ib3Qub3V0DQorDQorU1VCX09CSkVDVFMgOj0NCitTVUJfVEFSR0VUUyA6PQ0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxTSU1TUEFSQ1NPTEFSSVNkaWFiKQ0KK1NVQkRJUlMgOj0NCitPQkpFQ1RTIDo9ICQoT0JKX0RJUikvU2ltcGxlUm9ib3Qubw0KKw0KK1BST0pFQ1RfVEFSR0VUUyA6PSAkKE9CSl9ESVIpL1NpbXBsZVJvYm90Lm91dA0KKw0KK1NVQl9PQkpFQ1RTIDo9DQorU1VCX1RBUkdFVFMgOj0NCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksU0lNU1BBUkNTT0xBUklTZ251KQ0KK1NVQkRJUlMgOj0NCitPQkpFQ1RTIDo9ICQoT0JKX0RJUikvU2ltcGxlUm9ib3Qubw0KKw0KK1BST0pFQ1RfVEFSR0VUUyA6PSAkKE9CSl9ESVIpL1NpbXBsZVJvYm90Lm91dA0KKw0KK1NVQl9PQkpFQ1RTIDo9DQorU1VCX1RBUkdFVFMgOj0NCitlbmRpZg0KKw0KK1BST0pFQ1RfVFlQRSA9IERLTQ0KK0RFRklORVMgPSANCitFWFBBTkRfREJHID0gMA0KKw0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDMzJkaWFiKQ0KK1ZYX0NQVV9GQU1JTFkgPSBwcGMNCitDUFUgPSBQUEMzMg0KK1RPT0xfRkFNSUxZID0gZGlhYg0KK1RPT0wgPSBkaWFiDQorVE9PTF9QQVRIID0gDQorQ0NfQVJDSF9TUEVDID0gLXRQUENGSDp2eHdvcmtzNjMgLVhzdG13LXNsb3cgLURQUEMzMl9mcDYweA0KK0xJQlBBVEggPSANCitMSUJTID0gDQorDQorSURFX0lOQ0xVREVTID0gLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2ggLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2gvd3JuL2NvcmVpcCANCisNCitJREVfTElCUkFSSUVTID0gDQorZW5kaWYNCisNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzMyZ251KQ0KK1ZYX0NQVV9GQU1JTFkgPSBwcGMNCitDUFUgPSBQUEMzMg0KK1RPT0xfRkFNSUxZID0gZ251DQorVE9PTCA9IGdudQ0KK1RPT0xfUEFUSCA9IA0KK0NDX0FSQ0hfU1BFQyA9IC1taGFyZC1mbG9hdCAtbXN0cmljdC1hbGlnbiAtbW5vLWltcGxpY2l0LWZwIC1EUFBDMzJfZnA2MHgNCitMSUJQQVRIID0gDQorTElCUyA9IA0KKw0KK0lERV9JTkNMVURFUyA9IC1JJChXSU5EX0JBU0UpL3RhcmdldC9oIC1JJChXSU5EX0JBU0UpL3RhcmdldC9oL3dybi9jb3JlaXAgDQorDQorSURFX0xJQlJBUklFUyA9IA0KK2VuZGlmDQorDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEMzMnNmZGlhYikNCitWWF9DUFVfRkFNSUxZID0gcHBjDQorQ1BVID0gUFBDMzINCitUT09MX0ZBTUlMWSA9IGRpYWINCitUT09MID0gc2ZkaWFiDQorVE9PTF9QQVRIID0gDQorQ0NfQVJDSF9TUEVDID0gLXRQUENGUzp2eHdvcmtzNjMNCitMSUJQQVRIID0gDQorTElCUyA9IA0KKw0KK0lERV9JTkNMVURFUyA9IC1JJChXSU5EX0JBU0UpL3RhcmdldC9oIC1JJChXSU5EX0JBU0UpL3RhcmdldC9oL3dybi9jb3JlaXAgDQorDQorSURFX0xJQlJBUklFUyA9IA0KK2VuZGlmDQorDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEMzMnNmZ251KQ0KK1ZYX0NQVV9GQU1JTFkgPSBwcGMNCitDUFUgPSBQUEMzMg0KK1RPT0xfRkFNSUxZID0gZ251DQorVE9PTCA9IHNmZ251DQorVE9PTF9QQVRIID0gDQorQ0NfQVJDSF9TUEVDID0gLW1zb2Z0LWZsb2F0IC1tc3RyaWN0LWFsaWduDQorTElCUEFUSCA9IA0KK0xJQlMgPSANCisNCitJREVfSU5DTFVERVMgPSAtSSQoV0lORF9CQVNFKS90YXJnZXQvaCAtSSQoV0lORF9CQVNFKS90YXJnZXQvaC93cm4vY29yZWlwIA0KKw0KK0lERV9MSUJSQVJJRVMgPSANCitlbmRpZg0KKw0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNDAzZGlhYikNCitWWF9DUFVfRkFNSUxZID0gcHBjDQorQ1BVID0gUFBDNDAzDQorVE9PTF9GQU1JTFkgPSBkaWFiDQorVE9PTCA9IGRpYWINCitUT09MX1BBVEggPSANCitDQ19BUkNIX1NQRUMgPSAtdFBQQzQwM0ZTOnZ4d29ya3M2Mw0KK0xJQlBBVEggPSANCitMSUJTID0gDQorDQorSURFX0lOQ0xVREVTID0gLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2ggLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2gvd3JuL2NvcmVpcCANCisNCitJREVfTElCUkFSSUVTID0gDQorZW5kaWYNCisNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzQwM2dudSkNCitWWF9DUFVfRkFNSUxZID0gcHBjDQorQ1BVID0gUFBDNDAzDQorVE9PTF9GQU1JTFkgPSBnbnUNCitUT09MID0gZ251DQorVE9PTF9QQVRIID0gDQorQ0NfQVJDSF9TUEVDID0gLW1jcHU9NDAzIC1tc3RyaWN0LWFsaWduIC1tc29mdC1mbG9hdA0KK0xJQlBBVEggPSANCitMSUJTID0gDQorDQorSURFX0lOQ0xVREVTID0gLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2ggLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2gvd3JuL2NvcmVpcCANCisNCitJREVfTElCUkFSSUVTID0gDQorZW5kaWYNCisNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzQwNWRpYWIpDQorVlhfQ1BVX0ZBTUlMWSA9IHBwYw0KK0NQVSA9IFBQQzQwNQ0KK1RPT0xfRkFNSUxZID0gZGlhYg0KK1RPT0wgPSBkaWFiDQorVE9PTF9QQVRIID0gDQorQ0NfQVJDSF9TUEVDID0gLXRQUEM0MDVGUzp2eHdvcmtzNjMNCitMSUJQQVRIID0gDQorTElCUyA9IA0KKw0KK0lERV9JTkNMVURFUyA9IC1JJChXSU5EX0JBU0UpL3RhcmdldC9oIC1JJChXSU5EX0JBU0UpL3RhcmdldC9oL3dybi9jb3JlaXAgDQorDQorSURFX0xJQlJBUklFUyA9IA0KK2VuZGlmDQorDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM0MDVnbnUpDQorVlhfQ1BVX0ZBTUlMWSA9IHBwYw0KK0NQVSA9IFBQQzQwNQ0KK1RPT0xfRkFNSUxZID0gZ251DQorVE9PTCA9IGdudQ0KK1RPT0xfUEFUSCA9IA0KK0NDX0FSQ0hfU1BFQyA9IC1tY3B1PTQwNSAtbXN0cmljdC1hbGlnbiAtbXNvZnQtZmxvYXQNCitMSUJQQVRIID0gDQorTElCUyA9IA0KKw0KK0lERV9JTkNMVURFUyA9IC1JJChXSU5EX0JBU0UpL3RhcmdldC9oIC1JJChXSU5EX0JBU0UpL3RhcmdldC9oL3dybi9jb3JlaXAgDQorDQorSURFX0xJQlJBUklFUyA9IA0KK2VuZGlmDQorDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM0MDVzZmRpYWIpDQorVlhfQ1BVX0ZBTUlMWSA9IHBwYw0KK0NQVSA9IFBQQzQwNQ0KK1RPT0xfRkFNSUxZID0gZGlhYg0KK1RPT0wgPSBzZmRpYWINCitUT09MX1BBVEggPSANCitDQ19BUkNIX1NQRUMgPSAtdFBQQzQwNUZTOnZ4d29ya3M2Mw0KK0xJQlBBVEggPSANCitMSUJTID0gDQorDQorSURFX0lOQ0xVREVTID0gLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2ggLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2gvd3JuL2NvcmVpcCANCisNCitJREVfTElCUkFSSUVTID0gDQorZW5kaWYNCisNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzQwNXNmZ251KQ0KK1ZYX0NQVV9GQU1JTFkgPSBwcGMNCitDUFUgPSBQUEM0MDUNCitUT09MX0ZBTUlMWSA9IGdudQ0KK1RPT0wgPSBzZmdudQ0KK1RPT0xfUEFUSCA9IA0KK0NDX0FSQ0hfU1BFQyA9IC1tY3B1PTQwNSAtbXN0cmljdC1hbGlnbiAtbXNvZnQtZmxvYXQNCitMSUJQQVRIID0gDQorTElCUyA9IA0KKw0KK0lERV9JTkNMVURFUyA9IC1JJChXSU5EX0JBU0UpL3RhcmdldC9oIC1JJChXSU5EX0JBU0UpL3RhcmdldC9oL3dybi9jb3JlaXAgDQorDQorSURFX0xJQlJBUklFUyA9IA0KK2VuZGlmDQorDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM0NDBkaWFiKQ0KK1ZYX0NQVV9GQU1JTFkgPSBwcGMNCitDUFUgPSBQUEM0NDANCitUT09MX0ZBTUlMWSA9IGRpYWINCitUT09MID0gZGlhYg0KK1RPT0xfUEFUSCA9IA0KK0NDX0FSQ0hfU1BFQyA9IC10UFBDNDQwRkg6dnh3b3JrczYzDQorTElCUEFUSCA9IA0KK0xJQlMgPSANCisNCitJREVfSU5DTFVERVMgPSAtSSQoV0lORF9CQVNFKS90YXJnZXQvaCAtSSQoV0lORF9CQVNFKS90YXJnZXQvaC93cm4vY29yZWlwIA0KKw0KK0lERV9MSUJSQVJJRVMgPSANCitlbmRpZg0KKw0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNDQwZ251KQ0KK1ZYX0NQVV9GQU1JTFkgPSBwcGMNCitDUFUgPSBQUEM0NDANCitUT09MX0ZBTUlMWSA9IGdudQ0KK1RPT0wgPSBnbnUNCitUT09MX1BBVEggPSANCitDQ19BUkNIX1NQRUMgPSAtbWNwdT00NDAgLW1zdHJpY3QtYWxpZ24gLW1zb2Z0LWZsb2F0DQorTElCUEFUSCA9IA0KK0xJQlMgPSANCisNCitJREVfSU5DTFVERVMgPSAtSSQoV0lORF9CQVNFKS90YXJnZXQvaCAtSSQoV0lORF9CQVNFKS90YXJnZXQvaC93cm4vY29yZWlwIA0KKw0KK0lERV9MSUJSQVJJRVMgPSANCitlbmRpZg0KKw0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNDQwc2ZkaWFiKQ0KK1ZYX0NQVV9GQU1JTFkgPSBwcGMNCitDUFUgPSBQUEM0NDANCitUT09MX0ZBTUlMWSA9IGRpYWINCitUT09MID0gc2ZkaWFiDQorVE9PTF9QQVRIID0gDQorQ0NfQVJDSF9TUEVDID0gLXRQUEM0NDBGUzp2eHdvcmtzNjMNCitMSUJQQVRIID0gDQorTElCUyA9IA0KKw0KK0lERV9JTkNMVURFUyA9IC1JJChXSU5EX0JBU0UpL3RhcmdldC9oIC1JJChXSU5EX0JBU0UpL3RhcmdldC9oL3dybi9jb3JlaXAgDQorDQorSURFX0xJQlJBUklFUyA9IA0KK2VuZGlmDQorDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM0NDBzZmdudSkNCitWWF9DUFVfRkFNSUxZID0gcHBjDQorQ1BVID0gUFBDNDQwDQorVE9PTF9GQU1JTFkgPSBnbnUNCitUT09MID0gc2ZnbnUNCitUT09MX1BBVEggPSANCitDQ19BUkNIX1NQRUMgPSAtbWNwdT00NDAgLW1zdHJpY3QtYWxpZ24gLW1zb2Z0LWZsb2F0DQorTElCUEFUSCA9IA0KK0xJQlMgPSANCisNCitJREVfSU5DTFVERVMgPSAtSSQoV0lORF9CQVNFKS90YXJnZXQvaCAtSSQoV0lORF9CQVNFKS90YXJnZXQvaC93cm4vY29yZWlwIA0KKw0KK0lERV9MSUJSQVJJRVMgPSANCitlbmRpZg0KKw0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNjAzZGlhYikNCitWWF9DUFVfRkFNSUxZID0gcHBjDQorQ1BVID0gUFBDNjAzDQorVE9PTF9GQU1JTFkgPSBkaWFiDQorVE9PTCA9IGRpYWINCitUT09MX1BBVEggPSANCitDQ19BUkNIX1NQRUMgPSAtdFBQQzYwM0ZIOnZ4d29ya3M2Mw0KK0xJQlBBVEggPSANCitMSUJTID0gDQorDQorSURFX0lOQ0xVREVTID0gLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2ggLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2gvd3JuL2NvcmVpcCANCisNCitJREVfTElCUkFSSUVTID0gDQorZW5kaWYNCisNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzYwM2dudSkNCitWWF9DUFVfRkFNSUxZID0gcHBjDQorQ1BVID0gUFBDNjAzDQorVE9PTF9GQU1JTFkgPSBnbnUNCitUT09MID0gZ251DQorVE9PTF9QQVRIID0gDQorQ0NfQVJDSF9TUEVDID0gLW1jcHU9NjAzIC1tc3RyaWN0LWFsaWduIC1tbm8taW1wbGljaXQtZnAgLW1sb25nY2FsbA0KK0xJQlBBVEggPSANCitMSUJTID0gDQorDQorSURFX0lOQ0xVREVTID0gLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2gvV1BJTGliIC1JJChXSU5EX0JBU0UpL3RhcmdldC9oIC1JJChXSU5EX0JBU0UpL3RhcmdldC9oL3dybi9jb3JlaXAgDQorDQorSURFX0xJQlJBUklFUyA9ICQoV0lORF9CQVNFKS90YXJnZXQvbGliL1dQSUxpYi5hIA0KK2VuZGlmDQorDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM2MDRkaWFiKQ0KK1ZYX0NQVV9GQU1JTFkgPSBwcGMNCitDUFUgPSBQUEM2MDQNCitUT09MX0ZBTUlMWSA9IGRpYWINCitUT09MID0gZGlhYg0KK1RPT0xfUEFUSCA9IA0KK0NDX0FSQ0hfU1BFQyA9IC10UFBDNjA0Rkg6dnh3b3JrczYzDQorTElCUEFUSCA9IA0KK0xJQlMgPSANCisNCitJREVfSU5DTFVERVMgPSAtSSQoV0lORF9CQVNFKS90YXJnZXQvaCAtSSQoV0lORF9CQVNFKS90YXJnZXQvaC93cm4vY29yZWlwIA0KKw0KK0lERV9MSUJSQVJJRVMgPSANCitlbmRpZg0KKw0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNjA0Z251KQ0KK1ZYX0NQVV9GQU1JTFkgPSBwcGMNCitDUFUgPSBQUEM2MDQNCitUT09MX0ZBTUlMWSA9IGdudQ0KK1RPT0wgPSBnbnUNCitUT09MX1BBVEggPSANCitDQ19BUkNIX1NQRUMgPSAtbWNwdT02MDQgLW1zdHJpY3QtYWxpZ24gLW1uby1pbXBsaWNpdC1mcA0KK0xJQlBBVEggPSANCitMSUJTID0gDQorDQorSURFX0lOQ0xVREVTID0gLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2ggLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2gvd3JuL2NvcmVpcCANCisNCitJREVfTElCUkFSSUVTID0gDQorZW5kaWYNCisNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzg1WFhkaWFiKQ0KK1ZYX0NQVV9GQU1JTFkgPSBwcGMNCitDUFUgPSBQUEM4NVhYDQorVE9PTF9GQU1JTFkgPSBkaWFiDQorVE9PTCA9IGRpYWINCitUT09MX1BBVEggPSANCitDQ19BUkNIX1NQRUMgPSAtdFBQQ0U1MDBGUzp2eHdvcmtzNjMNCitMSUJQQVRIID0gDQorTElCUyA9IA0KKw0KK0lERV9JTkNMVURFUyA9IC1JJChXSU5EX0JBU0UpL3RhcmdldC9oIC1JJChXSU5EX0JBU0UpL3RhcmdldC9oL3dybi9jb3JlaXAgDQorDQorSURFX0xJQlJBUklFUyA9IA0KK2VuZGlmDQorDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM4NVhYZ251KQ0KK1ZYX0NQVV9GQU1JTFkgPSBwcGMNCitDUFUgPSBQUEM4NVhYDQorVE9PTF9GQU1JTFkgPSBnbnUNCitUT09MID0gZ251DQorVE9PTF9QQVRIID0gDQorQ0NfQVJDSF9TUEVDID0gLW1jcHU9ODU0MCAtbXN0cmljdC1hbGlnbiAtbXNvZnQtZmxvYXQgLW1hYmk9bm8tc3BlDQorTElCUEFUSCA9IA0KK0xJQlMgPSANCisNCitJREVfSU5DTFVERVMgPSAtSSQoV0lORF9CQVNFKS90YXJnZXQvaCAtSSQoV0lORF9CQVNFKS90YXJnZXQvaC93cm4vY29yZWlwIA0KKw0KK0lERV9MSUJSQVJJRVMgPSANCitlbmRpZg0KKw0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDODVYWHNmZGlhYikNCitWWF9DUFVfRkFNSUxZID0gcHBjDQorQ1BVID0gUFBDODVYWA0KK1RPT0xfRkFNSUxZID0gZGlhYg0KK1RPT0wgPSBzZmRpYWINCitUT09MX1BBVEggPSANCitDQ19BUkNIX1NQRUMgPSAtdFBQQ0U1MDBGUzp2eHdvcmtzNjMNCitMSUJQQVRIID0gDQorTElCUyA9IA0KKw0KK0lERV9JTkNMVURFUyA9IC1JJChXSU5EX0JBU0UpL3RhcmdldC9oIC1JJChXSU5EX0JBU0UpL3RhcmdldC9oL3dybi9jb3JlaXAgDQorDQorSURFX0xJQlJBUklFUyA9IA0KK2VuZGlmDQorDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM4NVhYc2ZnbnUpDQorVlhfQ1BVX0ZBTUlMWSA9IHBwYw0KK0NQVSA9IFBQQzg1WFgNCitUT09MX0ZBTUlMWSA9IGdudQ0KK1RPT0wgPSBzZmdudQ0KK1RPT0xfUEFUSCA9IA0KK0NDX0FSQ0hfU1BFQyA9IC1tY3B1PTg1NDAgLW1zdHJpY3QtYWxpZ24gLW1zb2Z0LWZsb2F0IC1tYWJpPW5vLXNwZQ0KK0xJQlBBVEggPSANCitMSUJTID0gDQorDQorSURFX0lOQ0xVREVTID0gLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2ggLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2gvd3JuL2NvcmVpcCANCisNCitJREVfTElCUkFSSUVTID0gDQorZW5kaWYNCisNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzg2MHNmZGlhYikNCitWWF9DUFVfRkFNSUxZID0gcHBjDQorQ1BVID0gUFBDODYwDQorVE9PTF9GQU1JTFkgPSBkaWFiDQorVE9PTCA9IHNmZGlhYg0KK1RPT0xfUEFUSCA9IA0KK0NDX0FSQ0hfU1BFQyA9IC10UFBDODYwRlM6dnh3b3JrczYzDQorTElCUEFUSCA9IA0KK0xJQlMgPSANCisNCitJREVfSU5DTFVERVMgPSAtSSQoV0lORF9CQVNFKS90YXJnZXQvaCAtSSQoV0lORF9CQVNFKS90YXJnZXQvaC93cm4vY29yZWlwIA0KKw0KK0lERV9MSUJSQVJJRVMgPSANCitlbmRpZg0KKw0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDODYwc2ZnbnUpDQorVlhfQ1BVX0ZBTUlMWSA9IHBwYw0KK0NQVSA9IFBQQzg2MA0KK1RPT0xfRkFNSUxZID0gZ251DQorVE9PTCA9IHNmZ251DQorVE9PTF9QQVRIID0gDQorQ0NfQVJDSF9TUEVDID0gLW1jcHU9ODYwIC1tc3RyaWN0LWFsaWduIC1tc29mdC1mbG9hdA0KK0xJQlBBVEggPSANCitMSUJTID0gDQorDQorSURFX0lOQ0xVREVTID0gLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2ggLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2gvd3JuL2NvcmVpcCANCisNCitJREVfTElCUkFSSUVTID0gDQorZW5kaWYNCisNCitpZmVxICgkKEJVSUxEX1NQRUMpLFNJTUxJTlVYZGlhYikNCitWWF9DUFVfRkFNSUxZID0gc2ltbGludXgNCitDUFUgPSBTSU1MSU5VWA0KK1RPT0xfRkFNSUxZID0gZGlhYg0KK1RPT0wgPSBkaWFiDQorVE9PTF9QQVRIID0gDQorQ0NfQVJDSF9TUEVDID0gLXRYODZMSDp2eHdvcmtzNjMNCitMSUJQQVRIID0gDQorTElCUyA9IA0KKw0KK0lERV9JTkNMVURFUyA9IC1JJChXSU5EX0JBU0UpL3RhcmdldC9oIC1JJChXSU5EX0JBU0UpL3RhcmdldC9oL3dybi9jb3JlaXAgDQorDQorSURFX0xJQlJBUklFUyA9IA0KK2VuZGlmDQorDQoraWZlcSAoJChCVUlMRF9TUEVDKSxTSU1MSU5VWGdudSkNCitWWF9DUFVfRkFNSUxZID0gc2ltbGludXgNCitDUFUgPSBTSU1MSU5VWA0KK1RPT0xfRkFNSUxZID0gZ251DQorVE9PTCA9IGdudQ0KK1RPT0xfUEFUSCA9IA0KK0NDX0FSQ0hfU1BFQyA9IC1tdHVuZT1pNDg2IC1tYXJjaD1pNDg2DQorTElCUEFUSCA9IA0KK0xJQlMgPSANCisNCitJREVfSU5DTFVERVMgPSAtSSQoV0lORF9CQVNFKS90YXJnZXQvaCAtSSQoV0lORF9CQVNFKS90YXJnZXQvaC93cm4vY29yZWlwIA0KKw0KK0lERV9MSUJSQVJJRVMgPSANCitlbmRpZg0KKw0KK2lmZXEgKCQoQlVJTERfU1BFQyksU0lNTlRkaWFiKQ0KK1ZYX0NQVV9GQU1JTFkgPSBzaW1wYw0KK0NQVSA9IFNJTU5UDQorVE9PTF9GQU1JTFkgPSBkaWFiDQorVE9PTCA9IGRpYWINCitUT09MX1BBVEggPSANCitDQ19BUkNIX1NQRUMgPSAtdFg4NkxIOnZ4d29ya3M2Mw0KK0xJQlBBVEggPSANCitMSUJTID0gDQorDQorSURFX0lOQ0xVREVTID0gLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2ggLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2gvd3JuL2NvcmVpcCANCisNCitJREVfTElCUkFSSUVTID0gDQorZW5kaWYNCisNCitpZmVxICgkKEJVSUxEX1NQRUMpLFNJTU5UZ251KQ0KK1ZYX0NQVV9GQU1JTFkgPSBzaW1wYw0KK0NQVSA9IFNJTU5UDQorVE9PTF9GQU1JTFkgPSBnbnUNCitUT09MID0gZ251DQorVE9PTF9QQVRIID0gDQorQ0NfQVJDSF9TUEVDID0gLW10dW5lPWk0ODYgLW1hcmNoPWk0ODYNCitMSUJQQVRIID0gDQorTElCUyA9IA0KKw0KK0lERV9JTkNMVURFUyA9IC1JJChXSU5EX0JBU0UpL3RhcmdldC9oIC1JJChXSU5EX0JBU0UpL3RhcmdldC9oL3dybi9jb3JlaXAgDQorDQorSURFX0xJQlJBUklFUyA9IA0KK2VuZGlmDQorDQoraWZlcSAoJChCVUlMRF9TUEVDKSxTSU1TUEFSQ1NPTEFSSVNkaWFiKQ0KK1ZYX0NQVV9GQU1JTFkgPSBzaW1zbw0KK0NQVSA9IFNJTVNQQVJDU09MQVJJUw0KK1RPT0xfRkFNSUxZID0gZGlhYg0KK1RPT0wgPSBkaWFiDQorVE9PTF9QQVRIID0gDQorQ0NfQVJDSF9TUEVDID0gLXRTUEFSQ0ZIOnZ4d29ya3M2Mw0KK0xJQlBBVEggPSANCitMSUJTID0gDQorDQorSURFX0lOQ0xVREVTID0gLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2ggLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2gvd3JuL2NvcmVpcCANCisNCitJREVfTElCUkFSSUVTID0gDQorZW5kaWYNCisNCitpZmVxICgkKEJVSUxEX1NQRUMpLFNJTVNQQVJDU09MQVJJU2dudSkNCitWWF9DUFVfRkFNSUxZID0gc2ltc28NCitDUFUgPSBTSU1TUEFSQ1NPTEFSSVMNCitUT09MX0ZBTUlMWSA9IGdudQ0KK1RPT0wgPSBnbnUNCitUT09MX1BBVEggPSANCitDQ19BUkNIX1NQRUMgPSANCitMSUJQQVRIID0gDQorTElCUyA9IA0KKw0KK0lERV9JTkNMVURFUyA9IC1JJChXSU5EX0JBU0UpL3RhcmdldC9oIC1JJChXSU5EX0JBU0UpL3RhcmdldC9oL3dybi9jb3JlaXAgDQorDQorSURFX0xJQlJBUklFUyA9IA0KK2VuZGlmDQorDQorDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEMzMmRpYWIpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQy1Db21waWxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQy1Db21waWxlciA9IC1YTyAtWHNpemUtb3B0DQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDMzJnbnUpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQy1Db21waWxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQy1Db21waWxlciA9IC1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4NCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MtQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDMzJzZmRpYWIpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQy1Db21waWxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQy1Db21waWxlciA9IC1YTyAtWHNpemUtb3B0DQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1Yc3Rzdy1zbG93IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDMzJzZmdudSkNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19DLUNvbXBpbGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19DLUNvbXBpbGVyID0gLU8yIC1mc3RyZW5ndGgtcmVkdWNlIC1mbm8tYnVpbHRpbg0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuYw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpICAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0NGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM0MDNkaWFiKQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0MtQ29tcGlsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0MtQ29tcGlsZXIgPSAtWE8gLVhzaXplLW9wdA0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuYw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MtQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzQwM2dudSkNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19DLUNvbXBpbGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19DLUNvbXBpbGVyID0gLU8yIC1mc3RyZW5ndGgtcmVkdWNlIC1mbm8tYnVpbHRpbg0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuYw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpICAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0NGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM0MDVkaWFiKQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0MtQ29tcGlsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0MtQ29tcGlsZXIgPSAtWE8gLVhzaXplLW9wdA0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuYw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MtQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzQwNWdudSkNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19DLUNvbXBpbGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19DLUNvbXBpbGVyID0gLU8yIC1mc3RyZW5ndGgtcmVkdWNlIC1mbm8tYnVpbHRpbg0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuYw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpICAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0NGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM0MDVzZmRpYWIpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQy1Db21waWxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQy1Db21waWxlciA9IC1YTyAtWHNpemUtb3B0DQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNDA1c2ZnbnUpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQy1Db21waWxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQy1Db21waWxlciA9IC1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4NCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MtQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNDQwZGlhYikNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19DLUNvbXBpbGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19DLUNvbXBpbGVyID0gLVhPIC1Yc2l6ZS1vcHQNCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0NGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM0NDBnbnUpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQy1Db21waWxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQy1Db21waWxlciA9IC1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4NCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MtQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNDQwc2ZkaWFiKQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0MtQ29tcGlsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0MtQ29tcGlsZXIgPSAtWE8gLVhzaXplLW9wdA0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuYw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MtQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzQ0MHNmZ251KQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0MtQ29tcGlsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0MtQ29tcGlsZXIgPSAtTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluDQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgIC1XYWxsICAtTUQgLU1QICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzYwM2RpYWIpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQy1Db21waWxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQy1Db21waWxlciA9IC1YTyAtWHNpemUtb3B0DQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNjAzZ251KQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0MtQ29tcGlsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0MtQ29tcGlsZXIgPSAtTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluDQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgIC1XYWxsICAtTUQgLU1QICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzYwNGRpYWIpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQy1Db21waWxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQy1Db21waWxlciA9IC1YTyAtWHNpemUtb3B0DQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNjA0Z251KQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0MtQ29tcGlsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0MtQ29tcGlsZXIgPSAtTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluDQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgIC1XYWxsICAtTUQgLU1QICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzg1WFhkaWFiKQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0MtQ29tcGlsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0MtQ29tcGlsZXIgPSAtWE8gLVhzaXplLW9wdA0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuYw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MtQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzg1WFhnbnUpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQy1Db21waWxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQy1Db21waWxlciA9IC1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4NCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MtQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDODVYWHNmZGlhYikNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19DLUNvbXBpbGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19DLUNvbXBpbGVyID0gLVhPIC1Yc2l6ZS1vcHQNCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0NGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM4NVhYc2ZnbnUpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQy1Db21waWxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQy1Db21waWxlciA9IC1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4NCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MtQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDODYwc2ZkaWFiKQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0MtQ29tcGlsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0MtQ29tcGlsZXIgPSAtWE8gLVhzaXplLW9wdA0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuYw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MtQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzg2MHNmZ251KQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0MtQ29tcGlsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0MtQ29tcGlsZXIgPSAtTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluDQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgIC1XYWxsICAtTUQgLU1QICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFNJTUxJTlVYZGlhYikNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19DLUNvbXBpbGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19DLUNvbXBpbGVyID0gLVhPIC1Yc2l6ZS1vcHQNCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0NGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxTSU1MSU5VWGdudSkNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19DLUNvbXBpbGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19DLUNvbXBpbGVyID0gLU8yIC1ub3N0ZGxpYiAtZm5vLWJ1aWx0aW4gLWZuby1kZWZlci1wb3ANCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwZW50aXVtICQoREVCVUdGTEFHU19DLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgIC1XYWxsICAtTUQgLU1QICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFNJTU5UZGlhYikNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19DLUNvbXBpbGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19DLUNvbXBpbGVyID0gLVhPIC1Yc2l6ZS1vcHQNCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0NGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxTSU1OVGdudSkNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19DLUNvbXBpbGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19DLUNvbXBpbGVyID0gLU8yIC1ub3N0ZGxpYiAtZm5vLWJ1aWx0aW4gLWZuby1kZWZlci1wb3ANCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwZW50aXVtICQoREVCVUdGTEFHU19DLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgIC1XYWxsICAtTUQgLU1QICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFNJTVNQQVJDU09MQVJJU2RpYWIpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQy1Db21waWxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQy1Db21waWxlciA9IC1YTyAtWHNpemUtb3B0DQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksU0lNU1BBUkNTT0xBUklTZ251KQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0MtQ29tcGlsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0MtQ29tcGlsZXIgPSAtTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluDQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjc3BhcmMgJChERUJVR0ZMQUdTX0MtQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDMzJkaWFiKQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0MrKy1Db21waWxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQysrLUNvbXBpbGVyID0gLVhPIC1Yc2l6ZS1vcHQNCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmNwcA0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLkMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jeHgNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jYw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEMzMmdudSkNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19DKystQ29tcGlsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0MrKy1Db21waWxlciA9IC1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4NCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmNwcA0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLkMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jeHgNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jYw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEMzMnNmZGlhYikNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19DKystQ29tcGlsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0MrKy1Db21waWxlciA9IC1YTyAtWHNpemUtb3B0DQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jcHANCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWHN0c3ctc2xvdyAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5DDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhzdHN3LXNsb3cgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY3h4DQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhzdHN3LXNsb3cgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY2MNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWHN0c3ctc2xvdyAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDMzJzZmdudSkNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19DKystQ29tcGlsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0MrKy1Db21waWxlciA9IC1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4NCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmNwcA0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLkMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jeHgNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jYw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM0MDNkaWFiKQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0MrKy1Db21waWxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQysrLUNvbXBpbGVyID0gLVhPIC1Yc2l6ZS1vcHQNCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmNwcA0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLkMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jeHgNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jYw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM0MDNnbnUpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQysrLUNvbXBpbGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19DKystQ29tcGlsZXIgPSAtTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluDQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jcHANCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5DDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY3h4DQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY2MNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNDA1ZGlhYikNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19DKystQ29tcGlsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0MrKy1Db21waWxlciA9IC1YTyAtWHNpemUtb3B0DQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jcHANCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5DDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY3h4DQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY2MNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNDA1Z251KQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0MrKy1Db21waWxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQysrLUNvbXBpbGVyID0gLU8yIC1mc3RyZW5ndGgtcmVkdWNlIC1mbm8tYnVpbHRpbg0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY3BwDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuQw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmN4eA0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmNjDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzQwNXNmZGlhYikNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19DKystQ29tcGlsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0MrKy1Db21waWxlciA9IC1YTyAtWHNpemUtb3B0DQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jcHANCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5DDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY3h4DQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY2MNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNDA1c2ZnbnUpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQysrLUNvbXBpbGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19DKystQ29tcGlsZXIgPSAtTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluDQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jcHANCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5DDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY3h4DQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY2MNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNDQwZGlhYikNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19DKystQ29tcGlsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0MrKy1Db21waWxlciA9IC1YTyAtWHNpemUtb3B0DQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jcHANCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5DDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY3h4DQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY2MNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNDQwZ251KQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0MrKy1Db21waWxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQysrLUNvbXBpbGVyID0gLU8yIC1mc3RyZW5ndGgtcmVkdWNlIC1mbm8tYnVpbHRpbg0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY3BwDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuQw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmN4eA0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmNjDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzQ0MHNmZGlhYikNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19DKystQ29tcGlsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0MrKy1Db21waWxlciA9IC1YTyAtWHNpemUtb3B0DQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jcHANCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5DDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY3h4DQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY2MNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNDQwc2ZnbnUpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQysrLUNvbXBpbGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19DKystQ29tcGlsZXIgPSAtTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluDQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jcHANCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5DDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY3h4DQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY2MNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNjAzZGlhYikNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19DKystQ29tcGlsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0MrKy1Db21waWxlciA9IC1YTyAtWHNpemUtb3B0DQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jcHANCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5DDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY3h4DQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY2MNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNjAzZ251KQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0MrKy1Db21waWxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQysrLUNvbXBpbGVyID0gLU8yIC1mc3RyZW5ndGgtcmVkdWNlIC1mbm8tYnVpbHRpbg0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY3BwDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuQw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmN4eA0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmNjDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzYwNGRpYWIpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQysrLUNvbXBpbGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19DKystQ29tcGlsZXIgPSAtWE8gLVhzaXplLW9wdA0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY3BwDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuQw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmN4eA0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmNjDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzYwNGdudSkNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19DKystQ29tcGlsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0MrKy1Db21waWxlciA9IC1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4NCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmNwcA0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLkMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jeHgNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jYw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM4NVhYZGlhYikNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19DKystQ29tcGlsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0MrKy1Db21waWxlciA9IC1YTyAtWHNpemUtb3B0DQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jcHANCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5DDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY3h4DQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY2MNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDODVYWGdudSkNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19DKystQ29tcGlsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0MrKy1Db21waWxlciA9IC1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4NCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmNwcA0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLkMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jeHgNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jYw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM4NVhYc2ZkaWFiKQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0MrKy1Db21waWxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQysrLUNvbXBpbGVyID0gLVhPIC1Yc2l6ZS1vcHQNCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmNwcA0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLkMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jeHgNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jYw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM4NVhYc2ZnbnUpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQysrLUNvbXBpbGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19DKystQ29tcGlsZXIgPSAtTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluDQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jcHANCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5DDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY3h4DQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY2MNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDODYwc2ZkaWFiKQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0MrKy1Db21waWxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQysrLUNvbXBpbGVyID0gLVhPIC1Yc2l6ZS1vcHQNCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmNwcA0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLkMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jeHgNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jYw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM4NjBzZmdudSkNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19DKystQ29tcGlsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0MrKy1Db21waWxlciA9IC1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4NCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmNwcA0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLkMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jeHgNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jYw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxTSU1MSU5VWGRpYWIpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQysrLUNvbXBpbGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19DKystQ29tcGlsZXIgPSAtWE8gLVhzaXplLW9wdA0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY3BwDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuQw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmN4eA0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmNjDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFNJTUxJTlVYZ251KQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0MrKy1Db21waWxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQysrLUNvbXBpbGVyID0gLU8yIC1ub3N0ZGxpYiAtZm5vLWJ1aWx0aW4gLWZuby1kZWZlci1wb3ANCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmNwcA0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BlbnRpdW0gJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5DDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcGVudGl1bSAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmN4eA0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BlbnRpdW0gJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jYw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BlbnRpdW0gJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksU0lNTlRkaWFiKQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0MrKy1Db21waWxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQysrLUNvbXBpbGVyID0gLVhPIC1Yc2l6ZS1vcHQNCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmNwcA0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLkMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jeHgNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jYw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxTSU1OVGdudSkNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19DKystQ29tcGlsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0MrKy1Db21waWxlciA9IC1PMiAtbm9zdGRsaWIgLWZuby1idWlsdGluIC1mbm8tZGVmZXItcG9wDQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jcHANCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwZW50aXVtICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuQw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BlbnRpdW0gJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jeHgNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwZW50aXVtICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY2MNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwZW50aXVtICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFNJTVNQQVJDU09MQVJJU2RpYWIpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQysrLUNvbXBpbGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19DKystQ29tcGlsZXIgPSAtWE8gLVhzaXplLW9wdA0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY3BwDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuQw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmN4eA0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DKytGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmNjDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFNJTVNQQVJDU09MQVJJU2dudSkNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19DKystQ29tcGlsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0MrKy1Db21waWxlciA9IC1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4NCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLmNwcA0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3NwYXJjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuQw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3NwYXJjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUuY3h4DQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjc3BhcmMgJChERUJVR0ZMQUdTX0MrKy1Db21waWxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QICQoQURERURfQysrRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5jYw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3NwYXJjICQoREVCVUdGTEFHU19DKystQ29tcGlsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzMyZGlhYikNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19Bc3NlbWJsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0Fzc2VtYmxlciA9IC1YTyAtWHNpemUtb3B0DQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5zDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQXNzZW1ibGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhwcmVwcm9jZXNzLWFzc2VtYmx5IC1YY3BwLW5vLXNwYWNlICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDMzJnbnUpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQXNzZW1ibGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19Bc3NlbWJsZXIgPSAtTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluDQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5zDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19Bc3NlbWJsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAgIC14YXNzZW1ibGVyLXdpdGgtY3BwIC1NRCAtTVAgJChBRERFRF9DRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDMzJzZmRpYWIpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQXNzZW1ibGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19Bc3NlbWJsZXIgPSAtWE8gLVhzaXplLW9wdA0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUucw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0Fzc2VtYmxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1Yc3Rzdy1zbG93IC1YcHJlcHJvY2Vzcy1hc3NlbWJseSAtWGNwcC1uby1zcGFjZSAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzMyc2ZnbnUpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQXNzZW1ibGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19Bc3NlbWJsZXIgPSAtTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluDQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5zDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19Bc3NlbWJsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAgIC14YXNzZW1ibGVyLXdpdGgtY3BwIC1NRCAtTVAgJChBRERFRF9DRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNDAzZGlhYikNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19Bc3NlbWJsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0Fzc2VtYmxlciA9IC1YTyAtWHNpemUtb3B0DQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5zDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQXNzZW1ibGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhwcmVwcm9jZXNzLWFzc2VtYmx5IC1YY3BwLW5vLXNwYWNlICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNDAzZ251KQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0Fzc2VtYmxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQXNzZW1ibGVyID0gLU8yIC1mc3RyZW5ndGgtcmVkdWNlIC1mbm8tYnVpbHRpbg0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUucw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQXNzZW1ibGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgICAteGFzc2VtYmxlci13aXRoLWNwcCAtTUQgLU1QICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzQwNWRpYWIpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQXNzZW1ibGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19Bc3NlbWJsZXIgPSAtWE8gLVhzaXplLW9wdA0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUucw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0Fzc2VtYmxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YcHJlcHJvY2Vzcy1hc3NlbWJseSAtWGNwcC1uby1zcGFjZSAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzQwNWdudSkNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19Bc3NlbWJsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0Fzc2VtYmxlciA9IC1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4NCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLnMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0Fzc2VtYmxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpICAgLXhhc3NlbWJsZXItd2l0aC1jcHAgLU1EIC1NUCAkKEFEREVEX0NGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM0MDVzZmRpYWIpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQXNzZW1ibGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19Bc3NlbWJsZXIgPSAtWE8gLVhzaXplLW9wdA0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUucw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0Fzc2VtYmxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YcHJlcHJvY2Vzcy1hc3NlbWJseSAtWGNwcC1uby1zcGFjZSAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzQwNXNmZ251KQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0Fzc2VtYmxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQXNzZW1ibGVyID0gLU8yIC1mc3RyZW5ndGgtcmVkdWNlIC1mbm8tYnVpbHRpbg0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUucw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQXNzZW1ibGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgICAteGFzc2VtYmxlci13aXRoLWNwcCAtTUQgLU1QICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzQ0MGRpYWIpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQXNzZW1ibGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19Bc3NlbWJsZXIgPSAtWE8gLVhzaXplLW9wdA0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUucw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0Fzc2VtYmxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YcHJlcHJvY2Vzcy1hc3NlbWJseSAtWGNwcC1uby1zcGFjZSAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzQ0MGdudSkNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19Bc3NlbWJsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0Fzc2VtYmxlciA9IC1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4NCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLnMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0Fzc2VtYmxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpICAgLXhhc3NlbWJsZXItd2l0aC1jcHAgLU1EIC1NUCAkKEFEREVEX0NGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM0NDBzZmRpYWIpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQXNzZW1ibGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19Bc3NlbWJsZXIgPSAtWE8gLVhzaXplLW9wdA0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUucw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0Fzc2VtYmxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YcHJlcHJvY2Vzcy1hc3NlbWJseSAtWGNwcC1uby1zcGFjZSAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzQ0MHNmZ251KQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0Fzc2VtYmxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQXNzZW1ibGVyID0gLU8yIC1mc3RyZW5ndGgtcmVkdWNlIC1mbm8tYnVpbHRpbg0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUucw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQXNzZW1ibGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgICAteGFzc2VtYmxlci13aXRoLWNwcCAtTUQgLU1QICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzYwM2RpYWIpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQXNzZW1ibGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19Bc3NlbWJsZXIgPSAtWE8gLVhzaXplLW9wdA0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUucw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0Fzc2VtYmxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YcHJlcHJvY2Vzcy1hc3NlbWJseSAtWGNwcC1uby1zcGFjZSAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzYwM2dudSkNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19Bc3NlbWJsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0Fzc2VtYmxlciA9IC1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4NCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLnMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX0Fzc2VtYmxlcikgJChDQ19BUkNIX1NQRUMpIC1hbnNpICAgLXhhc3NlbWJsZXItd2l0aC1jcHAgLU1EIC1NUCAkKEFEREVEX0NGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM2MDRkaWFiKQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0Fzc2VtYmxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQXNzZW1ibGVyID0gLVhPIC1Yc2l6ZS1vcHQNCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLnMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19Bc3NlbWJsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWHByZXByb2Nlc3MtYXNzZW1ibHkgLVhjcHAtbm8tc3BhY2UgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCAkKEFEREVEX0NGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICIkQCIgLWMgIiQ8Ig0KKw0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM2MDRnbnUpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQXNzZW1ibGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19Bc3NlbWJsZXIgPSAtTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluDQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5zDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19Bc3NlbWJsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAgIC14YXNzZW1ibGVyLXdpdGgtY3BwIC1NRCAtTVAgJChBRERFRF9DRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDODVYWGRpYWIpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQXNzZW1ibGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19Bc3NlbWJsZXIgPSAtWE8gLVhzaXplLW9wdA0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUucw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX0Fzc2VtYmxlcikgJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YcHJlcHJvY2Vzcy1hc3NlbWJseSAtWGNwcC1uby1zcGFjZSAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzg1WFhnbnUpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQXNzZW1ibGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19Bc3NlbWJsZXIgPSAtTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluDQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5zDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19Bc3NlbWJsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAgIC14YXNzZW1ibGVyLXdpdGgtY3BwIC1NRCAtTVAgJChBRERFRF9DRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDODVYWHNmZGlhYikNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19Bc3NlbWJsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0Fzc2VtYmxlciA9IC1YTyAtWHNpemUtb3B0DQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5zDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQXNzZW1ibGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhwcmVwcm9jZXNzLWFzc2VtYmx5IC1YY3BwLW5vLXNwYWNlICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDODVYWHNmZ251KQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0Fzc2VtYmxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQXNzZW1ibGVyID0gLU8yIC1mc3RyZW5ndGgtcmVkdWNlIC1mbm8tYnVpbHRpbg0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUucw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQXNzZW1ibGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgICAteGFzc2VtYmxlci13aXRoLWNwcCAtTUQgLU1QICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzg2MHNmZGlhYikNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19Bc3NlbWJsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0Fzc2VtYmxlciA9IC1YTyAtWHNpemUtb3B0DQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5zDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQXNzZW1ibGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhwcmVwcm9jZXNzLWFzc2VtYmx5IC1YY3BwLW5vLXNwYWNlICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDODYwc2ZnbnUpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfQXNzZW1ibGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19Bc3NlbWJsZXIgPSAtTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluDQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5zDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19Bc3NlbWJsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAgIC14YXNzZW1ibGVyLXdpdGgtY3BwIC1NRCAtTVAgJChBRERFRF9DRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksU0lNTElOVVhkaWFiKQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0Fzc2VtYmxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQXNzZW1ibGVyID0gLVhPIC1Yc2l6ZS1vcHQNCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLnMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19Bc3NlbWJsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWHByZXByb2Nlc3MtYXNzZW1ibHkgLVhjcHAtbm8tc3BhY2UgLVdhLC1YbW5lbS1taXQgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFNJTUxJTlVYZ251KQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0Fzc2VtYmxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQXNzZW1ibGVyID0gLU8yIC1ub3N0ZGxpYiAtZm5vLWJ1aWx0aW4gLWZuby1kZWZlci1wb3ANCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLnMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwZW50aXVtICQoREVCVUdGTEFHU19Bc3NlbWJsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAgIC14YXNzZW1ibGVyLXdpdGgtY3BwIC1NRCAtTVAgJChBRERFRF9DRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksU0lNTlRkaWFiKQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0Fzc2VtYmxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQXNzZW1ibGVyID0gLVhPIC1Yc2l6ZS1vcHQNCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLnMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19Bc3NlbWJsZXIpICQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWHByZXByb2Nlc3MtYXNzZW1ibHkgLVhjcHAtbm8tc3BhY2UgLVdhLC1YbW5lbS1taXQgLVhtYWtlLWRlcGVuZGVuY3k9MHhkICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFNJTU5UZ251KQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0Fzc2VtYmxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQXNzZW1ibGVyID0gLU8yIC1ub3N0ZGxpYiAtZm5vLWJ1aWx0aW4gLWZuby1kZWZlci1wb3ANCitlbmRpZg0KKyQoT0JKX0RJUikvJS5vIDogJChTUkNfRElSKS8lLnMNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwZW50aXVtICQoREVCVUdGTEFHU19Bc3NlbWJsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAgIC14YXNzZW1ibGVyLXdpdGgtY3BwIC1NRCAtTVAgJChBRERFRF9DRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksU0lNU1BBUkNTT0xBUklTZGlhYikNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19Bc3NlbWJsZXIgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX0Fzc2VtYmxlciA9IC1YTyAtWHNpemUtb3B0DQorZW5kaWYNCiskKE9CSl9ESVIpLyUubyA6ICQoU1JDX0RJUikvJS5zDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfQXNzZW1ibGVyKSAkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhwcmVwcm9jZXNzLWFzc2VtYmx5IC1YY3BwLW5vLXNwYWNlICAtWG1ha2UtZGVwZW5kZW5jeT0weGQgJChBRERFRF9DRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksU0lNU1BBUkNTT0xBUklTZ251KQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX0Fzc2VtYmxlciA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfQXNzZW1ibGVyID0gLU8yIC1mc3RyZW5ndGgtcmVkdWNlIC1mbm8tYnVpbHRpbg0KK2VuZGlmDQorJChPQkpfRElSKS8lLm8gOiAkKFNSQ19ESVIpLyUucw0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3NwYXJjICQoREVCVUdGTEFHU19Bc3NlbWJsZXIpICQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAgIC14YXNzZW1ibGVyLXdpdGgtY3BwIC1NRCAtTVAgJChBRERFRF9DRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAiJEAiIC1jICIkPCINCisNCitlbmRpZg0KKw0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDMzJkaWFiKQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX1NpbXBsZVJvYm90ID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19TaW1wbGVSb2JvdCA9IC1YTyAtWHNpemUtb3B0DQorZW5kaWYNCiskKE9CSl9ESVIpL1NpbXBsZVJvYm90Lm91dCA6ICQoT0JKRUNUUykgJChTVUJfT0JKRUNUUykgJChTVUJfVEFSR0VUUykNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjtybSAtZiAiJEAiO2RkdW1wIC1OZyAkKE9CSkVDVFMpICQoU1VCX09CSkVDVFMpICQoU1VCX1RBUkdFVFMpICQoSURFX0xJQlJBUklFUykgfCB0Y2xzaCAkKFdJTkRfQkFTRSkvaG9zdC9yZXNvdXJjZS9odXRpbHMvdGNsL211bmNoLnRjbCAtYyBwcGMgPiAkKE9CSl9ESVIpL2N0ZHQuYzsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19TaW1wbGVSb2JvdCkgJChDQ19BUkNIX1NQRUMpIC1YZG9sbGFyLWluLWlkZW50IC1YZm9yY2UtZGVjbGFyYXRpb25zICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgIC1vICQoT0JKX0RJUikvY3RkdC5vIC1jICQoT0JKX0RJUikvY3RkdC5jOyAkKFRPT0xfUEFUSClkbGQgLXRQUENGSDp2eHdvcmtzNjMgLVggLXI1IC1yNCAtbyAiJEAiICQoT0JKX0RJUikvY3RkdC5vICQoT0JKRUNUUykgJChTVUJfT0JKRUNUUykgJChTVUJfVEFSR0VUUykgJChJREVfTElCUkFSSUVTKSAkKExJQlBBVEgpICQoTElCUykgICQoQURERURfTElCUEFUSCkgJChBRERFRF9MSUJTKSAmJiBpZiBbICIkKEVYUEFORF9EQkcpIiA9ICIxIiBdOyB0aGVuIHBsaW5rICIkQCI7ZmkNCisNCit0YXJnZXRfU2ltcGxlUm9ib3QgOiBzdWJkaXJzX2FsbCBjaGVja19vYmplY3RkaXIgJChPQkpfRElSKS9TaW1wbGVSb2JvdC5vdXQNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDMzJnbnUpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfU2ltcGxlUm9ib3QgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX1NpbXBsZVJvYm90ID0gLU8yIC1mc3RyZW5ndGgtcmVkdWNlIC1mbm8tYnVpbHRpbg0KK2VuZGlmDQorJChPQkpfRElSKS9TaW1wbGVSb2JvdC5vdXQgOiAkKE9CSkVDVFMpICQoU1VCX09CSkVDVFMpICQoU1VCX1RBUkdFVFMpDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7cm0gLWYgIiRAIjtubXBwYyAkKE9CSkVDVFMpICQoU1VCX09CSkVDVFMpICQoU1VCX1RBUkdFVFMpICQoSURFX0xJQlJBUklFUykgfCB0Y2xzaCAkKFdJTkRfQkFTRSkvaG9zdC9yZXNvdXJjZS9odXRpbHMvdGNsL211bmNoLnRjbCAtYyBwcGMgPiAkKE9CSl9ESVIpL2N0ZHQuYzsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX1NpbXBsZVJvYm90KSAkKENDX0FSQ0hfU1BFQykgLWZkb2xsYXJzLWluLWlkZW50aWZpZXJzIC1XYWxsICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgIC1vICQoT0JKX0RJUikvY3RkdC5vIC1jICQoT0JKX0RJUikvY3RkdC5jOyAkKFRPT0xfUEFUSCljY3BwYyAtciAtbm9zdGRsaWIgLVdsLC1YIC1UICQoV0lORF9CQVNFKS90YXJnZXQvaC90b29sL2dudS9sZHNjcmlwdHMvbGluay5PVVQgLW8gIiRAIiAkKE9CSl9ESVIpL2N0ZHQubyAkKE9CSkVDVFMpICQoU1VCX09CSkVDVFMpICQoU1VCX1RBUkdFVFMpICQoSURFX0xJQlJBUklFUykgJChMSUJQQVRIKSAkKExJQlMpICAkKEFEREVEX0xJQlBBVEgpICQoQURERURfTElCUykgJiYgaWYgWyAiJChFWFBBTkRfREJHKSIgPSAiMSIgXTsgdGhlbiBwbGluayAiJEAiO2ZpDQorDQordGFyZ2V0X1NpbXBsZVJvYm90IDogc3ViZGlyc19hbGwgY2hlY2tfb2JqZWN0ZGlyICQoT0JKX0RJUikvU2ltcGxlUm9ib3Qub3V0DQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzMyc2ZkaWFiKQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX1NpbXBsZVJvYm90ID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19TaW1wbGVSb2JvdCA9IC1YTyAtWHNpemUtb3B0DQorZW5kaWYNCiskKE9CSl9ESVIpL1NpbXBsZVJvYm90Lm91dCA6ICQoT0JKRUNUUykgJChTVUJfT0JKRUNUUykgJChTVUJfVEFSR0VUUykNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjtybSAtZiAiJEAiO2RkdW1wIC1OZyAkKE9CSkVDVFMpICQoU1VCX09CSkVDVFMpICQoU1VCX1RBUkdFVFMpICQoSURFX0xJQlJBUklFUykgfCB0Y2xzaCAkKFdJTkRfQkFTRSkvaG9zdC9yZXNvdXJjZS9odXRpbHMvdGNsL211bmNoLnRjbCAtYyBwcGMgPiAkKE9CSl9ESVIpL2N0ZHQuYzsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19TaW1wbGVSb2JvdCkgJChDQ19BUkNIX1NQRUMpIC1YZG9sbGFyLWluLWlkZW50IC1YZm9yY2UtZGVjbGFyYXRpb25zICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgIC1vICQoT0JKX0RJUikvY3RkdC5vIC1jICQoT0JKX0RJUikvY3RkdC5jOyAkKFRPT0xfUEFUSClkbGQgLXRQUENGUzp2eHdvcmtzNjMgLVggLXI1IC1yNCAtbyAiJEAiICQoT0JKX0RJUikvY3RkdC5vICQoT0JKRUNUUykgJChTVUJfT0JKRUNUUykgJChTVUJfVEFSR0VUUykgJChJREVfTElCUkFSSUVTKSAkKExJQlBBVEgpICQoTElCUykgICQoQURERURfTElCUEFUSCkgJChBRERFRF9MSUJTKSAmJiBpZiBbICIkKEVYUEFORF9EQkcpIiA9ICIxIiBdOyB0aGVuIHBsaW5rICIkQCI7ZmkNCisNCit0YXJnZXRfU2ltcGxlUm9ib3QgOiBzdWJkaXJzX2FsbCBjaGVja19vYmplY3RkaXIgJChPQkpfRElSKS9TaW1wbGVSb2JvdC5vdXQNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDMzJzZmdudSkNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19TaW1wbGVSb2JvdCA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfU2ltcGxlUm9ib3QgPSAtTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluDQorZW5kaWYNCiskKE9CSl9ESVIpL1NpbXBsZVJvYm90Lm91dCA6ICQoT0JKRUNUUykgJChTVUJfT0JKRUNUUykgJChTVUJfVEFSR0VUUykNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjtybSAtZiAiJEAiO25tcHBjICQoT0JKRUNUUykgJChTVUJfT0JKRUNUUykgJChTVUJfVEFSR0VUUykgJChJREVfTElCUkFSSUVTKSB8IHRjbHNoICQoV0lORF9CQVNFKS9ob3N0L3Jlc291cmNlL2h1dGlscy90Y2wvbXVuY2gudGNsIC1jIHBwYyA+ICQoT0JKX0RJUikvY3RkdC5jOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfU2ltcGxlUm9ib3QpICQoQ0NfQVJDSF9TUEVDKSAtZmRvbGxhcnMtaW4taWRlbnRpZmllcnMgLVdhbGwgJChBRERFRF9DRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAgLW8gJChPQkpfRElSKS9jdGR0Lm8gLWMgJChPQkpfRElSKS9jdGR0LmM7ICQoVE9PTF9QQVRIKWNjcHBjIC1yIC1ub3N0ZGxpYiAtV2wsLVggLVQgJChXSU5EX0JBU0UpL3RhcmdldC9oL3Rvb2wvZ251L2xkc2NyaXB0cy9saW5rLk9VVCAtbyAiJEAiICQoT0JKX0RJUikvY3RkdC5vICQoT0JKRUNUUykgJChTVUJfT0JKRUNUUykgJChTVUJfVEFSR0VUUykgJChJREVfTElCUkFSSUVTKSAkKExJQlBBVEgpICQoTElCUykgICQoQURERURfTElCUEFUSCkgJChBRERFRF9MSUJTKSAmJiBpZiBbICIkKEVYUEFORF9EQkcpIiA9ICIxIiBdOyB0aGVuIHBsaW5rICIkQCI7ZmkNCisNCit0YXJnZXRfU2ltcGxlUm9ib3QgOiBzdWJkaXJzX2FsbCBjaGVja19vYmplY3RkaXIgJChPQkpfRElSKS9TaW1wbGVSb2JvdC5vdXQNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNDAzZGlhYikNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19TaW1wbGVSb2JvdCA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfU2ltcGxlUm9ib3QgPSAtWE8gLVhzaXplLW9wdA0KK2VuZGlmDQorJChPQkpfRElSKS9TaW1wbGVSb2JvdC5vdXQgOiAkKE9CSkVDVFMpICQoU1VCX09CSkVDVFMpICQoU1VCX1RBUkdFVFMpDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7cm0gLWYgIiRAIjtkZHVtcCAtTmcgJChPQkpFQ1RTKSAkKFNVQl9PQkpFQ1RTKSAkKFNVQl9UQVJHRVRTKSAkKElERV9MSUJSQVJJRVMpIHwgdGNsc2ggJChXSU5EX0JBU0UpL2hvc3QvcmVzb3VyY2UvaHV0aWxzL3RjbC9tdW5jaC50Y2wgLWMgcHBjID4gJChPQkpfRElSKS9jdGR0LmM7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfU2ltcGxlUm9ib3QpICQoQ0NfQVJDSF9TUEVDKSAtWGRvbGxhci1pbi1pZGVudCAtWGZvcmNlLWRlY2xhcmF0aW9ucyAkKEFEREVEX0NGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpICAtbyAkKE9CSl9ESVIpL2N0ZHQubyAtYyAkKE9CSl9ESVIpL2N0ZHQuYzsgJChUT09MX1BBVEgpZGxkIC10UFBDNDAzRlM6dnh3b3JrczYzIC1YIC1yNSAtcjQgLW8gIiRAIiAkKE9CSl9ESVIpL2N0ZHQubyAkKE9CSkVDVFMpICQoU1VCX09CSkVDVFMpICQoU1VCX1RBUkdFVFMpICQoSURFX0xJQlJBUklFUykgJChMSUJQQVRIKSAkKExJQlMpICAkKEFEREVEX0xJQlBBVEgpICQoQURERURfTElCUykgJiYgaWYgWyAiJChFWFBBTkRfREJHKSIgPSAiMSIgXTsgdGhlbiBwbGluayAiJEAiO2ZpDQorDQordGFyZ2V0X1NpbXBsZVJvYm90IDogc3ViZGlyc19hbGwgY2hlY2tfb2JqZWN0ZGlyICQoT0JKX0RJUikvU2ltcGxlUm9ib3Qub3V0DQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzQwM2dudSkNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19TaW1wbGVSb2JvdCA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfU2ltcGxlUm9ib3QgPSAtTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluDQorZW5kaWYNCiskKE9CSl9ESVIpL1NpbXBsZVJvYm90Lm91dCA6ICQoT0JKRUNUUykgJChTVUJfT0JKRUNUUykgJChTVUJfVEFSR0VUUykNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjtybSAtZiAiJEAiO25tcHBjICQoT0JKRUNUUykgJChTVUJfT0JKRUNUUykgJChTVUJfVEFSR0VUUykgJChJREVfTElCUkFSSUVTKSB8IHRjbHNoICQoV0lORF9CQVNFKS9ob3N0L3Jlc291cmNlL2h1dGlscy90Y2wvbXVuY2gudGNsIC1jIHBwYyA+ICQoT0JKX0RJUikvY3RkdC5jOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfU2ltcGxlUm9ib3QpICQoQ0NfQVJDSF9TUEVDKSAtZmRvbGxhcnMtaW4taWRlbnRpZmllcnMgLVdhbGwgJChBRERFRF9DRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAgLW8gJChPQkpfRElSKS9jdGR0Lm8gLWMgJChPQkpfRElSKS9jdGR0LmM7ICQoVE9PTF9QQVRIKWNjcHBjIC1yIC1ub3N0ZGxpYiAtV2wsLVggLVQgJChXSU5EX0JBU0UpL3RhcmdldC9oL3Rvb2wvZ251L2xkc2NyaXB0cy9saW5rLk9VVCAtbyAiJEAiICQoT0JKX0RJUikvY3RkdC5vICQoT0JKRUNUUykgJChTVUJfT0JKRUNUUykgJChTVUJfVEFSR0VUUykgJChJREVfTElCUkFSSUVTKSAkKExJQlBBVEgpICQoTElCUykgICQoQURERURfTElCUEFUSCkgJChBRERFRF9MSUJTKSAmJiBpZiBbICIkKEVYUEFORF9EQkcpIiA9ICIxIiBdOyB0aGVuIHBsaW5rICIkQCI7ZmkNCisNCit0YXJnZXRfU2ltcGxlUm9ib3QgOiBzdWJkaXJzX2FsbCBjaGVja19vYmplY3RkaXIgJChPQkpfRElSKS9TaW1wbGVSb2JvdC5vdXQNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNDA1ZGlhYikNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19TaW1wbGVSb2JvdCA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfU2ltcGxlUm9ib3QgPSAtWE8gLVhzaXplLW9wdA0KK2VuZGlmDQorJChPQkpfRElSKS9TaW1wbGVSb2JvdC5vdXQgOiAkKE9CSkVDVFMpICQoU1VCX09CSkVDVFMpICQoU1VCX1RBUkdFVFMpDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7cm0gLWYgIiRAIjtkZHVtcCAtTmcgJChPQkpFQ1RTKSAkKFNVQl9PQkpFQ1RTKSAkKFNVQl9UQVJHRVRTKSAkKElERV9MSUJSQVJJRVMpIHwgdGNsc2ggJChXSU5EX0JBU0UpL2hvc3QvcmVzb3VyY2UvaHV0aWxzL3RjbC9tdW5jaC50Y2wgLWMgcHBjID4gJChPQkpfRElSKS9jdGR0LmM7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfU2ltcGxlUm9ib3QpICQoQ0NfQVJDSF9TUEVDKSAtWGRvbGxhci1pbi1pZGVudCAtWGZvcmNlLWRlY2xhcmF0aW9ucyAkKEFEREVEX0NGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpICAtbyAkKE9CSl9ESVIpL2N0ZHQubyAtYyAkKE9CSl9ESVIpL2N0ZHQuYzsgJChUT09MX1BBVEgpZGxkIC10UFBDNDA1RlM6dnh3b3JrczYzIC1YIC1yNSAtcjQgLW8gIiRAIiAkKE9CSl9ESVIpL2N0ZHQubyAkKE9CSkVDVFMpICQoU1VCX09CSkVDVFMpICQoU1VCX1RBUkdFVFMpICQoSURFX0xJQlJBUklFUykgJChMSUJQQVRIKSAkKExJQlMpICAkKEFEREVEX0xJQlBBVEgpICQoQURERURfTElCUykgJiYgaWYgWyAiJChFWFBBTkRfREJHKSIgPSAiMSIgXTsgdGhlbiBwbGluayAiJEAiO2ZpDQorDQordGFyZ2V0X1NpbXBsZVJvYm90IDogc3ViZGlyc19hbGwgY2hlY2tfb2JqZWN0ZGlyICQoT0JKX0RJUikvU2ltcGxlUm9ib3Qub3V0DQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzQwNWdudSkNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19TaW1wbGVSb2JvdCA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfU2ltcGxlUm9ib3QgPSAtTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluDQorZW5kaWYNCiskKE9CSl9ESVIpL1NpbXBsZVJvYm90Lm91dCA6ICQoT0JKRUNUUykgJChTVUJfT0JKRUNUUykgJChTVUJfVEFSR0VUUykNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjtybSAtZiAiJEAiO25tcHBjICQoT0JKRUNUUykgJChTVUJfT0JKRUNUUykgJChTVUJfVEFSR0VUUykgJChJREVfTElCUkFSSUVTKSB8IHRjbHNoICQoV0lORF9CQVNFKS9ob3N0L3Jlc291cmNlL2h1dGlscy90Y2wvbXVuY2gudGNsIC1jIHBwYyA+ICQoT0JKX0RJUikvY3RkdC5jOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfU2ltcGxlUm9ib3QpICQoQ0NfQVJDSF9TUEVDKSAtZmRvbGxhcnMtaW4taWRlbnRpZmllcnMgLVdhbGwgJChBRERFRF9DRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAgLW8gJChPQkpfRElSKS9jdGR0Lm8gLWMgJChPQkpfRElSKS9jdGR0LmM7ICQoVE9PTF9QQVRIKWNjcHBjIC1yIC1ub3N0ZGxpYiAtV2wsLVggLVQgJChXSU5EX0JBU0UpL3RhcmdldC9oL3Rvb2wvZ251L2xkc2NyaXB0cy9saW5rLk9VVCAtbyAiJEAiICQoT0JKX0RJUikvY3RkdC5vICQoT0JKRUNUUykgJChTVUJfT0JKRUNUUykgJChTVUJfVEFSR0VUUykgJChJREVfTElCUkFSSUVTKSAkKExJQlBBVEgpICQoTElCUykgICQoQURERURfTElCUEFUSCkgJChBRERFRF9MSUJTKSAmJiBpZiBbICIkKEVYUEFORF9EQkcpIiA9ICIxIiBdOyB0aGVuIHBsaW5rICIkQCI7ZmkNCisNCit0YXJnZXRfU2ltcGxlUm9ib3QgOiBzdWJkaXJzX2FsbCBjaGVja19vYmplY3RkaXIgJChPQkpfRElSKS9TaW1wbGVSb2JvdC5vdXQNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNDA1c2ZkaWFiKQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX1NpbXBsZVJvYm90ID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19TaW1wbGVSb2JvdCA9IC1YTyAtWHNpemUtb3B0DQorZW5kaWYNCiskKE9CSl9ESVIpL1NpbXBsZVJvYm90Lm91dCA6ICQoT0JKRUNUUykgJChTVUJfT0JKRUNUUykgJChTVUJfVEFSR0VUUykNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjtybSAtZiAiJEAiO2RkdW1wIC1OZyAkKE9CSkVDVFMpICQoU1VCX09CSkVDVFMpICQoU1VCX1RBUkdFVFMpICQoSURFX0xJQlJBUklFUykgfCB0Y2xzaCAkKFdJTkRfQkFTRSkvaG9zdC9yZXNvdXJjZS9odXRpbHMvdGNsL211bmNoLnRjbCAtYyBwcGMgPiAkKE9CSl9ESVIpL2N0ZHQuYzsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19TaW1wbGVSb2JvdCkgJChDQ19BUkNIX1NQRUMpIC1YZG9sbGFyLWluLWlkZW50IC1YZm9yY2UtZGVjbGFyYXRpb25zICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgIC1vICQoT0JKX0RJUikvY3RkdC5vIC1jICQoT0JKX0RJUikvY3RkdC5jOyAkKFRPT0xfUEFUSClkbGQgLXRQUEM0MDVGUzp2eHdvcmtzNjMgLVggLXI1IC1yNCAtbyAiJEAiICQoT0JKX0RJUikvY3RkdC5vICQoT0JKRUNUUykgJChTVUJfT0JKRUNUUykgJChTVUJfVEFSR0VUUykgJChJREVfTElCUkFSSUVTKSAkKExJQlBBVEgpICQoTElCUykgICQoQURERURfTElCUEFUSCkgJChBRERFRF9MSUJTKSAmJiBpZiBbICIkKEVYUEFORF9EQkcpIiA9ICIxIiBdOyB0aGVuIHBsaW5rICIkQCI7ZmkNCisNCit0YXJnZXRfU2ltcGxlUm9ib3QgOiBzdWJkaXJzX2FsbCBjaGVja19vYmplY3RkaXIgJChPQkpfRElSKS9TaW1wbGVSb2JvdC5vdXQNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNDA1c2ZnbnUpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfU2ltcGxlUm9ib3QgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX1NpbXBsZVJvYm90ID0gLU8yIC1mc3RyZW5ndGgtcmVkdWNlIC1mbm8tYnVpbHRpbg0KK2VuZGlmDQorJChPQkpfRElSKS9TaW1wbGVSb2JvdC5vdXQgOiAkKE9CSkVDVFMpICQoU1VCX09CSkVDVFMpICQoU1VCX1RBUkdFVFMpDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7cm0gLWYgIiRAIjtubXBwYyAkKE9CSkVDVFMpICQoU1VCX09CSkVDVFMpICQoU1VCX1RBUkdFVFMpICQoSURFX0xJQlJBUklFUykgfCB0Y2xzaCAkKFdJTkRfQkFTRSkvaG9zdC9yZXNvdXJjZS9odXRpbHMvdGNsL211bmNoLnRjbCAtYyBwcGMgPiAkKE9CSl9ESVIpL2N0ZHQuYzsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX1NpbXBsZVJvYm90KSAkKENDX0FSQ0hfU1BFQykgLWZkb2xsYXJzLWluLWlkZW50aWZpZXJzIC1XYWxsICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgIC1vICQoT0JKX0RJUikvY3RkdC5vIC1jICQoT0JKX0RJUikvY3RkdC5jOyAkKFRPT0xfUEFUSCljY3BwYyAtciAtbm9zdGRsaWIgLVdsLC1YIC1UICQoV0lORF9CQVNFKS90YXJnZXQvaC90b29sL2dudS9sZHNjcmlwdHMvbGluay5PVVQgLW8gIiRAIiAkKE9CSl9ESVIpL2N0ZHQubyAkKE9CSkVDVFMpICQoU1VCX09CSkVDVFMpICQoU1VCX1RBUkdFVFMpICQoSURFX0xJQlJBUklFUykgJChMSUJQQVRIKSAkKExJQlMpICAkKEFEREVEX0xJQlBBVEgpICQoQURERURfTElCUykgJiYgaWYgWyAiJChFWFBBTkRfREJHKSIgPSAiMSIgXTsgdGhlbiBwbGluayAiJEAiO2ZpDQorDQordGFyZ2V0X1NpbXBsZVJvYm90IDogc3ViZGlyc19hbGwgY2hlY2tfb2JqZWN0ZGlyICQoT0JKX0RJUikvU2ltcGxlUm9ib3Qub3V0DQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzQ0MGRpYWIpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfU2ltcGxlUm9ib3QgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX1NpbXBsZVJvYm90ID0gLVhPIC1Yc2l6ZS1vcHQNCitlbmRpZg0KKyQoT0JKX0RJUikvU2ltcGxlUm9ib3Qub3V0IDogJChPQkpFQ1RTKSAkKFNVQl9PQkpFQ1RTKSAkKFNVQl9UQVJHRVRTKQ0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiO3JtIC1mICIkQCI7ZGR1bXAgLU5nICQoT0JKRUNUUykgJChTVUJfT0JKRUNUUykgJChTVUJfVEFSR0VUUykgJChJREVfTElCUkFSSUVTKSB8IHRjbHNoICQoV0lORF9CQVNFKS9ob3N0L3Jlc291cmNlL2h1dGlscy90Y2wvbXVuY2gudGNsIC1jIHBwYyA+ICQoT0JKX0RJUikvY3RkdC5jOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX1NpbXBsZVJvYm90KSAkKENDX0FSQ0hfU1BFQykgLVhkb2xsYXItaW4taWRlbnQgLVhmb3JjZS1kZWNsYXJhdGlvbnMgJChBRERFRF9DRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAgLW8gJChPQkpfRElSKS9jdGR0Lm8gLWMgJChPQkpfRElSKS9jdGR0LmM7ICQoVE9PTF9QQVRIKWRsZCAtdFBQQzQ0MEZIOnZ4d29ya3M2MyAtWCAtcjUgLXI0IC1vICIkQCIgJChPQkpfRElSKS9jdGR0Lm8gJChPQkpFQ1RTKSAkKFNVQl9PQkpFQ1RTKSAkKFNVQl9UQVJHRVRTKSAkKElERV9MSUJSQVJJRVMpICQoTElCUEFUSCkgJChMSUJTKSAgJChBRERFRF9MSUJQQVRIKSAkKEFEREVEX0xJQlMpICYmIGlmIFsgIiQoRVhQQU5EX0RCRykiID0gIjEiIF07IHRoZW4gcGxpbmsgIiRAIjtmaQ0KKw0KK3RhcmdldF9TaW1wbGVSb2JvdCA6IHN1YmRpcnNfYWxsIGNoZWNrX29iamVjdGRpciAkKE9CSl9ESVIpL1NpbXBsZVJvYm90Lm91dA0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM0NDBnbnUpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfU2ltcGxlUm9ib3QgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX1NpbXBsZVJvYm90ID0gLU8yIC1mc3RyZW5ndGgtcmVkdWNlIC1mbm8tYnVpbHRpbg0KK2VuZGlmDQorJChPQkpfRElSKS9TaW1wbGVSb2JvdC5vdXQgOiAkKE9CSkVDVFMpICQoU1VCX09CSkVDVFMpICQoU1VCX1RBUkdFVFMpDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7cm0gLWYgIiRAIjtubXBwYyAkKE9CSkVDVFMpICQoU1VCX09CSkVDVFMpICQoU1VCX1RBUkdFVFMpICQoSURFX0xJQlJBUklFUykgfCB0Y2xzaCAkKFdJTkRfQkFTRSkvaG9zdC9yZXNvdXJjZS9odXRpbHMvdGNsL211bmNoLnRjbCAtYyBwcGMgPiAkKE9CSl9ESVIpL2N0ZHQuYzsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX1NpbXBsZVJvYm90KSAkKENDX0FSQ0hfU1BFQykgLWZkb2xsYXJzLWluLWlkZW50aWZpZXJzIC1XYWxsICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgIC1vICQoT0JKX0RJUikvY3RkdC5vIC1jICQoT0JKX0RJUikvY3RkdC5jOyAkKFRPT0xfUEFUSCljY3BwYyAtciAtbm9zdGRsaWIgLVdsLC1YIC1UICQoV0lORF9CQVNFKS90YXJnZXQvaC90b29sL2dudS9sZHNjcmlwdHMvbGluay5PVVQgLW8gIiRAIiAkKE9CSl9ESVIpL2N0ZHQubyAkKE9CSkVDVFMpICQoU1VCX09CSkVDVFMpICQoU1VCX1RBUkdFVFMpICQoSURFX0xJQlJBUklFUykgJChMSUJQQVRIKSAkKExJQlMpICAkKEFEREVEX0xJQlBBVEgpICQoQURERURfTElCUykgJiYgaWYgWyAiJChFWFBBTkRfREJHKSIgPSAiMSIgXTsgdGhlbiBwbGluayAiJEAiO2ZpDQorDQordGFyZ2V0X1NpbXBsZVJvYm90IDogc3ViZGlyc19hbGwgY2hlY2tfb2JqZWN0ZGlyICQoT0JKX0RJUikvU2ltcGxlUm9ib3Qub3V0DQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzQ0MHNmZGlhYikNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19TaW1wbGVSb2JvdCA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfU2ltcGxlUm9ib3QgPSAtWE8gLVhzaXplLW9wdA0KK2VuZGlmDQorJChPQkpfRElSKS9TaW1wbGVSb2JvdC5vdXQgOiAkKE9CSkVDVFMpICQoU1VCX09CSkVDVFMpICQoU1VCX1RBUkdFVFMpDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7cm0gLWYgIiRAIjtkZHVtcCAtTmcgJChPQkpFQ1RTKSAkKFNVQl9PQkpFQ1RTKSAkKFNVQl9UQVJHRVRTKSAkKElERV9MSUJSQVJJRVMpIHwgdGNsc2ggJChXSU5EX0JBU0UpL2hvc3QvcmVzb3VyY2UvaHV0aWxzL3RjbC9tdW5jaC50Y2wgLWMgcHBjID4gJChPQkpfRElSKS9jdGR0LmM7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfU2ltcGxlUm9ib3QpICQoQ0NfQVJDSF9TUEVDKSAtWGRvbGxhci1pbi1pZGVudCAtWGZvcmNlLWRlY2xhcmF0aW9ucyAkKEFEREVEX0NGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpICAtbyAkKE9CSl9ESVIpL2N0ZHQubyAtYyAkKE9CSl9ESVIpL2N0ZHQuYzsgJChUT09MX1BBVEgpZGxkIC10UFBDNDQwRlM6dnh3b3JrczYzIC1YIC1yNSAtcjQgLW8gIiRAIiAkKE9CSl9ESVIpL2N0ZHQubyAkKE9CSkVDVFMpICQoU1VCX09CSkVDVFMpICQoU1VCX1RBUkdFVFMpICQoSURFX0xJQlJBUklFUykgJChMSUJQQVRIKSAkKExJQlMpICAkKEFEREVEX0xJQlBBVEgpICQoQURERURfTElCUykgJiYgaWYgWyAiJChFWFBBTkRfREJHKSIgPSAiMSIgXTsgdGhlbiBwbGluayAiJEAiO2ZpDQorDQordGFyZ2V0X1NpbXBsZVJvYm90IDogc3ViZGlyc19hbGwgY2hlY2tfb2JqZWN0ZGlyICQoT0JKX0RJUikvU2ltcGxlUm9ib3Qub3V0DQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzQ0MHNmZ251KQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX1NpbXBsZVJvYm90ID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19TaW1wbGVSb2JvdCA9IC1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4NCitlbmRpZg0KKyQoT0JKX0RJUikvU2ltcGxlUm9ib3Qub3V0IDogJChPQkpFQ1RTKSAkKFNVQl9PQkpFQ1RTKSAkKFNVQl9UQVJHRVRTKQ0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiO3JtIC1mICIkQCI7bm1wcGMgJChPQkpFQ1RTKSAkKFNVQl9PQkpFQ1RTKSAkKFNVQl9UQVJHRVRTKSAkKElERV9MSUJSQVJJRVMpIHwgdGNsc2ggJChXSU5EX0JBU0UpL2hvc3QvcmVzb3VyY2UvaHV0aWxzL3RjbC9tdW5jaC50Y2wgLWMgcHBjID4gJChPQkpfRElSKS9jdGR0LmM7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19TaW1wbGVSb2JvdCkgJChDQ19BUkNIX1NQRUMpIC1mZG9sbGFycy1pbi1pZGVudGlmaWVycyAtV2FsbCAkKEFEREVEX0NGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpICAtbyAkKE9CSl9ESVIpL2N0ZHQubyAtYyAkKE9CSl9ESVIpL2N0ZHQuYzsgJChUT09MX1BBVEgpY2NwcGMgLXIgLW5vc3RkbGliIC1XbCwtWCAtVCAkKFdJTkRfQkFTRSkvdGFyZ2V0L2gvdG9vbC9nbnUvbGRzY3JpcHRzL2xpbmsuT1VUIC1vICIkQCIgJChPQkpfRElSKS9jdGR0Lm8gJChPQkpFQ1RTKSAkKFNVQl9PQkpFQ1RTKSAkKFNVQl9UQVJHRVRTKSAkKElERV9MSUJSQVJJRVMpICQoTElCUEFUSCkgJChMSUJTKSAgJChBRERFRF9MSUJQQVRIKSAkKEFEREVEX0xJQlMpICYmIGlmIFsgIiQoRVhQQU5EX0RCRykiID0gIjEiIF07IHRoZW4gcGxpbmsgIiRAIjtmaQ0KKw0KK3RhcmdldF9TaW1wbGVSb2JvdCA6IHN1YmRpcnNfYWxsIGNoZWNrX29iamVjdGRpciAkKE9CSl9ESVIpL1NpbXBsZVJvYm90Lm91dA0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM2MDNkaWFiKQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX1NpbXBsZVJvYm90ID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19TaW1wbGVSb2JvdCA9IC1YTyAtWHNpemUtb3B0DQorZW5kaWYNCiskKE9CSl9ESVIpL1NpbXBsZVJvYm90Lm91dCA6ICQoT0JKRUNUUykgJChTVUJfT0JKRUNUUykgJChTVUJfVEFSR0VUUykNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjtybSAtZiAiJEAiO2RkdW1wIC1OZyAkKE9CSkVDVFMpICQoU1VCX09CSkVDVFMpICQoU1VCX1RBUkdFVFMpICQoSURFX0xJQlJBUklFUykgfCB0Y2xzaCAkKFdJTkRfQkFTRSkvaG9zdC9yZXNvdXJjZS9odXRpbHMvdGNsL211bmNoLnRjbCAtYyBwcGMgPiAkKE9CSl9ESVIpL2N0ZHQuYzsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19TaW1wbGVSb2JvdCkgJChDQ19BUkNIX1NQRUMpIC1YZG9sbGFyLWluLWlkZW50IC1YZm9yY2UtZGVjbGFyYXRpb25zICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgIC1vICQoT0JKX0RJUikvY3RkdC5vIC1jICQoT0JKX0RJUikvY3RkdC5jOyAkKFRPT0xfUEFUSClkbGQgLXRQUEM2MDNGSDp2eHdvcmtzNjMgLVggLXI1IC1yNCAtbyAiJEAiICQoT0JKX0RJUikvY3RkdC5vICQoT0JKRUNUUykgJChTVUJfT0JKRUNUUykgJChTVUJfVEFSR0VUUykgJChJREVfTElCUkFSSUVTKSAkKExJQlBBVEgpICQoTElCUykgICQoQURERURfTElCUEFUSCkgJChBRERFRF9MSUJTKSAmJiBpZiBbICIkKEVYUEFORF9EQkcpIiA9ICIxIiBdOyB0aGVuIHBsaW5rICIkQCI7ZmkNCisNCit0YXJnZXRfU2ltcGxlUm9ib3QgOiBzdWJkaXJzX2FsbCBjaGVja19vYmplY3RkaXIgJChPQkpfRElSKS9TaW1wbGVSb2JvdC5vdXQNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNjAzZ251KQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX1NpbXBsZVJvYm90ID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19TaW1wbGVSb2JvdCA9IC1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4NCitlbmRpZg0KKyQoT0JKX0RJUikvU2ltcGxlUm9ib3Qub3V0IDogJChPQkpFQ1RTKSAkKFNVQl9PQkpFQ1RTKSAkKFNVQl9UQVJHRVRTKQ0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiO3JtIC1mICIkQCI7bm1wcGMgJChPQkpFQ1RTKSAkKFNVQl9PQkpFQ1RTKSAkKFNVQl9UQVJHRVRTKSAkKElERV9MSUJSQVJJRVMpIHwgdGNsc2ggJChXSU5EX0JBU0UpL2hvc3QvcmVzb3VyY2UvaHV0aWxzL3RjbC9tdW5jaC50Y2wgLWMgcHBjID4gJChPQkpfRElSKS9jdGR0LmM7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19TaW1wbGVSb2JvdCkgJChDQ19BUkNIX1NQRUMpIC1mZG9sbGFycy1pbi1pZGVudGlmaWVycyAtV2FsbCAkKEFEREVEX0NGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpICAtbyAkKE9CSl9ESVIpL2N0ZHQubyAtYyAkKE9CSl9ESVIpL2N0ZHQuYzsgJChUT09MX1BBVEgpY2NwcGMgLXIgLW5vc3RkbGliIC1XbCwtWCAtVCAkKFdJTkRfQkFTRSkvdGFyZ2V0L2gvdG9vbC9nbnUvbGRzY3JpcHRzL2xpbmsuT1VUIC1vICIkQCIgJChPQkpfRElSKS9jdGR0Lm8gJChPQkpFQ1RTKSAkKFNVQl9PQkpFQ1RTKSAkKFNVQl9UQVJHRVRTKSAkKElERV9MSUJSQVJJRVMpICQoTElCUEFUSCkgJChMSUJTKSAgJChBRERFRF9MSUJQQVRIKSAkKEFEREVEX0xJQlMpICYmIGlmIFsgIiQoRVhQQU5EX0RCRykiID0gIjEiIF07IHRoZW4gcGxpbmsgIiRAIjtmaQ0KKw0KK3RhcmdldF9TaW1wbGVSb2JvdCA6IHN1YmRpcnNfYWxsIGNoZWNrX29iamVjdGRpciAkKE9CSl9ESVIpL1NpbXBsZVJvYm90Lm91dA0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM2MDRkaWFiKQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX1NpbXBsZVJvYm90ID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19TaW1wbGVSb2JvdCA9IC1YTyAtWHNpemUtb3B0DQorZW5kaWYNCiskKE9CSl9ESVIpL1NpbXBsZVJvYm90Lm91dCA6ICQoT0JKRUNUUykgJChTVUJfT0JKRUNUUykgJChTVUJfVEFSR0VUUykNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjtybSAtZiAiJEAiO2RkdW1wIC1OZyAkKE9CSkVDVFMpICQoU1VCX09CSkVDVFMpICQoU1VCX1RBUkdFVFMpICQoSURFX0xJQlJBUklFUykgfCB0Y2xzaCAkKFdJTkRfQkFTRSkvaG9zdC9yZXNvdXJjZS9odXRpbHMvdGNsL211bmNoLnRjbCAtYyBwcGMgPiAkKE9CSl9ESVIpL2N0ZHQuYzsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19TaW1wbGVSb2JvdCkgJChDQ19BUkNIX1NQRUMpIC1YZG9sbGFyLWluLWlkZW50IC1YZm9yY2UtZGVjbGFyYXRpb25zICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgIC1vICQoT0JKX0RJUikvY3RkdC5vIC1jICQoT0JKX0RJUikvY3RkdC5jOyAkKFRPT0xfUEFUSClkbGQgLXRQUEM2MDRGSDp2eHdvcmtzNjMgLVggLXI1IC1yNCAtbyAiJEAiICQoT0JKX0RJUikvY3RkdC5vICQoT0JKRUNUUykgJChTVUJfT0JKRUNUUykgJChTVUJfVEFSR0VUUykgJChJREVfTElCUkFSSUVTKSAkKExJQlBBVEgpICQoTElCUykgICQoQURERURfTElCUEFUSCkgJChBRERFRF9MSUJTKSAmJiBpZiBbICIkKEVYUEFORF9EQkcpIiA9ICIxIiBdOyB0aGVuIHBsaW5rICIkQCI7ZmkNCisNCit0YXJnZXRfU2ltcGxlUm9ib3QgOiBzdWJkaXJzX2FsbCBjaGVja19vYmplY3RkaXIgJChPQkpfRElSKS9TaW1wbGVSb2JvdC5vdXQNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDNjA0Z251KQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX1NpbXBsZVJvYm90ID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19TaW1wbGVSb2JvdCA9IC1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4NCitlbmRpZg0KKyQoT0JKX0RJUikvU2ltcGxlUm9ib3Qub3V0IDogJChPQkpFQ1RTKSAkKFNVQl9PQkpFQ1RTKSAkKFNVQl9UQVJHRVRTKQ0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiO3JtIC1mICIkQCI7bm1wcGMgJChPQkpFQ1RTKSAkKFNVQl9PQkpFQ1RTKSAkKFNVQl9UQVJHRVRTKSAkKElERV9MSUJSQVJJRVMpIHwgdGNsc2ggJChXSU5EX0JBU0UpL2hvc3QvcmVzb3VyY2UvaHV0aWxzL3RjbC9tdW5jaC50Y2wgLWMgcHBjID4gJChPQkpfRElSKS9jdGR0LmM7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19TaW1wbGVSb2JvdCkgJChDQ19BUkNIX1NQRUMpIC1mZG9sbGFycy1pbi1pZGVudGlmaWVycyAtV2FsbCAkKEFEREVEX0NGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpICAtbyAkKE9CSl9ESVIpL2N0ZHQubyAtYyAkKE9CSl9ESVIpL2N0ZHQuYzsgJChUT09MX1BBVEgpY2NwcGMgLXIgLW5vc3RkbGliIC1XbCwtWCAtVCAkKFdJTkRfQkFTRSkvdGFyZ2V0L2gvdG9vbC9nbnUvbGRzY3JpcHRzL2xpbmsuT1VUIC1vICIkQCIgJChPQkpfRElSKS9jdGR0Lm8gJChPQkpFQ1RTKSAkKFNVQl9PQkpFQ1RTKSAkKFNVQl9UQVJHRVRTKSAkKElERV9MSUJSQVJJRVMpICQoTElCUEFUSCkgJChMSUJTKSAgJChBRERFRF9MSUJQQVRIKSAkKEFEREVEX0xJQlMpICYmIGlmIFsgIiQoRVhQQU5EX0RCRykiID0gIjEiIF07IHRoZW4gcGxpbmsgIiRAIjtmaQ0KKw0KK3RhcmdldF9TaW1wbGVSb2JvdCA6IHN1YmRpcnNfYWxsIGNoZWNrX29iamVjdGRpciAkKE9CSl9ESVIpL1NpbXBsZVJvYm90Lm91dA0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM4NVhYZGlhYikNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19TaW1wbGVSb2JvdCA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfU2ltcGxlUm9ib3QgPSAtWE8gLVhzaXplLW9wdA0KK2VuZGlmDQorJChPQkpfRElSKS9TaW1wbGVSb2JvdC5vdXQgOiAkKE9CSkVDVFMpICQoU1VCX09CSkVDVFMpICQoU1VCX1RBUkdFVFMpDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7cm0gLWYgIiRAIjtkZHVtcCAtTmcgJChPQkpFQ1RTKSAkKFNVQl9PQkpFQ1RTKSAkKFNVQl9UQVJHRVRTKSAkKElERV9MSUJSQVJJRVMpIHwgdGNsc2ggJChXSU5EX0JBU0UpL2hvc3QvcmVzb3VyY2UvaHV0aWxzL3RjbC9tdW5jaC50Y2wgLWMgcHBjID4gJChPQkpfRElSKS9jdGR0LmM7ICQoVE9PTF9QQVRIKWRjYyAkKERFQlVHRkxBR1NfU2ltcGxlUm9ib3QpICQoQ0NfQVJDSF9TUEVDKSAtWGRvbGxhci1pbi1pZGVudCAtWGZvcmNlLWRlY2xhcmF0aW9ucyAkKEFEREVEX0NGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpICAtbyAkKE9CSl9ESVIpL2N0ZHQubyAtYyAkKE9CSl9ESVIpL2N0ZHQuYzsgJChUT09MX1BBVEgpZGxkIC10UFBDRTUwMEZTOnZ4d29ya3M2MyAtWCAtcjUgLXI0IC1vICIkQCIgJChPQkpfRElSKS9jdGR0Lm8gJChPQkpFQ1RTKSAkKFNVQl9PQkpFQ1RTKSAkKFNVQl9UQVJHRVRTKSAkKElERV9MSUJSQVJJRVMpICQoTElCUEFUSCkgJChMSUJTKSAgJChBRERFRF9MSUJQQVRIKSAkKEFEREVEX0xJQlMpICYmIGlmIFsgIiQoRVhQQU5EX0RCRykiID0gIjEiIF07IHRoZW4gcGxpbmsgIiRAIjtmaQ0KKw0KK3RhcmdldF9TaW1wbGVSb2JvdCA6IHN1YmRpcnNfYWxsIGNoZWNrX29iamVjdGRpciAkKE9CSl9ESVIpL1NpbXBsZVJvYm90Lm91dA0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM4NVhYZ251KQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX1NpbXBsZVJvYm90ID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19TaW1wbGVSb2JvdCA9IC1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4NCitlbmRpZg0KKyQoT0JKX0RJUikvU2ltcGxlUm9ib3Qub3V0IDogJChPQkpFQ1RTKSAkKFNVQl9PQkpFQ1RTKSAkKFNVQl9UQVJHRVRTKQ0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiO3JtIC1mICIkQCI7bm1wcGMgJChPQkpFQ1RTKSAkKFNVQl9PQkpFQ1RTKSAkKFNVQl9UQVJHRVRTKSAkKElERV9MSUJSQVJJRVMpIHwgdGNsc2ggJChXSU5EX0JBU0UpL2hvc3QvcmVzb3VyY2UvaHV0aWxzL3RjbC9tdW5jaC50Y2wgLWMgcHBjID4gJChPQkpfRElSKS9jdGR0LmM7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19TaW1wbGVSb2JvdCkgJChDQ19BUkNIX1NQRUMpIC1mZG9sbGFycy1pbi1pZGVudGlmaWVycyAtV2FsbCAkKEFEREVEX0NGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpICAtbyAkKE9CSl9ESVIpL2N0ZHQubyAtYyAkKE9CSl9ESVIpL2N0ZHQuYzsgJChUT09MX1BBVEgpY2NwcGMgLXIgLW5vc3RkbGliIC1XbCwtWCAtVCAkKFdJTkRfQkFTRSkvdGFyZ2V0L2gvdG9vbC9nbnUvbGRzY3JpcHRzL2xpbmsuT1VUIC1vICIkQCIgJChPQkpfRElSKS9jdGR0Lm8gJChPQkpFQ1RTKSAkKFNVQl9PQkpFQ1RTKSAkKFNVQl9UQVJHRVRTKSAkKElERV9MSUJSQVJJRVMpICQoTElCUEFUSCkgJChMSUJTKSAgJChBRERFRF9MSUJQQVRIKSAkKEFEREVEX0xJQlMpICYmIGlmIFsgIiQoRVhQQU5EX0RCRykiID0gIjEiIF07IHRoZW4gcGxpbmsgIiRAIjtmaQ0KKw0KK3RhcmdldF9TaW1wbGVSb2JvdCA6IHN1YmRpcnNfYWxsIGNoZWNrX29iamVjdGRpciAkKE9CSl9ESVIpL1NpbXBsZVJvYm90Lm91dA0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxQUEM4NVhYc2ZkaWFiKQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX1NpbXBsZVJvYm90ID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19TaW1wbGVSb2JvdCA9IC1YTyAtWHNpemUtb3B0DQorZW5kaWYNCiskKE9CSl9ESVIpL1NpbXBsZVJvYm90Lm91dCA6ICQoT0JKRUNUUykgJChTVUJfT0JKRUNUUykgJChTVUJfVEFSR0VUUykNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjtybSAtZiAiJEAiO2RkdW1wIC1OZyAkKE9CSkVDVFMpICQoU1VCX09CSkVDVFMpICQoU1VCX1RBUkdFVFMpICQoSURFX0xJQlJBUklFUykgfCB0Y2xzaCAkKFdJTkRfQkFTRSkvaG9zdC9yZXNvdXJjZS9odXRpbHMvdGNsL211bmNoLnRjbCAtYyBwcGMgPiAkKE9CSl9ESVIpL2N0ZHQuYzsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19TaW1wbGVSb2JvdCkgJChDQ19BUkNIX1NQRUMpIC1YZG9sbGFyLWluLWlkZW50IC1YZm9yY2UtZGVjbGFyYXRpb25zICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgIC1vICQoT0JKX0RJUikvY3RkdC5vIC1jICQoT0JKX0RJUikvY3RkdC5jOyAkKFRPT0xfUEFUSClkbGQgLXRQUENFNTAwRlM6dnh3b3JrczYzIC1YIC1yNSAtcjQgLW8gIiRAIiAkKE9CSl9ESVIpL2N0ZHQubyAkKE9CSkVDVFMpICQoU1VCX09CSkVDVFMpICQoU1VCX1RBUkdFVFMpICQoSURFX0xJQlJBUklFUykgJChMSUJQQVRIKSAkKExJQlMpICAkKEFEREVEX0xJQlBBVEgpICQoQURERURfTElCUykgJiYgaWYgWyAiJChFWFBBTkRfREJHKSIgPSAiMSIgXTsgdGhlbiBwbGluayAiJEAiO2ZpDQorDQordGFyZ2V0X1NpbXBsZVJvYm90IDogc3ViZGlyc19hbGwgY2hlY2tfb2JqZWN0ZGlyICQoT0JKX0RJUikvU2ltcGxlUm9ib3Qub3V0DQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFBQQzg1WFhzZmdudSkNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19TaW1wbGVSb2JvdCA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfU2ltcGxlUm9ib3QgPSAtTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluDQorZW5kaWYNCiskKE9CSl9ESVIpL1NpbXBsZVJvYm90Lm91dCA6ICQoT0JKRUNUUykgJChTVUJfT0JKRUNUUykgJChTVUJfVEFSR0VUUykNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjtybSAtZiAiJEAiO25tcHBjICQoT0JKRUNUUykgJChTVUJfT0JKRUNUUykgJChTVUJfVEFSR0VUUykgJChJREVfTElCUkFSSUVTKSB8IHRjbHNoICQoV0lORF9CQVNFKS9ob3N0L3Jlc291cmNlL2h1dGlscy90Y2wvbXVuY2gudGNsIC1jIHBwYyA+ICQoT0JKX0RJUikvY3RkdC5jOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfU2ltcGxlUm9ib3QpICQoQ0NfQVJDSF9TUEVDKSAtZmRvbGxhcnMtaW4taWRlbnRpZmllcnMgLVdhbGwgJChBRERFRF9DRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAgLW8gJChPQkpfRElSKS9jdGR0Lm8gLWMgJChPQkpfRElSKS9jdGR0LmM7ICQoVE9PTF9QQVRIKWNjcHBjIC1yIC1ub3N0ZGxpYiAtV2wsLVggLVQgJChXSU5EX0JBU0UpL3RhcmdldC9oL3Rvb2wvZ251L2xkc2NyaXB0cy9saW5rLk9VVCAtbyAiJEAiICQoT0JKX0RJUikvY3RkdC5vICQoT0JKRUNUUykgJChTVUJfT0JKRUNUUykgJChTVUJfVEFSR0VUUykgJChJREVfTElCUkFSSUVTKSAkKExJQlBBVEgpICQoTElCUykgICQoQURERURfTElCUEFUSCkgJChBRERFRF9MSUJTKSAmJiBpZiBbICIkKEVYUEFORF9EQkcpIiA9ICIxIiBdOyB0aGVuIHBsaW5rICIkQCI7ZmkNCisNCit0YXJnZXRfU2ltcGxlUm9ib3QgOiBzdWJkaXJzX2FsbCBjaGVja19vYmplY3RkaXIgJChPQkpfRElSKS9TaW1wbGVSb2JvdC5vdXQNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDODYwc2ZkaWFiKQ0KK2lmZXEgKCQoREVCVUdfTU9ERSksMSkNCitERUJVR0ZMQUdTX1NpbXBsZVJvYm90ID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19TaW1wbGVSb2JvdCA9IC1YTyAtWHNpemUtb3B0DQorZW5kaWYNCiskKE9CSl9ESVIpL1NpbXBsZVJvYm90Lm91dCA6ICQoT0JKRUNUUykgJChTVUJfT0JKRUNUUykgJChTVUJfVEFSR0VUUykNCisJJChUUkFDRV9GTEFHKWVjaG8gImJ1aWxkaW5nICRAIjtybSAtZiAiJEAiO2RkdW1wIC1OZyAkKE9CSkVDVFMpICQoU1VCX09CSkVDVFMpICQoU1VCX1RBUkdFVFMpICQoSURFX0xJQlJBUklFUykgfCB0Y2xzaCAkKFdJTkRfQkFTRSkvaG9zdC9yZXNvdXJjZS9odXRpbHMvdGNsL211bmNoLnRjbCAtYyBwcGMgPiAkKE9CSl9ESVIpL2N0ZHQuYzsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19TaW1wbGVSb2JvdCkgJChDQ19BUkNIX1NQRUMpIC1YZG9sbGFyLWluLWlkZW50IC1YZm9yY2UtZGVjbGFyYXRpb25zICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgIC1vICQoT0JKX0RJUikvY3RkdC5vIC1jICQoT0JKX0RJUikvY3RkdC5jOyAkKFRPT0xfUEFUSClkbGQgLXRQUEM4NjBGUzp2eHdvcmtzNjMgLVggLXI1IC1yNCAtbyAiJEAiICQoT0JKX0RJUikvY3RkdC5vICQoT0JKRUNUUykgJChTVUJfT0JKRUNUUykgJChTVUJfVEFSR0VUUykgJChJREVfTElCUkFSSUVTKSAkKExJQlBBVEgpICQoTElCUykgICQoQURERURfTElCUEFUSCkgJChBRERFRF9MSUJTKSAmJiBpZiBbICIkKEVYUEFORF9EQkcpIiA9ICIxIiBdOyB0aGVuIHBsaW5rICIkQCI7ZmkNCisNCit0YXJnZXRfU2ltcGxlUm9ib3QgOiBzdWJkaXJzX2FsbCBjaGVja19vYmplY3RkaXIgJChPQkpfRElSKS9TaW1wbGVSb2JvdC5vdXQNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksUFBDODYwc2ZnbnUpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfU2ltcGxlUm9ib3QgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX1NpbXBsZVJvYm90ID0gLU8yIC1mc3RyZW5ndGgtcmVkdWNlIC1mbm8tYnVpbHRpbg0KK2VuZGlmDQorJChPQkpfRElSKS9TaW1wbGVSb2JvdC5vdXQgOiAkKE9CSkVDVFMpICQoU1VCX09CSkVDVFMpICQoU1VCX1RBUkdFVFMpDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7cm0gLWYgIiRAIjtubXBwYyAkKE9CSkVDVFMpICQoU1VCX09CSkVDVFMpICQoU1VCX1RBUkdFVFMpICQoSURFX0xJQlJBUklFUykgfCB0Y2xzaCAkKFdJTkRfQkFTRSkvaG9zdC9yZXNvdXJjZS9odXRpbHMvdGNsL211bmNoLnRjbCAtYyBwcGMgPiAkKE9CSl9ESVIpL2N0ZHQuYzsgJChUT09MX1BBVEgpY2NwcGMgJChERUJVR0ZMQUdTX1NpbXBsZVJvYm90KSAkKENDX0FSQ0hfU1BFQykgLWZkb2xsYXJzLWluLWlkZW50aWZpZXJzIC1XYWxsICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgIC1vICQoT0JKX0RJUikvY3RkdC5vIC1jICQoT0JKX0RJUikvY3RkdC5jOyAkKFRPT0xfUEFUSCljY3BwYyAtciAtbm9zdGRsaWIgLVdsLC1YIC1UICQoV0lORF9CQVNFKS90YXJnZXQvaC90b29sL2dudS9sZHNjcmlwdHMvbGluay5PVVQgLW8gIiRAIiAkKE9CSl9ESVIpL2N0ZHQubyAkKE9CSkVDVFMpICQoU1VCX09CSkVDVFMpICQoU1VCX1RBUkdFVFMpICQoSURFX0xJQlJBUklFUykgJChMSUJQQVRIKSAkKExJQlMpICAkKEFEREVEX0xJQlBBVEgpICQoQURERURfTElCUykgJiYgaWYgWyAiJChFWFBBTkRfREJHKSIgPSAiMSIgXTsgdGhlbiBwbGluayAiJEAiO2ZpDQorDQordGFyZ2V0X1NpbXBsZVJvYm90IDogc3ViZGlyc19hbGwgY2hlY2tfb2JqZWN0ZGlyICQoT0JKX0RJUikvU2ltcGxlUm9ib3Qub3V0DQorZW5kaWYNCitpZmVxICgkKEJVSUxEX1NQRUMpLFNJTUxJTlVYZGlhYikNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19TaW1wbGVSb2JvdCA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfU2ltcGxlUm9ib3QgPSAtWE8gLVhzaXplLW9wdA0KK2VuZGlmDQorJChPQkpfRElSKS9TaW1wbGVSb2JvdC5vdXQgOiAkKE9CSkVDVFMpICQoU1VCX09CSkVDVFMpICQoU1VCX1RBUkdFVFMpDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7cm0gLWYgIiRAIjtkZHVtcCAtTmcgJChPQkpFQ1RTKSAkKFNVQl9PQkpFQ1RTKSAkKFNVQl9UQVJHRVRTKSAkKElERV9MSUJSQVJJRVMpIHwgdGNsc2ggJChXSU5EX0JBU0UpL2hvc3QvcmVzb3VyY2UvaHV0aWxzL3RjbC9tdW5jaC50Y2wgLWMgcGVudGl1bSA+ICQoT0JKX0RJUikvY3RkdC5jOyAkKFRPT0xfUEFUSClkY2MgJChERUJVR0ZMQUdTX1NpbXBsZVJvYm90KSAkKENDX0FSQ0hfU1BFQykgLVhkb2xsYXItaW4taWRlbnQgLVhmb3JjZS1kZWNsYXJhdGlvbnMgJChBRERFRF9DRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAgLW8gJChPQkpfRElSKS9jdGR0Lm8gLWMgJChPQkpfRElSKS9jdGR0LmM7ICQoVE9PTF9QQVRIKWRsZCAtdFg4NkxIOnZ4d29ya3M2MyAtWCAtcjUgLWYgMHg5MCwxLDEgLXI0IC1vICIkQCIgJChPQkpfRElSKS9jdGR0Lm8gJChPQkpFQ1RTKSAkKFNVQl9PQkpFQ1RTKSAkKFNVQl9UQVJHRVRTKSAkKElERV9MSUJSQVJJRVMpICQoTElCUEFUSCkgJChMSUJTKSAgJChBRERFRF9MSUJQQVRIKSAkKEFEREVEX0xJQlMpICYmIGlmIFsgIiQoRVhQQU5EX0RCRykiID0gIjEiIF07IHRoZW4gcGxpbmsgIiRAIjtmaQ0KKw0KK3RhcmdldF9TaW1wbGVSb2JvdCA6IHN1YmRpcnNfYWxsIGNoZWNrX29iamVjdGRpciAkKE9CSl9ESVIpL1NpbXBsZVJvYm90Lm91dA0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxTSU1MSU5VWGdudSkNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19TaW1wbGVSb2JvdCA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfU2ltcGxlUm9ib3QgPSAtTzIgLW5vc3RkbGliIC1mbm8tYnVpbHRpbiAtZm5vLWRlZmVyLXBvcA0KK2VuZGlmDQorJChPQkpfRElSKS9TaW1wbGVSb2JvdC5vdXQgOiAkKE9CSkVDVFMpICQoU1VCX09CSkVDVFMpICQoU1VCX1RBUkdFVFMpDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7cm0gLWYgIiRAIjtubXBlbnRpdW0gJChPQkpFQ1RTKSAkKFNVQl9PQkpFQ1RTKSAkKFNVQl9UQVJHRVRTKSAkKElERV9MSUJSQVJJRVMpIHwgdGNsc2ggJChXSU5EX0JBU0UpL2hvc3QvcmVzb3VyY2UvaHV0aWxzL3RjbC9tdW5jaC50Y2wgLWMgcGVudGl1bSA+ICQoT0JKX0RJUikvY3RkdC5jOyAkKFRPT0xfUEFUSCljY3BlbnRpdW0gJChERUJVR0ZMQUdTX1NpbXBsZVJvYm90KSAkKENDX0FSQ0hfU1BFQykgLWZkb2xsYXJzLWluLWlkZW50aWZpZXJzIC1XYWxsICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgIC1vICQoT0JKX0RJUikvY3RkdC5vIC1jICQoT0JKX0RJUikvY3RkdC5jOyAkKFRPT0xfUEFUSCljY3BlbnRpdW0gLXIgLW5vc3RkbGliIC1XbCwtWCAtVCAkKFdJTkRfQkFTRSkvdGFyZ2V0L2gvdG9vbC9nbnUvbGRzY3JpcHRzL2xpbmsuT1VUIC1vICIkQCIgJChPQkpfRElSKS9jdGR0Lm8gJChPQkpFQ1RTKSAkKFNVQl9PQkpFQ1RTKSAkKFNVQl9UQVJHRVRTKSAkKElERV9MSUJSQVJJRVMpICQoTElCUEFUSCkgJChMSUJTKSAgJChBRERFRF9MSUJQQVRIKSAkKEFEREVEX0xJQlMpICYmIGlmIFsgIiQoRVhQQU5EX0RCRykiID0gIjEiIF07IHRoZW4gcGxpbmsgIiRAIjtmaQ0KKw0KK3RhcmdldF9TaW1wbGVSb2JvdCA6IHN1YmRpcnNfYWxsIGNoZWNrX29iamVjdGRpciAkKE9CSl9ESVIpL1NpbXBsZVJvYm90Lm91dA0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxTSU1OVGRpYWIpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfU2ltcGxlUm9ib3QgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX1NpbXBsZVJvYm90ID0gLVhPIC1Yc2l6ZS1vcHQNCitlbmRpZg0KKyQoT0JKX0RJUikvU2ltcGxlUm9ib3Qub3V0IDogJChPQkpFQ1RTKSAkKFNVQl9PQkpFQ1RTKSAkKFNVQl9UQVJHRVRTKQ0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiO3JtIC1mICIkQCI7ZGR1bXAgLU5nICQoT0JKRUNUUykgJChTVUJfT0JKRUNUUykgJChTVUJfVEFSR0VUUykgJChJREVfTElCUkFSSUVTKSB8IHRjbHNoICQoV0lORF9CQVNFKS9ob3N0L3Jlc291cmNlL2h1dGlscy90Y2wvbXVuY2gudGNsIC1jIHBlbnRpdW0gPiAkKE9CSl9ESVIpL2N0ZHQuYzsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19TaW1wbGVSb2JvdCkgJChDQ19BUkNIX1NQRUMpIC1YZG9sbGFyLWluLWlkZW50IC1YZm9yY2UtZGVjbGFyYXRpb25zICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgIC1vICQoT0JKX0RJUikvY3RkdC5vIC1jICQoT0JKX0RJUikvY3RkdC5jOyAkKFRPT0xfUEFUSClkbGQgLXRYODZMSDp2eHdvcmtzNjMgLVggLXI1IC1mIDB4OTAsMSwxIC1yNCAtbyAiJEAiICQoT0JKX0RJUikvY3RkdC5vICQoT0JKRUNUUykgJChTVUJfT0JKRUNUUykgJChTVUJfVEFSR0VUUykgJChJREVfTElCUkFSSUVTKSAkKExJQlBBVEgpICQoTElCUykgICQoQURERURfTElCUEFUSCkgJChBRERFRF9MSUJTKSAmJiBpZiBbICIkKEVYUEFORF9EQkcpIiA9ICIxIiBdOyB0aGVuIHBsaW5rICIkQCI7ZmkNCisNCit0YXJnZXRfU2ltcGxlUm9ib3QgOiBzdWJkaXJzX2FsbCBjaGVja19vYmplY3RkaXIgJChPQkpfRElSKS9TaW1wbGVSb2JvdC5vdXQNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksU0lNTlRnbnUpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfU2ltcGxlUm9ib3QgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX1NpbXBsZVJvYm90ID0gLU8yIC1ub3N0ZGxpYiAtZm5vLWJ1aWx0aW4gLWZuby1kZWZlci1wb3ANCitlbmRpZg0KKyQoT0JKX0RJUikvU2ltcGxlUm9ib3Qub3V0IDogJChPQkpFQ1RTKSAkKFNVQl9PQkpFQ1RTKSAkKFNVQl9UQVJHRVRTKQ0KKwkkKFRSQUNFX0ZMQUcpZWNobyAiYnVpbGRpbmcgJEAiO3JtIC1mICIkQCI7bm1wZW50aXVtICQoT0JKRUNUUykgJChTVUJfT0JKRUNUUykgJChTVUJfVEFSR0VUUykgJChJREVfTElCUkFSSUVTKSB8IHRjbHNoICQoV0lORF9CQVNFKS9ob3N0L3Jlc291cmNlL2h1dGlscy90Y2wvbXVuY2gudGNsIC1jIHBlbnRpdW0gPiAkKE9CSl9ESVIpL2N0ZHQuYzsgJChUT09MX1BBVEgpY2NwZW50aXVtICQoREVCVUdGTEFHU19TaW1wbGVSb2JvdCkgJChDQ19BUkNIX1NQRUMpIC1mZG9sbGFycy1pbi1pZGVudGlmaWVycyAtV2FsbCAkKEFEREVEX0NGTEFHUykgJChJREVfSU5DTFVERVMpICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpICAtbyAkKE9CSl9ESVIpL2N0ZHQubyAtYyAkKE9CSl9ESVIpL2N0ZHQuYzsgJChUT09MX1BBVEgpY2NwZW50aXVtIC1yIC1ub3N0ZGxpYiAtV2wsLVggLVQgJChXSU5EX0JBU0UpL3RhcmdldC9oL3Rvb2wvZ251L2xkc2NyaXB0cy9saW5rLk9VVCAtbyAiJEAiICQoT0JKX0RJUikvY3RkdC5vICQoT0JKRUNUUykgJChTVUJfT0JKRUNUUykgJChTVUJfVEFSR0VUUykgJChJREVfTElCUkFSSUVTKSAkKExJQlBBVEgpICQoTElCUykgICQoQURERURfTElCUEFUSCkgJChBRERFRF9MSUJTKSAmJiBpZiBbICIkKEVYUEFORF9EQkcpIiA9ICIxIiBdOyB0aGVuIHBsaW5rICIkQCI7ZmkNCisNCit0YXJnZXRfU2ltcGxlUm9ib3QgOiBzdWJkaXJzX2FsbCBjaGVja19vYmplY3RkaXIgJChPQkpfRElSKS9TaW1wbGVSb2JvdC5vdXQNCitlbmRpZg0KK2lmZXEgKCQoQlVJTERfU1BFQyksU0lNU1BBUkNTT0xBUklTZGlhYikNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19TaW1wbGVSb2JvdCA9IC1nDQorZWxzZQ0KK0RFQlVHRkxBR1NfU2ltcGxlUm9ib3QgPSAtWE8gLVhzaXplLW9wdA0KK2VuZGlmDQorJChPQkpfRElSKS9TaW1wbGVSb2JvdC5vdXQgOiAkKE9CSkVDVFMpICQoU1VCX09CSkVDVFMpICQoU1VCX1RBUkdFVFMpDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7cm0gLWYgIiRAIjtkZHVtcCAtTmcgJChPQkpFQ1RTKSAkKFNVQl9PQkpFQ1RTKSAkKFNVQl9UQVJHRVRTKSAkKElERV9MSUJSQVJJRVMpIHwgdGNsc2ggJChXSU5EX0JBU0UpL2hvc3QvcmVzb3VyY2UvaHV0aWxzL3RjbC9tdW5jaC50Y2wgLWMgc3BhcmMgPiAkKE9CSl9ESVIpL2N0ZHQuYzsgJChUT09MX1BBVEgpZGNjICQoREVCVUdGTEFHU19TaW1wbGVSb2JvdCkgJChDQ19BUkNIX1NQRUMpIC1YZG9sbGFyLWluLWlkZW50IC1YZm9yY2UtZGVjbGFyYXRpb25zICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgIC1vICQoT0JKX0RJUikvY3RkdC5vIC1jICQoT0JKX0RJUikvY3RkdC5jOyAkKFRPT0xfUEFUSClkbGQgLXRTUEFSQ0ZIOnZ4d29ya3M2MyAtWCAtcjUgLXI0IC1vICIkQCIgJChPQkpfRElSKS9jdGR0Lm8gJChPQkpFQ1RTKSAkKFNVQl9PQkpFQ1RTKSAkKFNVQl9UQVJHRVRTKSAkKElERV9MSUJSQVJJRVMpICQoTElCUEFUSCkgJChMSUJTKSAgJChBRERFRF9MSUJQQVRIKSAkKEFEREVEX0xJQlMpICYmIGlmIFsgIiQoRVhQQU5EX0RCRykiID0gIjEiIF07IHRoZW4gcGxpbmsgIiRAIjtmaQ0KKw0KK3RhcmdldF9TaW1wbGVSb2JvdCA6IHN1YmRpcnNfYWxsIGNoZWNrX29iamVjdGRpciAkKE9CSl9ESVIpL1NpbXBsZVJvYm90Lm91dA0KK2VuZGlmDQoraWZlcSAoJChCVUlMRF9TUEVDKSxTSU1TUEFSQ1NPTEFSSVNnbnUpDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK0RFQlVHRkxBR1NfU2ltcGxlUm9ib3QgPSAtZw0KK2Vsc2UNCitERUJVR0ZMQUdTX1NpbXBsZVJvYm90ID0gLU8yIC1mc3RyZW5ndGgtcmVkdWNlIC1mbm8tYnVpbHRpbg0KK2VuZGlmDQorJChPQkpfRElSKS9TaW1wbGVSb2JvdC5vdXQgOiAkKE9CSkVDVFMpICQoU1VCX09CSkVDVFMpICQoU1VCX1RBUkdFVFMpDQorCSQoVFJBQ0VfRkxBRyllY2hvICJidWlsZGluZyAkQCI7cm0gLWYgIiRAIjtubXNwYXJjICQoT0JKRUNUUykgJChTVUJfT0JKRUNUUykgJChTVUJfVEFSR0VUUykgJChJREVfTElCUkFSSUVTKSB8IHRjbHNoICQoV0lORF9CQVNFKS9ob3N0L3Jlc291cmNlL2h1dGlscy90Y2wvbXVuY2gudGNsIC1jIHNwYXJjID4gJChPQkpfRElSKS9jdGR0LmM7ICQoVE9PTF9QQVRIKWNjc3BhcmMgJChERUJVR0ZMQUdTX1NpbXBsZVJvYm90KSAkKENDX0FSQ0hfU1BFQykgLWZkb2xsYXJzLWluLWlkZW50aWZpZXJzIC1XYWxsICQoQURERURfQ0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgIC1vICQoT0JKX0RJUikvY3RkdC5vIC1jICQoT0JKX0RJUikvY3RkdC5jOyAkKFRPT0xfUEFUSCljY3NwYXJjIC1yIC1ub3N0ZGxpYiAtV2wsLVggIC1vICIkQCIgJChPQkpfRElSKS9jdGR0Lm8gJChPQkpFQ1RTKSAkKFNVQl9PQkpFQ1RTKSAkKFNVQl9UQVJHRVRTKSAkKElERV9MSUJSQVJJRVMpICQoTElCUEFUSCkgJChMSUJTKSAgJChBRERFRF9MSUJQQVRIKSAkKEFEREVEX0xJQlMpICYmIGlmIFsgIiQoRVhQQU5EX0RCRykiID0gIjEiIF07IHRoZW4gcGxpbmsgIiRAIjtmaQ0KKw0KK3RhcmdldF9TaW1wbGVSb2JvdCA6IHN1YmRpcnNfYWxsIGNoZWNrX29iamVjdGRpciAkKE9CSl9ESVIpL1NpbXBsZVJvYm90Lm91dA0KK2VuZGlmDQorDQorDQorDQorDQorLWluY2x1ZGUgKi5tYWtlZmlsZQ0KKw0KK21haW5fYWxsIDogY2hlY2tfb2JqZWN0ZGlyIGV4dGVybmFsX2J1aWxkICQoUFJPSkVDVF9UQVJHRVRTKQ0KKwlAZWNobyAibWFrZTogYnVpbHQgdGFyZ2V0cyBvZiBgcHdkYCINCisNCitjaGVja19vYmplY3RkaXIgOg0KKwlAaWYgWyAhIC1kICIkKE9CSl9ESVIpIiBdOyB0aGVuXA0KKwkJbWtkaXIgLXAgJChPQkpfRElSKTtcDQorCWZpDQorDQorIyBlbnRyeSBwb2ludCBmb3IgZXh0ZW5kaW5nIHRoZSBidWlsZA0KK2V4dGVybmFsX2J1aWxkIDo6DQorCUBlY2hvICIiDQorDQorIyBtYWluIGVudHJ5IHBvaW50IGZvciBwcmUgcHJvY2Vzc2luZyBwcmlvciB0byB0aGUgcmVjdXJzaW9uDQorcHJlX3JlY3Vyc2lvbiA6Og0KKwlAZWNobyAiIg0KKw0KKyMgbWFpbiBlbnRyeSBwb2ludCBmb3IgcG9zdCBwcm9jZXNzaW5nIGFmdGVyIHRoZSByZWN1cnNpb24NCitwb3N0X3JlY3Vyc2lvbiA6Og0KKwlAZWNobyAiIg0KKw0KKyMgbWFpbiBlbnRyeSBwb2ludCBmb3IgcHJlIHByb2Nlc3NpbmcgcHJpb3IgdG8gdGhlIGJ1aWxkDQorcHJlX2J1aWxkIDo6ICQoUFJFX0JVSUxEX1NURVApIGdlbmVyYXRlX3NvdXJjZXMNCisJQGVjaG8gIiINCisNCisjIGVudHJ5IHBvaW50IGZvciBnZW5lcmF0aW5nIHNvdXJjZXMgcHJpb3IgdG8gdGhlIGJ1aWxkDQorZ2VuZXJhdGVfc291cmNlcyA6Og0KKwlAZWNobyAiIg0KKw0KKyMgbWFpbiBlbnRyeSBwb2ludCBmb3IgcG9zdCBwcm9jZXNzaW5nIGFmdGVyIHRoZSBidWlsZA0KK3Bvc3RfYnVpbGQgOjogJChQT1NUX0JVSUxEX1NURVApIGRlcGxveV9vdXRwdXQNCisJQGVjaG8gIiINCisNCisjIGVudHJ5IHBvaW50IGZvciBkZXBsb3lpbmcgb3V0cHV0IGFmdGVyIHRoZSBidWlsZA0KK2RlcGxveV9vdXRwdXQgOjoNCisJQGVjaG8gIiINCisNCisjIHJlY3Vyc2l2ZSBtYWtlIGluIFNVQkRJUlMNCitzdWJkaXJzX2FsbCA6DQorCUBfUFdEPWBwd2RgO1wNCisJZm9yIGRpciBpbiBfZHVtbXlfICQoU1VCRElSUyk7IGRvXA0KKwkJaWYgWyAiJCRkaXIiID0gIl9kdW1teV8iIF07IHRoZW5cDQorCQkJY29udGludWUgO1wNCisJCWZpO1wNCisJCWlmIFsgISAtZCAiJCRkaXIiIF07IHRoZW5cDQorCQkJY29udGludWUgO1wNCisJCWZpO1wNCisJCWVjaG8gIlJlY3Vyc2l2ZSBtYWtlOiBDaGFuZ2luZyB0byBEaXJlY3RvcnkgJyQkZGlyJyI7XA0KKwkJY2QgIiQkZGlyIjtcDQorCQkiJChNQUtFKSIgLWYgIiQoTUFLRUZJTEUpIiAkKE1GTEFHUykgYWxsIHx8IGV4aXQ7XA0KKwkJZWNobyAiUmVjdXJzaXZlIG1ha2U6IENoYW5naW5nIGJhY2sgdG8gRGlyZWN0b3J5ICckJF9QV0QnIjtcDQorCQljZCAiJCRfUFdEIjtcDQorCWRvbmUNCisNCitjbGVhbiA6Og0KKwlAX1BXRD1gcHdkYDtcDQorCWZvciBkaXIgaW4gX2R1bW15XyAkKFNVQkRJUlMpOyBkb1wNCisJCWlmIFsgIiQkZGlyIiA9ICJfZHVtbXlfIiBdOyB0aGVuXA0KKwkJCWNvbnRpbnVlIDtcDQorCQlmaTtcDQorCQlpZiBbICEgLWQgIiQkZGlyIiBdOyB0aGVuXA0KKwkJCWNvbnRpbnVlIDtcDQorCQlmaTtcDQorCQllY2hvICJSZWN1cnNpdmUgbWFrZTogQ2hhbmdpbmcgdG8gRGlyZWN0b3J5ICckJGRpciciO1wNCisJCWNkICIkJGRpciI7XA0KKwkJIiQoTUFLRSkiIC1mICIkKE1BS0VGSUxFKSIgJChNRkxBR1MpICRAIHx8IGV4aXQ7XA0KKwkJZWNobyAiUmVjdXJzaXZlIG1ha2U6IENoYW5naW5nIGJhY2sgdG8gRGlyZWN0b3J5ICckJF9QV0QnIjtcDQorCQljZCAiJCRfUFdEIjtcDQorCWRvbmUNCisNCitjbGVhbiA6OiBleHRlcm5hbF9jbGVhbiAkKENMRUFOX1NURVApIF9jbGVhbg0KKw0KKyMgZW50cnkgcG9pbnQgZm9yIGV4dGVuZGluZyB0aGUgYnVpbGQgY2xlYW4NCitleHRlcm5hbF9jbGVhbiA6Og0KKwlAZWNobyAiIg0KKw0KK19jbGVhbiA6DQorCUBlY2hvICJtYWtlOiByZW1vdmluZyB0YXJnZXRzIGFuZCBvYmplY3RzIG9mIGBwd2RgIjtcDQorCXJtIC1mICQoT0JKRUNUUykgJChQUk9KRUNUX1RBUkdFVFMpICQoREVQX0ZJTEVTKSAkKHdpbGRjYXJkICQoT0JKX0RJUikvKi51bnN0cmlwcGVkKSAkKHdpbGRjYXJkICQoT0JKX0RJUikvY3RkdC4qKQ0KKw0KK2J1aWxkX2FsbF9zcGVjcyA6DQorCUBlY2hvICJidWlsZGluZyB0YXJnZXQgZGVmYXVsdCBmb3IgQUxMIGJ1aWxkLXNwZWNzIjtcDQorCWZvciBzcGVjIGluIF9kdW1teV8gJChBTExfQlVJTERfU1BFQ1MpOyBkb1wNCisJCWlmIFsgIiQkc3BlYyIgPSAiX2R1bW15XyIgXTsgdGhlblwNCisJCQljb250aW51ZSA7XA0KKwkJZmk7XA0KKwkJZWNobyAiICI7XA0KKwkJZWNobyAiYnVpbGRpbmcgYWxsIGZvciBidWlsZC1zcGVjICckJHNwZWMnIjtcDQorCQkiJChNQUtFKSIgLWYgIiQoTUFLRUZJTEUpIiAkKE1GTEFHUykgQlVJTERfU1BFQz0kJHNwZWMgREVCVUdfTU9ERT0kKERFQlVHX01PREUpIFRSQUNFPSQoVFJBQ0UpIHx8IGV4aXQ7XA0KKwlkb25lDQorDQorY2xlYW5fYWxsX3NwZWNzIDoNCisJQGVjaG8gImJ1aWxkaW5nIHRhcmdldCBjbGVhbiBmb3IgQUxMIGJ1aWxkLXNwZWNzIjtcDQorCWZvciBzcGVjIGluIF9kdW1teV8gJChBTExfQlVJTERfU1BFQ1MpOyBkb1wNCisJCWlmIFsgIiQkc3BlYyIgPSAiX2R1bW15XyIgXTsgdGhlblwNCisJCQljb250aW51ZSA7XA0KKwkJZmk7XA0KKwkJZWNobyAiICI7XA0KKwkJZWNobyAiYnVpbGRpbmcgY2xlYW4gZm9yIGJ1aWxkLXNwZWMgJyQkc3BlYyciO1wNCisJCSIkKE1BS0UpIiAtZiAiJChNQUtFRklMRSkiICQoTUZMQUdTKSBCVUlMRF9TUEVDPSQkc3BlYyBERUJVR19NT0RFPSQoREVCVUdfTU9ERSkgVFJBQ0U9JChUUkFDRSkgY2xlYW4gfHwgZXhpdDtcDQorCWRvbmUNCisNCitidWlsZF9lbmFibGVkX3NwZWNzIDoNCisJQGVjaG8gImJ1aWxkaW5nIHRhcmdldCBkZWZhdWx0IGZvciBFTkFCTEVEIGJ1aWxkLXNwZWNzIjtcDQorCWZvciBzcGVjIGluIF9kdW1teV8gJChFTkFCTEVEX0JVSUxEX1NQRUNTKTsgZG9cDQorCQlpZiBbICIkJHNwZWMiID0gIl9kdW1teV8iIF07IHRoZW5cDQorCQkJY29udGludWUgO1wNCisJCWZpO1wNCisJCWVjaG8gIiAiO1wNCisJCWVjaG8gImJ1aWxkaW5nIGFsbCBmb3IgYnVpbGQtc3BlYyAnJCRzcGVjJyI7XA0KKwkJIiQoTUFLRSkiIC1mICIkKE1BS0VGSUxFKSIgJChNRkxBR1MpIEJVSUxEX1NQRUM9JCRzcGVjIERFQlVHX01PREU9JChERUJVR19NT0RFKSBUUkFDRT0kKFRSQUNFKSB8fCBleGl0O1wNCisJZG9uZQ0KKw0KK2NsZWFuX2VuYWJsZWRfc3BlY3MgOg0KKwlAZWNobyAiYnVpbGRpbmcgdGFyZ2V0IGNsZWFuIGZvciBFTkFCTEVEIGJ1aWxkLXNwZWNzIjtcDQorCWZvciBzcGVjIGluIF9kdW1teV8gJChFTkFCTEVEX0JVSUxEX1NQRUNTKTsgZG9cDQorCQlpZiBbICIkJHNwZWMiID0gIl9kdW1teV8iIF07IHRoZW5cDQorCQkJY29udGludWUgO1wNCisJCWZpO1wNCisJCWVjaG8gIiAiO1wNCisJCWVjaG8gImJ1aWxkaW5nIGNsZWFuIGZvciBidWlsZC1zcGVjICckJHNwZWMnIjtcDQorCQkiJChNQUtFKSIgLWYgIiQoTUFLRUZJTEUpIiAkKE1GTEFHUykgQlVJTERfU1BFQz0kJHNwZWMgREVCVUdfTU9ERT0kKERFQlVHX01PREUpIFRSQUNFPSQoVFJBQ0UpIGNsZWFuIHx8IGV4aXQ7XA0KKwlkb25lDQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvdnh3b3Jrcy02LjMvdGFyZ2V0L3NyYy9kZW1vL0RlZmF1bHRSb2JvdC9zYW1wbGUucHJvcGVydGllcyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9EZWZhdWx0Um9ib3Qvc2FtcGxlLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWZjODk1ZQotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9EZWZhdWx0Um9ib3Qvc2FtcGxlLnByb3BlcnRpZXMKQEAgLTAsMCArMSwyIEBACitwcm9qZWN0LnR5cGU9RG93bmxvYWRhYmxlS2VybmVsTW9kdWxlUHJvamVjdA0KK3BsYXRmb3JtLmlkPVZ4V29ya3MNCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vRGVmYXVsdFJvYm90L3NhbXBsZS50eHQgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vRGVmYXVsdFJvYm90L3NhbXBsZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWZjOTMzOQotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9EZWZhdWx0Um9ib3Qvc2FtcGxlLnR4dApAQCAtMCwwICsxLDEwIEBACitGUkMgRGVmYXVsdCBQcm9ncmFtIChPcmlnaW5hbCBmYWN0b3J5IGltYWdlKQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorDQorVGhpcyBzYW1wbGUgaW1wbGVtZW50cyB0aGUgImRlZmF1bHQgcHJvZ3JhbSIgdGhhdCB3YXMgcHJlbG9hZGVkIG9uDQoreW91ciBjUklPIHdoZW4gaXQgY2FtZSBmcm9tIHRoZSBmYWN0b3J5LiBUaGlzIHByb2dyYW0gaGFzIGJvdGggQXV0b25vbW91cw0KK2FuZCBPcGVyYXRvciBDb250cm9sIGNvZGUgYXMgZGVzY3JpYmVkIGluIHRoZSAiT3V0IG9mIHRoZSBib3giIGRpcmVjdGlvbnMuDQorDQorWW91IGNhbiB1c2UgdGhpcyBhcyBhIHNsaWdodGx5IG1vcmUgYWR2YW5jZWQgdGVtcGxhdGUgYXMgYSBzdGFydGluZyBwb2ludA0KK2ZvciB5b3VyIG93biByb2JvdCBwcm9qZWN0cywgb3IganVzdCB0byBzZWUgaG93IHNvbWUgbW9yZSBhZHZhbmNlZCBwcm9ncmFtbWluZw0KK3dvcmtzLgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9Ecml2ZXJTdGF0aW9uTENEVGV4dC8uY3Byb2plY3QgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vRHJpdmVyU3RhdGlvbkxDRFRleHQvLmNwcm9qZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhOTJlZGMKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vRHJpdmVyU3RhdGlvbkxDRFRleHQvLmNwcm9qZWN0CkBAIC0wLDAgKzEsMjkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQorPD9maWxlVmVyc2lvbiA0LjAuMD8+DQorDQorPGNwcm9qZWN0Pg0KKzxzdG9yYWdlTW9kdWxlIG1vZHVsZUlkPSJvcmcuZWNsaXBzZS5jZHQuY29yZS5zZXR0aW5ncyI+DQorPGNjb25maWd1cmF0aW9uIGlkPSJvcmcuZWNsaXBzZS5jZHQuY29yZS5kZWZhdWx0LmNvbmZpZy4yODM5NjcxMDYiPg0KKzxzdG9yYWdlTW9kdWxlIGJ1aWxkU3lzdGVtSWQ9Im9yZy5lY2xpcHNlLmNkdC5jb3JlLmRlZmF1bHRDb25maWdEYXRhUHJvdmlkZXIiIGlkPSJvcmcuZWNsaXBzZS5jZHQuY29yZS5kZWZhdWx0LmNvbmZpZy4yODM5NjcxMDYiIG1vZHVsZUlkPSJvcmcuZWNsaXBzZS5jZHQuY29yZS5zZXR0aW5ncyIgbmFtZT0iQ29uZmlndXJhdGlvbiI+DQorPGV4dGVybmFsU2V0dGluZ3MvPg0KKzxleHRlbnNpb25zPg0KKzxleHRlbnNpb24gaWQ9ImNvbS53aW5kcml2ZXIuaWRlLmNvcmUuV1JTY2FubmVySW5mb1Byb3ZpZGVyIiBwb2ludD0ib3JnLmVjbGlwc2UuY2R0LmNvcmUuU2Nhbm5lckluZm9Qcm92aWRlciIvPg0KKzxleHRlbnNpb24gaWQ9ImNvbS53aW5kcml2ZXIuaWRlLmNvcmUuV1JFbGZQYXJzZXJWeFdvcmtzIiBwb2ludD0ib3JnLmVjbGlwc2UuY2R0LmNvcmUuQmluYXJ5UGFyc2VyIi8+DQorPGV4dGVuc2lvbiBpZD0ib3JnLmVjbGlwc2UuY2R0LmNvcmUuR05VX0VMRiIgcG9pbnQ9Im9yZy5lY2xpcHNlLmNkdC5jb3JlLkJpbmFyeVBhcnNlciIvPg0KKzwvZXh0ZW5zaW9ucz4NCis8L3N0b3JhZ2VNb2R1bGU+DQorPHN0b3JhZ2VNb2R1bGUgbW9kdWxlSWQ9Im9yZy5lY2xpcHNlLmNkdC5jb3JlLmV4dGVybmFsU2V0dGluZ3MiLz4NCis8c3RvcmFnZU1vZHVsZSBtb2R1bGVJZD0ib3JnLmVjbGlwc2UuY2R0LmNvcmUucGF0aGVudHJ5Ij4NCis8cGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0iIi8+DQorPHBhdGhlbnRyeSBraW5kPSJvdXQiIHBhdGg9IiIvPg0KKzxwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJjb20ud2luZHJpdmVyLmlkZS5jb3JlLldSX0NPTlRBSU5FUiIvPg0KKzxwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJjb20ud2luZHJpdmVyLmlkZS5jb3JlLmJ1aWxkLm1vZGVsLldSX1VTRVJERUZJTkVEX0NPTlRBSU5FUiIvPg0KKzwvc3RvcmFnZU1vZHVsZT4NCis8c3RvcmFnZU1vZHVsZSBtb2R1bGVJZD0ic2Nhbm5lckNvbmZpZ3VyYXRpb24iLz4NCis8c3RvcmFnZU1vZHVsZSBtb2R1bGVJZD0idXNlcmRlZmluZWRDb250YWluZXIiPg0KKzxpbmRleEFsbEZpbGVzIHZhbHVlPSJmYWxzZSIvPg0KKzxpbml0aWFsaXplZCB2YWx1ZT0idHJ1ZSIvPg0KKzwvc3RvcmFnZU1vZHVsZT4NCis8L2Njb25maWd1cmF0aW9uPg0KKzwvc3RvcmFnZU1vZHVsZT4NCis8L2Nwcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9Ecml2ZXJTdGF0aW9uTENEVGV4dC8ucHJvamVjdCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9Ecml2ZXJTdGF0aW9uTENEVGV4dC8ucHJvamVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMGIzNjI3Ci0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvdnh3b3Jrcy02LjMvdGFyZ2V0L3NyYy9kZW1vL0RyaXZlclN0YXRpb25MQ0RUZXh0Ly5wcm9qZWN0CkBAIC0wLDAgKzEsMjAgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQorPHByb2plY3REZXNjcmlwdGlvbj4NCisJPG5hbWU+RHJpdmVyU3RhdGlvbkxDRFRleHQ8L25hbWU+DQorCTxjb21tZW50PjwvY29tbWVudD4NCisJPHByb2plY3RzPg0KKwk8L3Byb2plY3RzPg0KKwk8YnVpbGRTcGVjPg0KKwkJPGJ1aWxkQ29tbWFuZD4NCisJCQk8bmFtZT5jb20ud2luZHJpdmVyLmlkZS5jb3JlLndyYnVpbGRlcjwvbmFtZT4NCisJCQk8YXJndW1lbnRzPg0KKwkJCTwvYXJndW1lbnRzPg0KKwkJPC9idWlsZENvbW1hbmQ+DQorCTwvYnVpbGRTcGVjPg0KKwk8bmF0dXJlcz4NCisJCTxuYXR1cmU+Y29tLndpbmRyaXZlci5pZGUuY29yZS53cm5hdHVyZTwvbmF0dXJlPg0KKwkJPG5hdHVyZT5jb20ud2luZHJpdmVyLmlkZS5jb3JlLndyY29yZW5hdHVyZTwvbmF0dXJlPg0KKwkJPG5hdHVyZT5vcmcuZWNsaXBzZS5jZHQuY29yZS5jbmF0dXJlPC9uYXR1cmU+DQorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmNkdC5jb3JlLmNjbmF0dXJlPC9uYXR1cmU+DQorCTwvbmF0dXJlcz4NCis8L3Byb2plY3REZXNjcmlwdGlvbj4NCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vRHJpdmVyU3RhdGlvbkxDRFRleHQvLndybWFrZWZpbGUgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vRHJpdmVyU3RhdGlvbkxDRFRleHQvLndybWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTFkZDdmOAotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9Ecml2ZXJTdGF0aW9uTENEVGV4dC8ud3JtYWtlZmlsZQpAQCAtMCwwICsxLDQ4IEBACisjIFRoZSBmaWxlICIud3JtYWtlZmlsZSIgaXMgdGhlIHRlbXBsYXRlIHVzZWQgYnkgdGhlIFdpbmQgUml2ZXIgV29ya2JlbmNoIHRvDQorIyBnZW5lcmF0ZSB0aGUgbWFrZWZpbGVzIG9mIHRoaXMgcHJvamVjdC4gQWRkIHVzZXItc3BlY2lmaWMgYnVpbGQgdGFyZ2V0cyBhbmQNCisjIG1ha2UgcnVsZXMgb25seSghKSBpbiB0aGlzIHByb2plY3QncyAiLndybWFrZWZpbGUiIGZpbGUuIFRoZXNlIHdpbGwgdGhlbiBiZQ0KKyMgYXV0b21hdGljYWxseSBkdW1wZWQgaW50byB0aGUgbWFrZWZpbGVzLg0KKw0KK1dJTkRfSE9NRSA6PSAkKHN1YnN0IFwsLywkKFdJTkRfSE9NRSkpDQorV0lORF9CQVNFIDo9ICQoc3Vic3QgXCwvLCQoV0lORF9CQVNFKSkNCitXSU5EX1VTUiA6PSAkKHN1YnN0IFwsLywkKFdJTkRfVVNSKSkNCisNCithbGwgOiBwcmVfYnVpbGQgbWFpbl9hbGwgcG9zdF9idWlsZA0KKw0KK19jbGVhbiA6Og0KKwlAZWNobyAibWFrZTogcmVtb3ZpbmcgdGFyZ2V0cyBhbmQgb2JqZWN0cyBvZiBgcHdkYCINCisNCislSURFX0dFTkVSQVRFRCUNCisNCistaW5jbHVkZSAkKFBSSl9ST09UX0RJUikvKi5tYWtlZmlsZQ0KKw0KKy1pbmNsdWRlICoubWFrZWZpbGUNCisNCittYWluX2FsbCA6IGV4dGVybmFsX2J1aWxkICQoUFJPSkVDVF9UQVJHRVRTKQ0KKwlAZWNobyAibWFrZTogYnVpbHQgdGFyZ2V0cyBvZiBgcHdkYCINCisNCisjIGVudHJ5IHBvaW50IGZvciBleHRlbmRpbmcgdGhlIGJ1aWxkDQorZXh0ZXJuYWxfYnVpbGQgOjoNCisJQGVjaG8gIiINCisNCisjIG1haW4gZW50cnkgcG9pbnQgZm9yIHByZSBwcm9jZXNzaW5nIHByaW9yIHRvIHRoZSBidWlsZA0KK3ByZV9idWlsZCA6OiAkKFBSRV9CVUlMRF9TVEVQKSBnZW5lcmF0ZV9zb3VyY2VzDQorCUBlY2hvICIiDQorDQorIyBlbnRyeSBwb2ludCBmb3IgZ2VuZXJhdGluZyBzb3VyY2VzIHByaW9yIHRvIHRoZSBidWlsZA0KK2dlbmVyYXRlX3NvdXJjZXMgOjoNCisJQGVjaG8gIiINCisNCisjIG1haW4gZW50cnkgcG9pbnQgZm9yIHBvc3QgcHJvY2Vzc2luZyBhZnRlciB0aGUgYnVpbGQNCitwb3N0X2J1aWxkIDo6ICQoUE9TVF9CVUlMRF9TVEVQKSBkZXBsb3lfb3V0cHV0DQorCUBlY2hvICIiDQorDQorIyBlbnRyeSBwb2ludCBmb3IgZGVwbG95aW5nIG91dHB1dCBhZnRlciB0aGUgYnVpbGQNCitkZXBsb3lfb3V0cHV0IDo6DQorCUBlY2hvICIiDQorDQorY2xlYW4gOjogZXh0ZXJuYWxfY2xlYW4gJChDTEVBTl9TVEVQKSBfY2xlYW4NCisNCisjIGVudHJ5IHBvaW50IGZvciBleHRlbmRpbmcgdGhlIGJ1aWxkIGNsZWFuDQorZXh0ZXJuYWxfY2xlYW4gOjoNCisJQGVjaG8gIiINCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vRHJpdmVyU3RhdGlvbkxDRFRleHQvLndycHJvamVjdCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9Ecml2ZXJTdGF0aW9uTENEVGV4dC8ud3Jwcm9qZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjZjEyMWYKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vRHJpdmVyU3RhdGlvbkxDRFRleHQvLndycHJvamVjdApAQCAtMCwwICsxLDI1OCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCis8d3J4bWw+DQorICAgIDxwcm9wZXJ0aWVzIHBsYXRmb3JtPSJWeFdvcmtzIiBwbGF0Zm9ybV9uYW1lPSJ2eHdvcmtzLTYuMyIgcm9vdD0iMSIgdHlwZT0iRG93bmxvYWRhYmxlS2VybmVsTW9kdWxlUHJvamVjdCIvPg0KKyAgICA8YXR0cmlidXRlcz4NCisgICAgICAgIDxtYXBBdHRyaWJ1dGU+DQorICAgICAgICAgICAgPGxpc3RBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98R2xvYmFsTWFjcm9zIj4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iUFJPSkVDVF9UWVBFIi8+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9IkRFRklORVMiLz4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iRVhQQU5EX0RCRyIvPg0KKyAgICAgICAgICAgIDwvbGlzdEF0dHJpYnV0ZT4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfEdsb2JhbE1hY3JvfERFRklORVMiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfEdsb2JhbE1hY3JvfEVYUEFORF9EQkciIHZhbHVlPSIwIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xHbG9iYWxNYWNyb3xQUk9KRUNUX1RZUEUiIHZhbHVlPSJES00iLz4NCisgICAgICAgICAgICA8bGlzdEF0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xJbmNsfFBQQzMyZGlhYiI+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9Ii1JJChXSU5EX0JBU0UpL3RhcmdldC9oL1dQSUxpYiIvPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSItSSQoV0lORF9CQVNFKS90YXJnZXQvaCIvPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSItSSQoV0lORF9CQVNFKS90YXJnZXQvaC93cm4vY29yZWlwIi8+DQorICAgICAgICAgICAgPC9saXN0QXR0cmlidXRlPg0KKyAgICAgICAgICAgIDxsaXN0QXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfEluY2x8UFBDMzJnbnUiPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSItSSQoV0lORF9CQVNFKS90YXJnZXQvaCIvPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSItSSQoV0lORF9CQVNFKS90YXJnZXQvaC93cm4vY29yZWlwIi8+DQorICAgICAgICAgICAgPC9saXN0QXR0cmlidXRlPg0KKyAgICAgICAgICAgIDxsaXN0QXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfEluY2x8UFBDNjAzZGlhYiI+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9Ii1JJChXSU5EX0JBU0UpL3RhcmdldC9oIi8+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9Ii1JJChXSU5EX0JBU0UpL3RhcmdldC9oL3dybi9jb3JlaXAiLz4NCisgICAgICAgICAgICA8L2xpc3RBdHRyaWJ1dGU+DQorICAgICAgICAgICAgPGxpc3RBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98SW5jbHxQUEM2MDNnbnUiPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSItSSQoV0lORF9CQVNFKS90YXJnZXQvaCIvPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSItSSQoV0lORF9CQVNFKS90YXJnZXQvaC9XUElMaWIiLz4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2gvd3JuL2NvcmVpcCIvPg0KKyAgICAgICAgICAgIDwvbGlzdEF0dHJpYnV0ZT4NCisgICAgICAgICAgICA8bGlzdEF0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xMaWJzfFBQQzMyZGlhYiI+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9IiQoV0lORF9CQVNFKS90YXJnZXQvbGliL1dQSUxpYi5hIi8+DQorICAgICAgICAgICAgPC9saXN0QXR0cmlidXRlPg0KKyAgICAgICAgICAgIDxsaXN0QXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfExpYnN8UFBDNjAzZ251Ij4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iJChXSU5EX0JBU0UpL3RhcmdldC9saWIvV1BJTGliLmEiLz4NCisgICAgICAgICAgICA8L2xpc3RBdHRyaWJ1dGU+DQorICAgICAgICAgICAgPGxpc3RBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm9zIj4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iVlhfQ1BVX0ZBTUlMWSIvPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSJDUFUiLz4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iVE9PTF9GQU1JTFkiLz4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iVE9PTCIvPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSJUT09MX1BBVEgiLz4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iQ0NfQVJDSF9TUEVDIi8+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9IkxJQlBBVEgiLz4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iTElCUyIvPg0KKyAgICAgICAgICAgIDwvbGlzdEF0dHJpYnV0ZT4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfENDX0FSQ0hfU1BFQ3x2YWx1ZXxQUEMzMmRpYWIiIHZhbHVlPSItdFBQQ0ZIOnZ4d29ya3M2MyAtWHN0bXctc2xvdyAtRFBQQzMyX2ZwNjB4Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xDQ19BUkNIX1NQRUN8dmFsdWV8UFBDMzJnbnUiIHZhbHVlPSItbWhhcmQtZmxvYXQgLW1zdHJpY3QtYWxpZ24gLW1uby1pbXBsaWNpdC1mcCAtRFBQQzMyX2ZwNjB4Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xDQ19BUkNIX1NQRUN8dmFsdWV8UFBDNjAzZGlhYiIgdmFsdWU9Ii10UFBDNjAzRkg6dnh3b3JrczYzIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xDQ19BUkNIX1NQRUN8dmFsdWV8UFBDNjAzZ251IiB2YWx1ZT0iLW1jcHU9NjAzIC1tc3RyaWN0LWFsaWduIC1tbm8taW1wbGljaXQtZnAgLW1sb25nY2FsbCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98Q1BVfHZhbHVlfFBQQzMyZGlhYiIgdmFsdWU9IlBQQzMyIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xDUFV8dmFsdWV8UFBDMzJnbnUiIHZhbHVlPSJQUEMzMiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98Q1BVfHZhbHVlfFBQQzYwM2RpYWIiIHZhbHVlPSJQUEM2MDMiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfENQVXx2YWx1ZXxQUEM2MDNnbnUiIHZhbHVlPSJQUEM2MDMiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfExJQlBBVEh8dmFsdWV8UFBDMzJkaWFiIiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xMSUJQQVRIfHZhbHVlfFBQQzMyZ251IiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xMSUJQQVRIfHZhbHVlfFBQQzYwM2RpYWIiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfExJQlBBVEh8dmFsdWV8UFBDNjAzZ251IiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xMSUJTfHZhbHVlfFBQQzMyZGlhYiIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98TElCU3x2YWx1ZXxQUEMzMmdudSIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98TElCU3x2YWx1ZXxQUEM2MDNkaWFiIiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xMSUJTfHZhbHVlfFBQQzYwM2dudSIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98VE9PTF9GQU1JTFl8dmFsdWV8UFBDMzJkaWFiIiB2YWx1ZT0iZGlhYiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98VE9PTF9GQU1JTFl8dmFsdWV8UFBDMzJnbnUiIHZhbHVlPSJnbnUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfFRPT0xfRkFNSUxZfHZhbHVlfFBQQzYwM2RpYWIiIHZhbHVlPSJkaWFiIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xUT09MX0ZBTUlMWXx2YWx1ZXxQUEM2MDNnbnUiIHZhbHVlPSJnbnUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfFRPT0xfUEFUSHx2YWx1ZXxQUEMzMmRpYWIiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfFRPT0xfUEFUSHx2YWx1ZXxQUEMzMmdudSIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98VE9PTF9QQVRIfHZhbHVlfFBQQzYwM2RpYWIiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfFRPT0xfUEFUSHx2YWx1ZXxQUEM2MDNnbnUiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfFRPT0x8dmFsdWV8UFBDMzJkaWFiIiB2YWx1ZT0iZGlhYiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98VE9PTHx2YWx1ZXxQUEMzMmdudSIgdmFsdWU9ImdudSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98VE9PTHx2YWx1ZXxQUEM2MDNkaWFiIiB2YWx1ZT0iZGlhYiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98VE9PTHx2YWx1ZXxQUEM2MDNnbnUiIHZhbHVlPSJnbnUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfFZYX0NQVV9GQU1JTFl8dmFsdWV8UFBDMzJkaWFiIiB2YWx1ZT0icHBjIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xWWF9DUFVfRkFNSUxZfHZhbHVlfFBQQzMyZ251IiB2YWx1ZT0icHBjIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xWWF9DUFVfRkFNSUxZfHZhbHVlfFBQQzYwM2RpYWIiIHZhbHVlPSJwcGMiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfFZYX0NQVV9GQU1JTFl8dmFsdWV8UFBDNjAzZ251IiB2YWx1ZT0icHBjIi8+DQorICAgICAgICAgICAgPGxpc3RBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHMiPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSJDLUNvbXBpbGVyIi8+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9IkMrKy1Db21waWxlciIvPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSJMaW5rZXIiLz4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iUGFydGlhbCBJbWFnZSBMaW5rZXIiLz4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iTGlicmFyaWFuIi8+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9IkFzc2VtYmxlciIvPg0KKyAgICAgICAgICAgIDwvbGlzdEF0dHJpYnV0ZT4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfGNtZHxQUEMzMmRpYWIiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7OyVhc3NlbWJsZXJwcmVmaXglICQoVE9PTF9QQVRIKWRjYyAlRGVidWdNb2RlRmxhZ3MlICVUb29sRmxhZ3MlICQoQURERURfQ0ZMQUdTKSAlSW5jbHVkZXMlICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICVPdXRGaWxlJSAtYyAlSW5GaWxlJSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxBc3NlbWJsZXJ8Y21kfFBQQzMyZ251IiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OzslYXNzZW1ibGVycHJlZml4JSAkKFRPT0xfUEFUSCljY3BwYyAlRGVidWdNb2RlRmxhZ3MlICVUb29sRmxhZ3MlICQoQURERURfQ0ZMQUdTKSAlSW5jbHVkZXMlICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICVPdXRGaWxlJSAtYyAlSW5GaWxlJSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxBc3NlbWJsZXJ8Y21kfFBQQzYwM2RpYWIiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7OyVhc3NlbWJsZXJwcmVmaXglICQoVE9PTF9QQVRIKWRjYyAlRGVidWdNb2RlRmxhZ3MlICVUb29sRmxhZ3MlICQoQURERURfQ0ZMQUdTKSAlSW5jbHVkZXMlICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICVPdXRGaWxlJSAtYyAlSW5GaWxlJSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxBc3NlbWJsZXJ8Y21kfFBQQzYwM2dudSIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWFzc2VtYmxlcnByZWZpeCUgJChUT09MX1BBVEgpY2NwcGMgJURlYnVnTW9kZUZsYWdzJSAlVG9vbEZsYWdzJSAkKEFEREVEX0NGTEFHUykgJUluY2x1ZGVzJSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAlT3V0RmlsZSUgLWMgJUluRmlsZSUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfGRiZ0ZsYWdzfFBQQzMyZGlhYiIgdmFsdWU9Ii1nIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxkYmdGbGFnc3xQUEMzMmdudSIgdmFsdWU9Ii1nIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxkYmdGbGFnc3xQUEM2MDNkaWFiIiB2YWx1ZT0iLWciLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfGRiZ0ZsYWdzfFBQQzYwM2dudSIgdmFsdWU9Ii1nIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxkZXJpdmVkU2lnc3xQUEMzMmRpYWIiIHZhbHVlPSIqLm8iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfGRlcml2ZWRTaWdzfFBQQzMyZ251IiB2YWx1ZT0iKi5vIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxkZXJpdmVkU2lnc3xQUEM2MDNkaWFiIiB2YWx1ZT0iKi5vIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxkZXJpdmVkU2lnc3xQUEM2MDNnbnUiIHZhbHVlPSIqLm8iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfGZsYWdzfFBQQzMyZGlhYiIgdmFsdWU9IiQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWHByZXByb2Nlc3MtYXNzZW1ibHkgLVhjcHAtbm8tc3BhY2UgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxBc3NlbWJsZXJ8ZmxhZ3N8UFBDMzJnbnUiIHZhbHVlPSIkKENDX0FSQ0hfU1BFQykgLWFuc2kgICAteGFzc2VtYmxlci13aXRoLWNwcCAtTUQgLU1QIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxmbGFnc3xQUEM2MDNkaWFiIiB2YWx1ZT0iJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YcHJlcHJvY2Vzcy1hc3NlbWJseSAtWGNwcC1uby1zcGFjZSAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxmbGFnc3xQUEM2MDNnbnUiIHZhbHVlPSIkKENDX0FSQ0hfU1BFQykgLWFuc2kgICAteGFzc2VtYmxlci13aXRoLWNwcCAtTUQgLU1QIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxub25EYmdGbGFnc3xQUEMzMmRpYWIiIHZhbHVlPSItWE8gLVhzaXplLW9wdCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxBc3NlbWJsZXJ8bm9uRGJnRmxhZ3N8UFBDMzJnbnUiIHZhbHVlPSItTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxub25EYmdGbGFnc3xQUEM2MDNkaWFiIiB2YWx1ZT0iLVhPIC1Yc2l6ZS1vcHQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfG5vbkRiZ0ZsYWdzfFBQQzYwM2dudSIgdmFsdWU9Ii1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4iLz4NCisgICAgICAgICAgICA8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxvYmplY3QiIHZhbHVlPSJ0cnVlIi8+DQorICAgICAgICAgICAgPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxBc3NlbWJsZXJ8cGFzc0FibGUiIHZhbHVlPSJmYWxzZSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxBc3NlbWJsZXJ8c2lncyIgdmFsdWU9IioucyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8Y21kfFBQQzMyZGlhYiIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWNwcGNvbXBpbGVycHJlZml4JSAkKFRPT0xfUEFUSClkY2MgJURlYnVnTW9kZUZsYWdzJSAlVG9vbEZsYWdzJSAkKEFEREVEX0MrK0ZMQUdTKSAlSW5jbHVkZXMlICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICVPdXRGaWxlJSAtYyAlSW5GaWxlJSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8Y21kfFBQQzMyZ251IiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OzslY3BwY29tcGlsZXJwcmVmaXglICQoVE9PTF9QQVRIKWNjcHBjICVEZWJ1Z01vZGVGbGFncyUgJVRvb2xGbGFncyUgJChBRERFRF9DKytGTEFHUykgJUluY2x1ZGVzJSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAlT3V0RmlsZSUgLWMgJUluRmlsZSUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfGNtZHxQUEM2MDNkaWFiIiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OzslY3BwY29tcGlsZXJwcmVmaXglICQoVE9PTF9QQVRIKWRjYyAlRGVidWdNb2RlRmxhZ3MlICVUb29sRmxhZ3MlICQoQURERURfQysrRkxBR1MpICVJbmNsdWRlcyUgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gJU91dEZpbGUlIC1jICVJbkZpbGUlIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxjbWR8UFBDNjAzZ251IiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OzslY3BwY29tcGlsZXJwcmVmaXglICQoVE9PTF9QQVRIKWNjcHBjICVEZWJ1Z01vZGVGbGFncyUgJVRvb2xGbGFncyUgJChBRERFRF9DKytGTEFHUykgJUluY2x1ZGVzJSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAlT3V0RmlsZSUgLWMgJUluRmlsZSUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfGRiZ0ZsYWdzfFBQQzMyZGlhYiIgdmFsdWU9Ii1nIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxkYmdGbGFnc3xQUEMzMmdudSIgdmFsdWU9Ii1nIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxkYmdGbGFnc3xQUEM2MDNkaWFiIiB2YWx1ZT0iLWciLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfGRiZ0ZsYWdzfFBQQzYwM2dudSIgdmFsdWU9Ii1nIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxkZXJpdmVkU2lnc3xQUEMzMmRpYWIiIHZhbHVlPSIqLm8iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfGRlcml2ZWRTaWdzfFBQQzMyZ251IiB2YWx1ZT0iKi5vIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxkZXJpdmVkU2lnc3xQUEM2MDNkaWFiIiB2YWx1ZT0iKi5vIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxkZXJpdmVkU2lnc3xQUEM2MDNnbnUiIHZhbHVlPSIqLm8iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfGZsYWdzfFBQQzMyZGlhYiIgdmFsdWU9IiQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxmbGFnc3xQUEMzMmdudSIgdmFsdWU9IiQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8ZmxhZ3N8UFBDNjAzZGlhYiIgdmFsdWU9IiQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxmbGFnc3xQUEM2MDNnbnUiIHZhbHVlPSIkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgLW1sb25nY2FsbCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8bm9uRGJnRmxhZ3N8UFBDMzJkaWFiIiB2YWx1ZT0iLVhPIC1Yc2l6ZS1vcHQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfG5vbkRiZ0ZsYWdzfFBQQzMyZ251IiB2YWx1ZT0iLU8yIC1mc3RyZW5ndGgtcmVkdWNlIC1mbm8tYnVpbHRpbiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8bm9uRGJnRmxhZ3N8UFBDNjAzZGlhYiIgdmFsdWU9Ii1YTyAtWHNpemUtb3B0Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxub25EYmdGbGFnc3xQUEM2MDNnbnUiIHZhbHVlPSItTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluIi8+DQorICAgICAgICAgICAgPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8b2JqZWN0IiB2YWx1ZT0idHJ1ZSIvPg0KKyAgICAgICAgICAgIDxib29sZWFuQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfHBhc3NBYmxlIiB2YWx1ZT0iZmFsc2UiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfHNpZ3MiIHZhbHVlPSIqLmNwcDsqLkM7Ki5jeHg7Ki5jYyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfGNtZHxQUEMzMmRpYWIiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7OyVjY29tcGlsZXJwcmVmaXglICQoVE9PTF9QQVRIKWRjYyAlRGVidWdNb2RlRmxhZ3MlICVUb29sRmxhZ3MlICQoQURERURfQ0ZMQUdTKSAlSW5jbHVkZXMlICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICVPdXRGaWxlJSAtYyAlSW5GaWxlJSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfGNtZHxQUEMzMmdudSIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWNjb21waWxlcnByZWZpeCUgJChUT09MX1BBVEgpY2NwcGMgJURlYnVnTW9kZUZsYWdzJSAlVG9vbEZsYWdzJSAkKEFEREVEX0NGTEFHUykgJUluY2x1ZGVzJSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAlT3V0RmlsZSUgLWMgJUluRmlsZSUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxjbWR8UFBDNjAzZGlhYiIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWNjb21waWxlcnByZWZpeCUgJChUT09MX1BBVEgpZGNjICVEZWJ1Z01vZGVGbGFncyUgJVRvb2xGbGFncyUgJChBRERFRF9DRkxBR1MpICVJbmNsdWRlcyUgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gJU91dEZpbGUlIC1jICVJbkZpbGUlIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8Y21kfFBQQzYwM2dudSIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWNjb21waWxlcnByZWZpeCUgJChUT09MX1BBVEgpY2NwcGMgJURlYnVnTW9kZUZsYWdzJSAlVG9vbEZsYWdzJSAkKEFEREVEX0NGTEFHUykgJUluY2x1ZGVzJSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAlT3V0RmlsZSUgLWMgJUluRmlsZSUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxkYmdGbGFnc3xQUEMzMmRpYWIiIHZhbHVlPSItZyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfGRiZ0ZsYWdzfFBQQzMyZ251IiB2YWx1ZT0iLWciLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxkYmdGbGFnc3xQUEM2MDNkaWFiIiB2YWx1ZT0iLWciLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxkYmdGbGFnc3xQUEM2MDNnbnUiIHZhbHVlPSItZyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfGRlcml2ZWRTaWdzfFBQQzMyZGlhYiIgdmFsdWU9IioubyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfGRlcml2ZWRTaWdzfFBQQzMyZ251IiB2YWx1ZT0iKi5vIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8ZGVyaXZlZFNpZ3N8UFBDNjAzZGlhYiIgdmFsdWU9IioubyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfGRlcml2ZWRTaWdzfFBQQzYwM2dudSIgdmFsdWU9IioubyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfGZsYWdzfFBQQzMyZGlhYiIgdmFsdWU9IiQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8ZmxhZ3N8UFBDMzJnbnUiIHZhbHVlPSIkKENDX0FSQ0hfU1BFQykgLWFuc2kgIC1XYWxsICAtTUQgLU1QIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8ZmxhZ3N8UFBDNjAzZGlhYiIgdmFsdWU9IiQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8ZmxhZ3N8UFBDNjAzZ251IiB2YWx1ZT0iJChDQ19BUkNIX1NQRUMpIC1hbnNpICAtV2FsbCAgLU1EIC1NUCAtbWxvbmdjYWxsIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8bm9uRGJnRmxhZ3N8UFBDMzJkaWFiIiB2YWx1ZT0iLVhPIC1Yc2l6ZS1vcHQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxub25EYmdGbGFnc3xQUEMzMmdudSIgdmFsdWU9Ii1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxub25EYmdGbGFnc3xQUEM2MDNkaWFiIiB2YWx1ZT0iLVhPIC1Yc2l6ZS1vcHQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxub25EYmdGbGFnc3xQUEM2MDNnbnUiIHZhbHVlPSItTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluIi8+DQorICAgICAgICAgICAgPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfG9iamVjdCIgdmFsdWU9InRydWUiLz4NCisgICAgICAgICAgICA8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8cGFzc0FibGUiIHZhbHVlPSJmYWxzZSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfHNpZ3MiIHZhbHVlPSIqLmMiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufGNtZHxQUEMzMmRpYWIiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7OyVhcmNoaXZlcnByZWZpeCUgJChUT09MX1BBVEgpZGFyICVUb29sRmxhZ3MlICVPdXRGaWxlJSAlT2JqZWN0cyUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufGNtZHxQUEMzMmdudSIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWFyY2hpdmVycHJlZml4JSAkKFRPT0xfUEFUSClhcnBwYyAlVG9vbEZsYWdzJSAlT3V0RmlsZSUgJU9iamVjdHMlIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxjbWR8UFBDNjAzZGlhYiIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWFyY2hpdmVycHJlZml4JSAkKFRPT0xfUEFUSClkYXIgJVRvb2xGbGFncyUgJU91dEZpbGUlICVPYmplY3RzJSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58Y21kfFBQQzYwM2dudSIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWFyY2hpdmVycHJlZml4JSAkKFRPT0xfUEFUSClhcnBwYyAlVG9vbEZsYWdzJSAlT3V0RmlsZSUgJU9iamVjdHMlIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxkYmdGbGFnc3xQUEMzMmRpYWIiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufGRiZ0ZsYWdzfFBQQzMyZ251IiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxkYmdGbGFnc3xQUEM2MDNkaWFiIiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxkYmdGbGFnc3xQUEM2MDNnbnUiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufGRlcml2ZWRTaWdzfFBQQzMyZGlhYiIgdmFsdWU9IiouYSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58ZGVyaXZlZFNpZ3N8UFBDMzJnbnUiIHZhbHVlPSIqLmEiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufGRlcml2ZWRTaWdzfFBQQzYwM2RpYWIiIHZhbHVlPSIqLmEiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufGRlcml2ZWRTaWdzfFBQQzYwM2dudSIgdmFsdWU9IiouYSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58ZmxhZ3N8UFBDMzJkaWFiIiB2YWx1ZT0iY3J1cyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58ZmxhZ3N8UFBDMzJnbnUiIHZhbHVlPSJjcnVzIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxmbGFnc3xQUEM2MDNkaWFiIiB2YWx1ZT0iY3J1cyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58ZmxhZ3N8UFBDNjAzZ251IiB2YWx1ZT0iY3J1cyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58bm9uRGJnRmxhZ3N8UFBDMzJkaWFiIiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxub25EYmdGbGFnc3xQUEMzMmdudSIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58bm9uRGJnRmxhZ3N8UFBDNjAzZGlhYiIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58bm9uRGJnRmxhZ3N8UFBDNjAzZ251IiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58b2JqZWN0IiB2YWx1ZT0iZmFsc2UiLz4NCisgICAgICAgICAgICA8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxwYXNzQWJsZSIgdmFsdWU9InRydWUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufHNpZ3MiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfGNtZHxQUEMzMmRpYWIiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7O3JtIC1mICVPdXRGaWxlJTtkZHVtcCAtTmcgJU9iamVjdHMlICVMaWJyYXJpZXMlIHwgdGNsc2ggJChXSU5EX0JBU0UpL2hvc3QvcmVzb3VyY2UvaHV0aWxzL3RjbC9tdW5jaC50Y2wgLWMgcHBjICZndDsgJChPQkpfRElSKS9jdGR0LmM7JWNjb21waWxlcnByZWZpeCUgJChUT09MX1BBVEgpZGNjICVEZWJ1Z01vZGVGbGFncyUgJChDQ19BUkNIX1NQRUMpIC1YZG9sbGFyLWluLWlkZW50IC1YZm9yY2UtZGVjbGFyYXRpb25zICQoQURERURfQ0ZMQUdTKSAlSW5jbHVkZXMlICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpICAtbyAkKE9CSl9ESVIpL2N0ZHQubyAtYyAkKE9CSl9ESVIpL2N0ZHQuYzslbGlua2VycHJlZml4JSAkKFRPT0xfUEFUSClkbGQgLXRQUENGSDp2eHdvcmtzNjMgLVggLXI1ICVUb29sRmxhZ3MlIC1vICVPdXRGaWxlJSAkKE9CSl9ESVIpL2N0ZHQubyAlT2JqZWN0cyUgJUxpYnJhcmllcyUgJChMSUJQQVRIKSAkKExJQlMpICAkKEFEREVEX0xJQlBBVEgpICQoQURERURfTElCUykgJmFtcDsmYW1wOyBpZiBbICZxdW90OyQoRVhQQU5EX0RCRykmcXVvdDsgPSAmcXVvdDsxJnF1b3Q7IF07IHRoZW4gcGxpbmsgJnF1b3Q7JEAmcXVvdDs7ZmkiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfGNtZHxQUEMzMmdudSIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7cm0gLWYgJU91dEZpbGUlO25tcHBjICVPYmplY3RzJSAlTGlicmFyaWVzJSB8IHRjbHNoICQoV0lORF9CQVNFKS9ob3N0L3Jlc291cmNlL2h1dGlscy90Y2wvbXVuY2gudGNsIC1jIHBwYyAmZ3Q7ICQoT0JKX0RJUikvY3RkdC5jOyVjY29tcGlsZXJwcmVmaXglICQoVE9PTF9QQVRIKWNjcHBjICVEZWJ1Z01vZGVGbGFncyUgJChDQ19BUkNIX1NQRUMpIC1mZG9sbGFycy1pbi1pZGVudGlmaWVycyAtV2FsbCAkKEFEREVEX0NGTEFHUykgJUluY2x1ZGVzJSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAgLW8gJChPQkpfRElSKS9jdGR0Lm8gLWMgJChPQkpfRElSKS9jdGR0LmM7JWxpbmtlcnByZWZpeCUgJChUT09MX1BBVEgpY2NwcGMgLXIgLW5vc3RkbGliIC1XbCwtWCAlVG9vbEZsYWdzJSAtbyAlT3V0RmlsZSUgJChPQkpfRElSKS9jdGR0Lm8gJU9iamVjdHMlICVMaWJyYXJpZXMlICQoTElCUEFUSCkgJChMSUJTKSAgJChBRERFRF9MSUJQQVRIKSAkKEFEREVEX0xJQlMpICZhbXA7JmFtcDsgaWYgWyAmcXVvdDskKEVYUEFORF9EQkcpJnF1b3Q7ID0gJnF1b3Q7MSZxdW90OyBdOyB0aGVuIHBsaW5rICZxdW90OyRAJnF1b3Q7O2ZpIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxjbWR8UFBDNjAzZGlhYiIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7cm0gLWYgJU91dEZpbGUlO2RkdW1wIC1OZyAlT2JqZWN0cyUgJUxpYnJhcmllcyUgfCB0Y2xzaCAkKFdJTkRfQkFTRSkvaG9zdC9yZXNvdXJjZS9odXRpbHMvdGNsL211bmNoLnRjbCAtYyBwcGMgJmd0OyAkKE9CSl9ESVIpL2N0ZHQuYzslY2NvbXBpbGVycHJlZml4JSAkKFRPT0xfUEFUSClkY2MgJURlYnVnTW9kZUZsYWdzJSAkKENDX0FSQ0hfU1BFQykgLVhkb2xsYXItaW4taWRlbnQgLVhmb3JjZS1kZWNsYXJhdGlvbnMgJChBRERFRF9DRkxBR1MpICVJbmNsdWRlcyUgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgIC1vICQoT0JKX0RJUikvY3RkdC5vIC1jICQoT0JKX0RJUikvY3RkdC5jOyVsaW5rZXJwcmVmaXglICQoVE9PTF9QQVRIKWRsZCAtdFBQQzYwM0ZIOnZ4d29ya3M2MyAtWCAtcjUgJVRvb2xGbGFncyUgLW8gJU91dEZpbGUlICQoT0JKX0RJUikvY3RkdC5vICVPYmplY3RzJSAlTGlicmFyaWVzJSAkKExJQlBBVEgpICQoTElCUykgICQoQURERURfTElCUEFUSCkgJChBRERFRF9MSUJTKSAmYW1wOyZhbXA7IGlmIFsgJnF1b3Q7JChFWFBBTkRfREJHKSZxdW90OyA9ICZxdW90OzEmcXVvdDsgXTsgdGhlbiBwbGluayAmcXVvdDskQCZxdW90OztmaSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8Y21kfFBQQzYwM2dudSIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7cm0gLWYgJU91dEZpbGUlO25tcHBjICVPYmplY3RzJSAlTGlicmFyaWVzJSB8IHRjbHNoICQoV0lORF9CQVNFKS9ob3N0L3Jlc291cmNlL2h1dGlscy90Y2wvbXVuY2gudGNsIC1jIHBwYyAmZ3Q7ICQoT0JKX0RJUikvY3RkdC5jOyVjY29tcGlsZXJwcmVmaXglICQoVE9PTF9QQVRIKWNjcHBjICVEZWJ1Z01vZGVGbGFncyUgJChDQ19BUkNIX1NQRUMpIC1mZG9sbGFycy1pbi1pZGVudGlmaWVycyAtV2FsbCAkKEFEREVEX0NGTEFHUykgJUluY2x1ZGVzJSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAgLW8gJChPQkpfRElSKS9jdGR0Lm8gLWMgJChPQkpfRElSKS9jdGR0LmM7JWxpbmtlcnByZWZpeCUgJChUT09MX1BBVEgpY2NwcGMgLXIgLW5vc3RkbGliIC1XbCwtWCAlVG9vbEZsYWdzJSAtbyAlT3V0RmlsZSUgJChPQkpfRElSKS9jdGR0Lm8gJU9iamVjdHMlICVMaWJyYXJpZXMlICQoTElCUEFUSCkgJChMSUJTKSAgJChBRERFRF9MSUJQQVRIKSAkKEFEREVEX0xJQlMpICZhbXA7JmFtcDsgaWYgWyAmcXVvdDskKEVYUEFORF9EQkcpJnF1b3Q7ID0gJnF1b3Q7MSZxdW90OyBdOyB0aGVuIHBsaW5rICZxdW90OyRAJnF1b3Q7O2ZpIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxkYmdGbGFnc3xQUEMzMmRpYWIiIHZhbHVlPSItZyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8ZGJnRmxhZ3N8UFBDMzJnbnUiIHZhbHVlPSItZyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8ZGJnRmxhZ3N8UFBDNjAzZGlhYiIgdmFsdWU9Ii1nIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxkYmdGbGFnc3xQUEM2MDNnbnUiIHZhbHVlPSItZyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8ZGVyaXZlZFNpZ3N8UFBDMzJkaWFiIiB2YWx1ZT0iKi5vdXQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfGRlcml2ZWRTaWdzfFBQQzMyZ251IiB2YWx1ZT0iKi5vdXQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfGRlcml2ZWRTaWdzfFBQQzYwM2RpYWIiIHZhbHVlPSIqLm91dCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8ZGVyaXZlZFNpZ3N8UFBDNjAzZ251IiB2YWx1ZT0iKi5vdXQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfGZsYWdzfFBQQzMyZGlhYiIgdmFsdWU9Ii1yNCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8ZmxhZ3N8UFBDMzJnbnUiIHZhbHVlPSItVCAkKFdJTkRfQkFTRSkvdGFyZ2V0L2gvdG9vbC9nbnUvbGRzY3JpcHRzL2xpbmsuT1VUIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxmbGFnc3xQUEM2MDNkaWFiIiB2YWx1ZT0iLXI0Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxmbGFnc3xQUEM2MDNnbnUiIHZhbHVlPSItVCAkKFdJTkRfQkFTRSkvdGFyZ2V0L2gvdG9vbC9nbnUvbGRzY3JpcHRzL2xpbmsuT1VUIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxub25EYmdGbGFnc3xQUEMzMmRpYWIiIHZhbHVlPSItWE8gLVhzaXplLW9wdCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8bm9uRGJnRmxhZ3N8UFBDMzJnbnUiIHZhbHVlPSItTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxub25EYmdGbGFnc3xQUEM2MDNkaWFiIiB2YWx1ZT0iLVhPIC1Yc2l6ZS1vcHQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfG5vbkRiZ0ZsYWdzfFBQQzYwM2dudSIgdmFsdWU9Ii1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4iLz4NCisgICAgICAgICAgICA8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxvYmplY3QiIHZhbHVlPSJmYWxzZSIvPg0KKyAgICAgICAgICAgIDxib29sZWFuQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfHBhc3NBYmxlIiB2YWx1ZT0iZmFsc2UiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfHNpZ3MiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8Y21kfFBQQzMyZGlhYiIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWxpbmtlcnByZWZpeCUgJChUT09MX1BBVEgpZGxkIC10UFBDRkg6dnh3b3JrczYzIC1YIC1yNSAlVG9vbEZsYWdzJSAtbyAlT3V0RmlsZSUgJU9iamVjdHMlICQoTElCUEFUSCkgJChMSUJTKSAkKEFEREVEX0xJQlBBVEgpICQoQURERURfTElCUykgICZhbXA7JmFtcDsgaWYgWyAmcXVvdDskKEVYUEFORF9EQkcpJnF1b3Q7ID0gJnF1b3Q7MSZxdW90OyBdOyB0aGVuIHBsaW5rICZxdW90OyRAJnF1b3Q7O2ZpIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfGNtZHxQUEMzMmdudSIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWxpbmtlcnByZWZpeCUgJChUT09MX1BBVEgpY2NwcGMgLXIgLW5vc3RkbGliIC1XbCwtWCAlVG9vbEZsYWdzJSAtbyAlT3V0RmlsZSUgJU9iamVjdHMlICQoTElCUEFUSCkgJChMSUJTKSAkKEFEREVEX0xJQlBBVEgpICQoQURERURfTElCUykgICZhbXA7JmFtcDsgaWYgWyAmcXVvdDskKEVYUEFORF9EQkcpJnF1b3Q7ID0gJnF1b3Q7MSZxdW90OyBdOyB0aGVuIHBsaW5rICZxdW90OyRAJnF1b3Q7O2ZpIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfGNtZHxQUEM2MDNkaWFiIiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OzslbGlua2VycHJlZml4JSAkKFRPT0xfUEFUSClkbGQgLXRQUEM2MDNGSDp2eHdvcmtzNjMgLVggLXI1ICVUb29sRmxhZ3MlIC1vICVPdXRGaWxlJSAlT2JqZWN0cyUgJChMSUJQQVRIKSAkKExJQlMpICQoQURERURfTElCUEFUSCkgJChBRERFRF9MSUJTKSAgJmFtcDsmYW1wOyBpZiBbICZxdW90OyQoRVhQQU5EX0RCRykmcXVvdDsgPSAmcXVvdDsxJnF1b3Q7IF07IHRoZW4gcGxpbmsgJnF1b3Q7JEAmcXVvdDs7ZmkiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8Y21kfFBQQzYwM2dudSIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWxpbmtlcnByZWZpeCUgJChUT09MX1BBVEgpY2NwcGMgLXIgLW5vc3RkbGliIC1XbCwtWCAlVG9vbEZsYWdzJSAtbyAlT3V0RmlsZSUgJU9iamVjdHMlICQoTElCUEFUSCkgJChMSUJTKSAkKEFEREVEX0xJQlBBVEgpICQoQURERURfTElCUykgICZhbXA7JmFtcDsgaWYgWyAmcXVvdDskKEVYUEFORF9EQkcpJnF1b3Q7ID0gJnF1b3Q7MSZxdW90OyBdOyB0aGVuIHBsaW5rICZxdW90OyRAJnF1b3Q7O2ZpIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfGRiZ0ZsYWdzfFBQQzMyZGlhYiIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxkYmdGbGFnc3xQUEMzMmdudSIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxkYmdGbGFnc3xQUEM2MDNkaWFiIiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfGRiZ0ZsYWdzfFBQQzYwM2dudSIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxkZXJpdmVkU2lnc3xQUEMzMmRpYWIiIHZhbHVlPSIqLm8iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8ZGVyaXZlZFNpZ3N8UFBDMzJnbnUiIHZhbHVlPSIqLm8iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8ZGVyaXZlZFNpZ3N8UFBDNjAzZGlhYiIgdmFsdWU9IioubyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxkZXJpdmVkU2lnc3xQUEM2MDNnbnUiIHZhbHVlPSIqLm8iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8ZmxhZ3N8UFBDMzJkaWFiIiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfGZsYWdzfFBQQzMyZ251IiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfGZsYWdzfFBQQzYwM2RpYWIiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8ZmxhZ3N8UFBDNjAzZ251IiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfG5vbkRiZ0ZsYWdzfFBQQzMyZGlhYiIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxub25EYmdGbGFnc3xQUEMzMmdudSIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxub25EYmdGbGFnc3xQUEM2MDNkaWFiIiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfG5vbkRiZ0ZsYWdzfFBQQzYwM2dudSIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxib29sZWFuQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8b2JqZWN0IiB2YWx1ZT0iZmFsc2UiLz4NCisgICAgICAgICAgICA8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfHBhc3NBYmxlIiB2YWx1ZT0idHJ1ZSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxzaWdzIiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xjbWQiIHZhbHVlPSIlbWFrZXByZWZpeCUgbWFrZSAtLW5vLXByaW50LWRpcmVjdG9yeSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98ZGVmYXVsdFNwZWMiIHZhbHVlPSJQUEM2MDNnbnUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfHJlZGlyRGlyfFBQQzMyZGlhYiIgdmFsdWU9IlBQQzMyZGlhYiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98cmVkaXJEaXJ8UFBDMzJnbnUiIHZhbHVlPSJQUEMzMmdudSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98cmVkaXJEaXJ8UFBDNjAzZGlhYiIgdmFsdWU9IlBQQzYwM2RpYWIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfHJlZGlyRGlyfFBQQzYwM2dudSIgdmFsdWU9IlBQQzYwM2dudSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98cmVkaXJSb290IiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPGxpc3RBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98c3BlY3MiPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSJQUEMzMmRpYWIiLz4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iUFBDMzJnbnUiLz4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iUFBDNjAzZGlhYiIvPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSJQUEM2MDNnbnUiLz4NCisgICAgICAgICAgICA8L2xpc3RBdHRyaWJ1dGU+DQorICAgICAgICAgICAgPGludEF0dHJpYnV0ZSBrZXk9IkJ1aWxkU3VwcG9ydEVuYWJsZWQiIHZhbHVlPSIxIi8+DQorICAgICAgICAgICAgPGxpc3RBdHRyaWJ1dGUga2V5PSJCdWlsZFN1cHBvcnRGb3JCdWlsZFNwZWNzIj4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iUFBDNjAzZ251Ii8+DQorICAgICAgICAgICAgPC9saXN0QXR0cmlidXRlPg0KKyAgICAgICAgICAgIDxib29sZWFuQXR0cmlidXRlIGtleT0iQnVpbGRUYXJnZXRDZW50cmljIiB2YWx1ZT0idHJ1ZSIvPg0KKyAgICAgICAgPC9tYXBBdHRyaWJ1dGU+DQorICAgIDwvYXR0cmlidXRlcz4NCisgICAgPGJ1aWxkdGFyZ2V0cz4NCisgICAgICAgIDxidWlsZHRhcmdldCBidWlsZHRvb2w9IkxpbmtlciIgbmFtZT0iRHJpdmVyU3RhdGlvbkxDRFRleHQiIHBhc3NlZD0iZmFsc2UiIHRhcmdldG5hbWU9IkRyaXZlclN0YXRpb25MQ0RUZXh0Ij4NCisgICAgICAgICAgICA8Y29udGVudHM+DQorICAgICAgICAgICAgICAgIDxidWlsZHRhcmdldHJlZmVyZW5jZSBuYW1lPSIvRHJpdmVyU3RhdGlvbkxDRFRleHQvRHJpdmVyU3RhdGlvbkxDRFRleHRfcGFydGlhbEltYWdlIi8+DQorICAgICAgICAgICAgPC9jb250ZW50cz4NCisgICAgICAgIDwvYnVpbGR0YXJnZXQ+DQorICAgICAgICA8YnVpbGR0YXJnZXQgYnVpbGR0b29sPSJQYXJ0aWFsIEltYWdlIExpbmtlciIgbmFtZT0iRHJpdmVyU3RhdGlvbkxDRFRleHRfcGFydGlhbEltYWdlIiBwYXNzZWQ9InRydWUiIHRhcmdldG5hbWU9IkRyaXZlclN0YXRpb25MQ0RUZXh0X3BhcnRpYWxJbWFnZSI+DQorICAgICAgICAgICAgPGNvbnRlbnRzPg0KKyAgICAgICAgICAgICAgICA8Zm9sZGVyIG5hbWU9Ii9Ecml2ZXJTdGF0aW9uTENEVGV4dCIgcmVjdXJzaXZlPSJ0cnVlIi8+DQorICAgICAgICAgICAgPC9jb250ZW50cz4NCisgICAgICAgIDwvYnVpbGR0YXJnZXQ+DQorICAgIDwvYnVpbGR0YXJnZXRzPg0KKzwvd3J4bWw+DQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvdnh3b3Jrcy02LjMvdGFyZ2V0L3NyYy9kZW1vL0RyaXZlclN0YXRpb25MQ0RUZXh0L0RyaXZlclN0YXRpb25MQ0RUZXh0RXhhbXBsZS5jcHAgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vRHJpdmVyU3RhdGlvbkxDRFRleHQvRHJpdmVyU3RhdGlvbkxDRFRleHRFeGFtcGxlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNGQ3YTg0Ci0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvdnh3b3Jrcy02LjMvdGFyZ2V0L3NyYy9kZW1vL0RyaXZlclN0YXRpb25MQ0RUZXh0L0RyaXZlclN0YXRpb25MQ0RUZXh0RXhhbXBsZS5jcHAKQEAgLTAsMCArMSwyOCBAQAorDQorI2luY2x1ZGUgIldQSUxpYi5oIg0KKw0KKy8qKg0KKyAqIFRoaXMgZXhhbXBsZSBzaG93cyBob3cgeW91IGNhbiB3cml0ZSB0ZXh0IHRvIHRoZSBMQ0Qgb24gdGhlIGRyaXZlciBzdGF0aW9uLg0KKyAqLyANCitjbGFzcyBEcml2ZXJTdGF0aW9uTENEVGV4dEV4YW1wbGUgOiBwdWJsaWMgU2ltcGxlUm9ib3QNCit7DQorDQorcHVibGljOg0KKwlEcml2ZXJTdGF0aW9uTENEVGV4dEV4YW1wbGUodm9pZCkNCisJew0KKwl9DQorDQorCXZvaWQgUm9ib3RNYWluKCkNCisJew0KKwkJRHJpdmVyU3RhdGlvbkxDRCAqZHNMQ0QgPSBEcml2ZXJTdGF0aW9uTENEOjpHZXRJbnN0YW5jZSgpOw0KKw0KKwkJZHNMQ0QtPlByaW50ZihEcml2ZXJTdGF0aW9uTENEOjprVXNlcl9MaW5lMSwgMSwgIkhlbGxvIFdvcmxkIik7DQorCQlkc0xDRC0+UHJpbnRmKERyaXZlclN0YXRpb25MQ0Q6OmtVc2VyX0xpbmUxLCAxMSwgIlRpbWU6ICU0LjFmIiwgR2V0Q2xvY2soKSk7DQorCQlkc0xDRC0+VXBkYXRlTENEKCk7DQorDQorCQlXYWl0KDAuMSk7DQorCX0NCit9Ow0KKw0KK1NUQVJUX1JPQk9UX0NMQVNTKERyaXZlclN0YXRpb25MQ0RUZXh0RXhhbXBsZSk7DQorDQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvdnh3b3Jrcy02LjMvdGFyZ2V0L3NyYy9kZW1vL0RyaXZlclN0YXRpb25MQ0RUZXh0L3NhbXBsZS5wcm9wZXJ0aWVzIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvdnh3b3Jrcy02LjMvdGFyZ2V0L3NyYy9kZW1vL0RyaXZlclN0YXRpb25MQ0RUZXh0L3NhbXBsZS5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmYzg5NWUKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vRHJpdmVyU3RhdGlvbkxDRFRleHQvc2FtcGxlLnByb3BlcnRpZXMKQEAgLTAsMCArMSwyIEBACitwcm9qZWN0LnR5cGU9RG93bmxvYWRhYmxlS2VybmVsTW9kdWxlUHJvamVjdA0KK3BsYXRmb3JtLmlkPVZ4V29ya3MNCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vRHJpdmVyU3RhdGlvbkxDRFRleHQvc2FtcGxlLnR4dCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9Ecml2ZXJTdGF0aW9uTENEVGV4dC9zYW1wbGUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlZDljNTMKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vRHJpdmVyU3RhdGlvbkxDRFRleHQvc2FtcGxlLnR4dApAQCAtMCwwICsxLDUgQEAKK0ZSQyBEcml2ZXIgU3RhdGlvbiBMQ0QgVGV4dA0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorDQorVGhpcyBwcm9ncmFtIGlzIGEgc2ltcGxlIGV4YW1wbGUgcHJvZ3JhbSB0aGF0IGltcGxlbWVudHMNCitwcmludGluZyB0ZXh0IHRvIHlvdXIgRHJpdmVyIFN0YXRpb24gTENELg0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9HeXJvU2FtcGxlLy5jcHJvamVjdCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9HeXJvU2FtcGxlLy5jcHJvamVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NWEyNzM1Ci0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvdnh3b3Jrcy02LjMvdGFyZ2V0L3NyYy9kZW1vL0d5cm9TYW1wbGUvLmNwcm9qZWN0CkBAIC0wLDAgKzEsMjkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQorPD9maWxlVmVyc2lvbiA0LjAuMD8+DQorDQorPGNwcm9qZWN0Pg0KKzxzdG9yYWdlTW9kdWxlIG1vZHVsZUlkPSJvcmcuZWNsaXBzZS5jZHQuY29yZS5zZXR0aW5ncyI+DQorPGNjb25maWd1cmF0aW9uIGlkPSJvcmcuZWNsaXBzZS5jZHQuY29yZS5kZWZhdWx0LmNvbmZpZy4xMDg2MDE2NjIyIj4NCis8c3RvcmFnZU1vZHVsZSBidWlsZFN5c3RlbUlkPSJvcmcuZWNsaXBzZS5jZHQuY29yZS5kZWZhdWx0Q29uZmlnRGF0YVByb3ZpZGVyIiBpZD0ib3JnLmVjbGlwc2UuY2R0LmNvcmUuZGVmYXVsdC5jb25maWcuMTA4NjAxNjYyMiIgbW9kdWxlSWQ9Im9yZy5lY2xpcHNlLmNkdC5jb3JlLnNldHRpbmdzIiBuYW1lPSJDb25maWd1cmF0aW9uIj4NCis8ZXh0ZXJuYWxTZXR0aW5ncy8+DQorPGV4dGVuc2lvbnM+DQorPGV4dGVuc2lvbiBpZD0iY29tLndpbmRyaXZlci5pZGUuY29yZS5XUlNjYW5uZXJJbmZvUHJvdmlkZXIiIHBvaW50PSJvcmcuZWNsaXBzZS5jZHQuY29yZS5TY2FubmVySW5mb1Byb3ZpZGVyIi8+DQorPGV4dGVuc2lvbiBpZD0iY29tLndpbmRyaXZlci5pZGUuY29yZS5XUkVsZlBhcnNlclZ4V29ya3MiIHBvaW50PSJvcmcuZWNsaXBzZS5jZHQuY29yZS5CaW5hcnlQYXJzZXIiLz4NCis8ZXh0ZW5zaW9uIGlkPSJvcmcuZWNsaXBzZS5jZHQuY29yZS5HTlVfRUxGIiBwb2ludD0ib3JnLmVjbGlwc2UuY2R0LmNvcmUuQmluYXJ5UGFyc2VyIi8+DQorPC9leHRlbnNpb25zPg0KKzwvc3RvcmFnZU1vZHVsZT4NCis8c3RvcmFnZU1vZHVsZSBtb2R1bGVJZD0ib3JnLmVjbGlwc2UuY2R0LmNvcmUuZXh0ZXJuYWxTZXR0aW5ncyIvPg0KKzxzdG9yYWdlTW9kdWxlIG1vZHVsZUlkPSJvcmcuZWNsaXBzZS5jZHQuY29yZS5wYXRoZW50cnkiPg0KKzxwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSIiLz4NCis8cGF0aGVudHJ5IGtpbmQ9Im91dCIgcGF0aD0iIi8+DQorPHBhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9ImNvbS53aW5kcml2ZXIuaWRlLmNvcmUuV1JfQ09OVEFJTkVSIi8+DQorPHBhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9ImNvbS53aW5kcml2ZXIuaWRlLmNvcmUuYnVpbGQubW9kZWwuV1JfVVNFUkRFRklORURfQ09OVEFJTkVSIi8+DQorPC9zdG9yYWdlTW9kdWxlPg0KKzxzdG9yYWdlTW9kdWxlIG1vZHVsZUlkPSJzY2FubmVyQ29uZmlndXJhdGlvbiIvPg0KKzxzdG9yYWdlTW9kdWxlIG1vZHVsZUlkPSJ1c2VyZGVmaW5lZENvbnRhaW5lciI+DQorPGluZGV4QWxsRmlsZXMgdmFsdWU9ImZhbHNlIi8+DQorPGluaXRpYWxpemVkIHZhbHVlPSJ0cnVlIi8+DQorPC9zdG9yYWdlTW9kdWxlPg0KKzwvY2NvbmZpZ3VyYXRpb24+DQorPC9zdG9yYWdlTW9kdWxlPg0KKzwvY3Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvdnh3b3Jrcy02LjMvdGFyZ2V0L3NyYy9kZW1vL0d5cm9TYW1wbGUvLnByb2plY3QgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vR3lyb1NhbXBsZS8ucHJvamVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mY2Y0YmY5Ci0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvdnh3b3Jrcy02LjMvdGFyZ2V0L3NyYy9kZW1vL0d5cm9TYW1wbGUvLnByb2plY3QKQEAgLTAsMCArMSwyMCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCis8cHJvamVjdERlc2NyaXB0aW9uPg0KKwk8bmFtZT5HeXJvU2FtcGxlPC9uYW1lPg0KKwk8Y29tbWVudD48L2NvbW1lbnQ+DQorCTxwcm9qZWN0cz4NCisJPC9wcm9qZWN0cz4NCisJPGJ1aWxkU3BlYz4NCisJCTxidWlsZENvbW1hbmQ+DQorCQkJPG5hbWU+Y29tLndpbmRyaXZlci5pZGUuY29yZS53cmJ1aWxkZXI8L25hbWU+DQorCQkJPGFyZ3VtZW50cz4NCisJCQk8L2FyZ3VtZW50cz4NCisJCTwvYnVpbGRDb21tYW5kPg0KKwk8L2J1aWxkU3BlYz4NCisJPG5hdHVyZXM+DQorCQk8bmF0dXJlPmNvbS53aW5kcml2ZXIuaWRlLmNvcmUud3JuYXR1cmU8L25hdHVyZT4NCisJCTxuYXR1cmU+Y29tLndpbmRyaXZlci5pZGUuY29yZS53cmNvcmVuYXR1cmU8L25hdHVyZT4NCisJCTxuYXR1cmU+b3JnLmVjbGlwc2UuY2R0LmNvcmUuY25hdHVyZTwvbmF0dXJlPg0KKwkJPG5hdHVyZT5vcmcuZWNsaXBzZS5jZHQuY29yZS5jY25hdHVyZTwvbmF0dXJlPg0KKwk8L25hdHVyZXM+DQorPC9wcm9qZWN0RGVzY3JpcHRpb24+DQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvdnh3b3Jrcy02LjMvdGFyZ2V0L3NyYy9kZW1vL0d5cm9TYW1wbGUvLndybWFrZWZpbGUgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vR3lyb1NhbXBsZS8ud3JtYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMWRkN2Y4Ci0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvdnh3b3Jrcy02LjMvdGFyZ2V0L3NyYy9kZW1vL0d5cm9TYW1wbGUvLndybWFrZWZpbGUKQEAgLTAsMCArMSw0OCBAQAorIyBUaGUgZmlsZSAiLndybWFrZWZpbGUiIGlzIHRoZSB0ZW1wbGF0ZSB1c2VkIGJ5IHRoZSBXaW5kIFJpdmVyIFdvcmtiZW5jaCB0bw0KKyMgZ2VuZXJhdGUgdGhlIG1ha2VmaWxlcyBvZiB0aGlzIHByb2plY3QuIEFkZCB1c2VyLXNwZWNpZmljIGJ1aWxkIHRhcmdldHMgYW5kDQorIyBtYWtlIHJ1bGVzIG9ubHkoISkgaW4gdGhpcyBwcm9qZWN0J3MgIi53cm1ha2VmaWxlIiBmaWxlLiBUaGVzZSB3aWxsIHRoZW4gYmUNCisjIGF1dG9tYXRpY2FsbHkgZHVtcGVkIGludG8gdGhlIG1ha2VmaWxlcy4NCisNCitXSU5EX0hPTUUgOj0gJChzdWJzdCBcLC8sJChXSU5EX0hPTUUpKQ0KK1dJTkRfQkFTRSA6PSAkKHN1YnN0IFwsLywkKFdJTkRfQkFTRSkpDQorV0lORF9VU1IgOj0gJChzdWJzdCBcLC8sJChXSU5EX1VTUikpDQorDQorYWxsIDogcHJlX2J1aWxkIG1haW5fYWxsIHBvc3RfYnVpbGQNCisNCitfY2xlYW4gOjoNCisJQGVjaG8gIm1ha2U6IHJlbW92aW5nIHRhcmdldHMgYW5kIG9iamVjdHMgb2YgYHB3ZGAiDQorDQorJUlERV9HRU5FUkFURUQlDQorDQorLWluY2x1ZGUgJChQUkpfUk9PVF9ESVIpLyoubWFrZWZpbGUNCisNCistaW5jbHVkZSAqLm1ha2VmaWxlDQorDQorbWFpbl9hbGwgOiBleHRlcm5hbF9idWlsZCAkKFBST0pFQ1RfVEFSR0VUUykNCisJQGVjaG8gIm1ha2U6IGJ1aWx0IHRhcmdldHMgb2YgYHB3ZGAiDQorDQorIyBlbnRyeSBwb2ludCBmb3IgZXh0ZW5kaW5nIHRoZSBidWlsZA0KK2V4dGVybmFsX2J1aWxkIDo6DQorCUBlY2hvICIiDQorDQorIyBtYWluIGVudHJ5IHBvaW50IGZvciBwcmUgcHJvY2Vzc2luZyBwcmlvciB0byB0aGUgYnVpbGQNCitwcmVfYnVpbGQgOjogJChQUkVfQlVJTERfU1RFUCkgZ2VuZXJhdGVfc291cmNlcw0KKwlAZWNobyAiIg0KKw0KKyMgZW50cnkgcG9pbnQgZm9yIGdlbmVyYXRpbmcgc291cmNlcyBwcmlvciB0byB0aGUgYnVpbGQNCitnZW5lcmF0ZV9zb3VyY2VzIDo6DQorCUBlY2hvICIiDQorDQorIyBtYWluIGVudHJ5IHBvaW50IGZvciBwb3N0IHByb2Nlc3NpbmcgYWZ0ZXIgdGhlIGJ1aWxkDQorcG9zdF9idWlsZCA6OiAkKFBPU1RfQlVJTERfU1RFUCkgZGVwbG95X291dHB1dA0KKwlAZWNobyAiIg0KKw0KKyMgZW50cnkgcG9pbnQgZm9yIGRlcGxveWluZyBvdXRwdXQgYWZ0ZXIgdGhlIGJ1aWxkDQorZGVwbG95X291dHB1dCA6Og0KKwlAZWNobyAiIg0KKw0KK2NsZWFuIDo6IGV4dGVybmFsX2NsZWFuICQoQ0xFQU5fU1RFUCkgX2NsZWFuDQorDQorIyBlbnRyeSBwb2ludCBmb3IgZXh0ZW5kaW5nIHRoZSBidWlsZCBjbGVhbg0KK2V4dGVybmFsX2NsZWFuIDo6DQorCUBlY2hvICIiDQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvdnh3b3Jrcy02LjMvdGFyZ2V0L3NyYy9kZW1vL0d5cm9TYW1wbGUvLndycHJvamVjdCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9HeXJvU2FtcGxlLy53cnByb2plY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQzYzVmZQotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9HeXJvU2FtcGxlLy53cnByb2plY3QKQEAgLTAsMCArMSwyNTQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQorPHdyeG1sPg0KKyAgICA8cHJvcGVydGllcyBwbGF0Zm9ybT0iVnhXb3JrcyIgcGxhdGZvcm1fbmFtZT0idnh3b3Jrcy02LjMiIHJvb3Q9IjEiIHR5cGU9IkRvd25sb2FkYWJsZUtlcm5lbE1vZHVsZVByb2plY3QiLz4NCisgICAgPGF0dHJpYnV0ZXM+DQorICAgICAgICA8bWFwQXR0cmlidXRlPg0KKyAgICAgICAgICAgIDxsaXN0QXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfEdsb2JhbE1hY3JvcyI+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9IlBST0pFQ1RfVFlQRSIvPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSJERUZJTkVTIi8+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9IkVYUEFORF9EQkciLz4NCisgICAgICAgICAgICA8L2xpc3RBdHRyaWJ1dGU+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xHbG9iYWxNYWNyb3xERUZJTkVTIiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xHbG9iYWxNYWNyb3xFWFBBTkRfREJHIiB2YWx1ZT0iMCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98R2xvYmFsTWFjcm98UFJPSkVDVF9UWVBFIiB2YWx1ZT0iREtNIi8+DQorICAgICAgICAgICAgPGxpc3RBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98SW5jbHxQUEMzMmRpYWIiPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSItSSQoV0lORF9CQVNFKS90YXJnZXQvaCIvPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSItSSQoV0lORF9CQVNFKS90YXJnZXQvaC93cm4vY29yZWlwIi8+DQorICAgICAgICAgICAgPC9saXN0QXR0cmlidXRlPg0KKyAgICAgICAgICAgIDxsaXN0QXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfEluY2x8UFBDMzJnbnUiPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSItSSQoV0lORF9CQVNFKS90YXJnZXQvaCIvPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSItSSQoV0lORF9CQVNFKS90YXJnZXQvaC93cm4vY29yZWlwIi8+DQorICAgICAgICAgICAgPC9saXN0QXR0cmlidXRlPg0KKyAgICAgICAgICAgIDxsaXN0QXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfEluY2x8UFBDNjAzZGlhYiI+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9Ii1JJChXSU5EX0JBU0UpL3RhcmdldC9oIi8+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9Ii1JJChXSU5EX0JBU0UpL3RhcmdldC9oL3dybi9jb3JlaXAiLz4NCisgICAgICAgICAgICA8L2xpc3RBdHRyaWJ1dGU+DQorICAgICAgICAgICAgPGxpc3RBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98SW5jbHxQUEM2MDNnbnUiPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSItSSQoV0lORF9CQVNFKS90YXJnZXQvaC9XUElMaWIiLz4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2giLz4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2gvd3JuL2NvcmVpcCIvPg0KKyAgICAgICAgICAgIDwvbGlzdEF0dHJpYnV0ZT4NCisgICAgICAgICAgICA8bGlzdEF0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xMaWJzfFBQQzYwM2dudSI+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9IiQoV0lORF9CQVNFKS90YXJnZXQvbGliL1dQSUxpYi5hIi8+DQorICAgICAgICAgICAgPC9saXN0QXR0cmlidXRlPg0KKyAgICAgICAgICAgIDxsaXN0QXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvcyI+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9IlZYX0NQVV9GQU1JTFkiLz4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iQ1BVIi8+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9IlRPT0xfRkFNSUxZIi8+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9IlRPT0wiLz4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iVE9PTF9QQVRIIi8+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9IkNDX0FSQ0hfU1BFQyIvPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSJMSUJQQVRIIi8+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9IkxJQlMiLz4NCisgICAgICAgICAgICA8L2xpc3RBdHRyaWJ1dGU+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xDQ19BUkNIX1NQRUN8dmFsdWV8UFBDMzJkaWFiIiB2YWx1ZT0iLXRQUENGSDp2eHdvcmtzNjMgLVhzdG13LXNsb3cgLURQUEMzMl9mcDYweCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98Q0NfQVJDSF9TUEVDfHZhbHVlfFBQQzMyZ251IiB2YWx1ZT0iLW1oYXJkLWZsb2F0IC1tc3RyaWN0LWFsaWduIC1tbm8taW1wbGljaXQtZnAgLURQUEMzMl9mcDYweCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98Q0NfQVJDSF9TUEVDfHZhbHVlfFBQQzYwM2RpYWIiIHZhbHVlPSItdFBQQzYwM0ZIOnZ4d29ya3M2MyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98Q0NfQVJDSF9TUEVDfHZhbHVlfFBQQzYwM2dudSIgdmFsdWU9Ii1tY3B1PTYwMyAtbXN0cmljdC1hbGlnbiAtbW5vLWltcGxpY2l0LWZwICAtbWxvbmdjYWxsIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xDUFV8dmFsdWV8UFBDMzJkaWFiIiB2YWx1ZT0iUFBDMzIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfENQVXx2YWx1ZXxQUEMzMmdudSIgdmFsdWU9IlBQQzMyIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xDUFV8dmFsdWV8UFBDNjAzZGlhYiIgdmFsdWU9IlBQQzYwMyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98Q1BVfHZhbHVlfFBQQzYwM2dudSIgdmFsdWU9IlBQQzYwMyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98TElCUEFUSHx2YWx1ZXxQUEMzMmRpYWIiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfExJQlBBVEh8dmFsdWV8UFBDMzJnbnUiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfExJQlBBVEh8dmFsdWV8UFBDNjAzZGlhYiIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98TElCUEFUSHx2YWx1ZXxQUEM2MDNnbnUiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfExJQlN8dmFsdWV8UFBDMzJkaWFiIiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xMSUJTfHZhbHVlfFBQQzMyZ251IiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xMSUJTfHZhbHVlfFBQQzYwM2RpYWIiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfExJQlN8dmFsdWV8UFBDNjAzZ251IiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xUT09MX0ZBTUlMWXx2YWx1ZXxQUEMzMmRpYWIiIHZhbHVlPSJkaWFiIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xUT09MX0ZBTUlMWXx2YWx1ZXxQUEMzMmdudSIgdmFsdWU9ImdudSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98VE9PTF9GQU1JTFl8dmFsdWV8UFBDNjAzZGlhYiIgdmFsdWU9ImRpYWIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfFRPT0xfRkFNSUxZfHZhbHVlfFBQQzYwM2dudSIgdmFsdWU9ImdudSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98VE9PTF9QQVRIfHZhbHVlfFBQQzMyZGlhYiIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98VE9PTF9QQVRIfHZhbHVlfFBQQzMyZ251IiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xUT09MX1BBVEh8dmFsdWV8UFBDNjAzZGlhYiIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98VE9PTF9QQVRIfHZhbHVlfFBQQzYwM2dudSIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98VE9PTHx2YWx1ZXxQUEMzMmRpYWIiIHZhbHVlPSJkaWFiIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xUT09MfHZhbHVlfFBQQzMyZ251IiB2YWx1ZT0iZ251Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xUT09MfHZhbHVlfFBQQzYwM2RpYWIiIHZhbHVlPSJkaWFiIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xUT09MfHZhbHVlfFBQQzYwM2dudSIgdmFsdWU9ImdudSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98VlhfQ1BVX0ZBTUlMWXx2YWx1ZXxQUEMzMmRpYWIiIHZhbHVlPSJwcGMiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfFZYX0NQVV9GQU1JTFl8dmFsdWV8UFBDMzJnbnUiIHZhbHVlPSJwcGMiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfFZYX0NQVV9GQU1JTFl8dmFsdWV8UFBDNjAzZGlhYiIgdmFsdWU9InBwYyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98VlhfQ1BVX0ZBTUlMWXx2YWx1ZXxQUEM2MDNnbnUiIHZhbHVlPSJwcGMiLz4NCisgICAgICAgICAgICA8bGlzdEF0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29scyI+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9IkMtQ29tcGlsZXIiLz4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iQysrLUNvbXBpbGVyIi8+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9IkxpbmtlciIvPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSJQYXJ0aWFsIEltYWdlIExpbmtlciIvPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSJMaWJyYXJpYW4iLz4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iQXNzZW1ibGVyIi8+DQorICAgICAgICAgICAgPC9saXN0QXR0cmlidXRlPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxBc3NlbWJsZXJ8Y21kfFBQQzMyZGlhYiIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWFzc2VtYmxlcnByZWZpeCUgJChUT09MX1BBVEgpZGNjICVEZWJ1Z01vZGVGbGFncyUgJVRvb2xGbGFncyUgJChBRERFRF9DRkxBR1MpICVJbmNsdWRlcyUgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gJU91dEZpbGUlIC1jICVJbkZpbGUlIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxjbWR8UFBDMzJnbnUiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7OyVhc3NlbWJsZXJwcmVmaXglICQoVE9PTF9QQVRIKWNjcHBjICVEZWJ1Z01vZGVGbGFncyUgJVRvb2xGbGFncyUgJChBRERFRF9DRkxBR1MpICVJbmNsdWRlcyUgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gJU91dEZpbGUlIC1jICVJbkZpbGUlIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxjbWR8UFBDNjAzZGlhYiIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWFzc2VtYmxlcnByZWZpeCUgJChUT09MX1BBVEgpZGNjICVEZWJ1Z01vZGVGbGFncyUgJVRvb2xGbGFncyUgJChBRERFRF9DRkxBR1MpICVJbmNsdWRlcyUgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gJU91dEZpbGUlIC1jICVJbkZpbGUlIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxjbWR8UFBDNjAzZ251IiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OzslYXNzZW1ibGVycHJlZml4JSAkKFRPT0xfUEFUSCljY3BwYyAlRGVidWdNb2RlRmxhZ3MlICVUb29sRmxhZ3MlICQoQURERURfQ0ZMQUdTKSAlSW5jbHVkZXMlICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICVPdXRGaWxlJSAtYyAlSW5GaWxlJSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxBc3NlbWJsZXJ8ZGJnRmxhZ3N8UFBDMzJkaWFiIiB2YWx1ZT0iLWciLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfGRiZ0ZsYWdzfFBQQzMyZ251IiB2YWx1ZT0iLWciLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfGRiZ0ZsYWdzfFBQQzYwM2RpYWIiIHZhbHVlPSItZyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxBc3NlbWJsZXJ8ZGJnRmxhZ3N8UFBDNjAzZ251IiB2YWx1ZT0iLWciLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfGRlcml2ZWRTaWdzfFBQQzMyZGlhYiIgdmFsdWU9IioubyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxBc3NlbWJsZXJ8ZGVyaXZlZFNpZ3N8UFBDMzJnbnUiIHZhbHVlPSIqLm8iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfGRlcml2ZWRTaWdzfFBQQzYwM2RpYWIiIHZhbHVlPSIqLm8iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfGRlcml2ZWRTaWdzfFBQQzYwM2dudSIgdmFsdWU9IioubyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxBc3NlbWJsZXJ8ZmxhZ3N8UFBDMzJkaWFiIiB2YWx1ZT0iJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YcHJlcHJvY2Vzcy1hc3NlbWJseSAtWGNwcC1uby1zcGFjZSAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxmbGFnc3xQUEMzMmdudSIgdmFsdWU9IiQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAgIC14YXNzZW1ibGVyLXdpdGgtY3BwIC1NRCAtTVAiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfGZsYWdzfFBQQzYwM2RpYWIiIHZhbHVlPSIkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhwcmVwcm9jZXNzLWFzc2VtYmx5IC1YY3BwLW5vLXNwYWNlICAtWG1ha2UtZGVwZW5kZW5jeT0weGQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfGZsYWdzfFBQQzYwM2dudSIgdmFsdWU9IiQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAgIC14YXNzZW1ibGVyLXdpdGgtY3BwIC1NRCAtTVAiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfG5vbkRiZ0ZsYWdzfFBQQzMyZGlhYiIgdmFsdWU9Ii1YTyAtWHNpemUtb3B0Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxub25EYmdGbGFnc3xQUEMzMmdudSIgdmFsdWU9Ii1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfG5vbkRiZ0ZsYWdzfFBQQzYwM2RpYWIiIHZhbHVlPSItWE8gLVhzaXplLW9wdCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxBc3NlbWJsZXJ8bm9uRGJnRmxhZ3N8UFBDNjAzZ251IiB2YWx1ZT0iLU8yIC1mc3RyZW5ndGgtcmVkdWNlIC1mbm8tYnVpbHRpbiIvPg0KKyAgICAgICAgICAgIDxib29sZWFuQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfG9iamVjdCIgdmFsdWU9InRydWUiLz4NCisgICAgICAgICAgICA8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxwYXNzQWJsZSIgdmFsdWU9ImZhbHNlIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxzaWdzIiB2YWx1ZT0iKi5zIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxjbWR8UFBDMzJkaWFiIiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OzslY3BwY29tcGlsZXJwcmVmaXglICQoVE9PTF9QQVRIKWRjYyAlRGVidWdNb2RlRmxhZ3MlICVUb29sRmxhZ3MlICQoQURERURfQysrRkxBR1MpICVJbmNsdWRlcyUgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gJU91dEZpbGUlIC1jICVJbkZpbGUlIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxjbWR8UFBDMzJnbnUiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7OyVjcHBjb21waWxlcnByZWZpeCUgJChUT09MX1BBVEgpY2NwcGMgJURlYnVnTW9kZUZsYWdzJSAlVG9vbEZsYWdzJSAkKEFEREVEX0MrK0ZMQUdTKSAlSW5jbHVkZXMlICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICVPdXRGaWxlJSAtYyAlSW5GaWxlJSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8Y21kfFBQQzYwM2RpYWIiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7OyVjcHBjb21waWxlcnByZWZpeCUgJChUT09MX1BBVEgpZGNjICVEZWJ1Z01vZGVGbGFncyUgJVRvb2xGbGFncyUgJChBRERFRF9DKytGTEFHUykgJUluY2x1ZGVzJSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAlT3V0RmlsZSUgLWMgJUluRmlsZSUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfGNtZHxQUEM2MDNnbnUiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7OyVjcHBjb21waWxlcnByZWZpeCUgJChUT09MX1BBVEgpY2NwcGMgJURlYnVnTW9kZUZsYWdzJSAlVG9vbEZsYWdzJSAkKEFEREVEX0MrK0ZMQUdTKSAlSW5jbHVkZXMlICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICVPdXRGaWxlJSAtYyAlSW5GaWxlJSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8ZGJnRmxhZ3N8UFBDMzJkaWFiIiB2YWx1ZT0iLWciLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfGRiZ0ZsYWdzfFBQQzMyZ251IiB2YWx1ZT0iLWciLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfGRiZ0ZsYWdzfFBQQzYwM2RpYWIiIHZhbHVlPSItZyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8ZGJnRmxhZ3N8UFBDNjAzZ251IiB2YWx1ZT0iLWciLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfGRlcml2ZWRTaWdzfFBQQzMyZGlhYiIgdmFsdWU9IioubyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8ZGVyaXZlZFNpZ3N8UFBDMzJnbnUiIHZhbHVlPSIqLm8iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfGRlcml2ZWRTaWdzfFBQQzYwM2RpYWIiIHZhbHVlPSIqLm8iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfGRlcml2ZWRTaWdzfFBQQzYwM2dudSIgdmFsdWU9IioubyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8ZmxhZ3N8UFBDMzJkaWFiIiB2YWx1ZT0iJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfGZsYWdzfFBQQzMyZ251IiB2YWx1ZT0iJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxmbGFnc3xQUEM2MDNkaWFiIiB2YWx1ZT0iJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfGZsYWdzfFBQQzYwM2dudSIgdmFsdWU9IiQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAtbWxvbmdjYWxsIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxub25EYmdGbGFnc3xQUEMzMmRpYWIiIHZhbHVlPSItWE8gLVhzaXplLW9wdCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8bm9uRGJnRmxhZ3N8UFBDMzJnbnUiIHZhbHVlPSItTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxub25EYmdGbGFnc3xQUEM2MDNkaWFiIiB2YWx1ZT0iLVhPIC1Yc2l6ZS1vcHQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfG5vbkRiZ0ZsYWdzfFBQQzYwM2dudSIgdmFsdWU9Ii1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4iLz4NCisgICAgICAgICAgICA8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxvYmplY3QiIHZhbHVlPSJ0cnVlIi8+DQorICAgICAgICAgICAgPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8cGFzc0FibGUiIHZhbHVlPSJmYWxzZSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8c2lncyIgdmFsdWU9IiouY3BwOyouQzsqLmN4eDsqLmNjIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8Y21kfFBQQzMyZGlhYiIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWNjb21waWxlcnByZWZpeCUgJChUT09MX1BBVEgpZGNjICVEZWJ1Z01vZGVGbGFncyUgJVRvb2xGbGFncyUgJChBRERFRF9DRkxBR1MpICVJbmNsdWRlcyUgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gJU91dEZpbGUlIC1jICVJbkZpbGUlIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8Y21kfFBQQzMyZ251IiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OzslY2NvbXBpbGVycHJlZml4JSAkKFRPT0xfUEFUSCljY3BwYyAlRGVidWdNb2RlRmxhZ3MlICVUb29sRmxhZ3MlICQoQURERURfQ0ZMQUdTKSAlSW5jbHVkZXMlICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICVPdXRGaWxlJSAtYyAlSW5GaWxlJSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfGNtZHxQUEM2MDNkaWFiIiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OzslY2NvbXBpbGVycHJlZml4JSAkKFRPT0xfUEFUSClkY2MgJURlYnVnTW9kZUZsYWdzJSAlVG9vbEZsYWdzJSAkKEFEREVEX0NGTEFHUykgJUluY2x1ZGVzJSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAlT3V0RmlsZSUgLWMgJUluRmlsZSUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxjbWR8UFBDNjAzZ251IiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OzslY2NvbXBpbGVycHJlZml4JSAkKFRPT0xfUEFUSCljY3BwYyAlRGVidWdNb2RlRmxhZ3MlICVUb29sRmxhZ3MlICQoQURERURfQ0ZMQUdTKSAlSW5jbHVkZXMlICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICVPdXRGaWxlJSAtYyAlSW5GaWxlJSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfGRiZ0ZsYWdzfFBQQzMyZGlhYiIgdmFsdWU9Ii1nIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8ZGJnRmxhZ3N8UFBDMzJnbnUiIHZhbHVlPSItZyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfGRiZ0ZsYWdzfFBQQzYwM2RpYWIiIHZhbHVlPSItZyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfGRiZ0ZsYWdzfFBQQzYwM2dudSIgdmFsdWU9Ii1nIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8ZGVyaXZlZFNpZ3N8UFBDMzJkaWFiIiB2YWx1ZT0iKi5vIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8ZGVyaXZlZFNpZ3N8UFBDMzJnbnUiIHZhbHVlPSIqLm8iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxkZXJpdmVkU2lnc3xQUEM2MDNkaWFiIiB2YWx1ZT0iKi5vIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8ZGVyaXZlZFNpZ3N8UFBDNjAzZ251IiB2YWx1ZT0iKi5vIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8ZmxhZ3N8UFBDMzJkaWFiIiB2YWx1ZT0iJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxmbGFnc3xQUEMzMmdudSIgdmFsdWU9IiQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAgLVdhbGwgIC1NRCAtTVAiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxmbGFnc3xQUEM2MDNkaWFiIiB2YWx1ZT0iJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxmbGFnc3xQUEM2MDNnbnUiIHZhbHVlPSIkKENDX0FSQ0hfU1BFQykgLWFuc2kgIC1XYWxsICAtTUQgLU1QIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8bm9uRGJnRmxhZ3N8UFBDMzJkaWFiIiB2YWx1ZT0iLVhPIC1Yc2l6ZS1vcHQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxub25EYmdGbGFnc3xQUEMzMmdudSIgdmFsdWU9Ii1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxub25EYmdGbGFnc3xQUEM2MDNkaWFiIiB2YWx1ZT0iLVhPIC1Yc2l6ZS1vcHQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxub25EYmdGbGFnc3xQUEM2MDNnbnUiIHZhbHVlPSItTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluIi8+DQorICAgICAgICAgICAgPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfG9iamVjdCIgdmFsdWU9InRydWUiLz4NCisgICAgICAgICAgICA8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8cGFzc0FibGUiIHZhbHVlPSJmYWxzZSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfHNpZ3MiIHZhbHVlPSIqLmMiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufGNtZHxQUEMzMmRpYWIiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7OyVhcmNoaXZlcnByZWZpeCUgJChUT09MX1BBVEgpZGFyICVUb29sRmxhZ3MlICVPdXRGaWxlJSAlT2JqZWN0cyUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufGNtZHxQUEMzMmdudSIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWFyY2hpdmVycHJlZml4JSAkKFRPT0xfUEFUSClhcnBwYyAlVG9vbEZsYWdzJSAlT3V0RmlsZSUgJU9iamVjdHMlIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxjbWR8UFBDNjAzZGlhYiIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWFyY2hpdmVycHJlZml4JSAkKFRPT0xfUEFUSClkYXIgJVRvb2xGbGFncyUgJU91dEZpbGUlICVPYmplY3RzJSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58Y21kfFBQQzYwM2dudSIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWFyY2hpdmVycHJlZml4JSAkKFRPT0xfUEFUSClhcnBwYyAlVG9vbEZsYWdzJSAlT3V0RmlsZSUgJU9iamVjdHMlIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxkYmdGbGFnc3xQUEMzMmRpYWIiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufGRiZ0ZsYWdzfFBQQzMyZ251IiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxkYmdGbGFnc3xQUEM2MDNkaWFiIiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxkYmdGbGFnc3xQUEM2MDNnbnUiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufGRlcml2ZWRTaWdzfFBQQzMyZGlhYiIgdmFsdWU9IiouYSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58ZGVyaXZlZFNpZ3N8UFBDMzJnbnUiIHZhbHVlPSIqLmEiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufGRlcml2ZWRTaWdzfFBQQzYwM2RpYWIiIHZhbHVlPSIqLmEiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufGRlcml2ZWRTaWdzfFBQQzYwM2dudSIgdmFsdWU9IiouYSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58ZmxhZ3N8UFBDMzJkaWFiIiB2YWx1ZT0iY3J1cyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58ZmxhZ3N8UFBDMzJnbnUiIHZhbHVlPSJjcnVzIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxmbGFnc3xQUEM2MDNkaWFiIiB2YWx1ZT0iY3J1cyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58ZmxhZ3N8UFBDNjAzZ251IiB2YWx1ZT0iY3J1cyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58bm9uRGJnRmxhZ3N8UFBDMzJkaWFiIiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxub25EYmdGbGFnc3xQUEMzMmdudSIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58bm9uRGJnRmxhZ3N8UFBDNjAzZGlhYiIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58bm9uRGJnRmxhZ3N8UFBDNjAzZ251IiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58b2JqZWN0IiB2YWx1ZT0iZmFsc2UiLz4NCisgICAgICAgICAgICA8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxwYXNzQWJsZSIgdmFsdWU9InRydWUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufHNpZ3MiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfGNtZHxQUEMzMmRpYWIiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7O3JtIC1mICVPdXRGaWxlJTtkZHVtcCAtTmcgJU9iamVjdHMlICVMaWJyYXJpZXMlIHwgdGNsc2ggJChXSU5EX0JBU0UpL2hvc3QvcmVzb3VyY2UvaHV0aWxzL3RjbC9tdW5jaC50Y2wgLWMgcHBjICZndDsgJChPQkpfRElSKS9jdGR0LmM7JWNjb21waWxlcnByZWZpeCUgJChUT09MX1BBVEgpZGNjICVEZWJ1Z01vZGVGbGFncyUgJChDQ19BUkNIX1NQRUMpIC1YZG9sbGFyLWluLWlkZW50IC1YZm9yY2UtZGVjbGFyYXRpb25zICQoQURERURfQ0ZMQUdTKSAlSW5jbHVkZXMlICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpICAtbyAkKE9CSl9ESVIpL2N0ZHQubyAtYyAkKE9CSl9ESVIpL2N0ZHQuYzslbGlua2VycHJlZml4JSAkKFRPT0xfUEFUSClkbGQgLXRQUENGSDp2eHdvcmtzNjMgLVggLXI1ICVUb29sRmxhZ3MlIC1vICVPdXRGaWxlJSAkKE9CSl9ESVIpL2N0ZHQubyAlT2JqZWN0cyUgJUxpYnJhcmllcyUgJChMSUJQQVRIKSAkKExJQlMpICAkKEFEREVEX0xJQlBBVEgpICQoQURERURfTElCUykgJmFtcDsmYW1wOyBpZiBbICZxdW90OyQoRVhQQU5EX0RCRykmcXVvdDsgPSAmcXVvdDsxJnF1b3Q7IF07IHRoZW4gcGxpbmsgJnF1b3Q7JEAmcXVvdDs7ZmkiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfGNtZHxQUEMzMmdudSIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7cm0gLWYgJU91dEZpbGUlO25tcHBjICVPYmplY3RzJSAlTGlicmFyaWVzJSB8IHRjbHNoICQoV0lORF9CQVNFKS9ob3N0L3Jlc291cmNlL2h1dGlscy90Y2wvbXVuY2gudGNsIC1jIHBwYyAmZ3Q7ICQoT0JKX0RJUikvY3RkdC5jOyVjY29tcGlsZXJwcmVmaXglICQoVE9PTF9QQVRIKWNjcHBjICVEZWJ1Z01vZGVGbGFncyUgJChDQ19BUkNIX1NQRUMpIC1mZG9sbGFycy1pbi1pZGVudGlmaWVycyAtV2FsbCAkKEFEREVEX0NGTEFHUykgJUluY2x1ZGVzJSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAgLW8gJChPQkpfRElSKS9jdGR0Lm8gLWMgJChPQkpfRElSKS9jdGR0LmM7JWxpbmtlcnByZWZpeCUgJChUT09MX1BBVEgpY2NwcGMgLXIgLW5vc3RkbGliIC1XbCwtWCAlVG9vbEZsYWdzJSAtbyAlT3V0RmlsZSUgJChPQkpfRElSKS9jdGR0Lm8gJU9iamVjdHMlICVMaWJyYXJpZXMlICQoTElCUEFUSCkgJChMSUJTKSAgJChBRERFRF9MSUJQQVRIKSAkKEFEREVEX0xJQlMpICZhbXA7JmFtcDsgaWYgWyAmcXVvdDskKEVYUEFORF9EQkcpJnF1b3Q7ID0gJnF1b3Q7MSZxdW90OyBdOyB0aGVuIHBsaW5rICZxdW90OyRAJnF1b3Q7O2ZpIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxjbWR8UFBDNjAzZGlhYiIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7cm0gLWYgJU91dEZpbGUlO2RkdW1wIC1OZyAlT2JqZWN0cyUgJUxpYnJhcmllcyUgfCB0Y2xzaCAkKFdJTkRfQkFTRSkvaG9zdC9yZXNvdXJjZS9odXRpbHMvdGNsL211bmNoLnRjbCAtYyBwcGMgJmd0OyAkKE9CSl9ESVIpL2N0ZHQuYzslY2NvbXBpbGVycHJlZml4JSAkKFRPT0xfUEFUSClkY2MgJURlYnVnTW9kZUZsYWdzJSAkKENDX0FSQ0hfU1BFQykgLVhkb2xsYXItaW4taWRlbnQgLVhmb3JjZS1kZWNsYXJhdGlvbnMgJChBRERFRF9DRkxBR1MpICVJbmNsdWRlcyUgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgIC1vICQoT0JKX0RJUikvY3RkdC5vIC1jICQoT0JKX0RJUikvY3RkdC5jOyVsaW5rZXJwcmVmaXglICQoVE9PTF9QQVRIKWRsZCAtdFBQQzYwM0ZIOnZ4d29ya3M2MyAtWCAtcjUgJVRvb2xGbGFncyUgLW8gJU91dEZpbGUlICQoT0JKX0RJUikvY3RkdC5vICVPYmplY3RzJSAlTGlicmFyaWVzJSAkKExJQlBBVEgpICQoTElCUykgICQoQURERURfTElCUEFUSCkgJChBRERFRF9MSUJTKSAmYW1wOyZhbXA7IGlmIFsgJnF1b3Q7JChFWFBBTkRfREJHKSZxdW90OyA9ICZxdW90OzEmcXVvdDsgXTsgdGhlbiBwbGluayAmcXVvdDskQCZxdW90OztmaSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8Y21kfFBQQzYwM2dudSIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7cm0gLWYgJU91dEZpbGUlO25tcHBjICVPYmplY3RzJSAlTGlicmFyaWVzJSB8IHRjbHNoICQoV0lORF9CQVNFKS9ob3N0L3Jlc291cmNlL2h1dGlscy90Y2wvbXVuY2gudGNsIC1jIHBwYyAmZ3Q7ICQoT0JKX0RJUikvY3RkdC5jOyVjY29tcGlsZXJwcmVmaXglICQoVE9PTF9QQVRIKWNjcHBjICVEZWJ1Z01vZGVGbGFncyUgJChDQ19BUkNIX1NQRUMpIC1mZG9sbGFycy1pbi1pZGVudGlmaWVycyAtV2FsbCAkKEFEREVEX0NGTEFHUykgJUluY2x1ZGVzJSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAgLW8gJChPQkpfRElSKS9jdGR0Lm8gLWMgJChPQkpfRElSKS9jdGR0LmM7JWxpbmtlcnByZWZpeCUgJChUT09MX1BBVEgpY2NwcGMgLXIgLW5vc3RkbGliIC1XbCwtWCAlVG9vbEZsYWdzJSAtbyAlT3V0RmlsZSUgJChPQkpfRElSKS9jdGR0Lm8gJU9iamVjdHMlICVMaWJyYXJpZXMlICQoTElCUEFUSCkgJChMSUJTKSAgJChBRERFRF9MSUJQQVRIKSAkKEFEREVEX0xJQlMpICZhbXA7JmFtcDsgaWYgWyAmcXVvdDskKEVYUEFORF9EQkcpJnF1b3Q7ID0gJnF1b3Q7MSZxdW90OyBdOyB0aGVuIHBsaW5rICZxdW90OyRAJnF1b3Q7O2ZpIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxkYmdGbGFnc3xQUEMzMmRpYWIiIHZhbHVlPSItZyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8ZGJnRmxhZ3N8UFBDMzJnbnUiIHZhbHVlPSItZyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8ZGJnRmxhZ3N8UFBDNjAzZGlhYiIgdmFsdWU9Ii1nIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxkYmdGbGFnc3xQUEM2MDNnbnUiIHZhbHVlPSItZyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8ZGVyaXZlZFNpZ3N8UFBDMzJkaWFiIiB2YWx1ZT0iKi5vdXQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfGRlcml2ZWRTaWdzfFBQQzMyZ251IiB2YWx1ZT0iKi5vdXQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfGRlcml2ZWRTaWdzfFBQQzYwM2RpYWIiIHZhbHVlPSIqLm91dCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8ZGVyaXZlZFNpZ3N8UFBDNjAzZ251IiB2YWx1ZT0iKi5vdXQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfGZsYWdzfFBQQzMyZGlhYiIgdmFsdWU9Ii1yNCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8ZmxhZ3N8UFBDMzJnbnUiIHZhbHVlPSItVCAkKFdJTkRfQkFTRSkvdGFyZ2V0L2gvdG9vbC9nbnUvbGRzY3JpcHRzL2xpbmsuT1VUIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxmbGFnc3xQUEM2MDNkaWFiIiB2YWx1ZT0iLXI0Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxmbGFnc3xQUEM2MDNnbnUiIHZhbHVlPSItVCAkKFdJTkRfQkFTRSkvdGFyZ2V0L2gvdG9vbC9nbnUvbGRzY3JpcHRzL2xpbmsuT1VUIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxub25EYmdGbGFnc3xQUEMzMmRpYWIiIHZhbHVlPSItWE8gLVhzaXplLW9wdCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8bm9uRGJnRmxhZ3N8UFBDMzJnbnUiIHZhbHVlPSItTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxub25EYmdGbGFnc3xQUEM2MDNkaWFiIiB2YWx1ZT0iLVhPIC1Yc2l6ZS1vcHQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfG5vbkRiZ0ZsYWdzfFBQQzYwM2dudSIgdmFsdWU9Ii1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4iLz4NCisgICAgICAgICAgICA8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxvYmplY3QiIHZhbHVlPSJmYWxzZSIvPg0KKyAgICAgICAgICAgIDxib29sZWFuQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfHBhc3NBYmxlIiB2YWx1ZT0iZmFsc2UiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfHNpZ3MiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8Y21kfFBQQzMyZGlhYiIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWxpbmtlcnByZWZpeCUgJChUT09MX1BBVEgpZGxkIC10UFBDRkg6dnh3b3JrczYzIC1YIC1yNSAlVG9vbEZsYWdzJSAtbyAlT3V0RmlsZSUgJU9iamVjdHMlICQoTElCUEFUSCkgJChMSUJTKSAkKEFEREVEX0xJQlBBVEgpICQoQURERURfTElCUykgICZhbXA7JmFtcDsgaWYgWyAmcXVvdDskKEVYUEFORF9EQkcpJnF1b3Q7ID0gJnF1b3Q7MSZxdW90OyBdOyB0aGVuIHBsaW5rICZxdW90OyRAJnF1b3Q7O2ZpIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfGNtZHxQUEMzMmdudSIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWxpbmtlcnByZWZpeCUgJChUT09MX1BBVEgpY2NwcGMgLXIgLW5vc3RkbGliIC1XbCwtWCAlVG9vbEZsYWdzJSAtbyAlT3V0RmlsZSUgJU9iamVjdHMlICQoTElCUEFUSCkgJChMSUJTKSAkKEFEREVEX0xJQlBBVEgpICQoQURERURfTElCUykgICZhbXA7JmFtcDsgaWYgWyAmcXVvdDskKEVYUEFORF9EQkcpJnF1b3Q7ID0gJnF1b3Q7MSZxdW90OyBdOyB0aGVuIHBsaW5rICZxdW90OyRAJnF1b3Q7O2ZpIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfGNtZHxQUEM2MDNkaWFiIiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OzslbGlua2VycHJlZml4JSAkKFRPT0xfUEFUSClkbGQgLXRQUEM2MDNGSDp2eHdvcmtzNjMgLVggLXI1ICVUb29sRmxhZ3MlIC1vICVPdXRGaWxlJSAlT2JqZWN0cyUgJChMSUJQQVRIKSAkKExJQlMpICQoQURERURfTElCUEFUSCkgJChBRERFRF9MSUJTKSAgJmFtcDsmYW1wOyBpZiBbICZxdW90OyQoRVhQQU5EX0RCRykmcXVvdDsgPSAmcXVvdDsxJnF1b3Q7IF07IHRoZW4gcGxpbmsgJnF1b3Q7JEAmcXVvdDs7ZmkiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8Y21kfFBQQzYwM2dudSIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWxpbmtlcnByZWZpeCUgJChUT09MX1BBVEgpY2NwcGMgLXIgLW5vc3RkbGliIC1XbCwtWCAlVG9vbEZsYWdzJSAtbyAlT3V0RmlsZSUgJU9iamVjdHMlICQoTElCUEFUSCkgJChMSUJTKSAkKEFEREVEX0xJQlBBVEgpICQoQURERURfTElCUykgICZhbXA7JmFtcDsgaWYgWyAmcXVvdDskKEVYUEFORF9EQkcpJnF1b3Q7ID0gJnF1b3Q7MSZxdW90OyBdOyB0aGVuIHBsaW5rICZxdW90OyRAJnF1b3Q7O2ZpIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfGRiZ0ZsYWdzfFBQQzMyZGlhYiIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxkYmdGbGFnc3xQUEMzMmdudSIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxkYmdGbGFnc3xQUEM2MDNkaWFiIiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfGRiZ0ZsYWdzfFBQQzYwM2dudSIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxkZXJpdmVkU2lnc3xQUEMzMmRpYWIiIHZhbHVlPSIqLm8iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8ZGVyaXZlZFNpZ3N8UFBDMzJnbnUiIHZhbHVlPSIqLm8iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8ZGVyaXZlZFNpZ3N8UFBDNjAzZGlhYiIgdmFsdWU9IioubyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxkZXJpdmVkU2lnc3xQUEM2MDNnbnUiIHZhbHVlPSIqLm8iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8ZmxhZ3N8UFBDMzJkaWFiIiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfGZsYWdzfFBQQzMyZ251IiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfGZsYWdzfFBQQzYwM2RpYWIiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8ZmxhZ3N8UFBDNjAzZ251IiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfG5vbkRiZ0ZsYWdzfFBQQzMyZGlhYiIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxub25EYmdGbGFnc3xQUEMzMmdudSIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxub25EYmdGbGFnc3xQUEM2MDNkaWFiIiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfG5vbkRiZ0ZsYWdzfFBQQzYwM2dudSIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxib29sZWFuQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8b2JqZWN0IiB2YWx1ZT0iZmFsc2UiLz4NCisgICAgICAgICAgICA8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfHBhc3NBYmxlIiB2YWx1ZT0idHJ1ZSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxzaWdzIiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xjbWQiIHZhbHVlPSIlbWFrZXByZWZpeCUgbWFrZSAtLW5vLXByaW50LWRpcmVjdG9yeSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98ZGVmYXVsdFNwZWMiIHZhbHVlPSJQUEM2MDNnbnUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfHJlZGlyRGlyfFBQQzMyZGlhYiIgdmFsdWU9IlBQQzMyZGlhYiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98cmVkaXJEaXJ8UFBDMzJnbnUiIHZhbHVlPSJQUEMzMmdudSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98cmVkaXJEaXJ8UFBDNjAzZGlhYiIgdmFsdWU9IlBQQzYwM2RpYWIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfHJlZGlyRGlyfFBQQzYwM2dudSIgdmFsdWU9IlBQQzYwM2dudSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98cmVkaXJSb290IiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPGxpc3RBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98c3BlY3MiPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSJQUEMzMmRpYWIiLz4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iUFBDMzJnbnUiLz4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iUFBDNjAzZGlhYiIvPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSJQUEM2MDNnbnUiLz4NCisgICAgICAgICAgICA8L2xpc3RBdHRyaWJ1dGU+DQorICAgICAgICAgICAgPGludEF0dHJpYnV0ZSBrZXk9IkJ1aWxkU3VwcG9ydEVuYWJsZWQiIHZhbHVlPSIxIi8+DQorICAgICAgICAgICAgPGxpc3RBdHRyaWJ1dGUga2V5PSJCdWlsZFN1cHBvcnRGb3JCdWlsZFNwZWNzIj4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iUFBDNjAzZ251Ii8+DQorICAgICAgICAgICAgPC9saXN0QXR0cmlidXRlPg0KKyAgICAgICAgICAgIDxib29sZWFuQXR0cmlidXRlIGtleT0iQnVpbGRUYXJnZXRDZW50cmljIiB2YWx1ZT0idHJ1ZSIvPg0KKyAgICAgICAgPC9tYXBBdHRyaWJ1dGU+DQorICAgIDwvYXR0cmlidXRlcz4NCisgICAgPGJ1aWxkdGFyZ2V0cz4NCisgICAgICAgIDxidWlsZHRhcmdldCBidWlsZHRvb2w9IkxpbmtlciIgbmFtZT0iR3lyb1NhbXBsZSIgcGFzc2VkPSJmYWxzZSIgdGFyZ2V0bmFtZT0iR3lyb1NhbXBsZSI+DQorICAgICAgICAgICAgPGNvbnRlbnRzPg0KKyAgICAgICAgICAgICAgICA8YnVpbGR0YXJnZXRyZWZlcmVuY2UgbmFtZT0iL0d5cm9TYW1wbGUvR3lyb1NhbXBsZV9wYXJ0aWFsSW1hZ2UiLz4NCisgICAgICAgICAgICA8L2NvbnRlbnRzPg0KKyAgICAgICAgPC9idWlsZHRhcmdldD4NCisgICAgICAgIDxidWlsZHRhcmdldCBidWlsZHRvb2w9IlBhcnRpYWwgSW1hZ2UgTGlua2VyIiBuYW1lPSJHeXJvU2FtcGxlX3BhcnRpYWxJbWFnZSIgcGFzc2VkPSJ0cnVlIiB0YXJnZXRuYW1lPSJHeXJvU2FtcGxlX3BhcnRpYWxJbWFnZSI+DQorICAgICAgICAgICAgPGNvbnRlbnRzPg0KKyAgICAgICAgICAgICAgICA8Zm9sZGVyIG5hbWU9Ii9HeXJvU2FtcGxlIiByZWN1cnNpdmU9InRydWUiLz4NCisgICAgICAgICAgICA8L2NvbnRlbnRzPg0KKyAgICAgICAgPC9idWlsZHRhcmdldD4NCisgICAgPC9idWlsZHRhcmdldHM+DQorPC93cnhtbD4NCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vR3lyb1NhbXBsZS9HeXJvU2FtcGxlLmNwcCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9HeXJvU2FtcGxlL0d5cm9TYW1wbGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkMjUyN2EKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vR3lyb1NhbXBsZS9HeXJvU2FtcGxlLmNwcApAQCAtMCwwICsxLDY2IEBACisjaW5jbHVkZSAiV1BJTGliLmgiDQorDQorLyoqDQorICogVGhpcyBpcyBhIGRlbW8gcHJvZ3JhbSBzaG93aW5nIHRoZSB1c2Ugb2YgdGhlIEd5cm8gZm9yIGRyaXZpbmcgaW4gYSBzdHJhaWdodA0KKyAqIGxpbmUuIFRoZSBHeXJvIG9iamVjdCBpbiB0aGUgbGlicmFyeSByZXR1cm5zIHRoZSBoZWFkaW5nIHdpdGggMC4wIHJlcHJlc2VudGluZw0KKyAqIHN0cmFpZ2h0IGFuZCBwb3NpdGl2ZSBvciBuZWdhdGl2ZSBhbmdsZXMgaW4gZGVncmVlcyBmb3IgbGVmdCBhbmQgcmlnaHQgdHVybnMuDQorICogVGhlIHplcm8gcG9pbnQgaXMgZXN0YWJsaXNoZWQgd2hlbiB0aGUgZ3lybyBvYmplY3QgaXMgY3JlYXRlZCBzbyBpdCBpcyBpbXBvcnRhbnQNCisgKiB0byBoYXZlIHRoZSByb2JvdCBzdGlsbCBhZnRlciB0dXJuaW5nIGl0IG9uLg0KKyAqIA0KKyAqIElmIHlvdSBhcmUgZXhwZXJpZW5jaW5nIGRyaWZ0IGluIHRoZSBneXJvLCBpdCBjYW4gYWx3YXlzIGJlIHJlc2V0IGJhY2sgdG8gdGhlDQorICogemVybyBoZWFkaW5nIGJ5IGNhbGxpbmcgR3lyby5SZXNldCgpLg0KKyAqIA0KKyAqIE5vdGljZSB0aGF0IHRoZXJlIGlzIG5vIE9wZXJhdG9yQ29udHJvbCBtZXRob2QuIFNpbmNlIHRoaXMgcHJvZ3JhbSBkb2Vzbid0IHN1cHBseQ0KKyAqIG9uZSB0aGUgZGVmYXVsdCBPcGVyYXRvckNvbnRyb2wgbWV0aG9kIHdpbGwgYmUgY2FsbGVkIGZyb20gdGhlIGxpYnJhcnkuDQorICovDQorY2xhc3MgR3lyb1NhbXBsZSA6IHB1YmxpYyBTaW1wbGVSb2JvdA0KK3sNCisJUm9ib3REcml2ZSBteVJvYm90OyAvLyByb2JvdCBkcml2ZSBzeXN0ZW0NCisJR3lybyBneXJvOw0KKw0KK3B1YmxpYzoNCisJR3lyb1NhbXBsZSh2b2lkKToNCisJCW15Um9ib3QoMSwgMiksCQkvLyBpbml0aWFsaXplIHRoZSBzZW5zb3JzIGluIGluaXRpYWxpemF0aW9uIGxpc3QNCisJCWd5cm8oMSkNCisJew0KKwkJbXlSb2JvdC5TZXRFeHBpcmF0aW9uKDAuMSk7DQorCX0NCisNCisJLyoqDQorCSAqIERyaXZlIGluIGEgc3RyYWlnaHQgbGluZSB1c2luZyB0aGUgZ3lyby4NCisJICogVGhpcyBzaG9ydCBwcm9ncmFtIHVzZXMgc2ltcGxlIHByb3BvcnRpb25hbCB0byBjb3JyZWN0IGZvciBlcnJvcnMgaW4gaGVhZGluZy4NCisJICogUHJvcG9ydGlvbmFsIGNvbnRyb2wgc2ltcGx5IG1lYW5zIHRoYXQgdGhlIGFtb3VudCBvZiBjb3JyZWN0aW9uIHRvIHRoZSBoZWFkaW5nIGlzDQorCSAqIHByb3BvcnRpb25hbCB0byB0aGUgZXJyb3IuIFNpbmNlIHdlIGFyZSB0cnlpbmcgdG8gZHJpdmUgc3RyYWlnaHQsIHRoZW4gdGhlDQorCSAqIGRlc2lyZWQgZ3lybyB2YWx1ZSBpcyAwLjAuIFRoZSBneXJvIGhlYWRpbmcsIHdoaWNoIHZhcmllcyBmcm9tIDAuMCBhcyB0aGUgcm9ib3QNCisJICogdHVybnMgaXMgc3VwcGxpZWQgYXMgdGhlIGN1cnZlIHBhcmFtZXRlciB0byB0aGUgRHJpdmUgbWV0aG9kLiBUaGlzIG1ldGhvZCB0YWtlcw0KKwkgKiB2YWx1ZXMgZnJvbSAtMSB0byAxIHRvIHJlcHJlc2VudCB0dXJucyBsZWZ0IGFuZCByaWdodC4gMCBpcyBubyB0dXJuLg0KKwkgKiANCisJICogV2hpbGUgdGhlIGd5cm8gaGVhZGluZyBpcyAwLjAgKHRoZSBkZXNpcmVkIGhlYWRpbmcpIHRoZXJlIHdpbGwgYmUgbm8gdHVybi4gQXMgdGhlDQorCSAqIGhlYWRpbmcgaW5jcmVhc2VzIGluIGVpdGhlciBkaXJlY3Rpb24sIGl0IHJlc3VsdHMgaW4gYSBwcm9wb3J0aW9uYWxseSBsYXJnZXINCisJICogdHVybiB0byBjb3VudGVyYWN0IHRoZSBlcnJvci4gVGhlIGFuZ2xlIGlzIGRpdmlkZWQgYnkgMzAgdG8gc2NhbGUgdGhlIHZhbHVlIHNvDQorCSAqIHRoZSByb2JvdCBkb2Vzbid0IHR1cm4gdG9vIGZhc3Qgb3IgdG9vIHNsb3dseSB3aGlsZSBjb3JyZWN0aW5nLg0KKwkgKi8NCisJdm9pZCBBdXRvbm9tb3VzKHZvaWQpDQorCXsNCisJCWd5cm8uUmVzZXQoKTsNCisJCXdoaWxlIChJc0F1dG9ub21vdXMoKSkNCisJCXsNCisJCQlmbG9hdCBhbmdsZSA9IGd5cm8uR2V0QW5nbGUoKTsJCQkvLyBjdXJyZW50IGhlYWRpbmcgKDAgPSB0YXJnZXQpDQorCQkJbXlSb2JvdC5Ecml2ZSgtMS4wLCAtYW5nbGUgLyAzMC4wKTsJCS8vIHByb3BvcnRpb25hbGx5IGRyaXZlIGluIGEgc3RyYWlnaHQgbGluZQ0KKwkJCVdhaXQoMC4wMDQpOw0KKwkJfQ0KKwkJbXlSb2JvdC5Ecml2ZSgwLjAsIDAuMCk7IAkvLyBzdG9wIHJvYm90DQorCX0NCisJDQorCXZvaWQgT3BlcmF0b3JDb250cm9sKHZvaWQpDQorCXsNCisJCUpveXN0aWNrIHN0aWNrKDEpOw0KKwkJd2hpbGUgKElzT3BlcmF0b3JDb250cm9sKCkpDQorCQl7DQorCQkJbXlSb2JvdC5BcmNhZGVEcml2ZShzdGljayk7DQorCQkJV2FpdCgwLjAwNSk7DQorCQl9DQorCX0NCit9Ow0KKw0KK1NUQVJUX1JPQk9UX0NMQVNTKEd5cm9TYW1wbGUpOw0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9HeXJvU2FtcGxlL3NhbXBsZS5wcm9wZXJ0aWVzIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvdnh3b3Jrcy02LjMvdGFyZ2V0L3NyYy9kZW1vL0d5cm9TYW1wbGUvc2FtcGxlLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWZjODk1ZQotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9HeXJvU2FtcGxlL3NhbXBsZS5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMiBAQAorcHJvamVjdC50eXBlPURvd25sb2FkYWJsZUtlcm5lbE1vZHVsZVByb2plY3QNCitwbGF0Zm9ybS5pZD1WeFdvcmtzDQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvdnh3b3Jrcy02LjMvdGFyZ2V0L3NyYy9kZW1vL0d5cm9TYW1wbGUvc2FtcGxlLnR4dCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9HeXJvU2FtcGxlL3NhbXBsZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjdlZWFkNwotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9HeXJvU2FtcGxlL3NhbXBsZS50eHQKQEAgLTAsMCArMSwxMSBAQAorRlJDIEd5cm8gc2FtcGxlIHByb2dyYW0NCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKw0KK1RoaXMgaXMgYSBzYW1wbGUgc2hvd2luZyB0aGUgdXNlIG9mIHRoZSBHeXJvIHNlbnNvciBhbmQgdGhlIGFzc29jaWF0ZWQgY2xhc3MgZm9yDQorZHJpdmluZyBpbiBhIHN0cmFpZ2h0IGxpbmUuIEl0IHVzZXMgc2ltcGxlIHByb3BvcnRpb25hbCBjb250cm9sIHRvIHN0ZWVyIHRoZQ0KK3JvYm90IGR1cmluZyB0aGUgYXV0b25vbW91cyBwZXJpb2QuIFRoZXJlIGlzIG5vIG9wZXJhdG9yIGNvbnRyb2wgcG9ydGlvbiBvZg0KK3RoaXMgcHJvZ3JhbSwgc28gdGhlIGRlZmF1bHQgYWN0aW9uIChwcmludCBhIG1lc3NhZ2Ugb24gdGhlIGNvbnNvbGUpIGlzIHRha2VuDQord2hpbGUgdGhlIGRyaXZlciBzdGF0aW9uIGlzIGluIHRlbGVvcCBtb2RlLg0KKw0KKw0KKw0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9LaW5lY3RHZXN0dXJlc1NhbXBsZS8uY3Byb2plY3QgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vS2luZWN0R2VzdHVyZXNTYW1wbGUvLmNwcm9qZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhOTJlZGMKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vS2luZWN0R2VzdHVyZXNTYW1wbGUvLmNwcm9qZWN0CkBAIC0wLDAgKzEsMjkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQorPD9maWxlVmVyc2lvbiA0LjAuMD8+DQorDQorPGNwcm9qZWN0Pg0KKzxzdG9yYWdlTW9kdWxlIG1vZHVsZUlkPSJvcmcuZWNsaXBzZS5jZHQuY29yZS5zZXR0aW5ncyI+DQorPGNjb25maWd1cmF0aW9uIGlkPSJvcmcuZWNsaXBzZS5jZHQuY29yZS5kZWZhdWx0LmNvbmZpZy4yODM5NjcxMDYiPg0KKzxzdG9yYWdlTW9kdWxlIGJ1aWxkU3lzdGVtSWQ9Im9yZy5lY2xpcHNlLmNkdC5jb3JlLmRlZmF1bHRDb25maWdEYXRhUHJvdmlkZXIiIGlkPSJvcmcuZWNsaXBzZS5jZHQuY29yZS5kZWZhdWx0LmNvbmZpZy4yODM5NjcxMDYiIG1vZHVsZUlkPSJvcmcuZWNsaXBzZS5jZHQuY29yZS5zZXR0aW5ncyIgbmFtZT0iQ29uZmlndXJhdGlvbiI+DQorPGV4dGVybmFsU2V0dGluZ3MvPg0KKzxleHRlbnNpb25zPg0KKzxleHRlbnNpb24gaWQ9ImNvbS53aW5kcml2ZXIuaWRlLmNvcmUuV1JTY2FubmVySW5mb1Byb3ZpZGVyIiBwb2ludD0ib3JnLmVjbGlwc2UuY2R0LmNvcmUuU2Nhbm5lckluZm9Qcm92aWRlciIvPg0KKzxleHRlbnNpb24gaWQ9ImNvbS53aW5kcml2ZXIuaWRlLmNvcmUuV1JFbGZQYXJzZXJWeFdvcmtzIiBwb2ludD0ib3JnLmVjbGlwc2UuY2R0LmNvcmUuQmluYXJ5UGFyc2VyIi8+DQorPGV4dGVuc2lvbiBpZD0ib3JnLmVjbGlwc2UuY2R0LmNvcmUuR05VX0VMRiIgcG9pbnQ9Im9yZy5lY2xpcHNlLmNkdC5jb3JlLkJpbmFyeVBhcnNlciIvPg0KKzwvZXh0ZW5zaW9ucz4NCis8L3N0b3JhZ2VNb2R1bGU+DQorPHN0b3JhZ2VNb2R1bGUgbW9kdWxlSWQ9Im9yZy5lY2xpcHNlLmNkdC5jb3JlLmV4dGVybmFsU2V0dGluZ3MiLz4NCis8c3RvcmFnZU1vZHVsZSBtb2R1bGVJZD0ib3JnLmVjbGlwc2UuY2R0LmNvcmUucGF0aGVudHJ5Ij4NCis8cGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0iIi8+DQorPHBhdGhlbnRyeSBraW5kPSJvdXQiIHBhdGg9IiIvPg0KKzxwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJjb20ud2luZHJpdmVyLmlkZS5jb3JlLldSX0NPTlRBSU5FUiIvPg0KKzxwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJjb20ud2luZHJpdmVyLmlkZS5jb3JlLmJ1aWxkLm1vZGVsLldSX1VTRVJERUZJTkVEX0NPTlRBSU5FUiIvPg0KKzwvc3RvcmFnZU1vZHVsZT4NCis8c3RvcmFnZU1vZHVsZSBtb2R1bGVJZD0ic2Nhbm5lckNvbmZpZ3VyYXRpb24iLz4NCis8c3RvcmFnZU1vZHVsZSBtb2R1bGVJZD0idXNlcmRlZmluZWRDb250YWluZXIiPg0KKzxpbmRleEFsbEZpbGVzIHZhbHVlPSJmYWxzZSIvPg0KKzxpbml0aWFsaXplZCB2YWx1ZT0idHJ1ZSIvPg0KKzwvc3RvcmFnZU1vZHVsZT4NCis8L2Njb25maWd1cmF0aW9uPg0KKzwvc3RvcmFnZU1vZHVsZT4NCis8L2Nwcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9LaW5lY3RHZXN0dXJlc1NhbXBsZS8ucHJvamVjdCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9LaW5lY3RHZXN0dXJlc1NhbXBsZS8ucHJvamVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZmU0NDhhCi0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvdnh3b3Jrcy02LjMvdGFyZ2V0L3NyYy9kZW1vL0tpbmVjdEdlc3R1cmVzU2FtcGxlLy5wcm9qZWN0CkBAIC0wLDAgKzEsMjAgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQorPHByb2plY3REZXNjcmlwdGlvbj4NCisJPG5hbWU+S2luZWN0R2VzdHVyZXNTYW1wbGU8L25hbWU+DQorCTxjb21tZW50PjwvY29tbWVudD4NCisJPHByb2plY3RzPg0KKwk8L3Byb2plY3RzPg0KKwk8YnVpbGRTcGVjPg0KKwkJPGJ1aWxkQ29tbWFuZD4NCisJCQk8bmFtZT5jb20ud2luZHJpdmVyLmlkZS5jb3JlLndyYnVpbGRlcjwvbmFtZT4NCisJCQk8YXJndW1lbnRzPg0KKwkJCTwvYXJndW1lbnRzPg0KKwkJPC9idWlsZENvbW1hbmQ+DQorCTwvYnVpbGRTcGVjPg0KKwk8bmF0dXJlcz4NCisJCTxuYXR1cmU+Y29tLndpbmRyaXZlci5pZGUuY29yZS53cm5hdHVyZTwvbmF0dXJlPg0KKwkJPG5hdHVyZT5jb20ud2luZHJpdmVyLmlkZS5jb3JlLndyY29yZW5hdHVyZTwvbmF0dXJlPg0KKwkJPG5hdHVyZT5vcmcuZWNsaXBzZS5jZHQuY29yZS5jbmF0dXJlPC9uYXR1cmU+DQorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmNkdC5jb3JlLmNjbmF0dXJlPC9uYXR1cmU+DQorCTwvbmF0dXJlcz4NCis8L3Byb2plY3REZXNjcmlwdGlvbj4NCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vS2luZWN0R2VzdHVyZXNTYW1wbGUvLndybWFrZWZpbGUgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vS2luZWN0R2VzdHVyZXNTYW1wbGUvLndybWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTFkZDdmOAotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9LaW5lY3RHZXN0dXJlc1NhbXBsZS8ud3JtYWtlZmlsZQpAQCAtMCwwICsxLDQ4IEBACisjIFRoZSBmaWxlICIud3JtYWtlZmlsZSIgaXMgdGhlIHRlbXBsYXRlIHVzZWQgYnkgdGhlIFdpbmQgUml2ZXIgV29ya2JlbmNoIHRvDQorIyBnZW5lcmF0ZSB0aGUgbWFrZWZpbGVzIG9mIHRoaXMgcHJvamVjdC4gQWRkIHVzZXItc3BlY2lmaWMgYnVpbGQgdGFyZ2V0cyBhbmQNCisjIG1ha2UgcnVsZXMgb25seSghKSBpbiB0aGlzIHByb2plY3QncyAiLndybWFrZWZpbGUiIGZpbGUuIFRoZXNlIHdpbGwgdGhlbiBiZQ0KKyMgYXV0b21hdGljYWxseSBkdW1wZWQgaW50byB0aGUgbWFrZWZpbGVzLg0KKw0KK1dJTkRfSE9NRSA6PSAkKHN1YnN0IFwsLywkKFdJTkRfSE9NRSkpDQorV0lORF9CQVNFIDo9ICQoc3Vic3QgXCwvLCQoV0lORF9CQVNFKSkNCitXSU5EX1VTUiA6PSAkKHN1YnN0IFwsLywkKFdJTkRfVVNSKSkNCisNCithbGwgOiBwcmVfYnVpbGQgbWFpbl9hbGwgcG9zdF9idWlsZA0KKw0KK19jbGVhbiA6Og0KKwlAZWNobyAibWFrZTogcmVtb3ZpbmcgdGFyZ2V0cyBhbmQgb2JqZWN0cyBvZiBgcHdkYCINCisNCislSURFX0dFTkVSQVRFRCUNCisNCistaW5jbHVkZSAkKFBSSl9ST09UX0RJUikvKi5tYWtlZmlsZQ0KKw0KKy1pbmNsdWRlICoubWFrZWZpbGUNCisNCittYWluX2FsbCA6IGV4dGVybmFsX2J1aWxkICQoUFJPSkVDVF9UQVJHRVRTKQ0KKwlAZWNobyAibWFrZTogYnVpbHQgdGFyZ2V0cyBvZiBgcHdkYCINCisNCisjIGVudHJ5IHBvaW50IGZvciBleHRlbmRpbmcgdGhlIGJ1aWxkDQorZXh0ZXJuYWxfYnVpbGQgOjoNCisJQGVjaG8gIiINCisNCisjIG1haW4gZW50cnkgcG9pbnQgZm9yIHByZSBwcm9jZXNzaW5nIHByaW9yIHRvIHRoZSBidWlsZA0KK3ByZV9idWlsZCA6OiAkKFBSRV9CVUlMRF9TVEVQKSBnZW5lcmF0ZV9zb3VyY2VzDQorCUBlY2hvICIiDQorDQorIyBlbnRyeSBwb2ludCBmb3IgZ2VuZXJhdGluZyBzb3VyY2VzIHByaW9yIHRvIHRoZSBidWlsZA0KK2dlbmVyYXRlX3NvdXJjZXMgOjoNCisJQGVjaG8gIiINCisNCisjIG1haW4gZW50cnkgcG9pbnQgZm9yIHBvc3QgcHJvY2Vzc2luZyBhZnRlciB0aGUgYnVpbGQNCitwb3N0X2J1aWxkIDo6ICQoUE9TVF9CVUlMRF9TVEVQKSBkZXBsb3lfb3V0cHV0DQorCUBlY2hvICIiDQorDQorIyBlbnRyeSBwb2ludCBmb3IgZGVwbG95aW5nIG91dHB1dCBhZnRlciB0aGUgYnVpbGQNCitkZXBsb3lfb3V0cHV0IDo6DQorCUBlY2hvICIiDQorDQorY2xlYW4gOjogZXh0ZXJuYWxfY2xlYW4gJChDTEVBTl9TVEVQKSBfY2xlYW4NCisNCisjIGVudHJ5IHBvaW50IGZvciBleHRlbmRpbmcgdGhlIGJ1aWxkIGNsZWFuDQorZXh0ZXJuYWxfY2xlYW4gOjoNCisJQGVjaG8gIiINCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vS2luZWN0R2VzdHVyZXNTYW1wbGUvLndycHJvamVjdCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9LaW5lY3RHZXN0dXJlc1NhbXBsZS8ud3Jwcm9qZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkZWIzYTMKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vS2luZWN0R2VzdHVyZXNTYW1wbGUvLndycHJvamVjdApAQCAtMCwwICsxLDI1OCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCis8d3J4bWw+DQorICAgIDxwcm9wZXJ0aWVzIHBsYXRmb3JtPSJWeFdvcmtzIiBwbGF0Zm9ybV9uYW1lPSJ2eHdvcmtzLTYuMyIgcm9vdD0iMSIgdHlwZT0iRG93bmxvYWRhYmxlS2VybmVsTW9kdWxlUHJvamVjdCIvPg0KKyAgICA8YXR0cmlidXRlcz4NCisgICAgICAgIDxtYXBBdHRyaWJ1dGU+DQorICAgICAgICAgICAgPGxpc3RBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98R2xvYmFsTWFjcm9zIj4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iUFJPSkVDVF9UWVBFIi8+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9IkRFRklORVMiLz4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iRVhQQU5EX0RCRyIvPg0KKyAgICAgICAgICAgIDwvbGlzdEF0dHJpYnV0ZT4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfEdsb2JhbE1hY3JvfERFRklORVMiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfEdsb2JhbE1hY3JvfEVYUEFORF9EQkciIHZhbHVlPSIwIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xHbG9iYWxNYWNyb3xQUk9KRUNUX1RZUEUiIHZhbHVlPSJES00iLz4NCisgICAgICAgICAgICA8bGlzdEF0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xJbmNsfFBQQzMyZGlhYiI+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9Ii1JJChXSU5EX0JBU0UpL3RhcmdldC9oL1dQSUxpYiIvPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSItSSQoV0lORF9CQVNFKS90YXJnZXQvaCIvPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSItSSQoV0lORF9CQVNFKS90YXJnZXQvaC93cm4vY29yZWlwIi8+DQorICAgICAgICAgICAgPC9saXN0QXR0cmlidXRlPg0KKyAgICAgICAgICAgIDxsaXN0QXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfEluY2x8UFBDMzJnbnUiPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSItSSQoV0lORF9CQVNFKS90YXJnZXQvaCIvPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSItSSQoV0lORF9CQVNFKS90YXJnZXQvaC93cm4vY29yZWlwIi8+DQorICAgICAgICAgICAgPC9saXN0QXR0cmlidXRlPg0KKyAgICAgICAgICAgIDxsaXN0QXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfEluY2x8UFBDNjAzZGlhYiI+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9Ii1JJChXSU5EX0JBU0UpL3RhcmdldC9oIi8+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9Ii1JJChXSU5EX0JBU0UpL3RhcmdldC9oL3dybi9jb3JlaXAiLz4NCisgICAgICAgICAgICA8L2xpc3RBdHRyaWJ1dGU+DQorICAgICAgICAgICAgPGxpc3RBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98SW5jbHxQUEM2MDNnbnUiPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSItSSQoV0lORF9CQVNFKS90YXJnZXQvaCIvPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSItSSQoV0lORF9CQVNFKS90YXJnZXQvaC9XUElMaWIiLz4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2gvd3JuL2NvcmVpcCIvPg0KKyAgICAgICAgICAgIDwvbGlzdEF0dHJpYnV0ZT4NCisgICAgICAgICAgICA8bGlzdEF0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xMaWJzfFBQQzMyZGlhYiI+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9IiQoV0lORF9CQVNFKS90YXJnZXQvbGliL1dQSUxpYi5hIi8+DQorICAgICAgICAgICAgPC9saXN0QXR0cmlidXRlPg0KKyAgICAgICAgICAgIDxsaXN0QXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfExpYnN8UFBDNjAzZ251Ij4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iJChXSU5EX0JBU0UpL3RhcmdldC9saWIvV1BJTGliLmEiLz4NCisgICAgICAgICAgICA8L2xpc3RBdHRyaWJ1dGU+DQorICAgICAgICAgICAgPGxpc3RBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm9zIj4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iVlhfQ1BVX0ZBTUlMWSIvPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSJDUFUiLz4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iVE9PTF9GQU1JTFkiLz4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iVE9PTCIvPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSJUT09MX1BBVEgiLz4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iQ0NfQVJDSF9TUEVDIi8+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9IkxJQlBBVEgiLz4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iTElCUyIvPg0KKyAgICAgICAgICAgIDwvbGlzdEF0dHJpYnV0ZT4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfENDX0FSQ0hfU1BFQ3x2YWx1ZXxQUEMzMmRpYWIiIHZhbHVlPSItdFBQQ0ZIOnZ4d29ya3M2MyAtWHN0bXctc2xvdyAtRFBQQzMyX2ZwNjB4Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xDQ19BUkNIX1NQRUN8dmFsdWV8UFBDMzJnbnUiIHZhbHVlPSItbWhhcmQtZmxvYXQgLW1zdHJpY3QtYWxpZ24gLW1uby1pbXBsaWNpdC1mcCAtRFBQQzMyX2ZwNjB4Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xDQ19BUkNIX1NQRUN8dmFsdWV8UFBDNjAzZGlhYiIgdmFsdWU9Ii10UFBDNjAzRkg6dnh3b3JrczYzIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xDQ19BUkNIX1NQRUN8dmFsdWV8UFBDNjAzZ251IiB2YWx1ZT0iLW1jcHU9NjAzIC1tc3RyaWN0LWFsaWduIC1tbm8taW1wbGljaXQtZnAgLW1sb25nY2FsbCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98Q1BVfHZhbHVlfFBQQzMyZGlhYiIgdmFsdWU9IlBQQzMyIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xDUFV8dmFsdWV8UFBDMzJnbnUiIHZhbHVlPSJQUEMzMiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98Q1BVfHZhbHVlfFBQQzYwM2RpYWIiIHZhbHVlPSJQUEM2MDMiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfENQVXx2YWx1ZXxQUEM2MDNnbnUiIHZhbHVlPSJQUEM2MDMiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfExJQlBBVEh8dmFsdWV8UFBDMzJkaWFiIiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xMSUJQQVRIfHZhbHVlfFBQQzMyZ251IiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xMSUJQQVRIfHZhbHVlfFBQQzYwM2RpYWIiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfExJQlBBVEh8dmFsdWV8UFBDNjAzZ251IiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xMSUJTfHZhbHVlfFBQQzMyZGlhYiIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98TElCU3x2YWx1ZXxQUEMzMmdudSIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98TElCU3x2YWx1ZXxQUEM2MDNkaWFiIiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xMSUJTfHZhbHVlfFBQQzYwM2dudSIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98VE9PTF9GQU1JTFl8dmFsdWV8UFBDMzJkaWFiIiB2YWx1ZT0iZGlhYiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98VE9PTF9GQU1JTFl8dmFsdWV8UFBDMzJnbnUiIHZhbHVlPSJnbnUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfFRPT0xfRkFNSUxZfHZhbHVlfFBQQzYwM2RpYWIiIHZhbHVlPSJkaWFiIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xUT09MX0ZBTUlMWXx2YWx1ZXxQUEM2MDNnbnUiIHZhbHVlPSJnbnUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfFRPT0xfUEFUSHx2YWx1ZXxQUEMzMmRpYWIiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfFRPT0xfUEFUSHx2YWx1ZXxQUEMzMmdudSIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98VE9PTF9QQVRIfHZhbHVlfFBQQzYwM2RpYWIiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfFRPT0xfUEFUSHx2YWx1ZXxQUEM2MDNnbnUiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfFRPT0x8dmFsdWV8UFBDMzJkaWFiIiB2YWx1ZT0iZGlhYiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98VE9PTHx2YWx1ZXxQUEMzMmdudSIgdmFsdWU9ImdudSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98VE9PTHx2YWx1ZXxQUEM2MDNkaWFiIiB2YWx1ZT0iZGlhYiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98VE9PTHx2YWx1ZXxQUEM2MDNnbnUiIHZhbHVlPSJnbnUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfFZYX0NQVV9GQU1JTFl8dmFsdWV8UFBDMzJkaWFiIiB2YWx1ZT0icHBjIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xWWF9DUFVfRkFNSUxZfHZhbHVlfFBQQzMyZ251IiB2YWx1ZT0icHBjIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xWWF9DUFVfRkFNSUxZfHZhbHVlfFBQQzYwM2RpYWIiIHZhbHVlPSJwcGMiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfFZYX0NQVV9GQU1JTFl8dmFsdWV8UFBDNjAzZ251IiB2YWx1ZT0icHBjIi8+DQorICAgICAgICAgICAgPGxpc3RBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHMiPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSJDLUNvbXBpbGVyIi8+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9IkMrKy1Db21waWxlciIvPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSJMaW5rZXIiLz4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iUGFydGlhbCBJbWFnZSBMaW5rZXIiLz4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iTGlicmFyaWFuIi8+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9IkFzc2VtYmxlciIvPg0KKyAgICAgICAgICAgIDwvbGlzdEF0dHJpYnV0ZT4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfGNtZHxQUEMzMmRpYWIiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7OyVhc3NlbWJsZXJwcmVmaXglICQoVE9PTF9QQVRIKWRjYyAlRGVidWdNb2RlRmxhZ3MlICVUb29sRmxhZ3MlICQoQURERURfQ0ZMQUdTKSAlSW5jbHVkZXMlICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICVPdXRGaWxlJSAtYyAlSW5GaWxlJSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxBc3NlbWJsZXJ8Y21kfFBQQzMyZ251IiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OzslYXNzZW1ibGVycHJlZml4JSAkKFRPT0xfUEFUSCljY3BwYyAlRGVidWdNb2RlRmxhZ3MlICVUb29sRmxhZ3MlICQoQURERURfQ0ZMQUdTKSAlSW5jbHVkZXMlICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICVPdXRGaWxlJSAtYyAlSW5GaWxlJSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxBc3NlbWJsZXJ8Y21kfFBQQzYwM2RpYWIiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7OyVhc3NlbWJsZXJwcmVmaXglICQoVE9PTF9QQVRIKWRjYyAlRGVidWdNb2RlRmxhZ3MlICVUb29sRmxhZ3MlICQoQURERURfQ0ZMQUdTKSAlSW5jbHVkZXMlICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICVPdXRGaWxlJSAtYyAlSW5GaWxlJSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxBc3NlbWJsZXJ8Y21kfFBQQzYwM2dudSIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWFzc2VtYmxlcnByZWZpeCUgJChUT09MX1BBVEgpY2NwcGMgJURlYnVnTW9kZUZsYWdzJSAlVG9vbEZsYWdzJSAkKEFEREVEX0NGTEFHUykgJUluY2x1ZGVzJSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAlT3V0RmlsZSUgLWMgJUluRmlsZSUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfGRiZ0ZsYWdzfFBQQzMyZGlhYiIgdmFsdWU9Ii1nIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxkYmdGbGFnc3xQUEMzMmdudSIgdmFsdWU9Ii1nIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxkYmdGbGFnc3xQUEM2MDNkaWFiIiB2YWx1ZT0iLWciLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfGRiZ0ZsYWdzfFBQQzYwM2dudSIgdmFsdWU9Ii1nIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxkZXJpdmVkU2lnc3xQUEMzMmRpYWIiIHZhbHVlPSIqLm8iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfGRlcml2ZWRTaWdzfFBQQzMyZ251IiB2YWx1ZT0iKi5vIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxkZXJpdmVkU2lnc3xQUEM2MDNkaWFiIiB2YWx1ZT0iKi5vIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxkZXJpdmVkU2lnc3xQUEM2MDNnbnUiIHZhbHVlPSIqLm8iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfGZsYWdzfFBQQzMyZGlhYiIgdmFsdWU9IiQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWHByZXByb2Nlc3MtYXNzZW1ibHkgLVhjcHAtbm8tc3BhY2UgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxBc3NlbWJsZXJ8ZmxhZ3N8UFBDMzJnbnUiIHZhbHVlPSIkKENDX0FSQ0hfU1BFQykgLWFuc2kgICAteGFzc2VtYmxlci13aXRoLWNwcCAtTUQgLU1QIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxmbGFnc3xQUEM2MDNkaWFiIiB2YWx1ZT0iJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YcHJlcHJvY2Vzcy1hc3NlbWJseSAtWGNwcC1uby1zcGFjZSAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxmbGFnc3xQUEM2MDNnbnUiIHZhbHVlPSIkKENDX0FSQ0hfU1BFQykgLWFuc2kgICAteGFzc2VtYmxlci13aXRoLWNwcCAtTUQgLU1QIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxub25EYmdGbGFnc3xQUEMzMmRpYWIiIHZhbHVlPSItWE8gLVhzaXplLW9wdCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxBc3NlbWJsZXJ8bm9uRGJnRmxhZ3N8UFBDMzJnbnUiIHZhbHVlPSItTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxub25EYmdGbGFnc3xQUEM2MDNkaWFiIiB2YWx1ZT0iLVhPIC1Yc2l6ZS1vcHQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfG5vbkRiZ0ZsYWdzfFBQQzYwM2dudSIgdmFsdWU9Ii1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4iLz4NCisgICAgICAgICAgICA8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxvYmplY3QiIHZhbHVlPSJ0cnVlIi8+DQorICAgICAgICAgICAgPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxBc3NlbWJsZXJ8cGFzc0FibGUiIHZhbHVlPSJmYWxzZSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxBc3NlbWJsZXJ8c2lncyIgdmFsdWU9IioucyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8Y21kfFBQQzMyZGlhYiIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWNwcGNvbXBpbGVycHJlZml4JSAkKFRPT0xfUEFUSClkY2MgJURlYnVnTW9kZUZsYWdzJSAlVG9vbEZsYWdzJSAkKEFEREVEX0MrK0ZMQUdTKSAlSW5jbHVkZXMlICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICVPdXRGaWxlJSAtYyAlSW5GaWxlJSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8Y21kfFBQQzMyZ251IiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OzslY3BwY29tcGlsZXJwcmVmaXglICQoVE9PTF9QQVRIKWNjcHBjICVEZWJ1Z01vZGVGbGFncyUgJVRvb2xGbGFncyUgJChBRERFRF9DKytGTEFHUykgJUluY2x1ZGVzJSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAlT3V0RmlsZSUgLWMgJUluRmlsZSUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfGNtZHxQUEM2MDNkaWFiIiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OzslY3BwY29tcGlsZXJwcmVmaXglICQoVE9PTF9QQVRIKWRjYyAlRGVidWdNb2RlRmxhZ3MlICVUb29sRmxhZ3MlICQoQURERURfQysrRkxBR1MpICVJbmNsdWRlcyUgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gJU91dEZpbGUlIC1jICVJbkZpbGUlIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxjbWR8UFBDNjAzZ251IiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OzslY3BwY29tcGlsZXJwcmVmaXglICQoVE9PTF9QQVRIKWNjcHBjICVEZWJ1Z01vZGVGbGFncyUgJVRvb2xGbGFncyUgJChBRERFRF9DKytGTEFHUykgJUluY2x1ZGVzJSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAlT3V0RmlsZSUgLWMgJUluRmlsZSUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfGRiZ0ZsYWdzfFBQQzMyZGlhYiIgdmFsdWU9Ii1nIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxkYmdGbGFnc3xQUEMzMmdudSIgdmFsdWU9Ii1nIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxkYmdGbGFnc3xQUEM2MDNkaWFiIiB2YWx1ZT0iLWciLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfGRiZ0ZsYWdzfFBQQzYwM2dudSIgdmFsdWU9Ii1nIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxkZXJpdmVkU2lnc3xQUEMzMmRpYWIiIHZhbHVlPSIqLm8iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfGRlcml2ZWRTaWdzfFBQQzMyZ251IiB2YWx1ZT0iKi5vIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxkZXJpdmVkU2lnc3xQUEM2MDNkaWFiIiB2YWx1ZT0iKi5vIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxkZXJpdmVkU2lnc3xQUEM2MDNnbnUiIHZhbHVlPSIqLm8iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfGZsYWdzfFBQQzMyZGlhYiIgdmFsdWU9IiQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxmbGFnc3xQUEMzMmdudSIgdmFsdWU9IiQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8ZmxhZ3N8UFBDNjAzZGlhYiIgdmFsdWU9IiQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxmbGFnc3xQUEM2MDNnbnUiIHZhbHVlPSIkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgLW1sb25nY2FsbCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8bm9uRGJnRmxhZ3N8UFBDMzJkaWFiIiB2YWx1ZT0iLVhPIC1Yc2l6ZS1vcHQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfG5vbkRiZ0ZsYWdzfFBQQzMyZ251IiB2YWx1ZT0iLU8yIC1mc3RyZW5ndGgtcmVkdWNlIC1mbm8tYnVpbHRpbiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8bm9uRGJnRmxhZ3N8UFBDNjAzZGlhYiIgdmFsdWU9Ii1YTyAtWHNpemUtb3B0Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxub25EYmdGbGFnc3xQUEM2MDNnbnUiIHZhbHVlPSItTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluIi8+DQorICAgICAgICAgICAgPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8b2JqZWN0IiB2YWx1ZT0idHJ1ZSIvPg0KKyAgICAgICAgICAgIDxib29sZWFuQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfHBhc3NBYmxlIiB2YWx1ZT0iZmFsc2UiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfHNpZ3MiIHZhbHVlPSIqLmNwcDsqLkM7Ki5jeHg7Ki5jYyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfGNtZHxQUEMzMmRpYWIiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7OyVjY29tcGlsZXJwcmVmaXglICQoVE9PTF9QQVRIKWRjYyAlRGVidWdNb2RlRmxhZ3MlICVUb29sRmxhZ3MlICQoQURERURfQ0ZMQUdTKSAlSW5jbHVkZXMlICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICVPdXRGaWxlJSAtYyAlSW5GaWxlJSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfGNtZHxQUEMzMmdudSIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWNjb21waWxlcnByZWZpeCUgJChUT09MX1BBVEgpY2NwcGMgJURlYnVnTW9kZUZsYWdzJSAlVG9vbEZsYWdzJSAkKEFEREVEX0NGTEFHUykgJUluY2x1ZGVzJSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAlT3V0RmlsZSUgLWMgJUluRmlsZSUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxjbWR8UFBDNjAzZGlhYiIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWNjb21waWxlcnByZWZpeCUgJChUT09MX1BBVEgpZGNjICVEZWJ1Z01vZGVGbGFncyUgJVRvb2xGbGFncyUgJChBRERFRF9DRkxBR1MpICVJbmNsdWRlcyUgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gJU91dEZpbGUlIC1jICVJbkZpbGUlIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8Y21kfFBQQzYwM2dudSIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWNjb21waWxlcnByZWZpeCUgJChUT09MX1BBVEgpY2NwcGMgJURlYnVnTW9kZUZsYWdzJSAlVG9vbEZsYWdzJSAkKEFEREVEX0NGTEFHUykgJUluY2x1ZGVzJSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAlT3V0RmlsZSUgLWMgJUluRmlsZSUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxkYmdGbGFnc3xQUEMzMmRpYWIiIHZhbHVlPSItZyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfGRiZ0ZsYWdzfFBQQzMyZ251IiB2YWx1ZT0iLWciLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxkYmdGbGFnc3xQUEM2MDNkaWFiIiB2YWx1ZT0iLWciLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxkYmdGbGFnc3xQUEM2MDNnbnUiIHZhbHVlPSItZyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfGRlcml2ZWRTaWdzfFBQQzMyZGlhYiIgdmFsdWU9IioubyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfGRlcml2ZWRTaWdzfFBQQzMyZ251IiB2YWx1ZT0iKi5vIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8ZGVyaXZlZFNpZ3N8UFBDNjAzZGlhYiIgdmFsdWU9IioubyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfGRlcml2ZWRTaWdzfFBQQzYwM2dudSIgdmFsdWU9IioubyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfGZsYWdzfFBQQzMyZGlhYiIgdmFsdWU9IiQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8ZmxhZ3N8UFBDMzJnbnUiIHZhbHVlPSIkKENDX0FSQ0hfU1BFQykgLWFuc2kgIC1XYWxsICAtTUQgLU1QIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8ZmxhZ3N8UFBDNjAzZGlhYiIgdmFsdWU9IiQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8ZmxhZ3N8UFBDNjAzZ251IiB2YWx1ZT0iJChDQ19BUkNIX1NQRUMpIC1hbnNpICAtV2FsbCAgLU1EIC1NUCAtbWxvbmdjYWxsIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8bm9uRGJnRmxhZ3N8UFBDMzJkaWFiIiB2YWx1ZT0iLVhPIC1Yc2l6ZS1vcHQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxub25EYmdGbGFnc3xQUEMzMmdudSIgdmFsdWU9Ii1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxub25EYmdGbGFnc3xQUEM2MDNkaWFiIiB2YWx1ZT0iLVhPIC1Yc2l6ZS1vcHQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxub25EYmdGbGFnc3xQUEM2MDNnbnUiIHZhbHVlPSItTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluIi8+DQorICAgICAgICAgICAgPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfG9iamVjdCIgdmFsdWU9InRydWUiLz4NCisgICAgICAgICAgICA8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8cGFzc0FibGUiIHZhbHVlPSJmYWxzZSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfHNpZ3MiIHZhbHVlPSIqLmMiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufGNtZHxQUEMzMmRpYWIiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7OyVhcmNoaXZlcnByZWZpeCUgJChUT09MX1BBVEgpZGFyICVUb29sRmxhZ3MlICVPdXRGaWxlJSAlT2JqZWN0cyUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufGNtZHxQUEMzMmdudSIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWFyY2hpdmVycHJlZml4JSAkKFRPT0xfUEFUSClhcnBwYyAlVG9vbEZsYWdzJSAlT3V0RmlsZSUgJU9iamVjdHMlIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxjbWR8UFBDNjAzZGlhYiIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWFyY2hpdmVycHJlZml4JSAkKFRPT0xfUEFUSClkYXIgJVRvb2xGbGFncyUgJU91dEZpbGUlICVPYmplY3RzJSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58Y21kfFBQQzYwM2dudSIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWFyY2hpdmVycHJlZml4JSAkKFRPT0xfUEFUSClhcnBwYyAlVG9vbEZsYWdzJSAlT3V0RmlsZSUgJU9iamVjdHMlIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxkYmdGbGFnc3xQUEMzMmRpYWIiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufGRiZ0ZsYWdzfFBQQzMyZ251IiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxkYmdGbGFnc3xQUEM2MDNkaWFiIiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxkYmdGbGFnc3xQUEM2MDNnbnUiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufGRlcml2ZWRTaWdzfFBQQzMyZGlhYiIgdmFsdWU9IiouYSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58ZGVyaXZlZFNpZ3N8UFBDMzJnbnUiIHZhbHVlPSIqLmEiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufGRlcml2ZWRTaWdzfFBQQzYwM2RpYWIiIHZhbHVlPSIqLmEiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufGRlcml2ZWRTaWdzfFBQQzYwM2dudSIgdmFsdWU9IiouYSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58ZmxhZ3N8UFBDMzJkaWFiIiB2YWx1ZT0iY3J1cyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58ZmxhZ3N8UFBDMzJnbnUiIHZhbHVlPSJjcnVzIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxmbGFnc3xQUEM2MDNkaWFiIiB2YWx1ZT0iY3J1cyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58ZmxhZ3N8UFBDNjAzZ251IiB2YWx1ZT0iY3J1cyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58bm9uRGJnRmxhZ3N8UFBDMzJkaWFiIiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxub25EYmdGbGFnc3xQUEMzMmdudSIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58bm9uRGJnRmxhZ3N8UFBDNjAzZGlhYiIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58bm9uRGJnRmxhZ3N8UFBDNjAzZ251IiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58b2JqZWN0IiB2YWx1ZT0iZmFsc2UiLz4NCisgICAgICAgICAgICA8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxwYXNzQWJsZSIgdmFsdWU9InRydWUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufHNpZ3MiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfGNtZHxQUEMzMmRpYWIiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7O3JtIC1mICVPdXRGaWxlJTtkZHVtcCAtTmcgJU9iamVjdHMlICVMaWJyYXJpZXMlIHwgdGNsc2ggJChXSU5EX0JBU0UpL2hvc3QvcmVzb3VyY2UvaHV0aWxzL3RjbC9tdW5jaC50Y2wgLWMgcHBjICZndDsgJChPQkpfRElSKS9jdGR0LmM7JWNjb21waWxlcnByZWZpeCUgJChUT09MX1BBVEgpZGNjICVEZWJ1Z01vZGVGbGFncyUgJChDQ19BUkNIX1NQRUMpIC1YZG9sbGFyLWluLWlkZW50IC1YZm9yY2UtZGVjbGFyYXRpb25zICQoQURERURfQ0ZMQUdTKSAlSW5jbHVkZXMlICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpICAtbyAkKE9CSl9ESVIpL2N0ZHQubyAtYyAkKE9CSl9ESVIpL2N0ZHQuYzslbGlua2VycHJlZml4JSAkKFRPT0xfUEFUSClkbGQgLXRQUENGSDp2eHdvcmtzNjMgLVggLXI1ICVUb29sRmxhZ3MlIC1vICVPdXRGaWxlJSAkKE9CSl9ESVIpL2N0ZHQubyAlT2JqZWN0cyUgJUxpYnJhcmllcyUgJChMSUJQQVRIKSAkKExJQlMpICAkKEFEREVEX0xJQlBBVEgpICQoQURERURfTElCUykgJmFtcDsmYW1wOyBpZiBbICZxdW90OyQoRVhQQU5EX0RCRykmcXVvdDsgPSAmcXVvdDsxJnF1b3Q7IF07IHRoZW4gcGxpbmsgJnF1b3Q7JEAmcXVvdDs7ZmkiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfGNtZHxQUEMzMmdudSIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7cm0gLWYgJU91dEZpbGUlO25tcHBjICVPYmplY3RzJSAlTGlicmFyaWVzJSB8IHRjbHNoICQoV0lORF9CQVNFKS9ob3N0L3Jlc291cmNlL2h1dGlscy90Y2wvbXVuY2gudGNsIC1jIHBwYyAmZ3Q7ICQoT0JKX0RJUikvY3RkdC5jOyVjY29tcGlsZXJwcmVmaXglICQoVE9PTF9QQVRIKWNjcHBjICVEZWJ1Z01vZGVGbGFncyUgJChDQ19BUkNIX1NQRUMpIC1mZG9sbGFycy1pbi1pZGVudGlmaWVycyAtV2FsbCAkKEFEREVEX0NGTEFHUykgJUluY2x1ZGVzJSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAgLW8gJChPQkpfRElSKS9jdGR0Lm8gLWMgJChPQkpfRElSKS9jdGR0LmM7JWxpbmtlcnByZWZpeCUgJChUT09MX1BBVEgpY2NwcGMgLXIgLW5vc3RkbGliIC1XbCwtWCAlVG9vbEZsYWdzJSAtbyAlT3V0RmlsZSUgJChPQkpfRElSKS9jdGR0Lm8gJU9iamVjdHMlICVMaWJyYXJpZXMlICQoTElCUEFUSCkgJChMSUJTKSAgJChBRERFRF9MSUJQQVRIKSAkKEFEREVEX0xJQlMpICZhbXA7JmFtcDsgaWYgWyAmcXVvdDskKEVYUEFORF9EQkcpJnF1b3Q7ID0gJnF1b3Q7MSZxdW90OyBdOyB0aGVuIHBsaW5rICZxdW90OyRAJnF1b3Q7O2ZpIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxjbWR8UFBDNjAzZGlhYiIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7cm0gLWYgJU91dEZpbGUlO2RkdW1wIC1OZyAlT2JqZWN0cyUgJUxpYnJhcmllcyUgfCB0Y2xzaCAkKFdJTkRfQkFTRSkvaG9zdC9yZXNvdXJjZS9odXRpbHMvdGNsL211bmNoLnRjbCAtYyBwcGMgJmd0OyAkKE9CSl9ESVIpL2N0ZHQuYzslY2NvbXBpbGVycHJlZml4JSAkKFRPT0xfUEFUSClkY2MgJURlYnVnTW9kZUZsYWdzJSAkKENDX0FSQ0hfU1BFQykgLVhkb2xsYXItaW4taWRlbnQgLVhmb3JjZS1kZWNsYXJhdGlvbnMgJChBRERFRF9DRkxBR1MpICVJbmNsdWRlcyUgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgIC1vICQoT0JKX0RJUikvY3RkdC5vIC1jICQoT0JKX0RJUikvY3RkdC5jOyVsaW5rZXJwcmVmaXglICQoVE9PTF9QQVRIKWRsZCAtdFBQQzYwM0ZIOnZ4d29ya3M2MyAtWCAtcjUgJVRvb2xGbGFncyUgLW8gJU91dEZpbGUlICQoT0JKX0RJUikvY3RkdC5vICVPYmplY3RzJSAlTGlicmFyaWVzJSAkKExJQlBBVEgpICQoTElCUykgICQoQURERURfTElCUEFUSCkgJChBRERFRF9MSUJTKSAmYW1wOyZhbXA7IGlmIFsgJnF1b3Q7JChFWFBBTkRfREJHKSZxdW90OyA9ICZxdW90OzEmcXVvdDsgXTsgdGhlbiBwbGluayAmcXVvdDskQCZxdW90OztmaSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8Y21kfFBQQzYwM2dudSIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7cm0gLWYgJU91dEZpbGUlO25tcHBjICVPYmplY3RzJSAlTGlicmFyaWVzJSB8IHRjbHNoICQoV0lORF9CQVNFKS9ob3N0L3Jlc291cmNlL2h1dGlscy90Y2wvbXVuY2gudGNsIC1jIHBwYyAmZ3Q7ICQoT0JKX0RJUikvY3RkdC5jOyVjY29tcGlsZXJwcmVmaXglICQoVE9PTF9QQVRIKWNjcHBjICVEZWJ1Z01vZGVGbGFncyUgJChDQ19BUkNIX1NQRUMpIC1mZG9sbGFycy1pbi1pZGVudGlmaWVycyAtV2FsbCAkKEFEREVEX0NGTEFHUykgJUluY2x1ZGVzJSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAgLW8gJChPQkpfRElSKS9jdGR0Lm8gLWMgJChPQkpfRElSKS9jdGR0LmM7JWxpbmtlcnByZWZpeCUgJChUT09MX1BBVEgpY2NwcGMgLXIgLW5vc3RkbGliIC1XbCwtWCAlVG9vbEZsYWdzJSAtbyAlT3V0RmlsZSUgJChPQkpfRElSKS9jdGR0Lm8gJU9iamVjdHMlICVMaWJyYXJpZXMlICQoTElCUEFUSCkgJChMSUJTKSAgJChBRERFRF9MSUJQQVRIKSAkKEFEREVEX0xJQlMpICZhbXA7JmFtcDsgaWYgWyAmcXVvdDskKEVYUEFORF9EQkcpJnF1b3Q7ID0gJnF1b3Q7MSZxdW90OyBdOyB0aGVuIHBsaW5rICZxdW90OyRAJnF1b3Q7O2ZpIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxkYmdGbGFnc3xQUEMzMmRpYWIiIHZhbHVlPSItZyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8ZGJnRmxhZ3N8UFBDMzJnbnUiIHZhbHVlPSItZyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8ZGJnRmxhZ3N8UFBDNjAzZGlhYiIgdmFsdWU9Ii1nIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxkYmdGbGFnc3xQUEM2MDNnbnUiIHZhbHVlPSItZyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8ZGVyaXZlZFNpZ3N8UFBDMzJkaWFiIiB2YWx1ZT0iKi5vdXQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfGRlcml2ZWRTaWdzfFBQQzMyZ251IiB2YWx1ZT0iKi5vdXQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfGRlcml2ZWRTaWdzfFBQQzYwM2RpYWIiIHZhbHVlPSIqLm91dCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8ZGVyaXZlZFNpZ3N8UFBDNjAzZ251IiB2YWx1ZT0iKi5vdXQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfGZsYWdzfFBQQzMyZGlhYiIgdmFsdWU9Ii1yNCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8ZmxhZ3N8UFBDMzJnbnUiIHZhbHVlPSItVCAkKFdJTkRfQkFTRSkvdGFyZ2V0L2gvdG9vbC9nbnUvbGRzY3JpcHRzL2xpbmsuT1VUIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxmbGFnc3xQUEM2MDNkaWFiIiB2YWx1ZT0iLXI0Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxmbGFnc3xQUEM2MDNnbnUiIHZhbHVlPSItVCAkKFdJTkRfQkFTRSkvdGFyZ2V0L2gvdG9vbC9nbnUvbGRzY3JpcHRzL2xpbmsuT1VUIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxub25EYmdGbGFnc3xQUEMzMmRpYWIiIHZhbHVlPSItWE8gLVhzaXplLW9wdCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8bm9uRGJnRmxhZ3N8UFBDMzJnbnUiIHZhbHVlPSItTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxub25EYmdGbGFnc3xQUEM2MDNkaWFiIiB2YWx1ZT0iLVhPIC1Yc2l6ZS1vcHQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfG5vbkRiZ0ZsYWdzfFBQQzYwM2dudSIgdmFsdWU9Ii1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4iLz4NCisgICAgICAgICAgICA8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxvYmplY3QiIHZhbHVlPSJmYWxzZSIvPg0KKyAgICAgICAgICAgIDxib29sZWFuQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfHBhc3NBYmxlIiB2YWx1ZT0iZmFsc2UiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfHNpZ3MiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8Y21kfFBQQzMyZGlhYiIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWxpbmtlcnByZWZpeCUgJChUT09MX1BBVEgpZGxkIC10UFBDRkg6dnh3b3JrczYzIC1YIC1yNSAlVG9vbEZsYWdzJSAtbyAlT3V0RmlsZSUgJU9iamVjdHMlICQoTElCUEFUSCkgJChMSUJTKSAkKEFEREVEX0xJQlBBVEgpICQoQURERURfTElCUykgICZhbXA7JmFtcDsgaWYgWyAmcXVvdDskKEVYUEFORF9EQkcpJnF1b3Q7ID0gJnF1b3Q7MSZxdW90OyBdOyB0aGVuIHBsaW5rICZxdW90OyRAJnF1b3Q7O2ZpIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfGNtZHxQUEMzMmdudSIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWxpbmtlcnByZWZpeCUgJChUT09MX1BBVEgpY2NwcGMgLXIgLW5vc3RkbGliIC1XbCwtWCAlVG9vbEZsYWdzJSAtbyAlT3V0RmlsZSUgJU9iamVjdHMlICQoTElCUEFUSCkgJChMSUJTKSAkKEFEREVEX0xJQlBBVEgpICQoQURERURfTElCUykgICZhbXA7JmFtcDsgaWYgWyAmcXVvdDskKEVYUEFORF9EQkcpJnF1b3Q7ID0gJnF1b3Q7MSZxdW90OyBdOyB0aGVuIHBsaW5rICZxdW90OyRAJnF1b3Q7O2ZpIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfGNtZHxQUEM2MDNkaWFiIiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OzslbGlua2VycHJlZml4JSAkKFRPT0xfUEFUSClkbGQgLXRQUEM2MDNGSDp2eHdvcmtzNjMgLVggLXI1ICVUb29sRmxhZ3MlIC1vICVPdXRGaWxlJSAlT2JqZWN0cyUgJChMSUJQQVRIKSAkKExJQlMpICQoQURERURfTElCUEFUSCkgJChBRERFRF9MSUJTKSAgJmFtcDsmYW1wOyBpZiBbICZxdW90OyQoRVhQQU5EX0RCRykmcXVvdDsgPSAmcXVvdDsxJnF1b3Q7IF07IHRoZW4gcGxpbmsgJnF1b3Q7JEAmcXVvdDs7ZmkiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8Y21kfFBQQzYwM2dudSIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWxpbmtlcnByZWZpeCUgJChUT09MX1BBVEgpY2NwcGMgLXIgLW5vc3RkbGliIC1XbCwtWCAlVG9vbEZsYWdzJSAtbyAlT3V0RmlsZSUgJU9iamVjdHMlICQoTElCUEFUSCkgJChMSUJTKSAkKEFEREVEX0xJQlBBVEgpICQoQURERURfTElCUykgICZhbXA7JmFtcDsgaWYgWyAmcXVvdDskKEVYUEFORF9EQkcpJnF1b3Q7ID0gJnF1b3Q7MSZxdW90OyBdOyB0aGVuIHBsaW5rICZxdW90OyRAJnF1b3Q7O2ZpIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfGRiZ0ZsYWdzfFBQQzMyZGlhYiIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxkYmdGbGFnc3xQUEMzMmdudSIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxkYmdGbGFnc3xQUEM2MDNkaWFiIiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfGRiZ0ZsYWdzfFBQQzYwM2dudSIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxkZXJpdmVkU2lnc3xQUEMzMmRpYWIiIHZhbHVlPSIqLm8iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8ZGVyaXZlZFNpZ3N8UFBDMzJnbnUiIHZhbHVlPSIqLm8iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8ZGVyaXZlZFNpZ3N8UFBDNjAzZGlhYiIgdmFsdWU9IioubyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxkZXJpdmVkU2lnc3xQUEM2MDNnbnUiIHZhbHVlPSIqLm8iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8ZmxhZ3N8UFBDMzJkaWFiIiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfGZsYWdzfFBQQzMyZ251IiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfGZsYWdzfFBQQzYwM2RpYWIiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8ZmxhZ3N8UFBDNjAzZ251IiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfG5vbkRiZ0ZsYWdzfFBQQzMyZGlhYiIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxub25EYmdGbGFnc3xQUEMzMmdudSIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxub25EYmdGbGFnc3xQUEM2MDNkaWFiIiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfG5vbkRiZ0ZsYWdzfFBQQzYwM2dudSIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxib29sZWFuQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8b2JqZWN0IiB2YWx1ZT0iZmFsc2UiLz4NCisgICAgICAgICAgICA8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfHBhc3NBYmxlIiB2YWx1ZT0idHJ1ZSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxzaWdzIiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xjbWQiIHZhbHVlPSIlbWFrZXByZWZpeCUgbWFrZSAtLW5vLXByaW50LWRpcmVjdG9yeSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98ZGVmYXVsdFNwZWMiIHZhbHVlPSJQUEM2MDNnbnUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfHJlZGlyRGlyfFBQQzMyZGlhYiIgdmFsdWU9IlBQQzMyZGlhYiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98cmVkaXJEaXJ8UFBDMzJnbnUiIHZhbHVlPSJQUEMzMmdudSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98cmVkaXJEaXJ8UFBDNjAzZGlhYiIgdmFsdWU9IlBQQzYwM2RpYWIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfHJlZGlyRGlyfFBQQzYwM2dudSIgdmFsdWU9IlBQQzYwM2dudSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98cmVkaXJSb290IiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPGxpc3RBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98c3BlY3MiPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSJQUEMzMmRpYWIiLz4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iUFBDMzJnbnUiLz4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iUFBDNjAzZGlhYiIvPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSJQUEM2MDNnbnUiLz4NCisgICAgICAgICAgICA8L2xpc3RBdHRyaWJ1dGU+DQorICAgICAgICAgICAgPGludEF0dHJpYnV0ZSBrZXk9IkJ1aWxkU3VwcG9ydEVuYWJsZWQiIHZhbHVlPSIxIi8+DQorICAgICAgICAgICAgPGxpc3RBdHRyaWJ1dGUga2V5PSJCdWlsZFN1cHBvcnRGb3JCdWlsZFNwZWNzIj4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iUFBDNjAzZ251Ii8+DQorICAgICAgICAgICAgPC9saXN0QXR0cmlidXRlPg0KKyAgICAgICAgICAgIDxib29sZWFuQXR0cmlidXRlIGtleT0iQnVpbGRUYXJnZXRDZW50cmljIiB2YWx1ZT0idHJ1ZSIvPg0KKyAgICAgICAgPC9tYXBBdHRyaWJ1dGU+DQorICAgIDwvYXR0cmlidXRlcz4NCisgICAgPGJ1aWxkdGFyZ2V0cz4NCisgICAgICAgIDxidWlsZHRhcmdldCBidWlsZHRvb2w9IkxpbmtlciIgbmFtZT0iS2luZWN0R2VzdHVyZXNTYW1wbGUiIHBhc3NlZD0iZmFsc2UiIHRhcmdldG5hbWU9IktpbmVjdEdlc3R1cmVzU2FtcGxlIj4NCisgICAgICAgICAgICA8Y29udGVudHM+DQorICAgICAgICAgICAgICAgIDxidWlsZHRhcmdldHJlZmVyZW5jZSBuYW1lPSIvS2luZWN0R2VzdHVyZXNTYW1wbGUvS2luZWN0R2VzdHVyZXNTYW1wbGVfcGFydGlhbEltYWdlIi8+DQorICAgICAgICAgICAgPC9jb250ZW50cz4NCisgICAgICAgIDwvYnVpbGR0YXJnZXQ+DQorICAgICAgICA8YnVpbGR0YXJnZXQgYnVpbGR0b29sPSJQYXJ0aWFsIEltYWdlIExpbmtlciIgbmFtZT0iS2luZWN0R2VzdHVyZXNfcGFydGlhbEltYWdlIiBwYXNzZWQ9InRydWUiIHRhcmdldG5hbWU9IktpbmVjdEdlc3R1cmVzU2FtcGxlX3BhcnRpYWxJbWFnZSI+DQorICAgICAgICAgICAgPGNvbnRlbnRzPg0KKyAgICAgICAgICAgICAgICA8Zm9sZGVyIG5hbWU9Ii9LaW5lY3RHZXN0dXJlc1NhbXBsZSIgcmVjdXJzaXZlPSJ0cnVlIi8+DQorICAgICAgICAgICAgPC9jb250ZW50cz4NCisgICAgICAgIDwvYnVpbGR0YXJnZXQ+DQorICAgIDwvYnVpbGR0YXJnZXRzPg0KKzwvd3J4bWw+DQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvdnh3b3Jrcy02LjMvdGFyZ2V0L3NyYy9kZW1vL0tpbmVjdEdlc3R1cmVzU2FtcGxlL015Um9ib3QuY3BwIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvdnh3b3Jrcy02LjMvdGFyZ2V0L3NyYy9kZW1vL0tpbmVjdEdlc3R1cmVzU2FtcGxlL015Um9ib3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2OTJlNTAKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vS2luZWN0R2VzdHVyZXNTYW1wbGUvTXlSb2JvdC5jcHAKQEAgLTAsMCArMSwyMzcgQEAKKyNpbmNsdWRlICJXUElMaWIuaCINCisjaW5jbHVkZSAiTWF0aC5oIg0KKw0KKyNkZWZpbmUgUEkgMy4xNDE1OQ0KKw0KKy8vQ29uc3RhbnRzIHdoaWNoIGRlZmluZSB0aGUgdmFsaWQgYXJtIHBvc2l0aW9ucw0KKyNkZWZpbmUgQVJNX01BWF9BTkdMRSAxMDUNCisjZGVmaW5lIEFSTV9NSU5fQU5HTEUgLTkwDQorI2RlZmluZSBaX1BMQU5FX1RPTEVSQU5DRSAwLjMJLyogSW4gbWV0ZXJzICovDQorDQorLy9Db25zdGFudHMgd2hpY2ggZGVmaW5lIHRoZSAidHJpZ2dlciIgYW5nbGVzIGZvciB0aGUgdmFyaW91cyBidXR0b25zDQorI2RlZmluZSBMRUdfRk9SV0FSRCAtMTEwDQorI2RlZmluZSBMRUdfQkFDS1dBUkQgLTgwDQorI2RlZmluZSBMRUdfT1VUIC03NQ0KKyNkZWZpbmUgSEVBRF9MRUZUIDk4DQorI2RlZmluZSBIRUFEX1JJR0hUIDgyDQorDQorLyoqDQorICogVGhpcyBpcyBhIHByb2dyYW0gdGhhdCBkZW1vbnN0cmF0ZXMgZ2VzdHVyZSBwcm9jZXNzaW5nIG9uIHRoZSByb2JvdCB1c2luZyBDKysNCisgKiBUaGUgYXV0b25vbW91cyBzZWN0aW9uIG9mIHRoaXMgY29kZSBpbXBsZW1lbnRzIHRoZSBzYW1lIGdlc3R1cmVzIGFzIHRoZSBGUkMgS2luZWN0IFNlcnZlcg0KKyAqIFRoZXNlIGdlc3R1cmVzIGFyZSBkZXNjcmliZWQgaW4gdGhlIEdldHRpbmcgU3RhcnRlZCB3aXRoIHRoZSBNaWNyb3NvZnQgS2luZWN0IGZvciBGUkMgZG9jdW1lbnQNCisgKiBUaGUgYXJtIGdlc3R1cmVzIGFyZSBtYXBwZWQgdG8gdGFuayBkcml2ZSB3aXRoIHRoZSBheGlzIHNjYWxlZCB0byAxLzMgcG93ZXINCisgKiBUaGUgYnV0dG9ucyBhcmUgbm90IG1hcHBlZCB0byBhbnkgYWN0aW9uLCB0aGV5IGFyZSBzdG9yZWQgaW4gaW5kaXZpZHVhbCBib29sZWFuIHZhcmlhYmxlcw0KKyAqIG5hbWVkIGJhc2VkIG9uIHRoZSBnZXN0dXJlLg0KKyAqLyANCitjbGFzcyBSb2JvdERlbW8gOiBwdWJsaWMgU2ltcGxlUm9ib3QNCit7DQorCVJvYm90RHJpdmUgbXlSb2JvdDsgLy8gcm9ib3QgZHJpdmUgc3lzdGVtDQorCUpveXN0aWNrIHN0aWNrOyAvLyBvbmx5IGpveXN0aWNrDQorCUtpbmVjdCAqa2luZWN0Ow0KKwkvL1NtYXJ0RGFzaGJvYXJkICpkYXNoOyAgIC8vT3B0aW9uYWwgU21hcnREYXNoYm9hcmQgbG9nZ2luZw0KKw0KK3B1YmxpYzoNCisJUm9ib3REZW1vKHZvaWQpOg0KKwkJbXlSb2JvdCgxLCAyKSwJLy8gdGhlc2UgbXVzdCBiZSBpbml0aWFsaXplZCBpbiB0aGUgc2FtZSBvcmRlcg0KKwkJc3RpY2soMSkJCS8vIGFzIHRoZXkgYXJlIGRlY2xhcmVkIGFib3ZlLg0KKwl7DQorCQlteVJvYm90LlNldEV4cGlyYXRpb24oMC4xKTsNCisJCWtpbmVjdCA9IEtpbmVjdDo6R2V0SW5zdGFuY2UoKTsNCisJCS8vZGFzaCA9IFNtYXJ0RGFzaGJvYXJkOjpHZXRJbnN0YW5jZSgpOwkJLy9PcHRpb25hbCBTbWFydERhc2hib2FyZCBsb2dnaW5nDQorCX0NCisJDQorCS8qKg0KKwkgKiBGdW5jdGlvbiB0byBwcm9jZXNzIGEgcGFpciBvZiBqb2ludHMgaW50byBhbiBhbmdsZSBpbiB0aGUgWFkgcGxhbmUuIFRoZSBqb2ludHMgYXJlIHByb2plY3RlZCBpbnRvDQorCSAqIHRoZSBYWSBwbGFuZSBvZiB0aGUgS2luZWN0LCB0aGVuIGFuIGFuZ2xlIGlzIGNhbGN1bGF0ZWQgdXNpbmcgb25lIGpvaW50IGFzIHRoZSBvcmlnaW4gYW5kIHRoZQ0KKwkgKiBYLWF4aXMgYXMgdGhlIHJlZmVyZW5jZS4gVGhlIFgtYXhpcyBjYW4gb3B0aW9uYWxseSBiZSBtaXJyb3JlZCBpbiBvcmRlciB0byBhdm9pZCB0aGUgZGlzY29udGludWl0eQ0KKwkgKiBvZiB0aGUgYXRhbjIgZnVuY3Rpb24uDQorCSAqIEBwYXJhbSBvcmlnaW4gVGhlIGpvaW50IHRvIHVzZSBhcyB0aGUgb3JpZ2luIGZvciB0aGUgY2FsY3VsYXRpb24NCisJICogQHBhcmFtIG1lYXN1cmVkIFRoZSBzZWNvbmQgcG9pbnQgdG8gdXNlIGFzIGZvciB0aGUgYW5nbGUgY2FsY3VsYXRpb24NCisJICogQHBhcmFtIG1pcnJvcmVkIFdoZXRoZXIgdG8gbWlycm9yIHRoZSBYLWF4aXMgb3Igbm90DQorCSAqIEByZXR1cm4gQW5nbGUgaW4gZGVncmVlcyByZWZlcmVuY2VkIGZyb20gdGhlIFgtYXhpcw0KKwkgKi8NCisJZG91YmxlIEFuZ2xlWFkoU2tlbGV0b246OkpvaW50IG9yaWdpbiwgU2tlbGV0b246OkpvaW50IG1lYXN1cmVkLCBVSU5UOCBtaXJyb3JlZCl7DQorICAgICAgICByZXR1cm4gKGF0YW4yKChtZWFzdXJlZC55LSBvcmlnaW4ueSksIChtaXJyb3JlZCkgPyAob3JpZ2luLnggLSBtZWFzdXJlZC54KSA6IChtZWFzdXJlZC54IC0gb3JpZ2luLngpKSoxODAvUEkpOw0KKyAgICB9DQorDQorCS8qKg0KKwkgKiBGdW50aW9uIHRvIHByb2Nlc3MgYSBwYWlyIG9mIGpvaW50cyBpbnRvIGFuIGFuZ2xlIGluIHRoZSBZWiBwbGFuZS4gVGhlIGpvaW50IGFyZSBwcm9qZWN0ZWQgaW50bw0KKwkgKiB0aGUgWVogcGxhbmUgb2YgdGhlIEtpbmVjdCwgdGhhbiBhbiBhbmdsZSBpcyBjYWxjdWxhdGVkIHVzaW5nIG9uZSBqb2ludCBhcyB0aGUgb3JpZ2luIGFuZCB0aGUNCisJICogWi1heGlzIGFzIHRoZSByZWZlcmVuY2UuVGhlIFotYXhpcyBjYW4gb3B0aW9uYWxseSBiZSBtaXJyb3JlZCBpbiBvcmRlciB0byBhdm9pZCB0aGUgZGlzY29udGludWl0eQ0KKwkgKiBvZiB0aGUgYXRhbjIgZnVuY3Rpb24uDQorCSAqIEBwYXJhbSBvcmlnaW4gVGhlIGpvaW50IHRvIHVzZSBhcyB0aGUgb3JpZ2luIGZvciB0aGUgYW5nbGUgY2FsY3VsYXRpb24NCisJICogQHBhcmFtIG1lYXN1cmVkIFRoZSBzZWNvbmQgcG9pbnQgdG8gdXNlIGFzIGZvciB0aGUgYW5nbGUgY2FsY3VsYXRpb24NCisJICogQHBhcmFtIG1pcnJvcmVkIFdoZXRoZXIgdG8gbWlycm9yIHRoZSBaLWF4aXMgb3Igbm90DQorCSAqIEByZXR1cm4gQW5nbGUgaW4gZGVncmVlcyByZWZlcmVuY2VkIGZyb20gdGhlIFotYXhpcw0KKwkgKi8NCisgICAgZG91YmxlIEFuZ2xlWVooU2tlbGV0b246OkpvaW50IG9yaWdpbiwgU2tlbGV0b246OkpvaW50IG1lYXN1cmVkLCBVSU5UOCBtaXJyb3JlZCl7DQorICAgICAgICByZXR1cm4gKGF0YW4yKChtZWFzdXJlZC55LSBvcmlnaW4ueSksIChtaXJyb3JlZCkgPyAob3JpZ2luLnogLSBtZWFzdXJlZC56KSA6IChtZWFzdXJlZC56IC0gb3JpZ2luLnopKSoxODAvUEkpOw0KKw0KKyAgICB9DQorDQorICAgIC8qKg0KKyAgICAgKiBGdW5jdGlvbiB0byBkZXRlcm1pbmUgd2hldGhlciBvciBub3QgdHdvIGpvaW50cyBhcmUgaW4gYXBwcm94aW1hdGVseSB0aGUgc2FtZSBYWSBwbGFuZQ0KKyAgICAgKiBJRS4gSWYgdGhleSBoYXZlIGFwcHJveGltYXRlbHkgdGhlIHNhbWUgeiBjb29yZGluYXRlcw0KKyAgICAgKiBAcGFyYW0gb3JpZ2luIFRoZSBmaXJzdCBqb2ludCB0byBiZSB1c2VkIGluIHRoZSBjb21wYXJpc29uDQorICAgICAqIEBwYXJhbSBtZWFzdXJlZCBUaGUgc2Vjb25kIGpvaW50IHRvIGJlIHVzZWQgaW4gdGhlIGNvbXBhcmlzb24NCisgICAgICogQHJldHVybiBXaGV0aGVyIG9yIG5vdCB0aGUgam9pbnRzIGFyZSBpbiBhcHByb3hpbWF0ZWx5IHRoZSBzYW1lIFhZIHBsYW5lDQorICAgICAqLw0KKyAgICBib29sIEluU2FtZVpQbGFuZShTa2VsZXRvbjo6Sm9pbnQgb3JpZ2luLCBTa2VsZXRvbjo6Sm9pbnQgbWVhc3VyZWQsIGRvdWJsZSB0b2xlcmFuY2UpDQorICAgICAgICB7DQorICAgICAgICAgICAgcmV0dXJuIGZhYnMobWVhc3VyZWQueiAtIG9yaWdpbi56KSA8IHRvbGVyYW5jZTsNCisgICAgICAgIH0NCisNCisgICAgLyoqDQorICAgICAqIENvbnZlcnRzIGFuIGlucHV0IHZhbHVlIGluIHRoZSBnaXZlbiBpbnB1dCByYW5nZSBpbnRvIGFuIG91dHB1dCB2YWx1ZSBhbG9uZyB0aGUgZ2l2ZW4NCisgICAgICogb3V0cHV0IHJhbmdlLg0KKyAgICAgKiBJZiB0aGUgcmVzdWx0IHdvdWxkIGJlIG91dHNpZGUgb2YgdGhlIGdpdmVuIG91dHB1dCByYW5nZSwgaXQgaXMgY29uc3RyYWluZWQgdG8gdGhlIA0KKyAgICAgKiBvdXRwdXQgcmFuZ2UuDQorICAgICAqIEBwYXJhbSBpbnB1dCBBbiBpbnB1dCB2YWx1ZSB3aXRoaW4gdGhlIGdpdmVuIGlucHV0IHJhbmdlLg0KKyAgICAgKiBAcGFyYW0gaW5wdXRNaW4gVGhlIG1pbmltdW0gZXhwZWN0ZWQgaW5wdXQgdmFsdWUuDQorICAgICAqIEBwYXJhbSBpbnB1dE1heCBUaGUgbWF4aW11bSBleHBlY3RlZCBpbnB1dCB2YWx1ZS4NCisgICAgICogQHBhcmFtIG91dHB1dE1pbiBUaGUgbWluaW11bSBleHBlY3RlZCBvdXRwdXQgdmFsdWUuDQorICAgICAqIEBwYXJhbSBvdXRwdXRNYXggVGhlIG1heGltdW0gZXhwZWN0ZWQgb3V0cHV0IHZhbHVlLg0KKyAgICAgKiBAcmV0dXJuIEFuIG91dHB1dCB2YWx1ZSB3aXRoaW4gdGhlIGdpdmVuIG91dHB1dCByYW5nZSBwcm9wb3J0aW9uYWwgdG8gdGhlIGlucHV0Lg0KKyAgICAgKi8NCisgICAgZG91YmxlIENvZXJjZVRvUmFuZ2UoZG91YmxlIGlucHV0LCBkb3VibGUgaW5wdXRNaW4sIGRvdWJsZSBpbnB1dE1heCwgZG91YmxlIG91dHB1dE1pbiwgZG91YmxlIG91dHB1dE1heCkNCisgICAgICAgIHsNCisgICAgICAgICAgICAvLyBEZXRlcm1pbmUgdGhlIGNlbnRlciBvZiB0aGUgaW5wdXQgcmFuZ2UNCisgICAgICAgICAgICBkb3VibGUgaW5wdXRDZW50ZXIgPSBmYWJzKGlucHV0TWF4IC0gaW5wdXRNaW4pIC8gMiArIGlucHV0TWluOw0KKyAgICAgICAgICAgIGRvdWJsZSBvdXRwdXRDZW50ZXIgPSBmYWJzKG91dHB1dE1heCAtIG91dHB1dE1pbikgLyAyICsgb3V0cHV0TWluOw0KKw0KKyAgICAgICAgICAgIC8vIFNjYWxlIHRoZSBpbnB1dCByYW5nZSB0byB0aGUgb3V0cHV0IHJhbmdlDQorICAgICAgICAgICAgZG91YmxlIHNjYWxlID0gKG91dHB1dE1heCAtIG91dHB1dE1pbikgLyAoaW5wdXRNYXggLSBpbnB1dE1pbik7DQorDQorICAgICAgICAgICAgLy8gQXBwbHkgdGhlIHRyYW5zZm9ybWF0aW9uDQorICAgICAgICAgICAgZG91YmxlIHJlc3VsdCA9IChpbnB1dCArIC1pbnB1dENlbnRlcikgKiBzY2FsZSArIG91dHB1dENlbnRlcjsNCisNCisgICAgICAgICAgICAvLyBDb25zdHJhaW4gdG8gdGhlIHJlc3VsdCByYW5nZQ0KKyAgICAgICAgICAgIHJldHVybiBtYXgobWluKHJlc3VsdCwgb3V0cHV0TWF4KSwgb3V0cHV0TWluKTsNCisgICAgICAgIH0NCisNCisJLyoqDQorCSAqIFRhbmsgZHJpdmUgdXNpbmcgdGhlIEtpbmVjdC4NCisJICovDQorCXZvaWQgQXV0b25vbW91cyh2b2lkKQ0KKwl7DQorCQlkb3VibGUgbGVmdEF4aXMsIHJpZ2h0QXhpczsNCisJCWRvdWJsZSBsZWZ0QW5nbGUsIHJpZ2h0QW5nbGUsIGhlYWRBbmdsZSwgcmlnaHRMZWdBbmdsZSwgbGVmdExlZ0FuZ2xlLCByaWdodExlZ1laLCBsZWZ0TGVnWVo9MDsNCisJCWJvb2wgZGF0YVdpdGhpbkV4cGVjdGVkUmFuZ2U7DQorCQlib29sIGJ1dHRvbnNbOF07DQorDQorCQkNCisJCXdoaWxlIChJc0F1dG9ub21vdXMoKSkNCisJCXsNCisJCQkvKiBPbmx5IHByb2Nlc3MgZGF0YSBpZiBza2VsZXRvbiBpcyB0cmFja2VkICovDQorCQkJaWYgKGtpbmVjdC0+R2V0VHJhY2tpbmdTdGF0ZSgpID09IEtpbmVjdDo6a1RyYWNrZWQpIHsNCisJCQkNCisJCQkJCQkJLyogRGV0ZXJtaW5lIGFuZ2xlIG9mIGVhY2ggYXJtIGFuZCBtYXAgdG8gcmFuZ2UgLTEsMSAqLw0KKwkJCSAgICAgICAgICAgICAgICBsZWZ0QW5nbGUgPSBBbmdsZVhZKGtpbmVjdC0+R2V0U2tlbGV0b24oKS5HZXRTaG91bGRlckxlZnQoKSwga2luZWN0LT5HZXRTa2VsZXRvbigpLkdldFdyaXN0TGVmdCgpLCB0cnVlKTsNCisJCQkgICAgICAgICAgICAgICAgcmlnaHRBbmdsZSA9IEFuZ2xlWFkoa2luZWN0LT5HZXRTa2VsZXRvbigpLkdldFNob3VsZGVyUmlnaHQoKSwga2luZWN0LT5HZXRTa2VsZXRvbigpLkdldFdyaXN0UmlnaHQoKSwgZmFsc2UpOw0KKwkJCSAgICAgICAgICAgICAgICBsZWZ0QXhpcyA9IENvZXJjZVRvUmFuZ2UobGVmdEFuZ2xlLCAtNzAsIDcwLCAtMSwgMSk7DQorCQkJICAgICAgICAgICAgICAgIHJpZ2h0QXhpcyA9IENvZXJjZVRvUmFuZ2UocmlnaHRBbmdsZSwgLTcwLCA3MCwgLTEsIDEpOw0KKw0KKwkJCQkJCQkvKiBDaGVjayBpZiBhcm1zIGFyZSB3aXRoaW4gdmFsaWQgcmFuZ2UgYW5kIGF0IGFwcHJveGltYXRlbHkgdGhlIHNhbWUgei12YWx1ZSAqLw0KKwkJCSAgICAgICAgICAgICAgICBkYXRhV2l0aGluRXhwZWN0ZWRSYW5nZSA9IChsZWZ0QW5nbGUgPCBBUk1fTUFYX0FOR0xFKSAmJiAobGVmdEFuZ2xlID4gQVJNX01JTl9BTkdMRSkNCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKHJpZ2h0QW5nbGUgPCBBUk1fTUFYX0FOR0xFKSAmJiAocmlnaHRBbmdsZSA+IEFSTV9NSU5fQU5HTEUpOw0KKwkJCSAgICAgICAgICAgICAgICBkYXRhV2l0aGluRXhwZWN0ZWRSYW5nZSA9IGRhdGFXaXRoaW5FeHBlY3RlZFJhbmdlICYmDQorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJblNhbWVaUGxhbmUoa2luZWN0LT5HZXRTa2VsZXRvbigpLkdldFNob3VsZGVyTGVmdCgpLA0KKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtpbmVjdC0+R2V0U2tlbGV0b24oKS5HZXRXcmlzdExlZnQoKSwNCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBaX1BMQU5FX1RPTEVSQU5DRSkgJiYNCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluU2FtZVpQbGFuZShraW5lY3QtPkdldFNrZWxldG9uKCkuR2V0U2hvdWxkZXJSaWdodCgpLA0KKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtpbmVjdC0+R2V0U2tlbGV0b24oKS5HZXRXcmlzdFJpZ2h0KCksDQorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWl9QTEFORV9UT0xFUkFOQ0UpOw0KKwkJCQkJCQkNCisJCQkJCQkJLyogRGV0ZXJtaW5lIHRoZSBoZWFkIGFuZ2xlIGFuZCB1c2UgaXQgdG8gc2V0IHRoZSBIZWFkIGJ1dHRvbnMgKi8NCisJCQkgICAgICAgICAgICAgICAgaGVhZEFuZ2xlID0gQW5nbGVYWShraW5lY3QtPkdldFNrZWxldG9uKCkuR2V0U2hvdWxkZXJDZW50ZXIoKSwga2luZWN0LT5HZXRTa2VsZXRvbigpLkdldEhlYWQoKSwgZmFsc2UpOw0KKwkJCSAgICAgICAgICAgICAgICBidXR0b25zWzBdID0gaGVhZEFuZ2xlID4gSEVBRF9MRUZUOw0KKwkJCSAgICAgICAgICAgICAgICBidXR0b25zWzFdID0gaGVhZEFuZ2xlIDwgSEVBRF9SSUdIVDsNCisNCisJCQkJCQkJLyogQ2FsY3VsYXRlIHRoZSBsZWcgYW5nbGVzIGluIHRoZSBYWSBwbGFuZSBhbmQgdXNlIHRoZW0gdG8gc2V0IHRoZSBMZWcgT3V0IGJ1dHRvbnMgKi8NCisJCQkgICAgICAgICAgICAgICAgbGVmdExlZ0FuZ2xlID0gQW5nbGVYWShraW5lY3QtPkdldFNrZWxldG9uKCkuR2V0SGlwTGVmdCgpLCBraW5lY3QtPkdldFNrZWxldG9uKCkuR2V0QW5rbGVMZWZ0KCksIHRydWUpOw0KKwkJCSAgICAgICAgICAgICAgICByaWdodExlZ0FuZ2xlID0gQW5nbGVYWShraW5lY3QtPkdldFNrZWxldG9uKCkuR2V0SGlwUmlnaHQoKSwga2luZWN0LT5HZXRTa2VsZXRvbigpLkdldEFua2xlUmlnaHQoKSwgZmFsc2UpOw0KKwkJCSAgICAgICAgICAgICAgICBidXR0b25zWzJdID0gbGVmdExlZ0FuZ2xlID4gTEVHX09VVDsNCisJCQkgICAgICAgICAgICAgICAgYnV0dG9uc1szXSA9IHJpZ2h0TGVnQW5nbGUgPiBMRUdfT1VUOw0KKw0KKwkJCQkJCQkvKiBDYWxjdWxhdGUgdGhlIGxlZyBhbmdsZSBpbiB0aGUgWVogcGxhbmUgYW5kIHVzZSB0aGVtIHRvIHNldCB0aGUgTGVnIEZvcndhcmQgYW5kIExlZyBCYWNrIGJ1dHRvbnMgKi8NCisJCQkgICAgICAgICAgICAgICAgbGVmdExlZ1laID0gQW5nbGVZWihraW5lY3QtPkdldFNrZWxldG9uKCkuR2V0SGlwTGVmdCgpLCBraW5lY3QtPkdldFNrZWxldG9uKCkuR2V0QW5rbGVMZWZ0KCksIGZhbHNlKTsNCisJCQkgICAgICAgICAgICAgICAgcmlnaHRMZWdZWiA9IEFuZ2xlWVooa2luZWN0LT5HZXRTa2VsZXRvbigpLkdldEhpcFJpZ2h0KCksIGtpbmVjdC0+R2V0U2tlbGV0b24oKS5HZXRBbmtsZVJpZ2h0KCksIGZhbHNlKTsNCisJCQkgICAgICAgICAgICAgICAgYnV0dG9uc1s0XSA9IHJpZ2h0TGVnWVogPCBMRUdfRk9SV0FSRDsNCisJCQkgICAgICAgICAgICAgICAgYnV0dG9uc1s1XSA9IHJpZ2h0TGVnWVogPiBMRUdfQkFDS1dBUkQ7DQorCQkJICAgICAgICAgICAgICAgIGJ1dHRvbnNbNl0gPSByaWdodExlZ1laIDwgTEVHX0ZPUldBUkQ7DQorCQkJICAgICAgICAgICAgICAgIGJ1dHRvbnNbN10gPSByaWdodExlZ1laID4gTEVHX0JBQ0tXQVJEOw0KKw0KKwkJCSAgICAgICAgICAgICAgICBpZiAoZGF0YVdpdGhpbkV4cGVjdGVkUmFuZ2Upew0KKwkJCQkJCQkJLyoqDQorCQkJCQkJCQkgKiBEcml2ZXMgdXNpbmcgdGhlIEtpbmVjdCBheGVzIHNjYWxlZCB0byAxLzMgcG93ZXINCisJCQkJCQkJCSAqIEF4ZXMgYXJlIGludmVydGVkIHNvIGFybXMgdXAgPT0gam95c3RpY2sgcHVzaGVkIGF3YXkgZnJvbSB5b3UNCisJCQkJCQkJCSAqLw0KKwkJCSAgICAgICAgICAgICAgICAgICAgbXlSb2JvdC5UYW5rRHJpdmUoLWxlZnRBeGlzKi4zMywgLXJpZ2h0QXhpcyouMzMpOw0KKwkJCQkJCQkJDQorCQkJCQkJCQkvKioNCisJCQkJCQkJCSAqIERvIHNvbWV0aGluZyB3aXRoIGJvb2xlYW4gImJ1dHRvbnMiIGhlcmUNCisJCQkJCQkJCSAqLw0KKw0KKwkJCQkJCQkJLyogT3B0aW9uYWwgU21hcnREYXNoYm9hcmQgZGlzcGxheSBvZiBLaW5lY3QgdmFsdWVzICovDQorCQkJCQkJCQkvL2Rhc2gtPlB1dERvdWJsZSgiTGVmdCBBcm0iLCAtbGVmdEF4aXMpOw0KKwkJCQkJCQkJLy9kYXNoLT5QdXREb3VibGUoIlJpZ2h0IEFybSIsIC1yaWdodEF4aXMpOw0KKwkJCQkJCQkJLy9kYXNoLT5QdXRCb29sZWFuKCJIZWFkIExlZnQiLCBidXR0b25zWzBdKTsNCisJCQkJCQkJCS8vZGFzaC0+UHV0Qm9vbGVhbigiSGVhZCBSaWdodCIsIGJ1dHRvbnNbMV0pOw0KKwkJCQkJCQkJLy8uLi5ldGMuLi4NCisJCQkgICAgICAgICAgICAgICAgfQ0KKwkJCSAgICAgICAgICAgICAgICBlbHNlew0KKwkJCSAgICAgICAgICAgICAgICAgICAgDQorCQkJCQkJCQkvKiBBcm1zIGFyZSBvdXRzaWRlIHZhbGlkIHJhbmdlICovDQorDQorCQkJCQkJCQlteVJvYm90LlRhbmtEcml2ZSgwLjAsIDAuMCk7DQorDQorCQkJCQkJCQkvKioNCisJCQkJCQkJCSAqIERvIGRlZmF1bHQgYmVoYXZpb3Igd2l0aCBib29sZWFuICJidXR0b25zIiBoZXJlDQorCQkJCQkJCQkgKi8NCisNCisJCQkJCQkJCS8qIE9wdGlvbmFsIFNtYXJ0RGFzaGJvYXJkIGRpc3BsYXkgb2YgS2luZWN0IHZhbHVlcyAqLw0KKwkJCQkJCQkJLy9kYXNoLT5QdXREb3VibGUoIkxlZnQgQXJtIiwgMCk7DQorCQkJCQkJCQkvL2Rhc2gtPlB1dERvdWJsZSgiUmlnaHQgQXJtIiwgMCk7DQorCQkJCQkJCQkvL2Rhc2gtPlB1dEJvb2xlYW4oIkhlYWQgTGVmdCIsIGZhbHNlKTsNCisJCQkJCQkJCS8vZGFzaC0+UHV0Qm9vbGVhbigiSGVhZCBSaWdodCIsIGZhbHNlKTsNCisJCQkJCQkJCS8vLi4uZXRjLi4uDQorCQkJICAgICAgICAgICAgICAgIH0NCisJCQkgICAgICAgICAgICB9DQorCQkJICAgICAgICAgICAgZWxzZXsNCisJCQkgICAgICAgICAgICAgICAgDQorCQkJCQkJCS8qIFNrZWxldG9uIG5vdCB0cmFja2VkICovDQorDQorCQkJCQkJCW15Um9ib3QuVGFua0RyaXZlKDAuMCwgMC4wKTsNCisNCisJCQkJCQkJLyoqDQorCQkJCQkJCSogRG8gZGVmYXVsdCBiZWhhdmlvciB3aXRoIGJvb2xlYW4gImJ1dHRvbnMiIGhlcmUNCisJCQkJCQkJKi8NCisNCisJCQkJCQkJLyogT3B0aW9uYWwgU21hcnREYXNoYm9hcmQgZGlzcGxheSBvZiBLaW5lY3QgdmFsdWVzICovDQorCQkJCQkJCS8vZGFzaC0+UHV0RG91YmxlKCJMZWZ0IEFybSIsIDApOw0KKwkJCQkJCQkvL2Rhc2gtPlB1dERvdWJsZSgiUmlnaHQgQXJtIiwgMCk7DQorCQkJCQkJCS8vZGFzaC0+UHV0Qm9vbGVhbigiSGVhZCBMZWZ0IiwgZmFsc2UpOw0KKwkJCQkJCQkvL2Rhc2gtPlB1dEJvb2xlYW4oIkhlYWQgUmlnaHQiLCBmYWxzZSk7DQorCQkJCQkJCS8vLi4uZXRjLi4uDQorCQkJICAgICAgICAgICAgfQ0KKwkJCVdhaXQoMC4wMSk7DQorCQl9DQorDQorCX0NCisNCisJLyoqDQorCSAqIFJ1bnMgdGhlIG1vdG9ycyB3aXRoIGFyY2FkZSBzdGVlcmluZy4gDQorCSAqLw0KKwl2b2lkIE9wZXJhdG9yQ29udHJvbCh2b2lkKQ0KKwl7DQorCQlteVJvYm90LlNldFNhZmV0eUVuYWJsZWQodHJ1ZSk7DQorCQl3aGlsZSAoSXNPcGVyYXRvckNvbnRyb2woKSkNCisJCXsNCisJCQlteVJvYm90LkFyY2FkZURyaXZlKHN0aWNrKTsgLy8gZHJpdmUgd2l0aCBhcmNhZGUgc3R5bGUgKHVzZSByaWdodCBzdGljaykNCisJCQlXYWl0KDAuMDA1KTsJCQkJLy8gd2FpdCBmb3IgYSBtb3RvciB1cGRhdGUgdGltZQ0KKwkJfQ0KKwl9DQorfTsNCisNCitTVEFSVF9ST0JPVF9DTEFTUyhSb2JvdERlbW8pOw0KKw0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9LaW5lY3RHZXN0dXJlc1NhbXBsZS9zYW1wbGUucHJvcGVydGllcyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9LaW5lY3RHZXN0dXJlc1NhbXBsZS9zYW1wbGUucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZmM4OTVlCi0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvdnh3b3Jrcy02LjMvdGFyZ2V0L3NyYy9kZW1vL0tpbmVjdEdlc3R1cmVzU2FtcGxlL3NhbXBsZS5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMiBAQAorcHJvamVjdC50eXBlPURvd25sb2FkYWJsZUtlcm5lbE1vZHVsZVByb2plY3QNCitwbGF0Zm9ybS5pZD1WeFdvcmtzDQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvdnh3b3Jrcy02LjMvdGFyZ2V0L3NyYy9kZW1vL0tpbmVjdEdlc3R1cmVzU2FtcGxlL3NhbXBsZS50eHQgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vS2luZWN0R2VzdHVyZXNTYW1wbGUvc2FtcGxlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NmQ2NmY2Ci0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvdnh3b3Jrcy02LjMvdGFyZ2V0L3NyYy9kZW1vL0tpbmVjdEdlc3R1cmVzU2FtcGxlL3NhbXBsZS50eHQKQEAgLTAsMCArMSw3IEBACitGUkMgS2luZWN0IEdlc3R1cmVzIFNhbXBsZQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorVGhpcyBwcm9ncmFtIGRlbW9uc3RyYXRlcyByb2JvdCBzaWRlIHByb2Nlc3Npbmcgb2YgdGhlIEtpbmVjdCBkYXRhDQordXNpbmcgQysrLiBUaGlzIHByb2dyYW0gaW1wbGVtZW50cyB0aGUgc2FtZSBnZXN0dXJlcyB0aGF0IGFyZSBpbiB0aGUNCitGUkMgS2luZWN0IFNlcnZlciBhbmQgYXJlIGRlc2NyaWJlZCBpbiB0aGUgR2V0dGluZyBTdGFydGVkIHdpdGggdGhlDQorTWljcm9zb2Z0IEtpbmVjdCBmb3IgRlJDIGRvY3VtZW50LiBUaGlzIHByb2dyYW0gbWFwcyB0aGUgcmVzdWx0aW5nDQorYXhlcyBmcm9tIGVhY2ggYXJtIHRvIHRhbmsgZHJpdmUgYXQgMS8zIHBvd2VyLgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9LaW5lY3RTdGlja0V4YW1wbGUvLmNwcm9qZWN0IGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvdnh3b3Jrcy02LjMvdGFyZ2V0L3NyYy9kZW1vL0tpbmVjdFN0aWNrRXhhbXBsZS8uY3Byb2plY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzAzZTRjZAotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9LaW5lY3RTdGlja0V4YW1wbGUvLmNwcm9qZWN0CkBAIC0wLDAgKzEsMzAgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQorPD9maWxlVmVyc2lvbiA0LjAuMD8+DQorDQorPGNwcm9qZWN0Pg0KKzxzdG9yYWdlTW9kdWxlIG1vZHVsZUlkPSJvcmcuZWNsaXBzZS5jZHQuY29yZS5zZXR0aW5ncyI+DQorPGNjb25maWd1cmF0aW9uIGlkPSJvcmcuZWNsaXBzZS5jZHQuY29yZS5kZWZhdWx0LmNvbmZpZy4yODM5NjcxMDYiPg0KKzxzdG9yYWdlTW9kdWxlIGJ1aWxkU3lzdGVtSWQ9Im9yZy5lY2xpcHNlLmNkdC5jb3JlLmRlZmF1bHRDb25maWdEYXRhUHJvdmlkZXIiIGlkPSJvcmcuZWNsaXBzZS5jZHQuY29yZS5kZWZhdWx0LmNvbmZpZy4yODM5NjcxMDYiIG1vZHVsZUlkPSJvcmcuZWNsaXBzZS5jZHQuY29yZS5zZXR0aW5ncyIgbmFtZT0iQ29uZmlndXJhdGlvbiI+DQorPGV4dGVybmFsU2V0dGluZ3MvPg0KKzxleHRlbnNpb25zPg0KKzxleHRlbnNpb24gaWQ9ImNvbS53aW5kcml2ZXIuaWRlLmNvcmUuV1JTY2FubmVySW5mb1Byb3ZpZGVyIiBwb2ludD0ib3JnLmVjbGlwc2UuY2R0LmNvcmUuU2Nhbm5lckluZm9Qcm92aWRlciIvPg0KKzxleHRlbnNpb24gaWQ9ImNvbS53aW5kcml2ZXIuaWRlLmNvcmUuV1JFbGZQYXJzZXJWeFdvcmtzIiBwb2ludD0ib3JnLmVjbGlwc2UuY2R0LmNvcmUuQmluYXJ5UGFyc2VyIi8+DQorPGV4dGVuc2lvbiBpZD0ib3JnLmVjbGlwc2UuY2R0LmNvcmUuR05VX0VMRiIgcG9pbnQ9Im9yZy5lY2xpcHNlLmNkdC5jb3JlLkJpbmFyeVBhcnNlciIvPg0KKzwvZXh0ZW5zaW9ucz4NCis8L3N0b3JhZ2VNb2R1bGU+DQorPHN0b3JhZ2VNb2R1bGUgbW9kdWxlSWQ9Im9yZy5lY2xpcHNlLmNkdC5jb3JlLmV4dGVybmFsU2V0dGluZ3MiLz4NCis8c3RvcmFnZU1vZHVsZSBtb2R1bGVJZD0ib3JnLmVjbGlwc2UuY2R0LmNvcmUucGF0aGVudHJ5Ij4NCis8cGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0iIi8+DQorPHBhdGhlbnRyeSBraW5kPSJvdXQiIHBhdGg9IiIvPg0KKzxwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJjb20ud2luZHJpdmVyLmlkZS5jb3JlLldSX0NPTlRBSU5FUiIvPg0KKzxwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJjb20ud2luZHJpdmVyLmlkZS5jb3JlLmJ1aWxkLm1vZGVsLldSX1VTRVJERUZJTkVEX0NPTlRBSU5FUiIvPg0KKzwvc3RvcmFnZU1vZHVsZT4NCis8c3RvcmFnZU1vZHVsZSBtb2R1bGVJZD0ic2Nhbm5lckNvbmZpZ3VyYXRpb24iLz4NCis8c3RvcmFnZU1vZHVsZSBtb2R1bGVJZD0idXNlcmRlZmluZWRDb250YWluZXIiPg0KKzxpbmRleEFsbEZpbGVzIHZhbHVlPSJmYWxzZSIvPg0KKzxpbml0aWFsaXplZCB2YWx1ZT0idHJ1ZSIvPg0KKzwvc3RvcmFnZU1vZHVsZT4NCis8c3RvcmFnZU1vZHVsZSBtb2R1bGVJZD0ib3JnLmVjbGlwc2UuY2R0LmNvcmUubGFuZ3VhZ2UubWFwcGluZyIvPg0KKzwvY2NvbmZpZ3VyYXRpb24+DQorPC9zdG9yYWdlTW9kdWxlPg0KKzwvY3Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvdnh3b3Jrcy02LjMvdGFyZ2V0L3NyYy9kZW1vL0tpbmVjdFN0aWNrRXhhbXBsZS8ucHJvamVjdCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9LaW5lY3RTdGlja0V4YW1wbGUvLnByb2plY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmRhZTFhNAotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9LaW5lY3RTdGlja0V4YW1wbGUvLnByb2plY3QKQEAgLTAsMCArMSwyMCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCis8cHJvamVjdERlc2NyaXB0aW9uPg0KKwk8bmFtZT5LaW5lY3RTdGlja0V4YW1wbGU8L25hbWU+DQorCTxjb21tZW50PjwvY29tbWVudD4NCisJPHByb2plY3RzPg0KKwk8L3Byb2plY3RzPg0KKwk8YnVpbGRTcGVjPg0KKwkJPGJ1aWxkQ29tbWFuZD4NCisJCQk8bmFtZT5jb20ud2luZHJpdmVyLmlkZS5jb3JlLndyYnVpbGRlcjwvbmFtZT4NCisJCQk8YXJndW1lbnRzPg0KKwkJCTwvYXJndW1lbnRzPg0KKwkJPC9idWlsZENvbW1hbmQ+DQorCTwvYnVpbGRTcGVjPg0KKwk8bmF0dXJlcz4NCisJCTxuYXR1cmU+Y29tLndpbmRyaXZlci5pZGUuY29yZS53cm5hdHVyZTwvbmF0dXJlPg0KKwkJPG5hdHVyZT5jb20ud2luZHJpdmVyLmlkZS5jb3JlLndyY29yZW5hdHVyZTwvbmF0dXJlPg0KKwkJPG5hdHVyZT5vcmcuZWNsaXBzZS5jZHQuY29yZS5jbmF0dXJlPC9uYXR1cmU+DQorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmNkdC5jb3JlLmNjbmF0dXJlPC9uYXR1cmU+DQorCTwvbmF0dXJlcz4NCis8L3Byb2plY3REZXNjcmlwdGlvbj4NCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vS2luZWN0U3RpY2tFeGFtcGxlLy53cm1ha2VmaWxlIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvdnh3b3Jrcy02LjMvdGFyZ2V0L3NyYy9kZW1vL0tpbmVjdFN0aWNrRXhhbXBsZS8ud3JtYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMWRkN2Y4Ci0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvdnh3b3Jrcy02LjMvdGFyZ2V0L3NyYy9kZW1vL0tpbmVjdFN0aWNrRXhhbXBsZS8ud3JtYWtlZmlsZQpAQCAtMCwwICsxLDQ4IEBACisjIFRoZSBmaWxlICIud3JtYWtlZmlsZSIgaXMgdGhlIHRlbXBsYXRlIHVzZWQgYnkgdGhlIFdpbmQgUml2ZXIgV29ya2JlbmNoIHRvDQorIyBnZW5lcmF0ZSB0aGUgbWFrZWZpbGVzIG9mIHRoaXMgcHJvamVjdC4gQWRkIHVzZXItc3BlY2lmaWMgYnVpbGQgdGFyZ2V0cyBhbmQNCisjIG1ha2UgcnVsZXMgb25seSghKSBpbiB0aGlzIHByb2plY3QncyAiLndybWFrZWZpbGUiIGZpbGUuIFRoZXNlIHdpbGwgdGhlbiBiZQ0KKyMgYXV0b21hdGljYWxseSBkdW1wZWQgaW50byB0aGUgbWFrZWZpbGVzLg0KKw0KK1dJTkRfSE9NRSA6PSAkKHN1YnN0IFwsLywkKFdJTkRfSE9NRSkpDQorV0lORF9CQVNFIDo9ICQoc3Vic3QgXCwvLCQoV0lORF9CQVNFKSkNCitXSU5EX1VTUiA6PSAkKHN1YnN0IFwsLywkKFdJTkRfVVNSKSkNCisNCithbGwgOiBwcmVfYnVpbGQgbWFpbl9hbGwgcG9zdF9idWlsZA0KKw0KK19jbGVhbiA6Og0KKwlAZWNobyAibWFrZTogcmVtb3ZpbmcgdGFyZ2V0cyBhbmQgb2JqZWN0cyBvZiBgcHdkYCINCisNCislSURFX0dFTkVSQVRFRCUNCisNCistaW5jbHVkZSAkKFBSSl9ST09UX0RJUikvKi5tYWtlZmlsZQ0KKw0KKy1pbmNsdWRlICoubWFrZWZpbGUNCisNCittYWluX2FsbCA6IGV4dGVybmFsX2J1aWxkICQoUFJPSkVDVF9UQVJHRVRTKQ0KKwlAZWNobyAibWFrZTogYnVpbHQgdGFyZ2V0cyBvZiBgcHdkYCINCisNCisjIGVudHJ5IHBvaW50IGZvciBleHRlbmRpbmcgdGhlIGJ1aWxkDQorZXh0ZXJuYWxfYnVpbGQgOjoNCisJQGVjaG8gIiINCisNCisjIG1haW4gZW50cnkgcG9pbnQgZm9yIHByZSBwcm9jZXNzaW5nIHByaW9yIHRvIHRoZSBidWlsZA0KK3ByZV9idWlsZCA6OiAkKFBSRV9CVUlMRF9TVEVQKSBnZW5lcmF0ZV9zb3VyY2VzDQorCUBlY2hvICIiDQorDQorIyBlbnRyeSBwb2ludCBmb3IgZ2VuZXJhdGluZyBzb3VyY2VzIHByaW9yIHRvIHRoZSBidWlsZA0KK2dlbmVyYXRlX3NvdXJjZXMgOjoNCisJQGVjaG8gIiINCisNCisjIG1haW4gZW50cnkgcG9pbnQgZm9yIHBvc3QgcHJvY2Vzc2luZyBhZnRlciB0aGUgYnVpbGQNCitwb3N0X2J1aWxkIDo6ICQoUE9TVF9CVUlMRF9TVEVQKSBkZXBsb3lfb3V0cHV0DQorCUBlY2hvICIiDQorDQorIyBlbnRyeSBwb2ludCBmb3IgZGVwbG95aW5nIG91dHB1dCBhZnRlciB0aGUgYnVpbGQNCitkZXBsb3lfb3V0cHV0IDo6DQorCUBlY2hvICIiDQorDQorY2xlYW4gOjogZXh0ZXJuYWxfY2xlYW4gJChDTEVBTl9TVEVQKSBfY2xlYW4NCisNCisjIGVudHJ5IHBvaW50IGZvciBleHRlbmRpbmcgdGhlIGJ1aWxkIGNsZWFuDQorZXh0ZXJuYWxfY2xlYW4gOjoNCisJQGVjaG8gIiINCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vS2luZWN0U3RpY2tFeGFtcGxlLy53cnByb2plY3QgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vS2luZWN0U3RpY2tFeGFtcGxlLy53cnByb2plY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDUwNWVkMgotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9LaW5lY3RTdGlja0V4YW1wbGUvLndycHJvamVjdApAQCAtMCwwICsxLDI1OCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCis8d3J4bWw+DQorICAgIDxwcm9wZXJ0aWVzIHBsYXRmb3JtPSJWeFdvcmtzIiBwbGF0Zm9ybV9uYW1lPSJ2eHdvcmtzLTYuMyIgcm9vdD0iMSIgdHlwZT0iRG93bmxvYWRhYmxlS2VybmVsTW9kdWxlUHJvamVjdCIvPg0KKyAgICA8YXR0cmlidXRlcz4NCisgICAgICAgIDxtYXBBdHRyaWJ1dGU+DQorICAgICAgICAgICAgPGxpc3RBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98R2xvYmFsTWFjcm9zIj4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iUFJPSkVDVF9UWVBFIi8+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9IkRFRklORVMiLz4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iRVhQQU5EX0RCRyIvPg0KKyAgICAgICAgICAgIDwvbGlzdEF0dHJpYnV0ZT4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfEdsb2JhbE1hY3JvfERFRklORVMiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfEdsb2JhbE1hY3JvfEVYUEFORF9EQkciIHZhbHVlPSIwIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xHbG9iYWxNYWNyb3xQUk9KRUNUX1RZUEUiIHZhbHVlPSJES00iLz4NCisgICAgICAgICAgICA8bGlzdEF0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xJbmNsfFBQQzMyZGlhYiI+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9Ii1JJChXSU5EX0JBU0UpL3RhcmdldC9oL1dQSUxpYiIvPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSItSSQoV0lORF9CQVNFKS90YXJnZXQvaCIvPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSItSSQoV0lORF9CQVNFKS90YXJnZXQvaC93cm4vY29yZWlwIi8+DQorICAgICAgICAgICAgPC9saXN0QXR0cmlidXRlPg0KKyAgICAgICAgICAgIDxsaXN0QXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfEluY2x8UFBDMzJnbnUiPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSItSSQoV0lORF9CQVNFKS90YXJnZXQvaCIvPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSItSSQoV0lORF9CQVNFKS90YXJnZXQvaC93cm4vY29yZWlwIi8+DQorICAgICAgICAgICAgPC9saXN0QXR0cmlidXRlPg0KKyAgICAgICAgICAgIDxsaXN0QXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfEluY2x8UFBDNjAzZGlhYiI+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9Ii1JJChXSU5EX0JBU0UpL3RhcmdldC9oIi8+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9Ii1JJChXSU5EX0JBU0UpL3RhcmdldC9oL3dybi9jb3JlaXAiLz4NCisgICAgICAgICAgICA8L2xpc3RBdHRyaWJ1dGU+DQorICAgICAgICAgICAgPGxpc3RBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98SW5jbHxQUEM2MDNnbnUiPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSItSSQoV0lORF9CQVNFKS90YXJnZXQvaCIvPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSItSSQoV0lORF9CQVNFKS90YXJnZXQvaC9XUElMaWIiLz4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2gvd3JuL2NvcmVpcCIvPg0KKyAgICAgICAgICAgIDwvbGlzdEF0dHJpYnV0ZT4NCisgICAgICAgICAgICA8bGlzdEF0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xMaWJzfFBQQzMyZGlhYiI+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9IiQoV0lORF9CQVNFKS90YXJnZXQvbGliL1dQSUxpYi5hIi8+DQorICAgICAgICAgICAgPC9saXN0QXR0cmlidXRlPg0KKyAgICAgICAgICAgIDxsaXN0QXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfExpYnN8UFBDNjAzZ251Ij4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iJChXSU5EX0JBU0UpL3RhcmdldC9saWIvV1BJTGliLmEiLz4NCisgICAgICAgICAgICA8L2xpc3RBdHRyaWJ1dGU+DQorICAgICAgICAgICAgPGxpc3RBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm9zIj4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iVlhfQ1BVX0ZBTUlMWSIvPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSJDUFUiLz4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iVE9PTF9GQU1JTFkiLz4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iVE9PTCIvPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSJUT09MX1BBVEgiLz4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iQ0NfQVJDSF9TUEVDIi8+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9IkxJQlBBVEgiLz4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iTElCUyIvPg0KKyAgICAgICAgICAgIDwvbGlzdEF0dHJpYnV0ZT4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfENDX0FSQ0hfU1BFQ3x2YWx1ZXxQUEMzMmRpYWIiIHZhbHVlPSItdFBQQ0ZIOnZ4d29ya3M2MyAtWHN0bXctc2xvdyAtRFBQQzMyX2ZwNjB4Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xDQ19BUkNIX1NQRUN8dmFsdWV8UFBDMzJnbnUiIHZhbHVlPSItbWhhcmQtZmxvYXQgLW1zdHJpY3QtYWxpZ24gLW1uby1pbXBsaWNpdC1mcCAtRFBQQzMyX2ZwNjB4Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xDQ19BUkNIX1NQRUN8dmFsdWV8UFBDNjAzZGlhYiIgdmFsdWU9Ii10UFBDNjAzRkg6dnh3b3JrczYzIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xDQ19BUkNIX1NQRUN8dmFsdWV8UFBDNjAzZ251IiB2YWx1ZT0iLW1jcHU9NjAzIC1tc3RyaWN0LWFsaWduIC1tbm8taW1wbGljaXQtZnAgLW1sb25nY2FsbCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98Q1BVfHZhbHVlfFBQQzMyZGlhYiIgdmFsdWU9IlBQQzMyIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xDUFV8dmFsdWV8UFBDMzJnbnUiIHZhbHVlPSJQUEMzMiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98Q1BVfHZhbHVlfFBQQzYwM2RpYWIiIHZhbHVlPSJQUEM2MDMiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfENQVXx2YWx1ZXxQUEM2MDNnbnUiIHZhbHVlPSJQUEM2MDMiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfExJQlBBVEh8dmFsdWV8UFBDMzJkaWFiIiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xMSUJQQVRIfHZhbHVlfFBQQzMyZ251IiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xMSUJQQVRIfHZhbHVlfFBQQzYwM2RpYWIiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfExJQlBBVEh8dmFsdWV8UFBDNjAzZ251IiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xMSUJTfHZhbHVlfFBQQzMyZGlhYiIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98TElCU3x2YWx1ZXxQUEMzMmdudSIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98TElCU3x2YWx1ZXxQUEM2MDNkaWFiIiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xMSUJTfHZhbHVlfFBQQzYwM2dudSIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98VE9PTF9GQU1JTFl8dmFsdWV8UFBDMzJkaWFiIiB2YWx1ZT0iZGlhYiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98VE9PTF9GQU1JTFl8dmFsdWV8UFBDMzJnbnUiIHZhbHVlPSJnbnUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfFRPT0xfRkFNSUxZfHZhbHVlfFBQQzYwM2RpYWIiIHZhbHVlPSJkaWFiIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xUT09MX0ZBTUlMWXx2YWx1ZXxQUEM2MDNnbnUiIHZhbHVlPSJnbnUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfFRPT0xfUEFUSHx2YWx1ZXxQUEMzMmRpYWIiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfFRPT0xfUEFUSHx2YWx1ZXxQUEMzMmdudSIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98VE9PTF9QQVRIfHZhbHVlfFBQQzYwM2RpYWIiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfFRPT0xfUEFUSHx2YWx1ZXxQUEM2MDNnbnUiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfFRPT0x8dmFsdWV8UFBDMzJkaWFiIiB2YWx1ZT0iZGlhYiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98VE9PTHx2YWx1ZXxQUEMzMmdudSIgdmFsdWU9ImdudSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98VE9PTHx2YWx1ZXxQUEM2MDNkaWFiIiB2YWx1ZT0iZGlhYiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98VE9PTHx2YWx1ZXxQUEM2MDNnbnUiIHZhbHVlPSJnbnUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfFZYX0NQVV9GQU1JTFl8dmFsdWV8UFBDMzJkaWFiIiB2YWx1ZT0icHBjIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xWWF9DUFVfRkFNSUxZfHZhbHVlfFBQQzMyZ251IiB2YWx1ZT0icHBjIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xWWF9DUFVfRkFNSUxZfHZhbHVlfFBQQzYwM2RpYWIiIHZhbHVlPSJwcGMiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfFZYX0NQVV9GQU1JTFl8dmFsdWV8UFBDNjAzZ251IiB2YWx1ZT0icHBjIi8+DQorICAgICAgICAgICAgPGxpc3RBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHMiPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSJDLUNvbXBpbGVyIi8+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9IkMrKy1Db21waWxlciIvPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSJMaW5rZXIiLz4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iUGFydGlhbCBJbWFnZSBMaW5rZXIiLz4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iTGlicmFyaWFuIi8+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9IkFzc2VtYmxlciIvPg0KKyAgICAgICAgICAgIDwvbGlzdEF0dHJpYnV0ZT4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfGNtZHxQUEMzMmRpYWIiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7OyVhc3NlbWJsZXJwcmVmaXglICQoVE9PTF9QQVRIKWRjYyAlRGVidWdNb2RlRmxhZ3MlICVUb29sRmxhZ3MlICQoQURERURfQ0ZMQUdTKSAlSW5jbHVkZXMlICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICVPdXRGaWxlJSAtYyAlSW5GaWxlJSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxBc3NlbWJsZXJ8Y21kfFBQQzMyZ251IiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OzslYXNzZW1ibGVycHJlZml4JSAkKFRPT0xfUEFUSCljY3BwYyAlRGVidWdNb2RlRmxhZ3MlICVUb29sRmxhZ3MlICQoQURERURfQ0ZMQUdTKSAlSW5jbHVkZXMlICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICVPdXRGaWxlJSAtYyAlSW5GaWxlJSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxBc3NlbWJsZXJ8Y21kfFBQQzYwM2RpYWIiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7OyVhc3NlbWJsZXJwcmVmaXglICQoVE9PTF9QQVRIKWRjYyAlRGVidWdNb2RlRmxhZ3MlICVUb29sRmxhZ3MlICQoQURERURfQ0ZMQUdTKSAlSW5jbHVkZXMlICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICVPdXRGaWxlJSAtYyAlSW5GaWxlJSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxBc3NlbWJsZXJ8Y21kfFBQQzYwM2dudSIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWFzc2VtYmxlcnByZWZpeCUgJChUT09MX1BBVEgpY2NwcGMgJURlYnVnTW9kZUZsYWdzJSAlVG9vbEZsYWdzJSAkKEFEREVEX0NGTEFHUykgJUluY2x1ZGVzJSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAlT3V0RmlsZSUgLWMgJUluRmlsZSUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfGRiZ0ZsYWdzfFBQQzMyZGlhYiIgdmFsdWU9Ii1nIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxkYmdGbGFnc3xQUEMzMmdudSIgdmFsdWU9Ii1nIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxkYmdGbGFnc3xQUEM2MDNkaWFiIiB2YWx1ZT0iLWciLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfGRiZ0ZsYWdzfFBQQzYwM2dudSIgdmFsdWU9Ii1nIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxkZXJpdmVkU2lnc3xQUEMzMmRpYWIiIHZhbHVlPSIqLm8iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfGRlcml2ZWRTaWdzfFBQQzMyZ251IiB2YWx1ZT0iKi5vIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxkZXJpdmVkU2lnc3xQUEM2MDNkaWFiIiB2YWx1ZT0iKi5vIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxkZXJpdmVkU2lnc3xQUEM2MDNnbnUiIHZhbHVlPSIqLm8iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfGZsYWdzfFBQQzMyZGlhYiIgdmFsdWU9IiQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWHByZXByb2Nlc3MtYXNzZW1ibHkgLVhjcHAtbm8tc3BhY2UgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxBc3NlbWJsZXJ8ZmxhZ3N8UFBDMzJnbnUiIHZhbHVlPSIkKENDX0FSQ0hfU1BFQykgLWFuc2kgICAteGFzc2VtYmxlci13aXRoLWNwcCAtTUQgLU1QIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxmbGFnc3xQUEM2MDNkaWFiIiB2YWx1ZT0iJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YcHJlcHJvY2Vzcy1hc3NlbWJseSAtWGNwcC1uby1zcGFjZSAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxmbGFnc3xQUEM2MDNnbnUiIHZhbHVlPSIkKENDX0FSQ0hfU1BFQykgLWFuc2kgICAteGFzc2VtYmxlci13aXRoLWNwcCAtTUQgLU1QIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxub25EYmdGbGFnc3xQUEMzMmRpYWIiIHZhbHVlPSItWE8gLVhzaXplLW9wdCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxBc3NlbWJsZXJ8bm9uRGJnRmxhZ3N8UFBDMzJnbnUiIHZhbHVlPSItTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxub25EYmdGbGFnc3xQUEM2MDNkaWFiIiB2YWx1ZT0iLVhPIC1Yc2l6ZS1vcHQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfG5vbkRiZ0ZsYWdzfFBQQzYwM2dudSIgdmFsdWU9Ii1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4iLz4NCisgICAgICAgICAgICA8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxvYmplY3QiIHZhbHVlPSJ0cnVlIi8+DQorICAgICAgICAgICAgPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxBc3NlbWJsZXJ8cGFzc0FibGUiIHZhbHVlPSJmYWxzZSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxBc3NlbWJsZXJ8c2lncyIgdmFsdWU9IioucyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8Y21kfFBQQzMyZGlhYiIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWNwcGNvbXBpbGVycHJlZml4JSAkKFRPT0xfUEFUSClkY2MgJURlYnVnTW9kZUZsYWdzJSAlVG9vbEZsYWdzJSAkKEFEREVEX0MrK0ZMQUdTKSAlSW5jbHVkZXMlICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICVPdXRGaWxlJSAtYyAlSW5GaWxlJSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8Y21kfFBQQzMyZ251IiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OzslY3BwY29tcGlsZXJwcmVmaXglICQoVE9PTF9QQVRIKWNjcHBjICVEZWJ1Z01vZGVGbGFncyUgJVRvb2xGbGFncyUgJChBRERFRF9DKytGTEFHUykgJUluY2x1ZGVzJSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAlT3V0RmlsZSUgLWMgJUluRmlsZSUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfGNtZHxQUEM2MDNkaWFiIiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OzslY3BwY29tcGlsZXJwcmVmaXglICQoVE9PTF9QQVRIKWRjYyAlRGVidWdNb2RlRmxhZ3MlICVUb29sRmxhZ3MlICQoQURERURfQysrRkxBR1MpICVJbmNsdWRlcyUgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gJU91dEZpbGUlIC1jICVJbkZpbGUlIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxjbWR8UFBDNjAzZ251IiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OzslY3BwY29tcGlsZXJwcmVmaXglICQoVE9PTF9QQVRIKWNjcHBjICVEZWJ1Z01vZGVGbGFncyUgJVRvb2xGbGFncyUgJChBRERFRF9DKytGTEFHUykgJUluY2x1ZGVzJSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAlT3V0RmlsZSUgLWMgJUluRmlsZSUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfGRiZ0ZsYWdzfFBQQzMyZGlhYiIgdmFsdWU9Ii1nIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxkYmdGbGFnc3xQUEMzMmdudSIgdmFsdWU9Ii1nIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxkYmdGbGFnc3xQUEM2MDNkaWFiIiB2YWx1ZT0iLWciLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfGRiZ0ZsYWdzfFBQQzYwM2dudSIgdmFsdWU9Ii1nIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxkZXJpdmVkU2lnc3xQUEMzMmRpYWIiIHZhbHVlPSIqLm8iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfGRlcml2ZWRTaWdzfFBQQzMyZ251IiB2YWx1ZT0iKi5vIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxkZXJpdmVkU2lnc3xQUEM2MDNkaWFiIiB2YWx1ZT0iKi5vIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxkZXJpdmVkU2lnc3xQUEM2MDNnbnUiIHZhbHVlPSIqLm8iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfGZsYWdzfFBQQzMyZGlhYiIgdmFsdWU9IiQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxmbGFnc3xQUEMzMmdudSIgdmFsdWU9IiQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8ZmxhZ3N8UFBDNjAzZGlhYiIgdmFsdWU9IiQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxmbGFnc3xQUEM2MDNnbnUiIHZhbHVlPSIkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgLW1sb25nY2FsbCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8bm9uRGJnRmxhZ3N8UFBDMzJkaWFiIiB2YWx1ZT0iLVhPIC1Yc2l6ZS1vcHQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfG5vbkRiZ0ZsYWdzfFBQQzMyZ251IiB2YWx1ZT0iLU8yIC1mc3RyZW5ndGgtcmVkdWNlIC1mbm8tYnVpbHRpbiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8bm9uRGJnRmxhZ3N8UFBDNjAzZGlhYiIgdmFsdWU9Ii1YTyAtWHNpemUtb3B0Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxub25EYmdGbGFnc3xQUEM2MDNnbnUiIHZhbHVlPSItTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluIi8+DQorICAgICAgICAgICAgPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8b2JqZWN0IiB2YWx1ZT0idHJ1ZSIvPg0KKyAgICAgICAgICAgIDxib29sZWFuQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfHBhc3NBYmxlIiB2YWx1ZT0iZmFsc2UiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfHNpZ3MiIHZhbHVlPSIqLmNwcDsqLkM7Ki5jeHg7Ki5jYyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfGNtZHxQUEMzMmRpYWIiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7OyVjY29tcGlsZXJwcmVmaXglICQoVE9PTF9QQVRIKWRjYyAlRGVidWdNb2RlRmxhZ3MlICVUb29sRmxhZ3MlICQoQURERURfQ0ZMQUdTKSAlSW5jbHVkZXMlICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICVPdXRGaWxlJSAtYyAlSW5GaWxlJSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfGNtZHxQUEMzMmdudSIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWNjb21waWxlcnByZWZpeCUgJChUT09MX1BBVEgpY2NwcGMgJURlYnVnTW9kZUZsYWdzJSAlVG9vbEZsYWdzJSAkKEFEREVEX0NGTEFHUykgJUluY2x1ZGVzJSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAlT3V0RmlsZSUgLWMgJUluRmlsZSUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxjbWR8UFBDNjAzZGlhYiIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWNjb21waWxlcnByZWZpeCUgJChUT09MX1BBVEgpZGNjICVEZWJ1Z01vZGVGbGFncyUgJVRvb2xGbGFncyUgJChBRERFRF9DRkxBR1MpICVJbmNsdWRlcyUgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gJU91dEZpbGUlIC1jICVJbkZpbGUlIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8Y21kfFBQQzYwM2dudSIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWNjb21waWxlcnByZWZpeCUgJChUT09MX1BBVEgpY2NwcGMgJURlYnVnTW9kZUZsYWdzJSAlVG9vbEZsYWdzJSAkKEFEREVEX0NGTEFHUykgJUluY2x1ZGVzJSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAlT3V0RmlsZSUgLWMgJUluRmlsZSUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxkYmdGbGFnc3xQUEMzMmRpYWIiIHZhbHVlPSItZyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfGRiZ0ZsYWdzfFBQQzMyZ251IiB2YWx1ZT0iLWciLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxkYmdGbGFnc3xQUEM2MDNkaWFiIiB2YWx1ZT0iLWciLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxkYmdGbGFnc3xQUEM2MDNnbnUiIHZhbHVlPSItZyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfGRlcml2ZWRTaWdzfFBQQzMyZGlhYiIgdmFsdWU9IioubyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfGRlcml2ZWRTaWdzfFBQQzMyZ251IiB2YWx1ZT0iKi5vIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8ZGVyaXZlZFNpZ3N8UFBDNjAzZGlhYiIgdmFsdWU9IioubyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfGRlcml2ZWRTaWdzfFBQQzYwM2dudSIgdmFsdWU9IioubyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfGZsYWdzfFBQQzMyZGlhYiIgdmFsdWU9IiQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8ZmxhZ3N8UFBDMzJnbnUiIHZhbHVlPSIkKENDX0FSQ0hfU1BFQykgLWFuc2kgIC1XYWxsICAtTUQgLU1QIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8ZmxhZ3N8UFBDNjAzZGlhYiIgdmFsdWU9IiQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8ZmxhZ3N8UFBDNjAzZ251IiB2YWx1ZT0iJChDQ19BUkNIX1NQRUMpIC1hbnNpICAtV2FsbCAgLU1EIC1NUCAtbWxvbmdjYWxsIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8bm9uRGJnRmxhZ3N8UFBDMzJkaWFiIiB2YWx1ZT0iLVhPIC1Yc2l6ZS1vcHQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxub25EYmdGbGFnc3xQUEMzMmdudSIgdmFsdWU9Ii1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxub25EYmdGbGFnc3xQUEM2MDNkaWFiIiB2YWx1ZT0iLVhPIC1Yc2l6ZS1vcHQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxub25EYmdGbGFnc3xQUEM2MDNnbnUiIHZhbHVlPSItTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluIi8+DQorICAgICAgICAgICAgPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfG9iamVjdCIgdmFsdWU9InRydWUiLz4NCisgICAgICAgICAgICA8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8cGFzc0FibGUiIHZhbHVlPSJmYWxzZSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfHNpZ3MiIHZhbHVlPSIqLmMiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufGNtZHxQUEMzMmRpYWIiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7OyVhcmNoaXZlcnByZWZpeCUgJChUT09MX1BBVEgpZGFyICVUb29sRmxhZ3MlICVPdXRGaWxlJSAlT2JqZWN0cyUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufGNtZHxQUEMzMmdudSIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWFyY2hpdmVycHJlZml4JSAkKFRPT0xfUEFUSClhcnBwYyAlVG9vbEZsYWdzJSAlT3V0RmlsZSUgJU9iamVjdHMlIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxjbWR8UFBDNjAzZGlhYiIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWFyY2hpdmVycHJlZml4JSAkKFRPT0xfUEFUSClkYXIgJVRvb2xGbGFncyUgJU91dEZpbGUlICVPYmplY3RzJSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58Y21kfFBQQzYwM2dudSIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWFyY2hpdmVycHJlZml4JSAkKFRPT0xfUEFUSClhcnBwYyAlVG9vbEZsYWdzJSAlT3V0RmlsZSUgJU9iamVjdHMlIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxkYmdGbGFnc3xQUEMzMmRpYWIiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufGRiZ0ZsYWdzfFBQQzMyZ251IiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxkYmdGbGFnc3xQUEM2MDNkaWFiIiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxkYmdGbGFnc3xQUEM2MDNnbnUiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufGRlcml2ZWRTaWdzfFBQQzMyZGlhYiIgdmFsdWU9IiouYSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58ZGVyaXZlZFNpZ3N8UFBDMzJnbnUiIHZhbHVlPSIqLmEiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufGRlcml2ZWRTaWdzfFBQQzYwM2RpYWIiIHZhbHVlPSIqLmEiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufGRlcml2ZWRTaWdzfFBQQzYwM2dudSIgdmFsdWU9IiouYSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58ZmxhZ3N8UFBDMzJkaWFiIiB2YWx1ZT0iY3J1cyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58ZmxhZ3N8UFBDMzJnbnUiIHZhbHVlPSJjcnVzIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxmbGFnc3xQUEM2MDNkaWFiIiB2YWx1ZT0iY3J1cyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58ZmxhZ3N8UFBDNjAzZ251IiB2YWx1ZT0iY3J1cyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58bm9uRGJnRmxhZ3N8UFBDMzJkaWFiIiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxub25EYmdGbGFnc3xQUEMzMmdudSIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58bm9uRGJnRmxhZ3N8UFBDNjAzZGlhYiIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58bm9uRGJnRmxhZ3N8UFBDNjAzZ251IiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58b2JqZWN0IiB2YWx1ZT0iZmFsc2UiLz4NCisgICAgICAgICAgICA8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxwYXNzQWJsZSIgdmFsdWU9InRydWUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufHNpZ3MiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfGNtZHxQUEMzMmRpYWIiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7O3JtIC1mICVPdXRGaWxlJTtkZHVtcCAtTmcgJU9iamVjdHMlICVMaWJyYXJpZXMlIHwgdGNsc2ggJChXSU5EX0JBU0UpL2hvc3QvcmVzb3VyY2UvaHV0aWxzL3RjbC9tdW5jaC50Y2wgLWMgcHBjICZndDsgJChPQkpfRElSKS9jdGR0LmM7JWNjb21waWxlcnByZWZpeCUgJChUT09MX1BBVEgpZGNjICVEZWJ1Z01vZGVGbGFncyUgJChDQ19BUkNIX1NQRUMpIC1YZG9sbGFyLWluLWlkZW50IC1YZm9yY2UtZGVjbGFyYXRpb25zICQoQURERURfQ0ZMQUdTKSAlSW5jbHVkZXMlICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpICAtbyAkKE9CSl9ESVIpL2N0ZHQubyAtYyAkKE9CSl9ESVIpL2N0ZHQuYzslbGlua2VycHJlZml4JSAkKFRPT0xfUEFUSClkbGQgLXRQUENGSDp2eHdvcmtzNjMgLVggLXI1ICVUb29sRmxhZ3MlIC1vICVPdXRGaWxlJSAkKE9CSl9ESVIpL2N0ZHQubyAlT2JqZWN0cyUgJUxpYnJhcmllcyUgJChMSUJQQVRIKSAkKExJQlMpICAkKEFEREVEX0xJQlBBVEgpICQoQURERURfTElCUykgJmFtcDsmYW1wOyBpZiBbICZxdW90OyQoRVhQQU5EX0RCRykmcXVvdDsgPSAmcXVvdDsxJnF1b3Q7IF07IHRoZW4gcGxpbmsgJnF1b3Q7JEAmcXVvdDs7ZmkiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfGNtZHxQUEMzMmdudSIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7cm0gLWYgJU91dEZpbGUlO25tcHBjICVPYmplY3RzJSAlTGlicmFyaWVzJSB8IHRjbHNoICQoV0lORF9CQVNFKS9ob3N0L3Jlc291cmNlL2h1dGlscy90Y2wvbXVuY2gudGNsIC1jIHBwYyAmZ3Q7ICQoT0JKX0RJUikvY3RkdC5jOyVjY29tcGlsZXJwcmVmaXglICQoVE9PTF9QQVRIKWNjcHBjICVEZWJ1Z01vZGVGbGFncyUgJChDQ19BUkNIX1NQRUMpIC1mZG9sbGFycy1pbi1pZGVudGlmaWVycyAtV2FsbCAkKEFEREVEX0NGTEFHUykgJUluY2x1ZGVzJSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAgLW8gJChPQkpfRElSKS9jdGR0Lm8gLWMgJChPQkpfRElSKS9jdGR0LmM7JWxpbmtlcnByZWZpeCUgJChUT09MX1BBVEgpY2NwcGMgLXIgLW5vc3RkbGliIC1XbCwtWCAlVG9vbEZsYWdzJSAtbyAlT3V0RmlsZSUgJChPQkpfRElSKS9jdGR0Lm8gJU9iamVjdHMlICVMaWJyYXJpZXMlICQoTElCUEFUSCkgJChMSUJTKSAgJChBRERFRF9MSUJQQVRIKSAkKEFEREVEX0xJQlMpICZhbXA7JmFtcDsgaWYgWyAmcXVvdDskKEVYUEFORF9EQkcpJnF1b3Q7ID0gJnF1b3Q7MSZxdW90OyBdOyB0aGVuIHBsaW5rICZxdW90OyRAJnF1b3Q7O2ZpIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxjbWR8UFBDNjAzZGlhYiIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7cm0gLWYgJU91dEZpbGUlO2RkdW1wIC1OZyAlT2JqZWN0cyUgJUxpYnJhcmllcyUgfCB0Y2xzaCAkKFdJTkRfQkFTRSkvaG9zdC9yZXNvdXJjZS9odXRpbHMvdGNsL211bmNoLnRjbCAtYyBwcGMgJmd0OyAkKE9CSl9ESVIpL2N0ZHQuYzslY2NvbXBpbGVycHJlZml4JSAkKFRPT0xfUEFUSClkY2MgJURlYnVnTW9kZUZsYWdzJSAkKENDX0FSQ0hfU1BFQykgLVhkb2xsYXItaW4taWRlbnQgLVhmb3JjZS1kZWNsYXJhdGlvbnMgJChBRERFRF9DRkxBR1MpICVJbmNsdWRlcyUgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgIC1vICQoT0JKX0RJUikvY3RkdC5vIC1jICQoT0JKX0RJUikvY3RkdC5jOyVsaW5rZXJwcmVmaXglICQoVE9PTF9QQVRIKWRsZCAtdFBQQzYwM0ZIOnZ4d29ya3M2MyAtWCAtcjUgJVRvb2xGbGFncyUgLW8gJU91dEZpbGUlICQoT0JKX0RJUikvY3RkdC5vICVPYmplY3RzJSAlTGlicmFyaWVzJSAkKExJQlBBVEgpICQoTElCUykgICQoQURERURfTElCUEFUSCkgJChBRERFRF9MSUJTKSAmYW1wOyZhbXA7IGlmIFsgJnF1b3Q7JChFWFBBTkRfREJHKSZxdW90OyA9ICZxdW90OzEmcXVvdDsgXTsgdGhlbiBwbGluayAmcXVvdDskQCZxdW90OztmaSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8Y21kfFBQQzYwM2dudSIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7cm0gLWYgJU91dEZpbGUlO25tcHBjICVPYmplY3RzJSAlTGlicmFyaWVzJSB8IHRjbHNoICQoV0lORF9CQVNFKS9ob3N0L3Jlc291cmNlL2h1dGlscy90Y2wvbXVuY2gudGNsIC1jIHBwYyAmZ3Q7ICQoT0JKX0RJUikvY3RkdC5jOyVjY29tcGlsZXJwcmVmaXglICQoVE9PTF9QQVRIKWNjcHBjICVEZWJ1Z01vZGVGbGFncyUgJChDQ19BUkNIX1NQRUMpIC1mZG9sbGFycy1pbi1pZGVudGlmaWVycyAtV2FsbCAkKEFEREVEX0NGTEFHUykgJUluY2x1ZGVzJSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAgLW8gJChPQkpfRElSKS9jdGR0Lm8gLWMgJChPQkpfRElSKS9jdGR0LmM7JWxpbmtlcnByZWZpeCUgJChUT09MX1BBVEgpY2NwcGMgLXIgLW5vc3RkbGliIC1XbCwtWCAlVG9vbEZsYWdzJSAtbyAlT3V0RmlsZSUgJChPQkpfRElSKS9jdGR0Lm8gJU9iamVjdHMlICVMaWJyYXJpZXMlICQoTElCUEFUSCkgJChMSUJTKSAgJChBRERFRF9MSUJQQVRIKSAkKEFEREVEX0xJQlMpICZhbXA7JmFtcDsgaWYgWyAmcXVvdDskKEVYUEFORF9EQkcpJnF1b3Q7ID0gJnF1b3Q7MSZxdW90OyBdOyB0aGVuIHBsaW5rICZxdW90OyRAJnF1b3Q7O2ZpIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxkYmdGbGFnc3xQUEMzMmRpYWIiIHZhbHVlPSItZyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8ZGJnRmxhZ3N8UFBDMzJnbnUiIHZhbHVlPSItZyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8ZGJnRmxhZ3N8UFBDNjAzZGlhYiIgdmFsdWU9Ii1nIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxkYmdGbGFnc3xQUEM2MDNnbnUiIHZhbHVlPSItZyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8ZGVyaXZlZFNpZ3N8UFBDMzJkaWFiIiB2YWx1ZT0iKi5vdXQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfGRlcml2ZWRTaWdzfFBQQzMyZ251IiB2YWx1ZT0iKi5vdXQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfGRlcml2ZWRTaWdzfFBQQzYwM2RpYWIiIHZhbHVlPSIqLm91dCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8ZGVyaXZlZFNpZ3N8UFBDNjAzZ251IiB2YWx1ZT0iKi5vdXQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfGZsYWdzfFBQQzMyZGlhYiIgdmFsdWU9Ii1yNCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8ZmxhZ3N8UFBDMzJnbnUiIHZhbHVlPSItVCAkKFdJTkRfQkFTRSkvdGFyZ2V0L2gvdG9vbC9nbnUvbGRzY3JpcHRzL2xpbmsuT1VUIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxmbGFnc3xQUEM2MDNkaWFiIiB2YWx1ZT0iLXI0Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxmbGFnc3xQUEM2MDNnbnUiIHZhbHVlPSItVCAkKFdJTkRfQkFTRSkvdGFyZ2V0L2gvdG9vbC9nbnUvbGRzY3JpcHRzL2xpbmsuT1VUIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxub25EYmdGbGFnc3xQUEMzMmRpYWIiIHZhbHVlPSItWE8gLVhzaXplLW9wdCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8bm9uRGJnRmxhZ3N8UFBDMzJnbnUiIHZhbHVlPSItTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxub25EYmdGbGFnc3xQUEM2MDNkaWFiIiB2YWx1ZT0iLVhPIC1Yc2l6ZS1vcHQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfG5vbkRiZ0ZsYWdzfFBQQzYwM2dudSIgdmFsdWU9Ii1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4iLz4NCisgICAgICAgICAgICA8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxvYmplY3QiIHZhbHVlPSJmYWxzZSIvPg0KKyAgICAgICAgICAgIDxib29sZWFuQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfHBhc3NBYmxlIiB2YWx1ZT0iZmFsc2UiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfHNpZ3MiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8Y21kfFBQQzMyZGlhYiIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWxpbmtlcnByZWZpeCUgJChUT09MX1BBVEgpZGxkIC10UFBDRkg6dnh3b3JrczYzIC1YIC1yNSAlVG9vbEZsYWdzJSAtbyAlT3V0RmlsZSUgJU9iamVjdHMlICQoTElCUEFUSCkgJChMSUJTKSAkKEFEREVEX0xJQlBBVEgpICQoQURERURfTElCUykgICZhbXA7JmFtcDsgaWYgWyAmcXVvdDskKEVYUEFORF9EQkcpJnF1b3Q7ID0gJnF1b3Q7MSZxdW90OyBdOyB0aGVuIHBsaW5rICZxdW90OyRAJnF1b3Q7O2ZpIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfGNtZHxQUEMzMmdudSIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWxpbmtlcnByZWZpeCUgJChUT09MX1BBVEgpY2NwcGMgLXIgLW5vc3RkbGliIC1XbCwtWCAlVG9vbEZsYWdzJSAtbyAlT3V0RmlsZSUgJU9iamVjdHMlICQoTElCUEFUSCkgJChMSUJTKSAkKEFEREVEX0xJQlBBVEgpICQoQURERURfTElCUykgICZhbXA7JmFtcDsgaWYgWyAmcXVvdDskKEVYUEFORF9EQkcpJnF1b3Q7ID0gJnF1b3Q7MSZxdW90OyBdOyB0aGVuIHBsaW5rICZxdW90OyRAJnF1b3Q7O2ZpIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfGNtZHxQUEM2MDNkaWFiIiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OzslbGlua2VycHJlZml4JSAkKFRPT0xfUEFUSClkbGQgLXRQUEM2MDNGSDp2eHdvcmtzNjMgLVggLXI1ICVUb29sRmxhZ3MlIC1vICVPdXRGaWxlJSAlT2JqZWN0cyUgJChMSUJQQVRIKSAkKExJQlMpICQoQURERURfTElCUEFUSCkgJChBRERFRF9MSUJTKSAgJmFtcDsmYW1wOyBpZiBbICZxdW90OyQoRVhQQU5EX0RCRykmcXVvdDsgPSAmcXVvdDsxJnF1b3Q7IF07IHRoZW4gcGxpbmsgJnF1b3Q7JEAmcXVvdDs7ZmkiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8Y21kfFBQQzYwM2dudSIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWxpbmtlcnByZWZpeCUgJChUT09MX1BBVEgpY2NwcGMgLXIgLW5vc3RkbGliIC1XbCwtWCAlVG9vbEZsYWdzJSAtbyAlT3V0RmlsZSUgJU9iamVjdHMlICQoTElCUEFUSCkgJChMSUJTKSAkKEFEREVEX0xJQlBBVEgpICQoQURERURfTElCUykgICZhbXA7JmFtcDsgaWYgWyAmcXVvdDskKEVYUEFORF9EQkcpJnF1b3Q7ID0gJnF1b3Q7MSZxdW90OyBdOyB0aGVuIHBsaW5rICZxdW90OyRAJnF1b3Q7O2ZpIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfGRiZ0ZsYWdzfFBQQzMyZGlhYiIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxkYmdGbGFnc3xQUEMzMmdudSIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxkYmdGbGFnc3xQUEM2MDNkaWFiIiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfGRiZ0ZsYWdzfFBQQzYwM2dudSIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxkZXJpdmVkU2lnc3xQUEMzMmRpYWIiIHZhbHVlPSIqLm8iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8ZGVyaXZlZFNpZ3N8UFBDMzJnbnUiIHZhbHVlPSIqLm8iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8ZGVyaXZlZFNpZ3N8UFBDNjAzZGlhYiIgdmFsdWU9IioubyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxkZXJpdmVkU2lnc3xQUEM2MDNnbnUiIHZhbHVlPSIqLm8iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8ZmxhZ3N8UFBDMzJkaWFiIiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfGZsYWdzfFBQQzMyZ251IiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfGZsYWdzfFBQQzYwM2RpYWIiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8ZmxhZ3N8UFBDNjAzZ251IiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfG5vbkRiZ0ZsYWdzfFBQQzMyZGlhYiIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxub25EYmdGbGFnc3xQUEMzMmdudSIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxub25EYmdGbGFnc3xQUEM2MDNkaWFiIiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfG5vbkRiZ0ZsYWdzfFBQQzYwM2dudSIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxib29sZWFuQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8b2JqZWN0IiB2YWx1ZT0iZmFsc2UiLz4NCisgICAgICAgICAgICA8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfHBhc3NBYmxlIiB2YWx1ZT0idHJ1ZSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxzaWdzIiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xjbWQiIHZhbHVlPSIlbWFrZXByZWZpeCUgbWFrZSAtLW5vLXByaW50LWRpcmVjdG9yeSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98ZGVmYXVsdFNwZWMiIHZhbHVlPSJQUEM2MDNnbnUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfHJlZGlyRGlyfFBQQzMyZGlhYiIgdmFsdWU9IlBQQzMyZGlhYiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98cmVkaXJEaXJ8UFBDMzJnbnUiIHZhbHVlPSJQUEMzMmdudSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98cmVkaXJEaXJ8UFBDNjAzZGlhYiIgdmFsdWU9IlBQQzYwM2RpYWIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfHJlZGlyRGlyfFBQQzYwM2dudSIgdmFsdWU9IlBQQzYwM2dudSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98cmVkaXJSb290IiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPGxpc3RBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98c3BlY3MiPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSJQUEMzMmRpYWIiLz4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iUFBDMzJnbnUiLz4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iUFBDNjAzZGlhYiIvPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSJQUEM2MDNnbnUiLz4NCisgICAgICAgICAgICA8L2xpc3RBdHRyaWJ1dGU+DQorICAgICAgICAgICAgPGludEF0dHJpYnV0ZSBrZXk9IkJ1aWxkU3VwcG9ydEVuYWJsZWQiIHZhbHVlPSIxIi8+DQorICAgICAgICAgICAgPGxpc3RBdHRyaWJ1dGUga2V5PSJCdWlsZFN1cHBvcnRGb3JCdWlsZFNwZWNzIj4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iUFBDNjAzZ251Ii8+DQorICAgICAgICAgICAgPC9saXN0QXR0cmlidXRlPg0KKyAgICAgICAgICAgIDxib29sZWFuQXR0cmlidXRlIGtleT0iQnVpbGRUYXJnZXRDZW50cmljIiB2YWx1ZT0idHJ1ZSIvPg0KKyAgICAgICAgPC9tYXBBdHRyaWJ1dGU+DQorICAgIDwvYXR0cmlidXRlcz4NCisgICAgPGJ1aWxkdGFyZ2V0cz4NCisgICAgICAgIDxidWlsZHRhcmdldCBidWlsZHRvb2w9IkxpbmtlciIgbmFtZT0iS2luZWN0U3RpY2tFeGFtcGxlIiBwYXNzZWQ9ImZhbHNlIiB0YXJnZXRuYW1lPSJLaW5lY3RTdGlja0V4YW1wbGUiPg0KKyAgICAgICAgICAgIDxjb250ZW50cz4NCisgICAgICAgICAgICAgICAgPGJ1aWxkdGFyZ2V0cmVmZXJlbmNlIG5hbWU9Ii9LaW5lY3RTdGlja0V4YW1wbGUvS2luZWN0U3RpY2tFeGFtcGxlX3BhcnRpYWxJbWFnZSIvPg0KKyAgICAgICAgICAgIDwvY29udGVudHM+DQorICAgICAgICA8L2J1aWxkdGFyZ2V0Pg0KKyAgICAgICAgPGJ1aWxkdGFyZ2V0IGJ1aWxkdG9vbD0iUGFydGlhbCBJbWFnZSBMaW5rZXIiIG5hbWU9IktpbmVjdFN0aWNrRXhhbXBsZV9wYXJ0aWFsSW1hZ2UiIHBhc3NlZD0idHJ1ZSIgdGFyZ2V0bmFtZT0iS2luZWN0U3RpY2tFeGFtcGxlX3BhcnRpYWxJbWFnZSI+DQorICAgICAgICAgICAgPGNvbnRlbnRzPg0KKyAgICAgICAgICAgICAgICA8Zm9sZGVyIG5hbWU9Ii9LaW5lY3RTdGlja0V4YW1wbGUiIHJlY3Vyc2l2ZT0idHJ1ZSIvPg0KKyAgICAgICAgICAgIDwvY29udGVudHM+DQorICAgICAgICA8L2J1aWxkdGFyZ2V0Pg0KKyAgICA8L2J1aWxkdGFyZ2V0cz4NCis8L3dyeG1sPg0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9LaW5lY3RTdGlja0V4YW1wbGUvTXlSb2JvdC5jcHAgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vS2luZWN0U3RpY2tFeGFtcGxlL015Um9ib3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1MjA2Y2MKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vS2luZWN0U3RpY2tFeGFtcGxlL015Um9ib3QuY3BwCkBAIC0wLDAgKzEsNjggQEAKKyNpbmNsdWRlICJXUElMaWIuaCINCisNCisvKioNCisgKiBUaGlzIGNvZGUgZGVtb25zdHJhdGVzIHRoZSB1c2Ugb2YgdGhlIEtpbmVjdFN0aWNrDQorICogY2xhc3MgdG8gZHJpdmUgeW91ciByb2JvdCBkdXJpbmcgdGhlIGF1dG9ub21vdXMgbW9kZQ0KKyAqIG9mIHRoZSBtYXRjaCwgbWFraW5nIGl0IGEgaHlicmlkIG1hY2hpbmUuIFRoZSBnZXN0dXJlcw0KKyAqIHVzZWQgdG8gY29udHJvbCB0aGUgS2luZWN0U3RpY2sgY2xhc3MgYXJlIGRlc2NyaWJlZCBpbiB0aGUNCisgKiAiR2V0dGluZyBTdGFydGVkIHdpdGggdGhlIE1pY3Jvc29mdCBLaW5lY3QgZm9yIEZSQyIgZG9jdW1lbnQNCisgKi8gDQorY2xhc3MgUm9ib3REZW1vIDogcHVibGljIFNpbXBsZVJvYm90DQorew0KKwlSb2JvdERyaXZlIG15Um9ib3Q7IC8vIHJvYm90IGRyaXZlIHN5c3RlbQ0KKwlLaW5lY3RTdGljayBsZWZ0QXJtOwkvL1RoZSBMZWZ0IGFybSBzaG91bGQgYmUgY29uc3RydWN0ZWQgYXMgc3RpY2sgMQ0KKwlLaW5lY3RTdGljayByaWdodEFybTsgCS8vVGhlIFJpZ2h0IGFybSBzaG91bGQgYmUgY29uc3RydWN0ZWQgYXMgc3RpY2sgMg0KKwlKb3lzdGljayBzdGljazsJCQkvL0pveXN0aWNrIGZvciB0ZWxlb3AgY29udHJvbA0KKw0KK3B1YmxpYzoNCisJUm9ib3REZW1vKHZvaWQpOg0KKwkJbXlSb2JvdCgxLCAyKSwJLy8gdGhlc2UgbXVzdCBiZSBpbml0aWFsaXplZCBpbiB0aGUgc2FtZSBvcmRlcg0KKwkJbGVmdEFybSgxKSwJCS8vIGFzIHRoZXkgYXJlIGRlY2xhcmVkIGFib3ZlLg0KKwkJcmlnaHRBcm0oMiksDQorCQlzdGljaygxKQ0KKwl7DQorCQlteVJvYm90LlNldEV4cGlyYXRpb24oMC4xKTsNCisJfQ0KKw0KKwkvKioNCisJICogRHJpdmUgbGVmdCAmIHJpZ2h0IG1vdG9ycyBmb3IgMiBzZWNvbmRzIHRoZW4gc3RvcA0KKwkgKi8NCisJdm9pZCBBdXRvbm9tb3VzKHZvaWQpDQorCXsNCisJCWJvb2wgZXhhbXBsZUJ1dHRvbjsNCisJDQorCQkvKkEgbG9vcCBpcyBuZWNlc3NhcnkgdG8gcmV0cmlldmUgdGhlIGxhdGVzdCBLaW5lY3QgZGF0YSBhbmQgdXBkYXRlIHRoZSBtb3RvcnMgKi8NCisJCXdoaWxlKElzQXV0b25vbW91cygpKXsNCisgICAgICAgICAgICAvKioNCisgICAgICAgICAgICAgKiBLaW5lY3RTdGljayBheGlzIHZhbHVlcyBhcmUgYWNjZXNzZWQgaWRlbnRpY2FsbHkgdG8gdGhvc2Ugb2YgYSBqb3lzdGljaw0KKyAgICAgICAgICAgICAqIEluIHRoaXMgZXhhbXBsZSB0aGUgYXhpcyB2YWx1ZXMgaGF2ZSBiZWVuIHNjYWxlZCBieSB+MS8zIGZvciBzYWZlcg0KKyAgICAgICAgICAgICAqIG9wZXJhdGlvbiB3aGVuIGxlYXJuaW5nIHRvIHVzZSB0aGUgS2luZWN0Lg0KKyAgICAgICAgICAgICAqLw0KKyAgICAgICAgICAgIG15Um9ib3QuVGFua0RyaXZlKGxlZnRBcm0uR2V0WSgpKi4zMywgcmlnaHRBcm0uR2V0WSgpKi4zMyk7DQorDQorICAgICAgICAgICAgLyogQW4gYWx0ZXJuYXRpdmUgaWxsdXN0cmF0aW5nIHRoYXQgdGhlIEtpbmVjdFN0aWNrIGNhbiBiZSB1c2VkIGp1c3QgbGlrZSBhIEpveXN0aWNrICovDQorICAgICAgICAgICAgLy9teVJvYm90LlRhbmtEcml2ZShsZWZ0QXJtLCByaWdodEFybSk7DQorDQorICAgICAgICAgICAgLypFeGFtcGxlIGlsbHVzdHJhdGluZyB0aGF0IGFjY2Vzc2luZyBidXR0b25zIGlzIGlkZW50aWNhbCB0byBhIEpveXN0aWNrICovDQorICAgICAgICAgICAgZXhhbXBsZUJ1dHRvbiA9IGxlZnRBcm0uR2V0UmF3QnV0dG9uKDEpOw0KKw0KKyAgICAgICAgICAgIFdhaXQoLjAxKTsgLyogRGVsYXkgMTBtcyB0byByZWR1Y2UgcHJvY2Vzc2luZyBsb2FkICovDQorCQl9DQorCX0NCisNCisJLyoqDQorCSAqIFJ1bnMgdGhlIG1vdG9ycyB3aXRoIGFyY2FkZSBzdGVlcmluZy4gDQorCSAqLw0KKwl2b2lkIE9wZXJhdG9yQ29udHJvbCh2b2lkKQ0KKwl7DQorCQlteVJvYm90LlNldFNhZmV0eUVuYWJsZWQodHJ1ZSk7DQorCQl3aGlsZSAoSXNPcGVyYXRvckNvbnRyb2woKSkNCisJCXsNCisJCQlteVJvYm90LkFyY2FkZURyaXZlKHN0aWNrKTsgLy8gZHJpdmUgd2l0aCBhcmNhZGUgc3R5bGUgKHVzZSByaWdodCBzdGljaykNCisJCQlXYWl0KDAuMDA1KTsJCQkJLy8gd2FpdCBmb3IgYSBtb3RvciB1cGRhdGUgdGltZQ0KKwkJfQ0KKwl9DQorfTsNCisNCitTVEFSVF9ST0JPVF9DTEFTUyhSb2JvdERlbW8pOw0KKw0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9LaW5lY3RTdGlja0V4YW1wbGUvc2FtcGxlLnByb3BlcnRpZXMgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vS2luZWN0U3RpY2tFeGFtcGxlL3NhbXBsZS5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmYzg5NWUKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vS2luZWN0U3RpY2tFeGFtcGxlL3NhbXBsZS5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMiBAQAorcHJvamVjdC50eXBlPURvd25sb2FkYWJsZUtlcm5lbE1vZHVsZVByb2plY3QNCitwbGF0Zm9ybS5pZD1WeFdvcmtzDQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvdnh3b3Jrcy02LjMvdGFyZ2V0L3NyYy9kZW1vL0tpbmVjdFN0aWNrRXhhbXBsZS9zYW1wbGUudHh0IGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvdnh3b3Jrcy02LjMvdGFyZ2V0L3NyYy9kZW1vL0tpbmVjdFN0aWNrRXhhbXBsZS9zYW1wbGUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3MTkzZmIKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vS2luZWN0U3RpY2tFeGFtcGxlL3NhbXBsZS50eHQKQEAgLTAsMCArMSw5IEBACitGUkMgS2luZWN0U3RpY2sgRXhhbXBsZQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorDQorVGhpcyBwcm9ncmFtIGRlbW9uc3RyYXRlcyB0aGUgdXNlIG9mIHRoZSBLaW5lY3RTdGljaw0KK2NsYXNzIGZvciB0aGUgRlJDIDIwMTIgZ2FtZS4gVGhpcyBwcm9ncmFtIHVzZXMgdGhlDQorS2luZWN0U3RpY2tzIHRvIHRhbmsgZHJpdmUgYSAyIG1vdG9yIHJvYm90IGFuZCBzaG93cw0KK2FuIGV4YW1wbGUgb2YgYWNjZXNzaW5nIHRoZSBLaW5lY3RTdGljayBidXR0b24uIFRoZQ0KK0tpbmVjdFN0aWNrIGdlc3R1cmVzIGFyZSBkb2N1bWVudGVkIGluIHRoZSAiR2V0dGluZw0KK1N0YXJ0ZWQgd2l0aCB0aGUgTWljcm9zb2Z0IEtpbmVjdCBmb3IgRlJDIiBkb2N1bWVudC4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vTGluZVRyYWNrZXJTYW1wbGUvLmNwcm9qZWN0IGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvdnh3b3Jrcy02LjMvdGFyZ2V0L3NyYy9kZW1vL0xpbmVUcmFja2VyU2FtcGxlLy5jcHJvamVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMDNlNGNkCi0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvdnh3b3Jrcy02LjMvdGFyZ2V0L3NyYy9kZW1vL0xpbmVUcmFja2VyU2FtcGxlLy5jcHJvamVjdApAQCAtMCwwICsxLDMwIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KKzw/ZmlsZVZlcnNpb24gNC4wLjA/Pg0KKw0KKzxjcHJvamVjdD4NCis8c3RvcmFnZU1vZHVsZSBtb2R1bGVJZD0ib3JnLmVjbGlwc2UuY2R0LmNvcmUuc2V0dGluZ3MiPg0KKzxjY29uZmlndXJhdGlvbiBpZD0ib3JnLmVjbGlwc2UuY2R0LmNvcmUuZGVmYXVsdC5jb25maWcuMjgzOTY3MTA2Ij4NCis8c3RvcmFnZU1vZHVsZSBidWlsZFN5c3RlbUlkPSJvcmcuZWNsaXBzZS5jZHQuY29yZS5kZWZhdWx0Q29uZmlnRGF0YVByb3ZpZGVyIiBpZD0ib3JnLmVjbGlwc2UuY2R0LmNvcmUuZGVmYXVsdC5jb25maWcuMjgzOTY3MTA2IiBtb2R1bGVJZD0ib3JnLmVjbGlwc2UuY2R0LmNvcmUuc2V0dGluZ3MiIG5hbWU9IkNvbmZpZ3VyYXRpb24iPg0KKzxleHRlcm5hbFNldHRpbmdzLz4NCis8ZXh0ZW5zaW9ucz4NCis8ZXh0ZW5zaW9uIGlkPSJjb20ud2luZHJpdmVyLmlkZS5jb3JlLldSU2Nhbm5lckluZm9Qcm92aWRlciIgcG9pbnQ9Im9yZy5lY2xpcHNlLmNkdC5jb3JlLlNjYW5uZXJJbmZvUHJvdmlkZXIiLz4NCis8ZXh0ZW5zaW9uIGlkPSJjb20ud2luZHJpdmVyLmlkZS5jb3JlLldSRWxmUGFyc2VyVnhXb3JrcyIgcG9pbnQ9Im9yZy5lY2xpcHNlLmNkdC5jb3JlLkJpbmFyeVBhcnNlciIvPg0KKzxleHRlbnNpb24gaWQ9Im9yZy5lY2xpcHNlLmNkdC5jb3JlLkdOVV9FTEYiIHBvaW50PSJvcmcuZWNsaXBzZS5jZHQuY29yZS5CaW5hcnlQYXJzZXIiLz4NCis8L2V4dGVuc2lvbnM+DQorPC9zdG9yYWdlTW9kdWxlPg0KKzxzdG9yYWdlTW9kdWxlIG1vZHVsZUlkPSJvcmcuZWNsaXBzZS5jZHQuY29yZS5leHRlcm5hbFNldHRpbmdzIi8+DQorPHN0b3JhZ2VNb2R1bGUgbW9kdWxlSWQ9Im9yZy5lY2xpcHNlLmNkdC5jb3JlLnBhdGhlbnRyeSI+DQorPHBhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9IiIvPg0KKzxwYXRoZW50cnkga2luZD0ib3V0IiBwYXRoPSIiLz4NCis8cGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0iY29tLndpbmRyaXZlci5pZGUuY29yZS5XUl9DT05UQUlORVIiLz4NCis8cGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0iY29tLndpbmRyaXZlci5pZGUuY29yZS5idWlsZC5tb2RlbC5XUl9VU0VSREVGSU5FRF9DT05UQUlORVIiLz4NCis8L3N0b3JhZ2VNb2R1bGU+DQorPHN0b3JhZ2VNb2R1bGUgbW9kdWxlSWQ9InNjYW5uZXJDb25maWd1cmF0aW9uIi8+DQorPHN0b3JhZ2VNb2R1bGUgbW9kdWxlSWQ9InVzZXJkZWZpbmVkQ29udGFpbmVyIj4NCis8aW5kZXhBbGxGaWxlcyB2YWx1ZT0iZmFsc2UiLz4NCis8aW5pdGlhbGl6ZWQgdmFsdWU9InRydWUiLz4NCis8L3N0b3JhZ2VNb2R1bGU+DQorPHN0b3JhZ2VNb2R1bGUgbW9kdWxlSWQ9Im9yZy5lY2xpcHNlLmNkdC5jb3JlLmxhbmd1YWdlLm1hcHBpbmciLz4NCis8L2Njb25maWd1cmF0aW9uPg0KKzwvc3RvcmFnZU1vZHVsZT4NCis8L2Nwcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9MaW5lVHJhY2tlclNhbXBsZS8ucHJvamVjdCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9MaW5lVHJhY2tlclNhbXBsZS8ucHJvamVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjA0NzE3Ci0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvdnh3b3Jrcy02LjMvdGFyZ2V0L3NyYy9kZW1vL0xpbmVUcmFja2VyU2FtcGxlLy5wcm9qZWN0CkBAIC0wLDAgKzEsMjAgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQorPHByb2plY3REZXNjcmlwdGlvbj4NCisJPG5hbWU+TGluZVRyYWNrZXJTYW1wbGU8L25hbWU+DQorCTxjb21tZW50PjwvY29tbWVudD4NCisJPHByb2plY3RzPg0KKwk8L3Byb2plY3RzPg0KKwk8YnVpbGRTcGVjPg0KKwkJPGJ1aWxkQ29tbWFuZD4NCisJCQk8bmFtZT5jb20ud2luZHJpdmVyLmlkZS5jb3JlLndyYnVpbGRlcjwvbmFtZT4NCisJCQk8YXJndW1lbnRzPg0KKwkJCTwvYXJndW1lbnRzPg0KKwkJPC9idWlsZENvbW1hbmQ+DQorCTwvYnVpbGRTcGVjPg0KKwk8bmF0dXJlcz4NCisJCTxuYXR1cmU+Y29tLndpbmRyaXZlci5pZGUuY29yZS53cm5hdHVyZTwvbmF0dXJlPg0KKwkJPG5hdHVyZT5jb20ud2luZHJpdmVyLmlkZS5jb3JlLndyY29yZW5hdHVyZTwvbmF0dXJlPg0KKwkJPG5hdHVyZT5vcmcuZWNsaXBzZS5jZHQuY29yZS5jbmF0dXJlPC9uYXR1cmU+DQorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmNkdC5jb3JlLmNjbmF0dXJlPC9uYXR1cmU+DQorCTwvbmF0dXJlcz4NCis8L3Byb2plY3REZXNjcmlwdGlvbj4NCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vTGluZVRyYWNrZXJTYW1wbGUvLndybWFrZWZpbGUgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vTGluZVRyYWNrZXJTYW1wbGUvLndybWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTFkZDdmOAotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9MaW5lVHJhY2tlclNhbXBsZS8ud3JtYWtlZmlsZQpAQCAtMCwwICsxLDQ4IEBACisjIFRoZSBmaWxlICIud3JtYWtlZmlsZSIgaXMgdGhlIHRlbXBsYXRlIHVzZWQgYnkgdGhlIFdpbmQgUml2ZXIgV29ya2JlbmNoIHRvDQorIyBnZW5lcmF0ZSB0aGUgbWFrZWZpbGVzIG9mIHRoaXMgcHJvamVjdC4gQWRkIHVzZXItc3BlY2lmaWMgYnVpbGQgdGFyZ2V0cyBhbmQNCisjIG1ha2UgcnVsZXMgb25seSghKSBpbiB0aGlzIHByb2plY3QncyAiLndybWFrZWZpbGUiIGZpbGUuIFRoZXNlIHdpbGwgdGhlbiBiZQ0KKyMgYXV0b21hdGljYWxseSBkdW1wZWQgaW50byB0aGUgbWFrZWZpbGVzLg0KKw0KK1dJTkRfSE9NRSA6PSAkKHN1YnN0IFwsLywkKFdJTkRfSE9NRSkpDQorV0lORF9CQVNFIDo9ICQoc3Vic3QgXCwvLCQoV0lORF9CQVNFKSkNCitXSU5EX1VTUiA6PSAkKHN1YnN0IFwsLywkKFdJTkRfVVNSKSkNCisNCithbGwgOiBwcmVfYnVpbGQgbWFpbl9hbGwgcG9zdF9idWlsZA0KKw0KK19jbGVhbiA6Og0KKwlAZWNobyAibWFrZTogcmVtb3ZpbmcgdGFyZ2V0cyBhbmQgb2JqZWN0cyBvZiBgcHdkYCINCisNCislSURFX0dFTkVSQVRFRCUNCisNCistaW5jbHVkZSAkKFBSSl9ST09UX0RJUikvKi5tYWtlZmlsZQ0KKw0KKy1pbmNsdWRlICoubWFrZWZpbGUNCisNCittYWluX2FsbCA6IGV4dGVybmFsX2J1aWxkICQoUFJPSkVDVF9UQVJHRVRTKQ0KKwlAZWNobyAibWFrZTogYnVpbHQgdGFyZ2V0cyBvZiBgcHdkYCINCisNCisjIGVudHJ5IHBvaW50IGZvciBleHRlbmRpbmcgdGhlIGJ1aWxkDQorZXh0ZXJuYWxfYnVpbGQgOjoNCisJQGVjaG8gIiINCisNCisjIG1haW4gZW50cnkgcG9pbnQgZm9yIHByZSBwcm9jZXNzaW5nIHByaW9yIHRvIHRoZSBidWlsZA0KK3ByZV9idWlsZCA6OiAkKFBSRV9CVUlMRF9TVEVQKSBnZW5lcmF0ZV9zb3VyY2VzDQorCUBlY2hvICIiDQorDQorIyBlbnRyeSBwb2ludCBmb3IgZ2VuZXJhdGluZyBzb3VyY2VzIHByaW9yIHRvIHRoZSBidWlsZA0KK2dlbmVyYXRlX3NvdXJjZXMgOjoNCisJQGVjaG8gIiINCisNCisjIG1haW4gZW50cnkgcG9pbnQgZm9yIHBvc3QgcHJvY2Vzc2luZyBhZnRlciB0aGUgYnVpbGQNCitwb3N0X2J1aWxkIDo6ICQoUE9TVF9CVUlMRF9TVEVQKSBkZXBsb3lfb3V0cHV0DQorCUBlY2hvICIiDQorDQorIyBlbnRyeSBwb2ludCBmb3IgZGVwbG95aW5nIG91dHB1dCBhZnRlciB0aGUgYnVpbGQNCitkZXBsb3lfb3V0cHV0IDo6DQorCUBlY2hvICIiDQorDQorY2xlYW4gOjogZXh0ZXJuYWxfY2xlYW4gJChDTEVBTl9TVEVQKSBfY2xlYW4NCisNCisjIGVudHJ5IHBvaW50IGZvciBleHRlbmRpbmcgdGhlIGJ1aWxkIGNsZWFuDQorZXh0ZXJuYWxfY2xlYW4gOjoNCisJQGVjaG8gIiINCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vTGluZVRyYWNrZXJTYW1wbGUvLndycHJvamVjdCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9MaW5lVHJhY2tlclNhbXBsZS8ud3Jwcm9qZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1MGIzM2UKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vTGluZVRyYWNrZXJTYW1wbGUvLndycHJvamVjdApAQCAtMCwwICsxLDI1OCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCis8d3J4bWw+DQorICAgIDxwcm9wZXJ0aWVzIHBsYXRmb3JtPSJWeFdvcmtzIiBwbGF0Zm9ybV9uYW1lPSJ2eHdvcmtzLTYuMyIgcm9vdD0iMSIgdHlwZT0iRG93bmxvYWRhYmxlS2VybmVsTW9kdWxlUHJvamVjdCIvPg0KKyAgICA8YXR0cmlidXRlcz4NCisgICAgICAgIDxtYXBBdHRyaWJ1dGU+DQorICAgICAgICAgICAgPGxpc3RBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98R2xvYmFsTWFjcm9zIj4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iUFJPSkVDVF9UWVBFIi8+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9IkRFRklORVMiLz4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iRVhQQU5EX0RCRyIvPg0KKyAgICAgICAgICAgIDwvbGlzdEF0dHJpYnV0ZT4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfEdsb2JhbE1hY3JvfERFRklORVMiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfEdsb2JhbE1hY3JvfEVYUEFORF9EQkciIHZhbHVlPSIwIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xHbG9iYWxNYWNyb3xQUk9KRUNUX1RZUEUiIHZhbHVlPSJES00iLz4NCisgICAgICAgICAgICA8bGlzdEF0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xJbmNsfFBQQzMyZGlhYiI+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9Ii1JJChXSU5EX0JBU0UpL3RhcmdldC9oL1dQSUxpYiIvPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSItSSQoV0lORF9CQVNFKS90YXJnZXQvaCIvPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSItSSQoV0lORF9CQVNFKS90YXJnZXQvaC93cm4vY29yZWlwIi8+DQorICAgICAgICAgICAgPC9saXN0QXR0cmlidXRlPg0KKyAgICAgICAgICAgIDxsaXN0QXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfEluY2x8UFBDMzJnbnUiPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSItSSQoV0lORF9CQVNFKS90YXJnZXQvaCIvPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSItSSQoV0lORF9CQVNFKS90YXJnZXQvaC93cm4vY29yZWlwIi8+DQorICAgICAgICAgICAgPC9saXN0QXR0cmlidXRlPg0KKyAgICAgICAgICAgIDxsaXN0QXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfEluY2x8UFBDNjAzZGlhYiI+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9Ii1JJChXSU5EX0JBU0UpL3RhcmdldC9oIi8+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9Ii1JJChXSU5EX0JBU0UpL3RhcmdldC9oL3dybi9jb3JlaXAiLz4NCisgICAgICAgICAgICA8L2xpc3RBdHRyaWJ1dGU+DQorICAgICAgICAgICAgPGxpc3RBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98SW5jbHxQUEM2MDNnbnUiPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSItSSQoV0lORF9CQVNFKS90YXJnZXQvaCIvPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSItSSQoV0lORF9CQVNFKS90YXJnZXQvaC9XUElMaWIiLz4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2gvd3JuL2NvcmVpcCIvPg0KKyAgICAgICAgICAgIDwvbGlzdEF0dHJpYnV0ZT4NCisgICAgICAgICAgICA8bGlzdEF0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xMaWJzfFBQQzMyZGlhYiI+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9IiQoV0lORF9CQVNFKS90YXJnZXQvbGliL1dQSUxpYi5hIi8+DQorICAgICAgICAgICAgPC9saXN0QXR0cmlidXRlPg0KKyAgICAgICAgICAgIDxsaXN0QXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfExpYnN8UFBDNjAzZ251Ij4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iJChXSU5EX0JBU0UpL3RhcmdldC9saWIvV1BJTGliLmEiLz4NCisgICAgICAgICAgICA8L2xpc3RBdHRyaWJ1dGU+DQorICAgICAgICAgICAgPGxpc3RBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm9zIj4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iVlhfQ1BVX0ZBTUlMWSIvPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSJDUFUiLz4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iVE9PTF9GQU1JTFkiLz4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iVE9PTCIvPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSJUT09MX1BBVEgiLz4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iQ0NfQVJDSF9TUEVDIi8+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9IkxJQlBBVEgiLz4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iTElCUyIvPg0KKyAgICAgICAgICAgIDwvbGlzdEF0dHJpYnV0ZT4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfENDX0FSQ0hfU1BFQ3x2YWx1ZXxQUEMzMmRpYWIiIHZhbHVlPSItdFBQQ0ZIOnZ4d29ya3M2MyAtWHN0bXctc2xvdyAtRFBQQzMyX2ZwNjB4Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xDQ19BUkNIX1NQRUN8dmFsdWV8UFBDMzJnbnUiIHZhbHVlPSItbWhhcmQtZmxvYXQgLW1zdHJpY3QtYWxpZ24gLW1uby1pbXBsaWNpdC1mcCAtRFBQQzMyX2ZwNjB4Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xDQ19BUkNIX1NQRUN8dmFsdWV8UFBDNjAzZGlhYiIgdmFsdWU9Ii10UFBDNjAzRkg6dnh3b3JrczYzIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xDQ19BUkNIX1NQRUN8dmFsdWV8UFBDNjAzZ251IiB2YWx1ZT0iLW1jcHU9NjAzIC1tc3RyaWN0LWFsaWduIC1tbm8taW1wbGljaXQtZnAgLW1sb25nY2FsbCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98Q1BVfHZhbHVlfFBQQzMyZGlhYiIgdmFsdWU9IlBQQzMyIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xDUFV8dmFsdWV8UFBDMzJnbnUiIHZhbHVlPSJQUEMzMiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98Q1BVfHZhbHVlfFBQQzYwM2RpYWIiIHZhbHVlPSJQUEM2MDMiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfENQVXx2YWx1ZXxQUEM2MDNnbnUiIHZhbHVlPSJQUEM2MDMiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfExJQlBBVEh8dmFsdWV8UFBDMzJkaWFiIiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xMSUJQQVRIfHZhbHVlfFBQQzMyZ251IiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xMSUJQQVRIfHZhbHVlfFBQQzYwM2RpYWIiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfExJQlBBVEh8dmFsdWV8UFBDNjAzZ251IiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xMSUJTfHZhbHVlfFBQQzMyZGlhYiIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98TElCU3x2YWx1ZXxQUEMzMmdudSIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98TElCU3x2YWx1ZXxQUEM2MDNkaWFiIiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xMSUJTfHZhbHVlfFBQQzYwM2dudSIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98VE9PTF9GQU1JTFl8dmFsdWV8UFBDMzJkaWFiIiB2YWx1ZT0iZGlhYiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98VE9PTF9GQU1JTFl8dmFsdWV8UFBDMzJnbnUiIHZhbHVlPSJnbnUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfFRPT0xfRkFNSUxZfHZhbHVlfFBQQzYwM2RpYWIiIHZhbHVlPSJkaWFiIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xUT09MX0ZBTUlMWXx2YWx1ZXxQUEM2MDNnbnUiIHZhbHVlPSJnbnUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfFRPT0xfUEFUSHx2YWx1ZXxQUEMzMmRpYWIiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfFRPT0xfUEFUSHx2YWx1ZXxQUEMzMmdudSIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98VE9PTF9QQVRIfHZhbHVlfFBQQzYwM2RpYWIiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfFRPT0xfUEFUSHx2YWx1ZXxQUEM2MDNnbnUiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfFRPT0x8dmFsdWV8UFBDMzJkaWFiIiB2YWx1ZT0iZGlhYiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98VE9PTHx2YWx1ZXxQUEMzMmdudSIgdmFsdWU9ImdudSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98VE9PTHx2YWx1ZXxQUEM2MDNkaWFiIiB2YWx1ZT0iZGlhYiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98VE9PTHx2YWx1ZXxQUEM2MDNnbnUiIHZhbHVlPSJnbnUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfFZYX0NQVV9GQU1JTFl8dmFsdWV8UFBDMzJkaWFiIiB2YWx1ZT0icHBjIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xWWF9DUFVfRkFNSUxZfHZhbHVlfFBQQzMyZ251IiB2YWx1ZT0icHBjIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xWWF9DUFVfRkFNSUxZfHZhbHVlfFBQQzYwM2RpYWIiIHZhbHVlPSJwcGMiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfFZYX0NQVV9GQU1JTFl8dmFsdWV8UFBDNjAzZ251IiB2YWx1ZT0icHBjIi8+DQorICAgICAgICAgICAgPGxpc3RBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHMiPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSJDLUNvbXBpbGVyIi8+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9IkMrKy1Db21waWxlciIvPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSJMaW5rZXIiLz4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iUGFydGlhbCBJbWFnZSBMaW5rZXIiLz4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iTGlicmFyaWFuIi8+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9IkFzc2VtYmxlciIvPg0KKyAgICAgICAgICAgIDwvbGlzdEF0dHJpYnV0ZT4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfGNtZHxQUEMzMmRpYWIiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7OyVhc3NlbWJsZXJwcmVmaXglICQoVE9PTF9QQVRIKWRjYyAlRGVidWdNb2RlRmxhZ3MlICVUb29sRmxhZ3MlICQoQURERURfQ0ZMQUdTKSAlSW5jbHVkZXMlICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICVPdXRGaWxlJSAtYyAlSW5GaWxlJSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxBc3NlbWJsZXJ8Y21kfFBQQzMyZ251IiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OzslYXNzZW1ibGVycHJlZml4JSAkKFRPT0xfUEFUSCljY3BwYyAlRGVidWdNb2RlRmxhZ3MlICVUb29sRmxhZ3MlICQoQURERURfQ0ZMQUdTKSAlSW5jbHVkZXMlICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICVPdXRGaWxlJSAtYyAlSW5GaWxlJSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxBc3NlbWJsZXJ8Y21kfFBQQzYwM2RpYWIiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7OyVhc3NlbWJsZXJwcmVmaXglICQoVE9PTF9QQVRIKWRjYyAlRGVidWdNb2RlRmxhZ3MlICVUb29sRmxhZ3MlICQoQURERURfQ0ZMQUdTKSAlSW5jbHVkZXMlICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICVPdXRGaWxlJSAtYyAlSW5GaWxlJSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxBc3NlbWJsZXJ8Y21kfFBQQzYwM2dudSIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWFzc2VtYmxlcnByZWZpeCUgJChUT09MX1BBVEgpY2NwcGMgJURlYnVnTW9kZUZsYWdzJSAlVG9vbEZsYWdzJSAkKEFEREVEX0NGTEFHUykgJUluY2x1ZGVzJSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAlT3V0RmlsZSUgLWMgJUluRmlsZSUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfGRiZ0ZsYWdzfFBQQzMyZGlhYiIgdmFsdWU9Ii1nIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxkYmdGbGFnc3xQUEMzMmdudSIgdmFsdWU9Ii1nIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxkYmdGbGFnc3xQUEM2MDNkaWFiIiB2YWx1ZT0iLWciLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfGRiZ0ZsYWdzfFBQQzYwM2dudSIgdmFsdWU9Ii1nIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxkZXJpdmVkU2lnc3xQUEMzMmRpYWIiIHZhbHVlPSIqLm8iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfGRlcml2ZWRTaWdzfFBQQzMyZ251IiB2YWx1ZT0iKi5vIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxkZXJpdmVkU2lnc3xQUEM2MDNkaWFiIiB2YWx1ZT0iKi5vIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxkZXJpdmVkU2lnc3xQUEM2MDNnbnUiIHZhbHVlPSIqLm8iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfGZsYWdzfFBQQzMyZGlhYiIgdmFsdWU9IiQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWHByZXByb2Nlc3MtYXNzZW1ibHkgLVhjcHAtbm8tc3BhY2UgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxBc3NlbWJsZXJ8ZmxhZ3N8UFBDMzJnbnUiIHZhbHVlPSIkKENDX0FSQ0hfU1BFQykgLWFuc2kgICAteGFzc2VtYmxlci13aXRoLWNwcCAtTUQgLU1QIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxmbGFnc3xQUEM2MDNkaWFiIiB2YWx1ZT0iJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YcHJlcHJvY2Vzcy1hc3NlbWJseSAtWGNwcC1uby1zcGFjZSAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxmbGFnc3xQUEM2MDNnbnUiIHZhbHVlPSIkKENDX0FSQ0hfU1BFQykgLWFuc2kgICAteGFzc2VtYmxlci13aXRoLWNwcCAtTUQgLU1QIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxub25EYmdGbGFnc3xQUEMzMmRpYWIiIHZhbHVlPSItWE8gLVhzaXplLW9wdCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxBc3NlbWJsZXJ8bm9uRGJnRmxhZ3N8UFBDMzJnbnUiIHZhbHVlPSItTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxub25EYmdGbGFnc3xQUEM2MDNkaWFiIiB2YWx1ZT0iLVhPIC1Yc2l6ZS1vcHQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfG5vbkRiZ0ZsYWdzfFBQQzYwM2dudSIgdmFsdWU9Ii1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4iLz4NCisgICAgICAgICAgICA8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxvYmplY3QiIHZhbHVlPSJ0cnVlIi8+DQorICAgICAgICAgICAgPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxBc3NlbWJsZXJ8cGFzc0FibGUiIHZhbHVlPSJmYWxzZSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxBc3NlbWJsZXJ8c2lncyIgdmFsdWU9IioucyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8Y21kfFBQQzMyZGlhYiIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWNwcGNvbXBpbGVycHJlZml4JSAkKFRPT0xfUEFUSClkY2MgJURlYnVnTW9kZUZsYWdzJSAlVG9vbEZsYWdzJSAkKEFEREVEX0MrK0ZMQUdTKSAlSW5jbHVkZXMlICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICVPdXRGaWxlJSAtYyAlSW5GaWxlJSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8Y21kfFBQQzMyZ251IiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OzslY3BwY29tcGlsZXJwcmVmaXglICQoVE9PTF9QQVRIKWNjcHBjICVEZWJ1Z01vZGVGbGFncyUgJVRvb2xGbGFncyUgJChBRERFRF9DKytGTEFHUykgJUluY2x1ZGVzJSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAlT3V0RmlsZSUgLWMgJUluRmlsZSUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfGNtZHxQUEM2MDNkaWFiIiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OzslY3BwY29tcGlsZXJwcmVmaXglICQoVE9PTF9QQVRIKWRjYyAlRGVidWdNb2RlRmxhZ3MlICVUb29sRmxhZ3MlICQoQURERURfQysrRkxBR1MpICVJbmNsdWRlcyUgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gJU91dEZpbGUlIC1jICVJbkZpbGUlIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxjbWR8UFBDNjAzZ251IiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OzslY3BwY29tcGlsZXJwcmVmaXglICQoVE9PTF9QQVRIKWNjcHBjICVEZWJ1Z01vZGVGbGFncyUgJVRvb2xGbGFncyUgJChBRERFRF9DKytGTEFHUykgJUluY2x1ZGVzJSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAlT3V0RmlsZSUgLWMgJUluRmlsZSUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfGRiZ0ZsYWdzfFBQQzMyZGlhYiIgdmFsdWU9Ii1nIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxkYmdGbGFnc3xQUEMzMmdudSIgdmFsdWU9Ii1nIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxkYmdGbGFnc3xQUEM2MDNkaWFiIiB2YWx1ZT0iLWciLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfGRiZ0ZsYWdzfFBQQzYwM2dudSIgdmFsdWU9Ii1nIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxkZXJpdmVkU2lnc3xQUEMzMmRpYWIiIHZhbHVlPSIqLm8iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfGRlcml2ZWRTaWdzfFBQQzMyZ251IiB2YWx1ZT0iKi5vIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxkZXJpdmVkU2lnc3xQUEM2MDNkaWFiIiB2YWx1ZT0iKi5vIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxkZXJpdmVkU2lnc3xQUEM2MDNnbnUiIHZhbHVlPSIqLm8iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfGZsYWdzfFBQQzMyZGlhYiIgdmFsdWU9IiQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxmbGFnc3xQUEMzMmdudSIgdmFsdWU9IiQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8ZmxhZ3N8UFBDNjAzZGlhYiIgdmFsdWU9IiQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxmbGFnc3xQUEM2MDNnbnUiIHZhbHVlPSIkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgLW1sb25nY2FsbCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8bm9uRGJnRmxhZ3N8UFBDMzJkaWFiIiB2YWx1ZT0iLVhPIC1Yc2l6ZS1vcHQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfG5vbkRiZ0ZsYWdzfFBQQzMyZ251IiB2YWx1ZT0iLU8yIC1mc3RyZW5ndGgtcmVkdWNlIC1mbm8tYnVpbHRpbiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8bm9uRGJnRmxhZ3N8UFBDNjAzZGlhYiIgdmFsdWU9Ii1YTyAtWHNpemUtb3B0Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxub25EYmdGbGFnc3xQUEM2MDNnbnUiIHZhbHVlPSItTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluIi8+DQorICAgICAgICAgICAgPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8b2JqZWN0IiB2YWx1ZT0idHJ1ZSIvPg0KKyAgICAgICAgICAgIDxib29sZWFuQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfHBhc3NBYmxlIiB2YWx1ZT0iZmFsc2UiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfHNpZ3MiIHZhbHVlPSIqLmNwcDsqLkM7Ki5jeHg7Ki5jYyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfGNtZHxQUEMzMmRpYWIiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7OyVjY29tcGlsZXJwcmVmaXglICQoVE9PTF9QQVRIKWRjYyAlRGVidWdNb2RlRmxhZ3MlICVUb29sRmxhZ3MlICQoQURERURfQ0ZMQUdTKSAlSW5jbHVkZXMlICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICVPdXRGaWxlJSAtYyAlSW5GaWxlJSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfGNtZHxQUEMzMmdudSIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWNjb21waWxlcnByZWZpeCUgJChUT09MX1BBVEgpY2NwcGMgJURlYnVnTW9kZUZsYWdzJSAlVG9vbEZsYWdzJSAkKEFEREVEX0NGTEFHUykgJUluY2x1ZGVzJSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAlT3V0RmlsZSUgLWMgJUluRmlsZSUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxjbWR8UFBDNjAzZGlhYiIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWNjb21waWxlcnByZWZpeCUgJChUT09MX1BBVEgpZGNjICVEZWJ1Z01vZGVGbGFncyUgJVRvb2xGbGFncyUgJChBRERFRF9DRkxBR1MpICVJbmNsdWRlcyUgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gJU91dEZpbGUlIC1jICVJbkZpbGUlIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8Y21kfFBQQzYwM2dudSIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWNjb21waWxlcnByZWZpeCUgJChUT09MX1BBVEgpY2NwcGMgJURlYnVnTW9kZUZsYWdzJSAlVG9vbEZsYWdzJSAkKEFEREVEX0NGTEFHUykgJUluY2x1ZGVzJSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAlT3V0RmlsZSUgLWMgJUluRmlsZSUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxkYmdGbGFnc3xQUEMzMmRpYWIiIHZhbHVlPSItZyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfGRiZ0ZsYWdzfFBQQzMyZ251IiB2YWx1ZT0iLWciLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxkYmdGbGFnc3xQUEM2MDNkaWFiIiB2YWx1ZT0iLWciLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxkYmdGbGFnc3xQUEM2MDNnbnUiIHZhbHVlPSItZyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfGRlcml2ZWRTaWdzfFBQQzMyZGlhYiIgdmFsdWU9IioubyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfGRlcml2ZWRTaWdzfFBQQzMyZ251IiB2YWx1ZT0iKi5vIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8ZGVyaXZlZFNpZ3N8UFBDNjAzZGlhYiIgdmFsdWU9IioubyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfGRlcml2ZWRTaWdzfFBQQzYwM2dudSIgdmFsdWU9IioubyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfGZsYWdzfFBQQzMyZGlhYiIgdmFsdWU9IiQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8ZmxhZ3N8UFBDMzJnbnUiIHZhbHVlPSIkKENDX0FSQ0hfU1BFQykgLWFuc2kgIC1XYWxsICAtTUQgLU1QIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8ZmxhZ3N8UFBDNjAzZGlhYiIgdmFsdWU9IiQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8ZmxhZ3N8UFBDNjAzZ251IiB2YWx1ZT0iJChDQ19BUkNIX1NQRUMpIC1hbnNpICAtV2FsbCAgLU1EIC1NUCAtbWxvbmdjYWxsIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8bm9uRGJnRmxhZ3N8UFBDMzJkaWFiIiB2YWx1ZT0iLVhPIC1Yc2l6ZS1vcHQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxub25EYmdGbGFnc3xQUEMzMmdudSIgdmFsdWU9Ii1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxub25EYmdGbGFnc3xQUEM2MDNkaWFiIiB2YWx1ZT0iLVhPIC1Yc2l6ZS1vcHQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxub25EYmdGbGFnc3xQUEM2MDNnbnUiIHZhbHVlPSItTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluIi8+DQorICAgICAgICAgICAgPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfG9iamVjdCIgdmFsdWU9InRydWUiLz4NCisgICAgICAgICAgICA8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8cGFzc0FibGUiIHZhbHVlPSJmYWxzZSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfHNpZ3MiIHZhbHVlPSIqLmMiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufGNtZHxQUEMzMmRpYWIiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7OyVhcmNoaXZlcnByZWZpeCUgJChUT09MX1BBVEgpZGFyICVUb29sRmxhZ3MlICVPdXRGaWxlJSAlT2JqZWN0cyUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufGNtZHxQUEMzMmdudSIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWFyY2hpdmVycHJlZml4JSAkKFRPT0xfUEFUSClhcnBwYyAlVG9vbEZsYWdzJSAlT3V0RmlsZSUgJU9iamVjdHMlIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxjbWR8UFBDNjAzZGlhYiIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWFyY2hpdmVycHJlZml4JSAkKFRPT0xfUEFUSClkYXIgJVRvb2xGbGFncyUgJU91dEZpbGUlICVPYmplY3RzJSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58Y21kfFBQQzYwM2dudSIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWFyY2hpdmVycHJlZml4JSAkKFRPT0xfUEFUSClhcnBwYyAlVG9vbEZsYWdzJSAlT3V0RmlsZSUgJU9iamVjdHMlIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxkYmdGbGFnc3xQUEMzMmRpYWIiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufGRiZ0ZsYWdzfFBQQzMyZ251IiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxkYmdGbGFnc3xQUEM2MDNkaWFiIiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxkYmdGbGFnc3xQUEM2MDNnbnUiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufGRlcml2ZWRTaWdzfFBQQzMyZGlhYiIgdmFsdWU9IiouYSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58ZGVyaXZlZFNpZ3N8UFBDMzJnbnUiIHZhbHVlPSIqLmEiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufGRlcml2ZWRTaWdzfFBQQzYwM2RpYWIiIHZhbHVlPSIqLmEiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufGRlcml2ZWRTaWdzfFBQQzYwM2dudSIgdmFsdWU9IiouYSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58ZmxhZ3N8UFBDMzJkaWFiIiB2YWx1ZT0iY3J1cyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58ZmxhZ3N8UFBDMzJnbnUiIHZhbHVlPSJjcnVzIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxmbGFnc3xQUEM2MDNkaWFiIiB2YWx1ZT0iY3J1cyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58ZmxhZ3N8UFBDNjAzZ251IiB2YWx1ZT0iY3J1cyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58bm9uRGJnRmxhZ3N8UFBDMzJkaWFiIiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxub25EYmdGbGFnc3xQUEMzMmdudSIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58bm9uRGJnRmxhZ3N8UFBDNjAzZGlhYiIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58bm9uRGJnRmxhZ3N8UFBDNjAzZ251IiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58b2JqZWN0IiB2YWx1ZT0iZmFsc2UiLz4NCisgICAgICAgICAgICA8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxwYXNzQWJsZSIgdmFsdWU9InRydWUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufHNpZ3MiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfGNtZHxQUEMzMmRpYWIiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7O3JtIC1mICVPdXRGaWxlJTtkZHVtcCAtTmcgJU9iamVjdHMlICVMaWJyYXJpZXMlIHwgdGNsc2ggJChXSU5EX0JBU0UpL2hvc3QvcmVzb3VyY2UvaHV0aWxzL3RjbC9tdW5jaC50Y2wgLWMgcHBjICZndDsgJChPQkpfRElSKS9jdGR0LmM7JWNjb21waWxlcnByZWZpeCUgJChUT09MX1BBVEgpZGNjICVEZWJ1Z01vZGVGbGFncyUgJChDQ19BUkNIX1NQRUMpIC1YZG9sbGFyLWluLWlkZW50IC1YZm9yY2UtZGVjbGFyYXRpb25zICQoQURERURfQ0ZMQUdTKSAlSW5jbHVkZXMlICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpICAtbyAkKE9CSl9ESVIpL2N0ZHQubyAtYyAkKE9CSl9ESVIpL2N0ZHQuYzslbGlua2VycHJlZml4JSAkKFRPT0xfUEFUSClkbGQgLXRQUENGSDp2eHdvcmtzNjMgLVggLXI1ICVUb29sRmxhZ3MlIC1vICVPdXRGaWxlJSAkKE9CSl9ESVIpL2N0ZHQubyAlT2JqZWN0cyUgJUxpYnJhcmllcyUgJChMSUJQQVRIKSAkKExJQlMpICAkKEFEREVEX0xJQlBBVEgpICQoQURERURfTElCUykgJmFtcDsmYW1wOyBpZiBbICZxdW90OyQoRVhQQU5EX0RCRykmcXVvdDsgPSAmcXVvdDsxJnF1b3Q7IF07IHRoZW4gcGxpbmsgJnF1b3Q7JEAmcXVvdDs7ZmkiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfGNtZHxQUEMzMmdudSIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7cm0gLWYgJU91dEZpbGUlO25tcHBjICVPYmplY3RzJSAlTGlicmFyaWVzJSB8IHRjbHNoICQoV0lORF9CQVNFKS9ob3N0L3Jlc291cmNlL2h1dGlscy90Y2wvbXVuY2gudGNsIC1jIHBwYyAmZ3Q7ICQoT0JKX0RJUikvY3RkdC5jOyVjY29tcGlsZXJwcmVmaXglICQoVE9PTF9QQVRIKWNjcHBjICVEZWJ1Z01vZGVGbGFncyUgJChDQ19BUkNIX1NQRUMpIC1mZG9sbGFycy1pbi1pZGVudGlmaWVycyAtV2FsbCAkKEFEREVEX0NGTEFHUykgJUluY2x1ZGVzJSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAgLW8gJChPQkpfRElSKS9jdGR0Lm8gLWMgJChPQkpfRElSKS9jdGR0LmM7JWxpbmtlcnByZWZpeCUgJChUT09MX1BBVEgpY2NwcGMgLXIgLW5vc3RkbGliIC1XbCwtWCAlVG9vbEZsYWdzJSAtbyAlT3V0RmlsZSUgJChPQkpfRElSKS9jdGR0Lm8gJU9iamVjdHMlICVMaWJyYXJpZXMlICQoTElCUEFUSCkgJChMSUJTKSAgJChBRERFRF9MSUJQQVRIKSAkKEFEREVEX0xJQlMpICZhbXA7JmFtcDsgaWYgWyAmcXVvdDskKEVYUEFORF9EQkcpJnF1b3Q7ID0gJnF1b3Q7MSZxdW90OyBdOyB0aGVuIHBsaW5rICZxdW90OyRAJnF1b3Q7O2ZpIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxjbWR8UFBDNjAzZGlhYiIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7cm0gLWYgJU91dEZpbGUlO2RkdW1wIC1OZyAlT2JqZWN0cyUgJUxpYnJhcmllcyUgfCB0Y2xzaCAkKFdJTkRfQkFTRSkvaG9zdC9yZXNvdXJjZS9odXRpbHMvdGNsL211bmNoLnRjbCAtYyBwcGMgJmd0OyAkKE9CSl9ESVIpL2N0ZHQuYzslY2NvbXBpbGVycHJlZml4JSAkKFRPT0xfUEFUSClkY2MgJURlYnVnTW9kZUZsYWdzJSAkKENDX0FSQ0hfU1BFQykgLVhkb2xsYXItaW4taWRlbnQgLVhmb3JjZS1kZWNsYXJhdGlvbnMgJChBRERFRF9DRkxBR1MpICVJbmNsdWRlcyUgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgIC1vICQoT0JKX0RJUikvY3RkdC5vIC1jICQoT0JKX0RJUikvY3RkdC5jOyVsaW5rZXJwcmVmaXglICQoVE9PTF9QQVRIKWRsZCAtdFBQQzYwM0ZIOnZ4d29ya3M2MyAtWCAtcjUgJVRvb2xGbGFncyUgLW8gJU91dEZpbGUlICQoT0JKX0RJUikvY3RkdC5vICVPYmplY3RzJSAlTGlicmFyaWVzJSAkKExJQlBBVEgpICQoTElCUykgICQoQURERURfTElCUEFUSCkgJChBRERFRF9MSUJTKSAmYW1wOyZhbXA7IGlmIFsgJnF1b3Q7JChFWFBBTkRfREJHKSZxdW90OyA9ICZxdW90OzEmcXVvdDsgXTsgdGhlbiBwbGluayAmcXVvdDskQCZxdW90OztmaSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8Y21kfFBQQzYwM2dudSIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7cm0gLWYgJU91dEZpbGUlO25tcHBjICVPYmplY3RzJSAlTGlicmFyaWVzJSB8IHRjbHNoICQoV0lORF9CQVNFKS9ob3N0L3Jlc291cmNlL2h1dGlscy90Y2wvbXVuY2gudGNsIC1jIHBwYyAmZ3Q7ICQoT0JKX0RJUikvY3RkdC5jOyVjY29tcGlsZXJwcmVmaXglICQoVE9PTF9QQVRIKWNjcHBjICVEZWJ1Z01vZGVGbGFncyUgJChDQ19BUkNIX1NQRUMpIC1mZG9sbGFycy1pbi1pZGVudGlmaWVycyAtV2FsbCAkKEFEREVEX0NGTEFHUykgJUluY2x1ZGVzJSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAgLW8gJChPQkpfRElSKS9jdGR0Lm8gLWMgJChPQkpfRElSKS9jdGR0LmM7JWxpbmtlcnByZWZpeCUgJChUT09MX1BBVEgpY2NwcGMgLXIgLW5vc3RkbGliIC1XbCwtWCAlVG9vbEZsYWdzJSAtbyAlT3V0RmlsZSUgJChPQkpfRElSKS9jdGR0Lm8gJU9iamVjdHMlICVMaWJyYXJpZXMlICQoTElCUEFUSCkgJChMSUJTKSAgJChBRERFRF9MSUJQQVRIKSAkKEFEREVEX0xJQlMpICZhbXA7JmFtcDsgaWYgWyAmcXVvdDskKEVYUEFORF9EQkcpJnF1b3Q7ID0gJnF1b3Q7MSZxdW90OyBdOyB0aGVuIHBsaW5rICZxdW90OyRAJnF1b3Q7O2ZpIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxkYmdGbGFnc3xQUEMzMmRpYWIiIHZhbHVlPSItZyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8ZGJnRmxhZ3N8UFBDMzJnbnUiIHZhbHVlPSItZyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8ZGJnRmxhZ3N8UFBDNjAzZGlhYiIgdmFsdWU9Ii1nIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxkYmdGbGFnc3xQUEM2MDNnbnUiIHZhbHVlPSItZyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8ZGVyaXZlZFNpZ3N8UFBDMzJkaWFiIiB2YWx1ZT0iKi5vdXQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfGRlcml2ZWRTaWdzfFBQQzMyZ251IiB2YWx1ZT0iKi5vdXQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfGRlcml2ZWRTaWdzfFBQQzYwM2RpYWIiIHZhbHVlPSIqLm91dCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8ZGVyaXZlZFNpZ3N8UFBDNjAzZ251IiB2YWx1ZT0iKi5vdXQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfGZsYWdzfFBQQzMyZGlhYiIgdmFsdWU9Ii1yNCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8ZmxhZ3N8UFBDMzJnbnUiIHZhbHVlPSItVCAkKFdJTkRfQkFTRSkvdGFyZ2V0L2gvdG9vbC9nbnUvbGRzY3JpcHRzL2xpbmsuT1VUIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxmbGFnc3xQUEM2MDNkaWFiIiB2YWx1ZT0iLXI0Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxmbGFnc3xQUEM2MDNnbnUiIHZhbHVlPSItVCAkKFdJTkRfQkFTRSkvdGFyZ2V0L2gvdG9vbC9nbnUvbGRzY3JpcHRzL2xpbmsuT1VUIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxub25EYmdGbGFnc3xQUEMzMmRpYWIiIHZhbHVlPSItWE8gLVhzaXplLW9wdCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8bm9uRGJnRmxhZ3N8UFBDMzJnbnUiIHZhbHVlPSItTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxub25EYmdGbGFnc3xQUEM2MDNkaWFiIiB2YWx1ZT0iLVhPIC1Yc2l6ZS1vcHQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfG5vbkRiZ0ZsYWdzfFBQQzYwM2dudSIgdmFsdWU9Ii1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4iLz4NCisgICAgICAgICAgICA8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxvYmplY3QiIHZhbHVlPSJmYWxzZSIvPg0KKyAgICAgICAgICAgIDxib29sZWFuQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfHBhc3NBYmxlIiB2YWx1ZT0iZmFsc2UiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfHNpZ3MiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8Y21kfFBQQzMyZGlhYiIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWxpbmtlcnByZWZpeCUgJChUT09MX1BBVEgpZGxkIC10UFBDRkg6dnh3b3JrczYzIC1YIC1yNSAlVG9vbEZsYWdzJSAtbyAlT3V0RmlsZSUgJU9iamVjdHMlICQoTElCUEFUSCkgJChMSUJTKSAkKEFEREVEX0xJQlBBVEgpICQoQURERURfTElCUykgICZhbXA7JmFtcDsgaWYgWyAmcXVvdDskKEVYUEFORF9EQkcpJnF1b3Q7ID0gJnF1b3Q7MSZxdW90OyBdOyB0aGVuIHBsaW5rICZxdW90OyRAJnF1b3Q7O2ZpIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfGNtZHxQUEMzMmdudSIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWxpbmtlcnByZWZpeCUgJChUT09MX1BBVEgpY2NwcGMgLXIgLW5vc3RkbGliIC1XbCwtWCAlVG9vbEZsYWdzJSAtbyAlT3V0RmlsZSUgJU9iamVjdHMlICQoTElCUEFUSCkgJChMSUJTKSAkKEFEREVEX0xJQlBBVEgpICQoQURERURfTElCUykgICZhbXA7JmFtcDsgaWYgWyAmcXVvdDskKEVYUEFORF9EQkcpJnF1b3Q7ID0gJnF1b3Q7MSZxdW90OyBdOyB0aGVuIHBsaW5rICZxdW90OyRAJnF1b3Q7O2ZpIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfGNtZHxQUEM2MDNkaWFiIiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OzslbGlua2VycHJlZml4JSAkKFRPT0xfUEFUSClkbGQgLXRQUEM2MDNGSDp2eHdvcmtzNjMgLVggLXI1ICVUb29sRmxhZ3MlIC1vICVPdXRGaWxlJSAlT2JqZWN0cyUgJChMSUJQQVRIKSAkKExJQlMpICQoQURERURfTElCUEFUSCkgJChBRERFRF9MSUJTKSAgJmFtcDsmYW1wOyBpZiBbICZxdW90OyQoRVhQQU5EX0RCRykmcXVvdDsgPSAmcXVvdDsxJnF1b3Q7IF07IHRoZW4gcGxpbmsgJnF1b3Q7JEAmcXVvdDs7ZmkiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8Y21kfFBQQzYwM2dudSIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWxpbmtlcnByZWZpeCUgJChUT09MX1BBVEgpY2NwcGMgLXIgLW5vc3RkbGliIC1XbCwtWCAlVG9vbEZsYWdzJSAtbyAlT3V0RmlsZSUgJU9iamVjdHMlICQoTElCUEFUSCkgJChMSUJTKSAkKEFEREVEX0xJQlBBVEgpICQoQURERURfTElCUykgICZhbXA7JmFtcDsgaWYgWyAmcXVvdDskKEVYUEFORF9EQkcpJnF1b3Q7ID0gJnF1b3Q7MSZxdW90OyBdOyB0aGVuIHBsaW5rICZxdW90OyRAJnF1b3Q7O2ZpIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfGRiZ0ZsYWdzfFBQQzMyZGlhYiIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxkYmdGbGFnc3xQUEMzMmdudSIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxkYmdGbGFnc3xQUEM2MDNkaWFiIiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfGRiZ0ZsYWdzfFBQQzYwM2dudSIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxkZXJpdmVkU2lnc3xQUEMzMmRpYWIiIHZhbHVlPSIqLm8iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8ZGVyaXZlZFNpZ3N8UFBDMzJnbnUiIHZhbHVlPSIqLm8iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8ZGVyaXZlZFNpZ3N8UFBDNjAzZGlhYiIgdmFsdWU9IioubyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxkZXJpdmVkU2lnc3xQUEM2MDNnbnUiIHZhbHVlPSIqLm8iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8ZmxhZ3N8UFBDMzJkaWFiIiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfGZsYWdzfFBQQzMyZ251IiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfGZsYWdzfFBQQzYwM2RpYWIiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8ZmxhZ3N8UFBDNjAzZ251IiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfG5vbkRiZ0ZsYWdzfFBQQzMyZGlhYiIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxub25EYmdGbGFnc3xQUEMzMmdudSIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxub25EYmdGbGFnc3xQUEM2MDNkaWFiIiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfG5vbkRiZ0ZsYWdzfFBQQzYwM2dudSIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxib29sZWFuQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8b2JqZWN0IiB2YWx1ZT0iZmFsc2UiLz4NCisgICAgICAgICAgICA8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfHBhc3NBYmxlIiB2YWx1ZT0idHJ1ZSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxzaWdzIiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xjbWQiIHZhbHVlPSIlbWFrZXByZWZpeCUgbWFrZSAtLW5vLXByaW50LWRpcmVjdG9yeSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98ZGVmYXVsdFNwZWMiIHZhbHVlPSJQUEM2MDNnbnUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfHJlZGlyRGlyfFBQQzMyZGlhYiIgdmFsdWU9IlBQQzMyZGlhYiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98cmVkaXJEaXJ8UFBDMzJnbnUiIHZhbHVlPSJQUEMzMmdudSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98cmVkaXJEaXJ8UFBDNjAzZGlhYiIgdmFsdWU9IlBQQzYwM2RpYWIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfHJlZGlyRGlyfFBQQzYwM2dudSIgdmFsdWU9IlBQQzYwM2dudSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98cmVkaXJSb290IiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPGxpc3RBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98c3BlY3MiPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSJQUEMzMmRpYWIiLz4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iUFBDMzJnbnUiLz4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iUFBDNjAzZGlhYiIvPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSJQUEM2MDNnbnUiLz4NCisgICAgICAgICAgICA8L2xpc3RBdHRyaWJ1dGU+DQorICAgICAgICAgICAgPGludEF0dHJpYnV0ZSBrZXk9IkJ1aWxkU3VwcG9ydEVuYWJsZWQiIHZhbHVlPSIxIi8+DQorICAgICAgICAgICAgPGxpc3RBdHRyaWJ1dGUga2V5PSJCdWlsZFN1cHBvcnRGb3JCdWlsZFNwZWNzIj4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iUFBDNjAzZ251Ii8+DQorICAgICAgICAgICAgPC9saXN0QXR0cmlidXRlPg0KKyAgICAgICAgICAgIDxib29sZWFuQXR0cmlidXRlIGtleT0iQnVpbGRUYXJnZXRDZW50cmljIiB2YWx1ZT0idHJ1ZSIvPg0KKyAgICAgICAgPC9tYXBBdHRyaWJ1dGU+DQorICAgIDwvYXR0cmlidXRlcz4NCisgICAgPGJ1aWxkdGFyZ2V0cz4NCisgICAgICAgIDxidWlsZHRhcmdldCBidWlsZHRvb2w9IkxpbmtlciIgbmFtZT0iU2ltcGxlVGVtcGxhdGUiIHBhc3NlZD0iZmFsc2UiIHRhcmdldG5hbWU9IlNpbXBsZVRlbXBsYXRlIj4NCisgICAgICAgICAgICA8Y29udGVudHM+DQorICAgICAgICAgICAgICAgIDxidWlsZHRhcmdldHJlZmVyZW5jZSBuYW1lPSIvTGluZVRyYWNrZXJTYW1wbGUvU2ltcGxlVGVtcGxhdGVfcGFydGlhbEltYWdlIi8+DQorICAgICAgICAgICAgPC9jb250ZW50cz4NCisgICAgICAgIDwvYnVpbGR0YXJnZXQ+DQorICAgICAgICA8YnVpbGR0YXJnZXQgYnVpbGR0b29sPSJQYXJ0aWFsIEltYWdlIExpbmtlciIgbmFtZT0iU2ltcGxlVGVtcGxhdGVfcGFydGlhbEltYWdlIiBwYXNzZWQ9InRydWUiIHRhcmdldG5hbWU9IlNpbXBsZVRlbXBsYXRlX3BhcnRpYWxJbWFnZSI+DQorICAgICAgICAgICAgPGNvbnRlbnRzPg0KKyAgICAgICAgICAgICAgICA8Zm9sZGVyIG5hbWU9Ii9MaW5lVHJhY2tlclNhbXBsZSIgcmVjdXJzaXZlPSJ0cnVlIi8+DQorICAgICAgICAgICAgPC9jb250ZW50cz4NCisgICAgICAgIDwvYnVpbGR0YXJnZXQ+DQorICAgIDwvYnVpbGR0YXJnZXRzPg0KKzwvd3J4bWw+DQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvdnh3b3Jrcy02LjMvdGFyZ2V0L3NyYy9kZW1vL0xpbmVUcmFja2VyU2FtcGxlL015Um9ib3QuY3BwIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvdnh3b3Jrcy02LjMvdGFyZ2V0L3NyYy9kZW1vL0xpbmVUcmFja2VyU2FtcGxlL015Um9ib3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4MzQ5NjIKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vTGluZVRyYWNrZXJTYW1wbGUvTXlSb2JvdC5jcHAKQEAgLTAsMCArMSwxNzIgQEAKKyNpbmNsdWRlICJXUElMaWIuaCINCisNCisvKioNCisgKiBTYW1wbGUgbGluZSB0cmFja2luZyBjbGFzcyBmb3IgRklSU1QgMjAxMSBDb21wZXRpdGlvbg0KKyAqIEp1bXBlcnMgb24gZHJpdmVyIHN0YXRpb24gZGlnaXRhbCBJL08gcGlucyBzZWxlY3QgdGhlIG9wZXJhdGluZyBtb2RlOg0KKyAqIFRoZSBEcml2ZXIgU3RhdGlvbiBkaWdpdGFsIGlucHV0IDEgc2VsZWN0IHdoZXRoZXIgdGhlIGNvZGUgdHJhY2tzIHRoZSBzdHJhaWdodA0KKyAqIGxpbmUgb3IgdGhlIGZvcmtlZCBsaW5lLiBEcml2ZXIgc3RhdGlvbiBkaWdpdGFsIGlucHV0IDIgc2VsZWN0cyB3aGV0aGVyIHRoZQ0KKyAqIGNvZGUgdGFrZXMgdGhlIGxlZnQgb3IgcmlnaHQgZm9yay4gWW91IGNhbiBzZXQgdGhlc2UgaW5wdXRzIHVzaW5nIGp1bXBlcnMgb24NCisgKiB0aGUgVVNCIEkvTyBtb2R1bGUgb3IgaW4gdGhlIGRyaXZlciBzdGF0aW9uIEkvTyBDb25maWd1cmF0aW9uIHBhbmUgKGlmIHRoZXJlDQorICogaXMgbm8gRGlnaXRhbCBJL08gbW9kdWxlIGluc3RhbGxlZC4NCisgKg0KKyAqIFNpbmNlIHRoZXJlIGlzIHRoZSBmb3JrIHRvIGNvbnRlbmQgd2l0aCwgdGhlIGNvZGUgdHJhY2tzIHRoZSBlZGdlIG9mIHRoZSBsaW5lDQorICogdXNpbmcgYSB0ZWNobmlxdWUgc2ltaWxhciB0byB0aGF0IHVzZWQgd2l0aCBhIHNpbmdsZS1zZW5zb3IgTGVnbyByb2JvdC4NCisgKg0KKyAqIFRoaXMgY29kZSB3b3JrZWQgb24gYSBzaW1wbGUgYm90IGJ1aWx0IGZyb20gdGhlIDIwMTEga2l0IGNoYXNzaXMgYW5kIHdlaWdodGVkDQorICogdG8gYmVoYXZlIHNpbWlsYXJseSB0byBjb21wbGV0ZSByb2JvdCBjb21wbGV0ZSB3aXRoIHNjb3JpbmcgbWVjaGFuaXNtcy4gWW91cg0KKyAqIG93biByb2JvdCB3aWxsIGxpa2VseSBiZSBnZWFyZWQgZGlmZmVyZW50bHksIHRoZSBDRyB3aWxsIGJlIGRpZmZlcmVudCwgdGhlDQorICogd2hlZWxzIG1heSBiZSBkaWZmZXJlbnQgLSBzbyBleHBlY3QgdG8gdHVuZSB0aGUgcHJvZ3JhbSBmb3IgeW91ciBvd24gcm9ib3QNCisgKiBjb25maWd1cmF0aW9uLiBUaGUgdHdvIHBsYWNlcyB0byBkbyB0dW5pbmcgYXJlOg0KKyAqDQorICogZGVmYXVsdFN0ZWVyaW5nR2FpbiAtIHRoaXMgaXMgdGhlIGFtb3VudCBvZiB0dXJuaW5nIGNvcnJlY3Rpb24gYXBwbGllZA0KKyAqIGZvcmtQcm9maWxlICYgc3RyYWlnaHRQcm9maWxlIC0gdGhlc2UgYXJlIHBvd2VyIHByb2ZpbGVzIGFwcGxpZWQgYXQgdmFyaW91cw0KKyAqCXRpbWVzIChvbmUgcG93ZXIgc2V0dGluZyAvIHNlY29uZCBvZiB0cmF2ZWwpIGFzIHRoZSByb2JvdCBtb3ZlcyB0b3dhcmRzDQorICoJdGhlIHdhbGwuDQorICoNCisgKiBJbiBhZGRpdGlvbjogdGhpcyBwcm9ncmFtIHVzZXMgZGVhZCByZWNrb25pbmcgLSB0aGF0IGlzIGl0IGRyaXZlcyBhdCB2YXJpb3VzDQorICogcG93ZXIgc2V0dGluZ3Mgc28gaXQgd2lsbCBzbG93IGRvd24gYW5kIHN0b3AgYXQgdGhlIGVuZCBvZiB0aGUgbGluZS4gVGhpcyBpcw0KKyAqIGhpZ2hseSBkZXBlbmRlbnQgb24gcm9ib3Qgd2VpZ2h0LCB3aGVlbCBjaG9pY2UsIGFuZCBiYXR0ZXJ5IHZvbHRhZ2UuIEl0IHdpbGwNCisgKiBiZWhhdmUgZGlmZmVyZW50bHkgb24gYSBmdWxseSBjaGFyZ2VkIHZzLiBwYXJ0aWFsbHkgY2hhcmdlZCBiYXR0ZXJ5Lg0KKyAqDQorICogVG8gb3ZlcmNvbWUgdGhlc2UgbGltaXRhdGlvbnMsIHlvdSBzaG91bGQgaW52ZXN0aWdhdGUgdGhlIHVzZSBvZiBmZWVkYmFjayB0bw0KKyAqIGhhdmUgcG93ZXIvd2hlZWwgaW5kZXBlbmRlbnQgY29udHJvbCBvZiB0aGUgcHJvZ3JhbS4gRXhhbXBsZXMgb2YgZmVlZGJhY2sNCisgKiBpbmNsdWRlIHVzaW5nIHdoZWVsIGVuY29kZXJzIHRvIG1lYXN1cmUgdGhlIGRpc3RhbmNlIHRyYXZlbGVkIG9yIHNvbWUga2luZCBvZg0KKyAqIHJhbmdlZmluZGVyIHRvIGRldGVybWluZSB0aGUgZGlzdGFuY2UgdG8gdGhlIHdhbGwuIFdpdGggdGhlc2Ugc2Vuc29ycyBpbnN0YWxsZWQNCisgKiB5b3VyIHByb2dyYW0gY2FuIGtub3cgcHJlY2lzZWx5IGhvdyBmYXIgZnJvbSB0aGUgd2FsbCBpdCBpcywgYW5kIHNldCB0aGUgc3BlZWRzDQorICogYWNjb3JkaW5nbHkuDQorICoNCisgKi8NCitjbGFzcyBSb2JvdERlbW8gOiBwdWJsaWMgU2ltcGxlUm9ib3QNCit7DQorCVJvYm90RHJpdmUgKmRyaXZlOwkJCS8vIHJvYm90IGRyaXZlIGJhc2Ugb2JqZWN0DQorCURpZ2l0YWxJbnB1dCAqbGVmdDsJCQkvLyBkaWdpdGFsIGlucHV0cyBmb3IgbGluZSB0cmFja2luZyBzZW5zb3JzDQorCURpZ2l0YWxJbnB1dCAqbWlkZGxlOw0KKwlEaWdpdGFsSW5wdXQgKnJpZ2h0Ow0KKwlEcml2ZXJTdGF0aW9uICpkczsJCQkvLyBkcml2ZXIgc3RhdGlvbiBvYmplY3QgZm9yIGdldHRpbmcgc2VsZWN0aW9ucw0KKw0KK3B1YmxpYzoNCisJLyoNCisJICogUm9ib3REZW1vIGNvbnN0cnVjdG9yDQorCSAqIFRoaXMgY29kZSBjcmVhdGVzIGluc3RhbmNlcyBvZiB0aGUgb2JqZWN0cyBhbmQgc2V0cyB1cCB0aGUgZHJpdmluZyBkaXJlY3Rpb25zDQorCSAqIGZvciB0aGUgUm9ib3REcml2ZSBvYmplY3QuIE91ciByb2JvdCB3YXMgZ2VhcmVkIHN1Y2ggdGhhdCB3ZSBoYWQgdG8gaW52ZXJ0DQorCSAqIGVhY2ggb2YgdGhlbSBtb3RvciBvdXRwdXRzLiBZb3UgbWF5IG5vdCBuZWVkIHRvIGRvIHRoYXQNCisJICovDQorCVJvYm90RGVtbygpIHsNCisJCWRyaXZlID0gbmV3IFJvYm90RHJpdmUoMSwgMik7DQorCQlkcml2ZS0+U2V0SW52ZXJ0ZWRNb3RvcihSb2JvdERyaXZlOjprRnJvbnRSaWdodE1vdG9yLCB0cnVlKTsNCisJCWRyaXZlLT5TZXRJbnZlcnRlZE1vdG9yKFJvYm90RHJpdmU6OmtGcm9udExlZnRNb3RvciwgdHJ1ZSk7DQorCQlkcml2ZS0+U2V0SW52ZXJ0ZWRNb3RvcihSb2JvdERyaXZlOjprUmVhclJpZ2h0TW90b3IsIHRydWUpOw0KKwkJZHJpdmUtPlNldEludmVydGVkTW90b3IoUm9ib3REcml2ZTo6a1JlYXJMZWZ0TW90b3IsIHRydWUpOw0KKwkJZHJpdmUtPlNldEV4cGlyYXRpb24oMTUpOw0KKwkJbGVmdCA9IG5ldyBEaWdpdGFsSW5wdXQoMSk7DQorCQltaWRkbGUgPSBuZXcgRGlnaXRhbElucHV0KDIpOw0KKwkJcmlnaHQgPSBuZXcgRGlnaXRhbElucHV0KDMpOw0KKwkJZHMgPSBEcml2ZXJTdGF0aW9uOjpHZXRJbnN0YW5jZSgpOwkvLyBkcml2ZXIgc3RhdGlvbiBpbnN0YW5jZSBmb3IgZGlnaXRhbCBJL08NCisJfQ0KKwkvKioNCisJICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgb25jZSBlYWNoIHRpbWUgdGhlIHJvYm90IGVudGVycyBhdXRvbm9tb3VzIG1vZGUuDQorCSAqLw0KKwl2b2lkIEF1dG9ub21vdXMoKSB7DQorCQlkb3VibGUgZGVmYXVsdFN0ZWVyaW5nR2FpbiA9IDAuNjU7CS8vIGRlZmF1bHQgdmFsdWUgZm9yIHN0ZWVyaW5nIGdhaW4NCisNCisJCWludCBiaW5hcnlWYWx1ZTsNCisJCWludCBwcmV2aW91c1ZhbHVlID0gMDsNCisJCWRvdWJsZSBzdGVlcmluZ0dhaW47DQorDQorCQkvLyB0aGUgcG93ZXIgcHJvZmlsZXMgZm9yIHRoZSBzdHJhaWdodCBhbmQgZm9ya2VkIHJvYm90IHBhdGguIFRoZXkgYXJlDQorCQkvLyBkaWZmZXJlbnQgdG8gbGV0IHRoZSByb2JvdCBkcml2ZSBtb3JlIHNsb3dseSBhcyB0aGUgcm9ib3QgYXBwcm9hY2hlcw0KKwkJLy8gdGhlIGZvcmsgb24gdGhlIGZvcmtlZCBsaW5lIGNhc2UuDQorCQlkb3VibGUgZm9ya1Byb2ZpbGVbXSA9IHswLjcwLCAwLjcwLCAwLjU1LCAwLjYwLCAwLjYwLCAwLjUwLCAwLjQwLCAwLjB9Ow0KKwkJZG91YmxlIHN0cmFpZ2h0UHJvZmlsZVtdID0gezAuNzAsIDAuNzAsIDAuNjAsIDAuNjAsIDAuMzUsIDAuMzUsIDAuMzUsIDAuMH07DQorDQorCQlkb3VibGUgKnBvd2VyUHJvZmlsZTsgIC8vIHRoZSBzZWxlY3RlZCBwb3dlciBwcm9maWxlDQorCQkNCisJCS8vIHNldCB0aGUgc3RyYWlnaHQgdnMgZm9ya2VkIHBhdGggdmFyaWFibGVzIGFzIHJlYWQgZnJvbSB0aGUgRFMgZGlnaXRhbA0KKwkJLy8gaW5wdXRzIG9yIHRoZSBJL08gU2V0dXAgcGFuZWwgb24gdGhlIGRyaXZlciBzdGF0aW9uLg0KKwkJYm9vbCBzdHJhaWdodExpbmUgPSBkcy0+R2V0RGlnaXRhbEluKDEpOw0KKwkJcG93ZXJQcm9maWxlID0gKHN0cmFpZ2h0TGluZSkgPyBzdHJhaWdodFByb2ZpbGUgOiBmb3JrUHJvZmlsZTsNCisJCWRvdWJsZSBzdG9wVGltZSA9IChzdHJhaWdodExpbmUpID8gMi4wIDogNC4wOw0KKwkJYm9vbCBnb0xlZnQgPSAhZHMtPkdldERpZ2l0YWxJbigyKSAmJiAhc3RyYWlnaHRMaW5lOw0KKwkJcHJpbnRmKCJTdHJhaWdodExpbmU6ICVkXG4iLCBzdHJhaWdodExpbmUpOw0KKwkJcHJpbnRmKCJHb2luZ0xlZnQ6ICVkXG4iLCBnb0xlZnQpOw0KKw0KKwkJYm9vbCBhdENyb3NzID0gZmFsc2U7CS8vIHRydWUgd2hlbiByb2JvdCBoYXMgcmVhY2hlZCBlbmQNCisNCisJCS8vIHNldCB1cCB0aW1lciBmb3IgOCBzZWNvbmQgbWF4IGRyaXZpbmcgdGltZSBhbmQgdXNlIHRoZSB0aW1lciB0bw0KKwkJLy8gcGljayB2YWx1ZXMgZnJvbSB0aGUgcG93ZXIgcHJvZmlsZSBhcnJheXMNCisJCVRpbWVyICp0aW1lciA9IG5ldyBUaW1lcigpOw0KKwkJdGltZXItPlN0YXJ0KCk7DQorCQl0aW1lci0+UmVzZXQoKTsNCisJCQ0KKwkJaW50IG9sZFRpbWVJblNlY29uZHMgPSAtMTsNCisJCWRvdWJsZSB0aW1lOw0KKwkJZG91YmxlIHNwZWVkLCB0dXJuOw0KKw0KKwkJLy8gbG9vcCB1bnRpbCBlaXRoZXIgd2UgaGl0IHRoZSAiVCIgYXQgdGhlIGVuZCBvciA4IHNlY29uZHMgaGFzDQorCQkvLyBlbGFwc2VkLiBUaGUgdGltZSB0byB0aGUgZW5kIHNob3VsZCBiZSBsZXNzIHRoYW4gNyBzZWNvbmRzDQorCQkvLyBmb3IgZWl0aGVyIHBhdGguDQorCQl3aGlsZSAoKHRpbWUgPSB0aW1lci0+R2V0KCkpIDwgOC4wICYmICFhdENyb3NzKSB7DQorCQkJaW50IHRpbWVJblNlY29uZHMgPSAoaW50KSB0aW1lOw0KKwkJCWludCBsZWZ0VmFsdWUgPSBsZWZ0LT5HZXQoKSA/IDEgOiAwOwkvLyByZWFkIHRoZSBsaW5lIHRyYWNraW5nIHNlbnNvcnMNCisJCQlpbnQgbWlkZGxlVmFsdWUgPSBtaWRkbGUtPkdldCgpID8gMSA6IDA7DQorCQkJaW50IHJpZ2h0VmFsdWUgPSByaWdodC0+R2V0KCkgPyAxIDogMDsNCisNCisJCSAgICAvLyBjb21wdXRlIHRoZSBzaW5nbGUgdmFsdWUgZnJvbSB0aGUgMyBzZW5zb3JzLiBOb3RpY2UgdGhhdCB0aGUgYml0cw0KKwkJICAgIC8vIGZvciB0aGUgb3V0c2lkZSBzZW5zb3JzIGFyZSBmbGlwcGVkIGRlcGVuZGluZyBvbiBsZWZ0IG9yIHJpZ2h0DQorCQkgICAgLy8gZm9yay4gQWxzbyB0aGUgc2lnbiBvZiB0aGUgc3RlZXJpbmcgZGlyZWN0aW9uIGlzIGRpZmZlcmVudCBmb3IgbGVmdC9yaWdodC4NCisJCQlpZiAoZ29MZWZ0KSB7DQorCQkJCWJpbmFyeVZhbHVlID0gbGVmdFZhbHVlICogNCArIG1pZGRsZVZhbHVlICogMiArIHJpZ2h0VmFsdWU7DQorCQkJCXN0ZWVyaW5nR2FpbiA9IC1kZWZhdWx0U3RlZXJpbmdHYWluOw0KKwkJCX0gZWxzZSB7DQorCQkJCWJpbmFyeVZhbHVlID0gcmlnaHRWYWx1ZSAqIDQgKyBtaWRkbGVWYWx1ZSAqIDIgKyBsZWZ0VmFsdWU7DQorCQkJCXN0ZWVyaW5nR2FpbiA9IGRlZmF1bHRTdGVlcmluZ0dhaW47DQorCQkJfQ0KKw0KKwkJCXNwZWVkID0gcG93ZXJQcm9maWxlW3RpbWVJblNlY29uZHNdOwkvLyBzcGVlZCB2YWx1ZSBmb3IgdGhpcyB0aW1lDQorCQkJdHVybiA9IDA7CQkJCQkJCQkvLyBkZWZhdWx0IHRvIG5vIHR1cm4NCisNCisJCQlzd2l0Y2ggKGJpbmFyeVZhbHVlKSB7DQorCQkJCWNhc2UgMToJCQkJCS8vIGp1c3QgdGhlIG91dHNpZGUgc2Vuc29yIC0gZHJpdmUgc3RyYWlnaHQNCisJCQkJCXR1cm4gPSAwOw0KKwkJCQkJYnJlYWs7DQorCQkJCWNhc2UgNzoJCQkJCS8vIGFsbCBzZW5zb3JzIC0gbWF5YmUgYXQgdGhlICJUIg0KKwkJCQlpZiAodGltZT4gc3RvcFRpbWUpIHsNCisJCQkJCWF0Q3Jvc3MgPSB0cnVlOw0KKwkJCQkJc3BlZWQgPSAwOw0KKwkJCQl9DQorCQkJCWJyZWFrOw0KKwkJCQljYXNlIDA6CQkJCQkvLyBubyBzZW5zb3JzIC0gYXBwbHkgcHJldmlvdXMgY29ycmVjdGlvbg0KKwkJCQlpZiAocHJldmlvdXNWYWx1ZSA9PSAwIHx8IHByZXZpb3VzVmFsdWUgPT0gMSkgew0KKwkJCQkJdHVybiA9IHN0ZWVyaW5nR2FpbjsNCisJCQkJfQ0KKwkJCQllbHNlIHsNCisJCQkJCXR1cm4gPSAtc3RlZXJpbmdHYWluOw0KKwkJCQl9DQorCQkJCWJyZWFrOw0KKwkJCQlkZWZhdWx0OgkJCQkvLyBhbnl0aGluZyBlbHNlLCBzdGVlciBiYWNrIHRvIHRoZSBsaW5lDQorCQkJCXR1cm4gPSAtc3RlZXJpbmdHYWluOw0KKwkJCX0NCisJCQkvLyB1c2VmdWwgZGVidWdnaW5nIG91dHB1dCBmb3IgdHVuaW5nIHlvdXIgcG93ZXIgcHJvZmlsZSBhbmQgc3RlZXJpbmcgZ2Fpbg0KKwkJCWlmKGJpbmFyeVZhbHVlICE9IHByZXZpb3VzVmFsdWUpDQorCQkJCXByaW50ZigiVGltZTogJTIuMmYgc2Vuc29yOiAlZCBzcGVlZDogJTEuMmYgdHVybjogJTEuMmYgYXRDcm9zczogJWRcbiIsIHRpbWUsIGJpbmFyeVZhbHVlLCBzcGVlZCwgdHVybiwgYXRDcm9zcyk7DQorCQkJLy8gbW92ZSB0aGUgcm9ib3QgZm9yd2FyZA0KKwkJCWRyaXZlLT5BcmNhZGVEcml2ZShzcGVlZCwgdHVybik7DQorCQkJaWYgKGJpbmFyeVZhbHVlICE9IDApIHByZXZpb3VzVmFsdWUgPSBiaW5hcnlWYWx1ZTsNCisJCQlvbGRUaW1lSW5TZWNvbmRzID0gdGltZUluU2Vjb25kczsNCisJCQlXYWl0KDAuMDEpOw0KKwkJfQ0KKwkJLy8gc3RvcCBkcml2aW5nIHdoZW4gZmluaXNoZWQNCisJCWRyaXZlLT5BcmNhZGVEcml2ZSgwLjAsIDAuMCk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIG9uY2UgZWFjaCB0aW1lIHRoZSByb2JvdCBlbnRlcnMgb3BlcmF0b3IgY29udHJvbC4NCisJICovDQorCXZvaWQgT3BlcmF0b3JDb250cm9sKCkgew0KKwkJLy8gc3VwcGx5IHlvdXIgb3duIHRlbGVvcCBjb2RlIGhlcmUNCisJfQ0KK307DQorDQorU1RBUlRfUk9CT1RfQ0xBU1MoUm9ib3REZW1vKQ0KKzsNCisNCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vTGluZVRyYWNrZXJTYW1wbGUvc2FtcGxlLnByb3BlcnRpZXMgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vTGluZVRyYWNrZXJTYW1wbGUvc2FtcGxlLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWZjODk1ZQotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9MaW5lVHJhY2tlclNhbXBsZS9zYW1wbGUucHJvcGVydGllcwpAQCAtMCwwICsxLDIgQEAKK3Byb2plY3QudHlwZT1Eb3dubG9hZGFibGVLZXJuZWxNb2R1bGVQcm9qZWN0DQorcGxhdGZvcm0uaWQ9VnhXb3Jrcw0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9MaW5lVHJhY2tlclNhbXBsZS9zYW1wbGUudHh0IGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvdnh3b3Jrcy02LjMvdGFyZ2V0L3NyYy9kZW1vL0xpbmVUcmFja2VyU2FtcGxlL3NhbXBsZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzIwYzc3ZgotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9MaW5lVHJhY2tlclNhbXBsZS9zYW1wbGUudHh0CkBAIC0wLDAgKzEsMTAgQEAKK0ZSQyBMaW5lIFRyYWNrZXIgU2FtcGxlIFByb2dyYW0NCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKw0KK1RoaXMgaXMgYSBzaW1wbGUgbGluZSB0cmFja2VyIHNhbXBsZSBwcm9ncmFtIHRoYXQgcHJvdmlkZXMNCithIHVzZWZ1bCBzdGFydGluZyBwb2ludCBmb3IgY3JlYXRpbmcgYSByb2JvdCBwcm9ncmFtIHRoYXQNCitjYW4gYXV0b25vbW91c2x5IHB1dCB0dWJlcyBvbiB0aGUgd2FsbCBmb3IgdGhlIDIwMTEgRlJDDQorZ2FtZS4gVGhlIGNvbW1lbnRzIGRlc2NyaWJlIGhvdyBpdCBtaWdodCBiZSBtb2RpZmllZCBmb3INCit5b3VyIG93biB1c2UgYW5kIGRlcGVuZHMgb24gdGhlIHdlaWdodCBhbmQgc3BlZWQgb2YgeW91ciBvd24NCityb2JvdC4gVGhpcyBoYXMgYmVlbiB0ZXN0ZWQgYXQgRklSU1QgdXNpbmcgdGhlIDIwMTEga2l0Ym90DQord2l0aCBhIGNoYXJnZWQgYmF0dGVyeS4NCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vU2ltcGxlVGVtcGxhdGUvLmNwcm9qZWN0IGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvdnh3b3Jrcy02LjMvdGFyZ2V0L3NyYy9kZW1vL1NpbXBsZVRlbXBsYXRlLy5jcHJvamVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTkyZWRjCi0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvdnh3b3Jrcy02LjMvdGFyZ2V0L3NyYy9kZW1vL1NpbXBsZVRlbXBsYXRlLy5jcHJvamVjdApAQCAtMCwwICsxLDI5IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KKzw/ZmlsZVZlcnNpb24gNC4wLjA/Pg0KKw0KKzxjcHJvamVjdD4NCis8c3RvcmFnZU1vZHVsZSBtb2R1bGVJZD0ib3JnLmVjbGlwc2UuY2R0LmNvcmUuc2V0dGluZ3MiPg0KKzxjY29uZmlndXJhdGlvbiBpZD0ib3JnLmVjbGlwc2UuY2R0LmNvcmUuZGVmYXVsdC5jb25maWcuMjgzOTY3MTA2Ij4NCis8c3RvcmFnZU1vZHVsZSBidWlsZFN5c3RlbUlkPSJvcmcuZWNsaXBzZS5jZHQuY29yZS5kZWZhdWx0Q29uZmlnRGF0YVByb3ZpZGVyIiBpZD0ib3JnLmVjbGlwc2UuY2R0LmNvcmUuZGVmYXVsdC5jb25maWcuMjgzOTY3MTA2IiBtb2R1bGVJZD0ib3JnLmVjbGlwc2UuY2R0LmNvcmUuc2V0dGluZ3MiIG5hbWU9IkNvbmZpZ3VyYXRpb24iPg0KKzxleHRlcm5hbFNldHRpbmdzLz4NCis8ZXh0ZW5zaW9ucz4NCis8ZXh0ZW5zaW9uIGlkPSJjb20ud2luZHJpdmVyLmlkZS5jb3JlLldSU2Nhbm5lckluZm9Qcm92aWRlciIgcG9pbnQ9Im9yZy5lY2xpcHNlLmNkdC5jb3JlLlNjYW5uZXJJbmZvUHJvdmlkZXIiLz4NCis8ZXh0ZW5zaW9uIGlkPSJjb20ud2luZHJpdmVyLmlkZS5jb3JlLldSRWxmUGFyc2VyVnhXb3JrcyIgcG9pbnQ9Im9yZy5lY2xpcHNlLmNkdC5jb3JlLkJpbmFyeVBhcnNlciIvPg0KKzxleHRlbnNpb24gaWQ9Im9yZy5lY2xpcHNlLmNkdC5jb3JlLkdOVV9FTEYiIHBvaW50PSJvcmcuZWNsaXBzZS5jZHQuY29yZS5CaW5hcnlQYXJzZXIiLz4NCis8L2V4dGVuc2lvbnM+DQorPC9zdG9yYWdlTW9kdWxlPg0KKzxzdG9yYWdlTW9kdWxlIG1vZHVsZUlkPSJvcmcuZWNsaXBzZS5jZHQuY29yZS5leHRlcm5hbFNldHRpbmdzIi8+DQorPHN0b3JhZ2VNb2R1bGUgbW9kdWxlSWQ9Im9yZy5lY2xpcHNlLmNkdC5jb3JlLnBhdGhlbnRyeSI+DQorPHBhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9IiIvPg0KKzxwYXRoZW50cnkga2luZD0ib3V0IiBwYXRoPSIiLz4NCis8cGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0iY29tLndpbmRyaXZlci5pZGUuY29yZS5XUl9DT05UQUlORVIiLz4NCis8cGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0iY29tLndpbmRyaXZlci5pZGUuY29yZS5idWlsZC5tb2RlbC5XUl9VU0VSREVGSU5FRF9DT05UQUlORVIiLz4NCis8L3N0b3JhZ2VNb2R1bGU+DQorPHN0b3JhZ2VNb2R1bGUgbW9kdWxlSWQ9InNjYW5uZXJDb25maWd1cmF0aW9uIi8+DQorPHN0b3JhZ2VNb2R1bGUgbW9kdWxlSWQ9InVzZXJkZWZpbmVkQ29udGFpbmVyIj4NCis8aW5kZXhBbGxGaWxlcyB2YWx1ZT0iZmFsc2UiLz4NCis8aW5pdGlhbGl6ZWQgdmFsdWU9InRydWUiLz4NCis8L3N0b3JhZ2VNb2R1bGU+DQorPC9jY29uZmlndXJhdGlvbj4NCis8L3N0b3JhZ2VNb2R1bGU+DQorPC9jcHJvamVjdD4NCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vU2ltcGxlVGVtcGxhdGUvLnByb2plY3QgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vU2ltcGxlVGVtcGxhdGUvLnByb2plY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQ0ZWRhNQotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9TaW1wbGVUZW1wbGF0ZS8ucHJvamVjdApAQCAtMCwwICsxLDIwIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KKzxwcm9qZWN0RGVzY3JpcHRpb24+DQorCTxuYW1lPlNpbXBsZVRlbXBsYXRlPC9uYW1lPg0KKwk8Y29tbWVudD48L2NvbW1lbnQ+DQorCTxwcm9qZWN0cz4NCisJPC9wcm9qZWN0cz4NCisJPGJ1aWxkU3BlYz4NCisJCTxidWlsZENvbW1hbmQ+DQorCQkJPG5hbWU+Y29tLndpbmRyaXZlci5pZGUuY29yZS53cmJ1aWxkZXI8L25hbWU+DQorCQkJPGFyZ3VtZW50cz4NCisJCQk8L2FyZ3VtZW50cz4NCisJCTwvYnVpbGRDb21tYW5kPg0KKwk8L2J1aWxkU3BlYz4NCisJPG5hdHVyZXM+DQorCQk8bmF0dXJlPmNvbS53aW5kcml2ZXIuaWRlLmNvcmUud3JuYXR1cmU8L25hdHVyZT4NCisJCTxuYXR1cmU+Y29tLndpbmRyaXZlci5pZGUuY29yZS53cmNvcmVuYXR1cmU8L25hdHVyZT4NCisJCTxuYXR1cmU+b3JnLmVjbGlwc2UuY2R0LmNvcmUuY25hdHVyZTwvbmF0dXJlPg0KKwkJPG5hdHVyZT5vcmcuZWNsaXBzZS5jZHQuY29yZS5jY25hdHVyZTwvbmF0dXJlPg0KKwk8L25hdHVyZXM+DQorPC9wcm9qZWN0RGVzY3JpcHRpb24+DQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvdnh3b3Jrcy02LjMvdGFyZ2V0L3NyYy9kZW1vL1NpbXBsZVRlbXBsYXRlLy53cm1ha2VmaWxlIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvdnh3b3Jrcy02LjMvdGFyZ2V0L3NyYy9kZW1vL1NpbXBsZVRlbXBsYXRlLy53cm1ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExZGQ3ZjgKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vU2ltcGxlVGVtcGxhdGUvLndybWFrZWZpbGUKQEAgLTAsMCArMSw0OCBAQAorIyBUaGUgZmlsZSAiLndybWFrZWZpbGUiIGlzIHRoZSB0ZW1wbGF0ZSB1c2VkIGJ5IHRoZSBXaW5kIFJpdmVyIFdvcmtiZW5jaCB0bw0KKyMgZ2VuZXJhdGUgdGhlIG1ha2VmaWxlcyBvZiB0aGlzIHByb2plY3QuIEFkZCB1c2VyLXNwZWNpZmljIGJ1aWxkIHRhcmdldHMgYW5kDQorIyBtYWtlIHJ1bGVzIG9ubHkoISkgaW4gdGhpcyBwcm9qZWN0J3MgIi53cm1ha2VmaWxlIiBmaWxlLiBUaGVzZSB3aWxsIHRoZW4gYmUNCisjIGF1dG9tYXRpY2FsbHkgZHVtcGVkIGludG8gdGhlIG1ha2VmaWxlcy4NCisNCitXSU5EX0hPTUUgOj0gJChzdWJzdCBcLC8sJChXSU5EX0hPTUUpKQ0KK1dJTkRfQkFTRSA6PSAkKHN1YnN0IFwsLywkKFdJTkRfQkFTRSkpDQorV0lORF9VU1IgOj0gJChzdWJzdCBcLC8sJChXSU5EX1VTUikpDQorDQorYWxsIDogcHJlX2J1aWxkIG1haW5fYWxsIHBvc3RfYnVpbGQNCisNCitfY2xlYW4gOjoNCisJQGVjaG8gIm1ha2U6IHJlbW92aW5nIHRhcmdldHMgYW5kIG9iamVjdHMgb2YgYHB3ZGAiDQorDQorJUlERV9HRU5FUkFURUQlDQorDQorLWluY2x1ZGUgJChQUkpfUk9PVF9ESVIpLyoubWFrZWZpbGUNCisNCistaW5jbHVkZSAqLm1ha2VmaWxlDQorDQorbWFpbl9hbGwgOiBleHRlcm5hbF9idWlsZCAkKFBST0pFQ1RfVEFSR0VUUykNCisJQGVjaG8gIm1ha2U6IGJ1aWx0IHRhcmdldHMgb2YgYHB3ZGAiDQorDQorIyBlbnRyeSBwb2ludCBmb3IgZXh0ZW5kaW5nIHRoZSBidWlsZA0KK2V4dGVybmFsX2J1aWxkIDo6DQorCUBlY2hvICIiDQorDQorIyBtYWluIGVudHJ5IHBvaW50IGZvciBwcmUgcHJvY2Vzc2luZyBwcmlvciB0byB0aGUgYnVpbGQNCitwcmVfYnVpbGQgOjogJChQUkVfQlVJTERfU1RFUCkgZ2VuZXJhdGVfc291cmNlcw0KKwlAZWNobyAiIg0KKw0KKyMgZW50cnkgcG9pbnQgZm9yIGdlbmVyYXRpbmcgc291cmNlcyBwcmlvciB0byB0aGUgYnVpbGQNCitnZW5lcmF0ZV9zb3VyY2VzIDo6DQorCUBlY2hvICIiDQorDQorIyBtYWluIGVudHJ5IHBvaW50IGZvciBwb3N0IHByb2Nlc3NpbmcgYWZ0ZXIgdGhlIGJ1aWxkDQorcG9zdF9idWlsZCA6OiAkKFBPU1RfQlVJTERfU1RFUCkgZGVwbG95X291dHB1dA0KKwlAZWNobyAiIg0KKw0KKyMgZW50cnkgcG9pbnQgZm9yIGRlcGxveWluZyBvdXRwdXQgYWZ0ZXIgdGhlIGJ1aWxkDQorZGVwbG95X291dHB1dCA6Og0KKwlAZWNobyAiIg0KKw0KK2NsZWFuIDo6IGV4dGVybmFsX2NsZWFuICQoQ0xFQU5fU1RFUCkgX2NsZWFuDQorDQorIyBlbnRyeSBwb2ludCBmb3IgZXh0ZW5kaW5nIHRoZSBidWlsZCBjbGVhbg0KK2V4dGVybmFsX2NsZWFuIDo6DQorCUBlY2hvICIiDQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvdnh3b3Jrcy02LjMvdGFyZ2V0L3NyYy9kZW1vL1NpbXBsZVRlbXBsYXRlLy53cnByb2plY3QgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vU2ltcGxlVGVtcGxhdGUvLndycHJvamVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYTRkNThlCi0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvdnh3b3Jrcy02LjMvdGFyZ2V0L3NyYy9kZW1vL1NpbXBsZVRlbXBsYXRlLy53cnByb2plY3QKQEAgLTAsMCArMSwyNTggQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQorPHdyeG1sPg0KKyAgICA8cHJvcGVydGllcyBwbGF0Zm9ybT0iVnhXb3JrcyIgcGxhdGZvcm1fbmFtZT0idnh3b3Jrcy02LjMiIHJvb3Q9IjEiIHR5cGU9IkRvd25sb2FkYWJsZUtlcm5lbE1vZHVsZVByb2plY3QiLz4NCisgICAgPGF0dHJpYnV0ZXM+DQorICAgICAgICA8bWFwQXR0cmlidXRlPg0KKyAgICAgICAgICAgIDxsaXN0QXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfEdsb2JhbE1hY3JvcyI+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9IlBST0pFQ1RfVFlQRSIvPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSJERUZJTkVTIi8+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9IkVYUEFORF9EQkciLz4NCisgICAgICAgICAgICA8L2xpc3RBdHRyaWJ1dGU+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xHbG9iYWxNYWNyb3xERUZJTkVTIiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xHbG9iYWxNYWNyb3xFWFBBTkRfREJHIiB2YWx1ZT0iMCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98R2xvYmFsTWFjcm98UFJPSkVDVF9UWVBFIiB2YWx1ZT0iREtNIi8+DQorICAgICAgICAgICAgPGxpc3RBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98SW5jbHxQUEMzMmRpYWIiPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSItSSQoV0lORF9CQVNFKS90YXJnZXQvaC9XUElMaWIiLz4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2giLz4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2gvd3JuL2NvcmVpcCIvPg0KKyAgICAgICAgICAgIDwvbGlzdEF0dHJpYnV0ZT4NCisgICAgICAgICAgICA8bGlzdEF0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xJbmNsfFBQQzMyZ251Ij4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2giLz4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2gvd3JuL2NvcmVpcCIvPg0KKyAgICAgICAgICAgIDwvbGlzdEF0dHJpYnV0ZT4NCisgICAgICAgICAgICA8bGlzdEF0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xJbmNsfFBQQzYwM2RpYWIiPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSItSSQoV0lORF9CQVNFKS90YXJnZXQvaCIvPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSItSSQoV0lORF9CQVNFKS90YXJnZXQvaC93cm4vY29yZWlwIi8+DQorICAgICAgICAgICAgPC9saXN0QXR0cmlidXRlPg0KKyAgICAgICAgICAgIDxsaXN0QXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfEluY2x8UFBDNjAzZ251Ij4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2giLz4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2gvV1BJTGliIi8+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9Ii1JJChXSU5EX0JBU0UpL3RhcmdldC9oL3dybi9jb3JlaXAiLz4NCisgICAgICAgICAgICA8L2xpc3RBdHRyaWJ1dGU+DQorICAgICAgICAgICAgPGxpc3RBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TGlic3xQUEMzMmRpYWIiPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSIkKFdJTkRfQkFTRSkvdGFyZ2V0L2xpYi9XUElMaWIuYSIvPg0KKyAgICAgICAgICAgIDwvbGlzdEF0dHJpYnV0ZT4NCisgICAgICAgICAgICA8bGlzdEF0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xMaWJzfFBQQzYwM2dudSI+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9IiQoV0lORF9CQVNFKS90YXJnZXQvbGliL1dQSUxpYi5hIi8+DQorICAgICAgICAgICAgPC9saXN0QXR0cmlidXRlPg0KKyAgICAgICAgICAgIDxsaXN0QXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvcyI+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9IlZYX0NQVV9GQU1JTFkiLz4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iQ1BVIi8+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9IlRPT0xfRkFNSUxZIi8+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9IlRPT0wiLz4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iVE9PTF9QQVRIIi8+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9IkNDX0FSQ0hfU1BFQyIvPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSJMSUJQQVRIIi8+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9IkxJQlMiLz4NCisgICAgICAgICAgICA8L2xpc3RBdHRyaWJ1dGU+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xDQ19BUkNIX1NQRUN8dmFsdWV8UFBDMzJkaWFiIiB2YWx1ZT0iLXRQUENGSDp2eHdvcmtzNjMgLVhzdG13LXNsb3cgLURQUEMzMl9mcDYweCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98Q0NfQVJDSF9TUEVDfHZhbHVlfFBQQzMyZ251IiB2YWx1ZT0iLW1oYXJkLWZsb2F0IC1tc3RyaWN0LWFsaWduIC1tbm8taW1wbGljaXQtZnAgLURQUEMzMl9mcDYweCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98Q0NfQVJDSF9TUEVDfHZhbHVlfFBQQzYwM2RpYWIiIHZhbHVlPSItdFBQQzYwM0ZIOnZ4d29ya3M2MyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98Q0NfQVJDSF9TUEVDfHZhbHVlfFBQQzYwM2dudSIgdmFsdWU9Ii1tY3B1PTYwMyAtbXN0cmljdC1hbGlnbiAtbW5vLWltcGxpY2l0LWZwIC1tbG9uZ2NhbGwiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfENQVXx2YWx1ZXxQUEMzMmRpYWIiIHZhbHVlPSJQUEMzMiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98Q1BVfHZhbHVlfFBQQzMyZ251IiB2YWx1ZT0iUFBDMzIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfENQVXx2YWx1ZXxQUEM2MDNkaWFiIiB2YWx1ZT0iUFBDNjAzIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xDUFV8dmFsdWV8UFBDNjAzZ251IiB2YWx1ZT0iUFBDNjAzIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xMSUJQQVRIfHZhbHVlfFBQQzMyZGlhYiIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98TElCUEFUSHx2YWx1ZXxQUEMzMmdudSIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98TElCUEFUSHx2YWx1ZXxQUEM2MDNkaWFiIiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xMSUJQQVRIfHZhbHVlfFBQQzYwM2dudSIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98TElCU3x2YWx1ZXxQUEMzMmRpYWIiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfExJQlN8dmFsdWV8UFBDMzJnbnUiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfExJQlN8dmFsdWV8UFBDNjAzZGlhYiIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98TElCU3x2YWx1ZXxQUEM2MDNnbnUiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfFRPT0xfRkFNSUxZfHZhbHVlfFBQQzMyZGlhYiIgdmFsdWU9ImRpYWIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfFRPT0xfRkFNSUxZfHZhbHVlfFBQQzMyZ251IiB2YWx1ZT0iZ251Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xUT09MX0ZBTUlMWXx2YWx1ZXxQUEM2MDNkaWFiIiB2YWx1ZT0iZGlhYiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98VE9PTF9GQU1JTFl8dmFsdWV8UFBDNjAzZ251IiB2YWx1ZT0iZ251Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xUT09MX1BBVEh8dmFsdWV8UFBDMzJkaWFiIiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xUT09MX1BBVEh8dmFsdWV8UFBDMzJnbnUiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfFRPT0xfUEFUSHx2YWx1ZXxQUEM2MDNkaWFiIiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xUT09MX1BBVEh8dmFsdWV8UFBDNjAzZ251IiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xUT09MfHZhbHVlfFBQQzMyZGlhYiIgdmFsdWU9ImRpYWIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfFRPT0x8dmFsdWV8UFBDMzJnbnUiIHZhbHVlPSJnbnUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfFRPT0x8dmFsdWV8UFBDNjAzZGlhYiIgdmFsdWU9ImRpYWIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfFRPT0x8dmFsdWV8UFBDNjAzZ251IiB2YWx1ZT0iZ251Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xWWF9DUFVfRkFNSUxZfHZhbHVlfFBQQzMyZGlhYiIgdmFsdWU9InBwYyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98VlhfQ1BVX0ZBTUlMWXx2YWx1ZXxQUEMzMmdudSIgdmFsdWU9InBwYyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98VlhfQ1BVX0ZBTUlMWXx2YWx1ZXxQUEM2MDNkaWFiIiB2YWx1ZT0icHBjIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xWWF9DUFVfRkFNSUxZfHZhbHVlfFBQQzYwM2dudSIgdmFsdWU9InBwYyIvPg0KKyAgICAgICAgICAgIDxsaXN0QXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2xzIj4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iQy1Db21waWxlciIvPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSJDKystQ29tcGlsZXIiLz4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iTGlua2VyIi8+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9IlBhcnRpYWwgSW1hZ2UgTGlua2VyIi8+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9IkxpYnJhcmlhbiIvPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSJBc3NlbWJsZXIiLz4NCisgICAgICAgICAgICA8L2xpc3RBdHRyaWJ1dGU+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxjbWR8UFBDMzJkaWFiIiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OzslYXNzZW1ibGVycHJlZml4JSAkKFRPT0xfUEFUSClkY2MgJURlYnVnTW9kZUZsYWdzJSAlVG9vbEZsYWdzJSAkKEFEREVEX0NGTEFHUykgJUluY2x1ZGVzJSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAlT3V0RmlsZSUgLWMgJUluRmlsZSUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfGNtZHxQUEMzMmdudSIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWFzc2VtYmxlcnByZWZpeCUgJChUT09MX1BBVEgpY2NwcGMgJURlYnVnTW9kZUZsYWdzJSAlVG9vbEZsYWdzJSAkKEFEREVEX0NGTEFHUykgJUluY2x1ZGVzJSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAlT3V0RmlsZSUgLWMgJUluRmlsZSUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfGNtZHxQUEM2MDNkaWFiIiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OzslYXNzZW1ibGVycHJlZml4JSAkKFRPT0xfUEFUSClkY2MgJURlYnVnTW9kZUZsYWdzJSAlVG9vbEZsYWdzJSAkKEFEREVEX0NGTEFHUykgJUluY2x1ZGVzJSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAlT3V0RmlsZSUgLWMgJUluRmlsZSUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfGNtZHxQUEM2MDNnbnUiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7OyVhc3NlbWJsZXJwcmVmaXglICQoVE9PTF9QQVRIKWNjcHBjICVEZWJ1Z01vZGVGbGFncyUgJVRvb2xGbGFncyUgJChBRERFRF9DRkxBR1MpICVJbmNsdWRlcyUgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gJU91dEZpbGUlIC1jICVJbkZpbGUlIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxkYmdGbGFnc3xQUEMzMmRpYWIiIHZhbHVlPSItZyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxBc3NlbWJsZXJ8ZGJnRmxhZ3N8UFBDMzJnbnUiIHZhbHVlPSItZyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxBc3NlbWJsZXJ8ZGJnRmxhZ3N8UFBDNjAzZGlhYiIgdmFsdWU9Ii1nIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxkYmdGbGFnc3xQUEM2MDNnbnUiIHZhbHVlPSItZyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxBc3NlbWJsZXJ8ZGVyaXZlZFNpZ3N8UFBDMzJkaWFiIiB2YWx1ZT0iKi5vIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxkZXJpdmVkU2lnc3xQUEMzMmdudSIgdmFsdWU9IioubyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxBc3NlbWJsZXJ8ZGVyaXZlZFNpZ3N8UFBDNjAzZGlhYiIgdmFsdWU9IioubyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxBc3NlbWJsZXJ8ZGVyaXZlZFNpZ3N8UFBDNjAzZ251IiB2YWx1ZT0iKi5vIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxmbGFnc3xQUEMzMmRpYWIiIHZhbHVlPSIkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhwcmVwcm9jZXNzLWFzc2VtYmx5IC1YY3BwLW5vLXNwYWNlICAtWG1ha2UtZGVwZW5kZW5jeT0weGQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfGZsYWdzfFBQQzMyZ251IiB2YWx1ZT0iJChDQ19BUkNIX1NQRUMpIC1hbnNpICAgLXhhc3NlbWJsZXItd2l0aC1jcHAgLU1EIC1NUCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxBc3NlbWJsZXJ8ZmxhZ3N8UFBDNjAzZGlhYiIgdmFsdWU9IiQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWHByZXByb2Nlc3MtYXNzZW1ibHkgLVhjcHAtbm8tc3BhY2UgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxBc3NlbWJsZXJ8ZmxhZ3N8UFBDNjAzZ251IiB2YWx1ZT0iJChDQ19BUkNIX1NQRUMpIC1hbnNpICAgLXhhc3NlbWJsZXItd2l0aC1jcHAgLU1EIC1NUCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxBc3NlbWJsZXJ8bm9uRGJnRmxhZ3N8UFBDMzJkaWFiIiB2YWx1ZT0iLVhPIC1Yc2l6ZS1vcHQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfG5vbkRiZ0ZsYWdzfFBQQzMyZ251IiB2YWx1ZT0iLU8yIC1mc3RyZW5ndGgtcmVkdWNlIC1mbm8tYnVpbHRpbiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxBc3NlbWJsZXJ8bm9uRGJnRmxhZ3N8UFBDNjAzZGlhYiIgdmFsdWU9Ii1YTyAtWHNpemUtb3B0Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxub25EYmdGbGFnc3xQUEM2MDNnbnUiIHZhbHVlPSItTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluIi8+DQorICAgICAgICAgICAgPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxBc3NlbWJsZXJ8b2JqZWN0IiB2YWx1ZT0idHJ1ZSIvPg0KKyAgICAgICAgICAgIDxib29sZWFuQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfHBhc3NBYmxlIiB2YWx1ZT0iZmFsc2UiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfHNpZ3MiIHZhbHVlPSIqLnMiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfGNtZHxQUEMzMmRpYWIiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7OyVjcHBjb21waWxlcnByZWZpeCUgJChUT09MX1BBVEgpZGNjICVEZWJ1Z01vZGVGbGFncyUgJVRvb2xGbGFncyUgJChBRERFRF9DKytGTEFHUykgJUluY2x1ZGVzJSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAlT3V0RmlsZSUgLWMgJUluRmlsZSUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfGNtZHxQUEMzMmdudSIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWNwcGNvbXBpbGVycHJlZml4JSAkKFRPT0xfUEFUSCljY3BwYyAlRGVidWdNb2RlRmxhZ3MlICVUb29sRmxhZ3MlICQoQURERURfQysrRkxBR1MpICVJbmNsdWRlcyUgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gJU91dEZpbGUlIC1jICVJbkZpbGUlIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxjbWR8UFBDNjAzZGlhYiIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWNwcGNvbXBpbGVycHJlZml4JSAkKFRPT0xfUEFUSClkY2MgJURlYnVnTW9kZUZsYWdzJSAlVG9vbEZsYWdzJSAkKEFEREVEX0MrK0ZMQUdTKSAlSW5jbHVkZXMlICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICVPdXRGaWxlJSAtYyAlSW5GaWxlJSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8Y21kfFBQQzYwM2dudSIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWNwcGNvbXBpbGVycHJlZml4JSAkKFRPT0xfUEFUSCljY3BwYyAlRGVidWdNb2RlRmxhZ3MlICVUb29sRmxhZ3MlICQoQURERURfQysrRkxBR1MpICVJbmNsdWRlcyUgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gJU91dEZpbGUlIC1jICVJbkZpbGUlIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxkYmdGbGFnc3xQUEMzMmRpYWIiIHZhbHVlPSItZyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8ZGJnRmxhZ3N8UFBDMzJnbnUiIHZhbHVlPSItZyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8ZGJnRmxhZ3N8UFBDNjAzZGlhYiIgdmFsdWU9Ii1nIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxkYmdGbGFnc3xQUEM2MDNnbnUiIHZhbHVlPSItZyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8ZGVyaXZlZFNpZ3N8UFBDMzJkaWFiIiB2YWx1ZT0iKi5vIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxkZXJpdmVkU2lnc3xQUEMzMmdudSIgdmFsdWU9IioubyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8ZGVyaXZlZFNpZ3N8UFBDNjAzZGlhYiIgdmFsdWU9IioubyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8ZGVyaXZlZFNpZ3N8UFBDNjAzZ251IiB2YWx1ZT0iKi5vIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxmbGFnc3xQUEMzMmRpYWIiIHZhbHVlPSIkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8ZmxhZ3N8UFBDMzJnbnUiIHZhbHVlPSIkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfGZsYWdzfFBQQzYwM2RpYWIiIHZhbHVlPSIkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8ZmxhZ3N8UFBDNjAzZ251IiB2YWx1ZT0iJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QIC1tbG9uZ2NhbGwiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfG5vbkRiZ0ZsYWdzfFBQQzMyZGlhYiIgdmFsdWU9Ii1YTyAtWHNpemUtb3B0Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxub25EYmdGbGFnc3xQUEMzMmdudSIgdmFsdWU9Ii1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfG5vbkRiZ0ZsYWdzfFBQQzYwM2RpYWIiIHZhbHVlPSItWE8gLVhzaXplLW9wdCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8bm9uRGJnRmxhZ3N8UFBDNjAzZ251IiB2YWx1ZT0iLU8yIC1mc3RyZW5ndGgtcmVkdWNlIC1mbm8tYnVpbHRpbiIvPg0KKyAgICAgICAgICAgIDxib29sZWFuQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfG9iamVjdCIgdmFsdWU9InRydWUiLz4NCisgICAgICAgICAgICA8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxwYXNzQWJsZSIgdmFsdWU9ImZhbHNlIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxzaWdzIiB2YWx1ZT0iKi5jcHA7Ki5DOyouY3h4OyouY2MiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxjbWR8UFBDMzJkaWFiIiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OzslY2NvbXBpbGVycHJlZml4JSAkKFRPT0xfUEFUSClkY2MgJURlYnVnTW9kZUZsYWdzJSAlVG9vbEZsYWdzJSAkKEFEREVEX0NGTEFHUykgJUluY2x1ZGVzJSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAlT3V0RmlsZSUgLWMgJUluRmlsZSUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxjbWR8UFBDMzJnbnUiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7OyVjY29tcGlsZXJwcmVmaXglICQoVE9PTF9QQVRIKWNjcHBjICVEZWJ1Z01vZGVGbGFncyUgJVRvb2xGbGFncyUgJChBRERFRF9DRkxBR1MpICVJbmNsdWRlcyUgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gJU91dEZpbGUlIC1jICVJbkZpbGUlIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8Y21kfFBQQzYwM2RpYWIiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7OyVjY29tcGlsZXJwcmVmaXglICQoVE9PTF9QQVRIKWRjYyAlRGVidWdNb2RlRmxhZ3MlICVUb29sRmxhZ3MlICQoQURERURfQ0ZMQUdTKSAlSW5jbHVkZXMlICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICVPdXRGaWxlJSAtYyAlSW5GaWxlJSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfGNtZHxQUEM2MDNnbnUiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7OyVjY29tcGlsZXJwcmVmaXglICQoVE9PTF9QQVRIKWNjcHBjICVEZWJ1Z01vZGVGbGFncyUgJVRvb2xGbGFncyUgJChBRERFRF9DRkxBR1MpICVJbmNsdWRlcyUgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gJU91dEZpbGUlIC1jICVJbkZpbGUlIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8ZGJnRmxhZ3N8UFBDMzJkaWFiIiB2YWx1ZT0iLWciLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxkYmdGbGFnc3xQUEMzMmdudSIgdmFsdWU9Ii1nIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8ZGJnRmxhZ3N8UFBDNjAzZGlhYiIgdmFsdWU9Ii1nIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8ZGJnRmxhZ3N8UFBDNjAzZ251IiB2YWx1ZT0iLWciLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxkZXJpdmVkU2lnc3xQUEMzMmRpYWIiIHZhbHVlPSIqLm8iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxkZXJpdmVkU2lnc3xQUEMzMmdudSIgdmFsdWU9IioubyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfGRlcml2ZWRTaWdzfFBQQzYwM2RpYWIiIHZhbHVlPSIqLm8iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxkZXJpdmVkU2lnc3xQUEM2MDNnbnUiIHZhbHVlPSIqLm8iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxmbGFnc3xQUEMzMmRpYWIiIHZhbHVlPSIkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfGZsYWdzfFBQQzMyZ251IiB2YWx1ZT0iJChDQ19BUkNIX1NQRUMpIC1hbnNpICAtV2FsbCAgLU1EIC1NUCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfGZsYWdzfFBQQzYwM2RpYWIiIHZhbHVlPSIkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhmb3JjZS1kZWNsYXJhdGlvbnMgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfGZsYWdzfFBQQzYwM2dudSIgdmFsdWU9IiQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAgLVdhbGwgIC1NRCAtTVAgLW1sb25nY2FsbCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfG5vbkRiZ0ZsYWdzfFBQQzMyZGlhYiIgdmFsdWU9Ii1YTyAtWHNpemUtb3B0Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8bm9uRGJnRmxhZ3N8UFBDMzJnbnUiIHZhbHVlPSItTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8bm9uRGJnRmxhZ3N8UFBDNjAzZGlhYiIgdmFsdWU9Ii1YTyAtWHNpemUtb3B0Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8bm9uRGJnRmxhZ3N8UFBDNjAzZ251IiB2YWx1ZT0iLU8yIC1mc3RyZW5ndGgtcmVkdWNlIC1mbm8tYnVpbHRpbiIvPg0KKyAgICAgICAgICAgIDxib29sZWFuQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxvYmplY3QiIHZhbHVlPSJ0cnVlIi8+DQorICAgICAgICAgICAgPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfHBhc3NBYmxlIiB2YWx1ZT0iZmFsc2UiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxzaWdzIiB2YWx1ZT0iKi5jIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxjbWR8UFBDMzJkaWFiIiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OzslYXJjaGl2ZXJwcmVmaXglICQoVE9PTF9QQVRIKWRhciAlVG9vbEZsYWdzJSAlT3V0RmlsZSUgJU9iamVjdHMlIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxjbWR8UFBDMzJnbnUiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7OyVhcmNoaXZlcnByZWZpeCUgJChUT09MX1BBVEgpYXJwcGMgJVRvb2xGbGFncyUgJU91dEZpbGUlICVPYmplY3RzJSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58Y21kfFBQQzYwM2RpYWIiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7OyVhcmNoaXZlcnByZWZpeCUgJChUT09MX1BBVEgpZGFyICVUb29sRmxhZ3MlICVPdXRGaWxlJSAlT2JqZWN0cyUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufGNtZHxQUEM2MDNnbnUiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7OyVhcmNoaXZlcnByZWZpeCUgJChUT09MX1BBVEgpYXJwcGMgJVRvb2xGbGFncyUgJU91dEZpbGUlICVPYmplY3RzJSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58ZGJnRmxhZ3N8UFBDMzJkaWFiIiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxkYmdGbGFnc3xQUEMzMmdudSIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58ZGJnRmxhZ3N8UFBDNjAzZGlhYiIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58ZGJnRmxhZ3N8UFBDNjAzZ251IiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxkZXJpdmVkU2lnc3xQUEMzMmRpYWIiIHZhbHVlPSIqLmEiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufGRlcml2ZWRTaWdzfFBQQzMyZ251IiB2YWx1ZT0iKi5hIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxkZXJpdmVkU2lnc3xQUEM2MDNkaWFiIiB2YWx1ZT0iKi5hIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxkZXJpdmVkU2lnc3xQUEM2MDNnbnUiIHZhbHVlPSIqLmEiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufGZsYWdzfFBQQzMyZGlhYiIgdmFsdWU9ImNydXMiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufGZsYWdzfFBQQzMyZ251IiB2YWx1ZT0iY3J1cyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58ZmxhZ3N8UFBDNjAzZGlhYiIgdmFsdWU9ImNydXMiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufGZsYWdzfFBQQzYwM2dudSIgdmFsdWU9ImNydXMiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufG5vbkRiZ0ZsYWdzfFBQQzMyZGlhYiIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58bm9uRGJnRmxhZ3N8UFBDMzJnbnUiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufG5vbkRiZ0ZsYWdzfFBQQzYwM2RpYWIiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufG5vbkRiZ0ZsYWdzfFBQQzYwM2dudSIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxib29sZWFuQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufG9iamVjdCIgdmFsdWU9ImZhbHNlIi8+DQorICAgICAgICAgICAgPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58cGFzc0FibGUiIHZhbHVlPSJ0cnVlIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxzaWdzIiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxjbWR8UFBDMzJkaWFiIiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OztybSAtZiAlT3V0RmlsZSU7ZGR1bXAgLU5nICVPYmplY3RzJSAlTGlicmFyaWVzJSB8IHRjbHNoICQoV0lORF9CQVNFKS9ob3N0L3Jlc291cmNlL2h1dGlscy90Y2wvbXVuY2gudGNsIC1jIHBwYyAmZ3Q7ICQoT0JKX0RJUikvY3RkdC5jOyVjY29tcGlsZXJwcmVmaXglICQoVE9PTF9QQVRIKWRjYyAlRGVidWdNb2RlRmxhZ3MlICQoQ0NfQVJDSF9TUEVDKSAtWGRvbGxhci1pbi1pZGVudCAtWGZvcmNlLWRlY2xhcmF0aW9ucyAkKEFEREVEX0NGTEFHUykgJUluY2x1ZGVzJSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAgLW8gJChPQkpfRElSKS9jdGR0Lm8gLWMgJChPQkpfRElSKS9jdGR0LmM7JWxpbmtlcnByZWZpeCUgJChUT09MX1BBVEgpZGxkIC10UFBDRkg6dnh3b3JrczYzIC1YIC1yNSAlVG9vbEZsYWdzJSAtbyAlT3V0RmlsZSUgJChPQkpfRElSKS9jdGR0Lm8gJU9iamVjdHMlICVMaWJyYXJpZXMlICQoTElCUEFUSCkgJChMSUJTKSAgJChBRERFRF9MSUJQQVRIKSAkKEFEREVEX0xJQlMpICZhbXA7JmFtcDsgaWYgWyAmcXVvdDskKEVYUEFORF9EQkcpJnF1b3Q7ID0gJnF1b3Q7MSZxdW90OyBdOyB0aGVuIHBsaW5rICZxdW90OyRAJnF1b3Q7O2ZpIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxjbWR8UFBDMzJnbnUiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7O3JtIC1mICVPdXRGaWxlJTtubXBwYyAlT2JqZWN0cyUgJUxpYnJhcmllcyUgfCB0Y2xzaCAkKFdJTkRfQkFTRSkvaG9zdC9yZXNvdXJjZS9odXRpbHMvdGNsL211bmNoLnRjbCAtYyBwcGMgJmd0OyAkKE9CSl9ESVIpL2N0ZHQuYzslY2NvbXBpbGVycHJlZml4JSAkKFRPT0xfUEFUSCljY3BwYyAlRGVidWdNb2RlRmxhZ3MlICQoQ0NfQVJDSF9TUEVDKSAtZmRvbGxhcnMtaW4taWRlbnRpZmllcnMgLVdhbGwgJChBRERFRF9DRkxBR1MpICVJbmNsdWRlcyUgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgIC1vICQoT0JKX0RJUikvY3RkdC5vIC1jICQoT0JKX0RJUikvY3RkdC5jOyVsaW5rZXJwcmVmaXglICQoVE9PTF9QQVRIKWNjcHBjIC1yIC1ub3N0ZGxpYiAtV2wsLVggJVRvb2xGbGFncyUgLW8gJU91dEZpbGUlICQoT0JKX0RJUikvY3RkdC5vICVPYmplY3RzJSAlTGlicmFyaWVzJSAkKExJQlBBVEgpICQoTElCUykgICQoQURERURfTElCUEFUSCkgJChBRERFRF9MSUJTKSAmYW1wOyZhbXA7IGlmIFsgJnF1b3Q7JChFWFBBTkRfREJHKSZxdW90OyA9ICZxdW90OzEmcXVvdDsgXTsgdGhlbiBwbGluayAmcXVvdDskQCZxdW90OztmaSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8Y21kfFBQQzYwM2RpYWIiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7O3JtIC1mICVPdXRGaWxlJTtkZHVtcCAtTmcgJU9iamVjdHMlICVMaWJyYXJpZXMlIHwgdGNsc2ggJChXSU5EX0JBU0UpL2hvc3QvcmVzb3VyY2UvaHV0aWxzL3RjbC9tdW5jaC50Y2wgLWMgcHBjICZndDsgJChPQkpfRElSKS9jdGR0LmM7JWNjb21waWxlcnByZWZpeCUgJChUT09MX1BBVEgpZGNjICVEZWJ1Z01vZGVGbGFncyUgJChDQ19BUkNIX1NQRUMpIC1YZG9sbGFyLWluLWlkZW50IC1YZm9yY2UtZGVjbGFyYXRpb25zICQoQURERURfQ0ZMQUdTKSAlSW5jbHVkZXMlICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpICAtbyAkKE9CSl9ESVIpL2N0ZHQubyAtYyAkKE9CSl9ESVIpL2N0ZHQuYzslbGlua2VycHJlZml4JSAkKFRPT0xfUEFUSClkbGQgLXRQUEM2MDNGSDp2eHdvcmtzNjMgLVggLXI1ICVUb29sRmxhZ3MlIC1vICVPdXRGaWxlJSAkKE9CSl9ESVIpL2N0ZHQubyAlT2JqZWN0cyUgJUxpYnJhcmllcyUgJChMSUJQQVRIKSAkKExJQlMpICAkKEFEREVEX0xJQlBBVEgpICQoQURERURfTElCUykgJmFtcDsmYW1wOyBpZiBbICZxdW90OyQoRVhQQU5EX0RCRykmcXVvdDsgPSAmcXVvdDsxJnF1b3Q7IF07IHRoZW4gcGxpbmsgJnF1b3Q7JEAmcXVvdDs7ZmkiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfGNtZHxQUEM2MDNnbnUiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7O3JtIC1mICVPdXRGaWxlJTtubXBwYyAlT2JqZWN0cyUgJUxpYnJhcmllcyUgfCB0Y2xzaCAkKFdJTkRfQkFTRSkvaG9zdC9yZXNvdXJjZS9odXRpbHMvdGNsL211bmNoLnRjbCAtYyBwcGMgJmd0OyAkKE9CSl9ESVIpL2N0ZHQuYzslY2NvbXBpbGVycHJlZml4JSAkKFRPT0xfUEFUSCljY3BwYyAlRGVidWdNb2RlRmxhZ3MlICQoQ0NfQVJDSF9TUEVDKSAtZmRvbGxhcnMtaW4taWRlbnRpZmllcnMgLVdhbGwgJChBRERFRF9DRkxBR1MpICVJbmNsdWRlcyUgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgIC1vICQoT0JKX0RJUikvY3RkdC5vIC1jICQoT0JKX0RJUikvY3RkdC5jOyVsaW5rZXJwcmVmaXglICQoVE9PTF9QQVRIKWNjcHBjIC1yIC1ub3N0ZGxpYiAtV2wsLVggJVRvb2xGbGFncyUgLW8gJU91dEZpbGUlICQoT0JKX0RJUikvY3RkdC5vICVPYmplY3RzJSAlTGlicmFyaWVzJSAkKExJQlBBVEgpICQoTElCUykgICQoQURERURfTElCUEFUSCkgJChBRERFRF9MSUJTKSAmYW1wOyZhbXA7IGlmIFsgJnF1b3Q7JChFWFBBTkRfREJHKSZxdW90OyA9ICZxdW90OzEmcXVvdDsgXTsgdGhlbiBwbGluayAmcXVvdDskQCZxdW90OztmaSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8ZGJnRmxhZ3N8UFBDMzJkaWFiIiB2YWx1ZT0iLWciLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfGRiZ0ZsYWdzfFBQQzMyZ251IiB2YWx1ZT0iLWciLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfGRiZ0ZsYWdzfFBQQzYwM2RpYWIiIHZhbHVlPSItZyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8ZGJnRmxhZ3N8UFBDNjAzZ251IiB2YWx1ZT0iLWciLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfGRlcml2ZWRTaWdzfFBQQzMyZGlhYiIgdmFsdWU9Iioub3V0Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxkZXJpdmVkU2lnc3xQUEMzMmdudSIgdmFsdWU9Iioub3V0Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxkZXJpdmVkU2lnc3xQUEM2MDNkaWFiIiB2YWx1ZT0iKi5vdXQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfGRlcml2ZWRTaWdzfFBQQzYwM2dudSIgdmFsdWU9Iioub3V0Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxmbGFnc3xQUEMzMmRpYWIiIHZhbHVlPSItcjQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfGZsYWdzfFBQQzMyZ251IiB2YWx1ZT0iLVQgJChXSU5EX0JBU0UpL3RhcmdldC9oL3Rvb2wvZ251L2xkc2NyaXB0cy9saW5rLk9VVCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8ZmxhZ3N8UFBDNjAzZGlhYiIgdmFsdWU9Ii1yNCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8ZmxhZ3N8UFBDNjAzZ251IiB2YWx1ZT0iLVQgJChXSU5EX0JBU0UpL3RhcmdldC9oL3Rvb2wvZ251L2xkc2NyaXB0cy9saW5rLk9VVCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8bm9uRGJnRmxhZ3N8UFBDMzJkaWFiIiB2YWx1ZT0iLVhPIC1Yc2l6ZS1vcHQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfG5vbkRiZ0ZsYWdzfFBQQzMyZ251IiB2YWx1ZT0iLU8yIC1mc3RyZW5ndGgtcmVkdWNlIC1mbm8tYnVpbHRpbiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8bm9uRGJnRmxhZ3N8UFBDNjAzZGlhYiIgdmFsdWU9Ii1YTyAtWHNpemUtb3B0Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxub25EYmdGbGFnc3xQUEM2MDNnbnUiIHZhbHVlPSItTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluIi8+DQorICAgICAgICAgICAgPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8b2JqZWN0IiB2YWx1ZT0iZmFsc2UiLz4NCisgICAgICAgICAgICA8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxwYXNzQWJsZSIgdmFsdWU9ImZhbHNlIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxzaWdzIiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfGNtZHxQUEMzMmRpYWIiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7OyVsaW5rZXJwcmVmaXglICQoVE9PTF9QQVRIKWRsZCAtdFBQQ0ZIOnZ4d29ya3M2MyAtWCAtcjUgJVRvb2xGbGFncyUgLW8gJU91dEZpbGUlICVPYmplY3RzJSAkKExJQlBBVEgpICQoTElCUykgJChBRERFRF9MSUJQQVRIKSAkKEFEREVEX0xJQlMpICAmYW1wOyZhbXA7IGlmIFsgJnF1b3Q7JChFWFBBTkRfREJHKSZxdW90OyA9ICZxdW90OzEmcXVvdDsgXTsgdGhlbiBwbGluayAmcXVvdDskQCZxdW90OztmaSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxjbWR8UFBDMzJnbnUiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7OyVsaW5rZXJwcmVmaXglICQoVE9PTF9QQVRIKWNjcHBjIC1yIC1ub3N0ZGxpYiAtV2wsLVggJVRvb2xGbGFncyUgLW8gJU91dEZpbGUlICVPYmplY3RzJSAkKExJQlBBVEgpICQoTElCUykgJChBRERFRF9MSUJQQVRIKSAkKEFEREVEX0xJQlMpICAmYW1wOyZhbXA7IGlmIFsgJnF1b3Q7JChFWFBBTkRfREJHKSZxdW90OyA9ICZxdW90OzEmcXVvdDsgXTsgdGhlbiBwbGluayAmcXVvdDskQCZxdW90OztmaSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxjbWR8UFBDNjAzZGlhYiIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWxpbmtlcnByZWZpeCUgJChUT09MX1BBVEgpZGxkIC10UFBDNjAzRkg6dnh3b3JrczYzIC1YIC1yNSAlVG9vbEZsYWdzJSAtbyAlT3V0RmlsZSUgJU9iamVjdHMlICQoTElCUEFUSCkgJChMSUJTKSAkKEFEREVEX0xJQlBBVEgpICQoQURERURfTElCUykgICZhbXA7JmFtcDsgaWYgWyAmcXVvdDskKEVYUEFORF9EQkcpJnF1b3Q7ID0gJnF1b3Q7MSZxdW90OyBdOyB0aGVuIHBsaW5rICZxdW90OyRAJnF1b3Q7O2ZpIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfGNtZHxQUEM2MDNnbnUiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7OyVsaW5rZXJwcmVmaXglICQoVE9PTF9QQVRIKWNjcHBjIC1yIC1ub3N0ZGxpYiAtV2wsLVggJVRvb2xGbGFncyUgLW8gJU91dEZpbGUlICVPYmplY3RzJSAkKExJQlBBVEgpICQoTElCUykgJChBRERFRF9MSUJQQVRIKSAkKEFEREVEX0xJQlMpICAmYW1wOyZhbXA7IGlmIFsgJnF1b3Q7JChFWFBBTkRfREJHKSZxdW90OyA9ICZxdW90OzEmcXVvdDsgXTsgdGhlbiBwbGluayAmcXVvdDskQCZxdW90OztmaSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxkYmdGbGFnc3xQUEMzMmRpYWIiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8ZGJnRmxhZ3N8UFBDMzJnbnUiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8ZGJnRmxhZ3N8UFBDNjAzZGlhYiIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxkYmdGbGFnc3xQUEM2MDNnbnUiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8ZGVyaXZlZFNpZ3N8UFBDMzJkaWFiIiB2YWx1ZT0iKi5vIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfGRlcml2ZWRTaWdzfFBQQzMyZ251IiB2YWx1ZT0iKi5vIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfGRlcml2ZWRTaWdzfFBQQzYwM2RpYWIiIHZhbHVlPSIqLm8iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8ZGVyaXZlZFNpZ3N8UFBDNjAzZ251IiB2YWx1ZT0iKi5vIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfGZsYWdzfFBQQzMyZGlhYiIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxmbGFnc3xQUEMzMmdudSIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxmbGFnc3xQUEM2MDNkaWFiIiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfGZsYWdzfFBQQzYwM2dudSIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxub25EYmdGbGFnc3xQUEMzMmRpYWIiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8bm9uRGJnRmxhZ3N8UFBDMzJnbnUiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8bm9uRGJnRmxhZ3N8UFBDNjAzZGlhYiIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxub25EYmdGbGFnc3xQUEM2MDNnbnUiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfG9iamVjdCIgdmFsdWU9ImZhbHNlIi8+DQorICAgICAgICAgICAgPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxwYXNzQWJsZSIgdmFsdWU9InRydWUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8c2lncyIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98Y21kIiB2YWx1ZT0iJW1ha2VwcmVmaXglIG1ha2UgLS1uby1wcmludC1kaXJlY3RvcnkiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfGRlZmF1bHRTcGVjIiB2YWx1ZT0iUFBDNjAzZ251Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xyZWRpckRpcnxQUEMzMmRpYWIiIHZhbHVlPSJQUEMzMmRpYWIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfHJlZGlyRGlyfFBQQzMyZ251IiB2YWx1ZT0iUFBDMzJnbnUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfHJlZGlyRGlyfFBQQzYwM2RpYWIiIHZhbHVlPSJQUEM2MDNkaWFiIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xyZWRpckRpcnxQUEM2MDNnbnUiIHZhbHVlPSJQUEM2MDNnbnUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfHJlZGlyUm9vdCIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxsaXN0QXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfHNwZWNzIj4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iUFBDMzJkaWFiIi8+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9IlBQQzMyZ251Ii8+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9IlBQQzYwM2RpYWIiLz4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iUFBDNjAzZ251Ii8+DQorICAgICAgICAgICAgPC9saXN0QXR0cmlidXRlPg0KKyAgICAgICAgICAgIDxpbnRBdHRyaWJ1dGUga2V5PSJCdWlsZFN1cHBvcnRFbmFibGVkIiB2YWx1ZT0iMSIvPg0KKyAgICAgICAgICAgIDxsaXN0QXR0cmlidXRlIGtleT0iQnVpbGRTdXBwb3J0Rm9yQnVpbGRTcGVjcyI+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9IlBQQzYwM2dudSIvPg0KKyAgICAgICAgICAgIDwvbGlzdEF0dHJpYnV0ZT4NCisgICAgICAgICAgICA8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9IkJ1aWxkVGFyZ2V0Q2VudHJpYyIgdmFsdWU9InRydWUiLz4NCisgICAgICAgIDwvbWFwQXR0cmlidXRlPg0KKyAgICA8L2F0dHJpYnV0ZXM+DQorICAgIDxidWlsZHRhcmdldHM+DQorICAgICAgICA8YnVpbGR0YXJnZXQgYnVpbGR0b29sPSJMaW5rZXIiIG5hbWU9IlNpbXBsZVRlbXBsYXRlIiBwYXNzZWQ9ImZhbHNlIiB0YXJnZXRuYW1lPSJTaW1wbGVUZW1wbGF0ZSI+DQorICAgICAgICAgICAgPGNvbnRlbnRzPg0KKyAgICAgICAgICAgICAgICA8YnVpbGR0YXJnZXRyZWZlcmVuY2UgbmFtZT0iL1NpbXBsZVRlbXBsYXRlL1NpbXBsZVRlbXBsYXRlX3BhcnRpYWxJbWFnZSIvPg0KKyAgICAgICAgICAgIDwvY29udGVudHM+DQorICAgICAgICA8L2J1aWxkdGFyZ2V0Pg0KKyAgICAgICAgPGJ1aWxkdGFyZ2V0IGJ1aWxkdG9vbD0iUGFydGlhbCBJbWFnZSBMaW5rZXIiIG5hbWU9IlNpbXBsZVRlbXBsYXRlX3BhcnRpYWxJbWFnZSIgcGFzc2VkPSJ0cnVlIiB0YXJnZXRuYW1lPSJTaW1wbGVUZW1wbGF0ZV9wYXJ0aWFsSW1hZ2UiPg0KKyAgICAgICAgICAgIDxjb250ZW50cz4NCisgICAgICAgICAgICAgICAgPGZvbGRlciBuYW1lPSIvU2ltcGxlVGVtcGxhdGUiIHJlY3Vyc2l2ZT0idHJ1ZSIvPg0KKyAgICAgICAgICAgIDwvY29udGVudHM+DQorICAgICAgICA8L2J1aWxkdGFyZ2V0Pg0KKyAgICA8L2J1aWxkdGFyZ2V0cz4NCis8L3dyeG1sPg0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9TaW1wbGVUZW1wbGF0ZS9NeVJvYm90LmNwcCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9TaW1wbGVUZW1wbGF0ZS9NeVJvYm90LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZjI1YjNkCi0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvdnh3b3Jrcy02LjMvdGFyZ2V0L3NyYy9kZW1vL1NpbXBsZVRlbXBsYXRlL015Um9ib3QuY3BwCkBAIC0wLDAgKzEsNTUgQEAKKyNpbmNsdWRlICJXUElMaWIuaCINCisNCisvKioNCisgKiBUaGlzIGlzIGEgZGVtbyBwcm9ncmFtIHNob3dpbmcgdGhlIHVzZSBvZiB0aGUgUm9ib3RCYXNlIGNsYXNzLg0KKyAqIFRoZSBTaW1wbGVSb2JvdCBjbGFzcyBpcyB0aGUgYmFzZSBvZiBhIHJvYm90IGFwcGxpY2F0aW9uIHRoYXQgd2lsbCBhdXRvbWF0aWNhbGx5IGNhbGwgeW91cg0KKyAqIEF1dG9ub21vdXMgYW5kIE9wZXJhdG9yQ29udHJvbCBtZXRob2RzIGF0IHRoZSByaWdodCB0aW1lIGFzIGNvbnRyb2xsZWQgYnkgdGhlIHN3aXRjaGVzIG9uDQorICogdGhlIGRyaXZlciBzdGF0aW9uIG9yIHRoZSBmaWVsZCBjb250cm9scy4NCisgKi8gDQorY2xhc3MgUm9ib3REZW1vIDogcHVibGljIFNpbXBsZVJvYm90DQorew0KKwlSb2JvdERyaXZlIG15Um9ib3Q7IC8vIHJvYm90IGRyaXZlIHN5c3RlbQ0KKwlKb3lzdGljayBzdGljazsgLy8gb25seSBqb3lzdGljaw0KKw0KK3B1YmxpYzoNCisJUm9ib3REZW1vKHZvaWQpOg0KKwkJbXlSb2JvdCgxLCAyKSwJLy8gdGhlc2UgbXVzdCBiZSBpbml0aWFsaXplZCBpbiB0aGUgc2FtZSBvcmRlcg0KKwkJc3RpY2soMSkJCS8vIGFzIHRoZXkgYXJlIGRlY2xhcmVkIGFib3ZlLg0KKwl7DQorCQlteVJvYm90LlNldEV4cGlyYXRpb24oMC4xKTsNCisJfQ0KKw0KKwkvKioNCisJICogRHJpdmUgbGVmdCAmIHJpZ2h0IG1vdG9ycyBmb3IgMiBzZWNvbmRzIHRoZW4gc3RvcA0KKwkgKi8NCisJdm9pZCBBdXRvbm9tb3VzKHZvaWQpDQorCXsNCisJCW15Um9ib3QuU2V0U2FmZXR5RW5hYmxlZChmYWxzZSk7DQorCQlteVJvYm90LkRyaXZlKC0wLjUsIDAuMCk7IAkvLyBkcml2ZSBmb3J3YXJkcyBoYWxmIHNwZWVkDQorCQlXYWl0KDIuMCk7IAkJCQkvLyAgICBmb3IgMiBzZWNvbmRzDQorCQlteVJvYm90LkRyaXZlKDAuMCwgMC4wKTsgCS8vIHN0b3Agcm9ib3QNCisJfQ0KKw0KKwkvKioNCisJICogUnVucyB0aGUgbW90b3JzIHdpdGggYXJjYWRlIHN0ZWVyaW5nLiANCisJICovDQorCXZvaWQgT3BlcmF0b3JDb250cm9sKHZvaWQpDQorCXsNCisJCW15Um9ib3QuU2V0U2FmZXR5RW5hYmxlZCh0cnVlKTsNCisJCXdoaWxlIChJc09wZXJhdG9yQ29udHJvbCgpKQ0KKwkJew0KKwkJCW15Um9ib3QuQXJjYWRlRHJpdmUoc3RpY2spOyAvLyBkcml2ZSB3aXRoIGFyY2FkZSBzdHlsZSAodXNlIHJpZ2h0IHN0aWNrKQ0KKwkJCVdhaXQoMC4wMDUpOwkJCQkvLyB3YWl0IGZvciBhIG1vdG9yIHVwZGF0ZSB0aW1lDQorCQl9DQorCX0NCisJDQorCS8qKg0KKwkgKiBSdW5zIGR1cmluZyB0ZXN0IG1vZGUNCisJICovDQorCXZvaWQgVGVzdCgpIHsNCisNCisJfQ0KK307DQorDQorU1RBUlRfUk9CT1RfQ0xBU1MoUm9ib3REZW1vKTsNCisNCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vU2ltcGxlVGVtcGxhdGUvc2FtcGxlLnByb3BlcnRpZXMgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vU2ltcGxlVGVtcGxhdGUvc2FtcGxlLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWZjODk1ZQotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9TaW1wbGVUZW1wbGF0ZS9zYW1wbGUucHJvcGVydGllcwpAQCAtMCwwICsxLDIgQEAKK3Byb2plY3QudHlwZT1Eb3dubG9hZGFibGVLZXJuZWxNb2R1bGVQcm9qZWN0DQorcGxhdGZvcm0uaWQ9VnhXb3Jrcw0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9TaW1wbGVUZW1wbGF0ZS9zYW1wbGUudHh0IGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvdnh3b3Jrcy02LjMvdGFyZ2V0L3NyYy9kZW1vL1NpbXBsZVRlbXBsYXRlL3NhbXBsZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjUwNjFmYQotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9TaW1wbGVUZW1wbGF0ZS9zYW1wbGUudHh0CkBAIC0wLDAgKzEsMTAgQEAKK0ZSQyBTaW1wbGUgUm9ib3QgVGVtcGxhdGUNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKw0KK1RoaXMgcHJvZ3JhbSBpcyB0aGUgc2ltcGxlc3Qgc2FtcGxlIHByb2dyYW0gdGhhdCBpbXBsZW1lbnRzDQordGhlIGZ1bGwgZmllbGQgY29udHJvbCBhbmQgc2hvd3MgdGhlIHVzZSBvZiB0aGUgd2F0Y2hkb2cNCit0aW1lci4gVGhpcyBpcyBhbiBleGNlbGxlbnQgc3RhcnRpbmcgcG9pbnQgZm9yIHlvdXIgcHJvZ3JhbXMuDQorDQorVGhpcyBwcm9ncmFtIHNpbXBseSBkcml2ZXMgZm9yd2FyZCBmb3IgMiBzZWNvbmRzIGluIHRoZQ0KK0F1dG9ub21vdXMgcGVyaW9kIGFuZCBkb2VzIHNpbXBsZSBhcmNhZGUgZHJpdmluZyBkdXJpbmcgdGhlDQorT3BlcmF0b3IgQ29udHJvbCBwZXJpb2QuDQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvdnh3b3Jrcy02LjMvdGFyZ2V0L3NyYy9kZW1vL1Zpc2lvblNhbXBsZTIwMTIvLmNwcm9qZWN0IGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvdnh3b3Jrcy02LjMvdGFyZ2V0L3NyYy9kZW1vL1Zpc2lvblNhbXBsZTIwMTIvLmNwcm9qZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0MjcwODYKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vVmlzaW9uU2FtcGxlMjAxMi8uY3Byb2plY3QKQEAgLTAsMCArMSwyOSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQorPD9maWxlVmVyc2lvbiA0LjAuMD8+DQorDQorPGNwcm9qZWN0Pg0KKwk8c3RvcmFnZU1vZHVsZSBtb2R1bGVJZD0ib3JnLmVjbGlwc2UuY2R0LmNvcmUuc2V0dGluZ3MiPg0KKwkJPGNjb25maWd1cmF0aW9uIGlkPSJvcmcuZWNsaXBzZS5jZHQuY29yZS5kZWZhdWx0LmNvbmZpZy4yODM5NjcxMDYiPg0KKwkJCTxzdG9yYWdlTW9kdWxlIGJ1aWxkU3lzdGVtSWQ9Im9yZy5lY2xpcHNlLmNkdC5jb3JlLmRlZmF1bHRDb25maWdEYXRhUHJvdmlkZXIiIGlkPSJvcmcuZWNsaXBzZS5jZHQuY29yZS5kZWZhdWx0LmNvbmZpZy4yODM5NjcxMDYiIG1vZHVsZUlkPSJvcmcuZWNsaXBzZS5jZHQuY29yZS5zZXR0aW5ncyIgbmFtZT0iQ29uZmlndXJhdGlvbiI+DQorCQkJCTxleHRlcm5hbFNldHRpbmdzLz4NCisJCQkJPGV4dGVuc2lvbnM+DQorCQkJCQk8ZXh0ZW5zaW9uIGlkPSJjb20ud2luZHJpdmVyLmlkZS5jb3JlLldSU2Nhbm5lckluZm9Qcm92aWRlciIgcG9pbnQ9Im9yZy5lY2xpcHNlLmNkdC5jb3JlLlNjYW5uZXJJbmZvUHJvdmlkZXIiLz4NCisJCQkJCTxleHRlbnNpb24gaWQ9ImNvbS53aW5kcml2ZXIuaWRlLmNvcmUuV1JFbGZQYXJzZXJWeFdvcmtzIiBwb2ludD0ib3JnLmVjbGlwc2UuY2R0LmNvcmUuQmluYXJ5UGFyc2VyIi8+DQorCQkJCQk8ZXh0ZW5zaW9uIGlkPSJvcmcuZWNsaXBzZS5jZHQuY29yZS5HTlVfRUxGIiBwb2ludD0ib3JnLmVjbGlwc2UuY2R0LmNvcmUuQmluYXJ5UGFyc2VyIi8+DQorCQkJCTwvZXh0ZW5zaW9ucz4NCisJCQk8L3N0b3JhZ2VNb2R1bGU+DQorCQkJPHN0b3JhZ2VNb2R1bGUgbW9kdWxlSWQ9Im9yZy5lY2xpcHNlLmNkdC5jb3JlLmV4dGVybmFsU2V0dGluZ3MiLz4NCisJCQk8c3RvcmFnZU1vZHVsZSBtb2R1bGVJZD0ib3JnLmVjbGlwc2UuY2R0LmNvcmUucGF0aGVudHJ5Ij4NCisJCQkJPHBhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9IiIvPg0KKwkJCQk8cGF0aGVudHJ5IGtpbmQ9Im91dCIgcGF0aD0iIi8+DQorCQkJCTxwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJjb20ud2luZHJpdmVyLmlkZS5jb3JlLldSX0NPTlRBSU5FUiIvPg0KKwkJCQk8cGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0iY29tLndpbmRyaXZlci5pZGUuY29yZS5idWlsZC5tb2RlbC5XUl9VU0VSREVGSU5FRF9DT05UQUlORVIiLz4NCisJCQk8L3N0b3JhZ2VNb2R1bGU+DQorCQkJPHN0b3JhZ2VNb2R1bGUgbW9kdWxlSWQ9InNjYW5uZXJDb25maWd1cmF0aW9uIi8+DQorCQkJPHN0b3JhZ2VNb2R1bGUgbW9kdWxlSWQ9InVzZXJkZWZpbmVkQ29udGFpbmVyIj4NCisJCQkJPGluZGV4QWxsRmlsZXMgdmFsdWU9ImZhbHNlIi8+DQorCQkJCTxpbml0aWFsaXplZCB2YWx1ZT0idHJ1ZSIvPg0KKwkJCTwvc3RvcmFnZU1vZHVsZT4NCisJCTwvY2NvbmZpZ3VyYXRpb24+DQorCTwvc3RvcmFnZU1vZHVsZT4NCis8L2Nwcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9WaXNpb25TYW1wbGUyMDEyLy5wcm9qZWN0IGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvdnh3b3Jrcy02LjMvdGFyZ2V0L3NyYy9kZW1vL1Zpc2lvblNhbXBsZTIwMTIvLnByb2plY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODAyMmRmMgotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9WaXNpb25TYW1wbGUyMDEyLy5wcm9qZWN0CkBAIC0wLDAgKzEsMjAgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQorPHByb2plY3REZXNjcmlwdGlvbj4NCisJPG5hbWU+VmlzaW9uU2FtcGxlMjAxMjwvbmFtZT4NCisJPGNvbW1lbnQ+PC9jb21tZW50Pg0KKwk8cHJvamVjdHM+DQorCTwvcHJvamVjdHM+DQorCTxidWlsZFNwZWM+DQorCQk8YnVpbGRDb21tYW5kPg0KKwkJCTxuYW1lPmNvbS53aW5kcml2ZXIuaWRlLmNvcmUud3JidWlsZGVyPC9uYW1lPg0KKwkJCTxhcmd1bWVudHM+DQorCQkJPC9hcmd1bWVudHM+DQorCQk8L2J1aWxkQ29tbWFuZD4NCisJPC9idWlsZFNwZWM+DQorCTxuYXR1cmVzPg0KKwkJPG5hdHVyZT5jb20ud2luZHJpdmVyLmlkZS5jb3JlLndybmF0dXJlPC9uYXR1cmU+DQorCQk8bmF0dXJlPmNvbS53aW5kcml2ZXIuaWRlLmNvcmUud3Jjb3JlbmF0dXJlPC9uYXR1cmU+DQorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmNkdC5jb3JlLmNuYXR1cmU8L25hdHVyZT4NCisJCTxuYXR1cmU+b3JnLmVjbGlwc2UuY2R0LmNvcmUuY2NuYXR1cmU8L25hdHVyZT4NCisJPC9uYXR1cmVzPg0KKzwvcHJvamVjdERlc2NyaXB0aW9uPg0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9WaXNpb25TYW1wbGUyMDEyLy53cm1ha2VmaWxlIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvdnh3b3Jrcy02LjMvdGFyZ2V0L3NyYy9kZW1vL1Zpc2lvblNhbXBsZTIwMTIvLndybWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTFkZDdmOAotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9WaXNpb25TYW1wbGUyMDEyLy53cm1ha2VmaWxlCkBAIC0wLDAgKzEsNDggQEAKKyMgVGhlIGZpbGUgIi53cm1ha2VmaWxlIiBpcyB0aGUgdGVtcGxhdGUgdXNlZCBieSB0aGUgV2luZCBSaXZlciBXb3JrYmVuY2ggdG8NCisjIGdlbmVyYXRlIHRoZSBtYWtlZmlsZXMgb2YgdGhpcyBwcm9qZWN0LiBBZGQgdXNlci1zcGVjaWZpYyBidWlsZCB0YXJnZXRzIGFuZA0KKyMgbWFrZSBydWxlcyBvbmx5KCEpIGluIHRoaXMgcHJvamVjdCdzICIud3JtYWtlZmlsZSIgZmlsZS4gVGhlc2Ugd2lsbCB0aGVuIGJlDQorIyBhdXRvbWF0aWNhbGx5IGR1bXBlZCBpbnRvIHRoZSBtYWtlZmlsZXMuDQorDQorV0lORF9IT01FIDo9ICQoc3Vic3QgXCwvLCQoV0lORF9IT01FKSkNCitXSU5EX0JBU0UgOj0gJChzdWJzdCBcLC8sJChXSU5EX0JBU0UpKQ0KK1dJTkRfVVNSIDo9ICQoc3Vic3QgXCwvLCQoV0lORF9VU1IpKQ0KKw0KK2FsbCA6IHByZV9idWlsZCBtYWluX2FsbCBwb3N0X2J1aWxkDQorDQorX2NsZWFuIDo6DQorCUBlY2hvICJtYWtlOiByZW1vdmluZyB0YXJnZXRzIGFuZCBvYmplY3RzIG9mIGBwd2RgIg0KKw0KKyVJREVfR0VORVJBVEVEJQ0KKw0KKy1pbmNsdWRlICQoUFJKX1JPT1RfRElSKS8qLm1ha2VmaWxlDQorDQorLWluY2x1ZGUgKi5tYWtlZmlsZQ0KKw0KK21haW5fYWxsIDogZXh0ZXJuYWxfYnVpbGQgJChQUk9KRUNUX1RBUkdFVFMpDQorCUBlY2hvICJtYWtlOiBidWlsdCB0YXJnZXRzIG9mIGBwd2RgIg0KKw0KKyMgZW50cnkgcG9pbnQgZm9yIGV4dGVuZGluZyB0aGUgYnVpbGQNCitleHRlcm5hbF9idWlsZCA6Og0KKwlAZWNobyAiIg0KKw0KKyMgbWFpbiBlbnRyeSBwb2ludCBmb3IgcHJlIHByb2Nlc3NpbmcgcHJpb3IgdG8gdGhlIGJ1aWxkDQorcHJlX2J1aWxkIDo6ICQoUFJFX0JVSUxEX1NURVApIGdlbmVyYXRlX3NvdXJjZXMNCisJQGVjaG8gIiINCisNCisjIGVudHJ5IHBvaW50IGZvciBnZW5lcmF0aW5nIHNvdXJjZXMgcHJpb3IgdG8gdGhlIGJ1aWxkDQorZ2VuZXJhdGVfc291cmNlcyA6Og0KKwlAZWNobyAiIg0KKw0KKyMgbWFpbiBlbnRyeSBwb2ludCBmb3IgcG9zdCBwcm9jZXNzaW5nIGFmdGVyIHRoZSBidWlsZA0KK3Bvc3RfYnVpbGQgOjogJChQT1NUX0JVSUxEX1NURVApIGRlcGxveV9vdXRwdXQNCisJQGVjaG8gIiINCisNCisjIGVudHJ5IHBvaW50IGZvciBkZXBsb3lpbmcgb3V0cHV0IGFmdGVyIHRoZSBidWlsZA0KK2RlcGxveV9vdXRwdXQgOjoNCisJQGVjaG8gIiINCisNCitjbGVhbiA6OiBleHRlcm5hbF9jbGVhbiAkKENMRUFOX1NURVApIF9jbGVhbg0KKw0KKyMgZW50cnkgcG9pbnQgZm9yIGV4dGVuZGluZyB0aGUgYnVpbGQgY2xlYW4NCitleHRlcm5hbF9jbGVhbiA6Og0KKwlAZWNobyAiIg0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9WaXNpb25TYW1wbGUyMDEyLy53cnByb2plY3QgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vVmlzaW9uU2FtcGxlMjAxMi8ud3Jwcm9qZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5OTFiMzUKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vVmlzaW9uU2FtcGxlMjAxMi8ud3Jwcm9qZWN0CkBAIC0wLDAgKzEsMjU4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ibm8iPz4NCis8d3J4bWw+DQorICAgIDxwcm9wZXJ0aWVzIHBsYXRmb3JtPSJWeFdvcmtzIiBwbGF0Zm9ybV9uYW1lPSJ2eHdvcmtzLTYuMyIgcm9vdD0iMSIgdHlwZT0iRG93bmxvYWRhYmxlS2VybmVsTW9kdWxlUHJvamVjdCIvPg0KKyAgICA8YXR0cmlidXRlcz4NCisgICAgICAgIDxtYXBBdHRyaWJ1dGU+DQorICAgICAgICAgICAgPGxpc3RBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98R2xvYmFsTWFjcm9zIj4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iUFJPSkVDVF9UWVBFIi8+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9IkRFRklORVMiLz4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iRVhQQU5EX0RCRyIvPg0KKyAgICAgICAgICAgIDwvbGlzdEF0dHJpYnV0ZT4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfEdsb2JhbE1hY3JvfERFRklORVMiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfEdsb2JhbE1hY3JvfEVYUEFORF9EQkciIHZhbHVlPSIwIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xHbG9iYWxNYWNyb3xQUk9KRUNUX1RZUEUiIHZhbHVlPSJES00iLz4NCisgICAgICAgICAgICA8bGlzdEF0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xJbmNsfFBQQzMyZGlhYiI+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9Ii1JJChXSU5EX0JBU0UpL3RhcmdldC9oL1dQSUxpYiIvPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSItSSQoV0lORF9CQVNFKS90YXJnZXQvaCIvPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSItSSQoV0lORF9CQVNFKS90YXJnZXQvaC93cm4vY29yZWlwIi8+DQorICAgICAgICAgICAgPC9saXN0QXR0cmlidXRlPg0KKyAgICAgICAgICAgIDxsaXN0QXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfEluY2x8UFBDMzJnbnUiPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSItSSQoV0lORF9CQVNFKS90YXJnZXQvaCIvPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSItSSQoV0lORF9CQVNFKS90YXJnZXQvaC93cm4vY29yZWlwIi8+DQorICAgICAgICAgICAgPC9saXN0QXR0cmlidXRlPg0KKyAgICAgICAgICAgIDxsaXN0QXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfEluY2x8UFBDNjAzZGlhYiI+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9Ii1JJChXSU5EX0JBU0UpL3RhcmdldC9oIi8+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9Ii1JJChXSU5EX0JBU0UpL3RhcmdldC9oL3dybi9jb3JlaXAiLz4NCisgICAgICAgICAgICA8L2xpc3RBdHRyaWJ1dGU+DQorICAgICAgICAgICAgPGxpc3RBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98SW5jbHxQUEM2MDNnbnUiPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSItSSQoV0lORF9CQVNFKS90YXJnZXQvaCIvPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSItSSQoV0lORF9CQVNFKS90YXJnZXQvaC9XUElMaWIiLz4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2gvd3JuL2NvcmVpcCIvPg0KKyAgICAgICAgICAgIDwvbGlzdEF0dHJpYnV0ZT4NCisgICAgICAgICAgICA8bGlzdEF0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xMaWJzfFBQQzMyZGlhYiI+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9IiQoV0lORF9CQVNFKS90YXJnZXQvbGliL1dQSUxpYi5hIi8+DQorICAgICAgICAgICAgPC9saXN0QXR0cmlidXRlPg0KKyAgICAgICAgICAgIDxsaXN0QXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfExpYnN8UFBDNjAzZ251Ij4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iJChXSU5EX0JBU0UpL3RhcmdldC9saWIvV1BJTGliLmEiLz4NCisgICAgICAgICAgICA8L2xpc3RBdHRyaWJ1dGU+DQorICAgICAgICAgICAgPGxpc3RBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm9zIj4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iVlhfQ1BVX0ZBTUlMWSIvPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSJDUFUiLz4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iVE9PTF9GQU1JTFkiLz4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iVE9PTCIvPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSJUT09MX1BBVEgiLz4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iQ0NfQVJDSF9TUEVDIi8+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9IkxJQlBBVEgiLz4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iTElCUyIvPg0KKyAgICAgICAgICAgIDwvbGlzdEF0dHJpYnV0ZT4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfENDX0FSQ0hfU1BFQ3x2YWx1ZXxQUEMzMmRpYWIiIHZhbHVlPSItdFBQQ0ZIOnZ4d29ya3M2MyAtWHN0bXctc2xvdyAtRFBQQzMyX2ZwNjB4Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xDQ19BUkNIX1NQRUN8dmFsdWV8UFBDMzJnbnUiIHZhbHVlPSItbWhhcmQtZmxvYXQgLW1zdHJpY3QtYWxpZ24gLW1uby1pbXBsaWNpdC1mcCAtRFBQQzMyX2ZwNjB4Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xDQ19BUkNIX1NQRUN8dmFsdWV8UFBDNjAzZGlhYiIgdmFsdWU9Ii10UFBDNjAzRkg6dnh3b3JrczYzIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xDQ19BUkNIX1NQRUN8dmFsdWV8UFBDNjAzZ251IiB2YWx1ZT0iLW1jcHU9NjAzIC1tc3RyaWN0LWFsaWduIC1tbm8taW1wbGljaXQtZnAgLW1sb25nY2FsbCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98Q1BVfHZhbHVlfFBQQzMyZGlhYiIgdmFsdWU9IlBQQzMyIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xDUFV8dmFsdWV8UFBDMzJnbnUiIHZhbHVlPSJQUEMzMiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98Q1BVfHZhbHVlfFBQQzYwM2RpYWIiIHZhbHVlPSJQUEM2MDMiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfENQVXx2YWx1ZXxQUEM2MDNnbnUiIHZhbHVlPSJQUEM2MDMiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfExJQlBBVEh8dmFsdWV8UFBDMzJkaWFiIiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xMSUJQQVRIfHZhbHVlfFBQQzMyZ251IiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xMSUJQQVRIfHZhbHVlfFBQQzYwM2RpYWIiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfExJQlBBVEh8dmFsdWV8UFBDNjAzZ251IiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xMSUJTfHZhbHVlfFBQQzMyZGlhYiIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98TElCU3x2YWx1ZXxQUEMzMmdudSIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98TElCU3x2YWx1ZXxQUEM2MDNkaWFiIiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xMSUJTfHZhbHVlfFBQQzYwM2dudSIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98VE9PTF9GQU1JTFl8dmFsdWV8UFBDMzJkaWFiIiB2YWx1ZT0iZGlhYiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98VE9PTF9GQU1JTFl8dmFsdWV8UFBDMzJnbnUiIHZhbHVlPSJnbnUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfFRPT0xfRkFNSUxZfHZhbHVlfFBQQzYwM2RpYWIiIHZhbHVlPSJkaWFiIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xUT09MX0ZBTUlMWXx2YWx1ZXxQUEM2MDNnbnUiIHZhbHVlPSJnbnUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfFRPT0xfUEFUSHx2YWx1ZXxQUEMzMmRpYWIiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfFRPT0xfUEFUSHx2YWx1ZXxQUEMzMmdudSIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98VE9PTF9QQVRIfHZhbHVlfFBQQzYwM2RpYWIiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfFRPT0xfUEFUSHx2YWx1ZXxQUEM2MDNnbnUiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfFRPT0x8dmFsdWV8UFBDMzJkaWFiIiB2YWx1ZT0iZGlhYiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98VE9PTHx2YWx1ZXxQUEMzMmdudSIgdmFsdWU9ImdudSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98VE9PTHx2YWx1ZXxQUEM2MDNkaWFiIiB2YWx1ZT0iZGlhYiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98VE9PTHx2YWx1ZXxQUEM2MDNnbnUiIHZhbHVlPSJnbnUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfFZYX0NQVV9GQU1JTFl8dmFsdWV8UFBDMzJkaWFiIiB2YWx1ZT0icHBjIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xWWF9DUFVfRkFNSUxZfHZhbHVlfFBQQzMyZ251IiB2YWx1ZT0icHBjIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xWWF9DUFVfRkFNSUxZfHZhbHVlfFBQQzYwM2RpYWIiIHZhbHVlPSJwcGMiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfFZYX0NQVV9GQU1JTFl8dmFsdWV8UFBDNjAzZ251IiB2YWx1ZT0icHBjIi8+DQorICAgICAgICAgICAgPGxpc3RBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHMiPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSJDLUNvbXBpbGVyIi8+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9IkMrKy1Db21waWxlciIvPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSJMaW5rZXIiLz4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iUGFydGlhbCBJbWFnZSBMaW5rZXIiLz4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iTGlicmFyaWFuIi8+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9IkFzc2VtYmxlciIvPg0KKyAgICAgICAgICAgIDwvbGlzdEF0dHJpYnV0ZT4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfGNtZHxQUEMzMmRpYWIiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7OyVhc3NlbWJsZXJwcmVmaXglICQoVE9PTF9QQVRIKWRjYyAlRGVidWdNb2RlRmxhZ3MlICVUb29sRmxhZ3MlICQoQURERURfQ0ZMQUdTKSAlSW5jbHVkZXMlICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICVPdXRGaWxlJSAtYyAlSW5GaWxlJSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxBc3NlbWJsZXJ8Y21kfFBQQzMyZ251IiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OzslYXNzZW1ibGVycHJlZml4JSAkKFRPT0xfUEFUSCljY3BwYyAlRGVidWdNb2RlRmxhZ3MlICVUb29sRmxhZ3MlICQoQURERURfQ0ZMQUdTKSAlSW5jbHVkZXMlICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICVPdXRGaWxlJSAtYyAlSW5GaWxlJSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxBc3NlbWJsZXJ8Y21kfFBQQzYwM2RpYWIiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7OyVhc3NlbWJsZXJwcmVmaXglICQoVE9PTF9QQVRIKWRjYyAlRGVidWdNb2RlRmxhZ3MlICVUb29sRmxhZ3MlICQoQURERURfQ0ZMQUdTKSAlSW5jbHVkZXMlICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICVPdXRGaWxlJSAtYyAlSW5GaWxlJSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxBc3NlbWJsZXJ8Y21kfFBQQzYwM2dudSIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWFzc2VtYmxlcnByZWZpeCUgJChUT09MX1BBVEgpY2NwcGMgJURlYnVnTW9kZUZsYWdzJSAlVG9vbEZsYWdzJSAkKEFEREVEX0NGTEFHUykgJUluY2x1ZGVzJSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAlT3V0RmlsZSUgLWMgJUluRmlsZSUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfGRiZ0ZsYWdzfFBQQzMyZGlhYiIgdmFsdWU9Ii1nIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxkYmdGbGFnc3xQUEMzMmdudSIgdmFsdWU9Ii1nIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxkYmdGbGFnc3xQUEM2MDNkaWFiIiB2YWx1ZT0iLWciLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfGRiZ0ZsYWdzfFBQQzYwM2dudSIgdmFsdWU9Ii1nIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxkZXJpdmVkU2lnc3xQUEMzMmRpYWIiIHZhbHVlPSIqLm8iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfGRlcml2ZWRTaWdzfFBQQzMyZ251IiB2YWx1ZT0iKi5vIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxkZXJpdmVkU2lnc3xQUEM2MDNkaWFiIiB2YWx1ZT0iKi5vIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxkZXJpdmVkU2lnc3xQUEM2MDNnbnUiIHZhbHVlPSIqLm8iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfGZsYWdzfFBQQzMyZGlhYiIgdmFsdWU9IiQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWHByZXByb2Nlc3MtYXNzZW1ibHkgLVhjcHAtbm8tc3BhY2UgIC1YbWFrZS1kZXBlbmRlbmN5PTB4ZCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxBc3NlbWJsZXJ8ZmxhZ3N8UFBDMzJnbnUiIHZhbHVlPSIkKENDX0FSQ0hfU1BFQykgLWFuc2kgICAteGFzc2VtYmxlci13aXRoLWNwcCAtTUQgLU1QIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxmbGFnc3xQUEM2MDNkaWFiIiB2YWx1ZT0iJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YcHJlcHJvY2Vzcy1hc3NlbWJseSAtWGNwcC1uby1zcGFjZSAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxmbGFnc3xQUEM2MDNnbnUiIHZhbHVlPSIkKENDX0FSQ0hfU1BFQykgLWFuc2kgICAteGFzc2VtYmxlci13aXRoLWNwcCAtTUQgLU1QIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxub25EYmdGbGFnc3xQUEMzMmRpYWIiIHZhbHVlPSItWE8gLVhzaXplLW9wdCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxBc3NlbWJsZXJ8bm9uRGJnRmxhZ3N8UFBDMzJnbnUiIHZhbHVlPSItTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxub25EYmdGbGFnc3xQUEM2MDNkaWFiIiB2YWx1ZT0iLVhPIC1Yc2l6ZS1vcHQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfG5vbkRiZ0ZsYWdzfFBQQzYwM2dudSIgdmFsdWU9Ii1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4iLz4NCisgICAgICAgICAgICA8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxvYmplY3QiIHZhbHVlPSJ0cnVlIi8+DQorICAgICAgICAgICAgPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxBc3NlbWJsZXJ8cGFzc0FibGUiIHZhbHVlPSJmYWxzZSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxBc3NlbWJsZXJ8c2lncyIgdmFsdWU9IioucyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8Y21kfFBQQzMyZGlhYiIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWNwcGNvbXBpbGVycHJlZml4JSAkKFRPT0xfUEFUSClkY2MgJURlYnVnTW9kZUZsYWdzJSAlVG9vbEZsYWdzJSAkKEFEREVEX0MrK0ZMQUdTKSAlSW5jbHVkZXMlICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICVPdXRGaWxlJSAtYyAlSW5GaWxlJSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8Y21kfFBQQzMyZ251IiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OzslY3BwY29tcGlsZXJwcmVmaXglICQoVE9PTF9QQVRIKWNjcHBjICVEZWJ1Z01vZGVGbGFncyUgJVRvb2xGbGFncyUgJChBRERFRF9DKytGTEFHUykgJUluY2x1ZGVzJSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAlT3V0RmlsZSUgLWMgJUluRmlsZSUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfGNtZHxQUEM2MDNkaWFiIiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OzslY3BwY29tcGlsZXJwcmVmaXglICQoVE9PTF9QQVRIKWRjYyAlRGVidWdNb2RlRmxhZ3MlICVUb29sRmxhZ3MlICQoQURERURfQysrRkxBR1MpICVJbmNsdWRlcyUgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gJU91dEZpbGUlIC1jICVJbkZpbGUlIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxjbWR8UFBDNjAzZ251IiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OzslY3BwY29tcGlsZXJwcmVmaXglICQoVE9PTF9QQVRIKWNjcHBjICVEZWJ1Z01vZGVGbGFncyUgJVRvb2xGbGFncyUgJChBRERFRF9DKytGTEFHUykgJUluY2x1ZGVzJSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAlT3V0RmlsZSUgLWMgJUluRmlsZSUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfGRiZ0ZsYWdzfFBQQzMyZGlhYiIgdmFsdWU9Ii1nIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxkYmdGbGFnc3xQUEMzMmdudSIgdmFsdWU9Ii1nIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxkYmdGbGFnc3xQUEM2MDNkaWFiIiB2YWx1ZT0iLWciLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfGRiZ0ZsYWdzfFBQQzYwM2dudSIgdmFsdWU9Ii1nIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxkZXJpdmVkU2lnc3xQUEMzMmRpYWIiIHZhbHVlPSIqLm8iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfGRlcml2ZWRTaWdzfFBQQzMyZ251IiB2YWx1ZT0iKi5vIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxkZXJpdmVkU2lnc3xQUEM2MDNkaWFiIiB2YWx1ZT0iKi5vIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxkZXJpdmVkU2lnc3xQUEM2MDNnbnUiIHZhbHVlPSIqLm8iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfGZsYWdzfFBQQzMyZGlhYiIgdmFsdWU9IiQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxmbGFnc3xQUEMzMmdudSIgdmFsdWU9IiQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8ZmxhZ3N8UFBDNjAzZGlhYiIgdmFsdWU9IiQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxmbGFnc3xQUEM2MDNnbnUiIHZhbHVlPSIkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgLW1sb25nY2FsbCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8bm9uRGJnRmxhZ3N8UFBDMzJkaWFiIiB2YWx1ZT0iLVhPIC1Yc2l6ZS1vcHQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfG5vbkRiZ0ZsYWdzfFBQQzMyZ251IiB2YWx1ZT0iLU8yIC1mc3RyZW5ndGgtcmVkdWNlIC1mbm8tYnVpbHRpbiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8bm9uRGJnRmxhZ3N8UFBDNjAzZGlhYiIgdmFsdWU9Ii1YTyAtWHNpemUtb3B0Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxub25EYmdGbGFnc3xQUEM2MDNnbnUiIHZhbHVlPSItTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluIi8+DQorICAgICAgICAgICAgPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8b2JqZWN0IiB2YWx1ZT0idHJ1ZSIvPg0KKyAgICAgICAgICAgIDxib29sZWFuQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfHBhc3NBYmxlIiB2YWx1ZT0iZmFsc2UiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfHNpZ3MiIHZhbHVlPSIqLmNwcDsqLkM7Ki5jeHg7Ki5jYyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfGNtZHxQUEMzMmRpYWIiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7OyVjY29tcGlsZXJwcmVmaXglICQoVE9PTF9QQVRIKWRjYyAlRGVidWdNb2RlRmxhZ3MlICVUb29sRmxhZ3MlICQoQURERURfQ0ZMQUdTKSAlSW5jbHVkZXMlICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICVPdXRGaWxlJSAtYyAlSW5GaWxlJSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfGNtZHxQUEMzMmdudSIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWNjb21waWxlcnByZWZpeCUgJChUT09MX1BBVEgpY2NwcGMgJURlYnVnTW9kZUZsYWdzJSAlVG9vbEZsYWdzJSAkKEFEREVEX0NGTEFHUykgJUluY2x1ZGVzJSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAlT3V0RmlsZSUgLWMgJUluRmlsZSUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxjbWR8UFBDNjAzZGlhYiIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWNjb21waWxlcnByZWZpeCUgJChUT09MX1BBVEgpZGNjICVEZWJ1Z01vZGVGbGFncyUgJVRvb2xGbGFncyUgJChBRERFRF9DRkxBR1MpICVJbmNsdWRlcyUgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gJU91dEZpbGUlIC1jICVJbkZpbGUlIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8Y21kfFBQQzYwM2dudSIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWNjb21waWxlcnByZWZpeCUgJChUT09MX1BBVEgpY2NwcGMgJURlYnVnTW9kZUZsYWdzJSAlVG9vbEZsYWdzJSAkKEFEREVEX0NGTEFHUykgJUluY2x1ZGVzJSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAlT3V0RmlsZSUgLWMgJUluRmlsZSUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxkYmdGbGFnc3xQUEMzMmRpYWIiIHZhbHVlPSItZyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfGRiZ0ZsYWdzfFBQQzMyZ251IiB2YWx1ZT0iLWciLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxkYmdGbGFnc3xQUEM2MDNkaWFiIiB2YWx1ZT0iLWciLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxkYmdGbGFnc3xQUEM2MDNnbnUiIHZhbHVlPSItZyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfGRlcml2ZWRTaWdzfFBQQzMyZGlhYiIgdmFsdWU9IioubyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfGRlcml2ZWRTaWdzfFBQQzMyZ251IiB2YWx1ZT0iKi5vIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8ZGVyaXZlZFNpZ3N8UFBDNjAzZGlhYiIgdmFsdWU9IioubyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfGRlcml2ZWRTaWdzfFBQQzYwM2dudSIgdmFsdWU9IioubyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfGZsYWdzfFBQQzMyZGlhYiIgdmFsdWU9IiQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8ZmxhZ3N8UFBDMzJnbnUiIHZhbHVlPSIkKENDX0FSQ0hfU1BFQykgLWFuc2kgIC1XYWxsICAtTUQgLU1QIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8ZmxhZ3N8UFBDNjAzZGlhYiIgdmFsdWU9IiQoQ0NfQVJDSF9TUEVDKSAtVzpjOiwtWGNsaWItb3B0aW0tb2ZmIC1YYW5zaSAtWGxvY2FsLWRhdGEtYXJlYS1zdGF0aWMtb25seSAtWGZvcmNlLWRlY2xhcmF0aW9ucyAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8ZmxhZ3N8UFBDNjAzZ251IiB2YWx1ZT0iJChDQ19BUkNIX1NQRUMpIC1hbnNpICAtV2FsbCAgLU1EIC1NUCAtbWxvbmdjYWxsIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8bm9uRGJnRmxhZ3N8UFBDMzJkaWFiIiB2YWx1ZT0iLVhPIC1Yc2l6ZS1vcHQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxub25EYmdGbGFnc3xQUEMzMmdudSIgdmFsdWU9Ii1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxub25EYmdGbGFnc3xQUEM2MDNkaWFiIiB2YWx1ZT0iLVhPIC1Yc2l6ZS1vcHQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxub25EYmdGbGFnc3xQUEM2MDNnbnUiIHZhbHVlPSItTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluIi8+DQorICAgICAgICAgICAgPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfG9iamVjdCIgdmFsdWU9InRydWUiLz4NCisgICAgICAgICAgICA8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8cGFzc0FibGUiIHZhbHVlPSJmYWxzZSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfHNpZ3MiIHZhbHVlPSIqLmMiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufGNtZHxQUEMzMmRpYWIiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7OyVhcmNoaXZlcnByZWZpeCUgJChUT09MX1BBVEgpZGFyICVUb29sRmxhZ3MlICVPdXRGaWxlJSAlT2JqZWN0cyUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufGNtZHxQUEMzMmdudSIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWFyY2hpdmVycHJlZml4JSAkKFRPT0xfUEFUSClhcnBwYyAlVG9vbEZsYWdzJSAlT3V0RmlsZSUgJU9iamVjdHMlIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxjbWR8UFBDNjAzZGlhYiIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWFyY2hpdmVycHJlZml4JSAkKFRPT0xfUEFUSClkYXIgJVRvb2xGbGFncyUgJU91dEZpbGUlICVPYmplY3RzJSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58Y21kfFBQQzYwM2dudSIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWFyY2hpdmVycHJlZml4JSAkKFRPT0xfUEFUSClhcnBwYyAlVG9vbEZsYWdzJSAlT3V0RmlsZSUgJU9iamVjdHMlIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxkYmdGbGFnc3xQUEMzMmRpYWIiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufGRiZ0ZsYWdzfFBQQzMyZ251IiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxkYmdGbGFnc3xQUEM2MDNkaWFiIiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxkYmdGbGFnc3xQUEM2MDNnbnUiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufGRlcml2ZWRTaWdzfFBQQzMyZGlhYiIgdmFsdWU9IiouYSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58ZGVyaXZlZFNpZ3N8UFBDMzJnbnUiIHZhbHVlPSIqLmEiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufGRlcml2ZWRTaWdzfFBQQzYwM2RpYWIiIHZhbHVlPSIqLmEiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufGRlcml2ZWRTaWdzfFBQQzYwM2dudSIgdmFsdWU9IiouYSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58ZmxhZ3N8UFBDMzJkaWFiIiB2YWx1ZT0iY3J1cyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58ZmxhZ3N8UFBDMzJnbnUiIHZhbHVlPSJjcnVzIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxmbGFnc3xQUEM2MDNkaWFiIiB2YWx1ZT0iY3J1cyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58ZmxhZ3N8UFBDNjAzZ251IiB2YWx1ZT0iY3J1cyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58bm9uRGJnRmxhZ3N8UFBDMzJkaWFiIiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxub25EYmdGbGFnc3xQUEMzMmdudSIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58bm9uRGJnRmxhZ3N8UFBDNjAzZGlhYiIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58bm9uRGJnRmxhZ3N8UFBDNjAzZ251IiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58b2JqZWN0IiB2YWx1ZT0iZmFsc2UiLz4NCisgICAgICAgICAgICA8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxwYXNzQWJsZSIgdmFsdWU9InRydWUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufHNpZ3MiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfGNtZHxQUEMzMmRpYWIiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7O3JtIC1mICVPdXRGaWxlJTtkZHVtcCAtTmcgJU9iamVjdHMlICVMaWJyYXJpZXMlIHwgdGNsc2ggJChXSU5EX0JBU0UpL2hvc3QvcmVzb3VyY2UvaHV0aWxzL3RjbC9tdW5jaC50Y2wgLWMgcHBjICZndDsgJChPQkpfRElSKS9jdGR0LmM7JWNjb21waWxlcnByZWZpeCUgJChUT09MX1BBVEgpZGNjICVEZWJ1Z01vZGVGbGFncyUgJChDQ19BUkNIX1NQRUMpIC1YZG9sbGFyLWluLWlkZW50IC1YZm9yY2UtZGVjbGFyYXRpb25zICQoQURERURfQ0ZMQUdTKSAlSW5jbHVkZXMlICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpICAtbyAkKE9CSl9ESVIpL2N0ZHQubyAtYyAkKE9CSl9ESVIpL2N0ZHQuYzslbGlua2VycHJlZml4JSAkKFRPT0xfUEFUSClkbGQgLXRQUENGSDp2eHdvcmtzNjMgLVggLXI1ICVUb29sRmxhZ3MlIC1vICVPdXRGaWxlJSAkKE9CSl9ESVIpL2N0ZHQubyAlT2JqZWN0cyUgJUxpYnJhcmllcyUgJChMSUJQQVRIKSAkKExJQlMpICAkKEFEREVEX0xJQlBBVEgpICQoQURERURfTElCUykgJmFtcDsmYW1wOyBpZiBbICZxdW90OyQoRVhQQU5EX0RCRykmcXVvdDsgPSAmcXVvdDsxJnF1b3Q7IF07IHRoZW4gcGxpbmsgJnF1b3Q7JEAmcXVvdDs7ZmkiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfGNtZHxQUEMzMmdudSIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7cm0gLWYgJU91dEZpbGUlO25tcHBjICVPYmplY3RzJSAlTGlicmFyaWVzJSB8IHRjbHNoICQoV0lORF9CQVNFKS9ob3N0L3Jlc291cmNlL2h1dGlscy90Y2wvbXVuY2gudGNsIC1jIHBwYyAmZ3Q7ICQoT0JKX0RJUikvY3RkdC5jOyVjY29tcGlsZXJwcmVmaXglICQoVE9PTF9QQVRIKWNjcHBjICVEZWJ1Z01vZGVGbGFncyUgJChDQ19BUkNIX1NQRUMpIC1mZG9sbGFycy1pbi1pZGVudGlmaWVycyAtV2FsbCAkKEFEREVEX0NGTEFHUykgJUluY2x1ZGVzJSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAgLW8gJChPQkpfRElSKS9jdGR0Lm8gLWMgJChPQkpfRElSKS9jdGR0LmM7JWxpbmtlcnByZWZpeCUgJChUT09MX1BBVEgpY2NwcGMgLXIgLW5vc3RkbGliIC1XbCwtWCAlVG9vbEZsYWdzJSAtbyAlT3V0RmlsZSUgJChPQkpfRElSKS9jdGR0Lm8gJU9iamVjdHMlICVMaWJyYXJpZXMlICQoTElCUEFUSCkgJChMSUJTKSAgJChBRERFRF9MSUJQQVRIKSAkKEFEREVEX0xJQlMpICZhbXA7JmFtcDsgaWYgWyAmcXVvdDskKEVYUEFORF9EQkcpJnF1b3Q7ID0gJnF1b3Q7MSZxdW90OyBdOyB0aGVuIHBsaW5rICZxdW90OyRAJnF1b3Q7O2ZpIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxjbWR8UFBDNjAzZGlhYiIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7cm0gLWYgJU91dEZpbGUlO2RkdW1wIC1OZyAlT2JqZWN0cyUgJUxpYnJhcmllcyUgfCB0Y2xzaCAkKFdJTkRfQkFTRSkvaG9zdC9yZXNvdXJjZS9odXRpbHMvdGNsL211bmNoLnRjbCAtYyBwcGMgJmd0OyAkKE9CSl9ESVIpL2N0ZHQuYzslY2NvbXBpbGVycHJlZml4JSAkKFRPT0xfUEFUSClkY2MgJURlYnVnTW9kZUZsYWdzJSAkKENDX0FSQ0hfU1BFQykgLVhkb2xsYXItaW4taWRlbnQgLVhmb3JjZS1kZWNsYXJhdGlvbnMgJChBRERFRF9DRkxBR1MpICVJbmNsdWRlcyUgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgIC1vICQoT0JKX0RJUikvY3RkdC5vIC1jICQoT0JKX0RJUikvY3RkdC5jOyVsaW5rZXJwcmVmaXglICQoVE9PTF9QQVRIKWRsZCAtdFBQQzYwM0ZIOnZ4d29ya3M2MyAtWCAtcjUgJVRvb2xGbGFncyUgLW8gJU91dEZpbGUlICQoT0JKX0RJUikvY3RkdC5vICVPYmplY3RzJSAlTGlicmFyaWVzJSAkKExJQlBBVEgpICQoTElCUykgICQoQURERURfTElCUEFUSCkgJChBRERFRF9MSUJTKSAmYW1wOyZhbXA7IGlmIFsgJnF1b3Q7JChFWFBBTkRfREJHKSZxdW90OyA9ICZxdW90OzEmcXVvdDsgXTsgdGhlbiBwbGluayAmcXVvdDskQCZxdW90OztmaSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8Y21kfFBQQzYwM2dudSIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7cm0gLWYgJU91dEZpbGUlO25tcHBjICVPYmplY3RzJSAlTGlicmFyaWVzJSB8IHRjbHNoICQoV0lORF9CQVNFKS9ob3N0L3Jlc291cmNlL2h1dGlscy90Y2wvbXVuY2gudGNsIC1jIHBwYyAmZ3Q7ICQoT0JKX0RJUikvY3RkdC5jOyVjY29tcGlsZXJwcmVmaXglICQoVE9PTF9QQVRIKWNjcHBjICVEZWJ1Z01vZGVGbGFncyUgJChDQ19BUkNIX1NQRUMpIC1mZG9sbGFycy1pbi1pZGVudGlmaWVycyAtV2FsbCAkKEFEREVEX0NGTEFHUykgJUluY2x1ZGVzJSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAgLW8gJChPQkpfRElSKS9jdGR0Lm8gLWMgJChPQkpfRElSKS9jdGR0LmM7JWxpbmtlcnByZWZpeCUgJChUT09MX1BBVEgpY2NwcGMgLXIgLW5vc3RkbGliIC1XbCwtWCAlVG9vbEZsYWdzJSAtbyAlT3V0RmlsZSUgJChPQkpfRElSKS9jdGR0Lm8gJU9iamVjdHMlICVMaWJyYXJpZXMlICQoTElCUEFUSCkgJChMSUJTKSAgJChBRERFRF9MSUJQQVRIKSAkKEFEREVEX0xJQlMpICZhbXA7JmFtcDsgaWYgWyAmcXVvdDskKEVYUEFORF9EQkcpJnF1b3Q7ID0gJnF1b3Q7MSZxdW90OyBdOyB0aGVuIHBsaW5rICZxdW90OyRAJnF1b3Q7O2ZpIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxkYmdGbGFnc3xQUEMzMmRpYWIiIHZhbHVlPSItZyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8ZGJnRmxhZ3N8UFBDMzJnbnUiIHZhbHVlPSItZyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8ZGJnRmxhZ3N8UFBDNjAzZGlhYiIgdmFsdWU9Ii1nIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxkYmdGbGFnc3xQUEM2MDNnbnUiIHZhbHVlPSItZyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8ZGVyaXZlZFNpZ3N8UFBDMzJkaWFiIiB2YWx1ZT0iKi5vdXQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfGRlcml2ZWRTaWdzfFBQQzMyZ251IiB2YWx1ZT0iKi5vdXQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfGRlcml2ZWRTaWdzfFBQQzYwM2RpYWIiIHZhbHVlPSIqLm91dCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8ZGVyaXZlZFNpZ3N8UFBDNjAzZ251IiB2YWx1ZT0iKi5vdXQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfGZsYWdzfFBQQzMyZGlhYiIgdmFsdWU9Ii1yNCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8ZmxhZ3N8UFBDMzJnbnUiIHZhbHVlPSItVCAkKFdJTkRfQkFTRSkvdGFyZ2V0L2gvdG9vbC9nbnUvbGRzY3JpcHRzL2xpbmsuT1VUIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxmbGFnc3xQUEM2MDNkaWFiIiB2YWx1ZT0iLXI0Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxmbGFnc3xQUEM2MDNnbnUiIHZhbHVlPSItVCAkKFdJTkRfQkFTRSkvdGFyZ2V0L2gvdG9vbC9nbnUvbGRzY3JpcHRzL2xpbmsuT1VUIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxub25EYmdGbGFnc3xQUEMzMmRpYWIiIHZhbHVlPSItWE8gLVhzaXplLW9wdCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8bm9uRGJnRmxhZ3N8UFBDMzJnbnUiIHZhbHVlPSItTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxub25EYmdGbGFnc3xQUEM2MDNkaWFiIiB2YWx1ZT0iLVhPIC1Yc2l6ZS1vcHQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfG5vbkRiZ0ZsYWdzfFBQQzYwM2dudSIgdmFsdWU9Ii1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4iLz4NCisgICAgICAgICAgICA8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxvYmplY3QiIHZhbHVlPSJmYWxzZSIvPg0KKyAgICAgICAgICAgIDxib29sZWFuQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfHBhc3NBYmxlIiB2YWx1ZT0iZmFsc2UiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfHNpZ3MiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8Y21kfFBQQzMyZGlhYiIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWxpbmtlcnByZWZpeCUgJChUT09MX1BBVEgpZGxkIC10UFBDRkg6dnh3b3JrczYzIC1YIC1yNSAlVG9vbEZsYWdzJSAtbyAlT3V0RmlsZSUgJU9iamVjdHMlICQoTElCUEFUSCkgJChMSUJTKSAkKEFEREVEX0xJQlBBVEgpICQoQURERURfTElCUykgICZhbXA7JmFtcDsgaWYgWyAmcXVvdDskKEVYUEFORF9EQkcpJnF1b3Q7ID0gJnF1b3Q7MSZxdW90OyBdOyB0aGVuIHBsaW5rICZxdW90OyRAJnF1b3Q7O2ZpIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfGNtZHxQUEMzMmdudSIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWxpbmtlcnByZWZpeCUgJChUT09MX1BBVEgpY2NwcGMgLXIgLW5vc3RkbGliIC1XbCwtWCAlVG9vbEZsYWdzJSAtbyAlT3V0RmlsZSUgJU9iamVjdHMlICQoTElCUEFUSCkgJChMSUJTKSAkKEFEREVEX0xJQlBBVEgpICQoQURERURfTElCUykgICZhbXA7JmFtcDsgaWYgWyAmcXVvdDskKEVYUEFORF9EQkcpJnF1b3Q7ID0gJnF1b3Q7MSZxdW90OyBdOyB0aGVuIHBsaW5rICZxdW90OyRAJnF1b3Q7O2ZpIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfGNtZHxQUEM2MDNkaWFiIiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OzslbGlua2VycHJlZml4JSAkKFRPT0xfUEFUSClkbGQgLXRQUEM2MDNGSDp2eHdvcmtzNjMgLVggLXI1ICVUb29sRmxhZ3MlIC1vICVPdXRGaWxlJSAlT2JqZWN0cyUgJChMSUJQQVRIKSAkKExJQlMpICQoQURERURfTElCUEFUSCkgJChBRERFRF9MSUJTKSAgJmFtcDsmYW1wOyBpZiBbICZxdW90OyQoRVhQQU5EX0RCRykmcXVvdDsgPSAmcXVvdDsxJnF1b3Q7IF07IHRoZW4gcGxpbmsgJnF1b3Q7JEAmcXVvdDs7ZmkiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8Y21kfFBQQzYwM2dudSIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWxpbmtlcnByZWZpeCUgJChUT09MX1BBVEgpY2NwcGMgLXIgLW5vc3RkbGliIC1XbCwtWCAlVG9vbEZsYWdzJSAtbyAlT3V0RmlsZSUgJU9iamVjdHMlICQoTElCUEFUSCkgJChMSUJTKSAkKEFEREVEX0xJQlBBVEgpICQoQURERURfTElCUykgICZhbXA7JmFtcDsgaWYgWyAmcXVvdDskKEVYUEFORF9EQkcpJnF1b3Q7ID0gJnF1b3Q7MSZxdW90OyBdOyB0aGVuIHBsaW5rICZxdW90OyRAJnF1b3Q7O2ZpIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfGRiZ0ZsYWdzfFBQQzMyZGlhYiIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxkYmdGbGFnc3xQUEMzMmdudSIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxkYmdGbGFnc3xQUEM2MDNkaWFiIiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfGRiZ0ZsYWdzfFBQQzYwM2dudSIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxkZXJpdmVkU2lnc3xQUEMzMmRpYWIiIHZhbHVlPSIqLm8iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8ZGVyaXZlZFNpZ3N8UFBDMzJnbnUiIHZhbHVlPSIqLm8iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8ZGVyaXZlZFNpZ3N8UFBDNjAzZGlhYiIgdmFsdWU9IioubyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxkZXJpdmVkU2lnc3xQUEM2MDNnbnUiIHZhbHVlPSIqLm8iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8ZmxhZ3N8UFBDMzJkaWFiIiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfGZsYWdzfFBQQzMyZ251IiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfGZsYWdzfFBQQzYwM2RpYWIiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8ZmxhZ3N8UFBDNjAzZ251IiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfG5vbkRiZ0ZsYWdzfFBQQzMyZGlhYiIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxub25EYmdGbGFnc3xQUEMzMmdudSIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxub25EYmdGbGFnc3xQUEM2MDNkaWFiIiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfG5vbkRiZ0ZsYWdzfFBQQzYwM2dudSIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxib29sZWFuQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8b2JqZWN0IiB2YWx1ZT0iZmFsc2UiLz4NCisgICAgICAgICAgICA8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfHBhc3NBYmxlIiB2YWx1ZT0idHJ1ZSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxzaWdzIiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xjbWQiIHZhbHVlPSIlbWFrZXByZWZpeCUgbWFrZSAtLW5vLXByaW50LWRpcmVjdG9yeSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98ZGVmYXVsdFNwZWMiIHZhbHVlPSJQUEM2MDNnbnUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfHJlZGlyRGlyfFBQQzMyZGlhYiIgdmFsdWU9IlBQQzMyZGlhYiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98cmVkaXJEaXJ8UFBDMzJnbnUiIHZhbHVlPSJQUEMzMmdudSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98cmVkaXJEaXJ8UFBDNjAzZGlhYiIgdmFsdWU9IlBQQzYwM2RpYWIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfHJlZGlyRGlyfFBQQzYwM2dudSIgdmFsdWU9IlBQQzYwM2dudSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98cmVkaXJSb290IiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPGxpc3RBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98c3BlY3MiPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSJQUEMzMmRpYWIiLz4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iUFBDMzJnbnUiLz4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iUFBDNjAzZGlhYiIvPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSJQUEM2MDNnbnUiLz4NCisgICAgICAgICAgICA8L2xpc3RBdHRyaWJ1dGU+DQorICAgICAgICAgICAgPGludEF0dHJpYnV0ZSBrZXk9IkJ1aWxkU3VwcG9ydEVuYWJsZWQiIHZhbHVlPSIxIi8+DQorICAgICAgICAgICAgPGxpc3RBdHRyaWJ1dGUga2V5PSJCdWlsZFN1cHBvcnRGb3JCdWlsZFNwZWNzIj4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iUFBDNjAzZ251Ii8+DQorICAgICAgICAgICAgPC9saXN0QXR0cmlidXRlPg0KKyAgICAgICAgICAgIDxib29sZWFuQXR0cmlidXRlIGtleT0iQnVpbGRUYXJnZXRDZW50cmljIiB2YWx1ZT0idHJ1ZSIvPg0KKyAgICAgICAgPC9tYXBBdHRyaWJ1dGU+DQorICAgIDwvYXR0cmlidXRlcz4NCisgICAgPGJ1aWxkdGFyZ2V0cz4NCisgICAgICAgIDxidWlsZHRhcmdldCBidWlsZHRvb2w9IkxpbmtlciIgbmFtZT0iU2ltcGxlVGVtcGxhdGUiIHBhc3NlZD0iZmFsc2UiIHRhcmdldG5hbWU9IlNpbXBsZVRlbXBsYXRlIj4NCisgICAgICAgICAgICA8Y29udGVudHM+DQorICAgICAgICAgICAgICAgIDxidWlsZHRhcmdldHJlZmVyZW5jZSBuYW1lPSIvVmlzaW9uU2FtcGxlMjAxMi9TaW1wbGVUZW1wbGF0ZV9wYXJ0aWFsSW1hZ2UiLz4NCisgICAgICAgICAgICA8L2NvbnRlbnRzPg0KKyAgICAgICAgPC9idWlsZHRhcmdldD4NCisgICAgICAgIDxidWlsZHRhcmdldCBidWlsZHRvb2w9IlBhcnRpYWwgSW1hZ2UgTGlua2VyIiBuYW1lPSJTaW1wbGVUZW1wbGF0ZV9wYXJ0aWFsSW1hZ2UiIHBhc3NlZD0idHJ1ZSIgdGFyZ2V0bmFtZT0iU2ltcGxlVGVtcGxhdGVfcGFydGlhbEltYWdlIj4NCisgICAgICAgICAgICA8Y29udGVudHM+DQorICAgICAgICAgICAgICAgIDxmb2xkZXIgbmFtZT0iL1Zpc2lvblNhbXBsZTIwMTIiIHJlY3Vyc2l2ZT0idHJ1ZSIvPg0KKyAgICAgICAgICAgIDwvY29udGVudHM+DQorICAgICAgICA8L2J1aWxkdGFyZ2V0Pg0KKyAgICA8L2J1aWxkdGFyZ2V0cz4NCis8L3dyeG1sPg0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9WaXNpb25TYW1wbGUyMDEyL1Zpc2lvbkltYWdlcy8xMEZlZXQuanBnIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvdnh3b3Jrcy02LjMvdGFyZ2V0L3NyYy9kZW1vL1Zpc2lvblNhbXBsZTIwMTIvVmlzaW9uSW1hZ2VzLzEwRmVldC5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjdiMjU3NgotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9WaXNpb25TYW1wbGUyMDEyL1Zpc2lvbkltYWdlcy8xMEZlZXQuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9WaXNpb25TYW1wbGUyMDEyL1Zpc2lvbkltYWdlcy8xMGZ0Mi5qcGcgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vVmlzaW9uU2FtcGxlMjAxMi9WaXNpb25JbWFnZXMvMTBmdDIuanBnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1YzM1ZWQKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vVmlzaW9uU2FtcGxlMjAxMi9WaXNpb25JbWFnZXMvMTBmdDIuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9WaXNpb25TYW1wbGUyMDEyL1Zpc2lvbkltYWdlcy8yMEZlZXQuanBnIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvdnh3b3Jrcy02LjMvdGFyZ2V0L3NyYy9kZW1vL1Zpc2lvblNhbXBsZTIwMTIvVmlzaW9uSW1hZ2VzLzIwRmVldC5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2VlNzQwZgotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9WaXNpb25TYW1wbGUyMDEyL1Zpc2lvbkltYWdlcy8yMEZlZXQuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9WaXNpb25TYW1wbGUyMDEyL1Zpc2lvbkltYWdlcy8yMEZ0Mi5qcGcgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vVmlzaW9uU2FtcGxlMjAxMi9WaXNpb25JbWFnZXMvMjBGdDIuanBnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmMzQzZjMKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vVmlzaW9uU2FtcGxlMjAxMi9WaXNpb25JbWFnZXMvMjBGdDIuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9WaXNpb25TYW1wbGUyMDEyL1Zpc2lvbkltYWdlcy8zMEZlZXQuanBnIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvdnh3b3Jrcy02LjMvdGFyZ2V0L3NyYy9kZW1vL1Zpc2lvblNhbXBsZTIwMTIvVmlzaW9uSW1hZ2VzLzMwRmVldC5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGY1M2RlOQotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9WaXNpb25TYW1wbGUyMDEyL1Zpc2lvbkltYWdlcy8zMEZlZXQuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9WaXNpb25TYW1wbGUyMDEyL1Zpc2lvbkltYWdlcy8zMEZ0Mi5qcGcgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vVmlzaW9uU2FtcGxlMjAxMi9WaXNpb25JbWFnZXMvMzBGdDIuanBnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwODE4NDgKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vVmlzaW9uU2FtcGxlMjAxMi9WaXNpb25JbWFnZXMvMzBGdDIuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9WaXNpb25TYW1wbGUyMDEyL1Zpc2lvbkltYWdlcy80MEZlZXQuanBnIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvdnh3b3Jrcy02LjMvdGFyZ2V0L3NyYy9kZW1vL1Zpc2lvblNhbXBsZTIwMTIvVmlzaW9uSW1hZ2VzLzQwRmVldC5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDFkMTA1NAotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9WaXNpb25TYW1wbGUyMDEyL1Zpc2lvbkltYWdlcy80MEZlZXQuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9WaXNpb25TYW1wbGUyMDEyL1Zpc2lvbkltYWdlcy80MEZ0Mi5qcGcgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vVmlzaW9uU2FtcGxlMjAxMi9WaXNpb25JbWFnZXMvNDBGdDIuanBnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0Yzk0NWUKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vVmlzaW9uU2FtcGxlMjAxMi9WaXNpb25JbWFnZXMvNDBGdDIuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9WaXNpb25TYW1wbGUyMDEyL1Zpc2lvbkltYWdlcy80NmZlZXQuanBnIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvdnh3b3Jrcy02LjMvdGFyZ2V0L3NyYy9kZW1vL1Zpc2lvblNhbXBsZTIwMTIvVmlzaW9uSW1hZ2VzLzQ2ZmVldC5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQzYThjYQotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9WaXNpb25TYW1wbGUyMDEyL1Zpc2lvbkltYWdlcy80NmZlZXQuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9WaXNpb25TYW1wbGUyMDEyL1Zpc2lvbkltYWdlcy9GaW5kVGFyZ2V0cy52YXNjciBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9WaXNpb25TYW1wbGUyMDEyL1Zpc2lvbkltYWdlcy9GaW5kVGFyZ2V0cy52YXNjcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZGVkZWY4Ci0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvdnh3b3Jrcy02LjMvdGFyZ2V0L3NyYy9kZW1vL1Zpc2lvblNhbXBsZTIwMTIvVmlzaW9uSW1hZ2VzL0ZpbmRUYXJnZXRzLnZhc2NyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9WaXNpb25TYW1wbGUyMDEyL1Zpc2lvbkltYWdlcy9WaXNpb25Eb2N1bWVudGF0aW9uLnBkZiBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9WaXNpb25TYW1wbGUyMDEyL1Zpc2lvbkltYWdlcy9WaXNpb25Eb2N1bWVudGF0aW9uLnBkZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NjJlYzM1Ci0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvdnh3b3Jrcy02LjMvdGFyZ2V0L3NyYy9kZW1vL1Zpc2lvblNhbXBsZTIwMTIvVmlzaW9uSW1hZ2VzL1Zpc2lvbkRvY3VtZW50YXRpb24ucGRmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9WaXNpb25TYW1wbGUyMDEyL1Zpc2lvblNhbXBsZTIwMTIuY3BwIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvdnh3b3Jrcy02LjMvdGFyZ2V0L3NyYy9kZW1vL1Zpc2lvblNhbXBsZTIwMTIvVmlzaW9uU2FtcGxlMjAxMi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjM2NmYyYQotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9WaXNpb25TYW1wbGUyMDEyL1Zpc2lvblNhbXBsZTIwMTIuY3BwCkBAIC0wLDAgKzEsOTggQEAKKyNpbmNsdWRlICJXUElMaWIuaCINCisjaW5jbHVkZSAiVmlzaW9uL1JHQkltYWdlLmgiDQorI2luY2x1ZGUgIlZpc2lvbi9CaW5hcnlJbWFnZS5oIg0KKyANCisvKioNCisgKiBTYW1wbGUgcHJvZ3JhbSB0byB1c2UgTklWaXNpb24gdG8gZmluZCByZWN0YW5nbGVzIGluIHRoZSBzY2VuZSB0aGF0IGFyZSBpbGx1bWluYXRlZA0KKyAqIGJ5IGEgcmVkIHJpbmcgbGlnaHQgKHNpbWlsYXIgdG8gdGhlIG1vZGVsIGZyb20gRklSU1RDaG9pY2UpLiBUaGUgY2FtZXJhIHNlbnNpdGl2aXR5DQorICogaXMgc2V0IHZlcnkgbG93IHNvIGFzIHRvIG9ubHkgc2hvdyBsaWdodCBzb3VyY2VzIGFuZCByZW1vdmUgYW55IGRpc3RyYWN0aW5nIHBhcnRzDQorICogb2YgdGhlIGltYWdlLg0KKyAqIA0KKyAqIFRoZSBDcml0ZXJpYUNvbGxlY3Rpb24gaXMgdGhlIHNldCBvZiBjcml0ZXJpYSB0aGF0IGlzIHVzZWQgdG8gZmlsdGVyIHRoZSBzZXQgb2YNCisgKiByZWN0YW5nbGVzIHRoYXQgYXJlIGRldGVjdGVkLiBJbiB0aGlzIGV4YW1wbGUgd2UncmUgbG9va2luZyBmb3IgcmVjdGFuZ2xlcyB3aXRoDQorICogYSBtaW5pbXVtIHdpZHRoIG9mIDMwIHBpeGVscyBhbmQgbWF4aW11bSBvZiA0MDAgcGl4ZWxzLiBTaW1pbGFyIGZvciBoZWlnaHQgKHNlZQ0KKyAqIHRoZSBhZGRDcml0ZXJpYSgpIG1ldGhvZHMgYmVsb3cuDQorICogDQorICogVGhlIGFsZ29yaXRobSBmaXJzdCBkb2VzIGEgY29sb3IgdGhyZXNob2xkIG9wZXJhdGlvbiB0aGF0IG9ubHkgdGFrZXMgb2JqZWN0cyBpbiB0aGUNCisgKiBzY2VuZSB0aGF0IGhhdmUgYSBzaWduaWZpY2FudCByZWQgY29sb3IgY29tcG9uZW50LiBUaGVuIHJlbW92ZXMgc21hbGwgb2JqZWN0cyB0aGF0DQorICogbWlnaHQgYmUgY2F1c2VkIGJ5IHJlZCByZWZsZWN0aW9uIHNjYXR0ZXJlZCBmcm9tIG90aGVyIHBhcnRzIG9mIHRoZSBzY2VuZS4gVGhlbg0KKyAqIGEgY29udmV4IGh1bGwgb3BlcmF0aW9uIGZpbGxzIGFsbCB0aGUgcmVjdGFuZ2xlIG91dGxpbmVzIChldmVuIHRoZSBwYXJ0aWFsbHkgb2NjbHVkZWQNCisgKiBvbmVzKS4gRmluYWxseSBhIHBhcnRpY2xlIGZpbHRlciBsb29rcyBmb3IgYWxsIHRoZSBzaGFwZXMgdGhhdCBtZWV0IHRoZSByZXF1aXJlbWVudHMNCisgKiBzcGVjaWZpZWQgaW4gdGhlIGNyaXRlcmlhIGNvbGxlY3Rpb24uDQorICoNCisgKiBMb29rIGluIHRoZSBWaXNpb25JbWFnZXMgZGlyZWN0b3J5IGluc2lkZSB0aGUgcHJvamVjdCB0aGF0IGlzIGNyZWF0ZWQgZm9yIHRoZSBzYW1wbGUNCisgKiBpbWFnZXMgYXMgd2VsbCBhcyB0aGUgTkkgVmlzaW9uIEFzc2lzdGFudCBmaWxlIHRoYXQgY29udGFpbnMgdGhlIHZpc2lvbiBjb21tYW5kDQorICogY2hhaW4gKG9wZW4gaXQgd2l0aCB0aGUgVmlzaW9uIEFzc2lzdGFudCkNCisgKi8NCitjbGFzcyBWaXNpb25TYW1wbGUyMDEyIDogcHVibGljIFNpbXBsZVJvYm90DQorew0KKwlSb2JvdERyaXZlIG15Um9ib3Q7IC8vIHJvYm90IGRyaXZlIHN5c3RlbQ0KKwlKb3lzdGljayBzdGljazsgLy8gb25seSBqb3lzdGljaw0KKwlBeGlzQ2FtZXJhICpjYW1lcmE7DQorDQorcHVibGljOg0KKwlWaXNpb25TYW1wbGUyMDEyKHZvaWQpOg0KKwkJbXlSb2JvdCgxLCAyKSwJLy8gdGhlc2UgbXVzdCBiZSBpbml0aWFsaXplZCBpbiB0aGUgc2FtZSBvcmRlcg0KKwkJc3RpY2soMSkJCS8vIGFzIHRoZXkgYXJlIGRlY2xhcmVkIGFib3ZlLg0KKwl7DQorCQlteVJvYm90LlNldEV4cGlyYXRpb24oMC4xKTsNCisJCW15Um9ib3QuU2V0U2FmZXR5RW5hYmxlZChmYWxzZSk7DQorCX0NCisNCisJLyoqDQorCSAqIERyaXZlIGxlZnQgJiByaWdodCBtb3RvcnMgZm9yIDIgc2Vjb25kcyB0aGVuIHN0b3ANCisJICovDQorCXZvaWQgQXV0b25vbW91cyh2b2lkKQ0KKwl7DQorCQkNCisJCVRocmVzaG9sZCB0aHJlc2hvbGQoMjUsIDI1NSwgMCwgNDUsIDAsIDQ3KTsNCisJCVBhcnRpY2xlRmlsdGVyQ3JpdGVyaWEyIGNyaXRlcmlhW10gPSB7DQorCQkJCQkJCQkJCQl7SU1BUV9NVF9CT1VORElOR19SRUNUX1dJRFRILCAzMCwgNDAwLCBmYWxzZSwgZmFsc2V9LA0KKwkJCQkJCQkJCQkJe0lNQVFfTVRfQk9VTkRJTkdfUkVDVF9IRUlHSFQsIDQwLCA0MDAsIGZhbHNlLCBmYWxzZX0NCisJCX07DQorCQl3aGlsZSAoSXNBdXRvbm9tb3VzKCkgJiYgSXNFbmFibGVkKCkpIHsNCisgICAgICAgICAgICAvKioNCisgICAgICAgICAgICAgKiBEbyB0aGUgaW1hZ2UgY2FwdHVyZSB3aXRoIHRoZSBjYW1lcmEgYW5kIGFwcGx5IHRoZSBhbGdvcml0aG0gZGVzY3JpYmVkIGFib3ZlLiBUaGlzDQorICAgICAgICAgICAgICogc2FtcGxlIHdpbGwgZWl0aGVyIGdldCBpbWFnZXMgZnJvbSB0aGUgY2FtZXJhIG9yIGZyb20gYW4gaW1hZ2UgZmlsZSBzdG9yZWQgaW4gdGhlIHRvcA0KKyAgICAgICAgICAgICAqIGxldmVsIGRpcmVjdG9yeSBpbiB0aGUgZmxhc2ggbWVtb3J5IG9uIHRoZSBjUklPLiBUaGUgZmlsZSBuYW1lIGluIHRoaXMgY2FzZSBpcyAiMTBmdDIuanBnIg0KKyAgICAgICAgICAgICAqIA0KKyAgICAgICAgICAgICAqLw0KKwkJCUNvbG9ySW1hZ2UgKmltYWdlOw0KKwkJCWltYWdlID0gbmV3IFJHQkltYWdlKCIvMTBmdDIuanBnIik7CQkvLyBnZXQgdGhlIHNhbXBsZSBpbWFnZSBmcm9tIHRoZSBjUklPIGZsYXNoDQorCQkJQmluYXJ5SW1hZ2UgKnRocmVzaG9sZEltYWdlID0gaW1hZ2UtPlRocmVzaG9sZFJHQih0aHJlc2hvbGQpOwkvLyBnZXQganVzdCB0aGUgcmVkIHRhcmdldCBwaXhlbHMNCisJCQlCaW5hcnlJbWFnZSAqYmlnT2JqZWN0c0ltYWdlID0gdGhyZXNob2xkSW1hZ2UtPlJlbW92ZVNtYWxsT2JqZWN0cyhmYWxzZSwgMik7ICAvLyByZW1vdmUgc21hbGwgb2JqZWN0cyAobm9pc2UpDQorCQkJQmluYXJ5SW1hZ2UgKmNvbnZleEh1bGxJbWFnZSA9IGJpZ09iamVjdHNJbWFnZS0+Q29udmV4SHVsbChmYWxzZSk7ICAvLyBmaWxsIGluIHBhcnRpYWwgYW5kIGZ1bGwgcmVjdGFuZ2xlcw0KKwkJCUJpbmFyeUltYWdlICpmaWx0ZXJlZEltYWdlID0gY29udmV4SHVsbEltYWdlLT5QYXJ0aWNsZUZpbHRlcihjcml0ZXJpYSwgMik7ICAvLyBmaW5kIHRoZSByZWN0YW5nbGVzDQorCQkJdmVjdG9yPFBhcnRpY2xlQW5hbHlzaXNSZXBvcnQ+ICpyZXBvcnRzID0gZmlsdGVyZWRJbWFnZS0+R2V0T3JkZXJlZFBhcnRpY2xlQW5hbHlzaXNSZXBvcnRzKCk7ICAvLyBnZXQgdGhlIHJlc3VsdHMNCisJCQkNCisJCQlmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVwb3J0cy0+c2l6ZSgpOyBpKyspIHsNCisJCQkJUGFydGljbGVBbmFseXNpc1JlcG9ydCAqciA9ICYocmVwb3J0cy0+YXQoaSkpOw0KKwkJCQlwcmludGYoInBhcnRpY2xlOiAlZCAgY2VudGVyX21hc3NfeDogJWRcbiIsIGksIHItPmNlbnRlcl9tYXNzX3gpOw0KKwkJCX0NCisJCQlwcmludGYoIlxuIik7DQorCQkJDQorCQkJLy8gYmUgc3VyZSB0byBkZWxldGUgaW1hZ2VzIGFmdGVyIHVzaW5nIHRoZW0NCisJCQlkZWxldGUgcmVwb3J0czsNCisJCQlkZWxldGUgZmlsdGVyZWRJbWFnZTsNCisJCQlkZWxldGUgY29udmV4SHVsbEltYWdlOw0KKwkJCWRlbGV0ZSBiaWdPYmplY3RzSW1hZ2U7DQorCQkJZGVsZXRlIHRocmVzaG9sZEltYWdlOw0KKwkJCWRlbGV0ZSBpbWFnZTsNCisJCX0NCisJfQ0KKw0KKwkvKioNCisJICogUnVucyB0aGUgbW90b3JzIHdpdGggYXJjYWRlIHN0ZWVyaW5nLiANCisJICovDQorCXZvaWQgT3BlcmF0b3JDb250cm9sKHZvaWQpDQorCXsNCisJCW15Um9ib3QuU2V0U2FmZXR5RW5hYmxlZCh0cnVlKTsNCisJCXdoaWxlIChJc09wZXJhdG9yQ29udHJvbCgpKQ0KKwkJew0KKwkJCVdhaXQoMC4wMDUpOwkJCQkvLyB3YWl0IGZvciBhIG1vdG9yIHVwZGF0ZSB0aW1lDQorCQl9DQorCX0NCit9Ow0KKw0KK1NUQVJUX1JPQk9UX0NMQVNTKFZpc2lvblNhbXBsZTIwMTIpOw0KKw0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9WaXNpb25TYW1wbGUyMDEyL3NhbXBsZS5wcm9wZXJ0aWVzIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvdnh3b3Jrcy02LjMvdGFyZ2V0L3NyYy9kZW1vL1Zpc2lvblNhbXBsZTIwMTIvc2FtcGxlLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWZjODk1ZQotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9WaXNpb25TYW1wbGUyMDEyL3NhbXBsZS5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMiBAQAorcHJvamVjdC50eXBlPURvd25sb2FkYWJsZUtlcm5lbE1vZHVsZVByb2plY3QNCitwbGF0Zm9ybS5pZD1WeFdvcmtzDQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvdnh3b3Jrcy02LjMvdGFyZ2V0L3NyYy9kZW1vL1Zpc2lvblNhbXBsZTIwMTIvc2FtcGxlLnR4dCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9WaXNpb25TYW1wbGUyMDEyL3NhbXBsZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTlkMGE4OAotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9WaXNpb25TYW1wbGUyMDEyL3NhbXBsZS50eHQKQEAgLTAsMCArMSw3IEBACitGUkMgMjAxMiBWaXNpb24gU2FtcGxlIFByb2dyYW0NCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK1RoaXMgcHJvamVjdCBpcyBhIGNhbWVyYSB2aXNpb24gc2FtcGxlIHRoYXQgZGV0ZWN0cyB0aGUgNCByZWN0YW5nbGVzIHRoYXQgYXJlIHRoZSAyMDEyIEZSQyBnYW1lDQordmlzaW9uIHRhcmdldHMuIExvb2sgYXQgdGhlIGNvbW1lbnRzIGluIHRoZSBjb2RlIGFuZCB0aGUgVmlzaW9uIHdoaXRlIHBhcGVyIHB1Ymxpc2hlZCBpbiB0aGUNCitkb2N1bWVudHMgc2VjdGlvbiBvZiB0aGUgV1BJTGliIHByb2plY3Qgb24gZmlyc3Rmb3JnZS53cGkuZWR1LiBMb29rIGluIHRoZSBWaXNpb25JbWFnZXMgZGlyZWN0b3J5DQoraW5zaWRlIHRoZSBwcm9qZWN0IHRoYXQgaXMgY3JlYXRlZCBmb3IgdGhlIHNhbXBsZSBpbWFnZXMgYXMgd2VsbCBhcyB0aGUgTkkgVmlzaW9uIEFzc2lzdGFudCBmaWxlDQordGhhdCBjb250YWlucyB0aGUgdmlzaW9uIGNvbW1hbmQgY2hhaW4gKG9wZW4gaXQgd2l0aCB0aGUgVmlzaW9uIEFzc2lzdGFudCkNCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vVmlzaW9uU2FtcGxlMjAxMy8uY3Byb2plY3QgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vVmlzaW9uU2FtcGxlMjAxMy8uY3Byb2plY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzYxMWFlMgotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9WaXNpb25TYW1wbGUyMDEzLy5jcHJvamVjdApAQCAtMCwwICsxLDMxIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ibm8iPz4NCis8P2ZpbGVWZXJzaW9uIDQuMC4wPz4NCisNCis8Y3Byb2plY3Q+DQorCTxzdG9yYWdlTW9kdWxlIG1vZHVsZUlkPSJvcmcuZWNsaXBzZS5jZHQuY29yZS5zZXR0aW5ncyI+DQorCQk8Y2NvbmZpZ3VyYXRpb24gaWQ9Im9yZy5lY2xpcHNlLmNkdC5jb3JlLmRlZmF1bHQuY29uZmlnLjI4Mzk2NzEwNiI+DQorCQkJPHN0b3JhZ2VNb2R1bGUgYnVpbGRTeXN0ZW1JZD0ib3JnLmVjbGlwc2UuY2R0LmNvcmUuZGVmYXVsdENvbmZpZ0RhdGFQcm92aWRlciIgaWQ9Im9yZy5lY2xpcHNlLmNkdC5jb3JlLmRlZmF1bHQuY29uZmlnLjI4Mzk2NzEwNiIgbW9kdWxlSWQ9Im9yZy5lY2xpcHNlLmNkdC5jb3JlLnNldHRpbmdzIiBuYW1lPSJDb25maWd1cmF0aW9uIj4NCisJCQkJPGV4dGVybmFsU2V0dGluZ3MvPg0KKwkJCQk8ZXh0ZW5zaW9ucz4NCisJCQkJCTxleHRlbnNpb24gaWQ9ImNvbS53aW5kcml2ZXIuaWRlLmNvcmUuV1JTY2FubmVySW5mb1Byb3ZpZGVyIiBwb2ludD0ib3JnLmVjbGlwc2UuY2R0LmNvcmUuU2Nhbm5lckluZm9Qcm92aWRlciIvPg0KKwkJCQkJPGV4dGVuc2lvbiBpZD0iY29tLndpbmRyaXZlci5pZGUuY29yZS5XUkVsZlBhcnNlclZ4V29ya3MiIHBvaW50PSJvcmcuZWNsaXBzZS5jZHQuY29yZS5CaW5hcnlQYXJzZXIiLz4NCisJCQkJCTxleHRlbnNpb24gaWQ9Im9yZy5lY2xpcHNlLmNkdC5jb3JlLkdOVV9FTEYiIHBvaW50PSJvcmcuZWNsaXBzZS5jZHQuY29yZS5CaW5hcnlQYXJzZXIiLz4NCisJCQkJPC9leHRlbnNpb25zPg0KKwkJCTwvc3RvcmFnZU1vZHVsZT4NCisJCQk8c3RvcmFnZU1vZHVsZSBtb2R1bGVJZD0ib3JnLmVjbGlwc2UuY2R0LmNvcmUuZXh0ZXJuYWxTZXR0aW5ncyIvPg0KKwkJCTxzdG9yYWdlTW9kdWxlIG1vZHVsZUlkPSJvcmcuZWNsaXBzZS5jZHQuY29yZS5wYXRoZW50cnkiPg0KKwkJCQk8cGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0iIi8+DQorCQkJCTxwYXRoZW50cnkga2luZD0ib3V0IiBwYXRoPSIiLz4NCisJCQkJPHBhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9ImNvbS53aW5kcml2ZXIuaWRlLmNvcmUuV1JfQ09OVEFJTkVSIi8+DQorCQkJCTxwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJjb20ud2luZHJpdmVyLmlkZS5jb3JlLmJ1aWxkLm1vZGVsLldSX1VTRVJERUZJTkVEX0NPTlRBSU5FUiIvPg0KKwkJCTwvc3RvcmFnZU1vZHVsZT4NCisJCQk8c3RvcmFnZU1vZHVsZSBtb2R1bGVJZD0ic2Nhbm5lckNvbmZpZ3VyYXRpb24iLz4NCisJCQk8c3RvcmFnZU1vZHVsZSBtb2R1bGVJZD0idXNlcmRlZmluZWRDb250YWluZXIiPg0KKwkJCQk8aW5kZXhBbGxGaWxlcyB2YWx1ZT0iZmFsc2UiLz4NCisJCQkJPGluaXRpYWxpemVkIHZhbHVlPSJ0cnVlIi8+DQorCQkJPC9zdG9yYWdlTW9kdWxlPg0KKwkJCTxzdG9yYWdlTW9kdWxlIG1vZHVsZUlkPSJvcmcuZWNsaXBzZS5jZHQuY29yZS5sYW5ndWFnZS5tYXBwaW5nIi8+DQorCQkJPHN0b3JhZ2VNb2R1bGUgbW9kdWxlSWQ9Im9yZy5lY2xpcHNlLmNkdC5pbnRlcm5hbC51aS50ZXh0LmNvbW1lbnRPd25lclByb2plY3RNYXBwaW5ncyIvPg0KKwkJPC9jY29uZmlndXJhdGlvbj4NCisJPC9zdG9yYWdlTW9kdWxlPg0KKzwvY3Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvdnh3b3Jrcy02LjMvdGFyZ2V0L3NyYy9kZW1vL1Zpc2lvblNhbXBsZTIwMTMvLnByb2plY3QgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vVmlzaW9uU2FtcGxlMjAxMy8ucHJvamVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYmMxNDQ1Ci0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvdnh3b3Jrcy02LjMvdGFyZ2V0L3NyYy9kZW1vL1Zpc2lvblNhbXBsZTIwMTMvLnByb2plY3QKQEAgLTAsMCArMSwyMCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCis8cHJvamVjdERlc2NyaXB0aW9uPg0KKwk8bmFtZT5WaXNpb25TYW1wbGUyMDEzPC9uYW1lPg0KKwk8Y29tbWVudD48L2NvbW1lbnQ+DQorCTxwcm9qZWN0cz4NCisJPC9wcm9qZWN0cz4NCisJPGJ1aWxkU3BlYz4NCisJCTxidWlsZENvbW1hbmQ+DQorCQkJPG5hbWU+Y29tLndpbmRyaXZlci5pZGUuY29yZS53cmJ1aWxkZXI8L25hbWU+DQorCQkJPGFyZ3VtZW50cz4NCisJCQk8L2FyZ3VtZW50cz4NCisJCTwvYnVpbGRDb21tYW5kPg0KKwk8L2J1aWxkU3BlYz4NCisJPG5hdHVyZXM+DQorCQk8bmF0dXJlPmNvbS53aW5kcml2ZXIuaWRlLmNvcmUud3JuYXR1cmU8L25hdHVyZT4NCisJCTxuYXR1cmU+Y29tLndpbmRyaXZlci5pZGUuY29yZS53cmNvcmVuYXR1cmU8L25hdHVyZT4NCisJCTxuYXR1cmU+b3JnLmVjbGlwc2UuY2R0LmNvcmUuY25hdHVyZTwvbmF0dXJlPg0KKwkJPG5hdHVyZT5vcmcuZWNsaXBzZS5jZHQuY29yZS5jY25hdHVyZTwvbmF0dXJlPg0KKwk8L25hdHVyZXM+DQorPC9wcm9qZWN0RGVzY3JpcHRpb24+DQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvdnh3b3Jrcy02LjMvdGFyZ2V0L3NyYy9kZW1vL1Zpc2lvblNhbXBsZTIwMTMvLndybWFrZWZpbGUgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vVmlzaW9uU2FtcGxlMjAxMy8ud3JtYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMWRkN2Y4Ci0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvdnh3b3Jrcy02LjMvdGFyZ2V0L3NyYy9kZW1vL1Zpc2lvblNhbXBsZTIwMTMvLndybWFrZWZpbGUKQEAgLTAsMCArMSw0OCBAQAorIyBUaGUgZmlsZSAiLndybWFrZWZpbGUiIGlzIHRoZSB0ZW1wbGF0ZSB1c2VkIGJ5IHRoZSBXaW5kIFJpdmVyIFdvcmtiZW5jaCB0bw0KKyMgZ2VuZXJhdGUgdGhlIG1ha2VmaWxlcyBvZiB0aGlzIHByb2plY3QuIEFkZCB1c2VyLXNwZWNpZmljIGJ1aWxkIHRhcmdldHMgYW5kDQorIyBtYWtlIHJ1bGVzIG9ubHkoISkgaW4gdGhpcyBwcm9qZWN0J3MgIi53cm1ha2VmaWxlIiBmaWxlLiBUaGVzZSB3aWxsIHRoZW4gYmUNCisjIGF1dG9tYXRpY2FsbHkgZHVtcGVkIGludG8gdGhlIG1ha2VmaWxlcy4NCisNCitXSU5EX0hPTUUgOj0gJChzdWJzdCBcLC8sJChXSU5EX0hPTUUpKQ0KK1dJTkRfQkFTRSA6PSAkKHN1YnN0IFwsLywkKFdJTkRfQkFTRSkpDQorV0lORF9VU1IgOj0gJChzdWJzdCBcLC8sJChXSU5EX1VTUikpDQorDQorYWxsIDogcHJlX2J1aWxkIG1haW5fYWxsIHBvc3RfYnVpbGQNCisNCitfY2xlYW4gOjoNCisJQGVjaG8gIm1ha2U6IHJlbW92aW5nIHRhcmdldHMgYW5kIG9iamVjdHMgb2YgYHB3ZGAiDQorDQorJUlERV9HRU5FUkFURUQlDQorDQorLWluY2x1ZGUgJChQUkpfUk9PVF9ESVIpLyoubWFrZWZpbGUNCisNCistaW5jbHVkZSAqLm1ha2VmaWxlDQorDQorbWFpbl9hbGwgOiBleHRlcm5hbF9idWlsZCAkKFBST0pFQ1RfVEFSR0VUUykNCisJQGVjaG8gIm1ha2U6IGJ1aWx0IHRhcmdldHMgb2YgYHB3ZGAiDQorDQorIyBlbnRyeSBwb2ludCBmb3IgZXh0ZW5kaW5nIHRoZSBidWlsZA0KK2V4dGVybmFsX2J1aWxkIDo6DQorCUBlY2hvICIiDQorDQorIyBtYWluIGVudHJ5IHBvaW50IGZvciBwcmUgcHJvY2Vzc2luZyBwcmlvciB0byB0aGUgYnVpbGQNCitwcmVfYnVpbGQgOjogJChQUkVfQlVJTERfU1RFUCkgZ2VuZXJhdGVfc291cmNlcw0KKwlAZWNobyAiIg0KKw0KKyMgZW50cnkgcG9pbnQgZm9yIGdlbmVyYXRpbmcgc291cmNlcyBwcmlvciB0byB0aGUgYnVpbGQNCitnZW5lcmF0ZV9zb3VyY2VzIDo6DQorCUBlY2hvICIiDQorDQorIyBtYWluIGVudHJ5IHBvaW50IGZvciBwb3N0IHByb2Nlc3NpbmcgYWZ0ZXIgdGhlIGJ1aWxkDQorcG9zdF9idWlsZCA6OiAkKFBPU1RfQlVJTERfU1RFUCkgZGVwbG95X291dHB1dA0KKwlAZWNobyAiIg0KKw0KKyMgZW50cnkgcG9pbnQgZm9yIGRlcGxveWluZyBvdXRwdXQgYWZ0ZXIgdGhlIGJ1aWxkDQorZGVwbG95X291dHB1dCA6Og0KKwlAZWNobyAiIg0KKw0KK2NsZWFuIDo6IGV4dGVybmFsX2NsZWFuICQoQ0xFQU5fU1RFUCkgX2NsZWFuDQorDQorIyBlbnRyeSBwb2ludCBmb3IgZXh0ZW5kaW5nIHRoZSBidWlsZCBjbGVhbg0KK2V4dGVybmFsX2NsZWFuIDo6DQorCUBlY2hvICIiDQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvdnh3b3Jrcy02LjMvdGFyZ2V0L3NyYy9kZW1vL1Zpc2lvblNhbXBsZTIwMTMvLndycHJvamVjdCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9WaXNpb25TYW1wbGUyMDEzLy53cnByb2plY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDY4NjBlNAotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9WaXNpb25TYW1wbGUyMDEzLy53cnByb2plY3QKQEAgLTAsMCArMSwyNTggQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJubyI/Pg0KKzx3cnhtbD4NCisgICAgPHByb3BlcnRpZXMgcGxhdGZvcm09IlZ4V29ya3MiIHBsYXRmb3JtX25hbWU9InZ4d29ya3MtNi4zIiByb290PSIxIiB0eXBlPSJEb3dubG9hZGFibGVLZXJuZWxNb2R1bGVQcm9qZWN0Ii8+DQorICAgIDxhdHRyaWJ1dGVzPg0KKyAgICAgICAgPG1hcEF0dHJpYnV0ZT4NCisgICAgICAgICAgICA8bGlzdEF0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xHbG9iYWxNYWNyb3MiPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSJQUk9KRUNUX1RZUEUiLz4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iREVGSU5FUyIvPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSJFWFBBTkRfREJHIi8+DQorICAgICAgICAgICAgPC9saXN0QXR0cmlidXRlPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98R2xvYmFsTWFjcm98REVGSU5FUyIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98R2xvYmFsTWFjcm98RVhQQU5EX0RCRyIgdmFsdWU9IjAiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfEdsb2JhbE1hY3JvfFBST0pFQ1RfVFlQRSIgdmFsdWU9IkRLTSIvPg0KKyAgICAgICAgICAgIDxsaXN0QXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfEluY2x8UFBDMzJkaWFiIj4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2gvV1BJTGliIi8+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9Ii1JJChXSU5EX0JBU0UpL3RhcmdldC9oIi8+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9Ii1JJChXSU5EX0JBU0UpL3RhcmdldC9oL3dybi9jb3JlaXAiLz4NCisgICAgICAgICAgICA8L2xpc3RBdHRyaWJ1dGU+DQorICAgICAgICAgICAgPGxpc3RBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98SW5jbHxQUEMzMmdudSI+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9Ii1JJChXSU5EX0JBU0UpL3RhcmdldC9oIi8+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9Ii1JJChXSU5EX0JBU0UpL3RhcmdldC9oL3dybi9jb3JlaXAiLz4NCisgICAgICAgICAgICA8L2xpc3RBdHRyaWJ1dGU+DQorICAgICAgICAgICAgPGxpc3RBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98SW5jbHxQUEM2MDNkaWFiIj4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2giLz4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2gvd3JuL2NvcmVpcCIvPg0KKyAgICAgICAgICAgIDwvbGlzdEF0dHJpYnV0ZT4NCisgICAgICAgICAgICA8bGlzdEF0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xJbmNsfFBQQzYwM2dudSI+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9Ii1JJChXSU5EX0JBU0UpL3RhcmdldC9oIi8+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9Ii1JJChXSU5EX0JBU0UpL3RhcmdldC9oL1dQSUxpYiIvPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSItSSQoV0lORF9CQVNFKS90YXJnZXQvaC93cm4vY29yZWlwIi8+DQorICAgICAgICAgICAgPC9saXN0QXR0cmlidXRlPg0KKyAgICAgICAgICAgIDxsaXN0QXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfExpYnN8UFBDMzJkaWFiIj4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iJChXSU5EX0JBU0UpL3RhcmdldC9saWIvV1BJTGliLmEiLz4NCisgICAgICAgICAgICA8L2xpc3RBdHRyaWJ1dGU+DQorICAgICAgICAgICAgPGxpc3RBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TGlic3xQUEM2MDNnbnUiPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSIkKFdJTkRfQkFTRSkvdGFyZ2V0L2xpYi9XUElMaWIuYSIvPg0KKyAgICAgICAgICAgIDwvbGlzdEF0dHJpYnV0ZT4NCisgICAgICAgICAgICA8bGlzdEF0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3MiPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSJWWF9DUFVfRkFNSUxZIi8+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9IkNQVSIvPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSJUT09MX0ZBTUlMWSIvPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSJUT09MIi8+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9IlRPT0xfUEFUSCIvPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSJDQ19BUkNIX1NQRUMiLz4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iTElCUEFUSCIvPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSJMSUJTIi8+DQorICAgICAgICAgICAgPC9saXN0QXR0cmlidXRlPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98Q0NfQVJDSF9TUEVDfHZhbHVlfFBQQzMyZGlhYiIgdmFsdWU9Ii10UFBDRkg6dnh3b3JrczYzIC1Yc3Rtdy1zbG93IC1EUFBDMzJfZnA2MHgiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfENDX0FSQ0hfU1BFQ3x2YWx1ZXxQUEMzMmdudSIgdmFsdWU9Ii1taGFyZC1mbG9hdCAtbXN0cmljdC1hbGlnbiAtbW5vLWltcGxpY2l0LWZwIC1EUFBDMzJfZnA2MHgiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfENDX0FSQ0hfU1BFQ3x2YWx1ZXxQUEM2MDNkaWFiIiB2YWx1ZT0iLXRQUEM2MDNGSDp2eHdvcmtzNjMiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfENDX0FSQ0hfU1BFQ3x2YWx1ZXxQUEM2MDNnbnUiIHZhbHVlPSItbWNwdT02MDMgLW1zdHJpY3QtYWxpZ24gLW1uby1pbXBsaWNpdC1mcCAtbWxvbmdjYWxsIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xDUFV8dmFsdWV8UFBDMzJkaWFiIiB2YWx1ZT0iUFBDMzIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfENQVXx2YWx1ZXxQUEMzMmdudSIgdmFsdWU9IlBQQzMyIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xDUFV8dmFsdWV8UFBDNjAzZGlhYiIgdmFsdWU9IlBQQzYwMyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98Q1BVfHZhbHVlfFBQQzYwM2dudSIgdmFsdWU9IlBQQzYwMyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98TElCUEFUSHx2YWx1ZXxQUEMzMmRpYWIiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfExJQlBBVEh8dmFsdWV8UFBDMzJnbnUiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfExJQlBBVEh8dmFsdWV8UFBDNjAzZGlhYiIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98TElCUEFUSHx2YWx1ZXxQUEM2MDNnbnUiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfExJQlN8dmFsdWV8UFBDMzJkaWFiIiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xMSUJTfHZhbHVlfFBQQzMyZ251IiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xMSUJTfHZhbHVlfFBQQzYwM2RpYWIiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfExJQlN8dmFsdWV8UFBDNjAzZ251IiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xUT09MX0ZBTUlMWXx2YWx1ZXxQUEMzMmRpYWIiIHZhbHVlPSJkaWFiIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xUT09MX0ZBTUlMWXx2YWx1ZXxQUEMzMmdudSIgdmFsdWU9ImdudSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98VE9PTF9GQU1JTFl8dmFsdWV8UFBDNjAzZGlhYiIgdmFsdWU9ImRpYWIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfFRPT0xfRkFNSUxZfHZhbHVlfFBQQzYwM2dudSIgdmFsdWU9ImdudSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98VE9PTF9QQVRIfHZhbHVlfFBQQzMyZGlhYiIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98VE9PTF9QQVRIfHZhbHVlfFBQQzMyZ251IiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xUT09MX1BBVEh8dmFsdWV8UFBDNjAzZGlhYiIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98VE9PTF9QQVRIfHZhbHVlfFBQQzYwM2dudSIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98VE9PTHx2YWx1ZXxQUEMzMmRpYWIiIHZhbHVlPSJkaWFiIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xUT09MfHZhbHVlfFBQQzMyZ251IiB2YWx1ZT0iZ251Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xUT09MfHZhbHVlfFBQQzYwM2RpYWIiIHZhbHVlPSJkaWFiIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xNYWNyb3xUT09MfHZhbHVlfFBQQzYwM2dudSIgdmFsdWU9ImdudSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98VlhfQ1BVX0ZBTUlMWXx2YWx1ZXxQUEMzMmRpYWIiIHZhbHVlPSJwcGMiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfFZYX0NQVV9GQU1JTFl8dmFsdWV8UFBDMzJnbnUiIHZhbHVlPSJwcGMiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfE1hY3JvfFZYX0NQVV9GQU1JTFl8dmFsdWV8UFBDNjAzZGlhYiIgdmFsdWU9InBwYyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98TWFjcm98VlhfQ1BVX0ZBTUlMWXx2YWx1ZXxQUEM2MDNnbnUiIHZhbHVlPSJwcGMiLz4NCisgICAgICAgICAgICA8bGlzdEF0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29scyI+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9IkMtQ29tcGlsZXIiLz4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iQysrLUNvbXBpbGVyIi8+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9IkxpbmtlciIvPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSJQYXJ0aWFsIEltYWdlIExpbmtlciIvPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSJMaWJyYXJpYW4iLz4NCisgICAgICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSB2YWx1ZT0iQXNzZW1ibGVyIi8+DQorICAgICAgICAgICAgPC9saXN0QXR0cmlidXRlPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxBc3NlbWJsZXJ8Y21kfFBQQzMyZGlhYiIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWFzc2VtYmxlcnByZWZpeCUgJChUT09MX1BBVEgpZGNjICVEZWJ1Z01vZGVGbGFncyUgJVRvb2xGbGFncyUgJChBRERFRF9DRkxBR1MpICVJbmNsdWRlcyUgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gJU91dEZpbGUlIC1jICVJbkZpbGUlIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxjbWR8UFBDMzJnbnUiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7OyVhc3NlbWJsZXJwcmVmaXglICQoVE9PTF9QQVRIKWNjcHBjICVEZWJ1Z01vZGVGbGFncyUgJVRvb2xGbGFncyUgJChBRERFRF9DRkxBR1MpICVJbmNsdWRlcyUgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gJU91dEZpbGUlIC1jICVJbkZpbGUlIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxjbWR8UFBDNjAzZGlhYiIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWFzc2VtYmxlcnByZWZpeCUgJChUT09MX1BBVEgpZGNjICVEZWJ1Z01vZGVGbGFncyUgJVRvb2xGbGFncyUgJChBRERFRF9DRkxBR1MpICVJbmNsdWRlcyUgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gJU91dEZpbGUlIC1jICVJbkZpbGUlIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxjbWR8UFBDNjAzZ251IiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OzslYXNzZW1ibGVycHJlZml4JSAkKFRPT0xfUEFUSCljY3BwYyAlRGVidWdNb2RlRmxhZ3MlICVUb29sRmxhZ3MlICQoQURERURfQ0ZMQUdTKSAlSW5jbHVkZXMlICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICVPdXRGaWxlJSAtYyAlSW5GaWxlJSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxBc3NlbWJsZXJ8ZGJnRmxhZ3N8UFBDMzJkaWFiIiB2YWx1ZT0iLWciLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfGRiZ0ZsYWdzfFBQQzMyZ251IiB2YWx1ZT0iLWciLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfGRiZ0ZsYWdzfFBQQzYwM2RpYWIiIHZhbHVlPSItZyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxBc3NlbWJsZXJ8ZGJnRmxhZ3N8UFBDNjAzZ251IiB2YWx1ZT0iLWciLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfGRlcml2ZWRTaWdzfFBQQzMyZGlhYiIgdmFsdWU9IioubyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxBc3NlbWJsZXJ8ZGVyaXZlZFNpZ3N8UFBDMzJnbnUiIHZhbHVlPSIqLm8iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfGRlcml2ZWRTaWdzfFBQQzYwM2RpYWIiIHZhbHVlPSIqLm8iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfGRlcml2ZWRTaWdzfFBQQzYwM2dudSIgdmFsdWU9IioubyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxBc3NlbWJsZXJ8ZmxhZ3N8UFBDMzJkaWFiIiB2YWx1ZT0iJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YcHJlcHJvY2Vzcy1hc3NlbWJseSAtWGNwcC1uby1zcGFjZSAgLVhtYWtlLWRlcGVuZGVuY3k9MHhkIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxmbGFnc3xQUEMzMmdudSIgdmFsdWU9IiQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAgIC14YXNzZW1ibGVyLXdpdGgtY3BwIC1NRCAtTVAiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfGZsYWdzfFBQQzYwM2RpYWIiIHZhbHVlPSIkKENDX0FSQ0hfU1BFQykgLVc6YzosLVhjbGliLW9wdGltLW9mZiAtWGFuc2kgLVhsb2NhbC1kYXRhLWFyZWEtc3RhdGljLW9ubHkgLVhwcmVwcm9jZXNzLWFzc2VtYmx5IC1YY3BwLW5vLXNwYWNlICAtWG1ha2UtZGVwZW5kZW5jeT0weGQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfGZsYWdzfFBQQzYwM2dudSIgdmFsdWU9IiQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAgIC14YXNzZW1ibGVyLXdpdGgtY3BwIC1NRCAtTVAiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfG5vbkRiZ0ZsYWdzfFBQQzMyZGlhYiIgdmFsdWU9Ii1YTyAtWHNpemUtb3B0Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxub25EYmdGbGFnc3xQUEMzMmdudSIgdmFsdWU9Ii1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfG5vbkRiZ0ZsYWdzfFBQQzYwM2RpYWIiIHZhbHVlPSItWE8gLVhzaXplLW9wdCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxBc3NlbWJsZXJ8bm9uRGJnRmxhZ3N8UFBDNjAzZ251IiB2YWx1ZT0iLU8yIC1mc3RyZW5ndGgtcmVkdWNlIC1mbm8tYnVpbHRpbiIvPg0KKyAgICAgICAgICAgIDxib29sZWFuQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QXNzZW1ibGVyfG9iamVjdCIgdmFsdWU9InRydWUiLz4NCisgICAgICAgICAgICA8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxwYXNzQWJsZSIgdmFsdWU9ImZhbHNlIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEFzc2VtYmxlcnxzaWdzIiB2YWx1ZT0iKi5zIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxjbWR8UFBDMzJkaWFiIiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OzslY3BwY29tcGlsZXJwcmVmaXglICQoVE9PTF9QQVRIKWRjYyAlRGVidWdNb2RlRmxhZ3MlICVUb29sRmxhZ3MlICQoQURERURfQysrRkxBR1MpICVJbmNsdWRlcyUgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gJU91dEZpbGUlIC1jICVJbkZpbGUlIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxjbWR8UFBDMzJnbnUiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7OyVjcHBjb21waWxlcnByZWZpeCUgJChUT09MX1BBVEgpY2NwcGMgJURlYnVnTW9kZUZsYWdzJSAlVG9vbEZsYWdzJSAkKEFEREVEX0MrK0ZMQUdTKSAlSW5jbHVkZXMlICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICVPdXRGaWxlJSAtYyAlSW5GaWxlJSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8Y21kfFBQQzYwM2RpYWIiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7OyVjcHBjb21waWxlcnByZWZpeCUgJChUT09MX1BBVEgpZGNjICVEZWJ1Z01vZGVGbGFncyUgJVRvb2xGbGFncyUgJChBRERFRF9DKytGTEFHUykgJUluY2x1ZGVzJSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAlT3V0RmlsZSUgLWMgJUluRmlsZSUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfGNtZHxQUEM2MDNnbnUiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7OyVjcHBjb21waWxlcnByZWZpeCUgJChUT09MX1BBVEgpY2NwcGMgJURlYnVnTW9kZUZsYWdzJSAlVG9vbEZsYWdzJSAkKEFEREVEX0MrK0ZMQUdTKSAlSW5jbHVkZXMlICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICVPdXRGaWxlJSAtYyAlSW5GaWxlJSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8ZGJnRmxhZ3N8UFBDMzJkaWFiIiB2YWx1ZT0iLWciLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfGRiZ0ZsYWdzfFBQQzMyZ251IiB2YWx1ZT0iLWciLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfGRiZ0ZsYWdzfFBQQzYwM2RpYWIiIHZhbHVlPSItZyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8ZGJnRmxhZ3N8UFBDNjAzZ251IiB2YWx1ZT0iLWciLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfGRlcml2ZWRTaWdzfFBQQzMyZGlhYiIgdmFsdWU9IioubyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8ZGVyaXZlZFNpZ3N8UFBDMzJnbnUiIHZhbHVlPSIqLm8iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfGRlcml2ZWRTaWdzfFBQQzYwM2RpYWIiIHZhbHVlPSIqLm8iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfGRlcml2ZWRTaWdzfFBQQzYwM2dudSIgdmFsdWU9IioubyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8ZmxhZ3N8UFBDMzJkaWFiIiB2YWx1ZT0iJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfGZsYWdzfFBQQzMyZ251IiB2YWx1ZT0iJChDQ19BUkNIX1NQRUMpIC1hbnNpIC1XYWxsICAtTUQgLU1QIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxmbGFnc3xQUEM2MDNkaWFiIiB2YWx1ZT0iJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfGZsYWdzfFBQQzYwM2dudSIgdmFsdWU9IiQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAtV2FsbCAgLU1EIC1NUCAtbWxvbmdjYWxsIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxub25EYmdGbGFnc3xQUEMzMmRpYWIiIHZhbHVlPSItWE8gLVhzaXplLW9wdCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8bm9uRGJnRmxhZ3N8UFBDMzJnbnUiIHZhbHVlPSItTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxub25EYmdGbGFnc3xQUEM2MDNkaWFiIiB2YWx1ZT0iLVhPIC1Yc2l6ZS1vcHQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8QysrLUNvbXBpbGVyfG5vbkRiZ0ZsYWdzfFBQQzYwM2dudSIgdmFsdWU9Ii1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4iLz4NCisgICAgICAgICAgICA8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMrKy1Db21waWxlcnxvYmplY3QiIHZhbHVlPSJ0cnVlIi8+DQorICAgICAgICAgICAgPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8cGFzc0FibGUiIHZhbHVlPSJmYWxzZSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDKystQ29tcGlsZXJ8c2lncyIgdmFsdWU9IiouY3BwOyouQzsqLmN4eDsqLmNjIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8Y21kfFBQQzMyZGlhYiIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWNjb21waWxlcnByZWZpeCUgJChUT09MX1BBVEgpZGNjICVEZWJ1Z01vZGVGbGFncyUgJVRvb2xGbGFncyUgJChBRERFRF9DRkxBR1MpICVJbmNsdWRlcyUgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gJU91dEZpbGUlIC1jICVJbkZpbGUlIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8Y21kfFBQQzMyZ251IiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OzslY2NvbXBpbGVycHJlZml4JSAkKFRPT0xfUEFUSCljY3BwYyAlRGVidWdNb2RlRmxhZ3MlICVUb29sRmxhZ3MlICQoQURERURfQ0ZMQUdTKSAlSW5jbHVkZXMlICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICVPdXRGaWxlJSAtYyAlSW5GaWxlJSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfGNtZHxQUEM2MDNkaWFiIiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OzslY2NvbXBpbGVycHJlZml4JSAkKFRPT0xfUEFUSClkY2MgJURlYnVnTW9kZUZsYWdzJSAlVG9vbEZsYWdzJSAkKEFEREVEX0NGTEFHUykgJUluY2x1ZGVzJSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAtbyAlT3V0RmlsZSUgLWMgJUluRmlsZSUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxjbWR8UFBDNjAzZ251IiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OzslY2NvbXBpbGVycHJlZml4JSAkKFRPT0xfUEFUSCljY3BwYyAlRGVidWdNb2RlRmxhZ3MlICVUb29sRmxhZ3MlICQoQURERURfQ0ZMQUdTKSAlSW5jbHVkZXMlICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpIC1vICVPdXRGaWxlJSAtYyAlSW5GaWxlJSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfGRiZ0ZsYWdzfFBQQzMyZGlhYiIgdmFsdWU9Ii1nIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8ZGJnRmxhZ3N8UFBDMzJnbnUiIHZhbHVlPSItZyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfGRiZ0ZsYWdzfFBQQzYwM2RpYWIiIHZhbHVlPSItZyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfGRiZ0ZsYWdzfFBQQzYwM2dudSIgdmFsdWU9Ii1nIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8ZGVyaXZlZFNpZ3N8UFBDMzJkaWFiIiB2YWx1ZT0iKi5vIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8ZGVyaXZlZFNpZ3N8UFBDMzJnbnUiIHZhbHVlPSIqLm8iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxkZXJpdmVkU2lnc3xQUEM2MDNkaWFiIiB2YWx1ZT0iKi5vIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8ZGVyaXZlZFNpZ3N8UFBDNjAzZ251IiB2YWx1ZT0iKi5vIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8ZmxhZ3N8UFBDMzJkaWFiIiB2YWx1ZT0iJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxmbGFnc3xQUEMzMmdudSIgdmFsdWU9IiQoQ0NfQVJDSF9TUEVDKSAtYW5zaSAgLVdhbGwgIC1NRCAtTVAiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxmbGFnc3xQUEM2MDNkaWFiIiB2YWx1ZT0iJChDQ19BUkNIX1NQRUMpIC1XOmM6LC1YY2xpYi1vcHRpbS1vZmYgLVhhbnNpIC1YbG9jYWwtZGF0YS1hcmVhLXN0YXRpYy1vbmx5IC1YZm9yY2UtZGVjbGFyYXRpb25zICAtWG1ha2UtZGVwZW5kZW5jeT0weGQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxmbGFnc3xQUEM2MDNnbnUiIHZhbHVlPSIkKENDX0FSQ0hfU1BFQykgLWFuc2kgIC1XYWxsICAtTUQgLU1QIC1tbG9uZ2NhbGwiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxub25EYmdGbGFnc3xQUEMzMmRpYWIiIHZhbHVlPSItWE8gLVhzaXplLW9wdCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfG5vbkRiZ0ZsYWdzfFBQQzMyZ251IiB2YWx1ZT0iLU8yIC1mc3RyZW5ndGgtcmVkdWNlIC1mbm8tYnVpbHRpbiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfG5vbkRiZ0ZsYWdzfFBQQzYwM2RpYWIiIHZhbHVlPSItWE8gLVhzaXplLW9wdCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxDLUNvbXBpbGVyfG5vbkRiZ0ZsYWdzfFBQQzYwM2dudSIgdmFsdWU9Ii1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4iLz4NCisgICAgICAgICAgICA8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8b2JqZWN0IiB2YWx1ZT0idHJ1ZSIvPg0KKyAgICAgICAgICAgIDxib29sZWFuQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8Qy1Db21waWxlcnxwYXNzQWJsZSIgdmFsdWU9ImZhbHNlIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfEMtQ29tcGlsZXJ8c2lncyIgdmFsdWU9IiouYyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58Y21kfFBQQzMyZGlhYiIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7JWFyY2hpdmVycHJlZml4JSAkKFRPT0xfUEFUSClkYXIgJVRvb2xGbGFncyUgJU91dEZpbGUlICVPYmplY3RzJSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58Y21kfFBQQzMyZ251IiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OzslYXJjaGl2ZXJwcmVmaXglICQoVE9PTF9QQVRIKWFycHBjICVUb29sRmxhZ3MlICVPdXRGaWxlJSAlT2JqZWN0cyUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufGNtZHxQUEM2MDNkaWFiIiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OzslYXJjaGl2ZXJwcmVmaXglICQoVE9PTF9QQVRIKWRhciAlVG9vbEZsYWdzJSAlT3V0RmlsZSUgJU9iamVjdHMlIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxjbWR8UFBDNjAzZ251IiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OzslYXJjaGl2ZXJwcmVmaXglICQoVE9PTF9QQVRIKWFycHBjICVUb29sRmxhZ3MlICVPdXRGaWxlJSAlT2JqZWN0cyUiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufGRiZ0ZsYWdzfFBQQzMyZGlhYiIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58ZGJnRmxhZ3N8UFBDMzJnbnUiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufGRiZ0ZsYWdzfFBQQzYwM2RpYWIiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufGRiZ0ZsYWdzfFBQQzYwM2dudSIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58ZGVyaXZlZFNpZ3N8UFBDMzJkaWFiIiB2YWx1ZT0iKi5hIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxkZXJpdmVkU2lnc3xQUEMzMmdudSIgdmFsdWU9IiouYSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58ZGVyaXZlZFNpZ3N8UFBDNjAzZGlhYiIgdmFsdWU9IiouYSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58ZGVyaXZlZFNpZ3N8UFBDNjAzZ251IiB2YWx1ZT0iKi5hIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxmbGFnc3xQUEMzMmRpYWIiIHZhbHVlPSJjcnVzIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxmbGFnc3xQUEMzMmdudSIgdmFsdWU9ImNydXMiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufGZsYWdzfFBQQzYwM2RpYWIiIHZhbHVlPSJjcnVzIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxmbGFnc3xQUEM2MDNnbnUiIHZhbHVlPSJjcnVzIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxub25EYmdGbGFnc3xQUEMzMmRpYWIiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufG5vbkRiZ0ZsYWdzfFBQQzMyZ251IiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxub25EYmdGbGFnc3xQUEM2MDNkaWFiIiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxub25EYmdGbGFnc3xQUEM2MDNnbnUiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpYnJhcmlhbnxvYmplY3QiIHZhbHVlPSJmYWxzZSIvPg0KKyAgICAgICAgICAgIDxib29sZWFuQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlicmFyaWFufHBhc3NBYmxlIiB2YWx1ZT0idHJ1ZSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaWJyYXJpYW58c2lncyIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8Y21kfFBQQzMyZGlhYiIgdmFsdWU9ImVjaG8gJnF1b3Q7YnVpbGRpbmcgJEAmcXVvdDs7cm0gLWYgJU91dEZpbGUlO2RkdW1wIC1OZyAlT2JqZWN0cyUgJUxpYnJhcmllcyUgfCB0Y2xzaCAkKFdJTkRfQkFTRSkvaG9zdC9yZXNvdXJjZS9odXRpbHMvdGNsL211bmNoLnRjbCAtYyBwcGMgJmd0OyAkKE9CSl9ESVIpL2N0ZHQuYzslY2NvbXBpbGVycHJlZml4JSAkKFRPT0xfUEFUSClkY2MgJURlYnVnTW9kZUZsYWdzJSAkKENDX0FSQ0hfU1BFQykgLVhkb2xsYXItaW4taWRlbnQgLVhmb3JjZS1kZWNsYXJhdGlvbnMgJChBRERFRF9DRkxBR1MpICVJbmNsdWRlcyUgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgIC1vICQoT0JKX0RJUikvY3RkdC5vIC1jICQoT0JKX0RJUikvY3RkdC5jOyVsaW5rZXJwcmVmaXglICQoVE9PTF9QQVRIKWRsZCAtdFBQQ0ZIOnZ4d29ya3M2MyAtWCAtcjUgJVRvb2xGbGFncyUgLW8gJU91dEZpbGUlICQoT0JKX0RJUikvY3RkdC5vICVPYmplY3RzJSAlTGlicmFyaWVzJSAkKExJQlBBVEgpICQoTElCUykgICQoQURERURfTElCUEFUSCkgJChBRERFRF9MSUJTKSAmYW1wOyZhbXA7IGlmIFsgJnF1b3Q7JChFWFBBTkRfREJHKSZxdW90OyA9ICZxdW90OzEmcXVvdDsgXTsgdGhlbiBwbGluayAmcXVvdDskQCZxdW90OztmaSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8Y21kfFBQQzMyZ251IiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OztybSAtZiAlT3V0RmlsZSU7bm1wcGMgJU9iamVjdHMlICVMaWJyYXJpZXMlIHwgdGNsc2ggJChXSU5EX0JBU0UpL2hvc3QvcmVzb3VyY2UvaHV0aWxzL3RjbC9tdW5jaC50Y2wgLWMgcHBjICZndDsgJChPQkpfRElSKS9jdGR0LmM7JWNjb21waWxlcnByZWZpeCUgJChUT09MX1BBVEgpY2NwcGMgJURlYnVnTW9kZUZsYWdzJSAkKENDX0FSQ0hfU1BFQykgLWZkb2xsYXJzLWluLWlkZW50aWZpZXJzIC1XYWxsICQoQURERURfQ0ZMQUdTKSAlSW5jbHVkZXMlICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpICAtbyAkKE9CSl9ESVIpL2N0ZHQubyAtYyAkKE9CSl9ESVIpL2N0ZHQuYzslbGlua2VycHJlZml4JSAkKFRPT0xfUEFUSCljY3BwYyAtciAtbm9zdGRsaWIgLVdsLC1YICVUb29sRmxhZ3MlIC1vICVPdXRGaWxlJSAkKE9CSl9ESVIpL2N0ZHQubyAlT2JqZWN0cyUgJUxpYnJhcmllcyUgJChMSUJQQVRIKSAkKExJQlMpICAkKEFEREVEX0xJQlBBVEgpICQoQURERURfTElCUykgJmFtcDsmYW1wOyBpZiBbICZxdW90OyQoRVhQQU5EX0RCRykmcXVvdDsgPSAmcXVvdDsxJnF1b3Q7IF07IHRoZW4gcGxpbmsgJnF1b3Q7JEAmcXVvdDs7ZmkiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfGNtZHxQUEM2MDNkaWFiIiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OztybSAtZiAlT3V0RmlsZSU7ZGR1bXAgLU5nICVPYmplY3RzJSAlTGlicmFyaWVzJSB8IHRjbHNoICQoV0lORF9CQVNFKS9ob3N0L3Jlc291cmNlL2h1dGlscy90Y2wvbXVuY2gudGNsIC1jIHBwYyAmZ3Q7ICQoT0JKX0RJUikvY3RkdC5jOyVjY29tcGlsZXJwcmVmaXglICQoVE9PTF9QQVRIKWRjYyAlRGVidWdNb2RlRmxhZ3MlICQoQ0NfQVJDSF9TUEVDKSAtWGRvbGxhci1pbi1pZGVudCAtWGZvcmNlLWRlY2xhcmF0aW9ucyAkKEFEREVEX0NGTEFHUykgJUluY2x1ZGVzJSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAgLW8gJChPQkpfRElSKS9jdGR0Lm8gLWMgJChPQkpfRElSKS9jdGR0LmM7JWxpbmtlcnByZWZpeCUgJChUT09MX1BBVEgpZGxkIC10UFBDNjAzRkg6dnh3b3JrczYzIC1YIC1yNSAlVG9vbEZsYWdzJSAtbyAlT3V0RmlsZSUgJChPQkpfRElSKS9jdGR0Lm8gJU9iamVjdHMlICVMaWJyYXJpZXMlICQoTElCUEFUSCkgJChMSUJTKSAgJChBRERFRF9MSUJQQVRIKSAkKEFEREVEX0xJQlMpICZhbXA7JmFtcDsgaWYgWyAmcXVvdDskKEVYUEFORF9EQkcpJnF1b3Q7ID0gJnF1b3Q7MSZxdW90OyBdOyB0aGVuIHBsaW5rICZxdW90OyRAJnF1b3Q7O2ZpIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxjbWR8UFBDNjAzZ251IiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OztybSAtZiAlT3V0RmlsZSU7bm1wcGMgJU9iamVjdHMlICVMaWJyYXJpZXMlIHwgdGNsc2ggJChXSU5EX0JBU0UpL2hvc3QvcmVzb3VyY2UvaHV0aWxzL3RjbC9tdW5jaC50Y2wgLWMgcHBjICZndDsgJChPQkpfRElSKS9jdGR0LmM7JWNjb21waWxlcnByZWZpeCUgJChUT09MX1BBVEgpY2NwcGMgJURlYnVnTW9kZUZsYWdzJSAkKENDX0FSQ0hfU1BFQykgLWZkb2xsYXJzLWluLWlkZW50aWZpZXJzIC1XYWxsICQoQURERURfQ0ZMQUdTKSAlSW5jbHVkZXMlICQoQURERURfSU5DTFVERVMpIC1EQ1BVPSQoQ1BVKSAtRFRPT0xfRkFNSUxZPSQoVE9PTF9GQU1JTFkpIC1EVE9PTD0kKFRPT0wpIC1EX1dSU19LRVJORUwgICAkKERFRklORVMpICAtbyAkKE9CSl9ESVIpL2N0ZHQubyAtYyAkKE9CSl9ESVIpL2N0ZHQuYzslbGlua2VycHJlZml4JSAkKFRPT0xfUEFUSCljY3BwYyAtciAtbm9zdGRsaWIgLVdsLC1YICVUb29sRmxhZ3MlIC1vICVPdXRGaWxlJSAkKE9CSl9ESVIpL2N0ZHQubyAlT2JqZWN0cyUgJUxpYnJhcmllcyUgJChMSUJQQVRIKSAkKExJQlMpICAkKEFEREVEX0xJQlBBVEgpICQoQURERURfTElCUykgJmFtcDsmYW1wOyBpZiBbICZxdW90OyQoRVhQQU5EX0RCRykmcXVvdDsgPSAmcXVvdDsxJnF1b3Q7IF07IHRoZW4gcGxpbmsgJnF1b3Q7JEAmcXVvdDs7ZmkiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfGRiZ0ZsYWdzfFBQQzMyZGlhYiIgdmFsdWU9Ii1nIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxkYmdGbGFnc3xQUEMzMmdudSIgdmFsdWU9Ii1nIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxkYmdGbGFnc3xQUEM2MDNkaWFiIiB2YWx1ZT0iLWciLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfGRiZ0ZsYWdzfFBQQzYwM2dudSIgdmFsdWU9Ii1nIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxkZXJpdmVkU2lnc3xQUEMzMmRpYWIiIHZhbHVlPSIqLm91dCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8ZGVyaXZlZFNpZ3N8UFBDMzJnbnUiIHZhbHVlPSIqLm91dCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8ZGVyaXZlZFNpZ3N8UFBDNjAzZGlhYiIgdmFsdWU9Iioub3V0Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxkZXJpdmVkU2lnc3xQUEM2MDNnbnUiIHZhbHVlPSIqLm91dCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8ZmxhZ3N8UFBDMzJkaWFiIiB2YWx1ZT0iLXI0Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxmbGFnc3xQUEMzMmdudSIgdmFsdWU9Ii1UICQoV0lORF9CQVNFKS90YXJnZXQvaC90b29sL2dudS9sZHNjcmlwdHMvbGluay5PVVQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfGZsYWdzfFBQQzYwM2RpYWIiIHZhbHVlPSItcjQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfGZsYWdzfFBQQzYwM2dudSIgdmFsdWU9Ii1UICQoV0lORF9CQVNFKS90YXJnZXQvaC90b29sL2dudS9sZHNjcmlwdHMvbGluay5PVVQiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfG5vbkRiZ0ZsYWdzfFBQQzMyZGlhYiIgdmFsdWU9Ii1YTyAtWHNpemUtb3B0Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfExpbmtlcnxub25EYmdGbGFnc3xQUEMzMmdudSIgdmFsdWU9Ii1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4iLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfG5vbkRiZ0ZsYWdzfFBQQzYwM2RpYWIiIHZhbHVlPSItWE8gLVhzaXplLW9wdCIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8bm9uRGJnRmxhZ3N8UFBDNjAzZ251IiB2YWx1ZT0iLU8yIC1mc3RyZW5ndGgtcmVkdWNlIC1mbm8tYnVpbHRpbiIvPg0KKyAgICAgICAgICAgIDxib29sZWFuQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8TGlua2VyfG9iamVjdCIgdmFsdWU9ImZhbHNlIi8+DQorICAgICAgICAgICAgPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8cGFzc0FibGUiIHZhbHVlPSJmYWxzZSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxMaW5rZXJ8c2lncyIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxjbWR8UFBDMzJkaWFiIiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OzslbGlua2VycHJlZml4JSAkKFRPT0xfUEFUSClkbGQgLXRQUENGSDp2eHdvcmtzNjMgLVggLXI1ICVUb29sRmxhZ3MlIC1vICVPdXRGaWxlJSAlT2JqZWN0cyUgJChMSUJQQVRIKSAkKExJQlMpICQoQURERURfTElCUEFUSCkgJChBRERFRF9MSUJTKSAgJmFtcDsmYW1wOyBpZiBbICZxdW90OyQoRVhQQU5EX0RCRykmcXVvdDsgPSAmcXVvdDsxJnF1b3Q7IF07IHRoZW4gcGxpbmsgJnF1b3Q7JEAmcXVvdDs7ZmkiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8Y21kfFBQQzMyZ251IiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OzslbGlua2VycHJlZml4JSAkKFRPT0xfUEFUSCljY3BwYyAtciAtbm9zdGRsaWIgLVdsLC1YICVUb29sRmxhZ3MlIC1vICVPdXRGaWxlJSAlT2JqZWN0cyUgJChMSUJQQVRIKSAkKExJQlMpICQoQURERURfTElCUEFUSCkgJChBRERFRF9MSUJTKSAgJmFtcDsmYW1wOyBpZiBbICZxdW90OyQoRVhQQU5EX0RCRykmcXVvdDsgPSAmcXVvdDsxJnF1b3Q7IF07IHRoZW4gcGxpbmsgJnF1b3Q7JEAmcXVvdDs7ZmkiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8Y21kfFBQQzYwM2RpYWIiIHZhbHVlPSJlY2hvICZxdW90O2J1aWxkaW5nICRAJnF1b3Q7OyVsaW5rZXJwcmVmaXglICQoVE9PTF9QQVRIKWRsZCAtdFBQQzYwM0ZIOnZ4d29ya3M2MyAtWCAtcjUgJVRvb2xGbGFncyUgLW8gJU91dEZpbGUlICVPYmplY3RzJSAkKExJQlBBVEgpICQoTElCUykgJChBRERFRF9MSUJQQVRIKSAkKEFEREVEX0xJQlMpICAmYW1wOyZhbXA7IGlmIFsgJnF1b3Q7JChFWFBBTkRfREJHKSZxdW90OyA9ICZxdW90OzEmcXVvdDsgXTsgdGhlbiBwbGluayAmcXVvdDskQCZxdW90OztmaSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxjbWR8UFBDNjAzZ251IiB2YWx1ZT0iZWNobyAmcXVvdDtidWlsZGluZyAkQCZxdW90OzslbGlua2VycHJlZml4JSAkKFRPT0xfUEFUSCljY3BwYyAtciAtbm9zdGRsaWIgLVdsLC1YICVUb29sRmxhZ3MlIC1vICVPdXRGaWxlJSAlT2JqZWN0cyUgJChMSUJQQVRIKSAkKExJQlMpICQoQURERURfTElCUEFUSCkgJChBRERFRF9MSUJTKSAgJmFtcDsmYW1wOyBpZiBbICZxdW90OyQoRVhQQU5EX0RCRykmcXVvdDsgPSAmcXVvdDsxJnF1b3Q7IF07IHRoZW4gcGxpbmsgJnF1b3Q7JEAmcXVvdDs7ZmkiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8ZGJnRmxhZ3N8UFBDMzJkaWFiIiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfGRiZ0ZsYWdzfFBQQzMyZ251IiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfGRiZ0ZsYWdzfFBQQzYwM2RpYWIiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8ZGJnRmxhZ3N8UFBDNjAzZ251IiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfGRlcml2ZWRTaWdzfFBQQzMyZGlhYiIgdmFsdWU9IioubyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxkZXJpdmVkU2lnc3xQUEMzMmdudSIgdmFsdWU9IioubyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxkZXJpdmVkU2lnc3xQUEM2MDNkaWFiIiB2YWx1ZT0iKi5vIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfGRlcml2ZWRTaWdzfFBQQzYwM2dudSIgdmFsdWU9IioubyIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxmbGFnc3xQUEMzMmRpYWIiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8ZmxhZ3N8UFBDMzJnbnUiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8ZmxhZ3N8UFBDNjAzZGlhYiIgdmFsdWU9IiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxmbGFnc3xQUEM2MDNnbnUiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8bm9uRGJnRmxhZ3N8UFBDMzJkaWFiIiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfG5vbkRiZ0ZsYWdzfFBQQzMyZ251IiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfG5vbkRiZ0ZsYWdzfFBQQzYwM2RpYWIiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8bm9uRGJnRmxhZ3N8UFBDNjAzZ251IiB2YWx1ZT0iIi8+DQorICAgICAgICAgICAgPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98VG9vbHxQYXJ0aWFsIEltYWdlIExpbmtlcnxvYmplY3QiIHZhbHVlPSJmYWxzZSIvPg0KKyAgICAgICAgICAgIDxib29sZWFuQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfFRvb2x8UGFydGlhbCBJbWFnZSBMaW5rZXJ8cGFzc0FibGUiIHZhbHVlPSJ0cnVlIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xUb29sfFBhcnRpYWwgSW1hZ2UgTGlua2VyfHNpZ3MiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIGtleT0iQkxEOjpJbmZvfGNtZCIgdmFsdWU9IiVtYWtlcHJlZml4JSBtYWtlIC0tbm8tcHJpbnQtZGlyZWN0b3J5Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xkZWZhdWx0U3BlYyIgdmFsdWU9IlBQQzYwM2dudSIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98cmVkaXJEaXJ8UFBDMzJkaWFiIiB2YWx1ZT0iUFBDMzJkaWFiIi8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xyZWRpckRpcnxQUEMzMmdudSIgdmFsdWU9IlBQQzMyZ251Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xyZWRpckRpcnxQUEM2MDNkaWFiIiB2YWx1ZT0iUFBDNjAzZGlhYiIvPg0KKyAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJCTEQ6OkluZm98cmVkaXJEaXJ8UFBDNjAzZ251IiB2YWx1ZT0iUFBDNjAzZ251Ii8+DQorICAgICAgICAgICAgPHN0cmluZ0F0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xyZWRpclJvb3QiIHZhbHVlPSIiLz4NCisgICAgICAgICAgICA8bGlzdEF0dHJpYnV0ZSBrZXk9IkJMRDo6SW5mb3xzcGVjcyI+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9IlBQQzMyZGlhYiIvPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSJQUEMzMmdudSIvPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSJQUEM2MDNkaWFiIi8+DQorICAgICAgICAgICAgICAgIDxzdHJpbmdBdHRyaWJ1dGUgdmFsdWU9IlBQQzYwM2dudSIvPg0KKyAgICAgICAgICAgIDwvbGlzdEF0dHJpYnV0ZT4NCisgICAgICAgICAgICA8aW50QXR0cmlidXRlIGtleT0iQnVpbGRTdXBwb3J0RW5hYmxlZCIgdmFsdWU9IjEiLz4NCisgICAgICAgICAgICA8bGlzdEF0dHJpYnV0ZSBrZXk9IkJ1aWxkU3VwcG9ydEZvckJ1aWxkU3BlY3MiPg0KKyAgICAgICAgICAgICAgICA8c3RyaW5nQXR0cmlidXRlIHZhbHVlPSJQUEM2MDNnbnUiLz4NCisgICAgICAgICAgICA8L2xpc3RBdHRyaWJ1dGU+DQorICAgICAgICAgICAgPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJCdWlsZFRhcmdldENlbnRyaWMiIHZhbHVlPSJ0cnVlIi8+DQorICAgICAgICA8L21hcEF0dHJpYnV0ZT4NCisgICAgPC9hdHRyaWJ1dGVzPg0KKyAgICA8YnVpbGR0YXJnZXRzPg0KKyAgICAgICAgPGJ1aWxkdGFyZ2V0IGJ1aWxkdG9vbD0iTGlua2VyIiBuYW1lPSJTaW1wbGVUZW1wbGF0ZSIgcGFzc2VkPSJmYWxzZSIgdGFyZ2V0bmFtZT0iU2ltcGxlVGVtcGxhdGUiPg0KKyAgICAgICAgICAgIDxjb250ZW50cz4NCisgICAgICAgICAgICAgICAgPGJ1aWxkdGFyZ2V0cmVmZXJlbmNlIG5hbWU9Ii9WaXNpb25TYW1wbGUyMDEzL1NpbXBsZVRlbXBsYXRlX3BhcnRpYWxJbWFnZSIvPg0KKyAgICAgICAgICAgIDwvY29udGVudHM+DQorICAgICAgICA8L2J1aWxkdGFyZ2V0Pg0KKyAgICAgICAgPGJ1aWxkdGFyZ2V0IGJ1aWxkdG9vbD0iUGFydGlhbCBJbWFnZSBMaW5rZXIiIG5hbWU9IlNpbXBsZVRlbXBsYXRlX3BhcnRpYWxJbWFnZSIgcGFzc2VkPSJ0cnVlIiB0YXJnZXRuYW1lPSJTaW1wbGVUZW1wbGF0ZV9wYXJ0aWFsSW1hZ2UiPg0KKyAgICAgICAgICAgIDxjb250ZW50cz4NCisgICAgICAgICAgICAgICAgPGZvbGRlciBuYW1lPSIvVmlzaW9uU2FtcGxlMjAxMyIgcmVjdXJzaXZlPSJ0cnVlIi8+DQorICAgICAgICAgICAgPC9jb250ZW50cz4NCisgICAgICAgIDwvYnVpbGR0YXJnZXQ+DQorICAgIDwvYnVpbGR0YXJnZXRzPg0KKzwvd3J4bWw+DQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvdnh3b3Jrcy02LjMvdGFyZ2V0L3NyYy9kZW1vL1Zpc2lvblNhbXBsZTIwMTMvUFBDNjAzZ251L01ha2VmaWxlIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvdnh3b3Jrcy02LjMvdGFyZ2V0L3NyYy9kZW1vL1Zpc2lvblNhbXBsZTIwMTMvUFBDNjAzZ251L01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4NGJhYmEKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vVmlzaW9uU2FtcGxlMjAxMy9QUEM2MDNnbnUvTWFrZWZpbGUKQEAgLTAsMCArMSwyMTkgQEAKKyMgV2luZCBSaXZlciBXb3JrYmVuY2ggZ2VuZXJhdGVkIE1ha2VmaWxlLg0KKyMgRG8gbm90IGVkaXQhISENCisjDQorIyBUaGUgZmlsZSAiLndybWFrZWZpbGUiIGlzIHRoZSB0ZW1wbGF0ZSB1c2VkIGJ5IHRoZSBXaW5kIFJpdmVyIFdvcmtiZW5jaCB0bw0KKyMgZ2VuZXJhdGUgdGhlIG1ha2VmaWxlcyBvZiB0aGlzIHByb2plY3QuIEFkZCB1c2VyLXNwZWNpZmljIGJ1aWxkIHRhcmdldHMgYW5kDQorIyBtYWtlIHJ1bGVzIG9ubHkoISkgaW4gdGhpcyBwcm9qZWN0J3MgIi53cm1ha2VmaWxlIiBmaWxlLiBUaGVzZSB3aWxsIHRoZW4gYmUNCisjIGF1dG9tYXRpY2FsbHkgZHVtcGVkIGludG8gdGhlIG1ha2VmaWxlcy4NCisNCitXSU5EX0hPTUUgOj0gJChzdWJzdCBcLC8sJChXSU5EX0hPTUUpKQ0KK1dJTkRfQkFTRSA6PSAkKHN1YnN0IFwsLywkKFdJTkRfQkFTRSkpDQorV0lORF9VU1IgOj0gJChzdWJzdCBcLC8sJChXSU5EX1VTUikpDQorDQorYWxsIDogcHJlX2J1aWxkIG1haW5fYWxsIHBvc3RfYnVpbGQNCisNCitfY2xlYW4gOjoNCisJQGVjaG8gIm1ha2U6IHJlbW92aW5nIHRhcmdldHMgYW5kIG9iamVjdHMgb2YgYHB3ZGAiDQorDQorVFJBQ0U9MA0KK1RSQUNFT049JChUUkFDRTowPUApDQorVFJBQ0VfRkxBRz0kKFRSQUNFT046MT0pDQorDQorTUFLRUZJTEUgOj0gTWFrZWZpbGUNCisNCitGTEVYSUJMRV9CVUlMRCA6PSAxDQorDQorQlVJTERfU1BFQyA9IFBQQzYwM2dudQ0KK0RFQlVHX01PREUgPSAxDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK01PREVfRElSIDo9IERlYnVnDQorZWxzZQ0KK01PREVfRElSIDo9IE5vbkRlYnVnDQorZW5kaWYNCitPQkpfRElSIDo9IC4NCitXU19ST09UX0RJUiA6PSBDOi9XaW5kUml2ZXIvd29ya3NwYWNlDQorUFJKX1JPT1RfRElSIDo9ICQoV1NfUk9PVF9ESVIpL1Zpc2lvblNhbXBsZTIwMTMNCisNCisNCisNCisjR2xvYmFsIEJ1aWxkIE1hY3Jvcw0KK1BST0pFQ1RfVFlQRSA9IERLTQ0KK0RFRklORVMgPSANCitFWFBBTkRfREJHID0gMA0KKw0KKw0KKyNCdWlsZFNwZWMgc3BlY2lmaWMgQnVpbGQgTWFjcm9zDQorVlhfQ1BVX0ZBTUlMWSA9IHBwYw0KK0NQVSA9IFBQQzYwMw0KK1RPT0xfRkFNSUxZID0gZ251DQorVE9PTCA9IGdudQ0KK1RPT0xfUEFUSCA9IA0KK0NDX0FSQ0hfU1BFQyA9IC1tY3B1PTYwMyAtbXN0cmljdC1hbGlnbiAtbW5vLWltcGxpY2l0LWZwIC1tbG9uZ2NhbGwNCitMSUJQQVRIID0gDQorTElCUyA9IA0KKw0KK0lERV9JTkNMVURFUyA9IC1JJChXSU5EX0JBU0UpL3RhcmdldC9oIC1JJChXSU5EX0JBU0UpL3RhcmdldC9oL1dQSUxpYiAtSSQoV0lORF9CQVNFKS90YXJnZXQvaC93cm4vY29yZWlwIA0KKw0KK0lERV9MSUJSQVJJRVMgPSAkKFdJTkRfQkFTRSkvdGFyZ2V0L2xpYi9XUElMaWIuYSANCisNCitJREVfREVGSU5FUyA9IA0KKw0KKw0KKw0KKyNCdWlsZFRvb2wgZmxhZ3MNCitpZmVxICgkKERFQlVHX01PREUpLDEpDQorREVCVUdGTEFHU19DLUNvbXBpbGVyID0gLWcNCitERUJVR0ZMQUdTX0MrKy1Db21waWxlciA9IC1nDQorREVCVUdGTEFHU19MaW5rZXIgPSAtZw0KK0RFQlVHRkxBR1NfUGFydGlhbC1JbWFnZS1MaW5rZXIgPSANCitERUJVR0ZMQUdTX0xpYnJhcmlhbiA9IA0KK0RFQlVHRkxBR1NfQXNzZW1ibGVyID0gLWcNCitlbHNlDQorREVCVUdGTEFHU19DLUNvbXBpbGVyID0gLU8yIC1mc3RyZW5ndGgtcmVkdWNlIC1mbm8tYnVpbHRpbg0KK0RFQlVHRkxBR1NfQysrLUNvbXBpbGVyID0gLU8yIC1mc3RyZW5ndGgtcmVkdWNlIC1mbm8tYnVpbHRpbg0KK0RFQlVHRkxBR1NfTGlua2VyID0gLU8yIC1mc3RyZW5ndGgtcmVkdWNlIC1mbm8tYnVpbHRpbg0KK0RFQlVHRkxBR1NfUGFydGlhbC1JbWFnZS1MaW5rZXIgPSANCitERUJVR0ZMQUdTX0xpYnJhcmlhbiA9IA0KK0RFQlVHRkxBR1NfQXNzZW1ibGVyID0gLU8yIC1mc3RyZW5ndGgtcmVkdWNlIC1mbm8tYnVpbHRpbg0KK2VuZGlmDQorDQorDQorI1Byb2plY3QgVGFyZ2V0cw0KK1BST0pFQ1RfVEFSR0VUUyA9IFNpbXBsZVRlbXBsYXRlLyQoTU9ERV9ESVIpL1NpbXBsZVRlbXBsYXRlLm91dCBcDQorCSBTaW1wbGVUZW1wbGF0ZV9wYXJ0aWFsSW1hZ2UvJChNT0RFX0RJUikvU2ltcGxlVGVtcGxhdGVfcGFydGlhbEltYWdlLm8NCisNCisNCisjUnVsZXMNCisNCisjIFNpbXBsZVRlbXBsYXRlDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK1NpbXBsZVRlbXBsYXRlLyQoTU9ERV9ESVIpLyUgOiBERUJVR0ZMQUdTX0MtQ29tcGlsZXIgPSAtZw0KK1NpbXBsZVRlbXBsYXRlLyQoTU9ERV9ESVIpLyUgOiBERUJVR0ZMQUdTX0MrKy1Db21waWxlciA9IC1nDQorU2ltcGxlVGVtcGxhdGUvJChNT0RFX0RJUikvJSA6IERFQlVHRkxBR1NfTGlua2VyID0gLWcNCitTaW1wbGVUZW1wbGF0ZS8kKE1PREVfRElSKS8lIDogREVCVUdGTEFHU19QYXJ0aWFsLUltYWdlLUxpbmtlciA9IA0KK1NpbXBsZVRlbXBsYXRlLyQoTU9ERV9ESVIpLyUgOiBERUJVR0ZMQUdTX0xpYnJhcmlhbiA9IA0KK1NpbXBsZVRlbXBsYXRlLyQoTU9ERV9ESVIpLyUgOiBERUJVR0ZMQUdTX0Fzc2VtYmxlciA9IC1nDQorZWxzZQ0KK1NpbXBsZVRlbXBsYXRlLyQoTU9ERV9ESVIpLyUgOiBERUJVR0ZMQUdTX0MtQ29tcGlsZXIgPSAtTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluDQorU2ltcGxlVGVtcGxhdGUvJChNT0RFX0RJUikvJSA6IERFQlVHRkxBR1NfQysrLUNvbXBpbGVyID0gLU8yIC1mc3RyZW5ndGgtcmVkdWNlIC1mbm8tYnVpbHRpbg0KK1NpbXBsZVRlbXBsYXRlLyQoTU9ERV9ESVIpLyUgOiBERUJVR0ZMQUdTX0xpbmtlciA9IC1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4NCitTaW1wbGVUZW1wbGF0ZS8kKE1PREVfRElSKS8lIDogREVCVUdGTEFHU19QYXJ0aWFsLUltYWdlLUxpbmtlciA9IA0KK1NpbXBsZVRlbXBsYXRlLyQoTU9ERV9ESVIpLyUgOiBERUJVR0ZMQUdTX0xpYnJhcmlhbiA9IA0KK1NpbXBsZVRlbXBsYXRlLyQoTU9ERV9ESVIpLyUgOiBERUJVR0ZMQUdTX0Fzc2VtYmxlciA9IC1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4NCitlbmRpZg0KK1NpbXBsZVRlbXBsYXRlLyQoTU9ERV9ESVIpLyUgOiBJREVfSU5DTFVERVMgPSAtSSQoV0lORF9CQVNFKS90YXJnZXQvaCAtSSQoV0lORF9CQVNFKS90YXJnZXQvaC9XUElMaWIgLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2gvd3JuL2NvcmVpcCANCitTaW1wbGVUZW1wbGF0ZS8kKE1PREVfRElSKS8lIDogSURFX0xJQlJBUklFUyA9ICQoV0lORF9CQVNFKS90YXJnZXQvbGliL1dQSUxpYi5hIA0KK1NpbXBsZVRlbXBsYXRlLyQoTU9ERV9ESVIpLyUgOiBJREVfREVGSU5FUyA9IA0KK1NpbXBsZVRlbXBsYXRlLyQoTU9ERV9ESVIpLyUgOiBQUk9KRUNUX1RZUEUgPSBES00NCitTaW1wbGVUZW1wbGF0ZS8kKE1PREVfRElSKS8lIDogREVGSU5FUyA9IA0KK1NpbXBsZVRlbXBsYXRlLyQoTU9ERV9ESVIpLyUgOiBFWFBBTkRfREJHID0gMA0KK1NpbXBsZVRlbXBsYXRlLyQoTU9ERV9ESVIpLyUgOiBWWF9DUFVfRkFNSUxZID0gcHBjDQorU2ltcGxlVGVtcGxhdGUvJChNT0RFX0RJUikvJSA6IENQVSA9IFBQQzYwMw0KK1NpbXBsZVRlbXBsYXRlLyQoTU9ERV9ESVIpLyUgOiBUT09MX0ZBTUlMWSA9IGdudQ0KK1NpbXBsZVRlbXBsYXRlLyQoTU9ERV9ESVIpLyUgOiBUT09MID0gZ251DQorU2ltcGxlVGVtcGxhdGUvJChNT0RFX0RJUikvJSA6IFRPT0xfUEFUSCA9IA0KK1NpbXBsZVRlbXBsYXRlLyQoTU9ERV9ESVIpLyUgOiBDQ19BUkNIX1NQRUMgPSAtbWNwdT02MDMgLW1zdHJpY3QtYWxpZ24gLW1uby1pbXBsaWNpdC1mcCAtbWxvbmdjYWxsDQorU2ltcGxlVGVtcGxhdGUvJChNT0RFX0RJUikvJSA6IExJQlBBVEggPSANCitTaW1wbGVUZW1wbGF0ZS8kKE1PREVfRElSKS8lIDogTElCUyA9IA0KK1NpbXBsZVRlbXBsYXRlLyQoTU9ERV9ESVIpLyUgOiBPQkpfRElSIDo9IFNpbXBsZVRlbXBsYXRlLyQoTU9ERV9ESVIpDQorDQorT0JKRUNUU19TaW1wbGVUZW1wbGF0ZSA9IFNpbXBsZVRlbXBsYXRlX3BhcnRpYWxJbWFnZS8kKE1PREVfRElSKS9TaW1wbGVUZW1wbGF0ZV9wYXJ0aWFsSW1hZ2Uubw0KKw0KK1NpbXBsZVRlbXBsYXRlLyQoTU9ERV9ESVIpL1NpbXBsZVRlbXBsYXRlLm91dCA6ICQoT0JKRUNUU19TaW1wbGVUZW1wbGF0ZSkNCisJJChUUkFDRV9GTEFHKWlmIFsgISAtZCAiYGRpcm5hbWUgIiRAImAiIF07IHRoZW4gbWtkaXIgLXAgImBkaXJuYW1lICIkQCJgIjsgZmk7ZWNobyAiYnVpbGRpbmcgJEAiO3JtIC1mICIkQCI7bm1wcGMgJChPQkpFQ1RTX1NpbXBsZVRlbXBsYXRlKSAkKElERV9MSUJSQVJJRVMpIHwgdGNsc2ggJChXSU5EX0JBU0UpL2hvc3QvcmVzb3VyY2UvaHV0aWxzL3RjbC9tdW5jaC50Y2wgLWMgcHBjID4gJChPQkpfRElSKS9jdGR0LmM7ICQoVE9PTF9QQVRIKWNjcHBjICQoREVCVUdGTEFHU19MaW5rZXIpICQoQ0NfQVJDSF9TUEVDKSAtZmRvbGxhcnMtaW4taWRlbnRpZmllcnMgLVdhbGwgJChBRERFRF9DRkxBR1MpICQoSURFX0lOQ0xVREVTKSAkKEFEREVEX0lOQ0xVREVTKSAtRENQVT0kKENQVSkgLURUT09MX0ZBTUlMWT0kKFRPT0xfRkFNSUxZKSAtRFRPT0w9JChUT09MKSAtRF9XUlNfS0VSTkVMICAgJChERUZJTkVTKSAgLW8gJChPQkpfRElSKS9jdGR0Lm8gLWMgJChPQkpfRElSKS9jdGR0LmM7ICQoVE9PTF9QQVRIKWNjcHBjIC1yIC1ub3N0ZGxpYiAtV2wsLVggLVQgJChXSU5EX0JBU0UpL3RhcmdldC9oL3Rvb2wvZ251L2xkc2NyaXB0cy9saW5rLk9VVCAtbyAiJEAiICQoT0JKX0RJUikvY3RkdC5vICQoT0JKRUNUU19TaW1wbGVUZW1wbGF0ZSkgJChJREVfTElCUkFSSUVTKSAkKExJQlBBVEgpICQoTElCUykgICQoQURERURfTElCUEFUSCkgJChBRERFRF9MSUJTKSAmJiBpZiBbICIkKEVYUEFORF9EQkcpIiA9ICIxIiBdOyB0aGVuIHBsaW5rICIkQCI7ZmkNCisNCitTaW1wbGVUZW1wbGF0ZS8kKE1PREVfRElSKS9TaW1wbGVUZW1wbGF0ZV9jb21waWxlX2ZpbGUgOiAkKEZJTEUpIDsNCisNCitfY2xlYW4gOjogU2ltcGxlVGVtcGxhdGUvJChNT0RFX0RJUikvU2ltcGxlVGVtcGxhdGVfY2xlYW4NCisNCitTaW1wbGVUZW1wbGF0ZS8kKE1PREVfRElSKS9TaW1wbGVUZW1wbGF0ZV9jbGVhbiA6IA0KKwkkKFRSQUNFX0ZMQUcpaWYgWyAtZCAiU2ltcGxlVGVtcGxhdGUiIF07IHRoZW4gY2QgIlNpbXBsZVRlbXBsYXRlIjsgcm0gLXJmICQoTU9ERV9ESVIpOyBmaQ0KKw0KKw0KKyMgU2ltcGxlVGVtcGxhdGVfcGFydGlhbEltYWdlDQoraWZlcSAoJChERUJVR19NT0RFKSwxKQ0KK1NpbXBsZVRlbXBsYXRlX3BhcnRpYWxJbWFnZS8kKE1PREVfRElSKS8lIDogREVCVUdGTEFHU19DLUNvbXBpbGVyID0gLWcNCitTaW1wbGVUZW1wbGF0ZV9wYXJ0aWFsSW1hZ2UvJChNT0RFX0RJUikvJSA6IERFQlVHRkxBR1NfQysrLUNvbXBpbGVyID0gLWcNCitTaW1wbGVUZW1wbGF0ZV9wYXJ0aWFsSW1hZ2UvJChNT0RFX0RJUikvJSA6IERFQlVHRkxBR1NfTGlua2VyID0gLWcNCitTaW1wbGVUZW1wbGF0ZV9wYXJ0aWFsSW1hZ2UvJChNT0RFX0RJUikvJSA6IERFQlVHRkxBR1NfUGFydGlhbC1JbWFnZS1MaW5rZXIgPSANCitTaW1wbGVUZW1wbGF0ZV9wYXJ0aWFsSW1hZ2UvJChNT0RFX0RJUikvJSA6IERFQlVHRkxBR1NfTGlicmFyaWFuID0gDQorU2ltcGxlVGVtcGxhdGVfcGFydGlhbEltYWdlLyQoTU9ERV9ESVIpLyUgOiBERUJVR0ZMQUdTX0Fzc2VtYmxlciA9IC1nDQorZWxzZQ0KK1NpbXBsZVRlbXBsYXRlX3BhcnRpYWxJbWFnZS8kKE1PREVfRElSKS8lIDogREVCVUdGTEFHU19DLUNvbXBpbGVyID0gLU8yIC1mc3RyZW5ndGgtcmVkdWNlIC1mbm8tYnVpbHRpbg0KK1NpbXBsZVRlbXBsYXRlX3BhcnRpYWxJbWFnZS8kKE1PREVfRElSKS8lIDogREVCVUdGTEFHU19DKystQ29tcGlsZXIgPSAtTzIgLWZzdHJlbmd0aC1yZWR1Y2UgLWZuby1idWlsdGluDQorU2ltcGxlVGVtcGxhdGVfcGFydGlhbEltYWdlLyQoTU9ERV9ESVIpLyUgOiBERUJVR0ZMQUdTX0xpbmtlciA9IC1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4NCitTaW1wbGVUZW1wbGF0ZV9wYXJ0aWFsSW1hZ2UvJChNT0RFX0RJUikvJSA6IERFQlVHRkxBR1NfUGFydGlhbC1JbWFnZS1MaW5rZXIgPSANCitTaW1wbGVUZW1wbGF0ZV9wYXJ0aWFsSW1hZ2UvJChNT0RFX0RJUikvJSA6IERFQlVHRkxBR1NfTGlicmFyaWFuID0gDQorU2ltcGxlVGVtcGxhdGVfcGFydGlhbEltYWdlLyQoTU9ERV9ESVIpLyUgOiBERUJVR0ZMQUdTX0Fzc2VtYmxlciA9IC1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4NCitlbmRpZg0KK1NpbXBsZVRlbXBsYXRlX3BhcnRpYWxJbWFnZS8kKE1PREVfRElSKS8lIDogSURFX0lOQ0xVREVTID0gLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2ggLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2gvV1BJTGliIC1JJChXSU5EX0JBU0UpL3RhcmdldC9oL3dybi9jb3JlaXAgDQorU2ltcGxlVGVtcGxhdGVfcGFydGlhbEltYWdlLyQoTU9ERV9ESVIpLyUgOiBJREVfTElCUkFSSUVTID0gJChXSU5EX0JBU0UpL3RhcmdldC9saWIvV1BJTGliLmEgDQorU2ltcGxlVGVtcGxhdGVfcGFydGlhbEltYWdlLyQoTU9ERV9ESVIpLyUgOiBJREVfREVGSU5FUyA9IA0KK1NpbXBsZVRlbXBsYXRlX3BhcnRpYWxJbWFnZS8kKE1PREVfRElSKS8lIDogUFJPSkVDVF9UWVBFID0gREtNDQorU2ltcGxlVGVtcGxhdGVfcGFydGlhbEltYWdlLyQoTU9ERV9ESVIpLyUgOiBERUZJTkVTID0gDQorU2ltcGxlVGVtcGxhdGVfcGFydGlhbEltYWdlLyQoTU9ERV9ESVIpLyUgOiBFWFBBTkRfREJHID0gMA0KK1NpbXBsZVRlbXBsYXRlX3BhcnRpYWxJbWFnZS8kKE1PREVfRElSKS8lIDogVlhfQ1BVX0ZBTUlMWSA9IHBwYw0KK1NpbXBsZVRlbXBsYXRlX3BhcnRpYWxJbWFnZS8kKE1PREVfRElSKS8lIDogQ1BVID0gUFBDNjAzDQorU2ltcGxlVGVtcGxhdGVfcGFydGlhbEltYWdlLyQoTU9ERV9ESVIpLyUgOiBUT09MX0ZBTUlMWSA9IGdudQ0KK1NpbXBsZVRlbXBsYXRlX3BhcnRpYWxJbWFnZS8kKE1PREVfRElSKS8lIDogVE9PTCA9IGdudQ0KK1NpbXBsZVRlbXBsYXRlX3BhcnRpYWxJbWFnZS8kKE1PREVfRElSKS8lIDogVE9PTF9QQVRIID0gDQorU2ltcGxlVGVtcGxhdGVfcGFydGlhbEltYWdlLyQoTU9ERV9ESVIpLyUgOiBDQ19BUkNIX1NQRUMgPSAtbWNwdT02MDMgLW1zdHJpY3QtYWxpZ24gLW1uby1pbXBsaWNpdC1mcCAtbWxvbmdjYWxsDQorU2ltcGxlVGVtcGxhdGVfcGFydGlhbEltYWdlLyQoTU9ERV9ESVIpLyUgOiBMSUJQQVRIID0gDQorU2ltcGxlVGVtcGxhdGVfcGFydGlhbEltYWdlLyQoTU9ERV9ESVIpLyUgOiBMSUJTID0gDQorU2ltcGxlVGVtcGxhdGVfcGFydGlhbEltYWdlLyQoTU9ERV9ESVIpLyUgOiBPQkpfRElSIDo9IFNpbXBsZVRlbXBsYXRlX3BhcnRpYWxJbWFnZS8kKE1PREVfRElSKQ0KKw0KK1NpbXBsZVRlbXBsYXRlX3BhcnRpYWxJbWFnZS8kKE1PREVfRElSKS9PYmplY3RzL1Zpc2lvblNhbXBsZTIwMTMvVmlzaW9uU2FtcGxlMjAxMy5vIDogJChQUkpfUk9PVF9ESVIpL1Zpc2lvblNhbXBsZTIwMTMuY3BwICQoRk9SQ0VfRklMRV9CVUlMRCkNCisJJChUUkFDRV9GTEFHKWlmIFsgISAtZCAiYGRpcm5hbWUgIiRAImAiIF07IHRoZW4gbWtkaXIgLXAgImBkaXJuYW1lICIkQCJgIjsgZmk7ZWNobyAiYnVpbGRpbmcgJEAiOyAkKFRPT0xfUEFUSCljY3BwYyAkKERFQlVHRkxBR1NfQysrLUNvbXBpbGVyKSAkKENDX0FSQ0hfU1BFQykgLWFuc2kgLVdhbGwgIC1NRCAtTVAgLW1sb25nY2FsbCAkKEFEREVEX0MrK0ZMQUdTKSAkKElERV9JTkNMVURFUykgJChBRERFRF9JTkNMVURFUykgLURDUFU9JChDUFUpIC1EVE9PTF9GQU1JTFk9JChUT09MX0ZBTUlMWSkgLURUT09MPSQoVE9PTCkgLURfV1JTX0tFUk5FTCAgICQoREVGSU5FUykgLW8gIiRAIiAtYyAiJDwiDQorDQorDQorT0JKRUNUU19TaW1wbGVUZW1wbGF0ZV9wYXJ0aWFsSW1hZ2UgPSBTaW1wbGVUZW1wbGF0ZV9wYXJ0aWFsSW1hZ2UvJChNT0RFX0RJUikvT2JqZWN0cy9WaXNpb25TYW1wbGUyMDEzL1Zpc2lvblNhbXBsZTIwMTMubw0KKw0KK1NpbXBsZVRlbXBsYXRlX3BhcnRpYWxJbWFnZS8kKE1PREVfRElSKS9TaW1wbGVUZW1wbGF0ZV9wYXJ0aWFsSW1hZ2UubyA6ICQoT0JKRUNUU19TaW1wbGVUZW1wbGF0ZV9wYXJ0aWFsSW1hZ2UpDQorCSQoVFJBQ0VfRkxBRylpZiBbICEgLWQgImBkaXJuYW1lICIkQCJgIiBdOyB0aGVuIG1rZGlyIC1wICJgZGlybmFtZSAiJEAiYCI7IGZpO2VjaG8gImJ1aWxkaW5nICRAIjsgJChUT09MX1BBVEgpY2NwcGMgLXIgLW5vc3RkbGliIC1XbCwtWCAgLW8gIiRAIiAkKE9CSkVDVFNfU2ltcGxlVGVtcGxhdGVfcGFydGlhbEltYWdlKSAkKExJQlBBVEgpICQoTElCUykgJChBRERFRF9MSUJQQVRIKSAkKEFEREVEX0xJQlMpICAmJiBpZiBbICIkKEVYUEFORF9EQkcpIiA9ICIxIiBdOyB0aGVuIHBsaW5rICIkQCI7ZmkNCisNCitTaW1wbGVUZW1wbGF0ZV9wYXJ0aWFsSW1hZ2UvJChNT0RFX0RJUikvU2ltcGxlVGVtcGxhdGVfcGFydGlhbEltYWdlX2NvbXBpbGVfZmlsZSA6ICQoRklMRSkgOw0KKw0KK19jbGVhbiA6OiBTaW1wbGVUZW1wbGF0ZV9wYXJ0aWFsSW1hZ2UvJChNT0RFX0RJUikvU2ltcGxlVGVtcGxhdGVfcGFydGlhbEltYWdlX2NsZWFuDQorDQorU2ltcGxlVGVtcGxhdGVfcGFydGlhbEltYWdlLyQoTU9ERV9ESVIpL1NpbXBsZVRlbXBsYXRlX3BhcnRpYWxJbWFnZV9jbGVhbiA6IA0KKwkkKFRSQUNFX0ZMQUcpaWYgWyAtZCAiU2ltcGxlVGVtcGxhdGVfcGFydGlhbEltYWdlIiBdOyB0aGVuIGNkICJTaW1wbGVUZW1wbGF0ZV9wYXJ0aWFsSW1hZ2UiOyBybSAtcmYgJChNT0RFX0RJUik7IGZpDQorDQorZm9yY2UgOiANCisNCitERVBfRklMRVMgOj0gU2ltcGxlVGVtcGxhdGVfcGFydGlhbEltYWdlLyQoTU9ERV9ESVIpL09iamVjdHMvVmlzaW9uU2FtcGxlMjAxMy9WaXNpb25TYW1wbGUyMDEzLmQNCistaW5jbHVkZSAkKERFUF9GSUxFUykNCisNCisNCisNCistaW5jbHVkZSAkKFBSSl9ST09UX0RJUikvKi5tYWtlZmlsZQ0KKw0KKy1pbmNsdWRlICoubWFrZWZpbGUNCisNCittYWluX2FsbCA6IGV4dGVybmFsX2J1aWxkICQoUFJPSkVDVF9UQVJHRVRTKQ0KKwlAZWNobyAibWFrZTogYnVpbHQgdGFyZ2V0cyBvZiBgcHdkYCINCisNCisjIGVudHJ5IHBvaW50IGZvciBleHRlbmRpbmcgdGhlIGJ1aWxkDQorZXh0ZXJuYWxfYnVpbGQgOjoNCisJQGVjaG8gIiINCisNCisjIG1haW4gZW50cnkgcG9pbnQgZm9yIHByZSBwcm9jZXNzaW5nIHByaW9yIHRvIHRoZSBidWlsZA0KK3ByZV9idWlsZCA6OiAkKFBSRV9CVUlMRF9TVEVQKSBnZW5lcmF0ZV9zb3VyY2VzDQorCUBlY2hvICIiDQorDQorIyBlbnRyeSBwb2ludCBmb3IgZ2VuZXJhdGluZyBzb3VyY2VzIHByaW9yIHRvIHRoZSBidWlsZA0KK2dlbmVyYXRlX3NvdXJjZXMgOjoNCisJQGVjaG8gIiINCisNCisjIG1haW4gZW50cnkgcG9pbnQgZm9yIHBvc3QgcHJvY2Vzc2luZyBhZnRlciB0aGUgYnVpbGQNCitwb3N0X2J1aWxkIDo6ICQoUE9TVF9CVUlMRF9TVEVQKSBkZXBsb3lfb3V0cHV0DQorCUBlY2hvICIiDQorDQorIyBlbnRyeSBwb2ludCBmb3IgZGVwbG95aW5nIG91dHB1dCBhZnRlciB0aGUgYnVpbGQNCitkZXBsb3lfb3V0cHV0IDo6DQorCUBlY2hvICIiDQorDQorY2xlYW4gOjogZXh0ZXJuYWxfY2xlYW4gJChDTEVBTl9TVEVQKSBfY2xlYW4NCisNCisjIGVudHJ5IHBvaW50IGZvciBleHRlbmRpbmcgdGhlIGJ1aWxkIGNsZWFuDQorZXh0ZXJuYWxfY2xlYW4gOjoNCisJQGVjaG8gIiINCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vVmlzaW9uU2FtcGxlMjAxMy9WaXNpb25JbWFnZXMvMjAxM1Zpc2lvblNjcmlwdC52YXNjciBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9WaXNpb25TYW1wbGUyMDEzL1Zpc2lvbkltYWdlcy8yMDEzVmlzaW9uU2NyaXB0LnZhc2NyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2MGM5ZGEKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vVmlzaW9uU2FtcGxlMjAxMy9WaXNpb25JbWFnZXMvMjAxM1Zpc2lvblNjcmlwdC52YXNjcgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vVmlzaW9uU2FtcGxlMjAxMy9WaXNpb25JbWFnZXMvRmlyc3QgQ2hvaWNlIEdyZWVuIEltYWdlcy9GdWxsRmllbGRfU21hbGxHcmVlbi5qcGcgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vVmlzaW9uU2FtcGxlMjAxMy9WaXNpb25JbWFnZXMvRmlyc3QgQ2hvaWNlIEdyZWVuIEltYWdlcy9GdWxsRmllbGRfU21hbGxHcmVlbi5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTc3NjQ2ZQotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9WaXNpb25TYW1wbGUyMDEzL1Zpc2lvbkltYWdlcy9GaXJzdCBDaG9pY2UgR3JlZW4gSW1hZ2VzL0Z1bGxGaWVsZF9TbWFsbEdyZWVuLmpwZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vVmlzaW9uU2FtcGxlMjAxMy9WaXNpb25JbWFnZXMvRmlyc3QgQ2hvaWNlIEdyZWVuIEltYWdlcy9IeWJyaWRMaW5lX1NtYWxsR3JlZW4yLmpwZyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9WaXNpb25TYW1wbGUyMDEzL1Zpc2lvbkltYWdlcy9GaXJzdCBDaG9pY2UgR3JlZW4gSW1hZ2VzL0h5YnJpZExpbmVfU21hbGxHcmVlbjIuanBnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4Y2NkNmMKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vVmlzaW9uU2FtcGxlMjAxMy9WaXNpb25JbWFnZXMvRmlyc3QgQ2hvaWNlIEdyZWVuIEltYWdlcy9IeWJyaWRMaW5lX1NtYWxsR3JlZW4yLmpwZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vVmlzaW9uU2FtcGxlMjAxMy9WaXNpb25JbWFnZXMvRmlyc3QgQ2hvaWNlIEdyZWVuIEltYWdlcy9IeWJyaWRMaW5lX1NtYWxsR3JlZW4zLmpwZyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9WaXNpb25TYW1wbGUyMDEzL1Zpc2lvbkltYWdlcy9GaXJzdCBDaG9pY2UgR3JlZW4gSW1hZ2VzL0h5YnJpZExpbmVfU21hbGxHcmVlbjMuanBnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4NTYzMGMKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vVmlzaW9uU2FtcGxlMjAxMy9WaXNpb25JbWFnZXMvRmlyc3QgQ2hvaWNlIEdyZWVuIEltYWdlcy9IeWJyaWRMaW5lX1NtYWxsR3JlZW4zLmpwZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vVmlzaW9uU2FtcGxlMjAxMy9WaXNpb25JbWFnZXMvRmlyc3QgQ2hvaWNlIEdyZWVuIEltYWdlcy9IeWJyaWRMaW5lX1NtYWxsR3JlZW40LmpwZyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9WaXNpb25TYW1wbGUyMDEzL1Zpc2lvbkltYWdlcy9GaXJzdCBDaG9pY2UgR3JlZW4gSW1hZ2VzL0h5YnJpZExpbmVfU21hbGxHcmVlbjQuanBnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyNzQwMjgKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vVmlzaW9uU2FtcGxlMjAxMy9WaXNpb25JbWFnZXMvRmlyc3QgQ2hvaWNlIEdyZWVuIEltYWdlcy9IeWJyaWRMaW5lX1NtYWxsR3JlZW40LmpwZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vVmlzaW9uU2FtcGxlMjAxMy9WaXNpb25JbWFnZXMvRmlyc3QgQ2hvaWNlIEdyZWVuIEltYWdlcy9NaWRmaWVsZF9TbWFsbEdyZWVuMi5qcGcgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vVmlzaW9uU2FtcGxlMjAxMy9WaXNpb25JbWFnZXMvRmlyc3QgQ2hvaWNlIEdyZWVuIEltYWdlcy9NaWRmaWVsZF9TbWFsbEdyZWVuMi5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDliNjlhMAotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9WaXNpb25TYW1wbGUyMDEzL1Zpc2lvbkltYWdlcy9GaXJzdCBDaG9pY2UgR3JlZW4gSW1hZ2VzL01pZGZpZWxkX1NtYWxsR3JlZW4yLmpwZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vVmlzaW9uU2FtcGxlMjAxMy9WaXNpb25JbWFnZXMvRmlyc3QgQ2hvaWNlIEdyZWVuIEltYWdlcy9NaWRmaWVsZF9TbWFsbEdyZWVuMy5qcGcgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vVmlzaW9uU2FtcGxlMjAxMy9WaXNpb25JbWFnZXMvRmlyc3QgQ2hvaWNlIEdyZWVuIEltYWdlcy9NaWRmaWVsZF9TbWFsbEdyZWVuMy5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzc5ZGNmNAotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9WaXNpb25TYW1wbGUyMDEzL1Zpc2lvbkltYWdlcy9GaXJzdCBDaG9pY2UgR3JlZW4gSW1hZ2VzL01pZGZpZWxkX1NtYWxsR3JlZW4zLmpwZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vVmlzaW9uU2FtcGxlMjAxMy9WaXNpb25JbWFnZXMvRmlyc3QgQ2hvaWNlIEdyZWVuIEltYWdlcy9NaWRmaWVsZF9TbWFsbEdyZWVuNC5qcGcgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vVmlzaW9uU2FtcGxlMjAxMy9WaXNpb25JbWFnZXMvRmlyc3QgQ2hvaWNlIEdyZWVuIEltYWdlcy9NaWRmaWVsZF9TbWFsbEdyZWVuNC5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2JlYjRmNwotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9WaXNpb25TYW1wbGUyMDEzL1Zpc2lvbkltYWdlcy9GaXJzdCBDaG9pY2UgR3JlZW4gSW1hZ2VzL01pZGZpZWxkX1NtYWxsR3JlZW40LmpwZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vVmlzaW9uU2FtcGxlMjAxMy9WaXNpb25JbWFnZXMvRmlyc3QgQ2hvaWNlIEdyZWVuIEltYWdlcy9PcHBMaW5lX1NtYWxsR3JlZW4yLmpwZyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9WaXNpb25TYW1wbGUyMDEzL1Zpc2lvbkltYWdlcy9GaXJzdCBDaG9pY2UgR3JlZW4gSW1hZ2VzL09wcExpbmVfU21hbGxHcmVlbjIuanBnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0OWMyOWQKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vVmlzaW9uU2FtcGxlMjAxMy9WaXNpb25JbWFnZXMvRmlyc3QgQ2hvaWNlIEdyZWVuIEltYWdlcy9PcHBMaW5lX1NtYWxsR3JlZW4yLmpwZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vVmlzaW9uU2FtcGxlMjAxMy9WaXNpb25JbWFnZXMvRmlyc3QgQ2hvaWNlIEdyZWVuIEltYWdlcy9QeXJhbWlkUmlnaHRfU21hbGxHcmVlbjIuanBnIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvdnh3b3Jrcy02LjMvdGFyZ2V0L3NyYy9kZW1vL1Zpc2lvblNhbXBsZTIwMTMvVmlzaW9uSW1hZ2VzL0ZpcnN0IENob2ljZSBHcmVlbiBJbWFnZXMvUHlyYW1pZFJpZ2h0X1NtYWxsR3JlZW4yLmpwZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMWIxYjZhCi0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvdnh3b3Jrcy02LjMvdGFyZ2V0L3NyYy9kZW1vL1Zpc2lvblNhbXBsZTIwMTMvVmlzaW9uSW1hZ2VzL0ZpcnN0IENob2ljZSBHcmVlbiBJbWFnZXMvUHlyYW1pZFJpZ2h0X1NtYWxsR3JlZW4yLmpwZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vVmlzaW9uU2FtcGxlMjAxMy9WaXNpb25JbWFnZXMvT3RoZXIgSW1hZ2VzLzQ1aW5fRG91YmxlR3JlZW4uanBnIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvdnh3b3Jrcy02LjMvdGFyZ2V0L3NyYy9kZW1vL1Zpc2lvblNhbXBsZTIwMTMvVmlzaW9uSW1hZ2VzL090aGVyIEltYWdlcy80NWluX0RvdWJsZUdyZWVuLmpwZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NGFhY2RmCi0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvdnh3b3Jrcy02LjMvdGFyZ2V0L3NyYy9kZW1vL1Zpc2lvblNhbXBsZTIwMTMvVmlzaW9uSW1hZ2VzL090aGVyIEltYWdlcy80NWluX0RvdWJsZUdyZWVuLmpwZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vVmlzaW9uU2FtcGxlMjAxMy9WaXNpb25JbWFnZXMvT3RoZXIgSW1hZ2VzLzU3aW5MYXJnZVRhcmdldF9Eb3VibGVHcmVlbkJLLmpwZyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9WaXNpb25TYW1wbGUyMDEzL1Zpc2lvbkltYWdlcy9PdGhlciBJbWFnZXMvNTdpbkxhcmdlVGFyZ2V0X0RvdWJsZUdyZWVuQksuanBnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzNDQ4YTcKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vVmlzaW9uU2FtcGxlMjAxMy9WaXNpb25JbWFnZXMvT3RoZXIgSW1hZ2VzLzU3aW5MYXJnZVRhcmdldF9Eb3VibGVHcmVlbkJLLmpwZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vVmlzaW9uU2FtcGxlMjAxMy9WaXNpb25JbWFnZXMvT3RoZXIgSW1hZ2VzL0Z1bGxGaWVsZF9Eb3VibGVHcmVlbkJLMy5qcGcgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vVmlzaW9uU2FtcGxlMjAxMy9WaXNpb25JbWFnZXMvT3RoZXIgSW1hZ2VzL0Z1bGxGaWVsZF9Eb3VibGVHcmVlbkJLMy5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDlmZDY5MQotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9WaXNpb25TYW1wbGUyMDEzL1Zpc2lvbkltYWdlcy9PdGhlciBJbWFnZXMvRnVsbEZpZWxkX0RvdWJsZUdyZWVuQkszLmpwZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vVmlzaW9uU2FtcGxlMjAxMy9WaXNpb25JbWFnZXMvT3RoZXIgSW1hZ2VzL0Z1bGxGaWVsZF9Eb3VibGVXaGl0ZUJLLmpwZyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9WaXNpb25TYW1wbGUyMDEzL1Zpc2lvbkltYWdlcy9PdGhlciBJbWFnZXMvRnVsbEZpZWxkX0RvdWJsZVdoaXRlQksuanBnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5MDRiMWUKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vVmlzaW9uU2FtcGxlMjAxMy9WaXNpb25JbWFnZXMvT3RoZXIgSW1hZ2VzL0Z1bGxGaWVsZF9Eb3VibGVXaGl0ZUJLLmpwZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vVmlzaW9uU2FtcGxlMjAxMy9WaXNpb25JbWFnZXMvT3RoZXIgSW1hZ2VzL0h5YnJpZExpbmVfRG91YmxlR3JlZW5CSzIuanBnIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvdnh3b3Jrcy02LjMvdGFyZ2V0L3NyYy9kZW1vL1Zpc2lvblNhbXBsZTIwMTMvVmlzaW9uSW1hZ2VzL090aGVyIEltYWdlcy9IeWJyaWRMaW5lX0RvdWJsZUdyZWVuQksyLmpwZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDQ0YmI4Ci0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvdnh3b3Jrcy02LjMvdGFyZ2V0L3NyYy9kZW1vL1Zpc2lvblNhbXBsZTIwMTMvVmlzaW9uSW1hZ2VzL090aGVyIEltYWdlcy9IeWJyaWRMaW5lX0RvdWJsZUdyZWVuQksyLmpwZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vVmlzaW9uU2FtcGxlMjAxMy9WaXNpb25JbWFnZXMvT3RoZXIgSW1hZ2VzL0h5YnJpZExpbmVfRG91YmxlR3JlZW5CSzMuanBnIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvdnh3b3Jrcy02LjMvdGFyZ2V0L3NyYy9kZW1vL1Zpc2lvblNhbXBsZTIwMTMvVmlzaW9uSW1hZ2VzL090aGVyIEltYWdlcy9IeWJyaWRMaW5lX0RvdWJsZUdyZWVuQkszLmpwZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OTYxYjEzCi0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvdnh3b3Jrcy02LjMvdGFyZ2V0L3NyYy9kZW1vL1Zpc2lvblNhbXBsZTIwMTMvVmlzaW9uSW1hZ2VzL090aGVyIEltYWdlcy9IeWJyaWRMaW5lX0RvdWJsZUdyZWVuQkszLmpwZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vVmlzaW9uU2FtcGxlMjAxMy9WaXNpb25JbWFnZXMvT3RoZXIgSW1hZ2VzL0h5YnJpZExpbmVfRG91YmxlR3JlZW5CSzQuanBnIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvdnh3b3Jrcy02LjMvdGFyZ2V0L3NyYy9kZW1vL1Zpc2lvblNhbXBsZTIwMTMvVmlzaW9uSW1hZ2VzL090aGVyIEltYWdlcy9IeWJyaWRMaW5lX0RvdWJsZUdyZWVuQks0LmpwZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTZlNDRhCi0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvdnh3b3Jrcy02LjMvdGFyZ2V0L3NyYy9kZW1vL1Zpc2lvblNhbXBsZTIwMTMvVmlzaW9uSW1hZ2VzL090aGVyIEltYWdlcy9IeWJyaWRMaW5lX0RvdWJsZUdyZWVuQks0LmpwZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vVmlzaW9uU2FtcGxlMjAxMy9WaXNpb25JbWFnZXMvT3RoZXIgSW1hZ2VzL0h5YnJpZExpbmVfRG91YmxlV2hpdGVCSy5qcGcgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vVmlzaW9uU2FtcGxlMjAxMy9WaXNpb25JbWFnZXMvT3RoZXIgSW1hZ2VzL0h5YnJpZExpbmVfRG91YmxlV2hpdGVCSy5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzUyYzlkYQotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9WaXNpb25TYW1wbGUyMDEzL1Zpc2lvbkltYWdlcy9PdGhlciBJbWFnZXMvSHlicmlkTGluZV9Eb3VibGVXaGl0ZUJLLmpwZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vVmlzaW9uU2FtcGxlMjAxMy9WaXNpb25JbWFnZXMvT3RoZXIgSW1hZ2VzL0h5YnJpZExpbmVfRG91YmxlV2hpdGVCSzIuanBnIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvdnh3b3Jrcy02LjMvdGFyZ2V0L3NyYy9kZW1vL1Zpc2lvblNhbXBsZTIwMTMvVmlzaW9uSW1hZ2VzL090aGVyIEltYWdlcy9IeWJyaWRMaW5lX0RvdWJsZVdoaXRlQksyLmpwZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTY0MjU2Ci0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvdnh3b3Jrcy02LjMvdGFyZ2V0L3NyYy9kZW1vL1Zpc2lvblNhbXBsZTIwMTMvVmlzaW9uSW1hZ2VzL090aGVyIEltYWdlcy9IeWJyaWRMaW5lX0RvdWJsZVdoaXRlQksyLmpwZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vVmlzaW9uU2FtcGxlMjAxMy9WaXNpb25JbWFnZXMvT3RoZXIgSW1hZ2VzL0h5YnJpZExpbmVfRG91YmxlV2hpdGVCSzMuanBnIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvdnh3b3Jrcy02LjMvdGFyZ2V0L3NyYy9kZW1vL1Zpc2lvblNhbXBsZTIwMTMvVmlzaW9uSW1hZ2VzL090aGVyIEltYWdlcy9IeWJyaWRMaW5lX0RvdWJsZVdoaXRlQkszLmpwZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZmY1OWM3Ci0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvdnh3b3Jrcy02LjMvdGFyZ2V0L3NyYy9kZW1vL1Zpc2lvblNhbXBsZTIwMTMvVmlzaW9uSW1hZ2VzL090aGVyIEltYWdlcy9IeWJyaWRMaW5lX0RvdWJsZVdoaXRlQkszLmpwZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vVmlzaW9uU2FtcGxlMjAxMy9WaXNpb25JbWFnZXMvT3RoZXIgSW1hZ2VzL01pZGZpZWxkX0RvdWJsZUdyZWVuQksyLmpwZyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9WaXNpb25TYW1wbGUyMDEzL1Zpc2lvbkltYWdlcy9PdGhlciBJbWFnZXMvTWlkZmllbGRfRG91YmxlR3JlZW5CSzIuanBnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3MDNkMmUKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vVmlzaW9uU2FtcGxlMjAxMy9WaXNpb25JbWFnZXMvT3RoZXIgSW1hZ2VzL01pZGZpZWxkX0RvdWJsZUdyZWVuQksyLmpwZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vVmlzaW9uU2FtcGxlMjAxMy9WaXNpb25JbWFnZXMvT3RoZXIgSW1hZ2VzL01pZGZpZWxkX0RvdWJsZVdoaXRlQksuanBnIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvdnh3b3Jrcy02LjMvdGFyZ2V0L3NyYy9kZW1vL1Zpc2lvblNhbXBsZTIwMTMvVmlzaW9uSW1hZ2VzL090aGVyIEltYWdlcy9NaWRmaWVsZF9Eb3VibGVXaGl0ZUJLLmpwZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MGY0YmRlCi0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvdnh3b3Jrcy02LjMvdGFyZ2V0L3NyYy9kZW1vL1Zpc2lvblNhbXBsZTIwMTMvVmlzaW9uSW1hZ2VzL090aGVyIEltYWdlcy9NaWRmaWVsZF9Eb3VibGVXaGl0ZUJLLmpwZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vVmlzaW9uU2FtcGxlMjAxMy9WaXNpb25JbWFnZXMvT3RoZXIgSW1hZ2VzL01pZGZpZWxkX0RvdWJsZVdoaXRlQksyLmpwZyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9WaXNpb25TYW1wbGUyMDEzL1Zpc2lvbkltYWdlcy9PdGhlciBJbWFnZXMvTWlkZmllbGRfRG91YmxlV2hpdGVCSzIuanBnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5OWE2Y2UKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vVmlzaW9uU2FtcGxlMjAxMy9WaXNpb25JbWFnZXMvT3RoZXIgSW1hZ2VzL01pZGZpZWxkX0RvdWJsZVdoaXRlQksyLmpwZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vVmlzaW9uU2FtcGxlMjAxMy9WaXNpb25JbWFnZXMvT3RoZXIgSW1hZ2VzL01pZGZpZWxkX0RvdWJsZVdoaXRlQkszLmpwZyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9WaXNpb25TYW1wbGUyMDEzL1Zpc2lvbkltYWdlcy9PdGhlciBJbWFnZXMvTWlkZmllbGRfRG91YmxlV2hpdGVCSzMuanBnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4MWZkM2IKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vVmlzaW9uU2FtcGxlMjAxMy9WaXNpb25JbWFnZXMvT3RoZXIgSW1hZ2VzL01pZGZpZWxkX0RvdWJsZVdoaXRlQkszLmpwZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vVmlzaW9uU2FtcGxlMjAxMy9WaXNpb25JbWFnZXMvT3RoZXIgSW1hZ2VzL09wcExpbmVfRG91YmxlR3JlZW5CSzIuanBnIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvdnh3b3Jrcy02LjMvdGFyZ2V0L3NyYy9kZW1vL1Zpc2lvblNhbXBsZTIwMTMvVmlzaW9uSW1hZ2VzL090aGVyIEltYWdlcy9PcHBMaW5lX0RvdWJsZUdyZWVuQksyLmpwZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MjdjMTg0Ci0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvdnh3b3Jrcy02LjMvdGFyZ2V0L3NyYy9kZW1vL1Zpc2lvblNhbXBsZTIwMTMvVmlzaW9uSW1hZ2VzL090aGVyIEltYWdlcy9PcHBMaW5lX0RvdWJsZUdyZWVuQksyLmpwZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vVmlzaW9uU2FtcGxlMjAxMy9WaXNpb25JbWFnZXMvT3RoZXIgSW1hZ2VzL09wcExpbmVfRG91YmxlV2hpdGVCSy5qcGcgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vVmlzaW9uU2FtcGxlMjAxMy9WaXNpb25JbWFnZXMvT3RoZXIgSW1hZ2VzL09wcExpbmVfRG91YmxlV2hpdGVCSy5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmFlNDE2NwotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9WaXNpb25TYW1wbGUyMDEzL1Zpc2lvbkltYWdlcy9PdGhlciBJbWFnZXMvT3BwTGluZV9Eb3VibGVXaGl0ZUJLLmpwZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vVmlzaW9uU2FtcGxlMjAxMy9WaXNpb25JbWFnZXMvT3RoZXIgSW1hZ2VzL09wcExpbmVfRG91YmxlV2hpdGVCSzIuanBnIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvdnh3b3Jrcy02LjMvdGFyZ2V0L3NyYy9kZW1vL1Zpc2lvblNhbXBsZTIwMTMvVmlzaW9uSW1hZ2VzL090aGVyIEltYWdlcy9PcHBMaW5lX0RvdWJsZVdoaXRlQksyLmpwZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTJhMjg0Ci0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvdnh3b3Jrcy02LjMvdGFyZ2V0L3NyYy9kZW1vL1Zpc2lvblNhbXBsZTIwMTMvVmlzaW9uSW1hZ2VzL090aGVyIEltYWdlcy9PcHBMaW5lX0RvdWJsZVdoaXRlQksyLmpwZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vVmlzaW9uU2FtcGxlMjAxMy9WaXNpb25JbWFnZXMvT3RoZXIgSW1hZ2VzL1B5cmFtaWRGcm9udF9Eb3VibGVXaGl0ZUJLLmpwZyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9WaXNpb25TYW1wbGUyMDEzL1Zpc2lvbkltYWdlcy9PdGhlciBJbWFnZXMvUHlyYW1pZEZyb250X0RvdWJsZVdoaXRlQksuanBnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjZjk2NTEKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vVmlzaW9uU2FtcGxlMjAxMy9WaXNpb25JbWFnZXMvT3RoZXIgSW1hZ2VzL1B5cmFtaWRGcm9udF9Eb3VibGVXaGl0ZUJLLmpwZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vVmlzaW9uU2FtcGxlMjAxMy9WaXNpb25JbWFnZXMvT3RoZXIgSW1hZ2VzL1B5cmFtaWRGcm9udF9Eb3VibGVXaGl0ZUJLMi5qcGcgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vVmlzaW9uU2FtcGxlMjAxMy9WaXNpb25JbWFnZXMvT3RoZXIgSW1hZ2VzL1B5cmFtaWRGcm9udF9Eb3VibGVXaGl0ZUJLMi5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjk1ZGExOAotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9WaXNpb25TYW1wbGUyMDEzL1Zpc2lvbkltYWdlcy9PdGhlciBJbWFnZXMvUHlyYW1pZEZyb250X0RvdWJsZVdoaXRlQksyLmpwZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vVmlzaW9uU2FtcGxlMjAxMy9WaXNpb25JbWFnZXMvT3RoZXIgSW1hZ2VzL1B5cmFtaWRGcm9udF9Eb3VibGVXaGl0ZUJLMy5qcGcgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vVmlzaW9uU2FtcGxlMjAxMy9WaXNpb25JbWFnZXMvT3RoZXIgSW1hZ2VzL1B5cmFtaWRGcm9udF9Eb3VibGVXaGl0ZUJLMy5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzY0MzBmYwotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9WaXNpb25TYW1wbGUyMDEzL1Zpc2lvbkltYWdlcy9PdGhlciBJbWFnZXMvUHlyYW1pZEZyb250X0RvdWJsZVdoaXRlQkszLmpwZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vVmlzaW9uU2FtcGxlMjAxMy9WaXNpb25JbWFnZXMvT3RoZXIgSW1hZ2VzL1B5cmFtaWRSaWdodF9Eb3VibGVHcmVlbkJLMi5qcGcgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vVmlzaW9uU2FtcGxlMjAxMy9WaXNpb25JbWFnZXMvT3RoZXIgSW1hZ2VzL1B5cmFtaWRSaWdodF9Eb3VibGVHcmVlbkJLMi5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODUzZWQ5OQotLS0gL2Rldi9udWxsCisrKyBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9WaXNpb25TYW1wbGUyMDEzL1Zpc2lvbkltYWdlcy9PdGhlciBJbWFnZXMvUHlyYW1pZFJpZ2h0X0RvdWJsZUdyZWVuQksyLmpwZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vVmlzaW9uU2FtcGxlMjAxMy9WaXNpb25TYW1wbGUyMDEzLmNwcCBiL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvV29ya2JlbmNoVXBkYXRlL3Z4d29ya3MtNi4zL3RhcmdldC9zcmMvZGVtby9WaXNpb25TYW1wbGUyMDEzL1Zpc2lvblNhbXBsZTIwMTMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyMjhiZDkKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vVmlzaW9uU2FtcGxlMjAxMy9WaXNpb25TYW1wbGUyMDEzLmNwcApAQCAtMCwwICsxLDMwMCBAQAorI2luY2x1ZGUgIldQSUxpYi5oIg0KKyNpbmNsdWRlICJWaXNpb24vUkdCSW1hZ2UuaCINCisjaW5jbHVkZSAiVmlzaW9uL0JpbmFyeUltYWdlLmgiDQorI2luY2x1ZGUgIk1hdGguaCINCisgDQorLyoqDQorICogU2FtcGxlIHByb2dyYW0gdG8gdXNlIE5JVmlzaW9uIHRvIGZpbmQgcmVjdGFuZ2xlcyBpbiB0aGUgc2NlbmUgdGhhdCBhcmUgaWxsdW1pbmF0ZWQNCisgKiBieSBhIExFRCByaW5nIGxpZ2h0IChzaW1pbGFyIHRvIHRoZSBtb2RlbCBmcm9tIEZJUlNUQ2hvaWNlKS4gVGhlIGNhbWVyYSBzZW5zaXRpdml0eQ0KKyAqIGlzIHNldCB2ZXJ5IGxvdyBzbyBhcyB0byBvbmx5IHNob3cgbGlnaHQgc291cmNlcyBhbmQgcmVtb3ZlIGFueSBkaXN0cmFjdGluZyBwYXJ0cw0KKyAqIG9mIHRoZSBpbWFnZS4NCisgKiANCisgKiBUaGUgQ3JpdGVyaWFDb2xsZWN0aW9uIGlzIHRoZSBzZXQgb2YgY3JpdGVyaWEgdGhhdCBpcyB1c2VkIHRvIGZpbHRlciB0aGUgc2V0IG9mDQorICogcmVjdGFuZ2xlcyB0aGF0IGFyZSBkZXRlY3RlZC4gSW4gdGhpcyBleGFtcGxlIHdlJ3JlIGxvb2tpbmcgZm9yIHJlY3RhbmdsZXMgd2l0aA0KKyAqIGEgbWluaW11bSB3aWR0aCBvZiAzMCBwaXhlbHMgYW5kIG1heGltdW0gb2YgNDAwIHBpeGVscy4NCisgKiANCisgKiBUaGUgYWxnb3JpdGhtIGZpcnN0IGRvZXMgYSBjb2xvciB0aHJlc2hvbGQgb3BlcmF0aW9uIHRoYXQgb25seSB0YWtlcyBvYmplY3RzIGluIHRoZQ0KKyAqIHNjZW5lIHRoYXQgaGF2ZSBhIGJyaWdodCBncmVlbiBjb2xvciBjb21wb25lbnQuIFRoZW4gYSBjb252ZXggaHVsbCBvcGVyYXRpb24gZmlsbHMgDQorICogYWxsIHRoZSByZWN0YW5nbGUgb3V0bGluZXMgKGV2ZW4gdGhlIHBhcnRpYWxseSBvY2NsdWRlZCBvbmVzKS4gVGhlbiBhIHNtYWxsIG9iamVjdCBmaWx0ZXINCisgKiByZW1vdmVzIHNtYWxsIHBhcnRpY2xlcyB0aGF0IG1pZ2h0IGJlIGNhdXNlZCBieSBncmVlbiByZWZsZWN0aW9uIHNjYXR0ZXJlZCBmcm9tIG90aGVyIA0KKyAqIHBhcnRzIG9mIHRoZSBzY2VuZS4gRmluYWxseSBhbGwgcGFydGljbGVzIGFyZSBzY29yZWQgb24gcmVjdGFuZ3VsYXJpdHksIGFzcGVjdCByYXRpbywNCisgKiBhbmQgaG9sbG93bmVzcyB0byBkZXRlcm1pbmUgaWYgdGhleSBtYXRjaCB0aGUgdGFyZ2V0Lg0KKyAqDQorICogTG9vayBpbiB0aGUgVmlzaW9uSW1hZ2VzIGRpcmVjdG9yeSBpbnNpZGUgdGhlIHByb2plY3QgdGhhdCBpcyBjcmVhdGVkIGZvciB0aGUgc2FtcGxlDQorICogaW1hZ2VzIGFzIHdlbGwgYXMgdGhlIE5JIFZpc2lvbiBBc3Npc3RhbnQgZmlsZSB0aGF0IGNvbnRhaW5zIHRoZSB2aXNpb24gY29tbWFuZA0KKyAqIGNoYWluIChvcGVuIGl0IHdpdGggdGhlIFZpc2lvbiBBc3Npc3RhbnQpDQorICovDQorDQorLy9DYW1lcmEgY29uc3RhbnRzIHVzZWQgZm9yIGRpc3RhbmNlIGNhbGN1bGF0aW9uDQorI2RlZmluZSBYX0lNQUdFX1JFUyAzMjAJCS8vWCBJbWFnZSByZXNvbHV0aW9uIGluIHBpeGVscywgc2hvdWxkIGJlIDE2MCwgMzIwIG9yIDY0MA0KKyNkZWZpbmUgVklFV19BTkdMRSA0OAkJLy9BeGlzIDIwNiBjYW1lcmENCisvLyNkZWZpbmUgVklFV19BTkdMRSA0My41ICAvL0F4aXMgTTEwMTEgY2FtZXJhDQorI2RlZmluZSBQSSAzLjE0MTU5MjY1Mw0KKw0KKy8vU2NvcmUgbGltaXRzIHVzZWQgZm9yIHRhcmdldCBpZGVudGlmaWNhdGlvbg0KKyNkZWZpbmUgUkVDVEFOR1VMQVJJVFlfTElNSVQgNjANCisjZGVmaW5lIEFTUEVDVF9SQVRJT19MSU1JVCA3NQ0KKyNkZWZpbmUgWF9FREdFX0xJTUlUIDQwDQorI2RlZmluZSBZX0VER0VfTElNSVQgNjANCisNCisvL01pbmltdW0gYXJlYSBvZiBwYXJ0aWNsZXMgdG8gYmUgY29uc2lkZXJlZA0KKyNkZWZpbmUgQVJFQV9NSU5JTVVNIDUwMA0KKw0KKy8vRWRnZSBwcm9maWxlIGNvbnN0YW50cyB1c2VkIGZvciBob2xsb3duZXNzIHNjb3JlIGNhbGN1bGF0aW9uDQorI2RlZmluZSBYTUFYU0laRSAyNA0KKyNkZWZpbmUgWE1JTlNJWkUgMjQNCisjZGVmaW5lIFlNQVhTSVpFIDI0DQorI2RlZmluZSBZTUlOU0laRSA0OA0KK2NvbnN0IGRvdWJsZSB4TWF4W1hNQVhTSVpFXSA9IHsxLCAxLCAxLCAxLCAuNSwgLjUsIC41LCAuNSwgLjUsIC41LCAuNSwgLjUsIC41LCAuNSwgLjUsIC41LCAuNSwgLjUsIC41LCAuNSwgMSwgMSwgMSwgMX07DQorY29uc3QgZG91YmxlIHhNaW5bWE1JTlNJWkVdID0gey40LCAuNiwgLjEsIC4xLCAuMSwgLjEsIC4xLCAuMSwgLjEsIC4xLCAuMSwgLjEsIC4xLCAuMSwgLjEsIC4xLCAuMSwgLjEsIC4xLCAuMSwgLjEsIC4xLCAwLjYsIDB9Ow0KK2NvbnN0IGRvdWJsZSB5TWF4W1lNQVhTSVpFXSA9IHsxLCAxLCAxLCAxLCAuNSwgLjUsIC41LCAuNSwgLjUsIC41LCAuNSwgLjUsIC41LCAuNSwgLjUsIC41LCAuNSwgLjUsIC41LCAuNSwgMSwgMSwgMSwgMX07DQorY29uc3QgZG91YmxlIHlNaW5bWU1JTlNJWkVdID0gey40LCAuNiwgLjA1LCAuMDUsIC4wNSwgLjA1LCAuMDUsIC4wNSwgLjA1LCAuMDUsIC4wNSwgLjA1LCAuMDUsIC4wNSwgLjA1LCAuMDUsIC4wNSwgLjA1LCAuMDUsIC4wNSwgLjA1LCAuMDUsDQorCQkJCQkJCQkuMDUsIC4wNSwgLjA1LCAuMDUsIC4wNSwgLjA1LCAuMDUsIC4wNSwgLjA1LCAuMDUsIC4wNSwgLjA1LCAuMDUsIC4wNSwgLjA1LCAuMDUsIC4wNSwgLjA1LCAuMDUsIC4wNSwgLjA1LCAuMDUsDQorCQkJCQkJCQkuMDUsIC4wNSwgLjYsIDB9Ow0KKw0KK2NsYXNzIFZpc2lvblNhbXBsZTIwMTIgOiBwdWJsaWMgU2ltcGxlUm9ib3QNCit7DQorCS8vU3RydWN0dXJlIHRvIHJlcHJlc2VudCB0aGUgc2NvcmVzIGZvciB0aGUgdmFyaW91cyB0ZXN0cyB1c2VkIGZvciB0YXJnZXQgaWRlbnRpZmljYXRpb24NCisJc3RydWN0IFNjb3JlcyB7DQorCQlkb3VibGUgcmVjdGFuZ3VsYXJpdHk7DQorCQlkb3VibGUgYXNwZWN0UmF0aW9Jbm5lcjsNCisJCWRvdWJsZSBhc3BlY3RSYXRpb091dGVyOw0KKwkJZG91YmxlIHhFZGdlOw0KKwkJZG91YmxlIHlFZGdlOw0KKw0KKwl9Ow0KKwkNCisJUm9ib3REcml2ZSBteVJvYm90OyAvLyByb2JvdCBkcml2ZSBzeXN0ZW0NCisJSm95c3RpY2sgc3RpY2s7IC8vIG9ubHkgam95c3RpY2sNCisJU2NvcmVzICpzY29yZXM7DQorDQorcHVibGljOg0KKwlWaXNpb25TYW1wbGUyMDEyKHZvaWQpOg0KKwkJbXlSb2JvdCgxLCAyKSwJLy8gdGhlc2UgbXVzdCBiZSBpbml0aWFsaXplZCBpbiB0aGUgc2FtZSBvcmRlcg0KKwkJc3RpY2soMSkJCS8vIGFzIHRoZXkgYXJlIGRlY2xhcmVkIGFib3ZlLg0KKwl7DQorCQlteVJvYm90LlNldEV4cGlyYXRpb24oMC4xKTsNCisJCW15Um9ib3QuU2V0U2FmZXR5RW5hYmxlZChmYWxzZSk7DQorCX0NCisNCisJLyoqDQorCSAqIEltYWdlIHByb2Nlc3NpbmcgY29kZSB0byBpZGVudGlmeSAyMDEzIFZpc2lvbiB0YXJnZXRzDQorCSAqLw0KKwl2b2lkIEF1dG9ub21vdXModm9pZCkNCisJew0KKwkJDQorCQlUaHJlc2hvbGQgdGhyZXNob2xkKDYwLCAxMDAsIDkwLCAyNTUsIDIwLCAyNTUpOwkvL0hTViB0aHJlc2hvbGQgY3JpdGVyaWEsIHJhbmdlcyBhcmUgaW4gdGhhdCBvcmRlciBpZS4gSHVlIGlzIDYwLTEwMA0KKwkJUGFydGljbGVGaWx0ZXJDcml0ZXJpYTIgY3JpdGVyaWFbXSA9IHsNCisJCQkJe0lNQVFfTVRfQVJFQSwgQVJFQV9NSU5JTVVNLCA2NTUzNSwgZmFsc2UsIGZhbHNlfQ0KKwkJfTsJCQkJCQkJCQkJCQkvL1BhcnRpY2xlIGZpbHRlciBjcml0ZXJpYSwgdXNlZCB0byBmaWx0ZXIgb3V0IHNtYWxsIHBhcnRpY2xlcw0KKwkJLy8gQXhpc0NhbWVyYSAmY2FtZXJhID0gQXhpc0NhbWVyYTo6R2V0SW5zdGFuY2UoKTsJLy9UbyB1c2UgdGhlIEF4aXMgY2FtZXJhIHVuY29tbWVudCB0aGlzIGxpbmUNCisJCQ0KKwkJd2hpbGUgKElzQXV0b25vbW91cygpICYmIElzRW5hYmxlZCgpKSB7DQorICAgICAgICAgICAgLyoqDQorICAgICAgICAgICAgICogRG8gdGhlIGltYWdlIGNhcHR1cmUgd2l0aCB0aGUgY2FtZXJhIGFuZCBhcHBseSB0aGUgYWxnb3JpdGhtIGRlc2NyaWJlZCBhYm92ZS4gVGhpcw0KKyAgICAgICAgICAgICAqIHNhbXBsZSB3aWxsIGVpdGhlciBnZXQgaW1hZ2VzIGZyb20gdGhlIGNhbWVyYSBvciBmcm9tIGFuIGltYWdlIGZpbGUgc3RvcmVkIGluIHRoZSB0b3ANCisgICAgICAgICAgICAgKiBsZXZlbCBkaXJlY3RvcnkgaW4gdGhlIGZsYXNoIG1lbW9yeSBvbiB0aGUgY1JJTy4gVGhlIGZpbGUgbmFtZSBpbiB0aGlzIGNhc2UgaXMgInRlc3RJbWFnZS5qcGciDQorICAgICAgICAgICAgICovDQorCQkJQ29sb3JJbWFnZSAqaW1hZ2U7DQorCQkJaW1hZ2UgPSBuZXcgUkdCSW1hZ2UoIi90ZXN0SW1hZ2UuanBnIik7CQkvLyBnZXQgdGhlIHNhbXBsZSBpbWFnZSBmcm9tIHRoZSBjUklPIGZsYXNoDQorDQorCQkJLy9jYW1lcmEuR2V0SW1hZ2UoaW1hZ2UpOwkJCQkvL1RvIGdldCB0aGUgaW1hZ2VzIGZyb20gdGhlIGNhbWVyYSBjb21tZW50IHRoZSBsaW5lIGFib3ZlIGFuZCB1bmNvbW1lbnQgdGhpcyBvbmUNCisJCQlCaW5hcnlJbWFnZSAqdGhyZXNob2xkSW1hZ2UgPSBpbWFnZS0+VGhyZXNob2xkSFNWKHRocmVzaG9sZCk7CS8vIGdldCBqdXN0IHRoZSBncmVlbiB0YXJnZXQgcGl4ZWxzDQorCQkJLy90aHJlc2hvbGRJbWFnZS0+V3JpdGUoIi90aHJlc2hvbGQuYm1wIik7DQorCQkJQmluYXJ5SW1hZ2UgKmNvbnZleEh1bGxJbWFnZSA9IHRocmVzaG9sZEltYWdlLT5Db252ZXhIdWxsKGZhbHNlKTsgIC8vIGZpbGwgaW4gcGFydGlhbCBhbmQgZnVsbCByZWN0YW5nbGVzDQorCQkJLy9jb252ZXhIdWxsSW1hZ2UtPldyaXRlKCIvQ29udmV4SHVsbC5ibXAiKTsNCisJCQlCaW5hcnlJbWFnZSAqZmlsdGVyZWRJbWFnZSA9IGNvbnZleEh1bGxJbWFnZS0+UGFydGljbGVGaWx0ZXIoY3JpdGVyaWEsIDEpOwkvL1JlbW92ZSBzbWFsbCBwYXJ0aWNsZXMNCisJCQkvL2ZpbHRlcmVkSW1hZ2UtPldyaXRlKCJGaWx0ZXJlZC5ibXAiKTsNCisNCisJCQl2ZWN0b3I8UGFydGljbGVBbmFseXNpc1JlcG9ydD4gKnJlcG9ydHMgPSBmaWx0ZXJlZEltYWdlLT5HZXRPcmRlcmVkUGFydGljbGVBbmFseXNpc1JlcG9ydHMoKTsgIC8vZ2V0IGEgcGFydGljbGUgYW5hbHlzaXMgcmVwb3J0IGZvciBlYWNoIHBhcnRpY2xlDQorCQkJc2NvcmVzID0gbmV3IFNjb3Jlc1tyZXBvcnRzLT5zaXplKCldOw0KKwkJCQ0KKwkJCS8vSXRlcmF0ZSB0aHJvdWdoIGVhY2ggcGFydGljbGUsIHNjb3JpbmcgaXQgYW5kIGRldGVybWluaW5nIHdoZXRoZXIgaXQgaXMgYSB0YXJnZXQgb3Igbm90DQorCQkJZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlcG9ydHMtPnNpemUoKTsgaSsrKSB7DQorCQkJCVBhcnRpY2xlQW5hbHlzaXNSZXBvcnQgKnJlcG9ydCA9ICYocmVwb3J0cy0+YXQoaSkpOw0KKwkJCQkNCisJCQkJc2NvcmVzW2ldLnJlY3Rhbmd1bGFyaXR5ID0gc2NvcmVSZWN0YW5ndWxhcml0eShyZXBvcnQpOw0KKwkJCQlzY29yZXNbaV0uYXNwZWN0UmF0aW9PdXRlciA9IHNjb3JlQXNwZWN0UmF0aW8oZmlsdGVyZWRJbWFnZSwgcmVwb3J0LCB0cnVlKTsNCisJCQkJc2NvcmVzW2ldLmFzcGVjdFJhdGlvSW5uZXIgPSBzY29yZUFzcGVjdFJhdGlvKGZpbHRlcmVkSW1hZ2UsIHJlcG9ydCwgZmFsc2UpOwkJCQ0KKwkJCQlzY29yZXNbaV0ueEVkZ2UgPSBzY29yZVhFZGdlKHRocmVzaG9sZEltYWdlLCByZXBvcnQpOw0KKwkJCQlzY29yZXNbaV0ueUVkZ2UgPSBzY29yZVlFZGdlKHRocmVzaG9sZEltYWdlLCByZXBvcnQpOw0KKwkJCQkNCisJCQkJaWYoc2NvcmVDb21wYXJlKHNjb3Jlc1tpXSwgZmFsc2UpKQ0KKwkJCQl7DQorCQkJCQlwcmludGYoInBhcnRpY2xlOiAlZCAgaXMgYSBIaWdoIEdvYWwgIGNlbnRlclg6ICVmICBjZW50ZXJZOiAlZiBcbiIsIGksIHJlcG9ydC0+Y2VudGVyX21hc3NfeF9ub3JtYWxpemVkLCByZXBvcnQtPmNlbnRlcl9tYXNzX3lfbm9ybWFsaXplZCk7DQorCQkJCQlwcmludGYoIkRpc3RhbmNlOiAlZiBcbiIsIGNvbXB1dGVEaXN0YW5jZSh0aHJlc2hvbGRJbWFnZSwgcmVwb3J0LCBmYWxzZSkpOw0KKwkJCQl9IGVsc2UgaWYgKHNjb3JlQ29tcGFyZShzY29yZXNbaV0sIHRydWUpKSB7DQorCQkJCQlwcmludGYoInBhcnRpY2xlOiAlZCAgaXMgYSBNaWRkbGUgR29hbCAgY2VudGVyWDogJWYgIGNlbnRlclk6ICVmIFxuIiwgaSwgcmVwb3J0LT5jZW50ZXJfbWFzc194X25vcm1hbGl6ZWQsIHJlcG9ydC0+Y2VudGVyX21hc3NfeV9ub3JtYWxpemVkKTsNCisJCQkJCXByaW50ZigiRGlzdGFuY2U6ICVmIFxuIiwgY29tcHV0ZURpc3RhbmNlKHRocmVzaG9sZEltYWdlLCByZXBvcnQsIHRydWUpKTsNCisJCQkJfSBlbHNlIHsNCisJCQkJCXByaW50ZigicGFydGljbGU6ICVkICBpcyBub3QgYSBnb2FsICBjZW50ZXJYOiAlZiAgY2VudGVyWTogJWYgXG4iLCBpLCByZXBvcnQtPmNlbnRlcl9tYXNzX3hfbm9ybWFsaXplZCwgcmVwb3J0LT5jZW50ZXJfbWFzc195X25vcm1hbGl6ZWQpOw0KKwkJCQl9DQorCQkJCXByaW50ZigicmVjdDogJWYgIEFSaW5uZXI6ICVmIFxuIiwgc2NvcmVzW2ldLnJlY3Rhbmd1bGFyaXR5LCBzY29yZXNbaV0uYXNwZWN0UmF0aW9Jbm5lcik7DQorCQkJCXByaW50ZigiQVJvdXRlcjogJWYgIHhFZGdlOiAlZiAgeUVkZ2U6ICVmICBcbiIsIHNjb3Jlc1tpXS5hc3BlY3RSYXRpb091dGVyLCBzY29yZXNbaV0ueEVkZ2UsIHNjb3Jlc1tpXS55RWRnZSk7CQ0KKwkJCX0NCisJCQlwcmludGYoIlxuIik7DQorCQkJDQorCQkJLy8gYmUgc3VyZSB0byBkZWxldGUgaW1hZ2VzIGFmdGVyIHVzaW5nIHRoZW0NCisJCQlkZWxldGUgZmlsdGVyZWRJbWFnZTsNCisJCQlkZWxldGUgY29udmV4SHVsbEltYWdlOw0KKwkJCWRlbGV0ZSB0aHJlc2hvbGRJbWFnZTsNCisJCQlkZWxldGUgaW1hZ2U7DQorCQkJDQorCQkJLy9kZWxldGUgYWxsb2NhdGVkIHJlcG9ydHMgYW5kIFNjb3JlcyBvYmplY3RzIGFsc28NCisJCQlkZWxldGUgc2NvcmVzOw0KKwkJCWRlbGV0ZSByZXBvcnRzOw0KKwkJfQ0KKwl9DQorDQorCS8qKg0KKwkgKiBSdW5zIHRoZSBtb3RvcnMgd2l0aCBhcmNhZGUgc3RlZXJpbmcuIA0KKwkgKi8NCisJdm9pZCBPcGVyYXRvckNvbnRyb2wodm9pZCkNCisJew0KKwkJbXlSb2JvdC5TZXRTYWZldHlFbmFibGVkKHRydWUpOw0KKwkJd2hpbGUgKElzT3BlcmF0b3JDb250cm9sKCkpDQorCQl7DQorCQkJV2FpdCgwLjAwNSk7CQkJCS8vIHdhaXQgZm9yIGEgbW90b3IgdXBkYXRlIHRpbWUNCisJCX0NCisJfQ0KKwkNCisJLyoqDQorCSAqIENvbXB1dGVzIHRoZSBlc3RpbWF0ZWQgZGlzdGFuY2UgdG8gYSB0YXJnZXQgdXNpbmcgdGhlIGhlaWdodCBvZiB0aGUgcGFydGljbGUgaW4gdGhlIGltYWdlLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhbmQgZ3JhcGhpY3MNCisJICogc2hvd2luZyB0aGUgbWF0aCBiZWhpbmQgdGhpcyBhcHByb2FjaCBzZWUgdGhlIFZpc2lvbiBQcm9jZXNzaW5nIHNlY3Rpb24gb2YgdGhlIFNjcmVlblN0ZXBzTGl2ZSBkb2N1bWVudGF0aW9uLg0KKwkgKiANCisJICogQHBhcmFtIGltYWdlIFRoZSBpbWFnZSB0byB1c2UgZm9yIG1lYXN1cmluZyB0aGUgcGFydGljbGUgZXN0aW1hdGVkIHJlY3RhbmdsZQ0KKwkgKiBAcGFyYW0gcmVwb3J0IFRoZSBQYXJ0aWNsZSBBbmFseXNpcyBSZXBvcnQgZm9yIHRoZSBwYXJ0aWNsZQ0KKwkgKiBAcGFyYW0gb3V0ZXIgVHJ1ZSBpZiB0aGUgcGFydGljbGUgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgYW4gb3V0ZXIgdGFyZ2V0LCBmYWxzZSB0byB0cmVhdCBpdCBhcyBhIGNlbnRlciB0YXJnZXQNCisJICogQHJldHVybiBUaGUgZXN0aW1hdGVkIGRpc3RhbmNlIHRvIHRoZSB0YXJnZXQgaW4gSW5jaGVzLg0KKwkgKi8NCisJZG91YmxlIGNvbXB1dGVEaXN0YW5jZSAoQmluYXJ5SW1hZ2UgKmltYWdlLCBQYXJ0aWNsZUFuYWx5c2lzUmVwb3J0ICpyZXBvcnQsIGJvb2wgb3V0ZXIpIHsNCisJCWRvdWJsZSByZWN0U2hvcnQsIGhlaWdodDsNCisJCWludCB0YXJnZXRIZWlnaHQ7DQorCQkNCisJCWltYXFNZWFzdXJlUGFydGljbGUoaW1hZ2UtPkdldEltYXFJbWFnZSgpLCByZXBvcnQtPnBhcnRpY2xlSW5kZXgsIDAsIElNQVFfTVRfRVFVSVZBTEVOVF9SRUNUX1NIT1JUX1NJREUsICZyZWN0U2hvcnQpOw0KKwkJLy91c2luZyB0aGUgc21hbGxlciBvZiB0aGUgZXN0aW1hdGVkIHJlY3RhbmdsZSBzaG9ydCBzaWRlIGFuZCB0aGUgYm91bmRpbmcgcmVjdGFuZ2xlIGhlaWdodCByZXN1bHRzIGluIGJldHRlciBwZXJmb3JtYW5jZQ0KKwkJLy9vbiBza2V3ZWQgcmVjdGFuZ2xlcw0KKwkJaGVpZ2h0ID0gbWluKHJlcG9ydC0+Ym91bmRpbmdSZWN0LmhlaWdodCwgcmVjdFNob3J0KTsNCisJCXRhcmdldEhlaWdodCA9IG91dGVyID8gMjkgOiAyMTsNCisJCQ0KKwkJcmV0dXJuIFhfSU1BR0VfUkVTICogdGFyZ2V0SGVpZ2h0IC8gKGhlaWdodCAqIDEyICogMiAqIHRhbihWSUVXX0FOR0xFKlBJLygxODAqMikpKTsNCisJfQ0KKwkNCisJLyoqDQorCSAqIENvbXB1dGVzIGEgc2NvcmUgKDAtMTAwKSBjb21wYXJpbmcgdGhlIGFzcGVjdCByYXRpbyB0byB0aGUgaWRlYWwgYXNwZWN0IHJhdGlvIGZvciB0aGUgdGFyZ2V0LiBUaGlzIG1ldGhvZCB1c2VzDQorCSAqIHRoZSBlcXVpdmFsZW50IHJlY3RhbmdsZSBzaWRlcyB0byBkZXRlcm1pbmUgYXNwZWN0IHJhdGlvIGFzIGl0IHBlcmZvcm1zIGJldHRlciBhcyB0aGUgdGFyZ2V0IGdldHMgc2tld2VkIGJ5IG1vdmluZw0KKwkgKiB0byB0aGUgbGVmdCBvciByaWdodC4gVGhlIGVxdWl2YWxlbnQgcmVjdGFuZ2xlIGlzIHRoZSByZWN0YW5nbGUgd2l0aCBzaWRlcyB4IGFuZCB5IHdoZXJlIHBhcnRpY2xlIGFyZWE9IHgqeQ0KKwkgKiBhbmQgcGFydGljbGUgcGVyaW1ldGVyPSAyeCsyeQ0KKwkgKiANCisJICogQHBhcmFtIGltYWdlIFRoZSBpbWFnZSBjb250YWluaW5nIHRoZSBwYXJ0aWNsZSB0byBzY29yZSwgbmVlZGVkIHRvIHBlcmZvcm0gYWRkaXRpb25hbCBtZWFzdXJlbWVudHMNCisJICogQHBhcmFtIHJlcG9ydCBUaGUgUGFydGljbGUgQW5hbHlzaXMgUmVwb3J0IGZvciB0aGUgcGFydGljbGUsIHVzZWQgZm9yIHRoZSB3aWR0aCwgaGVpZ2h0LCBhbmQgcGFydGljbGUgbnVtYmVyDQorCSAqIEBwYXJhbSBvdXRlcglJbmRpY2F0ZXMgd2hldGhlciB0aGUgcGFydGljbGUgYXNwZWN0IHJhdGlvIHNob3VsZCBiZSBjb21wYXJlZCB0byB0aGUgcmF0aW8gZm9yIHRoZSBpbm5lciB0YXJnZXQgb3IgdGhlIG91dGVyDQorCSAqIEByZXR1cm4gVGhlIGFzcGVjdCByYXRpbyBzY29yZSAoMC0xMDApDQorCSAqLw0KKwlkb3VibGUgc2NvcmVBc3BlY3RSYXRpbyhCaW5hcnlJbWFnZSAqaW1hZ2UsIFBhcnRpY2xlQW5hbHlzaXNSZXBvcnQgKnJlcG9ydCwgYm9vbCBvdXRlcil7DQorCQlkb3VibGUgcmVjdExvbmcsIHJlY3RTaG9ydCwgaWRlYWxBc3BlY3RSYXRpbywgYXNwZWN0UmF0aW87DQorCQlpZGVhbEFzcGVjdFJhdGlvID0gb3V0ZXIgPyAoNjIvMjkpIDogKDYyLzIwKTsJLy9EaW1lbnNpb25zIG9mIGdvYWwgb3BlbmluZyArIDQgaW5jaGVzIG9uIGFsbCA0IHNpZGVzIGZvciByZWZsZWN0aXZlIHRhcGUNCisJCQ0KKwkJaW1hcU1lYXN1cmVQYXJ0aWNsZShpbWFnZS0+R2V0SW1hcUltYWdlKCksIHJlcG9ydC0+cGFydGljbGVJbmRleCwgMCwgSU1BUV9NVF9FUVVJVkFMRU5UX1JFQ1RfTE9OR19TSURFLCAmcmVjdExvbmcpOw0KKwkJaW1hcU1lYXN1cmVQYXJ0aWNsZShpbWFnZS0+R2V0SW1hcUltYWdlKCksIHJlcG9ydC0+cGFydGljbGVJbmRleCwgMCwgSU1BUV9NVF9FUVVJVkFMRU5UX1JFQ1RfU0hPUlRfU0lERSwgJnJlY3RTaG9ydCk7DQorCQkNCisJCS8vRGl2aWRlIHdpZHRoIGJ5IGhlaWdodCB0byBtZWFzdXJlIGFzcGVjdCByYXRpbw0KKwkJaWYocmVwb3J0LT5ib3VuZGluZ1JlY3Qud2lkdGggPiByZXBvcnQtPmJvdW5kaW5nUmVjdC5oZWlnaHQpew0KKwkJCS8vcGFydGljbGUgaXMgd2lkZXIgdGhhbiBpdCBpcyB0YWxsLCBkaXZpZGUgbG9uZyBieSBzaG9ydA0KKwkJCWFzcGVjdFJhdGlvID0gMTAwKigxLWZhYnMoKDEtKChyZWN0TG9uZy9yZWN0U2hvcnQpL2lkZWFsQXNwZWN0UmF0aW8pKSkpOw0KKwkJfSBlbHNlIHsNCisJCQkvL3BhcnRpY2xlIGlzIHRhbGxlciB0aGFuIGl0IGlzIHdpZGUsIGRpdmlkZSBzaG9ydCBieSBsb25nDQorCQkJYXNwZWN0UmF0aW8gPSAxMDAqKDEtZmFicygoMS0oKHJlY3RTaG9ydC9yZWN0TG9uZykvaWRlYWxBc3BlY3RSYXRpbykpKSk7DQorCQl9DQorCQlyZXR1cm4gKG1heCgwLCBtaW4oYXNwZWN0UmF0aW8sIDEwMCkpKTsJCS8vZm9yY2UgdG8gYmUgaW4gcmFuZ2UgMC0xMDANCisJfQ0KKwkNCisJLyoqDQorCSAqIENvbXBhcmVzIHNjb3JlcyB0byBkZWZpbmVkIGxpbWl0cyBhbmQgcmV0dXJucyB0cnVlIGlmIHRoZSBwYXJ0aWNsZSBhcHBlYXJzIHRvIGJlIGEgdGFyZ2V0DQorCSAqIA0KKwkgKiBAcGFyYW0gc2NvcmVzIFRoZSBzdHJ1Y3R1cmUgY29udGFpbmluZyB0aGUgc2NvcmVzIHRvIGNvbXBhcmUNCisJICogQHBhcmFtIG91dGVyIFRydWUgaWYgdGhlIHBhcnRpY2xlIHNob3VsZCBiZSB0cmVhdGVkIGFzIGFuIG91dGVyIHRhcmdldCwgZmFsc2UgdG8gdHJlYXQgaXQgYXMgYSBjZW50ZXIgdGFyZ2V0DQorCSAqIA0KKwkgKiBAcmV0dXJuIFRydWUgaWYgdGhlIHBhcnRpY2xlIG1lZXRzIGFsbCBsaW1pdHMsIGZhbHNlIG90aGVyd2lzZQ0KKwkgKi8NCisJYm9vbCBzY29yZUNvbXBhcmUoU2NvcmVzIHNjb3JlcywgYm9vbCBvdXRlcil7DQorCQlib29sIGlzVGFyZ2V0ID0gdHJ1ZTsNCisNCisJCWlzVGFyZ2V0ICY9IHNjb3Jlcy5yZWN0YW5ndWxhcml0eSA+IFJFQ1RBTkdVTEFSSVRZX0xJTUlUOw0KKwkJaWYob3V0ZXIpew0KKwkJCWlzVGFyZ2V0ICY9IHNjb3Jlcy5hc3BlY3RSYXRpb091dGVyID4gQVNQRUNUX1JBVElPX0xJTUlUOw0KKwkJfSBlbHNlIHsNCisJCQlpc1RhcmdldCAmPSBzY29yZXMuYXNwZWN0UmF0aW9Jbm5lciA+IEFTUEVDVF9SQVRJT19MSU1JVDsNCisJCX0NCisJCWlzVGFyZ2V0ICY9IHNjb3Jlcy54RWRnZSA+IFhfRURHRV9MSU1JVDsNCisJCWlzVGFyZ2V0ICY9IHNjb3Jlcy55RWRnZSA+IFlfRURHRV9MSU1JVDsNCisNCisJCXJldHVybiBpc1RhcmdldDsNCisJfQ0KKwkNCisJLyoqDQorCSAqIENvbXB1dGVzIGEgc2NvcmUgKDAtMTAwKSBlc3RpbWF0aW5nIGhvdyByZWN0YW5ndWxhciB0aGUgcGFydGljbGUgaXMgYnkgY29tcGFyaW5nIHRoZSBhcmVhIG9mIHRoZSBwYXJ0aWNsZQ0KKwkgKiB0byB0aGUgYXJlYSBvZiB0aGUgYm91bmRpbmcgYm94IHN1cnJvdW5kaW5nIGl0LiBBIHBlcmZlY3QgcmVjdGFuZ2xlIHdvdWxkIGNvdmVyIHRoZSBlbnRpcmUgYm91bmRpbmcgYm94Lg0KKwkgKiANCisJICogQHBhcmFtIHJlcG9ydCBUaGUgUGFydGljbGUgQW5hbHlzaXMgUmVwb3J0IGZvciB0aGUgcGFydGljbGUgdG8gc2NvcmUNCisJICogQHJldHVybiBUaGUgcmVjdGFuZ3VsYXJpdHkgc2NvcmUgKDAtMTAwKQ0KKwkgKi8NCisJZG91YmxlIHNjb3JlUmVjdGFuZ3VsYXJpdHkoUGFydGljbGVBbmFseXNpc1JlcG9ydCAqcmVwb3J0KXsNCisJCWlmKHJlcG9ydC0+Ym91bmRpbmdSZWN0LndpZHRoKnJlcG9ydC0+Ym91bmRpbmdSZWN0LmhlaWdodCAhPTApew0KKwkJCXJldHVybiAxMDAqcmVwb3J0LT5wYXJ0aWNsZUFyZWEvKHJlcG9ydC0+Ym91bmRpbmdSZWN0LndpZHRoKnJlcG9ydC0+Ym91bmRpbmdSZWN0LmhlaWdodCk7DQorCQl9IGVsc2Ugew0KKwkJCXJldHVybiAwOw0KKwkJfQkNCisJfQ0KKwkNCisJLyoqDQorCSAqIENvbXB1dGVzIGEgc2NvcmUgYmFzZWQgb24gdGhlIG1hdGNoIGJldHdlZW4gYSB0ZW1wbGF0ZSBwcm9maWxlIGFuZCB0aGUgcGFydGljbGUgcHJvZmlsZSBpbiB0aGUgWCBkaXJlY3Rpb24uIFRoaXMgbWV0aG9kIHVzZXMgdGhlDQorCSAqIHRoZSBjb2x1bW4gYXZlcmFnZXMgYW5kIHRoZSBwcm9maWxlIGRlZmluZWQgYXQgdGhlIHRvcCBvZiB0aGUgc2FtcGxlIHRvIGxvb2sgZm9yIHRoZSBzb2xpZCB2ZXJ0aWNhbCBlZGdlcyB3aXRoDQorCSAqIGEgaG9sbG93IGNlbnRlci4NCisJICogDQorCSAqIEBwYXJhbSBpbWFnZSBUaGUgaW1hZ2UgdG8gdXNlLCBzaG91bGQgYmUgdGhlIGltYWdlIGJlZm9yZSB0aGUgY29udmV4IGh1bGwgaXMgcGVyZm9ybWVkDQorCSAqIEBwYXJhbSByZXBvcnQgVGhlIFBhcnRpY2xlIEFuYWx5c2lzIFJlcG9ydCBmb3IgdGhlIHBhcnRpY2xlDQorCSAqIA0KKwkgKiBAcmV0dXJuIFRoZSBYIEVkZ2UgU2NvcmUgKDAtMTAwKQ0KKwkgKi8NCisJZG91YmxlIHNjb3JlWEVkZ2UoQmluYXJ5SW1hZ2UgKmltYWdlLCBQYXJ0aWNsZUFuYWx5c2lzUmVwb3J0ICpyZXBvcnQpew0KKwkJZG91YmxlIHRvdGFsID0gMDsNCisJCUxpbmVhckF2ZXJhZ2VzICphdmVyYWdlcyA9IGltYXFMaW5lYXJBdmVyYWdlczIoaW1hZ2UtPkdldEltYXFJbWFnZSgpLCBJTUFRX0NPTFVNTl9BVkVSQUdFUywgcmVwb3J0LT5ib3VuZGluZ1JlY3QpOw0KKwkJZm9yKGludCBpPTA7IGkgPCAoYXZlcmFnZXMtPmNvbHVtbkNvdW50KTsgaSsrKXsNCisJCQlpZih4TWluW2kqKFhNSU5TSVpFLTEpL2F2ZXJhZ2VzLT5jb2x1bW5Db3VudF0gPCBhdmVyYWdlcy0+Y29sdW1uQXZlcmFnZXNbaV0gDQorCQkJICAgJiYgYXZlcmFnZXMtPmNvbHVtbkF2ZXJhZ2VzW2ldIDwgeE1heFtpKihYTUFYU0laRS0xKS9hdmVyYWdlcy0+Y29sdW1uQ291bnRdKXsNCisJCQkJdG90YWwrKzsNCisJCQl9DQorCQl9DQorCQl0b3RhbCA9IDEwMCp0b3RhbC8oYXZlcmFnZXMtPmNvbHVtbkNvdW50KTsJCS8vY29udmVydCB0byBzY29yZSAwLTEwMA0KKwkJaW1hcURpc3Bvc2UoYXZlcmFnZXMpOwkJCQkJCQkvL2xldCBJTUFRIGRpc3Bvc2Ugb2YgdGhlIGF2ZXJhZ2VzIHN0cnVjdA0KKwkJcmV0dXJuIHRvdGFsOw0KKwl9DQorCQ0KKwkvKioNCisJICogQ29tcHV0ZXMgYSBzY29yZSBiYXNlZCBvbiB0aGUgbWF0Y2ggYmV0d2VlbiBhIHRlbXBsYXRlIHByb2ZpbGUgYW5kIHRoZSBwYXJ0aWNsZSBwcm9maWxlIGluIHRoZSBZIGRpcmVjdGlvbi4gVGhpcyBtZXRob2QgdXNlcyB0aGUNCisJICogdGhlIHJvdyBhdmVyYWdlcyBhbmQgdGhlIHByb2ZpbGUgZGVmaW5lZCBhdCB0aGUgdG9wIG9mIHRoZSBzYW1wbGUgdG8gbG9vayBmb3IgdGhlIHNvbGlkIGhvcml6b250YWwgZWRnZXMgd2l0aA0KKwkgKiBhIGhvbGxvdyBjZW50ZXINCisJICogDQorCSAqIEBwYXJhbSBpbWFnZSBUaGUgaW1hZ2UgdG8gdXNlLCBzaG91bGQgYmUgdGhlIGltYWdlIGJlZm9yZSB0aGUgY29udmV4IGh1bGwgaXMgcGVyZm9ybWVkDQorCSAqIEBwYXJhbSByZXBvcnQgVGhlIFBhcnRpY2xlIEFuYWx5c2lzIFJlcG9ydCBmb3IgdGhlIHBhcnRpY2xlDQorCSAqIA0KKwkgKiBAcmV0dXJuIFRoZSBZIEVkZ2Ugc2NvcmUgKDAtMTAwKQ0KKwkgKi8NCisJZG91YmxlIHNjb3JlWUVkZ2UoQmluYXJ5SW1hZ2UgKmltYWdlLCBQYXJ0aWNsZUFuYWx5c2lzUmVwb3J0ICpyZXBvcnQpew0KKwkJZG91YmxlIHRvdGFsID0gMDsNCisJCUxpbmVhckF2ZXJhZ2VzICphdmVyYWdlcyA9IGltYXFMaW5lYXJBdmVyYWdlczIoaW1hZ2UtPkdldEltYXFJbWFnZSgpLCBJTUFRX1JPV19BVkVSQUdFUywgcmVwb3J0LT5ib3VuZGluZ1JlY3QpOw0KKwkJZm9yKGludCBpPTA7IGkgPCAoYXZlcmFnZXMtPnJvd0NvdW50KTsgaSsrKXsNCisJCQlpZih5TWluW2kqKFlNSU5TSVpFLTEpL2F2ZXJhZ2VzLT5yb3dDb3VudF0gPCBhdmVyYWdlcy0+cm93QXZlcmFnZXNbaV0gDQorCQkJICAgJiYgYXZlcmFnZXMtPnJvd0F2ZXJhZ2VzW2ldIDwgeU1heFtpKihZTUFYU0laRS0xKS9hdmVyYWdlcy0+cm93Q291bnRdKXsNCisJCQkJdG90YWwrKzsNCisJCQl9DQorCQl9DQorCQl0b3RhbCA9IDEwMCp0b3RhbC8oYXZlcmFnZXMtPnJvd0NvdW50KTsJCS8vY29udmVydCB0byBzY29yZSAwLTEwMA0KKwkJaW1hcURpc3Bvc2UoYXZlcmFnZXMpOwkJCQkJCS8vbGV0IElNQVEgZGlzcG9zZSBvZiB0aGUgYXZlcmFnZXMgc3RydWN0DQorCQlyZXR1cm4gdG90YWw7DQorCX0JCQ0KK307DQorDQorU1RBUlRfUk9CT1RfQ0xBU1MoVmlzaW9uU2FtcGxlMjAxMik7DQorDQpkaWZmIC0tZ2l0IGEvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvdnh3b3Jrcy02LjMvdGFyZ2V0L3NyYy9kZW1vL1Zpc2lvblNhbXBsZTIwMTMvc2FtcGxlLnByb3BlcnRpZXMgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vVmlzaW9uU2FtcGxlMjAxMy9zYW1wbGUucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZmM4OTVlCi0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvdnh3b3Jrcy02LjMvdGFyZ2V0L3NyYy9kZW1vL1Zpc2lvblNhbXBsZTIwMTMvc2FtcGxlLnByb3BlcnRpZXMKQEAgLTAsMCArMSwyIEBACitwcm9qZWN0LnR5cGU9RG93bmxvYWRhYmxlS2VybmVsTW9kdWxlUHJvamVjdA0KK3BsYXRmb3JtLmlkPVZ4V29ya3MNCmRpZmYgLS1naXQgYS9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL1dvcmtiZW5jaFVwZGF0ZS92eHdvcmtzLTYuMy90YXJnZXQvc3JjL2RlbW8vVmlzaW9uU2FtcGxlMjAxMy9zYW1wbGUudHh0IGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvdnh3b3Jrcy02LjMvdGFyZ2V0L3NyYy9kZW1vL1Zpc2lvblNhbXBsZTIwMTMvc2FtcGxlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NDJiYjcyCi0tLSAvZGV2L251bGwKKysrIGIvYXphbGVhc291cmNlL1dQSUxpYkNQcm9ncmFtbWluZy90cnVuay9Xb3JrYmVuY2hVcGRhdGUvdnh3b3Jrcy02LjMvdGFyZ2V0L3NyYy9kZW1vL1Zpc2lvblNhbXBsZTIwMTMvc2FtcGxlLnR4dApAQCAtMCwwICsxLDcgQEAKK0ZSQyAyMDEzIFZpc2lvbiBTYW1wbGUgUHJvZ3JhbQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorVGhpcyBwcm9qZWN0IGlzIGEgY2FtZXJhIHZpc2lvbiBzYW1wbGUgdGhhdCBkZXRlY3RzIHRoZSBNaWRkbGUgYW5kIEhpZ2ggZ29hbCB2aXNpb24gdGFyZ2V0cyBpbg0KK3RoZSAyMDEzIEZSQyBnYW1lLiBMb29rIGF0IHRoZSBjb21tZW50cyBpbiB0aGUgY29kZSBhbmQgdGhlIFZpc2lvbiBQcm9jZXNzaW5nIHNlY3Rpb24gb2YgdGhlDQorZG9jdW1lbnRhdGlvbiBhdCBodHRwOi8vd3BpbGliLnNjcmVlbnN0ZXBzbGl2ZS5jb20uIExvb2sgaW4gdGhlIFZpc2lvbkltYWdlcyBkaXJlY3RvcnkNCitpbnNpZGUgdGhlIHByb2plY3QgdGhhdCBpcyBjcmVhdGVkIGZvciBzYW1wbGUgaW1hZ2VzIGFzIHdlbGwgYXMgdGhlIE5JIFZpc2lvbiBBc3Npc3RhbnQgZmlsZQ0KK3RoYXQgY29udGFpbnMgdGhlIHZpc2lvbiBjb21tYW5kIGNoYWluIChvcGVuIGl0IHdpdGggdGhlIFZpc2lvbiBBc3Npc3RhbnQpLg0KZGlmZiAtLWdpdCBhL2F6YWxlYXNvdXJjZS9XUElMaWJDUHJvZ3JhbW1pbmcvdHJ1bmsvaG93LXRvLWJ1aWxkLXdwaWxpYi50eHQgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL2hvdy10by1idWlsZC13cGlsaWIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2MTc0MjIKLS0tIC9kZXYvbnVsbAorKysgYi9hemFsZWFzb3VyY2UvV1BJTGliQ1Byb2dyYW1taW5nL3RydW5rL2hvdy10by1idWlsZC13cGlsaWIudHh0CkBAIC0wLDAgKzEsMjYgQEAKK0hvdyB0byBidWlsZCBhIGN1c3RvbSBXUElMaWIgaW4gV2luZHJpdmVyIFdvcmtiZW5jaA0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKw0KK01ha2UgYSBXUiBXQiBwcm9qZWN0ICJXUElMaWIiIHRvIGJ1aWxkIHRoaXMgY29weSBvZiBXUElMaWI6DQorICAgIE5ldyAiRG93bmxvYWRhYmxlIEtlcm5lbCBNb2R1bGUiIHByb2plY3QgKCpub3QqIGEgU2hhcmVkIExpYmFyeSBwcm9qZWN0KS4NCisgICAgICAgIFlvdSBjYW4gY3JlYXRlIHRoZSBwcm9qZWN0IGluIHRoZSB3b3Jrc3BhY2UgZGlyZWN0b3J5IHdpdGggY29udGVudCBhdCAiZXh0ZXJuYWwgbG9jYXRpb24iLCB0aGF0IGlzLCB0aGUgZGlyZWN0b3J5IHdoZXJlIHlvdSBwdXQgdGhlIFdQSUxpYiBzb3VyY2UgY29kZS4NCisgICAgICAgIEJ1aWxkIFNwZWNzIGZvciBQUEM2MDNnbnUgb25seTsgZGVidWcgbW9kZS4NCisgICAgICAgIEJ1aWxkIHRvb2w6IExpYnJhcmlhbiAoKm5vdCogTGlua2VyKTsgUGFzcyB0aGUgYnVpbGQgdGFyZ2V0IHRvIHRoZSBuZXh0IGxldmVsLiBbRG9lcyB0aGUgInBhc3MiIGNoZWNrYm94IG1hdHRlcj9dDQorDQorICAgIFByb2plY3QgUHJvcGVydGllcyA+IEMvQysrIEdlbmVyYWwgPiBJbmRleGVyID4gUGF0aHMgYW5kIFN5bWJvbHMgPiBTb3VyY2VzL0ZpbHRlcnMNCisgICAgICAgIFNldCBhIGZpbHRlciB0byBleGNsdWRlIFBQQzYwM2dudS8sIC5zdm4vLCAuc2V0dGluZ3MvIC4gW05lZWRlZD9dDQorDQorICAgIFtJcnJlbGV2YW50LiBDSW50ZXJmYWNlcyBpcyBhYnNlbnQgaW4gMjAxMy5dIFVuZGVyIHRoZSBQcm9qZWN0IEV4cGxvcmVyIHZpZXcncyBXUElMaWIgcHJvamVjdCwgZXhwYW5kICtCdWlsZCBUYXJnZXRzIChQUEM2MDNnbnUgLSBkZWJ1ZyksICtXUElMaWIgKFdQSUxpYi5hKSwgK1dQSUxpYiAtIHJlY3Vyc2l2ZSwgK1dQSUxpYjsgc2VsZWN0IENJbnRlcmZhY2VzLCBoaXQgRGVsZXRlLCBhbmQgY29uZmlybSBleGNsdWRpbmcgdGhlIENJbnRlcmZhY2VzLyBkaXJlY3RvcnkgZnJvbSB0aGUgYnVpbGQuDQorICAgICAgICBbV2l0aCB0aGVzZSBzdGVwcywgV1IgV0Igd29uJ3QgZmFpbCB0cnlpbmcgdG8gYnVpbGQgQ0ludGVyZmFjZXMuIEZvciBzb21lIHJlYXNvbiwgc2V0dGluZyBQcm9qZWN0IFByb3BlcnRpZXMgPiBDL0MrKyBHZW5lcmFsID4gUGF0aHMgYW5kIFN5bWJvbHMgPiBTb3VyY2VzL0ZpbHRlcnMgZXhjbHVzaW9uIGZpbHRlcnMgd29uJ3QgZG8gaXQuXQ0KKw0KKyAgICBBcHByb2FjaCAxOg0KKyAgICAgIFN0YXJ0IGEgYnVpbGQsIGxldCBpdCBhbmFseXplIHRoZSBuZWVkZWQgaW5jbHVkZSBwYXRocywgYWRkIHRoZSBXUElMaWIvIHNvdXJjZSBkaXJlY3RvcnksIGFuZCBtb3ZlIHRoYXQgdXAgdG8gdGhlIHRvcCBvZiB0aGUgbGlzdC4NCisgICAgICBJdCBzaG91bGQgbm93IHNheSAiVGhlcmUgYXJlIDAgdW5yZXNvbHZlZCBpbmNsdWRlIGRpcmVjdGl2ZXMiLg0KKyAgICAgIFByb2NlZWQuDQorICAgIEFwcHJvYWNoIDI6DQorICAgICAgU2VsZWN0IFdQSUxpYiBwcm9qZWN0ID4gUHJvamVjdCBQcm9wZXJ0aWVzID4gQnVpbGQgUHJvcGVydGllcyA+IEJ1aWxkIFBhdGhzDQorICAgICAgICBBZGQgdGhlIFdQSUxpYi8gc291cmNlIGRpcmVjdG9yeSB0byB0aGUgaW5jbHVkZSBwYXRocyBhbmQgbW92ZSB0aGF0IHVwIHRvIHRoZSBmaXJzdCBlbnRyeS4NCisgICAgTm90ZTogVGhlIG90aGVyIGluY2x1ZGUgcGF0aCBlbnRyaWVzIHNob3VsZCBiZSAtSSQoV0lORF9CQVNFKS90YXJnZXQvaCBhbmQgLUkkKFdJTkRfQkFTRSkvdGFyZ2V0L2gvd3JuL2NvcmVpcA0KKyAgICBRdWVzdGlvbjogSXMgdGhlcmUgYSB3YXkgdG8gZG8gdGhpcyB1c2luZyBhICR2YXJpYWJsZSByYXRoZXIgdGhhbiBhIGhhcmQtd2lyZWQgZGlyZWN0b3J5IHBhdGggc28geW91IGNvdWxkIGNoZWNrIGluIGFuZCBzaGFyZSB0aGUgcHJvamVjdCBmaWxlcz8NCisNCisgICAgQnVpbGQgdGhlIFByb2plY3QuIChJZiBXQiBhc2tzIGFib3V0IGdlbmVyYXRpbmcgaW5jbHVkZSBmaWxlcywgeW91IGNhbiBkbyBpdCBvciBza2lwIGl0LikNCg==