|
From: Red K. <red...@pr...> - 2004-05-19 12:30:37
|
I2lmbmRlZiB4ZW5vY2lkZV9fZGF0YWludGVyZmFjZXNfX2JlaGF2aW9yX19pY2Fycmllcl9oDQoj ZGVmaW5lIHhlbm9jaWRlX19kYXRhaW50ZXJmYWNlc19fYmVoYXZpb3JfX2ljYXJyaWVyX2gNCg0K I2luY2x1ZGUgPHV0aWxpdHkvY29tbW9uLmg+DQojaW5jbHVkZSAiLi4vLi4vY29tbW9uL3hlbm9y ZXF1aXNpdGVzLmgiDQ0KI2luY2x1ZGUgPG1hcD4NDQojaW5jbHVkZSA8Ym9vc3Qvc2hhcmVkX3B0 ci5ocHA+DQ0KI2luY2x1ZGUgIi4uLy4uL2NvbW1vbi9leGNlcHRpb25zLmgiDQoNCnVzaW5nIG5h bWVzcGFjZSBVdGlsaXR5Ow0KDQpuYW1lc3BhY2UgWGVub2NpZGUNCnsNCiAgICBuYW1lc3BhY2Ug QmVoYXZpb3INCiAgICB7DQ0KLy8gUks6IEkgZG9udCBrbm93IGlmIHlvdXIgZGV2ZWxvcG1lbnQg ZW52aXJvbm1lbnQgb3IgeW91ciBtYWlsIGNsaWVudCBrZWVwcyB0cmFzaGluZyB0aGUgc291cmNl cw0KLy8gICAgIHRyeSB0byB6aXAgdGhlbSB0aGUgbmV4dCB0aW1lLg0KDQoNCi8vIFJLOiBOZXZl ciBwdXQgZnVuY3Rpb25zIGluIHRoZSBnZW5lcmFsIG5hbWVzcGFjZSB3aXRob3V0IGEgY2xhc3Mu Li4gVGhhdCBpcyBlaXRoZXIgYW4gaW50ZXJuYWwgbWV0aG9kLCBvciBmaW5kIHNvbWV3aGVyZSBp dA0KLy8gICAgIGJlbG9uZ3MgdG8uLi4gc29tZSBzb3J0IG9mIEdlb21ldHJ5IHV0aWxpdHkgY2xh c3MgKEkgZGlzY291cmFnZSB0aGlzIGZvciBub3cpLiBJZiB3ZSBuZWVkIGl0LCB3ZSBjYW4gcmVm YWN0b3IgaXQgaW4gYSBjb3VwbGUgb2YgbWludXRlcy4NCkJvb2wgcG9pbnRJblJlY3RhbmdsZShV SW50MzIgcG9pbnRYLCBVSW50MzIgcG9pbnRZLCBVSW50MzIgY29ybmVyWCwgVUludDMyIGNvcm5l clksIFVJbnQzMiB3aWR0aCwgVUludDMyIGhlaWdodCkNCnsNCglyZXR1cm4gKChwb2ludFggPj0g Y29ybmVyWCkgfHwgKHBvaW50WSA+PSBjb3JuZXJZKSB8fCAocG9pbnRYIDw9IGNvcm5lclggKyB3 aWR0aCkgfHwgKHBvaW50WSA8PSBjb3JuZXJZICsgaGVpZ2h0KSk7DQp9DQ0KDQp0ZW1wbGF0ZTwg Y2xhc3MgQ2FycmlhYmxlT2JqZWN0ID4NCmNsYXNzIENhcnJpZXJDb250YWluZXINCnsNCnB1Ymxp YzogICANCg0KICAgdHlwZWRlZiBib29zdDo6c2hhcmVkX3B0cjwgQ2FycmllckNvbnRhaW5lciA+ IFJlZmVyZW5jZTsNCiAgIA0KICAgdHlwZWRlZiBVdGlsaXR5OjpUdXBsZTI8IFVJbnQzMiwgVUlu dDMyID4gUG9zaXRpb25UdXBsZTsNDQogICB0eXBlZGVmIFV0aWxpdHk6OlR1cGxlMzwgQ2Fycmlh YmxlT2JqZWN0LCBVSW50MzIsIFVJbnQzMj4gUG9zaXRpb25lZE9iamVjdDsNCiAgIA0KICAgc3Rh dGljIGNvbnN0IFBvc2l0aW9uVHVwbGUgYW55d2hlcmU7DQogICBzdGF0aWMgY29uc3QgUG9zaXRp b25UdXBsZSBudWxsUG9zaXRpb247DQoNCiAgIHR5cGVkZWYgdHlwZW5hbWUgc3RkOjp2ZWN0b3I8 UG9zaXRpb25lZE9iamVjdD46Oml0ZXJhdG9yIEl0ZXJhdG9yOw0KDQogICAvLyEgQGJyaWVmIFRo aXMgaXMgdGhlIGRlZmF1bHQgY29uc3RydWN0b3IuDQogICAvLyEgQHBhcmFtIG5hbWUgaXMgdGhl IHN5bWJvbGljIG5hbWUgb2YgdGhlIGNvbnRhaW5lci4NCiAgIENhcnJpZXJDb250YWluZXIgKCBV dGlsaXR5OjpTdHJpbmcgbmFtZSwgVUludDMyIG1heFhTaXplLCBVSW50MzIgbWF4WVNpemUsIFJl YWwgbWF4V2VpZ2h0LCBVSW50MzIgbWF4SXRlbXMgKTsNCg0KICAgLy8hIEl0IGFkZHMgYW4gZWxl bWVudCBpbiB0aGUgc3BlY2lmaWVkIHBvc2l0aW9uLg0KICAgLy8hIEByZW1hcmsgSWYgdGhlIHBv c2l0aW9ucyBhcmUgaW52YWxpZCB0aGVuIGl0IHdpbGwgdGhyb3cgYW4gZXhjZXB0aW9uLg0KICAg dm9pZCBhZGRFbGVtZW50ICggQ2FycmlhYmxlT2JqZWN0IGVsZW1lbnQsIEludDMyIHhQb3NpdGlv biwgSW50MzIgeVBvc2l0aW9uICk7DQogICAvLyEgSXQgYWRkcyBhbiBlbGVtZW50IGluIHRoZSBz cGVjaWZpZWQgcG9zaXRpb24uDQogICAvLyEgQHJlbWFyayBJZiB0aGUgcG9zaXRpb25zIGFyZSBp bnZhbGlkIHRoZW4gaXQgd2lsbCB0aHJvdyBhbiBleGNlcHRpb24uDQogICB2b2lkIGFkZEVsZW1l bnQgKCBDYXJyaWFibGVPYmplY3QgZWxlbWVudCwgUG9zaXRpb25UdXBsZSBwb3NpdGlvbiA9IGFu eXdoZXJlICk7DQoNCiAgIC8vISBJdCByZW1vdmVzIGFuIGVsZW1lbnQgZnJvbSB0aGUgY29udGFp bmVyLg0KCXZvaWQgcmVtb3ZlRWxlbWVudCAoIENhcnJpYWJsZU9iamVjdCBlbGVtZW50ICk7DQog ICAvLyEgSXQgcmVtb3ZlcyB0aGUgRklSU1QgZWxlbWVudCBbaW5dIE9DQ1VQWUlORyBwb3NpdGlv biAoeCx5KSBhbmQgcmV0dXJucyBpdC4NCiAgIENhcnJpYWJsZU9iamVjdCByZW1vdmVFbGVtZW50 ICggVUludDMyIHhQb3NpdGlvbiwgVUludDMyIHlQb3NpdGlvbiApOw0KDQogICAvLyEgQGJyaWVm IFJldHVybnMgdHJ1ZSBpZiB0aGUgZWxlbWVudCBjYW4gYmUgYWRkZWQgYXQgdGhlIHNwZWNpZmll ZCBwb3NpdGlvbi4NDQogICAvLyEgQGJyaWVmIEFzc3VtZXMgcG9zaXRpb25hbCBjb250YWluZXIu DQogICBCb29sIGNhbkFkZEVsZW1lbnQgKCBDYXJyaWFibGVPYmplY3QgZWxlbWVudCwgSW50MzIg eFBvc2l0aW9uLCBJbnQzMiB5UG9zaXRpb24gKTsNCiAgIC8vISBAYnJpZWYgUmV0dXJucyB0cnVl IGlmIHRoZSBlbGVtZW50IGNhbiBiZSBhZGRlZCBhdCB0aGUgc3BlY2lmaWVkIHBvc2l0aW9uLg0K ICAgLy8hIEBicmllZiBBc3N1bWVzIHBvc2l0aW9uYWwgY29udGFpbmVyLg0NCiAgIEJvb2wgY2Fu QWRkRWxlbWVudCAoIENhcnJpYWJsZU9iamVjdCBlbGVtZW50LCBQb3NpdGlvblR1cGxlIHBvc2l0 aW9uID0gQ2FycmllckNvbnRhaW5lcjo6YW55d2hlcmUgKTsNCg0KICAgLy8hIEBicmllZiBJdCBj aGVja3Mgd2hldGhlciB0aGVyZSBpcyBhIHBvc2l0aW9uIHRoYXQgaW4gd2hpY2ggaXQgY2FuIHB1 dCB0aGUgZWxlbWVudC4NCiAgIC8vISBAYnJpZWYgQXNzdW1lcyBwb3NpdGlvbmFsIGNvbnRhaW5l ci4NDQogICANCiAgIC8vIFJLOiBUaGlzIGZ1bmN0aW9uYWxpdHkgaXMgYWNjb21wbGlzaGVkIGJ5 IHRoZSBtb3N0IGNvbW1vbiBhZGRFbGVtZW50ICggZWxlbWVudCApIGNhbGwsIHRoYXQgaXMgd2h5 IHRoZSBhbnl3aGVyZSBjb25zdGFudCBpcyB0aGVyZSBmb3INCiAgIC8vICAgICB0byBoYXZlIGEg dW5pZmllZCBzdHlsZS4gVGhpcyBtZXRob2QgaXMgZWl0aGVyIHN1cGVyZmx1b3VzIChpdCBpcyBy ZXBsaWNhdGluZyBhbHJlYWR5IGF2YWlsYWJsZSBmdW5jdGlvbmFsaXR5KSBvciBpdCBpcyBtaXN0 YWtlbmx5DQogICAvLyAgICAgcGxhY2VkIGFzIHB1YmxpYywgYW5kIHNob3VsZCBiZSB1c2VkIGFz IGEgcHJpdmF0ZSB1dGlsaXR5IG1ldGhvZC4NCg0KICAgLy8hIEByZXR1cm5zIG51bGxQb3NpdGlv biBpZiBpdCBjb3VsZG50IGZpbmQgYSBwb3NpdGlvbiB0byBwdXQgdGhlIGVsZW1lbnRzIGluIHRo ZSBjb250YWluZXIuDQogICAvLyEgQHJldHVybnMgQSBQb3NpdGlvblR1cGxlIHdpdGggdGhlIHRv cC1sZWZ0IHBvc2l0aW9uIHdoZXJlIGl0IGNhbiBwdXQgdGhlIGVsZW1lbnQsIHlvdSBoYXZlIHRv IHBhc3MgdGhhdCBwYXJhbWV0ZXIgdG8gYW4gYWRkRWxlbWVudCBjYWxsLg0KICAgUG9zaXRpb25U dXBsZSB3aGVyZUNhbkFkZEVsZW1lbnQgKCBDYXJyaWFibGVPYmplY3QgZWxlbWVudCApOw0KDQog ICAvLyEgUmV0dXJucyB0aGUgY29udGFpbmVyIG5hbWUNCiAgIFV0aWxpdHk6OlN0cmluZyBnZXRD b250YWluZXJOYW1lICgpOw0KDQogICAvLyEgUmV0dXJucyB0aGUgY29udGFpbmVyIGhhc2ggdmFs dWUuDQogICBVSW50MzIgZ2V0Q29udGFpbmVyTmFtZUhhc2ggKCk7DQoNCiAgIC8vISBSZXR1cm4g dGhlIHRvdGFsIHdlaWdodCBvZiBhbGwgdGhlIG9iamVjdHMgc3RvcmVkIGluIHRoZSBjb250YWlu ZXIuDQogICBSZWFsIGdldEN1cnJlbnRUb3RhbFdlaWdodCAoKTsNCg0KICAgLy8hIEBicmllZiBS ZXR1cm5zIGFuIGl0ZXJhdG9yIHRvIHRoZSBmaXJzdCBlbGVtZW50IGluIHRoZSBjb250YWluZXIu DQogICBJdGVyYXRvciBnZXRDb250YWluZXJCZWdpbiAoKTsNCg0KICAgLy8hIEBicmllZiBSZXR1 cm5zIGFuIGl0ZXJhdG9yIHNob3dpbmcgdGhlIGVuZCBvZiB0aGUgY29udGFpbmVyLg0KICAgSXRl cmF0b3IgZ2V0Q29udGFpbmVyRW5kICgpOw0KDQpwcm90ZWN0ZWQ6DQoNCiAgIC8vISBUaGUgbmFt ZSBvZiB0aGUgY29udGFpbmVyDQogICBVdGlsaXR5OjpTdHJpbmcgbmFtZTsNCiAgIC8vISBUaGlz IGlzIHRoZSBwcmVjYWxjdWxhdGVkIGNvbnRhaW5lciBuYW1lIGhhc2ggdmFsdWUuDQogICBVSW50 MzIgbmFtZUhhc2g7DQoNCiAgIC8vISBUaGUgbWF4aW11bSBzaXplIG9mIHRoZSBjb250YWluZXIg aW4gdGhlIFggYXhpcy4NCiAgIFVJbnQzMiBtYXhYU2l6ZTsNCiAgIC8vISBUaGUgbWF4aW11bSBz aXplIG9mIHRoZSBjb250YWluZXIgaW4gdGhlIFkgYXhpcy4NCiAgIFVJbnQzMiBtYXhZU2l6ZTsN CiAgIC8vISBUaGUgbWF4aW11bSB3ZWlnaHQgb2YgdGhlIGl0ZW1zIGluIHRoZSBjb250YWluZXIu DQogICBSZWFsIG1heFdlaWdodDsNCiAgIC8vISBUaGUgbWF4aW11bSBpdGVtcyB0aGF0IGNhbiBi ZSBwdXQgaW4gdGhlIGNvbnRhaW5lciwgd2hldGhlciB0aGVyZSBpcyBzcGFjZSBhdmFpbGFibGUg b3Igbm90Lg0KICAgVUludDMyIG1heEl0ZW1zOw0KDQogICAvLyEgVGhpcyBpcyB0aGUgZWxlbWVu dCBjb250YWluZXINCiAgIHN0ZDo6dmVjdG9yPFBvc2l0aW9uZWRPYmplY3Q+IGNvbnRhaW5lckVs ZW1lbnRzOw0KDQogICAvLyEgQGJyaWVmIFRoaXMgaXMgYSB1c2VyIHNwZWNpZmljYWJsZSB3YXkg b2YgZmluZGluZyBhIHBsYWNlIGluIHRoZSBjb250YWluZXIgZm9yIGFuIHNwZWNpZmllZCBlbGVt ZW50Lg0KICAgdmlydHVhbCBQb3NpdGlvblR1cGxlIGZpbmRFbGVtZW50UG9zaXRpb24gKCBDYXJy aWFibGVPYmplY3QgZWxlbWVudCApOw0KICAgDQogICAvLyEgQGJyaWVmIElmIHlvdSBuZWVkIHRv IHNwZWNpZnkgYSBkaWZmZXJlbnQgYWNjZXB0aW9uIEJlaGF2aW9yIG92ZXJyaWRlIHRoaXMgbWV0 aG9kLg0KICAgLy8hIEBwYXIgRm9yIGV4YW1wbGUgaWYgeW91IGhhdmUgdG8gYWNjZXB0IG9ubHkg SVdlYXBvbnMgdGhlbiB5b3Ugb3ZlcnJpZGUgdGhpcyBtZXRob2QgdG8gYWNjZXB0IG9ubHkgZWxl bWVudHMgZGVyaXZlZCBmcm9tIElXZWFwb24gaW50ZXJmYWNlLg0KICAgLy8hIEByZW1hcmsgVGhp cyBtZXRob2QgaXMgY2FsbGVkIGFmdGVyIGEgcGxhY2Ugd2FzIGZvdW5kIChvciBwcm92aWRlZCkg Zm9yIHRoZSBlbGVtZW50Lg0KICAgLy8hIEByZXR1cm5zIFRydWUgdG8gYWNjZXB0IHRoZSBlbGVt ZW50LCBmYWxzZSB0byByZWplY3QgaXQuDQogICB2aXJ0dWFsIEJvb2wgdXNlckRlZmluZWRFbGVt ZW50QWNjZXB0ICggQ2FycmlhYmxlT2JqZWN0IGVsZW1lbnQsIFBvc2l0aW9uVHVwbGUgcG9zaXRp b24gKTsNCg0KfTsNCg0vLyBSSzogVGhpcyBkZXNpZ24gaXMgc3VwcG9zZWQgdG8gYmUgcG9zaXRp b25hbCAod2l0aCBhIHBvc2liaWxpdHkgdG8gdXNlIHRoZSBQT1NJVElPTkFMIERPTlQgQ0FSRSBp bnRlcmZhY2UpIHNvIHRoaXMgaW5oZXJpdGFuY2UgaXMgc3VwZXJmbHVvdXMuDQp0ZW1wbGF0ZTwg Y2xhc3MgQ2FycmlhYmxlT2JqZWN0ID4NDQpjbGFzcyBQb3NpdGlvbmFsQ29udGFpbmVyOiBwdWJs aWMgQ2FycmllckNvbnRhaW5lcjxDYXJyaWFibGVPYmplY3Q+DQ0Kew0NCnB1YmxpYzoNDQoJLy8h IEBicmllZiBUaGlzIGlzIHRoZSBkZWZhdWx0IGNvbnN0cnVjdG9yLg0NCgkvLyEgQHBhcmFtIG5h bWUgaXMgdGhlIHN5bWJvbGljIG5hbWUgb2YgdGhlIGNvbnRhaW5lci4NDQogICBQb3NpdGlvbmFs Q29udGFpbmVyICggVXRpbGl0eTo6U3RyaW5nIG5hbWUsIFVJbnQzMiBtYXhYU2l6ZSwgVUludDMy IG1heFlTaXplLCBSZWFsIG1heFdlaWdodCwgVUludDMyIG1heEl0ZW1zICk7DQ0KcHJvdGVjdGVk Og0NCgl2aXJ0dWFsIENhcnJpZXJDb250YWluZXI8Q2FycmlhYmxlT2JqZWN0Pjo6UG9zaXRpb25U dXBsZSBmaW5kRWxlbWVudFBvc2l0aW9uIChDYXJyaWFibGVPYmplY3QgZWxlbWVudCk7DQ0KfTsN DQoNCi8vIFN0YXRpYyBjb25zdGFudCBpbml0aWFsaXphdGlvbi4NCnRlbXBsYXRlPCBjbGFzcyBD YXJyaWFibGVPYmplY3QgPg0KY29uc3QgdHlwZW5hbWUgQ2FycmllckNvbnRhaW5lcjxDYXJyaWFi bGVPYmplY3Q+OjpQb3NpdGlvblR1cGxlIENhcnJpZXJDb250YWluZXI8Q2FycmlhYmxlT2JqZWN0 Pjo6YW55d2hlcmUgPSBDYXJyaWVyQ29udGFpbmVyPENhcnJpYWJsZU9iamVjdD46OlBvc2l0aW9u VHVwbGUgKDAsMCk7DQoNCnRlbXBsYXRlPCBjbGFzcyBDYXJyaWFibGVPYmplY3QgPg0KY29uc3Qg dHlwZW5hbWUgQ2FycmllckNvbnRhaW5lcjxDYXJyaWFibGVPYmplY3Q+OjpQb3NpdGlvblR1cGxl IENhcnJpZXJDb250YWluZXI8Q2FycmlhYmxlT2JqZWN0Pjo6bnVsbFBvc2l0aW9uID0gQ2Fycmll ckNvbnRhaW5lcjxDYXJyaWFibGVPYmplY3Q+OjpQb3NpdGlvblR1cGxlICgtMSwtMSk7DQoNCg0K dGVtcGxhdGU8IGNsYXNzIENhcnJpYWJsZU9iamVjdCA+DQpDYXJyaWVyQ29udGFpbmVyPENhcnJp YWJsZU9iamVjdD46OkNhcnJpZXJDb250YWluZXIgKCBVdGlsaXR5OjpTdHJpbmcgbmFtZSwgVUlu dDMyIG1heFhTaXplLCBVSW50MzIgbWF4WVNpemUsIFJlYWwgbWF4V2VpZ2h0LCBVSW50MzIgbWF4 SXRlbXMgKQ0Kew0NCiAgIHRoaXMtPm5hbWUgPSBuYW1lOw0NCiAgIHRoaXMtPm1heFhTaXplID0g bWF4WFNpemU7DQ0KICAgdGhpcy0+bWF4WVNpemUgPSBtYXhZU2l6ZTsNDQogICB0aGlzLT5tYXhX ZWlnaHQgPSBtYXhXZWlnaHQ7DQ0KICAgdGhpcy0+bWF4SXRlbXMgPSBtYXhJdGVtczsNDQovLyAg IHRoaXMtPmNvbnRhaW5lckVsZW1lbnRzID0gW107DQ0KLy8gICBVSW50MzIgbmFtZUhhc2g7DQ0K Ly8gICB2aXJ0dWFsIFBvc2l0aW9uVHVwbGUgZmluZEVsZW1lbnRQb3NpdGlvbiAoIENhcnJpYWJs ZU9iamVjdCBlbGVtZW50ICk7DQ0KLy8gICB2aXJ0dWFsIEJvb2wgdXNlckRlZmluZWRFbGVtZW50 QWNjZXB0ICggQ2FycmlhYmxlT2JqZWN0IGVsZW1lbnQsIFBvc2l0aW9uVHVwbGUgcG9zaXRpb24g KTsNDQp9Ow0NCg0KdGVtcGxhdGU8IGNsYXNzIENhcnJpYWJsZU9iamVjdCA+DQp2b2lkIENhcnJp ZXJDb250YWluZXI8Q2FycmlhYmxlT2JqZWN0Pjo6YWRkRWxlbWVudCAoIENhcnJpYWJsZU9iamVj dCBlbGVtZW50LCBJbnQzMiB4UG9zaXRpb24sIEludDMyIHlQb3NpdGlvbiApDQp7DQ0KCWlmIChj YW5BZGRFbGVtZW50KGVsZW1lbnQsIHhQb3NpdGlvbiwgeVBvc2l0aW9uKSkNDQoJCQljb250YWlu ZXJFbGVtZW50cy5wdXNoX2JhY2soUG9zaXRpb25lZE9iamVjdChlbGVtZW50LCB4UG9zaXRpb24s IHlQb3NpdGlvbikpOw0NCn07DQoNCnRlbXBsYXRlPCBjbGFzcyBDYXJyaWFibGVPYmplY3QgPg0K dm9pZCBDYXJyaWVyQ29udGFpbmVyPENhcnJpYWJsZU9iamVjdD46OmFkZEVsZW1lbnQgKCBDYXJy aWFibGVPYmplY3QgZWxlbWVudCwgdHlwZW5hbWUgQ2FycmllckNvbnRhaW5lcjxDYXJyaWFibGVP YmplY3Q+OjpQb3NpdGlvblR1cGxlIHBvc2l0aW9uKQ0Kew0NCglpZiAocG9zaXRpb24gPT0gYW55 d2hlcmUpDQ0KCXsNDQoJCVBvc2l0aW9uVHVwbGUgb3BlblBvc2l0aW9uID0gZmluZEVsZW1lbnRQ b3NpdGlvbihlbGVtZW50KTsNDQoJCWlmICghKG9wZW5Qb3NpdGlvbiA9PSBudWxsUG9zaXRpb24p KQ0NCgkJCWFkZEVsZW1lbnQoZWxlbWVudCwgb3BlblBvc2l0aW9uLmdldEZpcnN0KCksIG9wZW5Q b3NpdGlvbi5nZXRTZWNvbmQoKSk7DQ0KCQkvLyBSSzogTkVWRVIgRVZFUiB0aHJvdyB1bnN0cnVj dHVyZWQgZXhjZXB0aW9ucy4uLiBhbmQgTkVWRVIgRVZFUiBieSB2YWx1ZSAoc2V2ZXJhbCBwcm9i bGVtcyBhcnJpc2UgYmVjYXVzZSBvZiB0aGlzKS4NICAgICAgLy8gICAgIFVTRSB0aGUgZXhjZXB0 aW9ucyB0aGF0IGFyZSBzcGVjaWZpZWQgaW4gdGhlIGV4Y2VwdGlvbnMuaCBmaWxlLi4uDSAgICAg IC8vICAgICBJbiB0aGlzIGNhc2UgdGhlIHByb2JsZW0gaXMgY2F1c2VkIGJ5IHRoZSB1c2VyIG1p c2JlaGF2aW9yIG9yIG5vdCBjYWxsaW5nIGNhbkFkZEVsZW1lbnQgYmVmb3JlIGNhbGxpbmcgYWRk LiAoIHlvdSBkb250IGhhdmUgdG8gY2hlY2sgYW55dGhpbmcgaGVyZSwgZXhjZXB0IHRoYXQgeW91 IGNhbiBwdXQgdGhlIG9iamVjdCB3aGVyZSBpdCBiZWxvbmdzIGFzIGEgcHJlY29uZGl0aW9uKS4N ICAgICAgZWxzZSB0aHJvdyAiTm8gcGxhY2UgaW4gdGhlIGNvbnRhaW5lciI7DQ0KDQ0KCX0NDQoJ ZWxzZSBhZGRFbGVtZW50KGVsZW1lbnQsIHBvc2l0aW9uLmdldEZpcnN0KCksIHBvc2l0aW9uLmdl dFNlY29uZCgpKTsNDQp9Ow0KDQp0ZW1wbGF0ZTwgY2xhc3MgQ2FycmlhYmxlT2JqZWN0ID4NCnZv aWQgQ2FycmllckNvbnRhaW5lcjxDYXJyaWFibGVPYmplY3Q+OjpyZW1vdmVFbGVtZW50ICggQ2Fy cmlhYmxlT2JqZWN0IGVsZW1lbnQgKQ0Kew0NCglVSW50MzIgaW5kZXggPSAwOw0NCiAgIC8vIFJL OiBUaGUgc2FtZSB0aGluZyBhYm91dCBmb3IgdGhhdCBpcyBwbGFjZWQgc29tZXdoZXJlIGVsc2Uu Li4gZGlkbnQgZmxhZyBldmVyeSBvY2N1cmVuY2Ugb2YgdGhpcyBpbiB0aGUgc291cmNlIHRob3Vn aC4NCgl3aGlsZSAoaW5kZXggPD0gY29udGFpbmVyRWxlbWVudHMuc2l6ZSgpKQ0NCgl7DQ0KCQlp ZiAoY29udGFpbmVyRWxlbWVudHMuYXQoaW5kZXgpLmdldEZpcnN0KCkgPT0gZWxlbWVudCkNDQoJ CXsNDQoJCQkvLyBtYW51YWwgZXJhc2UNDQoJCQl3aGlsZSAoaW5kZXggPCBjb250YWluZXJFbGVt ZW50cy5zaXplKCkpDQ0KCQkJew0NCgkJCQljb250YWluZXJFbGVtZW50c1tpbmRleF0gPSBjb250 YWluZXJFbGVtZW50cy5hdChpbmRleCsxKTsNDQoJCQkJaW5kZXgrKzsNDQoJCQl9DQ0KCQkJY29u dGFpbmVyRWxlbWVudHMucG9wX2JhY2soKTsNDQoJCX0NDQoJCWluZGV4Kys7DQ0KCX0NDQp9Ow0K DQp0ZW1wbGF0ZTwgY2xhc3MgQ2FycmlhYmxlT2JqZWN0ID4NCkNhcnJpYWJsZU9iamVjdCBDYXJy aWVyQ29udGFpbmVyPENhcnJpYWJsZU9iamVjdD46OnJlbW92ZUVsZW1lbnQgKCBVSW50MzIgeFBv c2l0aW9uLCBVSW50MzIgeVBvc2l0aW9uICkNCnsNICAgLy8gUks6IFRoaXMgaXMgYSBiZXR0ZXIg d2F5IG9mIGRvaW5nIHRoZSBzYW1lLCBhcyBtdWNoIGFzIHlvdSBjYW4gZm9yIGxvb2tzIHdpdGgg aXRlcmF0b3IgY291bnRlcnMNCiAgIC8vICAgICB1c2UgRk9SIGFzIGl0IGlzIHRoZSBiZXN0IGNv bnRyb2wgc3RydWN0dXJlIGZvciB0aGF0IGNhc2UuIFRha2UgYSBsb29rIGF0IGhvdyB0aWdodCB0 aGUgbmV3DQogICAvLyAgICAgaW1wbGVtZW50YXRpb24gaXMsIGFuZCBob3cgd2UgZG9udCB3YXN0 ZSBlZmZvcnRzIHRvIGtlZXAgdGhlIHZlY3RvciAib3JkZXJlZCIuLi4gQXMgdGhlcmUgaXMNCiAg IC8vICAgICBubyBvcmRlcmVkIHJlcXVpcmVtZW50IG9uIHRoaXMgd2UgY2FuIG1vdmUgd2hhdGV2 ZXIgb2JqZWN0IGV2ZXJ5d2hlcmUgd2Ugd2FudC4gSWYgd2UgZW5kIHVwDQogICAvLyAgICAgbmVl ZGluZyBhIG1vcmUgc3RyaWN0IG9yZGVyIHdlIGNhbiBwYXJ0aWFsIHNwZWNpYWxpemF0ZSB0aGlz IHRlbXBsYXRlLg0KCVVJbnQzMiBpbmRleCA9IDA7DSAgIFVJbnQzMiBjb250YWluZXJTaXplID0g Y29udGFpbmVyRWxlbWVudHMuc2l6ZSAoKTsNDQogICBmb3IgKCBVSW50MzIgaSA9IDA7IGkgPCBj b250YWluZXJTaXplOyBpKysgKQ0KICAgew0KICAgICAgUG9zaXRpb25lZE9iamVjdCBjdXJyZW50 RWxlbWVudCA9IGNvbnRhaW5lckVsZW1lbnRzW2ldOw0KICAgICAgaWYgKCBwb2ludEluUmVjdGFu Z2xlKCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeFBvc2l0aW9uLCANCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgeVBvc2l0aW9uLCANCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY3VycmVudEVsZW1lbnQuZ2V0U2Vjb25kKCksIA0KICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjdXJyZW50RWxlbWVudC5nZXRUaGlyZCgpLCANCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY3VycmVudEVsZW1lbnQuZ2V0Rmlyc3QoKS5nZXRPYmplY3RYU2l6ZSgpLCANCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudEVsZW1lbnQuZ2V0Rmlyc3QoKS5nZXRP YmplY3RZU2l6ZSgpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgKQ0KICAgICAgICAgICkN CiAgICAgIHsNCiAgICAgICAgIGNvbnRhaW5lckVsZW1lbnRzW2ldID0gY29udGFpbmVyRWxlbWVu dHNbY29udGFpbmVyU2l6ZS0xXTsNCiAgICAgICAgIGNvbnRhaW5lckVsZW1lbnRzLnBvcF9iYWNr ICgpOw0KICAgICAgICAgcmV0dXJuIGN1cnJlbnRFbGVtZW50LmdldEZpcnN0ICgpOw0KICAgICAg fTsNCiAgIH07DQoNCiAgIHRocm93IG5ldyBYRUludmFsaWRQYXJhbWV0ZXIgKCk7ICAgDQoNCi8q DXdoaWxlIChpbmRleCAhPSBjb250YWluZXJFbGVtZW50cy5zaXplKCkpDQ0KCXsNDQoJCVBvc2l0 aW9uZWRPYmplY3QgY3VycmVudEVsZW1lbnQgPSBjb250YWluZXJFbGVtZW50cy5hdChpbmRleCk7 DQ0KCQlpZiAocG9pbnRJblJlY3RhbmdsZSh4UG9zaXRpb24sIHlQb3NpdGlvbiwgY3VycmVudEVs ZW1lbnQuZ2V0U2Vjb25kKCksIGN1cnJlbnRFbGVtZW50LmdldFRoaXJkKCksIGN1cnJlbnRFbGVt ZW50LmdldEZpcnN0KCkuZ2V0T2JqZWN0WFNpemUoKSwgY3VycmVudEVsZW1lbnQuZ2V0Rmlyc3Qo KS5nZXRPYmplY3RZU2l6ZSgpKSkNCgkJew0KCQkJLy8gbWFudWFsIGVyYXNlDQoJCQl3aGlsZSAo aW5kZXggPCBjb250YWluZXJFbGVtZW50cy5zaXplKCkpDQoJCQl7DQoJCQkJY29udGFpbmVyRWxl bWVudHNbaW5kZXhdID0gY29udGFpbmVyRWxlbWVudHMuYXQoaW5kZXgrMSk7DQoJCQkJaW5kZXgr KzsNCgkJCX0NCgkJCWNvbnRhaW5lckVsZW1lbnRzLnBvcF9iYWNrKCk7DQoJCQlyZXR1cm4gY3Vy cmVudEVsZW1lbnQuZ2V0Rmlyc3QoKTsNCgkJfQ0KCQlpbmRleCsrOw0JfQ0JLy8gaWYgdGhpcyBw b2ludCBpcyByZWFjaGVkLCB0aGUgcG9zaXRpb24gaXMgdW5vY2N1cGllZA0KCXRocm93ICJObyBl bGVtZW50IGF0IGdpdmVuIHBvaW50IjsNCglyZXR1cm4gTlVMTDsNKi8NCn07DQoNCnRlbXBsYXRl PCBjbGFzcyBDYXJyaWFibGVPYmplY3QgPg0KVXRpbGl0eTo6Qm9vbCBDYXJyaWVyQ29udGFpbmVy PENhcnJpYWJsZU9iamVjdD46OmNhbkFkZEVsZW1lbnQgKCBDYXJyaWFibGVPYmplY3QgZWxlbWVu dCwgSW50MzIgeFBvc2l0aW9uLCBJbnQzMiB5UG9zaXRpb24gKQ0Kew0NCgkvLyB0aHJvdyBleGNl cHRpb25zIGhlcmU/DQ0KCWlmICgoY29udGFpbmVyRWxlbWVudHMuc2l6ZSgpID09IG1heEl0ZW1z KQ0NCgkJfHwgKGVsZW1lbnQuZ2V0T2JqZWN0V2VpZ2h0KCkgKyB0aGlzLT5nZXRDdXJyZW50VG90 YWxXZWlnaHQoKSA+IG1heFdlaWdodCkNDQoJCXx8ICh4UG9zaXRpb24gPCAwKSB8fCAoeVBvc2l0 aW9uIDwgMCkNDQoJCXx8ICh4UG9zaXRpb24gKyBlbGVtZW50LmdldE9iamVjdFhTaXplKCkgPj0g bWF4WFNpemUpDQ0KCQl8fCAoeVBvc2l0aW9uICsgZWxlbWVudC5nZXRPYmplY3RZU2l6ZSgpID49 IG1heFlTaXplKSkNDQogICAgICAgICAvLyBSSzogTkVWRVIgdXNlIHRoZSBDIG1hc2sgZm9yIGJv b2xlYW4gdmFsdWVzLiBGQUxTRSBpcyAwIGluc3RlYWQgb2YgZmFsc2UuLi4gDSAgICAgICAgIC8v ICAgICBRdWl0ZSBhIHByb2JsZW0sIHlvdSBhcmUgZG9pbmcgYSBjb2hlcnNpb24gaW4gaGVyZSBh bmQgdXNpbmcgYXJpdGhtZXRpYyBib29sZWFucyB0aGF0IGlzIHF1aXRlIGEgYmFkIGFuZCByaXNr eSBoYWJpdC4NICAgICAgICAgLy8gICAgIFVzZSByZXR1cm4gZmFsc2U7IGluc3RlYWQuDSAgICAg ICAgIHJldHVybiBGQUxTRTsNDQoJcmV0dXJuIHVzZXJEZWZpbmVkRWxlbWVudEFjY2VwdChlbGVt ZW50LCBQb3NpdGlvblR1cGxlKHhQb3NpdGlvbiwgeVBvc2l0aW9uKSk7DQ0KfTsNCg0KdGVtcGxh dGU8IGNsYXNzIENhcnJpYWJsZU9iamVjdCA+DQpVdGlsaXR5OjpCb29sIENhcnJpZXJDb250YWlu ZXI8Q2FycmlhYmxlT2JqZWN0Pjo6Y2FuQWRkRWxlbWVudCAoIENhcnJpYWJsZU9iamVjdCBlbGVt ZW50LCB0eXBlbmFtZSBDYXJyaWVyQ29udGFpbmVyPENhcnJpYWJsZU9iamVjdD46OlBvc2l0aW9u VHVwbGUgcG9zaXRpb24gKQ0Kew0NCglpZiAocG9zaXRpb24gPT0gYW55d2hlcmUpIHJldHVybiAo ISh0aGlzLT53aGVyZUNhbkFkZEVsZW1lbnQoZWxlbWVudCkgPT0gbnVsbFBvc2l0aW9uKSk7DQ0K CWVsc2UgcmV0dXJuIGNhbkFkZEVsZW1lbnQoZWxlbWVudCwgcG9zaXRpb24uZ2V0Rmlyc3QoKSwg cG9zaXRpb24uZ2V0U2Vjb25kKCkpOw0NCn07DQoNCnRlbXBsYXRlPCBjbGFzcyBDYXJyaWFibGVP YmplY3QgPg0KdHlwZW5hbWUgQ2FycmllckNvbnRhaW5lcjxDYXJyaWFibGVPYmplY3Q+OjpQb3Np dGlvblR1cGxlIENhcnJpZXJDb250YWluZXI8Q2FycmlhYmxlT2JqZWN0Pjo6d2hlcmVDYW5BZGRF bGVtZW50ICggQ2FycmlhYmxlT2JqZWN0IGVsZW1lbnQgKQ0Kew0NCglyZXR1cm4gZmluZEVsZW1l bnRQb3NpdGlvbihlbGVtZW50KTsNDQp9Ow0KDQp0ZW1wbGF0ZTwgY2xhc3MgQ2FycmlhYmxlT2Jq ZWN0ID4NClV0aWxpdHk6OlN0cmluZyBDYXJyaWVyQ29udGFpbmVyPENhcnJpYWJsZU9iamVjdD46 OmdldENvbnRhaW5lck5hbWUgKCkNCnsNDQoJcmV0dXJuIG5hbWU7DQ0KfTsNCg0KdGVtcGxhdGU8 IGNsYXNzIENhcnJpYWJsZU9iamVjdCA+DQpVdGlsaXR5OjpVSW50MzIgQ2FycmllckNvbnRhaW5l cjxDYXJyaWFibGVPYmplY3Q+OjpnZXRDb250YWluZXJOYW1lSGFzaCAoKQ0Kew0NCglyZXR1cm4g bmFtZUhhc2g7DQ0KfTsNCg0KdGVtcGxhdGU8IGNsYXNzIENhcnJpYWJsZU9iamVjdCA+DQpVdGls aXR5OjpSZWFsIENhcnJpZXJDb250YWluZXI8Q2FycmlhYmxlT2JqZWN0Pjo6Z2V0Q3VycmVudFRv dGFsV2VpZ2h0ICgpDQp7DQ0KCVVJbnQzMiBpdGVyYXRvciA9IDA7DQ0KCVJlYWwgcmV0dXJuVmFs dWUgPSAwOw0NCgl3aGlsZSAoaXRlcmF0b3IgPCBjb250YWluZXJFbGVtZW50cy5zaXplKCkpDQ0K CXsNDQoJCXJldHVyblZhbHVlICs9IGNvbnRhaW5lckVsZW1lbnRzLmF0KGl0ZXJhdG9yKS5nZXRG aXJzdCgpLmdldE9iamVjdFdlaWdodCgpOw0NCgkJaXRlcmF0b3IrKzsNDQoJfQ0NCglyZXR1cm4g cmV0dXJuVmFsdWU7DQ0KfTsNCg0KdGVtcGxhdGU8IGNsYXNzIENhcnJpYWJsZU9iamVjdCA+DQp0 eXBlbmFtZSBDYXJyaWVyQ29udGFpbmVyPENhcnJpYWJsZU9iamVjdD46Okl0ZXJhdG9yIENhcnJp ZXJDb250YWluZXI8Q2FycmlhYmxlT2JqZWN0Pjo6Z2V0Q29udGFpbmVyQmVnaW4gKCkNCnsNDQoJ cmV0dXJuIGNvbnRhaW5lckVsZW1lbnRzLmJlZ2luKCk7DQ0KfTsNCg0KdGVtcGxhdGU8IGNsYXNz IENhcnJpYWJsZU9iamVjdCA+DQp0eXBlbmFtZSBDYXJyaWVyQ29udGFpbmVyPENhcnJpYWJsZU9i amVjdD46Okl0ZXJhdG9yIENhcnJpZXJDb250YWluZXI8Q2FycmlhYmxlT2JqZWN0Pjo6Z2V0Q29u dGFpbmVyRW5kICgpDQp7DQ0KCXJldHVybiBjb250YWluZXJFbGVtZW50cy5lbmQoKTsNDQp9Ow0K DQ0KLy8hIEZvciBzdGFuZGFyZCBzdG9yZS10eXBlIGNvbnRhaW5lcnMgOikNCnRlbXBsYXRlPCBj bGFzcyBDYXJyaWFibGVPYmplY3QgPg0KdHlwZW5hbWUgQ2FycmllckNvbnRhaW5lcjxDYXJyaWFi bGVPYmplY3Q+OjpQb3NpdGlvblR1cGxlIENhcnJpZXJDb250YWluZXI8Q2FycmlhYmxlT2JqZWN0 Pjo6ZmluZEVsZW1lbnRQb3NpdGlvbiAoIENhcnJpYWJsZU9iamVjdCBlbGVtZW50ICkNCnsNDQoJ aWYgKCBjYW5BZGRFbGVtZW50KGVsZW1lbnQsMSwxKSApDQ0KCQlyZXR1cm4gUG9zaXRpb25UdXBs ZSgxLDEpOw0NCgllbHNlDQ0KCQlyZXR1cm4gbnVsbFBvc2l0aW9uOw0NCn07DQoNCi8vISBGb3Ig c3RhbmRhcmQgcG9zaXRpb25hbCBjb250YWluZXJzDXRlbXBsYXRlPCBjbGFzcyBDYXJyaWFibGVP YmplY3QgPg10eXBlbmFtZSBDYXJyaWVyQ29udGFpbmVyPENhcnJpYWJsZU9iamVjdD46OlBvc2l0 aW9uVHVwbGUgUG9zaXRpb25hbENvbnRhaW5lcjxDYXJyaWFibGVPYmplY3Q+OjpmaW5kRWxlbWVu dFBvc2l0aW9uICggQ2FycmlhYmxlT2JqZWN0IGVsZW1lbnQgKQ0NCnsNDQoJVUludDMyIHggPSAw Ow0NCglVSW50MzIgeSA9IDA7DQ0KDSAgIC8vIFJLOiBUaGlzIGlzIGJldHRlciBoYW5kbGVkIGJ5 IDIgZm9yIHN0YXRlbWVudHMuDSAgIHdoaWxlICh4ICE9IG1heFhTaXplKQ0NCgl7DQ0KCQl3aGls ZSAoeSAhPSBtYXhZU2l6ZSkNDQoJCXsNDQoJCQlpZiAoY2FuQWRkRWxlbWVudChlbGVtZW50LCB4 LCB5KSkNDQoJCQkJcmV0dXJuIFBvc2l0aW9uVHVwbGUoeCwgeSk7DQ0KCQkJeSsrOw0NCgkJfQ0N CgkJeSA9IDA7DQ0KCQl4Kys7DQ0KCX0NDQoJcmV0dXJuIG51bGxQb3NpdGlvbjsNDQp9Ow0NCg0N Cg0NCi8vIFJLOiBUaGlzIGhhcyB0byBiZSBpbXBsZW1lbnRlZCBhbnl3YXlzIGJ1dCB3aWxsIGFs d2F5cyByZXR1cm4gdHJ1ZSB1bmxlc3Mgb3ZlcnJpZGVuLg0KdGVtcGxhdGU8IGNsYXNzIENhcnJp YWJsZU9iamVjdCA+DQpVdGlsaXR5OjpCb29sIENhcnJpZXJDb250YWluZXI8Q2FycmlhYmxlT2Jq ZWN0Pjo6dXNlckRlZmluZWRFbGVtZW50QWNjZXB0ICggQ2FycmlhYmxlT2JqZWN0IGVsZW1lbnQs IHR5cGVuYW1lIENhcnJpZXJDb250YWluZXI8Q2FycmlhYmxlT2JqZWN0Pjo6UG9zaXRpb25UdXBs ZSBwb3NpdGlvbiApDQp7DQogICByZXR1cm4gdHJ1ZTsNCn07DQoNCg0KDQoNCi8vISAgIEBicmll ZiBUaGlzIGludGVyZmFjZSBpcyBpbmhlcml0ZWQgYnkgYW55IG9iamVjdCB0aGF0IGNhbiBjYXJy eSBvciBzdG9yZSBvYmplY3RzIGxpa2UgR2VuZXJhbCBTdG9yZXMsIEFpcmNyYWZ0cywgU29sZGll cnMsIGV0Yy4NCi8vISAgIEBwYXIgVGhlIGNhcnJpZXIgaW50ZXJmYWNlIHdpbGwgZGVmaW5lIGFs bCB0aGUgbmVjZXNhcnkgbWV0aG9kcyB0byBtYW5pcHVsYXRlIA0KLy8hICAgICAgICB0aGUgY29u dGFpbmVycyB0aGF0IGV2ZXJ5IGNhcnJpZXIgb2JqZWN0IHdpbGwgaGF2ZS4gDQovLyEgICBAcGFy IEF0IHRoZSBjb25zdHJ1Y3Rpb24gb2YgdGhlIG9iamVjdCB0aGUgaW50ZXJuYWxDYXJyaWVySW5p dCB2aXJ0dWFsIG1ldGhvZA0KLy8hICAgICAgICB3aWxsIGJlIGNhbGxlZCBhbmQgdGhlIGNhcnJp ZXIgd2lsbCBpbml0aWFsaXplIGl0c2VsZiwgYmFzZWQgb24gdGhlIGNvbnRhaW5lcnMNCi8vISAg ICAgICAgdGhhdCBpdCBpcyBhbGxvd2VkIHRvIHVzZS4NCi8vISAgIEBub3RlIEl0IHdvdWxkIGJl IGludGVyZXN0aW5nIHRvIGJlIGFibGUgdG8gaW5pdGlhbGl6ZSB0aGlzIHZhbHVlcyBmcm9tIGFu IHNjcmlwdCBvciB2aWEgDQovLyEgICAgICAgIGFuIHNwZWNpYWwgZmlsZSwgYmVjYXVzZSBvZiB0 aGF0IGFueSBjYXJyaWVyIG9iamVjdCB3aWxsIGhhdmUgYSBjbGFzcyBuYW1lLiBGb3IgaW5zdGFu Y2UNCi8vISAgICAgICAgYSBzb2xkaWVyIGZpbGUgd2lsbCBiZSBhc3NvY2lhdGVkIHRvIGl0cyBj b25maWd1cmF0aW9uIHZpYSBhICJTb2xkaWVyIiBuYW1lLiBUaGUgbmFtZSBvZiB0aGUNCi8vISAg ICAgICAgY2xhc3MgY2FuIGJlIHJldHJpZXZlZCB2aWEgaXRzIEMrKyBSVFRJIGluZm9ybWF0aW9u Lg0KLy8hICAgQHJlbWFyayBFdmVyeSBjYXJyaWFibGUgb2JqZWN0IG11c3QgaGF2ZSBvbmx5IG9u ZSBJQ2FycmllciBhc3NvY2lhdGVkIGFzIGEgcGFyZW50Lg0KdGVtcGxhdGU8IGNsYXNzIENhcnJp YWJsZU9iamVjdCA+DQpjbGFzcyBJQ2Fycmllcg0Kew0KcHVibGljOg0KDQogICB0eXBlZGVmIHR5 cGVuYW1lIENhcnJpZXJDb250YWluZXI8Q2FycmlhYmxlT2JqZWN0Pjo6UmVmZXJlbmNlIENvbnRh aW5lclJlZmVyZW5jZTsNCg0KICAgQ29udGFpbmVyUmVmZXJlbmNlIGdldENhcnJpZXJDb250YWlu ZXJCeU5hbWUgKCBVdGlsaXR5OjpTdHJpbmcgbmFtZSApOw0KDQpwcm90ZWN0ZWQ6DQoNCiAgIC8v ISBAYnJpZWYgVGhpcyBpcyB0aGUgaW5pdGlhbGl6YXRpb24gbWV0aG9kIHRoYXQgd2Ugd2lsbCBo YXZlIHRvIG92ZXJyaWRlIHRvIG1vZGlmeSB0aGUNCiAgIC8vISBpbml0aWFsaXphdGlvbiBwcm9j ZXNzLg0KICAgdmlydHVhbCB2b2lkIGluaXRpYWxpemVDYXJyaWVyICgpOw0KDQogICBzdGQ6Om1h cDwgVXRpbGl0eTo6U3RyaW5nLCBDb250YWluZXJSZWZlcmVuY2UgPiBjYXJyaWVyQ29udGFpbmVy czsNCg0KfTsNCg0KDQp0ZW1wbGF0ZTwgY2xhc3MgQ2FycmlhYmxlT2JqZWN0ID4NCnR5cGVuYW1l IElDYXJyaWVyPENhcnJpYWJsZU9iamVjdD46OkNvbnRhaW5lclJlZmVyZW5jZSBJQ2FycmllcjxD YXJyaWFibGVPYmplY3Q+OjpnZXRDYXJyaWVyQ29udGFpbmVyQnlOYW1lICggVXRpbGl0eTo6U3Ry aW5nIG5hbWUgKQ0Kew0KICAgQ29udGFpbmVyUmVmZXJlbmNlIGF1eCAoIGNhcnJpZXJDb250YWlu ZXJzLmZpbmQgKCBuYW1lICkgKTsNCg0KICAgLy8gUks6IFVzZSB0aGlzIGtpbmQgb2Ygc3RydWN0 dXJlcyB0byBjaGVjayBmb3IgdGhpbmdzIHRoYXQgbXVzdCBoYXZlIGJlZW4gaW4gdGhlDQogICAv LyAgICAgbWV0aG9kIGNvbnRyYWN0Li4uIHRoYXQgbWVhbnMgYW55dGhpbmcgeW91IGFzc3VtZSBo YXMgdG8gYmUgdHJ1ZSBvbiBlbnRyYW5jZQ0KICAgLy8gICAgIG9yIGV2ZW4gaW4gdGhlIG1pZGRs ZSBvciBlbmQgb2YgdGhlIG1ldGhvZC4gVGhlIFRBRyBwcmVmaXggI1BSRUNPTkRJVElPTiBpcw0K ICAgLy8gICAgIHVzZWQgdG8gZmxhZyB0aGUgY29uc3RydWN0IHRvIGZ1cnRoZXIgcmVtb3ZhbCBp biByZWxlYXNlIG1vZGUgaWYgdGhlIGNvbnRyb2xzDQogICAvLyAgICAgZG8gaGF2ZSBhIHBlcmZv cm1hbmNlIGltcGFjdCAocHJvZmlsaW5nIGNvbXByb2JhYmxlIG9mIGNvdXJzZSkuDQogICAvLyAj UFJFQ09ORElUSU9OQkVHSU4NCiAgIGlmICggYXV4ID09IE5VTEwgKQ0KICAgICAgdGhyb3cgbmV3 IFhFSW52YWxpZFBhcmFtZXRlciAoKTsNCiAgIC8vICNQUkVDT05ESVRJT05FTkQNCg0KICAgcmV0 dXJuIGF1eDsNCg0KfTsgDQoNCnRlbXBsYXRlPCBjbGFzcyBDYXJyaWFibGVPYmplY3QgPg0Kdm9p ZCBJQ2FycmllcjxDYXJyaWFibGVPYmplY3Q+Ojppbml0aWFsaXplQ2FycmllciAoKQ0Ke307DQoN Cg0KDQoJfTsgLy8gQmVoYXZpb3INCn07IC8vIFhlbm9jaWRlDQoNCg0KI2VuZGlmDQo= |