From: Red K. <red...@pr...> - 2004-05-20 12:47:37
|
I2lmbmRlZiB4ZW5vY2lkZV9fZGF0YWludGVyZmFjZXNfX2JlaGF2aW9yX19pY2Fycmllcl9oCiNk ZWZpbmUgeGVub2NpZGVfX2RhdGFpbnRlcmZhY2VzX19iZWhhdmlvcl9faWNhcnJpZXJfaAoKI2lu Y2x1ZGUgPHV0aWxpdHkvY29tbW9uLmg+CiNpbmNsdWRlICIuLi8uLi9jb21tb24veGVub3JlcXVp c2l0ZXMuaCINCg0KLy8gUks6IFRoaXMgdHdvIGhhZCBhbHJlYWR5IGJlZW4gYWRkZWQgaW4gdGhl IGN1cnJlbnQgQ1ZTLCBqdXN0IGRvIGFuIHVwZGF0ZS4gKHV0aWxpdHkgYW5kIHhlbm9yZXF1aXNp dGVzLmgpDQovLyAgICAgSSBzdWdnZXN0IGV2ZXJ5b25lIHRoYXQgZXZlcnkgdGltZSB5b3Ugd29y ayBkbyBhbiB1cGRhdGUgb2YgdGhlIGFwcHJvcHJpYXRlIG1vZHVsZXMuDQojaW5jbHVkZSA8bWFw Pg0KI2luY2x1ZGUgPGJvb3N0L3NoYXJlZF9wdHIuaHBwPg0KCiNpbmNsdWRlICIuLi8uLi9jb21t b24vZXhjZXB0aW9ucy5oIgoKdXNpbmcgbmFtZXNwYWNlIFV0aWxpdHk7CgpuYW1lc3BhY2UgWGVu b2NpZGUKewogICAgbmFtZXNwYWNlIEJlaGF2aW9yCiAgICB7DQoKCi8vIFJLOiBUaGUgY29kZSBp cyBhbG1vc3QgcmVhZHkgZm9yIENWUyBBY2NlcHRhbmNlLCBqdXN0IGNvcnJlY3QgYSBjb3VwbGUg b2YgdGhpbmdzIEkgcG9pbnRlZCBvdXQuCi8vICAgICBNb3N0IG9mIHRoZW0gYXJlIHRoaW5ncyB5 b3UgZm9yZ290IHRvIGFkZCwgYW5kIGEgdmVyeSBsaXR0bGUgbWlzdW5kZXJzdGFuZGluZyByZWdh cmRpbmcKLy8gICAgIGR1cGxpY2F0ZWQgb2JqZWN0cywgYnV0IGV4Y2VsZW50IGpvYiBzbyBmYXIu Ci8vIFJLOiBZb3Ugc2hvdWxkIHRha2UgYSBsb29rIGF0IGdyb3VwaW5nIHRlY2huaXF1ZXMgZnJv bSB0aGUgYm9vayBDb2RlIENvbXBsZXRlLCBpdCBpcyBhbiBleGNlbGVudAovLyAgICAgcmVzb3Vy Y2UuCnRlbXBsYXRlPCBjbGFzcyBDYXJyaWFibGVPYmplY3QgPgpjbGFzcyBDYXJyaWVyQ29udGFp bmVyCnsKcHVibGljOiAgIAoKICAgdHlwZWRlZiBib29zdDo6c2hhcmVkX3B0cjwgQ2FycmllckNv bnRhaW5lciA+IFJlZmVyZW5jZTsKICAgCiAgIHR5cGVkZWYgVXRpbGl0eTo6VHVwbGUyPCBVSW50 MzIsIFVJbnQzMiA+IFBvc2l0aW9uVHVwbGU7DQogICB0eXBlZGVmIFV0aWxpdHk6OlR1cGxlMzwg Q2FycmlhYmxlT2JqZWN0LCBVSW50MzIsIFVJbnQzMj4gUG9zaXRpb25lZE9iamVjdDsKICAgCiAg IHN0YXRpYyBjb25zdCBQb3NpdGlvblR1cGxlIGFueXdoZXJlOwogICBzdGF0aWMgY29uc3QgUG9z aXRpb25UdXBsZSBudWxsUG9zaXRpb247DQoKICAgdHlwZWRlZiB0eXBlbmFtZSBzdGQ6OnZlY3Rv cjxQb3NpdGlvbmVkT2JqZWN0Pjo6aXRlcmF0b3IgSXRlcmF0b3I7CgogICAvLyEgQGJyaWVmIFRo aXMgaXMgdGhlIGRlZmF1bHQgY29uc3RydWN0b3IuCiAgIC8vISBAcGFyYW0gbmFtZSBpcyB0aGUg c3ltYm9saWMgbmFtZSBvZiB0aGUgY29udGFpbmVyLgogICBDYXJyaWVyQ29udGFpbmVyICggVXRp bGl0eTo6U3RyaW5nIG5hbWUsIFVJbnQzMiBtYXhYU2l6ZSwgVUludDMyIG1heFlTaXplLCBSZWFs IG1heFdlaWdodCwgVUludDMyIG1heEl0ZW1zICk7CgogICAvLyEgSXQgYWRkcyBhbiBlbGVtZW50 IGluIHRoZSBzcGVjaWZpZWQgcG9zaXRpb24uCiAgIC8vISBAcmVtYXJrIElmIHRoZSBwb3NpdGlv bnMgYXJlIGludmFsaWQgdGhlbiBpdCB3aWxsIHRocm93IGFuIGV4Y2VwdGlvbi4KICAgdm9pZCBh ZGRFbGVtZW50ICggQ2FycmlhYmxlT2JqZWN0IGVsZW1lbnQsIEludDMyIHhQb3NpdGlvbiwgSW50 MzIgeVBvc2l0aW9uICk7CiAgIC8vISBJdCBhZGRzIGFuIGVsZW1lbnQgaW4gdGhlIHNwZWNpZmll ZCBwb3NpdGlvbi4KICAgLy8hIEByZW1hcmsgSWYgdGhlIHBvc2l0aW9ucyBhcmUgaW52YWxpZCB0 aGVuIGl0IHdpbGwgdGhyb3cgYW4gZXhjZXB0aW9uLgogICB2b2lkIGFkZEVsZW1lbnQgKCBDYXJy aWFibGVPYmplY3QgZWxlbWVudCwgUG9zaXRpb25UdXBsZSBwb3NpdGlvbiA9IG51bGxQb3NpdGlv biApOwoKICAgLy8hIEl0IHJlbW92ZXMgYW4gZWxlbWVudCBmcm9tIHRoZSBjb250YWluZXIuCgl2 b2lkIHJlbW92ZUVsZW1lbnQgKCBDYXJyaWFibGVPYmplY3QgZWxlbWVudCApOwoKICAgLy8gUks6 IER1cGxpY2F0ZXMgbm8gYWxsb3dlZCBoZXJlLi4uCiAgIC8vISBJdCByZW1vdmVzIHRoZSBGSVJT VCBlbGVtZW50IFtpbl0gT0NDVVBZSU5HIHBvc2l0aW9uICh4LHkpIGFuZCByZXR1cm5zIGl0Lgog ICBDYXJyaWFibGVPYmplY3QgcmVtb3ZlRWxlbWVudCAoIFVJbnQzMiB4UG9zaXRpb24sIFVJbnQz MiB5UG9zaXRpb24gKTsKCiAgIC8vISBAYnJpZWYgUmV0dXJucyB0cnVlIGlmIHRoZSBlbGVtZW50 IGNhbiBiZSBhZGRlZCBhdCB0aGUgc3BlY2lmaWVkIHBvc2l0aW9uLg0KICAgLy8hIEBicmllZiBB c3N1bWVzIHBvc2l0aW9uYWwgY29udGFpbmVyLgogICBCb29sIGNhbkFkZEVsZW1lbnQgKCBDYXJy aWFibGVPYmplY3QgZWxlbWVudCwgSW50MzIgeFBvc2l0aW9uLCBJbnQzMiB5UG9zaXRpb24gKTsK ICAgLy8hIEBicmllZiBSZXR1cm5zIHRydWUgaWYgdGhlIGVsZW1lbnQgY2FuIGJlIGFkZGVkIGF0 IHRoZSBzcGVjaWZpZWQgcG9zaXRpb24uCiAgIC8vISBAYnJpZWYgQXNzdW1lcyBwb3NpdGlvbmFs IGNvbnRhaW5lci4NCiAgIEJvb2wgY2FuQWRkRWxlbWVudCAoIENhcnJpYWJsZU9iamVjdCBlbGVt ZW50LCBQb3NpdGlvblR1cGxlIHBvc2l0aW9uID0gQ2FycmllckNvbnRhaW5lcjo6YW55d2hlcmUg KTsKCiAgIC8vISBSZXR1cm5zIHRoZSBjb250YWluZXIgbmFtZQogICBVdGlsaXR5OjpTdHJpbmcg Z2V0Q29udGFpbmVyTmFtZSAoKTsKCiAgIC8vISBSZXR1cm5zIHRoZSBjb250YWluZXIgaGFzaCB2 YWx1ZS4KICAgVUludDMyIGdldENvbnRhaW5lck5hbWVIYXNoICgpOwoKICAgLy8hIFJldHVybiB0 aGUgdG90YWwgd2VpZ2h0IG9mIGFsbCB0aGUgb2JqZWN0cyBzdG9yZWQgaW4gdGhlIGNvbnRhaW5l ci4KICAgUmVhbCBnZXRDdXJyZW50VG90YWxXZWlnaHQgKCk7CgogICAvLyEgQGJyaWVmIFJldHVy bnMgYW4gaXRlcmF0b3IgdG8gdGhlIGZpcnN0IGVsZW1lbnQgaW4gdGhlIGNvbnRhaW5lci4KICAg SXRlcmF0b3IgZ2V0Q29udGFpbmVyQmVnaW4gKCk7CgogICAvLyEgQGJyaWVmIFJldHVybnMgYW4g aXRlcmF0b3Igc2hvd2luZyB0aGUgZW5kIG9mIHRoZSBjb250YWluZXIuCiAgIEl0ZXJhdG9yIGdl dENvbnRhaW5lckVuZCAoKTsKCnByb3RlY3RlZDoKCiAgIC8vISBUaGUgbmFtZSBvZiB0aGUgY29u dGFpbmVyCiAgIFV0aWxpdHk6OlN0cmluZyBuYW1lOwogICAvLyEgVGhpcyBpcyB0aGUgcHJlY2Fs Y3VsYXRlZCBjb250YWluZXIgbmFtZSBoYXNoIHZhbHVlLgogICBVSW50MzIgbmFtZUhhc2g7Cgog ICAvLyEgVGhlIG1heGltdW0gc2l6ZSBvZiB0aGUgY29udGFpbmVyIGluIHRoZSBYIGF4aXMuCiAg IFVJbnQzMiBtYXhYU2l6ZTsKICAgLy8hIFRoZSBtYXhpbXVtIHNpemUgb2YgdGhlIGNvbnRhaW5l ciBpbiB0aGUgWSBheGlzLgogICBVSW50MzIgbWF4WVNpemU7CiAgIC8vISBUaGUgbWF4aW11bSB3 ZWlnaHQgb2YgdGhlIGl0ZW1zIGluIHRoZSBjb250YWluZXIuCiAgIFJlYWwgbWF4V2VpZ2h0Owog ICAvLyEgVGhlIG1heGltdW0gaXRlbXMgdGhhdCBjYW4gYmUgcHV0IGluIHRoZSBjb250YWluZXIs IHdoZXRoZXIgdGhlcmUgaXMgc3BhY2UgYXZhaWxhYmxlIG9yIG5vdC4KICAgVUludDMyIG1heEl0 ZW1zOwoKICAgLy8hIFRoaXMgaXMgdGhlIGVsZW1lbnQgY29udGFpbmVyCiAgIHN0ZDo6dmVjdG9y PFBvc2l0aW9uZWRPYmplY3Q+IGNvbnRhaW5lckVsZW1lbnRzOwoKCWlubGluZSBCb29sIHBvaW50 SW5SZWN0YW5nbGUoVUludDMyIHBvaW50WCwgVUludDMyIHBvaW50WSwgVUludDMyIGNvcm5lclgs IFVJbnQzMiBjb3JuZXJZLCBVSW50MzIgd2lkdGgsIFVJbnQzMiBoZWlnaHQpDQoJeyByZXR1cm4g KChwb2ludFggPj0gY29ybmVyWCkgfHwgKHBvaW50WSA+PSBjb3JuZXJZKSB8fCAocG9pbnRYIDw9 IGNvcm5lclggKyB3aWR0aCkgfHwgKHBvaW50WSA8PSBjb3JuZXJZICsgaGVpZ2h0KSk7IH0NCg0K ICAgLy8hIEBicmllZiBSZXR1cm5zIHRydWUgaWYgdGhlIGVsZW1lbnQgY2FuIGJlIGFkZGVkIHcv byByZWdhcmQgdG8gb3RoZXIgaXRlbXMNCiAgIEJvb2wgY2FuV2Vha0FkZEVsZW1lbnQgKENhcnJp YWJsZU9iamVjdCBlbGVtZW50LCBJbnQzMiB4UG9zaXRpb24sIEludDMyIHlQb3NpdGlvbik7DQoN CiAgIC8vISBAYnJpZWYgVGhpcyBpcyBhIHVzZXIgc3BlY2lmaWNhYmxlIHdheSBvZiBmaW5kaW5n IGEgcGxhY2UgaW4gdGhlIGNvbnRhaW5lciBmb3IgYW4gc3BlY2lmaWVkIGVsZW1lbnQuCiAgIHZp cnR1YWwgUG9zaXRpb25UdXBsZSBmaW5kRWxlbWVudFBvc2l0aW9uICggQ2FycmlhYmxlT2JqZWN0 IGVsZW1lbnQgKTsKICAgCiAgIC8vISBAYnJpZWYgSWYgeW91IG5lZWQgdG8gc3BlY2lmeSBhIGRp ZmZlcmVudCBhY2NlcHRpb24gQmVoYXZpb3Igb3ZlcnJpZGUgdGhpcyBtZXRob2QuCiAgIC8vISBA cGFyIEZvciBleGFtcGxlIGlmIHlvdSBoYXZlIHRvIGFjY2VwdCBvbmx5IElXZWFwb25zIHRoZW4g eW91IG92ZXJyaWRlIHRoaXMgbWV0aG9kIHRvIGFjY2VwdCBvbmx5IGVsZW1lbnRzIGRlcml2ZWQg ZnJvbSBJV2VhcG9uIGludGVyZmFjZS4KICAgLy8hIEByZW1hcmsgVGhpcyBtZXRob2QgaXMgY2Fs bGVkIGFmdGVyIGEgcGxhY2Ugd2FzIGZvdW5kIChvciBwcm92aWRlZCkgZm9yIHRoZSBlbGVtZW50 LgogICAvLyEgQHJldHVybnMgVHJ1ZSB0byBhY2NlcHQgdGhlIGVsZW1lbnQsIGZhbHNlIHRvIHJl amVjdCBpdC4KICAgdmlydHVhbCBCb29sIHVzZXJEZWZpbmVkRWxlbWVudEFjY2VwdCAoIENhcnJp YWJsZU9iamVjdCBlbGVtZW50LCBQb3NpdGlvblR1cGxlIHBvc2l0aW9uICk7Cgp9OwoKLy8gU3Rh dGljIGNvbnN0YW50IGluaXRpYWxpemF0aW9uLgp0ZW1wbGF0ZTwgY2xhc3MgQ2FycmlhYmxlT2Jq ZWN0ID4KY29uc3QgdHlwZW5hbWUgQ2FycmllckNvbnRhaW5lcjxDYXJyaWFibGVPYmplY3Q+OjpQ b3NpdGlvblR1cGxlIENhcnJpZXJDb250YWluZXI8Q2FycmlhYmxlT2JqZWN0Pjo6YW55d2hlcmUg PSBDYXJyaWVyQ29udGFpbmVyPENhcnJpYWJsZU9iamVjdD46OlBvc2l0aW9uVHVwbGUgKDAsMCk7 Cgp0ZW1wbGF0ZTwgY2xhc3MgQ2FycmlhYmxlT2JqZWN0ID4KY29uc3QgdHlwZW5hbWUgQ2Fycmll ckNvbnRhaW5lcjxDYXJyaWFibGVPYmplY3Q+OjpQb3NpdGlvblR1cGxlIENhcnJpZXJDb250YWlu ZXI8Q2FycmlhYmxlT2JqZWN0Pjo6bnVsbFBvc2l0aW9uID0gQ2FycmllckNvbnRhaW5lcjxDYXJy aWFibGVPYmplY3Q+OjpQb3NpdGlvblR1cGxlICgtMSwtMSk7CgoKdGVtcGxhdGU8IGNsYXNzIENh cnJpYWJsZU9iamVjdCA+CkNhcnJpZXJDb250YWluZXI8Q2FycmlhYmxlT2JqZWN0Pjo6Q2Fycmll ckNvbnRhaW5lciAoIFV0aWxpdHk6OlN0cmluZyBuYW1lLCBVSW50MzIgbWF4WFNpemUsIFVJbnQz MiBtYXhZU2l6ZSwgUmVhbCBtYXhXZWlnaHQsIFVJbnQzMiBtYXhJdGVtcyApCnsNCiAgIHRoaXMt Pm5hbWUgPSBuYW1lOw0KICAgdGhpcy0+bWF4WFNpemUgPSBtYXhYU2l6ZTsNCiAgIHRoaXMtPm1h eFlTaXplID0gbWF4WVNpemU7DQogICB0aGlzLT5tYXhXZWlnaHQgPSBtYXhXZWlnaHQ7DQogICB0 aGlzLT5tYXhJdGVtcyA9IG1heEl0ZW1zOw0KLy8gICB0aGlzLT5jb250YWluZXJFbGVtZW50cyA9 IFtdOw0KLy8gICBVSW50MzIgbmFtZUhhc2g7DQovLyAgIHZpcnR1YWwgUG9zaXRpb25UdXBsZSBm aW5kRWxlbWVudFBvc2l0aW9uICggQ2FycmlhYmxlT2JqZWN0IGVsZW1lbnQgKTsNCi8vICAgdmly dHVhbCBCb29sIHVzZXJEZWZpbmVkRWxlbWVudEFjY2VwdCAoIENhcnJpYWJsZU9iamVjdCBlbGVt ZW50LCBQb3NpdGlvblR1cGxlIHBvc2l0aW9uICk7DQp9Ow0KDQp0ZW1wbGF0ZTwgY2xhc3MgQ2Fy cmlhYmxlT2JqZWN0ID4NCkJvb2wgQ2FycmllckNvbnRhaW5lcjxDYXJyaWFibGVPYmplY3Q+Ojpj YW5XZWFrQWRkRWxlbWVudCAoQ2FycmlhYmxlT2JqZWN0IGVsZW1lbnQsIEludDMyIHhQb3NpdGlv biwgSW50MzIgeVBvc2l0aW9uKQ0Kew0KICAgLy8gUks6IFRoaXMgaXMgYSBtZXRob2QgdGhhdCBu ZWVkcyB0byBhc3NlcnQgdXMgKHRob3NlIHdobyB1c2UgdGhlIGNsYXNzKSB0aGF0IHdlIGNhbiBh ZGQgYW4gZWxlbWVudCBhbnl3aGVyZS4NCiAgIC8vICAgICBUaGF0IGlzIHdoeSBpdCBkb2VzbnQg cHJlY29uZGl0aW9ucy4NCiAgIGlmICgoY29udGFpbmVyRWxlbWVudHMuc2l6ZSgpID09IG1heEl0 ZW1zKSB8fCAoZWxlbWVudC5nZXRPYmplY3RXZWlnaHQoKSArIHRoaXMtPmdldEN1cnJlbnRUb3Rh bFdlaWdodCgpID4gbWF4V2VpZ2h0KSkNCgl7DQoJCXJldHVybiBmYWxzZTsNCgl9DQoJaWYgKCh4 UG9zaXRpb24gPCAwKSB8fCAoeVBvc2l0aW9uIDwgMCkNCgkJfHwgKHhQb3NpdGlvbiArIGVsZW1l bnQuZ2V0T2JqZWN0WFNpemUoKSA+PSBtYXhYU2l6ZSkNCgkJfHwgKHlQb3NpdGlvbiArIGVsZW1l bnQuZ2V0T2JqZWN0WVNpemUoKSA+PSBtYXhZU2l6ZSkpDQoJew0KCQlyZXR1cm4gZmFsc2U7DQoJ fQ0KCXJldHVybiB0cnVlOw0KfQ0KDQoKdGVtcGxhdGU8IGNsYXNzIENhcnJpYWJsZU9iamVjdCA+ CnZvaWQgQ2FycmllckNvbnRhaW5lcjxDYXJyaWFibGVPYmplY3Q+OjphZGRFbGVtZW50ICggQ2Fy cmlhYmxlT2JqZWN0IGVsZW1lbnQsIEludDMyIHhQb3NpdGlvbiwgSW50MzIgeVBvc2l0aW9uICkK ew0KICAgLy8gUks6IFlvdSBtaXNzZWQgYSBwcmVjb25kaXRpb24gaGVyZSAobm8gZHVwbGljYXRl cykNCglhZGRFbGVtZW50KGVsZW1lbnQsIFBvc2l0aW9uVHVwbGUoeFBvc2l0aW9uLCB5UG9zaXRp b24pKTsNCn07Cgp0ZW1wbGF0ZTwgY2xhc3MgQ2FycmlhYmxlT2JqZWN0ID4Kdm9pZCBDYXJyaWVy Q29udGFpbmVyPENhcnJpYWJsZU9iamVjdD46OmFkZEVsZW1lbnQgKCBDYXJyaWFibGVPYmplY3Qg ZWxlbWVudCwgdHlwZW5hbWUgQ2FycmllckNvbnRhaW5lcjxDYXJyaWFibGVPYmplY3Q+OjpQb3Np dGlvblR1cGxlIHBvc2l0aW9uKQp7CQ0KCWlmIChwb3NpdGlvbiA9PSBudWxsUG9zaXRpb24pDQoJ ew0KICAgICAgLy8gUks6IEFsd2F5cyB0aGluayB0aGUgZm9sbG93aW5nLCBwcmVjb25kaXRpb24g Y2FuIGJlIHJlbW92ZWQgdmlhIGFuIHNjcmlwdA0KICAgICAgLy8gICAgIGZvciBoaWdoIHBlcmZv cm1hbmNlIHRoYXRzIHdoeSB3ZSBmbGFnIHRoZW0uIHNvIHRoZXkgaGF2ZSB0byBiZSBzaW1wbGUN CiAgICAgIC8vICAgICBzdGF0ZW1lbnRzLiBIZXJlIHRoZSBwcmVjb25kaXRpb24gaXMgdGhhdCB3 ZSBjYW4gYWRkIGVsZW1lbnRzICh3ZSBoYXZlDQogICAgICAvLyAgICAgYWxyZWFkeSB0ZXN0ZWQg dGhhdCBiZWZvcmUpLg0KDQogICAgICAvLyAjUFJFQ09ORElUSU9OQkVHSU4NCiAgICAgIGlmIChj YW5XZWFrQWRkRWxlbWVudChlbGVtZW50LCAwLCAwKSkNCiAgICAgICAgIHRocm93IG5ldyBYRUlu dmFsaWRQYXJhbWV0ZXIgKCk7DQogICAgICAvLyAjUFJFQ09ORElUSU9ORU5EDQoJCQ0KICAgICAg Y29udGFpbmVyRWxlbWVudHMucHVzaF9iYWNrKFBvc2l0aW9uZWRPYmplY3QoZWxlbWVudCwgMCwg MCkpOw0KCX0NCgllbHNlIGlmICggY2FuV2Vha0FkZEVsZW1lbnQoZWxlbWVudCwgcG9zaXRpb24u Z2V0Rmlyc3QoKSwgcG9zaXRpb24uZ2V0U2Vjb25kKCkpICkNCgl7DQoJCWlmIChwb3NpdGlvbiA9 PSBhbnl3aGVyZSkNCgkJew0KCQkJUG9zaXRpb25UdXBsZSBvcGVuUG9zaXRpb24gPSBmaW5kRWxl bWVudFBvc2l0aW9uKGVsZW1lbnQpOw0KICAgICAgICAgDQogICAgICAgICAvLyBSSzogVGhlIGV4 Y2VwdGlvbiBpcyBhIGNsYXNzaWMgdXNlIG9mIGFuIGludmFsaWQgcGFyYW1ldGVyLCB0aGUgcGFy YW1ldGVyIChlbGVtZW50LHBvc2l0aW9uKQ0KICAgICAgICAgLy8gICAgIGRvIG5vdCBmdWxmaWxs IHRoZSByZXF1aXJlbWVudHMgb2YgdGhlIG1ldGhvZC4NCg0KICAgICAgICAgLy8gI1BSRUNPTkRJ VElPTkJFR0lODQogICAgICAgICBpZiAoIG9wZW5Qb3NpdGlvbiA9PSBudWxsUG9zaXRpb24gKQ0K ICAgICAgICAgICAgdGhyb3cgbmV3IFhFSW52YWxpZFBhcmFtZXRlciAoKTsNCiAgICAgICAgIC8v ICNQUkVDT05ESVRJT05FTkQNCg0KCQkJYWRkRWxlbWVudChlbGVtZW50LCBvcGVuUG9zaXRpb24u Z2V0Rmlyc3QoKSwgb3BlblBvc2l0aW9uLmdldFNlY29uZCgpKTsNCg0KCQl9DQoJCWVsc2UgaWYg KCB1c2VyRGVmaW5lZEVsZW1lbnRBY2NlcHQoZWxlbWVudCwgcG9zaXRpb24pICkNCiAgICAgIHsN CiAgICAgICAgIC8vIFJLOiBZb3UgbWlzc2VkIHRoZSBwcmVjb25kaXRpb24gaGVyZSAobm8gZHVw bGljYXRlcykNCgkJCWNvbnRhaW5lckVsZW1lbnRzLnB1c2hfYmFjayhQb3NpdGlvbmVkT2JqZWN0 KGVsZW1lbnQsIHBvc2l0aW9uLmdldEZpcnN0KCksIHBvc2l0aW9uLmdldFNlY29uZCgpKSk7DQog ICAgICB9Ow0KCX0NCn07Cgp0ZW1wbGF0ZTwgY2xhc3MgQ2FycmlhYmxlT2JqZWN0ID4Kdm9pZCBD YXJyaWVyQ29udGFpbmVyPENhcnJpYWJsZU9iamVjdD46OnJlbW92ZUVsZW1lbnQgKCBDYXJyaWFi bGVPYmplY3QgZWxlbWVudCApCnsNCglVSW50MzIgY29udGFpbmVyU2l6ZSA9IGNvbnRhaW5lckVs ZW1lbnRzLnNpemUoKTsNCglmb3IgKCBVSW50MzIgaSA9IDA7IGkgIT0gY29udGFpbmVyU2l6ZTsg aSsrICkNCgl7DQoJCWlmIChjb250YWluZXJFbGVtZW50c1tpXS5nZXRGaXJzdCgpID09IGVsZW1l bnQpDQoJCXsNCgkJCWNvbnRhaW5lckVsZW1lbnRzW2ldID0gY29udGFpbmVyRWxlbWVudHNbY29u dGFpbmVyU2l6ZSAtIDFdOw0KCQkJY29udGFpbmVyRWxlbWVudHMucG9wX2JhY2soKTsgICAgICAg ICANCiAgICAgICAgIC8vIFJLOiB3ZSBoYXZlIGRlbGV0ZWQgKHRha2VuIG91dCB0aGUgZWxlbWVu dCBmcm9tIHRoZSBjb250YWluZXIpIG5vdyB3ZSByZXR1cm4uDQogICAgICAgICByZXR1cm47DQog ICAgICAgICAvLyBSSzogVGhpcyBpcyBhIGxvZ2ljIG1pc3Rha2UgeW91IGtlZXAgbG9va2luZyBm b3IgZHVwbGljYXRlcyAod2hhdCBieSBkZXNpZ24gaXMgbm90IGFsbG93ZWQpLi4uDQogICAgICAg ICAvLyAgICAgU2VlIG15IGNvcnJlY3Rpb25zIG9uIHRoZSB0b3AuDQogICAgICAgICAvLwkJCWkg PSBjb250YWluZXJTaXplIC0gMTsNCgkJfQ0KCX0NCn07Cgp0ZW1wbGF0ZTwgY2xhc3MgQ2Fycmlh YmxlT2JqZWN0ID4KQ2FycmlhYmxlT2JqZWN0IENhcnJpZXJDb250YWluZXI8Q2FycmlhYmxlT2Jq ZWN0Pjo6cmVtb3ZlRWxlbWVudCAoIFVJbnQzMiB4UG9zaXRpb24sIFVJbnQzMiB5UG9zaXRpb24g KQp7DQoJVUludDMyIGNvbnRhaW5lclNpemUgPSBjb250YWluZXJFbGVtZW50cy5zaXplKCk7DQoJ Zm9yICggVUludDMyIGkgPSAwOyBpIDwgY29udGFpbmVyU2l6ZTsgaSsrICkNCgl7DQoJCVBvc2l0 aW9uZWRPYmplY3QgY3VycmVudEVsZW1lbnQgPSBjb250YWluZXJFbGVtZW50c1tpXTsNCg0KICAg ICAgaWYgKCBwb2ludEluUmVjdGFuZ2xlKCAgeFBvc2l0aW9uLA0KCQkJCQkJCQl5UG9zaXRpb24s DQoJCQkJCQkJCWN1cnJlbnRFbGVtZW50LmdldFNlY29uZCgpLA0KCQkJCQkJCQljdXJyZW50RWxl bWVudC5nZXRUaGlyZCgpLA0KCQkJCQkJCQljdXJyZW50RWxlbWVudC5nZXRGaXJzdCgpLmdldE9i amVjdFhTaXplKCksDQoJCQkJCQkJCWN1cnJlbnRFbGVtZW50LmdldEZpcnN0KCkuZ2V0T2JqZWN0 WVNpemUoKSkgKQ0KCQl7DQoJCQljb250YWluZXJFbGVtZW50c1tpXSA9IGNvbnRhaW5lckVsZW1l bnRzW2NvbnRhaW5lclNpemUtMV07DQoJCQljb250YWluZXJFbGVtZW50cy5wb3BfYmFjaygpOw0K CQkNCiAgICAgICAgIHJldHVybiBjdXJyZW50RWxlbWVudC5nZXRGaXJzdCgpOw0KCQl9Ow0KCX07 DQoNCiAgIC8vIFJLOiBBcyB5b3Ugc2VlIHdlIGNhbm5vdCBmbGFnIHRoaXMgb25lIGZvciByZW1v dmFsLCBjYXVzZSBpZiB3ZSBkbyBpdCB3ZSBpbnRyb2R1Y2UNCiAgIC8vICAgICBhIHByb2JsZW0g d2hhdCBkbyB3ZSByZXR1cm4/Pz8/IChJcyBpdCBwb2ludGVyPywgaXMgaXQgb2JqZWN0Pywgd2hh dCBpcyBhIG51bGwgb2JqZWN0Pz8/ICkNCiAgIA0KICAgLy8gSWYgdGhpcyBwb2ludCBpcyByZWFj aGVkLCB0aGUgcG9zaXRpb24gaXMgdW5vY2N1cGllZA0KCXRocm93IG5ldyBYRUludmFsaWRQYXJh bWV0ZXIoKTsNCg0KICAgLy8gUks6IEJpZyBwcm9ibGVtLCB5b3UgYXJlIGFzc3VtaW5nIHdlIHdp bGwgY29udGFpbiBwb2ludGVycyAod2hhdCBtYXkgYmUgd3JvbmcpLi4uDQogICAvLyAgICAgQmUg ZXh0cmEgY2FyZWZ1bCB3aXRoIHRlbXBsYXRlcy4gKEluIHNob3J0IHRoaXMgc3RhdGVtZW50IGNh bm5vdCBiZSBoZXJlKQ0KICAgLy8gcmV0dXJuIE5VTEw7DQp9OwoKdGVtcGxhdGU8IGNsYXNzIENh cnJpYWJsZU9iamVjdCA+ClV0aWxpdHk6OkJvb2wgQ2FycmllckNvbnRhaW5lcjxDYXJyaWFibGVP YmplY3Q+OjpjYW5BZGRFbGVtZW50ICggQ2FycmlhYmxlT2JqZWN0IGVsZW1lbnQsIEludDMyIHhQ b3NpdGlvbiwgSW50MzIgeVBvc2l0aW9uICkKew0KCWlmICghIGNhbldlYWtBZGRFbGVtZW50KGVs ZW1lbnQsIHhQb3NpdGlvbiwgeVBvc2l0aW9uKSkgDQogICAgICByZXR1cm4gZmFsc2U7DQoJDQog ICByZXR1cm4gdXNlckRlZmluZWRFbGVtZW50QWNjZXB0KGVsZW1lbnQsIFBvc2l0aW9uVHVwbGUo eFBvc2l0aW9uLCB5UG9zaXRpb24pKTsNCn07Cgp0ZW1wbGF0ZTwgY2xhc3MgQ2FycmlhYmxlT2Jq ZWN0ID4KVXRpbGl0eTo6Qm9vbCBDYXJyaWVyQ29udGFpbmVyPENhcnJpYWJsZU9iamVjdD46OmNh bkFkZEVsZW1lbnQgKCBDYXJyaWFibGVPYmplY3QgZWxlbWVudCwgdHlwZW5hbWUgQ2FycmllckNv bnRhaW5lcjxDYXJyaWFibGVPYmplY3Q+OjpQb3NpdGlvblR1cGxlIHBvc2l0aW9uICkKew0KCWlm IChwb3NpdGlvbiA9PSBhbnl3aGVyZSkgDQogICAgICAvLyBSSzogVXNlICE9IGluc3RlYWQsIHRo ZSAhIGF0IHRoZSBzdGFydCBjYW4gYmUgbmVnbGVjdGVkIHdoZW4gcmVhZGluZyBiZWNhdXNlDQog ICAgICAvLyAgICAgdGhlIHN0YXRlbWVudCBpcyBsb25nLiBJIGtub3cgdGhlcmUgYXJlIGNhc2Vz IHRoYXQgaXQgaXMgaW1wb3NpYmxlIHRvIGRvIHNvDQogICAgICAvLyAgICAgYnV0IGluIHRoaXMg Y2FzZSB5b3UgZ2FpbiByZWFkYWJpbGl0eSB3aXRob3V0IG1ha2luZyB0aGluZ3MgY29tcGxleC4N CiAgICAgIHJldHVybiAoISh0aGlzLT5maW5kRWxlbWVudFBvc2l0aW9uKGVsZW1lbnQpID09IG51 bGxQb3NpdGlvbikpOw0KCWVsc2UgDQogICAgICByZXR1cm4gY2FuQWRkRWxlbWVudCggZWxlbWVu dCwgcG9zaXRpb24uZ2V0Rmlyc3QoKSwgcG9zaXRpb24uZ2V0U2Vjb25kKCkgKTsNCn07Cgp0ZW1w bGF0ZTwgY2xhc3MgQ2FycmlhYmxlT2JqZWN0ID4KVXRpbGl0eTo6U3RyaW5nIENhcnJpZXJDb250 YWluZXI8Q2FycmlhYmxlT2JqZWN0Pjo6Z2V0Q29udGFpbmVyTmFtZSAoKQp7DQoJcmV0dXJuIG5h bWU7DQp9OwoKdGVtcGxhdGU8IGNsYXNzIENhcnJpYWJsZU9iamVjdCA+ClV0aWxpdHk6OlVJbnQz MiBDYXJyaWVyQ29udGFpbmVyPENhcnJpYWJsZU9iamVjdD46OmdldENvbnRhaW5lck5hbWVIYXNo ICgpCnsNCglyZXR1cm4gbmFtZUhhc2g7DQp9OwoKdGVtcGxhdGU8IGNsYXNzIENhcnJpYWJsZU9i amVjdCA+ClV0aWxpdHk6OlJlYWwgQ2FycmllckNvbnRhaW5lcjxDYXJyaWFibGVPYmplY3Q+Ojpn ZXRDdXJyZW50VG90YWxXZWlnaHQgKCkKew0KCVJlYWwgcmV0dXJuVmFsdWUgPSAwOw0KDQogICBV SW50MzIgY29udGFpbmVyU2l6ZSA9IGNvbnRhaW5lckVsZW1lbnRzLnNpemUoKTsNCiAgIGZvciAo VUludDMyIGkgPSAwOyBpIDwgY29udGFpbmVyU2l6ZTsgaSsrKQ0KCQlyZXR1cm5WYWx1ZSArPSBj b250YWluZXJFbGVtZW50c1tpXS5nZXRGaXJzdCgpLmdldE9iamVjdFdlaWdodCgpOw0KDQogICBy ZXR1cm4gcmV0dXJuVmFsdWU7DQp9OwoKdGVtcGxhdGU8IGNsYXNzIENhcnJpYWJsZU9iamVjdCA+ CnR5cGVuYW1lIENhcnJpZXJDb250YWluZXI8Q2FycmlhYmxlT2JqZWN0Pjo6SXRlcmF0b3IgQ2Fy cmllckNvbnRhaW5lcjxDYXJyaWFibGVPYmplY3Q+OjpnZXRDb250YWluZXJCZWdpbiAoKQp7DQoJ cmV0dXJuIGNvbnRhaW5lckVsZW1lbnRzLmJlZ2luKCk7DQp9OwoKdGVtcGxhdGU8IGNsYXNzIENh cnJpYWJsZU9iamVjdCA+CnR5cGVuYW1lIENhcnJpZXJDb250YWluZXI8Q2FycmlhYmxlT2JqZWN0 Pjo6SXRlcmF0b3IgQ2FycmllckNvbnRhaW5lcjxDYXJyaWFibGVPYmplY3Q+OjpnZXRDb250YWlu ZXJFbmQgKCkKew0KCXJldHVybiBjb250YWluZXJFbGVtZW50cy5lbmQoKTsNCn07Cgp0ZW1wbGF0 ZTwgY2xhc3MgQ2FycmlhYmxlT2JqZWN0ID4KdHlwZW5hbWUgQ2FycmllckNvbnRhaW5lcjxDYXJy aWFibGVPYmplY3Q+OjpQb3NpdGlvblR1cGxlIENhcnJpZXJDb250YWluZXI8Q2FycmlhYmxlT2Jq ZWN0Pjo6ZmluZEVsZW1lbnRQb3NpdGlvbiAoIENhcnJpYWJsZU9iamVjdCBlbGVtZW50ICkKew0K CWZvciAoVUludDMyIHggPSAwOyB4ICE9IG1heFhTaXplOyB4KyspDQogICB7DQogICAJZm9yIChV SW50MzIgeSA9IDA7IHkgIT0gbWF4WVNpemU7IHkrKykNCiAgICAgIHsNCiAgICAgICAgIGlmIChj YW5BZGRFbGVtZW50KGVsZW1lbnQsIHgsIHkpKQ0KCQkgICAJcmV0dXJuIFBvc2l0aW9uVHVwbGUo eCwgeSk7DQogICAgICB9DQogICB9Ow0KDQoJcmV0dXJuIG51bGxQb3NpdGlvbjsNCn07DQoNCg0K dGVtcGxhdGU8IGNsYXNzIENhcnJpYWJsZU9iamVjdCA+ClV0aWxpdHk6OkJvb2wgQ2FycmllckNv bnRhaW5lcjxDYXJyaWFibGVPYmplY3Q+Ojp1c2VyRGVmaW5lZEVsZW1lbnRBY2NlcHQgKCBDYXJy aWFibGVPYmplY3QgZWxlbWVudCwgdHlwZW5hbWUgQ2FycmllckNvbnRhaW5lcjxDYXJyaWFibGVP YmplY3Q+OjpQb3NpdGlvblR1cGxlIHBvc2l0aW9uICkKew0KCXJldHVybiB0cnVlOw0KfTsKCgoK Ci8vISAgIEBicmllZiBUaGlzIGludGVyZmFjZSBpcyBpbmhlcml0ZWQgYnkgYW55IG9iamVjdCB0 aGF0IGNhbiBjYXJyeSBvciBzdG9yZSBvYmplY3RzIGxpa2UgR2VuZXJhbCBTdG9yZXMsIEFpcmNy YWZ0cywgU29sZGllcnMsIGV0Yy4KLy8hICAgQHBhciBUaGUgY2FycmllciBpbnRlcmZhY2Ugd2ls bCBkZWZpbmUgYWxsIHRoZSBuZWNlc2FyeSBtZXRob2RzIHRvIG1hbmlwdWxhdGUgCi8vISAgICAg ICAgdGhlIGNvbnRhaW5lcnMgdGhhdCBldmVyeSBjYXJyaWVyIG9iamVjdCB3aWxsIGhhdmUuIAov LyEgICBAcGFyIEF0IHRoZSBjb25zdHJ1Y3Rpb24gb2YgdGhlIG9iamVjdCB0aGUgaW50ZXJuYWxD YXJyaWVySW5pdCB2aXJ0dWFsIG1ldGhvZAovLyEgICAgICAgIHdpbGwgYmUgY2FsbGVkIGFuZCB0 aGUgY2FycmllciB3aWxsIGluaXRpYWxpemUgaXRzZWxmLCBiYXNlZCBvbiB0aGUgY29udGFpbmVy cwovLyEgICAgICAgIHRoYXQgaXQgaXMgYWxsb3dlZCB0byB1c2UuCi8vISAgIEBub3RlIEl0IHdv dWxkIGJlIGludGVyZXN0aW5nIHRvIGJlIGFibGUgdG8gaW5pdGlhbGl6ZSB0aGlzIHZhbHVlcyBm cm9tIGFuIHNjcmlwdCBvciB2aWEgCi8vISAgICAgICAgYW4gc3BlY2lhbCBmaWxlLCBiZWNhdXNl IG9mIHRoYXQgYW55IGNhcnJpZXIgb2JqZWN0IHdpbGwgaGF2ZSBhIGNsYXNzIG5hbWUuIEZvciBp bnN0YW5jZQovLyEgICAgICAgIGEgc29sZGllciBmaWxlIHdpbGwgYmUgYXNzb2NpYXRlZCB0byBp dHMgY29uZmlndXJhdGlvbiB2aWEgYSAiU29sZGllciIgbmFtZS4gVGhlIG5hbWUgb2YgdGhlCi8v ISAgICAgICAgY2xhc3MgY2FuIGJlIHJldHJpZXZlZCB2aWEgaXRzIEMrKyBSVFRJIGluZm9ybWF0 aW9uLgovLyEgICBAcmVtYXJrIEV2ZXJ5IGNhcnJpYWJsZSBvYmplY3QgbXVzdCBoYXZlIG9ubHkg b25lIElDYXJyaWVyIGFzc29jaWF0ZWQgYXMgYSBwYXJlbnQuCnRlbXBsYXRlPCBjbGFzcyBDYXJy aWFibGVPYmplY3QgPgpjbGFzcyBJQ2Fycmllcgp7CnB1YmxpYzoKCiAgIHR5cGVkZWYgdHlwZW5h bWUgQ2FycmllckNvbnRhaW5lcjxDYXJyaWFibGVPYmplY3Q+OjpSZWZlcmVuY2UgQ29udGFpbmVy UmVmZXJlbmNlOwoKICAgQ29udGFpbmVyUmVmZXJlbmNlIGdldENhcnJpZXJDb250YWluZXJCeU5h bWUgKCBVdGlsaXR5OjpTdHJpbmcgbmFtZSApOwoKcHJvdGVjdGVkOgoKICAgLy8hIEBicmllZiBU aGlzIGlzIHRoZSBpbml0aWFsaXphdGlvbiBtZXRob2QgdGhhdCB3ZSB3aWxsIGhhdmUgdG8gb3Zl cnJpZGUgdG8gbW9kaWZ5IHRoZQogICAvLyEgaW5pdGlhbGl6YXRpb24gcHJvY2Vzcy4KICAgdmly dHVhbCB2b2lkIGluaXRpYWxpemVDYXJyaWVyICgpOwoKICAgc3RkOjptYXA8IFV0aWxpdHk6OlN0 cmluZywgQ29udGFpbmVyUmVmZXJlbmNlID4gY2FycmllckNvbnRhaW5lcnM7Cgp9OwoKCnRlbXBs YXRlPCBjbGFzcyBDYXJyaWFibGVPYmplY3QgPgp0eXBlbmFtZSBJQ2FycmllcjxDYXJyaWFibGVP YmplY3Q+OjpDb250YWluZXJSZWZlcmVuY2UgSUNhcnJpZXI8Q2FycmlhYmxlT2JqZWN0Pjo6Z2V0 Q2FycmllckNvbnRhaW5lckJ5TmFtZSAoIFV0aWxpdHk6OlN0cmluZyBuYW1lICkKewogICBDb250 YWluZXJSZWZlcmVuY2UgYXV4ICggY2FycmllckNvbnRhaW5lcnMuZmluZCAoIG5hbWUgKSApOwoK ICAgLy8gI1BSRUNPTkRJVElPTkJFR0lOCiAgIGlmICggYXV4ID09IE5VTEwgKQogICAgICB0aHJv dyBuZXcgWEVJbnZhbGlkUGFyYW1ldGVyICgpOwogICAvLyAjUFJFQ09ORElUSU9ORU5ECgogICBy ZXR1cm4gYXV4OwoKfTsgCgp0ZW1wbGF0ZTwgY2xhc3MgQ2FycmlhYmxlT2JqZWN0ID4Kdm9pZCBJ Q2FycmllcjxDYXJyaWFibGVPYmplY3Q+Ojppbml0aWFsaXplQ2FycmllciAoKQp7fTsKCgoKCX07 IC8vIEJlaGF2aW9yCn07IC8vIFhlbm9jaWRlCgoKI2VuZGlmCg== |