LyoNCiAgICAgRmlsZTogICAgICAgaVR1bmVzVmlzdWFsQVBJLmgNCiANCiAgICAgQ29udGFpbnM6ICAgaVR1bmVzIFZpc3VhbCBQbHVnLWlucyBpbnRlcmZhY2VzDQogDQogICAgIFZlcnNpb246ICAgIFRlY2hub2xvZ3k6IGlUdW5lcw0KICAgICAgICAgICAgICAgICBSZWxlYXNlOiAgICAxLjENCiANCiAgICAgQ29weXJpZ2h0OiAgqSAyMDAxIGJ5IEFwcGxlIENvbXB1dGVyLCBJbmMuLCBhbGwgcmlnaHRzIHJlc2VydmVkLg0KIA0KICAgICBCdWdzPzogICAgICBGb3IgYnVnIHJlcG9ydHMsIGNvbnN1bHQgdGhlIGZvbGxvd2luZyBwYWdlIG9uDQogICAgICAgICAgICAgICAgIHRoZSBXb3JsZCBXaWRlIFdlYjoNCiANCiAgICAgICAgICAgICAgICAgICAgIGh0dHA6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2J1Z3JlcG9ydGVyLw0KIA0KKi8NCiNpZm5kZWYgX19JVFVORVNWSVNVQUxBUElfXw0KI2RlZmluZSBfX0lUVU5FU1ZJU1VBTEFQSV9fDQoNCiNpbmNsdWRlICJpVHVuZXNBUEkuaCINCg0KI2lmIFBSQUdNQV9PTkNFDQojcHJhZ21hIG9uY2UNCiNlbmRpZg0KDQojaWZkZWYgX19jcGx1c3BsdXMNCmV4dGVybiAiQyIgew0KI2VuZGlmDQoNCiNpZiBQUkFHTUFfU1RSVUNUX0FMSUdODQogICAgI3ByYWdtYSBvcHRpb25zIGFsaWduPXBvd2VyDQojZWxpZiBQUkFHTUFfU1RSVUNUX1BBQ0tQVVNIDQogICAgI3ByYWdtYSBwYWNrKHB1c2gsIDIpDQojZWxpZiBQUkFHTUFfU1RSVUNUX1BBQ0sNCiAgICAjcHJhZ21hIHBhY2soMikNCiNlbmRpZg0KDQplbnVtIHsNCgkvKiBWaXN1YWxQbHVnaW4gbWVzc2FnZXMgKi8NCgkNCglrVmlzdWFsUGx1Z2luSWRsZU1lc3NhZ2UJCQk9ICdudWxsJywNCg0KCWtWaXN1YWxQbHVnaW5Jbml0TWVzc2FnZQkJCT0gJ2luaXQnLA0KCWtWaXN1YWxQbHVnaW5DbGVhbnVwTWVzc2FnZQkJCT0gJ2NsciAnLA0KCQ0KCWtWaXN1YWxQbHVnaW5Db25maWd1cmVNZXNzYWdlCQk9ICdjbmZnJywJLyogQ29uZmlndXJlIHRoZSBwbHVnaW4gKG1heSBub3QgYmUgZW5hYmxlZCkgKi8NCgkNCglrVmlzdWFsUGx1Z2luRW5hYmxlTWVzc2FnZQkJCT0gJ3ZvbiAnLAkvKiBUdXJuIG9uIHRoZSBtb2R1bGUgKGF1dG9tYXRpYykqLw0KCWtWaXN1YWxQbHVnaW5EaXNhYmxlTWVzc2FnZQkJCT0gJ3ZvZmYnLAkvKiBUdXJuIG9mZiB0aGUgbW9kdWxlICovDQoJDQoJa1Zpc3VhbFBsdWdpblNob3dXaW5kb3dNZXNzYWdlCQk9ICdzaG93JywJLyogU2hvdyB0aGUgcGx1Z2luIHdpbmRvdyAoYWxsb2NhdGUgbGFyZ2UgbWVtb3J5IGhlcmUhKSAqLw0KCWtWaXN1YWxQbHVnaW5IaWRlV2luZG93TWVzc2FnZQkJPSAnaGlkZScsCS8qIEhpZGUgdGhlIHBsdWdpbiB3aW5kb3cgKGRlYWxsb2NhdGUgbGFyZ2UgbWVtb3J5IGhlcmUhKSAqLw0KCQkNCglrVmlzdWFsUGx1Z2luU2V0V2luZG93TWVzc2FnZQkJPSAnc3dpbicsCS8qIENoYW5nZSB0aGUgd2luZG93IHBhcmFtZXRlcnMgKi8NCg0KCWtWaXN1YWxQbHVnaW5SZW5kZXJNZXNzYWdlCQkJPSAndnJuZCcsCS8qIFJlbmRlciB0byB3aW5kb3cgKi8NCgkNCglrVmlzdWFsUGx1Z2luVXBkYXRlTWVzc2FnZQkJCT0gJ3Z1cGQnLAkvKiBVcGRhdGUgdGhlIHdpbmRvdyAqLw0KCQ0KCWtWaXN1YWxQbHVnaW5QbGF5TWVzc2FnZQkJCT0gJ3ZwbHknLAkvKiBQbGF5aW5nIGEgdHJhY2sgKi8NCglrVmlzdWFsUGx1Z2luQ2hhbmdlVHJhY2tNZXNzYWdlCQk9ICdjdHJrJywJLyogQ2hhbmdlIHRyYWNrIChmb3IgQ0QgY29udGludW91cyBwbGF5KSAqLw0KCWtWaXN1YWxQbHVnaW5TdG9wTWVzc2FnZQkJCT0gJ3ZzdHAnLAkvKiBTdG9wcGluZyBhIHRyYWNrICovDQoJa1Zpc3VhbFBsdWdpblNldFBvc2l0aW9uTWVzc2FnZQkJPSAnc2V0cCcsCS8qIFNldHRpbmcgdGhlIHBvc2l0aW9uIG9mIGEgdHJhY2sgKi8NCgkNCglrVmlzdWFsUGx1Z2luUGF1c2VNZXNzYWdlCQkJPSAndnBhdScsCS8qIFBhdXNpbmcgYSB0cmFjayAodW51c2VkIC0gUGF1c2UgaXMgc3RvcCkgKi8NCglrVmlzdWFsUGx1Z2luVW5wYXVzZU1lc3NhZ2UJCQk9ICd2dW5wJywJLyogVW5wYXVzaW5nIGEgdHJhY2sgKHVudXNlZCAtIFBhdXNlIGlzIHN0b3ApICovDQoJDQoJa1Zpc3VhbFBsdWdpbkV2ZW50TWVzc2FnZQkJCT0gJ3ZldnQnCS8qIE1hYy1ldmVudC4gKi8NCn07DQoNCi8qDQoJVmlzdWFsUGx1Z2luIG1lc3NhZ2VzDQoqLw0KDQplbnVtIHsNCglrVmlzdWFsTWF4RGF0YUNoYW5uZWxzCQk9IDIsDQoNCglrVmlzdWFsTnVtV2F2ZWZvcm1FbnRyaWVzCT0gNTEyLA0KCWtWaXN1YWxOdW1TcGVjdHJ1bUVudHJpZXMJPSA1MTINCn07DQoNCmVudW0gew0KCS8qIFNob3dXaW5kb3cgb3B0aW9ucyAqLw0KCQ0KCWtXaW5kb3dJc0Z1bGxTY3JlZW4gPSAoMUwgPDwgMCkNCn07DQoNCnN0cnVjdCBSZW5kZXJWaXN1YWxEYXRhIHsNCglVSW50OAkJCQkJCQludW1XYXZlZm9ybUNoYW5uZWxzOw0KCVVJbnQ4CQkJCQkJCXdhdmVmb3JtRGF0YVtrVmlzdWFsTWF4RGF0YUNoYW5uZWxzXVtrVmlzdWFsTnVtV2F2ZWZvcm1FbnRyaWVzXTsNCgkNCglVSW50OAkJCQkJCQludW1TcGVjdHJ1bUNoYW5uZWxzOw0KCVVJbnQ4CQkJCQkJCXNwZWN0cnVtRGF0YVtrVmlzdWFsTWF4RGF0YUNoYW5uZWxzXVtrVmlzdWFsTnVtU3BlY3RydW1FbnRyaWVzXTsNCn07DQp0eXBlZGVmIHN0cnVjdCBSZW5kZXJWaXN1YWxEYXRhIFJlbmRlclZpc3VhbERhdGE7DQoNCnN0cnVjdCBWaXN1YWxQbHVnaW5Jbml0TWVzc2FnZSB7DQoJVUludDMyCQkJCQkJCW1lc3NhZ2VNYWpvclZlcnNpb247CS8qIElucHV0ICovDQoJVUludDMyCQkJCQkJCW1lc3NhZ2VNaW5vclZlcnNpb247CS8qIElucHV0ICovDQoJTnVtVmVyc2lvbgkJCQkJCWFwcFZlcnNpb247CQkJCS8qIElucHV0ICovDQoNCgl2b2lkICoJCQkJCQkJYXBwQ29va2llOwkJCQkvKiBJbnB1dCAqLw0KCUlUQXBwUHJvY1B0cgkJCQkJYXBwUHJvYzsJCQkJLyogSW5wdXQgKi8NCg0KCU9wdGlvbkJpdHMJCQkJCQlvcHRpb25zOwkJCQkvKiBPdXRwdXQgKi8NCgl2b2lkICoJCQkJCQkJcmVmQ29uOwkJCQkJLyogT3V0cHV0ICovDQp9Ow0KdHlwZWRlZiBzdHJ1Y3QgVmlzdWFsUGx1Z2luSW5pdE1lc3NhZ2UgVmlzdWFsUGx1Z2luSW5pdE1lc3NhZ2U7DQoNCnN0cnVjdCBWaXN1YWxQbHVnaW5TaG93V2luZG93TWVzc2FnZSB7DQoJQ0dyYWZQdHIJCQkJCQlwb3J0OwkJCQkJLyogSW5wdXQgKi8NCglSZWN0CQkJCQkJCWRyYXdSZWN0OwkJCQkvKiBJbnB1dCAqLw0KCU9wdGlvbkJpdHMJCQkJCQlvcHRpb25zOwkJCQkvKiBJbnB1dCAqLw0KfTsNCnR5cGVkZWYgc3RydWN0IFZpc3VhbFBsdWdpblNob3dXaW5kb3dNZXNzYWdlIFZpc3VhbFBsdWdpblNob3dXaW5kb3dNZXNzYWdlOw0KDQpzdHJ1Y3QgVmlzdWFsUGx1Z2luU2V0V2luZG93TWVzc2FnZSB7DQoJQ0dyYWZQdHIJCQkJCQlwb3J0OwkJCQkJLyogSW5wdXQgKi8NCglSZWN0CQkJCQkJCWRyYXdSZWN0OwkJCQkvKiBJbnB1dCAqLw0KCU9wdGlvbkJpdHMJCQkJCQlvcHRpb25zOwkJCQkvKiBJbnB1dCAqLw0KfTsNCnR5cGVkZWYgc3RydWN0IFZpc3VhbFBsdWdpblNldFdpbmRvd01lc3NhZ2UgVmlzdWFsUGx1Z2luU2V0V2luZG93TWVzc2FnZTsNCg0Kc3RydWN0IFZpc3VhbFBsdWdpblBsYXlNZXNzYWdlIHsNCglJVFRyYWNrSW5mbyAqCQkJCQl0cmFja0luZm87CQkJCS8qIElucHV0ICovDQoJSVRTdHJlYW1JbmZvICoJCQkJCXN0cmVhbUluZm87CQkJCS8qIElucHV0ICovDQoJU0ludDMyCQkJCQkJCXZvbHVtZTsJCQkJCS8qIElucHV0ICovDQoJDQoJVUludDMyCQkJCQkJCWJpdFJhdGU7CQkJCS8qIElucHV0ICovDQoJDQoJU291bmRDb21wb25lbnREYXRhCQkJCXNvdW5kRm9ybWF0OwkJCS8qIElucHV0ICovDQp9Ow0KdHlwZWRlZiBzdHJ1Y3QgVmlzdWFsUGx1Z2luUGxheU1lc3NhZ2UgVmlzdWFsUGx1Z2luUGxheU1lc3NhZ2U7DQoNCnN0cnVjdCBWaXN1YWxQbHVnaW5DaGFuZ2VUcmFja01lc3NhZ2Ugew0KCUlUVHJhY2tJbmZvICoJCQkJCXRyYWNrSW5mbzsJCQkJLyogSW5wdXQgKi8NCglJVFN0cmVhbUluZm8gKgkJCQkJc3RyZWFtSW5mbzsJCQkJLyogSW5wdXQgKi8NCn07DQp0eXBlZGVmIHN0cnVjdCBWaXN1YWxQbHVnaW5DaGFuZ2VUcmFja01lc3NhZ2UgVmlzdWFsUGx1Z2luQ2hhbmdlVHJhY2tNZXNzYWdlOw0KDQpzdHJ1Y3QgVmlzdWFsUGx1Z2luUmVuZGVyTWVzc2FnZSB7DQoJUmVuZGVyVmlzdWFsRGF0YSAqCQkJCXJlbmRlckRhdGE7CQkJCS8qIElucHV0ICovDQoJVUludDMyCQkJCQkJCXRpbWVTdGFtcElEOwkJCS8qIElucHV0ICovDQp9Ow0KdHlwZWRlZiBzdHJ1Y3QgVmlzdWFsUGx1Z2luUmVuZGVyTWVzc2FnZSBWaXN1YWxQbHVnaW5SZW5kZXJNZXNzYWdlOw0KDQpzdHJ1Y3QgVmlzdWFsUGx1Z2luU2V0UG9zaXRpb25NZXNzYWdlIHsNCglVSW50MzIJCQkJCQkJcG9zaXRpb25UaW1lSW5NUzsJCS8qIElucHV0ICovDQp9Ow0KdHlwZWRlZiBzdHJ1Y3QgVmlzdWFsUGx1Z2luU2V0UG9zaXRpb25NZXNzYWdlIFZpc3VhbFBsdWdpblNldFBvc2l0aW9uTWVzc2FnZTsNCg0Kc3RydWN0IFZpc3VhbFBsdWdpbkV2ZW50TWVzc2FnZSB7DQoJRXZlbnRSZWNvcmQgKgkJCQkJZXZlbnQ7CQkJCQkvKiBJbnB1dCAqLw0KfTsNCnR5cGVkZWYgc3RydWN0IFZpc3VhbFBsdWdpbkV2ZW50TWVzc2FnZSBWaXN1YWxQbHVnaW5FdmVudE1lc3NhZ2U7DQoNCnN0cnVjdCBWaXN1YWxQbHVnaW5NZXNzYWdlSW5mbyB7DQoJdW5pb24gew0KCQlWaXN1YWxQbHVnaW5Jbml0TWVzc2FnZQkJCQlpbml0TWVzc2FnZTsNCgkJVmlzdWFsUGx1Z2luU2hvd1dpbmRvd01lc3NhZ2UJCXNob3dXaW5kb3dNZXNzYWdlOw0KCQlWaXN1YWxQbHVnaW5TZXRXaW5kb3dNZXNzYWdlCQlzZXRXaW5kb3dNZXNzYWdlOw0KCQlWaXN1YWxQbHVnaW5QbGF5TWVzc2FnZQkJCQlwbGF5TWVzc2FnZTsNCgkJVmlzdWFsUGx1Z2luQ2hhbmdlVHJhY2tNZXNzYWdlCQljaGFuZ2VUcmFja01lc3NhZ2U7DQoJCVZpc3VhbFBsdWdpblJlbmRlck1lc3NhZ2UJCQlyZW5kZXJNZXNzYWdlOw0KCQlWaXN1YWxQbHVnaW5TZXRQb3NpdGlvbk1lc3NhZ2UJCXNldFBvc2l0aW9uTWVzc2FnZTsNCgkJVmlzdWFsUGx1Z2luRXZlbnRNZXNzYWdlCQkJZXZlbnRNZXNzYWdlOw0KCX0gdTsNCn07DQp0eXBlZGVmIHN0cnVjdCBWaXN1YWxQbHVnaW5NZXNzYWdlSW5mbyBWaXN1YWxQbHVnaW5NZXNzYWdlSW5mbzsNCg0KI2lmIFBSQUdNQV9TVFJVQ1RfQUxJR04NCiAgICAjcHJhZ21hIG9wdGlvbnMgYWxpZ249cmVzZXQNCiNlbGlmIFBSQUdNQV9TVFJVQ1RfUEFDS1BVU0gNCiAgICAjcHJhZ21hIHBhY2socG9wKQ0KI2VsaWYgUFJBR01BX1NUUlVDVF9QQUNLDQogICAgI3ByYWdtYSBwYWNrKCkNCiNlbmRpZg0KDQojaWZkZWYgX19jcGx1c3BsdXMNCn0NCiNlbmRpZg0KDQojZW5kaWYgLyogX19JVFVORVNWSVNVQUxBUElfXyAqLw0=